<?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>46023</bug_id>
          
          <creation_ts>2010-09-17 18:08:50 -0700</creation_ts>
          <short_desc>Deprecate the inputType function on HTMLInputElement</short_desc>
          <delta_ts>2010-09-21 03:10:16 -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>Forms</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Other</rep_platform>
          <op_sys>OS X 10.5</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>45872</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Darin Adler">darin</reporter>
          <assigned_to name="Darin Adler">darin</assigned_to>
          <cc>abarth</cc>
    
    <cc>ap</cc>
    
    <cc>eric</cc>
    
    <cc>kling</cc>
    
    <cc>pnormand</cc>
    
    <cc>tonikitoo</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>281046</commentid>
    <comment_count>0</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2010-09-17 18:08:50 -0700</bug_when>
    <thetext>Deprecate the inputType function on HTMLInputElement</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>281051</commentid>
    <comment_count>1</comment_count>
      <attachid>67988</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2010-09-17 18:21:23 -0700</bug_when>
    <thetext>Created attachment 67988
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>281064</commentid>
    <comment_count>2</comment_count>
      <attachid>67988</attachid>
    <who name="Andreas Kling">kling</who>
    <bug_when>2010-09-17 18:58:50 -0700</bug_when>
    <thetext>Comment on attachment 67988
Patch

&gt; +        dprecatedNumberOfTypes for the same reason. Changed all code to use
Typo (dprecatedNumberOfTypes)

r=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>281083</commentid>
    <comment_count>3</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2010-09-17 22:24:26 -0700</bug_when>
    <thetext>Why?

