From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from dpdk.org (dpdk.org [92.243.14.124]) by inbox.dpdk.org (Postfix) with ESMTP id DABA1A04B7; Sun, 20 Sep 2020 13:54:44 +0200 (CEST) Received: from [92.243.14.124] (localhost [127.0.0.1]) by dpdk.org (Postfix) with ESMTP id A00B41D9CB; Sun, 20 Sep 2020 13:54:43 +0200 (CEST) Received: from EUR01-DB5-obe.outbound.protection.outlook.com (mail-eopbgr150057.outbound.protection.outlook.com [40.107.15.57]) by dpdk.org (Postfix) with ESMTP id 7CF1C1D9BA for ; Sun, 20 Sep 2020 13:54:42 +0200 (CEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=armh.onmicrosoft.com; s=selector2-armh-onmicrosoft-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=rUauJleVQ7Pw08X0d5zNy2a67aoZIRJdVnvA2dsV/Qc=; b=xY+DZ/+E+7PCs3/3XUB/8GcWXTGQxQuGrP92+4bQmpW6WODAGE1O/9mMi5OdUEDMugFImu4gxH+lCjBUFzjV6KbR4dMabC5eS84BzIfx4RNn5k+wUQ/5KApBl5x6Y4vrlSpiNwNgmny22vW8vH+SlG+Dbd9FP9nVqIq6eyvw0SU= Received: from AM3PR03CA0062.eurprd03.prod.outlook.com (2603:10a6:207:5::20) by HE1PR0801MB1929.eurprd08.prod.outlook.com (2603:10a6:3:50::16) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.3391.11; Sun, 20 Sep 2020 11:54:38 +0000 Received: from AM5EUR03FT050.eop-EUR03.prod.protection.outlook.com (2603:10a6:207:5:cafe::aa) by AM3PR03CA0062.outlook.office365.com (2603:10a6:207:5::20) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.3391.11 via Frontend Transport; Sun, 20 Sep 2020 11:54:38 +0000 X-MS-Exchange-Authentication-Results: spf=pass (sender IP is 63.35.35.123) smtp.mailfrom=arm.com; dpdk.org; dkim=pass (signature was verified) header.d=armh.onmicrosoft.com;dpdk.org; dmarc=bestguesspass action=none header.from=arm.com; Received-SPF: Pass (protection.outlook.com: domain of arm.com designates 63.35.35.123 as permitted sender) receiver=protection.outlook.com; client-ip=63.35.35.123; helo=64aa7808-outbound-1.mta.getcheckrecipient.com; Received: from 64aa7808-outbound-1.mta.getcheckrecipient.com (63.35.35.123) by AM5EUR03FT050.mail.protection.outlook.com (10.152.17.47) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.3391.15 via Frontend Transport; Sun, 20 Sep 2020 11:54:37 +0000 Received: ("Tessian outbound 7a6fb63c1e64:v64"); Sun, 20 Sep 2020 11:54:37 +0000 X-CR-MTA-TID: 64aa7808 Received: from 4fc74c98316d.2 by 64aa7808-outbound-1.mta.getcheckrecipient.com id 88F1C1B4-67D1-49C3-8B7A-860C9DFEA2A1.1; Sun, 20 Sep 2020 11:54:32 +0000 Received: from EUR05-AM6-obe.outbound.protection.outlook.com by 64aa7808-outbound-1.mta.getcheckrecipient.com with ESMTPS id 4fc74c98316d.2 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384); Sun, 20 Sep 2020 11:54:32 +0000 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=GlMdbcOnMUjI3sxLTp107ERZV7K9Lvhf4Ptfb0hESyuGcgB9zLDHwS6pWvrpuNz4Bz6Jnn17kDUGHgWXnu4ZDIs2+MXfBREmlhsUtNiG2eETg1oEFi/ssiHdQ2zdlTOrmbEi0jlcp3xb45DSQUFZJbYhE0e6XJh3KUQvyOYpoNtI2tXZrcFG8CgT2H2b/Uihe2WunSYzYBcQNXPXpag8GHDvGAgXCga5FkcT/tHcrPYjJ2NGZegZDviS2QUxZrjWuNqM3CzGwNTH7xJV+bgKIVBE0GeB9CvouitYverQ4L8D/c7bwqSkJdGdp1/bij+e0tn4caGyQraU2nmnabLuIQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=rUauJleVQ7Pw08X0d5zNy2a67aoZIRJdVnvA2dsV/Qc=; b=lPHPFF/XMu79oW1MEpKMq2ls3Ej6FhThV/OSFSdhej7Ect3hXjEIvajTWWRRAAJW+s8Ap/Muw9F/AIsuO+m4ABhw1nuY7x3V/oC1czXlY5V3eal0HSr0KBX1AznF5BWK0UhfHb2JFrbWh9NkWF1NTmONowk18AOWkqe1VCNkz7CBDhI8ycWzka0QW4GyOdekXVyCOWcBXIKAMrECVIA9F2tJG7IUqDW7Zl1K9jiAt/gavthjM70bf9PKwj6gF3lYGY9JaC+ht/Ml/gzA2+PLK2LDwDSu2iljGTgdrNYzAO72QMqqsdl3ewNwH6m8CoCebi80I7TDx+Vo08a/j1SHvw== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=arm.com; dmarc=pass action=none header.from=arm.com; dkim=pass header.d=arm.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=armh.onmicrosoft.com; s=selector2-armh-onmicrosoft-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=rUauJleVQ7Pw08X0d5zNy2a67aoZIRJdVnvA2dsV/Qc=; b=xY+DZ/+E+7PCs3/3XUB/8GcWXTGQxQuGrP92+4bQmpW6WODAGE1O/9mMi5OdUEDMugFImu4gxH+lCjBUFzjV6KbR4dMabC5eS84BzIfx4RNn5k+wUQ/5KApBl5x6Y4vrlSpiNwNgmny22vW8vH+SlG+Dbd9FP9nVqIq6eyvw0SU= Received: from VE1PR08MB5677.eurprd08.prod.outlook.com (2603:10a6:800:1ab::17) by VI1PR08MB3229.eurprd08.prod.outlook.com (2603:10a6:803:47::29) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.3391.11; Sun, 20 Sep 2020 11:54:28 +0000 Received: from VE1PR08MB5677.eurprd08.prod.outlook.com ([fe80::dab:b87:1378:a523]) by VE1PR08MB5677.eurprd08.prod.outlook.com ([fe80::dab:b87:1378:a523%7]) with mapi id 15.20.3391.011; Sun, 20 Sep 2020 11:54:28 +0000 From: Feifei Wang To: "Ananyev, Konstantin" , Honnappa Nagarahalli CC: "dev@dpdk.org" , nd , nd Thread-Topic: [PATCH v5 7/7] test/ring: improve the application of macro Thread-Index: AQHWiyluFxDYNeUaf0W0MWDjDD0IlqltCDwAgARp8OA= Date: Sun, 20 Sep 2020 11:54:28 +0000 Message-ID: References: <20200729063105.11299-1-feifei.wang2@arm.com> <20200915062749.21374-1-feifei.wang2@arm.com> <20200915062749.21374-8-feifei.wang2@arm.com> In-Reply-To: Accept-Language: zh-CN, en-US Content-Language: zh-CN X-MS-Has-Attach: X-MS-TNEF-Correlator: x-ts-tracking-id: AAC8C9948F02CC439617F34C934A64D3.0 x-checkrecipientchecked: true Authentication-Results-Original: intel.com; dkim=none (message not signed) header.d=none;intel.com; dmarc=none action=none header.from=arm.com; x-originating-ip: [203.126.0.111] x-ms-publictraffictype: Email X-MS-Office365-Filtering-HT: Tenant X-MS-Office365-Filtering-Correlation-Id: 18346d53-3645-407b-002f-08d85d5bf351 x-ms-traffictypediagnostic: VI1PR08MB3229:|HE1PR0801MB1929: x-ms-exchange-transport-forked: True X-Microsoft-Antispam-PRVS: x-checkrecipientrouted: true nodisclaimer: true x-ms-oob-tlc-oobclassifiers: OLM:2803;OLM:2803; X-MS-Exchange-SenderADCheck: 1 X-Microsoft-Antispam-Untrusted: BCL:0; X-Microsoft-Antispam-Message-Info-Original: pDNCSjfqM4vzOAiwbJnzsbrAEUJixifjUXp84SvHBeRU9FT7LmCPXKlAIYR27NaqoTjZO383WACK3hYehWbamg5gQng+HYIuVZ0F276EfEDQR06uIKy4uEMHoYUO2pUfiQgxyRlbmKE702XYMzKsAaYG3gBQ+RmhAzCeWZOuiFbjQ6Xlv6q4BJPwrTfbPra24XSvNQf3DJNOoQ1yvSfargC2kCcRTv3Mt2pBX8Ba0wUsCKZEQpFchrxU8ExOB/cZLVyA2omAOUmaGsMrodbbdv/Qs+FturszpKH2VGVRqhWG9QnphU9XiJz1MWoBFM8EASDk8Prhgsc6BezDqYUpJxQ7D+aAX0xeDdP50Fi3nsTB4Z/+w91e8rio2TzLHJKO X-Forefront-Antispam-Report-Untrusted: CIP:255.255.255.255; CTRY:; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:VE1PR08MB5677.eurprd08.prod.outlook.com; PTR:; CAT:NONE; SFS:(4636009)(136003)(396003)(376002)(346002)(366004)(39850400004)(86362001)(66476007)(6506007)(64756008)(76116006)(66946007)(52536014)(6636002)(30864003)(66446008)(5660300002)(186003)(66556008)(26005)(71200400001)(2906002)(83380400001)(478600001)(33656002)(54906003)(224303003)(7696005)(110136005)(9686003)(8936002)(55016002)(316002)(4326008)(579004); DIR:OUT; SFP:1101; x-ms-exchange-antispam-messagedata: YZYU0Fti6H458dPfeNbuRpiglOwilodaxQ7ykLelg2N7gMu9okwGM4Y26Kc0C8UCLcmt17kNnOs+k90VXFDObpLlX7iMUu0gRTPXra/2h+zWjDYR6xi4XzUY065GdB1OsBSxQUM55kvRCppdaabmTVx95kP4AYwA9YodAwEFEALoEw1IwktQDJ8OWCYJOegMuuKD14GygNysljdhBnuk6rk0woKSxUqS4ax1oMMxROdG5rzXC4n1ZyZmk2jsI2aLC0PUfCcwFaJ4Mj4pM9wgDUZuTVgk2DB4mGov4uOB0CDSVvNZPdPYeCs68AZzUV45UOfWdr35mimp7pjXUJDMTaf6YjfQ5kKJ0NPbA+BJJMZA5ZPlg6m7ubd1JIeG+CKDDb1ty4JkXDsNi9GJ8Qb31y89Hfc76FP30rVuN9QoR6A7wQRP6wjUfUkfcQIuN+591q8g6PbHYVVr3A6/+kNwPlEWuuutFlIdl3lBdx1YZkzCKnJQS7yCY4ttrRokBXkeDu4is5H2IAD9HpI5oCjozSckfxW7rk0XjxchZ/9RDsEQPgXcsETQqvhg7yCTxsRbb0QQiG1fux/nOAF9/6auaQgane4B+1KLbGTzdn0G4AqPgk7u8gSnS8oLazEHjrnmT4n21Ox5yD6uMoElAyuHoA== Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 MIME-Version: 1.0 X-MS-Exchange-Transport-CrossTenantHeadersStamped: VI1PR08MB3229 Original-Authentication-Results: intel.com; dkim=none (message not signed) header.d=none;intel.com; dmarc=none action=none header.from=arm.com; X-EOPAttributedMessage: 0 X-MS-Exchange-Transport-CrossTenantHeadersStripped: AM5EUR03FT050.eop-EUR03.prod.protection.outlook.com X-MS-Office365-Filtering-Correlation-Id-Prvs: 6d835fd5-68b5-41ee-468e-08d85d5bedd0 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: gvpFA6nHBUv6LLDKsRur+g0DzReOXYKhlyqgXkq7hoEFZGUMx61Gbd50mMoaLXYXqVgXLIHtTN72vM18ORaGnPf/lMPzQXtQD4pfTivjHpc/pMh+WyAbWndGn+mB7GyxveJbaKwI+7OFeskQfhGC1DmO+fl3zkx2YCuThAhjNsHZgRVszqEia9DwyqZKfvdW+CC8KaN+j37CxVxWHuo2QAD8lcvxTK15AHjdB1w8No0IWGEyU0YeoG+/VEwrCBreLxVFCCWHF2Ca2RyTU4eSCZ7cEs+KcjCn41QSTdvADMHSBch/mKxzVGiGyFnPA+W4sHfW4LdygZ2DBddN8QHAmlTuKB15314SpvIiy6CL2aW3HY0eYtbxfEvjMyFFwVOCYvQyfg9EZQOlCtuyxkPRAg== X-Forefront-Antispam-Report: CIP:63.35.35.123; CTRY:IE; LANG:en; SCL:1; SRV:; IPV:CAL; SFV:NSPM; H:64aa7808-outbound-1.mta.getcheckrecipient.com; PTR:ec2-63-35-35-123.eu-west-1.compute.amazonaws.com; CAT:NONE; SFS:(4636009)(396003)(39850400004)(136003)(346002)(376002)(46966005)(316002)(8936002)(6506007)(356005)(6636002)(478600001)(336012)(82740400003)(47076004)(26005)(186003)(2906002)(33656002)(81166007)(82310400003)(83380400001)(110136005)(54906003)(30864003)(36906005)(9686003)(55016002)(86362001)(224303003)(70206006)(70586007)(4326008)(7696005)(52536014)(5660300002); DIR:OUT; SFP:1101; X-OriginatorOrg: arm.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 20 Sep 2020 11:54:37.7970 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: 18346d53-3645-407b-002f-08d85d5bf351 X-MS-Exchange-CrossTenant-Id: f34e5979-57d9-4aaa-ad4d-b122a662184d X-MS-Exchange-CrossTenant-OriginalAttributedTenantConnectingIp: TenantId=f34e5979-57d9-4aaa-ad4d-b122a662184d; Ip=[63.35.35.123]; Helo=[64aa7808-outbound-1.mta.getcheckrecipient.com] X-MS-Exchange-CrossTenant-AuthSource: AM5EUR03FT050.eop-EUR03.prod.protection.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Anonymous X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: HE1PR0801MB1929 Subject: [dpdk-dev] =?utf-8?b?5Zue5aSNOiBbUEFUQ0ggdjUgNy83XSB0ZXN0L3Jpbmc6?= =?utf-8?q?_improve_the_application_of_macro?= X-BeenThere: dev@dpdk.org X-Mailman-Version: 2.1.15 Precedence: list List-Id: DPDK patches and discussions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dev-bounces@dpdk.org Sender: "dev" SGksIEtvbnN0YW50aW4NCg0KPiAtLS0tLemCruS7tuWOn+S7ti0tLS0tDQo+IOWPkeS7tuS6ujog QW5hbnlldiwgS29uc3RhbnRpbiA8a29uc3RhbnRpbi5hbmFueWV2QGludGVsLmNvbT4NCj4g5Y+R 6YCB5pe26Ze0OiAyMDIw5bm0OeaciDE45pelIDA6MjYNCj4g5pS25Lu25Lq6OiBGZWlmZWkgV2Fu ZyA8RmVpZmVpLldhbmcyQGFybS5jb20+OyBIb25uYXBwYSBOYWdhcmFoYWxsaQ0KPiA8SG9ubmFw cGEuTmFnYXJhaGFsbGlAYXJtLmNvbT4NCj4g5oqE6YCBOiBkZXZAZHBkay5vcmc7IG5kIDxuZEBh cm0uY29tPg0KPiDkuLvpopg6IFJFOiBbUEFUQ0ggdjUgNy83XSB0ZXN0L3Jpbmc6IGltcHJvdmUg dGhlIGFwcGxpY2F0aW9uIG9mIG1hY3JvDQo+IA0KPiANCj4gDQo+ID4gQWRkIG1vcmUgcGFyYW1l dGVycyBpbnRvIHRoZSBtYWNybyBURVNUX1JJTkdfVkVSSUZZIGFuZCBleHBhbmQgdGhlDQo+ID4g c2NvcGUgb2YgYXBwbGljYXRpb24gZm9yIGl0LiBUaGVuIHJlcGxhY2UgYWxsIHJpbmcgQVBJcyBj aGVjayB3aXRoDQo+ID4gVEVTVF9SSU5HX1ZFUklGWSB0byBmYWNpbGl0YXRlIGRlYnVnZ2luZy4N Cj4gPg0KPiA+IEZ1cnRoZXJtb3JlLCBjb3JyZWN0IGEgc3BlbGxpbmcgbWlzdGFrZXMgb2YgdGhl IG1hY3JvDQo+ID4gVEVTVF9SSU5HX0ZVTExfRU1UUFlfSVRFUi4NCj4gPg0KPiA+IFN1Z2dlc3Rl ZC1ieTogSG9ubmFwcGEgTmFnYXJhaGFsbGkgPGhvbm5hcHBhLm5hZ2FyYWhhbGxpQGFybS5jb20+ DQo+ID4gU2lnbmVkLW9mZi1ieTogRmVpZmVpIFdhbmcgPGZlaWZlaS53YW5nMkBhcm0uY29tPg0K PiA+IFJldmlld2VkLWJ5OiBQaGlsIFlhbmcgPHBoaWwueWFuZ0Bhcm0uY29tPg0KPiA+IFJldmll d2VkLWJ5OiBEaGFybWlrIFRoYWtrYXIgPGRoYXJtaWsudGhha2thckBhcm0uY29tPg0KPiA+IFJl dmlld2VkLWJ5OiBIb25uYXBwYSBOYWdhcmFoYWxsaSA8aG9ubmFwcGEubmFnYXJhaGFsbGlAYXJt LmNvbT4NCj4gPiAtLS0NCj4gPiAgYXBwL3Rlc3QvdGVzdF9yaW5nLmMgfCAyNjYNCj4gPiArKysr KysrKysrKysrKysrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQo+ID4gIDEgZmlsZSBjaGFu Z2VkLCA5OSBpbnNlcnRpb25zKCspLCAxNjcgZGVsZXRpb25zKC0pDQo+ID4NCj4gPiBkaWZmIC0t Z2l0IGEvYXBwL3Rlc3QvdGVzdF9yaW5nLmMgYi9hcHAvdGVzdC90ZXN0X3JpbmcuYyBpbmRleA0K PiA+IGZiNDY2MTRmOC4uNjA1YjYyMGNlIDEwMDY0NA0KPiA+IC0tLSBhL2FwcC90ZXN0L3Rlc3Rf cmluZy5jDQo+ID4gKysrIGIvYXBwL3Rlc3QvdGVzdF9yaW5nLmMNCj4gPiBAQCAtNDYsMTUgKzQ2 LDI1IEBADQo+ID4gICNkZWZpbmUgUklOR19TSVpFIDQwOTYNCj4gPiAgI2RlZmluZSBNQVhfQlVM SyAzMg0KPiA+DQo+ID4gLSNkZWZpbmUJVEVTVF9SSU5HX1ZFUklGWShleHApDQo+IAkJXA0KPiA+ ICsvKg0KPiA+ICsgKiBWYWxpZGF0ZSB0aGUgcmV0dXJuIHZhbHVlIG9mIHRlc3QgY2FzZXMgYW5k IHByaW50IGRldGFpbHMgb2YgdGhlDQo+ID4gKyAqIHJpbmcgaWYgdmFsaWRhdGlvbiBmYWlscw0K PiA+ICsgKg0KPiA+ICsgKiBAcGFyYW0gZXhwDQo+ID4gKyAqICAgRXhwcmVzc2lvbiB0byB2YWxp ZGF0ZSByZXR1cm4gdmFsdWUuDQo+ID4gKyAqIEBwYXJhbSByDQo+ID4gKyAqICAgQSBwb2ludGVy IHRvIHRoZSByaW5nIHN0cnVjdHVyZS4NCj4gPiArICovDQo+ID4gKyNkZWZpbmUgVEVTVF9SSU5H X1ZFUklGWShleHAsIHIpIGRvIHsNCj4gCVwNCj4gPiAgCWlmICghKGV4cCkpIHsJCQkJCQkJXA0K PiA+ICAJCXByaW50ZigiZXJyb3IgYXQgJXM6JWRcdGNvbmRpdGlvbiAiICNleHAgIiBmYWlsZWRc biIsCVwNCj4gPiAgCQkgICAgX19mdW5jX18sIF9fTElORV9fKTsJCQkJXA0KPiA+IC0JCXJ0ZV9y aW5nX2R1bXAoc3Rkb3V0LCByKTsJCQkJXA0KPiA+IC0JCXJldHVybiAtMTsJCQkJCQlcDQo+ID4g LQl9DQo+ID4gKwkJcnRlX3JpbmdfZHVtcChzdGRvdXQsIChyKSk7CQkJCVwNCj4gPiArCQlnb3Rv IGZhaWw7CQkJCQkJXA0KPiA+ICsJfQkJCQkJCQkJXA0KPiA+ICt9IHdoaWxlICgwKQ0KPiANCj4g TEdUTSwganVzdCBvbmUgc3VnZ2VzdGlvbiBmb3IgdGhlIG1hY3JvIGFib3ZlOg0KPiBJbnN0ZWFk IG9mIGFycmFuZ2UgdGhlIHdob2xlIGNvZGUgd2l0aCB0aGUgc2FtZSBsYWJlbCwgd2h5IG5vdCB0 byBzaW1wbHkgYWRkDQo+IGNvbnRyb2wgdHJhbnNmZXIgc3RhdGVtZW50IGFzIGV4dHJhIHBhcmFt ZXRlciB0byB0aGUgbWFjcm86DQo+IA0KPiAjZGVmaW5lIFRFU1RfUklOR19WRVJJRlkoZXhwLCBy LCBlcnJzdCkgZG8gew0KPiAJXA0KPiAgIAlpZiAoIShleHApKSB7CQkJCQkJCVwNCj4gICAJCXBy aW50ZigiZXJyb3IgYXQgJXM6JWRcdGNvbmRpdGlvbiAiICNleHAgIiBmYWlsZWRcbiIsCVwNCj4g ICAJCSAgICBfX2Z1bmNfXywgX19MSU5FX18pOwkJCQlcDQo+IAkJcnRlX3JpbmdfZHVtcChzdGRv dXQsIHIpOwkJCQlcDQo+IAkJZXJyc3Q7CQkJCQkJXA0KPiAJfQ0KPiAJCQkJCQkJCVwNCj4gfSB3 aGlsZSAoMCkNCj4gDQo+IEFucyB0aGVuIGp1c3Q6DQo+IFRFU1RfUklOR19WRVJJRlkocnRlX3Jp bmdfZnJlZV9jb3VudChyKSA9PSAwLCByLCByZXR1cm4gLTEpOyBvcg0KPiBURVNUX1JJTkdfVkVS SUZZKHJ0ZV9yaW5nX2ZyZWVfY291bnQocikgPT0gMCwgciwgZ290byBmYWlsKTsgb3Igd2hhdGV2 ZXIgaXMNCj4gYXBwcm9wcmlhdGUuDQo+IA0KPiBXaXRoIHRoYXQgc2FpZDoNCj4gU2VyaWVzIGFj a2VkLWJ5OiBLb25zdGFudGluIEFuYW55ZXYgPGtvbnN0YW50aW4uYW5hbnlldkBpbnRlbC5jb20+ DQo+IA0KVGhhbmtzIGZvciB5b3VyIGFkdmljZSwgIHRoZSBuZXcgdmVyc2lvbiB3aXRoIHRoaXMg Y2hhbmdlICBoYXMganVzdCBiZWVuIHVwZGF0ZWQuDQo+ID4NCj4gPiAtI2RlZmluZQlURVNUX1JJ TkdfRlVMTF9FTVRQWV9JVEVSCTgNCj4gPiArI2RlZmluZSBURVNUX1JJTkdfRlVMTF9FTVBUWV9J VEVSCTgNCj4gPg0KPiA+ICBzdGF0aWMgY29uc3QgaW50IGVzaXplW10gPSB7LTEsIDQsIDgsIDE2 LCAyMH07DQo+ID4NCj4gPiBAQCAtMzE2LDcgKzMyNiw3IEBAIHRlc3RfcmluZ19uZWdhdGl2ZV90 ZXN0cyh2b2lkKQ0KPiA+ICAJCQkJUklOR19TSVpFICsgMSwgU09DS0VUX0lEX0FOWSwgMCk7DQo+ ID4gIAlpZiAocnAgIT0gTlVMTCkgew0KPiA+ICAJCXByaW50ZigiVGVzdCBmYWlsZWQgdG8gZGV0 ZWN0IGludmFsaWQgZWxlbWVudCBzaXplXG4iKTsNCj4gPiAtCQlnb3RvIHRlc3RfZmFpbDsNCj4g PiArCQlnb3RvIGZhaWw7DQo+ID4gIAl9DQo+ID4NCj4gPg0KPiA+IEBAIC0zMjYsNyArMzM2LDcg QEAgdGVzdF9yaW5nX25lZ2F0aXZlX3Rlc3RzKHZvaWQpDQo+ID4gIAkJCQkJUklOR19TSVpFICsg MSwgU09DS0VUX0lEX0FOWSwgMCk7DQo+ID4gIAkJaWYgKHJwICE9IE5VTEwpIHsNCj4gPiAgCQkJ cHJpbnRmKCJUZXN0IGZhaWxlZCB0byBkZXRlY3Qgb2RkIGNvdW50XG4iKTsNCj4gPiAtCQkJZ290 byB0ZXN0X2ZhaWw7DQo+ID4gKwkJCWdvdG8gZmFpbDsNCj4gPiAgCQl9DQo+ID4NCj4gPiAgCQkv KiBUZXN0IGlmIHJpbmcgc2l6ZSBpcyBleGNlZWRpbmcgdGhlIGxpbWl0ICovIEBAIC0zMzQsMTQN Cj4gKzM0NCwxNA0KPiA+IEBAIHRlc3RfcmluZ19uZWdhdGl2ZV90ZXN0cyh2b2lkKQ0KPiA+ICAJ CQkJCVJURV9SSU5HX1NaX01BU0sgKyAxLA0KPiBTT0NLRVRfSURfQU5ZLCAwKTsNCj4gPiAgCQlp ZiAocnAgIT0gTlVMTCkgew0KPiA+ICAJCQlwcmludGYoIlRlc3QgZmFpbGVkIHRvIGRldGVjdCBs aW1pdHNcbiIpOw0KPiA+IC0JCQlnb3RvIHRlc3RfZmFpbDsNCj4gPiArCQkJZ290byBmYWlsOw0K PiA+ICAJCX0NCj4gPg0KPiA+ICAJCS8qIFRlc3RzIGlmIGxvb2t1cCByZXR1cm5zIE5VTEwgb24g bm9uLWV4aXN0aW5nIHJpbmcgKi8NCj4gPiAgCQlycCA9IHJ0ZV9yaW5nX2xvb2t1cCgicmluZ19u b3RfZm91bmQiKTsNCj4gPiAgCQlpZiAocnAgIT0gTlVMTCAmJiBydGVfZXJybm8gIT0gRU5PRU5U KSB7DQo+ID4gIAkJCXByaW50ZigiVGVzdCBmYWlsZWQgdG8gZGV0ZWN0IE5VTEwgcmluZyBsb29r dXBcbiIpOw0KPiA+IC0JCQlnb3RvIHRlc3RfZmFpbDsNCj4gPiArCQkJZ290byBmYWlsOw0KPiA+ ICAJCX0NCj4gPg0KPiA+ICAJCS8qIFRlc3QgdG8gaWYgYSBub24tcG93ZXIgb2YgMiBjb3VudCBj YXVzZXMgdGhlIGNyZWF0ZSBAQCAtDQo+IDM1MCwyMw0KPiA+ICszNjAsMTkgQEAgdGVzdF9yaW5n X25lZ2F0aXZlX3Rlc3RzKHZvaWQpDQo+ID4gIAkJcnAgPSB0ZXN0X3JpbmdfY3JlYXRlKCJ0ZXN0 X3JpbmdfY291bnQiLCBlc2l6ZVtpXSwgNDA5NywNCj4gPiAgCQkJCQlTT0NLRVRfSURfQU5ZLCAw KTsNCj4gPiAgCQlpZiAocnAgIT0gTlVMTCkNCj4gPiAtCQkJZ290byB0ZXN0X2ZhaWw7DQo+ID4g KwkJCWdvdG8gZmFpbDsNCj4gPg0KPiA+ICAJCXJwID0gdGVzdF9yaW5nX2NyZWF0ZSgidGVzdF9y aW5nX25lZ2F0aXZlIiwgZXNpemVbaV0sIFJJTkdfU0laRSwNCj4gPiAgCQkJCQlTT0NLRVRfSURf QU5ZLA0KPiA+ICAJCQkJCVJJTkdfRl9TUF9FTlEgfCBSSU5HX0ZfU0NfREVRKTsNCj4gPiAgCQlp ZiAocnAgPT0gTlVMTCkgew0KPiA+ICAJCQlwcmludGYoInRlc3RfcmluZ19uZWdhdGl2ZSBmYWls IHRvIGNyZWF0ZSByaW5nXG4iKTsNCj4gPiAtCQkJZ290byB0ZXN0X2ZhaWw7DQo+ID4gKwkJCWdv dG8gZmFpbDsNCj4gPiAgCQl9DQo+ID4NCj4gPiAtCQlpZiAocnRlX3JpbmdfbG9va3VwKCJ0ZXN0 X3JpbmdfbmVnYXRpdmUiKSAhPSBycCkNCj4gPiAtCQkJZ290byB0ZXN0X2ZhaWw7DQo+ID4gKwkJ VEVTVF9SSU5HX1ZFUklGWShydGVfcmluZ19sb29rdXAoInRlc3RfcmluZ19uZWdhdGl2ZSIpID09 DQo+IHJwLCBycCk7DQo+ID4NCj4gPiAtCQlpZiAocnRlX3JpbmdfZW1wdHkocnApICE9IDEpIHsN Cj4gPiAtCQkJcHJpbnRmKCJ0ZXN0X3JpbmdfbmFnYXRpdmUgcmluZyBpcyBub3QgZW1wdHkgYnV0 IGl0DQo+IHNob3VsZCBiZVxuIik7DQo+ID4gLQkJCWdvdG8gdGVzdF9mYWlsOw0KPiA+IC0JCX0N Cj4gPiArCQlURVNUX1JJTkdfVkVSSUZZKHJ0ZV9yaW5nX2VtcHR5KHJwKSA9PSAxLCBycCk7DQo+ ID4NCj4gPiAgCQkvKiBUZXN0cyBpZiBpdCB3b3VsZCBhbHdheXMgZmFpbCB0byBjcmVhdGUgcmlu ZyB3aXRoIGFuIHVzZWQNCj4gPiAgCQkgKiByaW5nIG5hbWUuDQo+ID4gQEAgLTM3NCw3ICszODAs NyBAQCB0ZXN0X3JpbmdfbmVnYXRpdmVfdGVzdHModm9pZCkNCj4gPiAgCQlydCA9IHRlc3Rfcmlu Z19jcmVhdGUoInRlc3RfcmluZ19uZWdhdGl2ZSIsIGVzaXplW2ldLCBSSU5HX1NJWkUsDQo+ID4g IAkJCQkJU09DS0VUX0lEX0FOWSwgMCk7DQo+ID4gIAkJaWYgKHJ0ICE9IE5VTEwpDQo+ID4gLQkJ CWdvdG8gdGVzdF9mYWlsOw0KPiA+ICsJCQlnb3RvIGZhaWw7DQo+ID4NCj4gPiAgCQlydGVfcmlu Z19mcmVlKHJwKTsNCj4gPiAgCQlycCA9IE5VTEw7DQo+ID4gQEAgLTM4Miw3ICszODgsNyBAQCB0 ZXN0X3JpbmdfbmVnYXRpdmVfdGVzdHModm9pZCkNCj4gPg0KPiA+ICAJcmV0dXJuIDA7DQo+ID4N Cj4gPiAtdGVzdF9mYWlsOg0KPiA+ICtmYWlsOg0KPiA+DQo+ID4gIAlydGVfcmluZ19mcmVlKHJw KTsNCj4gPiAgCXJldHVybiAtMTsNCj4gPiBAQCAtNDI2LDQ0ICs0MzIsNDUgQEAgdGVzdF9yaW5n X2J1cnN0X2J1bGtfdGVzdHMxKHVuc2lnbmVkIGludA0KPiA+IHRlc3RfaWR4KQ0KPiA+DQo+ID4g IAkJcHJpbnRmKCJSYW5kb20gZnVsbC9lbXB0eSB0ZXN0XG4iKTsNCj4gPg0KPiA+IC0JCWZvciAo aiA9IDA7IGogIT0gVEVTVF9SSU5HX0ZVTExfRU1UUFlfSVRFUjsgaisrKSB7DQo+ID4gKwkJZm9y IChqID0gMDsgaiAhPSBURVNUX1JJTkdfRlVMTF9FTVBUWV9JVEVSOyBqKyspIHsNCj4gPiAgCQkJ LyogcmFuZG9tIHNoaWZ0IGluIHRoZSByaW5nICovDQo+ID4gIAkJCXJhbmQgPSBSVEVfTUFYKHJ0 ZV9yYW5kKCkgJSBSSU5HX1NJWkUsIDFVTCk7DQo+ID4gIAkJCXByaW50ZigiJXM6IGl0ZXJhdGlv biAldSwgcmFuZG9tIHNoaWZ0OiAldTtcbiIsDQo+ID4gIAkJCSAgICBfX2Z1bmNfXywgaSwgcmFu ZCk7DQo+ID4gIAkJCXJldCA9IHRlc3RfcmluZ19lbnFfaW1wbChyLCBjdXJfc3JjLCBlc2l6ZVtp XSwgcmFuZCwNCj4gPiAgCQkJCQkJCXRlc3RfaWR4KTsNCj4gPiAtCQkJVEVTVF9SSU5HX1ZFUklG WShyZXQgIT0gMCk7DQo+ID4gKwkJCVRFU1RfUklOR19WRVJJRlkocmV0ICE9IDAsIHIpOw0KPiA+ DQo+ID4gIAkJCXJldCA9IHRlc3RfcmluZ19kZXFfaW1wbChyLCBjdXJfZHN0LCBlc2l6ZVtpXSwg cmFuZCwNCj4gPiAgCQkJCQkJCXRlc3RfaWR4KTsNCj4gPiAtCQkJVEVTVF9SSU5HX1ZFUklGWShy ZXQgPT0gcmFuZCk7DQo+ID4gKwkJCVRFU1RfUklOR19WRVJJRlkocmV0ID09IHJhbmQsIHIpOw0K PiA+DQo+ID4gIAkJCS8qIGZpbGwgdGhlIHJpbmcgKi8NCj4gPiAgCQkJcmV0ID0gdGVzdF9yaW5n X2VucV9pbXBsKHIsIGN1cl9zcmMsIGVzaXplW2ldLCByc3osDQo+ID4gIAkJCQkJCQl0ZXN0X2lk eCk7DQo+ID4gLQkJCVRFU1RfUklOR19WRVJJRlkocmV0ICE9IDApOw0KPiA+ICsJCQlURVNUX1JJ TkdfVkVSSUZZKHJldCAhPSAwLCByKTsNCj4gPg0KPiA+IC0JCQlURVNUX1JJTkdfVkVSSUZZKHJ0 ZV9yaW5nX2ZyZWVfY291bnQocikgPT0gMCk7DQo+ID4gLQkJCVRFU1RfUklOR19WRVJJRlkocnN6 ID09IHJ0ZV9yaW5nX2NvdW50KHIpKTsNCj4gPiAtCQkJVEVTVF9SSU5HX1ZFUklGWShydGVfcmlu Z19mdWxsKHIpKTsNCj4gPiAtCQkJVEVTVF9SSU5HX1ZFUklGWShydGVfcmluZ19lbXB0eShyKSA9 PSAwKTsNCj4gPiArCQkJVEVTVF9SSU5HX1ZFUklGWShydGVfcmluZ19mcmVlX2NvdW50KHIpID09 IDAsIHIpOw0KPiA+ICsJCQlURVNUX1JJTkdfVkVSSUZZKHJzeiA9PSBydGVfcmluZ19jb3VudChy KSwgcik7DQo+ID4gKwkJCVRFU1RfUklOR19WRVJJRlkocnRlX3JpbmdfZnVsbChyKSwgcik7DQo+ ID4gKwkJCVRFU1RfUklOR19WRVJJRlkocnRlX3JpbmdfZW1wdHkocikgPT0gMCwgcik7DQo+ID4N Cj4gPiAgCQkJLyogZW1wdHkgdGhlIHJpbmcgKi8NCj4gPiAgCQkJcmV0ID0gdGVzdF9yaW5nX2Rl cV9pbXBsKHIsIGN1cl9kc3QsIGVzaXplW2ldLCByc3osDQo+ID4gIAkJCQkJCQl0ZXN0X2lkeCk7 DQo+ID4gLQkJCVRFU1RfUklOR19WRVJJRlkocmV0ID09IChpbnQpcnN6KTsNCj4gPiAtCQkJVEVT VF9SSU5HX1ZFUklGWShyc3ogPT0gcnRlX3JpbmdfZnJlZV9jb3VudChyKSk7DQo+ID4gLQkJCVRF U1RfUklOR19WRVJJRlkocnRlX3JpbmdfY291bnQocikgPT0gMCk7DQo+ID4gLQkJCVRFU1RfUklO R19WRVJJRlkocnRlX3JpbmdfZnVsbChyKSA9PSAwKTsNCj4gPiAtCQkJVEVTVF9SSU5HX1ZFUklG WShydGVfcmluZ19lbXB0eShyKSk7DQo+ID4gKwkJCVRFU1RfUklOR19WRVJJRlkocmV0ID09IChp bnQpcnN6LCByKTsNCj4gPiArDQo+ID4gKwkJCVRFU1RfUklOR19WRVJJRlkocnN6ID09IHJ0ZV9y aW5nX2ZyZWVfY291bnQociksIHIpOw0KPiA+ICsJCQlURVNUX1JJTkdfVkVSSUZZKHJ0ZV9yaW5n X2NvdW50KHIpID09IDAsIHIpOw0KPiA+ICsJCQlURVNUX1JJTkdfVkVSSUZZKHJ0ZV9yaW5nX2Z1 bGwocikgPT0gMCwgcik7DQo+ID4gKwkJCVRFU1RfUklOR19WRVJJRlkocnRlX3JpbmdfZW1wdHko ciksIHIpOw0KPiA+DQo+ID4gIAkJCS8qIGNoZWNrIGRhdGEgKi8NCj4gPiAgCQkJdGVtcF9zeiA9 IHJzeiAqIHNpemVvZih2b2lkICopOw0KPiA+ICAJCQlpZiAoZXNpemVbaV0gIT0gLTEpDQo+ID4g IAkJCQl0ZW1wX3N6ID0gcnN6ICogZXNpemVbaV07DQo+ID4gIAkJCVRFU1RfUklOR19WRVJJRlko dGVzdF9yaW5nX21lbV9jbXAoc3JjLCBkc3QsDQo+ID4gLQkJCQkJCXRlbXBfc3opID09IDApOw0K PiA+ICsJCQkJCQl0ZW1wX3N6KSA9PSAwLCByKTsNCj4gPiAgCQl9DQo+ID4NCj4gPiAgCQkvKiBG cmVlIG1lbW9yeSBiZWZvcmUgdGVzdCBjb21wbGV0ZWQgKi8gQEAgLTUyMCw0NSArNTI3LDM5DQo+ IEBADQo+ID4gdGVzdF9yaW5nX2J1cnN0X2J1bGtfdGVzdHMyKHVuc2lnbmVkIGludCB0ZXN0X2lk eCkNCj4gPg0KPiA+ICAJCXByaW50ZigiZW5xdWV1ZSAxIG9ialxuIik7DQo+ID4gIAkJcmV0ID0g dGVzdF9yaW5nX2VucV9pbXBsKHIsIGN1cl9zcmMsIGVzaXplW2ldLCAxLCB0ZXN0X2lkeCk7DQo+ ID4gLQkJaWYgKHJldCAhPSAxKQ0KPiA+IC0JCQlnb3RvIGZhaWw7DQo+ID4gKwkJVEVTVF9SSU5H X1ZFUklGWShyZXQgPT0gMSwgcik7DQo+ID4gIAkJY3VyX3NyYyA9IHRlc3RfcmluZ19pbmNfcHRy KGN1cl9zcmMsIGVzaXplW2ldLCAxKTsNCj4gPg0KPiA+ICAJCXByaW50ZigiZW5xdWV1ZSAyIG9i anNcbiIpOw0KPiA+ICAJCXJldCA9IHRlc3RfcmluZ19lbnFfaW1wbChyLCBjdXJfc3JjLCBlc2l6 ZVtpXSwgMiwgdGVzdF9pZHgpOw0KPiA+IC0JCWlmIChyZXQgIT0gMikNCj4gPiAtCQkJZ290byBm YWlsOw0KPiA+ICsJCVRFU1RfUklOR19WRVJJRlkocmV0ID09IDIsIHIpOw0KPiA+ICAJCWN1cl9z cmMgPSB0ZXN0X3JpbmdfaW5jX3B0cihjdXJfc3JjLCBlc2l6ZVtpXSwgMik7DQo+ID4NCj4gPiAg CQlwcmludGYoImVucXVldWUgTUFYX0JVTEsgb2Jqc1xuIik7DQo+ID4gIAkJcmV0ID0gdGVzdF9y aW5nX2VucV9pbXBsKHIsIGN1cl9zcmMsIGVzaXplW2ldLCBNQVhfQlVMSywNCj4gPiAgCQkJCQkJ dGVzdF9pZHgpOw0KPiA+IC0JCWlmIChyZXQgIT0gTUFYX0JVTEspDQo+ID4gLQkJCWdvdG8gZmFp bDsNCj4gPiArCQlURVNUX1JJTkdfVkVSSUZZKHJldCA9PSBNQVhfQlVMSywgcik7DQo+ID4gIAkJ Y3VyX3NyYyA9IHRlc3RfcmluZ19pbmNfcHRyKGN1cl9zcmMsIGVzaXplW2ldLCBNQVhfQlVMSyk7 DQo+ID4NCj4gPiAgCQlwcmludGYoImRlcXVldWUgMSBvYmpcbiIpOw0KPiA+ICAJCXJldCA9IHRl c3RfcmluZ19kZXFfaW1wbChyLCBjdXJfZHN0LCBlc2l6ZVtpXSwgMSwgdGVzdF9pZHgpOw0KPiA+ IC0JCWlmIChyZXQgIT0gMSkNCj4gPiAtCQkJZ290byBmYWlsOw0KPiA+ICsJCVRFU1RfUklOR19W RVJJRlkocmV0ID09IDEsIHIpOw0KPiA+ICAJCWN1cl9kc3QgPSB0ZXN0X3JpbmdfaW5jX3B0cihj dXJfZHN0LCBlc2l6ZVtpXSwgMSk7DQo+ID4NCj4gPiAgCQlwcmludGYoImRlcXVldWUgMiBvYmpz XG4iKTsNCj4gPiAgCQlyZXQgPSB0ZXN0X3JpbmdfZGVxX2ltcGwociwgY3VyX2RzdCwgZXNpemVb aV0sIDIsIHRlc3RfaWR4KTsNCj4gPiAtCQlpZiAocmV0ICE9IDIpDQo+ID4gLQkJCWdvdG8gZmFp bDsNCj4gPiArCQlURVNUX1JJTkdfVkVSSUZZKHJldCA9PSAyLCByKTsNCj4gPiAgCQljdXJfZHN0 ID0gdGVzdF9yaW5nX2luY19wdHIoY3VyX2RzdCwgZXNpemVbaV0sIDIpOw0KPiA+DQo+ID4gIAkJ cHJpbnRmKCJkZXF1ZXVlIE1BWF9CVUxLIG9ianNcbiIpOw0KPiA+ICAJCXJldCA9IHRlc3Rfcmlu Z19kZXFfaW1wbChyLCBjdXJfZHN0LCBlc2l6ZVtpXSwgTUFYX0JVTEssDQo+ID4gIAkJCQkJCXRl c3RfaWR4KTsNCj4gPiAtCQlpZiAocmV0ICE9IE1BWF9CVUxLKQ0KPiA+IC0JCQlnb3RvIGZhaWw7 DQo+ID4gKwkJVEVTVF9SSU5HX1ZFUklGWShyZXQgPT0gTUFYX0JVTEssIHIpOw0KPiA+ICAJCWN1 cl9kc3QgPSB0ZXN0X3JpbmdfaW5jX3B0cihjdXJfZHN0LCBlc2l6ZVtpXSwgTUFYX0JVTEspOw0K PiA+DQo+ID4gIAkJLyogY2hlY2sgZGF0YSAqLw0KPiA+IC0JCWlmICh0ZXN0X3JpbmdfbWVtX2Nt cChzcmMsIGRzdCwgUlRFX1BUUl9ESUZGKGN1cl9kc3QsIGRzdCkpKQ0KPiA+IC0JCQlnb3RvIGZh aWw7DQo+ID4gKwkJVEVTVF9SSU5HX1ZFUklGWSh0ZXN0X3JpbmdfbWVtX2NtcChzcmMsIGRzdCwN Cj4gPiArCQkJCQlSVEVfUFRSX0RJRkYoY3VyX2RzdCwgZHN0KSkgPT0gMCwgcik7DQo+ID4NCj4g PiAgCQkvKiBGcmVlIG1lbW9yeSBiZWZvcmUgdGVzdCBjb21wbGV0ZWQgKi8NCj4gPiAgCQlydGVf cmluZ19mcmVlKHIpOw0KPiA+IEBAIC02MTUsMjIgKzYxNiwyMCBAQCB0ZXN0X3JpbmdfYnVyc3Rf YnVsa190ZXN0czModW5zaWduZWQgaW50IHRlc3RfaWR4KQ0KPiA+ICAJCWZvciAoaiA9IDA7IGog PCBSSU5HX1NJWkUgLyBNQVhfQlVMSzsgaisrKSB7DQo+ID4gIAkJCXJldCA9IHRlc3RfcmluZ19l bnFfaW1wbChyLCBjdXJfc3JjLCBlc2l6ZVtpXSwNCj4gTUFYX0JVTEssDQo+ID4gIAkJCQkJCQl0 ZXN0X2lkeCk7DQo+ID4gLQkJCWlmIChyZXQgIT0gTUFYX0JVTEspDQo+ID4gLQkJCQlnb3RvIGZh aWw7DQo+ID4gKwkJCVRFU1RfUklOR19WRVJJRlkocmV0ID09IE1BWF9CVUxLLCByKTsNCj4gPiAg CQkJY3VyX3NyYyA9IHRlc3RfcmluZ19pbmNfcHRyKGN1cl9zcmMsIGVzaXplW2ldLA0KPiA+ICAJ CQkJCQkJCU1BWF9CVUxLKTsNCj4gPg0KPiA+ICAJCQlyZXQgPSB0ZXN0X3JpbmdfZGVxX2ltcGwo ciwgY3VyX2RzdCwgZXNpemVbaV0sDQo+IE1BWF9CVUxLLA0KPiA+ICAJCQkJCQkJdGVzdF9pZHgp Ow0KPiA+IC0JCQlpZiAocmV0ICE9IE1BWF9CVUxLKQ0KPiA+IC0JCQkJZ290byBmYWlsOw0KPiA+ ICsJCQlURVNUX1JJTkdfVkVSSUZZKHJldCA9PSBNQVhfQlVMSywgcik7DQo+ID4gIAkJCWN1cl9k c3QgPSB0ZXN0X3JpbmdfaW5jX3B0cihjdXJfZHN0LCBlc2l6ZVtpXSwNCj4gPiAgCQkJCQkJCQlN QVhfQlVMSyk7DQo+ID4gIAkJfQ0KPiA+DQo+ID4gIAkJLyogY2hlY2sgZGF0YSAqLw0KPiA+IC0J CWlmICh0ZXN0X3JpbmdfbWVtX2NtcChzcmMsIGRzdCwgUlRFX1BUUl9ESUZGKGN1cl9kc3QsIGRz dCkpKQ0KPiA+IC0JCQlnb3RvIGZhaWw7DQo+ID4gKwkJVEVTVF9SSU5HX1ZFUklGWSh0ZXN0X3Jp bmdfbWVtX2NtcChzcmMsIGRzdCwNCj4gPiArCQkJCQlSVEVfUFRSX0RJRkYoY3VyX2RzdCwgZHN0 KSkgPT0gMCwgcik7DQo+ID4NCj4gPiAgCQkvKiBGcmVlIG1lbW9yeSBiZWZvcmUgdGVzdCBjb21w bGV0ZWQgKi8NCj4gPiAgCQlydGVfcmluZ19mcmVlKHIpOw0KPiA+IEBAIC02OTAsMTYgKzY4OSwx NCBAQCB0ZXN0X3JpbmdfYnVyc3RfYnVsa190ZXN0czQodW5zaWduZWQgaW50IHRlc3RfaWR4KQ0K PiA+ICAJCWZvciAoaiA9IDA7IGogPCAoUklOR19TSVpFL01BWF9CVUxLIC0gMSk7IGorKykgew0K PiA+ICAJCQlyZXQgPSB0ZXN0X3JpbmdfZW5xX2ltcGwociwgY3VyX3NyYywgZXNpemVbaV0sDQo+ IE1BWF9CVUxLLA0KPiA+ICAJCQkJCQkJdGVzdF9pZHgpOw0KPiA+IC0JCQlpZiAocmV0ICE9IE1B WF9CVUxLKQ0KPiA+IC0JCQkJZ290byBmYWlsOw0KPiA+ICsJCQlURVNUX1JJTkdfVkVSSUZZKHJl dCA9PSBNQVhfQlVMSywgcik7DQo+ID4gIAkJCWN1cl9zcmMgPSB0ZXN0X3JpbmdfaW5jX3B0cihj dXJfc3JjLCBlc2l6ZVtpXSwNCj4gPiAgCQkJCQkJCQlNQVhfQlVMSyk7DQo+ID4gIAkJfQ0KPiA+ DQo+ID4gIAkJcHJpbnRmKCJFbnF1ZXVlIDIgb2JqZWN0cywgZnJlZSBlbnRyaWVzID0gTUFYX0JV TEsgLSAyXG4iKTsNCj4gPiAgCQlyZXQgPSB0ZXN0X3JpbmdfZW5xX2ltcGwociwgY3VyX3NyYywg ZXNpemVbaV0sIDIsIHRlc3RfaWR4KTsNCj4gPiAtCQlpZiAocmV0ICE9IDIpDQo+ID4gLQkJCWdv dG8gZmFpbDsNCj4gPiArCQlURVNUX1JJTkdfVkVSSUZZKHJldCA9PSAyLCByKTsNCj4gPiAgCQlj dXJfc3JjID0gdGVzdF9yaW5nX2luY19wdHIoY3VyX3NyYywgZXNpemVbaV0sIDIpOw0KPiA+DQo+ ID4gIAkJcHJpbnRmKCJFbnF1ZXVlIHRoZSByZW1haW5pbmcgZW50cmllcyA9IE1BWF9CVUxLIC0g M1xuIik7DQo+IEBADQo+ID4gLTcxMSwzNCArNzA4LDI5IEBAIHRlc3RfcmluZ19idXJzdF9idWxr X3Rlc3RzNCh1bnNpZ25lZCBpbnQgdGVzdF9pZHgpDQo+ID4gIAkJLyogQWx3YXlzIG9uZSBmcmVl IGVudHJ5IGxlZnQgKi8NCj4gPiAgCQlyZXQgPSB0ZXN0X3JpbmdfZW5xX2ltcGwociwgY3VyX3Ny YywgZXNpemVbaV0sIG51bV9lbGVtcywNCj4gPiAgCQkJCQkJdGVzdF9pZHgpOw0KPiA+IC0JCWlm IChyZXQgIT0gTUFYX0JVTEsgLSAzKQ0KPiA+IC0JCQlnb3RvIGZhaWw7DQo+ID4gKwkJVEVTVF9S SU5HX1ZFUklGWShyZXQgPT0gTUFYX0JVTEsgLSAzLCByKTsNCj4gPiAgCQljdXJfc3JjID0gdGVz dF9yaW5nX2luY19wdHIoY3VyX3NyYywgZXNpemVbaV0sIE1BWF9CVUxLIC0gMyk7DQo+ID4NCj4g PiAgCQlwcmludGYoIlRlc3QgaWYgcmluZyBpcyBmdWxsXG4iKTsNCj4gPiAtCQlpZiAocnRlX3Jp bmdfZnVsbChyKSAhPSAxKQ0KPiA+IC0JCQlnb3RvIGZhaWw7DQo+ID4gKwkJVEVTVF9SSU5HX1ZF UklGWShydGVfcmluZ19mdWxsKHIpID09IDEsIHIpOw0KPiA+DQo+ID4gIAkJcHJpbnRmKCJUZXN0 IGVucXVldWUgZm9yIGEgZnVsbCBlbnRyeVxuIik7DQo+ID4gIAkJcmV0ID0gdGVzdF9yaW5nX2Vu cV9pbXBsKHIsIGN1cl9zcmMsIGVzaXplW2ldLCBNQVhfQlVMSywNCj4gPiAgCQkJCQkJdGVzdF9p ZHgpOw0KPiA+IC0JCWlmIChyZXQgIT0gMCkNCj4gPiAtCQkJZ290byBmYWlsOw0KPiA+ICsJCVRF U1RfUklOR19WRVJJRlkocmV0ID09IDAsIHIpOw0KPiA+DQo+ID4gIAkJcHJpbnRmKCJUZXN0IGRl cXVldWUgd2l0aG91dCBlbm91Z2ggb2JqZWN0c1xuIik7DQo+ID4gIAkJZm9yIChqID0gMDsgaiA8 IFJJTkdfU0laRSAvIE1BWF9CVUxLIC0gMTsgaisrKSB7DQo+ID4gIAkJCXJldCA9IHRlc3Rfcmlu Z19kZXFfaW1wbChyLCBjdXJfZHN0LCBlc2l6ZVtpXSwNCj4gTUFYX0JVTEssDQo+ID4gIAkJCQkJ CQl0ZXN0X2lkeCk7DQo+ID4gLQkJCWlmIChyZXQgIT0gTUFYX0JVTEspDQo+ID4gLQkJCQlnb3Rv IGZhaWw7DQo+ID4gKwkJCVRFU1RfUklOR19WRVJJRlkocmV0ID09IE1BWF9CVUxLLCByKTsNCj4g PiAgCQkJY3VyX2RzdCA9IHRlc3RfcmluZ19pbmNfcHRyKGN1cl9kc3QsIGVzaXplW2ldLA0KPiA+ ICAJCQkJCQkJCU1BWF9CVUxLKTsNCj4gPiAgCQl9DQo+ID4NCj4gPiAgCQkvKiBBdmFpbGFibGUg bWVtb3J5IHNwYWNlIGZvciB0aGUgZXhhY3QgTUFYX0JVTEsgZW50cmllcyAqLw0KPiA+ICAJCXJl dCA9IHRlc3RfcmluZ19kZXFfaW1wbChyLCBjdXJfZHN0LCBlc2l6ZVtpXSwgMiwgdGVzdF9pZHgp Ow0KPiA+IC0JCWlmIChyZXQgIT0gMikNCj4gPiAtCQkJZ290byBmYWlsOw0KPiA+ICsJCVRFU1Rf UklOR19WRVJJRlkocmV0ID09IDIsIHIpOw0KPiA+ICAJCWN1cl9kc3QgPSB0ZXN0X3JpbmdfaW5j X3B0cihjdXJfZHN0LCBlc2l6ZVtpXSwgMik7DQo+ID4NCj4gPiAgCQkvKiBCdWxrIEFQSXMgZW5x dWV1ZSBleGFjdCBudW1iZXIgb2YgZWxlbWVudHMgKi8gQEAgLQ0KPiA3NDgsMTggKzc0MCwxNg0K PiA+IEBAIHRlc3RfcmluZ19idXJzdF9idWxrX3Rlc3RzNCh1bnNpZ25lZCBpbnQgdGVzdF9pZHgp DQo+ID4gIAkJCW51bV9lbGVtcyA9IE1BWF9CVUxLOw0KPiA+ICAJCXJldCA9IHRlc3RfcmluZ19k ZXFfaW1wbChyLCBjdXJfZHN0LCBlc2l6ZVtpXSwgbnVtX2VsZW1zLA0KPiA+ICAJCQkJCQl0ZXN0 X2lkeCk7DQo+ID4gLQkJaWYgKHJldCAhPSBNQVhfQlVMSyAtIDMpDQo+ID4gLQkJCWdvdG8gZmFp bDsNCj4gPiArCQlURVNUX1JJTkdfVkVSSUZZKHJldCA9PSBNQVhfQlVMSyAtIDMsIHIpOw0KPiA+ ICAJCWN1cl9kc3QgPSB0ZXN0X3JpbmdfaW5jX3B0cihjdXJfZHN0LCBlc2l6ZVtpXSwgTUFYX0JV TEsgLSAzKTsNCj4gPg0KPiA+ICAJCXByaW50ZigiVGVzdCBpZiByaW5nIGlzIGVtcHR5XG4iKTsN Cj4gPiAgCQkvKiBDaGVjayBpZiByaW5nIGlzIGVtcHR5ICovDQo+ID4gLQkJaWYgKHJ0ZV9yaW5n X2VtcHR5KHIpICE9IDEpDQo+ID4gLQkJCWdvdG8gZmFpbDsNCj4gPiArCQlURVNUX1JJTkdfVkVS SUZZKHJ0ZV9yaW5nX2VtcHR5KHIpID09IDEsIHIpOw0KPiA+DQo+ID4gIAkJLyogY2hlY2sgZGF0 YSAqLw0KPiA+IC0JCWlmICh0ZXN0X3JpbmdfbWVtX2NtcChzcmMsIGRzdCwgUlRFX1BUUl9ESUZG KGN1cl9kc3QsIGRzdCkpKQ0KPiA+IC0JCQlnb3RvIGZhaWw7DQo+ID4gKwkJVEVTVF9SSU5HX1ZF UklGWSh0ZXN0X3JpbmdfbWVtX2NtcChzcmMsIGRzdCwNCj4gPiArCQkJCQlSVEVfUFRSX0RJRkYo Y3VyX2RzdCwgZHN0KSkgPT0gMCwgcik7DQo+ID4NCj4gPiAgCQkvKiBGcmVlIG1lbW9yeSBiZWZv cmUgdGVzdCBjb21wbGV0ZWQgKi8NCj4gPiAgCQlydGVfcmluZ19mcmVlKHIpOw0KPiA+IEBAIC03 OTUsMTQgKzc4NSwxNCBAQCB0ZXN0X3JpbmdfYmFzaWNfZXgodm9pZCkNCj4gPiAgCQkJCQlSSU5H X0ZfU1BfRU5RIHwgUklOR19GX1NDX0RFUSk7DQo+ID4gIAkJaWYgKHJwID09IE5VTEwpIHsNCj4g PiAgCQkJcHJpbnRmKCIlczogZmFpbGVkIHRvIGNyZWF0ZSByaW5nXG4iLCBfX2Z1bmNfXyk7DQo+ ID4gLQkJCWdvdG8gZmFpbF90ZXN0Ow0KPiA+ICsJCQlnb3RvIGZhaWw7DQo+ID4gIAkJfQ0KPiA+ DQo+ID4gIAkJLyogYWxsb2MgZHVtbXkgb2JqZWN0IHBvaW50ZXJzICovDQo+ID4gIAkJc3JjID0g dGVzdF9yaW5nX2NhbGxvYyhSSU5HX1NJWkUsIGVzaXplW2ldKTsNCj4gPiAgCQlpZiAoc3JjID09 IE5VTEwpIHsNCj4gPiAgCQkJcHJpbnRmKCIlczogZmFpbGVkIHRvIGFsbG9jIHNyYyBtZW1vcnlc biIsIF9fZnVuY19fKTsNCj4gPiAtCQkJZ290byBmYWlsX3Rlc3Q7DQo+ID4gKwkJCWdvdG8gZmFp bDsNCj4gPiAgCQl9DQo+ID4gIAkJdGVzdF9yaW5nX21lbV9pbml0KHNyYywgUklOR19TSVpFLCBl c2l6ZVtpXSk7DQo+ID4gIAkJY3VyX3NyYyA9IHNyYzsNCj4gPiBAQCAtODExLDIwICs4MDEsMTMg QEAgdGVzdF9yaW5nX2Jhc2ljX2V4KHZvaWQpDQo+ID4gIAkJZHN0ID0gdGVzdF9yaW5nX2NhbGxv YyhSSU5HX1NJWkUsIGVzaXplW2ldKTsNCj4gPiAgCQlpZiAoZHN0ID09IE5VTEwpIHsNCj4gPiAg CQkJcHJpbnRmKCIlczogZmFpbGVkIHRvIGFsbG9jIGRzdCBtZW1vcnlcbiIsIF9fZnVuY19fKTsN Cj4gPiAtCQkJZ290byBmYWlsX3Rlc3Q7DQo+ID4gKwkJCWdvdG8gZmFpbDsNCj4gPiAgCQl9DQo+ ID4gIAkJY3VyX2RzdCA9IGRzdDsNCj4gPg0KPiA+IC0JCWlmIChydGVfcmluZ19sb29rdXAoInRl c3RfcmluZ19iYXNpY19leCIpICE9IHJwKSB7DQo+ID4gLQkJCXByaW50ZigiJXM6IGZhaWxlZCB0 byBmaW5kIHJpbmdcbiIsIF9fZnVuY19fKTsNCj4gPiAtCQkJZ290byBmYWlsX3Rlc3Q7DQo+ID4g LQkJfQ0KPiA+ICsJCVRFU1RfUklOR19WRVJJRlkocnRlX3JpbmdfbG9va3VwKCJ0ZXN0X3Jpbmdf YmFzaWNfZXgiKSA9PQ0KPiBycCwgcnApOw0KPiA+DQo+ID4gLQkJaWYgKHJ0ZV9yaW5nX2VtcHR5 KHJwKSAhPSAxKSB7DQo+ID4gLQkJCXByaW50ZigiJXM6IHJpbmcgaXMgbm90IGVtcHR5IGJ1dCBp dCBzaG91bGQgYmVcbiIsDQo+ID4gLQkJCQlfX2Z1bmNfXyk7DQo+ID4gLQkJCWdvdG8gZmFpbF90 ZXN0Ow0KPiA+IC0JCX0NCj4gPiArCQlURVNUX1JJTkdfVkVSSUZZKHJ0ZV9yaW5nX2VtcHR5KHJw KSA9PSAxLCBycCk7DQo+ID4NCj4gPiAgCQlwcmludGYoIiV1IHJpbmcgZW50cmllcyBhcmUgbm93 IGZyZWVcbiIsDQo+ID4gIAkJCXJ0ZV9yaW5nX2ZyZWVfY291bnQocnApKTsNCj4gPiBAQCAtODMy LDQwICs4MTUsMjQgQEAgdGVzdF9yaW5nX2Jhc2ljX2V4KHZvaWQpDQo+ID4gIAkJZm9yIChqID0g MDsgaiA8IFJJTkdfU0laRSAtIDE7IGorKykgew0KPiA+ICAJCQlyZXQgPSB0ZXN0X3JpbmdfZW5x dWV1ZShycCwgY3VyX3NyYywgZXNpemVbaV0sIDEsDQo+ID4gIAkJCQlURVNUX1JJTkdfVEhSRUFE X0RFRiB8DQo+IFRFU1RfUklOR19FTEVNX1NJTkdMRSk7DQo+ID4gLQkJCWlmIChyZXQgIT0gMCkg ew0KPiA+IC0JCQkJcHJpbnRmKCIlczogcnRlX3JpbmdfZW5xdWV1ZSBmYWlsc1xuIiwNCj4gPiAt CQkJCQlfX2Z1bmNfXyk7DQo+ID4gLQkJCQlnb3RvIGZhaWxfdGVzdDsNCj4gPiAtCQkJfQ0KPiA+ ICsJCQlURVNUX1JJTkdfVkVSSUZZKHJldCA9PSAwLCBycCk7DQo+ID4gIAkJCWN1cl9zcmMgPSB0 ZXN0X3JpbmdfaW5jX3B0cihjdXJfc3JjLCBlc2l6ZVtpXSwgMSk7DQo+ID4gIAkJfQ0KPiA+DQo+ ID4gLQkJaWYgKHJ0ZV9yaW5nX2Z1bGwocnApICE9IDEpIHsNCj4gPiAtCQkJcHJpbnRmKCIlczog cmluZyBpcyBub3QgZnVsbCBidXQgaXQgc2hvdWxkIGJlXG4iLA0KPiA+IC0JCQkJX19mdW5jX18p Ow0KPiA+IC0JCQlnb3RvIGZhaWxfdGVzdDsNCj4gPiAtCQl9DQo+ID4gKwkJVEVTVF9SSU5HX1ZF UklGWShydGVfcmluZ19mdWxsKHJwKSA9PSAxLCBycCk7DQo+ID4NCj4gPiAgCQlmb3IgKGogPSAw OyBqIDwgUklOR19TSVpFIC0gMTsgaisrKSB7DQo+ID4gIAkJCXJldCA9IHRlc3RfcmluZ19kZXF1 ZXVlKHJwLCBjdXJfZHN0LCBlc2l6ZVtpXSwgMSwNCj4gPiAgCQkJCVRFU1RfUklOR19USFJFQURf REVGIHwNCj4gVEVTVF9SSU5HX0VMRU1fU0lOR0xFKTsNCj4gPiAtCQkJaWYgKHJldCAhPSAwKSB7 DQo+ID4gLQkJCQlwcmludGYoIiVzOiBydGVfcmluZ19kZXF1ZXVlIGZhaWxzXG4iLA0KPiA+IC0J CQkJCV9fZnVuY19fKTsNCj4gPiAtCQkJCWdvdG8gZmFpbF90ZXN0Ow0KPiA+IC0JCQl9DQo+ID4g KwkJCVRFU1RfUklOR19WRVJJRlkocmV0ID09IDAsIHJwKTsNCj4gPiAgCQkJY3VyX2RzdCA9IHRl c3RfcmluZ19pbmNfcHRyKGN1cl9kc3QsIGVzaXplW2ldLCAxKTsNCj4gPiAgCQl9DQo+ID4NCj4g PiAtCQlpZiAocnRlX3JpbmdfZW1wdHkocnApICE9IDEpIHsNCj4gPiAtCQkJcHJpbnRmKCIlczog cmluZyBpcyBub3QgZW1wdHkgYnV0IGl0IHNob3VsZCBiZVxuIiwNCj4gPiAtCQkJCV9fZnVuY19f KTsNCj4gPiAtCQkJZ290byBmYWlsX3Rlc3Q7DQo+ID4gLQkJfQ0KPiA+ICsJCVRFU1RfUklOR19W RVJJRlkocnRlX3JpbmdfZW1wdHkocnApID09IDEsIHJwKTsNCj4gPg0KPiA+ICAJCS8qIGNoZWNr IGRhdGEgKi8NCj4gPiAtCQlpZiAodGVzdF9yaW5nX21lbV9jbXAoc3JjLCBkc3QsIFJURV9QVFJf RElGRihjdXJfZHN0LCBkc3QpKSkNCj4gPiAtCQkJZ290byBmYWlsX3Rlc3Q7DQo+ID4gKwkJVEVT VF9SSU5HX1ZFUklGWSh0ZXN0X3JpbmdfbWVtX2NtcChzcmMsIGRzdCwNCj4gPiArCQkJCQlSVEVf UFRSX0RJRkYoY3VyX2RzdCwgZHN0KSkgPT0gMCwgcnApOw0KPiA+DQo+ID4gIAkJLyogRm9sbG93 aW5nIHRlc3RzIHVzZSB0aGUgY29uZmlndXJlZCBmbGFncyB0byBkZWNpZGUNCj4gPiAgCQkgKiBT UC9TQyBvciBNUC9NQy4NCj4gPiBAQCAtODgwLDQwICs4NDcsMjggQEAgdGVzdF9yaW5nX2Jhc2lj X2V4KHZvaWQpDQo+ID4gIAkJLyogQ292ZXJpbmcgdGhlIHJpbmcgYnVyc3Qgb3BlcmF0aW9uICov DQo+ID4gIAkJcmV0ID0gdGVzdF9yaW5nX2VucXVldWUocnAsIGN1cl9zcmMsIGVzaXplW2ldLCAy LA0KPiA+ICAJCQkJVEVTVF9SSU5HX1RIUkVBRF9ERUYgfA0KPiBURVNUX1JJTkdfRUxFTV9CVVJT VCk7DQo+ID4gLQkJaWYgKHJldCAhPSAyKSB7DQo+ID4gLQkJCXByaW50ZigiJXM6IHJ0ZV9yaW5n X2VucXVldWVfYnVyc3QgZmFpbHNcbiIsIF9fZnVuY19fKTsNCj4gPiAtCQkJZ290byBmYWlsX3Rl c3Q7DQo+ID4gLQkJfQ0KPiA+ICsJCVRFU1RfUklOR19WRVJJRlkocmV0ID09IDIsIHJwKTsNCj4g PiAgCQljdXJfc3JjID0gdGVzdF9yaW5nX2luY19wdHIoY3VyX3NyYywgZXNpemVbaV0sIDIpOw0K PiA+DQo+ID4gIAkJcmV0ID0gdGVzdF9yaW5nX2RlcXVldWUocnAsIGN1cl9kc3QsIGVzaXplW2ld LCAyLA0KPiA+ICAJCQkJVEVTVF9SSU5HX1RIUkVBRF9ERUYgfA0KPiBURVNUX1JJTkdfRUxFTV9C VVJTVCk7DQo+ID4gLQkJaWYgKHJldCAhPSAyKSB7DQo+ID4gLQkJCXByaW50ZigiJXM6IHJ0ZV9y aW5nX2RlcXVldWVfYnVyc3QgZmFpbHNcbiIsIF9fZnVuY19fKTsNCj4gPiAtCQkJZ290byBmYWls X3Rlc3Q7DQo+ID4gLQkJfQ0KPiA+ICsJCVRFU1RfUklOR19WRVJJRlkocmV0ID09IDIsIHJwKTsN Cj4gPiAgCQljdXJfZHN0ID0gdGVzdF9yaW5nX2luY19wdHIoY3VyX2RzdCwgZXNpemVbaV0sIDIp Ow0KPiA+DQo+ID4gIAkJLyogQ292ZXJpbmcgdGhlIHJpbmcgYnVsayBvcGVyYXRpb24gKi8NCj4g PiAgCQlyZXQgPSB0ZXN0X3JpbmdfZW5xdWV1ZShycCwgY3VyX3NyYywgZXNpemVbaV0sIDIsDQo+ ID4gIAkJCQlURVNUX1JJTkdfVEhSRUFEX0RFRiB8DQo+IFRFU1RfUklOR19FTEVNX0JVTEspOw0K PiA+IC0JCWlmIChyZXQgIT0gMikgew0KPiA+IC0JCQlwcmludGYoIiVzOiBydGVfcmluZ19lbnF1 ZXVlX2J1bGsgZmFpbHNcbiIsIF9fZnVuY19fKTsNCj4gPiAtCQkJZ290byBmYWlsX3Rlc3Q7DQo+ ID4gLQkJfQ0KPiA+ICsJCVRFU1RfUklOR19WRVJJRlkocmV0ID09IDIsIHJwKTsNCj4gPiAgCQlj dXJfc3JjID0gdGVzdF9yaW5nX2luY19wdHIoY3VyX3NyYywgZXNpemVbaV0sIDIpOw0KPiA+DQo+ ID4gIAkJcmV0ID0gdGVzdF9yaW5nX2RlcXVldWUocnAsIGN1cl9kc3QsIGVzaXplW2ldLCAyLA0K PiA+ICAJCQkJVEVTVF9SSU5HX1RIUkVBRF9ERUYgfA0KPiBURVNUX1JJTkdfRUxFTV9CVUxLKTsN Cj4gPiAtCQlpZiAocmV0ICE9IDIpIHsNCj4gPiAtCQkJcHJpbnRmKCIlczogcnRlX3JpbmdfZGVx dWV1ZV9idWxrIGZhaWxzXG4iLCBfX2Z1bmNfXyk7DQo+ID4gLQkJCWdvdG8gZmFpbF90ZXN0Ow0K PiA+IC0JCX0NCj4gPiArCQlURVNUX1JJTkdfVkVSSUZZKHJldCA9PSAyLCBycCk7DQo+ID4gIAkJ Y3VyX2RzdCA9IHRlc3RfcmluZ19pbmNfcHRyKGN1cl9kc3QsIGVzaXplW2ldLCAyKTsNCj4gPg0K PiA+ICAJCS8qIGNoZWNrIGRhdGEgKi8NCj4gPiAtCQlpZiAodGVzdF9yaW5nX21lbV9jbXAoc3Jj LCBkc3QsIFJURV9QVFJfRElGRihjdXJfZHN0LCBkc3QpKSkNCj4gPiAtCQkJZ290byBmYWlsX3Rl c3Q7DQo+ID4gKwkJVEVTVF9SSU5HX1ZFUklGWSh0ZXN0X3JpbmdfbWVtX2NtcChzcmMsIGRzdCwN Cj4gPiArCQkJCQlSVEVfUFRSX0RJRkYoY3VyX2RzdCwgZHN0KSkgPT0gMCwgcnApOw0KPiA+DQo+ ID4gIAkJcnRlX3JpbmdfZnJlZShycCk7DQo+ID4gIAkJcnRlX2ZyZWUoc3JjKTsNCj4gPiBAQCAt OTI1LDcgKzg4MCw3IEBAIHRlc3RfcmluZ19iYXNpY19leCh2b2lkKQ0KPiA+DQo+ID4gIAlyZXR1 cm4gMDsNCj4gPg0KPiA+IC1mYWlsX3Rlc3Q6DQo+ID4gK2ZhaWw6DQo+ID4gIAlydGVfcmluZ19m cmVlKHJwKTsNCj4gPiAgCXJ0ZV9mcmVlKHNyYyk7DQo+ID4gIAlydGVfZnJlZShkc3QpOw0KPiA+ IEBAIC05NTUsNyArOTEwLDcgQEAgdGVzdF9yaW5nX3dpdGhfZXhhY3Rfc2l6ZSh2b2lkKQ0KPiA+ ICAJCQkJCVJJTkdfRl9TUF9FTlEgfCBSSU5HX0ZfU0NfREVRKTsNCj4gPiAgCQlpZiAoc3RkX3Ig PT0gTlVMTCkgew0KPiA+ICAJCQlwcmludGYoIiVzOiBlcnJvciwgY2FuJ3QgY3JlYXRlIHN0ZCBy aW5nXG4iLCBfX2Z1bmNfXyk7DQo+ID4gLQkJCWdvdG8gdGVzdF9mYWlsOw0KPiA+ICsJCQlnb3Rv IGZhaWw7DQo+ID4gIAkJfQ0KPiA+ICAJCWV4YWN0X3N6X3IgPSB0ZXN0X3JpbmdfY3JlYXRlKCJl eGFjdCBzeiIsIGVzaXplW2ldLCByaW5nX3N6LA0KPiA+ICAJCQkJcnRlX3NvY2tldF9pZCgpLA0K PiA+IEBAIC05NjQsNyArOTE5LDcgQEAgdGVzdF9yaW5nX3dpdGhfZXhhY3Rfc2l6ZSh2b2lkKQ0K PiA+ICAJCWlmIChleGFjdF9zel9yID09IE5VTEwpIHsNCj4gPiAgCQkJcHJpbnRmKCIlczogZXJy b3IsIGNhbid0IGNyZWF0ZSBleGFjdCBzaXplIHJpbmdcbiIsDQo+ID4gIAkJCQkJX19mdW5jX18p Ow0KPiA+IC0JCQlnb3RvIHRlc3RfZmFpbDsNCj4gPiArCQkJZ290byBmYWlsOw0KPiA+ICAJCX0N Cj4gPg0KPiA+ICAJCS8qIGFsbG9jIG9iamVjdCBwb2ludGVycy4gQWxsb2NhdGUgb25lIGV4dHJh IG9iamVjdCBAQCAtOTcyLDE0DQo+ID4gKzkyNywxNCBAQCB0ZXN0X3Jpbmdfd2l0aF9leGFjdF9z aXplKHZvaWQpDQo+ID4gIAkJICovDQo+ID4gIAkJc3JjX29yaWcgPSB0ZXN0X3JpbmdfY2FsbG9j KDE3LCBlc2l6ZVtpXSk7DQo+ID4gIAkJaWYgKHNyY19vcmlnID09IE5VTEwpDQo+ID4gLQkJCWdv dG8gdGVzdF9mYWlsOw0KPiA+ICsJCQlnb3RvIGZhaWw7DQo+ID4gIAkJdGVzdF9yaW5nX21lbV9p bml0KHNyY19vcmlnLCAxNywgZXNpemVbaV0pOw0KPiA+ICAJCXNyYyA9ICh2b2lkICoqKSgodWlu dHB0cl90KXNyY19vcmlnICsgMSk7DQo+ID4gIAkJY3VyX3NyYyA9IHNyYzsNCj4gPg0KPiA+ICAJ CWRzdF9vcmlnID0gdGVzdF9yaW5nX2NhbGxvYygxNywgZXNpemVbaV0pOw0KPiA+ICAJCWlmIChk c3Rfb3JpZyA9PSBOVUxMKQ0KPiA+IC0JCQlnb3RvIHRlc3RfZmFpbDsNCj4gPiArCQkJZ290byBm YWlsOw0KPiA+ICAJCWRzdCA9ICh2b2lkICoqKSgodWludHB0cl90KWRzdF9vcmlnICsgMSk7DQo+ ID4gIAkJY3VyX2RzdCA9IGRzdDsNCj4gPg0KPiA+IEBAIC05ODcsMTMgKzk0Miw5IEBAIHRlc3Rf cmluZ193aXRoX2V4YWN0X3NpemUodm9pZCkNCj4gPiAgCQkgKiBDaGVjayB0aGF0IHRoZSBleGFj dCBzaXplIHJpbmcgaXMgYmlnZ2VyIHRoYW4gdGhlDQo+ID4gIAkJICogc3RhbmRhcmQgcmluZw0K PiA+ICAJCSAqLw0KPiA+IC0JCWlmIChydGVfcmluZ19nZXRfc2l6ZShzdGRfcikgPj0gcnRlX3Jp bmdfZ2V0X3NpemUoZXhhY3Rfc3pfcikpIHsNCj4gPiAtCQkJcHJpbnRmKCIlczogZXJyb3IsIHN0 ZCByaW5nIChzaXplOiAldSkgaXMgbm90IHNtYWxsZXIgdGhhbg0KPiBleGFjdCBzaXplIG9uZSAo c2l6ZSAldSlcbiIsDQo+ID4gLQkJCQkJX19mdW5jX18sDQo+ID4gLQkJCQkJcnRlX3JpbmdfZ2V0 X3NpemUoc3RkX3IpLA0KPiA+IC0JCQkJCXJ0ZV9yaW5nX2dldF9zaXplKGV4YWN0X3N6X3IpKTsN Cj4gPiAtCQkJZ290byB0ZXN0X2ZhaWw7DQo+ID4gLQkJfQ0KPiA+ICsJCVRFU1RfUklOR19WRVJJ RlkocnRlX3JpbmdfZ2V0X3NpemUoc3RkX3IpIDw9DQo+ID4gKwkJCQlydGVfcmluZ19nZXRfc2l6 ZShleGFjdF9zel9yKSwgc3RkX3IpOw0KPiA+ICsNCj4gPiAgCQkvKg0KPiA+ICAJCSAqIGNoZWNr IHRoYXQgdGhlIGV4YWN0X3N6X3JpbmcgY2FuIGhvbGQgb25lIG1vcmUgZWxlbWVudA0KPiA+ICAJ CSAqIHRoYW4gdGhlIHN0YW5kYXJkIHJpbmcuICgxNiB2cyAxNSBlbGVtZW50cykgQEAgLTEwMDEs NTMNCj4gKzk1MiwzNA0KPiA+IEBAIHRlc3RfcmluZ193aXRoX2V4YWN0X3NpemUodm9pZCkNCj4g PiAgCQlmb3IgKGogPSAwOyBqIDwgcmluZ19zeiAtIDE7IGorKykgew0KPiA+ICAJCQlyZXQgPSB0 ZXN0X3JpbmdfZW5xdWV1ZShzdGRfciwgY3VyX3NyYywgZXNpemVbaV0sIDEsDQo+ID4gIAkJCQlU RVNUX1JJTkdfVEhSRUFEX0RFRiB8DQo+IFRFU1RfUklOR19FTEVNX1NJTkdMRSk7DQo+ID4gLQkJ CWlmIChyZXQgIT0gMCkgew0KPiA+IC0JCQkJcHJpbnRmKCIlczogZXJyb3IsIGVucXVldWUgZmFp bGVkXG4iLCBfX2Z1bmNfXyk7DQo+ID4gLQkJCQlnb3RvIHRlc3RfZmFpbDsNCj4gPiAtCQkJfQ0K PiA+ICsJCQlURVNUX1JJTkdfVkVSSUZZKHJldCA9PSAwLCBzdGRfcik7DQo+ID4gIAkJCXJldCA9 IHRlc3RfcmluZ19lbnF1ZXVlKGV4YWN0X3N6X3IsIGN1cl9zcmMsIGVzaXplW2ldLCAxLA0KPiA+ ICAJCQkJVEVTVF9SSU5HX1RIUkVBRF9ERUYgfA0KPiBURVNUX1JJTkdfRUxFTV9TSU5HTEUpOw0K PiA+IC0JCQlpZiAocmV0ICE9IDApIHsNCj4gPiAtCQkJCXByaW50ZigiJXM6IGVycm9yLCBlbnF1 ZXVlIGZhaWxlZFxuIiwgX19mdW5jX18pOw0KPiA+IC0JCQkJZ290byB0ZXN0X2ZhaWw7DQo+ID4g LQkJCX0NCj4gPiArCQkJVEVTVF9SSU5HX1ZFUklGWShyZXQgPT0gMCwgZXhhY3Rfc3pfcik7DQo+ ID4gIAkJCWN1cl9zcmMgPSB0ZXN0X3JpbmdfaW5jX3B0cihjdXJfc3JjLCBlc2l6ZVtpXSwgMSk7 DQo+ID4gIAkJfQ0KPiA+ICAJCXJldCA9IHRlc3RfcmluZ19lbnF1ZXVlKHN0ZF9yLCBjdXJfc3Jj LCBlc2l6ZVtpXSwgMSwNCj4gPiAgCQkJCVRFU1RfUklOR19USFJFQURfREVGIHwNCj4gVEVTVF9S SU5HX0VMRU1fU0lOR0xFKTsNCj4gPiAtCQlpZiAocmV0ICE9IC1FTk9CVUZTKSB7DQo+ID4gLQkJ CXByaW50ZigiJXM6IGVycm9yLCB1bmV4cGVjdGVkIHN1Y2Nlc3NmdWwgZW5xdWV1ZVxuIiwNCj4g PiAtCQkJCV9fZnVuY19fKTsNCj4gPiAtCQkJZ290byB0ZXN0X2ZhaWw7DQo+ID4gLQkJfQ0KPiA+ ICsJCVRFU1RfUklOR19WRVJJRlkocmV0ID09IC1FTk9CVUZTLCBzdGRfcik7DQo+ID4gIAkJcmV0 ID0gdGVzdF9yaW5nX2VucXVldWUoZXhhY3Rfc3pfciwgY3VyX3NyYywgZXNpemVbaV0sIDEsDQo+ ID4gIAkJCQlURVNUX1JJTkdfVEhSRUFEX0RFRiB8DQo+IFRFU1RfUklOR19FTEVNX1NJTkdMRSk7 DQo+ID4gLQkJaWYgKHJldCA9PSAtRU5PQlVGUykgew0KPiA+IC0JCQlwcmludGYoIiVzOiBlcnJv ciwgZW5xdWV1ZSBmYWlsZWRcbiIsIF9fZnVuY19fKTsNCj4gPiAtCQkJZ290byB0ZXN0X2ZhaWw7 DQo+ID4gLQkJfQ0KPiA+ICsJCVRFU1RfUklOR19WRVJJRlkocmV0ICE9IC1FTk9CVUZTLCBleGFj dF9zel9yKTsNCj4gPiAgCQljdXJfc3JjID0gdGVzdF9yaW5nX2luY19wdHIoY3VyX3NyYywgZXNp emVbaV0sIDEpOw0KPiA+DQo+ID4gIAkJLyogY2hlY2sgdGhhdCBkZXF1ZXVlIHJldHVybnMgdGhl IGV4cGVjdGVkIG51bWJlciBvZg0KPiBlbGVtZW50cyAqLw0KPiA+ICAJCXJldCA9IHRlc3Rfcmlu Z19kZXF1ZXVlKGV4YWN0X3N6X3IsIGN1cl9kc3QsIGVzaXplW2ldLCByaW5nX3N6LA0KPiA+ICAJ CQkJVEVTVF9SSU5HX1RIUkVBRF9ERUYgfA0KPiBURVNUX1JJTkdfRUxFTV9CVVJTVCk7DQo+ID4g LQkJaWYgKHJldCAhPSAoaW50KXJpbmdfc3opIHsNCj4gPiAtCQkJcHJpbnRmKCIlczogZXJyb3Is IGZhaWxlZCB0byBkZXF1ZXVlIGV4cGVjdGVkIG5iIG9mDQo+IGVsZW1lbnRzXG4iLA0KPiA+IC0J CQkJX19mdW5jX18pOw0KPiA+IC0JCQlnb3RvIHRlc3RfZmFpbDsNCj4gPiAtCQl9DQo+ID4gKwkJ VEVTVF9SSU5HX1ZFUklGWShyZXQgPT0gKGludClyaW5nX3N6LCBleGFjdF9zel9yKTsNCj4gPiAg CQljdXJfZHN0ID0gdGVzdF9yaW5nX2luY19wdHIoY3VyX2RzdCwgZXNpemVbaV0sIHJpbmdfc3op Ow0KPiA+DQo+ID4gIAkJLyogY2hlY2sgdGhhdCB0aGUgY2FwYWNpdHkgZnVuY3Rpb24gcmV0dXJu cyBleHBlY3RlZCB2YWx1ZSAqLw0KPiA+IC0JCWlmIChydGVfcmluZ19nZXRfY2FwYWNpdHkoZXhh Y3Rfc3pfcikgIT0gcmluZ19zeikgew0KPiA+IC0JCQlwcmludGYoIiVzOiBlcnJvciwgaW5jb3Jy ZWN0IHJpbmcgY2FwYWNpdHkgcmVwb3J0ZWRcbiIsDQo+ID4gLQkJCQkJX19mdW5jX18pOw0KPiA+ IC0JCQlnb3RvIHRlc3RfZmFpbDsNCj4gPiAtCQl9DQo+ID4gKwkJVEVTVF9SSU5HX1ZFUklGWShy dGVfcmluZ19nZXRfY2FwYWNpdHkoZXhhY3Rfc3pfcikgPT0NCj4gcmluZ19zeiwNCj4gPiArCQkJ CQlleGFjdF9zel9yKTsNCj4gPg0KPiA+ICAJCS8qIGNoZWNrIGRhdGEgKi8NCj4gPiAtCQlpZiAo dGVzdF9yaW5nX21lbV9jbXAoc3JjLCBkc3QsIFJURV9QVFJfRElGRihjdXJfZHN0LCBkc3QpKSkN Cj4gPiAtCQkJZ290byB0ZXN0X2ZhaWw7DQo+ID4gKwkJVEVTVF9SSU5HX1ZFUklGWSh0ZXN0X3Jp bmdfbWVtX2NtcChzcmMsIGRzdCwNCj4gPiArCQkJCQlSVEVfUFRSX0RJRkYoY3VyX2RzdCwgZHN0 KSkgPT0gMCwNCj4gPiArCQkJCQlleGFjdF9zel9yKTsNCj4gPg0KPiA+ICAJCXJ0ZV9mcmVlKHNy Y19vcmlnKTsNCj4gPiAgCQlydGVfZnJlZShkc3Rfb3JpZyk7DQo+ID4gQEAgLTEwNjEsNyArOTkz LDcgQEAgdGVzdF9yaW5nX3dpdGhfZXhhY3Rfc2l6ZSh2b2lkKQ0KPiA+DQo+ID4gIAlyZXR1cm4g MDsNCj4gPg0KPiA+IC10ZXN0X2ZhaWw6DQo+ID4gK2ZhaWw6DQo+ID4gIAlydGVfZnJlZShzcmNf b3JpZyk7DQo+ID4gIAlydGVfZnJlZShkc3Rfb3JpZyk7DQo+ID4gIAlydGVfcmluZ19mcmVlKHN0 ZF9yKTsNCj4gPiAtLQ0KPiA+IDIuMTcuMQ0KDQo=