<?xml version="1.0" encoding="UTF-8" standalone="yes" ?>
<!DOCTYPE bugzilla SYSTEM "https://bugs.webkit.org/page.cgi?id=bugzilla.dtd">

<bugzilla version="5.0.4.1"
          urlbase="https://bugs.webkit.org/"
          
          maintainer="admin@webkit.org"
>

    <bug>
          <bug_id>91981</bug_id>
          
          <creation_ts>2012-07-23 04:22:30 -0700</creation_ts>
          <short_desc>Ref-count AtomicHTMLToken</short_desc>
          <delta_ts>2012-07-23 15:02:29 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>DOM</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>91703</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Kwang Yul Seo">skyul</reporter>
          <assigned_to name="Kwang Yul Seo">skyul</assigned_to>
          <cc>abarth</cc>
    
    <cc>eric</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>675610</commentid>
    <comment_count>0</comment_count>
    <who name="Kwang Yul Seo">skyul</who>
    <bug_when>2012-07-23 04:22:30 -0700</bug_when>
    <thetext>To avoid copying AtomicHTMLToken in Bug 91703, AtomicHTMLToken needs to be ref-counted.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>675612</commentid>
    <comment_count>1</comment_count>
      <attachid>153772</attachid>
    <who name="Kwang Yul Seo">skyul</who>
    <bug_when>2012-07-23 04:30:30 -0700</bug_when>
    <thetext>Created attachment 153772
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>675763</commentid>
    <comment_count>2</comment_count>
      <attachid>153772</attachid>
    <who name="Adam Barth">abarth</who>
    <bug_when>2012-07-23 09:20:22 -0700</bug_when>
    <thetext>Comment on attachment 153772
Patch

View in context: https://bugs.webkit.org/attachment.cgi?id=153772&amp;action=review

Thanks for splitting this out into a separate patch.  The only concern I have with this patch is that AtomicHTMLToken has an external character buffer.  If we retain the atomic token too long, then that will point to garbage memory.

&gt; Source/WebCore/html/parser/HTMLToken.h:105
&gt; +    AtomicHTMLToken(HTMLToken&amp; token) : AtomicMarkupTokenBase&lt;HTMLToken&gt;(&amp;token) { }

This should be split onto four lines like the other constructor.

&gt; Source/WebCore/html/parser/HTMLTreeBuilder.cpp:436
&gt; -    AtomicHTMLToken token(rawToken);
&gt; +    RefPtr&lt;AtomicHTMLToken&gt; token = AtomicHTMLToken::create(rawToken);

I wonder if we should clear the external character buffer pointers at the end of this function...  That way we won&apos;t risk having any dangling pointers.  Would you be willing to post a follow up patch that tries that?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>676041</commentid>
    <comment_count>3</comment_count>
    <who name="Kwang Yul Seo">skyul</who>
    <bug_when>2012-07-23 14:59:20 -0700</bug_when>
    <thetext>(In reply to comment #2)
&gt; &gt; Source/WebCore/html/parser/HTMLToken.h:105
&gt; &gt; +    AtomicHTMLToken(HTMLToken&amp; token) : AtomicMarkupTokenBase&lt;HTMLToken&gt;(&amp;token) { }
&gt; 
&gt; This should be split onto four lines like the other constructor.

Okay. I will change it when I land the patch.
 
&gt; &gt; Source/WebCore/html/parser/HTMLTreeBuilder.cpp:436
&gt; &gt; -    AtomicHTMLToken token(rawToken);
&gt; &gt; +    RefPtr&lt;AtomicHTMLToken&gt; token = AtomicHTMLToken::create(rawToken);
&gt; 
&gt; I wonder if we should clear the external character buffer pointers at the end of this function...  That way we won&apos;t risk having any dangling pointers.  Would you be willing to post a follow up patch that tries that?

Sure, I will file a bug. We keep only the start tag tokens in the element stack and the list of active formatting elements , so there is no dangling pointer in the current code paths. But I agree that we need to make sure this, so we won&apos;t accidentally have dangling pointers later.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>676048</commentid>
    <comment_count>4</comment_count>
    <who name="Kwang Yul Seo">skyul</who>
    <bug_when>2012-07-23 15:02:29 -0700</bug_when>
    <thetext>Committed r123389: &lt;http://trac.webkit.org/changeset/123389&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>153772</attachid>
            <date>2012-07-23 04:30:30 -0700</date>
            <delta_ts>2012-07-23 09:20:22 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-91981-20120723203019.patch</filename>
            <type>text/plain</type>
            <size>110866</size>
            <attacher name="Kwang Yul Seo">skyul</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTIzMzE5CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNGI1MzFiODBjNWM4MWIx
MzlhZDllZGRlZWZiZDZhMGZlZDA3MzE0OS4uNGMwY2E4MzI1NGFlNGNkMTU1NzQ1MzdiMThlMGVk
NGNlMmE5N2FjNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDg2IEBACisyMDEyLTA3LTIzICBLd2Fu
ZyBZdWwgU2VvICA8c2t5dWxAY29tcGFueTEwMC5uZXQ+CisKKyAgICAgICAgUmVmLWNvdW50IEF0
b21pY0hUTUxUb2tlbgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9OTE5ODEKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAg
ICAgICBSZWYtY291bnQgQXRvbWljSFRNTFRva2VuIHRvIGF2b2lkIGNvcHlpbmcgQXRvbWljSFRN
TFRva2VuIGluIEJ1ZyA5MTcwMy4KKworICAgICAgICBObyBuZXcgdGVzdHMgLSBubyBmdW5jdGlv
bmFsIGNoYW5nZXMuCisKKyAgICAgICAgKiBodG1sL3BhcnNlci9IVE1MQ29uc3RydWN0aW9uU2l0
ZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpIVE1MQ29uc3RydWN0aW9uU2l0ZTo6aW5zZXJ0SFRN
TEh0bWxTdGFydFRhZ0JlZm9yZUhUTUwpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTENvbnN0cnVj
dGlvblNpdGU6Om1lcmdlQXR0cmlidXRlc0Zyb21Ub2tlbkludG9FbGVtZW50KToKKyAgICAgICAg
KFdlYkNvcmU6OkhUTUxDb25zdHJ1Y3Rpb25TaXRlOjppbnNlcnRIVE1MSHRtbFN0YXJ0VGFnSW5C
b2R5KToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxDb25zdHJ1Y3Rpb25TaXRlOjppbnNlcnRIVE1M
Qm9keVN0YXJ0VGFnSW5Cb2R5KToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxDb25zdHJ1Y3Rpb25T
aXRlOjppbnNlcnREb2N0eXBlKToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxDb25zdHJ1Y3Rpb25T
aXRlOjppbnNlcnRDb21tZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxDb25zdHJ1Y3Rpb25T
aXRlOjppbnNlcnRDb21tZW50T25Eb2N1bWVudCk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MQ29u
c3RydWN0aW9uU2l0ZTo6aW5zZXJ0Q29tbWVudE9uSFRNTEh0bWxFbGVtZW50KToKKyAgICAgICAg
KFdlYkNvcmU6OkhUTUxDb25zdHJ1Y3Rpb25TaXRlOjppbnNlcnRIVE1MSGVhZEVsZW1lbnQpOgor
ICAgICAgICAoV2ViQ29yZTo6SFRNTENvbnN0cnVjdGlvblNpdGU6Omluc2VydEhUTUxCb2R5RWxl
bWVudCk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MQ29uc3RydWN0aW9uU2l0ZTo6aW5zZXJ0SFRN
TEZvcm1FbGVtZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxDb25zdHJ1Y3Rpb25TaXRlOjpp
bnNlcnRIVE1MRWxlbWVudCk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MQ29uc3RydWN0aW9uU2l0
ZTo6aW5zZXJ0U2VsZkNsb3NpbmdIVE1MRWxlbWVudCk6CisgICAgICAgIChXZWJDb3JlOjpIVE1M
Q29uc3RydWN0aW9uU2l0ZTo6aW5zZXJ0Rm9ybWF0dGluZ0VsZW1lbnQpOgorICAgICAgICAoV2Vi
Q29yZTo6SFRNTENvbnN0cnVjdGlvblNpdGU6Omluc2VydFNjcmlwdEVsZW1lbnQpOgorICAgICAg
ICAoV2ViQ29yZTo6SFRNTENvbnN0cnVjdGlvblNpdGU6Omluc2VydEZvcmVpZ25FbGVtZW50KToK
KyAgICAgICAgKFdlYkNvcmU6OkhUTUxDb25zdHJ1Y3Rpb25TaXRlOjpjcmVhdGVFbGVtZW50KToK
KyAgICAgICAgKFdlYkNvcmU6OkhUTUxDb25zdHJ1Y3Rpb25TaXRlOjpjcmVhdGVIVE1MRWxlbWVu
dCk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MQ29uc3RydWN0aW9uU2l0ZTo6Y3JlYXRlSFRNTEVs
ZW1lbnRGcm9tU2F2ZWRFbGVtZW50KToKKyAgICAgICAgKiBodG1sL3BhcnNlci9IVE1MQ29uc3Ry
dWN0aW9uU2l0ZS5oOgorICAgICAgICAoSFRNTENvbnN0cnVjdGlvblNpdGUpOgorICAgICAgICAq
IGh0bWwvcGFyc2VyL0hUTUxUb2tlbi5oOgorICAgICAgICAoV2ViQ29yZTo6QXRvbWljSFRNTFRv
a2VuOjpjcmVhdGUpOgorICAgICAgICAoQXRvbWljSFRNTFRva2VuKToKKyAgICAgICAgKFdlYkNv
cmU6OkF0b21pY0hUTUxUb2tlbjo6QXRvbWljSFRNTFRva2VuKToKKyAgICAgICAgKiBodG1sL3Bh
cnNlci9IVE1MVHJlZUJ1aWxkZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SFRNTFRyZWVCdWls
ZGVyOjpFeHRlcm5hbENoYXJhY3RlclRva2VuQnVmZmVyOjpFeHRlcm5hbENoYXJhY3RlclRva2Vu
QnVmZmVyKToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxUcmVlQnVpbGRlcjo6Y29uc3RydWN0VHJl
ZUZyb21Ub2tlbik6CisgICAgICAgIChXZWJDb3JlOjpIVE1MVHJlZUJ1aWxkZXI6OmNvbnN0cnVj
dFRyZWVGcm9tQXRvbWljVG9rZW4pOgorICAgICAgICAoV2ViQ29yZTo6SFRNTFRyZWVCdWlsZGVy
Ojpwcm9jZXNzVG9rZW4pOgorICAgICAgICAoV2ViQ29yZTo6SFRNTFRyZWVCdWlsZGVyOjpwcm9j
ZXNzRG9jdHlwZVRva2VuKToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxUcmVlQnVpbGRlcjo6cHJv
Y2Vzc0Zha2VTdGFydFRhZyk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MVHJlZUJ1aWxkZXI6OnBy
b2Nlc3NGYWtlRW5kVGFnKToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxUcmVlQnVpbGRlcjo6cHJv
Y2Vzc0Zha2VQRW5kVGFnSWZQSW5CdXR0b25TY29wZSk6CisgICAgICAgIChXZWJDb3JlOjpIVE1M
VHJlZUJ1aWxkZXI6OmF0dHJpYnV0ZXNGb3JJc2luZGV4SW5wdXQpOgorICAgICAgICAoV2ViQ29y
ZTo6SFRNTFRyZWVCdWlsZGVyOjpwcm9jZXNzSXNpbmRleFN0YXJ0VGFnRm9ySW5Cb2R5KToKKyAg
ICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTFRyZWVCdWlsZGVyOjpwcm9j
ZXNzQ2xvc2VXaGVuTmVzdGVkVGFnKToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxUcmVlQnVpbGRl
cjo6cHJvY2Vzc1N0YXJ0VGFnRm9ySW5Cb2R5KToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxUcmVl
QnVpbGRlcjo6cHJvY2Vzc1N0YXJ0VGFnRm9ySW5UYWJsZSk6CisgICAgICAgIChXZWJDb3JlOjpI
VE1MVHJlZUJ1aWxkZXI6OnByb2Nlc3NTdGFydFRhZyk6CisgICAgICAgIChXZWJDb3JlOjpIVE1M
VHJlZUJ1aWxkZXI6OnByb2Nlc3NIdG1sU3RhcnRUYWdGb3JJbkJvZHkpOgorICAgICAgICAoV2Vi
Q29yZTo6SFRNTFRyZWVCdWlsZGVyOjpwcm9jZXNzQm9keUVuZFRhZ0ZvckluQm9keSk6CisgICAg
ICAgIChXZWJDb3JlOjpIVE1MVHJlZUJ1aWxkZXI6OnByb2Nlc3NBbnlPdGhlckVuZFRhZ0Zvcklu
Qm9keSk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MVHJlZUJ1aWxkZXI6OmNhbGxUaGVBZG9wdGlv
bkFnZW5jeSk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MVHJlZUJ1aWxkZXI6OnByb2Nlc3NFbmRU
YWdGb3JJblRhYmxlQm9keSk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MVHJlZUJ1aWxkZXI6OnBy
b2Nlc3NFbmRUYWdGb3JJblJvdyk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MVHJlZUJ1aWxkZXI6
OnByb2Nlc3NFbmRUYWdGb3JJbkNlbGwpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTFRyZWVCdWls
ZGVyOjpwcm9jZXNzRW5kVGFnRm9ySW5Cb2R5KToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxUcmVl
QnVpbGRlcjo6cHJvY2Vzc0VuZFRhZ0ZvckluVGFibGUpOgorICAgICAgICAoV2ViQ29yZTo6SFRN
TFRyZWVCdWlsZGVyOjpwcm9jZXNzRW5kVGFnKToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxUcmVl
QnVpbGRlcjo6cHJvY2Vzc0NvbW1lbnQpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTFRyZWVCdWls
ZGVyOjpwcm9jZXNzQ2hhcmFjdGVyKToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxUcmVlQnVpbGRl
cjo6cHJvY2Vzc0VuZE9mRmlsZSk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MVHJlZUJ1aWxkZXI6
OmRlZmF1bHRGb3JCZWZvcmVIVE1MKToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxUcmVlQnVpbGRl
cjo6ZGVmYXVsdEZvckJlZm9yZUhlYWQpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTFRyZWVCdWls
ZGVyOjpkZWZhdWx0Rm9ySW5IZWFkKToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxUcmVlQnVpbGRl
cjo6ZGVmYXVsdEZvckluSGVhZE5vc2NyaXB0KToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxUcmVl
QnVpbGRlcjo6ZGVmYXVsdEZvckFmdGVySGVhZCk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MVHJl
ZUJ1aWxkZXI6OnByb2Nlc3NTdGFydFRhZ0ZvckluSGVhZCk6CisgICAgICAgIChXZWJDb3JlOjpI
VE1MVHJlZUJ1aWxkZXI6OnByb2Nlc3NHZW5lcmljUkNEQVRBU3RhcnRUYWcpOgorICAgICAgICAo
V2ViQ29yZTo6SFRNTFRyZWVCdWlsZGVyOjpwcm9jZXNzR2VuZXJpY1Jhd1RleHRTdGFydFRhZyk6
CisgICAgICAgIChXZWJDb3JlOjpIVE1MVHJlZUJ1aWxkZXI6OnByb2Nlc3NTY3JpcHRTdGFydFRh
Zyk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MVHJlZUJ1aWxkZXI6OnNob3VsZFByb2Nlc3NUb2tl
bkluRm9yZWlnbkNvbnRlbnQpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTFRyZWVCdWlsZGVyOjpw
cm9jZXNzVG9rZW5JbkZvcmVpZ25Db250ZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxUcmVl
QnVpbGRlcjo6cGFyc2VFcnJvcik6CisgICAgICAgICogaHRtbC9wYXJzZXIvSFRNTFRyZWVCdWls
ZGVyLmg6CisgICAgICAgIChIVE1MVHJlZUJ1aWxkZXIpOgorICAgICAgICAqIGh0bWwvcGFyc2Vy
L1RleHREb2N1bWVudFBhcnNlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpUZXh0RG9jdW1lbnRQ
YXJzZXI6Omluc2VydEZha2VQcmVFbGVtZW50KToKKwogMjAxMi0wNy0yMyAgQ2FybG9zIEdhcmNp
YSBDYW1wb3MgIDxjZ2FyY2lhQGlnYWxpYS5jb20+CiAKICAgICAgICAgVW5yZXZpZXdlZC4gRml4
IEdUSysgYnVpbGQgd2l0aCBFTkFCTEVfREFUQUxJU1RfRUxFTUVOVC4KZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL2h0bWwvcGFyc2VyL0hUTUxDb25zdHJ1Y3Rpb25TaXRlLmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL2h0bWwvcGFyc2VyL0hUTUxDb25zdHJ1Y3Rpb25TaXRlLmNwcAppbmRleCA5NDU0
ZjVmZDliYzUwMzY3NDRiZTVkNTczMjJlOGIxMDI5YjllMzVlLi5iMzBhOGFlYjc5ZjU4ZDk4YWRh
M2JjYzVkMTA0YmM1MDUzMmI2MmE5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL3Bh
cnNlci9IVE1MQ29uc3RydWN0aW9uU2l0ZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9w
YXJzZXIvSFRNTENvbnN0cnVjdGlvblNpdGUuY3BwCkBAIC0xOTIsMTAgKzE5MiwxMCBAQCB2b2lk
IEhUTUxDb25zdHJ1Y3Rpb25TaXRlOjpkaXNwYXRjaERvY3VtZW50RWxlbWVudEF2YWlsYWJsZUlm
TmVlZGVkKCkKICAgICAgICAgbV9kb2N1bWVudC0+ZnJhbWUoKS0+bG9hZGVyKCktPmRpc3BhdGNo
RG9jdW1lbnRFbGVtZW50QXZhaWxhYmxlKCk7CiB9CiAKLXZvaWQgSFRNTENvbnN0cnVjdGlvblNp
dGU6Omluc2VydEhUTUxIdG1sU3RhcnRUYWdCZWZvcmVIVE1MKEF0b21pY0hUTUxUb2tlbiYgdG9r
ZW4pCit2b2lkIEhUTUxDb25zdHJ1Y3Rpb25TaXRlOjppbnNlcnRIVE1MSHRtbFN0YXJ0VGFnQmVm
b3JlSFRNTChBdG9taWNIVE1MVG9rZW4qIHRva2VuKQogewogICAgIFJlZlB0cjxIVE1MSHRtbEVs
ZW1lbnQ+IGVsZW1lbnQgPSBIVE1MSHRtbEVsZW1lbnQ6OmNyZWF0ZShtX2RvY3VtZW50KTsKLSAg
ICBlbGVtZW50LT5wYXJzZXJTZXRBdHRyaWJ1dGVzKHRva2VuLmF0dHJpYnV0ZXMoKSwgbV9mcmFn
bWVudFNjcmlwdGluZ1Blcm1pc3Npb24pOworICAgIGVsZW1lbnQtPnBhcnNlclNldEF0dHJpYnV0
ZXModG9rZW4tPmF0dHJpYnV0ZXMoKSwgbV9mcmFnbWVudFNjcmlwdGluZ1Blcm1pc3Npb24pOwog
ICAgIGF0dGFjaExhdGVyKG1fYXR0YWNobWVudFJvb3QsIGVsZW1lbnQpOwogICAgIG1fb3BlbkVs
ZW1lbnRzLnB1c2hIVE1MSHRtbEVsZW1lbnQoZWxlbWVudCk7CiAKQEAgLTIwNCwyMSArMjA0LDIx
IEBAIHZvaWQgSFRNTENvbnN0cnVjdGlvblNpdGU6Omluc2VydEhUTUxIdG1sU3RhcnRUYWdCZWZv
cmVIVE1MKEF0b21pY0hUTUxUb2tlbiYgdG9rCiAgICAgZGlzcGF0Y2hEb2N1bWVudEVsZW1lbnRB
dmFpbGFibGVJZk5lZWRlZCgpOwogfQogCi12b2lkIEhUTUxDb25zdHJ1Y3Rpb25TaXRlOjptZXJn
ZUF0dHJpYnV0ZXNGcm9tVG9rZW5JbnRvRWxlbWVudChBdG9taWNIVE1MVG9rZW4mIHRva2VuLCBF
bGVtZW50KiBlbGVtZW50KQordm9pZCBIVE1MQ29uc3RydWN0aW9uU2l0ZTo6bWVyZ2VBdHRyaWJ1
dGVzRnJvbVRva2VuSW50b0VsZW1lbnQoQXRvbWljSFRNTFRva2VuKiB0b2tlbiwgRWxlbWVudCog
ZWxlbWVudCkKIHsKLSAgICBpZiAodG9rZW4uYXR0cmlidXRlcygpLmlzRW1wdHkoKSkKKyAgICBp
ZiAodG9rZW4tPmF0dHJpYnV0ZXMoKS5pc0VtcHR5KCkpCiAgICAgICAgIHJldHVybjsKIAogICAg
IEVsZW1lbnRBdHRyaWJ1dGVEYXRhKiBlbGVtZW50QXR0cmlidXRlRGF0YSA9IGVsZW1lbnQtPmVu
c3VyZUF0dHJpYnV0ZURhdGEoKTsKIAotICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCB0b2tl
bi5hdHRyaWJ1dGVzKCkuc2l6ZSgpOyArK2kpIHsKLSAgICAgICAgY29uc3QgQXR0cmlidXRlJiB0
b2tlbkF0dHJpYnV0ZSA9IHRva2VuLmF0dHJpYnV0ZXMoKS5hdChpKTsKKyAgICBmb3IgKHVuc2ln
bmVkIGkgPSAwOyBpIDwgdG9rZW4tPmF0dHJpYnV0ZXMoKS5zaXplKCk7ICsraSkgeworICAgICAg
ICBjb25zdCBBdHRyaWJ1dGUmIHRva2VuQXR0cmlidXRlID0gdG9rZW4tPmF0dHJpYnV0ZXMoKS5h
dChpKTsKICAgICAgICAgaWYgKCFlbGVtZW50QXR0cmlidXRlRGF0YS0+Z2V0QXR0cmlidXRlSXRl
bSh0b2tlbkF0dHJpYnV0ZS5uYW1lKCkpKQogICAgICAgICAgICAgZWxlbWVudC0+c2V0QXR0cmli
dXRlKHRva2VuQXR0cmlidXRlLm5hbWUoKSwgdG9rZW5BdHRyaWJ1dGUudmFsdWUoKSk7CiAgICAg
fQogfQogCi12b2lkIEhUTUxDb25zdHJ1Y3Rpb25TaXRlOjppbnNlcnRIVE1MSHRtbFN0YXJ0VGFn
SW5Cb2R5KEF0b21pY0hUTUxUb2tlbiYgdG9rZW4pCit2b2lkIEhUTUxDb25zdHJ1Y3Rpb25TaXRl
OjppbnNlcnRIVE1MSHRtbFN0YXJ0VGFnSW5Cb2R5KEF0b21pY0hUTUxUb2tlbiogdG9rZW4pCiB7
CiAgICAgLy8gRnJhZ21lbnRzIGRvIG5vdCBoYXZlIGEgcm9vdCBIVE1MIGVsZW1lbnQsIHNvIGFu
eSBhZGRpdGlvbmFsIEhUTUwgZWxlbWVudHMKICAgICAvLyBlbmNvdW50ZXJlZCBkdXJpbmcgZnJh
Z21lbnQgcGFyc2luZyBzaG91bGQgYmUgaWdub3JlZC4KQEAgLTIyOCwxNiArMjI4LDE2IEBAIHZv
aWQgSFRNTENvbnN0cnVjdGlvblNpdGU6Omluc2VydEhUTUxIdG1sU3RhcnRUYWdJbkJvZHkoQXRv
bWljSFRNTFRva2VuJiB0b2tlbikKICAgICBtZXJnZUF0dHJpYnV0ZXNGcm9tVG9rZW5JbnRvRWxl
bWVudCh0b2tlbiwgbV9vcGVuRWxlbWVudHMuaHRtbEVsZW1lbnQoKSk7CiB9CiAKLXZvaWQgSFRN
TENvbnN0cnVjdGlvblNpdGU6Omluc2VydEhUTUxCb2R5U3RhcnRUYWdJbkJvZHkoQXRvbWljSFRN
TFRva2VuJiB0b2tlbikKK3ZvaWQgSFRNTENvbnN0cnVjdGlvblNpdGU6Omluc2VydEhUTUxCb2R5
U3RhcnRUYWdJbkJvZHkoQXRvbWljSFRNTFRva2VuKiB0b2tlbikKIHsKICAgICBtZXJnZUF0dHJp
YnV0ZXNGcm9tVG9rZW5JbnRvRWxlbWVudCh0b2tlbiwgbV9vcGVuRWxlbWVudHMuYm9keUVsZW1l
bnQoKSk7CiB9CiAKLXZvaWQgSFRNTENvbnN0cnVjdGlvblNpdGU6Omluc2VydERvY3R5cGUoQXRv
bWljSFRNTFRva2VuJiB0b2tlbikKK3ZvaWQgSFRNTENvbnN0cnVjdGlvblNpdGU6Omluc2VydERv
Y3R5cGUoQXRvbWljSFRNTFRva2VuKiB0b2tlbikKIHsKLSAgICBBU1NFUlQodG9rZW4udHlwZSgp
ID09IEhUTUxUb2tlblR5cGVzOjpET0NUWVBFKTsKKyAgICBBU1NFUlQodG9rZW4tPnR5cGUoKSA9
PSBIVE1MVG9rZW5UeXBlczo6RE9DVFlQRSk7CiAKLSAgICBSZWZQdHI8RG9jdW1lbnRUeXBlPiBk
b2N0eXBlID0gRG9jdW1lbnRUeXBlOjpjcmVhdGUobV9kb2N1bWVudCwgdG9rZW4ubmFtZSgpLCBT
dHJpbmc6OmFkb3B0KHRva2VuLnB1YmxpY0lkZW50aWZpZXIoKSksIFN0cmluZzo6YWRvcHQodG9r
ZW4uc3lzdGVtSWRlbnRpZmllcigpKSk7CisgICAgUmVmUHRyPERvY3VtZW50VHlwZT4gZG9jdHlw
ZSA9IERvY3VtZW50VHlwZTo6Y3JlYXRlKG1fZG9jdW1lbnQsIHRva2VuLT5uYW1lKCksIFN0cmlu
Zzo6YWRvcHQodG9rZW4tPnB1YmxpY0lkZW50aWZpZXIoKSksIFN0cmluZzo6YWRvcHQodG9rZW4t
PnN5c3RlbUlkZW50aWZpZXIoKSkpOwogICAgIGF0dGFjaExhdGVyKG1fYXR0YWNobWVudFJvb3Qs
IGRvY3R5cGUucmVsZWFzZSgpKTsKIAogICAgIC8vIERPQ1RZUEUgbm9kZXMgYXJlIG9ubHkgcHJv
Y2Vzc2VkIHdoZW4gcGFyc2luZyBmcmFnbWVudHMgdy9vIGNvbnRleHRFbGVtZW50cywgd2hpY2gK
QEAgLTI0OSw3ICsyNDksNyBAQCB2b2lkIEhUTUxDb25zdHJ1Y3Rpb25TaXRlOjppbnNlcnREb2N0
eXBlKEF0b21pY0hUTUxUb2tlbiYgdG9rZW4pCiAgICAgaWYgKG1faXNQYXJzaW5nRnJhZ21lbnQp
CiAgICAgICAgIHJldHVybjsKIAotICAgIGlmICh0b2tlbi5mb3JjZVF1aXJrcygpKQorICAgIGlm
ICh0b2tlbi0+Zm9yY2VRdWlya3MoKSkKICAgICAgICAgbV9kb2N1bWVudC0+c2V0Q29tcGF0aWJp
bGl0eU1vZGUoRG9jdW1lbnQ6OlF1aXJrc01vZGUpOwogICAgIGVsc2UgewogICAgICAgICAvLyBX
ZSBuZWVkIHRvIGFjdHVhbGx5IGFkZCB0aGUgRG9jdHlwZSBub2RlIHRvIHRoZSBET00uCkBAIC0y
NTgsMjYgKzI1OCwyNiBAQCB2b2lkIEhUTUxDb25zdHJ1Y3Rpb25TaXRlOjppbnNlcnREb2N0eXBl
KEF0b21pY0hUTUxUb2tlbiYgdG9rZW4pCiAgICAgfQogfQogCi12b2lkIEhUTUxDb25zdHJ1Y3Rp
b25TaXRlOjppbnNlcnRDb21tZW50KEF0b21pY0hUTUxUb2tlbiYgdG9rZW4pCit2b2lkIEhUTUxD
b25zdHJ1Y3Rpb25TaXRlOjppbnNlcnRDb21tZW50KEF0b21pY0hUTUxUb2tlbiogdG9rZW4pCiB7
Ci0gICAgQVNTRVJUKHRva2VuLnR5cGUoKSA9PSBIVE1MVG9rZW5UeXBlczo6Q29tbWVudCk7Ci0g
ICAgYXR0YWNoTGF0ZXIoY3VycmVudE5vZGUoKSwgQ29tbWVudDo6Y3JlYXRlKGN1cnJlbnROb2Rl
KCktPmRvY3VtZW50KCksIHRva2VuLmNvbW1lbnQoKSkpOworICAgIEFTU0VSVCh0b2tlbi0+dHlw
ZSgpID09IEhUTUxUb2tlblR5cGVzOjpDb21tZW50KTsKKyAgICBhdHRhY2hMYXRlcihjdXJyZW50
Tm9kZSgpLCBDb21tZW50OjpjcmVhdGUoY3VycmVudE5vZGUoKS0+ZG9jdW1lbnQoKSwgdG9rZW4t
PmNvbW1lbnQoKSkpOwogfQogCi12b2lkIEhUTUxDb25zdHJ1Y3Rpb25TaXRlOjppbnNlcnRDb21t
ZW50T25Eb2N1bWVudChBdG9taWNIVE1MVG9rZW4mIHRva2VuKQordm9pZCBIVE1MQ29uc3RydWN0
aW9uU2l0ZTo6aW5zZXJ0Q29tbWVudE9uRG9jdW1lbnQoQXRvbWljSFRNTFRva2VuKiB0b2tlbikK
IHsKLSAgICBBU1NFUlQodG9rZW4udHlwZSgpID09IEhUTUxUb2tlblR5cGVzOjpDb21tZW50KTsK
LSAgICBhdHRhY2hMYXRlcihtX2F0dGFjaG1lbnRSb290LCBDb21tZW50OjpjcmVhdGUobV9kb2N1
bWVudCwgdG9rZW4uY29tbWVudCgpKSk7CisgICAgQVNTRVJUKHRva2VuLT50eXBlKCkgPT0gSFRN
TFRva2VuVHlwZXM6OkNvbW1lbnQpOworICAgIGF0dGFjaExhdGVyKG1fYXR0YWNobWVudFJvb3Qs
IENvbW1lbnQ6OmNyZWF0ZShtX2RvY3VtZW50LCB0b2tlbi0+Y29tbWVudCgpKSk7CiB9CiAKLXZv
aWQgSFRNTENvbnN0cnVjdGlvblNpdGU6Omluc2VydENvbW1lbnRPbkhUTUxIdG1sRWxlbWVudChB
dG9taWNIVE1MVG9rZW4mIHRva2VuKQordm9pZCBIVE1MQ29uc3RydWN0aW9uU2l0ZTo6aW5zZXJ0
Q29tbWVudE9uSFRNTEh0bWxFbGVtZW50KEF0b21pY0hUTUxUb2tlbiogdG9rZW4pCiB7Ci0gICAg
QVNTRVJUKHRva2VuLnR5cGUoKSA9PSBIVE1MVG9rZW5UeXBlczo6Q29tbWVudCk7CisgICAgQVNT
RVJUKHRva2VuLT50eXBlKCkgPT0gSFRNTFRva2VuVHlwZXM6OkNvbW1lbnQpOwogICAgIENvbnRh
aW5lck5vZGUqIHBhcmVudCA9IG1fb3BlbkVsZW1lbnRzLnJvb3ROb2RlKCk7Ci0gICAgYXR0YWNo
TGF0ZXIocGFyZW50LCBDb21tZW50OjpjcmVhdGUocGFyZW50LT5kb2N1bWVudCgpLCB0b2tlbi5j
b21tZW50KCkpKTsKKyAgICBhdHRhY2hMYXRlcihwYXJlbnQsIENvbW1lbnQ6OmNyZWF0ZShwYXJl
bnQtPmRvY3VtZW50KCksIHRva2VuLT5jb21tZW50KCkpKTsKIH0KIAotdm9pZCBIVE1MQ29uc3Ry
dWN0aW9uU2l0ZTo6aW5zZXJ0SFRNTEhlYWRFbGVtZW50KEF0b21pY0hUTUxUb2tlbiYgdG9rZW4p
Cit2b2lkIEhUTUxDb25zdHJ1Y3Rpb25TaXRlOjppbnNlcnRIVE1MSGVhZEVsZW1lbnQoQXRvbWlj
SFRNTFRva2VuKiB0b2tlbikKIHsKICAgICBBU1NFUlQoIXNob3VsZEZvc3RlclBhcmVudCgpKTsK
ICAgICBtX2hlYWQgPSBjcmVhdGVIVE1MRWxlbWVudCh0b2tlbik7CkBAIC0yODUsNyArMjg1LDcg
QEAgdm9pZCBIVE1MQ29uc3RydWN0aW9uU2l0ZTo6aW5zZXJ0SFRNTEhlYWRFbGVtZW50KEF0b21p
Y0hUTUxUb2tlbiYgdG9rZW4pCiAgICAgbV9vcGVuRWxlbWVudHMucHVzaEhUTUxIZWFkRWxlbWVu
dChtX2hlYWQpOwogfQogCi12b2lkIEhUTUxDb25zdHJ1Y3Rpb25TaXRlOjppbnNlcnRIVE1MQm9k
eUVsZW1lbnQoQXRvbWljSFRNTFRva2VuJiB0b2tlbikKK3ZvaWQgSFRNTENvbnN0cnVjdGlvblNp
dGU6Omluc2VydEhUTUxCb2R5RWxlbWVudChBdG9taWNIVE1MVG9rZW4qIHRva2VuKQogewogICAg
IEFTU0VSVCghc2hvdWxkRm9zdGVyUGFyZW50KCkpOwogICAgIFJlZlB0cjxFbGVtZW50PiBib2R5
ID0gY3JlYXRlSFRNTEVsZW1lbnQodG9rZW4pOwpAQCAtMjkzLDcgKzI5Myw3IEBAIHZvaWQgSFRN
TENvbnN0cnVjdGlvblNpdGU6Omluc2VydEhUTUxCb2R5RWxlbWVudChBdG9taWNIVE1MVG9rZW4m
IHRva2VuKQogICAgIG1fb3BlbkVsZW1lbnRzLnB1c2hIVE1MQm9keUVsZW1lbnQoYm9keS5yZWxl
YXNlKCkpOwogfQogCi12b2lkIEhUTUxDb25zdHJ1Y3Rpb25TaXRlOjppbnNlcnRIVE1MRm9ybUVs
ZW1lbnQoQXRvbWljSFRNTFRva2VuJiB0b2tlbiwgYm9vbCBpc0RlbW90ZWQpCit2b2lkIEhUTUxD
b25zdHJ1Y3Rpb25TaXRlOjppbnNlcnRIVE1MRm9ybUVsZW1lbnQoQXRvbWljSFRNTFRva2VuKiB0
b2tlbiwgYm9vbCBpc0RlbW90ZWQpCiB7CiAgICAgUmVmUHRyPEVsZW1lbnQ+IGVsZW1lbnQgPSBj
cmVhdGVIVE1MRWxlbWVudCh0b2tlbik7CiAgICAgQVNTRVJUKGVsZW1lbnQtPmhhc1RhZ05hbWUo
Zm9ybVRhZykpOwpAQCAtMzAzLDE2ICszMDMsMTYgQEAgdm9pZCBIVE1MQ29uc3RydWN0aW9uU2l0
ZTo6aW5zZXJ0SFRNTEZvcm1FbGVtZW50KEF0b21pY0hUTUxUb2tlbiYgdG9rZW4sIGJvb2wgaXMK
ICAgICBtX29wZW5FbGVtZW50cy5wdXNoKG1fZm9ybSk7CiB9CiAKLXZvaWQgSFRNTENvbnN0cnVj
dGlvblNpdGU6Omluc2VydEhUTUxFbGVtZW50KEF0b21pY0hUTUxUb2tlbiYgdG9rZW4pCit2b2lk
IEhUTUxDb25zdHJ1Y3Rpb25TaXRlOjppbnNlcnRIVE1MRWxlbWVudChBdG9taWNIVE1MVG9rZW4q
IHRva2VuKQogewogICAgIFJlZlB0cjxFbGVtZW50PiBlbGVtZW50ID0gY3JlYXRlSFRNTEVsZW1l
bnQodG9rZW4pOwogICAgIGF0dGFjaExhdGVyKGN1cnJlbnROb2RlKCksIGVsZW1lbnQpOwogICAg
IG1fb3BlbkVsZW1lbnRzLnB1c2goZWxlbWVudC5yZWxlYXNlKCkpOwogfQogCi12b2lkIEhUTUxD
b25zdHJ1Y3Rpb25TaXRlOjppbnNlcnRTZWxmQ2xvc2luZ0hUTUxFbGVtZW50KEF0b21pY0hUTUxU
b2tlbiYgdG9rZW4pCit2b2lkIEhUTUxDb25zdHJ1Y3Rpb25TaXRlOjppbnNlcnRTZWxmQ2xvc2lu
Z0hUTUxFbGVtZW50KEF0b21pY0hUTUxUb2tlbiogdG9rZW4pCiB7Ci0gICAgQVNTRVJUKHRva2Vu
LnR5cGUoKSA9PSBIVE1MVG9rZW5UeXBlczo6U3RhcnRUYWcpOworICAgIEFTU0VSVCh0b2tlbi0+
dHlwZSgpID09IEhUTUxUb2tlblR5cGVzOjpTdGFydFRhZyk7CiAgICAgLy8gTm9ybWFsbHkgSFRN
TEVsZW1lbnRTdGFjayBpcyByZXNwb25zaWJsZSBmb3IgY2FsbGluZyBmaW5pc2hQYXJzaW5nQ2hp
bGRyZW4sCiAgICAgLy8gYnV0IHNlbGYtY2xvc2luZyBlbGVtZW50cyBhcmUgbmV2ZXIgaW4gdGhl
IGVsZW1lbnQgc3RhY2sgc28gdGhlIHN0YWNrCiAgICAgLy8gZG9lc24ndCBnZXQgYSBjaGFuY2Ug
dG8gdGVsbCB0aGVtIHRoYXQgd2UncmUgZG9uZSBwYXJzaW5nIHRoZWlyIGNoaWxkcmVuLgpAQCAt
MzIxLDcgKzMyMSw3IEBAIHZvaWQgSFRNTENvbnN0cnVjdGlvblNpdGU6Omluc2VydFNlbGZDbG9z
aW5nSFRNTEVsZW1lbnQoQXRvbWljSFRNTFRva2VuJiB0b2tlbikKICAgICAvLyBodHRwOi8vd3d3
LndoYXR3Zy5vcmcvc3BlY3Mvd2ViLWFwcHMvY3VycmVudC13b3JrL211bHRpcGFnZS90b2tlbml6
YXRpb24uaHRtbCNhY2tub3dsZWRnZS1zZWxmLWNsb3NpbmctZmxhZwogfQogCi12b2lkIEhUTUxD
b25zdHJ1Y3Rpb25TaXRlOjppbnNlcnRGb3JtYXR0aW5nRWxlbWVudChBdG9taWNIVE1MVG9rZW4m
IHRva2VuKQordm9pZCBIVE1MQ29uc3RydWN0aW9uU2l0ZTo6aW5zZXJ0Rm9ybWF0dGluZ0VsZW1l
bnQoQXRvbWljSFRNTFRva2VuKiB0b2tlbikKIHsKICAgICAvLyBodHRwOi8vd3d3LndoYXR3Zy5v
cmcvc3BlY3Mvd2ViLWFwcHMvY3VycmVudC13b3JrL211bHRpcGFnZS9wYXJzaW5nLmh0bWwjdGhl
LXN0YWNrLW9mLW9wZW4tZWxlbWVudHMKICAgICAvLyBQb3NzaWJsZSBhY3RpdmUgZm9ybWF0dGlu
ZyBlbGVtZW50cyBpbmNsdWRlOgpAQCAtMzMwLDcgKzMzMCw3IEBAIHZvaWQgSFRNTENvbnN0cnVj
dGlvblNpdGU6Omluc2VydEZvcm1hdHRpbmdFbGVtZW50KEF0b21pY0hUTUxUb2tlbiYgdG9rZW4p
CiAgICAgbV9hY3RpdmVGb3JtYXR0aW5nRWxlbWVudHMuYXBwZW5kKGN1cnJlbnRFbGVtZW50KCkp
OwogfQogCi12b2lkIEhUTUxDb25zdHJ1Y3Rpb25TaXRlOjppbnNlcnRTY3JpcHRFbGVtZW50KEF0
b21pY0hUTUxUb2tlbiYgdG9rZW4pCit2b2lkIEhUTUxDb25zdHJ1Y3Rpb25TaXRlOjppbnNlcnRT
Y3JpcHRFbGVtZW50KEF0b21pY0hUTUxUb2tlbiogdG9rZW4pCiB7CiAgICAgLy8gaHR0cDovL3d3
dy53aGF0d2cub3JnL3NwZWNzL3dlYi1hcHBzL2N1cnJlbnQtd29yay9tdWx0aXBhZ2Uvc2NyaXB0
aW5nLTEuaHRtbCNhbHJlYWR5LXN0YXJ0ZWQKICAgICAvLyBodHRwOi8vaHRtbDUub3JnL3NwZWNz
L2RvbS1wYXJzaW5nLmh0bWwjZG9tLXJhbmdlLWNyZWF0ZWNvbnRleHR1YWxmcmFnbWVudApAQCAt
MzQxLDE5ICszNDEsMTkgQEAgdm9pZCBIVE1MQ29uc3RydWN0aW9uU2l0ZTo6aW5zZXJ0U2NyaXB0
RWxlbWVudChBdG9taWNIVE1MVG9rZW4mIHRva2VuKQogICAgIGNvbnN0IGJvb2wgYWxyZWFkeVN0
YXJ0ZWQgPSBtX2lzUGFyc2luZ0ZyYWdtZW50ICYmIHBhcnNlckluc2VydGVkOwogICAgIFJlZlB0
cjxIVE1MU2NyaXB0RWxlbWVudD4gZWxlbWVudCA9IEhUTUxTY3JpcHRFbGVtZW50OjpjcmVhdGUo
c2NyaXB0VGFnLCBjdXJyZW50Tm9kZSgpLT5kb2N1bWVudCgpLCBwYXJzZXJJbnNlcnRlZCwgYWxy
ZWFkeVN0YXJ0ZWQpOwogICAgIGlmIChtX2ZyYWdtZW50U2NyaXB0aW5nUGVybWlzc2lvbiAhPSBE
aXNhbGxvd1NjcmlwdGluZ0NvbnRlbnQpCi0gICAgICAgIGVsZW1lbnQtPnBhcnNlclNldEF0dHJp
YnV0ZXModG9rZW4uYXR0cmlidXRlcygpLCBtX2ZyYWdtZW50U2NyaXB0aW5nUGVybWlzc2lvbik7
CisgICAgICAgIGVsZW1lbnQtPnBhcnNlclNldEF0dHJpYnV0ZXModG9rZW4tPmF0dHJpYnV0ZXMo
KSwgbV9mcmFnbWVudFNjcmlwdGluZ1Blcm1pc3Npb24pOwogICAgIGF0dGFjaExhdGVyKGN1cnJl
bnROb2RlKCksIGVsZW1lbnQpOwogICAgIG1fb3BlbkVsZW1lbnRzLnB1c2goZWxlbWVudC5yZWxl
YXNlKCkpOwogfQogCi12b2lkIEhUTUxDb25zdHJ1Y3Rpb25TaXRlOjppbnNlcnRGb3JlaWduRWxl
bWVudChBdG9taWNIVE1MVG9rZW4mIHRva2VuLCBjb25zdCBBdG9taWNTdHJpbmcmIG5hbWVzcGFj
ZVVSSSkKK3ZvaWQgSFRNTENvbnN0cnVjdGlvblNpdGU6Omluc2VydEZvcmVpZ25FbGVtZW50KEF0
b21pY0hUTUxUb2tlbiogdG9rZW4sIGNvbnN0IEF0b21pY1N0cmluZyYgbmFtZXNwYWNlVVJJKQog
ewotICAgIEFTU0VSVCh0b2tlbi50eXBlKCkgPT0gSFRNTFRva2VuVHlwZXM6OlN0YXJ0VGFnKTsK
KyAgICBBU1NFUlQodG9rZW4tPnR5cGUoKSA9PSBIVE1MVG9rZW5UeXBlczo6U3RhcnRUYWcpOwog
ICAgIG5vdEltcGxlbWVudGVkKCk7IC8vIHBhcnNlRXJyb3Igd2hlbiB4bWxucyBvciB4bWxuczp4
bGluayBhcmUgd3JvbmcuCiAKICAgICBSZWZQdHI8RWxlbWVudD4gZWxlbWVudCA9IGNyZWF0ZUVs
ZW1lbnQodG9rZW4sIG5hbWVzcGFjZVVSSSk7Ci0gICAgYXR0YWNoTGF0ZXIoY3VycmVudE5vZGUo
KSwgZWxlbWVudCwgdG9rZW4uc2VsZkNsb3NpbmcoKSk7Ci0gICAgaWYgKCF0b2tlbi5zZWxmQ2xv
c2luZygpKQorICAgIGF0dGFjaExhdGVyKGN1cnJlbnROb2RlKCksIGVsZW1lbnQsIHRva2VuLT5z
ZWxmQ2xvc2luZygpKTsKKyAgICBpZiAoIXRva2VuLT5zZWxmQ2xvc2luZygpKQogICAgICAgICBt
X29wZW5FbGVtZW50cy5wdXNoKGVsZW1lbnQucmVsZWFzZSgpKTsKIH0KIApAQCAtMzk4LDIyICsz
OTgsMjIgQEAgdm9pZCBIVE1MQ29uc3RydWN0aW9uU2l0ZTo6aW5zZXJ0VGV4dE5vZGUoY29uc3Qg
U3RyaW5nJiBjaGFyYWN0ZXJzLCBXaGl0ZXNwYWNlTW8KICAgICB9CiB9CiAKLVBhc3NSZWZQdHI8
RWxlbWVudD4gSFRNTENvbnN0cnVjdGlvblNpdGU6OmNyZWF0ZUVsZW1lbnQoQXRvbWljSFRNTFRv
a2VuJiB0b2tlbiwgY29uc3QgQXRvbWljU3RyaW5nJiBuYW1lc3BhY2VVUkkpCitQYXNzUmVmUHRy
PEVsZW1lbnQ+IEhUTUxDb25zdHJ1Y3Rpb25TaXRlOjpjcmVhdGVFbGVtZW50KEF0b21pY0hUTUxU
b2tlbiogdG9rZW4sIGNvbnN0IEF0b21pY1N0cmluZyYgbmFtZXNwYWNlVVJJKQogewotICAgIFF1
YWxpZmllZE5hbWUgdGFnTmFtZShudWxsQXRvbSwgdG9rZW4ubmFtZSgpLCBuYW1lc3BhY2VVUkkp
OworICAgIFF1YWxpZmllZE5hbWUgdGFnTmFtZShudWxsQXRvbSwgdG9rZW4tPm5hbWUoKSwgbmFt
ZXNwYWNlVVJJKTsKICAgICBSZWZQdHI8RWxlbWVudD4gZWxlbWVudCA9IGN1cnJlbnROb2RlKCkt
PmRvY3VtZW50KCktPmNyZWF0ZUVsZW1lbnQodGFnTmFtZSwgdHJ1ZSk7Ci0gICAgZWxlbWVudC0+
cGFyc2VyU2V0QXR0cmlidXRlcyh0b2tlbi5hdHRyaWJ1dGVzKCksIG1fZnJhZ21lbnRTY3JpcHRp
bmdQZXJtaXNzaW9uKTsKKyAgICBlbGVtZW50LT5wYXJzZXJTZXRBdHRyaWJ1dGVzKHRva2VuLT5h
dHRyaWJ1dGVzKCksIG1fZnJhZ21lbnRTY3JpcHRpbmdQZXJtaXNzaW9uKTsKICAgICByZXR1cm4g
ZWxlbWVudC5yZWxlYXNlKCk7CiB9CiAKLVBhc3NSZWZQdHI8RWxlbWVudD4gSFRNTENvbnN0cnVj
dGlvblNpdGU6OmNyZWF0ZUhUTUxFbGVtZW50KEF0b21pY0hUTUxUb2tlbiYgdG9rZW4pCitQYXNz
UmVmUHRyPEVsZW1lbnQ+IEhUTUxDb25zdHJ1Y3Rpb25TaXRlOjpjcmVhdGVIVE1MRWxlbWVudChB
dG9taWNIVE1MVG9rZW4qIHRva2VuKQogewotICAgIFF1YWxpZmllZE5hbWUgdGFnTmFtZShudWxs
QXRvbSwgdG9rZW4ubmFtZSgpLCB4aHRtbE5hbWVzcGFjZVVSSSk7CisgICAgUXVhbGlmaWVkTmFt
ZSB0YWdOYW1lKG51bGxBdG9tLCB0b2tlbi0+bmFtZSgpLCB4aHRtbE5hbWVzcGFjZVVSSSk7CiAg
ICAgLy8gRklYTUU6IFRoaXMgY2FuJ3QgdXNlIEhUTUxDb25zdHJ1Y3Rpb25TaXRlOjpjcmVhdGVF
bGVtZW50IGJlY2F1c2Ugd2UKICAgICAvLyBoYXZlIHRvIHBhc3MgdGhlIGN1cnJlbnQgZm9ybSBl
bGVtZW50LiAgV2Ugc2hvdWxkIHJld29yayBmb3JtIGFzc29jaWF0aW9uCiAgICAgLy8gdG8gb2Nj
dXIgYWZ0ZXIgY29uc3RydWN0aW9uIHRvIGFsbG93IGJldHRlciBjb2RlIHNoYXJpbmcgaGVyZS4K
ICAgICBSZWZQdHI8RWxlbWVudD4gZWxlbWVudCA9IEhUTUxFbGVtZW50RmFjdG9yeTo6Y3JlYXRl
SFRNTEVsZW1lbnQodGFnTmFtZSwgY3VycmVudE5vZGUoKS0+ZG9jdW1lbnQoKSwgZm9ybSgpLCB0
cnVlKTsKLSAgICBlbGVtZW50LT5wYXJzZXJTZXRBdHRyaWJ1dGVzKHRva2VuLmF0dHJpYnV0ZXMo
KSwgbV9mcmFnbWVudFNjcmlwdGluZ1Blcm1pc3Npb24pOworICAgIGVsZW1lbnQtPnBhcnNlclNl
dEF0dHJpYnV0ZXModG9rZW4tPmF0dHJpYnV0ZXMoKSwgbV9mcmFnbWVudFNjcmlwdGluZ1Blcm1p
c3Npb24pOwogICAgIEFTU0VSVChlbGVtZW50LT5pc0hUTUxFbGVtZW50KCkpOwogICAgIHJldHVy
biBlbGVtZW50LnJlbGVhc2UoKTsKIH0KQEAgLTQzOCw4ICs0MzgsOCBAQCBQYXNzUmVmUHRyPEVs
ZW1lbnQ+IEhUTUxDb25zdHJ1Y3Rpb25TaXRlOjpjcmVhdGVIVE1MRWxlbWVudEZyb21TYXZlZEVs
ZW1lbnQoRWxlbQogICAgIGlmIChFbGVtZW50QXR0cmlidXRlRGF0YSogYXR0cmlidXRlRGF0YSA9
IGVsZW1lbnQtPnVwZGF0ZWRBdHRyaWJ1dGVEYXRhKCkpCiAgICAgICAgIGNsb25lZEF0dHJpYnV0
ZXMgPSBhdHRyaWJ1dGVEYXRhLT5jbG9uZWRBdHRyaWJ1dGVWZWN0b3IoKTsKIAotICAgIEF0b21p
Y0hUTUxUb2tlbiBmYWtlVG9rZW4oSFRNTFRva2VuVHlwZXM6OlN0YXJ0VGFnLCBlbGVtZW50LT5s
b2NhbE5hbWUoKSwgY2xvbmVkQXR0cmlidXRlcyk7Ci0gICAgcmV0dXJuIGNyZWF0ZUhUTUxFbGVt
ZW50KGZha2VUb2tlbik7CisgICAgUmVmUHRyPEF0b21pY0hUTUxUb2tlbj4gZmFrZVRva2VuID0g
QXRvbWljSFRNTFRva2VuOjpjcmVhdGUoSFRNTFRva2VuVHlwZXM6OlN0YXJ0VGFnLCBlbGVtZW50
LT5sb2NhbE5hbWUoKSwgY2xvbmVkQXR0cmlidXRlcyk7CisgICAgcmV0dXJuIGNyZWF0ZUhUTUxF
bGVtZW50KGZha2VUb2tlbi5nZXQoKSk7CiB9CiAKIGJvb2wgSFRNTENvbnN0cnVjdGlvblNpdGU6
OmluZGV4T2ZGaXJzdFVub3BlbkZvcm1hdHRpbmdFbGVtZW50KHVuc2lnbmVkJiBmaXJzdFVub3Bl
bkVsZW1lbnRJbmRleCkgY29uc3QKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvcGFy
c2VyL0hUTUxDb25zdHJ1Y3Rpb25TaXRlLmggYi9Tb3VyY2UvV2ViQ29yZS9odG1sL3BhcnNlci9I
VE1MQ29uc3RydWN0aW9uU2l0ZS5oCmluZGV4IDM2N2MwZmUyNjg1NmJmNzZkMWQ0ZTY4NDJhNmZj
ZTFkOTVmYjNjYTEuLmVkOTU4NDk0NWQzNDQ1OWQxN2YzMzZiNTIzYTIwMDExM2ExNjM1ZjYgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvcGFyc2VyL0hUTUxDb25zdHJ1Y3Rpb25TaXRl
LmgKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9wYXJzZXIvSFRNTENvbnN0cnVjdGlvblNpdGUu
aApAQCAtODcsMjUgKzg3LDI1IEBAIHB1YmxpYzoKICAgICB2b2lkIGRldGFjaCgpOwogICAgIHZv
aWQgZXhlY3V0ZVF1ZXVlZFRhc2tzKCk7CiAKLSAgICB2b2lkIGluc2VydERvY3R5cGUoQXRvbWlj
SFRNTFRva2VuJik7Ci0gICAgdm9pZCBpbnNlcnRDb21tZW50KEF0b21pY0hUTUxUb2tlbiYpOwot
ICAgIHZvaWQgaW5zZXJ0Q29tbWVudE9uRG9jdW1lbnQoQXRvbWljSFRNTFRva2VuJik7Ci0gICAg
dm9pZCBpbnNlcnRDb21tZW50T25IVE1MSHRtbEVsZW1lbnQoQXRvbWljSFRNTFRva2VuJik7Ci0g
ICAgdm9pZCBpbnNlcnRIVE1MRWxlbWVudChBdG9taWNIVE1MVG9rZW4mKTsKLSAgICB2b2lkIGlu
c2VydFNlbGZDbG9zaW5nSFRNTEVsZW1lbnQoQXRvbWljSFRNTFRva2VuJik7Ci0gICAgdm9pZCBp
bnNlcnRGb3JtYXR0aW5nRWxlbWVudChBdG9taWNIVE1MVG9rZW4mKTsKLSAgICB2b2lkIGluc2Vy
dEhUTUxIZWFkRWxlbWVudChBdG9taWNIVE1MVG9rZW4mKTsKLSAgICB2b2lkIGluc2VydEhUTUxC
b2R5RWxlbWVudChBdG9taWNIVE1MVG9rZW4mKTsKLSAgICB2b2lkIGluc2VydEhUTUxGb3JtRWxl
bWVudChBdG9taWNIVE1MVG9rZW4mLCBib29sIGlzRGVtb3RlZCA9IGZhbHNlKTsKLSAgICB2b2lk
IGluc2VydFNjcmlwdEVsZW1lbnQoQXRvbWljSFRNTFRva2VuJik7CisgICAgdm9pZCBpbnNlcnRE
b2N0eXBlKEF0b21pY0hUTUxUb2tlbiopOworICAgIHZvaWQgaW5zZXJ0Q29tbWVudChBdG9taWNI
VE1MVG9rZW4qKTsKKyAgICB2b2lkIGluc2VydENvbW1lbnRPbkRvY3VtZW50KEF0b21pY0hUTUxU
b2tlbiopOworICAgIHZvaWQgaW5zZXJ0Q29tbWVudE9uSFRNTEh0bWxFbGVtZW50KEF0b21pY0hU
TUxUb2tlbiopOworICAgIHZvaWQgaW5zZXJ0SFRNTEVsZW1lbnQoQXRvbWljSFRNTFRva2VuKik7
CisgICAgdm9pZCBpbnNlcnRTZWxmQ2xvc2luZ0hUTUxFbGVtZW50KEF0b21pY0hUTUxUb2tlbiop
OworICAgIHZvaWQgaW5zZXJ0Rm9ybWF0dGluZ0VsZW1lbnQoQXRvbWljSFRNTFRva2VuKik7Cisg
ICAgdm9pZCBpbnNlcnRIVE1MSGVhZEVsZW1lbnQoQXRvbWljSFRNTFRva2VuKik7CisgICAgdm9p
ZCBpbnNlcnRIVE1MQm9keUVsZW1lbnQoQXRvbWljSFRNTFRva2VuKik7CisgICAgdm9pZCBpbnNl
cnRIVE1MRm9ybUVsZW1lbnQoQXRvbWljSFRNTFRva2VuKiwgYm9vbCBpc0RlbW90ZWQgPSBmYWxz
ZSk7CisgICAgdm9pZCBpbnNlcnRTY3JpcHRFbGVtZW50KEF0b21pY0hUTUxUb2tlbiopOwogICAg
IHZvaWQgaW5zZXJ0VGV4dE5vZGUoY29uc3QgU3RyaW5nJiwgV2hpdGVzcGFjZU1vZGUgPSBXaGl0
ZXNwYWNlVW5rbm93bik7Ci0gICAgdm9pZCBpbnNlcnRGb3JlaWduRWxlbWVudChBdG9taWNIVE1M
VG9rZW4mLCBjb25zdCBBdG9taWNTdHJpbmcmIG5hbWVzcGFjZVVSSSk7CisgICAgdm9pZCBpbnNl
cnRGb3JlaWduRWxlbWVudChBdG9taWNIVE1MVG9rZW4qLCBjb25zdCBBdG9taWNTdHJpbmcmIG5h
bWVzcGFjZVVSSSk7CiAKLSAgICB2b2lkIGluc2VydEhUTUxIdG1sU3RhcnRUYWdCZWZvcmVIVE1M
KEF0b21pY0hUTUxUb2tlbiYpOwotICAgIHZvaWQgaW5zZXJ0SFRNTEh0bWxTdGFydFRhZ0luQm9k
eShBdG9taWNIVE1MVG9rZW4mKTsKLSAgICB2b2lkIGluc2VydEhUTUxCb2R5U3RhcnRUYWdJbkJv
ZHkoQXRvbWljSFRNTFRva2VuJik7CisgICAgdm9pZCBpbnNlcnRIVE1MSHRtbFN0YXJ0VGFnQmVm
b3JlSFRNTChBdG9taWNIVE1MVG9rZW4qKTsKKyAgICB2b2lkIGluc2VydEhUTUxIdG1sU3RhcnRU
YWdJbkJvZHkoQXRvbWljSFRNTFRva2VuKik7CisgICAgdm9pZCBpbnNlcnRIVE1MQm9keVN0YXJ0
VGFnSW5Cb2R5KEF0b21pY0hUTUxUb2tlbiopOwogCi0gICAgUGFzc1JlZlB0cjxFbGVtZW50PiBj
cmVhdGVIVE1MRWxlbWVudChBdG9taWNIVE1MVG9rZW4mKTsKKyAgICBQYXNzUmVmUHRyPEVsZW1l
bnQ+IGNyZWF0ZUhUTUxFbGVtZW50KEF0b21pY0hUTUxUb2tlbiopOwogICAgIFBhc3NSZWZQdHI8
RWxlbWVudD4gY3JlYXRlSFRNTEVsZW1lbnRGcm9tRWxlbWVudFJlY29yZChIVE1MRWxlbWVudFN0
YWNrOjpFbGVtZW50UmVjb3JkKik7CiAKICAgICBib29sIHNob3VsZEZvc3RlclBhcmVudCgpIGNv
bnN0OwpAQCAtMTYxLDkgKzE2MSw5IEBAIHByaXZhdGU6CiAgICAgdm9pZCBmaW5kRm9zdGVyU2l0
ZShIVE1MQ29uc3RydWN0aW9uU2l0ZVRhc2smKTsKIAogICAgIFBhc3NSZWZQdHI8RWxlbWVudD4g
Y3JlYXRlSFRNTEVsZW1lbnRGcm9tU2F2ZWRFbGVtZW50KEVsZW1lbnQqKTsKLSAgICBQYXNzUmVm
UHRyPEVsZW1lbnQ+IGNyZWF0ZUVsZW1lbnQoQXRvbWljSFRNTFRva2VuJiwgY29uc3QgQXRvbWlj
U3RyaW5nJiBuYW1lc3BhY2VVUkkpOworICAgIFBhc3NSZWZQdHI8RWxlbWVudD4gY3JlYXRlRWxl
bWVudChBdG9taWNIVE1MVG9rZW4qLCBjb25zdCBBdG9taWNTdHJpbmcmIG5hbWVzcGFjZVVSSSk7
CiAKLSAgICB2b2lkIG1lcmdlQXR0cmlidXRlc0Zyb21Ub2tlbkludG9FbGVtZW50KEF0b21pY0hU
TUxUb2tlbiYsIEVsZW1lbnQqKTsKKyAgICB2b2lkIG1lcmdlQXR0cmlidXRlc0Zyb21Ub2tlbklu
dG9FbGVtZW50KEF0b21pY0hUTUxUb2tlbiosIEVsZW1lbnQqKTsKICAgICB2b2lkIGRpc3BhdGNo
RG9jdW1lbnRFbGVtZW50QXZhaWxhYmxlSWZOZWVkZWQoKTsKIAogICAgIERvY3VtZW50KiBtX2Rv
Y3VtZW50OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9wYXJzZXIvSFRNTFRva2Vu
LmggYi9Tb3VyY2UvV2ViQ29yZS9odG1sL3BhcnNlci9IVE1MVG9rZW4uaAppbmRleCAzYTg3ZTIy
NGQwNjE3M2Q5NTVmYWQ5M2UxNzk3MjQxODQzM2YwM2YyLi4yMTUzNDgzNGNkZDVhZjBjMzYzM2M4
MjBmNjFmZjc5Yzk2ZDMwZThjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL3BhcnNl
ci9IVE1MVG9rZW4uaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL3BhcnNlci9IVE1MVG9rZW4u
aApAQCAtMjcsNiArMjcsOCBAQAogI2RlZmluZSBIVE1MVG9rZW5faAogCiAjaW5jbHVkZSAiTWFy
a3VwVG9rZW5CYXNlLmgiCisjaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4KKyNpbmNsdWRlIDx3
dGYvUmVmUHRyLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIApAQCAtODEsMTQgKzgzLDE3IEBA
IHB1YmxpYzoKICAgICB9CiB9OwogCi1jbGFzcyBBdG9taWNIVE1MVG9rZW4gOiBwdWJsaWMgQXRv
bWljTWFya3VwVG9rZW5CYXNlPEhUTUxUb2tlbj4geworY2xhc3MgQXRvbWljSFRNTFRva2VuIDog
cHVibGljIEF0b21pY01hcmt1cFRva2VuQmFzZTxIVE1MVG9rZW4+LCBwdWJsaWMgUmVmQ291bnRl
ZDxBdG9taWNIVE1MVG9rZW4+IHsKICAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShBdG9taWNIVE1M
VG9rZW4pOwogcHVibGljOgotICAgIEF0b21pY0hUTUxUb2tlbihIVE1MVG9rZW4mIHRva2VuKSA6
IEF0b21pY01hcmt1cFRva2VuQmFzZTxIVE1MVG9rZW4+KCZ0b2tlbikgeyB9CisgICAgc3RhdGlj
IFBhc3NSZWZQdHI8QXRvbWljSFRNTFRva2VuPiBjcmVhdGUoSFRNTFRva2VuJiB0b2tlbikKKyAg
ICB7CisgICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgQXRvbWljSFRNTFRva2VuKHRva2VuKSk7
CisgICAgfQogCi0gICAgQXRvbWljSFRNTFRva2VuKEhUTUxUb2tlblR5cGVzOjpUeXBlIHR5cGUs
IGNvbnN0IEF0b21pY1N0cmluZyYgbmFtZSwgY29uc3QgVmVjdG9yPEF0dHJpYnV0ZT4mIGF0dHJp
YnV0ZXMgPSBWZWN0b3I8QXR0cmlidXRlPigpKQotICAgICAgICA6IEF0b21pY01hcmt1cFRva2Vu
QmFzZTxIVE1MVG9rZW4+KHR5cGUsIG5hbWUsIGF0dHJpYnV0ZXMpCisgICAgc3RhdGljIFBhc3NS
ZWZQdHI8QXRvbWljSFRNTFRva2VuPiBjcmVhdGUoSFRNTFRva2VuVHlwZXM6OlR5cGUgdHlwZSwg
Y29uc3QgQXRvbWljU3RyaW5nJiBuYW1lLCBjb25zdCBWZWN0b3I8QXR0cmlidXRlPiYgYXR0cmli
dXRlcyA9IFZlY3RvcjxBdHRyaWJ1dGU+KCkpCiAgICAgeworICAgICAgICByZXR1cm4gYWRvcHRS
ZWYobmV3IEF0b21pY0hUTUxUb2tlbih0eXBlLCBuYW1lLCBhdHRyaWJ1dGVzKSk7CiAgICAgfQog
CiAgICAgYm9vbCBmb3JjZVF1aXJrcygpIGNvbnN0CkBAIC05Niw2ICsxMDEsMTMgQEAgcHVibGlj
OgogICAgICAgICBBU1NFUlQobV90eXBlID09IEhUTUxUb2tlblR5cGVzOjpET0NUWVBFKTsKICAg
ICAgICAgcmV0dXJuIG1fZG9jdHlwZURhdGEtPm1fZm9yY2VRdWlya3M7CiAgICAgfQorcHJpdmF0
ZToKKyAgICBBdG9taWNIVE1MVG9rZW4oSFRNTFRva2VuJiB0b2tlbikgOiBBdG9taWNNYXJrdXBU
b2tlbkJhc2U8SFRNTFRva2VuPigmdG9rZW4pIHsgfQorCisgICAgQXRvbWljSFRNTFRva2VuKEhU
TUxUb2tlblR5cGVzOjpUeXBlIHR5cGUsIGNvbnN0IEF0b21pY1N0cmluZyYgbmFtZSwgY29uc3Qg
VmVjdG9yPEF0dHJpYnV0ZT4mIGF0dHJpYnV0ZXMgPSBWZWN0b3I8QXR0cmlidXRlPigpKQorICAg
ICAgICA6IEF0b21pY01hcmt1cFRva2VuQmFzZTxIVE1MVG9rZW4+KHR5cGUsIG5hbWUsIGF0dHJp
YnV0ZXMpCisgICAgeworICAgIH0KIH07CiAKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L2h0bWwvcGFyc2VyL0hUTUxUcmVlQnVpbGRlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL3Bh
cnNlci9IVE1MVHJlZUJ1aWxkZXIuY3BwCmluZGV4IDZhMmIwZTc3MDYyYTg0MDI3ZmMwNGQ0YmQx
ZDlmOGJmOTQ3ZWNiYWMuLjcwMjZlNjg0MGFmMTRjNmM3MmNhOTlmNjlhMzNjYTAyOWNjZjNlZDUg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvcGFyc2VyL0hUTUxUcmVlQnVpbGRlci5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9wYXJzZXIvSFRNTFRyZWVCdWlsZGVyLmNwcApA
QCAtMjQ1LDkgKzI0NSw5IEBAIEhUTUxGb3JtRWxlbWVudCogY2xvc2VzdEZvcm1BbmNlc3RvcihF
bGVtZW50KiBlbGVtZW50KQogY2xhc3MgSFRNTFRyZWVCdWlsZGVyOjpFeHRlcm5hbENoYXJhY3Rl
clRva2VuQnVmZmVyIHsKICAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShFeHRlcm5hbENoYXJhY3Rl
clRva2VuQnVmZmVyKTsKIHB1YmxpYzoKLSAgICBleHBsaWNpdCBFeHRlcm5hbENoYXJhY3RlclRv
a2VuQnVmZmVyKEF0b21pY0hUTUxUb2tlbiYgdG9rZW4pCi0gICAgICAgIDogbV9jdXJyZW50KHRv
a2VuLmNoYXJhY3RlcnMoKS5kYXRhKCkpCi0gICAgICAgICwgbV9lbmQobV9jdXJyZW50ICsgdG9r
ZW4uY2hhcmFjdGVycygpLnNpemUoKSkKKyAgICBleHBsaWNpdCBFeHRlcm5hbENoYXJhY3RlclRv
a2VuQnVmZmVyKEF0b21pY0hUTUxUb2tlbiogdG9rZW4pCisgICAgICAgIDogbV9jdXJyZW50KHRv
a2VuLT5jaGFyYWN0ZXJzKCkuZGF0YSgpKQorICAgICAgICAsIG1fZW5kKG1fY3VycmVudCArIHRv
a2VuLT5jaGFyYWN0ZXJzKCkuc2l6ZSgpKQogICAgIHsKICAgICAgICAgQVNTRVJUKCFpc0VtcHR5
KCkpOwogICAgIH0KQEAgLTQzMyw3ICs0MzMsNyBAQCBQYXNzUmVmUHRyPEVsZW1lbnQ+IEhUTUxU
cmVlQnVpbGRlcjo6dGFrZVNjcmlwdFRvUHJvY2VzcyhUZXh0UG9zaXRpb24mIHNjcmlwdFN0YQog
CiB2b2lkIEhUTUxUcmVlQnVpbGRlcjo6Y29uc3RydWN0VHJlZUZyb21Ub2tlbihIVE1MVG9rZW4m
IHJhd1Rva2VuKQogewotICAgIEF0b21pY0hUTUxUb2tlbiB0b2tlbihyYXdUb2tlbik7CisgICAg
UmVmUHRyPEF0b21pY0hUTUxUb2tlbj4gdG9rZW4gPSBBdG9taWNIVE1MVG9rZW46OmNyZWF0ZShy
YXdUb2tlbik7CiAKICAgICAvLyBXZSBjbGVhciB0aGUgcmF3VG9rZW4gaW4gY2FzZSBjb25zdHJ1
Y3RUcmVlRnJvbUF0b21pY1Rva2VuCiAgICAgLy8gc3luY2hyb25vdXNseSByZS1lbnRlcnMgdGhl
IHBhcnNlci4gV2UgZG9uJ3QgY2xlYXIgdGhlIHRva2VuIGltbWVkYXRlbHkKQEAgLTQ0OCw3ICs0
NDgsNyBAQCB2b2lkIEhUTUxUcmVlQnVpbGRlcjo6Y29uc3RydWN0VHJlZUZyb21Ub2tlbihIVE1M
VG9rZW4mIHJhd1Rva2VuKQogICAgIGlmIChyYXdUb2tlbi50eXBlKCkgIT0gSFRNTFRva2VuVHlw
ZXM6OkNoYXJhY3RlcikKICAgICAgICAgcmF3VG9rZW4uY2xlYXIoKTsKIAotICAgIGNvbnN0cnVj
dFRyZWVGcm9tQXRvbWljVG9rZW4odG9rZW4pOworICAgIGNvbnN0cnVjdFRyZWVGcm9tQXRvbWlj
VG9rZW4odG9rZW4uZ2V0KCkpOwogCiAgICAgaWYgKCFyYXdUb2tlbi5pc1VuaW5pdGlhbGl6ZWQo
KSkgewogICAgICAgICBBU1NFUlQocmF3VG9rZW4udHlwZSgpID09IEhUTUxUb2tlblR5cGVzOjpD
aGFyYWN0ZXIpOwpAQCAtNDU2LDcgKzQ1Niw3IEBAIHZvaWQgSFRNTFRyZWVCdWlsZGVyOjpjb25z
dHJ1Y3RUcmVlRnJvbVRva2VuKEhUTUxUb2tlbiYgcmF3VG9rZW4pCiAgICAgfQogfQogCi12b2lk
IEhUTUxUcmVlQnVpbGRlcjo6Y29uc3RydWN0VHJlZUZyb21BdG9taWNUb2tlbihBdG9taWNIVE1M
VG9rZW4mIHRva2VuKQordm9pZCBIVE1MVHJlZUJ1aWxkZXI6OmNvbnN0cnVjdFRyZWVGcm9tQXRv
bWljVG9rZW4oQXRvbWljSFRNTFRva2VuKiB0b2tlbikKIHsKICAgICBpZiAoc2hvdWxkUHJvY2Vz
c1Rva2VuSW5Gb3JlaWduQ29udGVudCh0b2tlbikpCiAgICAgICAgIHByb2Nlc3NUb2tlbkluRm9y
ZWlnbkNvbnRlbnQodG9rZW4pOwpAQCAtNDc1LDkgKzQ3NSw5IEBAIHZvaWQgSFRNTFRyZWVCdWls
ZGVyOjpjb25zdHJ1Y3RUcmVlRnJvbUF0b21pY1Rva2VuKEF0b21pY0hUTUxUb2tlbiYgdG9rZW4p
CiAgICAgLy8gV2UgbWlnaHQgYmUgZGV0YWNoZWQgbm93LgogfQogCi12b2lkIEhUTUxUcmVlQnVp
bGRlcjo6cHJvY2Vzc1Rva2VuKEF0b21pY0hUTUxUb2tlbiYgdG9rZW4pCit2b2lkIEhUTUxUcmVl
QnVpbGRlcjo6cHJvY2Vzc1Rva2VuKEF0b21pY0hUTUxUb2tlbiogdG9rZW4pCiB7Ci0gICAgc3dp
dGNoICh0b2tlbi50eXBlKCkpIHsKKyAgICBzd2l0Y2ggKHRva2VuLT50eXBlKCkpIHsKICAgICBj
YXNlIEhUTUxUb2tlblR5cGVzOjpVbmluaXRpYWxpemVkOgogICAgICAgICBBU1NFUlRfTk9UX1JF
QUNIRUQoKTsKICAgICAgICAgYnJlYWs7CkBAIC01MDcsOSArNTA3LDkgQEAgdm9pZCBIVE1MVHJl
ZUJ1aWxkZXI6OnByb2Nlc3NUb2tlbihBdG9taWNIVE1MVG9rZW4mIHRva2VuKQogICAgIH0KIH0K
IAotdm9pZCBIVE1MVHJlZUJ1aWxkZXI6OnByb2Nlc3NEb2N0eXBlVG9rZW4oQXRvbWljSFRNTFRv
a2VuJiB0b2tlbikKK3ZvaWQgSFRNTFRyZWVCdWlsZGVyOjpwcm9jZXNzRG9jdHlwZVRva2VuKEF0
b21pY0hUTUxUb2tlbiogdG9rZW4pCiB7Ci0gICAgQVNTRVJUKHRva2VuLnR5cGUoKSA9PSBIVE1M
VG9rZW5UeXBlczo6RE9DVFlQRSk7CisgICAgQVNTRVJUKHRva2VuLT50eXBlKCkgPT0gSFRNTFRv
a2VuVHlwZXM6OkRPQ1RZUEUpOwogICAgIGlmIChtX2luc2VydGlvbk1vZGUgPT0gSW5pdGlhbE1v
ZGUpIHsKICAgICAgICAgbV90cmVlLmluc2VydERvY3R5cGUodG9rZW4pOwogICAgICAgICBzZXRJ
bnNlcnRpb25Nb2RlKEJlZm9yZUhUTUxNb2RlKTsKQEAgLTUyNiwxNSArNTI2LDE1IEBAIHZvaWQg
SFRNTFRyZWVCdWlsZGVyOjpwcm9jZXNzRG9jdHlwZVRva2VuKEF0b21pY0hUTUxUb2tlbiYgdG9r
ZW4pCiB2b2lkIEhUTUxUcmVlQnVpbGRlcjo6cHJvY2Vzc0Zha2VTdGFydFRhZyhjb25zdCBRdWFs
aWZpZWROYW1lJiB0YWdOYW1lLCBjb25zdCBWZWN0b3I8QXR0cmlidXRlPiYgYXR0cmlidXRlcykK
IHsKICAgICAvLyBGSVhNRTogV2UnbGwgbmVlZCBhIGZhbmNpZXIgY29udmVyc2lvbiB0aGFuIGp1
c3QgImxvY2FsTmFtZSIgZm9yIFNWRy9NYXRoTUwgdGFncy4KLSAgICBBdG9taWNIVE1MVG9rZW4g
ZmFrZVRva2VuKEhUTUxUb2tlblR5cGVzOjpTdGFydFRhZywgdGFnTmFtZS5sb2NhbE5hbWUoKSwg
YXR0cmlidXRlcyk7Ci0gICAgcHJvY2Vzc1N0YXJ0VGFnKGZha2VUb2tlbik7CisgICAgUmVmUHRy
PEF0b21pY0hUTUxUb2tlbj4gZmFrZVRva2VuID0gQXRvbWljSFRNTFRva2VuOjpjcmVhdGUoSFRN
TFRva2VuVHlwZXM6OlN0YXJ0VGFnLCB0YWdOYW1lLmxvY2FsTmFtZSgpLCBhdHRyaWJ1dGVzKTsK
KyAgICBwcm9jZXNzU3RhcnRUYWcoZmFrZVRva2VuLmdldCgpKTsKIH0KIAogdm9pZCBIVE1MVHJl
ZUJ1aWxkZXI6OnByb2Nlc3NGYWtlRW5kVGFnKGNvbnN0IFF1YWxpZmllZE5hbWUmIHRhZ05hbWUp
CiB7CiAgICAgLy8gRklYTUU6IFdlJ2xsIG5lZWQgYSBmYW5jaWVyIGNvbnZlcnNpb24gdGhhbiBq
dXN0ICJsb2NhbE5hbWUiIGZvciBTVkcvTWF0aE1MIHRhZ3MuCi0gICAgQXRvbWljSFRNTFRva2Vu
IGZha2VUb2tlbihIVE1MVG9rZW5UeXBlczo6RW5kVGFnLCB0YWdOYW1lLmxvY2FsTmFtZSgpKTsK
LSAgICBwcm9jZXNzRW5kVGFnKGZha2VUb2tlbik7CisgICAgUmVmUHRyPEF0b21pY0hUTUxUb2tl
bj4gZmFrZVRva2VuID0gQXRvbWljSFRNTFRva2VuOjpjcmVhdGUoSFRNTFRva2VuVHlwZXM6OkVu
ZFRhZywgdGFnTmFtZS5sb2NhbE5hbWUoKSk7CisgICAgcHJvY2Vzc0VuZFRhZyhmYWtlVG9rZW4u
Z2V0KCkpOwogfQogCiB2b2lkIEhUTUxUcmVlQnVpbGRlcjo6cHJvY2Vzc0Zha2VDaGFyYWN0ZXJz
KGNvbnN0IFN0cmluZyYgY2hhcmFjdGVycykKQEAgLTU0OCwxMyArNTQ4LDEzIEBAIHZvaWQgSFRN
TFRyZWVCdWlsZGVyOjpwcm9jZXNzRmFrZVBFbmRUYWdJZlBJbkJ1dHRvblNjb3BlKCkKIHsKICAg
ICBpZiAoIW1fdHJlZS5vcGVuRWxlbWVudHMoKS0+aW5CdXR0b25TY29wZShwVGFnLmxvY2FsTmFt
ZSgpKSkKICAgICAgICAgcmV0dXJuOwotICAgIEF0b21pY0hUTUxUb2tlbiBlbmRQKEhUTUxUb2tl
blR5cGVzOjpFbmRUYWcsIHBUYWcubG9jYWxOYW1lKCkpOwotICAgIHByb2Nlc3NFbmRUYWcoZW5k
UCk7CisgICAgUmVmUHRyPEF0b21pY0hUTUxUb2tlbj4gZW5kUCA9IEF0b21pY0hUTUxUb2tlbjo6
Y3JlYXRlKEhUTUxUb2tlblR5cGVzOjpFbmRUYWcsIHBUYWcubG9jYWxOYW1lKCkpOworICAgIHBy
b2Nlc3NFbmRUYWcoZW5kUC5nZXQoKSk7CiB9CiAKLVZlY3RvcjxBdHRyaWJ1dGU+IEhUTUxUcmVl
QnVpbGRlcjo6YXR0cmlidXRlc0ZvcklzaW5kZXhJbnB1dChBdG9taWNIVE1MVG9rZW4mIHRva2Vu
KQorVmVjdG9yPEF0dHJpYnV0ZT4gSFRNTFRyZWVCdWlsZGVyOjphdHRyaWJ1dGVzRm9ySXNpbmRl
eElucHV0KEF0b21pY0hUTUxUb2tlbiogdG9rZW4pCiB7Ci0gICAgVmVjdG9yPEF0dHJpYnV0ZT4g
YXR0cmlidXRlcyA9IHRva2VuLmF0dHJpYnV0ZXMoKTsKKyAgICBWZWN0b3I8QXR0cmlidXRlPiBh
dHRyaWJ1dGVzID0gdG9rZW4tPmF0dHJpYnV0ZXMoKTsKICAgICBmb3IgKGludCBpID0gYXR0cmli
dXRlcy5zaXplKCkgLSAxOyBpID49IDA7IC0taSkgewogICAgICAgICBjb25zdCBRdWFsaWZpZWRO
YW1lJiBuYW1lID0gYXR0cmlidXRlcy5hdChpKS5uYW1lKCk7CiAgICAgICAgIGlmIChuYW1lLm1h
dGNoZXMobmFtZUF0dHIpIHx8IG5hbWUubWF0Y2hlcyhhY3Rpb25BdHRyKSB8fCBuYW1lLm1hdGNo
ZXMocHJvbXB0QXR0cikpCkBAIC01NjUsMjEgKzU2NSwyMSBAQCBWZWN0b3I8QXR0cmlidXRlPiBI
VE1MVHJlZUJ1aWxkZXI6OmF0dHJpYnV0ZXNGb3JJc2luZGV4SW5wdXQoQXRvbWljSFRNTFRva2Vu
JiB0bwogICAgIHJldHVybiBhdHRyaWJ1dGVzOwogfQogCi12b2lkIEhUTUxUcmVlQnVpbGRlcjo6
cHJvY2Vzc0lzaW5kZXhTdGFydFRhZ0ZvckluQm9keShBdG9taWNIVE1MVG9rZW4mIHRva2VuKQor
dm9pZCBIVE1MVHJlZUJ1aWxkZXI6OnByb2Nlc3NJc2luZGV4U3RhcnRUYWdGb3JJbkJvZHkoQXRv
bWljSFRNTFRva2VuKiB0b2tlbikKIHsKLSAgICBBU1NFUlQodG9rZW4udHlwZSgpID09IEhUTUxU
b2tlblR5cGVzOjpTdGFydFRhZyk7Ci0gICAgQVNTRVJUKHRva2VuLm5hbWUoKSA9PSBpc2luZGV4
VGFnKTsKKyAgICBBU1NFUlQodG9rZW4tPnR5cGUoKSA9PSBIVE1MVG9rZW5UeXBlczo6U3RhcnRU
YWcpOworICAgIEFTU0VSVCh0b2tlbi0+bmFtZSgpID09IGlzaW5kZXhUYWcpOwogICAgIHBhcnNl
RXJyb3IodG9rZW4pOwogICAgIGlmIChtX3RyZWUuZm9ybSgpKQogICAgICAgICByZXR1cm47CiAg
ICAgbm90SW1wbGVtZW50ZWQoKTsgLy8gQWNrbm93bGVkZ2Ugc2VsZi1jbG9zaW5nIGZsYWcKICAg
ICBwcm9jZXNzRmFrZVN0YXJ0VGFnKGZvcm1UYWcpOwotICAgIEF0dHJpYnV0ZSogYWN0aW9uQXR0
cmlidXRlID0gdG9rZW4uZ2V0QXR0cmlidXRlSXRlbShhY3Rpb25BdHRyKTsKKyAgICBBdHRyaWJ1
dGUqIGFjdGlvbkF0dHJpYnV0ZSA9IHRva2VuLT5nZXRBdHRyaWJ1dGVJdGVtKGFjdGlvbkF0dHIp
OwogICAgIGlmIChhY3Rpb25BdHRyaWJ1dGUpCiAgICAgICAgIG1fdHJlZS5mb3JtKCktPnNldEF0
dHJpYnV0ZShhY3Rpb25BdHRyLCBhY3Rpb25BdHRyaWJ1dGUtPnZhbHVlKCkpOwogICAgIHByb2Nl
c3NGYWtlU3RhcnRUYWcoaHJUYWcpOwogICAgIHByb2Nlc3NGYWtlU3RhcnRUYWcobGFiZWxUYWcp
OwotICAgIEF0dHJpYnV0ZSogcHJvbXB0QXR0cmlidXRlID0gdG9rZW4uZ2V0QXR0cmlidXRlSXRl
bShwcm9tcHRBdHRyKTsKKyAgICBBdHRyaWJ1dGUqIHByb21wdEF0dHJpYnV0ZSA9IHRva2VuLT5n
ZXRBdHRyaWJ1dGVJdGVtKHByb21wdEF0dHIpOwogICAgIGlmIChwcm9tcHRBdHRyaWJ1dGUpCiAg
ICAgICAgIHByb2Nlc3NGYWtlQ2hhcmFjdGVycyhwcm9tcHRBdHRyaWJ1dGUtPnZhbHVlKCkpOwog
ICAgIGVsc2UKQEAgLTYwNyw3ICs2MDcsNyBAQCBib29sIGlzRGRPckR0KGNvbnN0IENvbnRhaW5l
ck5vZGUqIGVsZW1lbnQpCiB9CiAKIHRlbXBsYXRlIDxib29sIHNob3VsZENsb3NlKGNvbnN0IENv
bnRhaW5lck5vZGUqKT4KLXZvaWQgSFRNTFRyZWVCdWlsZGVyOjpwcm9jZXNzQ2xvc2VXaGVuTmVz
dGVkVGFnKEF0b21pY0hUTUxUb2tlbiYgdG9rZW4pCit2b2lkIEhUTUxUcmVlQnVpbGRlcjo6cHJv
Y2Vzc0Nsb3NlV2hlbk5lc3RlZFRhZyhBdG9taWNIVE1MVG9rZW4qIHRva2VuKQogewogICAgIG1f
ZnJhbWVzZXRPayA9IGZhbHNlOwogICAgIEhUTUxFbGVtZW50U3RhY2s6OkVsZW1lbnRSZWNvcmQq
IG5vZGVSZWNvcmQgPSBtX3RyZWUub3BlbkVsZW1lbnRzKCktPnRvcFJlY29yZCgpOwpAQCAtNjQx
LDcgKzY0MSw3IEBAIHZvaWQgbWFwTG93ZXJlZExvY2FsTmFtZVRvTmFtZShQcmVmaXhlZE5hbWVU
b1F1YWxpZmllZE5hbWVNYXAqIG1hcCwgUXVhbGlmaWVkTmFtCiAgICAgfQogfQogCi12b2lkIGFk
anVzdFNWR1RhZ05hbWVDYXNlKEF0b21pY0hUTUxUb2tlbiYgdG9rZW4pCit2b2lkIGFkanVzdFNW
R1RhZ05hbWVDYXNlKEF0b21pY0hUTUxUb2tlbiogdG9rZW4pCiB7CiAgICAgc3RhdGljIFByZWZp
eGVkTmFtZVRvUXVhbGlmaWVkTmFtZU1hcCogY2FzZU1hcCA9IDA7CiAgICAgaWYgKCFjYXNlTWFw
KSB7CkBAIC02NTEsMTQgKzY1MSwxNCBAQCB2b2lkIGFkanVzdFNWR1RhZ05hbWVDYXNlKEF0b21p
Y0hUTUxUb2tlbiYgdG9rZW4pCiAgICAgICAgIG1hcExvd2VyZWRMb2NhbE5hbWVUb05hbWUoY2Fz
ZU1hcCwgc3ZnVGFncywgbGVuZ3RoKTsKICAgICB9CiAKLSAgICBjb25zdCBRdWFsaWZpZWROYW1l
JiBjYXNlZE5hbWUgPSBjYXNlTWFwLT5nZXQodG9rZW4ubmFtZSgpKTsKKyAgICBjb25zdCBRdWFs
aWZpZWROYW1lJiBjYXNlZE5hbWUgPSBjYXNlTWFwLT5nZXQodG9rZW4tPm5hbWUoKSk7CiAgICAg
aWYgKGNhc2VkTmFtZS5sb2NhbE5hbWUoKS5pc051bGwoKSkKICAgICAgICAgcmV0dXJuOwotICAg
IHRva2VuLnNldE5hbWUoY2FzZWROYW1lLmxvY2FsTmFtZSgpKTsKKyAgICB0b2tlbi0+c2V0TmFt
ZShjYXNlZE5hbWUubG9jYWxOYW1lKCkpOwogfQogCiB0ZW1wbGF0ZTxRdWFsaWZpZWROYW1lKiog
Z2V0QXR0cnMoc2l6ZV90KiBsZW5ndGgpPgotdm9pZCBhZGp1c3RBdHRyaWJ1dGVzKEF0b21pY0hU
TUxUb2tlbiYgdG9rZW4pCit2b2lkIGFkanVzdEF0dHJpYnV0ZXMoQXRvbWljSFRNTFRva2VuKiB0
b2tlbikKIHsKICAgICBzdGF0aWMgUHJlZml4ZWROYW1lVG9RdWFsaWZpZWROYW1lTWFwKiBjYXNl
TWFwID0gMDsKICAgICBpZiAoIWNhc2VNYXApIHsKQEAgLTY2OCwyMCArNjY4LDIwIEBAIHZvaWQg
YWRqdXN0QXR0cmlidXRlcyhBdG9taWNIVE1MVG9rZW4mIHRva2VuKQogICAgICAgICBtYXBMb3dl
cmVkTG9jYWxOYW1lVG9OYW1lKGNhc2VNYXAsIGF0dHJzLCBsZW5ndGgpOwogICAgIH0KIAotICAg
IGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCB0b2tlbi5hdHRyaWJ1dGVzKCkuc2l6ZSgpOyArK2kp
IHsKLSAgICAgICAgQXR0cmlidXRlJiB0b2tlbkF0dHJpYnV0ZSA9IHRva2VuLmF0dHJpYnV0ZXMo
KS5hdChpKTsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgdG9rZW4tPmF0dHJpYnV0ZXMo
KS5zaXplKCk7ICsraSkgeworICAgICAgICBBdHRyaWJ1dGUmIHRva2VuQXR0cmlidXRlID0gdG9r
ZW4tPmF0dHJpYnV0ZXMoKS5hdChpKTsKICAgICAgICAgY29uc3QgUXVhbGlmaWVkTmFtZSYgY2Fz
ZWROYW1lID0gY2FzZU1hcC0+Z2V0KHRva2VuQXR0cmlidXRlLmxvY2FsTmFtZSgpKTsKICAgICAg
ICAgaWYgKCFjYXNlZE5hbWUubG9jYWxOYW1lKCkuaXNOdWxsKCkpCiAgICAgICAgICAgICB0b2tl
bkF0dHJpYnV0ZS5wYXJzZXJTZXROYW1lKGNhc2VkTmFtZSk7CiAgICAgfQogfQogCi12b2lkIGFk
anVzdFNWR0F0dHJpYnV0ZXMoQXRvbWljSFRNTFRva2VuJiB0b2tlbikKK3ZvaWQgYWRqdXN0U1ZH
QXR0cmlidXRlcyhBdG9taWNIVE1MVG9rZW4qIHRva2VuKQogewogICAgIGFkanVzdEF0dHJpYnV0
ZXM8U1ZHTmFtZXM6OmdldFNWR0F0dHJzPih0b2tlbik7CiB9CiAKLXZvaWQgYWRqdXN0TWF0aE1M
QXR0cmlidXRlcyhBdG9taWNIVE1MVG9rZW4mIHRva2VuKQordm9pZCBhZGp1c3RNYXRoTUxBdHRy
aWJ1dGVzKEF0b21pY0hUTUxUb2tlbiogdG9rZW4pCiB7CiAgICAgYWRqdXN0QXR0cmlidXRlczxN
YXRoTUxOYW1lczo6Z2V0TWF0aE1MQXR0cnM+KHRva2VuKTsKIH0KQEAgLTY5Nyw3ICs2OTcsNyBA
QCB2b2lkIGFkZE5hbWVzV2l0aFByZWZpeChQcmVmaXhlZE5hbWVUb1F1YWxpZmllZE5hbWVNYXAq
IG1hcCwgY29uc3QgQXRvbWljU3RyaW5nJgogICAgIH0KIH0KIAotdm9pZCBhZGp1c3RGb3JlaWdu
QXR0cmlidXRlcyhBdG9taWNIVE1MVG9rZW4mIHRva2VuKQordm9pZCBhZGp1c3RGb3JlaWduQXR0
cmlidXRlcyhBdG9taWNIVE1MVG9rZW4qIHRva2VuKQogewogICAgIHN0YXRpYyBQcmVmaXhlZE5h
bWVUb1F1YWxpZmllZE5hbWVNYXAqIG1hcCA9IDA7CiAgICAgaWYgKCFtYXApIHsKQEAgLTcxMyw4
ICs3MTMsOCBAQCB2b2lkIGFkanVzdEZvcmVpZ25BdHRyaWJ1dGVzKEF0b21pY0hUTUxUb2tlbiYg
dG9rZW4pCiAgICAgICAgIG1hcC0+YWRkKCJ4bWxuczp4bGluayIsIFF1YWxpZmllZE5hbWUoInht
bG5zIiwgInhsaW5rIiwgWE1MTlNOYW1lczo6eG1sbnNOYW1lc3BhY2VVUkkpKTsKICAgICB9CiAK
LSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgdG9rZW4uYXR0cmlidXRlcygpLnNpemUoKTsg
KytpKSB7Ci0gICAgICAgIEF0dHJpYnV0ZSYgdG9rZW5BdHRyaWJ1dGUgPSB0b2tlbi5hdHRyaWJ1
dGVzKCkuYXQoaSk7CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHRva2VuLT5hdHRyaWJ1
dGVzKCkuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgQXR0cmlidXRlJiB0b2tlbkF0dHJpYnV0ZSA9
IHRva2VuLT5hdHRyaWJ1dGVzKCkuYXQoaSk7CiAgICAgICAgIGNvbnN0IFF1YWxpZmllZE5hbWUm
IG5hbWUgPSBtYXAtPmdldCh0b2tlbkF0dHJpYnV0ZS5sb2NhbE5hbWUoKSk7CiAgICAgICAgIGlm
ICghbmFtZS5sb2NhbE5hbWUoKS5pc051bGwoKSkKICAgICAgICAgICAgIHRva2VuQXR0cmlidXRl
LnBhcnNlclNldE5hbWUobmFtZSk7CkBAIC03MjMsMjggKzcyMywyOCBAQCB2b2lkIGFkanVzdEZv
cmVpZ25BdHRyaWJ1dGVzKEF0b21pY0hUTUxUb2tlbiYgdG9rZW4pCiAKIH0KIAotdm9pZCBIVE1M
VHJlZUJ1aWxkZXI6OnByb2Nlc3NTdGFydFRhZ0ZvckluQm9keShBdG9taWNIVE1MVG9rZW4mIHRv
a2VuKQordm9pZCBIVE1MVHJlZUJ1aWxkZXI6OnByb2Nlc3NTdGFydFRhZ0ZvckluQm9keShBdG9t
aWNIVE1MVG9rZW4qIHRva2VuKQogewotICAgIEFTU0VSVCh0b2tlbi50eXBlKCkgPT0gSFRNTFRv
a2VuVHlwZXM6OlN0YXJ0VGFnKTsKLSAgICBpZiAodG9rZW4ubmFtZSgpID09IGh0bWxUYWcpIHsK
KyAgICBBU1NFUlQodG9rZW4tPnR5cGUoKSA9PSBIVE1MVG9rZW5UeXBlczo6U3RhcnRUYWcpOwor
ICAgIGlmICh0b2tlbi0+bmFtZSgpID09IGh0bWxUYWcpIHsKICAgICAgICAgcHJvY2Vzc0h0bWxT
dGFydFRhZ0ZvckluQm9keSh0b2tlbik7CiAgICAgICAgIHJldHVybjsKICAgICB9Ci0gICAgaWYg
KHRva2VuLm5hbWUoKSA9PSBiYXNlVGFnCi0gICAgICAgIHx8IHRva2VuLm5hbWUoKSA9PSBiYXNl
Zm9udFRhZwotICAgICAgICB8fCB0b2tlbi5uYW1lKCkgPT0gYmdzb3VuZFRhZwotICAgICAgICB8
fCB0b2tlbi5uYW1lKCkgPT0gY29tbWFuZFRhZwotICAgICAgICB8fCB0b2tlbi5uYW1lKCkgPT0g
bGlua1RhZwotICAgICAgICB8fCB0b2tlbi5uYW1lKCkgPT0gbWV0YVRhZwotICAgICAgICB8fCB0
b2tlbi5uYW1lKCkgPT0gbm9mcmFtZXNUYWcKLSAgICAgICAgfHwgdG9rZW4ubmFtZSgpID09IHNj
cmlwdFRhZwotICAgICAgICB8fCB0b2tlbi5uYW1lKCkgPT0gc3R5bGVUYWcKLSAgICAgICAgfHwg
dG9rZW4ubmFtZSgpID09IHRpdGxlVGFnKSB7CisgICAgaWYgKHRva2VuLT5uYW1lKCkgPT0gYmFz
ZVRhZworICAgICAgICB8fCB0b2tlbi0+bmFtZSgpID09IGJhc2Vmb250VGFnCisgICAgICAgIHx8
IHRva2VuLT5uYW1lKCkgPT0gYmdzb3VuZFRhZworICAgICAgICB8fCB0b2tlbi0+bmFtZSgpID09
IGNvbW1hbmRUYWcKKyAgICAgICAgfHwgdG9rZW4tPm5hbWUoKSA9PSBsaW5rVGFnCisgICAgICAg
IHx8IHRva2VuLT5uYW1lKCkgPT0gbWV0YVRhZworICAgICAgICB8fCB0b2tlbi0+bmFtZSgpID09
IG5vZnJhbWVzVGFnCisgICAgICAgIHx8IHRva2VuLT5uYW1lKCkgPT0gc2NyaXB0VGFnCisgICAg
ICAgIHx8IHRva2VuLT5uYW1lKCkgPT0gc3R5bGVUYWcKKyAgICAgICAgfHwgdG9rZW4tPm5hbWUo
KSA9PSB0aXRsZVRhZykgewogICAgICAgICBib29sIGRpZFByb2Nlc3MgPSBwcm9jZXNzU3RhcnRU
YWdGb3JJbkhlYWQodG9rZW4pOwogICAgICAgICBBU1NFUlRfVU5VU0VEKGRpZFByb2Nlc3MsIGRp
ZFByb2Nlc3MpOwogICAgICAgICByZXR1cm47CiAgICAgfQotICAgIGlmICh0b2tlbi5uYW1lKCkg
PT0gYm9keVRhZykgeworICAgIGlmICh0b2tlbi0+bmFtZSgpID09IGJvZHlUYWcpIHsKICAgICAg
ICAgcGFyc2VFcnJvcih0b2tlbik7CiAgICAgICAgIGlmICghbV90cmVlLm9wZW5FbGVtZW50cygp
LT5zZWNvbmRFbGVtZW50SXNIVE1MQm9keUVsZW1lbnQoKSB8fCBtX3RyZWUub3BlbkVsZW1lbnRz
KCktPmhhc09ubHlPbmVFbGVtZW50KCkpIHsKICAgICAgICAgICAgIEFTU0VSVChpc1BhcnNpbmdG
cmFnbWVudCgpKTsKQEAgLTc1NCw3ICs3NTQsNyBAQCB2b2lkIEhUTUxUcmVlQnVpbGRlcjo6cHJv
Y2Vzc1N0YXJ0VGFnRm9ySW5Cb2R5KEF0b21pY0hUTUxUb2tlbiYgdG9rZW4pCiAgICAgICAgIG1f
dHJlZS5pbnNlcnRIVE1MQm9keVN0YXJ0VGFnSW5Cb2R5KHRva2VuKTsKICAgICAgICAgcmV0dXJu
OwogICAgIH0KLSAgICBpZiAodG9rZW4ubmFtZSgpID09IGZyYW1lc2V0VGFnKSB7CisgICAgaWYg
KHRva2VuLT5uYW1lKCkgPT0gZnJhbWVzZXRUYWcpIHsKICAgICAgICAgcGFyc2VFcnJvcih0b2tl
bik7CiAgICAgICAgIGlmICghbV90cmVlLm9wZW5FbGVtZW50cygpLT5zZWNvbmRFbGVtZW50SXNI
VE1MQm9keUVsZW1lbnQoKSB8fCBtX3RyZWUub3BlbkVsZW1lbnRzKCktPmhhc09ubHlPbmVFbGVt
ZW50KCkpIHsKICAgICAgICAgICAgIEFTU0VSVChpc1BhcnNpbmdGcmFnbWVudCgpKTsKQEAgLTc3
MiwzMyArNzcyLDMzIEBAIHZvaWQgSFRNTFRyZWVCdWlsZGVyOjpwcm9jZXNzU3RhcnRUYWdGb3JJ
bkJvZHkoQXRvbWljSFRNTFRva2VuJiB0b2tlbikKICAgICAgICAgc2V0SW5zZXJ0aW9uTW9kZShJ
bkZyYW1lc2V0TW9kZSk7CiAgICAgICAgIHJldHVybjsKICAgICB9Ci0gICAgaWYgKHRva2VuLm5h
bWUoKSA9PSBhZGRyZXNzVGFnCi0gICAgICAgIHx8IHRva2VuLm5hbWUoKSA9PSBhcnRpY2xlVGFn
Ci0gICAgICAgIHx8IHRva2VuLm5hbWUoKSA9PSBhc2lkZVRhZwotICAgICAgICB8fCB0b2tlbi5u
YW1lKCkgPT0gYmxvY2txdW90ZVRhZwotICAgICAgICB8fCB0b2tlbi5uYW1lKCkgPT0gY2VudGVy
VGFnCi0gICAgICAgIHx8IHRva2VuLm5hbWUoKSA9PSBkZXRhaWxzVGFnCi0gICAgICAgIHx8IHRv
a2VuLm5hbWUoKSA9PSBkaXJUYWcKLSAgICAgICAgfHwgdG9rZW4ubmFtZSgpID09IGRpdlRhZwot
ICAgICAgICB8fCB0b2tlbi5uYW1lKCkgPT0gZGxUYWcKLSAgICAgICAgfHwgdG9rZW4ubmFtZSgp
ID09IGZpZWxkc2V0VGFnCi0gICAgICAgIHx8IHRva2VuLm5hbWUoKSA9PSBmaWdjYXB0aW9uVGFn
Ci0gICAgICAgIHx8IHRva2VuLm5hbWUoKSA9PSBmaWd1cmVUYWcKLSAgICAgICAgfHwgdG9rZW4u
bmFtZSgpID09IGZvb3RlclRhZwotICAgICAgICB8fCB0b2tlbi5uYW1lKCkgPT0gaGVhZGVyVGFn
Ci0gICAgICAgIHx8IHRva2VuLm5hbWUoKSA9PSBoZ3JvdXBUYWcKLSAgICAgICAgfHwgdG9rZW4u
bmFtZSgpID09IG1lbnVUYWcKLSAgICAgICAgfHwgdG9rZW4ubmFtZSgpID09IG5hdlRhZwotICAg
ICAgICB8fCB0b2tlbi5uYW1lKCkgPT0gb2xUYWcKLSAgICAgICAgfHwgdG9rZW4ubmFtZSgpID09
IHBUYWcKLSAgICAgICAgfHwgdG9rZW4ubmFtZSgpID09IHNlY3Rpb25UYWcKLSAgICAgICAgfHwg
dG9rZW4ubmFtZSgpID09IHN1bW1hcnlUYWcKLSAgICAgICAgfHwgdG9rZW4ubmFtZSgpID09IHVs
VGFnKSB7CisgICAgaWYgKHRva2VuLT5uYW1lKCkgPT0gYWRkcmVzc1RhZworICAgICAgICB8fCB0
b2tlbi0+bmFtZSgpID09IGFydGljbGVUYWcKKyAgICAgICAgfHwgdG9rZW4tPm5hbWUoKSA9PSBh
c2lkZVRhZworICAgICAgICB8fCB0b2tlbi0+bmFtZSgpID09IGJsb2NrcXVvdGVUYWcKKyAgICAg
ICAgfHwgdG9rZW4tPm5hbWUoKSA9PSBjZW50ZXJUYWcKKyAgICAgICAgfHwgdG9rZW4tPm5hbWUo
KSA9PSBkZXRhaWxzVGFnCisgICAgICAgIHx8IHRva2VuLT5uYW1lKCkgPT0gZGlyVGFnCisgICAg
ICAgIHx8IHRva2VuLT5uYW1lKCkgPT0gZGl2VGFnCisgICAgICAgIHx8IHRva2VuLT5uYW1lKCkg
PT0gZGxUYWcKKyAgICAgICAgfHwgdG9rZW4tPm5hbWUoKSA9PSBmaWVsZHNldFRhZworICAgICAg
ICB8fCB0b2tlbi0+bmFtZSgpID09IGZpZ2NhcHRpb25UYWcKKyAgICAgICAgfHwgdG9rZW4tPm5h
bWUoKSA9PSBmaWd1cmVUYWcKKyAgICAgICAgfHwgdG9rZW4tPm5hbWUoKSA9PSBmb290ZXJUYWcK
KyAgICAgICAgfHwgdG9rZW4tPm5hbWUoKSA9PSBoZWFkZXJUYWcKKyAgICAgICAgfHwgdG9rZW4t
Pm5hbWUoKSA9PSBoZ3JvdXBUYWcKKyAgICAgICAgfHwgdG9rZW4tPm5hbWUoKSA9PSBtZW51VGFn
CisgICAgICAgIHx8IHRva2VuLT5uYW1lKCkgPT0gbmF2VGFnCisgICAgICAgIHx8IHRva2VuLT5u
YW1lKCkgPT0gb2xUYWcKKyAgICAgICAgfHwgdG9rZW4tPm5hbWUoKSA9PSBwVGFnCisgICAgICAg
IHx8IHRva2VuLT5uYW1lKCkgPT0gc2VjdGlvblRhZworICAgICAgICB8fCB0b2tlbi0+bmFtZSgp
ID09IHN1bW1hcnlUYWcKKyAgICAgICAgfHwgdG9rZW4tPm5hbWUoKSA9PSB1bFRhZykgewogICAg
ICAgICBwcm9jZXNzRmFrZVBFbmRUYWdJZlBJbkJ1dHRvblNjb3BlKCk7CiAgICAgICAgIG1fdHJl
ZS5pbnNlcnRIVE1MRWxlbWVudCh0b2tlbik7CiAgICAgICAgIHJldHVybjsKICAgICB9Ci0gICAg
aWYgKGlzTnVtYmVyZWRIZWFkZXJUYWcodG9rZW4ubmFtZSgpKSkgeworICAgIGlmIChpc051bWJl
cmVkSGVhZGVyVGFnKHRva2VuLT5uYW1lKCkpKSB7CiAgICAgICAgIHByb2Nlc3NGYWtlUEVuZFRh
Z0lmUEluQnV0dG9uU2NvcGUoKTsKICAgICAgICAgaWYgKGlzTnVtYmVyZWRIZWFkZXJUYWcobV90
cmVlLmN1cnJlbnROb2RlKCktPmxvY2FsTmFtZSgpKSkgewogICAgICAgICAgICAgcGFyc2VFcnJv
cih0b2tlbik7CkBAIC04MDcsMTQgKzgwNywxNCBAQCB2b2lkIEhUTUxUcmVlQnVpbGRlcjo6cHJv
Y2Vzc1N0YXJ0VGFnRm9ySW5Cb2R5KEF0b21pY0hUTUxUb2tlbiYgdG9rZW4pCiAgICAgICAgIG1f
dHJlZS5pbnNlcnRIVE1MRWxlbWVudCh0b2tlbik7CiAgICAgICAgIHJldHVybjsKICAgICB9Ci0g
ICAgaWYgKHRva2VuLm5hbWUoKSA9PSBwcmVUYWcgfHwgdG9rZW4ubmFtZSgpID09IGxpc3RpbmdU
YWcpIHsKKyAgICBpZiAodG9rZW4tPm5hbWUoKSA9PSBwcmVUYWcgfHwgdG9rZW4tPm5hbWUoKSA9
PSBsaXN0aW5nVGFnKSB7CiAgICAgICAgIHByb2Nlc3NGYWtlUEVuZFRhZ0lmUEluQnV0dG9uU2Nv
cGUoKTsKICAgICAgICAgbV90cmVlLmluc2VydEhUTUxFbGVtZW50KHRva2VuKTsKICAgICAgICAg
bV9zaG91bGRTa2lwTGVhZGluZ05ld2xpbmUgPSB0cnVlOwogICAgICAgICBtX2ZyYW1lc2V0T2sg
PSBmYWxzZTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KLSAgICBpZiAodG9rZW4ubmFtZSgpID09
IGZvcm1UYWcpIHsKKyAgICBpZiAodG9rZW4tPm5hbWUoKSA9PSBmb3JtVGFnKSB7CiAgICAgICAg
IGlmIChtX3RyZWUuZm9ybSgpKSB7CiAgICAgICAgICAgICBwYXJzZUVycm9yKHRva2VuKTsKICAg
ICAgICAgICAgIHJldHVybjsKQEAgLTgyMywyMSArODIzLDIxIEBAIHZvaWQgSFRNTFRyZWVCdWls
ZGVyOjpwcm9jZXNzU3RhcnRUYWdGb3JJbkJvZHkoQXRvbWljSFRNTFRva2VuJiB0b2tlbikKICAg
ICAgICAgbV90cmVlLmluc2VydEhUTUxGb3JtRWxlbWVudCh0b2tlbik7CiAgICAgICAgIHJldHVy
bjsKICAgICB9Ci0gICAgaWYgKHRva2VuLm5hbWUoKSA9PSBsaVRhZykgeworICAgIGlmICh0b2tl
bi0+bmFtZSgpID09IGxpVGFnKSB7CiAgICAgICAgIHByb2Nlc3NDbG9zZVdoZW5OZXN0ZWRUYWc8
aXNMaT4odG9rZW4pOwogICAgICAgICByZXR1cm47CiAgICAgfQotICAgIGlmICh0b2tlbi5uYW1l
KCkgPT0gZGRUYWcgfHwgdG9rZW4ubmFtZSgpID09IGR0VGFnKSB7CisgICAgaWYgKHRva2VuLT5u
YW1lKCkgPT0gZGRUYWcgfHwgdG9rZW4tPm5hbWUoKSA9PSBkdFRhZykgewogICAgICAgICBwcm9j
ZXNzQ2xvc2VXaGVuTmVzdGVkVGFnPGlzRGRPckR0Pih0b2tlbik7CiAgICAgICAgIHJldHVybjsK
ICAgICB9Ci0gICAgaWYgKHRva2VuLm5hbWUoKSA9PSBwbGFpbnRleHRUYWcpIHsKKyAgICBpZiAo
dG9rZW4tPm5hbWUoKSA9PSBwbGFpbnRleHRUYWcpIHsKICAgICAgICAgcHJvY2Vzc0Zha2VQRW5k
VGFnSWZQSW5CdXR0b25TY29wZSgpOwogICAgICAgICBtX3RyZWUuaW5zZXJ0SFRNTEVsZW1lbnQo
dG9rZW4pOwogICAgICAgICBtX3BhcnNlci0+dG9rZW5pemVyKCktPnNldFN0YXRlKEhUTUxUb2tl
bml6ZXJTdGF0ZTo6UExBSU5URVhUU3RhdGUpOwogICAgICAgICByZXR1cm47CiAgICAgfQotICAg
IGlmICh0b2tlbi5uYW1lKCkgPT0gYnV0dG9uVGFnKSB7CisgICAgaWYgKHRva2VuLT5uYW1lKCkg
PT0gYnV0dG9uVGFnKSB7CiAgICAgICAgIGlmIChtX3RyZWUub3BlbkVsZW1lbnRzKCktPmluU2Nv
cGUoYnV0dG9uVGFnKSkgewogICAgICAgICAgICAgcGFyc2VFcnJvcih0b2tlbik7CiAgICAgICAg
ICAgICBwcm9jZXNzRmFrZUVuZFRhZyhidXR0b25UYWcpOwpAQCAtODQ5LDcgKzg0OSw3IEBAIHZv
aWQgSFRNTFRyZWVCdWlsZGVyOjpwcm9jZXNzU3RhcnRUYWdGb3JJbkJvZHkoQXRvbWljSFRNTFRv
a2VuJiB0b2tlbikKICAgICAgICAgbV9mcmFtZXNldE9rID0gZmFsc2U7CiAgICAgICAgIHJldHVy
bjsKICAgICB9Ci0gICAgaWYgKHRva2VuLm5hbWUoKSA9PSBhVGFnKSB7CisgICAgaWYgKHRva2Vu
LT5uYW1lKCkgPT0gYVRhZykgewogICAgICAgICBFbGVtZW50KiBhY3RpdmVBVGFnID0gbV90cmVl
LmFjdGl2ZUZvcm1hdHRpbmdFbGVtZW50cygpLT5jbG9zZXN0RWxlbWVudEluU2NvcGVXaXRoTmFt
ZShhVGFnLmxvY2FsTmFtZSgpKTsKICAgICAgICAgaWYgKGFjdGl2ZUFUYWcpIHsKICAgICAgICAg
ICAgIHBhcnNlRXJyb3IodG9rZW4pOwpAQCAtODYyLDEyICs4NjIsMTIgQEAgdm9pZCBIVE1MVHJl
ZUJ1aWxkZXI6OnByb2Nlc3NTdGFydFRhZ0ZvckluQm9keShBdG9taWNIVE1MVG9rZW4mIHRva2Vu
KQogICAgICAgICBtX3RyZWUuaW5zZXJ0Rm9ybWF0dGluZ0VsZW1lbnQodG9rZW4pOwogICAgICAg
ICByZXR1cm47CiAgICAgfQotICAgIGlmIChpc05vbkFuY2hvck5vbk5vYnJGb3JtYXR0aW5nVGFn
KHRva2VuLm5hbWUoKSkpIHsKKyAgICBpZiAoaXNOb25BbmNob3JOb25Ob2JyRm9ybWF0dGluZ1Rh
Zyh0b2tlbi0+bmFtZSgpKSkgewogICAgICAgICBtX3RyZWUucmVjb25zdHJ1Y3RUaGVBY3RpdmVG
b3JtYXR0aW5nRWxlbWVudHMoKTsKICAgICAgICAgbV90cmVlLmluc2VydEZvcm1hdHRpbmdFbGVt
ZW50KHRva2VuKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KLSAgICBpZiAodG9rZW4ubmFtZSgp
ID09IG5vYnJUYWcpIHsKKyAgICBpZiAodG9rZW4tPm5hbWUoKSA9PSBub2JyVGFnKSB7CiAgICAg
ICAgIG1fdHJlZS5yZWNvbnN0cnVjdFRoZUFjdGl2ZUZvcm1hdHRpbmdFbGVtZW50cygpOwogICAg
ICAgICBpZiAobV90cmVlLm9wZW5FbGVtZW50cygpLT5pblNjb3BlKG5vYnJUYWcpKSB7CiAgICAg
ICAgICAgICBwYXJzZUVycm9yKHRva2VuKTsKQEAgLTg3NywxNiArODc3LDE2IEBAIHZvaWQgSFRN
TFRyZWVCdWlsZGVyOjpwcm9jZXNzU3RhcnRUYWdGb3JJbkJvZHkoQXRvbWljSFRNTFRva2VuJiB0
b2tlbikKICAgICAgICAgbV90cmVlLmluc2VydEZvcm1hdHRpbmdFbGVtZW50KHRva2VuKTsKICAg
ICAgICAgcmV0dXJuOwogICAgIH0KLSAgICBpZiAodG9rZW4ubmFtZSgpID09IGFwcGxldFRhZwot
ICAgICAgICB8fCB0b2tlbi5uYW1lKCkgPT0gbWFycXVlZVRhZwotICAgICAgICB8fCB0b2tlbi5u
YW1lKCkgPT0gb2JqZWN0VGFnKSB7CisgICAgaWYgKHRva2VuLT5uYW1lKCkgPT0gYXBwbGV0VGFn
CisgICAgICAgIHx8IHRva2VuLT5uYW1lKCkgPT0gbWFycXVlZVRhZworICAgICAgICB8fCB0b2tl
bi0+bmFtZSgpID09IG9iamVjdFRhZykgewogICAgICAgICBtX3RyZWUucmVjb25zdHJ1Y3RUaGVB
Y3RpdmVGb3JtYXR0aW5nRWxlbWVudHMoKTsKICAgICAgICAgbV90cmVlLmluc2VydEhUTUxFbGVt
ZW50KHRva2VuKTsKICAgICAgICAgbV90cmVlLmFjdGl2ZUZvcm1hdHRpbmdFbGVtZW50cygpLT5h
cHBlbmRNYXJrZXIoKTsKICAgICAgICAgbV9mcmFtZXNldE9rID0gZmFsc2U7CiAgICAgICAgIHJl
dHVybjsKICAgICB9Ci0gICAgaWYgKHRva2VuLm5hbWUoKSA9PSB0YWJsZVRhZykgeworICAgIGlm
ICh0b2tlbi0+bmFtZSgpID09IHRhYmxlVGFnKSB7CiAgICAgICAgIGlmICghbV9kb2N1bWVudC0+
aW5RdWlya3NNb2RlKCkgJiYgbV90cmVlLm9wZW5FbGVtZW50cygpLT5pbkJ1dHRvblNjb3BlKHBU
YWcpKQogICAgICAgICAgICAgcHJvY2Vzc0Zha2VFbmRUYWcocFRhZyk7CiAgICAgICAgIG1fdHJl
ZS5pbnNlcnRIVE1MRWxlbWVudCh0b2tlbik7CkBAIC04OTQsNDggKzg5NCw0OCBAQCB2b2lkIEhU
TUxUcmVlQnVpbGRlcjo6cHJvY2Vzc1N0YXJ0VGFnRm9ySW5Cb2R5KEF0b21pY0hUTUxUb2tlbiYg
dG9rZW4pCiAgICAgICAgIHNldEluc2VydGlvbk1vZGUoSW5UYWJsZU1vZGUpOwogICAgICAgICBy
ZXR1cm47CiAgICAgfQotICAgIGlmICh0b2tlbi5uYW1lKCkgPT0gaW1hZ2VUYWcpIHsKKyAgICBp
ZiAodG9rZW4tPm5hbWUoKSA9PSBpbWFnZVRhZykgewogICAgICAgICBwYXJzZUVycm9yKHRva2Vu
KTsKICAgICAgICAgLy8gQXBwYXJlbnRseSB3ZSdyZSBub3Qgc3VwcG9zZWQgdG8gYXNrLgotICAg
ICAgICB0b2tlbi5zZXROYW1lKGltZ1RhZy5sb2NhbE5hbWUoKSk7CisgICAgICAgIHRva2VuLT5z
ZXROYW1lKGltZ1RhZy5sb2NhbE5hbWUoKSk7CiAgICAgICAgIC8vIE5vdGUgdGhlIGZhbGwgdGhy
b3VnaCB0byB0aGUgaW1nVGFnIGhhbmRsaW5nIGJlbG93IQogICAgIH0KLSAgICBpZiAodG9rZW4u
bmFtZSgpID09IGFyZWFUYWcKLSAgICAgICAgfHwgdG9rZW4ubmFtZSgpID09IGJyVGFnCi0gICAg
ICAgIHx8IHRva2VuLm5hbWUoKSA9PSBlbWJlZFRhZwotICAgICAgICB8fCB0b2tlbi5uYW1lKCkg
PT0gaW1nVGFnCi0gICAgICAgIHx8IHRva2VuLm5hbWUoKSA9PSBrZXlnZW5UYWcKLSAgICAgICAg
fHwgdG9rZW4ubmFtZSgpID09IHdiclRhZykgeworICAgIGlmICh0b2tlbi0+bmFtZSgpID09IGFy
ZWFUYWcKKyAgICAgICAgfHwgdG9rZW4tPm5hbWUoKSA9PSBiclRhZworICAgICAgICB8fCB0b2tl
bi0+bmFtZSgpID09IGVtYmVkVGFnCisgICAgICAgIHx8IHRva2VuLT5uYW1lKCkgPT0gaW1nVGFn
CisgICAgICAgIHx8IHRva2VuLT5uYW1lKCkgPT0ga2V5Z2VuVGFnCisgICAgICAgIHx8IHRva2Vu
LT5uYW1lKCkgPT0gd2JyVGFnKSB7CiAgICAgICAgIG1fdHJlZS5yZWNvbnN0cnVjdFRoZUFjdGl2
ZUZvcm1hdHRpbmdFbGVtZW50cygpOwogICAgICAgICBtX3RyZWUuaW5zZXJ0U2VsZkNsb3NpbmdI
VE1MRWxlbWVudCh0b2tlbik7CiAgICAgICAgIG1fZnJhbWVzZXRPayA9IGZhbHNlOwogICAgICAg
ICByZXR1cm47CiAgICAgfQotICAgIGlmICh0b2tlbi5uYW1lKCkgPT0gaW5wdXRUYWcpIHsKLSAg
ICAgICAgQXR0cmlidXRlKiB0eXBlQXR0cmlidXRlID0gdG9rZW4uZ2V0QXR0cmlidXRlSXRlbSh0
eXBlQXR0cik7CisgICAgaWYgKHRva2VuLT5uYW1lKCkgPT0gaW5wdXRUYWcpIHsKKyAgICAgICAg
QXR0cmlidXRlKiB0eXBlQXR0cmlidXRlID0gdG9rZW4tPmdldEF0dHJpYnV0ZUl0ZW0odHlwZUF0
dHIpOwogICAgICAgICBtX3RyZWUucmVjb25zdHJ1Y3RUaGVBY3RpdmVGb3JtYXR0aW5nRWxlbWVu
dHMoKTsKICAgICAgICAgbV90cmVlLmluc2VydFNlbGZDbG9zaW5nSFRNTEVsZW1lbnQodG9rZW4p
OwogICAgICAgICBpZiAoIXR5cGVBdHRyaWJ1dGUgfHwgIWVxdWFsSWdub3JpbmdDYXNlKHR5cGVB
dHRyaWJ1dGUtPnZhbHVlKCksICJoaWRkZW4iKSkKICAgICAgICAgICAgIG1fZnJhbWVzZXRPayA9
IGZhbHNlOwogICAgICAgICByZXR1cm47CiAgICAgfQotICAgIGlmICh0b2tlbi5uYW1lKCkgPT0g
cGFyYW1UYWcKLSAgICAgICAgfHwgdG9rZW4ubmFtZSgpID09IHNvdXJjZVRhZwotICAgICAgICB8
fCB0b2tlbi5uYW1lKCkgPT0gdHJhY2tUYWcpIHsKKyAgICBpZiAodG9rZW4tPm5hbWUoKSA9PSBw
YXJhbVRhZworICAgICAgICB8fCB0b2tlbi0+bmFtZSgpID09IHNvdXJjZVRhZworICAgICAgICB8
fCB0b2tlbi0+bmFtZSgpID09IHRyYWNrVGFnKSB7CiAgICAgICAgIG1fdHJlZS5pbnNlcnRTZWxm
Q2xvc2luZ0hUTUxFbGVtZW50KHRva2VuKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KLSAgICBp
ZiAodG9rZW4ubmFtZSgpID09IGhyVGFnKSB7CisgICAgaWYgKHRva2VuLT5uYW1lKCkgPT0gaHJU
YWcpIHsKICAgICAgICAgcHJvY2Vzc0Zha2VQRW5kVGFnSWZQSW5CdXR0b25TY29wZSgpOwogICAg
ICAgICBtX3RyZWUuaW5zZXJ0U2VsZkNsb3NpbmdIVE1MRWxlbWVudCh0b2tlbik7CiAgICAgICAg
IG1fZnJhbWVzZXRPayA9IGZhbHNlOwogICAgICAgICByZXR1cm47CiAgICAgfQotICAgIGlmICh0
b2tlbi5uYW1lKCkgPT0gaXNpbmRleFRhZykgeworICAgIGlmICh0b2tlbi0+bmFtZSgpID09IGlz
aW5kZXhUYWcpIHsKICAgICAgICAgcHJvY2Vzc0lzaW5kZXhTdGFydFRhZ0ZvckluQm9keSh0b2tl
bik7CiAgICAgICAgIHJldHVybjsKICAgICB9Ci0gICAgaWYgKHRva2VuLm5hbWUoKSA9PSB0ZXh0
YXJlYVRhZykgeworICAgIGlmICh0b2tlbi0+bmFtZSgpID09IHRleHRhcmVhVGFnKSB7CiAgICAg
ICAgIG1fdHJlZS5pbnNlcnRIVE1MRWxlbWVudCh0b2tlbik7CiAgICAgICAgIG1fc2hvdWxkU2tp
cExlYWRpbmdOZXdsaW5lID0gdHJ1ZTsKICAgICAgICAgbV9wYXJzZXItPnRva2VuaXplcigpLT5z
ZXRTdGF0ZShIVE1MVG9rZW5pemVyU3RhdGU6OlJDREFUQVN0YXRlKTsKQEAgLTk0NCwyNyArOTQ0
LDI3IEBAIHZvaWQgSFRNTFRyZWVCdWlsZGVyOjpwcm9jZXNzU3RhcnRUYWdGb3JJbkJvZHkoQXRv
bWljSFRNTFRva2VuJiB0b2tlbikKICAgICAgICAgc2V0SW5zZXJ0aW9uTW9kZShUZXh0TW9kZSk7
CiAgICAgICAgIHJldHVybjsKICAgICB9Ci0gICAgaWYgKHRva2VuLm5hbWUoKSA9PSB4bXBUYWcp
IHsKKyAgICBpZiAodG9rZW4tPm5hbWUoKSA9PSB4bXBUYWcpIHsKICAgICAgICAgcHJvY2Vzc0Zh
a2VQRW5kVGFnSWZQSW5CdXR0b25TY29wZSgpOwogICAgICAgICBtX3RyZWUucmVjb25zdHJ1Y3RU
aGVBY3RpdmVGb3JtYXR0aW5nRWxlbWVudHMoKTsKICAgICAgICAgbV9mcmFtZXNldE9rID0gZmFs
c2U7CiAgICAgICAgIHByb2Nlc3NHZW5lcmljUmF3VGV4dFN0YXJ0VGFnKHRva2VuKTsKICAgICAg
ICAgcmV0dXJuOwogICAgIH0KLSAgICBpZiAodG9rZW4ubmFtZSgpID09IGlmcmFtZVRhZykgewor
ICAgIGlmICh0b2tlbi0+bmFtZSgpID09IGlmcmFtZVRhZykgewogICAgICAgICBtX2ZyYW1lc2V0
T2sgPSBmYWxzZTsKICAgICAgICAgcHJvY2Vzc0dlbmVyaWNSYXdUZXh0U3RhcnRUYWcodG9rZW4p
OwogICAgICAgICByZXR1cm47CiAgICAgfQotICAgIGlmICh0b2tlbi5uYW1lKCkgPT0gbm9lbWJl
ZFRhZyAmJiBwbHVnaW5zRW5hYmxlZChtX2RvY3VtZW50LT5mcmFtZSgpKSkgeworICAgIGlmICh0
b2tlbi0+bmFtZSgpID09IG5vZW1iZWRUYWcgJiYgcGx1Z2luc0VuYWJsZWQobV9kb2N1bWVudC0+
ZnJhbWUoKSkpIHsKICAgICAgICAgcHJvY2Vzc0dlbmVyaWNSYXdUZXh0U3RhcnRUYWcodG9rZW4p
OwogICAgICAgICByZXR1cm47CiAgICAgfQotICAgIGlmICh0b2tlbi5uYW1lKCkgPT0gbm9zY3Jp
cHRUYWcgJiYgc2NyaXB0RW5hYmxlZChtX2RvY3VtZW50LT5mcmFtZSgpKSkgeworICAgIGlmICh0
b2tlbi0+bmFtZSgpID09IG5vc2NyaXB0VGFnICYmIHNjcmlwdEVuYWJsZWQobV9kb2N1bWVudC0+
ZnJhbWUoKSkpIHsKICAgICAgICAgcHJvY2Vzc0dlbmVyaWNSYXdUZXh0U3RhcnRUYWcodG9rZW4p
OwogICAgICAgICByZXR1cm47CiAgICAgfQotICAgIGlmICh0b2tlbi5uYW1lKCkgPT0gc2VsZWN0
VGFnKSB7CisgICAgaWYgKHRva2VuLT5uYW1lKCkgPT0gc2VsZWN0VGFnKSB7CiAgICAgICAgIG1f
dHJlZS5yZWNvbnN0cnVjdFRoZUFjdGl2ZUZvcm1hdHRpbmdFbGVtZW50cygpOwogICAgICAgICBt
X3RyZWUuaW5zZXJ0SFRNTEVsZW1lbnQodG9rZW4pOwogICAgICAgICBtX2ZyYW1lc2V0T2sgPSBm
YWxzZTsKQEAgLTk3OSwxNiArOTc5LDE2IEBAIHZvaWQgSFRNTFRyZWVCdWlsZGVyOjpwcm9jZXNz
U3RhcnRUYWdGb3JJbkJvZHkoQXRvbWljSFRNTFRva2VuJiB0b2tlbikKICAgICAgICAgICAgIHNl
dEluc2VydGlvbk1vZGUoSW5TZWxlY3RNb2RlKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KLSAg
ICBpZiAodG9rZW4ubmFtZSgpID09IG9wdGdyb3VwVGFnIHx8IHRva2VuLm5hbWUoKSA9PSBvcHRp
b25UYWcpIHsKKyAgICBpZiAodG9rZW4tPm5hbWUoKSA9PSBvcHRncm91cFRhZyB8fCB0b2tlbi0+
bmFtZSgpID09IG9wdGlvblRhZykgewogICAgICAgICBpZiAobV90cmVlLmN1cnJlbnROb2RlKCkt
Pmhhc1RhZ05hbWUob3B0aW9uVGFnKSkgewotICAgICAgICAgICAgQXRvbWljSFRNTFRva2VuIGVu
ZE9wdGlvbihIVE1MVG9rZW5UeXBlczo6RW5kVGFnLCBvcHRpb25UYWcubG9jYWxOYW1lKCkpOwot
ICAgICAgICAgICAgcHJvY2Vzc0VuZFRhZyhlbmRPcHRpb24pOworICAgICAgICAgICAgUmVmUHRy
PEF0b21pY0hUTUxUb2tlbj4gZW5kT3B0aW9uID0gQXRvbWljSFRNTFRva2VuOjpjcmVhdGUoSFRN
TFRva2VuVHlwZXM6OkVuZFRhZywgb3B0aW9uVGFnLmxvY2FsTmFtZSgpKTsKKyAgICAgICAgICAg
IHByb2Nlc3NFbmRUYWcoZW5kT3B0aW9uLmdldCgpKTsKICAgICAgICAgfQogICAgICAgICBtX3Ry
ZWUucmVjb25zdHJ1Y3RUaGVBY3RpdmVGb3JtYXR0aW5nRWxlbWVudHMoKTsKICAgICAgICAgbV90
cmVlLmluc2VydEhUTUxFbGVtZW50KHRva2VuKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KLSAg
ICBpZiAodG9rZW4ubmFtZSgpID09IHJwVGFnIHx8IHRva2VuLm5hbWUoKSA9PSBydFRhZykgewor
ICAgIGlmICh0b2tlbi0+bmFtZSgpID09IHJwVGFnIHx8IHRva2VuLT5uYW1lKCkgPT0gcnRUYWcp
IHsKICAgICAgICAgaWYgKG1fdHJlZS5vcGVuRWxlbWVudHMoKS0+aW5TY29wZShydWJ5VGFnLmxv
Y2FsTmFtZSgpKSkgewogICAgICAgICAgICAgbV90cmVlLmdlbmVyYXRlSW1wbGllZEVuZFRhZ3Mo
KTsKICAgICAgICAgICAgIGlmICghbV90cmVlLmN1cnJlbnROb2RlKCktPmhhc1RhZ05hbWUocnVi
eVRhZykpCkBAIC05OTcsMjYgKzk5NywyNiBAQCB2b2lkIEhUTUxUcmVlQnVpbGRlcjo6cHJvY2Vz
c1N0YXJ0VGFnRm9ySW5Cb2R5KEF0b21pY0hUTUxUb2tlbiYgdG9rZW4pCiAgICAgICAgIG1fdHJl
ZS5pbnNlcnRIVE1MRWxlbWVudCh0b2tlbik7CiAgICAgICAgIHJldHVybjsKICAgICB9Ci0gICAg
aWYgKHRva2VuLm5hbWUoKSA9PSBNYXRoTUxOYW1lczo6bWF0aFRhZy5sb2NhbE5hbWUoKSkgewor
ICAgIGlmICh0b2tlbi0+bmFtZSgpID09IE1hdGhNTE5hbWVzOjptYXRoVGFnLmxvY2FsTmFtZSgp
KSB7CiAgICAgICAgIG1fdHJlZS5yZWNvbnN0cnVjdFRoZUFjdGl2ZUZvcm1hdHRpbmdFbGVtZW50
cygpOwogICAgICAgICBhZGp1c3RNYXRoTUxBdHRyaWJ1dGVzKHRva2VuKTsKICAgICAgICAgYWRq
dXN0Rm9yZWlnbkF0dHJpYnV0ZXModG9rZW4pOwogICAgICAgICBtX3RyZWUuaW5zZXJ0Rm9yZWln
bkVsZW1lbnQodG9rZW4sIE1hdGhNTE5hbWVzOjptYXRobWxOYW1lc3BhY2VVUkkpOwogICAgICAg
ICByZXR1cm47CiAgICAgfQotICAgIGlmICh0b2tlbi5uYW1lKCkgPT0gU1ZHTmFtZXM6OnN2Z1Rh
Zy5sb2NhbE5hbWUoKSkgeworICAgIGlmICh0b2tlbi0+bmFtZSgpID09IFNWR05hbWVzOjpzdmdU
YWcubG9jYWxOYW1lKCkpIHsKICAgICAgICAgbV90cmVlLnJlY29uc3RydWN0VGhlQWN0aXZlRm9y
bWF0dGluZ0VsZW1lbnRzKCk7CiAgICAgICAgIGFkanVzdFNWR0F0dHJpYnV0ZXModG9rZW4pOwog
ICAgICAgICBhZGp1c3RGb3JlaWduQXR0cmlidXRlcyh0b2tlbik7CiAgICAgICAgIG1fdHJlZS5p
bnNlcnRGb3JlaWduRWxlbWVudCh0b2tlbiwgU1ZHTmFtZXM6OnN2Z05hbWVzcGFjZVVSSSk7CiAg
ICAgICAgIHJldHVybjsKICAgICB9Ci0gICAgaWYgKGlzQ2FwdGlvbkNvbE9yQ29sZ3JvdXBUYWco
dG9rZW4ubmFtZSgpKQotICAgICAgICB8fCB0b2tlbi5uYW1lKCkgPT0gZnJhbWVUYWcKLSAgICAg
ICAgfHwgdG9rZW4ubmFtZSgpID09IGhlYWRUYWcKLSAgICAgICAgfHwgaXNUYWJsZUJvZHlDb250
ZXh0VGFnKHRva2VuLm5hbWUoKSkKLSAgICAgICAgfHwgaXNUYWJsZUNlbGxDb250ZXh0VGFnKHRv
a2VuLm5hbWUoKSkKLSAgICAgICAgfHwgdG9rZW4ubmFtZSgpID09IHRyVGFnKSB7CisgICAgaWYg
KGlzQ2FwdGlvbkNvbE9yQ29sZ3JvdXBUYWcodG9rZW4tPm5hbWUoKSkKKyAgICAgICAgfHwgdG9r
ZW4tPm5hbWUoKSA9PSBmcmFtZVRhZworICAgICAgICB8fCB0b2tlbi0+bmFtZSgpID09IGhlYWRU
YWcKKyAgICAgICAgfHwgaXNUYWJsZUJvZHlDb250ZXh0VGFnKHRva2VuLT5uYW1lKCkpCisgICAg
ICAgIHx8IGlzVGFibGVDZWxsQ29udGV4dFRhZyh0b2tlbi0+bmFtZSgpKQorICAgICAgICB8fCB0
b2tlbi0+bmFtZSgpID09IHRyVGFnKSB7CiAgICAgICAgIHBhcnNlRXJyb3IodG9rZW4pOwogICAg
ICAgICByZXR1cm47CiAgICAgfQpAQCAtMTA1MCw0MiArMTA1MCw0MiBAQCB2b2lkIEhUTUxUcmVl
QnVpbGRlcjo6Y2xvc2VUaGVDZWxsKCkKICAgICBBU1NFUlQoaW5zZXJ0aW9uTW9kZSgpID09IElu
Um93TW9kZSk7CiB9CiAKLXZvaWQgSFRNTFRyZWVCdWlsZGVyOjpwcm9jZXNzU3RhcnRUYWdGb3JJ
blRhYmxlKEF0b21pY0hUTUxUb2tlbiYgdG9rZW4pCit2b2lkIEhUTUxUcmVlQnVpbGRlcjo6cHJv
Y2Vzc1N0YXJ0VGFnRm9ySW5UYWJsZShBdG9taWNIVE1MVG9rZW4qIHRva2VuKQogewotICAgIEFT
U0VSVCh0b2tlbi50eXBlKCkgPT0gSFRNTFRva2VuVHlwZXM6OlN0YXJ0VGFnKTsKLSAgICBpZiAo
dG9rZW4ubmFtZSgpID09IGNhcHRpb25UYWcpIHsKKyAgICBBU1NFUlQodG9rZW4tPnR5cGUoKSA9
PSBIVE1MVG9rZW5UeXBlczo6U3RhcnRUYWcpOworICAgIGlmICh0b2tlbi0+bmFtZSgpID09IGNh
cHRpb25UYWcpIHsKICAgICAgICAgbV90cmVlLm9wZW5FbGVtZW50cygpLT5wb3BVbnRpbFRhYmxl
U2NvcGVNYXJrZXIoKTsKICAgICAgICAgbV90cmVlLmFjdGl2ZUZvcm1hdHRpbmdFbGVtZW50cygp
LT5hcHBlbmRNYXJrZXIoKTsKICAgICAgICAgbV90cmVlLmluc2VydEhUTUxFbGVtZW50KHRva2Vu
KTsKICAgICAgICAgc2V0SW5zZXJ0aW9uTW9kZShJbkNhcHRpb25Nb2RlKTsKICAgICAgICAgcmV0
dXJuOwogICAgIH0KLSAgICBpZiAodG9rZW4ubmFtZSgpID09IGNvbGdyb3VwVGFnKSB7CisgICAg
aWYgKHRva2VuLT5uYW1lKCkgPT0gY29sZ3JvdXBUYWcpIHsKICAgICAgICAgbV90cmVlLm9wZW5F
bGVtZW50cygpLT5wb3BVbnRpbFRhYmxlU2NvcGVNYXJrZXIoKTsKICAgICAgICAgbV90cmVlLmlu
c2VydEhUTUxFbGVtZW50KHRva2VuKTsKICAgICAgICAgc2V0SW5zZXJ0aW9uTW9kZShJbkNvbHVt
bkdyb3VwTW9kZSk7CiAgICAgICAgIHJldHVybjsKICAgICB9Ci0gICAgaWYgKHRva2VuLm5hbWUo
KSA9PSBjb2xUYWcpIHsKKyAgICBpZiAodG9rZW4tPm5hbWUoKSA9PSBjb2xUYWcpIHsKICAgICAg
ICAgcHJvY2Vzc0Zha2VTdGFydFRhZyhjb2xncm91cFRhZyk7CiAgICAgICAgIEFTU0VSVChJbkNv
bHVtbkdyb3VwTW9kZSk7CiAgICAgICAgIHByb2Nlc3NTdGFydFRhZyh0b2tlbik7CiAgICAgICAg
IHJldHVybjsKICAgICB9Ci0gICAgaWYgKGlzVGFibGVCb2R5Q29udGV4dFRhZyh0b2tlbi5uYW1l
KCkpKSB7CisgICAgaWYgKGlzVGFibGVCb2R5Q29udGV4dFRhZyh0b2tlbi0+bmFtZSgpKSkgewog
ICAgICAgICBtX3RyZWUub3BlbkVsZW1lbnRzKCktPnBvcFVudGlsVGFibGVTY29wZU1hcmtlcigp
OwogICAgICAgICBtX3RyZWUuaW5zZXJ0SFRNTEVsZW1lbnQodG9rZW4pOwogICAgICAgICBzZXRJ
bnNlcnRpb25Nb2RlKEluVGFibGVCb2R5TW9kZSk7CiAgICAgICAgIHJldHVybjsKICAgICB9Ci0g
ICAgaWYgKGlzVGFibGVDZWxsQ29udGV4dFRhZyh0b2tlbi5uYW1lKCkpCi0gICAgICAgIHx8IHRv
a2VuLm5hbWUoKSA9PSB0clRhZykgeworICAgIGlmIChpc1RhYmxlQ2VsbENvbnRleHRUYWcodG9r
ZW4tPm5hbWUoKSkKKyAgICAgICAgfHwgdG9rZW4tPm5hbWUoKSA9PSB0clRhZykgewogICAgICAg
ICBwcm9jZXNzRmFrZVN0YXJ0VGFnKHRib2R5VGFnKTsKICAgICAgICAgQVNTRVJUKGluc2VydGlv
bk1vZGUoKSA9PSBJblRhYmxlQm9keU1vZGUpOwogICAgICAgICBwcm9jZXNzU3RhcnRUYWcodG9r
ZW4pOwogICAgICAgICByZXR1cm47CiAgICAgfQotICAgIGlmICh0b2tlbi5uYW1lKCkgPT0gdGFi
bGVUYWcpIHsKKyAgICBpZiAodG9rZW4tPm5hbWUoKSA9PSB0YWJsZVRhZykgewogICAgICAgICBw
YXJzZUVycm9yKHRva2VuKTsKICAgICAgICAgaWYgKCFwcm9jZXNzVGFibGVFbmRUYWdGb3JJblRh
YmxlKCkpIHsKICAgICAgICAgICAgIEFTU0VSVChpc1BhcnNpbmdGcmFnbWVudCgpKTsKQEAgLTEw
OTQsMTIgKzEwOTQsMTIgQEAgdm9pZCBIVE1MVHJlZUJ1aWxkZXI6OnByb2Nlc3NTdGFydFRhZ0Zv
ckluVGFibGUoQXRvbWljSFRNTFRva2VuJiB0b2tlbikKICAgICAgICAgcHJvY2Vzc1N0YXJ0VGFn
KHRva2VuKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KLSAgICBpZiAodG9rZW4ubmFtZSgpID09
IHN0eWxlVGFnIHx8IHRva2VuLm5hbWUoKSA9PSBzY3JpcHRUYWcpIHsKKyAgICBpZiAodG9rZW4t
Pm5hbWUoKSA9PSBzdHlsZVRhZyB8fCB0b2tlbi0+bmFtZSgpID09IHNjcmlwdFRhZykgewogICAg
ICAgICBwcm9jZXNzU3RhcnRUYWdGb3JJbkhlYWQodG9rZW4pOwogICAgICAgICByZXR1cm47CiAg
ICAgfQotICAgIGlmICh0b2tlbi5uYW1lKCkgPT0gaW5wdXRUYWcpIHsKLSAgICAgICAgQXR0cmli
dXRlKiB0eXBlQXR0cmlidXRlID0gdG9rZW4uZ2V0QXR0cmlidXRlSXRlbSh0eXBlQXR0cik7Cisg
ICAgaWYgKHRva2VuLT5uYW1lKCkgPT0gaW5wdXRUYWcpIHsKKyAgICAgICAgQXR0cmlidXRlKiB0
eXBlQXR0cmlidXRlID0gdG9rZW4tPmdldEF0dHJpYnV0ZUl0ZW0odHlwZUF0dHIpOwogICAgICAg
ICBpZiAodHlwZUF0dHJpYnV0ZSAmJiBlcXVhbElnbm9yaW5nQ2FzZSh0eXBlQXR0cmlidXRlLT52
YWx1ZSgpLCAiaGlkZGVuIikpIHsKICAgICAgICAgICAgIHBhcnNlRXJyb3IodG9rZW4pOwogICAg
ICAgICAgICAgbV90cmVlLmluc2VydFNlbGZDbG9zaW5nSFRNTEVsZW1lbnQodG9rZW4pOwpAQCAt
MTEwNyw3ICsxMTA3LDcgQEAgdm9pZCBIVE1MVHJlZUJ1aWxkZXI6OnByb2Nlc3NTdGFydFRhZ0Zv
ckluVGFibGUoQXRvbWljSFRNTFRva2VuJiB0b2tlbikKICAgICAgICAgfQogICAgICAgICAvLyBG
YWxsIHRocm91Z2ggdG8gImFueXRoaW5nIGVsc2UiIGNhc2UuCiAgICAgfQotICAgIGlmICh0b2tl
bi5uYW1lKCkgPT0gZm9ybVRhZykgeworICAgIGlmICh0b2tlbi0+bmFtZSgpID09IGZvcm1UYWcp
IHsKICAgICAgICAgcGFyc2VFcnJvcih0b2tlbik7CiAgICAgICAgIGlmIChtX3RyZWUuZm9ybSgp
KQogICAgICAgICAgICAgcmV0dXJuOwpAQCAtMTEyMCw5ICsxMTIwLDkgQEAgdm9pZCBIVE1MVHJl
ZUJ1aWxkZXI6OnByb2Nlc3NTdGFydFRhZ0ZvckluVGFibGUoQXRvbWljSFRNTFRva2VuJiB0b2tl
bikKICAgICBwcm9jZXNzU3RhcnRUYWdGb3JJbkJvZHkodG9rZW4pOwogfQogCi12b2lkIEhUTUxU
cmVlQnVpbGRlcjo6cHJvY2Vzc1N0YXJ0VGFnKEF0b21pY0hUTUxUb2tlbiYgdG9rZW4pCit2b2lk
IEhUTUxUcmVlQnVpbGRlcjo6cHJvY2Vzc1N0YXJ0VGFnKEF0b21pY0hUTUxUb2tlbiogdG9rZW4p
CiB7Ci0gICAgQVNTRVJUKHRva2VuLnR5cGUoKSA9PSBIVE1MVG9rZW5UeXBlczo6U3RhcnRUYWcp
OworICAgIEFTU0VSVCh0b2tlbi0+dHlwZSgpID09IEhUTUxUb2tlblR5cGVzOjpTdGFydFRhZyk7
CiAgICAgc3dpdGNoIChpbnNlcnRpb25Nb2RlKCkpIHsKICAgICBjYXNlIEluaXRpYWxNb2RlOgog
ICAgICAgICBBU1NFUlQoaW5zZXJ0aW9uTW9kZSgpID09IEluaXRpYWxNb2RlKTsKQEAgLTExMzAs
NyArMTEzMCw3IEBAIHZvaWQgSFRNTFRyZWVCdWlsZGVyOjpwcm9jZXNzU3RhcnRUYWcoQXRvbWlj
SFRNTFRva2VuJiB0b2tlbikKICAgICAgICAgLy8gRmFsbCB0aHJvdWdoLgogICAgIGNhc2UgQmVm
b3JlSFRNTE1vZGU6CiAgICAgICAgIEFTU0VSVChpbnNlcnRpb25Nb2RlKCkgPT0gQmVmb3JlSFRN
TE1vZGUpOwotICAgICAgICBpZiAodG9rZW4ubmFtZSgpID09IGh0bWxUYWcpIHsKKyAgICAgICAg
aWYgKHRva2VuLT5uYW1lKCkgPT0gaHRtbFRhZykgewogICAgICAgICAgICAgbV90cmVlLmluc2Vy
dEhUTUxIdG1sU3RhcnRUYWdCZWZvcmVIVE1MKHRva2VuKTsKICAgICAgICAgICAgIHNldEluc2Vy
dGlvbk1vZGUoQmVmb3JlSGVhZE1vZGUpOwogICAgICAgICAgICAgcmV0dXJuOwpAQCAtMTEzOSwx
MSArMTEzOSwxMSBAQCB2b2lkIEhUTUxUcmVlQnVpbGRlcjo6cHJvY2Vzc1N0YXJ0VGFnKEF0b21p
Y0hUTUxUb2tlbiYgdG9rZW4pCiAgICAgICAgIC8vIEZhbGwgdGhyb3VnaC4KICAgICBjYXNlIEJl
Zm9yZUhlYWRNb2RlOgogICAgICAgICBBU1NFUlQoaW5zZXJ0aW9uTW9kZSgpID09IEJlZm9yZUhl
YWRNb2RlKTsKLSAgICAgICAgaWYgKHRva2VuLm5hbWUoKSA9PSBodG1sVGFnKSB7CisgICAgICAg
IGlmICh0b2tlbi0+bmFtZSgpID09IGh0bWxUYWcpIHsKICAgICAgICAgICAgIHByb2Nlc3NIdG1s
U3RhcnRUYWdGb3JJbkJvZHkodG9rZW4pOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9
Ci0gICAgICAgIGlmICh0b2tlbi5uYW1lKCkgPT0gaGVhZFRhZykgeworICAgICAgICBpZiAodG9r
ZW4tPm5hbWUoKSA9PSBoZWFkVGFnKSB7CiAgICAgICAgICAgICBtX3RyZWUuaW5zZXJ0SFRNTEhl
YWRFbGVtZW50KHRva2VuKTsKICAgICAgICAgICAgIHNldEluc2VydGlvbk1vZGUoSW5IZWFkTW9k
ZSk7CiAgICAgICAgICAgICByZXR1cm47CkBAIC0xMTU4LDMwICsxMTU4LDMwIEBAIHZvaWQgSFRN
TFRyZWVCdWlsZGVyOjpwcm9jZXNzU3RhcnRUYWcoQXRvbWljSFRNTFRva2VuJiB0b2tlbikKICAg
ICAgICAgLy8gRmFsbCB0aHJvdWdoLgogICAgIGNhc2UgQWZ0ZXJIZWFkTW9kZToKICAgICAgICAg
QVNTRVJUKGluc2VydGlvbk1vZGUoKSA9PSBBZnRlckhlYWRNb2RlKTsKLSAgICAgICAgaWYgKHRv
a2VuLm5hbWUoKSA9PSBodG1sVGFnKSB7CisgICAgICAgIGlmICh0b2tlbi0+bmFtZSgpID09IGh0
bWxUYWcpIHsKICAgICAgICAgICAgIHByb2Nlc3NIdG1sU3RhcnRUYWdGb3JJbkJvZHkodG9rZW4p
OwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9Ci0gICAgICAgIGlmICh0b2tlbi5uYW1l
KCkgPT0gYm9keVRhZykgeworICAgICAgICBpZiAodG9rZW4tPm5hbWUoKSA9PSBib2R5VGFnKSB7
CiAgICAgICAgICAgICBtX2ZyYW1lc2V0T2sgPSBmYWxzZTsKICAgICAgICAgICAgIG1fdHJlZS5p
bnNlcnRIVE1MQm9keUVsZW1lbnQodG9rZW4pOwogICAgICAgICAgICAgc2V0SW5zZXJ0aW9uTW9k
ZShJbkJvZHlNb2RlKTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQotICAgICAgICBp
ZiAodG9rZW4ubmFtZSgpID09IGZyYW1lc2V0VGFnKSB7CisgICAgICAgIGlmICh0b2tlbi0+bmFt
ZSgpID09IGZyYW1lc2V0VGFnKSB7CiAgICAgICAgICAgICBtX3RyZWUuaW5zZXJ0SFRNTEVsZW1l
bnQodG9rZW4pOwogICAgICAgICAgICAgc2V0SW5zZXJ0aW9uTW9kZShJbkZyYW1lc2V0TW9kZSk7
CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KLSAgICAgICAgaWYgKHRva2VuLm5hbWUo
KSA9PSBiYXNlVGFnCi0gICAgICAgICAgICB8fCB0b2tlbi5uYW1lKCkgPT0gYmFzZWZvbnRUYWcK
LSAgICAgICAgICAgIHx8IHRva2VuLm5hbWUoKSA9PSBiZ3NvdW5kVGFnCi0gICAgICAgICAgICB8
fCB0b2tlbi5uYW1lKCkgPT0gbGlua1RhZwotICAgICAgICAgICAgfHwgdG9rZW4ubmFtZSgpID09
IG1ldGFUYWcKLSAgICAgICAgICAgIHx8IHRva2VuLm5hbWUoKSA9PSBub2ZyYW1lc1RhZwotICAg
ICAgICAgICAgfHwgdG9rZW4ubmFtZSgpID09IHNjcmlwdFRhZwotICAgICAgICAgICAgfHwgdG9r
ZW4ubmFtZSgpID09IHN0eWxlVGFnCi0gICAgICAgICAgICB8fCB0b2tlbi5uYW1lKCkgPT0gdGl0
bGVUYWcpIHsKKyAgICAgICAgaWYgKHRva2VuLT5uYW1lKCkgPT0gYmFzZVRhZworICAgICAgICAg
ICAgfHwgdG9rZW4tPm5hbWUoKSA9PSBiYXNlZm9udFRhZworICAgICAgICAgICAgfHwgdG9rZW4t
Pm5hbWUoKSA9PSBiZ3NvdW5kVGFnCisgICAgICAgICAgICB8fCB0b2tlbi0+bmFtZSgpID09IGxp
bmtUYWcKKyAgICAgICAgICAgIHx8IHRva2VuLT5uYW1lKCkgPT0gbWV0YVRhZworICAgICAgICAg
ICAgfHwgdG9rZW4tPm5hbWUoKSA9PSBub2ZyYW1lc1RhZworICAgICAgICAgICAgfHwgdG9rZW4t
Pm5hbWUoKSA9PSBzY3JpcHRUYWcKKyAgICAgICAgICAgIHx8IHRva2VuLT5uYW1lKCkgPT0gc3R5
bGVUYWcKKyAgICAgICAgICAgIHx8IHRva2VuLT5uYW1lKCkgPT0gdGl0bGVUYWcpIHsKICAgICAg
ICAgICAgIHBhcnNlRXJyb3IodG9rZW4pOwogICAgICAgICAgICAgQVNTRVJUKG1fdHJlZS5oZWFk
KCkpOwogICAgICAgICAgICAgbV90cmVlLm9wZW5FbGVtZW50cygpLT5wdXNoSFRNTEhlYWRFbGVt
ZW50KG1fdHJlZS5oZWFkKCkpOwpAQCAtMTE4OSw3ICsxMTg5LDcgQEAgdm9pZCBIVE1MVHJlZUJ1
aWxkZXI6OnByb2Nlc3NTdGFydFRhZyhBdG9taWNIVE1MVG9rZW4mIHRva2VuKQogICAgICAgICAg
ICAgbV90cmVlLm9wZW5FbGVtZW50cygpLT5yZW1vdmVIVE1MSGVhZEVsZW1lbnQobV90cmVlLmhl
YWQoKSk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KLSAgICAgICAgaWYgKHRva2Vu
Lm5hbWUoKSA9PSBoZWFkVGFnKSB7CisgICAgICAgIGlmICh0b2tlbi0+bmFtZSgpID09IGhlYWRU
YWcpIHsKICAgICAgICAgICAgIHBhcnNlRXJyb3IodG9rZW4pOwogICAgICAgICAgICAgcmV0dXJu
OwogICAgICAgICB9CkBAIC0xMjA1LDEwICsxMjA1LDEwIEBAIHZvaWQgSFRNTFRyZWVCdWlsZGVy
Ojpwcm9jZXNzU3RhcnRUYWcoQXRvbWljSFRNTFRva2VuJiB0b2tlbikKICAgICAgICAgYnJlYWs7
CiAgICAgY2FzZSBJbkNhcHRpb25Nb2RlOgogICAgICAgICBBU1NFUlQoaW5zZXJ0aW9uTW9kZSgp
ID09IEluQ2FwdGlvbk1vZGUpOwotICAgICAgICBpZiAoaXNDYXB0aW9uQ29sT3JDb2xncm91cFRh
Zyh0b2tlbi5uYW1lKCkpCi0gICAgICAgICAgICB8fCBpc1RhYmxlQm9keUNvbnRleHRUYWcodG9r
ZW4ubmFtZSgpKQotICAgICAgICAgICAgfHwgaXNUYWJsZUNlbGxDb250ZXh0VGFnKHRva2VuLm5h
bWUoKSkKLSAgICAgICAgICAgIHx8IHRva2VuLm5hbWUoKSA9PSB0clRhZykgeworICAgICAgICBp
ZiAoaXNDYXB0aW9uQ29sT3JDb2xncm91cFRhZyh0b2tlbi0+bmFtZSgpKQorICAgICAgICAgICAg
fHwgaXNUYWJsZUJvZHlDb250ZXh0VGFnKHRva2VuLT5uYW1lKCkpCisgICAgICAgICAgICB8fCBp
c1RhYmxlQ2VsbENvbnRleHRUYWcodG9rZW4tPm5hbWUoKSkKKyAgICAgICAgICAgIHx8IHRva2Vu
LT5uYW1lKCkgPT0gdHJUYWcpIHsKICAgICAgICAgICAgIHBhcnNlRXJyb3IodG9rZW4pOwogICAg
ICAgICAgICAgaWYgKCFwcm9jZXNzQ2FwdGlvbkVuZFRhZ0ZvckluQ2FwdGlvbigpKSB7CiAgICAg
ICAgICAgICAgICAgQVNTRVJUKGlzUGFyc2luZ0ZyYWdtZW50KCkpOwpAQCAtMTIyMSwxMSArMTIy
MSwxMSBAQCB2b2lkIEhUTUxUcmVlQnVpbGRlcjo6cHJvY2Vzc1N0YXJ0VGFnKEF0b21pY0hUTUxU
b2tlbiYgdG9rZW4pCiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgSW5Db2x1bW5Hcm91cE1vZGU6
CiAgICAgICAgIEFTU0VSVChpbnNlcnRpb25Nb2RlKCkgPT0gSW5Db2x1bW5Hcm91cE1vZGUpOwot
ICAgICAgICBpZiAodG9rZW4ubmFtZSgpID09IGh0bWxUYWcpIHsKKyAgICAgICAgaWYgKHRva2Vu
LT5uYW1lKCkgPT0gaHRtbFRhZykgewogICAgICAgICAgICAgcHJvY2Vzc0h0bWxTdGFydFRhZ0Zv
ckluQm9keSh0b2tlbik7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KLSAgICAgICAg
aWYgKHRva2VuLm5hbWUoKSA9PSBjb2xUYWcpIHsKKyAgICAgICAgaWYgKHRva2VuLT5uYW1lKCkg
PT0gY29sVGFnKSB7CiAgICAgICAgICAgICBtX3RyZWUuaW5zZXJ0U2VsZkNsb3NpbmdIVE1MRWxl
bWVudCh0b2tlbik7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KQEAgLTEyMzcsMjAg
KzEyMzcsMjAgQEAgdm9pZCBIVE1MVHJlZUJ1aWxkZXI6OnByb2Nlc3NTdGFydFRhZyhBdG9taWNI
VE1MVG9rZW4mIHRva2VuKQogICAgICAgICBicmVhazsKICAgICBjYXNlIEluVGFibGVCb2R5TW9k
ZToKICAgICAgICAgQVNTRVJUKGluc2VydGlvbk1vZGUoKSA9PSBJblRhYmxlQm9keU1vZGUpOwot
ICAgICAgICBpZiAodG9rZW4ubmFtZSgpID09IHRyVGFnKSB7CisgICAgICAgIGlmICh0b2tlbi0+
bmFtZSgpID09IHRyVGFnKSB7CiAgICAgICAgICAgICBtX3RyZWUub3BlbkVsZW1lbnRzKCktPnBv
cFVudGlsVGFibGVCb2R5U2NvcGVNYXJrZXIoKTsgLy8gSG93IGlzIHRoZXJlIGV2ZXIgYW55dGhp
bmcgdG8gcG9wPwogICAgICAgICAgICAgbV90cmVlLmluc2VydEhUTUxFbGVtZW50KHRva2VuKTsK
ICAgICAgICAgICAgIHNldEluc2VydGlvbk1vZGUoSW5Sb3dNb2RlKTsKICAgICAgICAgICAgIHJl
dHVybjsKICAgICAgICAgfQotICAgICAgICBpZiAoaXNUYWJsZUNlbGxDb250ZXh0VGFnKHRva2Vu
Lm5hbWUoKSkpIHsKKyAgICAgICAgaWYgKGlzVGFibGVDZWxsQ29udGV4dFRhZyh0b2tlbi0+bmFt
ZSgpKSkgewogICAgICAgICAgICAgcGFyc2VFcnJvcih0b2tlbik7CiAgICAgICAgICAgICBwcm9j
ZXNzRmFrZVN0YXJ0VGFnKHRyVGFnKTsKICAgICAgICAgICAgIEFTU0VSVChpbnNlcnRpb25Nb2Rl
KCkgPT0gSW5Sb3dNb2RlKTsKICAgICAgICAgICAgIHByb2Nlc3NTdGFydFRhZyh0b2tlbik7CiAg
ICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KLSAgICAgICAgaWYgKGlzQ2FwdGlvbkNvbE9y
Q29sZ3JvdXBUYWcodG9rZW4ubmFtZSgpKSB8fCBpc1RhYmxlQm9keUNvbnRleHRUYWcodG9rZW4u
bmFtZSgpKSkgeworICAgICAgICBpZiAoaXNDYXB0aW9uQ29sT3JDb2xncm91cFRhZyh0b2tlbi0+
bmFtZSgpKSB8fCBpc1RhYmxlQm9keUNvbnRleHRUYWcodG9rZW4tPm5hbWUoKSkpIHsKICAgICAg
ICAgICAgIC8vIEZJWE1FOiBUaGlzIGlzIHNsb3cuCiAgICAgICAgICAgICBpZiAoIW1fdHJlZS5v
cGVuRWxlbWVudHMoKS0+aW5UYWJsZVNjb3BlKHRib2R5VGFnLmxvY2FsTmFtZSgpKSAmJiAhbV90
cmVlLm9wZW5FbGVtZW50cygpLT5pblRhYmxlU2NvcGUodGhlYWRUYWcubG9jYWxOYW1lKCkpICYm
ICFtX3RyZWUub3BlbkVsZW1lbnRzKCktPmluVGFibGVTY29wZSh0Zm9vdFRhZy5sb2NhbE5hbWUo
KSkpIHsKICAgICAgICAgICAgICAgICBBU1NFUlQoaXNQYXJzaW5nRnJhZ21lbnQoKSk7CkBAIC0x
MjY3LDE2ICsxMjY3LDE2IEBAIHZvaWQgSFRNTFRyZWVCdWlsZGVyOjpwcm9jZXNzU3RhcnRUYWco
QXRvbWljSFRNTFRva2VuJiB0b2tlbikKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBJblJvd01v
ZGU6CiAgICAgICAgIEFTU0VSVChpbnNlcnRpb25Nb2RlKCkgPT0gSW5Sb3dNb2RlKTsKLSAgICAg
ICAgaWYgKGlzVGFibGVDZWxsQ29udGV4dFRhZyh0b2tlbi5uYW1lKCkpKSB7CisgICAgICAgIGlm
IChpc1RhYmxlQ2VsbENvbnRleHRUYWcodG9rZW4tPm5hbWUoKSkpIHsKICAgICAgICAgICAgIG1f
dHJlZS5vcGVuRWxlbWVudHMoKS0+cG9wVW50aWxUYWJsZVJvd1Njb3BlTWFya2VyKCk7CiAgICAg
ICAgICAgICBtX3RyZWUuaW5zZXJ0SFRNTEVsZW1lbnQodG9rZW4pOwogICAgICAgICAgICAgc2V0
SW5zZXJ0aW9uTW9kZShJbkNlbGxNb2RlKTsKICAgICAgICAgICAgIG1fdHJlZS5hY3RpdmVGb3Jt
YXR0aW5nRWxlbWVudHMoKS0+YXBwZW5kTWFya2VyKCk7CiAgICAgICAgICAgICByZXR1cm47CiAg
ICAgICAgIH0KLSAgICAgICAgaWYgKHRva2VuLm5hbWUoKSA9PSB0clRhZwotICAgICAgICAgICAg
fHwgaXNDYXB0aW9uQ29sT3JDb2xncm91cFRhZyh0b2tlbi5uYW1lKCkpCi0gICAgICAgICAgICB8
fCBpc1RhYmxlQm9keUNvbnRleHRUYWcodG9rZW4ubmFtZSgpKSkgeworICAgICAgICBpZiAodG9r
ZW4tPm5hbWUoKSA9PSB0clRhZworICAgICAgICAgICAgfHwgaXNDYXB0aW9uQ29sT3JDb2xncm91
cFRhZyh0b2tlbi0+bmFtZSgpKQorICAgICAgICAgICAgfHwgaXNUYWJsZUJvZHlDb250ZXh0VGFn
KHRva2VuLT5uYW1lKCkpKSB7CiAgICAgICAgICAgICBpZiAoIXByb2Nlc3NUckVuZFRhZ0Zvcklu
Um93KCkpIHsKICAgICAgICAgICAgICAgICBBU1NFUlQoaXNQYXJzaW5nRnJhZ21lbnQoKSk7CiAg
ICAgICAgICAgICAgICAgcmV0dXJuOwpAQCAtMTI4OSwxMCArMTI4OSwxMCBAQCB2b2lkIEhUTUxU
cmVlQnVpbGRlcjo6cHJvY2Vzc1N0YXJ0VGFnKEF0b21pY0hUTUxUb2tlbiYgdG9rZW4pCiAgICAg
ICAgIGJyZWFrOwogICAgIGNhc2UgSW5DZWxsTW9kZToKICAgICAgICAgQVNTRVJUKGluc2VydGlv
bk1vZGUoKSA9PSBJbkNlbGxNb2RlKTsKLSAgICAgICAgaWYgKGlzQ2FwdGlvbkNvbE9yQ29sZ3Jv
dXBUYWcodG9rZW4ubmFtZSgpKQotICAgICAgICAgICAgfHwgaXNUYWJsZUNlbGxDb250ZXh0VGFn
KHRva2VuLm5hbWUoKSkKLSAgICAgICAgICAgIHx8IHRva2VuLm5hbWUoKSA9PSB0clRhZwotICAg
ICAgICAgICAgfHwgaXNUYWJsZUJvZHlDb250ZXh0VGFnKHRva2VuLm5hbWUoKSkpIHsKKyAgICAg
ICAgaWYgKGlzQ2FwdGlvbkNvbE9yQ29sZ3JvdXBUYWcodG9rZW4tPm5hbWUoKSkKKyAgICAgICAg
ICAgIHx8IGlzVGFibGVDZWxsQ29udGV4dFRhZyh0b2tlbi0+bmFtZSgpKQorICAgICAgICAgICAg
fHwgdG9rZW4tPm5hbWUoKSA9PSB0clRhZworICAgICAgICAgICAgfHwgaXNUYWJsZUJvZHlDb250
ZXh0VGFnKHRva2VuLT5uYW1lKCkpKSB7CiAgICAgICAgICAgICAvLyBGSVhNRTogVGhpcyBjb3Vs
ZCBiZSBtb3JlIGVmZmljaWVudC4KICAgICAgICAgICAgIGlmICghbV90cmVlLm9wZW5FbGVtZW50
cygpLT5pblRhYmxlU2NvcGUodGRUYWcpICYmICFtX3RyZWUub3BlbkVsZW1lbnRzKCktPmluVGFi
bGVTY29wZSh0aFRhZykpIHsKICAgICAgICAgICAgICAgICBBU1NFUlQoaXNQYXJzaW5nRnJhZ21l
bnQoKSk7CkBAIC0xMzA4LDcgKzEzMDgsNyBAQCB2b2lkIEhUTUxUcmVlQnVpbGRlcjo6cHJvY2Vz
c1N0YXJ0VGFnKEF0b21pY0hUTUxUb2tlbiYgdG9rZW4pCiAgICAgY2FzZSBBZnRlckJvZHlNb2Rl
OgogICAgIGNhc2UgQWZ0ZXJBZnRlckJvZHlNb2RlOgogICAgICAgICBBU1NFUlQoaW5zZXJ0aW9u
TW9kZSgpID09IEFmdGVyQm9keU1vZGUgfHwgaW5zZXJ0aW9uTW9kZSgpID09IEFmdGVyQWZ0ZXJC
b2R5TW9kZSk7Ci0gICAgICAgIGlmICh0b2tlbi5uYW1lKCkgPT0gaHRtbFRhZykgeworICAgICAg
ICBpZiAodG9rZW4tPm5hbWUoKSA9PSBodG1sVGFnKSB7CiAgICAgICAgICAgICBwcm9jZXNzSHRt
bFN0YXJ0VGFnRm9ySW5Cb2R5KHRva2VuKTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAg
fQpAQCAtMTMxNywyMSArMTMxNywyMSBAQCB2b2lkIEhUTUxUcmVlQnVpbGRlcjo6cHJvY2Vzc1N0
YXJ0VGFnKEF0b21pY0hUTUxUb2tlbiYgdG9rZW4pCiAgICAgICAgIGJyZWFrOwogICAgIGNhc2Ug
SW5IZWFkTm9zY3JpcHRNb2RlOgogICAgICAgICBBU1NFUlQoaW5zZXJ0aW9uTW9kZSgpID09IElu
SGVhZE5vc2NyaXB0TW9kZSk7Ci0gICAgICAgIGlmICh0b2tlbi5uYW1lKCkgPT0gaHRtbFRhZykg
eworICAgICAgICBpZiAodG9rZW4tPm5hbWUoKSA9PSBodG1sVGFnKSB7CiAgICAgICAgICAgICBw
cm9jZXNzSHRtbFN0YXJ0VGFnRm9ySW5Cb2R5KHRva2VuKTsKICAgICAgICAgICAgIHJldHVybjsK
ICAgICAgICAgfQotICAgICAgICBpZiAodG9rZW4ubmFtZSgpID09IGJhc2Vmb250VGFnCi0gICAg
ICAgICAgICB8fCB0b2tlbi5uYW1lKCkgPT0gYmdzb3VuZFRhZwotICAgICAgICAgICAgfHwgdG9r
ZW4ubmFtZSgpID09IGxpbmtUYWcKLSAgICAgICAgICAgIHx8IHRva2VuLm5hbWUoKSA9PSBtZXRh
VGFnCi0gICAgICAgICAgICB8fCB0b2tlbi5uYW1lKCkgPT0gbm9mcmFtZXNUYWcKLSAgICAgICAg
ICAgIHx8IHRva2VuLm5hbWUoKSA9PSBzdHlsZVRhZykgeworICAgICAgICBpZiAodG9rZW4tPm5h
bWUoKSA9PSBiYXNlZm9udFRhZworICAgICAgICAgICAgfHwgdG9rZW4tPm5hbWUoKSA9PSBiZ3Nv
dW5kVGFnCisgICAgICAgICAgICB8fCB0b2tlbi0+bmFtZSgpID09IGxpbmtUYWcKKyAgICAgICAg
ICAgIHx8IHRva2VuLT5uYW1lKCkgPT0gbWV0YVRhZworICAgICAgICAgICAgfHwgdG9rZW4tPm5h
bWUoKSA9PSBub2ZyYW1lc1RhZworICAgICAgICAgICAgfHwgdG9rZW4tPm5hbWUoKSA9PSBzdHls
ZVRhZykgewogICAgICAgICAgICAgYm9vbCBkaWRQcm9jZXNzID0gcHJvY2Vzc1N0YXJ0VGFnRm9y
SW5IZWFkKHRva2VuKTsKICAgICAgICAgICAgIEFTU0VSVF9VTlVTRUQoZGlkUHJvY2VzcywgZGlk
UHJvY2Vzcyk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KLSAgICAgICAgaWYgKHRv
a2VuLm5hbWUoKSA9PSBodG1sVGFnIHx8IHRva2VuLm5hbWUoKSA9PSBub3NjcmlwdFRhZykgewor
ICAgICAgICBpZiAodG9rZW4tPm5hbWUoKSA9PSBodG1sVGFnIHx8IHRva2VuLT5uYW1lKCkgPT0g
bm9zY3JpcHRUYWcpIHsKICAgICAgICAgICAgIHBhcnNlRXJyb3IodG9rZW4pOwogICAgICAgICAg
ICAgcmV0dXJuOwogICAgICAgICB9CkBAIC0xMzQwLDE5ICsxMzQwLDE5IEBAIHZvaWQgSFRNTFRy
ZWVCdWlsZGVyOjpwcm9jZXNzU3RhcnRUYWcoQXRvbWljSFRNTFRva2VuJiB0b2tlbikKICAgICAg
ICAgYnJlYWs7CiAgICAgY2FzZSBJbkZyYW1lc2V0TW9kZToKICAgICAgICAgQVNTRVJUKGluc2Vy
dGlvbk1vZGUoKSA9PSBJbkZyYW1lc2V0TW9kZSk7Ci0gICAgICAgIGlmICh0b2tlbi5uYW1lKCkg
PT0gaHRtbFRhZykgeworICAgICAgICBpZiAodG9rZW4tPm5hbWUoKSA9PSBodG1sVGFnKSB7CiAg
ICAgICAgICAgICBwcm9jZXNzSHRtbFN0YXJ0VGFnRm9ySW5Cb2R5KHRva2VuKTsKICAgICAgICAg
ICAgIHJldHVybjsKICAgICAgICAgfQotICAgICAgICBpZiAodG9rZW4ubmFtZSgpID09IGZyYW1l
c2V0VGFnKSB7CisgICAgICAgIGlmICh0b2tlbi0+bmFtZSgpID09IGZyYW1lc2V0VGFnKSB7CiAg
ICAgICAgICAgICBtX3RyZWUuaW5zZXJ0SFRNTEVsZW1lbnQodG9rZW4pOwogICAgICAgICAgICAg
cmV0dXJuOwogICAgICAgICB9Ci0gICAgICAgIGlmICh0b2tlbi5uYW1lKCkgPT0gZnJhbWVUYWcp
IHsKKyAgICAgICAgaWYgKHRva2VuLT5uYW1lKCkgPT0gZnJhbWVUYWcpIHsKICAgICAgICAgICAg
IG1fdHJlZS5pbnNlcnRTZWxmQ2xvc2luZ0hUTUxFbGVtZW50KHRva2VuKTsKICAgICAgICAgICAg
IHJldHVybjsKICAgICAgICAgfQotICAgICAgICBpZiAodG9rZW4ubmFtZSgpID09IG5vZnJhbWVz
VGFnKSB7CisgICAgICAgIGlmICh0b2tlbi0+bmFtZSgpID09IG5vZnJhbWVzVGFnKSB7CiAgICAg
ICAgICAgICBwcm9jZXNzU3RhcnRUYWdGb3JJbkhlYWQodG9rZW4pOwogICAgICAgICAgICAgcmV0
dXJuOwogICAgICAgICB9CkBAIC0xMzYxLDExICsxMzYxLDExIEBAIHZvaWQgSFRNTFRyZWVCdWls
ZGVyOjpwcm9jZXNzU3RhcnRUYWcoQXRvbWljSFRNTFRva2VuJiB0b2tlbikKICAgICBjYXNlIEFm
dGVyRnJhbWVzZXRNb2RlOgogICAgIGNhc2UgQWZ0ZXJBZnRlckZyYW1lc2V0TW9kZToKICAgICAg
ICAgQVNTRVJUKGluc2VydGlvbk1vZGUoKSA9PSBBZnRlckZyYW1lc2V0TW9kZSB8fCBpbnNlcnRp
b25Nb2RlKCkgPT0gQWZ0ZXJBZnRlckZyYW1lc2V0TW9kZSk7Ci0gICAgICAgIGlmICh0b2tlbi5u
YW1lKCkgPT0gaHRtbFRhZykgeworICAgICAgICBpZiAodG9rZW4tPm5hbWUoKSA9PSBodG1sVGFn
KSB7CiAgICAgICAgICAgICBwcm9jZXNzSHRtbFN0YXJ0VGFnRm9ySW5Cb2R5KHRva2VuKTsKICAg
ICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQotICAgICAgICBpZiAodG9rZW4ubmFtZSgpID09
IG5vZnJhbWVzVGFnKSB7CisgICAgICAgIGlmICh0b2tlbi0+bmFtZSgpID09IG5vZnJhbWVzVGFn
KSB7CiAgICAgICAgICAgICBwcm9jZXNzU3RhcnRUYWdGb3JJbkhlYWQodG9rZW4pOwogICAgICAg
ICAgICAgcmV0dXJuOwogICAgICAgICB9CkBAIC0xMzczLDY0ICsxMzczLDY0IEBAIHZvaWQgSFRN
TFRyZWVCdWlsZGVyOjpwcm9jZXNzU3RhcnRUYWcoQXRvbWljSFRNTFRva2VuJiB0b2tlbikKICAg
ICAgICAgYnJlYWs7CiAgICAgY2FzZSBJblNlbGVjdEluVGFibGVNb2RlOgogICAgICAgICBBU1NF
UlQoaW5zZXJ0aW9uTW9kZSgpID09IEluU2VsZWN0SW5UYWJsZU1vZGUpOwotICAgICAgICBpZiAo
dG9rZW4ubmFtZSgpID09IGNhcHRpb25UYWcKLSAgICAgICAgICAgIHx8IHRva2VuLm5hbWUoKSA9
PSB0YWJsZVRhZwotICAgICAgICAgICAgfHwgaXNUYWJsZUJvZHlDb250ZXh0VGFnKHRva2VuLm5h
bWUoKSkKLSAgICAgICAgICAgIHx8IHRva2VuLm5hbWUoKSA9PSB0clRhZwotICAgICAgICAgICAg
fHwgaXNUYWJsZUNlbGxDb250ZXh0VGFnKHRva2VuLm5hbWUoKSkpIHsKKyAgICAgICAgaWYgKHRv
a2VuLT5uYW1lKCkgPT0gY2FwdGlvblRhZworICAgICAgICAgICAgfHwgdG9rZW4tPm5hbWUoKSA9
PSB0YWJsZVRhZworICAgICAgICAgICAgfHwgaXNUYWJsZUJvZHlDb250ZXh0VGFnKHRva2VuLT5u
YW1lKCkpCisgICAgICAgICAgICB8fCB0b2tlbi0+bmFtZSgpID09IHRyVGFnCisgICAgICAgICAg
ICB8fCBpc1RhYmxlQ2VsbENvbnRleHRUYWcodG9rZW4tPm5hbWUoKSkpIHsKICAgICAgICAgICAg
IHBhcnNlRXJyb3IodG9rZW4pOwotICAgICAgICAgICAgQXRvbWljSFRNTFRva2VuIGVuZFNlbGVj
dChIVE1MVG9rZW5UeXBlczo6RW5kVGFnLCBzZWxlY3RUYWcubG9jYWxOYW1lKCkpOwotICAgICAg
ICAgICAgcHJvY2Vzc0VuZFRhZyhlbmRTZWxlY3QpOworICAgICAgICAgICAgUmVmUHRyPEF0b21p
Y0hUTUxUb2tlbj4gZW5kU2VsZWN0ID0gQXRvbWljSFRNTFRva2VuOjpjcmVhdGUoSFRNTFRva2Vu
VHlwZXM6OkVuZFRhZywgc2VsZWN0VGFnLmxvY2FsTmFtZSgpKTsKKyAgICAgICAgICAgIHByb2Nl
c3NFbmRUYWcoZW5kU2VsZWN0LmdldCgpKTsKICAgICAgICAgICAgIHByb2Nlc3NTdGFydFRhZyh0
b2tlbik7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KICAgICAgICAgLy8gRmFsbCB0
aHJvdWdoCiAgICAgY2FzZSBJblNlbGVjdE1vZGU6CiAgICAgICAgIEFTU0VSVChpbnNlcnRpb25N
b2RlKCkgPT0gSW5TZWxlY3RNb2RlIHx8IGluc2VydGlvbk1vZGUoKSA9PSBJblNlbGVjdEluVGFi
bGVNb2RlKTsKLSAgICAgICAgaWYgKHRva2VuLm5hbWUoKSA9PSBodG1sVGFnKSB7CisgICAgICAg
IGlmICh0b2tlbi0+bmFtZSgpID09IGh0bWxUYWcpIHsKICAgICAgICAgICAgIHByb2Nlc3NIdG1s
U3RhcnRUYWdGb3JJbkJvZHkodG9rZW4pOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9
Ci0gICAgICAgIGlmICh0b2tlbi5uYW1lKCkgPT0gb3B0aW9uVGFnKSB7CisgICAgICAgIGlmICh0
b2tlbi0+bmFtZSgpID09IG9wdGlvblRhZykgewogICAgICAgICAgICAgaWYgKG1fdHJlZS5jdXJy
ZW50Tm9kZSgpLT5oYXNUYWdOYW1lKG9wdGlvblRhZykpIHsKLSAgICAgICAgICAgICAgICBBdG9t
aWNIVE1MVG9rZW4gZW5kT3B0aW9uKEhUTUxUb2tlblR5cGVzOjpFbmRUYWcsIG9wdGlvblRhZy5s
b2NhbE5hbWUoKSk7Ci0gICAgICAgICAgICAgICAgcHJvY2Vzc0VuZFRhZyhlbmRPcHRpb24pOwor
ICAgICAgICAgICAgICAgIFJlZlB0cjxBdG9taWNIVE1MVG9rZW4+IGVuZE9wdGlvbiA9IEF0b21p
Y0hUTUxUb2tlbjo6Y3JlYXRlKEhUTUxUb2tlblR5cGVzOjpFbmRUYWcsIG9wdGlvblRhZy5sb2Nh
bE5hbWUoKSk7CisgICAgICAgICAgICAgICAgcHJvY2Vzc0VuZFRhZyhlbmRPcHRpb24uZ2V0KCkp
OwogICAgICAgICAgICAgfQogICAgICAgICAgICAgbV90cmVlLmluc2VydEhUTUxFbGVtZW50KHRv
a2VuKTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQotICAgICAgICBpZiAodG9rZW4u
bmFtZSgpID09IG9wdGdyb3VwVGFnKSB7CisgICAgICAgIGlmICh0b2tlbi0+bmFtZSgpID09IG9w
dGdyb3VwVGFnKSB7CiAgICAgICAgICAgICBpZiAobV90cmVlLmN1cnJlbnROb2RlKCktPmhhc1Rh
Z05hbWUob3B0aW9uVGFnKSkgewotICAgICAgICAgICAgICAgIEF0b21pY0hUTUxUb2tlbiBlbmRP
cHRpb24oSFRNTFRva2VuVHlwZXM6OkVuZFRhZywgb3B0aW9uVGFnLmxvY2FsTmFtZSgpKTsKLSAg
ICAgICAgICAgICAgICBwcm9jZXNzRW5kVGFnKGVuZE9wdGlvbik7CisgICAgICAgICAgICAgICAg
UmVmUHRyPEF0b21pY0hUTUxUb2tlbj4gZW5kT3B0aW9uID0gQXRvbWljSFRNTFRva2VuOjpjcmVh
dGUoSFRNTFRva2VuVHlwZXM6OkVuZFRhZywgb3B0aW9uVGFnLmxvY2FsTmFtZSgpKTsKKyAgICAg
ICAgICAgICAgICBwcm9jZXNzRW5kVGFnKGVuZE9wdGlvbi5nZXQoKSk7CiAgICAgICAgICAgICB9
CiAgICAgICAgICAgICBpZiAobV90cmVlLmN1cnJlbnROb2RlKCktPmhhc1RhZ05hbWUob3B0Z3Jv
dXBUYWcpKSB7Ci0gICAgICAgICAgICAgICAgQXRvbWljSFRNTFRva2VuIGVuZE9wdGdyb3VwKEhU
TUxUb2tlblR5cGVzOjpFbmRUYWcsIG9wdGdyb3VwVGFnLmxvY2FsTmFtZSgpKTsKLSAgICAgICAg
ICAgICAgICBwcm9jZXNzRW5kVGFnKGVuZE9wdGdyb3VwKTsKKyAgICAgICAgICAgICAgICBSZWZQ
dHI8QXRvbWljSFRNTFRva2VuPiBlbmRPcHRncm91cCA9IEF0b21pY0hUTUxUb2tlbjo6Y3JlYXRl
KEhUTUxUb2tlblR5cGVzOjpFbmRUYWcsIG9wdGdyb3VwVGFnLmxvY2FsTmFtZSgpKTsKKyAgICAg
ICAgICAgICAgICBwcm9jZXNzRW5kVGFnKGVuZE9wdGdyb3VwLmdldCgpKTsKICAgICAgICAgICAg
IH0KICAgICAgICAgICAgIG1fdHJlZS5pbnNlcnRIVE1MRWxlbWVudCh0b2tlbik7CiAgICAgICAg
ICAgICByZXR1cm47CiAgICAgICAgIH0KLSAgICAgICAgaWYgKHRva2VuLm5hbWUoKSA9PSBzZWxl
Y3RUYWcpIHsKKyAgICAgICAgaWYgKHRva2VuLT5uYW1lKCkgPT0gc2VsZWN0VGFnKSB7CiAgICAg
ICAgICAgICBwYXJzZUVycm9yKHRva2VuKTsKLSAgICAgICAgICAgIEF0b21pY0hUTUxUb2tlbiBl
bmRTZWxlY3QoSFRNTFRva2VuVHlwZXM6OkVuZFRhZywgc2VsZWN0VGFnLmxvY2FsTmFtZSgpKTsK
LSAgICAgICAgICAgIHByb2Nlc3NFbmRUYWcoZW5kU2VsZWN0KTsKKyAgICAgICAgICAgIFJlZlB0
cjxBdG9taWNIVE1MVG9rZW4+IGVuZFNlbGVjdCA9IEF0b21pY0hUTUxUb2tlbjo6Y3JlYXRlKEhU
TUxUb2tlblR5cGVzOjpFbmRUYWcsIHNlbGVjdFRhZy5sb2NhbE5hbWUoKSk7CisgICAgICAgICAg
ICBwcm9jZXNzRW5kVGFnKGVuZFNlbGVjdC5nZXQoKSk7CiAgICAgICAgICAgICByZXR1cm47CiAg
ICAgICAgIH0KLSAgICAgICAgaWYgKHRva2VuLm5hbWUoKSA9PSBpbnB1dFRhZwotICAgICAgICAg
ICAgfHwgdG9rZW4ubmFtZSgpID09IGtleWdlblRhZwotICAgICAgICAgICAgfHwgdG9rZW4ubmFt
ZSgpID09IHRleHRhcmVhVGFnKSB7CisgICAgICAgIGlmICh0b2tlbi0+bmFtZSgpID09IGlucHV0
VGFnCisgICAgICAgICAgICB8fCB0b2tlbi0+bmFtZSgpID09IGtleWdlblRhZworICAgICAgICAg
ICAgfHwgdG9rZW4tPm5hbWUoKSA9PSB0ZXh0YXJlYVRhZykgewogICAgICAgICAgICAgcGFyc2VF
cnJvcih0b2tlbik7CiAgICAgICAgICAgICBpZiAoIW1fdHJlZS5vcGVuRWxlbWVudHMoKS0+aW5T
ZWxlY3RTY29wZShzZWxlY3RUYWcpKSB7CiAgICAgICAgICAgICAgICAgQVNTRVJUKGlzUGFyc2lu
Z0ZyYWdtZW50KCkpOwogICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgIH0KLSAg
ICAgICAgICAgIEF0b21pY0hUTUxUb2tlbiBlbmRTZWxlY3QoSFRNTFRva2VuVHlwZXM6OkVuZFRh
Zywgc2VsZWN0VGFnLmxvY2FsTmFtZSgpKTsKLSAgICAgICAgICAgIHByb2Nlc3NFbmRUYWcoZW5k
U2VsZWN0KTsKKyAgICAgICAgICAgIFJlZlB0cjxBdG9taWNIVE1MVG9rZW4+IGVuZFNlbGVjdCA9
IEF0b21pY0hUTUxUb2tlbjo6Y3JlYXRlKEhUTUxUb2tlblR5cGVzOjpFbmRUYWcsIHNlbGVjdFRh
Zy5sb2NhbE5hbWUoKSk7CisgICAgICAgICAgICBwcm9jZXNzRW5kVGFnKGVuZFNlbGVjdC5nZXQo
KSk7CiAgICAgICAgICAgICBwcm9jZXNzU3RhcnRUYWcodG9rZW4pOwogICAgICAgICAgICAgcmV0
dXJuOwogICAgICAgICB9Ci0gICAgICAgIGlmICh0b2tlbi5uYW1lKCkgPT0gc2NyaXB0VGFnKSB7
CisgICAgICAgIGlmICh0b2tlbi0+bmFtZSgpID09IHNjcmlwdFRhZykgewogICAgICAgICAgICAg
Ym9vbCBkaWRQcm9jZXNzID0gcHJvY2Vzc1N0YXJ0VGFnRm9ySW5IZWFkKHRva2VuKTsKICAgICAg
ICAgICAgIEFTU0VSVF9VTlVTRUQoZGlkUHJvY2VzcywgZGlkUHJvY2Vzcyk7CiAgICAgICAgICAg
ICByZXR1cm47CkBAIC0xNDQ2LDE2ICsxNDQ2LDE2IEBAIHZvaWQgSFRNTFRyZWVCdWlsZGVyOjpw
cm9jZXNzU3RhcnRUYWcoQXRvbWljSFRNTFRva2VuJiB0b2tlbikKICAgICB9CiB9CiAKLXZvaWQg
SFRNTFRyZWVCdWlsZGVyOjpwcm9jZXNzSHRtbFN0YXJ0VGFnRm9ySW5Cb2R5KEF0b21pY0hUTUxU
b2tlbiYgdG9rZW4pCit2b2lkIEhUTUxUcmVlQnVpbGRlcjo6cHJvY2Vzc0h0bWxTdGFydFRhZ0Zv
ckluQm9keShBdG9taWNIVE1MVG9rZW4qIHRva2VuKQogewogICAgIHBhcnNlRXJyb3IodG9rZW4p
OwogICAgIG1fdHJlZS5pbnNlcnRIVE1MSHRtbFN0YXJ0VGFnSW5Cb2R5KHRva2VuKTsKIH0KIAot
Ym9vbCBIVE1MVHJlZUJ1aWxkZXI6OnByb2Nlc3NCb2R5RW5kVGFnRm9ySW5Cb2R5KEF0b21pY0hU
TUxUb2tlbiYgdG9rZW4pCitib29sIEhUTUxUcmVlQnVpbGRlcjo6cHJvY2Vzc0JvZHlFbmRUYWdG
b3JJbkJvZHkoQXRvbWljSFRNTFRva2VuKiB0b2tlbikKIHsKLSAgICBBU1NFUlQodG9rZW4udHlw
ZSgpID09IEhUTUxUb2tlblR5cGVzOjpFbmRUYWcpOwotICAgIEFTU0VSVCh0b2tlbi5uYW1lKCkg
PT0gYm9keVRhZyk7CisgICAgQVNTRVJUKHRva2VuLT50eXBlKCkgPT0gSFRNTFRva2VuVHlwZXM6
OkVuZFRhZyk7CisgICAgQVNTRVJUKHRva2VuLT5uYW1lKCkgPT0gYm9keVRhZyk7CiAgICAgaWYg
KCFtX3RyZWUub3BlbkVsZW1lbnRzKCktPmluU2NvcGUoYm9keVRhZy5sb2NhbE5hbWUoKSkpIHsK
ICAgICAgICAgcGFyc2VFcnJvcih0b2tlbik7CiAgICAgICAgIHJldHVybiBmYWxzZTsKQEAgLTE0
NjUsMTUgKzE0NjUsMTUgQEAgYm9vbCBIVE1MVHJlZUJ1aWxkZXI6OnByb2Nlc3NCb2R5RW5kVGFn
Rm9ySW5Cb2R5KEF0b21pY0hUTUxUb2tlbiYgdG9rZW4pCiAgICAgcmV0dXJuIHRydWU7CiB9CiAK
LXZvaWQgSFRNTFRyZWVCdWlsZGVyOjpwcm9jZXNzQW55T3RoZXJFbmRUYWdGb3JJbkJvZHkoQXRv
bWljSFRNTFRva2VuJiB0b2tlbikKK3ZvaWQgSFRNTFRyZWVCdWlsZGVyOjpwcm9jZXNzQW55T3Ro
ZXJFbmRUYWdGb3JJbkJvZHkoQXRvbWljSFRNTFRva2VuKiB0b2tlbikKIHsKLSAgICBBU1NFUlQo
dG9rZW4udHlwZSgpID09IEhUTUxUb2tlblR5cGVzOjpFbmRUYWcpOworICAgIEFTU0VSVCh0b2tl
bi0+dHlwZSgpID09IEhUTUxUb2tlblR5cGVzOjpFbmRUYWcpOwogICAgIEhUTUxFbGVtZW50U3Rh
Y2s6OkVsZW1lbnRSZWNvcmQqIHJlY29yZCA9IG1fdHJlZS5vcGVuRWxlbWVudHMoKS0+dG9wUmVj
b3JkKCk7CiAgICAgd2hpbGUgKDEpIHsKICAgICAgICAgUmVmUHRyPENvbnRhaW5lck5vZGU+IG5v
ZGUgPSByZWNvcmQtPm5vZGUoKTsKLSAgICAgICAgaWYgKG5vZGUtPmhhc0xvY2FsTmFtZSh0b2tl
bi5uYW1lKCkpKSB7Ci0gICAgICAgICAgICBtX3RyZWUuZ2VuZXJhdGVJbXBsaWVkRW5kVGFnc1dp
dGhFeGNsdXNpb24odG9rZW4ubmFtZSgpKTsKLSAgICAgICAgICAgIGlmICghbV90cmVlLmN1cnJl
bnROb2RlKCktPmhhc0xvY2FsTmFtZSh0b2tlbi5uYW1lKCkpKQorICAgICAgICBpZiAobm9kZS0+
aGFzTG9jYWxOYW1lKHRva2VuLT5uYW1lKCkpKSB7CisgICAgICAgICAgICBtX3RyZWUuZ2VuZXJh
dGVJbXBsaWVkRW5kVGFnc1dpdGhFeGNsdXNpb24odG9rZW4tPm5hbWUoKSk7CisgICAgICAgICAg
ICBpZiAoIW1fdHJlZS5jdXJyZW50Tm9kZSgpLT5oYXNMb2NhbE5hbWUodG9rZW4tPm5hbWUoKSkp
CiAgICAgICAgICAgICAgICAgcGFyc2VFcnJvcih0b2tlbik7CiAgICAgICAgICAgICBtX3RyZWUu
b3BlbkVsZW1lbnRzKCktPnBvcFVudGlsUG9wcGVkKHRvRWxlbWVudChub2RlLmdldCgpKSk7CiAg
ICAgICAgICAgICByZXR1cm47CkBAIC0xNTAyLDcgKzE1MDIsNyBAQCBIVE1MRWxlbWVudFN0YWNr
OjpFbGVtZW50UmVjb3JkKiBIVE1MVHJlZUJ1aWxkZXI6OmZ1cnRoZXN0QmxvY2tGb3JGb3JtYXR0
aW5nRWxlbQogfQogCiAvLyBodHRwOi8vd3d3LndoYXR3Zy5vcmcvc3BlY3Mvd2ViLWFwcHMvY3Vy
cmVudC13b3JrL211bHRpcGFnZS90b2tlbml6YXRpb24uaHRtbCNwYXJzaW5nLW1haW4taW5ib2R5
Ci12b2lkIEhUTUxUcmVlQnVpbGRlcjo6Y2FsbFRoZUFkb3B0aW9uQWdlbmN5KEF0b21pY0hUTUxU
b2tlbiYgdG9rZW4pCit2b2lkIEhUTUxUcmVlQnVpbGRlcjo6Y2FsbFRoZUFkb3B0aW9uQWdlbmN5
KEF0b21pY0hUTUxUb2tlbiogdG9rZW4pCiB7CiAgICAgLy8gVGhlIGFkb3B0aW9uIGFnZW5jeSBh
bGdvcml0aG0gaXMgTl4yLiBXZSBsaW1pdCB0aGUgbnVtYmVyIG9mIGl0ZXJhdGlvbnMKICAgICAv
LyB0byBzdG9wIGZyb20gaGFuZ2luZyB0aGUgd2hvbGUgYnJvd3Nlci4gVGhpcyBsaW1pdCBpcyBz
cGVjaWZpZWQgaW4gdGhlCkBAIC0xNTEzLDcgKzE1MTMsNyBAQCB2b2lkIEhUTUxUcmVlQnVpbGRl
cjo6Y2FsbFRoZUFkb3B0aW9uQWdlbmN5KEF0b21pY0hUTUxUb2tlbiYgdG9rZW4pCiAKICAgICBm
b3IgKGludCBpID0gMDsgaSA8IG91dGVySXRlcmF0aW9uTGltaXQ7ICsraSkgewogICAgICAgICAv
LyAxLgotICAgICAgICBFbGVtZW50KiBmb3JtYXR0aW5nRWxlbWVudCA9IG1fdHJlZS5hY3RpdmVG
b3JtYXR0aW5nRWxlbWVudHMoKS0+Y2xvc2VzdEVsZW1lbnRJblNjb3BlV2l0aE5hbWUodG9rZW4u
bmFtZSgpKTsKKyAgICAgICAgRWxlbWVudCogZm9ybWF0dGluZ0VsZW1lbnQgPSBtX3RyZWUuYWN0
aXZlRm9ybWF0dGluZ0VsZW1lbnRzKCktPmNsb3Nlc3RFbGVtZW50SW5TY29wZVdpdGhOYW1lKHRv
a2VuLT5uYW1lKCkpOwogICAgICAgICBpZiAoIWZvcm1hdHRpbmdFbGVtZW50IHx8ICgobV90cmVl
Lm9wZW5FbGVtZW50cygpLT5jb250YWlucyhmb3JtYXR0aW5nRWxlbWVudCkpICYmICFtX3RyZWUu
b3BlbkVsZW1lbnRzKCktPmluU2NvcGUoZm9ybWF0dGluZ0VsZW1lbnQpKSkgewogICAgICAgICAg
ICAgcGFyc2VFcnJvcih0b2tlbik7CiAgICAgICAgICAgICBub3RJbXBsZW1lbnRlZCgpOyAvLyBD
aGVjayB0aGUgc3RhY2sgb2Ygb3BlbiBlbGVtZW50cyBmb3IgYSBtb3JlIHNwZWNpZmljIHBhcnNl
IGVycm9yLgpAQCAtMTY2OSwxMSArMTY2OSwxMSBAQCB2b2lkIEhUTUxUcmVlQnVpbGRlcjo6cmVz
ZXRJbnNlcnRpb25Nb2RlQXBwcm9wcmlhdGVseSgpCiAgICAgfQogfQogCi12b2lkIEhUTUxUcmVl
QnVpbGRlcjo6cHJvY2Vzc0VuZFRhZ0ZvckluVGFibGVCb2R5KEF0b21pY0hUTUxUb2tlbiYgdG9r
ZW4pCit2b2lkIEhUTUxUcmVlQnVpbGRlcjo6cHJvY2Vzc0VuZFRhZ0ZvckluVGFibGVCb2R5KEF0
b21pY0hUTUxUb2tlbiogdG9rZW4pCiB7Ci0gICAgQVNTRVJUKHRva2VuLnR5cGUoKSA9PSBIVE1M
VG9rZW5UeXBlczo6RW5kVGFnKTsKLSAgICBpZiAoaXNUYWJsZUJvZHlDb250ZXh0VGFnKHRva2Vu
Lm5hbWUoKSkpIHsKLSAgICAgICAgaWYgKCFtX3RyZWUub3BlbkVsZW1lbnRzKCktPmluVGFibGVT
Y29wZSh0b2tlbi5uYW1lKCkpKSB7CisgICAgQVNTRVJUKHRva2VuLT50eXBlKCkgPT0gSFRNTFRv
a2VuVHlwZXM6OkVuZFRhZyk7CisgICAgaWYgKGlzVGFibGVCb2R5Q29udGV4dFRhZyh0b2tlbi0+
bmFtZSgpKSkgeworICAgICAgICBpZiAoIW1fdHJlZS5vcGVuRWxlbWVudHMoKS0+aW5UYWJsZVNj
b3BlKHRva2VuLT5uYW1lKCkpKSB7CiAgICAgICAgICAgICBwYXJzZUVycm9yKHRva2VuKTsKICAg
ICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQpAQCAtMTY4Miw3ICsxNjgyLDcgQEAgdm9pZCBI
VE1MVHJlZUJ1aWxkZXI6OnByb2Nlc3NFbmRUYWdGb3JJblRhYmxlQm9keShBdG9taWNIVE1MVG9r
ZW4mIHRva2VuKQogICAgICAgICBzZXRJbnNlcnRpb25Nb2RlKEluVGFibGVNb2RlKTsKICAgICAg
ICAgcmV0dXJuOwogICAgIH0KLSAgICBpZiAodG9rZW4ubmFtZSgpID09IHRhYmxlVGFnKSB7Cisg
ICAgaWYgKHRva2VuLT5uYW1lKCkgPT0gdGFibGVUYWcpIHsKICAgICAgICAgLy8gRklYTUU6IFRo
aXMgaXMgc2xvdy4KICAgICAgICAgaWYgKCFtX3RyZWUub3BlbkVsZW1lbnRzKCktPmluVGFibGVT
Y29wZSh0Ym9keVRhZy5sb2NhbE5hbWUoKSkgJiYgIW1fdHJlZS5vcGVuRWxlbWVudHMoKS0+aW5U
YWJsZVNjb3BlKHRoZWFkVGFnLmxvY2FsTmFtZSgpKSAmJiAhbV90cmVlLm9wZW5FbGVtZW50cygp
LT5pblRhYmxlU2NvcGUodGZvb3RUYWcubG9jYWxOYW1lKCkpKSB7CiAgICAgICAgICAgICBBU1NF
UlQoaXNQYXJzaW5nRnJhZ21lbnQoKSk7CkBAIC0xNjk1LDI1ICsxNjk1LDI1IEBAIHZvaWQgSFRN
TFRyZWVCdWlsZGVyOjpwcm9jZXNzRW5kVGFnRm9ySW5UYWJsZUJvZHkoQXRvbWljSFRNTFRva2Vu
JiB0b2tlbikKICAgICAgICAgcHJvY2Vzc0VuZFRhZyh0b2tlbik7CiAgICAgICAgIHJldHVybjsK
ICAgICB9Ci0gICAgaWYgKHRva2VuLm5hbWUoKSA9PSBib2R5VGFnCi0gICAgICAgIHx8IGlzQ2Fw
dGlvbkNvbE9yQ29sZ3JvdXBUYWcodG9rZW4ubmFtZSgpKQotICAgICAgICB8fCB0b2tlbi5uYW1l
KCkgPT0gaHRtbFRhZwotICAgICAgICB8fCBpc1RhYmxlQ2VsbENvbnRleHRUYWcodG9rZW4ubmFt
ZSgpKQotICAgICAgICB8fCB0b2tlbi5uYW1lKCkgPT0gdHJUYWcpIHsKKyAgICBpZiAodG9rZW4t
Pm5hbWUoKSA9PSBib2R5VGFnCisgICAgICAgIHx8IGlzQ2FwdGlvbkNvbE9yQ29sZ3JvdXBUYWco
dG9rZW4tPm5hbWUoKSkKKyAgICAgICAgfHwgdG9rZW4tPm5hbWUoKSA9PSBodG1sVGFnCisgICAg
ICAgIHx8IGlzVGFibGVDZWxsQ29udGV4dFRhZyh0b2tlbi0+bmFtZSgpKQorICAgICAgICB8fCB0
b2tlbi0+bmFtZSgpID09IHRyVGFnKSB7CiAgICAgICAgIHBhcnNlRXJyb3IodG9rZW4pOwogICAg
ICAgICByZXR1cm47CiAgICAgfQogICAgIHByb2Nlc3NFbmRUYWdGb3JJblRhYmxlKHRva2VuKTsK
IH0KIAotdm9pZCBIVE1MVHJlZUJ1aWxkZXI6OnByb2Nlc3NFbmRUYWdGb3JJblJvdyhBdG9taWNI
VE1MVG9rZW4mIHRva2VuKQordm9pZCBIVE1MVHJlZUJ1aWxkZXI6OnByb2Nlc3NFbmRUYWdGb3JJ
blJvdyhBdG9taWNIVE1MVG9rZW4qIHRva2VuKQogewotICAgIEFTU0VSVCh0b2tlbi50eXBlKCkg
PT0gSFRNTFRva2VuVHlwZXM6OkVuZFRhZyk7Ci0gICAgaWYgKHRva2VuLm5hbWUoKSA9PSB0clRh
ZykgeworICAgIEFTU0VSVCh0b2tlbi0+dHlwZSgpID09IEhUTUxUb2tlblR5cGVzOjpFbmRUYWcp
OworICAgIGlmICh0b2tlbi0+bmFtZSgpID09IHRyVGFnKSB7CiAgICAgICAgIHByb2Nlc3NUckVu
ZFRhZ0ZvckluUm93KCk7CiAgICAgICAgIHJldHVybjsKICAgICB9Ci0gICAgaWYgKHRva2VuLm5h
bWUoKSA9PSB0YWJsZVRhZykgeworICAgIGlmICh0b2tlbi0+bmFtZSgpID09IHRhYmxlVGFnKSB7
CiAgICAgICAgIGlmICghcHJvY2Vzc1RyRW5kVGFnRm9ySW5Sb3coKSkgewogICAgICAgICAgICAg
QVNTRVJUKGlzUGFyc2luZ0ZyYWdtZW50KCkpOwogICAgICAgICAgICAgcmV0dXJuOwpAQCAtMTcy
Miw4ICsxNzIyLDggQEAgdm9pZCBIVE1MVHJlZUJ1aWxkZXI6OnByb2Nlc3NFbmRUYWdGb3JJblJv
dyhBdG9taWNIVE1MVG9rZW4mIHRva2VuKQogICAgICAgICBwcm9jZXNzRW5kVGFnKHRva2VuKTsK
ICAgICAgICAgcmV0dXJuOwogICAgIH0KLSAgICBpZiAoaXNUYWJsZUJvZHlDb250ZXh0VGFnKHRv
a2VuLm5hbWUoKSkpIHsKLSAgICAgICAgaWYgKCFtX3RyZWUub3BlbkVsZW1lbnRzKCktPmluVGFi
bGVTY29wZSh0b2tlbi5uYW1lKCkpKSB7CisgICAgaWYgKGlzVGFibGVCb2R5Q29udGV4dFRhZyh0
b2tlbi0+bmFtZSgpKSkgeworICAgICAgICBpZiAoIW1fdHJlZS5vcGVuRWxlbWVudHMoKS0+aW5U
YWJsZVNjb3BlKHRva2VuLT5uYW1lKCkpKSB7CiAgICAgICAgICAgICBwYXJzZUVycm9yKHRva2Vu
KTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQpAQCAtMTczMiw0MyArMTczMiw0MyBA
QCB2b2lkIEhUTUxUcmVlQnVpbGRlcjo6cHJvY2Vzc0VuZFRhZ0ZvckluUm93KEF0b21pY0hUTUxU
b2tlbiYgdG9rZW4pCiAgICAgICAgIHByb2Nlc3NFbmRUYWcodG9rZW4pOwogICAgICAgICByZXR1
cm47CiAgICAgfQotICAgIGlmICh0b2tlbi5uYW1lKCkgPT0gYm9keVRhZwotICAgICAgICB8fCBp
c0NhcHRpb25Db2xPckNvbGdyb3VwVGFnKHRva2VuLm5hbWUoKSkKLSAgICAgICAgfHwgdG9rZW4u
bmFtZSgpID09IGh0bWxUYWcKLSAgICAgICAgfHwgaXNUYWJsZUNlbGxDb250ZXh0VGFnKHRva2Vu
Lm5hbWUoKSkpIHsKKyAgICBpZiAodG9rZW4tPm5hbWUoKSA9PSBib2R5VGFnCisgICAgICAgIHx8
IGlzQ2FwdGlvbkNvbE9yQ29sZ3JvdXBUYWcodG9rZW4tPm5hbWUoKSkKKyAgICAgICAgfHwgdG9r
ZW4tPm5hbWUoKSA9PSBodG1sVGFnCisgICAgICAgIHx8IGlzVGFibGVDZWxsQ29udGV4dFRhZyh0
b2tlbi0+bmFtZSgpKSkgewogICAgICAgICBwYXJzZUVycm9yKHRva2VuKTsKICAgICAgICAgcmV0
dXJuOwogICAgIH0KICAgICBwcm9jZXNzRW5kVGFnRm9ySW5UYWJsZSh0b2tlbik7CiB9CiAKLXZv
aWQgSFRNTFRyZWVCdWlsZGVyOjpwcm9jZXNzRW5kVGFnRm9ySW5DZWxsKEF0b21pY0hUTUxUb2tl
biYgdG9rZW4pCit2b2lkIEhUTUxUcmVlQnVpbGRlcjo6cHJvY2Vzc0VuZFRhZ0ZvckluQ2VsbChB
dG9taWNIVE1MVG9rZW4qIHRva2VuKQogewotICAgIEFTU0VSVCh0b2tlbi50eXBlKCkgPT0gSFRN
TFRva2VuVHlwZXM6OkVuZFRhZyk7Ci0gICAgaWYgKGlzVGFibGVDZWxsQ29udGV4dFRhZyh0b2tl
bi5uYW1lKCkpKSB7Ci0gICAgICAgIGlmICghbV90cmVlLm9wZW5FbGVtZW50cygpLT5pblRhYmxl
U2NvcGUodG9rZW4ubmFtZSgpKSkgeworICAgIEFTU0VSVCh0b2tlbi0+dHlwZSgpID09IEhUTUxU
b2tlblR5cGVzOjpFbmRUYWcpOworICAgIGlmIChpc1RhYmxlQ2VsbENvbnRleHRUYWcodG9rZW4t
Pm5hbWUoKSkpIHsKKyAgICAgICAgaWYgKCFtX3RyZWUub3BlbkVsZW1lbnRzKCktPmluVGFibGVT
Y29wZSh0b2tlbi0+bmFtZSgpKSkgewogICAgICAgICAgICAgcGFyc2VFcnJvcih0b2tlbik7CiAg
ICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KICAgICAgICAgbV90cmVlLmdlbmVyYXRlSW1w
bGllZEVuZFRhZ3MoKTsKLSAgICAgICAgaWYgKCFtX3RyZWUuY3VycmVudE5vZGUoKS0+aGFzTG9j
YWxOYW1lKHRva2VuLm5hbWUoKSkpCisgICAgICAgIGlmICghbV90cmVlLmN1cnJlbnROb2RlKCkt
Pmhhc0xvY2FsTmFtZSh0b2tlbi0+bmFtZSgpKSkKICAgICAgICAgICAgIHBhcnNlRXJyb3IodG9r
ZW4pOwotICAgICAgICBtX3RyZWUub3BlbkVsZW1lbnRzKCktPnBvcFVudGlsUG9wcGVkKHRva2Vu
Lm5hbWUoKSk7CisgICAgICAgIG1fdHJlZS5vcGVuRWxlbWVudHMoKS0+cG9wVW50aWxQb3BwZWQo
dG9rZW4tPm5hbWUoKSk7CiAgICAgICAgIG1fdHJlZS5hY3RpdmVGb3JtYXR0aW5nRWxlbWVudHMo
KS0+Y2xlYXJUb0xhc3RNYXJrZXIoKTsKICAgICAgICAgc2V0SW5zZXJ0aW9uTW9kZShJblJvd01v
ZGUpOwogICAgICAgICByZXR1cm47CiAgICAgfQotICAgIGlmICh0b2tlbi5uYW1lKCkgPT0gYm9k
eVRhZwotICAgICAgICB8fCBpc0NhcHRpb25Db2xPckNvbGdyb3VwVGFnKHRva2VuLm5hbWUoKSkK
LSAgICAgICAgfHwgdG9rZW4ubmFtZSgpID09IGh0bWxUYWcpIHsKKyAgICBpZiAodG9rZW4tPm5h
bWUoKSA9PSBib2R5VGFnCisgICAgICAgIHx8IGlzQ2FwdGlvbkNvbE9yQ29sZ3JvdXBUYWcodG9r
ZW4tPm5hbWUoKSkKKyAgICAgICAgfHwgdG9rZW4tPm5hbWUoKSA9PSBodG1sVGFnKSB7CiAgICAg
ICAgIHBhcnNlRXJyb3IodG9rZW4pOwogICAgICAgICByZXR1cm47CiAgICAgfQotICAgIGlmICh0
b2tlbi5uYW1lKCkgPT0gdGFibGVUYWcKLSAgICAgICAgfHwgdG9rZW4ubmFtZSgpID09IHRyVGFn
Ci0gICAgICAgIHx8IGlzVGFibGVCb2R5Q29udGV4dFRhZyh0b2tlbi5uYW1lKCkpKSB7Ci0gICAg
ICAgIGlmICghbV90cmVlLm9wZW5FbGVtZW50cygpLT5pblRhYmxlU2NvcGUodG9rZW4ubmFtZSgp
KSkgewotICAgICAgICAgICAgQVNTRVJUKGlzVGFibGVCb2R5Q29udGV4dFRhZyh0b2tlbi5uYW1l
KCkpIHx8IGlzUGFyc2luZ0ZyYWdtZW50KCkpOworICAgIGlmICh0b2tlbi0+bmFtZSgpID09IHRh
YmxlVGFnCisgICAgICAgIHx8IHRva2VuLT5uYW1lKCkgPT0gdHJUYWcKKyAgICAgICAgfHwgaXNU
YWJsZUJvZHlDb250ZXh0VGFnKHRva2VuLT5uYW1lKCkpKSB7CisgICAgICAgIGlmICghbV90cmVl
Lm9wZW5FbGVtZW50cygpLT5pblRhYmxlU2NvcGUodG9rZW4tPm5hbWUoKSkpIHsKKyAgICAgICAg
ICAgIEFTU0VSVChpc1RhYmxlQm9keUNvbnRleHRUYWcodG9rZW4tPm5hbWUoKSkgfHwgaXNQYXJz
aW5nRnJhZ21lbnQoKSk7CiAgICAgICAgICAgICBwYXJzZUVycm9yKHRva2VuKTsKICAgICAgICAg
ICAgIHJldHVybjsKICAgICAgICAgfQpAQCAtMTc3OSw1NCArMTc3OSw1NCBAQCB2b2lkIEhUTUxU
cmVlQnVpbGRlcjo6cHJvY2Vzc0VuZFRhZ0ZvckluQ2VsbChBdG9taWNIVE1MVG9rZW4mIHRva2Vu
KQogICAgIHByb2Nlc3NFbmRUYWdGb3JJbkJvZHkodG9rZW4pOwogfQogCi12b2lkIEhUTUxUcmVl
QnVpbGRlcjo6cHJvY2Vzc0VuZFRhZ0ZvckluQm9keShBdG9taWNIVE1MVG9rZW4mIHRva2VuKQor
dm9pZCBIVE1MVHJlZUJ1aWxkZXI6OnByb2Nlc3NFbmRUYWdGb3JJbkJvZHkoQXRvbWljSFRNTFRv
a2VuKiB0b2tlbikKIHsKLSAgICBBU1NFUlQodG9rZW4udHlwZSgpID09IEhUTUxUb2tlblR5cGVz
OjpFbmRUYWcpOwotICAgIGlmICh0b2tlbi5uYW1lKCkgPT0gYm9keVRhZykgeworICAgIEFTU0VS
VCh0b2tlbi0+dHlwZSgpID09IEhUTUxUb2tlblR5cGVzOjpFbmRUYWcpOworICAgIGlmICh0b2tl
bi0+bmFtZSgpID09IGJvZHlUYWcpIHsKICAgICAgICAgcHJvY2Vzc0JvZHlFbmRUYWdGb3JJbkJv
ZHkodG9rZW4pOwogICAgICAgICByZXR1cm47CiAgICAgfQotICAgIGlmICh0b2tlbi5uYW1lKCkg
PT0gaHRtbFRhZykgewotICAgICAgICBBdG9taWNIVE1MVG9rZW4gZW5kQm9keShIVE1MVG9rZW5U
eXBlczo6RW5kVGFnLCBib2R5VGFnLmxvY2FsTmFtZSgpKTsKLSAgICAgICAgaWYgKHByb2Nlc3NC
b2R5RW5kVGFnRm9ySW5Cb2R5KGVuZEJvZHkpKQorICAgIGlmICh0b2tlbi0+bmFtZSgpID09IGh0
bWxUYWcpIHsKKyAgICAgICAgUmVmUHRyPEF0b21pY0hUTUxUb2tlbj4gZW5kQm9keSA9IEF0b21p
Y0hUTUxUb2tlbjo6Y3JlYXRlKEhUTUxUb2tlblR5cGVzOjpFbmRUYWcsIGJvZHlUYWcubG9jYWxO
YW1lKCkpOworICAgICAgICBpZiAocHJvY2Vzc0JvZHlFbmRUYWdGb3JJbkJvZHkoZW5kQm9keS5n
ZXQoKSkpCiAgICAgICAgICAgICBwcm9jZXNzRW5kVGFnKHRva2VuKTsKICAgICAgICAgcmV0dXJu
OwogICAgIH0KLSAgICBpZiAodG9rZW4ubmFtZSgpID09IGFkZHJlc3NUYWcKLSAgICAgICAgfHwg
dG9rZW4ubmFtZSgpID09IGFydGljbGVUYWcKLSAgICAgICAgfHwgdG9rZW4ubmFtZSgpID09IGFz
aWRlVGFnCi0gICAgICAgIHx8IHRva2VuLm5hbWUoKSA9PSBibG9ja3F1b3RlVGFnCi0gICAgICAg
IHx8IHRva2VuLm5hbWUoKSA9PSBidXR0b25UYWcKLSAgICAgICAgfHwgdG9rZW4ubmFtZSgpID09
IGNlbnRlclRhZwotICAgICAgICB8fCB0b2tlbi5uYW1lKCkgPT0gZGV0YWlsc1RhZwotICAgICAg
ICB8fCB0b2tlbi5uYW1lKCkgPT0gZGlyVGFnCi0gICAgICAgIHx8IHRva2VuLm5hbWUoKSA9PSBk
aXZUYWcKLSAgICAgICAgfHwgdG9rZW4ubmFtZSgpID09IGRsVGFnCi0gICAgICAgIHx8IHRva2Vu
Lm5hbWUoKSA9PSBmaWVsZHNldFRhZwotICAgICAgICB8fCB0b2tlbi5uYW1lKCkgPT0gZmlnY2Fw
dGlvblRhZwotICAgICAgICB8fCB0b2tlbi5uYW1lKCkgPT0gZmlndXJlVGFnCi0gICAgICAgIHx8
IHRva2VuLm5hbWUoKSA9PSBmb290ZXJUYWcKLSAgICAgICAgfHwgdG9rZW4ubmFtZSgpID09IGhl
YWRlclRhZwotICAgICAgICB8fCB0b2tlbi5uYW1lKCkgPT0gaGdyb3VwVGFnCi0gICAgICAgIHx8
IHRva2VuLm5hbWUoKSA9PSBsaXN0aW5nVGFnCi0gICAgICAgIHx8IHRva2VuLm5hbWUoKSA9PSBt
ZW51VGFnCi0gICAgICAgIHx8IHRva2VuLm5hbWUoKSA9PSBuYXZUYWcKLSAgICAgICAgfHwgdG9r
ZW4ubmFtZSgpID09IG9sVGFnCi0gICAgICAgIHx8IHRva2VuLm5hbWUoKSA9PSBwcmVUYWcKLSAg
ICAgICAgfHwgdG9rZW4ubmFtZSgpID09IHNlY3Rpb25UYWcKLSAgICAgICAgfHwgdG9rZW4ubmFt
ZSgpID09IHN1bW1hcnlUYWcKLSAgICAgICAgfHwgdG9rZW4ubmFtZSgpID09IHVsVGFnKSB7Ci0g
ICAgICAgIGlmICghbV90cmVlLm9wZW5FbGVtZW50cygpLT5pblNjb3BlKHRva2VuLm5hbWUoKSkp
IHsKKyAgICBpZiAodG9rZW4tPm5hbWUoKSA9PSBhZGRyZXNzVGFnCisgICAgICAgIHx8IHRva2Vu
LT5uYW1lKCkgPT0gYXJ0aWNsZVRhZworICAgICAgICB8fCB0b2tlbi0+bmFtZSgpID09IGFzaWRl
VGFnCisgICAgICAgIHx8IHRva2VuLT5uYW1lKCkgPT0gYmxvY2txdW90ZVRhZworICAgICAgICB8
fCB0b2tlbi0+bmFtZSgpID09IGJ1dHRvblRhZworICAgICAgICB8fCB0b2tlbi0+bmFtZSgpID09
IGNlbnRlclRhZworICAgICAgICB8fCB0b2tlbi0+bmFtZSgpID09IGRldGFpbHNUYWcKKyAgICAg
ICAgfHwgdG9rZW4tPm5hbWUoKSA9PSBkaXJUYWcKKyAgICAgICAgfHwgdG9rZW4tPm5hbWUoKSA9
PSBkaXZUYWcKKyAgICAgICAgfHwgdG9rZW4tPm5hbWUoKSA9PSBkbFRhZworICAgICAgICB8fCB0
b2tlbi0+bmFtZSgpID09IGZpZWxkc2V0VGFnCisgICAgICAgIHx8IHRva2VuLT5uYW1lKCkgPT0g
ZmlnY2FwdGlvblRhZworICAgICAgICB8fCB0b2tlbi0+bmFtZSgpID09IGZpZ3VyZVRhZworICAg
ICAgICB8fCB0b2tlbi0+bmFtZSgpID09IGZvb3RlclRhZworICAgICAgICB8fCB0b2tlbi0+bmFt
ZSgpID09IGhlYWRlclRhZworICAgICAgICB8fCB0b2tlbi0+bmFtZSgpID09IGhncm91cFRhZwor
ICAgICAgICB8fCB0b2tlbi0+bmFtZSgpID09IGxpc3RpbmdUYWcKKyAgICAgICAgfHwgdG9rZW4t
Pm5hbWUoKSA9PSBtZW51VGFnCisgICAgICAgIHx8IHRva2VuLT5uYW1lKCkgPT0gbmF2VGFnCisg
ICAgICAgIHx8IHRva2VuLT5uYW1lKCkgPT0gb2xUYWcKKyAgICAgICAgfHwgdG9rZW4tPm5hbWUo
KSA9PSBwcmVUYWcKKyAgICAgICAgfHwgdG9rZW4tPm5hbWUoKSA9PSBzZWN0aW9uVGFnCisgICAg
ICAgIHx8IHRva2VuLT5uYW1lKCkgPT0gc3VtbWFyeVRhZworICAgICAgICB8fCB0b2tlbi0+bmFt
ZSgpID09IHVsVGFnKSB7CisgICAgICAgIGlmICghbV90cmVlLm9wZW5FbGVtZW50cygpLT5pblNj
b3BlKHRva2VuLT5uYW1lKCkpKSB7CiAgICAgICAgICAgICBwYXJzZUVycm9yKHRva2VuKTsKICAg
ICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQogICAgICAgICBtX3RyZWUuZ2VuZXJhdGVJbXBs
aWVkRW5kVGFncygpOwotICAgICAgICBpZiAoIW1fdHJlZS5jdXJyZW50Tm9kZSgpLT5oYXNMb2Nh
bE5hbWUodG9rZW4ubmFtZSgpKSkKKyAgICAgICAgaWYgKCFtX3RyZWUuY3VycmVudE5vZGUoKS0+
aGFzTG9jYWxOYW1lKHRva2VuLT5uYW1lKCkpKQogICAgICAgICAgICAgcGFyc2VFcnJvcih0b2tl
bik7Ci0gICAgICAgIG1fdHJlZS5vcGVuRWxlbWVudHMoKS0+cG9wVW50aWxQb3BwZWQodG9rZW4u
bmFtZSgpKTsKKyAgICAgICAgbV90cmVlLm9wZW5FbGVtZW50cygpLT5wb3BVbnRpbFBvcHBlZCh0
b2tlbi0+bmFtZSgpKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KLSAgICBpZiAodG9rZW4ubmFt
ZSgpID09IGZvcm1UYWcpIHsKKyAgICBpZiAodG9rZW4tPm5hbWUoKSA9PSBmb3JtVGFnKSB7CiAg
ICAgICAgIFJlZlB0cjxFbGVtZW50PiBub2RlID0gbV90cmVlLnRha2VGb3JtKCk7CiAgICAgICAg
IGlmICghbm9kZSB8fCAhbV90cmVlLm9wZW5FbGVtZW50cygpLT5pblNjb3BlKG5vZGUuZ2V0KCkp
KSB7CiAgICAgICAgICAgICBwYXJzZUVycm9yKHRva2VuKTsKQEAgLTE4MzcsNzMgKzE4MzcsNzMg
QEAgdm9pZCBIVE1MVHJlZUJ1aWxkZXI6OnByb2Nlc3NFbmRUYWdGb3JJbkJvZHkoQXRvbWljSFRN
TFRva2VuJiB0b2tlbikKICAgICAgICAgICAgIHBhcnNlRXJyb3IodG9rZW4pOwogICAgICAgICBt
X3RyZWUub3BlbkVsZW1lbnRzKCktPnJlbW92ZShub2RlLmdldCgpKTsKICAgICB9Ci0gICAgaWYg
KHRva2VuLm5hbWUoKSA9PSBwVGFnKSB7Ci0gICAgICAgIGlmICghbV90cmVlLm9wZW5FbGVtZW50
cygpLT5pbkJ1dHRvblNjb3BlKHRva2VuLm5hbWUoKSkpIHsKKyAgICBpZiAodG9rZW4tPm5hbWUo
KSA9PSBwVGFnKSB7CisgICAgICAgIGlmICghbV90cmVlLm9wZW5FbGVtZW50cygpLT5pbkJ1dHRv
blNjb3BlKHRva2VuLT5uYW1lKCkpKSB7CiAgICAgICAgICAgICBwYXJzZUVycm9yKHRva2VuKTsK
ICAgICAgICAgICAgIHByb2Nlc3NGYWtlU3RhcnRUYWcocFRhZyk7Ci0gICAgICAgICAgICBBU1NF
UlQobV90cmVlLm9wZW5FbGVtZW50cygpLT5pblNjb3BlKHRva2VuLm5hbWUoKSkpOworICAgICAg
ICAgICAgQVNTRVJUKG1fdHJlZS5vcGVuRWxlbWVudHMoKS0+aW5TY29wZSh0b2tlbi0+bmFtZSgp
KSk7CiAgICAgICAgICAgICBwcm9jZXNzRW5kVGFnKHRva2VuKTsKICAgICAgICAgICAgIHJldHVy
bjsKICAgICAgICAgfQotICAgICAgICBtX3RyZWUuZ2VuZXJhdGVJbXBsaWVkRW5kVGFnc1dpdGhF
eGNsdXNpb24odG9rZW4ubmFtZSgpKTsKLSAgICAgICAgaWYgKCFtX3RyZWUuY3VycmVudE5vZGUo
KS0+aGFzTG9jYWxOYW1lKHRva2VuLm5hbWUoKSkpCisgICAgICAgIG1fdHJlZS5nZW5lcmF0ZUlt
cGxpZWRFbmRUYWdzV2l0aEV4Y2x1c2lvbih0b2tlbi0+bmFtZSgpKTsKKyAgICAgICAgaWYgKCFt
X3RyZWUuY3VycmVudE5vZGUoKS0+aGFzTG9jYWxOYW1lKHRva2VuLT5uYW1lKCkpKQogICAgICAg
ICAgICAgcGFyc2VFcnJvcih0b2tlbik7Ci0gICAgICAgIG1fdHJlZS5vcGVuRWxlbWVudHMoKS0+
cG9wVW50aWxQb3BwZWQodG9rZW4ubmFtZSgpKTsKKyAgICAgICAgbV90cmVlLm9wZW5FbGVtZW50
cygpLT5wb3BVbnRpbFBvcHBlZCh0b2tlbi0+bmFtZSgpKTsKICAgICAgICAgcmV0dXJuOwogICAg
IH0KLSAgICBpZiAodG9rZW4ubmFtZSgpID09IGxpVGFnKSB7Ci0gICAgICAgIGlmICghbV90cmVl
Lm9wZW5FbGVtZW50cygpLT5pbkxpc3RJdGVtU2NvcGUodG9rZW4ubmFtZSgpKSkgeworICAgIGlm
ICh0b2tlbi0+bmFtZSgpID09IGxpVGFnKSB7CisgICAgICAgIGlmICghbV90cmVlLm9wZW5FbGVt
ZW50cygpLT5pbkxpc3RJdGVtU2NvcGUodG9rZW4tPm5hbWUoKSkpIHsKICAgICAgICAgICAgIHBh
cnNlRXJyb3IodG9rZW4pOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9Ci0gICAgICAg
IG1fdHJlZS5nZW5lcmF0ZUltcGxpZWRFbmRUYWdzV2l0aEV4Y2x1c2lvbih0b2tlbi5uYW1lKCkp
OwotICAgICAgICBpZiAoIW1fdHJlZS5jdXJyZW50Tm9kZSgpLT5oYXNMb2NhbE5hbWUodG9rZW4u
bmFtZSgpKSkKKyAgICAgICAgbV90cmVlLmdlbmVyYXRlSW1wbGllZEVuZFRhZ3NXaXRoRXhjbHVz
aW9uKHRva2VuLT5uYW1lKCkpOworICAgICAgICBpZiAoIW1fdHJlZS5jdXJyZW50Tm9kZSgpLT5o
YXNMb2NhbE5hbWUodG9rZW4tPm5hbWUoKSkpCiAgICAgICAgICAgICBwYXJzZUVycm9yKHRva2Vu
KTsKLSAgICAgICAgbV90cmVlLm9wZW5FbGVtZW50cygpLT5wb3BVbnRpbFBvcHBlZCh0b2tlbi5u
YW1lKCkpOworICAgICAgICBtX3RyZWUub3BlbkVsZW1lbnRzKCktPnBvcFVudGlsUG9wcGVkKHRv
a2VuLT5uYW1lKCkpOwogICAgICAgICByZXR1cm47CiAgICAgfQotICAgIGlmICh0b2tlbi5uYW1l
KCkgPT0gZGRUYWcKLSAgICAgICAgfHwgdG9rZW4ubmFtZSgpID09IGR0VGFnKSB7Ci0gICAgICAg
IGlmICghbV90cmVlLm9wZW5FbGVtZW50cygpLT5pblNjb3BlKHRva2VuLm5hbWUoKSkpIHsKKyAg
ICBpZiAodG9rZW4tPm5hbWUoKSA9PSBkZFRhZworICAgICAgICB8fCB0b2tlbi0+bmFtZSgpID09
IGR0VGFnKSB7CisgICAgICAgIGlmICghbV90cmVlLm9wZW5FbGVtZW50cygpLT5pblNjb3BlKHRv
a2VuLT5uYW1lKCkpKSB7CiAgICAgICAgICAgICBwYXJzZUVycm9yKHRva2VuKTsKICAgICAgICAg
ICAgIHJldHVybjsKICAgICAgICAgfQotICAgICAgICBtX3RyZWUuZ2VuZXJhdGVJbXBsaWVkRW5k
VGFnc1dpdGhFeGNsdXNpb24odG9rZW4ubmFtZSgpKTsKLSAgICAgICAgaWYgKCFtX3RyZWUuY3Vy
cmVudE5vZGUoKS0+aGFzTG9jYWxOYW1lKHRva2VuLm5hbWUoKSkpCisgICAgICAgIG1fdHJlZS5n
ZW5lcmF0ZUltcGxpZWRFbmRUYWdzV2l0aEV4Y2x1c2lvbih0b2tlbi0+bmFtZSgpKTsKKyAgICAg
ICAgaWYgKCFtX3RyZWUuY3VycmVudE5vZGUoKS0+aGFzTG9jYWxOYW1lKHRva2VuLT5uYW1lKCkp
KQogICAgICAgICAgICAgcGFyc2VFcnJvcih0b2tlbik7Ci0gICAgICAgIG1fdHJlZS5vcGVuRWxl
bWVudHMoKS0+cG9wVW50aWxQb3BwZWQodG9rZW4ubmFtZSgpKTsKKyAgICAgICAgbV90cmVlLm9w
ZW5FbGVtZW50cygpLT5wb3BVbnRpbFBvcHBlZCh0b2tlbi0+bmFtZSgpKTsKICAgICAgICAgcmV0
dXJuOwogICAgIH0KLSAgICBpZiAoaXNOdW1iZXJlZEhlYWRlclRhZyh0b2tlbi5uYW1lKCkpKSB7
CisgICAgaWYgKGlzTnVtYmVyZWRIZWFkZXJUYWcodG9rZW4tPm5hbWUoKSkpIHsKICAgICAgICAg
aWYgKCFtX3RyZWUub3BlbkVsZW1lbnRzKCktPmhhc051bWJlcmVkSGVhZGVyRWxlbWVudEluU2Nv
cGUoKSkgewogICAgICAgICAgICAgcGFyc2VFcnJvcih0b2tlbik7CiAgICAgICAgICAgICByZXR1
cm47CiAgICAgICAgIH0KICAgICAgICAgbV90cmVlLmdlbmVyYXRlSW1wbGllZEVuZFRhZ3MoKTsK
LSAgICAgICAgaWYgKCFtX3RyZWUuY3VycmVudE5vZGUoKS0+aGFzTG9jYWxOYW1lKHRva2VuLm5h
bWUoKSkpCisgICAgICAgIGlmICghbV90cmVlLmN1cnJlbnROb2RlKCktPmhhc0xvY2FsTmFtZSh0
b2tlbi0+bmFtZSgpKSkKICAgICAgICAgICAgIHBhcnNlRXJyb3IodG9rZW4pOwogICAgICAgICBt
X3RyZWUub3BlbkVsZW1lbnRzKCktPnBvcFVudGlsTnVtYmVyZWRIZWFkZXJFbGVtZW50UG9wcGVk
KCk7CiAgICAgICAgIHJldHVybjsKICAgICB9Ci0gICAgaWYgKGlzRm9ybWF0dGluZ1RhZyh0b2tl
bi5uYW1lKCkpKSB7CisgICAgaWYgKGlzRm9ybWF0dGluZ1RhZyh0b2tlbi0+bmFtZSgpKSkgewog
ICAgICAgICBjYWxsVGhlQWRvcHRpb25BZ2VuY3kodG9rZW4pOwogICAgICAgICByZXR1cm47CiAg
ICAgfQotICAgIGlmICh0b2tlbi5uYW1lKCkgPT0gYXBwbGV0VGFnCi0gICAgICAgIHx8IHRva2Vu
Lm5hbWUoKSA9PSBtYXJxdWVlVGFnCi0gICAgICAgIHx8IHRva2VuLm5hbWUoKSA9PSBvYmplY3RU
YWcpIHsKLSAgICAgICAgaWYgKCFtX3RyZWUub3BlbkVsZW1lbnRzKCktPmluU2NvcGUodG9rZW4u
bmFtZSgpKSkgeworICAgIGlmICh0b2tlbi0+bmFtZSgpID09IGFwcGxldFRhZworICAgICAgICB8
fCB0b2tlbi0+bmFtZSgpID09IG1hcnF1ZWVUYWcKKyAgICAgICAgfHwgdG9rZW4tPm5hbWUoKSA9
PSBvYmplY3RUYWcpIHsKKyAgICAgICAgaWYgKCFtX3RyZWUub3BlbkVsZW1lbnRzKCktPmluU2Nv
cGUodG9rZW4tPm5hbWUoKSkpIHsKICAgICAgICAgICAgIHBhcnNlRXJyb3IodG9rZW4pOwogICAg
ICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAgICAgICAgIG1fdHJlZS5nZW5lcmF0ZUltcGxp
ZWRFbmRUYWdzKCk7Ci0gICAgICAgIGlmICghbV90cmVlLmN1cnJlbnROb2RlKCktPmhhc0xvY2Fs
TmFtZSh0b2tlbi5uYW1lKCkpKQorICAgICAgICBpZiAoIW1fdHJlZS5jdXJyZW50Tm9kZSgpLT5o
YXNMb2NhbE5hbWUodG9rZW4tPm5hbWUoKSkpCiAgICAgICAgICAgICBwYXJzZUVycm9yKHRva2Vu
KTsKLSAgICAgICAgbV90cmVlLm9wZW5FbGVtZW50cygpLT5wb3BVbnRpbFBvcHBlZCh0b2tlbi5u
YW1lKCkpOworICAgICAgICBtX3RyZWUub3BlbkVsZW1lbnRzKCktPnBvcFVudGlsUG9wcGVkKHRv
a2VuLT5uYW1lKCkpOwogICAgICAgICBtX3RyZWUuYWN0aXZlRm9ybWF0dGluZ0VsZW1lbnRzKCkt
PmNsZWFyVG9MYXN0TWFya2VyKCk7CiAgICAgICAgIHJldHVybjsKICAgICB9Ci0gICAgaWYgKHRv
a2VuLm5hbWUoKSA9PSBiclRhZykgeworICAgIGlmICh0b2tlbi0+bmFtZSgpID09IGJyVGFnKSB7
CiAgICAgICAgIHBhcnNlRXJyb3IodG9rZW4pOwogICAgICAgICBwcm9jZXNzRmFrZVN0YXJ0VGFn
KGJyVGFnKTsKICAgICAgICAgcmV0dXJuOwpAQCAtMTk1MiwxOSArMTk1MiwxOSBAQCBib29sIEhU
TUxUcmVlQnVpbGRlcjo6cHJvY2Vzc1RhYmxlRW5kVGFnRm9ySW5UYWJsZSgpCiAgICAgcmV0dXJu
IHRydWU7CiB9CiAKLXZvaWQgSFRNTFRyZWVCdWlsZGVyOjpwcm9jZXNzRW5kVGFnRm9ySW5UYWJs
ZShBdG9taWNIVE1MVG9rZW4mIHRva2VuKQordm9pZCBIVE1MVHJlZUJ1aWxkZXI6OnByb2Nlc3NF
bmRUYWdGb3JJblRhYmxlKEF0b21pY0hUTUxUb2tlbiogdG9rZW4pCiB7Ci0gICAgQVNTRVJUKHRv
a2VuLnR5cGUoKSA9PSBIVE1MVG9rZW5UeXBlczo6RW5kVGFnKTsKLSAgICBpZiAodG9rZW4ubmFt
ZSgpID09IHRhYmxlVGFnKSB7CisgICAgQVNTRVJUKHRva2VuLT50eXBlKCkgPT0gSFRNTFRva2Vu
VHlwZXM6OkVuZFRhZyk7CisgICAgaWYgKHRva2VuLT5uYW1lKCkgPT0gdGFibGVUYWcpIHsKICAg
ICAgICAgcHJvY2Vzc1RhYmxlRW5kVGFnRm9ySW5UYWJsZSgpOwogICAgICAgICByZXR1cm47CiAg
ICAgfQotICAgIGlmICh0b2tlbi5uYW1lKCkgPT0gYm9keVRhZwotICAgICAgICB8fCBpc0NhcHRp
b25Db2xPckNvbGdyb3VwVGFnKHRva2VuLm5hbWUoKSkKLSAgICAgICAgfHwgdG9rZW4ubmFtZSgp
ID09IGh0bWxUYWcKLSAgICAgICAgfHwgaXNUYWJsZUJvZHlDb250ZXh0VGFnKHRva2VuLm5hbWUo
KSkKLSAgICAgICAgfHwgaXNUYWJsZUNlbGxDb250ZXh0VGFnKHRva2VuLm5hbWUoKSkKLSAgICAg
ICAgfHwgdG9rZW4ubmFtZSgpID09IHRyVGFnKSB7CisgICAgaWYgKHRva2VuLT5uYW1lKCkgPT0g
Ym9keVRhZworICAgICAgICB8fCBpc0NhcHRpb25Db2xPckNvbGdyb3VwVGFnKHRva2VuLT5uYW1l
KCkpCisgICAgICAgIHx8IHRva2VuLT5uYW1lKCkgPT0gaHRtbFRhZworICAgICAgICB8fCBpc1Rh
YmxlQm9keUNvbnRleHRUYWcodG9rZW4tPm5hbWUoKSkKKyAgICAgICAgfHwgaXNUYWJsZUNlbGxD
b250ZXh0VGFnKHRva2VuLT5uYW1lKCkpCisgICAgICAgIHx8IHRva2VuLT5uYW1lKCkgPT0gdHJU
YWcpIHsKICAgICAgICAgcGFyc2VFcnJvcih0b2tlbik7CiAgICAgICAgIHJldHVybjsKICAgICB9
CkBAIC0xOTc0LDkgKzE5NzQsOSBAQCB2b2lkIEhUTUxUcmVlQnVpbGRlcjo6cHJvY2Vzc0VuZFRh
Z0ZvckluVGFibGUoQXRvbWljSFRNTFRva2VuJiB0b2tlbikKICAgICBwcm9jZXNzRW5kVGFnRm9y
SW5Cb2R5KHRva2VuKTsKIH0KIAotdm9pZCBIVE1MVHJlZUJ1aWxkZXI6OnByb2Nlc3NFbmRUYWco
QXRvbWljSFRNTFRva2VuJiB0b2tlbikKK3ZvaWQgSFRNTFRyZWVCdWlsZGVyOjpwcm9jZXNzRW5k
VGFnKEF0b21pY0hUTUxUb2tlbiogdG9rZW4pCiB7Ci0gICAgQVNTRVJUKHRva2VuLnR5cGUoKSA9
PSBIVE1MVG9rZW5UeXBlczo6RW5kVGFnKTsKKyAgICBBU1NFUlQodG9rZW4tPnR5cGUoKSA9PSBI
VE1MVG9rZW5UeXBlczo6RW5kVGFnKTsKICAgICBzd2l0Y2ggKGluc2VydGlvbk1vZGUoKSkgewog
ICAgIGNhc2UgSW5pdGlhbE1vZGU6CiAgICAgICAgIEFTU0VSVChpbnNlcnRpb25Nb2RlKCkgPT0g
SW5pdGlhbE1vZGUpOwpAQCAtMTk4NCw3ICsxOTg0LDcgQEAgdm9pZCBIVE1MVHJlZUJ1aWxkZXI6
OnByb2Nlc3NFbmRUYWcoQXRvbWljSFRNTFRva2VuJiB0b2tlbikKICAgICAgICAgLy8gRmFsbCB0
aHJvdWdoLgogICAgIGNhc2UgQmVmb3JlSFRNTE1vZGU6CiAgICAgICAgIEFTU0VSVChpbnNlcnRp
b25Nb2RlKCkgPT0gQmVmb3JlSFRNTE1vZGUpOwotICAgICAgICBpZiAodG9rZW4ubmFtZSgpICE9
IGhlYWRUYWcgJiYgdG9rZW4ubmFtZSgpICE9IGJvZHlUYWcgJiYgdG9rZW4ubmFtZSgpICE9IGh0
bWxUYWcgJiYgdG9rZW4ubmFtZSgpICE9IGJyVGFnKSB7CisgICAgICAgIGlmICh0b2tlbi0+bmFt
ZSgpICE9IGhlYWRUYWcgJiYgdG9rZW4tPm5hbWUoKSAhPSBib2R5VGFnICYmIHRva2VuLT5uYW1l
KCkgIT0gaHRtbFRhZyAmJiB0b2tlbi0+bmFtZSgpICE9IGJyVGFnKSB7CiAgICAgICAgICAgICBw
YXJzZUVycm9yKHRva2VuKTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQpAQCAtMTk5
Miw3ICsxOTkyLDcgQEAgdm9pZCBIVE1MVHJlZUJ1aWxkZXI6OnByb2Nlc3NFbmRUYWcoQXRvbWlj
SFRNTFRva2VuJiB0b2tlbikKICAgICAgICAgLy8gRmFsbCB0aHJvdWdoLgogICAgIGNhc2UgQmVm
b3JlSGVhZE1vZGU6CiAgICAgICAgIEFTU0VSVChpbnNlcnRpb25Nb2RlKCkgPT0gQmVmb3JlSGVh
ZE1vZGUpOwotICAgICAgICBpZiAodG9rZW4ubmFtZSgpICE9IGhlYWRUYWcgJiYgdG9rZW4ubmFt
ZSgpICE9IGJvZHlUYWcgJiYgdG9rZW4ubmFtZSgpICE9IGh0bWxUYWcgJiYgdG9rZW4ubmFtZSgp
ICE9IGJyVGFnKSB7CisgICAgICAgIGlmICh0b2tlbi0+bmFtZSgpICE9IGhlYWRUYWcgJiYgdG9r
ZW4tPm5hbWUoKSAhPSBib2R5VGFnICYmIHRva2VuLT5uYW1lKCkgIT0gaHRtbFRhZyAmJiB0b2tl
bi0+bmFtZSgpICE9IGJyVGFnKSB7CiAgICAgICAgICAgICBwYXJzZUVycm9yKHRva2VuKTsKICAg
ICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQpAQCAtMjAwMCwxMiArMjAwMCwxMiBAQCB2b2lk
IEhUTUxUcmVlQnVpbGRlcjo6cHJvY2Vzc0VuZFRhZyhBdG9taWNIVE1MVG9rZW4mIHRva2VuKQog
ICAgICAgICAvLyBGYWxsIHRocm91Z2guCiAgICAgY2FzZSBJbkhlYWRNb2RlOgogICAgICAgICBB
U1NFUlQoaW5zZXJ0aW9uTW9kZSgpID09IEluSGVhZE1vZGUpOwotICAgICAgICBpZiAodG9rZW4u
bmFtZSgpID09IGhlYWRUYWcpIHsKKyAgICAgICAgaWYgKHRva2VuLT5uYW1lKCkgPT0gaGVhZFRh
ZykgewogICAgICAgICAgICAgbV90cmVlLm9wZW5FbGVtZW50cygpLT5wb3BIVE1MSGVhZEVsZW1l
bnQoKTsKICAgICAgICAgICAgIHNldEluc2VydGlvbk1vZGUoQWZ0ZXJIZWFkTW9kZSk7CiAgICAg
ICAgICAgICByZXR1cm47CiAgICAgICAgIH0KLSAgICAgICAgaWYgKHRva2VuLm5hbWUoKSAhPSBi
b2R5VGFnICYmIHRva2VuLm5hbWUoKSAhPSBodG1sVGFnICYmIHRva2VuLm5hbWUoKSAhPSBiclRh
ZykgeworICAgICAgICBpZiAodG9rZW4tPm5hbWUoKSAhPSBib2R5VGFnICYmIHRva2VuLT5uYW1l
KCkgIT0gaHRtbFRhZyAmJiB0b2tlbi0+bmFtZSgpICE9IGJyVGFnKSB7CiAgICAgICAgICAgICBw
YXJzZUVycm9yKHRva2VuKTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQpAQCAtMjAx
Myw3ICsyMDEzLDcgQEAgdm9pZCBIVE1MVHJlZUJ1aWxkZXI6OnByb2Nlc3NFbmRUYWcoQXRvbWlj
SFRNTFRva2VuJiB0b2tlbikKICAgICAgICAgLy8gRmFsbCB0aHJvdWdoLgogICAgIGNhc2UgQWZ0
ZXJIZWFkTW9kZToKICAgICAgICAgQVNTRVJUKGluc2VydGlvbk1vZGUoKSA9PSBBZnRlckhlYWRN
b2RlKTsKLSAgICAgICAgaWYgKHRva2VuLm5hbWUoKSAhPSBib2R5VGFnICYmIHRva2VuLm5hbWUo
KSAhPSBodG1sVGFnICYmIHRva2VuLm5hbWUoKSAhPSBiclRhZykgeworICAgICAgICBpZiAodG9r
ZW4tPm5hbWUoKSAhPSBib2R5VGFnICYmIHRva2VuLT5uYW1lKCkgIT0gaHRtbFRhZyAmJiB0b2tl
bi0+bmFtZSgpICE9IGJyVGFnKSB7CiAgICAgICAgICAgICBwYXJzZUVycm9yKHRva2VuKTsKICAg
ICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQpAQCAtMjAyOSwxMSArMjAyOSwxMSBAQCB2b2lk
IEhUTUxUcmVlQnVpbGRlcjo6cHJvY2Vzc0VuZFRhZyhBdG9taWNIVE1MVG9rZW4mIHRva2VuKQog
ICAgICAgICBicmVhazsKICAgICBjYXNlIEluQ2FwdGlvbk1vZGU6CiAgICAgICAgIEFTU0VSVChp
bnNlcnRpb25Nb2RlKCkgPT0gSW5DYXB0aW9uTW9kZSk7Ci0gICAgICAgIGlmICh0b2tlbi5uYW1l
KCkgPT0gY2FwdGlvblRhZykgeworICAgICAgICBpZiAodG9rZW4tPm5hbWUoKSA9PSBjYXB0aW9u
VGFnKSB7CiAgICAgICAgICAgICBwcm9jZXNzQ2FwdGlvbkVuZFRhZ0ZvckluQ2FwdGlvbigpOwog
ICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9Ci0gICAgICAgIGlmICh0b2tlbi5uYW1lKCkg
PT0gdGFibGVUYWcpIHsKKyAgICAgICAgaWYgKHRva2VuLT5uYW1lKCkgPT0gdGFibGVUYWcpIHsK
ICAgICAgICAgICAgIHBhcnNlRXJyb3IodG9rZW4pOwogICAgICAgICAgICAgaWYgKCFwcm9jZXNz
Q2FwdGlvbkVuZFRhZ0ZvckluQ2FwdGlvbigpKSB7CiAgICAgICAgICAgICAgICAgQVNTRVJUKGlz
UGFyc2luZ0ZyYWdtZW50KCkpOwpAQCAtMjA0MiwxMyArMjA0MiwxMyBAQCB2b2lkIEhUTUxUcmVl
QnVpbGRlcjo6cHJvY2Vzc0VuZFRhZyhBdG9taWNIVE1MVG9rZW4mIHRva2VuKQogICAgICAgICAg
ICAgcHJvY2Vzc0VuZFRhZyh0b2tlbik7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0K
LSAgICAgICAgaWYgKHRva2VuLm5hbWUoKSA9PSBib2R5VGFnCi0gICAgICAgICAgICB8fCB0b2tl
bi5uYW1lKCkgPT0gY29sVGFnCi0gICAgICAgICAgICB8fCB0b2tlbi5uYW1lKCkgPT0gY29sZ3Jv
dXBUYWcKLSAgICAgICAgICAgIHx8IHRva2VuLm5hbWUoKSA9PSBodG1sVGFnCi0gICAgICAgICAg
ICB8fCBpc1RhYmxlQm9keUNvbnRleHRUYWcodG9rZW4ubmFtZSgpKQotICAgICAgICAgICAgfHwg
aXNUYWJsZUNlbGxDb250ZXh0VGFnKHRva2VuLm5hbWUoKSkKLSAgICAgICAgICAgIHx8IHRva2Vu
Lm5hbWUoKSA9PSB0clRhZykgeworICAgICAgICBpZiAodG9rZW4tPm5hbWUoKSA9PSBib2R5VGFn
CisgICAgICAgICAgICB8fCB0b2tlbi0+bmFtZSgpID09IGNvbFRhZworICAgICAgICAgICAgfHwg
dG9rZW4tPm5hbWUoKSA9PSBjb2xncm91cFRhZworICAgICAgICAgICAgfHwgdG9rZW4tPm5hbWUo
KSA9PSBodG1sVGFnCisgICAgICAgICAgICB8fCBpc1RhYmxlQm9keUNvbnRleHRUYWcodG9rZW4t
Pm5hbWUoKSkKKyAgICAgICAgICAgIHx8IGlzVGFibGVDZWxsQ29udGV4dFRhZyh0b2tlbi0+bmFt
ZSgpKQorICAgICAgICAgICAgfHwgdG9rZW4tPm5hbWUoKSA9PSB0clRhZykgewogICAgICAgICAg
ICAgcGFyc2VFcnJvcih0b2tlbik7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KQEAg
LTIwNTYsMTEgKzIwNTYsMTEgQEAgdm9pZCBIVE1MVHJlZUJ1aWxkZXI6OnByb2Nlc3NFbmRUYWco
QXRvbWljSFRNTFRva2VuJiB0b2tlbikKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBJbkNvbHVt
bkdyb3VwTW9kZToKICAgICAgICAgQVNTRVJUKGluc2VydGlvbk1vZGUoKSA9PSBJbkNvbHVtbkdy
b3VwTW9kZSk7Ci0gICAgICAgIGlmICh0b2tlbi5uYW1lKCkgPT0gY29sZ3JvdXBUYWcpIHsKKyAg
ICAgICAgaWYgKHRva2VuLT5uYW1lKCkgPT0gY29sZ3JvdXBUYWcpIHsKICAgICAgICAgICAgIHBy
b2Nlc3NDb2xncm91cEVuZFRhZ0ZvckluQ29sdW1uR3JvdXAoKTsKICAgICAgICAgICAgIHJldHVy
bjsKICAgICAgICAgfQotICAgICAgICBpZiAodG9rZW4ubmFtZSgpID09IGNvbFRhZykgeworICAg
ICAgICBpZiAodG9rZW4tPm5hbWUoKSA9PSBjb2xUYWcpIHsKICAgICAgICAgICAgIHBhcnNlRXJy
b3IodG9rZW4pOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CkBAIC0yMDg0LDcgKzIw
ODQsNyBAQCB2b2lkIEhUTUxUcmVlQnVpbGRlcjo6cHJvY2Vzc0VuZFRhZyhBdG9taWNIVE1MVG9r
ZW4mIHRva2VuKQogICAgICAgICBicmVhazsKICAgICBjYXNlIEFmdGVyQm9keU1vZGU6CiAgICAg
ICAgIEFTU0VSVChpbnNlcnRpb25Nb2RlKCkgPT0gQWZ0ZXJCb2R5TW9kZSk7Ci0gICAgICAgIGlm
ICh0b2tlbi5uYW1lKCkgPT0gaHRtbFRhZykgeworICAgICAgICBpZiAodG9rZW4tPm5hbWUoKSA9
PSBodG1sVGFnKSB7CiAgICAgICAgICAgICBpZiAoaXNQYXJzaW5nRnJhZ21lbnQoKSkgewogICAg
ICAgICAgICAgICAgIHBhcnNlRXJyb3IodG9rZW4pOwogICAgICAgICAgICAgICAgIHJldHVybjsK
QEAgLTIxMDEsMTQgKzIxMDEsMTQgQEAgdm9pZCBIVE1MVHJlZUJ1aWxkZXI6OnByb2Nlc3NFbmRU
YWcoQXRvbWljSFRNTFRva2VuJiB0b2tlbikKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBJbkhl
YWROb3NjcmlwdE1vZGU6CiAgICAgICAgIEFTU0VSVChpbnNlcnRpb25Nb2RlKCkgPT0gSW5IZWFk
Tm9zY3JpcHRNb2RlKTsKLSAgICAgICAgaWYgKHRva2VuLm5hbWUoKSA9PSBub3NjcmlwdFRhZykg
eworICAgICAgICBpZiAodG9rZW4tPm5hbWUoKSA9PSBub3NjcmlwdFRhZykgewogICAgICAgICAg
ICAgQVNTRVJUKG1fdHJlZS5jdXJyZW50RWxlbWVudCgpLT5oYXNUYWdOYW1lKG5vc2NyaXB0VGFn
KSk7CiAgICAgICAgICAgICBtX3RyZWUub3BlbkVsZW1lbnRzKCktPnBvcCgpOwogICAgICAgICAg
ICAgQVNTRVJUKG1fdHJlZS5jdXJyZW50RWxlbWVudCgpLT5oYXNUYWdOYW1lKGhlYWRUYWcpKTsK
ICAgICAgICAgICAgIHNldEluc2VydGlvbk1vZGUoSW5IZWFkTW9kZSk7CiAgICAgICAgICAgICBy
ZXR1cm47CiAgICAgICAgIH0KLSAgICAgICAgaWYgKHRva2VuLm5hbWUoKSAhPSBiclRhZykgewor
ICAgICAgICBpZiAodG9rZW4tPm5hbWUoKSAhPSBiclRhZykgewogICAgICAgICAgICAgcGFyc2VF
cnJvcih0b2tlbik7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KQEAgLTIxMTYsNyAr
MjExNiw3IEBAIHZvaWQgSFRNTFRyZWVCdWlsZGVyOjpwcm9jZXNzRW5kVGFnKEF0b21pY0hUTUxU
b2tlbiYgdG9rZW4pCiAgICAgICAgIHByb2Nlc3NUb2tlbih0b2tlbik7CiAgICAgICAgIGJyZWFr
OwogICAgIGNhc2UgVGV4dE1vZGU6Ci0gICAgICAgIGlmICh0b2tlbi5uYW1lKCkgPT0gc2NyaXB0
VGFnKSB7CisgICAgICAgIGlmICh0b2tlbi0+bmFtZSgpID09IHNjcmlwdFRhZykgewogICAgICAg
ICAgICAgLy8gUGF1c2Ugb3Vyc2VsdmVzIHNvIHRoYXQgcGFyc2luZyBzdG9wcyB1bnRpbCB0aGUg
c2NyaXB0IGNhbiBiZSBwcm9jZXNzZWQgYnkgdGhlIGNhbGxlci4KICAgICAgICAgICAgIEFTU0VS
VChtX3RyZWUuY3VycmVudEVsZW1lbnQoKS0+aGFzVGFnTmFtZShzY3JpcHRUYWcpKTsKICAgICAg
ICAgICAgIG1fc2NyaXB0VG9Qcm9jZXNzID0gbV90cmVlLmN1cnJlbnRFbGVtZW50KCk7CkBAIC0y
MTM4LDcgKzIxMzgsNyBAQCB2b2lkIEhUTUxUcmVlQnVpbGRlcjo6cHJvY2Vzc0VuZFRhZyhBdG9t
aWNIVE1MVG9rZW4mIHRva2VuKQogICAgICAgICBicmVhazsKICAgICBjYXNlIEluRnJhbWVzZXRN
b2RlOgogICAgICAgICBBU1NFUlQoaW5zZXJ0aW9uTW9kZSgpID09IEluRnJhbWVzZXRNb2RlKTsK
LSAgICAgICAgaWYgKHRva2VuLm5hbWUoKSA9PSBmcmFtZXNldFRhZykgeworICAgICAgICBpZiAo
dG9rZW4tPm5hbWUoKSA9PSBmcmFtZXNldFRhZykgewogICAgICAgICAgICAgaWYgKG1fdHJlZS5j
dXJyZW50Tm9kZSgpID09IG1fdHJlZS5vcGVuRWxlbWVudHMoKS0+cm9vdE5vZGUoKSkgewogICAg
ICAgICAgICAgICAgIHBhcnNlRXJyb3IodG9rZW4pOwogICAgICAgICAgICAgICAgIHJldHVybjsK
QEAgLTIxNTEsNyArMjE1MSw3IEBAIHZvaWQgSFRNTFRyZWVCdWlsZGVyOjpwcm9jZXNzRW5kVGFn
KEF0b21pY0hUTUxUb2tlbiYgdG9rZW4pCiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgQWZ0ZXJG
cmFtZXNldE1vZGU6CiAgICAgICAgIEFTU0VSVChpbnNlcnRpb25Nb2RlKCkgPT0gQWZ0ZXJGcmFt
ZXNldE1vZGUpOwotICAgICAgICBpZiAodG9rZW4ubmFtZSgpID09IGh0bWxUYWcpIHsKKyAgICAg
ICAgaWYgKHRva2VuLT5uYW1lKCkgPT0gaHRtbFRhZykgewogICAgICAgICAgICAgc2V0SW5zZXJ0
aW9uTW9kZShBZnRlckFmdGVyRnJhbWVzZXRNb2RlKTsKICAgICAgICAgICAgIHJldHVybjsKICAg
ICAgICAgfQpAQCAtMjE2MiwxNSArMjE2MiwxNSBAQCB2b2lkIEhUTUxUcmVlQnVpbGRlcjo6cHJv
Y2Vzc0VuZFRhZyhBdG9taWNIVE1MVG9rZW4mIHRva2VuKQogICAgICAgICBicmVhazsKICAgICBj
YXNlIEluU2VsZWN0SW5UYWJsZU1vZGU6CiAgICAgICAgIEFTU0VSVChpbnNlcnRpb25Nb2RlKCkg
PT0gSW5TZWxlY3RJblRhYmxlTW9kZSk7Ci0gICAgICAgIGlmICh0b2tlbi5uYW1lKCkgPT0gY2Fw
dGlvblRhZwotICAgICAgICAgICAgfHwgdG9rZW4ubmFtZSgpID09IHRhYmxlVGFnCi0gICAgICAg
ICAgICB8fCBpc1RhYmxlQm9keUNvbnRleHRUYWcodG9rZW4ubmFtZSgpKQotICAgICAgICAgICAg
fHwgdG9rZW4ubmFtZSgpID09IHRyVGFnCi0gICAgICAgICAgICB8fCBpc1RhYmxlQ2VsbENvbnRl
eHRUYWcodG9rZW4ubmFtZSgpKSkgeworICAgICAgICBpZiAodG9rZW4tPm5hbWUoKSA9PSBjYXB0
aW9uVGFnCisgICAgICAgICAgICB8fCB0b2tlbi0+bmFtZSgpID09IHRhYmxlVGFnCisgICAgICAg
ICAgICB8fCBpc1RhYmxlQm9keUNvbnRleHRUYWcodG9rZW4tPm5hbWUoKSkKKyAgICAgICAgICAg
IHx8IHRva2VuLT5uYW1lKCkgPT0gdHJUYWcKKyAgICAgICAgICAgIHx8IGlzVGFibGVDZWxsQ29u
dGV4dFRhZyh0b2tlbi0+bmFtZSgpKSkgewogICAgICAgICAgICAgcGFyc2VFcnJvcih0b2tlbik7
Ci0gICAgICAgICAgICBpZiAobV90cmVlLm9wZW5FbGVtZW50cygpLT5pblRhYmxlU2NvcGUodG9r
ZW4ubmFtZSgpKSkgewotICAgICAgICAgICAgICAgIEF0b21pY0hUTUxUb2tlbiBlbmRTZWxlY3Qo
SFRNTFRva2VuVHlwZXM6OkVuZFRhZywgc2VsZWN0VGFnLmxvY2FsTmFtZSgpKTsKLSAgICAgICAg
ICAgICAgICBwcm9jZXNzRW5kVGFnKGVuZFNlbGVjdCk7CisgICAgICAgICAgICBpZiAobV90cmVl
Lm9wZW5FbGVtZW50cygpLT5pblRhYmxlU2NvcGUodG9rZW4tPm5hbWUoKSkpIHsKKyAgICAgICAg
ICAgICAgICBSZWZQdHI8QXRvbWljSFRNTFRva2VuPiBlbmRTZWxlY3QgPSBBdG9taWNIVE1MVG9r
ZW46OmNyZWF0ZShIVE1MVG9rZW5UeXBlczo6RW5kVGFnLCBzZWxlY3RUYWcubG9jYWxOYW1lKCkp
OworICAgICAgICAgICAgICAgIHByb2Nlc3NFbmRUYWcoZW5kU2VsZWN0LmdldCgpKTsKICAgICAg
ICAgICAgICAgICBwcm9jZXNzRW5kVGFnKHRva2VuKTsKICAgICAgICAgICAgIH0KICAgICAgICAg
ICAgIHJldHVybjsKQEAgLTIxNzgsNyArMjE3OCw3IEBAIHZvaWQgSFRNTFRyZWVCdWlsZGVyOjpw
cm9jZXNzRW5kVGFnKEF0b21pY0hUTUxUb2tlbiYgdG9rZW4pCiAgICAgICAgIC8vIEZhbGwgdGhy
b3VnaC4KICAgICBjYXNlIEluU2VsZWN0TW9kZToKICAgICAgICAgQVNTRVJUKGluc2VydGlvbk1v
ZGUoKSA9PSBJblNlbGVjdE1vZGUgfHwgaW5zZXJ0aW9uTW9kZSgpID09IEluU2VsZWN0SW5UYWJs
ZU1vZGUpOwotICAgICAgICBpZiAodG9rZW4ubmFtZSgpID09IG9wdGdyb3VwVGFnKSB7CisgICAg
ICAgIGlmICh0b2tlbi0+bmFtZSgpID09IG9wdGdyb3VwVGFnKSB7CiAgICAgICAgICAgICBpZiAo
bV90cmVlLmN1cnJlbnROb2RlKCktPmhhc1RhZ05hbWUob3B0aW9uVGFnKSAmJiBtX3RyZWUub25l
QmVsb3dUb3AoKSAmJiBtX3RyZWUub25lQmVsb3dUb3AoKS0+aGFzVGFnTmFtZShvcHRncm91cFRh
ZykpCiAgICAgICAgICAgICAgICAgcHJvY2Vzc0Zha2VFbmRUYWcob3B0aW9uVGFnKTsKICAgICAg
ICAgICAgIGlmIChtX3RyZWUuY3VycmVudE5vZGUoKS0+aGFzVGFnTmFtZShvcHRncm91cFRhZykp
IHsKQEAgLTIxODgsNyArMjE4OCw3IEBAIHZvaWQgSFRNTFRyZWVCdWlsZGVyOjpwcm9jZXNzRW5k
VGFnKEF0b21pY0hUTUxUb2tlbiYgdG9rZW4pCiAgICAgICAgICAgICBwYXJzZUVycm9yKHRva2Vu
KTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQotICAgICAgICBpZiAodG9rZW4ubmFt
ZSgpID09IG9wdGlvblRhZykgeworICAgICAgICBpZiAodG9rZW4tPm5hbWUoKSA9PSBvcHRpb25U
YWcpIHsKICAgICAgICAgICAgIGlmIChtX3RyZWUuY3VycmVudE5vZGUoKS0+aGFzVGFnTmFtZShv
cHRpb25UYWcpKSB7CiAgICAgICAgICAgICAgICAgbV90cmVlLm9wZW5FbGVtZW50cygpLT5wb3Ao
KTsKICAgICAgICAgICAgICAgICByZXR1cm47CkBAIC0yMTk2LDggKzIxOTYsOCBAQCB2b2lkIEhU
TUxUcmVlQnVpbGRlcjo6cHJvY2Vzc0VuZFRhZyhBdG9taWNIVE1MVG9rZW4mIHRva2VuKQogICAg
ICAgICAgICAgcGFyc2VFcnJvcih0b2tlbik7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAg
IH0KLSAgICAgICAgaWYgKHRva2VuLm5hbWUoKSA9PSBzZWxlY3RUYWcpIHsKLSAgICAgICAgICAg
IGlmICghbV90cmVlLm9wZW5FbGVtZW50cygpLT5pblNlbGVjdFNjb3BlKHRva2VuLm5hbWUoKSkp
IHsKKyAgICAgICAgaWYgKHRva2VuLT5uYW1lKCkgPT0gc2VsZWN0VGFnKSB7CisgICAgICAgICAg
ICBpZiAoIW1fdHJlZS5vcGVuRWxlbWVudHMoKS0+aW5TZWxlY3RTY29wZSh0b2tlbi0+bmFtZSgp
KSkgewogICAgICAgICAgICAgICAgIEFTU0VSVChpc1BhcnNpbmdGcmFnbWVudCgpKTsKICAgICAg
ICAgICAgICAgICBwYXJzZUVycm9yKHRva2VuKTsKICAgICAgICAgICAgICAgICByZXR1cm47CkBA
IC0yMjE0LDkgKzIyMTQsOSBAQCB2b2lkIEhUTUxUcmVlQnVpbGRlcjo6cHJvY2Vzc0VuZFRhZyhB
dG9taWNIVE1MVG9rZW4mIHRva2VuKQogICAgIH0KIH0KIAotdm9pZCBIVE1MVHJlZUJ1aWxkZXI6
OnByb2Nlc3NDb21tZW50KEF0b21pY0hUTUxUb2tlbiYgdG9rZW4pCit2b2lkIEhUTUxUcmVlQnVp
bGRlcjo6cHJvY2Vzc0NvbW1lbnQoQXRvbWljSFRNTFRva2VuKiB0b2tlbikKIHsKLSAgICBBU1NF
UlQodG9rZW4udHlwZSgpID09IEhUTUxUb2tlblR5cGVzOjpDb21tZW50KTsKKyAgICBBU1NFUlQo
dG9rZW4tPnR5cGUoKSA9PSBIVE1MVG9rZW5UeXBlczo6Q29tbWVudCk7CiAgICAgaWYgKG1faW5z
ZXJ0aW9uTW9kZSA9PSBJbml0aWFsTW9kZQogICAgICAgICB8fCBtX2luc2VydGlvbk1vZGUgPT0g
QmVmb3JlSFRNTE1vZGUKICAgICAgICAgfHwgbV9pbnNlcnRpb25Nb2RlID09IEFmdGVyQWZ0ZXJC
b2R5TW9kZQpAQCAtMjIzNiw5ICsyMjM2LDkgQEAgdm9pZCBIVE1MVHJlZUJ1aWxkZXI6OnByb2Nl
c3NDb21tZW50KEF0b21pY0hUTUxUb2tlbiYgdG9rZW4pCiAgICAgbV90cmVlLmluc2VydENvbW1l
bnQodG9rZW4pOwogfQogCi12b2lkIEhUTUxUcmVlQnVpbGRlcjo6cHJvY2Vzc0NoYXJhY3RlcihB
dG9taWNIVE1MVG9rZW4mIHRva2VuKQordm9pZCBIVE1MVHJlZUJ1aWxkZXI6OnByb2Nlc3NDaGFy
YWN0ZXIoQXRvbWljSFRNTFRva2VuKiB0b2tlbikKIHsKLSAgICBBU1NFUlQodG9rZW4udHlwZSgp
ID09IEhUTUxUb2tlblR5cGVzOjpDaGFyYWN0ZXIpOworICAgIEFTU0VSVCh0b2tlbi0+dHlwZSgp
ID09IEhUTUxUb2tlblR5cGVzOjpDaGFyYWN0ZXIpOwogICAgIEV4dGVybmFsQ2hhcmFjdGVyVG9r
ZW5CdWZmZXIgYnVmZmVyKHRva2VuKTsKICAgICBwcm9jZXNzQ2hhcmFjdGVyQnVmZmVyKGJ1ZmZl
cik7CiB9CkBAIC0yNDE5LDkgKzI0MTksOSBAQCB2b2lkIEhUTUxUcmVlQnVpbGRlcjo6cHJvY2Vz
c0NoYXJhY3RlckJ1ZmZlckZvckluQm9keShFeHRlcm5hbENoYXJhY3RlclRva2VuQnVmZgogICAg
ICAgICBtX2ZyYW1lc2V0T2sgPSBmYWxzZTsKIH0KIAotdm9pZCBIVE1MVHJlZUJ1aWxkZXI6OnBy
b2Nlc3NFbmRPZkZpbGUoQXRvbWljSFRNTFRva2VuJiB0b2tlbikKK3ZvaWQgSFRNTFRyZWVCdWls
ZGVyOjpwcm9jZXNzRW5kT2ZGaWxlKEF0b21pY0hUTUxUb2tlbiogdG9rZW4pCiB7Ci0gICAgQVNT
RVJUKHRva2VuLnR5cGUoKSA9PSBIVE1MVG9rZW5UeXBlczo6RW5kT2ZGaWxlKTsKKyAgICBBU1NF
UlQodG9rZW4tPnR5cGUoKSA9PSBIVE1MVG9rZW5UeXBlczo6RW5kT2ZGaWxlKTsKICAgICBzd2l0
Y2ggKGluc2VydGlvbk1vZGUoKSkgewogICAgIGNhc2UgSW5pdGlhbE1vZGU6CiAgICAgICAgIEFT
U0VSVChpbnNlcnRpb25Nb2RlKCkgPT0gSW5pdGlhbE1vZGUpOwpAQCAtMjUxMiwzMyArMjUxMiwz
MyBAQCB2b2lkIEhUTUxUcmVlQnVpbGRlcjo6ZGVmYXVsdEZvckluaXRpYWwoKQogCiB2b2lkIEhU
TUxUcmVlQnVpbGRlcjo6ZGVmYXVsdEZvckJlZm9yZUhUTUwoKQogewotICAgIEF0b21pY0hUTUxU
b2tlbiBzdGFydEhUTUwoSFRNTFRva2VuVHlwZXM6OlN0YXJ0VGFnLCBodG1sVGFnLmxvY2FsTmFt
ZSgpKTsKLSAgICBtX3RyZWUuaW5zZXJ0SFRNTEh0bWxTdGFydFRhZ0JlZm9yZUhUTUwoc3RhcnRI
VE1MKTsKKyAgICBSZWZQdHI8QXRvbWljSFRNTFRva2VuPiBzdGFydEhUTUwgPSBBdG9taWNIVE1M
VG9rZW46OmNyZWF0ZShIVE1MVG9rZW5UeXBlczo6U3RhcnRUYWcsIGh0bWxUYWcubG9jYWxOYW1l
KCkpOworICAgIG1fdHJlZS5pbnNlcnRIVE1MSHRtbFN0YXJ0VGFnQmVmb3JlSFRNTChzdGFydEhU
TUwuZ2V0KCkpOwogICAgIHNldEluc2VydGlvbk1vZGUoQmVmb3JlSGVhZE1vZGUpOwogfQogCiB2
b2lkIEhUTUxUcmVlQnVpbGRlcjo6ZGVmYXVsdEZvckJlZm9yZUhlYWQoKQogewotICAgIEF0b21p
Y0hUTUxUb2tlbiBzdGFydEhlYWQoSFRNTFRva2VuVHlwZXM6OlN0YXJ0VGFnLCBoZWFkVGFnLmxv
Y2FsTmFtZSgpKTsKLSAgICBwcm9jZXNzU3RhcnRUYWcoc3RhcnRIZWFkKTsKKyAgICBSZWZQdHI8
QXRvbWljSFRNTFRva2VuPiBzdGFydEhlYWQgPSBBdG9taWNIVE1MVG9rZW46OmNyZWF0ZShIVE1M
VG9rZW5UeXBlczo6U3RhcnRUYWcsIGhlYWRUYWcubG9jYWxOYW1lKCkpOworICAgIHByb2Nlc3NT
dGFydFRhZyhzdGFydEhlYWQuZ2V0KCkpOwogfQogCiB2b2lkIEhUTUxUcmVlQnVpbGRlcjo6ZGVm
YXVsdEZvckluSGVhZCgpCiB7Ci0gICAgQXRvbWljSFRNTFRva2VuIGVuZEhlYWQoSFRNTFRva2Vu
VHlwZXM6OkVuZFRhZywgaGVhZFRhZy5sb2NhbE5hbWUoKSk7Ci0gICAgcHJvY2Vzc0VuZFRhZyhl
bmRIZWFkKTsKKyAgICBSZWZQdHI8QXRvbWljSFRNTFRva2VuPiBlbmRIZWFkID0gQXRvbWljSFRN
TFRva2VuOjpjcmVhdGUoSFRNTFRva2VuVHlwZXM6OkVuZFRhZywgaGVhZFRhZy5sb2NhbE5hbWUo
KSk7CisgICAgcHJvY2Vzc0VuZFRhZyhlbmRIZWFkLmdldCgpKTsKIH0KIAogdm9pZCBIVE1MVHJl
ZUJ1aWxkZXI6OmRlZmF1bHRGb3JJbkhlYWROb3NjcmlwdCgpCiB7Ci0gICAgQXRvbWljSFRNTFRv
a2VuIGVuZE5vc2NyaXB0KEhUTUxUb2tlblR5cGVzOjpFbmRUYWcsIG5vc2NyaXB0VGFnLmxvY2Fs
TmFtZSgpKTsKLSAgICBwcm9jZXNzRW5kVGFnKGVuZE5vc2NyaXB0KTsKKyAgICBSZWZQdHI8QXRv
bWljSFRNTFRva2VuPiBlbmROb3NjcmlwdCA9IEF0b21pY0hUTUxUb2tlbjo6Y3JlYXRlKEhUTUxU
b2tlblR5cGVzOjpFbmRUYWcsIG5vc2NyaXB0VGFnLmxvY2FsTmFtZSgpKTsKKyAgICBwcm9jZXNz
RW5kVGFnKGVuZE5vc2NyaXB0LmdldCgpKTsKIH0KIAogdm9pZCBIVE1MVHJlZUJ1aWxkZXI6OmRl
ZmF1bHRGb3JBZnRlckhlYWQoKQogewotICAgIEF0b21pY0hUTUxUb2tlbiBzdGFydEJvZHkoSFRN
TFRva2VuVHlwZXM6OlN0YXJ0VGFnLCBib2R5VGFnLmxvY2FsTmFtZSgpKTsKLSAgICBwcm9jZXNz
U3RhcnRUYWcoc3RhcnRCb2R5KTsKKyAgICBSZWZQdHI8QXRvbWljSFRNTFRva2VuPiBzdGFydEJv
ZHkgPSBBdG9taWNIVE1MVG9rZW46OmNyZWF0ZShIVE1MVG9rZW5UeXBlczo6U3RhcnRUYWcsIGJv
ZHlUYWcubG9jYWxOYW1lKCkpOworICAgIHByb2Nlc3NTdGFydFRhZyhzdGFydEJvZHkuZ2V0KCkp
OwogICAgIG1fZnJhbWVzZXRPayA9IHRydWU7CiB9CiAKQEAgLTI1NTksMjggKzI1NTksMjggQEAg
dm9pZCBIVE1MVHJlZUJ1aWxkZXI6OmRlZmF1bHRGb3JJblRhYmxlVGV4dCgpCiAgICAgc2V0SW5z
ZXJ0aW9uTW9kZShtX29yaWdpbmFsSW5zZXJ0aW9uTW9kZSk7CiB9CiAKLWJvb2wgSFRNTFRyZWVC
dWlsZGVyOjpwcm9jZXNzU3RhcnRUYWdGb3JJbkhlYWQoQXRvbWljSFRNTFRva2VuJiB0b2tlbikK
K2Jvb2wgSFRNTFRyZWVCdWlsZGVyOjpwcm9jZXNzU3RhcnRUYWdGb3JJbkhlYWQoQXRvbWljSFRN
TFRva2VuKiB0b2tlbikKIHsKLSAgICBBU1NFUlQodG9rZW4udHlwZSgpID09IEhUTUxUb2tlblR5
cGVzOjpTdGFydFRhZyk7Ci0gICAgaWYgKHRva2VuLm5hbWUoKSA9PSBodG1sVGFnKSB7CisgICAg
QVNTRVJUKHRva2VuLT50eXBlKCkgPT0gSFRNTFRva2VuVHlwZXM6OlN0YXJ0VGFnKTsKKyAgICBp
ZiAodG9rZW4tPm5hbWUoKSA9PSBodG1sVGFnKSB7CiAgICAgICAgIHByb2Nlc3NIdG1sU3RhcnRU
YWdGb3JJbkJvZHkodG9rZW4pOwogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9Ci0gICAgaWYg
KHRva2VuLm5hbWUoKSA9PSBiYXNlVGFnCi0gICAgICAgIHx8IHRva2VuLm5hbWUoKSA9PSBiYXNl
Zm9udFRhZwotICAgICAgICB8fCB0b2tlbi5uYW1lKCkgPT0gYmdzb3VuZFRhZwotICAgICAgICB8
fCB0b2tlbi5uYW1lKCkgPT0gY29tbWFuZFRhZwotICAgICAgICB8fCB0b2tlbi5uYW1lKCkgPT0g
bGlua1RhZwotICAgICAgICB8fCB0b2tlbi5uYW1lKCkgPT0gbWV0YVRhZykgeworICAgIGlmICh0
b2tlbi0+bmFtZSgpID09IGJhc2VUYWcKKyAgICAgICAgfHwgdG9rZW4tPm5hbWUoKSA9PSBiYXNl
Zm9udFRhZworICAgICAgICB8fCB0b2tlbi0+bmFtZSgpID09IGJnc291bmRUYWcKKyAgICAgICAg
fHwgdG9rZW4tPm5hbWUoKSA9PSBjb21tYW5kVGFnCisgICAgICAgIHx8IHRva2VuLT5uYW1lKCkg
PT0gbGlua1RhZworICAgICAgICB8fCB0b2tlbi0+bmFtZSgpID09IG1ldGFUYWcpIHsKICAgICAg
ICAgbV90cmVlLmluc2VydFNlbGZDbG9zaW5nSFRNTEVsZW1lbnQodG9rZW4pOwogICAgICAgICAv
LyBOb3RlOiBUaGUgY3VzdG9tIHByb2Nlc3NpbmcgZm9yIHRoZSA8bWV0YT4gdGFnIGlzIGRvbmUg
aW4gSFRNTE1ldGFFbGVtZW50Ojpwcm9jZXNzKCkuCiAgICAgICAgIHJldHVybiB0cnVlOwogICAg
IH0KLSAgICBpZiAodG9rZW4ubmFtZSgpID09IHRpdGxlVGFnKSB7CisgICAgaWYgKHRva2VuLT5u
YW1lKCkgPT0gdGl0bGVUYWcpIHsKICAgICAgICAgcHJvY2Vzc0dlbmVyaWNSQ0RBVEFTdGFydFRh
Zyh0b2tlbik7CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KLSAgICBpZiAodG9rZW4ubmFt
ZSgpID09IG5vc2NyaXB0VGFnKSB7CisgICAgaWYgKHRva2VuLT5uYW1lKCkgPT0gbm9zY3JpcHRU
YWcpIHsKICAgICAgICAgaWYgKHNjcmlwdEVuYWJsZWQobV9kb2N1bWVudC0+ZnJhbWUoKSkpIHsK
ICAgICAgICAgICAgIHByb2Nlc3NHZW5lcmljUmF3VGV4dFN0YXJ0VGFnKHRva2VuKTsKICAgICAg
ICAgICAgIHJldHVybiB0cnVlOwpAQCAtMjU4OSw0NCArMjU4OSw0NCBAQCBib29sIEhUTUxUcmVl
QnVpbGRlcjo6cHJvY2Vzc1N0YXJ0VGFnRm9ySW5IZWFkKEF0b21pY0hUTUxUb2tlbiYgdG9rZW4p
CiAgICAgICAgIHNldEluc2VydGlvbk1vZGUoSW5IZWFkTm9zY3JpcHRNb2RlKTsKICAgICAgICAg
cmV0dXJuIHRydWU7CiAgICAgfQotICAgIGlmICh0b2tlbi5uYW1lKCkgPT0gbm9mcmFtZXNUYWcg
fHwgdG9rZW4ubmFtZSgpID09IHN0eWxlVGFnKSB7CisgICAgaWYgKHRva2VuLT5uYW1lKCkgPT0g
bm9mcmFtZXNUYWcgfHwgdG9rZW4tPm5hbWUoKSA9PSBzdHlsZVRhZykgewogICAgICAgICBwcm9j
ZXNzR2VuZXJpY1Jhd1RleHRTdGFydFRhZyh0b2tlbik7CiAgICAgICAgIHJldHVybiB0cnVlOwog
ICAgIH0KLSAgICBpZiAodG9rZW4ubmFtZSgpID09IHNjcmlwdFRhZykgeworICAgIGlmICh0b2tl
bi0+bmFtZSgpID09IHNjcmlwdFRhZykgewogICAgICAgICBwcm9jZXNzU2NyaXB0U3RhcnRUYWco
dG9rZW4pOwotICAgICAgICBpZiAobV91c2VQcmVIVE1MNVBhcnNlclF1aXJrcyAmJiB0b2tlbi5z
ZWxmQ2xvc2luZygpKQorICAgICAgICBpZiAobV91c2VQcmVIVE1MNVBhcnNlclF1aXJrcyAmJiB0
b2tlbi0+c2VsZkNsb3NpbmcoKSkKICAgICAgICAgICAgIHByb2Nlc3NGYWtlRW5kVGFnKHNjcmlw
dFRhZyk7CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KLSAgICBpZiAodG9rZW4ubmFtZSgp
ID09IGhlYWRUYWcpIHsKKyAgICBpZiAodG9rZW4tPm5hbWUoKSA9PSBoZWFkVGFnKSB7CiAgICAg
ICAgIHBhcnNlRXJyb3IodG9rZW4pOwogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAgICAg
cmV0dXJuIGZhbHNlOwogfQogCi12b2lkIEhUTUxUcmVlQnVpbGRlcjo6cHJvY2Vzc0dlbmVyaWNS
Q0RBVEFTdGFydFRhZyhBdG9taWNIVE1MVG9rZW4mIHRva2VuKQordm9pZCBIVE1MVHJlZUJ1aWxk
ZXI6OnByb2Nlc3NHZW5lcmljUkNEQVRBU3RhcnRUYWcoQXRvbWljSFRNTFRva2VuKiB0b2tlbikK
IHsKLSAgICBBU1NFUlQodG9rZW4udHlwZSgpID09IEhUTUxUb2tlblR5cGVzOjpTdGFydFRhZyk7
CisgICAgQVNTRVJUKHRva2VuLT50eXBlKCkgPT0gSFRNTFRva2VuVHlwZXM6OlN0YXJ0VGFnKTsK
ICAgICBtX3RyZWUuaW5zZXJ0SFRNTEVsZW1lbnQodG9rZW4pOwogICAgIG1fcGFyc2VyLT50b2tl
bml6ZXIoKS0+c2V0U3RhdGUoSFRNTFRva2VuaXplclN0YXRlOjpSQ0RBVEFTdGF0ZSk7CiAgICAg
bV9vcmlnaW5hbEluc2VydGlvbk1vZGUgPSBtX2luc2VydGlvbk1vZGU7CiAgICAgc2V0SW5zZXJ0
aW9uTW9kZShUZXh0TW9kZSk7CiB9CiAKLXZvaWQgSFRNTFRyZWVCdWlsZGVyOjpwcm9jZXNzR2Vu
ZXJpY1Jhd1RleHRTdGFydFRhZyhBdG9taWNIVE1MVG9rZW4mIHRva2VuKQordm9pZCBIVE1MVHJl
ZUJ1aWxkZXI6OnByb2Nlc3NHZW5lcmljUmF3VGV4dFN0YXJ0VGFnKEF0b21pY0hUTUxUb2tlbiog
dG9rZW4pCiB7Ci0gICAgQVNTRVJUKHRva2VuLnR5cGUoKSA9PSBIVE1MVG9rZW5UeXBlczo6U3Rh
cnRUYWcpOworICAgIEFTU0VSVCh0b2tlbi0+dHlwZSgpID09IEhUTUxUb2tlblR5cGVzOjpTdGFy
dFRhZyk7CiAgICAgbV90cmVlLmluc2VydEhUTUxFbGVtZW50KHRva2VuKTsKICAgICBtX3BhcnNl
ci0+dG9rZW5pemVyKCktPnNldFN0YXRlKEhUTUxUb2tlbml6ZXJTdGF0ZTo6UkFXVEVYVFN0YXRl
KTsKICAgICBtX29yaWdpbmFsSW5zZXJ0aW9uTW9kZSA9IG1faW5zZXJ0aW9uTW9kZTsKICAgICBz
ZXRJbnNlcnRpb25Nb2RlKFRleHRNb2RlKTsKIH0KIAotdm9pZCBIVE1MVHJlZUJ1aWxkZXI6OnBy
b2Nlc3NTY3JpcHRTdGFydFRhZyhBdG9taWNIVE1MVG9rZW4mIHRva2VuKQordm9pZCBIVE1MVHJl
ZUJ1aWxkZXI6OnByb2Nlc3NTY3JpcHRTdGFydFRhZyhBdG9taWNIVE1MVG9rZW4qIHRva2VuKQog
ewotICAgIEFTU0VSVCh0b2tlbi50eXBlKCkgPT0gSFRNTFRva2VuVHlwZXM6OlN0YXJ0VGFnKTsK
KyAgICBBU1NFUlQodG9rZW4tPnR5cGUoKSA9PSBIVE1MVG9rZW5UeXBlczo6U3RhcnRUYWcpOwog
ICAgIG1fdHJlZS5pbnNlcnRTY3JpcHRFbGVtZW50KHRva2VuKTsKICAgICBtX3BhcnNlci0+dG9r
ZW5pemVyKCktPnNldFN0YXRlKEhUTUxUb2tlbml6ZXJTdGF0ZTo6U2NyaXB0RGF0YVN0YXRlKTsK
ICAgICBtX29yaWdpbmFsSW5zZXJ0aW9uTW9kZSA9IG1faW5zZXJ0aW9uTW9kZTsKQEAgLTI2Mzks
NyArMjYzOSw3IEBAIHZvaWQgSFRNTFRyZWVCdWlsZGVyOjpwcm9jZXNzU2NyaXB0U3RhcnRUYWco
QXRvbWljSFRNTFRva2VuJiB0b2tlbikKIH0KIAogLy8gaHR0cDovL3d3dy53aGF0d2cub3JnL3Nw
ZWNzL3dlYi1hcHBzL2N1cnJlbnQtd29yay9tdWx0aXBhZ2UvdHJlZS1jb25zdHJ1Y3Rpb24uaHRt
bCN0cmVlLWNvbnN0cnVjdGlvbgotYm9vbCBIVE1MVHJlZUJ1aWxkZXI6OnNob3VsZFByb2Nlc3NU
b2tlbkluRm9yZWlnbkNvbnRlbnQoQXRvbWljSFRNTFRva2VuJiB0b2tlbikKK2Jvb2wgSFRNTFRy
ZWVCdWlsZGVyOjpzaG91bGRQcm9jZXNzVG9rZW5JbkZvcmVpZ25Db250ZW50KEF0b21pY0hUTUxU
b2tlbiogdG9rZW4pCiB7CiAgICAgaWYgKG1fdHJlZS5pc0VtcHR5KCkpCiAgICAgICAgIHJldHVy
biBmYWxzZTsKQEAgLTI2NDcsMzEgKzI2NDcsMzEgQEAgYm9vbCBIVE1MVHJlZUJ1aWxkZXI6OnNo
b3VsZFByb2Nlc3NUb2tlbkluRm9yZWlnbkNvbnRlbnQoQXRvbWljSFRNTFRva2VuJiB0b2tlbikK
ICAgICBpZiAoaXNJbkhUTUxOYW1lc3BhY2Uobm9kZSkpCiAgICAgICAgIHJldHVybiBmYWxzZTsK
ICAgICBpZiAoSFRNTEVsZW1lbnRTdGFjazo6aXNNYXRoTUxUZXh0SW50ZWdyYXRpb25Qb2ludChu
b2RlKSkgewotICAgICAgICBpZiAodG9rZW4udHlwZSgpID09IEhUTUxUb2tlblR5cGVzOjpTdGFy
dFRhZwotICAgICAgICAgICAgJiYgdG9rZW4ubmFtZSgpICE9IE1hdGhNTE5hbWVzOjptZ2x5cGhU
YWcKLSAgICAgICAgICAgICYmIHRva2VuLm5hbWUoKSAhPSBNYXRoTUxOYW1lczo6bWFsaWdubWFy
a1RhZykKKyAgICAgICAgaWYgKHRva2VuLT50eXBlKCkgPT0gSFRNTFRva2VuVHlwZXM6OlN0YXJ0
VGFnCisgICAgICAgICAgICAmJiB0b2tlbi0+bmFtZSgpICE9IE1hdGhNTE5hbWVzOjptZ2x5cGhU
YWcKKyAgICAgICAgICAgICYmIHRva2VuLT5uYW1lKCkgIT0gTWF0aE1MTmFtZXM6Om1hbGlnbm1h
cmtUYWcpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIGlmICh0b2tlbi50eXBl
KCkgPT0gSFRNTFRva2VuVHlwZXM6OkNoYXJhY3RlcikKKyAgICAgICAgaWYgKHRva2VuLT50eXBl
KCkgPT0gSFRNTFRva2VuVHlwZXM6OkNoYXJhY3RlcikKICAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKICAgICB9CiAgICAgaWYgKG5vZGUtPmhhc1RhZ05hbWUoTWF0aE1MTmFtZXM6OmFubm90YXRp
b25feG1sVGFnKQotICAgICAgICAmJiB0b2tlbi50eXBlKCkgPT0gSFRNTFRva2VuVHlwZXM6OlN0
YXJ0VGFnCi0gICAgICAgICYmIHRva2VuLm5hbWUoKSA9PSBTVkdOYW1lczo6c3ZnVGFnKQorICAg
ICAgICAmJiB0b2tlbi0+dHlwZSgpID09IEhUTUxUb2tlblR5cGVzOjpTdGFydFRhZworICAgICAg
ICAmJiB0b2tlbi0+bmFtZSgpID09IFNWR05hbWVzOjpzdmdUYWcpCiAgICAgICAgIHJldHVybiBm
YWxzZTsKICAgICBpZiAoSFRNTEVsZW1lbnRTdGFjazo6aXNIVE1MSW50ZWdyYXRpb25Qb2ludChu
b2RlKSkgewotICAgICAgICBpZiAodG9rZW4udHlwZSgpID09IEhUTUxUb2tlblR5cGVzOjpTdGFy
dFRhZykKKyAgICAgICAgaWYgKHRva2VuLT50eXBlKCkgPT0gSFRNTFRva2VuVHlwZXM6OlN0YXJ0
VGFnKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICBpZiAodG9rZW4udHlwZSgp
ID09IEhUTUxUb2tlblR5cGVzOjpDaGFyYWN0ZXIpCisgICAgICAgIGlmICh0b2tlbi0+dHlwZSgp
ID09IEhUTUxUb2tlblR5cGVzOjpDaGFyYWN0ZXIpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7
CiAgICAgfQotICAgIGlmICh0b2tlbi50eXBlKCkgPT0gSFRNTFRva2VuVHlwZXM6OkVuZE9mRmls
ZSkKKyAgICBpZiAodG9rZW4tPnR5cGUoKSA9PSBIVE1MVG9rZW5UeXBlczo6RW5kT2ZGaWxlKQog
ICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLXZvaWQgSFRNTFRy
ZWVCdWlsZGVyOjpwcm9jZXNzVG9rZW5JbkZvcmVpZ25Db250ZW50KEF0b21pY0hUTUxUb2tlbiYg
dG9rZW4pCit2b2lkIEhUTUxUcmVlQnVpbGRlcjo6cHJvY2Vzc1Rva2VuSW5Gb3JlaWduQ29udGVu
dChBdG9taWNIVE1MVG9rZW4qIHRva2VuKQogewotICAgIHN3aXRjaCAodG9rZW4udHlwZSgpKSB7
CisgICAgc3dpdGNoICh0b2tlbi0+dHlwZSgpKSB7CiAgICAgY2FzZSBIVE1MVG9rZW5UeXBlczo6
VW5pbml0aWFsaXplZDoKICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgICAgIGJy
ZWFrOwpAQCAtMjY3OSw0NiArMjY3OSw0NiBAQCB2b2lkIEhUTUxUcmVlQnVpbGRlcjo6cHJvY2Vz
c1Rva2VuSW5Gb3JlaWduQ29udGVudChBdG9taWNIVE1MVG9rZW4mIHRva2VuKQogICAgICAgICBw
YXJzZUVycm9yKHRva2VuKTsKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBIVE1MVG9rZW5UeXBl
czo6U3RhcnRUYWc6IHsKLSAgICAgICAgaWYgKHRva2VuLm5hbWUoKSA9PSBiVGFnCi0gICAgICAg
ICAgICB8fCB0b2tlbi5uYW1lKCkgPT0gYmlnVGFnCi0gICAgICAgICAgICB8fCB0b2tlbi5uYW1l
KCkgPT0gYmxvY2txdW90ZVRhZwotICAgICAgICAgICAgfHwgdG9rZW4ubmFtZSgpID09IGJvZHlU
YWcKLSAgICAgICAgICAgIHx8IHRva2VuLm5hbWUoKSA9PSBiclRhZwotICAgICAgICAgICAgfHwg
dG9rZW4ubmFtZSgpID09IGNlbnRlclRhZwotICAgICAgICAgICAgfHwgdG9rZW4ubmFtZSgpID09
IGNvZGVUYWcKLSAgICAgICAgICAgIHx8IHRva2VuLm5hbWUoKSA9PSBkZFRhZwotICAgICAgICAg
ICAgfHwgdG9rZW4ubmFtZSgpID09IGRpdlRhZwotICAgICAgICAgICAgfHwgdG9rZW4ubmFtZSgp
ID09IGRsVGFnCi0gICAgICAgICAgICB8fCB0b2tlbi5uYW1lKCkgPT0gZHRUYWcKLSAgICAgICAg
ICAgIHx8IHRva2VuLm5hbWUoKSA9PSBlbVRhZwotICAgICAgICAgICAgfHwgdG9rZW4ubmFtZSgp
ID09IGVtYmVkVGFnCi0gICAgICAgICAgICB8fCBpc051bWJlcmVkSGVhZGVyVGFnKHRva2VuLm5h
bWUoKSkKLSAgICAgICAgICAgIHx8IHRva2VuLm5hbWUoKSA9PSBoZWFkVGFnCi0gICAgICAgICAg
ICB8fCB0b2tlbi5uYW1lKCkgPT0gaHJUYWcKLSAgICAgICAgICAgIHx8IHRva2VuLm5hbWUoKSA9
PSBpVGFnCi0gICAgICAgICAgICB8fCB0b2tlbi5uYW1lKCkgPT0gaW1nVGFnCi0gICAgICAgICAg
ICB8fCB0b2tlbi5uYW1lKCkgPT0gbGlUYWcKLSAgICAgICAgICAgIHx8IHRva2VuLm5hbWUoKSA9
PSBsaXN0aW5nVGFnCi0gICAgICAgICAgICB8fCB0b2tlbi5uYW1lKCkgPT0gbWVudVRhZwotICAg
ICAgICAgICAgfHwgdG9rZW4ubmFtZSgpID09IG1ldGFUYWcKLSAgICAgICAgICAgIHx8IHRva2Vu
Lm5hbWUoKSA9PSBub2JyVGFnCi0gICAgICAgICAgICB8fCB0b2tlbi5uYW1lKCkgPT0gb2xUYWcK
LSAgICAgICAgICAgIHx8IHRva2VuLm5hbWUoKSA9PSBwVGFnCi0gICAgICAgICAgICB8fCB0b2tl
bi5uYW1lKCkgPT0gcHJlVGFnCi0gICAgICAgICAgICB8fCB0b2tlbi5uYW1lKCkgPT0gcnVieVRh
ZwotICAgICAgICAgICAgfHwgdG9rZW4ubmFtZSgpID09IHNUYWcKLSAgICAgICAgICAgIHx8IHRv
a2VuLm5hbWUoKSA9PSBzbWFsbFRhZwotICAgICAgICAgICAgfHwgdG9rZW4ubmFtZSgpID09IHNw
YW5UYWcKLSAgICAgICAgICAgIHx8IHRva2VuLm5hbWUoKSA9PSBzdHJvbmdUYWcKLSAgICAgICAg
ICAgIHx8IHRva2VuLm5hbWUoKSA9PSBzdHJpa2VUYWcKLSAgICAgICAgICAgIHx8IHRva2VuLm5h
bWUoKSA9PSBzdWJUYWcKLSAgICAgICAgICAgIHx8IHRva2VuLm5hbWUoKSA9PSBzdXBUYWcKLSAg
ICAgICAgICAgIHx8IHRva2VuLm5hbWUoKSA9PSB0YWJsZVRhZwotICAgICAgICAgICAgfHwgdG9r
ZW4ubmFtZSgpID09IHR0VGFnCi0gICAgICAgICAgICB8fCB0b2tlbi5uYW1lKCkgPT0gdVRhZwot
ICAgICAgICAgICAgfHwgdG9rZW4ubmFtZSgpID09IHVsVGFnCi0gICAgICAgICAgICB8fCB0b2tl
bi5uYW1lKCkgPT0gdmFyVGFnCi0gICAgICAgICAgICB8fCAodG9rZW4ubmFtZSgpID09IGZvbnRU
YWcgJiYgKHRva2VuLmdldEF0dHJpYnV0ZUl0ZW0oY29sb3JBdHRyKSB8fCB0b2tlbi5nZXRBdHRy
aWJ1dGVJdGVtKGZhY2VBdHRyKSB8fCB0b2tlbi5nZXRBdHRyaWJ1dGVJdGVtKHNpemVBdHRyKSkp
KSB7CisgICAgICAgIGlmICh0b2tlbi0+bmFtZSgpID09IGJUYWcKKyAgICAgICAgICAgIHx8IHRv
a2VuLT5uYW1lKCkgPT0gYmlnVGFnCisgICAgICAgICAgICB8fCB0b2tlbi0+bmFtZSgpID09IGJs
b2NrcXVvdGVUYWcKKyAgICAgICAgICAgIHx8IHRva2VuLT5uYW1lKCkgPT0gYm9keVRhZworICAg
ICAgICAgICAgfHwgdG9rZW4tPm5hbWUoKSA9PSBiclRhZworICAgICAgICAgICAgfHwgdG9rZW4t
Pm5hbWUoKSA9PSBjZW50ZXJUYWcKKyAgICAgICAgICAgIHx8IHRva2VuLT5uYW1lKCkgPT0gY29k
ZVRhZworICAgICAgICAgICAgfHwgdG9rZW4tPm5hbWUoKSA9PSBkZFRhZworICAgICAgICAgICAg
fHwgdG9rZW4tPm5hbWUoKSA9PSBkaXZUYWcKKyAgICAgICAgICAgIHx8IHRva2VuLT5uYW1lKCkg
PT0gZGxUYWcKKyAgICAgICAgICAgIHx8IHRva2VuLT5uYW1lKCkgPT0gZHRUYWcKKyAgICAgICAg
ICAgIHx8IHRva2VuLT5uYW1lKCkgPT0gZW1UYWcKKyAgICAgICAgICAgIHx8IHRva2VuLT5uYW1l
KCkgPT0gZW1iZWRUYWcKKyAgICAgICAgICAgIHx8IGlzTnVtYmVyZWRIZWFkZXJUYWcodG9rZW4t
Pm5hbWUoKSkKKyAgICAgICAgICAgIHx8IHRva2VuLT5uYW1lKCkgPT0gaGVhZFRhZworICAgICAg
ICAgICAgfHwgdG9rZW4tPm5hbWUoKSA9PSBoclRhZworICAgICAgICAgICAgfHwgdG9rZW4tPm5h
bWUoKSA9PSBpVGFnCisgICAgICAgICAgICB8fCB0b2tlbi0+bmFtZSgpID09IGltZ1RhZworICAg
ICAgICAgICAgfHwgdG9rZW4tPm5hbWUoKSA9PSBsaVRhZworICAgICAgICAgICAgfHwgdG9rZW4t
Pm5hbWUoKSA9PSBsaXN0aW5nVGFnCisgICAgICAgICAgICB8fCB0b2tlbi0+bmFtZSgpID09IG1l
bnVUYWcKKyAgICAgICAgICAgIHx8IHRva2VuLT5uYW1lKCkgPT0gbWV0YVRhZworICAgICAgICAg
ICAgfHwgdG9rZW4tPm5hbWUoKSA9PSBub2JyVGFnCisgICAgICAgICAgICB8fCB0b2tlbi0+bmFt
ZSgpID09IG9sVGFnCisgICAgICAgICAgICB8fCB0b2tlbi0+bmFtZSgpID09IHBUYWcKKyAgICAg
ICAgICAgIHx8IHRva2VuLT5uYW1lKCkgPT0gcHJlVGFnCisgICAgICAgICAgICB8fCB0b2tlbi0+
bmFtZSgpID09IHJ1YnlUYWcKKyAgICAgICAgICAgIHx8IHRva2VuLT5uYW1lKCkgPT0gc1RhZwor
ICAgICAgICAgICAgfHwgdG9rZW4tPm5hbWUoKSA9PSBzbWFsbFRhZworICAgICAgICAgICAgfHwg
dG9rZW4tPm5hbWUoKSA9PSBzcGFuVGFnCisgICAgICAgICAgICB8fCB0b2tlbi0+bmFtZSgpID09
IHN0cm9uZ1RhZworICAgICAgICAgICAgfHwgdG9rZW4tPm5hbWUoKSA9PSBzdHJpa2VUYWcKKyAg
ICAgICAgICAgIHx8IHRva2VuLT5uYW1lKCkgPT0gc3ViVGFnCisgICAgICAgICAgICB8fCB0b2tl
bi0+bmFtZSgpID09IHN1cFRhZworICAgICAgICAgICAgfHwgdG9rZW4tPm5hbWUoKSA9PSB0YWJs
ZVRhZworICAgICAgICAgICAgfHwgdG9rZW4tPm5hbWUoKSA9PSB0dFRhZworICAgICAgICAgICAg
fHwgdG9rZW4tPm5hbWUoKSA9PSB1VGFnCisgICAgICAgICAgICB8fCB0b2tlbi0+bmFtZSgpID09
IHVsVGFnCisgICAgICAgICAgICB8fCB0b2tlbi0+bmFtZSgpID09IHZhclRhZworICAgICAgICAg
ICAgfHwgKHRva2VuLT5uYW1lKCkgPT0gZm9udFRhZyAmJiAodG9rZW4tPmdldEF0dHJpYnV0ZUl0
ZW0oY29sb3JBdHRyKSB8fCB0b2tlbi0+Z2V0QXR0cmlidXRlSXRlbShmYWNlQXR0cikgfHwgdG9r
ZW4tPmdldEF0dHJpYnV0ZUl0ZW0oc2l6ZUF0dHIpKSkpIHsKICAgICAgICAgICAgIHBhcnNlRXJy
b3IodG9rZW4pOwogICAgICAgICAgICAgbV90cmVlLm9wZW5FbGVtZW50cygpLT5wb3BVbnRpbEZv
cmVpZ25Db250ZW50U2NvcGVNYXJrZXIoKTsKICAgICAgICAgICAgIHByb2Nlc3NTdGFydFRhZyh0
b2tlbik7CkBAIC0yNzM5LDcgKzI3MzksNyBAQCB2b2lkIEhUTUxUcmVlQnVpbGRlcjo6cHJvY2Vz
c1Rva2VuSW5Gb3JlaWduQ29udGVudChBdG9taWNIVE1MVG9rZW4mIHRva2VuKQogICAgICAgICBp
ZiAobV90cmVlLmN1cnJlbnROb2RlKCktPm5hbWVzcGFjZVVSSSgpID09IFNWR05hbWVzOjpzdmdO
YW1lc3BhY2VVUkkpCiAgICAgICAgICAgICBhZGp1c3RTVkdUYWdOYW1lQ2FzZSh0b2tlbik7CiAK
LSAgICAgICAgaWYgKHRva2VuLm5hbWUoKSA9PSBTVkdOYW1lczo6c2NyaXB0VGFnICYmIG1fdHJl
ZS5jdXJyZW50Tm9kZSgpLT5oYXNUYWdOYW1lKFNWR05hbWVzOjpzY3JpcHRUYWcpKSB7CisgICAg
ICAgIGlmICh0b2tlbi0+bmFtZSgpID09IFNWR05hbWVzOjpzY3JpcHRUYWcgJiYgbV90cmVlLmN1
cnJlbnROb2RlKCktPmhhc1RhZ05hbWUoU1ZHTmFtZXM6OnNjcmlwdFRhZykpIHsKICAgICAgICAg
ICAgIG1fc2NyaXB0VG9Qcm9jZXNzID0gbV90cmVlLmN1cnJlbnRFbGVtZW50KCk7CiAgICAgICAg
ICAgICBtX3RyZWUub3BlbkVsZW1lbnRzKCktPnBvcCgpOwogICAgICAgICAgICAgcmV0dXJuOwpA
QCAtMjc0NywxMCArMjc0NywxMCBAQCB2b2lkIEhUTUxUcmVlQnVpbGRlcjo6cHJvY2Vzc1Rva2Vu
SW5Gb3JlaWduQ29udGVudChBdG9taWNIVE1MVG9rZW4mIHRva2VuKQogICAgICAgICBpZiAoIWlz
SW5IVE1MTmFtZXNwYWNlKG1fdHJlZS5jdXJyZW50Tm9kZSgpKSkgewogICAgICAgICAgICAgLy8g
RklYTUU6IFRoaXMgY29kZSBqdXN0IHdhbnRzIGFuIEVsZW1lbnQqIGl0ZXJhdG9yLCBpbnN0ZWFk
IG9mIGFuIEVsZW1lbnRSZWNvcmQqCiAgICAgICAgICAgICBIVE1MRWxlbWVudFN0YWNrOjpFbGVt
ZW50UmVjb3JkKiBub2RlUmVjb3JkID0gbV90cmVlLm9wZW5FbGVtZW50cygpLT50b3BSZWNvcmQo
KTsKLSAgICAgICAgICAgIGlmICghbm9kZVJlY29yZC0+bm9kZSgpLT5oYXNMb2NhbE5hbWUodG9r
ZW4ubmFtZSgpKSkKKyAgICAgICAgICAgIGlmICghbm9kZVJlY29yZC0+bm9kZSgpLT5oYXNMb2Nh
bE5hbWUodG9rZW4tPm5hbWUoKSkpCiAgICAgICAgICAgICAgICAgcGFyc2VFcnJvcih0b2tlbik7
CiAgICAgICAgICAgICB3aGlsZSAoMSkgewotICAgICAgICAgICAgICAgIGlmIChub2RlUmVjb3Jk
LT5ub2RlKCktPmhhc0xvY2FsTmFtZSh0b2tlbi5uYW1lKCkpKSB7CisgICAgICAgICAgICAgICAg
aWYgKG5vZGVSZWNvcmQtPm5vZGUoKS0+aGFzTG9jYWxOYW1lKHRva2VuLT5uYW1lKCkpKSB7CiAg
ICAgICAgICAgICAgICAgICAgIG1fdHJlZS5vcGVuRWxlbWVudHMoKS0+cG9wVW50aWxQb3BwZWQo
bm9kZVJlY29yZC0+ZWxlbWVudCgpKTsKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAg
ICAgICAgICAgICAgIH0KQEAgLTI3NjgsNyArMjc2OCw3IEBAIHZvaWQgSFRNTFRyZWVCdWlsZGVy
Ojpwcm9jZXNzVG9rZW5JbkZvcmVpZ25Db250ZW50KEF0b21pY0hUTUxUb2tlbiYgdG9rZW4pCiAg
ICAgICAgIG1fdHJlZS5pbnNlcnRDb21tZW50KHRva2VuKTsKICAgICAgICAgcmV0dXJuOwogICAg
IGNhc2UgSFRNTFRva2VuVHlwZXM6OkNoYXJhY3RlcjogewotICAgICAgICBTdHJpbmcgY2hhcmFj
dGVycyA9IFN0cmluZyh0b2tlbi5jaGFyYWN0ZXJzKCkuZGF0YSgpLCB0b2tlbi5jaGFyYWN0ZXJz
KCkuc2l6ZSgpKTsKKyAgICAgICAgU3RyaW5nIGNoYXJhY3RlcnMgPSBTdHJpbmcodG9rZW4tPmNo
YXJhY3RlcnMoKS5kYXRhKCksIHRva2VuLT5jaGFyYWN0ZXJzKCkuc2l6ZSgpKTsKICAgICAgICAg
bV90cmVlLmluc2VydFRleHROb2RlKGNoYXJhY3RlcnMpOwogICAgICAgICBpZiAobV9mcmFtZXNl
dE9rICYmICFpc0FsbFdoaXRlc3BhY2VPclJlcGxhY2VtZW50Q2hhcmFjdGVycyhjaGFyYWN0ZXJz
KSkKICAgICAgICAgICAgIG1fZnJhbWVzZXRPayA9IGZhbHNlOwpAQCAtMjc5MCw3ICsyNzkwLDcg
QEAgdm9pZCBIVE1MVHJlZUJ1aWxkZXI6OmZpbmlzaGVkKCkKICAgICBtX2RvY3VtZW50LT5maW5p
c2hlZFBhcnNpbmcoKTsKIH0KIAotdm9pZCBIVE1MVHJlZUJ1aWxkZXI6OnBhcnNlRXJyb3IoQXRv
bWljSFRNTFRva2VuJikKK3ZvaWQgSFRNTFRyZWVCdWlsZGVyOjpwYXJzZUVycm9yKEF0b21pY0hU
TUxUb2tlbiopCiB7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvcGFyc2Vy
L0hUTUxUcmVlQnVpbGRlci5oIGIvU291cmNlL1dlYkNvcmUvaHRtbC9wYXJzZXIvSFRNTFRyZWVC
dWlsZGVyLmgKaW5kZXggMTkyODg0ZTViNjU5N2ZmM2Y1NzkwMmM5OGUyYTM3ZWUzOTQ4M2YwMC4u
M2YyMTE0YzVhMTE0M2UyNGI3NzA4NDI2OWE3ZjM1ZTBkNTQ1ZDYzNCAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvaHRtbC9wYXJzZXIvSFRNTFRyZWVCdWlsZGVyLmgKKysrIGIvU291cmNlL1dl
YkNvcmUvaHRtbC9wYXJzZXIvSFRNTFRyZWVCdWlsZGVyLmgKQEAgLTcyLDcgKzcyLDcgQEAgcHVi
bGljOgogCiAgICAgLy8gVGhlIHRva2VuIHJlYWxseSBzaG91bGQgYmUgcGFzc2VkIGFzIGEgY29u
c3QmIHNpbmNlIGl0J3MgbmV2ZXIgbW9kaWZpZWQuCiAgICAgdm9pZCBjb25zdHJ1Y3RUcmVlRnJv
bVRva2VuKEhUTUxUb2tlbiYpOwotICAgIHZvaWQgY29uc3RydWN0VHJlZUZyb21BdG9taWNUb2tl
bihBdG9taWNIVE1MVG9rZW4mKTsKKyAgICB2b2lkIGNvbnN0cnVjdFRyZWVGcm9tQXRvbWljVG9r
ZW4oQXRvbWljSFRNTFRva2VuKik7CiAKICAgICBib29sIGhhc1BhcnNlckJsb2NraW5nU2NyaXB0
KCkgY29uc3QgeyByZXR1cm4gISFtX3NjcmlwdFRvUHJvY2VzczsgfQogICAgIC8vIE11c3QgYmUg
Y2FsbGVkIHRvIHRha2UgdGhlIHBhcnNlci1ibG9ja2luZyBzY3JpcHQgYmVmb3JlIGNhbGxpbmcg
dGhlIHBhcnNlciBhZ2Fpbi4KQEAgLTExOCwzNCArMTE4LDM0IEBAIHByaXZhdGU6CiAgICAgSFRN
TFRyZWVCdWlsZGVyKEhUTUxEb2N1bWVudFBhcnNlciosIEhUTUxEb2N1bWVudCosIGJvb2wgcmVw
b3J0RXJyb3JzLCBib29sIHVzZVByZUhUTUw1UGFyc2VyUXVpcmtzLCB1bnNpZ25lZCBtYXhpbXVt
RE9NVHJlZURlcHRoKTsKICAgICBIVE1MVHJlZUJ1aWxkZXIoSFRNTERvY3VtZW50UGFyc2VyKiwg
RG9jdW1lbnRGcmFnbWVudCosIEVsZW1lbnQqIGNvbnRleHRFbGVtZW50LCBGcmFnbWVudFNjcmlw
dGluZ1Blcm1pc3Npb24sIGJvb2wgdXNlUHJlSFRNTDVQYXJzZXJRdWlya3MsIHVuc2lnbmVkIG1h
eGltdW1ET01UcmVlRGVwdGgpOwogCi0gICAgdm9pZCBwcm9jZXNzVG9rZW4oQXRvbWljSFRNTFRv
a2VuJik7Ci0KLSAgICB2b2lkIHByb2Nlc3NEb2N0eXBlVG9rZW4oQXRvbWljSFRNTFRva2VuJik7
Ci0gICAgdm9pZCBwcm9jZXNzU3RhcnRUYWcoQXRvbWljSFRNTFRva2VuJik7Ci0gICAgdm9pZCBw
cm9jZXNzRW5kVGFnKEF0b21pY0hUTUxUb2tlbiYpOwotICAgIHZvaWQgcHJvY2Vzc0NvbW1lbnQo
QXRvbWljSFRNTFRva2VuJik7Ci0gICAgdm9pZCBwcm9jZXNzQ2hhcmFjdGVyKEF0b21pY0hUTUxU
b2tlbiYpOwotICAgIHZvaWQgcHJvY2Vzc0VuZE9mRmlsZShBdG9taWNIVE1MVG9rZW4mKTsKLQot
ICAgIGJvb2wgcHJvY2Vzc1N0YXJ0VGFnRm9ySW5IZWFkKEF0b21pY0hUTUxUb2tlbiYpOwotICAg
IHZvaWQgcHJvY2Vzc1N0YXJ0VGFnRm9ySW5Cb2R5KEF0b21pY0hUTUxUb2tlbiYpOwotICAgIHZv
aWQgcHJvY2Vzc1N0YXJ0VGFnRm9ySW5UYWJsZShBdG9taWNIVE1MVG9rZW4mKTsKLSAgICB2b2lk
IHByb2Nlc3NFbmRUYWdGb3JJbkJvZHkoQXRvbWljSFRNTFRva2VuJik7Ci0gICAgdm9pZCBwcm9j
ZXNzRW5kVGFnRm9ySW5UYWJsZShBdG9taWNIVE1MVG9rZW4mKTsKLSAgICB2b2lkIHByb2Nlc3NF
bmRUYWdGb3JJblRhYmxlQm9keShBdG9taWNIVE1MVG9rZW4mKTsKLSAgICB2b2lkIHByb2Nlc3NF
bmRUYWdGb3JJblJvdyhBdG9taWNIVE1MVG9rZW4mKTsKLSAgICB2b2lkIHByb2Nlc3NFbmRUYWdG
b3JJbkNlbGwoQXRvbWljSFRNTFRva2VuJik7Ci0KLSAgICB2b2lkIHByb2Nlc3NJc2luZGV4U3Rh
cnRUYWdGb3JJbkJvZHkoQXRvbWljSFRNTFRva2VuJik7Ci0gICAgdm9pZCBwcm9jZXNzSHRtbFN0
YXJ0VGFnRm9ySW5Cb2R5KEF0b21pY0hUTUxUb2tlbiYpOwotICAgIGJvb2wgcHJvY2Vzc0JvZHlF
bmRUYWdGb3JJbkJvZHkoQXRvbWljSFRNTFRva2VuJik7CisgICAgdm9pZCBwcm9jZXNzVG9rZW4o
QXRvbWljSFRNTFRva2VuKik7CisKKyAgICB2b2lkIHByb2Nlc3NEb2N0eXBlVG9rZW4oQXRvbWlj
SFRNTFRva2VuKik7CisgICAgdm9pZCBwcm9jZXNzU3RhcnRUYWcoQXRvbWljSFRNTFRva2VuKik7
CisgICAgdm9pZCBwcm9jZXNzRW5kVGFnKEF0b21pY0hUTUxUb2tlbiopOworICAgIHZvaWQgcHJv
Y2Vzc0NvbW1lbnQoQXRvbWljSFRNTFRva2VuKik7CisgICAgdm9pZCBwcm9jZXNzQ2hhcmFjdGVy
KEF0b21pY0hUTUxUb2tlbiopOworICAgIHZvaWQgcHJvY2Vzc0VuZE9mRmlsZShBdG9taWNIVE1M
VG9rZW4qKTsKKworICAgIGJvb2wgcHJvY2Vzc1N0YXJ0VGFnRm9ySW5IZWFkKEF0b21pY0hUTUxU
b2tlbiopOworICAgIHZvaWQgcHJvY2Vzc1N0YXJ0VGFnRm9ySW5Cb2R5KEF0b21pY0hUTUxUb2tl
biopOworICAgIHZvaWQgcHJvY2Vzc1N0YXJ0VGFnRm9ySW5UYWJsZShBdG9taWNIVE1MVG9rZW4q
KTsKKyAgICB2b2lkIHByb2Nlc3NFbmRUYWdGb3JJbkJvZHkoQXRvbWljSFRNTFRva2VuKik7Cisg
ICAgdm9pZCBwcm9jZXNzRW5kVGFnRm9ySW5UYWJsZShBdG9taWNIVE1MVG9rZW4qKTsKKyAgICB2
b2lkIHByb2Nlc3NFbmRUYWdGb3JJblRhYmxlQm9keShBdG9taWNIVE1MVG9rZW4qKTsKKyAgICB2
b2lkIHByb2Nlc3NFbmRUYWdGb3JJblJvdyhBdG9taWNIVE1MVG9rZW4qKTsKKyAgICB2b2lkIHBy
b2Nlc3NFbmRUYWdGb3JJbkNlbGwoQXRvbWljSFRNTFRva2VuKik7CisKKyAgICB2b2lkIHByb2Nl
c3NJc2luZGV4U3RhcnRUYWdGb3JJbkJvZHkoQXRvbWljSFRNTFRva2VuKik7CisgICAgdm9pZCBw
cm9jZXNzSHRtbFN0YXJ0VGFnRm9ySW5Cb2R5KEF0b21pY0hUTUxUb2tlbiopOworICAgIGJvb2wg
cHJvY2Vzc0JvZHlFbmRUYWdGb3JJbkJvZHkoQXRvbWljSFRNTFRva2VuKik7CiAgICAgYm9vbCBw
cm9jZXNzVGFibGVFbmRUYWdGb3JJblRhYmxlKCk7CiAgICAgYm9vbCBwcm9jZXNzQ2FwdGlvbkVu
ZFRhZ0ZvckluQ2FwdGlvbigpOwogICAgIGJvb2wgcHJvY2Vzc0NvbGdyb3VwRW5kVGFnRm9ySW5D
b2x1bW5Hcm91cCgpOwogICAgIGJvb2wgcHJvY2Vzc1RyRW5kVGFnRm9ySW5Sb3coKTsKICAgICAv
LyBGSVhNRTogVGhpcyBmdW5jdGlvbiBzaG91bGQgYmUgaW5saW5lZCBpbnRvIGl0cyBvbmUgY2Fs
bCBzaXRlIG9yIGl0CiAgICAgLy8gbmVlZHMgdG8gYXNzZXJ0IHdoaWNoIHRva2VucyBpdCBjYW4g
YmUgY2FsbGVkIHdpdGguCi0gICAgdm9pZCBwcm9jZXNzQW55T3RoZXJFbmRUYWdGb3JJbkJvZHko
QXRvbWljSFRNTFRva2VuJik7CisgICAgdm9pZCBwcm9jZXNzQW55T3RoZXJFbmRUYWdGb3JJbkJv
ZHkoQXRvbWljSFRNTFRva2VuKik7CiAKICAgICB2b2lkIHByb2Nlc3NDaGFyYWN0ZXJCdWZmZXIo
RXh0ZXJuYWxDaGFyYWN0ZXJUb2tlbkJ1ZmZlciYpOwogICAgIGlubGluZSB2b2lkIHByb2Nlc3ND
aGFyYWN0ZXJCdWZmZXJGb3JJbkJvZHkoRXh0ZXJuYWxDaGFyYWN0ZXJUb2tlbkJ1ZmZlciYpOwpA
QCAtMTU1LDkgKzE1NSw5IEBAIHByaXZhdGU6CiAgICAgdm9pZCBwcm9jZXNzRmFrZUNoYXJhY3Rl
cnMoY29uc3QgU3RyaW5nJik7CiAgICAgdm9pZCBwcm9jZXNzRmFrZVBFbmRUYWdJZlBJbkJ1dHRv
blNjb3BlKCk7CiAKLSAgICB2b2lkIHByb2Nlc3NHZW5lcmljUkNEQVRBU3RhcnRUYWcoQXRvbWlj
SFRNTFRva2VuJik7Ci0gICAgdm9pZCBwcm9jZXNzR2VuZXJpY1Jhd1RleHRTdGFydFRhZyhBdG9t
aWNIVE1MVG9rZW4mKTsKLSAgICB2b2lkIHByb2Nlc3NTY3JpcHRTdGFydFRhZyhBdG9taWNIVE1M
VG9rZW4mKTsKKyAgICB2b2lkIHByb2Nlc3NHZW5lcmljUkNEQVRBU3RhcnRUYWcoQXRvbWljSFRN
TFRva2VuKik7CisgICAgdm9pZCBwcm9jZXNzR2VuZXJpY1Jhd1RleHRTdGFydFRhZyhBdG9taWNI
VE1MVG9rZW4qKTsKKyAgICB2b2lkIHByb2Nlc3NTY3JpcHRTdGFydFRhZyhBdG9taWNIVE1MVG9r
ZW4qKTsKIAogICAgIC8vIERlZmF1bHQgcHJvY2Vzc2luZyBmb3IgdGhlIGRpZmZlcmVudCBpbnNl
cnRpb24gbW9kZXMuCiAgICAgdm9pZCBkZWZhdWx0Rm9ySW5pdGlhbCgpOwpAQCAtMTY4LDIyICsx
NjgsMjIgQEAgcHJpdmF0ZToKICAgICB2b2lkIGRlZmF1bHRGb3JBZnRlckhlYWQoKTsKICAgICB2
b2lkIGRlZmF1bHRGb3JJblRhYmxlVGV4dCgpOwogCi0gICAgaW5saW5lIGJvb2wgc2hvdWxkUHJv
Y2Vzc1Rva2VuSW5Gb3JlaWduQ29udGVudChBdG9taWNIVE1MVG9rZW4mKTsKLSAgICB2b2lkIHBy
b2Nlc3NUb2tlbkluRm9yZWlnbkNvbnRlbnQoQXRvbWljSFRNTFRva2VuJik7CisgICAgaW5saW5l
IGJvb2wgc2hvdWxkUHJvY2Vzc1Rva2VuSW5Gb3JlaWduQ29udGVudChBdG9taWNIVE1MVG9rZW4q
KTsKKyAgICB2b2lkIHByb2Nlc3NUb2tlbkluRm9yZWlnbkNvbnRlbnQoQXRvbWljSFRNTFRva2Vu
Kik7CiAKLSAgICBWZWN0b3I8QXR0cmlidXRlPiBhdHRyaWJ1dGVzRm9ySXNpbmRleElucHV0KEF0
b21pY0hUTUxUb2tlbiYpOworICAgIFZlY3RvcjxBdHRyaWJ1dGU+IGF0dHJpYnV0ZXNGb3JJc2lu
ZGV4SW5wdXQoQXRvbWljSFRNTFRva2VuKik7CiAKICAgICBIVE1MRWxlbWVudFN0YWNrOjpFbGVt
ZW50UmVjb3JkKiBmdXJ0aGVzdEJsb2NrRm9yRm9ybWF0dGluZ0VsZW1lbnQoRWxlbWVudCopOwot
ICAgIHZvaWQgY2FsbFRoZUFkb3B0aW9uQWdlbmN5KEF0b21pY0hUTUxUb2tlbiYpOworICAgIHZv
aWQgY2FsbFRoZUFkb3B0aW9uQWdlbmN5KEF0b21pY0hUTUxUb2tlbiopOwogCiAgICAgdm9pZCBj
bG9zZVRoZUNlbGwoKTsKIAogICAgIHRlbXBsYXRlIDxib29sIHNob3VsZENsb3NlKGNvbnN0IENv
bnRhaW5lck5vZGUqKT4KLSAgICB2b2lkIHByb2Nlc3NDbG9zZVdoZW5OZXN0ZWRUYWcoQXRvbWlj
SFRNTFRva2VuJik7CisgICAgdm9pZCBwcm9jZXNzQ2xvc2VXaGVuTmVzdGVkVGFnKEF0b21pY0hU
TUxUb2tlbiopOwogCiAgICAgYm9vbCBtX2ZyYW1lc2V0T2s7CiAKLSAgICB2b2lkIHBhcnNlRXJy
b3IoQXRvbWljSFRNTFRva2VuJik7CisgICAgdm9pZCBwYXJzZUVycm9yKEF0b21pY0hUTUxUb2tl
biopOwogCiAgICAgSW5zZXJ0aW9uTW9kZSBpbnNlcnRpb25Nb2RlKCkgY29uc3QgeyByZXR1cm4g
bV9pbnNlcnRpb25Nb2RlOyB9CiAgICAgdm9pZCBzZXRJbnNlcnRpb25Nb2RlKEluc2VydGlvbk1v
ZGUgbW9kZSkgeyBtX2luc2VydGlvbk1vZGUgPSBtb2RlOyB9CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9odG1sL3BhcnNlci9UZXh0RG9jdW1lbnRQYXJzZXIuY3BwIGIvU291cmNlL1dlYkNv
cmUvaHRtbC9wYXJzZXIvVGV4dERvY3VtZW50UGFyc2VyLmNwcAppbmRleCA3MzRlZGYwOWY4MzZm
YTY5ZWMyZWNiODFlZjQ3ODU3ZjRkYTIyOTBkLi5lMzhkMGUwYzRmZGRhZmE2NWNjYzhmZWVlMGYw
YzU4YjY2Njk0M2E1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL3BhcnNlci9UZXh0
RG9jdW1lbnRQYXJzZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvcGFyc2VyL1RleHRE
b2N1bWVudFBhcnNlci5jcHAKQEAgLTYyLDkgKzYyLDkgQEAgdm9pZCBUZXh0RG9jdW1lbnRQYXJz
ZXI6Omluc2VydEZha2VQcmVFbGVtZW50KCkKIAogICAgIFZlY3RvcjxBdHRyaWJ1dGU+IGF0dHJp
YnV0ZXM7CiAgICAgYXR0cmlidXRlcy5hcHBlbmQoQXR0cmlidXRlKHN0eWxlQXR0ciwgIndvcmQt
d3JhcDogYnJlYWstd29yZDsgd2hpdGUtc3BhY2U6IHByZS13cmFwOyIpKTsKLSAgICBBdG9taWNI
VE1MVG9rZW4gZmFrZVByZShIVE1MVG9rZW5UeXBlczo6U3RhcnRUYWcsIHByZVRhZy5sb2NhbE5h
bWUoKSwgYXR0cmlidXRlcyk7CisgICAgUmVmUHRyPEF0b21pY0hUTUxUb2tlbj4gZmFrZVByZSA9
IEF0b21pY0hUTUxUb2tlbjo6Y3JlYXRlKEhUTUxUb2tlblR5cGVzOjpTdGFydFRhZywgcHJlVGFn
LmxvY2FsTmFtZSgpLCBhdHRyaWJ1dGVzKTsKIAotICAgIHRyZWVCdWlsZGVyKCktPmNvbnN0cnVj
dFRyZWVGcm9tQXRvbWljVG9rZW4oZmFrZVByZSk7CisgICAgdHJlZUJ1aWxkZXIoKS0+Y29uc3Ry
dWN0VHJlZUZyb21BdG9taWNUb2tlbihmYWtlUHJlLmdldCgpKTsKICAgICAvLyBOb3JtYWxseSB3
ZSB3b3VsZCBza2lwIHRoZSBmaXJzdCBcbiBhZnRlciBhIDxwcmU+IGVsZW1lbnQsIGJ1dCB3ZSBk
b24ndAogICAgIC8vIHdhbnQgdG8gc2tpcCB0aGUgZmlyc3QgXG4gZm9yIHRleHQgZG9jdW1lbnRz
IQogICAgIHRyZWVCdWlsZGVyKCktPnNldFNob3VsZFNraXBMZWFkaW5nTmV3bGluZShmYWxzZSk7
Cg==
</data>
<flag name="review"
          id="162816"
          type_id="1"
          status="+"
          setter="abarth"
    />
          </attachment>
      

    </bug>

</bugzilla>