<?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>150341</bug_id>
          
          <creation_ts>2015-10-19 14:34:43 -0700</creation_ts>
          <short_desc>Drop unnecessary Node::toInputElement() virtual function</short_desc>
          <delta_ts>2015-10-19 20:30:19 -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>WebKit 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>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Chris Dumez">cdumez</reporter>
          <assigned_to name="Chris Dumez">cdumez</assigned_to>
          <cc>commit-queue</cc>
    
    <cc>darin</cc>
    
    <cc>kling</cc>
    
    <cc>koivisto</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1134697</commentid>
    <comment_count>0</comment_count>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2015-10-19 14:34:43 -0700</bug_when>
    <thetext>Drop unnecessary Node::toInputElement() virtual function and use the usual is&lt;HTMLInputElement&gt;() / downcast&lt; HTMLInputElement &gt;() instead.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1134733</commentid>
    <comment_count>1</comment_count>
      <attachid>263522</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2015-10-19 16:09:48 -0700</bug_when>
    <thetext>Created attachment 263522
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1134780</commentid>
    <comment_count>2</comment_count>
      <attachid>263541</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2015-10-19 18:40:34 -0700</bug_when>
    <thetext>Created attachment 263541
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1134784</commentid>
    <comment_count>3</comment_count>
      <attachid>263541</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2015-10-19 19:30:42 -0700</bug_when>
    <thetext>Comment on attachment 263541
Patch

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

&gt; Source/WebCore/accessibility/AccessibilityNodeObject.cpp:675
&gt;      Node* node = this-&gt;node();
&gt; -    if (!node)
&gt; +    if (!is&lt;HTMLInputElement&gt;(node))
&gt;          return false;
&gt;  
&gt; -    HTMLInputElement* inputElement = node-&gt;toInputElement();
&gt; -    if (!inputElement)
&gt; -        return false;
&gt; -
&gt; -    return inputElement-&gt;shouldAppearIndeterminate();
&gt; +    return downcast&lt;HTMLInputElement&gt;(*node).shouldAppearIndeterminate();

I might have written it:

    return is&lt;HTMLInputElement&gt;(node) &amp;&amp; downcast&lt;HTMLInputElement&gt;(*node).shouldAppearIndeterminate();

I noticed you doing something similar in a function below.

&gt; Source/WebCore/html/shadow/SliderThumbElement.cpp:575
&gt;      // Only HTMLInputElement creates SliderThumbElement instances as its shadow nodes.
&gt;      // So, shadowHost() must be an HTMLInputElement.
&gt; -    Element* host = shadowHost();
&gt; -    return host ? host-&gt;toInputElement() : 0;
&gt; +    auto* host = shadowHost();
&gt; +    return is&lt;HTMLInputElement&gt;(host) ? downcast&lt;HTMLInputElement&gt;(host) : nullptr;

It’s peculiar that this code checks is&lt;HTMLInputElement&gt; yet has a comment stating that the check is not needed. I’m thinking that the comment is likely correct, and we could probably write:

    return downcast&lt;HTMLInputElement&gt;(shadowHost());

But obviously it’s less risky to leave the behavior unchanged.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1134789</commentid>
    <comment_count>4</comment_count>
      <attachid>263545</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2015-10-19 19:42:01 -0700</bug_when>
    <thetext>Created attachment 263545
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1134790</commentid>
    <comment_count>5</comment_count>
      <attachid>263541</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2015-10-19 19:44:12 -0700</bug_when>
    <thetext>Comment on attachment 263541
Patch

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

&gt;&gt; Source/WebCore/accessibility/AccessibilityNodeObject.cpp:675
&gt;&gt; +    return downcast&lt;HTMLInputElement&gt;(*node).shouldAppearIndeterminate();
&gt; 
&gt; I might have written it:
&gt; 
&gt;     return is&lt;HTMLInputElement&gt;(node) &amp;&amp; downcast&lt;HTMLInputElement&gt;(*node).shouldAppearIndeterminate();
&gt; 
&gt; I noticed you doing something similar in a function below.

Done before landing.

&gt;&gt; Source/WebCore/html/shadow/SliderThumbElement.cpp:575
&gt;&gt; +    return is&lt;HTMLInputElement&gt;(host) ? downcast&lt;HTMLInputElement&gt;(host) : nullptr;
&gt; 
&gt; It’s peculiar that this code checks is&lt;HTMLInputElement&gt; yet has a comment stating that the check is not needed. I’m thinking that the comment is likely correct, and we could probably write:
&gt; 
&gt;     return downcast&lt;HTMLInputElement&gt;(shadowHost());
&gt; 
&gt; But obviously it’s less risky to leave the behavior unchanged.

I checked that this is only used by RangeInputType so I made the change.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1134796</commentid>
    <comment_count>6</comment_count>
      <attachid>263545</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2015-10-19 20:30:15 -0700</bug_when>
    <thetext>Comment on attachment 263545
Patch

Clearing flags on attachment: 263545

Committed r191327: &lt;http://trac.webkit.org/changeset/191327&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1134797</commentid>
    <comment_count>7</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2015-10-19 20:30:19 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>263522</attachid>
            <date>2015-10-19 16:09:48 -0700</date>
            <delta_ts>2015-10-19 18:40:30 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-150341-20151019160906.patch</filename>
            <type>text/plain</type>
            <size>44816</size>
            <attacher name="Chris Dumez">cdumez</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTkxMzE4CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZWQ3ZmY1NGJjOTkzYzYz
YWE4ZWZlMjRkOWMzZjE1YTEzYzFlN2VkNy4uYzdmY2JhODUxMmQxMTBiN2Q4MTU1YjY4YTRiYzIw
NjdlMTc5NmE1ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDEzIEBACisyMDE1LTEwLTE5ICBDaHJp
cyBEdW1leiAgPGNkdW1lekBhcHBsZS5jb20+CisKKyAgICAgICAgRHJvcCB1bm5lY2Vzc2FyeSBO
b2RlOjp0b0lucHV0RWxlbWVudCgpIHZpcnR1YWwgZnVuY3Rpb24KKyAgICAgICAgaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE1MDM0MQorCisgICAgICAgIFJldmlld2Vk
IGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIERyb3AgdW5uZWNlc3NhcnkgTm9kZTo6dG9J
bnB1dEVsZW1lbnQoKSB2aXJ0dWFsIGZ1bmN0aW9uIGFuZCB1c2UgdGhlCisgICAgICAgIHVzdWFs
IGlzPEhUTUxJbnB1dEVsZW1lbnQ+KCkgLyBkb3duY2FzdDwgSFRNTElucHV0RWxlbWVudCA+KCkg
aW5zdGVhZC4KKwogMjAxNS0xMC0xOSAgQmV0aCBEYWtpbiAgPGJkYWtpbkBhcHBsZS5jb20+CiAK
ICAgICAgICAgQnVpbGQgZml4LgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJp
bGl0eS9BWE9iamVjdENhY2hlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQVhP
YmplY3RDYWNoZS5jcHAKaW5kZXggOTE0YWI2ZGYxNzE0Njk0OGIxNWI2ZTY0OTdiNTU4M2FhZGYx
YmQyNy4uMjA3MjA5MGFlMDQ5ODEwZGRiZmY1ODgzNGZkZmIwNDZlMTU0YzM5NSAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BWE9iamVjdENhY2hlLmNwcAorKysgYi9T
b3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FYT2JqZWN0Q2FjaGUuY3BwCkBAIC0xMzE2LDEx
ICsxMzE2LDggQEAgdm9pZCBBWE9iamVjdENhY2hlOjp0ZXh0TWFya2VyRGF0YUZvclZpc2libGVQ
b3NpdGlvbihUZXh0TWFya2VyRGF0YSYgdGV4dE1hcmtlckQKICAgICBpZiAoIWRvbU5vZGUpCiAg
ICAgICAgIHJldHVybjsKICAgICAKLSAgICBpZiAoZG9tTm9kZS0+aXNIVE1MRWxlbWVudCgpKSB7
Ci0gICAgICAgIEhUTUxJbnB1dEVsZW1lbnQqIGlucHV0RWxlbWVudCA9IGRvbU5vZGUtPnRvSW5w
dXRFbGVtZW50KCk7Ci0gICAgICAgIGlmIChpbnB1dEVsZW1lbnQgJiYgaW5wdXRFbGVtZW50LT5p
c1Bhc3N3b3JkRmllbGQoKSkKLSAgICAgICAgICAgIHJldHVybjsKLSAgICB9CisgICAgaWYgKGlz
PEhUTUxJbnB1dEVsZW1lbnQ+KCpkb21Ob2RlKSAmJiBkb3duY2FzdDxIVE1MSW5wdXRFbGVtZW50
PigqZG9tTm9kZSkuaXNQYXNzd29yZEZpZWxkKCkpCisgICAgICAgIHJldHVybjsKICAgICAKICAg
ICAvLyBmaW5kIG9yIGNyZWF0ZSBhbiBhY2Nlc3NpYmlsaXR5IG9iamVjdCBmb3IgdGhpcyBub2Rl
CiAgICAgQVhPYmplY3RDYWNoZSogY2FjaGUgPSBkb21Ob2RlLT5kb2N1bWVudCgpLmF4T2JqZWN0
Q2FjaGUoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNz
aWJpbGl0eU5vZGVPYmplY3QuY3BwIGIvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nl
c3NpYmlsaXR5Tm9kZU9iamVjdC5jcHAKaW5kZXggODk1M2ViYWI2OTg4Njg4MmJmYjFlODMxYjAy
N2Y0ZTk5ZDY3MTg1MC4uMmRjMGZhNTAwNjY3M2UzY2RlZDNkMGY5MDQyYzk0OTU2MDY5MDQ0NSAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5Tm9k
ZU9iamVjdC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmls
aXR5Tm9kZU9iamVjdC5jcHAKQEAgLTQ5NCwxMCArNDk0LDExIEBAIGJvb2wgQWNjZXNzaWJpbGl0
eU5vZGVPYmplY3Q6OmlzU2VhcmNoRmllbGQoKSBjb25zdAogICAgIGlmIChyb2xlVmFsdWUoKSA9
PSBTZWFyY2hGaWVsZFJvbGUpCiAgICAgICAgIHJldHVybiB0cnVlOwogCi0gICAgSFRNTElucHV0
RWxlbWVudCogaW5wdXRFbGVtZW50ID0gbm9kZS0+dG9JbnB1dEVsZW1lbnQoKTsKLSAgICBpZiAo
IWlucHV0RWxlbWVudCkKKyAgICBpZiAoIWlzPEhUTUxJbnB1dEVsZW1lbnQ+KCpub2RlKSkKICAg
ICAgICAgcmV0dXJuIGZhbHNlOwogCisgICAgYXV0byYgaW5wdXRFbGVtZW50ID0gZG93bmNhc3Q8
SFRNTElucHV0RWxlbWVudD4oKm5vZGUpOworCiAgICAgLy8gU29tZSB3ZWJzaXRlcyBkb24ndCBs
YWJlbCB0aGVpciBzZWFyY2ggZmllbGRzIGFzIHN1Y2guIEhvd2V2ZXIsIHRoZXkgd2lsbAogICAg
IC8vIHVzZSB0aGUgd29yZCAic2VhcmNoIiBpbiBlaXRoZXIgdGhlIGZvcm0gb3IgaW5wdXQgdHlw
ZS4gVGhpcyB3b24ndCBjYXRjaCBldmVyeSBjYXNlLAogICAgIC8vIGJ1dCBpdCB3aWxsIGNhdGNo
IGdvb2dsZS5jb20gZm9yIGV4YW1wbGUuCkBAIC01MDgsNyArNTA5LDcgQEAgYm9vbCBBY2Nlc3Np
YmlsaXR5Tm9kZU9iamVjdDo6aXNTZWFyY2hGaWVsZCgpIGNvbnN0CiAgICAgICAgIHJldHVybiB0
cnVlOwogCiAgICAgLy8gQ2hlY2sgdGhlIGZvcm0gYWN0aW9uIGFuZCB0aGUgbmFtZSwgd2hpY2gg
d2lsbCBzb21ldGltZXMgYmUgInNlYXJjaCIuCi0gICAgSFRNTEZvcm1FbGVtZW50KiBmb3JtID0g
aW5wdXRFbGVtZW50LT5mb3JtKCk7CisgICAgYXV0byogZm9ybSA9IGlucHV0RWxlbWVudC5mb3Jt
KCk7CiAgICAgaWYgKGZvcm0gJiYgKGZvcm0tPm5hbWUoKS5jb250YWlucygic2VhcmNoIiwgZmFs
c2UpIHx8IGZvcm0tPmFjdGlvbigpLmNvbnRhaW5zKCJzZWFyY2giLCBmYWxzZSkpKQogICAgICAg
ICByZXR1cm4gdHJ1ZTsKIApAQCAtNTQyLDE4ICs1NDMsMTQgQEAgYm9vbCBBY2Nlc3NpYmlsaXR5
Tm9kZU9iamVjdDo6aXNJbWFnZSgpIGNvbnN0CiAKIGJvb2wgQWNjZXNzaWJpbGl0eU5vZGVPYmpl
Y3Q6OmlzUGFzc3dvcmRGaWVsZCgpIGNvbnN0CiB7Ci0gICAgTm9kZSogbm9kZSA9IHRoaXMtPm5v
ZGUoKTsKLSAgICBpZiAoIW5vZGUgfHwgIW5vZGUtPmlzSFRNTEVsZW1lbnQoKSkKKyAgICBhdXRv
KiBub2RlID0gdGhpcy0+bm9kZSgpOworICAgIGlmICghaXM8SFRNTElucHV0RWxlbWVudD4obm9k
ZSkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgIGlmIChhcmlhUm9sZUF0dHJpYnV0ZSgp
ICE9IFVua25vd25Sb2xlKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBIVE1MSW5wdXRF
bGVtZW50KiBpbnB1dEVsZW1lbnQgPSBub2RlLT50b0lucHV0RWxlbWVudCgpOwotICAgIGlmICgh
aW5wdXRFbGVtZW50KQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICByZXR1cm4gaW5wdXRF
bGVtZW50LT5pc1Bhc3N3b3JkRmllbGQoKTsKKyAgICByZXR1cm4gZG93bmNhc3Q8SFRNTElucHV0
RWxlbWVudD4oKm5vZGUpLmlzUGFzc3dvcmRGaWVsZCgpOwogfQogCiBBY2Nlc3NpYmlsaXR5T2Jq
ZWN0KiBBY2Nlc3NpYmlsaXR5Tm9kZU9iamVjdDo6cGFzc3dvcmRGaWVsZE9yQ29udGFpbmluZ1Bh
c3N3b3JkRmllbGQoKQpAQCAtNTYyLDE2ICs1NTksMTQgQEAgQWNjZXNzaWJpbGl0eU9iamVjdCog
QWNjZXNzaWJpbGl0eU5vZGVPYmplY3Q6OnBhc3N3b3JkRmllbGRPckNvbnRhaW5pbmdQYXNzd29y
ZEYKICAgICBpZiAoIW5vZGUpCiAgICAgICAgIHJldHVybiBudWxscHRyOwogCi0gICAgaWYgKEhU
TUxJbnB1dEVsZW1lbnQqIGlucHV0RWxlbWVudCA9IG5vZGUtPnRvSW5wdXRFbGVtZW50KCkpIHsK
LSAgICAgICAgaWYgKGlucHV0RWxlbWVudC0+aXNQYXNzd29yZEZpZWxkKCkpCi0gICAgICAgICAg
ICByZXR1cm4gdGhpczsKLSAgICB9CisgICAgaWYgKGlzPEhUTUxJbnB1dEVsZW1lbnQ+KCpub2Rl
KSAmJiBkb3duY2FzdDxIVE1MSW5wdXRFbGVtZW50Pigqbm9kZSkuaXNQYXNzd29yZEZpZWxkKCkp
CisgICAgICAgIHJldHVybiB0aGlzOwogCi0gICAgRWxlbWVudCogZWxlbWVudCA9IG5vZGUtPnNo
YWRvd0hvc3QoKTsKLSAgICBpZiAoIWVsZW1lbnQgfHwgIWlzPEhUTUxJbnB1dEVsZW1lbnQ+KGVs
ZW1lbnQpKQorICAgIGF1dG8qIGVsZW1lbnQgPSBub2RlLT5zaGFkb3dIb3N0KCk7CisgICAgaWYg
KCFpczxIVE1MSW5wdXRFbGVtZW50PihlbGVtZW50KSkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7
CiAKLSAgICBpZiAoQVhPYmplY3RDYWNoZSogY2FjaGUgPSBheE9iamVjdENhY2hlKCkpCisgICAg
aWYgKGF1dG8qIGNhY2hlID0gYXhPYmplY3RDYWNoZSgpKQogICAgICAgICByZXR1cm4gY2FjaGUt
PmdldE9yQ3JlYXRlKGVsZW1lbnQpOwogCiAgICAgcmV0dXJuIG51bGxwdHI7CkBAIC02NDMsMTQg
KzYzOCwxMSBAQCBib29sIEFjY2Vzc2liaWxpdHlOb2RlT2JqZWN0Ojppc01lbnVJdGVtKCkgY29u
c3QKIGJvb2wgQWNjZXNzaWJpbGl0eU5vZGVPYmplY3Q6OmlzTmF0aXZlQ2hlY2tib3hPclJhZGlv
KCkgY29uc3QKIHsKICAgICBOb2RlKiBub2RlID0gdGhpcy0+bm9kZSgpOwotICAgIGlmICghbm9k
ZSkKKyAgICBpZiAoIWlzPEhUTUxJbnB1dEVsZW1lbnQ+KG5vZGUpKQogICAgICAgICByZXR1cm4g
ZmFsc2U7CiAKLSAgICBIVE1MSW5wdXRFbGVtZW50KiBpbnB1dCA9IG5vZGUtPnRvSW5wdXRFbGVt
ZW50KCk7Ci0gICAgaWYgKGlucHV0KQotICAgICAgICByZXR1cm4gaW5wdXQtPmlzQ2hlY2tib3go
KSB8fCBpbnB1dC0+aXNSYWRpb0J1dHRvbigpOwotCi0gICAgcmV0dXJuIGZhbHNlOworICAgIGF1
dG8mIGlucHV0ID0gZG93bmNhc3Q8SFRNTElucHV0RWxlbWVudD4oKm5vZGUpOworICAgIHJldHVy
biBpbnB1dC5pc0NoZWNrYm94KCkgfHwgaW5wdXQuaXNSYWRpb0J1dHRvbigpOwogfQogCiBib29s
IEFjY2Vzc2liaWxpdHlOb2RlT2JqZWN0Ojppc0VuYWJsZWQoKSBjb25zdApAQCAtNjc3LDE0ICs2
NjksMTAgQEAgYm9vbCBBY2Nlc3NpYmlsaXR5Tm9kZU9iamVjdDo6aXNFbmFibGVkKCkgY29uc3QK
IGJvb2wgQWNjZXNzaWJpbGl0eU5vZGVPYmplY3Q6OmlzSW5kZXRlcm1pbmF0ZSgpIGNvbnN0CiB7
CiAgICAgTm9kZSogbm9kZSA9IHRoaXMtPm5vZGUoKTsKLSAgICBpZiAoIW5vZGUpCisgICAgaWYg
KCFpczxIVE1MSW5wdXRFbGVtZW50Pihub2RlKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0g
ICAgSFRNTElucHV0RWxlbWVudCogaW5wdXRFbGVtZW50ID0gbm9kZS0+dG9JbnB1dEVsZW1lbnQo
KTsKLSAgICBpZiAoIWlucHV0RWxlbWVudCkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAg
cmV0dXJuIGlucHV0RWxlbWVudC0+c2hvdWxkQXBwZWFySW5kZXRlcm1pbmF0ZSgpOworICAgIHJl
dHVybiBkb3duY2FzdDxIVE1MSW5wdXRFbGVtZW50Pigqbm9kZSkuc2hvdWxkQXBwZWFySW5kZXRl
cm1pbmF0ZSgpOwogfQogCiBib29sIEFjY2Vzc2liaWxpdHlOb2RlT2JqZWN0Ojppc1ByZXNzZWQo
KSBjb25zdApAQCAtNzE2LDkgKzcwNCw4IEBAIGJvb2wgQWNjZXNzaWJpbGl0eU5vZGVPYmplY3Q6
OmlzQ2hlY2tlZCgpIGNvbnN0CiAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgIC8vIEZpcnN0
IHRlc3QgZm9yIG5hdGl2ZSBjaGVja2VkbmVzcyBzZW1hbnRpY3MKLSAgICBIVE1MSW5wdXRFbGVt
ZW50KiBpbnB1dEVsZW1lbnQgPSBub2RlLT50b0lucHV0RWxlbWVudCgpOwotICAgIGlmIChpbnB1
dEVsZW1lbnQpCi0gICAgICAgIHJldHVybiBpbnB1dEVsZW1lbnQtPnNob3VsZEFwcGVhckNoZWNr
ZWQoKTsKKyAgICBpZiAoaXM8SFRNTElucHV0RWxlbWVudD4oKm5vZGUpKQorICAgICAgICByZXR1
cm4gZG93bmNhc3Q8SFRNTElucHV0RWxlbWVudD4oKm5vZGUpLnNob3VsZEFwcGVhckNoZWNrZWQo
KTsKIAogICAgIC8vIEVsc2UsIGlmIHRoaXMgaXMgYW4gQVJJQSBjaGVja2JveCBvciByYWRpbywg
cmVzcGVjdCB0aGUgYXJpYS1jaGVja2VkIGF0dHJpYnV0ZQogICAgIGJvb2wgdmFsaWRSb2xlID0g
ZmFsc2U7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9jc3MvU2VsZWN0b3JDaGVja2VyLmNw
cCBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9TZWxlY3RvckNoZWNrZXIuY3BwCmluZGV4IGZiYjM0ODUx
MjQ3MDViODBlZjU1MGM3ZjJiNzQ5ZmQ5NjYxMDEwNWQuLmU3NzM1MzcyODdhZDhlNWE2ODJhZTY1
YjU3ZDJmYWVhOGYzZjAzY2UgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9TZWxlY3Rv
ckNoZWNrZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9TZWxlY3RvckNoZWNrZXIuY3Bw
CkBAIC05MDMsNyArOTAzLDcgQEAgYm9vbCBTZWxlY3RvckNoZWNrZXI6OmNoZWNrT25lKGNvbnN0
IENoZWNraW5nQ29udGV4dFdpdGhTdGF0dXMmIGNvbnRleHQsIFBzZXVkb0kKICAgICAgICAgICAg
IH0KICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIENTU1NlbGVjdG9yOjpQc2V1ZG9D
bGFzc0F1dG9maWxsOgotICAgICAgICAgICAgcmV0dXJuIGlzQXV0b2ZpbGxlZChlbGVtZW50KTsK
KyAgICAgICAgICAgIHJldHVybiBpc0F1dG9maWxsZWQoKmVsZW1lbnQpOwogICAgICAgICBjYXNl
IENTU1NlbGVjdG9yOjpQc2V1ZG9DbGFzc0FueUxpbms6CiAgICAgICAgIGNhc2UgQ1NTU2VsZWN0
b3I6OlBzZXVkb0NsYXNzQW55TGlua0RlcHJlY2F0ZWQ6CiAgICAgICAgIGNhc2UgQ1NTU2VsZWN0
b3I6OlBzZXVkb0NsYXNzTGluazoKQEAgLTk3Miw3ICs5NzIsNyBAQCBib29sIFNlbGVjdG9yQ2hl
Y2tlcjo6Y2hlY2tPbmUoY29uc3QgQ2hlY2tpbmdDb250ZXh0V2l0aFN0YXR1cyYgY29udGV4dCwg
UHNldWRvSQogICAgICAgICBjYXNlIENTU1NlbGVjdG9yOjpQc2V1ZG9DbGFzc0ludmFsaWQ6CiAg
ICAgICAgICAgICByZXR1cm4gaXNJbnZhbGlkKGVsZW1lbnQpOwogICAgICAgICBjYXNlIENTU1Nl
bGVjdG9yOjpQc2V1ZG9DbGFzc0NoZWNrZWQ6Ci0gICAgICAgICAgICByZXR1cm4gaXNDaGVja2Vk
KGVsZW1lbnQpOworICAgICAgICAgICAgcmV0dXJuIGlzQ2hlY2tlZCgqZWxlbWVudCk7CiAgICAg
ICAgIGNhc2UgQ1NTU2VsZWN0b3I6OlBzZXVkb0NsYXNzSW5kZXRlcm1pbmF0ZToKICAgICAgICAg
ICAgIHJldHVybiBzaG91bGRBcHBlYXJJbmRldGVybWluYXRlKGVsZW1lbnQpOwogICAgICAgICBj
YXNlIENTU1NlbGVjdG9yOjpQc2V1ZG9DbGFzc1Jvb3Q6CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9jc3MvU2VsZWN0b3JDaGVja2VyVGVzdEZ1bmN0aW9ucy5oIGIvU291cmNlL1dlYkNvcmUv
Y3NzL1NlbGVjdG9yQ2hlY2tlclRlc3RGdW5jdGlvbnMuaAppbmRleCA4NmRiNThjMTg1MDMwZDE5
MzVkMDMwZjVmMjI3OGM3ZDQ4MzI5MmJjLi5kMjUxZDYyYWFkMWFhOWYwMTczZmYzZTAwYTQyZDAy
OTRmYjA5ZTJkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9jc3MvU2VsZWN0b3JDaGVja2Vy
VGVzdEZ1bmN0aW9ucy5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9TZWxlY3RvckNoZWNrZXJU
ZXN0RnVuY3Rpb25zLmgKQEAgLTQxLDEzICs0MSw5IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsK
IAotQUxXQVlTX0lOTElORSBib29sIGlzQXV0b2ZpbGxlZChjb25zdCBFbGVtZW50KiBlbGVtZW50
KQorQUxXQVlTX0lOTElORSBib29sIGlzQXV0b2ZpbGxlZChjb25zdCBFbGVtZW50JiBlbGVtZW50
KQogewotICAgIGlmIChpczxIVE1MRm9ybUNvbnRyb2xFbGVtZW50PigqZWxlbWVudCkpIHsKLSAg
ICAgICAgaWYgKGNvbnN0IEhUTUxJbnB1dEVsZW1lbnQqIGlucHV0RWxlbWVudCA9IGVsZW1lbnQt
PnRvSW5wdXRFbGVtZW50KCkpCi0gICAgICAgICAgICByZXR1cm4gaW5wdXRFbGVtZW50LT5pc0F1
dG9GaWxsZWQoKTsKLSAgICB9Ci0gICAgcmV0dXJuIGZhbHNlOworICAgIHJldHVybiBpczxIVE1M
SW5wdXRFbGVtZW50PihlbGVtZW50KSAmJiBkb3duY2FzdDxIVE1MSW5wdXRFbGVtZW50PihlbGVt
ZW50KS5pc0F1dG9GaWxsZWQoKTsKIH0KIAogQUxXQVlTX0lOTElORSBib29sIGlzRGVmYXVsdEJ1
dHRvbkZvckZvcm0oY29uc3QgRWxlbWVudCogZWxlbWVudCkKQEAgLTcyLDE2ICs2OCwxOCBAQCBB
TFdBWVNfSU5MSU5FIGJvb2wgaXNNZWRpYURvY3VtZW50KEVsZW1lbnQqIGVsZW1lbnQpCiAgICAg
cmV0dXJuIGVsZW1lbnQtPmRvY3VtZW50KCkuaXNNZWRpYURvY3VtZW50KCk7CiB9CiAKLUFMV0FZ
U19JTkxJTkUgYm9vbCBpc0NoZWNrZWQoRWxlbWVudCogZWxlbWVudCkKK0FMV0FZU19JTkxJTkUg
Ym9vbCBpc0NoZWNrZWQoRWxlbWVudCYgZWxlbWVudCkKIHsKICAgICAvLyBFdmVuIHRob3VnaCBX
aW5JRSBhbGxvd3MgY2hlY2tlZCBhbmQgaW5kZXRlcm1pbmF0ZSB0byBjby1leGlzdCwgdGhlIENT
UyBzZWxlY3RvciBzcGVjIHNheXMgdGhhdAogICAgIC8vIHlvdSBjYW4ndCBiZSBib3RoIGNoZWNr
ZWQgYW5kIGluZGV0ZXJtaW5hdGUuIFdlIHdpbGwgYmVoYXZlIGxpa2UgV2luSUUgYmVoaW5kIHRo
ZSBzY2VuZXMgYW5kIGp1c3QKICAgICAvLyBvYmV5IHRoZSBDU1Mgc3BlYyBoZXJlIGluIHRoZSB0
ZXN0IGZvciBtYXRjaGluZyB0aGUgcHNldWRvLgotICAgIGNvbnN0IEhUTUxJbnB1dEVsZW1lbnQq
IGlucHV0RWxlbWVudCA9IGVsZW1lbnQtPnRvSW5wdXRFbGVtZW50KCk7Ci0gICAgaWYgKGlucHV0
RWxlbWVudCAmJiBpbnB1dEVsZW1lbnQtPnNob3VsZEFwcGVhckNoZWNrZWQoKSAmJiAhaW5wdXRF
bGVtZW50LT5zaG91bGRBcHBlYXJJbmRldGVybWluYXRlKCkpCi0gICAgICAgIHJldHVybiB0cnVl
OwotICAgIGlmIChpczxIVE1MT3B0aW9uRWxlbWVudD4oKmVsZW1lbnQpICYmIGRvd25jYXN0PEhU
TUxPcHRpb25FbGVtZW50PigqZWxlbWVudCkuc2VsZWN0ZWQoKSkKLSAgICAgICAgcmV0dXJuIHRy
dWU7CisgICAgaWYgKGlzPEhUTUxJbnB1dEVsZW1lbnQ+KGVsZW1lbnQpKSB7CisgICAgICAgIGF1
dG8mIGlucHV0RWxlbWVudCA9IGRvd25jYXN0PEhUTUxJbnB1dEVsZW1lbnQ+KGVsZW1lbnQpOwor
ICAgICAgICByZXR1cm4gaW5wdXRFbGVtZW50LnNob3VsZEFwcGVhckNoZWNrZWQoKSAmJiAhaW5w
dXRFbGVtZW50LnNob3VsZEFwcGVhckluZGV0ZXJtaW5hdGUoKTsKKyAgICB9CisgICAgaWYgKGlz
PEhUTUxPcHRpb25FbGVtZW50PihlbGVtZW50KSkKKyAgICAgICAgcmV0dXJuIGRvd25jYXN0PEhU
TUxPcHRpb25FbGVtZW50PihlbGVtZW50KS5zZWxlY3RlZCgpOworCiAgICAgcmV0dXJuIGZhbHNl
OwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9jc3MvU3R5bGVSZXNvbHZlci5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9jc3MvU3R5bGVSZXNvbHZlci5jcHAKaW5kZXggMGE0MjRhZDY3Y2Zl
YmVjZTg4OWY2YWE3NGY4MzIyN2I5YWYxYTc3Mi4uMTU5ZDJjMjVhZjg5NGNhYjM1NDU3YjYxY2Yx
YjJkOTcxNGRkYzU0YyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvY3NzL1N0eWxlUmVzb2x2
ZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9TdHlsZVJlc29sdmVyLmNwcApAQCAtNDc5
LDg0ICs0NzksODQgQEAgYm9vbCBTdHlsZVJlc29sdmVyOjpzdHlsZVNoYXJpbmdDYW5kaWRhdGVN
YXRjaGVzUnVsZVNldChSdWxlU2V0KiBydWxlU2V0KQogICAgIHJldHVybiBjb2xsZWN0b3IuaGFz
QW55TWF0Y2hpbmdSdWxlcyhydWxlU2V0KTsKIH0KIAotYm9vbCBTdHlsZVJlc29sdmVyOjpjYW5T
aGFyZVN0eWxlV2l0aENvbnRyb2woU3R5bGVkRWxlbWVudCogZWxlbWVudCkgY29uc3QKK2Jvb2wg
U3R5bGVSZXNvbHZlcjo6Y2FuU2hhcmVTdHlsZVdpdGhDb250cm9sKFN0eWxlZEVsZW1lbnQmIGVs
ZW1lbnQpIGNvbnN0CiB7CiAgICAgY29uc3QgU3RhdGUmIHN0YXRlID0gbV9zdGF0ZTsKLSAgICBI
VE1MSW5wdXRFbGVtZW50KiB0aGlzSW5wdXRFbGVtZW50ID0gZWxlbWVudC0+dG9JbnB1dEVsZW1l
bnQoKTsKLSAgICBIVE1MSW5wdXRFbGVtZW50KiBvdGhlcklucHV0RWxlbWVudCA9IHN0YXRlLmVs
ZW1lbnQoKS0+dG9JbnB1dEVsZW1lbnQoKTsKLQotICAgIGlmICghdGhpc0lucHV0RWxlbWVudCB8
fCAhb3RoZXJJbnB1dEVsZW1lbnQpCisgICAgaWYgKCFpczxIVE1MSW5wdXRFbGVtZW50PihlbGVt
ZW50KSB8fCAhaXM8SFRNTElucHV0RWxlbWVudD4oKnN0YXRlLmVsZW1lbnQoKSkpCiAgICAgICAg
IHJldHVybiBmYWxzZTsKIAotICAgIGlmICh0aGlzSW5wdXRFbGVtZW50LT5pc0F1dG9GaWxsZWQo
KSAhPSBvdGhlcklucHV0RWxlbWVudC0+aXNBdXRvRmlsbGVkKCkpCisgICAgYXV0byYgdGhpc0lu
cHV0RWxlbWVudCA9IGRvd25jYXN0PEhUTUxJbnB1dEVsZW1lbnQ+KGVsZW1lbnQpOworICAgIGF1
dG8mIG90aGVySW5wdXRFbGVtZW50ID0gZG93bmNhc3Q8SFRNTElucHV0RWxlbWVudD4oKnN0YXRl
LmVsZW1lbnQoKSk7CisKKyAgICBpZiAodGhpc0lucHV0RWxlbWVudC5pc0F1dG9GaWxsZWQoKSAh
PSBvdGhlcklucHV0RWxlbWVudC5pc0F1dG9GaWxsZWQoKSkKICAgICAgICAgcmV0dXJuIGZhbHNl
OwotICAgIGlmICh0aGlzSW5wdXRFbGVtZW50LT5zaG91bGRBcHBlYXJDaGVja2VkKCkgIT0gb3Ro
ZXJJbnB1dEVsZW1lbnQtPnNob3VsZEFwcGVhckNoZWNrZWQoKSkKKyAgICBpZiAodGhpc0lucHV0
RWxlbWVudC5zaG91bGRBcHBlYXJDaGVja2VkKCkgIT0gb3RoZXJJbnB1dEVsZW1lbnQuc2hvdWxk
QXBwZWFyQ2hlY2tlZCgpKQogICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgaWYgKHRoaXNJbnB1
dEVsZW1lbnQtPnNob3VsZEFwcGVhckluZGV0ZXJtaW5hdGUoKSAhPSBvdGhlcklucHV0RWxlbWVu
dC0+c2hvdWxkQXBwZWFySW5kZXRlcm1pbmF0ZSgpKQorICAgIGlmICh0aGlzSW5wdXRFbGVtZW50
LnNob3VsZEFwcGVhckluZGV0ZXJtaW5hdGUoKSAhPSBvdGhlcklucHV0RWxlbWVudC5zaG91bGRB
cHBlYXJJbmRldGVybWluYXRlKCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBpZiAodGhp
c0lucHV0RWxlbWVudC0+aXNSZXF1aXJlZCgpICE9IG90aGVySW5wdXRFbGVtZW50LT5pc1JlcXVp
cmVkKCkpCisgICAgaWYgKHRoaXNJbnB1dEVsZW1lbnQuaXNSZXF1aXJlZCgpICE9IG90aGVySW5w
dXRFbGVtZW50LmlzUmVxdWlyZWQoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgaWYg
KGVsZW1lbnQtPmlzRGlzYWJsZWRGb3JtQ29udHJvbCgpICE9IHN0YXRlLmVsZW1lbnQoKS0+aXNE
aXNhYmxlZEZvcm1Db250cm9sKCkpCisgICAgaWYgKGVsZW1lbnQuaXNEaXNhYmxlZEZvcm1Db250
cm9sKCkgIT0gc3RhdGUuZWxlbWVudCgpLT5pc0Rpc2FibGVkRm9ybUNvbnRyb2woKSkKICAgICAg
ICAgcmV0dXJuIGZhbHNlOwogCi0gICAgaWYgKGVsZW1lbnQtPmlzRGVmYXVsdEJ1dHRvbkZvckZv
cm0oKSAhPSBzdGF0ZS5lbGVtZW50KCktPmlzRGVmYXVsdEJ1dHRvbkZvckZvcm0oKSkKKyAgICBp
ZiAoZWxlbWVudC5pc0RlZmF1bHRCdXR0b25Gb3JGb3JtKCkgIT0gc3RhdGUuZWxlbWVudCgpLT5p
c0RlZmF1bHRCdXR0b25Gb3JGb3JtKCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIGlm
IChlbGVtZW50LT5pc0luUmFuZ2UoKSAhPSBzdGF0ZS5lbGVtZW50KCktPmlzSW5SYW5nZSgpKQor
ICAgIGlmIChlbGVtZW50LmlzSW5SYW5nZSgpICE9IHN0YXRlLmVsZW1lbnQoKS0+aXNJblJhbmdl
KCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIGlmIChlbGVtZW50LT5pc091dE9mUmFu
Z2UoKSAhPSBzdGF0ZS5lbGVtZW50KCktPmlzT3V0T2ZSYW5nZSgpKQorICAgIGlmIChlbGVtZW50
LmlzT3V0T2ZSYW5nZSgpICE9IHN0YXRlLmVsZW1lbnQoKS0+aXNPdXRPZlJhbmdlKCkpCiAgICAg
ICAgIHJldHVybiBmYWxzZTsKIAogICAgIHJldHVybiB0cnVlOwogfQogCi1zdGF0aWMgaW5saW5l
IGJvb2wgZWxlbWVudEhhc0RpcmVjdGlvbkF1dG8oRWxlbWVudCogZWxlbWVudCkKK3N0YXRpYyBp
bmxpbmUgYm9vbCBlbGVtZW50SGFzRGlyZWN0aW9uQXV0byhFbGVtZW50JiBlbGVtZW50KQogewog
ICAgIC8vIEZJWE1FOiBUaGlzIGxpbmUgaXMgc3VycHJpc2luZ2x5IGhvdCwgd2UgbWF5IHdpc2gg
dG8gaW5saW5lIGhhc0RpcmVjdGlvbkF1dG8gaW50byBTdHlsZVJlc29sdmVyLgotICAgIHJldHVy
biBpczxIVE1MRWxlbWVudD4oKmVsZW1lbnQpICYmIGRvd25jYXN0PEhUTUxFbGVtZW50PigqZWxl
bWVudCkuaGFzRGlyZWN0aW9uQXV0bygpOworICAgIHJldHVybiBpczxIVE1MRWxlbWVudD4oZWxl
bWVudCkgJiYgZG93bmNhc3Q8SFRNTEVsZW1lbnQ+KGVsZW1lbnQpLmhhc0RpcmVjdGlvbkF1dG8o
KTsKIH0KIAotYm9vbCBTdHlsZVJlc29sdmVyOjpzaGFyaW5nQ2FuZGlkYXRlSGFzSWRlbnRpY2Fs
U3R5bGVBZmZlY3RpbmdBdHRyaWJ1dGVzKFN0eWxlZEVsZW1lbnQqIHNoYXJpbmdDYW5kaWRhdGUp
IGNvbnN0Citib29sIFN0eWxlUmVzb2x2ZXI6OnNoYXJpbmdDYW5kaWRhdGVIYXNJZGVudGljYWxT
dHlsZUFmZmVjdGluZ0F0dHJpYnV0ZXMoU3R5bGVkRWxlbWVudCYgc2hhcmluZ0NhbmRpZGF0ZSkg
Y29uc3QKIHsKICAgICBjb25zdCBTdGF0ZSYgc3RhdGUgPSBtX3N0YXRlOwotICAgIGlmIChzdGF0
ZS5lbGVtZW50KCktPmVsZW1lbnREYXRhKCkgPT0gc2hhcmluZ0NhbmRpZGF0ZS0+ZWxlbWVudERh
dGEoKSkKKyAgICBpZiAoc3RhdGUuZWxlbWVudCgpLT5lbGVtZW50RGF0YSgpID09IHNoYXJpbmdD
YW5kaWRhdGUuZWxlbWVudERhdGEoKSkKICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgaWYgKHN0
YXRlLmVsZW1lbnQoKS0+ZmFzdEdldEF0dHJpYnV0ZShYTUxOYW1lczo6bGFuZ0F0dHIpICE9IHNo
YXJpbmdDYW5kaWRhdGUtPmZhc3RHZXRBdHRyaWJ1dGUoWE1MTmFtZXM6OmxhbmdBdHRyKSkKKyAg
ICBpZiAoc3RhdGUuZWxlbWVudCgpLT5mYXN0R2V0QXR0cmlidXRlKFhNTE5hbWVzOjpsYW5nQXR0
cikgIT0gc2hhcmluZ0NhbmRpZGF0ZS5mYXN0R2V0QXR0cmlidXRlKFhNTE5hbWVzOjpsYW5nQXR0
cikpCiAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBpZiAoc3RhdGUuZWxlbWVudCgpLT5mYXN0
R2V0QXR0cmlidXRlKGxhbmdBdHRyKSAhPSBzaGFyaW5nQ2FuZGlkYXRlLT5mYXN0R2V0QXR0cmli
dXRlKGxhbmdBdHRyKSkKKyAgICBpZiAoc3RhdGUuZWxlbWVudCgpLT5mYXN0R2V0QXR0cmlidXRl
KGxhbmdBdHRyKSAhPSBzaGFyaW5nQ2FuZGlkYXRlLmZhc3RHZXRBdHRyaWJ1dGUobGFuZ0F0dHIp
KQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICBpZiAoIXN0YXRlLmVsZW1lbnRBZmZlY3Rl
ZEJ5Q2xhc3NSdWxlcygpKSB7Ci0gICAgICAgIGlmIChzaGFyaW5nQ2FuZGlkYXRlLT5oYXNDbGFz
cygpICYmIGNsYXNzTmFtZXNBZmZlY3RlZEJ5UnVsZXMoc2hhcmluZ0NhbmRpZGF0ZS0+Y2xhc3NO
YW1lcygpKSkKKyAgICAgICAgaWYgKHNoYXJpbmdDYW5kaWRhdGUuaGFzQ2xhc3MoKSAmJiBjbGFz
c05hbWVzQWZmZWN0ZWRCeVJ1bGVzKHNoYXJpbmdDYW5kaWRhdGUuY2xhc3NOYW1lcygpKSkKICAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9IGVsc2UgaWYgKHNoYXJpbmdDYW5kaWRhdGUt
Pmhhc0NsYXNzKCkpIHsKKyAgICB9IGVsc2UgaWYgKHNoYXJpbmdDYW5kaWRhdGUuaGFzQ2xhc3Mo
KSkgewogICAgICAgICAvLyBTVkcgZWxlbWVudHMgcmVxdWlyZSBhIChzbG93ISkgZ2V0QXR0cmli
dXRlIGNvbXBhcmlzaW9uIGJlY2F1c2UgImNsYXNzIiBpcyBhbiBhbmltYXRhYmxlIGF0dHJpYnV0
ZSBmb3IgU1ZHLgogICAgICAgICBpZiAoc3RhdGUuZWxlbWVudCgpLT5pc1NWR0VsZW1lbnQoKSkg
ewotICAgICAgICAgICAgaWYgKHN0YXRlLmVsZW1lbnQoKS0+Z2V0QXR0cmlidXRlKGNsYXNzQXR0
cikgIT0gc2hhcmluZ0NhbmRpZGF0ZS0+Z2V0QXR0cmlidXRlKGNsYXNzQXR0cikpCisgICAgICAg
ICAgICBpZiAoc3RhdGUuZWxlbWVudCgpLT5nZXRBdHRyaWJ1dGUoY2xhc3NBdHRyKSAhPSBzaGFy
aW5nQ2FuZGlkYXRlLmdldEF0dHJpYnV0ZShjbGFzc0F0dHIpKQogICAgICAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsKICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIGlmIChzdGF0ZS5lbGVt
ZW50KCktPmNsYXNzTmFtZXMoKSAhPSBzaGFyaW5nQ2FuZGlkYXRlLT5jbGFzc05hbWVzKCkpCisg
ICAgICAgICAgICBpZiAoc3RhdGUuZWxlbWVudCgpLT5jbGFzc05hbWVzKCkgIT0gc2hhcmluZ0Nh
bmRpZGF0ZS5jbGFzc05hbWVzKCkpCiAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAg
ICAgICB9CiAgICAgfSBlbHNlCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIGlmIChzdGF0
ZS5zdHlsZWRFbGVtZW50KCktPnByZXNlbnRhdGlvbkF0dHJpYnV0ZVN0eWxlKCkgIT0gc2hhcmlu
Z0NhbmRpZGF0ZS0+cHJlc2VudGF0aW9uQXR0cmlidXRlU3R5bGUoKSkKKyAgICBpZiAoc3RhdGUu
c3R5bGVkRWxlbWVudCgpLT5wcmVzZW50YXRpb25BdHRyaWJ1dGVTdHlsZSgpICE9IHNoYXJpbmdD
YW5kaWRhdGUucHJlc2VudGF0aW9uQXR0cmlidXRlU3R5bGUoKSkKICAgICAgICAgcmV0dXJuIGZh
bHNlOwogCiAgICAgaWYgKHN0YXRlLmVsZW1lbnQoKS0+aGFzVGFnTmFtZShwcm9ncmVzc1RhZykp
IHsKLSAgICAgICAgaWYgKHN0YXRlLmVsZW1lbnQoKS0+c2hvdWxkQXBwZWFySW5kZXRlcm1pbmF0
ZSgpICE9IHNoYXJpbmdDYW5kaWRhdGUtPnNob3VsZEFwcGVhckluZGV0ZXJtaW5hdGUoKSkKKyAg
ICAgICAgaWYgKHN0YXRlLmVsZW1lbnQoKS0+c2hvdWxkQXBwZWFySW5kZXRlcm1pbmF0ZSgpICE9
IHNoYXJpbmdDYW5kaWRhdGUuc2hvdWxkQXBwZWFySW5kZXRlcm1pbmF0ZSgpKQogICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOwogICAgIH0KIAogICAgIHJldHVybiB0cnVlOwogfQogCi1ib29sIFN0
eWxlUmVzb2x2ZXI6OmNhblNoYXJlU3R5bGVXaXRoRWxlbWVudChTdHlsZWRFbGVtZW50KiBlbGVt
ZW50KSBjb25zdAorYm9vbCBTdHlsZVJlc29sdmVyOjpjYW5TaGFyZVN0eWxlV2l0aEVsZW1lbnQo
U3R5bGVkRWxlbWVudCYgZWxlbWVudCkgY29uc3QKIHsKLSAgICBSZW5kZXJTdHlsZSogc3R5bGUg
PSBlbGVtZW50LT5yZW5kZXJTdHlsZSgpOworICAgIGF1dG8qIHN0eWxlID0gZWxlbWVudC5yZW5k
ZXJTdHlsZSgpOwogICAgIGNvbnN0IFN0YXRlJiBzdGF0ZSA9IG1fc3RhdGU7CiAKICAgICBpZiAo
IXN0eWxlKQpAQCAtNTY1LDM3ICs1NjUsMzcgQEAgYm9vbCBTdHlsZVJlc29sdmVyOjpjYW5TaGFy
ZVN0eWxlV2l0aEVsZW1lbnQoU3R5bGVkRWxlbWVudCogZWxlbWVudCkgY29uc3QKICAgICAgICAg
cmV0dXJuIGZhbHNlOwogICAgIGlmIChzdHlsZS0+aGFzVW5pcXVlUHNldWRvU3R5bGUoKSkKICAg
ICAgICAgcmV0dXJuIGZhbHNlOwotICAgIGlmIChlbGVtZW50LT50YWdRTmFtZSgpICE9IHN0YXRl
LmVsZW1lbnQoKS0+dGFnUU5hbWUoKSkKKyAgICBpZiAoZWxlbWVudC50YWdRTmFtZSgpICE9IHN0
YXRlLmVsZW1lbnQoKS0+dGFnUU5hbWUoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIGlm
IChlbGVtZW50LT5pbmxpbmVTdHlsZSgpKQorICAgIGlmIChlbGVtZW50LmlubGluZVN0eWxlKCkp
CiAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBpZiAoZWxlbWVudC0+bmVlZHNTdHlsZVJlY2Fs
YygpKQorICAgIGlmIChlbGVtZW50Lm5lZWRzU3R5bGVSZWNhbGMoKSkKICAgICAgICAgcmV0dXJu
IGZhbHNlOwotICAgIGlmIChlbGVtZW50LT5pc1NWR0VsZW1lbnQoKSAmJiBkb3duY2FzdDxTVkdF
bGVtZW50PigqZWxlbWVudCkuYW5pbWF0ZWRTTUlMU3R5bGVQcm9wZXJ0aWVzKCkpCisgICAgaWYg
KGVsZW1lbnQuaXNTVkdFbGVtZW50KCkgJiYgZG93bmNhc3Q8U1ZHRWxlbWVudD4oZWxlbWVudCku
YW5pbWF0ZWRTTUlMU3R5bGVQcm9wZXJ0aWVzKCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKLSAg
ICBpZiAoZWxlbWVudC0+aXNMaW5rKCkgIT0gc3RhdGUuZWxlbWVudCgpLT5pc0xpbmsoKSkKKyAg
ICBpZiAoZWxlbWVudC5pc0xpbmsoKSAhPSBzdGF0ZS5lbGVtZW50KCktPmlzTGluaygpKQogICAg
ICAgICByZXR1cm4gZmFsc2U7Ci0gICAgaWYgKGVsZW1lbnQtPmhvdmVyZWQoKSAhPSBzdGF0ZS5l
bGVtZW50KCktPmhvdmVyZWQoKSkKKyAgICBpZiAoZWxlbWVudC5ob3ZlcmVkKCkgIT0gc3RhdGUu
ZWxlbWVudCgpLT5ob3ZlcmVkKCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBpZiAoZWxl
bWVudC0+YWN0aXZlKCkgIT0gc3RhdGUuZWxlbWVudCgpLT5hY3RpdmUoKSkKKyAgICBpZiAoZWxl
bWVudC5hY3RpdmUoKSAhPSBzdGF0ZS5lbGVtZW50KCktPmFjdGl2ZSgpKQogICAgICAgICByZXR1
cm4gZmFsc2U7Ci0gICAgaWYgKGVsZW1lbnQtPmZvY3VzZWQoKSAhPSBzdGF0ZS5lbGVtZW50KCkt
PmZvY3VzZWQoKSkKKyAgICBpZiAoZWxlbWVudC5mb2N1c2VkKCkgIT0gc3RhdGUuZWxlbWVudCgp
LT5mb2N1c2VkKCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBpZiAoZWxlbWVudC0+c2hh
ZG93UHNldWRvSWQoKSAhPSBzdGF0ZS5lbGVtZW50KCktPnNoYWRvd1BzZXVkb0lkKCkpCisgICAg
aWYgKGVsZW1lbnQuc2hhZG93UHNldWRvSWQoKSAhPSBzdGF0ZS5lbGVtZW50KCktPnNoYWRvd1Bz
ZXVkb0lkKCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBpZiAoZWxlbWVudCA9PSBlbGVt
ZW50LT5kb2N1bWVudCgpLmNzc1RhcmdldCgpKQorICAgIGlmICgmZWxlbWVudCA9PSBlbGVtZW50
LmRvY3VtZW50KCkuY3NzVGFyZ2V0KCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICBpZiAo
IXNoYXJpbmdDYW5kaWRhdGVIYXNJZGVudGljYWxTdHlsZUFmZmVjdGluZ0F0dHJpYnV0ZXMoZWxl
bWVudCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBpZiAoZWxlbWVudC0+YWRkaXRpb25h
bFByZXNlbnRhdGlvbkF0dHJpYnV0ZVN0eWxlKCkgIT0gc3RhdGUuc3R5bGVkRWxlbWVudCgpLT5h
ZGRpdGlvbmFsUHJlc2VudGF0aW9uQXR0cmlidXRlU3R5bGUoKSkKKyAgICBpZiAoZWxlbWVudC5h
ZGRpdGlvbmFsUHJlc2VudGF0aW9uQXR0cmlidXRlU3R5bGUoKSAhPSBzdGF0ZS5zdHlsZWRFbGVt
ZW50KCktPmFkZGl0aW9uYWxQcmVzZW50YXRpb25BdHRyaWJ1dGVTdHlsZSgpKQogICAgICAgICBy
ZXR1cm4gZmFsc2U7Ci0gICAgaWYgKGVsZW1lbnQtPmFmZmVjdHNOZXh0U2libGluZ0VsZW1lbnRT
dHlsZSgpIHx8IGVsZW1lbnQtPnN0eWxlSXNBZmZlY3RlZEJ5UHJldmlvdXNTaWJsaW5nKCkpCisg
ICAgaWYgKGVsZW1lbnQuYWZmZWN0c05leHRTaWJsaW5nRWxlbWVudFN0eWxlKCkgfHwgZWxlbWVu
dC5zdHlsZUlzQWZmZWN0ZWRCeVByZXZpb3VzU2libGluZygpKQogICAgICAgICByZXR1cm4gZmFs
c2U7CiAKLSAgICBpZiAoZWxlbWVudC0+aGFzSUQoKSAmJiBtX3J1bGVTZXRzLmZlYXR1cmVzKCku
aWRzSW5SdWxlcy5jb250YWlucyhlbGVtZW50LT5pZEZvclN0eWxlUmVzb2x1dGlvbigpLmltcGwo
KSkpCisgICAgaWYgKGVsZW1lbnQuaGFzSUQoKSAmJiBtX3J1bGVTZXRzLmZlYXR1cmVzKCkuaWRz
SW5SdWxlcy5jb250YWlucyhlbGVtZW50LmlkRm9yU3R5bGVSZXNvbHV0aW9uKCkuaW1wbCgpKSkK
ICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgYm9vbCBpc0NvbnRyb2wgPSBpczxIVE1MRm9y
bUNvbnRyb2xFbGVtZW50PigqZWxlbWVudCk7CisgICAgYm9vbCBpc0NvbnRyb2wgPSBpczxIVE1M
Rm9ybUNvbnRyb2xFbGVtZW50PihlbGVtZW50KTsKIAogICAgIGlmIChpc0NvbnRyb2wgIT0gaXM8
SFRNTEZvcm1Db250cm9sRWxlbWVudD4oKnN0YXRlLmVsZW1lbnQoKSkpCiAgICAgICAgIHJldHVy
biBmYWxzZTsKQEAgLTYwOCwzMSArNjA4LDMxIEBAIGJvb2wgU3R5bGVSZXNvbHZlcjo6Y2FuU2hh
cmVTdHlsZVdpdGhFbGVtZW50KFN0eWxlZEVsZW1lbnQqIGVsZW1lbnQpIGNvbnN0CiAKICAgICAv
LyBUdXJuIG9mZiBzdHlsZSBzaGFyaW5nIGZvciBlbGVtZW50cyB0aGF0IGNhbiBnYWluIGxheWVy
cyBmb3IgcmVhc29ucyBvdXRzaWRlIG9mIHRoZSBzdHlsZSBzeXN0ZW0uCiAgICAgLy8gU2VlIGNv
bW1lbnRzIGluIFJlbmRlck9iamVjdDo6c2V0U3R5bGUoKS4KLSAgICBpZiAoZWxlbWVudC0+aGFz
VGFnTmFtZShpZnJhbWVUYWcpIHx8IGVsZW1lbnQtPmhhc1RhZ05hbWUoZnJhbWVUYWcpIHx8IGVs
ZW1lbnQtPmhhc1RhZ05hbWUoZW1iZWRUYWcpIHx8IGVsZW1lbnQtPmhhc1RhZ05hbWUob2JqZWN0
VGFnKSB8fCBlbGVtZW50LT5oYXNUYWdOYW1lKGFwcGxldFRhZykgfHwgZWxlbWVudC0+aGFzVGFn
TmFtZShjYW52YXNUYWcpKQorICAgIGlmIChlbGVtZW50Lmhhc1RhZ05hbWUoaWZyYW1lVGFnKSB8
fCBlbGVtZW50Lmhhc1RhZ05hbWUoZnJhbWVUYWcpIHx8IGVsZW1lbnQuaGFzVGFnTmFtZShlbWJl
ZFRhZykgfHwgZWxlbWVudC5oYXNUYWdOYW1lKG9iamVjdFRhZykgfHwgZWxlbWVudC5oYXNUYWdO
YW1lKGFwcGxldFRhZykgfHwgZWxlbWVudC5oYXNUYWdOYW1lKGNhbnZhc1RhZykpCiAgICAgICAg
IHJldHVybiBmYWxzZTsKIAogICAgIGlmIChlbGVtZW50SGFzRGlyZWN0aW9uQXV0byhlbGVtZW50
KSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgaWYgKGVsZW1lbnQtPmlzTGluaygpICYm
IHN0YXRlLmVsZW1lbnRMaW5rU3RhdGUoKSAhPSBzdHlsZS0+aW5zaWRlTGluaygpKQorICAgIGlm
IChlbGVtZW50LmlzTGluaygpICYmIHN0YXRlLmVsZW1lbnRMaW5rU3RhdGUoKSAhPSBzdHlsZS0+
aW5zaWRlTGluaygpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBpZiAoZWxlbWVudC0+
ZWxlbWVudERhdGEoKSAhPSBzdGF0ZS5lbGVtZW50KCktPmVsZW1lbnREYXRhKCkpIHsKLSAgICAg
ICAgaWYgKGVsZW1lbnQtPmZhc3RHZXRBdHRyaWJ1dGUocmVhZG9ubHlBdHRyKSAhPSBzdGF0ZS5l
bGVtZW50KCktPmZhc3RHZXRBdHRyaWJ1dGUocmVhZG9ubHlBdHRyKSkKKyAgICBpZiAoZWxlbWVu
dC5lbGVtZW50RGF0YSgpICE9IHN0YXRlLmVsZW1lbnQoKS0+ZWxlbWVudERhdGEoKSkgeworICAg
ICAgICBpZiAoZWxlbWVudC5mYXN0R2V0QXR0cmlidXRlKHJlYWRvbmx5QXR0cikgIT0gc3RhdGUu
ZWxlbWVudCgpLT5mYXN0R2V0QXR0cmlidXRlKHJlYWRvbmx5QXR0cikpCiAgICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7Ci0gICAgICAgIGlmIChlbGVtZW50LT5pc1NWR0VsZW1lbnQoKSkgewotICAg
ICAgICAgICAgaWYgKGVsZW1lbnQtPmdldEF0dHJpYnV0ZSh0eXBlQXR0cikgIT0gc3RhdGUuZWxl
bWVudCgpLT5nZXRBdHRyaWJ1dGUodHlwZUF0dHIpKQorICAgICAgICBpZiAoZWxlbWVudC5pc1NW
R0VsZW1lbnQoKSkgeworICAgICAgICAgICAgaWYgKGVsZW1lbnQuZ2V0QXR0cmlidXRlKHR5cGVB
dHRyKSAhPSBzdGF0ZS5lbGVtZW50KCktPmdldEF0dHJpYnV0ZSh0eXBlQXR0cikpCiAgICAgICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgaWYg
KGVsZW1lbnQtPmZhc3RHZXRBdHRyaWJ1dGUodHlwZUF0dHIpICE9IHN0YXRlLmVsZW1lbnQoKS0+
ZmFzdEdldEF0dHJpYnV0ZSh0eXBlQXR0cikpCisgICAgICAgICAgICBpZiAoZWxlbWVudC5mYXN0
R2V0QXR0cmlidXRlKHR5cGVBdHRyKSAhPSBzdGF0ZS5lbGVtZW50KCktPmZhc3RHZXRBdHRyaWJ1
dGUodHlwZUF0dHIpKQogICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgfQog
ICAgIH0KIAotICAgIGlmIChlbGVtZW50LT5tYXRjaGVzVmFsaWRQc2V1ZG9DbGFzcygpICE9IHN0
YXRlLmVsZW1lbnQoKS0+bWF0Y2hlc1ZhbGlkUHNldWRvQ2xhc3MoKSkKKyAgICBpZiAoZWxlbWVu
dC5tYXRjaGVzVmFsaWRQc2V1ZG9DbGFzcygpICE9IHN0YXRlLmVsZW1lbnQoKS0+bWF0Y2hlc1Zh
bGlkUHNldWRvQ2xhc3MoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgaWYgKGVsZW1l
bnQtPm1hdGNoZXNJbnZhbGlkUHNldWRvQ2xhc3MoKSAhPSBzdGF0ZS5lbGVtZW50KCktPm1hdGNo
ZXNWYWxpZFBzZXVkb0NsYXNzKCkpCisgICAgaWYgKGVsZW1lbnQubWF0Y2hlc0ludmFsaWRQc2V1
ZG9DbGFzcygpICE9IHN0YXRlLmVsZW1lbnQoKS0+bWF0Y2hlc1ZhbGlkUHNldWRvQ2xhc3MoKSkK
ICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAjaWYgRU5BQkxFKFZJREVPX1RSQUNLKQpAQCAtNjQy
LDcgKzY0Miw3IEBAIGJvb2wgU3R5bGVSZXNvbHZlcjo6Y2FuU2hhcmVTdHlsZVdpdGhFbGVtZW50
KFN0eWxlZEVsZW1lbnQqIGVsZW1lbnQpIGNvbnN0CiAjZW5kaWYKIAogI2lmIEVOQUJMRShGVUxM
U0NSRUVOX0FQSSkKLSAgICBpZiAoZWxlbWVudCA9PSBlbGVtZW50LT5kb2N1bWVudCgpLndlYmtp
dEN1cnJlbnRGdWxsU2NyZWVuRWxlbWVudCgpIHx8IHN0YXRlLmVsZW1lbnQoKSA9PSBzdGF0ZS5k
b2N1bWVudCgpLndlYmtpdEN1cnJlbnRGdWxsU2NyZWVuRWxlbWVudCgpKQorICAgIGlmICgmZWxl
bWVudCA9PSBlbGVtZW50LmRvY3VtZW50KCkud2Via2l0Q3VycmVudEZ1bGxTY3JlZW5FbGVtZW50
KCkgfHwgc3RhdGUuZWxlbWVudCgpID09IHN0YXRlLmRvY3VtZW50KCkud2Via2l0Q3VycmVudEZ1
bGxTY3JlZW5FbGVtZW50KCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKICNlbmRpZgogICAgIHJl
dHVybiB0cnVlOwpAQCAtNjUzLDcgKzY1Myw3IEBAIGlubGluZSBTdHlsZWRFbGVtZW50KiBTdHls
ZVJlc29sdmVyOjpmaW5kU2libGluZ0ZvclN0eWxlU2hhcmluZyhOb2RlKiBub2RlLCB1bnNpCiAg
ICAgZm9yICg7IG5vZGU7IG5vZGUgPSBub2RlLT5wcmV2aW91c1NpYmxpbmcoKSkgewogICAgICAg
ICBpZiAoIWlzPFN0eWxlZEVsZW1lbnQ+KCpub2RlKSkKICAgICAgICAgICAgIGNvbnRpbnVlOwot
ICAgICAgICBpZiAoY2FuU2hhcmVTdHlsZVdpdGhFbGVtZW50KGRvd25jYXN0PFN0eWxlZEVsZW1l
bnQ+KG5vZGUpKSkKKyAgICAgICAgaWYgKGNhblNoYXJlU3R5bGVXaXRoRWxlbWVudChkb3duY2Fz
dDxTdHlsZWRFbGVtZW50Pigqbm9kZSkpKQogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGlm
IChjb3VudCsrID09IGNTdHlsZVNlYXJjaFRocmVzaG9sZCkKICAgICAgICAgICAgIHJldHVybiBu
dWxscHRyOwpAQCAtNjc5LDcgKzY3OSw3IEBAIFJlbmRlclN0eWxlKiBTdHlsZVJlc29sdmVyOjps
b2NhdGVTaGFyZWRTdHlsZSgpCiAgICAgICAgIHJldHVybiBudWxscHRyOwogICAgIGlmIChzdGF0
ZS5lbGVtZW50KCkgPT0gc3RhdGUuZG9jdW1lbnQoKS5jc3NUYXJnZXQoKSkKICAgICAgICAgcmV0
dXJuIG51bGxwdHI7Ci0gICAgaWYgKGVsZW1lbnRIYXNEaXJlY3Rpb25BdXRvKHN0YXRlLmVsZW1l
bnQoKSkpCisgICAgaWYgKGVsZW1lbnRIYXNEaXJlY3Rpb25BdXRvKCpzdGF0ZS5lbGVtZW50KCkp
KQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKIAogICAgIC8vIENhY2hlIHdoZXRoZXIgc3RhdGUu
ZWxlbWVudCBpcyBhZmZlY3RlZCBieSBhbnkga25vd24gY2xhc3Mgc2VsZWN0b3JzLgpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvY3NzL1N0eWxlUmVzb2x2ZXIuaCBiL1NvdXJjZS9XZWJDb3Jl
L2Nzcy9TdHlsZVJlc29sdmVyLmgKaW5kZXggYWU3MWE2NzI2NmRlNDA3N2NmY2RlZjI5MTVhNzZh
MTViMTNhMWEzOC4uY2VjODIzYTg3MmQ5ZWZiYzY4M2YxYzE4NzJiZTc5YjE4ODg5NTMyOCAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvY3NzL1N0eWxlUmVzb2x2ZXIuaAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9jc3MvU3R5bGVSZXNvbHZlci5oCkBAIC0xODMsNyArMTgzLDcgQEAgcHJpdmF0ZToK
ICAgICBib29sIHN0eWxlU2hhcmluZ0NhbmRpZGF0ZU1hdGNoZXNSdWxlU2V0KFJ1bGVTZXQqKTsK
ICAgICBOb2RlKiBsb2NhdGVDb3VzaW5MaXN0KEVsZW1lbnQqIHBhcmVudCwgdW5zaWduZWQmIHZp
c2l0ZWROb2RlQ291bnQpIGNvbnN0OwogICAgIFN0eWxlZEVsZW1lbnQqIGZpbmRTaWJsaW5nRm9y
U3R5bGVTaGFyaW5nKE5vZGUqLCB1bnNpZ25lZCYgY291bnQpIGNvbnN0OwotICAgIGJvb2wgY2Fu
U2hhcmVTdHlsZVdpdGhFbGVtZW50KFN0eWxlZEVsZW1lbnQqKSBjb25zdDsKKyAgICBib29sIGNh
blNoYXJlU3R5bGVXaXRoRWxlbWVudChTdHlsZWRFbGVtZW50JikgY29uc3Q7CiAKICAgICBSZWY8
UmVuZGVyU3R5bGU+IHN0eWxlRm9yS2V5ZnJhbWUoY29uc3QgUmVuZGVyU3R5bGUqLCBjb25zdCBT
dHlsZUtleWZyYW1lKiwgS2V5ZnJhbWVWYWx1ZSYpOwogCkBAIC01MzAsNyArNTMwLDcgQEAgcHJp
dmF0ZToKIAogICAgIHZvaWQgY2FjaGVCb3JkZXJBbmRCYWNrZ3JvdW5kKCk7CiAKLSAgICBib29s
IGNhblNoYXJlU3R5bGVXaXRoQ29udHJvbChTdHlsZWRFbGVtZW50KikgY29uc3Q7CisgICAgYm9v
bCBjYW5TaGFyZVN0eWxlV2l0aENvbnRyb2woU3R5bGVkRWxlbWVudCYpIGNvbnN0OwogCiAgICAg
dm9pZCBhcHBseVByb3BlcnR5KENTU1Byb3BlcnR5SUQsIENTU1ZhbHVlKiwgU2VsZWN0b3JDaGVj
a2VyOjpMaW5rTWF0Y2hNYXNrID0gU2VsZWN0b3JDaGVja2VyOjpNYXRjaERlZmF1bHQsIGNvbnN0
IE1hdGNoUmVzdWx0KiA9IG51bGxwdHIpOwogICAgIFJlZlB0cjxDU1NWYWx1ZT4gcmVzb2x2ZWRW
YXJpYWJsZVZhbHVlKENTU1Byb3BlcnR5SUQsIGNvbnN0IENTU1ZhcmlhYmxlRGVwZW5kZW50VmFs
dWUmKTsKQEAgLTU1OSw3ICs1NTksNyBAQCBwcml2YXRlOgogICAgIHZvaWQgc3dlZXBNYXRjaGVk
UHJvcGVydGllc0NhY2hlKCk7CiAKICAgICBib29sIGNsYXNzTmFtZXNBZmZlY3RlZEJ5UnVsZXMo
Y29uc3QgU3BhY2VTcGxpdFN0cmluZyYpIGNvbnN0OwotICAgIGJvb2wgc2hhcmluZ0NhbmRpZGF0
ZUhhc0lkZW50aWNhbFN0eWxlQWZmZWN0aW5nQXR0cmlidXRlcyhTdHlsZWRFbGVtZW50KikgY29u
c3Q7CisgICAgYm9vbCBzaGFyaW5nQ2FuZGlkYXRlSGFzSWRlbnRpY2FsU3R5bGVBZmZlY3RpbmdB
dHRyaWJ1dGVzKFN0eWxlZEVsZW1lbnQmKSBjb25zdDsKIAogICAgIHVuc2lnbmVkIG1fbWF0Y2hl
ZFByb3BlcnRpZXNDYWNoZUFkZGl0aW9uc1NpbmNlTGFzdFN3ZWVwOwogCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9kb20vTm9kZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9kb20vTm9kZS5jcHAK
aW5kZXggNTQwNDUxNzk2MzYyNjVlODU2YmVjYzhkYTM2ZDhlYjlmYzNhZWNlNi4uNmE1YzJjMGY3
YzIxMWI2NmRjMTVkM2JhNDcwZjhlNTk4MWFiMDVhZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvZG9tL05vZGUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9Ob2RlLmNwcApAQCAtMzU3
LDE1ICszNTcsNiBAQCBOb2RlKiBOb2RlOjp0b05vZGUoKQogICAgIHJldHVybiB0aGlzOwogfQog
Ci1IVE1MSW5wdXRFbGVtZW50KiBOb2RlOjp0b0lucHV0RWxlbWVudCgpCi17Ci0gICAgLy8gSWYg
b25lIG9mIHRoZSBiZWxvdyBBU1NFUlRzIHRyaWdnZXIsIHlvdSBhcmUgY2FsbGluZyB0aGlzIGZ1
bmN0aW9uCi0gICAgLy8gZGlyZWN0bHkgb3IgaW5kaXJlY3RseSBmcm9tIGEgY29uc3RydWN0b3Ig
b3IgZGVzdHJ1Y3RvciBvZiB0aGlzIG9iamVjdC4KLSAgICAvLyBEb24ndCBkbyB0aGlzIQotICAg
IEFTU0VSVCghKGlzSFRNTEVsZW1lbnQoKSAmJiBoYXNUYWdOYW1lKGlucHV0VGFnKSkpOwotICAg
IHJldHVybiAwOwotfQotCiBTdHJpbmcgTm9kZTo6bm9kZVZhbHVlKCkgY29uc3QKIHsKICAgICBy
ZXR1cm4gU3RyaW5nKCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vTm9kZS5oIGIv
U291cmNlL1dlYkNvcmUvZG9tL05vZGUuaAppbmRleCA2YTE5M2FhMjYzODkxZTEwNDM2ODQ4YzQ2
YzJiNTU5OGE4YmNiMzc4Li45ZTE1NDY3YTg3Y2NmMWNiOGI2NWIwMDE3OGRlYTY1NWRjZWRmMjZl
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20vTm9kZS5oCisrKyBiL1NvdXJjZS9XZWJD
b3JlL2RvbS9Ob2RlLmgKQEAgLTUxMiw4ICs1MTIsNiBAQCBwdWJsaWM6CiAgICAgV0VCQ09SRV9F
WFBPUlQgdW5zaWduZWQgc2hvcnQgY29tcGFyZURvY3VtZW50UG9zaXRpb24oTm9kZSopOwogCiAg
ICAgdmlydHVhbCBOb2RlKiB0b05vZGUoKSBvdmVycmlkZTsKLSAgICB2aXJ0dWFsIEhUTUxJbnB1
dEVsZW1lbnQqIHRvSW5wdXRFbGVtZW50KCk7Ci0gICAgY29uc3QgSFRNTElucHV0RWxlbWVudCog
dG9JbnB1dEVsZW1lbnQoKSBjb25zdCB7IHJldHVybiBjb25zdF9jYXN0PE5vZGUqPih0aGlzKS0+
dG9JbnB1dEVsZW1lbnQoKTsgfQogCiAgICAgdmlydHVhbCBFdmVudFRhcmdldEludGVyZmFjZSBl
dmVudFRhcmdldEludGVyZmFjZSgpIGNvbnN0IG92ZXJyaWRlOwogICAgIHZpcnR1YWwgU2NyaXB0
RXhlY3V0aW9uQ29udGV4dCogc2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpIGNvbnN0IG92ZXJyaWRl
IGZpbmFsOyAvLyBJbXBsZW1lbnRlZCBpbiBEb2N1bWVudC5oCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9lZGl0aW5nL1RleHRJdGVyYXRvci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5n
L1RleHRJdGVyYXRvci5jcHAKaW5kZXggYjg3MGEzYTBhMDAzYjkyNThkMGYzMjQ1ZmQ0YWIzZjJi
NzFlMmJkNy4uNjQyYWQwZTlhZGQxZGY1ZDg0ZTA3MTk2MjYzNmQxNDI4YWRiY2M5NyAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9UZXh0SXRlcmF0b3IuY3BwCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL2VkaXRpbmcvVGV4dEl0ZXJhdG9yLmNwcApAQCAtODU4LDcgKzg1OCw3IEBAIHN0
YXRpYyBib29sIHNob3VsZEVtaXROZXdsaW5lRm9yTm9kZShOb2RlKiBub2RlLCBib29sIGVtaXRz
T3JpZ2luYWxUZXh0KQogICAgIGF1dG8qIHJlbmRlcmVyID0gbm9kZS0+cmVuZGVyZXIoKTsKICAg
ICBpZiAoIShyZW5kZXJlciA/IHJlbmRlcmVyLT5pc0JSKCkgOiBub2RlLT5oYXNUYWdOYW1lKGJy
VGFnKSkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICByZXR1cm4gZW1pdHNPcmlnaW5hbFRl
eHQgfHwgIShub2RlLT5pc0luU2hhZG93VHJlZSgpICYmIG5vZGUtPnNoYWRvd0hvc3QoKS0+dG9J
bnB1dEVsZW1lbnQoKSk7CisgICAgcmV0dXJuIGVtaXRzT3JpZ2luYWxUZXh0IHx8ICEobm9kZS0+
aXNJblNoYWRvd1RyZWUoKSAmJiBpczxIVE1MSW5wdXRFbGVtZW50Pigqbm9kZS0+c2hhZG93SG9z
dCgpKSk7CiB9CiAKIHN0YXRpYyBib29sIGhhc0hlYWRlclRhZyhIVE1MRWxlbWVudCYgZWxlbWVu
dCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTElucHV0RWxlbWVudC5oIGIv
U291cmNlL1dlYkNvcmUvaHRtbC9IVE1MSW5wdXRFbGVtZW50LmgKaW5kZXggYmJiZDMzNjg4YmQ3
YzE0NzIxNDk5ZjNiYmZlYTA3ZjMwOTU0NzE5YS4uNTA1NDlmNGI2NzNiZWNhNTg2N2FlODMxNmY5
ZWZjZjdlZGFlZTQ0NCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MSW5wdXRF
bGVtZW50LmgKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MSW5wdXRFbGVtZW50LmgKQEAg
LTY2LDggKzY2LDYgQEAgcHVibGljOgogICAgIHN0YXRpYyBSZWY8SFRNTElucHV0RWxlbWVudD4g
Y3JlYXRlKGNvbnN0IFF1YWxpZmllZE5hbWUmLCBEb2N1bWVudCYsIEhUTUxGb3JtRWxlbWVudCos
IGJvb2wgY3JlYXRlZEJ5UGFyc2VyKTsKICAgICB2aXJ0dWFsIH5IVE1MSW5wdXRFbGVtZW50KCk7
CiAKLSAgICB2aXJ0dWFsIEhUTUxJbnB1dEVsZW1lbnQqIHRvSW5wdXRFbGVtZW50KCkgb3ZlcnJp
ZGUgZmluYWwgeyByZXR1cm4gdGhpczsgfQotCiAgICAgV0VCQ09SRV9FWFBPUlQgdmlydHVhbCBi
b29sIHNob3VsZEF1dG9jb21wbGV0ZSgpIGNvbnN0IG92ZXJyaWRlIGZpbmFsOwogCiAgICAgLy8g
Rm9yIFZhbGlkaXR5U3RhdGUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvUmFkaW9O
b2RlTGlzdC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL1JhZGlvTm9kZUxpc3QuY3BwCmluZGV4
IDVlNDAyNWVjYzA4ZDUzNjkzMDMzZDMwN2ZkMjVmZGEzMjZkZTYyNDEuLjI4MjVmZjJkNzZiMTBl
NjA2N2ExN2ZlNzhlN2I4OTFjOWY5Y2VhN2EgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0
bWwvUmFkaW9Ob2RlTGlzdC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9SYWRpb05vZGVM
aXN0LmNwcApAQCAtNTAsMjAgKzUwLDIyIEBAIFJhZGlvTm9kZUxpc3Q6On5SYWRpb05vZGVMaXN0
KCkKICAgICBvd25lck5vZGUoKS5ub2RlTGlzdHMoKS0+cmVtb3ZlQ2FjaGVXaXRoQXRvbWljTmFt
ZSh0aGlzLCBtX25hbWUpOwogfQogCi1zdGF0aWMgaW5saW5lIEhUTUxJbnB1dEVsZW1lbnQqIHRv
UmFkaW9CdXR0b25JbnB1dEVsZW1lbnQoTm9kZSogbm9kZSkKK3N0YXRpYyBpbmxpbmUgSFRNTElu
cHV0RWxlbWVudCogdG9SYWRpb0J1dHRvbklucHV0RWxlbWVudChOb2RlJiBub2RlKQogewotICAg
IEFTU0VSVChub2RlLT5pc0VsZW1lbnROb2RlKCkpOwotICAgIEhUTUxJbnB1dEVsZW1lbnQqIGlu
cHV0RWxlbWVudCA9IG5vZGUtPnRvSW5wdXRFbGVtZW50KCk7Ci0gICAgaWYgKCFpbnB1dEVsZW1l
bnQgfHwgIWlucHV0RWxlbWVudC0+aXNSYWRpb0J1dHRvbigpIHx8IGlucHV0RWxlbWVudC0+dmFs
dWUoKS5pc0VtcHR5KCkpCi0gICAgICAgIHJldHVybiAwOwotICAgIHJldHVybiBpbnB1dEVsZW1l
bnQ7CisgICAgaWYgKCFpczxIVE1MSW5wdXRFbGVtZW50Pihub2RlKSkKKyAgICAgICAgcmV0dXJu
IG51bGxwdHI7CisKKyAgICBhdXRvJiBpbnB1dEVsZW1lbnQgPSBkb3duY2FzdDxIVE1MSW5wdXRF
bGVtZW50Pihub2RlKTsKKyAgICBpZiAoIWlucHV0RWxlbWVudC5pc1JhZGlvQnV0dG9uKCkgfHwg
aW5wdXRFbGVtZW50LnZhbHVlKCkuaXNFbXB0eSgpKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsK
KyAgICByZXR1cm4gJmlucHV0RWxlbWVudDsKIH0KIAogU3RyaW5nIFJhZGlvTm9kZUxpc3Q6OnZh
bHVlKCkgY29uc3QKIHsKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbGVuZ3RoKCk7ICsr
aSkgewotICAgICAgICBOb2RlKiBub2RlID0gaXRlbShpKTsKLSAgICAgICAgY29uc3QgSFRNTElu
cHV0RWxlbWVudCogaW5wdXRFbGVtZW50ID0gdG9SYWRpb0J1dHRvbklucHV0RWxlbWVudChub2Rl
KTsKKyAgICBhdXRvIGxlbmd0aCA9IHRoaXMtPmxlbmd0aCgpOworICAgIGZvciAodW5zaWduZWQg
aSA9IDA7IGkgPCBsZW5ndGg7ICsraSkgeworICAgICAgICBhdXRvKiBpbnB1dEVsZW1lbnQgPSB0
b1JhZGlvQnV0dG9uSW5wdXRFbGVtZW50KCppdGVtKGkpKTsKICAgICAgICAgaWYgKCFpbnB1dEVs
ZW1lbnQgfHwgIWlucHV0RWxlbWVudC0+Y2hlY2tlZCgpKQogICAgICAgICAgICAgY29udGludWU7
CiAgICAgICAgIHJldHVybiBpbnB1dEVsZW1lbnQtPnZhbHVlKCk7CkBAIC03Myw5ICs3NSw5IEBA
IFN0cmluZyBSYWRpb05vZGVMaXN0Ojp2YWx1ZSgpIGNvbnN0CiAKIHZvaWQgUmFkaW9Ob2RlTGlz
dDo6c2V0VmFsdWUoY29uc3QgU3RyaW5nJiB2YWx1ZSkKIHsKLSAgICBmb3IgKHVuc2lnbmVkIGkg
PSAwOyBpIDwgbGVuZ3RoKCk7ICsraSkgewotICAgICAgICBOb2RlKiBub2RlID0gaXRlbShpKTsK
LSAgICAgICAgSFRNTElucHV0RWxlbWVudCogaW5wdXRFbGVtZW50ID0gdG9SYWRpb0J1dHRvbklu
cHV0RWxlbWVudChub2RlKTsKKyAgICBhdXRvIGxlbmd0aCA9IHRoaXMtPmxlbmd0aCgpOworICAg
IGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBsZW5ndGg7ICsraSkgeworICAgICAgICBhdXRvKiBp
bnB1dEVsZW1lbnQgPSB0b1JhZGlvQnV0dG9uSW5wdXRFbGVtZW50KCppdGVtKGkpKTsKICAgICAg
ICAgaWYgKCFpbnB1dEVsZW1lbnQgfHwgaW5wdXRFbGVtZW50LT52YWx1ZSgpICE9IHZhbHVlKQog
ICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgIGlucHV0RWxlbWVudC0+c2V0Q2hlY2tlZCh0
cnVlKTsKQEAgLTEwNCwxMCArMTA2LDggQEAgYm9vbCBSYWRpb05vZGVMaXN0OjplbGVtZW50TWF0
Y2hlcyhFbGVtZW50JiB0ZXN0RWxlbWVudCkgY29uc3QKICAgICBpZiAoIWlzPEhUTUxPYmplY3RF
bGVtZW50Pih0ZXN0RWxlbWVudCkgJiYgIWlzPEhUTUxGb3JtQ29udHJvbEVsZW1lbnQ+KHRlc3RF
bGVtZW50KSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgaWYgKEhUTUxJbnB1dEVsZW1l
bnQqIGlucHV0RWxlbWVudCA9IHRlc3RFbGVtZW50LnRvSW5wdXRFbGVtZW50KCkpIHsKLSAgICAg
ICAgaWYgKGlucHV0RWxlbWVudC0+aXNJbWFnZUJ1dHRvbigpKQotICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOwotICAgIH0KKyAgICBpZiAoaXM8SFRNTElucHV0RWxlbWVudD4odGVzdEVsZW1lbnQp
ICYmIGRvd25jYXN0PEhUTUxJbnB1dEVsZW1lbnQ+KHRlc3RFbGVtZW50KS5pc0ltYWdlQnV0dG9u
KCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgIHJldHVybiBjaGVja0VsZW1lbnRNYXRj
aGVzUmFkaW9Ob2RlTGlzdEZpbHRlcih0ZXN0RWxlbWVudCk7CiB9CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9odG1sL3NoYWRvdy9TbGlkZXJUaHVtYkVsZW1lbnQuY3BwIGIvU291cmNlL1dl
YkNvcmUvaHRtbC9zaGFkb3cvU2xpZGVyVGh1bWJFbGVtZW50LmNwcAppbmRleCAyY2FjNmY0Yzg4
MDg5MjI2ODYzZTM1ZTEyZWJkOTg2MTNlNTczZjY4Li4yNDc1NGRhYzhhM2MyZWMzOGQwOTg0N2Yw
MjIxMWYyMGQwYjM5YmRlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL3NoYWRvdy9T
bGlkZXJUaHVtYkVsZW1lbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvc2hhZG93L1Ns
aWRlclRodW1iRWxlbWVudC5jcHAKQEAgLTU1LDIwICs1NSwyMCBAQCBuYW1lc3BhY2UgV2ViQ29y
ZSB7CiAKIHVzaW5nIG5hbWVzcGFjZSBIVE1MTmFtZXM7CiAKLWlubGluZSBzdGF0aWMgRGVjaW1h
bCBzbGlkZXJQb3NpdGlvbihIVE1MSW5wdXRFbGVtZW50KiBlbGVtZW50KQoraW5saW5lIHN0YXRp
YyBEZWNpbWFsIHNsaWRlclBvc2l0aW9uKEhUTUxJbnB1dEVsZW1lbnQmIGVsZW1lbnQpCiB7Ci0g
ICAgY29uc3QgU3RlcFJhbmdlIHN0ZXBSYW5nZShlbGVtZW50LT5jcmVhdGVTdGVwUmFuZ2UoUmVq
ZWN0QW55KSk7Ci0gICAgY29uc3QgRGVjaW1hbCBvbGRWYWx1ZSA9IHBhcnNlVG9EZWNpbWFsRm9y
TnVtYmVyVHlwZShlbGVtZW50LT52YWx1ZSgpLCBzdGVwUmFuZ2UuZGVmYXVsdFZhbHVlKCkpOwor
ICAgIGNvbnN0IFN0ZXBSYW5nZSBzdGVwUmFuZ2UoZWxlbWVudC5jcmVhdGVTdGVwUmFuZ2UoUmVq
ZWN0QW55KSk7CisgICAgY29uc3QgRGVjaW1hbCBvbGRWYWx1ZSA9IHBhcnNlVG9EZWNpbWFsRm9y
TnVtYmVyVHlwZShlbGVtZW50LnZhbHVlKCksIHN0ZXBSYW5nZS5kZWZhdWx0VmFsdWUoKSk7CiAg
ICAgcmV0dXJuIHN0ZXBSYW5nZS5wcm9wb3J0aW9uRnJvbVZhbHVlKHN0ZXBSYW5nZS5jbGFtcFZh
bHVlKG9sZFZhbHVlKSk7CiB9CiAKLWlubGluZSBzdGF0aWMgYm9vbCBoYXNWZXJ0aWNhbEFwcGVh
cmFuY2UoSFRNTElucHV0RWxlbWVudCogaW5wdXQpCitpbmxpbmUgc3RhdGljIGJvb2wgaGFzVmVy
dGljYWxBcHBlYXJhbmNlKEhUTUxJbnB1dEVsZW1lbnQmIGlucHV0KQogewotICAgIEFTU0VSVChp
bnB1dC0+cmVuZGVyZXIoKSk7Ci0gICAgY29uc3QgUmVuZGVyU3R5bGUmIHNsaWRlclN0eWxlID0g
aW5wdXQtPnJlbmRlcmVyKCktPnN0eWxlKCk7CisgICAgQVNTRVJUKGlucHV0LnJlbmRlcmVyKCkp
OworICAgIGNvbnN0IFJlbmRlclN0eWxlJiBzbGlkZXJTdHlsZSA9IGlucHV0LnJlbmRlcmVyKCkt
PnN0eWxlKCk7CiAKICNpZiBFTkFCTEUoVklERU8pCi0gICAgaWYgKHNsaWRlclN0eWxlLmFwcGVh
cmFuY2UoKSA9PSBNZWRpYVZvbHVtZVNsaWRlclBhcnQgJiYgaW5wdXQtPnJlbmRlcmVyKCktPnRo
ZW1lKCkudXNlc1ZlcnRpY2FsVm9sdW1lU2xpZGVyKCkpCisgICAgaWYgKHNsaWRlclN0eWxlLmFw
cGVhcmFuY2UoKSA9PSBNZWRpYVZvbHVtZVNsaWRlclBhcnQgJiYgaW5wdXQucmVuZGVyZXIoKS0+
dGhlbWUoKS51c2VzVmVydGljYWxWb2x1bWVTbGlkZXIoKSkKICAgICAgICAgcmV0dXJuIHRydWU7
CiAjZW5kaWYKIApAQCAtMTI2LDExICsxMjYsMTIgQEAgcHJpdmF0ZToKIAogdm9pZCBSZW5kZXJT
bGlkZXJDb250YWluZXI6OmNvbXB1dGVMb2dpY2FsSGVpZ2h0KExheW91dFVuaXQgbG9naWNhbEhl
aWdodCwgTGF5b3V0VW5pdCBsb2dpY2FsVG9wLCBMb2dpY2FsRXh0ZW50Q29tcHV0ZWRWYWx1ZXMm
IGNvbXB1dGVkVmFsdWVzKSBjb25zdAogewotICAgIEhUTUxJbnB1dEVsZW1lbnQqIGlucHV0ID0g
ZWxlbWVudCgpLT5zaGFkb3dIb3N0KCktPnRvSW5wdXRFbGVtZW50KCk7CisgICAgQVNTRVJUKGVs
ZW1lbnQoKS0+c2hhZG93SG9zdCgpKTsKKyAgICBhdXRvJiBpbnB1dCA9IGRvd25jYXN0PEhUTUxJ
bnB1dEVsZW1lbnQ+KCplbGVtZW50KCktPnNoYWRvd0hvc3QoKSk7CiAgICAgYm9vbCBpc1ZlcnRp
Y2FsID0gaGFzVmVydGljYWxBcHBlYXJhbmNlKGlucHV0KTsKIAogI2lmIEVOQUJMRShEQVRBTElT
VF9FTEVNRU5UKQotICAgIGlmIChpbnB1dC0+cmVuZGVyZXIoKS0+aXNTbGlkZXIoKSAmJiAhaXNW
ZXJ0aWNhbCAmJiBpbnB1dC0+bGlzdCgpKSB7CisgICAgaWYgKGlucHV0LnJlbmRlcmVyKCktPmlz
U2xpZGVyKCkgJiYgIWlzVmVydGljYWwgJiYgaW5wdXQubGlzdCgpKSB7CiAgICAgICAgIGludCBv
ZmZzZXRGcm9tQ2VudGVyID0gdGhlbWUoKS5zbGlkZXJUaWNrT2Zmc2V0RnJvbVRyYWNrQ2VudGVy
KCk7CiAgICAgICAgIExheW91dFVuaXQgdHJhY2tIZWlnaHQgPSAwOwogICAgICAgICBpZiAob2Zm
c2V0RnJvbUNlbnRlciA8IDApCkBAIC0xNTQsNyArMTU1LDggQEAgdm9pZCBSZW5kZXJTbGlkZXJD
b250YWluZXI6OmNvbXB1dGVMb2dpY2FsSGVpZ2h0KExheW91dFVuaXQgbG9naWNhbEhlaWdodCwg
TGF5b3UKIAogdm9pZCBSZW5kZXJTbGlkZXJDb250YWluZXI6OmxheW91dCgpCiB7Ci0gICAgSFRN
TElucHV0RWxlbWVudCogaW5wdXQgPSBlbGVtZW50KCktPnNoYWRvd0hvc3QoKS0+dG9JbnB1dEVs
ZW1lbnQoKTsKKyAgICBBU1NFUlQoZWxlbWVudCgpLT5zaGFkb3dIb3N0KCkpOworICAgIGF1dG8m
IGlucHV0ID0gZG93bmNhc3Q8SFRNTElucHV0RWxlbWVudD4oKmVsZW1lbnQoKS0+c2hhZG93SG9z
dCgpKTsKICAgICBib29sIGlzVmVydGljYWwgPSBoYXNWZXJ0aWNhbEFwcGVhcmFuY2UoaW5wdXQp
OwogICAgIHN0eWxlKCkuc2V0RmxleERpcmVjdGlvbihpc1ZlcnRpY2FsID8gRmxvd0NvbHVtbiA6
IEZsb3dSb3cpOwogICAgIFRleHREaXJlY3Rpb24gb2xkVGV4dERpcmVjdGlvbiA9IHN0eWxlKCku
ZGlyZWN0aW9uKCk7CkBAIC0xNjUsOCArMTY3LDggQEAgdm9pZCBSZW5kZXJTbGlkZXJDb250YWlu
ZXI6OmxheW91dCgpCiAgICAgICAgIHN0eWxlKCkuc2V0RGlyZWN0aW9uKExUUik7CiAgICAgfQog
Ci0gICAgUmVuZGVyQm94KiB0aHVtYiA9IGlucHV0LT5zbGlkZXJUaHVtYkVsZW1lbnQoKSA/IGlu
cHV0LT5zbGlkZXJUaHVtYkVsZW1lbnQoKS0+cmVuZGVyQm94KCkgOiAwOwotICAgIFJlbmRlckJv
eCogdHJhY2sgPSBpbnB1dC0+c2xpZGVyVHJhY2tFbGVtZW50KCkgPyBpbnB1dC0+c2xpZGVyVHJh
Y2tFbGVtZW50KCktPnJlbmRlckJveCgpIDogMDsKKyAgICBSZW5kZXJCb3gqIHRodW1iID0gaW5w
dXQuc2xpZGVyVGh1bWJFbGVtZW50KCkgPyBpbnB1dC5zbGlkZXJUaHVtYkVsZW1lbnQoKS0+cmVu
ZGVyQm94KCkgOiBudWxscHRyOworICAgIFJlbmRlckJveCogdHJhY2sgPSBpbnB1dC5zbGlkZXJU
cmFja0VsZW1lbnQoKSA/IGlucHV0LnNsaWRlclRyYWNrRWxlbWVudCgpLT5yZW5kZXJCb3goKSA6
IG51bGxwdHI7CiAgICAgLy8gRm9yY2UgYSBsYXlvdXQgdG8gcmVzZXQgdGhlIHBvc2l0aW9uIG9m
IHRoZSB0aHVtYiBzbyB0aGUgY29kZSBiZWxvdyBkb2Vzbid0IG1vdmUgdGhlIHRodW1iIHRvIHRo
ZSB3cm9uZyBwbGFjZS4KICAgICAvLyBGSVhNRTogTWFrZSBhIGN1c3RvbSBSZW5kZXIgY2xhc3Mg
Zm9yIHRoZSB0cmFjayBhbmQgbW92ZSB0aGUgdGh1bWIgcG9zaXRpb25pbmcgY29kZSB0aGVyZS4K
ICAgICBpZiAodHJhY2spCkBAIC0yNjEsNyArMjYzLDcgQEAgdm9pZCBTbGlkZXJUaHVtYkVsZW1l
bnQ6OnNldFBvc2l0aW9uRnJvbVBvaW50KGNvbnN0IExheW91dFBvaW50JiBhYnNvbHV0ZVBvaW50
KQogICAgIFJlbmRlckJveCYgaW5wdXRSZW5kZXJlciA9IGRvd25jYXN0PFJlbmRlckJveD4oKmlu
cHV0LT5yZW5kZXJlcigpKTsKICAgICBSZW5kZXJCb3gmIHRyYWNrUmVuZGVyZXIgPSAqdHJhY2tF
bGVtZW50LT5yZW5kZXJCb3goKTsKIAotICAgIGJvb2wgaXNWZXJ0aWNhbCA9IGhhc1ZlcnRpY2Fs
QXBwZWFyYW5jZShpbnB1dC5nZXQoKSk7CisgICAgYm9vbCBpc1ZlcnRpY2FsID0gaGFzVmVydGlj
YWxBcHBlYXJhbmNlKCppbnB1dCk7CiAgICAgYm9vbCBpc0xlZnRUb1JpZ2h0RGlyZWN0aW9uID0g
cmVuZGVyQm94KCktPnN0eWxlKCkuaXNMZWZ0VG9SaWdodERpcmVjdGlvbigpOwogICAgIAogICAg
IExheW91dFBvaW50IG9mZnNldChpbnB1dFJlbmRlcmVyLmFic29sdXRlVG9Mb2NhbChhYnNvbHV0
ZVBvaW50LCBVc2VUcmFuc2Zvcm1zKSk7CkBAIC01NjksOCArNTcxLDggQEAgSFRNTElucHV0RWxl
bWVudCogU2xpZGVyVGh1bWJFbGVtZW50Ojpob3N0SW5wdXQoKSBjb25zdAogewogICAgIC8vIE9u
bHkgSFRNTElucHV0RWxlbWVudCBjcmVhdGVzIFNsaWRlclRodW1iRWxlbWVudCBpbnN0YW5jZXMg
YXMgaXRzIHNoYWRvdyBub2Rlcy4KICAgICAvLyBTbywgc2hhZG93SG9zdCgpIG11c3QgYmUgYW4g
SFRNTElucHV0RWxlbWVudC4KLSAgICBFbGVtZW50KiBob3N0ID0gc2hhZG93SG9zdCgpOwotICAg
IHJldHVybiBob3N0ID8gaG9zdC0+dG9JbnB1dEVsZW1lbnQoKSA6IDA7CisgICAgYXV0byogaG9z
dCA9IHNoYWRvd0hvc3QoKTsKKyAgICByZXR1cm4gaXM8SFRNTElucHV0RWxlbWVudD4oaG9zdCkg
PyBkb3duY2FzdDxIVE1MSW5wdXRFbGVtZW50Pihob3N0KSA6IG51bGxwdHI7CiB9CiAKIHN0YXRp
YyBjb25zdCBBdG9taWNTdHJpbmcmIHNsaWRlclRodW1iU2hhZG93UHNldWRvSWQoKQpAQCAtNjQ0
LDEzICs2NDYsMTQgQEAgY29uc3QgQXRvbWljU3RyaW5nJiBTbGlkZXJDb250YWluZXJFbGVtZW50
OjpzaGFkb3dQc2V1ZG9JZCgpIGNvbnN0CiAgICAgREVQUkVDQVRFRF9ERUZJTkVfU1RBVElDX0xP
Q0FMKGNvbnN0IEF0b21pY1N0cmluZywgbWVkaWFTbGlkZXJDb250YWluZXIsICgiLXdlYmtpdC1t
ZWRpYS1zbGlkZXItY29udGFpbmVyIiwgQXRvbWljU3RyaW5nOjpDb25zdHJ1Y3RGcm9tTGl0ZXJh
bCkpOwogICAgIERFUFJFQ0FURURfREVGSU5FX1NUQVRJQ19MT0NBTChjb25zdCBBdG9taWNTdHJp
bmcsIHNsaWRlckNvbnRhaW5lciwgKCItd2Via2l0LXNsaWRlci1jb250YWluZXIiLCBBdG9taWNT
dHJpbmc6OkNvbnN0cnVjdEZyb21MaXRlcmFsKSk7CiAKLSAgICBIVE1MSW5wdXRFbGVtZW50KiBp
bnB1dCA9IHNoYWRvd0hvc3QoKS0+dG9JbnB1dEVsZW1lbnQoKTsKLSAgICBpZiAoIWlucHV0KQor
ICAgIGlmICghaXM8SFRNTElucHV0RWxlbWVudD4oKnNoYWRvd0hvc3QoKSkpCiAgICAgICAgIHJl
dHVybiBzbGlkZXJDb250YWluZXI7Ci0gICAgaWYgKCFpbnB1dC0+cmVuZGVyZXIoKSkKKworICAg
IGF1dG8mIGlucHV0ID0gZG93bmNhc3Q8SFRNTElucHV0RWxlbWVudD4oKnNoYWRvd0hvc3QoKSk7
CisgICAgaWYgKCFpbnB1dC5yZW5kZXJlcigpKQogICAgICAgICByZXR1cm4gZW1wdHlBdG9tOwog
Ci0gICAgY29uc3QgUmVuZGVyU3R5bGUmIHNsaWRlclN0eWxlID0gaW5wdXQtPnJlbmRlcmVyKCkt
PnN0eWxlKCk7CisgICAgY29uc3QgUmVuZGVyU3R5bGUmIHNsaWRlclN0eWxlID0gaW5wdXQucmVu
ZGVyZXIoKS0+c3R5bGUoKTsKICAgICBzd2l0Y2ggKHNsaWRlclN0eWxlLmFwcGVhcmFuY2UoKSkg
ewogICAgIGNhc2UgTWVkaWFTbGlkZXJQYXJ0OgogICAgIGNhc2UgTWVkaWFTbGlkZXJUaHVtYlBh
cnQ6CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvRnJhbWVMb2FkZXIuY3BwIGIv
U291cmNlL1dlYkNvcmUvbG9hZGVyL0ZyYW1lTG9hZGVyLmNwcAppbmRleCAzZmVmMTExNTZjZDIw
MjNkMjNkNjNjMWFmMDE2NzBmNTc1NWM1MjY3Li43MDc5NTdiNzZhOTUzYTIzZDA0NjUwMTBhNGVi
NzgxMDI0OGZlZGU5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvRnJhbWVMb2Fk
ZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9GcmFtZUxvYWRlci5jcHAKQEAgLTQy
MSw5ICs0MjEsOSBAQCB2b2lkIEZyYW1lTG9hZGVyOjpzdG9wTG9hZGluZyhVbmxvYWRFdmVudFBv
bGljeSB1bmxvYWRFdmVudFBvbGljeSkKICAgICBpZiAodW5sb2FkRXZlbnRQb2xpY3kgIT0gVW5s
b2FkRXZlbnRQb2xpY3lOb25lKSB7CiAgICAgICAgIGlmIChtX2ZyYW1lLmRvY3VtZW50KCkpIHsK
ICAgICAgICAgICAgIGlmIChtX2RpZENhbGxJbXBsaWNpdENsb3NlICYmICFtX3dhc1VubG9hZEV2
ZW50RW1pdHRlZCkgewotICAgICAgICAgICAgICAgIEVsZW1lbnQqIGN1cnJlbnRGb2N1c2VkRWxl
bWVudCA9IG1fZnJhbWUuZG9jdW1lbnQoKS0+Zm9jdXNlZEVsZW1lbnQoKTsKLSAgICAgICAgICAg
ICAgICBpZiAoY3VycmVudEZvY3VzZWRFbGVtZW50ICYmIGN1cnJlbnRGb2N1c2VkRWxlbWVudC0+
dG9JbnB1dEVsZW1lbnQoKSkKLSAgICAgICAgICAgICAgICAgICAgY3VycmVudEZvY3VzZWRFbGVt
ZW50LT50b0lucHV0RWxlbWVudCgpLT5lbmRFZGl0aW5nKCk7CisgICAgICAgICAgICAgICAgYXV0
byogY3VycmVudEZvY3VzZWRFbGVtZW50ID0gbV9mcmFtZS5kb2N1bWVudCgpLT5mb2N1c2VkRWxl
bWVudCgpOworICAgICAgICAgICAgICAgIGlmIChpczxIVE1MSW5wdXRFbGVtZW50PihjdXJyZW50
Rm9jdXNlZEVsZW1lbnQpKQorICAgICAgICAgICAgICAgICAgICBkb3duY2FzdDxIVE1MSW5wdXRF
bGVtZW50PigqY3VycmVudEZvY3VzZWRFbGVtZW50KS5lbmRFZGl0aW5nKCk7CiAgICAgICAgICAg
ICAgICAgaWYgKG1fcGFnZURpc21pc3NhbEV2ZW50QmVpbmdEaXNwYXRjaGVkID09IFBhZ2VEaXNt
aXNzYWxUeXBlOjpOb25lKSB7CiAgICAgICAgICAgICAgICAgICAgIGlmICh1bmxvYWRFdmVudFBv
bGljeSA9PSBVbmxvYWRFdmVudFBvbGljeVVubG9hZEFuZFBhZ2VIaWRlKSB7CiAgICAgICAgICAg
ICAgICAgICAgICAgICBtX3BhZ2VEaXNtaXNzYWxFdmVudEJlaW5nRGlzcGF0Y2hlZCA9IFBhZ2VE
aXNtaXNzYWxUeXBlOjpQYWdlSGlkZTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2Uv
RHJhZ0NvbnRyb2xsZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcGFnZS9EcmFnQ29udHJvbGxlci5j
cHAKaW5kZXggMmM3NmY2M2ZlMTE1ZTk2Y2Y1ZGYzYjMwOTdjMmFmM2M3ZWE4ODQ4Ny4uMDUwYjYy
ODk1YWVhNzM2NDlkMmFlNDY0ZTU5ZmM2ODNmMWE2YjlkMCAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvcGFnZS9EcmFnQ29udHJvbGxlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGFnZS9E
cmFnQ29udHJvbGxlci5jcHAKQEAgLTI4MSwxNyArMjgxLDIwIEBAIERyYWdPcGVyYXRpb24gRHJh
Z0NvbnRyb2xsZXI6OmRyYWdFbnRlcmVkT3JVcGRhdGVkKERyYWdEYXRhJiBkcmFnRGF0YSkKICAg
ICByZXR1cm4gZHJhZ09wZXJhdGlvbjsKIH0KIAotc3RhdGljIEhUTUxJbnB1dEVsZW1lbnQqIGFz
RmlsZUlucHV0KE5vZGUqIG5vZGUpCitzdGF0aWMgSFRNTElucHV0RWxlbWVudCogYXNGaWxlSW5w
dXQoTm9kZSYgbm9kZSkKIHsKLSAgICBBU1NFUlQobm9kZSk7CisgICAgaWYgKCFpczxIVE1MSW5w
dXRFbGVtZW50Pihub2RlKSkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAKLSAgICBIVE1MSW5w
dXRFbGVtZW50KiBpbnB1dEVsZW1lbnQgPSBub2RlLT50b0lucHV0RWxlbWVudCgpOworICAgIGF1
dG8qIGlucHV0RWxlbWVudCA9ICZkb3duY2FzdDxIVE1MSW5wdXRFbGVtZW50Pihub2RlKTsKIAog
ICAgIC8vIElmIHRoaXMgaXMgYSBidXR0b24gaW5zaWRlIG9mIHRoZSBhIGZpbGUgaW5wdXQsIG1v
dmUgdXAgdG8gdGhlIGZpbGUgaW5wdXQuCi0gICAgaWYgKGlucHV0RWxlbWVudCAmJiBpbnB1dEVs
ZW1lbnQtPmlzVGV4dEJ1dHRvbigpICYmIGlzPFNoYWRvd1Jvb3Q+KGlucHV0RWxlbWVudC0+dHJl
ZVNjb3BlKCkucm9vdE5vZGUoKSkpCi0gICAgICAgIGlucHV0RWxlbWVudCA9IGRvd25jYXN0PFNo
YWRvd1Jvb3Q+KGlucHV0RWxlbWVudC0+dHJlZVNjb3BlKCkucm9vdE5vZGUoKSkuaG9zdCgpLT50
b0lucHV0RWxlbWVudCgpOworICAgIGlmIChpbnB1dEVsZW1lbnQtPmlzVGV4dEJ1dHRvbigpICYm
IGlzPFNoYWRvd1Jvb3Q+KGlucHV0RWxlbWVudC0+dHJlZVNjb3BlKCkucm9vdE5vZGUoKSkpIHsK
KyAgICAgICAgYXV0byYgaG9zdCA9ICpkb3duY2FzdDxTaGFkb3dSb290PihpbnB1dEVsZW1lbnQt
PnRyZWVTY29wZSgpLnJvb3ROb2RlKCkpLmhvc3QoKTsKKyAgICAgICAgaW5wdXRFbGVtZW50ID0g
aXM8SFRNTElucHV0RWxlbWVudD4oaG9zdCkgPyAmZG93bmNhc3Q8SFRNTElucHV0RWxlbWVudD4o
aG9zdCkgOiBudWxscHRyOworICAgIH0KIAotICAgIHJldHVybiBpbnB1dEVsZW1lbnQgJiYgaW5w
dXRFbGVtZW50LT5pc0ZpbGVVcGxvYWQoKSA/IGlucHV0RWxlbWVudCA6IDA7CisgICAgcmV0dXJu
IGlucHV0RWxlbWVudCAmJiBpbnB1dEVsZW1lbnQtPmlzRmlsZVVwbG9hZCgpID8gaW5wdXRFbGVt
ZW50IDogbnVsbHB0cjsKIH0KIAogLy8gVGhpcyBjYW4gcmV0dXJuIG51bGwgaWYgYW4gZW1wdHkg
ZG9jdW1lbnQgaXMgbG9hZGVkLgpAQCAtMzU1LDcgKzM1OCw3IEBAIGJvb2wgRHJhZ0NvbnRyb2xs
ZXI6OnRyeURvY3VtZW50RHJhZyhEcmFnRGF0YSYgZHJhZ0RhdGEsIERyYWdEZXN0aW5hdGlvbkFj
dGlvbiBhCiAgICAgICAgIGlmICghZWxlbWVudCkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsK
ICAgICAgICAgCi0gICAgICAgIEhUTUxJbnB1dEVsZW1lbnQqIGVsZW1lbnRBc0ZpbGVJbnB1dCA9
IGFzRmlsZUlucHV0KGVsZW1lbnQpOworICAgICAgICBIVE1MSW5wdXRFbGVtZW50KiBlbGVtZW50
QXNGaWxlSW5wdXQgPSBhc0ZpbGVJbnB1dCgqZWxlbWVudCk7CiAgICAgICAgIGlmIChtX2ZpbGVJ
bnB1dEVsZW1lbnRVbmRlck1vdXNlICE9IGVsZW1lbnRBc0ZpbGVJbnB1dCkgewogICAgICAgICAg
ICAgaWYgKG1fZmlsZUlucHV0RWxlbWVudFVuZGVyTW91c2UpCiAgICAgICAgICAgICAgICAgbV9m
aWxlSW5wdXRFbGVtZW50VW5kZXJNb3VzZS0+c2V0Q2FuUmVjZWl2ZURyb3BwZWRGaWxlcyhmYWxz
ZSk7CkBAIC01NjUsNyArNTY4LDcgQEAgYm9vbCBEcmFnQ29udHJvbGxlcjo6Y2FuUHJvY2Vzc0Ry
YWcoRHJhZ0RhdGEmIGRyYWdEYXRhKQogICAgIGlmICghcmVzdWx0LmlubmVyTm9uU2hhcmVkTm9k
ZSgpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBpZiAoZHJhZ0RhdGEuY29udGFpbnNG
aWxlcygpICYmIGFzRmlsZUlucHV0KHJlc3VsdC5pbm5lck5vblNoYXJlZE5vZGUoKSkpCisgICAg
aWYgKGRyYWdEYXRhLmNvbnRhaW5zRmlsZXMoKSAmJiBhc0ZpbGVJbnB1dCgqcmVzdWx0LmlubmVy
Tm9uU2hhcmVkTm9kZSgpKSkKICAgICAgICAgcmV0dXJuIHRydWU7CiAKICAgICBpZiAoaXM8SFRN
TFBsdWdJbkVsZW1lbnQ+KCpyZXN1bHQuaW5uZXJOb25TaGFyZWROb2RlKCkpKSB7CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQnV0dG9uLmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCdXR0b24uY3BwCmluZGV4IDdhM2VhYTllYWIyY2M1MjVi
MTgxZDQ4Y2M2MGFmZjRhNGJiNWU3ODEuLmQxZDBkOTFmM2ZkMDNhMWNiNjM4NDVjODZhMTMyZGNi
OGI3YWNmOGIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCdXR0
b24uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCdXR0b24uY3BwCkBA
IC02MSw3ICs2MSw3IEBAIGJvb2wgUmVuZGVyQnV0dG9uOjpjYW5CZVNlbGVjdGlvbkxlYWYoKSBj
b25zdAogCiBib29sIFJlbmRlckJ1dHRvbjo6aGFzTGluZUlmRW1wdHkoKSBjb25zdAogewotICAg
IHJldHVybiBmb3JtQ29udHJvbEVsZW1lbnQoKS50b0lucHV0RWxlbWVudCgpOworICAgIHJldHVy
biBpczxIVE1MSW5wdXRFbGVtZW50Pihmb3JtQ29udHJvbEVsZW1lbnQoKSk7CiB9CiAKIHZvaWQg
UmVuZGVyQnV0dG9uOjphZGRDaGlsZChSZW5kZXJPYmplY3QqIG5ld0NoaWxkLCBSZW5kZXJPYmpl
Y3QqIGJlZm9yZUNoaWxkKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1Jl
bmRlclRoZW1lLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUaGVtZS5jcHAK
aW5kZXggNTk2MTc0NmU1Y2JiYzk4OGQzYWFhMDI1YzZkYTg2MzExNDczZTk0Yi4uMGMxMTkxOTM2
NjlhNTIyNWRiYWI2OWJiNDJhNTNjMGE2MmU1NWFmYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL1JlbmRlclRoZW1lLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvUmVuZGVyVGhlbWUuY3BwCkBAIC03ODUsMjYgKzc4NSwxMiBAQCBib29sIFJlbmRlclRoZW1l
Ojppc0FjdGl2ZShjb25zdCBSZW5kZXJPYmplY3QmIG8pIGNvbnN0CiAKIGJvb2wgUmVuZGVyVGhl
bWU6OmlzQ2hlY2tlZChjb25zdCBSZW5kZXJPYmplY3QmIG8pIGNvbnN0CiB7Ci0gICAgaWYgKCFv
Lm5vZGUoKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgSFRNTElucHV0RWxlbWVudCog
aW5wdXRFbGVtZW50ID0gby5ub2RlKCktPnRvSW5wdXRFbGVtZW50KCk7Ci0gICAgaWYgKCFpbnB1
dEVsZW1lbnQpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIHJldHVybiBpbnB1dEVsZW1l
bnQtPnNob3VsZEFwcGVhckNoZWNrZWQoKTsKKyAgICByZXR1cm4gaXM8SFRNTElucHV0RWxlbWVu
dD4oby5ub2RlKCkpICYmIGRvd25jYXN0PEhUTUxJbnB1dEVsZW1lbnQ+KCpvLm5vZGUoKSkuc2hv
dWxkQXBwZWFyQ2hlY2tlZCgpOwogfQogCiBib29sIFJlbmRlclRoZW1lOjppc0luZGV0ZXJtaW5h
dGUoY29uc3QgUmVuZGVyT2JqZWN0JiBvKSBjb25zdAogewotICAgIGlmICghby5ub2RlKCkpCi0g
ICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIEhUTUxJbnB1dEVsZW1lbnQqIGlucHV0RWxlbWVu
dCA9IG8ubm9kZSgpLT50b0lucHV0RWxlbWVudCgpOwotICAgIGlmICghaW5wdXRFbGVtZW50KQot
ICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICByZXR1cm4gaW5wdXRFbGVtZW50LT5zaG91bGRB
cHBlYXJJbmRldGVybWluYXRlKCk7CisgICAgcmV0dXJuIGlzPEhUTUxJbnB1dEVsZW1lbnQ+KG8u
bm9kZSgpKSAmJiBkb3duY2FzdDxIVE1MSW5wdXRFbGVtZW50Pigqby5ub2RlKCkpLnNob3VsZEFw
cGVhckluZGV0ZXJtaW5hdGUoKTsKIH0KIAogYm9vbCBSZW5kZXJUaGVtZTo6aXNFbmFibGVkKGNv
bnN0IFJlbmRlck9iamVjdCYgcmVuZGVyZXIpIGNvbnN0CkBAIC05OTMsMjAgKzk3OSwxNiBAQCBM
YXlvdXRVbml0IFJlbmRlclRoZW1lOjpzbGlkZXJUaWNrU25hcHBpbmdUaHJlc2hvbGQoKSBjb25z
dAogCiB2b2lkIFJlbmRlclRoZW1lOjpwYWludFNsaWRlclRpY2tzKGNvbnN0IFJlbmRlck9iamVj
dCYgbywgY29uc3QgUGFpbnRJbmZvJiBwYWludEluZm8sIGNvbnN0IEludFJlY3QmIHJlY3QpCiB7
Ci0gICAgTm9kZSogbm9kZSA9IG8ubm9kZSgpOwotICAgIGlmICghbm9kZSkKLSAgICAgICAgcmV0
dXJuOwotCi0gICAgSFRNTElucHV0RWxlbWVudCogaW5wdXQgPSBub2RlLT50b0lucHV0RWxlbWVu
dCgpOwotICAgIGlmICghaW5wdXQpCisgICAgaWYgKCFpczxIVE1MSW5wdXRFbGVtZW50PihvLm5v
ZGUoKSkpCiAgICAgICAgIHJldHVybjsKIAotICAgIEhUTUxEYXRhTGlzdEVsZW1lbnQqIGRhdGFM
aXN0ID0gZG93bmNhc3Q8SFRNTERhdGFMaXN0RWxlbWVudD4oaW5wdXQtPmxpc3QoKSk7CisgICAg
YXV0byYgaW5wdXQgPSBkb3duY2FzdDxIVE1MSW5wdXRFbGVtZW50Pigqby5ub2RlKTsKKyAgICBh
dXRvKiBkYXRhTGlzdCA9IGRvd25jYXN0PEhUTUxEYXRhTGlzdEVsZW1lbnQ+KGlucHV0Lmxpc3Qo
KSk7CiAgICAgaWYgKCFkYXRhTGlzdCkKICAgICAgICAgcmV0dXJuOwogCi0gICAgZG91YmxlIG1p
biA9IGlucHV0LT5taW5pbXVtKCk7Ci0gICAgZG91YmxlIG1heCA9IGlucHV0LT5tYXhpbXVtKCk7
CisgICAgZG91YmxlIG1pbiA9IGlucHV0Lm1pbmltdW0oKTsKKyAgICBkb3VibGUgbWF4ID0gaW5w
dXQubWF4aW11bSgpOwogICAgIENvbnRyb2xQYXJ0IHBhcnQgPSBvLnN0eWxlKCkuYXBwZWFyYW5j
ZSgpOwogICAgIC8vIFdlIGRvbid0IHN1cHBvcnQgdGlja3Mgb24gYWx0ZXJuYXRlIHNsaWRlcnMg
bGlrZSBNZWRpYVZvbHVtZVNsaWRlcnMuCiAgICAgaWYgKHBhcnQgIT0gIFNsaWRlckhvcml6b250
YWxQYXJ0ICYmIHBhcnQgIT0gU2xpZGVyVmVydGljYWxQYXJ0KQpAQCAtMTAxNCw3ICs5OTYsNyBA
QCB2b2lkIFJlbmRlclRoZW1lOjpwYWludFNsaWRlclRpY2tzKGNvbnN0IFJlbmRlck9iamVjdCYg
bywgY29uc3QgUGFpbnRJbmZvJiBwYWludAogICAgIGJvb2wgaXNIb3Jpem9udGFsID0gcGFydCA9
PSAgU2xpZGVySG9yaXpvbnRhbFBhcnQ7CiAKICAgICBJbnRTaXplIHRodW1iU2l6ZTsKLSAgICBj
b25zdCBSZW5kZXJPYmplY3QqIHRodW1iUmVuZGVyZXIgPSBpbnB1dC0+c2xpZGVyVGh1bWJFbGVt
ZW50KCktPnJlbmRlcmVyKCk7CisgICAgY29uc3QgUmVuZGVyT2JqZWN0KiB0aHVtYlJlbmRlcmVy
ID0gaW5wdXQuc2xpZGVyVGh1bWJFbGVtZW50KCktPnJlbmRlcmVyKCk7CiAgICAgaWYgKHRodW1i
UmVuZGVyZXIpIHsKICAgICAgICAgY29uc3QgUmVuZGVyU3R5bGUmIHRodW1iU3R5bGUgPSB0aHVt
YlJlbmRlcmVyLT5zdHlsZSgpOwogICAgICAgICBpbnQgdGh1bWJXaWR0aCA9IHRodW1iU3R5bGUu
d2lkdGgoKS5pbnRWYWx1ZSgpOwpAQCAtMTAyOSw3ICsxMDExLDcgQEAgdm9pZCBSZW5kZXJUaGVt
ZTo6cGFpbnRTbGlkZXJUaWNrcyhjb25zdCBSZW5kZXJPYmplY3QmIG8sIGNvbnN0IFBhaW50SW5m
byYgcGFpbnQKICAgICBpbnQgdGlja1JlZ2lvblNpZGVNYXJnaW4gPSAwOwogICAgIGludCB0aWNr
UmVnaW9uV2lkdGggPSAwOwogICAgIEludFJlY3QgdHJhY2tCb3VuZHM7Ci0gICAgUmVuZGVyT2Jq
ZWN0KiB0cmFja1JlbmRlcmVyID0gaW5wdXQtPnNsaWRlclRyYWNrRWxlbWVudCgpLT5yZW5kZXJl
cigpOworICAgIFJlbmRlck9iamVjdCogdHJhY2tSZW5kZXJlciA9IGlucHV0LnNsaWRlclRyYWNr
RWxlbWVudCgpLT5yZW5kZXJlcigpOwogICAgIC8vIFdlIGNhbiBpZ25vcmluZyB0cmFuc2Zvcm1z
IGJlY2F1c2UgdHJhbnNmb3JtIGlzIGhhbmRsZWQgYnkgdGhlIGdyYXBoaWNzIGNvbnRleHQuCiAg
ICAgaWYgKHRyYWNrUmVuZGVyZXIpCiAgICAgICAgIHRyYWNrQm91bmRzID0gdHJhY2tSZW5kZXJl
ci0+YWJzb2x1dGVCb3VuZGluZ0JveFJlY3RJZ25vcmluZ1RyYW5zZm9ybXMoKTsKQEAgLTEwNTks
OSArMTA0MSw5IEBAIHZvaWQgUmVuZGVyVGhlbWU6OnBhaW50U2xpZGVyVGlja3MoY29uc3QgUmVu
ZGVyT2JqZWN0JiBvLCBjb25zdCBQYWludEluZm8mIHBhaW50CiAgICAgICAgIEFTU0VSVChpczxI
VE1MT3B0aW9uRWxlbWVudD4oKm5vZGUpKTsKICAgICAgICAgSFRNTE9wdGlvbkVsZW1lbnQmIG9w
dGlvbkVsZW1lbnQgPSBkb3duY2FzdDxIVE1MT3B0aW9uRWxlbWVudD4oKm5vZGUpOwogICAgICAg
ICBTdHJpbmcgdmFsdWUgPSBvcHRpb25FbGVtZW50LnZhbHVlKCk7Ci0gICAgICAgIGlmICghaW5w
dXQtPmlzVmFsaWRWYWx1ZSh2YWx1ZSkpCisgICAgICAgIGlmICghaW5wdXQuaXNWYWxpZFZhbHVl
KHZhbHVlKSkKICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICBkb3VibGUgcGFyc2VkVmFs
dWUgPSBwYXJzZVRvRG91YmxlRm9yTnVtYmVyVHlwZShpbnB1dC0+c2FuaXRpemVWYWx1ZSh2YWx1
ZSkpOworICAgICAgICBkb3VibGUgcGFyc2VkVmFsdWUgPSBwYXJzZVRvRG91YmxlRm9yTnVtYmVy
VHlwZShpbnB1dC5zYW5pdGl6ZVZhbHVlKHZhbHVlKSk7CiAgICAgICAgIGRvdWJsZSB0aWNrRnJh
Y3Rpb24gPSAocGFyc2VkVmFsdWUgLSBtaW4pIC8gKG1heCAtIG1pbik7CiAgICAgICAgIGRvdWJs
ZSB0aWNrUmF0aW8gPSBpc0hvcml6b250YWwgJiYgby5zdHlsZSgpLmlzTGVmdFRvUmlnaHREaXJl
Y3Rpb24oKSA/IHRpY2tGcmFjdGlvbiA6IDEuMCAtIHRpY2tGcmFjdGlvbjsKICAgICAgICAgZG91
YmxlIHRpY2tQb3NpdGlvbiA9IHJvdW5kKHRpY2tSZWdpb25TaWRlTWFyZ2luICsgdGlja1JlZ2lv
bldpZHRoICogdGlja1JhdGlvKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Rlc3Rpbmcv
SW50ZXJuYWxzLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3Rlc3RpbmcvSW50ZXJuYWxzLmNwcAppbmRl
eCA4YzZmMTIyMzg2ODI0YWViZjNiZDc2ZmM0ZTc5MzJlOGZkZWY5MmRlLi40M2RiODA4ZGFhMTdl
NjJkMzU0YzMxNWVmZThmZDBiMjViMmI3YjdhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS90
ZXN0aW5nL0ludGVybmFscy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvdGVzdGluZy9JbnRlcm5h
bHMuY3BwCkBAIC0xMTg4LDggKzExODgsOCBAQCBib29sIEludGVybmFsczo6d2FzTGFzdENoYW5n
ZVVzZXJFZGl0KEVsZW1lbnQqIHRleHRGaWVsZCwgRXhjZXB0aW9uQ29kZSYgZWMpCiAgICAgICAg
IHJldHVybiBmYWxzZTsKICAgICB9CiAKLSAgICBpZiAoSFRNTElucHV0RWxlbWVudCogaW5wdXRF
bGVtZW50ID0gdGV4dEZpZWxkLT50b0lucHV0RWxlbWVudCgpKQotICAgICAgICByZXR1cm4gaW5w
dXRFbGVtZW50LT5sYXN0Q2hhbmdlV2FzVXNlckVkaXQoKTsKKyAgICBpZiAoaXM8SFRNTElucHV0
RWxlbWVudD4oKnRleHRGaWVsZCkpCisgICAgICAgIHJldHVybiBkb3duY2FzdDxIVE1MSW5wdXRF
bGVtZW50PigqdGV4dEZpZWxkKS5sYXN0Q2hhbmdlV2FzVXNlckVkaXQoKTsKIAogICAgIGlmIChp
czxIVE1MVGV4dEFyZWFFbGVtZW50PigqdGV4dEZpZWxkKSkKICAgICAgICAgcmV0dXJuIGRvd25j
YXN0PEhUTUxUZXh0QXJlYUVsZW1lbnQ+KCp0ZXh0RmllbGQpLmxhc3RDaGFuZ2VXYXNVc2VyRWRp
dCgpOwpAQCAtMTIwNSwxMSArMTIwNSwxMiBAQCBib29sIEludGVybmFsczo6ZWxlbWVudFNob3Vs
ZEF1dG9Db21wbGV0ZShFbGVtZW50KiBlbGVtZW50LCBFeGNlcHRpb25Db2RlJiBlYykKICAgICAg
ICAgcmV0dXJuIGZhbHNlOwogICAgIH0KIAotICAgIGlmIChIVE1MSW5wdXRFbGVtZW50KiBpbnB1
dEVsZW1lbnQgPSBlbGVtZW50LT50b0lucHV0RWxlbWVudCgpKQotICAgICAgICByZXR1cm4gaW5w
dXRFbGVtZW50LT5zaG91bGRBdXRvY29tcGxldGUoKTsKKyAgICBpZiAoIWlzPEhUTUxJbnB1dEVs
ZW1lbnQ+KCplbGVtZW50KSkgeworICAgICAgICBlYyA9IElOVkFMSURfTk9ERV9UWVBFX0VSUjsK
KyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KIAotICAgIGVjID0gSU5WQUxJRF9OT0RFX1RZ
UEVfRVJSOwotICAgIHJldHVybiBmYWxzZTsKKyAgICByZXR1cm4gZG93bmNhc3Q8SFRNTElucHV0
RWxlbWVudD4oKmVsZW1lbnQpLnNob3VsZEF1dG9jb21wbGV0ZSgpOwogfQogCiB2b2lkIEludGVy
bmFsczo6c2V0RWRpdGluZ1ZhbHVlKEVsZW1lbnQqIGVsZW1lbnQsIGNvbnN0IFN0cmluZyYgdmFs
dWUsIEV4Y2VwdGlvbkNvZGUmIGVjKQpAQCAtMTIxOSwzMyArMTIyMCw0MiBAQCB2b2lkIEludGVy
bmFsczo6c2V0RWRpdGluZ1ZhbHVlKEVsZW1lbnQqIGVsZW1lbnQsIGNvbnN0IFN0cmluZyYgdmFs
dWUsIEV4Y2VwdGlvbgogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgSFRNTElucHV0RWxl
bWVudCogaW5wdXRFbGVtZW50ID0gZWxlbWVudC0+dG9JbnB1dEVsZW1lbnQoKTsKLSAgICBpZiAo
IWlucHV0RWxlbWVudCkgeworICAgIGlmICghaXM8SFRNTElucHV0RWxlbWVudD4oKmVsZW1lbnQp
KSB7CiAgICAgICAgIGVjID0gSU5WQUxJRF9OT0RFX1RZUEVfRVJSOwogICAgICAgICByZXR1cm47
CiAgICAgfQogCi0gICAgaW5wdXRFbGVtZW50LT5zZXRFZGl0aW5nVmFsdWUodmFsdWUpOworICAg
IGRvd25jYXN0PEhUTUxJbnB1dEVsZW1lbnQ+KCplbGVtZW50KS5zZXRFZGl0aW5nVmFsdWUodmFs
dWUpOwogfQogCiB2b2lkIEludGVybmFsczo6c2V0QXV0b2ZpbGxlZChFbGVtZW50KiBlbGVtZW50
LCBib29sIGVuYWJsZWQsIEV4Y2VwdGlvbkNvZGUmIGVjKQogewotICAgIEhUTUxJbnB1dEVsZW1l
bnQqIGlucHV0RWxlbWVudCA9IGVsZW1lbnQtPnRvSW5wdXRFbGVtZW50KCk7Ci0gICAgaWYgKCFp
bnB1dEVsZW1lbnQpIHsKKyAgICBpZiAoIWVsZW1lbnQpIHsKICAgICAgICAgZWMgPSBJTlZBTElE
X0FDQ0VTU19FUlI7CiAgICAgICAgIHJldHVybjsKICAgICB9Ci0gICAgaW5wdXRFbGVtZW50LT5z
ZXRBdXRvRmlsbGVkKGVuYWJsZWQpOworCisgICAgaWYgKCFpczxIVE1MSW5wdXRFbGVtZW50Pigq
ZWxlbWVudCkpIHsKKyAgICAgICAgZWMgPSBJTlZBTElEX05PREVfVFlQRV9FUlI7CisgICAgICAg
IHJldHVybjsKKyAgICB9CisKKyAgICBkb3duY2FzdDxIVE1MSW5wdXRFbGVtZW50PigqZWxlbWVu
dCkuc2V0QXV0b0ZpbGxlZChlbmFibGVkKTsKIH0KIAogdm9pZCBJbnRlcm5hbHM6OnNldFNob3dB
dXRvRmlsbEJ1dHRvbihFbGVtZW50KiBlbGVtZW50LCBib29sIHNob3csIEV4Y2VwdGlvbkNvZGUm
IGVjKQogewotICAgIEhUTUxJbnB1dEVsZW1lbnQqIGlucHV0RWxlbWVudCA9IGVsZW1lbnQtPnRv
SW5wdXRFbGVtZW50KCk7Ci0gICAgaWYgKCFpbnB1dEVsZW1lbnQpIHsKKyAgICBpZiAoIWVsZW1l
bnQpIHsKICAgICAgICAgZWMgPSBJTlZBTElEX0FDQ0VTU19FUlI7CiAgICAgICAgIHJldHVybjsK
ICAgICB9Ci0gICAgaW5wdXRFbGVtZW50LT5zZXRTaG93QXV0b0ZpbGxCdXR0b24oc2hvdyk7CisK
KyAgICBpZiAoIWlzPEhUTUxJbnB1dEVsZW1lbnQ+KCplbGVtZW50KSkgeworICAgICAgICBlYyA9
IElOVkFMSURfTk9ERV9UWVBFX0VSUjsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGRv
d25jYXN0PEhUTUxJbnB1dEVsZW1lbnQ+KCplbGVtZW50KS5zZXRTaG93QXV0b0ZpbGxCdXR0b24o
c2hvdyk7CiB9CiAKIAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>263541</attachid>
            <date>2015-10-19 18:40:34 -0700</date>
            <delta_ts>2015-10-19 19:41:57 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-150341-20151019183954.patch</filename>
            <type>text/plain</type>
            <size>44818</size>
            <attacher name="Chris Dumez">cdumez</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTkxMzE4CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZWQ3ZmY1NGJjOTkzYzYz
YWE4ZWZlMjRkOWMzZjE1YTEzYzFlN2VkNy4uYzdmY2JhODUxMmQxMTBiN2Q4MTU1YjY4YTRiYzIw
NjdlMTc5NmE1ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDEzIEBACisyMDE1LTEwLTE5ICBDaHJp
cyBEdW1leiAgPGNkdW1lekBhcHBsZS5jb20+CisKKyAgICAgICAgRHJvcCB1bm5lY2Vzc2FyeSBO
b2RlOjp0b0lucHV0RWxlbWVudCgpIHZpcnR1YWwgZnVuY3Rpb24KKyAgICAgICAgaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE1MDM0MQorCisgICAgICAgIFJldmlld2Vk
IGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIERyb3AgdW5uZWNlc3NhcnkgTm9kZTo6dG9J
bnB1dEVsZW1lbnQoKSB2aXJ0dWFsIGZ1bmN0aW9uIGFuZCB1c2UgdGhlCisgICAgICAgIHVzdWFs
IGlzPEhUTUxJbnB1dEVsZW1lbnQ+KCkgLyBkb3duY2FzdDwgSFRNTElucHV0RWxlbWVudCA+KCkg
aW5zdGVhZC4KKwogMjAxNS0xMC0xOSAgQmV0aCBEYWtpbiAgPGJkYWtpbkBhcHBsZS5jb20+CiAK
ICAgICAgICAgQnVpbGQgZml4LgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJp
bGl0eS9BWE9iamVjdENhY2hlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQVhP
YmplY3RDYWNoZS5jcHAKaW5kZXggOTE0YWI2ZGYxNzE0Njk0OGIxNWI2ZTY0OTdiNTU4M2FhZGYx
YmQyNy4uMjA3MjA5MGFlMDQ5ODEwZGRiZmY1ODgzNGZkZmIwNDZlMTU0YzM5NSAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BWE9iamVjdENhY2hlLmNwcAorKysgYi9T
b3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FYT2JqZWN0Q2FjaGUuY3BwCkBAIC0xMzE2LDEx
ICsxMzE2LDggQEAgdm9pZCBBWE9iamVjdENhY2hlOjp0ZXh0TWFya2VyRGF0YUZvclZpc2libGVQ
b3NpdGlvbihUZXh0TWFya2VyRGF0YSYgdGV4dE1hcmtlckQKICAgICBpZiAoIWRvbU5vZGUpCiAg
ICAgICAgIHJldHVybjsKICAgICAKLSAgICBpZiAoZG9tTm9kZS0+aXNIVE1MRWxlbWVudCgpKSB7
Ci0gICAgICAgIEhUTUxJbnB1dEVsZW1lbnQqIGlucHV0RWxlbWVudCA9IGRvbU5vZGUtPnRvSW5w
dXRFbGVtZW50KCk7Ci0gICAgICAgIGlmIChpbnB1dEVsZW1lbnQgJiYgaW5wdXRFbGVtZW50LT5p
c1Bhc3N3b3JkRmllbGQoKSkKLSAgICAgICAgICAgIHJldHVybjsKLSAgICB9CisgICAgaWYgKGlz
PEhUTUxJbnB1dEVsZW1lbnQ+KCpkb21Ob2RlKSAmJiBkb3duY2FzdDxIVE1MSW5wdXRFbGVtZW50
PigqZG9tTm9kZSkuaXNQYXNzd29yZEZpZWxkKCkpCisgICAgICAgIHJldHVybjsKICAgICAKICAg
ICAvLyBmaW5kIG9yIGNyZWF0ZSBhbiBhY2Nlc3NpYmlsaXR5IG9iamVjdCBmb3IgdGhpcyBub2Rl
CiAgICAgQVhPYmplY3RDYWNoZSogY2FjaGUgPSBkb21Ob2RlLT5kb2N1bWVudCgpLmF4T2JqZWN0
Q2FjaGUoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNz
aWJpbGl0eU5vZGVPYmplY3QuY3BwIGIvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nl
c3NpYmlsaXR5Tm9kZU9iamVjdC5jcHAKaW5kZXggODk1M2ViYWI2OTg4Njg4MmJmYjFlODMxYjAy
N2Y0ZTk5ZDY3MTg1MC4uMmRjMGZhNTAwNjY3M2UzY2RlZDNkMGY5MDQyYzk0OTU2MDY5MDQ0NSAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5Tm9k
ZU9iamVjdC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmls
aXR5Tm9kZU9iamVjdC5jcHAKQEAgLTQ5NCwxMCArNDk0LDExIEBAIGJvb2wgQWNjZXNzaWJpbGl0
eU5vZGVPYmplY3Q6OmlzU2VhcmNoRmllbGQoKSBjb25zdAogICAgIGlmIChyb2xlVmFsdWUoKSA9
PSBTZWFyY2hGaWVsZFJvbGUpCiAgICAgICAgIHJldHVybiB0cnVlOwogCi0gICAgSFRNTElucHV0
RWxlbWVudCogaW5wdXRFbGVtZW50ID0gbm9kZS0+dG9JbnB1dEVsZW1lbnQoKTsKLSAgICBpZiAo
IWlucHV0RWxlbWVudCkKKyAgICBpZiAoIWlzPEhUTUxJbnB1dEVsZW1lbnQ+KCpub2RlKSkKICAg
ICAgICAgcmV0dXJuIGZhbHNlOwogCisgICAgYXV0byYgaW5wdXRFbGVtZW50ID0gZG93bmNhc3Q8
SFRNTElucHV0RWxlbWVudD4oKm5vZGUpOworCiAgICAgLy8gU29tZSB3ZWJzaXRlcyBkb24ndCBs
YWJlbCB0aGVpciBzZWFyY2ggZmllbGRzIGFzIHN1Y2guIEhvd2V2ZXIsIHRoZXkgd2lsbAogICAg
IC8vIHVzZSB0aGUgd29yZCAic2VhcmNoIiBpbiBlaXRoZXIgdGhlIGZvcm0gb3IgaW5wdXQgdHlw
ZS4gVGhpcyB3b24ndCBjYXRjaCBldmVyeSBjYXNlLAogICAgIC8vIGJ1dCBpdCB3aWxsIGNhdGNo
IGdvb2dsZS5jb20gZm9yIGV4YW1wbGUuCkBAIC01MDgsNyArNTA5LDcgQEAgYm9vbCBBY2Nlc3Np
YmlsaXR5Tm9kZU9iamVjdDo6aXNTZWFyY2hGaWVsZCgpIGNvbnN0CiAgICAgICAgIHJldHVybiB0
cnVlOwogCiAgICAgLy8gQ2hlY2sgdGhlIGZvcm0gYWN0aW9uIGFuZCB0aGUgbmFtZSwgd2hpY2gg
d2lsbCBzb21ldGltZXMgYmUgInNlYXJjaCIuCi0gICAgSFRNTEZvcm1FbGVtZW50KiBmb3JtID0g
aW5wdXRFbGVtZW50LT5mb3JtKCk7CisgICAgYXV0byogZm9ybSA9IGlucHV0RWxlbWVudC5mb3Jt
KCk7CiAgICAgaWYgKGZvcm0gJiYgKGZvcm0tPm5hbWUoKS5jb250YWlucygic2VhcmNoIiwgZmFs
c2UpIHx8IGZvcm0tPmFjdGlvbigpLmNvbnRhaW5zKCJzZWFyY2giLCBmYWxzZSkpKQogICAgICAg
ICByZXR1cm4gdHJ1ZTsKIApAQCAtNTQyLDE4ICs1NDMsMTQgQEAgYm9vbCBBY2Nlc3NpYmlsaXR5
Tm9kZU9iamVjdDo6aXNJbWFnZSgpIGNvbnN0CiAKIGJvb2wgQWNjZXNzaWJpbGl0eU5vZGVPYmpl
Y3Q6OmlzUGFzc3dvcmRGaWVsZCgpIGNvbnN0CiB7Ci0gICAgTm9kZSogbm9kZSA9IHRoaXMtPm5v
ZGUoKTsKLSAgICBpZiAoIW5vZGUgfHwgIW5vZGUtPmlzSFRNTEVsZW1lbnQoKSkKKyAgICBhdXRv
KiBub2RlID0gdGhpcy0+bm9kZSgpOworICAgIGlmICghaXM8SFRNTElucHV0RWxlbWVudD4obm9k
ZSkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgIGlmIChhcmlhUm9sZUF0dHJpYnV0ZSgp
ICE9IFVua25vd25Sb2xlKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBIVE1MSW5wdXRF
bGVtZW50KiBpbnB1dEVsZW1lbnQgPSBub2RlLT50b0lucHV0RWxlbWVudCgpOwotICAgIGlmICgh
aW5wdXRFbGVtZW50KQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICByZXR1cm4gaW5wdXRF
bGVtZW50LT5pc1Bhc3N3b3JkRmllbGQoKTsKKyAgICByZXR1cm4gZG93bmNhc3Q8SFRNTElucHV0
RWxlbWVudD4oKm5vZGUpLmlzUGFzc3dvcmRGaWVsZCgpOwogfQogCiBBY2Nlc3NpYmlsaXR5T2Jq
ZWN0KiBBY2Nlc3NpYmlsaXR5Tm9kZU9iamVjdDo6cGFzc3dvcmRGaWVsZE9yQ29udGFpbmluZ1Bh
c3N3b3JkRmllbGQoKQpAQCAtNTYyLDE2ICs1NTksMTQgQEAgQWNjZXNzaWJpbGl0eU9iamVjdCog
QWNjZXNzaWJpbGl0eU5vZGVPYmplY3Q6OnBhc3N3b3JkRmllbGRPckNvbnRhaW5pbmdQYXNzd29y
ZEYKICAgICBpZiAoIW5vZGUpCiAgICAgICAgIHJldHVybiBudWxscHRyOwogCi0gICAgaWYgKEhU
TUxJbnB1dEVsZW1lbnQqIGlucHV0RWxlbWVudCA9IG5vZGUtPnRvSW5wdXRFbGVtZW50KCkpIHsK
LSAgICAgICAgaWYgKGlucHV0RWxlbWVudC0+aXNQYXNzd29yZEZpZWxkKCkpCi0gICAgICAgICAg
ICByZXR1cm4gdGhpczsKLSAgICB9CisgICAgaWYgKGlzPEhUTUxJbnB1dEVsZW1lbnQ+KCpub2Rl
KSAmJiBkb3duY2FzdDxIVE1MSW5wdXRFbGVtZW50Pigqbm9kZSkuaXNQYXNzd29yZEZpZWxkKCkp
CisgICAgICAgIHJldHVybiB0aGlzOwogCi0gICAgRWxlbWVudCogZWxlbWVudCA9IG5vZGUtPnNo
YWRvd0hvc3QoKTsKLSAgICBpZiAoIWVsZW1lbnQgfHwgIWlzPEhUTUxJbnB1dEVsZW1lbnQ+KGVs
ZW1lbnQpKQorICAgIGF1dG8qIGVsZW1lbnQgPSBub2RlLT5zaGFkb3dIb3N0KCk7CisgICAgaWYg
KCFpczxIVE1MSW5wdXRFbGVtZW50PihlbGVtZW50KSkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7
CiAKLSAgICBpZiAoQVhPYmplY3RDYWNoZSogY2FjaGUgPSBheE9iamVjdENhY2hlKCkpCisgICAg
aWYgKGF1dG8qIGNhY2hlID0gYXhPYmplY3RDYWNoZSgpKQogICAgICAgICByZXR1cm4gY2FjaGUt
PmdldE9yQ3JlYXRlKGVsZW1lbnQpOwogCiAgICAgcmV0dXJuIG51bGxwdHI7CkBAIC02NDMsMTQg
KzYzOCwxMSBAQCBib29sIEFjY2Vzc2liaWxpdHlOb2RlT2JqZWN0Ojppc01lbnVJdGVtKCkgY29u
c3QKIGJvb2wgQWNjZXNzaWJpbGl0eU5vZGVPYmplY3Q6OmlzTmF0aXZlQ2hlY2tib3hPclJhZGlv
KCkgY29uc3QKIHsKICAgICBOb2RlKiBub2RlID0gdGhpcy0+bm9kZSgpOwotICAgIGlmICghbm9k
ZSkKKyAgICBpZiAoIWlzPEhUTUxJbnB1dEVsZW1lbnQ+KG5vZGUpKQogICAgICAgICByZXR1cm4g
ZmFsc2U7CiAKLSAgICBIVE1MSW5wdXRFbGVtZW50KiBpbnB1dCA9IG5vZGUtPnRvSW5wdXRFbGVt
ZW50KCk7Ci0gICAgaWYgKGlucHV0KQotICAgICAgICByZXR1cm4gaW5wdXQtPmlzQ2hlY2tib3go
KSB8fCBpbnB1dC0+aXNSYWRpb0J1dHRvbigpOwotCi0gICAgcmV0dXJuIGZhbHNlOworICAgIGF1
dG8mIGlucHV0ID0gZG93bmNhc3Q8SFRNTElucHV0RWxlbWVudD4oKm5vZGUpOworICAgIHJldHVy
biBpbnB1dC5pc0NoZWNrYm94KCkgfHwgaW5wdXQuaXNSYWRpb0J1dHRvbigpOwogfQogCiBib29s
IEFjY2Vzc2liaWxpdHlOb2RlT2JqZWN0Ojppc0VuYWJsZWQoKSBjb25zdApAQCAtNjc3LDE0ICs2
NjksMTAgQEAgYm9vbCBBY2Nlc3NpYmlsaXR5Tm9kZU9iamVjdDo6aXNFbmFibGVkKCkgY29uc3QK
IGJvb2wgQWNjZXNzaWJpbGl0eU5vZGVPYmplY3Q6OmlzSW5kZXRlcm1pbmF0ZSgpIGNvbnN0CiB7
CiAgICAgTm9kZSogbm9kZSA9IHRoaXMtPm5vZGUoKTsKLSAgICBpZiAoIW5vZGUpCisgICAgaWYg
KCFpczxIVE1MSW5wdXRFbGVtZW50Pihub2RlKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0g
ICAgSFRNTElucHV0RWxlbWVudCogaW5wdXRFbGVtZW50ID0gbm9kZS0+dG9JbnB1dEVsZW1lbnQo
KTsKLSAgICBpZiAoIWlucHV0RWxlbWVudCkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAg
cmV0dXJuIGlucHV0RWxlbWVudC0+c2hvdWxkQXBwZWFySW5kZXRlcm1pbmF0ZSgpOworICAgIHJl
dHVybiBkb3duY2FzdDxIVE1MSW5wdXRFbGVtZW50Pigqbm9kZSkuc2hvdWxkQXBwZWFySW5kZXRl
cm1pbmF0ZSgpOwogfQogCiBib29sIEFjY2Vzc2liaWxpdHlOb2RlT2JqZWN0Ojppc1ByZXNzZWQo
KSBjb25zdApAQCAtNzE2LDkgKzcwNCw4IEBAIGJvb2wgQWNjZXNzaWJpbGl0eU5vZGVPYmplY3Q6
OmlzQ2hlY2tlZCgpIGNvbnN0CiAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgIC8vIEZpcnN0
IHRlc3QgZm9yIG5hdGl2ZSBjaGVja2VkbmVzcyBzZW1hbnRpY3MKLSAgICBIVE1MSW5wdXRFbGVt
ZW50KiBpbnB1dEVsZW1lbnQgPSBub2RlLT50b0lucHV0RWxlbWVudCgpOwotICAgIGlmIChpbnB1
dEVsZW1lbnQpCi0gICAgICAgIHJldHVybiBpbnB1dEVsZW1lbnQtPnNob3VsZEFwcGVhckNoZWNr
ZWQoKTsKKyAgICBpZiAoaXM8SFRNTElucHV0RWxlbWVudD4oKm5vZGUpKQorICAgICAgICByZXR1
cm4gZG93bmNhc3Q8SFRNTElucHV0RWxlbWVudD4oKm5vZGUpLnNob3VsZEFwcGVhckNoZWNrZWQo
KTsKIAogICAgIC8vIEVsc2UsIGlmIHRoaXMgaXMgYW4gQVJJQSBjaGVja2JveCBvciByYWRpbywg
cmVzcGVjdCB0aGUgYXJpYS1jaGVja2VkIGF0dHJpYnV0ZQogICAgIGJvb2wgdmFsaWRSb2xlID0g
ZmFsc2U7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9jc3MvU2VsZWN0b3JDaGVja2VyLmNw
cCBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9TZWxlY3RvckNoZWNrZXIuY3BwCmluZGV4IGZiYjM0ODUx
MjQ3MDViODBlZjU1MGM3ZjJiNzQ5ZmQ5NjYxMDEwNWQuLmU3NzM1MzcyODdhZDhlNWE2ODJhZTY1
YjU3ZDJmYWVhOGYzZjAzY2UgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9TZWxlY3Rv
ckNoZWNrZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9TZWxlY3RvckNoZWNrZXIuY3Bw
CkBAIC05MDMsNyArOTAzLDcgQEAgYm9vbCBTZWxlY3RvckNoZWNrZXI6OmNoZWNrT25lKGNvbnN0
IENoZWNraW5nQ29udGV4dFdpdGhTdGF0dXMmIGNvbnRleHQsIFBzZXVkb0kKICAgICAgICAgICAg
IH0KICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIENTU1NlbGVjdG9yOjpQc2V1ZG9D
bGFzc0F1dG9maWxsOgotICAgICAgICAgICAgcmV0dXJuIGlzQXV0b2ZpbGxlZChlbGVtZW50KTsK
KyAgICAgICAgICAgIHJldHVybiBpc0F1dG9maWxsZWQoKmVsZW1lbnQpOwogICAgICAgICBjYXNl
IENTU1NlbGVjdG9yOjpQc2V1ZG9DbGFzc0FueUxpbms6CiAgICAgICAgIGNhc2UgQ1NTU2VsZWN0
b3I6OlBzZXVkb0NsYXNzQW55TGlua0RlcHJlY2F0ZWQ6CiAgICAgICAgIGNhc2UgQ1NTU2VsZWN0
b3I6OlBzZXVkb0NsYXNzTGluazoKQEAgLTk3Miw3ICs5NzIsNyBAQCBib29sIFNlbGVjdG9yQ2hl
Y2tlcjo6Y2hlY2tPbmUoY29uc3QgQ2hlY2tpbmdDb250ZXh0V2l0aFN0YXR1cyYgY29udGV4dCwg
UHNldWRvSQogICAgICAgICBjYXNlIENTU1NlbGVjdG9yOjpQc2V1ZG9DbGFzc0ludmFsaWQ6CiAg
ICAgICAgICAgICByZXR1cm4gaXNJbnZhbGlkKGVsZW1lbnQpOwogICAgICAgICBjYXNlIENTU1Nl
bGVjdG9yOjpQc2V1ZG9DbGFzc0NoZWNrZWQ6Ci0gICAgICAgICAgICByZXR1cm4gaXNDaGVja2Vk
KGVsZW1lbnQpOworICAgICAgICAgICAgcmV0dXJuIGlzQ2hlY2tlZCgqZWxlbWVudCk7CiAgICAg
ICAgIGNhc2UgQ1NTU2VsZWN0b3I6OlBzZXVkb0NsYXNzSW5kZXRlcm1pbmF0ZToKICAgICAgICAg
ICAgIHJldHVybiBzaG91bGRBcHBlYXJJbmRldGVybWluYXRlKGVsZW1lbnQpOwogICAgICAgICBj
YXNlIENTU1NlbGVjdG9yOjpQc2V1ZG9DbGFzc1Jvb3Q6CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9jc3MvU2VsZWN0b3JDaGVja2VyVGVzdEZ1bmN0aW9ucy5oIGIvU291cmNlL1dlYkNvcmUv
Y3NzL1NlbGVjdG9yQ2hlY2tlclRlc3RGdW5jdGlvbnMuaAppbmRleCA4NmRiNThjMTg1MDMwZDE5
MzVkMDMwZjVmMjI3OGM3ZDQ4MzI5MmJjLi5kMjUxZDYyYWFkMWFhOWYwMTczZmYzZTAwYTQyZDAy
OTRmYjA5ZTJkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9jc3MvU2VsZWN0b3JDaGVja2Vy
VGVzdEZ1bmN0aW9ucy5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9TZWxlY3RvckNoZWNrZXJU
ZXN0RnVuY3Rpb25zLmgKQEAgLTQxLDEzICs0MSw5IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsK
IAotQUxXQVlTX0lOTElORSBib29sIGlzQXV0b2ZpbGxlZChjb25zdCBFbGVtZW50KiBlbGVtZW50
KQorQUxXQVlTX0lOTElORSBib29sIGlzQXV0b2ZpbGxlZChjb25zdCBFbGVtZW50JiBlbGVtZW50
KQogewotICAgIGlmIChpczxIVE1MRm9ybUNvbnRyb2xFbGVtZW50PigqZWxlbWVudCkpIHsKLSAg
ICAgICAgaWYgKGNvbnN0IEhUTUxJbnB1dEVsZW1lbnQqIGlucHV0RWxlbWVudCA9IGVsZW1lbnQt
PnRvSW5wdXRFbGVtZW50KCkpCi0gICAgICAgICAgICByZXR1cm4gaW5wdXRFbGVtZW50LT5pc0F1
dG9GaWxsZWQoKTsKLSAgICB9Ci0gICAgcmV0dXJuIGZhbHNlOworICAgIHJldHVybiBpczxIVE1M
SW5wdXRFbGVtZW50PihlbGVtZW50KSAmJiBkb3duY2FzdDxIVE1MSW5wdXRFbGVtZW50PihlbGVt
ZW50KS5pc0F1dG9GaWxsZWQoKTsKIH0KIAogQUxXQVlTX0lOTElORSBib29sIGlzRGVmYXVsdEJ1
dHRvbkZvckZvcm0oY29uc3QgRWxlbWVudCogZWxlbWVudCkKQEAgLTcyLDE2ICs2OCwxOCBAQCBB
TFdBWVNfSU5MSU5FIGJvb2wgaXNNZWRpYURvY3VtZW50KEVsZW1lbnQqIGVsZW1lbnQpCiAgICAg
cmV0dXJuIGVsZW1lbnQtPmRvY3VtZW50KCkuaXNNZWRpYURvY3VtZW50KCk7CiB9CiAKLUFMV0FZ
U19JTkxJTkUgYm9vbCBpc0NoZWNrZWQoRWxlbWVudCogZWxlbWVudCkKK0FMV0FZU19JTkxJTkUg
Ym9vbCBpc0NoZWNrZWQoRWxlbWVudCYgZWxlbWVudCkKIHsKICAgICAvLyBFdmVuIHRob3VnaCBX
aW5JRSBhbGxvd3MgY2hlY2tlZCBhbmQgaW5kZXRlcm1pbmF0ZSB0byBjby1leGlzdCwgdGhlIENT
UyBzZWxlY3RvciBzcGVjIHNheXMgdGhhdAogICAgIC8vIHlvdSBjYW4ndCBiZSBib3RoIGNoZWNr
ZWQgYW5kIGluZGV0ZXJtaW5hdGUuIFdlIHdpbGwgYmVoYXZlIGxpa2UgV2luSUUgYmVoaW5kIHRo
ZSBzY2VuZXMgYW5kIGp1c3QKICAgICAvLyBvYmV5IHRoZSBDU1Mgc3BlYyBoZXJlIGluIHRoZSB0
ZXN0IGZvciBtYXRjaGluZyB0aGUgcHNldWRvLgotICAgIGNvbnN0IEhUTUxJbnB1dEVsZW1lbnQq
IGlucHV0RWxlbWVudCA9IGVsZW1lbnQtPnRvSW5wdXRFbGVtZW50KCk7Ci0gICAgaWYgKGlucHV0
RWxlbWVudCAmJiBpbnB1dEVsZW1lbnQtPnNob3VsZEFwcGVhckNoZWNrZWQoKSAmJiAhaW5wdXRF
bGVtZW50LT5zaG91bGRBcHBlYXJJbmRldGVybWluYXRlKCkpCi0gICAgICAgIHJldHVybiB0cnVl
OwotICAgIGlmIChpczxIVE1MT3B0aW9uRWxlbWVudD4oKmVsZW1lbnQpICYmIGRvd25jYXN0PEhU
TUxPcHRpb25FbGVtZW50PigqZWxlbWVudCkuc2VsZWN0ZWQoKSkKLSAgICAgICAgcmV0dXJuIHRy
dWU7CisgICAgaWYgKGlzPEhUTUxJbnB1dEVsZW1lbnQ+KGVsZW1lbnQpKSB7CisgICAgICAgIGF1
dG8mIGlucHV0RWxlbWVudCA9IGRvd25jYXN0PEhUTUxJbnB1dEVsZW1lbnQ+KGVsZW1lbnQpOwor
ICAgICAgICByZXR1cm4gaW5wdXRFbGVtZW50LnNob3VsZEFwcGVhckNoZWNrZWQoKSAmJiAhaW5w
dXRFbGVtZW50LnNob3VsZEFwcGVhckluZGV0ZXJtaW5hdGUoKTsKKyAgICB9CisgICAgaWYgKGlz
PEhUTUxPcHRpb25FbGVtZW50PihlbGVtZW50KSkKKyAgICAgICAgcmV0dXJuIGRvd25jYXN0PEhU
TUxPcHRpb25FbGVtZW50PihlbGVtZW50KS5zZWxlY3RlZCgpOworCiAgICAgcmV0dXJuIGZhbHNl
OwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9jc3MvU3R5bGVSZXNvbHZlci5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9jc3MvU3R5bGVSZXNvbHZlci5jcHAKaW5kZXggMGE0MjRhZDY3Y2Zl
YmVjZTg4OWY2YWE3NGY4MzIyN2I5YWYxYTc3Mi4uMTU5ZDJjMjVhZjg5NGNhYjM1NDU3YjYxY2Yx
YjJkOTcxNGRkYzU0YyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvY3NzL1N0eWxlUmVzb2x2
ZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9TdHlsZVJlc29sdmVyLmNwcApAQCAtNDc5
LDg0ICs0NzksODQgQEAgYm9vbCBTdHlsZVJlc29sdmVyOjpzdHlsZVNoYXJpbmdDYW5kaWRhdGVN
YXRjaGVzUnVsZVNldChSdWxlU2V0KiBydWxlU2V0KQogICAgIHJldHVybiBjb2xsZWN0b3IuaGFz
QW55TWF0Y2hpbmdSdWxlcyhydWxlU2V0KTsKIH0KIAotYm9vbCBTdHlsZVJlc29sdmVyOjpjYW5T
aGFyZVN0eWxlV2l0aENvbnRyb2woU3R5bGVkRWxlbWVudCogZWxlbWVudCkgY29uc3QKK2Jvb2wg
U3R5bGVSZXNvbHZlcjo6Y2FuU2hhcmVTdHlsZVdpdGhDb250cm9sKFN0eWxlZEVsZW1lbnQmIGVs
ZW1lbnQpIGNvbnN0CiB7CiAgICAgY29uc3QgU3RhdGUmIHN0YXRlID0gbV9zdGF0ZTsKLSAgICBI
VE1MSW5wdXRFbGVtZW50KiB0aGlzSW5wdXRFbGVtZW50ID0gZWxlbWVudC0+dG9JbnB1dEVsZW1l
bnQoKTsKLSAgICBIVE1MSW5wdXRFbGVtZW50KiBvdGhlcklucHV0RWxlbWVudCA9IHN0YXRlLmVs
ZW1lbnQoKS0+dG9JbnB1dEVsZW1lbnQoKTsKLQotICAgIGlmICghdGhpc0lucHV0RWxlbWVudCB8
fCAhb3RoZXJJbnB1dEVsZW1lbnQpCisgICAgaWYgKCFpczxIVE1MSW5wdXRFbGVtZW50PihlbGVt
ZW50KSB8fCAhaXM8SFRNTElucHV0RWxlbWVudD4oKnN0YXRlLmVsZW1lbnQoKSkpCiAgICAgICAg
IHJldHVybiBmYWxzZTsKIAotICAgIGlmICh0aGlzSW5wdXRFbGVtZW50LT5pc0F1dG9GaWxsZWQo
KSAhPSBvdGhlcklucHV0RWxlbWVudC0+aXNBdXRvRmlsbGVkKCkpCisgICAgYXV0byYgdGhpc0lu
cHV0RWxlbWVudCA9IGRvd25jYXN0PEhUTUxJbnB1dEVsZW1lbnQ+KGVsZW1lbnQpOworICAgIGF1
dG8mIG90aGVySW5wdXRFbGVtZW50ID0gZG93bmNhc3Q8SFRNTElucHV0RWxlbWVudD4oKnN0YXRl
LmVsZW1lbnQoKSk7CisKKyAgICBpZiAodGhpc0lucHV0RWxlbWVudC5pc0F1dG9GaWxsZWQoKSAh
PSBvdGhlcklucHV0RWxlbWVudC5pc0F1dG9GaWxsZWQoKSkKICAgICAgICAgcmV0dXJuIGZhbHNl
OwotICAgIGlmICh0aGlzSW5wdXRFbGVtZW50LT5zaG91bGRBcHBlYXJDaGVja2VkKCkgIT0gb3Ro
ZXJJbnB1dEVsZW1lbnQtPnNob3VsZEFwcGVhckNoZWNrZWQoKSkKKyAgICBpZiAodGhpc0lucHV0
RWxlbWVudC5zaG91bGRBcHBlYXJDaGVja2VkKCkgIT0gb3RoZXJJbnB1dEVsZW1lbnQuc2hvdWxk
QXBwZWFyQ2hlY2tlZCgpKQogICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgaWYgKHRoaXNJbnB1
dEVsZW1lbnQtPnNob3VsZEFwcGVhckluZGV0ZXJtaW5hdGUoKSAhPSBvdGhlcklucHV0RWxlbWVu
dC0+c2hvdWxkQXBwZWFySW5kZXRlcm1pbmF0ZSgpKQorICAgIGlmICh0aGlzSW5wdXRFbGVtZW50
LnNob3VsZEFwcGVhckluZGV0ZXJtaW5hdGUoKSAhPSBvdGhlcklucHV0RWxlbWVudC5zaG91bGRB
cHBlYXJJbmRldGVybWluYXRlKCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBpZiAodGhp
c0lucHV0RWxlbWVudC0+aXNSZXF1aXJlZCgpICE9IG90aGVySW5wdXRFbGVtZW50LT5pc1JlcXVp
cmVkKCkpCisgICAgaWYgKHRoaXNJbnB1dEVsZW1lbnQuaXNSZXF1aXJlZCgpICE9IG90aGVySW5w
dXRFbGVtZW50LmlzUmVxdWlyZWQoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgaWYg
KGVsZW1lbnQtPmlzRGlzYWJsZWRGb3JtQ29udHJvbCgpICE9IHN0YXRlLmVsZW1lbnQoKS0+aXNE
aXNhYmxlZEZvcm1Db250cm9sKCkpCisgICAgaWYgKGVsZW1lbnQuaXNEaXNhYmxlZEZvcm1Db250
cm9sKCkgIT0gc3RhdGUuZWxlbWVudCgpLT5pc0Rpc2FibGVkRm9ybUNvbnRyb2woKSkKICAgICAg
ICAgcmV0dXJuIGZhbHNlOwogCi0gICAgaWYgKGVsZW1lbnQtPmlzRGVmYXVsdEJ1dHRvbkZvckZv
cm0oKSAhPSBzdGF0ZS5lbGVtZW50KCktPmlzRGVmYXVsdEJ1dHRvbkZvckZvcm0oKSkKKyAgICBp
ZiAoZWxlbWVudC5pc0RlZmF1bHRCdXR0b25Gb3JGb3JtKCkgIT0gc3RhdGUuZWxlbWVudCgpLT5p
c0RlZmF1bHRCdXR0b25Gb3JGb3JtKCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIGlm
IChlbGVtZW50LT5pc0luUmFuZ2UoKSAhPSBzdGF0ZS5lbGVtZW50KCktPmlzSW5SYW5nZSgpKQor
ICAgIGlmIChlbGVtZW50LmlzSW5SYW5nZSgpICE9IHN0YXRlLmVsZW1lbnQoKS0+aXNJblJhbmdl
KCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIGlmIChlbGVtZW50LT5pc091dE9mUmFu
Z2UoKSAhPSBzdGF0ZS5lbGVtZW50KCktPmlzT3V0T2ZSYW5nZSgpKQorICAgIGlmIChlbGVtZW50
LmlzT3V0T2ZSYW5nZSgpICE9IHN0YXRlLmVsZW1lbnQoKS0+aXNPdXRPZlJhbmdlKCkpCiAgICAg
ICAgIHJldHVybiBmYWxzZTsKIAogICAgIHJldHVybiB0cnVlOwogfQogCi1zdGF0aWMgaW5saW5l
IGJvb2wgZWxlbWVudEhhc0RpcmVjdGlvbkF1dG8oRWxlbWVudCogZWxlbWVudCkKK3N0YXRpYyBp
bmxpbmUgYm9vbCBlbGVtZW50SGFzRGlyZWN0aW9uQXV0byhFbGVtZW50JiBlbGVtZW50KQogewog
ICAgIC8vIEZJWE1FOiBUaGlzIGxpbmUgaXMgc3VycHJpc2luZ2x5IGhvdCwgd2UgbWF5IHdpc2gg
dG8gaW5saW5lIGhhc0RpcmVjdGlvbkF1dG8gaW50byBTdHlsZVJlc29sdmVyLgotICAgIHJldHVy
biBpczxIVE1MRWxlbWVudD4oKmVsZW1lbnQpICYmIGRvd25jYXN0PEhUTUxFbGVtZW50PigqZWxl
bWVudCkuaGFzRGlyZWN0aW9uQXV0bygpOworICAgIHJldHVybiBpczxIVE1MRWxlbWVudD4oZWxl
bWVudCkgJiYgZG93bmNhc3Q8SFRNTEVsZW1lbnQ+KGVsZW1lbnQpLmhhc0RpcmVjdGlvbkF1dG8o
KTsKIH0KIAotYm9vbCBTdHlsZVJlc29sdmVyOjpzaGFyaW5nQ2FuZGlkYXRlSGFzSWRlbnRpY2Fs
U3R5bGVBZmZlY3RpbmdBdHRyaWJ1dGVzKFN0eWxlZEVsZW1lbnQqIHNoYXJpbmdDYW5kaWRhdGUp
IGNvbnN0Citib29sIFN0eWxlUmVzb2x2ZXI6OnNoYXJpbmdDYW5kaWRhdGVIYXNJZGVudGljYWxT
dHlsZUFmZmVjdGluZ0F0dHJpYnV0ZXMoU3R5bGVkRWxlbWVudCYgc2hhcmluZ0NhbmRpZGF0ZSkg
Y29uc3QKIHsKICAgICBjb25zdCBTdGF0ZSYgc3RhdGUgPSBtX3N0YXRlOwotICAgIGlmIChzdGF0
ZS5lbGVtZW50KCktPmVsZW1lbnREYXRhKCkgPT0gc2hhcmluZ0NhbmRpZGF0ZS0+ZWxlbWVudERh
dGEoKSkKKyAgICBpZiAoc3RhdGUuZWxlbWVudCgpLT5lbGVtZW50RGF0YSgpID09IHNoYXJpbmdD
YW5kaWRhdGUuZWxlbWVudERhdGEoKSkKICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgaWYgKHN0
YXRlLmVsZW1lbnQoKS0+ZmFzdEdldEF0dHJpYnV0ZShYTUxOYW1lczo6bGFuZ0F0dHIpICE9IHNo
YXJpbmdDYW5kaWRhdGUtPmZhc3RHZXRBdHRyaWJ1dGUoWE1MTmFtZXM6OmxhbmdBdHRyKSkKKyAg
ICBpZiAoc3RhdGUuZWxlbWVudCgpLT5mYXN0R2V0QXR0cmlidXRlKFhNTE5hbWVzOjpsYW5nQXR0
cikgIT0gc2hhcmluZ0NhbmRpZGF0ZS5mYXN0R2V0QXR0cmlidXRlKFhNTE5hbWVzOjpsYW5nQXR0
cikpCiAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBpZiAoc3RhdGUuZWxlbWVudCgpLT5mYXN0
R2V0QXR0cmlidXRlKGxhbmdBdHRyKSAhPSBzaGFyaW5nQ2FuZGlkYXRlLT5mYXN0R2V0QXR0cmli
dXRlKGxhbmdBdHRyKSkKKyAgICBpZiAoc3RhdGUuZWxlbWVudCgpLT5mYXN0R2V0QXR0cmlidXRl
KGxhbmdBdHRyKSAhPSBzaGFyaW5nQ2FuZGlkYXRlLmZhc3RHZXRBdHRyaWJ1dGUobGFuZ0F0dHIp
KQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICBpZiAoIXN0YXRlLmVsZW1lbnRBZmZlY3Rl
ZEJ5Q2xhc3NSdWxlcygpKSB7Ci0gICAgICAgIGlmIChzaGFyaW5nQ2FuZGlkYXRlLT5oYXNDbGFz
cygpICYmIGNsYXNzTmFtZXNBZmZlY3RlZEJ5UnVsZXMoc2hhcmluZ0NhbmRpZGF0ZS0+Y2xhc3NO
YW1lcygpKSkKKyAgICAgICAgaWYgKHNoYXJpbmdDYW5kaWRhdGUuaGFzQ2xhc3MoKSAmJiBjbGFz
c05hbWVzQWZmZWN0ZWRCeVJ1bGVzKHNoYXJpbmdDYW5kaWRhdGUuY2xhc3NOYW1lcygpKSkKICAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9IGVsc2UgaWYgKHNoYXJpbmdDYW5kaWRhdGUt
Pmhhc0NsYXNzKCkpIHsKKyAgICB9IGVsc2UgaWYgKHNoYXJpbmdDYW5kaWRhdGUuaGFzQ2xhc3Mo
KSkgewogICAgICAgICAvLyBTVkcgZWxlbWVudHMgcmVxdWlyZSBhIChzbG93ISkgZ2V0QXR0cmli
dXRlIGNvbXBhcmlzaW9uIGJlY2F1c2UgImNsYXNzIiBpcyBhbiBhbmltYXRhYmxlIGF0dHJpYnV0
ZSBmb3IgU1ZHLgogICAgICAgICBpZiAoc3RhdGUuZWxlbWVudCgpLT5pc1NWR0VsZW1lbnQoKSkg
ewotICAgICAgICAgICAgaWYgKHN0YXRlLmVsZW1lbnQoKS0+Z2V0QXR0cmlidXRlKGNsYXNzQXR0
cikgIT0gc2hhcmluZ0NhbmRpZGF0ZS0+Z2V0QXR0cmlidXRlKGNsYXNzQXR0cikpCisgICAgICAg
ICAgICBpZiAoc3RhdGUuZWxlbWVudCgpLT5nZXRBdHRyaWJ1dGUoY2xhc3NBdHRyKSAhPSBzaGFy
aW5nQ2FuZGlkYXRlLmdldEF0dHJpYnV0ZShjbGFzc0F0dHIpKQogICAgICAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsKICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIGlmIChzdGF0ZS5lbGVt
ZW50KCktPmNsYXNzTmFtZXMoKSAhPSBzaGFyaW5nQ2FuZGlkYXRlLT5jbGFzc05hbWVzKCkpCisg
ICAgICAgICAgICBpZiAoc3RhdGUuZWxlbWVudCgpLT5jbGFzc05hbWVzKCkgIT0gc2hhcmluZ0Nh
bmRpZGF0ZS5jbGFzc05hbWVzKCkpCiAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAg
ICAgICB9CiAgICAgfSBlbHNlCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIGlmIChzdGF0
ZS5zdHlsZWRFbGVtZW50KCktPnByZXNlbnRhdGlvbkF0dHJpYnV0ZVN0eWxlKCkgIT0gc2hhcmlu
Z0NhbmRpZGF0ZS0+cHJlc2VudGF0aW9uQXR0cmlidXRlU3R5bGUoKSkKKyAgICBpZiAoc3RhdGUu
c3R5bGVkRWxlbWVudCgpLT5wcmVzZW50YXRpb25BdHRyaWJ1dGVTdHlsZSgpICE9IHNoYXJpbmdD
YW5kaWRhdGUucHJlc2VudGF0aW9uQXR0cmlidXRlU3R5bGUoKSkKICAgICAgICAgcmV0dXJuIGZh
bHNlOwogCiAgICAgaWYgKHN0YXRlLmVsZW1lbnQoKS0+aGFzVGFnTmFtZShwcm9ncmVzc1RhZykp
IHsKLSAgICAgICAgaWYgKHN0YXRlLmVsZW1lbnQoKS0+c2hvdWxkQXBwZWFySW5kZXRlcm1pbmF0
ZSgpICE9IHNoYXJpbmdDYW5kaWRhdGUtPnNob3VsZEFwcGVhckluZGV0ZXJtaW5hdGUoKSkKKyAg
ICAgICAgaWYgKHN0YXRlLmVsZW1lbnQoKS0+c2hvdWxkQXBwZWFySW5kZXRlcm1pbmF0ZSgpICE9
IHNoYXJpbmdDYW5kaWRhdGUuc2hvdWxkQXBwZWFySW5kZXRlcm1pbmF0ZSgpKQogICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOwogICAgIH0KIAogICAgIHJldHVybiB0cnVlOwogfQogCi1ib29sIFN0
eWxlUmVzb2x2ZXI6OmNhblNoYXJlU3R5bGVXaXRoRWxlbWVudChTdHlsZWRFbGVtZW50KiBlbGVt
ZW50KSBjb25zdAorYm9vbCBTdHlsZVJlc29sdmVyOjpjYW5TaGFyZVN0eWxlV2l0aEVsZW1lbnQo
U3R5bGVkRWxlbWVudCYgZWxlbWVudCkgY29uc3QKIHsKLSAgICBSZW5kZXJTdHlsZSogc3R5bGUg
PSBlbGVtZW50LT5yZW5kZXJTdHlsZSgpOworICAgIGF1dG8qIHN0eWxlID0gZWxlbWVudC5yZW5k
ZXJTdHlsZSgpOwogICAgIGNvbnN0IFN0YXRlJiBzdGF0ZSA9IG1fc3RhdGU7CiAKICAgICBpZiAo
IXN0eWxlKQpAQCAtNTY1LDM3ICs1NjUsMzcgQEAgYm9vbCBTdHlsZVJlc29sdmVyOjpjYW5TaGFy
ZVN0eWxlV2l0aEVsZW1lbnQoU3R5bGVkRWxlbWVudCogZWxlbWVudCkgY29uc3QKICAgICAgICAg
cmV0dXJuIGZhbHNlOwogICAgIGlmIChzdHlsZS0+aGFzVW5pcXVlUHNldWRvU3R5bGUoKSkKICAg
ICAgICAgcmV0dXJuIGZhbHNlOwotICAgIGlmIChlbGVtZW50LT50YWdRTmFtZSgpICE9IHN0YXRl
LmVsZW1lbnQoKS0+dGFnUU5hbWUoKSkKKyAgICBpZiAoZWxlbWVudC50YWdRTmFtZSgpICE9IHN0
YXRlLmVsZW1lbnQoKS0+dGFnUU5hbWUoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIGlm
IChlbGVtZW50LT5pbmxpbmVTdHlsZSgpKQorICAgIGlmIChlbGVtZW50LmlubGluZVN0eWxlKCkp
CiAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBpZiAoZWxlbWVudC0+bmVlZHNTdHlsZVJlY2Fs
YygpKQorICAgIGlmIChlbGVtZW50Lm5lZWRzU3R5bGVSZWNhbGMoKSkKICAgICAgICAgcmV0dXJu
IGZhbHNlOwotICAgIGlmIChlbGVtZW50LT5pc1NWR0VsZW1lbnQoKSAmJiBkb3duY2FzdDxTVkdF
bGVtZW50PigqZWxlbWVudCkuYW5pbWF0ZWRTTUlMU3R5bGVQcm9wZXJ0aWVzKCkpCisgICAgaWYg
KGVsZW1lbnQuaXNTVkdFbGVtZW50KCkgJiYgZG93bmNhc3Q8U1ZHRWxlbWVudD4oZWxlbWVudCku
YW5pbWF0ZWRTTUlMU3R5bGVQcm9wZXJ0aWVzKCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKLSAg
ICBpZiAoZWxlbWVudC0+aXNMaW5rKCkgIT0gc3RhdGUuZWxlbWVudCgpLT5pc0xpbmsoKSkKKyAg
ICBpZiAoZWxlbWVudC5pc0xpbmsoKSAhPSBzdGF0ZS5lbGVtZW50KCktPmlzTGluaygpKQogICAg
ICAgICByZXR1cm4gZmFsc2U7Ci0gICAgaWYgKGVsZW1lbnQtPmhvdmVyZWQoKSAhPSBzdGF0ZS5l
bGVtZW50KCktPmhvdmVyZWQoKSkKKyAgICBpZiAoZWxlbWVudC5ob3ZlcmVkKCkgIT0gc3RhdGUu
ZWxlbWVudCgpLT5ob3ZlcmVkKCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBpZiAoZWxl
bWVudC0+YWN0aXZlKCkgIT0gc3RhdGUuZWxlbWVudCgpLT5hY3RpdmUoKSkKKyAgICBpZiAoZWxl
bWVudC5hY3RpdmUoKSAhPSBzdGF0ZS5lbGVtZW50KCktPmFjdGl2ZSgpKQogICAgICAgICByZXR1
cm4gZmFsc2U7Ci0gICAgaWYgKGVsZW1lbnQtPmZvY3VzZWQoKSAhPSBzdGF0ZS5lbGVtZW50KCkt
PmZvY3VzZWQoKSkKKyAgICBpZiAoZWxlbWVudC5mb2N1c2VkKCkgIT0gc3RhdGUuZWxlbWVudCgp
LT5mb2N1c2VkKCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBpZiAoZWxlbWVudC0+c2hh
ZG93UHNldWRvSWQoKSAhPSBzdGF0ZS5lbGVtZW50KCktPnNoYWRvd1BzZXVkb0lkKCkpCisgICAg
aWYgKGVsZW1lbnQuc2hhZG93UHNldWRvSWQoKSAhPSBzdGF0ZS5lbGVtZW50KCktPnNoYWRvd1Bz
ZXVkb0lkKCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBpZiAoZWxlbWVudCA9PSBlbGVt
ZW50LT5kb2N1bWVudCgpLmNzc1RhcmdldCgpKQorICAgIGlmICgmZWxlbWVudCA9PSBlbGVtZW50
LmRvY3VtZW50KCkuY3NzVGFyZ2V0KCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICBpZiAo
IXNoYXJpbmdDYW5kaWRhdGVIYXNJZGVudGljYWxTdHlsZUFmZmVjdGluZ0F0dHJpYnV0ZXMoZWxl
bWVudCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBpZiAoZWxlbWVudC0+YWRkaXRpb25h
bFByZXNlbnRhdGlvbkF0dHJpYnV0ZVN0eWxlKCkgIT0gc3RhdGUuc3R5bGVkRWxlbWVudCgpLT5h
ZGRpdGlvbmFsUHJlc2VudGF0aW9uQXR0cmlidXRlU3R5bGUoKSkKKyAgICBpZiAoZWxlbWVudC5h
ZGRpdGlvbmFsUHJlc2VudGF0aW9uQXR0cmlidXRlU3R5bGUoKSAhPSBzdGF0ZS5zdHlsZWRFbGVt
ZW50KCktPmFkZGl0aW9uYWxQcmVzZW50YXRpb25BdHRyaWJ1dGVTdHlsZSgpKQogICAgICAgICBy
ZXR1cm4gZmFsc2U7Ci0gICAgaWYgKGVsZW1lbnQtPmFmZmVjdHNOZXh0U2libGluZ0VsZW1lbnRT
dHlsZSgpIHx8IGVsZW1lbnQtPnN0eWxlSXNBZmZlY3RlZEJ5UHJldmlvdXNTaWJsaW5nKCkpCisg
ICAgaWYgKGVsZW1lbnQuYWZmZWN0c05leHRTaWJsaW5nRWxlbWVudFN0eWxlKCkgfHwgZWxlbWVu
dC5zdHlsZUlzQWZmZWN0ZWRCeVByZXZpb3VzU2libGluZygpKQogICAgICAgICByZXR1cm4gZmFs
c2U7CiAKLSAgICBpZiAoZWxlbWVudC0+aGFzSUQoKSAmJiBtX3J1bGVTZXRzLmZlYXR1cmVzKCku
aWRzSW5SdWxlcy5jb250YWlucyhlbGVtZW50LT5pZEZvclN0eWxlUmVzb2x1dGlvbigpLmltcGwo
KSkpCisgICAgaWYgKGVsZW1lbnQuaGFzSUQoKSAmJiBtX3J1bGVTZXRzLmZlYXR1cmVzKCkuaWRz
SW5SdWxlcy5jb250YWlucyhlbGVtZW50LmlkRm9yU3R5bGVSZXNvbHV0aW9uKCkuaW1wbCgpKSkK
ICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgYm9vbCBpc0NvbnRyb2wgPSBpczxIVE1MRm9y
bUNvbnRyb2xFbGVtZW50PigqZWxlbWVudCk7CisgICAgYm9vbCBpc0NvbnRyb2wgPSBpczxIVE1M
Rm9ybUNvbnRyb2xFbGVtZW50PihlbGVtZW50KTsKIAogICAgIGlmIChpc0NvbnRyb2wgIT0gaXM8
SFRNTEZvcm1Db250cm9sRWxlbWVudD4oKnN0YXRlLmVsZW1lbnQoKSkpCiAgICAgICAgIHJldHVy
biBmYWxzZTsKQEAgLTYwOCwzMSArNjA4LDMxIEBAIGJvb2wgU3R5bGVSZXNvbHZlcjo6Y2FuU2hh
cmVTdHlsZVdpdGhFbGVtZW50KFN0eWxlZEVsZW1lbnQqIGVsZW1lbnQpIGNvbnN0CiAKICAgICAv
LyBUdXJuIG9mZiBzdHlsZSBzaGFyaW5nIGZvciBlbGVtZW50cyB0aGF0IGNhbiBnYWluIGxheWVy
cyBmb3IgcmVhc29ucyBvdXRzaWRlIG9mIHRoZSBzdHlsZSBzeXN0ZW0uCiAgICAgLy8gU2VlIGNv
bW1lbnRzIGluIFJlbmRlck9iamVjdDo6c2V0U3R5bGUoKS4KLSAgICBpZiAoZWxlbWVudC0+aGFz
VGFnTmFtZShpZnJhbWVUYWcpIHx8IGVsZW1lbnQtPmhhc1RhZ05hbWUoZnJhbWVUYWcpIHx8IGVs
ZW1lbnQtPmhhc1RhZ05hbWUoZW1iZWRUYWcpIHx8IGVsZW1lbnQtPmhhc1RhZ05hbWUob2JqZWN0
VGFnKSB8fCBlbGVtZW50LT5oYXNUYWdOYW1lKGFwcGxldFRhZykgfHwgZWxlbWVudC0+aGFzVGFn
TmFtZShjYW52YXNUYWcpKQorICAgIGlmIChlbGVtZW50Lmhhc1RhZ05hbWUoaWZyYW1lVGFnKSB8
fCBlbGVtZW50Lmhhc1RhZ05hbWUoZnJhbWVUYWcpIHx8IGVsZW1lbnQuaGFzVGFnTmFtZShlbWJl
ZFRhZykgfHwgZWxlbWVudC5oYXNUYWdOYW1lKG9iamVjdFRhZykgfHwgZWxlbWVudC5oYXNUYWdO
YW1lKGFwcGxldFRhZykgfHwgZWxlbWVudC5oYXNUYWdOYW1lKGNhbnZhc1RhZykpCiAgICAgICAg
IHJldHVybiBmYWxzZTsKIAogICAgIGlmIChlbGVtZW50SGFzRGlyZWN0aW9uQXV0byhlbGVtZW50
KSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgaWYgKGVsZW1lbnQtPmlzTGluaygpICYm
IHN0YXRlLmVsZW1lbnRMaW5rU3RhdGUoKSAhPSBzdHlsZS0+aW5zaWRlTGluaygpKQorICAgIGlm
IChlbGVtZW50LmlzTGluaygpICYmIHN0YXRlLmVsZW1lbnRMaW5rU3RhdGUoKSAhPSBzdHlsZS0+
aW5zaWRlTGluaygpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBpZiAoZWxlbWVudC0+
ZWxlbWVudERhdGEoKSAhPSBzdGF0ZS5lbGVtZW50KCktPmVsZW1lbnREYXRhKCkpIHsKLSAgICAg
ICAgaWYgKGVsZW1lbnQtPmZhc3RHZXRBdHRyaWJ1dGUocmVhZG9ubHlBdHRyKSAhPSBzdGF0ZS5l
bGVtZW50KCktPmZhc3RHZXRBdHRyaWJ1dGUocmVhZG9ubHlBdHRyKSkKKyAgICBpZiAoZWxlbWVu
dC5lbGVtZW50RGF0YSgpICE9IHN0YXRlLmVsZW1lbnQoKS0+ZWxlbWVudERhdGEoKSkgeworICAg
ICAgICBpZiAoZWxlbWVudC5mYXN0R2V0QXR0cmlidXRlKHJlYWRvbmx5QXR0cikgIT0gc3RhdGUu
ZWxlbWVudCgpLT5mYXN0R2V0QXR0cmlidXRlKHJlYWRvbmx5QXR0cikpCiAgICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7Ci0gICAgICAgIGlmIChlbGVtZW50LT5pc1NWR0VsZW1lbnQoKSkgewotICAg
ICAgICAgICAgaWYgKGVsZW1lbnQtPmdldEF0dHJpYnV0ZSh0eXBlQXR0cikgIT0gc3RhdGUuZWxl
bWVudCgpLT5nZXRBdHRyaWJ1dGUodHlwZUF0dHIpKQorICAgICAgICBpZiAoZWxlbWVudC5pc1NW
R0VsZW1lbnQoKSkgeworICAgICAgICAgICAgaWYgKGVsZW1lbnQuZ2V0QXR0cmlidXRlKHR5cGVB
dHRyKSAhPSBzdGF0ZS5lbGVtZW50KCktPmdldEF0dHJpYnV0ZSh0eXBlQXR0cikpCiAgICAgICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgaWYg
KGVsZW1lbnQtPmZhc3RHZXRBdHRyaWJ1dGUodHlwZUF0dHIpICE9IHN0YXRlLmVsZW1lbnQoKS0+
ZmFzdEdldEF0dHJpYnV0ZSh0eXBlQXR0cikpCisgICAgICAgICAgICBpZiAoZWxlbWVudC5mYXN0
R2V0QXR0cmlidXRlKHR5cGVBdHRyKSAhPSBzdGF0ZS5lbGVtZW50KCktPmZhc3RHZXRBdHRyaWJ1
dGUodHlwZUF0dHIpKQogICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgfQog
ICAgIH0KIAotICAgIGlmIChlbGVtZW50LT5tYXRjaGVzVmFsaWRQc2V1ZG9DbGFzcygpICE9IHN0
YXRlLmVsZW1lbnQoKS0+bWF0Y2hlc1ZhbGlkUHNldWRvQ2xhc3MoKSkKKyAgICBpZiAoZWxlbWVu
dC5tYXRjaGVzVmFsaWRQc2V1ZG9DbGFzcygpICE9IHN0YXRlLmVsZW1lbnQoKS0+bWF0Y2hlc1Zh
bGlkUHNldWRvQ2xhc3MoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgaWYgKGVsZW1l
bnQtPm1hdGNoZXNJbnZhbGlkUHNldWRvQ2xhc3MoKSAhPSBzdGF0ZS5lbGVtZW50KCktPm1hdGNo
ZXNWYWxpZFBzZXVkb0NsYXNzKCkpCisgICAgaWYgKGVsZW1lbnQubWF0Y2hlc0ludmFsaWRQc2V1
ZG9DbGFzcygpICE9IHN0YXRlLmVsZW1lbnQoKS0+bWF0Y2hlc1ZhbGlkUHNldWRvQ2xhc3MoKSkK
ICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAjaWYgRU5BQkxFKFZJREVPX1RSQUNLKQpAQCAtNjQy
LDcgKzY0Miw3IEBAIGJvb2wgU3R5bGVSZXNvbHZlcjo6Y2FuU2hhcmVTdHlsZVdpdGhFbGVtZW50
KFN0eWxlZEVsZW1lbnQqIGVsZW1lbnQpIGNvbnN0CiAjZW5kaWYKIAogI2lmIEVOQUJMRShGVUxM
U0NSRUVOX0FQSSkKLSAgICBpZiAoZWxlbWVudCA9PSBlbGVtZW50LT5kb2N1bWVudCgpLndlYmtp
dEN1cnJlbnRGdWxsU2NyZWVuRWxlbWVudCgpIHx8IHN0YXRlLmVsZW1lbnQoKSA9PSBzdGF0ZS5k
b2N1bWVudCgpLndlYmtpdEN1cnJlbnRGdWxsU2NyZWVuRWxlbWVudCgpKQorICAgIGlmICgmZWxl
bWVudCA9PSBlbGVtZW50LmRvY3VtZW50KCkud2Via2l0Q3VycmVudEZ1bGxTY3JlZW5FbGVtZW50
KCkgfHwgc3RhdGUuZWxlbWVudCgpID09IHN0YXRlLmRvY3VtZW50KCkud2Via2l0Q3VycmVudEZ1
bGxTY3JlZW5FbGVtZW50KCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKICNlbmRpZgogICAgIHJl
dHVybiB0cnVlOwpAQCAtNjUzLDcgKzY1Myw3IEBAIGlubGluZSBTdHlsZWRFbGVtZW50KiBTdHls
ZVJlc29sdmVyOjpmaW5kU2libGluZ0ZvclN0eWxlU2hhcmluZyhOb2RlKiBub2RlLCB1bnNpCiAg
ICAgZm9yICg7IG5vZGU7IG5vZGUgPSBub2RlLT5wcmV2aW91c1NpYmxpbmcoKSkgewogICAgICAg
ICBpZiAoIWlzPFN0eWxlZEVsZW1lbnQ+KCpub2RlKSkKICAgICAgICAgICAgIGNvbnRpbnVlOwot
ICAgICAgICBpZiAoY2FuU2hhcmVTdHlsZVdpdGhFbGVtZW50KGRvd25jYXN0PFN0eWxlZEVsZW1l
bnQ+KG5vZGUpKSkKKyAgICAgICAgaWYgKGNhblNoYXJlU3R5bGVXaXRoRWxlbWVudChkb3duY2Fz
dDxTdHlsZWRFbGVtZW50Pigqbm9kZSkpKQogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGlm
IChjb3VudCsrID09IGNTdHlsZVNlYXJjaFRocmVzaG9sZCkKICAgICAgICAgICAgIHJldHVybiBu
dWxscHRyOwpAQCAtNjc5LDcgKzY3OSw3IEBAIFJlbmRlclN0eWxlKiBTdHlsZVJlc29sdmVyOjps
b2NhdGVTaGFyZWRTdHlsZSgpCiAgICAgICAgIHJldHVybiBudWxscHRyOwogICAgIGlmIChzdGF0
ZS5lbGVtZW50KCkgPT0gc3RhdGUuZG9jdW1lbnQoKS5jc3NUYXJnZXQoKSkKICAgICAgICAgcmV0
dXJuIG51bGxwdHI7Ci0gICAgaWYgKGVsZW1lbnRIYXNEaXJlY3Rpb25BdXRvKHN0YXRlLmVsZW1l
bnQoKSkpCisgICAgaWYgKGVsZW1lbnRIYXNEaXJlY3Rpb25BdXRvKCpzdGF0ZS5lbGVtZW50KCkp
KQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKIAogICAgIC8vIENhY2hlIHdoZXRoZXIgc3RhdGUu
ZWxlbWVudCBpcyBhZmZlY3RlZCBieSBhbnkga25vd24gY2xhc3Mgc2VsZWN0b3JzLgpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvY3NzL1N0eWxlUmVzb2x2ZXIuaCBiL1NvdXJjZS9XZWJDb3Jl
L2Nzcy9TdHlsZVJlc29sdmVyLmgKaW5kZXggYWU3MWE2NzI2NmRlNDA3N2NmY2RlZjI5MTVhNzZh
MTViMTNhMWEzOC4uY2VjODIzYTg3MmQ5ZWZiYzY4M2YxYzE4NzJiZTc5YjE4ODg5NTMyOCAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvY3NzL1N0eWxlUmVzb2x2ZXIuaAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9jc3MvU3R5bGVSZXNvbHZlci5oCkBAIC0xODMsNyArMTgzLDcgQEAgcHJpdmF0ZToK
ICAgICBib29sIHN0eWxlU2hhcmluZ0NhbmRpZGF0ZU1hdGNoZXNSdWxlU2V0KFJ1bGVTZXQqKTsK
ICAgICBOb2RlKiBsb2NhdGVDb3VzaW5MaXN0KEVsZW1lbnQqIHBhcmVudCwgdW5zaWduZWQmIHZp
c2l0ZWROb2RlQ291bnQpIGNvbnN0OwogICAgIFN0eWxlZEVsZW1lbnQqIGZpbmRTaWJsaW5nRm9y
U3R5bGVTaGFyaW5nKE5vZGUqLCB1bnNpZ25lZCYgY291bnQpIGNvbnN0OwotICAgIGJvb2wgY2Fu
U2hhcmVTdHlsZVdpdGhFbGVtZW50KFN0eWxlZEVsZW1lbnQqKSBjb25zdDsKKyAgICBib29sIGNh
blNoYXJlU3R5bGVXaXRoRWxlbWVudChTdHlsZWRFbGVtZW50JikgY29uc3Q7CiAKICAgICBSZWY8
UmVuZGVyU3R5bGU+IHN0eWxlRm9yS2V5ZnJhbWUoY29uc3QgUmVuZGVyU3R5bGUqLCBjb25zdCBT
dHlsZUtleWZyYW1lKiwgS2V5ZnJhbWVWYWx1ZSYpOwogCkBAIC01MzAsNyArNTMwLDcgQEAgcHJp
dmF0ZToKIAogICAgIHZvaWQgY2FjaGVCb3JkZXJBbmRCYWNrZ3JvdW5kKCk7CiAKLSAgICBib29s
IGNhblNoYXJlU3R5bGVXaXRoQ29udHJvbChTdHlsZWRFbGVtZW50KikgY29uc3Q7CisgICAgYm9v
bCBjYW5TaGFyZVN0eWxlV2l0aENvbnRyb2woU3R5bGVkRWxlbWVudCYpIGNvbnN0OwogCiAgICAg
dm9pZCBhcHBseVByb3BlcnR5KENTU1Byb3BlcnR5SUQsIENTU1ZhbHVlKiwgU2VsZWN0b3JDaGVj
a2VyOjpMaW5rTWF0Y2hNYXNrID0gU2VsZWN0b3JDaGVja2VyOjpNYXRjaERlZmF1bHQsIGNvbnN0
IE1hdGNoUmVzdWx0KiA9IG51bGxwdHIpOwogICAgIFJlZlB0cjxDU1NWYWx1ZT4gcmVzb2x2ZWRW
YXJpYWJsZVZhbHVlKENTU1Byb3BlcnR5SUQsIGNvbnN0IENTU1ZhcmlhYmxlRGVwZW5kZW50VmFs
dWUmKTsKQEAgLTU1OSw3ICs1NTksNyBAQCBwcml2YXRlOgogICAgIHZvaWQgc3dlZXBNYXRjaGVk
UHJvcGVydGllc0NhY2hlKCk7CiAKICAgICBib29sIGNsYXNzTmFtZXNBZmZlY3RlZEJ5UnVsZXMo
Y29uc3QgU3BhY2VTcGxpdFN0cmluZyYpIGNvbnN0OwotICAgIGJvb2wgc2hhcmluZ0NhbmRpZGF0
ZUhhc0lkZW50aWNhbFN0eWxlQWZmZWN0aW5nQXR0cmlidXRlcyhTdHlsZWRFbGVtZW50KikgY29u
c3Q7CisgICAgYm9vbCBzaGFyaW5nQ2FuZGlkYXRlSGFzSWRlbnRpY2FsU3R5bGVBZmZlY3RpbmdB
dHRyaWJ1dGVzKFN0eWxlZEVsZW1lbnQmKSBjb25zdDsKIAogICAgIHVuc2lnbmVkIG1fbWF0Y2hl
ZFByb3BlcnRpZXNDYWNoZUFkZGl0aW9uc1NpbmNlTGFzdFN3ZWVwOwogCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9kb20vTm9kZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9kb20vTm9kZS5jcHAK
aW5kZXggNTQwNDUxNzk2MzYyNjVlODU2YmVjYzhkYTM2ZDhlYjlmYzNhZWNlNi4uNmE1YzJjMGY3
YzIxMWI2NmRjMTVkM2JhNDcwZjhlNTk4MWFiMDVhZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvZG9tL05vZGUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9Ob2RlLmNwcApAQCAtMzU3
LDE1ICszNTcsNiBAQCBOb2RlKiBOb2RlOjp0b05vZGUoKQogICAgIHJldHVybiB0aGlzOwogfQog
Ci1IVE1MSW5wdXRFbGVtZW50KiBOb2RlOjp0b0lucHV0RWxlbWVudCgpCi17Ci0gICAgLy8gSWYg
b25lIG9mIHRoZSBiZWxvdyBBU1NFUlRzIHRyaWdnZXIsIHlvdSBhcmUgY2FsbGluZyB0aGlzIGZ1
bmN0aW9uCi0gICAgLy8gZGlyZWN0bHkgb3IgaW5kaXJlY3RseSBmcm9tIGEgY29uc3RydWN0b3Ig
b3IgZGVzdHJ1Y3RvciBvZiB0aGlzIG9iamVjdC4KLSAgICAvLyBEb24ndCBkbyB0aGlzIQotICAg
IEFTU0VSVCghKGlzSFRNTEVsZW1lbnQoKSAmJiBoYXNUYWdOYW1lKGlucHV0VGFnKSkpOwotICAg
IHJldHVybiAwOwotfQotCiBTdHJpbmcgTm9kZTo6bm9kZVZhbHVlKCkgY29uc3QKIHsKICAgICBy
ZXR1cm4gU3RyaW5nKCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vTm9kZS5oIGIv
U291cmNlL1dlYkNvcmUvZG9tL05vZGUuaAppbmRleCA2YTE5M2FhMjYzODkxZTEwNDM2ODQ4YzQ2
YzJiNTU5OGE4YmNiMzc4Li45ZTE1NDY3YTg3Y2NmMWNiOGI2NWIwMDE3OGRlYTY1NWRjZWRmMjZl
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20vTm9kZS5oCisrKyBiL1NvdXJjZS9XZWJD
b3JlL2RvbS9Ob2RlLmgKQEAgLTUxMiw4ICs1MTIsNiBAQCBwdWJsaWM6CiAgICAgV0VCQ09SRV9F
WFBPUlQgdW5zaWduZWQgc2hvcnQgY29tcGFyZURvY3VtZW50UG9zaXRpb24oTm9kZSopOwogCiAg
ICAgdmlydHVhbCBOb2RlKiB0b05vZGUoKSBvdmVycmlkZTsKLSAgICB2aXJ0dWFsIEhUTUxJbnB1
dEVsZW1lbnQqIHRvSW5wdXRFbGVtZW50KCk7Ci0gICAgY29uc3QgSFRNTElucHV0RWxlbWVudCog
dG9JbnB1dEVsZW1lbnQoKSBjb25zdCB7IHJldHVybiBjb25zdF9jYXN0PE5vZGUqPih0aGlzKS0+
dG9JbnB1dEVsZW1lbnQoKTsgfQogCiAgICAgdmlydHVhbCBFdmVudFRhcmdldEludGVyZmFjZSBl
dmVudFRhcmdldEludGVyZmFjZSgpIGNvbnN0IG92ZXJyaWRlOwogICAgIHZpcnR1YWwgU2NyaXB0
RXhlY3V0aW9uQ29udGV4dCogc2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpIGNvbnN0IG92ZXJyaWRl
IGZpbmFsOyAvLyBJbXBsZW1lbnRlZCBpbiBEb2N1bWVudC5oCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9lZGl0aW5nL1RleHRJdGVyYXRvci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5n
L1RleHRJdGVyYXRvci5jcHAKaW5kZXggYjg3MGEzYTBhMDAzYjkyNThkMGYzMjQ1ZmQ0YWIzZjJi
NzFlMmJkNy4uNjQyYWQwZTlhZGQxZGY1ZDg0ZTA3MTk2MjYzNmQxNDI4YWRiY2M5NyAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9UZXh0SXRlcmF0b3IuY3BwCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL2VkaXRpbmcvVGV4dEl0ZXJhdG9yLmNwcApAQCAtODU4LDcgKzg1OCw3IEBAIHN0
YXRpYyBib29sIHNob3VsZEVtaXROZXdsaW5lRm9yTm9kZShOb2RlKiBub2RlLCBib29sIGVtaXRz
T3JpZ2luYWxUZXh0KQogICAgIGF1dG8qIHJlbmRlcmVyID0gbm9kZS0+cmVuZGVyZXIoKTsKICAg
ICBpZiAoIShyZW5kZXJlciA/IHJlbmRlcmVyLT5pc0JSKCkgOiBub2RlLT5oYXNUYWdOYW1lKGJy
VGFnKSkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICByZXR1cm4gZW1pdHNPcmlnaW5hbFRl
eHQgfHwgIShub2RlLT5pc0luU2hhZG93VHJlZSgpICYmIG5vZGUtPnNoYWRvd0hvc3QoKS0+dG9J
bnB1dEVsZW1lbnQoKSk7CisgICAgcmV0dXJuIGVtaXRzT3JpZ2luYWxUZXh0IHx8ICEobm9kZS0+
aXNJblNoYWRvd1RyZWUoKSAmJiBpczxIVE1MSW5wdXRFbGVtZW50Pigqbm9kZS0+c2hhZG93SG9z
dCgpKSk7CiB9CiAKIHN0YXRpYyBib29sIGhhc0hlYWRlclRhZyhIVE1MRWxlbWVudCYgZWxlbWVu
dCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTElucHV0RWxlbWVudC5oIGIv
U291cmNlL1dlYkNvcmUvaHRtbC9IVE1MSW5wdXRFbGVtZW50LmgKaW5kZXggYmJiZDMzNjg4YmQ3
YzE0NzIxNDk5ZjNiYmZlYTA3ZjMwOTU0NzE5YS4uNTA1NDlmNGI2NzNiZWNhNTg2N2FlODMxNmY5
ZWZjZjdlZGFlZTQ0NCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MSW5wdXRF
bGVtZW50LmgKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MSW5wdXRFbGVtZW50LmgKQEAg
LTY2LDggKzY2LDYgQEAgcHVibGljOgogICAgIHN0YXRpYyBSZWY8SFRNTElucHV0RWxlbWVudD4g
Y3JlYXRlKGNvbnN0IFF1YWxpZmllZE5hbWUmLCBEb2N1bWVudCYsIEhUTUxGb3JtRWxlbWVudCos
IGJvb2wgY3JlYXRlZEJ5UGFyc2VyKTsKICAgICB2aXJ0dWFsIH5IVE1MSW5wdXRFbGVtZW50KCk7
CiAKLSAgICB2aXJ0dWFsIEhUTUxJbnB1dEVsZW1lbnQqIHRvSW5wdXRFbGVtZW50KCkgb3ZlcnJp
ZGUgZmluYWwgeyByZXR1cm4gdGhpczsgfQotCiAgICAgV0VCQ09SRV9FWFBPUlQgdmlydHVhbCBi
b29sIHNob3VsZEF1dG9jb21wbGV0ZSgpIGNvbnN0IG92ZXJyaWRlIGZpbmFsOwogCiAgICAgLy8g
Rm9yIFZhbGlkaXR5U3RhdGUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvUmFkaW9O
b2RlTGlzdC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL1JhZGlvTm9kZUxpc3QuY3BwCmluZGV4
IDVlNDAyNWVjYzA4ZDUzNjkzMDMzZDMwN2ZkMjVmZGEzMjZkZTYyNDEuLjI4MjVmZjJkNzZiMTBl
NjA2N2ExN2ZlNzhlN2I4OTFjOWY5Y2VhN2EgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0
bWwvUmFkaW9Ob2RlTGlzdC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9SYWRpb05vZGVM
aXN0LmNwcApAQCAtNTAsMjAgKzUwLDIyIEBAIFJhZGlvTm9kZUxpc3Q6On5SYWRpb05vZGVMaXN0
KCkKICAgICBvd25lck5vZGUoKS5ub2RlTGlzdHMoKS0+cmVtb3ZlQ2FjaGVXaXRoQXRvbWljTmFt
ZSh0aGlzLCBtX25hbWUpOwogfQogCi1zdGF0aWMgaW5saW5lIEhUTUxJbnB1dEVsZW1lbnQqIHRv
UmFkaW9CdXR0b25JbnB1dEVsZW1lbnQoTm9kZSogbm9kZSkKK3N0YXRpYyBpbmxpbmUgSFRNTElu
cHV0RWxlbWVudCogdG9SYWRpb0J1dHRvbklucHV0RWxlbWVudChOb2RlJiBub2RlKQogewotICAg
IEFTU0VSVChub2RlLT5pc0VsZW1lbnROb2RlKCkpOwotICAgIEhUTUxJbnB1dEVsZW1lbnQqIGlu
cHV0RWxlbWVudCA9IG5vZGUtPnRvSW5wdXRFbGVtZW50KCk7Ci0gICAgaWYgKCFpbnB1dEVsZW1l
bnQgfHwgIWlucHV0RWxlbWVudC0+aXNSYWRpb0J1dHRvbigpIHx8IGlucHV0RWxlbWVudC0+dmFs
dWUoKS5pc0VtcHR5KCkpCi0gICAgICAgIHJldHVybiAwOwotICAgIHJldHVybiBpbnB1dEVsZW1l
bnQ7CisgICAgaWYgKCFpczxIVE1MSW5wdXRFbGVtZW50Pihub2RlKSkKKyAgICAgICAgcmV0dXJu
IG51bGxwdHI7CisKKyAgICBhdXRvJiBpbnB1dEVsZW1lbnQgPSBkb3duY2FzdDxIVE1MSW5wdXRF
bGVtZW50Pihub2RlKTsKKyAgICBpZiAoIWlucHV0RWxlbWVudC5pc1JhZGlvQnV0dG9uKCkgfHwg
aW5wdXRFbGVtZW50LnZhbHVlKCkuaXNFbXB0eSgpKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsK
KyAgICByZXR1cm4gJmlucHV0RWxlbWVudDsKIH0KIAogU3RyaW5nIFJhZGlvTm9kZUxpc3Q6OnZh
bHVlKCkgY29uc3QKIHsKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbGVuZ3RoKCk7ICsr
aSkgewotICAgICAgICBOb2RlKiBub2RlID0gaXRlbShpKTsKLSAgICAgICAgY29uc3QgSFRNTElu
cHV0RWxlbWVudCogaW5wdXRFbGVtZW50ID0gdG9SYWRpb0J1dHRvbklucHV0RWxlbWVudChub2Rl
KTsKKyAgICBhdXRvIGxlbmd0aCA9IHRoaXMtPmxlbmd0aCgpOworICAgIGZvciAodW5zaWduZWQg
aSA9IDA7IGkgPCBsZW5ndGg7ICsraSkgeworICAgICAgICBhdXRvKiBpbnB1dEVsZW1lbnQgPSB0
b1JhZGlvQnV0dG9uSW5wdXRFbGVtZW50KCppdGVtKGkpKTsKICAgICAgICAgaWYgKCFpbnB1dEVs
ZW1lbnQgfHwgIWlucHV0RWxlbWVudC0+Y2hlY2tlZCgpKQogICAgICAgICAgICAgY29udGludWU7
CiAgICAgICAgIHJldHVybiBpbnB1dEVsZW1lbnQtPnZhbHVlKCk7CkBAIC03Myw5ICs3NSw5IEBA
IFN0cmluZyBSYWRpb05vZGVMaXN0Ojp2YWx1ZSgpIGNvbnN0CiAKIHZvaWQgUmFkaW9Ob2RlTGlz
dDo6c2V0VmFsdWUoY29uc3QgU3RyaW5nJiB2YWx1ZSkKIHsKLSAgICBmb3IgKHVuc2lnbmVkIGkg
PSAwOyBpIDwgbGVuZ3RoKCk7ICsraSkgewotICAgICAgICBOb2RlKiBub2RlID0gaXRlbShpKTsK
LSAgICAgICAgSFRNTElucHV0RWxlbWVudCogaW5wdXRFbGVtZW50ID0gdG9SYWRpb0J1dHRvbklu
cHV0RWxlbWVudChub2RlKTsKKyAgICBhdXRvIGxlbmd0aCA9IHRoaXMtPmxlbmd0aCgpOworICAg
IGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBsZW5ndGg7ICsraSkgeworICAgICAgICBhdXRvKiBp
bnB1dEVsZW1lbnQgPSB0b1JhZGlvQnV0dG9uSW5wdXRFbGVtZW50KCppdGVtKGkpKTsKICAgICAg
ICAgaWYgKCFpbnB1dEVsZW1lbnQgfHwgaW5wdXRFbGVtZW50LT52YWx1ZSgpICE9IHZhbHVlKQog
ICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgIGlucHV0RWxlbWVudC0+c2V0Q2hlY2tlZCh0
cnVlKTsKQEAgLTEwNCwxMCArMTA2LDggQEAgYm9vbCBSYWRpb05vZGVMaXN0OjplbGVtZW50TWF0
Y2hlcyhFbGVtZW50JiB0ZXN0RWxlbWVudCkgY29uc3QKICAgICBpZiAoIWlzPEhUTUxPYmplY3RF
bGVtZW50Pih0ZXN0RWxlbWVudCkgJiYgIWlzPEhUTUxGb3JtQ29udHJvbEVsZW1lbnQ+KHRlc3RF
bGVtZW50KSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgaWYgKEhUTUxJbnB1dEVsZW1l
bnQqIGlucHV0RWxlbWVudCA9IHRlc3RFbGVtZW50LnRvSW5wdXRFbGVtZW50KCkpIHsKLSAgICAg
ICAgaWYgKGlucHV0RWxlbWVudC0+aXNJbWFnZUJ1dHRvbigpKQotICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOwotICAgIH0KKyAgICBpZiAoaXM8SFRNTElucHV0RWxlbWVudD4odGVzdEVsZW1lbnQp
ICYmIGRvd25jYXN0PEhUTUxJbnB1dEVsZW1lbnQ+KHRlc3RFbGVtZW50KS5pc0ltYWdlQnV0dG9u
KCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgIHJldHVybiBjaGVja0VsZW1lbnRNYXRj
aGVzUmFkaW9Ob2RlTGlzdEZpbHRlcih0ZXN0RWxlbWVudCk7CiB9CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9odG1sL3NoYWRvdy9TbGlkZXJUaHVtYkVsZW1lbnQuY3BwIGIvU291cmNlL1dl
YkNvcmUvaHRtbC9zaGFkb3cvU2xpZGVyVGh1bWJFbGVtZW50LmNwcAppbmRleCAyY2FjNmY0Yzg4
MDg5MjI2ODYzZTM1ZTEyZWJkOTg2MTNlNTczZjY4Li4yNDc1NGRhYzhhM2MyZWMzOGQwOTg0N2Yw
MjIxMWYyMGQwYjM5YmRlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL3NoYWRvdy9T
bGlkZXJUaHVtYkVsZW1lbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvc2hhZG93L1Ns
aWRlclRodW1iRWxlbWVudC5jcHAKQEAgLTU1LDIwICs1NSwyMCBAQCBuYW1lc3BhY2UgV2ViQ29y
ZSB7CiAKIHVzaW5nIG5hbWVzcGFjZSBIVE1MTmFtZXM7CiAKLWlubGluZSBzdGF0aWMgRGVjaW1h
bCBzbGlkZXJQb3NpdGlvbihIVE1MSW5wdXRFbGVtZW50KiBlbGVtZW50KQoraW5saW5lIHN0YXRp
YyBEZWNpbWFsIHNsaWRlclBvc2l0aW9uKEhUTUxJbnB1dEVsZW1lbnQmIGVsZW1lbnQpCiB7Ci0g
ICAgY29uc3QgU3RlcFJhbmdlIHN0ZXBSYW5nZShlbGVtZW50LT5jcmVhdGVTdGVwUmFuZ2UoUmVq
ZWN0QW55KSk7Ci0gICAgY29uc3QgRGVjaW1hbCBvbGRWYWx1ZSA9IHBhcnNlVG9EZWNpbWFsRm9y
TnVtYmVyVHlwZShlbGVtZW50LT52YWx1ZSgpLCBzdGVwUmFuZ2UuZGVmYXVsdFZhbHVlKCkpOwor
ICAgIGNvbnN0IFN0ZXBSYW5nZSBzdGVwUmFuZ2UoZWxlbWVudC5jcmVhdGVTdGVwUmFuZ2UoUmVq
ZWN0QW55KSk7CisgICAgY29uc3QgRGVjaW1hbCBvbGRWYWx1ZSA9IHBhcnNlVG9EZWNpbWFsRm9y
TnVtYmVyVHlwZShlbGVtZW50LnZhbHVlKCksIHN0ZXBSYW5nZS5kZWZhdWx0VmFsdWUoKSk7CiAg
ICAgcmV0dXJuIHN0ZXBSYW5nZS5wcm9wb3J0aW9uRnJvbVZhbHVlKHN0ZXBSYW5nZS5jbGFtcFZh
bHVlKG9sZFZhbHVlKSk7CiB9CiAKLWlubGluZSBzdGF0aWMgYm9vbCBoYXNWZXJ0aWNhbEFwcGVh
cmFuY2UoSFRNTElucHV0RWxlbWVudCogaW5wdXQpCitpbmxpbmUgc3RhdGljIGJvb2wgaGFzVmVy
dGljYWxBcHBlYXJhbmNlKEhUTUxJbnB1dEVsZW1lbnQmIGlucHV0KQogewotICAgIEFTU0VSVChp
bnB1dC0+cmVuZGVyZXIoKSk7Ci0gICAgY29uc3QgUmVuZGVyU3R5bGUmIHNsaWRlclN0eWxlID0g
aW5wdXQtPnJlbmRlcmVyKCktPnN0eWxlKCk7CisgICAgQVNTRVJUKGlucHV0LnJlbmRlcmVyKCkp
OworICAgIGNvbnN0IFJlbmRlclN0eWxlJiBzbGlkZXJTdHlsZSA9IGlucHV0LnJlbmRlcmVyKCkt
PnN0eWxlKCk7CiAKICNpZiBFTkFCTEUoVklERU8pCi0gICAgaWYgKHNsaWRlclN0eWxlLmFwcGVh
cmFuY2UoKSA9PSBNZWRpYVZvbHVtZVNsaWRlclBhcnQgJiYgaW5wdXQtPnJlbmRlcmVyKCktPnRo
ZW1lKCkudXNlc1ZlcnRpY2FsVm9sdW1lU2xpZGVyKCkpCisgICAgaWYgKHNsaWRlclN0eWxlLmFw
cGVhcmFuY2UoKSA9PSBNZWRpYVZvbHVtZVNsaWRlclBhcnQgJiYgaW5wdXQucmVuZGVyZXIoKS0+
dGhlbWUoKS51c2VzVmVydGljYWxWb2x1bWVTbGlkZXIoKSkKICAgICAgICAgcmV0dXJuIHRydWU7
CiAjZW5kaWYKIApAQCAtMTI2LDExICsxMjYsMTIgQEAgcHJpdmF0ZToKIAogdm9pZCBSZW5kZXJT
bGlkZXJDb250YWluZXI6OmNvbXB1dGVMb2dpY2FsSGVpZ2h0KExheW91dFVuaXQgbG9naWNhbEhl
aWdodCwgTGF5b3V0VW5pdCBsb2dpY2FsVG9wLCBMb2dpY2FsRXh0ZW50Q29tcHV0ZWRWYWx1ZXMm
IGNvbXB1dGVkVmFsdWVzKSBjb25zdAogewotICAgIEhUTUxJbnB1dEVsZW1lbnQqIGlucHV0ID0g
ZWxlbWVudCgpLT5zaGFkb3dIb3N0KCktPnRvSW5wdXRFbGVtZW50KCk7CisgICAgQVNTRVJUKGVs
ZW1lbnQoKS0+c2hhZG93SG9zdCgpKTsKKyAgICBhdXRvJiBpbnB1dCA9IGRvd25jYXN0PEhUTUxJ
bnB1dEVsZW1lbnQ+KCplbGVtZW50KCktPnNoYWRvd0hvc3QoKSk7CiAgICAgYm9vbCBpc1ZlcnRp
Y2FsID0gaGFzVmVydGljYWxBcHBlYXJhbmNlKGlucHV0KTsKIAogI2lmIEVOQUJMRShEQVRBTElT
VF9FTEVNRU5UKQotICAgIGlmIChpbnB1dC0+cmVuZGVyZXIoKS0+aXNTbGlkZXIoKSAmJiAhaXNW
ZXJ0aWNhbCAmJiBpbnB1dC0+bGlzdCgpKSB7CisgICAgaWYgKGlucHV0LnJlbmRlcmVyKCktPmlz
U2xpZGVyKCkgJiYgIWlzVmVydGljYWwgJiYgaW5wdXQubGlzdCgpKSB7CiAgICAgICAgIGludCBv
ZmZzZXRGcm9tQ2VudGVyID0gdGhlbWUoKS5zbGlkZXJUaWNrT2Zmc2V0RnJvbVRyYWNrQ2VudGVy
KCk7CiAgICAgICAgIExheW91dFVuaXQgdHJhY2tIZWlnaHQgPSAwOwogICAgICAgICBpZiAob2Zm
c2V0RnJvbUNlbnRlciA8IDApCkBAIC0xNTQsNyArMTU1LDggQEAgdm9pZCBSZW5kZXJTbGlkZXJD
b250YWluZXI6OmNvbXB1dGVMb2dpY2FsSGVpZ2h0KExheW91dFVuaXQgbG9naWNhbEhlaWdodCwg
TGF5b3UKIAogdm9pZCBSZW5kZXJTbGlkZXJDb250YWluZXI6OmxheW91dCgpCiB7Ci0gICAgSFRN
TElucHV0RWxlbWVudCogaW5wdXQgPSBlbGVtZW50KCktPnNoYWRvd0hvc3QoKS0+dG9JbnB1dEVs
ZW1lbnQoKTsKKyAgICBBU1NFUlQoZWxlbWVudCgpLT5zaGFkb3dIb3N0KCkpOworICAgIGF1dG8m
IGlucHV0ID0gZG93bmNhc3Q8SFRNTElucHV0RWxlbWVudD4oKmVsZW1lbnQoKS0+c2hhZG93SG9z
dCgpKTsKICAgICBib29sIGlzVmVydGljYWwgPSBoYXNWZXJ0aWNhbEFwcGVhcmFuY2UoaW5wdXQp
OwogICAgIHN0eWxlKCkuc2V0RmxleERpcmVjdGlvbihpc1ZlcnRpY2FsID8gRmxvd0NvbHVtbiA6
IEZsb3dSb3cpOwogICAgIFRleHREaXJlY3Rpb24gb2xkVGV4dERpcmVjdGlvbiA9IHN0eWxlKCku
ZGlyZWN0aW9uKCk7CkBAIC0xNjUsOCArMTY3LDggQEAgdm9pZCBSZW5kZXJTbGlkZXJDb250YWlu
ZXI6OmxheW91dCgpCiAgICAgICAgIHN0eWxlKCkuc2V0RGlyZWN0aW9uKExUUik7CiAgICAgfQog
Ci0gICAgUmVuZGVyQm94KiB0aHVtYiA9IGlucHV0LT5zbGlkZXJUaHVtYkVsZW1lbnQoKSA/IGlu
cHV0LT5zbGlkZXJUaHVtYkVsZW1lbnQoKS0+cmVuZGVyQm94KCkgOiAwOwotICAgIFJlbmRlckJv
eCogdHJhY2sgPSBpbnB1dC0+c2xpZGVyVHJhY2tFbGVtZW50KCkgPyBpbnB1dC0+c2xpZGVyVHJh
Y2tFbGVtZW50KCktPnJlbmRlckJveCgpIDogMDsKKyAgICBSZW5kZXJCb3gqIHRodW1iID0gaW5w
dXQuc2xpZGVyVGh1bWJFbGVtZW50KCkgPyBpbnB1dC5zbGlkZXJUaHVtYkVsZW1lbnQoKS0+cmVu
ZGVyQm94KCkgOiBudWxscHRyOworICAgIFJlbmRlckJveCogdHJhY2sgPSBpbnB1dC5zbGlkZXJU
cmFja0VsZW1lbnQoKSA/IGlucHV0LnNsaWRlclRyYWNrRWxlbWVudCgpLT5yZW5kZXJCb3goKSA6
IG51bGxwdHI7CiAgICAgLy8gRm9yY2UgYSBsYXlvdXQgdG8gcmVzZXQgdGhlIHBvc2l0aW9uIG9m
IHRoZSB0aHVtYiBzbyB0aGUgY29kZSBiZWxvdyBkb2Vzbid0IG1vdmUgdGhlIHRodW1iIHRvIHRo
ZSB3cm9uZyBwbGFjZS4KICAgICAvLyBGSVhNRTogTWFrZSBhIGN1c3RvbSBSZW5kZXIgY2xhc3Mg
Zm9yIHRoZSB0cmFjayBhbmQgbW92ZSB0aGUgdGh1bWIgcG9zaXRpb25pbmcgY29kZSB0aGVyZS4K
ICAgICBpZiAodHJhY2spCkBAIC0yNjEsNyArMjYzLDcgQEAgdm9pZCBTbGlkZXJUaHVtYkVsZW1l
bnQ6OnNldFBvc2l0aW9uRnJvbVBvaW50KGNvbnN0IExheW91dFBvaW50JiBhYnNvbHV0ZVBvaW50
KQogICAgIFJlbmRlckJveCYgaW5wdXRSZW5kZXJlciA9IGRvd25jYXN0PFJlbmRlckJveD4oKmlu
cHV0LT5yZW5kZXJlcigpKTsKICAgICBSZW5kZXJCb3gmIHRyYWNrUmVuZGVyZXIgPSAqdHJhY2tF
bGVtZW50LT5yZW5kZXJCb3goKTsKIAotICAgIGJvb2wgaXNWZXJ0aWNhbCA9IGhhc1ZlcnRpY2Fs
QXBwZWFyYW5jZShpbnB1dC5nZXQoKSk7CisgICAgYm9vbCBpc1ZlcnRpY2FsID0gaGFzVmVydGlj
YWxBcHBlYXJhbmNlKCppbnB1dCk7CiAgICAgYm9vbCBpc0xlZnRUb1JpZ2h0RGlyZWN0aW9uID0g
cmVuZGVyQm94KCktPnN0eWxlKCkuaXNMZWZ0VG9SaWdodERpcmVjdGlvbigpOwogICAgIAogICAg
IExheW91dFBvaW50IG9mZnNldChpbnB1dFJlbmRlcmVyLmFic29sdXRlVG9Mb2NhbChhYnNvbHV0
ZVBvaW50LCBVc2VUcmFuc2Zvcm1zKSk7CkBAIC01NjksOCArNTcxLDggQEAgSFRNTElucHV0RWxl
bWVudCogU2xpZGVyVGh1bWJFbGVtZW50Ojpob3N0SW5wdXQoKSBjb25zdAogewogICAgIC8vIE9u
bHkgSFRNTElucHV0RWxlbWVudCBjcmVhdGVzIFNsaWRlclRodW1iRWxlbWVudCBpbnN0YW5jZXMg
YXMgaXRzIHNoYWRvdyBub2Rlcy4KICAgICAvLyBTbywgc2hhZG93SG9zdCgpIG11c3QgYmUgYW4g
SFRNTElucHV0RWxlbWVudC4KLSAgICBFbGVtZW50KiBob3N0ID0gc2hhZG93SG9zdCgpOwotICAg
IHJldHVybiBob3N0ID8gaG9zdC0+dG9JbnB1dEVsZW1lbnQoKSA6IDA7CisgICAgYXV0byogaG9z
dCA9IHNoYWRvd0hvc3QoKTsKKyAgICByZXR1cm4gaXM8SFRNTElucHV0RWxlbWVudD4oaG9zdCkg
PyBkb3duY2FzdDxIVE1MSW5wdXRFbGVtZW50Pihob3N0KSA6IG51bGxwdHI7CiB9CiAKIHN0YXRp
YyBjb25zdCBBdG9taWNTdHJpbmcmIHNsaWRlclRodW1iU2hhZG93UHNldWRvSWQoKQpAQCAtNjQ0
LDEzICs2NDYsMTQgQEAgY29uc3QgQXRvbWljU3RyaW5nJiBTbGlkZXJDb250YWluZXJFbGVtZW50
OjpzaGFkb3dQc2V1ZG9JZCgpIGNvbnN0CiAgICAgREVQUkVDQVRFRF9ERUZJTkVfU1RBVElDX0xP
Q0FMKGNvbnN0IEF0b21pY1N0cmluZywgbWVkaWFTbGlkZXJDb250YWluZXIsICgiLXdlYmtpdC1t
ZWRpYS1zbGlkZXItY29udGFpbmVyIiwgQXRvbWljU3RyaW5nOjpDb25zdHJ1Y3RGcm9tTGl0ZXJh
bCkpOwogICAgIERFUFJFQ0FURURfREVGSU5FX1NUQVRJQ19MT0NBTChjb25zdCBBdG9taWNTdHJp
bmcsIHNsaWRlckNvbnRhaW5lciwgKCItd2Via2l0LXNsaWRlci1jb250YWluZXIiLCBBdG9taWNT
dHJpbmc6OkNvbnN0cnVjdEZyb21MaXRlcmFsKSk7CiAKLSAgICBIVE1MSW5wdXRFbGVtZW50KiBp
bnB1dCA9IHNoYWRvd0hvc3QoKS0+dG9JbnB1dEVsZW1lbnQoKTsKLSAgICBpZiAoIWlucHV0KQor
ICAgIGlmICghaXM8SFRNTElucHV0RWxlbWVudD4oKnNoYWRvd0hvc3QoKSkpCiAgICAgICAgIHJl
dHVybiBzbGlkZXJDb250YWluZXI7Ci0gICAgaWYgKCFpbnB1dC0+cmVuZGVyZXIoKSkKKworICAg
IGF1dG8mIGlucHV0ID0gZG93bmNhc3Q8SFRNTElucHV0RWxlbWVudD4oKnNoYWRvd0hvc3QoKSk7
CisgICAgaWYgKCFpbnB1dC5yZW5kZXJlcigpKQogICAgICAgICByZXR1cm4gZW1wdHlBdG9tOwog
Ci0gICAgY29uc3QgUmVuZGVyU3R5bGUmIHNsaWRlclN0eWxlID0gaW5wdXQtPnJlbmRlcmVyKCkt
PnN0eWxlKCk7CisgICAgY29uc3QgUmVuZGVyU3R5bGUmIHNsaWRlclN0eWxlID0gaW5wdXQucmVu
ZGVyZXIoKS0+c3R5bGUoKTsKICAgICBzd2l0Y2ggKHNsaWRlclN0eWxlLmFwcGVhcmFuY2UoKSkg
ewogICAgIGNhc2UgTWVkaWFTbGlkZXJQYXJ0OgogICAgIGNhc2UgTWVkaWFTbGlkZXJUaHVtYlBh
cnQ6CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvRnJhbWVMb2FkZXIuY3BwIGIv
U291cmNlL1dlYkNvcmUvbG9hZGVyL0ZyYW1lTG9hZGVyLmNwcAppbmRleCAzZmVmMTExNTZjZDIw
MjNkMjNkNjNjMWFmMDE2NzBmNTc1NWM1MjY3Li43MDc5NTdiNzZhOTUzYTIzZDA0NjUwMTBhNGVi
NzgxMDI0OGZlZGU5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvRnJhbWVMb2Fk
ZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9GcmFtZUxvYWRlci5jcHAKQEAgLTQy
MSw5ICs0MjEsOSBAQCB2b2lkIEZyYW1lTG9hZGVyOjpzdG9wTG9hZGluZyhVbmxvYWRFdmVudFBv
bGljeSB1bmxvYWRFdmVudFBvbGljeSkKICAgICBpZiAodW5sb2FkRXZlbnRQb2xpY3kgIT0gVW5s
b2FkRXZlbnRQb2xpY3lOb25lKSB7CiAgICAgICAgIGlmIChtX2ZyYW1lLmRvY3VtZW50KCkpIHsK
ICAgICAgICAgICAgIGlmIChtX2RpZENhbGxJbXBsaWNpdENsb3NlICYmICFtX3dhc1VubG9hZEV2
ZW50RW1pdHRlZCkgewotICAgICAgICAgICAgICAgIEVsZW1lbnQqIGN1cnJlbnRGb2N1c2VkRWxl
bWVudCA9IG1fZnJhbWUuZG9jdW1lbnQoKS0+Zm9jdXNlZEVsZW1lbnQoKTsKLSAgICAgICAgICAg
ICAgICBpZiAoY3VycmVudEZvY3VzZWRFbGVtZW50ICYmIGN1cnJlbnRGb2N1c2VkRWxlbWVudC0+
dG9JbnB1dEVsZW1lbnQoKSkKLSAgICAgICAgICAgICAgICAgICAgY3VycmVudEZvY3VzZWRFbGVt
ZW50LT50b0lucHV0RWxlbWVudCgpLT5lbmRFZGl0aW5nKCk7CisgICAgICAgICAgICAgICAgYXV0
byogY3VycmVudEZvY3VzZWRFbGVtZW50ID0gbV9mcmFtZS5kb2N1bWVudCgpLT5mb2N1c2VkRWxl
bWVudCgpOworICAgICAgICAgICAgICAgIGlmIChpczxIVE1MSW5wdXRFbGVtZW50PihjdXJyZW50
Rm9jdXNlZEVsZW1lbnQpKQorICAgICAgICAgICAgICAgICAgICBkb3duY2FzdDxIVE1MSW5wdXRF
bGVtZW50PigqY3VycmVudEZvY3VzZWRFbGVtZW50KS5lbmRFZGl0aW5nKCk7CiAgICAgICAgICAg
ICAgICAgaWYgKG1fcGFnZURpc21pc3NhbEV2ZW50QmVpbmdEaXNwYXRjaGVkID09IFBhZ2VEaXNt
aXNzYWxUeXBlOjpOb25lKSB7CiAgICAgICAgICAgICAgICAgICAgIGlmICh1bmxvYWRFdmVudFBv
bGljeSA9PSBVbmxvYWRFdmVudFBvbGljeVVubG9hZEFuZFBhZ2VIaWRlKSB7CiAgICAgICAgICAg
ICAgICAgICAgICAgICBtX3BhZ2VEaXNtaXNzYWxFdmVudEJlaW5nRGlzcGF0Y2hlZCA9IFBhZ2VE
aXNtaXNzYWxUeXBlOjpQYWdlSGlkZTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2Uv
RHJhZ0NvbnRyb2xsZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcGFnZS9EcmFnQ29udHJvbGxlci5j
cHAKaW5kZXggMmM3NmY2M2ZlMTE1ZTk2Y2Y1ZGYzYjMwOTdjMmFmM2M3ZWE4ODQ4Ny4uMDUwYjYy
ODk1YWVhNzM2NDlkMmFlNDY0ZTU5ZmM2ODNmMWE2YjlkMCAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvcGFnZS9EcmFnQ29udHJvbGxlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGFnZS9E
cmFnQ29udHJvbGxlci5jcHAKQEAgLTI4MSwxNyArMjgxLDIwIEBAIERyYWdPcGVyYXRpb24gRHJh
Z0NvbnRyb2xsZXI6OmRyYWdFbnRlcmVkT3JVcGRhdGVkKERyYWdEYXRhJiBkcmFnRGF0YSkKICAg
ICByZXR1cm4gZHJhZ09wZXJhdGlvbjsKIH0KIAotc3RhdGljIEhUTUxJbnB1dEVsZW1lbnQqIGFz
RmlsZUlucHV0KE5vZGUqIG5vZGUpCitzdGF0aWMgSFRNTElucHV0RWxlbWVudCogYXNGaWxlSW5w
dXQoTm9kZSYgbm9kZSkKIHsKLSAgICBBU1NFUlQobm9kZSk7CisgICAgaWYgKCFpczxIVE1MSW5w
dXRFbGVtZW50Pihub2RlKSkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAKLSAgICBIVE1MSW5w
dXRFbGVtZW50KiBpbnB1dEVsZW1lbnQgPSBub2RlLT50b0lucHV0RWxlbWVudCgpOworICAgIGF1
dG8qIGlucHV0RWxlbWVudCA9ICZkb3duY2FzdDxIVE1MSW5wdXRFbGVtZW50Pihub2RlKTsKIAog
ICAgIC8vIElmIHRoaXMgaXMgYSBidXR0b24gaW5zaWRlIG9mIHRoZSBhIGZpbGUgaW5wdXQsIG1v
dmUgdXAgdG8gdGhlIGZpbGUgaW5wdXQuCi0gICAgaWYgKGlucHV0RWxlbWVudCAmJiBpbnB1dEVs
ZW1lbnQtPmlzVGV4dEJ1dHRvbigpICYmIGlzPFNoYWRvd1Jvb3Q+KGlucHV0RWxlbWVudC0+dHJl
ZVNjb3BlKCkucm9vdE5vZGUoKSkpCi0gICAgICAgIGlucHV0RWxlbWVudCA9IGRvd25jYXN0PFNo
YWRvd1Jvb3Q+KGlucHV0RWxlbWVudC0+dHJlZVNjb3BlKCkucm9vdE5vZGUoKSkuaG9zdCgpLT50
b0lucHV0RWxlbWVudCgpOworICAgIGlmIChpbnB1dEVsZW1lbnQtPmlzVGV4dEJ1dHRvbigpICYm
IGlzPFNoYWRvd1Jvb3Q+KGlucHV0RWxlbWVudC0+dHJlZVNjb3BlKCkucm9vdE5vZGUoKSkpIHsK
KyAgICAgICAgYXV0byYgaG9zdCA9ICpkb3duY2FzdDxTaGFkb3dSb290PihpbnB1dEVsZW1lbnQt
PnRyZWVTY29wZSgpLnJvb3ROb2RlKCkpLmhvc3QoKTsKKyAgICAgICAgaW5wdXRFbGVtZW50ID0g
aXM8SFRNTElucHV0RWxlbWVudD4oaG9zdCkgPyAmZG93bmNhc3Q8SFRNTElucHV0RWxlbWVudD4o
aG9zdCkgOiBudWxscHRyOworICAgIH0KIAotICAgIHJldHVybiBpbnB1dEVsZW1lbnQgJiYgaW5w
dXRFbGVtZW50LT5pc0ZpbGVVcGxvYWQoKSA/IGlucHV0RWxlbWVudCA6IDA7CisgICAgcmV0dXJu
IGlucHV0RWxlbWVudCAmJiBpbnB1dEVsZW1lbnQtPmlzRmlsZVVwbG9hZCgpID8gaW5wdXRFbGVt
ZW50IDogbnVsbHB0cjsKIH0KIAogLy8gVGhpcyBjYW4gcmV0dXJuIG51bGwgaWYgYW4gZW1wdHkg
ZG9jdW1lbnQgaXMgbG9hZGVkLgpAQCAtMzU1LDcgKzM1OCw3IEBAIGJvb2wgRHJhZ0NvbnRyb2xs
ZXI6OnRyeURvY3VtZW50RHJhZyhEcmFnRGF0YSYgZHJhZ0RhdGEsIERyYWdEZXN0aW5hdGlvbkFj
dGlvbiBhCiAgICAgICAgIGlmICghZWxlbWVudCkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsK
ICAgICAgICAgCi0gICAgICAgIEhUTUxJbnB1dEVsZW1lbnQqIGVsZW1lbnRBc0ZpbGVJbnB1dCA9
IGFzRmlsZUlucHV0KGVsZW1lbnQpOworICAgICAgICBIVE1MSW5wdXRFbGVtZW50KiBlbGVtZW50
QXNGaWxlSW5wdXQgPSBhc0ZpbGVJbnB1dCgqZWxlbWVudCk7CiAgICAgICAgIGlmIChtX2ZpbGVJ
bnB1dEVsZW1lbnRVbmRlck1vdXNlICE9IGVsZW1lbnRBc0ZpbGVJbnB1dCkgewogICAgICAgICAg
ICAgaWYgKG1fZmlsZUlucHV0RWxlbWVudFVuZGVyTW91c2UpCiAgICAgICAgICAgICAgICAgbV9m
aWxlSW5wdXRFbGVtZW50VW5kZXJNb3VzZS0+c2V0Q2FuUmVjZWl2ZURyb3BwZWRGaWxlcyhmYWxz
ZSk7CkBAIC01NjUsNyArNTY4LDcgQEAgYm9vbCBEcmFnQ29udHJvbGxlcjo6Y2FuUHJvY2Vzc0Ry
YWcoRHJhZ0RhdGEmIGRyYWdEYXRhKQogICAgIGlmICghcmVzdWx0LmlubmVyTm9uU2hhcmVkTm9k
ZSgpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBpZiAoZHJhZ0RhdGEuY29udGFpbnNG
aWxlcygpICYmIGFzRmlsZUlucHV0KHJlc3VsdC5pbm5lck5vblNoYXJlZE5vZGUoKSkpCisgICAg
aWYgKGRyYWdEYXRhLmNvbnRhaW5zRmlsZXMoKSAmJiBhc0ZpbGVJbnB1dCgqcmVzdWx0LmlubmVy
Tm9uU2hhcmVkTm9kZSgpKSkKICAgICAgICAgcmV0dXJuIHRydWU7CiAKICAgICBpZiAoaXM8SFRN
TFBsdWdJbkVsZW1lbnQ+KCpyZXN1bHQuaW5uZXJOb25TaGFyZWROb2RlKCkpKSB7CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQnV0dG9uLmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCdXR0b24uY3BwCmluZGV4IDdhM2VhYTllYWIyY2M1MjVi
MTgxZDQ4Y2M2MGFmZjRhNGJiNWU3ODEuLmQxZDBkOTFmM2ZkMDNhMWNiNjM4NDVjODZhMTMyZGNi
OGI3YWNmOGIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCdXR0
b24uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCdXR0b24uY3BwCkBA
IC02MSw3ICs2MSw3IEBAIGJvb2wgUmVuZGVyQnV0dG9uOjpjYW5CZVNlbGVjdGlvbkxlYWYoKSBj
b25zdAogCiBib29sIFJlbmRlckJ1dHRvbjo6aGFzTGluZUlmRW1wdHkoKSBjb25zdAogewotICAg
IHJldHVybiBmb3JtQ29udHJvbEVsZW1lbnQoKS50b0lucHV0RWxlbWVudCgpOworICAgIHJldHVy
biBpczxIVE1MSW5wdXRFbGVtZW50Pihmb3JtQ29udHJvbEVsZW1lbnQoKSk7CiB9CiAKIHZvaWQg
UmVuZGVyQnV0dG9uOjphZGRDaGlsZChSZW5kZXJPYmplY3QqIG5ld0NoaWxkLCBSZW5kZXJPYmpl
Y3QqIGJlZm9yZUNoaWxkKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1Jl
bmRlclRoZW1lLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUaGVtZS5jcHAK
aW5kZXggNTk2MTc0NmU1Y2JiYzk4OGQzYWFhMDI1YzZkYTg2MzExNDczZTk0Yi4uMWFhZjM2OTBl
ZTliN2RmMTc3YzEwNzE3YmY5MThmZTIzMTU5ODA5YSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL1JlbmRlclRoZW1lLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvUmVuZGVyVGhlbWUuY3BwCkBAIC03ODUsMjYgKzc4NSwxMiBAQCBib29sIFJlbmRlclRoZW1l
Ojppc0FjdGl2ZShjb25zdCBSZW5kZXJPYmplY3QmIG8pIGNvbnN0CiAKIGJvb2wgUmVuZGVyVGhl
bWU6OmlzQ2hlY2tlZChjb25zdCBSZW5kZXJPYmplY3QmIG8pIGNvbnN0CiB7Ci0gICAgaWYgKCFv
Lm5vZGUoKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgSFRNTElucHV0RWxlbWVudCog
aW5wdXRFbGVtZW50ID0gby5ub2RlKCktPnRvSW5wdXRFbGVtZW50KCk7Ci0gICAgaWYgKCFpbnB1
dEVsZW1lbnQpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIHJldHVybiBpbnB1dEVsZW1l
bnQtPnNob3VsZEFwcGVhckNoZWNrZWQoKTsKKyAgICByZXR1cm4gaXM8SFRNTElucHV0RWxlbWVu
dD4oby5ub2RlKCkpICYmIGRvd25jYXN0PEhUTUxJbnB1dEVsZW1lbnQ+KCpvLm5vZGUoKSkuc2hv
dWxkQXBwZWFyQ2hlY2tlZCgpOwogfQogCiBib29sIFJlbmRlclRoZW1lOjppc0luZGV0ZXJtaW5h
dGUoY29uc3QgUmVuZGVyT2JqZWN0JiBvKSBjb25zdAogewotICAgIGlmICghby5ub2RlKCkpCi0g
ICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIEhUTUxJbnB1dEVsZW1lbnQqIGlucHV0RWxlbWVu
dCA9IG8ubm9kZSgpLT50b0lucHV0RWxlbWVudCgpOwotICAgIGlmICghaW5wdXRFbGVtZW50KQot
ICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICByZXR1cm4gaW5wdXRFbGVtZW50LT5zaG91bGRB
cHBlYXJJbmRldGVybWluYXRlKCk7CisgICAgcmV0dXJuIGlzPEhUTUxJbnB1dEVsZW1lbnQ+KG8u
bm9kZSgpKSAmJiBkb3duY2FzdDxIVE1MSW5wdXRFbGVtZW50Pigqby5ub2RlKCkpLnNob3VsZEFw
cGVhckluZGV0ZXJtaW5hdGUoKTsKIH0KIAogYm9vbCBSZW5kZXJUaGVtZTo6aXNFbmFibGVkKGNv
bnN0IFJlbmRlck9iamVjdCYgcmVuZGVyZXIpIGNvbnN0CkBAIC05OTMsMjAgKzk3OSwxNiBAQCBM
YXlvdXRVbml0IFJlbmRlclRoZW1lOjpzbGlkZXJUaWNrU25hcHBpbmdUaHJlc2hvbGQoKSBjb25z
dAogCiB2b2lkIFJlbmRlclRoZW1lOjpwYWludFNsaWRlclRpY2tzKGNvbnN0IFJlbmRlck9iamVj
dCYgbywgY29uc3QgUGFpbnRJbmZvJiBwYWludEluZm8sIGNvbnN0IEludFJlY3QmIHJlY3QpCiB7
Ci0gICAgTm9kZSogbm9kZSA9IG8ubm9kZSgpOwotICAgIGlmICghbm9kZSkKLSAgICAgICAgcmV0
dXJuOwotCi0gICAgSFRNTElucHV0RWxlbWVudCogaW5wdXQgPSBub2RlLT50b0lucHV0RWxlbWVu
dCgpOwotICAgIGlmICghaW5wdXQpCisgICAgaWYgKCFpczxIVE1MSW5wdXRFbGVtZW50PihvLm5v
ZGUoKSkpCiAgICAgICAgIHJldHVybjsKIAotICAgIEhUTUxEYXRhTGlzdEVsZW1lbnQqIGRhdGFM
aXN0ID0gZG93bmNhc3Q8SFRNTERhdGFMaXN0RWxlbWVudD4oaW5wdXQtPmxpc3QoKSk7CisgICAg
YXV0byYgaW5wdXQgPSBkb3duY2FzdDxIVE1MSW5wdXRFbGVtZW50Pigqby5ub2RlKCkpOworICAg
IGF1dG8qIGRhdGFMaXN0ID0gZG93bmNhc3Q8SFRNTERhdGFMaXN0RWxlbWVudD4oaW5wdXQubGlz
dCgpKTsKICAgICBpZiAoIWRhdGFMaXN0KQogICAgICAgICByZXR1cm47CiAKLSAgICBkb3VibGUg
bWluID0gaW5wdXQtPm1pbmltdW0oKTsKLSAgICBkb3VibGUgbWF4ID0gaW5wdXQtPm1heGltdW0o
KTsKKyAgICBkb3VibGUgbWluID0gaW5wdXQubWluaW11bSgpOworICAgIGRvdWJsZSBtYXggPSBp
bnB1dC5tYXhpbXVtKCk7CiAgICAgQ29udHJvbFBhcnQgcGFydCA9IG8uc3R5bGUoKS5hcHBlYXJh
bmNlKCk7CiAgICAgLy8gV2UgZG9uJ3Qgc3VwcG9ydCB0aWNrcyBvbiBhbHRlcm5hdGUgc2xpZGVy
cyBsaWtlIE1lZGlhVm9sdW1lU2xpZGVycy4KICAgICBpZiAocGFydCAhPSAgU2xpZGVySG9yaXpv
bnRhbFBhcnQgJiYgcGFydCAhPSBTbGlkZXJWZXJ0aWNhbFBhcnQpCkBAIC0xMDE0LDcgKzk5Niw3
IEBAIHZvaWQgUmVuZGVyVGhlbWU6OnBhaW50U2xpZGVyVGlja3MoY29uc3QgUmVuZGVyT2JqZWN0
JiBvLCBjb25zdCBQYWludEluZm8mIHBhaW50CiAgICAgYm9vbCBpc0hvcml6b250YWwgPSBwYXJ0
ID09ICBTbGlkZXJIb3Jpem9udGFsUGFydDsKIAogICAgIEludFNpemUgdGh1bWJTaXplOwotICAg
IGNvbnN0IFJlbmRlck9iamVjdCogdGh1bWJSZW5kZXJlciA9IGlucHV0LT5zbGlkZXJUaHVtYkVs
ZW1lbnQoKS0+cmVuZGVyZXIoKTsKKyAgICBjb25zdCBSZW5kZXJPYmplY3QqIHRodW1iUmVuZGVy
ZXIgPSBpbnB1dC5zbGlkZXJUaHVtYkVsZW1lbnQoKS0+cmVuZGVyZXIoKTsKICAgICBpZiAodGh1
bWJSZW5kZXJlcikgewogICAgICAgICBjb25zdCBSZW5kZXJTdHlsZSYgdGh1bWJTdHlsZSA9IHRo
dW1iUmVuZGVyZXItPnN0eWxlKCk7CiAgICAgICAgIGludCB0aHVtYldpZHRoID0gdGh1bWJTdHls
ZS53aWR0aCgpLmludFZhbHVlKCk7CkBAIC0xMDI5LDcgKzEwMTEsNyBAQCB2b2lkIFJlbmRlclRo
ZW1lOjpwYWludFNsaWRlclRpY2tzKGNvbnN0IFJlbmRlck9iamVjdCYgbywgY29uc3QgUGFpbnRJ
bmZvJiBwYWludAogICAgIGludCB0aWNrUmVnaW9uU2lkZU1hcmdpbiA9IDA7CiAgICAgaW50IHRp
Y2tSZWdpb25XaWR0aCA9IDA7CiAgICAgSW50UmVjdCB0cmFja0JvdW5kczsKLSAgICBSZW5kZXJP
YmplY3QqIHRyYWNrUmVuZGVyZXIgPSBpbnB1dC0+c2xpZGVyVHJhY2tFbGVtZW50KCktPnJlbmRl
cmVyKCk7CisgICAgUmVuZGVyT2JqZWN0KiB0cmFja1JlbmRlcmVyID0gaW5wdXQuc2xpZGVyVHJh
Y2tFbGVtZW50KCktPnJlbmRlcmVyKCk7CiAgICAgLy8gV2UgY2FuIGlnbm9yaW5nIHRyYW5zZm9y
bXMgYmVjYXVzZSB0cmFuc2Zvcm0gaXMgaGFuZGxlZCBieSB0aGUgZ3JhcGhpY3MgY29udGV4dC4K
ICAgICBpZiAodHJhY2tSZW5kZXJlcikKICAgICAgICAgdHJhY2tCb3VuZHMgPSB0cmFja1JlbmRl
cmVyLT5hYnNvbHV0ZUJvdW5kaW5nQm94UmVjdElnbm9yaW5nVHJhbnNmb3JtcygpOwpAQCAtMTA1
OSw5ICsxMDQxLDkgQEAgdm9pZCBSZW5kZXJUaGVtZTo6cGFpbnRTbGlkZXJUaWNrcyhjb25zdCBS
ZW5kZXJPYmplY3QmIG8sIGNvbnN0IFBhaW50SW5mbyYgcGFpbnQKICAgICAgICAgQVNTRVJUKGlz
PEhUTUxPcHRpb25FbGVtZW50Pigqbm9kZSkpOwogICAgICAgICBIVE1MT3B0aW9uRWxlbWVudCYg
b3B0aW9uRWxlbWVudCA9IGRvd25jYXN0PEhUTUxPcHRpb25FbGVtZW50Pigqbm9kZSk7CiAgICAg
ICAgIFN0cmluZyB2YWx1ZSA9IG9wdGlvbkVsZW1lbnQudmFsdWUoKTsKLSAgICAgICAgaWYgKCFp
bnB1dC0+aXNWYWxpZFZhbHVlKHZhbHVlKSkKKyAgICAgICAgaWYgKCFpbnB1dC5pc1ZhbGlkVmFs
dWUodmFsdWUpKQogICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIGRvdWJsZSBwYXJzZWRW
YWx1ZSA9IHBhcnNlVG9Eb3VibGVGb3JOdW1iZXJUeXBlKGlucHV0LT5zYW5pdGl6ZVZhbHVlKHZh
bHVlKSk7CisgICAgICAgIGRvdWJsZSBwYXJzZWRWYWx1ZSA9IHBhcnNlVG9Eb3VibGVGb3JOdW1i
ZXJUeXBlKGlucHV0LnNhbml0aXplVmFsdWUodmFsdWUpKTsKICAgICAgICAgZG91YmxlIHRpY2tG
cmFjdGlvbiA9IChwYXJzZWRWYWx1ZSAtIG1pbikgLyAobWF4IC0gbWluKTsKICAgICAgICAgZG91
YmxlIHRpY2tSYXRpbyA9IGlzSG9yaXpvbnRhbCAmJiBvLnN0eWxlKCkuaXNMZWZ0VG9SaWdodERp
cmVjdGlvbigpID8gdGlja0ZyYWN0aW9uIDogMS4wIC0gdGlja0ZyYWN0aW9uOwogICAgICAgICBk
b3VibGUgdGlja1Bvc2l0aW9uID0gcm91bmQodGlja1JlZ2lvblNpZGVNYXJnaW4gKyB0aWNrUmVn
aW9uV2lkdGggKiB0aWNrUmF0aW8pOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvdGVzdGlu
Zy9JbnRlcm5hbHMuY3BwIGIvU291cmNlL1dlYkNvcmUvdGVzdGluZy9JbnRlcm5hbHMuY3BwCmlu
ZGV4IDhjNmYxMjIzODY4MjRhZWJmM2JkNzZmYzRlNzkzMmU4ZmRlZjkyZGUuLjQzZGI4MDhkYWEx
N2U2MmQzNTRjMzE1ZWZlOGZkMGIyNWIyYjdiN2EgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3Rlc3RpbmcvSW50ZXJuYWxzLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS90ZXN0aW5nL0ludGVy
bmFscy5jcHAKQEAgLTExODgsOCArMTE4OCw4IEBAIGJvb2wgSW50ZXJuYWxzOjp3YXNMYXN0Q2hh
bmdlVXNlckVkaXQoRWxlbWVudCogdGV4dEZpZWxkLCBFeGNlcHRpb25Db2RlJiBlYykKICAgICAg
ICAgcmV0dXJuIGZhbHNlOwogICAgIH0KIAotICAgIGlmIChIVE1MSW5wdXRFbGVtZW50KiBpbnB1
dEVsZW1lbnQgPSB0ZXh0RmllbGQtPnRvSW5wdXRFbGVtZW50KCkpCi0gICAgICAgIHJldHVybiBp
bnB1dEVsZW1lbnQtPmxhc3RDaGFuZ2VXYXNVc2VyRWRpdCgpOworICAgIGlmIChpczxIVE1MSW5w
dXRFbGVtZW50PigqdGV4dEZpZWxkKSkKKyAgICAgICAgcmV0dXJuIGRvd25jYXN0PEhUTUxJbnB1
dEVsZW1lbnQ+KCp0ZXh0RmllbGQpLmxhc3RDaGFuZ2VXYXNVc2VyRWRpdCgpOwogCiAgICAgaWYg
KGlzPEhUTUxUZXh0QXJlYUVsZW1lbnQ+KCp0ZXh0RmllbGQpKQogICAgICAgICByZXR1cm4gZG93
bmNhc3Q8SFRNTFRleHRBcmVhRWxlbWVudD4oKnRleHRGaWVsZCkubGFzdENoYW5nZVdhc1VzZXJF
ZGl0KCk7CkBAIC0xMjA1LDExICsxMjA1LDEyIEBAIGJvb2wgSW50ZXJuYWxzOjplbGVtZW50U2hv
dWxkQXV0b0NvbXBsZXRlKEVsZW1lbnQqIGVsZW1lbnQsIEV4Y2VwdGlvbkNvZGUmIGVjKQogICAg
ICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQogCi0gICAgaWYgKEhUTUxJbnB1dEVsZW1lbnQqIGlu
cHV0RWxlbWVudCA9IGVsZW1lbnQtPnRvSW5wdXRFbGVtZW50KCkpCi0gICAgICAgIHJldHVybiBp
bnB1dEVsZW1lbnQtPnNob3VsZEF1dG9jb21wbGV0ZSgpOworICAgIGlmICghaXM8SFRNTElucHV0
RWxlbWVudD4oKmVsZW1lbnQpKSB7CisgICAgICAgIGVjID0gSU5WQUxJRF9OT0RFX1RZUEVfRVJS
OworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQogCi0gICAgZWMgPSBJTlZBTElEX05PREVf
VFlQRV9FUlI7Ci0gICAgcmV0dXJuIGZhbHNlOworICAgIHJldHVybiBkb3duY2FzdDxIVE1MSW5w
dXRFbGVtZW50PigqZWxlbWVudCkuc2hvdWxkQXV0b2NvbXBsZXRlKCk7CiB9CiAKIHZvaWQgSW50
ZXJuYWxzOjpzZXRFZGl0aW5nVmFsdWUoRWxlbWVudCogZWxlbWVudCwgY29uc3QgU3RyaW5nJiB2
YWx1ZSwgRXhjZXB0aW9uQ29kZSYgZWMpCkBAIC0xMjE5LDMzICsxMjIwLDQyIEBAIHZvaWQgSW50
ZXJuYWxzOjpzZXRFZGl0aW5nVmFsdWUoRWxlbWVudCogZWxlbWVudCwgY29uc3QgU3RyaW5nJiB2
YWx1ZSwgRXhjZXB0aW9uCiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBIVE1MSW5wdXRF
bGVtZW50KiBpbnB1dEVsZW1lbnQgPSBlbGVtZW50LT50b0lucHV0RWxlbWVudCgpOwotICAgIGlm
ICghaW5wdXRFbGVtZW50KSB7CisgICAgaWYgKCFpczxIVE1MSW5wdXRFbGVtZW50PigqZWxlbWVu
dCkpIHsKICAgICAgICAgZWMgPSBJTlZBTElEX05PREVfVFlQRV9FUlI7CiAgICAgICAgIHJldHVy
bjsKICAgICB9CiAKLSAgICBpbnB1dEVsZW1lbnQtPnNldEVkaXRpbmdWYWx1ZSh2YWx1ZSk7Cisg
ICAgZG93bmNhc3Q8SFRNTElucHV0RWxlbWVudD4oKmVsZW1lbnQpLnNldEVkaXRpbmdWYWx1ZSh2
YWx1ZSk7CiB9CiAKIHZvaWQgSW50ZXJuYWxzOjpzZXRBdXRvZmlsbGVkKEVsZW1lbnQqIGVsZW1l
bnQsIGJvb2wgZW5hYmxlZCwgRXhjZXB0aW9uQ29kZSYgZWMpCiB7Ci0gICAgSFRNTElucHV0RWxl
bWVudCogaW5wdXRFbGVtZW50ID0gZWxlbWVudC0+dG9JbnB1dEVsZW1lbnQoKTsKLSAgICBpZiAo
IWlucHV0RWxlbWVudCkgeworICAgIGlmICghZWxlbWVudCkgewogICAgICAgICBlYyA9IElOVkFM
SURfQUNDRVNTX0VSUjsKICAgICAgICAgcmV0dXJuOwogICAgIH0KLSAgICBpbnB1dEVsZW1lbnQt
PnNldEF1dG9GaWxsZWQoZW5hYmxlZCk7CisKKyAgICBpZiAoIWlzPEhUTUxJbnB1dEVsZW1lbnQ+
KCplbGVtZW50KSkgeworICAgICAgICBlYyA9IElOVkFMSURfTk9ERV9UWVBFX0VSUjsKKyAgICAg
ICAgcmV0dXJuOworICAgIH0KKworICAgIGRvd25jYXN0PEhUTUxJbnB1dEVsZW1lbnQ+KCplbGVt
ZW50KS5zZXRBdXRvRmlsbGVkKGVuYWJsZWQpOwogfQogCiB2b2lkIEludGVybmFsczo6c2V0U2hv
d0F1dG9GaWxsQnV0dG9uKEVsZW1lbnQqIGVsZW1lbnQsIGJvb2wgc2hvdywgRXhjZXB0aW9uQ29k
ZSYgZWMpCiB7Ci0gICAgSFRNTElucHV0RWxlbWVudCogaW5wdXRFbGVtZW50ID0gZWxlbWVudC0+
dG9JbnB1dEVsZW1lbnQoKTsKLSAgICBpZiAoIWlucHV0RWxlbWVudCkgeworICAgIGlmICghZWxl
bWVudCkgewogICAgICAgICBlYyA9IElOVkFMSURfQUNDRVNTX0VSUjsKICAgICAgICAgcmV0dXJu
OwogICAgIH0KLSAgICBpbnB1dEVsZW1lbnQtPnNldFNob3dBdXRvRmlsbEJ1dHRvbihzaG93KTsK
KworICAgIGlmICghaXM8SFRNTElucHV0RWxlbWVudD4oKmVsZW1lbnQpKSB7CisgICAgICAgIGVj
ID0gSU5WQUxJRF9OT0RFX1RZUEVfRVJSOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAg
ZG93bmNhc3Q8SFRNTElucHV0RWxlbWVudD4oKmVsZW1lbnQpLnNldFNob3dBdXRvRmlsbEJ1dHRv
bihzaG93KTsKIH0KIAogCg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>263545</attachid>
            <date>2015-10-19 19:42:01 -0700</date>
            <delta_ts>2015-10-19 20:30:15 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-150341-20151019194121.patch</filename>
            <type>text/plain</type>
            <size>44777</size>
            <attacher name="Chris Dumez">cdumez</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTkxMzE4CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZWQ3ZmY1NGJjOTkzYzYz
YWE4ZWZlMjRkOWMzZjE1YTEzYzFlN2VkNy4uMGQ2NDdlMzRiMTczZTFmMmZiOWFkMDY0MjhhYzMw
NWU3ZjUwOGQ4YiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDEzIEBACisyMDE1LTEwLTE5ICBDaHJp
cyBEdW1leiAgPGNkdW1lekBhcHBsZS5jb20+CisKKyAgICAgICAgRHJvcCB1bm5lY2Vzc2FyeSBO
b2RlOjp0b0lucHV0RWxlbWVudCgpIHZpcnR1YWwgZnVuY3Rpb24KKyAgICAgICAgaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE1MDM0MQorCisgICAgICAgIFJldmlld2Vk
IGJ5IERhcmluIEFkbGVyLgorCisgICAgICAgIERyb3AgdW5uZWNlc3NhcnkgTm9kZTo6dG9JbnB1
dEVsZW1lbnQoKSB2aXJ0dWFsIGZ1bmN0aW9uIGFuZCB1c2UgdGhlCisgICAgICAgIHVzdWFsIGlz
PEhUTUxJbnB1dEVsZW1lbnQ+KCkgLyBkb3duY2FzdDwgSFRNTElucHV0RWxlbWVudCA+KCkgaW5z
dGVhZC4KKwogMjAxNS0xMC0xOSAgQmV0aCBEYWtpbiAgPGJkYWtpbkBhcHBsZS5jb20+CiAKICAg
ICAgICAgQnVpbGQgZml4LgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0
eS9BWE9iamVjdENhY2hlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQVhPYmpl
Y3RDYWNoZS5jcHAKaW5kZXggOTE0YWI2ZGYxNzE0Njk0OGIxNWI2ZTY0OTdiNTU4M2FhZGYxYmQy
Ny4uMjA3MjA5MGFlMDQ5ODEwZGRiZmY1ODgzNGZkZmIwNDZlMTU0YzM5NSAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BWE9iamVjdENhY2hlLmNwcAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FYT2JqZWN0Q2FjaGUuY3BwCkBAIC0xMzE2LDExICsx
MzE2LDggQEAgdm9pZCBBWE9iamVjdENhY2hlOjp0ZXh0TWFya2VyRGF0YUZvclZpc2libGVQb3Np
dGlvbihUZXh0TWFya2VyRGF0YSYgdGV4dE1hcmtlckQKICAgICBpZiAoIWRvbU5vZGUpCiAgICAg
ICAgIHJldHVybjsKICAgICAKLSAgICBpZiAoZG9tTm9kZS0+aXNIVE1MRWxlbWVudCgpKSB7Ci0g
ICAgICAgIEhUTUxJbnB1dEVsZW1lbnQqIGlucHV0RWxlbWVudCA9IGRvbU5vZGUtPnRvSW5wdXRF
bGVtZW50KCk7Ci0gICAgICAgIGlmIChpbnB1dEVsZW1lbnQgJiYgaW5wdXRFbGVtZW50LT5pc1Bh
c3N3b3JkRmllbGQoKSkKLSAgICAgICAgICAgIHJldHVybjsKLSAgICB9CisgICAgaWYgKGlzPEhU
TUxJbnB1dEVsZW1lbnQ+KCpkb21Ob2RlKSAmJiBkb3duY2FzdDxIVE1MSW5wdXRFbGVtZW50Pigq
ZG9tTm9kZSkuaXNQYXNzd29yZEZpZWxkKCkpCisgICAgICAgIHJldHVybjsKICAgICAKICAgICAv
LyBmaW5kIG9yIGNyZWF0ZSBhbiBhY2Nlc3NpYmlsaXR5IG9iamVjdCBmb3IgdGhpcyBub2RlCiAg
ICAgQVhPYmplY3RDYWNoZSogY2FjaGUgPSBkb21Ob2RlLT5kb2N1bWVudCgpLmF4T2JqZWN0Q2Fj
aGUoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJp
bGl0eU5vZGVPYmplY3QuY3BwIGIvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3Np
YmlsaXR5Tm9kZU9iamVjdC5jcHAKaW5kZXggODk1M2ViYWI2OTg4Njg4MmJmYjFlODMxYjAyN2Y0
ZTk5ZDY3MTg1MC4uMDcxOWMxZDYxYzNkMWZmZGJmYjA2ZTZlNGI1YzBjOGJmZmM0Yzg0NiAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5Tm9kZU9i
amVjdC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5
Tm9kZU9iamVjdC5jcHAKQEAgLTQ5NCwxMCArNDk0LDExIEBAIGJvb2wgQWNjZXNzaWJpbGl0eU5v
ZGVPYmplY3Q6OmlzU2VhcmNoRmllbGQoKSBjb25zdAogICAgIGlmIChyb2xlVmFsdWUoKSA9PSBT
ZWFyY2hGaWVsZFJvbGUpCiAgICAgICAgIHJldHVybiB0cnVlOwogCi0gICAgSFRNTElucHV0RWxl
bWVudCogaW5wdXRFbGVtZW50ID0gbm9kZS0+dG9JbnB1dEVsZW1lbnQoKTsKLSAgICBpZiAoIWlu
cHV0RWxlbWVudCkKKyAgICBpZiAoIWlzPEhUTUxJbnB1dEVsZW1lbnQ+KCpub2RlKSkKICAgICAg
ICAgcmV0dXJuIGZhbHNlOwogCisgICAgYXV0byYgaW5wdXRFbGVtZW50ID0gZG93bmNhc3Q8SFRN
TElucHV0RWxlbWVudD4oKm5vZGUpOworCiAgICAgLy8gU29tZSB3ZWJzaXRlcyBkb24ndCBsYWJl
bCB0aGVpciBzZWFyY2ggZmllbGRzIGFzIHN1Y2guIEhvd2V2ZXIsIHRoZXkgd2lsbAogICAgIC8v
IHVzZSB0aGUgd29yZCAic2VhcmNoIiBpbiBlaXRoZXIgdGhlIGZvcm0gb3IgaW5wdXQgdHlwZS4g
VGhpcyB3b24ndCBjYXRjaCBldmVyeSBjYXNlLAogICAgIC8vIGJ1dCBpdCB3aWxsIGNhdGNoIGdv
b2dsZS5jb20gZm9yIGV4YW1wbGUuCkBAIC01MDgsNyArNTA5LDcgQEAgYm9vbCBBY2Nlc3NpYmls
aXR5Tm9kZU9iamVjdDo6aXNTZWFyY2hGaWVsZCgpIGNvbnN0CiAgICAgICAgIHJldHVybiB0cnVl
OwogCiAgICAgLy8gQ2hlY2sgdGhlIGZvcm0gYWN0aW9uIGFuZCB0aGUgbmFtZSwgd2hpY2ggd2ls
bCBzb21ldGltZXMgYmUgInNlYXJjaCIuCi0gICAgSFRNTEZvcm1FbGVtZW50KiBmb3JtID0gaW5w
dXRFbGVtZW50LT5mb3JtKCk7CisgICAgYXV0byogZm9ybSA9IGlucHV0RWxlbWVudC5mb3JtKCk7
CiAgICAgaWYgKGZvcm0gJiYgKGZvcm0tPm5hbWUoKS5jb250YWlucygic2VhcmNoIiwgZmFsc2Up
IHx8IGZvcm0tPmFjdGlvbigpLmNvbnRhaW5zKCJzZWFyY2giLCBmYWxzZSkpKQogICAgICAgICBy
ZXR1cm4gdHJ1ZTsKIApAQCAtNTQyLDE4ICs1NDMsMTQgQEAgYm9vbCBBY2Nlc3NpYmlsaXR5Tm9k
ZU9iamVjdDo6aXNJbWFnZSgpIGNvbnN0CiAKIGJvb2wgQWNjZXNzaWJpbGl0eU5vZGVPYmplY3Q6
OmlzUGFzc3dvcmRGaWVsZCgpIGNvbnN0CiB7Ci0gICAgTm9kZSogbm9kZSA9IHRoaXMtPm5vZGUo
KTsKLSAgICBpZiAoIW5vZGUgfHwgIW5vZGUtPmlzSFRNTEVsZW1lbnQoKSkKKyAgICBhdXRvKiBu
b2RlID0gdGhpcy0+bm9kZSgpOworICAgIGlmICghaXM8SFRNTElucHV0RWxlbWVudD4obm9kZSkp
CiAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgIGlmIChhcmlhUm9sZUF0dHJpYnV0ZSgpICE9
IFVua25vd25Sb2xlKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBIVE1MSW5wdXRFbGVt
ZW50KiBpbnB1dEVsZW1lbnQgPSBub2RlLT50b0lucHV0RWxlbWVudCgpOwotICAgIGlmICghaW5w
dXRFbGVtZW50KQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICByZXR1cm4gaW5wdXRFbGVt
ZW50LT5pc1Bhc3N3b3JkRmllbGQoKTsKKyAgICByZXR1cm4gZG93bmNhc3Q8SFRNTElucHV0RWxl
bWVudD4oKm5vZGUpLmlzUGFzc3dvcmRGaWVsZCgpOwogfQogCiBBY2Nlc3NpYmlsaXR5T2JqZWN0
KiBBY2Nlc3NpYmlsaXR5Tm9kZU9iamVjdDo6cGFzc3dvcmRGaWVsZE9yQ29udGFpbmluZ1Bhc3N3
b3JkRmllbGQoKQpAQCAtNTYyLDE2ICs1NTksMTQgQEAgQWNjZXNzaWJpbGl0eU9iamVjdCogQWNj
ZXNzaWJpbGl0eU5vZGVPYmplY3Q6OnBhc3N3b3JkRmllbGRPckNvbnRhaW5pbmdQYXNzd29yZEYK
ICAgICBpZiAoIW5vZGUpCiAgICAgICAgIHJldHVybiBudWxscHRyOwogCi0gICAgaWYgKEhUTUxJ
bnB1dEVsZW1lbnQqIGlucHV0RWxlbWVudCA9IG5vZGUtPnRvSW5wdXRFbGVtZW50KCkpIHsKLSAg
ICAgICAgaWYgKGlucHV0RWxlbWVudC0+aXNQYXNzd29yZEZpZWxkKCkpCi0gICAgICAgICAgICBy
ZXR1cm4gdGhpczsKLSAgICB9CisgICAgaWYgKGlzPEhUTUxJbnB1dEVsZW1lbnQ+KCpub2RlKSAm
JiBkb3duY2FzdDxIVE1MSW5wdXRFbGVtZW50Pigqbm9kZSkuaXNQYXNzd29yZEZpZWxkKCkpCisg
ICAgICAgIHJldHVybiB0aGlzOwogCi0gICAgRWxlbWVudCogZWxlbWVudCA9IG5vZGUtPnNoYWRv
d0hvc3QoKTsKLSAgICBpZiAoIWVsZW1lbnQgfHwgIWlzPEhUTUxJbnB1dEVsZW1lbnQ+KGVsZW1l
bnQpKQorICAgIGF1dG8qIGVsZW1lbnQgPSBub2RlLT5zaGFkb3dIb3N0KCk7CisgICAgaWYgKCFp
czxIVE1MSW5wdXRFbGVtZW50PihlbGVtZW50KSkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAK
LSAgICBpZiAoQVhPYmplY3RDYWNoZSogY2FjaGUgPSBheE9iamVjdENhY2hlKCkpCisgICAgaWYg
KGF1dG8qIGNhY2hlID0gYXhPYmplY3RDYWNoZSgpKQogICAgICAgICByZXR1cm4gY2FjaGUtPmdl
dE9yQ3JlYXRlKGVsZW1lbnQpOwogCiAgICAgcmV0dXJuIG51bGxwdHI7CkBAIC02NDMsMTQgKzYz
OCwxMSBAQCBib29sIEFjY2Vzc2liaWxpdHlOb2RlT2JqZWN0Ojppc01lbnVJdGVtKCkgY29uc3QK
IGJvb2wgQWNjZXNzaWJpbGl0eU5vZGVPYmplY3Q6OmlzTmF0aXZlQ2hlY2tib3hPclJhZGlvKCkg
Y29uc3QKIHsKICAgICBOb2RlKiBub2RlID0gdGhpcy0+bm9kZSgpOwotICAgIGlmICghbm9kZSkK
KyAgICBpZiAoIWlzPEhUTUxJbnB1dEVsZW1lbnQ+KG5vZGUpKQogICAgICAgICByZXR1cm4gZmFs
c2U7CiAKLSAgICBIVE1MSW5wdXRFbGVtZW50KiBpbnB1dCA9IG5vZGUtPnRvSW5wdXRFbGVtZW50
KCk7Ci0gICAgaWYgKGlucHV0KQotICAgICAgICByZXR1cm4gaW5wdXQtPmlzQ2hlY2tib3goKSB8
fCBpbnB1dC0+aXNSYWRpb0J1dHRvbigpOwotCi0gICAgcmV0dXJuIGZhbHNlOworICAgIGF1dG8m
IGlucHV0ID0gZG93bmNhc3Q8SFRNTElucHV0RWxlbWVudD4oKm5vZGUpOworICAgIHJldHVybiBp
bnB1dC5pc0NoZWNrYm94KCkgfHwgaW5wdXQuaXNSYWRpb0J1dHRvbigpOwogfQogCiBib29sIEFj
Y2Vzc2liaWxpdHlOb2RlT2JqZWN0Ojppc0VuYWJsZWQoKSBjb25zdApAQCAtNjc2LDE1ICs2Njgs
OCBAQCBib29sIEFjY2Vzc2liaWxpdHlOb2RlT2JqZWN0Ojppc0VuYWJsZWQoKSBjb25zdAogCiBi
b29sIEFjY2Vzc2liaWxpdHlOb2RlT2JqZWN0Ojppc0luZGV0ZXJtaW5hdGUoKSBjb25zdAogewot
ICAgIE5vZGUqIG5vZGUgPSB0aGlzLT5ub2RlKCk7Ci0gICAgaWYgKCFub2RlKQotICAgICAgICBy
ZXR1cm4gZmFsc2U7Ci0KLSAgICBIVE1MSW5wdXRFbGVtZW50KiBpbnB1dEVsZW1lbnQgPSBub2Rl
LT50b0lucHV0RWxlbWVudCgpOwotICAgIGlmICghaW5wdXRFbGVtZW50KQotICAgICAgICByZXR1
cm4gZmFsc2U7Ci0KLSAgICByZXR1cm4gaW5wdXRFbGVtZW50LT5zaG91bGRBcHBlYXJJbmRldGVy
bWluYXRlKCk7CisgICAgYXV0byogbm9kZSA9IHRoaXMtPm5vZGUoKTsKKyAgICByZXR1cm4gaXM8
SFRNTElucHV0RWxlbWVudD4obm9kZSkgJiYgZG93bmNhc3Q8SFRNTElucHV0RWxlbWVudD4oKm5v
ZGUpLnNob3VsZEFwcGVhckluZGV0ZXJtaW5hdGUoKTsKIH0KIAogYm9vbCBBY2Nlc3NpYmlsaXR5
Tm9kZU9iamVjdDo6aXNQcmVzc2VkKCkgY29uc3QKQEAgLTcxNiw5ICs3MDEsOCBAQCBib29sIEFj
Y2Vzc2liaWxpdHlOb2RlT2JqZWN0Ojppc0NoZWNrZWQoKSBjb25zdAogICAgICAgICByZXR1cm4g
ZmFsc2U7CiAKICAgICAvLyBGaXJzdCB0ZXN0IGZvciBuYXRpdmUgY2hlY2tlZG5lc3Mgc2VtYW50
aWNzCi0gICAgSFRNTElucHV0RWxlbWVudCogaW5wdXRFbGVtZW50ID0gbm9kZS0+dG9JbnB1dEVs
ZW1lbnQoKTsKLSAgICBpZiAoaW5wdXRFbGVtZW50KQotICAgICAgICByZXR1cm4gaW5wdXRFbGVt
ZW50LT5zaG91bGRBcHBlYXJDaGVja2VkKCk7CisgICAgaWYgKGlzPEhUTUxJbnB1dEVsZW1lbnQ+
KCpub2RlKSkKKyAgICAgICAgcmV0dXJuIGRvd25jYXN0PEhUTUxJbnB1dEVsZW1lbnQ+KCpub2Rl
KS5zaG91bGRBcHBlYXJDaGVja2VkKCk7CiAKICAgICAvLyBFbHNlLCBpZiB0aGlzIGlzIGFuIEFS
SUEgY2hlY2tib3ggb3IgcmFkaW8sIHJlc3BlY3QgdGhlIGFyaWEtY2hlY2tlZCBhdHRyaWJ1dGUK
ICAgICBib29sIHZhbGlkUm9sZSA9IGZhbHNlOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
Y3NzL1NlbGVjdG9yQ2hlY2tlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvU2VsZWN0b3JDaGVj
a2VyLmNwcAppbmRleCBmYmIzNDg1MTI0NzA1YjgwZWY1NTBjN2YyYjc0OWZkOTY2MTAxMDVkLi5l
NzczNTM3Mjg3YWQ4ZTVhNjgyYWU2NWI1N2QyZmFlYThmM2YwM2NlIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9jc3MvU2VsZWN0b3JDaGVja2VyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9j
c3MvU2VsZWN0b3JDaGVja2VyLmNwcApAQCAtOTAzLDcgKzkwMyw3IEBAIGJvb2wgU2VsZWN0b3JD
aGVja2VyOjpjaGVja09uZShjb25zdCBDaGVja2luZ0NvbnRleHRXaXRoU3RhdHVzJiBjb250ZXh0
LCBQc2V1ZG9JCiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2Fz
ZSBDU1NTZWxlY3Rvcjo6UHNldWRvQ2xhc3NBdXRvZmlsbDoKLSAgICAgICAgICAgIHJldHVybiBp
c0F1dG9maWxsZWQoZWxlbWVudCk7CisgICAgICAgICAgICByZXR1cm4gaXNBdXRvZmlsbGVkKCpl
bGVtZW50KTsKICAgICAgICAgY2FzZSBDU1NTZWxlY3Rvcjo6UHNldWRvQ2xhc3NBbnlMaW5rOgog
ICAgICAgICBjYXNlIENTU1NlbGVjdG9yOjpQc2V1ZG9DbGFzc0FueUxpbmtEZXByZWNhdGVkOgog
ICAgICAgICBjYXNlIENTU1NlbGVjdG9yOjpQc2V1ZG9DbGFzc0xpbms6CkBAIC05NzIsNyArOTcy
LDcgQEAgYm9vbCBTZWxlY3RvckNoZWNrZXI6OmNoZWNrT25lKGNvbnN0IENoZWNraW5nQ29udGV4
dFdpdGhTdGF0dXMmIGNvbnRleHQsIFBzZXVkb0kKICAgICAgICAgY2FzZSBDU1NTZWxlY3Rvcjo6
UHNldWRvQ2xhc3NJbnZhbGlkOgogICAgICAgICAgICAgcmV0dXJuIGlzSW52YWxpZChlbGVtZW50
KTsKICAgICAgICAgY2FzZSBDU1NTZWxlY3Rvcjo6UHNldWRvQ2xhc3NDaGVja2VkOgotICAgICAg
ICAgICAgcmV0dXJuIGlzQ2hlY2tlZChlbGVtZW50KTsKKyAgICAgICAgICAgIHJldHVybiBpc0No
ZWNrZWQoKmVsZW1lbnQpOwogICAgICAgICBjYXNlIENTU1NlbGVjdG9yOjpQc2V1ZG9DbGFzc0lu
ZGV0ZXJtaW5hdGU6CiAgICAgICAgICAgICByZXR1cm4gc2hvdWxkQXBwZWFySW5kZXRlcm1pbmF0
ZShlbGVtZW50KTsKICAgICAgICAgY2FzZSBDU1NTZWxlY3Rvcjo6UHNldWRvQ2xhc3NSb290Ogpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvY3NzL1NlbGVjdG9yQ2hlY2tlclRlc3RGdW5jdGlv
bnMuaCBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9TZWxlY3RvckNoZWNrZXJUZXN0RnVuY3Rpb25zLmgK
aW5kZXggODZkYjU4YzE4NTAzMGQxOTM1ZDAzMGY1ZjIyNzhjN2Q0ODMyOTJiYy4uZDI1MWQ2MmFh
ZDFhYTlmMDE3M2ZmM2UwMGE0MmQwMjk0ZmIwOWUyZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvY3NzL1NlbGVjdG9yQ2hlY2tlclRlc3RGdW5jdGlvbnMuaAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9jc3MvU2VsZWN0b3JDaGVja2VyVGVzdEZ1bmN0aW9ucy5oCkBAIC00MSwxMyArNDEsOSBAQAog
CiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLUFMV0FZU19JTkxJTkUgYm9vbCBpc0F1dG9maWxsZWQo
Y29uc3QgRWxlbWVudCogZWxlbWVudCkKK0FMV0FZU19JTkxJTkUgYm9vbCBpc0F1dG9maWxsZWQo
Y29uc3QgRWxlbWVudCYgZWxlbWVudCkKIHsKLSAgICBpZiAoaXM8SFRNTEZvcm1Db250cm9sRWxl
bWVudD4oKmVsZW1lbnQpKSB7Ci0gICAgICAgIGlmIChjb25zdCBIVE1MSW5wdXRFbGVtZW50KiBp
bnB1dEVsZW1lbnQgPSBlbGVtZW50LT50b0lucHV0RWxlbWVudCgpKQotICAgICAgICAgICAgcmV0
dXJuIGlucHV0RWxlbWVudC0+aXNBdXRvRmlsbGVkKCk7Ci0gICAgfQotICAgIHJldHVybiBmYWxz
ZTsKKyAgICByZXR1cm4gaXM8SFRNTElucHV0RWxlbWVudD4oZWxlbWVudCkgJiYgZG93bmNhc3Q8
SFRNTElucHV0RWxlbWVudD4oZWxlbWVudCkuaXNBdXRvRmlsbGVkKCk7CiB9CiAKIEFMV0FZU19J
TkxJTkUgYm9vbCBpc0RlZmF1bHRCdXR0b25Gb3JGb3JtKGNvbnN0IEVsZW1lbnQqIGVsZW1lbnQp
CkBAIC03MiwxNiArNjgsMTggQEAgQUxXQVlTX0lOTElORSBib29sIGlzTWVkaWFEb2N1bWVudChF
bGVtZW50KiBlbGVtZW50KQogICAgIHJldHVybiBlbGVtZW50LT5kb2N1bWVudCgpLmlzTWVkaWFE
b2N1bWVudCgpOwogfQogCi1BTFdBWVNfSU5MSU5FIGJvb2wgaXNDaGVja2VkKEVsZW1lbnQqIGVs
ZW1lbnQpCitBTFdBWVNfSU5MSU5FIGJvb2wgaXNDaGVja2VkKEVsZW1lbnQmIGVsZW1lbnQpCiB7
CiAgICAgLy8gRXZlbiB0aG91Z2ggV2luSUUgYWxsb3dzIGNoZWNrZWQgYW5kIGluZGV0ZXJtaW5h
dGUgdG8gY28tZXhpc3QsIHRoZSBDU1Mgc2VsZWN0b3Igc3BlYyBzYXlzIHRoYXQKICAgICAvLyB5
b3UgY2FuJ3QgYmUgYm90aCBjaGVja2VkIGFuZCBpbmRldGVybWluYXRlLiBXZSB3aWxsIGJlaGF2
ZSBsaWtlIFdpbklFIGJlaGluZCB0aGUgc2NlbmVzIGFuZCBqdXN0CiAgICAgLy8gb2JleSB0aGUg
Q1NTIHNwZWMgaGVyZSBpbiB0aGUgdGVzdCBmb3IgbWF0Y2hpbmcgdGhlIHBzZXVkby4KLSAgICBj
b25zdCBIVE1MSW5wdXRFbGVtZW50KiBpbnB1dEVsZW1lbnQgPSBlbGVtZW50LT50b0lucHV0RWxl
bWVudCgpOwotICAgIGlmIChpbnB1dEVsZW1lbnQgJiYgaW5wdXRFbGVtZW50LT5zaG91bGRBcHBl
YXJDaGVja2VkKCkgJiYgIWlucHV0RWxlbWVudC0+c2hvdWxkQXBwZWFySW5kZXRlcm1pbmF0ZSgp
KQotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICBpZiAoaXM8SFRNTE9wdGlvbkVsZW1lbnQ+KCpl
bGVtZW50KSAmJiBkb3duY2FzdDxIVE1MT3B0aW9uRWxlbWVudD4oKmVsZW1lbnQpLnNlbGVjdGVk
KCkpCi0gICAgICAgIHJldHVybiB0cnVlOworICAgIGlmIChpczxIVE1MSW5wdXRFbGVtZW50Pihl
bGVtZW50KSkgeworICAgICAgICBhdXRvJiBpbnB1dEVsZW1lbnQgPSBkb3duY2FzdDxIVE1MSW5w
dXRFbGVtZW50PihlbGVtZW50KTsKKyAgICAgICAgcmV0dXJuIGlucHV0RWxlbWVudC5zaG91bGRB
cHBlYXJDaGVja2VkKCkgJiYgIWlucHV0RWxlbWVudC5zaG91bGRBcHBlYXJJbmRldGVybWluYXRl
KCk7CisgICAgfQorICAgIGlmIChpczxIVE1MT3B0aW9uRWxlbWVudD4oZWxlbWVudCkpCisgICAg
ICAgIHJldHVybiBkb3duY2FzdDxIVE1MT3B0aW9uRWxlbWVudD4oZWxlbWVudCkuc2VsZWN0ZWQo
KTsKKwogICAgIHJldHVybiBmYWxzZTsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
Y3NzL1N0eWxlUmVzb2x2ZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvY3NzL1N0eWxlUmVzb2x2ZXIu
Y3BwCmluZGV4IDBhNDI0YWQ2N2NmZWJlY2U4ODlmNmFhNzRmODMyMjdiOWFmMWE3NzIuLjE1OWQy
YzI1YWY4OTRjYWIzNTQ1N2I2MWNmMWIyZDk3MTRkZGM1NGMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL2Nzcy9TdHlsZVJlc29sdmVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvU3R5
bGVSZXNvbHZlci5jcHAKQEAgLTQ3OSw4NCArNDc5LDg0IEBAIGJvb2wgU3R5bGVSZXNvbHZlcjo6
c3R5bGVTaGFyaW5nQ2FuZGlkYXRlTWF0Y2hlc1J1bGVTZXQoUnVsZVNldCogcnVsZVNldCkKICAg
ICByZXR1cm4gY29sbGVjdG9yLmhhc0FueU1hdGNoaW5nUnVsZXMocnVsZVNldCk7CiB9CiAKLWJv
b2wgU3R5bGVSZXNvbHZlcjo6Y2FuU2hhcmVTdHlsZVdpdGhDb250cm9sKFN0eWxlZEVsZW1lbnQq
IGVsZW1lbnQpIGNvbnN0Citib29sIFN0eWxlUmVzb2x2ZXI6OmNhblNoYXJlU3R5bGVXaXRoQ29u
dHJvbChTdHlsZWRFbGVtZW50JiBlbGVtZW50KSBjb25zdAogewogICAgIGNvbnN0IFN0YXRlJiBz
dGF0ZSA9IG1fc3RhdGU7Ci0gICAgSFRNTElucHV0RWxlbWVudCogdGhpc0lucHV0RWxlbWVudCA9
IGVsZW1lbnQtPnRvSW5wdXRFbGVtZW50KCk7Ci0gICAgSFRNTElucHV0RWxlbWVudCogb3RoZXJJ
bnB1dEVsZW1lbnQgPSBzdGF0ZS5lbGVtZW50KCktPnRvSW5wdXRFbGVtZW50KCk7Ci0KLSAgICBp
ZiAoIXRoaXNJbnB1dEVsZW1lbnQgfHwgIW90aGVySW5wdXRFbGVtZW50KQorICAgIGlmICghaXM8
SFRNTElucHV0RWxlbWVudD4oZWxlbWVudCkgfHwgIWlzPEhUTUxJbnB1dEVsZW1lbnQ+KCpzdGF0
ZS5lbGVtZW50KCkpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBpZiAodGhpc0lucHV0
RWxlbWVudC0+aXNBdXRvRmlsbGVkKCkgIT0gb3RoZXJJbnB1dEVsZW1lbnQtPmlzQXV0b0ZpbGxl
ZCgpKQorICAgIGF1dG8mIHRoaXNJbnB1dEVsZW1lbnQgPSBkb3duY2FzdDxIVE1MSW5wdXRFbGVt
ZW50PihlbGVtZW50KTsKKyAgICBhdXRvJiBvdGhlcklucHV0RWxlbWVudCA9IGRvd25jYXN0PEhU
TUxJbnB1dEVsZW1lbnQ+KCpzdGF0ZS5lbGVtZW50KCkpOworCisgICAgaWYgKHRoaXNJbnB1dEVs
ZW1lbnQuaXNBdXRvRmlsbGVkKCkgIT0gb3RoZXJJbnB1dEVsZW1lbnQuaXNBdXRvRmlsbGVkKCkp
CiAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBpZiAodGhpc0lucHV0RWxlbWVudC0+c2hvdWxk
QXBwZWFyQ2hlY2tlZCgpICE9IG90aGVySW5wdXRFbGVtZW50LT5zaG91bGRBcHBlYXJDaGVja2Vk
KCkpCisgICAgaWYgKHRoaXNJbnB1dEVsZW1lbnQuc2hvdWxkQXBwZWFyQ2hlY2tlZCgpICE9IG90
aGVySW5wdXRFbGVtZW50LnNob3VsZEFwcGVhckNoZWNrZWQoKSkKICAgICAgICAgcmV0dXJuIGZh
bHNlOwotICAgIGlmICh0aGlzSW5wdXRFbGVtZW50LT5zaG91bGRBcHBlYXJJbmRldGVybWluYXRl
KCkgIT0gb3RoZXJJbnB1dEVsZW1lbnQtPnNob3VsZEFwcGVhckluZGV0ZXJtaW5hdGUoKSkKKyAg
ICBpZiAodGhpc0lucHV0RWxlbWVudC5zaG91bGRBcHBlYXJJbmRldGVybWluYXRlKCkgIT0gb3Ro
ZXJJbnB1dEVsZW1lbnQuc2hvdWxkQXBwZWFySW5kZXRlcm1pbmF0ZSgpKQogICAgICAgICByZXR1
cm4gZmFsc2U7Ci0gICAgaWYgKHRoaXNJbnB1dEVsZW1lbnQtPmlzUmVxdWlyZWQoKSAhPSBvdGhl
cklucHV0RWxlbWVudC0+aXNSZXF1aXJlZCgpKQorICAgIGlmICh0aGlzSW5wdXRFbGVtZW50Lmlz
UmVxdWlyZWQoKSAhPSBvdGhlcklucHV0RWxlbWVudC5pc1JlcXVpcmVkKCkpCiAgICAgICAgIHJl
dHVybiBmYWxzZTsKIAotICAgIGlmIChlbGVtZW50LT5pc0Rpc2FibGVkRm9ybUNvbnRyb2woKSAh
PSBzdGF0ZS5lbGVtZW50KCktPmlzRGlzYWJsZWRGb3JtQ29udHJvbCgpKQorICAgIGlmIChlbGVt
ZW50LmlzRGlzYWJsZWRGb3JtQ29udHJvbCgpICE9IHN0YXRlLmVsZW1lbnQoKS0+aXNEaXNhYmxl
ZEZvcm1Db250cm9sKCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIGlmIChlbGVtZW50
LT5pc0RlZmF1bHRCdXR0b25Gb3JGb3JtKCkgIT0gc3RhdGUuZWxlbWVudCgpLT5pc0RlZmF1bHRC
dXR0b25Gb3JGb3JtKCkpCisgICAgaWYgKGVsZW1lbnQuaXNEZWZhdWx0QnV0dG9uRm9yRm9ybSgp
ICE9IHN0YXRlLmVsZW1lbnQoKS0+aXNEZWZhdWx0QnV0dG9uRm9yRm9ybSgpKQogICAgICAgICBy
ZXR1cm4gZmFsc2U7CiAKLSAgICBpZiAoZWxlbWVudC0+aXNJblJhbmdlKCkgIT0gc3RhdGUuZWxl
bWVudCgpLT5pc0luUmFuZ2UoKSkKKyAgICBpZiAoZWxlbWVudC5pc0luUmFuZ2UoKSAhPSBzdGF0
ZS5lbGVtZW50KCktPmlzSW5SYW5nZSgpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBp
ZiAoZWxlbWVudC0+aXNPdXRPZlJhbmdlKCkgIT0gc3RhdGUuZWxlbWVudCgpLT5pc091dE9mUmFu
Z2UoKSkKKyAgICBpZiAoZWxlbWVudC5pc091dE9mUmFuZ2UoKSAhPSBzdGF0ZS5lbGVtZW50KCkt
PmlzT3V0T2ZSYW5nZSgpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICByZXR1cm4gdHJ1
ZTsKIH0KIAotc3RhdGljIGlubGluZSBib29sIGVsZW1lbnRIYXNEaXJlY3Rpb25BdXRvKEVsZW1l
bnQqIGVsZW1lbnQpCitzdGF0aWMgaW5saW5lIGJvb2wgZWxlbWVudEhhc0RpcmVjdGlvbkF1dG8o
RWxlbWVudCYgZWxlbWVudCkKIHsKICAgICAvLyBGSVhNRTogVGhpcyBsaW5lIGlzIHN1cnByaXNp
bmdseSBob3QsIHdlIG1heSB3aXNoIHRvIGlubGluZSBoYXNEaXJlY3Rpb25BdXRvIGludG8gU3R5
bGVSZXNvbHZlci4KLSAgICByZXR1cm4gaXM8SFRNTEVsZW1lbnQ+KCplbGVtZW50KSAmJiBkb3du
Y2FzdDxIVE1MRWxlbWVudD4oKmVsZW1lbnQpLmhhc0RpcmVjdGlvbkF1dG8oKTsKKyAgICByZXR1
cm4gaXM8SFRNTEVsZW1lbnQ+KGVsZW1lbnQpICYmIGRvd25jYXN0PEhUTUxFbGVtZW50PihlbGVt
ZW50KS5oYXNEaXJlY3Rpb25BdXRvKCk7CiB9CiAKLWJvb2wgU3R5bGVSZXNvbHZlcjo6c2hhcmlu
Z0NhbmRpZGF0ZUhhc0lkZW50aWNhbFN0eWxlQWZmZWN0aW5nQXR0cmlidXRlcyhTdHlsZWRFbGVt
ZW50KiBzaGFyaW5nQ2FuZGlkYXRlKSBjb25zdAorYm9vbCBTdHlsZVJlc29sdmVyOjpzaGFyaW5n
Q2FuZGlkYXRlSGFzSWRlbnRpY2FsU3R5bGVBZmZlY3RpbmdBdHRyaWJ1dGVzKFN0eWxlZEVsZW1l
bnQmIHNoYXJpbmdDYW5kaWRhdGUpIGNvbnN0CiB7CiAgICAgY29uc3QgU3RhdGUmIHN0YXRlID0g
bV9zdGF0ZTsKLSAgICBpZiAoc3RhdGUuZWxlbWVudCgpLT5lbGVtZW50RGF0YSgpID09IHNoYXJp
bmdDYW5kaWRhdGUtPmVsZW1lbnREYXRhKCkpCisgICAgaWYgKHN0YXRlLmVsZW1lbnQoKS0+ZWxl
bWVudERhdGEoKSA9PSBzaGFyaW5nQ2FuZGlkYXRlLmVsZW1lbnREYXRhKCkpCiAgICAgICAgIHJl
dHVybiB0cnVlOwotICAgIGlmIChzdGF0ZS5lbGVtZW50KCktPmZhc3RHZXRBdHRyaWJ1dGUoWE1M
TmFtZXM6OmxhbmdBdHRyKSAhPSBzaGFyaW5nQ2FuZGlkYXRlLT5mYXN0R2V0QXR0cmlidXRlKFhN
TE5hbWVzOjpsYW5nQXR0cikpCisgICAgaWYgKHN0YXRlLmVsZW1lbnQoKS0+ZmFzdEdldEF0dHJp
YnV0ZShYTUxOYW1lczo6bGFuZ0F0dHIpICE9IHNoYXJpbmdDYW5kaWRhdGUuZmFzdEdldEF0dHJp
YnV0ZShYTUxOYW1lczo6bGFuZ0F0dHIpKQogICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgaWYg
KHN0YXRlLmVsZW1lbnQoKS0+ZmFzdEdldEF0dHJpYnV0ZShsYW5nQXR0cikgIT0gc2hhcmluZ0Nh
bmRpZGF0ZS0+ZmFzdEdldEF0dHJpYnV0ZShsYW5nQXR0cikpCisgICAgaWYgKHN0YXRlLmVsZW1l
bnQoKS0+ZmFzdEdldEF0dHJpYnV0ZShsYW5nQXR0cikgIT0gc2hhcmluZ0NhbmRpZGF0ZS5mYXN0
R2V0QXR0cmlidXRlKGxhbmdBdHRyKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgaWYg
KCFzdGF0ZS5lbGVtZW50QWZmZWN0ZWRCeUNsYXNzUnVsZXMoKSkgewotICAgICAgICBpZiAoc2hh
cmluZ0NhbmRpZGF0ZS0+aGFzQ2xhc3MoKSAmJiBjbGFzc05hbWVzQWZmZWN0ZWRCeVJ1bGVzKHNo
YXJpbmdDYW5kaWRhdGUtPmNsYXNzTmFtZXMoKSkpCisgICAgICAgIGlmIChzaGFyaW5nQ2FuZGlk
YXRlLmhhc0NsYXNzKCkgJiYgY2xhc3NOYW1lc0FmZmVjdGVkQnlSdWxlcyhzaGFyaW5nQ2FuZGlk
YXRlLmNsYXNzTmFtZXMoKSkpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfSBlbHNl
IGlmIChzaGFyaW5nQ2FuZGlkYXRlLT5oYXNDbGFzcygpKSB7CisgICAgfSBlbHNlIGlmIChzaGFy
aW5nQ2FuZGlkYXRlLmhhc0NsYXNzKCkpIHsKICAgICAgICAgLy8gU1ZHIGVsZW1lbnRzIHJlcXVp
cmUgYSAoc2xvdyEpIGdldEF0dHJpYnV0ZSBjb21wYXJpc2lvbiBiZWNhdXNlICJjbGFzcyIgaXMg
YW4gYW5pbWF0YWJsZSBhdHRyaWJ1dGUgZm9yIFNWRy4KICAgICAgICAgaWYgKHN0YXRlLmVsZW1l
bnQoKS0+aXNTVkdFbGVtZW50KCkpIHsKLSAgICAgICAgICAgIGlmIChzdGF0ZS5lbGVtZW50KCkt
PmdldEF0dHJpYnV0ZShjbGFzc0F0dHIpICE9IHNoYXJpbmdDYW5kaWRhdGUtPmdldEF0dHJpYnV0
ZShjbGFzc0F0dHIpKQorICAgICAgICAgICAgaWYgKHN0YXRlLmVsZW1lbnQoKS0+Z2V0QXR0cmli
dXRlKGNsYXNzQXR0cikgIT0gc2hhcmluZ0NhbmRpZGF0ZS5nZXRBdHRyaWJ1dGUoY2xhc3NBdHRy
KSkKICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIH0gZWxzZSB7Ci0gICAg
ICAgICAgICBpZiAoc3RhdGUuZWxlbWVudCgpLT5jbGFzc05hbWVzKCkgIT0gc2hhcmluZ0NhbmRp
ZGF0ZS0+Y2xhc3NOYW1lcygpKQorICAgICAgICAgICAgaWYgKHN0YXRlLmVsZW1lbnQoKS0+Y2xh
c3NOYW1lcygpICE9IHNoYXJpbmdDYW5kaWRhdGUuY2xhc3NOYW1lcygpKQogICAgICAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgfQogICAgIH0gZWxzZQogICAgICAgICByZXR1cm4g
ZmFsc2U7CiAKLSAgICBpZiAoc3RhdGUuc3R5bGVkRWxlbWVudCgpLT5wcmVzZW50YXRpb25BdHRy
aWJ1dGVTdHlsZSgpICE9IHNoYXJpbmdDYW5kaWRhdGUtPnByZXNlbnRhdGlvbkF0dHJpYnV0ZVN0
eWxlKCkpCisgICAgaWYgKHN0YXRlLnN0eWxlZEVsZW1lbnQoKS0+cHJlc2VudGF0aW9uQXR0cmli
dXRlU3R5bGUoKSAhPSBzaGFyaW5nQ2FuZGlkYXRlLnByZXNlbnRhdGlvbkF0dHJpYnV0ZVN0eWxl
KCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgIGlmIChzdGF0ZS5lbGVtZW50KCktPmhh
c1RhZ05hbWUocHJvZ3Jlc3NUYWcpKSB7Ci0gICAgICAgIGlmIChzdGF0ZS5lbGVtZW50KCktPnNo
b3VsZEFwcGVhckluZGV0ZXJtaW5hdGUoKSAhPSBzaGFyaW5nQ2FuZGlkYXRlLT5zaG91bGRBcHBl
YXJJbmRldGVybWluYXRlKCkpCisgICAgICAgIGlmIChzdGF0ZS5lbGVtZW50KCktPnNob3VsZEFw
cGVhckluZGV0ZXJtaW5hdGUoKSAhPSBzaGFyaW5nQ2FuZGlkYXRlLnNob3VsZEFwcGVhckluZGV0
ZXJtaW5hdGUoKSkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CiAKICAgICByZXR1
cm4gdHJ1ZTsKIH0KIAotYm9vbCBTdHlsZVJlc29sdmVyOjpjYW5TaGFyZVN0eWxlV2l0aEVsZW1l
bnQoU3R5bGVkRWxlbWVudCogZWxlbWVudCkgY29uc3QKK2Jvb2wgU3R5bGVSZXNvbHZlcjo6Y2Fu
U2hhcmVTdHlsZVdpdGhFbGVtZW50KFN0eWxlZEVsZW1lbnQmIGVsZW1lbnQpIGNvbnN0CiB7Ci0g
ICAgUmVuZGVyU3R5bGUqIHN0eWxlID0gZWxlbWVudC0+cmVuZGVyU3R5bGUoKTsKKyAgICBhdXRv
KiBzdHlsZSA9IGVsZW1lbnQucmVuZGVyU3R5bGUoKTsKICAgICBjb25zdCBTdGF0ZSYgc3RhdGUg
PSBtX3N0YXRlOwogCiAgICAgaWYgKCFzdHlsZSkKQEAgLTU2NSwzNyArNTY1LDM3IEBAIGJvb2wg
U3R5bGVSZXNvbHZlcjo6Y2FuU2hhcmVTdHlsZVdpdGhFbGVtZW50KFN0eWxlZEVsZW1lbnQqIGVs
ZW1lbnQpIGNvbnN0CiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICBpZiAoc3R5bGUtPmhhc1Vu
aXF1ZVBzZXVkb1N0eWxlKCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBpZiAoZWxlbWVu
dC0+dGFnUU5hbWUoKSAhPSBzdGF0ZS5lbGVtZW50KCktPnRhZ1FOYW1lKCkpCisgICAgaWYgKGVs
ZW1lbnQudGFnUU5hbWUoKSAhPSBzdGF0ZS5lbGVtZW50KCktPnRhZ1FOYW1lKCkpCiAgICAgICAg
IHJldHVybiBmYWxzZTsKLSAgICBpZiAoZWxlbWVudC0+aW5saW5lU3R5bGUoKSkKKyAgICBpZiAo
ZWxlbWVudC5pbmxpbmVTdHlsZSgpKQogICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgaWYgKGVs
ZW1lbnQtPm5lZWRzU3R5bGVSZWNhbGMoKSkKKyAgICBpZiAoZWxlbWVudC5uZWVkc1N0eWxlUmVj
YWxjKCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBpZiAoZWxlbWVudC0+aXNTVkdFbGVt
ZW50KCkgJiYgZG93bmNhc3Q8U1ZHRWxlbWVudD4oKmVsZW1lbnQpLmFuaW1hdGVkU01JTFN0eWxl
UHJvcGVydGllcygpKQorICAgIGlmIChlbGVtZW50LmlzU1ZHRWxlbWVudCgpICYmIGRvd25jYXN0
PFNWR0VsZW1lbnQ+KGVsZW1lbnQpLmFuaW1hdGVkU01JTFN0eWxlUHJvcGVydGllcygpKQogICAg
ICAgICByZXR1cm4gZmFsc2U7Ci0gICAgaWYgKGVsZW1lbnQtPmlzTGluaygpICE9IHN0YXRlLmVs
ZW1lbnQoKS0+aXNMaW5rKCkpCisgICAgaWYgKGVsZW1lbnQuaXNMaW5rKCkgIT0gc3RhdGUuZWxl
bWVudCgpLT5pc0xpbmsoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIGlmIChlbGVtZW50
LT5ob3ZlcmVkKCkgIT0gc3RhdGUuZWxlbWVudCgpLT5ob3ZlcmVkKCkpCisgICAgaWYgKGVsZW1l
bnQuaG92ZXJlZCgpICE9IHN0YXRlLmVsZW1lbnQoKS0+aG92ZXJlZCgpKQogICAgICAgICByZXR1
cm4gZmFsc2U7Ci0gICAgaWYgKGVsZW1lbnQtPmFjdGl2ZSgpICE9IHN0YXRlLmVsZW1lbnQoKS0+
YWN0aXZlKCkpCisgICAgaWYgKGVsZW1lbnQuYWN0aXZlKCkgIT0gc3RhdGUuZWxlbWVudCgpLT5h
Y3RpdmUoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIGlmIChlbGVtZW50LT5mb2N1c2Vk
KCkgIT0gc3RhdGUuZWxlbWVudCgpLT5mb2N1c2VkKCkpCisgICAgaWYgKGVsZW1lbnQuZm9jdXNl
ZCgpICE9IHN0YXRlLmVsZW1lbnQoKS0+Zm9jdXNlZCgpKQogICAgICAgICByZXR1cm4gZmFsc2U7
Ci0gICAgaWYgKGVsZW1lbnQtPnNoYWRvd1BzZXVkb0lkKCkgIT0gc3RhdGUuZWxlbWVudCgpLT5z
aGFkb3dQc2V1ZG9JZCgpKQorICAgIGlmIChlbGVtZW50LnNoYWRvd1BzZXVkb0lkKCkgIT0gc3Rh
dGUuZWxlbWVudCgpLT5zaGFkb3dQc2V1ZG9JZCgpKQogICAgICAgICByZXR1cm4gZmFsc2U7Ci0g
ICAgaWYgKGVsZW1lbnQgPT0gZWxlbWVudC0+ZG9jdW1lbnQoKS5jc3NUYXJnZXQoKSkKKyAgICBp
ZiAoJmVsZW1lbnQgPT0gZWxlbWVudC5kb2N1bWVudCgpLmNzc1RhcmdldCgpKQogICAgICAgICBy
ZXR1cm4gZmFsc2U7CiAgICAgaWYgKCFzaGFyaW5nQ2FuZGlkYXRlSGFzSWRlbnRpY2FsU3R5bGVB
ZmZlY3RpbmdBdHRyaWJ1dGVzKGVsZW1lbnQpKQogICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAg
aWYgKGVsZW1lbnQtPmFkZGl0aW9uYWxQcmVzZW50YXRpb25BdHRyaWJ1dGVTdHlsZSgpICE9IHN0
YXRlLnN0eWxlZEVsZW1lbnQoKS0+YWRkaXRpb25hbFByZXNlbnRhdGlvbkF0dHJpYnV0ZVN0eWxl
KCkpCisgICAgaWYgKGVsZW1lbnQuYWRkaXRpb25hbFByZXNlbnRhdGlvbkF0dHJpYnV0ZVN0eWxl
KCkgIT0gc3RhdGUuc3R5bGVkRWxlbWVudCgpLT5hZGRpdGlvbmFsUHJlc2VudGF0aW9uQXR0cmli
dXRlU3R5bGUoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIGlmIChlbGVtZW50LT5hZmZl
Y3RzTmV4dFNpYmxpbmdFbGVtZW50U3R5bGUoKSB8fCBlbGVtZW50LT5zdHlsZUlzQWZmZWN0ZWRC
eVByZXZpb3VzU2libGluZygpKQorICAgIGlmIChlbGVtZW50LmFmZmVjdHNOZXh0U2libGluZ0Vs
ZW1lbnRTdHlsZSgpIHx8IGVsZW1lbnQuc3R5bGVJc0FmZmVjdGVkQnlQcmV2aW91c1NpYmxpbmco
KSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgaWYgKGVsZW1lbnQtPmhhc0lEKCkgJiYg
bV9ydWxlU2V0cy5mZWF0dXJlcygpLmlkc0luUnVsZXMuY29udGFpbnMoZWxlbWVudC0+aWRGb3JT
dHlsZVJlc29sdXRpb24oKS5pbXBsKCkpKQorICAgIGlmIChlbGVtZW50Lmhhc0lEKCkgJiYgbV9y
dWxlU2V0cy5mZWF0dXJlcygpLmlkc0luUnVsZXMuY29udGFpbnMoZWxlbWVudC5pZEZvclN0eWxl
UmVzb2x1dGlvbigpLmltcGwoKSkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIGJvb2wg
aXNDb250cm9sID0gaXM8SFRNTEZvcm1Db250cm9sRWxlbWVudD4oKmVsZW1lbnQpOworICAgIGJv
b2wgaXNDb250cm9sID0gaXM8SFRNTEZvcm1Db250cm9sRWxlbWVudD4oZWxlbWVudCk7CiAKICAg
ICBpZiAoaXNDb250cm9sICE9IGlzPEhUTUxGb3JtQ29udHJvbEVsZW1lbnQ+KCpzdGF0ZS5lbGVt
ZW50KCkpKQogICAgICAgICByZXR1cm4gZmFsc2U7CkBAIC02MDgsMzEgKzYwOCwzMSBAQCBib29s
IFN0eWxlUmVzb2x2ZXI6OmNhblNoYXJlU3R5bGVXaXRoRWxlbWVudChTdHlsZWRFbGVtZW50KiBl
bGVtZW50KSBjb25zdAogCiAgICAgLy8gVHVybiBvZmYgc3R5bGUgc2hhcmluZyBmb3IgZWxlbWVu
dHMgdGhhdCBjYW4gZ2FpbiBsYXllcnMgZm9yIHJlYXNvbnMgb3V0c2lkZSBvZiB0aGUgc3R5bGUg
c3lzdGVtLgogICAgIC8vIFNlZSBjb21tZW50cyBpbiBSZW5kZXJPYmplY3Q6OnNldFN0eWxlKCku
Ci0gICAgaWYgKGVsZW1lbnQtPmhhc1RhZ05hbWUoaWZyYW1lVGFnKSB8fCBlbGVtZW50LT5oYXNU
YWdOYW1lKGZyYW1lVGFnKSB8fCBlbGVtZW50LT5oYXNUYWdOYW1lKGVtYmVkVGFnKSB8fCBlbGVt
ZW50LT5oYXNUYWdOYW1lKG9iamVjdFRhZykgfHwgZWxlbWVudC0+aGFzVGFnTmFtZShhcHBsZXRU
YWcpIHx8IGVsZW1lbnQtPmhhc1RhZ05hbWUoY2FudmFzVGFnKSkKKyAgICBpZiAoZWxlbWVudC5o
YXNUYWdOYW1lKGlmcmFtZVRhZykgfHwgZWxlbWVudC5oYXNUYWdOYW1lKGZyYW1lVGFnKSB8fCBl
bGVtZW50Lmhhc1RhZ05hbWUoZW1iZWRUYWcpIHx8IGVsZW1lbnQuaGFzVGFnTmFtZShvYmplY3RU
YWcpIHx8IGVsZW1lbnQuaGFzVGFnTmFtZShhcHBsZXRUYWcpIHx8IGVsZW1lbnQuaGFzVGFnTmFt
ZShjYW52YXNUYWcpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICBpZiAoZWxlbWVudEhh
c0RpcmVjdGlvbkF1dG8oZWxlbWVudCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIGlm
IChlbGVtZW50LT5pc0xpbmsoKSAmJiBzdGF0ZS5lbGVtZW50TGlua1N0YXRlKCkgIT0gc3R5bGUt
Pmluc2lkZUxpbmsoKSkKKyAgICBpZiAoZWxlbWVudC5pc0xpbmsoKSAmJiBzdGF0ZS5lbGVtZW50
TGlua1N0YXRlKCkgIT0gc3R5bGUtPmluc2lkZUxpbmsoKSkKICAgICAgICAgcmV0dXJuIGZhbHNl
OwogCi0gICAgaWYgKGVsZW1lbnQtPmVsZW1lbnREYXRhKCkgIT0gc3RhdGUuZWxlbWVudCgpLT5l
bGVtZW50RGF0YSgpKSB7Ci0gICAgICAgIGlmIChlbGVtZW50LT5mYXN0R2V0QXR0cmlidXRlKHJl
YWRvbmx5QXR0cikgIT0gc3RhdGUuZWxlbWVudCgpLT5mYXN0R2V0QXR0cmlidXRlKHJlYWRvbmx5
QXR0cikpCisgICAgaWYgKGVsZW1lbnQuZWxlbWVudERhdGEoKSAhPSBzdGF0ZS5lbGVtZW50KCkt
PmVsZW1lbnREYXRhKCkpIHsKKyAgICAgICAgaWYgKGVsZW1lbnQuZmFzdEdldEF0dHJpYnV0ZShy
ZWFkb25seUF0dHIpICE9IHN0YXRlLmVsZW1lbnQoKS0+ZmFzdEdldEF0dHJpYnV0ZShyZWFkb25s
eUF0dHIpKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICBpZiAoZWxlbWVudC0+
aXNTVkdFbGVtZW50KCkpIHsKLSAgICAgICAgICAgIGlmIChlbGVtZW50LT5nZXRBdHRyaWJ1dGUo
dHlwZUF0dHIpICE9IHN0YXRlLmVsZW1lbnQoKS0+Z2V0QXR0cmlidXRlKHR5cGVBdHRyKSkKKyAg
ICAgICAgaWYgKGVsZW1lbnQuaXNTVkdFbGVtZW50KCkpIHsKKyAgICAgICAgICAgIGlmIChlbGVt
ZW50LmdldEF0dHJpYnV0ZSh0eXBlQXR0cikgIT0gc3RhdGUuZWxlbWVudCgpLT5nZXRBdHRyaWJ1
dGUodHlwZUF0dHIpKQogICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgfSBl
bHNlIHsKLSAgICAgICAgICAgIGlmIChlbGVtZW50LT5mYXN0R2V0QXR0cmlidXRlKHR5cGVBdHRy
KSAhPSBzdGF0ZS5lbGVtZW50KCktPmZhc3RHZXRBdHRyaWJ1dGUodHlwZUF0dHIpKQorICAgICAg
ICAgICAgaWYgKGVsZW1lbnQuZmFzdEdldEF0dHJpYnV0ZSh0eXBlQXR0cikgIT0gc3RhdGUuZWxl
bWVudCgpLT5mYXN0R2V0QXR0cmlidXRlKHR5cGVBdHRyKSkKICAgICAgICAgICAgICAgICByZXR1
cm4gZmFsc2U7CiAgICAgICAgIH0KICAgICB9CiAKLSAgICBpZiAoZWxlbWVudC0+bWF0Y2hlc1Zh
bGlkUHNldWRvQ2xhc3MoKSAhPSBzdGF0ZS5lbGVtZW50KCktPm1hdGNoZXNWYWxpZFBzZXVkb0Ns
YXNzKCkpCisgICAgaWYgKGVsZW1lbnQubWF0Y2hlc1ZhbGlkUHNldWRvQ2xhc3MoKSAhPSBzdGF0
ZS5lbGVtZW50KCktPm1hdGNoZXNWYWxpZFBzZXVkb0NsYXNzKCkpCiAgICAgICAgIHJldHVybiBm
YWxzZTsKIAotICAgIGlmIChlbGVtZW50LT5tYXRjaGVzSW52YWxpZFBzZXVkb0NsYXNzKCkgIT0g
c3RhdGUuZWxlbWVudCgpLT5tYXRjaGVzVmFsaWRQc2V1ZG9DbGFzcygpKQorICAgIGlmIChlbGVt
ZW50Lm1hdGNoZXNJbnZhbGlkUHNldWRvQ2xhc3MoKSAhPSBzdGF0ZS5lbGVtZW50KCktPm1hdGNo
ZXNWYWxpZFBzZXVkb0NsYXNzKCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAogI2lmIEVOQUJM
RShWSURFT19UUkFDSykKQEAgLTY0Miw3ICs2NDIsNyBAQCBib29sIFN0eWxlUmVzb2x2ZXI6OmNh
blNoYXJlU3R5bGVXaXRoRWxlbWVudChTdHlsZWRFbGVtZW50KiBlbGVtZW50KSBjb25zdAogI2Vu
ZGlmCiAKICNpZiBFTkFCTEUoRlVMTFNDUkVFTl9BUEkpCi0gICAgaWYgKGVsZW1lbnQgPT0gZWxl
bWVudC0+ZG9jdW1lbnQoKS53ZWJraXRDdXJyZW50RnVsbFNjcmVlbkVsZW1lbnQoKSB8fCBzdGF0
ZS5lbGVtZW50KCkgPT0gc3RhdGUuZG9jdW1lbnQoKS53ZWJraXRDdXJyZW50RnVsbFNjcmVlbkVs
ZW1lbnQoKSkKKyAgICBpZiAoJmVsZW1lbnQgPT0gZWxlbWVudC5kb2N1bWVudCgpLndlYmtpdEN1
cnJlbnRGdWxsU2NyZWVuRWxlbWVudCgpIHx8IHN0YXRlLmVsZW1lbnQoKSA9PSBzdGF0ZS5kb2N1
bWVudCgpLndlYmtpdEN1cnJlbnRGdWxsU2NyZWVuRWxlbWVudCgpKQogICAgICAgICByZXR1cm4g
ZmFsc2U7CiAjZW5kaWYKICAgICByZXR1cm4gdHJ1ZTsKQEAgLTY1Myw3ICs2NTMsNyBAQCBpbmxp
bmUgU3R5bGVkRWxlbWVudCogU3R5bGVSZXNvbHZlcjo6ZmluZFNpYmxpbmdGb3JTdHlsZVNoYXJp
bmcoTm9kZSogbm9kZSwgdW5zaQogICAgIGZvciAoOyBub2RlOyBub2RlID0gbm9kZS0+cHJldmlv
dXNTaWJsaW5nKCkpIHsKICAgICAgICAgaWYgKCFpczxTdHlsZWRFbGVtZW50Pigqbm9kZSkpCiAg
ICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgaWYgKGNhblNoYXJlU3R5bGVXaXRoRWxlbWVu
dChkb3duY2FzdDxTdHlsZWRFbGVtZW50Pihub2RlKSkpCisgICAgICAgIGlmIChjYW5TaGFyZVN0
eWxlV2l0aEVsZW1lbnQoZG93bmNhc3Q8U3R5bGVkRWxlbWVudD4oKm5vZGUpKSkKICAgICAgICAg
ICAgIGJyZWFrOwogICAgICAgICBpZiAoY291bnQrKyA9PSBjU3R5bGVTZWFyY2hUaHJlc2hvbGQp
CiAgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKQEAgLTY3OSw3ICs2NzksNyBAQCBSZW5kZXJT
dHlsZSogU3R5bGVSZXNvbHZlcjo6bG9jYXRlU2hhcmVkU3R5bGUoKQogICAgICAgICByZXR1cm4g
bnVsbHB0cjsKICAgICBpZiAoc3RhdGUuZWxlbWVudCgpID09IHN0YXRlLmRvY3VtZW50KCkuY3Nz
VGFyZ2V0KCkpCiAgICAgICAgIHJldHVybiBudWxscHRyOwotICAgIGlmIChlbGVtZW50SGFzRGly
ZWN0aW9uQXV0byhzdGF0ZS5lbGVtZW50KCkpKQorICAgIGlmIChlbGVtZW50SGFzRGlyZWN0aW9u
QXV0bygqc3RhdGUuZWxlbWVudCgpKSkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAKICAgICAv
LyBDYWNoZSB3aGV0aGVyIHN0YXRlLmVsZW1lbnQgaXMgYWZmZWN0ZWQgYnkgYW55IGtub3duIGNs
YXNzIHNlbGVjdG9ycy4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9TdHlsZVJlc29s
dmVyLmggYi9Tb3VyY2UvV2ViQ29yZS9jc3MvU3R5bGVSZXNvbHZlci5oCmluZGV4IGFlNzFhNjcy
NjZkZTQwNzdjZmNkZWYyOTE1YTc2YTE1YjEzYTFhMzguLmNlYzgyM2E4NzJkOWVmYmM2ODNmMWMx
ODcyYmU3OWIxODg4OTUzMjggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9TdHlsZVJl
c29sdmVyLmgKKysrIGIvU291cmNlL1dlYkNvcmUvY3NzL1N0eWxlUmVzb2x2ZXIuaApAQCAtMTgz
LDcgKzE4Myw3IEBAIHByaXZhdGU6CiAgICAgYm9vbCBzdHlsZVNoYXJpbmdDYW5kaWRhdGVNYXRj
aGVzUnVsZVNldChSdWxlU2V0Kik7CiAgICAgTm9kZSogbG9jYXRlQ291c2luTGlzdChFbGVtZW50
KiBwYXJlbnQsIHVuc2lnbmVkJiB2aXNpdGVkTm9kZUNvdW50KSBjb25zdDsKICAgICBTdHlsZWRF
bGVtZW50KiBmaW5kU2libGluZ0ZvclN0eWxlU2hhcmluZyhOb2RlKiwgdW5zaWduZWQmIGNvdW50
KSBjb25zdDsKLSAgICBib29sIGNhblNoYXJlU3R5bGVXaXRoRWxlbWVudChTdHlsZWRFbGVtZW50
KikgY29uc3Q7CisgICAgYm9vbCBjYW5TaGFyZVN0eWxlV2l0aEVsZW1lbnQoU3R5bGVkRWxlbWVu
dCYpIGNvbnN0OwogCiAgICAgUmVmPFJlbmRlclN0eWxlPiBzdHlsZUZvcktleWZyYW1lKGNvbnN0
IFJlbmRlclN0eWxlKiwgY29uc3QgU3R5bGVLZXlmcmFtZSosIEtleWZyYW1lVmFsdWUmKTsKIApA
QCAtNTMwLDcgKzUzMCw3IEBAIHByaXZhdGU6CiAKICAgICB2b2lkIGNhY2hlQm9yZGVyQW5kQmFj
a2dyb3VuZCgpOwogCi0gICAgYm9vbCBjYW5TaGFyZVN0eWxlV2l0aENvbnRyb2woU3R5bGVkRWxl
bWVudCopIGNvbnN0OworICAgIGJvb2wgY2FuU2hhcmVTdHlsZVdpdGhDb250cm9sKFN0eWxlZEVs
ZW1lbnQmKSBjb25zdDsKIAogICAgIHZvaWQgYXBwbHlQcm9wZXJ0eShDU1NQcm9wZXJ0eUlELCBD
U1NWYWx1ZSosIFNlbGVjdG9yQ2hlY2tlcjo6TGlua01hdGNoTWFzayA9IFNlbGVjdG9yQ2hlY2tl
cjo6TWF0Y2hEZWZhdWx0LCBjb25zdCBNYXRjaFJlc3VsdCogPSBudWxscHRyKTsKICAgICBSZWZQ
dHI8Q1NTVmFsdWU+IHJlc29sdmVkVmFyaWFibGVWYWx1ZShDU1NQcm9wZXJ0eUlELCBjb25zdCBD
U1NWYXJpYWJsZURlcGVuZGVudFZhbHVlJik7CkBAIC01NTksNyArNTU5LDcgQEAgcHJpdmF0ZToK
ICAgICB2b2lkIHN3ZWVwTWF0Y2hlZFByb3BlcnRpZXNDYWNoZSgpOwogCiAgICAgYm9vbCBjbGFz
c05hbWVzQWZmZWN0ZWRCeVJ1bGVzKGNvbnN0IFNwYWNlU3BsaXRTdHJpbmcmKSBjb25zdDsKLSAg
ICBib29sIHNoYXJpbmdDYW5kaWRhdGVIYXNJZGVudGljYWxTdHlsZUFmZmVjdGluZ0F0dHJpYnV0
ZXMoU3R5bGVkRWxlbWVudCopIGNvbnN0OworICAgIGJvb2wgc2hhcmluZ0NhbmRpZGF0ZUhhc0lk
ZW50aWNhbFN0eWxlQWZmZWN0aW5nQXR0cmlidXRlcyhTdHlsZWRFbGVtZW50JikgY29uc3Q7CiAK
ICAgICB1bnNpZ25lZCBtX21hdGNoZWRQcm9wZXJ0aWVzQ2FjaGVBZGRpdGlvbnNTaW5jZUxhc3RT
d2VlcDsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9tL05vZGUuY3BwIGIvU291cmNl
L1dlYkNvcmUvZG9tL05vZGUuY3BwCmluZGV4IDU0MDQ1MTc5NjM2MjY1ZTg1NmJlY2M4ZGEzNmQ4
ZWI5ZmMzYWVjZTYuLjZhNWMyYzBmN2MyMTFiNjZkYzE1ZDNiYTQ3MGY4ZTU5ODFhYjA1YWUgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9Ob2RlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9kb20vTm9kZS5jcHAKQEAgLTM1NywxNSArMzU3LDYgQEAgTm9kZSogTm9kZTo6dG9Ob2RlKCkK
ICAgICByZXR1cm4gdGhpczsKIH0KIAotSFRNTElucHV0RWxlbWVudCogTm9kZTo6dG9JbnB1dEVs
ZW1lbnQoKQotewotICAgIC8vIElmIG9uZSBvZiB0aGUgYmVsb3cgQVNTRVJUcyB0cmlnZ2VyLCB5
b3UgYXJlIGNhbGxpbmcgdGhpcyBmdW5jdGlvbgotICAgIC8vIGRpcmVjdGx5IG9yIGluZGlyZWN0
bHkgZnJvbSBhIGNvbnN0cnVjdG9yIG9yIGRlc3RydWN0b3Igb2YgdGhpcyBvYmplY3QuCi0gICAg
Ly8gRG9uJ3QgZG8gdGhpcyEKLSAgICBBU1NFUlQoIShpc0hUTUxFbGVtZW50KCkgJiYgaGFzVGFn
TmFtZShpbnB1dFRhZykpKTsKLSAgICByZXR1cm4gMDsKLX0KLQogU3RyaW5nIE5vZGU6Om5vZGVW
YWx1ZSgpIGNvbnN0CiB7CiAgICAgcmV0dXJuIFN0cmluZygpOwpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvZG9tL05vZGUuaCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9Ob2RlLmgKaW5kZXggNmEx
OTNhYTI2Mzg5MWUxMDQzNjg0OGM0NmMyYjU1OThhOGJjYjM3OC4uOWUxNTQ2N2E4N2NjZjFjYjhi
NjViMDAxNzhkZWE2NTVkY2VkZjI2ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZG9tL05v
ZGUuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20vTm9kZS5oCkBAIC01MTIsOCArNTEyLDYgQEAg
cHVibGljOgogICAgIFdFQkNPUkVfRVhQT1JUIHVuc2lnbmVkIHNob3J0IGNvbXBhcmVEb2N1bWVu
dFBvc2l0aW9uKE5vZGUqKTsKIAogICAgIHZpcnR1YWwgTm9kZSogdG9Ob2RlKCkgb3ZlcnJpZGU7
Ci0gICAgdmlydHVhbCBIVE1MSW5wdXRFbGVtZW50KiB0b0lucHV0RWxlbWVudCgpOwotICAgIGNv
bnN0IEhUTUxJbnB1dEVsZW1lbnQqIHRvSW5wdXRFbGVtZW50KCkgY29uc3QgeyByZXR1cm4gY29u
c3RfY2FzdDxOb2RlKj4odGhpcyktPnRvSW5wdXRFbGVtZW50KCk7IH0KIAogICAgIHZpcnR1YWwg
RXZlbnRUYXJnZXRJbnRlcmZhY2UgZXZlbnRUYXJnZXRJbnRlcmZhY2UoKSBjb25zdCBvdmVycmlk
ZTsKICAgICB2aXJ0dWFsIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIHNjcmlwdEV4ZWN1dGlvbkNv
bnRleHQoKSBjb25zdCBvdmVycmlkZSBmaW5hbDsgLy8gSW1wbGVtZW50ZWQgaW4gRG9jdW1lbnQu
aApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9UZXh0SXRlcmF0b3IuY3BwIGIv
U291cmNlL1dlYkNvcmUvZWRpdGluZy9UZXh0SXRlcmF0b3IuY3BwCmluZGV4IGI4NzBhM2EwYTAw
M2I5MjU4ZDBmMzI0NWZkNGFiM2YyYjcxZTJiZDcuLjY0MmFkMGU5YWRkMWRmNWQ4NGUwNzE5NjI2
MzZkMTQyOGFkYmNjOTcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvVGV4dEl0
ZXJhdG9yLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1RleHRJdGVyYXRvci5jcHAK
QEAgLTg1OCw3ICs4NTgsNyBAQCBzdGF0aWMgYm9vbCBzaG91bGRFbWl0TmV3bGluZUZvck5vZGUo
Tm9kZSogbm9kZSwgYm9vbCBlbWl0c09yaWdpbmFsVGV4dCkKICAgICBhdXRvKiByZW5kZXJlciA9
IG5vZGUtPnJlbmRlcmVyKCk7CiAgICAgaWYgKCEocmVuZGVyZXIgPyByZW5kZXJlci0+aXNCUigp
IDogbm9kZS0+aGFzVGFnTmFtZShiclRhZykpKQogICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAg
cmV0dXJuIGVtaXRzT3JpZ2luYWxUZXh0IHx8ICEobm9kZS0+aXNJblNoYWRvd1RyZWUoKSAmJiBu
b2RlLT5zaGFkb3dIb3N0KCktPnRvSW5wdXRFbGVtZW50KCkpOworICAgIHJldHVybiBlbWl0c09y
aWdpbmFsVGV4dCB8fCAhKG5vZGUtPmlzSW5TaGFkb3dUcmVlKCkgJiYgaXM8SFRNTElucHV0RWxl
bWVudD4oKm5vZGUtPnNoYWRvd0hvc3QoKSkpOwogfQogCiBzdGF0aWMgYm9vbCBoYXNIZWFkZXJU
YWcoSFRNTEVsZW1lbnQmIGVsZW1lbnQpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1s
L0hUTUxJbnB1dEVsZW1lbnQuaCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTElucHV0RWxlbWVu
dC5oCmluZGV4IGJiYmQzMzY4OGJkN2MxNDcyMTQ5OWYzYmJmZWEwN2YzMDk1NDcxOWEuLjUwNTQ5
ZjRiNjczYmVjYTU4NjdhZTgzMTZmOWVmY2Y3ZWRhZWU0NDQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL2h0bWwvSFRNTElucHV0RWxlbWVudC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwv
SFRNTElucHV0RWxlbWVudC5oCkBAIC02Niw4ICs2Niw2IEBAIHB1YmxpYzoKICAgICBzdGF0aWMg
UmVmPEhUTUxJbnB1dEVsZW1lbnQ+IGNyZWF0ZShjb25zdCBRdWFsaWZpZWROYW1lJiwgRG9jdW1l
bnQmLCBIVE1MRm9ybUVsZW1lbnQqLCBib29sIGNyZWF0ZWRCeVBhcnNlcik7CiAgICAgdmlydHVh
bCB+SFRNTElucHV0RWxlbWVudCgpOwogCi0gICAgdmlydHVhbCBIVE1MSW5wdXRFbGVtZW50KiB0
b0lucHV0RWxlbWVudCgpIG92ZXJyaWRlIGZpbmFsIHsgcmV0dXJuIHRoaXM7IH0KLQogICAgIFdF
QkNPUkVfRVhQT1JUIHZpcnR1YWwgYm9vbCBzaG91bGRBdXRvY29tcGxldGUoKSBjb25zdCBvdmVy
cmlkZSBmaW5hbDsKIAogICAgIC8vIEZvciBWYWxpZGl0eVN0YXRlCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9odG1sL1JhZGlvTm9kZUxpc3QuY3BwIGIvU291cmNlL1dlYkNvcmUvaHRtbC9S
YWRpb05vZGVMaXN0LmNwcAppbmRleCA1ZTQwMjVlY2MwOGQ1MzY5MzAzM2QzMDdmZDI1ZmRhMzI2
ZGU2MjQxLi4yODI1ZmYyZDc2YjEwZTYwNjdhMTdmZTc4ZTdiODkxYzlmOWNlYTdhIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL1JhZGlvTm9kZUxpc3QuY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL2h0bWwvUmFkaW9Ob2RlTGlzdC5jcHAKQEAgLTUwLDIwICs1MCwyMiBAQCBSYWRpb05v
ZGVMaXN0Ojp+UmFkaW9Ob2RlTGlzdCgpCiAgICAgb3duZXJOb2RlKCkubm9kZUxpc3RzKCktPnJl
bW92ZUNhY2hlV2l0aEF0b21pY05hbWUodGhpcywgbV9uYW1lKTsKIH0KIAotc3RhdGljIGlubGlu
ZSBIVE1MSW5wdXRFbGVtZW50KiB0b1JhZGlvQnV0dG9uSW5wdXRFbGVtZW50KE5vZGUqIG5vZGUp
CitzdGF0aWMgaW5saW5lIEhUTUxJbnB1dEVsZW1lbnQqIHRvUmFkaW9CdXR0b25JbnB1dEVsZW1l
bnQoTm9kZSYgbm9kZSkKIHsKLSAgICBBU1NFUlQobm9kZS0+aXNFbGVtZW50Tm9kZSgpKTsKLSAg
ICBIVE1MSW5wdXRFbGVtZW50KiBpbnB1dEVsZW1lbnQgPSBub2RlLT50b0lucHV0RWxlbWVudCgp
OwotICAgIGlmICghaW5wdXRFbGVtZW50IHx8ICFpbnB1dEVsZW1lbnQtPmlzUmFkaW9CdXR0b24o
KSB8fCBpbnB1dEVsZW1lbnQtPnZhbHVlKCkuaXNFbXB0eSgpKQotICAgICAgICByZXR1cm4gMDsK
LSAgICByZXR1cm4gaW5wdXRFbGVtZW50OworICAgIGlmICghaXM8SFRNTElucHV0RWxlbWVudD4o
bm9kZSkpCisgICAgICAgIHJldHVybiBudWxscHRyOworCisgICAgYXV0byYgaW5wdXRFbGVtZW50
ID0gZG93bmNhc3Q8SFRNTElucHV0RWxlbWVudD4obm9kZSk7CisgICAgaWYgKCFpbnB1dEVsZW1l
bnQuaXNSYWRpb0J1dHRvbigpIHx8IGlucHV0RWxlbWVudC52YWx1ZSgpLmlzRW1wdHkoKSkKKyAg
ICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgcmV0dXJuICZpbnB1dEVsZW1lbnQ7CiB9CiAKIFN0
cmluZyBSYWRpb05vZGVMaXN0Ojp2YWx1ZSgpIGNvbnN0CiB7Ci0gICAgZm9yICh1bnNpZ25lZCBp
ID0gMDsgaSA8IGxlbmd0aCgpOyArK2kpIHsKLSAgICAgICAgTm9kZSogbm9kZSA9IGl0ZW0oaSk7
Ci0gICAgICAgIGNvbnN0IEhUTUxJbnB1dEVsZW1lbnQqIGlucHV0RWxlbWVudCA9IHRvUmFkaW9C
dXR0b25JbnB1dEVsZW1lbnQobm9kZSk7CisgICAgYXV0byBsZW5ndGggPSB0aGlzLT5sZW5ndGgo
KTsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbGVuZ3RoOyArK2kpIHsKKyAgICAgICAg
YXV0byogaW5wdXRFbGVtZW50ID0gdG9SYWRpb0J1dHRvbklucHV0RWxlbWVudCgqaXRlbShpKSk7
CiAgICAgICAgIGlmICghaW5wdXRFbGVtZW50IHx8ICFpbnB1dEVsZW1lbnQtPmNoZWNrZWQoKSkK
ICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICByZXR1cm4gaW5wdXRFbGVtZW50LT52YWx1
ZSgpOwpAQCAtNzMsOSArNzUsOSBAQCBTdHJpbmcgUmFkaW9Ob2RlTGlzdDo6dmFsdWUoKSBjb25z
dAogCiB2b2lkIFJhZGlvTm9kZUxpc3Q6OnNldFZhbHVlKGNvbnN0IFN0cmluZyYgdmFsdWUpCiB7
Ci0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGxlbmd0aCgpOyArK2kpIHsKLSAgICAgICAg
Tm9kZSogbm9kZSA9IGl0ZW0oaSk7Ci0gICAgICAgIEhUTUxJbnB1dEVsZW1lbnQqIGlucHV0RWxl
bWVudCA9IHRvUmFkaW9CdXR0b25JbnB1dEVsZW1lbnQobm9kZSk7CisgICAgYXV0byBsZW5ndGgg
PSB0aGlzLT5sZW5ndGgoKTsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbGVuZ3RoOyAr
K2kpIHsKKyAgICAgICAgYXV0byogaW5wdXRFbGVtZW50ID0gdG9SYWRpb0J1dHRvbklucHV0RWxl
bWVudCgqaXRlbShpKSk7CiAgICAgICAgIGlmICghaW5wdXRFbGVtZW50IHx8IGlucHV0RWxlbWVu
dC0+dmFsdWUoKSAhPSB2YWx1ZSkKICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICBpbnB1
dEVsZW1lbnQtPnNldENoZWNrZWQodHJ1ZSk7CkBAIC0xMDQsMTAgKzEwNiw4IEBAIGJvb2wgUmFk
aW9Ob2RlTGlzdDo6ZWxlbWVudE1hdGNoZXMoRWxlbWVudCYgdGVzdEVsZW1lbnQpIGNvbnN0CiAg
ICAgaWYgKCFpczxIVE1MT2JqZWN0RWxlbWVudD4odGVzdEVsZW1lbnQpICYmICFpczxIVE1MRm9y
bUNvbnRyb2xFbGVtZW50Pih0ZXN0RWxlbWVudCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAot
ICAgIGlmIChIVE1MSW5wdXRFbGVtZW50KiBpbnB1dEVsZW1lbnQgPSB0ZXN0RWxlbWVudC50b0lu
cHV0RWxlbWVudCgpKSB7Ci0gICAgICAgIGlmIChpbnB1dEVsZW1lbnQtPmlzSW1hZ2VCdXR0b24o
KSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9CisgICAgaWYgKGlzPEhUTUxJbnB1
dEVsZW1lbnQ+KHRlc3RFbGVtZW50KSAmJiBkb3duY2FzdDxIVE1MSW5wdXRFbGVtZW50Pih0ZXN0
RWxlbWVudCkuaXNJbWFnZUJ1dHRvbigpKQorICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICBy
ZXR1cm4gY2hlY2tFbGVtZW50TWF0Y2hlc1JhZGlvTm9kZUxpc3RGaWx0ZXIodGVzdEVsZW1lbnQp
OwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9zaGFkb3cvU2xpZGVyVGh1bWJF
bGVtZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvc2hhZG93L1NsaWRlclRodW1iRWxlbWVu
dC5jcHAKaW5kZXggMmNhYzZmNGM4ODA4OTIyNjg2M2UzNWUxMmViZDk4NjEzZTU3M2Y2OC4uNzZj
Y2Y4YjE4YjMzMDVlYWU0YmI4MWUyMWM5NjRiNzhiYWFhNzVjMiAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvaHRtbC9zaGFkb3cvU2xpZGVyVGh1bWJFbGVtZW50LmNwcAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9odG1sL3NoYWRvdy9TbGlkZXJUaHVtYkVsZW1lbnQuY3BwCkBAIC01NSwyMCArNTUs
MjAgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiB1c2luZyBuYW1lc3BhY2UgSFRNTE5hbWVzOwog
Ci1pbmxpbmUgc3RhdGljIERlY2ltYWwgc2xpZGVyUG9zaXRpb24oSFRNTElucHV0RWxlbWVudCog
ZWxlbWVudCkKK2lubGluZSBzdGF0aWMgRGVjaW1hbCBzbGlkZXJQb3NpdGlvbihIVE1MSW5wdXRF
bGVtZW50JiBlbGVtZW50KQogewotICAgIGNvbnN0IFN0ZXBSYW5nZSBzdGVwUmFuZ2UoZWxlbWVu
dC0+Y3JlYXRlU3RlcFJhbmdlKFJlamVjdEFueSkpOwotICAgIGNvbnN0IERlY2ltYWwgb2xkVmFs
dWUgPSBwYXJzZVRvRGVjaW1hbEZvck51bWJlclR5cGUoZWxlbWVudC0+dmFsdWUoKSwgc3RlcFJh
bmdlLmRlZmF1bHRWYWx1ZSgpKTsKKyAgICBjb25zdCBTdGVwUmFuZ2Ugc3RlcFJhbmdlKGVsZW1l
bnQuY3JlYXRlU3RlcFJhbmdlKFJlamVjdEFueSkpOworICAgIGNvbnN0IERlY2ltYWwgb2xkVmFs
dWUgPSBwYXJzZVRvRGVjaW1hbEZvck51bWJlclR5cGUoZWxlbWVudC52YWx1ZSgpLCBzdGVwUmFu
Z2UuZGVmYXVsdFZhbHVlKCkpOwogICAgIHJldHVybiBzdGVwUmFuZ2UucHJvcG9ydGlvbkZyb21W
YWx1ZShzdGVwUmFuZ2UuY2xhbXBWYWx1ZShvbGRWYWx1ZSkpOwogfQogCi1pbmxpbmUgc3RhdGlj
IGJvb2wgaGFzVmVydGljYWxBcHBlYXJhbmNlKEhUTUxJbnB1dEVsZW1lbnQqIGlucHV0KQoraW5s
aW5lIHN0YXRpYyBib29sIGhhc1ZlcnRpY2FsQXBwZWFyYW5jZShIVE1MSW5wdXRFbGVtZW50JiBp
bnB1dCkKIHsKLSAgICBBU1NFUlQoaW5wdXQtPnJlbmRlcmVyKCkpOwotICAgIGNvbnN0IFJlbmRl
clN0eWxlJiBzbGlkZXJTdHlsZSA9IGlucHV0LT5yZW5kZXJlcigpLT5zdHlsZSgpOworICAgIEFT
U0VSVChpbnB1dC5yZW5kZXJlcigpKTsKKyAgICBjb25zdCBSZW5kZXJTdHlsZSYgc2xpZGVyU3R5
bGUgPSBpbnB1dC5yZW5kZXJlcigpLT5zdHlsZSgpOwogCiAjaWYgRU5BQkxFKFZJREVPKQotICAg
IGlmIChzbGlkZXJTdHlsZS5hcHBlYXJhbmNlKCkgPT0gTWVkaWFWb2x1bWVTbGlkZXJQYXJ0ICYm
IGlucHV0LT5yZW5kZXJlcigpLT50aGVtZSgpLnVzZXNWZXJ0aWNhbFZvbHVtZVNsaWRlcigpKQor
ICAgIGlmIChzbGlkZXJTdHlsZS5hcHBlYXJhbmNlKCkgPT0gTWVkaWFWb2x1bWVTbGlkZXJQYXJ0
ICYmIGlucHV0LnJlbmRlcmVyKCktPnRoZW1lKCkudXNlc1ZlcnRpY2FsVm9sdW1lU2xpZGVyKCkp
CiAgICAgICAgIHJldHVybiB0cnVlOwogI2VuZGlmCiAKQEAgLTEyNiwxMSArMTI2LDEyIEBAIHBy
aXZhdGU6CiAKIHZvaWQgUmVuZGVyU2xpZGVyQ29udGFpbmVyOjpjb21wdXRlTG9naWNhbEhlaWdo
dChMYXlvdXRVbml0IGxvZ2ljYWxIZWlnaHQsIExheW91dFVuaXQgbG9naWNhbFRvcCwgTG9naWNh
bEV4dGVudENvbXB1dGVkVmFsdWVzJiBjb21wdXRlZFZhbHVlcykgY29uc3QKIHsKLSAgICBIVE1M
SW5wdXRFbGVtZW50KiBpbnB1dCA9IGVsZW1lbnQoKS0+c2hhZG93SG9zdCgpLT50b0lucHV0RWxl
bWVudCgpOworICAgIEFTU0VSVChlbGVtZW50KCktPnNoYWRvd0hvc3QoKSk7CisgICAgYXV0byYg
aW5wdXQgPSBkb3duY2FzdDxIVE1MSW5wdXRFbGVtZW50PigqZWxlbWVudCgpLT5zaGFkb3dIb3N0
KCkpOwogICAgIGJvb2wgaXNWZXJ0aWNhbCA9IGhhc1ZlcnRpY2FsQXBwZWFyYW5jZShpbnB1dCk7
CiAKICNpZiBFTkFCTEUoREFUQUxJU1RfRUxFTUVOVCkKLSAgICBpZiAoaW5wdXQtPnJlbmRlcmVy
KCktPmlzU2xpZGVyKCkgJiYgIWlzVmVydGljYWwgJiYgaW5wdXQtPmxpc3QoKSkgeworICAgIGlm
IChpbnB1dC5yZW5kZXJlcigpLT5pc1NsaWRlcigpICYmICFpc1ZlcnRpY2FsICYmIGlucHV0Lmxp
c3QoKSkgewogICAgICAgICBpbnQgb2Zmc2V0RnJvbUNlbnRlciA9IHRoZW1lKCkuc2xpZGVyVGlj
a09mZnNldEZyb21UcmFja0NlbnRlcigpOwogICAgICAgICBMYXlvdXRVbml0IHRyYWNrSGVpZ2h0
ID0gMDsKICAgICAgICAgaWYgKG9mZnNldEZyb21DZW50ZXIgPCAwKQpAQCAtMTU0LDcgKzE1NSw4
IEBAIHZvaWQgUmVuZGVyU2xpZGVyQ29udGFpbmVyOjpjb21wdXRlTG9naWNhbEhlaWdodChMYXlv
dXRVbml0IGxvZ2ljYWxIZWlnaHQsIExheW91CiAKIHZvaWQgUmVuZGVyU2xpZGVyQ29udGFpbmVy
OjpsYXlvdXQoKQogewotICAgIEhUTUxJbnB1dEVsZW1lbnQqIGlucHV0ID0gZWxlbWVudCgpLT5z
aGFkb3dIb3N0KCktPnRvSW5wdXRFbGVtZW50KCk7CisgICAgQVNTRVJUKGVsZW1lbnQoKS0+c2hh
ZG93SG9zdCgpKTsKKyAgICBhdXRvJiBpbnB1dCA9IGRvd25jYXN0PEhUTUxJbnB1dEVsZW1lbnQ+
KCplbGVtZW50KCktPnNoYWRvd0hvc3QoKSk7CiAgICAgYm9vbCBpc1ZlcnRpY2FsID0gaGFzVmVy
dGljYWxBcHBlYXJhbmNlKGlucHV0KTsKICAgICBzdHlsZSgpLnNldEZsZXhEaXJlY3Rpb24oaXNW
ZXJ0aWNhbCA/IEZsb3dDb2x1bW4gOiBGbG93Um93KTsKICAgICBUZXh0RGlyZWN0aW9uIG9sZFRl
eHREaXJlY3Rpb24gPSBzdHlsZSgpLmRpcmVjdGlvbigpOwpAQCAtMTY1LDggKzE2Nyw4IEBAIHZv
aWQgUmVuZGVyU2xpZGVyQ29udGFpbmVyOjpsYXlvdXQoKQogICAgICAgICBzdHlsZSgpLnNldERp
cmVjdGlvbihMVFIpOwogICAgIH0KIAotICAgIFJlbmRlckJveCogdGh1bWIgPSBpbnB1dC0+c2xp
ZGVyVGh1bWJFbGVtZW50KCkgPyBpbnB1dC0+c2xpZGVyVGh1bWJFbGVtZW50KCktPnJlbmRlckJv
eCgpIDogMDsKLSAgICBSZW5kZXJCb3gqIHRyYWNrID0gaW5wdXQtPnNsaWRlclRyYWNrRWxlbWVu
dCgpID8gaW5wdXQtPnNsaWRlclRyYWNrRWxlbWVudCgpLT5yZW5kZXJCb3goKSA6IDA7CisgICAg
UmVuZGVyQm94KiB0aHVtYiA9IGlucHV0LnNsaWRlclRodW1iRWxlbWVudCgpID8gaW5wdXQuc2xp
ZGVyVGh1bWJFbGVtZW50KCktPnJlbmRlckJveCgpIDogbnVsbHB0cjsKKyAgICBSZW5kZXJCb3gq
IHRyYWNrID0gaW5wdXQuc2xpZGVyVHJhY2tFbGVtZW50KCkgPyBpbnB1dC5zbGlkZXJUcmFja0Vs
ZW1lbnQoKS0+cmVuZGVyQm94KCkgOiBudWxscHRyOwogICAgIC8vIEZvcmNlIGEgbGF5b3V0IHRv
IHJlc2V0IHRoZSBwb3NpdGlvbiBvZiB0aGUgdGh1bWIgc28gdGhlIGNvZGUgYmVsb3cgZG9lc24n
dCBtb3ZlIHRoZSB0aHVtYiB0byB0aGUgd3JvbmcgcGxhY2UuCiAgICAgLy8gRklYTUU6IE1ha2Ug
YSBjdXN0b20gUmVuZGVyIGNsYXNzIGZvciB0aGUgdHJhY2sgYW5kIG1vdmUgdGhlIHRodW1iIHBv
c2l0aW9uaW5nIGNvZGUgdGhlcmUuCiAgICAgaWYgKHRyYWNrKQpAQCAtMjYxLDcgKzI2Myw3IEBA
IHZvaWQgU2xpZGVyVGh1bWJFbGVtZW50OjpzZXRQb3NpdGlvbkZyb21Qb2ludChjb25zdCBMYXlv
dXRQb2ludCYgYWJzb2x1dGVQb2ludCkKICAgICBSZW5kZXJCb3gmIGlucHV0UmVuZGVyZXIgPSBk
b3duY2FzdDxSZW5kZXJCb3g+KCppbnB1dC0+cmVuZGVyZXIoKSk7CiAgICAgUmVuZGVyQm94JiB0
cmFja1JlbmRlcmVyID0gKnRyYWNrRWxlbWVudC0+cmVuZGVyQm94KCk7CiAKLSAgICBib29sIGlz
VmVydGljYWwgPSBoYXNWZXJ0aWNhbEFwcGVhcmFuY2UoaW5wdXQuZ2V0KCkpOworICAgIGJvb2wg
aXNWZXJ0aWNhbCA9IGhhc1ZlcnRpY2FsQXBwZWFyYW5jZSgqaW5wdXQpOwogICAgIGJvb2wgaXNM
ZWZ0VG9SaWdodERpcmVjdGlvbiA9IHJlbmRlckJveCgpLT5zdHlsZSgpLmlzTGVmdFRvUmlnaHRE
aXJlY3Rpb24oKTsKICAgICAKICAgICBMYXlvdXRQb2ludCBvZmZzZXQoaW5wdXRSZW5kZXJlci5h
YnNvbHV0ZVRvTG9jYWwoYWJzb2x1dGVQb2ludCwgVXNlVHJhbnNmb3JtcykpOwpAQCAtNTY5LDgg
KzU3MSw3IEBAIEhUTUxJbnB1dEVsZW1lbnQqIFNsaWRlclRodW1iRWxlbWVudDo6aG9zdElucHV0
KCkgY29uc3QKIHsKICAgICAvLyBPbmx5IEhUTUxJbnB1dEVsZW1lbnQgY3JlYXRlcyBTbGlkZXJU
aHVtYkVsZW1lbnQgaW5zdGFuY2VzIGFzIGl0cyBzaGFkb3cgbm9kZXMuCiAgICAgLy8gU28sIHNo
YWRvd0hvc3QoKSBtdXN0IGJlIGFuIEhUTUxJbnB1dEVsZW1lbnQuCi0gICAgRWxlbWVudCogaG9z
dCA9IHNoYWRvd0hvc3QoKTsKLSAgICByZXR1cm4gaG9zdCA/IGhvc3QtPnRvSW5wdXRFbGVtZW50
KCkgOiAwOworICAgIHJldHVybiBkb3duY2FzdDxIVE1MSW5wdXRFbGVtZW50PihzaGFkb3dIb3N0
KCkpOwogfQogCiBzdGF0aWMgY29uc3QgQXRvbWljU3RyaW5nJiBzbGlkZXJUaHVtYlNoYWRvd1Bz
ZXVkb0lkKCkKQEAgLTY0NCwxMyArNjQ1LDE0IEBAIGNvbnN0IEF0b21pY1N0cmluZyYgU2xpZGVy
Q29udGFpbmVyRWxlbWVudDo6c2hhZG93UHNldWRvSWQoKSBjb25zdAogICAgIERFUFJFQ0FURURf
REVGSU5FX1NUQVRJQ19MT0NBTChjb25zdCBBdG9taWNTdHJpbmcsIG1lZGlhU2xpZGVyQ29udGFp
bmVyLCAoIi13ZWJraXQtbWVkaWEtc2xpZGVyLWNvbnRhaW5lciIsIEF0b21pY1N0cmluZzo6Q29u
c3RydWN0RnJvbUxpdGVyYWwpKTsKICAgICBERVBSRUNBVEVEX0RFRklORV9TVEFUSUNfTE9DQUwo
Y29uc3QgQXRvbWljU3RyaW5nLCBzbGlkZXJDb250YWluZXIsICgiLXdlYmtpdC1zbGlkZXItY29u
dGFpbmVyIiwgQXRvbWljU3RyaW5nOjpDb25zdHJ1Y3RGcm9tTGl0ZXJhbCkpOwogCi0gICAgSFRN
TElucHV0RWxlbWVudCogaW5wdXQgPSBzaGFkb3dIb3N0KCktPnRvSW5wdXRFbGVtZW50KCk7Ci0g
ICAgaWYgKCFpbnB1dCkKKyAgICBpZiAoIWlzPEhUTUxJbnB1dEVsZW1lbnQ+KCpzaGFkb3dIb3N0
KCkpKQogICAgICAgICByZXR1cm4gc2xpZGVyQ29udGFpbmVyOwotICAgIGlmICghaW5wdXQtPnJl
bmRlcmVyKCkpCisKKyAgICBhdXRvJiBpbnB1dCA9IGRvd25jYXN0PEhUTUxJbnB1dEVsZW1lbnQ+
KCpzaGFkb3dIb3N0KCkpOworICAgIGlmICghaW5wdXQucmVuZGVyZXIoKSkKICAgICAgICAgcmV0
dXJuIGVtcHR5QXRvbTsKIAotICAgIGNvbnN0IFJlbmRlclN0eWxlJiBzbGlkZXJTdHlsZSA9IGlu
cHV0LT5yZW5kZXJlcigpLT5zdHlsZSgpOworICAgIGNvbnN0IFJlbmRlclN0eWxlJiBzbGlkZXJT
dHlsZSA9IGlucHV0LnJlbmRlcmVyKCktPnN0eWxlKCk7CiAgICAgc3dpdGNoIChzbGlkZXJTdHls
ZS5hcHBlYXJhbmNlKCkpIHsKICAgICBjYXNlIE1lZGlhU2xpZGVyUGFydDoKICAgICBjYXNlIE1l
ZGlhU2xpZGVyVGh1bWJQYXJ0OgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvbG9hZGVyL0Zy
YW1lTG9hZGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9GcmFtZUxvYWRlci5jcHAKaW5k
ZXggM2ZlZjExMTU2Y2QyMDIzZDIzZDYzYzFhZjAxNjcwZjU3NTVjNTI2Ny4uNzA3OTU3Yjc2YTk1
M2EyM2QwNDY1MDEwYTRlYjc4MTAyNDhmZWRlOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
bG9hZGVyL0ZyYW1lTG9hZGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvRnJhbWVM
b2FkZXIuY3BwCkBAIC00MjEsOSArNDIxLDkgQEAgdm9pZCBGcmFtZUxvYWRlcjo6c3RvcExvYWRp
bmcoVW5sb2FkRXZlbnRQb2xpY3kgdW5sb2FkRXZlbnRQb2xpY3kpCiAgICAgaWYgKHVubG9hZEV2
ZW50UG9saWN5ICE9IFVubG9hZEV2ZW50UG9saWN5Tm9uZSkgewogICAgICAgICBpZiAobV9mcmFt
ZS5kb2N1bWVudCgpKSB7CiAgICAgICAgICAgICBpZiAobV9kaWRDYWxsSW1wbGljaXRDbG9zZSAm
JiAhbV93YXNVbmxvYWRFdmVudEVtaXR0ZWQpIHsKLSAgICAgICAgICAgICAgICBFbGVtZW50KiBj
dXJyZW50Rm9jdXNlZEVsZW1lbnQgPSBtX2ZyYW1lLmRvY3VtZW50KCktPmZvY3VzZWRFbGVtZW50
KCk7Ci0gICAgICAgICAgICAgICAgaWYgKGN1cnJlbnRGb2N1c2VkRWxlbWVudCAmJiBjdXJyZW50
Rm9jdXNlZEVsZW1lbnQtPnRvSW5wdXRFbGVtZW50KCkpCi0gICAgICAgICAgICAgICAgICAgIGN1
cnJlbnRGb2N1c2VkRWxlbWVudC0+dG9JbnB1dEVsZW1lbnQoKS0+ZW5kRWRpdGluZygpOworICAg
ICAgICAgICAgICAgIGF1dG8qIGN1cnJlbnRGb2N1c2VkRWxlbWVudCA9IG1fZnJhbWUuZG9jdW1l
bnQoKS0+Zm9jdXNlZEVsZW1lbnQoKTsKKyAgICAgICAgICAgICAgICBpZiAoaXM8SFRNTElucHV0
RWxlbWVudD4oY3VycmVudEZvY3VzZWRFbGVtZW50KSkKKyAgICAgICAgICAgICAgICAgICAgZG93
bmNhc3Q8SFRNTElucHV0RWxlbWVudD4oKmN1cnJlbnRGb2N1c2VkRWxlbWVudCkuZW5kRWRpdGlu
ZygpOwogICAgICAgICAgICAgICAgIGlmIChtX3BhZ2VEaXNtaXNzYWxFdmVudEJlaW5nRGlzcGF0
Y2hlZCA9PSBQYWdlRGlzbWlzc2FsVHlwZTo6Tm9uZSkgewogICAgICAgICAgICAgICAgICAgICBp
ZiAodW5sb2FkRXZlbnRQb2xpY3kgPT0gVW5sb2FkRXZlbnRQb2xpY3lVbmxvYWRBbmRQYWdlSGlk
ZSkgewogICAgICAgICAgICAgICAgICAgICAgICAgbV9wYWdlRGlzbWlzc2FsRXZlbnRCZWluZ0Rp
c3BhdGNoZWQgPSBQYWdlRGlzbWlzc2FsVHlwZTo6UGFnZUhpZGU7CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9wYWdlL0RyYWdDb250cm9sbGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2Uv
RHJhZ0NvbnRyb2xsZXIuY3BwCmluZGV4IDJjNzZmNjNmZTExNWU5NmNmNWRmM2IzMDk3YzJhZjNj
N2VhODg0ODcuLjA1MGI2Mjg5NWFlYTczNjQ5ZDJhZTQ2NGU1OWZjNjgzZjFhNmI5ZDAgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRHJhZ0NvbnRyb2xsZXIuY3BwCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3BhZ2UvRHJhZ0NvbnRyb2xsZXIuY3BwCkBAIC0yODEsMTcgKzI4MSwyMCBAQCBE
cmFnT3BlcmF0aW9uIERyYWdDb250cm9sbGVyOjpkcmFnRW50ZXJlZE9yVXBkYXRlZChEcmFnRGF0
YSYgZHJhZ0RhdGEpCiAgICAgcmV0dXJuIGRyYWdPcGVyYXRpb247CiB9CiAKLXN0YXRpYyBIVE1M
SW5wdXRFbGVtZW50KiBhc0ZpbGVJbnB1dChOb2RlKiBub2RlKQorc3RhdGljIEhUTUxJbnB1dEVs
ZW1lbnQqIGFzRmlsZUlucHV0KE5vZGUmIG5vZGUpCiB7Ci0gICAgQVNTRVJUKG5vZGUpOworICAg
IGlmICghaXM8SFRNTElucHV0RWxlbWVudD4obm9kZSkpCisgICAgICAgIHJldHVybiBudWxscHRy
OwogCi0gICAgSFRNTElucHV0RWxlbWVudCogaW5wdXRFbGVtZW50ID0gbm9kZS0+dG9JbnB1dEVs
ZW1lbnQoKTsKKyAgICBhdXRvKiBpbnB1dEVsZW1lbnQgPSAmZG93bmNhc3Q8SFRNTElucHV0RWxl
bWVudD4obm9kZSk7CiAKICAgICAvLyBJZiB0aGlzIGlzIGEgYnV0dG9uIGluc2lkZSBvZiB0aGUg
YSBmaWxlIGlucHV0LCBtb3ZlIHVwIHRvIHRoZSBmaWxlIGlucHV0LgotICAgIGlmIChpbnB1dEVs
ZW1lbnQgJiYgaW5wdXRFbGVtZW50LT5pc1RleHRCdXR0b24oKSAmJiBpczxTaGFkb3dSb290Pihp
bnB1dEVsZW1lbnQtPnRyZWVTY29wZSgpLnJvb3ROb2RlKCkpKQotICAgICAgICBpbnB1dEVsZW1l
bnQgPSBkb3duY2FzdDxTaGFkb3dSb290PihpbnB1dEVsZW1lbnQtPnRyZWVTY29wZSgpLnJvb3RO
b2RlKCkpLmhvc3QoKS0+dG9JbnB1dEVsZW1lbnQoKTsKKyAgICBpZiAoaW5wdXRFbGVtZW50LT5p
c1RleHRCdXR0b24oKSAmJiBpczxTaGFkb3dSb290PihpbnB1dEVsZW1lbnQtPnRyZWVTY29wZSgp
LnJvb3ROb2RlKCkpKSB7CisgICAgICAgIGF1dG8mIGhvc3QgPSAqZG93bmNhc3Q8U2hhZG93Um9v
dD4oaW5wdXRFbGVtZW50LT50cmVlU2NvcGUoKS5yb290Tm9kZSgpKS5ob3N0KCk7CisgICAgICAg
IGlucHV0RWxlbWVudCA9IGlzPEhUTUxJbnB1dEVsZW1lbnQ+KGhvc3QpID8gJmRvd25jYXN0PEhU
TUxJbnB1dEVsZW1lbnQ+KGhvc3QpIDogbnVsbHB0cjsKKyAgICB9CiAKLSAgICByZXR1cm4gaW5w
dXRFbGVtZW50ICYmIGlucHV0RWxlbWVudC0+aXNGaWxlVXBsb2FkKCkgPyBpbnB1dEVsZW1lbnQg
OiAwOworICAgIHJldHVybiBpbnB1dEVsZW1lbnQgJiYgaW5wdXRFbGVtZW50LT5pc0ZpbGVVcGxv
YWQoKSA/IGlucHV0RWxlbWVudCA6IG51bGxwdHI7CiB9CiAKIC8vIFRoaXMgY2FuIHJldHVybiBu
dWxsIGlmIGFuIGVtcHR5IGRvY3VtZW50IGlzIGxvYWRlZC4KQEAgLTM1NSw3ICszNTgsNyBAQCBi
b29sIERyYWdDb250cm9sbGVyOjp0cnlEb2N1bWVudERyYWcoRHJhZ0RhdGEmIGRyYWdEYXRhLCBE
cmFnRGVzdGluYXRpb25BY3Rpb24gYQogICAgICAgICBpZiAoIWVsZW1lbnQpCiAgICAgICAgICAg
ICByZXR1cm4gZmFsc2U7CiAgICAgICAgIAotICAgICAgICBIVE1MSW5wdXRFbGVtZW50KiBlbGVt
ZW50QXNGaWxlSW5wdXQgPSBhc0ZpbGVJbnB1dChlbGVtZW50KTsKKyAgICAgICAgSFRNTElucHV0
RWxlbWVudCogZWxlbWVudEFzRmlsZUlucHV0ID0gYXNGaWxlSW5wdXQoKmVsZW1lbnQpOwogICAg
ICAgICBpZiAobV9maWxlSW5wdXRFbGVtZW50VW5kZXJNb3VzZSAhPSBlbGVtZW50QXNGaWxlSW5w
dXQpIHsKICAgICAgICAgICAgIGlmIChtX2ZpbGVJbnB1dEVsZW1lbnRVbmRlck1vdXNlKQogICAg
ICAgICAgICAgICAgIG1fZmlsZUlucHV0RWxlbWVudFVuZGVyTW91c2UtPnNldENhblJlY2VpdmVE
cm9wcGVkRmlsZXMoZmFsc2UpOwpAQCAtNTY1LDcgKzU2OCw3IEBAIGJvb2wgRHJhZ0NvbnRyb2xs
ZXI6OmNhblByb2Nlc3NEcmFnKERyYWdEYXRhJiBkcmFnRGF0YSkKICAgICBpZiAoIXJlc3VsdC5p
bm5lck5vblNoYXJlZE5vZGUoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgaWYgKGRy
YWdEYXRhLmNvbnRhaW5zRmlsZXMoKSAmJiBhc0ZpbGVJbnB1dChyZXN1bHQuaW5uZXJOb25TaGFy
ZWROb2RlKCkpKQorICAgIGlmIChkcmFnRGF0YS5jb250YWluc0ZpbGVzKCkgJiYgYXNGaWxlSW5w
dXQoKnJlc3VsdC5pbm5lck5vblNoYXJlZE5vZGUoKSkpCiAgICAgICAgIHJldHVybiB0cnVlOwog
CiAgICAgaWYgKGlzPEhUTUxQbHVnSW5FbGVtZW50PigqcmVzdWx0LmlubmVyTm9uU2hhcmVkTm9k
ZSgpKSkgewpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJ1dHRv
bi5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQnV0dG9uLmNwcAppbmRleCA3
YTNlYWE5ZWFiMmNjNTI1YjE4MWQ0OGNjNjBhZmY0YTRiYjVlNzgxLi5kMWQwZDkxZjNmZDAzYTFj
YjYzODQ1Yzg2YTEzMmRjYjhiN2FjZjhiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvUmVuZGVyQnV0dG9uLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVu
ZGVyQnV0dG9uLmNwcApAQCAtNjEsNyArNjEsNyBAQCBib29sIFJlbmRlckJ1dHRvbjo6Y2FuQmVT
ZWxlY3Rpb25MZWFmKCkgY29uc3QKIAogYm9vbCBSZW5kZXJCdXR0b246Omhhc0xpbmVJZkVtcHR5
KCkgY29uc3QKIHsKLSAgICByZXR1cm4gZm9ybUNvbnRyb2xFbGVtZW50KCkudG9JbnB1dEVsZW1l
bnQoKTsKKyAgICByZXR1cm4gaXM8SFRNTElucHV0RWxlbWVudD4oZm9ybUNvbnRyb2xFbGVtZW50
KCkpOwogfQogCiB2b2lkIFJlbmRlckJ1dHRvbjo6YWRkQ2hpbGQoUmVuZGVyT2JqZWN0KiBuZXdD
aGlsZCwgUmVuZGVyT2JqZWN0KiBiZWZvcmVDaGlsZCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9SZW5kZXJUaGVtZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVyVGhlbWUuY3BwCmluZGV4IDU5NjE3NDZlNWNiYmM5ODhkM2FhYTAyNWM2ZGE4NjMxMTQ3
M2U5NGIuLjFhYWYzNjkwZWU5YjdkZjE3N2MxMDcxN2JmOTE4ZmUyMzE1OTgwOWEgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUaGVtZS5jcHAKKysrIGIvU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRoZW1lLmNwcApAQCAtNzg1LDI2ICs3ODUsMTIgQEAg
Ym9vbCBSZW5kZXJUaGVtZTo6aXNBY3RpdmUoY29uc3QgUmVuZGVyT2JqZWN0JiBvKSBjb25zdAog
CiBib29sIFJlbmRlclRoZW1lOjppc0NoZWNrZWQoY29uc3QgUmVuZGVyT2JqZWN0JiBvKSBjb25z
dAogewotICAgIGlmICghby5ub2RlKCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIEhU
TUxJbnB1dEVsZW1lbnQqIGlucHV0RWxlbWVudCA9IG8ubm9kZSgpLT50b0lucHV0RWxlbWVudCgp
OwotICAgIGlmICghaW5wdXRFbGVtZW50KQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBy
ZXR1cm4gaW5wdXRFbGVtZW50LT5zaG91bGRBcHBlYXJDaGVja2VkKCk7CisgICAgcmV0dXJuIGlz
PEhUTUxJbnB1dEVsZW1lbnQ+KG8ubm9kZSgpKSAmJiBkb3duY2FzdDxIVE1MSW5wdXRFbGVtZW50
Pigqby5ub2RlKCkpLnNob3VsZEFwcGVhckNoZWNrZWQoKTsKIH0KIAogYm9vbCBSZW5kZXJUaGVt
ZTo6aXNJbmRldGVybWluYXRlKGNvbnN0IFJlbmRlck9iamVjdCYgbykgY29uc3QKIHsKLSAgICBp
ZiAoIW8ubm9kZSgpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBIVE1MSW5wdXRFbGVt
ZW50KiBpbnB1dEVsZW1lbnQgPSBvLm5vZGUoKS0+dG9JbnB1dEVsZW1lbnQoKTsKLSAgICBpZiAo
IWlucHV0RWxlbWVudCkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgcmV0dXJuIGlucHV0
RWxlbWVudC0+c2hvdWxkQXBwZWFySW5kZXRlcm1pbmF0ZSgpOworICAgIHJldHVybiBpczxIVE1M
SW5wdXRFbGVtZW50PihvLm5vZGUoKSkgJiYgZG93bmNhc3Q8SFRNTElucHV0RWxlbWVudD4oKm8u
bm9kZSgpKS5zaG91bGRBcHBlYXJJbmRldGVybWluYXRlKCk7CiB9CiAKIGJvb2wgUmVuZGVyVGhl
bWU6OmlzRW5hYmxlZChjb25zdCBSZW5kZXJPYmplY3QmIHJlbmRlcmVyKSBjb25zdApAQCAtOTkz
LDIwICs5NzksMTYgQEAgTGF5b3V0VW5pdCBSZW5kZXJUaGVtZTo6c2xpZGVyVGlja1NuYXBwaW5n
VGhyZXNob2xkKCkgY29uc3QKIAogdm9pZCBSZW5kZXJUaGVtZTo6cGFpbnRTbGlkZXJUaWNrcyhj
b25zdCBSZW5kZXJPYmplY3QmIG8sIGNvbnN0IFBhaW50SW5mbyYgcGFpbnRJbmZvLCBjb25zdCBJ
bnRSZWN0JiByZWN0KQogewotICAgIE5vZGUqIG5vZGUgPSBvLm5vZGUoKTsKLSAgICBpZiAoIW5v
ZGUpCi0gICAgICAgIHJldHVybjsKLQotICAgIEhUTUxJbnB1dEVsZW1lbnQqIGlucHV0ID0gbm9k
ZS0+dG9JbnB1dEVsZW1lbnQoKTsKLSAgICBpZiAoIWlucHV0KQorICAgIGlmICghaXM8SFRNTElu
cHV0RWxlbWVudD4oby5ub2RlKCkpKQogICAgICAgICByZXR1cm47CiAKLSAgICBIVE1MRGF0YUxp
c3RFbGVtZW50KiBkYXRhTGlzdCA9IGRvd25jYXN0PEhUTUxEYXRhTGlzdEVsZW1lbnQ+KGlucHV0
LT5saXN0KCkpOworICAgIGF1dG8mIGlucHV0ID0gZG93bmNhc3Q8SFRNTElucHV0RWxlbWVudD4o
Km8ubm9kZSgpKTsKKyAgICBhdXRvKiBkYXRhTGlzdCA9IGRvd25jYXN0PEhUTUxEYXRhTGlzdEVs
ZW1lbnQ+KGlucHV0Lmxpc3QoKSk7CiAgICAgaWYgKCFkYXRhTGlzdCkKICAgICAgICAgcmV0dXJu
OwogCi0gICAgZG91YmxlIG1pbiA9IGlucHV0LT5taW5pbXVtKCk7Ci0gICAgZG91YmxlIG1heCA9
IGlucHV0LT5tYXhpbXVtKCk7CisgICAgZG91YmxlIG1pbiA9IGlucHV0Lm1pbmltdW0oKTsKKyAg
ICBkb3VibGUgbWF4ID0gaW5wdXQubWF4aW11bSgpOwogICAgIENvbnRyb2xQYXJ0IHBhcnQgPSBv
LnN0eWxlKCkuYXBwZWFyYW5jZSgpOwogICAgIC8vIFdlIGRvbid0IHN1cHBvcnQgdGlja3Mgb24g
YWx0ZXJuYXRlIHNsaWRlcnMgbGlrZSBNZWRpYVZvbHVtZVNsaWRlcnMuCiAgICAgaWYgKHBhcnQg
IT0gIFNsaWRlckhvcml6b250YWxQYXJ0ICYmIHBhcnQgIT0gU2xpZGVyVmVydGljYWxQYXJ0KQpA
QCAtMTAxNCw3ICs5OTYsNyBAQCB2b2lkIFJlbmRlclRoZW1lOjpwYWludFNsaWRlclRpY2tzKGNv
bnN0IFJlbmRlck9iamVjdCYgbywgY29uc3QgUGFpbnRJbmZvJiBwYWludAogICAgIGJvb2wgaXNI
b3Jpem9udGFsID0gcGFydCA9PSAgU2xpZGVySG9yaXpvbnRhbFBhcnQ7CiAKICAgICBJbnRTaXpl
IHRodW1iU2l6ZTsKLSAgICBjb25zdCBSZW5kZXJPYmplY3QqIHRodW1iUmVuZGVyZXIgPSBpbnB1
dC0+c2xpZGVyVGh1bWJFbGVtZW50KCktPnJlbmRlcmVyKCk7CisgICAgY29uc3QgUmVuZGVyT2Jq
ZWN0KiB0aHVtYlJlbmRlcmVyID0gaW5wdXQuc2xpZGVyVGh1bWJFbGVtZW50KCktPnJlbmRlcmVy
KCk7CiAgICAgaWYgKHRodW1iUmVuZGVyZXIpIHsKICAgICAgICAgY29uc3QgUmVuZGVyU3R5bGUm
IHRodW1iU3R5bGUgPSB0aHVtYlJlbmRlcmVyLT5zdHlsZSgpOwogICAgICAgICBpbnQgdGh1bWJX
aWR0aCA9IHRodW1iU3R5bGUud2lkdGgoKS5pbnRWYWx1ZSgpOwpAQCAtMTAyOSw3ICsxMDExLDcg
QEAgdm9pZCBSZW5kZXJUaGVtZTo6cGFpbnRTbGlkZXJUaWNrcyhjb25zdCBSZW5kZXJPYmplY3Qm
IG8sIGNvbnN0IFBhaW50SW5mbyYgcGFpbnQKICAgICBpbnQgdGlja1JlZ2lvblNpZGVNYXJnaW4g
PSAwOwogICAgIGludCB0aWNrUmVnaW9uV2lkdGggPSAwOwogICAgIEludFJlY3QgdHJhY2tCb3Vu
ZHM7Ci0gICAgUmVuZGVyT2JqZWN0KiB0cmFja1JlbmRlcmVyID0gaW5wdXQtPnNsaWRlclRyYWNr
RWxlbWVudCgpLT5yZW5kZXJlcigpOworICAgIFJlbmRlck9iamVjdCogdHJhY2tSZW5kZXJlciA9
IGlucHV0LnNsaWRlclRyYWNrRWxlbWVudCgpLT5yZW5kZXJlcigpOwogICAgIC8vIFdlIGNhbiBp
Z25vcmluZyB0cmFuc2Zvcm1zIGJlY2F1c2UgdHJhbnNmb3JtIGlzIGhhbmRsZWQgYnkgdGhlIGdy
YXBoaWNzIGNvbnRleHQuCiAgICAgaWYgKHRyYWNrUmVuZGVyZXIpCiAgICAgICAgIHRyYWNrQm91
bmRzID0gdHJhY2tSZW5kZXJlci0+YWJzb2x1dGVCb3VuZGluZ0JveFJlY3RJZ25vcmluZ1RyYW5z
Zm9ybXMoKTsKQEAgLTEwNTksOSArMTA0MSw5IEBAIHZvaWQgUmVuZGVyVGhlbWU6OnBhaW50U2xp
ZGVyVGlja3MoY29uc3QgUmVuZGVyT2JqZWN0JiBvLCBjb25zdCBQYWludEluZm8mIHBhaW50CiAg
ICAgICAgIEFTU0VSVChpczxIVE1MT3B0aW9uRWxlbWVudD4oKm5vZGUpKTsKICAgICAgICAgSFRN
TE9wdGlvbkVsZW1lbnQmIG9wdGlvbkVsZW1lbnQgPSBkb3duY2FzdDxIVE1MT3B0aW9uRWxlbWVu
dD4oKm5vZGUpOwogICAgICAgICBTdHJpbmcgdmFsdWUgPSBvcHRpb25FbGVtZW50LnZhbHVlKCk7
Ci0gICAgICAgIGlmICghaW5wdXQtPmlzVmFsaWRWYWx1ZSh2YWx1ZSkpCisgICAgICAgIGlmICgh
aW5wdXQuaXNWYWxpZFZhbHVlKHZhbHVlKSkKICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAg
ICBkb3VibGUgcGFyc2VkVmFsdWUgPSBwYXJzZVRvRG91YmxlRm9yTnVtYmVyVHlwZShpbnB1dC0+
c2FuaXRpemVWYWx1ZSh2YWx1ZSkpOworICAgICAgICBkb3VibGUgcGFyc2VkVmFsdWUgPSBwYXJz
ZVRvRG91YmxlRm9yTnVtYmVyVHlwZShpbnB1dC5zYW5pdGl6ZVZhbHVlKHZhbHVlKSk7CiAgICAg
ICAgIGRvdWJsZSB0aWNrRnJhY3Rpb24gPSAocGFyc2VkVmFsdWUgLSBtaW4pIC8gKG1heCAtIG1p
bik7CiAgICAgICAgIGRvdWJsZSB0aWNrUmF0aW8gPSBpc0hvcml6b250YWwgJiYgby5zdHlsZSgp
LmlzTGVmdFRvUmlnaHREaXJlY3Rpb24oKSA/IHRpY2tGcmFjdGlvbiA6IDEuMCAtIHRpY2tGcmFj
dGlvbjsKICAgICAgICAgZG91YmxlIHRpY2tQb3NpdGlvbiA9IHJvdW5kKHRpY2tSZWdpb25TaWRl
TWFyZ2luICsgdGlja1JlZ2lvbldpZHRoICogdGlja1JhdGlvKTsKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3Rlc3RpbmcvSW50ZXJuYWxzLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3Rlc3Rpbmcv
SW50ZXJuYWxzLmNwcAppbmRleCA4YzZmMTIyMzg2ODI0YWViZjNiZDc2ZmM0ZTc5MzJlOGZkZWY5
MmRlLi40M2RiODA4ZGFhMTdlNjJkMzU0YzMxNWVmZThmZDBiMjViMmI3YjdhIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS90ZXN0aW5nL0ludGVybmFscy5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvdGVzdGluZy9JbnRlcm5hbHMuY3BwCkBAIC0xMTg4LDggKzExODgsOCBAQCBib29sIEludGVy
bmFsczo6d2FzTGFzdENoYW5nZVVzZXJFZGl0KEVsZW1lbnQqIHRleHRGaWVsZCwgRXhjZXB0aW9u
Q29kZSYgZWMpCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CiAKLSAgICBpZiAoSFRNTElu
cHV0RWxlbWVudCogaW5wdXRFbGVtZW50ID0gdGV4dEZpZWxkLT50b0lucHV0RWxlbWVudCgpKQot
ICAgICAgICByZXR1cm4gaW5wdXRFbGVtZW50LT5sYXN0Q2hhbmdlV2FzVXNlckVkaXQoKTsKKyAg
ICBpZiAoaXM8SFRNTElucHV0RWxlbWVudD4oKnRleHRGaWVsZCkpCisgICAgICAgIHJldHVybiBk
b3duY2FzdDxIVE1MSW5wdXRFbGVtZW50PigqdGV4dEZpZWxkKS5sYXN0Q2hhbmdlV2FzVXNlckVk
aXQoKTsKIAogICAgIGlmIChpczxIVE1MVGV4dEFyZWFFbGVtZW50PigqdGV4dEZpZWxkKSkKICAg
ICAgICAgcmV0dXJuIGRvd25jYXN0PEhUTUxUZXh0QXJlYUVsZW1lbnQ+KCp0ZXh0RmllbGQpLmxh
c3RDaGFuZ2VXYXNVc2VyRWRpdCgpOwpAQCAtMTIwNSwxMSArMTIwNSwxMiBAQCBib29sIEludGVy
bmFsczo6ZWxlbWVudFNob3VsZEF1dG9Db21wbGV0ZShFbGVtZW50KiBlbGVtZW50LCBFeGNlcHRp
b25Db2RlJiBlYykKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KIAotICAgIGlmIChIVE1M
SW5wdXRFbGVtZW50KiBpbnB1dEVsZW1lbnQgPSBlbGVtZW50LT50b0lucHV0RWxlbWVudCgpKQot
ICAgICAgICByZXR1cm4gaW5wdXRFbGVtZW50LT5zaG91bGRBdXRvY29tcGxldGUoKTsKKyAgICBp
ZiAoIWlzPEhUTUxJbnB1dEVsZW1lbnQ+KCplbGVtZW50KSkgeworICAgICAgICBlYyA9IElOVkFM
SURfTk9ERV9UWVBFX0VSUjsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KIAotICAgIGVj
ID0gSU5WQUxJRF9OT0RFX1RZUEVfRVJSOwotICAgIHJldHVybiBmYWxzZTsKKyAgICByZXR1cm4g
ZG93bmNhc3Q8SFRNTElucHV0RWxlbWVudD4oKmVsZW1lbnQpLnNob3VsZEF1dG9jb21wbGV0ZSgp
OwogfQogCiB2b2lkIEludGVybmFsczo6c2V0RWRpdGluZ1ZhbHVlKEVsZW1lbnQqIGVsZW1lbnQs
IGNvbnN0IFN0cmluZyYgdmFsdWUsIEV4Y2VwdGlvbkNvZGUmIGVjKQpAQCAtMTIxOSwzMyArMTIy
MCw0MiBAQCB2b2lkIEludGVybmFsczo6c2V0RWRpdGluZ1ZhbHVlKEVsZW1lbnQqIGVsZW1lbnQs
IGNvbnN0IFN0cmluZyYgdmFsdWUsIEV4Y2VwdGlvbgogICAgICAgICByZXR1cm47CiAgICAgfQog
Ci0gICAgSFRNTElucHV0RWxlbWVudCogaW5wdXRFbGVtZW50ID0gZWxlbWVudC0+dG9JbnB1dEVs
ZW1lbnQoKTsKLSAgICBpZiAoIWlucHV0RWxlbWVudCkgeworICAgIGlmICghaXM8SFRNTElucHV0
RWxlbWVudD4oKmVsZW1lbnQpKSB7CiAgICAgICAgIGVjID0gSU5WQUxJRF9OT0RFX1RZUEVfRVJS
OwogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgaW5wdXRFbGVtZW50LT5zZXRFZGl0aW5n
VmFsdWUodmFsdWUpOworICAgIGRvd25jYXN0PEhUTUxJbnB1dEVsZW1lbnQ+KCplbGVtZW50KS5z
ZXRFZGl0aW5nVmFsdWUodmFsdWUpOwogfQogCiB2b2lkIEludGVybmFsczo6c2V0QXV0b2ZpbGxl
ZChFbGVtZW50KiBlbGVtZW50LCBib29sIGVuYWJsZWQsIEV4Y2VwdGlvbkNvZGUmIGVjKQogewot
ICAgIEhUTUxJbnB1dEVsZW1lbnQqIGlucHV0RWxlbWVudCA9IGVsZW1lbnQtPnRvSW5wdXRFbGVt
ZW50KCk7Ci0gICAgaWYgKCFpbnB1dEVsZW1lbnQpIHsKKyAgICBpZiAoIWVsZW1lbnQpIHsKICAg
ICAgICAgZWMgPSBJTlZBTElEX0FDQ0VTU19FUlI7CiAgICAgICAgIHJldHVybjsKICAgICB9Ci0g
ICAgaW5wdXRFbGVtZW50LT5zZXRBdXRvRmlsbGVkKGVuYWJsZWQpOworCisgICAgaWYgKCFpczxI
VE1MSW5wdXRFbGVtZW50PigqZWxlbWVudCkpIHsKKyAgICAgICAgZWMgPSBJTlZBTElEX05PREVf
VFlQRV9FUlI7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBkb3duY2FzdDxIVE1MSW5w
dXRFbGVtZW50PigqZWxlbWVudCkuc2V0QXV0b0ZpbGxlZChlbmFibGVkKTsKIH0KIAogdm9pZCBJ
bnRlcm5hbHM6OnNldFNob3dBdXRvRmlsbEJ1dHRvbihFbGVtZW50KiBlbGVtZW50LCBib29sIHNo
b3csIEV4Y2VwdGlvbkNvZGUmIGVjKQogewotICAgIEhUTUxJbnB1dEVsZW1lbnQqIGlucHV0RWxl
bWVudCA9IGVsZW1lbnQtPnRvSW5wdXRFbGVtZW50KCk7Ci0gICAgaWYgKCFpbnB1dEVsZW1lbnQp
IHsKKyAgICBpZiAoIWVsZW1lbnQpIHsKICAgICAgICAgZWMgPSBJTlZBTElEX0FDQ0VTU19FUlI7
CiAgICAgICAgIHJldHVybjsKICAgICB9Ci0gICAgaW5wdXRFbGVtZW50LT5zZXRTaG93QXV0b0Zp
bGxCdXR0b24oc2hvdyk7CisKKyAgICBpZiAoIWlzPEhUTUxJbnB1dEVsZW1lbnQ+KCplbGVtZW50
KSkgeworICAgICAgICBlYyA9IElOVkFMSURfTk9ERV9UWVBFX0VSUjsKKyAgICAgICAgcmV0dXJu
OworICAgIH0KKworICAgIGRvd25jYXN0PEhUTUxJbnB1dEVsZW1lbnQ+KCplbGVtZW50KS5zZXRT
aG93QXV0b0ZpbGxCdXR0b24oc2hvdyk7CiB9CiAKIAo=
</data>

          </attachment>
      

    </bug>

</bugzilla>