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 X-Spam-Level: X-Spam-Status: No, score=-9.8 required=3.0 tests=BAYES_00,DKIM_ADSP_CUSTOM_MED, DKIM_INVALID,DKIM_SIGNED,FREEMAIL_FORGED_FROMDOMAIN,FREEMAIL_FROM, HEADER_FROM_DIFFERENT_DOMAINS,MAILING_LIST_MULTI,MENTIONS_GIT_HOSTING, SPF_HELO_NONE,SPF_PASS,URIBL_BLOCKED,USER_AGENT_SANE_1 autolearn=ham autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id 3C4EDC4363A for ; Mon, 26 Oct 2020 09:55:23 +0000 (UTC) Received: from hemlock.osuosl.org (smtp2.osuosl.org [140.211.166.133]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPS id 8682D2087C for ; Mon, 26 Oct 2020 09:55:22 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=fail reason="signature verification failed" (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="njhsUiQv" DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 8682D2087C Authentication-Results: mail.kernel.org; dmarc=fail (p=none dis=none) header.from=gmail.com Authentication-Results: mail.kernel.org; spf=pass smtp.mailfrom=containers-bounces@lists.linux-foundation.org Received: from localhost (localhost [127.0.0.1]) by hemlock.osuosl.org (Postfix) with ESMTP id 3522F8715D; Mon, 26 Oct 2020 09:55:22 +0000 (UTC) X-Virus-Scanned: amavisd-new at osuosl.org Received: from hemlock.osuosl.org ([127.0.0.1]) by localhost (.osuosl.org [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id 71Lw46WZR9Ld; Mon, 26 Oct 2020 09:55:18 +0000 (UTC) Received: from lists.linuxfoundation.org (lf-lists.osuosl.org [140.211.9.56]) by hemlock.osuosl.org (Postfix) with ESMTP id CFDDD8714E; Mon, 26 Oct 2020 09:55:18 +0000 (UTC) Received: from lf-lists.osuosl.org (localhost [127.0.0.1]) by lists.linuxfoundation.org (Postfix) with ESMTP id B338DC088B; Mon, 26 Oct 2020 09:55:18 +0000 (UTC) Received: from silver.osuosl.org (smtp3.osuosl.org [140.211.166.136]) by lists.linuxfoundation.org (Postfix) with ESMTP id EAD1AC0051 for ; Mon, 26 Oct 2020 09:55:16 +0000 (UTC) Received: from localhost (localhost [127.0.0.1]) by silver.osuosl.org (Postfix) with ESMTP id BE4892E0E9 for ; Mon, 26 Oct 2020 09:55:16 +0000 (UTC) X-Virus-Scanned: amavisd-new at osuosl.org Received: from silver.osuosl.org ([127.0.0.1]) by localhost (.osuosl.org [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id JK9fIYB2SmnZ for ; Mon, 26 Oct 2020 09:55:10 +0000 (UTC) X-Greylist: domain auto-whitelisted by SQLgrey-1.7.6 Received: from mail-wm1-f68.google.com (mail-wm1-f68.google.com [209.85.128.68]) by silver.osuosl.org (Postfix) with ESMTPS id 77DBE2E0E8 for ; Mon, 26 Oct 2020 09:55:09 +0000 (UTC) Received: by mail-wm1-f68.google.com with SMTP id c194so10957648wme.2 for ; Mon, 26 Oct 2020 02:55:09 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=cc:to:from:subject:message-id:date:user-agent:mime-version :content-language:content-transfer-encoding; bh=HFtIa0JFVCYohxQ+g3Z5ClLXmPCzMIBFA23kLgwpk1g=; b=njhsUiQv0nc8WqSgUAaPENT0HSw0RcNi3BMogce8pozB5tCjm4Lh3LpObdWIEp/buC JPs8G2LlHoNDDXkb85k+dpbm3F8heW08GAhTy5crmo/JsUmx8UcIB0ABjwyx4IakF01E olApEt2v1tXQHBRM04U6j1Xz1O9ddSDanL9O8O5mUv0z9Hj1dco8g+G8yrQZYAsmlJiq kbQ9W3QkqUu8e/Fy9QT/I7r956yOxbpNS6ZMjpcrUtvp7EFuHOQwKMte2zwwfkh4v7OE dDJRtU+N8v/f/Sj31Z0liZEAfS9wdXmfRgv4FyD3jw6yViULqFiB4ETFkPPDchHd6j5i 6ssw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:cc:to:from:subject:message-id:date:user-agent :mime-version:content-language:content-transfer-encoding; bh=HFtIa0JFVCYohxQ+g3Z5ClLXmPCzMIBFA23kLgwpk1g=; b=AJ/7LASqUF6X+qDvRMWggnt7vB1dh+mvfGqm4aFrjrgpPGTR4wOgc3dl7YWfdghLPv LlgPxxZMUZDSQ4JE2lDtQrxUz+VMGv3CwM1V5DODn/RVkB05FaxtfcBwZEUG+xWI4yyO qNEo4qWTagP3P6j1D7nSbfVzgoDYGa+tvYKoF+OFCFrQeWkJumuLsDfG9M/lJcnDMTQC 1xBqy63eUBxz6xPl0nGe8vvPnU78wP/osb2Znenlx2K1kZCjnRKD4RMr21RHFBXWPS1U rRP8KR1LF2qW7C+yldBrdfRZjmaYU9RmX0gnf6bLayStssHkSR8MTDSrIMlfxx1JFw8Z vjqw== X-Gm-Message-State: AOAM532DXmoqVwDTFjYChwVerqgY7WRHe2ITxbiWAYx9Fnsn9wF/IN8S /4q5bfh3LhfGsRZgdnyxUgo= X-Google-Smtp-Source: ABdhPJxNX1ml133qxYsyWOpqT0j+GNqFYhskc/Ay+b7oU3swRa76g/VfeDbByP4j7oIh5kDdC17sAg== X-Received: by 2002:a1c:9c51:: with SMTP id f78mr15631710wme.189.1603706106662; Mon, 26 Oct 2020 02:55:06 -0700 (PDT) Received: from ?IPv6:2001:a61:245a:d801:2e74:88ad:ef9:5218? ([2001:a61:245a:d801:2e74:88ad:ef9:5218]) by smtp.gmail.com with ESMTPSA id l11sm21097253wro.89.2020.10.26.02.55.04 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Mon, 26 Oct 2020 02:55:05 -0700 (PDT) To: Tycho Andersen , Sargun Dhillon From: "Michael Kerrisk (man-pages)" Subject: For review: seccomp_user_notif(2) manual page [v2] Message-ID: <63598b4f-6ce3-5a11-4552-cdfe308f68e4@gmail.com> Date: Mon, 26 Oct 2020 10:55:04 +0100 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:68.0) Gecko/20100101 Thunderbird/68.11.0 MIME-Version: 1.0 Content-Language: en-US Cc: Giuseppe Scrivano , Song Liu , Will Drewry , Kees Cook , Daniel Borkmann , linux-man , Robert Sesek , Containers , Jann Horn , lkml , Alexei Starovoitov , mtk.manpages@gmail.com, bpf , Andy Lutomirski , Christian Brauner X-BeenThere: containers@lists.linux-foundation.org X-Mailman-Version: 2.1.15 Precedence: list List-Id: Linux Containers List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Errors-To: containers-bounces@lists.linux-foundation.org Sender: "Containers" SGkgYWxsIChhbmQgZXNwZWNpYWxseSBUeWNobyBhbmQgU2FyZ3VuKSwKCkZvbGxvd2luZyByZXZp ZXcgY29tbWVudHMgb24gdGhlIGZpcnN0IGRyYWZ0ICh0aGFua3MgdG8gSmFubiwgS2VlcywKQ2hy aXN0aWFuIGFuZCBUeWNobyksIEkndmUgbWFkZSBhIGxvdCBvZiBjaGFuZ2VzIHRvIHRoaXMgcGFn ZS4KSSd2ZSBhbHNvIGFkZGVkIGEgZmV3IEZJWE1FcyByZWxhdGluZyB0byBvdXRzdGFuZGluZyBB UEkgaXNzdWVzLgpJJ2QgbGlrZSBhIHNlY29uZCBwYXNzIHJldmlldyBvZiB0aGUgcGFnZSBiZWZv cmUgSSByZWxlYXNlIGl0LgpCdXQgYWxzbywgdGhpcyBtYWlsIHNlcnZlcyBhcyBhIHdheSBvZiBu b3RpbmcgdGhlIG91dHN0YW5kaW5nIEFQSQppc3N1ZXMuCgpUeWNobzogSSBzdGlsbCBoYXZlIGFu IG91dHN0YW5kaW5nIHF1ZXN0aW9uIGZvciB5b3UgYXQgWzJdLgoKU2FyZ3VuOiBjYW4geW91IHBs ZWFzZSBwcmVwYXJlIHNvbWV0aGluZyBvbiBTRUNDT01QX0FEREZEX0ZMQUdfU0VURkQKYW5kIFNF Q0NPTVBfSU9DVExfTk9USUZfQURERkQgdG8gYmUgYWRkZWQgdG8gdGhpcyBwYWdlPwoKSSd2ZSBz aG93biB0aGUgcmVuZGVyZWQgdmVyc2lvbiBvZiB0aGUgcGFnZSBiZWxvdy4gVGhlIHBhZ2Ugc291 cmNlCmN1cnJlbnRseSBzaXRzIGluIGEgYnJhbmNoIGF0Cmh0dHBzOi8vZ2l0Lmtlcm5lbC5vcmcv cHViL3NjbS9kb2NzL21hbi1wYWdlcy9tYW4tcGFnZXMuZ2l0L2xvZy8/aD1zZWNjb21wX3VzZXJf bm90aWYKCkF0IHRoaXMgcG9pbnQsIEknbSBtYWlubHkgaW50ZXJlc3RlZCBpbiBmZWVkYmFjayBh Ym91dCB0aGUgRklYTUVzLApzb21lIG9mIHdoaWNoIHJlbGF0ZSB0byB0aGUgdGV4dCBvZiB0aGUg cGFnZSBpdHNlbGYsIHdoaWxlIHRoZQpvdGhlcnMgcmVsYXRlIHRvIHRoZSB2YXJpb3VzIG91dHN0 YW5kaW5nIEFQSSBpc3N1ZXMuIFRoZSBmaXJzdCAKRklYTUUgcHJvdmlkZXMgYSBzbWFsbCBvcHBv cnR1bml0eSBmb3Igc29tZSBiaWtlc2hlZGRpbmcgOi0pOwoKClRoYW5rcywKCk1pY2hhZWwKClsx XSBodHRwczovL2xvcmUua2VybmVsLm9yZy9saW51eC1tYW4vNDVmMDdmMTctMThiNi1kMTg3LTA5 MTQtNmYzNDFmZTkwODU3QGdtYWlsLmNvbS8KWzJdIGh0dHBzOi8vbG9yZS5rZXJuZWwub3JnL2xp bnV4LW1hbi84ZjIwZDU4Ni05NjA5LWVmODMtYzg1YS0yNzJlMzdlNjg0ZDhAZ21haWwuY29tLwoK PT09PT0KClNFQ0NPTVBfVVNFUl9OT1RJRigyKSAgIExpbnV4IFByb2dyYW1tZXIncyBNYW51YWwg IFNFQ0NPTVBfVVNFUl9OT1RJRigyKQoKTkFNRQogICAgICAgc2VjY29tcF91c2VyX25vdGlmIC0g U2VjY29tcCB1c2VyLXNwYWNlIG5vdGlmaWNhdGlvbiBtZWNoYW5pc20KCiAgICAgICDilIzilIDi lIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDi lIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDi lIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilJAKICAgICAgIOKUgkZJ WE1FICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg4pSCCiAg ICAgICDilJzilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDi lIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDi lIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilKQK ICAgICAgIOKUgk1pZ2h0ICJzZWNjb21wX3Vub3RpZnkoMikiIGJlIGEgYmV0dGVyIG5hbWUgZm9y IHRoaXMg4pSCCiAgICAgICDilIJwYWdlPyAgSXQncyBzbGlnaHRseSBzaG9ydGVyIHRvIHR5cGUs IGFuZCBwZXJoYXBzICAgIOKUggogICAgICAg4pSCcmVhZHMgYmV0dGVyIHdoZW4gc3Bva2VuLiAg ICAgICAgICAgICAgICAgICAgICAgICAgICDilIIKICAgICAgIOKUlOKUgOKUgOKUgOKUgOKUgOKU gOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKU gOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKU gOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUmAoKU1lOT1BTSVMKICAgICAgICNpbmNsdWRl IDxsaW51eC9zZWNjb21wLmg+CiAgICAgICAjaW5jbHVkZSA8bGludXgvZmlsdGVyLmg+CiAgICAg ICAjaW5jbHVkZSA8bGludXgvYXVkaXQuaD4KCiAgICAgICBpbnQgc2VjY29tcCh1bnNpZ25lZCBp bnQgb3BlcmF0aW9uLCB1bnNpZ25lZCBpbnQgZmxhZ3MsIHZvaWQgKmFyZ3MpOwoKICAgICAgICNp bmNsdWRlIDxzeXMvaW9jdGwuaD4KCiAgICAgICBpbnQgaW9jdGwoaW50IGZkLCBTRUNDT01QX0lP Q1RMX05PVElGX1JFQ1YsCiAgICAgICAgICAgICAgICAgc3RydWN0IHNlY2NvbXBfbm90aWYgKnJl cSk7CiAgICAgICBpbnQgaW9jdGwoaW50IGZkLCBTRUNDT01QX0lPQ1RMX05PVElGX1NFTkQsCiAg ICAgICAgICAgICAgICAgc3RydWN0IHNlY2NvbXBfbm90aWZfcmVzcCAqcmVzcCk7CiAgICAgICBp bnQgaW9jdGwoaW50IGZkLCBTRUNDT01QX0lPQ1RMX05PVElGX0lEX1ZBTElELCBfX3U2NCAqaWQp OwoKREVTQ1JJUFRJT04KICAgICAgIFRoaXMgcGFnZSBkZXNjcmliZXMgdGhlIHVzZXItc3BhY2Ug bm90aWZpY2F0aW9uIG1lY2hhbmlzbQogICAgICAgcHJvdmlkZWQgYnkgdGhlIFNlY3VyZSBDb21w dXRpbmcgKHNlY2NvbXApIGZhY2lsaXR5LiAgQXMgd2VsbCBhcwogICAgICAgdGhlIHVzZSBvZiB0 aGUgU0VDQ09NUF9GSUxURVJfRkxBR19ORVdfTElTVEVORVIgZmxhZywgdGhlCiAgICAgICBTRUND T01QX1JFVF9VU0VSX05PVElGIGFjdGlvbiB2YWx1ZSwgYW5kIHRoZQogICAgICAgU0VDQ09NUF9H RVRfTk9USUZfU0laRVMgb3BlcmF0aW9uIGRlc2NyaWJlZCBpbiBzZWNjb21wKDIpLCB0aGlzCiAg ICAgICBtZWNoYW5pc20gaW52b2x2ZXMgdGhlIHVzZSBvZiBhIG51bWJlciBvZiByZWxhdGVkIGlv Y3RsKDIpCiAgICAgICBvcGVyYXRpb25zIChkZXNjcmliZWQgYmVsb3cpLgoKICAgT3ZlcnZpZXcK ICAgICAgIEluIGNvbnZlbnRpb25hbCB1c2FnZSBvZiBhIHNlY2NvbXAgZmlsdGVyLCB0aGUgZGVj aXNpb24gYWJvdXQgaG93CiAgICAgICB0byB0cmVhdCBhIHN5c3RlbSBjYWxsIGlzIG1hZGUgYnkg dGhlIGZpbHRlciBpdHNlbGYuICBCeQogICAgICAgY29udHJhc3QsIHRoZSB1c2VyLXNwYWNlIG5v dGlmaWNhdGlvbiBtZWNoYW5pc20gYWxsb3dzIHRoZQogICAgICAgc2VjY29tcCBmaWx0ZXIgdG8g ZGVsZWdhdGUgdGhlIGhhbmRsaW5nIG9mIHRoZSBzeXN0ZW0gY2FsbCB0bwogICAgICAgYW5vdGhl ciB1c2VyLXNwYWNlIHByb2Nlc3MuICBOb3RlIHRoYXQgdGhpcyBtZWNoYW5pc20gaXMKICAgICAg IGV4cGxpY2l0bHkgbm90IGludGVuZGVkIGFzIGEgbWV0aG9kIGltcGxlbWVudGluZyBzZWN1cml0 eSBwb2xpY3k7CiAgICAgICBzZWUgTk9URVMuCgogICAgICAgSW4gdGhlIGRpc2N1c3Npb24gdGhh dCBmb2xsb3dzLCB0aGUgdGhyZWFkKHMpIG9uIHdoaWNoIHRoZQogICAgICAgc2VjY29tcCBmaWx0 ZXIgaXMgaW5zdGFsbGVkIGlzIChhcmUpIHJlZmVycmVkIHRvIGFzIHRoZSB0YXJnZXQsCiAgICAg ICBhbmQgdGhlIHByb2Nlc3MgdGhhdCBpcyBub3RpZmllZCBieSB0aGUgdXNlci1zcGFjZSBub3Rp ZmljYXRpb24KICAgICAgIG1lY2hhbmlzbSBpcyByZWZlcnJlZCB0byBhcyB0aGUgc3VwZXJ2aXNv ci4KCiAgICAgICBBIHN1aXRhYmx5IHByaXZpbGVnZWQgc3VwZXJ2aXNvciBjYW4gdXNlIHRoZSB1 c2VyLXNwYWNlCiAgICAgICBub3RpZmljYXRpb24gbWVjaGFuaXNtIHRvIHBlcmZvcm0gYWN0aW9u cyBvbiBiZWhhbGYgb2YgdGhlCiAgICAgICB0YXJnZXQuICBUaGUgYWR2YW50YWdlIG9mIHRoZSB1 c2VyLXNwYWNlIG5vdGlmaWNhdGlvbiBtZWNoYW5pc20KICAgICAgIGlzIHRoYXQgdGhlIHN1cGVy dmlzb3Igd2lsbCB1c3VhbGx5IGJlIGFibGUgdG8gcmV0cmlldmUKICAgICAgIGluZm9ybWF0aW9u IGFib3V0IHRoZSB0YXJnZXQgYW5kIHRoZSBwZXJmb3JtZWQgc3lzdGVtIGNhbGwgdGhhdAogICAg ICAgdGhlIHNlY2NvbXAgZmlsdGVyIGl0c2VsZiBjYW5ub3QuICAoQSBzZWNjb21wIGZpbHRlciBp cyBsaW1pdGVkCiAgICAgICBpbiB0aGUgaW5mb3JtYXRpb24gaXQgY2FuIG9idGFpbiBhbmQgdGhl IGFjdGlvbnMgdGhhdCBpdCBjYW4KICAgICAgIHBlcmZvcm0gYmVjYXVzZSBpdCBpcyBydW5uaW5n IG9uIGEgdmlydHVhbCBtYWNoaW5lIGluc2lkZSB0aGUKICAgICAgIGtlcm5lbC4pCgogICAgICAg QW4gb3ZlcnZpZXcgb2YgdGhlIHN0ZXBzIHBlcmZvcm1lZCBieSB0aGUgdGFyZ2V0IGFuZCB0aGUK ICAgICAgIHN1cGVydmlzb3IgaXMgYXMgZm9sbG93czoKCiAgICAgICAxLiBUaGUgdGFyZ2V0IGVz dGFibGlzaGVzIGEgc2VjY29tcCBmaWx0ZXIgaW4gdGhlIHVzdWFsIG1hbm5lciwKICAgICAgICAg IGJ1dCB3aXRoIHR3byBkaWZmZXJlbmNlczoKCiAgICAgICAgICDCtyBUaGUgc2VjY29tcCgyKSBm bGFncyBhcmd1bWVudCBpbmNsdWRlcyB0aGUgZmxhZwogICAgICAgICAgICBTRUNDT01QX0ZJTFRF Ul9GTEFHX05FV19MSVNURU5FUi4gIENvbnNlcXVlbnRseSwgdGhlIHJldHVybgogICAgICAgICAg ICB2YWx1ZSBvZiB0aGUgKHN1Y2Nlc3NmdWwpIHNlY2NvbXAoMikgY2FsbCBpcyBhIG5ldwogICAg ICAgICAgICAibGlzdGVuaW5nIiBmaWxlIGRlc2NyaXB0b3IgdGhhdCBjYW4gYmUgdXNlZCB0byBy ZWNlaXZlCiAgICAgICAgICAgIG5vdGlmaWNhdGlvbnMuICBPbmx5IG9uZSAibGlzdGVuaW5nIiBz ZWNjb21wIGZpbHRlciBjYW4gYmUKICAgICAgICAgICAgaW5zdGFsbGVkIGZvciBhIHRocmVhZC4K CiAgICAgICAgICAgIOKUjOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKU gOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKU gOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKU gOKUgOKUkAogICAgICAgICAgICDilIJGSVhNRSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIOKUggogICAgICAgICAgICDilJzilIDilIDilIDilIDilIDilIDi lIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDi lIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDi lIDilIDilIDilIDilIDilIDilIDilIDilIDilKQKICAgICAgICAgICAg4pSCSXMgdGhlIGxhc3Qg c2VudGVuY2UgYWJvdmUgY29ycmVjdD8gICAgICAgICAgICAgICAgICDilIIKICAgICAgICAgICAg 4pSCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICDi lIIKICAgICAgICAgICAg4pSCS2VlcyBDb29rICgyNSBPY3QgMjAyMCkgbm90ZXM6ICAgICAgICAg ICAgICAgICAgICAgICDilIIKICAgICAgICAgICAg4pSCICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICDilIIKICAgICAgICAgICAg4pSCSSBsaWtlIHRo aXMgbGltaXRhdGlvbiwgYnV0IEkgZXhwZWN0IHRoYXQgaXQnbGwgbmVlZCDilIIKICAgICAgICAg ICAg4pSCdG8gY2hhbmdlIGluIHRoZSBmdXR1cmUuIEV2ZW4gd2l0aCBMU01zLCB3ZSBzZWUgdGhl ICDilIIKICAgICAgICAgICAg4pSCbmVlZCBmb3IgYXJiaXRyYXJ5IHN0YWNraW5nLCBhbmQgdGhl IGlkZWEgb2YgdGhlcmUgICDilIIKICAgICAgICAgICAg4pSCYmVpbmcgb25seSAxIHN1cGVydmlz b3Igd2lsbCBldmVudHVhbGx5IGJyZWFrIGRvd24uICDilIIKICAgICAgICAgICAg4pSCUmlnaHQg bm93IHRoZXJlIGlzIG9ubHkgMSBiZWNhdXNlIG9ubHkgY29udGFpbmVyICAgICDilIIKICAgICAg ICAgICAg4pSCbWFuYWdlcnMgYXJlIHVzaW5nIHRoaXMgZmVhdHVyZS4gQnV0IGlmIHNvbWUgZGFl bW9uICDilIIKICAgICAgICAgICAg4pSCc3RhcnRzIHVzaW5nIGl0IHRvIGlzb2xhdGUgc29tZSB0 aHJlYWQsIHN1ZGRlbmx5IGl0ICDilIIKICAgICAgICAgICAg4pSCbWlnaHQgYnJlYWsgaWYgYSBj b250YWluZXIgbWFuYWdlciBpcyB0cnlpbmcgdG8gICAgICDilIIKICAgICAgICAgICAg4pSCbGlz dGVuIHRvIGl0IHRvbywgZXRjLiBJIGV4cGVjdCBpdCB3b24ndCBiZSBuZWVkZWQgICDilIIKICAg ICAgICAgICAg4pSCc29vbiwgYnV0IEkgZG8gdGhpbmsgaXQnbGwgY2hhbmdlLiAgICAgICAgICAg ICAgICAgICDilIIKICAgICAgICAgICAg4pSCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICDilIIKICAgICAgICAgICAg4pSU4pSA4pSA4pSA4pSA4pSA 4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA 4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA 4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSYCgogICAgICAgICAgwrcgSW4gY2FzZXMg d2hlcmUgaXQgaXMgYXBwcm9wcmlhdGUsIHRoZSBzZWNjb21wIGZpbHRlciByZXR1cm5zCiAgICAg ICAgICAgIHRoZSBhY3Rpb24gdmFsdWUgU0VDQ09NUF9SRVRfVVNFUl9OT1RJRi4gIFRoaXMgcmV0 dXJuIHZhbHVlCiAgICAgICAgICAgIHdpbGwgdHJpZ2dlciBhIG5vdGlmaWNhdGlvbiBldmVudC4K CiAgICAgICAyLiBJbiBvcmRlciB0aGF0IHRoZSBzdXBlcnZpc29yIGNhbiBvYnRhaW4gbm90aWZp Y2F0aW9ucyB1c2luZwogICAgICAgICAgdGhlIGxpc3RlbmluZyBmaWxlIGRlc2NyaXB0b3IsIChh IGR1cGxpY2F0ZSBvZikgdGhhdCBmaWxlCiAgICAgICAgICBkZXNjcmlwdG9yIG11c3QgYmUgcGFz c2VkIGZyb20gdGhlIHRhcmdldCB0byB0aGUgc3VwZXJ2aXNvci4KICAgICAgICAgIE9uZSB3YXkg aW4gd2hpY2ggdGhpcyBjb3VsZCBiZSBkb25lIGlzIGJ5IHBhc3NpbmcgdGhlIGZpbGUKICAgICAg ICAgIGRlc2NyaXB0b3Igb3ZlciBhIFVOSVggZG9tYWluIHNvY2tldCBjb25uZWN0aW9uIGJldHdl ZW4gdGhlCiAgICAgICAgICB0YXJnZXQgYW5kIHRoZSBzdXBlcnZpc29yICh1c2luZyB0aGUgU0NN X1JJR0hUUyBhbmNpbGxhcnkKICAgICAgICAgIG1lc3NhZ2UgdHlwZSBkZXNjcmliZWQgaW4gdW5p eCg3KSkuCgogICAgICAgMy4gVGhlIHN1cGVydmlzb3Igd2lsbCByZWNlaXZlIG5vdGlmaWNhdGlv biBldmVudHMgb24gdGhlCiAgICAgICAgICBsaXN0ZW5pbmcgZmlsZSBkZXNjcmlwdG9yLiAgVGhl c2UgZXZlbnRzIGFyZSByZXR1cm5lZCBhcwogICAgICAgICAgc3RydWN0dXJlcyBvZiB0eXBlIHNl Y2NvbXBfbm90aWYuICBCZWNhdXNlIHRoaXMgc3RydWN0dXJlIGFuZAogICAgICAgICAgaXRzIHNp emUgbWF5IGV2b2x2ZSBvdmVyIGtlcm5lbCB2ZXJzaW9ucywgdGhlIHN1cGVydmlzb3IgbXVzdAog ICAgICAgICAgZmlyc3QgZGV0ZXJtaW5lIHRoZSBzaXplIG9mIHRoaXMgc3RydWN0dXJlIHVzaW5n IHRoZQogICAgICAgICAgc2VjY29tcCgyKSBTRUNDT01QX0dFVF9OT1RJRl9TSVpFUyBvcGVyYXRp b24sIHdoaWNoIHJldHVybnMgYQogICAgICAgICAgc3RydWN0dXJlIG9mIHR5cGUgc2VjY29tcF9u b3RpZl9zaXplcy4gIFRoZSBzdXBlcnZpc29yCiAgICAgICAgICBhbGxvY2F0ZXMgYSBidWZmZXIg b2Ygc2l6ZSBzZWNjb21wX25vdGlmX3NpemVzLnNlY2NvbXBfbm90aWYKICAgICAgICAgIGJ5dGVz IHRvIHJlY2VpdmUgbm90aWZpY2F0aW9uIGV2ZW50cy4gIEluIGFkZGl0aW9uLHRoZQogICAgICAg ICAgc3VwZXJ2aXNvciBhbGxvY2F0ZXMgYW5vdGhlciBidWZmZXIgb2Ygc2l6ZQogICAgICAgICAg c2VjY29tcF9ub3RpZl9zaXplcy5zZWNjb21wX25vdGlmX3Jlc3AgYnl0ZXMgZm9yIHRoZSByZXNw b25zZQogICAgICAgICAgKGEgc3RydWN0IHNlY2NvbXBfbm90aWZfcmVzcCBzdHJ1Y3R1cmUpIHRo YXQgaXQgd2lsbCBwcm92aWRlCiAgICAgICAgICB0byB0aGUga2VybmVsIChhbmQgdGh1cyB0aGUg dGFyZ2V0KS4KCiAgICAgICA0LiBUaGUgdGFyZ2V0IHRoZW4gcGVyZm9ybXMgaXRzIHdvcmtsb2Fk LCB3aGljaCBpbmNsdWRlcyBzeXN0ZW0KICAgICAgICAgIGNhbGxzIHRoYXQgd2lsbCBiZSBjb250 cm9sbGVkIGJ5IHRoZSBzZWNjb21wIGZpbHRlci4gIFdoZW5ldmVyCiAgICAgICAgICBvbmUgb2Yg dGhlc2Ugc3lzdGVtIGNhbGxzIGNhdXNlcyB0aGUgZmlsdGVyIHRvIHJldHVybiB0aGUKICAgICAg ICAgIFNFQ0NPTVBfUkVUX1VTRVJfTk9USUYgYWN0aW9uIHZhbHVlLCB0aGUga2VybmVsIGRvZXMg bm90ICh5ZXQpCiAgICAgICAgICBleGVjdXRlIHRoZSBzeXN0ZW0gY2FsbDsgaW5zdGVhZCwgZXhl Y3V0aW9uIG9mIHRoZSB0YXJnZXQgaXMKICAgICAgICAgIHRlbXBvcmFyaWx5IGJsb2NrZWQgaW5z aWRlIHRoZSBrZXJuZWwgKGluIGEgc2xlZXAgc3RhdGUgdGhhdAogICAgICAgICAgaXMgaW50ZXJy dXB0aWJsZSBieSBzaWduYWxzKSBhbmQgYSBub3RpZmljYXRpb24gZXZlbnQgaXMKICAgICAgICAg IGdlbmVyYXRlZCBvbiB0aGUgbGlzdGVuaW5nIGZpbGUgZGVzY3JpcHRvci4KCiAgICAgICA1LiBU aGUgc3VwZXJ2aXNvciBjYW4gbm93IHJlcGVhdGVkbHkgbW9uaXRvciB0aGUgbGlzdGVuaW5nIGZp bGUKICAgICAgICAgIGRlc2NyaXB0b3IgZm9yIFNFQ0NPTVBfUkVUX1VTRVJfTk9USUYtdHJpZ2dl cmVkIGV2ZW50cy4gIFRvIGRvCiAgICAgICAgICB0aGlzLCB0aGUgc3VwZXJ2aXNvciB1c2VzIHRo ZSBTRUNDT01QX0lPQ1RMX05PVElGX1JFQ1YKICAgICAgICAgIGlvY3RsKDIpIG9wZXJhdGlvbiB0 byByZWFkIGluZm9ybWF0aW9uIGFib3V0IGEgbm90aWZpY2F0aW9uCiAgICAgICAgICBldmVudDsg dGhpcyBvcGVyYXRpb24gYmxvY2tzIHVudGlsIGFuIGV2ZW50IGlzIGF2YWlsYWJsZS4gIFRoZQog ICAgICAgICAgb3BlcmF0aW9uIHJldHVybnMgYSBzZWNjb21wX25vdGlmIHN0cnVjdHVyZSBjb250 YWluaW5nCiAgICAgICAgICBpbmZvcm1hdGlvbiBhYm91dCB0aGUgc3lzdGVtIGNhbGwgdGhhdCBp cyBiZWluZyBhdHRlbXB0ZWQgYnkKICAgICAgICAgIHRoZSB0YXJnZXQuCgogICAgICAgNi4gVGhl IHNlY2NvbXBfbm90aWYgc3RydWN0dXJlIHJldHVybmVkIGJ5IHRoZQogICAgICAgICAgU0VDQ09N UF9JT0NUTF9OT1RJRl9SRUNWIG9wZXJhdGlvbiBpbmNsdWRlcyB0aGUgc2FtZQogICAgICAgICAg aW5mb3JtYXRpb24gKGEgc2VjY29tcF9kYXRhIHN0cnVjdHVyZSkgdGhhdCB3YXMgcGFzc2VkIHRv IHRoZQogICAgICAgICAgc2VjY29tcCBmaWx0ZXIuICBUaGlzIGluZm9ybWF0aW9uIGFsbG93cyB0 aGUgc3VwZXJ2aXNvciB0bwogICAgICAgICAgZGlzY292ZXIgdGhlIHN5c3RlbSBjYWxsIG51bWJl ciBhbmQgdGhlIGFyZ3VtZW50cyBmb3IgdGhlCiAgICAgICAgICB0YXJnZXQncyBzeXN0ZW0gY2Fs bC4gIEluIGFkZGl0aW9uLCB0aGUgbm90aWZpY2F0aW9uIGV2ZW50CiAgICAgICAgICBjb250YWlu cyB0aGUgSUQgb2YgdGhlIHRocmVhZCB0aGF0IHRyaWdnZXJlZCB0aGUgbm90aWZpY2F0aW9uCiAg ICAgICAgICBhbmQgYSB1bmlxdWUgY29va2llIHZhbHVlIHRoYXQgaXMgdXNlZCBpbiBzdWJzZXF1 ZW50CiAgICAgICAgICBTRUNDT01QX0lPQ1RMX05PVElGX0lEX1ZBTElEIGFuZCBTRUNDT01QX0lP Q1RMX05PVElGX1NFTkQKICAgICAgICAgIG9wZXJhdGlvbnMuCgogICAgICAgICAgVGhlIGluZm9y bWF0aW9uIGluIHRoZSBub3RpZmljYXRpb24gY2FuIGJlIHVzZWQgdG8gZGlzY292ZXIKICAgICAg ICAgIHRoZSB2YWx1ZXMgb2YgcG9pbnRlciBhcmd1bWVudHMgZm9yIHRoZSB0YXJnZXQncyBzeXN0 ZW0gY2FsbC4KICAgICAgICAgIChUaGlzIGlzIHNvbWV0aGluZyB0aGF0IGNhbid0IGJlIGRvbmUg ZnJvbSB3aXRoaW4gYSBzZWNjb21wCiAgICAgICAgICBmaWx0ZXIuKSAgT25lIHdheSBpbiB3aGlj aCB0aGUgc3VwZXJ2aXNvciBjYW4gZG8gdGhpcyBpcyB0bwogICAgICAgICAgb3BlbiB0aGUgY29y cmVzcG9uZGluZyAvcHJvYy9bdGlkXS9tZW0gZmlsZSAoc2VlIHByb2MoNSkpIGFuZAogICAgICAg ICAgcmVhZCBieXRlcyBmcm9tIHRoZSBsb2NhdGlvbiB0aGF0IGNvcnJlc3BvbmRzIHRvIG9uZSBv ZiB0aGUKICAgICAgICAgIHBvaW50ZXIgYXJndW1lbnRzIHdob3NlIHZhbHVlIGlzIHN1cHBsaWVk IGluIHRoZSBub3RpZmljYXRpb24KICAgICAgICAgIGV2ZW50LiAgKFRoZSBzdXBlcnZpc29yIG11 c3QgYmUgY2FyZWZ1bCB0byBhdm9pZCBhIHJhY2UKICAgICAgICAgIGNvbmRpdGlvbiB0aGF0IGNh biBvY2N1ciB3aGVuIGRvaW5nIHRoaXM7IHNlZSB0aGUgZGVzY3JpcHRpb24KICAgICAgICAgIG9m IHRoZSBTRUNDT01QX0lPQ1RMX05PVElGX0lEX1ZBTElEIGlvY3RsKDIpIG9wZXJhdGlvbiBiZWxv dy4pCiAgICAgICAgICBJbiBhZGRpdGlvbiwgdGhlIHN1cGVydmlzb3IgY2FuIGFjY2VzcyBvdGhl ciBzeXN0ZW0KICAgICAgICAgIGluZm9ybWF0aW9uIHRoYXQgaXMgdmlzaWJsZSBpbiB1c2VyIHNw YWNlIGJ1dCB3aGljaCBpcyBub3QKICAgICAgICAgIGFjY2Vzc2libGUgZnJvbSBhIHNlY2NvbXAg ZmlsdGVyLgoKICAgICAgIDcuIEhhdmluZyBvYnRhaW5lZCBpbmZvcm1hdGlvbiBhcyBwZXIgdGhl IHByZXZpb3VzIHN0ZXAsIHRoZQogICAgICAgICAgc3VwZXJ2aXNvciBtYXkgdGhlbiBjaG9vc2Ug dG8gcGVyZm9ybSBhbiBhY3Rpb24gaW4gcmVzcG9uc2UgdG8KICAgICAgICAgIHRoZSB0YXJnZXQn cyBzeXN0ZW0gY2FsbCAod2hpY2gsIGFzIG5vdGVkIGFib3ZlLCBpcyBub3QKICAgICAgICAgIGV4 ZWN1dGVkIHdoZW4gdGhlIHNlY2NvbXAgZmlsdGVyIHJldHVybnMgdGhlCiAgICAgICAgICBTRUND T01QX1JFVF9VU0VSX05PVElGIGFjdGlvbiB2YWx1ZSkuCgogICAgICAgICAgT25lIGV4YW1wbGUg dXNlIGNhc2UgaGVyZSByZWxhdGVzIHRvIGNvbnRhaW5lcnMuICBUaGUgdGFyZ2V0CiAgICAgICAg ICBtYXkgYmUgbG9jYXRlZCBpbnNpZGUgYSBjb250YWluZXIgd2hlcmUgaXQgZG9lcyBub3QgaGF2 ZQogICAgICAgICAgc3VmZmljaWVudCBjYXBhYmlsaXRpZXMgdG8gbW91bnQgYSBmaWxlc3lzdGVt IGluIHRoZQogICAgICAgICAgY29udGFpbmVyJ3MgbW91bnQgbmFtZXNwYWNlLiAgSG93ZXZlciwg dGhlIHN1cGVydmlzb3IgbWF5IGJlIGEKICAgICAgICAgIG1vcmUgcHJpdmlsZWdlZCBwcm9jZXNz IHRoYXQgZG9lcyBoYXZlIHN1ZmZpY2llbnQgY2FwYWJpbGl0aWVzCiAgICAgICAgICB0byBwZXJm b3JtIHRoZSBtb3VudCBvcGVyYXRpb24uCgogICAgICAgOC4gVGhlIHN1cGVydmlzb3IgdGhlbiBz ZW5kcyBhIHJlc3BvbnNlIHRvIHRoZSBub3RpZmljYXRpb24uICBUaGUKICAgICAgICAgIGluZm9y bWF0aW9uIGluIHRoaXMgcmVzcG9uc2UgaXMgdXNlZCBieSB0aGUga2VybmVsIHRvCiAgICAgICAg ICBjb25zdHJ1Y3QgYSByZXR1cm4gdmFsdWUgZm9yIHRoZSB0YXJnZXQncyBzeXN0ZW0gY2FsbCBh bmQKICAgICAgICAgIHByb3ZpZGUgYSB2YWx1ZSB0aGF0IHdpbGwgYmUgYXNzaWduZWQgdG8gdGhl IGVycm5vIHZhcmlhYmxlIG9mCiAgICAgICAgICB0aGUgdGFyZ2V0LgoKICAgICAgICAgIFRoZSBy ZXNwb25zZSBpcyBzZW50IHVzaW5nIHRoZSBTRUNDT01QX0lPQ1RMX05PVElGX1NFTkQKICAgICAg ICAgIGlvY3RsKDIpIG9wZXJhdGlvbiwgd2hpY2ggaXMgdXNlZCB0byB0cmFuc21pdCBhCiAgICAg ICAgICBzZWNjb21wX25vdGlmX3Jlc3Agc3RydWN0dXJlIHRvIHRoZSBrZXJuZWwuICBUaGlzIHN0 cnVjdHVyZQogICAgICAgICAgaW5jbHVkZXMgYSBjb29raWUgdmFsdWUgdGhhdCB0aGUgc3VwZXJ2 aXNvciBvYnRhaW5lZCBpbiB0aGUKICAgICAgICAgIHNlY2NvbXBfbm90aWYgc3RydWN0dXJlIHJl dHVybmVkIGJ5IHRoZQogICAgICAgICAgU0VDQ09NUF9JT0NUTF9OT1RJRl9SRUNWIG9wZXJhdGlv bi4gIFRoaXMgY29va2llIHZhbHVlIGFsbG93cwogICAgICAgICAgdGhlIGtlcm5lbCB0byBhc3Nv Y2lhdGUgdGhlIHJlc3BvbnNlIHdpdGggdGhlIHRhcmdldC4gIFRoaXMKICAgICAgICAgIHN0cnVj dHVyZSBtdXN0IGluY2x1ZGUgdGhlIGNvb2tpZSB2YWx1ZSB0aGF0IHRoZSBzdXBlcnZpc29yCiAg ICAgICAgICBvYnRhaW5lZCBpbiB0aGUgc2VjY29tcF9ub3RpZiBzdHJ1Y3R1cmUgcmV0dXJuZWQg YnkgdGhlCiAgICAgICAgICBTRUNDT01QX0lPQ1RMX05PVElGX1JFQ1Ygb3BlcmF0aW9uOyB0aGUg Y29va2llIGFsbG93cyB0aGUKICAgICAgICAgIGtlcm5lbCB0byBhc3NvY2lhdGUgdGhlIHJlc3Bv bnNlIHdpdGggdGhlIHRhcmdldC4KCiAgICAgICA5LiBPbmNlIHRoZSBub3RpZmljYXRpb24gaGFz IGJlZW4gc2VudCwgdGhlIHN5c3RlbSBjYWxsIGluIHRoZQogICAgICAgICAgdGFyZ2V0IHRocmVh ZCB1bmJsb2NrcywgcmV0dXJuaW5nIHRoZSBpbmZvcm1hdGlvbiB0aGF0IHdhcwogICAgICAgICAg cHJvdmlkZWQgYnkgdGhlIHN1cGVydmlzb3IgaW4gdGhlIG5vdGlmaWNhdGlvbiByZXNwb25zZS4K CiAgICAgICBBcyBhIHZhcmlhdGlvbiBvbiB0aGUgbGFzdCB0d28gc3RlcHMsIHRoZSBzdXBlcnZp c29yIGNhbiBzZW5kIGEKICAgICAgIHJlc3BvbnNlIHRoYXQgdGVsbHMgdGhlIGtlcm5lbCB0aGF0 IGl0IHNob3VsZCBleGVjdXRlIHRoZSB0YXJnZXQKICAgICAgIHRocmVhZCdzIHN5c3RlbSBjYWxs OyBzZWUgdGhlIGRpc2N1c3Npb24gb2YKICAgICAgIFNFQ0NPTVBfVVNFUl9OT1RJRl9GTEFHX0NP TlRJTlVFLCBiZWxvdy4KCiAgIGlvY3RsKDIpIG9wZXJhdGlvbnMKICAgICAgIFRoZSBmb2xsb3dp bmcgaW9jdGwoMikgb3BlcmF0aW9ucyBhcmUgcHJvdmlkZWQgdG8gc3VwcG9ydCBzZWNjb21wCiAg ICAgICB1c2VyLXNwYWNlIG5vdGlmaWNhdGlvbi4gIEZvciBlYWNoIG9mIHRoZXNlIG9wZXJhdGlv bnMsIHRoZSBmaXJzdAogICAgICAgKGZpbGUgZGVzY3JpcHRvcikgYXJndW1lbnQgb2YgaW9jdGwo MikgaXMgdGhlIGxpc3RlbmluZyBmaWxlCiAgICAgICBkZXNjcmlwdG9yIHJldHVybmVkIGJ5IGEg Y2FsbCB0byBzZWNjb21wKDIpIHdpdGggdGhlCiAgICAgICBTRUNDT01QX0ZJTFRFUl9GTEFHX05F V19MSVNURU5FUiBmbGFnLgoKICAgICAgIFNFQ0NPTVBfSU9DVExfTk9USUZfUkVDVgogICAgICAg ICAgICAgIFRoaXMgb3BlcmF0aW9uIGlzIHVzZWQgdG8gb2J0YWluIGEgdXNlci1zcGFjZSBub3Rp ZmljYXRpb24KICAgICAgICAgICAgICBldmVudC4gIElmIG5vIHN1Y2ggZXZlbnQgaXMgY3VycmVu dGx5IHBlbmRpbmcsIHRoZQogICAgICAgICAgICAgIG9wZXJhdGlvbiBibG9ja3MgdW50aWwgYW4g ZXZlbnQgb2NjdXJzLiAgVGhlIHRoaXJkCiAgICAgICAgICAgICAgaW9jdGwoMikgYXJndW1lbnQg aXMgYSBwb2ludGVyIHRvIGEgc3RydWN0dXJlIG9mIHRoZQogICAgICAgICAgICAgIGZvbGxvd2lu ZyBmb3JtIHdoaWNoIGNvbnRhaW5zIGluZm9ybWF0aW9uIGFib3V0IHRoZSBldmVudC4KICAgICAg ICAgICAgICBUaGlzIHN0cnVjdHVyZSBtdXN0IGJlIHplcm9lZCBvdXQgYmVmb3JlIHRoZSBjYWxs LgoKICAgICAgICAgICAgICAgICAgc3RydWN0IHNlY2NvbXBfbm90aWYgewogICAgICAgICAgICAg ICAgICAgICAgX191NjQgIGlkOyAgICAgICAgICAgICAgLyogQ29va2llICovCiAgICAgICAgICAg ICAgICAgICAgICBfX3UzMiAgcGlkOyAgICAgICAgICAgICAvKiBUSUQgb2YgdGFyZ2V0IHRocmVh ZCAqLwogICAgICAgICAgICAgICAgICAgICAgX191MzIgIGZsYWdzOyAgICAgICAgICAgLyogQ3Vy cmVudGx5IHVudXNlZCAoMCkgKi8KICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBzZWNjb21w X2RhdGEgZGF0YTsgICAvKiBTZWUgc2VjY29tcCgyKSAqLwogICAgICAgICAgICAgICAgICB9OwoK ICAgICAgICAgICAgICBUaGUgZmllbGRzIGluIHRoaXMgc3RydWN0dXJlIGFyZSBhcyBmb2xsb3dz OgoKICAgICAgICAgICAgICBpZCAgICAgVGhpcyBpcyBhIGNvb2tpZSBmb3IgdGhlIG5vdGlmaWNh dGlvbi4gIEVhY2ggc3VjaAogICAgICAgICAgICAgICAgICAgICBjb29raWUgaXMgZ3VhcmFudGVl ZCB0byBiZSB1bmlxdWUgZm9yIHRoZQogICAgICAgICAgICAgICAgICAgICBjb3JyZXNwb25kaW5n IHNlY2NvbXAgZmlsdGVyLgoKICAgICAgICAgICAgICAgICAgICAgwrcgSXQgY2FuIGJlIHVzZWQg d2l0aCB0aGUKICAgICAgICAgICAgICAgICAgICAgICBTRUNDT01QX0lPQ1RMX05PVElGX0lEX1ZB TElEIGlvY3RsKDIpIG9wZXJhdGlvbgogICAgICAgICAgICAgICAgICAgICAgIHRvIHZlcmlmeSB0 aGF0IHRoZSB0YXJnZXQgaXMgc3RpbGwgYWxpdmUuCgogICAgICAgICAgICAgICAgICAgICDCtyBX aGVuIHJldHVybmluZyBhIG5vdGlmaWNhdGlvbiByZXNwb25zZSB0byB0aGUKICAgICAgICAgICAg ICAgICAgICAgICBrZXJuZWwsIHRoZSBzdXBlcnZpc29yIG11c3QgaW5jbHVkZSB0aGUgY29va2ll CiAgICAgICAgICAgICAgICAgICAgICAgdmFsdWUgaW4gdGhlIHNlY2NvbXBfbm90aWZfcmVzcCBz dHJ1Y3R1cmUgdGhhdCBpcwogICAgICAgICAgICAgICAgICAgICAgIHNwZWNpZmllZCBhcyB0aGUg YXJndW1lbnQgb2YgdGhlCiAgICAgICAgICAgICAgICAgICAgICAgU0VDQ09NUF9JT0NUTF9OT1RJ Rl9TRU5EIG9wZXJhdGlvbi4KCiAgICAgICAgICAgICAgcGlkICAgIFRoaXMgaXMgdGhlIHRocmVh ZCBJRCBvZiB0aGUgdGFyZ2V0IHRocmVhZCB0aGF0CiAgICAgICAgICAgICAgICAgICAgIHRyaWdn ZXJlZCB0aGUgbm90aWZpY2F0aW9uIGV2ZW50LgoKICAgICAgICAgICAgICBmbGFncyAgVGhpcyBp cyBhIGJpdCBtYXNrIG9mIGZsYWdzIHByb3ZpZGluZyBmdXJ0aGVyCiAgICAgICAgICAgICAgICAg ICAgIGluZm9ybWF0aW9uIG9uIHRoZSBldmVudC4gIEluIHRoZSBjdXJyZW50CiAgICAgICAgICAg ICAgICAgICAgIGltcGxlbWVudGF0aW9uLCB0aGlzIGZpZWxkIGlzIGFsd2F5cyB6ZXJvLgoKICAg ICAgICAgICAgICBkYXRhICAgVGhpcyBpcyBhIHNlY2NvbXBfZGF0YSBzdHJ1Y3R1cmUgY29udGFp bmluZwogICAgICAgICAgICAgICAgICAgICBpbmZvcm1hdGlvbiBhYm91dCB0aGUgc3lzdGVtIGNh bGwgdGhhdCB0cmlnZ2VyZWQKICAgICAgICAgICAgICAgICAgICAgdGhlIG5vdGlmaWNhdGlvbi4g IFRoaXMgaXMgdGhlIHNhbWUgc3RydWN0dXJlIHRoYXQKICAgICAgICAgICAgICAgICAgICAgaXMg cGFzc2VkIHRvIHRoZSBzZWNjb21wIGZpbHRlci4gIFNlZSBzZWNjb21wKDIpCiAgICAgICAgICAg ICAgICAgICAgIGZvciBkZXRhaWxzIG9mIHRoaXMgc3RydWN0dXJlLgoKICAgICAgICAgICAgICBP biBzdWNjZXNzLCB0aGlzIG9wZXJhdGlvbiByZXR1cm5zIDA7IG9uIGZhaWx1cmUsIC0xIGlzCiAg ICAgICAgICAgICAgcmV0dXJuZWQsIGFuZCBlcnJubyBpcyBzZXQgdG8gaW5kaWNhdGUgdGhlIGNh dXNlIG9mIHRoZQogICAgICAgICAgICAgIGVycm9yLiAgVGhpcyBvcGVyYXRpb24gY2FuIGZhaWwg d2l0aCB0aGUgZm9sbG93aW5nIGVycm9yczoKCiAgICAgICAgICAgICAgRUlOVkFMIChzaW5jZSBM aW51eCA1LjUpCiAgICAgICAgICAgICAgICAgICAgIFRoZSBzZWNjb21wX25vdGlmIHN0cnVjdHVy ZSB0aGF0IHdhcyBwYXNzZWQgdG8gdGhlCiAgICAgICAgICAgICAgICAgICAgIGNhbGwgY29udGFp bmVkIG5vbnplcm8gZmllbGRzLgoKICAgICAgICAgICAgICBFTk9FTlQgVGhlIHRhcmdldCB0aHJl YWQgd2FzIGtpbGxlZCBieSBhIHNpZ25hbCBhcyB0aGUKICAgICAgICAgICAgICAgICAgICAgbm90 aWZpY2F0aW9uIGluZm9ybWF0aW9uIHdhcyBiZWluZyBnZW5lcmF0ZWQsIG9yCiAgICAgICAgICAg ICAgICAgICAgIHRoZSB0YXJnZXQncyAoYmxvY2tlZCkgc3lzdGVtIGNhbGwgd2FzIGludGVycnVw dGVkCiAgICAgICAgICAgICAgICAgICAgIGJ5IGEgc2lnbmFsIGhhbmRsZXIuCgogICAgICAg4pSM 4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA 4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA 4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSQCiAgICAgICDi lIJGSVhNRSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIOKU ggogICAgICAg4pSc4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA 4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA 4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA 4pSkCiAgICAgICDilIJGcm9tIG15IGV4cGVyaW1lbnRzLCBpdCBhcHBlYXJzIHRoYXQgaWYgYSAg ICAgICAgICAgIOKUggogICAgICAg4pSCU0VDQ09NUF9JT0NUTF9OT1RJRl9SRUNWIGlzIGRvbmUg YWZ0ZXIgdGhlIHRhcmdldCAgICDilIIKICAgICAgIOKUgnRocmVhZCB0ZXJtaW5hdGVzLCB0aGVu IHRoZSBpb2N0bCgpIHNpbXBseSBibG9ja3MgICAg4pSCCiAgICAgICDilIIocmF0aGVyIHRoYW4g cmV0dXJuaW5nIGFuIGVycm9yIHRvIGluZGljYXRlIHRoYXQgdGhlIOKUggogICAgICAg4pSCdGFy Z2V0IG5vIGxvbmdlciBleGlzdHMpLiAgICAgICAgICAgICAgICAgICAgICAgICAgICDilIIKICAg ICAgIOKUgiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAg4pSCCiAgICAgICDilIJJIGZvdW5kIHRoYXQgc3VycHJpc2luZywgYW5kIGl0IHJlcXVpcmVk IHNvbWUgICAgICAgIOKUggogICAgICAg4pSCY29udG9ydGlvbnMgaW4gdGhlIGV4YW1wbGUgcHJv Z3JhbS4gIEl0IHdhcyBub3QgICAgICDilIIKICAgICAgIOKUgnBvc3NpYmxlIHRvIGNvZGUgbXkg U0lHQ0hMRCBoYW5kbGVyICh3aGljaCByZWFwcyB0aGUg4pSCCiAgICAgICDilIJ6b21iaWUgd2hl biB0aGUgd29ya2VyL3RhcmdldCB0ZXJtaW5hdGVzKSB0byBzaW1wbHkgIOKUggogICAgICAg4pSC c2V0IGEgZmxhZyBjaGVja2VkIGluIHRoZSBtYWluIGhhbmRsZU5vdGlmaWNhdGlvbnMoKSDilIIK ICAgICAgIOKUgmxvb3AsIHNpbmNlIHRoaXMgY3JlYXRlZCBhbiB1bmF2b2lkYWJsZSByYWNlIHdo ZXJlICAg4pSCCiAgICAgICDilIJ0aGUgY2hpbGQgbWlnaHQgdGVybWluYXRlIGp1c3QgYWZ0ZXIg SSBoYWQgY2hlY2tlZCAgIOKUggogICAgICAg4pSCdGhlIGZsYWcsIGJ1dCBiZWZvcmUgSSBibG9j a2VkIChmb3JldmVyISkgaW4gdGhlICAgICDilIIKICAgICAgIOKUglNFQ0NPTVBfSU9DVExfTk9U SUZfUkVDViBvcGVyYXRpb24uIEluc3RlYWQsIEkgaGFkICAg4pSCCiAgICAgICDilIJ0byBjb2Rl IHRoZSBzaWduYWwgaGFuZGxlciB0byBzaW1wbHkgY2FsbCBfZXhpdCgyKSAgIOKUggogICAgICAg 4pSCaW4gb3JkZXIgdG8gdGVybWluYXRlIHRoZSBwYXJlbnQgcHJvY2VzcyAodGhlICAgICAgICDi lIIKICAgICAgIOKUgnN1cGVydmlzb3IpLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAg4pSCCiAgICAgICDilIIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIOKUggogICAgICAg4pSCSXMgdGhpcyBleHBlY3RlZCBiZWhhdmlv cj8gSXQgc2VlbXMgdG8gbWUgcmF0aGVyICAgICDilIIKICAgICAgIOKUgmRlc2lyYWJsZSB0aGF0 IFNFQ0NPTVBfSU9DVExfTk9USUZfUkVDViBzaG91bGQgZ2l2ZSAg4pSCCiAgICAgICDilIJhbiBl cnJvciBpZiB0aGUgdGFyZ2V0IGhhcyB0ZXJtaW5hdGVkLiAgICAgICAgICAgICAgIOKUggogICAg ICAg4pSCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICDilIIKICAgICAgIOKUgkphbm4gcG9zdGVkIGEgcGF0Y2ggdG8gcmVjdGlmeSB0aGlzLCBidXQg dGhlcmUgd2FzICAg4pSCCiAgICAgICDilIJubyByZXNwb25zZSAoTG9yZSBsaW5rOiBodHRwczov L2JpdC5seS8zanZVQnhrKSB0byAgIOKUggogICAgICAg4pSCaGlzIHF1ZXN0aW9uIGFib3V0IGZp eGluZyB0aGlzIGlzc3VlLiAoSSd2ZSB0cmllZCAgICDilIIKICAgICAgIOKUgmJ1aWxkaW5nIHdp dGggdGhlIHBhdGNoLCBidXQgZW5jb3VudGVyZWQgYW4gaXNzdWUgICAg4pSCCiAgICAgICDilIJ3 aXRoIHRoZSB0YXJnZXQgcHJvY2VzcyBlbnRlcmluZyBEIHN0YXRlIGFmdGVyIGEgICAgIOKUggog ICAgICAg4pSCc2lnbmFsLikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICDilIIKICAgICAgIOKUgiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAg4pSCCiAgICAgICDilIJGb3Igbm93LCB0aGlzIGJlaGF2aW9yIGlzIGRv Y3VtZW50ZWQgaW4gQlVHUy4gICAgICAgIOKUggogICAgICAg4pSCICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICDilIIKICAgICAgIOKUgktlZXMgQ29v ayBjb21tZW50ZWQ6IExldCdzIGNoYW5nZSBbdGhpc10gQVNBUCEgICAgICAg4pSCCiAgICAgICDi lJTilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDi lIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDi lIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilJgKCiAgICAg ICBTRUNDT01QX0lPQ1RMX05PVElGX0lEX1ZBTElECiAgICAgICAgICAgICAgVGhpcyBvcGVyYXRp b24gY2FuIGJlIHVzZWQgdG8gY2hlY2sgdGhhdCBhIG5vdGlmaWNhdGlvbiBJRAogICAgICAgICAg ICAgIHJldHVybmVkIGJ5IGFuIGVhcmxpZXIgU0VDQ09NUF9JT0NUTF9OT1RJRl9SRUNWIG9wZXJh dGlvbgogICAgICAgICAgICAgIGlzIHN0aWxsIHZhbGlkIChpLmUuLCB0aGF0IHRoZSB0YXJnZXQg c3RpbGwgZXhpc3RzIGFuZCBpdHMKICAgICAgICAgICAgICBzeXN0ZW0gY2FsbCBpcyBzdGlsbCBi bG9ja2VkIHdhaXRpbmcgZm9yIGEgcmVzcG9uc2UpLgoKICAgICAgICAgICAgICBUaGUgdGhpcmQg aW9jdGwoMikgYXJndW1lbnQgaXMgYSBwb2ludGVyIHRvIHRoZSBjb29raWUKICAgICAgICAgICAg ICAoaWQpIHJldHVybmVkIGJ5IHRoZSBTRUNDT01QX0lPQ1RMX05PVElGX1JFQ1Ygb3BlcmF0aW9u LgoKICAgICAgICAgICAgICBUaGlzIG9wZXJhdGlvbiBpcyBuZWNlc3NhcnkgdG8gYXZvaWQgcmFj ZSBjb25kaXRpb25zIHRoYXQKICAgICAgICAgICAgICBjYW4gb2NjdXIgd2hlbiB0aGUgcGlkIHJl dHVybmVkIGJ5IHRoZQogICAgICAgICAgICAgIFNFQ0NPTVBfSU9DVExfTk9USUZfUkVDViBvcGVy YXRpb24gdGVybWluYXRlcywgYW5kIHRoYXQKICAgICAgICAgICAgICBwcm9jZXNzIElEIGlzIHJl dXNlZCBieSBhbm90aGVyIHByb2Nlc3MuICBBbiBleGFtcGxlIG9mCiAgICAgICAgICAgICAgdGhp cyBraW5kIG9mIHJhY2UgaXMgdGhlIGZvbGxvd2luZwoKICAgICAgICAgICAgICAxLiBBIG5vdGlm aWNhdGlvbiBpcyBnZW5lcmF0ZWQgb24gdGhlIGxpc3RlbmluZyBmaWxlCiAgICAgICAgICAgICAg ICAgZGVzY3JpcHRvci4gIFRoZSByZXR1cm5lZCBzZWNjb21wX25vdGlmIGNvbnRhaW5zIHRoZQog ICAgICAgICAgICAgICAgIFRJRCBvZiB0aGUgdGFyZ2V0IHRocmVhZCAoaW4gdGhlIHBpZCBmaWVs ZCBvZiB0aGUKICAgICAgICAgICAgICAgICBzdHJ1Y3R1cmUpLgoKICAgICAgICAgICAgICAyLiBU aGUgdGFyZ2V0IHRlcm1pbmF0ZXMuCgogICAgICAgICAgICAgIDMuIEFub3RoZXIgdGhyZWFkIG9y IHByb2Nlc3MgaXMgY3JlYXRlZCBvbiB0aGUgc3lzdGVtIHRoYXQKICAgICAgICAgICAgICAgICBi eSBjaGFuY2UgcmV1c2VzIHRoZSBUSUQgdGhhdCB3YXMgZnJlZWQgd2hlbiB0aGUgdGFyZ2V0CiAg ICAgICAgICAgICAgICAgdGVybWluYXRlZC4KCiAgICAgICAgICAgICAgNC4gVGhlIHN1cGVydmlz b3Igb3BlbigyKXMgdGhlIC9wcm9jL1t0aWRdL21lbSBmaWxlIGZvcgogICAgICAgICAgICAgICAg IHRoZSBUSUQgb2J0YWluZWQgaW4gc3RlcCAxLCB3aXRoIHRoZSBpbnRlbnRpb24gb2YgKHNheSkK ICAgICAgICAgICAgICAgICBpbnNwZWN0aW5nIHRoZSBtZW1vcnkgbG9jYXRpb24ocykgdGhhdCBj b250YWluaW5nIHRoZQogICAgICAgICAgICAgICAgIGFyZ3VtZW50KHMpIG9mIHRoZSBzeXN0ZW0g Y2FsbCB0aGF0IHRyaWdnZXJlZCB0aGUKICAgICAgICAgICAgICAgICBub3RpZmljYXRpb24gaW4g c3RlcCAxLgoKICAgICAgICAgICAgICBJbiB0aGUgYWJvdmUgc2NlbmFyaW8sIHRoZSByaXNrIGlz IHRoYXQgdGhlIHN1cGVydmlzb3IgbWF5CiAgICAgICAgICAgICAgdHJ5IHRvIGFjY2VzcyB0aGUg bWVtb3J5IG9mIGEgcHJvY2VzcyBvdGhlciB0aGFuIHRoZQogICAgICAgICAgICAgIHRhcmdldC4g IFRoaXMgcmFjZSBjYW4gYmUgYXZvaWRlZCBieSBmb2xsb3dpbmcgdGhlIGNhbGwgdG8KICAgICAg ICAgICAgICBvcGVuKDIpIHdpdGggYSBTRUNDT01QX0lPQ1RMX05PVElGX0lEX1ZBTElEIG9wZXJh dGlvbiB0bwogICAgICAgICAgICAgIHZlcmlmeSB0aGF0IHRoZSBwcm9jZXNzIHRoYXQgZ2VuZXJh dGVkIHRoZSBub3RpZmljYXRpb24gaXMKICAgICAgICAgICAgICBzdGlsbCBhbGl2ZS4gIChOb3Rl IHRoYXQgaWYgdGhlIHRhcmdldCB0ZXJtaW5hdGVzIGFmdGVyCiAgICAgICAgICAgICAgdGhlIGxh dHRlciBzdGVwLCBhIHN1YnNlcXVlbnQgcmVhZCgyKSBmcm9tIHRoZSBmaWxlCiAgICAgICAgICAg ICAgZGVzY3JpcHRvciBtYXkgcmV0dXJuIDAsIGluZGljYXRpbmcgZW5kIG9mIGZpbGUuKQoKICAg ICAgICAgICAgICBPbiBzdWNjZXNzIChpLmUuLCB0aGUgbm90aWZpY2F0aW9uIElEIGlzIHN0aWxs IHZhbGlkKSwKICAgICAgICAgICAgICB0aGlzIG9wZXJhdGlvbiByZXR1cm5zIDAuICBPbiBmYWls dXJlIChpLmUuLCB0aGUKICAgICAgICAgICAgICBub3RpZmljYXRpb24gSUQgaXMgbm8gbG9uZ2Vy IHZhbGlkKSwgLTEgaXMgcmV0dXJuZWQsIGFuZAogICAgICAgICAgICAgIGVycm5vIGlzIHNldCB0 byBFTk9FTlQuCgogICAgICAgU0VDQ09NUF9JT0NUTF9OT1RJRl9TRU5ECiAgICAgICAgICAgICAg VGhpcyBvcGVyYXRpb24gaXMgdXNlZCB0byBzZW5kIGEgbm90aWZpY2F0aW9uIHJlc3BvbnNlCiAg ICAgICAgICAgICAgYmFjayB0byB0aGUga2VybmVsLiAgVGhlIHRoaXJkIGlvY3RsKDIpIGFyZ3Vt ZW50IG9mIHRoaXMKICAgICAgICAgICAgICBzdHJ1Y3R1cmUgaXMgYSBwb2ludGVyIHRvIGEgc3Ry dWN0dXJlIG9mIHRoZSBmb2xsb3dpbmcKICAgICAgICAgICAgICBmb3JtOgoKICAgICAgICAgICAg ICAgICAgc3RydWN0IHNlY2NvbXBfbm90aWZfcmVzcCB7CiAgICAgICAgICAgICAgICAgICAgICBf X3U2NCBpZDsgICAgICAgICAgICAgICAvKiBDb29raWUgdmFsdWUgKi8KICAgICAgICAgICAgICAg ICAgICAgIF9fczY0IHZhbDsgICAgICAgICAgICAgIC8qIFN1Y2Nlc3MgcmV0dXJuIHZhbHVlICov CiAgICAgICAgICAgICAgICAgICAgICBfX3MzMiBlcnJvcjsgICAgICAgICAgICAvKiAwIChzdWNj ZXNzKSBvciBuZWdhdGl2ZQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgZXJyb3IgbnVtYmVyICovCiAgICAgICAgICAgICAgICAgICAgICBfX3UzMiBmbGFn czsgICAgICAgICAgICAvKiBTZWUgYmVsb3cgKi8KICAgICAgICAgICAgICAgICAgfTsKCiAgICAg ICAgICAgICAgVGhlIGZpZWxkcyBvZiB0aGlzIHN0cnVjdHVyZSBhcmUgYXMgZm9sbG93czoKCiAg ICAgICAgICAgICAgaWQgICAgIFRoaXMgaXMgdGhlIGNvb2tpZSB2YWx1ZSB0aGF0IHdhcyBvYnRh aW5lZCB1c2luZwogICAgICAgICAgICAgICAgICAgICB0aGUgU0VDQ09NUF9JT0NUTF9OT1RJRl9S RUNWIG9wZXJhdGlvbi4gIFRoaXMKICAgICAgICAgICAgICAgICAgICAgY29va2llIHZhbHVlIGFs bG93cyB0aGUga2VybmVsIHRvIGNvcnJlY3RseQogICAgICAgICAgICAgICAgICAgICBhc3NvY2lh dGUgdGhpcyByZXNwb25zZSB3aXRoIHRoZSBzeXN0ZW0gY2FsbCB0aGF0CiAgICAgICAgICAgICAg ICAgICAgIHRyaWdnZXJlZCB0aGUgdXNlci1zcGFjZSBub3RpZmljYXRpb24uCgogICAgICAgICAg ICAgIHZhbCAgICBUaGlzIGlzIHRoZSB2YWx1ZSB0aGF0IHdpbGwgYmUgdXNlZCBmb3IgYSBzcG9v ZmVkCiAgICAgICAgICAgICAgICAgICAgIHN1Y2Nlc3MgcmV0dXJuIGZvciB0aGUgdGFyZ2V0J3Mg c3lzdGVtIGNhbGw7IHNlZQogICAgICAgICAgICAgICAgICAgICBiZWxvdy4KCiAgICAgICAgICAg ICAgZXJyb3IgIFRoaXMgaXMgdGhlIHZhbHVlIHRoYXQgd2lsbCBiZSB1c2VkIGFzIHRoZSBlcnJv cgogICAgICAgICAgICAgICAgICAgICBudW1iZXIgKGVycm5vKSBmb3IgYSBzcG9vZmVkIGVycm9y IHJldHVybiBmb3IgdGhlCiAgICAgICAgICAgICAgICAgICAgIHRhcmdldCdzIHN5c3RlbSBjYWxs OyBzZWUgYmVsb3cuCgogICAgICAgICAgICAgIGZsYWdzICBUaGlzIGlzIGEgYml0IG1hc2sgdGhh dCBpbmNsdWRlcyB6ZXJvIG9yIG1vcmUgb2YKICAgICAgICAgICAgICAgICAgICAgdGhlIGZvbGxv d2luZyBmbGFnczoKCiAgICAgICAgICAgICAgICAgICAgIFNFQ0NPTVBfVVNFUl9OT1RJRl9GTEFH X0NPTlRJTlVFIChzaW5jZSBMaW51eCA1LjUpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBU ZWxsIHRoZSBrZXJuZWwgdG8gZXhlY3V0ZSB0aGUgdGFyZ2V0J3MKICAgICAgICAgICAgICAgICAg ICAgICAgICAgIHN5c3RlbSBjYWxsLgoKICAgICAgICAgICAgICBUd28ga2luZHMgb2YgcmVzcG9u c2UgYXJlIHBvc3NpYmxlOgoKICAgICAgICAgICAgICDCtyBBIHJlc3BvbnNlIHRvIHRoZSBrZXJu ZWwgdGVsbGluZyBpdCB0byBleGVjdXRlIHRoZQogICAgICAgICAgICAgICAgdGFyZ2V0J3Mgc3lz dGVtIGNhbGwuICBJbiB0aGlzIGNhc2UsIHRoZSBmbGFncyBmaWVsZAogICAgICAgICAgICAgICAg aW5jbHVkZXMgU0VDQ09NUF9VU0VSX05PVElGX0ZMQUdfQ09OVElOVUUgYW5kIHRoZSBlcnJvcgog ICAgICAgICAgICAgICAgYW5kIHZhbCBmaWVsZHMgbXVzdCBiZSB6ZXJvLgoKICAgICAgICAgICAg ICAgIFRoaXMga2luZCBvZiByZXNwb25zZSBjYW4gYmUgdXNlZnVsIGluIGNhc2VzIHdoZXJlIHRo ZQogICAgICAgICAgICAgICAgc3VwZXJ2aXNvciBuZWVkcyB0byBkbyBkZWVwZXIgYW5hbHlzaXMg b2YgdGhlIHRhcmdldCdzCiAgICAgICAgICAgICAgICBzeXN0ZW0gY2FsbCB0aGFuIGlzIHBvc3Np YmxlIGZyb20gYSBzZWNjb21wIGZpbHRlcgogICAgICAgICAgICAgICAgKGUuZy4sIGV4YW1pbmlu ZyB0aGUgdmFsdWVzIG9mIHBvaW50ZXIgYXJndW1lbnRzKSwgYW5kLAogICAgICAgICAgICAgICAg aGF2aW5nIGRlY2lkZWQgdGhhdCB0aGUgc3lzdGVtIGNhbGwgZG9lcyBub3QgcmVxdWlyZQogICAg ICAgICAgICAgICAgZW11bGF0aW9uIGJ5IHRoZSBzdXBlcnZpc29yLCB0aGUgc3VwZXJ2aXNvciB3 YW50cyB0aGUKICAgICAgICAgICAgICAgIHN5c3RlbSBjYWxsIHRvIGJlIGV4ZWN1dGVkIG5vcm1h bGx5IGluIHRoZSB0YXJnZXQuCgogICAgICAgICAgICAgICAgVGhlIFNFQ0NPTVBfVVNFUl9OT1RJ Rl9GTEFHX0NPTlRJTlVFIGZsYWcgc2hvdWxkIGJlIHVzZWQKICAgICAgICAgICAgICAgIHdpdGgg Y2F1dGlvbjsgc2VlIE5PVEVTLgoKICAgICAgICAgICAgICDCtyBBIHNwb29mZWQgcmV0dXJuIHZh bHVlIGZvciB0aGUgdGFyZ2V0J3Mgc3lzdGVtIGNhbGwuICBJbgogICAgICAgICAgICAgICAgdGhp cyBjYXNlLCB0aGUga2VybmVsIGRvZXMgbm90IGV4ZWN1dGUgdGhlIHRhcmdldCdzCiAgICAgICAg ICAgICAgICBzeXN0ZW0gY2FsbCwgaW5zdGVhZCBjYXVzaW5nIHRoZSBzeXN0ZW0gY2FsbCB0byBy ZXR1cm4gYQogICAgICAgICAgICAgICAgc3Bvb2ZlZCB2YWx1ZSBhcyBzcGVjaWZpZWQgYnkgZmll bGRzIG9mIHRoZQogICAgICAgICAgICAgICAgc2VjY29tcF9ub3RpZl9yZXNwIHN0cnVjdHVyZS4g IFRoZSBzdXBlcnZpc29yIHNob3VsZCBzZXQKICAgICAgICAgICAgICAgIHRoZSBmaWVsZHMgb2Yg dGhpcyBzdHJ1Y3R1cmUgYXMgZm9sbG93czoKCiAgICAgICAgICAgICAgICArICBmbGFncyBkb2Vz IG5vdCBjb250YWluCiAgICAgICAgICAgICAgICAgICBTRUNDT01QX1VTRVJfTk9USUZfRkxBR19D T05USU5VRS4KCiAgICAgICAgICAgICAgICArICBlcnJvciBpcyBzZXQgZWl0aGVyIHRvIDAgZm9y IGEgc3Bvb2ZlZCAic3VjY2VzcyIKICAgICAgICAgICAgICAgICAgIHJldHVybiBvciB0byBhIG5l Z2F0aXZlIGVycm9yIG51bWJlciBmb3IgYSBzcG9vZmVkCiAgICAgICAgICAgICAgICAgICAiZmFp bHVyZSIgcmV0dXJuLiAgSW4gdGhlIGZvcm1lciBjYXNlLCB0aGUga2VybmVsCiAgICAgICAgICAg ICAgICAgICBjYXVzZXMgdGhlIHRhcmdldCdzIHN5c3RlbSBjYWxsIHRvIHJldHVybiB0aGUgdmFs dWUKICAgICAgICAgICAgICAgICAgIHNwZWNpZmllZCBpbiB0aGUgdmFsIGZpZWxkLiAgSW4gdGhl IGxhdGVyIGNhc2UsIHRoZQogICAgICAgICAgICAgICAgICAga2VybmVsIGNhdXNlcyB0aGUgdGFy Z2V0J3Mgc3lzdGVtIGNhbGwgdG8gcmV0dXJuIC0xLAogICAgICAgICAgICAgICAgICAgYW5kIGVy cm5vIGlzIGFzc2lnbmVkIHRoZSBuZWdhdGVkIGVycm9yIHZhbHVlLgoKICAgICAgICAgICAgICAg ICsgIHZhbCBpcyBzZXQgdG8gYSB2YWx1ZSB0aGF0IHdpbGwgYmUgdXNlZCBhcyB0aGUgcmV0dXJu CiAgICAgICAgICAgICAgICAgICB2YWx1ZSBmb3IgYSBzcG9vZmVkICJzdWNjZXNzIiByZXR1cm4g Zm9yIHRoZSB0YXJnZXQncwogICAgICAgICAgICAgICAgICAgc3lzdGVtIGNhbGwuICBUaGUgdmFs dWUgaW4gdGhpcyBmaWVsZCBpcyBpZ25vcmVkIGlmCiAgICAgICAgICAgICAgICAgICB0aGUgZXJy b3IgZmllbGQgY29udGFpbnMgYSBub256ZXJvIHZhbHVlLgoKICAgICAgICAgICAgICAgICAgIOKU jOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKU gOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKU gOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUkAogICAgICAg ICAgICAgICAgICAg4pSCRklYTUUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICDilIIKICAgICAgICAgICAgICAgICAgIOKUnOKUgOKUgOKUgOKUgOKUgOKUgOKU gOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKU gOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKU gOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUpAogICAgICAgICAgICAgICAgICAg4pSCS2VlcyBD b29rIHN1Z2dlc3RlZDogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICDilIIKICAgICAg ICAgICAgICAgICAgIOKUgiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAg4pSCCiAgICAgICAgICAgICAgICAgICDilIJTdHJpY3RseSBzcGVha2luZywg dGhpcyBpcyBhcmNoaXRlY3R1cmUgc3BlY2lmaWMsICAgIOKUggogICAgICAgICAgICAgICAgICAg 4pSCYnV0IGFsbCBhcmNoaXRlY3R1cmVzIGRvIGl0IHRoaXMgd2F5LiBTaG91bGQgc2VjY29tcCDi lIIKICAgICAgICAgICAgICAgICAgIOKUgmVuZm9yY2UgdmFsID09IDAgd2hlbiBlcnIgIT0gMCA/ ICAgICAgICAgICAgICAgICAgICAg4pSCCiAgICAgICAgICAgICAgICAgICDilJTilIDilIDilIDi lIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDi lIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDi lIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilJgKCiAgICAgICAgICAgICAgT24g c3VjY2VzcywgdGhpcyBvcGVyYXRpb24gcmV0dXJucyAwOyBvbiBmYWlsdXJlLCAtMSBpcwogICAg ICAgICAgICAgIHJldHVybmVkLCBhbmQgZXJybm8gaXMgc2V0IHRvIGluZGljYXRlIHRoZSBjYXVz ZSBvZiB0aGUKICAgICAgICAgICAgICBlcnJvci4gIFRoaXMgb3BlcmF0aW9uIGNhbiBmYWlsIHdp dGggdGhlIGZvbGxvd2luZyBlcnJvcnM6CgogICAgICAgICAgICAgIEVJTlBST0dSRVNTCiAgICAg ICAgICAgICAgICAgICAgIEEgcmVzcG9uc2UgdG8gdGhpcyBub3RpZmljYXRpb24gaGFzIGFscmVh ZHkgYmVlbgogICAgICAgICAgICAgICAgICAgICBzZW50LgoKICAgICAgICAgICAgICBFSU5WQUwg QW4gaW52YWxpZCB2YWx1ZSB3YXMgc3BlY2lmaWVkIGluIHRoZSBmbGFncyBmaWVsZC4KCiAgICAg ICAgICAgICAgRUlOVkFMIFRoZSBmbGFncyBmaWVsZCBjb250YWluZWQKICAgICAgICAgICAgICAg ICAgICAgU0VDQ09NUF9VU0VSX05PVElGX0ZMQUdfQ09OVElOVUUsIGFuZCB0aGUgZXJyb3Igb3IK ICAgICAgICAgICAgICAgICAgICAgdmFsIGZpZWxkIHdhcyBub3QgemVyby4KCiAgICAgICAgICAg ICAgRU5PRU5UIFRoZSBibG9ja2VkIHN5c3RlbSBjYWxsIGluIHRoZSB0YXJnZXQgaGFzIGJlZW4K ICAgICAgICAgICAgICAgICAgICAgaW50ZXJydXB0ZWQgYnkgYSBzaWduYWwgaGFuZGxlciBvciB0 aGUgdGFyZ2V0IGhhcwogICAgICAgICAgICAgICAgICAgICB0ZXJtaW5hdGVkLgoKTk9URVMKICAg c2VsZWN0KCkvcG9sbCgpL2Vwb2xsIHNlbWFudGljcwogICAgICAgVGhlIGZpbGUgZGVzY3JpcHRv ciByZXR1cm5lZCB3aGVuIHNlY2NvbXAoMikgaXMgZW1wbG95ZWQgd2l0aCB0aGUKICAgICAgIFNF Q0NPTVBfRklMVEVSX0ZMQUdfTkVXX0xJU1RFTkVSIGZsYWcgY2FuIGJlIG1vbml0b3JlZCB1c2lu ZwogICAgICAgcG9sbCgyKSwgZXBvbGwoNyksIGFuZCBzZWxlY3QoMikuICBUaGVzZSBpbnRlcmZh Y2VzIGluZGljYXRlIHRoYXQKICAgICAgIHRoZSBmaWxlIGRlc2NyaXB0b3IgaXMgcmVhZHkgYXMg Zm9sbG93czoKCiAgICAgICDCtyBXaGVuIGEgbm90aWZpY2F0aW9uIGlzIHBlbmRpbmcsIHRoZXNl IGludGVyZmFjZXMgaW5kaWNhdGUgdGhhdAogICAgICAgICB0aGUgZmlsZSBkZXNjcmlwdG9yIGlz IHJlYWRhYmxlLiAgRm9sbG93aW5nIHN1Y2ggYW4gaW5kaWNhdGlvbiwKICAgICAgICAgYSBzdWJz ZXF1ZW50IFNFQ0NPTVBfSU9DVExfTk9USUZfUkVDViBpb2N0bCgyKSB3aWxsIG5vdCBibG9jaywK ICAgICAgICAgcmV0dXJuaW5nIGVpdGhlciBpbmZvcm1hdGlvbiBhYm91dCBhIG5vdGlmaWNhdGlv biBvciBlbHNlCiAgICAgICAgIGZhaWxpbmcgd2l0aCB0aGUgZXJyb3IgRUlOVFIgaWYgdGhlIHRh cmdldCBoYXMgYmVlbiBraWxsZWQgYnkgYQogICAgICAgICBzaWduYWwgb3IgaXRzIHN5c3RlbSBj YWxsIGhhcyBiZWVuIGludGVycnVwdGVkIGJ5IGEgc2lnbmFsCiAgICAgICAgIGhhbmRsZXIuCgog ICAgICAgwrcgQWZ0ZXIgdGhlIG5vdGlmaWNhdGlvbiBoYXMgYmVlbiByZWNlaXZlZCAoaS5lLiwg YnkgdGhlCiAgICAgICAgIFNFQ0NPTVBfSU9DVExfTk9USUZfUkVDViBpb2N0bCgyKSBvcGVyYXRp b24pLCB0aGVzZSBpbnRlcmZhY2VzCiAgICAgICAgIGluZGljYXRlIHRoYXQgdGhlIGZpbGUgZGVz Y3JpcHRvciBpcyB3cml0YWJsZSwgbWVhbmluZyB0aGF0IGEKICAgICAgICAgbm90aWZpY2F0aW9u IHJlc3BvbnNlIGNhbiBiZSBzZW50IHVzaW5nIHRoZQogICAgICAgICBTRUNDT01QX0lPQ1RMX05P VElGX1NFTkQgaW9jdGwoMikgb3BlcmF0aW9uLgoKICAgICAgICAg4pSM4pSA4pSA4pSA4pSA4pSA 4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA 4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA 4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSQCiAgICAgICAgIOKUgkZJWE1FICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg4pSCCiAgICAgICAgIOKU nOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKU gOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKU gOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUpAogICAgICAg ICDilIJCdXQgKGhvdykgaXMgdGhlIHdyaXRhYmxlLyhFKVBPTExPVVQgdXNlZnVsPyAgICAgICAg IOKUggogICAgICAgICDilJTilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDi lIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDi lIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDi lIDilIDilJgKCiAgICAgICDCtyBBZnRlciB0aGUgbGFzdCB0aHJlYWQgdXNpbmcgdGhlIGZpbHRl ciBoYXMgdGVybWluYXRlZCBhbmQgYmVlbgogICAgICAgICByZWFwZWQgdXNpbmcgd2FpdHBpZCgy KSAob3Igc2ltaWxhciksIHRoZSBmaWxlIGRlc2NyaXB0b3IKICAgICAgICAgaW5kaWNhdGVzIGFu IGVuZC1vZi1maWxlIGNvbmRpdGlvbiAocmVhZGFibGUgaW4gc2VsZWN0KDIpOwogICAgICAgICBQ T0xMSFVQL0VQT0xMSFVQIGluIHBvbGwoMikvIGVwb2xsX3dhaXQoMikpLgoKICAgRGVzaWduIGdv YWxzOyB1c2Ugb2YgU0VDQ09NUF9VU0VSX05PVElGX0ZMQUdfQ09OVElOVUUKICAgICAgIFRoZSBp bnRlbnQgb2YgdGhlIHVzZXItc3BhY2Ugbm90aWZpY2F0aW9uIGZlYXR1cmUgaXMgdG8gYWxsb3cK ICAgICAgIHN5c3RlbSBjYWxscyB0byBiZSBwZXJmb3JtZWQgb24gYmVoYWxmIG9mIHRoZSB0YXJn ZXQuICBUaGUKICAgICAgIHRhcmdldCdzIHN5c3RlbSBjYWxsIHNob3VsZCBlaXRoZXIgYmUgaGFu ZGxlZCBieSB0aGUgc3VwZXJ2aXNvcgogICAgICAgb3IgYWxsb3dlZCB0byBjb250aW51ZSBub3Jt YWxseSBpbiB0aGUga2VybmVsICh3aGVyZSBzdGFuZGFyZAogICAgICAgc2VjdXJpdHkgcG9saWNp ZXMgd2lsbCBiZSBhcHBsaWVkKS4KCiAgICAgICBOb3RlIHdlbGw6IHRoaXMgbWVjaGFuaXNtIG11 c3Qgbm90IGJlIHVzZWQgdG8gbWFrZSBzZWN1cml0eQogICAgICAgcG9saWN5IGRlY2lzaW9ucyBh Ym91dCB0aGUgc3lzdGVtIGNhbGwsIHdoaWNoIHdvdWxkIGJlIGluaGVyZW50bHkKICAgICAgIHJh Y2UtcHJvbmUgZm9yIHJlYXNvbnMgZGVzY3JpYmVkIG5leHQuCgogICAgICAgVGhlIFNFQ0NPTVBf VVNFUl9OT1RJRl9GTEFHX0NPTlRJTlVFIGZsYWcgbXVzdCBiZSB1c2VkIHdpdGgKICAgICAgIGNh dXRpb24uICBJZiBzZXQgYnkgdGhlIHN1cGVydmlzb3IsIHRoZSB0YXJnZXQncyBzeXN0ZW0gY2Fs bCB3aWxsCiAgICAgICBjb250aW51ZS4gIEhvd2V2ZXIsIHRoZXJlIGlzIGEgdGltZS1vZi1jaGVj aywgdGltZS1vZi11c2UgcmFjZQogICAgICAgaGVyZSwgc2luY2UgYW4gYXR0YWNrZXIgY291bGQg ZXhwbG9pdCB0aGUgaW50ZXJ2YWwgb2YgdGltZSB3aGVyZQogICAgICAgdGhlIHRhcmdldCBpcyBi bG9ja2VkIHdhaXRpbmcgb24gdGhlICJjb250aW51ZSIgcmVzcG9uc2UgdG8gZG8KICAgICAgIHRo aW5ncyBzdWNoIGFzIHJld3JpdGluZyB0aGUgc3lzdGVtIGNhbGwgYXJndW1lbnRzLgoKICAgICAg IE5vdGUgZnVydGhlcm1vcmUgdGhhdCBhIHVzZXItc3BhY2Ugbm90aWZpZXIgY2FuIGJlIGJ5cGFz c2VkIGlmCiAgICAgICB0aGUgZXhpc3RpbmcgZmlsdGVycyBhbGxvdyB0aGUgdXNlIG9mIHNlY2Nv bXAoMikgb3IgcHJjdGwoMikgdG8KICAgICAgIGluc3RhbGwgYSBmaWx0ZXIgdGhhdCByZXR1cm5z IGFuIGFjdGlvbiB2YWx1ZSB3aXRoIGEgaGlnaGVyCiAgICAgICBwcmVjZWRlbmNlIHRoYW4gU0VD Q09NUF9SRVRfVVNFUl9OT1RJRiAoc2VlIHNlY2NvbXAoMikpLgoKICAgICAgIEl0IHNob3VsZCB0 aHVzIGJlIGFic29sdXRlbHkgY2xlYXIgdGhhdCB0aGUgc2VjY29tcCB1c2VyLXNwYWNlCiAgICAg ICBub3RpZmljYXRpb24gbWVjaGFuaXNtIGNhbiBub3QgYmUgdXNlZCB0byBpbXBsZW1lbnQgYSBz ZWN1cml0eQogICAgICAgcG9saWN5ISAgSXQgc2hvdWxkIG9ubHkgZXZlciBiZSB1c2VkIGluIHNj ZW5hcmlvcyB3aGVyZSBhIG1vcmUKICAgICAgIHByaXZpbGVnZWQgcHJvY2VzcyBzdXBlcnZpc2Vz IHRoZSBzeXN0ZW0gY2FsbHMgb2YgYSBsZXNzZXIKICAgICAgIHByaXZpbGVnZWQgdGFyZ2V0IHRv IGdldCBhcm91bmQga2VybmVsLWVuZm9yY2VkIHNlY3VyaXR5CiAgICAgICByZXN0cmljdGlvbnMg d2hlbiB0aGUgc3VwZXJ2aXNvciBkZWVtcyB0aGlzIHNhZmUuICBJbiBvdGhlcgogICAgICAgd29y ZHMsIGluIG9yZGVyIHRvIGNvbnRpbnVlIGEgc3lzdGVtIGNhbGwsIHRoZSBzdXBlcnZpc29yIHNo b3VsZAogICAgICAgYmUgc3VyZSB0aGF0IGFub3RoZXIgc2VjdXJpdHkgbWVjaGFuaXNtIG9yIHRo ZSBrZXJuZWwgaXRzZWxmIHdpbGwKICAgICAgIHN1ZmZpY2llbnRseSBibG9jayB0aGUgc3lzdGVt IGNhbGwgaWYgaXRzIGFyZ3VtZW50cyBhcmUgcmV3cml0dGVuCiAgICAgICB0byBzb21ldGhpbmcg dW5zYWZlLgoKICAgSW50ZXJhY3Rpb24gd2l0aCBTQV9SRVNUQVJUIHNpZ25hbCBoYW5kbGVycwog ICAgICAgQ29uc2lkZXIgdGhlIGZvbGxvd2luZyBzY2VuYXJpbzoKCiAgICAgICDCtyBUaGUgdGFy Z2V0IHByb2Nlc3MgaGFzIHVzZWQgc2lnYWN0aW9uKDIpIHRvIGluc3RhbGwgYSBzaWduYWwKICAg ICAgICAgaGFuZGxlciB3aXRoIHRoZSBTQV9SRVNUQVJUIGZsYWcuCgogICAgICAgwrcgVGhlIHRh cmdldCBoYXMgbWFkZSBhIHN5c3RlbSBjYWxsIHRoYXQgdHJpZ2dlcmVkIGEgc2VjY29tcAogICAg ICAgICB1c2VyLXNwYWNlIG5vdGlmaWNhdGlvbiBhbmQgdGhlIHRhcmdldCBpcyBjdXJyZW50bHkg YmxvY2tlZAogICAgICAgICB1bnRpbCB0aGUgc3VwZXJ2aXNvciBzZW5kcyBhIG5vdGlmaWNhdGlv biByZXNwb25zZS4KCiAgICAgICDCtyBBIHNpZ25hbCBpcyBkZWxpdmVyZWQgdG8gdGhlIHRhcmdl dCBhbmQgdGhlIHNpZ25hbCBoYW5kbGVyIGlzCiAgICAgICAgIGV4ZWN1dGVkLgoKICAgICAgIMK3 IFdoZW4gKGlmKSB0aGUgc3VwZXJ2aXNvciBhdHRlbXB0cyB0byBzZW5kIGEgbm90aWZpY2F0aW9u CiAgICAgICAgIHJlc3BvbnNlLCB0aGUgU0VDQ09NUF9JT0NUTF9OT1RJRl9TRU5EIGlvY3RsKDIp KSBvcGVyYXRpb24gd2lsbAogICAgICAgICBmYWlsIHdpdGggdGhlIEVOT0VOVCBlcnJvci4KCiAg ICAgICBJbiB0aGlzIHNjZW5hcmlvLCB0aGUga2VybmVsIHdpbGwgcmVzdGFydCB0aGUgdGFyZ2V0 J3Mgc3lzdGVtCiAgICAgICBjYWxsLiAgQ29uc2VxdWVudGx5LCB0aGUgc3VwZXJ2aXNvciB3aWxs IHJlY2VpdmUgYW5vdGhlciB1c2VyLQogICAgICAgc3BhY2Ugbm90aWZpY2F0aW9uLiAgVGh1cywg ZGVwZW5kaW5nIG9uIGhvdyBtYW55IHRpbWVzIHRoZQogICAgICAgYmxvY2tlZCBzeXN0ZW0gY2Fs bCBpcyBpbnRlcnJ1cHRlZCBieSBhIHNpZ25hbCBoYW5kbGVyLCB0aGUKICAgICAgIHN1cGVydmlz b3IgbWF5IHJlY2VpdmUgbXVsdGlwbGUgbm90aWZpY2F0aW9ucyBmb3IgdGhlIHNhbWUKICAgICAg IGluc3RhbmNlIG9mIGEgc3lzdGVtIGNhbGwgaW4gdGhlIHRhcmdldC4KCiAgICAgICBPbmUgb2Rk aXR5IGlzIHRoYXQgc3lzdGVtIGNhbGwgcmVzdGFydGluZyBhcyBkZXNjcmliZWQgaW4gdGhpcwog ICAgICAgc2NlbmFyaW8gd2lsbCBvY2N1ciBldmVuIGZvciB0aGUgYmxvY2tpbmcgc3lzdGVtIGNh bGxzIGxpc3RlZCBpbgogICAgICAgc2lnbmFsKDcpIHRoYXQgd291bGQgbmV2ZXIgbm9ybWFsbHkg YmUgcmVzdGFydGVkIGJ5IHRoZQogICAgICAgU0FfUkVTVEFSVCBmbGFnLgoKICAgICAgIOKUjOKU gOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKU gOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKU gOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUkAogICAgICAg4pSC RklYTUUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICDilIIK ICAgICAgIOKUnOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKU gOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKU gOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKU pAogICAgICAg4pSCQWJvdXQgdGhlIGFib3ZlLCBLZWVzIENvb2sgY29tbWVudGVkOiAgICAgICAg ICAgICAgICDilIIKICAgICAgIOKUgiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAg4pSCCiAgICAgICDilIJEb2VzIHRoaXMgbmVlZCBmaXhpbmc/IEkg aW1hZ2luZSB0aGUgY29ycmVjdCAgICAgICAgIOKUggogICAgICAg4pSCYmVoYXZpb3IgZm9yIHRo aXMgY2FzZSB3b3VsZCBiZSBhIHJlc3BvbnNlIHRvIF9TRU5EICDilIIKICAgICAgIOKUgm9mIEVJ TlBST0dSRVNTIGFuZCB0aGUgdGFyZ2V0IHdvdWxkIHNlZSBFSU5UUiAgICAgICAg4pSCCiAgICAg ICDilIJub3JtYWxseT8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IOKUggogICAgICAg4pSCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICDilIIKICAgICAgIOKUgkkgbWVhbiwgaXQncyBub3QgbGlrZSBzZWNjb21wIGRv ZXNuJ3QgYWxyZWFkeSBleHBvc2Ug4pSCCiAgICAgICDilIJ3ZWlyZG5lc3Mgd2l0aCBzeXNjYWxs IHJlc3RhcnRzLiBOb3QgZXZlbiBhcm02NCAgICAgIOKUggogICAgICAg4pSCY29tcGF0IGFncmVl c1szXSB3aXRoIGFybTMyIGluIHRoaXMgcmVnYXJkLiA6KCAgICAgICDilIIKICAgICAgIOKUlOKU gOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKU gOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKU gOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUmAoKICAgICAgIOKU jOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKU gOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKU gOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUkAogICAgICAg 4pSCRklYTUUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICDi lIIKICAgICAgIOKUnOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKU gOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKU gOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKU gOKUpAogICAgICAg4pSCTWljaGFlbCBLZXJyaXNrOiBJIHdvbmRlciBhYm91dCB0aGUgZWZmZWN0 IG9mIHRoaXMgICDilIIKICAgICAgIOKUgm9kZGl0eSBmb3Igc3lzdGVtIGNhbGxzIHRoYXQgYXJl IG5vcm1hbGx5ICAgICAgICAgICAg4pSCCiAgICAgICDilIJub25yZXN0YXJ0YWJsZSBiZWNhdXNl IHRoZXkgaGF2ZSB0aW1lb3V0cy4gTXkgICAgICAgIOKUggogICAgICAg4pSCdW5kZXJzdGFuZGlu ZyBpcyB0aGF0IHRoZSBrZXJuZWwgZG9lc24ndCByZXN0YXJ0ICAgICDilIIKICAgICAgIOKUgnRo b3NlIHN5c3RlbSBjYWxscyBiZWNhdXNlIGl0J3MgaW1wb3NzaWJsZSBmb3IgdGhlICAg4pSCCiAg ICAgICDilIJrZXJuZWwgdG8gcmVzdGFydCB0aGUgY2FsbCB3aXRoIHRoZSByaWdodCB0aW1lb3V0 ICAgIOKUggogICAgICAg4pSCdmFsdWUuIEkgd29uZGVyIHdoYXQgaGFwcGVucyB3aGVuIHRob3Nl IHN5c3RlbSBjYWxscyDilIIKICAgICAgIOKUgmFyZSByZXN0YXJ0ZWQgaW4gdGhlIHNjZW5hcmlv IHdlJ3JlIGRpc2N1c3NpbmcuKSAgICAg4pSCCiAgICAgICDilJTilIDilIDilIDilIDilIDilIDi lIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDi lIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDi lIDilIDilIDilIDilIDilIDilIDilIDilIDilJgKCkJVR1MKICAgICAgIElmIGEgU0VDQ09NUF9J T0NUTF9OT1RJRl9SRUNWIGlvY3RsKDIpIG9wZXJhdGlvbiBpcyBwZXJmb3JtZWQKICAgICAgIGFm dGVyIHRoZSB0YXJnZXQgdGVybWluYXRlcywgdGhlbiB0aGUgaW9jdGwoMikgY2FsbCBzaW1wbHkg YmxvY2tzCiAgICAgICAocmF0aGVyIHRoYW4gcmV0dXJuaW5nIGFuIGVycm9yIHRvIGluZGljYXRl IHRoYXQgdGhlIHRhcmdldCBubwogICAgICAgbG9uZ2VyIGV4aXN0cykuCgogICAgICAg4pSM4pSA 4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA 4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA 4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSQCiAgICAgICDilIJG SVhNRSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIOKUggog ICAgICAg4pSc4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA 4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA 4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSk CiAgICAgICDilIJDb21tZW50IGZyb20gS2VlcyBDb29rOiAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIOKUggogICAgICAg4pSCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICDilIIKICAgICAgIOKUgkkgd2FudCB0aGlzIGZpeGVkLiBJdCBjYXVz ZWQgbWUgbm8gZW5kIG9mIHBhaW4gd2hlbiAg4pSCCiAgICAgICDilIJidWlsZGluZyB0aGUgc2Vs ZnRlc3RzLCBhbmQgZW5kZWQgdXAgc3Bhd25pbmcgbXkgICAgIOKUggogICAgICAg4pSCaW1wbGVt ZW50aW5nIGEgZ2xvYmFsIHRlc3QgdGltZW91dCBpbiBrc2VsZnRlc3QuIDpQICDilIIKICAgICAg IOKUgkJlZm9yZSB0aGUgdXNhZ2UgY291bnRlciByZWZhY3RvciwgdGhlcmUgd2FzIG5vIHNhbmUg 4pSCCiAgICAgICDilIJ3YXkgdG8gZGVhbCB3aXRoIHRoaXMsIGJ1dCBub3cgSSB0aGluayB3ZSdy ZSBjbG9zZS4gIOKUggogICAgICAg4pSCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICDilIIKICAgICAgIOKUlOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKU gOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKU gOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKU gOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUmAoKRVhBTVBMRVMKICAgICAgIFRoZSAoc29tZXdoYXQg Y29udHJpdmVkKSBwcm9ncmFtIHNob3duIGJlbG93IGRlbW9uc3RyYXRlcyB0aGUgdXNlCiAgICAg ICBvZiB0aGUgaW50ZXJmYWNlcyBkZXNjcmliZWQgaW4gdGhpcyBwYWdlLiAgVGhlIHByb2dyYW0g Y3JlYXRlcyBhCiAgICAgICBjaGlsZCBwcm9jZXNzIHRoYXQgc2VydmVzIGFzIHRoZSAidGFyZ2V0 IiBwcm9jZXNzLiAgVGhlIGNoaWxkCiAgICAgICBwcm9jZXNzIGluc3RhbGxzIGEgc2VjY29tcCBm aWx0ZXIgdGhhdCByZXR1cm5zIHRoZQogICAgICAgU0VDQ09NUF9SRVRfVVNFUl9OT1RJRiBhY3Rp b24gdmFsdWUgaWYgYSBjYWxsIGlzIG1hZGUgdG8KICAgICAgIG1rZGlyKDIpLiAgVGhlIGNoaWxk IHByb2Nlc3MgdGhlbiBjYWxscyBta2RpcigyKSBvbmNlIGZvciBlYWNoIG9mCiAgICAgICB0aGUg c3VwcGxpZWQgY29tbWFuZC1saW5lIGFyZ3VtZW50cywgYW5kIHJlcG9ydHMgdGhlIHJlc3VsdAog ICAgICAgcmV0dXJuZWQgYnkgdGhlIGNhbGwuICBBZnRlciBwcm9jZXNzaW5nIGFsbCBhcmd1bWVu dHMsIHRoZSBjaGlsZAogICAgICAgcHJvY2VzcyB0ZXJtaW5hdGVzLgoKICAgICAgIFRoZSBwYXJl bnQgcHJvY2VzcyBhY3RzIGFzIHRoZSBzdXBlcnZpc29yLCBsaXN0ZW5pbmcgZm9yIHRoZQogICAg ICAgbm90aWZpY2F0aW9ucyB0aGF0IGFyZSBnZW5lcmF0ZWQgd2hlbiB0aGUgdGFyZ2V0IHByb2Nl c3MgY2FsbHMKICAgICAgIG1rZGlyKDIpLiAgV2hlbiBzdWNoIGEgbm90aWZpY2F0aW9uIG9jY3Vy cywgdGhlIHN1cGVydmlzb3IKICAgICAgIGV4YW1pbmVzIHRoZSBtZW1vcnkgb2YgdGhlIHRhcmdl dCBwcm9jZXNzICh1c2luZyAvcHJvYy9bcGlkXS9tZW0pCiAgICAgICB0byBkaXNjb3ZlciB0aGUg cGF0aG5hbWUgYXJndW1lbnQgdGhhdCB3YXMgc3VwcGxpZWQgdG8gdGhlCiAgICAgICBta2Rpcigy KSBjYWxsLCBhbmQgcGVyZm9ybXMgb25lIG9mIHRoZSBmb2xsb3dpbmcgYWN0aW9uczoKCiAgICAg ICDCtyBJZiB0aGUgcGF0aG5hbWUgYmVnaW5zIHdpdGggdGhlIHByZWZpeCAiL3RtcC8iLCB0aGVu IHRoZQogICAgICAgICBzdXBlcnZpc29yIGF0dGVtcHRzIHRvIGNyZWF0ZSB0aGUgc3BlY2lmaWVk IGRpcmVjdG9yeSwgYW5kIHRoZW4KICAgICAgICAgc3Bvb2ZzIGEgcmV0dXJuIGZvciB0aGUgdGFy Z2V0IHByb2Nlc3MgYmFzZWQgb24gdGhlIHJldHVybgogICAgICAgICB2YWx1ZSBvZiB0aGUgc3Vw ZXJ2aXNvcidzIG1rZGlyKDIpIGNhbGwuICBJbiB0aGUgZXZlbnQgdGhhdAogICAgICAgICB0aGF0 IGNhbGwgc3VjY2VlZHMsIHRoZSBzcG9vZmVkIHN1Y2Nlc3MgcmV0dXJuIHZhbHVlIGlzIHRoZQog ICAgICAgICBsZW5ndGggb2YgdGhlIHBhdGhuYW1lLgoKICAgICAgIMK3IElmIHRoZSBwYXRobmFt ZSBiZWdpbnMgd2l0aCAiLi8iIChpLmUuLCBpdCBpcyBhIHJlbGF0aXZlCiAgICAgICAgIHBhdGhu YW1lKSwgdGhlIHN1cGVydmlzb3Igc2VuZHMgYQogICAgICAgICBTRUNDT01QX1VTRVJfTk9USUZf RkxBR19DT05USU5VRSByZXNwb25zZSB0byB0aGUga2VybmVsIHRvIHNheQogICAgICAgICB0aGF0 IHRoZSBrZXJuZWwgc2hvdWxkIGV4ZWN1dGUgdGhlIHRhcmdldCBwcm9jZXNzJ3MgbWtkaXIoMikK ICAgICAgICAgY2FsbC4KCiAgICAgICDCtyBJZiB0aGUgcGF0aG5hbWUgYmVnaW5zIHdpdGggc29t ZSBvdGhlciBwcmVmaXgsIHRoZSBzdXBlcnZpc29yCiAgICAgICAgIHNwb29mcyBhbiBlcnJvciBy ZXR1cm4gZm9yIHRoZSB0YXJnZXQgcHJvY2Vzcywgc28gdGhhdCB0aGUKICAgICAgICAgdGFyZ2V0 IHByb2Nlc3MncyBta2RpcigyKSBjYWxsIGFwcGVhcnMgdG8gZmFpbCB3aXRoIHRoZSBlcnJvcgog ICAgICAgICBFT1BOT1RTVVBQICgiT3BlcmF0aW9uIG5vdCBzdXBwb3J0ZWQiKS4gIEFkZGl0aW9u YWxseSwgaWYgdGhlCiAgICAgICAgIHNwZWNpZmllZCBwYXRobmFtZSBpcyBleGFjdGx5ICIvYnll IiwgdGhlbiB0aGUgc3VwZXJ2aXNvcgogICAgICAgICB0ZXJtaW5hdGVzLgoKICAgICAgIFRoaXMg cHJvZ3JhbSBjYW4gYmUgdXNlZCB0byBkZW1vbnN0cmF0ZSB2YXJpb3VzIGFzcGVjdHMgb2YgdGhl CiAgICAgICBiZWhhdmlvciBvZiB0aGUgc2VjY29tcCB1c2VyLXNwYWNlIG5vdGlmaWNhdGlvbiBt ZWNoYW5pc20uICBUbwogICAgICAgaGVscCBhaWQgc3VjaCBkZW1vbnN0cmF0aW9ucywgdGhlIHBy b2dyYW0gbG9ncyB2YXJpb3VzIG1lc3NhZ2VzCiAgICAgICB0byBzaG93IHRoZSBvcGVyYXRpb24g b2YgdGhlIHRhcmdldCBwcm9jZXNzIChsaW5lcyBwcmVmaXhlZCAiVDoiKQogICAgICAgYW5kIHRo ZSBzdXBlcnZpc29yIChpbmRlbnRlZCBsaW5lcyBwcmVmaXhlZCAiUzoiKS4KCiAgICAgICBJbiB0 aGUgZm9sbG93aW5nIGV4YW1wbGUsIHRoZSB0YXJnZXQgYXR0ZW1wdHMgdG8gY3JlYXRlIHRoZQog ICAgICAgZGlyZWN0b3J5IC90bXAveC4gIFVwb24gcmVjZWl2aW5nIHRoZSBub3RpZmljYXRpb24s IHRoZQogICAgICAgc3VwZXJ2aXNvciBjcmVhdGVzIHRoZSBkaXJlY3Rvcnkgb24gdGhlIHRhcmdl dCdzIGJlaGFsZiwgYW5kCiAgICAgICBzcG9vZnMgYSBzdWNjZXNzIHJldHVybiB0byBiZSByZWNl aXZlZCBieSB0aGUgdGFyZ2V0IHByb2Nlc3MncwogICAgICAgbWtkaXIoMikgY2FsbC4KCiAgICAg ICAgICAgJCAuL3NlY2NvbXBfdW5vdGlmeSAvdG1wL3gKICAgICAgICAgICBUOiBQSUQgPSAyMzE2 OAoKICAgICAgICAgICBUOiBhYm91dCB0byBta2RpcigiL3RtcC94IikKICAgICAgICAgICAgICAg ICAgIFM6IGdvdCBub3RpZmljYXRpb24gKElEIDB4MTc0NDVjNGEwZjRlMGUzYykgZm9yIFBJRCAy MzE2OAogICAgICAgICAgICAgICAgICAgUzogZXhlY3V0aW5nOiBta2RpcigiL3RtcC94IiwgMDcw MCkKICAgICAgICAgICAgICAgICAgIFM6IHN1Y2Nlc3MhIHNwb29mZWQgcmV0dXJuID0gNgogICAg ICAgICAgICAgICAgICAgUzogc2VuZGluZyByZXNwb25zZSAoZmxhZ3MgPSAwOyB2YWwgPSA2OyBl cnJvciA9IDApCiAgICAgICAgICAgVDogU1VDQ0VTUzogbWtkaXIoMikgcmV0dXJuZWQgNgoKICAg ICAgICAgICBUOiB0ZXJtaW5hdGluZwogICAgICAgICAgICAgICAgICAgUzogdGFyZ2V0IGhhcyB0 ZXJtaW5hdGVkOyBieWUKCiAgICAgICBJbiB0aGUgYWJvdmUgb3V0cHV0LCBub3RlIHRoYXQgdGhl IHNwb29mZWQgcmV0dXJuIHZhbHVlIHNlZW4gYnkKICAgICAgIHRoZSB0YXJnZXQgcHJvY2VzcyBp cyA2ICh0aGUgbGVuZ3RoIG9mIHRoZSBwYXRobmFtZSAvdG1wL3gpLAogICAgICAgd2hlcmVhcyBh IG5vcm1hbCBta2RpcigyKSBjYWxsIHJldHVybnMgMCBvbiBzdWNjZXNzLgoKICAgICAgIEluIHRo ZSBuZXh0IGV4YW1wbGUsIHRoZSB0YXJnZXQgYXR0ZW1wdHMgdG8gY3JlYXRlIGEgZGlyZWN0b3J5 CiAgICAgICB1c2luZyB0aGUgcmVsYXRpdmUgcGF0aG5hbWUgLi9zdWIuICBTaW5jZSB0aGlzIHBh dGhuYW1lIHN0YXJ0cwogICAgICAgd2l0aCAiLi8iLCB0aGUgc3VwZXJ2aXNvciBzZW5kcyBhCiAg ICAgICBTRUNDT01QX1VTRVJfTk9USUZfRkxBR19DT05USU5VRSByZXNwb25zZSB0byB0aGUga2Vy bmVsLCBhbmQgdGhlCiAgICAgICBrZXJuZWwgdGhlbiAoc3VjY2Vzc2Z1bGx5KSBleGVjdXRlcyB0 aGUgdGFyZ2V0IHByb2Nlc3MncyBta2RpcigyKQogICAgICAgY2FsbC4KCiAgICAgICAgICAgJCAu L3NlY2NvbXBfdW5vdGlmeSAuL3N1YgogICAgICAgICAgIFQ6IFBJRCA9IDIzMjA0CgogICAgICAg ICAgIFQ6IGFib3V0IHRvIG1rZGlyKCIuL3N1YiIpCiAgICAgICAgICAgICAgICAgICBTOiBnb3Qg bm90aWZpY2F0aW9uIChJRCAweGRkYjE2YWJlMjViNGMxMikgZm9yIFBJRCAyMzIwNAogICAgICAg ICAgICAgICAgICAgUzogdGFyZ2V0IGNhbiBleGVjdXRlIHN5c3RlbSBjYWxsCiAgICAgICAgICAg ICAgICAgICBTOiBzZW5kaW5nIHJlc3BvbnNlIChmbGFncyA9IDB4MTsgdmFsID0gMDsgZXJyb3Ig PSAwKQogICAgICAgICAgIFQ6IFNVQ0NFU1M6IG1rZGlyKDIpIHJldHVybmVkIDAKCiAgICAgICAg ICAgVDogdGVybWluYXRpbmcKICAgICAgICAgICAgICAgICAgIFM6IHRhcmdldCBoYXMgdGVybWlu YXRlZDsgYnllCgogICAgICAgSWYgdGhlIHRhcmdldCBwcm9jZXNzIGF0dGVtcHRzIHRvIGNyZWF0 ZSBhIGRpcmVjdG9yeSB3aXRoIGEKICAgICAgIHBhdGhuYW1lIHRoYXQgZG9lc24ndCBzdGFydCB3 aXRoICIuIiBhbmQgZG9lc24ndCBiZWdpbiB3aXRoIHRoZQogICAgICAgcHJlZml4ICIvdG1wLyIs IHRoZW4gdGhlIHN1cGVydmlzb3Igc3Bvb2ZzIGFuIGVycm9yIHJldHVybgogICAgICAgKEVPUE5P VFNVUFAsICJPcGVyYXRpb24gbm90ICBzdXBwb3J0ZWQiKSBmb3IgdGhlIHRhcmdldCdzCiAgICAg ICBta2RpcigyKSBjYWxsICh3aGljaCBpcyBub3QgZXhlY3V0ZWQpOgoKICAgICAgICAgICAkIC4v c2VjY29tcF91bm90aWZ5IC94eHgKICAgICAgICAgICBUOiBQSUQgPSAyMzE3OAoKICAgICAgICAg ICBUOiBhYm91dCB0byBta2RpcigiL3h4eCIpCiAgICAgICAgICAgICAgICAgICBTOiBnb3Qgbm90 aWZpY2F0aW9uIChJRCAweGU3ZGMwOTVkMWM1MjRlODApIGZvciBQSUQgMjMxNzgKICAgICAgICAg ICAgICAgICAgIFM6IHNwb29maW5nIGVycm9yIHJlc3BvbnNlIChPcGVyYXRpb24gbm90IHN1cHBv cnRlZCkKICAgICAgICAgICAgICAgICAgIFM6IHNlbmRpbmcgcmVzcG9uc2UgKGZsYWdzID0gMDsg dmFsID0gMDsgZXJyb3IgPSAtOTUpCiAgICAgICAgICAgVDogRVJST1I6IG1rZGlyKDIpOiBPcGVy YXRpb24gbm90IHN1cHBvcnRlZAoKICAgICAgICAgICBUOiB0ZXJtaW5hdGluZwogICAgICAgICAg ICAgICAgICAgUzogdGFyZ2V0IGhhcyB0ZXJtaW5hdGVkOyBieWUKCiAgICAgICBJbiB0aGUgbmV4 dCBleGFtcGxlLCB0aGUgdGFyZ2V0IHByb2Nlc3MgYXR0ZW1wdHMgdG8gY3JlYXRlIGEKICAgICAg IGRpcmVjdG9yeSB3aXRoIHRoZSBwYXRobmFtZSAvdG1wL25vc3VjaGRpci9iLiAgVXBvbiByZWNl aXZpbmcgdGhlCiAgICAgICBub3RpZmljYXRpb24sIHRoZSBzdXBlcnZpc29yIGF0dGVtcHRzIHRv IGNyZWF0ZSB0aGF0IGRpcmVjdG9yeSwKICAgICAgIGJ1dCB0aGUgbWtkaXIoMikgY2FsbCBmYWls cyBiZWNhdXNlIHRoZSBkaXJlY3RvcnkgL3RtcC9ub3N1Y2hkaXIKICAgICAgIGRvZXMgbm90IGV4 aXN0LiAgQ29uc2VxdWVudGx5LCB0aGUgc3VwZXJ2aXNvciBzcG9vZnMgYW4gZXJyb3IKICAgICAg IHJldHVybiB0aGF0IHBhc3NlcyB0aGUgZXJyb3IgdGhhdCBpdCByZWNlaXZlZCBiYWNrIHRvIHRo ZSB0YXJnZXQKICAgICAgIHByb2Nlc3MncyBta2RpcigyKSBjYWxsLgoKICAgICAgICAgICAkIC4v c2VjY29tcF91bm90aWZ5IC90bXAvbm9zdWNoZGlyL2IKICAgICAgICAgICBUOiBQSUQgPSAyMzE5 OQoKICAgICAgICAgICBUOiBhYm91dCB0byBta2RpcigiL3RtcC9ub3N1Y2hkaXIvYiIpCiAgICAg ICAgICAgICAgICAgICBTOiBnb3Qgbm90aWZpY2F0aW9uIChJRCAweDg3NDQ0NTQyOTM1MDYwNDYp IGZvciBQSUQgMjMxOTkKICAgICAgICAgICAgICAgICAgIFM6IGV4ZWN1dGluZzogbWtkaXIoIi90 bXAvbm9zdWNoZGlyL2IiLCAwNzAwKQogICAgICAgICAgICAgICAgICAgUzogZmFpbHVyZSEgKGVy cm5vID0gMjsgTm8gc3VjaCBmaWxlIG9yIGRpcmVjdG9yeSkKICAgICAgICAgICAgICAgICAgIFM6 IHNlbmRpbmcgcmVzcG9uc2UgKGZsYWdzID0gMDsgdmFsID0gMDsgZXJyb3IgPSAtMikKICAgICAg ICAgICBUOiBFUlJPUjogbWtkaXIoMik6IE5vIHN1Y2ggZmlsZSBvciBkaXJlY3RvcnkKCiAgICAg ICAgICAgVDogdGVybWluYXRpbmcKICAgICAgICAgICAgICAgICAgIFM6IHRhcmdldCBoYXMgdGVy bWluYXRlZDsgYnllCgogICAgICAgSWYgdGhlIHN1cGVydmlzb3IgcmVjZWl2ZXMgYSBub3RpZmlj YXRpb24gYW5kIHNlZXMgdGhhdCB0aGUKICAgICAgIGFyZ3VtZW50IG9mIHRoZSB0YXJnZXQncyBt a2RpcigyKSBpcyB0aGUgc3RyaW5nICIvYnllIiwgdGhlbiAoYXMKICAgICAgIHdlbGwgYXMgc3Bv b2ZpbmcgYW4gRU9QTk9UU1VQUCBlcnJvciksIHRoZSBzdXBlcnZpc29yIHRlcm1pbmF0ZXMuCiAg ICAgICBJZiB0aGUgdGFyZ2V0IHByb2Nlc3Mgc3Vic2VxdWVudGx5IGV4ZWN1dGVzIGFub3RoZXIg bWtkaXIoMikgdGhhdAogICAgICAgdHJpZ2dlcnMgaXRzIHNlY2NvbXAgZmlsdGVyIHRvIHJldHVy biB0aGUgU0VDQ09NUF9SRVRfVVNFUl9OT1RJRgogICAgICAgYWN0aW9uIHZhbHVlLCB0aGVuIHRo ZSBrZXJuZWwgY2F1c2VzIHRoZSB0YXJnZXQgcHJvY2VzcydzIHN5c3RlbQogICAgICAgY2FsbCB0 byBmYWlsIHdpdGggdGhlIGVycm9yIEVOT1NZUyAoIkZ1bmN0aW9uIG5vdCBpbXBsZW1lbnRlZCIp LgogICAgICAgVGhpcyBpcyBkZW1vbnN0cmF0ZWQgYnkgdGhlIGZvbGxvd2luZyBleGFtcGxlOgoK ICAgICAgICAgICAkIC4vc2VjY29tcF91bm90aWZ5IC9ieWUgL3RtcC95CiAgICAgICAgICAgVDog UElEID0gMjMxODUKCiAgICAgICAgICAgVDogYWJvdXQgdG8gbWtkaXIoIi9ieWUiKQogICAgICAg ICAgICAgICAgICAgUzogZ290IG5vdGlmaWNhdGlvbiAoSUQgMHhhODEyMzZiMWQyZjdiMGY0KSBm b3IgUElEIDIzMTg1CiAgICAgICAgICAgICAgICAgICBTOiBzcG9vZmluZyBlcnJvciByZXNwb25z ZSAoT3BlcmF0aW9uIG5vdCBzdXBwb3J0ZWQpCiAgICAgICAgICAgICAgICAgICBTOiBzZW5kaW5n IHJlc3BvbnNlIChmbGFncyA9IDA7IHZhbCA9IDA7IGVycm9yID0gLTk1KQogICAgICAgICAgICAg ICAgICAgUzogdGVybWluYXRpbmcgKioqKioqKioqKgogICAgICAgICAgIFQ6IEVSUk9SOiBta2Rp cigyKTogT3BlcmF0aW9uIG5vdCBzdXBwb3J0ZWQKCiAgICAgICAgICAgVDogYWJvdXQgdG8gbWtk aXIoIi90bXAveSIpCiAgICAgICAgICAgVDogRVJST1I6IG1rZGlyKDIpOiBGdW5jdGlvbiBub3Qg aW1wbGVtZW50ZWQKCiAgICAgICAgICAgVDogdGVybWluYXRpbmcKCiAgIFByb2dyYW0gc291cmNl CiAgICAgICAjZGVmaW5lIF9HTlVfU09VUkNFCiAgICAgICAjaW5jbHVkZSA8c3lzL3R5cGVzLmg+ CiAgICAgICAjaW5jbHVkZSA8c3lzL3ByY3RsLmg+CiAgICAgICAjaW5jbHVkZSA8ZmNudGwuaD4K ICAgICAgICNpbmNsdWRlIDxsaW1pdHMuaD4KICAgICAgICNpbmNsdWRlIDxzaWduYWwuaD4KICAg ICAgICNpbmNsdWRlIDxzdGRkZWYuaD4KICAgICAgICNpbmNsdWRlIDxzdGRpbnQuaD4KICAgICAg ICNpbmNsdWRlIDxzdGRib29sLmg+CiAgICAgICAjaW5jbHVkZSA8bGludXgvYXVkaXQuaD4KICAg ICAgICNpbmNsdWRlIDxzeXMvc3lzY2FsbC5oPgogICAgICAgI2luY2x1ZGUgPHN5cy9zdGF0Lmg+ CiAgICAgICAjaW5jbHVkZSA8bGludXgvZmlsdGVyLmg+CiAgICAgICAjaW5jbHVkZSA8bGludXgv c2VjY29tcC5oPgogICAgICAgI2luY2x1ZGUgPHN5cy9pb2N0bC5oPgogICAgICAgI2luY2x1ZGUg PHN0ZGlvLmg+CiAgICAgICAjaW5jbHVkZSA8c3RkbGliLmg+CiAgICAgICAjaW5jbHVkZSA8dW5p c3RkLmg+CiAgICAgICAjaW5jbHVkZSA8ZXJybm8uaD4KICAgICAgICNpbmNsdWRlIDxzeXMvc29j a2V0Lmg+CiAgICAgICAjaW5jbHVkZSA8c3lzL3VuLmg+CgogICAgICAgI2RlZmluZSBlcnJFeGl0 KG1zZykgICAgZG8geyBwZXJyb3IobXNnKTsgZXhpdChFWElUX0ZBSUxVUkUpOyBcCiAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICB9IHdoaWxlICgwKQoKICAgICAgIC8qIFNlbmQgdGhlIGZp bGUgZGVzY3JpcHRvciAnZmQnIG92ZXIgdGhlIGNvbm5lY3RlZCBVTklYIGRvbWFpbiBzb2NrZXQK ICAgICAgICAgICdzb2NrZmQnLiBSZXR1cm5zIDAgb24gc3VjY2Vzcywgb3IgLTEgb24gZXJyb3Iu ICovCgogICAgICAgc3RhdGljIGludAogICAgICAgc2VuZGZkKGludCBzb2NrZmQsIGludCBmZCkK ICAgICAgIHsKICAgICAgICAgICBzdHJ1Y3QgbXNnaGRyIG1zZ2g7CiAgICAgICAgICAgc3RydWN0 IGlvdmVjIGlvdjsKICAgICAgICAgICBpbnQgZGF0YTsKICAgICAgICAgICBzdHJ1Y3QgY21zZ2hk ciAqY21zZ3A7CgogICAgICAgICAgIC8qIEFsbG9jYXRlIGEgY2hhciBhcnJheSBvZiBzdWl0YWJs ZSBzaXplIHRvIGhvbGQgdGhlIGFuY2lsbGFyeSBkYXRhLgogICAgICAgICAgICAgIEhvd2V2ZXIs IHNpbmNlIHRoaXMgYnVmZmVyIGlzIGluIHJlYWxpdHkgYSAnc3RydWN0IGNtc2doZHInLCB1c2Ug YQogICAgICAgICAgICAgIHVuaW9uIHRvIGVuc3VyZSB0aGF0IGl0IGlzIHN1aXRhYmx5IGFsaWdu ZWQuICovCiAgICAgICAgICAgdW5pb24gewogICAgICAgICAgICAgICBjaGFyICAgYnVmW0NNU0df U1BBQ0Uoc2l6ZW9mKGludCkpXTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFNw YWNlIGxhcmdlIGVub3VnaCB0byBob2xkIGFuICdpbnQnICovCiAgICAgICAgICAgICAgIHN0cnVj dCBjbXNnaGRyIGFsaWduOwogICAgICAgICAgIH0gY29udHJvbE1zZzsKCiAgICAgICAgICAgLyog VGhlICdtc2dfbmFtZScgZmllbGQgY2FuIGJlIHVzZWQgdG8gc3BlY2lmeSB0aGUgYWRkcmVzcyBv ZiB0aGUKICAgICAgICAgICAgICBkZXN0aW5hdGlvbiBzb2NrZXQgd2hlbiBzZW5kaW5nIGEgZGF0 YWdyYW0uIEhvd2V2ZXIsIHdlIGRvIG5vdAogICAgICAgICAgICAgIG5lZWQgdG8gdXNlIHRoaXMg ZmllbGQgYmVjYXVzZSAnc29ja2ZkJyBpcyBhIGNvbm5lY3RlZCBzb2NrZXQuICovCgogICAgICAg ICAgIG1zZ2gubXNnX25hbWUgPSBOVUxMOwogICAgICAgICAgIG1zZ2gubXNnX25hbWVsZW4gPSAw OwoKICAgICAgICAgICAvKiBPbiBMaW51eCwgd2UgbXVzdCB0cmFuc21pdCBhdCBsZWFzdCBvbmUg Ynl0ZSBvZiByZWFsIGRhdGEgaW4KICAgICAgICAgICAgICBvcmRlciB0byBzZW5kIGFuY2lsbGFy eSBkYXRhLiBXZSB0cmFuc21pdCBhbiBhcmJpdHJhcnkgaW50ZWdlcgogICAgICAgICAgICAgIHdo b3NlIHZhbHVlIGlzIGlnbm9yZWQgYnkgcmVjdmZkKCkuICovCgogICAgICAgICAgIG1zZ2gubXNn X2lvdiA9ICZpb3Y7CiAgICAgICAgICAgbXNnaC5tc2dfaW92bGVuID0gMTsKICAgICAgICAgICBp b3YuaW92X2Jhc2UgPSAmZGF0YTsKICAgICAgICAgICBpb3YuaW92X2xlbiA9IHNpemVvZihpbnQp OwogICAgICAgICAgIGRhdGEgPSAxMjM0NTsKCiAgICAgICAgICAgLyogU2V0ICdtc2doZHInIGZp ZWxkcyB0aGF0IGRlc2NyaWJlIGFuY2lsbGFyeSBkYXRhICovCgogICAgICAgICAgIG1zZ2gubXNn X2NvbnRyb2wgPSBjb250cm9sTXNnLmJ1ZjsKICAgICAgICAgICBtc2doLm1zZ19jb250cm9sbGVu ID0gc2l6ZW9mKGNvbnRyb2xNc2cuYnVmKTsKCiAgICAgICAgICAgLyogU2V0IHVwIGFuY2lsbGFy eSBkYXRhIGRlc2NyaWJpbmcgZmlsZSBkZXNjcmlwdG9yIHRvIHNlbmQgKi8KCiAgICAgICAgICAg Y21zZ3AgPSBDTVNHX0ZJUlNUSERSKCZtc2doKTsKICAgICAgICAgICBjbXNncC0+Y21zZ19sZXZl bCA9IFNPTF9TT0NLRVQ7CiAgICAgICAgICAgY21zZ3AtPmNtc2dfdHlwZSA9IFNDTV9SSUdIVFM7 CiAgICAgICAgICAgY21zZ3AtPmNtc2dfbGVuID0gQ01TR19MRU4oc2l6ZW9mKGludCkpOwogICAg ICAgICAgIG1lbWNweShDTVNHX0RBVEEoY21zZ3ApLCAmZmQsIHNpemVvZihpbnQpKTsKCiAgICAg ICAgICAgLyogU2VuZCByZWFsIHBsdXMgYW5jaWxsYXJ5IGRhdGEgKi8KCiAgICAgICAgICAgaWYg KHNlbmRtc2coc29ja2ZkLCAmbXNnaCwgMCkgPT0gLTEpCiAgICAgICAgICAgICAgIHJldHVybiAt MTsKCiAgICAgICAgICAgcmV0dXJuIDA7CiAgICAgICB9CgogICAgICAgLyogUmVjZWl2ZSBhIGZp bGUgZGVzY3JpcHRvciBvbiBhIGNvbm5lY3RlZCBVTklYIGRvbWFpbiBzb2NrZXQuIFJldHVybnMK ICAgICAgICAgIHRoZSByZWNlaXZlZCBmaWxlIGRlc2NyaXB0b3Igb24gc3VjY2Vzcywgb3IgLTEg b24gZXJyb3IuICovCgogICAgICAgc3RhdGljIGludAogICAgICAgcmVjdmZkKGludCBzb2NrZmQp CiAgICAgICB7CiAgICAgICAgICAgc3RydWN0IG1zZ2hkciBtc2doOwogICAgICAgICAgIHN0cnVj dCBpb3ZlYyBpb3Y7CiAgICAgICAgICAgaW50IGRhdGEsIGZkOwogICAgICAgICAgIHNzaXplX3Qg bnI7CgogICAgICAgICAgIC8qIEFsbG9jYXRlIGEgY2hhciBidWZmZXIgZm9yIHRoZSBhbmNpbGxh cnkgZGF0YS4gU2VlIHRoZSBjb21tZW50cwogICAgICAgICAgICAgIGluIHNlbmRmZCgpICovCiAg ICAgICAgICAgdW5pb24gewogICAgICAgICAgICAgICBjaGFyICAgYnVmW0NNU0dfU1BBQ0Uoc2l6 ZW9mKGludCkpXTsKICAgICAgICAgICAgICAgc3RydWN0IGNtc2doZHIgYWxpZ247CiAgICAgICAg ICAgfSBjb250cm9sTXNnOwogICAgICAgICAgIHN0cnVjdCBjbXNnaGRyICpjbXNncDsKCiAgICAg ICAgICAgLyogVGhlICdtc2dfbmFtZScgZmllbGQgY2FuIGJlIHVzZWQgdG8gb2J0YWluIHRoZSBh ZGRyZXNzIG9mIHRoZQogICAgICAgICAgICAgIHNlbmRpbmcgc29ja2V0LiBIb3dldmVyLCB3ZSBk byBub3QgbmVlZCB0aGlzIGluZm9ybWF0aW9uLiAqLwoKICAgICAgICAgICBtc2doLm1zZ19uYW1l ID0gTlVMTDsKICAgICAgICAgICBtc2doLm1zZ19uYW1lbGVuID0gMDsKCiAgICAgICAgICAgLyog U3BlY2lmeSBidWZmZXIgZm9yIHJlY2VpdmluZyByZWFsIGRhdGEgKi8KCiAgICAgICAgICAgbXNn aC5tc2dfaW92ID0gJmlvdjsKICAgICAgICAgICBtc2doLm1zZ19pb3ZsZW4gPSAxOwogICAgICAg ICAgIGlvdi5pb3ZfYmFzZSA9ICZkYXRhOyAgICAgICAvKiBSZWFsIGRhdGEgaXMgYW4gJ2ludCcg Ki8KICAgICAgICAgICBpb3YuaW92X2xlbiA9IHNpemVvZihpbnQpOwoKICAgICAgICAgICAvKiBT ZXQgJ21zZ2hkcicgZmllbGRzIHRoYXQgZGVzY3JpYmUgYW5jaWxsYXJ5IGRhdGEgKi8KCiAgICAg ICAgICAgbXNnaC5tc2dfY29udHJvbCA9IGNvbnRyb2xNc2cuYnVmOwogICAgICAgICAgIG1zZ2gu bXNnX2NvbnRyb2xsZW4gPSBzaXplb2YoY29udHJvbE1zZy5idWYpOwoKICAgICAgICAgICAvKiBS ZWNlaXZlIHJlYWwgcGx1cyBhbmNpbGxhcnkgZGF0YTsgcmVhbCBkYXRhIGlzIGlnbm9yZWQgKi8K CiAgICAgICAgICAgbnIgPSByZWN2bXNnKHNvY2tmZCwgJm1zZ2gsIDApOwogICAgICAgICAgIGlm IChuciA9PSAtMSkKICAgICAgICAgICAgICAgcmV0dXJuIC0xOwoKICAgICAgICAgICBjbXNncCA9 IENNU0dfRklSU1RIRFIoJm1zZ2gpOwoKICAgICAgICAgICAvKiBDaGVjayB0aGUgdmFsaWRpdHkg b2YgdGhlICdjbXNnaGRyJyAqLwoKICAgICAgICAgICBpZiAoY21zZ3AgPT0gTlVMTCB8fAogICAg ICAgICAgICAgICAgICAgY21zZ3AtPmNtc2dfbGVuICE9IENNU0dfTEVOKHNpemVvZihpbnQpKSB8 fAogICAgICAgICAgICAgICAgICAgY21zZ3AtPmNtc2dfbGV2ZWwgIT0gU09MX1NPQ0tFVCB8fAog ICAgICAgICAgICAgICAgICAgY21zZ3AtPmNtc2dfdHlwZSAhPSBTQ01fUklHSFRTKSB7CiAgICAg ICAgICAgICAgIGVycm5vID0gRUlOVkFMOwogICAgICAgICAgICAgICByZXR1cm4gLTE7CiAgICAg ICAgICAgfQoKICAgICAgICAgICAvKiBSZXR1cm4gdGhlIHJlY2VpdmVkIGZpbGUgZGVzY3JpcHRv ciB0byBvdXIgY2FsbGVyICovCgogICAgICAgICAgIG1lbWNweSgmZmQsIENNU0dfREFUQShjbXNn cCksIHNpemVvZihpbnQpKTsKICAgICAgICAgICByZXR1cm4gZmQ7CiAgICAgICB9CgogICAgICAg c3RhdGljIHZvaWQKICAgICAgIHNpZ2NobGRIYW5kbGVyKGludCBzaWcpCiAgICAgICB7CiAgICAg ICAgICAgY2hhciBtc2dbXSA9ICJcdFM6IHRhcmdldCBoYXMgdGVybWluYXRlZDsgYnllXG4iOwoK ICAgICAgICAgICB3cml0ZShTVERPVVRfRklMRU5PLCBtc2csIHNpemVvZihtc2cpIC0gMSk7CiAg ICAgICAgICAgX2V4aXQoRVhJVF9TVUNDRVNTKTsKICAgICAgIH0KCiAgICAgICBzdGF0aWMgaW50 CiAgICAgICBzZWNjb21wKHVuc2lnbmVkIGludCBvcGVyYXRpb24sIHVuc2lnbmVkIGludCBmbGFn cywgdm9pZCAqYXJncykKICAgICAgIHsKICAgICAgICAgICByZXR1cm4gc3lzY2FsbChfX05SX3Nl Y2NvbXAsIG9wZXJhdGlvbiwgZmxhZ3MsIGFyZ3MpOwogICAgICAgfQoKICAgICAgIC8qIFRoZSBm b2xsb3dpbmcgaXMgdGhlIHg4Ni02NC1zcGVjaWZpYyBCUEYgYm9pbGVycGxhdGUgY29kZSBmb3Ig Y2hlY2tpbmcKICAgICAgICAgIHRoYXQgdGhlIEJQRiBwcm9ncmFtIGlzIHJ1bm5pbmcgb24gdGhl IHJpZ2h0IGFyY2hpdGVjdHVyZSArIEFCSS4gQXQKICAgICAgICAgIGNvbXBsZXRpb24gb2YgdGhl c2UgaW5zdHJ1Y3Rpb25zLCB0aGUgYWNjdW11bGF0b3IgY29udGFpbnMgdGhlIHN5c3RlbQogICAg ICAgICAgY2FsbCBudW1iZXIuICovCgogICAgICAgLyogRm9yIHRoZSB4MzIgQUJJLCBhbGwgc3lz dGVtIGNhbGwgbnVtYmVycyBoYXZlIGJpdCAzMCBzZXQgKi8KCiAgICAgICAjZGVmaW5lIFgzMl9T WVNDQUxMX0JJVCAgICAgICAgIDB4NDAwMDAwMDAKCiAgICAgICAjZGVmaW5lIFg4Nl82NF9DSEVD S19BUkNIX0FORF9MT0FEX1NZU0NBTExfTlIgXAogICAgICAgICAgICAgICBCUEZfU1RNVChCUEZf TEQgfCBCUEZfVyB8IEJQRl9BQlMsIFwKICAgICAgICAgICAgICAgICAgICAgICAob2Zmc2V0b2Yo c3RydWN0IHNlY2NvbXBfZGF0YSwgYXJjaCkpKSwgXAogICAgICAgICAgICAgICBCUEZfSlVNUChC UEZfSk1QIHwgQlBGX0pFUSB8IEJQRl9LLCBBVURJVF9BUkNIX1g4Nl82NCwgMCwgMiksIFwKICAg ICAgICAgICAgICAgQlBGX1NUTVQoQlBGX0xEIHwgQlBGX1cgfCBCUEZfQUJTLCBcCiAgICAgICAg ICAgICAgICAgICAgICAgIChvZmZzZXRvZihzdHJ1Y3Qgc2VjY29tcF9kYXRhLCBucikpKSwgXAog ICAgICAgICAgICAgICBCUEZfSlVNUChCUEZfSk1QIHwgQlBGX0pHRSB8IEJQRl9LLCBYMzJfU1lT Q0FMTF9CSVQsIDAsIDEpLCBcCiAgICAgICAgICAgICAgIEJQRl9TVE1UKEJQRl9SRVQgfCBCUEZf SywgU0VDQ09NUF9SRVRfS0lMTF9QUk9DRVNTKQoKICAgICAgIC8qIGluc3RhbGxOb3RpZnlGaWx0 ZXIoKSBpbnN0YWxscyBhIHNlY2NvbXAgZmlsdGVyIHRoYXQgZ2VuZXJhdGVzCiAgICAgICAgICB1 c2VyLXNwYWNlIG5vdGlmaWNhdGlvbnMgKFNFQ0NPTVBfUkVUX1VTRVJfTk9USUYpIHdoZW4gdGhl IHByb2Nlc3MKICAgICAgICAgIGNhbGxzIG1rZGlyKDIpOyB0aGUgZmlsdGVyIGFsbG93cyBhbGwg b3RoZXIgc3lzdGVtIGNhbGxzLgoKICAgICAgICAgIFRoZSBmdW5jdGlvbiByZXR1cm4gdmFsdWUg aXMgYSBmaWxlIGRlc2NyaXB0b3IgZnJvbSB3aGljaCB0aGUKICAgICAgICAgIHVzZXItc3BhY2Ug bm90aWZpY2F0aW9ucyBjYW4gYmUgZmV0Y2hlZC4gKi8KCiAgICAgICBzdGF0aWMgaW50CiAgICAg ICBpbnN0YWxsTm90aWZ5RmlsdGVyKHZvaWQpCiAgICAgICB7CiAgICAgICAgICAgc3RydWN0IHNv Y2tfZmlsdGVyIGZpbHRlcltdID0gewogICAgICAgICAgICAgICBYODZfNjRfQ0hFQ0tfQVJDSF9B TkRfTE9BRF9TWVNDQUxMX05SLAoKICAgICAgICAgICAgICAgLyogbWtkaXIoKSB0cmlnZ2VycyBu b3RpZmljYXRpb24gdG8gdXNlci1zcGFjZSBzdXBlcnZpc29yICovCgogICAgICAgICAgICAgICBC UEZfSlVNUChCUEZfSk1QIHwgQlBGX0pFUSB8IEJQRl9LLCBfX05SX21rZGlyLCAwLCAxKSwKICAg ICAgICAgICAgICAgQlBGX1NUTVQoQlBGX1JFVCArIEJQRl9LLCBTRUNDT01QX1JFVF9VU0VSX05P VElGKSwKCiAgICAgICAgICAgICAgIC8qIEV2ZXJ5IG90aGVyIHN5c3RlbSBjYWxsIGlzIGFsbG93 ZWQgKi8KCiAgICAgICAgICAgICAgIEJQRl9TVE1UKEJQRl9SRVQgfCBCUEZfSywgU0VDQ09NUF9S RVRfQUxMT1cpLAogICAgICAgICAgIH07CgogICAgICAgICAgIHN0cnVjdCBzb2NrX2Zwcm9nIHBy b2cgPSB7CiAgICAgICAgICAgICAgIC5sZW4gPSBzaXplb2YoZmlsdGVyKSAvIHNpemVvZihmaWx0 ZXJbMF0pLAogICAgICAgICAgICAgICAuZmlsdGVyID0gZmlsdGVyLAogICAgICAgICAgIH07Cgog ICAgICAgICAgIC8qIEluc3RhbGwgdGhlIGZpbHRlciB3aXRoIHRoZSBTRUNDT01QX0ZJTFRFUl9G TEFHX05FV19MSVNURU5FUiBmbGFnOwogICAgICAgICAgICAgIGFzIGEgcmVzdWx0LCBzZWNjb21w KCkgcmV0dXJucyBhIG5vdGlmaWNhdGlvbiBmaWxlIGRlc2NyaXB0b3IuICovCgogICAgICAgICAg IGludCBub3RpZnlGZCA9IHNlY2NvbXAoU0VDQ09NUF9TRVRfTU9ERV9GSUxURVIsCiAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBTRUNDT01QX0ZJTFRFUl9GTEFHX05FV19MSVNURU5F UiwgJnByb2cpOwogICAgICAgICAgIGlmIChub3RpZnlGZCA9PSAtMSkKICAgICAgICAgICAgICAg ZXJyRXhpdCgic2VjY29tcC1pbnN0YWxsLW5vdGlmeS1maWx0ZXIiKTsKCiAgICAgICAgICAgcmV0 dXJuIG5vdGlmeUZkOwogICAgICAgfQoKICAgICAgIC8qIENsb3NlIGEgcGFpciBvZiBzb2NrZXRz IGNyZWF0ZWQgYnkgc29ja2V0cGFpcigpICovCgogICAgICAgc3RhdGljIHZvaWQKICAgICAgIGNs b3NlU29ja2V0UGFpcihpbnQgc29ja1BhaXJbMl0pCiAgICAgICB7CiAgICAgICAgICAgaWYgKGNs b3NlKHNvY2tQYWlyWzBdKSA9PSAtMSkKICAgICAgICAgICAgICAgZXJyRXhpdCgiY2xvc2VTb2Nr ZXRQYWlyLWNsb3NlLTAiKTsKICAgICAgICAgICBpZiAoY2xvc2Uoc29ja1BhaXJbMV0pID09IC0x KQogICAgICAgICAgICAgICBlcnJFeGl0KCJjbG9zZVNvY2tldFBhaXItY2xvc2UtMSIpOwogICAg ICAgfQoKICAgICAgIC8qIEltcGxlbWVudGF0aW9uIG9mIHRoZSB0YXJnZXQgcHJvY2VzczsgY3Jl YXRlIGEgY2hpbGQgcHJvY2VzcyB0aGF0OgoKICAgICAgICAgICgxKSBpbnN0YWxscyBhIHNlY2Nv bXAgZmlsdGVyIHdpdGggdGhlCiAgICAgICAgICAgICAgU0VDQ09NUF9GSUxURVJfRkxBR19ORVdf TElTVEVORVIgZmxhZzsKICAgICAgICAgICgyKSB3cml0ZXMgdGhlIHNlY2NvbXAgbm90aWZpY2F0 aW9uIGZpbGUgZGVzY3JpcHRvciByZXR1cm5lZCBmcm9tCiAgICAgICAgICAgICAgdGhlIHByZXZp b3VzIHN0ZXAgb250byB0aGUgVU5JWCBkb21haW4gc29ja2V0LCAnc29ja1BhaXJbMF0nOwogICAg ICAgICAgKDMpIGNhbGxzIG1rZGlyKDIpIGZvciBlYWNoIGVsZW1lbnQgb2YgJ2FyZ3YnLgoKICAg ICAgICAgIFRoZSBmdW5jdGlvbiByZXR1cm4gdmFsdWUgaW4gdGhlIHBhcmVudCBpcyB0aGUgUElE IG9mIHRoZSBjaGlsZAogICAgICAgICAgcHJvY2VzczsgdGhlIGNoaWxkIGRvZXMgbm90IHJldHVy biBmcm9tIHRoaXMgZnVuY3Rpb24uICovCgogICAgICAgc3RhdGljIHBpZF90CiAgICAgICB0YXJn ZXRQcm9jZXNzKGludCBzb2NrUGFpclsyXSwgY2hhciAqYXJndltdKQogICAgICAgewogICAgICAg ICAgIHBpZF90IHRhcmdldFBpZCA9IGZvcmsoKTsKICAgICAgICAgICBpZiAodGFyZ2V0UGlkID09 IC0xKQogICAgICAgICAgICAgICBlcnJFeGl0KCJmb3JrIik7CgogICAgICAgICAgIGlmICh0YXJn ZXRQaWQgPiAwKSAgICAgICAgICAvKiBJbiBwYXJlbnQsIHJldHVybiBQSUQgb2YgY2hpbGQgKi8K ICAgICAgICAgICAgICAgcmV0dXJuIHRhcmdldFBpZDsKCiAgICAgICAgICAgLyogQ2hpbGQgZmFs bHMgdGhyb3VnaCB0byBoZXJlICovCgogICAgICAgICAgIHByaW50ZigiVDogUElEID0gJWxkXG4i LCAobG9uZykgZ2V0cGlkKCkpOwoKICAgICAgICAgICAvKiBJbnN0YWxsIHNlY2NvbXAgZmlsdGVy KHMpICovCgogICAgICAgICAgIGlmIChwcmN0bChQUl9TRVRfTk9fTkVXX1BSSVZTLCAxLCAwLCAw LCAwKSkKICAgICAgICAgICAgICAgZXJyRXhpdCgicHJjdGwiKTsKCiAgICAgICAgICAgaW50IG5v dGlmeUZkID0gaW5zdGFsbE5vdGlmeUZpbHRlcigpOwoKICAgICAgICAgICAvKiBQYXNzIHRoZSBu b3RpZmljYXRpb24gZmlsZSBkZXNjcmlwdG9yIHRvIHRoZSB0cmFjaW5nIHByb2Nlc3Mgb3Zlcgog ICAgICAgICAgICAgIGEgVU5JWCBkb21haW4gc29ja2V0ICovCgogICAgICAgICAgIGlmIChzZW5k ZmQoc29ja1BhaXJbMF0sIG5vdGlmeUZkKSA9PSAtMSkKICAgICAgICAgICAgICAgZXJyRXhpdCgi c2VuZGZkIik7CgogICAgICAgICAgIC8qIE5vdGlmaWNhdGlvbiBhbmQgc29ja2V0IEZEcyBhcmUg bm8gbG9uZ2VyIG5lZWRlZCBpbiB0YXJnZXQgKi8KCiAgICAgICAgICAgaWYgKGNsb3NlKG5vdGlm eUZkKSA9PSAtMSkKICAgICAgICAgICAgICAgZXJyRXhpdCgiY2xvc2UtdGFyZ2V0LW5vdGlmeS1m ZCIpOwoKICAgICAgICAgICBjbG9zZVNvY2tldFBhaXIoc29ja1BhaXIpOwoKICAgICAgICAgICAv KiBQZXJmb3JtIGEgbWtkaXIoKSBjYWxsIGZvciBlYWNoIG9mIHRoZSBjb21tYW5kLWxpbmUgYXJn dW1lbnRzICovCgogICAgICAgICAgIGZvciAoY2hhciAqKmFwID0gYXJndjsgKmFwICE9IE5VTEw7 IGFwKyspIHsKICAgICAgICAgICAgICAgcHJpbnRmKCJcblQ6IGFib3V0IHRvIG1rZGlyKFwiJXNc IilcbiIsICphcCk7CgogICAgICAgICAgICAgICBpbnQgcyA9IG1rZGlyKCphcCwgMDcwMCk7CiAg ICAgICAgICAgICAgIGlmIChzID09IC0xKQogICAgICAgICAgICAgICAgICAgcGVycm9yKCJUOiBF UlJPUjogbWtkaXIoMikiKTsKICAgICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgICAg cHJpbnRmKCJUOiBTVUNDRVNTOiBta2RpcigyKSByZXR1cm5lZCAlZFxuIiwgcyk7CiAgICAgICAg ICAgfQoKICAgICAgICAgICBwcmludGYoIlxuVDogdGVybWluYXRpbmdcbiIpOwogICAgICAgICAg IGV4aXQoRVhJVF9TVUNDRVNTKTsKICAgICAgIH0KCiAgICAgICAvKiBDaGVjayB0aGF0IHRoZSBu b3RpZmljYXRpb24gSUQgcHJvdmlkZWQgYnkgYSBTRUNDT01QX0lPQ1RMX05PVElGX1JFQ1YKICAg ICAgICAgIG9wZXJhdGlvbiBpcyBzdGlsbCB2YWxpZC4gSXQgd2lsbCBubyBsb25nZXIgYmUgdmFs aWQgaWYgdGhlIHByb2Nlc3MKICAgICAgICAgIGhhcyB0ZXJtaW5hdGVkLiBUaGlzIG9wZXJhdGlv biBjYW4gYmUgdXNlZCB3aGVuIGFjY2Vzc2luZyAvcHJvYy9QSUQKICAgICAgICAgIGZpbGVzIGlu IHRoZSB0YXJnZXQgcHJvY2VzcyBpbiBvcmRlciB0byBhdm9pZCBUT0NUT1UgcmFjZSBjb25kaXRp b25zCiAgICAgICAgICB3aGVyZSB0aGUgUElEIHRoYXQgaXMgcmV0dXJuZWQgYnkgU0VDQ09NUF9J T0NUTF9OT1RJRl9SRUNWIHRlcm1pbmF0ZXMKICAgICAgICAgIGFuZCBpcyByZXVzZWQgYnkgYW5v dGhlciBwcm9jZXNzLiAqLwoKICAgICAgIHN0YXRpYyB2b2lkCiAgICAgICBjaGVja05vdGlmaWNh dGlvbklkSXNWYWxpZChpbnQgbm90aWZ5RmQsIHVpbnQ2NF90IGlkKQogICAgICAgewogICAgICAg ICAgIGlmIChpb2N0bChub3RpZnlGZCwgU0VDQ09NUF9JT0NUTF9OT1RJRl9JRF9WQUxJRCwgJmlk KSA9PSAtMSkKICAgICAgICAgICAgICAgZXJyRXhpdCgiXHRTOiBub3RpZmljYXRpb24gSUQgY2hl Y2s6ICIKICAgICAgICAgICAgICAgICAgICAgICAidGFyZ2V0IGhhcyB0ZXJtaW5hdGVkISEhXG4i KTsKICAgICAgIH0KCiAgICAgICAvKiBBY2Nlc3MgdGhlIG1lbW9yeSBvZiB0aGUgdGFyZ2V0IHBy b2Nlc3MgaW4gb3JkZXIgdG8gZGlzY292ZXIgdGhlCiAgICAgICAgICBwYXRobmFtZSB0aGF0IHdh cyBnaXZlbiB0byBta2RpcigpICovCgogICAgICAgc3RhdGljIGJvb2wKICAgICAgIGdldFRhcmdl dFBhdGhuYW1lKHN0cnVjdCBzZWNjb21wX25vdGlmICpyZXEsIGludCBub3RpZnlGZCwKICAgICAg ICAgICAgICAgICAgICAgICAgIGNoYXIgKnBhdGgsIHNpemVfdCBsZW4pCiAgICAgICB7CiAgICAg ICAgICAgY2hhciBwcm9jTWVtUGF0aFtQQVRIX01BWF07CgogICAgICAgICAgIHNucHJpbnRmKHBy b2NNZW1QYXRoLCBzaXplb2YocHJvY01lbVBhdGgpLCAiL3Byb2MvJWQvbWVtIiwgcmVxLT5waWQp OwoKICAgICAgICAgICBpbnQgcHJvY01lbUZkID0gb3Blbihwcm9jTWVtUGF0aCwgT19SRE9OTFkp OwogICAgICAgICAgIGlmIChwcm9jTWVtRmQgPT0gLTEpCiAgICAgICAgICAgICAgIGVyckV4aXQo Ilx0Uzogb3BlbiIpOwoKICAgICAgICAgICAvKiBDaGVjayB0aGF0IHRoZSBwcm9jZXNzIHdob3Nl IGluZm8gd2UgYXJlIGFjY2Vzc2luZyBpcyBzdGlsbCBhbGl2ZS4KICAgICAgICAgICAgICBJZiB0 aGUgU0VDQ09NUF9JT0NUTF9OT1RJRl9JRF9WQUxJRCBvcGVyYXRpb24gKHBlcmZvcm1lZAogICAg ICAgICAgICAgIGluIGNoZWNrTm90aWZpY2F0aW9uSWRJc1ZhbGlkKCkpIHN1Y2NlZWRzLCB3ZSBr bm93IHRoYXQgdGhlCiAgICAgICAgICAgICAgL3Byb2MvUElEL21lbSBmaWxlIGRlc2NyaXB0b3Ig dGhhdCB3ZSBvcGVuZWQgY29ycmVzcG9uZHMgdG8gdGhlCiAgICAgICAgICAgICAgcHJvY2VzcyBm b3Igd2hpY2ggd2UgcmVjZWl2ZWQgYSBub3RpZmljYXRpb24uIElmIHRoYXQgcHJvY2VzcwogICAg ICAgICAgICAgIHN1YnNlcXVlbnRseSB0ZXJtaW5hdGVzLCB0aGVuIHJlYWQoKSBvbiB0aGF0IGZp bGUgZGVzY3JpcHRvcgogICAgICAgICAgICAgIHdpbGwgcmV0dXJuIDAgKEVPRikuICovCgogICAg ICAgICAgIGNoZWNrTm90aWZpY2F0aW9uSWRJc1ZhbGlkKG5vdGlmeUZkLCByZXEtPmlkKTsKCiAg ICAgICAgICAgLyogUmVhZCBieXRlcyBhdCB0aGUgbG9jYXRpb24gY29udGFpbmluZyB0aGUgcGF0 aG5hbWUgYXJndW1lbnQKICAgICAgICAgICAgICAoaS5lLiwgdGhlIGZpcnN0IGFyZ3VtZW50KSBv ZiB0aGUgbWtkaXIoMikgY2FsbCAqLwoKICAgICAgICAgICBzc2l6ZV90IG5yZWFkID0gcHJlYWQo cHJvY01lbUZkLCBwYXRoLCBsZW4sIHJlcS0+ZGF0YS5hcmdzWzBdKTsKICAgICAgICAgICBpZiAo bnJlYWQgPT0gLTEpCiAgICAgICAgICAgICAgIGVyckV4aXQoInByZWFkIik7CgogICAgICAgICAg IGlmIChucmVhZCA9PSAwKSB7CiAgICAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCAiXHRTOiBw cmVhZCgpIG9mIC9wcm9jL1BJRC9tZW0gIgogICAgICAgICAgICAgICAgICAgICAgICJyZXR1cm5l ZCAwIChFT0YpXG4iKTsKICAgICAgICAgICAgICAgZXhpdChFWElUX0ZBSUxVUkUpOwogICAgICAg ICAgIH0KCiAgICAgICAgICAgaWYgKGNsb3NlKHByb2NNZW1GZCkgPT0gLTEpCiAgICAgICAgICAg ICAgIGVyckV4aXQoImNsb3NlLS9wcm9jL1BJRC9tZW0iKTsKCiAgICAgICAgICAgLyogV2UgaGF2 ZSBubyBndWFyYW50ZWVzIGFib3V0IHdoYXQgd2FzIGluIHRoZSBtZW1vcnkgb2YgdGhlIHRhcmdl dAogICAgICAgICAgICAgIHByb2Nlc3MuIFdlIHRoZXJlZm9yZSB0cmVhdCB0aGUgYnVmZmVyIHJl dHVybmVkIGJ5IHByZWFkKCkgYXMKICAgICAgICAgICAgICB1bnRydXN0ZWQgaW5wdXQuIFRoZSBi dWZmZXIgc2hvdWxkIGJlIHRlcm1pbmF0ZWQgYnkgYSBudWxsIGJ5dGU7CiAgICAgICAgICAgICAg aWYgbm90LCB0aGVuIHdlIHdpbGwgdHJpZ2dlciBhbiBlcnJvciBmb3IgdGhlIHRhcmdldCBwcm9j ZXNzLiAqLwoKICAgICAgICAgICBpZiAoc3RybmxlbihwYXRoLCBucmVhZCkgPCBucmVhZCkKICAg ICAgICAgICAgICAgcmV0dXJuIHRydWU7CgogICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAg IH0KCiAgICAgICAvKiBIYW5kbGUgbm90aWZpY2F0aW9ucyB0aGF0IGFycml2ZSB2aWEgdGhlIFNF Q0NPTVBfUkVUX1VTRVJfTk9USUYgZmlsZQogICAgICAgICAgZGVzY3JpcHRvciwgJ25vdGlmeUZk Jy4gKi8KCiAgICAgICBzdGF0aWMgdm9pZAogICAgICAgaGFuZGxlTm90aWZpY2F0aW9ucyhpbnQg bm90aWZ5RmQpCiAgICAgICB7CiAgICAgICAgICAgc3RydWN0IHNlY2NvbXBfbm90aWZfc2l6ZXMg c2l6ZXM7CiAgICAgICAgICAgY2hhciBwYXRoW1BBVEhfTUFYXTsKCiAgICAgICAgICAgLyogRGlz Y292ZXIgdGhlIHNpemVzIG9mIHRoZSBzdHJ1Y3R1cmVzIHRoYXQgYXJlIHVzZWQgdG8gcmVjZWl2 ZQogICAgICAgICAgICAgIG5vdGlmaWNhdGlvbnMgYW5kIHNlbmQgbm90aWZpY2F0aW9uIHJlc3Bv bnNlcywgYW5kIGFsbG9jYXRlCiAgICAgICAgICAgICAgYnVmZmVycyBvZiB0aG9zZSBzaXplcy4g Ki8KCiAgICAgICAgICAgaWYgKHNlY2NvbXAoU0VDQ09NUF9HRVRfTk9USUZfU0laRVMsIDAsICZz aXplcykgPT0gLTEpCiAgICAgICAgICAgICAgIGVyckV4aXQoIlx0Uzogc2VjY29tcC1TRUNDT01Q X0dFVF9OT1RJRl9TSVpFUyIpOwoKICAgICAgICAgICBzdHJ1Y3Qgc2VjY29tcF9ub3RpZiAqcmVx ID0gbWFsbG9jKHNpemVzLnNlY2NvbXBfbm90aWYpOwogICAgICAgICAgIGlmIChyZXEgPT0gTlVM TCkKICAgICAgICAgICAgICAgZXJyRXhpdCgiXHRTOiBtYWxsb2MiKTsKCiAgICAgICAgICAgLyog V2hlbiBhbGxvY2F0aW5nIHRoZSByZXNwb25zZSBidWZmZXIsIHdlIG11c3QgYWxsb3cgZm9yIHRo ZSBmYWN0CiAgICAgICAgICAgICAgdGhhdCB0aGUgdXNlci1zcGFjZSBiaW5hcnkgbWF5IGhhdmUg YmVlbiBidWlsdCB3aXRoIHVzZXItc3BhY2UKICAgICAgICAgICAgICBoZWFkZXJzIHdoZXJlICdz dHJ1Y3Qgc2VjY29tcF9ub3RpZl9yZXNwJyBpcyBiaWdnZXIgdGhhbiB0aGUKICAgICAgICAgICAg ICByZXNwb25zZSBidWZmZXIgZXhwZWN0ZWQgYnkgdGhlIChvbGRlcikga2VybmVsLiBUaGVyZWZv cmUsIHdlCiAgICAgICAgICAgICAgYWxsb2NhdGUgYSBidWZmZXIgdGhhdCBpcyB0aGUgbWF4aW11 bSBvZiB0aGUgdHdvIHNpemVzLiBUaGlzCiAgICAgICAgICAgICAgZW5zdXJlcyB0aGF0IGlmIHRo ZSBzdXBlcnZpc29yIHBsYWNlcyBieXRlcyBpbnRvIHRoZSByZXNwb25zZQogICAgICAgICAgICAg IHN0cnVjdHVyZSB0aGF0IGFyZSBwYXN0IHRoZSByZXNwb25zZSBzaXplIHRoYXQgdGhlIGtlcm5l bCBleHBlY3RzLAogICAgICAgICAgICAgIHRoZW4gdGhlIHN1cGVydmlzb3IgaXMgbm90IHRvdWNo aW5nIGFuIGludmFsaWQgbWVtb3J5IGxvY2F0aW9uLiAqLwoKICAgICAgICAgICBzaXplX3QgcmVz cF9zaXplID0gc2l6ZXMuc2VjY29tcF9ub3RpZl9yZXNwOwogICAgICAgICAgIGlmIChzaXplb2Yo c3RydWN0IHNlY2NvbXBfbm90aWZfcmVzcCkgPiByZXNwX3NpemUpCiAgICAgICAgICAgICAgIHJl c3Bfc2l6ZSA9IHNpemVvZihzdHJ1Y3Qgc2VjY29tcF9ub3RpZl9yZXNwKTsKCiAgICAgICAgICAg c3RydWN0IHNlY2NvbXBfbm90aWZfcmVzcCAqcmVzcCA9IG1hbGxvYyhyZXNwX3NpemUpOwogICAg ICAgICAgIGlmIChyZXNwID09IE5VTEwpCiAgICAgICAgICAgICAgIGVyckV4aXQoIlx0UzogbWFs bG9jIik7CgogICAgICAgICAgIC8qIExvb3AgaGFuZGxpbmcgbm90aWZpY2F0aW9ucyAqLwoKICAg ICAgICAgICBmb3IgKDs7KSB7CiAgICAgICAgICAgICAgIC8qIFdhaXQgZm9yIG5leHQgbm90aWZp Y2F0aW9uLCByZXR1cm5pbmcgaW5mbyBpbiAnKnJlcScgKi8KCiAgICAgICAgICAgICAgIG1lbXNl dChyZXEsIDAsIHNpemVzLnNlY2NvbXBfbm90aWYpOwogICAgICAgICAgICAgICBpZiAoaW9jdGwo bm90aWZ5RmQsIFNFQ0NPTVBfSU9DVExfTk9USUZfUkVDViwgcmVxKSA9PSAtMSkgewogICAgICAg ICAgICAgICAgICAgaWYgKGVycm5vID09IEVJTlRSKQogICAgICAgICAgICAgICAgICAgICAgIGNv bnRpbnVlOwogICAgICAgICAgICAgICAgICAgZXJyRXhpdCgiXHRTOiBpb2N0bC1TRUNDT01QX0lP Q1RMX05PVElGX1JFQ1YiKTsKICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgcHJpbnRm KCJcdFM6IGdvdCBub3RpZmljYXRpb24gKElEICUjbGx4KSBmb3IgUElEICVkXG4iLAogICAgICAg ICAgICAgICAgICAgICAgIHJlcS0+aWQsIHJlcS0+cGlkKTsKCiAgICAgICAgICAgICAgIC8qIFRo ZSBvbmx5IHN5c3RlbSBjYWxsIHRoYXQgY2FuIGdlbmVyYXRlIGEgbm90aWZpY2F0aW9uIGV2ZW50 CiAgICAgICAgICAgICAgICAgIGlzIG1rZGlyKDIpLiBOZXZlcnRoZWxlc3MsIHdlIGNoZWNrIHRo YXQgdGhlIG5vdGlmaWVkIHN5c3RlbQogICAgICAgICAgICAgICAgICBjYWxsIGlzIGluZGVlZCBt a2RpcigpIGFzIGtpbmQgb2YgZnV0dXJlLXByb29maW5nIG9mIHRoaXMKICAgICAgICAgICAgICAg ICAgY29kZSBpbiBjYXNlIHRoZSBzZWNjb21wIGZpbHRlciBpcyBsYXRlciBtb2RpZmllZCB0bwog ICAgICAgICAgICAgICAgICBnZW5lcmF0ZSBub3RpZmljYXRpb25zIGZvciBvdGhlciBzeXN0ZW0g Y2FsbHMuICovCgogICAgICAgICAgICAgICBpZiAocmVxLT5kYXRhLm5yICE9IF9fTlJfbWtkaXIp IHsKICAgICAgICAgICAgICAgICAgIHByaW50ZigiXHRTOiBub3RpZmljYXRpb24gY29udGFpbmVk IHVuZXhwZWN0ZWQgIgogICAgICAgICAgICAgICAgICAgICAgICAgICAic3lzdGVtIGNhbGwgbnVt YmVyOyBieWUhISFcbiIpOwogICAgICAgICAgICAgICAgICAgZXhpdChFWElUX0ZBSUxVUkUpOwog ICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICBib29sIHBhdGhPSyA9IGdldFRhcmdldFBh dGhuYW1lKHJlcSwgbm90aWZ5RmQsIHBhdGgsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgc2l6ZW9mKHBhdGgpKTsKCiAgICAgICAgICAgICAgIC8qIFByZXBv cHVsYXRlIHNvbWUgZmllbGRzIG9mIHRoZSByZXNwb25zZSAqLwoKICAgICAgICAgICAgICAgcmVz cC0+aWQgPSByZXEtPmlkOyAgICAgLyogUmVzcG9uc2UgaW5jbHVkZXMgbm90aWZpY2F0aW9uIElE ICovCiAgICAgICAgICAgICAgIHJlc3AtPmZsYWdzID0gMDsKICAgICAgICAgICAgICAgcmVzcC0+ dmFsID0gMDsKCiAgICAgICAgICAgICAgIC8qIElmIHRoZSB0YXJnZXQgcGF0aG5hbWUgd2FzIG5v dCB2YWxpZCwgdHJpZ2dlciBhbiBFSU5WQUwgZXJyb3I7CiAgICAgICAgICAgICAgICAgIGlmIHRo ZSBkaXJlY3RvcnkgaXMgaW4gL3RtcCwgdGhlbiBjcmVhdGUgaXQgb24gYmVoYWxmIG9mIHRoZQog ICAgICAgICAgICAgICAgICBzdXBlcnZpc29yOyBpZiB0aGUgcGF0aG5hbWUgc3RhcnRzIHdpdGgg Jy4nLCB0ZWxsIHRoZSBrZXJuZWwKICAgICAgICAgICAgICAgICAgdG8gbGV0IHRoZSB0YXJnZXQg cHJvY2VzcyBleGVjdXRlIHRoZSBta2RpcigpOyBvdGhlcndpc2UsIGdpdmUKICAgICAgICAgICAg ICAgICAgYW4gZXJyb3IgZm9yIGEgZGlyZWN0b3J5IHBhdGhuYW1lIGluIGFueSBvdGhlciBsb2Nh dGlvbi4gKi8KCiAgICAgICAgICAgICAgIGlmICghcGF0aE9LKSB7CiAgICAgICAgICAgICAgICAg ICByZXNwLT5lcnJvciA9IC1FSU5WQUw7CiAgICAgICAgICAgICAgICAgICBwcmludGYoIlx0Uzog c3Bvb2ZpbmcgZXJyb3IgZm9yIGludmFsaWQgcGF0aG5hbWUgKCVzKVxuIiwKICAgICAgICAgICAg ICAgICAgICAgICAgICAgc3RyZXJyb3IoLXJlc3AtPmVycm9yKSk7CiAgICAgICAgICAgICAgIH0g ZWxzZSBpZiAoc3RybmNtcChwYXRoLCAiL3RtcC8iLCBzdHJsZW4oIi90bXAvIikpID09IDApIHsK ICAgICAgICAgICAgICAgICAgIHByaW50ZigiXHRTOiBleGVjdXRpbmc6IG1rZGlyKFwiJXNcIiwg JSNsbG8pXG4iLAogICAgICAgICAgICAgICAgICAgICAgICAgICBwYXRoLCByZXEtPmRhdGEuYXJn c1sxXSk7CgogICAgICAgICAgICAgICAgICAgaWYgKG1rZGlyKHBhdGgsIHJlcS0+ZGF0YS5hcmdz WzFdKSA9PSAwKSB7CiAgICAgICAgICAgICAgICAgICAgICAgcmVzcC0+ZXJyb3IgPSAwOyAgICAg ICAgICAgIC8qICJTdWNjZXNzIiAqLwogICAgICAgICAgICAgICAgICAgICAgIHJlc3AtPnZhbCA9 IHN0cmxlbihwYXRoKTsgICAvKiBVc2VkIGFzIHJldHVybiB2YWx1ZSBvZgogICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBta2RpcigpIGluIHRhcmdl dCAqLwogICAgICAgICAgICAgICAgICAgICAgIHByaW50ZigiXHRTOiBzdWNjZXNzISBzcG9vZmVk IHJldHVybiA9ICVsbGRcbiIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXNwLT52 YWwpOwogICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKCiAgICAgICAgICAgICAgICAgICAgICAg LyogSWYgbWtkaXIoKSBmYWlsZWQgaW4gdGhlIHN1cGVydmlzb3IsIHBhc3MgdGhlIGVycm9yCiAg ICAgICAgICAgICAgICAgICAgICAgICAgYmFjayB0byB0aGUgdGFyZ2V0ICovCgogICAgICAgICAg ICAgICAgICAgICAgIHJlc3AtPmVycm9yID0gLWVycm5vOwogICAgICAgICAgICAgICAgICAgICAg IHByaW50ZigiXHRTOiBmYWlsdXJlISAoZXJybm8gPSAlZDsgJXMpXG4iLCBlcnJubywKICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIHN0cmVycm9yKGVycm5vKSk7CiAgICAgICAgICAgICAg ICAgICB9CiAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoc3RybmNtcChwYXRoLCAiLi8iLCBzdHJs ZW4oIi4vIikpID09IDApIHsKICAgICAgICAgICAgICAgICAgIHJlc3AtPmVycm9yID0gcmVzcC0+ dmFsID0gMDsKICAgICAgICAgICAgICAgICAgIHJlc3AtPmZsYWdzID0gU0VDQ09NUF9VU0VSX05P VElGX0ZMQUdfQ09OVElOVUU7CiAgICAgICAgICAgICAgICAgICBwcmludGYoIlx0UzogdGFyZ2V0 IGNhbiBleGVjdXRlIHN5c3RlbSBjYWxsXG4iKTsKICAgICAgICAgICAgICAgfSBlbHNlIHsKICAg ICAgICAgICAgICAgICAgIHJlc3AtPmVycm9yID0gLUVPUE5PVFNVUFA7CiAgICAgICAgICAgICAg ICAgICBwcmludGYoIlx0Uzogc3Bvb2ZpbmcgZXJyb3IgcmVzcG9uc2UgKCVzKVxuIiwKICAgICAg ICAgICAgICAgICAgICAgICAgICAgc3RyZXJyb3IoLXJlc3AtPmVycm9yKSk7CiAgICAgICAgICAg ICAgIH0KCiAgICAgICAgICAgICAgIC8qIFNlbmQgYSByZXNwb25zZSB0byB0aGUgbm90aWZpY2F0 aW9uICovCgogICAgICAgICAgICAgICBwcmludGYoIlx0Uzogc2VuZGluZyByZXNwb25zZSAiCiAg ICAgICAgICAgICAgICAgICAgICAgIihmbGFncyA9ICUjeDsgdmFsID0gJWxsZDsgZXJyb3IgPSAl ZClcbiIsCiAgICAgICAgICAgICAgICAgICAgICAgcmVzcC0+ZmxhZ3MsIHJlc3AtPnZhbCwgcmVz cC0+ZXJyb3IpOwoKICAgICAgICAgICAgICAgaWYgKGlvY3RsKG5vdGlmeUZkLCBTRUNDT01QX0lP Q1RMX05PVElGX1NFTkQsIHJlc3ApID09IC0xKSB7CiAgICAgICAgICAgICAgICAgICBpZiAoZXJy bm8gPT0gRU5PRU5UKQogICAgICAgICAgICAgICAgICAgICAgIHByaW50ZigiXHRTOiByZXNwb25z ZSBmYWlsZWQgd2l0aCBFTk9FTlQ7ICIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJw ZXJoYXBzIHRhcmdldCBwcm9jZXNzJ3Mgc3lzY2FsbCB3YXMgIgogICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgImludGVycnVwdGVkIGJ5IGEgc2lnbmFsP1xuIik7CiAgICAgICAgICAgICAg ICAgICBlbHNlCiAgICAgICAgICAgICAgICAgICAgICAgcGVycm9yKCJpb2N0bC1TRUNDT01QX0lP Q1RMX05PVElGX1NFTkQiKTsKICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgLyogSWYg dGhlIHBhdGhuYW1lIGlzIGp1c3QgIi9ieWUiLCB0aGVuIHRoZSBzdXBlcnZpc29yCiAgICAgICAg ICAgICAgICAgIHRlcm1pbmF0ZXMuIFRoaXMgYWxsb3dzIHVzIHRvIHNlZSB3aGF0IGhhcHBlbnMg aWYgdGhlCiAgICAgICAgICAgICAgICAgIHRhcmdldCBwcm9jZXNzIG1ha2VzIGZ1cnRoZXIgY2Fs bHMgdG8gbWtkaXIoMikuICovCgogICAgICAgICAgICAgICBpZiAoc3RyY21wKHBhdGgsICIvYnll IikgPT0gMCkgewogICAgICAgICAgICAgICAgICAgcHJpbnRmKCJcdFM6IHRlcm1pbmF0aW5nICoq KioqKioqKipcbiIpOwogICAgICAgICAgICAgICAgICAgZXhpdChFWElUX0ZBSUxVUkUpOwogICAg ICAgICAgICAgICB9CiAgICAgICAgICAgfQogICAgICAgfQoKICAgICAgIC8qIEltcGxlbWVudGF0 aW9uIG9mIHRoZSBzdXBlcnZpc29yIHByb2Nlc3M6CgogICAgICAgICAgKDEpIG9idGFpbnMgdGhl IG5vdGlmaWNhdGlvbiBmaWxlIGRlc2NyaXB0b3IgZnJvbSAnc29ja1BhaXJbMV0nCiAgICAgICAg ICAoMikgaGFuZGxlcyBub3RpZmljYXRpb25zIHRoYXQgYXJyaXZlIG9uIHRoYXQgZmlsZSBkZXNj cmlwdG9yLiAqLwoKICAgICAgIHN0YXRpYyB2b2lkCiAgICAgICBzdXBlcnZpc29yKGludCBzb2Nr UGFpclsyXSkKICAgICAgIHsKICAgICAgICAgICBpbnQgbm90aWZ5RmQgPSByZWN2ZmQoc29ja1Bh aXJbMV0pOwogICAgICAgICAgIGlmIChub3RpZnlGZCA9PSAtMSkKICAgICAgICAgICAgICAgZXJy RXhpdCgicmVjdmZkIik7CgogICAgICAgICAgIGNsb3NlU29ja2V0UGFpcihzb2NrUGFpcik7ICAv KiBXZSBubyBsb25nZXIgbmVlZCB0aGUgc29ja2V0IHBhaXIgKi8KCiAgICAgICAgICAgaGFuZGxl Tm90aWZpY2F0aW9ucyhub3RpZnlGZCk7CiAgICAgICB9CgogICAgICAgaW50CiAgICAgICBtYWlu KGludCBhcmdjLCBjaGFyICphcmd2W10pCiAgICAgICB7CiAgICAgICAgICAgaW50IHNvY2tQYWly WzJdOwoKICAgICAgICAgICBzZXRidWYoc3Rkb3V0LCBOVUxMKTsKCiAgICAgICAgICAgaWYgKGFy Z2MgPCAyKSB7CiAgICAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCAiQXQgbGVhc3Qgb25lIHBh dGhuYW1lIGFyZ3VtZW50IGlzIHJlcXVpcmVkXG4iKTsKICAgICAgICAgICAgICAgZXhpdChFWElU X0ZBSUxVUkUpOwogICAgICAgICAgIH0KCiAgICAgICAgICAgLyogQ3JlYXRlIGEgVU5JWCBkb21h aW4gc29ja2V0IHRoYXQgaXMgdXNlZCB0byBwYXNzIHRoZSBzZWNjb21wCiAgICAgICAgICAgICAg bm90aWZpY2F0aW9uIGZpbGUgZGVzY3JpcHRvciBmcm9tIHRoZSB0YXJnZXQgcHJvY2VzcyB0byB0 aGUKICAgICAgICAgICAgICBzdXBlcnZpc29yIHByb2Nlc3MuICovCgogICAgICAgICAgIGlmIChz b2NrZXRwYWlyKEFGX1VOSVgsIFNPQ0tfU1RSRUFNLCAwLCBzb2NrUGFpcikgPT0gLTEpCiAgICAg ICAgICAgICAgIGVyckV4aXQoInNvY2tldHBhaXIiKTsKCiAgICAgICAgICAgLyogQ3JlYXRlIGEg Y2hpbGQgcHJvY2Vzcy0tdGhlICJ0YXJnZXQiLS10aGF0IGluc3RhbGxzIHNlY2NvbXAKICAgICAg ICAgICAgICBmaWx0ZXJpbmcuIFRoZSB0YXJnZXQgcHJvY2VzcyB3cml0ZXMgdGhlIHNlY2NvbXAg bm90aWZpY2F0aW9uCiAgICAgICAgICAgICAgZmlsZSBkZXNjcmlwdG9yIG9udG8gJ3NvY2tQYWly WzBdJyBhbmQgdGhlbiBjYWxscyBta2RpcigyKSBmb3IKICAgICAgICAgICAgICBlYWNoIGRpcmVj dG9yeSBpbiB0aGUgY29tbWFuZC1saW5lIGFyZ3VtZW50cy4gKi8KCiAgICAgICAgICAgKHZvaWQp IHRhcmdldFByb2Nlc3Moc29ja1BhaXIsICZhcmd2W29wdGluZF0pOwoKICAgICAgICAgICAvKiBD YXRjaCBTSUdDSExEIHdoZW4gdGhlIHRhcmdldCB0ZXJtaW5hdGVzLCBzbyB0aGF0IHRoZQogICAg ICAgICAgICAgIHN1cGVydmlzb3IgY2FuIGFsc28gdGVybWluYXRlLiAqLwoKICAgICAgICAgICBz dHJ1Y3Qgc2lnYWN0aW9uIHNhOwogICAgICAgICAgIHNhLnNhX2hhbmRsZXIgPSBzaWdjaGxkSGFu ZGxlcjsKICAgICAgICAgICBzYS5zYV9mbGFncyA9IDA7CiAgICAgICAgICAgc2lnZW1wdHlzZXQo JnNhLnNhX21hc2spOwogICAgICAgICAgIGlmIChzaWdhY3Rpb24oU0lHQ0hMRCwgJnNhLCBOVUxM KSA9PSAtMSkKICAgICAgICAgICAgICAgZXJyRXhpdCgic2lnYWN0aW9uIik7CgogICAgICAgICAg IHN1cGVydmlzb3Ioc29ja1BhaXIpOwoKICAgICAgICAgICBleGl0KEVYSVRfU1VDQ0VTUyk7CiAg ICAgICB9CgpTRUUgQUxTTwogICAgICAgaW9jdGwoMiksIHNlY2NvbXAoMikKCiAgICAgICBBIGZ1 cnRoZXIgZXhhbXBsZSBwcm9ncmFtIGNhbiBiZSBmb3VuZCBpbiB0aGUga2VybmVsIHNvdXJjZSBm aWxlCiAgICAgICBzYW1wbGVzL3NlY2NvbXAvdXNlci10cmFwLmMuCgpMaW51eCAgICAgICAgICAg ICAgICAgICAgICAgICAgMjAyMC0xMC0wMSAgICAgICAgICBTRUNDT01QX1VTRVJfTk9USUYoMikK CgoKLS0gCk1pY2hhZWwgS2VycmlzawpMaW51eCBtYW4tcGFnZXMgbWFpbnRhaW5lcjsgaHR0cDov L3d3dy5rZXJuZWwub3JnL2RvYy9tYW4tcGFnZXMvCkxpbnV4L1VOSVggU3lzdGVtIFByb2dyYW1t aW5nIFRyYWluaW5nOiBodHRwOi8vbWFuNy5vcmcvdHJhaW5pbmcvCl9fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCkNvbnRhaW5lcnMgbWFpbGluZyBsaXN0CkNv bnRhaW5lcnNAbGlzdHMubGludXgtZm91bmRhdGlvbi5vcmcKaHR0cHM6Ly9saXN0cy5saW51eGZv dW5kYXRpb24ub3JnL21haWxtYW4vbGlzdGluZm8vY29udGFpbmVycw==