The only explanation I could find was deep inside ChangeLog (&quot;since it should not be used outside this class&quot;), but even that seems mysterious.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>281129</commentid>
    <comment_count>4</comment_count>
    <who name="Andreas Kling">kling</who>
    <bug_when>2010-09-18 07:20:04 -0700</bug_when>
    <thetext>(In reply to comment #3)
&gt; Why?

Darin may have more reasons, but personally I like it because it prevents the mistake of checking e.g &quot;inputType() == TEXT&quot; when you actually want isTextField().</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>281137</commentid>
    <comment_count>5</comment_count>
      <attachid>67988</attachid>
    <who name="Andreas Kling">kling</who>
    <bug_when>2010-09-18 08:38:15 -0700</bug_when>
    <thetext>Comment on attachment 67988
Patch

Right, I was not aware of that ongoing refactoring effort, thanks Kent. I admit to jumping the gun on this review, as I was not aware of all the circumstances, resetting r? so someone else can have a look. (For the record, it still LGTM.)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>281201</commentid>
    <comment_count>6</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2010-09-18 16:10:24 -0700</bug_when>
    <thetext>This is a straightforward patch, and I think Andreas’s review should be sufficient, but as the author I guess I’m biased. So lets wait for someone else to review?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>281203</commentid>
    <comment_count>7</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2010-09-18 16:15:46 -0700</bug_when>
    <thetext>There are multiple reasons for this, and I could put some in the change log.

The primary reason is that we want to be free to add more input types without having to revise switch statements outside the class. And we’d like to change the class to be based on an input type object rather than an input type number. There is almost no code that depends on this numeric value and we can get that down to nothing pretty easily.

But yes, another reason is that people tend to special-case TEXT when it is not correct to do so. Generally speaking a list of types at a call site often can become wrong later when someone adds a new type.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>281206</commentid>
    <comment_count>8</comment_count>
      <attachid>67988</attachid>
    <who name="Andreas Kling">kling</who>
    <bug_when>2010-09-18 16:27:16 -0700</bug_when>
    <thetext>Comment on attachment 67988
Patch

You are right, this is straightforward. Thanks for explaining the reasons.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>281985</commentid>
    <comment_count>9</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2010-09-20 18:12:32 -0700</bug_when>
    <thetext>Committed r67903: &lt;http://trac.webkit.org/changeset/67903&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>282024</commentid>
    <comment_count>10</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-09-20 19:07:21 -0700</bug_when>
    <thetext>http://trac.webkit.org/changeset/67904 might have broken GTK Linux 64-bit Debug
The following changes are on the blame list:
http://trac.webkit.org/changeset/67904
http://trac.webkit.org/changeset/67903</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>282165</commentid>
    <comment_count>11</comment_count>
    <who name="Philippe Normand">pnormand</who>
    <bug_when>2010-09-21 03:10:16 -0700</bug_when>
    <thetext>(In reply to comment #10)
&gt; http://trac.webkit.org/changeset/67904 might have broken GTK Linux 64-bit Debug
&gt; The following changes are on the blame list:
&gt; http://trac.webkit.org/changeset/67904
&gt; http://trac.webkit.org/changeset/67903

See bug 46169</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>67988</attachid>
            <date>2010-09-17 18:21:23 -0700</date>
            <delta_ts>2010-09-18 16:27:15 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-46023-20100917182121.patch</filename>
            <type>text/plain</type>
            <size>51723</size>
            <attacher name="Darin Adler">darin</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA2Nzc2OSkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsODcgQEAKKzIwMTAtMDktMTcgIERhcmluIEFkbGVyICA8ZGFyaW5AYXBwbGUuY29t
PgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIERlcHJl
Y2F0ZSB0aGUgaW5wdXRUeXBlIGZ1bmN0aW9uIG9uIEhUTUxJbnB1dEVsZW1lbnQKKyAgICAgICAg
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTQ2MDIzCisKKyAgICAgICAg
KiBodG1sL0hUTUxJbnB1dEVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SFRNTElucHV0
RWxlbWVudDo6SFRNTElucHV0RWxlbWVudCk6IFVzZSBtX2RlcHJlY2F0ZWRUeXBlTnVtYmVyLgor
ICAgICAgICAoV2ViQ29yZTo6SFRNTElucHV0RWxlbWVudDo6aXNWYWxpZFZhbHVlKTogVXNlIGRl
cHJlY2F0ZWRJbnB1dFR5cGUuCisgICAgICAgIChXZWJDb3JlOjpIVE1MSW5wdXRFbGVtZW50Ojp0
eXBlTWlzbWF0Y2gpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OkhUTUxJbnB1dEVsZW1lbnQ6
OnZhbHVlTWlzc2luZyk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6SFRNTElucHV0RWxlbWVu
dDo6cmFuZ2VVbmRlcmZsb3cpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OkhUTUxJbnB1dEVs
ZW1lbnQ6OnJhbmdlT3ZlcmZsb3cpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OkhUTUxJbnB1
dEVsZW1lbnQ6Om1pbmltdW0pOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OkhUTUxJbnB1dEVs
ZW1lbnQ6Om1heGltdW0pOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OkhUTUxJbnB1dEVsZW1l
bnQ6OnN0ZXBCYXNlKTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpIVE1MSW5wdXRFbGVtZW50
OjpzdGVwTWlzbWF0Y2gpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OkhUTUxJbnB1dEVsZW1l
bnQ6OmdldFN0ZXBQYXJhbWV0ZXJzKTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpIVE1MSW5w
dXRFbGVtZW50OjpnZXRBbGxvd2VkVmFsdWVTdGVwKTogRGl0dG8uCisgICAgICAgIChXZWJDb3Jl
OjpIVE1MSW5wdXRFbGVtZW50Ojppc0tleWJvYXJkRm9jdXNhYmxlKTogRGl0dG8uCisgICAgICAg
IChXZWJDb3JlOjpIVE1MSW5wdXRFbGVtZW50OjpzaG91bGRVc2VJbnB1dE1ldGhvZCk6IERpdHRv
LgorICAgICAgICAoV2ViQ29yZTo6SFRNTElucHV0RWxlbWVudDo6aGFuZGxlQmx1ckV2ZW50KTog
RGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpIVE1MSW5wdXRFbGVtZW50OjpzZXRUeXBlKTogQWRk
ZWQgYSBjb21tZW50LgorICAgICAgICAoV2ViQ29yZTo6SFRNTElucHV0RWxlbWVudDo6dXBkYXRl
VHlwZSk6IFJlcGxhY2VkIHRoZSBzZXRJbnB1dFR5cGUgZnVuY3Rpb24KKyAgICAgICAgd2l0aCB0
aGlzLiBUaGUgdHlwZSBpcyBhbHdheXMgdGhlIHR5cGUgYXR0cmlidXRlIHZhbHVlLCBzbyB0aGVy
ZSBpcyBubyB2YWx1ZQorICAgICAgICBpbiBwYXNzaW5nIHRoZSB0eXBlIHN0cmluZyBpbiwgYW5k
IHRoaXMgaXMgYW4gaW50ZXJuYWwgaW1wbGVtZW50YXRpb24gZGV0YWlsLAorICAgICAgICBub3Qg
YSBwdWJsaWMgZnVuY3Rpb24uCisgICAgICAgIChXZWJDb3JlOjpjcmVhdGVGb3JtQ29udHJvbFR5
cGVzKTogVXNlIGRlcHJlY2F0ZWROdW1iZXJPZlR5cGVzLgorICAgICAgICAoV2ViQ29yZTo6SFRN
TElucHV0RWxlbWVudDo6Zm9ybUNvbnRyb2xUeXBlKTogVXNlIGRlcHJlY2F0ZWRJbnB1dFR5cGUu
CisgICAgICAgIChXZWJDb3JlOjpIVE1MSW5wdXRFbGVtZW50OjpzYXZlRm9ybUNvbnRyb2xTdGF0
ZSk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6SFRNTElucHV0RWxlbWVudDo6cmVzdG9yZUZv
cm1Db250cm9sU3RhdGUpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OkhUTUxJbnB1dEVsZW1l
bnQ6OmFjY2Vzc0tleUFjdGlvbik6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6SFRNTElucHV0
RWxlbWVudDo6bWFwVG9FbnRyeSk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6SFRNTElucHV0
RWxlbWVudDo6cGFyc2VNYXBwZWRBdHRyaWJ1dGUpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6
OkhUTUxJbnB1dEVsZW1lbnQ6OnJlbmRlcmVySXNOZWVkZWQpOiBEaXR0by4KKyAgICAgICAgKFdl
YkNvcmU6OkhUTUxJbnB1dEVsZW1lbnQ6OmNyZWF0ZVJlbmRlcmVyKTogRGl0dG8uCisgICAgICAg
IChXZWJDb3JlOjpIVE1MSW5wdXRFbGVtZW50OjphdHRhY2gpOiBEaXR0by4KKyAgICAgICAgKFdl
YkNvcmU6OkhUTUxJbnB1dEVsZW1lbnQ6OmlzU3VjY2Vzc2Z1bFN1Ym1pdEJ1dHRvbik6IERpdHRv
LgorICAgICAgICAoV2ViQ29yZTo6SFRNTElucHV0RWxlbWVudDo6YXBwZW5kRm9ybURhdGEpOiBE
aXR0by4KKyAgICAgICAgKFdlYkNvcmU6OkhUTUxJbnB1dEVsZW1lbnQ6OmlzVGV4dEZpZWxkKTog
RGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpIVE1MSW5wdXRFbGVtZW50Ojppc1RleHRUeXBlKTog
RGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpIVE1MSW5wdXRFbGVtZW50OjpzZXRDaGVja2VkKTog
RGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpIVE1MSW5wdXRFbGVtZW50Ojp2YWx1ZSk6IERpdHRv
LgorICAgICAgICAoV2ViQ29yZTo6SFRNTElucHV0RWxlbWVudDo6dmFsdWVXaXRoRGVmYXVsdCk6
IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6SFRNTElucHV0RWxlbWVudDo6c2V0U3VnZ2VzdGVk
VmFsdWUpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OkhUTUxJbnB1dEVsZW1lbnQ6OnNldFZh
bHVlKTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpIVE1MSW5wdXRFbGVtZW50OjpwYXJzZVRv
RG91YmxlKTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpIVE1MSW5wdXRFbGVtZW50Ojp2YWx1
ZUFzRGF0ZSk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6SFRNTElucHV0RWxlbWVudDo6c2V0
VmFsdWVBc0RhdGUpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OkhUTUxJbnB1dEVsZW1lbnQ6
OnZhbHVlQXNOdW1iZXIpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OkhUTUxJbnB1dEVsZW1l
bnQ6OnNldFZhbHVlQXNOdW1iZXIpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OkhUTUxJbnB1
dEVsZW1lbnQ6OnNlcmlhbGl6ZUZvckRhdGVUaW1lVHlwZXMpOiBEaXR0by4KKyAgICAgICAgKFdl
YkNvcmU6OkhUTUxJbnB1dEVsZW1lbnQ6OnNlcmlhbGl6ZSk6IERpdHRvLgorICAgICAgICAoV2Vi
Q29yZTo6SFRNTElucHV0RWxlbWVudDo6c2V0VmFsdWVGcm9tUmVuZGVyZXIpOiBEaXR0by4KKyAg
ICAgICAgKFdlYkNvcmU6OkhUTUxJbnB1dEVsZW1lbnQ6OnN0b3Jlc1ZhbHVlU2VwYXJhdGVGcm9t
QXR0cmlidXRlKTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpIVE1MSW5wdXRFbGVtZW50Ojpw
cmVEaXNwYXRjaEV2ZW50SGFuZGxlcik6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6SFRNTElu
cHV0RWxlbWVudDo6cG9zdERpc3BhdGNoRXZlbnRIYW5kbGVyKTogRGl0dG8uCisgICAgICAgIChX
ZWJDb3JlOjpIVE1MSW5wdXRFbGVtZW50OjpkZWZhdWx0RXZlbnRIYW5kbGVyKTogRGl0dG8uCisg
ICAgICAgIChXZWJDb3JlOjpIVE1MSW5wdXRFbGVtZW50OjpoYW5kbGVCZWZvcmVUZXh0SW5zZXJ0
ZWRFdmVudCk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6SFRNTElucHV0RWxlbWVudDo6Zmls
ZXMpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OkhUTUxJbnB1dEVsZW1lbnQ6OmlzQWNjZXB0
YWJsZVZhbHVlKTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpIVE1MSW5wdXRFbGVtZW50Ojpz
YW5pdGl6ZVZhbHVlKTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpIVE1MSW5wdXRFbGVtZW50
OjpoYXNVbmFjY2VwdGFibGVWYWx1ZSk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6SFRNTElu
cHV0RWxlbWVudDo6bmVlZHNBY3RpdmF0aW9uQ2FsbGJhY2spOiBEaXR0by4KKyAgICAgICAgKFdl
YkNvcmU6OkhUTUxJbnB1dEVsZW1lbnQ6OmlzUmVxdWlyZWRGb3JtQ29udHJvbCk6IERpdHRvLgor
ICAgICAgICAoV2ViQ29yZTo6SFRNTElucHV0RWxlbWVudDo6cmVjYWxjV2lsbFZhbGlkYXRlKTog
RGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpIVE1MSW5wdXRFbGVtZW50OjpwYXJzZVRvRGF0ZUNv
bXBvbmVudHMpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OkhUTUxJbnB1dEVsZW1lbnQ6OmRh
dGFMaXN0KTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpIVE1MSW5wdXRFbGVtZW50Ojppc1Nw
ZWVjaEVuYWJsZWQpOiBEaXR0by4KKworICAgICAgICAqIGh0bWwvSFRNTElucHV0RWxlbWVudC5o
OiBSZW5hbWVkIElucHV0VHlwZSB0byBEZXByZWNhdGVkSW5wdXRUeXBlIHNpbmNlIGl0CisgICAg
ICAgIHNob3VsZCBub3QgYmUgdXNlZCBvdXRzaWRlIHRoaXMgY2xhc3MuIFJlbmFtZWQgbnVtYmVy
T2ZUeXBlcyB0bworICAgICAgICBkcHJlY2F0ZWROdW1iZXJPZlR5cGVzIGZvciB0aGUgc2FtZSBy
ZWFzb24uIENoYW5nZWQgYWxsIGNvZGUgdG8gdXNlCisgICAgICAgIGRlcHJlY2F0ZWRJbnB1dFR5
cGUgZnVuY3Rpb24gaW5zdGVhZCBvZiBtX3R5cGUuIFJlbmFtZWQgaW5wdXRUeXBlIGZ1bmN0aW9u
CisgICAgICAgIHRvIGRlcHJlY2F0ZWRJbnB1dFR5cGUuIFJlcGxhY2VkIHB1YmxpYyBzZXRJbnB1
dFR5cGUgZnVuY3Rpb24gd2l0aCBwcml2YXRlCisgICAgICAgIHVwZGF0ZVR5cGUgZnVuY3Rpb24u
IFJlbmFtZWQgbV90eXBlIGRhdGEgbWVtYmVyIHRvIG1fZGVwcmVjYXRlZFR5cGVOdW1iZXIuCisK
KyAgICAgICAgKiByZW5kZXJpbmcvTWVkaWFDb250cm9sRWxlbWVudHMuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6TWVkaWFDb250cm9sSW5wdXRFbGVtZW50OjpNZWRpYUNvbnRyb2xJbnB1dEVsZW1l
bnQpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJGaWxlVXBsb2FkQ29udHJvbC5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpSZW5kZXJGaWxlVXBsb2FkQ29udHJvbDo6dXBkYXRlRnJvbUVsZW1l
bnQpOgorICAgICAgICBVc2Ugc2V0VHlwZSBpbnN0ZWFkIG9mIHNldElucHV0VHlwZS4KKwogMjAx
MC0wOS0xNyAgRGFyaW4gQWRsZXIgIDxkYXJpbkBhcHBsZS5jb20+CiAKICAgICAgICAgQnVpbGQg
Zml4IGZvciBwbGF0Zm9ybXMgdGhhdCBjb21waWxlIFRvdWNoLgpJbmRleDogV2ViQ29yZS9odG1s
L0hUTUxJbnB1dEVsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvaHRtbC9IVE1MSW5w
dXRFbGVtZW50LmNwcAkocmV2aXNpb24gNjc3NjMpCisrKyBXZWJDb3JlL2h0bWwvSFRNTElucHV0
RWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE1MSw3ICsxNTEsNyBAQCBIVE1MSW5wdXRF
bGVtZW50OjpIVE1MSW5wdXRFbGVtZW50KGNvbnN0CiAgICAgLCBtX3hQb3MoMCkKICAgICAsIG1f
eVBvcygwKQogICAgICwgbV9tYXhSZXN1bHRzKC0xKQotICAgICwgbV90eXBlKFRFWFQpCisgICAg
LCBtX2RlcHJlY2F0ZWRUeXBlTnVtYmVyKFRFWFQpCiAgICAgLCBtX2NoZWNrZWQoZmFsc2UpCiAg
ICAgLCBtX2RlZmF1bHRDaGVja2VkKGZhbHNlKQogICAgICwgbV91c2VEZWZhdWx0Q2hlY2tlZCh0
cnVlKQpAQCAtMjQxLDcgKzI0MSw3IEBAIGJvb2wgSFRNTElucHV0RWxlbWVudDo6aXNWYWxpZFZh
bHVlKGNvbnMKIHsKICAgICAvLyBTaG91bGQgbm90IGNhbGwgaXNWYWxpZFZhbHVlKCkgZm9yIHRo
ZSBmb2xsb3dpbmcgdHlwZXMgYmVjYXVzZQogICAgIC8vIHdlIGNhbid0IHNldCBzdHJpbmcgdmFs
dWVzIGZvciB0aGVzZSB0eXBlcy4KLSAgICBpZiAoaW5wdXRUeXBlKCkgPT0gQ0hFQ0tCT1ggfHwg
aW5wdXRUeXBlKCkgPT0gRklMRSB8fCBpbnB1dFR5cGUoKSA9PSBSQURJTykgeworICAgIGlmIChk
ZXByZWNhdGVkSW5wdXRUeXBlKCkgPT0gQ0hFQ0tCT1ggfHwgZGVwcmVjYXRlZElucHV0VHlwZSgp
ID09IEZJTEUgfHwgZGVwcmVjYXRlZElucHV0VHlwZSgpID09IFJBRElPKSB7CiAgICAgICAgIEFT
U0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQpAQCAtMjU2
LDcgKzI1Niw3IEBAIGJvb2wgSFRNTElucHV0RWxlbWVudDo6aXNWYWxpZFZhbHVlKGNvbnMKIAog
Ym9vbCBIVE1MSW5wdXRFbGVtZW50Ojp0eXBlTWlzbWF0Y2goY29uc3QgU3RyaW5nJiB2YWx1ZSkg
Y29uc3QKIHsKLSAgICBzd2l0Y2ggKGlucHV0VHlwZSgpKSB7CisgICAgc3dpdGNoIChkZXByZWNh
dGVkSW5wdXRUeXBlKCkpIHsKICAgICBjYXNlIENPTE9SOgogICAgICAgICByZXR1cm4gIWlzVmFs
aWRDb2xvclN0cmluZyh2YWx1ZSk7CiAgICAgY2FzZSBOVU1CRVI6CkBAIC0yODEsNyArMjgxLDcg
QEAgYm9vbCBIVE1MSW5wdXRFbGVtZW50Ojp0eXBlTWlzbWF0Y2goY29ucwogICAgIGNhc2UgTU9O
VEg6CiAgICAgY2FzZSBUSU1FOgogICAgIGNhc2UgV0VFSzoKLSAgICAgICAgcmV0dXJuICFwYXJz
ZVRvRGF0ZUNvbXBvbmVudHMoaW5wdXRUeXBlKCksIHZhbHVlLCAwKTsKKyAgICAgICAgcmV0dXJu
ICFwYXJzZVRvRGF0ZUNvbXBvbmVudHMoZGVwcmVjYXRlZElucHV0VHlwZSgpLCB2YWx1ZSwgMCk7
CiAgICAgY2FzZSBCVVRUT046CiAgICAgY2FzZSBDSEVDS0JPWDoKICAgICBjYXNlIEZJTEU6CkBA
IC0zMDcsNyArMzA3LDcgQEAgYm9vbCBIVE1MSW5wdXRFbGVtZW50Ojp2YWx1ZU1pc3NpbmcoY29u
cwogICAgIGlmICghaXNSZXF1aXJlZEZvcm1Db250cm9sKCkgfHwgcmVhZE9ubHkoKSB8fCBkaXNh
YmxlZCgpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBzd2l0Y2ggKGlucHV0VHlwZSgp
KSB7CisgICAgc3dpdGNoIChkZXByZWNhdGVkSW5wdXRUeXBlKCkpIHsKICAgICBjYXNlIERBVEU6
CiAgICAgY2FzZSBEQVRFVElNRToKICAgICBjYXNlIERBVEVUSU1FTE9DQUw6CkBAIC0zNzksNyAr
Mzc5LDcgQEAgYm9vbCBIVE1MSW5wdXRFbGVtZW50Ojp0b29Mb25nKGNvbnN0IFN0cgogYm9vbCBI
VE1MSW5wdXRFbGVtZW50OjpyYW5nZVVuZGVyZmxvdyhjb25zdCBTdHJpbmcmIHZhbHVlKSBjb25z
dAogewogICAgIGNvbnN0IGRvdWJsZSBuYW4gPSBudW1lcmljX2xpbWl0czxkb3VibGU+OjpxdWll
dF9OYU4oKTsKLSAgICBzd2l0Y2ggKGlucHV0VHlwZSgpKSB7CisgICAgc3dpdGNoIChkZXByZWNh
dGVkSW5wdXRUeXBlKCkpIHsKICAgICBjYXNlIERBVEU6CiAgICAgY2FzZSBEQVRFVElNRToKICAg
ICBjYXNlIERBVEVUSU1FTE9DQUw6CkBAIC00MTYsNyArNDE2LDcgQEAgYm9vbCBIVE1MSW5wdXRF
bGVtZW50OjpyYW5nZVVuZGVyZmxvdyhjbwogYm9vbCBIVE1MSW5wdXRFbGVtZW50OjpyYW5nZU92
ZXJmbG93KGNvbnN0IFN0cmluZyYgdmFsdWUpIGNvbnN0CiB7CiAgICAgY29uc3QgZG91YmxlIG5h
biA9IG51bWVyaWNfbGltaXRzPGRvdWJsZT46OnF1aWV0X05hTigpOwotICAgIHN3aXRjaCAoaW5w
dXRUeXBlKCkpIHsKKyAgICBzd2l0Y2ggKGRlcHJlY2F0ZWRJbnB1dFR5cGUoKSkgewogICAgIGNh
c2UgREFURToKICAgICBjYXNlIERBVEVUSU1FOgogICAgIGNhc2UgREFURVRJTUVMT0NBTDoKQEAg
LTQ1Miw3ICs0NTIsNyBAQCBib29sIEhUTUxJbnB1dEVsZW1lbnQ6OnJhbmdlT3ZlcmZsb3coY29u
CiAKIGRvdWJsZSBIVE1MSW5wdXRFbGVtZW50OjptaW5pbXVtKCkgY29uc3QKIHsKLSAgICBzd2l0
Y2ggKGlucHV0VHlwZSgpKSB7CisgICAgc3dpdGNoIChkZXByZWNhdGVkSW5wdXRUeXBlKCkpIHsK
ICAgICBjYXNlIERBVEU6CiAgICAgICAgIHJldHVybiBwYXJzZVRvRG91YmxlKGdldEF0dHJpYnV0
ZShtaW5BdHRyKSwgRGF0ZUNvbXBvbmVudHM6Om1pbmltdW1EYXRlKCkpOwogICAgIGNhc2UgREFU
RVRJTUU6CkBAIC00OTIsNyArNDkyLDcgQEAgZG91YmxlIEhUTUxJbnB1dEVsZW1lbnQ6Om1pbmlt
dW0oKSBjb25zdAogCiBkb3VibGUgSFRNTElucHV0RWxlbWVudDo6bWF4aW11bSgpIGNvbnN0CiB7
Ci0gICAgc3dpdGNoIChpbnB1dFR5cGUoKSkgeworICAgIHN3aXRjaCAoZGVwcmVjYXRlZElucHV0
VHlwZSgpKSB7CiAgICAgY2FzZSBEQVRFOgogICAgICAgICByZXR1cm4gcGFyc2VUb0RvdWJsZShn
ZXRBdHRyaWJ1dGUobWF4QXR0ciksIERhdGVDb21wb25lbnRzOjptYXhpbXVtRGF0ZSgpKTsKICAg
ICBjYXNlIERBVEVUSU1FOgpAQCAtNTM5LDcgKzUzOSw3IEBAIGRvdWJsZSBIVE1MSW5wdXRFbGVt
ZW50OjptYXhpbXVtKCkgY29uc3QKIAogZG91YmxlIEhUTUxJbnB1dEVsZW1lbnQ6OnN0ZXBCYXNl
KCkgY29uc3QKIHsKLSAgICBzd2l0Y2ggKGlucHV0VHlwZSgpKSB7CisgICAgc3dpdGNoIChkZXBy
ZWNhdGVkSW5wdXRUeXBlKCkpIHsKICAgICBjYXNlIFJBTkdFOgogICAgICAgICByZXR1cm4gbWlu
aW11bSgpOwogICAgIGNhc2UgREFURToKQEAgLTU3OCw3ICs1NzgsNyBAQCBib29sIEhUTUxJbnB1
dEVsZW1lbnQ6OnN0ZXBNaXNtYXRjaChjb25zCiAgICAgZG91YmxlIHN0ZXA7CiAgICAgaWYgKCFn
ZXRBbGxvd2VkVmFsdWVTdGVwKCZzdGVwKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIHN3
aXRjaCAoaW5wdXRUeXBlKCkpIHsKKyAgICBzd2l0Y2ggKGRlcHJlY2F0ZWRJbnB1dFR5cGUoKSkg
ewogICAgIGNhc2UgUkFOR0U6CiAgICAgICAgIC8vIHN0ZXBNaXNtYXRjaCBkb2Vzbid0IG9jY3Vy
IGZvciBSQU5HRS4gUmVuZGVyU2xpZGVyIGd1YXJhbnRlZXMgdGhlCiAgICAgICAgIC8vIHZhbHVl
IG1hdGNoZXMgdG8gc3RlcCBvbiB1c2VyIGlucHV0LCBhbmQgc2FuaXRhdGlvbiB0YWtlcyBjYXJl
CkBAIC02NDMsNyArNjQzLDcgQEAgYm9vbCBIVE1MSW5wdXRFbGVtZW50OjpnZXRTdGVwUGFyYW1l
dGVycwogewogICAgIEFTU0VSVChkZWZhdWx0U3RlcCk7CiAgICAgQVNTRVJUKHN0ZXBTY2FsZUZh
Y3Rvcik7Ci0gICAgc3dpdGNoIChpbnB1dFR5cGUoKSkgeworICAgIHN3aXRjaCAoZGVwcmVjYXRl
ZElucHV0VHlwZSgpKSB7CiAgICAgY2FzZSBOVU1CRVI6CiAgICAgY2FzZSBSQU5HRToKICAgICAg
ICAgKmRlZmF1bHRTdGVwID0gbnVtYmVyRGVmYXVsdFN0ZXA7CkBAIC03MTIsMTEgKzcxMiwxMSBA
QCBib29sIEhUTUxJbnB1dEVsZW1lbnQ6OmdldEFsbG93ZWRWYWx1ZVN0CiAgICAgICAgIHJldHVy
biB0cnVlOwogICAgIH0KICAgICAvLyBGb3IgREFURSwgTU9OVEgsIFdFRUssIHRoZSBwYXJzZWQg
dmFsdWUgc2hvdWxkIGJlIGFuIGludGVnZXIuCi0gICAgaWYgKGlucHV0VHlwZSgpID09IERBVEUg
fHwgaW5wdXRUeXBlKCkgPT0gTU9OVEggfHwgaW5wdXRUeXBlKCkgPT0gV0VFSykKKyAgICBpZiAo
ZGVwcmVjYXRlZElucHV0VHlwZSgpID09IERBVEUgfHwgZGVwcmVjYXRlZElucHV0VHlwZSgpID09
IE1PTlRIIHx8IGRlcHJlY2F0ZWRJbnB1dFR5cGUoKSA9PSBXRUVLKQogICAgICAgICBwYXJzZWQg
PSBtYXgocm91bmQocGFyc2VkKSwgMS4wKTsKICAgICBkb3VibGUgcmVzdWx0ID0gcGFyc2VkICog
c3RlcFNjYWxlRmFjdG9yOwogICAgIC8vIEZvciBEQVRFVElNRSwgREFURVRJTUVMT0NBTCwgVElN
RSwgdGhlIHJlc3VsdCBzaG91bGQgYmUgYW4gaW50ZWdlci4KLSAgICBpZiAoaW5wdXRUeXBlKCkg
PT0gREFURVRJTUUgfHwgaW5wdXRUeXBlKCkgPT0gREFURVRJTUVMT0NBTCB8fCBpbnB1dFR5cGUo
KSA9PSBUSU1FKQorICAgIGlmIChkZXByZWNhdGVkSW5wdXRUeXBlKCkgPT0gREFURVRJTUUgfHwg
ZGVwcmVjYXRlZElucHV0VHlwZSgpID09IERBVEVUSU1FTE9DQUwgfHwgZGVwcmVjYXRlZElucHV0
VHlwZSgpID09IFRJTUUpCiAgICAgICAgIHJlc3VsdCA9IG1heChyb3VuZChyZXN1bHQpLCAxLjAp
OwogICAgIEFTU0VSVChyZXN1bHQgPiAwKTsKICAgICAqc3RlcCA9IHJlc3VsdDsKQEAgLTc3NCwx
NCArNzc0LDE0IEBAIGJvb2wgSFRNTElucHV0RWxlbWVudDo6aXNLZXlib2FyZEZvY3VzYWIKICAg
ICBpZiAoIUhUTUxGb3JtQ29udHJvbEVsZW1lbnRXaXRoU3RhdGU6OmlzS2V5Ym9hcmRGb2N1c2Fi
bGUoZXZlbnQpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBpZiAoaW5wdXRUeXBlKCkg
PT0gUkFESU8pIHsKKyAgICBpZiAoZGVwcmVjYXRlZElucHV0VHlwZSgpID09IFJBRElPKSB7CiAK
ICAgICAgICAgLy8gTmV2ZXIgYWxsb3cga2V5Ym9hcmQgdGFiYmluZyB0byBsZWF2ZSB5b3UgaW4g
dGhlIHNhbWUgcmFkaW8gZ3JvdXAuICBBbHdheXMKICAgICAgICAgLy8gc2tpcCBhbnkgb3RoZXIg
ZWxlbWVudHMgaW4gdGhlIGdyb3VwLgogICAgICAgICBOb2RlKiBjdXJyZW50Rm9jdXNlZE5vZGUg
PSBkb2N1bWVudCgpLT5mb2N1c2VkTm9kZSgpOwogICAgICAgICBpZiAoY3VycmVudEZvY3VzZWRO
b2RlICYmIGN1cnJlbnRGb2N1c2VkTm9kZS0+aGFzVGFnTmFtZShpbnB1dFRhZykpIHsKICAgICAg
ICAgICAgIEhUTUxJbnB1dEVsZW1lbnQqIGZvY3VzZWRJbnB1dCA9IHN0YXRpY19jYXN0PEhUTUxJ
bnB1dEVsZW1lbnQqPihjdXJyZW50Rm9jdXNlZE5vZGUpOwotICAgICAgICAgICAgaWYgKGZvY3Vz
ZWRJbnB1dC0+aW5wdXRUeXBlKCkgPT0gUkFESU8gJiYgZm9jdXNlZElucHV0LT5mb3JtKCkgPT0g
Zm9ybSgpICYmIGZvY3VzZWRJbnB1dC0+bmFtZSgpID09IG5hbWUoKSkKKyAgICAgICAgICAgIGlm
IChmb2N1c2VkSW5wdXQtPmRlcHJlY2F0ZWRJbnB1dFR5cGUoKSA9PSBSQURJTyAmJiBmb2N1c2Vk
SW5wdXQtPmZvcm0oKSA9PSBmb3JtKCkgJiYgZm9jdXNlZElucHV0LT5uYW1lKCkgPT0gbmFtZSgp
KQogICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgfQogICAgICAgICAKQEAg
LTgxOCw3ICs4MTgsNyBAQCBib29sIEhUTUxJbnB1dEVsZW1lbnQ6OnNob3VsZFVzZUlucHV0TWV0
CiAgICAgLy8gY2FuIGFjY2VzcyB0aGUgdW5kZXJseWluZyBwYXNzd29yZCBhbmQgZGlzcGxheSBp
dCBpbiBjbGVhciB0ZXh0IC0tCiAgICAgLy8gZS5nLiB5b3UgY2FuIHVzZSBpdCB0byBhY2Nlc3Mg
dGhlIHN0b3JlZCBwYXNzd29yZCBmb3IgYW55IHNpdGUgCiAgICAgLy8gd2l0aCBvbmx5IHRyaXZp
YWwgZWZmb3J0LgotICAgIHJldHVybiBpc1RleHRGaWVsZCgpICYmIGlucHV0VHlwZSgpICE9IFBB
U1NXT1JEOworICAgIHJldHVybiBpc1RleHRGaWVsZCgpICYmIGRlcHJlY2F0ZWRJbnB1dFR5cGUo
KSAhPSBQQVNTV09SRDsKIH0KIAogdm9pZCBIVE1MSW5wdXRFbGVtZW50OjpoYW5kbGVGb2N1c0V2
ZW50KCkKQEAgLTgyOCw3ICs4MjgsNyBAQCB2b2lkIEhUTUxJbnB1dEVsZW1lbnQ6OmhhbmRsZUZv
Y3VzRXZlbnQoCiAKIHZvaWQgSFRNTElucHV0RWxlbWVudDo6aGFuZGxlQmx1ckV2ZW50KCkKIHsK
LSAgICBpZiAoaW5wdXRUeXBlKCkgPT0gTlVNQkVSKSB7CisgICAgaWYgKGRlcHJlY2F0ZWRJbnB1
dFR5cGUoKSA9PSBOVU1CRVIpIHsKICAgICAgICAgLy8gUmVzZXQgdGhlIHJlbmRlcmVyIHZhbHVl
LCB3aGljaCBtaWdodCBiZSB1bm1hdGNoZWQgd2l0aCB0aGUgZWxlbWVudCB2YWx1ZS4KICAgICAg
ICAgc2V0Rm9ybUNvbnRyb2xWYWx1ZU1hdGNoZXNSZW5kZXJlcihmYWxzZSk7CiAgICAgICAgIC8v
IFdlIG5lZWQgdG8gcmVzZXQgdGhlIHJlbmRlcmVyIHZhbHVlIGV4cGxpY2l0bHkgYmVjYXVzZSBh
biB1bmFjY2VwdGFibGUKQEAgLTg0MSw2ICs4NDEsMTAgQEAgdm9pZCBIVE1MSW5wdXRFbGVtZW50
OjpoYW5kbGVCbHVyRXZlbnQoKQogCiB2b2lkIEhUTUxJbnB1dEVsZW1lbnQ6OnNldFR5cGUoY29u
c3QgU3RyaW5nJiB0KQogeworICAgIC8vIEZJWE1FOiBUaGlzIHNob3VsZCBqdXN0IGNhbGwgc2V0
QXR0cmlidXRlLiBObyByZWFzb24gdG8gaGFuZGxlIHRoZSBlbXB0eSBzdHJpbmcgc3BlY2lhbGx5
LgorICAgIC8vIFdlIHNob3VsZCB3cml0ZSBhIHRlc3QgY2FzZSB0byBzaG93IHRoYXQgc2V0dGlu
ZyB0byB0aGUgZW1wdHkgc3RyaW5nIGRvZXMgbm90IHJlbW92ZSB0aGUKKyAgICAvLyBhdHRyaWJ1
dGUgaW4gb3RoZXIgYnJvd3NlcnMgYW5kIHRoZW4gZml4IHRoaXMuIE5vdGUgdGhhdCBzZXR0aW5n
IHRvIG51bGwgKmRvZXMqIHJlbW92ZQorICAgIC8vIHRoZSBhdHRyaWJ1dGUgYW5kIHNldEF0dHJp
YnV0ZSBpbXBsZW1lbnRzIHRoYXQuCiAgICAgaWYgKHQuaXNFbXB0eSgpKSB7CiAgICAgICAgIGlu
dCBleGNjb2RlOwogICAgICAgICByZW1vdmVBdHRyaWJ1dGUodHlwZUF0dHIsIGV4Y2NvZGUpOwpA
QCAtODQ4LDcgKzg1Miw3IEBAIHZvaWQgSFRNTElucHV0RWxlbWVudDo6c2V0VHlwZShjb25zdCBT
dHIKICAgICAgICAgc2V0QXR0cmlidXRlKHR5cGVBdHRyLCB0KTsKIH0KIAotdHlwZWRlZiBIYXNo
TWFwPFN0cmluZywgSFRNTElucHV0RWxlbWVudDo6SW5wdXRUeXBlLCBDYXNlRm9sZGluZ0hhc2g+
IElucHV0VHlwZU1hcDsKK3R5cGVkZWYgSGFzaE1hcDxTdHJpbmcsIEhUTUxJbnB1dEVsZW1lbnQ6
OkRlcHJlY2F0ZWRJbnB1dFR5cGUsIENhc2VGb2xkaW5nSGFzaD4gSW5wdXRUeXBlTWFwOwogc3Rh
dGljIFBhc3NPd25QdHI8SW5wdXRUeXBlTWFwPiBjcmVhdGVUeXBlTWFwKCkKIHsKICAgICBPd25Q
dHI8SW5wdXRUeXBlTWFwPiBtYXAgPSBhZG9wdFB0cihuZXcgSW5wdXRUeXBlTWFwKTsKQEAgLTg3
OSwxNSArODgzLDE2IEBAIHN0YXRpYyBQYXNzT3duUHRyPElucHV0VHlwZU1hcD4gY3JlYXRlVHkK
ICAgICByZXR1cm4gbWFwLnJlbGVhc2UoKTsKIH0KIAotdm9pZCBIVE1MSW5wdXRFbGVtZW50Ojpz
ZXRJbnB1dFR5cGUoY29uc3QgU3RyaW5nJiB0KQordm9pZCBIVE1MSW5wdXRFbGVtZW50Ojp1cGRh
dGVUeXBlKCkKIHsKICAgICBzdGF0aWMgY29uc3QgSW5wdXRUeXBlTWFwKiB0eXBlTWFwID0gY3Jl
YXRlVHlwZU1hcCgpLmxlYWtQdHIoKTsKLSAgICBJbnB1dFR5cGUgbmV3VHlwZSA9IHQuaXNOdWxs
KCkgPyBURVhUIDogdHlwZU1hcC0+Z2V0KHQpOworICAgIGNvbnN0IEF0b21pY1N0cmluZyYgdHlw
ZVN0cmluZyA9IGZhc3RHZXRBdHRyaWJ1dGUodHlwZUF0dHIpOworICAgIERlcHJlY2F0ZWRJbnB1
dFR5cGUgbmV3VHlwZSA9IHR5cGVTdHJpbmcuaXNFbXB0eSgpID8gVEVYVCA6IHR5cGVNYXAtPmdl
dCh0eXBlU3RyaW5nKTsKIAogICAgIC8vIElNUE9SVEFOVDogRG9uJ3QgYWxsb3cgdGhlIHR5cGUg
dG8gYmUgY2hhbmdlZCB0byBGSUxFIGFmdGVyIHRoZSBmaXJzdAogICAgIC8vIHR5cGUgY2hhbmdl
LCBvdGhlcndpc2UgYSBKYXZhU2NyaXB0IHByb2dyYW1tZXIgd291bGQgYmUgYWJsZSB0byBzZXQg
YSB0ZXh0CiAgICAgLy8gZmllbGQncyB2YWx1ZSB0byBzb21ldGhpbmcgbGlrZSAvZXRjL3Bhc3N3
ZCBhbmQgdGhlbiBjaGFuZ2UgaXQgdG8gYSBmaWxlIGZpZWxkLgotICAgIGlmIChpbnB1dFR5cGUo
KSAhPSBuZXdUeXBlKSB7CisgICAgaWYgKGRlcHJlY2F0ZWRJbnB1dFR5cGUoKSAhPSBuZXdUeXBl
KSB7CiAgICAgICAgIGlmIChuZXdUeXBlID09IEZJTEUgJiYgbV9oYXZlVHlwZSkKICAgICAgICAg
ICAgIC8vIFNldCB0aGUgYXR0cmlidXRlIGJhY2sgdG8gdGhlIG9sZCB2YWx1ZS4KICAgICAgICAg
ICAgIC8vIFVzZWZ1bCBpbiBjYXNlIHdlIHdlcmUgY2FsbGVkIGZyb20gaW5zaWRlIHBhcnNlTWFw
cGVkQXR0cmlidXRlLgpAQCAtOTAzLDEyICs5MDgsMTIgQEAgdm9pZCBIVE1MSW5wdXRFbGVtZW50
OjpzZXRJbnB1dFR5cGUoY29ucwogICAgICAgICAgICAgICAgIGRldGFjaCgpOwogCiAgICAgICAg
ICAgICBib29sIGRpZFN0b3JlVmFsdWUgPSBzdG9yZXNWYWx1ZVNlcGFyYXRlRnJvbUF0dHJpYnV0
ZSgpOwotICAgICAgICAgICAgYm9vbCB3YXNQYXNzd29yZEZpZWxkID0gaW5wdXRUeXBlKCkgPT0g
UEFTU1dPUkQ7CisgICAgICAgICAgICBib29sIHdhc1Bhc3N3b3JkRmllbGQgPSBkZXByZWNhdGVk
SW5wdXRUeXBlKCkgPT0gUEFTU1dPUkQ7CiAgICAgICAgICAgICBib29sIGRpZFJlc3BlY3RIZWln
aHRBbmRXaWR0aCA9IHJlc3BlY3RIZWlnaHRBbmRXaWR0aEF0dHJzKCk7Ci0gICAgICAgICAgICBt
X3R5cGUgPSBuZXdUeXBlOworICAgICAgICAgICAgbV9kZXByZWNhdGVkVHlwZU51bWJlciA9IG5l
d1R5cGU7CiAgICAgICAgICAgICBzZXROZWVkc1dpbGxWYWxpZGF0ZUNoZWNrKCk7CiAgICAgICAg
ICAgICBib29sIHdpbGxTdG9yZVZhbHVlID0gc3RvcmVzVmFsdWVTZXBhcmF0ZUZyb21BdHRyaWJ1
dGUoKTsKLSAgICAgICAgICAgIGJvb2wgaXNQYXNzd29yZEZpZWxkID0gaW5wdXRUeXBlKCkgPT0g
UEFTU1dPUkQ7CisgICAgICAgICAgICBib29sIGlzUGFzc3dvcmRGaWVsZCA9IGRlcHJlY2F0ZWRJ
bnB1dFR5cGUoKSA9PSBQQVNTV09SRDsKICAgICAgICAgICAgIGJvb2wgd2lsbFJlc3BlY3RIZWln
aHRBbmRXaWR0aCA9IHJlc3BlY3RIZWlnaHRBbmRXaWR0aEF0dHJzKCk7CiAKICAgICAgICAgICAg
IGlmIChkaWRTdG9yZVZhbHVlICYmICF3aWxsU3RvcmVWYWx1ZSAmJiAhbV9kYXRhLnZhbHVlKCku
aXNOdWxsKCkpIHsKQEAgLTk1MCwxMyArOTU1LDEzIEBAIHZvaWQgSFRNTElucHV0RWxlbWVudDo6
c2V0SW5wdXRUeXBlKGNvbnMKICAgICB9CiAgICAgbV9oYXZlVHlwZSA9IHRydWU7CiAKLSAgICBp
ZiAoaW5wdXRUeXBlKCkgIT0gSU1BR0UgJiYgbV9pbWFnZUxvYWRlcikKKyAgICBpZiAoZGVwcmVj
YXRlZElucHV0VHlwZSgpICE9IElNQUdFICYmIG1faW1hZ2VMb2FkZXIpCiAgICAgICAgIG1faW1h
Z2VMb2FkZXIuY2xlYXIoKTsKIH0KIAogc3RhdGljIGNvbnN0IEF0b21pY1N0cmluZyogY3JlYXRl
Rm9ybUNvbnRyb2xUeXBlcygpCiB7Ci0gICAgQXRvbWljU3RyaW5nKiB0eXBlcyA9IG5ldyBBdG9t
aWNTdHJpbmdbSFRNTElucHV0RWxlbWVudDo6bnVtYmVyT2ZUeXBlc107CisgICAgQXRvbWljU3Ry
aW5nKiB0eXBlcyA9IG5ldyBBdG9taWNTdHJpbmdbSFRNTElucHV0RWxlbWVudDo6ZGVwcmVjYXRl
ZE51bWJlck9mVHlwZXNdOwogICAgIC8vIFRoZSB2YWx1ZXMgbXVzdCBiZSBsb3dlcmNhc2VkIGJl
Y2F1c2UgdGhleSB3aWxsIGJlIHRoZSByZXR1cm4gdmFsdWVzIG9mCiAgICAgLy8gIGlucHV0LnR5
cGUgYW5kIGl0IG11c3QgYmUgbG93ZXJjYXNlIGFjY29yZGluZyB0byBET00gTGV2ZWwgMi4KICAg
ICB0eXBlc1tIVE1MSW5wdXRFbGVtZW50OjpCVVRUT05dID0gImJ1dHRvbiI7CkBAIC05ODksMTIg
Kzk5NCwxMiBAQCBzdGF0aWMgY29uc3QgQXRvbWljU3RyaW5nKiBjcmVhdGVGb3JtQ29uCiBjb25z
dCBBdG9taWNTdHJpbmcmIEhUTUxJbnB1dEVsZW1lbnQ6OmZvcm1Db250cm9sVHlwZSgpIGNvbnN0
CiB7CiAgICAgc3RhdGljIGNvbnN0IEF0b21pY1N0cmluZyogZm9ybUNvbnRyb2xUeXBlcyA9IGNy
ZWF0ZUZvcm1Db250cm9sVHlwZXMoKTsKLSAgICByZXR1cm4gZm9ybUNvbnRyb2xUeXBlc1tpbnB1
dFR5cGUoKV07CisgICAgcmV0dXJuIGZvcm1Db250cm9sVHlwZXNbZGVwcmVjYXRlZElucHV0VHlw
ZSgpXTsKIH0KIAogYm9vbCBIVE1MSW5wdXRFbGVtZW50OjpzYXZlRm9ybUNvbnRyb2xTdGF0ZShT
dHJpbmcmIHJlc3VsdCkgY29uc3QKIHsKLSAgICBzd2l0Y2ggKGlucHV0VHlwZSgpKSB7CisgICAg
c3dpdGNoIChkZXByZWNhdGVkSW5wdXRUeXBlKCkpIHsKICAgICBjYXNlIEJVVFRPTjoKICAgICBj
YXNlIENPTE9SOgogICAgIGNhc2UgREFURToKQEAgLTEwMzUsOCArMTA0MCw4IEBAIGJvb2wgSFRN
TElucHV0RWxlbWVudDo6c2F2ZUZvcm1Db250cm9sU3QKIAogdm9pZCBIVE1MSW5wdXRFbGVtZW50
OjpyZXN0b3JlRm9ybUNvbnRyb2xTdGF0ZShjb25zdCBTdHJpbmcmIHN0YXRlKQogewotICAgIEFT
U0VSVChpbnB1dFR5cGUoKSAhPSBQQVNTV09SRCk7IC8vIHNob3VsZCBuZXZlciBzYXZlL3Jlc3Rv
cmUgcGFzc3dvcmQgZmllbGRzCi0gICAgc3dpdGNoIChpbnB1dFR5cGUoKSkgeworICAgIEFTU0VS
VChkZXByZWNhdGVkSW5wdXRUeXBlKCkgIT0gUEFTU1dPUkQpOyAvLyBzaG91bGQgbmV2ZXIgc2F2
ZS9yZXN0b3JlIHBhc3N3b3JkIGZpZWxkcworICAgIHN3aXRjaCAoZGVwcmVjYXRlZElucHV0VHlw
ZSgpKSB7CiAgICAgY2FzZSBCVVRUT046CiAgICAgY2FzZSBDT0xPUjoKICAgICBjYXNlIERBVEU6
CkBAIC0xMDgzLDcgKzEwODgsNyBAQCBib29sIEhUTUxJbnB1dEVsZW1lbnQ6OmNhbkhhdmVTZWxl
Y3Rpb24oCiAKIHZvaWQgSFRNTElucHV0RWxlbWVudDo6YWNjZXNzS2V5QWN0aW9uKGJvb2wgc2Vu
ZFRvQW55RWxlbWVudCkKIHsKLSAgICBzd2l0Y2ggKGlucHV0VHlwZSgpKSB7CisgICAgc3dpdGNo
IChkZXByZWNhdGVkSW5wdXRUeXBlKCkpIHsKICAgICBjYXNlIEJVVFRPTjoKICAgICBjYXNlIENI
RUNLQk9YOgogICAgIGNhc2UgRklMRToKQEAgLTExMzAsNyArMTEzNSw3IEBAIGJvb2wgSFRNTElu
cHV0RWxlbWVudDo6bWFwVG9FbnRyeShjb25zdCAKICAgICB9IAogCiAgICAgaWYgKGF0dHJOYW1l
ID09IGFsaWduQXR0cikgewotICAgICAgICBpZiAoaW5wdXRUeXBlKCkgPT0gSU1BR0UpIHsKKyAg
ICAgICAgaWYgKGRlcHJlY2F0ZWRJbnB1dFR5cGUoKSA9PSBJTUFHRSkgewogICAgICAgICAgICAg
Ly8gU2hhcmUgd2l0aCA8aW1nPiBzaW5jZSB0aGUgYWxpZ25tZW50IGJlaGF2aW9yIGlzIHRoZSBz
YW1lLgogICAgICAgICAgICAgcmVzdWx0ID0gZVJlcGxhY2VkOwogICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOwpAQCAtMTE2Myw3ICsxMTY4LDcgQEAgdm9pZCBIVE1MSW5wdXRFbGVtZW50OjpwYXJz
ZU1hcHBlZEF0dHJpYgogICAgICAgICAgICAgICAgIHVucmVnaXN0ZXJGb3JBY3RpdmF0aW9uQ2Fs
bGJhY2tJZk5lZWRlZCgpOwogICAgICAgICB9CiAgICAgfSBlbHNlIGlmIChhdHRyLT5uYW1lKCkg
PT0gdHlwZUF0dHIpIHsKLSAgICAgICAgc2V0SW5wdXRUeXBlKGF0dHItPnZhbHVlKCkpOworICAg
ICAgICB1cGRhdGVUeXBlKCk7CiAgICAgfSBlbHNlIGlmIChhdHRyLT5uYW1lKCkgPT0gdmFsdWVB
dHRyKSB7CiAgICAgICAgIC8vIFdlIG9ubHkgbmVlZCB0byBzZXRDaGFuZ2VkIGlmIHRoZSBmb3Jt
IGlzIGxvb2tpbmcgYXQgdGhlIGRlZmF1bHQgdmFsdWUgcmlnaHQgbm93LgogICAgICAgICBpZiAo
bV9kYXRhLnZhbHVlKCkuaXNOdWxsKCkpCkBAIC0xMTgzLDEwICsxMTg4LDEwIEBAIHZvaWQgSFRN
TElucHV0RWxlbWVudDo6cGFyc2VNYXBwZWRBdHRyaWIKICAgICB9IGVsc2UgaWYgKGF0dHItPm5h
bWUoKSA9PSBzaXplQXR0cikKICAgICAgICAgSW5wdXRFbGVtZW50OjpwYXJzZVNpemVBdHRyaWJ1
dGUobV9kYXRhLCB0aGlzLCBhdHRyKTsKICAgICBlbHNlIGlmIChhdHRyLT5uYW1lKCkgPT0gYWx0
QXR0cikgewotICAgICAgICBpZiAocmVuZGVyZXIoKSAmJiBpbnB1dFR5cGUoKSA9PSBJTUFHRSkK
KyAgICAgICAgaWYgKHJlbmRlcmVyKCkgJiYgZGVwcmVjYXRlZElucHV0VHlwZSgpID09IElNQUdF
KQogICAgICAgICAgICAgdG9SZW5kZXJJbWFnZShyZW5kZXJlcigpKS0+dXBkYXRlQWx0VGV4dCgp
OwogICAgIH0gZWxzZSBpZiAoYXR0ci0+bmFtZSgpID09IHNyY0F0dHIpIHsKLSAgICAgICAgaWYg
KHJlbmRlcmVyKCkgJiYgaW5wdXRUeXBlKCkgPT0gSU1BR0UpIHsKKyAgICAgICAgaWYgKHJlbmRl
cmVyKCkgJiYgZGVwcmVjYXRlZElucHV0VHlwZSgpID09IElNQUdFKSB7CiAgICAgICAgICAgICBp
ZiAoIW1faW1hZ2VMb2FkZXIpCiAgICAgICAgICAgICAgICAgbV9pbWFnZUxvYWRlciA9IGFkb3B0
UHRyKG5ldyBIVE1MSW1hZ2VMb2FkZXIodGhpcykpOwogICAgICAgICAgICAgbV9pbWFnZUxvYWRl
ci0+dXBkYXRlRnJvbUVsZW1lbnRJZ25vcmluZ1ByZXZpb3VzRXJyb3IoKTsKQEAgLTEyMDAsNyAr
MTIwNSw3IEBAIHZvaWQgSFRNTElucHV0RWxlbWVudDo6cGFyc2VNYXBwZWRBdHRyaWIKICAgICAg
ICAgYWRkQ1NTTGVuZ3RoKGF0dHIsIENTU1Byb3BlcnR5TWFyZ2luTGVmdCwgYXR0ci0+dmFsdWUo
KSk7CiAgICAgICAgIGFkZENTU0xlbmd0aChhdHRyLCBDU1NQcm9wZXJ0eU1hcmdpblJpZ2h0LCBh
dHRyLT52YWx1ZSgpKTsKICAgICB9IGVsc2UgaWYgKGF0dHItPm5hbWUoKSA9PSBhbGlnbkF0dHIp
IHsKLSAgICAgICAgaWYgKGlucHV0VHlwZSgpID09IElNQUdFKQorICAgICAgICBpZiAoZGVwcmVj
YXRlZElucHV0VHlwZSgpID09IElNQUdFKQogICAgICAgICAgICAgYWRkSFRNTEFsaWdubWVudChh
dHRyKTsKICAgICB9IGVsc2UgaWYgKGF0dHItPm5hbWUoKSA9PSB3aWR0aEF0dHIpIHsKICAgICAg
ICAgaWYgKHJlc3BlY3RIZWlnaHRBbmRXaWR0aEF0dHJzKCkpCkBAIC0xMjI2LDcgKzEyMzEsNyBA
QCB2b2lkIEhUTUxJbnB1dEVsZW1lbnQ6OnBhcnNlTWFwcGVkQXR0cmliCiAgICAgICAgIHNldE5l
ZWRzU3R5bGVSZWNhbGMoKTsKICAgICBlbHNlIGlmIChhdHRyLT5uYW1lKCkgPT0gbWluQXR0cgog
ICAgICAgICAgICAgIHx8IGF0dHItPm5hbWUoKSA9PSBtYXhBdHRyKSB7Ci0gICAgICAgIGlmIChp
bnB1dFR5cGUoKSA9PSBSQU5HRSkgeworICAgICAgICBpZiAoZGVwcmVjYXRlZElucHV0VHlwZSgp
ID09IFJBTkdFKSB7CiAgICAgICAgICAgICAvLyBTYW5pdGl6ZSB0aGUgdmFsdWUuCiAgICAgICAg
ICAgICBzZXRWYWx1ZSh2YWx1ZSgpKTsKICAgICAgICAgICAgIHNldE5lZWRzU3R5bGVSZWNhbGMo
KTsKQEAgLTEyNTUsMTQgKzEyNjAsMTQgQEAgdm9pZCBIVE1MSW5wdXRFbGVtZW50OjpwYXJzZU1h
cHBlZEF0dHJpYgogCiBib29sIEhUTUxJbnB1dEVsZW1lbnQ6OnJlbmRlcmVySXNOZWVkZWQoUmVu
ZGVyU3R5bGUgKnN0eWxlKQogewotICAgIGlmIChpbnB1dFR5cGUoKSA9PSBISURERU4pCisgICAg
aWYgKGRlcHJlY2F0ZWRJbnB1dFR5cGUoKSA9PSBISURERU4pCiAgICAgICAgIHJldHVybiBmYWxz
ZTsKICAgICByZXR1cm4gSFRNTEZvcm1Db250cm9sRWxlbWVudFdpdGhTdGF0ZTo6cmVuZGVyZXJJ
c05lZWRlZChzdHlsZSk7CiB9CiAKIFJlbmRlck9iamVjdCogSFRNTElucHV0RWxlbWVudDo6Y3Jl
YXRlUmVuZGVyZXIoUmVuZGVyQXJlbmEgKmFyZW5hLCBSZW5kZXJTdHlsZSAqc3R5bGUpCiB7Ci0g
ICAgc3dpdGNoIChpbnB1dFR5cGUoKSkgeworICAgIHN3aXRjaCAoZGVwcmVjYXRlZElucHV0VHlw
ZSgpKSB7CiAgICAgY2FzZSBCVVRUT046CiAgICAgY2FzZSBSRVNFVDoKICAgICBjYXNlIFNVQk1J
VDoKQEAgLTEzMDYsMTMgKzEzMTEsMTMgQEAgdm9pZCBIVE1MSW5wdXRFbGVtZW50OjphdHRhY2go
KQogewogICAgIGlmICghbV9pbml0ZWQpIHsKICAgICAgICAgaWYgKCFtX2hhdmVUeXBlKQotICAg
ICAgICAgICAgc2V0SW5wdXRUeXBlKGdldEF0dHJpYnV0ZSh0eXBlQXR0cikpOworICAgICAgICAg
ICAgdXBkYXRlVHlwZSgpOwogICAgICAgICBtX2luaXRlZCA9IHRydWU7CiAgICAgfQogCiAgICAg
SFRNTEZvcm1Db250cm9sRWxlbWVudFdpdGhTdGF0ZTo6YXR0YWNoKCk7CiAKLSAgICBpZiAoaW5w
dXRUeXBlKCkgPT0gSU1BR0UpIHsKKyAgICBpZiAoZGVwcmVjYXRlZElucHV0VHlwZSgpID09IElN
QUdFKSB7CiAgICAgICAgIGlmICghbV9pbWFnZUxvYWRlcikKICAgICAgICAgICAgIG1faW1hZ2VM
b2FkZXIgPSBhZG9wdFB0cihuZXcgSFRNTEltYWdlTG9hZGVyKHRoaXMpKTsKICAgICAgICAgbV9p
bWFnZUxvYWRlci0+dXBkYXRlRnJvbUVsZW1lbnQoKTsKQEAgLTEzMjgsNyArMTMzMyw3IEBAIHZv
aWQgSFRNTElucHV0RWxlbWVudDo6YXR0YWNoKCkKICAgICAgICAgfQogICAgIH0KIAotICAgIGlm
IChpbnB1dFR5cGUoKSA9PSBSQURJTykKKyAgICBpZiAoZGVwcmVjYXRlZElucHV0VHlwZSgpID09
IFJBRElPKQogICAgICAgICB1cGRhdGVDaGVja2VkUmFkaW9CdXR0b25zKCk7CiAKICAgICBpZiAo
ZG9jdW1lbnQoKS0+Zm9jdXNlZE5vZGUoKSA9PSB0aGlzKQpAQCAtMTM2MSw3ICsxMzY2LDcgQEAg
Ym9vbCBIVE1MSW5wdXRFbGVtZW50Ojppc1N1Y2Nlc3NmdWxTdWJtaQogewogICAgIC8vIEhUTUwg
c3BlYyBzYXlzIHRoYXQgYnV0dG9ucyBtdXN0IGhhdmUgbmFtZXMgdG8gYmUgY29uc2lkZXJlZCBz
dWNjZXNzZnVsLgogICAgIC8vIEhvd2V2ZXIsIG90aGVyIGJyb3dzZXJzIGRvIG5vdCBpbXBvc2Ug
dGhpcyBjb25zdHJhaW50LiBTbyB3ZSBkbyBsaWtld2lzZS4KLSAgICByZXR1cm4gIWRpc2FibGVk
KCkgJiYgKGlucHV0VHlwZSgpID09IElNQUdFIHx8IGlucHV0VHlwZSgpID09IFNVQk1JVCk7Cisg
ICAgcmV0dXJuICFkaXNhYmxlZCgpICYmIChkZXByZWNhdGVkSW5wdXRUeXBlKCkgPT0gSU1BR0Ug
fHwgZGVwcmVjYXRlZElucHV0VHlwZSgpID09IFNVQk1JVCk7CiB9CiAKIGJvb2wgSFRNTElucHV0
RWxlbWVudDo6aXNBY3RpdmF0ZWRTdWJtaXQoKSBjb25zdApAQCAtMTM3NywxMCArMTM4MiwxMCBA
QCB2b2lkIEhUTUxJbnB1dEVsZW1lbnQ6OnNldEFjdGl2YXRlZFN1Ym1pCiBib29sIEhUTUxJbnB1
dEVsZW1lbnQ6OmFwcGVuZEZvcm1EYXRhKEZvcm1EYXRhTGlzdCYgZW5jb2RpbmcsIGJvb2wgbXVs
dGlwYXJ0KQogewogICAgIC8vIGltYWdlIGdlbmVyYXRlcyBpdHMgb3duIG5hbWVzLCBidXQgZm9y
IG90aGVyIHR5cGVzIHRoZXJlIGlzIG5vIGZvcm0gZGF0YSB1bmxlc3MgdGhlcmUncyBhIG5hbWUK
LSAgICBpZiAobmFtZSgpLmlzRW1wdHkoKSAmJiBpbnB1dFR5cGUoKSAhPSBJTUFHRSkKKyAgICBp
ZiAobmFtZSgpLmlzRW1wdHkoKSAmJiBkZXByZWNhdGVkSW5wdXRUeXBlKCkgIT0gSU1BR0UpCiAg
ICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIHN3aXRjaCAoaW5wdXRUeXBlKCkpIHsKKyAgICBz
d2l0Y2ggKGRlcHJlY2F0ZWRJbnB1dFR5cGUoKSkgewogICAgIGNhc2UgQ09MT1I6CiAgICAgY2Fz
ZSBEQVRFOgogICAgIGNhc2UgREFURVRJTUU6CkBAIC0xNDc2LDcgKzE0ODEsNyBAQCB2b2lkIEhU
TUxJbnB1dEVsZW1lbnQ6OnJlc2V0KCkKIAogYm9vbCBIVE1MSW5wdXRFbGVtZW50Ojppc1RleHRG
aWVsZCgpIGNvbnN0CiB7Ci0gICAgc3dpdGNoIChpbnB1dFR5cGUoKSkgeworICAgIHN3aXRjaCAo
ZGVwcmVjYXRlZElucHV0VHlwZSgpKSB7CiAgICAgY2FzZSBDT0xPUjoKICAgICBjYXNlIERBVEU6
CiAgICAgY2FzZSBEQVRFVElNRToKQEAgLTE1MTAsNyArMTUxNSw3IEBAIGJvb2wgSFRNTElucHV0
RWxlbWVudDo6aXNUZXh0RmllbGQoKSBjb24KIAogYm9vbCBIVE1MSW5wdXRFbGVtZW50Ojppc1Rl
eHRUeXBlKCkgY29uc3QKIHsKLSAgICBzd2l0Y2ggKGlucHV0VHlwZSgpKSB7CisgICAgc3dpdGNo
IChkZXByZWNhdGVkSW5wdXRUeXBlKCkpIHsKICAgICBjYXNlIEVNQUlMOgogICAgIGNhc2UgUEFT
U1dPUkQ6CiAgICAgY2FzZSBTRUFSQ0g6CkBAIC0xNTY2LDcgKzE1NzEsNyBAQCB2b2lkIEhUTUxJ
bnB1dEVsZW1lbnQ6OnNldENoZWNrZWQoYm9vbCBuCiAgICAgLy8gdW5jaGVja2VkIHRvIG1hdGNo
IG90aGVyIGJyb3dzZXJzLiBET00gaXMgbm90IGEgdXNlZnVsIHN0YW5kYXJkIGZvciB0aGlzCiAg
ICAgLy8gYmVjYXVzZSBpdCBzYXlzIG9ubHkgdG8gZmlyZSBjaGFuZ2UgZXZlbnRzIGF0ICJsb3Nl
IGZvY3VzIiB0aW1lLCB3aGljaCBpcwogICAgIC8vIGRlZmluaXRlbHkgd3JvbmcgaW4gcHJhY3Rp
Y2UgZm9yIHRoZXNlIHR5cGVzIG9mIGVsZW1lbnRzLgotICAgIGlmIChzZW5kQ2hhbmdlRXZlbnQg
JiYgaW5Eb2N1bWVudCgpICYmIChpbnB1dFR5cGUoKSAhPSBSQURJTyB8fCBub3dDaGVja2VkKSkK
KyAgICBpZiAoc2VuZENoYW5nZUV2ZW50ICYmIGluRG9jdW1lbnQoKSAmJiAoZGVwcmVjYXRlZElu
cHV0VHlwZSgpICE9IFJBRElPIHx8IG5vd0NoZWNrZWQpKQogICAgICAgICBkaXNwYXRjaEZvcm1D
b250cm9sQ2hhbmdlRXZlbnQoKTsKIH0KIApAQCAtMTYwNCw3ICsxNjA5LDcgQEAgdm9pZCBIVE1M
SW5wdXRFbGVtZW50Ojpjb3B5Tm9uQXR0cmlidXRlUAogCiBTdHJpbmcgSFRNTElucHV0RWxlbWVu
dDo6dmFsdWUoKSBjb25zdAogewotICAgIGlmIChpbnB1dFR5cGUoKSA9PSBGSUxFKSB7CisgICAg
aWYgKGRlcHJlY2F0ZWRJbnB1dFR5cGUoKSA9PSBGSUxFKSB7CiAgICAgICAgIGlmICghbV9maWxl
TGlzdC0+aXNFbXB0eSgpKSB7CiAgICAgICAgICAgICAvLyBIVE1MNSB0ZWxscyB1cyB0aGF0IHdl
J3JlIHN1cHBvc2VkIHRvIHVzZSB0aGlzIGdvb2Z5IHZhbHVlIGZvcgogICAgICAgICAgICAgLy8g
ZmlsZSBpbnB1dCBjb250cm9scy4gIEhpc3RvcmljYWxseSwgYnJvd3NlcnMgcmV2ZWFscyB0aGUg
cmVhbApAQCAtMTYyNSw5ICsxNjMwLDkgQEAgU3RyaW5nIEhUTUxJbnB1dEVsZW1lbnQ6OnZhbHVl
KCkgY29uc3QKICAgICAgICAgLy8gRm9yIENoZWNrYm94IFR5cGVzIGp1c3QgdXNlICJvbiIgb3Ig
IiIgYmFzZWQgb2ZmIHRoZSBjaGVja2VkKCkgc3RhdGUgb2YgdGhlIGNvbnRyb2wuCiAgICAgICAg
IC8vIEZvciBhIFJhbmdlIElucHV0IHVzZSB0aGUgY2FsY3VsYXRlZCBkZWZhdWx0IHZhbHVlLgog
ICAgICAgICBpZiAodmFsdWUuaXNOdWxsKCkpIHsKLSAgICAgICAgICAgIGlmIChpbnB1dFR5cGUo
KSA9PSBDSEVDS0JPWCB8fCBpbnB1dFR5cGUoKSA9PSBSQURJTykKKyAgICAgICAgICAgIGlmIChk
ZXByZWNhdGVkSW5wdXRUeXBlKCkgPT0gQ0hFQ0tCT1ggfHwgZGVwcmVjYXRlZElucHV0VHlwZSgp
ID09IFJBRElPKQogICAgICAgICAgICAgICAgIHJldHVybiBjaGVja2VkKCkgPyAib24iIDogIiI7
Ci0gICAgICAgICAgICBpZiAoaW5wdXRUeXBlKCkgPT0gUkFOR0UpCisgICAgICAgICAgICBpZiAo
ZGVwcmVjYXRlZElucHV0VHlwZSgpID09IFJBTkdFKQogICAgICAgICAgICAgICAgIHJldHVybiBz
ZXJpYWxpemVGb3JOdW1iZXJUeXBlKFN0ZXBSYW5nZSh0aGlzKS5kZWZhdWx0VmFsdWUoKSk7CiAg
ICAgICAgIH0KICAgICB9CkBAIC0xNjM5LDcgKzE2NDQsNyBAQCBTdHJpbmcgSFRNTElucHV0RWxl
bWVudDo6dmFsdWVXaXRoRGVmYXVsCiB7CiAgICAgU3RyaW5nIHYgPSB2YWx1ZSgpOwogICAgIGlm
ICh2LmlzTnVsbCgpKSB7Ci0gICAgICAgIHN3aXRjaCAoaW5wdXRUeXBlKCkpIHsKKyAgICAgICAg
c3dpdGNoIChkZXByZWNhdGVkSW5wdXRUeXBlKCkpIHsKICAgICAgICAgY2FzZSBCVVRUT046CiAg
ICAgICAgIGNhc2UgQ0hFQ0tCT1g6CiAgICAgICAgIGNhc2UgQ09MT1I6CkBAIC0xNjg3LDcgKzE2
OTIsNyBAQCBjb25zdCBTdHJpbmcmIEhUTUxJbnB1dEVsZW1lbnQ6OnN1Z2dlc3RlCiAKIHZvaWQg
SFRNTElucHV0RWxlbWVudDo6c2V0U3VnZ2VzdGVkVmFsdWUoY29uc3QgU3RyaW5nJiB2YWx1ZSkK
IHsKLSAgICBpZiAoaW5wdXRUeXBlKCkgIT0gVEVYVCkKKyAgICBpZiAoZGVwcmVjYXRlZElucHV0
VHlwZSgpICE9IFRFWFQpCiAgICAgICAgIHJldHVybjsKICAgICBzZXRGb3JtQ29udHJvbFZhbHVl
TWF0Y2hlc1JlbmRlcmVyKGZhbHNlKTsKICAgICBtX2RhdGEuc2V0U3VnZ2VzdGVkVmFsdWUoc2Fu
aXRpemVWYWx1ZSh2YWx1ZSkpOwpAQCAtMTcwMiwxMiArMTcwNywxMiBAQCB2b2lkIEhUTUxJbnB1
dEVsZW1lbnQ6OnNldFZhbHVlKGNvbnN0IFN0CiAgICAgLy8gRm9yIHNlY3VyaXR5IHJlYXNvbnMs
IHdlIGRvbid0IGFsbG93IHNldHRpbmcgdGhlIGZpbGVuYW1lLCBidXQgd2UgZG8gYWxsb3cgY2xl
YXJpbmcgaXQuCiAgICAgLy8gVGhlIEhUTUw1IHNwZWMgKGFzIG9mIHRoZSAxMC8yNC8wOCB3b3Jr
aW5nIGRyYWZ0KSBzYXlzIHRoYXQgdGhlIHZhbHVlIGF0dHJpYnV0ZSBpc24ndCBhcHBsaWNhYmxl
IHRvIHRoZSBmaWxlIHVwbG9hZCBjb250cm9sCiAgICAgLy8gYnV0IHdlIGRvbid0IHdhbnQgdG8g
YnJlYWsgZXhpc3Rpbmcgd2Vic2l0ZXMsIHdobyBtYXkgYmUgcmVseWluZyBvbiB0aGlzIG1ldGhv
ZCB0byBjbGVhciB0aGluZ3MuCi0gICAgaWYgKGlucHV0VHlwZSgpID09IEZJTEUgJiYgIXZhbHVl
LmlzRW1wdHkoKSkKKyAgICBpZiAoZGVwcmVjYXRlZElucHV0VHlwZSgpID09IEZJTEUgJiYgIXZh
bHVlLmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuOwogCiAgICAgc2V0Rm9ybUNvbnRyb2xWYWx1
ZU1hdGNoZXNSZW5kZXJlcihmYWxzZSk7CiAgICAgaWYgKHN0b3Jlc1ZhbHVlU2VwYXJhdGVGcm9t
QXR0cmlidXRlKCkpIHsKLSAgICAgICAgaWYgKGlucHV0VHlwZSgpID09IEZJTEUpCisgICAgICAg
IGlmIChkZXByZWNhdGVkSW5wdXRUeXBlKCkgPT0gRklMRSkKICAgICAgICAgICAgIG1fZmlsZUxp
c3QtPmNsZWFyKCk7CiAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgbV9kYXRhLnNldFZhbHVl
KHNhbml0aXplVmFsdWUodmFsdWUpKTsKQEAgLTE3MzksMTQgKzE3NDQsMTQgQEAgdm9pZCBIVE1M
SW5wdXRFbGVtZW50OjpzZXRWYWx1ZShjb25zdCBTdAogCiBkb3VibGUgSFRNTElucHV0RWxlbWVu
dDo6cGFyc2VUb0RvdWJsZShjb25zdCBTdHJpbmcmIHNyYywgZG91YmxlIGRlZmF1bHRWYWx1ZSkg
Y29uc3QKIHsKLSAgICBzd2l0Y2ggKGlucHV0VHlwZSgpKSB7CisgICAgc3dpdGNoIChkZXByZWNh
dGVkSW5wdXRUeXBlKCkpIHsKICAgICBjYXNlIERBVEU6CiAgICAgY2FzZSBEQVRFVElNRToKICAg
ICBjYXNlIERBVEVUSU1FTE9DQUw6CiAgICAgY2FzZSBUSU1FOgogICAgIGNhc2UgV0VFSzogewog
ICAgICAgICBEYXRlQ29tcG9uZW50cyBkYXRlOwotICAgICAgICBpZiAoIXBhcnNlVG9EYXRlQ29t
cG9uZW50cyhpbnB1dFR5cGUoKSwgc3JjLCAmZGF0ZSkpCisgICAgICAgIGlmICghcGFyc2VUb0Rh
dGVDb21wb25lbnRzKGRlcHJlY2F0ZWRJbnB1dFR5cGUoKSwgc3JjLCAmZGF0ZSkpCiAgICAgICAg
ICAgICByZXR1cm4gZGVmYXVsdFZhbHVlOwogICAgICAgICBkb3VibGUgbXNlYyA9IGRhdGUubWls
bGlzZWNvbmRzU2luY2VFcG9jaCgpOwogICAgICAgICBBU1NFUlQoaXNmaW5pdGUobXNlYykpOwpA
QCAtMTc1NCw3ICsxNzU5LDcgQEAgZG91YmxlIEhUTUxJbnB1dEVsZW1lbnQ6OnBhcnNlVG9Eb3Vi
bGUoYwogICAgIH0KICAgICBjYXNlIE1PTlRIOiB7CiAgICAgICAgIERhdGVDb21wb25lbnRzIGRh
dGU7Ci0gICAgICAgIGlmICghcGFyc2VUb0RhdGVDb21wb25lbnRzKGlucHV0VHlwZSgpLCBzcmMs
ICZkYXRlKSkKKyAgICAgICAgaWYgKCFwYXJzZVRvRGF0ZUNvbXBvbmVudHMoZGVwcmVjYXRlZElu
cHV0VHlwZSgpLCBzcmMsICZkYXRlKSkKICAgICAgICAgICAgIHJldHVybiBkZWZhdWx0VmFsdWU7
CiAgICAgICAgIGRvdWJsZSBtb250aHMgPSBkYXRlLm1vbnRoc1NpbmNlRXBvY2goKTsKICAgICAg
ICAgQVNTRVJUKGlzZmluaXRlKG1vbnRocykpOwpAQCAtMTc5Myw3ICsxNzk4LDcgQEAgZG91Ymxl
IEhUTUxJbnB1dEVsZW1lbnQ6OnBhcnNlVG9Eb3VibGUoYwogCiBkb3VibGUgSFRNTElucHV0RWxl
bWVudDo6dmFsdWVBc0RhdGUoKSBjb25zdAogewotICAgIHN3aXRjaCAoaW5wdXRUeXBlKCkpIHsK
KyAgICBzd2l0Y2ggKGRlcHJlY2F0ZWRJbnB1dFR5cGUoKSkgewogICAgIGNhc2UgREFURToKICAg
ICBjYXNlIERBVEVUSU1FOgogICAgIGNhc2UgVElNRToKQEAgLTE4MDEsNyArMTgwNiw3IEBAIGRv
dWJsZSBIVE1MSW5wdXRFbGVtZW50Ojp2YWx1ZUFzRGF0ZSgpIGMKICAgICAgICAgcmV0dXJuIHBh
cnNlVG9Eb3VibGUodmFsdWUoKSwgRGF0ZUNvbXBvbmVudHM6OmludmFsaWRNaWxsaXNlY29uZHMo
KSk7CiAgICAgY2FzZSBNT05USDogewogICAgICAgICBEYXRlQ29tcG9uZW50cyBkYXRlOwotICAg
ICAgICBpZiAoIXBhcnNlVG9EYXRlQ29tcG9uZW50cyhpbnB1dFR5cGUoKSwgdmFsdWUoKSwgJmRh
dGUpKQorICAgICAgICBpZiAoIXBhcnNlVG9EYXRlQ29tcG9uZW50cyhkZXByZWNhdGVkSW5wdXRU
eXBlKCksIHZhbHVlKCksICZkYXRlKSkKICAgICAgICAgICAgIHJldHVybiBEYXRlQ29tcG9uZW50
czo6aW52YWxpZE1pbGxpc2Vjb25kcygpOwogICAgICAgICBkb3VibGUgbXNlYyA9IGRhdGUubWls
bGlzZWNvbmRzU2luY2VFcG9jaCgpOwogICAgICAgICBBU1NFUlQoaXNmaW5pdGUobXNlYykpOwpA
QCAtMTgzNSw3ICsxODQwLDcgQEAgZG91YmxlIEhUTUxJbnB1dEVsZW1lbnQ6OnZhbHVlQXNEYXRl
KCkgYwogCiB2b2lkIEhUTUxJbnB1dEVsZW1lbnQ6OnNldFZhbHVlQXNEYXRlKGRvdWJsZSB2YWx1
ZSwgRXhjZXB0aW9uQ29kZSYgZWMpCiB7Ci0gICAgc3dpdGNoIChpbnB1dFR5cGUoKSkgeworICAg
IHN3aXRjaCAoZGVwcmVjYXRlZElucHV0VHlwZSgpKSB7CiAgICAgY2FzZSBEQVRFOgogICAgIGNh
c2UgREFURVRJTUU6CiAgICAgY2FzZSBUSU1FOgpAQCAtMTg3OSw3ICsxODg0LDcgQEAgdm9pZCBI
VE1MSW5wdXRFbGVtZW50OjpzZXRWYWx1ZUFzRGF0ZShkbwogZG91YmxlIEhUTUxJbnB1dEVsZW1l
bnQ6OnZhbHVlQXNOdW1iZXIoKSBjb25zdAogewogICAgIGNvbnN0IGRvdWJsZSBuYW4gPSBudW1l
cmljX2xpbWl0czxkb3VibGU+OjpxdWlldF9OYU4oKTsKLSAgICBzd2l0Y2ggKGlucHV0VHlwZSgp
KSB7CisgICAgc3dpdGNoIChkZXByZWNhdGVkSW5wdXRUeXBlKCkpIHsKICAgICBjYXNlIERBVEU6
CiAgICAgY2FzZSBEQVRFVElNRToKICAgICBjYXNlIERBVEVUSU1FTE9DQUw6CkBAIC0xOTE4LDcg
KzE5MjMsNyBAQCB2b2lkIEhUTUxJbnB1dEVsZW1lbnQ6OnNldFZhbHVlQXNOdW1iZXIoCiAgICAg
ICAgIGVjID0gTk9UX1NVUFBPUlRFRF9FUlI7CiAgICAgICAgIHJldHVybjsKICAgICB9Ci0gICAg
c3dpdGNoIChpbnB1dFR5cGUoKSkgeworICAgIHN3aXRjaCAoZGVwcmVjYXRlZElucHV0VHlwZSgp
KSB7CiAgICAgY2FzZSBEQVRFOgogICAgIGNhc2UgREFURVRJTUU6CiAgICAgY2FzZSBEQVRFVElN
RUxPQ0FMOgpAQCAtMTk1Niw3ICsxOTYxLDcgQEAgU3RyaW5nIEhUTUxJbnB1dEVsZW1lbnQ6OnNl
cmlhbGl6ZUZvckRhdAogewogICAgIGJvb2wgc3VjY2VzcyA9IGZhbHNlOwogICAgIERhdGVDb21w
b25lbnRzIGRhdGU7Ci0gICAgc3dpdGNoIChpbnB1dFR5cGUoKSkgeworICAgIHN3aXRjaCAoZGVw
cmVjYXRlZElucHV0VHlwZSgpKSB7CiAgICAgY2FzZSBEQVRFOgogICAgICAgICBzdWNjZXNzID0g
ZGF0ZS5zZXRNaWxsaXNlY29uZHNTaW5jZUVwb2NoRm9yRGF0ZSh2YWx1ZSk7CiAgICAgICAgIGJy
ZWFrOwpAQCAtMjAxMyw3ICsyMDE4LDcgQEAgU3RyaW5nIEhUTUxJbnB1dEVsZW1lbnQ6OnNlcmlh
bGl6ZShkb3VibAogewogICAgIGlmICghaXNmaW5pdGUodmFsdWUpKQogICAgICAgICByZXR1cm4g
U3RyaW5nKCk7Ci0gICAgc3dpdGNoIChpbnB1dFR5cGUoKSkgeworICAgIHN3aXRjaCAoZGVwcmVj
YXRlZElucHV0VHlwZSgpKSB7CiAgICAgY2FzZSBEQVRFOgogICAgIGNhc2UgREFURVRJTUU6CiAg
ICAgY2FzZSBEQVRFVElNRUxPQ0FMOgpAQCAtMjA2NSw3ICsyMDcwLDcgQEAgYm9vbCBIVE1MSW5w
dXRFbGVtZW50OjpzZWFyY2hFdmVudHNTaG91bAogdm9pZCBIVE1MSW5wdXRFbGVtZW50OjpzZXRW
YWx1ZUZyb21SZW5kZXJlcihjb25zdCBTdHJpbmcmIHZhbHVlKQogewogICAgIC8vIEZpbGUgdXBs
b2FkIGNvbnRyb2xzIHdpbGwgYWx3YXlzIHVzZSBzZXRGaWxlTGlzdEZyb21SZW5kZXJlci4KLSAg
ICBBU1NFUlQoaW5wdXRUeXBlKCkgIT0gRklMRSk7CisgICAgQVNTRVJUKGRlcHJlY2F0ZWRJbnB1
dFR5cGUoKSAhPSBGSUxFKTsKICAgICBtX2RhdGEuc2V0U3VnZ2VzdGVkVmFsdWUoU3RyaW5nKCkp
OwogICAgIHVwZGF0ZVBsYWNlaG9sZGVyVmlzaWJpbGl0eShmYWxzZSk7CiAgICAgSW5wdXRFbGVt
ZW50OjpzZXRWYWx1ZUZyb21SZW5kZXJlcihtX2RhdGEsIHRoaXMsIHRoaXMsIHZhbHVlKTsKQEAg
LTIxMTQsNyArMjExOSw3IEBAIHZvaWQgSFRNTElucHV0RWxlbWVudDo6c2V0RmlsZUxpc3RGcm9t
UmUKIAogYm9vbCBIVE1MSW5wdXRFbGVtZW50OjpzdG9yZXNWYWx1ZVNlcGFyYXRlRnJvbUF0dHJp
YnV0ZSgpIGNvbnN0CiB7Ci0gICAgc3dpdGNoIChpbnB1dFR5cGUoKSkgeworICAgIHN3aXRjaCAo
ZGVwcmVjYXRlZElucHV0VHlwZSgpKSB7CiAgICAgY2FzZSBCVVRUT046CiAgICAgY2FzZSBDSEVD
S0JPWDoKICAgICBjYXNlIEhJRERFTjoKQEAgLTIxNjAsOSArMjE2NSw5IEBAIHZvaWQqIEhUTUxJ
bnB1dEVsZW1lbnQ6OnByZURpc3BhdGNoRXZlbnQKICAgICAvLyBwcmV2ZW50RGVmYXVsdCBvciAi
cmV0dXJuIGZhbHNlIiBhcmUgdXNlZCB0byByZXZlcnNlIHRoZSBhdXRvbWF0aWMgY2hlY2tpbmcv
c2VsZWN0aW9uIHdlIGRvIGhlcmUuCiAgICAgLy8gVGhpcyByZXN1bHQgZ2l2ZXMgdXMgZW5vdWdo
IGluZm8gdG8gcGVyZm9ybSB0aGUgInVuZG8iIGluIHBvc3REaXNwYXRjaCBvZiB0aGUgYWN0aW9u
IHdlIHRha2UgaGVyZS4KICAgICB2b2lkKiByZXN1bHQgPSAwOyAKLSAgICBpZiAoKGlucHV0VHlw
ZSgpID09IENIRUNLQk9YIHx8IGlucHV0VHlwZSgpID09IFJBRElPKSAmJiBldnQtPnR5cGUoKSA9
PSBldmVudE5hbWVzKCkuY2xpY2tFdmVudCkgeworICAgIGlmICgoZGVwcmVjYXRlZElucHV0VHlw
ZSgpID09IENIRUNLQk9YIHx8IGRlcHJlY2F0ZWRJbnB1dFR5cGUoKSA9PSBSQURJTykgJiYgZXZ0
LT50eXBlKCkgPT0gZXZlbnROYW1lcygpLmNsaWNrRXZlbnQpIHsKICAgICAgICAgT3duUHRyPEV2
ZW50SGFuZGxpbmdTdGF0ZT4gc3RhdGUgPSBhZG9wdFB0cihuZXcgRXZlbnRIYW5kbGluZ1N0YXRl
KGluZGV0ZXJtaW5hdGUoKSwgY2hlY2tlZCgpKSk7Ci0gICAgICAgIGlmIChpbnB1dFR5cGUoKSA9
PSBDSEVDS0JPWCkgeworICAgICAgICBpZiAoZGVwcmVjYXRlZElucHV0VHlwZSgpID09IENIRUNL
Qk9YKSB7CiAgICAgICAgICAgICBpZiAoaW5kZXRlcm1pbmF0ZSgpKQogICAgICAgICAgICAgICAg
IHNldEluZGV0ZXJtaW5hdGUoZmFsc2UpOwogICAgICAgICAgICAgZWxzZQpAQCAtMjE4OSwxMCAr
MjE5NCwxMCBAQCB2b2lkKiBIVE1MSW5wdXRFbGVtZW50OjpwcmVEaXNwYXRjaEV2ZW50CiAKIHZv
aWQgSFRNTElucHV0RWxlbWVudDo6cG9zdERpc3BhdGNoRXZlbnRIYW5kbGVyKEV2ZW50ICpldnQs
IHZvaWQqIGRhdGEpCiB7Ci0gICAgaWYgKChpbnB1dFR5cGUoKSA9PSBDSEVDS0JPWCB8fCBpbnB1
dFR5cGUoKSA9PSBSQURJTykgJiYgZXZ0LT50eXBlKCkgPT0gZXZlbnROYW1lcygpLmNsaWNrRXZl
bnQpIHsKKyAgICBpZiAoKGRlcHJlY2F0ZWRJbnB1dFR5cGUoKSA9PSBDSEVDS0JPWCB8fCBkZXBy
ZWNhdGVkSW5wdXRUeXBlKCkgPT0gUkFESU8pICYmIGV2dC0+dHlwZSgpID09IGV2ZW50TmFtZXMo
KS5jbGlja0V2ZW50KSB7CiAgICAgICAgIAogICAgICAgICBpZiAoRXZlbnRIYW5kbGluZ1N0YXRl
KiBzdGF0ZSA9IHJlaW50ZXJwcmV0X2Nhc3Q8RXZlbnRIYW5kbGluZ1N0YXRlKj4oZGF0YSkpIHsK
LSAgICAgICAgICAgIGlmIChpbnB1dFR5cGUoKSA9PSBDSEVDS0JPWCkgeworICAgICAgICAgICAg
aWYgKGRlcHJlY2F0ZWRJbnB1dFR5cGUoKSA9PSBDSEVDS0JPWCkgewogICAgICAgICAgICAgICAg
IC8vIFJldmVyc2UgdGhlIGNoZWNraW5nIHdlIGRpZCBpbiBwcmVEaXNwYXRjaC4KICAgICAgICAg
ICAgICAgICBpZiAoZXZ0LT5kZWZhdWx0UHJldmVudGVkKCkgfHwgZXZ0LT5kZWZhdWx0SGFuZGxl
ZCgpKSB7CiAgICAgICAgICAgICAgICAgICAgIHNldEluZGV0ZXJtaW5hdGUoc3RhdGUtPm1faW5k
ZXRlcm1pbmF0ZSk7CkBAIC0yMjA1LDcgKzIyMTAsNyBAQCB2b2lkIEhUTUxJbnB1dEVsZW1lbnQ6
OnBvc3REaXNwYXRjaEV2ZW50CiAgICAgICAgICAgICAgICAgICAgIC8vIE1ha2Ugc3VyZSBpdCBp
cyBzdGlsbCBhIHJhZGlvIGJ1dHRvbiBhbmQgb25seSBkbyB0aGUgcmVzdG9yYXRpb24gaWYgaXQg
c3RpbGwKICAgICAgICAgICAgICAgICAgICAgLy8gYmVsb25ncyB0byBvdXIgZ3JvdXAuCiAKLSAg
ICAgICAgICAgICAgICAgICAgaWYgKGlucHV0ICYmIGlucHV0LT5mb3JtKCkgPT0gZm9ybSgpICYm
IGlucHV0LT5pbnB1dFR5cGUoKSA9PSBSQURJTyAmJiBpbnB1dC0+bmFtZSgpID09IG5hbWUoKSkg
eworICAgICAgICAgICAgICAgICAgICBpZiAoaW5wdXQgJiYgaW5wdXQtPmZvcm0oKSA9PSBmb3Jt
KCkgJiYgaW5wdXQtPmRlcHJlY2F0ZWRJbnB1dFR5cGUoKSA9PSBSQURJTyAmJiBpbnB1dC0+bmFt
ZSgpID09IG5hbWUoKSkgewogICAgICAgICAgICAgICAgICAgICAgICAgLy8gT2ssIHRoZSBvbGQg
cmFkaW8gYnV0dG9uIGlzIHN0aWxsIGluIG91ciBmb3JtIGFuZCBpbiBvdXIgZ3JvdXAgYW5kIGlz
IHN0aWxsIGEgCiAgICAgICAgICAgICAgICAgICAgICAgICAvLyByYWRpbyBidXR0b24sIHNvIGl0
J3Mgc2FmZSB0byByZXN0b3JlIHNlbGVjdGlvbiB0byBpdC4KICAgICAgICAgICAgICAgICAgICAg
ICAgIGlucHV0LT5zZXRDaGVja2VkKHRydWUpOwpAQCAtMjIzMSw3ICsyMjM2LDcgQEAgdm9pZCBI
VE1MSW5wdXRFbGVtZW50OjpkZWZhdWx0RXZlbnRIYW5kbAogICAgIGlmIChpc1RleHRGaWVsZCgp
ICYmIGV2dC0+dHlwZSgpID09IGV2ZW50TmFtZXMoKS50ZXh0SW5wdXRFdmVudCAmJiBldnQtPmlz
VGV4dEV2ZW50KCkgJiYgc3RhdGljX2Nhc3Q8VGV4dEV2ZW50Kj4oZXZ0KS0+ZGF0YSgpID09ICJc
biIpCiAgICAgICAgIGltcGxpY2l0U3VibWlzc2lvbiA9IHRydWU7CiAKLSAgICBpZiAoaW5wdXRU
eXBlKCkgPT0gSU1BR0UgJiYgZXZ0LT5pc01vdXNlRXZlbnQoKSAmJiBldnQtPnR5cGUoKSA9PSBl
dmVudE5hbWVzKCkuY2xpY2tFdmVudCkgeworICAgIGlmIChkZXByZWNhdGVkSW5wdXRUeXBlKCkg
PT0gSU1BR0UgJiYgZXZ0LT5pc01vdXNlRXZlbnQoKSAmJiBldnQtPnR5cGUoKSA9PSBldmVudE5h
bWVzKCkuY2xpY2tFdmVudCkgewogICAgICAgICAvLyByZWNvcmQgdGhlIG1vdXNlIHBvc2l0aW9u
IGZvciB3aGVuIHdlIGdldCB0aGUgRE9NQWN0aXZhdGUgZXZlbnQKICAgICAgICAgTW91c2VFdmVu
dCogbWUgPSBzdGF0aWNfY2FzdDxNb3VzZUV2ZW50Kj4oZXZ0KTsKICAgICAgICAgLy8gRklYTUU6
IFdlIGNvdWxkIGp1c3QgY2FsbCBvZmZzZXRYKCkgYW5kIG9mZnNldFkoKSBvbiB0aGUgZXZlbnQs
CkBAIC0yMjcyLDcgKzIyNzcsNyBAQCB2b2lkIEhUTUxJbnB1dEVsZW1lbnQ6OmRlZmF1bHRFdmVu
dEhhbmRsCiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBpZiAoaW5wdXRUeXBlKCkgPT0g
UkFESU8gJiYgZXZ0LT50eXBlKCkgPT0gZXZlbnROYW1lcygpLmNsaWNrRXZlbnQpIHsKKyAgICBp
ZiAoZGVwcmVjYXRlZElucHV0VHlwZSgpID09IFJBRElPICYmIGV2dC0+dHlwZSgpID09IGV2ZW50
TmFtZXMoKS5jbGlja0V2ZW50KSB7CiAgICAgICAgIGV2dC0+c2V0RGVmYXVsdEhhbmRsZWQoKTsK
ICAgICAgICAgcmV0dXJuOwogICAgIH0KQEAgLTIyOTIsMTAgKzIyOTcsMTAgQEAgdm9pZCBIVE1M
SW5wdXRFbGVtZW50OjpkZWZhdWx0RXZlbnRIYW5kbAogICAgIC8vIG9uIHRoZSBlbGVtZW50LCBv
ciBwcmVzc2VzIGVudGVyIHdoaWxlIGl0IGlzIHRoZSBhY3RpdmUgZWxlbWVudC4gSmF2YVNjcmlw
dCBjb2RlIHdpc2hpbmcgdG8gYWN0aXZhdGUgdGhlIGVsZW1lbnQKICAgICAvLyBtdXN0IGRpc3Bh
dGNoIGEgRE9NQWN0aXZhdGUgZXZlbnQgLSBhIGNsaWNrIGV2ZW50IHdpbGwgbm90IGRvIHRoZSBq
b2IuCiAgICAgaWYgKGV2dC0+dHlwZSgpID09IGV2ZW50TmFtZXMoKS5ET01BY3RpdmF0ZUV2ZW50
ICYmICFkaXNhYmxlZCgpKSB7Ci0gICAgICAgIGlmIChpbnB1dFR5cGUoKSA9PSBJTUFHRSB8fCBp
bnB1dFR5cGUoKSA9PSBTVUJNSVQgfHwgaW5wdXRUeXBlKCkgPT0gUkVTRVQpIHsKKyAgICAgICAg
aWYgKGRlcHJlY2F0ZWRJbnB1dFR5cGUoKSA9PSBJTUFHRSB8fCBkZXByZWNhdGVkSW5wdXRUeXBl
KCkgPT0gU1VCTUlUIHx8IGRlcHJlY2F0ZWRJbnB1dFR5cGUoKSA9PSBSRVNFVCkgewogICAgICAg
ICAgICAgaWYgKCFmb3JtKCkpCiAgICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAg
aWYgKGlucHV0VHlwZSgpID09IFJFU0VUKQorICAgICAgICAgICAgaWYgKGRlcHJlY2F0ZWRJbnB1
dFR5cGUoKSA9PSBSRVNFVCkKICAgICAgICAgICAgICAgICBmb3JtKCktPnJlc2V0KCk7CiAgICAg
ICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICAgICBtX2FjdGl2ZVN1Ym1pdCA9IHRydWU7CkBA
IC0yMzA5LDcgKzIzMTQsNyBAQCB2b2lkIEhUTUxJbnB1dEVsZW1lbnQ6OmRlZmF1bHRFdmVudEhh
bmRsCiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIG1fYWN0aXZlU3VibWl0ID0g
ZmFsc2U7CiAgICAgICAgICAgICB9Ci0gICAgICAgIH0gZWxzZSBpZiAoaW5wdXRUeXBlKCkgPT0g
RklMRSAmJiByZW5kZXJlcigpKQorICAgICAgICB9IGVsc2UgaWYgKGRlcHJlY2F0ZWRJbnB1dFR5
cGUoKSA9PSBGSUxFICYmIHJlbmRlcmVyKCkpCiAgICAgICAgICAgICB0b1JlbmRlckZpbGVVcGxv
YWRDb250cm9sKHJlbmRlcmVyKCkpLT5jbGljaygpOwogICAgIH0KIApAQCAtMjMyMSw3ICsyMzI2
LDcgQEAgdm9pZCBIVE1MSW5wdXRFbGVtZW50OjpkZWZhdWx0RXZlbnRIYW5kbAogICAgICAgICBp
bnQgY2hhckNvZGUgPSBzdGF0aWNfY2FzdDxLZXlib2FyZEV2ZW50Kj4oZXZ0KS0+Y2hhckNvZGUo
KTsKIAogICAgICAgICBpZiAoY2hhckNvZGUgPT0gJ1xyJykgewotICAgICAgICAgICAgc3dpdGNo
IChpbnB1dFR5cGUoKSkgeworICAgICAgICAgICAgc3dpdGNoIChkZXByZWNhdGVkSW5wdXRUeXBl
KCkpIHsKICAgICAgICAgICAgIGNhc2UgQ0hFQ0tCT1g6CiAgICAgICAgICAgICBjYXNlIENPTE9S
OgogICAgICAgICAgICAgY2FzZSBEQVRFOgpAQCAtMjM1NCw3ICsyMzU5LDcgQEAgdm9pZCBIVE1M
SW5wdXRFbGVtZW50OjpkZWZhdWx0RXZlbnRIYW5kbAogICAgICAgICAgICAgICAgIGJyZWFrOwog
ICAgICAgICAgICAgfQogICAgICAgICB9IGVsc2UgaWYgKGNoYXJDb2RlID09ICcgJykgewotICAg
ICAgICAgICAgc3dpdGNoIChpbnB1dFR5cGUoKSkgeworICAgICAgICAgICAgc3dpdGNoIChkZXBy
ZWNhdGVkSW5wdXRUeXBlKCkpIHsKICAgICAgICAgICAgIGNhc2UgQlVUVE9OOgogICAgICAgICAg
ICAgY2FzZSBDSEVDS0JPWDoKICAgICAgICAgICAgIGNhc2UgRklMRToKQEAgLTIzODEsNyArMjM4
Niw3IEBAIHZvaWQgSFRNTElucHV0RWxlbWVudDo6ZGVmYXVsdEV2ZW50SGFuZGwKICAgICAgICAg
U3RyaW5nIGtleSA9IHN0YXRpY19jYXN0PEtleWJvYXJkRXZlbnQqPihldnQpLT5rZXlJZGVudGlm
aWVyKCk7CiAKICAgICAgICAgaWYgKGtleSA9PSAiVSswMDIwIikgewotICAgICAgICAgICAgc3dp
dGNoIChpbnB1dFR5cGUoKSkgeworICAgICAgICAgICAgc3dpdGNoIChkZXByZWNhdGVkSW5wdXRU
eXBlKCkpIHsKICAgICAgICAgICAgIGNhc2UgQlVUVE9OOgogICAgICAgICAgICAgY2FzZSBDSEVD
S0JPWDoKICAgICAgICAgICAgIGNhc2UgRklMRToKQEAgLTIzOTgsNyArMjQwMyw3IEBAIHZvaWQg
SFRNTElucHV0RWxlbWVudDo6ZGVmYXVsdEV2ZW50SGFuZGwKICAgICAgICAgICAgIH0KICAgICAg
ICAgfQogCi0gICAgICAgIGlmIChpbnB1dFR5cGUoKSA9PSBSQURJTyAmJiAoa2V5ID09ICJVcCIg
fHwga2V5ID09ICJEb3duIiB8fCBrZXkgPT0gIkxlZnQiIHx8IGtleSA9PSAiUmlnaHQiKSkgewor
ICAgICAgICBpZiAoZGVwcmVjYXRlZElucHV0VHlwZSgpID09IFJBRElPICYmIChrZXkgPT0gIlVw
IiB8fCBrZXkgPT0gIkRvd24iIHx8IGtleSA9PSAiTGVmdCIgfHwga2V5ID09ICJSaWdodCIpKSB7
CiAgICAgICAgICAgICAvLyBMZWZ0IGFuZCB1cCBtZWFuICJwcmV2aW91cyByYWRpbyBidXR0b24i
LgogICAgICAgICAgICAgLy8gUmlnaHQgYW5kIGRvd24gbWVhbiAibmV4dCByYWRpbyBidXR0b24i
LgogICAgICAgICAgICAgLy8gVGVzdGVkIGluIFdpbklFLCBhbmQgZXZlbiBmb3IgUlRMLCBsZWZ0
IHN0aWxsIG1lYW5zIHByZXZpb3VzIHJhZGlvIGJ1dHRvbiAoYW5kIHNvIG1vdmVzCkBAIC0yNDIw
LDcgKzI0MjUsNyBAQCB2b2lkIEhUTUxJbnB1dEVsZW1lbnQ6OmRlZmF1bHRFdmVudEhhbmRsCiAg
ICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICAgaWYgKG4t
Pmhhc1RhZ05hbWUoaW5wdXRUYWcpKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICBIVE1MSW5w
dXRFbGVtZW50KiBpbnB1dEVsdCA9IHN0YXRpY19jYXN0PEhUTUxJbnB1dEVsZW1lbnQqPihuKTsK
LSAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpbnB1dEVsdC0+aW5wdXRUeXBlKCkgPT0gUkFE
SU8gJiYgaW5wdXRFbHQtPm5hbWUoKSA9PSBuYW1lKCkgJiYgaW5wdXRFbHQtPmlzRm9jdXNhYmxl
KCkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpbnB1dEVsdC0+ZGVwcmVjYXRlZElu
cHV0VHlwZSgpID09IFJBRElPICYmIGlucHV0RWx0LT5uYW1lKCkgPT0gbmFtZSgpICYmIGlucHV0
RWx0LT5pc0ZvY3VzYWJsZSgpKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5wdXRF
bHQtPnNldENoZWNrZWQodHJ1ZSk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZG9jdW1l
bnQoKS0+c2V0Rm9jdXNlZE5vZGUoaW5wdXRFbHQpOwogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGlucHV0RWx0LT5kaXNwYXRjaFNpbXVsYXRlZENsaWNrKGV2dCwgZmFsc2UsIGZhbHNlKTsK
QEAgLTI0MzksNyArMjQ0NCw3IEBAIHZvaWQgSFRNTElucHV0RWxlbWVudDo6ZGVmYXVsdEV2ZW50
SGFuZGwKICAgICAgICAgU3RyaW5nIGtleSA9IHN0YXRpY19jYXN0PEtleWJvYXJkRXZlbnQqPihl
dnQpLT5rZXlJZGVudGlmaWVyKCk7CiAKICAgICAgICAgaWYgKGtleSA9PSAiVSswMDIwIikgewot
ICAgICAgICAgICAgc3dpdGNoIChpbnB1dFR5cGUoKSkgeworICAgICAgICAgICAgc3dpdGNoIChk
ZXByZWNhdGVkSW5wdXRUeXBlKCkpIHsKICAgICAgICAgICAgIGNhc2UgQlVUVE9OOgogICAgICAg
ICAgICAgY2FzZSBDSEVDS0JPWDoKICAgICAgICAgICAgIGNhc2UgRklMRToKQEAgLTI1MDIsNyAr
MjUwNyw3IEBAIHZvaWQgSFRNTElucHV0RWxlbWVudDo6ZGVmYXVsdEV2ZW50SGFuZGwKIAogICAg
ICAgICBSZWZQdHI8SFRNTEZvcm1FbGVtZW50PiBmb3JtRm9yU3VibWlzc2lvbiA9IGZvcm0oKTsK
ICAgICAgICAgLy8gSWYgdGhlcmUgaXMgbm8gZm9ybSBhbmQgdGhlIGVsZW1lbnQgaXMgYW4gPGlz
aW5kZXg+LCB0aGVuIGNyZWF0ZSBhIHRlbXBvcmFyeSBmb3JtIGp1c3QgdG8gYmUgdXNlZCBmb3Ig
c3VibWlzc2lvbi4KLSAgICAgICAgaWYgKCFmb3JtRm9yU3VibWlzc2lvbiAmJiBpbnB1dFR5cGUo
KSA9PSBJU0lOREVYKQorICAgICAgICBpZiAoIWZvcm1Gb3JTdWJtaXNzaW9uICYmIGRlcHJlY2F0
ZWRJbnB1dFR5cGUoKSA9PSBJU0lOREVYKQogICAgICAgICAgICAgZm9ybUZvclN1Ym1pc3Npb24g
PSBjcmVhdGVUZW1wb3JhcnlGb3JtRm9ySXNJbmRleCgpOwogCiAgICAgICAgIC8vIEZvcm0gbWF5
IG5ldmVyIGhhdmUgYmVlbiBwcmVzZW50LCBvciBtYXkgaGF2ZSBiZWVuIGRlc3Ryb3llZCBieSBj
b2RlIHJlc3BvbmRpbmcgdG8gdGhlIGNoYW5nZSBldmVudC4KQEAgLTI1MzMsNyArMjUzOCw3IEBA
IHZvaWQgSFRNTElucHV0RWxlbWVudDo6ZGVmYXVsdEV2ZW50SGFuZGwKICAgICBpZiAoaXNUZXh0
RmllbGQoKSAmJiByZW5kZXJlcigpICYmIChldnQtPmlzTW91c2VFdmVudCgpIHx8IGV2dC0+aXNE
cmFnRXZlbnQoKSB8fCBldnQtPmlzV2hlZWxFdmVudCgpIHx8IGV2dC0+dHlwZSgpID09IGV2ZW50
TmFtZXMoKS5ibHVyRXZlbnQgfHwgZXZ0LT50eXBlKCkgPT0gZXZlbnROYW1lcygpLmZvY3VzRXZl
bnQpKQogICAgICAgICB0b1JlbmRlclRleHRDb250cm9sU2luZ2xlTGluZShyZW5kZXJlcigpKS0+
Zm9yd2FyZEV2ZW50KGV2dCk7CiAKLSAgICBpZiAoaW5wdXRUeXBlKCkgPT0gUkFOR0UgJiYgcmVu
ZGVyZXIoKSAmJiAoZXZ0LT5pc01vdXNlRXZlbnQoKSB8fCBldnQtPmlzRHJhZ0V2ZW50KCkgfHwg
ZXZ0LT5pc1doZWVsRXZlbnQoKSkpCisgICAgaWYgKGRlcHJlY2F0ZWRJbnB1dFR5cGUoKSA9PSBS
QU5HRSAmJiByZW5kZXJlcigpICYmIChldnQtPmlzTW91c2VFdmVudCgpIHx8IGV2dC0+aXNEcmFn
RXZlbnQoKSB8fCBldnQtPmlzV2hlZWxFdmVudCgpKSkKICAgICAgICAgdG9SZW5kZXJTbGlkZXIo
cmVuZGVyZXIoKSktPmZvcndhcmRFdmVudChldnQpOwogCiAgICAgaWYgKCFjYWxsQmFzZUNsYXNz
RWFybHkgJiYgIWV2dC0+ZGVmYXVsdEhhbmRsZWQoKSkKQEAgLTI1NDIsNyArMjU0Nyw3IEBAIHZv
aWQgSFRNTElucHV0RWxlbWVudDo6ZGVmYXVsdEV2ZW50SGFuZGwKIAogdm9pZCBIVE1MSW5wdXRF
bGVtZW50OjpoYW5kbGVCZWZvcmVUZXh0SW5zZXJ0ZWRFdmVudChFdmVudCogZXZlbnQpCiB7Ci0g
ICAgaWYgKGlucHV0VHlwZSgpID09IE5VTUJFUikgeworICAgIGlmIChkZXByZWNhdGVkSW5wdXRU
eXBlKCkgPT0gTlVNQkVSKSB7CiAgICAgICAgIEJlZm9yZVRleHRJbnNlcnRlZEV2ZW50KiB0ZXh0
RXZlbnQgPSBzdGF0aWNfY2FzdDxCZWZvcmVUZXh0SW5zZXJ0ZWRFdmVudCo+KGV2ZW50KTsKICAg
ICAgICAgdW5zaWduZWQgbGVuZ3RoID0gdGV4dEV2ZW50LT50ZXh0KCkubGVuZ3RoKCk7CiAgICAg
ICAgIGJvb2wgaGFzSW52YWxpZENoYXIgPSBmYWxzZTsKQEAgLTI2NjEsMjEgKzI2NjYsMjEgQEAg
dm9pZCBIVE1MSW5wdXRFbGVtZW50OjpzZXRBdXRvZmlsbGVkKGJvbwogCiBGaWxlTGlzdCogSFRN
TElucHV0RWxlbWVudDo6ZmlsZXMoKQogewotICAgIGlmIChpbnB1dFR5cGUoKSAhPSBGSUxFKQor
ICAgIGlmIChkZXByZWNhdGVkSW5wdXRUeXBlKCkgIT0gRklMRSkKICAgICAgICAgcmV0dXJuIDA7
CiAgICAgcmV0dXJuIG1fZmlsZUxpc3QuZ2V0KCk7CiB9CiAKIGJvb2wgSFRNTElucHV0RWxlbWVu
dDo6aXNBY2NlcHRhYmxlVmFsdWUoY29uc3QgU3RyaW5nJiBwcm9wb3NlZFZhbHVlKSBjb25zdAog
ewotICAgIGlmIChpbnB1dFR5cGUoKSAhPSBOVU1CRVIpCisgICAgaWYgKGRlcHJlY2F0ZWRJbnB1
dFR5cGUoKSAhPSBOVU1CRVIpCiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIHJldHVybiBwcm9w
b3NlZFZhbHVlLmlzRW1wdHkoKSB8fCBwYXJzZVRvRG91YmxlRm9yTnVtYmVyVHlwZShwcm9wb3Nl
ZFZhbHVlLCAwKTsKIH0KIAogU3RyaW5nIEhUTUxJbnB1dEVsZW1lbnQ6OnNhbml0aXplVmFsdWUo
Y29uc3QgU3RyaW5nJiBwcm9wb3NlZFZhbHVlKSBjb25zdAogewotICAgIGlmIChpbnB1dFR5cGUo
KSA9PSBOVU1CRVIpCisgICAgaWYgKGRlcHJlY2F0ZWRJbnB1dFR5cGUoKSA9PSBOVU1CRVIpCiAg
ICAgICAgIHJldHVybiBwYXJzZVRvRG91YmxlRm9yTnVtYmVyVHlwZShwcm9wb3NlZFZhbHVlLCAw
KSA/IHByb3Bvc2VkVmFsdWUgOiBTdHJpbmcoKTsKIAogICAgIGlmIChpc1RleHRGaWVsZCgpKQpA
QCAtMjY4NCw3ICsyNjg5LDcgQEAgU3RyaW5nIEhUTUxJbnB1dEVsZW1lbnQ6OnNhbml0aXplVmFs
dWUoYwogICAgIC8vIElmIHRoZSBwcm9wb3NlZFZhbHVlIGlzIG51bGwgdGhhbiB0aGlzIGlzIGEg
cmVzZXQgc2NlbmFyaW8gYW5kIHdlCiAgICAgLy8gd2FudCB0aGUgcmFuZ2UgaW5wdXQncyB2YWx1
ZSBhdHRyaWJ1dGUgdG8gdGFrZSBwcmlvcml0eSBvdmVyIHRoZQogICAgIC8vIGNhbGN1bGF0ZWQg
ZGVmYXVsdCAobWlkZGxlKSB2YWx1ZS4KLSAgICBpZiAoaW5wdXRUeXBlKCkgPT0gUkFOR0UgJiYg
IXByb3Bvc2VkVmFsdWUuaXNOdWxsKCkpCisgICAgaWYgKGRlcHJlY2F0ZWRJbnB1dFR5cGUoKSA9
PSBSQU5HRSAmJiAhcHJvcG9zZWRWYWx1ZS5pc051bGwoKSkKICAgICAgICAgcmV0dXJuIHNlcmlh
bGl6ZUZvck51bWJlclR5cGUoU3RlcFJhbmdlKHRoaXMpLmNsYW1wVmFsdWUocHJvcG9zZWRWYWx1
ZSkpOwogCiAgICAgcmV0dXJuIHByb3Bvc2VkVmFsdWU7CkBAIC0yNjkyLDEyICsyNjk3LDEyIEBA
IFN0cmluZyBIVE1MSW5wdXRFbGVtZW50OjpzYW5pdGl6ZVZhbHVlKGMKIAogYm9vbCBIVE1MSW5w
dXRFbGVtZW50OjpoYXNVbmFjY2VwdGFibGVWYWx1ZSgpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIGlu
cHV0VHlwZSgpID09IE5VTUJFUiAmJiByZW5kZXJlcigpICYmICFpc0FjY2VwdGFibGVWYWx1ZSh0
b1JlbmRlclRleHRDb250cm9sKHJlbmRlcmVyKCkpLT50ZXh0KCkpOworICAgIHJldHVybiBkZXBy
ZWNhdGVkSW5wdXRUeXBlKCkgPT0gTlVNQkVSICYmIHJlbmRlcmVyKCkgJiYgIWlzQWNjZXB0YWJs
ZVZhbHVlKHRvUmVuZGVyVGV4dENvbnRyb2wocmVuZGVyZXIoKSktPnRleHQoKSk7CiB9CiAKIGJv
b2wgSFRNTElucHV0RWxlbWVudDo6bmVlZHNBY3RpdmF0aW9uQ2FsbGJhY2soKQogewotICAgIHJl
dHVybiBpbnB1dFR5cGUoKSA9PSBQQVNTV09SRCB8fCBtX2F1dG9jb21wbGV0ZSA9PSBPZmY7Cisg
ICAgcmV0dXJuIGRlcHJlY2F0ZWRJbnB1dFR5cGUoKSA9PSBQQVNTV09SRCB8fCBtX2F1dG9jb21w
bGV0ZSA9PSBPZmY7CiB9CiAKIHZvaWQgSFRNTElucHV0RWxlbWVudDo6cmVnaXN0ZXJGb3JBY3Rp
dmF0aW9uQ2FsbGJhY2tJZk5lZWRlZCgpCkBAIC0yNzE3LDcgKzI3MjIsNyBAQCBib29sIEhUTUxJ
bnB1dEVsZW1lbnQ6OmlzUmVxdWlyZWRGb3JtQ29uCiAgICAgaWYgKCFyZXF1aXJlZCgpKQogICAg
ICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBzd2l0Y2ggKGlucHV0VHlwZSgpKSB7CisgICAgc3dp
dGNoIChkZXByZWNhdGVkSW5wdXRUeXBlKCkpIHsKICAgICBjYXNlIENIRUNLQk9YOgogICAgIGNh
c2UgREFURToKICAgICBjYXNlIERBVEVUSU1FOgpAQCAtMjgwNyw3ICsyODEyLDcgQEAgdm9pZCBI
VE1MSW5wdXRFbGVtZW50OjphZGRTdWJyZXNvdXJjZUF0dAogCiBib29sIEhUTUxJbnB1dEVsZW1l
bnQ6OnJlY2FsY1dpbGxWYWxpZGF0ZSgpIGNvbnN0CiB7Ci0gICAgc3dpdGNoIChpbnB1dFR5cGUo
KSkgeworICAgIHN3aXRjaCAoZGVwcmVjYXRlZElucHV0VHlwZSgpKSB7CiAgICAgY2FzZSBDSEVD
S0JPWDoKICAgICBjYXNlIENPTE9SOgogICAgIGNhc2UgREFURToKQEAgLTI4MzksNyArMjg0NCw3
IEBAIGJvb2wgSFRNTElucHV0RWxlbWVudDo6cmVjYWxjV2lsbFZhbGlkYXQKICAgICByZXR1cm4g
ZmFsc2U7CiB9CiAKLWJvb2wgSFRNTElucHV0RWxlbWVudDo6cGFyc2VUb0RhdGVDb21wb25lbnRz
KElucHV0VHlwZSB0eXBlLCBjb25zdCBTdHJpbmcmIGZvcm1TdHJpbmcsIERhdGVDb21wb25lbnRz
KiBvdXQpCitib29sIEhUTUxJbnB1dEVsZW1lbnQ6OnBhcnNlVG9EYXRlQ29tcG9uZW50cyhEZXBy
ZWNhdGVkSW5wdXRUeXBlIHR5cGUsIGNvbnN0IFN0cmluZyYgZm9ybVN0cmluZywgRGF0ZUNvbXBv
bmVudHMqIG91dCkKIHsKICAgICBpZiAoZm9ybVN0cmluZy5pc0VtcHR5KCkpCiAgICAgICAgIHJl
dHVybiBmYWxzZTsKQEAgLTI4ODEsNyArMjg4Niw3IEBAIEhUTUxEYXRhTGlzdEVsZW1lbnQqIEhU
TUxJbnB1dEVsZW1lbnQ6OmQKICAgICBpZiAoIW1faGFzTm9uRW1wdHlMaXN0KQogICAgICAgICBy
ZXR1cm4gMDsKIAotICAgIHN3aXRjaCAoaW5wdXRUeXBlKCkpIHsKKyAgICBzd2l0Y2ggKGRlcHJl
Y2F0ZWRJbnB1dFR5cGUoKSkgewogICAgIGNhc2UgQ09MT1I6CiAgICAgY2FzZSBEQVRFOgogICAg
IGNhc2UgREFURVRJTUU6CkBAIC0yOTg3LDcgKzI5OTIsNyBAQCB2b2lkIEhUTUxJbnB1dEVsZW1l
bnQ6OnNldFdhcElucHV0Rm9ybWF0CiAjaWYgRU5BQkxFKElOUFVUX1NQRUVDSCkKIGJvb2wgSFRN
TElucHV0RWxlbWVudDo6aXNTcGVlY2hFbmFibGVkKCkgY29uc3QKIHsKLSAgICBzd2l0Y2ggKGlu
cHV0VHlwZSgpKSB7CisgICAgc3dpdGNoIChkZXByZWNhdGVkSW5wdXRUeXBlKCkpIHsKICAgICAv
LyBGSVhNRTogQWRkIHN1cHBvcnQgZm9yIFJBTkdFLCBFTUFJTCwgVVJMLCBDT0xPUiBhbmQgREFU
RS9USU1FIGlucHV0IHR5cGVzLgogICAgIGNhc2UgTlVNQkVSOgogICAgIGNhc2UgUEFTU1dPUkQ6
CkluZGV4OiBXZWJDb3JlL2h0bWwvSFRNTElucHV0RWxlbWVudC5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdl
YkNvcmUvaHRtbC9IVE1MSW5wdXRFbGVtZW50LmgJKHJldmlzaW9uIDY3NzYzKQorKysgV2ViQ29y
ZS9odG1sL0hUTUxJbnB1dEVsZW1lbnQuaAkod29ya2luZyBjb3B5KQpAQCAtNDAsNyArNDAsNyBA
QCBjbGFzcyBWaXNpYmxlU2VsZWN0aW9uOwogCiBjbGFzcyBIVE1MSW5wdXRFbGVtZW50IDogcHVi
bGljIEhUTUxUZXh0Rm9ybUNvbnRyb2xFbGVtZW50LCBwdWJsaWMgSW5wdXRFbGVtZW50IHsKIHB1
YmxpYzoKLSAgICBlbnVtIElucHV0VHlwZSB7CisgICAgZW51bSBEZXByZWNhdGVkSW5wdXRUeXBl
IHsKICAgICAgICAgVEVYVCA9IDAsIC8vIFRFWFQgbXVzdCBiZSAwLgogICAgICAgICBQQVNTV09S
RCwKICAgICAgICAgSVNJTkRFWCwKQEAgLTY1LDkgKzY1LDkgQEAgcHVibGljOgogICAgICAgICBN
T05USCwKICAgICAgICAgVElNRSwKICAgICAgICAgV0VFSywKLSAgICAgICAgLy8gSWYgeW91IGFk
ZCBuZXcgdHlwZXMgb3IgY2hhbmdlIHRoZSBvcmRlciBvZiBlbnVtIHZhbHVlcywgdXBkYXRlIG51
bWJlck9mVHlwZXMgYmVsb3cuCisgICAgICAgIC8vIElmIHlvdSBhZGQgbmV3IHR5cGVzIG9yIGNo
YW5nZSB0aGUgb3JkZXIgb2YgZW51bSB2YWx1ZXMsIHVwZGF0ZSBkZXByZWNhdGVkTnVtYmVyT2ZU
eXBlcyBiZWxvdy4KICAgICB9OwotICAgIHN0YXRpYyBjb25zdCBpbnQgbnVtYmVyT2ZUeXBlcyA9
IFdFRUsgKyAxOworICAgIHN0YXRpYyBjb25zdCBpbnQgZGVwcmVjYXRlZE51bWJlck9mVHlwZXMg
PSBXRUVLICsgMTsKIAogICAgIHN0YXRpYyBQYXNzUmVmUHRyPEhUTUxJbnB1dEVsZW1lbnQ+IGNy
ZWF0ZShjb25zdCBRdWFsaWZpZWROYW1lJiwgRG9jdW1lbnQqLCBIVE1MRm9ybUVsZW1lbnQqKTsK
ICAgICB2aXJ0dWFsIH5IVE1MSW5wdXRFbGVtZW50KCk7CkBAIC0xMDEsMjIgKzEwMSwyMiBAQCBw
dWJsaWM6CiAgICAgLy8gc3RlcFVwKCkvc3RlcERvd24oKSBmb3IgdXNlci1pbnRlcmFjdGlvbi4K
ICAgICB2b2lkIHN0ZXBVcEZyb21SZW5kZXJlcihpbnQpOwogCi0gICAgYm9vbCBpc1RleHRCdXR0
b24oKSBjb25zdCB7IHJldHVybiBtX3R5cGUgPT0gU1VCTUlUIHx8IG1fdHlwZSA9PSBSRVNFVCB8
fCBtX3R5cGUgPT0gQlVUVE9OOyB9CisgICAgYm9vbCBpc1RleHRCdXR0b24oKSBjb25zdCB7IHJl
dHVybiBkZXByZWNhdGVkSW5wdXRUeXBlKCkgPT0gU1VCTUlUIHx8IGRlcHJlY2F0ZWRJbnB1dFR5
cGUoKSA9PSBSRVNFVCB8fCBkZXByZWNhdGVkSW5wdXRUeXBlKCkgPT0gQlVUVE9OOyB9CiAKLSAg
ICB2aXJ0dWFsIGJvb2wgaXNSYWRpb0J1dHRvbigpIGNvbnN0IHsgcmV0dXJuIG1fdHlwZSA9PSBS
QURJTzsgfQorICAgIHZpcnR1YWwgYm9vbCBpc1JhZGlvQnV0dG9uKCkgY29uc3QgeyByZXR1cm4g
ZGVwcmVjYXRlZElucHV0VHlwZSgpID09IFJBRElPOyB9CiAgICAgdmlydHVhbCBib29sIGlzVGV4
dEZpZWxkKCkgY29uc3Q7Ci0gICAgdmlydHVhbCBib29sIGlzU2VhcmNoRmllbGQoKSBjb25zdCB7
IHJldHVybiBtX3R5cGUgPT0gU0VBUkNIOyB9Ci0gICAgdmlydHVhbCBib29sIGlzSW5wdXRUeXBl
SGlkZGVuKCkgY29uc3QgeyByZXR1cm4gbV90eXBlID09IEhJRERFTjsgfQotICAgIHZpcnR1YWwg
Ym9vbCBpc1Bhc3N3b3JkRmllbGQoKSBjb25zdCB7IHJldHVybiBtX3R5cGUgPT0gUEFTU1dPUkQ7
IH0KLSAgICB2aXJ0dWFsIGJvb2wgaXNDaGVja2JveCgpIGNvbnN0IHsgcmV0dXJuIG1fdHlwZSA9
PSBDSEVDS0JPWDsgfQotCi0gICAgYm9vbCBpc0VtYWlsRmllbGQoKSBjb25zdCB7IHJldHVybiBt
X3R5cGUgPT0gRU1BSUw7IH0KLSAgICBib29sIGlzRmlsZVVwbG9hZCgpIGNvbnN0IHsgcmV0dXJu
IG1fdHlwZSA9PSBGSUxFOyB9Ci0gICAgYm9vbCBpc0ltYWdlQnV0dG9uKCkgY29uc3QgeyByZXR1
cm4gbV90eXBlID09IElNQUdFOyB9Ci0gICAgYm9vbCBpc051bWJlckZpZWxkKCkgY29uc3QgeyBy
ZXR1cm4gbV90eXBlID09IE5VTUJFUjsgfQotICAgIGJvb2wgaXNTdWJtaXRCdXR0b24oKSBjb25z
dCB7IHJldHVybiBtX3R5cGUgPT0gU1VCTUlUOyB9Ci0gICAgYm9vbCBpc1RlbGVwaG9uZUZpZWxk
KCkgY29uc3QgeyByZXR1cm4gbV90eXBlID09IFRFTEVQSE9ORTsgfQotICAgIGJvb2wgaXNVUkxG
aWVsZCgpIGNvbnN0IHsgcmV0dXJuIG1fdHlwZSA9PSBVUkw7IH0KKyAgICB2aXJ0dWFsIGJvb2wg
aXNTZWFyY2hGaWVsZCgpIGNvbnN0IHsgcmV0dXJuIGRlcHJlY2F0ZWRJbnB1dFR5cGUoKSA9PSBT
RUFSQ0g7IH0KKyAgICB2aXJ0dWFsIGJvb2wgaXNJbnB1dFR5cGVIaWRkZW4oKSBjb25zdCB7IHJl
dHVybiBkZXByZWNhdGVkSW5wdXRUeXBlKCkgPT0gSElEREVOOyB9CisgICAgdmlydHVhbCBib29s
IGlzUGFzc3dvcmRGaWVsZCgpIGNvbnN0IHsgcmV0dXJuIGRlcHJlY2F0ZWRJbnB1dFR5cGUoKSA9
PSBQQVNTV09SRDsgfQorICAgIHZpcnR1YWwgYm9vbCBpc0NoZWNrYm94KCkgY29uc3QgeyByZXR1
cm4gZGVwcmVjYXRlZElucHV0VHlwZSgpID09IENIRUNLQk9YOyB9CisKKyAgICBib29sIGlzRW1h
aWxGaWVsZCgpIGNvbnN0IHsgcmV0dXJuIGRlcHJlY2F0ZWRJbnB1dFR5cGUoKSA9PSBFTUFJTDsg
fQorICAgIGJvb2wgaXNGaWxlVXBsb2FkKCkgY29uc3QgeyByZXR1cm4gZGVwcmVjYXRlZElucHV0
VHlwZSgpID09IEZJTEU7IH0KKyAgICBib29sIGlzSW1hZ2VCdXR0b24oKSBjb25zdCB7IHJldHVy
biBkZXByZWNhdGVkSW5wdXRUeXBlKCkgPT0gSU1BR0U7IH0KKyAgICBib29sIGlzTnVtYmVyRmll
bGQoKSBjb25zdCB7IHJldHVybiBkZXByZWNhdGVkSW5wdXRUeXBlKCkgPT0gTlVNQkVSOyB9Cisg
ICAgYm9vbCBpc1N1Ym1pdEJ1dHRvbigpIGNvbnN0IHsgcmV0dXJuIGRlcHJlY2F0ZWRJbnB1dFR5
cGUoKSA9PSBTVUJNSVQ7IH0KKyAgICBib29sIGlzVGVsZXBob25lRmllbGQoKSBjb25zdCB7IHJl
dHVybiBkZXByZWNhdGVkSW5wdXRUeXBlKCkgPT0gVEVMRVBIT05FOyB9CisgICAgYm9vbCBpc1VS
TEZpZWxkKCkgY29uc3QgeyByZXR1cm4gZGVwcmVjYXRlZElucHV0VHlwZSgpID09IFVSTDsgfQog
CiAjaWYgRU5BQkxFKElOUFVUX1NQRUVDSCkKICAgICB2aXJ0dWFsIGJvb2wgaXNTcGVlY2hFbmFi
bGVkKCkgY29uc3Q7CkBAIC0xNzAsOCArMTcwLDcgQEAgcHVibGljOgogICAgIHZpcnR1YWwgYm9v
bCBpc0FjdGl2YXRlZFN1Ym1pdCgpIGNvbnN0OwogICAgIHZpcnR1YWwgdm9pZCBzZXRBY3RpdmF0
ZWRTdWJtaXQoYm9vbCBmbGFnKTsKIAotICAgIElucHV0VHlwZSBpbnB1dFR5cGUoKSBjb25zdCB7
IHJldHVybiBzdGF0aWNfY2FzdDxJbnB1dFR5cGU+KG1fdHlwZSk7IH0KLSAgICB2b2lkIHNldElu
cHV0VHlwZShjb25zdCBTdHJpbmcmKTsKKyAgICBEZXByZWNhdGVkSW5wdXRUeXBlIGRlcHJlY2F0
ZWRJbnB1dFR5cGUoKSBjb25zdCB7IHJldHVybiBzdGF0aWNfY2FzdDxEZXByZWNhdGVkSW5wdXRU
eXBlPihtX2RlcHJlY2F0ZWRUeXBlTnVtYmVyKTsgfQogCiAgICAgU3RyaW5nIGFsdFRleHQoKSBj
b25zdDsKIApAQCAtMjA4LDEwICsyMDcsMTAgQEAgcHVibGljOgogICAgIHZvaWQgYWRkU2VhcmNo
UmVzdWx0KCk7CiAgICAgdm9pZCBvblNlYXJjaCgpOwogCi0gICAgLy8gUGFyc2VzIHRoZSBzcGVj
aWZpZWQgc3RyaW5nIGFzIHRoZSBJbnB1dFR5cGUsIGFuZCByZXR1cm5zIHRydWUgaWYgaXQgaXMg
c3VjY2Vzc2Z1bGx5IHBhcnNlZC4KKyAgICAvLyBQYXJzZXMgdGhlIHNwZWNpZmllZCBzdHJpbmcg
YXMgdGhlIERlcHJlY2F0ZWRJbnB1dFR5cGUsIGFuZCByZXR1cm5zIHRydWUgaWYgaXQgaXMgc3Vj
Y2Vzc2Z1bGx5IHBhcnNlZC4KICAgICAvLyBBbiBpbnN0YW5jZSBwb2ludGVkIGJ5IHRoZSBEYXRl
Q29tcG9uZW50cyogcGFyYW1ldGVyIHdpbGwgaGF2ZSBwYXJzZWQgdmFsdWVzIGFuZCBiZQogICAg
IC8vIG1vZGlmaWVkIGV2ZW4gaWYgdGhlIHBhcnNpbmcgZmFpbHMuICBUaGUgRGF0ZUNvbXBvbmVu
dHMqIHBhcmFtZXRlciBtYXkgYmUgMC4KLSAgICBzdGF0aWMgYm9vbCBwYXJzZVRvRGF0ZUNvbXBv
bmVudHMoSW5wdXRUeXBlLCBjb25zdCBTdHJpbmcmLCBEYXRlQ29tcG9uZW50cyopOworICAgIHN0
YXRpYyBib29sIHBhcnNlVG9EYXRlQ29tcG9uZW50cyhEZXByZWNhdGVkSW5wdXRUeXBlLCBjb25z
dCBTdHJpbmcmLCBEYXRlQ29tcG9uZW50cyopOwogCiAjaWYgRU5BQkxFKERBVEFMSVNUKQogICAg
IEhUTUxFbGVtZW50KiBsaXN0KCkgY29uc3Q7CkBAIC0yMzUsNyArMjM0LDcgQEAgcHJpdmF0ZToK
IAogICAgIHZpcnR1YWwgYm9vbCBpc0tleWJvYXJkRm9jdXNhYmxlKEtleWJvYXJkRXZlbnQqKSBj
b25zdDsKICAgICB2aXJ0dWFsIGJvb2wgaXNNb3VzZUZvY3VzYWJsZSgpIGNvbnN0OwotICAgIHZp
cnR1YWwgYm9vbCBpc0VudW1lcmF0YWJsZSgpIGNvbnN0IHsgcmV0dXJuIGlucHV0VHlwZSgpICE9
IElNQUdFOyB9CisgICAgdmlydHVhbCBib29sIGlzRW51bWVyYXRhYmxlKCkgY29uc3QgeyByZXR1
cm4gZGVwcmVjYXRlZElucHV0VHlwZSgpICE9IElNQUdFOyB9CiAgICAgdmlydHVhbCB2b2lkIHVw
ZGF0ZUZvY3VzQXBwZWFyYW5jZShib29sIHJlc3RvcmVQcmV2aW91c1NlbGVjdGlvbik7CiAgICAg
dmlydHVhbCB2b2lkIGFib3V0VG9VbmxvYWQoKTsKICAgICB2aXJ0dWFsIGJvb2wgc2hvdWxkVXNl
SW5wdXRNZXRob2QoKSBjb25zdDsKQEAgLTI0MywxNSArMjQyLDE1IEBAIHByaXZhdGU6CiAgICAg
dmlydHVhbCBjb25zdCBBdG9taWNTdHJpbmcmIGZvcm1Db250cm9sTmFtZSgpIGNvbnN0OwogIAog
ICAgIC8vIGlzQ2hlY2tlZCBpcyB1c2VkIGJ5IHRoZSByZW5kZXJpbmcgdHJlZS9DU1Mgd2hpbGUg
Y2hlY2tlZCgpIGlzIHVzZWQgYnkgSlMgdG8gZGV0ZXJtaW5lIGNoZWNrZWQgc3RhdGUKLSAgICB2
aXJ0dWFsIGJvb2wgaXNDaGVja2VkKCkgY29uc3QgeyByZXR1cm4gY2hlY2tlZCgpICYmIChpbnB1
dFR5cGUoKSA9PSBDSEVDS0JPWCB8fCBpbnB1dFR5cGUoKSA9PSBSQURJTyk7IH0KKyAgICB2aXJ0
dWFsIGJvb2wgaXNDaGVja2VkKCkgY29uc3QgeyByZXR1cm4gY2hlY2tlZCgpICYmIChkZXByZWNh
dGVkSW5wdXRUeXBlKCkgPT0gQ0hFQ0tCT1ggfHwgZGVwcmVjYXRlZElucHV0VHlwZSgpID09IFJB
RElPKTsgfQogICAgIHZpcnR1YWwgYm9vbCBpc0luZGV0ZXJtaW5hdGUoKSBjb25zdCB7IHJldHVy
biBpbmRldGVybWluYXRlKCk7IH0KICAgICAKICAgICB2aXJ0dWFsIGJvb2wgaXNUZXh0Rm9ybUNv
bnRyb2woKSBjb25zdCB7IHJldHVybiBpc1RleHRGaWVsZCgpOyB9CiAKLSAgICB2aXJ0dWFsIGJv
b2wgaGFzU3BpbkJ1dHRvbigpIGNvbnN0IHsgcmV0dXJuIG1fdHlwZSA9PSBOVU1CRVIgfHwgbV90
eXBlID09IERBVEUgfHwgbV90eXBlID09IERBVEVUSU1FIHx8IG1fdHlwZSA9PSBEQVRFVElNRUxP
Q0FMIHx8IG1fdHlwZSA9PSBNT05USCB8fCBtX3R5cGUgPT0gVElNRSB8fCBtX3R5cGUgPT0gV0VF
SzsgfQorICAgIHZpcnR1YWwgYm9vbCBoYXNTcGluQnV0dG9uKCkgY29uc3QgeyByZXR1cm4gZGVw
cmVjYXRlZElucHV0VHlwZSgpID09IE5VTUJFUiB8fCBkZXByZWNhdGVkSW5wdXRUeXBlKCkgPT0g
REFURSB8fCBkZXByZWNhdGVkSW5wdXRUeXBlKCkgPT0gREFURVRJTUUgfHwgZGVwcmVjYXRlZElu
cHV0VHlwZSgpID09IERBVEVUSU1FTE9DQUwgfHwgZGVwcmVjYXRlZElucHV0VHlwZSgpID09IE1P
TlRIIHx8IGRlcHJlY2F0ZWRJbnB1dFR5cGUoKSA9PSBUSU1FIHx8IGRlcHJlY2F0ZWRJbnB1dFR5
cGUoKSA9PSBXRUVLOyB9CiAgICAgdmlydHVhbCBib29sIGNhblRyaWdnZXJJbXBsaWNpdFN1Ym1p
c3Npb24oKSBjb25zdCB7IHJldHVybiBpc1RleHRGaWVsZCgpOyB9CiAKLSAgICBib29sIGFsbG93
c0luZGV0ZXJtaW5hdGUoKSBjb25zdCB7IHJldHVybiBpbnB1dFR5cGUoKSA9PSBDSEVDS0JPWCB8
fCBpbnB1dFR5cGUoKSA9PSBSQURJTzsgfQorICAgIGJvb2wgYWxsb3dzSW5kZXRlcm1pbmF0ZSgp
IGNvbnN0IHsgcmV0dXJuIGRlcHJlY2F0ZWRJbnB1dFR5cGUoKSA9PSBDSEVDS0JPWCB8fCBkZXBy
ZWNhdGVkSW5wdXRUeXBlKCkgPT0gUkFESU87IH0KIAogICAgIHZpcnR1YWwgY29uc3QgQXRvbWlj
U3RyaW5nJiBmb3JtQ29udHJvbFR5cGUoKSBjb25zdDsKIApAQCAtMjc2LDcgKzI3NSw3IEBAIHBy
aXZhdGU6CiAgICAgdmlydHVhbCBib29sIGlzU3VjY2Vzc2Z1bFN1Ym1pdEJ1dHRvbigpIGNvbnN0
OwogCiAgICAgLy8gUmVwb3J0IGlmIHRoaXMgaW5wdXQgdHlwZSB1c2VzIGhlaWdodCAmIHdpZHRo
IGF0dHJpYnV0ZXMKLSAgICBib29sIHJlc3BlY3RIZWlnaHRBbmRXaWR0aEF0dHJzKCkgY29uc3Qg
eyByZXR1cm4gaW5wdXRUeXBlKCkgPT0gSU1BR0UgfHwgaW5wdXRUeXBlKCkgPT0gSElEREVOOyB9
CisgICAgYm9vbCByZXNwZWN0SGVpZ2h0QW5kV2lkdGhBdHRycygpIGNvbnN0IHsgcmV0dXJuIGRl
cHJlY2F0ZWRJbnB1dFR5cGUoKSA9PSBJTUFHRSB8fCBkZXByZWNhdGVkSW5wdXRUeXBlKCkgPT0g
SElEREVOOyB9CiAKICAgICB2aXJ0dWFsIHZvaWQgcmVzZXQoKTsKIApAQCAtMzA0LDcgKzMwMyw3
IEBAIHByaXZhdGU6CiAgICAgdmlydHVhbCBib29sIHN1cHBvcnRzTWF4TGVuZ3RoKCkgY29uc3Qg
eyByZXR1cm4gaXNUZXh0VHlwZSgpOyB9CiAgICAgYm9vbCBpc1RleHRUeXBlKCkgY29uc3Q7CiAK
LSAgICB2aXJ0dWFsIGJvb2wgc3VwcG9ydHNQbGFjZWhvbGRlcigpIGNvbnN0IHsgcmV0dXJuIGlz
VGV4dFR5cGUoKSB8fCBpbnB1dFR5cGUoKSA9PSBJU0lOREVYOyB9CisgICAgdmlydHVhbCBib29s
IHN1cHBvcnRzUGxhY2Vob2xkZXIoKSBjb25zdCB7IHJldHVybiBpc1RleHRUeXBlKCkgfHwgZGVw
cmVjYXRlZElucHV0VHlwZSgpID09IElTSU5ERVg7IH0KICAgICB2aXJ0dWFsIGJvb2wgaXNFbXB0
eVZhbHVlKCkgY29uc3QgeyByZXR1cm4gdmFsdWUoKS5pc0VtcHR5KCk7IH0KICAgICB2aXJ0dWFs
IHZvaWQgaGFuZGxlRm9jdXNFdmVudCgpOwogICAgIHZpcnR1YWwgdm9pZCBoYW5kbGVCbHVyRXZl
bnQoKTsKQEAgLTMxNSw2ICszMTQsOCBAQCBwcml2YXRlOgogICAgIHZpcnR1YWwgYm9vbCBpc1Jl
cXVpcmVkRm9ybUNvbnRyb2woKSBjb25zdDsKICAgICB2aXJ0dWFsIGJvb2wgcmVjYWxjV2lsbFZh
bGlkYXRlKCkgY29uc3Q7CiAKKyAgICB2b2lkIHVwZGF0ZVR5cGUoKTsKKwogICAgIHZvaWQgdXBk
YXRlQ2hlY2tlZFJhZGlvQnV0dG9ucygpOwogICAgIAogICAgIHZvaWQgaGFuZGxlQmVmb3JlVGV4
dEluc2VydGVkRXZlbnQoRXZlbnQqKTsKQEAgLTM1NCw3ICszNTUsNyBAQCBwcml2YXRlOgogICAg
IHNob3J0IG1fbWF4UmVzdWx0czsKICAgICBPd25QdHI8SFRNTEltYWdlTG9hZGVyPiBtX2ltYWdl
TG9hZGVyOwogICAgIFJlZlB0cjxGaWxlTGlzdD4gbV9maWxlTGlzdDsKLSAgICB1bnNpZ25lZCBt
X3R5cGUgOiA1OyAvLyBJbnB1dFR5cGUgCisgICAgdW5zaWduZWQgbV9kZXByZWNhdGVkVHlwZU51
bWJlciA6IDU7IC8vIERlcHJlY2F0ZWRJbnB1dFR5cGUgCiAgICAgYm9vbCBtX2NoZWNrZWQgOiAx
OwogICAgIGJvb2wgbV9kZWZhdWx0Q2hlY2tlZCA6IDE7CiAgICAgYm9vbCBtX3VzZURlZmF1bHRD
aGVja2VkIDogMTsKSW5kZXg6IFdlYkNvcmUvcmVuZGVyaW5nL01lZGlhQ29udHJvbEVsZW1lbnRz
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3JlbmRlcmluZy9NZWRpYUNvbnRyb2xFbGVtZW50
cy5jcHAJKHJldmlzaW9uIDY3NzYzKQorKysgV2ViQ29yZS9yZW5kZXJpbmcvTWVkaWFDb250cm9s
RWxlbWVudHMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNTAsNyArMzUwLDcgQEAgTWVkaWFDb250
cm9sSW5wdXRFbGVtZW50OjpNZWRpYUNvbnRyb2xJbgogICAgICwgbV9tZWRpYUVsZW1lbnQobWVk
aWFFbGVtZW50KQogICAgICwgbV9wc2V1ZG9TdHlsZUlkKHBzZXVkbykKIHsKLSAgICBzZXRJbnB1
dFR5cGUodHlwZSk7CisgICAgc2V0VHlwZSh0eXBlKTsKICAgICBzZXRJbkRvY3VtZW50KCk7CiAK
ICAgICBzd2l0Y2ggKHBzZXVkbykgewpJbmRleDogV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyRmls
ZVVwbG9hZENvbnRyb2wuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
ckZpbGVVcGxvYWRDb250cm9sLmNwcAkocmV2aXNpb24gNjc3NjMpCisrKyBXZWJDb3JlL3JlbmRl
cmluZy9SZW5kZXJGaWxlVXBsb2FkQ29udHJvbC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE0Niw3
ICsxNDYsNyBAQCB2b2lkIFJlbmRlckZpbGVVcGxvYWRDb250cm9sOjp1cGRhdGVGcm9tCiAgICAg
CiAgICAgaWYgKCFtX2J1dHRvbikgewogICAgICAgICBtX2J1dHRvbiA9IFNoYWRvd0lucHV0RWxl
bWVudDo6Y3JlYXRlKGlucHV0RWxlbWVudCk7Ci0gICAgICAgIG1fYnV0dG9uLT5zZXRJbnB1dFR5
cGUoImJ1dHRvbiIpOworICAgICAgICBtX2J1dHRvbi0+c2V0VHlwZSgiYnV0dG9uIik7CiAgICAg
ICAgIG1fYnV0dG9uLT5zZXRWYWx1ZShmaWxlQnV0dG9uQ2hvb3NlRmlsZUxhYmVsKCkpOwogICAg
ICAgICBSZWZQdHI8UmVuZGVyU3R5bGU+IGJ1dHRvblN0eWxlID0gY3JlYXRlQnV0dG9uU3R5bGUo
c3R5bGUoKSk7CiAgICAgICAgIFJlbmRlck9iamVjdCogcmVuZGVyZXIgPSBtX2J1dHRvbi0+Y3Jl
YXRlUmVuZGVyZXIocmVuZGVyQXJlbmEoKSwgYnV0dG9uU3R5bGUuZ2V0KCkpOwpJbmRleDogV2Vi
S2l0L2Nocm9taXVtL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQvY2hyb21pdW0vQ2hh
bmdlTG9nCShyZXZpc2lvbiA2Nzc2OSkKKysrIFdlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cJKHdv
cmtpbmcgY29weSkKQEAgLTEsMyArMSwxOCBAQAorMjAxMC0wOS0xNyAgRGFyaW4gQWRsZXIgIDxk
YXJpbkBhcHBsZS5jb20+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisK
KyAgICAgICAgRGVwcmVjYXRlIHRoZSBpbnB1dFR5cGUgZnVuY3Rpb24gb24gSFRNTElucHV0RWxl
bWVudAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NDYw
MjMKKworICAgICAgICAqIHNyYy9XZWJJbnB1dEVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViS2l0
OjpXZWJJbnB1dEVsZW1lbnQ6OmlucHV0VHlwZSk6CisgICAgICAgICogc3JjL1dlYlBhc3N3b3Jk
Rm9ybVV0aWxzLmNwcDoKKyAgICAgICAgKFdlYktpdDo6ZmluZFBhc3N3b3JkRm9ybUZpZWxkcyk6
CisgICAgICAgICogc3JjL1dlYlNlYXJjaGFibGVGb3JtRGF0YS5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpIYXNTdWl0YWJsZVRleHRFbGVtZW50KToKKyAgICAgICAgVXNlIGRlcHJlY2F0ZWRJbnB1
dFR5cGUgaW5zdGVhZCBvZiBpbnB1dFR5cGUuCisKIDIwMTAtMDktMTcgIERhcmluIEFkbGVyICA8
ZGFyaW5AYXBwbGUuY29tPgogCiAgICAgICAgIFJldmlld2VkIGJ5IFNhbSBXZWluaWcuCkluZGV4
OiBXZWJLaXQvY2hyb21pdW0vc3JjL1dlYklucHV0RWxlbWVudC5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
V2ViS2l0L2Nocm9taXVtL3NyYy9XZWJJbnB1dEVsZW1lbnQuY3BwCShyZXZpc2lvbiA2Nzc2MykK
KysrIFdlYktpdC9jaHJvbWl1bS9zcmMvV2ViSW5wdXRFbGVtZW50LmNwcAkod29ya2luZyBjb3B5
KQpAQCAtNTcsNyArNTcsNyBAQCBib29sIFdlYklucHV0RWxlbWVudDo6aXNFbmFibGVkRm9ybUNv
bnRyCiAKIFdlYklucHV0RWxlbWVudDo6SW5wdXRUeXBlIFdlYklucHV0RWxlbWVudDo6aW5wdXRU
eXBlKCkgY29uc3QKIHsKLSAgICByZXR1cm4gc3RhdGljX2Nhc3Q8SW5wdXRUeXBlPihjb25zdFVu
d3JhcDxIVE1MSW5wdXRFbGVtZW50PigpLT5pbnB1dFR5cGUoKSk7CisgICAgcmV0dXJuIHN0YXRp
Y19jYXN0PElucHV0VHlwZT4oY29uc3RVbndyYXA8SFRNTElucHV0RWxlbWVudD4oKS0+ZGVwcmVj
YXRlZElucHV0VHlwZSgpKTsKIH0KIAogaW50IFdlYklucHV0RWxlbWVudDo6bWF4TGVuZ3RoKCkg
Y29uc3QKSW5kZXg6IFdlYktpdC9jaHJvbWl1bS9zcmMvV2ViUGFzc3dvcmRGb3JtVXRpbHMuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFdlYktpdC9jaHJvbWl1bS9zcmMvV2ViUGFzc3dvcmRGb3JtVXRpbHMu
Y3BwCShyZXZpc2lvbiA2Nzc2MykKKysrIFdlYktpdC9jaHJvbWl1bS9zcmMvV2ViUGFzc3dvcmRG
b3JtVXRpbHMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC05OCw4ICs5OCw5IEBAIHZvaWQgZmluZFBh
c3N3b3JkRm9ybUZpZWxkcyhIVE1MRm9ybUVsZW0KICAgICAgICAgICAgIGlmICghaW5wdXRFbGVt
ZW50LT5pc0VuYWJsZWRGb3JtQ29udHJvbCgpKQogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwog
Ci0gICAgICAgICAgICAvLyBGSVhNRTogVGhpcyBuZWVkcyB0byB1c2UgYSBmdW5jdGlvbiBvdGhl
ciB0aGFuIGlucHV0VHlwZS4KLSAgICAgICAgICAgIGlmICgoaW5wdXRFbGVtZW50LT5pbnB1dFR5
cGUoKSA9PSBIVE1MSW5wdXRFbGVtZW50OjpURVhUKQorICAgICAgICAgICAgLy8gRklYTUU6IFRo
aXMgbmVlZHMgdG8gdXNlIGEgZnVuY3Rpb24gb3RoZXIgdGhhbiBkZXByZWNhdGVkSW5wdXRUeXBl
LgorICAgICAgICAgICAgLy8gRG9lcyB0aGlzIHJlYWxseSB3YW50IHRvIHNwZWNpYWwtY2FzZSBU
RVhULCBhbmQgbm90IG90aGVyIHRleHQtZmllbGQtbGlrZSBpbnB1dCBlbGVtZW50cz8KKyAgICAg
ICAgICAgIGlmICgoaW5wdXRFbGVtZW50LT5kZXByZWNhdGVkSW5wdXRUeXBlKCkgPT0gSFRNTElu
cHV0RWxlbWVudDo6VEVYVCkKICAgICAgICAgICAgICAgICAmJiAoaW5wdXRFbGVtZW50LT5hdXRv
Q29tcGxldGUoKSkpIHsKICAgICAgICAgICAgICAgICBmaWVsZHMtPnVzZXJOYW1lID0gaW5wdXRF
bGVtZW50OwogICAgICAgICAgICAgICAgIGJyZWFrOwpJbmRleDogV2ViS2l0L2Nocm9taXVtL3Ny
Yy9XZWJTZWFyY2hhYmxlRm9ybURhdGEuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdC9jaHJvbWl1
bS9zcmMvV2ViU2VhcmNoYWJsZUZvcm1EYXRhLmNwcAkocmV2aXNpb24gNjc3NjMpCisrKyBXZWJL
aXQvY2hyb21pdW0vc3JjL1dlYlNlYXJjaGFibGVGb3JtRGF0YS5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTE3Niw5ICsxNzYsOSBAQCBib29sIEhhc1N1aXRhYmxlVGV4dEVsZW1lbnQoY29uc3QgSFRN
TEZvCiAgICAgICAgICAgICAgICAgcmV0dXJuIDA7CiAgICAgICAgICAgICB9CiAKLSAgICAgICAg
ICAgIC8vIEZJWE1FOiBUaGlzIG5lZWRzIHRvIHVzZSBhIGZ1bmN0aW9uIG9uIEhUTUxJbnB1dEVs
ZW1lbnQgb3RoZXIgdGhhbiBpbnB1dFR5cGUuCisgICAgICAgICAgICAvLyBGSVhNRTogVGhpcyBu
ZWVkcyB0byB1c2UgYSBmdW5jdGlvbiBvbiBIVE1MSW5wdXRFbGVtZW50IG90aGVyIHRoYW4gZGVw
cmVjYXRlZElucHV0VHlwZS4KICAgICAgICAgICAgIC8vIEFsc28sIGl0J3Mgbm90IGNsZWFyIHdo
eSBURVhUIHNob3VsZCBiZSBoYW5kbGVkIGRpZmZlcmVudGx5IHRoYW4sIHNheSwgU0VBUkNILgot
ICAgICAgICAgICAgc3dpdGNoIChzdGF0aWNfY2FzdDxjb25zdCBIVE1MSW5wdXRFbGVtZW50Kj4o
Zm9ybUVsZW1lbnQpLT5pbnB1dFR5cGUoKSkgeworICAgICAgICAgICAgc3dpdGNoIChzdGF0aWNf
Y2FzdDxjb25zdCBIVE1MSW5wdXRFbGVtZW50Kj4oZm9ybUVsZW1lbnQpLT5kZXByZWNhdGVkSW5w
dXRUeXBlKCkpIHsKICAgICAgICAgICAgIGNhc2UgSFRNTElucHV0RWxlbWVudDo6VEVYVDoKICAg
ICAgICAgICAgIGNhc2UgSFRNTElucHV0RWxlbWVudDo6SVNJTkRFWDoKICAgICAgICAgICAgICAg
ICBpc1RleHRFbGVtZW50ID0gdHJ1ZTsK
</data>
<flag name="review"
          id="57460"
          type_id="1"
          status="+"
          setter="kling"
    />
          </attachment>
      

    </bug>

</bugzilla>