From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from mm01.cs.columbia.edu (mm01.cs.columbia.edu [128.59.11.253]) by smtp.lore.kernel.org (Postfix) with ESMTP id 9F838C433F5 for ; Wed, 2 Mar 2022 20:46:03 +0000 (UTC) Received: from localhost (localhost [127.0.0.1]) by mm01.cs.columbia.edu (Postfix) with ESMTP id 0821749E37; Wed, 2 Mar 2022 15:46:03 -0500 (EST) X-Virus-Scanned: at lists.cs.columbia.edu Authentication-Results: mm01.cs.columbia.edu (amavisd-new); dkim=softfail (fail, message has been altered) header.i=@google.com Received: from mm01.cs.columbia.edu ([127.0.0.1]) by localhost (mm01.cs.columbia.edu [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id JWeD7GvYzFqg; Wed, 2 Mar 2022 15:46:01 -0500 (EST) Received: from mm01.cs.columbia.edu (localhost [127.0.0.1]) by mm01.cs.columbia.edu (Postfix) with ESMTP id 1AA0A43C8C; Wed, 2 Mar 2022 15:46:01 -0500 (EST) Received: from localhost (localhost [127.0.0.1]) by mm01.cs.columbia.edu (Postfix) with ESMTP id 6DEC440453 for ; Wed, 2 Mar 2022 15:46:00 -0500 (EST) X-Virus-Scanned: at lists.cs.columbia.edu Received: from mm01.cs.columbia.edu ([127.0.0.1]) by localhost (mm01.cs.columbia.edu [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id t2dgMXSi9ZyX for ; Wed, 2 Mar 2022 15:45:58 -0500 (EST) Received: from mail-io1-f43.google.com (mail-io1-f43.google.com [209.85.166.43]) by mm01.cs.columbia.edu (Postfix) with ESMTPS id 5800C400D1 for ; Wed, 2 Mar 2022 15:45:58 -0500 (EST) Received: by mail-io1-f43.google.com with SMTP id c14so3289091ioa.12 for ; Wed, 02 Mar 2022 12:45:58 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20210112; h=date:from:to:cc:subject:message-id:references:mime-version :content-disposition:content-transfer-encoding:in-reply-to; bh=sC8HgvGhycwbIkBkRa0H3817hbrvs9K+5ktETx35brg=; b=WjoyVdyP1DEoiyM9TbpGnLH37lm86E3U0yIW4SG/xFzMOKMeWgqCAHouXtG+2PJcBo JS8HKiXFb31+T+k3EhydSqlId5y3JGpmOScMUpcPDJ9VISo6jYHcDoupIHhuTPqRhP5q JaRFuTITwM37JoHUSpOc1PuUyvI/EhUED4mncweowdOyCvZr5kushIgSThWCgxBQlHvc 1DWAJt5EN42fKlfqUKKHsFbPxsMDuvH03BpbRmNr19Mbar63Lxu8KdjUjS/yq3jiTRuX 9UoJy1tUpSjtcgZWcBVd54Q7agnvTajAvygHLmhKgvhtFysEkMIgHNANIfYz/6BU5NCN IyiQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:date:from:to:cc:subject:message-id:references :mime-version:content-disposition:content-transfer-encoding :in-reply-to; bh=sC8HgvGhycwbIkBkRa0H3817hbrvs9K+5ktETx35brg=; b=l3bNJUVPOOWVc6b6lZzaAx3S/+ULKobSLTg6+PYG7B+ttSHJQili+ZifAJwN8vgm6n HQEyXK51FLaDDmpxJwBBL3uqb4HnAXXoT57fyOBx6M60ZSrffhXSry1rqj56qVTKdKjk pC+JCvCDzYRKjxa9dRY6lRIKL987ceHmAYUuOgfPhi+PxoetCuIXBVVtNIxGXXMBK2Ts JzwN1K5iYIDjk8aNFJeghL4k4mVFkTkVL9FTKFwM2GCJ/R3TxcY6aJnt5grszxrIMRL3 g9M0vQyQySw882Np5vtxbDCnTrh+/UXl86RGR+eeijEAblo7QiL7kMNJLNfLnMdkXAvw S3CQ== X-Gm-Message-State: AOAM53059PpdaTP6tGoqoz0O2aV9MnVKdXgwNZrRnHXLaMlVzIAJVWpN IJVoVXNmHjHCxxEQS+/GmuP5iw== X-Google-Smtp-Source: ABdhPJxpzs8g98SwO8HWGSe8R2DqFGwOnfD1r2xzLLxf6i3d4eMT+DhOTO+ZtZje7fx2FOouO2KLsQ== X-Received: by 2002:a02:7fd6:0:b0:311:b1c6:e796 with SMTP id r205-20020a027fd6000000b00311b1c6e796mr26440004jac.295.1646253957127; Wed, 02 Mar 2022 12:45:57 -0800 (PST) Received: from google.com (194.225.68.34.bc.googleusercontent.com. [34.68.225.194]) by smtp.gmail.com with ESMTPSA id q14-20020a92050e000000b002c16ddafb48sm48766ile.49.2022.03.02.12.45.56 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 02 Mar 2022 12:45:56 -0800 (PST) Date: Wed, 2 Mar 2022 20:45:53 +0000 From: Oliver Upton To: Ricardo Koller Subject: Re: [PATCH 2/3] KVM: arm64: selftests: add arch_timer_edge_cases Message-ID: References: <20220302172144.2734258-1-ricarkol@google.com> <20220302172144.2734258-3-ricarkol@google.com> MIME-Version: 1.0 Content-Disposition: inline In-Reply-To: <20220302172144.2734258-3-ricarkol@google.com> Cc: kvm@vger.kernel.org, maz@kernel.org, pbonzini@redhat.com, kvmarm@lists.cs.columbia.edu X-BeenThere: kvmarm@lists.cs.columbia.edu X-Mailman-Version: 2.1.14 Precedence: list List-Id: Where KVM/ARM decisions are made List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Errors-To: kvmarm-bounces@lists.cs.columbia.edu Sender: kvmarm-bounces@lists.cs.columbia.edu SGkgUmljYXJkbywKCk9uIFdlZCwgTWFyIDAyLCAyMDIyIGF0IDA5OjIxOjQzQU0gLTA4MDAsIFJp Y2FyZG8gS29sbGVyIHdyb3RlOgo+IEFkZCBhbiBhcmNoX3RpbWVyIGVkZ2UtY2FzZXMgc2VsZnRl c3QuIEZvciBub3csIGp1c3QgYWRkIHNvbWUgYmFzaWMKPiBzYW5pdHkgY2hlY2tzLCBhbmQgc29t ZSBzdHJlc3MgY29uZGl0aW9ucyAobGlrZSB3YWl0aW5nIGZvciB0aGUgdGltZXJzCj4gd2hpbGUg cmUtc2NoZWR1bGluZyB0aGUgdmNwdSkuIFRoZSBuZXh0IGNvbW1pdCB3aWxsIGFkZCB0aGUgYWN0 dWFsIGVkZ2UKPiBjYXNlIHRlc3RzLgo+IAo+IFRoaXMgdGVzdCBmYWlscyB3aXRob3V0IGE4Njdl OWQwY2MxICJLVk06IGFybTY0OiBEb24ndCBtaXNzIHBlbmRpbmcKPiBpbnRlcnJ1cHRzIGZvciBz dXNwZW5kZWQgdkNQVSIuCj4gCgpUZXN0aW5nIHRpbWVyIGNvcnJlY3RuZXNzIGlzIGV4dHJlbWVs eSBjaGFsbGVuZ2luZyB0byBkbyB3aXRob3V0CmluaGVyZW50IGZsYWtpbmVzcy4gSSBoYXZlIHNv bWUgY29uY2VybnMgYWJvdXQgdGhlIGV4cGVjdGF0aW9ucyB0aGF0IGEKdGltZXIgSVJRIHNob3Vs ZCBmaXJlIGluIGEgZ2l2ZW4gYW1vdW50IG9mIHRpbWUsIGFzIGl0IGlzIHBvc3NpYmxlIHRvCmZs YWtlIGZvciBhbnkgbnVtYmVyIG9mIGJlbmlnbiByZWFzb25zIChzdWNoIGFzIGhpZ2ggQ1BVIGxv YWQgaW4gdGhlCmhvc3QpLgoKV2hpbGUgdGhlIGFyY2hpdGVjdHVyZSBtYXkgc3VnZ2VzdCB0aGF0 IHRoZSB0aW1lciBzaG91bGQgZmlyZSBhcyBzb29uIGFzCkNWQUwgaXMgbWV0OgoKICBUaW1lckNv bmRpdGlvbk1ldCA9ICgoKENvdW50ZXJbNjM6MF0g4oCTIE9mZnNldFs2MzowXSlbNjM6MF0gLSBD b21wYXJlVmFsdWVbNjM6MF0pID49IDApCgpIb3dldmVyLCB0aGUgYXJjaGl0ZWN0dXJlIGlzIGV4 dHJlbWVseSBpbXByZWNpc2UgYXMgdG8gd2hlbiBhbiBpbnRlcnJ1cHQKc2hvdWxkIGJlIHRha2Vu OgoKICBJbiB0aGUgYWJzZW5jZSBvZiBhIHNwZWNpZmljIHJlcXVpcmVtZW50IHRvIHRha2UgYW4g aW50ZXJydXB0LCB0aGUKICBhcmNoaXRlY3R1cmUgb25seSByZXF1aXJlcyB0aGF0IHVubWFza2Vk IHBlbmRpbmcgaW50ZXJydXB0cyBhcmUgdGFrZW4KICBpbiBmaW5pdGUgdGltZS4gW0RESTA0ODdH LmIgRDEuMTMuNCAiUHJpb3JpdGl6YXRpb24gYW5kIHJlY29nbml0aW9uIG9mCiAgaW50ZXJydXB0 cyJdCgpJdCBzZWVtcyB0byBtZSB0aGF0IHRoZSBvbmx5IHRoaW5nIHdlIGNhbiBwb3NpdGl2ZWx5 IGFzc2VydCBpcyB0aGF0IGEKdGltZXIgaW50ZXJydXB0IHNob3VsZCBuZXZlciBiZSB0YWtlbiBl YXJseS4gTm93IC0tIEkgYWdyZWUgdGhhdCB0aGVyZQppcyB2YWx1ZSBpbiB0ZXN0aW5nIHRoYXQg dGhlIGludGVycnVwdCBiZSB0YWtlbiBpbiBib3VuZGVkIHRpbWUsIGJ1dCBpdHMKaGFyZCB0byBw aWNrIGEgZ29vZCB2YWx1ZSBmb3IgaXQuCgpQZXJoYXBzIGRvY3VtZW50aW5nIHRoZSBwb3NzaWJp bGl0eSBvZiBmbGFrZXMgaW4gdGhlIHRlc3QgaXMgd2FycmFudGVkLAphbG9uZyB3aXRoIHNvbWUg a25vYnMgdG8gYWRqdXN0IHRoZXNlIHZhbHVlcyBmb3IgYW55IHBhcnRpY3VsYXJseSBiYWQKaW1w bGVtZW50YXRpb24uCgo+IFJldmlld2VkLWJ5OiBSZWlqaSBXYXRhbmFiZSA8cmVpaml3QGdvb2ds ZS5jb20+Cj4gUmV2aWV3ZWQtYnk6IFJhZ2hhdmVuZHJhIFJhbyBBbmFudGEgPHJhbmFudGFAZ29v Z2xlLmNvbT4KPiBTaWduZWQtb2ZmLWJ5OiBSaWNhcmRvIEtvbGxlciA8cmljYXJrb2xAZ29vZ2xl LmNvbT4KPiAtLS0KPiAgdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtLy5naXRpZ25vcmUgICAg ICAgIHwgICAxICsKPiAgdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL01ha2VmaWxlICAgICAg ICAgIHwgICAxICsKPiAgLi4uL2t2bS9hYXJjaDY0L2FyY2hfdGltZXJfZWRnZV9jYXNlcy5jICAg ICAgIHwgNjM0ICsrKysrKysrKysrKysrKysrKwo+ICAzIGZpbGVzIGNoYW5nZWQsIDYzNiBpbnNl cnRpb25zKCspCj4gIGNyZWF0ZSBtb2RlIDEwMDY0NCB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9r dm0vYWFyY2g2NC9hcmNoX3RpbWVyX2VkZ2VfY2FzZXMuYwo+IAo+IGRpZmYgLS1naXQgYS90b29s cy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vLmdpdGlnbm9yZSBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRl c3RzL2t2bS8uZ2l0aWdub3JlCj4gaW5kZXggZGNlN2RlNzc1NWU2Li44ZjdlMDEyM2RkMjggMTAw NjQ0Cj4gLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtLy5naXRpZ25vcmUKPiArKysg Yi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vLmdpdGlnbm9yZQo+IEBAIC0xLDUgKzEsNiBA QAo+ICAjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHkKPiAgL2FhcmNoNjQv YXJjaF90aW1lcgo+ICsvYWFyY2g2NC9hcmNoX3RpbWVyX2VkZ2VfY2FzZXMKPiAgL2FhcmNoNjQv ZGVidWctZXhjZXB0aW9ucwo+ICAvYWFyY2g2NC9nZXQtcmVnLWxpc3QKPiAgL2FhcmNoNjQvcHNj aV9jcHVfb25fdGVzdAo+IGRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0v TWFrZWZpbGUgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vTWFrZWZpbGUKPiBpbmRleCAw ZTQ5MjZiYzlhNTguLjE3YTBmMzJjZmM5MSAxMDA2NDQKPiAtLS0gYS90b29scy90ZXN0aW5nL3Nl bGZ0ZXN0cy9rdm0vTWFrZWZpbGUKPiArKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0v TWFrZWZpbGUKPiBAQCAtMTAxLDYgKzEwMSw3IEBAIFRFU1RfR0VOX1BST0dTX3g4Nl82NCArPSBr dm1fYmluYXJ5X3N0YXRzX3Rlc3QKPiAgVEVTVF9HRU5fUFJPR1NfeDg2XzY0ICs9IHN5c3RlbV9j b3VudGVyX29mZnNldF90ZXN0Cj4gIAo+ICBURVNUX0dFTl9QUk9HU19hYXJjaDY0ICs9IGFhcmNo NjQvYXJjaF90aW1lcgo+ICtURVNUX0dFTl9QUk9HU19hYXJjaDY0ICs9IGFhcmNoNjQvYXJjaF90 aW1lcl9lZGdlX2Nhc2VzCj4gIFRFU1RfR0VOX1BST0dTX2FhcmNoNjQgKz0gYWFyY2g2NC9kZWJ1 Zy1leGNlcHRpb25zCj4gIFRFU1RfR0VOX1BST0dTX2FhcmNoNjQgKz0gYWFyY2g2NC9nZXQtcmVn LWxpc3QKPiAgVEVTVF9HRU5fUFJPR1NfYWFyY2g2NCArPSBhYXJjaDY0L3BzY2lfY3B1X29uX3Rl c3QKPiBkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2FhcmNoNjQvYXJj aF90aW1lcl9lZGdlX2Nhc2VzLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vYWFyY2g2 NC9hcmNoX3RpbWVyX2VkZ2VfY2FzZXMuYwo+IG5ldyBmaWxlIG1vZGUgMTAwNjQ0Cj4gaW5kZXgg MDAwMDAwMDAwMDAwLi40OGM4ODZiY2U4NDkKPiAtLS0gL2Rldi9udWxsCj4gKysrIGIvdG9vbHMv dGVzdGluZy9zZWxmdGVzdHMva3ZtL2FhcmNoNjQvYXJjaF90aW1lcl9lZGdlX2Nhc2VzLmMKPiBA QCAtMCwwICsxLDYzNCBAQAo+ICsvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1v bmx5Cj4gKy8qCj4gKyAqIGFyY2hfdGltZXJfZWRnZV9jYXNlcy5jIC0gVGVzdHMgdGhlIGFhcmNo NjQgdGltZXIgSVJRIGZ1bmN0aW9uYWxpdHkuCj4gKyAqCj4gKyAqIENvcHlyaWdodCAoYykgMjAy MSwgR29vZ2xlIExMQy4KPiArICovCj4gKwo+ICsjZGVmaW5lIF9HTlVfU09VUkNFCj4gKwo+ICsj aW5jbHVkZSA8c3RkbGliLmg+Cj4gKyNpbmNsdWRlIDxwdGhyZWFkLmg+Cj4gKyNpbmNsdWRlIDxs aW51eC9rdm0uaD4KPiArI2luY2x1ZGUgPGxpbnV4L3NpemVzLmg+Cj4gKyNpbmNsdWRlIDxsaW51 eC9iaXRtYXAuaD4KPiArI2luY2x1ZGUgPHNjaGVkLmg+Cj4gKyNpbmNsdWRlIDxzeXMvc3lzaW5m by5oPgo+ICsKPiArI2luY2x1ZGUgImt2bV91dGlsLmgiCj4gKyNpbmNsdWRlICJwcm9jZXNzb3Iu aCIKPiArI2luY2x1ZGUgImRlbGF5LmgiCj4gKyNpbmNsdWRlICJhcmNoX3RpbWVyLmgiCj4gKyNp bmNsdWRlICJnaWMuaCIKPiArI2luY2x1ZGUgInZnaWMuaCIKPiArCj4gKyNkZWZpbmUgVkNQVUlE CQkJCTAKPiArCj4gKyNkZWZpbmUgbXNlY3NfdG9fdXNlY3MobXNlYykJCSgobXNlYykgKiAxMDAw TEwpCj4gKwo+ICsjZGVmaW5lIENWQUxfTUFYCQkJfjBVTEwKPiArLyogdHZhbCBpcyBhIHNpZ25l ZCAzMi1iaXQgaW50LiAqLwo+ICsjZGVmaW5lIFRWQUxfTUFYCQkJSU5UX01BWAo+ICsjZGVmaW5l IFRWQUxfTUlOCQkJSU5UX01JTgo+ICsKPiArI2RlZmluZSBHSUNEX0JBU0VfR1BBCQkJMHg4MDAw MDAwVUxMCj4gKyNkZWZpbmUgR0lDUl9CQVNFX0dQQQkJCTB4ODBBMDAwMFVMTAo+ICsKPiArLyog QWZ0ZXIgaG93IG11Y2ggdGltZSB3ZSBzYXkgdGhlcmUgaXMgbm8gSVJRLiAqLwo+ICsjZGVmaW5l IFRJTUVPVVRfTk9fSVJRX1VTCQltc2Vjc190b191c2Vjcyg1MCkKPiArCj4gKy8qIDFtcyBzb3Vu ZHMgYSBiaXQgZXhjZXNzaXZlLCBidXQgUUVNVS1UQ0cgaXMgc2xvdy4gKi8KPiArI2RlZmluZSBU RVNUX01BUkdJTl9VUwkJCTEwMDBVTEwKPiArCj4gKy8qIEEgbmljZSBjb3VudGVyIHZhbHVlIHRv IHVzZSBhcyB0aGUgc3RhcnRpbmcgb25lIGZvciBtb3N0IHRlc3RzLiAqLwo+ICsjZGVmaW5lIERF Rl9DTlQJCQkJKENWQUxfTUFYIC8gMikKPiArCj4gKy8qIE51bWJlciBvZiBydW5zLiAqLwo+ICsj ZGVmaW5lIE5SX1RFU1RfSVRFUlNfREVGCQk1Cj4gKwo+ICsvKiBTaGFyZWQgd2l0aCBJUlEgaGFu ZGxlci4gKi8KPiArdm9sYXRpbGUgc3RydWN0IHRlc3RfdmNwdV9zaGFyZWRfZGF0YSB7Cj4gKwlp bnQgaGFuZGxlZDsKPiArfSBzaGFyZWRfZGF0YTsKPiArCj4gK3N0cnVjdCB0ZXN0X2FyZ3Mgewo+ ICsJLyogVmlydHVhbCBvciBwaHlzaWNhbCB0aW1lciBhbmQgY291bnRlciB0ZXN0cy4gKi8KPiAr CWVudW0gYXJjaF90aW1lciB0aW1lcjsKPiArCS8qIE51bWJlciBvZiBpdGVyYXRpb25zLiAqLwo+ ICsJaW50IGl0ZXJhdGlvbnM7Cj4gK307Cj4gKwo+ICtzdHJ1Y3QgdGVzdF9hcmdzIHRlc3RfYXJn cyA9IHsKPiArCS8qIE9ubHkgdGVzdGluZyBWSVJUVUFMIHRpbWVycyBmb3Igbm93LiAqLwo+ICsJ LnRpbWVyID0gVklSVFVBTCwKPiArCS5pdGVyYXRpb25zID0gTlJfVEVTVF9JVEVSU19ERUYsCj4g K307Cj4gKwo+ICtzdGF0aWMgaW50IHZ0aW1lcl9pcnEsIHB0aW1lcl9pcnE7Cj4gKwo+ICt0eXBl ZGVmIGVudW0gc3luY19jbWQgewo+ICsJU0VUX1JFR19LVk1fUkVHX0FSTV9USU1FUl9DTlQgPSAx MDAwMDEsCj4gKwlVU0VSU1BBQ0VfU0NIRURfWUlFTEQsCj4gKwlVU0VSU1BBQ0VfTUlHUkFURV9T RUxGLAo+ICt9IHN5bmNfY21kX3Q7Cj4gKwo+ICt0eXBlZGVmIHZvaWQgKCp3ZmlfbWV0aG9kX3Qp KHZvaWQpOwo+ICsKCm5pdDogdGhlIG5hbWUgc3VnZ2VzdHMgdG8gbWUgYSBXRkkgaW4gdGhlIGFy Y2hpdGVjdHVyYWwgc2Vuc2UsIGJ1dCBpdAphcHBlYXJzIHBvbGxpbmcgaXMgZW1wbG95ZWQgaW4g Y2VydGFpbiBpbXBsZW1lbnRhdGlvbnMuIFBlcmhhcHMgY2FsbCBpdAp3YWl0X21ldGhvZF90PwoK PiArc3RhdGljIHZvaWQgd2FpdF9mb3Jfbm9uX3NwdXJpb3VzX2lycSh2b2lkKTsKPiArc3RhdGlj IHZvaWQgd2FpdF9wb2xsX2Zvcl9pcnEodm9pZCk7Cj4gK3N0YXRpYyB2b2lkIHdhaXRfc2NoZWRf cG9sbF9mb3JfaXJxKHZvaWQpOwo+ICtzdGF0aWMgdm9pZCB3YWl0X21pZ3JhdGVfcG9sbF9mb3Jf aXJxKHZvaWQpOwo+ICsKPiArd2ZpX21ldGhvZF90IHdmaV9tZXRob2RbXSA9IHsKPiArCXdhaXRf Zm9yX25vbl9zcHVyaW91c19pcnEsCj4gKwl3YWl0X3BvbGxfZm9yX2lycSwKPiArCXdhaXRfc2No ZWRfcG9sbF9mb3JfaXJxLAo+ICsJd2FpdF9taWdyYXRlX3BvbGxfZm9yX2lycSwKPiArfTsKPiAr Cj4gKyNkZWZpbmUgZm9yX2VhY2hfd2ZpX21ldGhvZChpKQkJCQkJCQlcCj4gKwlmb3IgKChpKSA9 IDA7IChpKSA8IEFSUkFZX1NJWkUod2ZpX21ldGhvZCk7IChpKSsrKQoKbml0OiBmb3Igc2ltcGxl IGl0ZXJhdG9ycyBzdWNoIGFzIHRoaXMsIEkgd291bGQgcHJlZmVyIGl0IGJlIG9wZW4tY29kZWQK aW5zdGVhZCBvZiBkZWZpbmVkIGluIGEgbWFjcm8uCgo+ICt0eXBlZGVmIGVudW0gdGltZXJfdmll dyB7Cj4gKwlUSU1FUl9DVkFMID0gMSwKCm5pdDogZG8gd2UgY2FyZSBhYm91dCB0aGUgZW51bWVy YXRpb24gdmFsdWU/IFNhbWUgZ29lcyBmb3IgZW51bQpzeW5jX2NtZC4KCj4gKwlUSU1FUl9UVkFM LAo+ICt9IHRpbWVyX3ZpZXdfdDsKCm5pdDogZHJvcCB0aGUgdHlwZWRlZiBhbmQganVzdCByZWZl ciB0byB0aGUgZW51bSB0eXBlIGV4cGxpY2l0bHkuIEknZApyZWNvbW1lbmQgdGhpcyBmb3Igb3Ro ZXIgZW51bXMgaW4gdGhpcyB0ZXN0IGFzIHdlbGwuCgo+ICsKPiArLyogUGFpciBvZiBwY3B1cyBm b3IgdGhlIHRlc3QgdG8gYWx0ZXJuYXRlIGJldHdlZW4uICovCj4gK3N0YXRpYyBpbnQgcGNwdXNb Ml0gPSB7LTEsIC0xfTsKPiArc3RhdGljIGludCBwY3B1c19pZHg7Cj4gKwo+ICtzdGF0aWMgdWlu dDMyX3QgbmV4dF9wY3B1KHZvaWQpCj4gK3sKPiArCXBjcHVzX2lkeCA9IDEgLSBwY3B1c19pZHg7 Cj4gKwlyZXR1cm4gcGNwdXNbcGNwdXNfaWR4XTsKPiArfQo+ICsKPiArI2RlZmluZSBBU1NFUlRf SVJRU19IQU5ETEVEXzIoX19uciwgYXJnMSwgYXJnMikgZG8gewkJCQlcCj4gKwlpbnQgX19oID0g c2hhcmVkX2RhdGEuaGFuZGxlZDsJCQkJCQlcCj4gKwlHVUVTVF9BU1NFUlRfNChfX2ggPT0gKF9f bnIpLCBfX2gsIF9fbnIsIGFyZzEsIGFyZzIpOwkJCVwKPiArfSB3aGlsZSAoMCkKPiArCj4gKyNk ZWZpbmUgQVNTRVJUX0lSUVNfSEFORExFRF8xKF9fbnIsIGFyZzEpCQkJCQlcCj4gKwlBU1NFUlRf SVJRU19IQU5ETEVEXzIoKF9fbnIpLCBhcmcxLCAwKQo+ICsKPiArI2RlZmluZSBBU1NFUlRfSVJR U19IQU5ETEVEKF9fbnIpCQkJCQkJXAo+ICsJQVNTRVJUX0lSUVNfSEFORExFRF8yKChfX25yKSwg MCwgMCkKPiArCj4gKyNkZWZpbmUgVElNRVJfR0VUX0NUTCgpCQkJCQkJCQlcCj4gKwl0aW1lcl9n ZXRfY3RsKHRlc3RfYXJncy50aW1lcikKPiArCj4gKyNkZWZpbmUgVElNRVJfU0VUX0NUTChfX2N0 bCkJCQkJCQkJXAo+ICsJdGltZXJfc2V0X2N0bCh0ZXN0X2FyZ3MudGltZXIsIChfX2N0bCkpCj4g Kwo+ICsjZGVmaW5lIFRJTUVSX1NFVF9DVkFMKF9fY3ZhbCkJCQkJCQkJXAo+ICsJdGltZXJfc2V0 X2N2YWwodGVzdF9hcmdzLnRpbWVyLCAoX19jdmFsKSkKPiArCj4gKyNkZWZpbmUgVElNRVJfU0VU X1RWQUwoX190dmFsKQkJCQkJCQlcCj4gKwl0aW1lcl9zZXRfdHZhbCh0ZXN0X2FyZ3MudGltZXIs IChfX3R2YWwpKQo+ICsKPiArI2RlZmluZSBUSU1FUl9HRVRfQ1ZBTCgpCQkJCQkJCVwKPiArCXRp bWVyX2dldF9jdmFsKHRlc3RfYXJncy50aW1lcikKPiArCj4gKyNkZWZpbmUgVElNRVJfR0VUX1RW QUwoKQkJCQkJCQlcCj4gKwl0aW1lcl9nZXRfdHZhbCh0ZXN0X2FyZ3MudGltZXIpCj4gKwo+ICsj ZGVmaW5lIFRJTUVSX0dFVF9DTlRDVCgpCQkJCQkJCVwKPiArCXRpbWVyX2dldF9jbnRjdCh0ZXN0 X2FyZ3MudGltZXIpCgpJdCBtaWdodCBiZSBjbGVhbmVyIHRvIGF2b2lkIHRoZXNlIG1hY3JvIGlu ZGlyZWN0aW9ucyBhbmQganVzdCBoYXZlIHRoZQpjYWxsZXIgcGFzcyB0ZXN0X2FyZ3MudGltZXIg b24gaXRzIG93bi4gQ291bGQgdXNlIGEgbG9jYWwgdmFyaWFibGUgaW4KdGhlIGNhbGxlciBib2R5 IHRvIGF2b2lkIHJlZmVyZW5jaW5nIHRoZSBzdHJ1Y3QgZXZlcnkgdGltZS4KCj4gKyNkZWZpbmUg X19TRVRfQ09VTlRFUihfX2N0ciwgX190KQkJCQkJCVwKPiArCUdVRVNUX1NZTkNfQVJHUyhTRVRf UkVHX0tWTV9SRUdfQVJNX1RJTUVSX0NOVCwgKF9fY3RyKSwgKF9fdCksIDAsIDApCj4gKwo+ICsj ZGVmaW5lIFNFVF9DT1VOVEVSKF9fY3RyKQkJCQkJCQlcCj4gKwlfX1NFVF9DT1VOVEVSKChfX2N0 ciksIHRlc3RfYXJncy50aW1lcikKPiArCj4gKyNkZWZpbmUgVVNFUlNQQUNFX0NNRChfX2NtZCkJ CQkJCQkJXAo+ICsJR1VFU1RfU1lOQ19BUkdTKF9fY21kLCAwLCAwLCAwLCAwKQo+ICsKPiArI2Rl ZmluZSBVU0VSU1BBQ0VfU0NIRURVTEUoKQkJCQkJCQlcCj4gKwlVU0VSU1BBQ0VfQ01EKFVTRVJT UEFDRV9TQ0hFRF9ZSUVMRCkKPiArCj4gKyNkZWZpbmUgVVNFUlNQQUNFX01JR1JBVEVfVkNQVSgp CQkJCQkJXAo+ICsJVVNFUlNQQUNFX0NNRChVU0VSU1BBQ0VfTUlHUkFURV9TRUxGKQo+ICsKPiAr I2RlZmluZSBJQVJfU1BVUklPVVMJCTEwMjMKPiArCgpob3cgYWJvdXQgSU5USURfU1BVUklPVVM/ IEFsc28sIHRoaXMgaXMgYW4gaW52YXJpYW50IGluIHRoZSBHSUMKYXJjaGl0ZWN0dXJlLCBzbyBt YXliZSBob2lzdCBpdCBpbnRvIHRoZSBzZWxmdGVzdHMgR0lDIGhlYWRlcnMuCgo+ICtzdGF0aWMg dm9pZCBndWVzdF9pcnFfaGFuZGxlcihzdHJ1Y3QgZXhfcmVncyAqcmVncykKPiArewo+ICsJdW5z aWduZWQgaW50IGludGlkID0gZ2ljX2dldF9hbmRfYWNrX2lycSgpOwo+ICsJdWludDY0X3QgY250 LCBjdmFsOwo+ICsJdWludDMyX3QgY3RsOwo+ICsKPiArCUdVRVNUX0FTU0VSVChnaWNfaXJxX2dl dF9wZW5kaW5nKGludGlkKSk7Cj4gKwo+ICsJaWYgKGludGlkID09IElBUl9TUFVSSU9VUykKPiAr CQlyZXR1cm47Cj4gKwo+ICsJY3RsID0gVElNRVJfR0VUX0NUTCgpOwo+ICsJY250ID0gVElNRVJf R0VUX0NOVENUKCk7Cj4gKwljdmFsID0gVElNRVJfR0VUX0NWQUwoKTsKPiArCj4gKwlHVUVTVF9B U1NFUlRfMShjdGwgJiBDVExfSVNUQVRVUywgY3RsKTsKPiArCj4gKwkvKiBEaXNhYmxlIGFuZCBt YXNrIHRoZSB0aW1lci4gKi8KPiArCVRJTUVSX1NFVF9DVEwoQ1RMX0lNQVNLKTsKPiArCUdVRVNU X0FTU0VSVCghZ2ljX2lycV9nZXRfcGVuZGluZyhpbnRpZCkpOwo+ICsKPiArCXNoYXJlZF9kYXRh LmhhbmRsZWQrKzsKPiArCj4gKwlHVUVTVF9BU1NFUlRfMihjbnQgPj0gY3ZhbCwgY250LCBjdmFs KTsKPiArCj4gKwlnaWNfc2V0X2VvaShpbnRpZCk7Cj4gK30KPiArCj4gK3N0YXRpYyB2b2lkIHNl dF9jdmFsX2lycSh1aW50NjRfdCBjdmFsX2N5Y2xlcywgdWludDMyX3QgY3RsKQo+ICt7Cj4gKwlz aGFyZWRfZGF0YS5oYW5kbGVkID0gMDsKPiArCVRJTUVSX1NFVF9DVkFMKGN2YWxfY3ljbGVzKTsK PiArCVRJTUVSX1NFVF9DVEwoY3RsKTsKPiArfQo+ICsKPiArc3RhdGljIHZvaWQgc2V0X3R2YWxf aXJxKHVpbnQ2NF90IHR2YWxfY3ljbGVzLCB1aW50MzJfdCBjdGwpCj4gK3sKPiArCXNoYXJlZF9k YXRhLmhhbmRsZWQgPSAwOwo+ICsJVElNRVJfU0VUX1RWQUwodHZhbF9jeWNsZXMpOwo+ICsJVElN RVJfU0VUX0NUTChjdGwpOwo+ICt9Cj4gKwo+ICtzdGF0aWMgdm9pZCBzZXRfeHZhbF9pcnEodWlu dDY0X3QgeHZhbCwgdWludDMyX3QgY3RsLCB0aW1lcl92aWV3X3QgdHYpCgpuaXQ6IGhvdyBhYm91 dCBwcm9ncmFtX3RpbWVyX2lycSgpLgoKPiArewo+ICsJc3dpdGNoICh0dikgewo+ICsJY2FzZSBU SU1FUl9DVkFMOgo+ICsJCXNldF9jdmFsX2lycSh4dmFsLCBjdGwpOwoKbml0OiBqdXN0IGlubGlu ZSB0aGVzZSBoZWxwZXJzIGludG8gdGhlIHN3aXRjaCBzdGF0ZW1lbnQgYm9keS4KCj4gKwkJYnJl YWs7Cj4gKwljYXNlIFRJTUVSX1RWQUw6Cj4gKwkJc2V0X3R2YWxfaXJxKHh2YWwsIGN0bCk7Cj4g KwkJYnJlYWs7Cj4gKwlkZWZhdWx0Ogo+ICsJCUdVRVNUX0FTU0VSVCgwKTsKPiArCX0KPiArfQo+ ICsKPiArLyoKPiArICogU2hvdWxkIGJlIGNhbGxlZCB3aXRoIElSUXMgbWFza2VkLgo+ICsgKgo+ ICsgKiBOb3RlIHRoYXQgdGhpcyBjYW4gaGFuZyBmb3JldmVyLCBzbyB3ZSByZWx5IG9uIGhhdmlu ZyBhIHRpbWVvdXQgbWVjaGFuaXNtIGluCj4gKyAqIHRoZSAicnVubmVyIiwgbGlrZTogdG9vbHMv dGVzdGluZy9zZWxmdGVzdHMva3NlbGZ0ZXN0L3J1bm5lci5zaC4KPiArICovCj4gK3N0YXRpYyB2 b2lkIHdhaXRfZm9yX25vbl9zcHVyaW91c19pcnEodm9pZCkKPiArewo+ICsJaW50IGg7Cj4gKwo+ ICsJZm9yIChoID0gc2hhcmVkX2RhdGEuaGFuZGxlZDsgaCA9PSBzaGFyZWRfZGF0YS5oYW5kbGVk Oykgewo+ICsJCWFzbSB2b2xhdGlsZSgid2ZpXG4iCj4gKwkJCSAgICAgIm1zciBkYWlmY2xyLCAj MlxuIgo+ICsJCQkgICAgIC8qIGhhbmRsZSBJUlEgKi8KPiArCQkJICAgICAibXNyIGRhaWZzZXQs ICMyXG4iCj4gKwkJCSAgICAgOiA6IDogIm1lbW9yeSIpOwo+ICsJfQo+ICt9Cj4gKwo+ICsvKgo+ ICsgKiBXYWl0IGZvciBhbiBub24tc3B1cmlvdXMgSVJRIGJ5IHBvbGxpbmcgaW4gdGhlIGd1ZXN0 ICh1c2Vyc3BhY2U9MCkgb3IgaW4KPiArICogdXNlcnNwYWNlIChlLmcuLCB1c2Vyc3BhY2U9MSBh bmQgdXNlcnNwYWNlX2NtZD1VU0VSU1BBQ0VfU0NIRURfWUlFTEQpLgo+ICsgKgo+ICsgKiBTaG91 bGQgYmUgY2FsbGVkIHdpdGggSVJRcyBtYXNrZWQuIE5vdCByZWFsbHkgbmVlZGVkIGxpa2UgdGhl IHdmaSBhYm92ZSwgYnV0Cj4gKyAqIGl0IHNob3VsZCBtYXRjaCB0aGUgb3RoZXJzLgo+ICsgKgo+ ICsgKiBOb3RlIHRoYXQgdGhpcyBjYW4gaGFuZyBmb3JldmVyLCBzbyB3ZSByZWx5IG9uIGhhdmlu ZyBhIHRpbWVvdXQgbWVjaGFuaXNtIGluCj4gKyAqIHRoZSAicnVubmVyIiwgbGlrZTogdG9vbHMv dGVzdGluZy9zZWxmdGVzdHMva3NlbGZ0ZXN0L3J1bm5lci5zaC4KPiArICovCj4gK3N0YXRpYyB2 b2lkIHBvbGxfZm9yX25vbl9zcHVyaW91c19pcnEoYm9vbCB1c2Vyc3BhY2UsIHN5bmNfY21kX3Qg dXNlcnNwYWNlX2NtZCkKPiArewo+ICsJaW50IGg7Cj4gKwo+ICsJaCA9IHNoYXJlZF9kYXRhLmhh bmRsZWQ7Cj4gKwo+ICsJbG9jYWxfaXJxX2VuYWJsZSgpOwo+ICsJd2hpbGUgKGggPT0gc2hhcmVk X2RhdGEuaGFuZGxlZCkgewo+ICsJCWlmICh1c2Vyc3BhY2UpCj4gKwkJCVVTRVJTUEFDRV9DTUQo dXNlcnNwYWNlX2NtZCk7Cj4gKwkJZWxzZQo+ICsJCQljcHVfcmVsYXgoKTsKPiArCX0KPiArCWxv Y2FsX2lycV9kaXNhYmxlKCk7Cj4gK30KPiArCj4gK3N0YXRpYyB2b2lkIHdhaXRfcG9sbF9mb3Jf aXJxKHZvaWQpCj4gK3sKPiArCXBvbGxfZm9yX25vbl9zcHVyaW91c19pcnEoZmFsc2UsIC0xKTsK PiArfQo+ICsKPiArc3RhdGljIHZvaWQgd2FpdF9zY2hlZF9wb2xsX2Zvcl9pcnEodm9pZCkKPiAr ewo+ICsJcG9sbF9mb3Jfbm9uX3NwdXJpb3VzX2lycSh0cnVlLCBVU0VSU1BBQ0VfU0NIRURfWUlF TEQpOwo+ICt9Cj4gKwo+ICtzdGF0aWMgdm9pZCB3YWl0X21pZ3JhdGVfcG9sbF9mb3JfaXJxKHZv aWQpCj4gK3sKPiArCXBvbGxfZm9yX25vbl9zcHVyaW91c19pcnEodHJ1ZSwgVVNFUlNQQUNFX01J R1JBVEVfU0VMRik7Cj4gK30KPiArCj4gKy8qCj4gKyAqIFJlc2V0IHRoZSB0aW1lciBzdGF0ZSB0 byBzb21lIG5pY2UgdmFsdWVzIGxpa2UgdGhlIGNvdW50ZXIgbm90IGJlaW5nIGNsb3NlCj4gKyAq IHRvIHRoZSBlZGdlLCBhbmQgdGhlIGNvbnRyb2wgcmVnaXN0ZXIgbWFza2VkIGFuZCBkaXNhYmxl ZC4KPiArICovCj4gK3N0YXRpYyB2b2lkIHJlc2V0X3RpbWVyX3N0YXRlKHVpbnQ2NF90IGNudCkK PiArewo+ICsJU0VUX0NPVU5URVIoY250KTsKPiArCVRJTUVSX1NFVF9DVEwoQ1RMX0lNQVNLKTsK PiArfQo+ICsKPiArc3RhdGljIHZvaWQgdGVzdF90aW1lcl94dmFsKHVpbnQ2NF90IHh2YWwsIHRp bWVyX3ZpZXdfdCB0diwgd2ZpX21ldGhvZF90IHdtLAo+ICsJCWJvb2wgcmVzZXRfc3RhdGUsIHVp bnQ2NF90IHJlc2V0X2NudCkKPiArewo+ICsJbG9jYWxfaXJxX2Rpc2FibGUoKTsKPiArCj4gKwlp ZiAocmVzZXRfc3RhdGUpCj4gKwkJcmVzZXRfdGltZXJfc3RhdGUocmVzZXRfY250KTsKPiArCj4g KwlzZXRfeHZhbF9pcnEoeHZhbCwgQ1RMX0VOQUJMRSwgdHYpOwo+ICsJd20oKTsKPiArCj4gKwlB U1NFUlRfSVJRU19IQU5ETEVEXzIoMSwgdHYsIHdtKTsKClByaW50aW5nIHRoZSBmdW5jdGlvbiBw b2ludGVyIHByb2JhYmx5IGlzbid0IHRvbyBoZWxwZnVsIHcvbyBpbnNwZWN0aW5nCnRoZSBiaW5h cnkuCgo+ICsJbG9jYWxfaXJxX2VuYWJsZSgpOwo+ICt9Cj4gKwo+ICsvKgo+ICsgKiBUaGUgdGVz dF90aW1lcl8qIGZ1bmN0aW9ucyB3aWxsIHByb2dyYW0gdGhlIHRpbWVyLCB3YWl0IGZvciBpdCwg YW5kIGFzc2VydAo+ICsgKiB0aGUgZmlyaW5nIG9mIHRoZSBjb3JyZWN0IElSUS4KPiArICoKPiAr ICogVGhlc2UgZnVuY3Rpb25zIGRvbid0IGhhdmUgYSB0aW1lb3V0IGFuZCByZXR1cm4gYXMgc29v biBhcyB0aGV5IHJlY2VpdmUgYW4KPiArICogSVJRLiBUaGV5IGNhbiBoYW5nIChmb3JldmVyKSwg c28gd2UgcmVseSBvbiBoYXZpbmcgYSB0aW1lb3V0IG1lY2hhbmlzbSBpbgo+ICsgKiB0aGUgInJ1 bm5lciIsIGxpa2U6IHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2tzZWxmdGVzdC9ydW5uZXIuc2gu Cj4gKyAqLwoKTGlmdCB0aGUgaGFuZyBjb21tZW50YXJ5IGludG8gdGhlIHRvcC1sZXZlbCBjb21t ZW50Cgo+ICtzdGF0aWMgdm9pZCB0ZXN0X3RpbWVyX2N2YWwodWludDY0X3QgY3ZhbCwgd2ZpX21l dGhvZF90IHdtLCBib29sIHJlc2V0X3N0YXRlLAo+ICsJCXVpbnQ2NF90IHJlc2V0X2NudCkKPiAr ewo+ICsJdGVzdF90aW1lcl94dmFsKGN2YWwsIFRJTUVSX0NWQUwsIHdtLCByZXNldF9zdGF0ZSwg cmVzZXRfY250KTsKPiArfQo+ICsKPiArc3RhdGljIHZvaWQgdGVzdF90aW1lcl90dmFsKGludDMy X3QgdHZhbCwgd2ZpX21ldGhvZF90IHdtLCBib29sIHJlc2V0X3N0YXRlLAo+ICsJCXVpbnQ2NF90 IHJlc2V0X2NudCkKPiArewo+ICsJdGVzdF90aW1lcl94dmFsKCh1aW50NjRfdCl0dmFsLCBUSU1F Ul9UVkFMLCB3bSwgcmVzZXRfc3RhdGUsIHJlc2V0X2NudCk7Cj4gK30KPiArCj4gK3N0YXRpYyB2 b2lkIHRlc3RfYmFzaWNfZnVuY3Rpb25hbGl0eSh2b2lkKQo+ICt7Cj4gKwlpbnQzMl90IHR2YWwg PSAoaW50MzJfdCltc2VjX3RvX2N5Y2xlcygxMCk7Cj4gKwl1aW50NjRfdCBjdmFsOwo+ICsJaW50 IGk7Cj4gKwo+ICsJZm9yX2VhY2hfd2ZpX21ldGhvZChpKSB7Cj4gKwkJd2ZpX21ldGhvZF90IHdt ID0gd2ZpX21ldGhvZFtpXTsKPiArCj4gKwkJY3ZhbCA9IERFRl9DTlQgKyBtc2VjX3RvX2N5Y2xl cygxMCk7Cj4gKwo+ICsJCXRlc3RfdGltZXJfY3ZhbChjdmFsLCB3bSwgdHJ1ZSwgREVGX0NOVCk7 Cj4gKwkJdGVzdF90aW1lcl90dmFsKHR2YWwsIHdtLCB0cnVlLCBERUZfQ05UKTsKPiArCX0KPiAr fQo+ICsKPiArLyoKPiArICogVGhpcyB0ZXN0IGNoZWNrcyBiYXNpYyB0aW1lciBiZWhhdmlvciB3 aXRob3V0IGFjdHVhbGx5IGZpcmluZyB0aW1lcnMsIHRoaW5ncwo+ICsgKiBsaWtlOiB0aGUgcmVs YXRpb25zaGlwIGJldHdlZW4gY3ZhbCBhbmQgdHZhbCwgdHZhbCBkb3duLWNvdW50aW5nLgo+ICsg Ki8KPiArc3RhdGljIHZvaWQgdGltZXJzX3Nhbml0eV9jaGVja3MoYm9vbCB1c2Vfc2NoZWQpCj4g K3sKPiArCXJlc2V0X3RpbWVyX3N0YXRlKERFRl9DTlQpOwo+ICsKPiArCWxvY2FsX2lycV9kaXNh YmxlKCk7Cj4gKwo+ICsJLyogY3ZhbCBpbiB0aGUgcGFzdCAqLwo+ICsJVElNRVJfU0VUX0NWQUwo VElNRVJfR0VUX0NOVENUKCkgLSBtc2VjX3RvX2N5Y2xlcygxMCkpOwo+ICsJaWYgKHVzZV9zY2hl ZCkKPiArCQlVU0VSU1BBQ0VfU0NIRURVTEUoKTsKPiArCUdVRVNUX0FTU0VSVChUSU1FUl9HRVRf VFZBTCgpIDwgMCk7Cj4gKwo+ICsJLyogdHZhbCBpbiB0aGUgcGFzdCAqLwo+ICsJVElNRVJfU0VU X1RWQUwoLTEpOwo+ICsJaWYgKHVzZV9zY2hlZCkKPiArCQlVU0VSU1BBQ0VfU0NIRURVTEUoKTsK PiArCUdVRVNUX0FTU0VSVChUSU1FUl9HRVRfQ1ZBTCgpIDwgVElNRVJfR0VUX0NOVENUKCkpOwo+ ICsKPiArCS8qIHR2YWwgbGFyZ2VyIHRoYW4gVFZBTF9NQVguICovCj4gKwlUSU1FUl9TRVRfQ1ZB TChUSU1FUl9HRVRfQ05UQ1QoKSArIFRWQUxfTUFYICsgbXNlY190b19jeWNsZXMoMTApKTsKPiAr CWlmICh1c2Vfc2NoZWQpCj4gKwkJVVNFUlNQQUNFX1NDSEVEVUxFKCk7Cj4gKwlHVUVTVF9BU1NF UlQoVElNRVJfR0VUX1RWQUwoKSA8PSAwKTsKPiArCj4gKwkvKgo+ICsJICogdHZhbCBsYXJnZXIg dGhhbiAyICogVFZBTF9NQVguCj4gKwkgKiBUd2ljZSB0aGUgVFZBTF9NQVggY29tcGxldGVseSBs b29wcyBhcm91bmQgdGhlIFRWQUwuCj4gKwkgKi8KPiArCVRJTUVSX1NFVF9DVkFMKFRJTUVSX0dF VF9DTlRDVCgpICsgMlVMTCAqIFRWQUxfTUFYICsgbXNlY190b19jeWNsZXMoMTApKTsKPiArCWlm ICh1c2Vfc2NoZWQpCj4gKwkJVVNFUlNQQUNFX1NDSEVEVUxFKCk7Cj4gKwlHVUVTVF9BU1NFUlRf MShUSU1FUl9HRVRfVFZBTCgpIDw9IG1zZWNfdG9fY3ljbGVzKDEwKSwgVElNRVJfR0VUX1RWQUwo KSk7Cj4gKwo+ICsJLyogbmVnYXRpdmUgdHZhbCB0aGF0IHJvbGxvdmVycyBmcm9tIDAuICovCj4g KwlTRVRfQ09VTlRFUihtc2VjX3RvX2N5Y2xlcygxKSk7Cj4gKwlUSU1FUl9TRVRfVFZBTCgtMSAq IG1zZWNfdG9fY3ljbGVzKDEwKSk7Cj4gKwlpZiAodXNlX3NjaGVkKQo+ICsJCVVTRVJTUEFDRV9T Q0hFRFVMRSgpOwo+ICsJR1VFU1RfQVNTRVJUKFRJTUVSX0dFVF9DVkFMKCkgPj0gKENWQUxfTUFY IC0gbXNlY190b19jeWNsZXMoOSkpKTsKPiArCj4gKwkvKiB0dmFsIHNob3VsZCBrZWVwIGRvd24t Y291bnRpbmcgZnJvbSAwIHRvIC0xLiAqLwo+ICsJVElNRVJfU0VUX1RWQUwoMCk7Cj4gKwkvKiBX ZSBqdXN0IG5lZWQgMSBjeWNsZSB0byBwYXNzLiAqLwo+ICsJaXNiKCk7Cj4gKwlHVUVTVF9BU1NF UlQoVElNRVJfR0VUX1RWQUwoKSA8IDApOwo+ICsKPiArCWxvY2FsX2lycV9lbmFibGUoKTsKPiAr Cj4gKwkvKiBNYXNrIGFuZCBkaXNhYmxlIGFueSBwZW5kaW5nIHRpbWVyLiAqLwo+ICsJVElNRVJf U0VUX0NUTChDVExfSU1BU0spOwo+ICt9CgpUaGVyZSBhcmUgaW5zdGFuY2VzIG9mIG5vdC1zby1z YW5lIEdlbmVyaWMgVGltZXJzLCBzdWNoIGFzIHRoZSBYR2VuZS0xCnRoYXQgcHJvYmFibHkgd29u J3QgYmUgZnVuIHRvIHRlc3QuIE1hcmMgd291bGQga25vdyBtb3JlIGFib3V0IHRoaXMsIGJ1dAp0 aGVyZSBtYXkgbmVlZCB0byBiZSBhIGRlbnlsaXN0IG9mIGJhZCBpbXBsZW1lbnRhdGlvbnMuCgo+ ICtzdGF0aWMgdm9pZCB0ZXN0X3RpbWVyc19zYW5pdHlfY2hlY2tzKHZvaWQpCj4gK3sKPiArCXRp bWVyc19zYW5pdHlfY2hlY2tzKGZhbHNlKTsKPiArCS8qIENoZWNrIGhvdyBLVk0gc2F2ZXMvcmVz dG9yZXMgdGhlc2UgZWRnZS1jYXNlIHZhbHVlcy4gKi8KPiArCXRpbWVyc19zYW5pdHlfY2hlY2tz KHRydWUpOwo+ICt9Cj4gKwo+ICtzdGF0aWMgdm9pZCBndWVzdF9ydW5faXRlcmF0aW9uKHZvaWQp Cj4gK3sKPiArCXRlc3RfYmFzaWNfZnVuY3Rpb25hbGl0eSgpOwo+ICsJdGVzdF90aW1lcnNfc2Fu aXR5X2NoZWNrcygpOwo+ICt9Cj4gKwo+ICtzdGF0aWMgdm9pZCBndWVzdF9jb2RlKHZvaWQpCj4g K3sKPiArCWludCBpOwo+ICsKPiArCWxvY2FsX2lycV9kaXNhYmxlKCk7Cj4gKwo+ICsJZ2ljX2lu aXQoR0lDX1YzLCAxLCAodm9pZCAqKUdJQ0RfQkFTRV9HUEEsICh2b2lkICopR0lDUl9CQVNFX0dQ QSk7Cj4gKwo+ICsJVElNRVJfU0VUX0NUTChDVExfSU1BU0spOwo+ICsJdGltZXJfc2V0X2N0bChQ SFlTSUNBTCwgQ1RMX0lNQVNLKTsKPiArCj4gKwlnaWNfaXJxX2VuYWJsZSh2dGltZXJfaXJxKTsK PiArCWdpY19pcnFfZW5hYmxlKHB0aW1lcl9pcnEpOwo+ICsJbG9jYWxfaXJxX2VuYWJsZSgpOwo+ ICsKPiArCWZvciAoaSA9IDA7IGkgPCB0ZXN0X2FyZ3MuaXRlcmF0aW9uczsgaSsrKSB7Cj4gKwkJ R1VFU1RfU1lOQyhpKTsKPiArCQlndWVzdF9ydW5faXRlcmF0aW9uKCk7Cj4gKwl9Cj4gKwo+ICsJ R1VFU1RfRE9ORSgpOwo+ICt9Cj4gKwo+ICtzdGF0aWMgdm9pZCBtaWdyYXRlX3NlbGYodWludDMy X3QgbmV3X3BjcHUpCj4gK3sKPiArCWludCByZXQ7Cj4gKwljcHVfc2V0X3QgY3B1c2V0Owo+ICsJ cHRocmVhZF90IHRocmVhZDsKPiArCj4gKwl0aHJlYWQgPSBwdGhyZWFkX3NlbGYoKTsKPiArCj4g KwlDUFVfWkVSTygmY3B1c2V0KTsKPiArCUNQVV9TRVQobmV3X3BjcHUsICZjcHVzZXQpOwo+ICsK PiArCXByX2RlYnVnKCJNaWdyYXRpbmcgZnJvbSAldSB0byAldVxuIiwgc2NoZWRfZ2V0Y3B1KCks IG5ld19wY3B1KTsKPiArCj4gKwlyZXQgPSBwdGhyZWFkX3NldGFmZmluaXR5X25wKHRocmVhZCwg c2l6ZW9mKGNwdXNldCksICZjcHVzZXQpOwo+ICsKPiArCVRFU1RfQVNTRVJUKHJldCA9PSAwLCAi RmFpbGVkIHRvIG1pZ3JhdGUgdG8gcENQVTogJXU7IHJldDogJWRcbiIsCj4gKwkJCW5ld19wY3B1 LCByZXQpOwo+ICt9Cj4gKwo+ICsvKgo+ICsgKiBTZXQgdGhlIHR3byBwY3B1cyB0aGF0IHRoZSB0 ZXN0IHdpbGwgdXNlIHRvIGFsdGVybmF0ZSBiZXR3ZWVuLiBEZWZhdWx0IHRvCj4gKyAqIHVzZSB0 aGUgY3VycmVudCBjcHUgYXMgcGNwdXNbMF0gYW5kIHRoZSBvbmUgcmlnaHQgYWZ0ZXIgaW4gdGhl IGFmZmluaXR5IHNldAo+ICsgKiBhcyBwY3B1c1sxXS4KPiArICovCj4gK3N0YXRpYyB2b2lkIHNl dF9kZWZhdWx0X3BjcHVzKHZvaWQpCj4gK3sKPiArCWludCBtYXgJPSBnZXRfbnByb2NzKCk7Cj4g KwlpbnQgY3VyciA9IHNjaGVkX2dldGNwdSgpOwo+ICsJY3B1X3NldF90IGNwdXNldDsKPiArCWxv bmcgaTsKPiArCj4gKwlURVNUX0FTU0VSVChtYXggPiAxLCAiTmVlZCBhdCBsZWFzdCAyIG9ubGlu ZSBwY3B1cy4iKTsKClNob3VsZCB0aGUgdGVzdCBza2lwIChpbnN0ZWFkIG9mIGZhaWwpIG9uIHN1 Y2ggYSBwcmVjb25kaXRpb24/Cgo+ICsJcGNwdXNbMF0gPSBjdXJyOwo+ICsKPiArCXNjaGVkX2dl dGFmZmluaXR5KGdldHBpZCgpLCBzaXplb2YoY3B1X3NldF90KSwgJmNwdXNldCk7Cj4gKwlmb3Ig KGkgPSAoY3VyciArIDEpICUgQ1BVX1NFVFNJWkU7IGkgIT0gY3VycjsgaSA9IChpICsgMSkgJSBD UFVfU0VUU0laRSkgewo+ICsJCWlmIChDUFVfSVNTRVQoaSwgJmNwdXNldCkpIHsKPiArCQkJcGNw dXNbMV0gPSBpOwo+ICsJCQlicmVhazsKPiArCQl9Cj4gKwl9Cj4gKwo+ICsJVEVTVF9BU1NFUlQo cGNwdXNbMV0gIT0gLTEsICJDb3VsZG4ndCBmaW5kIGEgc2Vjb25kIHBjcHUuIik7Cj4gKwlwcl9k ZWJ1ZygicGNwdXM6ICVkICVkXG4iLCBwY3B1c1swXSwgcGNwdXNbMV0pOwo+ICt9Cj4gKwo+ICtz dGF0aWMgdm9pZCBrdm1fc2V0X2NudHhjdChzdHJ1Y3Qga3ZtX3ZtICp2bSwgdWludDY0X3QgY250 LCBlbnVtIGFyY2hfdGltZXIgdGltZXIpCj4gK3sKPiArCVRFU1RfQVNTRVJUKHRpbWVyID09IFZJ UlRVQUwsCj4gKwkJIk9ubHkgc3VwcG9ydHMgc2V0dGluZyB0aGUgdmlydHVhbCBjb3VudGVyIGZv ciBub3cuIik7Cj4gKwo+ICsJc3RydWN0IGt2bV9vbmVfcmVnIHJlZyA9IHsKPiArCQkuaWQgPSBL Vk1fUkVHX0FSTV9USU1FUl9DTlQsCj4gKwkJLmFkZHIgPSAodWludDY0X3QpJmNudCwKPiArCX07 Cj4gKwl2Y3B1X3NldF9yZWcodm0sIDAsICZyZWcpOwo+ICt9Cj4gKwo+ICtzdGF0aWMgdm9pZCBo YW5kbGVfc3luYyhzdHJ1Y3Qga3ZtX3ZtICp2bSwgc3RydWN0IHVjYWxsICp1YykKPiArewo+ICsJ c3luY19jbWRfdCBjbWQgPSB1Yy0+YXJnc1sxXTsKPiArCXVpbnQ2NF90IHZhbCA9IHVjLT5hcmdz WzJdOwo+ICsJZW51bSBhcmNoX3RpbWVyIHRpbWVyID0gdWMtPmFyZ3NbM107Cj4gKwo+ICsJc3dp dGNoIChjbWQpIHsKPiArCWNhc2UgU0VUX1JFR19LVk1fUkVHX0FSTV9USU1FUl9DTlQ6Cj4gKwkJ a3ZtX3NldF9jbnR4Y3Qodm0sIHZhbCwgdGltZXIpOwo+ICsJCWJyZWFrOwo+ICsJY2FzZSBVU0VS U1BBQ0VfU0NIRURfWUlFTEQ6Cj4gKwkJc2NoZWRfeWllbGQoKTsKPiArCQlicmVhazsKPiArCWNh c2UgVVNFUlNQQUNFX01JR1JBVEVfU0VMRjoKPiArCQltaWdyYXRlX3NlbGYobmV4dF9wY3B1KCkp Owo+ICsJCWJyZWFrOwo+ICsJZGVmYXVsdDoKPiArCQlicmVhazsKPiArCX0KPiArfQo+ICsKPiAr c3RhdGljIHZvaWQgdGVzdF9ydW4oc3RydWN0IGt2bV92bSAqdm0pCj4gK3sKPiArCXN0cnVjdCB1 Y2FsbCB1YzsKPiArCWludCBzdGFnZSA9IDA7Cj4gKwo+ICsJLyogU3RhcnQgb24gdGhlIGZpcnN0 IHBjcHUuICovCj4gKwltaWdyYXRlX3NlbGYocGNwdXNbMF0pOwo+ICsKPiArCXN5bmNfZ2xvYmFs X3RvX2d1ZXN0KHZtLCB0ZXN0X2FyZ3MpOwo+ICsKPiArCWZvciAoc3RhZ2UgPSAwOyA7IHN0YWdl KyspIHsKPiArCQl2Y3B1X3J1bih2bSwgVkNQVUlEKTsKPiArCQlzd2l0Y2ggKGdldF91Y2FsbCh2 bSwgVkNQVUlELCAmdWMpKSB7Cj4gKwkJY2FzZSBVQ0FMTF9TWU5DOgo+ICsJCQloYW5kbGVfc3lu Yyh2bSwgJnVjKTsKPiArCQkJYnJlYWs7Cj4gKwkJY2FzZSBVQ0FMTF9ET05FOgo+ICsJCQlnb3Rv IG91dDsKPiArCQljYXNlIFVDQUxMX0FCT1JUOgo+ICsJCQlURVNUX0ZBSUwoIiVzIGF0ICVzOiVs ZFxuXHR2YWx1ZXM6ICVsdSwgJWx1OyAlbHUiLAo+ICsJCQkJKGNvbnN0IGNoYXIgKil1Yy5hcmdz WzBdLCBfX0ZJTEVfXywgdWMuYXJnc1sxXSwKPiArCQkJCXVjLmFyZ3NbMl0sIHVjLmFyZ3NbM10s IHVjLmFyZ3NbNF0pOwo+ICsJCQlnb3RvIG91dDsKPiArCQlkZWZhdWx0Ogo+ICsJCQlURVNUX0ZB SUwoIlVuZXhwZWN0ZWQgZ3Vlc3QgZXhpdFxuIik7Cj4gKwkJfQo+ICsJfQo+ICsKPiArb3V0Ogo+ ICsJcmV0dXJuOwo+ICt9Cj4gKwo+ICtzdGF0aWMgdm9pZCB0ZXN0X2luaXRfdGltZXJfaXJxKHN0 cnVjdCBrdm1fdm0gKnZtKQo+ICt7Cj4gKwlpbnQgdmNwdV9mZCA9IHZjcHVfZ2V0X2ZkKHZtLCBW Q1BVSUQpOwo+ICsKPiArCWt2bV9kZXZpY2VfYWNjZXNzKHZjcHVfZmQsIEtWTV9BUk1fVkNQVV9U SU1FUl9DVFJMLAo+ICsJCQlLVk1fQVJNX1ZDUFVfVElNRVJfSVJRX1BUSU1FUiwgJnB0aW1lcl9p cnEsIGZhbHNlKTsKPiArCWt2bV9kZXZpY2VfYWNjZXNzKHZjcHVfZmQsIEtWTV9BUk1fVkNQVV9U SU1FUl9DVFJMLAo+ICsJCQlLVk1fQVJNX1ZDUFVfVElNRVJfSVJRX1ZUSU1FUiwgJnZ0aW1lcl9p cnEsIGZhbHNlKTsKPiArCj4gKwlzeW5jX2dsb2JhbF90b19ndWVzdCh2bSwgcHRpbWVyX2lycSk7 Cj4gKwlzeW5jX2dsb2JhbF90b19ndWVzdCh2bSwgdnRpbWVyX2lycSk7Cj4gKwo+ICsJcHJfZGVi dWcoInB0aW1lcl9pcnE6ICVkOyB2dGltZXJfaXJxOiAlZFxuIiwgcHRpbWVyX2lycSwgdnRpbWVy X2lycSk7Cj4gK30KPiArCj4gK3N0YXRpYyBzdHJ1Y3Qga3ZtX3ZtICp0ZXN0X3ZtX2NyZWF0ZSh2 b2lkKQo+ICt7Cj4gKwlzdHJ1Y3Qga3ZtX3ZtICp2bTsKPiArCj4gKwl2bSA9IHZtX2NyZWF0ZV9k ZWZhdWx0KFZDUFVJRCwgMCwgZ3Vlc3RfY29kZSk7Cj4gKwo+ICsJdm1faW5pdF9kZXNjcmlwdG9y X3RhYmxlcyh2bSk7Cj4gKwl2bV9pbnN0YWxsX2V4Y2VwdGlvbl9oYW5kbGVyKHZtLCBWRUNUT1Jf SVJRX0NVUlJFTlQsIGd1ZXN0X2lycV9oYW5kbGVyKTsKPiArCj4gKwl2Y3B1X2luaXRfZGVzY3Jp cHRvcl90YWJsZXModm0sIDApOwo+ICsKPiArCXVjYWxsX2luaXQodm0sIE5VTEwpOwo+ICsJdGVz dF9pbml0X3RpbWVyX2lycSh2bSk7Cj4gKwl2Z2ljX3YzX3NldHVwKHZtLCAxLCA2NCwgR0lDRF9C QVNFX0dQQSwgR0lDUl9CQVNFX0dQQSk7CgpUaGUgdGVzdCBzaG91bGQgcHJvYmFibHkgc2tpcCBp ZiBHSUN2MyBpc24ndCBzdXBwb3J0ZWQsIGxpa2UgY29tbWl0IDQ1NmY4OWUwOTI4YQooIktWTTog c2VsZnRlc3RzOiBhYXJjaDY0OiBTa2lwIHRlc3RzIGlmIHdlIGNhbid0IGNyZWF0ZSBhIHZnaWMt djMiKQoKPiArCXJldHVybiB2bTsKPiArfQo+ICsKPiArc3RhdGljIHZvaWQgdGVzdF9wcmludF9o ZWxwKGNoYXIgKm5hbWUpCj4gK3sKPiArCXByX2luZm8oIlVzYWdlOiAlcyBbLWhdIFstaSBpdGVy YXRpb25zXSBbLXddIFstcCBwY3B1MSxwY3B1Ml1cbiIsCj4gKwkJbmFtZSk7Cj4gKwlwcl9pbmZv KCJcdC1pOiBOdW1iZXIgb2YgaXRlcmF0aW9ucyAoZGVmYXVsdDogJXUpXG4iLAo+ICsJCU5SX1RF U1RfSVRFUlNfREVGKTsKPiArCXByX2luZm8oIlx0LXA6IFBhaXIgb2YgcGNwdXMgZm9yIHRoZSB2 Y3B1cyB0byBhbHRlcm5hdGUgYmV0d2Vlbi4gIgo+ICsJCSJEZWZhdWx0cyB0byB1c2UgdGhlIGN1 cnJlbnQgY3B1IGFuZCB0aGUgb25lIHJpZ2h0IGFmdGVyICIKPiArCQkiaW4gdGhlIGFmZmluaXR5 IHNldC5cbiIpOwo+ICsJcHJfaW5mbygiXHQtaDogUHJpbnQgdGhpcyBoZWxwIG1lc3NhZ2VcbiIp Owo+ICt9Cj4gKwo+ICtzdGF0aWMgYm9vbCBwYXJzZV9hcmdzKGludCBhcmdjLCBjaGFyICphcmd2 W10pCj4gK3sKPiArCWludCBvcHQsIHJldDsKPiArCj4gKwl3aGlsZSAoKG9wdCA9IGdldG9wdChh cmdjLCBhcmd2LCAiaGk6cDoiKSkgIT0gLTEpIHsKPiArCQlzd2l0Y2ggKG9wdCkgewo+ICsJCWNh c2UgJ2knOgo+ICsJCQl0ZXN0X2FyZ3MuaXRlcmF0aW9ucyA9IGF0b2kob3B0YXJnKTsKPiArCQkJ aWYgKHRlc3RfYXJncy5pdGVyYXRpb25zIDw9IDApIHsKPiArCQkJCXByX2luZm8oIlBvc2l0aXZl IHZhbHVlIG5lZWRlZCBmb3IgLWlcbiIpOwo+ICsJCQkJZ290byBlcnI7Cj4gKwkJCX0KPiArCQkJ YnJlYWs7Cj4gKwkJY2FzZSAncCc6Cj4gKwkJCXJldCA9IHNzY2FuZihvcHRhcmcsICIldSwldSIs ICZwY3B1c1swXSwgJnBjcHVzWzFdKTsKPiArCQkJaWYgKHJldCAhPSAyKSB7Cj4gKwkJCQlwcl9p bmZvKCJJbnZhbGlkIHBjcHVzIHBhaXIiKTsKPiArCQkJCWdvdG8gZXJyOwo+ICsJCQl9Cj4gKwkJ CWJyZWFrOwo+ICsJCWNhc2UgJ2gnOgo+ICsJCWRlZmF1bHQ6Cj4gKwkJCWdvdG8gZXJyOwo+ICsJ CX0KPiArCX0KPiArCj4gKwlyZXR1cm4gdHJ1ZTsKPiArCj4gK2VycjoKPiArCXRlc3RfcHJpbnRf aGVscChhcmd2WzBdKTsKPiArCXJldHVybiBmYWxzZTsKPiArfQo+ICsKPiAraW50IG1haW4oaW50 IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKPiArewo+ICsJc3RydWN0IGt2bV92bSAqdm07Cj4gKwo+ICsJ LyogVGVsbCBzdGRvdXQgbm90IHRvIGJ1ZmZlciBpdHMgY29udGVudCAqLwo+ICsJc2V0YnVmKHN0 ZG91dCwgTlVMTCk7Cj4gKwo+ICsJaWYgKCFwYXJzZV9hcmdzKGFyZ2MsIGFyZ3YpKQo+ICsJCWV4 aXQoS1NGVF9TS0lQKTsKPiArCj4gKwlpZiAocGNwdXNbMF0gPT0gLTEgfHwgcGNwdXNbMV0gPT0g LTEpCj4gKwkJc2V0X2RlZmF1bHRfcGNwdXMoKTsKPiArCj4gKwl2bSA9IHRlc3Rfdm1fY3JlYXRl KCk7Cj4gKwl0ZXN0X3J1bih2bSk7Cj4gKwlrdm1fdm1fZnJlZSh2bSk7Cj4gKwo+ICsJcmV0dXJu IDA7Cj4gK30KPiAtLSAKPiAyLjM1LjEuNTc0Lmc1ZDMwYzczYmZiLWdvb2cKPiAKX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18Ka3ZtYXJtIG1haWxpbmcgbGlz dAprdm1hcm1AbGlzdHMuY3MuY29sdW1iaWEuZWR1Cmh0dHBzOi8vbGlzdHMuY3MuY29sdW1iaWEu ZWR1L21haWxtYW4vbGlzdGluZm8va3ZtYXJtCg==