Received: by 2002:a05:6a10:1d13:0:0:0:0 with SMTP id pp19csp3912789pxb; Mon, 30 Aug 2021 13:49:47 -0700 (PDT) X-Google-Smtp-Source: ABdhPJy0BLwouEp2LEe4T4unlpnwmOpDtyYuIUyS/h0xQKcb3M+G30VE8hfOVl8oITn+XaiwD/eb X-Received: by 2002:a05:6638:419a:: with SMTP id az26mr283693jab.70.1630356587036; Mon, 30 Aug 2021 13:49:47 -0700 (PDT) ARC-Seal: i=2; a=rsa-sha256; t=1630356587; cv=pass; d=google.com; s=arc-20160816; b=eatpIrTzd6hPcEDuiAvws8DezfbWfdUoasIHCAJG3/kB1oiYLtCENUpnJo4XeoXZh7 po7UMko0FnpgJUOMvpQcEGWswr8sPauoGkmRiGtNzOwYEuahtk4v15+6MgxbqDo9TfH5 Zb1C2rZDSV2sf/rKAHJinmCcNIlzsDOI+lZIE0AH+LAfFdUZ4pytG07itB+t061ep1gw xP4da5Y4/rCxPPYRYM08F2fC8Olf+YVEoFsJfaw0qhNrzsixjorRs+MFTo9p7uCcvN1X JhlLPnXTWNekCL3ONmh8P113tEniSYGz0EIK5mjjPUDKoFfXe7w6nPvN+RH0kbzqxuIY NJUQ== ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:mime-version:content-transfer-encoding :content-language:accept-language:in-reply-to:references:message-id :date:thread-index:thread-topic:subject:cc:to:from:dkim-signature; bh=VDsllunSN8Y6lI6hCFwxt+kp3lf8ASGyeDpVFto9VTI=; b=h6IOa801UzFJy2/Uk9TL3yz3/mvCE0vUvCQ3dc2+DohuDC8ZSAu7AAfmR/Kulv+MJo CcUgSi8Uf2nHFsVPvqJvg+bx0BJkENuk9zg4sVseQOr/1kAoCO3bfbM2DSRwGxirI/jM OFZmOX1q0i++wC/ZHtVWmdCnWjRTwRp5m3W+sSoYjowScw1Ffm1+6PiMXvOhz7VYb9QK fPL/lkwI/VO1cIz/v8TsGqV9nyQrmADnXW4Yz2yWP1eJBjrOVqrpgtvpJpU0dhAVbloN p4kyvLoNs9GKq9pCqh78LriGOrcu6vhOdte7fYaFMipWrrWw+7Ah2Ot6c8pjOAe51L+j /6Xg== ARC-Authentication-Results: i=2; mx.google.com; dkim=pass header.i=@sony.com header.s=S1 header.b=P9lCmsp+; arc=pass (i=1 spf=pass spfdomain=sony.com dkim=pass dkdomain=sony.com dmarc=pass fromdomain=sony.com); spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=sony.com Return-Path: Received: from vger.kernel.org (vger.kernel.org. [23.128.96.18]) by mx.google.com with ESMTP id i11si15535571ilm.28.2021.08.30.13.49.35; Mon, 30 Aug 2021 13:49:47 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) client-ip=23.128.96.18; Authentication-Results: mx.google.com; dkim=pass header.i=@sony.com header.s=S1 header.b=P9lCmsp+; arc=pass (i=1 spf=pass spfdomain=sony.com dkim=pass dkdomain=sony.com dmarc=pass fromdomain=sony.com); spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=sony.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S235334AbhH3Usf (ORCPT + 99 others); Mon, 30 Aug 2021 16:48:35 -0400 Received: from mx08-001d1705.pphosted.com ([185.183.30.70]:58448 "EHLO mx08-001d1705.pphosted.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S229708AbhH3Use (ORCPT ); Mon, 30 Aug 2021 16:48:34 -0400 X-Greylist: delayed 2322 seconds by postgrey-1.27 at vger.kernel.org; Mon, 30 Aug 2021 16:48:33 EDT Received: from pps.filterd (m0209321.ppops.net [127.0.0.1]) by mx08-001d1705.pphosted.com (8.16.1.2/8.16.0.43) with SMTP id 17UJOndD013387; Mon, 30 Aug 2021 20:08:51 GMT DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=sony.com; h=from : to : cc : subject : date : message-id : references : in-reply-to : content-type : content-transfer-encoding : mime-version; s=S1; bh=VDsllunSN8Y6lI6hCFwxt+kp3lf8ASGyeDpVFto9VTI=; b=P9lCmsp+xCY/xC/nqIz/uoKekKkRT5Voja4Iir7ZmwgEtiwwHnafqpS8eJ7H/O6Up+zC 8sV1wV09NptBGLZd9lzA7wQRJGq3zA/9ecS4ZKEygxesNQl1f8HQAcMQcBzGpw2TFVY9 sjMq4agMt1JDFsBXz34HF+f4H1zty6FjaQzX9BDL6YrEM6i1UbL2BMn18EiieLzhNVXE vtZGa5f7tqpF4IrQN1PcKnV+5OFNun5Xtmog1+Uvh/y/FiMzlHhNSfa6S6KAZNV6TWfb E2/ZIe+KNkjqAXY9eAQtMDFCTzOQVtIP5n/BgB/NtaiCteSP+lHP2L+vPfbyrvnAcKSt Aw== Received: from nam04-dm6-obe.outbound.protection.outlook.com (mail-dm6nam08lp2045.outbound.protection.outlook.com [104.47.73.45]) by mx08-001d1705.pphosted.com with ESMTP id 3arpbgs58n-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Mon, 30 Aug 2021 20:08:50 +0000 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=C6wy+nKG8weRCVG1L7ndCwO/bL2dOJfsRP8URpfdwTjbpIK2FrYscdOVcSDyZPkf2hmH7XblmcghiAWt3wF1RtDFXQ8KXVCJcM24PFZurs2b+zatIIpipUHps4a1QGk+hChrnBZ5WmJpNSKm3/aQOPzHhiGn37SbIgPPAOCHMal8oGMqujjjvPgPQyzWnd7q4FJpmGteAxCzWs1F4LN30AJ61fxxuINviX6Ox7HXPkkILn6+ePJA5QDgSQ0F4RuzT1BU3kMvwT9gPAWTnqCmBMiYMg2nvHDbaTsy1Xf92g3jOOBerR7jMOk/Tkuf5BQzu9PUb2n9CqG+cKJuWlao9g== 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; bh=VDsllunSN8Y6lI6hCFwxt+kp3lf8ASGyeDpVFto9VTI=; b=m1ruODjDgygaan6acF9JGIDpyMyqI4MJqoD84nL+s4QYL4IrEINDLH6bCvT8DSYFwftvZSBmxZjhgpUhGRkRN6enWYX1sQyf2imfGrxHrATcIRaW6L2HGm/ymRtFsM8menzlNkgC/PHT/UVuC98SHu20m79BWovLSd/abnD2BPqnMmNItaG7M3Mep117UvI6mPA390weFWZydhL/NaD1B9wQBbXjup89iB4slpfM+EJCkjZYhavVfmIMfVBH3xO+TYpB0CVzuMsEC1qR+fuLAnzdIDDjyRxYiyfvZZ/eRfOZfT2GQ+V1AwLD75tmCEfn0vilEHAIEHMmdcGjDmOmLg== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=sony.com; dmarc=pass action=none header.from=sony.com; dkim=pass header.d=sony.com; arc=none Received: from BYAPR13MB2503.namprd13.prod.outlook.com (2603:10b6:a02:cd::33) by BYAPR13MB2360.namprd13.prod.outlook.com (2603:10b6:a02:cc::16) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4478.9; Mon, 30 Aug 2021 20:08:45 +0000 Received: from BYAPR13MB2503.namprd13.prod.outlook.com ([fe80::5190:4162:72e8:7998]) by BYAPR13MB2503.namprd13.prod.outlook.com ([fe80::5190:4162:72e8:7998%7]) with mapi id 15.20.4478.017; Mon, 30 Aug 2021 20:08:45 +0000 From: To: , CC: , , , , , Subject: RE: [PATCH v2] kunit: tool: improve compatibility of kunit_parser with KTAP specification Thread-Topic: [PATCH v2] kunit: tool: improve compatibility of kunit_parser with KTAP specification Thread-Index: AQHXmrRN8NRAwq5kvUSkDB+8cIgfuKuGdHaAgAYGL4CAAAPbcA== Date: Mon, 30 Aug 2021 20:08:45 +0000 Message-ID: References: <20210826195505.3066755-1-rmoar@google.com> In-Reply-To: Accept-Language: en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: x-ms-publictraffictype: Email x-ms-office365-filtering-correlation-id: 3cf47ecb-cc29-4746-b328-08d96bf1f8d7 x-ms-traffictypediagnostic: BYAPR13MB2360: x-microsoft-antispam-prvs: x-ms-oob-tlc-oobclassifiers: OLM:8273; x-ms-exchange-senderadcheck: 1 x-ms-exchange-antispam-relay: 0 x-microsoft-antispam: BCL:0; x-microsoft-antispam-message-info: 7W/1pk4NqZJ7PI3dse3JU1MhWC7ssFuOyjk7s+9dkLpFvnUAc/5TtGOGos+39Ptjjdce1Gxqyp0Wr3vxF/jOUmXMeieQ2DuHsPyRmXZD5NRK4mhnbg83mL6mZ3YIo52uAzTIIZmStGaVDtacFoaUVdBRxU3MTXJIygsfOdpo5jEXupG1TVfQq+qdCEfvAQBxUtkUfkgr6crwiGeKdfzsX/2yfcWe+znTfxUKG8fjQfHhT58NG6P+Lqha9kUr/NMd2MnXesq41GqsngENv6VM0ikEqciTGqzL6ZZPG5QUH4UWYAM3WX3U5AOXK0HChvhYQpRKtBlht1RKcjxkJnwczlBCXahFhHPqVR+p8by8XNqUVENVFn2NRr/lCfyU/mdEHqeAEykw2/OxJJeoAy+sLJ5te9mlbs/AS2eXxPP+fpSJgo4WvA7fJ5tFzqNe4hwIyx9dw9jHrfKEfKDHiOKN7L5Z+0+jkz9XGrodlVyS2CZZ+31Hmxfhtu5qhV/oztiBWR9jXH8wBbSvEVHmjm8p3+ef0ac3Ityc0G2uCG7Edlba45HXsNqbddn02tYu+/9depRslsjT7Papyjdt7xJmzQvJqKBEnuqLEeOlwrO9RnT7XqoRgZ6xSmufm9B820G00nSUQATdAUyb9t3xtYL4pxTWfJKuv7ZmF3DnNluDTxLmHidwZwPaO+i8IBzJOG3aUaPnAphLoJTbxErwoYecybZ1bge0A6K+LiYOHeNb4J1n9UPySfQukJs9vx1rc9fLOGqp53objlESVMQZlzIBEfef3SzXkjthyHkU4RDWTLGpRp9H5FN6TiuLoKaqEidAsk77vJgHfWVECgZxgm8qAQ== x-forefront-antispam-report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:BYAPR13MB2503.namprd13.prod.outlook.com;PTR:;CAT:NONE;SFS:(4636009)(366004)(86362001)(64756008)(66476007)(316002)(66446008)(66556008)(83380400001)(66946007)(76116006)(122000001)(38070700005)(52536014)(54906003)(2906002)(5660300002)(110136005)(4326008)(508600001)(6506007)(53546011)(7696005)(33656002)(186003)(71200400001)(26005)(30864003)(8676002)(9686003)(38100700002)(55016002)(966005)(8936002)(559001)(579004);DIR:OUT;SFP:1102; x-ms-exchange-antispam-messagedata-chunkcount: 1 x-ms-exchange-antispam-messagedata-0: =?utf-8?B?T2h0d09RbXpyNmo5OVpmaGNxSmlTOEduNWtxelFsdjNFaGlQMXRzaDBNZ3Yv?= =?utf-8?B?WHVFVWxoakRBTFFoYkY1SHZpMHFkdVNjSUZIZ25tVVZPUDhFRDRxWHpXYkpl?= =?utf-8?B?SjhjVkVlck1NMDcvY1Vlek8ySVVENTZrKzh2N3FMS20vd1NjV2VFNThjdE5r?= =?utf-8?B?Z0xhdWcyUnd2bzR4VW5NeG9DRmVVSkdZVG4wNXd2Q3UrOEVDNnBZTEpqQ0JR?= =?utf-8?B?Ri9razZES2dWbWh4WWhpU0N6ZjZtSkF3SWJLT2NuVzlFQ3ErSlBKRTNDaElp?= =?utf-8?B?YzBJYkJyMmtRZERNUHdrVjlRR1JlUDZlYmhQMUhodGh3UEE0REs2ZEovV245?= =?utf-8?B?aEdSdnhTNktyTngySmt3dm03RGtjWFRJalUydVVhaU95V0RuNGQ1NHJsR2NM?= =?utf-8?B?cU5POXlKM3F4Z1RTeFJqRW42YlgyZkpKUHI5V01md0U1d3MyZy92WFVEc2RU?= =?utf-8?B?QWlpYXBSVWowN0JxLyt3OGl5YXorcG9uMU9CdnNVZi9ra0xWQ2xRcXNRSjZ0?= =?utf-8?B?dXg1YytreFFURUZIdnJiRC81RTZIWmVMWXFhc0VTdWlwaUV4SHpZQkdaU1RY?= =?utf-8?B?eThRWFdKOGlobzRLaGpCb1kzRUltNGRBSmttb3ppQjRGNWFJU01pOEZmQk9h?= =?utf-8?B?WEdCcjluTUpMOHpUU0NwY21DY0hUZG1yR0cyMzU0cG5EUjhxN1Y1K3NjczJC?= =?utf-8?B?TGx6NGtGWFhZL0R5d1lpVmYzbDRPa0E2eks1RXZtTDNvTkNaQVh6Vkp5akV5?= =?utf-8?B?VjRudCszZm1WZnZBNmx1aWR3bUttbUhZMExiajNObFVXS2ljUHVrMEk4ckFS?= =?utf-8?B?Z0V1bmFOSjZzTmZzakovd0JDRFkzdGJEUDFxcmRHZlZ6cFBxWXhKZDlNM2J1?= =?utf-8?B?ZzJsK3BxaUxabEM5cEE3STdIQkk3SmJtam9WTnBxMUo1TTN4N3Z5aEdySnJ6?= =?utf-8?B?bUlTYU1jUGsxRm9udVpjcDkwdTVXNlJrNkxRRFBSdnNQelgwTndJK3dkenll?= =?utf-8?B?aHVVbWNjc09VN3RJc2hETWVyZWFDNWNrMFBkMkNPUVIxZEVMUkU2YVFwMDhs?= =?utf-8?B?eWxDYmh6THgreVdTWDFPMng5MUh1NE5YVHk2SnVZTEROTTdmRzBlUzBoTXJP?= =?utf-8?B?ZUJWRERmVUlDWmpyRXo4bUxEemNRbTZUUXVVbndkNmtNeFB1SHJDTU5RcWpq?= =?utf-8?B?TlZBZFk1QVRDdmNEUjdqdmRiK1NTdkxzMmhWSXQxaTJsVUd2dnhRL0xuM3Vw?= =?utf-8?B?WnlFTmUveEY3NXh3TUJiSkZGV2dyVEZwZDI1aWJnNDdlU3p2b3FBU0pmTi9k?= =?utf-8?B?M2pTc1ViT1Zhd3B4TXJEOG9ZS1FJejJuZXQzZnpUUVFsT2NkZ05OU0xDRU95?= =?utf-8?B?T0FRdk1LV3NGVE80TnhzbklVVk5DVmNEVGpZd0dSUXRPUUpTZkxUZnd5VU0x?= =?utf-8?B?MXRsS3N6RUFUWlpVSXR4MGhWdHgvblFUQmhBVVZIc001dUVZdnppczRwcUxQ?= =?utf-8?B?WHQraHdsUnZzVU1LeHpTcmFjT3A5Y2NsTXM1OERPcjY2c0RDUytUYk45a0NW?= =?utf-8?B?dFVlZUZKQktCSG1TZncvWWVVTm9iUTdXOWRvRHYwNnNJaDR3eXNLYTdVemxR?= =?utf-8?B?a0RSNCtsUHp6WjFNMW1POGhBVk5OZllUaG81N09QZkx4MVQ3aFJxcW1IbzU1?= =?utf-8?B?VTlXRTcrY3FLOE44Zzdnbzg0dDVjbURsS243QzY4di93a2VXc1kwanlLZ1pP?= =?utf-8?Q?I2XMGXLQOKDiyptcONVZD+qQzu8/fjwU+1P8j+T?= x-ms-exchange-transport-forked: True Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 MIME-Version: 1.0 X-OriginatorOrg: sony.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-AuthSource: BYAPR13MB2503.namprd13.prod.outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: 3cf47ecb-cc29-4746-b328-08d96bf1f8d7 X-MS-Exchange-CrossTenant-originalarrivaltime: 30 Aug 2021 20:08:45.3892 (UTC) X-MS-Exchange-CrossTenant-fromentityheader: Hosted X-MS-Exchange-CrossTenant-id: 66c65d8a-9158-4521-a2d8-664963db48e4 X-MS-Exchange-CrossTenant-mailboxtype: HOSTED X-MS-Exchange-CrossTenant-userprincipalname: 39LTGAgLYX6hP33/FMvsH9fgoyGxK83tozwZpiXIobgvFRuAWZVL/h1i+7p4rRd+jTgA1jlwfWovWUU9mXleoQ== X-MS-Exchange-Transport-CrossTenantHeadersStamped: BYAPR13MB2360 X-Proofpoint-GUID: 8z9Ppr1RXqoQU2gZ4n-Sg22YLMqbftT1 X-Proofpoint-ORIG-GUID: 8z9Ppr1RXqoQU2gZ4n-Sg22YLMqbftT1 X-Sony-Outbound-GUID: 8z9Ppr1RXqoQU2gZ4n-Sg22YLMqbftT1 X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.182.1,Aquarius:18.0.790,Hydra:6.0.391,FMLib:17.0.607.475 definitions=2021-08-30_06,2021-08-30_01,2020-04-07_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 mlxscore=0 bulkscore=0 priorityscore=1501 clxscore=1015 lowpriorityscore=0 malwarescore=0 phishscore=0 adultscore=0 impostorscore=0 spamscore=0 mlxlogscore=999 suspectscore=0 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.12.0-2107140000 definitions=main-2108300129 Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org DQoNCj4gLS0tLS1PcmlnaW5hbCBNZXNzYWdlLS0tLS0NCj4gRnJvbTogUmFlIE1vYXIgPHJtb2Fy QGdvb2dsZS5jb20+DQo+IA0KPiBPbiBUaHUsIEF1ZyAyNiwgMjAyMSBhdCA3OjQ5IFBNIERhbmll bCBMYXR5cG92IDxkbGF0eXBvdkBnb29nbGUuY29tPiB3cm90ZToNCj4gPg0KPiA+IE9uIFRodSwg QXVnIDI2LCAyMDIxIGF0IDEyOjU1IFBNICdSYWUgTW9hcicgdmlhIEtVbml0IERldmVsb3BtZW50 DQo+ID4gPGt1bml0LWRldkBnb29nbGVncm91cHMuY29tPiB3cm90ZToNCj4gPiA+DQo+ID4gPiBV cGRhdGUgdG8ga3VuaXRfcGFyc2VyIHRvIGltcHJvdmUgY29tcGF0aWJpbGl0eSB3aXRoIEtUQVAN Cj4gPiA+IHNwZWNpZmljYXRpb24gaW5jbHVkaW5nIGFyYml0cmFyaWx5IG5lc3RlZCB0ZXN0cy4g UGF0Y2ggYWNjb21wbGlzaGVzDQo+ID4gPiB0aHJlZSBtYWpvciBjaGFuZ2VzOg0KPiA+ID4NCj4g PiA+IC0gVXNlIGEgZ2VuZXJhbCBUZXN0IG9iamVjdCB0byByZXByZXNlbnQgYWxsIHRlc3RzIHJh dGhlciB0aGFuIFRlc3RDYXNlDQo+ID4gPiBhbmQgVGVzdFN1aXRlIG9iamVjdHMuIFRoaXMgYWxs b3dzIGZvciBlYXNpZXIgaW1wbGVtZW50YXRpb24gb2YgYXJiaXRyYXJ5DQo+ID4gPiBsZXZlbHMg b2YgbmVzdGVkIHRlc3RzIGFuZCBwcm9tb3RlcyB0aGUgaWRlYSB0aGF0IGJvdGggdGVzdCBzdWl0 ZXMgYW5kIHRlc3QNCj4gPiA+IGNhc2VzIGFyZSB0ZXN0cy4NCj4gPiA+DQo+ID4gPiAtIFByaW50 IGVycm9ycyBpbmNyZW1lbnRhbGx5IHJhdGhlciB0aGFuIGFsbCBhdCBvbmNlIGFmdGVyIHRoZQ0K PiA+ID4gcGFyc2luZyBmaW5pc2hlcyB0byBtYXhpbWl6ZSBpbmZvcm1hdGlvbiBnaXZlbiB0byB0 aGUgdXNlciBpbiB0aGUNCj4gPiA+IGNhc2Ugb2YgdGhlIHBhcnNlciBnaXZlbiBpbnZhbGlkIGlu cHV0IGFuZCB0byBpbmNyZWFzZSB0aGUgaGVscGZ1bG5lc3MNCj4gPiA+IG9mIHRoZSB0aW1lc3Rh bXBzIGdpdmVuIGR1cmluZyBwcmludGluZy4gTm90ZSB0aGF0IGt1bml0LnB5IHBhcnNlIGRvZXMN Cj4gPiA+IG5vdCBwcmludCBpbmNyZW1lbnRhbGx5IHlldC4gSG93ZXZlciwgdGhpcyBmaXggYnJp bmdzIHVzIGNsb3NlciB0bw0KPiA+ID4gdGhpcyBmZWF0dXJlLg0KPiA+ID4NCj4gPiA+IC0gSW5j cmVhc2UgY29tcGF0aWJpbGl0eSBmb3IgZGlmZmVyZW50IGZvcm1hdHMgb2YgaW5wdXQuIEFyYml0 cmFyeSBsZXZlbHMNCj4gPiA+IG9mIG5lc3RlZCB0ZXN0cyBzdXBwb3J0ZWQuIEFsc28sIHRlc3Qg Y2FzZXMgYW5kIHRlc3Qgc3VpdGVzIGFyZSBub3cNCj4gPiA+IHN1cHBvcnRlZCB0byBiZSBwcmVz ZW50IG9uIHRoZSBzYW1lIGxldmVsIG9mIHRlc3RpbmcuDQo+ID4gPg0KPiA+ID4gVGhpcyBwYXRj aCBub3cgaW1wbGVtZW50cyB0aGUgS1RBUCBzcGVjaWZpY2F0aW9uIGFzIGRlc2NyaWJlZCBoZXJl Og0KPiA+ID4gaHR0cHM6Ly9sb3JlLmtlcm5lbC5vcmcvbGludXgta3NlbGZ0ZXN0L0NBK0dKb3Y2 dGRqdlk5eDEySnNKVDE0cW42YzdOVmlKeHFhSmsrci1LMVlKelBnZ0ZEUUBtYWlsLmdtYWlsLmNv bS8uDQo+ID4gPg0KPiA+ID4gVGhpcyBwYXRjaCBhZGp1c3RzIHRoZSBrdW5pdF90b29sX3Rlc3Qu cHkgZmlsZSB0byBjaGVjayBmb3INCj4gPiA+IHRoZSBjb3JyZWN0IG91dHB1dHMgZnJvbSB0aGUg bmV3IHBhcnNlciBhbmQgYWRkcyBhIG5ldyB0ZXN0IHRvIGNoZWNrDQo+ID4gPiB0aGUgcGFyc2lu ZyBmb3IgYSBLVEFQIHJlc3VsdCBsb2cgd2l0aCBjb3JyZWN0IGZvcm1hdCBmb3IgbXVsdGlwbGUg bmVzdGVkDQo+ID4gPiBzdWJ0ZXN0cyAodGVzdF9pc190ZXN0X3Bhc3NlZC1hbGxfcGFzc2VkX25l c3RlZC5sb2cpLg0KPiA+ID4NCj4gPiA+IFRoaXMgcGF0Y2ggYWxzbyBhbHRlcnMgdGhlIGt1bml0 X2pzb24ucHkgZmlsZSB0byBhbGxvdyBmb3IgYXJiaXRyYXJpbHkNCj4gPiA+IG5lc3RlZCB0ZXN0 cy4NCj4gPiA+DQo+ID4gPiBTaWduZWQtb2ZmLWJ5OiBSYWUgTW9hciA8cm1vYXJAZ29vZ2xlLmNv bT4NCj4gPiA+IFJldmlld2VkLWJ5OiBCcmVuZGFuIEhpZ2dpbnMgPGJyZW5kYW5oaWdnaW5zQGdv b2dsZS5jb20+DQo+ID4NCj4gPiBBY2tlZC1ieTogRGFuaWVsIExhdHlwb3YgPGRsYXR5cG92QGdv b2dsZS5jb20+DQo+ID4NCj4gPiBMb29rcyBnb29kIHRvIG1lLCBzb21lIG1vcmUgYmlrZXNoZWRk aW5nIGFib3V0IGNvbW1lbnRzIGJlbG93Lg0KPiA+IHB5dHlwZSBkb2VzIGZpbmQgYSBtaW5vciBl cnJvciAod2hpY2ggd2FzIGFjdHVhbGx5IG15IGZhdWx0IHNpbmNlIEknZA0KPiA+IHN1Z2dlc3Rl ZCB5b3UgYW5ub3RhdGUgYGJ1aWxkX2Rpcjogc3RyYCBvZmYtbGlzdCkuDQo+ID4gQWxzbywgdGhp cyBwYXRjaCBhY2NpZGVudGFsbHkgYWRkcyBrdW5pdF9wYXJzZXIucmF3X291dHB1dCgpIGJhY2sg aW4uDQo+ID4NCj4gDQo+IFRoYW5rcyBmb3IgcG9pbnRpbmcgb3V0IHRoZSBweXR5cGUgZXJyb3Ih IEkgd2lsbCBjaGFuZ2UgdGhlIGFubm90YXRpb24gaW4NCj4gdjMuIEkgd2lsbCBhbHNvIHJlbW92 ZSBrdW5pdF9wYXJzZXIucmF3X291dHB1dCgpIGluIHYzLg0KPiANCj4gPiA+DQo+ID4gPiAtLS0N Cj4gPiA+DQo+ID4gPiBDaGFuZ2UgbG9nIGZyb20gdjE6DQo+ID4gPiBodHRwczovL2xvcmUua2Vy bmVsLm9yZy9saW51eC1rc2VsZnRlc3QvMjAyMTA4MjAyMDAwMzIuMjE3ODEzNC0xLXJtb2FyQGdv b2dsZS5jb20vDQo+ID4gPiAtIFJlYmFzZSBvbnRvIGtzZWxmdGVzdC9rdW5pdCBicmFuY2gNCj4g PiA+IC0gQWRkIHRlc3RzIHRvIGt1bml0X3Rvb2xfdGVzdC5weSB0byBjaGVjayBwYXJzZXIgaXMg Y29ycmVjdGx5IHN0cmlwcGluZw0KPiA+ID4gICBoeXBoZW4sIHByb2R1Y2luZyBjb3JyZWN0IGpz b24gb2JqZWN0cyB3aXRoIG5lc3RlZCB0ZXN0cywgY29ycmVjdGx5DQo+ID4gPiAgIHBhc3Npbmcg a3NlbGZ0ZXN0IFRBUCBvdXRwdXQsIGFuZCBjb3JyZWN0bHkgZGVhbHMgd2l0aCBtaXNzaW5nIHRl c3QgcGxhbi4NCj4gPiA+IC0gRml4IGJ1ZyB0byBjb3JyZWN0bHkgbWF0Y2ggdGVzdCBuYW1lIGlu IGluc3RhbmNlIG9mIGEgbWlzc2luZyB0ZXN0IHBsYW4uDQo+ID4gPiAtIEZpeCBidWcgaW4ga3Vu aXRfdG9vbF90ZXN0LnB5IHBvaW50ZWQgb3V0IGJ5IERhbmllbCB3aGVyZSBpdCB3YXMgbm90DQo+ ID4gPiAgIGNvcnJlY3RseSBjaGVja2luZyBmb3IgYSBwcm9wZXIgbWF0Y2ggdG8gdGhlICcwIHRl c3RzIHJ1biEnIGVycm9yDQo+ID4gPiAgIG1lc3NhZ2UuIFJldmVydHMgY2hhbmdlcyBiYWNrIHRv IG9yaWdpbmFsLg0KPiA+ID4gLSBBIGZldyBtaW5vciBjaGFuZ2VzIHRvIGNvbW1pdCBtZXNzYWdl IHVzaW5nIERhbmllbCdzIGNvbW1lbnRzLg0KPiA+ID4gLSBDaGFuZ2UgZG9jc3RyaW5ncyB1c2lu ZyBEYW5pZWwncyBjb21tZW50cyB0byByZWR1Y2U6DQo+ID4gPiAgIC0gU2hvcnRlbnMgc29tZSBk b2NzdHJpbmdzIHRvIGJlIG9uZS1saW5lIG9yIGp1c3QgZGVzY3JpcHRpb24gaWYgaXQgaXMNCj4g PiA+ICAgICBzZWxmIGV4cGxhbmF0b3J5Lg0KPiA+ID4gICAtIFJlbW92ZSBleHBsaWNpdCByZXNw ZWNpZmljYXRpb24gb2YgdHlwZXMgb2YgcGFyYW1ldGVycyBhbmQgcmV0dXJucw0KPiA+ID4gICAg IGJlY2F1c2UgdGhpcyBpcyBhbHJlYWR5IHNwZWNpZmllZCBpbiB0aGUgZnVuY3Rpb24gYW5ub2F0 aW9ucy4gSG93ZXZlciwNCj4gPiA+ICAgICBzb21lIGRlc2NyaXB0aW9ucyBvZiB0aGUgcGFyYW1l dGVycyBhbmQgcmV0dXJucyByZW1haW4gYW5kIHNvbWUgY29udGFpbg0KPiA+ID4gICAgIHRoZSB0 eXBlIGZvciBjb250ZXh0LiBBZGRpdGlvbmFsbHksIHRoZSB0eXBlcyBvZiBwdWJsaWMgYXR0cmli dXRlcyBvZg0KPiA+ID4gICAgIGNsYXNzZXMgcmVtYWluLg0KPiA+ID4gICAtIFJlbW92ZSBhbnkg ZG9jdW1lbnRhdGlvbiBvZiAnUmV0dXJuOiBOb25lJw0KPiA+ID4gICAtIFJlbW92ZSBkb2NzdHJp bmdzIG9mIGhlbHBlciBtZXRob2RzIHdpdGhpbiBvdGhlciBtZXRob2RzLg0KPiA+ID4gLS0tDQo+ ID4gPiAgdG9vbHMvdGVzdGluZy9rdW5pdC9rdW5pdF9qc29uLnB5ICAgICAgICAgICAgIHwgICA1 NSArLQ0KPiA+ID4gIHRvb2xzL3Rlc3Rpbmcva3VuaXQva3VuaXRfcGFyc2VyLnB5ICAgICAgICAg ICB8IDEwNTYgKysrKysrKysrKysrLS0tLS0NCj4gPiA+ICB0b29scy90ZXN0aW5nL2t1bml0L2t1 bml0X3Rvb2xfdGVzdC5weSAgICAgICAgfCAgMTM0ICsrLQ0KPiA+ID4gIC4uLi90ZXN0X2lzX3Rl c3RfcGFzc2VkLWFsbF9wYXNzZWRfbmVzdGVkLmxvZyB8ICAgMzQgKw0KPiA+ID4gIC4uLi90ZXN0 X2lzX3Rlc3RfcGFzc2VkLWtzZWxmdGVzdC5sb2cgICAgICAgICB8ICAgMTQgKw0KPiA+ID4gIC4u Li90ZXN0X2lzX3Rlc3RfcGFzc2VkLW1pc3NpbmdfcGxhbi5sb2cgICAgICB8ICAgMzEgKw0KPiA+ ID4gIC4uLi9rdW5pdC90ZXN0X2RhdGEvdGVzdF9zdHJpcF9oeXBoZW4ubG9nICAgICB8ICAgMTYg Kw0KPiA+ID4gIDcgZmlsZXMgY2hhbmdlZCwgOTUxIGluc2VydGlvbnMoKyksIDM4OSBkZWxldGlv bnMoLSkNCj4gPiA+ICBjcmVhdGUgbW9kZSAxMDA2NDQgdG9vbHMvdGVzdGluZy9rdW5pdC90ZXN0 X2RhdGEvdGVzdF9pc190ZXN0X3Bhc3NlZC1hbGxfcGFzc2VkX25lc3RlZC5sb2cNCj4gPiA+ICBj cmVhdGUgbW9kZSAxMDA2NDQgdG9vbHMvdGVzdGluZy9rdW5pdC90ZXN0X2RhdGEvdGVzdF9pc190 ZXN0X3Bhc3NlZC1rc2VsZnRlc3QubG9nDQo+ID4gPiAgY3JlYXRlIG1vZGUgMTAwNjQ0IHRvb2xz L3Rlc3Rpbmcva3VuaXQvdGVzdF9kYXRhL3Rlc3RfaXNfdGVzdF9wYXNzZWQtbWlzc2luZ19wbGFu LmxvZw0KPiA+ID4gIGNyZWF0ZSBtb2RlIDEwMDY0NCB0b29scy90ZXN0aW5nL2t1bml0L3Rlc3Rf ZGF0YS90ZXN0X3N0cmlwX2h5cGhlbi5sb2cNCj4gPiA+DQo+ID4gPiBkaWZmIC0tZ2l0IGEvdG9v bHMvdGVzdGluZy9rdW5pdC9rdW5pdF9qc29uLnB5IGIvdG9vbHMvdGVzdGluZy9rdW5pdC9rdW5p dF9qc29uLnB5DQo+ID4gPiBpbmRleCBmNWNjYTVjMzhjYWMuLmU3MzE3YjRmYWQ5ZCAxMDA2NDQN Cj4gPiA+IC0tLSBhL3Rvb2xzL3Rlc3Rpbmcva3VuaXQva3VuaXRfanNvbi5weQ0KPiA+ID4gKysr IGIvdG9vbHMvdGVzdGluZy9rdW5pdC9rdW5pdF9qc29uLnB5DQo+ID4gPiBAQCAtMTEsNDcgKzEx LDQ2IEBAIGltcG9ydCBvcw0KPiA+ID4NCj4gPiA+ICBpbXBvcnQga3VuaXRfcGFyc2VyDQo+ID4g Pg0KPiA+ID4gLWZyb20ga3VuaXRfcGFyc2VyIGltcG9ydCBUZXN0U3RhdHVzDQo+ID4gPiAtDQo+ ID4gPiAtZGVmIGdldF9qc29uX3Jlc3VsdCh0ZXN0X3Jlc3VsdCwgZGVmX2NvbmZpZywgYnVpbGRf ZGlyLCBqc29uX3BhdGgpIC0+IHN0cjoNCj4gPiA+IC0gICAgICAgc3ViX2dyb3VwcyA9IFtdDQo+ ID4gPiAtDQo+ID4gPiAtICAgICAgICMgRWFjaCB0ZXN0IHN1aXRlIGlzIG1hcHBlZCB0byBhIEtl cm5lbENJIHN1Yl9ncm91cA0KPiA+ID4gLSAgICAgICBmb3IgdGVzdF9zdWl0ZSBpbiB0ZXN0X3Jl c3VsdC5zdWl0ZXM6DQo+ID4gPiAtICAgICAgICAgICAgICAgc3ViX2dyb3VwID0gew0KPiA+ID4g LSAgICAgICAgICAgICAgICAgICAgICAgIm5hbWUiOiB0ZXN0X3N1aXRlLm5hbWUsDQo+ID4gPiAt ICAgICAgICAgICAgICAgICAgICAgICAiYXJjaCI6ICJVTSIsDQo+ID4gPiAtICAgICAgICAgICAg ICAgICAgICAgICAiZGVmY29uZmlnIjogZGVmX2NvbmZpZywNCj4gPiA+IC0gICAgICAgICAgICAg ICAgICAgICAgICJidWlsZF9lbnZpcm9ubWVudCI6IGJ1aWxkX2RpciwNCj4gPiA+IC0gICAgICAg ICAgICAgICAgICAgICAgICJ0ZXN0X2Nhc2VzIjogW10sDQo+ID4gPiAtICAgICAgICAgICAgICAg ICAgICAgICAibGFiX25hbWUiOiBOb25lLA0KPiA+ID4gLSAgICAgICAgICAgICAgICAgICAgICAg Imtlcm5lbCI6IE5vbmUsDQo+ID4gPiAtICAgICAgICAgICAgICAgICAgICAgICAiam9iIjogTm9u ZSwNCj4gPiA+IC0gICAgICAgICAgICAgICAgICAgICAgICJnaXRfYnJhbmNoIjogImtzZWxmdGVz dCIsDQo+ID4gPiAtICAgICAgICAgICAgICAgfQ0KPiA+ID4gLSAgICAgICAgICAgICAgIHRlc3Rf Y2FzZXMgPSBbXQ0KPiA+ID4gLSAgICAgICAgICAgICAgICMgVE9ETzogQWRkIGF0dGFjaG1lbnRz IGF0dHJpYnV0ZSBpbiB0ZXN0X2Nhc2Ugd2l0aCBkZXRhaWxlZA0KPiA+ID4gLSAgICAgICAgICAg ICAgICMgIGZhaWx1cmUgbWVzc2FnZSwgc2VlIGh0dHBzOi8vYXBpLmtlcm5lbGNpLm9yZy9zY2hl bWEtdGVzdC1jYXNlLmh0bWwjZ2V0DQo+ID4gPiAtICAgICAgICAgICAgICAgZm9yIGNhc2UgaW4g dGVzdF9zdWl0ZS5jYXNlczoNCj4gPiA+IC0gICAgICAgICAgICAgICAgICAgICAgIHRlc3RfY2Fz ZSA9IHsibmFtZSI6IGNhc2UubmFtZSwgInN0YXR1cyI6ICJGQUlMIn0NCj4gPiA+IC0gICAgICAg ICAgICAgICAgICAgICAgIGlmIGNhc2Uuc3RhdHVzID09IFRlc3RTdGF0dXMuU1VDQ0VTUzoNCj4g PiA+ICtmcm9tIGt1bml0X3BhcnNlciBpbXBvcnQgVGVzdCwgVGVzdFJlc3VsdCwgVGVzdFN0YXR1 cw0KPiA+ID4gK2Zyb20gdHlwaW5nIGltcG9ydCBBbnksIERpY3QNCj4gPiA+ICsNCj4gPiA+ICtK c29uT2JqID0gRGljdFtzdHIsIEFueV0NCj4gPiA+ICsNCj4gPiA+ICtkZWYgX2dldF9ncm91cF9q c29uKHRlc3Q6IFRlc3QsIGRlZl9jb25maWc6IHN0ciwgYnVpbGRfZGlyOiBzdHIpIC0+IEpzb25P Ymo6DQo+ID4NCj4gPg0KPiA+IEFoLCBweXR5cGUgY29tcGxhaW5zIGFib3V0IHRoaXMuDQo+ID4g TG9va3MgbGlrZSB0aGUgdW5pdCB0ZXN0IHBhc3NlcyBOb25lIGhlcmUuDQo+ID4NCj4gPiBXZSBj YW4gZWl0aGVyIG1ha2UgdGhpcyBhbm5vdGF0aW9uIHNheSBgYnVpbGRfZGlyOiBPcHRpb25hbFtz dHJdYCBvcg0KPiA+IGNoYW5nZSB0aGUgdW5pdCB0ZXN0IHRvIHBhc3MgJycgaW5zdGVhZCBvZiBO b25lLg0KPiA+IFRoZSBmb3JtZXIgbWlnaHQgYmUgcHJlZmVyYWJsZSB0byBrZWVwIHRoaXMgY2hh bmdlIG1vcmUgZm9jdXNlZC4NCj4gPg0KPiANCj4gVGhhbmtzIGZvciBmaW5kaW5nIHRoaXMhIEkg YWxzbyBsaWtlICdidWlsZF9kaXI6IE9wdGlvbmFsW3N0cl0nIHRvIGtlZXAgdGhlDQo+IGNoYW5n ZXMgbGltaXRlZCB0byB0aGUgZmlsZXMgYWxyZWFkeSBiZWluZyB1cGRhdGVkLg0KPiANCj4gPg0K PiA+ID4gKyAgICAgICBzdWJfZ3JvdXBzID0gW10gICMgTGlzdFtKc29uT2JqXQ0KPiA+ID4gKyAg ICAgICB0ZXN0X2Nhc2VzID0gW10gICMgTGlzdFtKc29uT2JqXQ0KPiA+ID4gKw0KPiA+ID4gKyAg ICAgICBmb3Igc3VidGVzdCBpbiB0ZXN0LnN1YnRlc3RzOg0KPiA+ID4gKyAgICAgICAgICAgICAg IGlmIGxlbihzdWJ0ZXN0LnN1YnRlc3RzKToNCj4gPiA+ICsgICAgICAgICAgICAgICAgICAgICAg IHN1Yl9ncm91cCA9IF9nZXRfZ3JvdXBfanNvbihzdWJ0ZXN0LCBkZWZfY29uZmlnLA0KPiA+ID4g KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBidWlsZF9kaXIpDQo+ID4gPiArICAgICAg ICAgICAgICAgICAgICAgICBzdWJfZ3JvdXBzLmFwcGVuZChzdWJfZ3JvdXApDQo+ID4gPiArICAg ICAgICAgICAgICAgZWxzZToNCj4gPiA+ICsgICAgICAgICAgICAgICAgICAgICAgIHRlc3RfY2Fz ZSA9IHsibmFtZSI6IHN1YnRlc3QubmFtZSwgInN0YXR1cyI6ICJGQUlMIn0NCj4gPiA+ICsgICAg ICAgICAgICAgICAgICAgICAgIGlmIHN1YnRlc3Quc3RhdHVzID09IFRlc3RTdGF0dXMuU1VDQ0VT UzoNCj4gPiA+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGVzdF9jYXNlWyJzdGF0 dXMiXSA9ICJQQVNTIg0KPiA+ID4gLSAgICAgICAgICAgICAgICAgICAgICAgZWxpZiBjYXNlLnN0 YXR1cyA9PSBUZXN0U3RhdHVzLlRFU1RfQ1JBU0hFRDoNCj4gPiA+ICsgICAgICAgICAgICAgICAg ICAgICAgIGVsaWYgc3VidGVzdC5zdGF0dXMgPT0gVGVzdFN0YXR1cy5URVNUX0NSQVNIRUQ6DQo+ ID4gPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRlc3RfY2FzZVsic3RhdHVzIl0g PSAiRVJST1IiDQo+ID4gPiAgICAgICAgICAgICAgICAgICAgICAgICB0ZXN0X2Nhc2VzLmFwcGVu ZCh0ZXN0X2Nhc2UpDQo+ID4gPiAtICAgICAgICAgICAgICAgc3ViX2dyb3VwWyJ0ZXN0X2Nhc2Vz Il0gPSB0ZXN0X2Nhc2VzDQo+ID4gPiAtICAgICAgICAgICAgICAgc3ViX2dyb3Vwcy5hcHBlbmQo c3ViX2dyb3VwKQ0KPiA+ID4gKw0KPiA+ID4gICAgICAgICB0ZXN0X2dyb3VwID0gew0KPiA+ID4g LSAgICAgICAgICAgICAgICJuYW1lIjogIktVbml0IFRlc3QgR3JvdXAiLA0KPiA+ID4gKyAgICAg ICAgICAgICAgICJuYW1lIjogdGVzdC5uYW1lLA0KPiA+ID4gICAgICAgICAgICAgICAgICJhcmNo IjogIlVNIiwNCj4gPiA+ICAgICAgICAgICAgICAgICAiZGVmY29uZmlnIjogZGVmX2NvbmZpZywN Cj4gPiA+ICAgICAgICAgICAgICAgICAiYnVpbGRfZW52aXJvbm1lbnQiOiBidWlsZF9kaXIsDQo+ ID4gPiAgICAgICAgICAgICAgICAgInN1Yl9ncm91cHMiOiBzdWJfZ3JvdXBzLA0KPiA+ID4gKyAg ICAgICAgICAgICAgICJ0ZXN0X2Nhc2VzIjogdGVzdF9jYXNlcywNCj4gPiA+ICAgICAgICAgICAg ICAgICAibGFiX25hbWUiOiBOb25lLA0KPiA+ID4gICAgICAgICAgICAgICAgICJrZXJuZWwiOiBO b25lLA0KPiA+ID4gICAgICAgICAgICAgICAgICJqb2IiOiBOb25lLA0KPiA+ID4gICAgICAgICAg ICAgICAgICJnaXRfYnJhbmNoIjogImtzZWxmdGVzdCIsDQo+ID4gPiAgICAgICAgIH0NCj4gPiA+ ICsgICAgICAgcmV0dXJuIHRlc3RfZ3JvdXANCj4gPiA+ICsNCj4gPiA+ICtkZWYgZ2V0X2pzb25f cmVzdWx0KHRlc3RfcmVzdWx0OiBUZXN0UmVzdWx0LCBkZWZfY29uZmlnOiBzdHIsIGJ1aWxkX2Rp cjogc3RyLA0KPiA+ID4gKyAgICAgICAgICAgICAgIGpzb25fcGF0aDogc3RyKSAtPiBzdHI6DQo+ ID4gPiArICAgICAgIHRlc3RfZ3JvdXAgPSBfZ2V0X2dyb3VwX2pzb24odGVzdF9yZXN1bHQudGVz dCwgZGVmX2NvbmZpZywgYnVpbGRfZGlyKQ0KPiA+ID4gKyAgICAgICB0ZXN0X2dyb3VwWyJuYW1l Il0gPSAiS1VuaXQgVGVzdCBHcm91cCINCj4gPiA+ICAgICAgICAganNvbl9vYmogPSBqc29uLmR1 bXBzKHRlc3RfZ3JvdXAsIGluZGVudD00KQ0KPiA+ID4gICAgICAgICBpZiBqc29uX3BhdGggIT0g J3N0ZG91dCc6DQo+ID4gPiAgICAgICAgICAgICAgICAgd2l0aCBvcGVuKGpzb25fcGF0aCwgJ3cn KSBhcyByZXN1bHRfcGF0aDoNCj4gPiA+IGRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL2t1bml0 L2t1bml0X3BhcnNlci5weSBiL3Rvb2xzL3Rlc3Rpbmcva3VuaXQva3VuaXRfcGFyc2VyLnB5DQo+ ID4gPiBpbmRleCA2MzEwYTY0MWIxNTEuLjRiNjA4NjE1OWM3ZiAxMDA2NDQNCj4gPiA+IC0tLSBh L3Rvb2xzL3Rlc3Rpbmcva3VuaXQva3VuaXRfcGFyc2VyLnB5DQo+ID4gPiArKysgYi90b29scy90 ZXN0aW5nL2t1bml0L2t1bml0X3BhcnNlci5weQ0KPiA+ID4gQEAgLTEsMTEgKzEsMTUgQEANCj4g PiA+ICAjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wDQo+ID4gPiAgIw0KPiA+ID4g LSMgUGFyc2VzIHRlc3QgcmVzdWx0cyBmcm9tIGEga2VybmVsIGRtZXNnIGxvZy4NCj4gPiA+ICsj IFBhcnNlcyBLVEFQIHRlc3QgcmVzdWx0cyBmcm9tIGEga2VybmVsIGRtZXNnIGxvZyBhbmQgaW5j cmVtZW50YWxseSBwcmludHMNCj4gPiA+ICsjIHJlc3VsdHMgd2l0aCByZWFkZXItZnJpZW5kbHkg Zm9ybWF0LiBTdG9yZXMgYW5kIHJldHVybnMgdGVzdCByZXN1bHRzIGluIGENCj4gPiA+ICsjIFRl c3Qgb2JqZWN0Lg0KPiA+ID4gICMNCj4gPiA+ICAjIENvcHlyaWdodCAoQykgMjAxOSwgR29vZ2xl IExMQy4NCj4gPiA+ICAjIEF1dGhvcjogRmVsaXggR3VvIDxmZWxpeGd1b3hpdXBpbmdAZ21haWwu Y29tPg0KPiA+ID4gICMgQXV0aG9yOiBCcmVuZGFuIEhpZ2dpbnMgPGJyZW5kYW5oaWdnaW5zQGdv b2dsZS5jb20+DQo+ID4gPiArIyBBdXRob3I6IFJhZSBNb2FyIDxybW9hckBnb29nbGUuY29tPg0K PiA+ID4NCj4gPiA+ICtmcm9tIF9fZnV0dXJlX18gaW1wb3J0IGFubm90YXRpb25zDQo+ID4gPiAg aW1wb3J0IHJlDQo+ID4gPg0KPiA+ID4gIGZyb20gY29sbGVjdGlvbnMgaW1wb3J0IG5hbWVkdHVw bGUNCj4gPiA+IEBAIC0xNCwzMyArMTgsNTUgQEAgZnJvbSBlbnVtIGltcG9ydCBFbnVtLCBhdXRv DQo+ID4gPiAgZnJvbSBmdW5jdG9vbHMgaW1wb3J0IHJlZHVjZQ0KPiA+ID4gIGZyb20gdHlwaW5n IGltcG9ydCBJdGVyYWJsZSwgSXRlcmF0b3IsIExpc3QsIE9wdGlvbmFsLCBUdXBsZQ0KPiA+ID4N Cj4gPiA+IC1UZXN0UmVzdWx0ID0gbmFtZWR0dXBsZSgnVGVzdFJlc3VsdCcsIFsnc3RhdHVzJywn c3VpdGVzJywnbG9nJ10pDQo+ID4gPiAtDQo+ID4gPiAtY2xhc3MgVGVzdFN1aXRlKG9iamVjdCk6 DQo+ID4gPiAtICAgICAgIGRlZiBfX2luaXRfXyhzZWxmKSAtPiBOb25lOg0KPiA+ID4gLSAgICAg ICAgICAgICAgIHNlbGYuc3RhdHVzID0gVGVzdFN0YXR1cy5TVUNDRVNTDQo+ID4gPiAtICAgICAg ICAgICAgICAgc2VsZi5uYW1lID0gJycNCj4gPiA+IC0gICAgICAgICAgICAgICBzZWxmLmNhc2Vz ID0gW10gICMgdHlwZTogTGlzdFtUZXN0Q2FzZV0NCj4gPiA+IC0NCj4gPiA+IC0gICAgICAgZGVm IF9fc3RyX18oc2VsZikgLT4gc3RyOg0KPiA+ID4gLSAgICAgICAgICAgICAgIHJldHVybiAnVGVz dFN1aXRlKCcgKyBzdHIoc2VsZi5zdGF0dXMpICsgJywnICsgc2VsZi5uYW1lICsgJywnICsgc3Ry KHNlbGYuY2FzZXMpICsgJyknDQo+ID4gPiAtDQo+ID4gPiAtICAgICAgIGRlZiBfX3JlcHJfXyhz ZWxmKSAtPiBzdHI6DQo+ID4gPiAtICAgICAgICAgICAgICAgcmV0dXJuIHN0cihzZWxmKQ0KPiA+ ID4gLQ0KPiA+ID4gLWNsYXNzIFRlc3RDYXNlKG9iamVjdCk6DQo+ID4gPiArVGVzdFJlc3VsdCA9 IG5hbWVkdHVwbGUoJ1Rlc3RSZXN1bHQnLCBbJ3N0YXR1cycsJ3Rlc3QnLCdsb2cnXSkNCj4gPiA+ ICsNCj4gPiA+ICtjbGFzcyBUZXN0KG9iamVjdCk6DQo+ID4gPiArICAgICAgICIiIg0KPiA+ID4g KyAgICAgICBBIGNsYXNzIHRvIHJlcHJlc2VudCBhIHRlc3QgcGFyc2VkIGZyb20gS1RBUCByZXN1 bHRzLiBBbGwgS1RBUA0KPiA+ID4gKyAgICAgICByZXN1bHRzIHdpdGhpbiBhIHRlc3QgbG9nIGFy ZSBzdG9yZWQgaW4gYSBtYWluIFRlc3Qgb2JqZWN0IGFzDQo+ID4gPiArICAgICAgIHN1YnRlc3Rz Lg0KPiA+ID4gKw0KPiA+ID4gKyAgICAgICBBdHRyaWJ1dGVzOg0KPiA+ID4gKyAgICAgICBzdGF0 dXMgOiBUZXN0U3RhdHVzIC0gc3RhdHVzIG9mIHRoZSB0ZXN0DQo+ID4gPiArICAgICAgIG5hbWUg OiBzdHIgLSBuYW1lIG9mIHRoZSB0ZXN0DQo+ID4gPiArICAgICAgIGV4cGVjdGVkX2NvdW50IDog aW50IC0gZXhwZWN0ZWQgbnVtYmVyIG9mIHN1YnRlc3RzICgwIGlmIHNpbmdsZQ0KPiA+ID4gKyAg ICAgICAgICAgICAgIHRlc3QgY2FzZSBhbmQgTm9uZSBpZiB1bmtub3duIGV4cGVjdGVkIG51bWJl ciBvZiBzdWJ0ZXN0cykNCj4gPiA+ICsgICAgICAgc3VidGVzdHMgOiBMaXN0W1Rlc3RdIC0gbGlz dCBvZiBzdWJ0ZXN0cw0KPiA+ID4gKyAgICAgICBsb2cgOiBMaXN0W3N0cl0gLSBsb2cgb2YgS1RB UCBsaW5lcyB0aGF0IGNvcnJlc3BvbmQgdG8gdGhlIHRlc3QNCj4gPiA+ICsgICAgICAgY291bnRz IDogVGVzdENvdW50cyAtIGNvdW50cyBvZiB0aGUgdGVzdCBzdGF0dXNlcyBhbmQgZXJyb3JzIG9m DQo+ID4gPiArICAgICAgICAgICAgICAgc3VidGVzdHMgb3Igb2YgdGhlIHRlc3QgaXRzZWxmIGlm IHRoZSB0ZXN0IGlzIGEgc2luZ2xlDQo+ID4gPiArICAgICAgICAgICAgICAgdGVzdCBjYXNlLg0K PiA+ID4gKyAgICAgICAiIiINCj4gPiA+ICAgICAgICAgZGVmIF9faW5pdF9fKHNlbGYpIC0+IE5v bmU6DQo+ID4gPiArICAgICAgICAgICAgICAgIiIiQ29uc3RydWN0cyB0aGUgZGVmYXVsdCBhdHRy aWJ1dGVzIG9mIGEgVGVzdCBjbGFzcyBvYmplY3QuDQo+ID4gPiArICAgICAgICAgICAgICAgIiIi DQo+ID4NCj4gPiBPcHRpb25hbDogSSB0aGluayB3ZSBjYW4gc3RpbGwgZHJvcCBkb2N1bWVudHMg bGlrZSB0aGlzIG9uIF9faW5pdF9fKCkNCj4gPiBhbmQgX19zdHJfXygpIHNpbmNlIHRoZXNlIGFy ZSB3ZWxsLWtub3duIGZ1bmN0aW9ucy4NCj4gPiBfX2luaXRfXygpIGNvdWxkIGhhdmUgYSBjb21t ZW50IGlmIGl0IGRpZCBhbnl0aGluZyBub24tb2J2aW91cywgYnV0DQo+ID4gdGhhdCdzIG5vdCB0 aGUgY2FzZSBoZXJlLg0KPiA+DQo+IA0KPiBJIHdvdWxkIHByZWZlciB0byBrZWVwIGRvY3N0cmlu Z3MgZm9yIGFsbCBwdWJsaWMgbWV0aG9kcyBpbiBjbGFzc2VzLA0KPiBpbmNsdWRpbmcgX19pbml0 X18oKSBhbmQgX19zdHJfXygpLiBUaGlzIGJlc3QgZm9sbG93cyB0aGUgZG9jc3RyaW5nDQo+IGNv bnZlbnRpb25zIChodHRwczovL3d3dy5weXRob24ub3JnL2Rldi9wZXBzL3BlcC0wMjU3LyNzcGVj aWZpY2F0aW9uKS4NCj4gSSBoYXZlIGF0dGVtcHRlZCB0byBtYWtlIHRoZSBkb2NzdHJpbmdzIGZv ciBzaW1wbGUgbWV0aG9kcyBxdWl0ZSBzaW1wbGlzdGljLg0KPiBJIG1heSBldmVuIGNoYW5nZSB0 aGlzIGRvY3N0cmluZyB0byBiZTogJ0NyZWF0ZXMgVGVzdCBvYmplY3Qgd2l0aCBkZWZhdWx0DQo+ IGF0dHJpYnV0ZXMnIGluIG9yZGVyIHRvIG5vdCByZWZlciB0byB0aGUgbG93LWxldmVsIGRldGFp bHMgb2YgY29uc3RydWN0aW5nIHRoZQ0KPiBhdHRyaWJ1dGVzLg0KPiANCj4gPiA+ICAgICAgICAg ICAgICAgICBzZWxmLnN0YXR1cyA9IFRlc3RTdGF0dXMuU1VDQ0VTUw0KPiA+ID4gICAgICAgICAg ICAgICAgIHNlbGYubmFtZSA9ICcnDQo+ID4gPiArICAgICAgICAgICAgICAgc2VsZi5leHBlY3Rl ZF9jb3VudCA9IDAgICMgdHlwZTogT3B0aW9uYWxbaW50XQ0KPiA+ID4gKyAgICAgICAgICAgICAg IHNlbGYuc3VidGVzdHMgPSBbXSAgIyB0eXBlOiBMaXN0W1Rlc3RdDQo+ID4gPiAgICAgICAgICAg ICAgICAgc2VsZi5sb2cgPSBbXSAgIyB0eXBlOiBMaXN0W3N0cl0NCj4gPiA+ICsgICAgICAgICAg ICAgICBzZWxmLmNvdW50cyA9IFRlc3RDb3VudHMoKQ0KPiA+ID4NCj4gPiA+ICAgICAgICAgZGVm IF9fc3RyX18oc2VsZikgLT4gc3RyOg0KPiA+ID4gLSAgICAgICAgICAgICAgIHJldHVybiAnVGVz dENhc2UoJyArIHN0cihzZWxmLnN0YXR1cykgKyAnLCcgKyBzZWxmLm5hbWUgKyAnLCcgKyBzdHIo c2VsZi5sb2cpICsgJyknDQo+ID4gPiArICAgICAgICAgICAgICAgIiIiUmV0dXJucyBzdHJpbmcg cmVwcmVzZW50YXRpb24gb2YgYSBUZXN0IGNsYXNzIG9iamVjdC4iIiINCj4gPiA+ICsgICAgICAg ICAgICAgICByZXR1cm4gKCdUZXN0KCcgKyBzdHIoc2VsZi5zdGF0dXMpICsgJywgJyArIHNlbGYu bmFtZSArDQo+ID4gPiArICAgICAgICAgICAgICAgICAgICAgICAnLCAnICsgc3RyKHNlbGYuZXhw ZWN0ZWRfY291bnQpICsgJywgJyArDQo+ID4gPiArICAgICAgICAgICAgICAgICAgICAgICBzdHIo c2VsZi5zdWJ0ZXN0cykgKyAnLCAnICsgc3RyKHNlbGYubG9nKSArICcsICcgKw0KPiA+ID4gKyAg ICAgICAgICAgICAgICAgICAgICAgc3RyKHNlbGYuY291bnRzKSArICcpJykNCj4gPiA+DQo+ID4g PiAgICAgICAgIGRlZiBfX3JlcHJfXyhzZWxmKSAtPiBzdHI6DQo+ID4gPiArICAgICAgICAgICAg ICAgIiIiUmV0dXJucyBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgYSBUZXN0IGNsYXNzIG9iamVj dC4iIiINCj4gPiA+ICAgICAgICAgICAgICAgICByZXR1cm4gc3RyKHNlbGYpDQo+ID4gPg0KPiA+ ID4gKyAgICAgICBkZWYgYWRkX2Vycm9yKHNlbGYsIGVycm9yX21lc3NhZ2U6IHN0cikgLT4gTm9u ZToNCj4gPiA+ICsgICAgICAgICAgICAgICAiIiJBZGRzIGVycm9yIHRvIHRlc3Qgb2JqZWN0IGJ5 IGluY3JlbWVudGluZyB0aGUgZXJyb3IgY291bnQNCj4gPiA+ICsgICAgICAgICAgICAgICBhbmQg cHJpbnRpbmcgdGhlIGVycm9yIG1lc3NhZ2UuDQo+ID4gPiArICAgICAgICAgICAgICAgIiIiDQo+ ID4NCj4gPiBuaXQ6IHRoaXMgY29tbWVudCBleHBsYWlucyB0aGUgbG93LWxldmVsIGRldGFpbHMg b2Ygd2hhdCB0aGUgZnVuY3Rpb24NCj4gPiBkb2VzLCB3aGljaCBpc24ndCBhcyBuZWNlc3Nhcnku DQo+ID4NCj4gPiBXZSdkIHdhbnQgdG8gZG9jdW1lbnQgbW9yZSB3aGF0IHRoZSBpbnRlbnQgb2Yg dGhlIGZ1bmN0aW9uIGlzLCBlLmcuIHBlcmhhcHM6DQo+ID4gICBSZWNvcmRzIGFuIGVycm9yIHRo YXQgb2NjdXJlZCB3aGlsZSBwYXJzaW5nIHRoaXMgdGVzdC4NCj4gPg0KPiA+IEluIHRoZSBmdXR1 cmUsIHdlIG1pZ2h0IHdhbnQgdG8gY2hhbmdlIGhvdyBlcnJvcnMgYXJlIHByaW50ZWQsIGhlbmNl DQo+ID4gd2h5IEkgZG9uJ3Qgd2FudCB0byBpbmNsdWRlIHRoYXQgaW4gYSBjb21tZW50LCBwZXIg c2UuDQo+ID4NCj4gPiBFLmcuIEkndmUgc2VlbiBhIGNhc2Ugd2hlcmUgYSB1c2VyIHdhcyBnZXR0 aW5nIHRydW5jYXRlZCBUQVAgb3V0cHV0LA0KPiA+IGJ1dCBpdCB3YXMgaGFyZCB0byB0ZWxsLg0K PiA+IFRoZSBlcnJvciBtZXNzYWdlIHdhcyBsb2dnZWQgYXQgdGhlIHRvcCBidXQgZ290IGxvc3Qg YWZ0ZXIgdGhlIHBhcnNlcg0KPiA+IHdlbnQgb24gdG8gcHJpbnQgb3V0IGFsbCB0aGUgdGVzdCBy ZXN1bHRzLg0KPiA+DQo+ID4gVGhlIHBhcnNlciB3aWxsIGJlaGF2ZSB0aGUgc2FtZSB3YXkgYWZ0 ZXIgdGhpcyBwYXRjaC4NCj4gPiBTbyB3ZSBtaWdodCBldmVudHVhbGx5IHdhbnQgdG8gaGF2ZSBh IGZvbGxvdy11cCB0aGF0IGluY2x1ZGVzIGENCj4gPiBzdW1tYXJ5IG9mIGFsbCB0aGUgZW5jb3Vu dGVyZWQgZXJyb3JzIGF0IHRoZSBlbmQsIGZvciBleGFtcGxlLg0KPiANCj4gSSBsaWtlIHRoaXMg Y2hhbmdlLiBJIHdpbGwgdXBkYXRlIHRoZSBkb2NzdHJpbmcgdG8gYmU6DQo+ICdSZWNvcmRzIGFu IGVycm9yIHRoYXQgb2NjdXJyZWQgd2hpbGUgcGFyc2luZyB0aGlzIHRlc3QnIGluIHYzLg0KPiAN Cj4gPg0KPiA+ID4gKyAgICAgICAgICAgICAgIHNlbGYuY291bnRzLmVycm9ycyArPSAxDQo+ID4g PiArICAgICAgICAgICAgICAgcHJpbnRfZXJyb3IoJ1Rlc3QgJyArIHNlbGYubmFtZSArICc6ICcg KyBlcnJvcl9tZXNzYWdlKQ0KPiA+ID4gKw0KPiA+ID4gIGNsYXNzIFRlc3RTdGF0dXMoRW51bSk6 DQo+ID4gPiArICAgICAgICIiIkFuIGVudW1lcmF0aW9uIGNsYXNzIHRvIHJlcHJlc2VudCB0aGUg c3RhdHVzIG9mIGEgdGVzdC4iIiINCj4gPiA+ICAgICAgICAgU1VDQ0VTUyA9IGF1dG8oKQ0KPiA+ ID4gICAgICAgICBGQUlMVVJFID0gYXV0bygpDQo+ID4gPiAgICAgICAgIFNLSVBQRUQgPSBhdXRv KCkNCj4gPiA+IEBAIC00OCwzODEgKzc0LDc2OSBAQCBjbGFzcyBUZXN0U3RhdHVzKEVudW0pOg0K PiA+ID4gICAgICAgICBOT19URVNUUyA9IGF1dG8oKQ0KPiA+ID4gICAgICAgICBGQUlMVVJFX1RP X1BBUlNFX1RFU1RTID0gYXV0bygpDQo+ID4gPg0KPiA+ID4gK2NsYXNzIFRlc3RDb3VudHM6DQo+ ID4gPiArICAgICAgICIiIg0KPiA+ID4gKyAgICAgICBBIGNsYXNzIHRvIHJlcHJlc2VudCB0aGUg Y291bnRzIG9mIHN0YXR1c2VzIGFuZCB0ZXN0IGVycm9ycyBvZg0KPiA+ID4gKyAgICAgICBzdWJ0 ZXN0cyBvciBvZiB0aGUgdGVzdCBpdHNlbGYgaWYgdGhlIHRlc3QgaXMgYSBzaW5nbGUgdGVzdCBj YXNlIHdpdGgNCj4gPiA+ICsgICAgICAgbm8gc3VidGVzdHMuIE5vdGUgdGhhdCB0aGUgc3VtIG9m IHRoZSBjb3VudHMgb2YgcGFzc2VkLCBmYWlsZWQsDQo+ID4gPiArICAgICAgIGNyYXNoZWQsIGFu ZCBza2lwcGVkIHNob3VsZCBzdW0gdG8gdGhlIHRvdGFsIG51bWJlciBvZiBzdWJ0ZXN0cyBmb3IN Cj4gPiA+ICsgICAgICAgdGhlIHRlc3QuDQo+ID4NCj4gPiBvcHRpb25hbDogY2FuIHRlcnNlbiB0 aGlzIGEgYml0LiBlLmcuIEkgZG9uJ3QgdGhpbmsgd2UgbmVlZCB0bw0KPiA+IHJlaXRlcmF0ZSB0 aGF0IHRoaXMgaXMgYSBjbGFzcywgZm9yIGV4YW1wbGUgOikNCj4gPiBJJ2QgcGVyc29uYWxseSB3 cml0ZSBpdCBhIGJpdCBtb3JlIGxpa2UNCj4gPg0KPiA+IFRyYWNrcyB0aGUgbnVtYmVyIG9mIHRl c3RzIHRoYXQgaGFkIGVhY2ggc3RhdHVzLg0KPiA+IFRoaXMgaW5jbHVkZXMgdGhlIHRlc3QgaXRz ZWxmIGFuZCBhbGwgaXRzIHN1YnRlc3RzLg0KPiA+DQo+IA0KPiBJIGFncmVlIHRoaXMgY2FuIGJl IHNob3J0ZW5lZC4gSSB3aWxsIGRlZmluaXRlbHkgYmUgcmVtb3ZpbmcgdGhlDQo+IHNlY29uZCBz ZW50ZW5jZS4NCj4gVGhhdCBjYW4gYmUgZGVzY3JpYmVkIGluIHRoZSB0b3RhbCgpIG1ldGhvZC4g SSB3aWxsIGxpa2VseSBjaGFuZ2UgdGhlDQo+IGRvY3N0cmluZyB0byBiZToNCj4gJ1RyYWNrcyB0 aGUgY291bnRzIG9mIHN0YXR1c2VzIG9mIGFsbCB0ZXN0IGNhc2VzIGFuZCBhbnkgZXJyb3JzIHdp dGhpbiBhIFRlc3QuJw0KPiANCj4gVGhpcyBjb3JyZWN0bHkgZGVzY3JpYmVzIHRoYXQgdGhlIFRl c3RDb3VudHMgb2JqZWN0IG9ubHkgdHJhY2tzIHRoZQ0KPiBzdGF0dXNlcyBvZiB0ZXN0DQo+IGNh c2VzIHdpdGggbm8gc3VidGVzdHMuIFNvIGlmIHRoZSB0ZXN0IGl0c2VsZiBoYWQgc3VidGVzdHMs IGl0J3MNCj4gc3RhdHVzIHdvdWxkIG5vdCBiZQ0KPiBjb3VudGVkLiBIb3dldmVyLCB0aGlzIGRv ZXMgdXNlIHRoZSBwaHJhc2UgJ3Rlc3QgY2FzZScsIHdoaWNoIHdlIHdlcmUgYXR0ZW1wdGluZw0K PiB0byBtb3ZlIGF3YXkgZnJvbS4gV2hhdCBkbyB5b3UgdGhpbmsgb2YgdGhpcyBjaGFuZ2U/DQo+ IA0KPiA+ID4gKw0KPiA+ID4gKyAgICAgICBBdHRyaWJ1dGVzOg0KPiA+ID4gKyAgICAgICBwYXNz ZWQgOiBpbnQgLSB0aGUgbnVtYmVyIG9mIHRlc3RzIHRoYXQgaGF2ZSBwYXNzZWQNCj4gPiA+ICsg ICAgICAgZmFpbGVkIDogaW50IC0gdGhlIG51bWJlciBvZiB0ZXN0cyB0aGF0IGhhdmUgZmFpbGVk DQo+ID4gPiArICAgICAgIGNyYXNoZWQgOiBpbnQgLSB0aGUgbnVtYmVyIG9mIHRlc3RzIHRoYXQg aGF2ZSBjcmFzaGVkDQo+ID4gPiArICAgICAgIHNraXBwZWQgOiBpbnQgLSB0aGUgbnVtYmVyIG9m IHRlc3RzIHRoYXQgaGF2ZSBza2lwcGVkDQo+ID4gPiArICAgICAgIGVycm9ycyA6IGludCAtIHRo ZSBudW1iZXIgb2YgZXJyb3JzIGluIHRoZSB0ZXN0IGFuZCBzdWJ0ZXN0cw0KPiA+ID4gKyAgICAg ICAiIiINCj4gPiA+ICsgICAgICAgZGVmIF9faW5pdF9fKHNlbGYpOg0KPiA+ID4gKyAgICAgICAg ICAgICAgICIiIkNvbnRydWN0cyB0aGUgZGVmYXVsdCBhdHRyaWJ1dGVzIG9mIGEgVGVzdENvdW50 cyBjbGFzcw0KPiA+ID4gKyAgICAgICAgICAgICAgIG9iamVjdC4gU2V0cyB0aGUgY291bnRzIG9m IGFsbCB0ZXN0IHN0YXR1c2VzIGFuZCB0ZXN0DQo+ID4gPiArICAgICAgICAgICAgICAgZXJyb3Jz IHRvIGJlIDAuDQo+ID4gPiArICAgICAgICAgICAgICAgIiIiDQo+ID4gPiArICAgICAgICAgICAg ICAgc2VsZi5wYXNzZWQgPSAwDQo+ID4gPiArICAgICAgICAgICAgICAgc2VsZi5mYWlsZWQgPSAw DQo+ID4gPiArICAgICAgICAgICAgICAgc2VsZi5jcmFzaGVkID0gMA0KPiA+ID4gKyAgICAgICAg ICAgICAgIHNlbGYuc2tpcHBlZCA9IDANCj4gPiA+ICsgICAgICAgICAgICAgICBzZWxmLmVycm9y cyA9IDANCj4gPiA+ICsNCj4gPiA+ICsgICAgICAgZGVmIF9fc3RyX18oc2VsZikgLT4gc3RyOg0K PiA+ID4gKyAgICAgICAgICAgICAgICIiIlJldHVybnMgdGhlIHN0cmluZyByZXByZXNlbnRhdGlv biBvZiBhIFRlc3RDb3VudHMgb2JqZWN0Lg0KPiA+ID4gKyAgICAgICAgICAgICAgICIiIg0KPiA+ DQo+ID4gRWNob2luZyB0aGUgY29tbWVudCBhYm92ZSwgSSB0aGluayBjb21tZW50cyBjYW4gYmUg ZHJvcHBlZCBmb3INCj4gPiBmdW5jdGlvbnMgbGlrZSBfX3N0cl9fLg0KPiANCj4gU2VlIGNvbW1l bnQgYWJvdmUgb24gZG9jc3RyaW5ncy4NCj4gDQo+ID4NCj4gPiA+ICsgICAgICAgICAgICAgICBy ZXR1cm4gKCdQYXNzZWQ6ICcgKyBzdHIoc2VsZi5wYXNzZWQpICsNCj4gPiA+ICsgICAgICAgICAg ICAgICAgICAgICAgICcsIEZhaWxlZDogJyArIHN0cihzZWxmLmZhaWxlZCkgKw0KPiA+ID4gKyAg ICAgICAgICAgICAgICAgICAgICAgJywgQ3Jhc2hlZDogJyArIHN0cihzZWxmLmNyYXNoZWQpICsN Cj4gPiA+ICsgICAgICAgICAgICAgICAgICAgICAgICcsIFNraXBwZWQ6ICcgKyBzdHIoc2VsZi5z a2lwcGVkKSArDQo+ID4gPiArICAgICAgICAgICAgICAgICAgICAgICAnLCBFcnJvcnM6ICcgKyBz dHIoc2VsZi5lcnJvcnMpKQ0KPiA+ID4gKw0KPiA+ID4gKyAgICAgICBkZWYgdG90YWwoc2VsZikg LT4gaW50Og0KPiA+ID4gKyAgICAgICAgICAgICAgICIiIlJldHVybnMgdG90YWwgbnVtYmVyIG9m IHN1YnRlc3RzIG9yIDEgaWYgdGhlIHRlc3Qgb2JqZWN0DQo+ID4gPiArICAgICAgICAgICAgICAg aGFzIG5vIHN1YnRlc3RzIHRvIHJlcHJlc2VudCB0aGUgdGVzdCBpdHNlbGYuIFRoaXMgbnVtYmVy IGlzDQo+ID4gPiArICAgICAgICAgICAgICAgY2FsY3VsYXRlZCBieSB0aGUgc3VtIG9mIHRoZSBw YXNzZWQsIGZhaWxlZCwgY3Jhc2hlZCwgYW5kDQo+ID4gPiArICAgICAgICAgICAgICAgc2tpcHBl ZCBzdWJ0ZXN0cy4NCj4gPg0KPiA+IEkgdGhpbmsgdGhlIGZpcnN0IHNlbnRlbmNlIHdvdWxkIGJl IHN1ZmZpY2llbnQgaGVyZSwgZS5nLg0KPiA+ICAgUmV0dXJucyB0aGUgbnVtYmVyIG9mIHN1YnRl c3RzLCBvciAxIGlmIHRoZSB0ZXN0IGhhZCBub25lLg0KPiANCj4gSSB3aWxsIGVpdGhlciBqdXN0 IHVzZSB0aGUgZmlyc3Qgc2VudGVuY2UuIE9yIEkgd2lsbCBjaGFuZ2UgdGhpcyB0byBiZToNCj4g J1JldHVybnMgdGhlIHRvdGFsIG51bWJlciBvZiB0ZXN0IGNhc2VzIHdpdGhpbiBhIHRlc3Qgb2Jq ZWN0LicNCj4gSSB0aGluayB0aGlzIG1vcmUgY2xlYXJseSBkZXBpY3RzIHdoYXQgdGhpcyBtZXRo b2QgcmV0dXJucy4NCj4gSSBtYXkgYWRkOiAnd2hlcmUgYSB0ZXN0IGNhc2UgaXMgYSB0ZXN0IHdp dGggbm8gc3VidGVzdHMuJyBTZWUNCj4gYWJvdmUgY29tbWVudCBvbiBjbGFzcyBkb2NzdHJpbmcu IEFnYWluDQo+IGlzIHRoaXMgYW4gaXNzdWUgdG8gYmUgdXNpbmcgdGhlIHRlcm0gdGVzdCBjYXNl Pw0KPiANCj4gPg0KPiA+ID4gKyAgICAgICAgICAgICAgICIiIg0KPiA+ID4gKyAgICAgICAgICAg ICAgIHJldHVybiAoc2VsZi5wYXNzZWQgKyBzZWxmLmZhaWxlZCArIHNlbGYuY3Jhc2hlZCArDQo+ ID4gPiArICAgICAgICAgICAgICAgICAgICAgICBzZWxmLnNraXBwZWQpDQo+ID4gPiArDQo+ID4g PiArICAgICAgIGRlZiBhZGRfc3VidGVzdF9jb3VudHMoc2VsZiwgY291bnRzOiBUZXN0Q291bnRz KSAtPiBOb25lOg0KPiA+ID4gKyAgICAgICAgICAgICAgICIiIg0KPiA+ID4gKyAgICAgICAgICAg ICAgIEFkZHMgdGhlIGNvdW50cyBvZiBhbm90aGVyIFRlc3RDb3VudHMgb2JqZWN0IHRvIHRoZSBj dXJyZW50DQo+ID4gPiArICAgICAgICAgICAgICAgVGVzdENvdW50cyBvYmplY3QuIFVzZWQgdG8g YWRkIHRoZSBjb3VudHMgb2YgYSBzdWJ0ZXN0IHRvIHRoZQ0KPiA+ID4gKyAgICAgICAgICAgICAg IHBhcmVudCB0ZXN0Lg0KPiA+ID4gKw0KPiA+ID4gKyAgICAgICAgICAgICAgIFBhcmFtZXRlcnM6 DQo+ID4gPiArICAgICAgICAgICAgICAgY291bnRzIC0gYSBkaWZmZXJlbnQgVGVzdENvdW50cyBv YmplY3Qgd2hvc2UgY291bnRzDQo+ID4gPiArICAgICAgICAgICAgICAgICAgICAgICB3aWxsIGJl IGFkZGVkIHRvIHRoZSBjb3VudHMgb2YgdGhlIFRlc3RDb3VudHMgb2JqZWN0DQo+ID4gPiArICAg ICAgICAgICAgICAgIiIiDQo+ID4gPiArICAgICAgICAgICAgICAgc2VsZi5wYXNzZWQgKz0gY291 bnRzLnBhc3NlZA0KPiA+ID4gKyAgICAgICAgICAgICAgIHNlbGYuZmFpbGVkICs9IGNvdW50cy5m YWlsZWQNCj4gPiA+ICsgICAgICAgICAgICAgICBzZWxmLmNyYXNoZWQgKz0gY291bnRzLmNyYXNo ZWQNCj4gPiA+ICsgICAgICAgICAgICAgICBzZWxmLnNraXBwZWQgKz0gY291bnRzLnNraXBwZWQN Cj4gPiA+ICsgICAgICAgICAgICAgICBzZWxmLmVycm9ycyArPSBjb3VudHMuZXJyb3JzDQo+ID4g PiArDQo+ID4gPiArICAgICAgIGRlZiBnZXRfc3RhdHVzKHNlbGYpIC0+IFRlc3RTdGF0dXM6DQo+ ID4gPiArICAgICAgICAgICAgICAgIiIiUmV0dXJucyB0aGUgZXhwZWN0ZWQgc3RhdHVzIG9mIGEg VGVzdCB1c2luZyB0ZXN0IGNvdW50cy4iIiINCj4gPg0KPiA+IG5pdDogd291bGQgImFnZ3JlZ2F0 ZWQgc3RhdHVzIiBiZSBhIGJpdCBtb3JlIGFjY3VyYXRlIHRoYW4gImV4cGVjdGVkIHN0YXR1cyIg Pw0KPiA+DQo+IA0KPiBJIGxpa2UgdGhlIGNoYW5nZSB0byAiYWdncmVnYXRlZCBzdGF0dXMiLiBJ IHdpbGwgY2hhbmdlIHRoaXMgaXMgdjMgOikNCj4gDQo+ID4gPiArICAgICAgICAgICAgICAgaWYg c2VsZi5jcmFzaGVkOg0KPiA+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgIyBJZiBvbmUgb2Yg dGhlIHN1YnRlc3RzIGNyYXNoLCB0aGUgZXhwZWN0ZWQgc3RhdHVzDQo+ID4gPiArICAgICAgICAg ICAgICAgICAgICAgICAjIG9mIHRoZSBUZXN0IGlzIGNyYXNoZWQuDQo+ID4gPiArICAgICAgICAg ICAgICAgICAgICAgICByZXR1cm4gVGVzdFN0YXR1cy5URVNUX0NSQVNIRUQNCj4gPiA+ICsgICAg ICAgICAgICAgICBlbGlmIHNlbGYuZmFpbGVkOg0KPiA+ID4gKyAgICAgICAgICAgICAgICAgICAg ICAgIyBPdGhlcndpc2UgaWYgb25lIG9mIHRoZSBzdWJ0ZXN0cyBmYWlsLCB0aGUNCj4gPiA+ICsg ICAgICAgICAgICAgICAgICAgICAgICMgZXhwZWN0ZWQgc3RhdHVzIG9mIHRoZSBUZXN0IGlzIGZh aWxlZC4NCj4gPiA+ICsgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBUZXN0U3RhdHVzLkZB SUxVUkUNCj4gPiA+ICsgICAgICAgICAgICAgICBlbGlmIHNlbGYucGFzc2VkOg0KPiA+ID4gKyAg ICAgICAgICAgICAgICAgICAgICAgIyBPdGhlcndpc2UgaWYgb25lIG9mIHRoZSBzdWJ0ZXN0cyBw YXNzLCB0aGUNCj4gPiA+ICsgICAgICAgICAgICAgICAgICAgICAgICMgZXhwZWN0ZWQgc3RhdHVz IG9mIHRoZSBUZXN0IGlzIHBhc3NlZC4NCj4gPiA+ICsgICAgICAgICAgICAgICAgICAgICAgIHJl dHVybiBUZXN0U3RhdHVzLlNVQ0NFU1MNCj4gPiA+ICsgICAgICAgICAgICAgICBlbHNlOg0KPiA+ ID4gKyAgICAgICAgICAgICAgICAgICAgICAgIyBGaW5hbGx5LCBpZiBub25lIG9mIHRoZSBzdWJ0 ZXN0cyBoYXZlIGZhaWxlZCwNCj4gPiA+ICsgICAgICAgICAgICAgICAgICAgICAgICMgY3Jhc2hl ZCwgb3IgcGFzc2VkLCB0aGUgZXhwZWN0ZWQgc3RhdHVzIG9mIHRoZQ0KPiA+ID4gKyAgICAgICAg ICAgICAgICAgICAgICAgIyBUZXN0IGlzIHNraXBwZWQuDQo+ID4gPiArICAgICAgICAgICAgICAg ICAgICAgICByZXR1cm4gVGVzdFN0YXR1cy5TS0lQUEVEDQo+ID4gPiArDQo+ID4gPiArICAgICAg IGRlZiBhZGRfc3RhdHVzKHNlbGYsIHN0YXR1czogVGVzdFN0YXR1cykgLT4gTm9uZToNCj4gPiA+ ICsgICAgICAgICAgICAgICAiIiINCj4gPiA+ICsgICAgICAgICAgICAgICBHaXZlbiBpbnB1dHRl ZCBzdGF0dXMsIGluY3JlbWVudHMgY29ycmVzcG9uZGluZyBhdHRyaWJ1dGUgb2YNCj4gPiA+ICsg ICAgICAgICAgICAgICBUZXN0Q291bnRzIG9iamVjdC4NCj4gPiA+ICsNCj4gPiA+ICsgICAgICAg ICAgICAgICBQYXJhbWV0ZXJzOg0KPiA+ID4gKyAgICAgICAgICAgICAgIHN0YXR1cyAtIHN0YXR1 cyB0byBiZSBhZGRlZCB0byB0aGUgVGVzdENvdW50cyBvYmplY3QNCj4gPiA+ICsgICAgICAgICAg ICAgICAiIiINCj4gPiA+ICsgICAgICAgICAgICAgICBpZiBzdGF0dXMgPT0gVGVzdFN0YXR1cy5T VUNDRVNTIG9yIFwNCj4gPiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdHVz ID09IFRlc3RTdGF0dXMuTk9fVEVTVFM6DQo+ID4gPiArICAgICAgICAgICAgICAgICAgICAgICAj IGlmIHN0YXR1cyBpcyBOT19URVNUUyB0aGUgbW9zdCBhcHByb3ByaWF0ZQ0KPiA+ID4gKyAgICAg ICAgICAgICAgICAgICAgICAgIyBhdHRyaWJ1dGUgdG8gaW5jcmVtZW50IGlzIHBhc3NlZCBiZWNh dXNlDQo+ID4gPiArICAgICAgICAgICAgICAgICAgICAgICAjIHRoZSB0ZXN0IGRpZCBub3QgZmFp bCwgY3Jhc2ggb3IgZ2V0IHNraXBwZWQuDQo+ID4gPiArICAgICAgICAgICAgICAgICAgICAgICBz ZWxmLnBhc3NlZCArPSAxDQo+ID4gPiArICAgICAgICAgICAgICAgZWxpZiBzdGF0dXMgPT0gVGVz dFN0YXR1cy5GQUlMVVJFOg0KPiA+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5mYWls ZWQgKz0gMQ0KPiA+ID4gKyAgICAgICAgICAgICAgIGVsaWYgc3RhdHVzID09IFRlc3RTdGF0dXMu U0tJUFBFRDoNCj4gPiA+ICsgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuc2tpcHBlZCArPSAx DQo+ID4gPiArICAgICAgICAgICAgICAgZWxzZToNCj4gPiA+ICsgICAgICAgICAgICAgICAgICAg ICAgIHNlbGYuY3Jhc2hlZCArPSAxDQo+ID4gPiArDQo+ID4gPiAgY2xhc3MgTGluZVN0cmVhbToN Cj4gPiA+IC0gICAgICAgIiIiUHJvdmlkZXMgYSBwZWVrKCkvcG9wKCkgaW50ZXJmYWNlIG92ZXIg YW4gaXRlcmF0b3Igb2YgKGxpbmUjLCB0ZXh0KS4iIiINCj4gPiA+ICsgICAgICAgIiIiDQo+ID4g PiArICAgICAgIEEgY2xhc3MgdG8gcmVwcmVzZW50IHRoZSBsaW5lcyBvZiBrZXJuZWwgb3V0cHV0 Lg0KPiA+ID4gKyAgICAgICBQcm92aWRlcyBhIHBlZWsoKS9wb3AoKSBpbnRlcmZhY2Ugb3ZlciBh biBpdGVyYXRvciBvZg0KPiA+ID4gKyAgICAgICAobGluZSMsIHRleHQpLg0KPiA+ID4gKyAgICAg ICAiIiINCj4gPiA+ICAgICAgICAgX2xpbmVzOiBJdGVyYXRvcltUdXBsZVtpbnQsIHN0cl1dDQo+ ID4gPiAgICAgICAgIF9uZXh0OiBUdXBsZVtpbnQsIHN0cl0NCj4gPiA+ICAgICAgICAgX2RvbmU6 IGJvb2wNCj4gPiA+DQo+ID4gPiAgICAgICAgIGRlZiBfX2luaXRfXyhzZWxmLCBsaW5lczogSXRl cmF0b3JbVHVwbGVbaW50LCBzdHJdXSk6DQo+ID4gPiArICAgICAgICAgICAgICAgIiIiU2V0IGRl ZmF1bHRzIGZvciBMaW5lU3RyZWFtIG9iamVjdCBhbmQgc2V0cyBfbGluZXMNCj4gPiA+ICsgICAg ICAgICAgICAgICBhdHRyaWJ1dGUgdG8gbGluZXMgcGFyYW1ldGVyLg0KPiA+DQo+ID4gbml0OiB0 aGlzICJpbml0aWFsaXplcyIgbW9yZSB0aGFuICJzZXRbc10gZGVmYXVsdHMiLg0KPiA+IFBlcmhh cHM6DQo+ID4gICBDcmVhdGVzIGEgbmV3IExpbmVTdHJlYW0gdGhhdCB3cmFwcyB0aGUgZ2l2ZW4g aXRlcmF0b3IuDQo+ID4NCj4gDQo+IFRoYW5rcyBmb3IgdGhpcyBzdWdnZXN0aW9uISBJIHdpbGwg ZGVmaW5pdGVseSBjaGFuZ2UgdGhpcyBpbiB2My4NCj4gSSBwcmVmZXIgdGhpcyBkZXNjcmlwdGlv biBtdWNoIG1vcmUuDQo+IA0KPiA+DQo+ID4gPiArICAgICAgICAgICAgICAgIiIiDQo+ID4gPiAg ICAgICAgICAgICAgICAgc2VsZi5fbGluZXMgPSBsaW5lcw0KPiA+ID4gICAgICAgICAgICAgICAg IHNlbGYuX2RvbmUgPSBGYWxzZQ0KPiA+ID4gICAgICAgICAgICAgICAgIHNlbGYuX25leHQgPSAo MCwgJycpDQo+ID4gPiAgICAgICAgICAgICAgICAgc2VsZi5fZ2V0X25leHQoKQ0KPiA+ID4NCj4g PiA+ICAgICAgICAgZGVmIF9nZXRfbmV4dChzZWxmKSAtPiBOb25lOg0KPiA+ID4gKyAgICAgICAg ICAgICAgICIiIkFkdmFuY2VzIHRoZSBMaW5lU3RlYW0gdG8gdGhlIG5leHQgbGluZSBvciBzZXRz IHRoZSBfZG9uZQ0KPiA+ID4gKyAgICAgICAgICAgICAgIGF0dHJpYnV0ZSBpZiB0aGUgTGluZVN0 cmVhbSBoYXMgcmVhY2hlZCB0aGUgZW5kIG9mIHRoZSBsaW5lcy4NCj4gPiA+ICsgICAgICAgICAg ICAgICAiIiINCj4gPiA+ICAgICAgICAgICAgICAgICB0cnk6DQo+ID4gPiAgICAgICAgICAgICAg ICAgICAgICAgICBzZWxmLl9uZXh0ID0gbmV4dChzZWxmLl9saW5lcykNCj4gPiA+ICAgICAgICAg ICAgICAgICBleGNlcHQgU3RvcEl0ZXJhdGlvbjoNCj4gPiA+ICAgICAgICAgICAgICAgICAgICAg ICAgIHNlbGYuX2RvbmUgPSBUcnVlDQo+ID4gPg0KPiA+ID4gICAgICAgICBkZWYgcGVlayhzZWxm KSAtPiBzdHI6DQo+ID4gPiArICAgICAgICAgICAgICAgIiIiUmV0dXJucyB0aGUgbmV4dCBsaW5l IGluIHRoZSBMaW5lU3RyZWFtIHdpdGhvdXQgYWR2YW5jaW5nDQo+ID4gPiArICAgICAgICAgICAg ICAgdGhlIExpbmVTdHJlYW0uDQo+ID4NCj4gPiBMb29rcyBnb29kIHRvIG1lLCB0aGFua3MhDQo+ ID4NCj4gPiBCdXQgcGVyaGFwcyBzYXlpbmcgInRoZSBjdXJyZW50IGxpbmUiIHdvdWxkIGJlIG1v cmUgY2xlYXI/DQo+ID4NCj4gPiBJLmUuDQo+ID4gcGVlaygpDQo+ID4gICBSZXR1cm5zIHRoZSBj dXJyZW50IGxpbmUsIHdpdGhvdXQgYWR2YW5jaW5nIHRoZSBMaW5lU3RyZWFtLg0KPiA+DQo+ID4g cG9wKCkNCj4gPiAgIFJldHVybnMgdGhlIGN1cnJlbnQgbGluZSBhbmQgYWR2YW5jZXMgdGhlIExp bmVTdHJlYW0gdG8gdGhlIG5leHQgbGluZS4NCj4gPg0KPiA+IGxpbmVfbnVtYmVyKCkNCj4gPiAg IFJldHVybnMgdGhlIGxpbmUgbnVtYmVyIG9mIHRoZSBjdXJyZW50IGxpbmUuDQo+ID4NCj4gDQo+ IEkgbGlrZSBhbGwgb2YgdGhlc2UgY2hhbmdlcy4gV2lsbCBjaGFuZ2UgaW4gdjMuDQo+IA0KPiA+ ID4gKyAgICAgICAgICAgICAgICIiIg0KPiA+ID4gICAgICAgICAgICAgICAgIHJldHVybiBzZWxm Ll9uZXh0WzFdDQo+ID4gPg0KPiA+ID4gICAgICAgICBkZWYgcG9wKHNlbGYpIC0+IHN0cjoNCj4g PiA+ICsgICAgICAgICAgICAgICAiIiJSZXR1cm5zIHRoZSBuZXh0IGxpbmUgaW4gdGhlIExpbmVT dHJlYW0gYW5kIGFkdmFuY2VzIHRoZQ0KPiA+ID4gKyAgICAgICAgICAgICAgIExpbmVTdHJlYW0g dG8gdGhlIG5leHQgbGluZS4NCj4gPiA+ICsgICAgICAgICAgICAgICAiIiINCj4gPiA+ICAgICAg ICAgICAgICAgICBuID0gc2VsZi5fbmV4dA0KPiA+ID4gICAgICAgICAgICAgICAgIHNlbGYuX2dl dF9uZXh0KCkNCj4gPiA+ICAgICAgICAgICAgICAgICByZXR1cm4gblsxXQ0KPiA+ID4NCj4gPiA+ ICAgICAgICAgZGVmIF9fYm9vbF9fKHNlbGYpIC0+IGJvb2w6DQo+ID4gPiArICAgICAgICAgICAg ICAgIiIiUmV0dXJucyB3aGV0aGVyIHRoZSBMaW5lU3RyZWFtIGhhcyByZWFjaGVkIHRoZSBlbmQg b2YgdGhlDQo+ID4gPiArICAgICAgICAgICAgICAgbGluZXMuDQo+ID4gPiArICAgICAgICAgICAg ICAgIiIiDQo+ID4NCj4gPiBQZXJoYXBzIHRoaXMgKGEgYml0IHNob3J0ZXIpOg0KPiA+ICAgQ2hl Y2tzIHdoZXRoZXIgdGhlcmUncyBhbnkgbW9yZSBsaW5lcyBpbiB0aGUgc3RyZWFtLg0KPiANCj4g SSBkbyB0aGluayB0aGlzIGNvdWxkIGJlIHNob3J0ZXIuIEhvd2V2ZXIsIEkgdGhpbmsgJ2NoZWNr cycgaXMgYSBiaXQgaW5leGFjdC4NCj4gSSBwcmVmZXIgJ1JldHVybnMgaWYgc3RyZWFtIGhhcyBh bnkgbW9yZSBsaW5lcycgb3INCj4gJ1JldHVybnMgaWYgc3RyZWFtIGlzIGF0IGVuZCBvZiBsaW5l cy4nDQoNClRoZXNlIGhhdmUgb3Bwb3NpdGUgbWVhbmluZ3MuICBEb2VzIFRydWUgbWVhbiB0aGVy ZSBhcmUgbW9yZQ0KbGluZXMsIG9yIHRoZXJlIGFyZSBubyBtb3JlIGxpbmVzPyAgWW91IHNob3Vs ZCBwaWNrIHRoZSB3b3JkaW5nDQp0aGF0IG1ha2VzIHNlbnNlIGFjY29yZGluZyB0byB0aGUgdmFs dWUuICBJIHdvdWxkIHJlY29tbWVuZA0KdG8gaW5jbHVkZSB0aGUgd29yZCAiVHJ1ZSIgaW4gdGhl IGRlc2NyaXB0aW9uLiAgQXMgaW46DQoiUmV0dXJucyBUcnVlIGlmIHN0cmVhbSBoYXMgbW9yZSBs aW5lcyIuDQoNCj4gDQo+ID4NCj4gPiA+ICAgICAgICAgICAgICAgICByZXR1cm4gbm90IHNlbGYu X2RvbmUNCj4gPiA+DQo+ID4gPiAgICAgICAgICMgT25seSB1c2VkIGJ5IGt1bml0X3Rvb2xfdGVz dC5weS4NCj4gPiA+ICAgICAgICAgZGVmIF9faXRlcl9fKHNlbGYpIC0+IEl0ZXJhdG9yW3N0cl06 DQo+ID4gPiArICAgICAgICAgICAgICAgIiIiRW1wdGllcyBhbGwgbGluZXMgc3RvcmVkIGluIExp bmVTdHJlYW0gb2JqZWN0IGludG8NCj4gPiA+ICsgICAgICAgICAgICAgICBJdGVyYXRvciBvYmpl Y3QgYW5kIHJldHVybnMgdGhlIEl0ZXJhdG9yIG9iamVjdC4NCj4gPiA+ICsgICAgICAgICAgICAg ICAiIiINCj4gPg0KPiA+IE5pdDogaXQgZG9lc24ndCByZWFsbHkgcmV0dXJuIGFuIGl0ZXJhdG9y IG9iamVjdC4NCj4gPiBHaXZlbiB0aGlzIGlzIGFub3RoZXIgX18gZnVuY3Rpb24sIEkgdGhpbmsg d2UgY2FuIGxlYXZlIG9mZiB0aGUgY29tbWVudC4NCj4gPg0KPiA+IFRoZSBiZWhhdmlvciBpcyBh Ym91dCB3aGF0IG9uZSB3b3VsZCBleHBlY3QgZm9yIF9faXRlcl9fKCkuDQo+ID4NCj4gDQo+IEkg dGhpbmsgaXQgaXMgYmVzdCB0byBrZWVwIHRoZSBzaW1wbGlzdGljIGRvY3N0cmluZ3MgZm9yIGFs bCBwdWJsaWMgbWV0aG9kcw0KPiAoc2VlIGNvbW1lbnQgYWJvdmUpLiBIb3dldmVyLCBJIHRob3Vn aHQgdGhpcyBmdW5jdGlvbiBkaWQgcmV0dXJuIGFuIEl0ZXJhdG9yLg0KPiBJIG1heSBiZSBtaXN0 YWtlbiBidXQgc2luY2UgdGhpcyBtZXRob2QgdXNlcyB0aGUgeWllbGQga2V5d29yZCwgdGhpcw0K PiBmdW5jdGlvbiB3b3VsZCByZXR1cm4gYSBnZW5lcmF0b3IsIHdoaWNoIGlzIGEgdHlwZSBvZiBp dGVyYXRvci4gU2luY2UgSQ0KPiB3b3VsZCBsaWtlIHRvIGtlZXAgdGhlIGRvY3N0cmluZywgY291 bGQgeW91IGV4cGxhaW4gZnVydGhlcj8NCj4gDQo+ID4gPiAgICAgICAgICAgICAgICAgd2hpbGUg Ym9vbChzZWxmKToNCj4gPiA+ICAgICAgICAgICAgICAgICAgICAgICAgIHlpZWxkIHNlbGYucG9w KCkNCj4gPiA+DQo+ID4gPiAgICAgICAgIGRlZiBsaW5lX251bWJlcihzZWxmKSAtPiBpbnQ6DQo+ ID4gPiArICAgICAgICAgICAgICAgIiIiUmV0dXJucyB0aGUgbGluZSBudW1iZXIgb2YgdGhlIG5l eHQgbGluZSBpbiB0aGUNCj4gPiA+ICsgICAgICAgICAgICAgICBMaW5lU3RyZWFtLg0KPiA+ID4g KyAgICAgICAgICAgICAgICIiIg0KPiA+ID4gICAgICAgICAgICAgICAgIHJldHVybiBzZWxmLl9u ZXh0WzBdDQo+ID4gPg0KPiA+ID4gLWt1bml0X3N0YXJ0X3JlID0gcmUuY29tcGlsZShyJ1RBUCB2 ZXJzaW9uIFswLTldKyQnKQ0KPiA+ID4gLWt1bml0X2VuZF9yZSA9IHJlLmNvbXBpbGUoJyhMaXN0 IG9mIGFsbCBwYXJ0aXRpb25zOnwnDQo+ID4gPiAtICAgICAgICAgICAgICAgICAgICAgICAgICdL ZXJuZWwgcGFuaWMgLSBub3Qgc3luY2luZzogVkZTOnxyZWJvb3Q6IFN5c3RlbSBoYWx0ZWQpJykN Cj4gPiA+ICsjIFBhcnNpbmcgaGVscGVyIG1ldGhvZHM6DQo+ID4gPiArDQo+ID4gPiArS1RBUF9T VEFSVCA9IHJlLmNvbXBpbGUocidLVEFQIHZlcnNpb24gKFswLTldKykkJykNCj4gPiA+ICtUQVBf U1RBUlQgPSByZS5jb21waWxlKHInVEFQIHZlcnNpb24gKFswLTldKykkJykNCj4gPiA+ICtLVEFQ X0VORCA9IHJlLmNvbXBpbGUoJyhMaXN0IG9mIGFsbCBwYXJ0aXRpb25zOnwnDQo+ID4gPiArICAg ICAgICdLZXJuZWwgcGFuaWMgLSBub3Qgc3luY2luZzogVkZTOnxyZWJvb3Q6IFN5c3RlbSBoYWx0 ZWQpJykNCj4gPiA+DQo+ID4gPiAgZGVmIGV4dHJhY3RfdGFwX2xpbmVzKGtlcm5lbF9vdXRwdXQ6 IEl0ZXJhYmxlW3N0cl0pIC0+IExpbmVTdHJlYW06DQo+ID4gPiAtICAgICAgIGRlZiBpc29sYXRl X2t1bml0X291dHB1dChrZXJuZWxfb3V0cHV0OiBJdGVyYWJsZVtzdHJdKSAtPiBJdGVyYXRvcltU dXBsZVtpbnQsIHN0cl1dOg0KPiA+ID4gKyAgICAgICAiIiJFeHRyYWN0cyBLVEFQIGxpbmVzIGZy b20gaW5wdXR0ZWQga2VybmVsIG91dHB1dCBpbiBMaW5lU3RyZWFtDQo+ID4gPiArICAgICAgIG9i amVjdC4iIiINCj4gPiA+ICsgICAgICAgZGVmIGlzb2xhdGVfa3RhcF9vdXRwdXQoa2VybmVsX291 dHB1dDogSXRlcmFibGVbc3RyXSkgXA0KPiA+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgLT4g SXRlcmF0b3JbVHVwbGVbaW50LCBzdHJdXToNCj4gPiA+ICAgICAgICAgICAgICAgICBsaW5lX251 bSA9IDANCj4gPiA+ICAgICAgICAgICAgICAgICBzdGFydGVkID0gRmFsc2UNCj4gPiA+ICAgICAg ICAgICAgICAgICBmb3IgbGluZSBpbiBrZXJuZWxfb3V0cHV0Og0KPiA+ID4gICAgICAgICAgICAg ICAgICAgICAgICAgbGluZV9udW0gKz0gMQ0KPiA+ID4gLSAgICAgICAgICAgICAgICAgICAgICAg bGluZSA9IGxpbmUucnN0cmlwKCkgICMgbGluZSBhbHdheXMgaGFzIGEgdHJhaWxpbmcgXG4NCj4g PiA+IC0gICAgICAgICAgICAgICAgICAgICAgIGlmIGt1bml0X3N0YXJ0X3JlLnNlYXJjaChsaW5l KToNCj4gPiA+ICsgICAgICAgICAgICAgICAgICAgICAgIGxpbmUgPSBsaW5lLnJzdHJpcCgpICAj IHJlbW92ZSB0cmFpbGluZyBcbg0KPiA+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgaWYgbm90 IHN0YXJ0ZWQgYW5kIEtUQVBfU1RBUlQuc2VhcmNoKGxpbmUpOg0KPiA+ID4gKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAjIHN0YXJ0IGV4dHJhY3RpbmcgS1RBUCBsaW5lcyBhbmQgc2V0 IHByZWZpeA0KPiA+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIHRvIG51bWJl ciBvZiBjaGFyYWN0ZXJzIGJlZm9yZSB2ZXJzaW9uIGxpbmUNCj4gPiA+ICsgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgcHJlZml4X2xlbiA9IGxlbigNCj4gPiA+ICsgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBsaW5lLnNwbGl0KCdLVEFQIHZlcnNpb24nKVswXSkN Cj4gPiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhcnRlZCA9IFRydWUNCj4g PiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeWllbGQgbGluZV9udW0sIGxpbmVb cHJlZml4X2xlbjpdDQo+ID4gPiArICAgICAgICAgICAgICAgICAgICAgICBlbGlmIG5vdCBzdGFy dGVkIGFuZCBUQVBfU1RBUlQuc2VhcmNoKGxpbmUpOg0KPiA+ID4gKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAjIHN0YXJ0IGV4dHJhY3RpbmcgS1RBUCBsaW5lcyBhbmQgc2V0IHByZWZp eA0KPiA+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIHRvIG51bWJlciBvZiBj aGFyYWN0ZXJzIGJlZm9yZSB2ZXJzaW9uIGxpbmUNCj4gPiA+ICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgcHJlZml4X2xlbiA9IGxlbihsaW5lLnNwbGl0KCdUQVAgdmVyc2lvbicpWzBd KQ0KPiA+ID4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGFydGVkID0gVHJ1ZQ0K PiA+ID4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB5aWVsZCBsaW5lX251bSwgbGlu ZVtwcmVmaXhfbGVuOl0NCj4gPiA+IC0gICAgICAgICAgICAgICAgICAgICAgIGVsaWYga3VuaXRf ZW5kX3JlLnNlYXJjaChsaW5lKToNCj4gPiA+ICsgICAgICAgICAgICAgICAgICAgICAgIGVsaWYg c3RhcnRlZCBhbmQgS1RBUF9FTkQuc2VhcmNoKGxpbmUpOg0KPiA+ID4gKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAjIHN0b3AgZXh0cmFjdGluZyBLVEFQIGxpbmVzDQo+ID4gPiAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrDQo+ID4gPiAgICAgICAgICAgICAgICAg ICAgICAgICBlbGlmIHN0YXJ0ZWQ6DQo+ID4gPiAtICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIHlpZWxkIGxpbmVfbnVtLCBsaW5lW3ByZWZpeF9sZW46XQ0KPiA+ID4gLSAgICAgICByZXR1 cm4gTGluZVN0cmVhbShsaW5lcz1pc29sYXRlX2t1bml0X291dHB1dChrZXJuZWxfb3V0cHV0KSkN Cj4gPiA+IC0NCj4gPiA+IC1ESVZJREVSID0gJz0nICogNjANCj4gPiA+IC0NCj4gPiA+IC1SRVNF VCA9ICdcMDMzWzA7MG0nDQo+ID4gPiAtDQo+ID4gPiAtZGVmIHJlZCh0ZXh0KSAtPiBzdHI6DQo+ ID4gPiAtICAgICAgIHJldHVybiAnXDAzM1sxOzMxbScgKyB0ZXh0ICsgUkVTRVQ+IC0NCj4gPiA+ IC1kZWYgeWVsbG93KHRleHQpIC0+IHN0cjoNCj4gPiA+IC0gICAgICAgcmV0dXJuICdcMDMzWzE7 MzNtJyArIHRleHQgKyBSRVNFVA0KPiA+ID4gLQ0KPiA+ID4gLWRlZiBncmVlbih0ZXh0KSAtPiBz dHI6DQo+ID4gPiAtICAgICAgIHJldHVybiAnXDAzM1sxOzMybScgKyB0ZXh0ICsgUkVTRVQNCj4g PiA+IC0NCj4gPiA+IC1kZWYgcHJpbnRfd2l0aF90aW1lc3RhbXAobWVzc2FnZSkgLT4gTm9uZToN Cj4gPiA+IC0gICAgICAgcHJpbnQoJ1slc10gJXMnICUgKGRhdGV0aW1lLm5vdygpLnN0cmZ0aW1l KCclSDolTTolUycpLCBtZXNzYWdlKSkNCj4gPiA+IC0NCj4gPiA+IC1kZWYgZm9ybWF0X3N1aXRl X2RpdmlkZXIobWVzc2FnZSkgLT4gc3RyOg0KPiA+ID4gLSAgICAgICByZXR1cm4gJz09PT09PT09 ICcgKyBtZXNzYWdlICsgJyA9PT09PT09PScNCj4gPiA+IC0NCj4gPiA+IC1kZWYgcHJpbnRfc3Vp dGVfZGl2aWRlcihtZXNzYWdlKSAtPiBOb25lOg0KPiA+ID4gLSAgICAgICBwcmludF93aXRoX3Rp bWVzdGFtcChESVZJREVSKQ0KPiA+ID4gLSAgICAgICBwcmludF93aXRoX3RpbWVzdGFtcChmb3Jt YXRfc3VpdGVfZGl2aWRlcihtZXNzYWdlKSkNCj4gPiA+IC0NCj4gPiA+IC1kZWYgcHJpbnRfbG9n KGxvZykgLT4gTm9uZToNCj4gPiA+IC0gICAgICAgZm9yIG0gaW4gbG9nOg0KPiA+ID4gLSAgICAg ICAgICAgICAgIHByaW50X3dpdGhfdGltZXN0YW1wKG0pDQo+ID4gPiAtDQo+ID4gPiAtVEFQX0VO VFJJRVMgPSByZS5jb21waWxlKHInXihUQVB8W1xzXSpva3xbXHNdKm5vdCBva3xbXHNdKlswLTld K1wuXC5bMC05XSt8W1xzXSojIChTdWJ0ZXN0OnwuKjoga3VuaXQgdGVzdCBjYXNlIGNyYXNoZWQh KSkuKiQnKQ0KPiA+ID4gLQ0KPiA+ID4gLWRlZiBjb25zdW1lX25vbl9kaWFnbm9zdGljKGxpbmVz OiBMaW5lU3RyZWFtKSAtPiBOb25lOg0KPiA+ID4gLSAgICAgICB3aGlsZSBsaW5lcyBhbmQgbm90 IFRBUF9FTlRSSUVTLm1hdGNoKGxpbmVzLnBlZWsoKSk6DQo+ID4gPiAtICAgICAgICAgICAgICAg bGluZXMucG9wKCkNCj4gPiA+IC0NCj4gPiA+IC1kZWYgc2F2ZV9ub25fZGlhZ25vc3RpYyhsaW5l czogTGluZVN0cmVhbSwgdGVzdF9jYXNlOiBUZXN0Q2FzZSkgLT4gTm9uZToNCj4gPiA+IC0gICAg ICAgd2hpbGUgbGluZXMgYW5kIG5vdCBUQVBfRU5UUklFUy5tYXRjaChsaW5lcy5wZWVrKCkpOg0K PiA+ID4gLSAgICAgICAgICAgICAgIHRlc3RfY2FzZS5sb2cuYXBwZW5kKGxpbmVzLnBlZWsoKSkN Cj4gPiA+IC0gICAgICAgICAgICAgICBsaW5lcy5wb3AoKQ0KPiA+ID4gLQ0KPiA+ID4gLU9rTm90 T2tSZXN1bHQgPSBuYW1lZHR1cGxlKCdPa05vdE9rUmVzdWx0JywgWydpc19vaycsJ2Rlc2NyaXB0 aW9uJywgJ3RleHQnXSkNCj4gPiA+IC0NCj4gPiA+IC1PS19OT1RfT0tfU0tJUCA9IHJlLmNvbXBp bGUocideW1xzXSoob2t8bm90IG9rKSBbMC05XSsgLSAoLiopICMgU0tJUCguKikkJykNCj4gPiA+ IC0NCj4gPiA+IC1PS19OT1RfT0tfU1VCVEVTVCA9IHJlLmNvbXBpbGUocideW1xzXSsob2t8bm90 IG9rKSBbMC05XSsgLSAoLiopJCcpDQo+ID4gPiAtDQo+ID4gPiAtT0tfTk9UX09LX01PRFVMRSA9 IHJlLmNvbXBpbGUocideKG9rfG5vdCBvaykgKFswLTldKykgLSAoLiopJCcpDQo+ID4gPiAtDQo+ ID4gPiAtZGVmIHBhcnNlX29rX25vdF9va190ZXN0X2Nhc2UobGluZXM6IExpbmVTdHJlYW0sIHRl c3RfY2FzZTogVGVzdENhc2UpIC0+IGJvb2w6DQo+ID4gPiAtICAgICAgIHNhdmVfbm9uX2RpYWdu b3N0aWMobGluZXMsIHRlc3RfY2FzZSkNCj4gPiA+IC0gICAgICAgaWYgbm90IGxpbmVzOg0KPiA+ ID4gLSAgICAgICAgICAgICAgIHRlc3RfY2FzZS5zdGF0dXMgPSBUZXN0U3RhdHVzLlRFU1RfQ1JB U0hFRA0KPiA+ID4gLSAgICAgICAgICAgICAgIHJldHVybiBUcnVlDQo+ID4gPiAtICAgICAgIGxp bmUgPSBsaW5lcy5wZWVrKCkNCj4gPiA+IC0gICAgICAgbWF0Y2ggPSBPS19OT1RfT0tfU1VCVEVT VC5tYXRjaChsaW5lKQ0KPiA+ID4gLSAgICAgICB3aGlsZSBub3QgbWF0Y2ggYW5kIGxpbmVzOg0K PiA+ID4gLSAgICAgICAgICAgICAgIGxpbmUgPSBsaW5lcy5wb3AoKQ0KPiA+ID4gLSAgICAgICAg ICAgICAgIG1hdGNoID0gT0tfTk9UX09LX1NVQlRFU1QubWF0Y2gobGluZSkNCj4gPiA+IC0gICAg ICAgaWYgbWF0Y2g6DQo+ID4gPiAtICAgICAgICAgICAgICAgdGVzdF9jYXNlLmxvZy5hcHBlbmQo bGluZXMucG9wKCkpDQo+ID4gPiAtICAgICAgICAgICAgICAgdGVzdF9jYXNlLm5hbWUgPSBtYXRj aC5ncm91cCgyKQ0KPiA+ID4gLSAgICAgICAgICAgICAgIHNraXBfbWF0Y2ggPSBPS19OT1RfT0tf U0tJUC5tYXRjaChsaW5lKQ0KPiA+ID4gLSAgICAgICAgICAgICAgIGlmIHNraXBfbWF0Y2g6DQo+ ID4gPiAtICAgICAgICAgICAgICAgICAgICAgICB0ZXN0X2Nhc2Uuc3RhdHVzID0gVGVzdFN0YXR1 cy5TS0lQUEVEDQo+ID4gPiAtICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gVHJ1ZQ0KPiA+ ID4gLSAgICAgICAgICAgICAgIGlmIHRlc3RfY2FzZS5zdGF0dXMgPT0gVGVzdFN0YXR1cy5URVNU X0NSQVNIRUQ6DQo+ID4gPiAtICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gVHJ1ZQ0KPiA+ ID4gLSAgICAgICAgICAgICAgIGlmIG1hdGNoLmdyb3VwKDEpID09ICdvayc6DQo+ID4gPiAtICAg ICAgICAgICAgICAgICAgICAgICB0ZXN0X2Nhc2Uuc3RhdHVzID0gVGVzdFN0YXR1cy5TVUNDRVNT DQo+ID4gPiAtICAgICAgICAgICAgICAgZWxzZToNCj4gPiA+IC0gICAgICAgICAgICAgICAgICAg ICAgIHRlc3RfY2FzZS5zdGF0dXMgPSBUZXN0U3RhdHVzLkZBSUxVUkUNCj4gPiA+IC0gICAgICAg ICAgICAgICByZXR1cm4gVHJ1ZQ0KPiA+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAjIHJlbW92ZSBwcmVmaXggYW5kIGFueSBpbmRlbnRpb24gYW5kIHlpZWxkDQo+ID4gPiArICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgbGluZSB3aXRoIGxpbmUgbnVtYmVyDQo+ID4g PiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpbmUgPSBsaW5lW3ByZWZpeF9sZW46 XS5sc3RyaXAoKQ0KPiA+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB5aWVsZCBs aW5lX251bSwgbGluZQ0KPiA+ID4gKyAgICAgICByZXR1cm4gTGluZVN0cmVhbShsaW5lcz1pc29s YXRlX2t0YXBfb3V0cHV0KGtlcm5lbF9vdXRwdXQpKQ0KPiA+ID4gKw0KPiA+ID4gK2RlZiByYXdf b3V0cHV0KGtlcm5lbF9vdXRwdXQ6IEl0ZXJhYmxlW3N0cl0pIC0+IE5vbmU6DQo+ID4gPiArICAg ICAgICIiIlByaW50cyBhbGwgbGluZXMgb2Yga2VybmVsIG91dHB1dC4iIiINCj4gPiA+ICsgICAg ICAgZm9yIGxpbmUgaW4ga2VybmVsX291dHB1dDoNCj4gPiA+ICsgICAgICAgICAgICAgICBwcmlu dChsaW5lLnJzdHJpcCgpKQ0KPiA+DQo+ID4gVGhpcyBhY2NpZGVudGFsbHkgYWRkcyBiYWNrIGlu IHRoZSByYXdfb3V0cHV0KCkgZnVuY3Rpb24uDQo+ID4gV2UnbGwgd2FudCB0byBkcm9wIGl0LCBz aW5jZSBpdCdzIG5vIGxvbmdlciB1c2VkIGJ5IGt1bml0LnB5Lg0KPiA+DQo+IA0KPiBHcmVhdCBj YXRjaCEgV2lsbCByZW1vdmUgdGhpcyBmb3IgdjMuIERpZG4ndCByZWFsaXplIHRoaXMgd2FzDQo+ IHN1cHBvc2VkIHRvIGJlIHJlbW92ZWQuDQo+IA0KPiA+ID4gKw0KPiA+ID4gK0tUQVBfVkVSU0lP TlMgPSBbMV0NCj4gPiA+ICtUQVBfVkVSU0lPTlMgPSBbMTMsIDE0XQ0KPiA+ID4gKw0KPiA+ID4g K2RlZiBjaGVja192ZXJzaW9uKHZlcnNpb25fbnVtOiBpbnQsIGFjY2VwdGVkX3ZlcnNpb25zOiBM aXN0W2ludF0sDQo+ID4gPiArICAgICAgICAgICAgICAgICAgICAgICB2ZXJzaW9uX3R5cGU6IHN0 ciwgdGVzdDogVGVzdCkgLT4gTm9uZToNCj4gPg0KPiA+IE9wdGlvbmFsOiB3ZSBjYW4gbWFrZSBp dCBjbGVhcmVyIHRoYXQgdGhpcyBpcyBhbiBpbnRlcm5hbCBmdW5jdGlvbiBieQ0KPiA+IHByZWZp eGluZyB3aXRoIGEgXw0KPiA+IEUuZy4gZGVmIF9jaGVja192ZXJzaW9uDQo+ID4NCj4gPiBTYW1l IGNhbiBnbyBmb3IgYWxsIHRoZSBvdGhlciBoZWxwZXJzIGhlcmUuDQo+ID4gcHl0eXBlIHNob3Vs ZCBiZSBhYmxlIHRvIGNhdGNoIGFueSBtaXNzZWQgbmFtZXMsIHNvIGl0IHNob3VsZCBiZSBsb3cg cmlzay4NCj4gPg0KPiA+IEJ1dCBpdCdzIGFsc28gZmFpcmx5IGxvdyByZXdhcmQsIHNpbmNlIHdl IGRvbid0IHJlYWxseSBoYXZlIGFueSBvdGhlcg0KPiA+IHVzZXJzLCBzbyB0aGUgbmVlZCB0byBj bGFtcCBkb3duIG9uIHdoYXQncyAidmlzaWJsZSIgdG8gb3RoZXIgcGFja2FnZXMNCj4gPiBpcyBz bWFsbC4NCj4gPg0KPiANCj4gSSBtaWdodCBsZWF2ZSBvZmYgdGhlIF8gcHJlZml4IGJlY2F1c2Ug aXQgd291bGQgcmVxdWlyZSBhbG1vc3QgYWxsIG9mIHRoZQ0KPiBtZXRob2RzIHRvIGJlIHByZWZp eGVkLiBIb3dldmVyLCB0aGlzIGlzIHJlYXNvbmFibGUgc28gaWYgb3RoZXJzIHRoaW5rDQo+IHRo aXMgaXMgbmVjZXNzYXJ5LCBJIGFtIGhhcHB5IHRvIGNoYW5nZSBhbGwgb2YgdGhlIG1ldGhvZHMu DQo+IA0KPiA+ID4gKyAgICAgICAiIiINCj4gPiA+ICsgICAgICAgQWRkcyBlcnJvciB0byB0ZXN0 IG9iamVjdCBpZiB2ZXJzaW9uIG51bWJlciBpcyB0b28gaGlnaCBvciB0b28NCj4gPiA+ICsgICAg ICAgbG93Lg0KPiA+ID4gKw0KPiA+ID4gKyAgICAgICBQYXJhbWV0ZXJzOg0KPiA+ID4gKyAgICAg ICB2ZXJzaW9uX251bSAtIFRoZSBpbnB1dHRlZCB2ZXJzaW9uIG51bWJlciBmcm9tIHRoZSBwYXJz ZWQgS1RBUCBvciBUQVANCj4gPiA+ICsgICAgICAgICAgICAgICBoZWFkZXIgbGluZQ0KPiA+ID4g KyAgICAgICBhY2NlcHRlZF92ZXJzaW9uIC0gTGlzdCBvZiBhY2NlcHRlZCBLVEFQIG9yIFRBUCB2 ZXJzaW9ucw0KPiA+ID4gKyAgICAgICB2ZXJzaW9uX3R5cGUgLSAnS1RBUCcgb3IgJ1RBUCcgZGVw ZW5kaW5nIG9uIHRoZSB0eXBlIG9mDQo+ID4gPiArICAgICAgICAgICAgICAgdmVyc2lvbiBsaW5l Lg0KPiA+ID4gKyAgICAgICB0ZXN0IC0gVGVzdCBvYmplY3QgZm9yIGN1cnJlbnQgdGVzdCBiZWlu ZyBwYXJzZWQNCj4gPiA+ICsgICAgICAgIiIiDQo+ID4gPiArICAgICAgIGlmIHZlcnNpb25fbnVt IDwgbWluKGFjY2VwdGVkX3ZlcnNpb25zKToNCj4gPiA+ICsgICAgICAgICAgICAgICB0ZXN0LmFk ZF9lcnJvcih2ZXJzaW9uX3R5cGUgKw0KPiA+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgJyB2 ZXJzaW9uIGxvd2VyIHRoYW4gZXhwZWN0ZWQhJykNCj4gPiA+ICsgICAgICAgZWxpZiB2ZXJzaW9u X251bSA+IG1heChhY2NlcHRlZF92ZXJzaW9ucyk6DQo+ID4gPiArICAgICAgICAgICAgICAgdGVz dC5hZGRfZXJyb3IoDQo+ID4gPiArICAgICAgICAgICAgICAgICAgICAgICB2ZXJzaW9uX3R5cGUg KyAnIHZlcnNpb24gaGlnaGVyIHRoYW4gZXhwZWN0ZWQhJykNCj4gPiA+ICsNCj4gPiA+ICtkZWYg cGFyc2Vfa3RhcF9oZWFkZXIobGluZXM6IExpbmVTdHJlYW0sIHRlc3Q6IFRlc3QpIC0+IGJvb2w6 DQo+ID4gPiArICAgICAgICIiIg0KPiA+ID4gKyAgICAgICBJZiB0aGUgbmV4dCBsaW5lIGluIExp bmVTdHJlYW0gbWF0Y2hlcyB0aGUgZm9ybWF0IG9mIEtUQVAgb3IgVEFQDQo+ID4gPiArICAgICAg IGhlYWRlciBsaW5lLCB0aGUgdmVyc2lvbiBudW1iZXIgaXMgY2hlY2tlZCwgdGhlIGxpbmUgaXMg cG9wcGVkLA0KPiA+ID4gKyAgICAgICBhbmQgcmV0dXJucyBUcnVlLiBPdGhlcndpc2UgdGhlIG1l dGhvZCByZXR1cm5zIEZhbHNlLg0KPiA+ID4gKw0KPiA+ID4gKyAgICAgICBBY2NlcHRlZCBmb3Jt YXRzOg0KPiA+ID4gKyAgICAgICAtICdLVEFQIHZlcnNpb24gW3ZlcnNpb24gbnVtYmVyXScNCj4g PiA+ICsgICAgICAgLSAnVEFQIHZlcnNpb24gW3ZlcnNpb24gbnVtYmVyXScNCj4gPiA+ICsNCj4g PiA+ICsgICAgICAgUGFyYW1ldGVyczoNCj4gPiA+ICsgICAgICAgbGluZXMgLSBMaW5lU3RyZWFt IG9mIEtUQVAgb3V0cHV0IHRvIHBhcnNlDQo+ID4gPiArICAgICAgIHRlc3QgLSBUZXN0IG9iamVj dCBmb3IgY3VycmVudCB0ZXN0IGJlaW5nIHBhcnNlZA0KPiA+ID4gKw0KPiA+ID4gKyAgICAgICBS ZXR1cm46DQo+ID4gPiArICAgICAgIEJvb2xlYW4gdGhhdCByZXByZXNlbnRzIGlmIHRoZSBuZXh0 IGxpbmUgaW4gdGhlIExpbmVTdHJlYW0gd2FzIHBhcnNlZA0KPiA+ID4gKyAgICAgICAgICAgICAg IGFzIHRoZSBLVEFQIG9yIFRBUCBoZWFkZXIgbGluZQ0KPiA+DQo+ID4gSSB0aGluayB3ZSBjYW4g c2ltcGxpZnkgdGhlc2UgIkJvb2xlYW4gdGhhdCByZXByZXNlbnRzIiB3aXRoDQo+ID4NCj4gPiBS ZXR1cm46DQo+ID4gVHJ1ZSBpZiB3ZSBwYXJzZWQgYSBLVEFQIG9yIGhlYWRlciBsaW5lDQo+ID4N Cj4gDQo+IEkgbGlrZSB0aGlzIGNoYW5nZSBhIGxvdC4gSSB3YXMgc3RydWdnbGluZyB0byBnZXQg dGhlIHJpZ2h0IHdvcmRpbmcNCj4gd2l0aCB0aGUgbWV0aG9kcw0KPiB0aGF0IHJldHVybmVkIGJv b2xlYW5zLiBJIHdpbGwgY2hhbmdlIHRoaXMgZm9yIHYzLg0KPiANCj4gPiA+ICsgICAgICAgIiIi DQo+ID4gPiArICAgICAgIGt0YXBfbWF0Y2ggPSBLVEFQX1NUQVJULm1hdGNoKGxpbmVzLnBlZWso KSkNCj4gPiA+ICsgICAgICAgdGFwX21hdGNoID0gVEFQX1NUQVJULm1hdGNoKGxpbmVzLnBlZWso KSkNCj4gPiA+ICsgICAgICAgaWYga3RhcF9tYXRjaDoNCj4gPiA+ICsgICAgICAgICAgICAgICB2 ZXJzaW9uX251bSA9IGludChrdGFwX21hdGNoLmdyb3VwKDEpKQ0KPiA+ID4gKyAgICAgICAgICAg ICAgIGNoZWNrX3ZlcnNpb24odmVyc2lvbl9udW0sIEtUQVBfVkVSU0lPTlMsICdLVEFQJywgdGVz dCkNCj4gPiA+ICsgICAgICAgZWxpZiB0YXBfbWF0Y2g6DQo+ID4gPiArICAgICAgICAgICAgICAg dmVyc2lvbl9udW0gPSBpbnQodGFwX21hdGNoLmdyb3VwKDEpKQ0KPiA+ID4gKyAgICAgICAgICAg ICAgIGNoZWNrX3ZlcnNpb24odmVyc2lvbl9udW0sIFRBUF9WRVJTSU9OUywgJ1RBUCcsIHRlc3Qp DQo+ID4gPiAgICAgICAgIGVsc2U6DQo+ID4gPiAgICAgICAgICAgICAgICAgcmV0dXJuIEZhbHNl DQo+ID4gPiAtDQo+ID4gPiAtU1VCVEVTVF9ESUFHTk9TVElDID0gcmUuY29tcGlsZShyJ15bXHNd KyMgKC4qKSQnKQ0KPiA+ID4gLURJQUdOT1NUSUNfQ1JBU0hfTUVTU0FHRSA9IHJlLmNvbXBpbGUo cideW1xzXSsjIC4qPzoga3VuaXQgdGVzdCBjYXNlIGNyYXNoZWQhJCcpDQo+ID4gPiAtDQo+ID4g PiAtZGVmIHBhcnNlX2RpYWdub3N0aWMobGluZXM6IExpbmVTdHJlYW0sIHRlc3RfY2FzZTogVGVz dENhc2UpIC0+IGJvb2w6DQo+ID4gPiAtICAgICAgIHNhdmVfbm9uX2RpYWdub3N0aWMobGluZXMs IHRlc3RfY2FzZSkNCj4gPiA+IC0gICAgICAgaWYgbm90IGxpbmVzOg0KPiA+ID4gKyAgICAgICB0 ZXN0LmxvZy5hcHBlbmQobGluZXMucG9wKCkpDQo+ID4gPiArICAgICAgIHJldHVybiBUcnVlDQo+ ID4gPiArDQo+ID4gPiArVEVTVF9IRUFERVIgPSByZS5jb21waWxlKHInXiMgU3VidGVzdDogKC4q KSQnKQ0KPiA+ID4gKw0KPiA+ID4gK2RlZiBwYXJzZV90ZXN0X2hlYWRlcihsaW5lczogTGluZVN0 cmVhbSwgdGVzdDogVGVzdCkgLT4gYm9vbDoNCj4gPiA+ICsgICAgICAgIiIiDQo+ID4gPiArICAg ICAgIElmIHRoZSBuZXh0IGxpbmUgaW4gTGluZVN0cmVhbSBtYXRjaGVzIHRoZSBmb3JtYXQgb2Yg YSB0ZXN0DQo+ID4gPiArICAgICAgIGhlYWRlciBsaW5lLCB0aGUgbmFtZSBvZiB0ZXN0IGlzIHNl dCwgdGhlIGxpbmUgaXMgcG9wcGVkLA0KPiA+ID4gKyAgICAgICBhbmQgcmV0dXJucyBUcnVlLiBP dGhlcndpc2UgdGhlIG1ldGhvZCByZXR1cm5zIEZhbHNlLg0KPiA+ID4gKw0KPiA+ID4gKyAgICAg ICBBY2NlcHRlZCBmb3JtYXQ6DQo+ID4gPiArICAgICAgIC0gJyMgU3VidGVzdDogW3Rlc3QgbmFt ZV0nDQo+ID4gPiArDQo+ID4gPiArICAgICAgIFBhcmFtZXRlcnM6DQo+ID4gPiArICAgICAgIGxp bmVzIC0gTGluZVN0cmVhbSBvZiBrdGFwIG91dHB1dCB0byBwYXJzZQ0KPiA+ID4gKyAgICAgICB0 ZXN0IC0gVGVzdCBvYmplY3QgZm9yIGN1cnJlbnQgdGVzdCBiZWluZyBwYXJzZWQNCj4gPiA+ICsN Cj4gPiA+ICsgICAgICAgUmV0dXJuOg0KPiA+ID4gKyAgICAgICBCb29sZWFuIHRoYXQgcmVwcmVz ZW50cyBpZiB0aGUgbmV4dCBsaW5lIGluIHRoZSBMaW5lU3RyZWFtIHdhcyBwYXJzZWQNCj4gPiA+ ICsgICAgICAgICAgICAgICBhcyBhIHRlc3QgaGVhZGVyDQo+ID4NCj4gPiBkaXR0byBhYm92ZSwg dGhpcyBjb3VsZCBiZQ0KPiA+IFRydWUgaWYgd2UgcGFyc2VkIGEgdGVzdCBoZWFkZXIgbGluZS4N Cj4gDQo+IFNlZSBhYm92ZS4gV2lsbCBjaGFuZ2UgdGhpcyBmb3IgdjMuDQo+IA0KPiA+DQo+ID4g PiArICAgICAgICIiIg0KPiA+ID4gKyAgICAgICBtYXRjaCA9IFRFU1RfSEVBREVSLm1hdGNoKGxp bmVzLnBlZWsoKSkNCj4gPiA+ICsgICAgICAgaWYgbm90IG1hdGNoOg0KPiA+ID4gICAgICAgICAg ICAgICAgIHJldHVybiBGYWxzZQ0KPiA+ID4gKyAgICAgICB0ZXN0LmxvZy5hcHBlbmQobGluZXMu cG9wKCkpDQo+ID4gPiArICAgICAgIHRlc3QubmFtZSA9IG1hdGNoLmdyb3VwKDEpDQo+ID4gPiAr ICAgICAgIHJldHVybiBUcnVlDQo+ID4gPiArDQo+ID4gPiArVEVTVF9QTEFOID0gcmUuY29tcGls ZShyJzFcLlwuKFswLTldKyknKQ0KPiA+ID4gKw0KPiA+ID4gK2RlZiBwYXJzZV90ZXN0X3BsYW4o bGluZXM6IExpbmVTdHJlYW0sIHRlc3Q6IFRlc3QpIC0+IGJvb2w6DQo+ID4gPiArICAgICAgICIi Ig0KPiA+ID4gKyAgICAgICBJZiB0aGUgbmV4dCBsaW5lIGluIExpbmVTdHJlYW0gbWF0Y2hlcyB0 aGUgZm9ybWF0IG9mIGEgdGVzdA0KPiA+ID4gKyAgICAgICBwbGFuIGxpbmUsIHRoZSBleHBlY3Rl ZCBudW1iZXIgb2Ygc3VidGVzdHMgaXMgc2V0IGluIHRlc3Qgb2JqZWN0LCBhbg0KPiA+ID4gKyAg ICAgICBlcnJvciBpcyB0aHJvd24gaWYgdGhlcmUgYXJlIDAgdGVzdHMsIHRoZSBsaW5lIGlzIHBv cHBlZCwNCj4gPiA+ICsgICAgICAgYW5kIHJldHVybnMgVHJ1ZS4gT3RoZXJ3aXNlIHRoZSBtZXRo b2QgYWRkcyBhbiBlcnJvciB0aGF0IHRoZSB0ZXN0DQo+ID4gPiArICAgICAgIHBsYW4gaXMgbWlz c2luZyB0byB0aGUgdGVzdCBvYmplY3QgYW5kIHJldHVybnMgRmFsc2UuDQo+ID4NCj4gPiBuaXQ6 ICJtaXNzaW5nIHRvIHRoZSB0ZXN0IG9iamVjdCIgPT4gbWlzc2luZyBmb3I/DQo+ID4NCj4gPiBQ ZXJoYXBzIHdlIGNhbiByZXdyaXRlIHRoaXMgYXMgc29tZXRoaW5nIG1vcmUgbGlrZToNCj4gPg0K PiA+IFBhcnNlcyBhIHRlc3QgcGxhbiBhbmQgc3RvcmVzIHRoZSBleHBlY3RlZCBudW1iZXIgb2Yg c3VidGVzdHMgaW4gYHRlc3RgLg0KPiA+IFJldHVybnMgRmFsc2UgaWYgdGhlIGN1cnJlbnQgbGlu ZSBkb2Vzbid0IGxvb2sgbGlrZSBhIHRlc3QgcGxhbi4NCj4gPg0KPiA+IEl0IHJlcG9ydHMgYW4g ZXJyb3IgaWYgdGhlIGV4cGVjdGVkIGNvdW50IGlzIDAuDQo+ID4NCj4gDQo+IEkgZGVmaW5pdGVs eSBhZ3JlZSB0aGF0ICdtaXNzaW5nIGZvcicgaXMgYmV0dGVyIHRoYW4gJ21pc3NpbmcgdG8nLg0K PiBIb3dldmVyLCBvdmVyYWxsDQo+IHRoaXMgY29tbWVudCBkb2VzIHNlZW0gY29uZnVzaW5nIGFu ZCBkb2VzIG5vdCBtYXRjaCBzb21lIG9mIHRoZSB1cGRhdGVkDQo+IGRvY3N0cmluZ3MuIFRoaXMg Y29uZnVzaW5nIGZvcm1hdCBpcyBzaGFyZWQgYnkgYWxsIG9mIHRoZSBwYXJzaW5nIG1ldGhvZHMu DQo+IFRodXMsIEkgd291bGQgbGlrZSB0byB1cGRhdGUgdGhlIHBhcnNpbmcgbWV0aG9kIGRvY3N0 cmluZ3MgaW4gdjMuIEZvciBleGFtcGxlLA0KPiB0aGlzIGRvY3N0cmluZyB3b3VsZCBiZSBjaGFu Z2VkIHRvOg0KPiANCj4gUGFyc2VzIHRlc3QgcGxhbiBsaW5lIGFuZCBzdG9yZXMgdGhlIGV4cGVj dGVkIG51bWJlciBvZiBzdWJ0ZXN0cyBpbiBgdGVzdGAuDQo+IFJlcG9ydHMgYW4gZXJyb3IgaWYg ZXhwZWN0ZWQgY291bnQgaXMgMC4NCj4gUmV0dXJucyBGYWxzZSBhbmQgcmVwb3J0cyBtaXNzaW5n IHRlc3QgcGxhbiBlcnJvciBpZiBmYWlscyB0byBwYXJzZSB0ZXN0IHBsYW4uDQo+IA0KPiA+ID4g Kw0KPiA+ID4gKyAgICAgICBBY2NlcHRlZCBmb3JtYXQ6DQo+ID4gPiArICAgICAgIC0gJzEuLltu dW1iZXIgb2Ygc3VidGVzdHNdJw0KPiA+ID4gKw0KPiA+ID4gKyAgICAgICBQYXJhbWV0ZXJzOg0K PiA+ID4gKyAgICAgICBsaW5lcyAtIExpbmVTdHJlYW0gb2Yga3RhcCBvdXRwdXQgdG8gcGFyc2UN Cj4gPiA+ICsgICAgICAgdGVzdCAtIFRlc3Qgb2JqZWN0IGZvciBjdXJyZW50IHRlc3QgYmVpbmcg cGFyc2VkDQo+ID4gPiArDQo+ID4gPiArICAgICAgIFJldHVybjoNCj4gPiA+ICsgICAgICAgQm9v bGVhbiB0aGF0IHJlcHJlc2VudHMgaWYgdGhlIG5leHQgbGluZSBpbiB0aGUgTGluZVN0cmVhbSB3 YXMgcGFyc2VkDQo+ID4gPiArICAgICAgICAgICAgICAgYXMgYSB0ZXN0IHBsYW4NCj4gPiA+ICsg ICAgICAgIiIiDQo+ID4gPiArICAgICAgIG1hdGNoID0gVEVTVF9QTEFOLm1hdGNoKGxpbmVzLnBl ZWsoKSkNCj4gPiA+ICsgICAgICAgaWYgbm90IG1hdGNoOg0KPiA+ID4gKyAgICAgICAgICAgICAg IHRlc3QuZXhwZWN0ZWRfY291bnQgPSBOb25lDQo+ID4gPiArICAgICAgICAgICAgICAgdGVzdC5h ZGRfZXJyb3IoJ21pc3NpbmcgcGxhbiBsaW5lIScpDQo+ID4gPiArICAgICAgICAgICAgICAgcmV0 dXJuIEZhbHNlDQo+ID4gPiArICAgICAgIHRlc3QubG9nLmFwcGVuZChsaW5lcy5wb3AoKSkNCj4g PiA+ICsgICAgICAgZXhwZWN0ZWRfY291bnQgPSBpbnQobWF0Y2guZ3JvdXAoMSkpDQo+ID4gPiAr ICAgICAgIHRlc3QuZXhwZWN0ZWRfY291bnQgPSBleHBlY3RlZF9jb3VudA0KPiA+ID4gKyAgICAg ICBpZiBleHBlY3RlZF9jb3VudCA9PSAwOg0KPiA+ID4gKyAgICAgICAgICAgICAgIHRlc3Quc3Rh dHVzID0gVGVzdFN0YXR1cy5OT19URVNUUw0KPiA+ID4gKyAgICAgICAgICAgICAgIHRlc3QuYWRk X2Vycm9yKCcwIHRlc3RzIHJ1biEnKQ0KPiA+ID4gKyAgICAgICByZXR1cm4gVHJ1ZQ0KPiA+ID4g Kw0KPiA+ID4gK1RFU1RfUkVTVUxUID0gcmUuY29tcGlsZShyJ14ob2t8bm90IG9rKSAoWzAtOV0r KSAoLSApPyguKikkJykNCj4gPiA+ICsNCj4gPiA+ICtURVNUX1JFU1VMVF9TS0lQID0gcmUuY29t cGlsZShyJ14ob2t8bm90IG9rKSAoWzAtOV0rKSAoLSApPyguKikgIyBTS0lQKC4qKSQnKQ0KPiA+ ID4gKw0KPiA+ID4gK2RlZiBwZWVrX3Rlc3RfbmFtZV9tYXRjaChsaW5lczogTGluZVN0cmVhbSwg dGVzdDogVGVzdCkgLT4gYm9vbDoNCj4gPiA+ICsgICAgICAgIiIiDQo+ID4gPiArICAgICAgIElm IHRoZSBuZXh0IGxpbmUgaW4gTGluZVN0cmVhbSBtYXRjaGVzIHRoZSBmb3JtYXQgb2YgYSB0ZXN0 DQo+ID4gPiArICAgICAgIHJlc3VsdCBsaW5lIGFuZCB0aGUgbmFtZSBvZiB0aGUgcmVzdWx0IGxp bmUgbWF0Y2hlcyB0aGUgbmFtZSBvZiB0aGUNCj4gPiA+ICsgICAgICAgY3VycmVudCB0ZXN0LCB0 aGUgbWV0aG9kIHJldHVybnMgVHJ1ZS4gT3RoZXJ3aXNlIGl0IHJldHVybnMgRmFsc2UuDQo+ID4g PiArDQo+ID4gPiArICAgICAgIEFjY2VwdGVkIGZvcm1hdDoNCj4gPiA+ICsgICAgICAgLSAnW29r fG5vdCBva10gW3Rlc3QgbnVtYmVyXSBbLV0gW3Rlc3QgbmFtZV0gW29wdGlvbmFsIHNraXANCj4g PiA+ICsgICAgICAgICAgICAgICBkaXJlY3RpdmVdJw0KPiA+ID4gKw0KPiA+ID4gKyAgICAgICBQ YXJhbWV0ZXJzOg0KPiA+ID4gKyAgICAgICBsaW5lcyAtIExpbmVTdHJlYW0gb2YgS1RBUCBvdXRw dXQgdG8gcGFyc2UNCj4gPiA+ICsgICAgICAgdGVzdCAtIFRlc3Qgb2JqZWN0IGZvciBjdXJyZW50 IHRlc3QgYmVpbmcgcGFyc2VkDQo+ID4gPiArDQo+ID4gPiArICAgICAgIFJldHVybjoNCj4gPiA+ ICsgICAgICAgQm9vbGVhbiB0aGF0IHJlcHJlc2VudHMgaWYgdGhlIG5leHQgbGluZSBpbiB0aGUg TGluZVN0cmVhbSBtYXRjaGVkIGENCj4gPiA+ICsgICAgICAgICAgICAgICB0ZXN0IHJlc3VsdCBs aW5lIGFuZCB0aGUgbmFtZSBtYXRjaGVkIHRoZSBleHBlY3RlZCB0ZXN0IG5hbWUNCj4gPiA+ICsg ICAgICAgIiIiDQo+ID4gPiAgICAgICAgIGxpbmUgPSBsaW5lcy5wZWVrKCkNCj4gPiA+IC0gICAg ICAgbWF0Y2ggPSBTVUJURVNUX0RJQUdOT1NUSUMubWF0Y2gobGluZSkNCj4gPiA+IC0gICAgICAg aWYgbWF0Y2g6DQo+ID4gPiAtICAgICAgICAgICAgICAgdGVzdF9jYXNlLmxvZy5hcHBlbmQobGlu ZXMucG9wKCkpDQo+ID4gPiAtICAgICAgICAgICAgICAgY3Jhc2hfbWF0Y2ggPSBESUFHTk9TVElD X0NSQVNIX01FU1NBR0UubWF0Y2gobGluZSkNCj4gPiA+IC0gICAgICAgICAgICAgICBpZiBjcmFz aF9tYXRjaDoNCj4gPiA+IC0gICAgICAgICAgICAgICAgICAgICAgIHRlc3RfY2FzZS5zdGF0dXMg PSBUZXN0U3RhdHVzLlRFU1RfQ1JBU0hFRA0KPiA+ID4gLSAgICAgICAgICAgICAgIHJldHVybiBU cnVlDQo+ID4gPiAtICAgICAgIGVsc2U6DQo+ID4gPiArICAgICAgIG1hdGNoID0gVEVTVF9SRVNV TFQubWF0Y2gobGluZSkNCj4gPiA+ICsgICAgICAgaWYgbm90IG1hdGNoOg0KPiA+ID4gICAgICAg ICAgICAgICAgIHJldHVybiBGYWxzZQ0KPiA+ID4gKyAgICAgICBuYW1lID0gbWF0Y2guZ3JvdXAo NCkNCj4gPiA+ICsgICAgICAgcmV0dXJuIChuYW1lID09IHRlc3QubmFtZSkNCj4gPiA+ICsNCj4g PiA+ICtkZWYgcGFyc2VfdGVzdF9yZXN1bHQobGluZXM6IExpbmVTdHJlYW0sIHRlc3Q6IFRlc3Qs DQo+ID4gPiArICAgICAgICAgICAgICAgICAgICAgICBleHBlY3RlZF9udW06IGludCkgLT4gYm9v bDoNCj4gPiA+ICsgICAgICAgIiIiDQo+ID4gPiArICAgICAgIElmIHRoZSBuZXh0IGxpbmUgaW4g TGluZVN0cmVhbSBtYXRjaGVzIHRoZSBmb3JtYXQgb2YgYSB0ZXN0DQo+ID4gPiArICAgICAgIHJl c3VsdCBsaW5lLCB0aGUgc3RhdHVzIGluIHRoZSByZXN1bHQgbGluZSBpcyBhZGRlZCB0byB0aGUg dGVzdA0KPiA+ID4gKyAgICAgICBvYmplY3QsIHRoZSB0ZXN0IG51bWJlciBpcyBjaGVja2VkIHRv IG1hdGNoIHRoZSBleHBlY3RlZCB0ZXN0IG51bWJlcg0KPiA+ID4gKyAgICAgICBhbmQgaWYgbm90 IGFuIGVycm9yIGlzIGFkZGVkIHRvIHRoZSB0ZXN0IG9iamVjdCwgYW5kIHJldHVybnMgVHJ1ZS4N Cj4gPiA+ICsgICAgICAgT3RoZXJ3aXNlIGl0IHJldHVybnMgRmFsc2UuDQo+ID4gPiArDQo+ID4g PiArICAgICAgIE5vdGUgdGhhdCB0aGUgc2tpcCBkaWlyZWN0aXZlIGlzIHRoZSBvbmx5DQo+ID4N Cj4gPiBuaXQ6IGRpaXIgPT4gZGlyDQo+ID4NCj4gDQo+IE9vcHMuIFRoYW5rcyBmb3IgY2F0Y2hp bmcgdGhhdC4gV2lsbCBjaGFuZ2UgaW4gdjMuDQo+IA0KPiA+DQo+ID4gPiArICAgICAgIGRpcmVj dGl2ZSB0aGF0IGNhdXNlcyBhIGNoYW5nZSBpbiBzdGF0dXMgYW5kIG90aGVyd2lzZSB0aGUgZGly ZWN0aXZlDQo+ID4gPiArICAgICAgIGlzIGluY2x1ZGVkIGluIHRoZSBuYW1lIG9mIHRoZSB0ZXN0 Lg0KPiA+ID4gKw0KPiA+ID4gKyAgICAgICBBY2NlcHRlZCBmb3JtYXQ6DQo+ID4gPiArICAgICAg IC0gJ1tva3xub3Qgb2tdIFt0ZXN0IG51bWJlcl0gWy1dIFt0ZXN0IG5hbWVdIFtvcHRpb25hbCBz a2lwDQo+ID4gPiArICAgICAgICAgICAgICAgZGlyZWN0aXZlXScNCj4gPiA+ICsNCj4gPiA+ICsg ICAgICAgUGFyYW1ldGVyczoNCj4gPiA+ICsgICAgICAgbGluZXMgLSBMaW5lU3RyZWFtIG9mIEtU QVAgb3V0cHV0IHRvIHBhcnNlDQo+ID4gPiArICAgICAgIHRlc3QgLSBUZXN0IG9iamVjdCBmb3Ig Y3VycmVudCB0ZXN0IGJlaW5nIHBhcnNlZA0KPiA+ID4gKyAgICAgICBleHBlY3RlZF9udW0gLSBl eHBlY3RlZCB0ZXN0IG51bWJlciBmb3IgY3VycmVudCB0ZXN0DQo+ID4gPiArDQo+ID4gPiArICAg ICAgIFJldHVybjoNCj4gPiA+ICsgICAgICAgQm9vbGVhbiB0aGF0IHJlcHJlc2VudHMgaWYgdGhl IG5leHQgbGluZSBpbiB0aGUgTGluZVN0cmVhbSB3YXMgcGFyc2VkDQo+ID4gPiArICAgICAgICAg ICAgICAgYXMgYSB0ZXN0IHJlc3VsdCBsaW5lLg0KPiA+ID4gKyAgICAgICAiIiINCj4gPiA+ICsg ICAgICAgbGluZSA9IGxpbmVzLnBlZWsoKQ0KPiA+ID4gKyAgICAgICBtYXRjaCA9IFRFU1RfUkVT VUxULm1hdGNoKGxpbmUpDQo+ID4gPiArICAgICAgIHNraXBfbWF0Y2ggPSBURVNUX1JFU1VMVF9T S0lQLm1hdGNoKGxpbmUpDQo+ID4gPg0KPiA+ID4gLWRlZiBwYXJzZV90ZXN0X2Nhc2UobGluZXM6 IExpbmVTdHJlYW0pIC0+IE9wdGlvbmFsW1Rlc3RDYXNlXToNCj4gPiA+IC0gICAgICAgdGVzdF9j YXNlID0gVGVzdENhc2UoKQ0KPiA+ID4gLSAgICAgICBzYXZlX25vbl9kaWFnbm9zdGljKGxpbmVz LCB0ZXN0X2Nhc2UpDQo+ID4gPiAtICAgICAgIHdoaWxlIHBhcnNlX2RpYWdub3N0aWMobGluZXMs IHRlc3RfY2FzZSk6DQo+ID4gPiAtICAgICAgICAgICAgICAgcGFzcw0KPiA+ID4gLSAgICAgICBp ZiBwYXJzZV9va19ub3Rfb2tfdGVzdF9jYXNlKGxpbmVzLCB0ZXN0X2Nhc2UpOg0KPiA+ID4gLSAg ICAgICAgICAgICAgIHJldHVybiB0ZXN0X2Nhc2UNCj4gPiA+IC0gICAgICAgZWxzZToNCj4gPiA+ IC0gICAgICAgICAgICAgICByZXR1cm4gTm9uZQ0KPiA+ID4gLQ0KPiA+ID4gLVNVQlRFU1RfSEVB REVSID0gcmUuY29tcGlsZShyJ15bXHNdKyMgU3VidGVzdDogKC4qKSQnKQ0KPiA+ID4gKyAgICAg ICAjIENoZWNrIGlmIGxpbmUgbWF0Y2hlcyB0ZXN0IHJlc3VsdCBsaW5lIGZvcm1hdA0KPiA+ID4g KyAgICAgICBpZiBub3QgbWF0Y2g6DQo+ID4gPiArICAgICAgICAgICAgICAgcmV0dXJuIEZhbHNl DQo+ID4gPiArICAgICAgIHRlc3QubG9nLmFwcGVuZChsaW5lcy5wb3AoKSkNCj4gPiA+DQo+ID4g PiAtZGVmIHBhcnNlX3N1YnRlc3RfaGVhZGVyKGxpbmVzOiBMaW5lU3RyZWFtKSAtPiBPcHRpb25h bFtzdHJdOg0KPiA+ID4gLSAgICAgICBjb25zdW1lX25vbl9kaWFnbm9zdGljKGxpbmVzKQ0KPiA+ ID4gLSAgICAgICBpZiBub3QgbGluZXM6DQo+ID4gPiAtICAgICAgICAgICAgICAgcmV0dXJuIE5v bmUNCj4gPiA+IC0gICAgICAgbWF0Y2ggPSBTVUJURVNUX0hFQURFUi5tYXRjaChsaW5lcy5wZWVr KCkpDQo+ID4gPiAtICAgICAgIGlmIG1hdGNoOg0KPiA+ID4gLSAgICAgICAgICAgICAgIGxpbmVz LnBvcCgpDQo+ID4gPiAtICAgICAgICAgICAgICAgcmV0dXJuIG1hdGNoLmdyb3VwKDEpDQo+ID4g PiArICAgICAgICMgU2V0IG5hbWUgb2YgdGVzdCBvYmplY3QNCj4gPiA+ICsgICAgICAgaWYgc2tp cF9tYXRjaDoNCj4gPiA+ICsgICAgICAgICAgICAgICB0ZXN0Lm5hbWUgPSBza2lwX21hdGNoLmdy b3VwKDQpDQo+ID4gPiAgICAgICAgIGVsc2U6DQo+ID4gPiAtICAgICAgICAgICAgICAgcmV0dXJu IE5vbmUNCj4gPiA+ICsgICAgICAgICAgICAgICB0ZXN0Lm5hbWUgPSBtYXRjaC5ncm91cCg0KQ0K PiA+ID4NCj4gPiA+IC1TVUJURVNUX1BMQU4gPSByZS5jb21waWxlKHInW1xzXStbMC05XStcLlwu KFswLTldKyknKQ0KPiA+ID4gKyAgICAgICAjIENoZWNrIHRlc3QgbnVtDQo+ID4gPiArICAgICAg IG51bSA9IGludChtYXRjaC5ncm91cCgyKSkNCj4gPiA+ICsgICAgICAgaWYgbnVtICE9IGV4cGVj dGVkX251bToNCj4gPiA+ICsgICAgICAgICAgICAgICB0ZXN0LmFkZF9lcnJvcignRXhwZWN0ZWQg dGVzdCBudW1iZXIgJyArDQo+ID4gPiArICAgICAgICAgICAgICAgICAgICAgICBzdHIoZXhwZWN0 ZWRfbnVtKSArICcgYnV0IGZvdW5kICcgKyBzdHIobnVtKSkNCj4gPiA+DQo+ID4gPiAtZGVmIHBh cnNlX3N1YnRlc3RfcGxhbihsaW5lczogTGluZVN0cmVhbSkgLT4gT3B0aW9uYWxbaW50XToNCj4g PiA+IC0gICAgICAgY29uc3VtZV9ub25fZGlhZ25vc3RpYyhsaW5lcykNCj4gPiA+IC0gICAgICAg bWF0Y2ggPSBTVUJURVNUX1BMQU4ubWF0Y2gobGluZXMucGVlaygpKQ0KPiA+ID4gLSAgICAgICBp ZiBtYXRjaDoNCj4gPiA+IC0gICAgICAgICAgICAgICBsaW5lcy5wb3AoKQ0KPiA+ID4gLSAgICAg ICAgICAgICAgIHJldHVybiBpbnQobWF0Y2guZ3JvdXAoMSkpDQo+ID4gPiAtICAgICAgIGVsc2U6 DQo+ID4gPiAtICAgICAgICAgICAgICAgcmV0dXJuIE5vbmUNCj4gPiA+IC0NCj4gPiA+IC1kZWYg bWF4X3N0YXR1cyhsZWZ0OiBUZXN0U3RhdHVzLCByaWdodDogVGVzdFN0YXR1cykgLT4gVGVzdFN0 YXR1czoNCj4gPiA+IC0gICAgICAgaWYgbGVmdCA9PSByaWdodDoNCj4gPiA+IC0gICAgICAgICAg ICAgICByZXR1cm4gbGVmdA0KPiA+ID4gLSAgICAgICBlbGlmIGxlZnQgPT0gVGVzdFN0YXR1cy5U RVNUX0NSQVNIRUQgb3IgcmlnaHQgPT0gVGVzdFN0YXR1cy5URVNUX0NSQVNIRUQ6DQo+ID4gPiAt ICAgICAgICAgICAgICAgcmV0dXJuIFRlc3RTdGF0dXMuVEVTVF9DUkFTSEVEDQo+ID4gPiAtICAg ICAgIGVsaWYgbGVmdCA9PSBUZXN0U3RhdHVzLkZBSUxVUkUgb3IgcmlnaHQgPT0gVGVzdFN0YXR1 cy5GQUlMVVJFOg0KPiA+ID4gLSAgICAgICAgICAgICAgIHJldHVybiBUZXN0U3RhdHVzLkZBSUxV UkUNCj4gPiA+IC0gICAgICAgZWxpZiBsZWZ0ID09IFRlc3RTdGF0dXMuU0tJUFBFRDoNCj4gPiA+ IC0gICAgICAgICAgICAgICByZXR1cm4gcmlnaHQNCj4gPiA+IC0gICAgICAgZWxzZToNCj4gPiA+ IC0gICAgICAgICAgICAgICByZXR1cm4gbGVmdA0KPiA+ID4gLQ0KPiA+ID4gLWRlZiBwYXJzZV9v a19ub3Rfb2tfdGVzdF9zdWl0ZShsaW5lczogTGluZVN0cmVhbSwNCj4gPiA+IC0gICAgICAgICAg ICAgICAgICAgICAgICAgICAgICB0ZXN0X3N1aXRlOiBUZXN0U3VpdGUsDQo+ID4gPiAtICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgZXhwZWN0ZWRfc3VpdGVfaW5kZXg6IGludCkgLT4gYm9v bDoNCj4gPiA+IC0gICAgICAgY29uc3VtZV9ub25fZGlhZ25vc3RpYyhsaW5lcykNCj4gPiA+IC0g ICAgICAgaWYgbm90IGxpbmVzOg0KPiA+ID4gLSAgICAgICAgICAgICAgIHRlc3Rfc3VpdGUuc3Rh dHVzID0gVGVzdFN0YXR1cy5URVNUX0NSQVNIRUQNCj4gPiA+IC0gICAgICAgICAgICAgICByZXR1 cm4gRmFsc2UNCj4gPiA+IC0gICAgICAgbGluZSA9IGxpbmVzLnBlZWsoKQ0KPiA+ID4gLSAgICAg ICBtYXRjaCA9IE9LX05PVF9PS19NT0RVTEUubWF0Y2gobGluZSkNCj4gPiA+IC0gICAgICAgaWYg bWF0Y2g6DQo+ID4gPiAtICAgICAgICAgICAgICAgbGluZXMucG9wKCkNCj4gPiA+IC0gICAgICAg ICAgICAgICBpZiBtYXRjaC5ncm91cCgxKSA9PSAnb2snOg0KPiA+ID4gLSAgICAgICAgICAgICAg ICAgICAgICAgdGVzdF9zdWl0ZS5zdGF0dXMgPSBUZXN0U3RhdHVzLlNVQ0NFU1MNCj4gPiA+IC0g ICAgICAgICAgICAgICBlbHNlOg0KPiA+ID4gLSAgICAgICAgICAgICAgICAgICAgICAgdGVzdF9z dWl0ZS5zdGF0dXMgPSBUZXN0U3RhdHVzLkZBSUxVUkUNCj4gPiA+IC0gICAgICAgICAgICAgICBz a2lwX21hdGNoID0gT0tfTk9UX09LX1NLSVAubWF0Y2gobGluZSkNCj4gPiA+IC0gICAgICAgICAg ICAgICBpZiBza2lwX21hdGNoOg0KPiA+ID4gLSAgICAgICAgICAgICAgICAgICAgICAgdGVzdF9z dWl0ZS5zdGF0dXMgPSBUZXN0U3RhdHVzLlNLSVBQRUQNCj4gPiA+IC0gICAgICAgICAgICAgICBz dWl0ZV9pbmRleCA9IGludChtYXRjaC5ncm91cCgyKSkNCj4gPiA+IC0gICAgICAgICAgICAgICBp ZiBzdWl0ZV9pbmRleCAhPSBleHBlY3RlZF9zdWl0ZV9pbmRleDoNCj4gPiA+IC0gICAgICAgICAg ICAgICAgICAgICAgIHByaW50X3dpdGhfdGltZXN0YW1wKA0KPiA+ID4gLSAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICByZWQoJ1tFUlJPUl0gJykgKyAnZXhwZWN0ZWRfc3VpdGVfaW5kZXgg JyArDQo+ID4gPiAtICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cihleHBlY3RlZF9z dWl0ZV9pbmRleCkgKyAnLCBidXQgZ290ICcgKw0KPiA+ID4gLSAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBzdHIoc3VpdGVfaW5kZXgpKQ0KPiA+ID4gKyAgICAgICAjIFNldCBzdGF0dXMg b2YgdGVzdCBvYmplY3QNCj4gPiA+ICsgICAgICAgc3RhdHVzID0gbWF0Y2guZ3JvdXAoMSkNCj4g PiA+ICsgICAgICAgaWYgdGVzdC5zdGF0dXMgPT0gVGVzdFN0YXR1cy5URVNUX0NSQVNIRUQ6DQo+ ID4gPiAgICAgICAgICAgICAgICAgcmV0dXJuIFRydWUNCj4gPiA+ICsgICAgICAgZWxpZiBza2lw X21hdGNoOg0KPiA+ID4gKyAgICAgICAgICAgICAgIHRlc3Quc3RhdHVzID0gVGVzdFN0YXR1cy5T S0lQUEVEDQo+ID4gPiArICAgICAgIGVsaWYgc3RhdHVzID09ICdvayc6DQo+ID4gPiArICAgICAg ICAgICAgICAgdGVzdC5zdGF0dXMgPSBUZXN0U3RhdHVzLlNVQ0NFU1MNCj4gPiA+ICAgICAgICAg ZWxzZToNCj4gPiA+IC0gICAgICAgICAgICAgICByZXR1cm4gRmFsc2UNCj4gPiA+IC0NCj4gPiA+ IC1kZWYgYnViYmxlX3VwX2Vycm9ycyhzdGF0dXNfbGlzdDogSXRlcmFibGVbVGVzdFN0YXR1c10p IC0+IFRlc3RTdGF0dXM6DQo+ID4gPiAtICAgICAgIHJldHVybiByZWR1Y2UobWF4X3N0YXR1cywg c3RhdHVzX2xpc3QsIFRlc3RTdGF0dXMuU0tJUFBFRCkNCj4gPiA+ICsgICAgICAgICAgICAgICB0 ZXN0LnN0YXR1cyA9IFRlc3RTdGF0dXMuRkFJTFVSRQ0KPiA+ID4gKyAgICAgICByZXR1cm4gVHJ1 ZQ0KPiA+ID4gKw0KPiA+ID4gK2RlZiBwYXJzZV9kaWFnbm9zdGljKGxpbmVzOiBMaW5lU3RyZWFt KSAtPiBMaXN0W3N0cl06DQo+ID4gPiArICAgICAgICIiIg0KPiA+ID4gKyAgICAgICBJZiB0aGUg bmV4dCBsaW5lIGluIExpbmVTdHJlYW0gZG9lcyBub3QgbWF0Y2ggdGhlIGZvcm1hdCBvZiBhIHRl c3QNCj4gPiA+ICsgICAgICAgY2FzZSBsaW5lIG9yIHRlc3QgaGVhZGVyIGxpbmUsIHRoZSBsaW5l IGlzIGNoZWNrZWQgaWYgdGhlIHRlc3QgaGFzDQo+ID4gPiArICAgICAgIGNyYXNoZWQgYW5kIGlm IHNvIGFkZHMgYW4gZXJyb3IgbWVzc2FnZSwgcG9wcyB0aGUgbGluZSBhbmQgYWRkcyBpdCB0bw0K PiA+ID4gKyAgICAgICB0aGUgbG9nLg0KPiA+ID4gKw0KPiA+ID4gKyAgICAgICBMaW5lIGZvcm1h dHMgdGhhdCBhcmUgbm90IHBhcnNlZDoNCj4gPiA+ICsgICAgICAgLSAnIyBTdWJ0ZXN0OiBbdGVz dCBuYW1lXScNCj4gPiA+ICsgICAgICAgLSAnW29rfG5vdCBva10gW3Rlc3QgbnVtYmVyXSBbLV0g W3Rlc3QgbmFtZV0gW29wdGlvbmFsIHNraXANCj4gPiA+ICsgICAgICAgICAgICAgICBkaXJlY3Rp dmVdJw0KPiA+ID4gKw0KPiA+ID4gKyAgICAgICBQYXJhbWV0ZXJzOg0KPiA+ID4gKyAgICAgICBs aW5lcyAtIExpbmVTdHJlYW0gb2YgS1RBUCBvdXRwdXQgdG8gcGFyc2UNCj4gPiA+ICsNCj4gPiA+ ICsgICAgICAgUmV0dXJuOg0KPiA+ID4gKyAgICAgICBMb2cgb2YgZGlhZ25vc3RpYyBsaW5lcw0K PiA+ID4gKyAgICAgICAiIiINCj4gPiA+ICsgICAgICAgbG9nID0gW10gICMgdHlwZTogTGlzdFtz dHJdDQo+ID4gPiArICAgICAgIHdoaWxlIGxpbmVzIGFuZCBub3QgVEVTVF9SRVNVTFQubWF0Y2go bGluZXMucGVlaygpKSBhbmQgbm90IFwNCj4gPiA+ICsgICAgICAgICAgICAgICAgICAgICAgIFRF U1RfSEVBREVSLm1hdGNoKGxpbmVzLnBlZWsoKSk6DQo+ID4gPiArICAgICAgICAgICAgICAgbG9n LmFwcGVuZChsaW5lcy5wb3AoKSkNCj4gPiA+ICsgICAgICAgcmV0dXJuIGxvZw0KPiA+ID4gKw0K PiA+ID4gK0RJQUdOT1NUSUNfQ1JBU0hfTUVTU0FHRSA9IHJlLmNvbXBpbGUocideIyAuKj86IGt1 bml0IHRlc3QgY2FzZSBjcmFzaGVkISQnKQ0KPiA+ID4gKw0KPiA+ID4gK2RlZiBwYXJzZV9jcmFz aF9pbl9sb2codGVzdDogVGVzdCkgLT4gYm9vbDoNCj4gPiA+ICsgICAgICAgIiIiDQo+ID4gPiAr ICAgICAgIEl0ZXJhdGUgdGhyb3VnaCB0aGUgbGluZXMgb2YgdGhlIGxvZyB0byBwYXJzZSBmb3Ig Y3Jhc2ggbWVzc2FnZS4NCj4gPiA+ICsgICAgICAgSWYgY3Jhc2ggbWVzc2FnZSBmb3VuZCwgc2V0 IHN0YXR1cyB0byBjcmFzaGVkIGFuZCByZXR1cm4gVHJ1ZS4NCj4gPiA+ICsgICAgICAgT3RoZXJ3 aXNlIHJldHVybiBGYWxzZS4NCj4gPiA+ICsNCj4gPiA+ICsgICAgICAgUGFyYW1ldGVyczoNCj4g PiA+ICsgICAgICAgdGVzdCAtIFRlc3Qgb2JqZWN0IGZvciBjdXJyZW50IHRlc3QgYmVpbmcgcGFy c2VkDQo+ID4gPiArDQo+ID4gPiArICAgICAgIFJldHVybjoNCj4gPiA+ICsgICAgICAgQm9vbGVh biB0aGF0IHJlcHJlc2VudHMgaWYgY3Jhc2ggbWVzc2FnZSBmb3VuZCBpbiBsb2cNCj4gPiA+ICsg ICAgICAgIiIiDQo+ID4gPiArICAgICAgIGZvciBsaW5lIGluIHRlc3QubG9nOg0KPiA+ID4gKyAg ICAgICAgICAgICAgIGlmIERJQUdOT1NUSUNfQ1JBU0hfTUVTU0FHRS5tYXRjaChsaW5lKToNCj4g PiA+ICsgICAgICAgICAgICAgICAgICAgICAgIHRlc3Quc3RhdHVzID0gVGVzdFN0YXR1cy5URVNU X0NSQVNIRUQNCj4gPiA+ICsgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBUcnVlDQo+ID4g PiArICAgICAgIHJldHVybiBGYWxzZQ0KPiA+ID4NCj4gPiA+IC1kZWYgYnViYmxlX3VwX3Rlc3Rf Y2FzZV9lcnJvcnModGVzdF9zdWl0ZTogVGVzdFN1aXRlKSAtPiBUZXN0U3RhdHVzOg0KPiA+ID4g LSAgICAgICBtYXhfdGVzdF9jYXNlX3N0YXR1cyA9IGJ1YmJsZV91cF9lcnJvcnMoeC5zdGF0dXMg Zm9yIHggaW4gdGVzdF9zdWl0ZS5jYXNlcykNCj4gPiA+IC0gICAgICAgcmV0dXJuIG1heF9zdGF0 dXMobWF4X3Rlc3RfY2FzZV9zdGF0dXMsIHRlc3Rfc3VpdGUuc3RhdHVzKQ0KPiA+ID4gKyMgUHJp bnRpbmcgaGVscGVyIG1ldGhvZHM6DQo+ID4gPg0KPiA+ID4gLWRlZiBwYXJzZV90ZXN0X3N1aXRl KGxpbmVzOiBMaW5lU3RyZWFtLCBleHBlY3RlZF9zdWl0ZV9pbmRleDogaW50KSAtPiBPcHRpb25h bFtUZXN0U3VpdGVdOg0KPiA+ID4gLSAgICAgICBpZiBub3QgbGluZXM6DQo+ID4gPiAtICAgICAg ICAgICAgICAgcmV0dXJuIE5vbmUNCj4gPiA+IC0gICAgICAgY29uc3VtZV9ub25fZGlhZ25vc3Rp YyhsaW5lcykNCj4gPiA+IC0gICAgICAgdGVzdF9zdWl0ZSA9IFRlc3RTdWl0ZSgpDQo+ID4gPiAt ICAgICAgIHRlc3Rfc3VpdGUuc3RhdHVzID0gVGVzdFN0YXR1cy5TVUNDRVNTDQo+ID4gPiAtICAg ICAgIG5hbWUgPSBwYXJzZV9zdWJ0ZXN0X2hlYWRlcihsaW5lcykNCj4gPiA+IC0gICAgICAgaWYg bm90IG5hbWU6DQo+ID4gPiAtICAgICAgICAgICAgICAgcmV0dXJuIE5vbmUNCj4gPiA+IC0gICAg ICAgdGVzdF9zdWl0ZS5uYW1lID0gbmFtZQ0KPiA+ID4gLSAgICAgICBleHBlY3RlZF90ZXN0X2Nh c2VfbnVtID0gcGFyc2Vfc3VidGVzdF9wbGFuKGxpbmVzKQ0KPiA+ID4gLSAgICAgICBpZiBleHBl Y3RlZF90ZXN0X2Nhc2VfbnVtIGlzIE5vbmU6DQo+ID4gPiAtICAgICAgICAgICAgICAgcmV0dXJu IE5vbmUNCj4gPiA+IC0gICAgICAgd2hpbGUgZXhwZWN0ZWRfdGVzdF9jYXNlX251bSA+IDA6DQo+ ID4gPiAtICAgICAgICAgICAgICAgdGVzdF9jYXNlID0gcGFyc2VfdGVzdF9jYXNlKGxpbmVzKQ0K PiA+ID4gLSAgICAgICAgICAgICAgIGlmIG5vdCB0ZXN0X2Nhc2U6DQo+ID4gPiAtICAgICAgICAg ICAgICAgICAgICAgICBicmVhaw0KPiA+ID4gLSAgICAgICAgICAgICAgIHRlc3Rfc3VpdGUuY2Fz ZXMuYXBwZW5kKHRlc3RfY2FzZSkNCj4gPiA+IC0gICAgICAgICAgICAgICBleHBlY3RlZF90ZXN0 X2Nhc2VfbnVtIC09IDENCj4gPiA+IC0gICAgICAgaWYgcGFyc2Vfb2tfbm90X29rX3Rlc3Rfc3Vp dGUobGluZXMsIHRlc3Rfc3VpdGUsIGV4cGVjdGVkX3N1aXRlX2luZGV4KToNCj4gPiA+IC0gICAg ICAgICAgICAgICB0ZXN0X3N1aXRlLnN0YXR1cyA9IGJ1YmJsZV91cF90ZXN0X2Nhc2VfZXJyb3Jz KHRlc3Rfc3VpdGUpDQo+ID4gPiAtICAgICAgICAgICAgICAgcmV0dXJuIHRlc3Rfc3VpdGUNCj4g PiA+IC0gICAgICAgZWxpZiBub3QgbGluZXM6DQo+ID4gPiAtICAgICAgICAgICAgICAgcHJpbnRf d2l0aF90aW1lc3RhbXAocmVkKCdbRVJST1JdICcpICsgJ3JhbiBvdXQgb2YgbGluZXMgYmVmb3Jl IGVuZCB0b2tlbicpDQo+ID4gPiAtICAgICAgICAgICAgICAgcmV0dXJuIHRlc3Rfc3VpdGUNCj4g PiA+IC0gICAgICAgZWxzZToNCj4gPiA+IC0gICAgICAgICAgICAgICBwcmludChmJ2ZhaWxlZCB0 byBwYXJzZSBlbmQgb2Ygc3VpdGUgIntuYW1lfSIsIGF0IGxpbmUge2xpbmVzLmxpbmVfbnVtYmVy KCl9OiB7bGluZXMucGVlaygpfScpDQo+ID4gPiAtICAgICAgICAgICAgICAgcmV0dXJuIE5vbmUN Cj4gPiA+ICtESVZJREVSID0gJz0nICogNjANCj4gPiA+DQo+ID4gPiAtVEFQX0hFQURFUiA9IHJl LmNvbXBpbGUocideVEFQIHZlcnNpb24gMTQkJykNCj4gPiA+ICtSRVNFVCA9ICdcMDMzWzA7MG0n DQo+ID4gPg0KPiA+ID4gLWRlZiBwYXJzZV90YXBfaGVhZGVyKGxpbmVzOiBMaW5lU3RyZWFtKSAt PiBib29sOg0KPiA+ID4gLSAgICAgICBjb25zdW1lX25vbl9kaWFnbm9zdGljKGxpbmVzKQ0KPiA+ ID4gLSAgICAgICBpZiBUQVBfSEVBREVSLm1hdGNoKGxpbmVzLnBlZWsoKSk6DQo+ID4gPiAtICAg ICAgICAgICAgICAgbGluZXMucG9wKCkNCj4gPiA+IC0gICAgICAgICAgICAgICByZXR1cm4gVHJ1 ZQ0KPiA+ID4gLSAgICAgICBlbHNlOg0KPiA+ID4gLSAgICAgICAgICAgICAgIHJldHVybiBGYWxz ZQ0KPiA+ID4gK2RlZiByZWQodGV4dDogc3RyKSAtPiBzdHI6DQo+ID4gPiArICAgICAgICIiIlJl dHVybnMgaW5wdXR0ZWQgc3RyaW5nIHdpdGggcmVkIGNvbG9yIGNvZGUuIiIiDQo+ID4gPiArICAg ICAgIHJldHVybiAnXDAzM1sxOzMxbScgKyB0ZXh0ICsgUkVTRVQNCj4gPiA+DQo+ID4gPiAtVEVT VF9QTEFOID0gcmUuY29tcGlsZShyJ1swLTldK1wuXC4oWzAtOV0rKScpDQo+ID4gPiArZGVmIHll bGxvdyh0ZXh0OiBzdHIpIC0+IHN0cjoNCj4gPiA+ICsgICAgICAgIiIiUmV0dXJucyBpbnB1dHRl ZCBzdHJpbmcgd2l0aCB5ZWxsb3cgY29sb3IgY29kZS4iIiINCj4gPiA+ICsgICAgICAgcmV0dXJu ICdcMDMzWzE7MzNtJyArIHRleHQgKyBSRVNFVA0KPiA+ID4NCj4gPiA+IC1kZWYgcGFyc2VfdGVz dF9wbGFuKGxpbmVzOiBMaW5lU3RyZWFtKSAtPiBPcHRpb25hbFtpbnRdOg0KPiA+ID4gLSAgICAg ICBjb25zdW1lX25vbl9kaWFnbm9zdGljKGxpbmVzKQ0KPiA+ID4gLSAgICAgICBtYXRjaCA9IFRF U1RfUExBTi5tYXRjaChsaW5lcy5wZWVrKCkpDQo+ID4gPiAtICAgICAgIGlmIG1hdGNoOg0KPiA+ ID4gLSAgICAgICAgICAgICAgIGxpbmVzLnBvcCgpDQo+ID4gPiAtICAgICAgICAgICAgICAgcmV0 dXJuIGludChtYXRjaC5ncm91cCgxKSkNCj4gPiA+IC0gICAgICAgZWxzZToNCj4gPiA+IC0gICAg ICAgICAgICAgICByZXR1cm4gTm9uZQ0KPiA+ID4gLQ0KPiA+ID4gLWRlZiBidWJibGVfdXBfc3Vp dGVfZXJyb3JzKHRlc3Rfc3VpdGVzOiBJdGVyYWJsZVtUZXN0U3VpdGVdKSAtPiBUZXN0U3RhdHVz Og0KPiA+ID4gLSAgICAgICByZXR1cm4gYnViYmxlX3VwX2Vycm9ycyh4LnN0YXR1cyBmb3IgeCBp biB0ZXN0X3N1aXRlcykNCj4gPiA+IC0NCj4gPiA+IC1kZWYgcGFyc2VfdGVzdF9yZXN1bHQobGlu ZXM6IExpbmVTdHJlYW0pIC0+IFRlc3RSZXN1bHQ6DQo+ID4gPiAtICAgICAgIGNvbnN1bWVfbm9u X2RpYWdub3N0aWMobGluZXMpDQo+ID4gPiAtICAgICAgIGlmIG5vdCBsaW5lcyBvciBub3QgcGFy c2VfdGFwX2hlYWRlcihsaW5lcyk6DQo+ID4gPiAtICAgICAgICAgICAgICAgcmV0dXJuIFRlc3RS ZXN1bHQoVGVzdFN0YXR1cy5GQUlMVVJFX1RPX1BBUlNFX1RFU1RTLCBbXSwgbGluZXMpDQo+ID4g PiAtICAgICAgIGV4cGVjdGVkX3Rlc3Rfc3VpdGVfbnVtID0gcGFyc2VfdGVzdF9wbGFuKGxpbmVz KQ0KPiA+ID4gLSAgICAgICBpZiBleHBlY3RlZF90ZXN0X3N1aXRlX251bSA9PSAwOg0KPiA+ID4g LSAgICAgICAgICAgICAgIHJldHVybiBUZXN0UmVzdWx0KFRlc3RTdGF0dXMuTk9fVEVTVFMsIFtd LCBsaW5lcykNCj4gPiA+IC0gICAgICAgZWxpZiBleHBlY3RlZF90ZXN0X3N1aXRlX251bSBpcyBO b25lOg0KPiA+ID4gLSAgICAgICAgICAgICAgIHJldHVybiBUZXN0UmVzdWx0KFRlc3RTdGF0dXMu RkFJTFVSRV9UT19QQVJTRV9URVNUUywgW10sIGxpbmVzKQ0KPiA+ID4gLSAgICAgICB0ZXN0X3N1 aXRlcyA9IFtdDQo+ID4gPiAtICAgICAgIGZvciBpIGluIHJhbmdlKDEsIGV4cGVjdGVkX3Rlc3Rf c3VpdGVfbnVtICsgMSk6DQo+ID4gPiAtICAgICAgICAgICAgICAgdGVzdF9zdWl0ZSA9IHBhcnNl X3Rlc3Rfc3VpdGUobGluZXMsIGkpDQo+ID4gPiAtICAgICAgICAgICAgICAgaWYgdGVzdF9zdWl0 ZToNCj4gPiA+IC0gICAgICAgICAgICAgICAgICAgICAgIHRlc3Rfc3VpdGVzLmFwcGVuZCh0ZXN0 X3N1aXRlKQ0KPiA+ID4gLSAgICAgICAgICAgICAgIGVsc2U6DQo+ID4gPiAtICAgICAgICAgICAg ICAgICAgICAgICBwcmludF93aXRoX3RpbWVzdGFtcCgNCj4gPiA+IC0gICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgcmVkKCdbRVJST1JdICcpICsgJyBleHBlY3RlZCAnICsNCj4gPiA+IC0g ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RyKGV4cGVjdGVkX3Rlc3Rfc3VpdGVfbnVt KSArDQo+ID4gPiAtICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICcgdGVzdCBzdWl0ZXMs IGJ1dCBnb3QgJyArIHN0cihpIC0gMikpDQo+ID4gPiAtICAgICAgICAgICAgICAgICAgICAgICBi cmVhaw0KPiA+ID4gLSAgICAgICB0ZXN0X3N1aXRlID0gcGFyc2VfdGVzdF9zdWl0ZShsaW5lcywg LTEpDQo+ID4gPiAtICAgICAgIGlmIHRlc3Rfc3VpdGU6DQo+ID4gPiAtICAgICAgICAgICAgICAg cHJpbnRfd2l0aF90aW1lc3RhbXAocmVkKCdbRVJST1JdICcpICsNCj4gPiA+IC0gICAgICAgICAg ICAgICAgICAgICAgICdnb3QgdW5leHBlY3RlZCB0ZXN0IHN1aXRlOiAnICsgdGVzdF9zdWl0ZS5u YW1lKQ0KPiA+ID4gLSAgICAgICBpZiB0ZXN0X3N1aXRlczoNCj4gPiA+IC0gICAgICAgICAgICAg ICByZXR1cm4gVGVzdFJlc3VsdChidWJibGVfdXBfc3VpdGVfZXJyb3JzKHRlc3Rfc3VpdGVzKSwg dGVzdF9zdWl0ZXMsIGxpbmVzKQ0KPiA+ID4gLSAgICAgICBlbHNlOg0KPiA+ID4gLSAgICAgICAg ICAgICAgIHJldHVybiBUZXN0UmVzdWx0KFRlc3RTdGF0dXMuTk9fVEVTVFMsIFtdLCBsaW5lcykN Cj4gPiA+ICtkZWYgZ3JlZW4odGV4dDogc3RyKSAtPiBzdHI6DQo+ID4gPiArICAgICAgICIiIlJl dHVybnMgaW5wdXR0ZWQgc3RyaW5nIHdpdGggZ3JlZW4gY29sb3IgY29kZS4iIiINCj4gPiA+ICsg ICAgICAgcmV0dXJuICdcMDMzWzE7MzJtJyArIHRleHQgKyBSRVNFVA0KPiA+ID4NCj4gPiA+IC1j bGFzcyBUZXN0Q291bnRzOg0KPiA+ID4gLSAgICAgICBwYXNzZWQ6IGludA0KPiA+ID4gLSAgICAg ICBmYWlsZWQ6IGludA0KPiA+ID4gLSAgICAgICBjcmFzaGVkOiBpbnQNCj4gPiA+IC0gICAgICAg c2tpcHBlZDogaW50DQo+ID4gPiArQU5TSV9MRU4gPSBsZW4ocmVkKCcnKSkNCj4gPiA+DQo+ID4g PiAtICAgICAgIGRlZiBfX2luaXRfXyhzZWxmKToNCj4gPiA+IC0gICAgICAgICAgICAgICBzZWxm LnBhc3NlZCA9IDANCj4gPiA+IC0gICAgICAgICAgICAgICBzZWxmLmZhaWxlZCA9IDANCj4gPiA+ IC0gICAgICAgICAgICAgICBzZWxmLmNyYXNoZWQgPSAwDQo+ID4gPiAtICAgICAgICAgICAgICAg c2VsZi5za2lwcGVkID0gMA0KPiA+ID4gK2RlZiBwcmludF93aXRoX3RpbWVzdGFtcChtZXNzYWdl OiBzdHIpIC0+IE5vbmU6DQo+ID4gPiArICAgICAgICIiIlByaW50cyBtZXNzYWdlIHdpdGggdGlt ZXN0YW1wIGF0IGJlZ2lubmluZy4iIiINCj4gPiA+ICsgICAgICAgcHJpbnQoJ1slc10gJXMnICUg KGRhdGV0aW1lLm5vdygpLnN0cmZ0aW1lKCclSDolTTolUycpLCBtZXNzYWdlKSkNCj4gPiA+DQo+ ID4gPiAtICAgICAgIGRlZiB0b3RhbChzZWxmKSAtPiBpbnQ6DQo+ID4gPiAtICAgICAgICAgICAg ICAgcmV0dXJuIHNlbGYucGFzc2VkICsgc2VsZi5mYWlsZWQgKyBzZWxmLmNyYXNoZWQgKyBzZWxm LnNraXBwZWQNCj4gPiA+IC0NCj4gPiA+IC1kZWYgcHJpbnRfYW5kX2NvdW50X3Jlc3VsdHModGVz dF9yZXN1bHQ6IFRlc3RSZXN1bHQpIC0+IFRlc3RDb3VudHM6DQo+ID4gPiAtICAgICAgIGNvdW50 cyA9IFRlc3RDb3VudHMoKQ0KPiA+ID4gLSAgICAgICBmb3IgdGVzdF9zdWl0ZSBpbiB0ZXN0X3Jl c3VsdC5zdWl0ZXM6DQo+ID4gPiAtICAgICAgICAgICAgICAgaWYgdGVzdF9zdWl0ZS5zdGF0dXMg PT0gVGVzdFN0YXR1cy5TVUNDRVNTOg0KPiA+ID4gLSAgICAgICAgICAgICAgICAgICAgICAgcHJp bnRfc3VpdGVfZGl2aWRlcihncmVlbignW1BBU1NFRF0gJykgKyB0ZXN0X3N1aXRlLm5hbWUpDQo+ ID4gPiAtICAgICAgICAgICAgICAgZWxpZiB0ZXN0X3N1aXRlLnN0YXR1cyA9PSBUZXN0U3RhdHVz LlNLSVBQRUQ6DQo+ID4gPiAtICAgICAgICAgICAgICAgICAgICAgICBwcmludF9zdWl0ZV9kaXZp ZGVyKHllbGxvdygnW1NLSVBQRURdICcpICsgdGVzdF9zdWl0ZS5uYW1lKQ0KPiA+ID4gLSAgICAg ICAgICAgICAgIGVsaWYgdGVzdF9zdWl0ZS5zdGF0dXMgPT0gVGVzdFN0YXR1cy5URVNUX0NSQVNI RUQ6DQo+ID4gPiAtICAgICAgICAgICAgICAgICAgICAgICBwcmludF9zdWl0ZV9kaXZpZGVyKHJl ZCgnW0NSQVNIRURdICcgKyB0ZXN0X3N1aXRlLm5hbWUpKQ0KPiA+ID4gK2RlZiBmb3JtYXRfdGVz dF9kaXZpZGVyKG1lc3NhZ2U6IHN0ciwgbGVuX21lc3NhZ2U6IGludCkgLT4gc3RyOg0KPiA+ID4g KyAgICAgICAiIiINCj4gPiA+ICsgICAgICAgUmV0dXJucyBzdHJpbmcgd2l0aCBtZXNzYWdlIGNl bnRlcmVkIGluIGZpeGVkIHdpZHRoIGRpdmlkZXIuDQo+ID4gPiArDQo+ID4gPiArICAgICAgIEV4 YW1wbGU6DQo+ID4gPiArICAgICAgICc9PT09PT09PT09PT09PT09PT09PT0gbWVzc2FnZSBleGFt cGxlID09PT09PT09PT09PT09PT09PT09PScNCj4gPiA+ICsNCj4gPiA+ICsgICAgICAgUGFyYW1l dGVyczoNCj4gPiA+ICsgICAgICAgbWVzc2FnZSAtIG1lc3NhZ2UgdG8gYmUgY2VudGVyZWQgaW4g ZGl2aWRlciBsaW5lDQo+ID4gPiArICAgICAgIGxlbl9tZXNzYWdlIC0gbGVuZ3RoIG9mIHRoZSBt ZXNzYWdlIHRvIGJlIHByaW50ZWQgc3VjaCB0aGF0DQo+ID4gPiArICAgICAgICAgICAgICAgYW55 IGNoYXJhY3RlcnMgb2YgdGhlIGNvbG9yIGNvZGVzIGFyZSBub3QgY291bnRlZA0KPiA+ID4gKw0K PiA+ID4gKyAgICAgICBSZXR1cm46DQo+ID4gPiArICAgICAgIFN0cmluZyBjb250YWluaW5nIG1l c3NhZ2UgY2VudGVyZWQgaW4gZml4ZWQgd2lkdGggZGl2aWRlcg0KPiA+ID4gKyAgICAgICAiIiIN Cj4gPiA+ICsgICAgICAgZGVmYXVsdF9jb3VudCA9IDMgICMgZGVmYXVsdCBudW1iZXIgb2YgZGFz aGVzDQo+ID4gPiArICAgICAgIGxlbl8xID0gZGVmYXVsdF9jb3VudA0KPiA+ID4gKyAgICAgICBs ZW5fMiA9IGRlZmF1bHRfY291bnQNCj4gPiA+ICsgICAgICAgZGlmZmVyZW5jZSA9IGxlbihESVZJ REVSKSAtIGxlbl9tZXNzYWdlIC0gMiAgIyAyIHNwYWNlcyBhZGRlZA0KPiA+ID4gKyAgICAgICBp ZiBkaWZmZXJlbmNlID4gMDoNCj4gPiA+ICsgICAgICAgICAgICAgICAjIGNhbGN1bGF0ZSBudW1i ZXIgb2YgZGFzaGVzIGZvciBlYWNoIHNpZGUgb2YgdGhlIGRpdmlkZXINCj4gPiA+ICsgICAgICAg ICAgICAgICBsZW5fMSA9IGludChkaWZmZXJlbmNlIC8gMikNCj4gPiA+ICsgICAgICAgICAgICAg ICBsZW5fMiA9IGRpZmZlcmVuY2UgLSBsZW5fMQ0KPiA+ID4gKyAgICAgICByZXR1cm4gKCc9JyAq IGxlbl8xKSArICcgJyArIG1lc3NhZ2UgKyAnICcgKyAoJz0nICogbGVuXzIpDQo+ID4gPiArDQo+ ID4gPiArZGVmIHByaW50X3Rlc3RfaGVhZGVyKHRlc3Q6IFRlc3QpIC0+IE5vbmU6DQo+ID4gPiAr ICAgICAgICIiIg0KPiA+ID4gKyAgICAgICBQcmludHMgdGVzdCBoZWFkZXIgd2l0aCB0ZXN0IG5h bWUgYW5kIG9wdGlvbmFsbHkgdGhlIGV4cGVjdGVkIG51bWJlcg0KPiA+ID4gKyAgICAgICBvZiBz dWJ0ZXN0cy4NCj4gPiA+ICsNCj4gPiA+ICsgICAgICAgRXhhbXBsZToNCj4gPiA+ICsgICAgICAg Jz09PT09PT09PT09PT09PT09PT0gZXhhbXBsZSAoMiBzdWJ0ZXN0cykgPT09PT09PT09PT09PT09 PT09PScNCj4gPiA+ICsNCj4gPiA+ICsgICAgICAgUGFyYW1ldGVyczoNCj4gPiA+ICsgICAgICAg dGVzdCAtIFRlc3Qgb2JqZWN0IHJlcHJlc2VudGluZyBjdXJyZW50IHRlc3QgYmVpbmcgcHJpbnRl ZA0KPiA+ID4gKyAgICAgICAiIiINCj4gPiA+ICsgICAgICAgbWVzc2FnZSA9IHRlc3QubmFtZQ0K PiA+ID4gKyAgICAgICBpZiB0ZXN0LmV4cGVjdGVkX2NvdW50Og0KPiA+ID4gKyAgICAgICAgICAg ICAgIG1lc3NhZ2UgKz0gJyAoJyArIHN0cih0ZXN0LmV4cGVjdGVkX2NvdW50KSArICcgc3VidGVz dHMpJw0KPiA+ID4gKyAgICAgICBwcmludF93aXRoX3RpbWVzdGFtcChmb3JtYXRfdGVzdF9kaXZp ZGVyKG1lc3NhZ2UsIGxlbihtZXNzYWdlKSkpDQo+ID4gPiArDQo+ID4gPiArZGVmIHByaW50X2xv Zyhsb2c6IEl0ZXJhYmxlW3N0cl0pIC0+IE5vbmU6DQo+ID4gPiArICAgICAgICIiIg0KPiA+ID4g KyAgICAgICBQcmludHMgYWxsIHN0cmluZ3MgaW4gc2F2ZWQgbG9nIGZvciB0ZXN0IGluIHllbGxv dy4NCj4gPiA+ICsNCj4gPiA+ICsgICAgICAgUGFyYW1ldGVyczoNCj4gPiA+ICsgICAgICAgbG9n IC0gSXRlcmFibGUgb2JqZWN0IHdpdGggYWxsIHN0cmluZ3Mgc2F2ZWQgaW4gbG9nIGZvciB0ZXN0 DQo+ID4gPiArICAgICAgICIiIg0KPiA+ID4gKyAgICAgICBmb3IgbSBpbiBsb2c6DQo+ID4gPiAr ICAgICAgICAgICAgICAgcHJpbnRfd2l0aF90aW1lc3RhbXAoeWVsbG93KG0pKQ0KPiA+ID4gKyAg ICAgICBwcmludF93aXRoX3RpbWVzdGFtcCgnJykNCj4gPiA+ICsNCj4gPiA+ICtkZWYgZm9ybWF0 X3Rlc3RfcmVzdWx0KHRlc3Q6IFRlc3QpIC0+IHN0cjoNCj4gPiA+ICsgICAgICAgIiIiDQo+ID4g PiArICAgICAgIFJldHVybnMgc3RyaW5nIHdpdGggZm9ybWF0dGVkIHRlc3QgcmVzdWx0IHdpdGgg Y29sb3JlZCBzdGF0dXMgYW5kIHRlc3QNCj4gPiA+ICsgICAgICAgbmFtZS4NCj4gPiA+ICsNCj4g PiA+ICsgICAgICAgRXhhbXBsZToNCj4gPiA+ICsgICAgICAgJ1tQQVNTRURdIGV4YW1wbGUnDQo+ ID4gPiArDQo+ID4gPiArICAgICAgIFBhcmFtZXRlcnM6DQo+ID4gPiArICAgICAgIHRlc3QgLSBU ZXN0IG9iamVjdCByZXByZXNlbnRpbmcgY3VycmVudCB0ZXN0IGJlaW5nIHByaW50ZWQNCj4gPiA+ ICsNCj4gPiA+ICsgICAgICAgUmV0dXJuOg0KPiA+ID4gKyAgICAgICBTdHJpbmcgY29udGFpbmlu ZyBmb3JtYXR0ZWQgdGVzdCByZXN1bHQNCj4gPiA+ICsgICAgICAgIiIiDQo+ID4gPiArICAgICAg IGlmIHRlc3Quc3RhdHVzID09IFRlc3RTdGF0dXMuU1VDQ0VTUzoNCj4gPiA+ICsgICAgICAgICAg ICAgICByZXR1cm4gKGdyZWVuKCdbUEFTU0VEXSAnKSArIHRlc3QubmFtZSkNCj4gPiA+ICsgICAg ICAgZWxpZiB0ZXN0LnN0YXR1cyA9PSBUZXN0U3RhdHVzLlNLSVBQRUQ6DQo+ID4gPiArICAgICAg ICAgICAgICAgcmV0dXJuICh5ZWxsb3coJ1tTS0lQUEVEXSAnKSArIHRlc3QubmFtZSkNCj4gPiA+ ICsgICAgICAgZWxpZiB0ZXN0LnN0YXR1cyA9PSBUZXN0U3RhdHVzLlRFU1RfQ1JBU0hFRDoNCj4g PiA+ICsgICAgICAgICAgICAgICBwcmludF9sb2codGVzdC5sb2cpDQo+ID4gPiArICAgICAgICAg ICAgICAgcmV0dXJuIChyZWQoJ1tDUkFTSEVEXSAnKSArIHRlc3QubmFtZSkNCj4gPiA+ICsgICAg ICAgZWxzZToNCj4gPiA+ICsgICAgICAgICAgICAgICBwcmludF9sb2codGVzdC5sb2cpDQo+ID4g PiArICAgICAgICAgICAgICAgcmV0dXJuIChyZWQoJ1tGQUlMRURdICcpICsgdGVzdC5uYW1lKQ0K PiA+ID4gKw0KPiA+ID4gK2RlZiBwcmludF90ZXN0X3Jlc3VsdCh0ZXN0OiBUZXN0KSAtPiBOb25l Og0KPiA+ID4gKyAgICAgICAiIiINCj4gPiA+ICsgICAgICAgUHJpbnRzIHJlc3VsdCBsaW5lIHdp dGggc3RhdHVzIG9mIHRlc3QuDQo+ID4gPiArDQo+ID4gPiArICAgICAgIEV4YW1wbGU6DQo+ID4g PiArICAgICAgICdbUEFTU0VEXSBleGFtcGxlJw0KPiA+ID4gKw0KPiA+ID4gKyAgICAgICBQYXJh bWV0ZXJzOg0KPiA+ID4gKyAgICAgICB0ZXN0IC0gVGVzdCBvYmplY3QgcmVwcmVzZW50aW5nIGN1 cnJlbnQgdGVzdCBiZWluZyBwcmludGVkDQo+ID4gPiArICAgICAgICIiIg0KPiA+ID4gKyAgICAg ICBwcmludF93aXRoX3RpbWVzdGFtcChmb3JtYXRfdGVzdF9yZXN1bHQodGVzdCkpDQo+ID4gPiAr DQo+ID4gPiArZGVmIHByaW50X3Rlc3RfZm9vdGVyKHRlc3Q6IFRlc3QpIC0+IE5vbmU6DQo+ID4g PiArICAgICAgICIiIg0KPiA+ID4gKyAgICAgICBQcmludHMgdGVzdCBmb290ZXIgd2l0aCBzdGF0 dXMgb2YgdGVzdC4NCj4gPiA+ICsNCj4gPiA+ICsgICAgICAgRXhhbXBsZToNCj4gPiA+ICsgICAg ICAgJz09PT09PT09PT09PT09PT09PT09PSBbUEFTU0VEXSBleGFtcGxlID09PT09PT09PT09PT09 PT09PT09PScNCj4gPiA+ICsNCj4gPiA+ICsgICAgICAgUGFyYW1ldGVyczoNCj4gPiA+ICsgICAg ICAgdGVzdCAtIFRlc3Qgb2JqZWN0IHJlcHJlc2VudGluZyBjdXJyZW50IHRlc3QgYmVpbmcgcHJp bnRlZA0KPiA+ID4gKyAgICAgICAiIiINCj4gPiA+ICsgICAgICAgbWVzc2FnZSA9IGZvcm1hdF90 ZXN0X3Jlc3VsdCh0ZXN0KQ0KPiA+ID4gKyAgICAgICBwcmludF93aXRoX3RpbWVzdGFtcChmb3Jt YXRfdGVzdF9kaXZpZGVyKG1lc3NhZ2UsDQo+ID4gPiArICAgICAgICAgICAgICAgbGVuKG1lc3Nh Z2UpIC0gQU5TSV9MRU4pKQ0KPiA+ID4gKw0KPiA+ID4gK2RlZiBwcmludF9zdW1tYXJ5X2xpbmUo dGVzdDogVGVzdCkgLT4gTm9uZToNCj4gPiA+ICsgICAgICAgIiIiDQo+ID4gPiArICAgICAgIFBy aW50cyBzdW1tYXJ5IGxpbmUgb2YgdGVzdCBvYmplY3QuIENvbG9yIG9mIGxpbmUgaXMgZGVwZW5k ZW50IG9uDQo+ID4gPiArICAgICAgIHN0YXR1cyBvZiB0ZXN0LiBDb2xvciBpcyBncmVlbiBpZiB0 ZXN0IHBhc3NlcywgeWVsbG93IGlmIHRlc3QgaXMNCj4gPiA+ICsgICAgICAgc2tpcHBlZCwgYW5k IHJlZCBpZiB0aGUgdGVzdCBmYWlscyBvciBjcmFzaGVzLiBTdW1tYXJ5IGxpbmUgY29udGFpbnMN Cj4gPiA+ICsgICAgICAgY291bnRzIG9mIHRoZSBzdGF0dXNlcyBvZiB0aGUgdGVzdHMgc3VidGVz dHMgb3IgdGhlIHRlc3QgaXRzZWxmIGlmIGl0DQo+ID4gPiArICAgICAgIGhhcyBubyBzdWJ0ZXN0 cy4NCj4gPiA+ICsNCj4gPiA+ICsgICAgICAgRXhhbXBsZToNCj4gPiA+ICsgICAgICAgIlRlc3Rp bmcgY29tcGxldGUuIFBhc3NlZDogMiwgRmFpbGVkOiAwLCBDcmFzaGVkOiAwLCBTa2lwcGVkOiAw LA0KPiA+ID4gKyAgICAgICBFcnJvcnM6IDAiDQo+ID4gPiArDQo+ID4gPiArICAgICAgIHRlc3Qg LSBUZXN0IG9iamVjdCByZXByZXNlbnRpbmcgY3VycmVudCB0ZXN0IGJlaW5nIHByaW50ZWQNCj4g PiA+ICsgICAgICAgIiIiDQo+ID4gPiArICAgICAgIGlmIHRlc3Quc3RhdHVzID09IFRlc3RTdGF0 dXMuU1VDQ0VTUyBvciBcDQo+ID4gPiArICAgICAgICAgICAgICAgICAgICAgICB0ZXN0LnN0YXR1 cyA9PSBUZXN0U3RhdHVzLk5PX1RFU1RTOg0KPiA+ID4gKyAgICAgICAgICAgICAgIGNvbG9yID0g Z3JlZW4NCj4gPiA+ICsgICAgICAgZWxpZiB0ZXN0LnN0YXR1cyA9PSBUZXN0U3RhdHVzLlNLSVBQ RUQ6DQo+ID4gPiArICAgICAgICAgICAgICAgY29sb3IgPSB5ZWxsb3cNCj4gPiA+ICsgICAgICAg ZWxzZToNCj4gPiA+ICsgICAgICAgICAgICAgICBjb2xvciA9IHJlZA0KPiA+ID4gKyAgICAgICBj b3VudHMgPSB0ZXN0LmNvdW50cw0KPiA+ID4gKyAgICAgICBwcmludF93aXRoX3RpbWVzdGFtcChj b2xvcignVGVzdGluZyBjb21wbGV0ZS4gJyArIHN0cihjb3VudHMpKSkNCj4gPiA+ICsNCj4gPiA+ ICtkZWYgcHJpbnRfZXJyb3IoZXJyb3JfbWVzc2FnZTogc3RyKSAtPiBOb25lOg0KPiA+ID4gKyAg ICAgICAiIiINCj4gPiA+ICsgICAgICAgUHJpbnRzIGVycm9yIG1lc3NhZ2Ugd2l0aCBlcnJvciBm b3JtYXQuDQo+ID4gPiArDQo+ID4gPiArICAgICAgIEV4YW1wbGU6DQo+ID4gPiArICAgICAgICJb RVJST1JdIFRlc3QgZXhhbXBsZTogbWlzc2luZyB0ZXN0IHBsYW4hIg0KPiA+ID4gKw0KPiA+ID4g KyAgICAgICBQYXJhbWV0ZXJzOg0KPiA+ID4gKyAgICAgICBlcnJvcl9tZXNzYWdlIC0gbWVzc2Fn ZSBkZXNjcmliaW5nIGVycm9yDQo+ID4gPiArICAgICAgICIiIg0KPiA+ID4gKyAgICAgICBwcmlu dF93aXRoX3RpbWVzdGFtcChyZWQoJ1tFUlJPUl0gJykgKyBlcnJvcl9tZXNzYWdlKQ0KPiA+ID4g Kw0KPiA+ID4gKyMgT3RoZXIgbWV0aG9kczoNCj4gPiA+ICsNCj4gPiA+ICtkZWYgYnViYmxlX3Vw X3Rlc3RfcmVzdWx0cyh0ZXN0OiBUZXN0KSAtPiBOb25lOg0KPiA+ID4gKyAgICAgICAiIiINCj4g PiA+ICsgICAgICAgSWYgdGhlIHRlc3QgaGFzIHN1YnRlc3RzLCBhZGQgdGhlIHRlc3QgY291bnRz IG9mIHRoZSBzdWJ0ZXN0cyB0byB0aGUNCj4gPiA+ICsgICAgICAgdGVzdCBhbmQgY2hlY2sgaWYg YW55IG9mIHRoZSB0ZXN0cyBjcmFzaGVkIGFuZCBpZiBzbyBzZXQgdGhlIHRlc3QNCj4gPiA+ICsg ICAgICAgc3RhdHVzIHRvIGNyYXNoZWQuIE90aGVyd2lzZSBpZiB0aGUgdGVzdCBoYXMgbm8gc3Vi dGVzdHMgYWRkIHRoZQ0KPiA+ID4gKyAgICAgICBzdGF0dXMgb2YgdGhlIHRlc3QgdG8gdGhlIHRl c3QgY291bnRzLg0KPiA+ID4gKw0KPiA+ID4gKyAgICAgICBQYXJhbWV0ZXJzOg0KPiA+ID4gKyAg ICAgICB0ZXN0IC0gVGVzdCBvYmplY3QgZm9yIGN1cnJlbnQgdGVzdCBiZWluZyBwYXJzZWQNCj4g PiA+ICsgICAgICAgIiIiDQo+ID4gPiArICAgICAgIHBhcnNlX2NyYXNoX2luX2xvZyh0ZXN0KQ0K PiA+ID4gKyAgICAgICBzdWJ0ZXN0cyA9IHRlc3Quc3VidGVzdHMNCj4gPiA+ICsgICAgICAgY291 bnRzID0gdGVzdC5jb3VudHMNCj4gPiA+ICsgICAgICAgc3RhdHVzID0gdGVzdC5zdGF0dXMNCj4g PiA+ICsgICAgICAgZm9yIHQgaW4gc3VidGVzdHM6DQo+ID4gPiArICAgICAgICAgICAgICAgY291 bnRzLmFkZF9zdWJ0ZXN0X2NvdW50cyh0LmNvdW50cykNCj4gPiA+ICsgICAgICAgaWYgY291bnRz LnRvdGFsKCkgPT0gMDoNCj4gPiA+ICsgICAgICAgICAgICAgICBjb3VudHMuYWRkX3N0YXR1cyhz dGF0dXMpDQo+ID4gPiArICAgICAgIGVsaWYgdGVzdC5jb3VudHMuZ2V0X3N0YXR1cygpID09IFRl c3RTdGF0dXMuVEVTVF9DUkFTSEVEOg0KPiA+ID4gKyAgICAgICAgICAgICAgIHRlc3Quc3RhdHVz ID0gVGVzdFN0YXR1cy5URVNUX0NSQVNIRUQNCj4gPiA+ICsNCj4gPiA+ICtkZWYgcGFyc2VfdGVz dChsaW5lczogTGluZVN0cmVhbSwgZXhwZWN0ZWRfbnVtOiBpbnQsIGxvZzogTGlzdFtzdHJdKSAt PiBUZXN0Og0KPiA+ID4gKyAgICAgICAiIiINCj4gPiA+ICsgICAgICAgRmluZHMgbmV4dCB0ZXN0 IHRvIHBhcnNlIGluIExpbmVTdHJlYW0sIGNyZWF0ZXMgbmV3IFRlc3Qgb2JqZWN0LA0KPiA+ID4g KyAgICAgICBwYXJzZXMgYW55IHN1YnRlc3RzIG9mIHRoZSB0ZXN0LCBwb3B1bGF0ZXMgVGVzdCBv YmplY3Qgd2l0aCBhbGwNCj4gPiA+ICsgICAgICAgaW5mb3JtYXRpb24gKHN0YXR1cywgbmFtZSkg YWJvdXQgdGhlIHRlc3QgYW5kIHRoZSBUZXN0IG9iamVjdHMgZm9yDQo+ID4gPiArICAgICAgIGFu eSBzdWJ0ZXN0cywgYW5kIHRoZW4gcmV0dXJucyB0aGUgVGVzdCBvYmplY3QuIFRoZSBtZXRob2Qg YWNjZXB0cw0KPiA+ID4gKyAgICAgICB0aHJlZSBmb3JtYXRzIG9mIHRlc3RzOg0KPiA+ID4gKw0K PiA+ID4gKyAgICAgICBBY2NlcHRlZCB0ZXN0IGZvcm1hdHM6DQo+ID4gPiArDQo+ID4gPiArICAg ICAgIC0gTWFpbiBLVEFQL1RBUCBoZWFkZXINCj4gPiA+ICsNCj4gPiA+ICsgICAgICAgRXhhbXBs ZToNCj4gPiA+ICsNCj4gPiA+ICsgICAgICAgS1RBUCB2ZXJzaW9uIDENCj4gPiA+ICsgICAgICAg MS4uNA0KPiA+ID4gKyAgICAgICBbc3VidGVzdHNdDQo+ID4gPiArDQo+ID4gPiArICAgICAgIC0g U3VidGVzdCBoZWFkZXIgbGluZQ0KPiA+ID4gKw0KPiA+ID4gKyAgICAgICBFeGFtcGxlOg0KPiA+ ID4gKw0KPiA+ID4gKyAgICAgICAjIFN1YnRlc3Q6IG5hbWUNCj4gPiA+ICsgICAgICAgMS4uMw0K PiA+ID4gKyAgICAgICBbc3VidGVzdHNdDQo+ID4gPiArICAgICAgIG9rIDEgbmFtZQ0KPiA+ID4g Kw0KPiA+ID4gKyAgICAgICAtIFRlc3QgcmVzdWx0IGxpbmUNCj4gPiA+ICsNCj4gPiA+ICsgICAg ICAgRXhhbXBsZToNCj4gPiA+ICsNCj4gPiA+ICsgICAgICAgb2sgMSAtIHRlc3QNCj4gPiA+ICsN Cj4gPiA+ICsgICAgICAgUGFyYW1ldGVyczoNCj4gPiA+ICsgICAgICAgbGluZXMgLSBMaW5lU3Ry ZWFtIG9mIEtUQVAgb3V0cHV0IHRvIHBhcnNlDQo+ID4gPiArICAgICAgIGV4cGVjdGVkX251bSAt IGV4cGVjdGVkIHRlc3QgbnVtYmVyIGZvciB0ZXN0IHRvIGJlIHBhcnNlZA0KPiA+ID4gKyAgICAg ICBsb2cgLSBsaXN0IG9mIHN0cmluZ3MgY29udGFpbmluZyBhbnkgcHJlY2VkaW5nIGRpYWdub3N0 aWMgbGluZXMNCj4gPiA+ICsgICAgICAgICAgICAgICBjb3JyZXNwb25kaW5nIHRvIHRoZSBjdXJy ZW50IHRlc3QNCj4gPiA+ICsNCj4gPiA+ICsgICAgICAgUmV0dXJuOg0KPiA+ID4gKyAgICAgICBU ZXN0IG9iamVjdCBwb3B1bGF0ZWQgd2l0aCBjaGFyYWN0ZXJpc3RpY3MgYW5kIGFueSBzdWJ0ZXN0 cw0KPiA+ID4gKyAgICAgICAiIiINCj4gPiA+ICsgICAgICAgdGVzdCA9IFRlc3QoKQ0KPiA+ID4g KyAgICAgICB0ZXN0LmxvZy5leHRlbmQobG9nKQ0KPiA+ID4gKyAgICAgICBwYXJlbnRfdGVzdCA9 IEZhbHNlDQo+ID4gPiArICAgICAgIG1haW4gPSBwYXJzZV9rdGFwX2hlYWRlcihsaW5lcywgdGVz dCkNCj4gPiA+ICsgICAgICAgaWYgbWFpbjoNCj4gPiA+ICsgICAgICAgICAgICAgICAjIElmIEtU QVAvVEFQIGhlYWRlciBpcyBmb3VuZCwgYXR0ZW1wdCB0byBwYXJzZQ0KPiA+ID4gKyAgICAgICAg ICAgICAgICMgdGVzdCBwbGFuDQo+ID4gPiArICAgICAgICAgICAgICAgdGVzdC5uYW1lID0gIm1h aW4iDQo+ID4gPiArICAgICAgICAgICAgICAgcGFyc2VfdGVzdF9wbGFuKGxpbmVzLCB0ZXN0KQ0K PiA+ID4gKyAgICAgICBlbHNlOg0KPiA+ID4gKyAgICAgICAgICAgICAgICMgSWYgS1RBUC9UQVAg aGVhZGVyIGlzIG5vdCBmb3VuZCwgdGVzdCBtdXN0IGJlIHN1YnRlc3QNCj4gPiA+ICsgICAgICAg ICAgICAgICAjIGhlYWRlciBvciB0ZXN0IHJlc3VsdCBsaW5lIHNvIHBhcnNlIGF0dGVtcHQgdG8g cGFyc2VyDQo+ID4gPiArICAgICAgICAgICAgICAgIyBzdWJ0ZXN0IGhlYWRlcg0KPiA+ID4gKyAg ICAgICAgICAgICAgIHBhcmVudF90ZXN0ID0gcGFyc2VfdGVzdF9oZWFkZXIobGluZXMsIHRlc3Qp DQo+ID4gPiArICAgICAgICAgICAgICAgaWYgcGFyZW50X3Rlc3Q6DQo+ID4gPiArICAgICAgICAg ICAgICAgICAgICAgICAjIElmIHN1YnRlc3QgaGVhZGVyIGlzIGZvdW5kLCBhdHRlbXB0IHRvIHBh cnNlDQo+ID4gPiArICAgICAgICAgICAgICAgICAgICAgICAjIHRlc3QgcGxhbiBhbmQgcHJpbnQg aGVhZGVyDQo+ID4gPiArICAgICAgICAgICAgICAgICAgICAgICBwYXJzZV90ZXN0X3BsYW4obGlu ZXMsIHRlc3QpDQo+ID4gPiArICAgICAgICAgICAgICAgICAgICAgICBwcmludF90ZXN0X2hlYWRl cih0ZXN0KQ0KPiA+ID4gKyAgICAgICBleHBlY3RlZF9jb3VudCA9IHRlc3QuZXhwZWN0ZWRfY291 bnQNCj4gPiA+ICsgICAgICAgc3VidGVzdHMgPSBbXQ0KPiA+ID4gKyAgICAgICB0ZXN0X251bSA9 IDENCj4gPiA+ICsgICAgICAgd2hpbGUgbWFpbiBvciBleHBlY3RlZF9jb3VudCBpcyBOb25lIG9y IHRlc3RfbnVtIDw9IGV4cGVjdGVkX2NvdW50Og0KPiA+ID4gKyAgICAgICAgICAgICAgICMgTG9v cCB0byBwYXJzZSBhbnkgc3VidGVzdHMuDQo+ID4gPiArICAgICAgICAgICAgICAgIyBJZiB0ZXN0 IGlzIG1haW4gdGVzdCwgZG8gbm90IGJyZWFrIHVudGlsIG5vIGxpbmVzIGxlZnQuDQo+ID4gPiAr ICAgICAgICAgICAgICAgIyBPdGhlcndpc2UsIGJyZWFrIGFmdGVyIHBhcnNpbmcgZXhwZWN0ZWQg bnVtYmVyIG9mIHRlc3RzIG9yDQo+ID4gPiArICAgICAgICAgICAgICAgIyBpZiBleHBlY3RlZCBu dW1iZXIgb2YgdGVzdHMgaXMgdW5rbm93biBicmVhayB3aGVuIGZvdW5kDQo+ID4gPiArICAgICAg ICAgICAgICAgIyB0ZXN0IHJlc3VsdCBsaW5lIHdpdGggbWF0Y2hpbmcgbmFtZSB0byBzdWJ0ZXN0 IGhlYWRlci4NCj4gPiA+ICsgICAgICAgICAgICAgICBpZiBub3QgbGluZXM6DQo+ID4gPiArICAg ICAgICAgICAgICAgICAgICAgICBpZiBleHBlY3RlZF9jb3VudCBhbmQgdGVzdF9udW0gPD0gZXhw ZWN0ZWRfY291bnQ6DQo+ID4gPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRlc3Qu YWRkX2Vycm9yKCdtaXNzaW5nIGV4cGVjdGVkIHN1YnRlc3RzIScpDQo+ID4gPiArICAgICAgICAg ICAgICAgICAgICAgICBicmVhaw0KPiA+ID4gKyAgICAgICAgICAgICAgIHN1Yl9sb2cgPSBwYXJz ZV9kaWFnbm9zdGljKGxpbmVzKQ0KPiA+ID4gKyAgICAgICAgICAgICAgIGlmIG5vdCBleHBlY3Rl ZF9jb3VudCBhbmQgbm90IG1haW4gYW5kIFwNCj4gPiA+ICsgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgcGVla190ZXN0X25hbWVfbWF0Y2gobGluZXMsIHRlc3QpOg0KPiA+ID4gKyAgICAg ICAgICAgICAgICAgICAgICAgdGVzdC5sb2cuZXh0ZW5kKHN1Yl9sb2cpDQo+ID4gPiArICAgICAg ICAgICAgICAgICAgICAgICBicmVhaw0KPiA+ID4gKyAgICAgICAgICAgICAgIHN1YnRlc3RzLmFw cGVuZChwYXJzZV90ZXN0KGxpbmVzLCB0ZXN0X251bSwgc3ViX2xvZykpDQo+ID4gPiArICAgICAg ICAgICAgICAgdGVzdF9udW0gKz0gMQ0KPiA+ID4gKyAgICAgICB0ZXN0LnN1YnRlc3RzID0gc3Vi dGVzdHMNCj4gPiA+ICsgICAgICAgaWYgbm90IG1haW46DQo+ID4gPiArICAgICAgICAgICAgICAg IyBJZiBub3QgbWFpbiB0ZXN0LCBsb29rIGZvciB0ZXN0IHJlc3VsdCBsaW5lDQo+ID4gPiArICAg ICAgICAgICAgICAgdGVzdC5sb2cuZXh0ZW5kKHBhcnNlX2RpYWdub3N0aWMobGluZXMpKQ0KPiA+ ID4gKyAgICAgICAgICAgICAgIGlmIChwYXJlbnRfdGVzdCBhbmQgcGVla190ZXN0X25hbWVfbWF0 Y2gobGluZXMsIHRlc3QpKSBvciBcDQo+ID4gPiArICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIG5vdCBwYXJlbnRfdGVzdDoNCj4gPiA+ICsgICAgICAgICAgICAgICAgICAgICAgIHBhcnNl X3Rlc3RfcmVzdWx0KGxpbmVzLCB0ZXN0LCBleHBlY3RlZF9udW0pDQo+ID4gPiAgICAgICAgICAg ICAgICAgZWxzZToNCj4gPiA+IC0gICAgICAgICAgICAgICAgICAgICAgIHByaW50X3N1aXRlX2Rp dmlkZXIocmVkKCdbRkFJTEVEXSAnKSArIHRlc3Rfc3VpdGUubmFtZSkNCj4gPiA+IC0gICAgICAg ICAgICAgICBmb3IgdGVzdF9jYXNlIGluIHRlc3Rfc3VpdGUuY2FzZXM6DQo+ID4gPiAtICAgICAg ICAgICAgICAgICAgICAgICBpZiB0ZXN0X2Nhc2Uuc3RhdHVzID09IFRlc3RTdGF0dXMuU1VDQ0VT UzoNCj4gPiA+IC0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY291bnRzLnBhc3NlZCAr PSAxDQo+ID4gPiAtICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByaW50X3dpdGhfdGlt ZXN0YW1wKGdyZWVuKCdbUEFTU0VEXSAnKSArIHRlc3RfY2FzZS5uYW1lKQ0KPiA+ID4gLSAgICAg ICAgICAgICAgICAgICAgICAgZWxpZiB0ZXN0X2Nhc2Uuc3RhdHVzID09IFRlc3RTdGF0dXMuU0tJ UFBFRDoNCj4gPiA+IC0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY291bnRzLnNraXBw ZWQgKz0gMQ0KPiA+ID4gLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmludF93aXRo X3RpbWVzdGFtcCh5ZWxsb3coJ1tTS0lQUEVEXSAnKSArIHRlc3RfY2FzZS5uYW1lKQ0KPiA+ID4g LSAgICAgICAgICAgICAgICAgICAgICAgZWxpZiB0ZXN0X2Nhc2Uuc3RhdHVzID09IFRlc3RTdGF0 dXMuVEVTVF9DUkFTSEVEOg0KPiA+ID4gLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBj b3VudHMuY3Jhc2hlZCArPSAxDQo+ID4gPiAtICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IHByaW50X3dpdGhfdGltZXN0YW1wKHJlZCgnW0NSQVNIRURdICcgKyB0ZXN0X2Nhc2UubmFtZSkp DQo+ID4gPiAtICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByaW50X2xvZyhtYXAoeWVs bG93LCB0ZXN0X2Nhc2UubG9nKSkNCj4gPiA+IC0gICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgcHJpbnRfd2l0aF90aW1lc3RhbXAoJycpDQo+ID4gPiAtICAgICAgICAgICAgICAgICAgICAg ICBlbHNlOg0KPiA+ID4gLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb3VudHMuZmFp bGVkICs9IDENCj4gPiA+IC0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJpbnRfd2l0 aF90aW1lc3RhbXAocmVkKCdbRkFJTEVEXSAnKSArIHRlc3RfY2FzZS5uYW1lKQ0KPiA+ID4gLSAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmludF9sb2cobWFwKHllbGxvdywgdGVzdF9j YXNlLmxvZykpDQo+ID4gPiAtICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByaW50X3dp dGhfdGltZXN0YW1wKCcnKQ0KPiA+ID4gLSAgICAgICByZXR1cm4gY291bnRzDQo+ID4gPiArICAg ICAgICAgICAgICAgICAgICAgICB0ZXN0LmFkZF9lcnJvcignbWlzc2luZyBzdWJ0ZXN0IHJlc3Vs dCBsaW5lIScpDQo+ID4gPiArICAgICAgICMgQWRkIHN0YXR1c2VzIHRvIFRlc3RDb3VudHMgYXR0 cmlidXRlIGluIFRlc3Qgb2JqZWN0DQo+ID4gPiArICAgICAgIGJ1YmJsZV91cF90ZXN0X3Jlc3Vs dHModGVzdCkNCj4gPiA+ICsgICAgICAgaWYgcGFyZW50X3Rlc3Q6DQo+ID4gPiArICAgICAgICAg ICAgICAgIyBJZiB0ZXN0IGhhcyBzdWJ0ZXN0cyBhbmQgaXMgbm90IHRoZSBtYWluIHRlc3Qgb2Jq ZWN0LCBwcmludA0KPiA+ID4gKyAgICAgICAgICAgICAgICMgZm9vdGVyLg0KPiA+ID4gKyAgICAg ICAgICAgICAgIHByaW50X3Rlc3RfZm9vdGVyKHRlc3QpDQo+ID4gPiArICAgICAgIGVsaWYgbm90 IG1haW46DQo+ID4gPiArICAgICAgICAgICAgICAgcHJpbnRfdGVzdF9yZXN1bHQodGVzdCkNCj4g PiA+ICsgICAgICAgcmV0dXJuIHRlc3QNCj4gPiA+DQo+ID4gPiAgZGVmIHBhcnNlX3J1bl90ZXN0 cyhrZXJuZWxfb3V0cHV0OiBJdGVyYWJsZVtzdHJdKSAtPiBUZXN0UmVzdWx0Og0KPiA+ID4gLSAg ICAgICBjb3VudHMgPSBUZXN0Q291bnRzKCkNCj4gPiA+ICsgICAgICAgIiIiDQo+ID4gPiArICAg ICAgIFVzaW5nIGtlcm5lbCBvdXRwdXQsIGV4dHJhY3QgS1RBUCBsaW5lcywgcGFyc2UgdGhlIGxp bmVzIGZvciB0ZXN0DQo+ID4gPiArICAgICAgIHJlc3VsdHMgYW5kIHByaW50IGNvbmRlbnNlZCB0 ZXN0IHJlc3VsdHMgYW5kIHN1bW1hcnkgbGluZSAuDQo+ID4gPiArDQo+ID4gPiArICAgICAgIFBh cmFtZXRlcnM6DQo+ID4gPiArICAgICAgIGtlcm5lbF9vdXRwdXQgLSBJdGVyYWJsZSBvYmplY3Qg Y29udGFpbnMgbGluZXMgb2Yga2VybmVsIG91dHB1dA0KPiA+ID4gKw0KPiA+ID4gKyAgICAgICBS ZXR1cm46DQo+ID4gPiArICAgICAgIFRlc3RSZXN1bHQgLSBUdXBsZSBjb250YWluZyBzdGF0dXMg b2YgbWFpbiB0ZXN0IG9iamVjdCwgbWFpbiB0ZXN0DQo+ID4gPiArICAgICAgICAgICAgICAgb2Jq ZWN0IHdpdGggYWxsIHN1YnRlc3RzLCBhbmQgbG9nIG9mIGFsbCBLVEFQIGxpbmVzLg0KPiA+ID4g KyAgICAgICAiIiINCj4gPiA+ICsgICAgICAgcHJpbnRfd2l0aF90aW1lc3RhbXAoRElWSURFUikN Cj4gPiA+ICAgICAgICAgbGluZXMgPSBleHRyYWN0X3RhcF9saW5lcyhrZXJuZWxfb3V0cHV0KQ0K PiA+ID4gLSAgICAgICB0ZXN0X3Jlc3VsdCA9IHBhcnNlX3Rlc3RfcmVzdWx0KGxpbmVzKQ0KPiA+ ID4gLSAgICAgICBpZiB0ZXN0X3Jlc3VsdC5zdGF0dXMgPT0gVGVzdFN0YXR1cy5OT19URVNUUzoN Cj4gPiA+IC0gICAgICAgICAgICAgICBwcmludChyZWQoJ1tFUlJPUl0gJykgKyB5ZWxsb3coJ25v IHRlc3RzIHJ1biEnKSkNCj4gPiA+IC0gICAgICAgZWxpZiB0ZXN0X3Jlc3VsdC5zdGF0dXMgPT0g VGVzdFN0YXR1cy5GQUlMVVJFX1RPX1BBUlNFX1RFU1RTOg0KPiA+ID4gLSAgICAgICAgICAgICAg IHByaW50KHJlZCgnW0VSUk9SXSAnKSArIHllbGxvdygnY291bGQgbm90IHBhcnNlIHRlc3QgcmVz dWx0cyEnKSkNCj4gPiA+ICsgICAgICAgdGVzdCA9IFRlc3QoKQ0KPiA+ID4gKyAgICAgICBpZiBu b3QgbGluZXM6DQo+ID4gPiArICAgICAgICAgICAgICAgdGVzdC5hZGRfZXJyb3IoJ2ludmFsaWQg S1RBUCBpbnB1dCEnKQ0KPiA+ID4gKyAgICAgICAgICAgICAgIHRlc3Quc3RhdHVzID0gVGVzdFN0 YXR1cy5GQUlMVVJFX1RPX1BBUlNFX1RFU1RTDQo+ID4gPiAgICAgICAgIGVsc2U6DQo+ID4gPiAt ICAgICAgICAgICAgICAgY291bnRzID0gcHJpbnRfYW5kX2NvdW50X3Jlc3VsdHModGVzdF9yZXN1 bHQpDQo+ID4gPiArICAgICAgICAgICAgICAgdGVzdCA9IHBhcnNlX3Rlc3QobGluZXMsIDAsIFtd KQ0KPiA+ID4gKyAgICAgICAgICAgICAgIGlmIHRlc3Quc3RhdHVzICE9IFRlc3RTdGF0dXMuTk9f VEVTVFM6DQo+ID4gPiArICAgICAgICAgICAgICAgICAgICAgICB0ZXN0LnN0YXR1cyA9IHRlc3Qu Y291bnRzLmdldF9zdGF0dXMoKQ0KPiA+ID4gICAgICAgICBwcmludF93aXRoX3RpbWVzdGFtcChE SVZJREVSKQ0KPiA+ID4gLSAgICAgICBpZiB0ZXN0X3Jlc3VsdC5zdGF0dXMgPT0gVGVzdFN0YXR1 cy5TVUNDRVNTOg0KPiA+ID4gLSAgICAgICAgICAgICAgIGZtdCA9IGdyZWVuDQo+ID4gPiAtICAg ICAgIGVsaWYgdGVzdF9yZXN1bHQuc3RhdHVzID09IFRlc3RTdGF0dXMuU0tJUFBFRDoNCj4gPiA+ IC0gICAgICAgICAgICAgICBmbXQgPSB5ZWxsb3cNCj4gPiA+IC0gICAgICAgZWxzZToNCj4gPiA+ IC0gICAgICAgICAgICAgICBmbXQgPXJlZA0KPiA+ID4gLSAgICAgICBwcmludF93aXRoX3RpbWVz dGFtcCgNCj4gPiA+IC0gICAgICAgICAgICAgICBmbXQoJ1Rlc3RpbmcgY29tcGxldGUuICVkIHRl c3RzIHJ1bi4gJWQgZmFpbGVkLiAlZCBjcmFzaGVkLiAlZCBza2lwcGVkLicgJQ0KPiA+ID4gLSAg ICAgICAgICAgICAgICAgICAoY291bnRzLnRvdGFsKCksIGNvdW50cy5mYWlsZWQsIGNvdW50cy5j cmFzaGVkLCBjb3VudHMuc2tpcHBlZCkpKQ0KPiA+ID4gLSAgICAgICByZXR1cm4gdGVzdF9yZXN1 bHQNCj4gPiA+ICsgICAgICAgcHJpbnRfc3VtbWFyeV9saW5lKHRlc3QpDQo+ID4gPiArICAgICAg IHJldHVybiBUZXN0UmVzdWx0KHRlc3Quc3RhdHVzLCB0ZXN0LCBsaW5lcykNCj4gPiA+IGRpZmYg LS1naXQgYS90b29scy90ZXN0aW5nL2t1bml0L2t1bml0X3Rvb2xfdGVzdC5weSBiL3Rvb2xzL3Rl c3Rpbmcva3VuaXQva3VuaXRfdG9vbF90ZXN0LnB5DQo+ID4gPiBpbmRleCA2MTljNDU1NGNiZmYu LmU1MjdiOTBkZThlYSAxMDA3NTUNCj4gPiA+IC0tLSBhL3Rvb2xzL3Rlc3Rpbmcva3VuaXQva3Vu aXRfdG9vbF90ZXN0LnB5DQo+ID4gPiArKysgYi90b29scy90ZXN0aW5nL2t1bml0L2t1bml0X3Rv b2xfdGVzdC5weQ0KPiA+ID4gQEAgLTEwNiwxMCArMTA2LDEwIEBAIGNsYXNzIEtVbml0UGFyc2Vy VGVzdCh1bml0dGVzdC5UZXN0Q2FzZSk6DQo+ID4gPiAgICAgICAgICAgICAgICAgd2l0aCBvcGVu KGxvZ19wYXRoKSBhcyBmaWxlOg0KPiA+ID4gICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0 ID0ga3VuaXRfcGFyc2VyLmV4dHJhY3RfdGFwX2xpbmVzKGZpbGUucmVhZGxpbmVzKCkpDQo+ID4g PiAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRDb250YWlucygnVEFQIHZlcnNpb24gMTQnLCBy ZXN1bHQpDQo+ID4gPiAtICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRDb250YWlucygnICAgIyBT dWJ0ZXN0OiBleGFtcGxlJywgcmVzdWx0KQ0KPiA+ID4gLSAgICAgICAgICAgICAgIHNlbGYuYXNz ZXJ0Q29udGFpbnMoJyAgIDEuLjInLCByZXN1bHQpDQo+ID4gPiAtICAgICAgICAgICAgICAgc2Vs Zi5hc3NlcnRDb250YWlucygnICAgb2sgMSAtIGV4YW1wbGVfc2ltcGxlX3Rlc3QnLCByZXN1bHQp DQo+ID4gPiAtICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRDb250YWlucygnICAgb2sgMiAtIGV4 YW1wbGVfbW9ja190ZXN0JywgcmVzdWx0KQ0KPiA+ID4gKyAgICAgICAgICAgICAgIHNlbGYuYXNz ZXJ0Q29udGFpbnMoJyMgU3VidGVzdDogZXhhbXBsZScsIHJlc3VsdCkNCj4gPiA+ICsgICAgICAg ICAgICAgICBzZWxmLmFzc2VydENvbnRhaW5zKCcxLi4yJywgcmVzdWx0KQ0KPiA+ID4gKyAgICAg ICAgICAgICAgIHNlbGYuYXNzZXJ0Q29udGFpbnMoJ29rIDEgLSBleGFtcGxlX3NpbXBsZV90ZXN0 JywgcmVzdWx0KQ0KPiA+ID4gKyAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0Q29udGFpbnMoJ29r IDIgLSBleGFtcGxlX21vY2tfdGVzdCcsIHJlc3VsdCkNCj4gPiA+ICAgICAgICAgICAgICAgICBz ZWxmLmFzc2VydENvbnRhaW5zKCdvayAxIC0gZXhhbXBsZScsIHJlc3VsdCkNCj4gPiA+DQo+ID4g PiAgICAgICAgIGRlZiB0ZXN0X291dHB1dF93aXRoX3ByZWZpeF9pc29sYXRlZF9jb3JyZWN0bHko c2VsZik6DQo+ID4gPiBAQCAtMTE3LDI4ICsxMTcsMjggQEAgY2xhc3MgS1VuaXRQYXJzZXJUZXN0 KHVuaXR0ZXN0LlRlc3RDYXNlKToNCj4gPiA+ICAgICAgICAgICAgICAgICB3aXRoIG9wZW4obG9n X3BhdGgpIGFzIGZpbGU6DQo+ID4gPiAgICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQgPSBr dW5pdF9wYXJzZXIuZXh0cmFjdF90YXBfbGluZXMoZmlsZS5yZWFkbGluZXMoKSkNCj4gPiA+ICAg ICAgICAgICAgICAgICBzZWxmLmFzc2VydENvbnRhaW5zKCdUQVAgdmVyc2lvbiAxNCcsIHJlc3Vs dCkNCj4gPiA+IC0gICAgICAgICAgICAgICBzZWxmLmFzc2VydENvbnRhaW5zKCcgICAjIFN1YnRl c3Q6IGt1bml0LXJlc291cmNlLXRlc3QnLCByZXN1bHQpDQo+ID4gPiAtICAgICAgICAgICAgICAg c2VsZi5hc3NlcnRDb250YWlucygnICAgMS4uNScsIHJlc3VsdCkNCj4gPiA+IC0gICAgICAgICAg ICAgICBzZWxmLmFzc2VydENvbnRhaW5zKCcgICBvayAxIC0ga3VuaXRfcmVzb3VyY2VfdGVzdF9p bml0X3Jlc291cmNlcycsIHJlc3VsdCkNCj4gPiA+IC0gICAgICAgICAgICAgICBzZWxmLmFzc2Vy dENvbnRhaW5zKCcgICBvayAyIC0ga3VuaXRfcmVzb3VyY2VfdGVzdF9hbGxvY19yZXNvdXJjZScs IHJlc3VsdCkNCj4gPiA+IC0gICAgICAgICAgICAgICBzZWxmLmFzc2VydENvbnRhaW5zKCcgICBv ayAzIC0ga3VuaXRfcmVzb3VyY2VfdGVzdF9kZXN0cm95X3Jlc291cmNlJywgcmVzdWx0KQ0KPiA+ ID4gLSAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0Q29udGFpbnMoJyBmb28gYmFyICAgIycsIHJl c3VsdCkNCj4gPiA+IC0gICAgICAgICAgICAgICBzZWxmLmFzc2VydENvbnRhaW5zKCcgICBvayA0 IC0ga3VuaXRfcmVzb3VyY2VfdGVzdF9jbGVhbnVwX3Jlc291cmNlcycsIHJlc3VsdCkNCj4gPiA+ IC0gICAgICAgICAgICAgICBzZWxmLmFzc2VydENvbnRhaW5zKCcgICBvayA1IC0ga3VuaXRfcmVz b3VyY2VfdGVzdF9wcm9wZXJfZnJlZV9vcmRlcmluZycsIHJlc3VsdCkNCj4gPiA+ICsgICAgICAg ICAgICAgICBzZWxmLmFzc2VydENvbnRhaW5zKCcjIFN1YnRlc3Q6IGt1bml0LXJlc291cmNlLXRl c3QnLCByZXN1bHQpDQo+ID4gPiArICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRDb250YWlucygn MS4uNScsIHJlc3VsdCkNCj4gPiA+ICsgICAgICAgICAgICAgICBzZWxmLmFzc2VydENvbnRhaW5z KCdvayAxIC0ga3VuaXRfcmVzb3VyY2VfdGVzdF9pbml0X3Jlc291cmNlcycsIHJlc3VsdCkNCj4g PiA+ICsgICAgICAgICAgICAgICBzZWxmLmFzc2VydENvbnRhaW5zKCdvayAyIC0ga3VuaXRfcmVz b3VyY2VfdGVzdF9hbGxvY19yZXNvdXJjZScsIHJlc3VsdCkNCj4gPiA+ICsgICAgICAgICAgICAg ICBzZWxmLmFzc2VydENvbnRhaW5zKCdvayAzIC0ga3VuaXRfcmVzb3VyY2VfdGVzdF9kZXN0cm95 X3Jlc291cmNlJywgcmVzdWx0KQ0KPiA+ID4gKyAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0Q29u dGFpbnMoJ2ZvbyBiYXIgICAgIycsIHJlc3VsdCkNCj4gPiA+ICsgICAgICAgICAgICAgICBzZWxm LmFzc2VydENvbnRhaW5zKCdvayA0IC0ga3VuaXRfcmVzb3VyY2VfdGVzdF9jbGVhbnVwX3Jlc291 cmNlcycsIHJlc3VsdCkNCj4gPiA+ICsgICAgICAgICAgICAgICBzZWxmLmFzc2VydENvbnRhaW5z KCdvayA1IC0ga3VuaXRfcmVzb3VyY2VfdGVzdF9wcm9wZXJfZnJlZV9vcmRlcmluZycsIHJlc3Vs dCkNCj4gPiA+ICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydENvbnRhaW5zKCdvayAxIC0ga3Vu aXQtcmVzb3VyY2UtdGVzdCcsIHJlc3VsdCkNCj4gPiA+IC0gICAgICAgICAgICAgICBzZWxmLmFz c2VydENvbnRhaW5zKCcgZm9vIGJhciAgICMgbm9uLWt1bml0IG91dHB1dCcsIHJlc3VsdCkNCj4g PiA+IC0gICAgICAgICAgICAgICBzZWxmLmFzc2VydENvbnRhaW5zKCcgICAjIFN1YnRlc3Q6IGt1 bml0LXRyeS1jYXRjaC10ZXN0JywgcmVzdWx0KQ0KPiA+ID4gLSAgICAgICAgICAgICAgIHNlbGYu YXNzZXJ0Q29udGFpbnMoJyAgIDEuLjInLCByZXN1bHQpDQo+ID4gPiAtICAgICAgICAgICAgICAg c2VsZi5hc3NlcnRDb250YWlucygnICAgb2sgMSAtIGt1bml0X3Rlc3RfdHJ5X2NhdGNoX3N1Y2Nl c3NmdWxfdHJ5X25vX2NhdGNoJywNCj4gPiA+ICsgICAgICAgICAgICAgICBzZWxmLmFzc2VydENv bnRhaW5zKCdmb28gYmFyICAgICMgbm9uLWt1bml0IG91dHB1dCcsIHJlc3VsdCkNCj4gPiA+ICsg ICAgICAgICAgICAgICBzZWxmLmFzc2VydENvbnRhaW5zKCcjIFN1YnRlc3Q6IGt1bml0LXRyeS1j YXRjaC10ZXN0JywgcmVzdWx0KQ0KPiA+ID4gKyAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0Q29u dGFpbnMoJzEuLjInLCByZXN1bHQpDQo+ID4gPiArICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRD b250YWlucygnb2sgMSAtIGt1bml0X3Rlc3RfdHJ5X2NhdGNoX3N1Y2Nlc3NmdWxfdHJ5X25vX2Nh dGNoJywNCj4gPiA+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdCkN Cj4gPiA+IC0gICAgICAgICAgICAgICBzZWxmLmFzc2VydENvbnRhaW5zKCcgICBvayAyIC0ga3Vu aXRfdGVzdF90cnlfY2F0Y2hfdW5zdWNjZXNzZnVsX3RyeV9kb2VzX2NhdGNoJywNCj4gPiA+ICsg ICAgICAgICAgICAgICBzZWxmLmFzc2VydENvbnRhaW5zKCdvayAyIC0ga3VuaXRfdGVzdF90cnlf Y2F0Y2hfdW5zdWNjZXNzZnVsX3RyeV9kb2VzX2NhdGNoJywNCj4gPiA+ICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdCkNCj4gPiA+ICAgICAgICAgICAgICAgICBzZWxm LmFzc2VydENvbnRhaW5zKCdvayAyIC0ga3VuaXQtdHJ5LWNhdGNoLXRlc3QnLCByZXN1bHQpDQo+ ID4gPiAtICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRDb250YWlucygnICAgIyBTdWJ0ZXN0OiBz dHJpbmctc3RyZWFtLXRlc3QnLCByZXN1bHQpDQo+ID4gPiAtICAgICAgICAgICAgICAgc2VsZi5h c3NlcnRDb250YWlucygnICAgMS4uMycsIHJlc3VsdCkNCj4gPiA+IC0gICAgICAgICAgICAgICBz ZWxmLmFzc2VydENvbnRhaW5zKCcgICBvayAxIC0gc3RyaW5nX3N0cmVhbV90ZXN0X2VtcHR5X29u X2NyZWF0aW9uJywgcmVzdWx0KQ0KPiA+ID4gLSAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0Q29u dGFpbnMoJyAgIG9rIDIgLSBzdHJpbmdfc3RyZWFtX3Rlc3Rfbm90X2VtcHR5X2FmdGVyX2FkZCcs IHJlc3VsdCkNCj4gPiA+IC0gICAgICAgICAgICAgICBzZWxmLmFzc2VydENvbnRhaW5zKCcgICBv ayAzIC0gc3RyaW5nX3N0cmVhbV90ZXN0X2dldF9zdHJpbmcnLCByZXN1bHQpDQo+ID4gPiArICAg ICAgICAgICAgICAgc2VsZi5hc3NlcnRDb250YWlucygnIyBTdWJ0ZXN0OiBzdHJpbmctc3RyZWFt LXRlc3QnLCByZXN1bHQpDQo+ID4gPiArICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRDb250YWlu cygnMS4uMycsIHJlc3VsdCkNCj4gPiA+ICsgICAgICAgICAgICAgICBzZWxmLmFzc2VydENvbnRh aW5zKCdvayAxIC0gc3RyaW5nX3N0cmVhbV90ZXN0X2VtcHR5X29uX2NyZWF0aW9uJywgcmVzdWx0 KQ0KPiA+ID4gKyAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0Q29udGFpbnMoJ29rIDIgLSBzdHJp bmdfc3RyZWFtX3Rlc3Rfbm90X2VtcHR5X2FmdGVyX2FkZCcsIHJlc3VsdCkNCj4gPiA+ICsgICAg ICAgICAgICAgICBzZWxmLmFzc2VydENvbnRhaW5zKCdvayAzIC0gc3RyaW5nX3N0cmVhbV90ZXN0 X2dldF9zdHJpbmcnLCByZXN1bHQpDQo+ID4gPiAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRD b250YWlucygnb2sgMyAtIHN0cmluZy1zdHJlYW0tdGVzdCcsIHJlc3VsdCkNCj4gPiA+DQo+ID4g PiAgICAgICAgIGRlZiB0ZXN0X3BhcnNlX3N1Y2Nlc3NmdWxfdGVzdF9sb2coc2VsZik6DQo+ID4g PiBAQCAtMTQ4LDYgKzE0OCwxMyBAQCBjbGFzcyBLVW5pdFBhcnNlclRlc3QodW5pdHRlc3QuVGVz dENhc2UpOg0KPiA+ID4gICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoDQo+ID4gPiAg ICAgICAgICAgICAgICAgICAgICAgICBrdW5pdF9wYXJzZXIuVGVzdFN0YXR1cy5TVUNDRVNTLA0K PiA+ID4gICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0LnN0YXR1cykNCj4gPiA+ICsgICAg ICAgZGVmIHRlc3RfcGFyc2Vfc3VjY2Vzc2Z1bF9uZXN0ZWRfdGVzdHNfbG9nKHNlbGYpOg0KPiA+ ID4gKyAgICAgICAgICAgICAgIGFsbF9wYXNzZWRfbG9nID0gdGVzdF9kYXRhX3BhdGgoJ3Rlc3Rf aXNfdGVzdF9wYXNzZWQtYWxsX3Bhc3NlZF9uZXN0ZWQubG9nJykNCj4gPiA+ICsgICAgICAgICAg ICAgICB3aXRoIG9wZW4oYWxsX3Bhc3NlZF9sb2cpIGFzIGZpbGU6DQo+ID4gPiArICAgICAgICAg ICAgICAgICAgICAgICByZXN1bHQgPSBrdW5pdF9wYXJzZXIucGFyc2VfcnVuX3Rlc3RzKGZpbGUu cmVhZGxpbmVzKCkpDQo+ID4gPiArICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgNCj4g PiA+ICsgICAgICAgICAgICAgICAgICAgICAgIGt1bml0X3BhcnNlci5UZXN0U3RhdHVzLlNVQ0NF U1MsDQo+ID4gPiArICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQuc3RhdHVzKQ0KPiA+ID4N Cj4gPiA+ICAgICAgICAgZGVmIHRlc3RfcGFyc2VfZmFpbGVkX3Rlc3RfbG9nKHNlbGYpOg0KPiA+ ID4gICAgICAgICAgICAgICAgIGZhaWxlZF9sb2cgPSB0ZXN0X2RhdGFfcGF0aCgndGVzdF9pc190 ZXN0X3Bhc3NlZC1mYWlsdXJlLmxvZycpDQo+ID4gPiBAQCAtMTYyLDE3ICsxNjksMzEgQEAgY2xh c3MgS1VuaXRQYXJzZXJUZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToNCj4gPiA+ICAgICAgICAgICAg ICAgICB3aXRoIG9wZW4oZW1wdHlfbG9nKSBhcyBmaWxlOg0KPiA+ID4gICAgICAgICAgICAgICAg ICAgICAgICAgcmVzdWx0ID0ga3VuaXRfcGFyc2VyLnBhcnNlX3J1bl90ZXN0cygNCj4gPiA+ICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAga3VuaXRfcGFyc2VyLmV4dHJhY3RfdGFwX2xp bmVzKGZpbGUucmVhZGxpbmVzKCkpKQ0KPiA+ID4gLSAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0 RXF1YWwoMCwgbGVuKHJlc3VsdC5zdWl0ZXMpKQ0KPiA+ID4gKyAgICAgICAgICAgICAgIHNlbGYu YXNzZXJ0RXF1YWwoMCwgbGVuKHJlc3VsdC50ZXN0LnN1YnRlc3RzKSkNCj4gPiA+ICAgICAgICAg ICAgICAgICBzZWxmLmFzc2VydEVxdWFsKA0KPiA+ID4gICAgICAgICAgICAgICAgICAgICAgICAg a3VuaXRfcGFyc2VyLlRlc3RTdGF0dXMuRkFJTFVSRV9UT19QQVJTRV9URVNUUywNCj4gPiA+ICAg ICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdC5zdGF0dXMpDQo+ID4gPg0KPiA+ID4gKyAgICAg ICBkZWYgdGVzdF9taXNzaW5nX3Rlc3RfcGxhbihzZWxmKToNCj4gPiA+ICsgICAgICAgICAgICAg ICBtaXNzaW5nX3BsYW5fbG9nID0gdGVzdF9kYXRhX3BhdGgoJ3Rlc3RfaXNfdGVzdF9wYXNzZWQt Jw0KPiA+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgJ21pc3NpbmdfcGxhbi5sb2cnKQ0KPiA+ ID4gKyAgICAgICAgICAgICAgIHdpdGggb3BlbihtaXNzaW5nX3BsYW5fbG9nKSBhcyBmaWxlOg0K PiA+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0ID0ga3VuaXRfcGFyc2VyLnBhcnNl X3J1bl90ZXN0cygNCj4gPiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAga3VuaXRf cGFyc2VyLmV4dHJhY3RfdGFwX2xpbmVzKA0KPiA+ID4gKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBmaWxlLnJlYWRsaW5lcygpKSkNCj4gPiA+ICsgICAgICAgICAgICAgICBzZWxmLmFz c2VydEVxdWFsKDIsIHJlc3VsdC50ZXN0LmNvdW50cy5lcnJvcnMpDQo+ID4gPiArICAgICAgICAg ICAgICAgc2VsZi5hc3NlcnRFcXVhbCgNCj4gPiA+ICsgICAgICAgICAgICAgICAgICAgICAgIGt1 bml0X3BhcnNlci5UZXN0U3RhdHVzLlNVQ0NFU1MsDQo+ID4gPiArICAgICAgICAgICAgICAgICAg ICAgICByZXN1bHQuc3RhdHVzKQ0KPiA+ID4gKw0KPiA+ID4gICAgICAgICBkZWYgdGVzdF9ub190 ZXN0cyhzZWxmKToNCj4gPiA+IC0gICAgICAgICAgICAgICBlbXB0eV9sb2cgPSB0ZXN0X2RhdGFf cGF0aCgndGVzdF9pc190ZXN0X3Bhc3NlZC1ub190ZXN0c19ydW5fd2l0aF9oZWFkZXIubG9nJykN Cj4gPiA+IC0gICAgICAgICAgICAgICB3aXRoIG9wZW4oZW1wdHlfbG9nKSBhcyBmaWxlOg0KPiA+ ID4gKyAgICAgICAgICAgICAgIGhlYWRlcl9sb2cgPSB0ZXN0X2RhdGFfcGF0aCgndGVzdF9pc190 ZXN0X3Bhc3NlZC0nDQo+ID4gPiArICAgICAgICAgICAgICAgICAgICAgICAnbm9fdGVzdHNfcnVu X3dpdGhfaGVhZGVyLmxvZycpDQo+ID4gPiArICAgICAgICAgICAgICAgd2l0aCBvcGVuKGhlYWRl cl9sb2cpIGFzIGZpbGU6DQo+ID4gPiAgICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQgPSBr dW5pdF9wYXJzZXIucGFyc2VfcnVuX3Rlc3RzKA0KPiA+ID4gLSAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBrdW5pdF9wYXJzZXIuZXh0cmFjdF90YXBfbGluZXMoZmlsZS5yZWFkbGluZXMo KSkpDQo+ID4gPiAtICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgwLCBsZW4ocmVzdWx0 LnN1aXRlcykpDQo+ID4gPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGt1bml0X3Bh cnNlci5leHRyYWN0X3RhcF9saW5lcygNCj4gPiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgZmlsZS5yZWFkbGluZXMoKSkpDQo+ID4gPiArICAgICAgICAgICAgICAgc2VsZi5hc3Nl cnRFcXVhbCgwLCBsZW4ocmVzdWx0LnRlc3Quc3VidGVzdHMpKQ0KPiA+ID4gICAgICAgICAgICAg ICAgIHNlbGYuYXNzZXJ0RXF1YWwoDQo+ID4gPiAgICAgICAgICAgICAgICAgICAgICAgICBrdW5p dF9wYXJzZXIuVGVzdFN0YXR1cy5OT19URVNUUywNCj4gPiA+ICAgICAgICAgICAgICAgICAgICAg ICAgIHJlc3VsdC5zdGF0dXMpDQo+ID4gPiBAQCAtMTgyLDE1ICsyMDMsMTcgQEAgY2xhc3MgS1Vu aXRQYXJzZXJUZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToNCj4gPiA+ICAgICAgICAgICAgICAgICBw cmludF9tb2NrID0gbW9jay5wYXRjaCgnYnVpbHRpbnMucHJpbnQnKS5zdGFydCgpDQo+ID4gPiAg ICAgICAgICAgICAgICAgd2l0aCBvcGVuKGNyYXNoX2xvZykgYXMgZmlsZToNCj4gPiA+ICAgICAg ICAgICAgICAgICAgICAgICAgIHJlc3VsdCA9IGt1bml0X3BhcnNlci5wYXJzZV9ydW5fdGVzdHMo DQo+ID4gPiAtICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGt1bml0X3BhcnNlci5leHRy YWN0X3RhcF9saW5lcyhmaWxlLnJlYWRsaW5lcygpKSkNCj4gPiA+IC0gICAgICAgICAgICAgICBw cmludF9tb2NrLmFzc2VydF9hbnlfY2FsbChTdHJDb250YWlucygnY291bGQgbm90IHBhcnNlIHRl c3QgcmVzdWx0cyEnKSkNCj4gPiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAga3Vu aXRfcGFyc2VyLmV4dHJhY3RfdGFwX2xpbmVzKA0KPiA+ID4gKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBmaWxlLnJlYWRsaW5lcygpKSkNCj4gPiA+ICsgICAgICAgICAgICAgICBwcmlu dF9tb2NrLmFzc2VydF9hbnlfY2FsbChTdHJDb250YWlucygnaW52YWxpZCBLVEFQIGlucHV0IScp KQ0KPiA+ID4gICAgICAgICAgICAgICAgIHByaW50X21vY2suc3RvcCgpDQo+ID4gPiAgICAgICAg ICAgICAgICAgZmlsZS5jbG9zZSgpDQo+ID4gPg0KPiA+ID4gICAgICAgICBkZWYgdGVzdF9jcmFz aGVkX3Rlc3Qoc2VsZik6DQo+ID4gPiAgICAgICAgICAgICAgICAgY3Jhc2hlZF9sb2cgPSB0ZXN0 X2RhdGFfcGF0aCgndGVzdF9pc190ZXN0X3Bhc3NlZC1jcmFzaC5sb2cnKQ0KPiA+ID4gICAgICAg ICAgICAgICAgIHdpdGggb3BlbihjcmFzaGVkX2xvZykgYXMgZmlsZToNCj4gPiA+IC0gICAgICAg ICAgICAgICAgICAgICAgIHJlc3VsdCA9IGt1bml0X3BhcnNlci5wYXJzZV9ydW5fdGVzdHMoZmls ZS5yZWFkbGluZXMoKSkNCj4gPiA+ICsgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdCA9IGt1 bml0X3BhcnNlci5wYXJzZV9ydW5fdGVzdHMoDQo+ID4gPiArICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIGZpbGUucmVhZGxpbmVzKCkpDQo+ID4gPiAgICAgICAgICAgICAgICAgc2VsZi5h c3NlcnRFcXVhbCgNCj4gPiA+ICAgICAgICAgICAgICAgICAgICAgICAgIGt1bml0X3BhcnNlci5U ZXN0U3RhdHVzLlRFU1RfQ1JBU0hFRCwNCj4gPiA+ICAgICAgICAgICAgICAgICAgICAgICAgIHJl c3VsdC5zdGF0dXMpDQo+ID4gPiBAQCAtMjE2LDYgKzIzOSwyMyBAQCBjbGFzcyBLVW5pdFBhcnNl clRlc3QodW5pdHRlc3QuVGVzdENhc2UpOg0KPiA+ID4gICAgICAgICAgICAgICAgICAgICAgICAg cmVzdWx0LnN0YXR1cykNCj4gPiA+ICAgICAgICAgICAgICAgICBmaWxlLmNsb3NlKCkNCj4gPiA+ DQo+ID4gPiArICAgICAgIGRlZiB0ZXN0X2lnbm9yZXNfaHlwaGVuKHNlbGYpOg0KPiA+ID4gKyAg ICAgICAgICAgICAgIGh5cGhlbl9sb2cgPSB0ZXN0X2RhdGFfcGF0aCgndGVzdF9zdHJpcF9oeXBo ZW4ubG9nJykNCj4gPiA+ICsgICAgICAgICAgICAgICBmaWxlID0gb3BlbihoeXBoZW5fbG9nKQ0K PiA+ID4gKyAgICAgICAgICAgICAgIHJlc3VsdCA9IGt1bml0X3BhcnNlci5wYXJzZV9ydW5fdGVz dHMoZmlsZS5yZWFkbGluZXMoKSkNCj4gPiA+ICsNCj4gPiA+ICsgICAgICAgICAgICAgICAjIEEg c2tpcHBlZCB0ZXN0IGRvZXMgbm90IGZhaWwgdGhlIHdob2xlIHN1aXRlLg0KPiA+ID4gKyAgICAg ICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoDQo+ID4gPiArICAgICAgICAgICAgICAgICAgICAg ICBrdW5pdF9wYXJzZXIuVGVzdFN0YXR1cy5TVUNDRVNTLA0KPiA+ID4gKyAgICAgICAgICAgICAg ICAgICAgICAgcmVzdWx0LnN0YXR1cykNCj4gPiA+ICsgICAgICAgICAgICAgICBzZWxmLmFzc2Vy dEVxdWFsKA0KPiA+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgInN5c2N0bF90ZXN0IiwNCj4g PiA+ICsgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdC50ZXN0LnN1YnRlc3RzWzBdLm5hbWUp DQo+ID4gPiArICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgNCj4gPiA+ICsgICAgICAg ICAgICAgICAgICAgICAgICJleGFtcGxlIiwNCj4gPiA+ICsgICAgICAgICAgICAgICAgICAgICAg IHJlc3VsdC50ZXN0LnN1YnRlc3RzWzFdLm5hbWUpDQo+ID4gPiArICAgICAgICAgICAgICAgZmls ZS5jbG9zZSgpDQo+ID4gPiArDQo+ID4gPg0KPiA+ID4gICAgICAgICBkZWYgdGVzdF9pZ25vcmVz X3ByZWZpeF9wcmludGtfdGltZShzZWxmKToNCj4gPiA+ICAgICAgICAgICAgICAgICBwcmVmaXhf bG9nID0gdGVzdF9kYXRhX3BhdGgoJ3Rlc3RfY29uZmlnX3ByaW50a190aW1lLmxvZycpDQo+ID4g PiBAQCAtMjI0LDcgKzI2NCw3IEBAIGNsYXNzIEtVbml0UGFyc2VyVGVzdCh1bml0dGVzdC5UZXN0 Q2FzZSk6DQo+ID4gPiAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKA0K PiA+ID4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBrdW5pdF9wYXJzZXIuVGVzdFN0 YXR1cy5TVUNDRVNTLA0KPiA+ID4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXN1 bHQuc3RhdHVzKQ0KPiA+ID4gLSAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVh bCgna3VuaXQtcmVzb3VyY2UtdGVzdCcsIHJlc3VsdC5zdWl0ZXNbMF0ubmFtZSkNCj4gPiA+ICsg ICAgICAgICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoJ2t1bml0LXJlc291cmNlLXRl c3QnLCByZXN1bHQudGVzdC5zdWJ0ZXN0c1swXS5uYW1lKQ0KPiA+ID4NCj4gPiA+ICAgICAgICAg ZGVmIHRlc3RfaWdub3Jlc19tdWx0aXBsZV9wcmVmaXhlcyhzZWxmKToNCj4gPiA+ICAgICAgICAg ICAgICAgICBwcmVmaXhfbG9nID0gdGVzdF9kYXRhX3BhdGgoJ3Rlc3RfbXVsdGlwbGVfcHJlZml4 ZXMubG9nJykNCj4gPiA+IEBAIC0yMzMsNyArMjczLDcgQEAgY2xhc3MgS1VuaXRQYXJzZXJUZXN0 KHVuaXR0ZXN0LlRlc3RDYXNlKToNCj4gPiA+ICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYu YXNzZXJ0RXF1YWwoDQo+ID4gPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGt1bml0 X3BhcnNlci5UZXN0U3RhdHVzLlNVQ0NFU1MsDQo+ID4gPiAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIHJlc3VsdC5zdGF0dXMpDQo+ID4gPiAtICAgICAgICAgICAgICAgICAgICAgICBz ZWxmLmFzc2VydEVxdWFsKCdrdW5pdC1yZXNvdXJjZS10ZXN0JywgcmVzdWx0LnN1aXRlc1swXS5u YW1lKQ0KPiA+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgna3Vu aXQtcmVzb3VyY2UtdGVzdCcsIHJlc3VsdC50ZXN0LnN1YnRlc3RzWzBdLm5hbWUpDQo+ID4gPg0K PiA+ID4gICAgICAgICBkZWYgdGVzdF9wcmVmaXhfbWl4ZWRfa2VybmVsX291dHB1dChzZWxmKToN Cj4gPiA+ICAgICAgICAgICAgICAgICBtaXhlZF9wcmVmaXhfbG9nID0gdGVzdF9kYXRhX3BhdGgo J3Rlc3RfaW50ZXJydXB0ZWRfdGFwX291dHB1dC5sb2cnKQ0KPiA+ID4gQEAgLTI0Miw3ICsyODIs NyBAQCBjbGFzcyBLVW5pdFBhcnNlclRlc3QodW5pdHRlc3QuVGVzdENhc2UpOg0KPiA+ID4gICAg ICAgICAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgNCj4gPiA+ICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAga3VuaXRfcGFyc2VyLlRlc3RTdGF0dXMuU1VDQ0VTUywNCj4g PiA+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0LnN0YXR1cykNCj4gPiA+ IC0gICAgICAgICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoJ2t1bml0LXJlc291cmNl LXRlc3QnLCByZXN1bHQuc3VpdGVzWzBdLm5hbWUpDQo+ID4gPiArICAgICAgICAgICAgICAgICAg ICAgICBzZWxmLmFzc2VydEVxdWFsKCdrdW5pdC1yZXNvdXJjZS10ZXN0JywgcmVzdWx0LnRlc3Qu c3VidGVzdHNbMF0ubmFtZSkNCj4gPiA+DQo+ID4gPiAgICAgICAgIGRlZiB0ZXN0X3ByZWZpeF9w b3VuZHNpZ24oc2VsZik6DQo+ID4gPiAgICAgICAgICAgICAgICAgcG91bmRfbG9nID0gdGVzdF9k YXRhX3BhdGgoJ3Rlc3RfcG91bmRfc2lnbi5sb2cnKQ0KPiA+ID4gQEAgLTI1MSwxNiArMjkxLDE2 IEBAIGNsYXNzIEtVbml0UGFyc2VyVGVzdCh1bml0dGVzdC5UZXN0Q2FzZSk6DQo+ID4gPiAgICAg ICAgICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKA0KPiA+ID4gICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBrdW5pdF9wYXJzZXIuVGVzdFN0YXR1cy5TVUNDRVNTLA0KPiA+ ID4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQuc3RhdHVzKQ0KPiA+ID4g LSAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgna3VuaXQtcmVzb3VyY2Ut dGVzdCcsIHJlc3VsdC5zdWl0ZXNbMF0ubmFtZSkNCj4gPiA+ICsgICAgICAgICAgICAgICAgICAg ICAgIHNlbGYuYXNzZXJ0RXF1YWwoJ2t1bml0LXJlc291cmNlLXRlc3QnLCByZXN1bHQudGVzdC5z dWJ0ZXN0c1swXS5uYW1lKQ0KPiA+ID4NCj4gPiA+ICAgICAgICAgZGVmIHRlc3Rfa2VybmVsX3Bh bmljX2VuZChzZWxmKToNCj4gPiA+ICAgICAgICAgICAgICAgICBwYW5pY19sb2cgPSB0ZXN0X2Rh dGFfcGF0aCgndGVzdF9rZXJuZWxfcGFuaWNfaW50ZXJydXB0LmxvZycpDQo+ID4gPiAgICAgICAg ICAgICAgICAgd2l0aCBvcGVuKHBhbmljX2xvZykgYXMgZmlsZToNCj4gPiA+ICAgICAgICAgICAg ICAgICAgICAgICAgIHJlc3VsdCA9IGt1bml0X3BhcnNlci5wYXJzZV9ydW5fdGVzdHMoZmlsZS5y ZWFkbGluZXMoKSkNCj4gPiA+ICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1 YWwoDQo+ID4gPiAtICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGt1bml0X3BhcnNlci5U ZXN0U3RhdHVzLlRFU1RfQ1JBU0hFRCwNCj4gPiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAga3VuaXRfcGFyc2VyLlRlc3RTdGF0dXMuU1VDQ0VTUywNCj4gPiA+ICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgcmVzdWx0LnN0YXR1cykNCj4gPiA+IC0gICAgICAgICAgICAg ICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoJ2t1bml0LXJlc291cmNlLXRlc3QnLCByZXN1bHQu c3VpdGVzWzBdLm5hbWUpDQo+ID4gPiArICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmFzc2Vy dEVxdWFsKCdrdW5pdC1yZXNvdXJjZS10ZXN0JywgcmVzdWx0LnRlc3Quc3VidGVzdHNbMF0ubmFt ZSkNCj4gPiA+DQo+ID4gPiAgICAgICAgIGRlZiB0ZXN0X3BvdW5kX25vX3ByZWZpeChzZWxmKToN Cj4gPiA+ICAgICAgICAgICAgICAgICBwb3VuZF9sb2cgPSB0ZXN0X2RhdGFfcGF0aCgndGVzdF9w b3VuZF9ub19wcmVmaXgubG9nJykNCj4gPiA+IEBAIC0yNjksNyArMzA5LDcgQEAgY2xhc3MgS1Vu aXRQYXJzZXJUZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToNCj4gPiA+ICAgICAgICAgICAgICAgICAg ICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoDQo+ID4gPiAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIGt1bml0X3BhcnNlci5UZXN0U3RhdHVzLlNVQ0NFU1MsDQo+ID4gPiAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdC5zdGF0dXMpDQo+ID4gPiAtICAgICAgICAgICAg ICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCdrdW5pdC1yZXNvdXJjZS10ZXN0JywgcmVzdWx0 LnN1aXRlc1swXS5uYW1lKQ0KPiA+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5hc3Nl cnRFcXVhbCgna3VuaXQtcmVzb3VyY2UtdGVzdCcsIHJlc3VsdC50ZXN0LnN1YnRlc3RzWzBdLm5h bWUpDQo+ID4gPg0KPiA+ID4gIGNsYXNzIExpbnV4U291cmNlVHJlZVRlc3QodW5pdHRlc3QuVGVz dENhc2UpOg0KPiA+ID4NCj4gPiA+IEBAIC0yOTEsNiArMzMxLDE0IEBAIGNsYXNzIExpbnV4U291 cmNlVHJlZVRlc3QodW5pdHRlc3QuVGVzdENhc2UpOg0KPiA+ID4gICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBwYXNzDQo+ID4gPiAgICAgICAgICAgICAgICAgICAgICAgICB0cmVlID0g a3VuaXRfa2VybmVsLkxpbnV4U291cmNlVHJlZSgnJywga3VuaXRjb25maWdfcGF0aD1kaXIpDQo+ ID4gPg0KPiA+ID4gKyAgICAgICBkZWYgdGVzdF9rc2VsZnRlc3RfbmVzdGVkKHNlbGYpOg0KPiA+ ID4gKyAgICAgICAgICAgICAgIGtzZWxmdGVzdF9sb2cgPSB0ZXN0X2RhdGFfcGF0aCgndGVzdF9p c190ZXN0X3Bhc3NlZC1rc2VsZnRlc3QubG9nJykNCj4gPiA+ICsgICAgICAgICAgICAgICB3aXRo IG9wZW4oa3NlbGZ0ZXN0X2xvZykgYXMgZmlsZToNCj4gPiA+ICsgICAgICAgICAgICAgICAgICAg ICAgIHJlc3VsdCA9IGt1bml0X3BhcnNlci5wYXJzZV9ydW5fdGVzdHMoZmlsZS5yZWFkbGluZXMo KSkNCj4gPiA+ICsgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoDQo+ID4g PiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGt1bml0X3BhcnNlci5UZXN0U3RhdHVz LlNVQ0NFU1MsDQo+ID4gPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdC5z dGF0dXMpDQo+ID4gPiArDQo+ID4gPiAgICAgICAgICMgVE9ETzogYWRkIG1vcmUgdGVzdCBjYXNl cy4NCj4gPiA+DQo+ID4gPg0KPiA+ID4gQEAgLTMyMiw2ICszNzAsMTIgQEAgY2xhc3MgS1VuaXRK c29uVGVzdCh1bml0dGVzdC5UZXN0Q2FzZSk6DQo+ID4gPiAgICAgICAgICAgICAgICAgcmVzdWx0 ID0gc2VsZi5fanNvbl9mb3IoJ3Rlc3RfaXNfdGVzdF9wYXNzZWQtbm9fdGVzdHNfcnVuX3dpdGhf aGVhZGVyLmxvZycpDQo+ID4gPiAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgwLCBs ZW4ocmVzdWx0WydzdWJfZ3JvdXBzJ10pKQ0KPiA+ID4NCj4gPiA+ICsgICAgICAgZGVmIHRlc3Rf bmVzdGVkX2pzb24oc2VsZik6DQo+ID4gPiArICAgICAgICAgICAgICAgcmVzdWx0ID0gc2VsZi5f anNvbl9mb3IoJ3Rlc3RfaXNfdGVzdF9wYXNzZWQtYWxsX3Bhc3NlZF9uZXN0ZWQubG9nJykNCj4g PiA+ICsgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKA0KPiA+ID4gKyAgICAgICAgICAg ICAgICAgICAgICAgeyduYW1lJzogJ2V4YW1wbGVfc2ltcGxlX3Rlc3QnLCAnc3RhdHVzJzogJ1BB U1MnfSwNCj4gPiA+ICsgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdFsic3ViX2dyb3VwcyJd WzBdWyJzdWJfZ3JvdXBzIl1bMF1bInRlc3RfY2FzZXMiXVswXSkNCj4gPiA+ICsNCj4gPiA+ICBj bGFzcyBTdHJDb250YWlucyhzdHIpOg0KPiA+ID4gICAgICAgICBkZWYgX19lcV9fKHNlbGYsIG90 aGVyKToNCj4gPiA+ICAgICAgICAgICAgICAgICByZXR1cm4gc2VsZiBpbiBvdGhlcg0KPiA+ID4g QEAgLTM4MCw3ICs0MzQsNyBAQCBjbGFzcyBLVW5pdE1haW5UZXN0KHVuaXR0ZXN0LlRlc3RDYXNl KToNCj4gPiA+ICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGUuZXhjZXB0aW9uLmNv ZGUsIDEpDQo+ID4gPiAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLmxpbnV4 X3NvdXJjZV9tb2NrLmJ1aWxkX3JlY29uZmlnLmNhbGxfY291bnQsIDEpDQo+ID4gPiAgICAgICAg ICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLmxpbnV4X3NvdXJjZV9tb2NrLnJ1bl9rZXJu ZWwuY2FsbF9jb3VudCwgMSkNCj4gPiA+IC0gICAgICAgICAgICAgICBzZWxmLnByaW50X21vY2su YXNzZXJ0X2FueV9jYWxsKFN0ckNvbnRhaW5zKCcgMCB0ZXN0cyBydW4nKSkNCj4gPiA+ICsgICAg ICAgICAgICAgICBzZWxmLnByaW50X21vY2suYXNzZXJ0X2FueV9jYWxsKFN0ckNvbnRhaW5zKCdp bnZhbGlkIEtUQVAgaW5wdXQhJykpDQo+ID4gPg0KPiA+ID4gICAgICAgICBkZWYgdGVzdF9leGVj X3Jhd19vdXRwdXQoc2VsZik6DQo+ID4gPiAgICAgICAgICAgICAgICAgc2VsZi5saW51eF9zb3Vy Y2VfbW9jay5ydW5fa2VybmVsID0gbW9jay5Nb2NrKHJldHVybl92YWx1ZT1bXSkNCj4gPiA+IEBA IC0zODgsNyArNDQyLDcgQEAgY2xhc3MgS1VuaXRNYWluVGVzdCh1bml0dGVzdC5UZXN0Q2FzZSk6 DQo+ID4gPiAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLmxpbnV4X3NvdXJj ZV9tb2NrLnJ1bl9rZXJuZWwuY2FsbF9jb3VudCwgMSkNCj4gPiA+ICAgICAgICAgICAgICAgICBm b3IgY2FsbCBpbiBzZWxmLnByaW50X21vY2suY2FsbF9hcmdzX2xpc3Q6DQo+ID4gPiAgICAgICAg ICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydE5vdEVxdWFsKGNhbGwsIG1vY2suY2FsbChTdHJD b250YWlucygnVGVzdGluZyBjb21wbGV0ZS4nKSkpDQo+ID4gPiAtICAgICAgICAgICAgICAgICAg ICAgICBzZWxmLmFzc2VydE5vdEVxdWFsKGNhbGwsIG1vY2suY2FsbChTdHJDb250YWlucygnIDAg dGVzdHMgcnVuJykpKQ0KPiA+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRO b3RFcXVhbChjYWxsLCBtb2NrLmNhbGwoU3RyQ29udGFpbnMoJyAwIHRlc3RzIHJ1biEnKSkpDQo+ ID4gPg0KPiA+ID4gICAgICAgICBkZWYgdGVzdF9ydW5fcmF3X291dHB1dChzZWxmKToNCj4gPiA+ ICAgICAgICAgICAgICAgICBzZWxmLmxpbnV4X3NvdXJjZV9tb2NrLnJ1bl9rZXJuZWwgPSBtb2Nr Lk1vY2socmV0dXJuX3ZhbHVlPVtdKQ0KPiA+ID4gQEAgLTM5Nyw3ICs0NTEsNyBAQCBjbGFzcyBL VW5pdE1haW5UZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToNCj4gPiA+ICAgICAgICAgICAgICAgICBz ZWxmLmFzc2VydEVxdWFsKHNlbGYubGludXhfc291cmNlX21vY2sucnVuX2tlcm5lbC5jYWxsX2Nv dW50LCAxKQ0KPiA+ID4gICAgICAgICAgICAgICAgIGZvciBjYWxsIGluIHNlbGYucHJpbnRfbW9j ay5jYWxsX2FyZ3NfbGlzdDoNCj4gPiA+ICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuYXNz ZXJ0Tm90RXF1YWwoY2FsbCwgbW9jay5jYWxsKFN0ckNvbnRhaW5zKCdUZXN0aW5nIGNvbXBsZXRl LicpKSkNCj4gPiA+IC0gICAgICAgICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0Tm90RXF1YWwo Y2FsbCwgbW9jay5jYWxsKFN0ckNvbnRhaW5zKCcgMCB0ZXN0cyBydW4nKSkpDQo+ID4gPiArICAg ICAgICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydE5vdEVxdWFsKGNhbGwsIG1vY2suY2FsbChT dHJDb250YWlucygnIDAgdGVzdHMgcnVuIScpKSkNCj4gPiA+DQo+ID4gPiAgICAgICAgIGRlZiB0 ZXN0X3J1bl9yYXdfb3V0cHV0X2t1bml0KHNlbGYpOg0KPiA+ID4gICAgICAgICAgICAgICAgIHNl bGYubGludXhfc291cmNlX21vY2sucnVuX2tlcm5lbCA9IG1vY2suTW9jayhyZXR1cm5fdmFsdWU9 W10pDQo+ID4gPiBkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9rdW5pdC90ZXN0X2RhdGEvdGVz dF9pc190ZXN0X3Bhc3NlZC1hbGxfcGFzc2VkX25lc3RlZC5sb2cNCj4gYi90b29scy90ZXN0aW5n L2t1bml0L3Rlc3RfZGF0YS90ZXN0X2lzX3Rlc3RfcGFzc2VkLWFsbF9wYXNzZWRfbmVzdGVkLmxv Zw0KPiA+ID4gbmV3IGZpbGUgbW9kZSAxMDA2NDQNCj4gPiA+IGluZGV4IDAwMDAwMDAwMDAwMC4u OWQ1YjA0ZmU0M2E2DQo+ID4gPiAtLS0gL2Rldi9udWxsDQo+ID4gPiArKysgYi90b29scy90ZXN0 aW5nL2t1bml0L3Rlc3RfZGF0YS90ZXN0X2lzX3Rlc3RfcGFzc2VkLWFsbF9wYXNzZWRfbmVzdGVk LmxvZw0KPiA+ID4gQEAgLTAsMCArMSwzNCBAQA0KPiA+ID4gK1RBUCB2ZXJzaW9uIDE0DQo+ID4g PiArMS4uMg0KPiA+ID4gKyAgICAgICAjIFN1YnRlc3Q6IHN5c2N0bF90ZXN0DQo+ID4gPiArICAg ICAgIDEuLjQNCj4gPiA+ICsgICAgICAgIyBzeXNjdGxfdGVzdF9kb2ludHZlY19udWxsX3RibF9k YXRhOiBzeXNjdGxfdGVzdF9kb2ludHZlY19udWxsX3RibF9kYXRhIHBhc3NlZA0KPiA+ID4gKyAg ICAgICBvayAxIC0gc3lzY3RsX3Rlc3RfZG9pbnR2ZWNfbnVsbF90YmxfZGF0YQ0KPiA+ID4gKyAg ICAgICAgICAgICAgICMgU3VidGVzdDogZXhhbXBsZQ0KPiA+ID4gKyAgICAgICAgICAgICAgIDEu LjINCj4gPiA+ICsgICAgICAgaW5pdF9zdWl0ZQ0KPiA+ID4gKyAgICAgICAgICAgICAgICMgZXhh bXBsZV9zaW1wbGVfdGVzdDogaW5pdGlhbGl6aW5nDQo+ID4gPiArICAgICAgICAgICAgICAgIyBl eGFtcGxlX3NpbXBsZV90ZXN0OiBleGFtcGxlX3NpbXBsZV90ZXN0IHBhc3NlZA0KPiA+ID4gKyAg ICAgICAgICAgICAgIG9rIDEgLSBleGFtcGxlX3NpbXBsZV90ZXN0DQo+ID4gPiArICAgICAgICAg ICAgICAgIyBleGFtcGxlX21vY2tfdGVzdDogaW5pdGlhbGl6aW5nDQo+ID4gPiArICAgICAgICAg ICAgICAgIyBleGFtcGxlX21vY2tfdGVzdDogZXhhbXBsZV9tb2NrX3Rlc3QgcGFzc2VkDQo+ID4g PiArICAgICAgICAgICAgICAgb2sgMiAtIGV4YW1wbGVfbW9ja190ZXN0DQo+ID4gPiArICAgICAg IGt1bml0IGV4YW1wbGU6IGFsbCB0ZXN0cyBwYXNzZWQNCj4gPiA+ICsgICAgICAgb2sgMiAtIGV4 YW1wbGUNCj4gPiA+ICsgICAgICAgIyBzeXNjdGxfdGVzdF9kb2ludHZlY190YWJsZV9sZW5faXNf emVybzogc3lzY3RsX3Rlc3RfZG9pbnR2ZWNfdGFibGVfbGVuX2lzX3plcm8gcGFzc2VkDQo+ID4g PiArICAgICAgIG9rIDMgLSBzeXNjdGxfdGVzdF9kb2ludHZlY190YWJsZV9sZW5faXNfemVybw0K PiA+ID4gKyAgICAgICAjIHN5c2N0bF90ZXN0X2RvaW50dmVjX3RhYmxlX3JlYWRfYnV0X3Bvc2l0 aW9uX3NldDogc3lzY3RsX3Rlc3RfZG9pbnR2ZWNfdGFibGVfcmVhZF9idXRfcG9zaXRpb25fc2V0 IHBhc3NlZA0KPiA+ID4gKyAgICAgICBvayA0IC0gc3lzY3RsX3Rlc3RfZG9pbnR2ZWNfdGFibGVf cmVhZF9idXRfcG9zaXRpb25fc2V0DQo+ID4gPiAra3VuaXQgc3lzY3RsX3Rlc3Q6IGFsbCB0ZXN0 cyBwYXNzZWQNCj4gPiA+ICtvayAxIC0gc3lzY3RsX3Rlc3QNCj4gPiA+ICsgICAgICAgIyBTdWJ0 ZXN0OiBleGFtcGxlDQo+ID4gPiArICAgICAgIDEuLjINCj4gPiA+ICtpbml0X3N1aXRlDQo+ID4g PiArICAgICAgICMgZXhhbXBsZV9zaW1wbGVfdGVzdDogaW5pdGlhbGl6aW5nDQo+ID4gPiArICAg ICAgICMgZXhhbXBsZV9zaW1wbGVfdGVzdDogZXhhbXBsZV9zaW1wbGVfdGVzdCBwYXNzZWQNCj4g PiA+ICsgICAgICAgb2sgMSAtIGV4YW1wbGVfc2ltcGxlX3Rlc3QNCj4gPiA+ICsgICAgICAgIyBl eGFtcGxlX21vY2tfdGVzdDogaW5pdGlhbGl6aW5nDQo+ID4gPiArICAgICAgICMgZXhhbXBsZV9t b2NrX3Rlc3Q6IGV4YW1wbGVfbW9ja190ZXN0IHBhc3NlZA0KPiA+ID4gKyAgICAgICBvayAyIC0g ZXhhbXBsZV9tb2NrX3Rlc3QNCj4gPiA+ICtrdW5pdCBleGFtcGxlOiBhbGwgdGVzdHMgcGFzc2Vk DQo+ID4gPiArb2sgMiAtIGV4YW1wbGUNCj4gPiA+IGRpZmYgLS1naXQgYS90b29scy90ZXN0aW5n L2t1bml0L3Rlc3RfZGF0YS90ZXN0X2lzX3Rlc3RfcGFzc2VkLWtzZWxmdGVzdC5sb2cgYi90b29s cy90ZXN0aW5nL2t1bml0L3Rlc3RfZGF0YS90ZXN0X2lzX3Rlc3RfcGFzc2VkLQ0KPiBrc2VsZnRl c3QubG9nDQo+ID4gPiBuZXcgZmlsZSBtb2RlIDEwMDY0NA0KPiA+ID4gaW5kZXggMDAwMDAwMDAw MDAwLi42NWQzZjI3ZmVhZjINCj4gPiA+IC0tLSAvZGV2L251bGwNCj4gPiA+ICsrKyBiL3Rvb2xz L3Rlc3Rpbmcva3VuaXQvdGVzdF9kYXRhL3Rlc3RfaXNfdGVzdF9wYXNzZWQta3NlbGZ0ZXN0Lmxv Zw0KPiA+ID4gQEAgLTAsMCArMSwxNCBAQA0KPiA+ID4gK1RBUCB2ZXJzaW9uIDEzDQo+ID4gPiAr MS4uMg0KPiA+ID4gKyMgc2VsZnRlc3RzOiBtZW1iYXJyaWVyOiBtZW1iYXJyaWVyX3Rlc3Rfc2lu Z2xlX3RocmVhZA0KPiA+ID4gKyMgVEFQIHZlcnNpb24gMTMNCj4gPiA+ICsjIDEuLjINCj4gPiA+ ICsjIG9rIDEgc3lzX21lbWJhcnJpZXIgYXZhaWxhYmxlDQo+ID4gPiArIyBvayAyIHN5cyBtZW1i YXJyaWVyIGludmFsaWQgY29tbWFuZCB0ZXN0OiBjb21tYW5kID0gLTEsIGZsYWdzID0gMCwgZXJy bm8gPSAyMi4gRmFpbGVkIGFzIGV4cGVjdGVkDQo+ID4gPiArb2sgMSBzZWxmdGVzdHM6IG1lbWJh cnJpZXI6IG1lbWJhcnJpZXJfdGVzdF9zaW5nbGVfdGhyZWFkDQo+ID4gPiArIyBzZWxmdGVzdHM6 IG1lbWJhcnJpZXI6IG1lbWJhcnJpZXJfdGVzdF9tdWx0aV90aHJlYWQNCj4gPiA+ICsjIFRBUCB2 ZXJzaW9uIDEzDQo+ID4gPiArIyAxLi4yDQo+ID4gPiArIyBvayAxIHN5c19tZW1iYXJyaWVyIGF2 YWlsYWJsZQ0KPiA+ID4gKyMgb2sgMiBzeXMgbWVtYmFycmllciBpbnZhbGlkIGNvbW1hbmQgdGVz dDogY29tbWFuZCA9IC0xLCBmbGFncyA9IDAsIGVycm5vID0gMjIuIEZhaWxlZCBhcyBleHBlY3Rl ZA0KPiA+ID4gK29rIDIgc2VsZnRlc3RzOiBtZW1iYXJyaWVyOiBtZW1iYXJyaWVyX3Rlc3RfbXVs dGlfdGhyZWFkDQo+ID4gPiBkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9rdW5pdC90ZXN0X2Rh dGEvdGVzdF9pc190ZXN0X3Bhc3NlZC1taXNzaW5nX3BsYW4ubG9nIGIvdG9vbHMvdGVzdGluZy9r dW5pdC90ZXN0X2RhdGEvdGVzdF9pc190ZXN0X3Bhc3NlZC0NCj4gbWlzc2luZ19wbGFuLmxvZw0K PiA+ID4gbmV3IGZpbGUgbW9kZSAxMDA2NDQNCj4gPiA+IGluZGV4IDAwMDAwMDAwMDAwMC4uNWNk MTdiN2Y4MThhDQo+ID4gPiAtLS0gL2Rldi9udWxsDQo+ID4gPiArKysgYi90b29scy90ZXN0aW5n L2t1bml0L3Rlc3RfZGF0YS90ZXN0X2lzX3Rlc3RfcGFzc2VkLW1pc3NpbmdfcGxhbi5sb2cNCj4g PiA+IEBAIC0wLDAgKzEsMzEgQEANCj4gPiA+ICtLVEFQIHZlcnNpb24gMQ0KPiA+ID4gKyAgICAg ICAjIFN1YnRlc3Q6IHN5c2N0bF90ZXN0DQo+ID4gPiArICAgICAgICMgc3lzY3RsX3Rlc3RfZG9p bnR2ZWNfbnVsbF90YmxfZGF0YTogc3lzY3RsX3Rlc3RfZG9pbnR2ZWNfbnVsbF90YmxfZGF0YSBw YXNzZWQNCj4gPiA+ICsgICAgICAgb2sgMSAtIHN5c2N0bF90ZXN0X2RvaW50dmVjX251bGxfdGJs X2RhdGENCj4gPiA+ICsgICAgICAgIyBzeXNjdGxfdGVzdF9kb2ludHZlY190YWJsZV9tYXhsZW5f dW5zZXQ6IHN5c2N0bF90ZXN0X2RvaW50dmVjX3RhYmxlX21heGxlbl91bnNldCBwYXNzZWQNCj4g PiA+ICsgICAgICAgb2sgMiAtIHN5c2N0bF90ZXN0X2RvaW50dmVjX3RhYmxlX21heGxlbl91bnNl dA0KPiA+ID4gKyAgICAgICAjIHN5c2N0bF90ZXN0X2RvaW50dmVjX3RhYmxlX2xlbl9pc196ZXJv OiBzeXNjdGxfdGVzdF9kb2ludHZlY190YWJsZV9sZW5faXNfemVybyBwYXNzZWQNCj4gPiA+ICsg ICAgICAgb2sgMyAtIHN5c2N0bF90ZXN0X2RvaW50dmVjX3RhYmxlX2xlbl9pc196ZXJvDQo+ID4g PiArICAgICAgICMgc3lzY3RsX3Rlc3RfZG9pbnR2ZWNfdGFibGVfcmVhZF9idXRfcG9zaXRpb25f c2V0OiBzeXNjdGxfdGVzdF9kb2ludHZlY190YWJsZV9yZWFkX2J1dF9wb3NpdGlvbl9zZXQgcGFz c2VkDQo+ID4gPiArICAgICAgIG9rIDQgLSBzeXNjdGxfdGVzdF9kb2ludHZlY190YWJsZV9yZWFk X2J1dF9wb3NpdGlvbl9zZXQNCj4gPiA+ICsgICAgICAgIyBzeXNjdGxfdGVzdF9kb2ludHZlY19o YXBweV9zaW5nbGVfcG9zaXRpdmU6IHN5c2N0bF90ZXN0X2RvaW50dmVjX2hhcHB5X3NpbmdsZV9w b3NpdGl2ZSBwYXNzZWQNCj4gPiA+ICsgICAgICAgb2sgNSAtIHN5c2N0bF90ZXN0X2RvaW50dmVj X2hhcHB5X3NpbmdsZV9wb3NpdGl2ZQ0KPiA+ID4gKyAgICAgICAjIHN5c2N0bF90ZXN0X2RvaW50 dmVjX2hhcHB5X3NpbmdsZV9uZWdhdGl2ZTogc3lzY3RsX3Rlc3RfZG9pbnR2ZWNfaGFwcHlfc2lu Z2xlX25lZ2F0aXZlIHBhc3NlZA0KPiA+ID4gKyAgICAgICBvayA2IC0gc3lzY3RsX3Rlc3RfZG9p bnR2ZWNfaGFwcHlfc2luZ2xlX25lZ2F0aXZlDQo+ID4gPiArICAgICAgICMgc3lzY3RsX3Rlc3Rf ZG9pbnR2ZWNfc2luZ2xlX2xlc3NfaW50X21pbjogc3lzY3RsX3Rlc3RfZG9pbnR2ZWNfc2luZ2xl X2xlc3NfaW50X21pbiBwYXNzZWQNCj4gPiA+ICsgICAgICAgb2sgNyAtIHN5c2N0bF90ZXN0X2Rv aW50dmVjX3NpbmdsZV9sZXNzX2ludF9taW4NCj4gPiA+ICsgICAgICAgIyBzeXNjdGxfdGVzdF9k b2ludHZlY19zaW5nbGVfZ3JlYXRlcl9pbnRfbWF4OiBzeXNjdGxfdGVzdF9kb2ludHZlY19zaW5n bGVfZ3JlYXRlcl9pbnRfbWF4IHBhc3NlZA0KPiA+ID4gKyAgICAgICBvayA4IC0gc3lzY3RsX3Rl c3RfZG9pbnR2ZWNfc2luZ2xlX2dyZWF0ZXJfaW50X21heA0KPiA+ID4gK2t1bml0IHN5c2N0bF90 ZXN0OiBhbGwgdGVzdHMgcGFzc2VkDQo+ID4gPiArb2sgMSAtIHN5c2N0bF90ZXN0DQo+ID4gPiAr ICAgICAgICMgU3VidGVzdDogZXhhbXBsZQ0KPiA+ID4gKyAgICAgICAxLi4yDQo+ID4gPiAraW5p dF9zdWl0ZQ0KPiA+ID4gKyAgICAgICAjIGV4YW1wbGVfc2ltcGxlX3Rlc3Q6IGluaXRpYWxpemlu Zw0KPiA+ID4gKyAgICAgICAjIGV4YW1wbGVfc2ltcGxlX3Rlc3Q6IGV4YW1wbGVfc2ltcGxlX3Rl c3QgcGFzc2VkDQo+ID4gPiArICAgICAgIG9rIDEgLSBleGFtcGxlX3NpbXBsZV90ZXN0DQo+ID4g PiArICAgICAgICMgZXhhbXBsZV9tb2NrX3Rlc3Q6IGluaXRpYWxpemluZw0KPiA+ID4gKyAgICAg ICAjIGV4YW1wbGVfbW9ja190ZXN0OiBleGFtcGxlX21vY2tfdGVzdCBwYXNzZWQNCj4gPiA+ICsg ICAgICAgb2sgMiAtIGV4YW1wbGVfbW9ja190ZXN0DQo+ID4gPiAra3VuaXQgZXhhbXBsZTogYWxs IHRlc3RzIHBhc3NlZA0KPiA+ID4gK29rIDIgLSBleGFtcGxlDQo+ID4gPiBkaWZmIC0tZ2l0IGEv dG9vbHMvdGVzdGluZy9rdW5pdC90ZXN0X2RhdGEvdGVzdF9zdHJpcF9oeXBoZW4ubG9nIGIvdG9v bHMvdGVzdGluZy9rdW5pdC90ZXN0X2RhdGEvdGVzdF9zdHJpcF9oeXBoZW4ubG9nDQo+ID4gPiBu ZXcgZmlsZSBtb2RlIDEwMDY0NA0KPiA+ID4gaW5kZXggMDAwMDAwMDAwMDAwLi45MmFjN2MyNGIz NzQNCj4gPiA+IC0tLSAvZGV2L251bGwNCj4gPiA+ICsrKyBiL3Rvb2xzL3Rlc3Rpbmcva3VuaXQv dGVzdF9kYXRhL3Rlc3Rfc3RyaXBfaHlwaGVuLmxvZw0KPiA+ID4gQEAgLTAsMCArMSwxNiBAQA0K PiA+ID4gK0tUQVAgdmVyc2lvbiAxDQo+ID4gPiArMS4uMg0KPiA+ID4gKyAgICAgICAjIFN1YnRl c3Q6IHN5c2N0bF90ZXN0DQo+ID4gPiArICAgICAgIDEuLjENCj4gPiA+ICsgICAgICAgIyBzeXNj dGxfdGVzdF9kb2ludHZlY19udWxsX3RibF9kYXRhOiBzeXNjdGxfdGVzdF9kb2ludHZlY19udWxs X3RibF9kYXRhIHBhc3NlZA0KPiA+ID4gKyAgICAgICBvayAxIC0gc3lzY3RsX3Rlc3RfZG9pbnR2 ZWNfbnVsbF90YmxfZGF0YQ0KPiA+ID4gK2t1bml0IHN5c2N0bF90ZXN0OiBhbGwgdGVzdHMgcGFz c2VkDQo+ID4gPiArb2sgMSAtIHN5c2N0bF90ZXN0DQo+ID4gPiArICAgICAgICMgU3VidGVzdDog ZXhhbXBsZQ0KPiA+ID4gKyAgICAgICAxLi4xDQo+ID4gPiAraW5pdF9zdWl0ZQ0KPiA+ID4gKyAg ICAgICAjIGV4YW1wbGVfc2ltcGxlX3Rlc3Q6IGluaXRpYWxpemluZw0KPiA+ID4gKyAgICAgICAj IGV4YW1wbGVfc2ltcGxlX3Rlc3Q6IGV4YW1wbGVfc2ltcGxlX3Rlc3QgcGFzc2VkDQo+ID4gPiAr ICAgICAgIG9rIDEgZXhhbXBsZV9zaW1wbGVfdGVzdA0KPiA+ID4gK2t1bml0IGV4YW1wbGU6IGFs bCB0ZXN0cyBwYXNzZWQNCj4gPiA+ICtvayAyIGV4YW1wbGUNCj4gPiA+IC0tDQo+ID4gPiAyLjMz LjAuMjU5LmdjMTI4NDI3ZmQ3LWdvb2cNCj4gPiA+DQo+ID4gPiAtLQ0KPiA+ID4gWW91IHJlY2Vp dmVkIHRoaXMgbWVzc2FnZSBiZWNhdXNlIHlvdSBhcmUgc3Vic2NyaWJlZCB0byB0aGUgR29vZ2xl IEdyb3VwcyAiS1VuaXQgRGV2ZWxvcG1lbnQiIGdyb3VwLg0KPiA+ID4gVG8gdW5zdWJzY3JpYmUg ZnJvbSB0aGlzIGdyb3VwIGFuZCBzdG9wIHJlY2VpdmluZyBlbWFpbHMgZnJvbSBpdCwgc2VuZCBh biBlbWFpbCB0byBrdW5pdC1kZXYrdW5zdWJzY3JpYmVAZ29vZ2xlZ3JvdXBzLmNvbS4NCj4gPiA+ IFRvIHZpZXcgdGhpcyBkaXNjdXNzaW9uIG9uIHRoZSB3ZWIgdmlzaXQgaHR0cHM6Ly9ncm91cHMu Z29vZ2xlLmNvbS9kL21zZ2lkL2t1bml0LWRldi8yMDIxMDgyNjE5NTUwNS4zMDY2NzU1LTEtDQo+ IHJtb2FyJTQwZ29vZ2xlLmNvbS4NCg==