From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from us-smtp-delivery-124.mimecast.com (us-smtp-delivery-124.mimecast.com [170.10.129.124]) by sourceware.org (Postfix) with ESMTPS id 85C6F384D99F for ; Sat, 19 Nov 2022 02:45:15 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.1 sourceware.org 85C6F384D99F Authentication-Results: sourceware.org; dmarc=pass (p=none dis=none) header.from=redhat.com Authentication-Results: sourceware.org; spf=pass smtp.mailfrom=redhat.com DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1668825915; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: in-reply-to:in-reply-to:references:references; bh=qOSr3kyqIeEtkDFK84hkYs4RJ1f1qBp6IdoFCJyqggA=; b=flvUEPb7+sljVn0cyVL9bP6+ivTeMNw5faKU8MoxsXUGtHsktJOvPqVaGx/bJ/g6Ec86Cc e86EjjSqvESDfSLoyv1Uw7YKpDYkahC2cWSccew7x5PNxeYRPipDfJ4g5lzLSwSeZUBQpa 6+i01NY4GSMV1v0mH2EQ9BFsFCxUElc= Received: from mail-qt1-f197.google.com (mail-qt1-f197.google.com [209.85.160.197]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.3, cipher=TLS_AES_128_GCM_SHA256) id us-mta-597-_cMxptqrNSCZEBFqzWLkkA-1; Fri, 18 Nov 2022 21:45:13 -0500 X-MC-Unique: _cMxptqrNSCZEBFqzWLkkA-1 Received: by mail-qt1-f197.google.com with SMTP id b20-20020ac844d4000000b003a542f9de3dso6799114qto.7 for ; Fri, 18 Nov 2022 18:45:13 -0800 (PST) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=in-reply-to:references:cc:to:from:content-language:subject :user-agent:mime-version:date:message-id:x-gm-message-state:from:to :cc:subject:date:message-id:reply-to; bh=EMfG4cxqpGtthBJilViVo6lvWHNgSIn2GMlH/9cEwd8=; b=ABZtQvBq4qJXOQoqi6S7srIV/EFfQlEn42PNTA8SoNBoGMsMvA5RKSnkEP/xQiyOJH o7tnJY/WKu5dBCgLi+Qhct8V03Ey2O0vbIRUQqLpKiOl/BfMj6BqH+xLEfalB3eTMUMc BkTNXSN1TAqiwQLqNHFJffZ9TvPRq4towA86qQt+ZTpcqO654b51mpEy+G57jhg1/L7G 9xNQ6svHAQfPSdf7Vxkd32tvgwSuGGpNZKYrp7rLVIHOOcFJaM6Rm1c7adC/s5qbgmVx zF7WCwSw5aTHYQo1m8hhkt7GtTUovow0Q0ZjyDe8M1XImu7zTx7bPP16W0PcDAr5zvzP m7vA== X-Gm-Message-State: ANoB5pnOLzAzwFza7DFiXoZexpjo4GuuI9RLri6lRwyxk+R5+drZnV+H JzO/beLu0WrVYHvgTj+I6ue3N4ht0RbUf3WMS79dhc5ypN4dFx7iAThHmLGVnebspKLPr/e+UVD kF4tW2VMl5vdaTMinUXun5Ewebn6S26832SYG46FdFu3rts0/qweZJgkyYmoTeWa+2A== X-Received: by 2002:a0c:e650:0:b0:4c6:7622:3123 with SMTP id c16-20020a0ce650000000b004c676223123mr9247914qvn.40.1668825912417; Fri, 18 Nov 2022 18:45:12 -0800 (PST) X-Google-Smtp-Source: AA0mqf4BaG5Tf3W6Kam2r51o7fVDDJRpIF8pUbrKlnu9HdCNewIWYBKW0zszZ4CmzLsLALSWjkXkFA== X-Received: by 2002:a0c:e650:0:b0:4c6:7622:3123 with SMTP id c16-20020a0ce650000000b004c676223123mr9247882qvn.40.1668825911733; Fri, 18 Nov 2022 18:45:11 -0800 (PST) Received: from [192.168.1.137] (130-44-159-43.s15913.c3-0.arl-cbr1.sbo-arl.ma.cable.rcncustomer.com. [130.44.159.43]) by smtp.gmail.com with ESMTPSA id r8-20020ae9d608000000b006ee7e223bb8sm3567564qkk.39.2022.11.18.18.45.09 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Fri, 18 Nov 2022 18:45:10 -0800 (PST) Message-ID: Date: Fri, 18 Nov 2022 21:45:09 -0500 MIME-Version: 1.0 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:102.0) Gecko/20100101 Thunderbird/102.5.0 Subject: Re: [PATCH RFC] c++: implement P1492 contracts From: Jason Merrill To: gcc-patches@gcc.gnu.org Cc: Andrew Sutton , Andrew Marmaduke , Michael Lopez , Jeff Chapman II References: <20221104144026.2311096-1-jason@redhat.com> In-Reply-To: <20221104144026.2311096-1-jason@redhat.com> X-Mimecast-Spam-Score: 0 X-Mimecast-Originator: redhat.com Content-Type: multipart/mixed; boundary="------------09qljYXB0SDCLEsl9xfgHkki" Content-Language: en-US X-Spam-Status: No, score=-12.3 required=5.0 tests=BAYES_00,DKIMWL_WL_HIGH,DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,GIT_PATCH_0,KAM_SHORT,NICE_REPLY_A,RCVD_IN_DNSWL_NONE,RCVD_IN_MSPIKE_H2,SPF_HELO_NONE,SPF_NONE,TXREP autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on server2.sourceware.org List-Id: This is a multi-part message in MIME format. --------------09qljYXB0SDCLEsl9xfgHkki Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 7bit On 11/4/22 10:40, Jason Merrill wrote: > The front-end parts of the experimental C++ contracts implementation. The > contracts working group are keen to have this available in a released compiler, > and I've cleaned it up to the point that I think it's ready. I'm planning to > commit it after the library and input.cc bits are approved. Here's what I've pushed: --------------09qljYXB0SDCLEsl9xfgHkki Content-Type: text/x-patch; charset=UTF-8; name="0001-c-implement-P1492-contracts.patch" Content-Disposition: attachment; filename="0001-c-implement-P1492-contracts.patch" Content-Transfer-Encoding: base64 RnJvbSAyZWZiMjM3ZmZjNjhlYzliYjE3OTgyNDM0ZjU5NDFiZmExNGY4YjUwIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBKZWZmIENoYXBtYW4gSUkgPGpjaGFwbWFuQGxvY2szc29mdHdh cmUuY29tPgpEYXRlOiBUdWUsIDI5IEp1biAyMDIxIDE2OjUyOjU2IC0wNDAwClN1YmplY3Q6IFtQ QVRDSF0gYysrOiBpbXBsZW1lbnQgUDE0OTIgY29udHJhY3RzClRvOiBnY2MtcGF0Y2hlc0BnY2Mu Z251Lm9yZwoKSW1wbGVtZW50IHRoZSBQMTQ5MiB2ZXJzaW9ucyBvZiBjb250cmFjdHMsIGFsb25n IHdpdGggZXh0ZW5zaW9ucyB0aGF0CnN1cHBvcnQgdGhlIGVtdWxhdGlvbiBvZiBONDgyMCBhbmQg b3RoZXIgcHJvcG9zYWxzLiBUaGlzIGltcGxlbWVudGF0aW9uCmFzc2lnbnMgYSBjb25jcmV0ZSBz ZW1hbnRpYyAob25lIG9mOiBpZ25vcmUsIGFzc3VtZSwgZW5mb3JjZSwgb3IKb2JzZXJ2ZSkgdG8g ZWFjaCBjb250cmFjdCBhdHRyaWJ1dGUgZGVwZW5kaW5nIG9uIGl0cyBsYWJlbHMgYW5kCmNvbmZp Z3VyYXRpb24gb3B0aW9ucy4KCkNvLWF1dGhvcmVkLWJ5OiBBbmRyZXcgU3V0dG9uICA8YXN1dHRv bkBsb2NrM3NvZnR3YXJlLmNvbT4KQ28tYXV0aG9yZWQtYnk6IEFuZHJldyBNYXJtYWR1a2UgPGFt YXJtYWR1a2VAbG9jazNzb2Z0d2FyZS5jb20+CkNvLWF1dGhvcmVkLWJ5OiBNaWNoYWVsIExvcGV6 IDxtbG9wZXpAbG9jazNzb2Z0d2FyZS5jb20+CkNvLWF1dGhvcmVkLWJ5OiBKYXNvbiBNZXJyaWxs ICA8amFzb25AcmVkaGF0LmNvbT4KCmdjYy9DaGFuZ2VMb2c6CgoJKiBkb2MvaW52b2tlLnRleGk6 IERvY3VtZW50IGNvbnRyYWN0cyBmbGFncy4KCmdjYy9jLWZhbWlseS9DaGFuZ2VMb2c6CgoJKiBj Lm9wdDogQWRkIGNvbnRyYWN0cyBmbGFncy4KCSogYy1jcHBidWlsdGluLmNjIChjX2NwcF9idWls dGlucyk6IEFkZCBjb250cmFjdHMgZmVhdHVyZS10ZXN0CgltYWNyb3MuCgpnY2MvY3AvQ2hhbmdl TG9nOgoKCSogY3AtdHJlZS5oIChlbnVtIGNwX3RyZWVfaW5kZXgpOiBBZGQKCUNQVElfUFNFVURP X0NPTlRSQUNUX1ZJT0xBVElPTi4KCShwc2V1ZG9fY29udHJhY3RfdmlvbGF0aW9uX3R5cGUpOiBO ZXcgbWFjcm8uCgkoc3RydWN0IHNhdmVkX3Njb3BlKTogQWRkIHhfcHJvY2Vzc2luZ19jb250cmFj dF9jb25kaXRpb24uCgkocHJvY2Vzc2luZ19jb250cmFjdF9jb25kaXRpb24pOiBOZXcgbWFjcm8u CgkoY29tcGFyaW5nX292ZXJyaWRlX2NvbnRyYWN0cyk6IE5ldyB2YXJpYWJsZSBkZWNsLgoJKGZp bmRfY29udHJhY3QpOiBOZXcgaW5saW5lLgoJKHNldF9kZWNsX2NvbnRyYWN0cyk6IE5ldyBpbmxp bmUuCgkoZ2V0X2NvbnRyYWN0X3NlbWFudGljKTogTmV3IGlubGluZS4KCShzZXRfY29udHJhY3Rf c2VtYW50aWMpOiBOZXcgaW5saW5lLgoJKiBjb25zdGV4cHIuY2MgKGN4eF9ldmFsX2Fzc2VydCk6 IFNwbGl0IG91dCBmcm9tLi4uCgkoY3h4X2V2YWxfaW50ZXJuYWxfZnVuY3Rpb24pOiAuLi5oZXJl LgoJKGN4eF9ldmFsX2NvbnN0YW50X2V4cHJlc3Npb24pOiBVc2UgaXQgZm9yIGNvbnRyYWN0cy4K CShwb3RlbnRpYWxfY29uc3RhbnRfZXhwcmVzc2lvbl8xKTogSGFuZGxlIGNvbnRyYWN0cy4KCSog Y3AtZ2ltcGxpZnkuY2MgKGNwX2dlbmVyaWNpemVfcik6IEhhbmRsZSBjb250cmFjdHMuCgkqIGNw LW9iamNwLWNvbW1vbi5jYyAoY3BfdHJlZV9zaXplKTogSGFuZGxlIGNvbnRyYWN0cy4KCShjcF9j b21tb25faW5pdF90cyk6IEhhbmRsZSBjb250cmFjdHMuCgkoY3BfaGFuZGxlX29wdGlvbik6IEhh bmRsZSBjb250cmFjdHMuCgkqIGRlY2wuY2MgKGR1cGxpY2F0ZV9kZWNscyk6IEhhbmRsZSBjb250 cmFjdHMuCgkoY2hlY2tfdGFnX2RlY2wpOiBDaGVjayBmb3IgYm9ndXMgY29udHJhY3RzLgoJKHN0 YXJ0X2RlY2wpOiBDaGVjayBmbGFnX2NvbnRyYWN0cy4KCShncm9rZm5kZWNsKTogQ2FsbCByZWJ1 aWxkX3Bvc3Rjb25kaXRpb25zLgoJKGdyb2tkZWNsYXJhdG9yKTogSGFuZGxlIGNvbnRyYWN0IGF0 dHJpYnV0ZXMuCgkoc3RhcnRfcHJlcGFyc2VkX2Z1bmN0aW9uKTogQ2FsbCBzdGFydF9mdW5jdGlv bl9jb250cmFjdHMuCgkoZmluaXNoX2Z1bmN0aW9uKTogQ2FsbCBmaW5pc2hfZnVuY3Rpb25fY29u dHJhY3RzLgoJKiBkZWNsMi5jYyAoY3BfY2hlY2tfY29uc3RfYXR0cmlidXRlcyk6IFNraXAgY29u dHJhY3RzLgoJKGNvbWRhdF9saW5rYWdlKTogSGFuZGxlIG91dGxpbmVkIGNvbnRyYWN0cy4KCSog ZXJyb3IuY2MgKGR1bXBfdHlwZSk6IEhhbmRsZSBudWxsIFRZUEVfSURFTlRJRklFUi4KCSogZysr c3BlYy5jYyAoRVhQRVJJTUVOVEFMKTogTmV3IG1hY3JvLgoJKGxhbmdfc3BlY2lmaWNfZHJpdmVy KTogQWRkIC1sc3RkYysrZXhwIGlmIC1mY29udHJhY3RzLgoJKiBtYW5nbGUuY2MgKHdyaXRlX2Vu Y29kaW5nKTogSGFuZGxlIG91dGxpbmVkIGNvbnRyYWN0cy4KCSogbW9kdWxlLmNjICh0cmVlc19v dXQ6OmZuX3Bhcm1zX2luaXQpOiBIYW5kbGUgb3V0bGluZWQgY29udHJhY3RzLgoJKHRyZWVzX2lu Ojpmbl9wYXJtc19pbml0KTogTGlrZXdpc2UuCgkoY2hlY2tfbWVyZ2VhYmxlX2RlY2wpOiBMaWtl d2lzZS4KCShtb2R1bGVfc3RhdGVfY29uZmlnOjpnZXRfZGlhbGVjdCk6IFJlY29yZCAtZmNvbnRy YWN0cy4KCSogcGFyc2VyLmggKHN0cnVjdCBjcF91bnBhcnNlZF9mdW5jdGlvbnNfZW50cnkpOiBB ZGQgY29udHJhY3RzLgoJKiBwYXJzZXIuY2MgKHVucGFyc2VkX2NvbnRyYWN0cyk6IE5ldyBtYWNy by4KCShwdXNoX3VucGFyc2VkX2Z1bmN0aW9uX3F1ZXVlcyk6IEFkanVzdC4KCShjb250cmFjdF9h dHRyaWJ1dGVfcCk6IE5ldy4KCShjcF9wYXJzZXJfc3RhdGVtZW50KTogQ2hlY2sgY29udHJhY3Rz LgoJKGNwX3BhcnNlcl9kZWNsX3NwZWNpZmllcl9zZXEpOiBIYW5kbGUgY29udHJhY3RzLgoJKGNw X3BhcnNlcl9za2lwX3RvX2Nsb3Npbmdfc3F1YXJlX2JyYWNrZXQpOiBTcGxpdCBvdXQuLi4KCShj cF9wYXJzZXJfc2tpcF91cF90b19jbG9zaW5nX3NxdWFyZV9icmFja2V0KTogLi4udGhpcyBmbi4K CShjcF9wYXJzZXJfY2xhc3Nfc3BlY2lmaWVyKTogRG8gY29udHJhY3QgbGF0ZSBwYXJzaW5nLgoJ KGNwX3BhcnNlcl9jbGFzc19oZWFkKTogQ2hlY2sgY29udHJhY3RzLgoJKGNwX3BhcnNlcl9jb250 cmFjdF9yb2xlKTogTmV3LgoJKGNwX3BhcnNlcl9jb250cmFjdF9tb2RlX29wdCk6IE5ldy4KCShm aW5kX2Vycm9yLCBjb250YWluc19lcnJvcl9wKTogTmV3LgoJKGNwX3BhcnNlcl9jb250cmFjdF9h dHRyaWJ1dGVfc3BlYyk6IE5ldy4KCShjcF9wYXJzZXJfbGF0ZV9jb250cmFjdF9jb25kaXRpb24p OiBOZXcuCgkoY3BfcGFyc2VyX3N0ZF9hdHRyaWJ1dGVfc3BlYyk6IEhhbmRsZSBjb250cmFjdHMu CgkoY3BfcGFyc2VyX3NhdmVfZGVmYXVsdF9hcmdzKTogQWxzbyBzYXZlIGNvbnRyYWN0cy4KCSog cHQuY2MgKHJlZ2lzdGVyX3BhcmFtZXRlcl9zcGVjaWFsaXphdGlvbnMpOiBObyBsb25nZXIgc3Rh dGljLgoJKHJlZ2lzdGVyX2xvY2FsX2lkZW50aXR5KTogTmV3LgoJKGNoZWNrX2V4cGxpY2l0X3Nw ZWNpYWxpemF0aW9uKTogQ2FsbCByZW1vdmVfY29udHJhY3RfYXR0cmlidXRlcy4KCSh0c3Vic3Rf Y29udHJhY3QsIHRzdWJzdF9jb250cmFjdF9hdHRyaWJ1dGUpOiBOZXcuCgkodHN1YnN0X2NvbnRy YWN0X2F0dHJpYnV0ZXMpOiBOZXcuCgkodHN1YnN0X2F0dHJpYnV0ZSk6IEFkZCBjb21tZW50LgoJ KHRzdWJzdF9jb3B5KTogQWxzbyBhbGxvdyBwYXJtIHdoZW4gcHJvY2Vzc2luZ19jb250cmFjdF9j b25kaXRpb24uCgkodHN1YnN0X2V4cHIpOiBIYW5kbGUgY29udHJhY3RzLgoJKHJlZ2VuZXJhdGVf ZGVjbF9mcm9tX3RlbXBsYXRlKTogSGFuZGxlIGNvbnRyYWN0cy4KCSogc2VhcmNoLmNjIChjaGVj a19maW5hbF9vdmVycmlkZXIpOiBDb21wYXJlIGNvbnRyYWN0cy4KCSogc2VtYW50aWNzLmNjIChz ZXRfY2xlYW51cF9sb2NzKTogU2tpcCBQT1NUQ09ORElUSU9OX1NUTVQuCgkoZmluaXNoX25vbl9z dGF0aWNfZGF0YV9tZW1iZXIpOiBDaGVjayBjb250cmFjdHMuCgkoZmluaXNoX3RoaXNfZXhwcik6 IENoZWNrIGNvbnRyYWN0cy4KCShwcm9jZXNzX291dGVyX3Zhcl9yZWYpOiBIYW5kbGUgY29udHJh Y3RzLgoJKGZpbmlzaF9pZF9leHByZXNzaW9uXzEpOiBIYW5kbGUgY29udHJhY3RzLgoJKGFwcGx5 X2RlZHVjZWRfcmV0dXJuX3R5cGUpOiBBZGp1c3QgY29udHJhY3RzLgoJKiB0cmVlLmNjIChoYW5k bGVfY29udHJhY3RfYXR0cmlidXRlKTogTmV3LgoJKGdldF9pbm5lcm1vc3RfY29tcG9uZW50LCBp c190aGlzX2V4cHJlc3Npb24pOiBOZXcuCgkoY29tcGFyaW5nX3RoaXNfcmVmZXJlbmNlcyk6IE5l dy4KCShlcXVpdmFsZW50X21lbWJlcl9yZWZlcmVuY2VzKTogTmV3LgoJKGNwX3RyZWVfZXF1YWwp OiBDaGVjayBpdC4KCSogdHlwZWNrLmNjIChjaGVja19yZXR1cm5fZXhwcik6IEFwcGx5IGNvbnRy YWN0cy4KCSogTWFrZS1sYW5nLmluOiBBZGQgY29udHJhY3RzLm8uCgkqIGNvbmZpZy1sYW5nLmlu OiBBZGQgY29udHJhY3RzLmNjLgoJKiBjcC10cmVlLmRlZiAoQVNTRVJUSU9OX1NUTVQsIFBSRUNP TkRJVElPTl9TVE1UKQoJKFBPU1RDT05ESVRJT05fU1RNVCk6IE5ldy4KCSogY29udHJhY3RzLmg6 IE5ldyBmaWxlLgoJKiBjb250cmFjdHMuY2M6IE5ldyBmaWxlLgoKZ2NjL3Rlc3RzdWl0ZS9DaGFu Z2VMb2c6CgoJKiBnKysuZGcvbW9kdWxlcy9tb2R1bGVzLmV4cDogUGFzcyBkZy1vcHRpb25zIHRv IGxpbmsgY29tbWFuZC4KCSogbGliL2crKy5leHA6IEFkZCAtTCBmb3IgbGlic3RkYysrZXhwLmEu CgkqIGcrKy5kZy9jb250cmFjdHMvYmFja3RyYWNlX2hhbmRsZXIvYXNzZXJ0X2ZhaWwuY3BwOiBO ZXcgdGVzdC4KCSogZysrLmRnL2NvbnRyYWN0cy9iYWNrdHJhY2VfaGFuZGxlci9oYW5kbGVfY29u dHJhY3RfdmlvbGF0aW9uLmNwcDogTmV3IHRlc3QuCgkqIGcrKy5kZy9jb250cmFjdHMvY29udHJh Y3RzLWFjY2VzczEuQzogTmV3IHRlc3QuCgkqIGcrKy5kZy9jb250cmFjdHMvY29udHJhY3RzLWFz c3VtZTEuQzogTmV3IHRlc3QuCgkqIGcrKy5kZy9jb250cmFjdHMvY29udHJhY3RzLWFzc3VtZTIu QzogTmV3IHRlc3QuCgkqIGcrKy5kZy9jb250cmFjdHMvY29udHJhY3RzLWFzc3VtZTMuQzogTmV3 IHRlc3QuCgkqIGcrKy5kZy9jb250cmFjdHMvY29udHJhY3RzLWFzc3VtZTQuQzogTmV3IHRlc3Qu CgkqIGcrKy5kZy9jb250cmFjdHMvY29udHJhY3RzLWFzc3VtZTUuQzogTmV3IHRlc3QuCgkqIGcr Ky5kZy9jb250cmFjdHMvY29udHJhY3RzLWFzc3VtZTYuQzogTmV3IHRlc3QuCgkqIGcrKy5kZy9j b250cmFjdHMvY29udHJhY3RzLWNvbWRhdDEuQzogTmV3IHRlc3QuCgkqIGcrKy5kZy9jb250cmFj dHMvY29udHJhY3RzLWNvbmZpZzEuQzogTmV3IHRlc3QuCgkqIGcrKy5kZy9jb250cmFjdHMvY29u dHJhY3RzLWNvbnN0ZXhwcjEuQzogTmV3IHRlc3QuCgkqIGcrKy5kZy9jb250cmFjdHMvY29udHJh Y3RzLWNvbnN0ZXhwcjIuQzogTmV3IHRlc3QuCgkqIGcrKy5kZy9jb250cmFjdHMvY29udHJhY3Rz LWNvbnN0ZXhwcjMuQzogTmV3IHRlc3QuCgkqIGcrKy5kZy9jb250cmFjdHMvY29udHJhY3RzLWNv bnZlcnNpb24xLkM6IE5ldyB0ZXN0LgoJKiBnKysuZGcvY29udHJhY3RzL2NvbnRyYWN0cy1jdG9y LWR0b3IxLkM6IE5ldyB0ZXN0LgoJKiBnKysuZGcvY29udHJhY3RzL2NvbnRyYWN0cy1jdG9yLWR0 b3IyLkM6IE5ldyB0ZXN0LgoJKiBnKysuZGcvY29udHJhY3RzL2NvbnRyYWN0cy1jdjEuQzogTmV3 IHRlc3QuCgkqIGcrKy5kZy9jb250cmFjdHMvY29udHJhY3RzLWRlZHVjZWQxLkM6IE5ldyB0ZXN0 LgoJKiBnKysuZGcvY29udHJhY3RzL2NvbnRyYWN0cy1kZWR1Y2VkMi5DOiBOZXcgdGVzdC4KCSog ZysrLmRnL2NvbnRyYWN0cy9jb250cmFjdHMtZnJpZW5kMS5DOiBOZXcgdGVzdC4KCSogZysrLmRn L2NvbnRyYWN0cy9jb250cmFjdHMtZnQxLkM6IE5ldyB0ZXN0LgoJKiBnKysuZGcvY29udHJhY3Rz L2NvbnRyYWN0cy1pZ25vcmUxLkM6IE5ldyB0ZXN0LgoJKiBnKysuZGcvY29udHJhY3RzL2NvbnRy YWN0cy1pZ25vcmUyLkM6IE5ldyB0ZXN0LgoJKiBnKysuZGcvY29udHJhY3RzL2NvbnRyYWN0cy1s YXJnZS1yZXR1cm4uQzogTmV3IHRlc3QuCgkqIGcrKy5kZy9jb250cmFjdHMvY29udHJhY3RzLW11 bHRpbGluZTEuQzogTmV3IHRlc3QuCgkqIGcrKy5kZy9jb250cmFjdHMvY29udHJhY3RzLW11bHRp cGxlLWluaGVyaXRhbmNlMS5DOiBOZXcgdGVzdC4KCSogZysrLmRnL2NvbnRyYWN0cy9jb250cmFj dHMtbXVsdGlwbGUtaW5oZXJpdGFuY2UyLkM6IE5ldyB0ZXN0LgoJKiBnKysuZGcvY29udHJhY3Rz L2NvbnRyYWN0cy1uZXN0ZWQtY2xhc3MxLkM6IE5ldyB0ZXN0LgoJKiBnKysuZGcvY29udHJhY3Rz L2NvbnRyYWN0cy1uZXN0ZWQtY2xhc3MyLkM6IE5ldyB0ZXN0LgoJKiBnKysuZGcvY29udHJhY3Rz L2NvbnRyYWN0cy1ub2NvcHkxLkM6IE5ldyB0ZXN0LgoJKiBnKysuZGcvY29udHJhY3RzL2NvbnRy YWN0cy1vdmVycmlkZS5DOiBOZXcgdGVzdC4KCSogZysrLmRnL2NvbnRyYWN0cy9jb250cmFjdHMt cG9zdDEuQzogTmV3IHRlc3QuCgkqIGcrKy5kZy9jb250cmFjdHMvY29udHJhY3RzLXBvc3QyLkM6 IE5ldyB0ZXN0LgoJKiBnKysuZGcvY29udHJhY3RzL2NvbnRyYWN0cy1wb3N0My5DOiBOZXcgdGVz dC4KCSogZysrLmRnL2NvbnRyYWN0cy9jb250cmFjdHMtcG9zdDQuQzogTmV3IHRlc3QuCgkqIGcr Ky5kZy9jb250cmFjdHMvY29udHJhY3RzLXBvc3Q1LkM6IE5ldyB0ZXN0LgoJKiBnKysuZGcvY29u dHJhY3RzL2NvbnRyYWN0cy1wb3N0Ni5DOiBOZXcgdGVzdC4KCSogZysrLmRnL2NvbnRyYWN0cy9j b250cmFjdHMtcHJlMS5DOiBOZXcgdGVzdC4KCSogZysrLmRnL2NvbnRyYWN0cy9jb250cmFjdHMt cHJlMTAuQzogTmV3IHRlc3QuCgkqIGcrKy5kZy9jb250cmFjdHMvY29udHJhY3RzLXByZTIuQzog TmV3IHRlc3QuCgkqIGcrKy5kZy9jb250cmFjdHMvY29udHJhY3RzLXByZTJhMS5DOiBOZXcgdGVz dC4KCSogZysrLmRnL2NvbnRyYWN0cy9jb250cmFjdHMtcHJlMmEyLkM6IE5ldyB0ZXN0LgoJKiBn KysuZGcvY29udHJhY3RzL2NvbnRyYWN0cy1wcmUzLkM6IE5ldyB0ZXN0LgoJKiBnKysuZGcvY29u dHJhY3RzL2NvbnRyYWN0cy1wcmU0LkM6IE5ldyB0ZXN0LgoJKiBnKysuZGcvY29udHJhY3RzL2Nv bnRyYWN0cy1wcmU1LkM6IE5ldyB0ZXN0LgoJKiBnKysuZGcvY29udHJhY3RzL2NvbnRyYWN0cy1w cmU2LkM6IE5ldyB0ZXN0LgoJKiBnKysuZGcvY29udHJhY3RzL2NvbnRyYWN0cy1wcmU3LkM6IE5l dyB0ZXN0LgoJKiBnKysuZGcvY29udHJhY3RzL2NvbnRyYWN0cy1wcmU5LkM6IE5ldyB0ZXN0LgoJ KiBnKysuZGcvY29udHJhY3RzL2NvbnRyYWN0cy1yZWRlY2wxLkM6IE5ldyB0ZXN0LgoJKiBnKysu ZGcvY29udHJhY3RzL2NvbnRyYWN0cy1yZWRlY2wyLkM6IE5ldyB0ZXN0LgoJKiBnKysuZGcvY29u dHJhY3RzL2NvbnRyYWN0cy1yZWRlY2wzLkM6IE5ldyB0ZXN0LgoJKiBnKysuZGcvY29udHJhY3Rz L2NvbnRyYWN0cy1yZWRlY2w0LkM6IE5ldyB0ZXN0LgoJKiBnKysuZGcvY29udHJhY3RzL2NvbnRy YWN0cy1yZWRlY2w1LkM6IE5ldyB0ZXN0LgoJKiBnKysuZGcvY29udHJhY3RzL2NvbnRyYWN0cy1y ZWRlY2w2LkM6IE5ldyB0ZXN0LgoJKiBnKysuZGcvY29udHJhY3RzL2NvbnRyYWN0cy1yZWRlY2w3 LkM6IE5ldyB0ZXN0LgoJKiBnKysuZGcvY29udHJhY3RzL2NvbnRyYWN0cy1yZWRlY2w4LkM6IE5l dyB0ZXN0LgoJKiBnKysuZGcvY29udHJhY3RzL2NvbnRyYWN0cy10bXBsLWF0dHIxLkM6IE5ldyB0 ZXN0LgoJKiBnKysuZGcvY29udHJhY3RzL2NvbnRyYWN0cy10bXBsLXNwZWMxLkM6IE5ldyB0ZXN0 LgoJKiBnKysuZGcvY29udHJhY3RzL2NvbnRyYWN0cy10bXBsLXNwZWMyLkM6IE5ldyB0ZXN0LgoJ KiBnKysuZGcvY29udHJhY3RzL2NvbnRyYWN0cy10bXBsLXNwZWMzLkM6IE5ldyB0ZXN0LgoJKiBn KysuZGcvY29udHJhY3RzL2NvbnRyYWN0czEuQzogTmV3IHRlc3QuCgkqIGcrKy5kZy9jb250cmFj dHMvY29udHJhY3RzMTAuQzogTmV3IHRlc3QuCgkqIGcrKy5kZy9jb250cmFjdHMvY29udHJhY3Rz MTEuQzogTmV3IHRlc3QuCgkqIGcrKy5kZy9jb250cmFjdHMvY29udHJhY3RzMTIuQzogTmV3IHRl c3QuCgkqIGcrKy5kZy9jb250cmFjdHMvY29udHJhY3RzMTMuQzogTmV3IHRlc3QuCgkqIGcrKy5k Zy9jb250cmFjdHMvY29udHJhY3RzMTQuQzogTmV3IHRlc3QuCgkqIGcrKy5kZy9jb250cmFjdHMv Y29udHJhY3RzMTUuQzogTmV3IHRlc3QuCgkqIGcrKy5kZy9jb250cmFjdHMvY29udHJhY3RzMTYu QzogTmV3IHRlc3QuCgkqIGcrKy5kZy9jb250cmFjdHMvY29udHJhY3RzMTcuQzogTmV3IHRlc3Qu CgkqIGcrKy5kZy9jb250cmFjdHMvY29udHJhY3RzMTguQzogTmV3IHRlc3QuCgkqIGcrKy5kZy9j b250cmFjdHMvY29udHJhY3RzMTkuQzogTmV3IHRlc3QuCgkqIGcrKy5kZy9jb250cmFjdHMvY29u dHJhY3RzMi5DOiBOZXcgdGVzdC4KCSogZysrLmRnL2NvbnRyYWN0cy9jb250cmFjdHMyMC5DOiBO ZXcgdGVzdC4KCSogZysrLmRnL2NvbnRyYWN0cy9jb250cmFjdHMyMi5DOiBOZXcgdGVzdC4KCSog ZysrLmRnL2NvbnRyYWN0cy9jb250cmFjdHMyNC5DOiBOZXcgdGVzdC4KCSogZysrLmRnL2NvbnRy YWN0cy9jb250cmFjdHMyNS5DOiBOZXcgdGVzdC4KCSogZysrLmRnL2NvbnRyYWN0cy9jb250cmFj dHMzLkM6IE5ldyB0ZXN0LgoJKiBnKysuZGcvY29udHJhY3RzL2NvbnRyYWN0czM1LkM6IE5ldyB0 ZXN0LgoJKiBnKysuZGcvY29udHJhY3RzL2NvbnRyYWN0czQuQzogTmV3IHRlc3QuCgkqIGcrKy5k Zy9jb250cmFjdHMvY29udHJhY3RzNS5DOiBOZXcgdGVzdC4KCSogZysrLmRnL2NvbnRyYWN0cy9j b250cmFjdHM2LkM6IE5ldyB0ZXN0LgoJKiBnKysuZGcvY29udHJhY3RzL2NvbnRyYWN0czcuQzog TmV3IHRlc3QuCgkqIGcrKy5kZy9jb250cmFjdHMvY29udHJhY3RzOC5DOiBOZXcgdGVzdC4KCSog ZysrLmRnL2NvbnRyYWN0cy9jb250cmFjdHM5LkM6IE5ldyB0ZXN0LgoJKiBnKysuZGcvbW9kdWxl cy9jb250cmFjdHMtMV9hLkM6IE5ldyB0ZXN0LgoJKiBnKysuZGcvbW9kdWxlcy9jb250cmFjdHMt MV9iLkM6IE5ldyB0ZXN0LgoJKiBnKysuZGcvbW9kdWxlcy9jb250cmFjdHMtMl9hLkM6IE5ldyB0 ZXN0LgoJKiBnKysuZGcvbW9kdWxlcy9jb250cmFjdHMtMl9iLkM6IE5ldyB0ZXN0LgoJKiBnKysu ZGcvbW9kdWxlcy9jb250cmFjdHMtMl9jLkM6IE5ldyB0ZXN0LgoJKiBnKysuZGcvbW9kdWxlcy9j b250cmFjdHMtM19hLkM6IE5ldyB0ZXN0LgoJKiBnKysuZGcvbW9kdWxlcy9jb250cmFjdHMtM19i LkM6IE5ldyB0ZXN0LgoJKiBnKysuZGcvbW9kdWxlcy9jb250cmFjdHMtNF9hLkM6IE5ldyB0ZXN0 LgoJKiBnKysuZGcvbW9kdWxlcy9jb250cmFjdHMtNF9iLkM6IE5ldyB0ZXN0LgoJKiBnKysuZGcv bW9kdWxlcy9jb250cmFjdHMtNF9jLkM6IE5ldyB0ZXN0LgoJKiBnKysuZGcvbW9kdWxlcy9jb250 cmFjdHMtNF9kLkM6IE5ldyB0ZXN0LgoJKiBnKysuZGcvbW9kdWxlcy9jb250cmFjdHMtdHBsLWZy aWVuZC0xX2EuQzogTmV3IHRlc3QuCgkqIGcrKy5kZy9tb2R1bGVzL2NvbnRyYWN0cy10cGwtZnJp ZW5kLTFfYi5DOiBOZXcgdGVzdC4KCSogZysrLmRnL2NvbnRyYWN0cy9iYWNrdHJhY2VfaGFuZGxl ci9NYWtlZmlsZTogTmV3IHRlc3QuCgkqIGcrKy5kZy9jb250cmFjdHMvYmFja3RyYWNlX2hhbmRs ZXIvUkVBRE1FOiBOZXcgdGVzdC4KCSogZysrLmRnL2NvbnRyYWN0cy9iYWNrdHJhY2VfaGFuZGxl ci9leGFtcGxlX291dC50eHQ6IE5ldyB0ZXN0LgoJKiBnKysuZGcvY29udHJhY3RzL2JhY2t0cmFj ZV9oYW5kbGVyL2V4YW1wbGVfcHJldHR5LnR4dDogTmV3IHRlc3QuCgkqIGcrKy5kZy9jb250cmFj dHMvYmFja3RyYWNlX2hhbmRsZXIvcHJldHR5dHJhY2Uuc2g6IE5ldyB0ZXN0LgoJKiBnKysuZGcv Y29udHJhY3RzL2V4Y2VwdF9wcmVsb2FkX2hhbmRsZXIvTWFrZWZpbGU6IE5ldyB0ZXN0LgoJKiBn KysuZGcvY29udHJhY3RzL2V4Y2VwdF9wcmVsb2FkX2hhbmRsZXIvUkVBRE1FOiBOZXcgdGVzdC4K CSogZysrLmRnL2NvbnRyYWN0cy9leGNlcHRfcHJlbG9hZF9oYW5kbGVyL2Fzc2VydF9mYWlsLmNw cDogTmV3IHRlc3QuCgkqIGcrKy5kZy9jb250cmFjdHMvZXhjZXB0X3ByZWxvYWRfaGFuZGxlci9o YW5kbGVfY29udHJhY3RfdmlvbGF0aW9uLmNwcDogTmV3IHRlc3QuCgkqIGcrKy5kZy9jb250cmFj dHMvbm9leGNlcHRfcHJlbG9hZF9oYW5kbGVyL01ha2VmaWxlOiBOZXcgdGVzdC4KCSogZysrLmRn L2NvbnRyYWN0cy9ub2V4Y2VwdF9wcmVsb2FkX2hhbmRsZXIvUkVBRE1FOiBOZXcgdGVzdC4KCSog ZysrLmRnL2NvbnRyYWN0cy9ub2V4Y2VwdF9wcmVsb2FkX2hhbmRsZXIvYXNzZXJ0X2ZhaWwuY3Bw OiBOZXcgdGVzdC4KCSogZysrLmRnL2NvbnRyYWN0cy9ub2V4Y2VwdF9wcmVsb2FkX2hhbmRsZXIv aGFuZGxlX2NvbnRyYWN0X3Zpb2xhdGlvbi5jcHA6IE5ldyB0ZXN0LgoJKiBnKysuZGcvY29udHJh Y3RzL3ByZWxvYWRfaGFuZGxlci9NYWtlZmlsZTogTmV3IHRlc3QuCgkqIGcrKy5kZy9jb250cmFj dHMvcHJlbG9hZF9oYW5kbGVyL1JFQURNRTogTmV3IHRlc3QuCgkqIGcrKy5kZy9jb250cmFjdHMv cHJlbG9hZF9oYW5kbGVyL2Fzc2VydF9mYWlsLmNwcDogTmV3IHRlc3QuCgkqIGcrKy5kZy9jb250 cmFjdHMvcHJlbG9hZF9oYW5kbGVyL2hhbmRsZV9jb250cmFjdF92aW9sYXRpb24uY3BwOiBOZXcg dGVzdC4KCSogZysrLmRnL2NvbnRyYWN0cy9wcmVsb2FkX25vY29udGludWVfaGFuZGxlci9NYWtl ZmlsZTogTmV3IHRlc3QuCgkqIGcrKy5kZy9jb250cmFjdHMvcHJlbG9hZF9ub2NvbnRpbnVlX2hh bmRsZXIvUkVBRE1FOiBOZXcgdGVzdC4KCSogZysrLmRnL2NvbnRyYWN0cy9wcmVsb2FkX25vY29u dGludWVfaGFuZGxlci9hc3NlcnRfZmFpbC5jcHA6IE5ldyB0ZXN0LgoJKiBnKysuZGcvY29udHJh Y3RzL3ByZWxvYWRfbm9jb250aW51ZV9oYW5kbGVyL2hhbmRsZV9jb250cmFjdF92aW9sYXRpb24u Y3BwOiBOZXcgdGVzdC4KCSogZysrLmRnL2NvbnRyYWN0cy9wcmVsb2FkX25vY29udGludWVfaGFu ZGxlci9ub2NvbnRpbnVlLmNwcDogTmV3IHRlc3QuCi0tLQogZ2NjL2RvYy9pbnZva2UudGV4aSAg ICAgICAgICAgICAgICAgICAgICAgICAgIHwgICA3OSArCiBnY2MvYy1mYW1pbHkvYy5vcHQgICAg ICAgICAgICAgICAgICAgICAgICAgICAgfCAgIDQxICsKIGdjYy9jcC9jb250cmFjdHMuaCAgICAg ICAgICAgICAgICAgICAgICAgICAgICB8ICAzMDUgKysrCiBnY2MvY3AvY3AtdHJlZS5oICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgfCAgIDY0ICsKIGdjYy9jcC9wYXJzZXIuaCAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICB8ICAgIDMgKwogZ2NjL2MtZmFtaWx5L2MtY3BwYnVpbHRp bi5jYyAgICAgICAgICAgICAgICAgIHwgICAgNiArCiBnY2MvY3AvY29uc3RleHByLmNjICAgICAg ICAgICAgICAgICAgICAgICAgICAgfCAgMTIxICstCiBnY2MvY3AvY29udHJhY3RzLmNjICAgICAg ICAgICAgICAgICAgICAgICAgICAgfCAyMjQwICsrKysrKysrKysrKysrKysrCiBnY2MvY3AvY3At Z2ltcGxpZnkuY2MgICAgICAgICAgICAgICAgICAgICAgICAgfCAgIDE3ICsKIGdjYy9jcC9jcC1v YmpjcC1jb21tb24uY2MgICAgICAgICAgICAgICAgICAgICB8ICAgNDEgKwogZ2NjL2NwL2RlY2wu Y2MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgIDExNSArLQogZ2NjL2NwL2RlY2wy LmNjICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAxNSArLQogZ2NjL2NwL2Vycm9y LmNjICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgMyArLQogZ2NjL2NwL2crK3Nw ZWMuY2MgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAxMiArCiBnY2MvY3AvbWFuZ2xl LmNjICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICA3ICsKIGdjYy9jcC9tb2R1bGUu Y2MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgMzAgKy0KIGdjYy9jcC9wYXJzZXIu Y2MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICA1MjIgKysrLQogZ2NjL2NwL3B0LmNj ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgIDE2NCArLQogZ2NjL2NwL3NlYXJj aC5jYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAyOCArCiBnY2MvY3Avc2VtYW50 aWNzLmNjICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgIDI4ICstCiBnY2MvY3AvdHJlZS5j YyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgIDY3ICsKIGdjYy9jcC90eXBlY2su Y2MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgMTMgKy0KIC4uLi9iYWNrdHJhY2Vf aGFuZGxlci9hc3NlcnRfZmFpbC5jcHAgICAgICAgICB8ICAgMjMgKwogLi4uL2hhbmRsZV9jb250 cmFjdF92aW9sYXRpb24uY3BwICAgICAgICAgICAgIHwgICAyNiArCiAuLi4vZysrLmRnL2NvbnRy YWN0cy9jb250cmFjdHMtYWNjZXNzMS5DICAgICAgfCAgMTI4ICsKIC4uLi9nKysuZGcvY29udHJh Y3RzL2NvbnRyYWN0cy1hc3N1bWUxLkMgICAgICB8ICAgMzAgKwogLi4uL2crKy5kZy9jb250cmFj dHMvY29udHJhY3RzLWFzc3VtZTIuQyAgICAgIHwgICAzNCArCiAuLi4vZysrLmRnL2NvbnRyYWN0 cy9jb250cmFjdHMtYXNzdW1lMy5DICAgICAgfCAgIDE5ICsKIC4uLi9nKysuZGcvY29udHJhY3Rz L2NvbnRyYWN0cy1hc3N1bWU0LkMgICAgICB8ICAgMTkgKwogLi4uL2crKy5kZy9jb250cmFjdHMv Y29udHJhY3RzLWFzc3VtZTUuQyAgICAgIHwgICAzNCArCiAuLi4vZysrLmRnL2NvbnRyYWN0cy9j b250cmFjdHMtYXNzdW1lNi5DICAgICAgfCAgIDYxICsKIC4uLi9nKysuZGcvY29udHJhY3RzL2Nv bnRyYWN0cy1jb21kYXQxLkMgICAgICB8ICAgMTkgKwogLi4uL2crKy5kZy9jb250cmFjdHMvY29u dHJhY3RzLWNvbmZpZzEuQyAgICAgIHwgICAzNiArCiAuLi4vZysrLmRnL2NvbnRyYWN0cy9jb250 cmFjdHMtY29uc3RleHByMS5DICAgfCAgIDc0ICsKIC4uLi9nKysuZGcvY29udHJhY3RzL2NvbnRy YWN0cy1jb25zdGV4cHIyLkMgICB8ICAgNTggKwogLi4uL2crKy5kZy9jb250cmFjdHMvY29udHJh Y3RzLWNvbnN0ZXhwcjMuQyAgIHwgICAxMCArCiAuLi4vZysrLmRnL2NvbnRyYWN0cy9jb250cmFj dHMtY29udmVyc2lvbjEuQyAgfCAgIDE5ICsKIC4uLi9nKysuZGcvY29udHJhY3RzL2NvbnRyYWN0 cy1jdG9yLWR0b3IxLkMgICB8ICAxNzcgKysKIC4uLi9nKysuZGcvY29udHJhY3RzL2NvbnRyYWN0 cy1jdG9yLWR0b3IyLkMgICB8ICAgMzUgKwogLi4uL2crKy5kZy9jb250cmFjdHMvY29udHJhY3Rz LWN2MS5DICAgICAgICAgIHwgICAzNyArCiAuLi4vZysrLmRnL2NvbnRyYWN0cy9jb250cmFjdHMt ZGVkdWNlZDEuQyAgICAgfCAgMTA4ICsKIC4uLi9nKysuZGcvY29udHJhY3RzL2NvbnRyYWN0cy1k ZWR1Y2VkMi5DICAgICB8ICAgODQgKwogLi4uL2crKy5kZy9jb250cmFjdHMvY29udHJhY3RzLWZy aWVuZDEuQyAgICAgIHwgICA0MCArCiAuLi4vZysrLmRnL2NvbnRyYWN0cy9jb250cmFjdHMtZnQx LkMgICAgICAgICAgfCAgIDE0ICsKIC4uLi9nKysuZGcvY29udHJhY3RzL2NvbnRyYWN0cy1pZ25v cmUxLkMgICAgICB8ICAgMzAgKwogLi4uL2crKy5kZy9jb250cmFjdHMvY29udHJhY3RzLWlnbm9y ZTIuQyAgICAgIHwgICAyNiArCiAuLi4vZysrLmRnL2NvbnRyYWN0cy9jb250cmFjdHMtbGFyZ2Ut cmV0dXJuLkMgfCAgIDE1ICsKIC4uLi9nKysuZGcvY29udHJhY3RzL2NvbnRyYWN0cy1tdWx0aWxp bmUxLkMgICB8ICAgMTkgKwogLi4uL2NvbnRyYWN0cy1tdWx0aXBsZS1pbmhlcml0YW5jZTEuQyAg ICAgICAgIHwgICAxNSArCiAuLi4vY29udHJhY3RzLW11bHRpcGxlLWluaGVyaXRhbmNlMi5DICAg ICAgICAgfCAgIDMzICsKIC4uLi9jb250cmFjdHMvY29udHJhY3RzLW5lc3RlZC1jbGFzczEuQyAg ICAgICB8ICAgMjQgKwogLi4uL2NvbnRyYWN0cy9jb250cmFjdHMtbmVzdGVkLWNsYXNzMi5DICAg ICAgIHwgICA0MCArCiAuLi4vZysrLmRnL2NvbnRyYWN0cy9jb250cmFjdHMtbm9jb3B5MS5DICAg ICAgfCAgIDI0ICsKIC4uLi9nKysuZGcvY29udHJhY3RzL2NvbnRyYWN0cy1vdmVycmlkZS5DICAg ICB8ICAgNDMgKwogLi4uL2crKy5kZy9jb250cmFjdHMvY29udHJhY3RzLXBvc3QxLkMgICAgICAg IHwgICA3NCArCiAuLi4vZysrLmRnL2NvbnRyYWN0cy9jb250cmFjdHMtcG9zdDIuQyAgICAgICAg fCAgIDEzICsKIC4uLi9nKysuZGcvY29udHJhY3RzL2NvbnRyYWN0cy1wb3N0My5DICAgICAgICB8 ICAgMTUgKwogLi4uL2crKy5kZy9jb250cmFjdHMvY29udHJhY3RzLXBvc3Q0LkMgICAgICAgIHwg ICAzNiArCiAuLi4vZysrLmRnL2NvbnRyYWN0cy9jb250cmFjdHMtcG9zdDUuQyAgICAgICAgfCAg IDE5ICsKIC4uLi9nKysuZGcvY29udHJhY3RzL2NvbnRyYWN0cy1wb3N0Ni5DICAgICAgICB8ICAg MzAgKwogLi4uL2crKy5kZy9jb250cmFjdHMvY29udHJhY3RzLXByZTEuQyAgICAgICAgIHwgICAz NiArCiAuLi4vZysrLmRnL2NvbnRyYWN0cy9jb250cmFjdHMtcHJlMTAuQyAgICAgICAgfCAgMTkw ICsrCiAuLi4vZysrLmRnL2NvbnRyYWN0cy9jb250cmFjdHMtcHJlMi5DICAgICAgICAgfCAgMjEy ICsrCiAuLi4vZysrLmRnL2NvbnRyYWN0cy9jb250cmFjdHMtcHJlMmExLkMgICAgICAgfCAgIDMz ICsKIC4uLi9nKysuZGcvY29udHJhY3RzL2NvbnRyYWN0cy1wcmUyYTIuQyAgICAgICB8ICAgMjIg KwogLi4uL2crKy5kZy9jb250cmFjdHMvY29udHJhY3RzLXByZTMuQyAgICAgICAgIHwgIDUyNSAr KysrCiAuLi4vZysrLmRnL2NvbnRyYWN0cy9jb250cmFjdHMtcHJlNC5DICAgICAgICAgfCAgIDky ICsKIC4uLi9nKysuZGcvY29udHJhY3RzL2NvbnRyYWN0cy1wcmU1LkMgICAgICAgICB8ICAgODEg KwogLi4uL2crKy5kZy9jb250cmFjdHMvY29udHJhY3RzLXByZTYuQyAgICAgICAgIHwgICA3NCAr CiAuLi4vZysrLmRnL2NvbnRyYWN0cy9jb250cmFjdHMtcHJlNy5DICAgICAgICAgfCAgMTM0ICsK IC4uLi9nKysuZGcvY29udHJhY3RzL2NvbnRyYWN0cy1wcmU5LkMgICAgICAgICB8ICAxNDYgKysK IC4uLi9nKysuZGcvY29udHJhY3RzL2NvbnRyYWN0cy1yZWRlY2wxLkMgICAgICB8ICAxNDkgKysK IC4uLi9nKysuZGcvY29udHJhY3RzL2NvbnRyYWN0cy1yZWRlY2wyLkMgICAgICB8ICAxNDkgKysK IC4uLi9nKysuZGcvY29udHJhY3RzL2NvbnRyYWN0cy1yZWRlY2wzLkMgICAgICB8ICAxOTUgKysK IC4uLi9nKysuZGcvY29udHJhY3RzL2NvbnRyYWN0cy1yZWRlY2w0LkMgICAgICB8ICAgNTYgKwog Li4uL2crKy5kZy9jb250cmFjdHMvY29udHJhY3RzLXJlZGVjbDUuQyAgICAgIHwgIDEwMSArCiAu Li4vZysrLmRnL2NvbnRyYWN0cy9jb250cmFjdHMtcmVkZWNsNi5DICAgICAgfCAgMTk1ICsrCiAu Li4vZysrLmRnL2NvbnRyYWN0cy9jb250cmFjdHMtcmVkZWNsNy5DICAgICAgfCAgIDk1ICsKIC4u Li9nKysuZGcvY29udHJhY3RzL2NvbnRyYWN0cy1yZWRlY2w4LkMgICAgICB8ICAgNjQgKwogLi4u L2crKy5kZy9jb250cmFjdHMvY29udHJhY3RzLXRtcGwtYXR0cjEuQyAgIHwgICAxOSArCiAuLi4v ZysrLmRnL2NvbnRyYWN0cy9jb250cmFjdHMtdG1wbC1zcGVjMS5DICAgfCAgMTIxICsKIC4uLi9n KysuZGcvY29udHJhY3RzL2NvbnRyYWN0cy10bXBsLXNwZWMyLkMgICB8ICAzOTUgKysrCiAuLi4v ZysrLmRnL2NvbnRyYWN0cy9jb250cmFjdHMtdG1wbC1zcGVjMy5DICAgfCAgIDQ1ICsKIGdjYy90 ZXN0c3VpdGUvZysrLmRnL2NvbnRyYWN0cy9jb250cmFjdHMxLkMgICB8ICAgNDkgKwogZ2NjL3Rl c3RzdWl0ZS9nKysuZGcvY29udHJhY3RzL2NvbnRyYWN0czEwLkMgIHwgICA3MyArCiBnY2MvdGVz dHN1aXRlL2crKy5kZy9jb250cmFjdHMvY29udHJhY3RzMTEuQyAgfCAgMTAzICsKIGdjYy90ZXN0 c3VpdGUvZysrLmRnL2NvbnRyYWN0cy9jb250cmFjdHMxMi5DICB8ICAgMTUgKwogZ2NjL3Rlc3Rz dWl0ZS9nKysuZGcvY29udHJhY3RzL2NvbnRyYWN0czEzLkMgIHwgICA1MSArCiBnY2MvdGVzdHN1 aXRlL2crKy5kZy9jb250cmFjdHMvY29udHJhY3RzMTQuQyAgfCAgIDU4ICsKIGdjYy90ZXN0c3Vp dGUvZysrLmRnL2NvbnRyYWN0cy9jb250cmFjdHMxNS5DICB8ICAgNTYgKwogZ2NjL3Rlc3RzdWl0 ZS9nKysuZGcvY29udHJhY3RzL2NvbnRyYWN0czE2LkMgIHwgICAzNCArCiBnY2MvdGVzdHN1aXRl L2crKy5kZy9jb250cmFjdHMvY29udHJhY3RzMTcuQyAgfCAgIDM1ICsKIGdjYy90ZXN0c3VpdGUv ZysrLmRnL2NvbnRyYWN0cy9jb250cmFjdHMxOC5DICB8ICAgMTUgKwogZ2NjL3Rlc3RzdWl0ZS9n KysuZGcvY29udHJhY3RzL2NvbnRyYWN0czE5LkMgIHwgICAxOSArCiBnY2MvdGVzdHN1aXRlL2cr Ky5kZy9jb250cmFjdHMvY29udHJhY3RzMi5DICAgfCAgIDEzICsKIGdjYy90ZXN0c3VpdGUvZysr LmRnL2NvbnRyYWN0cy9jb250cmFjdHMyMC5DICB8ICAgMTEgKwogZ2NjL3Rlc3RzdWl0ZS9nKysu ZGcvY29udHJhY3RzL2NvbnRyYWN0czIyLkMgIHwgICAzMiArCiBnY2MvdGVzdHN1aXRlL2crKy5k Zy9jb250cmFjdHMvY29udHJhY3RzMjQuQyAgfCAgIDE1ICsKIGdjYy90ZXN0c3VpdGUvZysrLmRn L2NvbnRyYWN0cy9jb250cmFjdHMyNS5DICB8ICAgNTcgKwogZ2NjL3Rlc3RzdWl0ZS9nKysuZGcv Y29udHJhY3RzL2NvbnRyYWN0czMuQyAgIHwgICAxMyArCiBnY2MvdGVzdHN1aXRlL2crKy5kZy9j b250cmFjdHMvY29udHJhY3RzMzUuQyAgfCAgIDQ3ICsKIGdjYy90ZXN0c3VpdGUvZysrLmRnL2Nv bnRyYWN0cy9jb250cmFjdHM0LkMgICB8ICAgMTEgKwogZ2NjL3Rlc3RzdWl0ZS9nKysuZGcvY29u dHJhY3RzL2NvbnRyYWN0czUuQyAgIHwgICAxMyArCiBnY2MvdGVzdHN1aXRlL2crKy5kZy9jb250 cmFjdHMvY29udHJhY3RzNi5DICAgfCAgIDExICsKIGdjYy90ZXN0c3VpdGUvZysrLmRnL2NvbnRy YWN0cy9jb250cmFjdHM3LkMgICB8ICAgMTQgKwogZ2NjL3Rlc3RzdWl0ZS9nKysuZGcvY29udHJh Y3RzL2NvbnRyYWN0czguQyAgIHwgICA0MyArCiBnY2MvdGVzdHN1aXRlL2crKy5kZy9jb250cmFj dHMvY29udHJhY3RzOS5DICAgfCAgIDQ1ICsKIC4uLi9leGNlcHRfcHJlbG9hZF9oYW5kbGVyL2Fz c2VydF9mYWlsLmNwcCAgICB8ICAgMjAgKwogLi4uL2hhbmRsZV9jb250cmFjdF92aW9sYXRpb24u Y3BwICAgICAgICAgICAgIHwgICAxNCArCiAuLi4vbm9leGNlcHRfcHJlbG9hZF9oYW5kbGVyL2Fz c2VydF9mYWlsLmNwcCAgfCAgIDIwICsKIC4uLi9oYW5kbGVfY29udHJhY3RfdmlvbGF0aW9uLmNw cCAgICAgICAgICAgICB8ICAgMTQgKwogLi4uL2NvbnRyYWN0cy9wcmVsb2FkX2hhbmRsZXIvYXNz ZXJ0X2ZhaWwuY3BwIHwgICAgNyArCiAuLi4vaGFuZGxlX2NvbnRyYWN0X3Zpb2xhdGlvbi5jcHAg ICAgICAgICAgICAgfCAgIDE1ICsKIC4uLi9hc3NlcnRfZmFpbC5jcHAgICAgICAgICAgICAgICAg ICAgICAgICAgICB8ICAgMTAgKwogLi4uL2hhbmRsZV9jb250cmFjdF92aW9sYXRpb24uY3BwICAg ICAgICAgICAgIHwgICAxMyArCiAuLi4vcHJlbG9hZF9ub2NvbnRpbnVlX2hhbmRsZXIvbm9jb250 aW51ZS5jcHAgfCAgIDE5ICsKIGdjYy90ZXN0c3VpdGUvZysrLmRnL21vZHVsZXMvY29udHJhY3Rz LTFfYS5DICB8ICAgNDYgKwogZ2NjL3Rlc3RzdWl0ZS9nKysuZGcvbW9kdWxlcy9jb250cmFjdHMt MV9iLkMgIHwgICAzMyArCiBnY2MvdGVzdHN1aXRlL2crKy5kZy9tb2R1bGVzL2NvbnRyYWN0cy0y X2EuQyAgfCAgIDQ5ICsKIGdjYy90ZXN0c3VpdGUvZysrLmRnL21vZHVsZXMvY29udHJhY3RzLTJf Yi5DICB8ICAgMzUgKwogZ2NjL3Rlc3RzdWl0ZS9nKysuZGcvbW9kdWxlcy9jb250cmFjdHMtMl9j LkMgIHwgICAyMiArCiBnY2MvdGVzdHN1aXRlL2crKy5kZy9tb2R1bGVzL2NvbnRyYWN0cy0zX2Eu QyAgfCAgIDQxICsKIGdjYy90ZXN0c3VpdGUvZysrLmRnL21vZHVsZXMvY29udHJhY3RzLTNfYi5D ICB8ICAgMzUgKwogZ2NjL3Rlc3RzdWl0ZS9nKysuZGcvbW9kdWxlcy9jb250cmFjdHMtNF9hLkMg IHwgICAyOCArCiBnY2MvdGVzdHN1aXRlL2crKy5kZy9tb2R1bGVzL2NvbnRyYWN0cy00X2IuQyAg fCAgICA4ICsKIGdjYy90ZXN0c3VpdGUvZysrLmRnL21vZHVsZXMvY29udHJhY3RzLTRfYy5DICB8 ICAgIDkgKwogZ2NjL3Rlc3RzdWl0ZS9nKysuZGcvbW9kdWxlcy9jb250cmFjdHMtNF9kLkMgIHwg ICAyMiArCiAuLi4vZysrLmRnL21vZHVsZXMvY29udHJhY3RzLXRwbC1mcmllbmQtMV9hLkMgfCAg IDE3ICsKIC4uLi9nKysuZGcvbW9kdWxlcy9jb250cmFjdHMtdHBsLWZyaWVuZC0xX2IuQyB8ICAg MTkgKwogZ2NjL2NwL01ha2UtbGFuZy5pbiAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAg MiArLQogZ2NjL2NwL2NvbmZpZy1sYW5nLmluICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAg MSArCiBnY2MvY3AvY3AtdHJlZS5kZWYgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgIDEx ICsKIC4uLi9jb250cmFjdHMvYmFja3RyYWNlX2hhbmRsZXIvTWFrZWZpbGUgICAgICB8ICAgMTMg KwogLi4uL2crKy5kZy9jb250cmFjdHMvYmFja3RyYWNlX2hhbmRsZXIvUkVBRE1FIHwgICAxMiAr CiAuLi4vYmFja3RyYWNlX2hhbmRsZXIvZXhhbXBsZV9vdXQudHh0ICAgICAgICAgfCAgIDEyICsK IC4uLi9iYWNrdHJhY2VfaGFuZGxlci9leGFtcGxlX3ByZXR0eS50eHQgICAgICB8ICAgIDggKwog Li4uL2JhY2t0cmFjZV9oYW5kbGVyL3ByZXR0eXRyYWNlLnNoICAgICAgICAgIHwgICAzMCArCiAu Li4vY29udHJhY3RzL2V4Y2VwdF9wcmVsb2FkX2hhbmRsZXIvTWFrZWZpbGUgfCAgIDEzICsKIC4u Li9jb250cmFjdHMvZXhjZXB0X3ByZWxvYWRfaGFuZGxlci9SRUFETUUgICB8ICAgMTMgKwogLi4u L25vZXhjZXB0X3ByZWxvYWRfaGFuZGxlci9NYWtlZmlsZSAgICAgICAgIHwgICAxMyArCiAuLi4v Y29udHJhY3RzL25vZXhjZXB0X3ByZWxvYWRfaGFuZGxlci9SRUFETUUgfCAgIDE1ICsKIC4uLi9n KysuZGcvY29udHJhY3RzL3ByZWxvYWRfaGFuZGxlci9NYWtlZmlsZSB8ICAgMTMgKwogLi4uL2cr Ky5kZy9jb250cmFjdHMvcHJlbG9hZF9oYW5kbGVyL1JFQURNRSAgIHwgICAgMiArCiAuLi4vcHJl bG9hZF9ub2NvbnRpbnVlX2hhbmRsZXIvTWFrZWZpbGUgICAgICAgfCAgIDIzICsKIC4uLi9wcmVs b2FkX25vY29udGludWVfaGFuZGxlci9SRUFETUUgICAgICAgICB8ICAgMjMgKwogZ2NjL3Rlc3Rz dWl0ZS9nKysuZGcvbW9kdWxlcy9tb2R1bGVzLmV4cCAgICAgIHwgICAgOSArLQogZ2NjL3Rlc3Rz dWl0ZS9saWIvZysrLmV4cCAgICAgICAgICAgICAgICAgICAgIHwgICAgNCArCiAxNDcgZmlsZXMg Y2hhbmdlZCwgMTAwNzEgaW5zZXJ0aW9ucygrKSwgNjYgZGVsZXRpb25zKC0pCiBjcmVhdGUgbW9k ZSAxMDA2NDQgZ2NjL2NwL2NvbnRyYWN0cy5oCiBjcmVhdGUgbW9kZSAxMDA2NDQgZ2NjL2NwL2Nv bnRyYWN0cy5jYwogY3JlYXRlIG1vZGUgMTAwNjQ0IGdjYy90ZXN0c3VpdGUvZysrLmRnL2NvbnRy YWN0cy9iYWNrdHJhY2VfaGFuZGxlci9hc3NlcnRfZmFpbC5jcHAKIGNyZWF0ZSBtb2RlIDEwMDY0 NCBnY2MvdGVzdHN1aXRlL2crKy5kZy9jb250cmFjdHMvYmFja3RyYWNlX2hhbmRsZXIvaGFuZGxl X2NvbnRyYWN0X3Zpb2xhdGlvbi5jcHAKIGNyZWF0ZSBtb2RlIDEwMDY0NCBnY2MvdGVzdHN1aXRl L2crKy5kZy9jb250cmFjdHMvY29udHJhY3RzLWFjY2VzczEuQwogY3JlYXRlIG1vZGUgMTAwNjQ0 IGdjYy90ZXN0c3VpdGUvZysrLmRnL2NvbnRyYWN0cy9jb250cmFjdHMtYXNzdW1lMS5DCiBjcmVh dGUgbW9kZSAxMDA2NDQgZ2NjL3Rlc3RzdWl0ZS9nKysuZGcvY29udHJhY3RzL2NvbnRyYWN0cy1h c3N1bWUyLkMKIGNyZWF0ZSBtb2RlIDEwMDY0NCBnY2MvdGVzdHN1aXRlL2crKy5kZy9jb250cmFj dHMvY29udHJhY3RzLWFzc3VtZTMuQwogY3JlYXRlIG1vZGUgMTAwNjQ0IGdjYy90ZXN0c3VpdGUv ZysrLmRnL2NvbnRyYWN0cy9jb250cmFjdHMtYXNzdW1lNC5DCiBjcmVhdGUgbW9kZSAxMDA2NDQg Z2NjL3Rlc3RzdWl0ZS9nKysuZGcvY29udHJhY3RzL2NvbnRyYWN0cy1hc3N1bWU1LkMKIGNyZWF0 ZSBtb2RlIDEwMDY0NCBnY2MvdGVzdHN1aXRlL2crKy5kZy9jb250cmFjdHMvY29udHJhY3RzLWFz c3VtZTYuQwogY3JlYXRlIG1vZGUgMTAwNjQ0IGdjYy90ZXN0c3VpdGUvZysrLmRnL2NvbnRyYWN0 cy9jb250cmFjdHMtY29tZGF0MS5DCiBjcmVhdGUgbW9kZSAxMDA2NDQgZ2NjL3Rlc3RzdWl0ZS9n KysuZGcvY29udHJhY3RzL2NvbnRyYWN0cy1jb25maWcxLkMKIGNyZWF0ZSBtb2RlIDEwMDY0NCBn Y2MvdGVzdHN1aXRlL2crKy5kZy9jb250cmFjdHMvY29udHJhY3RzLWNvbnN0ZXhwcjEuQwogY3Jl YXRlIG1vZGUgMTAwNjQ0IGdjYy90ZXN0c3VpdGUvZysrLmRnL2NvbnRyYWN0cy9jb250cmFjdHMt Y29uc3RleHByMi5DCiBjcmVhdGUgbW9kZSAxMDA2NDQgZ2NjL3Rlc3RzdWl0ZS9nKysuZGcvY29u dHJhY3RzL2NvbnRyYWN0cy1jb25zdGV4cHIzLkMKIGNyZWF0ZSBtb2RlIDEwMDY0NCBnY2MvdGVz dHN1aXRlL2crKy5kZy9jb250cmFjdHMvY29udHJhY3RzLWNvbnZlcnNpb24xLkMKIGNyZWF0ZSBt b2RlIDEwMDY0NCBnY2MvdGVzdHN1aXRlL2crKy5kZy9jb250cmFjdHMvY29udHJhY3RzLWN0b3It ZHRvcjEuQwogY3JlYXRlIG1vZGUgMTAwNjQ0IGdjYy90ZXN0c3VpdGUvZysrLmRnL2NvbnRyYWN0 cy9jb250cmFjdHMtY3Rvci1kdG9yMi5DCiBjcmVhdGUgbW9kZSAxMDA2NDQgZ2NjL3Rlc3RzdWl0 ZS9nKysuZGcvY29udHJhY3RzL2NvbnRyYWN0cy1jdjEuQwogY3JlYXRlIG1vZGUgMTAwNjQ0IGdj Yy90ZXN0c3VpdGUvZysrLmRnL2NvbnRyYWN0cy9jb250cmFjdHMtZGVkdWNlZDEuQwogY3JlYXRl IG1vZGUgMTAwNjQ0IGdjYy90ZXN0c3VpdGUvZysrLmRnL2NvbnRyYWN0cy9jb250cmFjdHMtZGVk dWNlZDIuQwogY3JlYXRlIG1vZGUgMTAwNjQ0IGdjYy90ZXN0c3VpdGUvZysrLmRnL2NvbnRyYWN0 cy9jb250cmFjdHMtZnJpZW5kMS5DCiBjcmVhdGUgbW9kZSAxMDA2NDQgZ2NjL3Rlc3RzdWl0ZS9n KysuZGcvY29udHJhY3RzL2NvbnRyYWN0cy1mdDEuQwogY3JlYXRlIG1vZGUgMTAwNjQ0IGdjYy90 ZXN0c3VpdGUvZysrLmRnL2NvbnRyYWN0cy9jb250cmFjdHMtaWdub3JlMS5DCiBjcmVhdGUgbW9k ZSAxMDA2NDQgZ2NjL3Rlc3RzdWl0ZS9nKysuZGcvY29udHJhY3RzL2NvbnRyYWN0cy1pZ25vcmUy LkMKIGNyZWF0ZSBtb2RlIDEwMDY0NCBnY2MvdGVzdHN1aXRlL2crKy5kZy9jb250cmFjdHMvY29u dHJhY3RzLWxhcmdlLXJldHVybi5DCiBjcmVhdGUgbW9kZSAxMDA2NDQgZ2NjL3Rlc3RzdWl0ZS9n KysuZGcvY29udHJhY3RzL2NvbnRyYWN0cy1tdWx0aWxpbmUxLkMKIGNyZWF0ZSBtb2RlIDEwMDY0 NCBnY2MvdGVzdHN1aXRlL2crKy5kZy9jb250cmFjdHMvY29udHJhY3RzLW11bHRpcGxlLWluaGVy aXRhbmNlMS5DCiBjcmVhdGUgbW9kZSAxMDA2NDQgZ2NjL3Rlc3RzdWl0ZS9nKysuZGcvY29udHJh Y3RzL2NvbnRyYWN0cy1tdWx0aXBsZS1pbmhlcml0YW5jZTIuQwogY3JlYXRlIG1vZGUgMTAwNjQ0 IGdjYy90ZXN0c3VpdGUvZysrLmRnL2NvbnRyYWN0cy9jb250cmFjdHMtbmVzdGVkLWNsYXNzMS5D CiBjcmVhdGUgbW9kZSAxMDA2NDQgZ2NjL3Rlc3RzdWl0ZS9nKysuZGcvY29udHJhY3RzL2NvbnRy YWN0cy1uZXN0ZWQtY2xhc3MyLkMKIGNyZWF0ZSBtb2RlIDEwMDY0NCBnY2MvdGVzdHN1aXRlL2cr Ky5kZy9jb250cmFjdHMvY29udHJhY3RzLW5vY29weTEuQwogY3JlYXRlIG1vZGUgMTAwNjQ0IGdj Yy90ZXN0c3VpdGUvZysrLmRnL2NvbnRyYWN0cy9jb250cmFjdHMtb3ZlcnJpZGUuQwogY3JlYXRl IG1vZGUgMTAwNjQ0IGdjYy90ZXN0c3VpdGUvZysrLmRnL2NvbnRyYWN0cy9jb250cmFjdHMtcG9z dDEuQwogY3JlYXRlIG1vZGUgMTAwNjQ0IGdjYy90ZXN0c3VpdGUvZysrLmRnL2NvbnRyYWN0cy9j b250cmFjdHMtcG9zdDIuQwogY3JlYXRlIG1vZGUgMTAwNjQ0IGdjYy90ZXN0c3VpdGUvZysrLmRn L2NvbnRyYWN0cy9jb250cmFjdHMtcG9zdDMuQwogY3JlYXRlIG1vZGUgMTAwNjQ0IGdjYy90ZXN0 c3VpdGUvZysrLmRnL2NvbnRyYWN0cy9jb250cmFjdHMtcG9zdDQuQwogY3JlYXRlIG1vZGUgMTAw NjQ0IGdjYy90ZXN0c3VpdGUvZysrLmRnL2NvbnRyYWN0cy9jb250cmFjdHMtcG9zdDUuQwogY3Jl YXRlIG1vZGUgMTAwNjQ0IGdjYy90ZXN0c3VpdGUvZysrLmRnL2NvbnRyYWN0cy9jb250cmFjdHMt cG9zdDYuQwogY3JlYXRlIG1vZGUgMTAwNjQ0IGdjYy90ZXN0c3VpdGUvZysrLmRnL2NvbnRyYWN0 cy9jb250cmFjdHMtcHJlMS5DCiBjcmVhdGUgbW9kZSAxMDA2NDQgZ2NjL3Rlc3RzdWl0ZS9nKysu ZGcvY29udHJhY3RzL2NvbnRyYWN0cy1wcmUxMC5DCiBjcmVhdGUgbW9kZSAxMDA2NDQgZ2NjL3Rl c3RzdWl0ZS9nKysuZGcvY29udHJhY3RzL2NvbnRyYWN0cy1wcmUyLkMKIGNyZWF0ZSBtb2RlIDEw MDY0NCBnY2MvdGVzdHN1aXRlL2crKy5kZy9jb250cmFjdHMvY29udHJhY3RzLXByZTJhMS5DCiBj cmVhdGUgbW9kZSAxMDA2NDQgZ2NjL3Rlc3RzdWl0ZS9nKysuZGcvY29udHJhY3RzL2NvbnRyYWN0 cy1wcmUyYTIuQwogY3JlYXRlIG1vZGUgMTAwNjQ0IGdjYy90ZXN0c3VpdGUvZysrLmRnL2NvbnRy YWN0cy9jb250cmFjdHMtcHJlMy5DCiBjcmVhdGUgbW9kZSAxMDA2NDQgZ2NjL3Rlc3RzdWl0ZS9n KysuZGcvY29udHJhY3RzL2NvbnRyYWN0cy1wcmU0LkMKIGNyZWF0ZSBtb2RlIDEwMDY0NCBnY2Mv dGVzdHN1aXRlL2crKy5kZy9jb250cmFjdHMvY29udHJhY3RzLXByZTUuQwogY3JlYXRlIG1vZGUg MTAwNjQ0IGdjYy90ZXN0c3VpdGUvZysrLmRnL2NvbnRyYWN0cy9jb250cmFjdHMtcHJlNi5DCiBj cmVhdGUgbW9kZSAxMDA2NDQgZ2NjL3Rlc3RzdWl0ZS9nKysuZGcvY29udHJhY3RzL2NvbnRyYWN0 cy1wcmU3LkMKIGNyZWF0ZSBtb2RlIDEwMDY0NCBnY2MvdGVzdHN1aXRlL2crKy5kZy9jb250cmFj dHMvY29udHJhY3RzLXByZTkuQwogY3JlYXRlIG1vZGUgMTAwNjQ0IGdjYy90ZXN0c3VpdGUvZysr LmRnL2NvbnRyYWN0cy9jb250cmFjdHMtcmVkZWNsMS5DCiBjcmVhdGUgbW9kZSAxMDA2NDQgZ2Nj L3Rlc3RzdWl0ZS9nKysuZGcvY29udHJhY3RzL2NvbnRyYWN0cy1yZWRlY2wyLkMKIGNyZWF0ZSBt b2RlIDEwMDY0NCBnY2MvdGVzdHN1aXRlL2crKy5kZy9jb250cmFjdHMvY29udHJhY3RzLXJlZGVj bDMuQwogY3JlYXRlIG1vZGUgMTAwNjQ0IGdjYy90ZXN0c3VpdGUvZysrLmRnL2NvbnRyYWN0cy9j b250cmFjdHMtcmVkZWNsNC5DCiBjcmVhdGUgbW9kZSAxMDA2NDQgZ2NjL3Rlc3RzdWl0ZS9nKysu ZGcvY29udHJhY3RzL2NvbnRyYWN0cy1yZWRlY2w1LkMKIGNyZWF0ZSBtb2RlIDEwMDY0NCBnY2Mv dGVzdHN1aXRlL2crKy5kZy9jb250cmFjdHMvY29udHJhY3RzLXJlZGVjbDYuQwogY3JlYXRlIG1v ZGUgMTAwNjQ0IGdjYy90ZXN0c3VpdGUvZysrLmRnL2NvbnRyYWN0cy9jb250cmFjdHMtcmVkZWNs Ny5DCiBjcmVhdGUgbW9kZSAxMDA2NDQgZ2NjL3Rlc3RzdWl0ZS9nKysuZGcvY29udHJhY3RzL2Nv bnRyYWN0cy1yZWRlY2w4LkMKIGNyZWF0ZSBtb2RlIDEwMDY0NCBnY2MvdGVzdHN1aXRlL2crKy5k Zy9jb250cmFjdHMvY29udHJhY3RzLXRtcGwtYXR0cjEuQwogY3JlYXRlIG1vZGUgMTAwNjQ0IGdj Yy90ZXN0c3VpdGUvZysrLmRnL2NvbnRyYWN0cy9jb250cmFjdHMtdG1wbC1zcGVjMS5DCiBjcmVh dGUgbW9kZSAxMDA2NDQgZ2NjL3Rlc3RzdWl0ZS9nKysuZGcvY29udHJhY3RzL2NvbnRyYWN0cy10 bXBsLXNwZWMyLkMKIGNyZWF0ZSBtb2RlIDEwMDY0NCBnY2MvdGVzdHN1aXRlL2crKy5kZy9jb250 cmFjdHMvY29udHJhY3RzLXRtcGwtc3BlYzMuQwogY3JlYXRlIG1vZGUgMTAwNjQ0IGdjYy90ZXN0 c3VpdGUvZysrLmRnL2NvbnRyYWN0cy9jb250cmFjdHMxLkMKIGNyZWF0ZSBtb2RlIDEwMDY0NCBn Y2MvdGVzdHN1aXRlL2crKy5kZy9jb250cmFjdHMvY29udHJhY3RzMTAuQwogY3JlYXRlIG1vZGUg MTAwNjQ0IGdjYy90ZXN0c3VpdGUvZysrLmRnL2NvbnRyYWN0cy9jb250cmFjdHMxMS5DCiBjcmVh dGUgbW9kZSAxMDA2NDQgZ2NjL3Rlc3RzdWl0ZS9nKysuZGcvY29udHJhY3RzL2NvbnRyYWN0czEy LkMKIGNyZWF0ZSBtb2RlIDEwMDY0NCBnY2MvdGVzdHN1aXRlL2crKy5kZy9jb250cmFjdHMvY29u dHJhY3RzMTMuQwogY3JlYXRlIG1vZGUgMTAwNjQ0IGdjYy90ZXN0c3VpdGUvZysrLmRnL2NvbnRy YWN0cy9jb250cmFjdHMxNC5DCiBjcmVhdGUgbW9kZSAxMDA2NDQgZ2NjL3Rlc3RzdWl0ZS9nKysu ZGcvY29udHJhY3RzL2NvbnRyYWN0czE1LkMKIGNyZWF0ZSBtb2RlIDEwMDY0NCBnY2MvdGVzdHN1 aXRlL2crKy5kZy9jb250cmFjdHMvY29udHJhY3RzMTYuQwogY3JlYXRlIG1vZGUgMTAwNjQ0IGdj Yy90ZXN0c3VpdGUvZysrLmRnL2NvbnRyYWN0cy9jb250cmFjdHMxNy5DCiBjcmVhdGUgbW9kZSAx MDA2NDQgZ2NjL3Rlc3RzdWl0ZS9nKysuZGcvY29udHJhY3RzL2NvbnRyYWN0czE4LkMKIGNyZWF0 ZSBtb2RlIDEwMDY0NCBnY2MvdGVzdHN1aXRlL2crKy5kZy9jb250cmFjdHMvY29udHJhY3RzMTku QwogY3JlYXRlIG1vZGUgMTAwNjQ0IGdjYy90ZXN0c3VpdGUvZysrLmRnL2NvbnRyYWN0cy9jb250 cmFjdHMyLkMKIGNyZWF0ZSBtb2RlIDEwMDY0NCBnY2MvdGVzdHN1aXRlL2crKy5kZy9jb250cmFj dHMvY29udHJhY3RzMjAuQwogY3JlYXRlIG1vZGUgMTAwNjQ0IGdjYy90ZXN0c3VpdGUvZysrLmRn L2NvbnRyYWN0cy9jb250cmFjdHMyMi5DCiBjcmVhdGUgbW9kZSAxMDA2NDQgZ2NjL3Rlc3RzdWl0 ZS9nKysuZGcvY29udHJhY3RzL2NvbnRyYWN0czI0LkMKIGNyZWF0ZSBtb2RlIDEwMDY0NCBnY2Mv dGVzdHN1aXRlL2crKy5kZy9jb250cmFjdHMvY29udHJhY3RzMjUuQwogY3JlYXRlIG1vZGUgMTAw NjQ0IGdjYy90ZXN0c3VpdGUvZysrLmRnL2NvbnRyYWN0cy9jb250cmFjdHMzLkMKIGNyZWF0ZSBt b2RlIDEwMDY0NCBnY2MvdGVzdHN1aXRlL2crKy5kZy9jb250cmFjdHMvY29udHJhY3RzMzUuQwog Y3JlYXRlIG1vZGUgMTAwNjQ0IGdjYy90ZXN0c3VpdGUvZysrLmRnL2NvbnRyYWN0cy9jb250cmFj dHM0LkMKIGNyZWF0ZSBtb2RlIDEwMDY0NCBnY2MvdGVzdHN1aXRlL2crKy5kZy9jb250cmFjdHMv Y29udHJhY3RzNS5DCiBjcmVhdGUgbW9kZSAxMDA2NDQgZ2NjL3Rlc3RzdWl0ZS9nKysuZGcvY29u dHJhY3RzL2NvbnRyYWN0czYuQwogY3JlYXRlIG1vZGUgMTAwNjQ0IGdjYy90ZXN0c3VpdGUvZysr LmRnL2NvbnRyYWN0cy9jb250cmFjdHM3LkMKIGNyZWF0ZSBtb2RlIDEwMDY0NCBnY2MvdGVzdHN1 aXRlL2crKy5kZy9jb250cmFjdHMvY29udHJhY3RzOC5DCiBjcmVhdGUgbW9kZSAxMDA2NDQgZ2Nj L3Rlc3RzdWl0ZS9nKysuZGcvY29udHJhY3RzL2NvbnRyYWN0czkuQwogY3JlYXRlIG1vZGUgMTAw NjQ0IGdjYy90ZXN0c3VpdGUvZysrLmRnL2NvbnRyYWN0cy9leGNlcHRfcHJlbG9hZF9oYW5kbGVy L2Fzc2VydF9mYWlsLmNwcAogY3JlYXRlIG1vZGUgMTAwNjQ0IGdjYy90ZXN0c3VpdGUvZysrLmRn L2NvbnRyYWN0cy9leGNlcHRfcHJlbG9hZF9oYW5kbGVyL2hhbmRsZV9jb250cmFjdF92aW9sYXRp b24uY3BwCiBjcmVhdGUgbW9kZSAxMDA2NDQgZ2NjL3Rlc3RzdWl0ZS9nKysuZGcvY29udHJhY3Rz L25vZXhjZXB0X3ByZWxvYWRfaGFuZGxlci9hc3NlcnRfZmFpbC5jcHAKIGNyZWF0ZSBtb2RlIDEw MDY0NCBnY2MvdGVzdHN1aXRlL2crKy5kZy9jb250cmFjdHMvbm9leGNlcHRfcHJlbG9hZF9oYW5k bGVyL2hhbmRsZV9jb250cmFjdF92aW9sYXRpb24uY3BwCiBjcmVhdGUgbW9kZSAxMDA2NDQgZ2Nj L3Rlc3RzdWl0ZS9nKysuZGcvY29udHJhY3RzL3ByZWxvYWRfaGFuZGxlci9hc3NlcnRfZmFpbC5j cHAKIGNyZWF0ZSBtb2RlIDEwMDY0NCBnY2MvdGVzdHN1aXRlL2crKy5kZy9jb250cmFjdHMvcHJl bG9hZF9oYW5kbGVyL2hhbmRsZV9jb250cmFjdF92aW9sYXRpb24uY3BwCiBjcmVhdGUgbW9kZSAx MDA2NDQgZ2NjL3Rlc3RzdWl0ZS9nKysuZGcvY29udHJhY3RzL3ByZWxvYWRfbm9jb250aW51ZV9o YW5kbGVyL2Fzc2VydF9mYWlsLmNwcAogY3JlYXRlIG1vZGUgMTAwNjQ0IGdjYy90ZXN0c3VpdGUv ZysrLmRnL2NvbnRyYWN0cy9wcmVsb2FkX25vY29udGludWVfaGFuZGxlci9oYW5kbGVfY29udHJh Y3RfdmlvbGF0aW9uLmNwcAogY3JlYXRlIG1vZGUgMTAwNjQ0IGdjYy90ZXN0c3VpdGUvZysrLmRn L2NvbnRyYWN0cy9wcmVsb2FkX25vY29udGludWVfaGFuZGxlci9ub2NvbnRpbnVlLmNwcAogY3Jl YXRlIG1vZGUgMTAwNjQ0IGdjYy90ZXN0c3VpdGUvZysrLmRnL21vZHVsZXMvY29udHJhY3RzLTFf YS5DCiBjcmVhdGUgbW9kZSAxMDA2NDQgZ2NjL3Rlc3RzdWl0ZS9nKysuZGcvbW9kdWxlcy9jb250 cmFjdHMtMV9iLkMKIGNyZWF0ZSBtb2RlIDEwMDY0NCBnY2MvdGVzdHN1aXRlL2crKy5kZy9tb2R1 bGVzL2NvbnRyYWN0cy0yX2EuQwogY3JlYXRlIG1vZGUgMTAwNjQ0IGdjYy90ZXN0c3VpdGUvZysr LmRnL21vZHVsZXMvY29udHJhY3RzLTJfYi5DCiBjcmVhdGUgbW9kZSAxMDA2NDQgZ2NjL3Rlc3Rz dWl0ZS9nKysuZGcvbW9kdWxlcy9jb250cmFjdHMtMl9jLkMKIGNyZWF0ZSBtb2RlIDEwMDY0NCBn Y2MvdGVzdHN1aXRlL2crKy5kZy9tb2R1bGVzL2NvbnRyYWN0cy0zX2EuQwogY3JlYXRlIG1vZGUg MTAwNjQ0IGdjYy90ZXN0c3VpdGUvZysrLmRnL21vZHVsZXMvY29udHJhY3RzLTNfYi5DCiBjcmVh dGUgbW9kZSAxMDA2NDQgZ2NjL3Rlc3RzdWl0ZS9nKysuZGcvbW9kdWxlcy9jb250cmFjdHMtNF9h LkMKIGNyZWF0ZSBtb2RlIDEwMDY0NCBnY2MvdGVzdHN1aXRlL2crKy5kZy9tb2R1bGVzL2NvbnRy YWN0cy00X2IuQwogY3JlYXRlIG1vZGUgMTAwNjQ0IGdjYy90ZXN0c3VpdGUvZysrLmRnL21vZHVs ZXMvY29udHJhY3RzLTRfYy5DCiBjcmVhdGUgbW9kZSAxMDA2NDQgZ2NjL3Rlc3RzdWl0ZS9nKysu ZGcvbW9kdWxlcy9jb250cmFjdHMtNF9kLkMKIGNyZWF0ZSBtb2RlIDEwMDY0NCBnY2MvdGVzdHN1 aXRlL2crKy5kZy9tb2R1bGVzL2NvbnRyYWN0cy10cGwtZnJpZW5kLTFfYS5DCiBjcmVhdGUgbW9k ZSAxMDA2NDQgZ2NjL3Rlc3RzdWl0ZS9nKysuZGcvbW9kdWxlcy9jb250cmFjdHMtdHBsLWZyaWVu ZC0xX2IuQwogY3JlYXRlIG1vZGUgMTAwNjQ0IGdjYy90ZXN0c3VpdGUvZysrLmRnL2NvbnRyYWN0 cy9iYWNrdHJhY2VfaGFuZGxlci9NYWtlZmlsZQogY3JlYXRlIG1vZGUgMTAwNjQ0IGdjYy90ZXN0 c3VpdGUvZysrLmRnL2NvbnRyYWN0cy9iYWNrdHJhY2VfaGFuZGxlci9SRUFETUUKIGNyZWF0ZSBt b2RlIDEwMDY0NCBnY2MvdGVzdHN1aXRlL2crKy5kZy9jb250cmFjdHMvYmFja3RyYWNlX2hhbmRs ZXIvZXhhbXBsZV9vdXQudHh0CiBjcmVhdGUgbW9kZSAxMDA2NDQgZ2NjL3Rlc3RzdWl0ZS9nKysu ZGcvY29udHJhY3RzL2JhY2t0cmFjZV9oYW5kbGVyL2V4YW1wbGVfcHJldHR5LnR4dAogY3JlYXRl IG1vZGUgMTAwNzU1IGdjYy90ZXN0c3VpdGUvZysrLmRnL2NvbnRyYWN0cy9iYWNrdHJhY2VfaGFu ZGxlci9wcmV0dHl0cmFjZS5zaAogY3JlYXRlIG1vZGUgMTAwNjQ0IGdjYy90ZXN0c3VpdGUvZysr LmRnL2NvbnRyYWN0cy9leGNlcHRfcHJlbG9hZF9oYW5kbGVyL01ha2VmaWxlCiBjcmVhdGUgbW9k ZSAxMDA2NDQgZ2NjL3Rlc3RzdWl0ZS9nKysuZGcvY29udHJhY3RzL2V4Y2VwdF9wcmVsb2FkX2hh bmRsZXIvUkVBRE1FCiBjcmVhdGUgbW9kZSAxMDA2NDQgZ2NjL3Rlc3RzdWl0ZS9nKysuZGcvY29u dHJhY3RzL25vZXhjZXB0X3ByZWxvYWRfaGFuZGxlci9NYWtlZmlsZQogY3JlYXRlIG1vZGUgMTAw NjQ0IGdjYy90ZXN0c3VpdGUvZysrLmRnL2NvbnRyYWN0cy9ub2V4Y2VwdF9wcmVsb2FkX2hhbmRs ZXIvUkVBRE1FCiBjcmVhdGUgbW9kZSAxMDA2NDQgZ2NjL3Rlc3RzdWl0ZS9nKysuZGcvY29udHJh Y3RzL3ByZWxvYWRfaGFuZGxlci9NYWtlZmlsZQogY3JlYXRlIG1vZGUgMTAwNjQ0IGdjYy90ZXN0 c3VpdGUvZysrLmRnL2NvbnRyYWN0cy9wcmVsb2FkX2hhbmRsZXIvUkVBRE1FCiBjcmVhdGUgbW9k ZSAxMDA2NDQgZ2NjL3Rlc3RzdWl0ZS9nKysuZGcvY29udHJhY3RzL3ByZWxvYWRfbm9jb250aW51 ZV9oYW5kbGVyL01ha2VmaWxlCiBjcmVhdGUgbW9kZSAxMDA2NDQgZ2NjL3Rlc3RzdWl0ZS9nKysu ZGcvY29udHJhY3RzL3ByZWxvYWRfbm9jb250aW51ZV9oYW5kbGVyL1JFQURNRQoKZGlmZiAtLWdp dCBhL2djYy9kb2MvaW52b2tlLnRleGkgYi9nY2MvZG9jL2ludm9rZS50ZXhpCmluZGV4IDBmNmEx ODMzZWYxLi4zMzBkYTZlYjVkNCAxMDA2NDQKLS0tIGEvZ2NjL2RvYy9pbnZva2UudGV4aQorKysg Yi9nY2MvZG9jL2ludm9rZS50ZXhpCkBAIC0zMTIxLDYgKzMxMjEsODUgQEAgb2YgYSBsb29wIHRv byBtYW55IGV4cHJlc3Npb25zIG5lZWQgdG8gYmUgZXZhbHVhdGVkLCB0aGUgcmVzdWx0aW5nIGNv bnN0ZXhwcgogZXZhbHVhdGlvbiBtaWdodCB0YWtlIHRvbyBsb25nLgogVGhlIGRlZmF1bHQgaXMg MzM1NTQ0MzIgKDE8PDI1KS4KIAorQGl0ZW0gLWZjb250cmFjdHMKK0BvcGluZGV4IGZjb250cmFj dHMKK0VuYWJsZSBleHBlcmltZW50YWwgc3VwcG9ydCBmb3IgdGhlIEMrKyBDb250cmFjdHMgZmVh dHVyZSwgYXMgYnJpZWZseQorYWRkZWQgdG8gYW5kIHRoZW4gcmVtb3ZlZCBmcm9tIHRoZSBDKysy MCB3b3JraW5nIHBhcGVyIChONDgyMCkuICBUaGUKK2ltcGxlbWVudGF0aW9uIGFsc28gaW5jbHVk ZXMgcHJvcG9zZWQgZW5oYW5jZW1lbnRzIGZyb20gcGFwZXJzIFAxMjkwLAorUDEzMzIsIGFuZCBQ MTQyOS4gIFRoaXMgZnVuY3Rpb25hbGl0eSBpcyBpbnRlbmRlZCBtb3N0bHkgZm9yIHRob3NlCitp bnRlcmVzdGVkIGluIGV4cGVyaW1lbnRhdGlvbiB0b3dhcmRzIHJlZmluaW5nIHRoZSBmZWF0dXJl IHRvIGdldCBpdAoraW50byBzaGFwZSBmb3IgYSBmdXR1cmUgQysrIHN0YW5kYXJkLgorCitPbiB2 aW9sYXRpb24gb2YgYSBjaGVja2VkIGNvbnRyYWN0LCB0aGUgdmlvbGF0aW9uIGhhbmRsZXIgaXMg Y2FsbGVkLgorVXNlcnMgY2FuIHJlcGxhY2UgdGhlIHZpb2xhdGlvbiBoYW5kbGVyIGJ5IGRlZmlu aW5nCitAc21hbGxleGFtcGxlCit2b2lkIGhhbmRsZV9jb250cmFjdF92aW9sYXRpb24gKGNvbnN0 IHN0ZDo6ZXhwZXJpbWVudGFsOjpjb250cmFjdF92aW9sYXRpb24mKTsKK0BlbmQgc21hbGxleGFt cGxlCisKK1RoZXJlIGFyZSBkaWZmZXJlbnQgc2V0cyBvZiBhZGRpdGlvbmFsIGZsYWdzIHRoYXQg Y2FuIGJlIHVzZWQgdG9nZXRoZXIKK3RvIHNwZWNpZnkgd2hpY2ggY29udHJhY3RzIHdpbGwgYmUg Y2hlY2tlZCBhbmQgaG93LCBmb3IgTjQ4MjAKK2NvbnRyYWN0cywgUDEzMzIgY29udHJhY3RzLCBv ciBQMTQyOSBjb250cmFjdHM7IHRoZXNlIHNldHMgY2Fubm90IGJlCit1c2VkIHRvZ2V0aGVyLgor CitAdGFibGUgQGdjY3RhYm9wdAorQGl0ZW0gLWZjb250cmFjdC1tb2RlPVtvbnxvZmZdCitAb3Bp bmRleCBmY29udHJhY3QtbW9kZQorQ29udHJvbCB3aGV0aGVyIGFueSBjb250cmFjdHMgaGF2ZSBh bnkgc2VtYW50aWNzIGF0IGFsbC4gIERlZmF1bHRzIHRvIG9uLgorCitAaXRlbSAtZmNvbnRyYWN0 LWFzc3VtcHRpb24tbW9kZT1bb258b2ZmXQorQG9waW5kZXggZmNvbnRyYWN0LWFzc3VtcHRpb24t bW9kZQorW040ODIwXSBDb250cm9sIHdoZXRoZXIgY29udHJhY3RzIHdpdGggbGV2ZWwgQHNhbXB7 YXhpb219CitzaG91bGQgaGF2ZSB0aGUgYXNzdW1lIHNlbWFudGljLiAgRGVmYXVsdHMgdG8gb24u CisKK0BpdGVtIC1mY29udHJhY3QtYnVpbGQtbGV2ZWw9W29mZnxkZWZhdWx0fGF1ZGl0XQorQG9w aW5kZXggZmNvbnRyYWN0LWJ1aWxkLWxldmVsCitbTjQ4MjBdIFNwZWNpZnkgd2hpY2ggbGV2ZWwg b2YgY29udHJhY3RzIHRvIGdlbmVyYXRlIGNoZWNrcworZm9yLiAgRGVmYXVsdHMgdG8gQHNhbXB7 ZGVmYXVsdH0uCisKK0BpdGVtIC1mY29udHJhY3QtY29udGludWF0aW9uLW1vZGU9W29ufG9mZl0K K0BvcGluZGV4IGZjb250cmFjdC1jb250aW51YXRpb24tbW9kZQorW040ODIwXSBDb250cm9sIHdo ZXRoZXIgdG8gYWxsb3cgdGhlIHByb2dyYW0gdG8gY29udGludWUgZXhlY3V0aW5nCithZnRlciBh IGNvbnRyYWN0IHZpb2xhdGlvbi4gIFRoYXQgaXMsIGRvIGNoZWNrZWQgY29udHJhY3RzIGhhdmUg dGhlCitAc2FtcHttYXliZX0gc2VtYW50aWMgZGVzY3JpYmVkIGJlbG93IHJhdGhlciB0aGFuIHRo ZSBAc2FtcHtuZXZlcn0KK3NlbWFudGljLiAgRGVmYXVsdHMgdG8gb2ZmLgorCitAaXRlbSAtZmNv bnRyYWN0LXJvbGU9PG5hbWU+OjxkZWZhdWx0Piw8YXVkaXQ+LDxheGlvbT4KK0BvcGluZGV4IGZj b250cmFjdC1yb2xlCitbUDEzMzJdIFNwZWNpZnkgdGhlIGNvbmNyZXRlIHNlbWFudGljcyBmb3Ig ZWFjaCBjb250cmFjdCBsZXZlbAorb2YgYSBwYXJ0aWN1bGFyIGNvbnRyYWN0IHJvbGUuCisKK0Bp dGVtIC1mY29udHJhY3Qtc2VtYW50aWM9W2RlZmF1bHR8YXVkaXR8YXhpb21dOjxzZW1hbnRpYz4K K1tQMTQyOV0gU3BlY2lmeSB0aGUgY29uY3JldGUgc2VtYW50aWMgZm9yIGEgcGFydGljdWxhcgor Y29udHJhY3QgbGV2ZWwuCisKK0BpdGVtIC1mY29udHJhY3Qtc3RyaWN0LWRlY2xhcmF0aW9ucz1b b258b2ZmXQorQG9waW5kZXggZmNvbnRyYWN0LXN0cmljdC1kZWNsYXJhdGlvbnMKK0NvbnRyb2wg d2hldGhlciB0byByZWplY3QgYWRkaW5nIGNvbnRyYWN0cyB0byBhIGZ1bmN0aW9uIGFmdGVyIGl0 cworZmlyc3QgZGVjbGFyYXRpb24uICBEZWZhdWx0cyB0byBvZmYuCitAZW5kIHRhYmxlCisKK1Ro ZSBwb3NzaWJsZSBjb25jcmV0ZSBzZW1hbnRpY3MgZm9yIHRoYXQgY2FuIGJlIHNwZWNpZmllZCB3 aXRoCitAc2FtcHstZmNvbnRyYWN0LXJvbGV9IG9yIEBzYW1wey1mY29udHJhY3Qtc2VtYW50aWN9 IGFyZToKKworQHRhYmxlIEBjb2RlCitAaXRlbSBpZ25vcmUKK1RoaXMgY29udHJhY3QgaGFzIG5v IGVmZmVjdC4KKworQGl0ZW0gYXNzdW1lCitUaGlzIGNvbnRyYWN0IGlzIHRyZWF0ZWQgbGlrZSBD KysyMyBAY29kZXtbW2Fzc3VtZV1dfS4KKworQGl0ZW0gY2hlY2tfbmV2ZXJfY29udGludWUKK0Bp dGVteCBuZXZlcgorQGl0ZW14IGFib3J0CitUaGlzIGNvbnRyYWN0IGlzIGNoZWNrZWQuICBJZiBp dCBmYWlscywgdGhlIHZpb2xhdGlvbiBoYW5kbGVyIGlzCitjYWxsZWQuICBJZiB0aGUgaGFuZGxl ciByZXR1cm5zLCBAY29kZXtzdGQ6OnRlcm1pbmF0ZX0gaXMgY2FsbGVkLgorCitAaXRlbSBjaGVj a19tYXliZV9jb250aW51ZQorQGl0ZW14IG1heWJlCitUaGlzIGNvbnRyYWN0IGlzIGNoZWNrZWQu ICBJZiBpdCBmYWlscywgdGhlIHZpb2xhdGlvbiBoYW5kbGVyIGlzCitjYWxsZWQuICBJZiB0aGUg aGFuZGxlciByZXR1cm5zLCBleGVjdXRpb24gY29udGludWVzIG5vcm1hbGx5LgorQGVuZCB0YWJs ZQorCiBAaXRlbSAtZmNvcm91dGluZXMKIEBvcGluZGV4IGZjb3JvdXRpbmVzCiBFbmFibGUgc3Vw cG9ydCBmb3IgdGhlIEMrKyBjb3JvdXRpbmVzIGV4dGVuc2lvbiAoZXhwZXJpbWVudGFsKS4KZGlm ZiAtLWdpdCBhL2djYy9jLWZhbWlseS9jLm9wdCBiL2djYy9jLWZhbWlseS9jLm9wdAppbmRleCAz ZGFlYWI4NTUzMS4uOTAwODg4MDRlNjQgMTAwNjQ0Ci0tLSBhL2djYy9jLWZhbWlseS9jLm9wdAor KysgYi9nY2MvYy1mYW1pbHkvYy5vcHQKQEAgLTE2NzgsNiArMTY3OCw0NyBAQCBmY29uc3RleHBy LW9wcy1saW1pdD0KIEMrKyBPYmpDKysgSm9pbmVkIFJlamVjdE5lZ2F0aXZlIEhvc3RfV2lkZV9J bnQgVmFyKGNvbnN0ZXhwcl9vcHNfbGltaXQpIEluaXQoMzM1NTQ0MzIpCiAtZmNvbnN0ZXhwci1v cHMtbGltaXQ9PG51bWJlcj4JU3BlY2lmeSBtYXhpbXVtIG51bWJlciBvZiBjb25zdGV4cHIgb3Bl cmF0aW9ucyBkdXJpbmcgYSBzaW5nbGUgY29uc3RleHByIGV2YWx1YXRpb24uCiAKK2Zjb250cmFj dHMKK0MrKyBPYmpDKysgVmFyKGZsYWdfY29udHJhY3RzKSBJbml0KDApCitFbmFibGUgY2VydGFp biBmZWF0dXJlcyBwcmVzZW50IGRyYWZ0cyBvZiBDKysgQ29udHJhY3RzLgorCitFbnVtCitOYW1l KG9uX29mZikgVHlwZShpbnQpIFVua25vd25FcnJvcihhcmd1bWVudCAlcXMgbXVzdCBiZSBlaXRo ZXIgJTxvbiU+IG9yICU8b2ZmJT4pCisKK0VudW1WYWx1ZQorRW51bShvbl9vZmYpIFN0cmluZyhv ZmYpIFZhbHVlKDApCisKK0VudW1WYWx1ZQorRW51bShvbl9vZmYpIFN0cmluZyhvbikgVmFsdWUo MSkKKworZmNvbnRyYWN0LWFzc3VtcHRpb24tbW9kZT0KK0MrKyBKb2luZWQKKy1mY29udHJhY3Qt YXNzdW1wdGlvbi1tb2RlPVtvbnxvZmZdCUVuYWJsZSBvciBkaXNhYmxlIHRyZWF0aW5nIGF4aW9t IGxldmVsIGNvbnRyYWN0cyBhcyBhc3N1bXB0aW9ucyAoZGVmYXVsdCBvbikuCisKK2Zjb250cmFj dC1idWlsZC1sZXZlbD0KK0MrKyBKb2luZWQgUmVqZWN0TmVnYXRpdmUKKy1mY29udHJhY3QtYnVp bGQtbGV2ZWw9W29mZnxkZWZhdWx0fGF1ZGl0XQlTcGVjaWZ5IG1heCBjb250cmFjdCBsZXZlbCB0 byBnZW5lcmF0ZSBydW50aW1lIGNoZWNrcyBmb3IKKworZmNvbnRyYWN0LXN0cmljdC1kZWNsYXJh dGlvbnM9CitDKysgVmFyKGZsYWdfY29udHJhY3Rfc3RyaWN0X2RlY2xhcmF0aW9ucykgRW51bShv bl9vZmYpIEpvaW5lZCBJbml0KDApIFJlamVjdE5lZ2F0aXZlCistZmNvbnRyYWN0LXN0cmljdC1k ZWNsYXJhdGlvbnM9W29ufG9mZl0JRW5hYmxlIG9yIGRpc2FibGUgd2FybmluZ3Mgb24gZ2VuZXJh bGl6ZWQgcmVkZWNsYXJhdGlvbiBvZiBmdW5jdGlvbnMgd2l0aCBjb250cmFjdHMgKGRlZmF1bHQg b2ZmKS4KKworZmNvbnRyYWN0LW1vZGU9CitDKysgVmFyKGZsYWdfY29udHJhY3RfbW9kZSkgRW51 bShvbl9vZmYpIEpvaW5lZCBJbml0KDEpIFJlamVjdE5lZ2F0aXZlCistZmNvbnRyYWN0LW1vZGU9 W29ufG9mZl0JRW5hYmxlIG9yIGRpc2FibGUgYWxsIGNvbnRyYWN0IGZhY2lsaXRpZXMgKGRlZmF1 bHQgb24pLgorCitmY29udHJhY3QtY29udGludWF0aW9uLW1vZGU9CitDKysgSm9pbmVkCistZmNv bnRyYWN0LWNvbnRpbnVhdGlvbi1tb2RlPVtvbnxvZmZdCUVuYWJsZSBvciBkaXNhYmxlIGNvbnRy YWN0IGNvbnRpbnVhdGlvbiBtb2RlIChkZWZhdWx0IG9mZikuCisKK2Zjb250cmFjdC1yb2xlPQor QysrIEpvaW5lZAorLWZjb250cmFjdC1yb2xlPTxuYW1lPjo8c2VtYW50aWNzPglTcGVjaWZ5IHRo ZSBzZW1hbnRpY3MgZm9yIGFsbCBsZXZlbHMgaW4gYSByb2xlIChkZWZhdWx0LCByZXZpZXcpLCBv ciBhIGN1c3RvbSBjb250cmFjdCByb2xlIHdpdGggZ2l2ZW4gc2VtYW50aWNzIChleDogb3B0OmFz c3VtZSxhc3N1bWUsYXNzdW1lKQorCitmY29udHJhY3Qtc2VtYW50aWM9CitDKysgSm9pbmVkCist ZmNvbnRyYWN0LXNlbWFudGljPTxsZXZlbD46PHNlbWFudGljPglTcGVjaWZ5IHRoZSBjb25jcmV0 ZSBzZW1hbnRpY3MgZm9yIGxldmVsCisKIGZjb3JvdXRpbmVzCiBDKysgTFRPIFZhcihmbGFnX2Nv cm91dGluZXMpCiBFbmFibGUgQysrIGNvcm91dGluZXMgKGV4cGVyaW1lbnRhbCkuCmRpZmYgLS1n aXQgYS9nY2MvY3AvY29udHJhY3RzLmggYi9nY2MvY3AvY29udHJhY3RzLmgKbmV3IGZpbGUgbW9k ZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLjQwNTBhMzg3MDhiCi0tLSAvZGV2L251bGwKKysr IGIvZ2NjL2NwL2NvbnRyYWN0cy5oCkBAIC0wLDAgKzEsMzA1IEBACisvKiBEZWZpbml0aW9ucyBm b3IgQysrIGNvbnRyYWN0IGxldmVscy4gIEltcGxlbWVudHMgZnVuY3Rpb25hbGl0eSBkZXNjcmli ZWQgaW4KKyAgIHRoZSBONDgyMCB3b3JraW5nIGRyYWZ0IHZlcnNpb24gb2YgY29udHJhY3RzLCBQ MTI5MCwgUDEzMzIsIGFuZCBQMTQyOS4KKyAgIENvcHlyaWdodCAoQykgMjAyMC0yMDIyIEZyZWUg U29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorICAgQ29udHJpYnV0ZWQgYnkgSmVmZiBDaGFwbWFu IElJIChqY2hhcG1hbkBsb2NrM3NvZnR3YXJlLmNvbSkKKworVGhpcyBmaWxlIGlzIHBhcnQgb2Yg R0NDLgorCitHQ0MgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5k L29yIG1vZGlmeQoraXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMg TGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKK3RoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVp dGhlciB2ZXJzaW9uIDMsIG9yIChhdCB5b3VyIG9wdGlvbikKK2FueSBsYXRlciB2ZXJzaW9uLgor CitHQ0MgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwK K2J1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJh bnR5IG9mCitNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBP U0UuICBTZWUgdGhlCitHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxz LgorCitZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQ dWJsaWMgTGljZW5zZQorYWxvbmcgd2l0aCBHQ0M7IHNlZSB0aGUgZmlsZSBDT1BZSU5HMy4gIElm IG5vdCBzZWUKKzxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4gICovCisKKyNpZm5kZWYg R0NDX0NQX0NPTlRSQUNUX0gKKyNkZWZpbmUgR0NDX0NQX0NPTlRSQUNUX0gKKworLyogQ29udHJh Y3QgbGV2ZWxzIGFwcHJveGltYXRlIHRoZSBjb21wbGV4aXR5IG9mIHRoZSBleHByZXNzaW9uLiAg Ki8KKworZW51bSBjb250cmFjdF9sZXZlbAoreworICBDT05UUkFDVF9JTlZBTElELAorICBDT05U UkFDVF9ERUZBVUxULAorICBDT05UUkFDVF9BVURJVCwKKyAgQ09OVFJBQ1RfQVhJT00KK307CisK Ky8qIFRoZSBjb25jcmV0ZSBzZW1hbnRpY3MgZGV0ZXJtaW5lIHRoZSBiZWhhdmlvciBvZiBhIGNv bnRyYWN0LiAgKi8KKworZW51bSBjb250cmFjdF9zZW1hbnRpYworeworICBDQ1NfSU5WQUxJRCwK KyAgQ0NTX0lHTk9SRSwKKyAgQ0NTX0FTU1VNRSwKKyAgQ0NTX05FVkVSLAorICBDQ1NfTUFZQkUK K307CisKKy8qIFRydWUgaWYgdGhlIGNvbnRyYWN0IGlzIHVuY2hlY2tlZC4gICovCisKK2lubGlu ZSBib29sCit1bmNoZWNrZWRfY29udHJhY3RfcCAoY29udHJhY3Rfc2VtYW50aWMgY3MpCit7Cisg IHJldHVybiBjcyA9PSBDQ1NfSUdOT1JFIHx8IGNzID09IENDU19BU1NVTUU7Cit9CisKKy8qIFRy dWUgaWYgdGhlIGNvbnRyYWN0IGlzIGNoZWNrZWQuICAqLworCitpbmxpbmUgYm9vbAorY2hlY2tl ZF9jb250cmFjdF9wIChjb250cmFjdF9zZW1hbnRpYyBjcykKK3sKKyAgcmV0dXJuIGNzID49IEND U19ORVZFUjsKK30KKworLyogTXVzdCBtYXRjaCBzdGQ6OmNvbnRyYWN0X3Zpb2xhdGlvbl9jb250 aW51YXRpb25fbW9kZSBpbiA8Y29udHJhY3Q+LiAgKi8KK2VudW0gY29udHJhY3RfY29udGludWF0 aW9uCit7CisgIE5FVkVSX0NPTlRJTlVFLAorICBNQVlCRV9DT05USU5VRQorfTsKKworLyogQXNz ZXJ0aW9uIHJvbGUgaW5mby4gICovCitzdHJ1Y3QgY29udHJhY3Rfcm9sZQoreworICBjb25zdCBj aGFyICpuYW1lOworICBjb250cmFjdF9zZW1hbnRpYyBkZWZhdWx0X3NlbWFudGljOworICBjb250 cmFjdF9zZW1hbnRpYyBhdWRpdF9zZW1hbnRpYzsKKyAgY29udHJhY3Rfc2VtYW50aWMgYXhpb21f c2VtYW50aWM7Cit9OworCisvKiBJbmZvcm1hdGlvbiBmb3IgY29uZmlndXJlZCBjb250cmFjdCBz ZW1hbnRpY3MuICAqLworCitzdHJ1Y3QgY29udHJhY3RfY29uZmlndXJhdGlvbgoreworICBjb250 cmFjdF9sZXZlbCBsZXZlbDsKKyAgY29udHJhY3Rfcm9sZSogcm9sZTsKK307CisKKy8qIEEgY29u dHJhY3QgbW9kZSBjb250YWlucyBpbmZvcm1hdGlvbiB1c2VkIHRvIGRlcml2ZSB0aGUgY2hlY2tp bmcKKyAgIGFuZCBhc3N1bXB0aW9uIHNlbWFudGljcyBvZiBhIGNvbnRyYWN0LiBUaGlzIGlzIGVp dGhlciBhIGR5bmFtaWMKKyAgIGNvbmZpZ3VyYXRpb24sIG1lYW5pbmcgaXQgZGVyaXZlcyBmcm9t IHRoZSBidWlsZCBtb2RlLCBvciBpdCBpcworICAgZXhwbGljaXRseSBzcGVjaWZpZWQuICAqLwor CitzdHJ1Y3QgY29udHJhY3RfbW9kZQoreworICBjb250cmFjdF9tb2RlICgpIDoga2luZChjbV9p bnZhbGlkKSB7fQorICBjb250cmFjdF9tb2RlIChjb250cmFjdF9sZXZlbCBsZXZlbCwgY29udHJh Y3Rfcm9sZSAqcm9sZSA9IE5VTEwpCisgICAgOiBraW5kKGNtX2R5bmFtaWMpCisgIHsKKyAgICBj b250cmFjdF9jb25maWd1cmF0aW9uIGNjOworICAgIGNjLmxldmVsID0gbGV2ZWw7CisgICAgY2Mu cm9sZSA9IHJvbGU7CisgICAgdS5jb25maWcgPSBjYzsKKyAgfQorICBjb250cmFjdF9tb2RlIChj b250cmFjdF9zZW1hbnRpYyBzZW1hbnRpYykgOiBraW5kKGNtX2V4cGxpY2l0KQorICB7CisgICAg dS5zZW1hbnRpYyA9IHNlbWFudGljOworICB9CisKKyAgY29udHJhY3RfbGV2ZWwgZ2V0X2xldmVs ICgpIGNvbnN0CisgIHsKKyAgICBnY2NfYXNzZXJ0IChraW5kID09IGNtX2R5bmFtaWMpOworICAg IHJldHVybiB1LmNvbmZpZy5sZXZlbDsKKyAgfQorCisgIGNvbnRyYWN0X3JvbGUgKmdldF9yb2xl ICgpIGNvbnN0CisgIHsKKyAgICBnY2NfYXNzZXJ0IChraW5kID09IGNtX2R5bmFtaWMpOworICAg IHJldHVybiB1LmNvbmZpZy5yb2xlOworICB9CisKKyAgY29udHJhY3Rfc2VtYW50aWMgZ2V0X3Nl bWFudGljICgpIGNvbnN0CisgIHsKKyAgICBnY2NfYXNzZXJ0IChraW5kID09IGNtX2V4cGxpY2l0 KTsKKyAgICByZXR1cm4gdS5zZW1hbnRpYzsKKyAgfQorCisgIGVudW0geyBjbV9pbnZhbGlkLCBj bV9keW5hbWljLCBjbV9leHBsaWNpdCB9IGtpbmQ7CisKKyAgdW5pb24KKyAgeworICAgIGNvbnRy YWN0X2NvbmZpZ3VyYXRpb24gY29uZmlnOworICAgIGNvbnRyYWN0X3NlbWFudGljIHNlbWFudGlj OworICB9IHU7Cit9OworCitleHRlcm4gY29udHJhY3Rfcm9sZSAqZ2V0X2NvbnRyYWN0X3JvbGUJ KGNvbnN0IGNoYXIgKik7CitleHRlcm4gY29udHJhY3Rfcm9sZSAqYWRkX2NvbnRyYWN0X3JvbGUJ KGNvbnN0IGNoYXIgKiwKKwkJCQkJIGNvbnRyYWN0X3NlbWFudGljLAorCQkJCQkgY29udHJhY3Rf c2VtYW50aWMsCisJCQkJCSBjb250cmFjdF9zZW1hbnRpYywKKwkJCQkJIGJvb2wgPSB0cnVlKTsK K2V4dGVybiB2b2lkIHZhbGlkYXRlX2NvbnRyYWN0X3JvbGUJKGNvbnRyYWN0X3JvbGUgKik7Citl eHRlcm4gdm9pZCBzZXR1cF9kZWZhdWx0X2NvbnRyYWN0X3JvbGUJKGJvb2wgPSB0cnVlKTsKK2V4 dGVybiBjb250cmFjdF9zZW1hbnRpYyBsb29rdXBfY29uY3JldGVfc2VtYW50aWMgKGNvbnN0IGNo YXIgKik7CisKKy8qIE1hcCBhIHNvdXJjZSBsZXZlbCBzZW1hbnRpYyBvciBsZXZlbCBuYW1lIHRv IGl0cyB2YWx1ZSwgb3IgaW52YWxpZC4gICovCitleHRlcm4gY29udHJhY3Rfc2VtYW50aWMgbWFw X2NvbnRyYWN0X3NlbWFudGljCShjb25zdCBjaGFyICopOworZXh0ZXJuIGNvbnRyYWN0X2xldmVs IG1hcF9jb250cmFjdF9sZXZlbAkoY29uc3QgY2hhciAqKTsKKworLyogQ2hlY2sgaWYgYW4gYXR0 cmlidXRlIGlzIGEgY3h4IGNvbnRyYWN0IGF0dHJpYnV0ZS4gICovCitleHRlcm4gYm9vbCBjeHhf Y29udHJhY3RfYXR0cmlidXRlX3AgKGNvbnN0X3RyZWUpOworZXh0ZXJuIGJvb2wgY3BfY29udHJh Y3RfYXNzZXJ0aW9uX3AgKGNvbnN0X3RyZWUpOworCisvKiBSZXR1cm5zIHRoZSBkZWZhdWx0IHJv bGUuICAqLworCitpbmxpbmUgY29udHJhY3Rfcm9sZSAqCitnZXRfZGVmYXVsdF9jb250cmFjdF9y b2xlICgpCit7CisgIHJldHVybiBnZXRfY29udHJhY3Rfcm9sZSAoImRlZmF1bHQiKTsKK30KKwor LyogSGFuZGxlIHZhcmlvdXMgY29tbWFuZCBsaW5lIGFyZ3VtZW50cyByZWxhdGVkIHRvIHNlbWFu dGljIG1hcHBpbmcuICAqLworZXh0ZXJuIHZvaWQgaGFuZGxlX09QVF9mY29udHJhY3RfYnVpbGRf bGV2ZWxfIChjb25zdCBjaGFyICopOworZXh0ZXJuIHZvaWQgaGFuZGxlX09QVF9mY29udHJhY3Rf YXNzdW1wdGlvbl9tb2RlXyAoY29uc3QgY2hhciAqKTsKK2V4dGVybiB2b2lkIGhhbmRsZV9PUFRf ZmNvbnRyYWN0X2NvbnRpbnVhdGlvbl9tb2RlXyAoY29uc3QgY2hhciAqKTsKK2V4dGVybiB2b2lk IGhhbmRsZV9PUFRfZmNvbnRyYWN0X3JvbGVfIChjb25zdCBjaGFyICopOworZXh0ZXJuIHZvaWQg aGFuZGxlX09QVF9mY29udHJhY3Rfc2VtYW50aWNfIChjb25zdCBjaGFyICopOworCitlbnVtIGNv bnRyYWN0X21hdGNoaW5nX2NvbnRleHQKK3sKKyAgY21jX2RlY2xhcmF0aW9uLAorICBjbWNfb3Zl cnJpZGUKK307CisKKy8qIFRydWUgaWYgTk9ERSBpcyBhbnkga2luZCBvZiBjb250cmFjdC4gICov CisjZGVmaW5lIENPTlRSQUNUX1AoTk9ERSkJCQlcCisgIChUUkVFX0NPREUgKE5PREUpID09IEFT U0VSVElPTl9TVE1UCQlcCisgICB8fCBUUkVFX0NPREUgKE5PREUpID09IFBSRUNPTkRJVElPTl9T VE1UCVwKKyAgIHx8IFRSRUVfQ09ERSAoTk9ERSkgPT0gUE9TVENPTkRJVElPTl9TVE1UKQorCisv KiBUcnVlIGlmIE5PREUgaXMgYSBjb250cmFjdCBjb25kaXRpb24uICAqLworI2RlZmluZSBDT05U UkFDVF9DT05ESVRJT05fUChOT0RFKQkJXAorICAoVFJFRV9DT0RFIChOT0RFKSA9PSBQUkVDT05E SVRJT05fU1RNVAlcCisgICB8fCBUUkVFX0NPREUgKE5PREUpID09IFBPU1RDT05ESVRJT05fU1RN VCkKKworLyogVHJ1ZSBpZiBOT0RFIGlzIGEgcHJlY29uZGl0aW9uLiAgKi8KKyNkZWZpbmUgUFJF Q09ORElUSU9OX1AoTk9ERSkgICAgICAgICAgIFwKKyAgKFRSRUVfQ09ERSAoTk9ERSkgPT0gUFJF Q09ORElUSU9OX1NUTVQpCisKKy8qIFRydWUgaWYgTk9ERSBpcyBhIHBvc3Rjb25kaXRpb24uICAq LworI2RlZmluZSBQT1NUQ09ORElUSU9OX1AoTk9ERSkgICAgICAgICAgXAorICAoVFJFRV9DT0RF IChOT0RFKSA9PSBQT1NUQ09ORElUSU9OX1NUTVQpCisKKyNkZWZpbmUgQ09OVFJBQ1RfQ0hFQ0so Tk9ERSkgXAorICAoVFJFRV9DSEVDSzMgKE5PREUsIEFTU0VSVElPTl9TVE1ULCBQUkVDT05ESVRJ T05fU1RNVCwgUE9TVENPTkRJVElPTl9TVE1UKSkKKworLyogVHJ1ZSBpZmYgdGhlIEZVTkNUSU9O X0RFQ0wgTk9ERSBjdXJyZW50bHkgaGFzIGFueSBjb250cmFjdHMuICAqLworI2RlZmluZSBERUNM X0hBU19DT05UUkFDVFNfUChOT0RFKSBcCisgIChERUNMX0NPTlRSQUNUUyAoTk9ERSkgIT0gTlVM TF9UUkVFKQorCisvKiBGb3IgYSBGVU5DVElPTl9ERUNMIG9mIGEgZ3VhcmRlZCBmdW5jdGlvbiwg dGhpcyBwb2ludHMgdG8gYSBsaXN0IG9mIHRoZSBwcmUKKyAgIGFuZCBwb3N0IGNvbnRyYWN0cyBv ZiB0aGUgZmlyc3QgZGVjbCBvZiBOT0RFIGluIG9yaWdpbmFsIG9yZGVyLiAqLworI2RlZmluZSBE RUNMX0NPTlRSQUNUUyhOT0RFKSBcCisgIChmaW5kX2NvbnRyYWN0IChERUNMX0FUVFJJQlVURVMg KE5PREUpKSkKKworLyogVGhlIG5leHQgY29udHJhY3QgKGlmIGFueSkgYWZ0ZXIgdGhpcyBvbmUg aW4gYW4gYXR0cmlidXRlIGxpc3QuICAqLworI2RlZmluZSBDT05UUkFDVF9DSEFJTihOT0RFKSBc CisgIChmaW5kX2NvbnRyYWN0IChUUkVFX0NIQUlOIChOT0RFKSkpCisKKy8qIFRoZSB3cmFwcGVy IG9mIHRoZSBvcmlnaW5hbCBzb3VyY2UgbG9jYXRpb24gb2YgYSBsaXN0IG9mIGNvbnRyYWN0cy4g ICovCisjZGVmaW5lIENPTlRSQUNUX1NPVVJDRV9MT0NBVElPTl9XUkFQUEVSKE5PREUpIFwKKyAg KFRSRUVfUFVSUE9TRSAoVFJFRV9WQUxVRSAoTk9ERSkpKQorCisvKiBUaGUgb3JpZ2luYWwgc291 cmNlIGxvY2F0aW9uIG9mIGEgbGlzdCBvZiBjb250cmFjdHMuICAqLworI2RlZmluZSBDT05UUkFD VF9TT1VSQ0VfTE9DQVRJT04oTk9ERSkgXAorICAoRVhQUl9MT0NBVElPTiAoQ09OVFJBQ1RfU09V UkNFX0xPQ0FUSU9OX1dSQVBQRVIgKE5PREUpKSkKKworLyogVGhlIGFjdHVhbCBjb2RlIF9TVE1U IGZvciBhIGNvbnRyYWN0IGF0dHJpYnV0ZS4gICovCisjZGVmaW5lIENPTlRSQUNUX1NUQVRFTUVO VChOT0RFKSBcCisgIChUUkVFX1ZBTFVFIChUUkVFX1ZBTFVFIChOT0RFKSkpCisKKy8qIFRydWUg aWYgdGhlIGNvbnRyYWN0IHNlbWFudGljIHdhcyBzcGVjaWZpZWQgbGl0ZXJhbGx5LiBJZiB0cnVl LCB0aGUKKyAgIGNvbnRyYWN0IG1vZGUgaXMgYW4gaWRlbnRpZmllciBjb250YWluaW5nIHRoZSBz ZW1hbnRpYy4gT3RoZXJ3aXNlLAorICAgaXQgaXMgYSBUUkVFX0xJU1Qgd2hvc2UgVFJFRV9WQUxV RSBpcyB0aGUgbGV2ZWwgYW5kIHdob3NlIFRSRUVfUFVSUE9TRQorICAgaXMgdGhlIHJvbGUuICAq LworI2RlZmluZSBDT05UUkFDVF9MSVRFUkFMX01PREVfUChOT0RFKSBcCisgIChDT05UUkFDVF9N T0RFIChOT0RFKSAhPSBOVUxMX1RSRUUgXAorICAgJiYgVFJFRV9DT0RFIChDT05UUkFDVF9NT0RF IChOT0RFKSkgPT0gSURFTlRJRklFUl9OT0RFKQorCisvKiBUaGUgaWRlbnRpZmllciBkZW5vdGlu ZyB0aGUgbGl0ZXJhbCBzZW1hbnRpYyBvZiB0aGUgY29udHJhY3QuICAqLworI2RlZmluZSBDT05U UkFDVF9MSVRFUkFMX1NFTUFOVElDKE5PREUpIFwKKyAgKFRSRUVfT1BFUkFORCAoTk9ERSwgMCkp CisKKy8qIFRoZSB3cml0dGVuICJtb2RlIiBvZiB0aGUgY29udHJhY3QuIEVpdGhlciBhbiBJREVO VElGSUVSIHdpdGggdGhlCisgICBsaXRlcmFsIHNlbWFudGljIG9yIGEgVFJFRV9MSVNUIGNvbnRh aW5pbmcgdGhlIGxldmVsIGFuZCByb2xlLiAgKi8KKyNkZWZpbmUgQ09OVFJBQ1RfTU9ERShOT0RF KSBcCisgIChUUkVFX09QRVJBTkQgKENPTlRSQUNUX0NIRUNLIChOT0RFKSwgMCkpCisKKy8qIFRo ZSBpZGVudGlmaWVyIGRlbm90aW5nIHRoZSBidWlsZCBsZXZlbCBvZiB0aGUgY29udHJhY3QuICov CisjZGVmaW5lIENPTlRSQUNUX0xFVkVMKE5PREUpCQlcCisgIChUUkVFX1ZBTFVFIChDT05UUkFD VF9NT0RFIChOT0RFKSkpCisKKy8qIFRoZSBpZGVudGlmaWVyIGRlbm90aW5nIHRoZSByb2xlIG9m IHRoZSBjb250cmFjdCAqLworI2RlZmluZSBDT05UUkFDVF9ST0xFKE5PREUpCQlcCisgIChUUkVF X1BVUlBPU0UgKENPTlRSQUNUX01PREUgKE5PREUpKSkKKworLyogVGhlIHBhcnNlZCBjb25kaXRp b24gb2YgdGhlIGNvbnRyYWN0LiAgKi8KKyNkZWZpbmUgQ09OVFJBQ1RfQ09ORElUSU9OKE5PREUp IFwKKyAgKFRSRUVfT1BFUkFORCAoQ09OVFJBQ1RfQ0hFQ0sgKE5PREUpLCAxKSkKKworLyogVHJ1 ZSBpZmYgdGhlIGNvbmRpdGlvbiBvZiB0aGUgY29udHJhY3QgTk9ERSBpcyBub3QgeWV0IHBhcnNl ZC4gICovCisjZGVmaW5lIENPTlRSQUNUX0NPTkRJVElPTl9ERUZFUlJFRF9QKE5PREUpIFwKKyAg KFRSRUVfQ09ERSAoQ09OVFJBQ1RfQ09ORElUSU9OIChOT0RFKSkgPT0gREVGRVJSRURfUEFSU0Up CisKKy8qIFRoZSByYXcgY29tbWVudCBvZiB0aGUgY29udHJhY3QuICAqLworI2RlZmluZSBDT05U UkFDVF9DT01NRU5UKE5PREUpIFwKKyAgKFRSRUVfT1BFUkFORCAoQ09OVFJBQ1RfQ0hFQ0sgKE5P REUpLCAyKSkKKworLyogVGhlIFZBUl9ERUNMIG9mIGEgcG9zdGNvbmRpdGlvbiByZXN1bHQuIEZv ciBkZWZlcnJlZCBjb250cmFjdHMsIHRoaXMKKyAgIGlzIGFuIElERU5USUZJRVIuICAqLworI2Rl ZmluZSBQT1NUQ09ORElUSU9OX0lERU5USUZJRVIoTk9ERSkgXAorICAoVFJFRV9PUEVSQU5EIChQ T1NUQ09ORElUSU9OX1NUTVRfQ0hFQ0sgKE5PREUpLCAzKSkKKworLyogRm9yIGEgRlVOQ1RJT05f REVDTCBvZiBhIGd1YXJkZWQgZnVuY3Rpb24sIHRoaXMgaG9sZHMgdGhlIGZ1bmN0aW9uIGRlY2wK KyAgIHdoZXJlIHByZSBjb250cmFjdCBjaGVja3MgYXJlIGVtaXR0ZWQuICAqLworI2RlZmluZSBE RUNMX1BSRV9GTihOT0RFKSBcCisgIChnZXRfcHJlY29uZGl0aW9uX2Z1bmN0aW9uICgoTk9ERSkp KQorCisvKiBGb3IgYSBGVU5DVElPTl9ERUNMIG9mIGEgZ3VhcmRlZCBmdW5jdGlvbiwgdGhpcyBo b2xkcyB0aGUgZnVuY3Rpb24gZGVjbAorICAgd2hlcmUgcG9zdCBjb250cmFjdCBjaGVja3MgYXJl IGVtaXR0ZWQuICAqLworI2RlZmluZSBERUNMX1BPU1RfRk4oTk9ERSkgXAorICAoZ2V0X3Bvc3Rj b25kaXRpb25fZnVuY3Rpb24gKChOT0RFKSkpCisKKy8qIFRydWUgaWZmIHRoZSBGVU5DVElPTl9E RUNMIGlzIHRoZSBwcmUgZnVuY3Rpb24gZm9yIGEgZ3VhcmRlZCBmdW5jdGlvbi4gICovCisjZGVm aW5lIERFQ0xfSVNfUFJFX0ZOX1AoTk9ERSkgXAorICAoREVDTF9BQlNUUkFDVF9PUklHSU4gKE5P REUpICYmIERFQ0xfUFJFX0ZOIChERUNMX0FCU1RSQUNUX09SSUdJTiAoTk9ERSkpID09IE5PREUp CisKKy8qIFRydWUgaWZmIHRoZSBGVU5DVElPTl9ERUNMIGlzIHRoZSBwb3N0IGZ1bmN0aW9uIGZv ciBhIGd1YXJkZWQgZnVuY3Rpb24uICAqLworI2RlZmluZSBERUNMX0lTX1BPU1RfRk5fUChOT0RF KSBcCisgIChERUNMX0FCU1RSQUNUX09SSUdJTiAoTk9ERSkgJiYgREVDTF9QT1NUX0ZOIChERUNM X0FCU1RSQUNUX09SSUdJTiAoTk9ERSkpID09IE5PREUpCisKK2V4dGVybiB2b2lkIHJlbW92ZV9j b250cmFjdF9hdHRyaWJ1dGVzCQkodHJlZSk7CitleHRlcm4gdm9pZCBjb3B5X2NvbnRyYWN0X2F0 dHJpYnV0ZXMJCSh0cmVlLCB0cmVlKTsKK2V4dGVybiB2b2lkIHJlbWFwX2NvbnRyYWN0cwkJCSh0 cmVlLCB0cmVlLCB0cmVlLCBib29sKTsKK2V4dGVybiB2b2lkIG1heWJlX3VwZGF0ZV9wb3N0Y29u ZGl0aW9ucwkJKHRyZWUpOworZXh0ZXJuIHZvaWQgcmVidWlsZF9wb3N0Y29uZGl0aW9ucwkJKHRy ZWUpOworZXh0ZXJuIGJvb2wgY2hlY2tfcG9zdGNvbmRpdGlvbl9yZXN1bHQJCSh0cmVlLCB0cmVl LCBsb2NhdGlvbl90KTsKK2V4dGVybiB0cmVlIGdldF9wcmVjb25kaXRpb25fZnVuY3Rpb24JCSh0 cmVlKTsKK2V4dGVybiB0cmVlIGdldF9wb3N0Y29uZGl0aW9uX2Z1bmN0aW9uCQkodHJlZSk7Citl eHRlcm4gdm9pZCBkdXBsaWNhdGVfY29udHJhY3RzCQkJKHRyZWUsIHRyZWUpOworZXh0ZXJuIHZv aWQgbWF0Y2hfZGVmZXJyZWRfY29udHJhY3RzCQkodHJlZSk7CitleHRlcm4gdm9pZCBkZWZlcl9n dWFyZGVkX2NvbnRyYWN0X21hdGNoCSh0cmVlLCB0cmVlLCB0cmVlKTsKK2V4dGVybiBib29sIGRp YWdub3NlX21pc2FwcGxpZWRfY29udHJhY3RzCSh0cmVlKTsKK2V4dGVybiB0cmVlIGZpbmlzaF9j b250cmFjdF9hdHRyaWJ1dGUJCSh0cmVlLCB0cmVlKTsKK2V4dGVybiB0cmVlIGludmFsaWRhdGVf Y29udHJhY3QJCQkodHJlZSk7CitleHRlcm4gdm9pZCB1cGRhdGVfbGF0ZV9jb250cmFjdAkJKHRy ZWUsIHRyZWUsIHRyZWUpOworZXh0ZXJuIHRyZWUgc3BsaWNlX291dF9jb250cmFjdHMJCSh0cmVl KTsKK2V4dGVybiBib29sIGFsbF9hdHRyaWJ1dGVzX2FyZV9jb250cmFjdHNfcAkodHJlZSk7Citl eHRlcm4gdm9pZCBpbmhlcml0X2Jhc2VfY29udHJhY3RzCQkodHJlZSwgdHJlZSk7CitleHRlcm4g dHJlZSBhcHBseV9wb3N0Y29uZGl0aW9uX3RvX3JldHVybgkodHJlZSk7CitleHRlcm4gdm9pZCBz dGFydF9mdW5jdGlvbl9jb250cmFjdHMJCSh0cmVlKTsKK2V4dGVybiB2b2lkIGZpbmlzaF9mdW5j dGlvbl9jb250cmFjdHMJCSh0cmVlKTsKK2V4dGVybiB2b2lkIHNldF9jb250cmFjdF9mdW5jdGlv bnMJCSh0cmVlLCB0cmVlLCB0cmVlKTsKK2V4dGVybiB0cmVlIGJ1aWxkX2NvbnRyYWN0X2NoZWNr CQkodHJlZSk7CitleHRlcm4gdm9pZCBlbWl0X2Fzc2VydGlvbgkJCSh0cmVlKTsKKworI2VuZGlm IC8qICEgR0NDX0NQX0NPTlRSQUNUX0ggKi8KZGlmZiAtLWdpdCBhL2djYy9jcC9jcC10cmVlLmgg Yi9nY2MvY3AvY3AtdHJlZS5oCmluZGV4IDgxMWE4MzQ1NzEyLi41NDhiNTMzMjY2YSAxMDA2NDQK LS0tIGEvZ2NjL2NwL2NwLXRyZWUuaAorKysgYi9nY2MvY3AvY3AtdHJlZS5oCkBAIC0yNSw2ICsy NSw3IEBAIGFsb25nIHdpdGggR0NDOyBzZWUgdGhlIGZpbGUgQ09QWUlORzMuICBJZiBub3Qgc2Vl CiAjaW5jbHVkZSAiaGFyZC1yZWctc2V0LmgiCiAjaW5jbHVkZSAiZnVuY3Rpb24uaCIKICNpbmNs dWRlICJ0cmlzdGF0ZS5oIgorI2luY2x1ZGUgImNvbnRyYWN0cy5oIgogCiAvKiBJbiBvcmRlciBm b3IgdGhlIGZvcm1hdCBjaGVja2luZyB0byBhY2NlcHQgdGhlIEMrKyBmcm9udCBlbmQKICAgIGRp YWdub3N0aWMgZnJhbWV3b3JrIGV4dGVuc2lvbnMsIHlvdSBtdXN0IGluY2x1ZGUgdGhpcyBmaWxl IGJlZm9yZQpAQCAtMjMyLDYgKzIzMyw4IEBAIGVudW0gY3BfdHJlZV9pbmRleAogICAgIENQVElf RFNPX0hBTkRMRSwKICAgICBDUFRJX0RDQVNULAogCisgICAgQ1BUSV9QU0VVRE9fQ09OVFJBQ1Rf VklPTEFUSU9OLAorCiAgICAgQ1BUSV9TT1VSQ0VfTE9DQVRJT05fSU1QTCwKIAogICAgIENQVElf RkFMTEJBQ0tfREZMT0FUMzJfVFlQRSwKQEAgLTI2Niw2ICsyNjksNyBAQCBleHRlcm4gR1RZKCgp KSB0cmVlIGNwX2dsb2JhbF90cmVlc1tDUFRJX01BWF07CiAjZGVmaW5lIGN1cnJlbnRfYWdncgkJ CWNwX2dsb2JhbF90cmVlc1tDUFRJX0FHR1JfVEFHXQogLyogc3RkOjphbGlnbl92YWxfdCAqLwog I2RlZmluZSBhbGlnbl90eXBlX25vZGUJCQljcF9nbG9iYWxfdHJlZXNbQ1BUSV9BTElHTl9UWVBF XQorI2RlZmluZSBwc2V1ZG9fY29udHJhY3RfdmlvbGF0aW9uX3R5cGUJY3BfZ2xvYmFsX3RyZWVz W0NQVElfUFNFVURPX0NPTlRSQUNUX1ZJT0xBVElPTl0KIAogLyogV2UgY2FjaGUgdGhlc2UgdHJl ZSBub2RlcyBzbyBhcyB0byBjYWxsIGdldF9pZGVudGlmaWVyIGxlc3MgZnJlcXVlbnRseS4KICAg IEZvciBpZGVudGlmaWVycyBmb3IgZnVuY3Rpb25zLCBpbmNsdWRpbmcgc3BlY2lhbCBtZW1iZXIg ZnVuY3Rpb25zIHN1Y2gKQEAgLTQ1NSw2ICs0NTksNyBAQCBleHRlcm4gR1RZKCgpKSB0cmVlIGNw X2dsb2JhbF90cmVlc1tDUFRJX01BWF07CiAgICAgICBBTElHTk9GX0VYUFJfU1REX1AgKGluIEFM SUdOT0ZfRVhQUikKICAgICAgIE9WTF9ERURVUF9QIChpbiBPVkVSTE9BRCkKICAgICAgIEFUT01J Q19DT05TVFJfTUFQX0lOU1RBTlRJQVRFRF9QIChpbiBBVE9NSUNfQ09OU1RSKQorICAgICAgY29u dHJhY3Rfc2VtYW50aWMgKGluIEFTU0VSVElPTl8sIFBSRUNPTkRJVElPTl8sIFBPU1RDT05ESVRJ T05fU1RNVCkKICAgIDE6IElERU5USUZJRVJfS0lORF9CSVRfMSAoaW4gSURFTlRJRklFUl9OT0RF KQogICAgICAgVElfUEVORElOR19URU1QTEFURV9GTEFHLgogICAgICAgVEVNUExBVEVfUEFSTVNf Rk9SX0lOTElORS4KQEAgLTQ5Myw2ICs0OTgsNyBAQCBleHRlcm4gR1RZKCgpKSB0cmVlIGNwX2ds b2JhbF90cmVlc1tDUFRJX01BWF07CiAgICAgICBMQU1CREFfRVhQUl9DQVBUVVJFX09QVElNSVpF RCAoaW4gTEFNQkRBX0VYUFIpCiAgICAgICBJTVBMSUNJVF9DT05WX0VYUFJfQlJBQ0VEX0lOSVQg KGluIElNUExJQ0lUX0NPTlZfRVhQUikKICAgICAgIFBBQ0tfRVhQQU5TSU9OX0FVVE9fUCAoaW4g Kl9QQUNLX0VYUEFOU0lPTikKKyAgICAgIGNvbnRyYWN0X3NlbWFudGljIChpbiBBU1NFUlRJT05f LCBQUkVDT05ESVRJT05fLCBQT1NUQ09ORElUSU9OX1NUTVQpCiAgICAzOiBJTVBMSUNJVF9SVkFM VUVfUCAoaW4gTk9OX0xWQUxVRV9FWFBSIG9yIFNUQVRJQ19DQVNUX0VYUFIpCiAgICAgICBJQ1Nf QkFEX0ZMQUcgKGluIF9DT05WKQogICAgICAgRk5fVFJZX0JMT0NLX1AgKGluIFRSWV9CTE9DSykK QEAgLTUwNSw2ICs1MTEsNyBAQCBleHRlcm4gR1RZKCgpKSB0cmVlIGNwX2dsb2JhbF90cmVlc1tD UFRJX01BWF07CiAgICAgICBQQUNLX0VYUEFOU0lPTl9GT1JDRV9FWFRSQV9BUkdTX1AgKGluICpf UEFDS19FWFBBTlNJT04pCiAgICAgICBMQU1CREFfRVhQUl9TVEFUSUNfUCAoaW4gTEFNQkRBX0VY UFIpCiAgICAgICBUQVJHRVRfRVhQUl9FTElESU5HX1AgKGluIFRBUkdFVF9FWFBSKQorICAgICAg Y29udHJhY3Rfc2VtYW50aWMgKGluIEFTU0VSVElPTl8sIFBSRUNPTkRJVElPTl8sIFBPU1RDT05E SVRJT05fU1RNVCkKICAgIDQ6IElERU5USUZJRVJfTUFSS0VEIChJREVOVElGSUVSX05PREVzKQog ICAgICAgVFJFRV9IQVNfQ09OU1RSVUNUT1IgKGluIElORElSRUNUX1JFRiwgU0FWRV9FWFBSLCBD T05TVFJVQ1RPUiwKIAkgIENBTExfRVhQUiwgb3IgRklFTERfREVDTCkuCkBAIC0xODYzLDYgKzE4 NzAsNyBAQCBzdHJ1Y3QgR1RZKCgpKSBzYXZlZF9zY29wZSB7CiAgIGludCB4X3Byb2Nlc3Npbmdf dGVtcGxhdGVfZGVjbDsKICAgaW50IHhfcHJvY2Vzc2luZ19zcGVjaWFsaXphdGlvbjsKICAgaW50 IHhfcHJvY2Vzc2luZ19jb25zdHJhaW50OworICBpbnQgeF9wcm9jZXNzaW5nX2NvbnRyYWN0X2Nv bmRpdGlvbjsKICAgaW50IHN1cHByZXNzX2xvY2F0aW9uX3dyYXBwZXJzOwogICBCT09MX0JJVEZJ RUxEIHhfcHJvY2Vzc2luZ19leHBsaWNpdF9pbnN0YW50aWF0aW9uIDogMTsKICAgQk9PTF9CSVRG SUVMRCBuZWVkX3BvcF9mdW5jdGlvbl9jb250ZXh0IDogMTsKQEAgLTE5MzcsNiArMTk0NSwxMiBA QCBleHRlcm4gR1RZKCgpKSBzdHJ1Y3Qgc2F2ZWRfc2NvcGUgKnNjb3BlX2NoYWluOwogI2RlZmlu ZSBwcm9jZXNzaW5nX3NwZWNpYWxpemF0aW9uIHNjb3BlX2NoYWluLT54X3Byb2Nlc3Npbmdfc3Bl Y2lhbGl6YXRpb24KICNkZWZpbmUgcHJvY2Vzc2luZ19leHBsaWNpdF9pbnN0YW50aWF0aW9uIHNj b3BlX2NoYWluLT54X3Byb2Nlc3NpbmdfZXhwbGljaXRfaW5zdGFudGlhdGlvbgogCisvKiBOb256 ZXJvIGlmIHdlIGFyZSBwYXJzaW5nIHRoZSBjb25kaXRpb25hbCBleHByZXNzaW9uIG9mIGEgY29u dHJhY3QKKyAgIGNvbmRpdGlvbi4gVGhlc2UgZXhwcmVzc2lvbnMgYXBwZWFyIG91dHNpZGUgdGhl IHBhcmFtdGVyIGxpc3QgKGxpa2UgYQorICAgdHJhaWxpbmcgcmV0dXJuIHR5cGUpLCBidXQgYXJl IHBvdGVudGlhbGx5IGV2YWx1YXRlZC4gICovCisKKyNkZWZpbmUgcHJvY2Vzc2luZ19jb250cmFj dF9jb25kaXRpb24gc2NvcGVfY2hhaW4tPnhfcHJvY2Vzc2luZ19jb250cmFjdF9jb25kaXRpb24K KwogI2RlZmluZSBpbl9kaXNjYXJkZWRfc3RtdCBzY29wZV9jaGFpbi0+ZGlzY2FyZGVkX3N0bXQK ICNkZWZpbmUgaW5fY29uc3RldmFsX2lmX3Agc2NvcGVfY2hhaW4tPmNvbnN0ZXZhbF9pZl9wCiAK QEAgLTU2NTEsNiArNTY2NSwxMSBAQCBleHRlcm4gaW50IGNvbXBhcmluZ19zcGVjaWFsaXphdGlv bnM7CiAgICBGSVhNRSB3ZSBzaG91bGQgYWx3YXlzIGRvIHRoaXMgZXhjZXB0IGR1cmluZyBkZWR1 Y3Rpb24vb3JkZXJpbmcuICAqLwogZXh0ZXJuIGludCBjb21wYXJpbmdfZGVwZW5kZW50X2FsaWFz ZXM7CiAKKy8qIE5vbnplcm8gaWYgd2Ugd2FudCB0byBjb25zaWRlciBkaWZmZXJlbnQgbWVtYmVy IGV4cHJlc3Npb25zIHRvIGNvbXBhcmUKKyAgIGVxdWFsIGlmIHRoZXkgZGVzaWduYXRlIHRoZSBz YW1lIGVudGl0eS4gVGhpcyBpcyBzZXQgd2hlbiBjb21wYXJpbmcKKyAgIGNvbnRyYWN0IGNvbmRp dGlvbnMgb2Ygb3ZlcnJpZGVzLiAgKi8KK2V4dGVybiBib29sIGNvbXBhcmluZ19vdmVycmlkZV9j b250cmFjdHM7CisKIC8qIEluIHBhcnNlci5jYy4gICovCiAKIC8qIE5vbnplcm8gaWYgd2UgYXJl IHBhcnNpbmcgYW4gdW5ldmFsdWF0ZWQgb3BlcmFuZDogYW4gb3BlcmFuZCB0bwpAQCAtNzQ1Myw4 ICs3NDcyLDEwIEBAIGV4dGVybiBoYXNodmFsX3QgaXRlcmF0aXZlX2hhc2hfdGVtcGxhdGVfYXJn CSh0cmVlIGFyZywgaGFzaHZhbF90IHZhbCk7CiBleHRlcm4gdHJlZSBjb2VyY2VfdGVtcGxhdGVf cGFybXMJCSh0cmVlLCB0cmVlLCB0cmVlLCB0c3Vic3RfZmxhZ3NfdCwKIAkJCQkJCSBib29sID0g dHJ1ZSk7CiBleHRlcm4gdHJlZSBjYW5vbmljYWxpemVfdHlwZV9hcmd1bWVudAkJKHRyZWUsIHRz dWJzdF9mbGFnc190KTsKK2V4dGVybiB2b2lkIHJlZ2lzdGVyX2xvY2FsX2lkZW50aXR5CQkodHJl ZSk7CiBleHRlcm4gdm9pZCByZWdpc3Rlcl9sb2NhbF9zcGVjaWFsaXphdGlvbiAgICAgICAodHJl ZSwgdHJlZSk7CiBleHRlcm4gdHJlZSByZXRyaWV2ZV9sb2NhbF9zcGVjaWFsaXphdGlvbiAgICAg ICAodHJlZSk7CitleHRlcm4gdm9pZCByZWdpc3Rlcl9wYXJhbWV0ZXJfc3BlY2lhbGl6YXRpb25z CSh0cmVlLCB0cmVlKTsKIGV4dGVybiB0cmVlIGV4dHJhY3RfZm5wYXJtX3BhY2sgICAgICAgICAg ICAgICAgICh0cmVlLCB0cmVlICopOwogZXh0ZXJuIHRyZWUgdGVtcGxhdGVfcGFybV90b19hcmcg ICAgICAgICAgICAgICAgKHRyZWUpOwogZXh0ZXJuIHRyZWUgZGd1aWRlX25hbWUJCQkJKHRyZWUp OwpAQCAtODUyNiw2ICs4NTQ3LDQ5IEBAIGV4dGVybiB0cmVlIGNvcm9fZ2V0X2FjdG9yX2Z1bmN0 aW9uCQkodHJlZSk7CiBleHRlcm4gdHJlZSBjb3JvX2dldF9kZXN0cm95X2Z1bmN0aW9uCQkodHJl ZSk7CiBleHRlcm4gdHJlZSBjb3JvX2dldF9yYW1wX2Z1bmN0aW9uCQkodHJlZSk7CiAKKy8qIGNv bnRyYWN0cy5jYyAqLworZXh0ZXJuIHRyZWUgbWFrZV9wb3N0Y29uZGl0aW9uX3ZhcmlhYmxlCQko Y3BfZXhwcik7CitleHRlcm4gdHJlZSBtYWtlX3Bvc3Rjb25kaXRpb25fdmFyaWFibGUJCShjcF9l eHByLCB0cmVlKTsKK2V4dGVybiB0cmVlIGdyb2tfY29udHJhY3QJCQkodHJlZSwgdHJlZSwgdHJl ZSwgY3BfZXhwciwgbG9jYXRpb25fdCk7CitleHRlcm4gdHJlZSBmaW5pc2hfY29udHJhY3RfY29u ZGl0aW9uCQkoY3BfZXhwcik7CisKKy8qIFJldHVybiB0aGUgZmlyc3QgY29udHJhY3QgaW4gQVRU UlMsIG9yIE5VTExfVFJFRSBpZiB0aGVyZSBhcmUgbm9uZS4gICovCisKK2lubGluZSB0cmVlCitm aW5kX2NvbnRyYWN0ICh0cmVlIGF0dHJzKQoreworICB3aGlsZSAoYXR0cnMgJiYgIWN4eF9jb250 cmFjdF9hdHRyaWJ1dGVfcCAoYXR0cnMpKQorICAgIGF0dHJzID0gVFJFRV9DSEFJTiAoYXR0cnMp OworICByZXR1cm4gYXR0cnM7Cit9CisKK2lubGluZSB2b2lkCitzZXRfZGVjbF9jb250cmFjdHMg KHRyZWUgZGVjbCwgdHJlZSBjb250cmFjdF9hdHRycykKK3sKKyAgcmVtb3ZlX2NvbnRyYWN0X2F0 dHJpYnV0ZXMgKGRlY2wpOworICBERUNMX0FUVFJJQlVURVMgKGRlY2wpID0gY2hhaW5vbiAoREVD TF9BVFRSSUJVVEVTIChkZWNsKSwgY29udHJhY3RfYXR0cnMpOworfQorCisvKiBSZXR1cm5zIHRo ZSBjb21wdXRlZCBzZW1hbnRpYyBvZiB0aGUgbm9kZS4gICovCisKK2lubGluZSBjb250cmFjdF9z ZW1hbnRpYworZ2V0X2NvbnRyYWN0X3NlbWFudGljIChjb25zdF90cmVlIHQpCit7CisgIHJldHVy biAoY29udHJhY3Rfc2VtYW50aWMpIChUUkVFX0xBTkdfRkxBR18zIChDT05UUkFDVF9DSEVDSyAo dCkpCisgICAgICB8IChUUkVFX0xBTkdfRkxBR18yICh0KSA8PCAxKQorICAgICAgfCAoVFJFRV9M QU5HX0ZMQUdfMCAoKHQpKSA8PCAyKSk7Cit9CisKKy8qIFNldHMgdGhlIGNvbXB1dGVkIHNlbWFu dGljIG9mIHRoZSBub2RlLiAgKi8KKworaW5saW5lIHZvaWQKK3NldF9jb250cmFjdF9zZW1hbnRp YyAodHJlZSB0LCBjb250cmFjdF9zZW1hbnRpYyBzZW1hbnRpYykKK3sKKyAgVFJFRV9MQU5HX0ZM QUdfMyAoQ09OVFJBQ1RfQ0hFQ0sgKHQpKSA9IHNlbWFudGljICYgMHgwMTsKKyAgVFJFRV9MQU5H X0ZMQUdfMiAodCkgPSAoc2VtYW50aWMgJiAweDAyKSA+PiAxOworICBUUkVFX0xBTkdfRkxBR18w ICh0KSA9IChzZW1hbnRpYyAmIDB4MDQpID4+IDI7Cit9CisKIC8qIElubGluZSBib2RpZXMuICAq LwogICAKIGlubGluZSB0cmVlCmRpZmYgLS1naXQgYS9nY2MvY3AvcGFyc2VyLmggYi9nY2MvY3Av cGFyc2VyLmgKaW5kZXggM2U5NWJmYzEzMWIuLjU3MzcxNDZkZDQyIDEwMDY0NAotLS0gYS9nY2Mv Y3AvcGFyc2VyLmgKKysrIGIvZ2NjL2NwL3BhcnNlci5oCkBAIC0xNzgsNiArMTc4LDkgQEAgc3Ry dWN0IEdUWSgoKSkgY3BfdW5wYXJzZWRfZnVuY3Rpb25zX2VudHJ5IHsKIAogICAvKiBGdW5jdGlv bnMgd2l0aCBub2V4Y2VwdC1zcGVjaWZpZXJzIHRoYXQgcmVxdWlyZSBwb3N0LXByb2Nlc3Npbmcu ICAqLwogICB2ZWM8dHJlZSwgdmFfZ2M+ICpub2V4Y2VwdHM7CisKKyAgLyogRnVuY3Rpb25zIHdp dGggY29udHJhY3QgYXR0cmlidXRlcyB0aGF0IHJlcXVpcmUgcG9zdC1wcm9jZXNzaW5nLiAgKi8K KyAgdmVjPHRyZWUsIHZhX2djPiAqY29udHJhY3RzOwogfTsKIAogCmRpZmYgLS1naXQgYS9nY2Mv Yy1mYW1pbHkvYy1jcHBidWlsdGluLmNjIGIvZ2NjL2MtZmFtaWx5L2MtY3BwYnVpbHRpbi5jYwpp bmRleCAyNjQ0N2QwMjA5Ny4uZmIxMWQ4NzU0YzYgMTAwNjQ0Ci0tLSBhL2djYy9jLWZhbWlseS9j LWNwcGJ1aWx0aW4uY2MKKysrIGIvZ2NjL2MtZmFtaWx5L2MtY3BwYnVpbHRpbi5jYwpAQCAtMTA4 Nyw2ICsxMDg3LDEyIEBAIGNfY3BwX2J1aWx0aW5zIChjcHBfcmVhZGVyICpwZmlsZSkKICAgICAg ICAgICBlbHNlCiAgICAgICAgICAgICBjcHBfZGVmaW5lIChwZmlsZSwgIl9fY3BwX2NvbmNlcHRz PTIwMTUwN0wiKTsKICAgICAgICAgfQorICAgICAgaWYgKGZsYWdfY29udHJhY3RzKQorCXsKKwkg IGNwcF9kZWZpbmUgKHBmaWxlLCAiX19jcHBfY29udHJhY3RzPTIwMTkwNkwiKTsKKwkgIGNwcF9k ZWZpbmUgKHBmaWxlLCAiX19jcHBfY29udHJhY3RzX2xpdGVyYWxfc2VtYW50aWNzPTIwMTkwNkwi KTsKKwkgIGNwcF9kZWZpbmUgKHBmaWxlLCAiX19jcHBfY29udHJhY3RzX3JvbGVzPTIwMTkwNkwi KTsKKwl9CiAgICAgICBpZiAoZmxhZ19tb2R1bGVzKQogCS8qIFRoZSBzdGQtZGVmaW5lZCB2YWx1 ZSBpcyAyMDE5MDdMLCBidXQgSSBkb24ndCB0aGluayB3ZSBjYW4KIAkgICBjbGFpbSB2aWN0b3J5 IHlldC4gIDIwMTgxMCBpcyB0aGUgcDExMDMgZGF0ZS4gKi8KZGlmZiAtLWdpdCBhL2djYy9jcC9j b25zdGV4cHIuY2MgYi9nY2MvY3AvY29uc3RleHByLmNjCmluZGV4IGEzOTBjZjkyMWYzLi5hZDQz ODk3YjA3NiAxMDA2NDQKLS0tIGEvZ2NjL2NwL2NvbnN0ZXhwci5jYworKysgYi9nY2MvY3AvY29u c3RleHByLmNjCkBAIC0zOSw2ICszOSw3IEBAIGFsb25nIHdpdGggR0NDOyBzZWUgdGhlIGZpbGUg Q09QWUlORzMuICBJZiBub3Qgc2VlCiAjaW5jbHVkZSAic3RyaW5ncG9vbC5oIgogI2luY2x1ZGUg ImF0dHJpYnMuaCIKICNpbmNsdWRlICJmb2xkLWNvbnN0LmgiCisjaW5jbHVkZSAiaW50bC5oIgog CiBzdGF0aWMgYm9vbCB2ZXJpZnlfY29uc3RhbnQgKHRyZWUsIGJvb2wsIGJvb2wgKiwgYm9vbCAq KTsKICNkZWZpbmUgVkVSSUZZX0NPTlNUQU5UKFgpCQkJCQkJXApAQCAtMTk4OCw2ICsxOTg5LDYx IEBAIGRpYWdub3NlX2ZhaWxpbmdfY29uZGl0aW9uICh0cmVlIGJhZCwgbG9jYXRpb25fdCBjbG9j LCBib29sIHNob3dfZXhwcl9wLAogICAgIGluZm9ybSAoY2xvYywgIiVxRSBldmFsdWF0ZXMgdG8g ZmFsc2UiLCBiYWQpOwogfQogCisvKiBQcm9jZXNzIGFuIGFzc2VydC9hc3N1bWUgb2YgT1JJR19B UkcuICBJZiBpdCdzIG5vdCBzdXBwb3NlZCB0byBiZSBldmFsdWF0ZWQsCisgICBkbyBpdCB3aXRo b3V0IGNoYW5naW5nIHRoZSBjdXJyZW50IGV2YWx1YXRpb24gc3RhdGUuICBJZiBpdCBldmFsdWF0 ZXMgdG8KKyAgIGZhbHNlLCBjb21wbGFpbiBhbmQgcmV0dXJuIGZhbHNlOyBvdGhlcndpc2UsIHJl dHVybiB0cnVlLiAgKi8KKworc3RhdGljIGJvb2wKK2N4eF9ldmFsX2Fzc2VydCAoY29uc3QgY29u c3RleHByX2N0eCAqY3R4LCB0cmVlIGFyZywgY29uc3QgY2hhciAqbXNnLAorCQkgbG9jYXRpb25f dCBsb2MsIGJvb2wgZXZhbHVhdGVkLAorCQkgYm9vbCAqbm9uX2NvbnN0YW50X3AsIGJvb2wgKm92 ZXJmbG93X3ApCit7CisgIGlmICgqbm9uX2NvbnN0YW50X3ApCisgICAgcmV0dXJuIHRydWU7CisK KyAgdHJlZSBldmFsOworICBpZiAoIWV2YWx1YXRlZCkKKyAgICB7CisgICAgICBpZiAoIXBvdGVu dGlhbF9ydmFsdWVfY29uc3RhbnRfZXhwcmVzc2lvbiAoYXJnKSkKKwlyZXR1cm4gdHJ1ZTsKKwor ICAgICAgY29uc3RleHByX2N0eCBuZXdfY3R4ID0gKmN0eDsKKyAgICAgIG5ld19jdHgucXVpZXQg PSB0cnVlOworICAgICAgYm9vbCBuZXdfbm9uX2NvbnN0YW50X3AgPSBmYWxzZSwgbmV3X292ZXJm bG93X3AgPSBmYWxzZTsKKyAgICAgIC8qIEF2b2lkIG1vZGlmaWNhdGlvbiBvZiBleGlzdGluZyB2 YWx1ZXMuICAqLworICAgICAgbW9kaWZpYWJsZV90cmFja2VyIG1zIChuZXdfY3R4Lmdsb2JhbCk7 CisgICAgICBldmFsID0gY3h4X2V2YWxfY29uc3RhbnRfZXhwcmVzc2lvbiAoJm5ld19jdHgsIGFy ZywgdmNfcHJ2YWx1ZSwKKwkJCQkJICAgJm5ld19ub25fY29uc3RhbnRfcCwKKwkJCQkJICAgJm5l d19vdmVyZmxvd19wKTsKKyAgICB9CisgIGVsc2UKKyAgICBldmFsID0gY3h4X2V2YWxfY29uc3Rh bnRfZXhwcmVzc2lvbiAoY3R4LCBhcmcsIHZjX3BydmFsdWUsCisJCQkJCSBub25fY29uc3RhbnRf cCwKKwkJCQkJIG92ZXJmbG93X3ApOworICBpZiAoISpub25fY29uc3RhbnRfcCAmJiBpbnRlZ2Vy X3plcm9wIChldmFsKSkKKyAgICB7CisgICAgICBpZiAoIWN0eC0+cXVpZXQpCisJeworCSAgLyog U2VlIGlmIHdlIGNhbiBmaW5kIHdoaWNoIGNsYXVzZSB3YXMgZmFpbGluZworCSAgICAgKGZvciBs b2dpY2FsIEFORCkuICAqLworCSAgdHJlZSBiYWQgPSBmaW5kX2ZhaWxpbmdfY2xhdXNlIChjdHgs IGFyZyk7CisJICAvKiBJZiBub3QsIG9yIGl0cyBsb2NhdGlvbiBpcyB1bnVzYWJsZSwgZmFsbCBi YWNrIHRvIHRoZQorCSAgICAgcHJldmlvdXMgbG9jYXRpb24uICAqLworCSAgbG9jYXRpb25fdCBj bG9jID0gY3BfZXhwcl9sb2Nfb3JfbG9jIChiYWQsIGxvYyk7CisKKwkgIC8qIFJlcG9ydCB0aGUg ZXJyb3IuICovCisJICBhdXRvX2RpYWdub3N0aWNfZ3JvdXAgZDsKKwkgIGVycm9yX2F0IChjbG9j LCBtc2cpOworCSAgZGlhZ25vc2VfZmFpbGluZ19jb25kaXRpb24gKGJhZCwgY2xvYywgdHJ1ZSwg Y3R4KTsKKwkgIHJldHVybiBiYWQ7CisJfQorICAgICAgKm5vbl9jb25zdGFudF9wID0gdHJ1ZTsK KyAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgcmV0dXJuIHRydWU7Cit9CisKIC8qIEV2 YWx1YXRlIGEgY2FsbCBUIHRvIGEgR0NDIGludGVybmFsIGZ1bmN0aW9uIHdoZW4gcG9zc2libGUg YW5kIHJldHVybgogICAgdGhlIGV2YWx1YXRlZCByZXN1bHQgb3IsIHVuZGVyIHRoZSBjb250cm9s IG9mIENUWCwgZ2l2ZSBhbiBlcnJvciwgc2V0CiAgICBOT05fQ09OU1RBTlRfUCwgYW5kIHJldHVy biB0aGUgdW5ldmFsdWF0ZWQgY2FsbCBUIG90aGVyd2lzZS4gICovCkBAIC0yMDA4LDQxICsyMDY0 LDExIEBAIGN4eF9ldmFsX2ludGVybmFsX2Z1bmN0aW9uIChjb25zdCBjb25zdGV4cHJfY3R4ICpj dHgsIHRyZWUgdCwKICAgICAgIHJldHVybiB2b2lkX25vZGU7CiAKICAgICBjYXNlIElGTl9BU1NV TUU6Ci0gICAgICBpZiAocG90ZW50aWFsX3J2YWx1ZV9jb25zdGFudF9leHByZXNzaW9uIChDQUxM X0VYUFJfQVJHICh0LCAwKSkpCi0JewotCSAgY29uc3RleHByX2N0eCBuZXdfY3R4ID0gKmN0eDsK LQkgIG5ld19jdHgucXVpZXQgPSB0cnVlOwotCSAgdHJlZSBhcmcgPSBDQUxMX0VYUFJfQVJHICh0 LCAwKTsKLQkgIGJvb2wgbmV3X25vbl9jb25zdGFudF9wID0gZmFsc2UsIG5ld19vdmVyZmxvd19w ID0gZmFsc2U7Ci0JICAvKiBBdm9pZCBtb2RpZmljYXRpb24gb2YgZXhpc3RpbmcgdmFsdWVzLiAg Ki8KLQkgIG1vZGlmaWFibGVfdHJhY2tlciBtcyAobmV3X2N0eC5nbG9iYWwpOwotCSAgYXJnID0g Y3h4X2V2YWxfY29uc3RhbnRfZXhwcmVzc2lvbiAoJm5ld19jdHgsIGFyZywgdmNfcHJ2YWx1ZSwK LQkJCQkJICAgICAgJm5ld19ub25fY29uc3RhbnRfcCwKLQkJCQkJICAgICAgJm5ld19vdmVyZmxv d19wKTsKLQkgIGlmICghbmV3X25vbl9jb25zdGFudF9wICYmICFuZXdfb3ZlcmZsb3dfcCAmJiBp bnRlZ2VyX3plcm9wIChhcmcpKQotCSAgICB7Ci0JICAgICAgaWYgKCEqbm9uX2NvbnN0YW50X3Ag JiYgIWN0eC0+cXVpZXQpCi0JCXsKLQkJICAvKiBTZWUgaWYgd2UgY2FuIGZpbmQgd2hpY2ggY2xh dXNlIHdhcyBmYWlsaW5nCi0JCSAgICAgKGZvciBsb2dpY2FsIEFORCkuICAqLwotCQkgIHRyZWUg YmFkID0gZmluZF9mYWlsaW5nX2NsYXVzZSAoJm5ld19jdHgsCi0JCQkJCQkgIENBTExfRVhQUl9B UkcgKHQsIDApKTsKLQkJICAvKiBJZiBub3QsIG9yIGl0cyBsb2NhdGlvbiBpcyB1bnVzYWJsZSwg ZmFsbCBiYWNrIHRvIHRoZQotCQkgICAgIHByZXZpb3VzIGxvY2F0aW9uLiAgKi8KLQkJICBsb2Nh dGlvbl90IGNsb2MgPSBjcF9leHByX2xvY19vcl9sb2MgKGJhZCwgRVhQUl9MT0NBVElPTiAodCkp OwotCi0JCSAgYXV0b19kaWFnbm9zdGljX2dyb3VwIGQ7Ci0KLQkJICAvKiBSZXBvcnQgdGhlIGVy cm9yLiAqLwotCQkgIGVycm9yX2F0IChjbG9jLAotCQkJICAgICJmYWlsZWQgJTxhc3N1bWUlPiBh dHRyaWJ1dGUgYXNzdW1wdGlvbiIpOwotCQkgIGRpYWdub3NlX2ZhaWxpbmdfY29uZGl0aW9uIChi YWQsIGNsb2MsIGZhbHNlLCAmbmV3X2N0eCk7Ci0JCX0KLQotCSAgICAgICpub25fY29uc3RhbnRf cCA9IHRydWU7Ci0JICAgICAgcmV0dXJuIHQ7Ci0JICAgIH0KLQl9CisgICAgICBpZiAoIWN4eF9l dmFsX2Fzc2VydCAoY3R4LCBDQUxMX0VYUFJfQVJHICh0LCAwKSwKKwkJCSAgICBHXygiZmFpbGVk ICU8YXNzdW1lJT4gYXR0cmlidXRlIGFzc3VtcHRpb24iKSwKKwkJCSAgICBFWFBSX0xPQ0FUSU9O ICh0KSwgLypldmFsKi9mYWxzZSwKKwkJCSAgICBub25fY29uc3RhbnRfcCwgb3ZlcmZsb3dfcCkp CisJcmV0dXJuIHQ7CiAgICAgICByZXR1cm4gdm9pZF9ub2RlOwogCiAgICAgY2FzZSBJRk5fQURE X09WRVJGTE9XOgpAQCAtNzkwMSw2ICs3OTI3LDI0IEBAIGN4eF9ldmFsX2NvbnN0YW50X2V4cHJl c3Npb24gKGNvbnN0IGNvbnN0ZXhwcl9jdHggKmN0eCwgdHJlZSB0LAogICAgICAgciA9IHZvaWRf bm9kZTsKICAgICAgIGJyZWFrOwogCisgICAgY2FzZSBBU1NFUlRJT05fU1RNVDoKKyAgICBjYXNl IFBSRUNPTkRJVElPTl9TVE1UOgorICAgIGNhc2UgUE9TVENPTkRJVElPTl9TVE1UOgorICAgICAg eworCWNvbnRyYWN0X3NlbWFudGljIHNlbWFudGljID0gZ2V0X2NvbnRyYWN0X3NlbWFudGljICh0 KTsKKwlpZiAoc2VtYW50aWMgPT0gQ0NTX0lHTk9SRSkKKwkgIGJyZWFrOworCisJaWYgKCFjeHhf ZXZhbF9hc3NlcnQgKGN0eCwgQ09OVFJBQ1RfQ09ORElUSU9OICh0KSwKKwkJCSAgICAgIEdfKCJj b250cmFjdCBwcmVkaWNhdGUgaXMgZmFsc2UgaW4gIgorCQkJCSAiY29uc3RhbnQgZXhwcmVzc2lv biIpLAorCQkJICAgICAgRVhQUl9MT0NBVElPTiAodCksIGNoZWNrZWRfY29udHJhY3RfcCAoc2Vt YW50aWMpLAorCQkJICAgICAgbm9uX2NvbnN0YW50X3AsIG92ZXJmbG93X3ApKQorCSAgKm5vbl9j b25zdGFudF9wID0gdHJ1ZTsKKwlyID0gdm9pZF9ub2RlOworICAgICAgfQorICAgICAgYnJlYWs7 CisKICAgICBjYXNlIFRFTVBMQVRFX0lEX0VYUFI6CiAgICAgICB7CiAgICAgICAgIC8qIFdlIGNh biBldmFsdWF0ZSB0ZW1wbGF0ZS1pZCB0aGF0IHJlZmVycyB0byBhIGNvbmNlcHQgb25seSBpZgpA QCAtOTg5NCw2ICs5OTM4LDEzIEBAIHBvdGVudGlhbF9jb25zdGFudF9leHByZXNzaW9uXzEgKHRy ZWUgdCwgYm9vbCB3YW50X3J2YWwsIGJvb2wgc3RyaWN0LCBib29sIG5vdywKIAlyZXR1cm4gZmFs c2U7CiAgICAgICB9CiAKKyAgICBjYXNlIEFTU0VSVElPTl9TVE1UOgorICAgIGNhc2UgUFJFQ09O RElUSU9OX1NUTVQ6CisgICAgY2FzZSBQT1NUQ09ORElUSU9OX1NUTVQ6CisgICAgICBpZiAoIWNo ZWNrZWRfY29udHJhY3RfcCAoZ2V0X2NvbnRyYWN0X3NlbWFudGljICh0KSkpCisJcmV0dXJuIHRy dWU7CisgICAgICByZXR1cm4gUkVDVVIgKENPTlRSQUNUX0NPTkRJVElPTiAodCksIHJ2YWwpOwor CiAgICAgY2FzZSBMQUJFTF9FWFBSOgogICAgICAgdCA9IExBQkVMX0VYUFJfTEFCRUwgKHQpOwog ICAgICAgaWYgKERFQ0xfQVJUSUZJQ0lBTCAodCkgfHwgY3h4X2RpYWxlY3QgPj0gY3h4MjMpCmRp ZmYgLS1naXQgYS9nY2MvY3AvY29udHJhY3RzLmNjIGIvZ2NjL2NwL2NvbnRyYWN0cy5jYwpuZXcg ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uMjYzOTY0MzkzNjEKLS0tIC9kZXYv bnVsbAorKysgYi9nY2MvY3AvY29udHJhY3RzLmNjCkBAIC0wLDAgKzEsMjI0MCBAQAorLyogRGVm aW5pdGlvbnMgZm9yIEMrKyBjb250cmFjdCBsZXZlbHMKKyAgIENvcHlyaWdodCAoQykgMjAyMC0y MDIyIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorICAgQ29udHJpYnV0ZWQgYnkgSmVm ZiBDaGFwbWFuIElJIChqY2hhcG1hbkBsb2NrM3NvZnR3YXJlLmNvbSkKKworVGhpcyBmaWxlIGlz IHBhcnQgb2YgR0NDLgorCitHQ0MgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1 dGUgaXQgYW5kL29yIG1vZGlmeQoraXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJh bCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKK3RoZSBGcmVlIFNvZnR3YXJlIEZvdW5k YXRpb247IGVpdGhlciB2ZXJzaW9uIDMsIG9yIChhdCB5b3VyIG9wdGlvbikKK2FueSBsYXRlciB2 ZXJzaW9uLgorCitHQ0MgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJl IHVzZWZ1bCwKK2J1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBs aWVkIHdhcnJhbnR5IG9mCitNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNV TEFSIFBVUlBPU0UuICBTZWUgdGhlCitHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9y ZSBkZXRhaWxzLgorCitZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUg R2VuZXJhbCBQdWJsaWMgTGljZW5zZQorYWxvbmcgd2l0aCBHQ0M7IHNlZSB0aGUgZmlsZSBDT1BZ SU5HMy4gIElmIG5vdCBzZWUKKzxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4gICovCisK Ky8qIERlc2lnbiBOb3RlcworCisgICBBIGZ1bmN0aW9uIGlzIGNhbGxlZCBhICJndWFyZGVkIiBm dW5jdGlvbiBpZiBpdCBoYXMgcHJlIG9yIHBvc3QgY29udHJhY3QKKyAgIGF0dHJpYnV0ZXMuIEEg Y29udHJhY3QgaXMgY29uc2lkZXJlZCBhbiAiYWN0aXZlIiBjb250cmFjdCBpZiBydW50aW1lIGNv ZGUgaXMKKyAgIG5lZWRlZCBmb3IgdGhlIGNvbnRyYWN0IHVuZGVyIHRoZSBjdXJyZW50IGNvbnRy YWN0IGNvbmZpZ3VyYXRpb24uCisKKyAgIHByZSBhbmQgcG9zdCBjb250cmFjdCBhdHRyaWJ1dGVz IGFyZSBwYXJzZWQgYW5kIHN0b3JlZCBpbiBERUNMX0FUVFJJQlVURVMuCisgICBhc3NlcnQgY29u dHJhY3RzIGFyZSBwYXJzZWQgYW5kIHdyYXBwZWQgaW4gc3RhdGVtZW50cy4gV2hlbiBnZW5lcmlj aXppbmcsIGFsbAorICAgYWN0aXZlIGFuZCBhc3N1bWVkIGNvbnRyYWN0cyBhcmUgdHJhbnNmb3Jt ZWQgaW50byBhbiBpZiBibG9jay4gQW4gb2JzZXJ2ZWQKKyAgIGNvbnRyYWN0OgorCisgICAgIFtb IHByZTogdiA+IDAgXV0KKworICAgaXMgdHJhbnNmb3JtZWQgaW50bzoKKworICAgICBpZiAoISh2 ID4gMCkpIHsKKyAgICAgICBoYW5kbGVfY29udHJhY3RfdmlvbGF0aW9uKF9fcHNldWRvX2NvbnRy YWN0X3Zpb2xhdGlvbnsKKwkgNSwgLy8gbGluZV9udW1iZXIsCisJICJtYWluLmNwcCIsIC8vIGZp bGVfbmFtZSwKKwkgImZ1biIsIC8vIGZ1bmN0aW9uX25hbWUsCisJICJ2ID4gMCIsIC8vIGNvbW1l bnQsCisJICJkZWZhdWx0IiwgLy8gYXNzZXJ0aW9uX2xldmVsLAorCSAiZGVmYXVsdCIsIC8vIGFz c2VydGlvbl9yb2xlLAorCSBNQVlCRV9DT05USU5VRSwgLy8gY29udGludWF0aW9uX21vZGUKKyAg ICAgICB9KTsKKyAgICAgICB0ZXJtaW5hdGUgKCk7IC8vIGlmIE5FVkVSX0NPTlRJTlVFCisgICAg IH0KKworICAgV2UgdXNlIGFuIGludGVybmFsIHR5cGUgd2l0aCB0aGUgc2FtZSBsYXlvdXQgYXMg Y29udHJhY3RfdmlvbGF0aW9uIHJhdGhlcgorICAgdGhhbiB0cnkgdG8gZGVmaW5lIHRoZSBsYXR0 ZXIgaW50ZXJuYWxseSBhbmQgc29tZWhvdyBkZWFsIHdpdGggaXRzIGFjdHVhbAorICAgZGVmaW5p dGlvbiBpbiBhIFRVIHRoYXQgaW5jbHVkZXMgPGNvbnRyYWN0Pi4KKworICAgPz8/IGlzIGl0IHdv cnRoIGZhY3RvcmluZyBvdXQgdGhlIGNhbGxzIHRvIGhhbmRsZV9jb250cmFjdF92aW9sYXRpb24g YW5kCisgICB0ZXJtaW5hdGUgaW50byBhIGxvY2FsIGZ1bmN0aW9uPworCisgICBBc3N1bWVkIGNv bnRyYWN0cyB1c2UgdGhlIHNhbWUgaW1wbGVtZW50YXRpb24gYXMgQysrMjMgW1thc3N1bWVdXS4K KworICAgUGFyc2luZyBvZiBwcmUgYW5kIHBvc3QgY29udHJhY3QgY29uZGl0aW9ucyBuZWVkIHRv IGJlIGRlZmVycmVkIHdoZW4gdGhlCisgICBjb250cmFjdHMgYXJlIGF0dGFjaGVkIHRvIGEgbWVt YmVyIGZ1bmN0aW9uLiBUaGUgcG9zdGNvbmRpdGlvbiBpZGVudGlmaWVyCisgICBjYW5ub3QgYmUg dXNlZCBiZWZvcmUgdGhlIGRlZHVjZWQgcmV0dXJuIHR5cGUgb2YgYW4gYXV0byBmdW5jdGlvbiBp cyB1c2VkLAorICAgZXhjZXB0IHdoZW4gdXNlZCBpbiBhIGRlZmluaW5nIGRlY2xhcmF0aW9uIGlu IHdoaWNoIGNhc2UgdGhleSBjb25kaXRpb25zIGFyZQorICAgZnVsbHkgcGFyc2VkIG9uY2UgdGhl IGJvZHkgaXMgZmluaXNoZWQgKHNlZSBjcHAyYS9jb250cmFjdHMtZGVkdWNlZHsxLDJ9LkMpLgor CisgICBBIGxpc3Qgb2YgcHJlIGFuZCBwb3N0IGNvbnRyYWN0cyBjYW4gZWl0aGVyIGJlIHJlcGVh dGVkIGluIHRoZWlyIGVudGlyZXR5IG9yCisgICBjb21wbGV0ZWx5IGFic2VudCBpbiBzdWJzZXF1 ZW50IGRlY2xhcmF0aW9ucy4gSWYgY29udHJhY3QgbGlzdHMgYXBwZWFyIG9uIHR3bworICAgbWF0 Y2hpbmcgZGVjbGFyYXRpb25zLCB0aGVpciBjb250cmFjdHMgaGF2ZSB0byBiZSBlcXVpdmFsZW50 LiBJbiBnZW5lcmFsIHRoaXMKKyAgIG1lYW5zIHRoYXQgYW55dGhpbmcgYmVmb3JlIHRoZSBjb2xv biBoYXZlIHRvIGJlIHRva2VuIGVxdWl2YWxlbnQgYW5kIHRoZQorICAgY29uZGl0aW9uIG11c3Qg YmUgY3BfdHJlZV9lcXVhbCAocHJpbWFyaWx5IHRvIGFsbG93IGZvciBwYXJhbWV0ZXIgcmVuYW1p bmcpLgorCisgICBDb250cmFjdHMgb24gb3ZlcnJpZGVzIG11c3QgbWF0Y2ggdGhvc2UgcHJlc2Vu dCBvbiAoYWxsIG9mKSB0aGUgb3ZlcnJpZGVlKHMpLgorCisgICBUZW1wbGF0ZSBzcGVjaWFsaXph dGlvbnMgbWF5IGhhdmUgdGhlaXIgb3duIGNvbnRyYWN0cy4gSWYgbm8gY29udHJhY3RzIGFyZQor ICAgc3BlY2lmaWVkIG9uIHRoZSBpbml0aWFsIHNwZWNpYWxpemF0aW9uIHRoZXkncmUgYXNzdW1l ZCB0byBiZSB0aGUgc2FtZSBhcworICAgdGhlIHByaW1hcnkgdGVtcGxhdGUuIFNwZWNpYWxpemF0 aW9uIHJlZGVjbGFyYXRpb25zIG11c3QgdGhlbiBtYXRjaCBlaXRoZXIKKyAgIHRoZSBwcmltYXJ5 IHRlbXBsYXRlIChpZiB0aGV5IHdlcmUgdW5zcGVjaWZpZWQgb3JpZ2luYWxseSksIG9yIHRob3Nl CisgICBzcGVjaWZpZWQgb24gdGhlIHNwZWNpYWxpemF0aW9uLgorCisKKyAgIEZvciBub24tY2R0 b3JzIHR3byBmdW5jdGlvbnMgYXJlIGdlbmVyYXRlZCBmb3IgZWFzZSBvZiBpbXBsZW1lbnRhdGlv biBhbmQgdG8KKyAgIGF2b2lkIHNvbWUgY2FzZXMgd2hlcmUgY29kZSBibG9hdCBtYXkgb2NjdXJy LiBUaGVzZSBhcmUgdGhlIERFQ0xfUFJFX0ZOIGFuZAorICAgREVDTF9QT1NUX0ZOLiBFYWNoIGhh bmRsZXMgY2hlY2tpbmcgZWl0aGVyIHRoZSBzZXQgb2YgcHJlIG9yIHBvc3QgY29udHJhY3RzCisg ICBvZiBhIGd1YXJkZWQgZnVuY3Rpb24uCisKKyAgICAgaW50IGZ1bihpbnQgdikKKyAgICAgICBb WyBwcmU6IHYgPiAwIF1dCisgICAgICAgW1sgcG9zdCByOiByIDwgMCBdXQorICAgICB7CisgICAg ICAgcmV0dXJuIC12OworICAgICB9CisKKyAgIFRoZSBvcmlnaW5hbCBkZWNsIGlzIGxlZnQgYWxv bmUgYW5kIGluc3RlYWQgY2FsbHMgYXJlIGdlbmVyYXRlZCB0byBwcmUvcG9zdAorICAgZnVuY3Rp b25zIHdpdGhpbiB0aGUgYm9keToKKworICAgICB2b2lkIGZ1bi5wcmUoaW50IHYpCisgICAgIHsK KyAgICAgICBbWyBhc3NlcnQ6IHYgPiAwIF1dOworICAgICB9CisgICAgIGludCBmdW4ucG9zdChp bnQgdiwgaW50IF9fcikKKyAgICAgeworICAgICAgIFtbIGFzc2VydDogX19yIDwgMCBdXTsKKyAg ICAgICByZXR1cm4gX19yOworICAgICB9CisgICAgIGludCBmdW4oaW50IHYpCisgICAgIHsKKyAg ICAgICBmdW4ucHJlKHYpOworICAgICAgIHJldHVybiBmdW4ucG9zdCh2LCAtdik7CisgICAgIH0K KworICAgSWYgZnVuIHJldHVybnMgaW4gbWVtb3J5LCB0aGUgcmV0dXJuIHZhbHVlIGlzIG5vdCBw YXNzZWQgdGhyb3VnaCB0aGUgcG9zdAorICAgZnVuY3Rpb247IGluc3RlYWQsIHRoZSByZXR1cm4g b2JqZWN0IGlzIGluaXRpYWxpemVkIGRpcmVjdGx5IGFuZCB0aGVuIHBhc3NlZAorICAgdG8gdGhl IHBvc3QgZnVuY3Rpb24gYnkgaW52aXNpYmxlIHJlZmVyZW5jZS4KKworICAgVGhpcyBzaWRlcyBz dGVwcyBhIG51bWJlciBvZiBpc3N1ZXMgd2l0aCBoYXZpbmcgdG8gcmV3cml0ZSB0aGUgYm9kaWVz IG9yCisgICByZXdyaXRlIHRoZSBwYXJzZWQgY29uZGl0aW9ucyBhcyB0aGUgcGFyYW1ldGVycyB0 byB0aGUgb3JpZ2luYWwgZnVuY3Rpb24KKyAgIGNoYW5nZXMgKGFzIGhhcHBlbnMgZHVyaW5nIHJl ZGVjbGFyYXRpb24pLiBUaGUgdWx0aW1hdGUgZ29hbCBpcyB0byBnZXQKKyAgIHNvbWV0aGluZyB0 aGF0IG9wdGltaXplcyB3ZWxsIGFsb25nIHRoZSBsaW5lcyBvZgorCisgICAgIGludCBmdW4oaW50 IHYpCisgICAgIHsKKyAgICAgICBbWyBhc3NlcnQ6IHYgPiAwIF1dOworICAgICAgIGF1dG8gJiZf X3IgPSAtdjsKKyAgICAgICBnb3RvIG91dDsKKyAgICAgb3V0OgorICAgICAgIFtbIGFzc2VydDog X19yIDwgMCBdXTsKKyAgICAgICByZXR1cm4gX19yOworICAgICB9CisKKyAgIFdpdGggdGhlIGlk ZWEgYmVpbmcgdGhhdCBtdWx0aXBsZSByZXR1cm4gc3RhdGVtZW50cyBjb3VsZCBjb2xsYXBzZSB0 aGUKKyAgIGZ1bmN0aW9uIGVwaWxvZ3VlIGFmdGVyIGlubGluaW5nIHRoZSBwcmUvcG9zdCBmdW5j dGlvbnMuIGNsYW5nIGlzIGFibGUKKyAgIHRvIGNvbGxhcHNlIGNvbW1vbiBmdW5jdGlvbiBlcGls b2d1ZXMsIHdoaWxlIGdjYyBuZWVkcyAtTzMgLU9zIGNvbWJpbmVkLgorCisgICBEaXJlY3RseSBs YXlpbmcgdGhlIHByZSBjb250cmFjdHMgZG93biBpbiB0aGUgZnVuY3Rpb24gYm9keSBkb2Vzbid0 IGhhdmUKKyAgIG1hbnkgaXNzdWVzLiBUaGUgcG9zdCBjb250cmFjdHMgbWF5IG5lZWQgdG8gYmUg cmVwZWF0ZWQgbXVsdGlwbGUgdGltZXMsIG9uY2UKKyAgIGZvciBlYWNoIHJldHVybiwgb3IgYSBn b3RvIGVwaWxvZ3VlIHdvdWxkIG5lZWQgdG8gYmUgZ2VuZXJhdGVkLgorICAgRm9yIHRoaXMgaW5p dGlhbCBpbXBsZW1lbnRhdGlvbiwgZ2VuZXJhdGluZyBmdW5jdGlvbiBjYWxscyBhbmQgbGV0dGlu ZworICAgbGF0ZXIgb3B0aW1pemF0aW9ucyBkZWNpZGUgd2hldGhlciB0byBpbmxpbmUgYW5kIGR1 cGxpY2F0ZSB0aGUgYWN0dWFsCisgICBjaGVja3Mgb3Igd2hldGhlciB0byBjb2xsYXBzZSB0aGUg c2hhcmVkIGVwaWxvZ3VlIHdhcyBjaG9zZW4uCisKKyAgIEZvciBjZHRvcnMgYSBwb3N0IGNvbnRy YWN0IGlzIGltcGxlbWVudGVkIHVzaW5nIGEgQ0xFQU5VUF9TVE1ULgorCisgICBGSVhNRSB0aGUg Y29tcGlsZXIgYWxyZWFkeSBzaG9yZXMgY2xlYW51cCBjb2RlIG9uIG11bHRpcGxlIGV4aXQgcGF0 aHMsIHNvCisgICB0aGlzIG91dGxpbmluZyBzZWVtcyB1bm5lY2Vzc2FyeSBpZiB3ZSByZXByZXNl bnQgdGhlIHBvc3Rjb25kaXRpb24gYXMgYQorICAgY2xlYW51cCBmb3IgYWxsIGZ1bmN0aW9ucy4K KworICAgTW9yZSBoZWxwZnVsIGZvciBvcHRpbWl6YXRpb24gbWlnaHQgYmUgdG8gbWFrZSB0aGUg Y29udHJhY3RzIGEgd3JhcHBlcgorICAgZnVuY3Rpb24gKGZvciBub24tdmFyaWFkaWMgZnVuY3Rp b25zKSwgdGhhdCBjb3VsZCBiZSBpbmxpbmVkIGludG8gYQorICAgY2FsbGVyIHdoaWxlIHByZXNl cnZpbmcgdGhlIGNhbGwgdG8gdGhlIGFjdHVhbCBmdW5jdGlvbj8gIEVpdGhlciB0aGF0IG9yCisg ICBtaXJyb3IgYSBuZXZlci1jb250aW51ZSBwb3N0IGNvbnRyYWN0IHdpdGggYW4gYXNzdW1lIGlu IHRoZSBjYWxsZXIuICAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAic3lzdGVt LmgiCisjaW5jbHVkZSAiY29yZXR5cGVzLmgiCisjaW5jbHVkZSAiY3AtdHJlZS5oIgorI2luY2x1 ZGUgInN0cmluZ3Bvb2wuaCIKKyNpbmNsdWRlICJkaWFnbm9zdGljLmgiCisjaW5jbHVkZSAib3B0 aW9ucy5oIgorI2luY2x1ZGUgImNvbnRyYWN0cy5oIgorI2luY2x1ZGUgInRyZWUuaCIKKyNpbmNs dWRlICJ0cmVlLWlubGluZS5oIgorI2luY2x1ZGUgImF0dHJpYnMuaCIKKyNpbmNsdWRlICJ0cmVl LWl0ZXJhdG9yLmgiCisjaW5jbHVkZSAicHJpbnQtdHJlZS5oIgorI2luY2x1ZGUgInN0b3ItbGF5 b3V0LmgiCisKK2NvbnN0IGludCBtYXhfY3VzdG9tX3JvbGVzID0gMzI7CitzdGF0aWMgY29udHJh Y3Rfcm9sZSBjb250cmFjdF9idWlsZF9yb2xlc1ttYXhfY3VzdG9tX3JvbGVzXSA9IHsKK307CisK K2Jvb2wgdmFsaWRfY29uZmlnc1tDQ1NfTUFZQkUgKyAxXVtDQ1NfTUFZQkUgKyAxXSA9IHsKKyAg eyAwLCAwLCAwLCAwLCAwLCB9LAorICB7IDAsIDEsIDAsIDAsIDAsIH0sCisgIHsgMCwgMSwgMSwg MSwgMSwgfSwKKyAgeyAwLCAxLCAxLCAxLCAxLCB9LAorICB7IDAsIDEsIDAsIDAsIDEsIH0sCit9 OworCit2b2lkCit2YWxpZGF0ZV9jb250cmFjdF9yb2xlIChjb250cmFjdF9yb2xlICpyb2xlKQor eworICBnY2NfYXNzZXJ0IChyb2xlKTsKKyAgaWYgKCF1bmNoZWNrZWRfY29udHJhY3RfcCAocm9s ZS0+YXhpb21fc2VtYW50aWMpKQorICAgIGVycm9yICgiYXhpb20gY29udHJhY3Qgc2VtYW50aWMg bXVzdCBiZSAlPGFzc3VtZSU+IG9yICU8aWdub3JlJT4iKTsKKworICBpZiAoIXZhbGlkX2NvbmZp Z3Nbcm9sZS0+ZGVmYXVsdF9zZW1hbnRpY11bcm9sZS0+YXVkaXRfc2VtYW50aWNdICkKKyAgICB3 YXJuaW5nICgwLCAidGhlICU8YXVkaXQlPiBzZW1hbnRpYyBzaG91bGQgYmUgYXQgbGVhc3QgYXMg c3Ryb25nIGFzICIKKwkJInRoZSAlPGRlZmF1bHQlPiBzZW1hbnRpYyIpOworfQorCitjb250cmFj dF9zZW1hbnRpYworbG9va3VwX2NvbmNyZXRlX3NlbWFudGljIChjb25zdCBjaGFyICpuYW1lKQor eworICBpZiAoc3RyY21wIChuYW1lLCAiaWdub3JlIikgPT0gMCkKKyAgICByZXR1cm4gQ0NTX0lH Tk9SRTsKKyAgaWYgKHN0cmNtcCAobmFtZSwgImFzc3VtZSIpID09IDApCisgICAgcmV0dXJuIEND U19BU1NVTUU7CisgIGlmIChzdHJjbXAgKG5hbWUsICJjaGVja19uZXZlcl9jb250aW51ZSIpID09 IDAKKyAgICAgIHx8IHN0cmNtcCAobmFtZSwgIm5ldmVyIikgPT0gMAorICAgICAgfHwgc3RyY21w IChuYW1lLCAiYWJvcnQiKSA9PSAwKQorICAgIHJldHVybiBDQ1NfTkVWRVI7CisgIGlmIChzdHJj bXAgKG5hbWUsICJjaGVja19tYXliZV9jb250aW51ZSIpID09IDAKKyAgICAgIHx8IHN0cmNtcCAo bmFtZSwgIm1heWJlIikgPT0gMCkKKyAgICByZXR1cm4gQ0NTX01BWUJFOworICBlcnJvciAoIicl cycgaXMgbm90IGEgdmFsaWQgZXhwbGljaXQgY29uY3JldGUgc2VtYW50aWMiLCBuYW1lKTsKKyAg cmV0dXJuIENDU19JTlZBTElEOworfQorCisvKiBDb21wYXJlIHJvbGUgYW5kIG5hbWUgdXAgdG8g ZWl0aGVyIHRoZSBOVUwgdGVybWluYXRvciBvciB0aGUgZmlyc3QKKyAgIG9jY3VycmVuY2Ugb2Yg Y29sb24uICAqLworCitzdGF0aWMgYm9vbAorcm9sZV9uYW1lX2VxdWFsIChjb25zdCBjaGFyICpy b2xlLCBjb25zdCBjaGFyICpuYW1lKQoreworICBzaXplX3Qgcm9sZV9sZW4gPSBzdHJjaHJudWwg KHJvbGUsICc6JykgLSByb2xlOworICBzaXplX3QgbmFtZV9sZW4gPSBzdHJjaHJudWwgKG5hbWUs ICc6JykgLSBuYW1lOworICBpZiAocm9sZV9sZW4gIT0gbmFtZV9sZW4pCisgICAgcmV0dXJuIGZh bHNlOworICByZXR1cm4gc3RybmNtcCAocm9sZSwgbmFtZSwgcm9sZV9sZW4pID09IDA7Cit9CisK K3N0YXRpYyBib29sCityb2xlX25hbWVfZXF1YWwgKGNvbnRyYWN0X3JvbGUgKnJvbGUsIGNvbnN0 IGNoYXIgKm5hbWUpCit7CisgIGlmIChyb2xlLT5uYW1lID09IE5VTEwpCisgICAgcmV0dXJuIGZh bHNlOworICByZXR1cm4gcm9sZV9uYW1lX2VxdWFsIChyb2xlLT5uYW1lLCBuYW1lKTsKK30KKwor Y29udHJhY3Rfcm9sZSAqCitnZXRfY29udHJhY3Rfcm9sZSAoY29uc3QgY2hhciAqbmFtZSkKK3sK KyAgZm9yIChpbnQgaSA9IDA7IGkgPCBtYXhfY3VzdG9tX3JvbGVzOyArK2kpCisgICAgeworICAg ICAgY29udHJhY3Rfcm9sZSAqcG90ZW50aWFsID0gY29udHJhY3RfYnVpbGRfcm9sZXMgKyBpOwor ICAgICAgaWYgKHJvbGVfbmFtZV9lcXVhbCAocG90ZW50aWFsLCBuYW1lKSkKKwlyZXR1cm4gcG90 ZW50aWFsOworICAgIH0KKyAgaWYgKHJvbGVfbmFtZV9lcXVhbCAobmFtZSwgImRlZmF1bHQiKSB8 fCByb2xlX25hbWVfZXF1YWwgKG5hbWUsICJyZXZpZXciKSkKKyAgICB7CisgICAgICBzZXR1cF9k ZWZhdWx0X2NvbnRyYWN0X3JvbGUgKGZhbHNlKTsKKyAgICAgIHJldHVybiBnZXRfY29udHJhY3Rf cm9sZSAobmFtZSk7CisgICAgfQorICByZXR1cm4gTlVMTDsKK30KKworY29udHJhY3Rfcm9sZSAq CithZGRfY29udHJhY3Rfcm9sZSAoY29uc3QgY2hhciAqbmFtZSwKKwkJICAgY29udHJhY3Rfc2Vt YW50aWMgZGVzLAorCQkgICBjb250cmFjdF9zZW1hbnRpYyBhdXMsCisJCSAgIGNvbnRyYWN0X3Nl bWFudGljIGF4cywKKwkJICAgYm9vbCB1cGRhdGUpCit7CisgIGZvciAoaW50IGkgPSAwOyBpIDwg bWF4X2N1c3RvbV9yb2xlczsgKytpKQorICAgIHsKKyAgICAgIGNvbnRyYWN0X3JvbGUgKnBvdGVu dGlhbCA9IGNvbnRyYWN0X2J1aWxkX3JvbGVzICsgaTsKKyAgICAgIGlmIChwb3RlbnRpYWwtPm5h bWUgIT0gTlVMTAorCSAgJiYgIXJvbGVfbmFtZV9lcXVhbCAocG90ZW50aWFsLCBuYW1lKSkKKwlj b250aW51ZTsKKyAgICAgIGlmIChwb3RlbnRpYWwtPm5hbWUgIT0gTlVMTCAmJiAhdXBkYXRlKQor CXJldHVybiBwb3RlbnRpYWw7CisgICAgICBwb3RlbnRpYWwtPm5hbWUgPSBuYW1lOworICAgICAg cG90ZW50aWFsLT5kZWZhdWx0X3NlbWFudGljID0gZGVzOworICAgICAgcG90ZW50aWFsLT5hdWRp dF9zZW1hbnRpYyA9IGF1czsKKyAgICAgIHBvdGVudGlhbC0+YXhpb21fc2VtYW50aWMgPSBheHM7 CisgICAgICByZXR1cm4gcG90ZW50aWFsOworICAgIH0KKyAgcmV0dXJuIE5VTEw7Cit9CisKK2Vu dW0gY29udHJhY3RfYnVpbGRfbGV2ZWwgeyBPRkYsIERFRkFVTFQsIEFVRElUIH07CitzdGF0aWMg Ym9vbCBmbGFnX2NvbnRyYWN0X2NvbnRpbnVhdGlvbl9tb2RlID0gZmFsc2U7CitzdGF0aWMgYm9v bCBmbGFnX2NvbnRyYWN0X2Fzc3VtcHRpb25fbW9kZSA9IHRydWU7CitzdGF0aWMgaW50IGZsYWdf Y29udHJhY3RfYnVpbGRfbGV2ZWwgPSBERUZBVUxUOworCitzdGF0aWMgYm9vbCBjb250cmFjdHNf cDEzMzJfZGVmYXVsdCA9IGZhbHNlLCBjb250cmFjdHNfcDEzMzJfcmV2aWV3ID0gZmFsc2UsCisg IGNvbnRyYWN0c19zdGQgPSBmYWxzZSwgY29udHJhY3RzX3AxNDI5ID0gZmFsc2U7CisKK3N0YXRp YyBjb250cmFjdF9zZW1hbnRpYworZ2V0X2NvbmNyZXRlX2NoZWNrICgpCit7CisgIHJldHVybiBm bGFnX2NvbnRyYWN0X2NvbnRpbnVhdGlvbl9tb2RlID8gQ0NTX01BWUJFIDogQ0NTX05FVkVSOwor fQorCitzdGF0aWMgY29udHJhY3Rfc2VtYW50aWMKK2dldF9jb25jcmV0ZV9heGlvbV9zZW1hbnRp YyAoKQoreworICByZXR1cm4gZmxhZ19jb250cmFjdF9hc3N1bXB0aW9uX21vZGUgPyBDQ1NfQVNT VU1FIDogQ0NTX0lHTk9SRTsKK30KKwordm9pZAorc2V0dXBfZGVmYXVsdF9jb250cmFjdF9yb2xl IChib29sIHVwZGF0ZSkKK3sKKyAgY29udHJhY3Rfc2VtYW50aWMgY2hlY2sgPSBnZXRfY29uY3Jl dGVfY2hlY2sgKCk7CisgIGNvbnRyYWN0X3NlbWFudGljIGF4aW9tID0gZ2V0X2NvbmNyZXRlX2F4 aW9tX3NlbWFudGljICgpOworICBzd2l0Y2ggKGZsYWdfY29udHJhY3RfYnVpbGRfbGV2ZWwpCisg ICAgeworICAgICAgY2FzZSBPRkY6CisJYWRkX2NvbnRyYWN0X3JvbGUgKCJkZWZhdWx0IiwgQ0NT X0lHTk9SRSwgQ0NTX0lHTk9SRSwgYXhpb20sIHVwZGF0ZSk7CisJYWRkX2NvbnRyYWN0X3JvbGUg KCJyZXZpZXciLCBDQ1NfSUdOT1JFLCBDQ1NfSUdOT1JFLCBDQ1NfSUdOT1JFLCB1cGRhdGUpOwor CWJyZWFrOworICAgICAgY2FzZSBERUZBVUxUOgorCWFkZF9jb250cmFjdF9yb2xlICgiZGVmYXVs dCIsIGNoZWNrLCBDQ1NfSUdOT1JFLCBheGlvbSwgdXBkYXRlKTsKKwlhZGRfY29udHJhY3Rfcm9s ZSAoInJldmlldyIsIGNoZWNrLCBDQ1NfSUdOT1JFLCBDQ1NfSUdOT1JFLCB1cGRhdGUpOworCWJy ZWFrOworICAgICAgY2FzZSBBVURJVDoKKwlhZGRfY29udHJhY3Rfcm9sZSAoImRlZmF1bHQiLCBj aGVjaywgY2hlY2ssIGF4aW9tLCB1cGRhdGUpOworCWFkZF9jb250cmFjdF9yb2xlICgicmV2aWV3 IiwgY2hlY2ssIGNoZWNrLCBDQ1NfSUdOT1JFLCB1cGRhdGUpOworCWJyZWFrOworICAgIH0KK30K KworY29udHJhY3Rfc2VtYW50aWMKK21hcF9jb250cmFjdF9zZW1hbnRpYyAoY29uc3QgY2hhciAq aWRlbnQpCit7CisgIGlmIChzdHJjbXAgKGlkZW50LCAiaWdub3JlIikgPT0gMCkKKyAgICByZXR1 cm4gQ0NTX0lHTk9SRTsKKyAgZWxzZSBpZiAoc3RyY21wIChpZGVudCwgImFzc3VtZSIpID09IDAp CisgICAgcmV0dXJuIENDU19BU1NVTUU7CisgIGVsc2UgaWYgKHN0cmNtcCAoaWRlbnQsICJjaGVj a19uZXZlcl9jb250aW51ZSIpID09IDApCisgICAgcmV0dXJuIENDU19ORVZFUjsKKyAgZWxzZSBp ZiAoc3RyY21wIChpZGVudCwgImNoZWNrX21heWJlX2NvbnRpbnVlIikgPT0gMCkKKyAgICByZXR1 cm4gQ0NTX01BWUJFOworICByZXR1cm4gQ0NTX0lOVkFMSUQ7Cit9CisKK2NvbnRyYWN0X2xldmVs CittYXBfY29udHJhY3RfbGV2ZWwgKGNvbnN0IGNoYXIgKmlkZW50KQoreworICBpZiAoc3RyY21w IChpZGVudCwgImRlZmF1bHQiKSA9PSAwKQorICAgIHJldHVybiBDT05UUkFDVF9ERUZBVUxUOwor ICBlbHNlIGlmIChzdHJjbXAgKGlkZW50LCAiYXVkaXQiKSA9PSAwKQorICAgIHJldHVybiBDT05U UkFDVF9BVURJVDsKKyAgZWxzZSBpZiAoc3RyY21wIChpZGVudCwgImF4aW9tIikgPT0gMCkKKyAg ICByZXR1cm4gQ09OVFJBQ1RfQVhJT007CisgIHJldHVybiBDT05UUkFDVF9JTlZBTElEOworfQor CisKK3ZvaWQKK2hhbmRsZV9PUFRfZmNvbnRyYWN0X2J1aWxkX2xldmVsXyAoY29uc3QgY2hhciAq YXJnKQoreworICBpZiAoY29udHJhY3RzX3AxMzMyX2RlZmF1bHQgfHwgY29udHJhY3RzX3AxMzMy X3JldmlldyB8fCBjb250cmFjdHNfcDE0MjkpCisgICAgeworICAgICAgZXJyb3IgKCIlPC1mY29u dHJhY3QtYnVpbGQtbGV2ZWw9JT4gY2Fubm90IGJlIG1peGVkIHdpdGggcDEzMzIvcDE0MjkiKTsK KyAgICAgIHJldHVybjsKKyAgICB9CisgIGVsc2UKKyAgICBjb250cmFjdHNfc3RkID0gdHJ1ZTsK KworICBpZiAoc3RyY21wIChhcmcsICJvZmYiKSA9PSAwKQorICAgIGZsYWdfY29udHJhY3RfYnVp bGRfbGV2ZWwgPSBPRkY7CisgIGVsc2UgaWYgKHN0cmNtcCAoYXJnLCAiZGVmYXVsdCIpID09IDAp CisgICAgZmxhZ19jb250cmFjdF9idWlsZF9sZXZlbCA9IERFRkFVTFQ7CisgIGVsc2UgaWYgKHN0 cmNtcCAoYXJnLCAiYXVkaXQiKSA9PSAwKQorICAgIGZsYWdfY29udHJhY3RfYnVpbGRfbGV2ZWwg PSBBVURJVDsKKyAgZWxzZQorICAgIGVycm9yICgiJTwtZmNvbnRyYWN0LWJ1aWxkLWxldmVsPSU+ IG11c3QgYmUgb2ZmfGRlZmF1bHR8YXVkaXQiKTsKKworICBzZXR1cF9kZWZhdWx0X2NvbnRyYWN0 X3JvbGUgKCk7Cit9CisKK3ZvaWQKK2hhbmRsZV9PUFRfZmNvbnRyYWN0X2Fzc3VtcHRpb25fbW9k ZV8gKGNvbnN0IGNoYXIgKmFyZykKK3sKKyAgaWYgKGNvbnRyYWN0c19wMTMzMl9kZWZhdWx0IHx8 IGNvbnRyYWN0c19wMTMzMl9yZXZpZXcgfHwgY29udHJhY3RzX3AxNDI5KQorICAgIHsKKyAgICAg IGVycm9yICgiJTwtZmNvbnRyYWN0LWFzc3VtcHRpb24tbW9kZT0lPiBjYW5ub3QgYmUgbWl4ZWQg d2l0aCBwMTMzMi9wMTQyOSIpOworICAgICAgcmV0dXJuOworICAgIH0KKyAgZWxzZQorICAgIGNv bnRyYWN0c19zdGQgPSB0cnVlOworCisgIGlmIChzdHJjbXAgKGFyZywgIm9uIikgPT0gMCkKKyAg ICBmbGFnX2NvbnRyYWN0X2Fzc3VtcHRpb25fbW9kZSA9IHRydWU7CisgIGVsc2UgaWYgKHN0cmNt cCAoYXJnLCAib2ZmIikgPT0gMCkKKyAgICBmbGFnX2NvbnRyYWN0X2Fzc3VtcHRpb25fbW9kZSA9 IGZhbHNlOworICBlbHNlCisgICAgZXJyb3IgKCIlPC1mY29udHJhY3QtYXNzdW1wdGlvbi1tb2Rl PSU+IG11c3QgYmUgJTxvbiU+IG9yICU8b2ZmJT4iKTsKKworICBzZXR1cF9kZWZhdWx0X2NvbnRy YWN0X3JvbGUgKCk7Cit9CisKK3ZvaWQKK2hhbmRsZV9PUFRfZmNvbnRyYWN0X2NvbnRpbnVhdGlv bl9tb2RlXyAoY29uc3QgY2hhciAqYXJnKQoreworICBpZiAoY29udHJhY3RzX3AxMzMyX2RlZmF1 bHQgfHwgY29udHJhY3RzX3AxMzMyX3JldmlldyB8fCBjb250cmFjdHNfcDE0MjkpCisgICAgewor ICAgICAgZXJyb3IgKCIlPC1mY29udHJhY3QtY29udGludWF0aW9uLW1vZGU9JT4gY2Fubm90IGJl IG1peGVkIHdpdGggcDEzMzIvcDE0MjkiKTsKKyAgICAgIHJldHVybjsKKyAgICB9CisgIGVsc2UK KyAgICBjb250cmFjdHNfc3RkID0gdHJ1ZTsKKworICBpZiAoc3RyY21wIChhcmcsICJvbiIpID09 IDApCisgICAgZmxhZ19jb250cmFjdF9jb250aW51YXRpb25fbW9kZSA9IHRydWU7CisgIGVsc2Ug aWYgKHN0cmNtcCAoYXJnLCAib2ZmIikgPT0gMCkKKyAgICBmbGFnX2NvbnRyYWN0X2NvbnRpbnVh dGlvbl9tb2RlID0gZmFsc2U7CisgIGVsc2UKKyAgICBlcnJvciAoIiU8LWZjb250cmFjdC1jb250 aW51YXRpb24tbW9kZT0lPiBtdXN0IGJlICU8b24lPiBvciAlPG9mZiU+Iik7CisKKyAgc2V0dXBf ZGVmYXVsdF9jb250cmFjdF9yb2xlICgpOworfQorCit2b2lkCitoYW5kbGVfT1BUX2Zjb250cmFj dF9yb2xlXyAoY29uc3QgY2hhciAqYXJnKQoreworICBjb25zdCBjaGFyICpuYW1lID0gYXJnOwor ICBjb25zdCBjaGFyICp2YWxzID0gc3RyY2hyIChuYW1lLCAnOicpOworICBpZiAodmFscyA9PSBO VUxMKQorICAgIHsKKyAgICAgIGVycm9yICgiJTwtZmNvbnRyYWN0LXJvbGU9JT4gbXVzdCBiZSBp biB0aGUgZm9ybSByb2xlOnNlbWFudGljcyIpOworICAgICAgcmV0dXJuOworICAgIH0KKworICBj b250cmFjdF9zZW1hbnRpYyBkZXNzID0gQ0NTX0lOVkFMSUQsIGF1c3MgPSBDQ1NfSU5WQUxJRCwg YXhzcyA9IENDU19JTlZBTElEOworICBjaGFyICpkZXMgPSBOVUxMLCAqYXVzID0gTlVMTCwgKmF4 cyA9IE5VTEw7CisgIGRlcyA9IHhzdHJkdXAgKHZhbHMgKyAxKTsKKworICBhdXMgPSBzdHJjaHIg KGRlcywgJywnKTsKKyAgaWYgKGF1cyA9PSBOVUxMKQorICAgIHsKKyAgICAgIGVycm9yICgiJTwt ZmNvbnRyYWN0LXJvbGU9JT4gc2VtYW50aWNzIG11c3QgaW5jbHVkZSBkZWZhdWx0LGF1ZGl0LGF4 aW9tIHZhbHVlcyIpOworICAgICAgZ290byB2YWxpZGF0ZTsKKyAgICB9CisgICphdXMgPSAnXDAn OyAvLyBudWxsIHRlcm1pbmF0ZSBkZXMKKyAgYXVzID0gYXVzICsgMTsgLy8gbW92ZSBwYXN0IG51 bGwKKworICBheHMgPSBzdHJjaHIgKGF1cywgJywnKTsKKyAgaWYgKGF4cyA9PSBOVUxMKQorICAg IHsKKyAgICAgIGVycm9yICgiJTwtZmNvbnRyYWN0LXJvbGU9JT4gc2VtYW50aWNzIG11c3QgaW5j bHVkZSBkZWZhdWx0LGF1ZGl0LGF4aW9tIHZhbHVlcyIpOworICAgICAgZ290byB2YWxpZGF0ZTsK KyAgICB9CisgICpheHMgPSAnXDAnOyAvLyBudWxsIHRlcm1pbmF0ZSBhdXMKKyAgYXhzID0gYXhz ICsgMTsgLy8gbW92ZSBwYXN0IG51bGwKKworICBkZXNzID0gbG9va3VwX2NvbmNyZXRlX3NlbWFu dGljIChkZXMpOworICBhdXNzID0gbG9va3VwX2NvbmNyZXRlX3NlbWFudGljIChhdXMpOworICBh eHNzID0gbG9va3VwX2NvbmNyZXRlX3NlbWFudGljIChheHMpOwordmFsaWRhdGU6CisgIGZyZWUg KGRlcyk7CisgIGlmIChkZXNzID09IENDU19JTlZBTElEIHx8IGF1c3MgPT0gQ0NTX0lOVkFMSUQg fHwgYXhzcyA9PSBDQ1NfSU5WQUxJRCkKKyAgICByZXR1cm47CisKKyAgYm9vbCBpc19kZWZhbHVs dF9yb2xlID0gcm9sZV9uYW1lX2VxdWFsIChuYW1lLCAiZGVmYXVsdCIpOworICBib29sIGlzX3Jl dmlld19yb2xlID0gcm9sZV9uYW1lX2VxdWFsIChuYW1lLCAicmV2aWV3Iik7CisgIGJvb2wgaXNf c3RkX3JvbGUgPSBpc19kZWZhbHVsdF9yb2xlIHx8IGlzX3Jldmlld19yb2xlOworICBpZiAoKGNv bnRyYWN0c19zdGQgJiYgaXNfc3RkX3JvbGUpIHx8IChjb250cmFjdHNfcDE0MjkgJiYgaXNfZGVm YWx1bHRfcm9sZSkpCisgICAgeworICAgICAgZXJyb3IgKCIlPC1mY29udHJhY3Qtcm9sZT0lPiBj YW5ub3QgYmUgbWl4ZWQgd2l0aCBzdGQvcDE0MjkgY29udHJhY3QgZmxhZ3MiKTsKKyAgICAgIHJl dHVybjsKKyAgICB9CisgIGVsc2UgaWYgKGlzX3N0ZF9yb2xlKQorICAgIHsKKyAgICAgIGNvbnRy YWN0c19wMTMzMl9kZWZhdWx0IHw9IGlzX2RlZmFsdWx0X3JvbGU7CisgICAgICBjb250cmFjdHNf cDEzMzJfcmV2aWV3IHw9IGlzX3Jldmlld19yb2xlOworICAgIH0KKworICBjb250cmFjdF9yb2xl ICpyb2xlID0gYWRkX2NvbnRyYWN0X3JvbGUgKG5hbWUsIGRlc3MsIGF1c3MsIGF4c3MpOworCisg IGlmIChyb2xlID09IE5VTEwpCisgICAgeworICAgICAgLy8gVE9ETzogbm90IGVub3VnaCBzcGFj ZT8KKyAgICAgIGVycm9yICgiJTwtZmNvbnRyYWN0LWxldmVsPSU+IHRvbyBtYW55IGN1c3RvbSBy b2xlcyIpOworICAgICAgcmV0dXJuOworICAgIH0KKyAgZWxzZQorICAgIHZhbGlkYXRlX2NvbnRy YWN0X3JvbGUgKHJvbGUpOworfQorCit2b2lkCitoYW5kbGVfT1BUX2Zjb250cmFjdF9zZW1hbnRp Y18gKGNvbnN0IGNoYXIgKmFyZykKK3sKKyAgaWYgKCFzdHJjaHIgKGFyZywgJzonKSkKKyAgICB7 CisgICAgICBlcnJvciAoIiU8LWZjb250cmFjdC1zZW1hbnRpYz0lPiBtdXN0IGJlIGluIHRoZSBm b3JtIGxldmVsOnNlbWFudGljIik7CisgICAgICByZXR1cm47CisgICAgfQorCisgIGlmIChjb250 cmFjdHNfc3RkIHx8IGNvbnRyYWN0c19wMTMzMl9kZWZhdWx0KQorICAgIHsKKyAgICAgIGVycm9y ICgiJTwtZmNvbnRyYWN0LXNlbWFudGljPSU+IGNhbm5vdCBiZSBtaXhlZCB3aXRoIHN0ZC9wMTMz MiBjb250cmFjdCBmbGFncyIpOworICAgICAgcmV0dXJuOworICAgIH0KKyAgY29udHJhY3RzX3Ax NDI5ID0gdHJ1ZTsKKworICBjb250cmFjdF9yb2xlICpyb2xlID0gZ2V0X2NvbnRyYWN0X3JvbGUg KCJkZWZhdWx0Iik7CisgIGlmICghcm9sZSkKKyAgICB7CisgICAgICBlcnJvciAoIiU8LWZjb250 cmFjdC1zZW1hbnRpYz0lPiBjYW5ub3QgZmluZCBkZWZhdWx0IHJvbGUiKTsKKyAgICAgIHJldHVy bjsKKyAgICB9CisKKyAgY29uc3QgY2hhciAqc2VtYW50aWMgPSBzdHJjaHIgKGFyZywgJzonKSAr IDE7CisgIGNvbnRyYWN0X3NlbWFudGljIHNlbSA9IGxvb2t1cF9jb25jcmV0ZV9zZW1hbnRpYyAo c2VtYW50aWMpOworICBpZiAoc2VtID09IENDU19JTlZBTElEKQorICAgIHJldHVybjsKKworICBp ZiAoc3RybmNtcCAoImRlZmF1bHQ6IiwgYXJnLCA4KSA9PSAwKQorICAgIHJvbGUtPmRlZmF1bHRf c2VtYW50aWMgPSBzZW07CisgIGVsc2UgaWYgKHN0cm5jbXAgKCJhdWRpdDoiLCBhcmcsIDYpID09 IDApCisgICAgcm9sZS0+YXVkaXRfc2VtYW50aWMgPSBzZW07CisgIGVsc2UgaWYgKHN0cm5jbXAg KCJheGlvbToiLCBhcmcsIDYpID09IDApCisgICAgcm9sZS0+YXhpb21fc2VtYW50aWMgPSBzZW07 CisgIGVsc2UKKyAgICBlcnJvciAoIiU8LWZjb250cmFjdC1zZW1hbnRpYz0lPiBsZXZlbCBtdXN0 IGJlIGRlZmF1bHQsIGF1ZGl0LCBvciBheGlvbSIpOworICB2YWxpZGF0ZV9jb250cmFjdF9yb2xl IChyb2xlKTsKK30KKworLyogQ29udmVydCBhIGNvbnRyYWN0IENPTkZJRyBpbnRvIGEgY29udHJh Y3RfbW9kZS4gICovCisKK3N0YXRpYyBjb250cmFjdF9tb2RlCitjb250cmFjdF9jb25maWdfdG9f bW9kZSAodHJlZSBjb25maWcpCit7CisgIGlmIChjb25maWcgPT0gTlVMTF9UUkVFKQorICAgIHJl dHVybiBjb250cmFjdF9tb2RlIChDT05UUkFDVF9ERUZBVUxULCBnZXRfZGVmYXVsdF9jb250cmFj dF9yb2xlICgpKTsKKworICAvKiBUUkVFX0xJU1QgaGFzIFRSRUVfVkFMVUUgaXMgYSBsZXZlbCBh bmQgVFJFRV9QVVJQT1NFIGlzIHJvbGUuICAqLworICBpZiAoVFJFRV9DT0RFIChjb25maWcpID09 IFRSRUVfTElTVCkKKyAgICB7CisgICAgICBjb250cmFjdF9yb2xlICpyb2xlID0gTlVMTDsKKyAg ICAgIGlmIChUUkVFX1BVUlBPU0UgKGNvbmZpZykpCisJcm9sZSA9IGdldF9jb250cmFjdF9yb2xl IChJREVOVElGSUVSX1BPSU5URVIgKFRSRUVfUFVSUE9TRSAoY29uZmlnKSkpOworICAgICAgaWYg KCFyb2xlKQorCXJvbGUgPSBnZXRfZGVmYXVsdF9jb250cmFjdF9yb2xlICgpOworCisgICAgICBj b250cmFjdF9sZXZlbCBsZXZlbCA9CisJbWFwX2NvbnRyYWN0X2xldmVsIChJREVOVElGSUVSX1BP SU5URVIgKFRSRUVfVkFMVUUgKGNvbmZpZykpKTsKKyAgICAgIHJldHVybiBjb250cmFjdF9tb2Rl IChsZXZlbCwgcm9sZSk7CisgICAgfQorCisgIC8qIExpdGVyYWwgc2VtYW50aWMuICAqLworICBn Y2NfYXNzZXJ0IChUUkVFX0NPREUgKGNvbmZpZykgPT0gSURFTlRJRklFUl9OT0RFKTsKKyAgY29u dHJhY3Rfc2VtYW50aWMgc2VtYW50aWMgPQorICAgIG1hcF9jb250cmFjdF9zZW1hbnRpYyAoSURF TlRJRklFUl9QT0lOVEVSIChjb25maWcpKTsKKyAgcmV0dXJuIGNvbnRyYWN0X21vZGUgKHNlbWFu dGljKTsKK30KKworLyogQ29udmVydCBhIGNvbnRyYWN0J3MgY29uZmlnIGludG8gYSBjb25jcmV0 ZSBzZW1hbnRpYyB1c2luZyB0aGUgY3VycmVudAorICAgY29udHJhY3Qgc2VtYW50aWMgbWFwcGlu Zy4gICovCisKK3N0YXRpYyBjb250cmFjdF9zZW1hbnRpYworY29tcHV0ZV9jb25jcmV0ZV9zZW1h bnRpYyAodHJlZSBjb250cmFjdCkKK3sKKyAgY29udHJhY3RfbW9kZSBtb2RlID0gY29udHJhY3Rf Y29uZmlnX3RvX21vZGUgKENPTlRSQUNUX01PREUgKGNvbnRyYWN0KSk7CisgIC8qIENvbXB1dGUg dGhlIGNvbmNyZXRlIHNlbWFudGljIGZvciB0aGUgY29udHJhY3QuICAqLworICBpZiAoIWZsYWdf Y29udHJhY3RfbW9kZSkKKyAgICAvKiBJZiBjb250cmFjdHMgYXJlIG9mZiwgdHJlYXQgYWxsIGNv bnRyYWN0cyBhcyBpZ25vcmUuICAqLworICAgIHJldHVybiBDQ1NfSUdOT1JFOworICBlbHNlIGlm IChtb2RlLmtpbmQgPT0gY29udHJhY3RfbW9kZTo6Y21faW52YWxpZCkKKyAgICByZXR1cm4gQ0NT X0lOVkFMSUQ7CisgIGVsc2UgaWYgKG1vZGUua2luZCA9PSBjb250cmFjdF9tb2RlOjpjbV9leHBs aWNpdCkKKyAgICByZXR1cm4gbW9kZS5nZXRfc2VtYW50aWMgKCk7CisgIGVsc2UKKyAgICB7Cisg ICAgICBnY2NfYXNzZXJ0IChtb2RlLmdldF9yb2xlICgpKTsKKyAgICAgIGdjY19hc3NlcnQgKG1v ZGUuZ2V0X2xldmVsICgpICE9IENPTlRSQUNUX0lOVkFMSUQpOworICAgICAgY29udHJhY3RfbGV2 ZWwgbGV2ZWwgPSBtb2RlLmdldF9sZXZlbCAoKTsKKyAgICAgIGNvbnRyYWN0X3JvbGUgKnJvbGUg PSBtb2RlLmdldF9yb2xlICgpOworICAgICAgaWYgKGxldmVsID09IENPTlRSQUNUX0RFRkFVTFQp CisJcmV0dXJuIHJvbGUtPmRlZmF1bHRfc2VtYW50aWM7CisgICAgICBlbHNlIGlmIChsZXZlbCA9 PSBDT05UUkFDVF9BVURJVCkKKwlyZXR1cm4gcm9sZS0+YXVkaXRfc2VtYW50aWM7CisgICAgICBl bHNlIGlmIChsZXZlbCA9PSBDT05UUkFDVF9BWElPTSkKKwlyZXR1cm4gcm9sZS0+YXhpb21fc2Vt YW50aWM7CisgICAgfQorICBnY2NfYXNzZXJ0IChmYWxzZSk7Cit9CisKKy8qIFJldHVybiB0cnVl IGlmIGFueSBjb250cmFjdCBpbiBDT05UUkFDVF9BVFRScyBpcyBub3QgeWV0IHBhcnNlZC4gICov CisKK2Jvb2wKK2NvbnRyYWN0X2FueV9kZWZlcnJlZF9wICh0cmVlIGNvbnRyYWN0X2F0dHIpCit7 CisgIGZvciAoOyBjb250cmFjdF9hdHRyOyBjb250cmFjdF9hdHRyID0gQ09OVFJBQ1RfQ0hBSU4g KGNvbnRyYWN0X2F0dHIpKQorICAgIGlmIChDT05UUkFDVF9DT05ESVRJT05fREVGRVJSRURfUCAo Q09OVFJBQ1RfU1RBVEVNRU5UIChjb250cmFjdF9hdHRyKSkpCisgICAgICByZXR1cm4gdHJ1ZTsK KyAgcmV0dXJuIGZhbHNlOworfQorCisvKiBSZXR1cm5zIHRydWUgaWYgYWxsIGF0dHJpYnV0ZXMg YXJlIGNvbnRyYWN0cy4gICovCisKK2Jvb2wKK2FsbF9hdHRyaWJ1dGVzX2FyZV9jb250cmFjdHNf cCAodHJlZSBhdHRyaWJ1dGVzKQoreworICBmb3IgKDsgYXR0cmlidXRlczsgYXR0cmlidXRlcyA9 IFRSRUVfQ0hBSU4gKGF0dHJpYnV0ZXMpKQorICAgIGlmICghY3h4X2NvbnRyYWN0X2F0dHJpYnV0 ZV9wIChhdHRyaWJ1dGVzKSkKKyAgICAgIHJldHVybiBmYWxzZTsKKyAgcmV0dXJuIHRydWU7Cit9 CisKKy8qIE1hcmsgbW9zdCBvZiBhIGNvbnRyYWN0IGFzIGJlaW5nIGludmFsaWQuICAqLworCit0 cmVlCitpbnZhbGlkYXRlX2NvbnRyYWN0ICh0cmVlIHQpCit7CisgIGlmIChUUkVFX0NPREUgKHQp ID09IFBPU1RDT05ESVRJT05fU1RNVCAmJiBQT1NUQ09ORElUSU9OX0lERU5USUZJRVIgKHQpKQor ICAgIFBPU1RDT05ESVRJT05fSURFTlRJRklFUiAodCkgPSBlcnJvcl9tYXJrX25vZGU7CisgIENP TlRSQUNUX0NPTkRJVElPTiAodCkgPSBlcnJvcl9tYXJrX25vZGU7CisgIENPTlRSQUNUX0NPTU1F TlQgKHQpID0gZXJyb3JfbWFya19ub2RlOworICByZXR1cm4gdDsKK30KKworLyogUmV0dXJucyBh biBpbnZlbnRlZCBwYXJhbWV0ZXIgZGVjbHJhdGlvbiBvZiB0aGUgZm9ybSAnVFlQRSBJRCcgZm9y IHRoZQorICAgcHVycG9zZSBvZiBwYXJzaW5nIHRoZSBwb3N0Y29uZGl0aW9uLgorCisgICBXZSB1 c2UgYSBQQVJNX0RFQ0wgaW5zdGVhZCBvZiBhIFZBUl9ERUNMIHNvIHRoYXQgdHN1YnN0IGZvcmNl cyBhIGxvb2t1cAorICAgaW4gbG9jYWwgc3BlY2lhbGl6YXRpb25zIHdoZW4gd2UgaW5zdGFudGlh dGUgdGhlc2UgdGhpbmdzIGxhdGVyLiAgKi8KKwordHJlZQorbWFrZV9wb3N0Y29uZGl0aW9uX3Zh cmlhYmxlIChjcF9leHByIGlkLCB0cmVlIHR5cGUpCit7CisgIGlmIChpZCA9PSBlcnJvcl9tYXJr X25vZGUpCisgICAgcmV0dXJuIGlkOworCisgIHRyZWUgZGVjbCA9IGJ1aWxkX2xhbmdfZGVjbCAo UEFSTV9ERUNMLCBpZCwgdHlwZSk7CisgIERFQ0xfQVJUSUZJQ0lBTCAoZGVjbCkgPSB0cnVlOwor ICBERUNMX1NPVVJDRV9MT0NBVElPTiAoZGVjbCkgPSBpZC5nZXRfbG9jYXRpb24gKCk7CisKKyAg cHVzaGRlY2wgKGRlY2wpOworICByZXR1cm4gZGVjbDsKK30KKworLyogQXMgYWJvdmUsIGV4Y2Vw dCB0aGF0IHRoZSB0eXBlIGlzIHVua25vd24uICAqLworCit0cmVlCittYWtlX3Bvc3Rjb25kaXRp b25fdmFyaWFibGUgKGNwX2V4cHIgaWQpCit7CisgIHJldHVybiBtYWtlX3Bvc3Rjb25kaXRpb25f dmFyaWFibGUgKGlkLCBtYWtlX2F1dG8gKCkpOworfQorCisvKiBDaGVjayB0aGF0IHRoZSBUWVBF IGlzIHZhbGlkIGZvciBhIG5hbWVkIHBvc3Rjb25kaXRpb24gdmFyaWFibGUuIEVtaXQgYQorICAg ZGlhZ25vc3RpYyBpZiBpdCBpcyBub3QuICBSZXR1cm5zIFRSVUUgaWYgdGhlIHJlc3VsdCBpcyBP SyBhbmQgZmFsc2UKKyAgIG90aGVyd2lzZS4gICovCisKK2Jvb2wKK2NoZWNrX3Bvc3Rjb25kaXRp b25fcmVzdWx0ICh0cmVlIGRlY2wsIHRyZWUgdHlwZSwgbG9jYXRpb25fdCBsb2MpCit7CisgIGlm IChWT0lEX1RZUEVfUCAodHlwZSkpCisgIHsKKyAgICBjb25zdCBjaGFyKiB3aGF0OworICAgIGlm IChERUNMX0NPTlNUUlVDVE9SX1AgKGRlY2wpKQorICAgICAgd2hhdCA9ICJjb25zdHJ1Y3RvciI7 CisgICAgZWxzZSBpZiAoREVDTF9ERVNUUlVDVE9SX1AgKGRlY2wpKQorICAgICAgd2hhdCAgPSAi ZGVzdHJ1Y3RvciI7CisgICAgZWxzZQorICAgICAgd2hhdCA9ICJmdW5jdGlvbiI7CisgICAgZXJy b3JfYXQgKGxvYywgIiVzIGRvZXMgbm90IHJldHVybiBhIHZhbHVlIHRvIHRlc3QiLCB3aGF0KTsK KyAgICByZXR1cm4gZmFsc2U7CisgIH0KKworICByZXR1cm4gdHJ1ZTsKK30KKworLyogSW5zdGFu dGlhdGUgZWFjaCBwb3N0Y29uZGl0aW9uIHdpdGggdGhlIHJldHVybiB0eXBlIHRvIGZpbmFsaXpl IHRoZQorICAgYXR0cmlidXRlLiAgKi8KKwordm9pZAorcmVidWlsZF9wb3N0Y29uZGl0aW9ucyAo dHJlZSBkZWNsKQoreworICB0cmVlIHR5cGUgPSBUUkVFX1RZUEUgKFRSRUVfVFlQRSAoZGVjbCkp OworICB0cmVlIGF0dHJpYnV0ZXMgPSBERUNMX0NPTlRSQUNUUyAoZGVjbCk7CisKKyAgZm9yICg7 IGF0dHJpYnV0ZXMgOyBhdHRyaWJ1dGVzID0gVFJFRV9DSEFJTiAoYXR0cmlidXRlcykpCisgICAg eworICAgICAgaWYgKCFjeHhfY29udHJhY3RfYXR0cmlidXRlX3AgKGF0dHJpYnV0ZXMpKQorCWNv bnRpbnVlOworICAgICAgdHJlZSBjb250cmFjdCA9IFRSRUVfVkFMVUUgKFRSRUVfVkFMVUUgKGF0 dHJpYnV0ZXMpKTsKKyAgICAgIGlmIChUUkVFX0NPREUgKGNvbnRyYWN0KSAhPSBQT1NUQ09ORElU SU9OX1NUTVQpCisJY29udGludWU7CisgICAgICB0cmVlIGNvbmRpdGlvbiA9IENPTlRSQUNUX0NP TkRJVElPTiAoY29udHJhY3QpOworCisgICAgICAvKiBJZiBhbnkgY29uZGl0aW9ucyBhcmUgZGVm ZXJyZWQsIHRoZXkncmUgYWxsIGRlZmVycmVkLiAgTm90ZSB0aGF0CisJIHdlIGRvbid0IGhhdmUg dG8gaW5zdGFudGlhdGUgcG9zdGNvbmRpdGlvbnMgaW4gdGhhdCBjYXNlIGJlY2F1c2UKKwkgdGhl IHR5cGUgaXMgYXZhaWxhYmxlIHRocm91Z2ggdGhlIGRlY2xhcmF0aW9uLiAgKi8KKyAgICAgIGlm IChUUkVFX0NPREUgKGNvbmRpdGlvbikgPT0gREVGRVJSRURfUEFSU0UpCisJcmV0dXJuOworCisg ICAgICB0cmVlIG9sZHZhciA9IFBPU1RDT05ESVRJT05fSURFTlRJRklFUiAoY29udHJhY3QpOwor ICAgICAgaWYgKCFvbGR2YXIpCisJY29udGludWU7CisKKyAgICAgIC8qIEFsd2F5cyB1cGRhdGUg dGhlIGNvbnRleHQgb2YgdGhlIHJlc3VsdCB2YXJpYWJsZSBzbyB0aGF0IGl0IGNhbgorCSBiZSBy ZW1hcHBlZCBieSByZW1hcF9jb250cmFjdHMuICAqLworICAgICAgREVDTF9DT05URVhUIChvbGR2 YXIpID0gZGVjbDsKKworICAgICAgLyogSWYgdGhlIHJldHVybiB0eXBlIGlzIHVuZGVkdWNlZCwg ZGVmZXIgdW50aWwgbGF0ZXIuICAqLworICAgICAgaWYgKFRSRUVfQ09ERSAodHlwZSkgPT0gVEVN UExBVEVfVFlQRV9QQVJNKQorCXJldHVybjsKKworICAgICAgLyogQ2hlY2sgdGhlIHBvc3Rjb25k aXRpb24gdmFyaWFibGUuICAqLworICAgICAgbG9jYXRpb25fdCBsb2MgPSBERUNMX1NPVVJDRV9M T0NBVElPTiAob2xkdmFyKTsKKyAgICAgIGlmICghY2hlY2tfcG9zdGNvbmRpdGlvbl9yZXN1bHQg KGRlY2wsIHR5cGUsIGxvYykpCisJeworCSAgaW52YWxpZGF0ZV9jb250cmFjdCAoY29udHJhY3Qp OworCSAgY29udGludWU7CisJfQorCisgICAgICAvKiAiSW5zdGFudGlhdGUiIHRoZSByZXN1bHQg dmFyaWFibGUgdXNpbmcgdGhlIGtub3duIHR5cGUuICBBbHNvIHVwZGF0ZQorCSAgdGhlIGNvbnRl eHQgc28gdGhlIGlubGluZXIgd2lsbCBhY3R1YWxseSByZW1hcCB0aGlzIHRoZSBwYXJhbWV0ZXIg d2hlbgorCSAgZ2VuZXJhdGluZyBjb250cmFjdCBjaGVja3MuICAqLworICAgICAgdHJlZSBuZXd2 YXIgPSBjb3B5X25vZGUgKG9sZHZhcik7CisgICAgICBUUkVFX1RZUEUgKG5ld3ZhcikgPSB0eXBl OworCisgICAgICAvKiBNYWtlIHBhcmFtZXRlcnMgYW5kIHJlc3VsdCBhdmFpbGFibGUgZm9yIHN1 YnN0aXR1dGlvbi4gICovCisgICAgICBsb2NhbF9zcGVjaWFsaXphdGlvbl9zdGFjayBzdGFjayAo bHNzX2NvcHkpOworICAgICAgZm9yICh0cmVlIHQgPSBERUNMX0FSR1VNRU5UUyAoZGVjbCk7IHQg IT0gTlVMTF9UUkVFOyB0ID0gVFJFRV9DSEFJTiAodCkpCisJcmVnaXN0ZXJfbG9jYWxfaWRlbnRp dHkgKHQpOworICAgICAgcmVnaXN0ZXJfbG9jYWxfc3BlY2lhbGl6YXRpb24gKG5ld3Zhciwgb2xk dmFyKTsKKworICAgICAgKytwcm9jZXNzaW5nX2NvbnRyYWN0X2NvbmRpdGlvbjsKKyAgICAgIGNv bmRpdGlvbiA9IHRzdWJzdF9leHByIChjb25kaXRpb24sIG1ha2VfdHJlZV92ZWMgKDApLAorCQkJ ICAgICAgIHRmX3dhcm5pbmdfb3JfZXJyb3IsIGRlY2wpOworICAgICAgLS1wcm9jZXNzaW5nX2Nv bnRyYWN0X2NvbmRpdGlvbjsKKworICAgICAgLyogVXBkYXRlIHRoZSBjb250cmFjdCBjb25kaXRp b24gYW5kIHJlc3VsdC4gICovCisgICAgICBQT1NUQ09ORElUSU9OX0lERU5USUZJRVIgKGNvbnRy YWN0KSA9IG5ld3ZhcjsKKyAgICAgIENPTlRSQUNUX0NPTkRJVElPTiAoY29udHJhY3QpID0gZmlu aXNoX2NvbnRyYWN0X2NvbmRpdGlvbiAoY29uZGl0aW9uKTsKKyAgICB9Cit9CisKK3N0YXRpYyB0 cmVlCitidWlsZF9jb21tZW50IChjcF9leHByIGNvbmRpdGlvbikKK3sKKyAgLyogVHJ5IHRvIGdl dCB0aGUgYWN0dWFsIHNvdXJjZSB0ZXh0IGZvciB0aGUgY29uZGl0aW9uOyBpZiB0aGF0IGZhaWxz IHByZXR0eQorICAgICBwcmludCB0aGUgcmVzdWx0aW5nIHRyZWUuICAqLworICBjaGFyICpzdHIg PSBnZXRfc291cmNlX3RleHRfYmV0d2VlbiAoY29uZGl0aW9uLmdldF9zdGFydCAoKSwKKwkJCQkg ICAgICAgY29uZGl0aW9uLmdldF9maW5pc2ggKCkpOworICBpZiAoIXN0cikKKyAgICB7CisgICAg ICAvKiBGSVhNRSBjYXNlcyB3aGVyZSB3ZSBlbmQgdXAgaGVyZQorCSAjbGluZSBtYWNybyB1c2Fn ZSAob29mKQorCSBjb250cmFjdHMxMC5DCisJIGNvbnRyYWN0czExLkMgICovCisgICAgICBjb25z dCBjaGFyICpzdHIgPSBleHByX3RvX3N0cmluZyAoY29uZGl0aW9uKTsKKyAgICAgIHJldHVybiBi dWlsZF9zdHJpbmdfbGl0ZXJhbCAoc3RybGVuIChzdHIpICsgMSwgc3RyKTsKKyAgICB9CisKKyAg dHJlZSB0ID0gYnVpbGRfc3RyaW5nX2xpdGVyYWwgKHN0cmxlbiAoc3RyKSArIDEsIHN0cik7Cisg IGZyZWUgKHN0cik7CisgIHJldHVybiB0OworfQorCisvKiBCdWlsZCBhIGNvbnRyYWN0IHN0YXRl bWVudC4gICovCisKK3RyZWUKK2dyb2tfY29udHJhY3QgKHRyZWUgYXR0cmlidXRlLCB0cmVlIG1v ZGUsIHRyZWUgcmVzdWx0LCBjcF9leHByIGNvbmRpdGlvbiwKKwkgICAgICAgbG9jYXRpb25fdCBs b2MpCit7CisgIHRyZWVfY29kZSBjb2RlOworICBpZiAoaXNfYXR0cmlidXRlX3AgKCJhc3NlcnQi LCBhdHRyaWJ1dGUpKQorICAgIGNvZGUgPSBBU1NFUlRJT05fU1RNVDsKKyAgZWxzZSBpZiAoaXNf YXR0cmlidXRlX3AgKCJwcmUiLCBhdHRyaWJ1dGUpKQorICAgIGNvZGUgPSBQUkVDT05ESVRJT05f U1RNVDsKKyAgZWxzZSBpZiAoaXNfYXR0cmlidXRlX3AgKCJwb3N0IiwgYXR0cmlidXRlKSkKKyAg ICBjb2RlID0gUE9TVENPTkRJVElPTl9TVE1UOworICBlbHNlCisgICAgZ2NjX3VucmVhY2hhYmxl ICgpOworCisgIC8qIEJ1aWxkIHRoZSBjb250cmFjdC4gVGhlIGNvbmRpdGlvbiBpcyBhZGRlZCBs YXRlci4gIEluIHRoZSBjYXNlIHRoYXQKKyAgICAgdGhlIGNvbnRyYWN0IGlzIGRlZmVycmVkLCBy ZXN1bHQgYW4gcGxhaW4gaWRlbnRpZmllciwgbm90IGEgcmVzdWx0CisgICAgIHZhcmlhYmxlLiAg Ki8KKyAgdHJlZSBjb250cmFjdDsKKyAgdHJlZSB0eXBlID0gdm9pZF90eXBlX25vZGU7CisgIGlm IChjb2RlICE9IFBPU1RDT05ESVRJT05fU1RNVCkKKyAgICBjb250cmFjdCA9IGJ1aWxkM19sb2Mg KGxvYywgY29kZSwgdHlwZSwgbW9kZSwgTlVMTF9UUkVFLCBOVUxMX1RSRUUpOworICBlbHNlCisg ICAgY29udHJhY3QgPSBidWlsZDRfbG9jIChsb2MsIGNvZGUsIHR5cGUsIG1vZGUsIE5VTExfVFJF RSwgTlVMTF9UUkVFLCByZXN1bHQpOworCisgIC8qIERldGVybWluZSB0aGUgY29uY3JldGUgc2Vt YW50aWMuICAqLworICBzZXRfY29udHJhY3Rfc2VtYW50aWMgKGNvbnRyYWN0LCBjb21wdXRlX2Nv bmNyZXRlX3NlbWFudGljIChjb250cmFjdCkpOworCisgIC8qIElmIHRoZSBjb250cmFjdCBpcyBk ZWZlcnJlZCwgZG9uJ3QgZG8gYW55dGhpbmcgd2l0aCB0aGUgY29uZGl0aW9uLiAgKi8KKyAgaWYg KFRSRUVfQ09ERSAoY29uZGl0aW9uKSA9PSBERUZFUlJFRF9QQVJTRSkKKyAgICB7CisgICAgICBD T05UUkFDVF9DT05ESVRJT04gKGNvbnRyYWN0KSA9IGNvbmRpdGlvbjsKKyAgICAgIHJldHVybiBj b250cmFjdDsKKyAgICB9CisKKyAgLyogR2VuZXJhdGUgdGhlIGNvbW1lbnQgZnJvbSB0aGUgb3Jp Z2luYWwgY29uZGl0aW9uLiAgKi8KKyAgQ09OVFJBQ1RfQ09NTUVOVCAoY29udHJhY3QpID0gYnVp bGRfY29tbWVudCAoY29uZGl0aW9uKTsKKworICAvKiBUaGUgY29uZGl0aW9uIGlzIGNvbnZlcnRl ZCB0byBib29sLiAgKi8KKyAgY29uZGl0aW9uID0gZmluaXNoX2NvbnRyYWN0X2NvbmRpdGlvbiAo Y29uZGl0aW9uKTsKKyAgQ09OVFJBQ1RfQ09ORElUSU9OIChjb250cmFjdCkgPSBjb25kaXRpb247 CisKKyAgcmV0dXJuIGNvbnRyYWN0OworfQorCisvKiBCdWlsZCB0aGUgY29udHJhY3QgYXR0cmli dXRlIHNwZWNpZmllciB3aGVyZSBJREVOVElGSUVSIGlzIG9uZSBvZiAncHJlJywKKyAgICdwb3N0 JyBvciAnYXNzZXJ0JyBhbmQgQ09OVFJBQ1QgaXMgdGhlIHVuZGVybHlpbmcgc3RhdGVtZW50LiAg Ki8KK3RyZWUKK2ZpbmlzaF9jb250cmFjdF9hdHRyaWJ1dGUgKHRyZWUgaWRlbnRpZmllciwgdHJl ZSBjb250cmFjdCkKK3sKKyAgaWYgKGNvbnRyYWN0ID09IGVycm9yX21hcmtfbm9kZSkKKyAgICBy ZXR1cm4gZXJyb3JfbWFya19ub2RlOworCisgIHRyZWUgYXR0cmlidXRlID0gYnVpbGRfdHJlZV9s aXN0IChidWlsZF90cmVlX2xpc3QgKE5VTExfVFJFRSwgaWRlbnRpZmllciksCisJCQkJICAgIGJ1 aWxkX3RyZWVfbGlzdCAoTlVMTF9UUkVFLCBjb250cmFjdCkpOworCisKKyAgLyogTWFyayB0aGUg YXR0cmlidXRlIGFzIGRlcGVuZGVudCBpZiB0aGUgY29uZGl0aW9uIGlzIGRlcGVuZGVudC4KKwor ICAgICBUT0RPOiBJJ20gbm90IHN1cmUgdGhpcyBpcyBzdHJpY3RseSBuZWNlc3NhcnkuIEl0J3Mg Z29pbmcgdG8gYmUgbWFya2VkIGFzCisgICAgIHN1Y2ggYnkgYSBzdWJyb3V0aW5lIG9mIGNwbHVz X2RlY2xfYXR0cmlidXRlcy4gKi8KKyAgdHJlZSBjb25kaXRpb24gPSBDT05UUkFDVF9DT05ESVRJ T04gKGNvbnRyYWN0KTsKKyAgaWYgKFRSRUVfQ09ERSAoY29uZGl0aW9uKSA9PSBERUZFUlJFRF9Q QVJTRQorICAgICAgfHwgdmFsdWVfZGVwZW5kZW50X2V4cHJlc3Npb25fcCAoY29uZGl0aW9uKSkK KyAgICBBVFRSX0lTX0RFUEVOREVOVCAoYXR0cmlidXRlKSA9IHRydWU7CisKKyAgcmV0dXJuIGF0 dHJpYnV0ZTsKK30KKworLyogVXBkYXRlIGNvbmRpdGlvbiBvZiBhIGxhdGUtcGFyc2VkIGNvbnRy YWN0IGFuZCBwb3N0Y29uZGl0aW9uIHZhcmlhYmxlLAorICAgaWYgYW55LiAgKi8KKwordm9pZAor dXBkYXRlX2xhdGVfY29udHJhY3QgKHRyZWUgY29udHJhY3QsIHRyZWUgcmVzdWx0LCB0cmVlIGNv bmRpdGlvbikKK3sKKyAgaWYgKFRSRUVfQ09ERSAoY29udHJhY3QpID09IFBPU1RDT05ESVRJT05f U1RNVCkKKyAgICBQT1NUQ09ORElUSU9OX0lERU5USUZJRVIgKGNvbnRyYWN0KSA9IHJlc3VsdDsK KworICAvKiBHZW5lcmF0ZSB0aGUgY29tbWVudCBmcm9tIHRoZSBvcmlnaW5hbCBjb25kaXRpb24u ICAqLworICBDT05UUkFDVF9DT01NRU5UIChjb250cmFjdCkgPSBidWlsZF9jb21tZW50IChjb25k aXRpb24pOworCisgIC8qIFRoZSBjb25kaXRpb24gaXMgY29udmVydGVkIHRvIGJvb2wuICAqLwor ICBjb25kaXRpb24gPSBmaW5pc2hfY29udHJhY3RfY29uZGl0aW9uIChjb25kaXRpb24pOworICBD T05UUkFDVF9DT05ESVRJT04gKGNvbnRyYWN0KSA9IGNvbmRpdGlvbjsKK30KKworLyogUmV0dXJu IFRSVUUgaWZmIEFUVFIgaGFzIGJlZW4gcGFyc2VkIGJ5IHRoZSBmcm9udC1lbmQgYXMgYSBjKysy YSBjb250cmFjdAorICAgYXR0cmlidXRlLiAqLworCitib29sCitjeHhfY29udHJhY3RfYXR0cmli dXRlX3AgKGNvbnN0X3RyZWUgYXR0cikKK3sKKyAgaWYgKGF0dHIgPT0gTlVMTF9UUkVFCisgICAg ICB8fCBUUkVFX0NPREUgKGF0dHIpICE9IFRSRUVfTElTVCkKKyAgICByZXR1cm4gZmFsc2U7CisK KyAgaWYgKCFUUkVFX1BVUlBPU0UgKGF0dHIpIHx8IFRSRUVfQ09ERSAoVFJFRV9QVVJQT1NFIChh dHRyKSkgIT0gVFJFRV9MSVNUKQorICAgIHJldHVybiBmYWxzZTsKKyAgaWYgKCFUUkVFX1ZBTFVF IChhdHRyKSB8fCBUUkVFX0NPREUgKFRSRUVfVkFMVUUgKGF0dHIpKSAhPSBUUkVFX0xJU1QpCisg ICAgcmV0dXJuIGZhbHNlOworICBpZiAoIVRSRUVfVkFMVUUgKFRSRUVfVkFMVUUgKGF0dHIpKSkK KyAgICByZXR1cm4gZmFsc2U7CisKKyAgcmV0dXJuIChUUkVFX0NPREUgKFRSRUVfVkFMVUUgKFRS RUVfVkFMVUUgKGF0dHIpKSkgPT0gUFJFQ09ORElUSU9OX1NUTVQKKyAgICAgIHx8IFRSRUVfQ09E RSAoVFJFRV9WQUxVRSAoVFJFRV9WQUxVRSAoYXR0cikpKSA9PSBQT1NUQ09ORElUSU9OX1NUTVQK KyAgICAgIHx8IFRSRUVfQ09ERSAoVFJFRV9WQUxVRSAoVFJFRV9WQUxVRSAoYXR0cikpKSA9PSBB U1NFUlRJT05fU1RNVCk7Cit9CisKKy8qIFRydWUgaWYgQVRUUiBpcyBhbiBhc3NlcnRpb24uICAq LworCitib29sCitjcF9jb250cmFjdF9hc3NlcnRpb25fcCAoY29uc3RfdHJlZSBhdHRyKQorewor ICAvKiBUaGlzIGlzIG9ubHkgYW4gYXNzZXJ0aW9uIGlmIGl0IGlzIGEgdmFsaWQgY3h4IGNvbnRy YWN0IGF0dHJpYnV0ZSBhbmQgdGhlCisgICAgIHN0YXRlbWVudCBpcyBhbiBBU1NFUlRJT05fU1RN VC4gICovCisgIHJldHVybiBjeHhfY29udHJhY3RfYXR0cmlidXRlX3AgKGF0dHIpCisgICAgJiYg VFJFRV9DT0RFIChDT05UUkFDVF9TVEFURU1FTlQgKGF0dHIpKSA9PSBBU1NFUlRJT05fU1RNVDsK K30KKworLyogUmVtb3ZlIGFsbCBjKysyYSBzdHlsZSBjb250cmFjdCBhdHRyaWJ1dGVzIGZyb20g dGhlIERFQ0xfQVRUUklCVVRFcyBvZiB0aGUKKyAgIEZVTkNUSU9OX0RFQ0wgRk5ERUNMLiAgKi8K Kwordm9pZAorcmVtb3ZlX2NvbnRyYWN0X2F0dHJpYnV0ZXMgKHRyZWUgZm5kZWNsKQoreworICB0 cmVlIGxpc3QgPSBOVUxMX1RSRUU7CisgIGZvciAodHJlZSBwID0gREVDTF9BVFRSSUJVVEVTIChm bmRlY2wpOyBwOyBwID0gVFJFRV9DSEFJTiAocCkpCisgICAgaWYgKCFjeHhfY29udHJhY3RfYXR0 cmlidXRlX3AgKHApKQorICAgICAgbGlzdCA9IHRyZWVfY29ucyAoVFJFRV9QVVJQT1NFIChwKSwg VFJFRV9WQUxVRSAocCksIE5VTExfVFJFRSk7CisgIERFQ0xfQVRUUklCVVRFUyAoZm5kZWNsKSA9 IG5yZXZlcnNlIChsaXN0KTsKK30KKworc3RhdGljIHRyZWUgZmluZF9maXJzdF9ub25fY29udHJh Y3QgKHRyZWUgYXR0cmlidXRlcykKK3sKKyAgdHJlZSBoZWFkID0gYXR0cmlidXRlczsKKyAgdHJl ZSBwID0gZmluZF9jb250cmFjdCAoYXR0cmlidXRlcyk7CisKKyAgLyogVGhlcmUgYXJlIG5vIGNv bnRyYWN0cy4gICovCisgIGlmICghcCkKKyAgICByZXR1cm4gaGVhZDsKKworICAvKiBUaGVyZSBh cmUgbGVhZGluZyBjb250cmFjdHMuICAqLworICBpZiAocCA9PSBoZWFkKQorICAgIHsKKyAgICAg IHdoaWxlIChjeHhfY29udHJhY3RfYXR0cmlidXRlX3AgKHApKQorCXAgPSBUUkVFX0NIQUlOIChw KTsKKyAgICAgIGhlYWQgPSBwOworICAgIH0KKworICByZXR1cm4gaGVhZDsKK30KKworLyogUmVt b3ZlIGNvbnRyYWN0cyBmcm9tIEFUVFJJQlVURVMuICAqLworCit0cmVlIHNwbGljZV9vdXRfY29u dHJhY3RzICh0cmVlIGF0dHJpYnV0ZXMpCit7CisgIHRyZWUgaGVhZCA9IGZpbmRfZmlyc3Rfbm9u X2NvbnRyYWN0IChhdHRyaWJ1dGVzKTsKKyAgaWYgKCFoZWFkKQorICAgIHJldHVybiBOVUxMX1RS RUU7CisKKyAgLyogU3BsaWNlIG91dCByZW1haW5pbmcgY29udHJhY3RzLiAgKi8KKyAgdHJlZSBw ID0gVFJFRV9DSEFJTiAoaGVhZCk7CisgIHRyZWUgcSA9IGhlYWQ7CisgIHdoaWxlIChwKQorICAg IHsKKyAgICAgIGlmIChjeHhfY29udHJhY3RfYXR0cmlidXRlX3AgKHApKQorCXsKKwkgIC8qIFNr aXAgYSBzZXF1ZW5jZSBvZiBjb250cmFjdHMgYW5kIHRoZW4gbGluayBxIHRvIHRoZSBuZXh0CisJ ICAgICBub24tY29udHJhY3QgYXR0cmlidXRlLiAgKi8KKwkgIGRvCisJICAgIHAgPSBUUkVFX0NI QUlOIChwKTsKKwkgIHdoaWxlIChjeHhfY29udHJhY3RfYXR0cmlidXRlX3AgKHApKTsKKwkgIFRS RUVfQ0hBSU4gKHEpID0gcDsKKwl9CisgICAgICBlbHNlCisJcCA9IFRSRUVfQ0hBSU4gKHApOwor ICAgIH0KKworICByZXR1cm4gaGVhZDsKK30KKworLyogQ29weSBjb250cmFjdCBhdHRyaWJ1dGVz IGZyb20gTkVXREVDTCBvbnRvIHRoZSBhdHRyaWJ1dGUgbGlzdCBvZiBPTERERUNMLiAgKi8KKwor dm9pZCBjb3B5X2NvbnRyYWN0X2F0dHJpYnV0ZXMgKHRyZWUgb2xkZGVjbCwgdHJlZSBuZXdkZWNs KQoreworICB0cmVlIGF0dHJzID0gTlVMTF9UUkVFOworICBmb3IgKHRyZWUgYyA9IERFQ0xfQ09O VFJBQ1RTIChuZXdkZWNsKTsgYzsgYyA9IFRSRUVfQ0hBSU4gKGMpKQorICAgIHsKKyAgICAgIGlm ICghY3h4X2NvbnRyYWN0X2F0dHJpYnV0ZV9wIChjKSkKKwljb250aW51ZTsKKyAgICAgIGF0dHJz ID0gdHJlZV9jb25zIChUUkVFX1BVUlBPU0UgKGMpLCBUUkVFX1ZBTFVFIChjKSwgYXR0cnMpOwor ICAgIH0KKyAgYXR0cnMgPSBjaGFpbm9uIChERUNMX0FUVFJJQlVURVMgKG9sZGRlY2wpLCBucmV2 ZXJzZSAoYXR0cnMpKTsKKyAgREVDTF9BVFRSSUJVVEVTIChvbGRkZWNsKSA9IGF0dHJzOworCisg IC8qIEFuZCB1cGRhdGUgREVDTF9DT05URVhUIG9mIHRoZSBwb3N0Y29uZGl0aW9uIHJlc3VsdCBp ZGVudGlmaWVyLiAgKi8KKyAgcmVidWlsZF9wb3N0Y29uZGl0aW9ucyAob2xkZGVjbCk7Cit9CisK Ky8qIFJldHVybnMgdGhlIHBhcmFtZXRlciBjb3JyZXNwb25kaW5nIHRvIHRoZSByZXR1cm4gdmFs dWUgb2YgYSBndWFyZGVkCisgICBmdW5jdGlvbiBELiAgUmV0dXJucyBOVUxMX1RSRUUgaWYgRCBo YXMgbm8gcG9zdGNvbmRpdGlvbnMgb3IgaXMgdm9pZC4gICovCisKK3N0YXRpYyB0cmVlCitnZXRf cG9zdGNvbmRpdGlvbl9yZXN1bHRfcGFyYW1ldGVyICh0cmVlIGQpCit7CisgIGlmICghZCB8fCBk ID09IGVycm9yX21hcmtfbm9kZSkKKyAgICByZXR1cm4gTlVMTF9UUkVFOworCisgIGlmIChWT0lE X1RZUEVfUCAoVFJFRV9UWVBFIChUUkVFX1RZUEUgKGQpKSkpCisgICAgcmV0dXJuIE5VTExfVFJF RTsKKworICB0cmVlIHBvc3QgPSBERUNMX1BPU1RfRk4gKGQpOworICBpZiAoIXBvc3QgfHwgcG9z dCA9PSBlcnJvcl9tYXJrX25vZGUpCisgICAgcmV0dXJuIE5VTExfVFJFRTsKKworICBmb3IgKHRy ZWUgYXJnID0gREVDTF9BUkdVTUVOVFMgKHBvc3QpOyBhcmc7IGFyZyA9IFRSRUVfQ0hBSU4gKGFy ZykpCisgICAgaWYgKCFUUkVFX0NIQUlOIChhcmcpKQorICAgICAgcmV0dXJuIGFyZzsKKworICBy ZXR1cm4gTlVMTF9UUkVFOworfQorCisKKy8qIEZvciB1c2Ugd2l0aCB0aGUgdHJlZSBpbmxpbmVy LiBUaGlzIHByZXNlcnZlcyBub24tbWFwcGVkIGxvY2FsIHZhcmlhYmxlcywKKyAgIHN1Y2ggYXMg cG9zdGNvbmRpdGlvbiByZXN1bHQgdmFyaWFibGVzLCBkdXJpbmcgcmVtYXBwaW5nLiAgKi8KKwor c3RhdGljIHRyZWUKK3JldGFpbl9kZWNsICh0cmVlIGRlY2wsIGNvcHlfYm9keV9kYXRhICopCit7 CisgIHJldHVybiBkZWNsOworfQorCisvKiBSZXdyaXRlIHRoZSBjb25kaXRpb24gb2YgY29udHJh Y3QgaW4gcGxhY2UsIHNvIHRoYXQgcmVmZXJlbmNlcyB0byBTUkMncworICAgcGFyYW1ldGVycyBh cmUgdXBkYXRlZCB0byByZWZlciB0byBEU1QncyBwYXJhbWV0ZXJzLiBUaGUgcG9zdGNvbmRpdGlv bgorICAgcmVzdWx0IHZhcmlhYmxlIGlzIGxlZnQgdW5jaGFuZ2VkLgorCisgICBUaGlzLCBhbG9u ZyB3aXRoIHJlbWFwX2NvbnRyYWN0cywgYXJlIHN1YnJvdXRpbmVzIG9mIGR1cGxpY2F0ZV9kZWNs cy4KKyAgIFdoZW4gZGVjbGFyYXRpb25zIGFyZSBtZXJnZWQsIHdlIHNvbWV0aW1lcyBuZWVkIHRv IHVwZGF0ZSBjb250cmFjdHMgdG8KKyAgIHJlZmVyIHRvIG5ldyBwYXJhbWV0ZXJzLgorCisgICBJ ZiBEVVBMSUNBVEVfUCBpcyB0cnVlLCB0aGlzIGlzIGNhbGxlZCBieSBkdXBsaWNhdGVfZGVjbHMg dG8gcmV3cml0ZSBjb250YWN0cworICAgaW4gdGVybXMgb2YgYSBuZXcgc2V0IG9mIHBhcmFtZXRl cnMuIEluIHRoaXMgY2FzZSwgd2UgY2FuIHJldGFpbiBsb2NhbAorICAgdmFyaWFibGVzIGFwcGVh cmluZyBpbiB0aGUgY29udHJhY3QgYmVjYXVzZSB0aGUgY29udHJhY3QgaXMgbm90IGJlaW5nCisg ICBwcmVwYXJlZCBmb3IgaW5zZXJ0aW9uIGludG8gYSBuZXcgZnVuY3Rpb24uIEltcG9ydGFudGx5 LCB0aGlzIHByZXNlcnZlcyB0aGUKKyAgIHJlZmVyZW5jZXMgdG8gcG9zdGNvbmRpdGlvbiByZXN1 bHRzLCB3aGljaCBhcmUgbm90IHJlcGxhY2VkIGR1cmluZyBtZXJnaW5nLgorCisgICBJZiBmYWxz ZSwgd2UncmUgcHJlcGFyaW5nIHRvIGVtaXQgdGhlIGNvbnRyYWN0IGNvbmRpdGlvbiBpbnRvIHRo ZSBib2R5CisgICBvZiBhIG5ldyBmdW5jdGlvbiwgc28gd2UgbmVlZCB0byBtYWtlIGNvcGllcyBv ZiBhbGwgbG9jYWwgdmFyaWFibGVzCisgICBhcHBlYXJpbmcgaW4gdGhlIGNvbnRyYWN0IChlLmcu LCBpZiBpdCBpbmNsdWRlcyBhIGxhbWJkYSBleHByZXNzaW9uKS4gTm90ZQorICAgdGhhdCBpbiB0 aGlzIGNhc2UsIHBvc3Rjb25kaXRpb24gcmVzdWx0cyBhcmUgbWFwcGVkIHRvIHRoZSBsYXN0IHBh cmFtZXRlcgorICAgb2YgRFNULgorCisgICBUaGlzIGlzIGFsc28gdXNlZCB0byByZXVzZSBhIHBh cmVudCB0eXBlJ3MgY29udHJhY3RzIG9uIHZpcnR1YWwgbWV0aG9kcy4gICovCisKK3N0YXRpYyB2 b2lkCityZW1hcF9jb250cmFjdCAodHJlZSBzcmMsIHRyZWUgZHN0LCB0cmVlIGNvbnRyYWN0LCBi b29sIGR1cGxpY2F0ZV9wKQoreworICBjb3B5X2JvZHlfZGF0YSBpZDsKKyAgaGFzaF9tYXA8dHJl ZSwgdHJlZT4gZGVjbF9tYXA7CisKKyAgbWVtc2V0ICgmaWQsIDAsIHNpemVvZiAoaWQpKTsKKyAg aWQuc3JjX2ZuID0gc3JjOworICBpZC5kc3RfZm4gPSBkc3Q7CisgIGlkLnNyY19jZnVuID0gREVD TF9TVFJVQ1RfRlVOQ1RJT04gKHNyYyk7CisgIGlkLmRlY2xfbWFwID0gJmRlY2xfbWFwOworCisg IC8qIElmIHdlJ3JlIG1lcmdpbmcgY29udHJhY3RzLCBkb24ndCBjb3B5IGxvY2FsIHZhcmlhYmxl cy4gICovCisgIGlkLmNvcHlfZGVjbCA9IGR1cGxpY2F0ZV9wID8gcmV0YWluX2RlY2wgOiBjb3B5 X2RlY2xfbm9fY2hhbmdlOworCisgIGlkLnRyYW5zZm9ybV9jYWxsX2dyYXBoX2VkZ2VzID0gQ0Jf Q0dFX0RVUExJQ0FURTsKKyAgaWQudHJhbnNmb3JtX25ld19jZmcgPSBmYWxzZTsKKyAgaWQudHJh bnNmb3JtX3JldHVybl90b19tb2RpZnkgPSBmYWxzZTsKKyAgaWQudHJhbnNmb3JtX3BhcmFtZXRl ciA9IHRydWU7CisKKyAgLyogTWFrZSBzdXJlIG5vdCB0byB1bnNoYXJlIHRyZWVzIGJlaGluZCB0 aGUgZnJvbnQtZW5kJ3MgYmFjaworICAgICBzaW5jZSBmcm9udC1lbmQgc3BlY2lmaWMgbWVjaGFu aXNtcyBtYXkgcmVseSBvbiBzaGFyaW5nLiAgKi8KKyAgaWQucmVnaW1wbGlmeSA9IGZhbHNlOwor ICBpZC5kb19ub3RfdW5zaGFyZSA9IHRydWU7CisgIGlkLmRvX25vdF9mb2xkID0gdHJ1ZTsKKwor ICAvKiBXZSdyZSBub3QgaW5zaWRlIGFueSBFSCByZWdpb24uICAqLworICBpZC5laF9scF9uciA9 IDA7CisKKyAgYm9vbCBkb19yZW1hcCA9IGZhbHNlOworCisgIC8qIEluc2VydCBwYXJhbWV0ZXIg cmVtYXBwaW5ncy4gICovCisgIGlmIChUUkVFX0NPREUgKHNyYykgPT0gRlVOQ1RJT05fREVDTCkK KyAgICBzcmMgPSBERUNMX0FSR1VNRU5UUyAoc3JjKTsKKyAgaWYgKFRSRUVfQ09ERSAoZHN0KSA9 PSBGVU5DVElPTl9ERUNMKQorICAgIGRzdCA9IERFQ0xfQVJHVU1FTlRTIChkc3QpOworCisgIGZv ciAodHJlZSBzcCA9IHNyYywgZHAgPSBkc3Q7CisgICAgICAgc3AgfHwgZHA7CisgICAgICAgc3Ag PSBERUNMX0NIQUlOIChzcCksIGRwID0gREVDTF9DSEFJTiAoZHApKQorICAgIHsKKyAgICAgIGlm ICghc3AgJiYgZHAKKwkgICYmIFRSRUVfQ09ERSAoY29udHJhY3QpID09IFBPU1RDT05ESVRJT05f U1RNVAorCSAgJiYgREVDTF9DSEFJTiAoZHApID09IE5VTExfVFJFRSkKKwl7CisJICBnY2NfYXNz ZXJ0ICghZHVwbGljYXRlX3ApOworCSAgaWYgKHRyZWUgcmVzdWx0ID0gUE9TVENPTkRJVElPTl9J REVOVElGSUVSIChjb250cmFjdCkpCisJICAgIHsKKwkgICAgICBnY2NfYXNzZXJ0IChERUNMX1Ag KHJlc3VsdCkpOworCSAgICAgIGluc2VydF9kZWNsX21hcCAoJmlkLCByZXN1bHQsIGRwKTsKKwkg ICAgICBkb19yZW1hcCA9IHRydWU7CisJICAgIH0KKwkgIGJyZWFrOworCX0KKyAgICAgIGdjY19h c3NlcnQgKHNwICYmIGRwKTsKKworICAgICAgaWYgKHNwID09IGRwKQorCWNvbnRpbnVlOworCisg ICAgICBpbnNlcnRfZGVjbF9tYXAgKCZpZCwgc3AsIGRwKTsKKyAgICAgIGRvX3JlbWFwID0gdHJ1 ZTsKKyAgICB9CisgIGlmICghZG9fcmVtYXApCisgICAgcmV0dXJuOworCisgIHdhbGtfdHJlZSAo JkNPTlRSQUNUX0NPTkRJVElPTiAoY29udHJhY3QpLCBjb3B5X3RyZWVfYm9keV9yLCAmaWQsIE5V TEwpOworfQorCisvKiBSZXdyaXRlIGFueSByZWZlcmVuY2VzIHRvIFNSQydzIFBBUk1fREVDTHMg dG8gdGhlIGNvcnJlc3BvbmRpbmcgUEFSTV9ERUNMIGluCisgICBEU1QgaW4gYWxsIG9mIHRoZSBj b250cmFjdCBhdHRyaWJ1dGVzIGluIENPTlRSQUNUUyBieSBjYWxsaW5nIHJlbWFwX2NvbnRyYWN0 CisgICBvbiBlYWNoLgorCisgICBUaGlzIGlzIHVzZWQgZm9yIHR3byBwdXJwb3NlczogdG8gcmV3 cml0ZSBjb250cmFjdCBhdHRyaWJ1dGVzIGR1cmluZworICAgZHVwbGljYXRlX2RlY2xzLCBhbmQg dG8gcHJlcGFyZSBjb250cmFjdHMgZm9yIGVtaXNzaW9uIGludG8gYSBmdW5jdGlvbidzCisgICBy ZXNwZWN0aXZlIHByZWNvbmRpdGlvbiBhbmQgcG9zdGNvbmRpdGlvbiBmdW5jdGlvbnMuIERVUExJ Q0FURV9QIGlzIHVzZWQKKyAgIHRvIGRldGVybWluZSB0aGUgY29udGV4dCBpbiB3aGljaCB0aGlz IGZ1bmN0aW9uIGlzIGNhbGxlZC4gU2VlIGFib3ZlIGZvcgorICAgdGhlIGJlaGF2aW9yIGRlc2Ny aWJlZCBieSB0aGlzIGZsYWcuICAqLworCit2b2lkCityZW1hcF9jb250cmFjdHMgKHRyZWUgc3Jj LCB0cmVlIGRzdCwgdHJlZSBjb250cmFjdHMsIGJvb2wgZHVwbGljYXRlX3ApCit7CisgIGZvciAo dHJlZSBhdHRyID0gY29udHJhY3RzOyBhdHRyOyBhdHRyID0gQ09OVFJBQ1RfQ0hBSU4gKGF0dHIp KQorICAgIHsKKyAgICAgIGlmICghY3h4X2NvbnRyYWN0X2F0dHJpYnV0ZV9wIChhdHRyKSkKKwlj b250aW51ZTsKKyAgICAgIHRyZWUgY29udHJhY3QgPSBDT05UUkFDVF9TVEFURU1FTlQgKGF0dHIp OworICAgICAgaWYgKFRSRUVfQ09ERSAoQ09OVFJBQ1RfQ09ORElUSU9OIChjb250cmFjdCkpICE9 IERFRkVSUkVEX1BBUlNFKQorCXJlbWFwX2NvbnRyYWN0IChzcmMsIGRzdCwgY29udHJhY3QsIGR1 cGxpY2F0ZV9wKTsKKyAgICB9Cit9CisKKy8qIEhlbHBlciB0byByZXBsYWNlIHJlZmVyZW5jZXMg dG8gZHVtbXkgdGhpcyBwYXJhbWV0ZXJzIHdpdGggcmVmZXJlbmNlcyB0bworICAgdGhlIGZpcnN0 IGFyZ3VtZW50IG9mIHRoZSBGVU5DVElPTl9ERUNMIERBVEEuICAqLworCitzdGF0aWMgdHJlZQor cmVtYXBfZHVtbXlfdGhpc18xICh0cmVlICp0cCwgaW50ICosIHZvaWQgKmRhdGEpCit7CisgIGlm ICghaXNfdGhpc19wYXJhbWV0ZXIgKCp0cCkpCisgICAgcmV0dXJuIE5VTExfVFJFRTsKKyAgdHJl ZSBmbiA9ICh0cmVlKWRhdGE7CisgICp0cCA9IERFQ0xfQVJHVU1FTlRTIChmbik7CisgIHJldHVy biBOVUxMX1RSRUU7Cit9CisKKy8qIFJlcGxhY2UgYWxsIHJlZmVyZW5jZXMgdG8gZHVtbXkgdGhp cyBwYXJhbWV0ZXJzIGluIEVYUFIgd2l0aCByZWZlcmVuY2VzIHRvCisgICB0aGUgZmlyc3QgYXJn dW1lbnQgb2YgdGhlIEZVTkNUSU9OX0RFQ0wgRk4uICAqLworCitzdGF0aWMgdm9pZAorcmVtYXBf ZHVtbXlfdGhpcyAodHJlZSBmbiwgdHJlZSAqZXhwcikKK3sKKyAgd2Fsa190cmVlIChleHByLCBy ZW1hcF9kdW1teV90aGlzXzEsIGZuLCBOVUxMKTsKK30KKworLyogQ29udHJhY3QgbWF0Y2hpbmcu ICAqLworCisvKiBUcnVlIGlmIHRoZSBjb250cmFjdCBpcyB2YWxpZC4gICovCisKK3N0YXRpYyBi b29sCitjb250cmFjdF92YWxpZF9wICh0cmVlIGNvbnRyYWN0KQoreworICByZXR1cm4gQ09OVFJB Q1RfQ09ORElUSU9OIChjb250cmFjdCkgIT0gZXJyb3JfbWFya19ub2RlOworfQorCisvKiBUcnVl IGlmIHRoZSBjb250cmFjdCBhdHRyaWJ1dGUgaXMgdmFsaWQuICAqLworCitzdGF0aWMgYm9vbAor Y29udHJhY3RfYXR0cmlidXRlX3ZhbGlkX3AgKHRyZWUgYXR0cmlidXRlKQoreworICByZXR1cm4g Y29udHJhY3RfdmFsaWRfcCAoVFJFRV9WQUxVRSAoVFJFRV9WQUxVRSAoYXR0cmlidXRlKSkpOwor fQorCisvKiBDb21wYXJlIHRoZSBjb250cmFjdCBjb25kaXRpb25zIG9mIE9MRF9BVFRSIGFuZCBO RVdfQVRUUi4gUmV0dXJucyBmYWxzZQorICAgaWYgdGhlIGNvbmRpdGlvbnMgYXJlIGVxdWl2YWxl bnQsIGFuZCB0cnVlIG90aGVyd2lzZS4gICovCisKK3N0YXRpYyBib29sCitjaGVja19mb3JfbWlz bWF0Y2hlZF9jb250cmFjdHMgKHRyZWUgb2xkX2F0dHIsIHRyZWUgbmV3X2F0dHIsCisJCQkgICAg ICAgY29udHJhY3RfbWF0Y2hpbmdfY29udGV4dCBjdHgpCit7CisgIHRyZWUgb2xkX2NvbnRyYWN0 ID0gQ09OVFJBQ1RfU1RBVEVNRU5UIChvbGRfYXR0cik7CisgIHRyZWUgbmV3X2NvbnRyYWN0ID0g Q09OVFJBQ1RfU1RBVEVNRU5UIChuZXdfYXR0cik7CisKKyAgLyogRGlmZmVyZW50IGtpbmRzIG9m IGNvbnRyYWN0cyBkbyBub3QgbWF0Y2guICAqLworICBpZiAoVFJFRV9DT0RFIChvbGRfY29udHJh Y3QpICE9IFRSRUVfQ09ERSAobmV3X2NvbnRyYWN0KSkKKyAgICB7CisgICAgICBhdXRvX2RpYWdu b3N0aWNfZ3JvdXAgZDsKKyAgICAgIGVycm9yX2F0IChFWFBSX0xPQ0FUSU9OIChuZXdfY29udHJh Y3QpLAorCQljdHggPT0gY21jX2RlY2xhcmF0aW9uCisJCT8gIm1pc21hdGNoZWQgY29udHJhY3Qg YXR0cmlidXRlIGluIGRlY2xhcmF0aW9uIgorCQk6ICJtaXNtYXRjaGVkIGNvbnRyYWN0IGF0dHJp YnV0ZSBpbiBvdmVycmlkZSIpOworICAgICAgaW5mb3JtIChFWFBSX0xPQ0FUSU9OIChvbGRfY29u dHJhY3QpLCAicHJldmlvdXMgY29udHJhY3QgaGVyZSIpOworICAgICAgcmV0dXJuIHRydWU7Cisg ICAgfQorCisgIC8qIEEgZGVmZXJyZWQgY29udHJhY3QgdGVudGF0aXZlbHkgbWF0Y2hlcy4gICov CisgIGlmIChDT05UUkFDVF9DT05ESVRJT05fREVGRVJSRURfUCAobmV3X2NvbnRyYWN0KSkKKyAg ICByZXR1cm4gZmFsc2U7CisKKyAgLyogQ29tcGFyZSB0aGUgY29uZGl0aW9ucyBvZiB0aGUgY29u dHJhY3RzLiAgV2UgZm9sZCBpbW1lZGlhdGVseSB0byBhdm9pZAorICAgICBpc3N1ZXMgY29tcGFy aW5nIGNvbnRyYWN0cyBvbiBvdmVycmlkZXMgdGhhdCB1c2UgcGFyYW1ldGVycyAtLSBzZWUKKyAg ICAgY29udHJhY3RzLXByZTMuICAqLworICB0cmVlIHQxID0gY3BfZnVsbHlfZm9sZF9pbml0IChD T05UUkFDVF9DT05ESVRJT04gKG9sZF9jb250cmFjdCkpOworICB0cmVlIHQyID0gY3BfZnVsbHlf Zm9sZF9pbml0IChDT05UUkFDVF9DT05ESVRJT04gKG5ld19jb250cmFjdCkpOworCisgIC8qIENv bXBhcmUgdGhlIGNvbnRyYWN0cy4gVGhlIGZvbGQgZG9lc24ndCBlbGltaW5hdGUgY29udmVyc2lv bnMgdG8gbWVtYmVycy4KKyAgICAgU2V0IHRoZSBjb21wYXJpbmdfb3ZlcnJpZGVfY29udHJhY3Rz IGZsYWcgdG8gZW5zdXJlIHRoYXQgcmVmZXJlbmNlcworICAgICB0aHJvdWdoICd0aGlzJyBhcmUg ZXF1YWwgaWYgdGhleSBkZXNpZ25hdGUgdGhlIHNhbWUgbWVtYmVyLCByZWdhcmRsZXNzIG9mCisg ICAgIHRoZSBwYXRoIHRob3NlIG1lbWJlcnMuICAqLworICBib29sIHNhdmVkX2NvbXBhcmluZ19j b250cmFjdHMgPSBjb21wYXJpbmdfb3ZlcnJpZGVfY29udHJhY3RzOworICBjb21wYXJpbmdfb3Zl cnJpZGVfY29udHJhY3RzID0gKGN0eCA9PSBjbWNfb3ZlcnJpZGUpOworICBib29sIG1hdGNoaW5n X3AgPSBjcF90cmVlX2VxdWFsICh0MSwgdDIpOworICBjb21wYXJpbmdfb3ZlcnJpZGVfY29udHJh Y3RzID0gc2F2ZWRfY29tcGFyaW5nX2NvbnRyYWN0czsKKworICBpZiAoIW1hdGNoaW5nX3ApCisg ICAgeworICAgICAgYXV0b19kaWFnbm9zdGljX2dyb3VwIGQ7CisgICAgICBlcnJvcl9hdCAoRVhQ Ul9MT0NBVElPTiAoQ09OVFJBQ1RfQ09ORElUSU9OIChuZXdfY29udHJhY3QpKSwKKwkJY3R4ID09 IGNtY19kZWNsYXJhdGlvbgorCQk/ICJtaXNtYXRjaGVkIGNvbnRyYWN0IGNvbmRpdGlvbiBpbiBk ZWNsYXJhdGlvbiIKKwkJOiAibWlzbWF0Y2hlZCBjb250cmFjdCBjb25kaXRpb24gaW4gb3ZlcnJp ZGUiKTsKKyAgICAgIGluZm9ybSAoRVhQUl9MT0NBVElPTiAoQ09OVFJBQ1RfQ09ORElUSU9OIChv bGRfY29udHJhY3QpKSwKKwkgICAgICAicHJldmlvdXMgY29udHJhY3QgaGVyZSIpOworICAgICAg cmV0dXJuIHRydWU7CisgICAgfQorCisgIHJldHVybiBmYWxzZTsKK30KKworLyogQ29tcGFyZSB0 aGUgY29udHJhY3QgYXR0cmlidXRlcyBvZiBPTERERUNMIGFuZCBORVdERUNMLiBSZXR1cm5zIHRy dWUKKyAgIGlmIHRoZSBjb250cmFjdHMgbWF0Y2gsIGFuZCBmYWxzZSBpZiB0aGV5IGRpZmZlci4g ICovCisKK2Jvb2wKK21hdGNoX2NvbnRyYWN0X2NvbmRpdGlvbnMgKGxvY2F0aW9uX3Qgb2xkbG9j LCB0cmVlIG9sZF9hdHRycywKKwkJCSAgIGxvY2F0aW9uX3QgbmV3bG9jLCB0cmVlIG5ld19hdHRy cywKKwkJCSAgIGNvbnRyYWN0X21hdGNoaW5nX2NvbnRleHQgY3R4KQoreworICAvKiBDb250cmFj dHMgb25seSBtYXRjaCBpZiB0aGV5IGFyZSBib3RoIHNwZWNpZmllZC4gICovCisgIGlmICghb2xk X2F0dHJzIHx8ICFuZXdfYXR0cnMpCisgICAgcmV0dXJuIHRydWU7CisKKyAgLyogQ29tcGFyZSBl YWNoIGNvbnRyYWN0IGluIHR1cm4uICAqLworICB3aGlsZSAob2xkX2F0dHJzICYmIG5ld19hdHRy cykKKyAgICB7CisgICAgICAvKiBJZiBlaXRoZXIgY29udHJhY3QgaXMgaWxsLWZvcm1lZCwgc2tp cCB0aGUgcmVzdCBvZiB0aGUgY29tcGFyaXNvbiwKKwkgc2luY2Ugd2UndmUgYWxyZWFkeSBkaWFn bm9zZWQgYW4gZXJyb3IuICAqLworICAgICAgaWYgKCFjb250cmFjdF9hdHRyaWJ1dGVfdmFsaWRf cCAobmV3X2F0dHJzKQorCSAgfHwgIWNvbnRyYWN0X2F0dHJpYnV0ZV92YWxpZF9wIChvbGRfYXR0 cnMpKQorCXJldHVybiBmYWxzZTsKKworICAgICAgaWYgKGNoZWNrX2Zvcl9taXNtYXRjaGVkX2Nv bnRyYWN0cyAob2xkX2F0dHJzLCBuZXdfYXR0cnMsIGN0eCkpCisJcmV0dXJuIGZhbHNlOworICAg ICAgb2xkX2F0dHJzID0gQ09OVFJBQ1RfQ0hBSU4gKG9sZF9hdHRycyk7CisgICAgICBuZXdfYXR0 cnMgPSBDT05UUkFDVF9DSEFJTiAobmV3X2F0dHJzKTsKKyAgICB9CisKKyAgLyogSWYgd2UgZGlk bid0IGNvbXBhcmUgYWxsIGF0dHJpYnV0ZXMsIHRoZSBjb250cmFjdHMgZG9uJ3QgbWF0Y2guICAq LworICBpZiAob2xkX2F0dHJzIHx8IG5ld19hdHRycykKKyAgICB7CisgICAgICBhdXRvX2RpYWdu b3N0aWNfZ3JvdXAgZDsKKyAgICAgIGVycm9yX2F0IChuZXdsb2MsCisJCWN0eCA9PSBjbWNfZGVj bGFyYXRpb24KKwkJPyAiZGVjbGFyYXRpb24gaGFzIGEgZGlmZmVyZW50IG51bWJlciBvZiBjb250 cmFjdHMgdGhhbiAiCisJCSAgInByZXZpb3VzbHkgZGVjbGFyZWQiCisJCTogIm92ZXJyaWRlIGhh cyBhIGRpZmZlcmVudCBudW1iZXIgb2YgY29udHJhY3RzIHRoYW4gIgorCQkgICJwcmV2aW91c2x5 IGRlY2xhcmVkIik7CisgICAgICBpbmZvcm0gKG9sZGxvYywKKwkgICAgICBuZXdfYXR0cnMKKwkg ICAgICA/ICJvcmlnaW5hbCBkZWNsYXJhdGlvbiB3aXRoIGZld2VyIGNvbnRyYWN0cyBoZXJlIgor CSAgICAgIDogIm9yaWdpbmFsIGRlY2xhcmF0aW9uIHdpdGggbW9yZSBjb250cmFjdHMgaGVyZSIp OworICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICByZXR1cm4gdHJ1ZTsKK30KKworLyog RGVmZXJyZWQgY29udHJhY3QgbWFwcGluZy4KKworICAgVGhpcyBpcyB1c2VkIHRvIGNvbXBhcmUg bGF0ZS1wYXJzZWQgY29udHJhY3RzIG9uIG92ZXJyaWRlcyB3aXRoIHRoZWlyCisgICBiYXNlIGNs YXNzIGZ1bmN0aW9ucy4KKworICAgVE9ETzogSXQgc2VlbXMgbGlrZSB0aGlzIGNvdWxkIGJlIHJl cGxhY2VkIGJ5IGEgc2ltcGxlIGxpc3QgdGhhdCBtYXBzIGZyb20KKyAgIG92ZXJyaWRlcyB0byB0 aGVpciBiYXNlIGZ1bmN0aW9ucy4gSXQncyBub3QgY2xlYXIgdGhhdCB3ZSByZWFsbHkgbmVlZAor ICAgYSBtYXAgdG8gYSBmdW5jdGlvbiArIGEgbGlzdCBvZiBjb250cmFjdHMuICAgKi8KKworLyog TWFwIGZyb20gRk5ERUNMIHRvIGEgdHJlZSBsaXN0IG9mIGNvbnRyYWN0cyB0aGF0IGhhdmUgbm90 IGJlZW4gbWF0Y2hlZCBvcgorICAgZGlhZ25vc2VkIHlldC4gIFRoZSBUUkVFX1BVUlBPU0UgaXMg dGhlIGJhc2VmbiB3ZSdyZSBvdmVycmlkaW5nLCBhbmQgdGhlCisgICBUUkVFX1ZBTFVFIGlzIHRo ZSBsaXN0IG9mIGNvbnRyYWN0IGF0dHJzIGZvciBCQVNFRk4uICAqLworCitzdGF0aWMgaGFzaF9t YXA8dHJlZV9kZWNsX2hhc2gsIHRyZWU+IHBlbmRpbmdfZ3VhcmRlZF9kZWNsczsKKwordm9pZAor ZGVmZXJfZ3VhcmRlZF9jb250cmFjdF9tYXRjaCAodHJlZSBmbmRlY2wsIHRyZWUgZm4sIHRyZWUg Y29udHJhY3RzKQoreworICBpZiAoIXBlbmRpbmdfZ3VhcmRlZF9kZWNscy5nZXQgKGZuZGVjbCkp CisgICAgeworICAgICAgcGVuZGluZ19ndWFyZGVkX2RlY2xzLnB1dCAoZm5kZWNsLCBidWlsZF90 cmVlX2xpc3QgKGZuLCBjb250cmFjdHMpKTsKKyAgICAgIHJldHVybjsKKyAgICB9CisgIGZvciAo dHJlZSBwZW5kaW5nID0gKnBlbmRpbmdfZ3VhcmRlZF9kZWNscy5nZXQgKGZuZGVjbCk7CisgICAg ICBwZW5kaW5nOworICAgICAgcGVuZGluZyA9IFRSRUVfQ0hBSU4gKHBlbmRpbmcpKQorICAgIHsK KyAgICAgIGlmIChUUkVFX1ZBTFVFIChwZW5kaW5nKSA9PSBjb250cmFjdHMpCisJcmV0dXJuOwor ICAgICAgaWYgKFRSRUVfQ0hBSU4gKHBlbmRpbmcpID09IE5VTExfVFJFRSkKKwlUUkVFX0NIQUlO IChwZW5kaW5nKSA9IGJ1aWxkX3RyZWVfbGlzdCAoZm4sIGNvbnRyYWN0cyk7CisgICAgfQorfQor CisvKiBJZiB0aGUgRlVOQ1RJT05fREVDTCBERUNMIGhhcyBhbnkgY29udHJhY3RzIHRoYXQgaGFk IHRoZWlyIG1hdGNoaW5nCisgICBkZWZlcnJlZCBlYXJsaWVyLCBkbyB0aGF0IGNoZWNraW5nIG5v dy4gICovCisKK3ZvaWQKK21hdGNoX2RlZmVycmVkX2NvbnRyYWN0cyAodHJlZSBkZWNsKQorewor ICB0cmVlICp0cCA9IHBlbmRpbmdfZ3VhcmRlZF9kZWNscy5nZXQgKGRlY2wpOworICBpZiAoIXRw KQorICAgIHJldHVybjsKKworICBnY2NfYXNzZXJ0KCFjb250cmFjdF9hbnlfZGVmZXJyZWRfcCAo REVDTF9DT05UUkFDVFMgKGRlY2wpKSk7CisKKyAgcHJvY2Vzc2luZ190ZW1wbGF0ZV9kZWNsX3Nl bnRpbmVsIHB0ZHM7CisgIHByb2Nlc3NpbmdfdGVtcGxhdGVfZGVjbCA9IHVzZXNfdGVtcGxhdGVf cGFybXMgKGRlY2wpOworCisgIC8qIERvIGxhdGUgY29udHJhY3QgbWF0Y2hpbmcuICAqLworICBm b3IgKHRyZWUgcGVuZGluZyA9ICp0cDsgcGVuZGluZzsgcGVuZGluZyA9IFRSRUVfQ0hBSU4gKHBl bmRpbmcpKQorICAgIHsKKyAgICAgIHRyZWUgbmV3X2NvbnRyYWN0cyA9IFRSRUVfVkFMVUUgKHBl bmRpbmcpOworICAgICAgbG9jYXRpb25fdCBuZXdfbG9jID0gQ09OVFJBQ1RfU09VUkNFX0xPQ0FU SU9OIChuZXdfY29udHJhY3RzKTsKKyAgICAgIHRyZWUgb2xkX2NvbnRyYWN0cyA9IERFQ0xfQ09O VFJBQ1RTIChkZWNsKTsKKyAgICAgIGxvY2F0aW9uX3Qgb2xkX2xvYyA9IENPTlRSQUNUX1NPVVJD RV9MT0NBVElPTiAob2xkX2NvbnRyYWN0cyk7CisgICAgICB0cmVlIGJhc2UgPSBUUkVFX1BVUlBP U0UgKHBlbmRpbmcpOworICAgICAgbWF0Y2hfY29udHJhY3RfY29uZGl0aW9ucyAobmV3X2xvYywg bmV3X2NvbnRyYWN0cywKKwkJCQkgb2xkX2xvYywgb2xkX2NvbnRyYWN0cywKKwkJCQkgYmFzZSA/ IGNtY19vdmVycmlkZSA6IGNtY19kZWNsYXJhdGlvbik7CisgICAgfQorCisgIC8qIENsZWFyIG91 dCBkZWZlcnJlZCBtYXRjaCBsaXN0IHNvIHdlIGRvbid0IGNoZWNrIGl0IHR3aWNlLiAgKi8KKyAg cGVuZGluZ19ndWFyZGVkX2RlY2xzLnJlbW92ZSAoZGVjbCk7Cit9CisKKy8qIE1hcCBmcm9tIEZV TkNUSU9OX0RFQ0wgdG8gYSBGVU5DVElPTl9ERUNMIGZvciBlaXRoZXIgdGhlIFBSRV9GTiBvciBQ T1NUX0ZOLgorICAgVGhlc2UgYXJlIHVzZWQgdG8gcGFyc2UgY29udHJhY3QgY29uZGl0aW9ucyBh bmQgYXJlIGNhbGxlZCBpbnNpZGUgdGhlIGJvZHkKKyAgIG9mIHRoZSBndWFyZGVkIGZ1bmN0aW9u LiAgKi8KK3N0YXRpYyBHVFkoKCkpIGhhc2hfbWFwPHRyZWUsIHRyZWU+ICpkZWNsX3ByZV9mbjsK K3N0YXRpYyBHVFkoKCkpIGhhc2hfbWFwPHRyZWUsIHRyZWU+ICpkZWNsX3Bvc3RfZm47CisKKy8q IFJldHVybnMgdGhlIHByZWNvbmRpdGlvbiBmdW50aW9uIGZvciBELCBvciBudWxsIGlmIG5vdCBz ZXQuICAqLworCit0cmVlCitnZXRfcHJlY29uZGl0aW9uX2Z1bmN0aW9uICh0cmVlIGQpCit7Cisg IGhhc2hfbWFwX21heWJlX2NyZWF0ZTxobV9nZ2M+IChkZWNsX3ByZV9mbik7CisgIHRyZWUgKnJl c3VsdCA9IGRlY2xfcHJlX2ZuLT5nZXQgKGQpOworICByZXR1cm4gcmVzdWx0ID8gKnJlc3VsdCA6 IE5VTExfVFJFRTsKK30KKworLyogUmV0dXJucyB0aGUgcG9zdGNvbmRpdGlvbiBmdW50aW9uIGZv ciBELCBvciBudWxsIGlmIG5vdCBzZXQuICAqLworCit0cmVlCitnZXRfcG9zdGNvbmRpdGlvbl9m dW5jdGlvbiAodHJlZSBkKQoreworICBoYXNoX21hcF9tYXliZV9jcmVhdGU8aG1fZ2djPiAoZGVj bF9wb3N0X2ZuKTsKKyAgdHJlZSAqcmVzdWx0ID0gZGVjbF9wb3N0X2ZuLT5nZXQgKGQpOworICBy ZXR1cm4gcmVzdWx0ID8gKnJlc3VsdCA6IE5VTExfVFJFRTsKK30KKworLyogTWFrZXMgUFJFIHRo ZSBwcmVjb25kaXRpb24gZnVuY3Rpb24gZm9yIEQuICAqLworCit2b2lkCitzZXRfcHJlY29uZGl0 aW9uX2Z1bmN0aW9uICh0cmVlIGQsIHRyZWUgcHJlKQoreworICBnY2NfYXNzZXJ0IChwcmUpOwor ICBoYXNoX21hcF9tYXliZV9jcmVhdGU8aG1fZ2djPiAoZGVjbF9wcmVfZm4pOworICBnY2NfYXNz ZXJ0ICghZGVjbF9wcmVfZm4tPmdldCAoZCkpOworICBkZWNsX3ByZV9mbi0+cHV0IChkLCBwcmUp OworfQorCisvKiBNYWtlcyBQT1NUIHRoZSBwb3N0Y29uZGl0aW9uIGZ1bmN0aW9uIGZvciBELiAg Ki8KKwordm9pZAorc2V0X3Bvc3Rjb25kaXRpb25fZnVuY3Rpb24gKHRyZWUgZCwgdHJlZSBwb3N0 KQoreworICBnY2NfYXNzZXJ0IChwb3N0KTsKKyAgaGFzaF9tYXBfbWF5YmVfY3JlYXRlPGhtX2dn Yz4gKGRlY2xfcG9zdF9mbik7CisgIGdjY19hc3NlcnQgKCFkZWNsX3Bvc3RfZm4tPmdldCAoZCkp OworICBkZWNsX3Bvc3RfZm4tPnB1dCAoZCwgcG9zdCk7Cit9CisKKy8qIFNldCB0aGUgUFJFIGFu ZCBQT1NUIGZ1bmN0aW9ucyBmb3IgRC4gIE5vdGUgdGhhdCBQUkUgYW5kIFBPU1QgY2FuIGJlCisg ICBudWxsIGluIHRoaXMgY2FzZS4gSWYgc28gdGhlIGZ1bmN0aW9ucyBhcmUgbm90IHJlY29yZGVk LiAgKi8KKwordm9pZAorc2V0X2NvbnRyYWN0X2Z1bmN0aW9ucyAodHJlZSBkLCB0cmVlIHByZSwg dHJlZSBwb3N0KQoreworICBpZiAocHJlKQorICAgIHNldF9wcmVjb25kaXRpb25fZnVuY3Rpb24g KGQsIHByZSk7CisgIGlmIChwb3N0KQorICAgIHNldF9wb3N0Y29uZGl0aW9uX2Z1bmN0aW9uIChk LCBwb3N0KTsKK30KKworLyogUmV0dXJuIGEgY29weSBvZiB0aGUgRlVOQ1RJT05fREVDTCBJREVD TCB3aXRoIGl0cyBvd24gdW5zaGFyZWQKKyAgIFBBUk1fREVDTCBhbmQgREVDTF9BVFRSSUJVVEVz LiAgKi8KKworc3RhdGljIHRyZWUKK2NvcHlfZm5fZGVjbCAodHJlZSBpZGVjbCkKK3sKKyAgdHJl ZSBkZWNsID0gY29weV9kZWNsIChpZGVjbCk7CisgIERFQ0xfQVRUUklCVVRFUyAoZGVjbCkgPSBj b3B5X2xpc3QgKERFQ0xfQVRUUklCVVRFUyAoaWRlY2wpKTsKKworICBpZiAoREVDTF9SRVNVTFQg KGlkZWNsKSkKKyAgICB7CisgICAgICBERUNMX1JFU1VMVCAoZGVjbCkgPSBjb3B5X2RlY2wgKERF Q0xfUkVTVUxUIChpZGVjbCkpOworICAgICAgREVDTF9DT05URVhUIChERUNMX1JFU1VMVCAoZGVj bCkpID0gZGVjbDsKKyAgICB9CisgIGlmICghREVDTF9BUkdVTUVOVFMgKGlkZWNsKSB8fCBWT0lE X1RZUEVfUCAoREVDTF9BUkdVTUVOVFMgKGlkZWNsKSkpCisgICAgcmV0dXJuIGRlY2w7CisKKyAg dHJlZSBsYXN0ID0gREVDTF9BUkdVTUVOVFMgKGRlY2wpID0gY29weV9kZWNsIChERUNMX0FSR1VN RU5UUyAoZGVjbCkpOworICBERUNMX0NPTlRFWFQgKGxhc3QpID0gZGVjbDsKKyAgZm9yICh0cmVl IHAgPSBUUkVFX0NIQUlOIChERUNMX0FSR1VNRU5UUyAoaWRlY2wpKTsgcDsgcCA9IFRSRUVfQ0hB SU4gKHApKQorICAgIHsKKyAgICAgIGlmIChWT0lEX1RZUEVfUCAocCkpCisJeworCSAgVFJFRV9D SEFJTiAobGFzdCkgPSB2b2lkX2xpc3Rfbm9kZTsKKwkgIGJyZWFrOworCX0KKyAgICAgIGxhc3Qg PSBUUkVFX0NIQUlOIChsYXN0KSA9IGNvcHlfZGVjbCAocCk7CisgICAgICBERUNMX0NPTlRFWFQg KGxhc3QpID0gZGVjbDsKKyAgICB9CisgIHJldHVybiBkZWNsOworfQorCisvKiBCdWlsZCBhIGRl Y2xhcmF0aW9uIGZvciB0aGUgcHJlLSBvciBwb3N0Y29uZGl0aW9uIG9mIGEgZ3VhcmRlZCBGTkRF Q0wuICAqLworCitzdGF0aWMgdHJlZQorYnVpbGRfY29udHJhY3RfY29uZGl0aW9uX2Z1bmN0aW9u ICh0cmVlIGZuZGVjbCwgYm9vbCBwcmUpCit7CisgIGlmIChUUkVFX1RZUEUgKGZuZGVjbCkgPT0g ZXJyb3JfbWFya19ub2RlKQorICAgIHJldHVybiBlcnJvcl9tYXJrX25vZGU7CisgIGlmIChERUNM X05PTlNUQVRJQ19NRU1CRVJfRlVOQ1RJT05fUCAoZm5kZWNsKQorICAgICAgJiYgIVRZUEVfTUVU SE9EX0JBU0VUWVBFIChUUkVFX1RZUEUgKGZuZGVjbCkpKQorICAgIHJldHVybiBlcnJvcl9tYXJr X25vZGU7CisKKyAgLyogQ3JlYXRlIGFuZCByZW5hbWUgdGhlIHVuY2hlY2tlZCBmdW5jdGlvbiBh bmQgZ2l2ZSBhbiBpbnRlcm5hbCBuYW1lLiAgKi8KKyAgdHJlZSBmbiA9IGNvcHlfZm5fZGVjbCAo Zm5kZWNsKTsKKyAgREVDTF9SRVNVTFQgKGZuKSA9IE5VTExfVFJFRTsKKyAgdHJlZSB2YWx1ZV90 eXBlID0gcHJlID8gdm9pZF90eXBlX25vZGUgOiBUUkVFX1RZUEUgKFRSRUVfVFlQRSAoZm4pKTsK KworICAvKiBEb24ndCBwcm9wYWdhdGUgZGVjbGFyYXRpb24gYXR0cmlidXRlcyB0byB0aGUgY2hl Y2tpbmcgZnVuY3Rpb24sCisgICAgIGluY2x1ZGluZyB0aGUgb3JpZ2luYWwgY29udHJhY3RzLiAg Ki8KKyAgREVDTF9BVFRSSUJVVEVTIChmbikgPSBOVUxMX1RSRUU7CisKKyAgdHJlZSBhcmdfdHlw ZXMgPSBOVUxMX1RSRUU7CisgIHRyZWUgKmxhc3QgPSAmYXJnX3R5cGVzOworCisgIC8qIEZJWE1F IHdpbGwgbGF0ZXIgb3B0aW1pemF0aW9ucyBkZWxldGUgdW51c2VkIGFyZ3MgdG8gcHJldmVudCBl eHRyYSBhcmcKKyAgICAgcGFzc2luZz8gZG8gd2UgY2FyZT8gKi8KKyAgdHJlZSBjbGFzc190eXBl ID0gTlVMTF9UUkVFOworICBmb3IgKHRyZWUgYXJnX3R5cGUgPSBUWVBFX0FSR19UWVBFUyAoVFJF RV9UWVBFIChmbikpOworICAgICAgYXJnX3R5cGUgJiYgYXJnX3R5cGUgIT0gdm9pZF9saXN0X25v ZGU7CisgICAgICBhcmdfdHlwZSA9IFRSRUVfQ0hBSU4gKGFyZ190eXBlKSkKKyAgICB7CisgICAg ICBpZiAoREVDTF9OT05TVEFUSUNfTUVNQkVSX0ZVTkNUSU9OX1AgKGZuZGVjbCkKKwkgICYmIFRZ UEVfQVJHX1RZUEVTIChUUkVFX1RZUEUgKGZuKSkgPT0gYXJnX3R5cGUpCisgICAgICB7CisJY2xh c3NfdHlwZSA9IFRSRUVfVFlQRSAoVFJFRV9WQUxVRSAoYXJnX3R5cGUpKTsKKwljb250aW51ZTsK KyAgICAgIH0KKyAgICAgICpsYXN0ID0gYnVpbGRfdHJlZV9saXN0IChUUkVFX1BVUlBPU0UgKGFy Z190eXBlKSwgVFJFRV9WQUxVRSAoYXJnX3R5cGUpKTsKKyAgICAgIGxhc3QgPSAmVFJFRV9DSEFJ TiAoKmxhc3QpOworICAgIH0KKworICBpZiAocHJlIHx8IFZPSURfVFlQRV9QICh2YWx1ZV90eXBl KSkKKyAgICAqbGFzdCA9IHZvaWRfbGlzdF9ub2RlOworICBlbHNlCisgICAgeworICAgICAgdHJl ZSBuYW1lID0gZ2V0X2lkZW50aWZpZXIgKCJfX3IiKTsKKyAgICAgIHRyZWUgcGFybSA9IGJ1aWxk X2xhbmdfZGVjbCAoUEFSTV9ERUNMLCBuYW1lLCB2YWx1ZV90eXBlKTsKKyAgICAgIERFQ0xfQ09O VEVYVCAocGFybSkgPSBmbjsKKyAgICAgIERFQ0xfQVJHVU1FTlRTIChmbikgPSBjaGFpbm9uIChE RUNMX0FSR1VNRU5UUyAoZm4pLCBwYXJtKTsKKworICAgICAgKmxhc3QgPSBidWlsZF90cmVlX2xp c3QgKE5VTExfVFJFRSwgdmFsdWVfdHlwZSk7CisgICAgICBUUkVFX0NIQUlOICgqbGFzdCkgPSB2 b2lkX2xpc3Rfbm9kZTsKKworICAgICAgaWYgKGFnZ3JlZ2F0ZV92YWx1ZV9wICh2YWx1ZV90eXBl LCBmbmRlY2wpKQorCS8qIElmIEZOREVDTCByZXR1cm5zIGluIG1lbW9yeSwgZG9uJ3QgcmV0dXJu IHRoZSB2YWx1ZSBmcm9tIHRoZQorCSAgIHBvc3Rjb25kaXRpb24uICAqLworCXZhbHVlX3R5cGUg PSB2b2lkX3R5cGVfbm9kZTsKKyAgICB9CisKKyAgVFJFRV9UWVBFIChmbikgPSBidWlsZF9mdW5j dGlvbl90eXBlICh2YWx1ZV90eXBlLCBhcmdfdHlwZXMpOworICBpZiAoREVDTF9OT05TVEFUSUNf TUVNQkVSX0ZVTkNUSU9OX1AgKGZuZGVjbCkpCisgICAgVFJFRV9UWVBFIChmbikgPSBidWlsZF9t ZXRob2RfdHlwZSAoY2xhc3NfdHlwZSwgVFJFRV9UWVBFIChmbikpOworCisgIERFQ0xfTkFNRSAo Zm4pID0gY29weV9ub2RlIChERUNMX05BTUUgKGZuKSk7CisgIERFQ0xfSU5JVElBTCAoZm4pID0g ZXJyb3JfbWFya19ub2RlOworICBERUNMX0FCU1RSQUNUX09SSUdJTiAoZm4pID0gZm5kZWNsOwor CisgIElERU5USUZJRVJfVklSVFVBTF9QIChERUNMX05BTUUgKGZuKSkgPSBmYWxzZTsKKyAgREVD TF9WSVJUVUFMX1AgKGZuKSA9IGZhbHNlOworCisgIC8qIE1ha2UgdGhlc2UgZnVuY3Rpb25zIGlu dGVybmFsIGlmIHdlIGNhbiwgaS5lLiBpZiB0aGUgZ3VhcmRlZCBmdW5jdGlvbiBpcworICAgICBu b3QgdmFndWUgbGlua2FnZSwgb3IgaWYgd2UgY2FuIHB1dCB0aGVtIGluIGEgY29tZGF0IGdyb3Vw IHdpdGggdGhlCisgICAgIGd1YXJkZWQgZnVuY3Rpb24uICAqLworICBpZiAoIURFQ0xfV0VBSyAo Zm5kZWNsKSB8fCBIQVZFX0NPTURBVF9HUk9VUCkKKyAgICB7CisgICAgICBUUkVFX1BVQkxJQyAo Zm4pID0gZmFsc2U7CisgICAgICBERUNMX0VYVEVSTkFMIChmbikgPSBmYWxzZTsKKyAgICAgIERF Q0xfV0VBSyAoZm4pID0gZmFsc2U7CisgICAgICBERUNMX0NPTURBVCAoZm4pID0gZmFsc2U7CisK KyAgICAgIC8qIFdlIGhhdmVuJ3Qgc2V0IHRoZSBjb21kYXQgZ3JvdXAgb24gdGhlIGd1YXJkZWQg ZnVuY3Rpb24geWV0LCB3ZSdsbCBhZGQKKwkgdGhpcyB0byB0aGUgc2FtZSBncm91cCBpbiBjb21k YXRfbGlua2FnZSBsYXRlci4gICovCisgICAgICBnY2NfYXNzZXJ0ICghREVDTF9PTkVfT05MWSAo Zm5kZWNsKSk7CisKKyAgICAgIERFQ0xfSU5URVJGQUNFX0tOT1dOIChmbikgPSB0cnVlOworICAg IH0KKworICBERUNMX0FSVElGSUNJQUwgKGZuKSA9IHRydWU7CisKKyAgLyogVXBkYXRlIHZhcmlv dXMgaW5saW5lIHJlbGF0ZWQgZGVjbGFyYXRpb24gcHJvcGVydGllcy4gICovCisgIC8vREVDTF9E RUNMQVJFRF9JTkxJTkVfUCAoZm4pID0gdHJ1ZTsKKyAgREVDTF9ESVNSRUdBUkRfSU5MSU5FX0xJ TUlUUyAoZm4pID0gdHJ1ZTsKKyAgVFJFRV9OT19XQVJOSU5HIChmbikgPSAxOworCisgIHJldHVy biBmbjsKK30KKworLyogUmV0dXJuIHRydWUgaWYgQ09OVFJBQ1QgaXMgY2hlY2tlZCBvciBhc3N1 bWVkIHVuZGVyIHRoZSBjdXJyZW50IGJ1aWxkCisgICBjb25maWd1cmF0aW9uLiAqLworCitib29s Citjb250cmFjdF9hY3RpdmVfcCAodHJlZSBjb250cmFjdCkKK3sKKyAgcmV0dXJuIGdldF9jb250 cmFjdF9zZW1hbnRpYyAoY29udHJhY3QpICE9IENDU19JR05PUkU7Cit9CisKK3N0YXRpYyBib29s CitoYXNfYWN0aXZlX2NvbnRyYWN0X2NvbmRpdGlvbiAodHJlZSBkLCB0cmVlX2NvZGUgYykKK3sK KyAgZm9yICh0cmVlIGFzID0gREVDTF9DT05UUkFDVFMgKGQpIDsgYXMgIT0gTlVMTF9UUkVFOyBh cyA9IFRSRUVfQ0hBSU4gKGFzKSkKKyAgICB7CisgICAgICB0cmVlIGNvbnRyYWN0ID0gVFJFRV9W QUxVRSAoVFJFRV9WQUxVRSAoYXMpKTsKKyAgICAgIGlmIChUUkVFX0NPREUgKGNvbnRyYWN0KSA9 PSBjICYmIGNvbnRyYWN0X2FjdGl2ZV9wIChjb250cmFjdCkpCisJcmV0dXJuIHRydWU7CisgICAg fQorICByZXR1cm4gZmFsc2U7Cit9CisKKy8qIFRydWUgaWYgRCBoYXMgYW55IGNoZWNrZWQgb3Ig YXNzdW1lZCBwcmVjb25kaXRpb25zLiAgKi8KKworc3RhdGljIGJvb2wKK2hhc19hY3RpdmVfcHJl Y29uZGl0aW9ucyAodHJlZSBkKQoreworICByZXR1cm4gaGFzX2FjdGl2ZV9jb250cmFjdF9jb25k aXRpb24gKGQsIFBSRUNPTkRJVElPTl9TVE1UKTsKK30KKworLyogVHJ1ZSBpZiBEIGhhcyBhbnkg Y2hlY2tlZCBvciBhc3N1bWVkIHBvc3Rjb25kaXRpb25zLiAgKi8KKworc3RhdGljIGJvb2wKK2hh c19hY3RpdmVfcG9zdGNvbmRpdGlvbnMgKHRyZWUgZCkKK3sKKyAgcmV0dXJuIGhhc19hY3RpdmVf Y29udHJhY3RfY29uZGl0aW9uIChkLCBQT1NUQ09ORElUSU9OX1NUTVQpOworfQorCisvKiBSZXR1 cm4gdHJ1ZSBpZiBhbnkgY29udHJhY3QgaW4gdGhlIENPTlRSQUNUIGxpc3QgaXMgY2hlY2tlZCBv ciBhc3N1bWVkCisgICB1bmRlciB0aGUgY3VycmVudCBidWlsZCBjb25maWd1cmF0aW9uLiAqLwor Citib29sCitjb250cmFjdF9hbnlfYWN0aXZlX3AgKHRyZWUgY29udHJhY3QpCit7CisgIGZvciAo OyBjb250cmFjdCAhPSBOVUxMX1RSRUU7IGNvbnRyYWN0ID0gQ09OVFJBQ1RfQ0hBSU4gKGNvbnRy YWN0KSkKKyAgICBpZiAoY29udHJhY3RfYWN0aXZlX3AgKFRSRUVfVkFMVUUgKFRSRUVfVkFMVUUg KGNvbnRyYWN0KSkpKQorICAgICAgcmV0dXJuIHRydWU7CisgIHJldHVybiBmYWxzZTsKK30KKwor LyogRG8gd2UgbmVlZCB0byBtZXNzIHdpdGggY29udHJhY3RzIGZvciBERUNMMT8gICovCisKK3N0 YXRpYyBib29sCitoYW5kbGVfY29udHJhY3RzX3AgKHRyZWUgZGVjbDEpCit7CisgIHJldHVybiAo ZmxhZ19jb250cmFjdHMKKwkgICYmICFwcm9jZXNzaW5nX3RlbXBsYXRlX2RlY2wKKwkgICYmIERF Q0xfQUJTVFJBQ1RfT1JJR0lOIChkZWNsMSkgPT0gTlVMTF9UUkVFCisJICAmJiBjb250cmFjdF9h bnlfYWN0aXZlX3AgKERFQ0xfQ09OVFJBQ1RTIChkZWNsMSkpKTsKK30KKworLyogU2hvdWxkIHdl IGJyZWFrIG91dCBERUNMMSdzIHByZS9wb3N0IGNvbnRyYWN0cyBpbnRvIHNlcGFyYXRlIGZ1bmN0 aW9ucz8KKyAgIEZJWE1FIEknZCBsaWtlIHRoaXMgdG8gZGVmYXVsdCB0byAwLCBidXQgdGhhdCB3 aWxsIG5lZWQgYW4gb3ZlcmhhdWwgdG8gdGhlCisgICByZXR1cm4gaWRlbnRpZmllciBoYW5kbGlu ZyB0byBqdXN0IHJlZmVyIHRvIHRoZSBSRVNVTFRfREVDTC4gICovCisKK3N0YXRpYyBib29sCitv dXRsaW5lX2NvbnRyYWN0c19wICh0cmVlIGRlY2wxKQoreworICByZXR1cm4gKCFERUNMX0NPTlNU UlVDVE9SX1AgKGRlY2wxKQorCSAgJiYgIURFQ0xfREVTVFJVQ1RPUl9QIChkZWNsMSkpOworfQor CisvKiBCdWlsZCB0aGUgcHJlY29uZGl0aW9uIGNoZWNraW5nIGZ1bmN0aW9uIGZvciBELiAgKi8K Kworc3RhdGljIHRyZWUKK2J1aWxkX3ByZWNvbmRpdGlvbl9mdW5jdGlvbiAodHJlZSBkKQorewor ICBpZiAoIWhhc19hY3RpdmVfcHJlY29uZGl0aW9ucyAoZCkpCisgICAgcmV0dXJuIE5VTExfVFJF RTsKKworICByZXR1cm4gYnVpbGRfY29udHJhY3RfY29uZGl0aW9uX2Z1bmN0aW9uIChkLCAvKnBy ZT0qL3RydWUpOworfQorCisvKiBCdWlsZCB0aGUgcG9zdGNvbmRpdGlvbiBjaGVja2luZyBmdW5j dGlvbiBmb3IgRC4gSWYgdGhlIHJldHVybgorICAgdHlwZSBpcyB1bmRlZHVjZWQsIGRvbid0IGJ1 aWxkIHRoZSBmdW5jdGlvbiB5ZXQuIFdlIGRvIHRoYXQgaW4KKyAgIGFwcGx5X2RlZHVjZWRfcmV0 dXJuX3R5cGUuICAqLworCitzdGF0aWMgdHJlZQorYnVpbGRfcG9zdGNvbmRpdGlvbl9mdW5jdGlv biAodHJlZSBkKQoreworICBpZiAoIWhhc19hY3RpdmVfcG9zdGNvbmRpdGlvbnMgKGQpKQorICAg IHJldHVybiBOVUxMX1RSRUU7CisKKyAgdHJlZSB0eXBlID0gVFJFRV9UWVBFIChUUkVFX1RZUEUg KGQpKTsKKyAgaWYgKGlzX2F1dG8gKHR5cGUpKQorICAgIHJldHVybiBOVUxMX1RSRUU7CisKKyAg cmV0dXJuIGJ1aWxkX2NvbnRyYWN0X2NvbmRpdGlvbl9mdW5jdGlvbiAoZCwgLypwcmU9Ki9mYWxz ZSk7Cit9CisKK3N0YXRpYyB2b2lkCitidWlsZF9jb250cmFjdF9mdW5jdGlvbl9kZWNscyAodHJl ZSBkKQoreworICAvKiBDb25zdHJ1Y3RvcnMgYW5kIGRlc3RydWN0b3JzIGhhdmUgdGhlaXIgY29u dHJhY3RzIGluc2VydGVkIGlubGluZS4gICovCisgIGlmICghb3V0bGluZV9jb250cmFjdHNfcCAo ZCkpCisgICAgcmV0dXJuOworCisgIC8qIEJ1aWxkIHRoZSBwcmUvcG9zdCBmdW5jdGlvbnMgKG9y IG5vdCkuICAqLworICB0cmVlIHByZSA9IGJ1aWxkX3ByZWNvbmRpdGlvbl9mdW5jdGlvbiAoZCk7 CisgIHRyZWUgcG9zdCA9IGJ1aWxkX3Bvc3Rjb25kaXRpb25fZnVuY3Rpb24gKGQpOworICBzZXRf Y29udHJhY3RfZnVuY3Rpb25zIChkLCBwcmUsIHBvc3QpOworfQorCitzdGF0aWMgY29uc3QgY2hh ciAqCitnZXRfY29udHJhY3RfbGV2ZWxfbmFtZSAodHJlZSBjb250cmFjdCkKK3sKKyAgaWYgKENP TlRSQUNUX0xJVEVSQUxfTU9ERV9QIChjb250cmFjdCkpCisgICAgcmV0dXJuICIiOworICBpZiAo dHJlZSBtb2RlID0gQ09OVFJBQ1RfTU9ERSAoY29udHJhY3QpKQorICAgIGlmICh0cmVlIGxldmVs ID0gVFJFRV9WQUxVRSAobW9kZSkpCisgICAgICByZXR1cm4gSURFTlRJRklFUl9QT0lOVEVSIChs ZXZlbCk7CisgIHJldHVybiAiZGVmYXVsdCI7Cit9CisKK3N0YXRpYyBjb25zdCBjaGFyICoKK2dl dF9jb250cmFjdF9yb2xlX25hbWUgKHRyZWUgY29udHJhY3QpCit7CisgIGlmIChDT05UUkFDVF9M SVRFUkFMX01PREVfUCAoY29udHJhY3QpKQorICAgIHJldHVybiAiIjsKKyAgaWYgKHRyZWUgbW9k ZSA9IENPTlRSQUNUX01PREUgKGNvbnRyYWN0KSkKKyAgICBpZiAodHJlZSByb2xlID0gVFJFRV9Q VVJQT1NFIChtb2RlKSkKKyAgICAgIHJldHVybiBJREVOVElGSUVSX1BPSU5URVIgKHJvbGUpOwor ICByZXR1cm4gImRlZmF1bHQiOworfQorCisvKiBCdWlsZCBhIGxheW91dC1jb21wYXRpYmxlIGlu dGVybmFsIHZlcnNpb24gb2Ygc3RkOjpjb250cmFjdF92aW9sYXRpb24uICAqLworCitzdGF0aWMg dHJlZQorZ2V0X3BzZXVkb19jb250cmFjdF92aW9sYXRpb25fdHlwZSAoKQoreworICBpZiAoIXBz ZXVkb19jb250cmFjdF92aW9sYXRpb25fdHlwZSkKKyAgICB7CisgICAgICAvKiBNdXN0IG1hdGNo IDxjb250cmFjdD46CisJIGNsYXNzIGNvbnRyYWN0X3Zpb2xhdGlvbiB7CisJICAgY29uc3QgY2hh ciogX01fZmlsZTsKKwkgICBjb25zdCBjaGFyKiBfTV9mdW5jdGlvbjsKKwkgICBjb25zdCBjaGFy KiBfTV9jb21tZW50OworCSAgIGNvbnN0IGNoYXIqIF9NX2xldmVsOworCSAgIGNvbnN0IGNoYXIq IF9NX3JvbGU7CisJICAgdWludF9sZWFzdDMyX3QgX01fbGluZTsKKwkgICBzaWduZWQgY2hhciBf TV9jb250aW51ZTsKKwkgSWYgdGhpcyBjaGFuZ2VzLCBhbHNvIHVwZGF0ZSB0aGUgaW5pdGlhbGl6 ZXIgaW4KKwkgYnVpbGRfY29udHJhY3RfdmlvbGF0aW9uLiAgKi8KKyAgICAgIGNvbnN0IHRyZWUg dHlwZXNbXSA9IHsgY29uc3Rfc3RyaW5nX3R5cGVfbm9kZSwKKwkJCSAgICAgY29uc3Rfc3RyaW5n X3R5cGVfbm9kZSwKKwkJCSAgICAgY29uc3Rfc3RyaW5nX3R5cGVfbm9kZSwKKwkJCSAgICAgY29u c3Rfc3RyaW5nX3R5cGVfbm9kZSwKKwkJCSAgICAgY29uc3Rfc3RyaW5nX3R5cGVfbm9kZSwKKwkJ CSAgICAgdWludF9sZWFzdDMyX3R5cGVfbm9kZSwKKwkJCSAgICAgc2lnbmVkX2NoYXJfdHlwZV9u b2RlIH07CisgICAgICB0cmVlIGZpZWxkcyA9IE5VTExfVFJFRTsKKyAgICAgIGZvciAodHJlZSB0 eXBlIDogdHlwZXMpCisJeworCSAgLyogZmluaXNoX2J1aWx0aW5fc3RydWN0IHdhbnRzIGZpZWxk c3MgY2hhaW5lZCBpbiByZXZlcnNlLiAgKi8KKwkgIHRyZWUgbmV4dCA9IGJ1aWxkX2RlY2wgKEJV SUxUSU5TX0xPQ0FUSU9OLCBGSUVMRF9ERUNMLAorCQkJCSAgTlVMTF9UUkVFLCB0eXBlKTsKKwkg IERFQ0xfQ0hBSU4gKG5leHQpID0gZmllbGRzOworCSAgZmllbGRzID0gbmV4dDsKKwl9CisgICAg ICBpbG9jX3NlbnRpbmVsIGlscyAoaW5wdXRfbG9jYXRpb24pOworICAgICAgaW5wdXRfbG9jYXRp b24gPSBCVUlMVElOU19MT0NBVElPTjsKKyAgICAgIHBzZXVkb19jb250cmFjdF92aW9sYXRpb25f dHlwZSA9IG1ha2VfY2xhc3NfdHlwZSAoUkVDT1JEX1RZUEUpOworICAgICAgZmluaXNoX2J1aWx0 aW5fc3RydWN0IChwc2V1ZG9fY29udHJhY3RfdmlvbGF0aW9uX3R5cGUsCisJCQkgICAgICJfX3Bz ZXVkb19jb250cmFjdF92aW9sYXRpb24iLAorCQkJICAgICBmaWVsZHMsIE5VTExfVFJFRSk7Cisg ICAgICBDTEFTU1RZUEVfQVNfQkFTRSAocHNldWRvX2NvbnRyYWN0X3Zpb2xhdGlvbl90eXBlKQor CT0gcHNldWRvX2NvbnRyYWN0X3Zpb2xhdGlvbl90eXBlOworICAgICAgREVDTF9DT05URVhUIChU WVBFX05BTUUgKHBzZXVkb19jb250cmFjdF92aW9sYXRpb25fdHlwZSkpCisJPSBGUk9CX0NPTlRF WFQgKGdsb2JhbF9uYW1lc3BhY2UpOworICAgICAgVFJFRV9QVUJMSUMgKFRZUEVfTkFNRSAocHNl dWRvX2NvbnRyYWN0X3Zpb2xhdGlvbl90eXBlKSkgPSB0cnVlOworICAgICAgQ0xBU1NUWVBFX0xJ VEVSQUxfUCAocHNldWRvX2NvbnRyYWN0X3Zpb2xhdGlvbl90eXBlKSA9IHRydWU7CisgICAgICBD TEFTU1RZUEVfTEFaWV9DT1BZX0NUT1IgKHBzZXVkb19jb250cmFjdF92aW9sYXRpb25fdHlwZSkg PSB0cnVlOworICAgICAgeHJlZl9iYXNldHlwZXMgKHBzZXVkb19jb250cmFjdF92aW9sYXRpb25f dHlwZSwgLypiYXNlcz0qL05VTExfVFJFRSk7CisgICAgICBwc2V1ZG9fY29udHJhY3RfdmlvbGF0 aW9uX3R5cGUKKwk9IGNwX2J1aWxkX3F1YWxpZmllZF90eXBlIChwc2V1ZG9fY29udHJhY3Rfdmlv bGF0aW9uX3R5cGUsCisJCQkJICAgVFlQRV9RVUFMX0NPTlNUKTsKKyAgICB9CisgIHJldHVybiBw c2V1ZG9fY29udHJhY3RfdmlvbGF0aW9uX3R5cGU7Cit9CisKKy8qIFJldHVybiBhIFZBUl9ERUNM IHRvIHBhc3MgdG8gaGFuZGxlX2NvbnRyYWN0X3Zpb2xhdGlvbi4gICovCisKK3N0YXRpYyB0cmVl CitidWlsZF9jb250cmFjdF92aW9sYXRpb24gKHRyZWUgY29udHJhY3QsIGNvbnRyYWN0X2NvbnRp bnVhdGlvbiBjbW9kZSkKK3sKKyAgZXhwYW5kZWRfbG9jYXRpb24gbG9jID0gZXhwYW5kX2xvY2F0 aW9uIChFWFBSX0xPQ0FUSU9OIChjb250cmFjdCkpOworICBjb25zdCBjaGFyICpmdW5jdGlvbiA9 IGZuZGVjbF9uYW1lIChERUNMX09SSUdJTiAoY3VycmVudF9mdW5jdGlvbl9kZWNsKSk7CisgIGNv bnN0IGNoYXIgKmxldmVsID0gZ2V0X2NvbnRyYWN0X2xldmVsX25hbWUgKGNvbnRyYWN0KTsKKyAg Y29uc3QgY2hhciAqcm9sZSA9IGdldF9jb250cmFjdF9yb2xlX25hbWUgKGNvbnRyYWN0KTsKKwor ICAvKiBNdXN0IG1hdGNoIHRoZSB0eXBlIGxheW91dCBpbiBnZXRfcHNldWRvX2NvbnRyYWN0X3Zp b2xhdGlvbl90eXBlLiAgKi8KKyAgdHJlZSBjdG9yID0gYnVpbGRfY29uc3RydWN0b3JfdmEKKyAg ICAoaW5pdF9saXN0X3R5cGVfbm9kZSwgNywKKyAgICAgTlVMTF9UUkVFLCBidWlsZF9zdHJpbmdf bGl0ZXJhbCAobG9jLmZpbGUpLAorICAgICBOVUxMX1RSRUUsIGJ1aWxkX3N0cmluZ19saXRlcmFs IChmdW5jdGlvbiksCisgICAgIE5VTExfVFJFRSwgQ09OVFJBQ1RfQ09NTUVOVCAoY29udHJhY3Qp LAorICAgICBOVUxMX1RSRUUsIGJ1aWxkX3N0cmluZ19saXRlcmFsIChsZXZlbCksCisgICAgIE5V TExfVFJFRSwgYnVpbGRfc3RyaW5nX2xpdGVyYWwgKHJvbGUpLAorICAgICBOVUxMX1RSRUUsIGJ1 aWxkX2ludF9jc3QgKHVpbnRfbGVhc3QzMl90eXBlX25vZGUsIGxvYy5saW5lKSwKKyAgICAgTlVM TF9UUkVFLCBidWlsZF9pbnRfY3N0IChzaWduZWRfY2hhcl90eXBlX25vZGUsIGNtb2RlKSk7CisK KyAgY3RvciA9IGZpbmlzaF9jb21wb3VuZF9saXRlcmFsIChnZXRfcHNldWRvX2NvbnRyYWN0X3Zp b2xhdGlvbl90eXBlICgpLAorCQkJCSAgY3RvciwgdGZfbm9uZSk7CisgIHByb3RlY3RlZF9zZXRf ZXhwcl9sb2NhdGlvbiAoY3RvciwgRVhQUl9MT0NBVElPTiAoY29udHJhY3QpKTsKKyAgcmV0dXJu IGN0b3I7Cit9CisKKy8qIFJldHVybiBoYW5kbGVfY29udHJhY3RfdmlvbGF0aW9uKCksIGRlY2xh cmluZyBpdCBpZiBuZWVkZWQuICAqLworCitzdGF0aWMgdHJlZQorZGVjbGFyZV9oYW5kbGVfY29u dHJhY3RfdmlvbGF0aW9uICgpCit7CisgIHRyZWUgZm5uYW1lID0gZ2V0X2lkZW50aWZpZXIgKCJo YW5kbGVfY29udHJhY3RfdmlvbGF0aW9uIik7CisgIHRyZWUgdmlvbF9uYW1lID0gZ2V0X2lkZW50 aWZpZXIgKCJjb250cmFjdF92aW9sYXRpb24iKTsKKyAgdHJlZSBsID0gbG9va3VwX3F1YWxpZmll ZF9uYW1lIChnbG9iYWxfbmFtZXNwYWNlLCBmbm5hbWUsCisJCQkJICBMT09LX3dhbnQ6OkhJRERF Tl9GUklFTkQpOworICBmb3IgKHRyZWUgZjogbGtwX3JhbmdlIChsKSkKKyAgICBpZiAoVFJFRV9D T0RFIChmKSA9PSBGVU5DVElPTl9ERUNMKQorCXsKKwkgIHRyZWUgcGFybXMgPSBUWVBFX0FSR19U WVBFUyAoVFJFRV9UWVBFIChmKSk7CisJICBpZiAocmVtYWluaW5nX2FyZ3VtZW50cyAocGFybXMp ICE9IDEpCisJICAgIGNvbnRpbnVlOworCSAgdHJlZSBwYXJtdHlwZSA9IG5vbl9yZWZlcmVuY2Ug KFRSRUVfVkFMVUUgKHBhcm1zKSk7CisJICBpZiAoQ0xBU1NfVFlQRV9QIChwYXJtdHlwZSkKKwkg ICAgICAmJiBUWVBFX0lERU5USUZJRVIgKHBhcm10eXBlKSA9PSB2aW9sX25hbWUpCisJICAgIHJl dHVybiBmOworCX0KKworICB0cmVlIGlkX2V4cCA9IGdldF9pZGVudGlmaWVyICgiZXhwZXJpbWVu dGFsIik7CisgIHRyZWUgbnNfZXhwID0gbG9va3VwX3F1YWxpZmllZF9uYW1lIChzdGRfbm9kZSwg aWRfZXhwKTsKKworICB0cmVlIHZpb2xhdGlvbiA9IGVycm9yX21hcmtfbm9kZTsKKyAgaWYgKFRS RUVfQ09ERSAobnNfZXhwKSA9PSBOQU1FU1BBQ0VfREVDTCkKKyAgICB2aW9sYXRpb24gPSBsb29r dXBfcXVhbGlmaWVkX25hbWUgKG5zX2V4cCwgdmlvbF9uYW1lLAorCQkJCSAgICAgICBMT09LX3dh bnQ6OlRZUEUKKwkJCQkgICAgICAgfExPT0tfd2FudDo6SElEREVOX0ZSSUVORCk7CisKKyAgaWYg KFRSRUVfQ09ERSAodmlvbGF0aW9uKSA9PSBUWVBFX0RFQ0wpCisgICAgdmlvbGF0aW9uID0gVFJF RV9UWVBFICh2aW9sYXRpb24pOworICBlbHNlCisgICAgeworICAgICAgcHVzaF9uZXN0ZWRfbmFt ZXNwYWNlIChzdGRfbm9kZSk7CisgICAgICBwdXNoX25hbWVzcGFjZSAoaWRfZXhwLCAvKmlubGlu ZSovZmFsc2UpOworICAgICAgdmlvbGF0aW9uID0gbWFrZV9jbGFzc190eXBlIChSRUNPUkRfVFlQ RSk7CisgICAgICBjcmVhdGVfaW1wbGljaXRfdHlwZWRlZiAodmlvbF9uYW1lLCB2aW9sYXRpb24p OworICAgICAgREVDTF9TT1VSQ0VfTE9DQVRJT04gKFRZUEVfTkFNRSAodmlvbGF0aW9uKSkgPSBC VUlMVElOU19MT0NBVElPTjsKKyAgICAgIERFQ0xfQ09OVEVYVCAoVFlQRV9OQU1FICh2aW9sYXRp b24pKSA9IGN1cnJlbnRfbmFtZXNwYWNlOworICAgICAgcHVzaGRlY2xfbmFtZXNwYWNlX2xldmVs IChUWVBFX05BTUUgKHZpb2xhdGlvbiksIC8qaGlkZGVuKi90cnVlKTsKKyAgICAgIHBvcF9uYW1l c3BhY2UgKCk7CisgICAgICBwb3BfbmVzdGVkX25hbWVzcGFjZSAoc3RkX25vZGUpOworICAgIH0K KworICB0cmVlIGFyZ3R5cGUgPSBjcF9idWlsZF9xdWFsaWZpZWRfdHlwZSAodmlvbGF0aW9uLCBU WVBFX1FVQUxfQ09OU1QpOworICBhcmd0eXBlID0gY3BfYnVpbGRfcmVmZXJlbmNlX3R5cGUgKGFy Z3R5cGUsIC8qcnZhbCovZmFsc2UpOworICB0cmVlIGZudHlwZSA9IGJ1aWxkX2Z1bmN0aW9uX3R5 cGVfbGlzdCAodm9pZF90eXBlX25vZGUsIGFyZ3R5cGUsIE5VTExfVFJFRSk7CisKKyAgcHVzaF9u ZXN0ZWRfbmFtZXNwYWNlIChnbG9iYWxfbmFtZXNwYWNlKTsKKyAgdHJlZSBmbiA9IGJ1aWxkX2Nw X2xpYnJhcnlfZm5fcHRyICgiaGFuZGxlX2NvbnRyYWN0X3Zpb2xhdGlvbiIsIGZudHlwZSwKKwkJ CQkgICAgIEVDRl9DT0xEKTsKKyAgcHVzaGRlY2xfbmFtZXNwYWNlX2xldmVsIChmbiwgLypoaWRp bmcqL3RydWUpOworICBwb3BfbmVzdGVkX25hbWVzcGFjZSAoZ2xvYmFsX25hbWVzcGFjZSk7CisK KyAgcmV0dXJuIGZuOworfQorCisvKiBCdWlsZCB0aGUgY2FsbCB0byBoYW5kbGVfY29udHJhY3Rf dmlvbGF0aW9uIGZvciBDT05UUkFDVC4gICovCisKK3N0YXRpYyB2b2lkCitidWlsZF9jb250cmFj dF9oYW5kbGVyX2NhbGwgKHRyZWUgY29udHJhY3QsCisJCQkgICAgIGNvbnRyYWN0X2NvbnRpbnVh dGlvbiBjbW9kZSkKK3sKKyAgdHJlZSB2aW9sYXRpb24gPSBidWlsZF9jb250cmFjdF92aW9sYXRp b24gKGNvbnRyYWN0LCBjbW9kZSk7CisgIHRyZWUgdmlvbGF0aW9uX2ZuID0gZGVjbGFyZV9oYW5k bGVfY29udHJhY3RfdmlvbGF0aW9uICgpOworICB0cmVlIGNhbGwgPSBidWlsZF9jYWxsX24gKHZp b2xhdGlvbl9mbiwgMSwgYnVpbGRfYWRkcmVzcyAodmlvbGF0aW9uKSk7CisgIGZpbmlzaF9leHBy X3N0bXQgKGNhbGwpOworfQorCisvKiBHZW5lcmF0ZSB0aGUgY29kZSB0aGF0IGNoZWNrcyBvciBh c3N1bWVzIGEgY29udHJhY3QsIGJ1dCBkbyBub3QgYXR0YWNoCisgICBpdCB0byB0aGUgY3VycmVu dCBjb250ZXh0LiAgVGhpcyBpcyBjYWxsZWQgZHVyaW5nIGdlbmVyaWNpemF0aW9uLiAgKi8KKwor dHJlZQorYnVpbGRfY29udHJhY3RfY2hlY2sgKHRyZWUgY29udHJhY3QpCit7CisgIGNvbnRyYWN0 X3NlbWFudGljIHNlbWFudGljID0gZ2V0X2NvbnRyYWN0X3NlbWFudGljIChjb250cmFjdCk7Cisg IGlmIChzZW1hbnRpYyA9PSBDQ1NfSU5WQUxJRCkKKyAgICByZXR1cm4gTlVMTF9UUkVFOworCisg IC8qIElnbm9yZWQgY29udHJhY3RzIGFyZSBuZXZlciBjaGVja2VkIG9yIGFzc3VtZWQuICAqLwor ICBpZiAoc2VtYW50aWMgPT0gQ0NTX0lHTk9SRSkKKyAgICByZXR1cm4gdm9pZF9ub2RlOworCisg IHJlbWFwX2R1bW15X3RoaXMgKGN1cnJlbnRfZnVuY3Rpb25fZGVjbCwgJkNPTlRSQUNUX0NPTkRJ VElPTiAoY29udHJhY3QpKTsKKyAgdHJlZSBjb25kaXRpb24gPSBDT05UUkFDVF9DT05ESVRJT04g KGNvbnRyYWN0KTsKKyAgaWYgKGNvbmRpdGlvbiA9PSBlcnJvcl9tYXJrX25vZGUpCisgICAgcmV0 dXJuIE5VTExfVFJFRTsKKworICBsb2NhdGlvbl90IGxvYyA9IEVYUFJfTE9DQVRJT04gKGNvbnRy YWN0KTsKKworICBpZiAoc2VtYW50aWMgPT0gQ0NTX0FTU1VNRSkKKyAgICByZXR1cm4gYnVpbGRf YXNzdW1lX2NhbGwgKGxvYywgY29uZGl0aW9uKTsKKworICB0cmVlIGlmX3N0bXQgPSBiZWdpbl9p Zl9zdG10ICgpOworICB0cmVlIGNvbmQgPSBidWlsZF94X3VuYXJ5X29wIChsb2MsCisJCQkJVFJV VEhfTk9UX0VYUFIsCisJCQkJY29uZGl0aW9uLCBOVUxMX1RSRUUsCisJCQkJdGZfd2FybmluZ19v cl9lcnJvcik7CisgIGZpbmlzaF9pZl9zdG10X2NvbmQgKGNvbmQsIGlmX3N0bXQpOworCisgIC8q IEdldCB0aGUgY29udGludWF0aW9uIG1vZGUuICAqLworICBjb250cmFjdF9jb250aW51YXRpb24g Y21vZGU7CisgIHN3aXRjaCAoc2VtYW50aWMpCisgICAgeworICAgIGNhc2UgQ0NTX05FVkVSOiBj bW9kZSA9IE5FVkVSX0NPTlRJTlVFOyBicmVhazsKKyAgICBjYXNlIENDU19NQVlCRTogY21vZGUg PSBNQVlCRV9DT05USU5VRTsgYnJlYWs7CisgICAgZGVmYXVsdDogZ2NjX3VucmVhY2hhYmxlICgp OworICAgIH0KKworICBidWlsZF9jb250cmFjdF9oYW5kbGVyX2NhbGwgKGNvbnRyYWN0LCBjbW9k ZSk7CisgIGlmIChjbW9kZSA9PSBORVZFUl9DT05USU5VRSkKKyAgICBmaW5pc2hfZXhwcl9zdG10 IChidWlsZF9jYWxsX2EgKHRlcm1pbmF0ZV9mbiwgMCwgbnVsbHB0cikpOworCisgIGZpbmlzaF90 aGVuX2NsYXVzZSAoaWZfc3RtdCk7CisgIHRyZWUgc2NvcGUgPSBJRl9TQ09QRSAoaWZfc3RtdCk7 CisgIElGX1NDT1BFIChpZl9zdG10KSA9IE5VTEw7CisgIHJldHVybiBkb19wb3BsZXZlbCAoc2Nv cGUpOworfQorCisvKiBBZGQgdGhlIGNvbnRyYWN0IHN0YXRlbWVudCBDT05UUkFDVCB0byB0aGUg Y3VycmVudCBibG9jayBpZiB2YWxpZC4gICovCisKK3N0YXRpYyB2b2lkCitlbWl0X2NvbnRyYWN0 X3N0YXRlbWVudCAodHJlZSBjb250cmFjdCkKK3sKKyAgLyogT25seSBhZGQgdmFsaWQgY29udHJh Y3RzLiAgKi8KKyAgaWYgKGdldF9jb250cmFjdF9zZW1hbnRpYyAoY29udHJhY3QpICE9IENDU19J TlZBTElECisgICAgICAmJiBDT05UUkFDVF9DT05ESVRJT04gKGNvbnRyYWN0KSAhPSBlcnJvcl9t YXJrX25vZGUpCisgICAgYWRkX3N0bXQgKGNvbnRyYWN0KTsKK30KKworLyogR2VuZXJhdGUgdGhl IHN0YXRlbWVudCBmb3IgdGhlIGdpdmVuIGNvbnRyYWN0IGF0dHJpYnV0ZSBieSBhZGRpbmcgdGhl CisgICBzdGF0ZW1lbnQgdG8gdGhlIGN1cnJlbnQgYmxvY2suIFJldHVybnMgdGhlIG5leHQgY29u dHJhY3QgaW4gdGhlIGNoYWluLiAgKi8KKworc3RhdGljIHRyZWUKK2VtaXRfY29udHJhY3RfYXR0 ciAodHJlZSBhdHRyKQoreworICBnY2NfYXNzZXJ0IChUUkVFX0NPREUgKGF0dHIpID09IFRSRUVf TElTVCk7CisKKyAgZW1pdF9jb250cmFjdF9zdGF0ZW1lbnQgKENPTlRSQUNUX1NUQVRFTUVOVCAo YXR0cikpOworCisgIHJldHVybiBDT05UUkFDVF9DSEFJTiAoYXR0cik7Cit9CisKKy8qIEFkZCB0 aGUgc3RhdGVtZW50cyBvZiBjb250cmFjdCBhdHRyaWJ1dGVzIEFUVFJTIHRvIHRoZSBjdXJyZW50 IGJsb2NrLiAgKi8KKworc3RhdGljIHZvaWQKK2VtaXRfY29udHJhY3RfY29uZGl0aW9ucyAodHJl ZSBhdHRycywgdHJlZV9jb2RlIGNvZGUpCit7CisgIGlmICghYXR0cnMpIHJldHVybjsKKyAgZ2Nj X2Fzc2VydCAoVFJFRV9DT0RFIChhdHRycykgPT0gVFJFRV9MSVNUKTsKKyAgZ2NjX2Fzc2VydCAo Y29kZSA9PSBQUkVDT05ESVRJT05fU1RNVCB8fCBjb2RlID09IFBPU1RDT05ESVRJT05fU1RNVCk7 CisgIHdoaWxlIChhdHRycykKKyAgICB7CisgICAgICB0cmVlIGNvbnRyYWN0ID0gQ09OVFJBQ1Rf U1RBVEVNRU5UIChhdHRycyk7CisgICAgICBpZiAoVFJFRV9DT0RFIChjb250cmFjdCkgPT0gY29k ZSkKKwlhdHRycyA9IGVtaXRfY29udHJhY3RfYXR0ciAoYXR0cnMpOworICAgICAgZWxzZQorCWF0 dHJzID0gQ09OVFJBQ1RfQ0hBSU4gKGF0dHJzKTsKKyAgICB9Cit9CisKKy8qIEVtaXQgdGhlIHN0 YXRlbWVudCBmb3IgYW4gYXNzZXJ0aW9uIGF0dHJpYnV0ZS4gICovCisKK3ZvaWQKK2VtaXRfYXNz ZXJ0aW9uICh0cmVlIGF0dHIpCit7CisgIGVtaXRfY29udHJhY3RfYXR0ciAoYXR0cik7Cit9CisK Ky8qIEVtaXQgc3RhdGVtZW50cyBmb3IgcHJlY29uZGl0aW9uIGF0dHJpYnV0ZXMuICAqLworCitz dGF0aWMgdm9pZAorZW1pdF9wcmVjb25kaXRpb25zICh0cmVlIGF0dHIpCit7CisgIHJldHVybiBl bWl0X2NvbnRyYWN0X2NvbmRpdGlvbnMgKGF0dHIsIFBSRUNPTkRJVElPTl9TVE1UKTsKK30KKwor LyogRW1pdCBzdGF0ZW1lbnRzIGZvciBwb3N0Y29uZGl0aW9uIGF0dHJpYnV0ZXMuICAqLworCitz dGF0aWMgdm9pZAorZW1pdF9wb3N0Y29uZGl0aW9uc19jbGVhbnVwICh0cmVlIGNvbnRyYWN0cykK K3sKKyAgdHJlZSBzdG10cyA9IHB1c2hfc3RtdF9saXN0ICgpOworICBlbWl0X2NvbnRyYWN0X2Nv bmRpdGlvbnMgKGNvbnRyYWN0cywgUE9TVENPTkRJVElPTl9TVE1UKTsKKyAgc3RtdHMgPSBwb3Bf c3RtdF9saXN0IChzdG10cyk7CisgIHB1c2hfY2xlYW51cCAoTlVMTF9UUkVFLCBzdG10cywgLypl aF9vbmx5Ki9mYWxzZSk7Cit9CisKKy8qIFdlJ3JlIGNvbXBpbGluZyB0aGUgcHJlL3Bvc3Rjb25k aXRpb24gZnVuY3Rpb24gQ09OREZOOyByZW1hcCBhbnkgRk4KKyAgIGF0dHJpYnV0ZXMgdGhhdCBt YXRjaCBDT0RFIGFuZCBlbWl0IHRoZW0uICAqLworCitzdGF0aWMgdm9pZAorcmVtYXBfYW5kX2Vt aXRfY29uZGl0aW9ucyAodHJlZSBmbiwgdHJlZSBjb25kZm4sIHRyZWVfY29kZSBjb2RlKQorewor ICBnY2NfYXNzZXJ0IChjb2RlID09IFBSRUNPTkRJVElPTl9TVE1UIHx8IGNvZGUgPT0gUE9TVENP TkRJVElPTl9TVE1UKTsKKyAgZm9yICh0cmVlIGF0dHIgPSBERUNMX0NPTlRSQUNUUyAoZm4pOyBh dHRyOworICAgICAgIGF0dHIgPSBDT05UUkFDVF9DSEFJTiAoYXR0cikpCisgICAgeworICAgICAg dHJlZSBjb250cmFjdCA9IENPTlRSQUNUX1NUQVRFTUVOVCAoYXR0cik7CisgICAgICBpZiAoVFJF RV9DT0RFIChjb250cmFjdCkgPT0gY29kZSkKKwl7CisJICBjb250cmFjdCA9IGNvcHlfbm9kZSAo Y29udHJhY3QpOworCSAgcmVtYXBfY29udHJhY3QgKGZuLCBjb25kZm4sIGNvbnRyYWN0LCAvKmR1 cGxpY2F0ZV9wPSovZmFsc2UpOworCSAgZW1pdF9jb250cmFjdF9zdGF0ZW1lbnQgKGNvbnRyYWN0 KTsKKwl9CisgICAgfQorfQorCisvKiBDb252ZXJ0cyBhIGNvbnRyYWN0IGNvbmRpdGlvbiB0byBi b29sIGFuZCBlbnN1cmVzIGl0IGhhcyBhIGxvY2FpdG9uLiAgKi8KKwordHJlZQorZmluaXNoX2Nv bnRyYWN0X2NvbmRpdGlvbiAoY3BfZXhwciBjb25kaXRpb24pCit7CisgIC8qIEVuc3VyZSB3ZSBo YXZlIHRoZSBjb25kaXRpb24gbG9jYXRpb24gc2F2ZWQgaW4gY2FzZSB3ZSBsYXRlciBuZWVkIHRv CisgICAgIGVtaXQgYSBjb252ZXJzaW9uIGVycm9yIGR1cmluZyB0ZW1wbGF0ZSBpbnN0YW50aWF0 aW9uIGFuZCB3b3VsZG4ndAorICAgICBvdGhlcndpc2UgaGF2ZSBpdC4gICovCisgIGlmICghQ0FO X0hBVkVfTE9DQVRJT05fUCAoY29uZGl0aW9uKSB8fCBFWENFUFRJT05BTF9DTEFTU19QIChjb25k aXRpb24pKQorICAgIHsKKyAgICAgIGNvbmRpdGlvbiA9IGJ1aWxkMV9sb2MgKGNvbmRpdGlvbi5n ZXRfbG9jYXRpb24gKCksIFZJRVdfQ09OVkVSVF9FWFBSLAorCQkJICAgICAgVFJFRV9UWVBFIChj b25kaXRpb24pLCBjb25kaXRpb24pOworICAgICAgRVhQUl9MT0NBVElPTl9XUkFQUEVSX1AgKGNv bmRpdGlvbikgPSAxOworICAgIH0KKworICBpZiAoY29uZGl0aW9uID09IGVycm9yX21hcmtfbm9k ZSB8fCB0eXBlX2RlcGVuZGVudF9leHByZXNzaW9uX3AgKGNvbmRpdGlvbikpCisgICAgcmV0dXJu IGNvbmRpdGlvbjsKKworICByZXR1cm4gY29uZGl0aW9uX2NvbnZlcnNpb24gKGNvbmRpdGlvbik7 Cit9CisKK3ZvaWQKK21heWJlX3VwZGF0ZV9wb3N0Y29uZGl0aW9ucyAodHJlZSBmY28pCit7Cisg IC8qIFVwZGF0ZSBhbnkgcG9zdGNvbmRpdGlvbnMgYW5kIHRoZSBwb3N0Y29uZGl0aW9uIGNoZWNr aW5nIGZ1bmN0aW9uCisgICAgIGFzIG5lZWRlZC4gIElmIHRoZXJlIGFyZSBwb3N0Y29uZGl0aW9u cywgd2UnbGwgdXNlIHRob3NlIHRvIHJld3JpdGUKKyAgICAgcmV0dXJuIHN0YXRlbWVudHMgdG8g Y2hlY2sgcG9zdGNvbmRpdGlvbnMuICAqLworICBpZiAoaGFzX2FjdGl2ZV9wb3N0Y29uZGl0aW9u cyAoZmNvKSkKKyAgICB7CisgICAgICByZWJ1aWxkX3Bvc3Rjb25kaXRpb25zIChmY28pOworICAg ICAgdHJlZSBwb3N0ID0gYnVpbGRfcG9zdGNvbmRpdGlvbl9mdW5jdGlvbiAoZmNvKTsKKyAgICAg IHNldF9wb3N0Y29uZGl0aW9uX2Z1bmN0aW9uIChmY28sIHBvc3QpOworICAgIH0KK30KKworLyog Q2FsbGVkIG9uIGF0dHJpYnV0ZSBsaXN0cyB0aGF0IG11c3Qgbm90IGNvbnRhaW4gY29udHJhY3Rz LiAgSWYgYW55CisgICBjb250cmFjdHMgYXJlIHByZXNlbnQsIGlzc3VlIGFuIGVycm9yIGRpYWdu b3N0aWMgYW5kIHJldHVybiB0cnVlLiAgKi8KKworYm9vbAorZGlhZ25vc2VfbWlzYXBwbGllZF9j b250cmFjdHMgKHRyZWUgYXR0cmlidXRlcykKK3sKKyAgaWYgKGF0dHJpYnV0ZXMgPT0gTlVMTF9U UkVFKQorICAgIHJldHVybiBmYWxzZTsKKworICB0cmVlIGNvbnRyYWN0X2F0dHIgPSBmaW5kX2Nv bnRyYWN0IChhdHRyaWJ1dGVzKTsKKyAgaWYgKCFjb250cmFjdF9hdHRyKQorICAgIHJldHVybiBm YWxzZTsKKworICBlcnJvcl9hdCAoRVhQUl9MT0NBVElPTiAoQ09OVFJBQ1RfU1RBVEVNRU5UIChj b250cmFjdF9hdHRyKSksCisJICAgICJjb250cmFjdHMgbXVzdCBhcHBlcnRhaW4gdG8gYSBmdW5j dGlvbiB0eXBlIik7CisKKyAgLyogSW52YWxpZGF0ZSB0aGUgY29udHJhY3Qgc28gd2UgZG9uJ3Qg dHJlYXQgaXQgYXMgdmFsaWQgbGF0ZXIgb24uICAqLworICBpbnZhbGlkYXRlX2NvbnRyYWN0IChU UkVFX1ZBTFVFIChUUkVFX1ZBTFVFIChjb250cmFjdF9hdHRyKSkpOworCisgIHJldHVybiB0cnVl OworfQorCisvKiBCdWlsZCBhbmQgcmV0dXJuIGFuIGFyZ3VtZW50IGxpc3QgY29udGFpbmluZyBh bGwgdGhlIHBhcmFtZXRlcnMgb2YgdGhlCisgICAocHJlc3VtYWJseSBndWFyZGVkKSBGVU5DVElP Tl9ERUNMIEZOLiAgVGhpcyBjYW4gYmUgdXNlZCB0byBmb3J3YXJkIGFsbCBvZgorICAgRk4ncyBh cmd1bWVudHMgdG8gYSBmdW5jdGlvbiB0YWtpbmcgdGhlIHNhbWUgbGlzdCBvZiBhcmd1bWVudHMg LS0gbmFtZWx5CisgICB0aGUgdW5jaGVja2VkIGZvcm0gb2YgRk4uCisKKyAgIFdlIHVzZSBDQUxM X0ZST01fVEhVTktfUCBpbnN0ZWFkIG9mIGZvcndhcmRfcGFybSBmb3IgZm9yd2FyZGluZworICAg c2VtYW50aWNzLiAgKi8KKworc3RhdGljIHZlYzx0cmVlLCB2YV9nYz4gKgorYnVpbGRfYXJnX2xp c3QgKHRyZWUgZm4pCit7CisgIHZlYzx0cmVlLCB2YV9nYz4gKmFyZ3MgPSBtYWtlX3RyZWVfdmVj dG9yICgpOworICBmb3IgKHRyZWUgdCA9IERFQ0xfQVJHVU1FTlRTIChmbik7IHQ7IHQgPSBERUNM X0NIQUlOICh0KSkKKyAgICB2ZWNfc2FmZV9wdXNoIChhcmdzLCB0KTsKKyAgcmV0dXJuIGFyZ3M7 Cit9CisKK3ZvaWQKK3N0YXJ0X2Z1bmN0aW9uX2NvbnRyYWN0cyAodHJlZSBkZWNsMSkKK3sKKyAg aWYgKCFoYW5kbGVfY29udHJhY3RzX3AgKGRlY2wxKSkKKyAgICByZXR1cm47CisKKyAgaWYgKCFv dXRsaW5lX2NvbnRyYWN0c19wIChkZWNsMSkpCisgICAgeworICAgICAgZW1pdF9wcmVjb25kaXRp b25zIChERUNMX0NPTlRSQUNUUyAoY3VycmVudF9mdW5jdGlvbl9kZWNsKSk7CisgICAgICBlbWl0 X3Bvc3Rjb25kaXRpb25zX2NsZWFudXAgKERFQ0xfQ09OVFJBQ1RTIChjdXJyZW50X2Z1bmN0aW9u X2RlY2wpKTsKKyAgICAgIHJldHVybjsKKyAgICB9CisKKyAgLyogQ29udHJhY3RzIG1heSBoYXZl IGp1c3QgYmVlbiBhZGRlZCB3aXRob3V0IGEgY2hhbmNlIHRvIHBhcnNlIHRoZW0sIHRob3VnaAor ICAgICB3ZSBzdGlsbCBuZWVkIHRoZSBQUkVfRk4gYXZhaWxhYmxlIHRvIGdlbmVyYXRlIGEgY2Fs bCB0byBpdC4gICovCisgIGlmICghREVDTF9QUkVfRk4gKGRlY2wxKSkKKyAgICBidWlsZF9jb250 cmFjdF9mdW5jdGlvbl9kZWNscyAoZGVjbDEpOworCisgIC8qIElmIHdlJ3JlIHN0YXJ0aW5nIGEg Z3VhcmRlZCBmdW5jdGlvbiB3aXRoIHZhbGlkIGNvbnRyYWN0cywgd2UgbmVlZCB0bworICAgICBp bnNlcnQgYSBjYWxsIHRvIHRoZSBwcmUgZnVuY3Rpb24uICAqLworICBpZiAoREVDTF9QUkVfRk4g KGRlY2wxKQorICAgICAgJiYgREVDTF9QUkVfRk4gKGRlY2wxKSAhPSBlcnJvcl9tYXJrX25vZGUp CisgICAgeworICAgICAgcmVsZWFzaW5nX3ZlYyBhcmdzID0gYnVpbGRfYXJnX2xpc3QgKGRlY2wx KTsKKyAgICAgIHRyZWUgY2FsbCA9IGJ1aWxkX2NhbGxfYSAoREVDTF9QUkVfRk4gKGRlY2wxKSwK KwkJCQlhcmdzLT5sZW5ndGggKCksCisJCQkJYXJncy0+YWRkcmVzcyAoKSk7CisgICAgICBDQUxM X0ZST01fVEhVTktfUCAoY2FsbCkgPSB0cnVlOworICAgICAgZmluaXNoX2V4cHJfc3RtdCAoY2Fs bCk7CisgICAgfQorfQorCisvKiBGaW5pc2ggdXAgdGhlIHByZSAmIHBvc3QgZnVuY3Rpb24gZGVm aW5pdGlvbnMgZm9yIGEgZ3VhcmRlZCBGTkRFQ0wsCisgICBhbmQgY29tcGlsZSB0aG9zZSBmdW5j dGlvbnMgYWxsIHRoZSB3YXkgdG8gYXNzZW1ibGVyIGxhbmd1YWdlIG91dHB1dC4gICovCisKK3Zv aWQKK2ZpbmlzaF9mdW5jdGlvbl9jb250cmFjdHMgKHRyZWUgZm5kZWNsKQoreworICBpZiAoIWhh bmRsZV9jb250cmFjdHNfcCAoZm5kZWNsKQorICAgICAgfHwgIW91dGxpbmVfY29udHJhY3RzX3Ag KGZuZGVjbCkpCisgICAgcmV0dXJuOworCisgIGZvciAodHJlZSBjYSA9IERFQ0xfQ09OVFJBQ1RT IChmbmRlY2wpOyBjYTsgY2EgPSBDT05UUkFDVF9DSEFJTiAoY2EpKQorICAgIHsKKyAgICAgIHRy ZWUgY29udHJhY3QgPSBDT05UUkFDVF9TVEFURU1FTlQgKGNhKTsKKyAgICAgIGlmICghQ09OVFJB Q1RfQ09ORElUSU9OIChjb250cmFjdCkKKwkgIHx8IENPTlRSQUNUX0NPTkRJVElPTl9ERUZFUlJF RF9QIChjb250cmFjdCkKKwkgIHx8IENPTlRSQUNUX0NPTkRJVElPTiAoY29udHJhY3QpID09IGVy cm9yX21hcmtfbm9kZSkKKwlyZXR1cm47CisgICAgfQorCisgIGludCBmbGFncyA9IFNGX0RFRkFV TFQgfCBTRl9QUkVfUEFSU0VEOworCisgIC8qIElmIGVpdGhlciB0aGUgcHJlIG9yIHBvc3QgZnVu Y3Rpb25zIGFyZSBiYWQsIGRvbid0IGJvdGhlciBlbWl0dGluZworICAgICBhbnkgY29udHJhY3Rz LiAgVGhlIHByb2dyYW0gaXMgYWxyZWFkeSBpbGwtZm9ybWVkLiAgKi8KKyAgdHJlZSBwcmUgPSBE RUNMX1BSRV9GTiAoZm5kZWNsKTsKKyAgdHJlZSBwb3N0ID0gREVDTF9QT1NUX0ZOIChmbmRlY2wp OworICBpZiAocHJlID09IGVycm9yX21hcmtfbm9kZSB8fCBwb3N0ID09IGVycm9yX21hcmtfbm9k ZSkKKyAgICByZXR1cm47CisKKyAgaWYgKHByZSAmJiBERUNMX0lOSVRJQUwgKGZuZGVjbCkgIT0g ZXJyb3JfbWFya19ub2RlKQorICAgIHsKKyAgICAgIERFQ0xfUEVORElOR19JTkxJTkVfUCAocHJl KSA9IGZhbHNlOworICAgICAgc3RhcnRfcHJlcGFyc2VkX2Z1bmN0aW9uIChwcmUsIERFQ0xfQVRU UklCVVRFUyAocHJlKSwgZmxhZ3MpOworICAgICAgcmVtYXBfYW5kX2VtaXRfY29uZGl0aW9ucyAo Zm5kZWNsLCBwcmUsIFBSRUNPTkRJVElPTl9TVE1UKTsKKyAgICAgIHRyZWUgZmluaXNoZWRfcHJl ID0gZmluaXNoX2Z1bmN0aW9uIChmYWxzZSk7CisgICAgICBleHBhbmRfb3JfZGVmZXJfZm4gKGZp bmlzaGVkX3ByZSk7CisgICAgfQorCisgIGlmIChwb3N0ICYmIERFQ0xfSU5JVElBTCAoZm5kZWNs KSAhPSBlcnJvcl9tYXJrX25vZGUpCisgICAgeworICAgICAgREVDTF9QRU5ESU5HX0lOTElORV9Q IChwb3N0KSA9IGZhbHNlOworICAgICAgc3RhcnRfcHJlcGFyc2VkX2Z1bmN0aW9uIChwb3N0LAor CQkJCURFQ0xfQVRUUklCVVRFUyAocG9zdCksCisJCQkJZmxhZ3MpOworICAgICAgcmVtYXBfYW5k X2VtaXRfY29uZGl0aW9ucyAoZm5kZWNsLCBwb3N0LCBQT1NUQ09ORElUSU9OX1NUTVQpOworICAg ICAgaWYgKCFWT0lEX1RZUEVfUCAoVFJFRV9UWVBFIChUUkVFX1RZUEUgKHBvc3QpKSkpCisJZmlu aXNoX3JldHVybl9zdG10IChnZXRfcG9zdGNvbmRpdGlvbl9yZXN1bHRfcGFyYW1ldGVyIChmbmRl Y2wpKTsKKworICAgICAgdHJlZSBmaW5pc2hlZF9wb3N0ID0gZmluaXNoX2Z1bmN0aW9uIChmYWxz ZSk7CisgICAgICBleHBhbmRfb3JfZGVmZXJfZm4gKGZpbmlzaGVkX3Bvc3QpOworICAgIH0KK30K KworLyogUmV3cml0ZSB0aGUgZXhwcmVzc2lvbiBvZiBhIHJldHVybmVkIGV4cHJlc3Npb24gc28g dGhhdCBpdCBpbnZva2VzIHRoZQorICAgcG9zdGNvbmRpdGlvbiBmdW5jdGlvbiBhcyBuZWVkZWQu ICAqLworCit0cmVlCithcHBseV9wb3N0Y29uZGl0aW9uX3RvX3JldHVybiAodHJlZSBleHByKQor eworICB0cmVlIGZuID0gY3VycmVudF9mdW5jdGlvbl9kZWNsOworICB0cmVlIHBvc3QgPSBERUNM X1BPU1RfRk4gKGZuKTsKKyAgaWYgKCFwb3N0KQorICAgIHJldHVybiBOVUxMX1RSRUU7CisKKyAg LyogSWYgRk4gcmV0dXJucyBpbiBtZW1vcnksIFBPU1QgaGFzIGEgdm9pZCByZXR1cm4gdHlwZSBh bmQgd2UgY2FsbCBpdCB3aGVuCisgICAgIEVYUFIgaXMgREVDTF9SRVNVTFQgKGZuKS4gIElmIEZO IHJldHVybnMgYSBzY2FsYXIsIFBPU1QgaGFzIHRoZSBzYW1lCisgICAgIHJldHVybiB0eXBlIGFu ZCB3ZSBjYWxsIGl0IHdoZW4gRVhQUiBpcyB0aGUgdmFsdWUgYmVpbmcgcmV0dXJuZWQuICAqLwor ICBpZiAoVk9JRF9UWVBFX1AgKFRSRUVfVFlQRSAoVFJFRV9UWVBFIChwb3N0KSkpCisgICAgICAh PSAoZXhwciA9PSBERUNMX1JFU1VMVCAoZm4pKSkKKyAgICByZXR1cm4gTlVMTF9UUkVFOworCisg IHJlbGVhc2luZ192ZWMgYXJncyA9IGJ1aWxkX2FyZ19saXN0IChmbik7CisgIGlmIChnZXRfcG9z dGNvbmRpdGlvbl9yZXN1bHRfcGFyYW1ldGVyIChmbikpCisgICAgdmVjX3NhZmVfcHVzaCAoYXJn cywgZXhwcik7CisgIHRyZWUgY2FsbCA9IGJ1aWxkX2NhbGxfYSAocG9zdCwKKwkJCSAgICBhcmdz LT5sZW5ndGggKCksCisJCQkgICAgYXJncy0+YWRkcmVzcyAoKSk7CisgIENBTExfRlJPTV9USFVO S19QIChjYWxsKSA9IHRydWU7CisKKyAgcmV0dXJuIGNhbGw7Cit9CisKKy8qIEEgc3Vicm91dGlu ZSBvZiBkdXBsaWNhdGVfZGVjbHMuIERpYWdub3NlIGlzc3VlcyBpbiB0aGUgcmVkZWNsYXJhdGlv biBvZgorICAgZ3VhcmRlZCBmdW5jdGlvbnMuICAqLworCit2b2lkCitkdXBsaWNhdGVfY29udHJh Y3RzICh0cmVlIG5ld2RlY2wsIHRyZWUgb2xkZGVjbCkKK3sKKyAgaWYgKFRSRUVfQ09ERSAobmV3 ZGVjbCkgPT0gVEVNUExBVEVfREVDTCkKKyAgICBuZXdkZWNsID0gREVDTF9URU1QTEFURV9SRVNV TFQgKG5ld2RlY2wpOworICBpZiAoVFJFRV9DT0RFIChvbGRkZWNsKSA9PSBURU1QTEFURV9ERUNM KQorICAgIG9sZGRlY2wgPSBERUNMX1RFTVBMQVRFX1JFU1VMVCAob2xkZGVjbCk7CisKKyAgLyog Q29tcGFyZSBjb250cmFjdHMgdG8gc2VlIGlmIHRoZXkgbWF0Y2guICAgICovCisgIHRyZWUgb2xk X2NvbnRyYWN0cyA9IERFQ0xfQ09OVFJBQ1RTIChvbGRkZWNsKTsKKyAgdHJlZSBuZXdfY29udHJh Y3RzID0gREVDTF9DT05UUkFDVFMgKG5ld2RlY2wpOworCisgIGlmICghb2xkX2NvbnRyYWN0cyAm JiAhbmV3X2NvbnRyYWN0cykKKyAgICByZXR1cm47CisKKyAgbG9jYXRpb25fdCBvbGRfbG9jID0g REVDTF9TT1VSQ0VfTE9DQVRJT04gKG9sZGRlY2wpOworICBsb2NhdGlvbl90IG5ld19sb2MgPSBE RUNMX1NPVVJDRV9MT0NBVElPTiAobmV3ZGVjbCk7CisKKyAgLyogSWYgYm90aCBkZWNsYXJhdGlv bnMgc3BlY2lmeSBjb250cmFjdHMsIGVuc3VyZSB0aGV5IG1hdGNoLgorCisgICAgIFRPRE86IFRo aXMgaGFuZGxlcyBhIHBvdGVudGlhbCBlcnJvciBhIGxpdHRsZSBvZGRseS4gQ29uc2lkZXI6CisK KwlzdHJ1Y3QgQiB7CisJICB2aXJ0dWFsIHZvaWQgZihpbnQgbikgW1twcmU6IG4gPT0gMF1dOwor CX07CisJc3RydWN0IEQgOiBCIHsKKwkgIHZvaWQgZihpbnQgbikgb3ZlcnJpZGU7IC8vIGluaGVy aXRzIGNvbnRyYWN0cworCX07CisJdm9pZCBEOjpmKGludCBuKSBbW3ByZTogbiA9PSAwXV0gLy8g T0sKKwl7IH0KKworICAgIEl0J3Mgb2theSBiZWNhdXNlIHdlJ3JlIGV4cGxpY2l0bHkgcmVzdGF0 aW5nIHRoZSBpbmhlcml0ZWQgY29udHJhY3QuCisgICAgQ2hhbmdpbmcgdGhlIHByZWNvbmRpdGlv biBvbiB0aGUgZGVmaW5pdGlvbiBEOjpmIGNhdXNlcyBtYXRjaF9jb250cmFjdHMKKyAgICB0byBj b21wbGFpbiBhYm91dCB0aGUgbWlzbWF0Y2guCisKKyAgICBUaGlzIHdvdWxkIHByZXZpb3VzbHkg aGF2ZSBiZWVuIGRpYWdub3NlZCBhcyBhZGRpbmcgY29udHJhY3RzIHRvIGFuCisgICAgb3ZlcnJp ZGUsIGJ1dCB0aGlzIHNlZW1zIGxpa2UgaXQgc2hvdWxkIGJlIHdlbGwtZm9ybWVkLiAgKi8KKyAg aWYgKG9sZF9jb250cmFjdHMgJiYgbmV3X2NvbnRyYWN0cykKKyAgICB7CisgICAgICBpZiAoIW1h dGNoX2NvbnRyYWN0X2NvbmRpdGlvbnMgKG9sZF9sb2MsIG9sZF9jb250cmFjdHMsCisJCQkJICAg ICAgbmV3X2xvYywgbmV3X2NvbnRyYWN0cywKKwkJCQkgICAgICBjbWNfZGVjbGFyYXRpb24pKQor CXJldHVybjsKKyAgICAgIGlmIChERUNMX1VOSVFVRV9GUklFTkRfUCAobmV3ZGVjbCkpCisJLyog TmV3ZGVjbCdzIGNvbnRyYWN0cyBhcmUgc3RpbGwgREVGRVJSRURfUEFSU0UsIGFuZCB3ZSdyZSBh Ym91dCB0bworCSAgIGNvbGxhcHNlIGl0IGludG8gb2xkZGVjbCwgc28gc3Rhc2ggYXdheSBvbGRk ZWNsJ3MgY29udHJhY3RzIGZvcgorCSAgIGxhdGVyIGNvbXBhcmlzb24uICAqLworCWRlZmVyX2d1 YXJkZWRfY29udHJhY3RfbWF0Y2ggKG9sZGRlY2wsIG9sZGRlY2wsIG9sZF9jb250cmFjdHMpOwor ICAgIH0KKworICAvKiBIYW5kbGUgY2FzZXMgd2hlcmUgY29udHJhY3RzIGFyZSBvbWl0dGVkIGlu IG9uZSBvciB0aGUgb3RoZXIKKyAgICAgZGVjbGFyYXRpb24uICAqLworICBpZiAob2xkX2NvbnRy YWN0cykKKyAgICB7CisgICAgICAvKiBDb250cmFjdHMgaGF2ZSBiZWVuIHByZXZpb3VzbHkgc3Bl Y2lmaWVkIGJ5IGFyZSBubyBvbWl0dGVkLiBUaGUKKwkgbmV3IGRlY2xhcmF0aW9uIGluaGVyaXRz IHRoZSBleGlzdGluZyBjb250cmFjdHMuICovCisgICAgICBpZiAoIW5ld19jb250cmFjdHMpCisJ Y29weV9jb250cmFjdF9hdHRyaWJ1dGVzIChuZXdkZWNsLCBvbGRkZWNsKTsKKworICAgICAgLyog SW4gYWxsIGNhc2VzLCByZW1vdmUgZXhpc3RpbmcgY29udHJhY3RzIGZyb20gT0xEREVDTCB0byBw cmV2ZW50IHRoZQorCSBhdHRyaWJ1dGUgbWVyZ2luZyBmdW5jdGlvbiBmcm9tIGFkZGluZyBleGNl c3MgY29udHJhY3RzLiAgKi8KKyAgICAgIHJlbW92ZV9jb250cmFjdF9hdHRyaWJ1dGVzIChvbGRk ZWNsKTsKKyAgICB9CisgIGVsc2UgaWYgKCFvbGRfY29udHJhY3RzKQorICAgIHsKKyAgICAgIC8q IFdlIGFyZSBhZGRpbmcgY29udHJhY3RzIHRvIGEgZGVjbGFyYXRpb24uICAqLworICAgICAgaWYg KG5ld19jb250cmFjdHMpCisJeworCSAgLyogV2UgY2FuJ3QgYWRkIHRvIGEgcHJldmlvdXNseSBk ZWZpbmVkIGZ1bmN0aW9uLiAgKi8KKwkgIGlmIChERUNMX0lOSVRJQUwgKG9sZGRlY2wpKQorCSAg ICB7CisJICAgICAgYXV0b19kaWFnbm9zdGljX2dyb3VwIGQ7CisJICAgICAgZXJyb3JfYXQgKG5l d19sb2MsICJjYW5ub3QgYWRkIGNvbnRyYWN0cyBhZnRlciBkZWZpbml0aW9uIik7CisJICAgICAg aW5mb3JtIChERUNMX1NPVVJDRV9MT0NBVElPTiAob2xkZGVjbCksICJvcmlnaW5hbCBkZWZpbml0 aW9uIGhlcmUiKTsKKwkgICAgICByZXR1cm47CisJICAgIH0KKworCSAgLyogV2UgY2FuJ3QgYWRk IHRvIGFuIHVuZ3VhcmRlZCB2aXJ0dWFsIGZ1bmN0aW9uIGRlY2xhcmF0aW9uLiAgKi8KKwkgIGlm IChERUNMX1ZJUlRVQUxfUCAob2xkZGVjbCkgJiYgbmV3X2NvbnRyYWN0cykKKwkgICAgeworCSAg ICAgIGF1dG9fZGlhZ25vc3RpY19ncm91cCBkOworCSAgICAgIGVycm9yX2F0IChuZXdfbG9jLCAi Y2Fubm90IGFkZCBjb250cmFjdHMgdG8gYSB2aXJ0dWFsIGZ1bmN0aW9uIik7CisJICAgICAgaW5m b3JtIChERUNMX1NPVVJDRV9MT0NBVElPTiAob2xkZGVjbCksICJvcmlnaW5hbCBkZWNsYXJhdGlv biBoZXJlIik7CisJICAgICAgcmV0dXJuOworCSAgICB9CisKKwkgIC8qIERlcGVuZGluZyBvbiB0 aGUgImZpcnN0IGRlY2xhcmF0aW9uIiBydWxlLCB3ZSBtYXkgbm90IGJlIGFibGUKKwkgICAgIHRv IGFkZCBjb250cmFjdHMgdG8gYSBmdW5jdGlvbiBhZnRlciB0aGUgZmFjdC4gICovCisJICBpZiAo ZmxhZ19jb250cmFjdF9zdHJpY3RfZGVjbGFyYXRpb25zKQorCSAgICB7CisJICAgICAgd2Fybmlu Z19hdCAobmV3X2xvYywKKwkJCSAgT1BUX2Zjb250cmFjdF9zdHJpY3RfZGVjbGFyYXRpb25zXywK KwkJCSAgImRlY2xhcmF0aW9uIGFkZHMgY29udHJhY3RzIHRvICVxI0QiLAorCQkJICBvbGRkZWNs KTsKKwkgICAgICByZXR1cm47CisJICAgIH0KKworCSAgLyogQ29weSB0aGUgY29udHJhY3RzIGZy b20gTkVXREVDTCB0byBPTERERUNMLiBXZSBzaG91bGRuJ3QgbmVlZCB0bworCSAgICAgcmVtYXAg dGhlbSBiZWNhdXNlIE5FV0RFQ0wncyBwYXJhbWV0ZXJzIHdpbGwgcmVwbGFjZSB0aG9zZSBvZgor CSAgICAgT0xEREVDTC4gIFJlbW92ZSB0aGUgY29udHJhY3RzIGZyb20gTkVXREVDTCBzbyB0aGV5 IGFyZW4ndAorCSAgICAgY2xvbmVkIHdoZW4gbWVyZ2luZy4gICovCisJICBjb3B5X2NvbnRyYWN0 X2F0dHJpYnV0ZXMgKG9sZGRlY2wsIG5ld2RlY2wpOworCSAgcmVtb3ZlX2NvbnRyYWN0X2F0dHJp YnV0ZXMgKG5ld2RlY2wpOworCX0KKyAgICB9Cit9CisKKy8qIFJlcGxhY2UgdGhlIGFueSBjb250 cmFjdCBhdHRyaWJ1dGVzIG9uIE9WRVJSSURFUiB3aXRoIGEgY29weSB3aGVyZSBhbnkKKyAgIHJl ZmVyZW5jZXMgdG8gQkFTRUZOJ3MgUEFSTV9ERUNMcyBoYXZlIGJlZW4gcmV3cml0dGVuIHRvIHRo ZSBjb3JyZXNwb25kaW5nCisgICBQQVJNX0RFQ0wgaW4gT1ZFUlJJREVSLiAgKi8KKwordm9pZAor aW5oZXJpdF9iYXNlX2NvbnRyYWN0cyAodHJlZSBvdmVycmlkZXIsIHRyZWUgYmFzZWZuKQorewor ICB0cmVlIGxhc3QgPSBOVUxMX1RSRUUsIGNvbnRyYWN0X2F0dHJzID0gTlVMTF9UUkVFOworICBm b3IgKHRyZWUgYSA9IERFQ0xfQ09OVFJBQ1RTIChiYXNlZm4pOworICAgICAgYSAhPSBOVUxMX1RS RUU7CisgICAgICBhID0gQ09OVFJBQ1RfQ0hBSU4gKGEpKQorICAgIHsKKyAgICAgIHRyZWUgYyA9 IGNvcHlfbm9kZSAoYSk7CisgICAgICBUUkVFX1ZBTFVFIChjKSA9IGJ1aWxkX3RyZWVfbGlzdCAo VFJFRV9QVVJQT1NFIChUUkVFX1ZBTFVFIChjKSksCisJCQkJCWNvcHlfbm9kZSAoQ09OVFJBQ1Rf U1RBVEVNRU5UIChjKSkpOworCisgICAgICB0cmVlIHNyYyA9IGJhc2VmbjsKKyAgICAgIHRyZWUg ZHN0ID0gb3ZlcnJpZGVyOworICAgICAgcmVtYXBfY29udHJhY3QgKHNyYywgZHN0LCBDT05UUkFD VF9TVEFURU1FTlQgKGMpLCAvKmR1cGxpY2F0ZV9wPSovdHJ1ZSk7CisKKyAgICAgIENPTlRSQUNU X0NPTU1FTlQgKENPTlRSQUNUX1NUQVRFTUVOVCAoYykpID0KKwljb3B5X25vZGUgKENPTlRSQUNU X0NPTU1FTlQgKENPTlRSQUNUX1NUQVRFTUVOVCAoYykpKTsKKworICAgICAgY2hhaW5vbiAobGFz dCwgYyk7CisgICAgICBsYXN0ID0gYzsKKyAgICAgIGlmICghY29udHJhY3RfYXR0cnMpCisJY29u dHJhY3RfYXR0cnMgPSBjOworICAgIH0KKworICBzZXRfZGVjbF9jb250cmFjdHMgKG92ZXJyaWRl ciwgY29udHJhY3RfYXR0cnMpOworfQorCisjaW5jbHVkZSAiZ3QtY3AtY29udHJhY3RzLmgiCmRp ZmYgLS1naXQgYS9nY2MvY3AvY3AtZ2ltcGxpZnkuY2MgYi9nY2MvY3AvY3AtZ2ltcGxpZnkuY2MK aW5kZXggY2M4YmZhZGE1YWYuLjk4M2YyYTU2NmE2IDEwMDY0NAotLS0gYS9nY2MvY3AvY3AtZ2lt cGxpZnkuY2MKKysrIGIvZ2NjL2NwL2NwLWdpbXBsaWZ5LmNjCkBAIC0xNDI3LDYgKzE0MjcsMjMg QEAgY3BfZ2VuZXJpY2l6ZV9yICh0cmVlICpzdG10X3AsIGludCAqd2Fsa19zdWJ0cmVlcywgdm9p ZCAqZGF0YSkKICAgICAgIHd0ZC0+YmluZF9leHByX3N0YWNrLnBvcCAoKTsKICAgICAgIGJyZWFr OwogCisgICAgY2FzZSBBU1NFUlRJT05fU1RNVDoKKyAgICBjYXNlIFBSRUNPTkRJVElPTl9TVE1U OgorICAgIGNhc2UgUE9TVENPTkRJVElPTl9TVE1UOgorICAgICAgeworCWlmICh0cmVlIGNoZWNr ID0gYnVpbGRfY29udHJhY3RfY2hlY2sgKHN0bXQpKQorCSAgeworCSAgICAqc3RtdF9wID0gY2hl Y2s7CisJICAgIHJldHVybiBjcF9nZW5lcmljaXplX3IgKHN0bXRfcCwgd2Fsa19zdWJ0cmVlcywg ZGF0YSk7CisJICB9CisKKwkvKiBJZiB3ZSBkaWRuJ3QgYnVpbGQgYSBjaGVjaywgcmVwbGFjZSBp dCB3aXRoIHZvaWRfbm9kZSBzbyB3ZSBkb24ndAorCSAgIGxlYWsgY29udHJhY3RzIGludG8gR0VO RVJJQy4gICovCisJKnN0bXRfcCA9IHZvaWRfbm9kZTsKKwkqd2Fsa19zdWJ0cmVlcyA9IDA7Cisg ICAgICB9CisgICAgICBicmVhazsKKwogICAgIGNhc2UgVVNJTkdfU1RNVDoKICAgICAgIHsKIAl0 cmVlIGJsb2NrID0gTlVMTF9UUkVFOwpkaWZmIC0tZ2l0IGEvZ2NjL2NwL2NwLW9iamNwLWNvbW1v bi5jYyBiL2djYy9jcC9jcC1vYmpjcC1jb21tb24uY2MKaW5kZXggN2Y3NmYyYzY2OWEuLjZlZDM4 MjY2MjgxIDEwMDY0NAotLS0gYS9nY2MvY3AvY3Atb2JqY3AtY29tbW9uLmNjCisrKyBiL2djYy9j cC9jcC1vYmpjcC1jb21tb24uY2MKQEAgLTI1LDYgKzI1LDcgQEAgYWxvbmcgd2l0aCBHQ0M7IHNl ZSB0aGUgZmlsZSBDT1BZSU5HMy4gIElmIG5vdCBzZWUKICNpbmNsdWRlICJjcC1vYmpjcC1jb21t b24uaCIKICNpbmNsdWRlICJkd2FyZjIuaCIKICNpbmNsdWRlICJzdHJpbmdwb29sLmgiCisjaW5j bHVkZSAiY29udHJhY3RzLmgiCiAKIC8qIFNwZWNpYWwgcm91dGluZSB0byBnZXQgdGhlIGFsaWFz IHNldCBmb3IgQysrLiAgKi8KIApAQCAtODYsNiArODcsOSBAQCBjcF90cmVlX3NpemUgKGVudW0g dHJlZV9jb2RlIGNvZGUpCiAgICAgY2FzZSBDT05TVFJBSU5UX0lORk86ICAgICAgIHJldHVybiBz aXplb2YgKHRyZWVfY29uc3RyYWludF9pbmZvKTsKICAgICBjYXNlIFVTRVJERUZfTElURVJBTDoJ cmV0dXJuIHNpemVvZiAodHJlZV91c2VyZGVmX2xpdGVyYWwpOwogICAgIGNhc2UgVEVNUExBVEVf REVDTDoJCXJldHVybiBzaXplb2YgKHRyZWVfdGVtcGxhdGVfZGVjbCk7CisgICAgY2FzZSBBU1NF UlRJT05fU1RNVDoJcmV0dXJuIHNpemVvZiAodHJlZV9leHApOworICAgIGNhc2UgUFJFQ09ORElU SU9OX1NUTVQ6CXJldHVybiBzaXplb2YgKHRyZWVfZXhwKTsKKyAgICBjYXNlIFBPU1RDT05ESVRJ T05fU1RNVDoJcmV0dXJuIHNpemVvZiAodHJlZV9leHApOwogICAgIGRlZmF1bHQ6CiAgICAgICBz d2l0Y2ggKFRSRUVfQ09ERV9DTEFTUyAoY29kZSkpCiAJewpAQCAtNTY0LDYgKzU2OCwxMCBAQCBj cF9jb21tb25faW5pdF90cyAodm9pZCkKICAgTUFSS19UU19FWFAgKENPX1lJRUxEX0VYUFIpOwog ICBNQVJLX1RTX0VYUCAoQ09fUkVUVVJOX0VYUFIpOwogCisgIE1BUktfVFNfRVhQIChBU1NFUlRJ T05fU1RNVCk7CisgIE1BUktfVFNfRVhQIChQUkVDT05ESVRJT05fU1RNVCk7CisgIE1BUktfVFNf RVhQIChQT1NUQ09ORElUSU9OX1NUTVQpOworCiAgIGNfY29tbW9uX2luaXRfdHMgKCk7CiB9CiAK QEAgLTU3Niw2ICs1ODQsMzkgQEAgY3BfaGFuZGxlX29wdGlvbiAoc2l6ZV90IHNjb2RlLCBjb25z dCBjaGFyICphcmcsIEhPU1RfV0lERV9JTlQgdmFsdWUsCiB7CiAgIGlmIChoYW5kbGVfbW9kdWxl X29wdGlvbiAodW5zaWduZWQgKHNjb2RlKSwgYXJnLCB2YWx1ZSkpCiAgICAgcmV0dXJuIHRydWU7 CisKKyAgZW51bSBvcHRfY29kZSBjb2RlID0gKGVudW0gb3B0X2NvZGUpIHNjb2RlOworICBib29s IGhhbmRsZWRfcCA9IHRydWU7CisKKyAgc3dpdGNoIChjb2RlKQorICAgIHsKKyAgICBjYXNlIE9Q VF9mY29udHJhY3RfYnVpbGRfbGV2ZWxfOgorICAgICAgaGFuZGxlX09QVF9mY29udHJhY3RfYnVp bGRfbGV2ZWxfIChhcmcpOworICAgICAgYnJlYWs7CisKKyAgICBjYXNlIE9QVF9mY29udHJhY3Rf YXNzdW1wdGlvbl9tb2RlXzoKKyAgICAgIGhhbmRsZV9PUFRfZmNvbnRyYWN0X2Fzc3VtcHRpb25f bW9kZV8gKGFyZyk7CisgICAgICBicmVhazsKKworICAgIGNhc2UgT1BUX2Zjb250cmFjdF9jb250 aW51YXRpb25fbW9kZV86CisgICAgICBoYW5kbGVfT1BUX2Zjb250cmFjdF9jb250aW51YXRpb25f bW9kZV8gKGFyZyk7CisgICAgICBicmVhazsKKworICAgIGNhc2UgT1BUX2Zjb250cmFjdF9yb2xl XzoKKyAgICAgIGhhbmRsZV9PUFRfZmNvbnRyYWN0X3JvbGVfIChhcmcpOworICAgICAgYnJlYWs7 CisKKyAgICBjYXNlIE9QVF9mY29udHJhY3Rfc2VtYW50aWNfOgorICAgICAgaGFuZGxlX09QVF9m Y29udHJhY3Rfc2VtYW50aWNfIChhcmcpOworICAgICAgYnJlYWs7CisKKyAgICBkZWZhdWx0Ogor ICAgICAgaGFuZGxlZF9wID0gZmFsc2U7CisgICAgICBicmVhazsKKyAgICB9CisgIGlmIChoYW5k bGVkX3ApCisgICAgcmV0dXJuIGhhbmRsZWRfcDsKKwogICByZXR1cm4gY19jb21tb25faGFuZGxl X29wdGlvbiAoc2NvZGUsIGFyZywgdmFsdWUsIGtpbmQsIGxvYywgaGFuZGxlcnMpOwogfQogCmRp ZmYgLS1naXQgYS9nY2MvY3AvZGVjbC5jYyBiL2djYy9jcC9kZWNsLmNjCmluZGV4IDM0MWI0YmJh OTkyLi41NDRlZmRjOTkxNCAxMDA2NDQKLS0tIGEvZ2NjL2NwL2RlY2wuY2MKKysrIGIvZ2NjL2Nw L2RlY2wuY2MKQEAgLTIyNjgsNiArMjI2OCw4IEBAIGR1cGxpY2F0ZV9kZWNscyAodHJlZSBuZXdk ZWNsLCB0cmVlIG9sZGRlY2wsIGJvb2wgaGlkaW5nLCBib29sIHdhc19oaWRkZW4pCiAJICA9IERF Q0xfT1ZFUkxPQURFRF9PUEVSQVRPUl9DT0RFX1JBVyAob2xkZGVjbCk7CiAgICAgICBuZXdfZGVm aW5lc19mdW5jdGlvbiA9IERFQ0xfSU5JVElBTCAobmV3ZGVjbCkgIT0gTlVMTF9UUkVFOwogCisg ICAgICBkdXBsaWNhdGVfY29udHJhY3RzIChuZXdkZWNsLCBvbGRkZWNsKTsKKwogICAgICAgLyog T3B0aW9uYWxseSB3YXJuIGFib3V0IG1vcmUgdGhhbiBvbmUgZGVjbGFyYXRpb24gZm9yIHRoZSBz YW1lCiAJIG5hbWUsIGJ1dCBkb24ndCB3YXJuIGFib3V0IGEgZnVuY3Rpb24gZGVjbGFyYXRpb24g Zm9sbG93ZWQgYnkgYQogCSBkZWZpbml0aW9uLiAgKi8KQEAgLTIzNDEsNiArMjM0MywxMyBAQCBk dXBsaWNhdGVfZGVjbHMgKHRyZWUgbmV3ZGVjbCwgdHJlZSBvbGRkZWNsLCBib29sIGhpZGluZywg Ym9vbCB3YXNfaGlkZGVuKQogCSBzcGVjaWFsaXphdGlvbnMuICAqLwogICAgICAgZ2NjX2Fzc2Vy dCAoIURFQ0xfVEVNUExBVEVfU1BFQ0lBTElaQVRJT05TIChuZXdkZWNsKSk7CiAKKyAgICAgIC8q IE1ha2Ugc3VyZSB0aGUgY29udHJhY3RzIGFyZSBlcXVpdmFsZW50LiAgKi8KKyAgICAgIGR1cGxp Y2F0ZV9jb250cmFjdHMgKG5ld2RlY2wsIG9sZGRlY2wpOworCisgICAgICAvKiBSZW1vdmUgY29u dHJhY3RzIGZyb20gb2xkX3Jlc3VsdCBzbyB0aGV5IGFyZW4ndCBhcHBlbmRlZCB0bworCSBvbGRf cmVzdWx0IGJ5IHRoZSBtZXJnZSBmdW5jdGlvbi4gICovCisgICAgICByZW1vdmVfY29udHJhY3Rf YXR0cmlidXRlcyAob2xkX3Jlc3VsdCk7CisKICAgICAgIERFQ0xfQVRUUklCVVRFUyAob2xkX3Jl c3VsdCkKIAk9ICgqdGFyZ2V0bS5tZXJnZV9kZWNsX2F0dHJpYnV0ZXMpIChvbGRfcmVzdWx0LCBu ZXdfcmVzdWx0KTsKIApAQCAtMjg2MywxMSArMjg3MiwyMyBAQCBkdXBsaWNhdGVfZGVjbHMgKHRy ZWUgbmV3ZGVjbCwgdHJlZSBvbGRkZWNsLCBib29sIGhpZGluZywgYm9vbCB3YXNfaGlkZGVuKQog CX0KICAgICAgIGlmICghIHR5cGVzX21hdGNoIHx8IG5ld19kZWZpbmVzX2Z1bmN0aW9uKQogCXsK KwkgIC8qIFRoZXNlIGFyZSB0aGUgZmluYWwgREVDTF9BUkdVTUVOVFMgdGhhdCB3aWxsIGJlIHVz ZWQgd2l0aGluIHRoZQorCSAgICAgYm9keTsgdXBkYXRlIGFueSByZWZlcmVuY2VzIHRvIG9sZCBE RUNMX0FSR1VNRU5UUyBpbiB0aGUKKwkgICAgIGNvbnRyYWN0cywgaWYgcHJlc2VudC4gICovCisJ ICBpZiAodHJlZSBjb250cmFjdHMgPSBERUNMX0NPTlRSQUNUUyAobmV3ZGVjbCkpCisJICAgIHJl bWFwX2NvbnRyYWN0cyAob2xkZGVjbCwgbmV3ZGVjbCwgY29udHJhY3RzLCB0cnVlKTsKKwogCSAg LyogVGhlc2UgbmVlZCB0byBiZSBjb3BpZWQgc28gdGhhdCB0aGUgbmFtZXMgYXJlIGF2YWlsYWJs ZS4KIAkgICAgIE5vdGUgdGhhdCBpZiB0aGUgdHlwZXMgZG8gbWF0Y2gsIHdlJ2xsIHByZXNlcnZl IGlubGluZQogCSAgICAgaW5mbyBhbmQgb3RoZXIgYml0cywgYnV0IGlmIG5vdCwgd2Ugd29uJ3Qu ICAqLwogCSAgREVDTF9BUkdVTUVOVFMgKG9sZGRlY2wpID0gREVDTF9BUkdVTUVOVFMgKG5ld2Rl Y2wpOwogCSAgREVDTF9SRVNVTFQgKG9sZGRlY2wpID0gREVDTF9SRVNVTFQgKG5ld2RlY2wpOwor CisJICAvKiBJbiBzb21lIGNhc2VzLCBkdXBsaWNhdGVfY29udHJhY3RzIHdpbGwgcmVtb3ZlIGNv bnRyYWN0cyBmcm9tCisJICAgICBPTERERUNMLCB0byBhdm9pZCBkdXBsaWNhdGlvbnMuIFNvbWV0 aW1lcywgdGhlIGNvbnRyYWN0cyBlbmQgdXAKKwkgICAgIHNoYXJlZC4gSWYgd2UgcmVtb3ZlZCB0 aGVtLCByZS1hZGQgdGhlbS4gICovCisJICBpZiAoIURFQ0xfQ09OVFJBQ1RTIChvbGRkZWNsKSkK KwkgICAgY29weV9jb250cmFjdF9hdHRyaWJ1dGVzIChvbGRkZWNsLCBuZXdkZWNsKTsKIAl9CiAg ICAgICAvKiBJZiByZWRlY2xhcmluZyBhIGJ1aWx0aW4gZnVuY3Rpb24sIGl0IHN0YXlzIGJ1aWx0 IGluCiAJIGlmIG5ld2RlY2wgaXMgYSBnbnVfaW5saW5lIGRlZmluaXRpb24sIG9yIGlmIG5ld2Rl Y2wgaXMganVzdApAQCAtMjkxMSw3ICsyOTMyLDM4IEBAIGR1cGxpY2F0ZV9kZWNscyAodHJlZSBu ZXdkZWNsLCB0cmVlIG9sZGRlY2wsIGJvb2wgaGlkaW5nLCBib29sIHdhc19oaWRkZW4pCiAJICAv KiBEb24ndCBjbGVhciBvdXQgdGhlIGFyZ3VtZW50cyBpZiB3ZSdyZSBqdXN0IHJlZGVjbGFyaW5n IGEKIAkgICAgIGZ1bmN0aW9uLiAgKi8KIAkgIGlmIChERUNMX0FSR1VNRU5UUyAob2xkZGVjbCkp Ci0JICAgIERFQ0xfQVJHVU1FTlRTIChuZXdkZWNsKSA9IERFQ0xfQVJHVU1FTlRTIChvbGRkZWNs KTsKKwkgICAgeworCSAgICAgIC8qIElmIHdlIHJlbW92ZWQgY29udHJhY3RzIGZyb20gcHJldmlv dXMgZGVmaW5pdGlvbiwgcmUtYXR0YWNoCisJCSB0aGVtLiBPdGhlcndpc2UsIHJld3JpdGUgdGhl IGNvbnRyYWN0cyBzbyB0aGV5IG1hdGNoIHRoZQorCQkgcGFyYW1ldGVycyBvZiB0aGUgbmV3IGRl Y2xhcmF0aW9uLiAgKi8KKwkgICAgICBpZiAoREVDTF9JTklUSUFMIChvbGRkZWNsKQorCQkgICYm IERFQ0xfQ09OVFJBQ1RTIChuZXdkZWNsKQorCQkgICYmICFERUNMX0NPTlRSQUNUUyAob2xkZGVj bCkpCisJCWNvcHlfY29udHJhY3RfYXR0cmlidXRlcyAob2xkZGVjbCwgbmV3ZGVjbCk7CisJICAg ICAgZWxzZQorCQl7CisJCSAgLyogVGVtcG9yYXJpbHkgdW5kbyB0aGUgcmUtY29udGV4dGluZyBv ZiBwYXJhbWV0ZXJzIHNvIHdlIGNhbgorCQkgICAgIGFjdHVhbGx5IHJlbWFwIHBhcmFtZXRlcnMu ICBUaGUgaW5saW5lciB3b24ndCByZXBsYWNlCisJCSAgICAgcGFyYW1ldGVycyBpZiB3ZSBkb24n dCBkbyB0aGlzLiAgKi8KKwkJICB0cmVlIGFyZ3MgPSBERUNMX0FSR1VNRU5UUyAobmV3ZGVjbCk7 CisJCSAgZm9yICh0cmVlIHAgPSBhcmdzOyBwOyBwID0gREVDTF9DSEFJTiAocCkpCisJCSAgICBE RUNMX0NPTlRFWFQgKHApID0gbmV3ZGVjbDsKKworCQkgIC8qIFNhdmUgbmV3IGFyZ3VtZW50IG5h bWVzIGZvciB1c2UgaW4gY29udHJhY3RzIHBhcnNpbmcsCisJCSAgICAgdW5sZXNzIHdlJ3ZlIGFs cmVhZHkgc3RhcnRlZCBwYXJzaW5nIHRoZSBib2R5IG9mIG9sZGRlY2wKKwkJICAgICAocGFydGlj dWxhciBpc3N1ZXMgYXJpc2Ugd2hlbiBuZXdkZWNsIGlzIGZyb20gYSBwcmlvcgorCQkgICAgIGZy aWVuZCBkZWNsIHdpdGggbm8gYXJndW1lbnQgbmFtZXMsIHNlZQorCQkgICAgIG1vZHVsZXMvY29u dHJhY3RzLXRwbC1mcmllbmQtMSkuICAqLworCQkgIGlmICh0cmVlIGNvbnRyYWN0cyA9IERFQ0xf Q09OVFJBQ1RTIChvbGRkZWNsKSkKKwkJICAgIHJlbWFwX2NvbnRyYWN0cyAobmV3ZGVjbCwgb2xk ZGVjbCwgY29udHJhY3RzLCB0cnVlKTsKKworCQkgIC8qIEFuZCByZXZlcnNlIHRoaXMgb3BlcmF0 aW9uIGFnYWluLiAqLworCQkgIGZvciAodHJlZSBwID0gYXJnczsgcDsgcCA9IERFQ0xfQ0hBSU4g KHApKQorCQkgICAgREVDTF9DT05URVhUIChwKSA9IG9sZGRlY2w7CisJCX0KKworCSAgICAgIERF Q0xfQVJHVU1FTlRTIChuZXdkZWNsKSA9IERFQ0xfQVJHVU1FTlRTIChvbGRkZWNsKTsKKwkgICAg fQogCX0KICAgICB9CiAgIGVsc2UgaWYgKFRSRUVfQ09ERSAobmV3ZGVjbCkgPT0gTkFNRVNQQUNF X0RFQ0wpCkBAIC01NTIyLDYgKzU1NzQsMTIgQEAgY2hlY2tfdGFnX2RlY2wgKGNwX2RlY2xfc3Bl Y2lmaWVyX3NlcSAqZGVjbHNwZWNzLAogCXdhcm5fbWlzcGxhY2VkX2F0dHJfZm9yX2NsYXNzX3R5 cGUgKGxvYywgZGVjbGFyZWRfdHlwZSk7CiAgICAgfQogCisgIC8qIERpYWdub3NlIGludmFsaWQg YXBwbGljYXRpb24gb2YgY29udHJhY3RzLCBpZiBhbnkuICAqLworICBpZiAoZmluZF9jb250cmFj dCAoZGVjbHNwZWNzLT5hdHRyaWJ1dGVzKSkKKyAgICBkaWFnbm9zZV9taXNhcHBsaWVkX2NvbnRy YWN0cyAoZGVjbHNwZWNzLT5hdHRyaWJ1dGVzKTsKKyAgZWxzZQorICAgIGRpYWdub3NlX21pc2Fw cGxpZWRfY29udHJhY3RzIChkZWNsc3BlY3MtPnN0ZF9hdHRyaWJ1dGVzKTsKKwogICByZXR1cm4g ZGVjbGFyZWRfdHlwZTsKIH0KIApAQCAtNTgxMyw5ICs1ODcxLDE2IEBAIHN0YXJ0X2RlY2wgKGNv bnN0IGNwX2RlY2xhcmF0b3IgKmRlY2xhcmF0b3IsCiAgICAgICBpZiAoREVDTF9FWFRFUk5BTCAo ZGVjbCkgJiYgISBERUNMX1RFTVBMQVRFX1NQRUNJQUxJWkFUSU9OIChkZWNsKQogCSAgLyogQWxp YXNlcyBhcmUgZGVmaW5pdGlvbnMuICovCiAJICAmJiAhYWxpYXMpCi0JcGVybWVycm9yIChkZWNs YXJhdG9yLT5pZF9sb2MsCi0JCSAgICJkZWNsYXJhdGlvbiBvZiAlcSNEIG91dHNpZGUgb2YgY2xh c3MgaXMgbm90IGRlZmluaXRpb24iLAotCQkgICBkZWNsKTsKKwl7CisJICBpZiAoREVDTF9WSVJU VUFMX1AgKGRlY2wpIHx8ICFmbGFnX2NvbnRyYWN0cykKKwkgICAgcGVybWVycm9yIChkZWNsYXJh dG9yLT5pZF9sb2MsCisJCSAgICAgICAiZGVjbGFyYXRpb24gb2YgJXEjRCBvdXRzaWRlIG9mIGNs YXNzIGlzIG5vdCBkZWZpbml0aW9uIiwKKwkJICAgICAgIGRlY2wpOworCSAgZWxzZSBpZiAoZmxh Z19jb250cmFjdF9zdHJpY3RfZGVjbGFyYXRpb25zKQorCSAgICB3YXJuaW5nX2F0IChkZWNsYXJh dG9yLT5pZF9sb2MsIE9QVF9mY29udHJhY3Rfc3RyaWN0X2RlY2xhcmF0aW9uc18sCisJCQkiZGVj bGFyYXRpb24gb2YgJXEjRCBvdXRzaWRlIG9mIGNsYXNzIGlzIG5vdCBkZWZpbml0aW9uIiwKKwkJ CWRlY2wpOworCX0KICAgICB9CiAKICAgLyogQ3JlYXRlIGEgREVDTF9MQU5HX1NQRUNJRklDIHNv IHRoYXQgREVDTF9ERUNPTVBPU0lUSU9OX1Agd29ya3MuICAqLwpAQCAtMTA1OTcsNiArMTA2NjIs OSBAQCBncm9rZm5kZWNsICh0cmVlIGN0eXBlLAogICAgICAgKmF0dHJsaXN0ID0gTlVMTF9UUkVF OwogICAgIH0KIAorICBpZiAoREVDTF9IQVNfQ09OVFJBQ1RTX1AgKGRlY2wpKQorICAgIHJlYnVp bGRfcG9zdGNvbmRpdGlvbnMgKGRlY2wpOworCiAgIC8qIENoZWNrIG1haW4ncyB0eXBlIGFmdGVy IGF0dHJpYnV0ZXMgaGF2ZSBiZWVuIGFwcGxpZWQuICAqLwogICBpZiAoY3R5cGUgPT0gTlVMTF9U UkVFICYmIERFQ0xfTUFJTl9QIChkZWNsKSkKICAgICB7CkBAIC0xMjgwMiw3ICsxMjg3MCw4IEBA IGdyb2tkZWNsYXJhdG9yIChjb25zdCBjcF9kZWNsYXJhdG9yICpkZWNsYXJhdG9yLAogCX0KICAg ICB9CiAKLSAgaWYgKGRlY2xzcGVjcy0+c3RkX2F0dHJpYnV0ZXMpCisgIGlmIChkZWNsc3BlY3Mt PnN0ZF9hdHRyaWJ1dGVzCisgICAgICAmJiAhZGlhZ25vc2VfbWlzYXBwbGllZF9jb250cmFjdHMg KGRlY2xzcGVjcy0+c3RkX2F0dHJpYnV0ZXMpKQogICAgIHsKICAgICAgIGxvY2F0aW9uX3QgYXR0 cl9sb2MgPSBkZWNsc3BlY3MtPmxvY2F0aW9uc1tkc19zdGRfYXR0cmlidXRlXTsKICAgICAgIGlm ICh3YXJuaW5nX2F0IChhdHRyX2xvYywgT1BUX1dhdHRyaWJ1dGVzLCAiYXR0cmlidXRlIGlnbm9y ZWQiKSkKQEAgLTEyODEwLDYgKzEyODc5LDkgQEAgZ3Jva2RlY2xhcmF0b3IgKGNvbnN0IGNwX2Rl Y2xhcmF0b3IgKmRlY2xhcmF0b3IsCiAJCSJpcyBpZ25vcmVkIik7CiAgICAgfQogCisgIGlmIChh dHRybGlzdCkKKyAgICBkaWFnbm9zZV9taXNhcHBsaWVkX2NvbnRyYWN0cyAoKmF0dHJsaXN0KTsK KwogICAvKiBEZXRlcm1pbmUgdGhlIHR5cGUgb2YgdGhlIGVudGl0eSBkZWNsYXJlZCBieSByZWN1 cnJpbmcgb24gdGhlCiAgICAgIGRlY2xhcmF0b3IuICAqLwogICBmb3IgKDsgZGVjbGFyYXRvcjsg ZGVjbGFyYXRvciA9IGRlY2xhcmF0b3ItPmRlY2xhcmF0b3IpCkBAIC0xMjg0Nyw2ICsxMjkxOSwx MiBAQCBncm9rZGVjbGFyYXRvciAoY29uc3QgY3BfZGVjbGFyYXRvciAqZGVjbGFyYXRvciwKIAog ICAgICAgaW5uZXJfZGVjbGFyYXRvciA9IGRlY2xhcmF0b3ItPmRlY2xhcmF0b3I7CiAKKyAgICAg IC8qIENoZWNrIHRoYXQgY29udHJhY3RzIGFyZW4ndCBtaXNhcHBsaWVkLiAgKi8KKyAgICAgIGlm ICh0cmVlIGNvbnRyYWN0X2F0dHIgPSBmaW5kX2NvbnRyYWN0IChkZWNsYXJhdG9yLT5zdGRfYXR0 cmlidXRlcykpCisJaWYgKGRlY2xhcmF0b3ItPmtpbmQgIT0gY2RrX2Z1bmN0aW9uCisJICAgIHx8 IGlubmVybW9zdF9jb2RlICE9IGNka19mdW5jdGlvbikKKwkgIGRpYWdub3NlX21pc2FwcGxpZWRf Y29udHJhY3RzIChjb250cmFjdF9hdHRyKTsKKwogICAgICAgLyogV2UgZG9uJ3Qgd2FudCB0byB3 YXJuIGluIHBhcmFtZXRlciBjb250ZXh0IGJlY2F1c2Ugd2UgZG9uJ3QKIAkgeWV0IGtub3cgaWYg dGhlIHBhcnNlIHdpbGwgc3VjY2VlZCwgYW5kIHRoaXMgbWlnaHQgdHVybiBvdXQKIAkgdG8gYmUg YSBjb25zdHJ1Y3RvciBjYWxsLiAgKi8KQEAgLTEzMjQzLDYgKzEzMzIxLDIzIEBAIGdyb2tkZWNs YXJhdG9yIChjb25zdCBjcF9kZWNsYXJhdG9yICpkZWNsYXJhdG9yLAogCQllbHNlCiAJCSAgcmV0 dXJuZWRfYXR0cnMgPSBhdHRyX2NoYWlub24gKHJldHVybmVkX2F0dHJzLCBhdHQpOwogCSAgICAg IH0KKworCSAgICAvKiBBY3R1YWxseSBhcHBseSB0aGUgY29udHJhY3QgYXR0cmlidXRlcyB0byB0 aGUgZGVjbGFyYXRpb24uICAqLworCSAgICBmb3IgKHRyZWUgKnAgPSAmYXR0cnM7ICpwOykKKwkg ICAgICB7CisJCXRyZWUgbCA9ICpwOworCQlpZiAoY3h4X2NvbnRyYWN0X2F0dHJpYnV0ZV9wIChs KSkKKwkJICB7CisJCSAgICAqcCA9IFRSRUVfQ0hBSU4gKGwpOworCQkgICAgLyogSW50ZW50aW9u YWxseSByZXZlcnNlIG9yZGVyIG9mIGNvbnRyYWN0cyBzbyB0aGV5J3JlCisJCSAgICAgICByZXZl cnNlZCBiYWNrIGludG8gdGhlaXIgbGV4aWNhbCBvcmRlci4gICovCisJCSAgICBUUkVFX0NIQUlO IChsKSA9IE5VTExfVFJFRTsKKwkJICAgIHJldHVybmVkX2F0dHJzID0gY2hhaW5vbiAobCwgcmV0 dXJuZWRfYXR0cnMpOworCQkgIH0KKwkJZWxzZQorCQkgIHAgPSAmVFJFRV9DSEFJTiAobCk7CisJ ICAgICB9CisKIAkgICAgaWYgKGF0dHJzKQogCSAgICAgIC8qIFtkY2wuZmN0XS8yOgogCkBAIC0x NDI2NSw3ICsxNDM2MCwxMCBAQCBncm9rZGVjbGFyYXRvciAoY29uc3QgY3BfZGVjbGFyYXRvciAq ZGVjbGFyYXRvciwKIAkgIHsKIAkgICAgLyogUGFja2FnZXMgdGVuZCB0byB1c2UgR05VIGF0dHJp YnV0ZXMgb24gZnJpZW5kcywgc28gd2Ugb25seQogCSAgICAgICB3YXJuIGZvciBzdGFuZGFyZCBh dHRyaWJ1dGVzLiAgKi8KLQkgICAgaWYgKGF0dHJsaXN0ICYmICFmdW5jZGVmX2ZsYWcgJiYgY3h4 MTFfYXR0cmlidXRlX3AgKCphdHRybGlzdCkpCisJICAgIGlmIChhdHRybGlzdAorCQkmJiAhZnVu Y2RlZl9mbGFnCisJCSYmIGN4eDExX2F0dHJpYnV0ZV9wICgqYXR0cmxpc3QpCisJCSYmICFhbGxf YXR0cmlidXRlc19hcmVfY29udHJhY3RzX3AgKCphdHRybGlzdCkpCiAJICAgICAgewogCQkqYXR0 cmxpc3QgPSBOVUxMX1RSRUU7CiAJCWlmICh3YXJuaW5nX2F0IChpZF9sb2MsIE9QVF9XYXR0cmli dXRlcywgImF0dHJpYnV0ZSBpZ25vcmVkIikpCkBAIC0xNzQ4Niw2ICsxNzU4NCw4IEBAIHN0YXJ0 X3ByZXBhcnNlZF9mdW5jdGlvbiAodHJlZSBkZWNsMSwgdHJlZSBhdHRycywgaW50IGZsYWdzKQog CiAgIHN0b3JlX3Bhcm1fZGVjbHMgKGN1cnJlbnRfZnVuY3Rpb25fcGFybXMpOwogCisgIHN0YXJ0 X2Z1bmN0aW9uX2NvbnRyYWN0cyAoZGVjbDEpOworCiAgIGlmICghcHJvY2Vzc2luZ190ZW1wbGF0 ZV9kZWNsCiAgICAgICAmJiAoZmxhZ19saWZldGltZV9kc2UgPiAxKQogICAgICAgJiYgREVDTF9D T05TVFJVQ1RPUl9QIChkZWNsMSkKQEAgLTE4MjA2LDYgKzE4MzA2LDkgQEAgZmluaXNoX2Z1bmN0 aW9uIChib29sIGlubGluZV9wKQogICBjdXJyZW50X2Z1bmN0aW9uX2RlY2wgPSBOVUxMX1RSRUU7 CiAKICAgaW52b2tlX3BsdWdpbl9jYWxsYmFja3MgKFBMVUdJTl9GSU5JU0hfUEFSU0VfRlVOQ1RJ T04sIGZuZGVjbCk7CisKKyAgZmluaXNoX2Z1bmN0aW9uX2NvbnRyYWN0cyAoZm5kZWNsKTsKKwog ICByZXR1cm4gZm5kZWNsOwogfQogDApkaWZmIC0tZ2l0IGEvZ2NjL2NwL2RlY2wyLmNjIGIvZ2Nj L2NwL2RlY2wyLmNjCmluZGV4IGVlYjU5ZWFlNjRmLi5mOTU1MjlhNWM5YSAxMDA2NDQKLS0tIGEv Z2NjL2NwL2RlY2wyLmNjCisrKyBiL2djYy9jcC9kZWNsMi5jYwpAQCAtMTU2MSw2ICsxNTYxLDkg QEAgY3BfY2hlY2tfY29uc3RfYXR0cmlidXRlcyAodHJlZSBhdHRyaWJ1dGVzKQogICB0cmVlIGF0 dHI7CiAgIGZvciAoYXR0ciA9IGF0dHJpYnV0ZXM7IGF0dHI7IGF0dHIgPSBUUkVFX0NIQUlOIChh dHRyKSkKICAgICB7CisgICAgICBpZiAoY3h4X2NvbnRyYWN0X2F0dHJpYnV0ZV9wIChhdHRyKSkK Kwljb250aW51ZTsKKwogICAgICAgdHJlZSBhcmc7CiAgICAgICAvKiBBcyB3ZSBpbXBsZW1lbnQg YWxpZ25hcyB1c2luZyBnbnU6OmFsaWduZWQgYXR0cmlidXRlIGFuZAogCSBhbGlnbmFzIGFyZ3Vt ZW50IGlzIGEgY29uc3RhbnQgZXhwcmVzc2lvbiwgZm9yY2UgbWFuaWZlc3RseQpAQCAtMjEwNiw3 ICsyMTA5LDE3IEBAIHZvaWQKIGNvbWRhdF9saW5rYWdlICh0cmVlIGRlY2wpCiB7CiAgIGlmIChm bGFnX3dlYWspCi0gICAgbWFrZV9kZWNsX29uZV9vbmx5IChkZWNsLCBjeHhfY29tZGF0X2dyb3Vw IChkZWNsKSk7CisgICAgeworICAgICAgbWFrZV9kZWNsX29uZV9vbmx5IChkZWNsLCBjeHhfY29t ZGF0X2dyb3VwIChkZWNsKSk7CisgICAgICBpZiAoSEFWRV9DT01EQVRfR1JPVVAgJiYgZmxhZ19j b250cmFjdHMgJiYgREVDTF9DT05UUkFDVFMgKGRlY2wpKQorCXsKKwkgIHN5bXRhYl9ub2RlICpu ID0gc3ltdGFiX25vZGU6OmdldCAoZGVjbCk7CisJICBpZiAodHJlZSBwcmUgPSBERUNMX1BSRV9G TiAoZGVjbCkpCisJICAgIGNncmFwaF9ub2RlOjpnZXRfY3JlYXRlIChwcmUpLT5hZGRfdG9fc2Ft ZV9jb21kYXRfZ3JvdXAgKG4pOworCSAgaWYgKHRyZWUgcG9zdCA9IERFQ0xfUE9TVF9GTiAoZGVj bCkpCisJICAgIGNncmFwaF9ub2RlOjpnZXRfY3JlYXRlIChwb3N0KS0+YWRkX3RvX3NhbWVfY29t ZGF0X2dyb3VwIChuKTsKKwl9CisgICAgfQogICBlbHNlIGlmIChUUkVFX0NPREUgKGRlY2wpID09 IEZVTkNUSU9OX0RFQ0wKIAkgICB8fCAoVkFSX1AgKGRlY2wpICYmIERFQ0xfQVJUSUZJQ0lBTCAo ZGVjbCkpKQogICAgIC8qIFdlIGNhbiBqdXN0IGVtaXQgZnVuY3Rpb24gYW5kIGNvbXBpbGVyLWdl bmVyYXRlZCB2YXJpYWJsZXMKZGlmZiAtLWdpdCBhL2djYy9jcC9lcnJvci5jYyBiL2djYy9jcC9l cnJvci5jYwppbmRleCBkYThjOTVjOWI0My4uMTJiMjhlOGVlNWIgMTAwNjQ0Ci0tLSBhL2djYy9j cC9lcnJvci5jYworKysgYi9nY2MvY3AvZXJyb3IuY2MKQEAgLTU2Nyw3ICs1NjcsOCBAQCBkdW1w X3R5cGUgKGN4eF9wcmV0dHlfcHJpbnRlciAqcHAsIHRyZWUgdCwgaW50IGZsYWdzKQogICAgICAg ZWxzZQogCXsKIAkgIHBwX2N4eF9jdl9xdWFsaWZpZXJfc2VxIChwcCwgdCk7Ci0JICBwcF9jeHhf dHJlZV9pZGVudGlmaWVyIChwcCwgVFlQRV9JREVOVElGSUVSICh0KSk7CisJICBpZiAodHJlZSBp ZCA9IFRZUEVfSURFTlRJRklFUiAodCkpCisJICAgIHBwX2N4eF90cmVlX2lkZW50aWZpZXIgKHBw LCBpZCk7CiAJfQogICAgICAgYnJlYWs7CiAKZGlmZiAtLWdpdCBhL2djYy9jcC9nKytzcGVjLmNj IGIvZ2NjL2NwL2crK3NwZWMuY2MKaW5kZXggYjYzZDgzNTBiYTEuLjI1N2U0OWI3ZjNmIDEwMDY0 NAotLS0gYS9nY2MvY3AvZysrc3BlYy5jYworKysgYi9nY2MvY3AvZysrc3BlYy5jYwpAQCAtMzEs NiArMzEsOCBAQCBhbG9uZyB3aXRoIEdDQzsgc2VlIHRoZSBmaWxlIENPUFlJTkczLiAgSWYgbm90 IHNlZQogI2RlZmluZSBXSVRITElCQwkoMTw8MykKIC8qIFNraXAgdGhpcyBvcHRpb24uICAqLwog I2RlZmluZSBTS0lQT1BUCQkoMTw8NCkKKy8qIEFkZCAtbHN0ZGMrK2V4cCBmb3IgZXhwZXJpbWVu dGFsIGZlYXR1cmVzIHRoYXQgbmVlZCBsaWJyYXJ5IHN1cHBvcnQuICAqLworI2RlZmluZSBFWFBF UklNRU5UQUwJKDE8PDUpCiAKICNpZm5kZWYgTUFUSF9MSUJSQVJZCiAjZGVmaW5lIE1BVEhfTElC UkFSWSAibSIKQEAgLTE1OCw2ICsxNjAsMTEgQEAgbGFuZ19zcGVjaWZpY19kcml2ZXIgKHN0cnVj dCBjbF9kZWNvZGVkX29wdGlvbiAqKmluX2RlY29kZWRfb3B0aW9ucywKIAogICAgICAgc3dpdGNo IChkZWNvZGVkX29wdGlvbnNbaV0ub3B0X2luZGV4KQogCXsKKwljYXNlIE9QVF9mY29udHJhY3Rz OgorCSAgYXJnc1tpXSB8PSBFWFBFUklNRU5UQUw7CisJICArK2FkZGVkOworCSAgYnJlYWs7CisK IAljYXNlIE9QVF9ub3N0ZGxpYjoKIAljYXNlIE9QVF9ub3N0ZGxpYl9fOgogCWNhc2UgT1BUX25v ZGVmYXVsdGxpYnM6CkBAIC0zNDgsNiArMzU1LDExIEBAIGxhbmdfc3BlY2lmaWNfZHJpdmVyIChz dHJ1Y3QgY2xfZGVjb2RlZF9vcHRpb24gKippbl9kZWNvZGVkX29wdGlvbnMsCiAJCQkgICAmbmV3 X2RlY29kZWRfb3B0aW9uc1tqXSk7CiAJfQogCisgICAgICBpZiAoKGFyZ3NbaV0gJiBFWFBFUklN RU5UQUwpCisJICAmJiB3aGljaF9saWJyYXJ5ID09IFVTRV9MSUJTVERDWFgpCisJZ2VuZXJhdGVf b3B0aW9uIChPUFRfbCwgInN0ZGMrK2V4cCIsIDEsIENMX0RSSVZFUiwKKwkJCSAmbmV3X2RlY29k ZWRfb3B0aW9uc1srK2pdKTsKKwogICAgICAgaWYgKChhcmdzW2ldICYgU0tJUE9QVCkgIT0gMCkK IAktLWo7CiAKZGlmZiAtLWdpdCBhL2djYy9jcC9tYW5nbGUuY2MgYi9nY2MvY3AvbWFuZ2xlLmNj CmluZGV4IGU5NzQyOGU4ZjMwLi5lMzYzZWYzNWI5ZiAxMDA2NDQKLS0tIGEvZ2NjL2NwL21hbmds ZS5jYworKysgYi9nY2MvY3AvbWFuZ2xlLmNjCkBAIC04NTYsNiArODU2LDEzIEBAIHdyaXRlX2Vu Y29kaW5nIChjb25zdCB0cmVlIGRlY2wpCiAJCQkJbWFuZ2xlX3JldHVybl90eXBlX3AgKGRlY2wp LAogCQkJCWQpOwogCisgICAgICAvKiBJZiB0aGlzIGlzIHRoZSBwcmUvcG9zdCBmdW5jdGlvbiBm b3IgYSBndWFyZGVkIGZ1bmN0aW9uLCBhcHBlbmQKKwkgLnByZS9wb3N0LCBsaWtlIHNvbWV0aGlu ZyBmcm9tIGNyZWF0ZV92aXJ0dWFsX2Nsb25lLiAgKi8KKyAgICAgIGlmIChERUNMX0lTX1BSRV9G Tl9QIChkZWNsKSkKKwl3cml0ZV9zdHJpbmcgKCIucHJlIik7CisgICAgICBlbHNlIGlmIChERUNM X0lTX1BPU1RfRk5fUCAoZGVjbCkpCisJd3JpdGVfc3RyaW5nICgiLnBvc3QiKTsKKwogICAgICAg LyogSWYgdGhpcyBpcyBhIGNvcm91dGluZSBoZWxwZXIsIHRoZW4gYXBwZW5kIGFuIGFwcHJvcHJp YXRlIHN0cmluZyB0bwogCSBpZGVudGlmeSB3aGljaC4gICovCiAgICAgICBpZiAodHJlZSByYW1w ID0gREVDTF9SQU1QX0ZOIChkZWNsKSkKZGlmZiAtLWdpdCBhL2djYy9jcC9tb2R1bGUuY2MgYi9n Y2MvY3AvbW9kdWxlLmNjCmluZGV4IDBlOWFmMzE4YmE0Li5hMTc2NDM1NGJhNSAxMDA2NDQKLS0t IGEvZ2NjL2NwL21vZHVsZS5jYworKysgYi9nY2MvY3AvbW9kdWxlLmNjCkBAIC0xMDE4Niw2ICsx MDE4NiwyMCBAQCB0cmVlc19vdXQ6OmZuX3Bhcm1zX2luaXQgKHRyZWUgZm4pCiAJCSAgIGJhc2Vf dGFnIC0gaXgsIGl4LCBwYXJtLCBmbik7CiAgICAgICB0cmVlX25vZGVfdmFscyAocGFybSk7CiAg ICAgfQorCisgIGlmICghc3RyZWFtaW5nX3AgKCkpCisgICAgeworICAgICAgLyogV2UgbXVzdCB3 YWxrIGNvbnRyYWN0IGF0dHJzIHNvIHRoZSBkZXBlbmRlbmN5IGdyYXBoIGlzIGNvbXBsZXRlLiAq LworICAgICAgZm9yICh0cmVlIGNvbnRyYWN0ID0gREVDTF9DT05UUkFDVFMgKGZuKTsKKwkgIGNv bnRyYWN0OworCSAgY29udHJhY3QgPSBDT05UUkFDVF9DSEFJTiAoY29udHJhY3QpKQorCXRyZWVf bm9kZSAoY29udHJhY3QpOworICAgIH0KKworICAvKiBXcml0ZSBhIHJlZmVyZW5jZSB0byBjb250 cmFjdHMgcHJlL3Bvc3QgZnVuY3Rpb25zLCBpZiBhbnksIHRvIGF2b2lkCisgICAgIHJlZ2VuZXJh dGluZyB0aGVtIGluIGltcG9ydGVycy4gICovCisgIHRyZWVfbm9kZSAoREVDTF9QUkVfRk4gKGZu KSk7CisgIHRyZWVfbm9kZSAoREVDTF9QT1NUX0ZOIChmbikpOwogfQogCiAvKiBCdWlsZCBza2Vs ZXRvbiBwYXJtIG5vZGVzLCByZWFkIHRoZWlyIGZsYWdzLCB0eXBlICYgcGFybSBpbmRpY2VzLiAg Ki8KQEAgLTEwMjIwLDYgKzEwMjM0LDExIEBAIHRyZWVzX2luOjpmbl9wYXJtc19pbml0ICh0cmVl IGZuKQogCXJldHVybiAwOwogICAgIH0KIAorICAvKiBSZWxvYWQgcmVmZXJlbmNlcyB0byBjb250 cmFjdCBmdW5jdGlvbnMsIGlmIGFueS4gICovCisgIHRyZWUgcHJlX2ZuID0gdHJlZV9ub2RlICgp OworICB0cmVlIHBvc3RfZm4gPSB0cmVlX25vZGUgKCk7CisgIHNldF9jb250cmFjdF9mdW5jdGlv bnMgKGZuLCBwcmVfZm4sIHBvc3RfZm4pOworCiAgIHJldHVybiBiYXNlX3RhZzsKIH0KIApAQCAt MTA4MDcsNyArMTA4MjYsMTUgQEAgY2hlY2tfbWVyZ2VhYmxlX2RlY2wgKG1lcmdlX2tpbmQgbWss IHRyZWUgZGVjbCwgdHJlZSBvdmwsIG1lcmdlX2tleSBjb25zdCAma2V5KQogCQkgICBNYXRjaGVz IGRlY2xzX21hdGNoIGJlaGF2aW91ci4gICovCiAJCSYmICghREVDTF9JU19VTkRFQ0xBUkVEX0JV SUxUSU4gKG1faW5uZXIpCiAJCSAgICB8fCAhREVDTF9FWFRFUk5fQ19QIChtX2lubmVyKQotCQkg ICAgfHwgREVDTF9FWFRFUk5fQ19QIChkX2lubmVyKSkpCisJCSAgICB8fCBERUNMX0VYVEVSTl9D X1AgKGRfaW5uZXIpKQorCQkvKiBSZWplY3QgaWYgb25lIGlzIGEgZGlmZmVyZW50IG1lbWJlciBv ZiBhCisJCSAgIGd1YXJkZWQvcHJlL3Bvc3QgZm4gc2V0LiAgKi8KKwkJJiYgKCFmbGFnX2NvbnRy YWN0cworCQkgICAgfHwgKERFQ0xfSVNfUFJFX0ZOX1AgKGRfaW5uZXIpCisJCQk9PSBERUNMX0lT X1BSRV9GTl9QIChtX2lubmVyKSkpCisJCSYmICghZmxhZ19jb250cmFjdHMKKwkJICAgIHx8IChE RUNMX0lTX1BPU1RfRk5fUCAoZF9pbm5lcikKKwkJCT09IERFQ0xfSVNfUE9TVF9GTl9QIChtX2lu bmVyKSkpKQogCSAgICAgIHsKIAkJdHJlZSBtX3JlcXMgPSBnZXRfY29uc3RyYWludHMgKG1faW5u ZXIpOwogCQlpZiAobV9yZXFzKQpAQCAtMTQ1NzUsNiArMTQ2MDIsNyBAQCBtb2R1bGVfc3RhdGVf Y29uZmlnOjpnZXRfZGlhbGVjdCAoKQogCQkgICAgICBjeHhfZGlhbGVjdCA8IGN4eDIwICYmIGZs YWdfY29uY2VwdHMgPyAiL2NvbmNlcHRzIiA6ICIiLAogCQkgICAgICBmbGFnX2Nvcm91dGluZXMg PyAiL2Nvcm91dGluZXMiIDogIiIsCiAJCSAgICAgIGZsYWdfbW9kdWxlX2ltcGxpY2l0X2lubGlu ZSA/ICIvaW1wbGljaXQtaW5saW5lIiA6ICIiLAorCQkgICAgICBmbGFnX2NvbnRyYWN0cyA/ICIv Y29udHJhY3RzIiA6ICIiLAogCQkgICAgICBOVUxMKTsKIAogICByZXR1cm4gZGlhbGVjdDsKZGlm ZiAtLWdpdCBhL2djYy9jcC9wYXJzZXIuY2MgYi9nY2MvY3AvcGFyc2VyLmNjCmluZGV4IGM1OTI5 YTZjYzVmLi5hZWM2MjVlMmQ5YyAxMDA2NDQKLS0tIGEvZ2NjL2NwL3BhcnNlci5jYworKysgYi9n Y2MvY3AvcGFyc2VyLmNjCkBAIC00Niw2ICs0Niw3IEBAIGFsb25nIHdpdGggR0NDOyBzZWUgdGhl IGZpbGUgQ09QWUlORzMuICBJZiBub3Qgc2VlCiAjaW5jbHVkZSAiY3AtbmFtZS1oaW50LmgiCiAj aW5jbHVkZSAibWVtbW9kZWwuaCIKICNpbmNsdWRlICJjLWZhbWlseS9rbm93bi1oZWFkZXJzLmgi CisjaW5jbHVkZSAiY29udHJhY3RzLmgiCiAjaW5jbHVkZSAiYml0bWFwLmgiCiAKIAwKQEAgLTIx OTIsMTEgKzIxOTMsMTQgQEAgY3BfcGFyc2VyX2NvbnRleHRfbmV3IChjcF9wYXJzZXJfY29udGV4 dCogbmV4dCkKICAgcGFyc2VyLT51bnBhcnNlZF9xdWV1ZXMtPmxhc3QgKCkubnNkbWlzCiAjZGVm aW5lIHVucGFyc2VkX25vZXhjZXB0cyBcCiAgIHBhcnNlci0+dW5wYXJzZWRfcXVldWVzLT5sYXN0 ICgpLm5vZXhjZXB0cworI2RlZmluZSB1bnBhcnNlZF9jb250cmFjdHMgXAorICBwYXJzZXItPnVu cGFyc2VkX3F1ZXVlcy0+bGFzdCAoKS5jb250cmFjdHMKIAogc3RhdGljIHZvaWQKIHB1c2hfdW5w YXJzZWRfZnVuY3Rpb25fcXVldWVzIChjcF9wYXJzZXIgKnBhcnNlcikKIHsKLSAgY3BfdW5wYXJz ZWRfZnVuY3Rpb25zX2VudHJ5IGUgPSB7IE5VTEwsIG1ha2VfdHJlZV92ZWN0b3IgKCksIE5VTEws IE5VTEwgfTsKKyAgY3BfdW5wYXJzZWRfZnVuY3Rpb25zX2VudHJ5IGUKKyAgICAgID0geyBOVUxM LCBtYWtlX3RyZWVfdmVjdG9yICgpLCBOVUxMLCBOVUxMLCBOVUxMIH07CiAgIHZlY19zYWZlX3B1 c2ggKHBhcnNlci0+dW5wYXJzZWRfcXVldWVzLCBlKTsKIH0KIApAQCAtMjY5NSw2ICsyNjk5LDEw IEBAIHN0YXRpYyB0cmVlIGNwX3BhcnNlcl90cmFuc2FjdGlvbl9jYW5jZWwKIHN0YXRpYyB0cmVl IGNwX3BhcnNlcl95aWVsZF9leHByZXNzaW9uCiAgIChjcF9wYXJzZXIgKik7CiAKKy8qIENvbnRy YWN0cyAqLworCitzdGF0aWMgdm9pZCBjcF9wYXJzZXJfbGF0ZV9jb250cmFjdF9jb25kaXRpb24K KyAgKGNwX3BhcnNlciAqLCB0cmVlLCB0cmVlKTsKIAogZW51bSBwcmFnbWFfY29udGV4dCB7CiAg IHByYWdtYV9leHRlcm5hbCwKQEAgLTI5MDcsNiArMjkxNSw4IEBAIHN0YXRpYyBib29sIGNwX3Bh cnNlcl9hcnJheV9kZXNpZ25hdG9yX3AKICAgKGNwX3BhcnNlciAqKTsKIHN0YXRpYyBib29sIGNw X3BhcnNlcl9pbml0X3N0YXRlbWVudF9wCiAgIChjcF9wYXJzZXIgKik7CitzdGF0aWMgYm9vbCBj cF9wYXJzZXJfc2tpcF91cF90b19jbG9zaW5nX3NxdWFyZV9icmFja2V0CisgIChjcF9wYXJzZXIg Kik7CiBzdGF0aWMgYm9vbCBjcF9wYXJzZXJfc2tpcF90b19jbG9zaW5nX3NxdWFyZV9icmFja2V0 CiAgIChjcF9wYXJzZXIgKik7CiBzdGF0aWMgc2l6ZV90IGNwX3BhcnNlcl9za2lwX2JhbGFuY2Vk X3Rva2VucyAoY3BfcGFyc2VyICosIHNpemVfdCk7CkBAIC0xMjAyNCw2ICsxMjAzNCwxNiBAQCBj cF9wYXJzZXJfaGFuZGxlX3N0YXRlbWVudF9vbXBfYXR0cmlidXRlcyAoY3BfcGFyc2VyICpwYXJz ZXIsIHRyZWUgYXR0cnMpCiAgIHJldHVybiBhdHRyczsKIH0KIAorLyogVHJ1ZSBpZiBhbmQgb25s eSBpZiB0aGUgbmFtZSBpcyBvbmUgb2YgdGhlIGNvbnRyYWN0IHR5cGVzLiAgKi8KKworc3RhdGlj IGJvb2wKK2NvbnRyYWN0X2F0dHJpYnV0ZV9wIChjb25zdF90cmVlIGlkKQoreworICByZXR1cm4g aXNfYXR0cmlidXRlX3AgKCJhc3NlcnQiLCBpZCkKKyAgICB8fCBpc19hdHRyaWJ1dGVfcCAoInBy ZSIsIGlkKQorICAgIHx8IGlzX2F0dHJpYnV0ZV9wICgicG9zdCIsIGlkKTsKK30KKwogLyogSGFu ZGxlIG9tcDo6ZGlyZWN0aXZlIGFuZCBvbXA6OnNlcXVlbmNlIGF0dHJpYnV0ZXMgaW4gKlBBVFRS UwogICAgKGlmIGFueSkgYXQgdGhlIHN0YXJ0IG9yIGFmdGVyIGRlY2xhcmF0aW9uLWlkIG9mIGEg ZGVjbGFyYXRpb24uICAqLwogCkBAIC0xMjE1Nyw3ICsxMjE3NywxMCBAQCBjcF9wYXJzZXJfaGFu ZGxlX2RpcmVjdGl2ZV9vbXBfYXR0cmlidXRlcyAoY3BfcGFyc2VyICpwYXJzZXIsIHRyZWUgKnBh dHRycywKICAgaXMgYSAocG9zc2libHkgbGFiZWxlZCkgaWYgc3RhdGVtZW50IHdoaWNoIGlzIG5v dCBlbmNsb3NlZCBpbiBicmFjZXMKICAgYW5kIGhhcyBhbiBlbHNlIGNsYXVzZS4gIFRoaXMgaXMg dXNlZCB0byBpbXBsZW1lbnQgLVdwYXJlbnRoZXNlcy4KIAotICBDSEFJTiBpcyBhIHZlY3RvciBv ZiBpZi1lbHNlLWlmIGNvbmRpdGlvbnMuICAqLworICBDSEFJTiBpcyBhIHZlY3RvciBvZiBpZi1l bHNlLWlmIGNvbmRpdGlvbnMuCisKKyAgTm90ZSB0aGF0IHRoaXMgdmVyc2lvbiBvZiBwYXJzaW5n IHJlc3RyaWN0cyBhc3NlcnRpb25zIHRvIGJlIGF0dGFjaGVkIHRvCisgIGVtcHR5IHN0YXRlbWVu dHMuICovCiAKIHN0YXRpYyB2b2lkCiBjcF9wYXJzZXJfc3RhdGVtZW50IChjcF9wYXJzZXIqIHBh cnNlciwgdHJlZSBpbl9zdGF0ZW1lbnRfZXhwciwKQEAgLTEyMTk5LDYgKzEyMjIyLDIzIEBAIGNw X3BhcnNlcl9zdGF0ZW1lbnQgKGNwX3BhcnNlciogcGFyc2VyLCB0cmVlIGluX3N0YXRlbWVudF9l eHByLAogCiAgIC8qIFBlZWsgYXQgdGhlIG5leHQgdG9rZW4uICAqLwogICB0b2tlbiA9IGNwX2xl eGVyX3BlZWtfdG9rZW4gKHBhcnNlci0+bGV4ZXIpOworCisgIC8qIElmIHdlIGhhdmUgY29udHJh Y3RzLCBjaGVjayB0aGF0IHRoZXkncmUgdmFsaWQgaW4gdGhpcyBjb250ZXh0LiAgKi8KKyAgaWYg KHN0ZF9hdHRycyAhPSBlcnJvcl9tYXJrX25vZGUpCisgICAgeworICAgICAgaWYgKHRyZWUgcHJl ID0gbG9va3VwX2F0dHJpYnV0ZSAoInByZSIsIHN0ZF9hdHRycykpCisJZXJyb3JfYXQgKEVYUFJf TE9DQVRJT04gKFRSRUVfVkFMVUUgKHByZSkpLAorCQkgICJwcmVjb25kaXRpb25zIGNhbm5vdCBi ZSBzdGF0ZW1lbnRzIik7CisgICAgICBlbHNlIGlmICh0cmVlIHBvc3QgPSBsb29rdXBfYXR0cmli dXRlICgicG9zdCIsIHN0ZF9hdHRycykpCisJZXJyb3JfYXQgKEVYUFJfTE9DQVRJT04gKFRSRUVf VkFMVUUgKHBvc3QpKSwKKwkJICAicG9zdGNvbmRpdGlvbnMgY2Fubm90IGJlIHN0YXRlbWVudHMi KTsKKworICAgIC8qIENoZWNrIHRoYXQgYXNzZXJ0aW9ucyBhcmUgbnVsbCBzdGF0ZW1lbnRzLiAg Ki8KKyAgICBpZiAoY3BfY29udHJhY3RfYXNzZXJ0aW9uX3AgKHN0ZF9hdHRycykpCisgICAgICBp ZiAodG9rZW4tPnR5cGUgIT0gQ1BQX1NFTUlDT0xPTikKKwllcnJvcl9hdCAodG9rZW4tPmxvY2F0 aW9uLCAiYXNzZXJ0aW9ucyBtdXN0IGJlIGZvbGxvd2VkIGJ5ICU8OyU+Iik7CisgICAgfQorCiAg IGJvb2wgb21wX2F0dHJzX2ZvcmJpZGRlbl9wOwogICBvbXBfYXR0cnNfZm9yYmlkZGVuX3AgPSBw YXJzZXItPm9tcF9hdHRyc19mb3JiaWRkZW5fcDsKIApAQCAtMTI1MTQsNiArMTI1NTQsMTUgQEAg Y3BfcGFyc2VyX3N0YXRlbWVudCAoY3BfcGFyc2VyKiBwYXJzZXIsIHRyZWUgaW5fc3RhdGVtZW50 X2V4cHIsCiAJCQkiJTxmYWxsdGhyb3VnaCU+IGF0dHJpYnV0ZSBub3QgZm9sbG93ZWQgYnkgJTw7 JT4iKTsKIAkgIHN0ZF9hdHRycyA9IE5VTExfVFJFRTsKIAl9CisKKyAgICAgIC8qIEhhbmRsZSBb W2Fzc2VydDogLi4uXV07ICAqLworICAgICAgaWYgKGNwX2NvbnRyYWN0X2Fzc2VydGlvbl9wIChz dGRfYXR0cnMpKQorCXsKKwkgIC8qIEFkZCB0aGUgYXNzZXJ0aW9uIGFzIGEgc3RhdGVtZW50IGlu IHRoZSBjdXJyZW50IGJsb2NrLiAgKi8KKwkgIGdjY19hc3NlcnQgKCFzdGF0ZW1lbnQgfHwgc3Rh dGVtZW50ID09IGVycm9yX21hcmtfbm9kZSk7CisJICBlbWl0X2Fzc2VydGlvbiAoc3RkX2F0dHJz KTsKKwkgIHN0ZF9hdHRycyA9IE5VTExfVFJFRTsKKwl9CiAgICAgfQogCiAgIC8qIFNldCB0aGUg bGluZSBudW1iZXIgZm9yIHRoZSBzdGF0ZW1lbnQuICAqLwpAQCAtMTU2OTcsNyArMTU3NDYsMTIg QEAgY3BfcGFyc2VyX2RlY2xfc3BlY2lmaWVyX3NlcSAoY3BfcGFyc2VyKiBwYXJzZXIsCiAJCSAg IGRlY2xhcmVkLiAgKi87CiAJICAgICAgZWxzZQogCQl7Ci0JCSAgaWYgKGRlY2xfc3BlY3MtPnR5 cGUgJiYgQ0xBU1NfVFlQRV9QIChkZWNsX3NwZWNzLT50eXBlKSkKKwkJICBpZiAoZmluZF9jb250 cmFjdCAoYXR0cnMpKQorCQkgICAgeworCQkgICAgICBkaWFnbm9zZV9taXNhcHBsaWVkX2NvbnRy YWN0cyAoYXR0cnMpOworCQkgICAgICBhdHRycyA9IE5VTExfVFJFRTsKKwkJICAgIH0KKwkJICBl bHNlIGlmIChkZWNsX3NwZWNzLT50eXBlICYmIENMQVNTX1RZUEVfUCAoZGVjbF9zcGVjcy0+dHlw ZSkpCiAJCSAgICB7CiAJCSAgICAgIC8qICBUaGlzIGlzIGFuIGF0dHJpYnV0ZSBmb2xsb3dpbmcg YQogCQkJICBjbGFzcy1zcGVjaWZpZXIuICAqLwpAQCAtMjUzOTgsMTEgKzI1NDUyLDExIEBAIGNw X3BhcnNlcl9icmFjZWRfbGlzdCAoY3BfcGFyc2VyKiBwYXJzZXIsIGJvb2wqIG5vbl9jb25zdGFu dF9wKQogICByZXR1cm4gcmVzdWx0OwogfQogCi0vKiBDb25zdW1lIHRva2VucyB1cCB0bywgYW5k IGluY2x1ZGluZywgdGhlIG5leHQgbm9uLW5lc3RlZCBjbG9zaW5nIGBdJy4KKy8qIENvbnN1bWUg dG9rZW5zIHVwIHRvLCBidXQgbm90IGluY2x1ZGluZywgdGhlIG5leHQgbm9uLW5lc3RlZCBjbG9z aW5nIGBdJy4KICAgIFJldHVybnMgdHJ1ZSBpZmYgd2UgZm91bmQgYSBjbG9zaW5nIGBdJy4gICov CiAKIHN0YXRpYyBib29sCi1jcF9wYXJzZXJfc2tpcF90b19jbG9zaW5nX3NxdWFyZV9icmFja2V0 IChjcF9wYXJzZXIgKnBhcnNlcikKK2NwX3BhcnNlcl9za2lwX3VwX3RvX2Nsb3Npbmdfc3F1YXJl X2JyYWNrZXQgKGNwX3BhcnNlciAqcGFyc2VyKQogewogICB1bnNpZ25lZCBzcXVhcmVfZGVwdGgg PSAwOwogCkBAIC0yNTQyNywyMSArMjU0ODEsMzAgQEAgY3BfcGFyc2VyX3NraXBfdG9fY2xvc2lu Z19zcXVhcmVfYnJhY2tldCAoY3BfcGFyc2VyICpwYXJzZXIpCiAKICAgICAgICAgY2FzZSBDUFBf Q0xPU0VfU1FVQVJFOgogCSAgaWYgKCFzcXVhcmVfZGVwdGgtLSkKLQkgICAgewotCSAgICAgIGNw X2xleGVyX2NvbnN1bWVfdG9rZW4gKHBhcnNlci0+bGV4ZXIpOwotCSAgICAgIHJldHVybiB0cnVl OwotCSAgICB9CisJICAgIHJldHVybiB0cnVlOwogCSAgYnJlYWs7CiAKIAlkZWZhdWx0OgogCSAg YnJlYWs7CiAJfQogCi0gICAgICAvKiBDb25zdW1lIHRoZSB0b2tlbi4gICovCisgICAgICAvKiBD b25zdW1lIHRoZSBjdXJyZW50IHRva2VuLCBza2lwcGluZyBpdC4gICovCiAgICAgICBjcF9sZXhl cl9jb25zdW1lX3Rva2VuIChwYXJzZXItPmxleGVyKTsKICAgICB9CiB9CiAKKy8qIENvbnN1bWUg dG9rZW5zIHVwIHRvLCBhbmQgaW5jbHVkaW5nLCB0aGUgbmV4dCBub24tbmVzdGVkIGNsb3Npbmcg YF0nLgorICAgUmV0dXJucyB0cnVlIGlmZiB3ZSBmb3VuZCBhIGNsb3NpbmcgYF0nLiAgKi8KKwor c3RhdGljIGJvb2wKK2NwX3BhcnNlcl9za2lwX3RvX2Nsb3Npbmdfc3F1YXJlX2JyYWNrZXQgKGNw X3BhcnNlciAqcGFyc2VyKQoreworICBib29sIGZvdW5kID0gY3BfcGFyc2VyX3NraXBfdXBfdG9f Y2xvc2luZ19zcXVhcmVfYnJhY2tldCAocGFyc2VyKTsKKyAgaWYgKGZvdW5kKQorICAgIGNwX2xl eGVyX2NvbnN1bWVfdG9rZW4gKHBhcnNlci0+bGV4ZXIpOworICByZXR1cm4gZm91bmQ7Cit9CisK IC8qIFJldHVybiB0cnVlIGlmIHdlIGFyZSBsb29raW5nIGF0IGFuIGFycmF5LWRlc2lnbmF0b3Is IGZhbHNlIG90aGVyd2lzZS4gICovCiAKIHN0YXRpYyBib29sCkBAIC0yNjI4NCw2ICsyNjM0Nyw1 NiBAQCBjcF9wYXJzZXJfY2xhc3Nfc3BlY2lmaWVyIChjcF9wYXJzZXIqIHBhcnNlcikKIAkgIGNw X3BhcnNlcl9sYXRlX3BhcnNpbmdfbnNkbWkgKHBhcnNlciwgZGVjbCk7CiAJfQogICAgICAgdmVj X3NhZmVfdHJ1bmNhdGUgKHVucGFyc2VkX25zZG1pcywgMCk7CisKKyAgICAgIC8qIE5vdyBjb250 cmFjdCBhdHRyaWJ1dGVzLiAgKi8KKyAgICAgIEZPUl9FQUNIX1ZFQ19TQUZFX0VMVCAodW5wYXJz ZWRfY29udHJhY3RzLCBpeCwgZGVjbCkKKwl7CisJICB0cmVlIGN0eCA9IERFQ0xfQ09OVEVYVCAo ZGVjbCk7CisJICBpZiAoY2xhc3NfdHlwZSAhPSBjdHgpCisJICAgIHsKKwkgICAgICBpZiAocHVz aGVkX3Njb3BlKQorCQlwb3Bfc2NvcGUgKHB1c2hlZF9zY29wZSk7CisJICAgICAgY2xhc3NfdHlw ZSA9IGN0eDsKKwkgICAgICBwdXNoZWRfc2NvcGUgPSBwdXNoX3Njb3BlIChjbGFzc190eXBlKTsK KwkgICAgfQorCisJICB0ZW1wX292ZXJyaWRlPHRyZWU+IGNmZChjdXJyZW50X2Z1bmN0aW9uX2Rl Y2wsIGRlY2wpOworCisJICAvKiBNYWtlIHN1cmUgdGhhdCBhbnkgdGVtcGxhdGUgcGFyYW1ldGVy cyBhcmUgaW4gc2NvcGUuICAqLworCSAgbWF5YmVfYmVnaW5fbWVtYmVyX3RlbXBsYXRlX3Byb2Nl c3NpbmcgKGRlY2wpOworCisJICAvKiBNYWtlIHN1cmUgdGhhdCBhbnkgbWVtYmVyLWZ1bmN0aW9u IHBhcmFtZXRlcnMgYXJlIGluIHNjb3BlLgorCSAgICAgVGhpcyBmdW5jdGlvbiBkb2Vzbid0IGV4 cGVjdCBjY3AgdG8gYmUgc2V0LiAgKi8KKwkgIGN1cnJlbnRfY2xhc3NfcHRyID0gY3VycmVudF9j bGFzc19yZWYgPSBOVUxMX1RSRUU7CisJICBpbmplY3RfcGFybV9kZWNscyAoZGVjbCk7CisKKwkg IC8qICd0aGlzJyBpcyBub3QgYWxsb3dlZCBpbiBzdGF0aWMgbWVtYmVyIGZ1bmN0aW9ucy4gICov CisJICB1bnNpZ25lZCBjaGFyIGxvY2FsX3ZhcmlhYmxlc19mb3JiaWRkZW5fcAorCSAgICA9IHBh cnNlci0+bG9jYWxfdmFyaWFibGVzX2ZvcmJpZGRlbl9wOworCSAgaWYgKERFQ0xfVEhJU19TVEFU SUMgKGRlY2wpKQorCSAgICBwYXJzZXItPmxvY2FsX3ZhcmlhYmxlc19mb3JiaWRkZW5fcCB8PSBU SElTX0ZPUkJJRERFTjsKKworCSAgLyogTm93IHdlIGNhbiBwYXJzZSBjb250cmFjdCBjb25kaXRp b25zLiAgKi8KKwkgIGZvciAodHJlZSBhID0gREVDTF9BVFRSSUJVVEVTIChkZWNsKTsgYTsgYSA9 IFRSRUVfQ0hBSU4gKGEpKQorCSAgICB7CisJICAgICAgaWYgKGN4eF9jb250cmFjdF9hdHRyaWJ1 dGVfcCAoYSkpCisJCWNwX3BhcnNlcl9sYXRlX2NvbnRyYWN0X2NvbmRpdGlvbiAocGFyc2VyLCBk ZWNsLCBhKTsKKwkgICAgfQorCisJICAvKiBSZXN0b3JlIHRoZSBzdGF0ZSBvZiBsb2NhbF92YXJp YWJsZXNfZm9yYmlkZGVuX3AuICAqLworCSAgcGFyc2VyLT5sb2NhbF92YXJpYWJsZXNfZm9yYmlk ZGVuX3AgPSBsb2NhbF92YXJpYWJsZXNfZm9yYmlkZGVuX3A7CisKKwkgIC8qIFJlbW92ZSBhbnkg bWVtYmVyLWZ1bmN0aW9uIHBhcmFtZXRlcnMgZnJvbSB0aGUgc3ltYm9sIHRhYmxlLiAgKi8KKwkg IHBvcF9pbmplY3RlZF9wYXJtcyAoKTsKKworCSAgLyogUmVtb3ZlIGFueSB0ZW1wbGF0ZSBwYXJh bWV0ZXJzIGZyb20gdGhlIHN5bWJvbCB0YWJsZS4gICovCisJICBtYXliZV9lbmRfbWVtYmVyX3Rl bXBsYXRlX3Byb2Nlc3NpbmcgKCk7CisKKwkgIC8qIFBlcmZvcm0gYW55IGRlZmVycmVkIGNvbnRy YWN0IG1hdGNoaW5nLiAgKi8KKwkgIG1hdGNoX2RlZmVycmVkX2NvbnRyYWN0cyAoZGVjbCk7CisJ fQorICAgICAgdmVjX3NhZmVfdHJ1bmNhdGUgKHVucGFyc2VkX2NvbnRyYWN0cywgMCk7CisKICAg ICAgIGN1cnJlbnRfY2xhc3NfcHRyID0gc2F2ZV9jY3A7CiAgICAgICBjdXJyZW50X2NsYXNzX3Jl ZiA9IHNhdmVfY2NyOwogICAgICAgaWYgKHB1c2hlZF9zY29wZSkKQEAgLTI2Mzg3LDYgKzI2NTAw LDggQEAgY3BfcGFyc2VyX2NsYXNzX2hlYWQgKGNwX3BhcnNlciogcGFyc2VyLAogCiAgIC8qIFBh cnNlIHRoZSBhdHRyaWJ1dGVzLiAgKi8KICAgYXR0cmlidXRlcyA9IGNwX3BhcnNlcl9hdHRyaWJ1 dGVzX29wdCAocGFyc2VyKTsKKyAgaWYgKGZpbmRfY29udHJhY3QgKGF0dHJpYnV0ZXMpKQorICAg IGRpYWdub3NlX21pc2FwcGxpZWRfY29udHJhY3RzIChhdHRyaWJ1dGVzKTsKIAogICAvKiBJZiB0 aGUgbmV4dCB0b2tlbiBpcyBgOjonLCB0aGF0IGlzIGludmFsaWQgLS0gYnV0IHNvbWV0aW1lcwog ICAgICBwZW9wbGUgZG8gdHJ5IHRvIHdyaXRlOgpAQCAtMjkzMTYsMTAgKzI5NDMxLDM2MSBAQCBj cF9wYXJzZXJfc3RkX2F0dHJpYnV0ZV9saXN0IChjcF9wYXJzZXIgKnBhcnNlciwgdHJlZSBhdHRy X25zKQogICByZXR1cm4gYXR0cmlidXRlczsKIH0KIAorLyogT3B0aW9uYWxseSBwYXJzZSBhIEMr KzIwIGNvbnRyYWN0IHJvbGUuIEEgTlVMTCByZXR1cm4gbWVhbnMgdGhhdCBubworICAgY29udHJh Y3Qgcm9sZSB3YXMgc3BlY2lmaWVkLgorCisgICAgY29udHJhY3Qtcm9sZToKKyAgICAgICUgZGVm YXVsdAorICAgICAgJSBpZGVudGlmaWVyCisKKyAgIElmIHRoZSBpZGVudGlmaWVyIGRvZXMgbm90 IG5hbWUgYSBrbm93biBjb250cmFjdCByb2xlLCBpdCB3aWxsCisgICBiZSBhc3N1bWVkIHRvIGJl IGRlZmF1bHQuIFJldHVybnMgdGhlIGlkZW50aWZpZXIgZm9yIHRoZSByb2xlCisgICB0b2tlbi4g ICovCisKK3N0YXRpYyB0cmVlCitjcF9wYXJzZXJfY29udHJhY3Rfcm9sZSAoY3BfcGFyc2VyICpw YXJzZXIpCit7CisgIGdjY19hc3NlcnQgKGNwX2xleGVyX25leHRfdG9rZW5faXMgKHBhcnNlci0+ bGV4ZXIsIENQUF9NT0QpKTsKKyAgY3BfbGV4ZXJfY29uc3VtZV90b2tlbiAocGFyc2VyLT5sZXhl cik7CisKKyAgY3BfdG9rZW4gKnRva2VuID0gY3BfbGV4ZXJfcGVla190b2tlbiAocGFyc2VyLT5s ZXhlcik7CisgIHRyZWUgcm9sZV9pZCA9IE5VTExfVFJFRTsKKyAgaWYgKHRva2VuLT50eXBlID09 IENQUF9OQU1FKQorICAgIHJvbGVfaWQgPSB0b2tlbi0+dS52YWx1ZTsKKyAgZWxzZSBpZiAodG9r ZW4tPnR5cGUgPT0gQ1BQX0tFWVdPUkQgJiYgdG9rZW4tPmtleXdvcmQgPT0gUklEX0RFRkFVTFQp CisgICAgcm9sZV9pZCA9IGdldF9pZGVudGlmaWVyICgiZGVmYXVsdCIpOworICBlbHNlCisgICAg eworICAgICAgZXJyb3JfYXQgKHRva2VuLT5sb2NhdGlvbiwgImV4cGVjdGVkIGNvbnRyYWN0LXJv bGUiKTsKKyAgICAgIHJldHVybiBlcnJvcl9tYXJrX25vZGU7CisgICAgfQorICBjcF9sZXhlcl9j b25zdW1lX3Rva2VuIChwYXJzZXItPmxleGVyKTsKKworICAvKiBGSVhNRTogV2FybiBhYm91dCBp bnZhbGlkL3Vua25vd24gcm9sZXM/ICAqLworICByZXR1cm4gcm9sZV9pZDsKK30KKworLyogUGFy c2UgYW4gb3B0aW9uYWwgY29udHJhY3QgbW9kZS4KKworICAgICBjb250cmFjdC1tb2RlOgorCWNv bnRyYWN0LXNlbWFudGljCisJW2NvbnRyYWN0LWxldmVsXSBbY29udHJhY3Qtcm9sZV0KKworICAg ICBjb250cmFjdC1zZW1hbnRpYzoKKyAgICAgICBjaGVja19uZXZlcl9jb250aW51ZQorICAgICAg IGNoZWNrX21heWJlX2NvbnRpbnVlCisgICAgICAgY2hlY2tfYWx3YXlzX2NvbnRpbnVlCisKKyAg ICAgY29udHJhY3QtbGV2ZWw6CisgICAgICAgZGVmYXVsdAorICAgICAgIGF1ZGl0CisgICAgICAg YXhpb20KKworICAgICBjb250cmFjdC1yb2xlOgorICAgICAgIGRlZmF1bHQKKyAgICAgICBpZGVu dGlmaWVyCisKKyAgIFRoaXMgZ3JhbW1hciBpcyB0YWtlbiBmcm9tIFAxMzMyUjAuIER1cmluZyBw YXJzaW5nLCB0aGlzIHNldHMgb3B0aW9ucworICAgb24gdGhlIE1PREUgb2JqZWN0IHRvIGRldGVy bWluZSB0aGUgY29uZmlndXJhdGlvbiBvZiB0aGUgY29udHJhY3QuCisKKyAgIFJldHVybnMgYSB0 cmVlIGNvbnRhaW5pbmcgdGhlIGlkZW50aWZpZXJzIHVzZWQgaW4gdGhlIGNvbmZpZ3VyYXRpb24u CisgICBUaGlzIGlzIGVpdGhlciBhbiBJREVOVElGSUVSIHdpdGggdGhlIGxpdGVyYWwgc2VtYW50 aWMgb3IgYSBUUkVFX0xJU1QKKyAgIHdob3NlIFRSRUVfVkFMVUUgaXMgdGhlIGNvbnRyYWN0LWxl dmVsIGFuZCB3aG9zZSBUUkVFX1BVUlBPU0UgaXMgdGhlCisgICBjb250cmFjdC1yb2xlLCBpZiBh bnkuIE5VTExfVFJFRSBpcyByZXR1cm5lZCBpZiBubyBpbmZvcm1hdGlvbiBpcworICAgZ2l2ZW4g KGkuZS4sIGFsbCBkZWZhdWx0cyBzZWxlY3RlZCkuICAqLworCitzdGF0aWMgdHJlZQorY3BfcGFy c2VyX2NvbnRyYWN0X21vZGVfb3B0IChjcF9wYXJzZXIgKnBhcnNlciwKKwkJCSAgICAgYm9vbCBw b3N0Y29uZGl0aW9uX3ApCit7CisgIC8qIFRoZSBtb2RlIGlzIGVtcHR5OyB0aGUgbGV2ZWwgYW5k IHJvbGUgYXJlIGRlZmF1bHQuICAqLworICBpZiAoY3BfbGV4ZXJfbmV4dF90b2tlbl9pcyAocGFy c2VyLT5sZXhlciwgQ1BQX0NPTE9OKSkKKyAgICByZXR1cm4gTlVMTF9UUkVFOworCisgIC8qIFRo ZXJlIGlzIG9ubHkgYSByb2xlOyB0aGUgbGV2ZWwgaXMgZGVmYXVsdC4gICovCisgIGlmIChjcF9s ZXhlcl9uZXh0X3Rva2VuX2lzIChwYXJzZXItPmxleGVyLCBDUFBfTU9EKSkKKyAgICB7CisgICAg ICB0cmVlIHJvbGVfaWQgPSBjcF9wYXJzZXJfY29udHJhY3Rfcm9sZSAocGFyc2VyKTsKKyAgICAg IHJldHVybiBidWlsZF90cmVlX2xpc3QgKHJvbGVfaWQsIGdldF9pZGVudGlmaWVyICgiZGVmYXVs dCIpKTsKKyAgICB9CisKKyAgLyogT3RoZXJ3aXNlLCBtYXRjaCBzZW1hbnRpYyBvciBsZXZlbC4g ICovCisgIGNwX3Rva2VuICp0b2tlbiA9IGNwX2xleGVyX3BlZWtfdG9rZW4gKHBhcnNlci0+bGV4 ZXIpOworICBjb250cmFjdF9sZXZlbCBsZXZlbCA9IENPTlRSQUNUX0lOVkFMSUQ7CisgIGNvbnRy YWN0X3NlbWFudGljIHNlbWFudGljID0gQ0NTX0lOVkFMSUQ7CisgIHRyZWUgY29uZmlnX2lkOwor ICBpZiAodG9rZW4tPnR5cGUgPT0gQ1BQX05BTUUpCisgICAgeworICAgICAgY29uZmlnX2lkID0g dG9rZW4tPnUudmFsdWU7CisKKyAgICAgIC8qIEVpdGhlciBhIG5hbWVkIGxldmVsLCBhIGNvbmNy ZXRlIHNlbWFudGljLCBvciBhbiBpZGVudGlmaWVyCisJIGZvciBhIHBvc3Rjb25kaXRpb24uICAq LworICAgICAgY29uc3QgY2hhciAqaWRlbnQgPSBJREVOVElGSUVSX1BPSU5URVIgKHRva2VuLT51 LnZhbHVlKTsKKyAgICAgIGxldmVsID0gbWFwX2NvbnRyYWN0X2xldmVsIChpZGVudCk7CisgICAg ICBzZW1hbnRpYyA9IG1hcF9jb250cmFjdF9zZW1hbnRpYyAoaWRlbnQpOworCisgICAgICAvKiBU aGUgaWRlbnRpZmllciBpcyB0aGUgcmV0dXJuIHZhbHVlIGZvciBhIHBvc3Rjb25kaXRpb24uICAq LworICAgICAgaWYgKGxldmVsID09IENPTlRSQUNUX0lOVkFMSUQgJiYgc2VtYW50aWMgPT0gQ0NT X0lOVkFMSUQKKwkgICYmIHBvc3Rjb25kaXRpb25fcCkKKwlyZXR1cm4gTlVMTF9UUkVFOworICAg IH0KKyAgZWxzZSBpZiAodG9rZW4tPnR5cGUgPT0gQ1BQX0tFWVdPUkQgJiYgdG9rZW4tPmtleXdv cmQgPT0gUklEX0RFRkFVTFQpCisgICAgeworICAgICAgY29uZmlnX2lkID0gZ2V0X2lkZW50aWZp ZXIgKCJkZWZhdWx0Iik7CisgICAgICBsZXZlbCA9IENPTlRSQUNUX0RFRkFVTFQ7CisgICAgfQor ICBlbHNlCisgICAgeworICAgICAgLyogV2UgZ290IHNvbWUgb3RoZXIgdG9rZW4gb3RoZXIgdGhh biBhICc6Jy4gICovCisgICAgICBlcnJvcl9hdCAodG9rZW4tPmxvY2F0aW9uLCAiZXhwZWN0ZWQg Y29udHJhY3Qgc2VtYW50aWMgb3IgbGV2ZWwiKTsKKyAgICAgIHJldHVybiBOVUxMX1RSRUU7Cisg ICAgfQorCisgIC8qIENvbnN1bWUgdGhlIGxpdGVyYWwgc2VtYW50aWMgb3IgbGV2ZWwgdG9rZW4u ICAqLworICBjcF9sZXhlcl9jb25zdW1lX3Rva2VuIChwYXJzZXItPmxleGVyKTsKKworICBpZiAo c2VtYW50aWMgPT0gQ0NTX0lOVkFMSUQgJiYgbGV2ZWwgPT0gQ09OVFJBQ1RfSU5WQUxJRCkKKyAg ICB7CisgICAgICBlcnJvcl9hdCAodG9rZW4tPmxvY2F0aW9uLAorCQkiZXhwZWN0ZWQgY29udHJh Y3QgbGV2ZWw6ICIKKwkJIiU8ZGVmYXVsdCU+LCAlPGF1ZGl0JT4sIG9yICU8YXhpb20lPiIpOwor ICAgICAgcmV0dXJuIE5VTExfVFJFRTsKKyAgICB9CisKKyAgLyogV2UgbWF0Y2hlZCBhbiBleHBs aWNpdCBzZW1hbnRpYy4gKi8KKyAgaWYgKHNlbWFudGljICE9IENDU19JTlZBTElEKQorICAgIHsK KyAgICAgIGlmIChjcF9sZXhlcl9uZXh0X3Rva2VuX2lzIChwYXJzZXItPmxleGVyLCBDUFBfTU9E KSkKKwl7CisJICBlcnJvciAoImludmFsaWQgdXNlIG9mIGNvbnRyYWN0IHJvbGUgZm9yIGV4cGxp Y2l0IHNlbWFudGljIik7CisJICBjcF9sZXhlcl9jb25zdW1lX3Rva2VuIChwYXJzZXItPmxleGVy KTsKKwkgIGNwX2xleGVyX2NvbnN1bWVfdG9rZW4gKHBhcnNlci0+bGV4ZXIpOworCX0KKyAgICAg IHJldHVybiBjb25maWdfaWQ7CisgICAgfQorCisgIC8qIFdlIG1hdGNoZWQgYSBsZXZlbCwgdGhl cmUgbWF5IGJlIGEgcm9sZTsgb3RoZXJ3aXNlIHRoaXMgaXMgZGVmYXVsdC4gICovCisgIGlmIChj cF9sZXhlcl9uZXh0X3Rva2VuX2lzIChwYXJzZXItPmxleGVyLCBDUFBfTU9EKSkKKyAgICB7Cisg ICAgICB0cmVlIHJvbGVfaWQgPSBjcF9wYXJzZXJfY29udHJhY3Rfcm9sZSAocGFyc2VyKTsKKyAg ICAgIHJldHVybiBidWlsZF90cmVlX2xpc3QgKHJvbGVfaWQsIGNvbmZpZ19pZCk7CisgICAgfQor CisgIHJldHVybiBidWlsZF90cmVlX2xpc3QgKE5VTExfVFJFRSwgY29uZmlnX2lkKTsKK30KKwor c3RhdGljIHRyZWUKK2ZpbmRfZXJyb3IgKHRyZWUgKnRwLCBpbnQgKiwgdm9pZCAqKQoreworICBp ZiAoKnRwID09IGVycm9yX21hcmtfbm9kZSkKKyAgICByZXR1cm4gKnRwOworICByZXR1cm4gTlVM TF9UUkVFOworfQorCitzdGF0aWMgYm9vbAorY29udGFpbnNfZXJyb3JfcCAodHJlZSB0KQorewor ICByZXR1cm4gd2Fsa190cmVlICgmdCwgZmluZF9lcnJvciwgTlVMTCwgTlVMTCk7Cit9CisKKy8q IFBhcnNlIGEgc3RhbmRhcmQgQysrMjAgY29udHJhY3QgYXR0cmlidXRlIHNwZWNpZmllci4KKwor ICBjb250cmFjdC1hdHRyaWJ1dGUtc3BlY2lmaWVyOgorICAgIFsgWyBhc3NlcnQgY29udHJhY3Qt bGV2ZWwgW29wdF0gOiBjb25kaXRpb25hbC1leHByZXNzaW9uIF0gXQorICAgIFsgWyBwcmUgY29u dHJhY3QtbGV2ZWwgW29wdF0gOiBjb25kaXRpb25hbC1leHByZXNzaW9uIF0gXQorICAgIFsgWyBw b3N0IGNvbnRyYWN0LWxldmVsIFtvcHRdIGlkZW50aWZpZXIgW29wdF0gOiBjb25kaXRpb25hbC1l eHByZXNzaW9uIF0gXQorCisgICBGb3IgZnJlZSBmdW5jdGlvbnMsIHdlIGNhbm5vdCBkZXRlcm1p bmUgdGhlIHR5cGUgb2YgdGhlIHBvc3Rjb25kaXRpb24KKyAgIGlkZW50aWZpZXIgYmVjYXVzZSB0 aGUgd2UgaGF2ZW4ndCBjYWxsZWQgZ3Jva2RlY2xhcmF0b3IgeWV0LiBJbiB0aG9zZQorICAgY2Fz ZXMgd2UgcGFyc2UgdGhlIHBvc3Rjb25kaXRpb24gYXMgaWYgdGhlIGlkZW50aWZpZXIgd2FzIGRl Y2xhcmVkIGFzCisgICAnYXV0byA8aWRlbnRpZmllcj4nLiBXZSB0aGVuIGluc3RhbnRpYXRlIHRo ZSBwb3N0Y29uZGl0aW9uIG9uY2UgdGhlCisgICByZXR1cm4gdHlwZSBpcyBrbm93bi4KKworICAg Rm9yIG1lbWJlciBmdW5jdGlvbnMsIGNvbnRyYWN0cyBhcmUgaW4gdGhlIGNvbXBsZXRlLWNsYXNz IGNvbnRleHQsIHNvIHRoZQorICAgcGFyc2UgaXMgZGVmZXJyZWQuIFdlIGFsc28gaGF2ZSB0aGUg cmV0dXJuIHR5cGUgYXZhaWFsYWJsZSAodW5sZXNzIGl0J3MKKyAgIGRlZHVjZWQpLCBzbyB3ZSBk b24ndCBuZWVkIHRvIHBhcnNlIHRoZSBwb3N0Y29uZGl0aW9uIGluIHRlcm1zIG9mIGEKKyAgIHBs YWNlaG9sZGVyLiAgKi8KKworc3RhdGljIHRyZWUKK2NwX3BhcnNlcl9jb250cmFjdF9hdHRyaWJ1 dGVfc3BlYyAoY3BfcGFyc2VyICpwYXJzZXIsIHRyZWUgYXR0cmlidXRlKQoreworICBnY2NfYXNz ZXJ0IChjb250cmFjdF9hdHRyaWJ1dGVfcCAoYXR0cmlidXRlKSk7CisgIGNwX3Rva2VuICp0b2tl biA9IGNwX2xleGVyX2NvbnN1bWVfdG9rZW4gKHBhcnNlci0+bGV4ZXIpOworICBsb2NhdGlvbl90 IGxvYyA9IHRva2VuLT5sb2NhdGlvbjsKKworICBib29sIGFzc2VydGlvbl9wID0gaXNfYXR0cmli dXRlX3AgKCJhc3NlcnQiLCBhdHRyaWJ1dGUpOworICBib29sIHBvc3Rjb25kaXRpb25fcCA9IGlz X2F0dHJpYnV0ZV9wICgicG9zdCIsIGF0dHJpYnV0ZSk7CisKKyAgLyogUGFyc2UgdGhlIG9wdGlv bmFsIG1vZGUuICAqLworICB0cmVlIG1vZGUgPSBjcF9wYXJzZXJfY29udHJhY3RfbW9kZV9vcHQg KHBhcnNlciwgcG9zdGNvbmRpdGlvbl9wKTsKKworICAvKiBDaGVjayBmb3IgcG9zdGNvbmRpdGlv biBpZGVudGlmaWVycy4gICovCisgIGNwX2V4cHIgaWRlbnRpZmllcjsKKyAgaWYgKHBvc3Rjb25k aXRpb25fcCAmJiBjcF9sZXhlcl9uZXh0X3Rva2VuX2lzIChwYXJzZXItPmxleGVyLCBDUFBfTkFN RSkpCisgICAgaWRlbnRpZmllciA9IGNwX3BhcnNlcl9pZGVudGlmaWVyIChwYXJzZXIpOworICBp ZiAoaWRlbnRpZmllciA9PSBlcnJvcl9tYXJrX25vZGUpCisgICAgcmV0dXJuIGVycm9yX21hcmtf bm9kZTsKKworICBjcF9wYXJzZXJfcmVxdWlyZSAocGFyc2VyLCBDUFBfQ09MT04sIFJUX0NPTE9O KTsKKworICAvKiBEZWZlciB0aGUgcGFyc2luZyBvZiBwcmUvcG9zdCBjb250cmFjdHMgaW5zaWRl IGNsYXNzIGRlZmluaXRpb25zLiAgKi8KKyAgdHJlZSBjb250cmFjdDsKKyAgaWYgKCFhc3NlcnRp b25fcCAmJgorICAgICAgY3VycmVudF9jbGFzc190eXBlICYmCisgICAgICBUWVBFX0JFSU5HX0RF RklORUQgKGN1cnJlbnRfY2xhc3NfdHlwZSkpCisgICAgeworICAgICAgLyogU2tpcCB1bnRpbCB3 ZSByZWFjaCBhbiB1bmVuY2xvc2UgJ10nLiBJZiB3ZSByYW4gaW50byBhbiB1bm5lc3RlZCAnXScK KwkgdGhhdCBkb2Vzbid0IGNsb3NlIHRoZSBhdHRyaWJ1dGUsIHJldHVybiBhbiBlcnJvciBhbmQg bGV0IHRoZSBhdHRyaWJ1dGUKKwkgaGFuZGxpbmcgY29kZSBlbWl0IGFuIGVycm9yIGZvciBtaXNz aW5nICddXScuICAqLworICAgICAgY3BfdG9rZW4gKmZpcnN0ID0gY3BfbGV4ZXJfcGVla190b2tl biAocGFyc2VyLT5sZXhlcik7CisgICAgICBjcF9wYXJzZXJfc2tpcF90b19jbG9zaW5nX3BhcmVu dGhlc2lzXzEgKHBhcnNlciwKKwkJCQkJICAgICAgIC8qcmVjb3ZlcmluZz0qL2ZhbHNlLAorCQkJ CQkgICAgICAgQ1BQX0NMT1NFX1NRVUFSRSwKKwkJCQkJICAgICAgIC8qY29uc3VtZV9wYXJlbj0q L2ZhbHNlKTsKKyAgICAgIGlmIChjcF9sZXhlcl9wZWVrX3Rva2VuIChwYXJzZXItPmxleGVyKS0+ dHlwZSAhPSBDUFBfQ0xPU0VfU1FVQVJFCisJICB8fCBjcF9sZXhlcl9wZWVrX250aF90b2tlbiAo cGFyc2VyLT5sZXhlciwgMiktPnR5cGUgIT0gQ1BQX0NMT1NFX1NRVUFSRSkKKwlyZXR1cm4gZXJy b3JfbWFya19ub2RlOworICAgICAgY3BfdG9rZW4gKmxhc3QgPSBjcF9sZXhlcl9wZWVrX3Rva2Vu IChwYXJzZXItPmxleGVyKTsKKworICAgICAgLyogQnVpbGQgYSBkZWZlcnJlZC1wYXJzZSBub2Rl LiAgKi8KKyAgICAgIHRyZWUgY29uZGl0aW9uID0gbWFrZV9ub2RlIChERUZFUlJFRF9QQVJTRSk7 CisgICAgICBERUZQQVJTRV9UT0tFTlMgKGNvbmRpdGlvbikgPSBjcF90b2tlbl9jYWNoZV9uZXcg KGZpcnN0LCBsYXN0KTsKKyAgICAgIERFRlBBUlNFX0lOU1RBTlRJQVRJT05TIChjb25kaXRpb24p ID0gTlVMTDsKKworICAgICAgLyogQW5kIGl0cyBjb3JyZXNwb25kaW5nIGNvbnRyYWN0LiAgKi8K KyAgICAgIGNvbnRyYWN0ID0gZ3Jva19jb250cmFjdCAoYXR0cmlidXRlLCBtb2RlLCBpZGVudGlm aWVyLCBjb25kaXRpb24sIGxvYyk7CisgICAgfQorICBlbHNlCisgICAgeworICAgICAgLyogRW5h YmxlIGxvY2F0aW9uIHdyYXBwZXJzIHdoZW4gcGFyc2luZyBjb250cmFjdHMuICAqLworICAgICAg YXV0byBzdXBwcmVzc2lvbiA9IG1ha2VfdGVtcF9vdmVycmlkZSAoc3VwcHJlc3NfbG9jYXRpb25f d3JhcHBlcnMsIDApOworCisgICAgICAvKiBCdWlsZCBhIGZha2UgdmFyaWFibGUgZm9yIHRoZSBy ZXN1bHQgaWRlbnRpZmllci4gICovCisgICAgICB0cmVlIHJlc3VsdCA9IE5VTExfVFJFRTsKKyAg ICAgIGlmIChpZGVudGlmaWVyKQorCXsKKwkgIGJlZ2luX3Njb3BlIChza19ibG9jaywgTlVMTF9U UkVFKTsKKwkgIHJlc3VsdCA9IG1ha2VfcG9zdGNvbmRpdGlvbl92YXJpYWJsZSAoaWRlbnRpZmll cik7CisJICArK3Byb2Nlc3NpbmdfdGVtcGxhdGVfZGVjbDsKKwl9CisKKyAgICAgIC8qIFBhcnNl IHRoZSBjb25kaXRpb24sIGVuc3VyaW5nIHRoYXQgcGFyYW1ldGVycyBvciB0aGUgcmV0dXJuIHZh cmlhYmxlCisJIGFyZW4ndCBmbGFnZ2VkIGZvciB1c2Ugb3V0c2lkZSB0aGUgYm9keSBvZiBhIGZ1 bmN0aW9uLiAgKi8KKyAgICAgICsrcHJvY2Vzc2luZ19jb250cmFjdF9jb25kaXRpb247CisgICAg ICBjcF9leHByIGNvbmRpdGlvbiA9IGNwX3BhcnNlcl9jb25kaXRpb25hbF9leHByZXNzaW9uIChw YXJzZXIpOworICAgICAgLS1wcm9jZXNzaW5nX2NvbnRyYWN0X2NvbmRpdGlvbjsKKworICAgICAg LyogVHJ5IHRvIHJlY292ZXIgZnJvbSBlcnJvcnMgYnkgc2Nhbm5pbmcgdXAgdG8gdGhlIGVuZCBv ZiB0aGUKKwkgYXR0cmlidXRlLiAgU29tZXRpbWVzIHdlIGdldCBwYXJ0aWFsbHkgcGFyc2VkIGV4 cHJlc3Npb25zLCBzbworCSB3ZSBuZWVkIHRvIHNlYXJjaCB0aGUgY29uZGl0aW9uIGZvciBlcnJv cnMuICAqLworICAgICAgaWYgKGNvbnRhaW5zX2Vycm9yX3AgKGNvbmRpdGlvbikpCisJY3BfcGFy c2VyX3NraXBfdXBfdG9fY2xvc2luZ19zcXVhcmVfYnJhY2tldCAocGFyc2VyKTsKKworICAgICAg LyogQnVpbGQgdGhlIGNvbnRyYWN0LiAgKi8KKyAgICAgIGNvbnRyYWN0ID0gZ3Jva19jb250cmFj dCAoYXR0cmlidXRlLCBtb2RlLCByZXN1bHQsIGNvbmRpdGlvbiwgbG9jKTsKKworICAgICAgLyog TGVhdmUgb3VyIHRlbXBvcmFyeSBzY29wZSBmb3IgdGhlIHBvc3Rjb25kaXRpb24gcmVzdWx0LiAg Ki8KKyAgICAgIGlmIChyZXN1bHQpCisJeworCSAgLS1wcm9jZXNzaW5nX3RlbXBsYXRlX2RlY2w7 CisJICBwb3BfYmluZGluZ3NfYW5kX2xlYXZlX3Njb3BlICgpOworCX0KKyAgICB9CisKKyAgaWYg KCFmbGFnX2NvbnRyYWN0cykKKyAgICB7CisgICAgICBlcnJvcl9hdCAobG9jLCAiY29udHJhY3Rz IGFyZSBvbmx5IGF2YWlsYWJsZSB3aXRoICU8LWZjb250cmFjdHMlPiIpOworICAgICAgcmV0dXJu IGVycm9yX21hcmtfbm9kZTsKKyAgICB9CisKKyAgcmV0dXJuIGZpbmlzaF9jb250cmFjdF9hdHRy aWJ1dGUgKGF0dHJpYnV0ZSwgY29udHJhY3QpOworfQorCisvKiBQYXJzZSBhIGNvbnRyYWN0IGNv bmRpdGlvbiBmb3IgYSBkZWZlcnJlZCBjb250cmFjdC4gICovCisKK3ZvaWQgY3BfcGFyc2VyX2xh dGVfY29udHJhY3RfY29uZGl0aW9uIChjcF9wYXJzZXIgKnBhcnNlciwKKwkJCQkJdHJlZSBmbiwK KwkJCQkJdHJlZSBhdHRyaWJ1dGUpCit7CisgIHRyZWUgY29udHJhY3QgPSBUUkVFX1ZBTFVFIChU UkVFX1ZBTFVFIChhdHRyaWJ1dGUpKTsKKworICAvKiBNYWtlIHN1cmUgd2UndmUgZ290dGVuIHNv bWV0aGluZyB0aGF0IGhhc24ndCBiZWVuIHBhcnNlZCB5ZXQgb3IgdGhhdAorICAgICB3ZSdyZSBu b3QgcGFyc2luZyBhbiBpbnZhbGlkIGNvbnRyYWN0LiAgKi8KKyAgdHJlZSBjb25kaXRpb24gPSBD T05UUkFDVF9DT05ESVRJT04gKGNvbnRyYWN0KTsKKyAgaWYgKFRSRUVfQ09ERSAoY29uZGl0aW9u KSAhPSBERUZFUlJFRF9QQVJTRSkKKyAgICByZXR1cm47CisKKyAgdHJlZSBpZGVudGlmaWVyID0g TlVMTF9UUkVFOworICBpZiAoVFJFRV9DT0RFIChjb250cmFjdCkgPT0gUE9TVENPTkRJVElPTl9T VE1UKQorICAgIGlkZW50aWZpZXIgPSBQT1NUQ09ORElUSU9OX0lERU5USUZJRVIgKGNvbnRyYWN0 KTsKKworICAvKiBCdWlsZCBhIGZha2UgdmFyaWFibGUgZm9yIHRoZSByZXN1bHQgaWRlbnRpZmll ci4gICovCisgIHRyZWUgcmVzdWx0ID0gTlVMTF9UUkVFOworICBpZiAoaWRlbnRpZmllcikKKyAg ICB7CisgICAgICAvKiBUT0RPOiBDYW4gd2UgZ3VhcmFudGVlIHRoYXQgdGhlIGlkZW50aWZpZXIg aGFzIGEgbG9jYXRpb24/ICovCisgICAgICBsb2NhdGlvbl90IGxvYyA9IGNwX2V4cHJfbG9jYXRp b24gKGNvbnRyYWN0KTsKKyAgICAgIHRyZWUgdHlwZSA9IFRSRUVfVFlQRSAoVFJFRV9UWVBFIChm bikpOworICAgICAgaWYgKCFjaGVja19wb3N0Y29uZGl0aW9uX3Jlc3VsdCAoZm4sIHR5cGUsIGxv YykpCisJeworCSAgaW52YWxpZGF0ZV9jb250cmFjdCAoY29udHJhY3QpOworCSAgcmV0dXJuOwor CX0KKworICAgICAgYmVnaW5fc2NvcGUgKHNrX2Jsb2NrLCBOVUxMX1RSRUUpOworICAgICAgcmVz dWx0ID0gbWFrZV9wb3N0Y29uZGl0aW9uX3ZhcmlhYmxlIChpZGVudGlmaWVyLCB0eXBlKTsKKyAg ICAgICsrcHJvY2Vzc2luZ190ZW1wbGF0ZV9kZWNsOworICAgIH0KKworICAvKiAndGhpcycgaXMg bm90IGFsbG93ZWQgaW4gcHJlY29uZGl0aW9ucyBvZiBjb25zdHJ1Y3RvcnMgb3IgaW4gcG9zdGNv bmRpdGlvbnMKKyAgICAgb2YgZGVzdHJ1Y3RvcnMuICBOb3RlIHRoYXQgdGhlIHByZXZpb3VzIHZh bHVlIG9mIHRoaXMgdmFyaWFibGUgaXMKKyAgICAgZXN0YWJsaXNoZWQgYnkgdGhlIGNhbGxpbmcg ZnVuY3Rpb24sIHNvIHdlIG5lZWQgdG8gc2F2ZSBpdCBoZXJlLiAgKi8KKyAgdHJlZSBzYXZlZF9j Y3IgPSBjdXJyZW50X2NsYXNzX3JlZjsKKyAgdHJlZSBzYXZlZF9jY3AgPSBjdXJyZW50X2NsYXNz X3B0cjsKKyAgaWYgKChERUNMX0NPTlNUUlVDVE9SX1AgKGZuKSAmJiBQUkVDT05ESVRJT05fUCAo Y29udHJhY3QpKSB8fAorICAgICAgIChERUNMX0RFU1RSVUNUT1JfUCAoZm4pICYmIFBPU1RDT05E SVRJT05fUCAoY29udHJhY3QpKSkKKyAgICB7CisgICAgICBjdXJyZW50X2NsYXNzX3JlZiA9IGN1 cnJlbnRfY2xhc3NfcHRyID0gTlVMTF9UUkVFOworICAgICAgcGFyc2VyLT5sb2NhbF92YXJpYWJs ZXNfZm9yYmlkZGVuX3AgfD0gVEhJU19GT1JCSURERU47CisgICAgfQorCisgIHB1c2hfdW5wYXJz ZWRfZnVuY3Rpb25fcXVldWVzIChwYXJzZXIpOworCisgIC8qIFB1c2ggdGhlIHNhdmVkIHRva2Vu cyBvbnRvIHRoZSBwYXJzZXIncyBsZXhlciBzdGFjay4gICovCisgIGNwX3Rva2VuX2NhY2hlICp0 b2tlbnMgPSBERUZQQVJTRV9UT0tFTlMgKGNvbmRpdGlvbik7CisgIGNwX3BhcnNlcl9wdXNoX2xl eGVyX2Zvcl90b2tlbnMgKHBhcnNlciwgdG9rZW5zKTsKKworICAvKiBQYXJzZSB0aGUgY29uZGl0 aW9uLCBlbnN1cmluZyB0aGF0IHBhcmFtZXRlcnMgb3IgdGhlIHJldHVybiB2YXJpYWJsZQorICAg ICBhcmVuJ3QgZmxhZ2dlZCBmb3IgdXNlIG91dHNpZGUgdGhlIGJvZHkgb2YgYSBmdW5jdGlvbi4g ICovCisgICsrcHJvY2Vzc2luZ19jb250cmFjdF9jb25kaXRpb247CisgIGNvbmRpdGlvbiA9IGNw X3BhcnNlcl9jb25kaXRpb25hbF9leHByZXNzaW9uIChwYXJzZXIpOworICAtLXByb2Nlc3Npbmdf Y29udHJhY3RfY29uZGl0aW9uOworCisgIC8qIFJldmVydCB0byB0aGUgbWFpbiBsZXhlci4gICov CisgIGNwX3BhcnNlcl9wb3BfbGV4ZXIgKHBhcnNlcik7CisKKyAgLyogUmVzdG9yZSB0aGUgcXVl dWUuICAqLworICBwb3BfdW5wYXJzZWRfZnVuY3Rpb25fcXVldWVzIChwYXJzZXIpOworCisgIGN1 cnJlbnRfY2xhc3NfcmVmID0gc2F2ZWRfY2NyOworICBjdXJyZW50X2NsYXNzX3B0ciA9IHNhdmVk X2NjcDsKKworICAvKiBDb21taXQgdG8gY2hhbmdlcy4gICovCisgIHVwZGF0ZV9sYXRlX2NvbnRy YWN0IChjb250cmFjdCwgcmVzdWx0LCBjb25kaXRpb24pOworCisgIC8qIExlYXZlIG91ciB0ZW1w b3Jhcnkgc2NvcGUgZm9yIHRoZSBwb3N0Y29uZGl0aW9uIHJlc3VsdC4gICovCisgIGlmIChyZXN1 bHQpCisgICAgeworICAgICAgLS1wcm9jZXNzaW5nX3RlbXBsYXRlX2RlY2w7CisgICAgICBwb3Bf YmluZGluZ3NfYW5kX2xlYXZlX3Njb3BlICgpOworICAgIH0KK30KKwogLyogUGFyc2UgYSBzdGFu ZGFyZCBDKystMTEgYXR0cmlidXRlIHNwZWNpZmllci4KIAogICAgYXR0cmlidXRlLXNwZWNpZmll cjoKICAgICAgWyBbIGF0dHJpYnV0ZS11c2luZy1wcmVmaXggW29wdF0gYXR0cmlidXRlLWxpc3Qg XSBdCisgICAgIGNvbnRyYWN0LWF0dHJpYnV0ZS1zcGVjaWZpZXIKICAgICAgYWxpZ25tZW50LXNw ZWNpZmllcgogCiAgICBhdHRyaWJ1dGUtdXNpbmctcHJlZml4OgpAQCAtMjkzMjcsNyArMjk3OTMs MTUgQEAgY3BfcGFyc2VyX3N0ZF9hdHRyaWJ1dGVfbGlzdCAoY3BfcGFyc2VyICpwYXJzZXIsIHRy ZWUgYXR0cl9ucykKIAogICAgYWxpZ25tZW50LXNwZWNpZmllcjoKICAgICAgYWxpZ25hcyAoIHR5 cGUtaWQgLi4uIFtvcHRdICkKLSAgICAgYWxpZ25hcyAoIGFsaWdubWVudC1leHByZXNzaW9uIC4u LiBbb3B0XSApLiAgKi8KKyAgICAgYWxpZ25hcyAoIGFsaWdubWVudC1leHByZXNzaW9uIC4uLiBb b3B0XSApLgorCisgICBFeHRlbnNpb25zIGZvciBjb250cmFjdHM6CisKKyAgIGNvbnRyYWN0LWF0 dHJpYnV0ZS1zcGVjaWZpZXI6CisgICAgIFsgWyBhc3NlcnQgOiAgY29udHJhY3QtbW9kZSBbb3B0 XSA6IGNvbmRpdGlvbmFsLWV4cHJlc3Npb24gXSBdCisgICAgIFsgWyBwcmUgOiAgY29udHJhY3Qt bW9kZSBbb3B0XSA6IGNvbmRpdGlvbmFsLWV4cHJlc3Npb24gXSBdCisgICAgIFsgWyBwb3N0IDog IGNvbnRyYWN0LW1vZGUgW29wdF0gaWRlbnRpZmllciBbb3B0XSA6CisJIGNvbmRpdGlvbmFsLWV4 cHJlc3Npb24gXSBdICAqLwogCiBzdGF0aWMgdHJlZQogY3BfcGFyc2VyX3N0ZF9hdHRyaWJ1dGVf c3BlYyAoY3BfcGFyc2VyICpwYXJzZXIpCkBAIC0yOTMzOSwxMCArMjk4MTMsMjcgQEAgY3BfcGFy c2VyX3N0ZF9hdHRyaWJ1dGVfc3BlYyAoY3BfcGFyc2VyICpwYXJzZXIpCiAgICAgICAmJiBjcF9s ZXhlcl9wZWVrX250aF90b2tlbiAocGFyc2VyLT5sZXhlciwgMiktPnR5cGUgPT0gQ1BQX09QRU5f U1FVQVJFKQogICAgIHsKICAgICAgIHRyZWUgYXR0cl9ucyA9IE5VTExfVFJFRTsKKyAgICAgIHRy ZWUgYXR0cl9uYW1lID0gTlVMTF9UUkVFOwogCiAgICAgICBjcF9sZXhlcl9jb25zdW1lX3Rva2Vu IChwYXJzZXItPmxleGVyKTsKICAgICAgIGNwX2xleGVyX2NvbnN1bWVfdG9rZW4gKHBhcnNlci0+ bGV4ZXIpOwogCisgICAgICB0b2tlbiA9IGNwX2xleGVyX3BlZWtfdG9rZW4gKHBhcnNlci0+bGV4 ZXIpOworICAgICAgaWYgKHRva2VuLT50eXBlID09IENQUF9OQU1FKQorCXsKKwkgIGF0dHJfbmFt ZSA9IHRva2VuLT51LnZhbHVlOworCSAgYXR0cl9uYW1lID0gY2Fub25pY2FsaXplX2F0dHJfbmFt ZSAoYXR0cl9uYW1lKTsKKwl9CisKKyAgICAgIC8qIEhhbmRsZSBjb250cmFjdC1hdHRyaWJ1dGUt c3BlY3Mgc3BlY2lhbGx5LiAgKi8KKyAgICAgIGlmIChhdHRyX25hbWUgJiYgY29udHJhY3RfYXR0 cmlidXRlX3AgKGF0dHJfbmFtZSkpCisJeworCSAgdHJlZSBhdHRycyA9IGNwX3BhcnNlcl9jb250 cmFjdF9hdHRyaWJ1dGVfc3BlYyAocGFyc2VyLCBhdHRyX25hbWUpOworCSAgaWYgKGF0dHJzICE9 IGVycm9yX21hcmtfbm9kZSkKKwkgICAgYXR0cmlidXRlcyA9IGF0dHJzOworCSAgZ290byBmaW5p c2hfYXR0cnM7CisJfQorCiAgICAgICBpZiAoY3BfbGV4ZXJfbmV4dF90b2tlbl9pc19rZXl3b3Jk IChwYXJzZXItPmxleGVyLCBSSURfVVNJTkcpKQogCXsKIAkgIHRva2VuID0gY3BfbGV4ZXJfcGVl a19udGhfdG9rZW4gKHBhcnNlci0+bGV4ZXIsIDIpOwpAQCAtMjkzNzEsNiArMjk4NjIsNyBAQCBj cF9wYXJzZXJfc3RkX2F0dHJpYnV0ZV9zcGVjIChjcF9wYXJzZXIgKnBhcnNlcikKIAogICAgICAg YXR0cmlidXRlcyA9IGNwX3BhcnNlcl9zdGRfYXR0cmlidXRlX2xpc3QgKHBhcnNlciwgYXR0cl9u cyk7CiAKKyAgICAgIGZpbmlzaF9hdHRyczoKICAgICAgIGlmICghY3BfcGFyc2VyX3JlcXVpcmUg KHBhcnNlciwgQ1BQX0NMT1NFX1NRVUFSRSwgUlRfQ0xPU0VfU1FVQVJFKQogCSAgfHwgIWNwX3Bh cnNlcl9yZXF1aXJlIChwYXJzZXIsIENQUF9DTE9TRV9TUVVBUkUsIFJUX0NMT1NFX1NRVUFSRSkp CiAJY3BfcGFyc2VyX3NraXBfdG9fZW5kX29mX3N0YXRlbWVudCAocGFyc2VyKTsKQEAgLTMyMzk3 LDYgKzMyODg5LDE0IEBAIGNwX3BhcnNlcl9zYXZlX2RlZmF1bHRfYXJncyAoY3BfcGFyc2VyKiBw YXJzZXIsIHRyZWUgZGVjbCkKICAgdHJlZSBzcGVjID0gVFlQRV9SQUlTRVNfRVhDRVBUSU9OUyAo VFJFRV9UWVBFIChkZWNsKSk7CiAgIGlmIChVTlBBUlNFRF9OT0VYQ0VQVF9TUEVDX1AgKHNwZWMp KQogICAgIHZlY19zYWZlX3B1c2ggKHVucGFyc2VkX25vZXhjZXB0cywgZGVjbCk7CisKKyAgLyog Q29udHJhY3RzIGFyZSBkZWZlcnJlZC4gICovCisgIGZvciAodHJlZSBhdHRyID0gREVDTF9BVFRS SUJVVEVTIChkZWNsKTsgYXR0cjsgYXR0ciA9IFRSRUVfQ0hBSU4gKGF0dHIpKQorICAgIGlmIChj eHhfY29udHJhY3RfYXR0cmlidXRlX3AgKGF0dHIpKQorICAgICAgeworCXZlY19zYWZlX3B1c2gg KHVucGFyc2VkX2NvbnRyYWN0cywgZGVjbCk7CisJYnJlYWs7CisgICAgICB9CiB9CiAKIC8qIERF RkFVTFRfQVJHIGNvbnRhaW5zIHRoZSBzYXZlZCB0b2tlbnMgZm9yIHRoZSBpbml0aWFsaXplciBv ZiBERUNMLApkaWZmIC0tZ2l0IGEvZ2NjL2NwL3B0LmNjIGIvZ2NjL2NwL3B0LmNjCmluZGV4IDAz MTBlMzhjOWI5Li5hYTQ1OWE3ZGYyNiAxMDA2NDQKLS0tIGEvZ2NjL2NwL3B0LmNjCisrKyBiL2dj Yy9jcC9wdC5jYwpAQCAtMjE3LDcgKzIxNyw2IEBAIHN0YXRpYyB0cmVlIGdldF91bmRlcmx5aW5n X3RlbXBsYXRlICh0cmVlKTsKIHN0YXRpYyB0cmVlIHRzdWJzdF9hdHRyaWJ1dGVzICh0cmVlLCB0 cmVlLCB0c3Vic3RfZmxhZ3NfdCwgdHJlZSk7CiBzdGF0aWMgdHJlZSBjYW5vbmljYWxpemVfZXhw cl9hcmd1bWVudCAodHJlZSwgdHN1YnN0X2ZsYWdzX3QpOwogc3RhdGljIHRyZWUgbWFrZV9hcmd1 bWVudF9wYWNrICh0cmVlKTsKLXN0YXRpYyB2b2lkIHJlZ2lzdGVyX3BhcmFtZXRlcl9zcGVjaWFs aXphdGlvbnMgKHRyZWUsIHRyZWUpOwogc3RhdGljIHRyZWUgZW5jbG9zaW5nX2luc3RhbnRpYXRp b25fb2YgKHRyZWUgdGN0eCk7CiBzdGF0aWMgdm9pZCBpbnN0YW50aWF0ZV9ib2R5ICh0cmVlIHBh dHRlcm4sIHRyZWUgYXJncywgdHJlZSBkLCBib29sIG5lc3RlZCk7CiBzdGF0aWMgdHJlZSBtYXli ZV9kZXBlbmRlbnRfbWVtYmVyX3JlZiAodHJlZSwgdHJlZSwgdHN1YnN0X2ZsYWdzX3QsIHRyZWUp OwpAQCAtMTk2OCw2ICsxOTY3LDE2IEBAIHJlZ2lzdGVyX2xvY2FsX3NwZWNpYWxpemF0aW9uICh0 cmVlIHNwZWMsIHRyZWUgdG1wbCkKICAgbG9jYWxfc3BlY2lhbGl6YXRpb25zLT5wdXQgKHRtcGws IHNwZWMpOwogfQogCisvKiBSZWdpc3RlcnMgVCBhcyBhIHNwZWNpYWxpemF0aW9uIG9mIGl0c2Vs Zi4gIFRoaXMgaXMgdXNlZCB0byBwcmVzZXJ2ZQorICAgdGhlIHJlZmVyZW5jZXMgdG8gYWxyZWFk eS1wYXJzZWQgcGFyYW1ldGVycyB3aGVuIGluc3RhbnRpYXRpbmcKKyAgIHBvc3Rjb25kaXRpb25z LiAgKi8KKwordm9pZAorcmVnaXN0ZXJfbG9jYWxfaWRlbnRpdHkgKHRyZWUgdCkKK3sKKyAgbG9j YWxfc3BlY2lhbGl6YXRpb25zLT5wdXQgKHQsIHQpOworfQorCiAvKiBUWVBFIGlzIGEgY2xhc3Mg dHlwZS4gIFJldHVybnMgdHJ1ZSBpZiBUWVBFIGlzIGFuIGV4cGxpY2l0bHkKICAgIHNwZWNpYWxp emVkIGNsYXNzLiAgKi8KIApAQCAtMzE2MSw4ICszMTcwLDEwIEBAIGNoZWNrX2V4cGxpY2l0X3Nw ZWNpYWxpemF0aW9uICh0cmVlIGRlY2xhcmF0b3IsCiAJCSAgICAgICBwYXJtID0gREVDTF9DSEFJ TiAocGFybSkpCiAJCSAgICBERUNMX0NPTlRFWFQgKHBhcm0pID0gcmVzdWx0OwogCQl9Ci0JICAg ICAgcmV0dXJuIHJlZ2lzdGVyX3NwZWNpYWxpemF0aW9uICh0bXBsLCBnZW5fdG1wbCwgdGFyZ3Ms CisJICAgICAgZGVjbCA9IHJlZ2lzdGVyX3NwZWNpYWxpemF0aW9uICh0bXBsLCBnZW5fdG1wbCwg dGFyZ3MsCiAJCQkJCSAgICAgIGlzX2ZyaWVuZCwgMCk7CisJICAgICAgcmVtb3ZlX2NvbnRyYWN0 X2F0dHJpYnV0ZXMgKHJlc3VsdCk7CisJICAgICAgcmV0dXJuIGRlY2w7CiAJICAgIH0KIAogCSAg LyogU2V0IHVwIHRoZSBERUNMX1RFTVBMQVRFX0lORk8gZm9yIERFQ0wuICAqLwpAQCAtMzI2Miw2 ICszMjczLDEwIEBAIGNoZWNrX2V4cGxpY2l0X3NwZWNpYWxpemF0aW9uICh0cmVlIGRlY2xhcmF0 b3IsCiAJCQkJCSAgICAgIGlzX2ZyaWVuZCwgMCk7CiAJICAgIH0KIAorCSAgLyogSWYgdGhpcyBp cyBhIHNwZWNpYWxpemF0aW9uLCBzcGxpY2UgYW55IGNvbnRyYWN0cyB0aGF0IG1heSBoYXZlCisJ ICAgICBiZWVuIGluaGVyaXRlZCBmcm9tIHRoZSB0ZW1wbGF0ZSwgcmVtb3ZpbmcgdGhlbS4gICov CisJICBpZiAoZGVjbCAhPSBlcnJvcl9tYXJrX25vZGUgJiYgREVDTF9URU1QTEFURV9TUEVDSUFM SVpBVElPTiAoZGVjbCkpCisJICAgIHJlbW92ZV9jb250cmFjdF9hdHRyaWJ1dGVzIChkZWNsKTsK IAogCSAgLyogQSAnc3RydWN0b3Igc2hvdWxkIGFscmVhZHkgaGF2ZSBjbG9uZXMuICAqLwogCSAg Z2NjX2Fzc2VydCAoZGVjbCA9PSBlcnJvcl9tYXJrX25vZGUKQEAgLTExNTc1LDYgKzExNTkwLDEx MyBAQCBjYW5fY29tcGxldGVfdHlwZV93aXRob3V0X2NpcmN1bGFyaXR5ICh0cmVlIHR5cGUpCiBz dGF0aWMgdHJlZSB0c3Vic3Rfb21wX2NsYXVzZXMgKHRyZWUsIGVudW0gY19vbXBfcmVnaW9uX3R5 cGUsIHRyZWUsCiAJCQkJdHN1YnN0X2ZsYWdzX3QsIHRyZWUpOwogCisvKiBJbnN0YW50aWF0ZSB0 aGUgY29udHJhY3Qgc3RhdGVtZW50LiAgKi8KKworc3RhdGljIHRyZWUKK3RzdWJzdF9jb250cmFj dCAodHJlZSBkZWNsLCB0cmVlIHQsIHRyZWUgYXJncywgdHN1YnN0X2ZsYWdzX3QgY29tcGxhaW4s CisJCSB0cmVlIGluX2RlY2wpCit7CisgIHRyZWUgdHlwZSA9IGRlY2wgPyBUUkVFX1RZUEUgKFRS RUVfVFlQRSAoZGVjbCkpIDogTlVMTF9UUkVFOworICBib29sIGF1dG9fcCAgPSB0eXBlX3VzZXNf YXV0byAodHlwZSk7CisKKyAgdHJlZSByID0gY29weV9ub2RlICh0KTsKKworICAvKiBSZWJ1aWxk IHRoZSByZXN1bHQgdmFyaWFibGUuICAqLworICBpZiAoUE9TVENPTkRJVElPTl9QICh0KSAmJiBQ T1NUQ09ORElUSU9OX0lERU5USUZJRVIgKHQpKQorICAgIHsKKyAgICAgIHRyZWUgb2xkdmFyID0g UE9TVENPTkRJVElPTl9JREVOVElGSUVSICh0KTsKKworICAgICAgdHJlZSBuZXd2YXIgPSBjb3B5 X25vZGUgKG9sZHZhcik7CisgICAgICBUUkVFX1RZUEUgKG5ld3ZhcikgPSB0eXBlOworICAgICAg REVDTF9DT05URVhUIChuZXd2YXIpID0gZGVjbDsKKyAgICAgIFBPU1RDT05ESVRJT05fSURFTlRJ RklFUiAocikgPSBuZXd2YXI7CisKKyAgICAgIC8qIE1ha2Ugc3VyZSB0aGUgcG9zdGNvbmRpdGlv biBpcyB2YWxpZC4gICovCisgICAgICBsb2NhdGlvbl90IGxvYyA9IERFQ0xfU09VUkNFX0xPQ0FU SU9OIChvbGR2YXIpOworICAgICAgaWYgKCFhdXRvX3ApCisJaWYgKCFjaGVja19wb3N0Y29uZGl0 aW9uX3Jlc3VsdCAoZGVjbCwgdHlwZSwgbG9jKSkKKwkgIHJldHVybiBpbnZhbGlkYXRlX2NvbnRy YWN0IChyKTsKKworICAgICAgLyogTWFrZSB0aGUgdmFyaWFibGUgYXZhaWxhYmxlIGZvciBsb29r dXAuICAqLworICAgICAgcmVnaXN0ZXJfbG9jYWxfc3BlY2lhbGl6YXRpb24gKG5ld3Zhciwgb2xk dmFyKTsKKyAgICB9CisKKyAgLyogSW5zdGFudGlhdGUgdGhlIGNvbmRpdGlvbi4gIElmIHRoZSBy ZXR1cm4gdHlwZSBpcyB1bmRlZHVjZWQsIHByb2Nlc3MKKyAgICAgdGhlIGV4cHJlc3Npb24gYXMg aWYgaW5zaWRlIGEgdGVtcGxhdGUgdG8gYXZvaWQgc3B1cmlvdXMgdHlwZSBlcnJvcnMuICAqLwor ICBpZiAoYXV0b19wKQorICAgICsrcHJvY2Vzc2luZ190ZW1wbGF0ZV9kZWNsOworICArK3Byb2Nl c3NpbmdfY29udHJhY3RfY29uZGl0aW9uOworICBDT05UUkFDVF9DT05ESVRJT04gKHIpCisgICAg ICA9IHRzdWJzdF9leHByIChDT05UUkFDVF9DT05ESVRJT04gKHQpLCBhcmdzLCBjb21wbGFpbiwg aW5fZGVjbCk7CisgIC0tcHJvY2Vzc2luZ19jb250cmFjdF9jb25kaXRpb247CisgIGlmIChhdXRv X3ApCisgICAgLS1wcm9jZXNzaW5nX3RlbXBsYXRlX2RlY2w7CisKKyAgLyogQW5kIHRoZSBjb21t ZW50LiAgKi8KKyAgQ09OVFJBQ1RfQ09NTUVOVCAocikKKyAgICAgID0gdHN1YnN0X2V4cHIgKENP TlRSQUNUX0NPTU1FTlQgKHIpLCBhcmdzLCBjb21wbGFpbiwgaW5fZGVjbCk7CisKKyAgcmV0dXJu IHI7Cit9CisKKy8qIFVwZGF0ZSBUIGJ5IGluc3RhbnRpYXRpbmcgaXRzIGNvbnRyYWN0IGF0dHJp YnV0ZS4gICovCisKK3N0YXRpYyB2b2lkCit0c3Vic3RfY29udHJhY3RfYXR0cmlidXRlICh0cmVl IGRlY2wsIHRyZWUgdCwgdHJlZSBhcmdzLAorCQkJICAgdHN1YnN0X2ZsYWdzX3QgY29tcGxhaW4s IHRyZWUgaW5fZGVjbCkKK3sKKyAgLyogRm9yIG5vbi1zcGVjaWFsaXphdGlvbnMsIGFkanVzdCB0 aGUgY3VycmVudCBkZWNsYXJhdGlvbiB0byB0aGUgbW9zdCBnZW5lcmFsCisgICAgIHZlcnNpb24g b2YgaW5fZGVjbC4gQmVjYXVzZSB3ZSBkZWZlciB0aGUgaW5zdGFudGlhdGlvbiBvZiBjb250cmFj dHMgYXMgbG9uZworICAgICBhcyBwb3NzaWJsZSwgdGhleSBhcmUgc3RpbGwgd3JpdHRlbiBpbiB0 ZXJtcyBvZiB0aGUgcGFyYW1ldGVycyAoYW5kIHJldHVybgorICAgICB0eXBlKSBvZiB0aGUgbW9z dCBnZW5lcmFsIHRlbXBsYXRlLiAgKi8KKyAgdHJlZSB0bXBsID0gREVDTF9USV9URU1QTEFURSAo aW5fZGVjbCk7CisgIGlmICghREVDTF9URU1QTEFURV9TUEVDSUFMSVpBVElPTiAodG1wbCkpCisg ICAgaW5fZGVjbCA9IERFQ0xfVEVNUExBVEVfUkVTVUxUIChtb3N0X2dlbmVyYWxfdGVtcGxhdGUg KGluX2RlY2wpKTsKKyAgbG9jYWxfc3BlY2lhbGl6YXRpb25fc3RhY2sgc3BlY3MgKGxzc19jb3B5 KTsKKyAgcmVnaXN0ZXJfcGFyYW1ldGVyX3NwZWNpYWxpemF0aW9ucyAoaW5fZGVjbCwgZGVjbCk7 CisKKyAgLyogR2V0IHRoZSBjb250cmFjdCB0byBiZSBpbnN0YW50aWF0ZWQuICAqLworICB0cmVl IGNvbnRyYWN0ID0gQ09OVFJBQ1RfU1RBVEVNRU5UICh0KTsKKworICAvKiBVc2UgdGhlIGNvbXBs ZXRlIHNldCBvZiB0ZW1wbGF0ZSBhcmd1bWVudHMgZm9yIGluc3RhbnRpYXRpb24uIFRoZQorICAg ICBjb250cmFjdCBtYXkgbm90IGhhdmUgYmVlbiBpbnN0YW50aWF0ZWQgYW5kIHN0aWxsIHJlZmVy IHRvIG91dGVyIGxldmVscworICAgICBvZiB0ZW1wbGF0ZSBwYXJhbWV0ZXJzLiAgKi8KKyAgYXJn cyA9IERFQ0xfVElfQVJHUyAoZGVjbCk7CisKKyAgLyogRm9yIG1lbWJlciBmdW5jdGlvbnMsIG1h a2UgdGhpcyBhdmFpbGFibGUgZm9yIHNlbWFudGljIGFuYWx5c2lzLiAgKi8KKyAgdHJlZSBzYXZl X2NjcCA9IGN1cnJlbnRfY2xhc3NfcHRyOworICB0cmVlIHNhdmVfY2NyID0gY3VycmVudF9jbGFz c19yZWY7CisgIGlmIChERUNMX05PTlNUQVRJQ19NRU1CRVJfRlVOQ1RJT05fUCAoZGVjbCkpCisg ICAgeworICAgICAgdHJlZSBhcmdfdHlwZXMgPSBUWVBFX0FSR19UWVBFUyAoVFJFRV9UWVBFIChk ZWNsKSk7CisgICAgICB0cmVlIHRoaXNfdHlwZSA9IFRSRUVfVFlQRSAoVFJFRV9WQUxVRSAoYXJn X3R5cGVzKSk7CisgICAgICBpbmplY3RfdGhpc19wYXJhbWV0ZXIgKHRoaXNfdHlwZSwgY3BfdHlw ZV9xdWFscyAodGhpc190eXBlKSk7CisgICAgfQorCisgIGNvbnRyYWN0ID0gdHN1YnN0X2NvbnRy YWN0IChkZWNsLCBjb250cmFjdCwgYXJncywgY29tcGxhaW4sIGluX2RlY2wpOworCisgIGN1cnJl bnRfY2xhc3NfcHRyID0gc2F2ZV9jY3A7CisgIGN1cnJlbnRfY2xhc3NfcmVmID0gc2F2ZV9jY3I7 CisKKyAgLyogUmVidWlsZCB0aGUgYXR0cmlidXRlLiAgKi8KKyAgVFJFRV9WQUxVRSAodCkgPSBi dWlsZF90cmVlX2xpc3QgKE5VTExfVFJFRSwgY29udHJhY3QpOworfQorCisvKiBSZWJ1aWxkIHRo ZSBhdHRyaWJ1dGUgbGlzdCBmb3IgREVDTCwgc3Vic3RpdHV0aW5nIGludG8gY29udHJhY3RzCisg ICBhcyBuZWVkZWQuICAqLworCit2b2lkCit0c3Vic3RfY29udHJhY3RfYXR0cmlidXRlcyAodHJl ZSBkZWNsLCB0cmVlIGFyZ3MsIHRzdWJzdF9mbGFnc190IGNvbXBsYWluLCB0cmVlIGluX2RlY2wp Cit7CisgIHRyZWUgbGlzdCA9IGNvcHlfbGlzdCAoREVDTF9BVFRSSUJVVEVTIChkZWNsKSk7Cisg IGZvciAodHJlZSBhdHRyID0gbGlzdDsgYXR0cjsgYXR0ciA9IENPTlRSQUNUX0NIQUlOIChhdHRy KSkKKyAgICB7CisgICAgICBpZiAoY3h4X2NvbnRyYWN0X2F0dHJpYnV0ZV9wIChhdHRyKSkKKwl0 c3Vic3RfY29udHJhY3RfYXR0cmlidXRlIChkZWNsLCBhdHRyLCBhcmdzLCBjb21wbGFpbiwgaW5f ZGVjbCk7CisgICAgfQorICBERUNMX0FUVFJJQlVURVMgKGRlY2wpID0gbGlzdDsKK30KKwogLyog SW5zdGFudGlhdGUgYSBzaW5nbGUgZGVwZW5kZW50IGF0dHJpYnV0ZSBUIChhIFRSRUVfTElTVCks IGFuZCByZXR1cm4gZWl0aGVyCiAgICBUIG9yIGEgbmV3IFRSRUVfTElTVCwgcG9zc2libHkgYSBj aGFpbiBpbiB0aGUgY2FzZSBvZiBhIHBhY2sgZXhwYW5zaW9uLiAgKi8KIApAQCAtMTE1ODQsNiAr MTE3MDYsMTAgQEAgdHN1YnN0X2F0dHJpYnV0ZSAodHJlZSB0LCB0cmVlICpkZWNsX3AsIHRyZWUg YXJncywKIHsKICAgZ2NjX2Fzc2VydCAoQVRUUl9JU19ERVBFTkRFTlQgKHQpKTsKIAorICAvKiBO b3RlIHRoYXQgY29udHJhY3QgYXR0cmlidXRlcyBhcmUgbmV2ZXIgc3Vic3RpdHV0ZWQgZnJvbSB0 aGlzIGZ1bmN0aW9uLgorICAgICBUaGVpciBpbnN0YW50aWF0aW9uIGlzIHRyaWdnZXJlZCBieSBy ZWdlbmVyYXRlX2Zyb21fdGVtcGxhdGVfZGVjbCB3aGVuCisgICAgIHdlIGluc3RhbnRpYXRlIHRo ZSBib2R5IG9mIHRoZSBmdW5jdGlvbi4gICovCisKICAgdHJlZSB2YWwgPSBUUkVFX1ZBTFVFICh0 KTsKICAgaWYgKHZhbCA9PSBOVUxMX1RSRUUpCiAgICAgLyogTm90aGluZyB0byBkby4gICovOwpA QCAtMTcxMDgsNyArMTcyMzQsOSBAQCB0c3Vic3RfY29weSAodHJlZSB0LCB0cmVlIGFyZ3MsIHRz dWJzdF9mbGFnc190IGNvbXBsYWluLCB0cmVlIGluX2RlY2wpCiAJCQkgID0gZG9fYXV0b19kZWR1 Y3Rpb24gKFRSRUVfVFlQRSAociksIGluaXQsIGF1dG9fbm9kZSwKIAkJCQkJICAgICAgIGNvbXBs YWluLCBhZGNfdmFyaWFibGVfdHlwZSk7CiAJCSAgICB9Ci0JCSAgZ2NjX2Fzc2VydCAoY3BfdW5l dmFsdWF0ZWRfb3BlcmFuZCB8fCBUUkVFX1NUQVRJQyAocikKKwkJICBnY2NfYXNzZXJ0IChjcF91 bmV2YWx1YXRlZF9vcGVyYW5kCisJCQkgICAgICB8fCBwcm9jZXNzaW5nX2NvbnRyYWN0X2NvbmRp dGlvbgorCQkJICAgICAgfHwgVFJFRV9TVEFUSUMgKHIpCiAJCQkgICAgICB8fCBkZWNsX2NvbnN0 YW50X3Zhcl9wIChyKQogCQkJICAgICAgfHwgc2Vlbl9lcnJvciAoKSk7CiAJCSAgaWYgKCFwcm9j ZXNzaW5nX3RlbXBsYXRlX2RlY2wKQEAgLTE4NjA2LDYgKzE4NzM0LDE5IEBAIHRzdWJzdF9leHBy ICh0cmVlIHQsIHRyZWUgYXJncywgdHN1YnN0X2ZsYWdzX3QgY29tcGxhaW4sIHRyZWUgaW5fZGVj bCkKICAgICAgIGZpbmlzaF91c2luZ19kaXJlY3RpdmUgKFVTSU5HX1NUTVRfTkFNRVNQQUNFICh0 KSwgLyphdHRyaWJzPSovTlVMTF9UUkVFKTsKICAgICAgIGJyZWFrOwogCisgICAgY2FzZSBQUkVD T05ESVRJT05fU1RNVDoKKyAgICBjYXNlIFBPU1RDT05ESVRJT05fU1RNVDoKKyAgICAgIGdjY191 bnJlYWNoYWJsZSAoKTsKKworICAgIGNhc2UgQVNTRVJUSU9OX1NUTVQ6CisgICAgICB7CisJciA9 IHRzdWJzdF9jb250cmFjdCAoTlVMTF9UUkVFLCB0LCBhcmdzLCBjb21wbGFpbiwgaW5fZGVjbCk7 CisJaWYgKHIgIT0gZXJyb3JfbWFya19ub2RlKQorCSAgYWRkX3N0bXQgKHIpOworCVJFVFVSTiAo cik7CisgICAgICB9CisgICAgICBicmVhazsKKwogICAgIGNhc2UgREVDTF9FWFBSOgogICAgICAg ewogCXRyZWUgZGVjbCwgcGF0dGVybl9kZWNsOwpAQCAtMjYwODgsNiArMjYyMjksMjEgQEAgcmVn ZW5lcmF0ZV9kZWNsX2Zyb21fdGVtcGxhdGUgKHRyZWUgZGVjbCwgdHJlZSB0bXBsLCB0cmVlIGFy Z3MpCiAJICAgIERFQ0xfQ09OVEVYVCAodCkgPSBkZWNsOwogCX0KIAorICAgICAgaWYgKERFQ0xf Q09OVFJBQ1RTIChkZWNsKSkKKwl7CisJICAvKiBJZiB3ZSdyZSByZWdlbmVyYXRpbmcgYSBzcGVj aWFsaXphdGlvbiwgdGhlIGNvbnRyYWN0cyB3aWxsIGhhdmUKKwkgICAgIGJlZW4gY29waWVkIGZy b20gdGhlIG1vc3QgZ2VuZXJhbCB0ZW1wbGF0ZS4gUmVwbGFjZSB0aG9zZSB3aXRoCisJICAgICB0 aGUgb25lcyBmcm9tIHRoZSBhY3R1YWwgc3BlY2lhbGl6YXRpb24uICAqLworCSAgdHJlZSB0bXBs ID0gREVDTF9USV9URU1QTEFURSAoZGVjbCk7CisJICBpZiAoREVDTF9URU1QTEFURV9TUEVDSUFM SVpBVElPTiAodG1wbCkpCisJICAgIHsKKwkgICAgICByZW1vdmVfY29udHJhY3RfYXR0cmlidXRl cyAoZGVjbCk7CisJICAgICAgY29weV9jb250cmFjdF9hdHRyaWJ1dGVzIChkZWNsLCBjb2RlX3Bh dHRlcm4pOworCSAgICB9CisKKwkgIHRzdWJzdF9jb250cmFjdF9hdHRyaWJ1dGVzIChkZWNsLCBh cmdzLCB0Zl93YXJuaW5nX29yX2Vycm9yLCBjb2RlX3BhdHRlcm4pOworCX0KKwogICAgICAgLyog TWVyZ2UgYWRkaXRpb25hbCBzcGVjaWZpZXJzIGZyb20gdGhlIENPREVfUEFUVEVSTi4gICovCiAg ICAgICBpZiAoREVDTF9ERUNMQVJFRF9JTkxJTkVfUCAoY29kZV9wYXR0ZXJuKQogCSAgJiYgIURF Q0xfREVDTEFSRURfSU5MSU5FX1AgKGRlY2wpKQpAQCAtMjYzMzMsNyArMjY0ODksNyBAQCBtYXli ZV9pbnN0YW50aWF0ZV9ub2V4Y2VwdCAodHJlZSBmbiwgdHN1YnN0X2ZsYWdzX3QgY29tcGxhaW4p CiAvKiBXZSdyZSBzdGFydGluZyB0byBwcm9jZXNzIHRoZSBmdW5jdGlvbiBJTlNULCBhbiBpbnN0 YW50aWF0aW9uIG9mIFBBVFRFUk47CiAgICBhZGQgdGhlaXIgcGFyYW1ldGVycyB0byBsb2NhbF9z cGVjaWFsaXphdGlvbnMuICAqLwogCi1zdGF0aWMgdm9pZAordm9pZAogcmVnaXN0ZXJfcGFyYW1l dGVyX3NwZWNpYWxpemF0aW9ucyAodHJlZSBwYXR0ZXJuLCB0cmVlIGluc3QpCiB7CiAgIHRyZWUg dG1wbF9wYXJtID0gREVDTF9BUkdVTUVOVFMgKHBhdHRlcm4pOwpkaWZmIC0tZ2l0IGEvZ2NjL2Nw L3NlYXJjaC5jYyBiL2djYy9jcC9zZWFyY2guY2MKaW5kZXggMTA4NjNhNDBiMTEuLjBkYmIzYmUx ZWU3IDEwMDY0NAotLS0gYS9nY2MvY3Avc2VhcmNoLmNjCisrKyBiL2djYy9jcC9zZWFyY2guY2MK QEAgLTMwLDYgKzMwLDcgQEAgYWxvbmcgd2l0aCBHQ0M7IHNlZSB0aGUgZmlsZSBDT1BZSU5HMy4g IElmIG5vdCBzZWUKICNpbmNsdWRlICJzcGVsbGNoZWNrLXRyZWUuaCIKICNpbmNsdWRlICJzdHJp bmdwb29sLmgiCiAjaW5jbHVkZSAiYXR0cmlicy5oIgorI2luY2x1ZGUgInRyZWUtaW5saW5lLmgi CiAKIHN0YXRpYyBpbnQgaXNfc3Vib2JqZWN0X29mX3AgKHRyZWUsIHRyZWUpOwogc3RhdGljIHRy ZWUgZGZzX2xvb2t1cF9iYXNlICh0cmVlLCB2b2lkICopOwpAQCAtMjA4Miw2ICsyMDgzLDMzIEBA IGNoZWNrX2ZpbmFsX292ZXJyaWRlciAodHJlZSBvdmVycmlkZXIsIHRyZWUgYmFzZWZuKQogCX0K ICAgICAgIHJldHVybiAwOwogICAgIH0KKworICBpZiAoIURFQ0xfSEFTX0NPTlRSQUNUU19QIChi YXNlZm4pICYmIERFQ0xfSEFTX0NPTlRSQUNUU19QIChvdmVycmlkZXIpKQorICAgIHsKKyAgICAg IGF1dG9fZGlhZ25vc3RpY19ncm91cCBkOworICAgICAgZXJyb3IgKCJmdW5jdGlvbiB3aXRoIGNv bnRyYWN0cyAlcStEIG92ZXJyaWRpbmcgY29udHJhY3RsZXNzIGZ1bmN0aW9uIiwKKwkgICAgIG92 ZXJyaWRlcik7CisgICAgICBpbmZvcm0gKERFQ0xfU09VUkNFX0xPQ0FUSU9OIChiYXNlZm4pLAor CSAgICAgICJvdmVycmlkZGVuIGZ1bmN0aW9uIGlzICVxRCIsIGJhc2Vmbik7CisgICAgICByZXR1 cm4gMDsKKyAgICB9CisgIGVsc2UgaWYgKERFQ0xfSEFTX0NPTlRSQUNUU19QIChiYXNlZm4pICYm ICFERUNMX0hBU19DT05UUkFDVFNfUCAob3ZlcnJpZGVyKSkKKyAgICB7CisgICAgICAvKiBXZSdy ZSBpbmhlcml0aW5nIGJhc2VmbidzIGNvbnRyYWN0czsgY3JlYXRlIGEgY29weSBvZiB0aGVtIGJ1 dAorCSByZXBsYWNlIHJlZmVyZW5jZXMgdG8gdGhlaXIgcGFybXMgdG8gb3VyIHBhcm1zLiAgKi8K KyAgICAgIGluaGVyaXRfYmFzZV9jb250cmFjdHMgKG92ZXJyaWRlciwgYmFzZWZuKTsKKyAgICB9 CisgIGVsc2UgaWYgKERFQ0xfSEFTX0NPTlRSQUNUU19QIChiYXNlZm4pICYmIERFQ0xfSEFTX0NP TlRSQUNUU19QIChvdmVycmlkZXIpKQorICAgIHsKKyAgICAgIC8qIFdlJ3JlIGluIHRoZSBwcm9j ZXNzIG9mIGNvbXBsZXRpbmcgdGhlIG92ZXJyaWRlcidzIGNsYXNzLCB3aGljaCBtZWFucworCSBv dXIgY29uZGl0aW9ucyBkZWZpbml0ZWx5IGFyZSBub3QgcGFyc2VkIHNvIHNpbXBseSBjaGFpbiBv biB0aGUKKwkgYmFzZWZuIGZvciBsYXRlciBjaGVja2luZy4KKworCSBOb3RlIHRoYXQgT1ZFUlJJ REVSJ3MgY29udHJhY3RzIHdpbGwgaGF2ZSBiZWVuIGZ1bGx5IHBhcnNlZCBhdCB0aGUKKwkgcG9p bnQgdGhlIGRlZmVycmVkIG1hdGNoIGlzIHJ1bi4gICovCisgICAgICBkZWZlcl9ndWFyZGVkX2Nv bnRyYWN0X21hdGNoIChvdmVycmlkZXIsIGJhc2VmbiwgREVDTF9DT05UUkFDVFMgKGJhc2Vmbikp OworICAgIH0KKwogICBpZiAoREVDTF9GSU5BTF9QIChiYXNlZm4pKQogICAgIHsKICAgICAgIGF1 dG9fZGlhZ25vc3RpY19ncm91cCBkOwpkaWZmIC0tZ2l0IGEvZ2NjL2NwL3NlbWFudGljcy5jYyBi L2djYy9jcC9zZW1hbnRpY3MuY2MKaW5kZXggYjE5MTc0OTZjYjMuLjk0MDFiMzVhNzg5IDEwMDY0 NAotLS0gYS9nY2MvY3Avc2VtYW50aWNzLmNjCisrKyBiL2djYy9jcC9zZW1hbnRpY3MuY2MKQEAg LTYxMCw3ICs2MTAsOCBAQCBzZXRfY2xlYW51cF9sb2NzICh0cmVlIHN0bXRzLCBsb2NhdGlvbl90 IGxvYykKICAgaWYgKFRSRUVfQ09ERSAoc3RtdHMpID09IENMRUFOVVBfU1RNVCkKICAgICB7CiAg ICAgICB0cmVlIHQgPSBDTEVBTlVQX0VYUFIgKHN0bXRzKTsKLSAgICAgIHByb3RlY3RlZF9zZXRf ZXhwcl9sb2NhdGlvbiAodCwgbG9jKTsKKyAgICAgIGlmICh0ICYmIFRSRUVfQ09ERSAodCkgIT0g UE9TVENPTkRJVElPTl9TVE1UKQorCXByb3RlY3RlZF9zZXRfZXhwcl9sb2NhdGlvbiAodCwgbG9j KTsKICAgICAgIC8qIEF2b2lkIGxvY3VzIGRpZmZlcmVuY2VzIGZvciBDKysgY2R0b3IgY2FsbHMg ZGVwZW5kaW5nIG9uIHdoZXRoZXIKIAkgY2R0b3JfcmV0dXJuc190aGlzOiBhIGNvbnZlcnNpb24g dG8gdm9pZCBpcyBhZGRlZCB0byBkaXNjYXJkIHRoZSByZXR1cm4KIAkgdmFsdWUsIGFuZCB0aGlz IGNvbnZlcnNpb24gZW5kcyB1cCBjYXJyeWluZyB0aGUgbG9jYXRpb24sIGFuZCB3aGVuIGl0CkBA IC0yMTY5LDcgKzIxNzAsOCBAQCBmaW5pc2hfbm9uX3N0YXRpY19kYXRhX21lbWJlciAodHJlZSBk ZWNsLCB0cmVlIG9iamVjdCwgdHJlZSBxdWFsaWZ5aW5nX3Njb3BlLAogCiAgIC8qIERSIDYxMy84 NTA6IENhbiB1c2Ugbm9uLXN0YXRpYyBkYXRhIG1lbWJlcnMgd2l0aG91dCBhbiBhc3NvY2lhdGVk CiAgICAgIG9iamVjdCBpbiBzaXplb2YvZGVjbHR5cGUvYWxpZ25vZi4gICovCi0gIGlmIChpc19k dW1teV9vYmplY3QgKG9iamVjdCkgJiYgY3BfdW5ldmFsdWF0ZWRfb3BlcmFuZCA9PSAwCisgIGlm IChpc19kdW1teV9vYmplY3QgKG9iamVjdCkKKyAgICAgICYmICFjcF91bmV2YWx1YXRlZF9vcGVy YW5kCiAgICAgICAmJiAoIXByb2Nlc3NpbmdfdGVtcGxhdGVfZGVjbCB8fCAhY3VycmVudF9jbGFz c19yZWYpKQogICAgIHsKICAgICAgIGlmIChjb21wbGFpbiAmIHRmX2Vycm9yKQpAQCAtMjE3Nyw2 ICsyMTc5LDE0IEBAIGZpbmlzaF9ub25fc3RhdGljX2RhdGFfbWVtYmVyICh0cmVlIGRlY2wsIHRy ZWUgb2JqZWN0LCB0cmVlIHF1YWxpZnlpbmdfc2NvcGUsCiAJICBpZiAoY3VycmVudF9mdW5jdGlv bl9kZWNsCiAJICAgICAgJiYgREVDTF9TVEFUSUNfRlVOQ1RJT05fUCAoY3VycmVudF9mdW5jdGlv bl9kZWNsKSkKIAkgICAgZXJyb3IgKCJpbnZhbGlkIHVzZSBvZiBtZW1iZXIgJXFEIGluIHN0YXRp YyBtZW1iZXIgZnVuY3Rpb24iLCBkZWNsKTsKKwkgIGVsc2UgaWYgKGN1cnJlbnRfZnVuY3Rpb25f ZGVjbAorCQkgICAmJiBwcm9jZXNzaW5nX2NvbnRyYWN0X2NvbmRpdGlvbgorCQkgICAmJiBERUNM X0NPTlNUUlVDVE9SX1AgKGN1cnJlbnRfZnVuY3Rpb25fZGVjbCkpCisJICAgIGVycm9yICgiaW52 YWxpZCB1c2Ugb2YgbWVtYmVyICVxRCBpbiBjb25zdHJ1Y3RvciAlPHByZSU+IGNvbnRyYWN0Iiwg ZGVjbCk7CisJICBlbHNlIGlmIChjdXJyZW50X2Z1bmN0aW9uX2RlY2wKKwkJICAgJiYgcHJvY2Vz c2luZ19jb250cmFjdF9jb25kaXRpb24KKwkJICAgJiYgREVDTF9ERVNUUlVDVE9SX1AgKGN1cnJl bnRfZnVuY3Rpb25fZGVjbCkpCisJICAgIGVycm9yICgiaW52YWxpZCB1c2Ugb2YgbWVtYmVyICVx RCBpbiBkZXN0cnVjdG9yICU8cG9zdCU+IGNvbnRyYWN0IiwgZGVjbCk7CiAJICBlbHNlCiAJICAg IGVycm9yICgiaW52YWxpZCB1c2Ugb2Ygbm9uLXN0YXRpYyBkYXRhIG1lbWJlciAlcUQiLCBkZWNs KTsKIAkgIGluZm9ybSAoREVDTF9TT1VSQ0VfTE9DQVRJT04gKGRlY2wpLCAiZGVjbGFyZWQgaGVy ZSIpOwpAQCAtMzAxNCw2ICszMDI0LDEwIEBAIGZpbmlzaF90aGlzX2V4cHIgKHZvaWQpCiAgIHRy ZWUgZm4gPSBjdXJyZW50X25vbmxhbWJkYV9mdW5jdGlvbiAoKTsKICAgaWYgKGZuICYmIERFQ0xf U1RBVElDX0ZVTkNUSU9OX1AgKGZuKSkKICAgICBlcnJvciAoIiU8dGhpcyU+IGlzIHVuYXZhaWxh YmxlIGZvciBzdGF0aWMgbWVtYmVyIGZ1bmN0aW9ucyIpOworICBlbHNlIGlmIChmbiAmJiBwcm9j ZXNzaW5nX2NvbnRyYWN0X2NvbmRpdGlvbiAmJiBERUNMX0NPTlNUUlVDVE9SX1AgKGZuKSkKKyAg ICBlcnJvciAoImludmFsaWQgdXNlIG9mICU8dGhpcyU+IGJlZm9yZSBpdCBpcyB2YWxpZCIpOwor ICBlbHNlIGlmIChmbiAmJiBwcm9jZXNzaW5nX2NvbnRyYWN0X2NvbmRpdGlvbiAmJiBERUNMX0RF U1RSVUNUT1JfUCAoZm4pKQorICAgIGVycm9yICgiaW52YWxpZCB1c2Ugb2YgJTx0aGlzJT4gYWZ0 ZXIgaXQgaXMgdmFsaWQiKTsKICAgZWxzZSBpZiAoZm4pCiAgICAgZXJyb3IgKCJpbnZhbGlkIHVz ZSBvZiAlPHRoaXMlPiBpbiBub24tbWVtYmVyIGZ1bmN0aW9uIik7CiAgIGVsc2UKQEAgLTM5ODcs NiArNDAwMSw5IEBAIHByb2Nlc3Nfb3V0ZXJfdmFyX3JlZiAodHJlZSBkZWNsLCB0c3Vic3RfZmxh Z3NfdCBjb21wbGFpbiwgYm9vbCBvZHJfdXNlKQogCX0KICAgICAgIHJldHVybiBlcnJvcl9tYXJr X25vZGU7CiAgICAgfQorICBlbHNlIGlmIChwcm9jZXNzaW5nX2NvbnRyYWN0X2NvbmRpdGlvbiAm JiAoVFJFRV9DT0RFIChkZWNsKSA9PSBQQVJNX0RFQ0wpKQorICAgIC8qIFVzZSBvZiBhIHBhcmFt ZXRlciBpbiBhIGNvbnRyYWN0IGNvbmRpdGlvbiBpcyBmaW5lLiAgKi8KKyAgICByZXR1cm4gZGVj bDsKICAgZWxzZQogICAgIHsKICAgICAgIGlmIChjb21wbGFpbiAmIHRmX2Vycm9yKQpAQCAtNDEx OSw3ICs0MTM2LDggQEAgZmluaXNoX2lkX2V4cHJlc3Npb25fMSAodHJlZSBpZF9leHByZXNzaW9u LAogCSBib2R5LCBleGNlcHQgaW5zaWRlIGFuIHVuZXZhbHVhdGVkIGNvbnRleHQgKGkuZS4gZGVj bHR5cGUpLiAgKi8KICAgICAgIGlmIChUUkVFX0NPREUgKGRlY2wpID09IFBBUk1fREVDTAogCSAg JiYgREVDTF9DT05URVhUIChkZWNsKSA9PSBOVUxMX1RSRUUKLQkgICYmICFjcF91bmV2YWx1YXRl ZF9vcGVyYW5kKQorCSAgJiYgIWNwX3VuZXZhbHVhdGVkX29wZXJhbmQKKwkgICYmICFwcm9jZXNz aW5nX2NvbnRyYWN0X2NvbmRpdGlvbikKIAl7CiAJICAqZXJyb3JfbXNnID0gR18oInVzZSBvZiBw YXJhbWV0ZXIgb3V0c2lkZSBmdW5jdGlvbiBib2R5Iik7CiAJICByZXR1cm4gZXJyb3JfbWFya19u b2RlOwpAQCAtMTIyOTAsNiArMTIzMDgsMTAgQEAgYXBwbHlfZGVkdWNlZF9yZXR1cm5fdHlwZSAo dHJlZSBmY28sIHRyZWUgcmV0dXJuX3R5cGUpCiAKICAgVFJFRV9UWVBFIChmY28pID0gY2hhbmdl X3JldHVybl90eXBlIChyZXR1cm5fdHlwZSwgVFJFRV9UWVBFIChmY28pKTsKIAorICBtYXliZV91 cGRhdGVfcG9zdGNvbmRpdGlvbnMgKGZjbyk7CisKKyAgLyogQXBwbHkgdGhlIHR5cGUgdG8gdGhl IHJlc3VsdCBvYmplY3QuICAqLworCiAgIHJlc3VsdCA9IERFQ0xfUkVTVUxUIChmY28pOwogICBp ZiAocmVzdWx0ID09IE5VTExfVFJFRSkKICAgICByZXR1cm47CmRpZmYgLS1naXQgYS9nY2MvY3Av dHJlZS5jYyBiL2djYy9jcC90cmVlLmNjCmluZGV4IGUzNTJjZjgwMjEzLi4wNGEwNTVkOWQ3NyAx MDA2NDQKLS0tIGEvZ2NjL2NwL3RyZWUuY2MKKysrIGIvZ2NjL2NwL3RyZWUuY2MKQEAgLTQ2LDYg KzQ2LDcgQEAgc3RhdGljIHRyZWUgdmVyaWZ5X3N0bXRfdHJlZV9yICh0cmVlICosIGludCAqLCB2 b2lkICopOwogCiBzdGF0aWMgdHJlZSBoYW5kbGVfaW5pdF9wcmlvcml0eV9hdHRyaWJ1dGUgKHRy ZWUgKiwgdHJlZSwgdHJlZSwgaW50LCBib29sICopOwogc3RhdGljIHRyZWUgaGFuZGxlX2FiaV90 YWdfYXR0cmlidXRlICh0cmVlICosIHRyZWUsIHRyZWUsIGludCwgYm9vbCAqKTsKK3N0YXRpYyB0 cmVlIGhhbmRsZV9jb250cmFjdF9hdHRyaWJ1dGUgKHRyZWUgKiwgdHJlZSwgdHJlZSwgaW50LCBi b29sICopOwogCiAvKiBJZiBSRUYgaXMgYW4gbHZhbHVlLCByZXR1cm5zIHRoZSBraW5kIG9mIGx2 YWx1ZSB0aGF0IFJFRiBpcy4KICAgIE90aGVyd2lzZSwgcmV0dXJucyBjbGtfbm9uZS4gICovCkBA IC0zODg1LDYgKzM4ODYsNTAgQEAgY2FsbGVkX2Zuc19lcXVhbCAodHJlZSB0MSwgdHJlZSB0MikK ICAgICByZXR1cm4gY3BfdHJlZV9lcXVhbCAodDEsIHQyKTsKIH0KIAorYm9vbCBjb21wYXJpbmdf b3ZlcnJpZGVfY29udHJhY3RzOworCisvKiBJbiBhIGNvbXBvbmVudCByZWZlcmVuY2UsIHJldHVy biB0aGUgaW5uZXJtb3N0IG9iamVjdCBvZgorICAgdGhlIHBvc3RmaXgtZXhwcmVzc2lvbi4gICov CisKK3N0YXRpYyB0cmVlCitnZXRfaW5uZXJtb3N0X2NvbXBvbmVudCAodHJlZSB0KQoreworICBn Y2NfYXNzZXJ0IChUUkVFX0NPREUgKHQpID09IENPTVBPTkVOVF9SRUYpOworICB3aGlsZSAoVFJF RV9DT0RFICh0KSA9PSBDT01QT05FTlRfUkVGKQorICAgIHQgPSBUUkVFX09QRVJBTkQgKHQsIDAp OworICByZXR1cm4gdDsKK30KKworLyogUmV0dXJucyB0cnVlIGlmIFQgaXMgYSBwb3NzaWJseSBj b252ZXJ0ZWQgJ3RoaXMnIG9yICcqdGhpcycgZXhwcmVzc2lvbi4gICovCisKK3N0YXRpYyBib29s Citpc190aGlzX2V4cHJlc3Npb24gKHRyZWUgdCkKK3sKKyAgdCA9IGdldF9pbm5lcm1vc3RfY29t cG9uZW50ICh0KTsKKyAgLyogU2VlIHRocm91Z2ggZGVmZXJlbmNlcyBhbmQgbm8tb3AgY29udmVy c2lvbnMuICAqLworICBpZiAoVFJFRV9DT0RFICh0KSA9PSBJTkRJUkVDVF9SRUYpCisgICAgdCA9 IFRSRUVfT1BFUkFORCAodCwgMCk7CisgIGlmIChUUkVFX0NPREUgKHQpID09IE5PUF9FWFBSKQor ICAgIHQgPSBUUkVFX09QRVJBTkQgKHQsIDApOworICByZXR1cm4gaXNfdGhpc19wYXJhbWV0ZXIg KHQpOworfQorCitzdGF0aWMgYm9vbAorY29tcGFyaW5nX3RoaXNfcmVmZXJlbmNlcyAodHJlZSB0 MSwgdHJlZSB0MikKK3sKKyAgcmV0dXJuIGlzX3RoaXNfZXhwcmVzc2lvbiAodDEpICYmIGlzX3Ro aXNfZXhwcmVzc2lvbiAodDIpOworfQorCitzdGF0aWMgYm9vbAorZXF1aXZhbGVudF9tZW1iZXJf cmVmZXJlbmNlcyAodHJlZSB0MSwgdHJlZSB0MikKK3sKKyAgaWYgKCFjb21wYXJpbmdfdGhpc19y ZWZlcmVuY2VzICh0MSwgdDIpKQorICAgIHJldHVybiBmYWxzZTsKKyAgdDEgPSBUUkVFX09QRVJB TkQgKHQxLCAxKTsKKyAgdDIgPSBUUkVFX09QRVJBTkQgKHQyLCAxKTsKKyAgcmV0dXJuIHQxID09 IHQyOworfQorCiAvKiBSZXR1cm4gdHJ1dGh2YWx1ZSBvZiB3aGV0aGVyIFQxIGlzIHRoZSBzYW1l IHRyZWUgc3RydWN0dXJlIGFzIFQyLgogICAgUmV0dXJuIDEgaWYgdGhleSBhcmUgdGhlIHNhbWUu IFJldHVybiAwIGlmIHRoZXkgYXJlIGRpZmZlcmVudC4gICovCiAKQEAgLTQyMTksNiArNDI2NCwx MyBAQCBjcF90cmVlX2VxdWFsICh0cmVlIHQxLCB0cmVlIHQyKQogCXJldHVybiBmYWxzZTsKICAg ICAgIHJldHVybiB0cnVlOwogCisgICAgY2FzZSBDT01QT05FTlRfUkVGOgorICAgICAgLyogSWYg d2UncmUgY29tcGFyaW5nIGNvbnRyYWN0IGNvbmRpdGlvbnMgb2Ygb3ZlcnJpZGVzLCBtZW1iZXIg cmVmZXJlbmNlcworCSBjb21wYXJlIGVxdWFsIGlmIHRoZXkgZGVzaWduYXRlIHRoZSBzYW1lIG1l bWJlci4gICovCisgICAgICBpZiAoY29tcGFyaW5nX292ZXJyaWRlX2NvbnRyYWN0cykKKwlyZXR1 cm4gZXF1aXZhbGVudF9tZW1iZXJfcmVmZXJlbmNlcyAodDEsIHQyKTsKKyAgICAgIGJyZWFrOwor CiAgICAgZGVmYXVsdDoKICAgICAgIGJyZWFrOwogICAgIH0KQEAgLTUwNjIsNiArNTExNCwxMCBA QCBjb25zdCBzdHJ1Y3QgYXR0cmlidXRlX3NwZWMgc3RkX2F0dHJpYnV0ZV90YWJsZVtdID0KICAg ICBoYW5kbGVfbm9yZXR1cm5fYXR0cmlidXRlLCBhdHRyX25vcmV0dXJuX2V4Y2x1c2lvbnMgfSwK ICAgeyAiY2Fycmllc19kZXBlbmRlbmN5IiwgMCwgMCwgdHJ1ZSwgZmFsc2UsIGZhbHNlLCBmYWxz ZSwKICAgICBoYW5kbGVfY2Fycmllc19kZXBlbmRlbmN5X2F0dHJpYnV0ZSwgTlVMTCB9LAorICB7 ICJwcmUiLCAwLCAtMSwgZmFsc2UsIGZhbHNlLCBmYWxzZSwgZmFsc2UsCisgICAgaGFuZGxlX2Nv bnRyYWN0X2F0dHJpYnV0ZSwgTlVMTCB9LAorICB7ICJwb3N0IiwgMCwgLTEsIGZhbHNlLCBmYWxz ZSwgZmFsc2UsIGZhbHNlLAorICAgIGhhbmRsZV9jb250cmFjdF9hdHRyaWJ1dGUsIE5VTEwgfSwK ICAgeyBOVUxMLCAwLCAwLCBmYWxzZSwgZmFsc2UsIGZhbHNlLCBmYWxzZSwgTlVMTCwgTlVMTCB9 CiB9OwogCkBAIC01MzA2LDYgKzUzNjIsMTcgQEAgaGFuZGxlX2FiaV90YWdfYXR0cmlidXRlICh0 cmVlKiBub2RlLCB0cmVlIG5hbWUsIHRyZWUgYXJncywKICAgcmV0dXJuIE5VTExfVFJFRTsKIH0K IAorLyogUGVyZm9ybSBjaGVja2luZyBmb3IgY29udHJhY3QgYXR0cmlidXRlcy4gICovCisKK3Ry ZWUKK2hhbmRsZV9jb250cmFjdF9hdHRyaWJ1dGUgKHRyZWUgKkFSR19VTlVTRUQgKG5vZGUpLCB0 cmVlIEFSR19VTlVTRUQgKG5hbWUpLAorCQkJICAgdHJlZSBBUkdfVU5VU0VEIChhcmdzKSwgaW50 IEFSR19VTlVTRUQgKGZsYWdzKSwKKwkJCSAgIGJvb2wgKkFSR19VTlVTRUQgKG5vX2FkZF9hdHRy cykpCit7CisgIC8qIFRPRE86IElzIHRoZXJlIGFueSBjaGVja2luZyB3ZSBjb3VsZCBkbyBoZXJl PyAgKi8KKyAgcmV0dXJuIE5VTExfVFJFRTsKK30KKwogLyogUmV0dXJuIGEgbmV3IFBUUk1FTV9D U1Qgb2YgdGhlIGluZGljYXRlZCBUWVBFLiAgVGhlIE1FTUJFUiBpcyB0aGUKICAgIHRoaW5nIHBv aW50ZWQgdG8gYnkgdGhlIGNvbnN0YW50LiAgKi8KIApkaWZmIC0tZ2l0IGEvZ2NjL2NwL3R5cGVj ay5jYyBiL2djYy9jcC90eXBlY2suY2MKaW5kZXggMjgxZDI4MTYyOWIuLmQ1NzU3YjI3ZjQ5IDEw MDY0NAotLS0gYS9nY2MvY3AvdHlwZWNrLmNjCisrKyBiL2djYy9jcC90eXBlY2suY2MKQEAgLTEx MjQ3LDExICsxMTI0NywyMiBAQCBjaGVja19yZXR1cm5fZXhwciAodHJlZSByZXR2YWwsIGJvb2wg Km5vX3dhcm5pbmcpCiAKICAgLyogQWN0dWFsbHkgY29weSB0aGUgdmFsdWUgcmV0dXJuZWQgaW50 byB0aGUgYXBwcm9wcmlhdGUgbG9jYXRpb24uICAqLwogICBpZiAocmV0dmFsICYmIHJldHZhbCAh PSByZXN1bHQpCi0gICAgcmV0dmFsID0gY3BfYnVpbGRfaW5pdF9leHByIChyZXN1bHQsIHJldHZh bCk7CisgICAgeworICAgICAgLyogSWYgdGhlcmUncyBhIHBvc3Rjb25kaXRpb24gZm9yIGEgc2Nh bGFyIHJldHVybiB2YWx1ZSwgd3JhcAorCSByZXR2YWwgaW4gYSBjYWxsIHRvIHRoZSBwb3N0Y29u ZGl0aW9uIGZ1bmN0aW9uLiAgKi8KKyAgICAgIGlmICh0cmVlIHBvc3QgPSBhcHBseV9wb3N0Y29u ZGl0aW9uX3RvX3JldHVybiAocmV0dmFsKSkKKwlyZXR2YWwgPSBwb3N0OworICAgICAgcmV0dmFs ID0gY3BfYnVpbGRfaW5pdF9leHByIChyZXN1bHQsIHJldHZhbCk7CisgICAgfQogCiAgIGlmICh0 cmVlIHNldCA9IG1heWJlX3NldF9yZXR2YWxfc2VudGluZWwgKCkpCiAgICAgcmV0dmFsID0gYnVp bGQyIChDT01QT1VORF9FWFBSLCB2b2lkX3R5cGVfbm9kZSwgcmV0dmFsLCBzZXQpOwogCisgIC8q IElmIHRoZXJlJ3MgYSBwb3N0Y29uZGl0aW9uIGZvciBhbiBhZ2dyZWdhdGUgcmV0dXJuIHZhbHVl LCBjYWxsIHRoZQorICAgICBwb3N0Y29uZGl0aW9uIGZ1bmN0aW9uIGFmdGVyIHRoZSByZXR1cm4g b2JqZWN0IGlzIGluaXRpYWxpemVkLiAgKi8KKyAgaWYgKHRyZWUgcG9zdCA9IGFwcGx5X3Bvc3Rj b25kaXRpb25fdG9fcmV0dXJuIChyZXN1bHQpKQorICAgIHJldHZhbCA9IGJ1aWxkMiAoQ09NUE9V TkRfRVhQUiwgdm9pZF90eXBlX25vZGUsIHJldHZhbCwgcG9zdCk7CisKICAgcmV0dXJuIHJldHZh bDsKIH0KIApkaWZmIC0tZ2l0IGEvZ2NjL3Rlc3RzdWl0ZS9nKysuZGcvY29udHJhY3RzL2JhY2t0 cmFjZV9oYW5kbGVyL2Fzc2VydF9mYWlsLmNwcCBiL2djYy90ZXN0c3VpdGUvZysrLmRnL2NvbnRy YWN0cy9iYWNrdHJhY2VfaGFuZGxlci9hc3NlcnRfZmFpbC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2 NDQKaW5kZXggMDAwMDAwMDAwMDAuLjA4YzY0YmMyODQ5Ci0tLSAvZGV2L251bGwKKysrIGIvZ2Nj L3Rlc3RzdWl0ZS9nKysuZGcvY29udHJhY3RzL2JhY2t0cmFjZV9oYW5kbGVyL2Fzc2VydF9mYWls LmNwcApAQCAtMCwwICsxLDIzIEBACit2b2lkIGZ1bjEoKSB7CisgIGludCB4ID0gMDsKKyAgW1sg YXNzZXJ0OiB4IDwgMCBdXTsKK30KK25hbWVzcGFjZSB0bnMgeworICB2b2lkIGZ1bjIoKSB7Cisg ICAgZnVuMSgpOworICB9Cit9Cit0ZW1wbGF0ZTx0eXBlbmFtZSBUPgordm9pZCBmdW4zKFQgYSkg eworICB0bnM6OmZ1bjIoKTsKK30KK3ZvaWQgZnVuNCgpIHsKKyAgZnVuMyg1KTsKK30KK2ludCBt YWluKGludCwgY2hhcioqKSB7CisgIHZvaWQgKCpmcCkoKSA9IG51bGxwdHI7CisgIGZwID0gZnVu NDsKKyAgZnAoKTsKKyAgcmV0dXJuIDA7Cit9CisKZGlmZiAtLWdpdCBhL2djYy90ZXN0c3VpdGUv ZysrLmRnL2NvbnRyYWN0cy9iYWNrdHJhY2VfaGFuZGxlci9oYW5kbGVfY29udHJhY3RfdmlvbGF0 aW9uLmNwcCBiL2djYy90ZXN0c3VpdGUvZysrLmRnL2NvbnRyYWN0cy9iYWNrdHJhY2VfaGFuZGxl ci9oYW5kbGVfY29udHJhY3RfdmlvbGF0aW9uLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl eCAwMDAwMDAwMDAwMC4uYmZiYjk3ZWMwMmUKLS0tIC9kZXYvbnVsbAorKysgYi9nY2MvdGVzdHN1 aXRlL2crKy5kZy9jb250cmFjdHMvYmFja3RyYWNlX2hhbmRsZXIvaGFuZGxlX2NvbnRyYWN0X3Zp b2xhdGlvbi5jcHAKQEAgLTAsMCArMSwyNiBAQAorI2luY2x1ZGUgPGlvc3RyZWFtPgorI2luY2x1 ZGUgPGNvbnRyYWN0PgorI2luY2x1ZGUgPGV4ZWNpbmZvLmg+CisjaW5jbHVkZSA8dW5pc3RkLmg+ CisKK3N0YXRpYyBjb25zdGV4cHIgaW50IE1BWF9CQUNLVFJBQ0VfREVQVEggPSAxMjg7CisKK3Zv aWQgaGFuZGxlX2NvbnRyYWN0X3Zpb2xhdGlvbihjb25zdCBzdGQ6OmNvbnRyYWN0X3Zpb2xhdGlv biAmdmlvbGF0aW9uKSB7CisgIHNpemVfdCBfYmFja3RyYWNlU2l6ZXswfTsKKyAgdm9pZCAqX2Jh Y2t0cmFjZVtNQVhfQkFDS1RSQUNFX0RFUFRIXXt9OworCisgIF9iYWNrdHJhY2VTaXplID0gYmFj a3RyYWNlKF9iYWNrdHJhY2UsIE1BWF9CQUNLVFJBQ0VfREVQVEgpOworICBpZihfYmFja3RyYWNl U2l6ZSA9PSBNQVhfQkFDS1RSQUNFX0RFUFRIKQorICAgIHN0ZDo6Y2VyciA8PCAid2FybmluZzog YmFja3RyYWNlIG1heSBoYXZlIGJlZW4gdHJ1bmNhdGVkIiA8PCBzdGQ6OmVuZGw7CisKKyAgc3Rk OjpjZXJyIDw8ICJjb250cmFjdCB2aW9sYXRpb246ICIgPDwgdmlvbGF0aW9uLmZpbGVfbmFtZSgp CisgICAgPDwgIjoiIDw8IHZpb2xhdGlvbi5saW5lX251bWJlcigpCisgICAgPDwgIjogIiA8PCB2 aW9sYXRpb24uY29tbWVudCgpIDw8ICIgaXMgZmFsc2UiCisgICAgPDwgIiBbd2l0aCBjb250cmFj dCBsZXZlbD0iIDw8IHZpb2xhdGlvbi5hc3NlcnRpb25fbGV2ZWwoKSA8PCAiXSIgPDwgc3RkOjpl bmRsCisgICAgPDwgInZpb2xhdGlvbiBvY2N1cnMgaGVyZToiIDw8IHN0ZDo6ZW5kbDsKKyAgLy8g c2tpcCB0aGUgc3RhY2sgZnJhbWUgb2YgaGFuZGxlX2NvbnRyYWN0X3Zpb2xhdGlvbiBhbmQKKyAg Ly8gb25fY29udHJhY3RfdmlvbGF0aW9uIHRvIGdldCB0byB3aGVyZXZlciB0aGUgYXNzZXJ0IHdh cworICBiYWNrdHJhY2Vfc3ltYm9sc19mZChfYmFja3RyYWNlICsgMiwgX2JhY2t0cmFjZVNpemUg LSAxLCBTVERFUlJfRklMRU5PKTsKKyAgc3RkOjpjZXJyIDw8ICJlbmQgb2YgdmlvbGF0aW9uIiA8 PCBzdGQ6OmVuZGw7Cit9CisKZGlmZiAtLWdpdCBhL2djYy90ZXN0c3VpdGUvZysrLmRnL2NvbnRy YWN0cy9jb250cmFjdHMtYWNjZXNzMS5DIGIvZ2NjL3Rlc3RzdWl0ZS9nKysuZGcvY29udHJhY3Rz L2NvbnRyYWN0cy1hY2Nlc3MxLkMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAw MDAuLmEzYTI5ODIxMDE3Ci0tLSAvZGV2L251bGwKKysrIGIvZ2NjL3Rlc3RzdWl0ZS9nKysuZGcv Y29udHJhY3RzL2NvbnRyYWN0cy1hY2Nlc3MxLkMKQEAgLTAsMCArMSwxMjggQEAKKy8vIGVuc3Vy ZSB0aGF0IHRoYXQgcHJlY29uZGl0aW9ucyBjYW4gYWNjZXNzIHB1YmxpYywgcHJvdGVjdGVkLCBh bmQgcHJpdmF0ZQorLy8gbWVtYmVycyBvZiB0aGUgY3VycmVudCBhbmQgYmFzZSBjbGFzc2VzCisv LyB7IGRnLWRvIHJ1biB9CisvLyB7IGRnLW9wdGlvbnMgIi1zdGQ9YysrMmEgLWZjb250cmFjdHMg LWZjb250cmFjdC1jb250aW51YXRpb24tbW9kZT1vbiIgfQorCitzdHJ1Y3QgQmFzZQoreworICBp bnQgcHViey0xfTsKKworICB2aXJ0dWFsIGludCBiKCkKKyAgICBbWyBwcmU6IHB1YiA+IDAgXV0K KyAgICBbWyBwcmU6IHBybyA+IDAgXV0KKyAgICBbWyBwcmU6IHByaSA+IDAgXV0KKyAgeworICAg IHJldHVybiBwdWIgKiBwcm8gKiBwcmk7CisgIH0KKworICBwcm90ZWN0ZWQ6CisgICAgaW50IHBy b3stMX07CisgICAgaW50IHByaXstMX07Cit9OworCitzdHJ1Y3QgQ2hpbGQgOiBCYXNlCit7Cisg IGludCBmdW4oKQorICAgIFtbIHByZTogcHViID4gMCBdXQorICAgIFtbIHByZTogcHJvID4gMCBd XQorICAgIFtbIHByZTogcHJpID4gMCBdXQorICB7CisgICAgcmV0dXJuIHB1YiAqIHBybzsKKyAg fQorfTsKKworc3RydWN0IFZDaGlsZCA6IEJhc2UKK3sKKyAgaW50IGIoKQorICAgIFtbIHByZTog cHViID4gMCBdXQorICAgIFtbIHByZTogcHJvID4gMCBdXQorICAgIFtbIHByZTogcHJpID4gMCBd XQorICB7CisgICAgcmV0dXJuIHB1YiAqIHBybzsKKyAgfQorfTsKKwordGVtcGxhdGU8dHlwZW5h bWUgQj4KK3N0cnVjdCBUQ2hpbGQgOiBCCit7CisgIGludCBmdW4oKQorICAgIFtbIHByZTogQjo6 cHViID4gMCBdXQorICAgIFtbIHByZTogQjo6cHJvID4gMCBdXQorICAgIFtbIHByZTogQjo6cHJp ID4gMCBdXQorICB7CisgICAgcmV0dXJuIEI6OnB1YiAqIEI6OnBybzsKKyAgfQorfTsKKworc3Ry dWN0IFB1YkJhc2UKK3sKKyAgaW50IHB1YnstMX07CisgIGludCBwcm97LTF9OworICBpbnQgcHJp ey0xfTsKK307CisKK3N0cnVjdCBQdWJDaGlsZCA6IFB1YkJhc2UKK3sKKyAgaW50IGZ1bigpCisg ICAgW1sgcHJlOiBwdWIgPiAwIF1dCisgICAgW1sgcHJlOiBwcm8gPiAwIF1dCisgICAgW1sgcHJl OiBwcmkgPiAwIF1dCisgIHsKKyAgICByZXR1cm4gcHViICogcHJvOworICB9Cit9OworCit0ZW1w bGF0ZTx0eXBlbmFtZSBCPgorc3RydWN0IFRQdWJDaGlsZCA6IEIKK3sKKyAgaW50IGZ1bigpCisg ICAgW1sgcHJlOiBCOjpwdWIgPiAwIF1dCisgICAgW1sgcHJlOiBCOjpwcm8gPiAwIF1dCisgICAg W1sgcHJlOiBCOjpwcmkgPiAwIF1dCisgIHsKKyAgICByZXR1cm4gQjo6cHViICogQjo6cHJvOwor ICB9Cit9OworCitpbnQgbWFpbigpCit7CisgIEJhc2UgYmFzZXt9OworICBiYXNlLmIoKTsKKwor ICBDaGlsZCBjaGlsZHt9OworICBjaGlsZC5mdW4oKTsKKworICBWQ2hpbGQgdmNoaWxke307Cisg IHZjaGlsZC5iKCk7CisKKyAgVENoaWxkPEJhc2U+IHRjaGlsZHt9OworICB0Y2hpbGQuZnVuKCk7 CisKKyAgUHViQ2hpbGQgcHViY2hpbGR7fTsKKyAgcHViY2hpbGQuZnVuKCk7CisKKyAgVFB1YkNo aWxkPFB1YkJhc2U+IHRwdWJjaGlsZDsKKyAgdHB1YmNoaWxkLmZ1bigpOworCisgIHJldHVybiAw OworfQorCisvLyB7IGRnLW91dHB1dCAiZGVmYXVsdCBzdGQ6OmhhbmRsZV9jb250cmFjdF92aW9s YXRpb24gY2FsbGVkOiAuKi5DIDExIEJhc2U6OmIgLiooXG58XHJcbnxccikqIiB9CisvLyB7IGRn LW91dHB1dCAiZGVmYXVsdCBzdGQ6OmhhbmRsZV9jb250cmFjdF92aW9sYXRpb24gY2FsbGVkOiAu Ki5DIDEyIEJhc2U6OmIgLiooXG58XHJcbnxccikqIiB9CisvLyB7IGRnLW91dHB1dCAiZGVmYXVs dCBzdGQ6OmhhbmRsZV9jb250cmFjdF92aW9sYXRpb24gY2FsbGVkOiAuKi5DIDEzIEJhc2U6OmIg LiooXG58XHJcbnxccikqIiB9CisvLyB7IGRnLW91dHB1dCAiZGVmYXVsdCBzdGQ6OmhhbmRsZV9j b250cmFjdF92aW9sYXRpb24gY2FsbGVkOiAuKi5DIDI2IENoaWxkOjpmdW4gLiooXG58XHJcbnxc cikqIiB9CisvLyB7IGRnLW91dHB1dCAiZGVmYXVsdCBzdGQ6OmhhbmRsZV9jb250cmFjdF92aW9s YXRpb24gY2FsbGVkOiAuKi5DIDI3IENoaWxkOjpmdW4gLiooXG58XHJcbnxccikqIiB9CisvLyB7 IGRnLW91dHB1dCAiZGVmYXVsdCBzdGQ6OmhhbmRsZV9jb250cmFjdF92aW9sYXRpb24gY2FsbGVk OiAuKi5DIDI4IENoaWxkOjpmdW4gLiooXG58XHJcbnxccikqIiB9CisvLyB7IGRnLW91dHB1dCAi ZGVmYXVsdCBzdGQ6OmhhbmRsZV9jb250cmFjdF92aW9sYXRpb24gY2FsbGVkOiAuKi5DIDM3IFZD aGlsZDo6YiAuKihcbnxcclxufFxyKSoiIH0KKy8vIHsgZGctb3V0cHV0ICJkZWZhdWx0IHN0ZDo6 aGFuZGxlX2NvbnRyYWN0X3Zpb2xhdGlvbiBjYWxsZWQ6IC4qLkMgMzggVkNoaWxkOjpiIC4qKFxu fFxyXG58XHIpKiIgfQorLy8geyBkZy1vdXRwdXQgImRlZmF1bHQgc3RkOjpoYW5kbGVfY29udHJh Y3RfdmlvbGF0aW9uIGNhbGxlZDogLiouQyAzOSBWQ2hpbGQ6OmIgLiooXG58XHJcbnxccikqIiB9 CisvLyB7IGRnLW91dHB1dCAiZGVmYXVsdCBzdGQ6OmhhbmRsZV9jb250cmFjdF92aW9sYXRpb24g Y2FsbGVkOiAuKi5DIDQ5IFRDaGlsZDxCYXNlPjo6ZnVuIC4qKFxufFxyXG58XHIpKiIgfQorLy8g eyBkZy1vdXRwdXQgImRlZmF1bHQgc3RkOjpoYW5kbGVfY29udHJhY3RfdmlvbGF0aW9uIGNhbGxl ZDogLiouQyA1MCBUQ2hpbGQ8QmFzZT46OmZ1biAuKihcbnxcclxufFxyKSoiIH0KKy8vIHsgZGct b3V0cHV0ICJkZWZhdWx0IHN0ZDo6aGFuZGxlX2NvbnRyYWN0X3Zpb2xhdGlvbiBjYWxsZWQ6IC4q LkMgNTEgVENoaWxkPEJhc2U+OjpmdW4gLiooXG58XHJcbnxccikqIiB9CisvLyB7IGRnLW91dHB1 dCAiZGVmYXVsdCBzdGQ6OmhhbmRsZV9jb250cmFjdF92aW9sYXRpb24gY2FsbGVkOiAuKi5DIDY3 IFB1YkNoaWxkOjpmdW4gLiooXG58XHJcbnxccikqIiB9CisvLyB7IGRnLW91dHB1dCAiZGVmYXVs dCBzdGQ6OmhhbmRsZV9jb250cmFjdF92aW9sYXRpb24gY2FsbGVkOiAuKi5DIDY4IFB1YkNoaWxk OjpmdW4gLiooXG58XHJcbnxccikqIiB9CisvLyB7IGRnLW91dHB1dCAiZGVmYXVsdCBzdGQ6Omhh bmRsZV9jb250cmFjdF92aW9sYXRpb24gY2FsbGVkOiAuKi5DIDY5IFB1YkNoaWxkOjpmdW4gLioo XG58XHJcbnxccikqIiB9CisvLyB7IGRnLW91dHB1dCAiZGVmYXVsdCBzdGQ6OmhhbmRsZV9jb250 cmFjdF92aW9sYXRpb24gY2FsbGVkOiAuKi5DIDc5IFRQdWJDaGlsZDxQdWJCYXNlPjo6ZnVuIC4q KFxufFxyXG58XHIpKiIgfQorLy8geyBkZy1vdXRwdXQgImRlZmF1bHQgc3RkOjpoYW5kbGVfY29u dHJhY3RfdmlvbGF0aW9uIGNhbGxlZDogLiouQyA4MCBUUHViQ2hpbGQ8UHViQmFzZT46OmZ1biAu KihcbnxcclxufFxyKSoiIH0KKy8vIHsgZGctb3V0cHV0ICJkZWZhdWx0IHN0ZDo6aGFuZGxlX2Nv bnRyYWN0X3Zpb2xhdGlvbiBjYWxsZWQ6IC4qLkMgODEgVFB1YkNoaWxkPFB1YkJhc2U+OjpmdW4g LiooXG58XHJcbnxccikqIiB9CisKZGlmZiAtLWdpdCBhL2djYy90ZXN0c3VpdGUvZysrLmRnL2Nv bnRyYWN0cy9jb250cmFjdHMtYXNzdW1lMS5DIGIvZ2NjL3Rlc3RzdWl0ZS9nKysuZGcvY29udHJh Y3RzL2NvbnRyYWN0cy1hc3N1bWUxLkMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw MDAwMDAuLjcxMzg4NTAxZWE3Ci0tLSAvZGV2L251bGwKKysrIGIvZ2NjL3Rlc3RzdWl0ZS9nKysu ZGcvY29udHJhY3RzL2NvbnRyYWN0cy1hc3N1bWUxLkMKQEAgLTAsMCArMSwzMCBAQAorLy8gdGVz dCB0aGF0IGFzc3VtZWQgY29udHJhY3RzIGRvIGluc3RhdGlhdGUgdGVtcGxhdGVzCisvLyB7IGRn LWRvIGNvbXBpbGUgfQorLy8geyBkZy1vcHRpb25zICItc3RkPWMrKzJhIC1mY29udHJhY3RzIiB9 CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+CitpbnQgZihUIHQpCit7CisgIHJldHVybiAtdDsKK30K KworaW50IGR1bW15KCkKK3sKKyAgW1sgYXNzZXJ0IGFzc3VtZTogZigxLjApID4gMCBdXTsKKyAg cmV0dXJuIC0xOworfQorCit0ZW1wbGF0ZTw+CitpbnQgZihkb3VibGUgdCkgLy8geyBkZy1lcnJv ciAic3BlY2lhbGl6YXRpb24gb2YuKmFmdGVyIGluc3RhbnRpYXRpb24iIH0KK3sKKyAgcmV0dXJu IC0xLjA7Cit9CisKK2ludCBtYWluKCkKK3sKKyAgZHVtbXkoKTsKKyAgZigxKTsKKyAgZigxLjAp OworICByZXR1cm4gMDsKK30KKwpkaWZmIC0tZ2l0IGEvZ2NjL3Rlc3RzdWl0ZS9nKysuZGcvY29u dHJhY3RzL2NvbnRyYWN0cy1hc3N1bWUyLkMgYi9nY2MvdGVzdHN1aXRlL2crKy5kZy9jb250cmFj dHMvY29udHJhY3RzLWFzc3VtZTIuQwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw MDAwMC4uYWYxNjNlZGRjZjIKLS0tIC9kZXYvbnVsbAorKysgYi9nY2MvdGVzdHN1aXRlL2crKy5k Zy9jb250cmFjdHMvY29udHJhY3RzLWFzc3VtZTIuQwpAQCAtMCwwICsxLDM0IEBACisvLyBlbnN1 cmUgdGhhdCBhc3NlcnQgY29udHJhY3RzIGNhbiBiZSB0dXJuZWQgaW50byBjb21waWxlIHRpbWUg YXNzdW1wdGlvbnMKKy8vIGFuZCB0aGF0IHRoZXkgY2FuIGJlIHVzZWQgZm9yIG9wdGltaXphdGlv bi4KKy8vCisvLyBFdmVuIHRob3VnaCB4ID09IC0xLCB0aGUgYXNzZXJ0IGNvbnRyYWN0IHRlbGxz IHRoZSBjb21waWxlciB0aGF0IGl0IGlzCisvLyBzYWZlIHRvIGFzc3VtZSB0aGUgeCA8PSAwIGJy YW5jaCBpcyBuZXZlciB0YWtlbiBmdW4gY2FuIGJlIHRyYW5zZm9ybWVkIGludG8KKy8vIGp1c3QK Ky8vICAgcHJpbnRmKCIlZDogdGVzdCB4PjBcbiIsIHgpOworLy8gICByZXR1cm4gMDsKKy8vIHdl IGVuc3VyZSB0aGlzIGJ5IG1hdGNoaW5nIG9uIHRoZSBvdXRwdXQgYW5kIGV4cGVjdGluZyBhIDAg cmV0dXJuIGNvZGUgZnJvbQorLy8gbWFpbiAtLSB1bmxpa2UgY29udHJhY3RzLWlnbm9yZTIgd2hp Y2ggZXhwZWN0cyBhIGZhaWxpbmcgcmV0dXJuIGNvZGUKKy8vIHsgZGctZG8gcnVuIH0KKy8vIHsg ZGctb3B0aW9ucyAiLXN0ZD1jKysyYSAtZmNvbnRyYWN0cyAtZmNvbnRyYWN0LXJvbGU9ZGVmYXVs dDpuZXZlcixhc3N1bWUsaWdub3JlIC1PMSIgfQorI2luY2x1ZGUgPGNzdGRpbz4KKworaW50IGZ1 bihpbnQgeCkgeworICBbW2Fzc2VydCBhdWRpdDogeCA+IDBdXTsKKyAgaWYoeCA8PSAwKQorICB7 CisgICAgcHJpbnRmKCIlZDogdGVzdCB4PD0wIG9wdCBvdXRcbiIsIHgpOworICAgIHJldHVybiAt MTsKKyAgfQorICBlbHNlCisgIHsKKyAgICBwcmludGYoIiVkOiB0ZXN0IHg+MFxuIiwgeCk7Cisg ICAgcmV0dXJuIDA7CisgIH0KK30KKworaW50IG1haW4oaW50LCBjaGFyKiopIHsKKyAgdm9sYXRp bGUgaW50IHggPSAtMTsKKyAgcmV0dXJuIGZ1bih4KTsKK30KKworLy8geyBkZy1vdXRwdXQgIi0x OiB0ZXN0IHg+MChcbnxcclxufFxyKSoiIH0KZGlmZiAtLWdpdCBhL2djYy90ZXN0c3VpdGUvZysr LmRnL2NvbnRyYWN0cy9jb250cmFjdHMtYXNzdW1lMy5DIGIvZ2NjL3Rlc3RzdWl0ZS9nKysuZGcv Y29udHJhY3RzL2NvbnRyYWN0cy1hc3N1bWUzLkMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg MDAwMDAwMDAwMDAuLjhkYWQ2YmI1NjJlCi0tLSAvZGV2L251bGwKKysrIGIvZ2NjL3Rlc3RzdWl0 ZS9nKysuZGcvY29udHJhY3RzL2NvbnRyYWN0cy1hc3N1bWUzLkMKQEAgLTAsMCArMSwxOSBAQAor Ly8gdGVzdCB0aGF0IGFzc3VtZWQgY29udHJhY3RzIHRoYXQgcmVmZXJlbmNlIHVuZGVmaW5lZCBl bnRpdGllcyBkbyBub3QgY2F1c2UKKy8vIGEgbGluayBmYWlsdXJlCisvLyB7IGRnLWRvIHJ1biB9 CisvLyB7IGRnLW9wdGlvbnMgIi1zdGQ9YysrMmEgLWZjb250cmFjdHMiIH0KKworaW50IGYoaW50 IHQpOworCitpbnQgZHVtbXkoKQoreworICBbWyBhc3NlcnQgYXNzdW1lOiBmKDEpID4gMCBdXTsK KyAgcmV0dXJuIC0xOworfQorCitpbnQgbWFpbigpCit7CisgIGR1bW15KCk7CisgIHJldHVybiAw OworfQorCmRpZmYgLS1naXQgYS9nY2MvdGVzdHN1aXRlL2crKy5kZy9jb250cmFjdHMvY29udHJh Y3RzLWFzc3VtZTQuQyBiL2djYy90ZXN0c3VpdGUvZysrLmRnL2NvbnRyYWN0cy9jb250cmFjdHMt YXNzdW1lNC5DCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi43OTU0ZjUz MTYxMgotLS0gL2Rldi9udWxsCisrKyBiL2djYy90ZXN0c3VpdGUvZysrLmRnL2NvbnRyYWN0cy9j b250cmFjdHMtYXNzdW1lNC5DCkBAIC0wLDAgKzEsMTkgQEAKKy8vIHRlc3QgdGhhdCBhc3N1bWVk IGNvbnN0ZXhwciBjb250cmFjdHMgdGhhdCByZWZlcmVuY2UgdW5kZWZpbmVkIGVudGl0aWVzIGRv CisvLyBub3QgY2F1c2UgY29uc3RleHByIGV2YWwgZmFpbHVyZQorLy8geyBkZy1kbyBydW4gfQor Ly8geyBkZy1vcHRpb25zICItc3RkPWMrKzJhIC1mY29udHJhY3RzIiB9CisKK2NvbnN0ZXhwciBp bnQgZihpbnQgdCk7IC8vIHsgZGctd2FybmluZyAidXNlZCBidXQgbmV2ZXIgZGVmaW5lZCIgfQor Citjb25zdGV4cHIgaW50IGR1bW15KCkKK3sKKyAgW1sgYXNzZXJ0IGFzc3VtZTogZigxKSA+IDAg XV07CisgIHJldHVybiAtMTsKK30KKworaW50IG1haW4oKQoreworICBjb25zdGV4cHIgaW50IG4g PSBkdW1teSgpOworICByZXR1cm4gMDsKK30KKwpkaWZmIC0tZ2l0IGEvZ2NjL3Rlc3RzdWl0ZS9n KysuZGcvY29udHJhY3RzL2NvbnRyYWN0cy1hc3N1bWU1LkMgYi9nY2MvdGVzdHN1aXRlL2crKy5k Zy9jb250cmFjdHMvY29udHJhY3RzLWFzc3VtZTUuQwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl eCAwMDAwMDAwMDAwMC4uMzcyYzBkZWIxM2EKLS0tIC9kZXYvbnVsbAorKysgYi9nY2MvdGVzdHN1 aXRlL2crKy5kZy9jb250cmFjdHMvY29udHJhY3RzLWFzc3VtZTUuQwpAQCAtMCwwICsxLDM0IEBA CisvLyB0ZXN0IHRoYXQgYXNzdW1lZCBjb25zdGV4cHIgY29udHJhY3RzIHRoYXQgcmVmZXJlbmNl IGRlZmluZWQgZW50aXRpZXMsIG9yCisvLyB1bmRlZmluZWQgZW50aXRpZXMgaW4gdW5ldmFsdWF0 ZWQgY29udGV4dCwgY2F1c2UgY29uc3RleHByIGV2YWwgZmFpbHVyZSB3aGVuCisvLyB0aGUgcHJl ZGljYXRlIGlzIGNvbnN0ZXhwciBmYWxzZQorLy8geyBkZy1kbyBjb21waWxlIH0KKy8vIHsgZGct b3B0aW9ucyAiLXN0ZD1jKysyYSAtZmNvbnRyYWN0cyIgfQorCitjb25zdGV4cHIgaW50IGYoaW50 IHQpCit7CisgIHJldHVybiAtMTsKK30KKworY29uc3RleHByIGludCBkdW1teSgpCit7CisgIFtb IGFzc2VydCBhc3N1bWU6IGYoMSkgPiAwIF1dOworICByZXR1cm4gLTE7Cit9CisKK2NvbnN0ZXhw ciBpbnQgdW5kZWYoaW50IHQpOworCitjb25zdGV4cHIgaW50IGR1bW15MigpCit7CisgIFtbIGFz c2VydCBhc3N1bWU6IHNpemVvZihkZWNsdHlwZSh1bmRlZigxKSkpIDwgMCBdXTsKKyAgcmV0dXJu IC0xOworfQorCitpbnQgbWFpbigpCit7CisgIGNvbnN0ZXhwciBpbnQgbiA9IGR1bW15KCk7IC8v IHsgZGctbWVzc2FnZSAiaW4gLmNvbnN0ZXhwci4gZXhwYW5zaW9uIiB9CisgIC8vIHsgZGctZXJy b3IgImNvbnRyYWN0IHByZWRpY2F0ZSIgIiIgeyB0YXJnZXQgKi0qLSogfSAxNCB9CisgIGNvbnN0 ZXhwciBpbnQgbSA9IGR1bW15MigpOyAvLyB7IGRnLW1lc3NhZ2UgImluIC5jb25zdGV4cHIuIGV4 cGFuc2lvbiIgfQorICAvLyB7IGRnLWVycm9yICJjb250cmFjdCBwcmVkaWNhdGUiICIiIHsgdGFy Z2V0ICotKi0qIH0gMjIgfQorICByZXR1cm4gMDsKK30KKwpkaWZmIC0tZ2l0IGEvZ2NjL3Rlc3Rz dWl0ZS9nKysuZGcvY29udHJhY3RzL2NvbnRyYWN0cy1hc3N1bWU2LkMgYi9nY2MvdGVzdHN1aXRl L2crKy5kZy9jb250cmFjdHMvY29udHJhY3RzLWFzc3VtZTYuQwpuZXcgZmlsZSBtb2RlIDEwMDY0 NAppbmRleCAwMDAwMDAwMDAwMC4uOTMxYzRkMGMxOWMKLS0tIC9kZXYvbnVsbAorKysgYi9nY2Mv dGVzdHN1aXRlL2crKy5kZy9jb250cmFjdHMvY29udHJhY3RzLWFzc3VtZTYuQwpAQCAtMCwwICsx LDYxIEBACisvLyBlbnN1cmUgdGhhdCBub24tZGVmaW5lZCBlbnRpdGllcyBpbiBhc3N1bWUgY29u dHJhY3RzIGRvIG5vdCBlcnJvcgorLy8geyBkZy1kbyBjb21waWxlIH0KKy8vIHsgZGctb3B0aW9u cyAiLXN0ZD1jKysyYSAtZmNvbnRyYWN0cyIgfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPgorVCBp ZDIoVCBuKTsKKworaW50IGZ1bihpbnQgbikKKyAgW1sgcHJlIGFzc3VtZTogaWQyKG4pID4gMCBd XQorICBbWyBwcmU6IG4gPiAwIF1dCit7CisgIHJldHVybiAtbjsKK30KKwordGVtcGxhdGU8dHlw ZW5hbWUgVD4KK1QgdGZ1bihUIG4pCisgIFtbIHByZSBhc3N1bWU6IGlkMihuKSA+IDAgXV0KKyAg W1sgcHJlOiBuID4gMCBdXQoreworICByZXR1cm4gLW47Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1l IFQ+Citjb25zdGV4cHIgVCBpZChUIG4pOyAvLyB7IGRnLXdhcm5pbmcgInVzZWQgYnV0IG5ldmVy IGRlZmluZWQiIH0KKwordGVtcGxhdGU8dHlwZW5hbWUgVD4KK2NvbnN0ZXhwciBUIGNmdW4oVCBu KQorICBbWyBwcmUgYXNzdW1lOiBpZChuKSA+IDAgXV0KKyAgW1sgcHJlOiBpZChuKSA+IDAgXV0g Ly8geyBkZy1lcnJvciAidXNlZCBiZWZvcmUgaXRzIGRlZmluaXRpb24iIH0KK3sKKyAgcmV0dXJu IC1uOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPgorY29uc3RleHByIFQgaWQzKFQgbikKK3sK KyAgcmV0dXJuIG47Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+Citjb25zdGV4cHIgVCBjZnVu MihUIG4pCisgIFtbIHByZSBhc3N1bWU6IGlkMyhuKSA+IDAgXV0gLy8geyBkZy1lcnJvciAiY29u dHJhY3QgcHJlZGljYXRlIiB9Cit7CisgIHJldHVybiAtbjsKK30KKwordGVtcGxhdGU8dHlwZW5h bWUgVD4KK2NvbnN0ZXhwciBUIGNmdW4zKFQgbikKKyAgW1sgcHJlOiBpZDMobikgPiAwIF1dIC8v IHsgZGctZXJyb3IgImNvbnRyYWN0IHByZWRpY2F0ZSIgfQoreworICByZXR1cm4gLW47Cit9CisK K2ludCBtYWluKCkgeworICBjb25zdGV4cHIgaW50IG4gPSBjZnVuKC01KTsKKyAgY29uc3RleHBy IGludCBuMiA9IGNmdW4yKC01KTsKKyAgY29uc3RleHByIGludCBuMyA9IGNmdW4zKC01KTsKKyAg ZnVuKC01KTsKKyAgdGZ1bigtNSk7Cit9CisKZGlmZiAtLWdpdCBhL2djYy90ZXN0c3VpdGUvZysr LmRnL2NvbnRyYWN0cy9jb250cmFjdHMtY29tZGF0MS5DIGIvZ2NjL3Rlc3RzdWl0ZS9nKysuZGcv Y29udHJhY3RzL2NvbnRyYWN0cy1jb21kYXQxLkMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg MDAwMDAwMDAwMDAuLjMzODRhZTYyMjVlCi0tLSAvZGV2L251bGwKKysrIGIvZ2NjL3Rlc3RzdWl0 ZS9nKysuZGcvY29udHJhY3RzL2NvbnRyYWN0cy1jb21kYXQxLkMKQEAgLTAsMCArMSwxOSBAQAor Ly8gQ29udHJhY3QgY29uZGl0aW9uIGZ1bmN0aW9ucyBzaG91bGQgYmUgbG9jYWwgc3ltYm9scyBp biBhIGNvbWRhdCBncm91cCB3aXRoCisvLyB0aGUgZ3VhcmRlZCBmdW5jdGlvbi4KKworLy8geyBk Zy1kbyBjb21waWxlIHsgdGFyZ2V0IHsgYysrMjAgJiYgY29tZGF0X2dyb3VwIH0gfSB9CisvLyB7 IGRnLWFkZGl0aW9uYWwtb3B0aW9ucyAtZmNvbnRyYWN0cyB9CisvLyB7IGRnLWZpbmFsIHsgc2Nh bi1hc3NlbWJsZXItbm90ICJfWjFmaS5wcmUsY29tZGF0IiB9IH0KKy8vIHsgZGctZmluYWwgeyBz Y2FuLWFzc2VtYmxlci1ub3Qgeyh3ZWFrfGdsb2JsKVteXG5dKl9aMWZpLnByZX0gfSB9CisKK2lu bGluZSBpbnQgZihpbnQgaSkKKyAgW1sgcHJlOiBpID4gMCBdXQoreworICByZXR1cm4gaTsKK30K KworaW50IG1haW4oKQoreworICBpZiAoZig0MikgIT0gNDIpCisgICAgX19idWlsdGluX2Fib3J0 ICgpOworfQpkaWZmIC0tZ2l0IGEvZ2NjL3Rlc3RzdWl0ZS9nKysuZGcvY29udHJhY3RzL2NvbnRy YWN0cy1jb25maWcxLkMgYi9nY2MvdGVzdHN1aXRlL2crKy5kZy9jb250cmFjdHMvY29udHJhY3Rz LWNvbmZpZzEuQwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uOWUzMmJh YzUzNWQKLS0tIC9kZXYvbnVsbAorKysgYi9nY2MvdGVzdHN1aXRlL2crKy5kZy9jb250cmFjdHMv Y29udHJhY3RzLWNvbmZpZzEuQwpAQCAtMCwwICsxLDM2IEBACisvLyBTbWFsbCB0ZXN0IHRvIGVu c3VyZSB0aGF0IHRoZSBsZXZlbCBhbmQgcm9sZSBpbmZvcm1hdGlvbiBwcmludGVkIGJ5IHZhcmlv dXMKKy8vIGNvbnRyYWN0IGNvbmZpZ3VyYXRpb25zIGlzIGNvcnJlY3QuCisvLyB7IGRnLWRvIHJ1 biB9CisvLyB7IGRnLW9wdGlvbnMgIi1zdGQ9YysrMmEgLWZjb250cmFjdHMgLWZjb250cmFjdC1y b2xlPWRlZmF1bHQ6bWF5YmUsbWF5YmUsaWdub3JlIiB9CisKK2ludCBmdW4oaW50IG4pCisgIFtb IHBvc3QgZGVmYXVsdCByOiByID4gMCBdXQoreworICByZXR1cm4gLW47Cit9CisKK2ludCBtYWlu KGludCwgY2hhciAqKikKK3sKKyAgW1sgYXNzZXJ0IGRlZmF1bHQ6IGZhbHNlIF1dOworICBbWyBh c3NlcnQ6IGZhbHNlIF1dOworICBbWyBhc3NlcnQgYXVkaXQ6IGZhbHNlIF1dOworICBbWyBhc3Nl cnQgZGVmYXVsdCAlbmV3X3JvbGU6IGZhbHNlIF1dOworICBbWyBhc3NlcnQgJW5ld19yb2xlOiBm YWxzZSBdXTsKKyAgW1sgYXNzZXJ0IGF1ZGl0ICVuZXdfcm9sZTogZmFsc2UgXV07CisgIFtbIGFz c2VydCBjaGVja19tYXliZV9jb250aW51ZTogZmFsc2UgXV07CisgIFtbIGFzc2VydCAlZGVmYXVs dDogZmFsc2UgXV07CisgIFtbIGFzc2VydCBhdWRpdCAlZGVmYXVsdDogZmFsc2UgXV07CisgIGZ1 big1KTsKKyAgcmV0dXJuIDA7Cit9CisKKy8vIHsgZGctb3V0cHV0ICJkZWZhdWx0IHN0ZDo6aGFu ZGxlX2NvbnRyYWN0X3Zpb2xhdGlvbiBjYWxsZWQ6IC4qbWFpbiBmYWxzZSBkZWZhdWx0IGRlZmF1 bHQgMS4qKFxufFxyXG58XHIpKiIgfQorLy8geyBkZy1vdXRwdXQgImRlZmF1bHQgc3RkOjpoYW5k bGVfY29udHJhY3RfdmlvbGF0aW9uIGNhbGxlZDogLiptYWluIGZhbHNlIGRlZmF1bHQgZGVmYXVs dCAxLiooXG58XHJcbnxccikqIiB9CisvLyB7IGRnLW91dHB1dCAiZGVmYXVsdCBzdGQ6OmhhbmRs ZV9jb250cmFjdF92aW9sYXRpb24gY2FsbGVkOiAuKm1haW4gZmFsc2UgYXVkaXQgZGVmYXVsdCAx LiooXG58XHJcbnxccikqIiB9CisvLyB7IGRnLW91dHB1dCAiZGVmYXVsdCBzdGQ6OmhhbmRsZV9j b250cmFjdF92aW9sYXRpb24gY2FsbGVkOiAuKm1haW4gZmFsc2UgZGVmYXVsdCBuZXdfcm9sZSAx LiooXG58XHJcbnxccikqIiB9CisvLyB7IGRnLW91dHB1dCAiZGVmYXVsdCBzdGQ6OmhhbmRsZV9j b250cmFjdF92aW9sYXRpb24gY2FsbGVkOiAuKm1haW4gZmFsc2UgZGVmYXVsdCBuZXdfcm9sZSAx LiooXG58XHJcbnxccikqIiB9CisvLyB7IGRnLW91dHB1dCAiZGVmYXVsdCBzdGQ6OmhhbmRsZV9j b250cmFjdF92aW9sYXRpb24gY2FsbGVkOiAuKm1haW4gZmFsc2UgYXVkaXQgbmV3X3JvbGUgMS4q KFxufFxyXG58XHIpKiIgfQorLy8geyBkZy1vdXRwdXQgImRlZmF1bHQgc3RkOjpoYW5kbGVfY29u dHJhY3RfdmlvbGF0aW9uIGNhbGxlZDogLiptYWluIGZhbHNlICAgMS4qKFxufFxyXG58XHIpKiIg fQorLy8geyBkZy1vdXRwdXQgImRlZmF1bHQgc3RkOjpoYW5kbGVfY29udHJhY3RfdmlvbGF0aW9u IGNhbGxlZDogLiptYWluIGZhbHNlIGRlZmF1bHQgZGVmYXVsdCAxLiooXG58XHJcbnxccikqIiB9 CisvLyB7IGRnLW91dHB1dCAiZGVmYXVsdCBzdGQ6OmhhbmRsZV9jb250cmFjdF92aW9sYXRpb24g Y2FsbGVkOiAuKm1haW4gZmFsc2UgYXVkaXQgZGVmYXVsdCAxLiooXG58XHJcbnxccikqIiB9CisK ZGlmZiAtLWdpdCBhL2djYy90ZXN0c3VpdGUvZysrLmRnL2NvbnRyYWN0cy9jb250cmFjdHMtY29u c3RleHByMS5DIGIvZ2NjL3Rlc3RzdWl0ZS9nKysuZGcvY29udHJhY3RzL2NvbnRyYWN0cy1jb25z dGV4cHIxLkMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLjRjMTExMzU4 ZDliCi0tLSAvZGV2L251bGwKKysrIGIvZ2NjL3Rlc3RzdWl0ZS9nKysuZGcvY29udHJhY3RzL2Nv bnRyYWN0cy1jb25zdGV4cHIxLkMKQEAgLTAsMCArMSw3NCBAQAorLy8gZW5zdXJlIHRoYXQgcGFz c2luZyBwcmUvcG9zdCBkbyBub3QgYWZmZWN0IGNvbnN0ZXhwciBmdW5jdGlvbnMKKy8vIGVuc3Vy ZSB0aGF0IGZhaWxpbmcgcHJlL3Bvc3QgZ2VuZXJhdGUgYW4gZXJyb3IgYXQgcnVudGltZSBpbiBj b25zdGV4cHIgZnVuY3MKKy8vIHsgZGctZG8gcnVuIH0KKy8vIHsgZGctb3B0aW9ucyAiLXN0ZD1j KysyMCAtZmNvbnRyYWN0cyAtZmNvbnRyYWN0LWNvbnRpbnVhdGlvbi1tb2RlPW9uIiB9CisKK2Nv bnN0ZXhwciBpbnQgd2Z1bihpbnQgYSkKKyAgW1sgcHJlOiBhID4gMCBdXQorICBbWyBwb3N0IHI6 IHIgPiAwIF1dCit7CisgIHJldHVybiBhOworfQorCitjb25zdGV4cHIgaW50IGZmdW4oaW50IGEp CisgIFtbIHByZTogYSA+IDAgXV0KKyAgW1sgcG9zdCByOiByID4gMCBdXQoreworICByZXR1cm4g YTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgVD4KK2NvbnN0ZXhwciBpbnQgdGZ1bihUIGEpCisg IFtbIHByZTogYSA+IDAgXV0KKyAgW1sgcG9zdCByOiByID4gMCBdXQoreworICByZXR1cm4gYTsK K30KKwordGVtcGxhdGU8dHlwZW5hbWUgVD4KK2NvbnN0ZXhwciBpbnQgd3RmdW4oVCBhKQorICBb WyBwcmU6IGEgPiAwIF1dCisgIFtbIHBvc3QgcjogciA+IDAgXV0KK3sKKyAgcmV0dXJuIGE7Cit9 CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+Citjb25zdGV4cHIgaW50IGZ0ZnVuKFQgYSkKKyAgW1sg cHJlOiBhID4gMCBdXQorICBbWyBwb3N0IHI6IHIgPiAwIF1dCit7CisgIHJldHVybiBhOworfQor Citjb25zdGV4cHIgaW50IGV4cGxpY2l0Zm4oaW50IGEpCisgIFtbIHByZSBpZ25vcmU6IGEgPiAw IF1dCisgIFtbIHByZSBjaGVja19tYXliZV9jb250aW51ZTogYSA+IDAgXV0KKyAgW1sgcG9zdCBp Z25vcmUgcjogciA+IDAgXV0KKyAgW1sgcG9zdCBjaGVja19tYXliZV9jb250aW51ZSByOiByID4g MCBdXQoreworICByZXR1cm4gYTsKK30KKworaW50IG1haW4oaW50LCBjaGFyICoqKSB7CisgIGNv bnN0ZXhwciBpbnQgYSA9IHdmdW4oMTApOworICBpbnQgYiA9IGZmdW4oLTEwKTsKKyAgY29uc3Rl eHByIGludCBjID0gd3RmdW4oMTApOworICBpbnQgZCA9IGZ0ZnVuKC0xMCk7CisKKyAgaW50IGUg PSBleHBsaWNpdGZuKC0xMCk7CisKKyAgaW50IHogPSBmdGZ1bigtMTAuMCk7CisKKyAgcmV0dXJu IDA7Cit9CisKKy8vIHsgZGctb3V0cHV0ICJkZWZhdWx0IHN0ZDo6aGFuZGxlX2NvbnRyYWN0X3Zp b2xhdGlvbiBjYWxsZWQ6IC4qLkMgMTQgZmZ1biAuKihcbnxcclxufFxyKSoiIH0KKy8vIHsgZGct b3V0cHV0ICJkZWZhdWx0IHN0ZDo6aGFuZGxlX2NvbnRyYWN0X3Zpb2xhdGlvbiBjYWxsZWQ6IC4q LkMgMTUgZmZ1biAuKihcbnxcclxufFxyKSoiIH0KKy8vIHsgZGctb3V0cHV0ICJkZWZhdWx0IHN0 ZDo6aGFuZGxlX2NvbnRyYWN0X3Zpb2xhdGlvbiBjYWxsZWQ6IC4qLkMgMzggZnRmdW48aW50PiAu KihcbnxcclxufFxyKSoiIH0KKy8vIHsgZGctb3V0cHV0ICJkZWZhdWx0IHN0ZDo6aGFuZGxlX2Nv bnRyYWN0X3Zpb2xhdGlvbiBjYWxsZWQ6IC4qLkMgMzkgZnRmdW48aW50PiAuKihcbnxcclxufFxy KSoiIH0KKy8vIHsgZGctb3V0cHV0ICJkZWZhdWx0IHN0ZDo6aGFuZGxlX2NvbnRyYWN0X3Zpb2xh dGlvbiBjYWxsZWQ6IC4qLkMgNDYgZXhwbGljaXRmbiAuKihcbnxcclxufFxyKSoiIH0KKy8vIHsg ZGctb3V0cHV0ICJkZWZhdWx0IHN0ZDo6aGFuZGxlX2NvbnRyYWN0X3Zpb2xhdGlvbiBjYWxsZWQ6 IC4qLkMgNDggZXhwbGljaXRmbiAuKihcbnxcclxufFxyKSoiIH0KKy8vIHsgZGctb3V0cHV0ICJk ZWZhdWx0IHN0ZDo6aGFuZGxlX2NvbnRyYWN0X3Zpb2xhdGlvbiBjYWxsZWQ6IC4qLkMgMzggZnRm dW48ZG91YmxlPiAuKihcbnxcclxufFxyKSoiIH0KKy8vIHsgZGctb3V0cHV0ICJkZWZhdWx0IHN0 ZDo6aGFuZGxlX2NvbnRyYWN0X3Zpb2xhdGlvbiBjYWxsZWQ6IC4qLkMgMzkgZnRmdW48ZG91Ymxl PiAuKihcbnxcclxufFxyKSoiIH0KKwpkaWZmIC0tZ2l0IGEvZ2NjL3Rlc3RzdWl0ZS9nKysuZGcv Y29udHJhY3RzL2NvbnRyYWN0cy1jb25zdGV4cHIyLkMgYi9nY2MvdGVzdHN1aXRlL2crKy5kZy9j b250cmFjdHMvY29udHJhY3RzLWNvbnN0ZXhwcjIuQwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl eCAwMDAwMDAwMDAwMC4uZDBkNDFmMDU5MjcKLS0tIC9kZXYvbnVsbAorKysgYi9nY2MvdGVzdHN1 aXRlL2crKy5kZy9jb250cmFjdHMvY29udHJhY3RzLWNvbnN0ZXhwcjIuQwpAQCAtMCwwICsxLDU4 IEBACisvLyBlbnN1cmUgdGhhdCBmYWlsaW5nIHByZS9wb3N0IGNhbiBmYWlsIGF0IGNvbnN0ZXhw ciB0aW1lCisvLyB7IGRnLWRvIGNvbXBpbGUgfQorLy8geyBkZy1vcHRpb25zICItc3RkPWMrKzIw IC1mY29udHJhY3RzIC1mY29udHJhY3QtY29udGludWF0aW9uLW1vZGU9b24iIH0KKworY29uc3Rl eHByIGludCBmZnVuKGludCBhKQorICBbWyBwcmU6IGEgPiAwIF1dCisgIFtbIHBvc3QgcjogciA+ IDEwIF1dCit7CisgIHJldHVybiBhOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPgorY29uc3Rl eHByIGludCBmdGZ1bihUIGEpCisgIFtbIHByZTogYSA+IDAgXV0KKyAgW1sgcG9zdCByOiByID4g MTAgXV0KK3sKKyAgcmV0dXJuIGE7Cit9CisKK2NvbnN0ZXhwciBpbnQgZXhwbGljaXRmbihpbnQg YSkKKyAgW1sgcHJlIGlnbm9yZTogYSA+IDAgXV0KKyAgW1sgcHJlIGNoZWNrX21heWJlX2NvbnRp bnVlOiBhID4gMCBdXQorICBbWyBwb3N0IGlnbm9yZSByOiByID4gMTAgXV0KKyAgW1sgcG9zdCBj aGVja19tYXliZV9jb250aW51ZSByOiByID4gMTAgXV0KK3sKKyAgcmV0dXJuIGE7Cit9CisKK3Rl bXBsYXRlPHR5cGVuYW1lIFQ+Citjb25zdGV4cHIgaW50IGZ0ZnVuMihUIGEpCisgIFtbIHByZTog YSA+IDAgXV0KKyAgW1sgcG9zdCByOiByID4gMTAgXV0KK3sKKyAgcmV0dXJuIGE7Cit9CisKK2lu dCBtYWluKGludCwgY2hhciAqKikgeworICBjb25zdGV4cHIgaW50IGEgPSBmZnVuKC0xMCk7Cisg IC8vIHsgZGctZXJyb3IgImNvbnRyYWN0IHByZWRpY2F0ZSIgIiIgeyB0YXJnZXQgKi0qLSogfSA2 IH0KKyAgY29uc3RleHByIGludCBiID0gZnRmdW4oLTEwKTsKKyAgLy8geyBkZy1lcnJvciAiY29u dHJhY3QgcHJlZGljYXRlIiAiIiB7IHRhcmdldCAqLSotKiB9IDE0IH0KKyAgY29uc3RleHByIGlu dCBjID0gZXhwbGljaXRmbigtMTApOworICAvLyB7IGRnLWVycm9yICJjb250cmFjdCBwcmVkaWNh dGUiICIiIHsgdGFyZ2V0ICotKi0qIH0gMjIgfQorICBjb25zdGV4cHIgaW50IGQgPSBmdGZ1bjIo LTEwLjApOworICAvLyB7IGRnLWVycm9yICJjb250cmFjdCBwcmVkaWNhdGUiICIiIHsgdGFyZ2V0 ICotKi0qIH0gMzEgfQorCisgIGNvbnN0ZXhwciBpbnQgZSA9IGZmdW4oNSk7CisgIC8vIHsgZGct ZXJyb3IgImNvbnRyYWN0IHByZWRpY2F0ZSIgIiIgeyB0YXJnZXQgKi0qLSogfSA3IH0KKyAgY29u c3RleHByIGludCBmID0gZnRmdW4oNSk7CisgIC8vIHsgZGctZXJyb3IgImNvbnRyYWN0IHByZWRp Y2F0ZSIgIiIgeyB0YXJnZXQgKi0qLSogfSAxNSB9CisgIGNvbnN0ZXhwciBpbnQgZyA9IGV4cGxp Y2l0Zm4oNSk7CisgIC8vIHsgZGctZXJyb3IgImNvbnRyYWN0IHByZWRpY2F0ZSIgIiIgeyB0YXJn ZXQgKi0qLSogfSAyNCB9CisgIGNvbnN0ZXhwciBpbnQgaCA9IGZ0ZnVuMig1LjUpOworICAvLyB7 IGRnLWVycm9yICJjb250cmFjdCBwcmVkaWNhdGUiICIiIHsgdGFyZ2V0ICotKi0qIH0gMzIgfQor CisgIHJldHVybiAwOworfQorCmRpZmYgLS1naXQgYS9nY2MvdGVzdHN1aXRlL2crKy5kZy9jb250 cmFjdHMvY29udHJhY3RzLWNvbnN0ZXhwcjMuQyBiL2djYy90ZXN0c3VpdGUvZysrLmRnL2NvbnRy YWN0cy9jb250cmFjdHMtY29uc3RleHByMy5DCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw MDAwMDAwMDAwLi44ODI2MjIwZWY5MQotLS0gL2Rldi9udWxsCisrKyBiL2djYy90ZXN0c3VpdGUv ZysrLmRnL2NvbnRyYWN0cy9jb250cmFjdHMtY29uc3RleHByMy5DCkBAIC0wLDAgKzEsMTAgQEAK Ky8vIEFuIGFzc3VtZWQgY29udHJhY3Qgc2hvdWxkbid0IGJyZWFrIGNvbnN0YW50IGV2YWx1YXRp b24uCisKKy8vIHsgZGctZG8gY29tcGlsZSB7IHRhcmdldCBjKysyMCB9IH0KKy8vIHsgZGctYWRk aXRpb25hbC1vcHRpb25zIC1mY29udHJhY3RzIH0KKworYm9vbCBiOworCitjb25zdGV4cHIgaW50 IGYoKSBbWyBwcmUgYXNzdW1lOiBiIF1dIHsgcmV0dXJuIDQyOyB9CisKK3N0YXRpY19hc3NlcnQg KGYoKSA+IDApOwpkaWZmIC0tZ2l0IGEvZ2NjL3Rlc3RzdWl0ZS9nKysuZGcvY29udHJhY3RzL2Nv bnRyYWN0cy1jb252ZXJzaW9uMS5DIGIvZ2NjL3Rlc3RzdWl0ZS9nKysuZGcvY29udHJhY3RzL2Nv bnRyYWN0cy1jb252ZXJzaW9uMS5DCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAw MDAwLi5mZjVlMjNmMmYxNAotLS0gL2Rldi9udWxsCisrKyBiL2djYy90ZXN0c3VpdGUvZysrLmRn L2NvbnRyYWN0cy9jb250cmFjdHMtY29udmVyc2lvbjEuQwpAQCAtMCwwICsxLDE5IEBACisvLyBU ZXN0IHRvIGVuc3VyZSB0aGF0IGRpYWdub3N0aWMgbG9jYXRpb24gZm9yIGNvbmRpdGlvbiBjb252 ZXJzaW9uIGlzIGluIHRoZQorLy8gcmlnaHQgcGxhY2UuCisvLyB7IGRnLWRvIGNvbXBpbGUgfQor Ly8geyBkZy1vcHRpb25zICItc3RkPWMrKzJhIC1mY29udHJhY3RzIiB9CisKKwordGVtcGxhdGU8 dHlwZW5hbWUgVD4KK3ZvaWQgZm4oKQorICBbWyBwcmU6IFR7fSBdXSAvLyB7IGRnLWVycm9yICJu byBtYXRjaCIgfQoreworfQorCitzdHJ1Y3QgWiB7IH07CisKK2ludCBtYWluKGludCwgY2hhcioq KSB7CisgIGZuPGludD4oKTsKKyAgZm48Wj4oKTsKKyAgcmV0dXJuIDA7Cit9CmRpZmYgLS1naXQg YS9nY2MvdGVzdHN1aXRlL2crKy5kZy9jb250cmFjdHMvY29udHJhY3RzLWN0b3ItZHRvcjEuQyBi L2djYy90ZXN0c3VpdGUvZysrLmRnL2NvbnRyYWN0cy9jb250cmFjdHMtY3Rvci1kdG9yMS5DCm5l dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi5iY2Q2MDk2YjVhNwotLS0gL2Rl di9udWxsCisrKyBiL2djYy90ZXN0c3VpdGUvZysrLmRnL2NvbnRyYWN0cy9jb250cmFjdHMtY3Rv ci1kdG9yMS5DCkBAIC0wLDAgKzEsMTc3IEBACisvLyBUZXN0cyB0byBlbnN1cmUgdGhhdCBjb250 cmFjdHMgYXJlIHByb3Blcmx5IGVtaXR0ZWQgZm9yIGNvbnN0cnVjdG9ycywKKy8vIGRlc3RydWN0 b3JzLCBhbmQgdGhlaXIgaW50ZXJzZWN0aW9uIHdpdGggdGVtcGxhdGVzLgorLy8geyBkZy1kbyBj b21waWxlIH0KKy8vIHsgZGctb3B0aW9ucyAiLXN0ZD1jKysyYSAtZmNvbnRyYWN0cyIgfQorCiti b29sIHByZV97ZmFsc2V9LCBwb3N0X3tmYWxzZX07Citib29sIGRlbGVnYXRlX3tmYWxzZX07CisK K3N0cnVjdCBTCit7CisgIFMoKSBbWyBwcmU6IHByZV8gXV0gW1sgcG9zdDogcG9zdF8gXV07Cisg IH5TKCkgW1sgcHJlOiBwcmVfIF1dIFtbIHBvc3Q6IHBvc3RfIF1dOworfTsKKworUzo6UygpIHsg cmV0dXJuOyB9CitTOjp+UygpIHsgcmV0dXJuOyB9CisKK3N0cnVjdCBTSW5saW5lCit7CisgIFNJ bmxpbmUoKSBbWyBwcmU6IHByZV8gXV0gW1sgcG9zdDogcG9zdF8gXV0geyByZXR1cm47IH0KKyAg flNJbmxpbmUoKSBbWyBwcmU6IHByZV8gXV0gW1sgcG9zdDogcG9zdF8gXV0geyByZXR1cm47IH0K K307CisKK3N0cnVjdCBTRGVsZWdhdGUwCit7CisgIFNEZWxlZ2F0ZTAoaW50KSBbWyBwcmU6IHBy ZV8gXV0gW1sgcG9zdDogcG9zdF8gXV0geyByZXR1cm47IH0KKyAgU0RlbGVnYXRlMCgpIDogU0Rl bGVnYXRlMCgwKSB7IHJldHVybjsgfQorICB+U0RlbGVnYXRlMCgpIFtbIHByZTogcHJlXyBdXSBb WyBwb3N0OiBwb3N0XyBdXSB7IHJldHVybjsgfQorfTsKKworc3RydWN0IFNEZWxlZ2F0ZTEKK3sK KyAgU0RlbGVnYXRlMShpbnQpIHsgcmV0dXJuOyB9CisgIFNEZWxlZ2F0ZTEoKSBbWyBwcmU6IHBy ZV8gXV0gW1sgcG9zdDogcG9zdF8gXV0gOiBTRGVsZWdhdGUxKDApIHsgcmV0dXJuOyB9CisgIH5T RGVsZWdhdGUxKCkgW1sgcHJlOiBwcmVfIF1dIFtbIHBvc3Q6IHBvc3RfIF1dIHsgcmV0dXJuOyB9 Cit9OworCitzdHJ1Y3QgU0RlbGVnYXRlMgoreworICBTRGVsZWdhdGUyKGludCkgW1sgcHJlOiBw cmVfIF1dIFtbIHBvc3Q6IHBvc3RfIF1dIHsgcmV0dXJuOyB9CisgIFNEZWxlZ2F0ZTIoKSBbWyBw cmU6IHByZV8gJiYgZGVsZWdhdGVfIF1dIFtbIHBvc3Q6IHBvc3RfICYmIGRlbGVnYXRlXyBdXSA6 IFNEZWxlZ2F0ZTIoMCkgeyByZXR1cm47IH0KKyAgflNEZWxlZ2F0ZTIoKSBbWyBwcmU6IHByZV8g XV0gW1sgcG9zdDogcG9zdF8gXV0geyByZXR1cm47IH0KK307CisKK3N0cnVjdCBTRGVsZWdhdGUz Cit7CisgIFNEZWxlZ2F0ZTMoaW50KSBbWyBwcmU6IHByZV8gXV0gW1sgcG9zdDogcG9zdF8gXV0g eyByZXR1cm47IH0KKyAgU0RlbGVnYXRlMygpIFtbIHByZTogcHJlXyAmJiBkZWxlZ2F0ZV8gXV0g W1sgcG9zdDogcG9zdF8gJiYgZGVsZWdhdGVfIF1dIDogU0RlbGVnYXRlMygwKSB7IHJldHVybjsg fQorICB+U0RlbGVnYXRlMygpIFtbIHByZTogcHJlXyBdXSBbWyBwb3N0OiBwb3N0XyBdXSB7IHJl dHVybjsgfQorfTsKKwordGVtcGxhdGU8dHlwZW5hbWUgVD4KK3N0cnVjdCBTMQoreworICBTMSgp IFtbIHByZTogcHJlXyBdXSBbWyBwb3N0OiBwb3N0XyBdXSB7IH0KK307CisKK3N0cnVjdCBTMgor eworICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPgorICBTMihUKSBbWyBwcmU6IHByZV8gXV0gW1sgcG9z dDogcG9zdF8gXV0geyB9Cit9OworCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPgorc3RydWN0IFMzCit7 CisgIHRlbXBsYXRlPHR5cGVuYW1lIFM+CisgIFMzKFMpIFtbIHByZTogcHJlXyBdXSBbWyBwb3N0 OiBwb3N0XyBdXSB7IH0KK307CisKK3N0cnVjdCBHMAoreworICBHMCgpIFtbIHBvc3Q6IHggPiAw IF1dIHt9CisgIH5HMCgpIFtbIHByZTogeCA+IDAgXV0ge30KKyAgaW50IHh7LTF9OworfTsKKwor c3RydWN0IEcxCit7CisgIEcxKCkgW1sgcG9zdDogdGhpcy0+eCA+IDAgXV0ge30KKyAgfkcxKCkg W1sgcHJlOiB0aGlzLT54ID4gMCBdXSB7fQorICBpbnQgeHstMX07Cit9OworCitpbnQgeHstMX07 CisKK3N0cnVjdCBHMgoreworICBHMigpIFtbIHByZTogOjp4ID4gMCBdXSB7fQorICB+RzIoKSBb WyBwb3N0OiA6OnggPiAwIF1dIHt9CisgIGludCB4ezF9OworfTsKKwordm9pZCB0ZXN0MCgpCit7 CisgIFMgczsKKyAgU0lubGluZSBzaTsKKyAgU0RlbGVnYXRlMCBzZDA7CisgIFNEZWxlZ2F0ZTEg c2QxOworICBTRGVsZWdhdGUyIHNkMjsKKyAgU0RlbGVnYXRlMyBzZDM7CisgIFMxPGludD4gczFf aTsKKyAgUzE8ZG91YmxlPiBzMV9kOworICBTMiBzMl9pezF9OworICBTMiBzMl9key4xfTsKKyAg UzM8aW50PiBzM19pX2l7MX07CisgIFMzPGludD4gczNfaV9key4xfTsKKyAgUzM8ZG91YmxlPiBz M19kX2l7MX07CisgIFMzPGRvdWJsZT4gczNfZF9key4xfTsKK30KKwordm9pZCB0ZXN0MSgpCit7 CisgIEcwIGcwOworICBHMSBnMTsKKyAgRzIgZzI7Cit9CisKK2ludCBtYWluKGludCwgY2hhcioq KQoreworICB0ZXN0MCgpOworICB0ZXN0MSgpOworICByZXR1cm4gMDsKK307CisKKy8vIHRlc3Qw CisvLyB7IGRnLW91dHB1dCAiZGVmYXVsdCBzdGQ6OmhhbmRsZV9jb250cmFjdF92aW9sYXRpb24g Y2FsbGVkOiAuKi5DIDExIFM6OlMgLiooXG58XHJcbnxccikqIiB9CisvLyB7IGRnLW91dHB1dCAi ZGVmYXVsdCBzdGQ6OmhhbmRsZV9jb250cmFjdF92aW9sYXRpb24gY2FsbGVkOiAuKi5DIDExIFM6 OlMgLiooXG58XHJcbnxccikqIiB9CisvLyB7IGRnLW91dHB1dCAiZGVmYXVsdCBzdGQ6OmhhbmRs ZV9jb250cmFjdF92aW9sYXRpb24gY2FsbGVkOiAuKi5DIDIwIFNJbmxpbmU6OlNJbmxpbmUgLioo XG58XHJcbnxccikqIiB9CisvLyB7IGRnLW91dHB1dCAiZGVmYXVsdCBzdGQ6OmhhbmRsZV9jb250 cmFjdF92aW9sYXRpb24gY2FsbGVkOiAuKi5DIDIwIFNJbmxpbmU6OlNJbmxpbmUgLiooXG58XHJc bnxccikqIiB9CisvLyB7IGRnLW91dHB1dCAiZGVmYXVsdCBzdGQ6OmhhbmRsZV9jb250cmFjdF92 aW9sYXRpb24gY2FsbGVkOiAuKi5DIDI2IFNEZWxlZ2F0ZTA6OlNEZWxlZ2F0ZTAgLiooXG58XHJc bnxccikqIiB9CisvLyB7IGRnLW91dHB1dCAiZGVmYXVsdCBzdGQ6OmhhbmRsZV9jb250cmFjdF92 aW9sYXRpb24gY2FsbGVkOiAuKi5DIDI2IFNEZWxlZ2F0ZTA6OlNEZWxlZ2F0ZTAgLiooXG58XHJc bnxccikqIiB9CisvLyB7IGRnLW91dHB1dCAiZGVmYXVsdCBzdGQ6OmhhbmRsZV9jb250cmFjdF92 aW9sYXRpb24gY2FsbGVkOiAuKi5DIDM0IFNEZWxlZ2F0ZTE6OlNEZWxlZ2F0ZTEgLiooXG58XHJc bnxccikqIiB9CisvLyB7IGRnLW91dHB1dCAiZGVmYXVsdCBzdGQ6OmhhbmRsZV9jb250cmFjdF92 aW9sYXRpb24gY2FsbGVkOiAuKi5DIDM0IFNEZWxlZ2F0ZTE6OlNEZWxlZ2F0ZTEgLiooXG58XHJc bnxccikqIiB9CisvLyB7IGRnLW91dHB1dCAiZGVmYXVsdCBzdGQ6OmhhbmRsZV9jb250cmFjdF92 aW9sYXRpb24gY2FsbGVkOiAuKi5DIDQxIFNEZWxlZ2F0ZTI6OlNEZWxlZ2F0ZTIgLiooXG58XHJc bnxccikqIiB9CisvLyB7IGRnLW91dHB1dCAiZGVmYXVsdCBzdGQ6OmhhbmRsZV9jb250cmFjdF92 aW9sYXRpb24gY2FsbGVkOiAuKi5DIDQwIFNEZWxlZ2F0ZTI6OlNEZWxlZ2F0ZTIgLiooXG58XHJc bnxccikqIiB9CisvLyB7IGRnLW91dHB1dCAiZGVmYXVsdCBzdGQ6OmhhbmRsZV9jb250cmFjdF92 aW9sYXRpb24gY2FsbGVkOiAuKi5DIDQwIFNEZWxlZ2F0ZTI6OlNEZWxlZ2F0ZTIgLiooXG58XHJc bnxccikqIiB9CisvLyB7IGRnLW91dHB1dCAiZGVmYXVsdCBzdGQ6OmhhbmRsZV9jb250cmFjdF92 aW9sYXRpb24gY2FsbGVkOiAuKi5DIDQxIFNEZWxlZ2F0ZTI6OlNEZWxlZ2F0ZTIgLiooXG58XHJc bnxccikqIiB9CisvLyB7IGRnLW91dHB1dCAiZGVmYXVsdCBzdGQ6OmhhbmRsZV9jb250cmFjdF92 aW9sYXRpb24gY2FsbGVkOiAuKi5DIDQ4IFNEZWxlZ2F0ZTM6OlNEZWxlZ2F0ZTMgLiooXG58XHJc bnxccikqIiB9CisvLyB7IGRnLW91dHB1dCAiZGVmYXVsdCBzdGQ6OmhhbmRsZV9jb250cmFjdF92 aW9sYXRpb24gY2FsbGVkOiAuKi5DIDQ3IFNEZWxlZ2F0ZTM6OlNEZWxlZ2F0ZTMgLiooXG58XHJc bnxccikqIiB9CisvLyB7IGRnLW91dHB1dCAiZGVmYXVsdCBzdGQ6OmhhbmRsZV9jb250cmFjdF92 aW9sYXRpb24gY2FsbGVkOiAuKi5DIDQ3IFNEZWxlZ2F0ZTM6OlNEZWxlZ2F0ZTMgLiooXG58XHJc bnxccikqIiB9CisvLyB7IGRnLW91dHB1dCAiZGVmYXVsdCBzdGQ6OmhhbmRsZV9jb250cmFjdF92 aW9sYXRpb24gY2FsbGVkOiAuKi5DIDQ4IFNEZWxlZ2F0ZTM6OlNEZWxlZ2F0ZTMgLiooXG58XHJc bnxccikqIiB9CisvLyB7IGRnLW91dHB1dCAiZGVmYXVsdCBzdGQ6OmhhbmRsZV9jb250cmFjdF92 aW9sYXRpb24gY2FsbGVkOiAuKi5DIDU1IFMxPGludD46OlMxIC4qKFxufFxyXG58XHIpKiIgfQor Ly8geyBkZy1vdXRwdXQgImRlZmF1bHQgc3RkOjpoYW5kbGVfY29udHJhY3RfdmlvbGF0aW9uIGNh bGxlZDogLiouQyA1NSBTMTxpbnQ+OjpTMSAuKihcbnxcclxufFxyKSoiIH0KKy8vIHsgZGctb3V0 cHV0ICJkZWZhdWx0IHN0ZDo6aGFuZGxlX2NvbnRyYWN0X3Zpb2xhdGlvbiBjYWxsZWQ6IC4qLkMg NTUgUzE8ZG91YmxlPjo6UzEgLiooXG58XHJcbnxccikqIiB9CisvLyB7IGRnLW91dHB1dCAiZGVm YXVsdCBzdGQ6OmhhbmRsZV9jb250cmFjdF92aW9sYXRpb24gY2FsbGVkOiAuKi5DIDU1IFMxPGRv dWJsZT46OlMxIC4qKFxufFxyXG58XHIpKiIgfQorLy8geyBkZy1vdXRwdXQgImRlZmF1bHQgc3Rk OjpoYW5kbGVfY29udHJhY3RfdmlvbGF0aW9uIGNhbGxlZDogLiouQyA2MSBTMjo6UzI8aW50PiAu KihcbnxcclxufFxyKSoiIH0KKy8vIHsgZGctb3V0cHV0ICJkZWZhdWx0IHN0ZDo6aGFuZGxlX2Nv bnRyYWN0X3Zpb2xhdGlvbiBjYWxsZWQ6IC4qLkMgNjEgUzI6OlMyPGludD4gLiooXG58XHJcbnxc cikqIiB9CisvLyB7IGRnLW91dHB1dCAiZGVmYXVsdCBzdGQ6OmhhbmRsZV9jb250cmFjdF92aW9s YXRpb24gY2FsbGVkOiAuKi5DIDYxIFMyOjpTMjxkb3VibGU+IC4qKFxufFxyXG58XHIpKiIgfQor Ly8geyBkZy1vdXRwdXQgImRlZmF1bHQgc3RkOjpoYW5kbGVfY29udHJhY3RfdmlvbGF0aW9uIGNh bGxlZDogLiouQyA2MSBTMjo6UzI8ZG91YmxlPiAuKihcbnxcclxufFxyKSoiIH0KKy8vIHsgZGct b3V0cHV0ICJkZWZhdWx0IHN0ZDo6aGFuZGxlX2NvbnRyYWN0X3Zpb2xhdGlvbiBjYWxsZWQ6IC4q LkMgNjggUzM8aW50Pjo6UzM8aW50PiAuKihcbnxcclxufFxyKSoiIH0KKy8vIHsgZGctb3V0cHV0 ICJkZWZhdWx0IHN0ZDo6aGFuZGxlX2NvbnRyYWN0X3Zpb2xhdGlvbiBjYWxsZWQ6IC4qLkMgNjgg UzM8aW50Pjo6UzM8aW50PiAuKihcbnxcclxufFxyKSoiIH0KKy8vIHsgZGctb3V0cHV0ICJkZWZh dWx0IHN0ZDo6aGFuZGxlX2NvbnRyYWN0X3Zpb2xhdGlvbiBjYWxsZWQ6IC4qLkMgNjggUzM8aW50 Pjo6UzM8ZG91YmxlPiAuKihcbnxcclxufFxyKSoiIH0KKy8vIHsgZGctb3V0cHV0ICJkZWZhdWx0 IHN0ZDo6aGFuZGxlX2NvbnRyYWN0X3Zpb2xhdGlvbiBjYWxsZWQ6IC4qLkMgNjggUzM8aW50Pjo6 UzM8ZG91YmxlPiAuKihcbnxcclxufFxyKSoiIH0KKy8vIHsgZGctb3V0cHV0ICJkZWZhdWx0IHN0 ZDo6aGFuZGxlX2NvbnRyYWN0X3Zpb2xhdGlvbiBjYWxsZWQ6IC4qLkMgNjggUzM8ZG91YmxlPjo6 UzM8aW50PiAuKihcbnxcclxufFxyKSoiIH0KKy8vIHsgZGctb3V0cHV0ICJkZWZhdWx0IHN0ZDo6 aGFuZGxlX2NvbnRyYWN0X3Zpb2xhdGlvbiBjYWxsZWQ6IC4qLkMgNjggUzM8ZG91YmxlPjo6UzM8 aW50PiAuKihcbnxcclxufFxyKSoiIH0KKy8vIHsgZGctb3V0cHV0ICJkZWZhdWx0IHN0ZDo6aGFu ZGxlX2NvbnRyYWN0X3Zpb2xhdGlvbiBjYWxsZWQ6IC4qLkMgNjggUzM8ZG91YmxlPjo6UzM8ZG91 YmxlPiAuKihcbnxcclxufFxyKSoiIH0KKy8vIHsgZGctb3V0cHV0ICJkZWZhdWx0IHN0ZDo6aGFu ZGxlX2NvbnRyYWN0X3Zpb2xhdGlvbiBjYWxsZWQ6IC4qLkMgNjggUzM8ZG91YmxlPjo6UzM8ZG91 YmxlPiAuKihcbnxcclxufFxyKSoiIH0KKy8vIHsgZGctb3V0cHV0ICJkZWZhdWx0IHN0ZDo6aGFu ZGxlX2NvbnRyYWN0X3Zpb2xhdGlvbiBjYWxsZWQ6IC4qLkMgNDkgU0RlbGVnYXRlMzo6flNEZWxl Z2F0ZTMgLiooXG58XHJcbnxccikqIiB9CisvLyB7IGRnLW91dHB1dCAiZGVmYXVsdCBzdGQ6Omhh bmRsZV9jb250cmFjdF92aW9sYXRpb24gY2FsbGVkOiAuKi5DIDQ5IFNEZWxlZ2F0ZTM6On5TRGVs ZWdhdGUzIC4qKFxufFxyXG58XHIpKiIgfQorLy8geyBkZy1vdXRwdXQgImRlZmF1bHQgc3RkOjpo YW5kbGVfY29udHJhY3RfdmlvbGF0aW9uIGNhbGxlZDogLiouQyA0MiBTRGVsZWdhdGUyOjp+U0Rl bGVnYXRlMiAuKihcbnxcclxufFxyKSoiIH0KKy8vIHsgZGctb3V0cHV0ICJkZWZhdWx0IHN0ZDo6 aGFuZGxlX2NvbnRyYWN0X3Zpb2xhdGlvbiBjYWxsZWQ6IC4qLkMgNDIgU0RlbGVnYXRlMjo6flNE ZWxlZ2F0ZTIgLiooXG58XHJcbnxccikqIiB9CisvLyB7IGRnLW91dHB1dCAiZGVmYXVsdCBzdGQ6 OmhhbmRsZV9jb250cmFjdF92aW9sYXRpb24gY2FsbGVkOiAuKi5DIDM1IFNEZWxlZ2F0ZTE6On5T RGVsZWdhdGUxIC4qKFxufFxyXG58XHIpKiIgfQorLy8geyBkZy1vdXRwdXQgImRlZmF1bHQgc3Rk OjpoYW5kbGVfY29udHJhY3RfdmlvbGF0aW9uIGNhbGxlZDogLiouQyAzNSBTRGVsZWdhdGUxOjp+ U0RlbGVnYXRlMSAuKihcbnxcclxufFxyKSoiIH0KKy8vIHsgZGctb3V0cHV0ICJkZWZhdWx0IHN0 ZDo6aGFuZGxlX2NvbnRyYWN0X3Zpb2xhdGlvbiBjYWxsZWQ6IC4qLkMgMjggU0RlbGVnYXRlMDo6 flNEZWxlZ2F0ZTAgLiooXG58XHJcbnxccikqIiB9CisvLyB7IGRnLW91dHB1dCAiZGVmYXVsdCBz dGQ6OmhhbmRsZV9jb250cmFjdF92aW9sYXRpb24gY2FsbGVkOiAuKi5DIDI4IFNEZWxlZ2F0ZTA6 On5TRGVsZWdhdGUwIC4qKFxufFxyXG58XHIpKiIgfQorLy8geyBkZy1vdXRwdXQgImRlZmF1bHQg c3RkOjpoYW5kbGVfY29udHJhY3RfdmlvbGF0aW9uIGNhbGxlZDogLiouQyAyMSBTSW5saW5lOjp+ U0lubGluZSAuKihcbnxcclxufFxyKSoiIH0KKy8vIHsgZGctb3V0cHV0ICJkZWZhdWx0IHN0ZDo6 aGFuZGxlX2NvbnRyYWN0X3Zpb2xhdGlvbiBjYWxsZWQ6IC4qLkMgMjEgU0lubGluZTo6flNJbmxp bmUgLiooXG58XHJcbnxccikqIiB9CisvLyB7IGRnLW91dHB1dCAiZGVmYXVsdCBzdGQ6OmhhbmRs ZV9jb250cmFjdF92aW9sYXRpb24gY2FsbGVkOiAuKi5DIDEyIFM6On5TIC4qKFxufFxyXG58XHIp KiIgfQorLy8geyBkZy1vdXRwdXQgImRlZmF1bHQgc3RkOjpoYW5kbGVfY29udHJhY3RfdmlvbGF0 aW9uIGNhbGxlZDogLiouQyAxMiBTOjp+UyAuKihcbnxcclxufFxyKSoiIH0KKworLy8gdGVzdDEK Ky8vIHsgZGctb3V0cHV0ICJkZWZhdWx0IHN0ZDo6aGFuZGxlX2NvbnRyYWN0X3Zpb2xhdGlvbiBj YWxsZWQ6IC4qLkMgNzMgRzA6OkcwIC4qKFxufFxyXG58XHIpKiIgfQorLy8geyBkZy1vdXRwdXQg ImRlZmF1bHQgc3RkOjpoYW5kbGVfY29udHJhY3RfdmlvbGF0aW9uIGNhbGxlZDogLiouQyA4MCBH MTo6RzEgLiooXG58XHJcbnxccikqIiB9CisvLyB7IGRnLW91dHB1dCAiZGVmYXVsdCBzdGQ6Omhh bmRsZV9jb250cmFjdF92aW9sYXRpb24gY2FsbGVkOiAuKi5DIDgxIEcxOjp+RzEgLiooXG58XHJc bnxccikqIiB9CisvLyB7IGRnLW91dHB1dCAiZGVmYXVsdCBzdGQ6OmhhbmRsZV9jb250cmFjdF92 aW9sYXRpb24gY2FsbGVkOiAuKi5DIDc0IEcwOjp+RzAgLiooXG58XHJcbnxccikqIiB9CisKZGlm ZiAtLWdpdCBhL2djYy90ZXN0c3VpdGUvZysrLmRnL2NvbnRyYWN0cy9jb250cmFjdHMtY3Rvci1k dG9yMi5DIGIvZ2NjL3Rlc3RzdWl0ZS9nKysuZGcvY29udHJhY3RzL2NvbnRyYWN0cy1jdG9yLWR0 b3IyLkMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLmJhM2I3Njc4ZWY2 Ci0tLSAvZGV2L251bGwKKysrIGIvZ2NjL3Rlc3RzdWl0ZS9nKysuZGcvY29udHJhY3RzL2NvbnRy YWN0cy1jdG9yLWR0b3IyLkMKQEAgLTAsMCArMSwzNSBAQAorLy8gVGVzdHMgdG8gZW5zdXJlIHRo YXQgYW4gaW52YWxpZCB0aGlzIHBhcm0gY2Fubm90IGJlIHVzZWQgaW4gcHJlIG9uIGN0b3JzIG9y CisvLyBpbiBwb3N0IG9uIGR0b3JzLgorLy8geyBkZy1kbyBjb21waWxlIH0KKy8vIHsgZGctb3B0 aW9ucyAiLXN0ZD1jKysyYSAtZmNvbnRyYWN0cyIgfQorCitzdHJ1Y3QgRjAKK3sKKyAgRjAoKSBb WyBwcmU6IHggPiAwIF1dOyAvLyB7IGRnLWVycm9yICJpbnZhbGlkIHVzZSBvZiBtZW1iZXIiIH0K KyAgfkYwKCkgW1sgcG9zdDogeCA+IDAgXV07IC8vIHsgZGctZXJyb3IgImludmFsaWQgdXNlIG9m IG1lbWJlciIgfQorICBpbnQgeHstMX07Cit9OworCitzdHJ1Y3QgRjEKK3sKKyAgRjEoKSBbWyBw cmU6IHRoaXMtPnggPiAwIF1dOyAvLyB7IGRnLWVycm9yICJtYXkgbm90IGJlIHVzZWQiIH0KKyAg fkYxKCkgW1sgcG9zdDogdGhpcy0+eCA+IDAgXV07IC8vIHsgZGctZXJyb3IgIm1heSBub3QgYmUg dXNlZCIgfQorICBpbnQgeHstMX07Cit9OworCitzdHJ1Y3QgRjIKK3sKKyAgRjIoKQorICAgIFtb IHBvc3QgcmV0OiBmYWxzZSBdXSAvLyB7IGRnLWVycm9yICJkb2VzIG5vdCByZXR1cm4gYSB2YWx1 ZSIgfQorICB7CisgIH0KKyAgfkYyKCkKKyAgICBbWyBwb3N0IHI6IGZhbHNlIF1dIC8vIHsgZGct ZXJyb3IgImRvZXMgbm90IHJldHVybiBhIHZhbHVlIiB9CisgIHsKKyAgfQorICB2b2lkIGYoKQor ICAgIFtbIHBvc3QgcjogZmFsc2UgXV0gLy8geyBkZy1lcnJvciAiZG9lcyBub3QgcmV0dXJuIGEg dmFsdWUiIH0KKyAgeworICB9Cit9OworCmRpZmYgLS1naXQgYS9nY2MvdGVzdHN1aXRlL2crKy5k Zy9jb250cmFjdHMvY29udHJhY3RzLWN2MS5DIGIvZ2NjL3Rlc3RzdWl0ZS9nKysuZGcvY29udHJh Y3RzL2NvbnRyYWN0cy1jdjEuQwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAw MC4uODI2NmI0ZmVkOGYKLS0tIC9kZXYvbnVsbAorKysgYi9nY2MvdGVzdHN1aXRlL2crKy5kZy9j b250cmFjdHMvY29udHJhY3RzLWN2MS5DCkBAIC0wLDAgKzEsMzcgQEAKKy8vIFRlc3RzIHRvIGVu c3VyZSB0aGF0IGNvbnRyYWN0cyBoYXZlIGEgcHJvcGVybHkgY3YgcXVhbGlmaWVkIHRoaXMKKy8v IHsgZGctZG8gY29tcGlsZSB9CisvLyB7IGRnLW9wdGlvbnMgIi1zdGQ9YysrMmEgLWZjb250cmFj dHMiIH0KKworc3RydWN0IFMKK3sKKyAgaW50IGcoKSBjb25zdCB7IHJldHVybiB4XzsgfQorICBp bnQgZigpIHsgcmV0dXJuIHhfOyB9CisKKyAgdm9pZCBtZW1fYygpIGNvbnN0CisgICAgW1sgcHJl OiBmKCkgXV0gLy8geyBkZy1lcnJvciAiZGlzY2FyZHMgcXVhbGlmaWVycyIgfQorICB7CisgIH0K KyAgdm9pZCBtZW1fbmMoKQorICAgIFtbIHByZTogZigpIF1dCisgIHsKKyAgfQorCisgIHZvaWQg bWVtY19jKCkgY29uc3QKKyAgICBbWyBwcmU6IGcoKSBdXQorICB7CisgIH0KKyAgdm9pZCBtZW1j X25jKCkKKyAgICBbWyBwcmU6IGcoKSBdXQorICB7CisgIH0KKworICBwcml2YXRlOgorICAgIGlu dCB4X3stMTB9OworfTsKKworaW50IG1haW4oaW50LCBjaGFyKiopCit7CisgIFMgczsKKyAgcmV0 dXJuIDA7Cit9OworCmRpZmYgLS1naXQgYS9nY2MvdGVzdHN1aXRlL2crKy5kZy9jb250cmFjdHMv Y29udHJhY3RzLWRlZHVjZWQxLkMgYi9nY2MvdGVzdHN1aXRlL2crKy5kZy9jb250cmFjdHMvY29u dHJhY3RzLWRlZHVjZWQxLkMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAu LjIwMGVjNzM0ODAwCi0tLSAvZGV2L251bGwKKysrIGIvZ2NjL3Rlc3RzdWl0ZS9nKysuZGcvY29u dHJhY3RzL2NvbnRyYWN0cy1kZWR1Y2VkMS5DCkBAIC0wLDAgKzEsMTA4IEBACisvLyBUZXN0cyB0 byBlbnN1cmUgdGhhdCBkZWR1Y2VkIHJldHVybiB0eXBlcyB3b3JrIHdpdGggcG9zdGNvbmRpdGlv bnMgdXNpbmcKKy8vIHRoZSByZXR1cm4gdmFsdWUgb24gZGVmaW5pbmcgZGVjbGFyYXRpb25zLgor Ly8geyBkZy1kbyBjb21waWxlIH0KKy8vIHsgZGctb3B0aW9ucyAiLXN0ZD1jKysyYSAtZmNvbnRy YWN0cyAtLXBhcmFtIGdnYy1taW4taGVhcHNpemU9MCAtLXBhcmFtIGdnYy1taW4tZXhwYW5kPTAi IH0KKworYXV0byB1bmRlZHVjZWQoaW50IHopCit7CisgIGlmICghKHNpemVvZihkZWNsdHlwZSh1 bmRlZHVjZWQoNSkpKSA+IDQpKSAvLyB7IGRnLWVycm9yICJiZWZvcmUgZGVkdWN0aW9uIiB9Cisg ICAgcmV0dXJuIDU7CisgIHJldHVybiA0OworfQorCisvLyBkZWZpbmluZyBkZWNsYXJhdGlvbiwg ZmluZQorYXV0byBnMChpbnQgYSkgW1sgcHJlOiBhIDwgMCBdXSBbWyBwb3N0IHI6IHIgPiAwIF1d Cit7CisgIHJldHVybiAtYSAqIDEuMjsKK30KKworLy8gbm9uIGRlZmluaW5nIHBvc3QgdXNpbmcg bm9uZGVkdWNlZCBpZGVudGlmaWVyLCBmaW5lCitpbnQgZzEoaW50IG0pIFtbIHBvc3QgcjogciA9 PSBtIF1dOworCitpbnQgZzEoaW50IG4pIFtbIHBvc3QgczogcyA9PSBuIF1dCit7CisgIHJldHVy biAtbjsKK30KKworaW50IGcyKGludCB6KQorICBbWyBwcmU6IHNpemVvZihkZWNsdHlwZShnMig1 KSkpID4gNCBdXTsgLy8geyBkZy1lcnJvciAibm90IGRlY2xhcmVkIiB9CisKK2ludCBnMyhpbnQg eikKKyAgW1sgcHJlOiBzaXplb2YoZGVjbHR5cGUoZzIoNSkpKSA+IDQgXV0KK3sKKyAgcmV0dXJu IC16OworfQorCisvLyBkZWR1Y2VkIHRoYXQgZG9lc24ndCB1c2UgcmV0dXJuLCBnb29kCithdXRv IGc0KGludCBtKSBbWyBwb3N0OiBtIF1dOworCithdXRvIGc0KGludCBtKSBbWyBwb3N0OiBtIF1d Cit7CisgIHJldHVybiAtbTsKK30KKworYXV0byBnNShpbnQgbSkgW1sgcHJlOiBtIF1dOworCith dXRvIGc1KGludCBtKSBbWyBwcmU6IG0gXV0KK3sKKyAgcmV0dXJuIC1tOworfQorCit0ZW1wbGF0 ZTx0eXBlbmFtZSBUPgorYXV0byBnNihUIHQpIFtbIHBvc3QgcjogciA9PSB0IF1dOworCit0ZW1w bGF0ZTx0eXBlbmFtZSBTPgorYXV0byBnNihTIHMpIFtbIHBvc3QgcTogcSA9PSBzIF1dCit7Cisg IHJldHVybiBzOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPgorVCBnNyhUIHQpIFtbIHBvc3Qg cjogciA9PSB0IF1dOworCit0ZW1wbGF0ZTx0eXBlbmFtZSBTPgorUyBnNyhTIHMpIFtbIHBvc3Qg cTogcSA9PSBzIF1dCit7CisgIHJldHVybiBzOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPgor YXV0byBnOChUIHQpIFtbIHBvc3QgcjogciA9PSB0ICYmIHNpemVvZihkZWNsdHlwZSg6Omc4KHQp KSkgPiAyIF1dOyAvLyB7IGRnLWVycm9yICJub3QgYmVlbiBkZWNsYXJlZCIgfQorCisvLyBUaGlz IGZhaWx1cmUgaXMgcmVsYXRlZCB0byB0aGUgZmFjdCB0aGF0IHdlJ3ZlIGludmFsaWRhdGVkIHRo ZSBwcmV2aW91cworLy8gY29udHJhY3QuIAordGVtcGxhdGU8dHlwZW5hbWUgUz4KK2F1dG8gZzgo UyBzKSBbWyBwb3N0IHE6IHEgPT0gcyAmJiBzaXplb2YoZGVjbHR5cGUoOjpnOChzKSkpID4gMiBd XSAvLyB7IGRnLWVycm9yICJtaXNtYXRjaGVkIiB9Cit7CisgIHJldHVybiBzOworfQorCisvLyBu b24gZGVmaW5pbmcgcHJlLCBiYWQKK2F1dG8gZjAoaW50IHopCisgIFtbIHByZTogc2l6ZW9mKGRl Y2x0eXBlKGYwKDUpKSkgPiA0IF1dOyAvLyB7IGRnLWVycm9yICJub3QgZGVjbGFyZWQiIH0KKwor Ly8gZGVmaW5pbmcgcHJlLCBzdGlsbCBpbGwgZm9ybWVkCithdXRvIGYxKGludCB6KQorICBbWyBw cmU6IHNpemVvZihkZWNsdHlwZShmMSg1KSkpID4gNCBdXSAvLyB7IGRnLWVycm9yICJub3QgZGVj bGFyZWQiIH0KK3sKKyAgcmV0dXJuICc1JzsKK30KKworLy8gdW5kZWR1Y2VkIHVzaW5nIHBvc3Rj b24sIE9LCithdXRvIGYyKGludCBtKSBbWyBwb3N0IHI6IHIgPT0gbSBdXTsKKworYXV0byBmMihp bnQgbikgW1sgcG9zdCBzOiBzID09IG4gXV0KK3sKKyAgcmV0dXJuIG47Cit9CisKK3RlbXBsYXRl PHR5cGVuYW1lIFQ+Cit2b2lkIGYzKFQgdCkgW1sgcG9zdCByOiBmYWxzZSBdXSAvLyB7IGRnLWVy cm9yICJmdW5jdGlvbiBkb2VzIG5vdCByZXR1cm4gYSB2YWx1ZSIgfQoreworfQorCitpbnQgbWFp bihpbnQsIGNoYXIqKikKK3sKKyAgcmV0dXJuIDA7Cit9CisKZGlmZiAtLWdpdCBhL2djYy90ZXN0 c3VpdGUvZysrLmRnL2NvbnRyYWN0cy9jb250cmFjdHMtZGVkdWNlZDIuQyBiL2djYy90ZXN0c3Vp dGUvZysrLmRnL2NvbnRyYWN0cy9jb250cmFjdHMtZGVkdWNlZDIuQwpuZXcgZmlsZSBtb2RlIDEw MDY0NAppbmRleCAwMDAwMDAwMDAwMC4uZGE5YzAxOWYxMGEKLS0tIC9kZXYvbnVsbAorKysgYi9n Y2MvdGVzdHN1aXRlL2crKy5kZy9jb250cmFjdHMvY29udHJhY3RzLWRlZHVjZWQyLkMKQEAgLTAs MCArMSw4NCBAQAorLy8gY2hlY2sgdGhhdCBjb250cmFjdHMgd29yayBhcm91bmQgZGVkdWNlZCBy ZXR1cm4gdHlwZXMKKy8vIHsgZGctZG8gcnVuIH0KKy8vIHsgZGctb3B0aW9ucyAiLXN0ZD1jKysy YSAtZmNvbnRyYWN0cyAtZmNvbnRyYWN0LWNvbnRpbnVhdGlvbi1tb2RlPW9uIiB9CisKK2F1dG8g ZzAoaW50IGEpIFtbIHByZTogYSA8IDAgXV0gW1sgcG9zdCByOiByID4gMCBdXQoreworICByZXR1 cm4gLWEgKiAxLjI7Cit9CisKK2ludCBnMShpbnQgbSkgW1sgcG9zdCByOiByID09IG0gXV07CisK K2ludCBnMShpbnQgbikgW1sgcG9zdCBzOiBzID09IG4gXV0KK3sKKyAgcmV0dXJuIC1uOworfQor CitpbnQgZzIoaW50IHopCit7CisgIHJldHVybiAtejsKK30KKworaW50IGczKGludCB6KQorICBb WyBwcmU6IHNpemVvZihkZWNsdHlwZShnMig1KSkpID4gNCBdXQoreworICByZXR1cm4gLXo7Cit9 CisKK2F1dG8gZzQoaW50IG0pIFtbIHBvc3Q6IG0gXV07CisKK2F1dG8gZzQoaW50IG0pIFtbIHBv c3Q6IG0gXV0KK3sKKyAgcmV0dXJuIC1tOworfQorCithdXRvIGc1KGludCBtKSBbWyBwcmU6IG0g XV07CisKK2F1dG8gZzUoaW50IG0pIFtbIHByZTogbSBdXQoreworICByZXR1cm4gLW07Cit9CisK K3RlbXBsYXRlPHR5cGVuYW1lIFQ+CithdXRvIGc2KFQgdCkgW1sgcG9zdCByOiByID09IHQgXV07 CisKK3RlbXBsYXRlPHR5cGVuYW1lIFM+CithdXRvIGc2KFMgcykgW1sgcG9zdCBxOiBxID09IHMg XV0KK3sKKyAgcmV0dXJuIC1zOworfQorCisvLyB0ZW1wbGF0ZTx0eXBlbmFtZSBUPgorLy8gVCBn NyhUIHQpIFtbIHBvc3QgcjogciA9PSB0IF1dOworCit0ZW1wbGF0ZTx0eXBlbmFtZSBTPgorUyBn NyhTIHMpIFtbIHBvc3QgcTogcSA9PSBzIF1dCit7CisgIHJldHVybiAtczsKK30KKworaW50IG1h aW4oaW50LCBjaGFyKiopIHsKKyAgZzAoNSk7CisgIGcxKDYpOworICBnMigxKTsKKyAgZzMoMSk7 CisgIGc0KDApOworICBnNSgwKTsKKyAgZzYoNSk7CisgIGc2KDUuNSk7CisgIGc3KDUpOworICBn Nyg2LjYpOworICByZXR1cm4gMDsKK30KKworLy8geyBkZy1vdXRwdXQgImRlZmF1bHQgc3RkOjpo YW5kbGVfY29udHJhY3RfdmlvbGF0aW9uIGNhbGxlZDogLiouQyA1IGcwIC4qKFxufFxyXG58XHIp KiIgfQorLy8geyBkZy1vdXRwdXQgImRlZmF1bHQgc3RkOjpoYW5kbGVfY29udHJhY3RfdmlvbGF0 aW9uIGNhbGxlZDogLiouQyA1IGcwIC4qKFxufFxyXG58XHIpKiIgfQorLy8geyBkZy1vdXRwdXQg ImRlZmF1bHQgc3RkOjpoYW5kbGVfY29udHJhY3RfdmlvbGF0aW9uIGNhbGxlZDogLiouQyAxMiBn MSAuKihcbnxcclxufFxyKSoiIH0KKy8vIHsgZGctb3V0cHV0ICJkZWZhdWx0IHN0ZDo6aGFuZGxl X2NvbnRyYWN0X3Zpb2xhdGlvbiBjYWxsZWQ6IC4qLkMgMjMgZzMgLiooXG58XHJcbnxccikqIiB9 CisvLyB7IGRnLW91dHB1dCAiZGVmYXVsdCBzdGQ6OmhhbmRsZV9jb250cmFjdF92aW9sYXRpb24g Y2FsbGVkOiAuKi5DIDMwIGc0IC4qKFxufFxyXG58XHIpKiIgfQorLy8geyBkZy1vdXRwdXQgImRl ZmF1bHQgc3RkOjpoYW5kbGVfY29udHJhY3RfdmlvbGF0aW9uIGNhbGxlZDogLiouQyAzNyBnNSAu KihcbnxcclxufFxyKSoiIH0KKy8vIHsgZGctb3V0cHV0ICJkZWZhdWx0IHN0ZDo6aGFuZGxlX2Nv bnRyYWN0X3Zpb2xhdGlvbiBjYWxsZWQ6IC4qLkMgNDYgZzY8aW50PiAuKihcbnxcclxufFxyKSoi IH0KKy8vIHsgZGctb3V0cHV0ICJkZWZhdWx0IHN0ZDo6aGFuZGxlX2NvbnRyYWN0X3Zpb2xhdGlv biBjYWxsZWQ6IC4qLkMgNDYgZzY8ZG91YmxlPiAuKihcbnxcclxufFxyKSoiIH0KKy8vIHsgZGct b3V0cHV0ICJkZWZhdWx0IHN0ZDo6aGFuZGxlX2NvbnRyYWN0X3Zpb2xhdGlvbiBjYWxsZWQ6IC4q LkMgNTUgZzc8aW50PiAuKihcbnxcclxufFxyKSoiIH0KKy8vIHsgZGctb3V0cHV0ICJkZWZhdWx0 IHN0ZDo6aGFuZGxlX2NvbnRyYWN0X3Zpb2xhdGlvbiBjYWxsZWQ6IC4qLkMgNTUgZzc8ZG91Ymxl PiAuKihcbnxcclxufFxyKSoiIH0KKwpkaWZmIC0tZ2l0IGEvZ2NjL3Rlc3RzdWl0ZS9nKysuZGcv Y29udHJhY3RzL2NvbnRyYWN0cy1mcmllbmQxLkMgYi9nY2MvdGVzdHN1aXRlL2crKy5kZy9jb250 cmFjdHMvY29udHJhY3RzLWZyaWVuZDEuQwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw MDAwMDAwMC4uMGNjZmJlMmM3YzMKLS0tIC9kZXYvbnVsbAorKysgYi9nY2MvdGVzdHN1aXRlL2cr Ky5kZy9jb250cmFjdHMvY29udHJhY3RzLWZyaWVuZDEuQwpAQCAtMCwwICsxLDQwIEBACisvLyBl bnN1cmUgY29udHJhY3RzIG9uIGZyaWVuZCBkZWNsYXJhdGlvbnMgYXJlIGEgY29tcGxldGUgY2xh c3MgY29udGV4dAorLy8geyBkZy1kbyBydW4gfQorLy8geyBkZy1vcHRpb25zICItc3RkPWMrKzJh IC1mY29udHJhY3RzIC1mY29udHJhY3QtY29udGludWF0aW9uLW1vZGU9b24iIH0KKworc3RydWN0 IFggeworICBmcmllbmQgdm9pZCBmbjAoWCB4KSBbWyBwcmU6IHguYSA+IDAgXV0geyB9CisKKyAg ZnJpZW5kIHZvaWQgZm4yKFggeCk7CisgIHN0YXRpYyB2b2lkIGZuczAoWCB4KSBbWyBwcmU6IHgu YSA+IDAgXV0geyB9CisgIHN0YXRpYyB2b2lkIGZuczEoWCB4KSBbWyBwcmU6IHguYSA+IDAgXV07 CisgIHN0YXRpYyB2b2lkIGZuczIoWCB4KTsKKworICBmcmllbmQgdm9pZCBmbihYICZ4KSB7IHgu YSA9IC01OyB9CisKK3ByaXZhdGU6CisgIGludCBhezEwfTsKK307CisKK3ZvaWQgZm4yKFggeCkg W1sgcHJlOiB4LmEgPiAwIF1dIHsgfQordm9pZCBYOjpmbnMxKFggeCkgeyB9Cit2b2lkIFg6OmZu czIoWCB4KSBbWyBwcmU6IHguYSA+IDAgXV0geyB9CisKK2ludCBtYWluKGludCwgY2hhcioqKSB7 CisgIFggeDsKKyAgZm4oeCk7IC8vIG5vIGNvbnRyYWN0CisKKyAgZm4wKHgpOworICBmbjIoeCk7 CisKKyAgWDo6Zm5zMCh4KTsKKyAgWDo6Zm5zMSh4KTsKKyAgWDo6Zm5zMih4KTsKKyAgcmV0dXJu IDA7Cit9CisKKy8vIHsgZGctb3V0cHV0ICJkZWZhdWx0IHN0ZDo6aGFuZGxlX2NvbnRyYWN0X3Zp b2xhdGlvbiBjYWxsZWQ6IC4qLkMgNiBmbjAgLiooXG58XHJcbnxccikqIiB9CisvLyB7IGRnLW91 dHB1dCAiZGVmYXVsdCBzdGQ6OmhhbmRsZV9jb250cmFjdF92aW9sYXRpb24gY2FsbGVkOiAuKi5D IDE5IGZuMiAuKihcbnxcclxufFxyKSoiIH0KKy8vIHsgZGctb3V0cHV0ICJkZWZhdWx0IHN0ZDo6 aGFuZGxlX2NvbnRyYWN0X3Zpb2xhdGlvbiBjYWxsZWQ6IC4qLkMgOSBYOjpmbnMwIC4qKFxufFxy XG58XHIpKiIgfQorLy8geyBkZy1vdXRwdXQgImRlZmF1bHQgc3RkOjpoYW5kbGVfY29udHJhY3Rf dmlvbGF0aW9uIGNhbGxlZDogLiouQyAxMCBYOjpmbnMxIC4qKFxufFxyXG58XHIpKiIgfQorLy8g eyBkZy1vdXRwdXQgImRlZmF1bHQgc3RkOjpoYW5kbGVfY29udHJhY3RfdmlvbGF0aW9uIGNhbGxl ZDogLiouQyAyMSBYOjpmbnMyIC4qKFxufFxyXG58XHIpKiIgfQpkaWZmIC0tZ2l0IGEvZ2NjL3Rl c3RzdWl0ZS9nKysuZGcvY29udHJhY3RzL2NvbnRyYWN0cy1mdDEuQyBiL2djYy90ZXN0c3VpdGUv ZysrLmRnL2NvbnRyYWN0cy9jb250cmFjdHMtZnQxLkMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k ZXggMDAwMDAwMDAwMDAuLmU1ZDViZTdjYjZhCi0tLSAvZGV2L251bGwKKysrIGIvZ2NjL3Rlc3Rz dWl0ZS9nKysuZGcvY29udHJhY3RzL2NvbnRyYWN0cy1mdDEuQwpAQCAtMCwwICsxLDE0IEBACisv LyB7IGRnLWRvIGNvbXBpbGUgfQorCisjaWZkZWYgX19jcHBfY29udHJhY3RzCitzdGF0aWNfYXNz ZXJ0IChmYWxzZSk7CisjZW5kaWYKKworI2lmZGVmIF9fY3BwX2NvbnRyYWN0c19saXRlcmFsX3Nl bWFudGljcworc3RhdGljX2Fzc2VydCAoZmFsc2UpOworI2VuZGlmCisKKyNpZmRlZiBfX2NwcF9j b250cmFjdHNfcm9sZXMKK3N0YXRpY19hc3NlcnQgKGZhbHNlKTsKKyNlbmRpZgorCmRpZmYgLS1n aXQgYS9nY2MvdGVzdHN1aXRlL2crKy5kZy9jb250cmFjdHMvY29udHJhY3RzLWlnbm9yZTEuQyBi L2djYy90ZXN0c3VpdGUvZysrLmRnL2NvbnRyYWN0cy9jb250cmFjdHMtaWdub3JlMS5DCm5ldyBm aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi5jOGFlNjU2ODE2NgotLS0gL2Rldi9u dWxsCisrKyBiL2djYy90ZXN0c3VpdGUvZysrLmRnL2NvbnRyYWN0cy9jb250cmFjdHMtaWdub3Jl MS5DCkBAIC0wLDAgKzEsMzAgQEAKKy8vIHRlc3QgdGhhdCBpZ25vcmVkIGNvbnRyYWN0cyBkbyBp bnN0YXRpYXRlIHRlbXBsYXRlcworLy8geyBkZy1kbyBjb21waWxlIH0KKy8vIHsgZGctb3B0aW9u cyAiLXN0ZD1jKysyYSAtZmNvbnRyYWN0cyIgfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPgoraW50 IGYoVCB0KQoreworICByZXR1cm4gLXQ7Cit9CisKK2ludCBkdW1teSgpCit7CisgIFtbIGFzc2Vy dCBpZ25vcmU6IGYoMS4wKSA+IDAgXV07CisgIHJldHVybiAtMTsKK30KKwordGVtcGxhdGU8Pgor aW50IGYoZG91YmxlIHQpIC8vIHsgZGctZXJyb3IgInNwZWNpYWxpemF0aW9uIG9mLiphZnRlciBp bnN0YW50aWF0aW9uIiB9Cit7CisgIHJldHVybiAtMS4wOworfQorCitpbnQgbWFpbigpCit7Cisg IGR1bW15KCk7CisgIGYoMSk7CisgIGYoMS4wKTsKKyAgcmV0dXJuIDA7Cit9CisKZGlmZiAtLWdp dCBhL2djYy90ZXN0c3VpdGUvZysrLmRnL2NvbnRyYWN0cy9jb250cmFjdHMtaWdub3JlMi5DIGIv Z2NjL3Rlc3RzdWl0ZS9nKysuZGcvY29udHJhY3RzL2NvbnRyYWN0cy1pZ25vcmUyLkMKbmV3IGZp bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLjVjZjgwMGEzNTU5Ci0tLSAvZGV2L251 bGwKKysrIGIvZ2NjL3Rlc3RzdWl0ZS9nKysuZGcvY29udHJhY3RzL2NvbnRyYWN0cy1pZ25vcmUy LkMKQEAgLTAsMCArMSwyNiBAQAorLy8gYmFzZWxpbmUgZm9yIHRlc3RpbmcgYXNzZXJ0IGNvbnRy YWN0cyBiZWluZyB0dXJuZWQgaW50byBjb21waWxlIHRpbWUKKy8vIGFzc3VtcHRpb25zOyBzZWUg Y29udHJhY3RzLWFzc3VtZTIgZm9yIHRoZSBhc3N1bWVkIGNhc2UKKy8vIHsgZGctZG8gcnVuIH0K Ky8vIHsgZGctb3B0aW9ucyAiLXN0ZD1jKysyYSAtZmNvbnRyYWN0cyIgfQorI2luY2x1ZGUgPGNz dGRpbz4KKworaW50IGZ1bihpbnQgeCkgeworICBbW2Fzc2VydCBhdWRpdDogeCA+IDBdXTsKKyAg aWYoeCA8PSAwKQorICB7CisgICAgcHJpbnRmKCIlZDogdGVzdCB4PD0wIG9wdCBvdXRcbiIsIHgp OworICAgIHJldHVybiAtMTsKKyAgfQorICBlbHNlCisgIHsKKyAgICBwcmludGYoIiVkOiB0ZXN0 IHg+MFxuIiwgeCk7CisgICAgcmV0dXJuIDA7CisgIH0KK30KKworaW50IG1haW4oaW50LCBjaGFy KiopIHsKKyAgdm9sYXRpbGUgaW50IHggPSAtMTsKKyAgcmV0dXJuIGZ1bih4KTsKK30KKworLy8g eyBkZy1zaG91bGRmYWlsICIiIH0KZGlmZiAtLWdpdCBhL2djYy90ZXN0c3VpdGUvZysrLmRnL2Nv bnRyYWN0cy9jb250cmFjdHMtbGFyZ2UtcmV0dXJuLkMgYi9nY2MvdGVzdHN1aXRlL2crKy5kZy9j b250cmFjdHMvY29udHJhY3RzLWxhcmdlLXJldHVybi5DCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu ZGV4IDAwMDAwMDAwMDAwLi5lYThlNzNhMzg3ZgotLS0gL2Rldi9udWxsCisrKyBiL2djYy90ZXN0 c3VpdGUvZysrLmRnL2NvbnRyYWN0cy9jb250cmFjdHMtbGFyZ2UtcmV0dXJuLkMKQEAgLTAsMCAr MSwxNSBAQAorLy8geyBkZy1kbyBjb21waWxlIH0KKy8vIHsgZGctb3B0aW9ucyAiLXN0ZD1jKysy YSAtZmNvbnRyYWN0cyIgfQorCitzdHJ1Y3QgRm9vCit7CisgIGludCB4OworICBib29sIHk7Cisg IGxvbmcgels0XTsKK307CisKK0ZvbyBmb28oKSBbWyBwcmU6IHRydWUgXV0KK3sKKyAgcmV0dXJu IHt9OworfQorCmRpZmYgLS1naXQgYS9nY2MvdGVzdHN1aXRlL2crKy5kZy9jb250cmFjdHMvY29u dHJhY3RzLW11bHRpbGluZTEuQyBiL2djYy90ZXN0c3VpdGUvZysrLmRnL2NvbnRyYWN0cy9jb250 cmFjdHMtbXVsdGlsaW5lMS5DCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAw Li44MTQ1YzYxZTgyNwotLS0gL2Rldi9udWxsCisrKyBiL2djYy90ZXN0c3VpdGUvZysrLmRnL2Nv bnRyYWN0cy9jb250cmFjdHMtbXVsdGlsaW5lMS5DCkBAIC0wLDAgKzEsMTkgQEAKKy8vIHsgZGct ZG8gcnVuIH0KKy8vIHsgZGctb3B0aW9ucyAiLXN0ZD1jKysyYSAtZmNvbnRyYWN0cyAtZmNvbnRy YWN0LWNvbnRpbnVhdGlvbi1tb2RlPW9uIiB9CisKK2ludCBtYWluKGludCwgY2hhciAqKikKK3sK KyAgaW50IHggPSA1OworICBpbnQgeSA9IDEwOworICBbWyBhc3NlcnQ6CisgICAgeAorICAgIDwK KyAgICAxMAorICAgICYmCisgICAgeQorICAgID4KKyAgICAxMjMKKyAgXV07Cit9CisKKy8vIHsg ZGctb3V0cHV0ICJkZWZhdWx0IHN0ZDo6aGFuZGxlX2NvbnRyYWN0X3Zpb2xhdGlvbiBjYWxsZWQ6 IC4qLkMgOCBtYWluIHggPCAxMCAmJiB5ID4gMTIzLiooXG58XHJcbnxccikqIiB9CmRpZmYgLS1n aXQgYS9nY2MvdGVzdHN1aXRlL2crKy5kZy9jb250cmFjdHMvY29udHJhY3RzLW11bHRpcGxlLWlu aGVyaXRhbmNlMS5DIGIvZ2NjL3Rlc3RzdWl0ZS9nKysuZGcvY29udHJhY3RzL2NvbnRyYWN0cy1t dWx0aXBsZS1pbmhlcml0YW5jZTEuQwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw MDAwMC4uM2YyZjVlZGQ2ZWYKLS0tIC9kZXYvbnVsbAorKysgYi9nY2MvdGVzdHN1aXRlL2crKy5k Zy9jb250cmFjdHMvY29udHJhY3RzLW11bHRpcGxlLWluaGVyaXRhbmNlMS5DCkBAIC0wLDAgKzEs MTUgQEAKKy8vIHsgZGctZG8gY29tcGlsZSB9CisvLyB7IGRnLW9wdGlvbnMgIi1zdGQ9YysrMmEg LWZjb250cmFjdHMgLWZjb250cmFjdC1jb250aW51YXRpb24tbW9kZT1vbiIgfQorCitzdHJ1Y3Qg QmFzZUEgeworICB2aXJ0dWFsIGludCBmdW4oaW50IG4pIFtbIHByZTogbiA+IDAgXV0geyByZXR1 cm4gLW47IH0KK307CisKK3N0cnVjdCBCYXNlQiB7CisgIHZpcnR1YWwgaW50IGZ1bihpbnQgbikg W1sgcHJlOiBuID4gMCBdXSB7IHJldHVybiAtbjsgfQorfTsKKworc3RydWN0IENoaWxkIDogcHVi bGljIEJhc2VBLCBCYXNlQiB7CisgIGludCBmdW4oaW50IG4pIFtbIHByZTogbiA+IDAgXV0geyBy ZXR1cm4gLW47IH0KK307CisKZGlmZiAtLWdpdCBhL2djYy90ZXN0c3VpdGUvZysrLmRnL2NvbnRy YWN0cy9jb250cmFjdHMtbXVsdGlwbGUtaW5oZXJpdGFuY2UyLkMgYi9nY2MvdGVzdHN1aXRlL2cr Ky5kZy9jb250cmFjdHMvY29udHJhY3RzLW11bHRpcGxlLWluaGVyaXRhbmNlMi5DCm5ldyBmaWxl IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi4zN2JkYWMxZDYzZgotLS0gL2Rldi9udWxs CisrKyBiL2djYy90ZXN0c3VpdGUvZysrLmRnL2NvbnRyYWN0cy9jb250cmFjdHMtbXVsdGlwbGUt aW5oZXJpdGFuY2UyLkMKQEAgLTAsMCArMSwzMyBAQAorLy8geyBkZy1kbyBjb21waWxlIH0KKy8v IHsgZGctb3B0aW9ucyAiLXN0ZD1jKysyYSAtZmNvbnRyYWN0cyAtZmNvbnRyYWN0LWNvbnRpbnVh dGlvbi1tb2RlPW9uIiB9CisKK3N0cnVjdCBCYXNlQSB7CisgIHZpcnR1YWwgaW50IGZ1bihpbnQg bikgW1sgcHJlOiBuID4gMCBdXSB7IHJldHVybiAtbjsgfQorfTsKKworc3RydWN0IEJhc2VCIHsK KyAgdmlydHVhbCBpbnQgZnVuKGludCBuKSBbWyBwcmU6IG4gPCAwIF1dIHsgcmV0dXJuIC1uOyB9 Cit9OworCitzdHJ1Y3QgQ2hpbGQxIDogcHVibGljIEJhc2VBLCBCYXNlQiB7CisgIGludCBmdW4o aW50IG4pIFtbIHByZTogbiA+IDAgXV0geyByZXR1cm4gLW47IH0gLy8geyBkZy1lcnJvciAibWlz bWF0Y2hlZCIgfQorfTsKKworc3RydWN0IENoaWxkMiA6IHB1YmxpYyBCYXNlQSwgQmFzZUIgewor ICBpbnQgZnVuKGludCBuKSBbWyBwcmU6IG4gPCAwIF1dIHsgcmV0dXJuIC1uOyB9IC8vIHsgZGct ZXJyb3IgIm1pc21hdGNoZWQiIH0KK307CisKK3N0cnVjdCBDaGlsZDMgOiBwdWJsaWMgQmFzZUEs IEJhc2VCIHsKKyAgaW50IGZ1bihpbnQgbikgeyByZXR1cm4gLW47IH0KK307CisKK3N0cnVjdCBD aGlsZDQgOiBwdWJsaWMgQmFzZUEgeworICBpbnQgZnVuKGludCBuKTsKK307CisKK2ludCBDaGls ZDQ6OmZ1bihpbnQgbikKKyAgW1sgcHJlOiBuICE9IDAgXV0gLy8geyBkZy1lcnJvciAibWlzbWF0 Y2hlZCIgfQoreworICByZXR1cm4gLW47Cit9CisKZGlmZiAtLWdpdCBhL2djYy90ZXN0c3VpdGUv ZysrLmRnL2NvbnRyYWN0cy9jb250cmFjdHMtbmVzdGVkLWNsYXNzMS5DIGIvZ2NjL3Rlc3RzdWl0 ZS9nKysuZGcvY29udHJhY3RzL2NvbnRyYWN0cy1uZXN0ZWQtY2xhc3MxLkMKbmV3IGZpbGUgbW9k ZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLjlmOTFmZjQ5OWQwCi0tLSAvZGV2L251bGwKKysr IGIvZ2NjL3Rlc3RzdWl0ZS9nKysuZGcvY29udHJhY3RzL2NvbnRyYWN0cy1uZXN0ZWQtY2xhc3Mx LkMKQEAgLTAsMCArMSwyNCBAQAorLy8geyBkZy1kbyBjb21waWxlIH0KKy8vIHsgZGctb3B0aW9u cyAiLXN0ZD1jKysyYSAtZmNvbnRyYWN0cyIgfQorCit2b2lkIGdmbjMoaW50IG4pIFtbIHByZTog biA+IDAgXV07CisKK3N0cnVjdCBPdXRlciB7CisgIHN0cnVjdCBJbm5lciB7CisgICAgdm9pZCBm bihpbnQgbikgW1sgcHJlOiBuID4gMCAmJiBib2IgPiAxIF1dOworICAgIHZvaWQgZm4yKGludCBu KSBbWyBwcmU6IG4gPiAwICYmIGJvYiA+IDEgXV07CisgIH07CisKKyAgdm9pZCBmbihpbnQgbSkg W1sgcHJlOiBtID4gMSBdXTsKKyAgZnJpZW5kIHZvaWQgSW5uZXI6OmZuKGludCBuKSBbWyBwcmU6 IG4gPiAwICYmIGJvYiA+IDEgXV07IC8vIHsgZGctZXJyb3IgIm5vdCBkZWNsYXJlZCIgfQorCisg IGZyaWVuZCB2b2lkIGdmbihpbnQgcCkgW1sgcHJlOiBwID4gMCBdXTsKKyAgZnJpZW5kIHZvaWQg Z2ZuKGludCBxKSBbWyBwcmU6IHEgPiAxIF1dOyAvLyB7IGRnLWVycm9yICIncScgd2FzIG5vdCBk ZWNsYXJlZCIgfQorCisgIC8vIFRoaXMgc2hvdWxkIGJlIG9rYXkuCisgIGZyaWVuZCB2b2lkIGdm bjIoaW50IHEpOworICBmcmllbmQgdm9pZCBnZm4yKGludCBwKSBbWyBwcmU6IHAgPiAwIF1dIHsg fQorCisgIHN0YXRpYyBpbnQgYm9iOworfTsKK2ludCBPdXRlcjo6Ym9iey0xfTsKZGlmZiAtLWdp dCBhL2djYy90ZXN0c3VpdGUvZysrLmRnL2NvbnRyYWN0cy9jb250cmFjdHMtbmVzdGVkLWNsYXNz Mi5DIGIvZ2NjL3Rlc3RzdWl0ZS9nKysuZGcvY29udHJhY3RzL2NvbnRyYWN0cy1uZXN0ZWQtY2xh c3MyLkMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLjQzZTc1ZWRiZWY4 Ci0tLSAvZGV2L251bGwKKysrIGIvZ2NjL3Rlc3RzdWl0ZS9nKysuZGcvY29udHJhY3RzL2NvbnRy YWN0cy1uZXN0ZWQtY2xhc3MyLkMKQEAgLTAsMCArMSw0MCBAQAorLy8geyBkZy1kbyBydW4gfQor Ly8geyBkZy1vcHRpb25zICItc3RkPWMrKzJhIC1mY29udHJhY3RzIC1mY29udHJhY3QtY29udGlu dWF0aW9uLW1vZGU9b24iIH0KKwordm9pZCBnZm4zKGludCBuKSBbWyBwcmU6IG4gPiAwIF1dOwor CitzdHJ1Y3QgT3V0ZXIgeworICBzdHJ1Y3QgSW5uZXIgeworICAgIHZvaWQgZm4oaW50IG4pIFtb IHByZTogbiA+IDAgJiYgYm9iID4gMSBdXTsKKyAgfTsKKworICB2b2lkIGZuKGludCBtKSBbWyBw cmU6IG0gPiAxIF1dOworCisgIGZyaWVuZCB2b2lkIGdmbjEoaW50IHEpOworICBmcmllbmQgdm9p ZCBnZm4xKGludCBwKSBbWyBwcmU6IHAgPiAwIF1dIHsgfQorCisgIGZyaWVuZCB2b2lkIGdmbjIo aW50IHEsIE91dGVyICopOworICBmcmllbmQgdm9pZCBnZm4yKGludCBwLCBPdXRlciAqKSBbWyBw cmU6IHAgPiAwIF1dIHsgfQorCisgIGZyaWVuZCB2b2lkIGdmbjMoaW50IG4pOworCisgIHN0YXRp YyBpbnQgYm9iOworfTsKK2ludCBPdXRlcjo6Ym9iey0xfTsKKwordm9pZCBPdXRlcjo6SW5uZXI6 OmZuKGludCB4KSB7IH0KK3ZvaWQgT3V0ZXI6OmZuKGludCB5KSB7IH0KKwordm9pZCBnZm4zKGlu dCBuKSB7IH0KK3ZvaWQgZ2ZuMShpbnQgcSk7CisKK2ludCBtYWluKGludCwgY2hhciAqKikgewor ICBPdXRlcjo6SW5uZXIgaW47CisgIGluLmZuKC01KTsKKyAgT3V0ZXIgb3V0OworICBvdXQuZm4o LTYpOworICBnZm4xKC03KTsKKyAgZ2ZuMigtOCwgJm91dCk7CisgIGdmbjMoLTkpOworfQorCmRp ZmYgLS1naXQgYS9nY2MvdGVzdHN1aXRlL2crKy5kZy9jb250cmFjdHMvY29udHJhY3RzLW5vY29w eTEuQyBiL2djYy90ZXN0c3VpdGUvZysrLmRnL2NvbnRyYWN0cy9jb250cmFjdHMtbm9jb3B5MS5D Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi40NjA4YTRkYzE4MQotLS0g L2Rldi9udWxsCisrKyBiL2djYy90ZXN0c3VpdGUvZysrLmRnL2NvbnRyYWN0cy9jb250cmFjdHMt bm9jb3B5MS5DCkBAIC0wLDAgKzEsMjQgQEAKKy8vIENvbnRyYWN0cyBzaG91bGRuJ3QgaW50cm9k dWNlIG1vcmUgY29waWVzLgorCisvLyB7IGRnLWRvIGNvbXBpbGUgeyB0YXJnZXQgYysrMjAgfSB9 CisvLyB7IGRnLWFkZGl0aW9uYWwtb3B0aW9ucyAtZmNvbnRyYWN0cyB9CisKK3N0cnVjdCBBCit7 CisgIGludCBpOworICBBKGludCBpKTogaShpKSB7IH0KKyAgQShjb25zdCBBJikgPSBkZWxldGU7 Cit9OworCitBIGYoQSBhKQorICBbWyBwcmU6IGEuaSA+IDAgXV0KKyAgW1sgcG9zdCByOiByLmkg PiAwIF1dCit7CisgIHJldHVybiB7YS5pfTsKK30KKworaW50IG1haW4oKQoreworICBpZiAoZih7 NDJ9KS5pICE9IDQyKQorICAgIF9fYnVpbHRpbl9hYm9ydCAoKTsKK30KZGlmZiAtLWdpdCBhL2dj Yy90ZXN0c3VpdGUvZysrLmRnL2NvbnRyYWN0cy9jb250cmFjdHMtb3ZlcnJpZGUuQyBiL2djYy90 ZXN0c3VpdGUvZysrLmRnL2NvbnRyYWN0cy9jb250cmFjdHMtb3ZlcnJpZGUuQwpuZXcgZmlsZSBt b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uZjk2YWE5ODhlMGYKLS0tIC9kZXYvbnVsbAor KysgYi9nY2MvdGVzdHN1aXRlL2crKy5kZy9jb250cmFjdHMvY29udHJhY3RzLW92ZXJyaWRlLkMK QEAgLTAsMCArMSw0MyBAQAorLy8geyBkZy1kbyBjb21waWxlIH0KKy8vIHsgZGctb3B0aW9ucyAi LXN0ZD1jKysyYSAtZmNvbnRyYWN0cyIgfQorCitzdHJ1Y3QgRm9vIHsKKyAgdmlydHVhbCBpbnQg ZjAoaW50IG4pIFtbIHByZTogZmFsc2UgXV0geyByZXR1cm4gbjsgfQorICB2aXJ0dWFsIGludCBm MShpbnQgbikgW1sgcHJlOiBmYWxzZSBdXSB7IHJldHVybiBuOyB9CisgIHZpcnR1YWwgaW50IGYy KGludCBuKSBbWyBwcmU6IGZhbHNlIF1dIHsgcmV0dXJuIG47IH0KKyAgdmlydHVhbCBpbnQgZjMo aW50IG4pIFtbIHByZTogZmFsc2UgXV0geyByZXR1cm4gbjsgfQorICB2aXJ0dWFsIGludCBmNChp bnQgbikgW1sgcHJlOiBmYWxzZSBdXSB7IHJldHVybiBuOyB9CisgIHZpcnR1YWwgaW50IGY1KGlu dCBuKSBbWyBwcmU6IGZhbHNlIF1dIHsgcmV0dXJuIG47IH0KKyAgdmlydHVhbCBpbnQgZjYoaW50 IG4pIFtbIHByZTogZmFsc2UgXV0geyByZXR1cm4gbjsgfQorICB2aXJ0dWFsIGludCBmNyhpbnQg bikgW1sgcHJlOiBmYWxzZSBdXSB7IHJldHVybiBuOyB9CisgIHZpcnR1YWwgaW50IGY4KGludCBu KSBbWyBwcmU6IGZhbHNlIF1dIHsgcmV0dXJuIG47IH0KKyAgdmlydHVhbCBpbnQgZjkoaW50IG4p IFtbIHByZTogZmFsc2UgXV0geyByZXR1cm4gbjsgfQorICB2aXJ0dWFsIGludCBmMTAoaW50IG4p IFtbIHByZTogZmFsc2UgXV0geyByZXR1cm4gbjsgfQorICB2aXJ0dWFsIGludCBmMTEoaW50IG4p IFtbIHByZTogbiA+IDAgXV0gW1sgcHJlOiBuID4gMSBdXSB7IHJldHVybiBuOyB9CisgIHZpcnR1 YWwgaW50IGYxMihpbnQgbikgW1sgcHJlOiBuID4gMCBdXSBbWyBwcmU6IG4gPiAxIF1dIHsgcmV0 dXJuIG47IH0KK307CisKK3N0cnVjdCBCYXIgOiBGb28geworICBbWyBwcmU6IG4gPiAtMSBdXSBp bnQgZjAoaW50IG4gPSAwKSBvdmVycmlkZSB7IHJldHVybiAtbjsgfSAvLyB7IGRnLWVycm9yICJj b250cmFjdHMgbXVzdCBhcHBlcnRhaW4iIH0KKyAgaW50IFtbIHByZTogbiA+IC0yIF1dIGYxKGlu dCBuID0gMCkgb3ZlcnJpZGUgeyByZXR1cm4gLW47IH0gLy8geyBkZy1lcnJvciAiY29udHJhY3Rz IG11c3QgYXBwZXJ0YWluIiB9CisgIGludCBmMiBbWyBwcmU6IG4gPiAtMyBdXSAoaW50IG4gPSAw KSBvdmVycmlkZSB7IHJldHVybiAtbjsgfSAvLyB7IGRnLWVycm9yICJjb250cmFjdHMgbXVzdCBh cHBlcnRhaW4iIH0KKyAgaW50IGY0KFtbIHByZTogbiA+IC00IF1dIGludCBuID0gMCkgb3ZlcnJp ZGUgeyByZXR1cm4gLW47IH0gLy8geyBkZy1lcnJvciAiY29udHJhY3RzIG11c3QgYXBwZXJ0YWlu IiB9CisgIGludCBmNShpbnQgW1sgcHJlOiBuID4gLTUgXV0gbiA9IDApIG92ZXJyaWRlIHsgcmV0 dXJuIC1uOyB9IC8vIHsgZGctZXJyb3IgImNvbnRyYWN0cyBtdXN0IGFwcGVydGFpbiIgfQorICBp bnQgZjYoaW50IG4gW1sgcHJlOiBuID4gLTYgXV0gPSAwKSBvdmVycmlkZSB7IHJldHVybiAtbjsg fSAvLyB7IGRnLWVycm9yICJjb250cmFjdHMgbXVzdCBhcHBlcnRhaW4iIH0KKyAgaW50IGY3KGlu dCBuID0gW1sgcHJlOiBuID4gLTcgXV0gMCkgb3ZlcnJpZGUgeyByZXR1cm4gLW47IH0KKyAgLy8g eyBkZy1lcnJvciAiZXhwZWN0ZWQgaWRlbnRpZmllciIgIiIgeyB0YXJnZXQgKi0qLSogfSAuLTEg fQorICAvLyB7IGRnLWVycm9yICJleHBlY3RlZCAuXHsuIGJlZm9yZSBudW1lcmljIiAiIiB7IHRh cmdldCAqLSotKiB9IC4tMiB9CisgIC8vIHsgZGctZXJyb3IgImludmFsaWQgdXNlci1kZWZpbmVk IGNvbnZlcnNpb24iICIiIHsgdGFyZ2V0ICotKi0qIH0gLi0zIH0KKyAgLy8geyBkZy1lcnJvciAi ZXhwZWN0ZWQgLiwuIiAiIiB7IHRhcmdldCAqLSotKiB9IC4tNCB9CisgIGludCBmOChpbnQgbiA9 IDAgW1sgcHJlOiBuID4gLTggXV0pIG92ZXJyaWRlIHsgcmV0dXJuIC1uOyB9CisgIC8vIHsgZGct ZXJyb3IgInNoYWxsIG9ubHkgaW50cm9kdWNlIGFuIGF0dHJpYnV0ZSIgIiIgeyB0YXJnZXQgKi0q LSogfSAuLTEgfQorICBpbnQgZjkoaW50IG4gPSAwKSBbWyBwcmU6IG4gPiAtOSBdXSBvdmVycmlk ZSB7IHJldHVybiAtbjsgfSAvLyB7IGRnLWVycm9yICJtaXNtYXRjaGVkIGNvbnRyYWN0IiB9CisK KyAgLy8gVGhlIGdyYW1tYXIgZG9lc24ndCBhcHBlYXIgdG8gcGVybWl0IGNvbnRyYWN0cyBhZnRl ciB0aGUgdmlydC1zcGVjaWZpZXJzCisgIC8vIGJ1dCB0aGUgcGFyc2VyIHdpbGwgaGFwcGlseSBh ZGQgdGhlc2UgdG8gYW4gYXR0cmlidXRlIGxpc3QgdGhhdCBpcyBub3QKKyAgLy8gb3duZWQgYnkg dGhlIGZ1bmN0aW9uIGRlY2xhcmF0b3IuCisgIGludCBmMTAoaW50IG4gPSAwKSBvdmVycmlkZSBb WyBwcmU6IG4gPiAtMTAgXV0geyByZXR1cm4gLW47IH0gLy8geyBkZy1lcnJvciAiY29udHJhY3Rz IG11c3QgYXBwZXJ0YWluIiB9CisgIGludCBmMTEoaW50IG4pIFtbIHByZTogbiA+IDEgXV0gb3Zl cnJpZGUgW1sgcHJlOiBuID4gMCBdXSB7IHJldHVybiAtbjsgfSAvLyB7IGRnLWVycm9yICJjb250 cmFjdHMgbXVzdCBhcHBlcnRhaW4iIH0KKyAgaW50IGYxMihpbnQgbikgW1sgcHJlOiBuID4gMCBd XSBvdmVycmlkZSBbWyBwcmU6IG4gPiAxIF1dIHsgcmV0dXJuIC1uOyB9IC8vIHsgZGctZXJyb3Ig ImNvbnRyYWN0cyBtdXN0IGFwcGVydGFpbiIgfQorfTsKKwpkaWZmIC0tZ2l0IGEvZ2NjL3Rlc3Rz dWl0ZS9nKysuZGcvY29udHJhY3RzL2NvbnRyYWN0cy1wb3N0MS5DIGIvZ2NjL3Rlc3RzdWl0ZS9n KysuZGcvY29udHJhY3RzL2NvbnRyYWN0cy1wb3N0MS5DCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu ZGV4IDAwMDAwMDAwMDAwLi40NTE3NjBlYTgyMgotLS0gL2Rldi9udWxsCisrKyBiL2djYy90ZXN0 c3VpdGUvZysrLmRnL2NvbnRyYWN0cy9jb250cmFjdHMtcG9zdDEuQwpAQCAtMCwwICsxLDc0IEBA CisvLyB7IGRnLWRvIGNvbXBpbGUgfQorLy8geyBkZy1vcHRpb25zICItc3RkPWMrKzJhIC1mY29u dHJhY3RzIiB9CisKK2ludCBmMShpbnQgbikKKyAgW1twcmU6IG4gPj0gMF1dCisgIFtbcG9zdCBy OiByID49IDBdXQorICBbW3Bvc3QgcjogIShyIDwgMCldXQoreworICByZXR1cm4gbjsKK30KKwor aW50IGYyKGludCBuKQorICBbW3Bvc3Q6IHRydWVdXQoreworICByZXR1cm4gMDsKK30KKworaW50 IGYzKGludCBuKQorICBbW3Bvc3QgcjogciA+PSBuXV0KK3sKKyAgcmV0dXJuIG4gKyAxOworfQor CitpbnQgZjQoaW50IG4pCisgIFtbcG9zdDogeCA+IDBdXSAvLyB7IGRnLWVycm9yICJub3QgZGVj bGFyZWQiIH0KK3sKKyAgcmV0dXJuIDA7Cit9CisKK3ZvaWQgZjUoKQorICBbW3Bvc3Q6IHRydWVd XQoreyB9CisKK3ZvaWQgZjYoKQorICBbW3Bvc3QgcjogdHJ1ZV1dIC8vIHsgZGctZXJyb3IgImZ1 bmN0aW9uIGRvZXMgbm90IHJldHVybiBhIHZhbHVlIiB9Cit7IH0KKworaW50IGY3KGludCBuKQor ICBbW3Bvc3Q6IG4gPiAwXV0KK3sKKyAgcmV0dXJuIHg7IC8vIHsgZGctZXJyb3IgIm5vdCBkZWNs YXJlZCIgfQorfQorCit2b2lkIGY4KGludCBuKQorICBbW3Bvc3Q6IG4gPiAwXV0KK3sKKyAgcmV0 dXJuOworfQorCit2b2lkIGY5KGludCBuKQorICBbW3Bvc3Q6IG4gPiAwXV0KK3sKKyAgcmV0dXJu IG47IC8vIHsgZGctZXJyb3IgInJldHVybi1zdGF0ZW1lbnQgd2l0aCBhIHZhbHVlIiB9Cit9CisK K2ludCBmMTAoaW50IG4pCisgIFtbcG9zdDogbiA+IDBdXQoreworICByZXR1cm47IC8vIHsgZGct ZXJyb3IgInJldHVybi1zdGF0ZW1lbnQgd2l0aCBubyB2YWx1ZSIgfQorfQorCit2b2lkIGYxMSgp CisgIFtbcG9zdDogdHJ1ZV1dCit7CisgIGNvbnN0ZXhwciBpbnQgbiA9IDA7CisgIHJldHVybiBu OyAvLyB7IGRnLWVycm9yICJyZXR1cm4tc3RhdGVtZW50IHdpdGggYSB2YWx1ZSIgfQorfQorCitp bnQgZjEyKCkKKyAgW1twb3N0OiB0cnVlXV0KK3sKKyAgcmV0dXJuOyAvLyB7IGRnLWVycm9yICJy ZXR1cm4tc3RhdGVtZW50IHdpdGggbm8gdmFsdWUiIH0KK30KKwpkaWZmIC0tZ2l0IGEvZ2NjL3Rl c3RzdWl0ZS9nKysuZGcvY29udHJhY3RzL2NvbnRyYWN0cy1wb3N0Mi5DIGIvZ2NjL3Rlc3RzdWl0 ZS9nKysuZGcvY29udHJhY3RzL2NvbnRyYWN0cy1wb3N0Mi5DCm5ldyBmaWxlIG1vZGUgMTAwNjQ0 CmluZGV4IDAwMDAwMDAwMDAwLi43NjY1ZjgyOTEwNwotLS0gL2Rldi9udWxsCisrKyBiL2djYy90 ZXN0c3VpdGUvZysrLmRnL2NvbnRyYWN0cy9jb250cmFjdHMtcG9zdDIuQwpAQCAtMCwwICsxLDEz IEBACisvLyB7IGRnLWRvIHJ1biB9CisvLyB7IGRnLW9wdGlvbnMgIi1zdGQ9YysrMmEgLWZjb250 cmFjdHMiIH0KKworaW50IGYxKGludCBuKQorICBbW3Bvc3QgcjogciA9PSBuXV0KK3sKKyAgcmV0 dXJuIG47Cit9CisKK2ludCBtYWluKCkKK3sKKyAgZjEoMCk7Cit9CmRpZmYgLS1naXQgYS9nY2Mv dGVzdHN1aXRlL2crKy5kZy9jb250cmFjdHMvY29udHJhY3RzLXBvc3QzLkMgYi9nY2MvdGVzdHN1 aXRlL2crKy5kZy9jb250cmFjdHMvY29udHJhY3RzLXBvc3QzLkMKbmV3IGZpbGUgbW9kZSAxMDA2 NDQKaW5kZXggMDAwMDAwMDAwMDAuLjlmMWRmZmQ4ZjZhCi0tLSAvZGV2L251bGwKKysrIGIvZ2Nj L3Rlc3RzdWl0ZS9nKysuZGcvY29udHJhY3RzL2NvbnRyYWN0cy1wb3N0My5DCkBAIC0wLDAgKzEs MTUgQEAKKy8vIHsgZGctZG8gcnVuIH0KKy8vIHsgZGctb3B0aW9ucyAiLXN0ZD1jKysyYSAtZmNv bnRyYWN0cyIgfQorLy8geyBkZy1zaG91bGRmYWlsICJhc3NlcnQgdmlvbGF0aW9uIiB9CisvLyB7 IGRnLW91dHB1dCAiZGVmYXVsdCBzdGQ6OmhhbmRsZV9jb250cmFjdF92aW9sYXRpb24gY2FsbGVk IiB9CisKK2ludCBmMShpbnQgbikKKyAgW1twb3N0IHI6IHIgPiBuXV0KK3sKKyAgcmV0dXJuIG47 Cit9CisKK2ludCBtYWluKCkKK3sKKyAgZjEoMCk7Cit9CmRpZmYgLS1naXQgYS9nY2MvdGVzdHN1 aXRlL2crKy5kZy9jb250cmFjdHMvY29udHJhY3RzLXBvc3Q0LkMgYi9nY2MvdGVzdHN1aXRlL2cr Ky5kZy9jb250cmFjdHMvY29udHJhY3RzLXBvc3Q0LkMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k ZXggMDAwMDAwMDAwMDAuLmFmNzcwYzNkYzk0Ci0tLSAvZGV2L251bGwKKysrIGIvZ2NjL3Rlc3Rz dWl0ZS9nKysuZGcvY29udHJhY3RzL2NvbnRyYWN0cy1wb3N0NC5DCkBAIC0wLDAgKzEsMzYgQEAK Ky8vIHsgZGctZG8gY29tcGlsZSB9CisvLyB7IGRnLW9wdGlvbnMgIi1zdGQ9YysrMmEgLWZjb250 cmFjdHMiIH0KKworc3RydWN0IFMKK3sKKyAgUygpIFtbcG9zdDogbiA9PSAwXV0KKyAgICA6IG4o MCkKKyAgeyB9CisKKyAgflMoKSBbW3Bvc3Q6IHRydWVdXQorICB7IH0KKworICBpbnQgZjEoKQor ICAgIFtbcG9zdCByOiBuID09IHJdXQorICB7CisgICAgcmV0dXJuIG47CisgIH0KKworICBpbnQg ZjIoKQorICAgIFtbcG9zdCByOiByID09IHhdXSAvLyB7IGRnLWVycm9yICJub3QgZGVjbGFyZWQi IH0KKyAgeworICAgIHJldHVybiBuOworICB9CisKKyAgdm9pZCBmMygpCisgICAgW1twb3N0IHI6 IG5dXSAvLyB7IGRnLWVycm9yICJkb2VzIG5vdCByZXR1cm4gYSB2YWx1ZSIgfQorICB7CisgIH0K KworICBpbnQgbiA9IDA7Cit9OworCitpbnQgbWFpbigpCit7CisgIC8vIGYxKDApOworfQpkaWZm IC0tZ2l0IGEvZ2NjL3Rlc3RzdWl0ZS9nKysuZGcvY29udHJhY3RzL2NvbnRyYWN0cy1wb3N0NS5D IGIvZ2NjL3Rlc3RzdWl0ZS9nKysuZGcvY29udHJhY3RzL2NvbnRyYWN0cy1wb3N0NS5DCm5ldyBm aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi5jOTEyN2ZiMmNjOQotLS0gL2Rldi9u dWxsCisrKyBiL2djYy90ZXN0c3VpdGUvZysrLmRnL2NvbnRyYWN0cy9jb250cmFjdHMtcG9zdDUu QwpAQCAtMCwwICsxLDE5IEBACisvLyB7IGRnLWRvIGNvbXBpbGUgfQorLy8geyBkZy1vcHRpb25z ICItc3RkPWMrKzJhIC1mY29udHJhY3RzIiB9CisKKy8vIFRlc3RzIGZvciBmdW5jdGlvbiB0ZW1w bGF0ZXMKKwordGVtcGxhdGU8dHlwZW5hbWUgVD4KK1QgZjEoVCBuKQorICBbW3ByZTogbiA+PSAw XV0KKyAgW1twb3N0IHI6IHIgPj0gMF1dCisgIFtbcG9zdCByOiAhKHIgPCAwKV1dCit7CisgIHJl dHVybiBuOworfQorCisKK3ZvaWQgZHJpdmVyKCkKK3sKKyAgZjEoMCk7Cit9ClwgTm8gbmV3bGlu ZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZ2NjL3Rlc3RzdWl0ZS9nKysuZGcvY29udHJh Y3RzL2NvbnRyYWN0cy1wb3N0Ni5DIGIvZ2NjL3Rlc3RzdWl0ZS9nKysuZGcvY29udHJhY3RzL2Nv bnRyYWN0cy1wb3N0Ni5DCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi5m ODI0NmZiYzE1ZgotLS0gL2Rldi9udWxsCisrKyBiL2djYy90ZXN0c3VpdGUvZysrLmRnL2NvbnRy YWN0cy9jb250cmFjdHMtcG9zdDYuQwpAQCAtMCwwICsxLDMwIEBACisvLyB7IGRnLWRvIGNvbXBp bGUgfQorLy8geyBkZy1vcHRpb25zICItc3RkPWMrKzJhIC1mY29udHJhY3RzIiB9CisKKy8vIFRl c3QgZm9yIGNsYXNzIG1lbWJlcnMKKwordGVtcGxhdGU8dHlwZW5hbWUgVD4KK3N0cnVjdCBTCit7 CisgIFMoVCBuKQorICAgIFtbcG9zdDogdHJ1ZV1dCisgICAgOiBuKG4pCisgIHsgfQorCisgIFQg ZjEoVCBuKQorICAgIFtbcHJlOiBuID49IDBdXQorICAgIFtbcG9zdCByOiByID49IDBdXQorICAg IFtbcG9zdCByOiAhKHIgPCAwKV1dCisgIHsKKyAgICByZXR1cm4gbjsKKyAgfQorCisgIFQgbjsK K307CisKKwordm9pZCBkcml2ZXIoKQoreworICBTPGludD4gczEoMCk7CisgIHMxLmYxKDIpOwor fQpkaWZmIC0tZ2l0IGEvZ2NjL3Rlc3RzdWl0ZS9nKysuZGcvY29udHJhY3RzL2NvbnRyYWN0cy1w cmUxLkMgYi9nY2MvdGVzdHN1aXRlL2crKy5kZy9jb250cmFjdHMvY29udHJhY3RzLXByZTEuQwpu ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uOTA4MTAzY2RlMWUKLS0tIC9k ZXYvbnVsbAorKysgYi9nY2MvdGVzdHN1aXRlL2crKy5kZy9jb250cmFjdHMvY29udHJhY3RzLXBy ZTEuQwpAQCAtMCwwICsxLDM2IEBACisvLyBnZW5lcmljIHByZSBjb250cmFjdCBwYXJzaW5nIGNo ZWNrcworLy8gICBjaGVjayBvbWl0dGVkLCAnZGVmYXVsdCcsICdhdWRpdCcsIGFuZCAnYXhpb20n IGNvbnRyYWN0IGxldmVscyBwYXJzZQorLy8gICBlbnN1cmUgdGhhdCBhbiBpbnZhbGlkIGNvbnRy Y2F0IGxldmVsICdvZmYnIGVycm9ycworLy8gICBlbnN1cmUgdGhhdCBhIHByZWRpY2F0ZSByZWZl cmVuY2luZyBhbiB1bmRlZmluZWQgdmFyaWFibGUgZXJyb3JzCisvLyAgIGVuc3VyZSB0aGF0IGEg bWlzc2luZyBjb2xvbiBhZnRlciBjb250cmFjdCBsZXZlbCBlcnJvcnMKKy8vIHsgZGctZG8gY29t cGlsZSB9CisvLyB7IGRnLW9wdGlvbnMgIi1zdGQ9YysrMmEgLWZjb250cmFjdHMiIH0KKwordm9p ZCBmMShpbnQgeCkgW1sgcHJlOiB4ID49IDAgXV0geyB9Cit2b2lkIGYyKGludCB4KSBbWyBwcmUg ZGVmYXVsdDogeCA+PSAwIF1dIHsgfQordm9pZCBmMyhpbnQgeCkgW1sgcHJlIGF1ZGl0OiB4ID49 IDAgXV0geyB9Cit2b2lkIGY0KGludCB4KSBbWyBwcmUgYXhpb206IHggPj0gMCBdXSB7IH0KKwor dm9pZCBmaW52YWxpZChpbnQgeCkgW1sgcHJlIGludmFsaWQ6IHggPj0gMCBdXSB7IH0gLy8geyBk Zy1lcnJvciAiZXhwZWN0ZWQgY29udHJhY3QgbGV2ZWwiIH0KK3ZvaWQgZnVuZGVjbGFyZWQoKSBb WyBwcmU6IHggPj0gMCBdXSB7IH0gLy8geyBkZy1lcnJvciAiLnguIHdhcyBub3QgZGVjbGFyZWQg aW4gdGhpcyBzY29wZSIgfQordm9pZCBmbWlzc2luZ2NvbG9uKGludCB4KSBbWyBwcmUgZGVmYXVs dCB4ID09IDBdXSB7IH0gLy8geyBkZy1lcnJvciAiZXhwZWN0ZWQgLjouIGJlZm9yZSAueC4iIH0K KworaW50IFo7Cit2b2lkICgqZnAxKShpbnQgeCkgW1sgcHJlOiBaID4gMCBdXTsgLy8geyBkZy1l cnJvciAiY29udHJhY3RzIG11c3QgYXBwZXJ0YWluIiB9Cit2b2lkICgqZnAyIFtbIHByZTogWiA+ IDAgXV0pKGludCB4KTsgLy8geyBkZy1lcnJvciAiY29udHJhY3RzIG11c3QgYXBwZXJ0YWluIiB9 Cit0eXBlZGVmIHZvaWQgKCpmcDMpKGludCB4KSBbWyBwcmU6IFogPiAwIF1dOyAvLyB7IGRnLWVy cm9yICJjb250cmFjdHMgbXVzdCBhcHBlcnRhaW4iIH0KK3R5cGVkZWYgdm9pZCAoKmZwNCBbWyBw cmU6IFogPiAwIF1dKShpbnQgeCk7IC8vIHsgZGctZXJyb3IgImNvbnRyYWN0cyBtdXN0IGFwcGVy dGFpbiIgfQorZnAzIGZuNShpbnQgYSkgW1sgcHJlOiBhID4gMCBdXTsgLy8geyBkZy1ib2d1cyAi Y29udHJhY3RzIG11c3QgYXBwZXJ0YWluIiB9CisKK2ludCB4eXo7CitbWyBwcmU6IHh5eiBdXSBz dHJ1Y3QgQmFyOyAvLyB7IGRnLWVycm9yICJjb250cmFjdHMgbXVzdCBhcHBlcnRhaW4iIH0KKy8v IHsgZGctd2FybmluZyAiYXR0cmlidXRlIGlnbm9yZWQiICIiIHsgdGFyZ2V0ICotKi0qIH0gLi0x IH0KK3N0cnVjdCBbWyBwcmU6IHh5eiBdXSBCYXI7IC8vIHsgZGctZXJyb3IgImNvbnRyYWN0cyBt dXN0IGFwcGVydGFpbiIgfQorc3RydWN0IEJhciBbWyBwcmU6IHh5eiBdXTsgLy8geyBkZy1lcnJv ciAiY29udHJhY3RzIG11c3QgYXBwZXJ0YWluIiB9CitzdHJ1Y3QgWm9vIHt9IHggW1sgcHJlOiB4 eXogXV07IC8vIHsgZGctZXJyb3IgImNvbnRyYWN0cyBtdXN0IGFwcGVydGFpbiIgfQorCit2b2lk IGY2KGludCB4KSBbWyBwcmU6IHggPiAwIDsgLy8geyBkZy1lcnJvciAiZXhwZWN0ZWQgLl0uIiB9 Cit2b2lkIGY3KGludCB4KSBbWyBwcmU6IHggPiAwIF07IC8vIHsgZGctZXJyb3IgImV4cGVjdGVk IC5dLiIgfQordm9pZCBmOChpbnQgeCkgW1sgcHJlOiB4ID4gMCB7IH07IC8vIHsgZGctZXJyb3Ig ImV4cGVjdGVkIC5dLiIgfQordm9pZCBmOShpbnQgeCkgW1sgcHJlOiB4ID4gMCBdIHsgfTsgLy8g eyBkZy1lcnJvciAiZXhwZWN0ZWQgLl0uIiB9CisKZGlmZiAtLWdpdCBhL2djYy90ZXN0c3VpdGUv ZysrLmRnL2NvbnRyYWN0cy9jb250cmFjdHMtcHJlMTAuQyBiL2djYy90ZXN0c3VpdGUvZysrLmRn L2NvbnRyYWN0cy9jb250cmFjdHMtcHJlMTAuQwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw MDAwMDAwMDAwMC4uODc3ZTlhZGE0MDQKLS0tIC9kZXYvbnVsbAorKysgYi9nY2MvdGVzdHN1aXRl L2crKy5kZy9jb250cmFjdHMvY29udHJhY3RzLXByZTEwLkMKQEAgLTAsMCArMSwxOTAgQEAKKy8v IHsgZGctZG8gcnVuIH0KKy8vIHsgZGctb3B0aW9ucyAiLXN0ZD1jKysyYSAtZmNvbnRyYWN0cyAt ZmNvbnRyYWN0LWNvbnRpbnVhdGlvbi1tb2RlPW9uIiB9CisKK3N0cnVjdCBNCit7CisgIHRlbXBs YXRlPHR5cGVuYW1lIFQ+CisgIGludCBmKGludCBhKSBbWyBwcmU6IGEgPiAwIF1dOworCisgIHRl bXBsYXRlPHR5cGVuYW1lIFQ+CisgIGludCBnKGludCBhKSBbWyBwcmU6IGEgPiAwIF1dCisgIHsK KyAgICByZXR1cm4gLWE7CisgIH0KKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPgorICBpbnQgZl9h cmcoVCBhKSBbWyBwcmU6IGEgPiAwIF1dOworCisgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+CisgIGlu dCBnX2FyZyhUIGEpIFtbIHByZTogYSA+IDAgXV0KKyAgeworICAgIHJldHVybiAoaW50KS1hOwor ICB9CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgVD4KKyAgVCBmX3JldChpbnQgYSkgW1sgcHJlOiBh ID4gMCBdXTsKKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPgorICBUIGdfcmV0KGludCBhKSBbWyBw cmU6IGEgPiAwIF1dCisgIHsKKyAgICByZXR1cm4gLWEgKiAxLjU7CisgIH0KK307CisKK3RlbXBs YXRlPHR5cGVuYW1lIFQ+CitpbnQgTTo6ZihpbnQgYSkKK3sKKyAgcmV0dXJuIC1hOworfQorCit0 ZW1wbGF0ZTx0eXBlbmFtZSBUPgoraW50IE06OmZfYXJnKFQgYSkKK3sKKyAgcmV0dXJuIChpbnQp LWE7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+CitUIE06OmZfcmV0KGludCBhKQoreworICBy ZXR1cm4gLWEgKiAoVCkxLjU7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+CitzdHJ1Y3QgUwor eworICB0ZW1wbGF0ZTx0eXBlbmFtZSBRPgorICBpbnQgZihpbnQgYSkgW1sgcHJlOiBhID4gMCBd XTsKKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBRPgorICBpbnQgZyhpbnQgYSkgW1sgcHJlOiBhID4g MCBdXQorICB7CisgICAgcmV0dXJuIC1hOworICB9Cit9OworCit0ZW1wbGF0ZTx0eXBlbmFtZSBU PgordGVtcGxhdGU8dHlwZW5hbWUgUT4KK2ludCBTPFQ+OjpmKGludCBhKQoreworICByZXR1cm4g LWE7Cit9CisKKyNpbmNsdWRlIDxjc3RkaW8+CitpbnQgbWFpbihpbnQsIGNoYXIqKikKK3sKKyAg eworICAgIE0gbTsKKyAgICBwcmludGYgKCI9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT1cbiIpOworICAgIHByaW50ZiAoIm0uZjxpbnQ+KC0xMCk6ICVkXG4iLCBtLmY8aW50PigtMTAp KTsKKyAgICBwcmludGYgKCJtLmY8ZG91YmxlPigtMTEuNSk6ICVkXG4iLCBtLmY8ZG91YmxlPigt MTEuNSkpOworICAgIHByaW50ZiAoIm0uZjxpbnQ+KDEwKTogJWRcbiIsIG0uZjxpbnQ+KDEwKSk7 CisgICAgcHJpbnRmICgibS5mPGRvdWJsZT4oMTEuNSk6ICVkXG4iLCBtLmY8ZG91YmxlPigxMS41 KSk7CisKKyAgICBwcmludGYgKCI9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiIp OworICAgIHByaW50ZiAoIm0uZzxpbnQ+KC0xMCk6ICVkXG4iLCBtLmc8aW50PigtMTApKTsKKyAg ICBwcmludGYgKCJtLmc8ZG91YmxlPigtMTEuNSk6ICVkXG4iLCBtLmc8ZG91YmxlPigtMTEuNSkp OworICAgIHByaW50ZiAoIm0uZzxpbnQ+KDEwKTogJWRcbiIsIG0uZzxpbnQ+KDEwKSk7CisgICAg cHJpbnRmICgibS5nPGRvdWJsZT4oMTEuNSk6ICVkXG4iLCBtLmc8ZG91YmxlPigxMS41KSk7CisK KyAgICBwcmludGYgKCI9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiIpOworICAg IHByaW50ZiAoIm0uZl9hcmcoLTEwKTogJWRcbiIsIG0uZl9hcmcoLTEwKSk7CisgICAgcHJpbnRm ICgibS5mX2FyZygtMTEuNSk6ICVkXG4iLCBtLmZfYXJnKC0xMS41KSk7CisgICAgcHJpbnRmICgi bS5mX2FyZygxMCk6ICVkXG4iLCBtLmZfYXJnKDEwKSk7CisgICAgcHJpbnRmICgibS5mX2FyZygx MS41KTogJWRcbiIsIG0uZl9hcmcoMTEuNSkpOworCisgICAgcHJpbnRmICgiPT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09XG4iKTsKKyAgICBwcmludGYgKCJtLmdfYXJnKC0xMCk6ICVk XG4iLCBtLmdfYXJnKC0xMCkpOworICAgIHByaW50ZiAoIm0uZ19hcmcoLTExLjUpOiAlZFxuIiwg bS5nX2FyZygtMTEuNSkpOworICAgIHByaW50ZiAoIm0uZ19hcmcoMTApOiAlZFxuIiwgbS5nX2Fy ZygxMCkpOworICAgIHByaW50ZiAoIm0uZ19hcmcoMTEuNSk6ICVkXG4iLCBtLmdfYXJnKDExLjUp KTsKKworICAgIHByaW50ZiAoIj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuIik7 CisgICAgcHJpbnRmICgibS5mX3JldDxpbnQ+KC0xMCk6ICVkXG4iLCBtLmZfcmV0PGludD4oLTEw KSk7CisgICAgcHJpbnRmICgibS5mX3JldDxkb3VibGU+KC0xMS41KTogJWZcbiIsIG0uZl9yZXQ8 ZG91YmxlPigtMTEuNSkpOworICAgIHByaW50ZiAoIm0uZl9yZXQ8aW50PigxMCk6ICVkXG4iLCBt LmZfcmV0PGludD4oMTApKTsKKyAgICBwcmludGYgKCJtLmZfcmV0PGRvdWJsZT4oMTEuNSk6ICVm XG4iLCBtLmZfcmV0PGRvdWJsZT4oMTEuNSkpOworCisgICAgcHJpbnRmICgiPT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09XG4iKTsKKyAgICBwcmludGYgKCJtLmdfcmV0PGludD4oLTEw KTogJWRcbiIsIG0uZ19yZXQ8aW50PigtMTApKTsKKyAgICBwcmludGYgKCJtLmdfcmV0PGRvdWJs ZT4oLTExLjUpOiAlZlxuIiwgbS5nX3JldDxkb3VibGU+KC0xMS41KSk7CisgICAgcHJpbnRmICgi bS5nX3JldDxpbnQ+KDEwKTogJWRcbiIsIG0uZ19yZXQ8aW50PigxMCkpOworICAgIHByaW50ZiAo Im0uZ19yZXQ8ZG91YmxlPigxMS41KTogJWZcbiIsIG0uZ19yZXQ8ZG91YmxlPigxMS41KSk7Cisg IH0KKworICB7CisgICAgUzxpbnQ+IHM7CisgICAgcHJpbnRmICgiPT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09XG4iKTsKKyAgICBzLmY8aW50PigtMTApOworCisgICAgcy5mPGRvdWJs ZT4oLTEwKTsKKworICAgIHByaW50ZiAoIj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PVxuIik7CisgICAgcy5nPGludD4oLTEwKTsKKworICAgIHMuZzxkb3VibGU+KC0xMCk7CisgIH0K KworICB7CisgICAgUzxkb3VibGU+IHM7CisgICAgcHJpbnRmICgiPT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09XG4iKTsKKyAgICBzLmY8aW50PigtMTApOworCisgICAgcy5mPGRvdWJs ZT4oLTEwKTsKKworICAgIHByaW50ZiAoIj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PVxuIik7CisgICAgcy5nPGludD4oLTEwKTsKKworICAgIHMuZzxkb3VibGU+KC0xMCk7CisgIH0K KworICByZXR1cm4gMDsKK30KKworLy8geyBkZy1vdXRwdXQgIj09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PShcbnxcclxufFxyKSoiIH0KKy8vIHsgZGctb3V0cHV0ICJkZWZhdWx0IHN0 ZDo6aGFuZGxlX2NvbnRyYWN0X3Zpb2xhdGlvbiBjYWxsZWQ6IC4qLkMgNyBNOjpmPGludD4gLioo XG58XHJcbnxccikqIiB9CisvLyB7IGRnLW91dHB1dCAibS5mPGludD4uLTEwLjogMTAoXG58XHJc bnxccikqIiB9CisvLyB7IGRnLW91dHB1dCAiZGVmYXVsdCBzdGQ6OmhhbmRsZV9jb250cmFjdF92 aW9sYXRpb24gY2FsbGVkOiAuKi5DIDcgTTo6Zjxkb3VibGU+IC4qKFxufFxyXG58XHIpKiIgfQor Ly8geyBkZy1vdXRwdXQgIm0uZjxkb3VibGU+Li0xMS41LjogMTEoXG58XHJcbnxccikqIiB9Cisv LyB7IGRnLW91dHB1dCAibS5mPGludD4uMTAuOiAtMTAoXG58XHJcbnxccikqIiB9CisvLyB7IGRn LW91dHB1dCAibS5mPGRvdWJsZT4uMTEuNS46IC0xMShcbnxcclxufFxyKSoiIH0KKy8vIHsgZGct b3V0cHV0ICI9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0oXG58XHJcbnxccikqIiB9 CisvLyB7IGRnLW91dHB1dCAiZGVmYXVsdCBzdGQ6OmhhbmRsZV9jb250cmFjdF92aW9sYXRpb24g Y2FsbGVkOiAuKi5DIDEwIE06Omc8aW50PiAuKihcbnxcclxufFxyKSoiIH0KKy8vIHsgZGctb3V0 cHV0ICJtLmc8aW50Pi4tMTAuOiAxMChcbnxcclxufFxyKSoiIH0KKy8vIHsgZGctb3V0cHV0ICJk ZWZhdWx0IHN0ZDo6aGFuZGxlX2NvbnRyYWN0X3Zpb2xhdGlvbiBjYWxsZWQ6IC4qLkMgMTAgTTo6 Zzxkb3VibGU+IC4qKFxufFxyXG58XHIpKiIgfQorLy8geyBkZy1vdXRwdXQgIm0uZzxkb3VibGU+ Li0xMS41LjogMTEoXG58XHJcbnxccikqIiB9CisvLyB7IGRnLW91dHB1dCAibS5nPGludD4uMTAu OiAtMTAoXG58XHJcbnxccikqIiB9CisvLyB7IGRnLW91dHB1dCAibS5nPGRvdWJsZT4uMTEuNS46 IC0xMShcbnxcclxufFxyKSoiIH0KKy8vIHsgZGctb3V0cHV0ICI9PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT0oXG58XHJcbnxccikqIiB9CisvLyB7IGRnLW91dHB1dCAiZGVmYXVsdCBz dGQ6OmhhbmRsZV9jb250cmFjdF92aW9sYXRpb24gY2FsbGVkOiAuKi5DIDE2IE06OmZfYXJnPGlu dD4gLiooXG58XHJcbnxccikqIiB9CisvLyB7IGRnLW91dHB1dCAibS5mX2FyZy4tMTAuOiAxMChc bnxcclxufFxyKSoiIH0KKy8vIHsgZGctb3V0cHV0ICJkZWZhdWx0IHN0ZDo6aGFuZGxlX2NvbnRy YWN0X3Zpb2xhdGlvbiBjYWxsZWQ6IC4qLkMgMTYgTTo6Zl9hcmc8ZG91YmxlPiAuKihcbnxcclxu fFxyKSoiIH0KKy8vIHsgZGctb3V0cHV0ICJtLmZfYXJnLi0xMS41LjogMTEoXG58XHJcbnxccikq IiB9CisvLyB7IGRnLW91dHB1dCAibS5mX2FyZy4xMC46IC0xMChcbnxcclxufFxyKSoiIH0KKy8v IHsgZGctb3V0cHV0ICJtLmZfYXJnLjExLjUuOiAtMTEoXG58XHJcbnxccikqIiB9CisvLyB7IGRn LW91dHB1dCAiPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09KFxufFxyXG58XHIpKiIg fQorLy8geyBkZy1vdXRwdXQgImRlZmF1bHQgc3RkOjpoYW5kbGVfY29udHJhY3RfdmlvbGF0aW9u IGNhbGxlZDogLiouQyAxOSBNOjpnX2FyZzxpbnQ+IC4qKFxufFxyXG58XHIpKiIgfQorLy8geyBk Zy1vdXRwdXQgIm0uZ19hcmcuLTEwLjogMTAoXG58XHJcbnxccikqIiB9CisvLyB7IGRnLW91dHB1 dCAiZGVmYXVsdCBzdGQ6OmhhbmRsZV9jb250cmFjdF92aW9sYXRpb24gY2FsbGVkOiAuKi5DIDE5 IE06OmdfYXJnPGRvdWJsZT4gLiooXG58XHJcbnxccikqIiB9CisvLyB7IGRnLW91dHB1dCAibS5n X2FyZy4tMTEuNS46IDExKFxufFxyXG58XHIpKiIgfQorLy8geyBkZy1vdXRwdXQgIm0uZ19hcmcu MTAuOiAtMTAoXG58XHJcbnxccikqIiB9CisvLyB7IGRnLW91dHB1dCAibS5nX2FyZy4xMS41Ljog LTExKFxufFxyXG58XHIpKiIgfQorLy8geyBkZy1vdXRwdXQgIj09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PShcbnxcclxufFxyKSoiIH0KKy8vIHsgZGctb3V0cHV0ICJkZWZhdWx0IHN0 ZDo6aGFuZGxlX2NvbnRyYWN0X3Zpb2xhdGlvbiBjYWxsZWQ6IC4qLkMgMjUgTTo6Zl9yZXQ8aW50 PiAuKihcbnxcclxufFxyKSoiIH0KKy8vIHsgZGctb3V0cHV0ICJtLmZfcmV0PGludD4uLTEwLjog MTAoXG58XHJcbnxccikqIiB9CisvLyB7IGRnLW91dHB1dCAiZGVmYXVsdCBzdGQ6OmhhbmRsZV9j b250cmFjdF92aW9sYXRpb24gY2FsbGVkOiAuKi5DIDI1IE06OmZfcmV0PGRvdWJsZT4gLiooXG58 XHJcbnxccikqIiB9CisvLyB7IGRnLW91dHB1dCAibS5mX3JldDxkb3VibGU+Li0xMS41LjogMTYu NTAwMDAwKFxufFxyXG58XHIpKiIgfQorLy8geyBkZy1vdXRwdXQgIm0uZl9yZXQ8aW50Pi4xMC46 IC0xMChcbnxcclxufFxyKSoiIH0KKy8vIHsgZGctb3V0cHV0ICJtLmZfcmV0PGRvdWJsZT4uMTEu NS46IC0xNi41MDAwMDAoXG58XHJcbnxccikqIiB9CisvLyB7IGRnLW91dHB1dCAiPT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09KFxufFxyXG58XHIpKiIgfQorLy8geyBkZy1vdXRwdXQg ImRlZmF1bHQgc3RkOjpoYW5kbGVfY29udHJhY3RfdmlvbGF0aW9uIGNhbGxlZDogLiouQyAyOCBN OjpnX3JldDxpbnQ+IC4qKFxufFxyXG58XHIpKiIgfQorLy8geyBkZy1vdXRwdXQgIm0uZ19yZXQ8 aW50Pi4tMTAuOiAxNShcbnxcclxufFxyKSoiIH0KKy8vIHsgZGctb3V0cHV0ICJkZWZhdWx0IHN0 ZDo6aGFuZGxlX2NvbnRyYWN0X3Zpb2xhdGlvbiBjYWxsZWQ6IC4qLkMgMjggTTo6Z19yZXQ8ZG91 YmxlPiAuKihcbnxcclxufFxyKSoiIH0KKy8vIHsgZGctb3V0cHV0ICJtLmdfcmV0PGRvdWJsZT4u LTExLjUuOiAxNi41MDAwMDAoXG58XHJcbnxccikqIiB9CisvLyB7IGRnLW91dHB1dCAibS5nX3Jl dDxpbnQ+LjEwLjogLTE1KFxufFxyXG58XHIpKiIgfQorLy8geyBkZy1vdXRwdXQgIm0uZ19yZXQ8 ZG91YmxlPi4xMS41LjogLTE2LjUwMDAwMChcbnxcclxufFxyKSoiIH0KKy8vIHsgZGctb3V0cHV0 ICI9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0oXG58XHJcbnxccikqIiB9CisvLyB7 IGRnLW91dHB1dCAiZGVmYXVsdCBzdGQ6OmhhbmRsZV9jb250cmFjdF92aW9sYXRpb24gY2FsbGVk OiAuKi5DIDU5IFM8aW50Pjo6ZzxpbnQ+IC4qKFxufFxyXG58XHIpKiIgfQorLy8geyBkZy1vdXRw dXQgImRlZmF1bHQgc3RkOjpoYW5kbGVfY29udHJhY3RfdmlvbGF0aW9uIGNhbGxlZDogLiouQyA1 OSBTPGludD46Omc8ZG91YmxlPiAuKihcbnxcclxufFxyKSoiIH0KKy8vIHsgZGctb3V0cHV0ICI9 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0oXG58XHJcbnxccikqIiB9CisvLyB7IGRn LW91dHB1dCAiZGVmYXVsdCBzdGQ6OmhhbmRsZV9jb250cmFjdF92aW9sYXRpb24gY2FsbGVkOiAu Ki5DIDU5IFM8ZG91YmxlPjo6ZzxpbnQ+IC4qKFxufFxyXG58XHIpKiIgfQorLy8geyBkZy1vdXRw dXQgImRlZmF1bHQgc3RkOjpoYW5kbGVfY29udHJhY3RfdmlvbGF0aW9uIGNhbGxlZDogLiouQyA1 OSBTPGRvdWJsZT46Omc8ZG91YmxlPiAuKihcbnxcclxufFxyKSoiIH0KZGlmZiAtLWdpdCBhL2dj Yy90ZXN0c3VpdGUvZysrLmRnL2NvbnRyYWN0cy9jb250cmFjdHMtcHJlMi5DIGIvZ2NjL3Rlc3Rz dWl0ZS9nKysuZGcvY29udHJhY3RzL2NvbnRyYWN0cy1wcmUyLkMKbmV3IGZpbGUgbW9kZSAxMDA2 NDQKaW5kZXggMDAwMDAwMDAwMDAuLjRmZTJmOWQwMTkyCi0tLSAvZGV2L251bGwKKysrIGIvZ2Nj L3Rlc3RzdWl0ZS9nKysuZGcvY29udHJhY3RzL2NvbnRyYWN0cy1wcmUyLkMKQEAgLTAsMCArMSwy MTIgQEAKKy8vIGJhc2ljIHRlc3QgdG8gZW5zdXJlIHByZSBjb250cmFjdHMgd29yayBmb3IgZnJl ZSBmdW5jdGlvbnMKKy8vIHsgZGctZG8gcnVuIH0KKy8vIHsgZGctb3B0aW9ucyAiLXN0ZD1jKysy YSAtZmNvbnRyYWN0cyAtZmNvbnRyYWN0LWNvbnRpbnVhdGlvbi1tb2RlPW9uIiB9CisjaW5jbHVk ZSA8Y3N0ZGlvPgorCituYW1lc3BhY2UgbnVsbGFyeQoreworICBpbnQgeCA9IDEwOworICBpbnQg eSA9IDEwOworCisgIHZvaWQgZnVuKCkKKyAgICBbWyBwcmU6IHggPCAwIF1dCisgIHsKKyAgICBw cmludGYoImZ1bjo6eDogJWRcbiIsIHgpOworICB9CisKKyAgdm9pZCBmdW4yKCkKKyAgICBbWyBw cmU6IHggPCAwIF1dCisgICAgW1sgcHJlOiB5IDwgMCBdXQorICB7CisgICAgcHJpbnRmKCJmdW4y Ojp4OiAlZCBmdW4yOjp5OiAlZFxuIiwgeCwgeSk7CisgIH0KKworICB2b2lkIGZ1bmVuZCgpCisg ICAgW1sgcHJlOiB4IDwgMCBdXTsKK30KKworbmFtZXNwYWNlIG5vbnZvaWQKK3sKKyAgaW50IHgg PSAxMDsKKyAgZG91YmxlIHkgPSAxMC41OworCisgIHN0cnVjdCBTCisgIHsKKyAgICBib29sIHo7 CisgIH07CisKKyAgdm9pZCB2ZnVuKCkKKyAgICBbWyBwcmU6IHggPCAwIF1dCisgIHsKKyAgICBw cmludGYoInZmdW46Ong6ICVkXG4iLCB4KTsKKyAgfQorCisgIGludCBmdW4oKQorICAgIFtbIHBy ZTogeCA8IDAgXV0KKyAgeworICAgIHByaW50ZigiZnVuOjp4OiAlZFxuIiwgeCk7CisgICAgcmV0 dXJuIHg7CisgIH0KKworICBkb3VibGUgZnVuMigpCisgICAgW1sgcHJlOiB4IDwgMCBdXQorICAg IFtbIHByZTogeSA8IDAgXV0KKyAgeworICAgIHByaW50ZigiZnVuMjo6eDogJWQgZnVuMjo6eTog JWZcbiIsIHgsIHkpOworICAgIHJldHVybiB5OworICB9CisKKyAgUyBmdW5lbmQoKQorICAgIFtb IHByZTogeCA8IDAgXV07Cit9CisKK25hbWVzcGFjZSBub25udWxsYXJ5Cit7CisgIGludCB4ID0g MTA7CisgIGRvdWJsZSB5ID0gMTAuNTsKKworICBzdHJ1Y3QgUworICB7CisgICAgYm9vbCB6Owor ICB9OworCisgIHZvaWQgdmZ1bihpbnQgbSwgZG91YmxlIG4pCisgICAgW1sgcHJlOiB4IDwgMCBd XQorICAgIFtbIHByZTogbSA8IDAgXV0KKyAgeworICAgIHByaW50ZigidmZ1bjo6eDogJWRcbiIs IHgpOworICB9CisKKyAgaW50IGZ1bihpbnQgbSwgZG91YmxlIG4pCisgICAgW1sgcHJlOiB4IDwg MCBdXQorICB7CisgICAgcHJpbnRmKCJmdW46Ong6ICVkXG4iLCB4KTsKKyAgICByZXR1cm4geDsK KyAgfQorCisgIGRvdWJsZSBmdW4yKGludCBtLCBkb3VibGUgbikKKyAgICBbWyBwcmU6IHggPCAw IF1dCisgICAgW1sgcHJlOiB5IDwgMCBdXQorICAgIFtbIHByZTogbSA8IDAgXV0KKyAgICBbWyBw cmU6IG4gPCAwIF1dCisgIHsKKyAgICBwcmludGYoImZ1bjI6Ong6ICVkIGZ1bjI6Onk6ICVmXG4i LCB4LCB5KTsKKyAgICByZXR1cm4geTsKKyAgfQorCisgIFMgZnVuZW5kKGludCBtLCBkb3VibGUg bikKKyAgICBbWyBwcmU6IHggPCAwIF1dCisgICAgW1sgcHJlOiBtIDwgMCBdXTsKK30KKworaW50 IG1haW4oaW50LCBjaGFyKiopIHsKKyAgLy8gbnVsbGFyeSB2b2lkCisgIHsKKyAgICBudWxsYXJ5 OjpmdW4oKTsKKyAgICBudWxsYXJ5OjpmdW4yKCk7CisgICAgbnVsbGFyeTo6ZnVuZW5kKCk7Cisg IH0KKworICAvLyBudWxsYXJ5IG5vbiB2b2lkCisgIHsKKyAgICBub252b2lkOjp2ZnVuKCk7CisK KyAgICBpbnQgZiA9IDEzOworICAgIGYgPSBub252b2lkOjpmdW4oKTsKKyAgICBwcmludGYoIm1h aW46OmY6ICVkXG4iLCBmKTsKKyAgICBkb3VibGUgZCA9IDEzLjM3OworICAgIGQgPSBub252b2lk OjpmdW4yKCk7CisgICAgcHJpbnRmKCJtYWluOjpkOiAlZlxuIiwgZCk7CisgICAgbm9udm9pZDo6 UyBzID0gbm9udm9pZDo6ZnVuZW5kKCk7CisgICAgcHJpbnRmKCJtYWluOjpzLno6ICVkXG4iLCBz LnogPyAxIDogMCk7CisgIH0KKworICAvLyBub24tbnVsbGFyeSBub24tdm9pZAorICB7CisgICAg aW50IHggPSAxMTsKKyAgICBkb3VibGUgeSA9IDExLjU7CisKKyAgICBub25udWxsYXJ5Ojp2ZnVu KHgsIHkpOworCisgICAgaW50IGYgPSAxMzsKKyAgICBmID0gbm9ubnVsbGFyeTo6ZnVuKHgsIHkp OworICAgIHByaW50ZigibWFpbjo6ZjogJWRcbiIsIGYpOworICAgIGRvdWJsZSBkID0gMTMuMzc7 CisgICAgZCA9IG5vbm51bGxhcnk6OmZ1bjIoeCwgeSk7CisgICAgcHJpbnRmKCJtYWluOjpkOiAl ZlxuIiwgZCk7CisgICAgbm9ubnVsbGFyeTo6UyBzID0gbm9ubnVsbGFyeTo6ZnVuZW5kKHgsIHkp OworICAgIHByaW50ZigibWFpbjo6cy56OiAlZFxuIiwgcy56ID8gMSA6IDApOworICB9CisgIHJl dHVybiAwOworfQorCituYW1lc3BhY2UgbnVsbGFyeQoreworICB2b2lkIGZ1bmVuZCgpCisgICAg W1sgcHJlOiB4IDwgMCBdXQorICB7CisgICAgcHJpbnRmKCJmdW5lbmQ6Ong6ICVkXG4iLCB4KTsK KyAgfQorfQorCituYW1lc3BhY2Ugbm9udm9pZAoreworICBTIGZ1bmVuZCgpCisgICAgW1sgcHJl OiB4IDwgMCBdXQorICB7CisgICAgcHJpbnRmKCJmdW5lbmQ6Ong6ICVkXG4iLCB4KTsKKyAgICBT IHM7CisgICAgcy56ID0gdHJ1ZTsKKyAgICByZXR1cm4gczsKKyAgfQorfQorCituYW1lc3BhY2Ug bm9ubnVsbGFyeQoreworICBTIGZ1bmVuZChpbnQgbSwgZG91YmxlIG4pCisgICAgW1sgcHJlOiB4 IDwgMCBdXQorICAgIFtbIHByZTogbSA8IDAgXV0KKyAgeworICAgIHByaW50ZigiZnVuZW5kOjp4 OiAlZFxuIiwgeCk7CisgICAgUyBzOworICAgIHMueiA9IHRydWU7CisgICAgcmV0dXJuIHM7Cisg IH0KK30KKworLy8geyBkZy1vdXRwdXQgImRlZmF1bHQgc3RkOjpoYW5kbGVfY29udHJhY3Rfdmlv bGF0aW9uIGNhbGxlZDogLiouQyAxMiBudWxsYXJ5OjpmdW4gLiooXG58XHJcbnxccikqIiB9Cisv LyB7IGRnLW91dHB1dCAiZnVuOjp4OiAxMChcbnxcclxufFxyKSoiIH0KKy8vIHsgZGctb3V0cHV0 ICJkZWZhdWx0IHN0ZDo6aGFuZGxlX2NvbnRyYWN0X3Zpb2xhdGlvbiBjYWxsZWQ6IC4qLkMgMTgg bnVsbGFyeTo6ZnVuMiAuKihcbnxcclxufFxyKSoiIH0KKy8vIHsgZGctb3V0cHV0ICJkZWZhdWx0 IHN0ZDo6aGFuZGxlX2NvbnRyYWN0X3Zpb2xhdGlvbiBjYWxsZWQ6IC4qLkMgMTkgbnVsbGFyeTo6 ZnVuMiAuKihcbnxcclxufFxyKSoiIH0KKy8vIHsgZGctb3V0cHV0ICJmdW4yOjp4OiAxMCBmdW4y Ojp5OiAxMChcbnxcclxufFxyKSoiIH0KKy8vIHsgZGctb3V0cHV0ICJkZWZhdWx0IHN0ZDo6aGFu ZGxlX2NvbnRyYWN0X3Zpb2xhdGlvbiBjYWxsZWQ6IC4qLkMgMTQ2IG51bGxhcnk6OmZ1bmVuZCAu KihcbnxcclxufFxyKSoiIH0KKy8vIHsgZGctb3V0cHV0ICJmdW5lbmQ6Ong6IDEwKFxufFxyXG58 XHIpKiIgfQorLy8geyBkZy1vdXRwdXQgImRlZmF1bHQgc3RkOjpoYW5kbGVfY29udHJhY3Rfdmlv bGF0aW9uIGNhbGxlZDogLiouQyAzOSBub252b2lkOjp2ZnVuIC4qKFxufFxyXG58XHIpKiIgfQor Ly8geyBkZy1vdXRwdXQgInZmdW46Ong6IDEwKFxufFxyXG58XHIpKiIgfQorLy8geyBkZy1vdXRw dXQgImRlZmF1bHQgc3RkOjpoYW5kbGVfY29udHJhY3RfdmlvbGF0aW9uIGNhbGxlZDogLiouQyA0 NSBub252b2lkOjpmdW4gLiooXG58XHJcbnxccikqIiB9CisvLyB7IGRnLW91dHB1dCAiZnVuOjp4 OiAxMChcbnxcclxufFxyKSoiIH0KKy8vIHsgZGctb3V0cHV0ICJtYWluOjpmOiAxMChcbnxcclxu fFxyKSoiIH0KKy8vIHsgZGctb3V0cHV0ICJkZWZhdWx0IHN0ZDo6aGFuZGxlX2NvbnRyYWN0X3Zp b2xhdGlvbiBjYWxsZWQ6IC4qLkMgNTIgbm9udm9pZDo6ZnVuMiAuKihcbnxcclxufFxyKSoiIH0K Ky8vIHsgZGctb3V0cHV0ICJkZWZhdWx0IHN0ZDo6aGFuZGxlX2NvbnRyYWN0X3Zpb2xhdGlvbiBj YWxsZWQ6IC4qLkMgNTMgbm9udm9pZDo6ZnVuMiAuKihcbnxcclxufFxyKSoiIH0KKy8vIHsgZGct b3V0cHV0ICJmdW4yOjp4OiAxMCBmdW4yOjp5OiAxMC41MDAwMDAoXG58XHJcbnxccikqIiB9Cisv LyB7IGRnLW91dHB1dCAibWFpbjo6ZDogMTAuNTAwMDAwKFxufFxyXG58XHIpKiIgfQorLy8geyBk Zy1vdXRwdXQgImRlZmF1bHQgc3RkOjpoYW5kbGVfY29udHJhY3RfdmlvbGF0aW9uIGNhbGxlZDog LiouQyAxNTUgbm9udm9pZDo6ZnVuZW5kIC4qKFxufFxyXG58XHIpKiIgfQorLy8geyBkZy1vdXRw dXQgImZ1bmVuZDo6eDogMTAoXG58XHJcbnxccikqIiB9CisvLyB7IGRnLW91dHB1dCAibWFpbjo6 cy56OiAxKFxufFxyXG58XHIpKiIgfQorLy8geyBkZy1vdXRwdXQgImRlZmF1bHQgc3RkOjpoYW5k bGVfY29udHJhY3RfdmlvbGF0aW9uIGNhbGxlZDogLiouQyA3NCBub25udWxsYXJ5Ojp2ZnVuIC4q KFxufFxyXG58XHIpKiIgfQorLy8geyBkZy1vdXRwdXQgImRlZmF1bHQgc3RkOjpoYW5kbGVfY29u dHJhY3RfdmlvbGF0aW9uIGNhbGxlZDogLiouQyA3NSBub25udWxsYXJ5Ojp2ZnVuIC4qKFxufFxy XG58XHIpKiIgfQorLy8geyBkZy1vdXRwdXQgInZmdW46Ong6IDEwKFxufFxyXG58XHIpKiIgfQor Ly8geyBkZy1vdXRwdXQgImRlZmF1bHQgc3RkOjpoYW5kbGVfY29udHJhY3RfdmlvbGF0aW9uIGNh bGxlZDogLiouQyA4MSBub25udWxsYXJ5OjpmdW4gLiooXG58XHJcbnxccikqIiB9CisvLyB7IGRn LW91dHB1dCAiZnVuOjp4OiAxMChcbnxcclxufFxyKSoiIH0KKy8vIHsgZGctb3V0cHV0ICJtYWlu OjpmOiAxMChcbnxcclxufFxyKSoiIH0KKy8vIHsgZGctb3V0cHV0ICJkZWZhdWx0IHN0ZDo6aGFu ZGxlX2NvbnRyYWN0X3Zpb2xhdGlvbiBjYWxsZWQ6IC4qLkMgODggbm9ubnVsbGFyeTo6ZnVuMiAu KihcbnxcclxufFxyKSoiIH0KKy8vIHsgZGctb3V0cHV0ICJkZWZhdWx0IHN0ZDo6aGFuZGxlX2Nv bnRyYWN0X3Zpb2xhdGlvbiBjYWxsZWQ6IC4qLkMgODkgbm9ubnVsbGFyeTo6ZnVuMiAuKihcbnxc clxufFxyKSoiIH0KKy8vIHsgZGctb3V0cHV0ICJkZWZhdWx0IHN0ZDo6aGFuZGxlX2NvbnRyYWN0 X3Zpb2xhdGlvbiBjYWxsZWQ6IC4qLkMgOTAgbm9ubnVsbGFyeTo6ZnVuMiAuKihcbnxcclxufFxy KSoiIH0KKy8vIHsgZGctb3V0cHV0ICJkZWZhdWx0IHN0ZDo6aGFuZGxlX2NvbnRyYWN0X3Zpb2xh dGlvbiBjYWxsZWQ6IC4qLkMgOTEgbm9ubnVsbGFyeTo6ZnVuMiAuKihcbnxcclxufFxyKSoiIH0K Ky8vIHsgZGctb3V0cHV0ICJmdW4yOjp4OiAxMCBmdW4yOjp5OiAxMC41MDAwMDAoXG58XHJcbnxc cikqIiB9CisvLyB7IGRnLW91dHB1dCAibWFpbjo6ZDogMTAuNTAwMDAwKFxufFxyXG58XHIpKiIg fQorLy8geyBkZy1vdXRwdXQgImRlZmF1bHQgc3RkOjpoYW5kbGVfY29udHJhY3RfdmlvbGF0aW9u IGNhbGxlZDogLiouQyAxNjcgbm9ubnVsbGFyeTo6ZnVuZW5kIC4qKFxufFxyXG58XHIpKiIgfQor Ly8geyBkZy1vdXRwdXQgImRlZmF1bHQgc3RkOjpoYW5kbGVfY29udHJhY3RfdmlvbGF0aW9uIGNh bGxlZDogLiouQyAxNjggbm9ubnVsbGFyeTo6ZnVuZW5kIC4qKFxufFxyXG58XHIpKiIgfQorLy8g eyBkZy1vdXRwdXQgImZ1bmVuZDo6eDogMTAoXG58XHJcbnxccikqIiB9CisvLyB7IGRnLW91dHB1 dCAibWFpbjo6cy56OiAxKFxufFxyXG58XHIpKiIgfQorCmRpZmYgLS1naXQgYS9nY2MvdGVzdHN1 aXRlL2crKy5kZy9jb250cmFjdHMvY29udHJhY3RzLXByZTJhMS5DIGIvZ2NjL3Rlc3RzdWl0ZS9n KysuZGcvY29udHJhY3RzL2NvbnRyYWN0cy1wcmUyYTEuQwpuZXcgZmlsZSBtb2RlIDEwMDY0NApp bmRleCAwMDAwMDAwMDAwMC4uMjYxNjc0OTJiOTcKLS0tIC9kZXYvbnVsbAorKysgYi9nY2MvdGVz dHN1aXRlL2crKy5kZy9jb250cmFjdHMvY29udHJhY3RzLXByZTJhMS5DCkBAIC0wLDAgKzEsMzMg QEAKKy8vIGVuc3VyZSB0aGUgZmVhdHVyZSB0ZXN0IG1hY3JvcyBhcmUgZGVmaW5lZCBwcmUgYysr MjAgd2hpbGUgd2Ugc3RpbGwgc3VwcG9ydAorLy8gLWZjb250cmFjdHMgaW5kZXBlbmRlbnQgb2Yg c3RkIHZlcnNpb24KKy8vIHsgZGctZG8gY29tcGlsZSB7IHRhcmdldCBjKysxMSB9IH0KKy8vIHsg ZGctYWRkaXRpb25hbC1vcHRpb25zICItZmNvbnRyYWN0cyIgfQorCitzdGF0aWNfYXNzZXJ0IChf X2NwcF9jb250cmFjdHMgPj0gMjAxOTA2LCAiX19jcHBfY29udHJhY3RzIik7CitzdGF0aWNfYXNz ZXJ0IChfX2NwcF9jb250cmFjdHNfbGl0ZXJhbF9zZW1hbnRpY3MgPj0gMjAxOTA2LCAiX19jcHBf Y29udHJhY3RzX2xpdGVyYWxfc2VtYW50aWNzIik7CitzdGF0aWNfYXNzZXJ0IChfX2NwcF9jb250 cmFjdHNfcm9sZXMgPj0gMjAxOTA2LCAiX19jcHBfY29udHJhY3RzX3JvbGVzIik7CisKK2ludCBt YWluKCkKK3sKKyAgaW50IHg7CisKKyAgW1thc3NlcnQ6IHggPj0gMF1dOworICBbW2Fzc2VydCBk ZWZhdWx0OiB4IDwgMF1dOworICBbW2Fzc2VydCBhdWRpdDogeCA9PSAwXV07CisgIFtbYXNzZXJ0 IGF4aW9tOiB4ID09IDFdXTsKKworICBbW2Fzc2VydDogeCA+IDAgPyB0cnVlIDogZmFsc2VdXTsK KyAgW1thc3NlcnQ6IHggPCAwID8gdHJ1ZSA6IGZhbHNlXV07CisKKyAgW1thc3NlcnQgaWdub3Jl OiB4ID49IDBdXTsKKyAgW1thc3NlcnQgYXNzdW1lOiB4ID49IDBdXTsKKyAgW1thc3NlcnQgY2hl Y2tfbmV2ZXJfY29udGludWU6IHggPj0gMF1dOworICBbW2Fzc2VydCBjaGVja19tYXliZV9jb250 aW51ZTogeCA+PSAwXV07CisKKyAgW1thc3NlcnQgJWRlZmF1bHQ6IHggPj0gMF1dOworICBbW2Fz c2VydCBkZWZhdWx0ICVkZWZhdWx0OiB4IDwgMF1dOworICBbW2Fzc2VydCBhdWRpdCAlZGVmYXVs dDogeCA9PSAwXV07CisgIFtbYXNzZXJ0IGF4aW9tICVkZWZhdWx0OiB4ID09IDFdXTsKKyAgcmV0 dXJuIDA7Cit9CisKZGlmZiAtLWdpdCBhL2djYy90ZXN0c3VpdGUvZysrLmRnL2NvbnRyYWN0cy9j b250cmFjdHMtcHJlMmEyLkMgYi9nY2MvdGVzdHN1aXRlL2crKy5kZy9jb250cmFjdHMvY29udHJh Y3RzLXByZTJhMi5DCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi5kYjlh MGMzN2FhMAotLS0gL2Rldi9udWxsCisrKyBiL2djYy90ZXN0c3VpdGUvZysrLmRnL2NvbnRyYWN0 cy9jb250cmFjdHMtcHJlMmEyLkMKQEAgLTAsMCArMSwyMiBAQAorLy8gYmFzaWMgdGVzdCB0byBl bnN1cmUgY29udHJhY3RzIHdvcmsgcHJlLWMrKzJhCisvLyB7IGRnLWRvIHJ1biB7IHRhcmdldCBj KysxMSB9IH0KKy8vIHsgZGctYWRkaXRpb25hbC1vcHRpb25zICItZmNvbnRyYWN0cyAtZmNvbnRy YWN0LWNvbnRpbnVhdGlvbi1tb2RlPW9uIiB9CisKK2ludCBmKGludCBuKQorICBbWyBwcmU6IG4g PiAwIF1dCisgIFtbIHBvc3QgcjogciA8IDAgXV0KK3sKKyAgW1sgYXNzZXJ0OiBuID4gMCBdXTsK KyAgcmV0dXJuIC1uOworfQorCitpbnQgbWFpbigpCit7CisgIGYoLTUpOworICByZXR1cm4gMDsK K30KKworLy8geyBkZy1vdXRwdXQgImRlZmF1bHQgc3RkOjpoYW5kbGVfY29udHJhY3RfdmlvbGF0 aW9uIGNhbGxlZDogLiouQyA2IC4qKFxufFxyXG58XHIpKiIgfQorLy8geyBkZy1vdXRwdXQgImRl ZmF1bHQgc3RkOjpoYW5kbGVfY29udHJhY3RfdmlvbGF0aW9uIGNhbGxlZDogLiouQyA5IC4qKFxu fFxyXG58XHIpKiIgfQorLy8geyBkZy1vdXRwdXQgImRlZmF1bHQgc3RkOjpoYW5kbGVfY29udHJh Y3RfdmlvbGF0aW9uIGNhbGxlZDogLiouQyA3IC4qKFxufFxyXG58XHIpKiIgfQorCmRpZmYgLS1n aXQgYS9nY2MvdGVzdHN1aXRlL2crKy5kZy9jb250cmFjdHMvY29udHJhY3RzLXByZTMuQyBiL2dj Yy90ZXN0c3VpdGUvZysrLmRnL2NvbnRyYWN0cy9jb250cmFjdHMtcHJlMy5DCm5ldyBmaWxlIG1v ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi4xYzRlM2E5OGU2MwotLS0gL2Rldi9udWxsCisr KyBiL2djYy90ZXN0c3VpdGUvZysrLmRnL2NvbnRyYWN0cy9jb250cmFjdHMtcHJlMy5DCkBAIC0w LDAgKzEsNTI1IEBACisvLyB0ZXN0cyB0byBlbnN1cmUgcHJlIGNvbnRyYWN0cyB3b3JrIG9uIG1l bWJlciBmdW5jdGlvbnMKKy8vIHsgZGctZG8gY29tcGlsZSB9CisvLyB7IGRnLW9wdGlvbnMgIi1z dGQ9YysrMmEgLWZjb250cmFjdHMgLWZjb250cmFjdC1jb250aW51YXRpb24tbW9kZT1vbiIgfQor I2luY2x1ZGUgPGNzdGRpbz4KKworbmFtZXNwYWNlIG1lbWJlcgoreworICBpbnQgeCA9IDEwOwor ICBkb3VibGUgeSA9IDEwLjU7CisKKyAgc3RydWN0IFMKKyAgeworICAgIGJvb2wgejsKKyAgfTsK KworICBzdHJ1Y3QgVDEKKyAgeworICAgIHZvaWQgdmZ1bihpbnQgbSwgZG91YmxlIG4pCisgICAg ICBbWyBwcmU6IHggPCAwIF1dCisgICAgICBbWyBwcmU6IG0gPCAwIF1dOworCisgICAgaW50IGZ1 bihpbnQgbSwgZG91YmxlIG4pCisgICAgICBbWyBwcmU6IHggPCAwIF1dOworCisgICAgZG91Ymxl IGZ1bjIoaW50IG0sIGRvdWJsZSBuKQorICAgICAgW1sgcHJlOiB4IDwgMCBdXQorICAgICAgW1sg cHJlOiB5IDwgMCBdXQorICAgICAgW1sgcHJlOiBtIDwgMCBdXQorICAgICAgW1sgcHJlOiBuIDwg MCBdXTsKKworICAgIFMgZnVuZW5kKGludCBtLCBkb3VibGUgbikKKyAgICAgIFtbIHByZTogeCA8 IDAgXV0KKyAgICAgIFtbIHByZTogbSA8IDAgXV07CisgIH07CisKKyAgdm9pZCBUMTo6dmZ1bihp bnQgbSwgZG91YmxlIG4pCisgICAgW1sgcHJlOiB4IDwgMCBdXQorICAgIFtbIHByZTogbSA8IDAg XV0KKyAgeworICAgIHByaW50ZigidmZ1bjo6eDogJWRcbiIsIHgpOworICB9CisKKworICBpbnQg VDE6OmZ1bihpbnQgbSwgZG91YmxlIG4pCisgICAgW1sgcHJlOiB4IDwgMCBdXQorICB7CisgICAg cHJpbnRmKCJmdW46Ong6ICVkXG4iLCB4KTsKKyAgICByZXR1cm4geDsKKyAgfQorCisgIGRvdWJs ZSBUMTo6ZnVuMihpbnQgbSwgZG91YmxlIG4pCisgICAgW1sgcHJlOiB4IDwgMCBdXQorICAgIFtb IHByZTogeSA8IDAgXV0KKyAgICBbWyBwcmU6IG0gPCAwIF1dCisgICAgW1sgcHJlOiBuIDwgMCBd XQorICB7CisgICAgcHJpbnRmKCJmdW4yOjp4OiAlZCBmdW4yOjp5OiAlZlxuIiwgeCwgeSk7Cisg ICAgcmV0dXJuIHk7CisgIH0KK30KKworbmFtZXNwYWNlIHNwZWNpYWwKK3sKKyAgc3RydWN0IFQx CisgIHsKKyAgICBUMShpbnQgbSwgaW50IG4pCisgICAgICBbWyBwcmU6IG0gPCAwIF1dCisgICAg ICBbWyBwcmU6IG4gPCAwIF1dOworCisgICAgaW50IG9wZXJhdG9yKyhpbnQgbSkKKyAgICAgIFtb IHByZTogbSA+IDAgXV0KKyAgICAgIFtbIHByZTogdiA+IDAgXV07CisKKyAgICBpbnQgb3BlcmF0 b3ItKGludCBtKQorICAgICAgW1sgcHJlOiBtID4gMCBdXQorICAgICAgW1sgcHJlOiB2ID4gMCBd XTsKKworICAgIH5UMSgpCisgICAgICBbWyBwcmU6IHYgPiAwIF1dOworCisgICAgaW50IHZ7LTEw fTsKKyAgfTsKKworICBUMTo6VDEoaW50IG0sIGludCBuKQorICAgIFtbIHByZTogbSA8IDAgXV0K KyAgICBbWyBwcmU6IG4gPCAwIF1dCisgICAgOiB2ey1tICogbn0KKyAgeworICB9CisKKyAgaW50 IFQxOjpvcGVyYXRvcisoaW50IG0pCisgICAgW1sgcHJlOiBtID4gMCBdXQorICAgIFtbIHByZTog diA+IDAgXV0KKyAgeworICAgIHJldHVybiB2ICsgbTsKKyAgfQorCisgIGludCBUMTo6b3BlcmF0 b3ItKGludCBtKQorICAgIFtbIHByZTogbSA+IDAgXV0KKyAgICBbWyBwcmU6IHYgPiAwIF1dCisg IHsKKyAgICByZXR1cm4gdiAtIG07CisgIH0KKworICBUMTo6flQxKCkKKyAgICBbWyBwcmU6IHYg PiAwIF1dCisgIHsKKyAgfQorCisgIHN0cnVjdCBUMgorICB7CisgICAgVDIoaW50IG0sIGludCBu KQorICAgICAgW1sgcHJlOiBtIDwgMCBdXQorICAgICAgW1sgcHJlOiBuIDwgMCBdXQorICAgICAg OiB2ey1tICogbn0KKyAgICB7CisgICAgfQorCisgICAgaW50IG9wZXJhdG9yKyhpbnQgbSkKKyAg ICAgIFtbIHByZTogbSA+IDAgXV0KKyAgICAgIFtbIHByZTogdiA+IDAgXV0KKyAgICB7CisgICAg ICByZXR1cm4gdiArIG07CisgICAgfQorCisgICAgaW50IG9wZXJhdG9yLShpbnQgbSkKKyAgICAg IFtbIHByZTogbSA+IDAgXV0KKyAgICAgIFtbIHByZTogdiA+IDAgXV0KKyAgICB7CisgICAgICBy ZXR1cm4gdiAtIG07CisgICAgfQorCisgICAgflQyKCkKKyAgICAgIFtbIHByZTogdiA+IDAgXV0K KyAgICB7CisgICAgfQorCisgICAgaW50IHZ7LTEwfTsKKyAgfTsKKworICBzdHJ1Y3QgVEMgOiBU MQorICB7CisgICAgVEMoaW50IG0sIGludCBuKQorICAgICAgW1sgcHJlOiBtIDwgLTEgXV0KKyAg ICAgIFtbIHByZTogbiA8IC0xIF1dCisgICAgICA6IFQxe20sIG59CisgICAgeworICAgIH0KKwor ICAgIH5UQygpCisgICAgICBbWyBwcmU6IHZjIDwgMCBdXQorICAgIHsKKyAgICB9CisKKyAgICBU QyhpbnQgYSkKKyAgICAgIFtbIHByZTogYSA8IDAgXV0KKyAgICAgIDogVEN7YSwgYX0KKyAgICB7 CisgICAgfQorCisgICAgaW50IHZjezEwfTsKKyAgfTsKKworICB2b2lkIHRlc3QoKQorICB7Cisg ICAgVDEgdDF7MTAsIDIwfTsKKyAgICBpbnQgYSA9IHQxIC0gLTU7CisgICAgaW50IGIgPSB0MSAr IC01OworICAgIHByaW50ZigiPT09PT09PT09PVxuIik7CisKKyAgICBUMiB0MnsxMCwgMjB9Owor ICAgIGludCBrID0gdDIgLSAtNTsKKyAgICBpbnQgaiA9IHQyICsgLTU7CisgICAgcHJpbnRmKCI9 PT09PT09PT09XG4iKTsKKworICAgIFRDIHRjezEwLCAyMH07CisgICAgcHJpbnRmKCI9PT09PT09 PT09XG4iKTsKKworICAgIFRDIHRjMnsxMH07CisgICAgcHJpbnRmKCI9PT09PT09PT09XG4iKTsK KyAgfQorfQorCituYW1lc3BhY2UgdmlydAoreworICBzdHJ1Y3QgVDEKKyAgeworICAgIHZpcnR1 YWwgaW50IGZ1bihpbnQgbSwgaW50IG4pCisgICAgICBbWyBwcmU6IG0gPiAwIF1dCisgICAgICBb WyBwcmU6IG4gPiAwIF1dCisgICAgICBbWyBwcmU6IHYgPiAwIF1dOworICAgIGludCB2ey0xMH07 CisgIH07CisKKyAgaW50IFQxOjpmdW4oaW50IG0sIGludCBuKQorICAgIFtbIHByZTogbSA+IDAg XV0KKyAgICBbWyBwcmU6IG4gPiAwIF1dCisgICAgW1sgcHJlOiB2ID4gMCBdXQorICB7CisgICAg cHJpbnRmKCJUMTo6ZnVuOjptOiAlZCwgVDE6OmZ1bjo6bjogJWQsIFQxOjp2OiAlZFxuIiwgbSwg biwgdik7CisgICAgcmV0dXJuIG0gKiBuICogdjsKKyAgfQorCisgIHN0cnVjdCBUMiA6IFQxCisg IHsKKyAgfTsKKworICBzdHJ1Y3QgVDMgOiBUMgorICB7CisgICAgdmlydHVhbCBpbnQgZnVuKGlu dCBtLCBpbnQgbikKKyAgICAgIFtbIHByZTogbSA+IDAgXV0KKyAgICAgIFtbIHByZTogbiA+IDAg XV0KKyAgICAgIFtbIHByZTogdiA+IDAgXV0KKyAgICAgIG92ZXJyaWRlCisgICAgeworICAgICAg cHJpbnRmKCJUMzo6ZnVuOjptOiAlZCwgVDM6OmZ1bjo6bjogJWQsIFQzOjp2OiAlZFxuIiwgbSwg biwgdik7CisgICAgICByZXR1cm4gbSAqIG4gKiB2OworICAgIH0KKyAgfTsKKworICBzdHJ1Y3Qg VDNiIDogVDIKKyAgeworICAgIHZpcnR1YWwgaW50IGZ1bihpbnQgbSwgaW50IG4pCisgICAgICBb WyBwcmU6IG0gPiAwIF1dCisgICAgICBbWyBwcmU6IG4gPiAwIF1dCisgICAgICBbWyBwcmU6IHYg PiAwIF1dCisgICAgICBvdmVycmlkZTsKKworICAgIGludCBwKGludCBhKQorICAgICAgW1sgcHJl OiBhID4gMCBdXQorICAgICAgW1sgcHJlOiB2ID4gMCBdXTsKKworICAgIGludCB1KGludCBhKQor ICAgICAgW1sgcHJlOiBhID4gMCBdXQorICAgICAgW1sgcHJlOiB6ID4gMCBdXTsKKworICAgIGlu dCBuKGludCBhKQorICAgICAgW1sgcHJlOiBhID4gMCBdXTsKKworICAgIHN0YXRpYyBpbnQgU24o aW50IGEpCisgICAgICBbWyBwcmU6IGEgPiAwIF1dOworCisgICAgaW50IHp7LTEwfTsKKyAgfTsK KworICBpbnQgVDNiOjpmdW4oaW50IG0sIGludCBuKQorICAgIFtbIHByZTogbSA+IDAgXV0KKyAg ICBbWyBwcmU6IG4gPiAwIF1dCisgICAgW1sgcHJlOiB2ID4gMCBdXQorICB7CisgICAgcHJpbnRm KCJUM2I6OmZ1bjo6bTogJWQsIFQzYjo6ZnVuOjpuOiAlZCwgVDNiOjp2OiAlZFxuIiwgbSwgbiwg dik7CisgICAgcmV0dXJuIG0gKiBuICogdjsKKyAgfQorCisgIGludCBUM2I6OnAoaW50IGEpCisg ICAgW1sgcHJlOiBhID4gMCBdXQorICAgIFtbIHByZTogdiA+IDAgXV0KKyAgeworICAgIHByaW50 ZigiVDNiOjpwOiBhOiAlZCwgdjogJWRcbiIsIGEsIHYpOworICAgIHJldHVybiBhICogdjsKKyAg fQorCisgIGludCBUM2I6OnUoaW50IGEpCisgICAgW1sgcHJlOiBhID4gMCBdXQorICAgIFtbIHBy ZTogeiA+IDAgXV0KKyAgeworICAgIHByaW50ZigiVDNiOjp1OiBhOiAlZCwgejogJWRcbiIsIGEs IHopOworICAgIHJldHVybiBhICogejsKKyAgfQorCisgIGludCBUM2I6Om4oaW50IGEpCisgICAg W1sgcHJlOiBhID4gMCBdXQorICB7CisgICAgcHJpbnRmKCJUM2I6Om46IGE6ICVkXG4iLCBhKTsK KyAgICByZXR1cm4gYTsKKyAgfQorCisgIGludCBUM2I6OlNuKGludCBhKQorICAgIFtbIHByZTog YSA+IDAgXV0KKyAgeworICAgIHByaW50ZigiVDNiOjpTbjogYTogJWRcbiIsIGEpOworICAgIHJl dHVybiBhOworICB9CisKKyAgc3RydWN0IFQzYyA6IFQyCisgIHsKKyAgICBpbnQgZnVuKGludCBt LCBpbnQgbikKKyAgICAgIFtbIHByZTogbSA+IDAgXV0KKyAgICAgIFtbIHByZTogbiA+IDAgXV0K KyAgICAgIFtbIHByZTogdiA+IDAgXV0KKyAgICB7CisgICAgICBwcmludGYoIlQzYzo6ZnVuOjpt OiAlZCwgVDNjOjpmdW46Om46ICVkLCBUM2M6OnY6ICVkXG4iLCBtLCBuLCB2KTsKKyAgICAgIHJl dHVybiBtICogbiAqIHY7CisgICAgfQorCisgICAgaW50IHAoaW50IGEpCisgICAgICBbWyBwcmU6 IGEgPiAwIF1dCisgICAgICBbWyBwcmU6IHYgPiAwIF1dCisgICAgeworICAgICAgcHJpbnRmKCJU M2M6OnA6IGE6ICVkLCB2OiAlZFxuIiwgYSwgdik7CisgICAgICByZXR1cm4gYSAqIHY7CisgICAg fQorCisgICAgaW50IHUoaW50IGEpCisgICAgICBbWyBwcmU6IGEgPiAwIF1dCisgICAgICBbWyBw cmU6IHogPiAwIF1dCisgICAgeworICAgICAgcHJpbnRmKCJUM2M6OnU6IGE6ICVkLCB6OiAlZFxu IiwgYSwgeik7CisgICAgICByZXR1cm4gYSAqIHo7CisgICAgfQorCisgICAgaW50IG4oaW50IGEp CisgICAgICBbWyBwcmU6IGEgPiAwIF1dCisgICAgeworICAgICAgcHJpbnRmKCJUM2M6Om46IGE6 ICVkXG4iLCBhKTsKKyAgICAgIHJldHVybiBhOworICAgIH0KKworICAgIHN0YXRpYyBpbnQgU24o aW50IGEpCisgICAgICBbWyBwcmU6IGEgPiAwIF1dCisgICAgeworICAgICAgcHJpbnRmKCJUM2M6 OlNuOiBhOiAlZFxuIiwgYSk7CisgICAgICByZXR1cm4gYTsKKyAgICB9CisKKyAgICBpbnQgenst MTB9OworICB9OworCisgIHZvaWQgdChjb25zdCBjaGFyICpraW5kLCBUMSAqdCkKKyAgeworICAg IHByaW50ZigiPT09PT09PT09PT09PT09PT1cbiVzOlxuIiwga2luZCk7CisgICAgdC0+ZnVuKC0x LCAtMik7CisgIH0KKworICB2b2lkIHRlc3QoKQorICB7CisgICAgVDEgdDE7CisgICAgdDEuZnVu KC0xMCwgLTIwKTsKKworICAgIFQyIHQyOworICAgIHQyLmZ1bigtMTAsIC0yMCk7CisKKyAgICBU MyB0MzsKKyAgICB0My5mdW4oLTEwLCAtMjApOworCisgICAgVDNiIHQzYjsKKyAgICB0M2IuZnVu KC0xMCwgLTIwKTsKKworICAgIFQzYyB0M2M7CisgICAgdDNjLmZ1bigtMTAsIC0yMCk7CisKKyAg ICB0KCJUMSIsICZ0MSk7CisgICAgdCgiVDIiLCAmdDIpOworICAgIHQoIlQzIiwgJnQzKTsKKyAg ICB0KCJUM2IiLCAmdDNiKTsKKyAgICB0KCJUM2MiLCAmdDNjKTsKKworICAgIHByaW50ZigiPT09 PT09PT09PT09PVxuIik7CisgICAgdDNiLnAoLTMpOworICAgIHQzYi51KC0zKTsKKyAgICB0M2Iu bigtMyk7CisgICAgVDNiOjpTbigtMyk7CisKKyAgICBwcmludGYoIj09PT09PT09PT09PT1cbiIp OworICAgIHQzYy5wKC0zKTsKKyAgICB0M2MudSgtMyk7CisgICAgdDNjLm4oLTMpOworICAgIFQz Yzo6U24oLTMpOworICB9Cit9CisKK2ludCBtYWluKGludCwgY2hhcioqKSAKK3sKKyAgLy8gb3Jk aW5hcnkgbWVtYmVyIGZ1bmN0aW9ucworICB7CisgICAgaW50IHggPSAxMTsKKyAgICBkb3VibGUg eSA9IDExLjU7CisgICAgbWVtYmVyOjpUMSB0MTsKKyAgICB0MS52ZnVuKHgsIHkpOworCisgICAg aW50IGYgPSAxMzsKKyAgICBmID0gdDEuZnVuKHgsIHkpOworICAgIHByaW50ZigibWFpbjo6Zjog JWRcbiIsIGYpOworICAgIGRvdWJsZSBkID0gMTMuMzc7CisgICAgZCA9IHQxLmZ1bjIoeCwgeSk7 CisgICAgcHJpbnRmKCJtYWluOjpkOiAlZlxuIiwgZCk7CisgICAgbWVtYmVyOjpTIHMgPSB0MS5m dW5lbmQoeCwgeSk7CisgICAgcHJpbnRmKCJtYWluOjpzLno6ICVkXG4iLCBzLnogPyAxIDogMCk7 CisgIH0KKworICBzcGVjaWFsOjp0ZXN0KCk7CisgIHZpcnQ6OnRlc3QoKTsKKyAgcmV0dXJuIDA7 Cit9CisKK21lbWJlcjo6UyBtZW1iZXI6OlQxOjpmdW5lbmQoaW50IG0sIGRvdWJsZSBuKQorICBb WyBwcmU6IHggPCAwIF1dCisgIFtbIHByZTogbSA8IDAgXV0KK3sKKyAgcHJpbnRmKCJmdW5lbmQ6 Ong6ICVkXG4iLCB4KTsKKyAgUyBzOworICBzLnogPSB0cnVlOworICByZXR1cm4gczsKK30KKwor Ly8geyBkZy1vdXRwdXQgImRlZmF1bHQgc3RkOjpoYW5kbGVfY29udHJhY3RfdmlvbGF0aW9uIGNh bGxlZDogLiouQyAzNyBtZW1iZXI6OlQxOjp2ZnVuIC4qKFxufFxyXG58XHIpKiIgfQorLy8geyBk Zy1vdXRwdXQgImRlZmF1bHQgc3RkOjpoYW5kbGVfY29udHJhY3RfdmlvbGF0aW9uIGNhbGxlZDog LiouQyAzOCBtZW1iZXI6OlQxOjp2ZnVuIC4qKFxufFxyXG58XHIpKiIgfQorLy8geyBkZy1vdXRw dXQgInZmdW46Ong6IDEwKFxufFxyXG58XHIpKiIgfQorLy8geyBkZy1vdXRwdXQgImRlZmF1bHQg c3RkOjpoYW5kbGVfY29udHJhY3RfdmlvbGF0aW9uIGNhbGxlZDogLiouQyA0NSBtZW1iZXI6OlQx OjpmdW4gLiooXG58XHJcbnxccikqIiB9CisvLyB7IGRnLW91dHB1dCAiZnVuOjp4OiAxMChcbnxc clxufFxyKSoiIH0KKy8vIHsgZGctb3V0cHV0ICJtYWluOjpmOiAxMChcbnxcclxufFxyKSoiIH0K Ky8vIHsgZGctb3V0cHV0ICJkZWZhdWx0IHN0ZDo6aGFuZGxlX2NvbnRyYWN0X3Zpb2xhdGlvbiBj YWxsZWQ6IC4qLkMgNTIgbWVtYmVyOjpUMTo6ZnVuMiAuKihcbnxcclxufFxyKSoiIH0KKy8vIHsg ZGctb3V0cHV0ICJkZWZhdWx0IHN0ZDo6aGFuZGxlX2NvbnRyYWN0X3Zpb2xhdGlvbiBjYWxsZWQ6 IC4qLkMgNTMgbWVtYmVyOjpUMTo6ZnVuMiAuKihcbnxcclxufFxyKSoiIH0KKy8vIHsgZGctb3V0 cHV0ICJkZWZhdWx0IHN0ZDo6aGFuZGxlX2NvbnRyYWN0X3Zpb2xhdGlvbiBjYWxsZWQ6IC4qLkMg NTQgbWVtYmVyOjpUMTo6ZnVuMiAuKihcbnxcclxufFxyKSoiIH0KKy8vIHsgZGctb3V0cHV0ICJk ZWZhdWx0IHN0ZDo6aGFuZGxlX2NvbnRyYWN0X3Zpb2xhdGlvbiBjYWxsZWQ6IC4qLkMgNTUgbWVt YmVyOjpUMTo6ZnVuMiAuKihcbnxcclxufFxyKSoiIH0KKy8vIHsgZGctb3V0cHV0ICJmdW4yOjp4 OiAxMCBmdW4yOjp5OiAxMC41MDAwMDAoXG58XHJcbnxccikqIiB9CisvLyB7IGRnLW91dHB1dCAi bWFpbjo6ZDogMTAuNTAwMDAwKFxufFxyXG58XHIpKiIgfQorLy8geyBkZy1vdXRwdXQgImRlZmF1 bHQgc3RkOjpoYW5kbGVfY29udHJhY3RfdmlvbGF0aW9uIGNhbGxlZDogLiouQyAzOTcgbWVtYmVy OjpUMTo6ZnVuZW5kIC4qKFxufFxyXG58XHIpKiIgfQorLy8geyBkZy1vdXRwdXQgImRlZmF1bHQg c3RkOjpoYW5kbGVfY29udHJhY3RfdmlvbGF0aW9uIGNhbGxlZDogLiouQyAzOTggbWVtYmVyOjpU MTo6ZnVuZW5kIC4qKFxufFxyXG58XHIpKiIgfQorLy8geyBkZy1vdXRwdXQgImZ1bmVuZDo6eDog MTAoXG58XHJcbnxccikqIiB9CisvLyB7IGRnLW91dHB1dCAibWFpbjo6cy56OiAxKFxufFxyXG58 XHIpKiIgfQorLy8geyBkZy1vdXRwdXQgImRlZmF1bHQgc3RkOjpoYW5kbGVfY29udHJhY3Rfdmlv bGF0aW9uIGNhbGxlZDogLiouQyA4NSBzcGVjaWFsOjpUMTo6VDEgLiooXG58XHJcbnxccikqIiB9 CisvLyB7IGRnLW91dHB1dCAiZGVmYXVsdCBzdGQ6OmhhbmRsZV9jb250cmFjdF92aW9sYXRpb24g Y2FsbGVkOiAuKi5DIDg2IHNwZWNpYWw6OlQxOjpUMSAuKihcbnxcclxufFxyKSoiIH0KKy8vIHsg ZGctb3V0cHV0ICJkZWZhdWx0IHN0ZDo6aGFuZGxlX2NvbnRyYWN0X3Zpb2xhdGlvbiBjYWxsZWQ6 IC4qLkMgOTkgc3BlY2lhbDo6VDE6Om9wZXJhdG9yLSAuKihcbnxcclxufFxyKSoiIH0KKy8vIHsg ZGctb3V0cHV0ICJkZWZhdWx0IHN0ZDo6aGFuZGxlX2NvbnRyYWN0X3Zpb2xhdGlvbiBjYWxsZWQ6 IC4qLkMgMTAwIHNwZWNpYWw6OlQxOjpvcGVyYXRvci0gLiooXG58XHJcbnxccikqIiB9CisvLyB7 IGRnLW91dHB1dCAiZGVmYXVsdCBzdGQ6OmhhbmRsZV9jb250cmFjdF92aW9sYXRpb24gY2FsbGVk OiAuKi5DIDkyIHNwZWNpYWw6OlQxOjpvcGVyYXRvci4gLiooXG58XHJcbnxccikqIiB9CisvLyB7 IGRnLW91dHB1dCAiZGVmYXVsdCBzdGQ6OmhhbmRsZV9jb250cmFjdF92aW9sYXRpb24gY2FsbGVk OiAuKi5DIDkzIHNwZWNpYWw6OlQxOjpvcGVyYXRvci4gLiooXG58XHJcbnxccikqIiB9CisvLyB7 IGRnLW91dHB1dCAiPT09PT09PT09PShcbnxcclxufFxyKSoiIH0KKy8vIHsgZGctb3V0cHV0ICJk ZWZhdWx0IHN0ZDo6aGFuZGxlX2NvbnRyYWN0X3Zpb2xhdGlvbiBjYWxsZWQ6IC4qLkMgMTEzIHNw ZWNpYWw6OlQyOjpUMiAuKihcbnxcclxufFxyKSoiIH0KKy8vIHsgZGctb3V0cHV0ICJkZWZhdWx0 IHN0ZDo6aGFuZGxlX2NvbnRyYWN0X3Zpb2xhdGlvbiBjYWxsZWQ6IC4qLkMgMTE0IHNwZWNpYWw6 OlQyOjpUMiAuKihcbnxcclxufFxyKSoiIH0KKy8vIHsgZGctb3V0cHV0ICJkZWZhdWx0IHN0ZDo6 aGFuZGxlX2NvbnRyYWN0X3Zpb2xhdGlvbiBjYWxsZWQ6IC4qLkMgMTI3IHNwZWNpYWw6OlQyOjpv cGVyYXRvci0gLiooXG58XHJcbnxccikqIiB9CisvLyB7IGRnLW91dHB1dCAiZGVmYXVsdCBzdGQ6 OmhhbmRsZV9jb250cmFjdF92aW9sYXRpb24gY2FsbGVkOiAuKi5DIDEyOCBzcGVjaWFsOjpUMjo6 b3BlcmF0b3ItIC4qKFxufFxyXG58XHIpKiIgfQorLy8geyBkZy1vdXRwdXQgImRlZmF1bHQgc3Rk OjpoYW5kbGVfY29udHJhY3RfdmlvbGF0aW9uIGNhbGxlZDogLiouQyAxMjAgc3BlY2lhbDo6VDI6 Om9wZXJhdG9yLiAuKihcbnxcclxufFxyKSoiIH0KKy8vIHsgZGctb3V0cHV0ICJkZWZhdWx0IHN0 ZDo6aGFuZGxlX2NvbnRyYWN0X3Zpb2xhdGlvbiBjYWxsZWQ6IC4qLkMgMTIxIHNwZWNpYWw6OlQy OjpvcGVyYXRvci4gLiooXG58XHJcbnxccikqIiB9CisvLyB7IGRnLW91dHB1dCAiPT09PT09PT09 PShcbnxcclxufFxyKSoiIH0KKy8vIHsgZGctb3V0cHV0ICJkZWZhdWx0IHN0ZDo6aGFuZGxlX2Nv bnRyYWN0X3Zpb2xhdGlvbiBjYWxsZWQ6IC4qLkMgMTQ0IHNwZWNpYWw6OlRDOjpUQyAuKihcbnxc clxufFxyKSoiIH0KKy8vIHsgZGctb3V0cHV0ICJkZWZhdWx0IHN0ZDo6aGFuZGxlX2NvbnRyYWN0 X3Zpb2xhdGlvbiBjYWxsZWQ6IC4qLkMgMTQ1IHNwZWNpYWw6OlRDOjpUQyAuKihcbnxcclxufFxy KSoiIH0KKy8vIHsgZGctb3V0cHV0ICJkZWZhdWx0IHN0ZDo6aGFuZGxlX2NvbnRyYWN0X3Zpb2xh dGlvbiBjYWxsZWQ6IC4qLkMgODUgc3BlY2lhbDo6VDE6OlQxIC4qKFxufFxyXG58XHIpKiIgfQor Ly8geyBkZy1vdXRwdXQgImRlZmF1bHQgc3RkOjpoYW5kbGVfY29udHJhY3RfdmlvbGF0aW9uIGNh bGxlZDogLiouQyA4NiBzcGVjaWFsOjpUMTo6VDEgLiooXG58XHJcbnxccikqIiB9CisvLyB7IGRn LW91dHB1dCAiPT09PT09PT09PShcbnxcclxufFxyKSoiIH0KKy8vIHsgZGctb3V0cHV0ICJkZWZh dWx0IHN0ZDo6aGFuZGxlX2NvbnRyYWN0X3Zpb2xhdGlvbiBjYWxsZWQ6IC4qLkMgMTU2IHNwZWNp YWw6OlRDOjpUQyAuKihcbnxcclxufFxyKSoiIH0KKy8vIHsgZGctb3V0cHV0ICJkZWZhdWx0IHN0 ZDo6aGFuZGxlX2NvbnRyYWN0X3Zpb2xhdGlvbiBjYWxsZWQ6IC4qLkMgMTQ0IHNwZWNpYWw6OlRD OjpUQyAuKihcbnxcclxufFxyKSoiIH0KKy8vIHsgZGctb3V0cHV0ICJkZWZhdWx0IHN0ZDo6aGFu ZGxlX2NvbnRyYWN0X3Zpb2xhdGlvbiBjYWxsZWQ6IC4qLkMgMTQ1IHNwZWNpYWw6OlRDOjpUQyAu KihcbnxcclxufFxyKSoiIH0KKy8vIHsgZGctb3V0cHV0ICJkZWZhdWx0IHN0ZDo6aGFuZGxlX2Nv bnRyYWN0X3Zpb2xhdGlvbiBjYWxsZWQ6IC4qLkMgODUgc3BlY2lhbDo6VDE6OlQxIC4qKFxufFxy XG58XHIpKiIgfQorLy8geyBkZy1vdXRwdXQgImRlZmF1bHQgc3RkOjpoYW5kbGVfY29udHJhY3Rf dmlvbGF0aW9uIGNhbGxlZDogLiouQyA4NiBzcGVjaWFsOjpUMTo6VDEgLiooXG58XHJcbnxccikq IiB9CisvLyB7IGRnLW91dHB1dCAiPT09PT09PT09PShcbnxcclxufFxyKSoiIH0KKy8vIHsgZGct b3V0cHV0ICJkZWZhdWx0IHN0ZDo6aGFuZGxlX2NvbnRyYWN0X3Zpb2xhdGlvbiBjYWxsZWQ6IC4q LkMgMTUxIHNwZWNpYWw6OlRDOjp+VEMgLiooXG58XHJcbnxccikqIiB9CisvLyB7IGRnLW91dHB1 dCAiZGVmYXVsdCBzdGQ6OmhhbmRsZV9jb250cmFjdF92aW9sYXRpb24gY2FsbGVkOiAuKi5DIDEw NiBzcGVjaWFsOjpUMTo6flQxIC4qKFxufFxyXG58XHIpKiIgfQorLy8geyBkZy1vdXRwdXQgImRl ZmF1bHQgc3RkOjpoYW5kbGVfY29udHJhY3RfdmlvbGF0aW9uIGNhbGxlZDogLiouQyAxNTEgc3Bl Y2lhbDo6VEM6On5UQyAuKihcbnxcclxufFxyKSoiIH0KKy8vIHsgZGctb3V0cHV0ICJkZWZhdWx0 IHN0ZDo6aGFuZGxlX2NvbnRyYWN0X3Zpb2xhdGlvbiBjYWxsZWQ6IC4qLkMgMTA2IHNwZWNpYWw6 OlQxOjp+VDEgLiooXG58XHJcbnxccikqIiB9CisvLyB7IGRnLW91dHB1dCAiZGVmYXVsdCBzdGQ6 OmhhbmRsZV9jb250cmFjdF92aW9sYXRpb24gY2FsbGVkOiAuKi5DIDEzNCBzcGVjaWFsOjpUMjo6 flQyIC4qKFxufFxyXG58XHIpKiIgfQorLy8geyBkZy1vdXRwdXQgImRlZmF1bHQgc3RkOjpoYW5k bGVfY29udHJhY3RfdmlvbGF0aW9uIGNhbGxlZDogLiouQyAxMDYgc3BlY2lhbDo6VDE6On5UMSAu KihcbnxcclxufFxyKSoiIH0KKy8vIHsgZGctb3V0cHV0ICJkZWZhdWx0IHN0ZDo6aGFuZGxlX2Nv bnRyYWN0X3Zpb2xhdGlvbiBjYWxsZWQ6IC4qLkMgMTk2IHZpcnQ6OlQxOjpmdW4gLiooXG58XHJc bnxccikqIiB9CisvLyB7IGRnLW91dHB1dCAiZGVmYXVsdCBzdGQ6OmhhbmRsZV9jb250cmFjdF92 aW9sYXRpb24gY2FsbGVkOiAuKi5DIDE5NyB2aXJ0OjpUMTo6ZnVuIC4qKFxufFxyXG58XHIpKiIg fQorLy8geyBkZy1vdXRwdXQgImRlZmF1bHQgc3RkOjpoYW5kbGVfY29udHJhY3RfdmlvbGF0aW9u IGNhbGxlZDogLiouQyAxOTggdmlydDo6VDE6OmZ1biAuKihcbnxcclxufFxyKSoiIH0KKy8vIHsg ZGctb3V0cHV0ICJUMTo6ZnVuOjptOiAtMTAsIFQxOjpmdW46Om46IC0yMCwgVDE6OnY6IC0xMChc bnxcclxufFxyKSoiIH0KKy8vIHsgZGctb3V0cHV0ICJkZWZhdWx0IHN0ZDo6aGFuZGxlX2NvbnRy YWN0X3Zpb2xhdGlvbiBjYWxsZWQ6IC4qLkMgMTk2IHZpcnQ6OlQxOjpmdW4gLiooXG58XHJcbnxc cikqIiB9CisvLyB7IGRnLW91dHB1dCAiZGVmYXVsdCBzdGQ6OmhhbmRsZV9jb250cmFjdF92aW9s YXRpb24gY2FsbGVkOiAuKi5DIDE5NyB2aXJ0OjpUMTo6ZnVuIC4qKFxufFxyXG58XHIpKiIgfQor Ly8geyBkZy1vdXRwdXQgImRlZmF1bHQgc3RkOjpoYW5kbGVfY29udHJhY3RfdmlvbGF0aW9uIGNh bGxlZDogLiouQyAxOTggdmlydDo6VDE6OmZ1biAuKihcbnxcclxufFxyKSoiIH0KKy8vIHsgZGct b3V0cHV0ICJUMTo6ZnVuOjptOiAtMTAsIFQxOjpmdW46Om46IC0yMCwgVDE6OnY6IC0xMChcbnxc clxufFxyKSoiIH0KKy8vIHsgZGctb3V0cHV0ICJkZWZhdWx0IHN0ZDo6aGFuZGxlX2NvbnRyYWN0 X3Zpb2xhdGlvbiBjYWxsZWQ6IC4qLkMgMjExIHZpcnQ6OlQzOjpmdW4gLiooXG58XHJcbnxccikq IiB9CisvLyB7IGRnLW91dHB1dCAiZGVmYXVsdCBzdGQ6OmhhbmRsZV9jb250cmFjdF92aW9sYXRp b24gY2FsbGVkOiAuKi5DIDIxMiB2aXJ0OjpUMzo6ZnVuIC4qKFxufFxyXG58XHIpKiIgfQorLy8g eyBkZy1vdXRwdXQgImRlZmF1bHQgc3RkOjpoYW5kbGVfY29udHJhY3RfdmlvbGF0aW9uIGNhbGxl ZDogLiouQyAyMTMgdmlydDo6VDM6OmZ1biAuKihcbnxcclxufFxyKSoiIH0KKy8vIHsgZGctb3V0 cHV0ICJUMzo6ZnVuOjptOiAtMTAsIFQzOjpmdW46Om46IC0yMCwgVDM6OnY6IC0xMChcbnxcclxu fFxyKSoiIH0KKy8vIHsgZGctb3V0cHV0ICJkZWZhdWx0IHN0ZDo6aGFuZGxlX2NvbnRyYWN0X3Zp b2xhdGlvbiBjYWxsZWQ6IC4qLkMgMjQ3IHZpcnQ6OlQzYjo6ZnVuIC4qKFxufFxyXG58XHIpKiIg fQorLy8geyBkZy1vdXRwdXQgImRlZmF1bHQgc3RkOjpoYW5kbGVfY29udHJhY3RfdmlvbGF0aW9u IGNhbGxlZDogLiouQyAyNDggdmlydDo6VDNiOjpmdW4gLiooXG58XHJcbnxccikqIiB9CisvLyB7 IGRnLW91dHB1dCAiZGVmYXVsdCBzdGQ6OmhhbmRsZV9jb250cmFjdF92aW9sYXRpb24gY2FsbGVk OiAuKi5DIDI0OSB2aXJ0OjpUM2I6OmZ1biAuKihcbnxcclxufFxyKSoiIH0KKy8vIHsgZGctb3V0 cHV0ICJUM2I6OmZ1bjo6bTogLTEwLCBUM2I6OmZ1bjo6bjogLTIwLCBUM2I6OnY6IC0xMChcbnxc clxufFxyKSoiIH0KKy8vIHsgZGctb3V0cHV0ICJkZWZhdWx0IHN0ZDo6aGFuZGxlX2NvbnRyYWN0 X3Zpb2xhdGlvbiBjYWxsZWQ6IC4qLkMgMjg4IHZpcnQ6OlQzYzo6ZnVuIC4qKFxufFxyXG58XHIp KiIgfQorLy8geyBkZy1vdXRwdXQgImRlZmF1bHQgc3RkOjpoYW5kbGVfY29udHJhY3RfdmlvbGF0 aW9uIGNhbGxlZDogLiouQyAyODkgdmlydDo6VDNjOjpmdW4gLiooXG58XHJcbnxccikqIiB9Cisv LyB7IGRnLW91dHB1dCAiZGVmYXVsdCBzdGQ6OmhhbmRsZV9jb250cmFjdF92aW9sYXRpb24gY2Fs bGVkOiAuKi5DIDI5MCB2aXJ0OjpUM2M6OmZ1biAuKihcbnxcclxufFxyKSoiIH0KKy8vIHsgZGct b3V0cHV0ICJUM2M6OmZ1bjo6bTogLTEwLCBUM2M6OmZ1bjo6bjogLTIwLCBUM2M6OnY6IC0xMChc bnxcclxufFxyKSoiIH0KKy8vIHsgZGctb3V0cHV0ICI9PT09PT09PT09PT09PT09PShcbnxcclxu fFxyKSoiIH0KKy8vIHsgZGctb3V0cHV0ICJUMTooXG58XHJcbnxccikqIiB9CisvLyB7IGRnLW91 dHB1dCAiZGVmYXVsdCBzdGQ6OmhhbmRsZV9jb250cmFjdF92aW9sYXRpb24gY2FsbGVkOiAuKi5D IDE5NiB2aXJ0OjpUMTo6ZnVuIC4qKFxufFxyXG58XHIpKiIgfQorLy8geyBkZy1vdXRwdXQgImRl ZmF1bHQgc3RkOjpoYW5kbGVfY29udHJhY3RfdmlvbGF0aW9uIGNhbGxlZDogLiouQyAxOTcgdmly dDo6VDE6OmZ1biAuKihcbnxcclxufFxyKSoiIH0KKy8vIHsgZGctb3V0cHV0ICJkZWZhdWx0IHN0 ZDo6aGFuZGxlX2NvbnRyYWN0X3Zpb2xhdGlvbiBjYWxsZWQ6IC4qLkMgMTk4IHZpcnQ6OlQxOjpm dW4gLiooXG58XHJcbnxccikqIiB9CisvLyB7IGRnLW91dHB1dCAiVDE6OmZ1bjo6bTogLTEsIFQx OjpmdW46Om46IC0yLCBUMTo6djogLTEwKFxufFxyXG58XHIpKiIgfQorLy8geyBkZy1vdXRwdXQg Ij09PT09PT09PT09PT09PT09KFxufFxyXG58XHIpKiIgfQorLy8geyBkZy1vdXRwdXQgIlQyOihc bnxcclxufFxyKSoiIH0KKy8vIHsgZGctb3V0cHV0ICJkZWZhdWx0IHN0ZDo6aGFuZGxlX2NvbnRy YWN0X3Zpb2xhdGlvbiBjYWxsZWQ6IC4qLkMgMTk2IHZpcnQ6OlQxOjpmdW4gLiooXG58XHJcbnxc cikqIiB9CisvLyB7IGRnLW91dHB1dCAiZGVmYXVsdCBzdGQ6OmhhbmRsZV9jb250cmFjdF92aW9s YXRpb24gY2FsbGVkOiAuKi5DIDE5NyB2aXJ0OjpUMTo6ZnVuIC4qKFxufFxyXG58XHIpKiIgfQor Ly8geyBkZy1vdXRwdXQgImRlZmF1bHQgc3RkOjpoYW5kbGVfY29udHJhY3RfdmlvbGF0aW9uIGNh bGxlZDogLiouQyAxOTggdmlydDo6VDE6OmZ1biAuKihcbnxcclxufFxyKSoiIH0KKy8vIHsgZGct b3V0cHV0ICJUMTo6ZnVuOjptOiAtMSwgVDE6OmZ1bjo6bjogLTIsIFQxOjp2OiAtMTAoXG58XHJc bnxccikqIiB9CisvLyB7IGRnLW91dHB1dCAiPT09PT09PT09PT09PT09PT0oXG58XHJcbnxccikq IiB9CisvLyB7IGRnLW91dHB1dCAiVDM6KFxufFxyXG58XHIpKiIgfQorLy8geyBkZy1vdXRwdXQg ImRlZmF1bHQgc3RkOjpoYW5kbGVfY29udHJhY3RfdmlvbGF0aW9uIGNhbGxlZDogLiouQyAyMTEg dmlydDo6VDM6OmZ1biAuKihcbnxcclxufFxyKSoiIH0KKy8vIHsgZGctb3V0cHV0ICJkZWZhdWx0 IHN0ZDo6aGFuZGxlX2NvbnRyYWN0X3Zpb2xhdGlvbiBjYWxsZWQ6IC4qLkMgMjEyIHZpcnQ6OlQz OjpmdW4gLiooXG58XHJcbnxccikqIiB9CisvLyB7IGRnLW91dHB1dCAiZGVmYXVsdCBzdGQ6Omhh bmRsZV9jb250cmFjdF92aW9sYXRpb24gY2FsbGVkOiAuKi5DIDIxMyB2aXJ0OjpUMzo6ZnVuIC4q KFxufFxyXG58XHIpKiIgfQorLy8geyBkZy1vdXRwdXQgIlQzOjpmdW46Om06IC0xLCBUMzo6ZnVu OjpuOiAtMiwgVDM6OnY6IC0xMChcbnxcclxufFxyKSoiIH0KKy8vIHsgZGctb3V0cHV0ICI9PT09 PT09PT09PT09PT09PShcbnxcclxufFxyKSoiIH0KKy8vIHsgZGctb3V0cHV0ICJUM2I6KFxufFxy XG58XHIpKiIgfQorLy8geyBkZy1vdXRwdXQgImRlZmF1bHQgc3RkOjpoYW5kbGVfY29udHJhY3Rf dmlvbGF0aW9uIGNhbGxlZDogLiouQyAyNDcgdmlydDo6VDNiOjpmdW4gLiooXG58XHJcbnxccikq IiB9CisvLyB7IGRnLW91dHB1dCAiZGVmYXVsdCBzdGQ6OmhhbmRsZV9jb250cmFjdF92aW9sYXRp b24gY2FsbGVkOiAuKi5DIDI0OCB2aXJ0OjpUM2I6OmZ1biAuKihcbnxcclxufFxyKSoiIH0KKy8v IHsgZGctb3V0cHV0ICJkZWZhdWx0IHN0ZDo6aGFuZGxlX2NvbnRyYWN0X3Zpb2xhdGlvbiBjYWxs ZWQ6IC4qLkMgMjQ5IHZpcnQ6OlQzYjo6ZnVuIC4qKFxufFxyXG58XHIpKiIgfQorLy8geyBkZy1v dXRwdXQgIlQzYjo6ZnVuOjptOiAtMSwgVDNiOjpmdW46Om46IC0yLCBUM2I6OnY6IC0xMChcbnxc clxufFxyKSoiIH0KKy8vIHsgZGctb3V0cHV0ICI9PT09PT09PT09PT09PT09PShcbnxcclxufFxy KSoiIH0KKy8vIHsgZGctb3V0cHV0ICJUM2M6KFxufFxyXG58XHIpKiIgfQorLy8geyBkZy1vdXRw dXQgImRlZmF1bHQgc3RkOjpoYW5kbGVfY29udHJhY3RfdmlvbGF0aW9uIGNhbGxlZDogLiouQyAy ODggdmlydDo6VDNjOjpmdW4gLiooXG58XHJcbnxccikqIiB9CisvLyB7IGRnLW91dHB1dCAiZGVm YXVsdCBzdGQ6OmhhbmRsZV9jb250cmFjdF92aW9sYXRpb24gY2FsbGVkOiAuKi5DIDI4OSB2aXJ0 OjpUM2M6OmZ1biAuKihcbnxcclxufFxyKSoiIH0KKy8vIHsgZGctb3V0cHV0ICJkZWZhdWx0IHN0 ZDo6aGFuZGxlX2NvbnRyYWN0X3Zpb2xhdGlvbiBjYWxsZWQ6IC4qLkMgMjkwIHZpcnQ6OlQzYzo6 ZnVuIC4qKFxufFxyXG58XHIpKiIgfQorLy8geyBkZy1vdXRwdXQgIlQzYzo6ZnVuOjptOiAtMSwg VDNjOjpmdW46Om46IC0yLCBUM2M6OnY6IC0xMChcbnxcclxufFxyKSoiIH0KKy8vIHsgZGctb3V0 cHV0ICI9PT09PT09PT09PT09KFxufFxyXG58XHIpKiIgfQorLy8geyBkZy1vdXRwdXQgImRlZmF1 bHQgc3RkOjpoYW5kbGVfY29udHJhY3RfdmlvbGF0aW9uIGNhbGxlZDogLiouQyAyNTYgdmlydDo6 VDNiOjpwIC4qKFxufFxyXG58XHIpKiIgfQorLy8geyBkZy1vdXRwdXQgImRlZmF1bHQgc3RkOjpo YW5kbGVfY29udHJhY3RfdmlvbGF0aW9uIGNhbGxlZDogLiouQyAyNTcgdmlydDo6VDNiOjpwIC4q KFxufFxyXG58XHIpKiIgfQorLy8geyBkZy1vdXRwdXQgIlQzYjo6cDogYTogLTMsIHY6IC0xMChc bnxcclxufFxyKSoiIH0KKy8vIHsgZGctb3V0cHV0ICJkZWZhdWx0IHN0ZDo6aGFuZGxlX2NvbnRy YWN0X3Zpb2xhdGlvbiBjYWxsZWQ6IC4qLkMgMjY0IHZpcnQ6OlQzYjo6dSAuKihcbnxcclxufFxy KSoiIH0KKy8vIHsgZGctb3V0cHV0ICJkZWZhdWx0IHN0ZDo6aGFuZGxlX2NvbnRyYWN0X3Zpb2xh dGlvbiBjYWxsZWQ6IC4qLkMgMjY1IHZpcnQ6OlQzYjo6dSAuKihcbnxcclxufFxyKSoiIH0KKy8v IHsgZGctb3V0cHV0ICJUM2I6OnU6IGE6IC0zLCB6OiAtMTAoXG58XHJcbnxccikqIiB9CisvLyB7 IGRnLW91dHB1dCAiZGVmYXVsdCBzdGQ6OmhhbmRsZV9jb250cmFjdF92aW9sYXRpb24gY2FsbGVk OiAuKi5DIDI3MiB2aXJ0OjpUM2I6Om4gLiooXG58XHJcbnxccikqIiB9CisvLyB7IGRnLW91dHB1 dCAiVDNiOjpuOiBhOiAtMyhcbnxcclxufFxyKSoiIH0KKy8vIHsgZGctb3V0cHV0ICJkZWZhdWx0 IHN0ZDo6aGFuZGxlX2NvbnRyYWN0X3Zpb2xhdGlvbiBjYWxsZWQ6IC4qLkMgMjc5IHZpcnQ6OlQz Yjo6U24gLiooXG58XHJcbnxccikqIiB9CisvLyB7IGRnLW91dHB1dCAiVDNiOjpTbjogYTogLTMo XG58XHJcbnxccikqIiB9CisvLyB7IGRnLW91dHB1dCAiPT09PT09PT09PT09PShcbnxcclxufFxy KSoiIH0KKy8vIHsgZGctb3V0cHV0ICJkZWZhdWx0IHN0ZDo6aGFuZGxlX2NvbnRyYWN0X3Zpb2xh dGlvbiBjYWxsZWQ6IC4qLkMgMjk3IHZpcnQ6OlQzYzo6cCAuKihcbnxcclxufFxyKSoiIH0KKy8v IHsgZGctb3V0cHV0ICJkZWZhdWx0IHN0ZDo6aGFuZGxlX2NvbnRyYWN0X3Zpb2xhdGlvbiBjYWxs ZWQ6IC4qLkMgMjk4IHZpcnQ6OlQzYzo6cCAuKihcbnxcclxufFxyKSoiIH0KKy8vIHsgZGctb3V0 cHV0ICJUM2M6OnA6IGE6IC0zLCB2OiAtMTAoXG58XHJcbnxccikqIiB9CisvLyB7IGRnLW91dHB1 dCAiZGVmYXVsdCBzdGQ6OmhhbmRsZV9jb250cmFjdF92aW9sYXRpb24gY2FsbGVkOiAuKi5DIDMw NSB2aXJ0OjpUM2M6OnUgLiooXG58XHJcbnxccikqIiB9CisvLyB7IGRnLW91dHB1dCAiZGVmYXVs dCBzdGQ6OmhhbmRsZV9jb250cmFjdF92aW9sYXRpb24gY2FsbGVkOiAuKi5DIDMwNiB2aXJ0OjpU M2M6OnUgLiooXG58XHJcbnxccikqIiB9CisvLyB7IGRnLW91dHB1dCAiVDNjOjp1OiBhOiAtMywg ejogLTEwKFxufFxyXG58XHIpKiIgfQorLy8geyBkZy1vdXRwdXQgImRlZmF1bHQgc3RkOjpoYW5k bGVfY29udHJhY3RfdmlvbGF0aW9uIGNhbGxlZDogLiouQyAzMTMgdmlydDo6VDNjOjpuIC4qKFxu fFxyXG58XHIpKiIgfQorLy8geyBkZy1vdXRwdXQgIlQzYzo6bjogYTogLTMoXG58XHJcbnxccikq IiB9CisvLyB7IGRnLW91dHB1dCAiZGVmYXVsdCBzdGQ6OmhhbmRsZV9jb250cmFjdF92aW9sYXRp b24gY2FsbGVkOiAuKi5DIDMyMCB2aXJ0OjpUM2M6OlNuIC4qKFxufFxyXG58XHIpKiIgfQorLy8g eyBkZy1vdXRwdXQgIlQzYzo6U246IGE6IC0zKFxufFxyXG58XHIpKiIgfQorCmRpZmYgLS1naXQg YS9nY2MvdGVzdHN1aXRlL2crKy5kZy9jb250cmFjdHMvY29udHJhY3RzLXByZTQuQyBiL2djYy90 ZXN0c3VpdGUvZysrLmRnL2NvbnRyYWN0cy9jb250cmFjdHMtcHJlNC5DCm5ldyBmaWxlIG1vZGUg MTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi4xNjE4OWNkY2U5ZAotLS0gL2Rldi9udWxsCisrKyBi L2djYy90ZXN0c3VpdGUvZysrLmRnL2NvbnRyYWN0cy9jb250cmFjdHMtcHJlNC5DCkBAIC0wLDAg KzEsOTIgQEAKKy8vIHRlc3QgdGhhdCBjb250cmFjdHMgb24gb3ZlcnJpZGluZyBmdW5jdGlvbnMg YXJlIGZvdW5kIGNvcnJlY3RseQorLy8geyBkZy1kbyBydW4gfQorLy8geyBkZy1vcHRpb25zICIt c3RkPWMrKzJhIC1mY29udHJhY3RzIC1mY29udHJhY3QtY29udGludWF0aW9uLW1vZGU9b24iIH0K Kworc3RydWN0IEJhc2UKK3sKKyAgdmlydHVhbCBpbnQgZihpbnQgYSkgW1sgcHJlOiBhID4gMCBd XTsKK307CisKK2ludCBCYXNlOjpmKGludCBhKQoreworICByZXR1cm4gYSArIDEwOworfQorCisv LyBpbmhlcml0cyBvcmlnaW5hbAorc3RydWN0IENoaWxkMCA6IEJhc2UKK3sKK307CisKKy8vIGRl ZmluZWQgb3V0IG9mIGxpbmUsIGV4cGxpY2l0IG92ZXJyaWRlCitzdHJ1Y3QgQ2hpbGQxIDogQmFz ZQoreworICB2aXJ0dWFsIGludCBmKGludCBhKSBvdmVycmlkZTsKK307CisKK2ludCBDaGlsZDE6 OmYoaW50IGEpCit7CisgIHJldHVybiBhICsgMjA7Cit9CisKKy8vIGRlZmluZWQgb3V0IG9mIGxp bmUKK3N0cnVjdCBDaGlsZDIgOiBCYXNlCit7CisgIGludCBmKGludCBhKTsKK307CisKK2ludCBD aGlsZDI6OmYoaW50IGEpCit7CisgIHJldHVybiBhICsgMzA7Cit9CisKKy8vIGRlZmluZWQgaW5s aW5lLCBleHBsaWNpdGx5IG92ZXJyaWRlCitzdHJ1Y3QgQ2hpbGQzIDogQmFzZQoreworICB2aXJ0 dWFsIGludCBmKGludCBhKSBvdmVycmlkZQorICB7CisgICAgcmV0dXJuIGEgKyA0MDsKKyAgfQor fTsKKworLy8gZGVmaW5lZCBpbmxpbmUKK3N0cnVjdCBDaGlsZDQgOiBCYXNlCit7CisgIGludCBm KGludCBhKQorICB7CisgICAgcmV0dXJuIGEgKyA1MDsKKyAgfQorfTsKKworI2luY2x1ZGUgPGNz dGRpbz4KK2ludCBtYWluKGludCwgY2hhcioqKQoreworICBCYXNlIGI7CisgIENoaWxkMCBjMDsK KyAgQ2hpbGQxIGMxOworICBDaGlsZDIgYzI7CisgIENoaWxkMyBjMzsKKyAgQ2hpbGQ0IGM0Owor CisgIHByaW50ZigiQmFzZTogJWRcbiIsIGIuZigtMTApKTsKKyAgcHJpbnRmKCJDaGlsZDA6ICVk XG4iLCBjMC5mKC0xMCkpOworICBwcmludGYoIkNoaWxkMTogJWRcbiIsIGMxLmYoLTEwKSk7Cisg IHByaW50ZigiQ2hpbGQyOiAlZFxuIiwgYzIuZigtMTApKTsKKyAgcHJpbnRmKCJDaGlsZDM6ICVk XG4iLCBjMy5mKC0xMCkpOworICBwcmludGYoIkNoaWxkNDogJWRcbiIsIGM0LmYoLTEwKSk7CisK KyAgcmV0dXJuIDA7Cit9CisKKy8vIHsgZGctb3V0cHV0ICJkZWZhdWx0IHN0ZDo6aGFuZGxlX2Nv bnRyYWN0X3Zpb2xhdGlvbiBjYWxsZWQ6IC4qLkMgNyBCYXNlOjpmIC4qKFxufFxyXG58XHIpKiIg fQorLy8geyBkZy1vdXRwdXQgIkJhc2U6IDAoXG58XHJcbnxccikqIiB9CisvLyB7IGRnLW91dHB1 dCAiZGVmYXVsdCBzdGQ6OmhhbmRsZV9jb250cmFjdF92aW9sYXRpb24gY2FsbGVkOiAuKi5DIDcg QmFzZTo6ZiAuKihcbnxcclxufFxyKSoiIH0KKy8vIHsgZGctb3V0cHV0ICJDaGlsZDA6IDAoXG58 XHJcbnxccikqIiB9CisvLyB7IGRnLW91dHB1dCAiZGVmYXVsdCBzdGQ6OmhhbmRsZV9jb250cmFj dF92aW9sYXRpb24gY2FsbGVkOiAuKi5DIDcgQ2hpbGQxOjpmIC4qKFxufFxyXG58XHIpKiIgfQor Ly8geyBkZy1vdXRwdXQgIkNoaWxkMTogMTAoXG58XHJcbnxccikqIiB9CisvLyB7IGRnLW91dHB1 dCAiZGVmYXVsdCBzdGQ6OmhhbmRsZV9jb250cmFjdF92aW9sYXRpb24gY2FsbGVkOiAuKi5DIDcg Q2hpbGQyOjpmIC4qKFxufFxyXG58XHIpKiIgfQorLy8geyBkZy1vdXRwdXQgIkNoaWxkMjogMjAo XG58XHJcbnxccikqIiB9CisvLyB7IGRnLW91dHB1dCAiZGVmYXVsdCBzdGQ6OmhhbmRsZV9jb250 cmFjdF92aW9sYXRpb24gY2FsbGVkOiAuKi5DIDcgQ2hpbGQzOjpmIC4qKFxufFxyXG58XHIpKiIg fQorLy8geyBkZy1vdXRwdXQgIkNoaWxkMzogMzAoXG58XHJcbnxccikqIiB9CisvLyB7IGRnLW91 dHB1dCAiZGVmYXVsdCBzdGQ6OmhhbmRsZV9jb250cmFjdF92aW9sYXRpb24gY2FsbGVkOiAuKi5D IDcgQ2hpbGQ0OjpmIC4qKFxufFxyXG58XHIpKiIgfQorLy8geyBkZy1vdXRwdXQgIkNoaWxkNDog NDAoXG58XHJcbnxccikqIiB9CisKZGlmZiAtLWdpdCBhL2djYy90ZXN0c3VpdGUvZysrLmRnL2Nv bnRyYWN0cy9jb250cmFjdHMtcHJlNS5DIGIvZ2NjL3Rlc3RzdWl0ZS9nKysuZGcvY29udHJhY3Rz L2NvbnRyYWN0cy1wcmU1LkMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAu LjI3OGE1NDUwNTVmCi0tLSAvZGV2L251bGwKKysrIGIvZ2NjL3Rlc3RzdWl0ZS9nKysuZGcvY29u dHJhY3RzL2NvbnRyYWN0cy1wcmU1LkMKQEAgLTAsMCArMSw4MSBAQAorLy8gYmFzaWMgdGVzdCB0 byBlbnN1cmUgcHJlIGNvbnRyYWN0cyB3b3JrIGZvciBmcmVlIHRlbXBsYXRlcworLy8geyBkZy1k byBydW4gfQorLy8geyBkZy1vcHRpb25zICItc3RkPWMrKzJhIC1mY29udHJhY3RzIC1mY29udHJh Y3QtY29udGludWF0aW9uLW1vZGU9b24iIH0KKyNpbmNsdWRlIDxjc3RkaW8+CisKK3RlbXBsYXRl PHR5cGVuYW1lIFQ+CitpbnQgYm9keShpbnQgYSkKKyAgW1sgcHJlOiBhID4gMCBdXQoreworICBU IHQgPSBhICogMi41OworICByZXR1cm4gdDsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgVD4KK2lu dCBub25lKGludCBhKQorICBbWyBwcmU6IGEgPiAwIF1dCit7CisgIHJldHVybiAtYTsKK30KKwor dGVtcGxhdGU8dHlwZW5hbWUgVD4KK2ludCBhcmcwKFQgdCkKKyAgW1sgcHJlOiB0ID4gMCBdXQor eworICByZXR1cm4gLXQgLSAxMDsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgVD4KK2ludCBhcmcx KGludCBhLCBUIHQpCisgIFtbIHByZTogYSA+IDAgXV0KKyAgW1sgcHJlOiB0ID4gMCBdXQorewor ICByZXR1cm4gLXQgKiBhOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPgorVCByZXQoaW50IGEp CisgIFtbIHByZTogYSA+IDAgXV0KK3sKKyAgcmV0dXJuIC1hOworfQorCitpbnQgbWFpbihpbnQs IGNoYXIqKikKK3sKKyAgcHJpbnRmKCIlZFxuIiwgYm9keTxpbnQ+KC0xKSk7CisgIHByaW50Zigi JWRcbiIsIGJvZHk8ZG91YmxlPigtMikpOworICBwcmludGYoIiVkXG4iLCBub25lPGludD4oLTEp KTsKKyAgcHJpbnRmKCIlZFxuIiwgbm9uZTxkb3VibGU+KC0yKSk7CisgIHByaW50ZigiJWRcbiIs IGFyZzAoLTEpKTsKKyAgcHJpbnRmKCIlZFxuIiwgYXJnMCgtMi45KSk7CisgIHByaW50ZigiJWRc biIsIGFyZzEoLTMsIC0xKSk7CisgIHByaW50ZigiJWRcbiIsIGFyZzEoLTQsIC0yLjkpKTsKKyAg cHJpbnRmKCIlZFxuIiwgKGludClyZXQ8aW50PigtMykpOworICBwcmludGYoIiVkXG4iLCAoaW50 KXJldDxkb3VibGU+KC00LjkpKTsKKworICByZXR1cm4gMDsKK30KKworLy8geyBkZy1vdXRwdXQg ImRlZmF1bHQgc3RkOjpoYW5kbGVfY29udHJhY3RfdmlvbGF0aW9uIGNhbGxlZDogLiouQyA4IGJv ZHk8aW50PiAuKihcbnxcclxufFxyKSoiIH0KKy8vIHsgZGctb3V0cHV0ICItMihcbnxcclxufFxy KSoiIH0KKy8vIHsgZGctb3V0cHV0ICJkZWZhdWx0IHN0ZDo6aGFuZGxlX2NvbnRyYWN0X3Zpb2xh dGlvbiBjYWxsZWQ6IC4qLkMgOCBib2R5PGRvdWJsZT4gLiooXG58XHJcbnxccikqIiB9CisvLyB7 IGRnLW91dHB1dCAiLTUoXG58XHJcbnxccikqIiB9CisvLyB7IGRnLW91dHB1dCAiZGVmYXVsdCBz dGQ6OmhhbmRsZV9jb250cmFjdF92aW9sYXRpb24gY2FsbGVkOiAuKi5DIDE2IG5vbmU8aW50PiAu KihcbnxcclxufFxyKSoiIH0KKy8vIHsgZGctb3V0cHV0ICIxKFxufFxyXG58XHIpKiIgfQorLy8g eyBkZy1vdXRwdXQgImRlZmF1bHQgc3RkOjpoYW5kbGVfY29udHJhY3RfdmlvbGF0aW9uIGNhbGxl ZDogLiouQyAxNiBub25lPGRvdWJsZT4gLiooXG58XHJcbnxccikqIiB9CisvLyB7IGRnLW91dHB1 dCAiMihcbnxcclxufFxyKSoiIH0KKy8vIHsgZGctb3V0cHV0ICJkZWZhdWx0IHN0ZDo6aGFuZGxl X2NvbnRyYWN0X3Zpb2xhdGlvbiBjYWxsZWQ6IC4qLkMgMjMgYXJnMDxpbnQ+IC4qKFxufFxyXG58 XHIpKiIgfQorLy8geyBkZy1vdXRwdXQgIi05KFxufFxyXG58XHIpKiIgfQorLy8geyBkZy1vdXRw dXQgImRlZmF1bHQgc3RkOjpoYW5kbGVfY29udHJhY3RfdmlvbGF0aW9uIGNhbGxlZDogLiouQyAy MyBhcmcwPGRvdWJsZT4gLiooXG58XHJcbnxccikqIiB9CisvLyB7IGRnLW91dHB1dCAiLTcoXG58 XHJcbnxccikqIiB9CisvLyB7IGRnLW91dHB1dCAiZGVmYXVsdCBzdGQ6OmhhbmRsZV9jb250cmFj dF92aW9sYXRpb24gY2FsbGVkOiAuKi5DIDMwIGFyZzE8aW50PiAuKihcbnxcclxufFxyKSoiIH0K Ky8vIHsgZGctb3V0cHV0ICJkZWZhdWx0IHN0ZDo6aGFuZGxlX2NvbnRyYWN0X3Zpb2xhdGlvbiBj YWxsZWQ6IC4qLkMgMzEgYXJnMTxpbnQ+IC4qKFxufFxyXG58XHIpKiIgfQorLy8geyBkZy1vdXRw dXQgIi0zKFxufFxyXG58XHIpKiIgfQorLy8geyBkZy1vdXRwdXQgImRlZmF1bHQgc3RkOjpoYW5k bGVfY29udHJhY3RfdmlvbGF0aW9uIGNhbGxlZDogLiouQyAzMCBhcmcxPGRvdWJsZT4gLiooXG58 XHJcbnxccikqIiB9CisvLyB7IGRnLW91dHB1dCAiZGVmYXVsdCBzdGQ6OmhhbmRsZV9jb250cmFj dF92aW9sYXRpb24gY2FsbGVkOiAuKi5DIDMxIGFyZzE8ZG91YmxlPiAuKihcbnxcclxufFxyKSoi IH0KKy8vIHsgZGctb3V0cHV0ICItMTEoXG58XHJcbnxccikqIiB9CisvLyB7IGRnLW91dHB1dCAi ZGVmYXVsdCBzdGQ6OmhhbmRsZV9jb250cmFjdF92aW9sYXRpb24gY2FsbGVkOiAuKi5DIDM4IHJl dDxpbnQ+IC4qKFxufFxyXG58XHIpKiIgfQorLy8geyBkZy1vdXRwdXQgIjMoXG58XHJcbnxccikq IiB9CisvLyB7IGRnLW91dHB1dCAiZGVmYXVsdCBzdGQ6OmhhbmRsZV9jb250cmFjdF92aW9sYXRp b24gY2FsbGVkOiAuKi5DIDM4IHJldDxkb3VibGU+IC4qKFxufFxyXG58XHIpKiIgfQorLy8geyBk Zy1vdXRwdXQgIjQoXG58XHJcbnxccikqIiB9CisKZGlmZiAtLWdpdCBhL2djYy90ZXN0c3VpdGUv ZysrLmRnL2NvbnRyYWN0cy9jb250cmFjdHMtcHJlNi5DIGIvZ2NjL3Rlc3RzdWl0ZS9nKysuZGcv Y29udHJhY3RzL2NvbnRyYWN0cy1wcmU2LkMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw MDAwMDAwMDAuLjQ0ZThlMjY0YjU0Ci0tLSAvZGV2L251bGwKKysrIGIvZ2NjL3Rlc3RzdWl0ZS9n KysuZGcvY29udHJhY3RzL2NvbnRyYWN0cy1wcmU2LkMKQEAgLTAsMCArMSw3NCBAQAorLy8gZW5z dXJlIG5vIGVycm9ycyBhcmUgdGhyb3duIHdoZW4gd2UgaGF2ZSB0byBpbnNlcnQgYSBkZWNsIGZv ciB0aGUgaW50ZXJuYWwKKy8vIHVuY2hlY2tlZCBmdW5jdGlvbiBhZnRlciBsZWF2aW5nIGEgKHBv c3NpYmx5IG5lc3RlZCkgbmFtZXNwYWNlCisvLyB7IGRnLWRvIGNvbXBpbGUgfQorLy8geyBkZy1v cHRpb25zICItc3RkPWMrKzJhIC1mY29udHJhY3RzIiB9CisKK25hbWVzcGFjZSBuczAKK3sKKyAg aW50IGYoaW50IGEpIFtbIHByZTogYSA+IDAgXV07Cit9CisKK2ludCBuczA6OmYoaW50IGEpIFtb IHByZTogYSA+IDAgXV0KK3sKKyAgcmV0dXJuIC1hOworfQorCituYW1lc3BhY2UgbnMwCit7Cisg IG5hbWVzcGFjZSBuczEKKyAgeworICAgIGludCBmKGludCBhKSBbWyBwcmU6IGEgPiAwIF1dOwor ICB9Cit9CisKK2ludCBuczA6Om5zMTo6ZihpbnQgYSkgW1sgcHJlOiBhID4gMCBdXQoreworICBy ZXR1cm4gLWE7Cit9CisKK25hbWVzcGFjZSBuczAKK3sKKyAgbmFtZXNwYWNlIG5zMQorICB7Cisg ICAgaW50IGYyKGludCBhKSBbWyBwcmU6IGEgPiAwIF1dOworICAgIG5hbWVzcGFjZSBuczIKKyAg ICB7CisgICAgICBpbnQgZihpbnQgYSkgW1sgcHJlOiBhID4gMCBdXTsKKyAgICB9CisgIH0KKyAg aW50IG5zMTo6ZjIoaW50IGEpIFtbIHByZTogYSA+IDAgXV0KKyAgeworICAgIHJldHVybiAtYTsK KyAgfQorfQorCitpbnQgbnMwOjpuczE6Om5zMjo6ZihpbnQgYSkgW1sgcHJlOiBhID4gMCBdXQor eworICByZXR1cm4gLWE7Cit9CisKK25hbWVzcGFjZSBuczAKK3sKKyAgc3RydWN0IFMKKyAgewor ICAgIGludCBmKGludCBhKSBbWyBwcmU6IGEgPiAwIF1dOworICB9OworICBuYW1lc3BhY2UgbnMx CisgIHsKKyAgICBzdHJ1Y3QgUzIKKyAgICB7CisgICAgICBpbnQgZihpbnQgYSkgW1sgcHJlOiBh ID4gMCBdXTsKKyAgICB9OworICB9Cit9CisKK2ludCBuczA6OlM6OmYoaW50IGEpIFtbIHByZTog YSA+IDAgXV0KK3sKKyAgcmV0dXJuIC1hOworfQorCitpbnQgbnMwOjpuczE6OlMyOjpmKGludCBh KSBbWyBwcmU6IGEgPiAwIF1dCit7CisgIHJldHVybiAtYTsKK30KKwpkaWZmIC0tZ2l0IGEvZ2Nj L3Rlc3RzdWl0ZS9nKysuZGcvY29udHJhY3RzL2NvbnRyYWN0cy1wcmU3LkMgYi9nY2MvdGVzdHN1 aXRlL2crKy5kZy9jb250cmFjdHMvY29udHJhY3RzLXByZTcuQwpuZXcgZmlsZSBtb2RlIDEwMDY0 NAppbmRleCAwMDAwMDAwMDAwMC4uYWViOGZjMDQyZTYKLS0tIC9kZXYvbnVsbAorKysgYi9nY2Mv dGVzdHN1aXRlL2crKy5kZy9jb250cmFjdHMvY29udHJhY3RzLXByZTcuQwpAQCAtMCwwICsxLDEz NCBAQAorLy8gZW5zdXJlIG5vIGVycm9ycyBhcmUgdGhyb3duIHdoZW4gd2UgaGF2ZSB0byBpbnNl cnQgYSBkZWNsIGZvciB0aGUgaW50ZXJuYWwKKy8vIHVuY2hlY2tlZCBmdW5jdGlvbiBhZnRlciBs ZWF2aW5nIGEgKHBvc3NpYmx5IG5lc3RlZCkgbmFtZXNwYWNlCisvLyB7IGRnLWRvIHJ1biB9Cisv LyB7IGRnLW9wdGlvbnMgIi1zdGQ9YysrMmEgLWZjb250cmFjdHMgLWZjb250cmFjdC1jb250aW51 YXRpb24tbW9kZT1vbiIgfQorCituYW1lc3BhY2UgbnMwCit7CisgIHRlbXBsYXRlPHR5cGVuYW1l IFQ+CisgIGludCBmKFQgYSkgW1sgcHJlOiBhID4gMCBdXTsKK30KKwordGVtcGxhdGU8dHlwZW5h bWUgVD4KK2ludCBuczA6OmYoVCBhKSBbWyBwcmU6IGEgPiAwIF1dCit7CisgIHJldHVybiAoaW50 KS1hOworfQorCituYW1lc3BhY2UgbnMwCit7CisgIG5hbWVzcGFjZSBuczEKKyAgeworICAgIHRl bXBsYXRlPHR5cGVuYW1lIFQ+CisgICAgaW50IGYoVCBhKSBbWyBwcmU6IGEgPiAwIF1dOworICB9 Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+CitpbnQgbnMwOjpuczE6OmYoVCBhKSBbWyBwcmU6 IGEgPiAwIF1dCit7CisgIHJldHVybiAtYTsKK30KKworbmFtZXNwYWNlIG5zMAoreworICBuYW1l c3BhY2UgbnMxCisgIHsKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPgorICAgIGludCBmMihUIGEp IFtbIHByZTogYSA+IDAgXV07CisgICAgbmFtZXNwYWNlIG5zMgorICAgIHsKKyAgICAgIHRlbXBs YXRlPHR5cGVuYW1lIFQ+CisgICAgICBpbnQgZihUIGEpIFtbIHByZTogYSA+IDAgXV07CisgICAg fQorICB9CisgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+CisgIGludCBuczE6OmYyKFQgYSkgW1sgcHJl OiBhID4gMCBdXQorICB7CisgICAgcmV0dXJuIC1hOworICB9Cit9CisKK3RlbXBsYXRlPHR5cGVu YW1lIFQ+CitpbnQgbnMwOjpuczE6Om5zMjo6ZihUIGEpIFtbIHByZTogYSA+IDAgXV0KK3sKKyAg cmV0dXJuIC1hOworfQorCituYW1lc3BhY2UgbnMwCit7CisgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+ CisgIHN0cnVjdCBTCisgIHsKKyAgICBpbnQgZihUIGEpIFtbIHByZTogYSA+IDAgXV07CisgIH07 CisgIG5hbWVzcGFjZSBuczEKKyAgeworICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+CisgICAgc3Ry dWN0IFMyCisgICAgeworICAgICAgaW50IGYoVCBhKSBbWyBwcmU6IGEgPiAwIF1dOworICAgIH07 CisgIH0KK30KKwordGVtcGxhdGU8dHlwZW5hbWUgVD4KK2ludCBuczA6OlM8VD46OmYoVCBhKSBb WyBwcmU6IGEgPiAwIF1dCit7CisgIHJldHVybiAtYTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUg VD4KK2ludCBuczA6Om5zMTo6UzI8VD46OmYoVCBhKSBbWyBwcmU6IGEgPiAwIF1dCit7CisgIHJl dHVybiAtYTsKK30KKworI2luY2x1ZGUgPGNzdGRpbz4KK2ludCBtYWluKGludCwgY2hhcioqKQor eworICBwcmludGYgKCIlZFxuIiwgbnMwOjpmKC0xKSk7CisgIHByaW50ZiAoIiVkXG4iLCBuczA6 Om5zMTo6ZigtMikpOworICBwcmludGYgKCIlZFxuIiwgbnMwOjpuczE6OmYyKC0zKSk7CisgIHBy aW50ZiAoIiVkXG4iLCBuczA6Om5zMTo6bnMyOjpmKC00KSk7CisgIG5zMDo6UzxpbnQ+IG5zMF9z OworICBwcmludGYgKCIlZFxuIiwgbnMwX3MuZigtNSkpOworICBuczA6Om5zMTo6UzI8aW50PiBu czBfbnMxX3MyOworICBwcmludGYgKCIlZFxuIiwgbnMwX25zMV9zMi5mKC02KSk7CisKKyAgcHJp bnRmICgiJWRcbiIsIG5zMDo6ZigtNy41KSk7CisgIHByaW50ZiAoIiVkXG4iLCBuczA6Om5zMTo6 ZigtOC41KSk7CisgIHByaW50ZiAoIiVkXG4iLCBuczA6Om5zMTo6ZjIoLTkuNSkpOworICBwcmlu dGYgKCIlZFxuIiwgbnMwOjpuczE6Om5zMjo6ZigtMTAuNSkpOworICBuczA6OlM8ZG91YmxlPiBu czBfc2Q7CisgIHByaW50ZiAoIiVkXG4iLCBuczBfc2QuZigtMTEuNSkpOworICBuczA6Om5zMTo6 UzI8ZG91YmxlPiBuczBfbnMxX3MyZDsKKyAgcHJpbnRmICgiJWRcbiIsIG5zMF9uczFfczJkLmYo LTEyLjUpKTsKKworICByZXR1cm4gMDsKK30KKworLy8geyBkZy1vdXRwdXQgImRlZmF1bHQgc3Rk OjpoYW5kbGVfY29udHJhY3RfdmlvbGF0aW9uIGNhbGxlZDogLiouQyAxMyBuczA6OmY8aW50PiAu KihcbnxcclxufFxyKSoiIH0KKy8vIHsgZGctb3V0cHV0ICIxKFxufFxyXG58XHIpKiIgfQorLy8g eyBkZy1vdXRwdXQgImRlZmF1bHQgc3RkOjpoYW5kbGVfY29udHJhY3RfdmlvbGF0aW9uIGNhbGxl ZDogLiouQyAyOCBuczA6Om5zMTo6ZjxpbnQ+IC4qKFxufFxyXG58XHIpKiIgfQorLy8geyBkZy1v dXRwdXQgIjIoXG58XHJcbnxccikqIiB9CisvLyB7IGRnLW91dHB1dCAiZGVmYXVsdCBzdGQ6Omhh bmRsZV9jb250cmFjdF92aW9sYXRpb24gY2FsbGVkOiAuKi5DIDQ2IG5zMDo6bnMxOjpmMjxpbnQ+ IC4qKFxufFxyXG58XHIpKiIgfQorLy8geyBkZy1vdXRwdXQgIjMoXG58XHJcbnxccikqIiB9Cisv LyB7IGRnLW91dHB1dCAiZGVmYXVsdCBzdGQ6OmhhbmRsZV9jb250cmFjdF92aW9sYXRpb24gY2Fs bGVkOiAuKi5DIDUzIG5zMDo6bnMxOjpuczI6OmY8aW50PiAuKihcbnxcclxufFxyKSoiIH0KKy8v IHsgZGctb3V0cHV0ICI0KFxufFxyXG58XHIpKiIgfQorLy8geyBkZy1vdXRwdXQgImRlZmF1bHQg c3RkOjpoYW5kbGVfY29udHJhY3RfdmlvbGF0aW9uIGNhbGxlZDogLiouQyA3NiBuczA6OlM8aW50 Pjo6ZiAuKihcbnxcclxufFxyKSoiIH0KKy8vIHsgZGctb3V0cHV0ICI1KFxufFxyXG58XHIpKiIg fQorLy8geyBkZy1vdXRwdXQgImRlZmF1bHQgc3RkOjpoYW5kbGVfY29udHJhY3RfdmlvbGF0aW9u IGNhbGxlZDogLiouQyA4MiBuczA6Om5zMTo6UzI8aW50Pjo6ZiAuKihcbnxcclxufFxyKSoiIH0K Ky8vIHsgZGctb3V0cHV0ICI2KFxufFxyXG58XHIpKiIgfQorLy8geyBkZy1vdXRwdXQgImRlZmF1 bHQgc3RkOjpoYW5kbGVfY29udHJhY3RfdmlvbGF0aW9uIGNhbGxlZDogLiouQyAxMyBuczA6OmY8 ZG91YmxlPiAuKihcbnxcclxufFxyKSoiIH0KKy8vIHsgZGctb3V0cHV0ICI3KFxufFxyXG58XHIp KiIgfQorLy8geyBkZy1vdXRwdXQgImRlZmF1bHQgc3RkOjpoYW5kbGVfY29udHJhY3RfdmlvbGF0 aW9uIGNhbGxlZDogLiouQyAyOCBuczA6Om5zMTo6Zjxkb3VibGU+IC4qKFxufFxyXG58XHIpKiIg fQorLy8geyBkZy1vdXRwdXQgIjgoXG58XHJcbnxccikqIiB9CisvLyB7IGRnLW91dHB1dCAiZGVm YXVsdCBzdGQ6OmhhbmRsZV9jb250cmFjdF92aW9sYXRpb24gY2FsbGVkOiAuKi5DIDQ2IG5zMDo6 bnMxOjpmMjxkb3VibGU+IC4qKFxufFxyXG58XHIpKiIgfQorLy8geyBkZy1vdXRwdXQgIjkoXG58 XHJcbnxccikqIiB9CisvLyB7IGRnLW91dHB1dCAiZGVmYXVsdCBzdGQ6OmhhbmRsZV9jb250cmFj dF92aW9sYXRpb24gY2FsbGVkOiAuKi5DIDUzIG5zMDo6bnMxOjpuczI6OmY8ZG91YmxlPiAuKihc bnxcclxufFxyKSoiIH0KKy8vIHsgZGctb3V0cHV0ICIxMChcbnxcclxufFxyKSoiIH0KKy8vIHsg ZGctb3V0cHV0ICJkZWZhdWx0IHN0ZDo6aGFuZGxlX2NvbnRyYWN0X3Zpb2xhdGlvbiBjYWxsZWQ6 IC4qLkMgNzYgbnMwOjpTPGRvdWJsZT46OmYgLiooXG58XHJcbnxccikqIiB9CisvLyB7IGRnLW91 dHB1dCAiMTEoXG58XHJcbnxccikqIiB9CisvLyB7IGRnLW91dHB1dCAiZGVmYXVsdCBzdGQ6Omhh bmRsZV9jb250cmFjdF92aW9sYXRpb24gY2FsbGVkOiAuKi5DIDgyIG5zMDo6bnMxOjpTMjxkb3Vi bGU+OjpmIC4qKFxufFxyXG58XHIpKiIgfQorLy8geyBkZy1vdXRwdXQgIjEyKFxufFxyXG58XHIp KiIgfQpkaWZmIC0tZ2l0IGEvZ2NjL3Rlc3RzdWl0ZS9nKysuZGcvY29udHJhY3RzL2NvbnRyYWN0 cy1wcmU5LkMgYi9nY2MvdGVzdHN1aXRlL2crKy5kZy9jb250cmFjdHMvY29udHJhY3RzLXByZTku QwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uNjRjMGNmYTM2ZGYKLS0t IC9kZXYvbnVsbAorKysgYi9nY2MvdGVzdHN1aXRlL2crKy5kZy9jb250cmFjdHMvY29udHJhY3Rz LXByZTkuQwpAQCAtMCwwICsxLDE0NiBAQAorLy8gZW5zdXJlIG5vIGVycm9ycyBhcmUgdGhyb3du IGZvciB2YXJpb3VzIGNvbWJpbmF0aW9ucyBvZiBjbGFzcyB0ZW1wbGF0ZXMKKy8vIHdpdGggZ3Vh cmRlZCBtZW1iZXJzCisvLyB7IGRnLWRvIHJ1biB9CisvLyB7IGRnLW9wdGlvbnMgIi1zdGQ9Yysr MmEgLWZjb250cmFjdHMgLWZjb250cmFjdC1jb250aW51YXRpb24tbW9kZT1vbiIgfQorCit0ZW1w bGF0ZTx0eXBlbmFtZSBUPgorc3RydWN0IFMKK3sKKyAgaW50IGYoaW50IGEpIFtbIHByZTogYSA+ IDAgXV07CisgIGludCBnKGludCBhKSBbWyBwcmU6IGEgPiAwIF1dOworfTsKKwordGVtcGxhdGU8 dHlwZW5hbWUgVD4KK2ludCBTPFQ+OjpmKGludCBhKSBbWyBwcmU6IGEgPiAwIF1dCit7CisgIHJl dHVybiAtYTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgVD4KK2ludCBTPFQ+OjpnKGludCBhKSAv LyBDb250cmFjdCBpcyBpbmhlcml0ZWQgKGVycm9yIGZyb20gbGluZSAxMCkuCit7CisgIHJldHVy biAtYTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgVD4KK3N0cnVjdCBTX2FyZworeworICBpbnQg ZihUIGEpIFtbIHByZTogYSA+IDAgXV07CisgIGludCBnKFQgYSkgW1sgcHJlOiBhID4gMCBdXTsK K307CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+CitpbnQgU19hcmc8VD46OmYoVCBhKSBbWyBwcmU6 IGEgPiAwIF1dCit7CisgIHJldHVybiAtYTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgVD4KK2lu dCBTX2FyZzxUPjo6ZyhUIGEpIC8vIENvbnRyYWN0IGlzIGluaGVyaXRlZCAoZXJyb3IgZnJvbSBs aW5lIDI5KS4KK3sKKyAgcmV0dXJuIC1hOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPgorc3Ry dWN0IFNfcmV0Cit7CisgIFQgZihpbnQgYSkgW1sgcHJlOiBhID4gMCBdXTsKKyAgVCBnKGludCBh KSBbWyBwcmU6IGEgPiAwIF1dOworfTsKKwordGVtcGxhdGU8dHlwZW5hbWUgVD4KK1QgU19yZXQ8 VD46OmYoaW50IGEpIFtbIHByZTogYSA+IDAgXV0KK3sKKyAgcmV0dXJuIC1hOworfQorCit0ZW1w bGF0ZTx0eXBlbmFtZSBUPgorVCBTX3JldDxUPjo6ZyhpbnQgYSkgLy8gQ29udHJhY3QgaXMgaW5o ZXJpdGVkIChlcnJvciBmcm9tIGxpbmUgNDgpLgoreworICByZXR1cm4gLWE7Cit9CisKKyNpbmNs dWRlIDxjc3RkaW8+CitpbnQgbWFpbihpbnQsIGNoYXIqKikKK3sKKyAgeworICAgIFM8aW50PiBz X2ludDsKKyAgICBwcmludGYgKCJzX2ludC5mKC0xMCk6ICVkXG4iLCBzX2ludC5mKC0xMCkpOwor ICAgIHByaW50ZiAoInNfaW50LmcoLTEwKTogJWRcbiIsIHNfaW50LmcoLTEwKSk7CisgICAgcHJp bnRmICgic19pbnQuZigxMCk6ICVkXG4iLCBzX2ludC5mKDEwKSk7CisgICAgcHJpbnRmICgic19p bnQuZygxMCk6ICVkXG4iLCBzX2ludC5nKDEwKSk7CisKKyAgICBTPGRvdWJsZT4gc19kb3VibGU7 CisgICAgcHJpbnRmICgic19kb3VibGUuZigtMTAuNSk6ICVkXG4iLCBzX2RvdWJsZS5mKC0xMC41 KSk7CisgICAgcHJpbnRmICgic19kb3VibGUuZygtMTAuNSk6ICVkXG4iLCBzX2RvdWJsZS5nKC0x MC41KSk7CisgICAgcHJpbnRmICgic19kb3VibGUuZigxMC41KTogJWRcbiIsIHNfZG91YmxlLmYo MTAuNSkpOworICAgIHByaW50ZiAoInNfZG91YmxlLmcoMTAuNSk6ICVkXG4iLCBzX2RvdWJsZS5n KDEwLjUpKTsKKyAgfQorCisgIHsKKyAgICBTX2FyZzxpbnQ+IHNfYXJnX2ludDsKKyAgICBwcmlu dGYgKCJzX2FyZ19pbnQuZigtMTApOiAlZFxuIiwgc19hcmdfaW50LmYoLTEwKSk7CisgICAgcHJp bnRmICgic19hcmdfaW50LmcoLTEwKTogJWRcbiIsIHNfYXJnX2ludC5nKC0xMCkpOworICAgIHBy aW50ZiAoInNfYXJnX2ludC5mKDEwKTogJWRcbiIsIHNfYXJnX2ludC5mKDEwKSk7CisgICAgcHJp bnRmICgic19hcmdfaW50LmcoMTApOiAlZFxuIiwgc19hcmdfaW50LmcoMTApKTsKKworICAgIFNf YXJnPGRvdWJsZT4gc19hcmdfZG91YmxlOworICAgIHByaW50ZiAoInNfYXJnX2RvdWJsZS5mKC0x MCk6ICVkXG4iLCBzX2FyZ19kb3VibGUuZigtMTApKTsKKyAgICBwcmludGYgKCJzX2FyZ19kb3Vi bGUuZygtMTApOiAlZFxuIiwgc19hcmdfZG91YmxlLmcoLTEwKSk7CisgICAgcHJpbnRmICgic19h cmdfZG91YmxlLmYoMTApOiAlZFxuIiwgc19hcmdfZG91YmxlLmYoMTApKTsKKyAgICBwcmludGYg KCJzX2FyZ19kb3VibGUuZygxMCk6ICVkXG4iLCBzX2FyZ19kb3VibGUuZygxMCkpOworICB9CisK KyAgeworICAgIFNfcmV0PGludD4gc19yZXRfaW50OworICAgIHByaW50ZiAoInNfcmV0X2ludC5m KC0xMCk6ICVkXG4iLCBzX3JldF9pbnQuZigtMTApKTsKKyAgICBwcmludGYgKCJzX3JldF9pbnQu ZygtMTApOiAlZFxuIiwgc19yZXRfaW50LmcoLTEwKSk7CisgICAgcHJpbnRmICgic19yZXRfaW50 LmYoMTApOiAlZFxuIiwgc19yZXRfaW50LmYoMTApKTsKKyAgICBwcmludGYgKCJzX3JldF9pbnQu ZygxMCk6ICVkXG4iLCBzX3JldF9pbnQuZygxMCkpOworCisgICAgU19yZXQ8ZG91YmxlPiBzX3Jl dF9kb3VibGU7CisgICAgcHJpbnRmICgic19yZXRfZG91YmxlLmYoLTEwKTogJWZcbiIsIHNfcmV0 X2RvdWJsZS5mKC0xMCkpOworICAgIHByaW50ZiAoInNfcmV0X2RvdWJsZS5nKC0xMCk6ICVmXG4i LCBzX3JldF9kb3VibGUuZygtMTApKTsKKyAgICBwcmludGYgKCJzX3JldF9kb3VibGUuZigxMCk6 ICVmXG4iLCBzX3JldF9kb3VibGUuZigxMCkpOworICAgIHByaW50ZiAoInNfcmV0X2RvdWJsZS5n KDEwKTogJWZcbiIsIHNfcmV0X2RvdWJsZS5nKDEwKSk7CisgIH0KKworICByZXR1cm4gMDsKK30K KworLy8geyBkZy1vdXRwdXQgImRlZmF1bHQgc3RkOjpoYW5kbGVfY29udHJhY3RfdmlvbGF0aW9u IGNhbGxlZDogLiouQyAxNCBTPGludD46OmYgLiooXG58XHJcbnxccikqIiB9CisvLyB7IGRnLW91 dHB1dCAic19pbnQuZi4tMTAuOiAxMChcbnxcclxufFxyKSoiIH0KKy8vIHsgZGctb3V0cHV0ICJk ZWZhdWx0IHN0ZDo6aGFuZGxlX2NvbnRyYWN0X3Zpb2xhdGlvbiBjYWxsZWQ6IC4qLkMgMTAgUzxp bnQ+OjpnIC4qKFxufFxyXG58XHIpKiIgfQorLy8geyBkZy1vdXRwdXQgInNfaW50LmcuLTEwLjog MTAoXG58XHJcbnxccikqIiB9CisvLyB7IGRnLW91dHB1dCAic19pbnQuZi4xMC46IC0xMChcbnxc clxufFxyKSoiIH0KKy8vIHsgZGctb3V0cHV0ICJzX2ludC5nLjEwLjogLTEwKFxufFxyXG58XHIp KiIgfQorLy8geyBkZy1vdXRwdXQgImRlZmF1bHQgc3RkOjpoYW5kbGVfY29udHJhY3RfdmlvbGF0 aW9uIGNhbGxlZDogLiouQyAxNCBTPGRvdWJsZT46OmYgLiooXG58XHJcbnxccikqIiB9CisvLyB7 IGRnLW91dHB1dCAic19kb3VibGUuZi4tMTAuNS46IDEwKFxufFxyXG58XHIpKiIgfQorLy8geyBk Zy1vdXRwdXQgImRlZmF1bHQgc3RkOjpoYW5kbGVfY29udHJhY3RfdmlvbGF0aW9uIGNhbGxlZDog LiouQyAxMCBTPGRvdWJsZT46OmcgLiooXG58XHJcbnxccikqIiB9CisvLyB7IGRnLW91dHB1dCAi c19kb3VibGUuZy4tMTAuNS46IDEwKFxufFxyXG58XHIpKiIgfQorLy8geyBkZy1vdXRwdXQgInNf ZG91YmxlLmYuMTAuNS46IC0xMChcbnxcclxufFxyKSoiIH0KKy8vIHsgZGctb3V0cHV0ICJzX2Rv dWJsZS5nLjEwLjUuOiAtMTAoXG58XHJcbnxccikqIiB9CisvLyB7IGRnLW91dHB1dCAiZGVmYXVs dCBzdGQ6OmhhbmRsZV9jb250cmFjdF92aW9sYXRpb24gY2FsbGVkOiAuKi5DIDMzIFNfYXJnPGlu dD46OmYgLiooXG58XHJcbnxccikqIiB9CisvLyB7IGRnLW91dHB1dCAic19hcmdfaW50LmYuLTEw LjogMTAoXG58XHJcbnxccikqIiB9CisvLyB7IGRnLW91dHB1dCAiZGVmYXVsdCBzdGQ6OmhhbmRs ZV9jb250cmFjdF92aW9sYXRpb24gY2FsbGVkOiAuKi5DIDI5IFNfYXJnPGludD46OmcgLiooXG58 XHJcbnxccikqIiB9CisvLyB7IGRnLW91dHB1dCAic19hcmdfaW50LmcuLTEwLjogMTAoXG58XHJc bnxccikqIiB9CisvLyB7IGRnLW91dHB1dCAic19hcmdfaW50LmYuMTAuOiAtMTAoXG58XHJcbnxc cikqIiB9CisvLyB7IGRnLW91dHB1dCAic19hcmdfaW50LmcuMTAuOiAtMTAoXG58XHJcbnxccikq IiB9CisvLyB7IGRnLW91dHB1dCAiZGVmYXVsdCBzdGQ6OmhhbmRsZV9jb250cmFjdF92aW9sYXRp b24gY2FsbGVkOiAuKi5DIDMzIFNfYXJnPGRvdWJsZT46OmYgLiooXG58XHJcbnxccikqIiB9Cisv LyB7IGRnLW91dHB1dCAic19hcmdfZG91YmxlLmYuLTEwLjogMTAoXG58XHJcbnxccikqIiB9Cisv LyB7IGRnLW91dHB1dCAiZGVmYXVsdCBzdGQ6OmhhbmRsZV9jb250cmFjdF92aW9sYXRpb24gY2Fs bGVkOiAuKi5DIDI5IFNfYXJnPGRvdWJsZT46OmcgLiooXG58XHJcbnxccikqIiB9CisvLyB7IGRn LW91dHB1dCAic19hcmdfZG91YmxlLmcuLTEwLjogMTAoXG58XHJcbnxccikqIiB9CisvLyB7IGRn LW91dHB1dCAic19hcmdfZG91YmxlLmYuMTAuOiAtMTAoXG58XHJcbnxccikqIiB9CisvLyB7IGRn LW91dHB1dCAic19hcmdfZG91YmxlLmcuMTAuOiAtMTAoXG58XHJcbnxccikqIiB9CisvLyB7IGRn LW91dHB1dCAiZGVmYXVsdCBzdGQ6OmhhbmRsZV9jb250cmFjdF92aW9sYXRpb24gY2FsbGVkOiAu Ki5DIDUyIFNfcmV0PGludD46OmYgLiooXG58XHJcbnxccikqIiB9CisvLyB7IGRnLW91dHB1dCAi c19yZXRfaW50LmYuLTEwLjogMTAoXG58XHJcbnxccikqIiB9CisvLyB7IGRnLW91dHB1dCAiZGVm YXVsdCBzdGQ6OmhhbmRsZV9jb250cmFjdF92aW9sYXRpb24gY2FsbGVkOiAuKi5DIDQ4IFNfcmV0 PGludD46OmcgLiooXG58XHJcbnxccikqIiB9CisvLyB7IGRnLW91dHB1dCAic19yZXRfaW50Lmcu LTEwLjogMTAoXG58XHJcbnxccikqIiB9CisvLyB7IGRnLW91dHB1dCAic19yZXRfaW50LmYuMTAu OiAtMTAoXG58XHJcbnxccikqIiB9CisvLyB7IGRnLW91dHB1dCAic19yZXRfaW50LmcuMTAuOiAt MTAoXG58XHJcbnxccikqIiB9CisvLyB7IGRnLW91dHB1dCAiZGVmYXVsdCBzdGQ6OmhhbmRsZV9j b250cmFjdF92aW9sYXRpb24gY2FsbGVkOiAuKi5DIDUyIFNfcmV0PGRvdWJsZT46OmYgLiooXG58 XHJcbnxccikqIiB9CisvLyB7IGRnLW91dHB1dCAic19yZXRfZG91YmxlLmYuLTEwLjogMTAuMDAw MDAwKFxufFxyXG58XHIpKiIgfQorLy8geyBkZy1vdXRwdXQgImRlZmF1bHQgc3RkOjpoYW5kbGVf Y29udHJhY3RfdmlvbGF0aW9uIGNhbGxlZDogLiouQyA0OCBTX3JldDxkb3VibGU+OjpnIC4qKFxu fFxyXG58XHIpKiIgfQorLy8geyBkZy1vdXRwdXQgInNfcmV0X2RvdWJsZS5nLi0xMC46IDEwLjAw MDAwMChcbnxcclxufFxyKSoiIH0KKy8vIHsgZGctb3V0cHV0ICJzX3JldF9kb3VibGUuZi4xMC46 IC0xMC4wMDAwMDAoXG58XHJcbnxccikqIiB9CisvLyB7IGRnLW91dHB1dCAic19yZXRfZG91Ymxl LmcuMTAuOiAtMTAuMDAwMDAwKFxufFxyXG58XHIpKiIgfQpkaWZmIC0tZ2l0IGEvZ2NjL3Rlc3Rz dWl0ZS9nKysuZGcvY29udHJhY3RzL2NvbnRyYWN0cy1yZWRlY2wxLkMgYi9nY2MvdGVzdHN1aXRl L2crKy5kZy9jb250cmFjdHMvY29udHJhY3RzLXJlZGVjbDEuQwpuZXcgZmlsZSBtb2RlIDEwMDY0 NAppbmRleCAwMDAwMDAwMDAwMC4uNThkMGFhZmVmZjUKLS0tIC9kZXYvbnVsbAorKysgYi9nY2Mv dGVzdHN1aXRlL2crKy5kZy9jb250cmFjdHMvY29udHJhY3RzLXJlZGVjbDEuQwpAQCAtMCwwICsx LDE0OSBAQAorLy8gZ2VuZXJpYyBlcnJvciB0ZXN0cyBmb3IgY29udHJhY3QgcmVkZWNscyB3aXRo IGdlbmVyYWxpemVkIHJlZGVjbAorLy8geyBkZy1kbyBjb21waWxlIH0KKy8vIHsgZGctb3B0aW9u cyAiLXN0ZD1jKysyYSAtZmNvbnRyYWN0cyIgfQorCisvLyBPSyBpZiBlcXVpdmFsZW50IC0tIGV2 ZW4gdGhyb3VnaCByZW5hbWVzLgoraW50IGcwKGludCBhKSBbWyBwcmU6IGEgPiAwIF1dOworaW50 IGcwKGludCBhKSBbWyBwcmU6IGEgPiAwIF1dOworCitpbnQgZzBiKGludCBhKSBbWyBwcmU6IGEg PiAwIF1dOworaW50IGcwYihpbnQgYikgW1sgcHJlOiBiID4gMCBdXTsKK2ludCBnMGIoaW50IGMp IFtbIHByZTogYyA+IDAgXV0KK3sKKyAgcmV0dXJuIDA7Cit9CisKKy8vIE9LIGlmIHNwZWNpZmll ZCBiZWZvcmUuCitpbnQgZzEoaW50IGEpIFtbIHByZTogYSA+IDAgXV07CitpbnQgZzEoaW50IGEp OworCisvLyBPSyBpZiBzcGVjaWZpZWQgYWZ0ZXIuCitpbnQgZzIoaW50IGEpOworaW50IGcyKGlu dCBhKSBbWyBwcmU6IGEgPiAwIF1dOworCitpbnQgZzJiKGludCBhKTsKK2ludCBnMmIoaW50IGIp IFtbIHByZTogYiA+IDAgXV07CisKKy8vIGNhbiBhZGQgdG8gbm9uLXZpcnR1YWwgbWV0aG9kcwor c3RydWN0IEcwCit7CisgIGludCBmKGludCBhKTsKK307CisKKy8vIE9LIHRvIGFkZCBjb250cmFj dHMgYXQgdGhlIHBvaW50IG9mIGRlZmluaXRpb24uCitpbnQgRzA6OmYoaW50IGEpIFtbIHByZTog YSA+IDAgXV0KK3sKKyAgcmV0dXJuIC1hOworfQorCitzdHJ1Y3QgRzEKK3sKKyAgaW50IGYxKGlu dCBhKTsKK307CisKKy8vIE9LIHRvIHJlZGVjbGFyZSBmdW5jdGlvbnMgYW5kIGFkZCBjb25zdHJh aW50cy4uLgoraW50IEcxOjpmMShpbnQgYSkgW1sgcHJlOiBhID4gMCBdXTsKKworLy8gLi4uYW5k IGxlYXZlIHRoZW0gb2ZmIGxhdGVyLgoraW50IEcxOjpmMShpbnQgYSkKK3sKKyAgcmV0dXJuIC1h OworfQorCitpbnQgZjAoaW50IGEpIFtbIHByZTogYSA+IDAgXV07CitpbnQgZjAoaW50IGEpIFtb IHByZTogYSA+IDAgXV0gW1sgcHJlOiBhID4gMTAgXV07IC8vIHsgZGctZXJyb3IgImRpZmZlcmVu dCBudW1iZXIgb2YgY29udHJhY3RzIiB9CisKK2ludCBmMShpbnQgYSkgW1sgcHJlOiBhID4gMCBd XSBbWyBwcmU6IGEgPiAxMCBdXTsKK2ludCBmMShpbnQgYSkgW1sgcHJlOiBhID4gMCBdXTsgLy8g eyBkZy1lcnJvciAiZGlmZmVyZW50IG51bWJlciBvZiBjb250cmFjdHMiIH0KKworaW50IGYyKGlu dCBhKSBbWyBwcmU6IGEgPiAwIF1dOworaW50IGYyKGludCBhKSBbWyBwcmU6IGEgPCAwIF1dOyAv LyB7IGRnLWVycm9yICJtaXNtYXRjaGVkIGNvbnRyYWN0IiB9CisKK2ludCBmMyhpbnQgYSkgeyBy ZXR1cm4gYTsgfQoraW50IGYzKGludCBhKSBbWyBwcmU6IGEgPCAwIF1dOyAvLyB7IGRnLWVycm9y ICJjYW5ub3QgYWRkIGNvbnRyYWN0cyIgfQorCitzdHJ1Y3QgQmFzZQoreworICB2aXJ0dWFsIGlu dCBmKGludCBhKSBbWyBwcmU6IGEgPiAwIF1dOworfTsKKworc3RydWN0IENoaWxkIDogQmFzZQor eworICBpbnQgZihpbnQgYSkgW1sgcHJlOiBhIDwgMCBdXTsgLy8geyBkZy1lcnJvciAibWlzbWF0 Y2hlZCBjb250cmFjdCIgfQorfTsKKworc3RydWN0IFMxCit7CisgIHZpcnR1YWwgaW50IGYoaW50 IGEpOyAvLyBjb250cmFjdHMgYXJlIGluaGVyaXRlZCBhdCB0aGUgcG9pbnQgb2YgZGVjbGFyYXRp b25zCit9OworCitpbnQgUzE6OmYoaW50IGEpIFtbIHByZTogYSA+IDAgXV0gLy8geyBkZy1lcnJv ciAiY2Fubm90IGFkZCIgfQoreworICByZXR1cm4gLWE7Cit9CisKK3N0cnVjdCBTMgoreworICBp bnQgZigpIHsgcmV0dXJuIDA7IH0KK307CisKK2ludCBTMjo6ZigpOyAvLyBPSz8KKworCitzdHJ1 Y3QgUzMKK3sKKyAgaW50IGYoKSB7IHJldHVybiAwOyB9Cit9OworCitpbnQgUzM6OmYoKSBbW3By ZTogdHJ1ZV1dOyAvLyB7IGRnLWVycm9yICJjYW5ub3QgYWRkIGNvbnRyYWN0cyIgfQorCisKKy8v IFRoZSBpbml0aWFsIGRlY2wgb2YgYSBndWFyZGVkIG1lbWJlciBtdXN0IGFwcGVhciBpbnNpZGUg dGhlIGNsYXNzLgorc3RydWN0IFM0Cit7CisgIGludCBmKGludCBhKTsKK307CisKK2ludCBTNDo6 ZyhpbnQgYSkgW1sgcHJlOiBhID4gMCBdXTsgLy8geyBkZy1lcnJvciAibm8gZGVjbGFyYXRpb24g bWF0Y2hlcyIgfQorCisKK3N0cnVjdCBTNQoreworICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPgorICBT NShUIGEpOworfTsKKwordGVtcGxhdGU8dHlwZW5hbWUgVD4KK1M1OjpTNShUIGEpIFtbIHByZTog YSA+IDAgXV0KK3sKK30KKworc3RydWN0IFM2Cit7CisgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+Cisg IFM2KFQgYSk7Cit9OworCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPgorUzY6OlM2KFQgYSkgW1sgcHJl OiBhID4gMCBdXTsKKwordGVtcGxhdGU8dHlwZW5hbWUgVD4KK1M2OjpTNihUIGEpCit7Cit9CisK K2ludCBwMChpbnQgbikKKyAgW1sgcG9zdCByOiByID4gMCAmJiByID09IG4gXV0KKyAgW1sgcG9z dCByOiByID4gMSAmJiByID09IG4gXV0KKyAgW1sgcG9zdCByOiByID4gMiAmJiByID09IG4gXV0K KyAgW1sgcG9zdCByOiByID4gMyAmJiByID09IG4gXV07CisKK2ludCBwMChpbnQgeikKKyAgW1sg cG9zdCByOiByID4gMCAmJiByID09IHogXV0KKyAgW1sgcG9zdCByMTogcjEgPiAxICYmIHIxID09 IHogXV0KKyAgW1sgcG9zdCByMjogcjIgPiAyICYmIHIyID09IHogXV0KKyAgW1sgcG9zdCByMzog cjMgPiAzICYmIHIzID09IHogXV0KK3sKKyAgcmV0dXJuIHo7Cit9CisKZGlmZiAtLWdpdCBhL2dj Yy90ZXN0c3VpdGUvZysrLmRnL2NvbnRyYWN0cy9jb250cmFjdHMtcmVkZWNsMi5DIGIvZ2NjL3Rl c3RzdWl0ZS9nKysuZGcvY29udHJhY3RzL2NvbnRyYWN0cy1yZWRlY2wyLkMKbmV3IGZpbGUgbW9k ZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLjcwYzkyNTkwNDlmCi0tLSAvZGV2L251bGwKKysr IGIvZ2NjL3Rlc3RzdWl0ZS9nKysuZGcvY29udHJhY3RzL2NvbnRyYWN0cy1yZWRlY2wyLkMKQEAg LTAsMCArMSwxNDkgQEAKKy8vIGdlbmVyaWMgZXJyb3IgdGVzdHMgZm9yIGdlbmVyYWxpemVkIGNv bnRyYWN0IHJlZGVjbHMKKy8vIHsgZGctZG8gY29tcGlsZSB9CisvLyB7IGRnLW9wdGlvbnMgIi1z dGQ9YysrMmEgLWZjb250cmFjdHMiIH0KKworLy8gYWxsb3dlZCB0byByZXBlYXQgY29udHJhY3Rz IG9yIG9taXQgdGhlbQoraW50IGcwKGludCBhKSBbWyBwcmU6IGEgPiAwIF1dOworaW50IGcwKGlu dCBhKSBbWyBwcmU6IGEgPiAwIF1dOworCitpbnQgZzEoaW50IGEpIFtbIHByZTogYSA+IDAgXV07 CitpbnQgZzEoaW50IGEpOworCisvLyBhbGxvd2VkIHRvIGFkZCBmcm9tIG5vbmUgaWYgZ2VuZXJh bGl6ZWQgcmVkZWNsIGlzIG9uIChieSBkZWZhdWx0KQoraW50IGcyKGludCBhKTsKK2ludCBnMihp bnQgYSkgW1sgcHJlOiBhID4gMCBdXTsKKworLy8gY2FuIGFkZCB0byBub24tdmlydHVhbCBtZXRo b2RzCitzdHJ1Y3QgRzAKK3sKKyAgaW50IGYoaW50IGEpOworfTsKKworaW50IEcwOjpmKGludCBh KSBbWyBwcmU6IGEgPiAwIF1dCit7CisgIHJldHVybiAtYTsKK30KKworc3RydWN0IEcxCit7Cisg IGludCBmKGludCBhKTsKK307CisKK2ludCBHMTo6ZihpbnQgYSkgW1sgcHJlOiBhID4gMCBdXTsK KworaW50IEcxOjpmKGludCBhKQoreworICByZXR1cm4gLWE7Cit9CisKKy8vIGFsbG93ZWQgdG8g cmVkZWNsYXJlIGV2ZW4gd2l0aG91dCBjb250cmFjdHMKK3N0cnVjdCBHMgoreworICBpbnQgZihp bnQgYSk7Cit9OworCitpbnQgRzI6OmYoaW50IGEpOworCisKK2ludCBmMChpbnQgYSkgW1sgcHJl OiBhID4gMCBdXTsKK2ludCBmMChpbnQgYSkgW1sgcHJlOiBhID4gMCBdXSBbWyBwcmU6IGEgPiAx MCBdXTsgLy8geyBkZy1lcnJvciAiZGlmZmVyZW50IG51bWJlciBvZiBjb250cmFjdHMiIH0KKwor aW50IGYxKGludCBhKSBbWyBwcmU6IGEgPiAwIF1dOworaW50IGYxKGludCBhKSBbWyBwcmU6IGEg PCAwIF1dOyAvLyB7IGRnLWVycm9yICJtaXNtYXRjaGVkIGNvbnRyYWN0IiB9CisKK2ludCBmMihp bnQgYSkgeyByZXR1cm4gYTsgfQoraW50IGYyKGludCBhKSBbWyBwcmU6IGEgPCAwIF1dOyAvLyB7 IGRnLWVycm9yICJjYW5ub3QgYWRkIGNvbnRyYWN0cyBhZnRlciBkZWZpbml0aW9uIiB9CisKK3N0 cnVjdCBCYXNlCit7CisgIHZpcnR1YWwgaW50IGYoaW50IGEpIFtbIHByZTogYSA+IDAgXV07Cit9 OworCitzdHJ1Y3QgQ2hpbGQgOiBCYXNlCit7CisgIGludCBmKGludCBhKSBbWyBwcmU6IGEgPCAw IF1dOyAvLyB7IGRnLWVycm9yICJtaXNtYXRjaGVkIGNvbnRyYWN0IiB9Cit9OworCisvLyB0aGUg aW5pdGlhbCBkZWNsIG9mIGEgZ3VhcmRlZCBtZW1iZXIgbXVzdCBhcHBlYXIgaW5zaWRlIHRoZSBj bGFzcworc3RydWN0IEYyCit7CisgIGludCBmKGludCBhKTsKK307CisKK2ludCBGMjo6ZyhpbnQg YSkgW1sgcHJlOiBhID4gMCBdXTsgLy8geyBkZy1lcnJvciAibm8gZGVjbGFyYXRpb24gbWF0Y2hl cyIgfQorLy8gRklYTUUgaWYgd2UgbW92ZSBGMiBkb3duIHRoZW4gYSBkaWZmZXJlbnQgZXJyb3Ig bWFrZXMgRjIgdW5kZWNsYXJlZAorCitzdHJ1Y3QgRjAKK3sKKyAgdmlydHVhbCBpbnQgZihpbnQg YSk7Cit9OworCitpbnQgRjA6OmYoaW50IGEpOyAvLyB7IGRnLWVycm9yICJkZWNsYXJhdGlvbi4q aXMgbm90IGRlZmluaXRpb24iIH0KKworc3RydWN0IEYxCit7CisgIHZpcnR1YWwgaW50IGYoaW50 IGEpOworfTsKKworaW50IEYxOjpmKGludCBhKSBbWyBwcmU6IGEgPiAwIF1dIC8vIHsgZGctZXJy b3IgImNhbm5vdCBhZGQiIH0KK3sKKyAgcmV0dXJuIC1hOworfQorCisvLyBjYW5ub3QgInJlImRl Y2xhcmUgbWVtYmVycyBvZiBhIGZvcndhcmQgZGVjbGFyZWQgY2xhc3MKK3N0cnVjdCBGMjsKK2lu dCBGMjo6dGVzdCgpOyAvLyB7IGRnLWVycm9yICJubyBkZWNsYXJhdGlvbiBtYXRjaGVzIiB9Citp bnQgRjI6OnRlc3QyKCkgW1sgcHJlOiB0cnVlIF1dOyAvLyB7IGRnLWVycm9yICJubyBkZWNsYXJh dGlvbiBtYXRjaGVzIiB9CisKKy8vIGNhbiBvbmx5IHJlZGVjbGFyZSBtZW1iZXIgZnVuY3Rpb25z CitzdHJ1Y3QgRjMKK3sKKyAgaW50IHg7CisgIHR5cGVkZWYgaW50IG15X2ludDsKKworICBzdHJ1 Y3QgSW5uZXIwOworICBzdHJ1Y3QgSW5uZXIxOworICBlbnVtIG15X2VudW0wOyAvLyB7IGRnLWVy cm9yICJ1c2Ugb2YgZW51bS4qd2l0aG91dCBwcmV2aW91cyBkZWNsIiB9CisgIGVudW0gbXlfZW51 bTEgeyBFMSwgRTIgfTsKKworICBpbnQgdGVzdDAoKTsKKyAgaW50IHRlc3QxKCk7CisgIGludCB0 ZXN0MigpOworfTsKKworaW50IEYzOjp4ey0xfTsgLy8geyBkZy1lcnJvciAiaXMgbm90IGEgc3Rh dGljIGRhdGEgbWVtYmVyIiB9Cit0eXBlZGVmIGRvdWJsZSBGMzo6bXlfaW50OyAvLyB7IGRnLWVy cm9yICJ0eXBlZGVmIG5hbWUgbWF5IG5vdCBiZSBhIG5lc3RlZC1uYW1lLXNwZWNpZmllciIgfQor c3RydWN0IEYzOjpJbm5lcjA7IC8vIHsgZGctd2FybmluZyAiZGVjbGFyYXRpb24uKmRvZXMgbm90 IGRlY2xhcmUgYW55dGhpbmciIH0KKworc3RydWN0IEYzOjpJbm5lcjEgeyB9OworCitlbnVtIEYz OjpteV9lbnVtMSB7IEUwLCBFMSwgRU5EIH07IC8vIHsgZGctZXJyb3IgIm11bHRpcGxlIGRlZmlu aXRpb24iIH0KKworc3RydWN0IEY0Cit7CisgIGludCB0ZXN0MCgpOworCisgIGludCBGMzo6dGVz dDAoKSBbWyBwcmU6IHRydWUgXV07IC8vIHsgZGctZXJyb3IgImNhbm5vdCBkZWNsYXJlIG1lbWJl ciBmdW5jdGlvbiIgfQorICBmcmllbmQgaW50IEYzOjp0ZXN0MSgpOworICBmcmllbmQgaW50IEYz Ojp0ZXN0MigpOworfTsKK2ludCBGMzo6dGVzdDIoKSBbWyBwcmU6IHRydWUgXV0geyByZXR1cm4g LTE7IH0KKwordm9pZCBkdW1teTAoKQoreworICBpbnQgRjQ6OnRlc3QwKCkgW1sgcHJlOiB0cnVl IF1dOyAvLyB7IGRnLWVycm9yICJxdWFsaWZpZWQtaWQgaW4gZGVjbGFyYXRpb24iIH0KK30KKwor bmFtZXNwYWNlIG5zMAoreworICB0eXBlZGVmIGludCB2YWx1ZTsKKyAgc3RydWN0IFgKKyAgewor ICAgIGludCB0ZXN0MSh2YWx1ZSk7CisgICAgdHlwZWRlZiBkb3VibGUgdmFsdWU7CisgICAgaW50 IHRlc3QyKHZhbHVlKTsKKyAgfTsKKyAgaW50IFg6OnRlc3QxKHZhbHVlKTsgLy8geyBkZy1lcnJv ciAibm8gZGVjbGFyYXRpb24gbWF0Y2hlcyIgfQorICBpbnQgWDo6dGVzdDIodmFsdWUpOworfQor CmRpZmYgLS1naXQgYS9nY2MvdGVzdHN1aXRlL2crKy5kZy9jb250cmFjdHMvY29udHJhY3RzLXJl ZGVjbDMuQyBiL2djYy90ZXN0c3VpdGUvZysrLmRnL2NvbnRyYWN0cy9jb250cmFjdHMtcmVkZWNs My5DCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi5mZGZjYTNhNjVmZgot LS0gL2Rldi9udWxsCisrKyBiL2djYy90ZXN0c3VpdGUvZysrLmRnL2NvbnRyYWN0cy9jb250cmFj dHMtcmVkZWNsMy5DCkBAIC0wLDAgKzEsMTk1IEBACisvLyBiYXNpYyB0ZXN0IHRvIGVuc3VyZSBj b250cmFjdHMgZ2VuZXJhbGl6ZWQgcmVkZWNsIHdvcmtzCisvLyB7IGRnLWRvIHJ1biB9CisvLyB7 IGRnLW9wdGlvbnMgIi1zdGQ9YysrMmEgLWZjb250cmFjdHMgLWZjb250cmFjdC1jb250aW51YXRp b24tbW9kZT1vbiIgfQorI2luY2x1ZGUgPGNzdGRpbz4KKworbmFtZXNwYWNlIGRlZmluaW5nCit7 CisgIGludCB4ID0gMTA7CisgIGRvdWJsZSB5ID0gMTAuNTsKKworICBzdHJ1Y3QgUworICB7Cisg ICAgYm9vbCB6OworICB9OworCisgIHN0cnVjdCBUMQorICB7CisgICAgdm9pZCB2ZnVuKGludCBt LCBkb3VibGUgbik7CisgICAgaW50IGZ1bihpbnQgbSwgZG91YmxlIG4pOworICAgIGRvdWJsZSBm dW4yKGludCBtLCBkb3VibGUgbik7CisgICAgUyBmdW5lbmQoaW50IG0sIGRvdWJsZSBuKTsKKyAg fTsKKworICB2b2lkIFQxOjp2ZnVuKGludCBtLCBkb3VibGUgbikKKyAgICBbWyBwcmU6IHggPCAw IF1dCisgICAgW1sgcHJlOiBtIDwgMCBdXQorICB7CisgICAgcHJpbnRmKCJ2ZnVuOjp4OiAlZFxu IiwgeCk7CisgIH0KKworICBpbnQgVDE6OmZ1bihpbnQgbSwgZG91YmxlIG4pCisgICAgW1sgcHJl OiB4IDwgMCBdXQorICB7CisgICAgcHJpbnRmKCJmdW46Ong6ICVkXG4iLCB4KTsKKyAgICByZXR1 cm4geDsKKyAgfQorCisgIGRvdWJsZSBUMTo6ZnVuMihpbnQgbSwgZG91YmxlIG4pCisgICAgW1sg cHJlOiB4IDwgMCBdXQorICAgIFtbIHByZTogeSA8IDAgXV0KKyAgICBbWyBwcmU6IG0gPCAwIF1d CisgICAgW1sgcHJlOiBuIDwgMCBdXQorICB7CisgICAgcHJpbnRmKCJmdW4yOjp4OiAlZCBmdW4y Ojp5OiAlZlxuIiwgeCwgeSk7CisgICAgcmV0dXJuIHk7CisgIH0KK30KKworbmFtZXNwYWNlIG5v bmRlZmluaW5nCit7CisgIGludCB4ID0gMTA7CisgIGRvdWJsZSB5ID0gMTAuNTsKKworICBzdHJ1 Y3QgUworICB7CisgICAgYm9vbCB6OworICB9OworCisgIHN0cnVjdCBUMQorICB7CisgICAgdm9p ZCB2ZnVuKGludCBtLCBkb3VibGUgbik7CisgICAgaW50IGZ1bihpbnQgbSwgZG91YmxlIG4pOwor ICAgIGRvdWJsZSBmdW4yKGludCBtLCBkb3VibGUgbik7CisgICAgUyBmdW5lbmQoaW50IG0sIGRv dWJsZSBuKTsKKyAgfTsKKworICB2b2lkIFQxOjp2ZnVuKGludCBtLCBkb3VibGUgbikKKyAgICBb WyBwcmU6IHggPCAwIF1dCisgICAgW1sgcHJlOiBtIDwgMCBdXTsKKyAgaW50IFQxOjpmdW4oaW50 IG0sIGRvdWJsZSBuKQorICAgIFtbIHByZTogeCA8IDAgXV07CisgIGRvdWJsZSBUMTo6ZnVuMihp bnQgbSwgZG91YmxlIG4pCisgICAgW1sgcHJlOiB4IDwgMCBdXQorICAgIFtbIHByZTogeSA8IDAg XV0KKyAgICBbWyBwcmU6IG0gPCAwIF1dCisgICAgW1sgcHJlOiBuIDwgMCBdXTsKKworICB2b2lk IFQxOjp2ZnVuKGludCBtLCBkb3VibGUgbikKKyAgeworICAgIHByaW50ZigidmZ1bjo6eDogJWRc biIsIHgpOworICB9CisKKyAgaW50IFQxOjpmdW4oaW50IG0sIGRvdWJsZSBuKQorICB7CisgICAg cHJpbnRmKCJmdW46Ong6ICVkXG4iLCB4KTsKKyAgICByZXR1cm4geDsKKyAgfQorCisgIGRvdWJs ZSBUMTo6ZnVuMihpbnQgbSwgZG91YmxlIG4pCisgIHsKKyAgICBwcmludGYoImZ1bjI6Ong6ICVk IGZ1bjI6Onk6ICVmXG4iLCB4LCB5KTsKKyAgICByZXR1cm4geTsKKyAgfQorfQorCitpbnQgbWFp bihpbnQsIGNoYXIqKikgeworICAvLyBkZWZpbmluZyByZWRlY2wKKyAgeworICAgIGludCB4ID0g MTE7CisgICAgZG91YmxlIHkgPSAxMS41OworCisgICAgZGVmaW5pbmc6OlQxIHQxOworICAgIHQx LnZmdW4oeCwgeSk7CisKKyAgICBpbnQgZiA9IDEzOworICAgIGYgPSB0MS5mdW4oeCwgeSk7Cisg ICAgcHJpbnRmKCJtYWluOjpmOiAlZFxuIiwgZik7CisgICAgZG91YmxlIGQgPSAxMy4zNzsKKyAg ICBkID0gdDEuZnVuMih4LCB5KTsKKyAgICBwcmludGYoIm1haW46OmQ6ICVmXG4iLCBkKTsKKyAg ICBkZWZpbmluZzo6UyBzID0gdDEuZnVuZW5kKHgsIHkpOworICAgIHByaW50ZigibWFpbjo6cy56 OiAlZFxuIiwgcy56ID8gMSA6IDApOworICB9CisKKyAgLy8gbm9uZGVmaW5pbmcgcmVkZWNsCisg IHsKKyAgICBpbnQgeCA9IDEyOworICAgIGRvdWJsZSB5ID0gMTIuNTsKKworICAgIG5vbmRlZmlu aW5nOjpUMSB0MTsKKyAgICB0MS52ZnVuKHgsIHkpOworCisgICAgaW50IGYgPSAxMzsKKyAgICBm ID0gdDEuZnVuKHgsIHkpOworICAgIHByaW50ZigibWFpbjo6ZjogJWRcbiIsIGYpOworICAgIGRv dWJsZSBkID0gMTMuMzc7CisgICAgZCA9IHQxLmZ1bjIoeCwgeSk7CisgICAgcHJpbnRmKCJtYWlu OjpkOiAlZlxuIiwgZCk7CisgICAgbm9uZGVmaW5pbmc6OlMgcyA9IHQxLmZ1bmVuZCh4LCB5KTsK KyAgICBwcmludGYoIm1haW46OnMuejogJWRcbiIsIHMueiA/IDEgOiAwKTsKKyAgfQorICByZXR1 cm4gMDsKK30KKworbmFtZXNwYWNlIGRlZmluaW5nCit7CisgIFMgVDE6OmZ1bmVuZChpbnQgbSwg ZG91YmxlIG4pCisgICAgW1sgcHJlOiB4IDwgMCBdXQorICAgIFtbIHByZTogbSA8IDAgXV0KKyAg eworICAgIHByaW50ZigiZnVuZW5kOjp4OiAlZFxuIiwgeCk7CisgICAgUyBzOworICAgIHMueiA9 IHRydWU7CisgICAgcmV0dXJuIHM7CisgIH0KK30KKworbmFtZXNwYWNlIG5vbmRlZmluaW5nCit7 CisgIFMgVDE6OmZ1bmVuZChpbnQgbSwgZG91YmxlIG4pCisgICAgW1sgcHJlOiB4IDwgMCBdXQor ICAgIFtbIHByZTogbSA8IDAgXV07CisKKyAgUyBUMTo6ZnVuZW5kKGludCBtLCBkb3VibGUgbikK KyAgeworICAgIHByaW50ZigiZnVuZW5kOjp4OiAlZFxuIiwgeCk7CisgICAgUyBzOworICAgIHMu eiA9IHRydWU7CisgICAgcmV0dXJuIHM7CisgIH0KK30KKworLy8geyBkZy1vdXRwdXQgImRlZmF1 bHQgc3RkOjpoYW5kbGVfY29udHJhY3RfdmlvbGF0aW9uIGNhbGxlZDogLiouQyAyNSBkZWZpbmlu Zzo6VDE6OnZmdW4gLiooXG58XHJcbnxccikqIiB9CisvLyB7IGRnLW91dHB1dCAiZGVmYXVsdCBz dGQ6OmhhbmRsZV9jb250cmFjdF92aW9sYXRpb24gY2FsbGVkOiAuKi5DIDI2IGRlZmluaW5nOjpU MTo6dmZ1biAuKihcbnxcclxufFxyKSoiIH0KKy8vIHsgZGctb3V0cHV0ICJ2ZnVuOjp4OiAxMChc bnxcclxufFxyKSoiIH0KKy8vIHsgZGctb3V0cHV0ICJkZWZhdWx0IHN0ZDo6aGFuZGxlX2NvbnRy YWN0X3Zpb2xhdGlvbiBjYWxsZWQ6IC4qLkMgMzIgZGVmaW5pbmc6OlQxOjpmdW4gLiooXG58XHJc bnxccikqIiB9CisvLyB7IGRnLW91dHB1dCAiZnVuOjp4OiAxMChcbnxcclxufFxyKSoiIH0KKy8v IHsgZGctb3V0cHV0ICJtYWluOjpmOiAxMChcbnxcclxufFxyKSoiIH0KKy8vIHsgZGctb3V0cHV0 ICJkZWZhdWx0IHN0ZDo6aGFuZGxlX2NvbnRyYWN0X3Zpb2xhdGlvbiBjYWxsZWQ6IC4qLkMgMzkg ZGVmaW5pbmc6OlQxOjpmdW4yIC4qKFxufFxyXG58XHIpKiIgfQorLy8geyBkZy1vdXRwdXQgImRl ZmF1bHQgc3RkOjpoYW5kbGVfY29udHJhY3RfdmlvbGF0aW9uIGNhbGxlZDogLiouQyA0MCBkZWZp bmluZzo6VDE6OmZ1bjIgLiooXG58XHJcbnxccikqIiB9CisvLyB7IGRnLW91dHB1dCAiZGVmYXVs dCBzdGQ6OmhhbmRsZV9jb250cmFjdF92aW9sYXRpb24gY2FsbGVkOiAuKi5DIDQxIGRlZmluaW5n OjpUMTo6ZnVuMiAuKihcbnxcclxufFxyKSoiIH0KKy8vIHsgZGctb3V0cHV0ICJkZWZhdWx0IHN0 ZDo6aGFuZGxlX2NvbnRyYWN0X3Zpb2xhdGlvbiBjYWxsZWQ6IC4qLkMgNDIgZGVmaW5pbmc6OlQx OjpmdW4yIC4qKFxufFxyXG58XHIpKiIgfQorLy8geyBkZy1vdXRwdXQgImZ1bjI6Ong6IDEwIGZ1 bjI6Onk6IDEwLjUwMDAwMChcbnxcclxufFxyKSoiIH0KKy8vIHsgZGctb3V0cHV0ICJtYWluOjpk OiAxMC41MDAwMDAoXG58XHJcbnxccikqIiB9CisvLyB7IGRnLW91dHB1dCAiZGVmYXVsdCBzdGQ6 OmhhbmRsZV9jb250cmFjdF92aW9sYXRpb24gY2FsbGVkOiAuKi5DIDEzOCBkZWZpbmluZzo6VDE6 OmZ1bmVuZCAuKihcbnxcclxufFxyKSoiIH0KKy8vIHsgZGctb3V0cHV0ICJkZWZhdWx0IHN0ZDo6 aGFuZGxlX2NvbnRyYWN0X3Zpb2xhdGlvbiBjYWxsZWQ6IC4qLkMgMTM5IGRlZmluaW5nOjpUMTo6 ZnVuZW5kIC4qKFxufFxyXG58XHIpKiIgfQorLy8geyBkZy1vdXRwdXQgImZ1bmVuZDo6eDogMTAo XG58XHJcbnxccikqIiB9CisvLyB7IGRnLW91dHB1dCAibWFpbjo6cy56OiAxKFxufFxyXG58XHIp KiIgfQorLy8geyBkZy1vdXRwdXQgImRlZmF1bHQgc3RkOjpoYW5kbGVfY29udHJhY3RfdmlvbGF0 aW9uIGNhbGxlZDogLiouQyA2OCBub25kZWZpbmluZzo6VDE6OnZmdW4gLiooXG58XHJcbnxccikq IiB9CisvLyB7IGRnLW91dHB1dCAiZGVmYXVsdCBzdGQ6OmhhbmRsZV9jb250cmFjdF92aW9sYXRp b24gY2FsbGVkOiAuKi5DIDY5IG5vbmRlZmluaW5nOjpUMTo6dmZ1biAuKihcbnxcclxufFxyKSoi IH0KKy8vIHsgZGctb3V0cHV0ICJ2ZnVuOjp4OiAxMChcbnxcclxufFxyKSoiIH0KKy8vIHsgZGct b3V0cHV0ICJkZWZhdWx0IHN0ZDo6aGFuZGxlX2NvbnRyYWN0X3Zpb2xhdGlvbiBjYWxsZWQ6IC4q LkMgNzEgbm9uZGVmaW5pbmc6OlQxOjpmdW4gLiooXG58XHJcbnxccikqIiB9CisvLyB7IGRnLW91 dHB1dCAiZnVuOjp4OiAxMChcbnxcclxufFxyKSoiIH0KKy8vIHsgZGctb3V0cHV0ICJtYWluOjpm OiAxMChcbnxcclxufFxyKSoiIH0KKy8vIHsgZGctb3V0cHV0ICJkZWZhdWx0IHN0ZDo6aGFuZGxl X2NvbnRyYWN0X3Zpb2xhdGlvbiBjYWxsZWQ6IC4qLkMgNzMgbm9uZGVmaW5pbmc6OlQxOjpmdW4y IC4qKFxufFxyXG58XHIpKiIgfQorLy8geyBkZy1vdXRwdXQgImRlZmF1bHQgc3RkOjpoYW5kbGVf Y29udHJhY3RfdmlvbGF0aW9uIGNhbGxlZDogLiouQyA3NCBub25kZWZpbmluZzo6VDE6OmZ1bjIg LiooXG58XHJcbnxccikqIiB9CisvLyB7IGRnLW91dHB1dCAiZGVmYXVsdCBzdGQ6OmhhbmRsZV9j b250cmFjdF92aW9sYXRpb24gY2FsbGVkOiAuKi5DIDc1IG5vbmRlZmluaW5nOjpUMTo6ZnVuMiAu KihcbnxcclxufFxyKSoiIH0KKy8vIHsgZGctb3V0cHV0ICJkZWZhdWx0IHN0ZDo6aGFuZGxlX2Nv bnRyYWN0X3Zpb2xhdGlvbiBjYWxsZWQ6IC4qLkMgNzYgbm9uZGVmaW5pbmc6OlQxOjpmdW4yIC4q KFxufFxyXG58XHIpKiIgfQorLy8geyBkZy1vdXRwdXQgImZ1bjI6Ong6IDEwIGZ1bjI6Onk6IDEw LjUwMDAwMChcbnxcclxufFxyKSoiIH0KKy8vIHsgZGctb3V0cHV0ICJtYWluOjpkOiAxMC41MDAw MDAoXG58XHJcbnxccikqIiB9CisvLyB7IGRnLW91dHB1dCAiZGVmYXVsdCBzdGQ6OmhhbmRsZV9j b250cmFjdF92aW9sYXRpb24gY2FsbGVkOiAuKi5DIDE1MSBub25kZWZpbmluZzo6VDE6OmZ1bmVu ZCAuKihcbnxcclxufFxyKSoiIH0KKy8vIHsgZGctb3V0cHV0ICJkZWZhdWx0IHN0ZDo6aGFuZGxl X2NvbnRyYWN0X3Zpb2xhdGlvbiBjYWxsZWQ6IC4qLkMgMTUyIG5vbmRlZmluaW5nOjpUMTo6ZnVu ZW5kIC4qKFxufFxyXG58XHIpKiIgfQorLy8geyBkZy1vdXRwdXQgImZ1bmVuZDo6eDogMTAoXG58 XHJcbnxccikqIiB9CisvLyB7IGRnLW91dHB1dCAibWFpbjo6cy56OiAxKFxufFxyXG58XHIpKiIg fQorCmRpZmYgLS1naXQgYS9nY2MvdGVzdHN1aXRlL2crKy5kZy9jb250cmFjdHMvY29udHJhY3Rz LXJlZGVjbDQuQyBiL2djYy90ZXN0c3VpdGUvZysrLmRnL2NvbnRyYWN0cy9jb250cmFjdHMtcmVk ZWNsNC5DCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi5jMWUyMzQyMjZi NgotLS0gL2Rldi9udWxsCisrKyBiL2djYy90ZXN0c3VpdGUvZysrLmRnL2NvbnRyYWN0cy9jb250 cmFjdHMtcmVkZWNsNC5DCkBAIC0wLDAgKzEsNTYgQEAKKy8vIHRlc3QgdGhhdCBmcmVlIGZ1bmN0 aW9ucyBjYW4gYmUgcmVkZWNsYXJlZCB3aXRoIGNvbnRyYWN0cyB3aXRob3V0IGFmZmVjdGluZwor Ly8gbm9ybWFsIGRlZmF1bHQgcGFybSBoYW5kbGluZworLy8geyBkZy1kbyBydW4gfQorLy8geyBk Zy1vcHRpb25zICItc3RkPWMrKzJhIC1mY29udHJhY3RzIC1mY29udHJhY3QtY29udGludWF0aW9u LW1vZGU9b24iIH0KKyNpbmNsdWRlIDxjc3RkaW8+CisKK2ludCBmKGludCBhLCBpbnQsIGludCBj ID0gMTApOworaW50IGYoaW50IGEsIGludCBiID0gMTEsIGludCk7CitpbnQgZihpbnQgYSwgaW50 IGIsIGludCBjKQorICBbWyBwcmU6IGEgPCAwIF1dCisgIFtbIHByZTogYiA8IDAgXV0KKyAgW1sg cHJlOiBjIDwgMCBdXTsKKworaW50IGYoaW50LCBpbnQsIGludCk7CisKK2ludCBmKGludCBhLCBp bnQgYiwgaW50IGMpCit7CisgIHByaW50ZigiZjogYTogJWQsIGI6ICVkLCBjOiAlZFxuIiwgYSwg YiwgYyk7CisgIHJldHVybiBhICogYiAtIGM7Cit9CisKK2ludCBmKGludCBhID0gMTIsIGludCwg aW50KTsKKworaW50IG1haW4oaW50LCBjaGFyICoqKQoreworICBmKDEsMSwxKTsKKyAgcHJpbnRm KCI9PT09PVxuIik7CisgIGYoMSwxKTsKKyAgcHJpbnRmKCI9PT09PVxuIik7CisgIGYoMSk7Cisg IHByaW50ZigiPT09PT1cbiIpOworICBmKCk7CisgIHByaW50ZigiPT09PT1cbiIpOworfQorCisv LyB7IGRnLW91dHB1dCAiZGVmYXVsdCBzdGQ6OmhhbmRsZV9jb250cmFjdF92aW9sYXRpb24gY2Fs bGVkOiAuKi5DIDEwIGYgLiooXG58XHJcbnxccikqIiB9CisvLyB7IGRnLW91dHB1dCAiZGVmYXVs dCBzdGQ6OmhhbmRsZV9jb250cmFjdF92aW9sYXRpb24gY2FsbGVkOiAuKi5DIDExIGYgLiooXG58 XHJcbnxccikqIiB9CisvLyB7IGRnLW91dHB1dCAiZGVmYXVsdCBzdGQ6OmhhbmRsZV9jb250cmFj dF92aW9sYXRpb24gY2FsbGVkOiAuKi5DIDEyIGYgLiooXG58XHJcbnxccikqIiB9CisvLyB7IGRn LW91dHB1dCAiZjogYTogMSwgYjogMSwgYzogMShcbnxcclxufFxyKSoiIH0KKy8vIHsgZGctb3V0 cHV0ICI9PT09PShcbnxcclxufFxyKSoiIH0KKy8vIHsgZGctb3V0cHV0ICJkZWZhdWx0IHN0ZDo6 aGFuZGxlX2NvbnRyYWN0X3Zpb2xhdGlvbiBjYWxsZWQ6IC4qLkMgMTAgZiAuKihcbnxcclxufFxy KSoiIH0KKy8vIHsgZGctb3V0cHV0ICJkZWZhdWx0IHN0ZDo6aGFuZGxlX2NvbnRyYWN0X3Zpb2xh dGlvbiBjYWxsZWQ6IC4qLkMgMTEgZiAuKihcbnxcclxufFxyKSoiIH0KKy8vIHsgZGctb3V0cHV0 ICJkZWZhdWx0IHN0ZDo6aGFuZGxlX2NvbnRyYWN0X3Zpb2xhdGlvbiBjYWxsZWQ6IC4qLkMgMTIg ZiAuKihcbnxcclxufFxyKSoiIH0KKy8vIHsgZGctb3V0cHV0ICJmOiBhOiAxLCBiOiAxLCBjOiAx MChcbnxcclxufFxyKSoiIH0KKy8vIHsgZGctb3V0cHV0ICI9PT09PShcbnxcclxufFxyKSoiIH0K Ky8vIHsgZGctb3V0cHV0ICJkZWZhdWx0IHN0ZDo6aGFuZGxlX2NvbnRyYWN0X3Zpb2xhdGlvbiBj YWxsZWQ6IC4qLkMgMTAgZiAuKihcbnxcclxufFxyKSoiIH0KKy8vIHsgZGctb3V0cHV0ICJkZWZh dWx0IHN0ZDo6aGFuZGxlX2NvbnRyYWN0X3Zpb2xhdGlvbiBjYWxsZWQ6IC4qLkMgMTEgZiAuKihc bnxcclxufFxyKSoiIH0KKy8vIHsgZGctb3V0cHV0ICJkZWZhdWx0IHN0ZDo6aGFuZGxlX2NvbnRy YWN0X3Zpb2xhdGlvbiBjYWxsZWQ6IC4qLkMgMTIgZiAuKihcbnxcclxufFxyKSoiIH0KKy8vIHsg ZGctb3V0cHV0ICJmOiBhOiAxLCBiOiAxMSwgYzogMTAoXG58XHJcbnxccikqIiB9CisvLyB7IGRn LW91dHB1dCAiPT09PT0oXG58XHJcbnxccikqIiB9CisvLyB7IGRnLW91dHB1dCAiZGVmYXVsdCBz dGQ6OmhhbmRsZV9jb250cmFjdF92aW9sYXRpb24gY2FsbGVkOiAuKi5DIDEwIGYgLiooXG58XHJc bnxccikqIiB9CisvLyB7IGRnLW91dHB1dCAiZGVmYXVsdCBzdGQ6OmhhbmRsZV9jb250cmFjdF92 aW9sYXRpb24gY2FsbGVkOiAuKi5DIDExIGYgLiooXG58XHJcbnxccikqIiB9CisvLyB7IGRnLW91 dHB1dCAiZGVmYXVsdCBzdGQ6OmhhbmRsZV9jb250cmFjdF92aW9sYXRpb24gY2FsbGVkOiAuKi5D IDEyIGYgLiooXG58XHJcbnxccikqIiB9CisvLyB7IGRnLW91dHB1dCAiZjogYTogMTIsIGI6IDEx LCBjOiAxMChcbnxcclxufFxyKSoiIH0KKy8vIHsgZGctb3V0cHV0ICI9PT09PShcbnxcclxufFxy KSoiIH0KKwpkaWZmIC0tZ2l0IGEvZ2NjL3Rlc3RzdWl0ZS9nKysuZGcvY29udHJhY3RzL2NvbnRy YWN0cy1yZWRlY2w1LkMgYi9nY2MvdGVzdHN1aXRlL2crKy5kZy9jb250cmFjdHMvY29udHJhY3Rz LXJlZGVjbDUuQwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uZWE0ODM1 ZjE4OTkKLS0tIC9kZXYvbnVsbAorKysgYi9nY2MvdGVzdHN1aXRlL2crKy5kZy9jb250cmFjdHMv Y29udHJhY3RzLXJlZGVjbDUuQwpAQCAtMCwwICsxLDEwMSBAQAorLy8gZ2VuZXJpYyBlcnJvciB0 ZXN0cyBmb3IgZ2VuZXJhbGl6ZWQgY29udHJhY3QgcmVkZWNscworLy8gICB3ZSBhbHNvIHRlc3Qg Zm9yIHRoZSB3YXJuaW5nIGRpYWdub3N0aWMgZm9yIHN0cmljdCByZWRlY2wKKy8vIHsgZGctZG8g Y29tcGlsZSB9CisvLyB7IGRnLW9wdGlvbnMgIi1zdGQ9YysrMmEgLWZjb250cmFjdHMgLWZjb250 cmFjdC1zdHJpY3QtZGVjbGFyYXRpb25zPW9uIiB9CisKKy8vIGFsbG93ZWQgdG8gcmVwZWF0IGNv bnRyYWN0cyBvciBvbWl0IHRoZW0KK2ludCBnMChpbnQgYSkgW1sgcHJlOiBhID4gMCBdXTsKK2lu dCBnMChpbnQgYSkgW1sgcHJlOiBhID4gMCBdXTsKKworaW50IGcxKGludCBhKSBbWyBwcmU6IGEg PiAwIF1dOworaW50IGcxKGludCBhKTsKKworLy8gYWxsb3dlZCB0byBhZGQgZnJvbSBub25lIGlm IGdlbmVyYWxpemVkIHJlZGVjbCBpcyBvbiAoYnkgZGVmYXVsdCkKK2ludCBnMihpbnQgYSk7Citp bnQgZzIoaW50IGEpIFtbIHByZTogYSA+IDAgXV07IC8vIHsgZGctd2FybmluZyAiYWRkcyBjb250 cmFjdHMiIH0KK2ludCBnMihpbnQgYSkgW1sgcHJlOiBhID4gMCBdXTsgLy8geyBkZy1ib2d1cyAi YWRkcyBjb250cmFjdHMiIH0KKworLy8gY2FuIGFkZCB0byBub24tdmlydHVhbCBtZXRob2RzCitz dHJ1Y3QgRzAKK3sKKyAgaW50IGYoaW50IGEpOworfTsKKworaW50IEcwOjpmKGludCBhKSBbWyBw cmU6IGEgPiAwIF1dIC8vIHsgZGctd2FybmluZyAiYWRkcyBjb250cmFjdHMiIH0KK3sKKyAgcmV0 dXJuIC1hOworfQorCitzdHJ1Y3QgRzEKK3sKKyAgaW50IGYoaW50IGEpOworfTsKKworaW50IEcx OjpmKGludCBhKSBbWyBwcmU6IGEgPiAwIF1dOyAvLyB7IGRnLXdhcm5pbmcgImFkZHMgY29udHJh Y3RzIiB9CisvLyB7IGRnLXdhcm5pbmcgIm91dHNpZGUgb2YgY2xhc3MgaXMgbm90IGRlZmluaXRp b24iICIiIHsgdGFyZ2V0ICotKi0qIH0gLi0xIH0KKworaW50IEcxOjpmKGludCBhKTsKKy8vIHsg ZGctd2FybmluZyAib3V0c2lkZSBvZiBjbGFzcyBpcyBub3QgZGVmaW5pdGlvbiIgIiIgeyB0YXJn ZXQgKi0qLSogfSAuLTEgfQorCitpbnQgRzE6OmYoaW50IGEpIFtbIHByZTogYSA+IDAgXV07Cisv LyB7IGRnLXdhcm5pbmcgIm91dHNpZGUgb2YgY2xhc3MgaXMgbm90IGRlZmluaXRpb24iICIiIHsg dGFyZ2V0ICotKi0qIH0gLi0xIH0KKworaW50IEcxOjpmKGludCBhKQoreworICByZXR1cm4gLWE7 Cit9CisKKy8vIGFsbG93ZWQgdG8gcmVkZWNsYXJlIGV2ZW4gd2l0aG91dCBjb250cmFjdHMKK3N0 cnVjdCBHMgoreworICBpbnQgZihpbnQgYSk7Cit9OworCitpbnQgRzI6OmYoaW50IGEpOyAvLyB7 IGRnLXdhcm5pbmcgIm91dHNpZGUgb2YgY2xhc3MgaXMgbm90IGRlZmluaXRpb24iIH0KKworCitp bnQgZjAoaW50IGEpIFtbIHByZTogYSA+IDAgXV07CitpbnQgZjAoaW50IGEpIFtbIHByZTogYSA+ IDAgXV0gW1sgcHJlOiBhID4gMTAgXV07IC8vIHsgZGctZXJyb3IgImRpZmZlcmVudCBudW1iZXIg b2YgY29udHJhY3RzIiB9CisKK2ludCBmMShpbnQgYSkgW1sgcHJlOiBhID4gMCBdXTsKK2ludCBm MShpbnQgYSkgW1sgcHJlOiBhIDwgMCBdXTsgLy8geyBkZy1lcnJvciAibWlzbWF0Y2hlZCBjb250 cmFjdCIgfQorCitpbnQgZjIoaW50IGEpIHsgcmV0dXJuIGE7IH0KK2ludCBmMihpbnQgYSkgW1sg cHJlOiBhIDwgMCBdXTsgLy8geyBkZy1lcnJvciAiY2Fubm90IGFkZCBjb250cmFjdHMgYWZ0ZXIg ZGVmaW5pdGlvbiIgfQorCitzdHJ1Y3QgQmFzZQoreworICB2aXJ0dWFsIGludCBmKGludCBhKSBb WyBwcmU6IGEgPiAwIF1dOworfTsKKworc3RydWN0IENoaWxkIDogQmFzZQoreworICBpbnQgZihp bnQgYSkgW1sgcHJlOiBhIDwgMCBdXTsgLy8geyBkZy1lcnJvciAibWlzbWF0Y2hlZCBjb250cmFj dCIgfQorfTsKKworLy8gdGhlIGluaXRpYWwgZGVjbCBvZiBhIGd1YXJkZWQgbWVtYmVyIG11c3Qg YXBwZWFyIGluc2lkZSB0aGUgY2xhc3MKK3N0cnVjdCBGMgoreworICBpbnQgZihpbnQgYSk7Cit9 OworCitpbnQgRjI6OmcoaW50IGEpIFtbIHByZTogYSA+IDAgXV07IC8vIHsgZGctZXJyb3IgIm5v IGRlY2xhcmF0aW9uIG1hdGNoZXMiIH0KKy8vIEZJWE1FIGlmIHdlIG1vdmUgRjIgZG93biB0aGVu IGEgZGlmZmVyZW50IGVycm9yIG1ha2VzIEYyIHVuZGVjbGFyZWQKKworc3RydWN0IEYwCit7Cisg IHZpcnR1YWwgaW50IGYoaW50IGEpOworfTsKKworaW50IEYwOjpmKGludCBhKTsgLy8geyBkZy1l cnJvciAiZGVjbGFyYXRpb24uKmlzIG5vdCBkZWZpbml0aW9uIiB9CisKK3N0cnVjdCBGMQorewor ICB2aXJ0dWFsIGludCBmKGludCBhKTsKK307CisKK2ludCBGMTo6ZihpbnQgYSkgW1sgcHJlOiBh ID4gMCBdXSAvLyB7IGRnLWVycm9yICJjYW5ub3QgYWRkIiB9Cit7CisgIHJldHVybiAtYTsKK30K KwpkaWZmIC0tZ2l0IGEvZ2NjL3Rlc3RzdWl0ZS9nKysuZGcvY29udHJhY3RzL2NvbnRyYWN0cy1y ZWRlY2w2LkMgYi9nY2MvdGVzdHN1aXRlL2crKy5kZy9jb250cmFjdHMvY29udHJhY3RzLXJlZGVj bDYuQwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uZTc5YTVhYTM4ZWYK LS0tIC9kZXYvbnVsbAorKysgYi9nY2MvdGVzdHN1aXRlL2crKy5kZy9jb250cmFjdHMvY29udHJh Y3RzLXJlZGVjbDYuQwpAQCAtMCwwICsxLDE5NSBAQAorLy8gYmFzaWMgdGVzdCB0byBlbnN1cmUg Y29udHJhY3RzIGdlbmVyYWxpemVkIHJlZGVjbCB3b3JrcworLy8geyBkZy1kbyBydW4gfQorLy8g eyBkZy1vcHRpb25zICItc3RkPWMrKzJhIC1mY29udHJhY3RzIC1mY29udHJhY3QtY29udGludWF0 aW9uLW1vZGU9b24iIH0KKyNpbmNsdWRlIDxjc3RkaW8+CisKK25hbWVzcGFjZSBkZWZpbmluZwor eworICBpbnQgeCA9IDEwOworICBkb3VibGUgeSA9IDEwLjU7CisKKyAgc3RydWN0IFMKKyAgewor ICAgIGJvb2wgejsKKyAgfTsKKworICBzdHJ1Y3QgVDEKKyAgeworICAgIHZvaWQgdmZ1bihpbnQg bSwgZG91YmxlIG4pIGNvbnN0OworICAgIGludCBmdW4oaW50IG0sIGRvdWJsZSBuKSB2b2xhdGls ZTsKKyAgICBkb3VibGUgZnVuMihpbnQgbSwgZG91YmxlIG4pIGNvbnN0IHZvbGF0aWxlOworICAg IHN0YXRpYyBTIGZ1bmVuZChpbnQgbSwgZG91YmxlIG4pOworICB9OworCisgIHZvaWQgVDE6OnZm dW4oaW50IG0sIGRvdWJsZSBuKSBjb25zdAorICAgIFtbIHByZTogeCA8IDAgXV0KKyAgICBbWyBw cmU6IG0gPCAwIF1dCisgIHsKKyAgICBwcmludGYoInZmdW46Ong6ICVkXG4iLCB4KTsKKyAgfQor CisgIGludCBUMTo6ZnVuKGludCBtLCBkb3VibGUgbikgdm9sYXRpbGUKKyAgICBbWyBwcmU6IHgg PCAwIF1dCisgIHsKKyAgICBwcmludGYoImZ1bjo6eDogJWRcbiIsIHgpOworICAgIHJldHVybiB4 OworICB9CisKKyAgZG91YmxlIFQxOjpmdW4yKGludCBtLCBkb3VibGUgbikgY29uc3Qgdm9sYXRp bGUKKyAgICBbWyBwcmU6IHggPCAwIF1dCisgICAgW1sgcHJlOiB5IDwgMCBdXQorICAgIFtbIHBy ZTogbSA8IDAgXV0KKyAgICBbWyBwcmU6IG4gPCAwIF1dCisgIHsKKyAgICBwcmludGYoImZ1bjI6 Ong6ICVkIGZ1bjI6Onk6ICVmXG4iLCB4LCB5KTsKKyAgICByZXR1cm4geTsKKyAgfQorfQorCitu YW1lc3BhY2Ugbm9uZGVmaW5pbmcKK3sKKyAgaW50IHggPSAxMDsKKyAgZG91YmxlIHkgPSAxMC41 OworCisgIHN0cnVjdCBTCisgIHsKKyAgICBib29sIHo7CisgIH07CisKKyAgc3RydWN0IFQxCisg IHsKKyAgICB2b2lkIHZmdW4oaW50IG0sIGRvdWJsZSBuKSBjb25zdDsKKyAgICBpbnQgZnVuKGlu dCBtLCBkb3VibGUgbikgdm9sYXRpbGU7CisgICAgZG91YmxlIGZ1bjIoaW50IG0sIGRvdWJsZSBu KSBjb25zdCB2b2xhdGlsZTsKKyAgICBzdGF0aWMgUyBmdW5lbmQoaW50IG0sIGRvdWJsZSBuKTsK KyAgfTsKKworICB2b2lkIFQxOjp2ZnVuKGludCBtLCBkb3VibGUgbikgY29uc3QKKyAgICBbWyBw cmU6IHggPCAwIF1dCisgICAgW1sgcHJlOiBtIDwgMCBdXTsKKyAgaW50IFQxOjpmdW4oaW50IG0s IGRvdWJsZSBuKSB2b2xhdGlsZQorICAgIFtbIHByZTogeCA8IDAgXV07CisgIGRvdWJsZSBUMTo6 ZnVuMihpbnQgbSwgZG91YmxlIG4pIGNvbnN0IHZvbGF0aWxlCisgICAgW1sgcHJlOiB4IDwgMCBd XQorICAgIFtbIHByZTogeSA8IDAgXV0KKyAgICBbWyBwcmU6IG0gPCAwIF1dCisgICAgW1sgcHJl OiBuIDwgMCBdXTsKKworICB2b2lkIFQxOjp2ZnVuKGludCBtLCBkb3VibGUgbikgY29uc3QKKyAg eworICAgIHByaW50ZigidmZ1bjo6eDogJWRcbiIsIHgpOworICB9CisKKyAgaW50IFQxOjpmdW4o aW50IG0sIGRvdWJsZSBuKSB2b2xhdGlsZQorICB7CisgICAgcHJpbnRmKCJmdW46Ong6ICVkXG4i LCB4KTsKKyAgICByZXR1cm4geDsKKyAgfQorCisgIGRvdWJsZSBUMTo6ZnVuMihpbnQgbSwgZG91 YmxlIG4pIGNvbnN0IHZvbGF0aWxlCisgIHsKKyAgICBwcmludGYoImZ1bjI6Ong6ICVkIGZ1bjI6 Onk6ICVmXG4iLCB4LCB5KTsKKyAgICByZXR1cm4geTsKKyAgfQorfQorCitpbnQgbWFpbihpbnQs IGNoYXIqKikgeworICAvLyBkZWZpbmluZyByZWRlY2wKKyAgeworICAgIGludCB4ID0gMTE7Cisg ICAgZG91YmxlIHkgPSAxMS41OworCisgICAgZGVmaW5pbmc6OlQxIHQxOworICAgIHQxLnZmdW4o eCwgeSk7CisKKyAgICBpbnQgZiA9IDEzOworICAgIGYgPSB0MS5mdW4oeCwgeSk7CisgICAgcHJp bnRmKCJtYWluOjpmOiAlZFxuIiwgZik7CisgICAgZG91YmxlIGQgPSAxMy4zNzsKKyAgICBkID0g dDEuZnVuMih4LCB5KTsKKyAgICBwcmludGYoIm1haW46OmQ6ICVmXG4iLCBkKTsKKyAgICBkZWZp bmluZzo6UyBzID0gZGVmaW5pbmc6OlQxOjpmdW5lbmQoeCwgeSk7CisgICAgcHJpbnRmKCJtYWlu OjpzLno6ICVkXG4iLCBzLnogPyAxIDogMCk7CisgIH0KKworICAvLyBub25kZWZpbmluZyByZWRl Y2wKKyAgeworICAgIGludCB4ID0gMTI7CisgICAgZG91YmxlIHkgPSAxMi41OworCisgICAgbm9u ZGVmaW5pbmc6OlQxIHQxOworICAgIHQxLnZmdW4oeCwgeSk7CisKKyAgICBpbnQgZiA9IDEzOwor ICAgIGYgPSB0MS5mdW4oeCwgeSk7CisgICAgcHJpbnRmKCJtYWluOjpmOiAlZFxuIiwgZik7Cisg ICAgZG91YmxlIGQgPSAxMy4zNzsKKyAgICBkID0gdDEuZnVuMih4LCB5KTsKKyAgICBwcmludGYo Im1haW46OmQ6ICVmXG4iLCBkKTsKKyAgICBub25kZWZpbmluZzo6UyBzID0gbm9uZGVmaW5pbmc6 OlQxOjpmdW5lbmQoeCwgeSk7CisgICAgcHJpbnRmKCJtYWluOjpzLno6ICVkXG4iLCBzLnogPyAx IDogMCk7CisgIH0KKyAgcmV0dXJuIDA7Cit9CisKK25hbWVzcGFjZSBkZWZpbmluZworeworICBT IFQxOjpmdW5lbmQoaW50IG0sIGRvdWJsZSBuKQorICAgIFtbIHByZTogeCA8IDAgXV0KKyAgICBb WyBwcmU6IG0gPCAwIF1dCisgIHsKKyAgICBwcmludGYoImZ1bmVuZDo6eDogJWRcbiIsIHgpOwor ICAgIFMgczsKKyAgICBzLnogPSB0cnVlOworICAgIHJldHVybiBzOworICB9Cit9CisKK25hbWVz cGFjZSBub25kZWZpbmluZworeworICBTIFQxOjpmdW5lbmQoaW50IG0sIGRvdWJsZSBuKQorICAg IFtbIHByZTogeCA8IDAgXV0KKyAgICBbWyBwcmU6IG0gPCAwIF1dOworCisgIFMgVDE6OmZ1bmVu ZChpbnQgbSwgZG91YmxlIG4pCisgIHsKKyAgICBwcmludGYoImZ1bmVuZDo6eDogJWRcbiIsIHgp OworICAgIFMgczsKKyAgICBzLnogPSB0cnVlOworICAgIHJldHVybiBzOworICB9Cit9CisKKy8v IHsgZGctb3V0cHV0ICJkZWZhdWx0IHN0ZDo6aGFuZGxlX2NvbnRyYWN0X3Zpb2xhdGlvbiBjYWxs ZWQ6IC4qLkMgMjUgZGVmaW5pbmc6OlQxOjp2ZnVuIC4qKFxufFxyXG58XHIpKiIgfQorLy8geyBk Zy1vdXRwdXQgImRlZmF1bHQgc3RkOjpoYW5kbGVfY29udHJhY3RfdmlvbGF0aW9uIGNhbGxlZDog LiouQyAyNiBkZWZpbmluZzo6VDE6OnZmdW4gLiooXG58XHJcbnxccikqIiB9CisvLyB7IGRnLW91 dHB1dCAidmZ1bjo6eDogMTAoXG58XHJcbnxccikqIiB9CisvLyB7IGRnLW91dHB1dCAiZGVmYXVs dCBzdGQ6OmhhbmRsZV9jb250cmFjdF92aW9sYXRpb24gY2FsbGVkOiAuKi5DIDMyIGRlZmluaW5n OjpUMTo6ZnVuIC4qKFxufFxyXG58XHIpKiIgfQorLy8geyBkZy1vdXRwdXQgImZ1bjo6eDogMTAo XG58XHJcbnxccikqIiB9CisvLyB7IGRnLW91dHB1dCAibWFpbjo6ZjogMTAoXG58XHJcbnxccikq IiB9CisvLyB7IGRnLW91dHB1dCAiZGVmYXVsdCBzdGQ6OmhhbmRsZV9jb250cmFjdF92aW9sYXRp b24gY2FsbGVkOiAuKi5DIDM5IGRlZmluaW5nOjpUMTo6ZnVuMiAuKihcbnxcclxufFxyKSoiIH0K Ky8vIHsgZGctb3V0cHV0ICJkZWZhdWx0IHN0ZDo6aGFuZGxlX2NvbnRyYWN0X3Zpb2xhdGlvbiBj YWxsZWQ6IC4qLkMgNDAgZGVmaW5pbmc6OlQxOjpmdW4yIC4qKFxufFxyXG58XHIpKiIgfQorLy8g eyBkZy1vdXRwdXQgImRlZmF1bHQgc3RkOjpoYW5kbGVfY29udHJhY3RfdmlvbGF0aW9uIGNhbGxl ZDogLiouQyA0MSBkZWZpbmluZzo6VDE6OmZ1bjIgLiooXG58XHJcbnxccikqIiB9CisvLyB7IGRn LW91dHB1dCAiZGVmYXVsdCBzdGQ6OmhhbmRsZV9jb250cmFjdF92aW9sYXRpb24gY2FsbGVkOiAu Ki5DIDQyIGRlZmluaW5nOjpUMTo6ZnVuMiAuKihcbnxcclxufFxyKSoiIH0KKy8vIHsgZGctb3V0 cHV0ICJmdW4yOjp4OiAxMCBmdW4yOjp5OiAxMC41MDAwMDAoXG58XHJcbnxccikqIiB9CisvLyB7 IGRnLW91dHB1dCAibWFpbjo6ZDogMTAuNTAwMDAwKFxufFxyXG58XHIpKiIgfQorLy8geyBkZy1v dXRwdXQgImRlZmF1bHQgc3RkOjpoYW5kbGVfY29udHJhY3RfdmlvbGF0aW9uIGNhbGxlZDogLiou QyAxMzggZGVmaW5pbmc6OlQxOjpmdW5lbmQgLiooXG58XHJcbnxccikqIiB9CisvLyB7IGRnLW91 dHB1dCAiZGVmYXVsdCBzdGQ6OmhhbmRsZV9jb250cmFjdF92aW9sYXRpb24gY2FsbGVkOiAuKi5D IDEzOSBkZWZpbmluZzo6VDE6OmZ1bmVuZCAuKihcbnxcclxufFxyKSoiIH0KKy8vIHsgZGctb3V0 cHV0ICJmdW5lbmQ6Ong6IDEwKFxufFxyXG58XHIpKiIgfQorLy8geyBkZy1vdXRwdXQgIm1haW46 OnMuejogMShcbnxcclxufFxyKSoiIH0KKy8vIHsgZGctb3V0cHV0ICJkZWZhdWx0IHN0ZDo6aGFu ZGxlX2NvbnRyYWN0X3Zpb2xhdGlvbiBjYWxsZWQ6IC4qLkMgNjggbm9uZGVmaW5pbmc6OlQxOjp2 ZnVuIC4qKFxufFxyXG58XHIpKiIgfQorLy8geyBkZy1vdXRwdXQgImRlZmF1bHQgc3RkOjpoYW5k bGVfY29udHJhY3RfdmlvbGF0aW9uIGNhbGxlZDogLiouQyA2OSBub25kZWZpbmluZzo6VDE6OnZm dW4gLiooXG58XHJcbnxccikqIiB9CisvLyB7IGRnLW91dHB1dCAidmZ1bjo6eDogMTAoXG58XHJc bnxccikqIiB9CisvLyB7IGRnLW91dHB1dCAiZGVmYXVsdCBzdGQ6OmhhbmRsZV9jb250cmFjdF92 aW9sYXRpb24gY2FsbGVkOiAuKi5DIDcxIG5vbmRlZmluaW5nOjpUMTo6ZnVuIC4qKFxufFxyXG58 XHIpKiIgfQorLy8geyBkZy1vdXRwdXQgImZ1bjo6eDogMTAoXG58XHJcbnxccikqIiB9CisvLyB7 IGRnLW91dHB1dCAibWFpbjo6ZjogMTAoXG58XHJcbnxccikqIiB9CisvLyB7IGRnLW91dHB1dCAi ZGVmYXVsdCBzdGQ6OmhhbmRsZV9jb250cmFjdF92aW9sYXRpb24gY2FsbGVkOiAuKi5DIDczIG5v bmRlZmluaW5nOjpUMTo6ZnVuMiAuKihcbnxcclxufFxyKSoiIH0KKy8vIHsgZGctb3V0cHV0ICJk ZWZhdWx0IHN0ZDo6aGFuZGxlX2NvbnRyYWN0X3Zpb2xhdGlvbiBjYWxsZWQ6IC4qLkMgNzQgbm9u ZGVmaW5pbmc6OlQxOjpmdW4yIC4qKFxufFxyXG58XHIpKiIgfQorLy8geyBkZy1vdXRwdXQgImRl ZmF1bHQgc3RkOjpoYW5kbGVfY29udHJhY3RfdmlvbGF0aW9uIGNhbGxlZDogLiouQyA3NSBub25k ZWZpbmluZzo6VDE6OmZ1bjIgLiooXG58XHJcbnxccikqIiB9CisvLyB7IGRnLW91dHB1dCAiZGVm YXVsdCBzdGQ6OmhhbmRsZV9jb250cmFjdF92aW9sYXRpb24gY2FsbGVkOiAuKi5DIDc2IG5vbmRl ZmluaW5nOjpUMTo6ZnVuMiAuKihcbnxcclxufFxyKSoiIH0KKy8vIHsgZGctb3V0cHV0ICJmdW4y Ojp4OiAxMCBmdW4yOjp5OiAxMC41MDAwMDAoXG58XHJcbnxccikqIiB9CisvLyB7IGRnLW91dHB1 dCAibWFpbjo6ZDogMTAuNTAwMDAwKFxufFxyXG58XHIpKiIgfQorLy8geyBkZy1vdXRwdXQgImRl ZmF1bHQgc3RkOjpoYW5kbGVfY29udHJhY3RfdmlvbGF0aW9uIGNhbGxlZDogLiouQyAxNTEgbm9u ZGVmaW5pbmc6OlQxOjpmdW5lbmQgLiooXG58XHJcbnxccikqIiB9CisvLyB7IGRnLW91dHB1dCAi ZGVmYXVsdCBzdGQ6OmhhbmRsZV9jb250cmFjdF92aW9sYXRpb24gY2FsbGVkOiAuKi5DIDE1MiBu b25kZWZpbmluZzo6VDE6OmZ1bmVuZCAuKihcbnxcclxufFxyKSoiIH0KKy8vIHsgZGctb3V0cHV0 ICJmdW5lbmQ6Ong6IDEwKFxufFxyXG58XHIpKiIgfQorLy8geyBkZy1vdXRwdXQgIm1haW46OnMu ejogMShcbnxcclxufFxyKSoiIH0KKwpkaWZmIC0tZ2l0IGEvZ2NjL3Rlc3RzdWl0ZS9nKysuZGcv Y29udHJhY3RzL2NvbnRyYWN0cy1yZWRlY2w3LkMgYi9nY2MvdGVzdHN1aXRlL2crKy5kZy9jb250 cmFjdHMvY29udHJhY3RzLXJlZGVjbDcuQwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw MDAwMDAwMC4uZTNhNTdlZWE2MzIKLS0tIC9kZXYvbnVsbAorKysgYi9nY2MvdGVzdHN1aXRlL2cr Ky5kZy9jb250cmFjdHMvY29udHJhY3RzLXJlZGVjbDcuQwpAQCAtMCwwICsxLDk1IEBACisvLyB0 ZXN0IHRoYXQgY29udHJhY3RzIGNhbiBiZSBhZGRlZCBkdXJpbmcgKGRlZmluaW5nKSBmcmllbmQg ZGVjbGFyYXRpb25zCisvLyB7IGRnLWRvIHJ1biB9CisvLyB7IGRnLW9wdGlvbnMgIi1zdGQ9Yysr MmEgLWZjb250cmFjdHMgLWZjb250cmFjdC1jb250aW51YXRpb24tbW9kZT1vbiIgfQorI2luY2x1 ZGUgPGNzdGRpbz4KK3N0cnVjdCBUOworCitzdHJ1Y3QgUworeworICBpbnQgbm93KGludCBhLCBU ICp0KSBbWyBwcmU6IGEgPiAwIF1dIFtbIHByZTogeCA8IDAgXV07CisKKworICBpbnQgeHstMX07 Cit9OworCitpbnQgbm93KGludCBhLCBUICp0KSBbWyBwcmU6IGEgPiAwIF1dOworaW50IGxhdGVy KGludCBhLCBUICp0KTsKK2ludCBib3RoKGludCBhLCBUICp0KSBbWyBwcmU6IGEgPiAwIF1dOwor CitzdHJ1Y3QgVAoreworICBmcmllbmQgaW50IG5vdyhpbnQgYSwgVCAqdCk7CisgIGZyaWVuZCBp bnQgbGF0ZXIoaW50IGEsIFQgKnQpIFtbIHByZTogYSA+IDAgXV0gW1sgcHJlOiB0LT5wcmkgPiAw IF1dCisgIHsKKyAgICBwcmludGYoImxhdGVyOiBhOiAlZCwgdC0+cHJpOiAlZFxuIiwgYSwgdC0+ cHJpKTsKKyAgICByZXR1cm4gLWEgKiB0LT5wcmk7CisgIH0KKyAgZnJpZW5kIGludCBib3RoKGlu dCBhLCBUICp0KSBbWyBwcmU6IGEgPiAwIF1dCisgIHsKKyAgICBwcmludGYoImJvdGg6IGE6ICVk LCB0LT5wcmk6ICVkXG4iLCBhLCB0LT5wcmkpOworICAgIHJldHVybiAtYSAqIHQtPnByaTsKKyAg fQorCisKKyAgZnJpZW5kIGludCBTOjpub3coaW50IGEsIFQgKnQpOworCisgIGZyaWVuZCBpbnQg aGlkZGVuKGludCBhLCBUICp0KSBbWyBwcmU6IGEgPiAwIF1dIFtbIHByZTogdC0+cHJpID4gMCBd XQorICB7CisgICAgcHJpbnRmKCJoaWRkZW46IGE6ICVkLCB0LT5wcmk6ICVkXG4iLCBhLCB0LT5w cmkpOworICAgIHJldHVybiAtYSAqIHQtPnByaTsKKyAgfQorICBmcmllbmQgaW50IGhpZGRlbjIo aW50IGEsIFQgKnQpIFtbIHByZTogYSA+IDAgXV0gW1sgcHJlOiB0LT5wcmkgPiAwIF1dCisgIHsK KyAgICBwcmludGYoImhpZGRlbjI6IGE6ICVkLCB0LT5wcmk6ICVkXG4iLCBhLCB0LT5wcmkpOwor ICAgIHJldHVybiAtYSAqIHQtPnByaTsKKyAgfQorCisgIGludCB4ezF9OworICBwcml2YXRlOgor ICAgIGludCBwcml7LTEwfTsKK307CisKK2ludCBoaWRkZW4yKGludCBhLCBUICp0KSBbWyBwcmU6 IGEgPiAwIF1dIFtbIHByZTogdC0+cHJpID4gMCBdXTsKKworaW50IFM6Om5vdyhpbnQgYSwgVCAq dCkKK3sKKyAgcHJpbnRmKCJTOjpub3c6IGE6ICVkLCB0LT5wcmk6ICVkXG4iLCBhLCB0LT5wcmkp OworICByZXR1cm4gLWEgKiB0LT5wcmk7Cit9CisKK2ludCBub3coaW50IGEsIFQgKnQpCit7Cisg IHByaW50Zigibm93OiBhOiAlZCwgdC0+cHJpOiAlZFxuIiwgYSwgdC0+cHJpKTsKKyAgcmV0dXJu IC1hICogdC0+cHJpOworfQorCitpbnQgbWFpbihpbnQsIGNoYXIqKikKK3sKKyAgVCB0OworICBT IHM7CisgIHMubm93KC0xMCwgJnQpOworCisgIG5vdygtMjAsICZ0KTsKKyAgbGF0ZXIoLTIxLCAm dCk7CisgIGJvdGgoLTIyLCAmdCk7CisgIGhpZGRlbigtMjMsICZ0KTsKKyAgaGlkZGVuMigtMjQs ICZ0KTsKKyAgcmV0dXJuIDA7Cit9CisKKy8vIHsgZGctb3V0cHV0ICJkZWZhdWx0IHN0ZDo6aGFu ZGxlX2NvbnRyYWN0X3Zpb2xhdGlvbiBjYWxsZWQ6IC4qLkMgOSBTOjpub3cgLiooXG58XHJcbnxc cikqIiB9CisvLyB7IGRnLW91dHB1dCAiUzo6bm93OiBhOiAtMTAsIHQtPnByaTogLTEwKFxufFxy XG58XHIpKiIgfQorLy8geyBkZy1vdXRwdXQgImRlZmF1bHQgc3RkOjpoYW5kbGVfY29udHJhY3Rf dmlvbGF0aW9uIGNhbGxlZDogLiouQyAxNSBub3cgLiooXG58XHJcbnxccikqIiB9CisvLyB7IGRn LW91dHB1dCAibm93OiBhOiAtMjAsIHQtPnByaTogLTEwKFxufFxyXG58XHIpKiIgfQorLy8geyBk Zy1vdXRwdXQgImRlZmF1bHQgc3RkOjpoYW5kbGVfY29udHJhY3RfdmlvbGF0aW9uIGNhbGxlZDog LiouQyAyMiBsYXRlciAuKihcbnxcclxufFxyKSoiIH0KKy8vIHsgZGctb3V0cHV0ICJkZWZhdWx0 IHN0ZDo6aGFuZGxlX2NvbnRyYWN0X3Zpb2xhdGlvbiBjYWxsZWQ6IC4qLkMgMjIgbGF0ZXIgLioo XG58XHJcbnxccikqIiB9CisvLyB7IGRnLW91dHB1dCAibGF0ZXI6IGE6IC0yMSwgdC0+cHJpOiAt MTAoXG58XHJcbnxccikqIiB9CisvLyB7IGRnLW91dHB1dCAiZGVmYXVsdCBzdGQ6OmhhbmRsZV9j b250cmFjdF92aW9sYXRpb24gY2FsbGVkOiAuKi5DIDI3IGJvdGggLiooXG58XHJcbnxccikqIiB9 CisvLyB7IGRnLW91dHB1dCAiYm90aDogYTogLTIyLCB0LT5wcmk6IC0xMChcbnxcclxufFxyKSoi IH0KKy8vIHsgZGctb3V0cHV0ICJkZWZhdWx0IHN0ZDo6aGFuZGxlX2NvbnRyYWN0X3Zpb2xhdGlv biBjYWxsZWQ6IC4qLkMgMzYgaGlkZGVuIC4qKFxufFxyXG58XHIpKiIgfQorLy8geyBkZy1vdXRw dXQgImRlZmF1bHQgc3RkOjpoYW5kbGVfY29udHJhY3RfdmlvbGF0aW9uIGNhbGxlZDogLiouQyAz NiBoaWRkZW4gLiooXG58XHJcbnxccikqIiB9CisvLyB7IGRnLW91dHB1dCAiaGlkZGVuOiBhOiAt MjMsIHQtPnByaTogLTEwKFxufFxyXG58XHIpKiIgfQorLy8geyBkZy1vdXRwdXQgImRlZmF1bHQg c3RkOjpoYW5kbGVfY29udHJhY3RfdmlvbGF0aW9uIGNhbGxlZDogLiouQyA0MSBoaWRkZW4yIC4q KFxufFxyXG58XHIpKiIgfQorLy8geyBkZy1vdXRwdXQgImRlZmF1bHQgc3RkOjpoYW5kbGVfY29u dHJhY3RfdmlvbGF0aW9uIGNhbGxlZDogLiouQyA0MSBoaWRkZW4yIC4qKFxufFxyXG58XHIpKiIg fQorLy8geyBkZy1vdXRwdXQgImhpZGRlbjI6IGE6IC0yNCwgdC0+cHJpOiAtMTAoXG58XHJcbnxc cikqIiB9CisKZGlmZiAtLWdpdCBhL2djYy90ZXN0c3VpdGUvZysrLmRnL2NvbnRyYWN0cy9jb250 cmFjdHMtcmVkZWNsOC5DIGIvZ2NjL3Rlc3RzdWl0ZS9nKysuZGcvY29udHJhY3RzL2NvbnRyYWN0 cy1yZWRlY2w4LkMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLjkzM2Fk Y2U3OWY5Ci0tLSAvZGV2L251bGwKKysrIGIvZ2NjL3Rlc3RzdWl0ZS9nKysuZGcvY29udHJhY3Rz L2NvbnRyYWN0cy1yZWRlY2w4LkMKQEAgLTAsMCArMSw2NCBAQAorLy8gdGVzdCB0aGF0IGNvbnRy YWN0cyBhcmUgbWF0Y2hlZCBvbiBmcmllbmQgZGVjbHMgd2hlbiB0aGUgdHlwZSBpcyBjb21wbGV0 ZQorLy8geyBkZy1kbyBjb21waWxlIH0KKy8vIHsgZGctb3B0aW9ucyAiLXN0ZD1jKysyYSAtZmNv bnRyYWN0cyIgfQorCitzdHJ1Y3QgVDsKKworaW50IGJvdGgoaW50IHgsIFQgKnQpIFtbIHByZTog eCA+IDAgXV0geyByZXR1cm4gMDsgfQoraW50IGJvdGgyKGludCB4LCBUICp0KSBbWyBwcmU6IHgg PiAwIF1dOworCit0ZW1wbGF0ZTx0eXBlbmFtZSBaPgoraW50IGZuKGludCB4LCBaICp6KSBbWyBw cmU6IHggPiAwIF1dOworCit0ZW1wbGF0ZTx0eXBlbmFtZSBaPgoraW50IGZuMihpbnQgeCwgWiAq eik7CisKK3RlbXBsYXRlPHR5cGVuYW1lIFo+CitpbnQgZm4zKGludCB4LCBaICp6KSBbWyBwcmU6 IHggPiAwIF1dOworCit0ZW1wbGF0ZTw+CitpbnQgZm4zPFQ+KGludCB4LCBUICp6KSBbWyBwcmU6 IHggPiAxIF1dOworCitzdHJ1Y3QgVAoreworICBmcmllbmQgaW50IGJvdGgyKGludCB4LCBUICp0 KSBbWyBwcmU6IHggPiAxIF1dIC8vIHsgZGctZXJyb3IgIm1pc21hdGNoZWQiIH0KKyAgeworICAg IHJldHVybiAwOworICB9CisKKyAgZnJpZW5kIGludCBoaWRkZW4oaW50IHgsIFQgKnQpCisgICAg W1sgcHJlOiB4ID4gMSBdXSBbWyBwcmU6IHQtPnByaSA+IDAgXV0KKyAgeworICAgIHJldHVybiB4 OworICB9CisKKyAgLyogY2Fubm90IGRlZmluZSBmcmllbmQgc3BlYywgc28gd2UgbmV2ZXIgZ2V0 IHRvIG1hdGNoaW5nIGNvbnRyYWN0cworICBmcmllbmQgaW50IGZuPFQ+KGludCB4LCBUICp0KQor ICAgIFtbIHByZTogdC0+cHJpID4gMCBdXSB7IHJldHVybiAwOyB9IC8vIGVycm9yIGRlZmluaW5n IGV4cGxpY2l0IHNwZWMgZnJpZW5kCisgICAgKi8KKworICAvLyBiYWQsIGdlbmVyYWwgY29udHJh Y3RzIG11c3QgbWF0Y2ggZ2VuZXJhbAorICB0ZW1wbGF0ZTx0eXBlbmFtZSBaPgorICBmcmllbmQg aW50IGZuKGludCB4LCBaICp6KQorICAgIFtbIHByZTogei0+cHJpID4gMSBdXSB7IHJldHVybiAw OyB9IC8vIHsgZGctZXJyb3IgIm1pc21hdGNoZWQiIH0KKworICAvLyBmaW5lLCBjYW4gYWRkIGNv bnRyYWN0cworICB0ZW1wbGF0ZTx0eXBlbmFtZSBaPgorICBmcmllbmQgaW50IGZuMihpbnQgeCwg WiAqeikKKyAgICBbWyBwcmU6IHotPnByaSA+IDEgXV0geyByZXR1cm4gMDsgfSAvLyB7IGRnLWJv Z3VzICJtaXNtYXRjaGVkIiB9CisKKyAgLyogY2Fubm90IGRlY2xhcmUgd2l0aG91dCBkZWZpbml0 aW9uLCBzbyBkdXAgZnJpZW5kIGNhbid0IG9jY3VyOgorICBmcmllbmQgaW50IGR1cChpbnQgeCwg VCAqdCkKKyAgICBbWyBwcmU6IHQtPnByaSA+IDAgXV07IC8vIGVycm9yIG5vbi1kZWZpbmluZyBm cmllbmQgd2l0aCBjb250cmFjdHMKKyAgZnJpZW5kIGludCBkdXAoaW50IHgsIFQgKnQpCisgICAg W1sgcHJlOiB0LT5wcmkgPiAxIF1dOyAvLyBlcnJvciBub24tZGVmaW5pbmcgZnJpZW5kIHdpdGgg Y29udHJhY3RzCisgICAgKi8KKworICBpbnQgeHsxfTsKKyAgcHJpdmF0ZToKKyAgICBpbnQgcHJp ey0xMH07Cit9OworCitpbnQgaGlkZGVuKGludCB4LCBUICp0KQorICBbWyBwcmU6IHggPiAwIF1d IFtbIHByZTogdC0+cHJpID4gMSBdXTsgLy8geyBkZy1lcnJvciAibWlzbWF0Y2hlZCIgfQorCmRp ZmYgLS1naXQgYS9nY2MvdGVzdHN1aXRlL2crKy5kZy9jb250cmFjdHMvY29udHJhY3RzLXRtcGwt YXR0cjEuQyBiL2djYy90ZXN0c3VpdGUvZysrLmRnL2NvbnRyYWN0cy9jb250cmFjdHMtdG1wbC1h dHRyMS5DCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi5jOWU3YjljZWM4 YgotLS0gL2Rldi9udWxsCisrKyBiL2djYy90ZXN0c3VpdGUvZysrLmRnL2NvbnRyYWN0cy9jb250 cmFjdHMtdG1wbC1hdHRyMS5DCkBAIC0wLDAgKzEsMTkgQEAKKy8vIHsgZGctZG8gY29tcGlsZSB9 CisvLyB7IGRnLW9wdGlvbnMgIi1zdGQ9YysrMmEgLWZjb250cmFjdHMiIH0KKwordGVtcGxhdGU8 dHlwZW5hbWUgVD4KK1tbel1dCitbW25vZGlzY2FyZF1dCitUIGZ1bihUIG4pCisgIFtbIHByZTog biA+IDAgXV0KKyAgW1sgcG9zdCByOiByID4gMCBdXSAvLyB7IGRnLXdhcm5pbmcgIi56LiBhdHRy aWJ1dGUuKmlnbm9yZWQiIH0KK3sKKyAgcmV0dXJuIG47Cit9CisKK2ludCBtYWluKGludCwgY2hh cioqKSB7CisgIGZ1bigtNSk7IC8vIHsgZGctd2FybmluZyAiaWdub3JpbmcgcmV0dXJuIHZhbHVl IiB9CisgIGZ1bigtNS4zKTsgLy8geyBkZy13YXJuaW5nICJpZ25vcmluZyByZXR1cm4gdmFsdWUi IH0KKyAgcmV0dXJuIDA7Cit9CisKZGlmZiAtLWdpdCBhL2djYy90ZXN0c3VpdGUvZysrLmRnL2Nv bnRyYWN0cy9jb250cmFjdHMtdG1wbC1zcGVjMS5DIGIvZ2NjL3Rlc3RzdWl0ZS9nKysuZGcvY29u dHJhY3RzL2NvbnRyYWN0cy10bXBsLXNwZWMxLkMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg MDAwMDAwMDAwMDAuLjU3YmE3NjUzNTQzCi0tLSAvZGV2L251bGwKKysrIGIvZ2NjL3Rlc3RzdWl0 ZS9nKysuZGcvY29udHJhY3RzL2NvbnRyYWN0cy10bXBsLXNwZWMxLkMKQEAgLTAsMCArMSwxMjEg QEAKKy8vIGJhc2ljIHRlc3QgdG8gZW5zdXJlIHByZSBjb250cmFjdHMgd29yayBmb3IgZnJlZSB0 ZW1wbGF0ZSBzcGVjaWFsaXphdGlvbnMKKy8vIHsgZGctZG8gcnVuIH0KKy8vIHsgZGctb3B0aW9u cyAiLXN0ZD1jKysyYSAtZmNvbnRyYWN0cyAtZmNvbnRyYWN0LWNvbnRpbnVhdGlvbi1tb2RlPW9u IiB9CisjaW5jbHVkZSA8Y3N0ZGlvPgorCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPgoraW50IGJvZHko aW50IGEpCisgIFtbIHByZTogYSA+IDAgXV0KK3sKKyAgVCB0ID0gYSAqIDIuNTsKKyAgcmV0dXJu IHQ7Cit9CisKK3RlbXBsYXRlPD4KK2ludCBib2R5PGRvdWJsZT4oaW50IGEpCisgIFtbIHByZTog YSA+IDAgXV0KK3sKKyAgZG91YmxlIHQgPSBhICogMy4zOworICByZXR1cm4gdDsKK30KKwordGVt cGxhdGU8dHlwZW5hbWUgVD4KK2ludCBub25lKGludCBhKQorICBbWyBwcmU6IGEgPiAwIF1dCit7 CisgIHJldHVybiAtYTsKK30KKwordGVtcGxhdGU8PgoraW50IG5vbmU8ZG91YmxlPihpbnQgYSkK KyAgW1sgcHJlOiBhID4gMCBdXQoreworICByZXR1cm4gYSAtIDEwMDsKK30KKwordGVtcGxhdGU8 dHlwZW5hbWUgVD4KK2ludCBhcmcwKFQgdCkKKyAgW1sgcHJlOiB0ID4gMCBdXQoreworICByZXR1 cm4gLXQgLSAxMDsKK30KKwordGVtcGxhdGU8PgoraW50IGFyZzA8ZG91YmxlPihkb3VibGUgdCkK KyAgW1sgcHJlOiB0ID4gMCBdXQoreworICByZXR1cm4gLXQgKyAxMDsKK30KKwordGVtcGxhdGU8 dHlwZW5hbWUgVD4KK2ludCBhcmcxKGludCBhLCBUIHQpCisgIFtbIHByZTogYSA+IDAgXV0KKyAg W1sgcHJlOiB0ID4gMCBdXQoreworICByZXR1cm4gLXQgKiBhOworfQorCit0ZW1wbGF0ZTw+Citp bnQgYXJnMTxkb3VibGU+KGludCBhLCBkb3VibGUgdCkKKyAgW1sgcHJlOiBhID4gMCBdXQorICBb WyBwcmU6IHQgPiAwIF1dCit7CisgIHJldHVybiAtdCAqIGEgKyAxNzsKK30KKwordGVtcGxhdGU8 dHlwZW5hbWUgVD4KK1QgcmV0KGludCBhKQorICBbWyBwcmU6IGEgPiAwIF1dCit7CisgIHJldHVy biAtYTsKK30KKwordGVtcGxhdGU8PgorZG91YmxlIHJldDxkb3VibGU+KGludCBhKQorICBbWyBw cmU6IGEgPiAwIF1dCit7CisgIHJldHVybiAtYSAqIDMuMzsKK30KKworCitpbnQgbWFpbihpbnQs IGNoYXIqKikKK3sKKyAgcHJpbnRmKCIlZFxuIiwgYm9keTxpbnQ+KC0xKSk7CisgIHByaW50Zigi JWRcbiIsIGJvZHk8ZG91YmxlPigtMSkpOworICBwcmludGYoIiVkXG4iLCBub25lPGludD4oLTEp KTsKKyAgcHJpbnRmKCIlZFxuIiwgbm9uZTxkb3VibGU+KC0xKSk7CisgIHByaW50ZigiJWRcbiIs IGFyZzAoLTEpKTsKKyAgcHJpbnRmKCIlZFxuIiwgYXJnMCgtMS4wKSk7CisgIHByaW50ZigiJWRc biIsIGFyZzEoLTMsIC0xKSk7CisgIHByaW50ZigiJWRcbiIsIGFyZzEoLTMsIC0xLjApKTsKKyAg cHJpbnRmKCIlZFxuIiwgKGludClyZXQ8aW50PigtMSkpOworICBwcmludGYoIiVkXG4iLCAoaW50 KXJldDxkb3VibGU+KC0xKSk7CisgIHByaW50ZigiJWZcbiIsIHJldDxkb3VibGU+KC0xKSk7Cisg IHJldHVybiAwOworfQorCisvLyB7IGRnLW91dHB1dCAiZGVmYXVsdCBzdGQ6OmhhbmRsZV9jb250 cmFjdF92aW9sYXRpb24gY2FsbGVkOiAuKi5DIDggYm9keTxpbnQ+IC4qKFxufFxyXG58XHIpKiIg fQorLy8geyBkZy1vdXRwdXQgIi0yKFxufFxyXG58XHIpKiIgfQorLy8geyBkZy1vdXRwdXQgImRl ZmF1bHQgc3RkOjpoYW5kbGVfY29udHJhY3RfdmlvbGF0aW9uIGNhbGxlZDogLiouQyAxNiBib2R5 PGRvdWJsZT4gLiooXG58XHJcbnxccikqIiB9CisvLyB7IGRnLW91dHB1dCAiLTMoXG58XHJcbnxc cikqIiB9CisvLyB7IGRnLW91dHB1dCAiZGVmYXVsdCBzdGQ6OmhhbmRsZV9jb250cmFjdF92aW9s YXRpb24gY2FsbGVkOiAuKi5DIDI0IG5vbmU8aW50PiAuKihcbnxcclxufFxyKSoiIH0KKy8vIHsg ZGctb3V0cHV0ICIxKFxufFxyXG58XHIpKiIgfQorLy8geyBkZy1vdXRwdXQgImRlZmF1bHQgc3Rk OjpoYW5kbGVfY29udHJhY3RfdmlvbGF0aW9uIGNhbGxlZDogLiouQyAzMSBub25lPGRvdWJsZT4g LiooXG58XHJcbnxccikqIiB9CisvLyB7IGRnLW91dHB1dCAiLTEwMShcbnxcclxufFxyKSoiIH0K Ky8vIHsgZGctb3V0cHV0ICJkZWZhdWx0IHN0ZDo6aGFuZGxlX2NvbnRyYWN0X3Zpb2xhdGlvbiBj YWxsZWQ6IC4qLkMgMzggYXJnMDxpbnQ+IC4qKFxufFxyXG58XHIpKiIgfQorLy8geyBkZy1vdXRw dXQgIi05KFxufFxyXG58XHIpKiIgfQorLy8geyBkZy1vdXRwdXQgImRlZmF1bHQgc3RkOjpoYW5k bGVfY29udHJhY3RfdmlvbGF0aW9uIGNhbGxlZDogLiouQyA0NSBhcmcwPGRvdWJsZT4gLiooXG58 XHJcbnxccikqIiB9CisvLyB7IGRnLW91dHB1dCAiMTEoXG58XHJcbnxccikqIiB9CisvLyB7IGRn LW91dHB1dCAiZGVmYXVsdCBzdGQ6OmhhbmRsZV9jb250cmFjdF92aW9sYXRpb24gY2FsbGVkOiAu Ki5DIDUyIGFyZzE8aW50PiAuKihcbnxcclxufFxyKSoiIH0KKy8vIHsgZGctb3V0cHV0ICJkZWZh dWx0IHN0ZDo6aGFuZGxlX2NvbnRyYWN0X3Zpb2xhdGlvbiBjYWxsZWQ6IC4qLkMgNTMgYXJnMTxp bnQ+IC4qKFxufFxyXG58XHIpKiIgfQorLy8geyBkZy1vdXRwdXQgIi0zKFxufFxyXG58XHIpKiIg fQorLy8geyBkZy1vdXRwdXQgImRlZmF1bHQgc3RkOjpoYW5kbGVfY29udHJhY3RfdmlvbGF0aW9u IGNhbGxlZDogLiouQyA2MCBhcmcxPGRvdWJsZT4gLiooXG58XHJcbnxccikqIiB9CisvLyB7IGRn LW91dHB1dCAiZGVmYXVsdCBzdGQ6OmhhbmRsZV9jb250cmFjdF92aW9sYXRpb24gY2FsbGVkOiAu Ki5DIDYxIGFyZzE8ZG91YmxlPiAuKihcbnxcclxufFxyKSoiIH0KKy8vIHsgZGctb3V0cHV0ICIx NChcbnxcclxufFxyKSoiIH0KKy8vIHsgZGctb3V0cHV0ICJkZWZhdWx0IHN0ZDo6aGFuZGxlX2Nv bnRyYWN0X3Zpb2xhdGlvbiBjYWxsZWQ6IC4qLkMgNjggcmV0PGludD4gLiooXG58XHJcbnxccikq IiB9CisvLyB7IGRnLW91dHB1dCAiMShcbnxcclxufFxyKSoiIH0KKy8vIHsgZGctb3V0cHV0ICJk ZWZhdWx0IHN0ZDo6aGFuZGxlX2NvbnRyYWN0X3Zpb2xhdGlvbiBjYWxsZWQ6IC4qLkMgNzUgcmV0 PGRvdWJsZT4gLiooXG58XHJcbnxccikqIiB9CisvLyB7IGRnLW91dHB1dCAiMyhcbnxcclxufFxy KSoiIH0KKy8vIHsgZGctb3V0cHV0ICJkZWZhdWx0IHN0ZDo6aGFuZGxlX2NvbnRyYWN0X3Zpb2xh dGlvbiBjYWxsZWQ6IC4qLkMgNzUgcmV0PGRvdWJsZT4gLiooXG58XHJcbnxccikqIiB9CisvLyB7 IGRnLW91dHB1dCAiMy4zMDAwMDAoXG58XHJcbnxccikqIiB9CisKZGlmZiAtLWdpdCBhL2djYy90 ZXN0c3VpdGUvZysrLmRnL2NvbnRyYWN0cy9jb250cmFjdHMtdG1wbC1zcGVjMi5DIGIvZ2NjL3Rl c3RzdWl0ZS9nKysuZGcvY29udHJhY3RzL2NvbnRyYWN0cy10bXBsLXNwZWMyLkMKbmV3IGZpbGUg bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLjI1OTgyZGZjODI2Ci0tLSAvZGV2L251bGwK KysrIGIvZ2NjL3Rlc3RzdWl0ZS9nKysuZGcvY29udHJhY3RzL2NvbnRyYWN0cy10bXBsLXNwZWMy LkMKQEAgLTAsMCArMSwzOTUgQEAKKy8vIGJhc2ljIHRlc3QgdG8gZW5zdXJlIGNvbnRyYWN0cyB3 b3JrIGZvciBjbGFzcyBhbmQgbWVtYmVyIHNwZWNpYWxpemF0aW9ucworLy8geyBkZy1kbyBydW4g fQorLy8geyBkZy1vcHRpb25zICItc3RkPWMrKzJhIC1mY29udHJhY3RzIC1mY29udHJhY3QtY29u dGludWF0aW9uLW1vZGU9b24iIH0KKyNpbmNsdWRlIDxjc3RkaW8+CisKKy8vIHRlbXBsYXRlIHNw ZWNpYWxpemF0aW9ucyBjYW4gaGF2ZSBkaWZmZXJpbmcgY29udHJhY3RzCit0ZW1wbGF0ZTx0eXBl bmFtZSBUPgoraW50IGJvZHkoaW50IGEpCisgIFtbIHByZTogYSA+IDAgXV0KK3sKKyAgVCB0ID0g YSAqIDIuNTsKKyAgcmV0dXJuIHQ7Cit9CisKK3RlbXBsYXRlPD4KK2ludCBib2R5PGRvdWJsZT4o aW50IGEpCisgIFtbIHByZTogYSA+IDEgXV0KK3sKKyAgZG91YmxlIHQgPSBhICogMy4zOworICBy ZXR1cm4gdDsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgVD4KK2ludCBub25lKGludCBhKQorICBb WyBwcmU6IGEgPiAwIF1dCit7CisgIHJldHVybiAtYTsKK30KKwordGVtcGxhdGU8PgoraW50IG5v bmU8ZG91YmxlPihpbnQgYSkKKyAgW1sgcHJlOiBhID4gMSBdXQoreworICByZXR1cm4gYSAtIDEw MDsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgVD4KK2ludCBhcmcwKFQgdCkKKyAgW1sgcHJlOiB0 ID4gMCBdXQoreworICByZXR1cm4gLXQgLSAxMDsKK30KKwordGVtcGxhdGU8PgoraW50IGFyZzA8 ZG91YmxlPihkb3VibGUgdCkKKyAgW1sgcHJlOiB0ID4gMSBdXQoreworICByZXR1cm4gLXQgKyAx MDsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgVD4KK2ludCBhcmcxKGludCBhLCBUIHQpCisgIFtb IHByZTogYSA+IDAgXV0KKyAgW1sgcHJlOiB0ID4gMCBdXQoreworICByZXR1cm4gLXQgKiBhOwor fQorCit0ZW1wbGF0ZTw+CitpbnQgYXJnMTxkb3VibGU+KGludCBhLCBkb3VibGUgdCkKKyAgW1sg cHJlOiBhID4gMSBdXQorICBbWyBwcmU6IHQgPiAxIF1dCit7CisgIHJldHVybiAtdCAqIGEgKyAx NzsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgVD4KK1QgcmV0KGludCBhKQorICBbWyBwcmU6IGEg PiAwIF1dCit7CisgIHJldHVybiAtYTsKK30KKwordGVtcGxhdGU8PgorZG91YmxlIHJldDxkb3Vi bGU+KGludCBhKQorICBbWyBwcmU6IGEgPiAxIF1dCit7CisgIHJldHVybiAtYSAqIDMuMzsKK30K KworLy8gdGVtcGxhdGUgc3BlY2lhbGl6YXRpb25zIGNhbiBoYXZlIG5vIGNvbnRyYWN0cwordGVt cGxhdGU8dHlwZW5hbWUgVD4KK2ludCBnMShUIHQpIFtbIHByZTogdCA+IDAgXV0KK3sKKyAgcmV0 dXJuIChpbnQpdDsKK30KKwordGVtcGxhdGU8PgoraW50IGcxPGRvdWJsZT4oZG91YmxlIHQpCit7 CisgIHJldHVybiAoaW50KXQ7Cit9CisKKy8vIHRlbXBsYXRlIHNwZWNpYWxpemF0aW9ucyBjYW4g aGF2ZSBubyBjb250cmFjdHMgaW4gdGhlIGZpcnN0IGRlY2wgYnV0IGFkZAorLy8gdGhlbSBsYXRl cgordGVtcGxhdGU8dHlwZW5hbWUgVD4KK2ludCBnMihUIHQpIFtbIHByZTogdCA+IDAgXV0KK3sK KyAgcmV0dXJuIChpbnQpdDsKK30KKwordGVtcGxhdGU8PgoraW50IGcyPGRvdWJsZT4oZG91Ymxl IHQpOworCit0ZW1wbGF0ZTw+CitpbnQgZzI8ZG91YmxlPihkb3VibGUgdCkKKyAgW1sgcHJlOiB0 IDwgMCBdXQoreworICByZXR1cm4gKGludCl0OworfQorCit0ZW1wbGF0ZTw+CitpbnQgZzI8Y2hh cj4oY2hhciB0KQorICBbWyBwcmU6IHQgPCAnYycgXV0KK3sKKyAgcmV0dXJuIChpbnQpdDsKK30K KworLy8gY29udHJhY3RzIGNhbiBiZSBkaWZmZXJlbnQgb24gdGhlIGdlbmVyYWwgdGVtcGxhdGUs IHBhcnRpYWwgYW5kIGZ1bGwgc3BlY3MKK3RlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFM+ CitzdHJ1Y3QgRzMKK3sKKyAgdm9pZCBmKFQgdCwgUyBzKQorICAgIFtbIHByZTogdCA+IDAgXV0K KyAgICBbWyBwcmU6IHMgPiAwIF1dCisgIHsKKyAgICBwcmludGYgKCJHMyBnZW5lcmFsIFQgU1xu Iik7CisgIH0KK307CisKK3RlbXBsYXRlPHR5cGVuYW1lIFM+CitzdHJ1Y3QgRzM8aW50LCBTPgor eworICB2b2lkIGYoaW50IHQsIFMgcyk7Cit9OworCit0ZW1wbGF0ZTx0eXBlbmFtZSBTPgordm9p ZCBHMzxpbnQsIFM+OjpmKGludCB0LCBTIHMpCisgIFtbIHByZTogdCA+IDEgXV0KKyAgW1sgcHJl OiBzID4gMSBdXQoreworICBwcmludGYgKCJHMyBwYXJ0aWFsIGludCBTXG4iKTsKK30KKwordGVt cGxhdGU8Pgordm9pZCBHMzxpbnQsIGRvdWJsZT46OmYoaW50IHQsIGRvdWJsZSBzKQorICBbWyBw cmU6IHQgPiAyIF1dCisgIFtbIHByZTogcyA+IDIgXV0KK3sKKyAgcHJpbnRmICgiRzMgZnVsbCBp bnQgZG91YmxlXG4iKTsKK30KKworc3RydWN0IEMKK3sKKyAgYm9vbCBvcGVyYXRvcj4oaW50IHJo cykgeyByZXR1cm4gZmFsc2U7IH0KK307CisKKy8vIGRlbGV0ZXMgY29udHJhY3RzCit0ZW1wbGF0 ZTw+Cit2b2lkIEczPGludCwgQz46OmYoaW50IHQsIEMgcyk7CisKK3RlbXBsYXRlPD4KK3ZvaWQg RzM8aW50LCBDPjo6ZihpbnQgdCwgQyBzKQoreworICBwcmludGYgKCJHMyBmdWxsIGludCBDXG4i KTsKK307CisKKy8vIHNwZWNpYWxpemVkIGN0b3JzCit0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBl bmFtZSBTPgorc3RydWN0IEc0Cit7CisgIEc0KFQgdCwgUyBzKQorICAgIFtbIHByZTogdCA+IDAg XV0KKyAgICBbWyBwcmU6IHMgPiAwIF1dCisgICAgW1sgcG9zdDogeCA+IDAgXV0KKyAgeworICAg IHByaW50ZiAoIkc0IGdlbmVyYWwgVCBTXG4iKTsKKyAgICByZXR1cm47CisgIH0KKyAgaW50IHh7 LTF9OworfTsKKwordGVtcGxhdGU8dHlwZW5hbWUgUz4KK3N0cnVjdCBHNDxjaGFyLCBTPgorewor ICBHNChjaGFyIHQsIFMgcykKKyAgICBbWyBwcmU6IHQgPiAnYycgXV0KKyAgICBbWyBwcmU6IHMg PiAzIF1dCisgICAgW1sgcG9zdDogeDIgPiAzIF1dCisgIHsKKyAgICBwcmludGYgKCJHNCBwYXJ0 aWFsIGNoYXIgU1xuIik7CisgICAgcmV0dXJuOworICB9CisgIGludCB4MnstMX07Cit9OworCit0 ZW1wbGF0ZTw+CitHNDxkb3VibGUsIGRvdWJsZT46Okc0KGRvdWJsZSwgZG91YmxlKQoreworICBw cmludGYgKCJHNCBmdWxsIGRvdWJsZSBkb3VibGVcbiIpOworICByZXR1cm47Cit9CisKK3RlbXBs YXRlPD4KK0c0PGRvdWJsZSwgY2hhcj46Okc0KGRvdWJsZSBhLCBjaGFyIGIpCisgIFtbIHByZTog YSA+IDAgXV0KKyAgW1sgcHJlOiBiID4gJ2InIF1dCisgIFtbIHBvc3Q6IHggPiAxIF1dCit7Cisg IHByaW50ZiAoIkc0IGZ1bGwgZG91YmxlIGNoYXJcbiIpOworICByZXR1cm47Cit9CisKKy8vIGNy b3Nzb3ZlciBvZiB0ZW1wbGF0ZSBjbGFzc2VzIGFuZCB0ZW1wbGF0ZSBtZW1iZXJzIG9rCit0ZW1w bGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBTPgorc3RydWN0IEc1Cit7CisgIHRlbXBsYXRlPHR5 cGVuYW1lIFA+CisgIHZvaWQgZihUIHQsIFMgcywgUCByKQorICAgIFtbIHByZTogdCA+IDAgXV0K KyAgICBbWyBwcmU6IHMgPiAwIF1dCisgICAgW1sgcHJlOiByID4gMCBdXQorICB7CisgICAgcHJp bnRmICgiRzUgZ2VuIFQgUywgZiBnZW4gUlxuIik7CisgIH0KK307CisKK3RlbXBsYXRlPHR5cGVu YW1lIFM+CitzdHJ1Y3QgRzU8Y2hhciwgUz4KK3sKKyAgdGVtcGxhdGU8dHlwZW5hbWUgUj4KKyAg dm9pZCBmKGNoYXIgeCwgUyB5LCBSIHopCisgICAgW1sgcHJlOiB4ID4gJ3onIF1dCisgICAgW1sg cHJlOiB5ID4gMSBdXQorICAgIFtbIHByZTogeiA+IDEgXV0KKyAgeworICAgIHByaW50ZiAoIkc1 IHBhcnRpYWwgY2hhciBTLCBmIGdlbiBSXG4iKTsKKyAgfQorfTsKKwordGVtcGxhdGU8PgordGVt cGxhdGU8dHlwZW5hbWUgUT4KK3ZvaWQgRzU8ZG91YmxlLCBkb3VibGU+OjpmKGRvdWJsZSBhLCBk b3VibGUgYiwgUSBjKQorICBbWyBwcmU6IGEgPiAyIF1dCisgIFtbIHByZTogYiA+IDIgXV0KKyAg W1sgcHJlOiBjID4gMiBdXQoreworICBwcmludGYgKCJHNSBmdWxsIGRvdWJsZSBkb3VibGUsIGYg Z2VuIFJcbiIpOworfQorCitpbnQgbWFpbihpbnQsIGNoYXIqKikKK3sKKyAgcHJpbnRmKCIlZFxu IiwgYm9keTxpbnQ+KC0xKSk7CisgIHByaW50ZigiJWRcbiIsIGJvZHk8ZG91YmxlPigtMSkpOwor ICBwcmludGYoIiVkXG4iLCBub25lPGludD4oLTEpKTsKKyAgcHJpbnRmKCIlZFxuIiwgbm9uZTxk b3VibGU+KC0xKSk7CisgIHByaW50ZigiJWRcbiIsIGFyZzAoLTEpKTsKKyAgcHJpbnRmKCIlZFxu IiwgYXJnMCgtMS4wKSk7CisgIHByaW50ZigiJWRcbiIsIGFyZzEoLTMsIC0xKSk7CisgIHByaW50 ZigiJWRcbiIsIGFyZzEoLTMsIC0xLjApKTsKKyAgcHJpbnRmKCIlZFxuIiwgKGludClyZXQ8aW50 PigtMSkpOworICBwcmludGYoIiVkXG4iLCAoaW50KXJldDxkb3VibGU+KC0xKSk7CisgIHByaW50 ZigiJWZcbiIsIHJldDxkb3VibGU+KC0xKSk7CisKKyAgcHJpbnRmKCIlZFxuIiwgZzEoLTEpKTsK KyAgcHJpbnRmKCIlZFxuIiwgZzEoLTEuMCkpOworCisgIHByaW50ZigiJWRcbiIsIGcyKC0xKSk7 CisgIHByaW50ZigiJWRcbiIsIGcyKDEuMCkpOworICBwcmludGYoIiVkXG4iLCBnMignZCcpKTsK KworICBHMzxkb3VibGUsIGRvdWJsZT4gZzNfZ2VuOworICBHMzxpbnQsIGludD4gZzNfcGFydGlh bDsKKyAgRzM8aW50LCBkb3VibGU+IGczX2Z1bGw7CisgIGczX2dlbi5mKC0xLjAsIC0xLjApOyAv LyBnZW5lcmFsCisgIGczX3BhcnRpYWwuZigtMiwgLTIpOyAvLyBwYXJ0aWFsIHNwZWMKKyAgZzNf ZnVsbC5mKC0zLCAtMy4wKTsgLy8gZnVsbCBzcGVjCisKKyAgRzM8Y2hhciwgY2hhcj4gZzNfZ2Vu MjsKKyAgRzM8aW50LCBjaGFyPiBnM19wYXJ0aWFsMjsKKyAgZzNfZ2VuMi5mKChjaGFyKS0xLCAo Y2hhciktMSk7CisgIGczX3BhcnRpYWwyLmYoLTEsIChjaGFyKS0xKTsKKworICBHMzxpbnQsIEM+ IGczX2Z1bGwyOworICBnM19mdWxsMi5mKDUsIEN7fSk7CisgIGczX2Z1bGwyLmYoLTUsIEN7fSk7 CisKKyAgRzQgZzRfZ2Vuey0xLCAtMX07CisgIEc0IGc0X2Z1bGwxey0xLjAsIC0xLjB9OworICBH NCBnNF9mdWxsMnstMS4wLCAoY2hhciknYid9OworICBHNCBnNF9wYXJ0aWFseyhjaGFyKSdjJywg LTV9OworCisgIEc1PGludCwgaW50PiBnNV9nZW47CisgIGc1X2dlbi5mKC0xLCAtMSwgLTIpOwor ICBnNV9nZW4uZigtMSwgLTEsIC0yLjApOworCisgIEc1PGNoYXIsIGludD4gZzVfcGFydDsKKyAg ZzVfcGFydC5mKCdhJywgLTEsIC0yKTsKKyAgZzVfcGFydC5mKCdhJywgLTEsIC0yLjEpOworCisg IEc1PGRvdWJsZSwgZG91YmxlPiBnNV9mdWxsOworICBnNV9mdWxsLmYoLTEuMCwgLTEuMCwgLTIp OworICBnNV9mdWxsLmYoLTEuMCwgLTEuMCwgLTIuMSk7CisgIHJldHVybiAwOworfQorCisKKy8v IHsgZGctb3V0cHV0ICJkZWZhdWx0IHN0ZDo6aGFuZGxlX2NvbnRyYWN0X3Zpb2xhdGlvbiBjYWxs ZWQ6IC4qLkMgOSBib2R5PGludD4gLiooXG58XHJcbnxccikqIiB9CisvLyB7IGRnLW91dHB1dCAi LTIoXG58XHJcbnxccikqIiB9CisvLyB7IGRnLW91dHB1dCAiZGVmYXVsdCBzdGQ6OmhhbmRsZV9j b250cmFjdF92aW9sYXRpb24gY2FsbGVkOiAuKi5DIDE3IGJvZHk8ZG91YmxlPiAuKihcbnxcclxu fFxyKSoiIH0KKy8vIHsgZGctb3V0cHV0ICItMyhcbnxcclxufFxyKSoiIH0KKy8vIHsgZGctb3V0 cHV0ICJkZWZhdWx0IHN0ZDo6aGFuZGxlX2NvbnRyYWN0X3Zpb2xhdGlvbiBjYWxsZWQ6IC4qLkMg MjUgbm9uZTxpbnQ+IC4qKFxufFxyXG58XHIpKiIgfQorLy8geyBkZy1vdXRwdXQgIjEoXG58XHJc bnxccikqIiB9CisvLyB7IGRnLW91dHB1dCAiZGVmYXVsdCBzdGQ6OmhhbmRsZV9jb250cmFjdF92 aW9sYXRpb24gY2FsbGVkOiAuKi5DIDMyIG5vbmU8ZG91YmxlPiAuKihcbnxcclxufFxyKSoiIH0K Ky8vIHsgZGctb3V0cHV0ICItMTAxKFxufFxyXG58XHIpKiIgfQorLy8geyBkZy1vdXRwdXQgImRl ZmF1bHQgc3RkOjpoYW5kbGVfY29udHJhY3RfdmlvbGF0aW9uIGNhbGxlZDogLiouQyAzOSBhcmcw PGludD4gLiooXG58XHJcbnxccikqIiB9CisvLyB7IGRnLW91dHB1dCAiLTkoXG58XHJcbnxccikq IiB9CisvLyB7IGRnLW91dHB1dCAiZGVmYXVsdCBzdGQ6OmhhbmRsZV9jb250cmFjdF92aW9sYXRp b24gY2FsbGVkOiAuKi5DIDQ2IGFyZzA8ZG91YmxlPiAuKihcbnxcclxufFxyKSoiIH0KKy8vIHsg ZGctb3V0cHV0ICIxMShcbnxcclxufFxyKSoiIH0KKy8vIHsgZGctb3V0cHV0ICJkZWZhdWx0IHN0 ZDo6aGFuZGxlX2NvbnRyYWN0X3Zpb2xhdGlvbiBjYWxsZWQ6IC4qLkMgNTMgYXJnMTxpbnQ+IC4q KFxufFxyXG58XHIpKiIgfQorLy8geyBkZy1vdXRwdXQgImRlZmF1bHQgc3RkOjpoYW5kbGVfY29u dHJhY3RfdmlvbGF0aW9uIGNhbGxlZDogLiouQyA1NCBhcmcxPGludD4gLiooXG58XHJcbnxccikq IiB9CisvLyB7IGRnLW91dHB1dCAiLTMoXG58XHJcbnxccikqIiB9CisvLyB7IGRnLW91dHB1dCAi ZGVmYXVsdCBzdGQ6OmhhbmRsZV9jb250cmFjdF92aW9sYXRpb24gY2FsbGVkOiAuKi5DIDYxIGFy ZzE8ZG91YmxlPiAuKihcbnxcclxufFxyKSoiIH0KKy8vIHsgZGctb3V0cHV0ICJkZWZhdWx0IHN0 ZDo6aGFuZGxlX2NvbnRyYWN0X3Zpb2xhdGlvbiBjYWxsZWQ6IC4qLkMgNjIgYXJnMTxkb3VibGU+ IC4qKFxufFxyXG58XHIpKiIgfQorLy8geyBkZy1vdXRwdXQgIjE0KFxufFxyXG58XHIpKiIgfQor Ly8geyBkZy1vdXRwdXQgImRlZmF1bHQgc3RkOjpoYW5kbGVfY29udHJhY3RfdmlvbGF0aW9uIGNh bGxlZDogLiouQyA2OSByZXQ8aW50PiAuKihcbnxcclxufFxyKSoiIH0KKy8vIHsgZGctb3V0cHV0 ICIxKFxufFxyXG58XHIpKiIgfQorLy8geyBkZy1vdXRwdXQgImRlZmF1bHQgc3RkOjpoYW5kbGVf Y29udHJhY3RfdmlvbGF0aW9uIGNhbGxlZDogLiouQyA3NiByZXQ8ZG91YmxlPiAuKihcbnxcclxu fFxyKSoiIH0KKy8vIHsgZGctb3V0cHV0ICIzKFxufFxyXG58XHIpKiIgfQorLy8geyBkZy1vdXRw dXQgImRlZmF1bHQgc3RkOjpoYW5kbGVfY29udHJhY3RfdmlvbGF0aW9uIGNhbGxlZDogLiouQyA3 NiByZXQ8ZG91YmxlPiAuKihcbnxcclxufFxyKSoiIH0KKy8vIHsgZGctb3V0cHV0ICIzLjMwMDAw MChcbnxcclxufFxyKSoiIH0KKy8vIHsgZGctb3V0cHV0ICJkZWZhdWx0IHN0ZDo6aGFuZGxlX2Nv bnRyYWN0X3Zpb2xhdGlvbiBjYWxsZWQ6IC4qLkMgODMgZzE8aW50PiAuKihcbnxcclxufFxyKSoi IH0KKy8vIHsgZGctb3V0cHV0ICItMShcbnxcclxufFxyKSoiIH0KKy8vIHsgZGctb3V0cHV0ICIt MShcbnxcclxufFxyKSoiIH0KKy8vIHsgZGctb3V0cHV0ICJkZWZhdWx0IHN0ZDo6aGFuZGxlX2Nv bnRyYWN0X3Zpb2xhdGlvbiBjYWxsZWQ6IC4qLkMgOTcgZzI8aW50PiAuKihcbnxcclxufFxyKSoi IH0KKy8vIHsgZGctb3V0cHV0ICItMShcbnxcclxufFxyKSoiIH0KKy8vIHsgZGctb3V0cHV0ICJk ZWZhdWx0IHN0ZDo6aGFuZGxlX2NvbnRyYWN0X3Zpb2xhdGlvbiBjYWxsZWQ6IC4qLkMgMTA3IGcy PGRvdWJsZT4gLiooXG58XHJcbnxccikqIiB9CisvLyB7IGRnLW91dHB1dCAiMShcbnxcclxufFxy KSoiIH0KKy8vIHsgZGctb3V0cHV0ICJkZWZhdWx0IHN0ZDo6aGFuZGxlX2NvbnRyYWN0X3Zpb2xh dGlvbiBjYWxsZWQ6IC4qLkMgMTE0IGcyPGNoYXI+IC4qKFxufFxyXG58XHIpKiIgfQorLy8geyBk Zy1vdXRwdXQgIjEwMChcbnxcclxufFxyKSoiIH0KKy8vIHsgZGctb3V0cHV0ICJkZWZhdWx0IHN0 ZDo6aGFuZGxlX2NvbnRyYWN0X3Zpb2xhdGlvbiBjYWxsZWQ6IC4qLkMgMTI0IEczPGRvdWJsZSwg LiooXG58XHJcbnxccikqIiB9CisvLyB7IGRnLW91dHB1dCAiZGVmYXVsdCBzdGQ6OmhhbmRsZV9j b250cmFjdF92aW9sYXRpb24gY2FsbGVkOiAuKi5DIDEyNSBHMzxkb3VibGUsIC4qKFxufFxyXG58 XHIpKiIgfQorLy8geyBkZy1vdXRwdXQgIkczIGdlbmVyYWwgVCBTKFxufFxyXG58XHIpKiIgfQor Ly8geyBkZy1vdXRwdXQgImRlZmF1bHQgc3RkOjpoYW5kbGVfY29udHJhY3RfdmlvbGF0aW9uIGNh bGxlZDogLiouQyAxMzkgRzM8aW50LCAuKihcbnxcclxufFxyKSoiIH0KKy8vIHsgZGctb3V0cHV0 ICJkZWZhdWx0IHN0ZDo6aGFuZGxlX2NvbnRyYWN0X3Zpb2xhdGlvbiBjYWxsZWQ6IC4qLkMgMTQw IEczPGludCwgLiooXG58XHJcbnxccikqIiB9CisvLyB7IGRnLW91dHB1dCAiRzMgcGFydGlhbCBp bnQgUyhcbnxcclxufFxyKSoiIH0KKy8vIHsgZGctb3V0cHV0ICJkZWZhdWx0IHN0ZDo6aGFuZGxl X2NvbnRyYWN0X3Zpb2xhdGlvbiBjYWxsZWQ6IC4qLkMgMTQ3IEczPGludCwgLiooXG58XHJcbnxc cikqIiB9CisvLyB7IGRnLW91dHB1dCAiZGVmYXVsdCBzdGQ6OmhhbmRsZV9jb250cmFjdF92aW9s YXRpb24gY2FsbGVkOiAuKi5DIDE0OCBHMzxpbnQsIC4qKFxufFxyXG58XHIpKiIgfQorLy8geyBk Zy1vdXRwdXQgIkczIGZ1bGwgaW50IGRvdWJsZShcbnxcclxufFxyKSoiIH0KKy8vIHsgZGctb3V0 cHV0ICJkZWZhdWx0IHN0ZDo6aGFuZGxlX2NvbnRyYWN0X3Zpb2xhdGlvbiBjYWxsZWQ6IC4qLkMg MTI0IEczPGNoYXIsIC4qKFxufFxyXG58XHIpKiIgfQorLy8geyBkZy1vdXRwdXQgImRlZmF1bHQg c3RkOjpoYW5kbGVfY29udHJhY3RfdmlvbGF0aW9uIGNhbGxlZDogLiouQyAxMjUgRzM8Y2hhciwg LiooXG58XHJcbnxccikqIiB9CisvLyB7IGRnLW91dHB1dCAiRzMgZ2VuZXJhbCBUIFMoXG58XHJc bnxccikqIiB9CisvLyB7IGRnLW91dHB1dCAiZGVmYXVsdCBzdGQ6OmhhbmRsZV9jb250cmFjdF92 aW9sYXRpb24gY2FsbGVkOiAuKi5DIDEzOSBHMzxpbnQsIC4qKFxufFxyXG58XHIpKiIgfQorLy8g eyBkZy1vdXRwdXQgImRlZmF1bHQgc3RkOjpoYW5kbGVfY29udHJhY3RfdmlvbGF0aW9uIGNhbGxl ZDogLiouQyAxNDAgRzM8aW50LCAuKihcbnxcclxufFxyKSoiIH0KKy8vIHsgZGctb3V0cHV0ICJH MyBwYXJ0aWFsIGludCBTKFxufFxyXG58XHIpKiIgfQorLy8geyBkZy1vdXRwdXQgIkczIGZ1bGwg aW50IEMoXG58XHJcbnxccikqIiB9CisvLyB7IGRnLW91dHB1dCAiRzMgZnVsbCBpbnQgQyhcbnxc clxufFxyKSoiIH0KKy8vIHsgZGctb3V0cHV0ICJkZWZhdWx0IHN0ZDo6aGFuZGxlX2NvbnRyYWN0 X3Zpb2xhdGlvbiBjYWxsZWQ6IC4qLkMgMTczIEc0PGludCwgLiooXG58XHJcbnxccikqIiB9Cisv LyB7IGRnLW91dHB1dCAiZGVmYXVsdCBzdGQ6OmhhbmRsZV9jb250cmFjdF92aW9sYXRpb24gY2Fs bGVkOiAuKi5DIDE3NCBHNDxpbnQsIC4qKFxufFxyXG58XHIpKiIgfQorLy8geyBkZy1vdXRwdXQg Ikc0IGdlbmVyYWwgVCBTKFxufFxyXG58XHIpKiIgfQorLy8geyBkZy1vdXRwdXQgImRlZmF1bHQg c3RkOjpoYW5kbGVfY29udHJhY3RfdmlvbGF0aW9uIGNhbGxlZDogLiouQyAxNzUgRzQ8aW50LCAu KihcbnxcclxufFxyKSoiIH0KKy8vIHsgZGctb3V0cHV0ICJHNCBmdWxsIGRvdWJsZSBkb3VibGUo XG58XHJcbnxccikqIiB9CisvLyB7IGRnLW91dHB1dCAiZGVmYXVsdCBzdGQ6OmhhbmRsZV9jb250 cmFjdF92aW9sYXRpb24gY2FsbGVkOiAuKi5DIDIwNiBHNDxkb3VibGUsIC4qKFxufFxyXG58XHIp KiIgfQorLy8geyBkZy1vdXRwdXQgImRlZmF1bHQgc3RkOjpoYW5kbGVfY29udHJhY3RfdmlvbGF0 aW9uIGNhbGxlZDogLiouQyAyMDcgRzQ8ZG91YmxlLCAuKihcbnxcclxufFxyKSoiIH0KKy8vIHsg ZGctb3V0cHV0ICJHNCBmdWxsIGRvdWJsZSBjaGFyKFxufFxyXG58XHIpKiIgfQorLy8geyBkZy1v dXRwdXQgImRlZmF1bHQgc3RkOjpoYW5kbGVfY29udHJhY3RfdmlvbGF0aW9uIGNhbGxlZDogLiou QyAyMDggRzQ8ZG91YmxlLCAuKihcbnxcclxufFxyKSoiIH0KKy8vIHsgZGctb3V0cHV0ICJkZWZh dWx0IHN0ZDo6aGFuZGxlX2NvbnRyYWN0X3Zpb2xhdGlvbiBjYWxsZWQ6IC4qLkMgMTg3IEc0PGNo YXIsIC4qKFxufFxyXG58XHIpKiIgfQorLy8geyBkZy1vdXRwdXQgImRlZmF1bHQgc3RkOjpoYW5k bGVfY29udHJhY3RfdmlvbGF0aW9uIGNhbGxlZDogLiouQyAxODggRzQ8Y2hhciwgLiooXG58XHJc bnxccikqIiB9CisvLyB7IGRnLW91dHB1dCAiRzQgcGFydGlhbCBjaGFyIFMoXG58XHJcbnxccikq IiB9CisvLyB7IGRnLW91dHB1dCAiZGVmYXVsdCBzdGQ6OmhhbmRsZV9jb250cmFjdF92aW9sYXRp b24gY2FsbGVkOiAuKi5DIDE4OSBHNDxjaGFyLCAuKihcbnxcclxufFxyKSoiIH0KKy8vIHsgZGct b3V0cHV0ICJkZWZhdWx0IHN0ZDo6aGFuZGxlX2NvbnRyYWN0X3Zpb2xhdGlvbiBjYWxsZWQ6IC4q LkMgMjIwIEc1PGludCwgLiooXG58XHJcbnxccikqIiB9CisvLyB7IGRnLW91dHB1dCAiZGVmYXVs dCBzdGQ6OmhhbmRsZV9jb250cmFjdF92aW9sYXRpb24gY2FsbGVkOiAuKi5DIDIyMSBHNTxpbnQs IC4qKFxufFxyXG58XHIpKiIgfQorLy8geyBkZy1vdXRwdXQgImRlZmF1bHQgc3RkOjpoYW5kbGVf Y29udHJhY3RfdmlvbGF0aW9uIGNhbGxlZDogLiouQyAyMjIgRzU8aW50LCAuKihcbnxcclxufFxy KSoiIH0KKy8vIHsgZGctb3V0cHV0ICJHNSBnZW4gVCBTLCBmIGdlbiBSKFxufFxyXG58XHIpKiIg fQorLy8geyBkZy1vdXRwdXQgImRlZmF1bHQgc3RkOjpoYW5kbGVfY29udHJhY3RfdmlvbGF0aW9u IGNhbGxlZDogLiouQyAyMjAgRzU8aW50LCAuKihcbnxcclxufFxyKSoiIH0KKy8vIHsgZGctb3V0 cHV0ICJkZWZhdWx0IHN0ZDo6aGFuZGxlX2NvbnRyYWN0X3Zpb2xhdGlvbiBjYWxsZWQ6IC4qLkMg MjIxIEc1PGludCwgLiooXG58XHJcbnxccikqIiB9CisvLyB7IGRnLW91dHB1dCAiZGVmYXVsdCBz dGQ6OmhhbmRsZV9jb250cmFjdF92aW9sYXRpb24gY2FsbGVkOiAuKi5DIDIyMiBHNTxpbnQsIC4q KFxufFxyXG58XHIpKiIgfQorLy8geyBkZy1vdXRwdXQgIkc1IGdlbiBUIFMsIGYgZ2VuIFIoXG58 XHJcbnxccikqIiB9CisvLyB7IGRnLW91dHB1dCAiZGVmYXVsdCBzdGQ6OmhhbmRsZV9jb250cmFj dF92aW9sYXRpb24gY2FsbGVkOiAuKi5DIDIzMyBHNTxjaGFyLCAuKihcbnxcclxufFxyKSoiIH0K Ky8vIHsgZGctb3V0cHV0ICJkZWZhdWx0IHN0ZDo6aGFuZGxlX2NvbnRyYWN0X3Zpb2xhdGlvbiBj YWxsZWQ6IC4qLkMgMjM0IEc1PGNoYXIsIC4qKFxufFxyXG58XHIpKiIgfQorLy8geyBkZy1vdXRw dXQgImRlZmF1bHQgc3RkOjpoYW5kbGVfY29udHJhY3RfdmlvbGF0aW9uIGNhbGxlZDogLiouQyAy MzUgRzU8Y2hhciwgLiooXG58XHJcbnxccikqIiB9CisvLyB7IGRnLW91dHB1dCAiRzUgcGFydGlh bCBjaGFyIFMsIGYgZ2VuIFIoXG58XHJcbnxccikqIiB9CisvLyB7IGRnLW91dHB1dCAiZGVmYXVs dCBzdGQ6OmhhbmRsZV9jb250cmFjdF92aW9sYXRpb24gY2FsbGVkOiAuKi5DIDIzMyBHNTxjaGFy LCAuKihcbnxcclxufFxyKSoiIH0KKy8vIHsgZGctb3V0cHV0ICJkZWZhdWx0IHN0ZDo6aGFuZGxl X2NvbnRyYWN0X3Zpb2xhdGlvbiBjYWxsZWQ6IC4qLkMgMjM0IEc1PGNoYXIsIC4qKFxufFxyXG58 XHIpKiIgfQorLy8geyBkZy1vdXRwdXQgImRlZmF1bHQgc3RkOjpoYW5kbGVfY29udHJhY3Rfdmlv bGF0aW9uIGNhbGxlZDogLiouQyAyMzUgRzU8Y2hhciwgLiooXG58XHJcbnxccikqIiB9CisvLyB7 IGRnLW91dHB1dCAiRzUgcGFydGlhbCBjaGFyIFMsIGYgZ2VuIFIoXG58XHJcbnxccikqIiB9Cisv LyB7IGRnLW91dHB1dCAiZGVmYXVsdCBzdGQ6OmhhbmRsZV9jb250cmFjdF92aW9sYXRpb24gY2Fs bGVkOiAuKi5DIDI0NCBHNTxkb3VibGUsIC4qKFxufFxyXG58XHIpKiIgfQorLy8geyBkZy1vdXRw dXQgImRlZmF1bHQgc3RkOjpoYW5kbGVfY29udHJhY3RfdmlvbGF0aW9uIGNhbGxlZDogLiouQyAy NDUgRzU8ZG91YmxlLCAuKihcbnxcclxufFxyKSoiIH0KKy8vIHsgZGctb3V0cHV0ICJkZWZhdWx0 IHN0ZDo6aGFuZGxlX2NvbnRyYWN0X3Zpb2xhdGlvbiBjYWxsZWQ6IC4qLkMgMjQ2IEc1PGRvdWJs ZSwgLiooXG58XHJcbnxccikqIiB9CisvLyB7IGRnLW91dHB1dCAiRzUgZnVsbCBkb3VibGUgZG91 YmxlLCBmIGdlbiBSKFxufFxyXG58XHIpKiIgfQorLy8geyBkZy1vdXRwdXQgImRlZmF1bHQgc3Rk OjpoYW5kbGVfY29udHJhY3RfdmlvbGF0aW9uIGNhbGxlZDogLiouQyAyNDQgRzU8ZG91YmxlLCAu KihcbnxcclxufFxyKSoiIH0KKy8vIHsgZGctb3V0cHV0ICJkZWZhdWx0IHN0ZDo6aGFuZGxlX2Nv bnRyYWN0X3Zpb2xhdGlvbiBjYWxsZWQ6IC4qLkMgMjQ1IEc1PGRvdWJsZSwgLiooXG58XHJcbnxc cikqIiB9CisvLyB7IGRnLW91dHB1dCAiZGVmYXVsdCBzdGQ6OmhhbmRsZV9jb250cmFjdF92aW9s YXRpb24gY2FsbGVkOiAuKi5DIDI0NiBHNTxkb3VibGUsIC4qKFxufFxyXG58XHIpKiIgfQorLy8g eyBkZy1vdXRwdXQgIkc1IGZ1bGwgZG91YmxlIGRvdWJsZSwgZiBnZW4gUihcbnxcclxufFxyKSoi IH0KKwpkaWZmIC0tZ2l0IGEvZ2NjL3Rlc3RzdWl0ZS9nKysuZGcvY29udHJhY3RzL2NvbnRyYWN0 cy10bXBsLXNwZWMzLkMgYi9nY2MvdGVzdHN1aXRlL2crKy5kZy9jb250cmFjdHMvY29udHJhY3Rz LXRtcGwtc3BlYzMuQwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uNDQ3 MjU4OTMwNjEKLS0tIC9kZXYvbnVsbAorKysgYi9nY2MvdGVzdHN1aXRlL2crKy5kZy9jb250cmFj dHMvY29udHJhY3RzLXRtcGwtc3BlYzMuQwpAQCAtMCwwICsxLDQ1IEBACisvLyB7IGRnLWRvIHJ1 biB9CisvLyB7IGRnLW9wdGlvbnMgIi1zdGQ9YysrMmEgLWZjb250cmFjdHMgLWZjb250cmFjdC1j b250aW51YXRpb24tbW9kZT1vbiIgfQorI2luY2x1ZGUgPGNzdGRpbz4KKwordGVtcGxhdGU8dHlw ZW5hbWUgVCwgdHlwZW5hbWUgUz4KK3N0cnVjdCBHNQoreworICB0ZW1wbGF0ZTx0eXBlbmFtZSBS PgorICB2b2lkIGYoVCB0LCBTIHMsIFIgcikKKyAgICBbWyBwcmU6IHQgPiAwIF1dIFtbIHByZTog cyA+IDAgXV0gW1sgcHJlOiByID4gMCBdXQorICB7CisgICAgcHJpbnRmICgiRzUgZ2VuIFQgUywg ZiBnZW4gUlxuIik7CisgIH0KK307CisKKy8vIHNwZWNpYWxpemF0aW9ucyBjYW4gcmVtb3ZlIGNv bnRyYWN0cwordGVtcGxhdGU8PgordGVtcGxhdGU8dHlwZW5hbWUgUj4KK3ZvaWQgRzU8ZG91Ymxl LCBkb3VibGU+OjpmKGRvdWJsZSBhLCBkb3VibGUgYiwgUiBjKQoreworICBwcmludGYgKCJHNSBm dWxsIGRvdWJsZSBkb3VibGUsIGYgZ2VuIFJcbiIpOworfQorCitpbnQgbWFpbihpbnQsIGNoYXIq KikgeworICBHNTxkb3VibGUsIGRvdWJsZT4gZzVfZnVsbDsKKyAgZzVfZnVsbC5mKC0xLjAsIC0x LjAsIC0yKTsKKyAgZzVfZnVsbC5mKC0xLjAsIC0xLjAsIC0yLjEpOworCisgIEc1PGludCwgZG91 YmxlPiBnNV9nZW47CisgIGc1X2dlbi5mKC0xLCAtMS4wLCAtMik7CisgIGc1X2dlbi5mKC0xLCAt MS4wLCAtMi4xKTsKKyAgcmV0dXJuIDA7Cit9CisKKy8vIHsgZGctb3V0cHV0ICJHNSBmdWxsIGRv dWJsZSBkb3VibGUsIGYgZ2VuIFIoXG58XHJcbnxccikqIiB9CisvLyB7IGRnLW91dHB1dCAiRzUg ZnVsbCBkb3VibGUgZG91YmxlLCBmIGdlbiBSKFxufFxyXG58XHIpKiIgfQorLy8geyBkZy1vdXRw dXQgImRlZmF1bHQgc3RkOjpoYW5kbGVfY29udHJhY3RfdmlvbGF0aW9uIGNhbGxlZDogLiouQyAx MCBHNTxpbnQsIC4qIHQgPiAwIC4qKFxufFxyXG58XHIpKiIgfQorLy8geyBkZy1vdXRwdXQgImRl ZmF1bHQgc3RkOjpoYW5kbGVfY29udHJhY3RfdmlvbGF0aW9uIGNhbGxlZDogLiouQyAxMCBHNTxp bnQsIC4qIHMgPiAwIC4qKFxufFxyXG58XHIpKiIgfQorLy8geyBkZy1vdXRwdXQgImRlZmF1bHQg c3RkOjpoYW5kbGVfY29udHJhY3RfdmlvbGF0aW9uIGNhbGxlZDogLiouQyAxMCBHNTxpbnQsIC4q IHIgPiAwIC4qKFxufFxyXG58XHIpKiIgfQorLy8geyBkZy1vdXRwdXQgIkc1IGdlbiBUIFMsIGYg Z2VuIFIoXG58XHJcbnxccikqIiB9CisvLyB7IGRnLW91dHB1dCAiZGVmYXVsdCBzdGQ6OmhhbmRs ZV9jb250cmFjdF92aW9sYXRpb24gY2FsbGVkOiAuKi5DIDEwIEc1PGludCwgLiogdCA+IDAgLioo XG58XHJcbnxccikqIiB9CisvLyB7IGRnLW91dHB1dCAiZGVmYXVsdCBzdGQ6OmhhbmRsZV9jb250 cmFjdF92aW9sYXRpb24gY2FsbGVkOiAuKi5DIDEwIEc1PGludCwgLiogcyA+IDAgLiooXG58XHJc bnxccikqIiB9CisvLyB7IGRnLW91dHB1dCAiZGVmYXVsdCBzdGQ6OmhhbmRsZV9jb250cmFjdF92 aW9sYXRpb24gY2FsbGVkOiAuKi5DIDEwIEc1PGludCwgLiogciA+IDAgLiooXG58XHJcbnxccikq IiB9CisvLyB7IGRnLW91dHB1dCAiRzUgZ2VuIFQgUywgZiBnZW4gUihcbnxcclxufFxyKSoiIH0K KwpkaWZmIC0tZ2l0IGEvZ2NjL3Rlc3RzdWl0ZS9nKysuZGcvY29udHJhY3RzL2NvbnRyYWN0czEu QyBiL2djYy90ZXN0c3VpdGUvZysrLmRnL2NvbnRyYWN0cy9jb250cmFjdHMxLkMKbmV3IGZpbGUg bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLjY2NTVlMDE2MjIxCi0tLSAvZGV2L251bGwK KysrIGIvZ2NjL3Rlc3RzdWl0ZS9nKysuZGcvY29udHJhY3RzL2NvbnRyYWN0czEuQwpAQCAtMCww ICsxLDQ5IEBACisvLyBnZW5lcmljIGFzc2VydCBjb250cmFjdCBwYXJzaW5nIGNoZWNrcworLy8g ICBjaGVjayBvbWl0dGVkLCAnZGVmYXVsdCcsICdhdWRpdCcsIGFuZCAnYXhpb20nIGNvbnRyYWN0 IGxldmVscyBwYXJzZQorLy8gICBjaGVjayB0aGF0IGFsbCBjb25jcmV0ZSBzZW1hbnRpY3MgcGFy c2UKKy8vICAgY2hlY2sgb21pdHRlZCwgJyVkZWZhdWx0JyBjb250cmFjdCByb2xlcyBwYXJzZQor Ly8gICBlbnN1cmUgdGhhdCBhbiBpbnZhbGlkIGNvbnRyYWN0IGxldmVsICdpbnZhbGlkJyBlcnJv cnMKKy8vICAgZW5zdXJlIHRoYXQgYSBwcmVkaWNhdGUgcmVmZXJlbmNpbmcgYW4gdW5kZWZpbmVk IHZhcmlhYmxlIGVycm9ycworLy8gICBlbnN1cmUgdGhhdCBhIG1pc3NpbmcgY29sb24gYWZ0ZXIg Y29udHJhY3QgbGV2ZWwgZXJyb3JzCisvLyAgIGVuc3VyZSB0aGF0IGFuIGludmFsaWQgY29udHJh Y3Qgcm9sZSAnaW52YWxpZCcgZXJyb3JzCisvLyAgIGVuc3VyZSB0aGF0IGEgbWlzc2luZyBjb2xv biBhZnRlciBjb250cmFjdCByb2xlIGVycm9ycworLy8geyBkZy1kbyBjb21waWxlIH0KKy8vIHsg ZGctb3B0aW9ucyAiLXN0ZD1jKysyYSAtZmNvbnRyYWN0cyIgfQorCitzdGF0aWNfYXNzZXJ0IChf X2NwcF9jb250cmFjdHMgPj0gMjAxOTA2KTsKK3N0YXRpY19hc3NlcnQgKF9fY3BwX2NvbnRyYWN0 c19saXRlcmFsX3NlbWFudGljcyA+PSAyMDE5MDYpOworc3RhdGljX2Fzc2VydCAoX19jcHBfY29u dHJhY3RzX3JvbGVzID49IDIwMTkwNik7CisKK2ludCBtYWluKCkKK3sKKyAgaW50IHg7CisKKyAg W1thc3NlcnQ6IHggPj0gMF1dOworICBbW2Fzc2VydCBkZWZhdWx0OiB4IDwgMF1dOworICBbW2Fz c2VydCBhdWRpdDogeCA9PSAwXV07CisgIFtbYXNzZXJ0IGF4aW9tOiB4ID09IDFdXTsKKworICBb W2Fzc2VydDogeCA+IDAgPyB0cnVlIDogZmFsc2VdXTsKKyAgW1thc3NlcnQ6IHggPCAwID8gdHJ1 ZSA6IGZhbHNlXV07CisKKyAgW1thc3NlcnQ6IHggPSAwXV07IC8vIHsgZGctZXJyb3IgImV4cGVj dGVkIC5dLiBiZWZvcmUgLj0uIHRva2VuIiB9CisKKyAgW1thc3NlcnQgaWdub3JlOiB4ID49IDBd XTsKKyAgW1thc3NlcnQgYXNzdW1lOiB4ID49IDBdXTsKKyAgW1thc3NlcnQgY2hlY2tfbmV2ZXJf Y29udGludWU6IHggPj0gMF1dOworICBbW2Fzc2VydCBjaGVja19tYXliZV9jb250aW51ZTogeCA+ PSAwXV07CisKKyAgW1thc3NlcnQgJWRlZmF1bHQ6IHggPj0gMF1dOworICBbW2Fzc2VydCBkZWZh dWx0ICVkZWZhdWx0OiB4IDwgMF1dOworICBbW2Fzc2VydCBhdWRpdCAlZGVmYXVsdDogeCA9PSAw XV07CisgIFtbYXNzZXJ0IGF4aW9tICVkZWZhdWx0OiB4ID09IDFdXTsKKworICBbW2Fzc2VydCBj aGVja19hbHdheXNfY29udGludWU6IHggPj0gMF1dOyAvLyB7IGRnLWVycm9yICJleHBlY3RlZCBj b250cmFjdCBsZXZlbCIgfQorICBbW2Fzc2VydCBpbnZhbGlkOiB4ID09IDBdXTsgLy8geyBkZy1l cnJvciAiZXhwZWN0ZWQgY29udHJhY3QgbGV2ZWwiIH0KKyAgW1thc3NlcnQ6IHkgPT0gMF1dOyAv LyB7IGRnLWVycm9yICIueS4gd2FzIG5vdCBkZWNsYXJlZCBpbiB0aGlzIHNjb3BlIiB9CisgIFtb YXNzZXJ0IGRlZmF1bHQgeCA9PSAwXV07IC8vIHsgZGctZXJyb3IgImV4cGVjdGVkIC46LiBiZWZv cmUgLnguIiB9CisgIFtbYXNzZXJ0ICVkZWZhdWx0IHggPj0gMF1dOyAvLyB7IGRnLWVycm9yICJl eHBlY3RlZCAuOi4gYmVmb3JlIC54LiIgfQorCisgIFtbYXNzZXJ0ICVpbnZhbGlkOiB4ID49IDBd XTsgLy8gVE9ETzogb3B0aW9uYWwgd2FybmluZz8KKyAgcmV0dXJuIDA7Cit9CmRpZmYgLS1naXQg YS9nY2MvdGVzdHN1aXRlL2crKy5kZy9jb250cmFjdHMvY29udHJhY3RzMTAuQyBiL2djYy90ZXN0 c3VpdGUvZysrLmRnL2NvbnRyYWN0cy9jb250cmFjdHMxMC5DCm5ldyBmaWxlIG1vZGUgMTAwNjQ0 CmluZGV4IDAwMDAwMDAwMDAwLi5jZTA3MjNjM2RiNAotLS0gL2Rldi9udWxsCisrKyBiL2djYy90 ZXN0c3VpdGUvZysrLmRnL2NvbnRyYWN0cy9jb250cmFjdHMxMC5DCkBAIC0wLDAgKzEsNzMgQEAK Ky8vIGdlbmVyYWwgY2hlY2tzIHRvIGVuc3VyZSB0aGF0IGNvbnRyYWN0IHZpb2xhdGlvbnMgYXJl IGdlbmVyYXRlZCBkdXJpbmcKKy8vIHJ1bnRpbWUgd2hlbiBhcHByb3ByaWF0ZQorLy8gZWFjaCBj aGVjayBhbHNvIHZhbGlkYXRlcyB0aGUgZXhwZWN0ZWQgZmlsZSBuYW1lLCBsaW5lIG51bWJlciwg ZnVuY3Rpb24sCisvLyBwcmVkaWNhdGUsIGFuZCBjb250cmFjdCBsZXZlbCBhcmUgaW5jbHVkZWQg aW4gdGhlIHZpb2xhdGlvbl9pbmZvIG9iamVjdAorLy8geyBkZy1kbyBydW4gfQorLy8geyBkZy1v cHRpb25zICItc3RkPWMrKzJhIC1mY29udHJhY3RzIC1mY29udHJhY3QtYnVpbGQtbGV2ZWw9YXVk aXQgLWZjb250cmFjdC1jb250aW51YXRpb24tbW9kZT1vbiIgfQorCituYW1lc3BhY2UgdG5zCit7 CisgIGludCBmdW4oKQorICB7CisgICAgaW50IHggPSAxOworICAgIFtbIGFzc2VydDogeCA8IDAg XV07CisgICAgcmV0dXJuIDA7CisgIH0KKyAgaW50IGZ1bjIoKTsKKworICBzdHJ1Y3QgVGVzdFR5 cGUKKyAgeworICAgIHN0YXRpYyBpbnQgZnVuKCk7CisgICAgc3RhdGljIGludCBmdW4yKCkKKyAg ICB7CisgICAgICBpbnQgeCA9IDE7CisgICAgICBbWyBhc3NlcnQ6IHggPCAwIF1dOworICAgICAg cmV0dXJuIDA7CisgICAgfQorICB9OworfQorCitpbnQgdG5zOjpmdW4yKCkKK3sKKyAgaW50IHgg PSAxOworICBbWyBhc3NlcnQ6IHggPCAwIF1dOworICByZXR1cm4gMDsKK30KKworaW50IHRuczo6 VGVzdFR5cGU6OmZ1bigpCit7CisgIGludCB4ID0gMTsKKyAgW1sgYXNzZXJ0OiB4IDwgMCBdXTsK KyAgcmV0dXJuIDA7Cit9CisKK2ludCBtYWluKCkKK3sKKyAgaW50IHggPSAxMDA7CisgIFtbYXNz ZXJ0OiB4IDwgMF1dOworICBbW2Fzc2VydCBkZWZhdWx0OiB4IDwgMV1dOworICBbW2Fzc2VydCBh dWRpdDogeCA8IDJdXTsKKy8vIGNvbnRyYWN0X3Zpb2xhdGlvbi5saW5lX251bWJlcigpIG1heSBl dmVudHVhbGx5IGNvbWUgZnJvbQorLy8gc3RkOjpzb3VyY2VfbG9jYXRpb24gd2hpY2ggKmlzKiBh ZmZlY3RlZCBieSB0aGUgI2xpbmUgbWFjcm87IG91ciBjdXJyZW50CisvLyBpbXBsZW1lbnRhdGlv biBjb25mb3JtcyB0byB0aGlzIHNvIHdlJ3ZlIGluY2x1ZGVkIGl0IGFzIGEgY2hlY2sKKyNsaW5l IDEwMAorICBbW2Fzc2VydDogeCA8IDNdXTsKKyAgW1thc3NlcnQgYXhpb206IHggPCA0XV07CisK KyAgdG5zOjpmdW4oKTsKKyAgdG5zOjpmdW4yKCk7CisKKyAgdG5zOjpUZXN0VHlwZTo6ZnVuKCk7 CisgIHRuczo6VGVzdFR5cGU6OmZ1bjIoKTsKKyAgcmV0dXJuIDA7Cit9CisKKy8vIHsgZGctb3V0 cHV0ICJkZWZhdWx0IHN0ZDo6aGFuZGxlX2NvbnRyYWN0X3Zpb2xhdGlvbiBjYWxsZWQ6IC4qLkMg NDcgbWFpbiAuKihcbnxcclxufFxyKSoiIH0KKy8vIHsgZGctb3V0cHV0ICJkZWZhdWx0IHN0ZDo6 aGFuZGxlX2NvbnRyYWN0X3Zpb2xhdGlvbiBjYWxsZWQ6IC4qLkMgNDggbWFpbiAuKihcbnxcclxu fFxyKSoiIH0KKy8vIHsgZGctb3V0cHV0ICJkZWZhdWx0IHN0ZDo6aGFuZGxlX2NvbnRyYWN0X3Zp b2xhdGlvbiBjYWxsZWQ6IC4qLkMgNDkgbWFpbiAuKihcbnxcclxufFxyKSoiIH0KKy8vIHsgZGct b3V0cHV0ICJkZWZhdWx0IHN0ZDo6aGFuZGxlX2NvbnRyYWN0X3Zpb2xhdGlvbiBjYWxsZWQ6IC4q LkMgMTAwIG1haW4gLiooXG58XHJcbnxccikqIiB9CisvLyB7IGRnLW91dHB1dCAiZGVmYXVsdCBz dGQ6OmhhbmRsZV9jb250cmFjdF92aW9sYXRpb24gY2FsbGVkOiAuKi5DIDEzIHRuczo6ZnVuIC4q KFxufFxyXG58XHIpKiIgfQorLy8geyBkZy1vdXRwdXQgImRlZmF1bHQgc3RkOjpoYW5kbGVfY29u dHJhY3RfdmlvbGF0aW9uIGNhbGxlZDogLiouQyAzMyB0bnM6OmZ1bjIgLiooXG58XHJcbnxccikq IiB9CisvLyB7IGRnLW91dHB1dCAiZGVmYXVsdCBzdGQ6OmhhbmRsZV9jb250cmFjdF92aW9sYXRp b24gY2FsbGVkOiAuKi5DIDQwIHRuczo6VGVzdFR5cGU6OmZ1biAuKihcbnxcclxufFxyKSoiIH0K Ky8vIHsgZGctb3V0cHV0ICJkZWZhdWx0IHN0ZDo6aGFuZGxlX2NvbnRyYWN0X3Zpb2xhdGlvbiBj YWxsZWQ6IC4qLkMgMjQgdG5zOjpUZXN0VHlwZTo6ZnVuMiAuKihcbnxcclxufFxyKSoiIH0KKyAK ZGlmZiAtLWdpdCBhL2djYy90ZXN0c3VpdGUvZysrLmRnL2NvbnRyYWN0cy9jb250cmFjdHMxMS5D IGIvZ2NjL3Rlc3RzdWl0ZS9nKysuZGcvY29udHJhY3RzL2NvbnRyYWN0czExLkMKbmV3IGZpbGUg bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLmI0MWJjNTM1ZTVkCi0tLSAvZGV2L251bGwK KysrIGIvZ2NjL3Rlc3RzdWl0ZS9nKysuZGcvY29udHJhY3RzL2NvbnRyYWN0czExLkMKQEAgLTAs MCArMSwxMDMgQEAKKy8vIGVuc3VyZSB0aGF0IGFzc2VydCBjb250cmFjdCBwcmVkaWNhdGVzIHRo YXQgYXJlIG5vdCBjb252ZXJ0aWJsZSB0byBib29sCisvLyBnZW5lcmF0ZSBhbiBlcnJvcgorLy8g ZW5zdXJlIHRoZSBzYW1lIGZvciBpbnN0YXRpYXRlZCB0ZW1wbGF0ZSBmdW5jdGlvbnMKKy8vIGVu c3VyZSB0aGUgc2FtZSBmb3Igbm9uLWluc3RhdGlhdGVkIHRlbXBsYXRlIGZ1bmN0aW9ucyB3aGVu IHRoZSBwcmVkaWNhdGUKKy8vIGlzIG5vdCBkZXBlbmRlbnQgb24gdGhlIHRlbXBsYXRlIHBhcmFt ZXRlcnMKKy8vIGVuc3VyZSB0ZW1wbGF0ZSBwYXJhbWV0ZXIgZGVwZW5kZW50LCBwb3RlbnRpYWxs eSBub24tYm9vbGVhbiwgY29udHJhY3QKKy8vIHByZWRpY2F0ZXMgZG8gbm90IGdlbmVyYXRlIGFu IGVycm9yIGlmIG5ldmVyIGluc3RhdGlhdGVkCisvLyB7IGRnLWRvIGNvbXBpbGUgfQorLy8geyBk Zy1vcHRpb25zICItc3RkPWMrKzJhIC1mY29udHJhY3RzIiB9CisKK3ZvaWQgZnVuKCkKK3sKKyAg cmV0dXJuOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPgordm9pZCBmdW4yKFQgYSkKK3sKKyAg W1thc3NlcnQ6IGZ1bigpXV07IC8vIHsgZGctZXJyb3IgImNvdWxkIG5vdCBjb252ZXJ0fGluIGFy Z3VtZW50IiB9Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+Cit2b2lkIGZ1bjMoVCBhKQorewor ICBbW2Fzc2VydDogZnVuKCldXTsgLy8geyBkZy1lcnJvciAiY291bGQgbm90IGNvbnZlcnR8aW4g YXJndW1lbnQiIH0KK30KKwordGVtcGxhdGU8dHlwZW5hbWUgVD4KK3ZvaWQgZnVuNChUIGEpCit7 CisgIFtbYXNzZXJ0OiBhLmZ1bigpXV07Cit9CisKK3N0cnVjdCB0ZXN0Cit7CisgIHZvaWQgZnVu KCkgeyB9CisgIHZvaWQgZnVuMigpIHsgfQorfTsKKwordGVtcGxhdGU8dHlwZW5hbWUgVD4KK3Zv aWQgZnVuNShUIGEpCit7CisgIFtbYXNzZXJ0OiBhLmZ1bjIoKV1dOyAvLyB7IGRnLWVycm9yICJj b3VsZCBub3QgY29udmVydCIgfQorfQorCitzdHJ1Y3QgVm9pZEZ1bgoreworICB2b2lkIGZ1bigp IHsgfQorfTsKK3N0cnVjdCBCb29sRnVuCit7CisgIGJvb2wgZnVuKCkgeyByZXR1cm4gdHJ1ZTsg fQorfTsKKwordGVtcGxhdGU8dHlwZW5hbWUgVD4KK3ZvaWQgZnVuNihUIGEpCit7CisgIFtbIGFz c2VydDogYS5mdW4oKSBdXTsgLy8geyBkZy1lcnJvciAiY291bGQgbm90IGNvbnZlcnQiIH0KK30K KwordGVtcGxhdGUgdm9pZCBmdW42KFZvaWRGdW4pOworCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPgor dm9pZCBmdW43KFQgYSkKK3sKKyAgW1sgYXNzZXJ0OiBhLmZ1bigpIF1dOworfQorCit0ZW1wbGF0 ZSB2b2lkIGZ1bjcoQm9vbEZ1bik7CisKK3N0cnVjdCBJbXBsaWNpdEJvb2wKK3sKKyAgb3BlcmF0 b3IgYm9vbCgpIHsgcmV0dXJuIHRydWU7IH0KK307CitzdHJ1Y3QgRXhwbGljaXRCb29sCit7Cisg IGV4cGxpY2l0IG9wZXJhdG9yIGJvb2woKSB7IHJldHVybiB0cnVlOyB9Cit9OworCit0ZW1wbGF0 ZTx0eXBlbmFtZSBUPgordm9pZCBmdW44KFQgYSkKK3sKKyAgW1sgYXNzZXJ0OiBUKCkgXV07Cit9 CisKK3RlbXBsYXRlIHZvaWQgZnVuOChJbXBsaWNpdEJvb2wpOwordGVtcGxhdGUgdm9pZCBmdW44 KEV4cGxpY2l0Qm9vbCk7CisKK3ZvaWQgZnVuOSgpCit7CisgIFtbIGFzc2VydDogSW1wbGljaXRC b29sKCkgXV07CisgIFtbIGFzc2VydDogRXhwbGljaXRCb29sKCkgXV07Cit9CisKK2ludCBtYWlu KCkKK3sKKyAgW1thc3NlcnQ6IGZ1bigpXV07IC8vIHsgZGctZXJyb3IgImNvdWxkIG5vdCBjb252 ZXJ0IiB9CisgIGZ1bjIoMSk7CisKKyAgdGVzdCB0OworICBmdW41KHQpOworICByZXR1cm4gMDsK K30KZGlmZiAtLWdpdCBhL2djYy90ZXN0c3VpdGUvZysrLmRnL2NvbnRyYWN0cy9jb250cmFjdHMx Mi5DIGIvZ2NjL3Rlc3RzdWl0ZS9nKysuZGcvY29udHJhY3RzL2NvbnRyYWN0czEyLkMKbmV3IGZp bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLmY4ODhkNTEyOTZkCi0tLSAvZGV2L251 bGwKKysrIGIvZ2NjL3Rlc3RzdWl0ZS9nKysuZGcvY29udHJhY3RzL2NvbnRyYWN0czEyLkMKQEAg LTAsMCArMSwxNSBAQAorLy8gZW5zdXJlIHRoYXQgY29uc3RhbnRzIGZvciBjb250cmFjdCBsZXZl bHMgYXJlIGluc2VydGVkIGludG8gdGhlIGJpbmFyeSB3aGVuCisvLyB1c2VkIGFuZCBvbWl0dGVk IHdoZW4gdGhlIHJ1bnRpbWUgY2hlY2sgaXMgbm90IGdlbmVyYXRlZAorLy8geyBkZy1kbyBjb21w aWxlIH0KKy8vIHsgZGctb3B0aW9ucyAiLXN0ZD1jKysyYSAtZmNvbnRyYWN0cyAtZmNvbnRyYWN0 LWJ1aWxkLWxldmVsPWRlZmF1bHQiIH0KKy8vIHsgZGctZmluYWwgeyBzY2FuLWFzc2VtYmxlci1u b3QgImF1ZGl0IiB9IH0KKy8vIHsgZGctZmluYWwgeyBzY2FuLWFzc2VtYmxlciAiZGVmYXVsdCIg fSB9CisKK2ludCBtYWluKCkKK3sKKyAgaW50IHggPSAxOworICBbW2Fzc2VydDogeCA8IDBdXTsK KyAgW1thc3NlcnQgZGVmYXVsdDogeCA8IDBdXTsKKyAgW1thc3NlcnQgYXVkaXQ6IHggPCAwXV07 CisgIHJldHVybiAwOworfQpkaWZmIC0tZ2l0IGEvZ2NjL3Rlc3RzdWl0ZS9nKysuZGcvY29udHJh Y3RzL2NvbnRyYWN0czEzLkMgYi9nY2MvdGVzdHN1aXRlL2crKy5kZy9jb250cmFjdHMvY29udHJh Y3RzMTMuQwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uMTRiYTBlOTYw MDYKLS0tIC9kZXYvbnVsbAorKysgYi9nY2MvdGVzdHN1aXRlL2crKy5kZy9jb250cmFjdHMvY29u dHJhY3RzMTMuQwpAQCAtMCwwICsxLDUxIEBACisvLyBlbnN1cmUgdGhhdCBwYXNzaW5nIGFzc2Vy dHMgZG8gbm90IGFmZmVjdCBjb25zdGV4cHIgZnVuY3Rpb25zCisvLyBlbnN1cmUgdGhhdCBmYWls aW5nIGFzc2VydHMgZ2VuZXJhdGUgYW4gZXJyb3IgaW4gYSBjb25zdGV4cHIgZnVuY3Rpb24KKy8v IHsgZGctZG8gY29tcGlsZSB9CisvLyB7IGRnLW9wdGlvbnMgIi1zdGQ9YysrMmEgLWZjb250cmFj dHMiIH0KKworY29uc3RleHByIGludCB3ZnVuKGludCBhKSB7CisgIFtbYXNzZXJ0OiBhID4gMF1d OworICByZXR1cm4gYTsKK30KKworY29uc3RleHByIGludCBmZnVuKGludCBhKSB7CisgIFtbYXNz ZXJ0OiBhID4gMF1dOworICByZXR1cm4gYTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgVD4KK2Nv bnN0ZXhwciBpbnQgdGZ1bihUIGEpIHsKKyAgW1thc3NlcnQ6IGEgPiAwXV07CisgIHJldHVybiBh OworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPgorY29uc3RleHByIGludCB3dGZ1bihUIGEpIHsK KyAgW1thc3NlcnQ6IGEgPiAwXV07CisgIHJldHVybiBhOworfQorCit0ZW1wbGF0ZTx0eXBlbmFt ZSBUPgorY29uc3RleHByIGludCBmdGZ1bihUIGEpIHsKKyAgW1thc3NlcnQ6IGEgPiAwXV07Cisg IHJldHVybiBhOworfQorCitjb25zdGV4cHIgaW50IGV4cGxpY2l0Zm4oaW50IGEpIHsKKyAgW1th c3NlcnQgaWdub3JlOiBhID4gMF1dOworICBbW2Fzc2VydCBjaGVja19uZXZlcl9jb250aW51ZTog YSA+IDBdXTsKKyAgcmV0dXJuIGE7Cit9CisKK2ludCBtYWluKGludCwgY2hhciAqKikgeworICBj b25zdGV4cHIgaW50IGEgPSB3ZnVuKDEwKTsKKyAgY29uc3RleHByIGludCBiID0gZmZ1bigtMTAp OyAvLyB7IGRnLW1lc3NhZ2UgImluIC5jb25zdGV4cHIuIGV4cGFuc2lvbiIgfQorICAvLyB7IGRn LWVycm9yICJjb250cmFjdCBwcmVkaWNhdGUiICIiIHsgdGFyZ2V0ICotKi0qIH0gMTIgfQorICBj b25zdGV4cHIgaW50IGMgPSB3dGZ1bigxMCk7CisgIGNvbnN0ZXhwciBpbnQgZCA9IGZ0ZnVuKC0x MCk7ICAvLyB7IGRnLW1lc3NhZ2UgImluIC5jb25zdGV4cHIuIGV4cGFuc2lvbiIgfQorICAvLyB7 IGRnLWVycm9yICJjb250cmFjdCBwcmVkaWNhdGUiICIiIHsgdGFyZ2V0ICotKi0qIH0gMzAgfQor ICBjb25zdGV4cHIgaW50IGUgPSBleHBsaWNpdGZuKC0xMCk7IC8vIHsgZGctbWVzc2FnZSAiaW4g LmNvbnN0ZXhwci4gZXhwYW5zaW9uIiB9CisgIC8vIHsgZGctZXJyb3IgImNvbnRyYWN0IHByZWRp Y2F0ZSIgIiIgeyB0YXJnZXQgKi0qLSogfSAzNiB9CisgIHJldHVybiAwOworfQorCmRpZmYgLS1n aXQgYS9nY2MvdGVzdHN1aXRlL2crKy5kZy9jb250cmFjdHMvY29udHJhY3RzMTQuQyBiL2djYy90 ZXN0c3VpdGUvZysrLmRnL2NvbnRyYWN0cy9jb250cmFjdHMxNC5DCm5ldyBmaWxlIG1vZGUgMTAw NjQ0CmluZGV4IDAwMDAwMDAwMDAwLi41NTIwOGRiYzBhMQotLS0gL2Rldi9udWxsCisrKyBiL2dj Yy90ZXN0c3VpdGUvZysrLmRnL2NvbnRyYWN0cy9jb250cmFjdHMxNC5DCkBAIC0wLDAgKzEsNTgg QEAKKy8vIGVuc3VyZSB0aGF0IGV4Y2VwdGlvbnMgdGhyb3duIGluc2lkZSBhIGN1c3RvbSBjb250 cmFjdCB2aW9sYXRpb24gaGFuZGxlcgorLy8gYXJlIGNhdGNoYWJsZSB1cCB0aGUgY2FsbCBzdGFj aworLy8geyBkZy1kbyBydW4gfQorLy8geyBkZy1vcHRpb25zICItc3RkPWMrKzJhIC1mY29udHJh Y3RzIC1mY29udHJhY3QtY29udGludWF0aW9uLW1vZGU9b24iIH0KKyNpbmNsdWRlIDxpb3N0cmVh bT4KKyNpbmNsdWRlIDxleHBlcmltZW50YWwvY29udHJhY3Q+CisKK3ZvaWQgaGFuZGxlX2NvbnRy YWN0X3Zpb2xhdGlvbihjb25zdCBzdGQ6OmV4cGVyaW1lbnRhbDo6Y29udHJhY3RfdmlvbGF0aW9u ICZ2aW9sYXRpb24pIHsKKyAgc3RkOjpjZXJyIDw8ICJjdXN0b20gc3RkOjpoYW5kbGVfY29udHJh Y3RfdmlvbGF0aW9uIGNhbGxlZDoiCisgICAgPDwgIiAiIDw8IHZpb2xhdGlvbi5saW5lX251bWJl cigpCisgICAgPDwgIiAiIDw8IHZpb2xhdGlvbi5maWxlX25hbWUoKQorICAgIDw8IHN0ZDo6ZW5k bDsKKyAgdGhyb3cgLShpbnQpdmlvbGF0aW9uLmxpbmVfbnVtYmVyKCk7Cit9CisKK2ludCBmdW4o KSB7CisgIGludCB4ID0gMDsKKyAgW1sgYXNzZXJ0OiB4IDwgMCBdXTsKKyAgcmV0dXJuIDA7Cit9 CisKK2ludCBmdW4zKCkgeworICBmdW4oKTsKKyAgcmV0dXJuIDI7Cit9CisKK2ludCBtYWluKGlu dCwgY2hhcioqKSB7CisgIHRyeSB7CisgICAgaW50IHggPSAwOworICAgIFtbIGFzc2VydDogeCA8 IDAgXV07CisgIH0gY2F0Y2goaW50ICZleCkgeworICAgIHN0ZDo6Y2VyciA8PCAic3ludGggY2F1 Z2h0IGRpcmVjdDogIiA8PCBleCA8PCBzdGQ6OmVuZGw7CisgIH0KKworICB0cnkgeworICAgIGZ1 bigpOworICB9IGNhdGNoKGludCAmZXgpIHsKKyAgICBzdGQ6OmNlcnIgPDwgInN5bnRoIGNhdWdo dCBpbmRpcmVjdDogIiA8PCBleCA8PCBzdGQ6OmVuZGw7CisgIH0KKworICB0cnkgeworICAgIGZ1 bjMoKTsKKyAgfSBjYXRjaChpbnQgJmV4KSB7CisgICAgc3RkOjpjZXJyIDw8ICJzeW50aCBjYXVn aHQgZG91YmxlIGluZGlyZWN0OiAiIDw8IGV4IDw8IHN0ZDo6ZW5kbDsKKyAgfQorCisgIHN0ZDo6 Y2VyciA8PCAiZW5kIG1haW4iIDw8IHN0ZDo6ZW5kbDsKKyAgcmV0dXJuIDA7Cit9CisKKy8vIHsg ZGctb3V0cHV0ICJjdXN0b20gc3RkOjpoYW5kbGVfY29udHJhY3RfdmlvbGF0aW9uIGNhbGxlZDog MzAgLiovY29udHJhY3RzMTQuQyhcbnxcclxufFxyKSoiIH0KKy8vIHsgZGctb3V0cHV0ICJzeW50 aCBjYXVnaHQgZGlyZWN0OiAtMzAoXG58XHJcbnxccikqIiB9CisvLyB7IGRnLW91dHB1dCAiY3Vz dG9tIHN0ZDo6aGFuZGxlX2NvbnRyYWN0X3Zpb2xhdGlvbiBjYWxsZWQ6IDE4IC4qL2NvbnRyYWN0 czE0LkMoXG58XHJcbnxccikqIiB9CisvLyB7IGRnLW91dHB1dCAic3ludGggY2F1Z2h0IGluZGly ZWN0OiAtMTgoXG58XHJcbnxccikqIiB9CisvLyB7IGRnLW91dHB1dCAiY3VzdG9tIHN0ZDo6aGFu ZGxlX2NvbnRyYWN0X3Zpb2xhdGlvbiBjYWxsZWQ6IDE4IC4qL2NvbnRyYWN0czE0LkMoXG58XHJc bnxccikqIiB9CisvLyB7IGRnLW91dHB1dCAic3ludGggY2F1Z2h0IGRvdWJsZSBpbmRpcmVjdDog LTE4KFxufFxyXG58XHIpKiIgfQorLy8geyBkZy1vdXRwdXQgImVuZCBtYWluIiB9CisKZGlmZiAt LWdpdCBhL2djYy90ZXN0c3VpdGUvZysrLmRnL2NvbnRyYWN0cy9jb250cmFjdHMxNS5DIGIvZ2Nj L3Rlc3RzdWl0ZS9nKysuZGcvY29udHJhY3RzL2NvbnRyYWN0czE1LkMKbmV3IGZpbGUgbW9kZSAx MDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLmQ4MjJmODMzOTE2Ci0tLSAvZGV2L251bGwKKysrIGIv Z2NjL3Rlc3RzdWl0ZS9nKysuZGcvY29udHJhY3RzL2NvbnRyYWN0czE1LkMKQEAgLTAsMCArMSw1 NiBAQAorLy8gZW5zdXJlIHRoYXQgZXhjZXB0aW9ucyB0aHJvd24gaW5zaWRlIGEgY3VzdG9tIGNv bnRyYWN0IHZpb2xhdGlvbiBoYW5kbGVyCisvLyBhcmUgbm90IGNhdGNoYWJsZSB1cCB0aGUgY2Fs bCBzdGFjayB3aGVuIGZhaWxpbmcgaW4gYSBub2V4Y2VwdCBmdW5jdGlvbgorLy8geyBkZy1kbyBy dW4gfQorLy8geyBkZy1vcHRpb25zICItc3RkPWMrKzJhIC1mY29udHJhY3RzIC1mY29udHJhY3Qt Y29udGludWF0aW9uLW1vZGU9b24iIH0KKyNpbmNsdWRlIDxpb3N0cmVhbT4KKyNpbmNsdWRlIDxl eHBlcmltZW50YWwvY29udHJhY3Q+CisKK3ZvaWQgaGFuZGxlX2NvbnRyYWN0X3Zpb2xhdGlvbihj b25zdCBzdGQ6OmV4cGVyaW1lbnRhbDo6Y29udHJhY3RfdmlvbGF0aW9uICZ2aW9sYXRpb24pIHsK KyAgc3RkOjpjZXJyIDw8ICJjdXN0b20gc3RkOjpoYW5kbGVfY29udHJhY3RfdmlvbGF0aW9uIGNh bGxlZDoiCisgICAgPDwgIiAiIDw8IHZpb2xhdGlvbi5saW5lX251bWJlcigpCisgICAgPDwgIiAi IDw8IHZpb2xhdGlvbi5maWxlX25hbWUoKQorICAgIDw8IHN0ZDo6ZW5kbDsKKyAgdGhyb3cgLShp bnQpdmlvbGF0aW9uLmxpbmVfbnVtYmVyKCk7Cit9CisKK2ludCBmdW4oKSBub2V4Y2VwdCB7Cisg IGludCB4ID0gMDsKKyAgW1sgYXNzZXJ0OiB4IDwgMCBdXTsKKyAgcmV0dXJuIDA7Cit9CisKK2lu dCBmdW4zKCkgeworICBmdW4oKTsKKyAgcmV0dXJuIDI7Cit9CisKK2ludCBtYWluKGludCwgY2hh cioqKSB7CisgIHRyeSB7CisgICAgaW50IHggPSAwOworICAgIFtbIGFzc2VydDogeCA8IDAgXV07 CisgIH0gY2F0Y2goaW50ICZleCkgeworICAgIHN0ZDo6Y2VyciA8PCAic3ludGggY2F1Z2h0IGRp cmVjdDogIiA8PCBleCA8PCBzdGQ6OmVuZGw7CisgIH0KKworICB0cnkgeworICAgIGZ1bigpOwor ICB9IGNhdGNoKGludCAmZXgpIHsKKyAgICBzdGQ6OmNlcnIgPDwgInN5bnRoIGNhdWdodCBpbmRp cmVjdDogIiA8PCBleCA8PCBzdGQ6OmVuZGw7CisgIH0KKworICB0cnkgeworICAgIGZ1bjMoKTsK KyAgfSBjYXRjaChpbnQgJmV4KSB7CisgICAgc3RkOjpjZXJyIDw8ICJzeW50aCBjYXVnaHQgZG91 YmxlIGluZGlyZWN0OiAiIDw8IGV4IDw8IHN0ZDo6ZW5kbDsKKyAgfQorCisgIHN0ZDo6Y2VyciA8 PCAiZW5kIG1haW4iIDw8IHN0ZDo6ZW5kbDsKKyAgcmV0dXJuIDA7Cit9CisKKy8vIHsgZGctb3V0 cHV0ICJjdXN0b20gc3RkOjpoYW5kbGVfY29udHJhY3RfdmlvbGF0aW9uIGNhbGxlZDogMzAgLiov Y29udHJhY3RzMTUuQyhcbnxcclxufFxyKSoiIH0KKy8vIHsgZGctb3V0cHV0ICJzeW50aCBjYXVn aHQgZGlyZWN0OiAtMzAoXG58XHJcbnxccikqIiB9CisvLyB7IGRnLW91dHB1dCAiY3VzdG9tIHN0 ZDo6aGFuZGxlX2NvbnRyYWN0X3Zpb2xhdGlvbiBjYWxsZWQ6IDE4IC4qL2NvbnRyYWN0czE1LkMo XG58XHJcbnxccikqIiB9CisvLyB7IGRnLW91dHB1dCAidGVybWluYXRlIGNhbGxlZCBhZnRlciB0 aHJvd2luZyBhbiBpbnN0YW5jZSBvZiAuaW50LihcbnxcclxufFxyKSoiIH0KKy8vIHsgZGctc2hv dWxkZmFpbCAidGhyb3dpbmcgaW4gbm9leGNlcHQiIH0KKwpkaWZmIC0tZ2l0IGEvZ2NjL3Rlc3Rz dWl0ZS9nKysuZGcvY29udHJhY3RzL2NvbnRyYWN0czE2LkMgYi9nY2MvdGVzdHN1aXRlL2crKy5k Zy9jb250cmFjdHMvY29udHJhY3RzMTYuQwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw MDAwMDAwMC4uMWM3MDU0NTA3ZjIKLS0tIC9kZXYvbnVsbAorKysgYi9nY2MvdGVzdHN1aXRlL2cr Ky5kZy9jb250cmFjdHMvY29udHJhY3RzMTYuQwpAQCAtMCwwICsxLDM0IEBACisvLyBlbnN1cmUg dGhhdCBleGNlcHRpb25zIHRocm93biBpbnNpZGUgYSBjdXN0b20gY29udHJhY3QgdmlvbGF0aW9u IGhhbmRsZXIKKy8vIGFyZSBub3QgY2F0Y2hhYmxlIHVwIHRoZSBjYWxsIHN0YWNrIGV2ZW4gd2hl biBjb250aW51ZSBtb2RlIGlzIG9mZgorLy8geyBkZy1kbyBydW4gfQorLy8geyBkZy1vcHRpb25z ICItc3RkPWMrKzJhIC1mY29udHJhY3RzIiB9CisjaW5jbHVkZSA8aW9zdHJlYW0+CisjaW5jbHVk ZSA8ZXhwZXJpbWVudGFsL2NvbnRyYWN0PgorCit2b2lkIGhhbmRsZV9jb250cmFjdF92aW9sYXRp b24oY29uc3Qgc3RkOjpleHBlcmltZW50YWw6OmNvbnRyYWN0X3Zpb2xhdGlvbiAmdmlvbGF0aW9u KSB7CisgIHN0ZDo6Y2VyciA8PCAiY3VzdG9tIHN0ZDo6aGFuZGxlX2NvbnRyYWN0X3Zpb2xhdGlv biBjYWxsZWQ6IgorICAgIDw8ICIgIiA8PCB2aW9sYXRpb24ubGluZV9udW1iZXIoKQorICAgIDw8 ICIgIiA8PCB2aW9sYXRpb24uZmlsZV9uYW1lKCkKKyAgICA8PCBzdGQ6OmVuZGw7CisgIHRocm93 IC0oaW50KXZpb2xhdGlvbi5saW5lX251bWJlcigpOworfQorCitpbnQgZnVuKCkgeworICBpbnQg eCA9IDA7CisgIFtbIGFzc2VydDogeCA8IDAgXV07CisgIHJldHVybiAwOworfQorCitpbnQgbWFp bihpbnQsIGNoYXIqKikgeworICB0cnkgeworICAgIGZ1bigpOworICB9IGNhdGNoKGludCAmZXgp IHsKKyAgICBzdGQ6OmNlcnIgPDwgInN5bnRoIGNhdWdodCBpbmRpcmVjdDogIiA8PCBleCA8PCBz dGQ6OmVuZGw7CisgIH0KKworICByZXR1cm4gMDsKK30KKworLy8geyBkZy1vdXRwdXQgImN1c3Rv bSBzdGQ6OmhhbmRsZV9jb250cmFjdF92aW9sYXRpb24gY2FsbGVkOiAxOCAuKi9jb250cmFjdHMx Ni5DKFxufFxyXG58XHIpKiIgfQorLy8geyBkZy1vdXRwdXQgInN5bnRoIGNhdWdodCBpbmRpcmVj dDogLTE4KFxufFxyXG58XHIpKiIgfQorCmRpZmYgLS1naXQgYS9nY2MvdGVzdHN1aXRlL2crKy5k Zy9jb250cmFjdHMvY29udHJhY3RzMTcuQyBiL2djYy90ZXN0c3VpdGUvZysrLmRnL2NvbnRyYWN0 cy9jb250cmFjdHMxNy5DCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi5k MTY1YmIwNTMxNQotLS0gL2Rldi9udWxsCisrKyBiL2djYy90ZXN0c3VpdGUvZysrLmRnL2NvbnRy YWN0cy9jb250cmFjdHMxNy5DCkBAIC0wLDAgKzEsMzUgQEAKKy8vIGVuc3VyZSB0aGF0IGV4Y2Vw dGlvbnMgdGhyb3duIGluc2lkZSBhIGN1c3RvbSBjb250cmFjdCB2aW9sYXRpb24gaGFuZGxlcgor Ly8gYXJlIG5vdCBjYXRjaGFibGUgdXAgdGhlIGNhbGwgc3RhY2sgd2hlbiBjb250aW51ZSBtb2Rl IGlzIG9mZiBhbmQgdGhlCisvLyBhc3NlcnQgZmFpbHMgaW4gYSBub2V4Y2VwdCBmdW5jdGlvbgor Ly8geyBkZy1kbyBydW4gfQorLy8geyBkZy1vcHRpb25zICItc3RkPWMrKzJhIC1mY29udHJhY3Rz IiB9CisjaW5jbHVkZSA8aW9zdHJlYW0+CisjaW5jbHVkZSA8ZXhwZXJpbWVudGFsL2NvbnRyYWN0 PgorCit2b2lkIGhhbmRsZV9jb250cmFjdF92aW9sYXRpb24oY29uc3Qgc3RkOjpleHBlcmltZW50 YWw6OmNvbnRyYWN0X3Zpb2xhdGlvbiAmdmlvbGF0aW9uKSB7CisgIHN0ZDo6Y2VyciA8PCAiY3Vz dG9tIHN0ZDo6aGFuZGxlX2NvbnRyYWN0X3Zpb2xhdGlvbiBjYWxsZWQ6IgorICAgIDw8ICIgIiA8 PCB2aW9sYXRpb24ubGluZV9udW1iZXIoKQorICAgIDw8ICIgIiA8PCB2aW9sYXRpb24uZmlsZV9u YW1lKCkKKyAgICA8PCBzdGQ6OmVuZGw7CisgIHRocm93IC12aW9sYXRpb24ubGluZV9udW1iZXIo KTsKK30KKworaW50IGZ1bigpIG5vZXhjZXB0IHsKKyAgaW50IHggPSAwOworICBbWyBhc3NlcnQ6 IHggPCAwIF1dOworICByZXR1cm4gMDsKK30KKworaW50IG1haW4oaW50LCBjaGFyKiopIHsKKyAg dHJ5IHsKKyAgICBmdW4oKTsKKyAgfSBjYXRjaChpbnQgJmV4KSB7CisgICAgc3RkOjpjZXJyIDw8 ICJzeW50aCBjYXVnaHQgaW5kaXJlY3Q6ICIgPDwgZXggPDwgc3RkOjplbmRsOworICB9CisKKyAg cmV0dXJuIDA7Cit9CisKKy8vIHsgZGctb3V0cHV0ICJjdXN0b20gc3RkOjpoYW5kbGVfY29udHJh Y3RfdmlvbGF0aW9uIGNhbGxlZDogMTkgLiovY29udHJhY3RzMTcuQyhcbnxcclxufFxyKSoiIH0K Ky8vIHsgZGctc2hvdWxkZmFpbCAidGhyb3dpbmcgaW4gbm9leGNlcHQiIH0KKwpkaWZmIC0tZ2l0 IGEvZ2NjL3Rlc3RzdWl0ZS9nKysuZGcvY29udHJhY3RzL2NvbnRyYWN0czE4LkMgYi9nY2MvdGVz dHN1aXRlL2crKy5kZy9jb250cmFjdHMvY29udHJhY3RzMTguQwpuZXcgZmlsZSBtb2RlIDEwMDY0 NAppbmRleCAwMDAwMDAwMDAwMC4uZTgxNjNiYTRhYjIKLS0tIC9kZXYvbnVsbAorKysgYi9nY2Mv dGVzdHN1aXRlL2crKy5kZy9jb250cmFjdHMvY29udHJhY3RzMTguQwpAQCAtMCwwICsxLDE1IEBA CisvLyBjaGVjayB0aGF0IGEgdmFsaWQgcHJvZ3JhbSB1c2luZyBhc3NlcnRpb25zIGNvbXBpbGVz IGFuZCBydW5zCisvLyAgIGVuc3VyZSBhbiBheGlvbSB3aXRoIGEgZmFpbGluZyBwcmVkaWNhdGUg ZG9lc24ndCBwcmV2ZW50IGEgc3VjY2Vzc2Z1bCBydW4KKy8vICAgKGF4aW9tIGxldmVsIGNvbnRy YWN0cyBhcmUgbmV2ZXIgY2hlY2tlZCBhdCBydW50aW1lKQorLy8geyBkZy1kbyBydW4gfQorLy8g eyBkZy1vcHRpb25zICItc3RkPWMrKzJhIC1mY29udHJhY3RzIC1mY29udHJhY3Qtcm9sZT1jdXN0 b206bmV2ZXIsaWdub3JlLGlnbm9yZSIgfQorCitpbnQgbWFpbigpCit7CisgIGludCB4ID0gMTsK KyAgW1thc3NlcnQgYXhpb206IHggPCAwXV07CisgIFtbYXNzZXJ0ICVjdXN0b206IHggPiAwXV07 CisgIFtbYXNzZXJ0IGF1ZGl0ICVjdXN0b206IHggPCAwXV07CisgIHJldHVybiAwOworfQorCmRp ZmYgLS1naXQgYS9nY2MvdGVzdHN1aXRlL2crKy5kZy9jb250cmFjdHMvY29udHJhY3RzMTkuQyBi L2djYy90ZXN0c3VpdGUvZysrLmRnL2NvbnRyYWN0cy9jb250cmFjdHMxOS5DCm5ldyBmaWxlIG1v ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi40YThiNDNhMzE4NgotLS0gL2Rldi9udWxsCisr KyBiL2djYy90ZXN0c3VpdGUvZysrLmRnL2NvbnRyYWN0cy9jb250cmFjdHMxOS5DCkBAIC0wLDAg KzEsMTkgQEAKKy8vIGNoZWNrIHRoYXQgYSB2YWxpZCBwcm9ncmFtIHVzaW5nIGFzc2VydGlvbnMg Y29tcGlsZXMgYW5kIHJ1bnMKKy8vICAgZW5zdXJlIGFuIGF4aW9tIHdpdGggYSBmYWlsaW5nIHBy ZWRpY2F0ZSBkb2Vzbid0IHByZXZlbnQgYSBzdWNjZXNzZnVsIHJ1bgorLy8gICAoYXhpb20gbGV2 ZWwgY29udHJhY3RzIGFyZSBuZXZlciBjaGVja2VkIGF0IHJ1bnRpbWUpCisvLyB7IGRnLWRvIHJ1 biB9CisvLyB7IGRnLW9wdGlvbnMgIi1zdGQ9YysrMmEgLWZjb250cmFjdHMgLWZjb250cmFjdC1y b2xlPWN1c3RvbTptYXliZSxtYXliZSxpZ25vcmUiIH0KKworaW50IG1haW4oKQoreworICBpbnQg eCA9IDEwOworICBbW2Fzc2VydCBheGlvbTogeCA8IDBdXTsKKyAgW1thc3NlcnQgJWN1c3RvbTog eCA8IDBdXTsKKyAgW1thc3NlcnQgYXVkaXQgJWN1c3RvbTogeCA8IDFdXTsKKyAgW1thc3NlcnQg YXhpb20gJWN1c3RvbTogeCA8IDFdXTsKKyAgcmV0dXJuIDA7Cit9CisKKy8vIHsgZGctb3V0cHV0 ICJkZWZhdWx0IHN0ZDo6aGFuZGxlX2NvbnRyYWN0X3Zpb2xhdGlvbiBjYWxsZWQ6IC4qLkMgMTEg bWFpbiAuKihcbnxcclxufFxyKSoiIH0KKy8vIHsgZGctb3V0cHV0ICJkZWZhdWx0IHN0ZDo6aGFu ZGxlX2NvbnRyYWN0X3Zpb2xhdGlvbiBjYWxsZWQ6IC4qLkMgMTIgbWFpbiAuKihcbnxcclxufFxy KSoiIH0KKwpkaWZmIC0tZ2l0IGEvZ2NjL3Rlc3RzdWl0ZS9nKysuZGcvY29udHJhY3RzL2NvbnRy YWN0czIuQyBiL2djYy90ZXN0c3VpdGUvZysrLmRnL2NvbnRyYWN0cy9jb250cmFjdHMyLkMKbmV3 IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLjk1MzVlMDc3ZDM2Ci0tLSAvZGV2 L251bGwKKysrIGIvZ2NjL3Rlc3RzdWl0ZS9nKysuZGcvY29udHJhY3RzL2NvbnRyYWN0czIuQwpA QCAtMCwwICsxLDEzIEBACisvLyBjaGVjayB0aGF0IGEgdmFsaWQgcHJvZ3JhbSB1c2luZyBhc3Nl cnRpb25zIGNvbXBpbGVzIGFuZCBydW5zCisvLyAgIGVuc3VyZSBhbiBheGlvbSB3aXRoIGEgZmFp bGluZyBwcmVkaWNhdGUgZG9lc24ndCBwcmV2ZW50IGEgc3VjY2Vzc2Z1bCBydW4KKy8vICAgKGF4 aW9tIGxldmVsIGNvbnRyYWN0cyBhcmUgbmV2ZXIgY2hlY2tlZCBhdCBydW50aW1lKQorLy8geyBk Zy1kbyBydW4gfQorLy8geyBkZy1vcHRpb25zICItc3RkPWMrKzJhIC1mY29udHJhY3RzIiB9CisK K2ludCBtYWluKCkKK3sKKyAgaW50IHggPSAxOworICBbW2Fzc2VydCBheGlvbTogeCA8IDBdXTsK KyAgW1thc3NlcnQgZGVmYXVsdDogeCA+IDBdXTsKKyAgcmV0dXJuIDA7Cit9CmRpZmYgLS1naXQg YS9nY2MvdGVzdHN1aXRlL2crKy5kZy9jb250cmFjdHMvY29udHJhY3RzMjAuQyBiL2djYy90ZXN0 c3VpdGUvZysrLmRnL2NvbnRyYWN0cy9jb250cmFjdHMyMC5DCm5ldyBmaWxlIG1vZGUgMTAwNjQ0 CmluZGV4IDAwMDAwMDAwMDAwLi5hZGNlNWQ3MGQ0MAotLS0gL2Rldi9udWxsCisrKyBiL2djYy90 ZXN0c3VpdGUvZysrLmRnL2NvbnRyYWN0cy9jb250cmFjdHMyMC5DCkBAIC0wLDAgKzEsMTEgQEAK Ky8vIHRlc3QgdGhhdCBjb250cmFjdCBhdHRyaWJ1dGVzIGNhdXNlIGVycm9ycyBwcmUtYysrMmEK Ky8vIHsgZGctZG8gY29tcGlsZSB7IHRhcmdldCBjKysxN19vbmx5IH0gfQorCitpbnQgZnVuKGlu dCBhKQorICBbWyBwcmU6IGEgPiAwIF1dIC8vIHsgZGctZXJyb3IgImNvbnRyYWN0cyBhcmUgb25s eSBhdmFpbGFibGUgd2l0aCAuLWZjb250cmFjdHMuIiB9CisgIFtbIHBvc3QgcjogciA8IDAgXV0g Ly8geyBkZy1lcnJvciAiY29udHJhY3RzIGFyZSBvbmx5IGF2YWlsYWJsZSB3aXRoIC4tZmNvbnRy YWN0cy4iIH0KK3sKKyAgW1sgYXNzZXJ0OiBhICE9IDAgXV07IC8vIHsgZGctZXJyb3IgImNvbnRy YWN0cyBhcmUgb25seSBhdmFpbGFibGUgd2l0aCAuLWZjb250cmFjdHMuIiB9CisgIHJldHVybiAt YTsKK30KKwpkaWZmIC0tZ2l0IGEvZ2NjL3Rlc3RzdWl0ZS9nKysuZGcvY29udHJhY3RzL2NvbnRy YWN0czIyLkMgYi9nY2MvdGVzdHN1aXRlL2crKy5kZy9jb250cmFjdHMvY29udHJhY3RzMjIuQwpu ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uOTFlMzJiOWQ5YjIKLS0tIC9k ZXYvbnVsbAorKysgYi9nY2MvdGVzdHN1aXRlL2crKy5kZy9jb250cmFjdHMvY29udHJhY3RzMjIu QwpAQCAtMCwwICsxLDMyIEBACisvLyBlbnN1cmUgYSBkZWZhdWx0IGxldmVsIGFzc2VydCB3aXRo IGEgZmFpbGluZyBwcmVkaWNhdGUgZG9lcyBub3QgZ2VuZXJhdGUgYW4KKy8vIGVycm9yIGR1cmlu ZyBydW50aW1lIHdoZW4gdGhlIGNvbnRyYWN0cyBtb2RlIGlzIG9mZgorLy8geyBkZy1kbyBydW4g fQorLy8geyBkZy1vcHRpb25zICItc3RkPWMrKzJhIC1mY29udHJhY3RzIC1mY29udHJhY3QtbW9k ZT1vZmYiIH0KKy8vIHsgZGctb3V0cHV0ICJyZXR1cm5pbmcgZnJvbSBtYWluIiB9CisjaW5jbHVk ZSA8Y3N0ZGlvPgorCitpbnQgY29uc3RleHByIGYoKQoreworICBjb25zdGV4cHIgaW50IHggPSAx OworICBbW2Fzc2VydCBkZWZhdWx0OiB4IDwgMF1dOworICByZXR1cm4geDsKK30KKwordGVtcGxh dGU8dHlwZW5hbWUgVD4gaW50IGsoKQoreworICBpbnQgeCA9IDE7CisgIFtbYXNzZXJ0IGRlZmF1 bHQ6IHggPCAwXV07CisgIHJldHVybiB4OworfQorCisKK2ludCBtYWluKCkKK3sKKyAgaW50IHgg PSAxOworICBbW2Fzc2VydCBkZWZhdWx0OiB4IDwgMF1dOworICBjb25zdGV4cHIgaW50IHgyID0g ZigpOworICBpbnQgeDMgPSBrPGludD4oKTsKKworICBwcmludGYgKCJyZXR1cm5pbmcgZnJvbSBt YWluXG4iKTsKKyAgcmV0dXJuIDA7Cit9CmRpZmYgLS1naXQgYS9nY2MvdGVzdHN1aXRlL2crKy5k Zy9jb250cmFjdHMvY29udHJhY3RzMjQuQyBiL2djYy90ZXN0c3VpdGUvZysrLmRnL2NvbnRyYWN0 cy9jb250cmFjdHMyNC5DCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi43 MGE1NGY5NWE5MwotLS0gL2Rldi9udWxsCisrKyBiL2djYy90ZXN0c3VpdGUvZysrLmRnL2NvbnRy YWN0cy9jb250cmFjdHMyNC5DCkBAIC0wLDAgKzEsMTUgQEAKKy8vIGNoZWNrIHRoYXQgYSB2YWxp ZCBwcm9ncmFtIHVzaW5nIGFzc2VydGlvbnMgY29tcGlsZXMgYW5kIHJ1bnMKKy8vICAgZW5zdXJl IGFuIGF4aW9tIHdpdGggYSBmYWlsaW5nIHByZWRpY2F0ZSBkb2Vzbid0IHByZXZlbnQgYSBzdWNj ZXNzZnVsIHJ1bgorLy8gICAoYXhpb20gbGV2ZWwgY29udHJhY3RzIGFyZSBuZXZlciBjaGVja2Vk IGF0IHJ1bnRpbWUpCisvLyB7IGRnLWRvIHJ1biB9CisvLyB7IGRnLW9wdGlvbnMgIi1zdGQ9Yysr MmEgLWZjb250cmFjdHMgLWZjb250cmFjdC1zZW1hbnRpYz1kZWZhdWx0Om5ldmVyIC1mY29udHJh Y3Qtc2VtYW50aWM9YXVkaXQ6aWdub3JlIC1mY29udHJhY3Qtc2VtYW50aWM9YXhpb206aWdub3Jl IiB9CisKK2ludCBtYWluKCkKK3sKKyAgaW50IHggPSAxOworICBbW2Fzc2VydCBheGlvbTogeCA8 IDBdXTsKKyAgW1thc3NlcnQ6IHggPiAwXV07CisgIFtbYXNzZXJ0IGF1ZGl0OiB4IDwgMF1dOwor ICByZXR1cm4gMDsKK30KKwpkaWZmIC0tZ2l0IGEvZ2NjL3Rlc3RzdWl0ZS9nKysuZGcvY29udHJh Y3RzL2NvbnRyYWN0czI1LkMgYi9nY2MvdGVzdHN1aXRlL2crKy5kZy9jb250cmFjdHMvY29udHJh Y3RzMjUuQwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uMDEyMTc4MDdi YzEKLS0tIC9kZXYvbnVsbAorKysgYi9nY2MvdGVzdHN1aXRlL2crKy5kZy9jb250cmFjdHMvY29u dHJhY3RzMjUuQwpAQCAtMCwwICsxLDU3IEBACisvLyBlbnN1cmUgdGhhdCBwYXNzaW5nIGFzc2Vy dHMgZG8gbm90IGFmZmVjdCBjb25zdGV4cHIgZnVuY3Rpb25zCisvLyBlbnN1cmUgdGhhdCBmYWls aW5nIGFzc2VydHMgZ2VuZXJhdGUgYW4gZXJyb3IgYXQgcnVudGltZSBpbiBjb25zdGV4cHIgZnVu Y3MKKy8vIHsgZGctZG8gcnVuIH0KKy8vIHsgZGctb3B0aW9ucyAiLXN0ZD1jKysyYSAtZmNvbnRy YWN0cyAtZmNvbnRyYWN0LWNvbnRpbnVhdGlvbi1tb2RlPW9uIiB9CisKK2NvbnN0ZXhwciBpbnQg d2Z1bihpbnQgYSkgeworICBbW2Fzc2VydDogYSA+IDBdXTsKKyAgcmV0dXJuIGE7Cit9CisKK2Nv bnN0ZXhwciBpbnQgZmZ1bihpbnQgYSkgeworICBbW2Fzc2VydDogYSA+IDBdXTsKKyAgcmV0dXJu IGE7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+Citjb25zdGV4cHIgaW50IHRmdW4oVCBhKSB7 CisgIFtbYXNzZXJ0OiBhID4gMF1dOworICByZXR1cm4gYTsKK30KKwordGVtcGxhdGU8dHlwZW5h bWUgVD4KK2NvbnN0ZXhwciBpbnQgd3RmdW4oVCBhKSB7CisgIFtbYXNzZXJ0OiBhID4gMF1dOwor ICByZXR1cm4gYTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgVD4KK2NvbnN0ZXhwciBpbnQgZnRm dW4oVCBhKSB7CisgIFtbYXNzZXJ0OiBhID4gMF1dOworICByZXR1cm4gYTsKK30KKworY29uc3Rl eHByIGludCBleHBsaWNpdGZuKGludCBhKSB7CisgIFtbYXNzZXJ0IGlnbm9yZTogYSA+IDBdXTsK KyAgW1thc3NlcnQgY2hlY2tfbWF5YmVfY29udGludWU6IGEgPiAwXV07CisgIHJldHVybiBhOwor fQorCitpbnQgbWFpbihpbnQsIGNoYXIgKiopIHsKKyAgaW50IGEgPSB3ZnVuKDEwKTsKKyAgaW50 IGIgPSBmZnVuKC0xMCk7CisgIGludCBjID0gd3RmdW4oMTApOworICBpbnQgZCA9IGZ0ZnVuKC0x MCk7CisKKyAgaW50IGUgPSBleHBsaWNpdGZuKC0xMCk7CisKKyAgaW50IHogPSBmdGZ1bigtMTAu MCk7CisKKyAgcmV0dXJuIDA7Cit9CisKKy8vIHsgZGctb3V0cHV0ICJkZWZhdWx0IHN0ZDo6aGFu ZGxlX2NvbnRyYWN0X3Zpb2xhdGlvbiBjYWxsZWQ6IC4qLkMgMTIgZmZ1biAuKihcbnxcclxufFxy KSoiIH0KKy8vIHsgZGctb3V0cHV0ICJkZWZhdWx0IHN0ZDo6aGFuZGxlX2NvbnRyYWN0X3Zpb2xh dGlvbiBjYWxsZWQ6IC4qLkMgMzAgZnRmdW48aW50PiAuKihcbnxcclxufFxyKSoiIH0KKy8vIHsg ZGctb3V0cHV0ICJkZWZhdWx0IHN0ZDo6aGFuZGxlX2NvbnRyYWN0X3Zpb2xhdGlvbiBjYWxsZWQ6 IC4qLkMgMzYgZXhwbGljaXRmbiAuKihcbnxcclxufFxyKSoiIH0KKy8vIHsgZGctb3V0cHV0ICJk ZWZhdWx0IHN0ZDo6aGFuZGxlX2NvbnRyYWN0X3Zpb2xhdGlvbiBjYWxsZWQ6IC4qLkMgMzAgZnRm dW48ZG91YmxlPiAuKihcbnxcclxufFxyKSoiIH0KKwpkaWZmIC0tZ2l0IGEvZ2NjL3Rlc3RzdWl0 ZS9nKysuZGcvY29udHJhY3RzL2NvbnRyYWN0czMuQyBiL2djYy90ZXN0c3VpdGUvZysrLmRnL2Nv bnRyYWN0cy9jb250cmFjdHMzLkMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAw MDAuLmVjYjlmZGIxZTY1Ci0tLSAvZGV2L251bGwKKysrIGIvZ2NjL3Rlc3RzdWl0ZS9nKysuZGcv Y29udHJhY3RzL2NvbnRyYWN0czMuQwpAQCAtMCwwICsxLDEzIEBACisvLyBlbnN1cmUgYSBkZWZh dWx0IGxldmVsIGFzc2VydCB3aXRoIGEgZmFpbGluZyBwcmVkaWNhdGUgZ2VuZXJhdGVzIGFuIGVy cm9yCisvLyBkdXJpbmcgcnVudGltZSB3aGVuIHRoZSBjb250cmFjdCBidWlsZCBsZXZlbCBpcyBk ZWZhdWx0CisvLyB7IGRnLWRvIHJ1biB9CisvLyB7IGRnLW9wdGlvbnMgIi1zdGQ9YysrMmEgLWZj b250cmFjdHMiIH0KKy8vIHsgZGctc2hvdWxkZmFpbCAiYXNzZXJ0IHZpb2xhdGlvbiIgfQorLy8g eyBkZy1vdXRwdXQgImRlZmF1bHQgc3RkOjpoYW5kbGVfY29udHJhY3RfdmlvbGF0aW9uIGNhbGxl ZCIgfQorCitpbnQgbWFpbigpCit7CisgIGludCB4ID0gMTsKKyAgW1thc3NlcnQgZGVmYXVsdDog eCA8IDBdXTsKKyAgcmV0dXJuIDA7Cit9CmRpZmYgLS1naXQgYS9nY2MvdGVzdHN1aXRlL2crKy5k Zy9jb250cmFjdHMvY29udHJhY3RzMzUuQyBiL2djYy90ZXN0c3VpdGUvZysrLmRnL2NvbnRyYWN0 cy9jb250cmFjdHMzNS5DCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi5k ZGQ4MDAyNWFmYwotLS0gL2Rldi9udWxsCisrKyBiL2djYy90ZXN0c3VpdGUvZysrLmRnL2NvbnRy YWN0cy9jb250cmFjdHMzNS5DCkBAIC0wLDAgKzEsNDcgQEAKKy8vIHsgZGctZG8gcnVuIH0KKy8v IHsgZGctb3B0aW9ucyAiLXN0ZD1jKysyYSAtZmNvbnRyYWN0cyAtZmNvbnRyYWN0LWNvbnRpbnVh dGlvbi1tb2RlPW9uIiB9CisjaW5jbHVkZSA8Y3N0ZGlvPgorCitzdHJ1Y3QgUworeworICB0ZW1w bGF0ZTx0eXBlbmFtZSBUPgorICBTKFQgYSkgW1sgcHJlOiBhID4gMCBdXSBbWyBwcmU6IGEgPiAx MCBdXTsKK307CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+CitTOjpTKFQgYSkKK3sKKyAgcHJpbnRm ICgiUzo6UyhUKTogJWRcbiIsIChpbnQpYSk7Cit9CisKK3N0cnVjdCBTMQoreworICB0ZW1wbGF0 ZTx0eXBlbmFtZSBUPgorICBTMShUIGEpIFtbIHByZTogYSA+IDAgXV0gW1sgcHJlOiBhID4gMTAg XV0KKyAgeworICAgIHByaW50ZiAoIlMxOjpTMShUKTogJWRcbiIsIChpbnQpYSk7CisgIH0KK307 CisKK2ludCBtYWluKGludCwgY2hhciAqKikgeworICBTIHN7LTF9OworICBTIHMyey0yLjV9Owor CisgIFMxIHMxXzF7LTN9OworICBTMSBzMV8yey00LjV9OworICByZXR1cm4gMDsKK30KKworLy8g eyBkZy1vdXRwdXQgImRlZmF1bHQgc3RkOjpoYW5kbGVfY29udHJhY3RfdmlvbGF0aW9uIGNhbGxl ZDogLiouQyA4IFM6OlM8aW50PiAuKihcbnxcclxufFxyKSoiIH0KKy8vIHsgZGctb3V0cHV0ICJk ZWZhdWx0IHN0ZDo6aGFuZGxlX2NvbnRyYWN0X3Zpb2xhdGlvbiBjYWxsZWQ6IC4qLkMgOCBTOjpT PGludD4gLiooXG58XHJcbnxccikqIiB9CisvLyB7IGRnLW91dHB1dCAiUzo6Uy5ULjogLTEoXG58 XHJcbnxccikqIiB9CisvLyB7IGRnLW91dHB1dCAiZGVmYXVsdCBzdGQ6OmhhbmRsZV9jb250cmFj dF92aW9sYXRpb24gY2FsbGVkOiAuKi5DIDggUzo6Uzxkb3VibGU+IC4qKFxufFxyXG58XHIpKiIg fQorLy8geyBkZy1vdXRwdXQgImRlZmF1bHQgc3RkOjpoYW5kbGVfY29udHJhY3RfdmlvbGF0aW9u IGNhbGxlZDogLiouQyA4IFM6OlM8ZG91YmxlPiAuKihcbnxcclxufFxyKSoiIH0KKy8vIHsgZGct b3V0cHV0ICJTOjpTLlQuOiAtMihcbnxcclxufFxyKSoiIH0KKy8vIHsgZGctb3V0cHV0ICJkZWZh dWx0IHN0ZDo6aGFuZGxlX2NvbnRyYWN0X3Zpb2xhdGlvbiBjYWxsZWQ6IC4qLkMgMjAgUzE6OlMx PGludD4gLiooXG58XHJcbnxccikqIiB9CisvLyB7IGRnLW91dHB1dCAiZGVmYXVsdCBzdGQ6Omhh bmRsZV9jb250cmFjdF92aW9sYXRpb24gY2FsbGVkOiAuKi5DIDIwIFMxOjpTMTxpbnQ+IC4qKFxu fFxyXG58XHIpKiIgfQorLy8geyBkZy1vdXRwdXQgIlMxOjpTMS5ULjogLTMoXG58XHJcbnxccikq IiB9CisvLyB7IGRnLW91dHB1dCAiZGVmYXVsdCBzdGQ6OmhhbmRsZV9jb250cmFjdF92aW9sYXRp b24gY2FsbGVkOiAuKi5DIDIwIFMxOjpTMTxkb3VibGU+IC4qKFxufFxyXG58XHIpKiIgfQorLy8g eyBkZy1vdXRwdXQgImRlZmF1bHQgc3RkOjpoYW5kbGVfY29udHJhY3RfdmlvbGF0aW9uIGNhbGxl ZDogLiouQyAyMCBTMTo6UzE8ZG91YmxlPiAuKihcbnxcclxufFxyKSoiIH0KKy8vIHsgZGctb3V0 cHV0ICJTMTo6UzEuVC46IC00KFxufFxyXG58XHIpKiIgfQorCmRpZmYgLS1naXQgYS9nY2MvdGVz dHN1aXRlL2crKy5kZy9jb250cmFjdHMvY29udHJhY3RzNC5DIGIvZ2NjL3Rlc3RzdWl0ZS9nKysu ZGcvY29udHJhY3RzL2NvbnRyYWN0czQuQwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw MDAwMDAwMC4uYTQzZmI5Zjk4ZTIKLS0tIC9kZXYvbnVsbAorKysgYi9nY2MvdGVzdHN1aXRlL2cr Ky5kZy9jb250cmFjdHMvY29udHJhY3RzNC5DCkBAIC0wLDAgKzEsMTEgQEAKKy8vIGVuc3VyZSBh biBhdWRpdCBsZXZlbCBhc3NlcnQgd2l0aCBhIGZhaWxpbmcgcHJlZGljYXRlIGRvZXMgbm90IGdl bmVyYXRlIGFuCisvLyBlcnJvciBkdXJpbmcgcnVudGltZSB3aGVuIHRoZSBjb250cmFjdCBidWls ZCBsZXZlbCBpcyBkZWZhdWx0CisvLyB7IGRnLWRvIHJ1biB9CisvLyB7IGRnLW9wdGlvbnMgIi1z dGQ9YysrMmEgLWZjb250cmFjdHMiIH0KKworaW50IG1haW4oKQoreworICBpbnQgeCA9IDE7Cisg IFtbYXNzZXJ0IGF1ZGl0OiB4IDwgMF1dOworICByZXR1cm4gMDsKK30KZGlmZiAtLWdpdCBhL2dj Yy90ZXN0c3VpdGUvZysrLmRnL2NvbnRyYWN0cy9jb250cmFjdHM1LkMgYi9nY2MvdGVzdHN1aXRl L2crKy5kZy9jb250cmFjdHMvY29udHJhY3RzNS5DCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4 IDAwMDAwMDAwMDAwLi4wZmEwZWM4M2JlNQotLS0gL2Rldi9udWxsCisrKyBiL2djYy90ZXN0c3Vp dGUvZysrLmRnL2NvbnRyYWN0cy9jb250cmFjdHM1LkMKQEAgLTAsMCArMSwxMyBAQAorLy8gZW5z dXJlIGFuIGF1ZGl0IGxldmVsIGFzc2VydCB3aXRoIGEgZmFpbGluZyBwcmVkaWNhdGUgZ2VuZXJh dGVzIGFuIGVycm9yCisvLyBkdXJpbmcgcnVudGltZSB3aGVuIHRoZSBjb250cmFjdCBidWlsZCBs ZXZlbCBpcyBhdWRpdAorLy8geyBkZy1kbyBydW4gfQorLy8geyBkZy1vcHRpb25zICItc3RkPWMr KzJhIC1mY29udHJhY3RzIC1mY29udHJhY3QtYnVpbGQtbGV2ZWw9YXVkaXQiIH0KKy8vIHsgZGct c2hvdWxkZmFpbCAiYXNzZXJ0IHZpb2xhdGlvbiIgfQorLy8geyBkZy1vdXRwdXQgImRlZmF1bHQg c3RkOjpoYW5kbGVfY29udHJhY3RfdmlvbGF0aW9uIGNhbGxlZCIgfQorCitpbnQgbWFpbigpCit7 CisgIGludCB4ID0gMTsKKyAgW1thc3NlcnQgYXVkaXQ6IHggPCAwXV07CisgIHJldHVybiAwOwor fQpkaWZmIC0tZ2l0IGEvZ2NjL3Rlc3RzdWl0ZS9nKysuZGcvY29udHJhY3RzL2NvbnRyYWN0czYu QyBiL2djYy90ZXN0c3VpdGUvZysrLmRnL2NvbnRyYWN0cy9jb250cmFjdHM2LkMKbmV3IGZpbGUg bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLjU5YzAxMGU1ZDM5Ci0tLSAvZGV2L251bGwK KysrIGIvZ2NjL3Rlc3RzdWl0ZS9nKysuZGcvY29udHJhY3RzL2NvbnRyYWN0czYuQwpAQCAtMCww ICsxLDExIEBACisvLyBlbnN1cmUgYSBkZWZhdWx0IGxldmVsIGFzc2VydCB3aXRoIGEgZmFpbGlu ZyBwcmVkaWNhdGUgZG9lcyBub3QgZ2VuZXJhdGUgYW4KKy8vIGVycm9yIGR1cmluZyBydW50aW1l IHdoZW4gdGhlIGNvbnRyYWN0IGJ1aWxkIGxldmVsIGlzIG9mZgorLy8geyBkZy1kbyBydW4gfQor Ly8geyBkZy1vcHRpb25zICItc3RkPWMrKzJhIC1mY29udHJhY3RzIC1mY29udHJhY3QtYnVpbGQt bGV2ZWw9b2ZmIiB9CisKK2ludCBtYWluKCkKK3sKKyAgaW50IHggPSAxOworICBbW2Fzc2VydCBk ZWZhdWx0OiB4IDwgMF1dOworICByZXR1cm4gMDsKK30KZGlmZiAtLWdpdCBhL2djYy90ZXN0c3Vp dGUvZysrLmRnL2NvbnRyYWN0cy9jb250cmFjdHM3LkMgYi9nY2MvdGVzdHN1aXRlL2crKy5kZy9j b250cmFjdHMvY29udHJhY3RzNy5DCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAw MDAwLi5lYWFkOGYwZmM5ZAotLS0gL2Rldi9udWxsCisrKyBiL2djYy90ZXN0c3VpdGUvZysrLmRn L2NvbnRyYWN0cy9jb250cmFjdHM3LkMKQEAgLTAsMCArMSwxNCBAQAorLy8gZW5zdXJlIGEgZGVm YXVsdCBsZXZlbCBhc3NlcnQgd2l0aCBhIGZhaWxpbmcgcHJlZGljYXRlIGRvZXMgZ2VuZXJhdGVz IGFuCisvLyBlcnJvciBkdXJpbmcgcnVudGltZSBidXQgbGV0cyB0aGUgcHJvZ3JhbSBjb250aW51 ZSBhbmQgY29tcGxldGUKKy8vIHN1Y2Nlc3NmdWxseSB3aGVuIHRoZSBjb250cmFjdCBidWlsZCBs ZXZlbCBpcyBkZWZhdWx0IGJ1dCBjb250aW51YXRpb24gb24KKy8vIGNvbnRyYWN0IGZhaWx1cmUg aXMgc3dpdGNoZWQgb24KKy8vIHsgZGctZG8gcnVuIH0KKy8vIHsgZGctb3B0aW9ucyAiLXN0ZD1j KysyYSAtZmNvbnRyYWN0cyAtZmNvbnRyYWN0LWNvbnRpbnVhdGlvbi1tb2RlPW9uIiB9CisvLyB7 IGRnLW91dHB1dCAiZGVmYXVsdCBzdGQ6OmhhbmRsZV9jb250cmFjdF92aW9sYXRpb24gY2FsbGVk IiB9CisKK2ludCBtYWluKCkKK3sKKyAgaW50IHggPSAxOworICBbW2Fzc2VydCBkZWZhdWx0OiB4 IDwgMF1dOworICByZXR1cm4gMDsKK30KZGlmZiAtLWdpdCBhL2djYy90ZXN0c3VpdGUvZysrLmRn L2NvbnRyYWN0cy9jb250cmFjdHM4LkMgYi9nY2MvdGVzdHN1aXRlL2crKy5kZy9jb250cmFjdHMv Y29udHJhY3RzOC5DCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi45Yzhh NmI1ZDhjNAotLS0gL2Rldi9udWxsCisrKyBiL2djYy90ZXN0c3VpdGUvZysrLmRnL2NvbnRyYWN0 cy9jb250cmFjdHM4LkMKQEAgLTAsMCArMSw0MyBAQAorLy8gZ2VuZXJpYyBhc3NlcnQgY29udHJh Y3QgcGFyc2luZyBjaGVja3MKKy8vICAgZW5zdXJlIHRoYXQgZXhpc3RpbmcgZ2VuZXJhbGl6ZWQg YXR0cmlidXRlIHBhcnNpbmcgaXMgbm90IGludGVmZXJlZCB3aXRoCisvLyAgIGVuc3VyZSB0aGF0 IGFuIGFzc2VydCBjb250cmFjdCBjYW5ub3QgY2hhaW4gaW50byBhbiBlbXB0eSBhdHRyaWJ1dGUg bGlzdAorLy8gICBlbnN1cmUgdGhhdCBhbiBhdHRyaWJ1dGUgbGlzdCBjYW5ub3QgY2hhaW4gaW50 byBhbiBhc3NlcnQgY29udHJhY3QKKy8vIHsgZGctZG8gY29tcGlsZSB9CisvLyB7IGRnLW9wdGlv bnMgIi1zdGQ9YysrMmEgLWZjb250cmFjdHMiIH0KKworY29uc3RleHByIGJvb2wgZnVuKGludCB4 KSB7CisgIHJldHVybiB4IDwgMDsKK30KKworbmFtZXNwYWNlIHRucyB7CisgIGNvbnN0ZXhwciBi b29sIGYoaW50IHgpIHsKKyAgICByZXR1cm4geCA8IDA7CisgIH0KK30KKworYm9vbCBhc3NlcnQo aW50IHgpIHsKKyAgcmV0dXJuIHggPCAwOworfQorCitpbnQgbWFpbigpCit7CisgIGNvbnN0ZXhw ciBpbnQgeCA9IDE7CisgIFtbZnVuKHgpXV07IC8vIHsgZGctd2FybmluZyAiYXR0cmlidXRlcyBh dCB0aGUgYmVnaW5uaW5nIG9mIHN0YXRlbWVudCBhcmUgaWdub3JlZCIgfQorICBbW2Z1bih4KSwg YXNzZXJ0KHgpXV07IC8vIHsgZGctd2FybmluZyAiYXR0cmlidXRlcyBhdCB0aGUgYmVnaW5uaW5n IG9mIHN0YXRlbWVudCBhcmUgaWdub3JlZCIgfQorCisgIFtbYXNzZXJ0IGRlZmF1bHQ6IGZ1bih4 KSwgXV07IC8vIHsgZGctZXJyb3IgImV4cGVjdGVkICddJyIgfQorICBbW2Fzc2VydCBkZWZhdWx0 OiBmdW4oeCkgXV07CisKKyAgW1tmdW4oeCksIGFzc2VydCBkZWZhdWx0OiBmdW4oeCldXTsgLy8g eyBkZy1lcnJvciAiZXhwZWN0ZWQgLl0uIGJlZm9yZSAuZGVmYXVsdC4iIH0KKyAgLy8geyBkZy13 YXJuaW5nICJhdHRyaWJ1dGVzIGF0IHRoZSBiZWdpbm5pbmcgb2Ygc3RhdGVtZW50IGFyZSBpZ25v cmVkIiAiIiB7IHRhcmdldCAqLSotKiB9IC4tMSB9CisgIFtbZnVuKHgpLCBhc3NlcnQ6IGZ1bih4 KV1dOyAvLyB7IGRnLWVycm9yICJleHBlY3RlZCAuXS4gYmVmb3JlIC46LiB0b2tlbiIgfQorICAv LyB7IGRnLXdhcm5pbmcgImF0dHJpYnV0ZXMgYXQgdGhlIGJlZ2lubmluZyBvZiBzdGF0ZW1lbnQg YXJlIGlnbm9yZWQiICIiIHsgdGFyZ2V0ICotKi0qIH0gLi0xIH0KKyAgW1tmdW4oeCksIGFzc2Vy dCBmdW4oeCldXTsgLy8geyBkZy1lcnJvciAiZXhwZWN0ZWQgLl0uIGJlZm9yZSAuZnVuLiIgfQor ICAvLyB7IGRnLXdhcm5pbmcgImF0dHJpYnV0ZXMgYXQgdGhlIGJlZ2lubmluZyBvZiBzdGF0ZW1l bnQgYXJlIGlnbm9yZWQiICIiIHsgdGFyZ2V0ICotKi0qIH0gLi0xIH0KKyAgW1sgdXNpbmcgdG5z OiBmKHgpIF1dOyAvLyB7IGRnLXdhcm5pbmcgImF0dHJpYnV0ZXMgYXQgdGhlIGJlZ2lubmluZyBv ZiBzdGF0ZW1lbnQgYXJlIGlnbm9yZWQiIH0KKyAgW1sgdXNpbmcgdG5zOiBmKHgpLCBhc3NlcnQg ZGVmYXVsdDogZnVuKHgpIF1dOyAvLyB7IGRnLWVycm9yICJleHBlY3RlZCAuXS4gYmVmb3JlIC5k ZWZhdWx0LiIgfQorICAvLyB7IGRnLXdhcm5pbmcgImF0dHJpYnV0ZXMgYXQgdGhlIGJlZ2lubmlu ZyBvZiBzdGF0ZW1lbnQgYXJlIGlnbm9yZWQiICIiIHsgdGFyZ2V0ICotKi0qIH0gLi0xIH0KKyAg W1sgdXNpbmcgdG5zOiBmKHgpLCAsIGRlZmF1bHQ6IGZ1bih4KSBdXTsgLy8geyBkZy1lcnJvciAi ZXhwZWN0ZWQgLl0uIGJlZm9yZSAuOi4iIH0KKyAgLy8geyBkZy13YXJuaW5nICJhdHRyaWJ1dGVz IGF0IHRoZSBiZWdpbm5pbmcgb2Ygc3RhdGVtZW50IGFyZSBpZ25vcmVkIiAiIiB7IHRhcmdldCAq LSotKiB9IC4tMSB9CisgIHJldHVybiAwOworfQpkaWZmIC0tZ2l0IGEvZ2NjL3Rlc3RzdWl0ZS9n KysuZGcvY29udHJhY3RzL2NvbnRyYWN0czkuQyBiL2djYy90ZXN0c3VpdGUvZysrLmRnL2NvbnRy YWN0cy9jb250cmFjdHM5LkMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAu LmY1NjY2MjhlYzQ0Ci0tLSAvZGV2L251bGwKKysrIGIvZ2NjL3Rlc3RzdWl0ZS9nKysuZGcvY29u dHJhY3RzL2NvbnRyYWN0czkuQwpAQCAtMCwwICsxLDQ1IEBACisvLyBlbnN1cmUgdGhhdCBkZXBl bmRlbnQgYW5kIG5vbi1kZXBlbmRlbnQgYXNzZXJ0cyBpbnNpZGUgdGVtcGxhdGVkCisvLyBmdW5j dGlvbnMgcGFyc2Ugd2l0aG91dCBlcnJvciB3aGV0aGVyIHRoZSBmdW5jdGlvbiBpcyBpbnN0YXRp YXRlZCBvciBub3QKKy8vIGVuc3VyZSB0aGF0IGFzc2VydCBjb250cmFjdCBjaGVja3MgYXJlIGdl bmVyYXRlZCBpbnNpZGUgY2FsbGVkIHRlbXBsYXRlcworLy8gZW5zdXJlIHRoYXQgdGVtcGxhdGUg ZnVuY3Rpb25zIGNhbiBiZSB1c2VkIGFzIGFzc2VydCBwcmVkaWNhdGVzCisvLyB7IGRnLWRvIHJ1 biB9CisvLyB7IGRnLW9wdGlvbnMgIi1zdGQ9YysrMmEgLWZjb250cmFjdHMgLWZjb250cmFjdC1j b250aW51YXRpb24tbW9kZT1vbiIgfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPgoraW50IGZ1bjEo aW50IGEsIFQgYikKK3sKKyAgW1sgYXNzZXJ0OiBhID4gMCBdXTsKKyAgW1sgYXNzZXJ0OiAobG9u ZyBsb25nKWIgPiAwIF1dOworICByZXR1cm4gYSA+IDA7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1l IFQ+CitzdHJ1Y3QgdGVzdAoreworICBzdGF0aWMgaW50IGZ1bihpbnQgYSwgVCBiKSB7CisgICAg W1sgYXNzZXJ0OiBhID4gMCBdXTsKKyAgICBbWyBhc3NlcnQ6IGIgPiAwIF1dOworICAgIHJldHVy biBhID4gMDsKKyAgfQorfTsKKworaW50IG1haW4oKQoreworICBmdW4xKDEsIC0xKTsKKyAgZnVu MSgtMSwgMS4wKTsKKyAgZnVuMSgtMSwgInRlc3QiKTsKKworICBbWyBhc3NlcnQ6IGZ1bjEoLTEs IC01KSBdXTsKKyAgW1sgYXNzZXJ0OiB0ZXN0PGludD46OmZ1bigxMCwgLTYpIF1dOworICBbWyBh c3NlcnQ6IHRlc3Q8ZG91YmxlPjo6ZnVuKDEwLjAsIC03KSBdXTsKKyAgLy8gcmV0dXJuIDA7Cit9 CisKKy8vIHsgZGctb3V0cHV0ICJkZWZhdWx0IHN0ZDo6aGFuZGxlX2NvbnRyYWN0X3Zpb2xhdGlv biBjYWxsZWQ6IC4qLkMgMTIgZnVuMTxpbnQ+IC4qKFxufFxyXG58XHIpKiIgfQorLy8geyBkZy1v dXRwdXQgImRlZmF1bHQgc3RkOjpoYW5kbGVfY29udHJhY3RfdmlvbGF0aW9uIGNhbGxlZDogLiou QyAxMSBmdW4xPGRvdWJsZT4gLiooXG58XHJcbnxccikqIiB9CisvLyB7IGRnLW91dHB1dCAiZGVm YXVsdCBzdGQ6OmhhbmRsZV9jb250cmFjdF92aW9sYXRpb24gY2FsbGVkOiAuKi5DIDExIGZ1bjE8 Y29uc3QgY2hhci4+IC4qKFxufFxyXG58XHIpKiIgfQorLy8geyBkZy1vdXRwdXQgImRlZmF1bHQg c3RkOjpoYW5kbGVfY29udHJhY3RfdmlvbGF0aW9uIGNhbGxlZDogLiouQyAxMSBmdW4xPGludD4g LiooXG58XHJcbnxccikqIiB9CisvLyB7IGRnLW91dHB1dCAiZGVmYXVsdCBzdGQ6OmhhbmRsZV9j b250cmFjdF92aW9sYXRpb24gY2FsbGVkOiAuKi5DIDEyIGZ1bjE8aW50PiAuKihcbnxcclxufFxy KSoiIH0KKy8vIHsgZGctb3V0cHV0ICJkZWZhdWx0IHN0ZDo6aGFuZGxlX2NvbnRyYWN0X3Zpb2xh dGlvbiBjYWxsZWQ6IC4qLkMgMzIgbWFpbiAuKihcbnxcclxufFxyKSoiIH0KKy8vIHsgZGctb3V0 cHV0ICJkZWZhdWx0IHN0ZDo6aGFuZGxlX2NvbnRyYWN0X3Zpb2xhdGlvbiBjYWxsZWQ6IC4qLkMg MjEgdGVzdDxpbnQ+OjpmdW4gLiooXG58XHJcbnxccikqIiB9CisvLyB7IGRnLW91dHB1dCAiZGVm YXVsdCBzdGQ6OmhhbmRsZV9jb250cmFjdF92aW9sYXRpb24gY2FsbGVkOiAuKi5DIDIxIHRlc3Q8 ZG91YmxlPjo6ZnVuIC4qKFxufFxyXG58XHIpKiIgfQpkaWZmIC0tZ2l0IGEvZ2NjL3Rlc3RzdWl0 ZS9nKysuZGcvY29udHJhY3RzL2V4Y2VwdF9wcmVsb2FkX2hhbmRsZXIvYXNzZXJ0X2ZhaWwuY3Bw IGIvZ2NjL3Rlc3RzdWl0ZS9nKysuZGcvY29udHJhY3RzL2V4Y2VwdF9wcmVsb2FkX2hhbmRsZXIv YXNzZXJ0X2ZhaWwuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi4z ZGRhN2FjODRkNQotLS0gL2Rldi9udWxsCisrKyBiL2djYy90ZXN0c3VpdGUvZysrLmRnL2NvbnRy YWN0cy9leGNlcHRfcHJlbG9hZF9oYW5kbGVyL2Fzc2VydF9mYWlsLmNwcApAQCAtMCwwICsxLDIw IEBACisjaW5jbHVkZSA8aW9zdHJlYW0+CisjaW5jbHVkZSA8Y29udHJhY3Q+CisKK2ludCBmdW4o KSB7CisJaW50IHggPSAwOworCVtbIGFzc2VydDogeCA8IDAgXV07CisKKwlyZXR1cm4gMDsKK30K KworaW50IG1haW4oaW50IGFyZ2MsIGNoYXIqKikgeworCXRyeSB7CisJCWZ1bigpOworCX0gY2F0 Y2goaW50ICZleCkgeworCQlzdGQ6OmNlcnIgPDwgInN5bnRoIGNhdWdodCBpbmRpcmVjdDogIiA8 PCBleCA8PCBzdGQ6OmVuZGw7CisJfQorCisJcmV0dXJuIDA7Cit9CisKZGlmZiAtLWdpdCBhL2dj Yy90ZXN0c3VpdGUvZysrLmRnL2NvbnRyYWN0cy9leGNlcHRfcHJlbG9hZF9oYW5kbGVyL2hhbmRs ZV9jb250cmFjdF92aW9sYXRpb24uY3BwIGIvZ2NjL3Rlc3RzdWl0ZS9nKysuZGcvY29udHJhY3Rz L2V4Y2VwdF9wcmVsb2FkX2hhbmRsZXIvaGFuZGxlX2NvbnRyYWN0X3Zpb2xhdGlvbi5jcHAKbmV3 IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLmVjMDUxYjM5ZTVmCi0tLSAvZGV2 L251bGwKKysrIGIvZ2NjL3Rlc3RzdWl0ZS9nKysuZGcvY29udHJhY3RzL2V4Y2VwdF9wcmVsb2Fk X2hhbmRsZXIvaGFuZGxlX2NvbnRyYWN0X3Zpb2xhdGlvbi5jcHAKQEAgLTAsMCArMSwxNCBAQAor I2luY2x1ZGUgPGlvc3RyZWFtPgorI2luY2x1ZGUgPGNvbnRyYWN0PgorCit2b2lkIGhhbmRsZV9j b250cmFjdF92aW9sYXRpb24oY29uc3Qgc3RkOjpjb250cmFjdF92aW9sYXRpb24gJnZpb2xhdGlv bikgeworICBzdGQ6OmNlcnIgPDwgImN1c3RvbSBoYW5kbGVfY29udHJhY3RfdmlvbGF0aW9uOiAi IDw8IHN0ZDo6ZW5kbAorICAgIDw8ICIgbGluZV9udW1iZXI6ICIgPDwgdmlvbGF0aW9uLmxpbmVf bnVtYmVyKCkgPDwgc3RkOjplbmRsCisgICAgPDwgIiBmaWxlX25hbWU6ICIgPDwgdmlvbGF0aW9u LmZpbGVfbmFtZSgpIDw8IHN0ZDo6ZW5kbAorICAgIDw8ICIgZnVuY3Rpb25fbmFtZTogIiA8PCB2 aW9sYXRpb24uZnVuY3Rpb25fbmFtZSgpIDw8IHN0ZDo6ZW5kbAorICAgIDw8ICIgY29tbWVudDog IiA8PCB2aW9sYXRpb24uY29tbWVudCgpIDw8IHN0ZDo6ZW5kbAorICAgIDw8ICIgYXNzZXJ0aW9u X2xldmVsOiAiIDw8IHZpb2xhdGlvbi5hc3NlcnRpb25fbGV2ZWwoKSA8PCBzdGQ6OmVuZGwKKyAg ICA8PCBzdGQ6OmVuZGw7CisgIHRocm93IC0xOworfQorCmRpZmYgLS1naXQgYS9nY2MvdGVzdHN1 aXRlL2crKy5kZy9jb250cmFjdHMvbm9leGNlcHRfcHJlbG9hZF9oYW5kbGVyL2Fzc2VydF9mYWls LmNwcCBiL2djYy90ZXN0c3VpdGUvZysrLmRnL2NvbnRyYWN0cy9ub2V4Y2VwdF9wcmVsb2FkX2hh bmRsZXIvYXNzZXJ0X2ZhaWwuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAw MDAwLi44YWU5OGZiZTY2OAotLS0gL2Rldi9udWxsCisrKyBiL2djYy90ZXN0c3VpdGUvZysrLmRn L2NvbnRyYWN0cy9ub2V4Y2VwdF9wcmVsb2FkX2hhbmRsZXIvYXNzZXJ0X2ZhaWwuY3BwCkBAIC0w LDAgKzEsMjAgQEAKKyNpbmNsdWRlIDxpb3N0cmVhbT4KKyNpbmNsdWRlIDxjb250cmFjdD4KKwor aW50IGZ1bigpIG5vZXhjZXB0IHsKKwlpbnQgeCA9IDA7CisJW1sgYXNzZXJ0OiB4IDwgMCBdXTsK KworCXJldHVybiAwOworfQorCitpbnQgbWFpbihpbnQgYXJnYywgY2hhcioqKSB7CisJdHJ5IHsK KwkJZnVuKCk7CisJfSBjYXRjaChpbnQgJmV4KSB7CisJCXN0ZDo6Y2VyciA8PCAic3ludGggY2F1 Z2h0IGluZGlyZWN0OiAiIDw8IGV4IDw8IHN0ZDo6ZW5kbDsKKwl9CisKKwlyZXR1cm4gMDsKK30K KwpkaWZmIC0tZ2l0IGEvZ2NjL3Rlc3RzdWl0ZS9nKysuZGcvY29udHJhY3RzL25vZXhjZXB0X3By ZWxvYWRfaGFuZGxlci9oYW5kbGVfY29udHJhY3RfdmlvbGF0aW9uLmNwcCBiL2djYy90ZXN0c3Vp dGUvZysrLmRnL2NvbnRyYWN0cy9ub2V4Y2VwdF9wcmVsb2FkX2hhbmRsZXIvaGFuZGxlX2NvbnRy YWN0X3Zpb2xhdGlvbi5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAu LmVjMDUxYjM5ZTVmCi0tLSAvZGV2L251bGwKKysrIGIvZ2NjL3Rlc3RzdWl0ZS9nKysuZGcvY29u dHJhY3RzL25vZXhjZXB0X3ByZWxvYWRfaGFuZGxlci9oYW5kbGVfY29udHJhY3RfdmlvbGF0aW9u LmNwcApAQCAtMCwwICsxLDE0IEBACisjaW5jbHVkZSA8aW9zdHJlYW0+CisjaW5jbHVkZSA8Y29u dHJhY3Q+CisKK3ZvaWQgaGFuZGxlX2NvbnRyYWN0X3Zpb2xhdGlvbihjb25zdCBzdGQ6OmNvbnRy YWN0X3Zpb2xhdGlvbiAmdmlvbGF0aW9uKSB7CisgIHN0ZDo6Y2VyciA8PCAiY3VzdG9tIGhhbmRs ZV9jb250cmFjdF92aW9sYXRpb246ICIgPDwgc3RkOjplbmRsCisgICAgPDwgIiBsaW5lX251bWJl cjogIiA8PCB2aW9sYXRpb24ubGluZV9udW1iZXIoKSA8PCBzdGQ6OmVuZGwKKyAgICA8PCAiIGZp bGVfbmFtZTogIiA8PCB2aW9sYXRpb24uZmlsZV9uYW1lKCkgPDwgc3RkOjplbmRsCisgICAgPDwg IiBmdW5jdGlvbl9uYW1lOiAiIDw8IHZpb2xhdGlvbi5mdW5jdGlvbl9uYW1lKCkgPDwgc3RkOjpl bmRsCisgICAgPDwgIiBjb21tZW50OiAiIDw8IHZpb2xhdGlvbi5jb21tZW50KCkgPDwgc3RkOjpl bmRsCisgICAgPDwgIiBhc3NlcnRpb25fbGV2ZWw6ICIgPDwgdmlvbGF0aW9uLmFzc2VydGlvbl9s ZXZlbCgpIDw8IHN0ZDo6ZW5kbAorICAgIDw8IHN0ZDo6ZW5kbDsKKyAgdGhyb3cgLTE7Cit9CisK ZGlmZiAtLWdpdCBhL2djYy90ZXN0c3VpdGUvZysrLmRnL2NvbnRyYWN0cy9wcmVsb2FkX2hhbmRs ZXIvYXNzZXJ0X2ZhaWwuY3BwIGIvZ2NjL3Rlc3RzdWl0ZS9nKysuZGcvY29udHJhY3RzL3ByZWxv YWRfaGFuZGxlci9hc3NlcnRfZmFpbC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw MDAwMDAwMDAuLjBmODA3ZGIwNjI4Ci0tLSAvZGV2L251bGwKKysrIGIvZ2NjL3Rlc3RzdWl0ZS9n KysuZGcvY29udHJhY3RzL3ByZWxvYWRfaGFuZGxlci9hc3NlcnRfZmFpbC5jcHAKQEAgLTAsMCAr MSw3IEBACitpbnQgbWFpbihpbnQsIGNoYXIqKikgeworCWludCB4ID0gMDsKKwlbWyBhc3NlcnQ6 IHggPCAwIF1dOworCisJcmV0dXJuIDA7Cit9CisKZGlmZiAtLWdpdCBhL2djYy90ZXN0c3VpdGUv ZysrLmRnL2NvbnRyYWN0cy9wcmVsb2FkX2hhbmRsZXIvaGFuZGxlX2NvbnRyYWN0X3Zpb2xhdGlv bi5jcHAgYi9nY2MvdGVzdHN1aXRlL2crKy5kZy9jb250cmFjdHMvcHJlbG9hZF9oYW5kbGVyL2hh bmRsZV9jb250cmFjdF92aW9sYXRpb24uY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw MDAwMDAwMDAwLi42MDI5ODc1ZWU2YwotLS0gL2Rldi9udWxsCisrKyBiL2djYy90ZXN0c3VpdGUv ZysrLmRnL2NvbnRyYWN0cy9wcmVsb2FkX2hhbmRsZXIvaGFuZGxlX2NvbnRyYWN0X3Zpb2xhdGlv bi5jcHAKQEAgLTAsMCArMSwxNSBAQAorI2luY2x1ZGUgPGlvc3RyZWFtPgorI2luY2x1ZGUgPGNv bnRyYWN0PgorCit2b2lkIGhhbmRsZV9jb250cmFjdF92aW9sYXRpb24oY29uc3Qgc3RkOjpjb250 cmFjdF92aW9sYXRpb24gJnZpb2xhdGlvbikgeworICBzdGQ6OmNlcnIgPDwgImN1c3RvbSBoYW5k bGVfY29udHJhY3RfdmlvbGF0aW9uOiAiIDw8IHN0ZDo6ZW5kbAorICAgIDw8ICIgbGluZV9udW1i ZXI6ICIgPDwgdmlvbGF0aW9uLmxpbmVfbnVtYmVyKCkgPDwgc3RkOjplbmRsCisgICAgPDwgIiBm aWxlX25hbWU6ICIgPDwgdmlvbGF0aW9uLmZpbGVfbmFtZSgpIDw8IHN0ZDo6ZW5kbAorICAgIDw8 ICIgZnVuY3Rpb25fbmFtZTogIiA8PCB2aW9sYXRpb24uZnVuY3Rpb25fbmFtZSgpIDw8IHN0ZDo6 ZW5kbAorICAgIDw8ICIgY29tbWVudDogIiA8PCB2aW9sYXRpb24uY29tbWVudCgpIDw8IHN0ZDo6 ZW5kbAorICAgIDw8ICIgYXNzZXJ0aW9uX2xldmVsOiAiIDw8IHZpb2xhdGlvbi5hc3NlcnRpb25f bGV2ZWwoKSA8PCBzdGQ6OmVuZGwKKyAgICA8PCAiIGFzc2VydGlvbl9yb2xlOiAiIDw8IHZpb2xh dGlvbi5hc3NlcnRpb25fcm9sZSgpIDw8IHN0ZDo6ZW5kbAorICAgIDw8ICIgY29udGludWF0aW9u X21vZGU6ICIgPDwgKGludCl2aW9sYXRpb24uY29udGludWF0aW9uX21vZGUoKSA8PCBzdGQ6OmVu ZGwKKyAgICA8PCBzdGQ6OmVuZGw7Cit9CisKZGlmZiAtLWdpdCBhL2djYy90ZXN0c3VpdGUvZysr LmRnL2NvbnRyYWN0cy9wcmVsb2FkX25vY29udGludWVfaGFuZGxlci9hc3NlcnRfZmFpbC5jcHAg Yi9nY2MvdGVzdHN1aXRlL2crKy5kZy9jb250cmFjdHMvcHJlbG9hZF9ub2NvbnRpbnVlX2hhbmRs ZXIvYXNzZXJ0X2ZhaWwuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAw Li5hMTdhNjIzOWJiNwotLS0gL2Rldi9udWxsCisrKyBiL2djYy90ZXN0c3VpdGUvZysrLmRnL2Nv bnRyYWN0cy9wcmVsb2FkX25vY29udGludWVfaGFuZGxlci9hc3NlcnRfZmFpbC5jcHAKQEAgLTAs MCArMSwxMCBAQAorI2luY2x1ZGUgPGlvc3RyZWFtPgorCitpbnQgbWFpbihpbnQsIGNoYXIqKikg eworCWludCB4ID0gMDsKKwlbWyBhc3NlcnQ6IHggPCAwIF1dOworCisJc3RkOjpjb3V0IDw8ICJy ZXR1cm5pbmcgZnJvbSBtYWluIiA8PCBzdGQ6OmVuZGw7CisJcmV0dXJuIDA7Cit9CisKZGlmZiAt LWdpdCBhL2djYy90ZXN0c3VpdGUvZysrLmRnL2NvbnRyYWN0cy9wcmVsb2FkX25vY29udGludWVf aGFuZGxlci9oYW5kbGVfY29udHJhY3RfdmlvbGF0aW9uLmNwcCBiL2djYy90ZXN0c3VpdGUvZysr LmRnL2NvbnRyYWN0cy9wcmVsb2FkX25vY29udGludWVfaGFuZGxlci9oYW5kbGVfY29udHJhY3Rf dmlvbGF0aW9uLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uODQ5 OTQ4M2M4NmIKLS0tIC9kZXYvbnVsbAorKysgYi9nY2MvdGVzdHN1aXRlL2crKy5kZy9jb250cmFj dHMvcHJlbG9hZF9ub2NvbnRpbnVlX2hhbmRsZXIvaGFuZGxlX2NvbnRyYWN0X3Zpb2xhdGlvbi5j cHAKQEAgLTAsMCArMSwxMyBAQAorI2luY2x1ZGUgPGlvc3RyZWFtPgorI2luY2x1ZGUgPGNvbnRy YWN0PgorCit2b2lkIGhhbmRsZV9jb250cmFjdF92aW9sYXRpb24oY29uc3Qgc3RkOjpjb250cmFj dF92aW9sYXRpb24gJnZpb2xhdGlvbikgeworICBzdGQ6OmNlcnIgPDwgImN1c3RvbSBoYW5kbGVf Y29udHJhY3RfdmlvbGF0aW9uOiAiIDw8IHN0ZDo6ZW5kbAorICAgIDw8ICIgbGluZV9udW1iZXI6 ICIgPDwgdmlvbGF0aW9uLmxpbmVfbnVtYmVyKCkgPDwgc3RkOjplbmRsCisgICAgPDwgIiBmaWxl X25hbWU6ICIgPDwgdmlvbGF0aW9uLmZpbGVfbmFtZSgpIDw8IHN0ZDo6ZW5kbAorICAgIDw8ICIg ZnVuY3Rpb25fbmFtZTogIiA8PCB2aW9sYXRpb24uZnVuY3Rpb25fbmFtZSgpIDw8IHN0ZDo6ZW5k bAorICAgIDw8ICIgY29tbWVudDogIiA8PCB2aW9sYXRpb24uY29tbWVudCgpIDw8IHN0ZDo6ZW5k bAorICAgIDw8ICIgYXNzZXJ0aW9uX2xldmVsOiAiIDw8IHZpb2xhdGlvbi5hc3NlcnRpb25fbGV2 ZWwoKSA8PCBzdGQ6OmVuZGwKKyAgICA8PCBzdGQ6OmVuZGw7Cit9CisKZGlmZiAtLWdpdCBhL2dj Yy90ZXN0c3VpdGUvZysrLmRnL2NvbnRyYWN0cy9wcmVsb2FkX25vY29udGludWVfaGFuZGxlci9u b2NvbnRpbnVlLmNwcCBiL2djYy90ZXN0c3VpdGUvZysrLmRnL2NvbnRyYWN0cy9wcmVsb2FkX25v Y29udGludWVfaGFuZGxlci9ub2NvbnRpbnVlLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl eCAwMDAwMDAwMDAwMC4uMmE3ZDUzZTM1M2QKLS0tIC9kZXYvbnVsbAorKysgYi9nY2MvdGVzdHN1 aXRlL2crKy5kZy9jb250cmFjdHMvcHJlbG9hZF9ub2NvbnRpbnVlX2hhbmRsZXIvbm9jb250aW51 ZS5jcHAKQEAgLTAsMCArMSwxOSBAQAorI2luY2x1ZGUgPGV4Y2VwdGlvbj4KKyNpbmNsdWRlIDxj b250cmFjdD4KKyNpbmNsdWRlIDxkbGZjbi5oPgorCit1c2luZyBoYW5kbGVyID0gdm9pZCAoKiko Y29uc3Qgc3RkOjpjb250cmFjdF92aW9sYXRpb24gJik7Citjb25zdGV4cHIgY29uc3QgY2hhciAq bWFuZ2xlZEhhbmRsZXJOYW1lID0gIl9aMjVoYW5kbGVfY29udHJhY3RfdmlvbGF0aW9uUktTdDE4 Y29udHJhY3RfdmlvbGF0aW9uIjsKK3ZvaWQgaGFuZGxlX2NvbnRyYWN0X3Zpb2xhdGlvbihjb25z dCBzdGQ6OmNvbnRyYWN0X3Zpb2xhdGlvbiAmdmlvbGF0aW9uKSB7CisgIHRyeSB7CisgICAgaGFu ZGxlciBvcmlnaW5hbF9oYW5kbGVfY29udHJhY3RfdmlvbGF0aW9uOworICAgIG9yaWdpbmFsX2hh bmRsZV9jb250cmFjdF92aW9sYXRpb24gPQorICAgICAgKGhhbmRsZXIpZGxzeW0oUlRMRF9ORVhU LCBtYW5nbGVkSGFuZGxlck5hbWUpOworICAgICgqb3JpZ2luYWxfaGFuZGxlX2NvbnRyYWN0X3Zp b2xhdGlvbikodmlvbGF0aW9uKTsKKyAgfQorICBjYXRjaCguLi4pIHsKKyAgICA7IC8vIHNxdWFz aAorICB9CisgIHN0ZDo6dGVybWluYXRlKCk7Cit9CisKZGlmZiAtLWdpdCBhL2djYy90ZXN0c3Vp dGUvZysrLmRnL21vZHVsZXMvY29udHJhY3RzLTFfYS5DIGIvZ2NjL3Rlc3RzdWl0ZS9nKysuZGcv bW9kdWxlcy9jb250cmFjdHMtMV9hLkMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw MDAwMDAuLmY5OTFlZjg2NDRlCi0tLSAvZGV2L251bGwKKysrIGIvZ2NjL3Rlc3RzdWl0ZS9nKysu ZGcvbW9kdWxlcy9jb250cmFjdHMtMV9hLkMKQEAgLTAsMCArMSw0NiBAQAorLy8gQmFzaWMgdGVz dCB0byBlbnN1cmUgdGhhdCBndWFyZGVkIHRlbXBsYXRlcyBjb3JyZWN0bHkgc2VyaWFsaXplIGFu ZAorLy8gZGVzZXJpYWxpemUgdGhlaXIgY29udHJhY3RzIHRocm91Z2ggdGhlIENNSS4KKy8vIHsg ZGctYWRkaXRpb25hbC1vcHRpb25zICItZm1vZHVsZXMtdHMgLWZjb250cmFjdHMgLWZjb250cmFj dC1jb250aW51YXRpb24tbW9kZT1vbiIgfQorbW9kdWxlOworI2luY2x1ZGUgPGNzdGRpbz4KKyNp bmNsdWRlIDxleHBlcmltZW50YWwvY29udHJhY3Q+CitleHBvcnQgbW9kdWxlIGZvbzsKKy8vIHsg ZGctbW9kdWxlLWNtaSBmb28gfQorCitleHBvcnQgaW50IHZpb2xhdGlvbl9jb3VudHswfTsKK2V4 dGVybiAiQysrIiBleHBvcnQgdm9pZCBoYW5kbGVfY29udHJhY3RfdmlvbGF0aW9uKGNvbnN0IHN0 ZDo6ZXhwZXJpbWVudGFsOjpjb250cmFjdF92aW9sYXRpb24gJnZpb2xhdGlvbikKK3sKKyAgdmlv bGF0aW9uX2NvdW50Kys7CisgIHByaW50ZigidmlvbGF0aW9uX2NvdW50OiAlZFxuIiwgdmlvbGF0 aW9uX2NvdW50KTsKK30KKworZXhwb3J0IGludCBub250ZW1wbGF0ZShpbnQgbikKKyAgW1sgcHJl OiBuID4gMCBdXQorICBbWyBwb3N0IHI6IHIgPiAwIF1dCit7CisgIHJldHVybiAtbjsKK30KKwor ZXhwb3J0Cit0ZW1wbGF0ZTx0eXBlbmFtZSBUPgorVCBmbihUIG4pCisgIFtbIHByZTogbiA+IDAg XV0KKyAgW1sgcG9zdCByOiByID4gMCBdXQoreworICBwcmludGYoIiVzKCVkKVxuIiwgX19GVU5D VElPTl9fLCBuKTsKKyAgcmV0dXJuIG47Cit9CisKK2V4cG9ydAordGVtcGxhdGU8dHlwZW5hbWUg VD4KK3ZvaWQgdm9pZF9mbihUIG4pCisgIFtbIHByZTogbiA8IDAgXV0KK3sKKyAgcHJpbnRmKCIl cyglZClcbiIsIF9fRlVOQ1RJT05fXywgbik7Cit9CisKK2V4cG9ydCB2b2lkIGZvb19mbigpCit7 CisgIGZuKDUpOworfQorCmRpZmYgLS1naXQgYS9nY2MvdGVzdHN1aXRlL2crKy5kZy9tb2R1bGVz L2NvbnRyYWN0cy0xX2IuQyBiL2djYy90ZXN0c3VpdGUvZysrLmRnL21vZHVsZXMvY29udHJhY3Rz LTFfYi5DCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi4zMGMxNWY2OTI4 YgotLS0gL2Rldi9udWxsCisrKyBiL2djYy90ZXN0c3VpdGUvZysrLmRnL21vZHVsZXMvY29udHJh Y3RzLTFfYi5DCkBAIC0wLDAgKzEsMzMgQEAKKy8vIHsgZGctbW9kdWxlLWRvIHJ1biB9CisvLyB7 IGRnLWFkZGl0aW9uYWwtb3B0aW9ucyAiLWZtb2R1bGVzLXRzIC1mY29udHJhY3RzIC1mY29udHJh Y3QtY29udGludWF0aW9uLW1vZGU9b24iIH0KK21vZHVsZTsKKyNpbmNsdWRlIDxjc3RkaW8+Citl eHBvcnQgbW9kdWxlIGJhcjsKKy8vIHsgZGctbW9kdWxlLWNtaSBiYXIgfQoraW1wb3J0IGZvbzsK KwordGVtcGxhdGU8dHlwZW5hbWUgVD4KK2Jvb2wgYmFyX2ZuX3ByZShUIG4pIHsgcHJpbnRmKCJi YXIgZm4gcHJlKCVkKVxuIiwgbik7IHJldHVybiB0cnVlOyB9CisKK2V4cG9ydAordGVtcGxhdGU8 dHlwZW5hbWUgVD4KK1QgYmFyX2ZuKFQgbikKKyAgW1sgcHJlOiBiYXJfZm5fcHJlKG4pICYmIG4g PiAwIF1dCit7CisgIHByaW50ZigiJXMoJWQpXG4iLCBfX0ZVTkNUSU9OX18sIG4pOworICByZXR1 cm4gbjsKK30KKworaW50IG1haW4oaW50LCBjaGFyKiopCit7CisgIG5vbnRlbXBsYXRlKDUpOwor ICBub250ZW1wbGF0ZSgtNSk7CisgIGZuKDUpOworICBmbigtNSk7CisgIHZvaWRfZm4oNSk7Cisg IHZvaWRfZm4oLTUpOworICBiYXJfZm4oNSk7CisgIGJhcl9mbigtNSk7CisgIHJldHVybiB2aW9s YXRpb25fY291bnQgPT0gNiA/IDAgOiAtMTsKK30KKwpkaWZmIC0tZ2l0IGEvZ2NjL3Rlc3RzdWl0 ZS9nKysuZGcvbW9kdWxlcy9jb250cmFjdHMtMl9hLkMgYi9nY2MvdGVzdHN1aXRlL2crKy5kZy9t b2R1bGVzL2NvbnRyYWN0cy0yX2EuQwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw MDAwMC4uODI4ZDY4MGQyYTAKLS0tIC9kZXYvbnVsbAorKysgYi9nY2MvdGVzdHN1aXRlL2crKy5k Zy9tb2R1bGVzL2NvbnRyYWN0cy0yX2EuQwpAQCAtMCwwICsxLDQ5IEBACisvLyBCYXNpYyB0ZXN0 IHRvIGVuc3VyZSB0aGF0IGd1YXJkZWQgZnVuY3Rpb24gY29udHJhY3RzIGFyZSBjb3JyZWN0bHkK Ky8vIHNlcmlhbGl6ZWQgYW5kIGRlc2VyaWFsaXplZCB0aHJvdWdoIHRoZSBDTUkuCisvLyBUaGlz IGFsc28gdHJpZXMgdG8gZW5zdXJlIHRoYXQgZW50aXRpZXMgcmVmZXJlbmNlZCBpbiBhIGZ1bmN0 aW9uJ3MKKy8vIGNvbnRyYWN0cyBhcmUgY29ycmVjdGx5IG1hcmtlZCBhcyBhIGRlcGVuZGVuY3kg b2YgdGhlIGZ1bmN0aW9uIGl0c2VsZiBhbmQKKy8vIHNlcmlhbGl6ZWQgaW4gdGhlIGNvcnJlY3Qg b3JkZXIuCisvLyB7IGRnLWFkZGl0aW9uYWwtb3B0aW9ucyAiLWZtb2R1bGVzLXRzIC1mY29udHJh Y3RzIC1mY29udHJhY3Qtcm9sZT1kZWZhdWx0Om1heWJlLG1heWJlLGlnbm9yZSIgfQorbW9kdWxl OworI2luY2x1ZGUgPGNzdGRpbz4KKyNpbmNsdWRlIDxleHBlcmltZW50YWwvY29udHJhY3Q+Citl eHBvcnQgbW9kdWxlIGZvbzsKKy8vIHsgZGctbW9kdWxlLWNtaSBmb28gfQorCitleHBvcnQgaW50 IHZpb2xhdGlvbl9jb3VudHswfTsKK2V4cG9ydCBpbnQgdmlvbGF0aW9uX2xpbmVfc3VtezB9Owor ZXh0ZXJuICJDKysiIGV4cG9ydCB2b2lkIGhhbmRsZV9jb250cmFjdF92aW9sYXRpb24oY29uc3Qg c3RkOjpleHBlcmltZW50YWw6OmNvbnRyYWN0X3Zpb2xhdGlvbiAmdmlvbGF0aW9uKQoreworICB2 aW9sYXRpb25fY291bnQrKzsKKyAgdmlvbGF0aW9uX2xpbmVfc3VtICs9IHZpb2xhdGlvbi5saW5l X251bWJlciAoKSAqIHZpb2xhdGlvbl9jb3VudDsKKyAgcHJpbnRmKCJ2aW9sYXRpb246ICVkICVk XG4iLCB2aW9sYXRpb25fY291bnQsIHZpb2xhdGlvbl9saW5lX3N1bSk7Cit9CisKK2V4cG9ydCBp bnQgZm4yKGludCBuKTsKK2V4cG9ydCBpbnQgZm5faW4yKGludCBuKTsKK2V4cG9ydCBpbnQgcHJl X3ByaW50KGludCBuKSB7IHByaW50ZigicHJlX3ByaW50KCVkKVxuIiwgbik7IHJldHVybiBuOyB9 CisKK2V4cG9ydCBpbnQgZm5faW4xKGludCBuKSBbWyBwcmU6IHByZV9wcmludChuKSA+IDAgXV0K K3sKKyAgcHJpbnRmKCIlcyBibGFoICglZClcbiIsIF9fRlVOQ1RJT05fXywgbik7CisgIHJldHVy biBuOworfQorZXhwb3J0IGludCBmbl9pbjIoaW50IHgpIFtbIHByZTogcHJlX3ByaW50KHgpID4g MCBdXQoreworICBwcmludGYoIiVzKCVkKVxuIiwgX19GVU5DVElPTl9fLCB4KTsKKyAgcmV0dXJu IHg7Cit9CisKK2V4cG9ydCBpbnQgZm5faXNvKGludCBuKTsKKworZXhwb3J0IGludCBmbjEoaW50 IG4pCisgIFtbIHByZTogcHJlX3ByaW50KG4pID4gMCBdXTsKKworZXhwb3J0IGludCBmbjIoaW50 IG4pCisgIFtbIHByZTogcHJlX3ByaW50KG4pID4gMCBdXTsKKworZXhwb3J0IGludCBwcmVfcHJp bnQyKGludCBuKTsKKworZXhwb3J0IGludCBmbjMoaW50IG4pCisgIFtbIHByZTogcHJlX3ByaW50 MihuKSA+IDAgXV07CisKZGlmZiAtLWdpdCBhL2djYy90ZXN0c3VpdGUvZysrLmRnL21vZHVsZXMv Y29udHJhY3RzLTJfYi5DIGIvZ2NjL3Rlc3RzdWl0ZS9nKysuZGcvbW9kdWxlcy9jb250cmFjdHMt Ml9iLkMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLjAxOTM5YWViOTQ3 Ci0tLSAvZGV2L251bGwKKysrIGIvZ2NjL3Rlc3RzdWl0ZS9nKysuZGcvbW9kdWxlcy9jb250cmFj dHMtMl9iLkMKQEAgLTAsMCArMSwzNSBAQAorLy8geyBkZy1hZGRpdGlvbmFsLW9wdGlvbnMgIi1m bW9kdWxlcy10cyAtZmNvbnRyYWN0cyAtZmNvbnRyYWN0LXJvbGU9ZGVmYXVsdDptYXliZSxtYXli ZSxpZ25vcmUiIH0KK21vZHVsZTsKKyNpbmNsdWRlIDxjc3RkaW8+Cittb2R1bGUgZm9vOworCitp bnQgZm4xKGludCB4KQoreworICBwcmludGYoIiVzKCVkKVxuIiwgX19GVU5DVElPTl9fLCB4KTsK KyAgcmV0dXJuIHg7Cit9CisKK2ludCBmbl9pc28oaW50IG4pIFtbIHByZTogcHJlX3ByaW50KG4p ID4gMCBdXQoreworICBwcmludGYoIiVzKCVkKVxuIiwgX19GVU5DVElPTl9fLCBuKTsKKyAgcmV0 dXJuIG47Cit9CisKK2ludCBwcmVfcHJpbnQyKGludCBuKQoreworICBwcmludGYoInByZV9wcmlu dCglZClcbiIsIG4pOworICByZXR1cm4gbjsKK30KKworaW50IGZuMihpbnQgeCkKK3sKKyAgcHJp bnRmKCIlcyglZClcbiIsIF9fRlVOQ1RJT05fXywgeCk7CisgIHJldHVybiB4OworfQorCitpbnQg Zm4zKGludCB4KQoreworICBwcmludGYoIiVzKCVkKVxuIiwgX19GVU5DVElPTl9fLCB4KTsKKyAg cmV0dXJuIHg7Cit9CisKZGlmZiAtLWdpdCBhL2djYy90ZXN0c3VpdGUvZysrLmRnL21vZHVsZXMv Y29udHJhY3RzLTJfYy5DIGIvZ2NjL3Rlc3RzdWl0ZS9nKysuZGcvbW9kdWxlcy9jb250cmFjdHMt Ml9jLkMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLjU4OTM4ZTBlNmRl Ci0tLSAvZGV2L251bGwKKysrIGIvZ2NjL3Rlc3RzdWl0ZS9nKysuZGcvbW9kdWxlcy9jb250cmFj dHMtMl9jLkMKQEAgLTAsMCArMSwyMiBAQAorLy8geyBkZy1tb2R1bGUtZG8gcnVuIH0KKy8vIHsg ZGctYWRkaXRpb25hbC1vcHRpb25zICItZm1vZHVsZXMtdHMgLWZjb250cmFjdHMgLWZjb250cmFj dC1yb2xlPWRlZmF1bHQ6bWF5YmUsbWF5YmUsaWdub3JlIiB9CitpbXBvcnQgZm9vOworCitpbnQg bWFpbihpbnQsIGNoYXIqKikKK3sKKyAgaW50IHggPSAtMTsKKworICBmbl9pc28oeC0tKTsKKyAg Zm4xKHgtLSk7CisgIGZuMih4LS0pOworICBmbjMoeC0tKTsKKyAgZm5faW4xKHgtLSk7CisgIGZu X2luMih4LS0pOworICByZXR1cm4gKHZpb2xhdGlvbl9jb3VudCA9PSA2ICYmIHZpb2xhdGlvbl9s aW5lX3N1bSA9PSA3MjkpID8gMCA6IC0xOworfQorCisvLyBUT0RPIGRvZXMgYW55IG9mIHRoaXMg YWN0dWFsbHkgZ2V0IHZlcmlmaWVkPworLy8geyBkZy1vdXRwdXQgInByZV9wcmludC4tMS4oXG58 XHJcbnxccikqIiB9CisvLyB7IGRnLW91dHB1dCAidmlvbGF0aW9uOiAxIDEyKFxufFxyXG58XHIp KiIgfQorLy8geyBkZy1vdXRwdXQgImZuX2lzby4tMS4oXG58XHJcbnxccikqIiB9CisKZGlmZiAt LWdpdCBhL2djYy90ZXN0c3VpdGUvZysrLmRnL21vZHVsZXMvY29udHJhY3RzLTNfYS5DIGIvZ2Nj L3Rlc3RzdWl0ZS9nKysuZGcvbW9kdWxlcy9jb250cmFjdHMtM19hLkMKbmV3IGZpbGUgbW9kZSAx MDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLmE0ZjAzZDM1ODQyCi0tLSAvZGV2L251bGwKKysrIGIv Z2NjL3Rlc3RzdWl0ZS9nKysuZGcvbW9kdWxlcy9jb250cmFjdHMtM19hLkMKQEAgLTAsMCArMSw0 MSBAQAorLy8gQmFzaWMgdGVzdCB0byBlbnN1cmUgdGhhdCBndWFyZGVkIHRlbXBsYXRlcyBjb3Jy ZWN0bHkgc2VyaWFsaXplIGFuZAorLy8gZGVzZXJpYWxpemUgdGhlaXIgY29udHJhY3RzIHRocm91 Z2ggdGhlIENNSS4KKy8vIHsgZGctYWRkaXRpb25hbC1vcHRpb25zICItZm1vZHVsZXMtdHMgLWZj b250cmFjdHMgLWZjb250cmFjdC1jb250aW51YXRpb24tbW9kZT1vbiIgfQorbW9kdWxlOworI2lu Y2x1ZGUgPGNzdGRpbz4KKyNpbmNsdWRlIDxleHBlcmltZW50YWwvY29udHJhY3Q+CitleHBvcnQg bW9kdWxlIGZvbzsKKy8vIHsgZGctbW9kdWxlLWNtaSBmb28gfQorCitleHBvcnQgaW50IHZpb2xh dGlvbl9jb3VudHswfTsKK2V4dGVybiAiQysrIiBleHBvcnQgdm9pZCBoYW5kbGVfY29udHJhY3Rf dmlvbGF0aW9uKGNvbnN0IHN0ZDo6ZXhwZXJpbWVudGFsOjpjb250cmFjdF92aW9sYXRpb24gJnZp b2xhdGlvbikKK3sKKyAgdmlvbGF0aW9uX2NvdW50Kys7CisgIHByaW50ZigidmlvbGF0aW9uX2Nv dW50OiAlZFxuIiwgdmlvbGF0aW9uX2NvdW50KTsKK30KKworZXhwb3J0IGludCBub250ZW1wbGF0 ZShpbnQgbikKKyAgW1sgcHJlOiBuID4gMCBdXQorICBbWyBwb3N0IHI6IHIgPiAwIF1dCit7Cisg IHJldHVybiAtbjsKK30KKworZXhwb3J0Cit0ZW1wbGF0ZTx0eXBlbmFtZSBUPgorVCBmbihUIG4p CisgIFtbIHByZTogbiA+IDAgXV0KKyAgW1sgcG9zdCByOiByID4gMCBdXQoreworICBwcmludGYo IiVzKCVkKVxuIiwgX19GVU5DVElPTl9fLCBuKTsKKyAgcmV0dXJuIG47Cit9CisKK2V4cG9ydAor dGVtcGxhdGU8dHlwZW5hbWUgVD4KK3ZvaWQgdm9pZF9mbihUIG4pCisgIFtbIHByZTogbiA8IDAg XV0KK3sKKyAgcHJpbnRmKCIlcyglZClcbiIsIF9fRlVOQ1RJT05fXywgbik7Cit9CisKZGlmZiAt LWdpdCBhL2djYy90ZXN0c3VpdGUvZysrLmRnL21vZHVsZXMvY29udHJhY3RzLTNfYi5DIGIvZ2Nj L3Rlc3RzdWl0ZS9nKysuZGcvbW9kdWxlcy9jb250cmFjdHMtM19iLkMKbmV3IGZpbGUgbW9kZSAx MDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLmIxZDYzNzUzOTFiCi0tLSAvZGV2L251bGwKKysrIGIv Z2NjL3Rlc3RzdWl0ZS9nKysuZGcvbW9kdWxlcy9jb250cmFjdHMtM19iLkMKQEAgLTAsMCArMSwz NSBAQAorLy8geyBkZy1tb2R1bGUtZG8gcnVuIH0KKy8vIHsgZGctYWRkaXRpb25hbC1vcHRpb25z ICItZm1vZHVsZXMtdHMgLWZjb250cmFjdHMgLWZjb250cmFjdC1yb2xlPWRlZmF1bHQ6aWdub3Jl LGlnbm9yZSxpZ25vcmUiIH0KK21vZHVsZTsKKyNpbmNsdWRlIDxjc3RkaW8+CitleHBvcnQgbW9k dWxlIGJhcjsKKy8vIHsgZGctbW9kdWxlLWNtaSBiYXIgfQoraW1wb3J0IGZvbzsKKwordGVtcGxh dGU8dHlwZW5hbWUgVD4KK2Jvb2wgYmFyX2ZuX3ByZShUIG4pIHsgcHJpbnRmKCJiYXIgZm4gcHJl KCVkKVxuIiwgbik7IHJldHVybiB0cnVlOyB9CisKK2V4cG9ydAordGVtcGxhdGU8dHlwZW5hbWUg VD4KK1QgYmFyX2ZuKFQgbikKKyAgW1sgcHJlOiBiYXJfZm5fcHJlKG4pICYmIG4gPiAwIF1dCit7 CisgIHByaW50ZigiJXMoJWQpXG4iLCBfX0ZVTkNUSU9OX18sIG4pOworICByZXR1cm4gbjsKK30K KworaW50IG1haW4oaW50LCBjaGFyKiopCit7CisgIG5vbnRlbXBsYXRlKDUpOworICBub250ZW1w bGF0ZSgtNSk7CisgIGZuKDUpOworICBmbigtNSk7CisgIGZuKDUuMyk7CisgIGZuKC01LjMpOwor ICB2b2lkX2ZuKDUpOworICB2b2lkX2ZuKC01KTsKKyAgYmFyX2ZuKDUpOworICBiYXJfZm4oLTUp OworICByZXR1cm4gdmlvbGF0aW9uX2NvdW50ID09IDcgPyAwIDogLTE7Cit9CisKZGlmZiAtLWdp dCBhL2djYy90ZXN0c3VpdGUvZysrLmRnL21vZHVsZXMvY29udHJhY3RzLTRfYS5DIGIvZ2NjL3Rl c3RzdWl0ZS9nKysuZGcvbW9kdWxlcy9jb250cmFjdHMtNF9hLkMKbmV3IGZpbGUgbW9kZSAxMDA2 NDQKaW5kZXggMDAwMDAwMDAwMDAuLmYyNjllNmMyMDc4Ci0tLSAvZGV2L251bGwKKysrIGIvZ2Nj L3Rlc3RzdWl0ZS9nKysuZGcvbW9kdWxlcy9jb250cmFjdHMtNF9hLkMKQEAgLTAsMCArMSwyOCBA QAorLy8gVGVzdCB0aGF0IHRlbXBsYXRlIGNvbnRyYWN0cyBhcmUgbm90IHJlaW50cHJldGVkIHdo ZW4gdGhlIHJlaW50ZXJwcmV0CisvLyBjb250cmFjdHMgZmxhZyBpcyBub3Qgc2V0LCByZWdhcmRs ZXNzIG9mIHRoZSBjdXJyZW50IFRVJ3MgY29udHJhY3QKKy8vIGNvbmZpZ3VyYXRpb24uCisvLyB7 IGRnLWFkZGl0aW9uYWwtb3B0aW9ucyAiLWZtb2R1bGVzLXRzIC1mY29udHJhY3RzIC1mY29udHJh Y3Qtcm9sZT1kZWZhdWx0Om1heWJlLG1heWJlLGlnbm9yZSIgfQorbW9kdWxlOworI2luY2x1ZGUg PGNzdGRpbz4KKyNpbmNsdWRlIDxleHBlcmltZW50YWwvY29udHJhY3Q+CitleHBvcnQgbW9kdWxl IGZvbzsKKy8vIHsgZGctbW9kdWxlLWNtaSBmb28gfQorCitleHBvcnQgaW50IHZpb2xhdGlvbl9j b3VudHswfTsKK2V4dGVybiAiQysrIiBleHBvcnQgdm9pZCBoYW5kbGVfY29udHJhY3RfdmlvbGF0 aW9uKGNvbnN0IHN0ZDo6ZXhwZXJpbWVudGFsOjpjb250cmFjdF92aW9sYXRpb24gJnZpb2xhdGlv bikKK3sKKyAgdmlvbGF0aW9uX2NvdW50Kys7CisgIHByaW50ZigidmlvbGF0aW9uX2NvdW50OiAl ZFxuIiwgdmlvbGF0aW9uX2NvdW50KTsKK30KKworZXhwb3J0IHRlbXBsYXRlPHR5cGVuYW1lIFQ+ CitUIGZuX3QoVCB0KQorICBbWyBwcmU6IHQgPiAwIF1dCisgIFtbIHByZSBhdWRpdCAlY3VzdG9t OiB0ID4gMCBdXQoreworICBwcmludGYoIiVzKCVkKVxuIiwgX19GVU5DVElPTl9fLCB0KTsKKyAg cmV0dXJuIHQ7Cit9CisKK2V4cG9ydCBpbnQgZm5faW50KGludCBuKTsKKwpkaWZmIC0tZ2l0IGEv Z2NjL3Rlc3RzdWl0ZS9nKysuZGcvbW9kdWxlcy9jb250cmFjdHMtNF9iLkMgYi9nY2MvdGVzdHN1 aXRlL2crKy5kZy9tb2R1bGVzL2NvbnRyYWN0cy00X2IuQwpuZXcgZmlsZSBtb2RlIDEwMDY0NApp bmRleCAwMDAwMDAwMDAwMC4uNjViOTI4N2IyMTEKLS0tIC9kZXYvbnVsbAorKysgYi9nY2MvdGVz dHN1aXRlL2crKy5kZy9tb2R1bGVzL2NvbnRyYWN0cy00X2IuQwpAQCAtMCwwICsxLDggQEAKKy8v IHsgZGctYWRkaXRpb25hbC1vcHRpb25zICItZm1vZHVsZXMtdHMgLWZjb250cmFjdHMgLWZjb250 cmFjdC1yb2xlPWRlZmF1bHQ6aWdub3JlLGlnbm9yZSxpZ25vcmUiIH0KK21vZHVsZSBmb287CisK K2ludCBmbl9pbnQoaW50IG4pCit7CisgIHJldHVybiBmbl90KG4pOworfQorCmRpZmYgLS1naXQg YS9nY2MvdGVzdHN1aXRlL2crKy5kZy9tb2R1bGVzL2NvbnRyYWN0cy00X2MuQyBiL2djYy90ZXN0 c3VpdGUvZysrLmRnL21vZHVsZXMvY29udHJhY3RzLTRfYy5DCm5ldyBmaWxlIG1vZGUgMTAwNjQ0 CmluZGV4IDAwMDAwMDAwMDAwLi44NGZjYjYxNjMxNAotLS0gL2Rldi9udWxsCisrKyBiL2djYy90 ZXN0c3VpdGUvZysrLmRnL21vZHVsZXMvY29udHJhY3RzLTRfYy5DCkBAIC0wLDAgKzEsOSBAQAor Ly8geyBkZy1hZGRpdGlvbmFsLW9wdGlvbnMgIi1mbW9kdWxlcy10cyAtZmNvbnRyYWN0cyAtZmNv bnRyYWN0LXJvbGU9ZGVmYXVsdDppZ25vcmUsaWdub3JlLGlnbm9yZSIgfQorZXhwb3J0IG1vZHVs ZSBiYXI7CitpbXBvcnQgZm9vOworCitleHBvcnQgaW50IGJhcl9mbl9pbnQoaW50IG4pCit7Cisg IHJldHVybiBmbl90KG4pOworfQorCmRpZmYgLS1naXQgYS9nY2MvdGVzdHN1aXRlL2crKy5kZy9t b2R1bGVzL2NvbnRyYWN0cy00X2QuQyBiL2djYy90ZXN0c3VpdGUvZysrLmRnL21vZHVsZXMvY29u dHJhY3RzLTRfZC5DCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi5kYzU2 MjUxZDFkOAotLS0gL2Rldi9udWxsCisrKyBiL2djYy90ZXN0c3VpdGUvZysrLmRnL21vZHVsZXMv Y29udHJhY3RzLTRfZC5DCkBAIC0wLDAgKzEsMjIgQEAKKy8vIHsgZGctbW9kdWxlLWRvIHJ1biB9 CisvLyB7IGRnLWFkZGl0aW9uYWwtb3B0aW9ucyAiLWZtb2R1bGVzLXRzIC1mY29udHJhY3RzIiB9 Cittb2R1bGU7CisjaW5jbHVkZSA8Y3N0ZGlvPgorZXhwb3J0IG1vZHVsZSBiYXo7CitpbXBvcnQg Zm9vOworaW1wb3J0IGJhcjsKKworaW50IG1haW4oaW50LCBjaGFyKiopCit7CisgIGludCB4ID0g LTE7CisKKyAgcHJpbnRmKCJjYWxsaW5nIGZuX2ludFxuIik7CisgIGZuX2ludCh4LS0pOworICBw cmludGYoImNhbGxpbmcgYmFyX2ZuX2ludFxuIik7CisgIGJhcl9mbl9pbnQoeC0tKTsKKworICBy ZXR1cm4gdmlvbGF0aW9uX2NvdW50IC0gNDsKK30KKworLy8gVE9ETyB2ZXJpZnkgZGctb3V0cHV0 IGFzIHdlbGwgb25jZSB0aGUgdGVzdHN1aXRlIHN1cHBvcnRzIGl0CisKZGlmZiAtLWdpdCBhL2dj Yy90ZXN0c3VpdGUvZysrLmRnL21vZHVsZXMvY29udHJhY3RzLXRwbC1mcmllbmQtMV9hLkMgYi9n Y2MvdGVzdHN1aXRlL2crKy5kZy9tb2R1bGVzL2NvbnRyYWN0cy10cGwtZnJpZW5kLTFfYS5DCm5l dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi41ZTZkODQ4YWFhNAotLS0gL2Rl di9udWxsCisrKyBiL2djYy90ZXN0c3VpdGUvZysrLmRnL21vZHVsZXMvY29udHJhY3RzLXRwbC1m cmllbmQtMV9hLkMKQEAgLTAsMCArMSwxNyBAQAorLy8geyBkZy1hZGRpdGlvbmFsLW9wdGlvbnMg Ii1mbW9kdWxlcy10cyAtZmNvbnRyYWN0cyIgfQorCitleHBvcnQgbW9kdWxlIGZvbzsKKy8vIHsg ZGctbW9kdWxlLWNtaSBmb28gfQorCit2b2lkIGZvbyAoaW50LCB2b2lkICopOwordm9pZCBmb28g KGZsb2F0LCB2b2lkICopOworCit0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4gY2xhc3MgVFBMCit7Cisg IGZyaWVuZCB2b2lkIGZvbyAoVCwgdm9pZCAqKTsgLy8geyBkZy13YXJuaW5nICJub24tdGVtcGxh dGUgZnVuY3Rpb24iIH0KKworICBUIG1lbWJlcjsKK307CisKK3RlbXBsYXRlIGNsYXNzIFRQTDxm bG9hdD47ICAvLyBpbnN0YW50aWF0ZQorCmRpZmYgLS1naXQgYS9nY2MvdGVzdHN1aXRlL2crKy5k Zy9tb2R1bGVzL2NvbnRyYWN0cy10cGwtZnJpZW5kLTFfYi5DIGIvZ2NjL3Rlc3RzdWl0ZS9nKysu ZGcvbW9kdWxlcy9jb250cmFjdHMtdHBsLWZyaWVuZC0xX2IuQwpuZXcgZmlsZSBtb2RlIDEwMDY0 NAppbmRleCAwMDAwMDAwMDAwMC4uZjg3MmM5MjQ4ZDkKLS0tIC9kZXYvbnVsbAorKysgYi9nY2Mv dGVzdHN1aXRlL2crKy5kZy9tb2R1bGVzL2NvbnRyYWN0cy10cGwtZnJpZW5kLTFfYi5DCkBAIC0w LDAgKzEsMTkgQEAKKy8vIHsgZGctYWRkaXRpb25hbC1vcHRpb25zICItZm1vZHVsZXMtdHMgLWZj b250cmFjdHMiIH0KKworbW9kdWxlIGZvbzsKKwordm9pZCBmb28gKGludCB4LCB2b2lkICpwKQor ICBbWyBwcmU6IHggPiAwIF1dCit7CisgIGF1dG8gKm9iaiA9IHJlaW50ZXJwcmV0X2Nhc3Q8VFBM PGludD4gKj4gKHApOworCisgIG9iai0+bWVtYmVyID0geDsKK30KKwordm9pZCBmb28gKGZsb2F0 IHgsIHZvaWQgKnApCisgIFtbIHByZTogeCA+IDAgXV0KK3sKKyAgYXV0byAqb2JqID0gcmVpbnRl cnByZXRfY2FzdDxUUEw8ZmxvYXQ+ICo+IChwKTsKKworICBvYmotPm1lbWJlciA9IHg7Cit9CmRp ZmYgLS1naXQgYS9nY2MvY3AvTWFrZS1sYW5nLmluIGIvZ2NjL2NwL01ha2UtbGFuZy5pbgppbmRl eCAyOTE4MzVkMzI2ZS4uYWYyNWJkYzA0NGEgMTAwNjQ0Ci0tLSBhL2djYy9jcC9NYWtlLWxhbmcu aW4KKysrIGIvZ2NjL2NwL01ha2UtbGFuZy5pbgpAQCAtODksNyArODksNyBAQCBDWFhfQU5EX09C SkNYWF9PQkpTID0gXAogCWNwL2NhbGwubyBjcC9jbGFzcy5vIGNwL2NvbnN0ZXhwci5vIGNwL2Nv bnN0cmFpbnQubyBcCiAJY3AvY29yb3V0aW5lcy5vIGNwL2NwLWdpbXBsaWZ5Lm8gXAogCWNwL2Nw LW9iamNwLWNvbW1vbi5vIGNwL2NwLXVic2FuLm8gXAotCWNwL2N2dC5vIGNwL2N4eC1wcmV0dHkt cHJpbnQubyBcCisJY3AvY3Z0Lm8gY3AvY29udHJhY3RzLm8gY3AvY3h4LXByZXR0eS1wcmludC5v IFwKIAljcC9kZWNsLm8gY3AvZGVjbDIubyBjcC9kdW1wLm8gXAogCWNwL2Vycm9yLm8gY3AvZXhj ZXB0Lm8gY3AvZXhwci5vIFwKIAljcC9mcmllbmQubyBjcC9pbml0Lm8gXApkaWZmIC0tZ2l0IGEv Z2NjL2NwL2NvbmZpZy1sYW5nLmluIGIvZ2NjL2NwL2NvbmZpZy1sYW5nLmluCmluZGV4IDlhYzNk ZWU3MmY0Li5mOWU1ZjMyMmZiZiAxMDA2NDQKLS0tIGEvZ2NjL2NwL2NvbmZpZy1sYW5nLmluCisr KyBiL2djYy9jcC9jb25maWctbGFuZy5pbgpAQCAtMzksNiArMzksNyBAQCBndGZpbGVzPSJcCiBc JChzcmNkaXIpL2MtZmFtaWx5L2MtY29tbW9uLmNjIFwkKHNyY2RpcikvYy1mYW1pbHkvYy1mb3Jt YXQuY2MgXAogXCQoc3JjZGlyKS9jLWZhbWlseS9jLWNwcGJ1aWx0aW4uY2MgXCQoc3JjZGlyKS9j LWZhbWlseS9jLXByYWdtYS5jYyBcCiBcJChzcmNkaXIpL2NwL2NhbGwuY2MgXCQoc3JjZGlyKS9j cC9jbGFzcy5jYyBcJChzcmNkaXIpL2NwL2NvbnN0ZXhwci5jYyBcCitcJChzcmNkaXIpL2NwL2Nv bnRyYWN0cy5jYyBcCiBcJChzcmNkaXIpL2NwL2NvbnN0cmFpbnQuY2MgXCQoc3JjZGlyKS9jcC9j b3JvdXRpbmVzLmNjIFwKIFwkKHNyY2RpcikvY3AvY3AtZ2ltcGxpZnkuY2MgXAogXCQoc3JjZGly KS9jcC9jcC1sYW5nLmNjIFwkKHNyY2RpcikvY3AvY3Atb2JqY3AtY29tbW9uLmNjIFwKZGlmZiAt LWdpdCBhL2djYy9jcC9jcC10cmVlLmRlZiBiL2djYy9jcC9jcC10cmVlLmRlZgppbmRleCAzZGU4 Mjc4ZTlmMS4uZDhhYWIxMDU0OWYgMTAwNjQ0Ci0tLSBhL2djYy9jcC9jcC10cmVlLmRlZgorKysg Yi9nY2MvY3AvY3AtdHJlZS5kZWYKQEAgLTU4Miw2ICs1ODIsMTcgQEAgREVGVFJFRUNPREUgKENP X1lJRUxEX0VYUFIsICJjb195aWVsZCIsIHRjY19leHByZXNzaW9uLCAyKQogCiBERUZUUkVFQ09E RSAoQ09fUkVUVVJOX0VYUFIsICJjb19yZXR1cm4iLCB0Y2Nfc3RhdGVtZW50LCAyKQogCisvKiBE aWZmZXJlbnQgZmxhdm9ycyBvZiBjb250cmFjdHMuCisKKyAgIEFzc2VydGlvbnMgYW5kIHByZWNv bmRpdGlvbnMgaGF2ZSB0d28gb3BlcmFuZHM6IGEgbm9kZSBjb250YWluaW5nCisgICB0aGUgdGhl aXIgbW9kZSBhbmQgY29uZGl0aW9uLiBQb3N0Y29uZGl0aW9ucyBoYXZlIGFuIGFkZGl0aW9uYWwK KyAgIG9wZXJhbmQgdG8gc3RvcmUgdGhlIG9wdGlvbmFsIG5hbWUgZm9yIHRoZSByZXN1bHQgdmFs dWUuCisKKyAgIENPTlRSQUNUX1NFTUFOVElDIGhhcyB0aGUgY29tcHV0ZWQgYmVoYXZpb3Igb2Yg dGhlIGNvbnRyYWN0LiAgKi8KK0RFRlRSRUVDT0RFIChBU1NFUlRJT05fU1RNVCwgImFzc2VydGlv bl9zdG10IiwgdGNjX3N0YXRlbWVudCwgMykKK0RFRlRSRUVDT0RFIChQUkVDT05ESVRJT05fU1RN VCwgInByZWNvbmRpdGlvbl9zdG10IiwgdGNjX3N0YXRlbWVudCwgMykKK0RFRlRSRUVDT0RFIChQ T1NUQ09ORElUSU9OX1NUTVQsICJwb3N0Y29uZGl0aW9uX3N0bXQiLCB0Y2Nfc3RhdGVtZW50LCA0 KQorCiAvKgogTG9jYWwgdmFyaWFibGVzOgogbW9kZTpjCmRpZmYgLS1naXQgYS9nY2MvdGVzdHN1 aXRlL2crKy5kZy9jb250cmFjdHMvYmFja3RyYWNlX2hhbmRsZXIvTWFrZWZpbGUgYi9nY2MvdGVz dHN1aXRlL2crKy5kZy9jb250cmFjdHMvYmFja3RyYWNlX2hhbmRsZXIvTWFrZWZpbGUKbmV3IGZp bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLjRmMDFhOTUwNmE3Ci0tLSAvZGV2L251 bGwKKysrIGIvZ2NjL3Rlc3RzdWl0ZS9nKysuZGcvY29udHJhY3RzL2JhY2t0cmFjZV9oYW5kbGVy L01ha2VmaWxlCkBAIC0wLDAgKzEsMTMgQEAKK0NYWEZMQUdTPS0tc3RkPWMrKzE3IC1nCisKK2Rl ZmF1bHQ6IGFzc2VydF9mYWlsIGxpYmhhbmRsZV9jb250cmFjdF92aW9sYXRpb24uc28KKworcnVu OiBkZWZhdWx0CisJTERfUFJFTE9BRD0uL2xpYmhhbmRsZV9jb250cmFjdF92aW9sYXRpb24uc28g Li9hc3NlcnRfZmFpbAorCisuL2xpYmhhbmRsZV9jb250cmFjdF92aW9sYXRpb24uc286IC4vaGFu ZGxlX2NvbnRyYWN0X3Zpb2xhdGlvbi5jcHAKKwkke0NYWH0gJHtDWFhGTEFHU30gLXNoYXJlZCAt ZlBJQyAtbyAkQCAkPAorCitjbGVhbjoKKwlybSAtZnIgLi9saWJoYW5kbGVfY29udHJhY3Rfdmlv bGF0aW9uLnNvIC4vYXNzZXJ0X2ZhaWwKKwpkaWZmIC0tZ2l0IGEvZ2NjL3Rlc3RzdWl0ZS9nKysu ZGcvY29udHJhY3RzL2JhY2t0cmFjZV9oYW5kbGVyL1JFQURNRSBiL2djYy90ZXN0c3VpdGUvZysr LmRnL2NvbnRyYWN0cy9iYWNrdHJhY2VfaGFuZGxlci9SRUFETUUKbmV3IGZpbGUgbW9kZSAxMDA2 NDQKaW5kZXggMDAwMDAwMDAwMDAuLmRmNzI5ZjBkNjA5Ci0tLSAvZGV2L251bGwKKysrIGIvZ2Nj L3Rlc3RzdWl0ZS9nKysuZGcvY29udHJhY3RzL2JhY2t0cmFjZV9oYW5kbGVyL1JFQURNRQpAQCAt MCwwICsxLDEyIEBACitidWlsZCBhbmQgaW5zdGFsbCBnY2MgdG8gJHByZWZpeCwgdGhlbiB0byBz ZWUgdGhlIHJhdyBiYWNrdHJhY2UgaW5mbyBydW46CitMRF9MSUJSQVJZX1BBVEg9JHByZWZpeC9s aWI2NCBDWFg9JHByZWZpeC9iaW4vZysrIG1ha2UgcnVuCisKK2ZvciBhIGZpbHRlcmVkIHZpZXcg dXNpbmcgYWRkcjJsaW5lLCBzZWUgLi9wcmV0dHl0cmFjZS5zaDoKK0xEX0xJQlJBUllfUEFUSD0k cHJlZml4L2xpYjY0IENYWD0kcHJlZml4L2Jpbi9nKysgbWFrZSBydW4gfCYgLi9wcmV0dHl0cmFj ZS5zaAorCitwcmV0dHl0cmFjZS5zaCByZWxpZXMgb24gYWRkcjJsaW5lIGFuZCBjKytmaWx0IHRv IGxvb2t1cCBhbmQgZGVtYW5nbGUgbmFtZXMsCithbmQgbWlzYyBjb3JldXRpbHMKKworZXhhbXBs ZV9vdXQudHh0IGhhcyBhbiBleGFtcGxlIG9mIHRoZSByYXcgb3V0cHV0IHdoaWxlIGV4YW1wbGVf cHJldHR5LnR4dAorc2hvd3MgdGhlIGNvcnJlc3BvbmRpbmcgcHJldHRpZmllZCBvdXRwdXQKKwpk aWZmIC0tZ2l0IGEvZ2NjL3Rlc3RzdWl0ZS9nKysuZGcvY29udHJhY3RzL2JhY2t0cmFjZV9oYW5k bGVyL2V4YW1wbGVfb3V0LnR4dCBiL2djYy90ZXN0c3VpdGUvZysrLmRnL2NvbnRyYWN0cy9iYWNr dHJhY2VfaGFuZGxlci9leGFtcGxlX291dC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg MDAwMDAwMDAwMDAuLjkwM2VmMjJmMmY1Ci0tLSAvZGV2L251bGwKKysrIGIvZ2NjL3Rlc3RzdWl0 ZS9nKysuZGcvY29udHJhY3RzL2JhY2t0cmFjZV9oYW5kbGVyL2V4YW1wbGVfb3V0LnR4dApAQCAt MCwwICsxLDEyIEBACitMRF9QUkVMT0FEPS4vbGliaGFuZGxlX2NvbnRyYWN0X3Zpb2xhdGlvbi5z byAuL2Fzc2VydF9mYWlsCitjb250cmFjdCB2aW9sYXRpb246IGFzc2VydF9mYWlsLmNwcDozOiBm dW4xOjp4IDwgMCBpcyBmYWxzZSBbd2l0aCBjb250cmFjdCBsZXZlbD1kZWZhdWx0XQordmlvbGF0 aW9uIG9jY3VycyBoZXJlOgorLi9hc3NlcnRfZmFpbFsweDQwMTFhZF0KKy4vYXNzZXJ0X2ZhaWxb MHg0MDExZTBdCisuL2Fzc2VydF9mYWlsWzB4NDAxMjMwXQorLi9hc3NlcnRfZmFpbFsweDQwMTFm MV0KKy4vYXNzZXJ0X2ZhaWxbMHg0MDEyMTldCisvdXNyL2xpYi9saWJjLnNvLjYoX19saWJjX3N0 YXJ0X21haW4rMHhmMylbMHg3ZjI2ZTRmYTkyMjNdCisuL2Fzc2VydF9mYWlsWzB4NDAxMGJlXQor WzB4MF0KK2VuZCBvZiB2aW9sYXRpb24KZGlmZiAtLWdpdCBhL2djYy90ZXN0c3VpdGUvZysrLmRn L2NvbnRyYWN0cy9iYWNrdHJhY2VfaGFuZGxlci9leGFtcGxlX3ByZXR0eS50eHQgYi9nY2MvdGVz dHN1aXRlL2crKy5kZy9jb250cmFjdHMvYmFja3RyYWNlX2hhbmRsZXIvZXhhbXBsZV9wcmV0dHku dHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi45ZDVkNDgxYTllZgot LS0gL2Rldi9udWxsCisrKyBiL2djYy90ZXN0c3VpdGUvZysrLmRnL2NvbnRyYWN0cy9iYWNrdHJh Y2VfaGFuZGxlci9leGFtcGxlX3ByZXR0eS50eHQKQEAgLTAsMCArMSw4IEBACitMRF9QUkVMT0FE PS4vbGliaGFuZGxlX2NvbnRyYWN0X3Zpb2xhdGlvbi5zbyAuL2Fzc2VydF9mYWlsCitjb250cmFj dCB2aW9sYXRpb246IGFzc2VydF9mYWlsLmNwcDozOiBmdW4xOjp4IDwgMCBpcyBmYWxzZSBbd2l0 aCBjb250cmFjdCBsZXZlbD1kZWZhdWx0XQordmlvbGF0aW9uIG9jY3VycyBoZXJlOgorICAgIGFz c2VydF9mYWlsLmNwcDpmdW4xKCk6NAorICAgIGFzc2VydF9mYWlsLmNwcDp0bnM6OmZ1bjIoKTo4 CisgICAgYXNzZXJ0X2ZhaWwuY3BwOnZvaWQgZnVuMzxpbnQ+KGludCk6MTMKKyAgICBhc3NlcnRf ZmFpbC5jcHA6ZnVuNCgpOjE2CisgICAgYXNzZXJ0X2ZhaWwuY3BwOm1haW46MjEKZGlmZiAtLWdp dCBhL2djYy90ZXN0c3VpdGUvZysrLmRnL2NvbnRyYWN0cy9iYWNrdHJhY2VfaGFuZGxlci9wcmV0 dHl0cmFjZS5zaCBiL2djYy90ZXN0c3VpdGUvZysrLmRnL2NvbnRyYWN0cy9iYWNrdHJhY2VfaGFu ZGxlci9wcmV0dHl0cmFjZS5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwMDAw MC4uMTk3OGNkMWMxNjQKLS0tIC9kZXYvbnVsbAorKysgYi9nY2MvdGVzdHN1aXRlL2crKy5kZy9j b250cmFjdHMvYmFja3RyYWNlX2hhbmRsZXIvcHJldHR5dHJhY2Uuc2gKQEAgLTAsMCArMSwzMCBA QAorIyEvYmluL2Jhc2gKKworaW5WaW9sYXRpb249ImZhbHNlIgorc2VkICdzL14vOi8nIC9kZXYv c3RkaW4gfCB3aGlsZSByZWFkIC1yIGxpbmU7IGRvCisgIGxpbmU9IiQoZWNobyAiJGxpbmUiIHwg c2VkICdzL146Ly8nKSIKKworICBpZiBbWyAiJHtpblZpb2xhdGlvbn0iID09ICJmYWxzZSIgXV07 IHRoZW4KKyAgICBlY2hvICIkbGluZSIKKyAgICBpZiBbWyAtbiAiJChlY2hvICIkbGluZSIgfCBn cmVwICd2aW9sYXRpb24gb2NjdXJzIGhlcmU6JykiIF1dOyB0aGVuCisgICAgICBpblZpb2xhdGlv bj0idHJ1ZSIKKyAgICBmaQorICAgIGNvbnRpbnVlCisgIGZpCisKKyAgaWYgW1sgLW4gIiQoZWNo byAiJGxpbmUiIHwgZ3JlcCAnZW5kIG9mIHZpb2xhdGlvbicpIiBdXTsgdGhlbgorICAgIGluVmlv bGF0aW9uPSJmYWxzZSIKKyAgICBjb250aW51ZQorICBmaQorCisgIGFkZHI9IiQoZWNobyAiJGxp bmUiIHwgc2VkIC1yICdzLy4qXFsweChbYS1mMC05XSspXF0kL1wxLycpIgorICBiaW49IiQoZWNo byAiJGxpbmUiIHwgc2VkIC1yICdzL14oW14oW10qKS4qL1wxLycpIgorICBbWyAtbiAiJHtiaW59 IiBdXSB8fCBjb250aW51ZQorICB0PSIkKGFkZHIybGluZSAtZSAiJGJpbiIgIiRhZGRyIiAtZiki CisgIGZpbGU9IiQoZWNobyAiJHQiIHwgdGFpbCAtMSB8IHRyICc6JyAnXG4nIHwgaGVhZCAtMSki CisgIGZpbGU9IiQoZWNobyAiJGZpbGUiIHwgc2VkIC1yICJzOl4kKHB3ZCkvPzo6IikiCisgIGxp bmU9IiQoZWNobyAiJHQiIHwgdGFpbCAtMSB8IHRyICc6JyAnXG4nIHwgdGFpbCAtMSB8IGN1dCAt ZCcgJyAtZjEpIgorICBmdW5jPSIkKGVjaG8gIiR0IiB8IGhlYWQgLTEgfCBjKytmaWx0KSIKKyAg W1sgJGZpbGUgIT0gIj8/IiBdXSAmJiBlY2hvICIgICAgJGZpbGU6JGZ1bmM6JGxpbmUiCitkb25l CisKZGlmZiAtLWdpdCBhL2djYy90ZXN0c3VpdGUvZysrLmRnL2NvbnRyYWN0cy9leGNlcHRfcHJl bG9hZF9oYW5kbGVyL01ha2VmaWxlIGIvZ2NjL3Rlc3RzdWl0ZS9nKysuZGcvY29udHJhY3RzL2V4 Y2VwdF9wcmVsb2FkX2hhbmRsZXIvTWFrZWZpbGUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg MDAwMDAwMDAwMDAuLjhmY2M1YjIzNjhhCi0tLSAvZGV2L251bGwKKysrIGIvZ2NjL3Rlc3RzdWl0 ZS9nKysuZGcvY29udHJhY3RzL2V4Y2VwdF9wcmVsb2FkX2hhbmRsZXIvTWFrZWZpbGUKQEAgLTAs MCArMSwxMyBAQAorQ1hYRkxBR1M9LS1zdGQ9YysrMTcgLWZjb250cmFjdC1jb250aW51YXRpb24t bW9kZT1vbgorCitkZWZhdWx0OiBhc3NlcnRfZmFpbCBsaWJoYW5kbGVfY29udHJhY3RfdmlvbGF0 aW9uLnNvCisKK3J1bjogZGVmYXVsdAorCUxEX1BSRUxPQUQ9Li9saWJoYW5kbGVfY29udHJhY3Rf dmlvbGF0aW9uLnNvIC4vYXNzZXJ0X2ZhaWwKKworLi9saWJoYW5kbGVfY29udHJhY3RfdmlvbGF0 aW9uLnNvOiAuL2hhbmRsZV9jb250cmFjdF92aW9sYXRpb24uY3BwCisJJHtDWFh9ICR7Q1hYRkxB R1N9IC1zaGFyZWQgLWZQSUMgLW8gJEAgJDwKKworY2xlYW46CisJcm0gLWZyIC4vKi5vIC4vbGli aGFuZGxlX2NvbnRyYWN0X3Zpb2xhdGlvbi5zbyAuL2Fzc2VydF9mYWlsCisKZGlmZiAtLWdpdCBh L2djYy90ZXN0c3VpdGUvZysrLmRnL2NvbnRyYWN0cy9leGNlcHRfcHJlbG9hZF9oYW5kbGVyL1JF QURNRSBiL2djYy90ZXN0c3VpdGUvZysrLmRnL2NvbnRyYWN0cy9leGNlcHRfcHJlbG9hZF9oYW5k bGVyL1JFQURNRQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uY2JmZTQ4 YmQzM2YKLS0tIC9kZXYvbnVsbAorKysgYi9nY2MvdGVzdHN1aXRlL2crKy5kZy9jb250cmFjdHMv ZXhjZXB0X3ByZWxvYWRfaGFuZGxlci9SRUFETUUKQEAgLTAsMCArMSwxMyBAQAorYnVpbGQgYW5k IGluc3RhbGwgZ2NjIHRvICRwcmVmaXgsIHRoZW4gcnVuOgorTERfTElCUkFSWV9QQVRIPSRwcmVm aXgvbGliNjQgQ1hYPSRwcmVmaXgvYmluL2crKyBtYWtlIHJ1bgorCit0aGlzIHRlc3QgaGFzIGEg Y3VzdG9tIGhhbmRsZV9jb250cmFjdF92aW9sYXRpb24gdGhhdCB0aHJvd3MgYW4gZXhjZXB0aW9u Cit0aGlzIHRlc3QgaXMgYnVpbHQgd2l0aCAtZmNvbnRyYWN0LWNvbnRpbnVhdGlvbi1tb2RlPW9u CisKK3NpbmNlIDEpIG91ciBmdW4oKSBpcyBub3QgbWFya2VkIG5vZXhjZXB0IGFuZCAyKSB0aGUg Y29udGludWUgbW9kZSBpcyBzZXQgdG8KK29uLCB3ZSBleHBlY3QgdGhlIGV4Y2VwdGlvbiB0aHJv d24gd2l0aGluIHRoZSBjb250cmFjdCB2aW9sYXRpb24gaGFuZGxlciB0bworcHJvcGFnYXRlIGJh Y2sgdXAgaW50byB0aGUgY2F0Y2ggYmxvY2sgbG9jYXRlZCBpbiBtYWluKCkKKworZXhwZWN0ZWQg b3V0cHV0IHRoZXJlZm9yZSBlbmRzIGluOgorCXN5bnRoIGNhdWdodCBpbmRpcmVjdDogLTEKKwpk aWZmIC0tZ2l0IGEvZ2NjL3Rlc3RzdWl0ZS9nKysuZGcvY29udHJhY3RzL25vZXhjZXB0X3ByZWxv YWRfaGFuZGxlci9NYWtlZmlsZSBiL2djYy90ZXN0c3VpdGUvZysrLmRnL2NvbnRyYWN0cy9ub2V4 Y2VwdF9wcmVsb2FkX2hhbmRsZXIvTWFrZWZpbGUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg MDAwMDAwMDAwMDAuLjhmY2M1YjIzNjhhCi0tLSAvZGV2L251bGwKKysrIGIvZ2NjL3Rlc3RzdWl0 ZS9nKysuZGcvY29udHJhY3RzL25vZXhjZXB0X3ByZWxvYWRfaGFuZGxlci9NYWtlZmlsZQpAQCAt MCwwICsxLDEzIEBACitDWFhGTEFHUz0tLXN0ZD1jKysxNyAtZmNvbnRyYWN0LWNvbnRpbnVhdGlv bi1tb2RlPW9uCisKK2RlZmF1bHQ6IGFzc2VydF9mYWlsIGxpYmhhbmRsZV9jb250cmFjdF92aW9s YXRpb24uc28KKworcnVuOiBkZWZhdWx0CisJTERfUFJFTE9BRD0uL2xpYmhhbmRsZV9jb250cmFj dF92aW9sYXRpb24uc28gLi9hc3NlcnRfZmFpbAorCisuL2xpYmhhbmRsZV9jb250cmFjdF92aW9s YXRpb24uc286IC4vaGFuZGxlX2NvbnRyYWN0X3Zpb2xhdGlvbi5jcHAKKwkke0NYWH0gJHtDWFhG TEFHU30gLXNoYXJlZCAtZlBJQyAtbyAkQCAkPAorCitjbGVhbjoKKwlybSAtZnIgLi8qLm8gLi9s aWJoYW5kbGVfY29udHJhY3RfdmlvbGF0aW9uLnNvIC4vYXNzZXJ0X2ZhaWwKKwpkaWZmIC0tZ2l0 IGEvZ2NjL3Rlc3RzdWl0ZS9nKysuZGcvY29udHJhY3RzL25vZXhjZXB0X3ByZWxvYWRfaGFuZGxl ci9SRUFETUUgYi9nY2MvdGVzdHN1aXRlL2crKy5kZy9jb250cmFjdHMvbm9leGNlcHRfcHJlbG9h ZF9oYW5kbGVyL1JFQURNRQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4u YWE3YzZkZDJkZjYKLS0tIC9kZXYvbnVsbAorKysgYi9nY2MvdGVzdHN1aXRlL2crKy5kZy9jb250 cmFjdHMvbm9leGNlcHRfcHJlbG9hZF9oYW5kbGVyL1JFQURNRQpAQCAtMCwwICsxLDE1IEBACiti dWlsZCBhbmQgaW5zdGFsbCBnY2MgdG8gJHByZWZpeCwgdGhlbiBydW46CitMRF9MSUJSQVJZX1BB VEg9JHByZWZpeC9saWI2NCBDWFg9JHByZWZpeC9iaW4vZysrIG1ha2UgcnVuCisKK3RoaXMgdGVz dCBoYXMgYSBjdXN0b20gaGFuZGxlX2NvbnRyYWN0X3Zpb2xhdGlvbiB0aGF0IHRocm93cyBhbiBl eGNlcHRpb24KK3RoaXMgdGVzdCBpcyBidWlsdCB3aXRoIC1mY29udHJhY3QtY29udGludWF0aW9u LW1vZGU9b24KKworc2luY2UgMSkgb3VyIGZ1bigpICpJUyogbWFya2VkIG5vZXhjZXB0IGV2ZW4g dGhvdWdoIDIpIHRoZSBjb250aW51ZSBtb2RlIGlzCitzZXQgdG8gb24sIHdlIGV4cGVjdCB0aGUg ZXhjZXB0aW9uIHRocm93biB3aXRoaW4gdGhlIGNvbnRyYWN0IHZpb2xhdGlvbgoraGFuZGxlciB0 byBxdWFzaGVkIGFuZCBoYXZlIHN0ZDo6dGVybWluYXRlIHJ1bi4KKworZXhwZWN0ZWQgb3V0cHV0 IHRoZXJlZm9yZSBlbmRzIGluOgorCXRlcm1pbmF0ZSBjYWxsZWQgYWZ0ZXIgdGhyb3dpbmcgYW4g aW5zdGFuY2Ugb2YgJ2ludCcKKworZGVzcGl0ZSB0aGVyZSBiZWluZyBhIGNhdGNoKGludCAmKSBo YW5kbGVyIGluIG1haW4KKwpkaWZmIC0tZ2l0IGEvZ2NjL3Rlc3RzdWl0ZS9nKysuZGcvY29udHJh Y3RzL3ByZWxvYWRfaGFuZGxlci9NYWtlZmlsZSBiL2djYy90ZXN0c3VpdGUvZysrLmRnL2NvbnRy YWN0cy9wcmVsb2FkX2hhbmRsZXIvTWFrZWZpbGUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg MDAwMDAwMDAwMDAuLjZmZjA4M2Y0YjVjCi0tLSAvZGV2L251bGwKKysrIGIvZ2NjL3Rlc3RzdWl0 ZS9nKysuZGcvY29udHJhY3RzL3ByZWxvYWRfaGFuZGxlci9NYWtlZmlsZQpAQCAtMCwwICsxLDEz IEBACitDWFhGTEFHUz0tLXN0ZD1jKysxNworCitkZWZhdWx0OiBhc3NlcnRfZmFpbCBsaWJoYW5k bGVfY29udHJhY3RfdmlvbGF0aW9uLnNvCisKK3J1bjogZGVmYXVsdAorCUxEX1BSRUxPQUQ9Li9s aWJoYW5kbGVfY29udHJhY3RfdmlvbGF0aW9uLnNvIC4vYXNzZXJ0X2ZhaWwKKworLi9saWJoYW5k bGVfY29udHJhY3RfdmlvbGF0aW9uLnNvOiAuL2hhbmRsZV9jb250cmFjdF92aW9sYXRpb24uY3Bw CisJJHtDWFh9ICR7Q1hYRkxBR1N9IC1zaGFyZWQgLWZQSUMgLW8gJEAgJDwKKworY2xlYW46CisJ cm0gLWZyIC4vbGliaGFuZGxlX2NvbnRyYWN0X3Zpb2xhdGlvbi5zbyAuL2Fzc2VydF9mYWlsCisK ZGlmZiAtLWdpdCBhL2djYy90ZXN0c3VpdGUvZysrLmRnL2NvbnRyYWN0cy9wcmVsb2FkX2hhbmRs ZXIvUkVBRE1FIGIvZ2NjL3Rlc3RzdWl0ZS9nKysuZGcvY29udHJhY3RzL3ByZWxvYWRfaGFuZGxl ci9SRUFETUUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLmNjOTEzZmU4 MTg4Ci0tLSAvZGV2L251bGwKKysrIGIvZ2NjL3Rlc3RzdWl0ZS9nKysuZGcvY29udHJhY3RzL3By ZWxvYWRfaGFuZGxlci9SRUFETUUKQEAgLTAsMCArMSwyIEBACitidWlsZCBhbmQgaW5zdGFsbCBn Y2MgdG8gJHByZWZpeCwgdGhlbiBydW46CitMRF9MSUJSQVJZX1BBVEg9JHByZWZpeC9saWI2NCBD WFg9JHByZWZpeC9iaW4vZysrIG1ha2UgcnVuCmRpZmYgLS1naXQgYS9nY2MvdGVzdHN1aXRlL2cr Ky5kZy9jb250cmFjdHMvcHJlbG9hZF9ub2NvbnRpbnVlX2hhbmRsZXIvTWFrZWZpbGUgYi9nY2Mv dGVzdHN1aXRlL2crKy5kZy9jb250cmFjdHMvcHJlbG9hZF9ub2NvbnRpbnVlX2hhbmRsZXIvTWFr ZWZpbGUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLmM4MjYzMjg1NDcx Ci0tLSAvZGV2L251bGwKKysrIGIvZ2NjL3Rlc3RzdWl0ZS9nKysuZGcvY29udHJhY3RzL3ByZWxv YWRfbm9jb250aW51ZV9oYW5kbGVyL01ha2VmaWxlCkBAIC0wLDAgKzEsMjMgQEAKK0NYWEZMQUdT PS0tc3RkPWMrKzE3IC1mY29udHJhY3QtY29udGludWF0aW9uLW1vZGU9b24KK0xERkxBR1M9LWxk bAorCitkZWZhdWx0OiBhc3NlcnRfZmFpbCBsaWJoYW5kbGVfY29udHJhY3RfdmlvbGF0aW9uLnNv IGxpYm5vY29udGludWUuc28KKworcnVuOiBkZWZhdWx0CisJLi9hc3NlcnRfZmFpbAorCitydW5u bzogZGVmYXVsdAorCUxEX1BSRUxPQUQ9Ii4vbGlibm9jb250aW51ZS5zbyAuL2xpYmhhbmRsZV9j b250cmFjdF92aW9sYXRpb24uc28iIC4vYXNzZXJ0X2ZhaWwKKworcnVubm9zdGQ6IGRlZmF1bHQK KwlMRF9QUkVMT0FEPS4vbGlibm9jb250aW51ZS5zbyAuL2Fzc2VydF9mYWlsCisKKy4vbGliaGFu ZGxlX2NvbnRyYWN0X3Zpb2xhdGlvbi5zbzogLi9oYW5kbGVfY29udHJhY3RfdmlvbGF0aW9uLmNw cAorCSR7Q1hYfSAke0NYWEZMQUdTfSAtc2hhcmVkIC1mUElDIC1vICRAICQ8CisKKy4vbGlibm9j b250aW51ZS5zbzogLi9ub2NvbnRpbnVlLmNwcAorCSR7Q1hYfSAke0NYWEZMQUdTfSAtc2hhcmVk IC1mUElDIC1vICRAICQ8CisKK2NsZWFuOgorCXJtIC1mciAuL2xpYmhhbmRsZV9jb250cmFjdF92 aW9sYXRpb24uc28gLi9saWJub2NvbnRpbnVlLnNvIC4vYXNzZXJ0X2ZhaWwKKwpkaWZmIC0tZ2l0 IGEvZ2NjL3Rlc3RzdWl0ZS9nKysuZGcvY29udHJhY3RzL3ByZWxvYWRfbm9jb250aW51ZV9oYW5k bGVyL1JFQURNRSBiL2djYy90ZXN0c3VpdGUvZysrLmRnL2NvbnRyYWN0cy9wcmVsb2FkX25vY29u dGludWVfaGFuZGxlci9SRUFETUUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAw MDAuLjVjOTMxOTE4NzU5Ci0tLSAvZGV2L251bGwKKysrIGIvZ2NjL3Rlc3RzdWl0ZS9nKysuZGcv Y29udHJhY3RzL3ByZWxvYWRfbm9jb250aW51ZV9oYW5kbGVyL1JFQURNRQpAQCAtMCwwICsxLDIz IEBACitidWlsZCBhbmQgaW5zdGFsbCBnY2MgdG8gJHByZWZpeCwgdGhlbiBydW46CisKK0xEX0xJ QlJBUllfUEFUSD0kcHJlZml4L2xpYjY0IENYWD0kcHJlZml4L2Jpbi9nKysgbWFrZSBydW4KKyAg QnVpbGQgYW5kIHJ1biB3aXRoIGNvbnRpbnVhdGlvbiBtb2RlIG9uOyB3aWxsIHByaW50IHZpb2xh dGlvbiBpbmZvIGZyb20gdGhlCisgIHN0YW5kYXJkIGhhbmRsZXIgYW5kIHRoZW4gY29udGludWUg dG8gcHJpbnQgInJldHVybmluZyBmcm9tIG1haW4iCisKK0xEX0xJQlJBUllfUEFUSD0kcHJlZml4 L2xpYjY0IENYWD0kcHJlZml4L2Jpbi9nKysgbWFrZSBydW5ub3N0ZAorICBCdWlsZCBhbmQgcnVu IHdpdGggY29udGludWF0aW9uIG1vZGUgb24sIHVzaW5nIHRoZSBkZWZhdWx0IHZpb2xhdGlvbiBo YW5kbGVyCisgIHdoaWxlIHByZWxvYWRpbmcgdGhlICdub2NvbnRpbnVlJyBob29rLiBUaGlzIHVz ZXMgTERfUFJFTE9BRCB0byB0dXJuIGFsbAorICBjb250aW51aW5nIGNvbnRyYWN0IHZpb2xhdGlv bnMgaW50byBub24tY29udGludWluZyB2ZXJzaW9ucy4KKworICBXaWxsIHByaW50IHZpb2xhdGlv biBpbmZvIGZyb20gdGhlIHN0YW5kYXJkIGhhbmRsZXIgYW5kIHRoZW4gdGVybWluYXRlIC0tIGl0 CisgIHdpbGwgbm90IHByaW50ICJyZXR1cm5pbmcgZnJvbSBtYWluIgorCitMRF9MSUJSQVJZX1BB VEg9JHByZWZpeC9saWI2NCBDWFg9JHByZWZpeC9iaW4vZysrIG1ha2UgcnVubm8KKyAgQnVpbGQg YW5kIHJ1biB3aXRoIGNvbnRpbnVhdGlvbiBtb2RlIG9uLCB1c2luZyBhIGN1c3RvbSB2aW9sYXRp b24gaGFuZGxlcgorICB3aGlsZSBwcmVsb2FkaW5nIHRoZSAnbm9jb250aW51ZScgaG9vay4gVGhp cyB1c2VzIExEX1BSRUxPQUQgdG8gdHVybiBhbGwKKyAgY29udGludWluZyBjb250cmFjdCB2aW9s YXRpb25zIGludG8gbm9uLWNvbnRpbnVpbmcgdmVyc2lvbnMgYW5kIHRvIGluc3RhbGwgYQorICBj dXN0b20gdmlvbGF0aW9uIGhhbmRsZXIuCisKKyAgV2lsbCBwcmludCB2aW9sYXRpb24gaW5mbyBm cm9tIHRoZSBjdXN0b20gaGFuZGxlciBhbmQgdGhlbiB0ZXJtaW5hdGUgLS0gaXQKKyAgd2lsbCBu b3QgcHJpbnQgInJldHVybmluZyBmcm9tIG1haW4iCisKZGlmZiAtLWdpdCBhL2djYy90ZXN0c3Vp dGUvZysrLmRnL21vZHVsZXMvbW9kdWxlcy5leHAgYi9nY2MvdGVzdHN1aXRlL2crKy5kZy9tb2R1 bGVzL21vZHVsZXMuZXhwCmluZGV4IDQ3ODQ4MDM3NDJhLi5jYWNiZDc1YzM4NSAxMDA2NDQKLS0t IGEvZ2NjL3Rlc3RzdWl0ZS9nKysuZGcvbW9kdWxlcy9tb2R1bGVzLmV4cAorKysgYi9nY2MvdGVz dHN1aXRlL2crKy5kZy9tb2R1bGVzL21vZHVsZXMuZXhwCkBAIC0xODcsOCArMTg3LDkgQEAgcHJv YyBtb2R1bGVfZG9faXQgeyBkb193aGF0IHRlc3RjYXNlIHN0ZCBhc21fbGlzdCB9IHsKIAlsYXBw ZW5kIG9wdGlvbnMgImFkZGl0aW9uYWxfZmxhZ3M9JHN0ZCIKIAlzZXQgaWRlbnQgIiRpZGVudCAk c3RkIgogICAgIH0KLSAgICBpZiB7IFtsbGVuZ3RoICRkb193aGF0XSA+IDMgfSB7Ci0JbGFwcGVu ZCBvcHRpb25zICJhZGRpdGlvbmFsX2ZsYWdzPVtsaW5kZXggJGRvX3doYXQgM10iCisgICAgZ2xv YmFsIGV4dHJhX3Rvb2xfZmxhZ3MKKyAgICBpZiB7IFtsbGVuZ3RoICRleHRyYV90b29sX2ZsYWdz XSB9IHsKKwlsYXBwZW5kIG9wdGlvbnMgImFkZGl0aW9uYWxfZmxhZ3M9JGV4dHJhX3Rvb2xfZmxh Z3MiCiAgICAgfQogCiAgICAgc2V0IGV4ZWNuYW1lICIuL1tmaWxlIHRhaWwgJHRlc3RjYXNlXS5l eGUiCkBAIC0yNTAsNiArMjUxLDggQEAgcHJvYyBtb2R1bGUtaW5pdCB7IHNyYyB9IHsKICAgICBz ZXQgb3B0aW9uX2xpc3Qge30KICAgICBzZXQgaGF2ZV9zdGQgMAogICAgIHNldCBzdGRfcHJlZml4 ICItc3RkPWMrKyIKKyAgICBnbG9iYWwgZXh0cmFfdG9vbF9mbGFncworICAgIHNldCBleHRyYV90 b29sX2ZsYWdzIHt9CiAKICAgICBmb3JlYWNoIG9wICR0bXAgewogCXN3aXRjaCBbbGluZGV4ICRv cCAwXSB7CkBAIC0yNTgsMTEgKzI2MSwxMyBAQCBwcm9jIG1vZHVsZS1pbml0IHsgc3JjIH0gewog CQlpZiB7IFtzdHJpbmcgbWF0Y2ggIiotc3RkPSoiIFtsaW5kZXggJG9wIDJdXSB9IHsKIAkJICAg IHNldCBoYXZlX3N0ZCAxCiAJCX0KKwkJZXZhbCBsYXBwZW5kIGV4dHJhX3Rvb2xfZmxhZ3MgW2xp bmRleCAkb3AgMl0KIAkgICAgfQogCSAgICAiZGctYWRkaXRpb25hbC1vcHRpb25zIiB7CiAJCWlm IHsgW3N0cmluZyBtYXRjaCAiKi1zdGQ9KiIgW2xpbmRleCAkb3AgMl1dIH0gewogCQkgICAgc2V0 IGhhdmVfc3RkIDEKIAkJfQorCQlldmFsIGxhcHBlbmQgZXh0cmFfdG9vbF9mbGFncyBbbGluZGV4 ICRvcCAyXQogCSAgICB9CiAJfQogICAgIH0KZGlmZiAtLWdpdCBhL2djYy90ZXN0c3VpdGUvbGli L2crKy5leHAgYi9nY2MvdGVzdHN1aXRlL2xpYi9nKysuZXhwCmluZGV4IDE2ZTYxZmI0YWQ0Li40 ZTEwYjYxNGYwNyAxMDA2NDQKLS0tIGEvZ2NjL3Rlc3RzdWl0ZS9saWIvZysrLmV4cAorKysgYi9n Y2MvdGVzdHN1aXRlL2xpYi9nKysuZXhwCkBAIC0xNDIsNiArMTQyLDEwIEBAIHByb2MgZysrX2xp bmtfZmxhZ3MgeyBwYXRocyB9IHsKIAkgIGFwcGVuZCBmbGFncyAiIC1MJHtnY2NwYXRofS9saWJz dGRjKystdjMvc3JjLy5saWJzICIKIAkgIGFwcGVuZCBsZF9saWJyYXJ5X3BhdGggIjoke2djY3Bh dGh9L2xpYnN0ZGMrKy12My9zcmMvLmxpYnMiCiAgICAgICB9CisgICAgICBpZiBbZmlsZSBleGlz dHMgIiR7Z2NjcGF0aH0vbGlic3RkYysrLXYzL3NyYy9leHBlcmltZW50YWwvLmxpYnMvbGlic3Rk YysrZXhwLmEiXSB7CisJICBhcHBlbmQgZmxhZ3MgIiAtTCR7Z2NjcGF0aH0vbGlic3RkYysrLXYz L3NyYy9leHBlcmltZW50YWwvLmxpYnMgIgorCSAgYXBwZW5kIGxkX2xpYnJhcnlfcGF0aCAiOiR7 Z2NjcGF0aH0vbGlic3RkYysrLXYzL3NyYy9leHBlcmltZW50YWwvLmxpYnMiCisgICAgICB9CiAK ICAgICAgIGlmIFtmaWxlIGV4aXN0cyAiJHtnY2NwYXRofS9saWJpYmVydHkvbGliaWJlcnR5LmEi XSB7CiAgICAgICAgICAgYXBwZW5kIGZsYWdzICItTCR7Z2NjcGF0aH0vbGliaWJlcnR5ICIKLS0g CjIuMzEuMQoK --------------09qljYXB0SDCLEsl9xfgHkki--