<?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>78140</bug_id>
          
          <creation_ts>2012-02-08 12:28:45 -0800</creation_ts>
          <short_desc>Add toText and isTextNode helpers in Text class</short_desc>
          <delta_ts>2012-02-12 19:18:15 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>DOM</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Abhishek Arya">inferno</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>abarth</cc>
    
    <cc>japhet</cc>
    
    <cc>joethomas</cc>
    
    <cc>levin</cc>
    
    <cc>macpherson</cc>
    
    <cc>menard</cc>
    
    <cc>ojan</cc>
    
    <cc>rniwa</cc>
    
    <cc>tkent</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>552396</commentid>
    <comment_count>0</comment_count>
    <who name="Abhishek Arya">inferno</who>
    <bug_when>2012-02-08 12:28:45 -0800</bug_when>
    <thetext>in WebKit/Source/WebCore/dom/Text.h,
toText is needed to shorten static_cast&lt;Text&gt;* and also detect bad cast using isTextNode</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>554589</commentid>
    <comment_count>1</comment_count>
      <attachid>126623</attachid>
    <who name="Joe Thomas">joethomas</who>
    <bug_when>2012-02-11 01:05:00 -0800</bug_when>
    <thetext>Created attachment 126623
ProposedPatch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>554640</commentid>
    <comment_count>2</comment_count>
      <attachid>126623</attachid>
    <who name="Adam Barth">abarth</who>
    <bug_when>2012-02-11 10:16:00 -0800</bug_when>
    <thetext>Comment on attachment 126623
ProposedPatch

Consider adding a style checker rule to remind folks to use toText rather than static_cast&lt;Text*&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>554662</commentid>
    <comment_count>3</comment_count>
    <who name="Joe Thomas">joethomas</who>
    <bug_when>2012-02-11 12:02:04 -0800</bug_when>
    <thetext>(In reply to comment #2)
&gt; (From update of attachment 126623 [details])
&gt; Consider adding a style checker rule to remind folks to use toText rather than static_cast&lt;Text*&gt;

Checked Tools/Scripts/webkitpy/style/, but did not get much idea how to do this. :(</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>554777</commentid>
    <comment_count>4</comment_count>
    <who name="Joe Thomas">joethomas</who>
    <bug_when>2012-02-11 21:28:21 -0800</bug_when>
    <thetext>(In reply to comment #3)
&gt; (In reply to comment #2)
&gt; &gt; (From update of attachment 126623 [details] [details])
&gt; &gt; Consider adding a style checker rule to remind folks to use toText rather than static_cast&lt;Text*&gt;
&gt; 
&gt; Checked Tools/Scripts/webkitpy/style/, but did not get much idea how to do this. :(

I was trying to report the style check error with one of the error category mentioned in BASE_FILTER_RULES in Tools/Scripts/webkitpy/style/checker.py. As far as I understand, errors reported with this list is ignored.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>554778</commentid>
    <comment_count>5</comment_count>
      <attachid>126670</attachid>
    <who name="Joe Thomas">joethomas</who>
    <bug_when>2012-02-11 21:29:14 -0800</bug_when>
    <thetext>Created attachment 126670
Patch-with-StyleChecker

Added style checker.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>554779</commentid>
    <comment_count>6</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-02-11 21:31:21 -0800</bug_when>
    <thetext>Attachment 126670 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;Source/WebCore/ChangeLog&apos;, u&apos;Source/WebCor...&quot; exit_code: 1

Source/WebCore/dom/Text.h:76:  Consider using toText helper function in WebCore/dom/Text.h instead of static_cast&lt;Text*&gt;  [readability/check] [4]
Total errors found: 1 in 37 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>554789</commentid>
    <comment_count>7</comment_count>
    <who name="Joe Thomas">joethomas</who>
    <bug_when>2012-02-11 22:53:11 -0800</bug_when>
    <thetext>(In reply to comment #6)
&gt; Attachment 126670 [details] did not pass style-queue:
&gt; 
&gt; Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;Source/WebCore/ChangeLog&apos;, u&apos;Source/WebCor...&quot; exit_code: 1
&gt; 
&gt; Source/WebCore/dom/Text.h:76:  Consider using toText helper function in WebCore/dom/Text.h instead of static_cast&lt;Text*&gt;  [readability/check] [4]
&gt; Total errors found: 1 in 37 files

This error is expected as it is caused by the new style-checker added in this patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>554794</commentid>
    <comment_count>8</comment_count>
      <attachid>126670</attachid>
    <who name="Adam Barth">abarth</who>
    <bug_when>2012-02-12 01:36:38 -0800</bug_when>
    <thetext>Comment on attachment 126670
Patch-with-StyleChecker

Oh, I meant to make the style checker change in a separate patch, but this seems fine too.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>554808</commentid>
    <comment_count>9</comment_count>
      <attachid>126670</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-02-12 03:28:13 -0800</bug_when>
    <thetext>Comment on attachment 126670
Patch-with-StyleChecker

Clearing flags on attachment: 126670

Committed r107509: &lt;http://trac.webkit.org/changeset/107509&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>554845</commentid>
    <comment_count>10</comment_count>
    <who name="David Levin">levin</who>
    <bug_when>2012-02-12 13:45:02 -0800</bug_when>
    <thetext>It looks like there wasn&apos;t a unit test for the style checker change.

Please add one -- otherwise it may break at anytime due to people changing the code and no one will know!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>554852</commentid>
    <comment_count>11</comment_count>
    <who name="Joe Thomas">joethomas</who>
    <bug_when>2012-02-12 14:13:14 -0800</bug_when>
    <thetext>(In reply to comment #10)
&gt; It looks like there wasn&apos;t a unit test for the style checker change.
&gt; 
&gt; Please add one -- otherwise it may break at anytime due to people changing the code and no one will know!

Sure I will add the unit test case. I did not know that there is a unit test suite for style checker. What is the script used for running the unit test?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>554853</commentid>
    <comment_count>12</comment_count>
    <who name="David Levin">levin</who>
    <bug_when>2012-02-12 14:14:57 -0800</bug_when>
    <thetext>(In reply to comment #11)
&gt; (In reply to comment #10)
&gt; &gt; It looks like there wasn&apos;t a unit test for the style checker change.
&gt; &gt; 
&gt; &gt; Please add one -- otherwise it may break at anytime due to people changing the code and no one will know!
&gt; 
&gt; Sure I will add the unit test case. I did not know that there is a unit test suite for style checker. What is the script used for running the unit test?

Here&apos;s a sample change: http://trac.webkit.org/changeset/105652</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>554900</commentid>
    <comment_count>13</comment_count>
      <attachid>126692</attachid>
    <who name="Joe Thomas">joethomas</who>
    <bug_when>2012-02-12 17:35:29 -0800</bug_when>
    <thetext>Created attachment 126692
UnitTestCase-StyleChecker

Added the unit test case for the style checker introduced in the previous commit for this bug</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>554905</commentid>
    <comment_count>14</comment_count>
      <attachid>126692</attachid>
    <who name="Adam Barth">abarth</who>
    <bug_when>2012-02-12 17:49:25 -0800</bug_when>
    <thetext>Comment on attachment 126692
UnitTestCase-StyleChecker

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

&gt; Tools/Scripts/webkitpy/style/checkers/cpp_unittest.py:762
&gt; +    # Test for static_cast readability.

This comment doesn&apos;t seem to be adding any value.  It&apos;s redundant with the function name.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>554948</commentid>
    <comment_count>15</comment_count>
      <attachid>126692</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-02-12 19:18:08 -0800</bug_when>
    <thetext>Comment on attachment 126692
UnitTestCase-StyleChecker

Clearing flags on attachment: 126692

Committed r107522: &lt;http://trac.webkit.org/changeset/107522&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>554949</commentid>
    <comment_count>16</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-02-12 19:18:15 -0800</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>126623</attachid>
            <date>2012-02-11 01:05:00 -0800</date>
            <delta_ts>2012-02-12 14:50:22 -0800</delta_ts>
            <desc>ProposedPatch</desc>
            <filename>patch</filename>
            <type>text/plain</type>
            <size>49069</size>
            <attacher name="Joe Thomas">joethomas</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDEwNzQ3NSkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDExMSBAQAorMjAxMi0wMi0xMSAgSm9lIFRo
b21hcyAgPGpvZXRob21hc0Btb3Rvcm9sYS5jb20+CisKKyAgICAgICAgQWRkIHRvVGV4dCBhbmQg
aXNUZXh0Tm9kZSBoZWxwZXJzIGluIFRleHQgY2xhc3MuCisgICAgICAgIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD03ODE0MAorCisgICAgICAgIEFkZGVkIGEgbmV3IGhl
bHBlciBmdW5jdGlvbiB0b1RleHQoKSBpbiBkb20vVGV4dC5oIHdoaWNoIGRvZXMgdGhlIHR5cGUg
Y2FzdGluZyBvcGVyYXRpb24gdG8gVGV4dCBvYmplY3QuCisgICAgICAgIE1vZGlmaWVkIHRoZSBj
b2RlIHRvIG1ha2UgdXNlIG9mIHRoaXMgaGVscGVyIGZ1bmN0aW9uLgorCisgICAgICAgIFJldmll
d2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIE5vIG5ldyB0ZXN0cy4KKworICAgICAg
ICAqIGFjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdC5jcHA6CisgICAgICAg
IChXZWJDb3JlOjphY2Nlc3NpYmxlTmFtZUZvck5vZGUpOgorICAgICAgICAqIGJpbmRpbmdzL3Y4
L2N1c3RvbS9WOE5vZGVDdXN0b20uY3BwOgorICAgICAgICAoV2ViQ29yZTo6dG9WOFNsb3cpOgor
ICAgICAgICAqIGNzcy9TZWxlY3RvckNoZWNrZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U2Vs
ZWN0b3JDaGVja2VyOjpjaGVja09uZVNlbGVjdG9yKToKKyAgICAgICAgKiBkb20vQXR0ci5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpBdHRyOjpjaGlsZHJlbkNoYW5nZWQpOgorICAgICAgICAqIGRv
bS9FbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkVsZW1lbnQ6OnJlY2FsY1N0eWxlKToK
KyAgICAgICAgKiBkb20vTm9kZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpOb2RlOjpub3JtYWxp
emUpOgorICAgICAgICAqIGRvbS9Qb3NpdGlvbi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpQb3Np
dGlvbjo6Y29udGFpbmVyVGV4dCk6CisgICAgICAgIChXZWJDb3JlOjpQb3NpdGlvbjo6bGVhZGlu
Z1doaXRlc3BhY2VQb3NpdGlvbik6CisgICAgICAgICogZG9tL1JhbmdlLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OlJhbmdlOjppbnNlcnROb2RlKToKKyAgICAgICAgKFdlYkNvcmU6OlJhbmdlOjpn
ZXRCb3JkZXJBbmRUZXh0UXVhZHMpOgorICAgICAgICAqIGRvbS9TY3JpcHRFbGVtZW50LmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OlNjcmlwdEVsZW1lbnQ6OnNjcmlwdENvbnRlbnQpOgorICAgICAg
ICAqIGRvbS9TaGFkb3dSb290LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNoYWRvd1Jvb3Q6OnJl
Y2FsY1NoYWRvd1RyZWVTdHlsZSk6CisgICAgICAgICogZG9tL1RleHQuaDoKKyAgICAgICAgKFdl
YkNvcmU6OnRvVGV4dCk6CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKiBlZGl0aW5nL0Fw
cGx5QmxvY2tFbGVtZW50Q29tbWFuZC5jcHA6CisgICAgICAgIChXZWJDb3JlOjppc05ld0xpbmVB
dFBvc2l0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkFwcGx5QmxvY2tFbGVtZW50Q29tbWFuZDo6
ZW5kT2ZOZXh0UGFyYWdyYWhTcGxpdHRpbmdUZXh0Tm9kZXNJZk5lZWRlZCk6CisgICAgICAgICog
ZWRpdGluZy9BcHBseVN0eWxlQ29tbWFuZC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpBcHBseVN0
eWxlQ29tbWFuZDo6c3BsaXRUZXh0QXRFbmQpOgorICAgICAgICAoV2ViQ29yZTo6QXBwbHlTdHls
ZUNvbW1hbmQ6OnNwbGl0VGV4dEVsZW1lbnRBdEVuZCk6CisgICAgICAgIChXZWJDb3JlOjpBcHBs
eVN0eWxlQ29tbWFuZDo6am9pbkNoaWxkVGV4dE5vZGVzKToKKyAgICAgICAgKiBlZGl0aW5nL0Jy
ZWFrQmxvY2txdW90ZUNvbW1hbmQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6QnJlYWtCbG9ja3F1
b3RlQ29tbWFuZDo6ZG9BcHBseSk6CisgICAgICAgICogZWRpdGluZy9Db21wb3NpdGVFZGl0Q29t
bWFuZC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDb21wb3NpdGVFZGl0Q29tbWFuZDo6aW5zZXJ0
Tm9kZUF0KToKKyAgICAgICAgKFdlYkNvcmU6OkNvbXBvc2l0ZUVkaXRDb21tYW5kOjpwb3NpdGlv
bk91dHNpZGVUYWJTcGFuKToKKyAgICAgICAgKFdlYkNvcmU6OkNvbXBvc2l0ZUVkaXRDb21tYW5k
OjpjYW5SZWJhbGFuY2UpOgorICAgICAgICAoV2ViQ29yZTo6Q29tcG9zaXRlRWRpdENvbW1hbmQ6
OnJlYmFsYW5jZVdoaXRlc3BhY2VBdCk6CisgICAgICAgIChXZWJDb3JlOjpDb21wb3NpdGVFZGl0
Q29tbWFuZDo6cHJlcGFyZVdoaXRlc3BhY2VBdFBvc2l0aW9uRm9yU3BsaXQpOgorICAgICAgICAo
V2ViQ29yZTo6Q29tcG9zaXRlRWRpdENvbW1hbmQ6OmRlbGV0ZUluc2lnbmlmaWNhbnRUZXh0KToK
KyAgICAgICAgKFdlYkNvcmU6OkNvbXBvc2l0ZUVkaXRDb21tYW5kOjpyZW1vdmVQbGFjZWhvbGRl
ckF0KToKKyAgICAgICAgKFdlYkNvcmU6OkNvbXBvc2l0ZUVkaXRDb21tYW5kOjpjbGVhbnVwQWZ0
ZXJEZWxldGlvbik6CisgICAgICAgIChXZWJDb3JlOjpDb21wb3NpdGVFZGl0Q29tbWFuZDo6YnJl
YWtPdXRPZkVtcHR5TWFpbEJsb2NrcXVvdGVkUGFyYWdyYXBoKToKKyAgICAgICAgKiBlZGl0aW5n
L0RlbGV0ZVNlbGVjdGlvbkNvbW1hbmQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RGVsZXRlU2Vs
ZWN0aW9uQ29tbWFuZDo6aGFuZGxlR2VuZXJhbERlbGV0ZSk6CisgICAgICAgIChXZWJDb3JlOjpE
ZWxldGVTZWxlY3Rpb25Db21tYW5kOjpmaXh1cFdoaXRlc3BhY2UpOgorICAgICAgICAqIGVkaXRp
bmcvRWRpdG9yLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkVkaXRvcjo6c2V0Q29tcG9zaXRpb24p
OgorICAgICAgICAqIGVkaXRpbmcvSW5zZXJ0TGluZUJyZWFrQ29tbWFuZC5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpJbnNlcnRMaW5lQnJlYWtDb21tYW5kOjpkb0FwcGx5KToKKyAgICAgICAgKiBl
ZGl0aW5nL0luc2VydFBhcmFncmFwaFNlcGFyYXRvckNvbW1hbmQuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6SW5zZXJ0UGFyYWdyYXBoU2VwYXJhdG9yQ29tbWFuZDo6ZG9BcHBseSk6CisgICAgICAg
ICogZWRpdGluZy9JbnNlcnRUZXh0Q29tbWFuZC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJbnNl
cnRUZXh0Q29tbWFuZDo6aW5zZXJ0VGFiKToKKyAgICAgICAgKiBlZGl0aW5nL01hcmt1cEFjY3Vt
dWxhdG9yLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Ok1hcmt1cEFjY3VtdWxhdG9yOjphcHBlbmRT
dGFydE1hcmt1cCk6CisgICAgICAgICogZWRpdGluZy9SZXBsYWNlU2VsZWN0aW9uQ29tbWFuZC5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpSZXBsYWNlU2VsZWN0aW9uQ29tbWFuZDo6cmVtb3ZlVW5y
ZW5kZXJlZFRleHROb2Rlc0F0RW5kcyk6CisgICAgICAgIChXZWJDb3JlOjpSZXBsYWNlU2VsZWN0
aW9uQ29tbWFuZDo6YWRkU3BhY2VzRm9yU21hcnRSZXBsYWNlKToKKyAgICAgICAgKFdlYkNvcmU6
OlJlcGxhY2VTZWxlY3Rpb25Db21tYW5kOjppbnNlcnRBc0xpc3RJdGVtcyk6CisgICAgICAgIChX
ZWJDb3JlOjpSZXBsYWNlU2VsZWN0aW9uQ29tbWFuZDo6cGVyZm9ybVRyaXZpYWxSZXBsYWNlKToK
KyAgICAgICAgKiBlZGl0aW5nL2h0bWxlZGl0aW5nLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Omxp
bmVCcmVha0V4aXN0c0F0UG9zaXRpb24pOgorICAgICAgICAqIGVkaXRpbmcvdmlzaWJsZV91bml0
cy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpzdGFydFBvc2l0aW9uRm9yTGluZSk6CisgICAgICAg
IChXZWJDb3JlOjplbmRQb3NpdGlvbkZvckxpbmUpOgorICAgICAgICAoV2ViQ29yZTo6c3RhcnRP
ZlBhcmFncmFwaCk6CisgICAgICAgIChXZWJDb3JlOjplbmRPZlBhcmFncmFwaCk6CisgICAgICAg
ICogaHRtbC9IVE1MRWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpyZXBsYWNlQ2hpbGRy
ZW5XaXRoRnJhZ21lbnQpOgorICAgICAgICAoV2ViQ29yZTo6cmVwbGFjZUNoaWxkcmVuV2l0aFRl
eHQpOgorICAgICAgICAoV2ViQ29yZTo6bWVyZ2VXaXRoTmV4dFRleHROb2RlKToKKyAgICAgICAg
KiBodG1sL0hUTUxPYmplY3RFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxPYmpl
Y3RFbGVtZW50OjpoYXNGYWxsYmFja0NvbnRlbnQpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTE9i
amVjdEVsZW1lbnQ6OnVwZGF0ZURvY05hbWVkSXRlbSk6CisgICAgICAgICogaHRtbC9IVE1MT3B0
aW9uRWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpIVE1MT3B0aW9uRWxlbWVudDo6c2V0
VGV4dCk6CisgICAgICAgICogaHRtbC9IVE1MU2NyaXB0RWxlbWVudC5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpIVE1MU2NyaXB0RWxlbWVudDo6c2V0VGV4dCk6CisgICAgICAgICogaHRtbC9IVE1M
VGV4dEFyZWFFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxUZXh0QXJlYUVsZW1l
bnQ6OmRlZmF1bHRWYWx1ZSk6CisgICAgICAgICogaHRtbC9IVE1MVGV4dEZvcm1Db250cm9sRWxl
bWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpIVE1MVGV4dEZvcm1Db250cm9sRWxlbWVudDo6
aW5uZXJUZXh0VmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTFRleHRGb3JtQ29udHJvbEVs
ZW1lbnQ6OnZhbHVlV2l0aEhhcmRMaW5lQnJlYWtzKToKKyAgICAgICAgKiBodG1sL0hUTUxUaXRs
ZUVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SFRNTFRpdGxlRWxlbWVudDo6dGV4dCk6
CisgICAgICAgIChXZWJDb3JlOjpIVE1MVGl0bGVFbGVtZW50OjpzZXRUZXh0KToKKyAgICAgICAg
KiBpbnNwZWN0b3IvSW5zcGVjdG9yRE9NQWdlbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SW5z
cGVjdG9yRE9NQWdlbnQ6OnNldE5vZGVWYWx1ZSk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRl
clRleHQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGV4dDo6b3JpZ2luYWxUZXh0KToK
KyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyVGV4dEZyYWdtZW50LmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OlJlbmRlclRleHRGcmFnbWVudDo6b3JpZ2luYWxUZXh0KToKKyAgICAgICAgKFdlYkNv
cmU6OlJlbmRlclRleHRGcmFnbWVudDo6cHJldmlvdXNDaGFyYWN0ZXIpOgorCiAyMDEyLTAyLTEx
ICBTaGVyaWZmIEJvdCAgPHdlYmtpdC5yZXZpZXcuYm90QGdtYWlsLmNvbT4KIAogICAgICAgICBV
bnJldmlld2VkLCByb2xsaW5nIG91dCByMTA3NDM1LgpJbmRleDogU291cmNlL1dlYkNvcmUvYWNj
ZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0LmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3QuY3Bw
CShyZXZpc2lvbiAxMDc0MzQpCisrKyBTb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vz
c2liaWxpdHlSZW5kZXJPYmplY3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMjEyLDcgKzEyMTIs
NyBAQCBTdHJpbmcgQWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdDo6c3RyaW5nCiBzdGF0aWMgU3Ry
aW5nIGFjY2Vzc2libGVOYW1lRm9yTm9kZShOb2RlKiBub2RlKQogewogICAgIGlmIChub2RlLT5p
c1RleHROb2RlKCkpCi0gICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxUZXh0Kj4obm9kZSktPmRh
dGEoKTsKKyAgICAgICAgcmV0dXJuIHRvVGV4dChub2RlKS0+ZGF0YSgpOwogCiAgICAgaWYgKG5v
ZGUtPmhhc1RhZ05hbWUoaW5wdXRUYWcpKQogICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8SFRN
TElucHV0RWxlbWVudCo+KG5vZGUpLT52YWx1ZSgpOwpJbmRleDogU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3MvdjgvY3VzdG9tL1Y4Tm9kZUN1c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4Tm9kZUN1c3RvbS5jcHAJKHJldmlzaW9uIDEwNzQz
NCkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOE5vZGVDdXN0b20uY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0xNDcsNyArMTQ3LDcgQEAgdjg6OkhhbmRsZTx2ODo6VmFsdWU+
IHRvVjhTbG93KE5vZGUqIGltcAogICAgIGNhc2UgTm9kZTo6QVRUUklCVVRFX05PREU6CiAgICAg
ICAgIHJldHVybiB0b1Y4KHN0YXRpY19jYXN0PEF0dHIqPihpbXBsKSwgZm9yY2VOZXdPYmplY3Qp
OwogICAgIGNhc2UgTm9kZTo6VEVYVF9OT0RFOgotICAgICAgICByZXR1cm4gdG9WOChzdGF0aWNf
Y2FzdDxUZXh0Kj4oaW1wbCksIGZvcmNlTmV3T2JqZWN0KTsKKyAgICAgICAgcmV0dXJuIHRvVjgo
dG9UZXh0KGltcGwpLCBmb3JjZU5ld09iamVjdCk7CiAgICAgY2FzZSBOb2RlOjpDREFUQV9TRUNU
SU9OX05PREU6CiAgICAgICAgIHJldHVybiB0b1Y4KHN0YXRpY19jYXN0PENEQVRBU2VjdGlvbio+
KGltcGwpLCBmb3JjZU5ld09iamVjdCk7CiAgICAgY2FzZSBOb2RlOjpFTlRJVFlfUkVGRVJFTkNF
X05PREU6CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9jc3MvU2VsZWN0b3JDaGVja2VyLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9jc3MvU2VsZWN0b3JDaGVja2VyLmNwcAkocmV2aXNp
b24gMTA3NDM0KQorKysgU291cmNlL1dlYkNvcmUvY3NzL1NlbGVjdG9yQ2hlY2tlci5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTc3MSw3ICs3NzEsNyBAQCBib29sIFNlbGVjdG9yQ2hlY2tlcjo6Y2hl
Y2tPbmVTZWxlY3RvcihjCiAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAg
ICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICBpZiAobi0+aXNUZXh0Tm9kZSgpKSB7
Ci0gICAgICAgICAgICAgICAgICAgICAgICBUZXh0KiB0ZXh0Tm9kZSA9IHN0YXRpY19jYXN0PFRl
eHQqPihuKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIFRleHQqIHRleHROb2RlID0gdG9UZXh0
KG4pOwogICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCF0ZXh0Tm9kZS0+ZGF0YSgpLmlzRW1w
dHkoKSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdCA9IGZhbHNlOwogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwpJbmRleDogU291cmNlL1dlYkNvcmUvZG9t
L0F0dHIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2RvbS9BdHRyLmNwcAkocmV2
aXNpb24gMTA3NDM0KQorKysgU291cmNlL1dlYkNvcmUvZG9tL0F0dHIuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0xODEsNyArMTgxLDcgQEAgdm9pZCBBdHRyOjpjaGlsZHJlbkNoYW5nZWQoYm9vbCBj
aGFuZ2VkQgogICAgIFN0cmluZ0J1aWxkZXIgdmFsdWVCdWlsZGVyOwogICAgIGZvciAoTm9kZSAq
biA9IGZpcnN0Q2hpbGQoKTsgbjsgbiA9IG4tPm5leHRTaWJsaW5nKCkpIHsKICAgICAgICAgaWYg
KG4tPmlzVGV4dE5vZGUoKSkKLSAgICAgICAgICAgIHZhbHVlQnVpbGRlci5hcHBlbmQoc3RhdGlj
X2Nhc3Q8VGV4dCo+KG4pLT5kYXRhKCkpOworICAgICAgICAgICAgdmFsdWVCdWlsZGVyLmFwcGVu
ZCh0b1RleHQobiktPmRhdGEoKSk7CiAgICAgfQogCiAgICAgQXRvbWljU3RyaW5nIG5ld1ZhbHVl
ID0gdmFsdWVCdWlsZGVyLnRvU3RyaW5nKCk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9kb20vRWxl
bWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZG9tL0VsZW1lbnQuY3BwCShy
ZXZpc2lvbiAxMDc0MzQpCisrKyBTb3VyY2UvV2ViQ29yZS9kb20vRWxlbWVudC5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTExMjEsNyArMTEyMSw3IEBAIHZvaWQgRWxlbWVudDo6cmVjYWxjU3R5bGUo
U3R5bGVDaGFuZ2UgY2gKICAgICBib29sIGZvcmNlQ2hlY2tPZkFueUVsZW1lbnRTaWJsaW5nID0g
ZmFsc2U7CiAgICAgZm9yIChOb2RlICpuID0gZmlyc3RDaGlsZCgpOyBuOyBuID0gbi0+bmV4dFNp
YmxpbmcoKSkgewogICAgICAgICBpZiAobi0+aXNUZXh0Tm9kZSgpKSB7Ci0gICAgICAgICAgICBz
dGF0aWNfY2FzdDxUZXh0Kj4obiktPnJlY2FsY1RleHRTdHlsZShjaGFuZ2UpOworICAgICAgICAg
ICAgdG9UZXh0KG4pLT5yZWNhbGNUZXh0U3R5bGUoY2hhbmdlKTsKICAgICAgICAgICAgIGNvbnRp
bnVlOwogICAgICAgICB9IAogICAgICAgICBpZiAoIW4tPmlzRWxlbWVudE5vZGUoKSkgCkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9kb20vTm9kZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvZG9tL05vZGUuY3BwCShyZXZpc2lvbiAxMDc0MzQpCisrKyBTb3VyY2UvV2ViQ29yZS9kb20v
Tm9kZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTYzMiw3ICs2MzIsNyBAQCB2b2lkIE5vZGU6Om5v
cm1hbGl6ZSgpCiAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgfQogCi0gICAgICAgIFJl
ZlB0cjxUZXh0PiB0ZXh0ID0gc3RhdGljX2Nhc3Q8VGV4dCo+KG5vZGUuZ2V0KCkpOworICAgICAg
ICBSZWZQdHI8VGV4dD4gdGV4dCA9IHRvVGV4dChub2RlLmdldCgpKTsKIAogICAgICAgICAvLyBS
ZW1vdmUgZW1wdHkgdGV4dCBub2Rlcy4KICAgICAgICAgaWYgKCF0ZXh0LT5sZW5ndGgoKSkgewpA
QCAtNjQ3LDcgKzY0Nyw3IEBAIHZvaWQgTm9kZTo6bm9ybWFsaXplKCkKICAgICAgICAgd2hpbGUg
KE5vZGUqIG5leHRTaWJsaW5nID0gbm9kZS0+bmV4dFNpYmxpbmcoKSkgewogICAgICAgICAgICAg
aWYgKG5leHRTaWJsaW5nLT5ub2RlVHlwZSgpICE9IFRFWFRfTk9ERSkKICAgICAgICAgICAgICAg
ICBicmVhazsKLSAgICAgICAgICAgIFJlZlB0cjxUZXh0PiBuZXh0VGV4dCA9IHN0YXRpY19jYXN0
PFRleHQqPihuZXh0U2libGluZyk7CisgICAgICAgICAgICBSZWZQdHI8VGV4dD4gbmV4dFRleHQg
PSB0b1RleHQobmV4dFNpYmxpbmcpOwogCiAgICAgICAgICAgICAvLyBSZW1vdmUgZW1wdHkgdGV4
dCBub2Rlcy4KICAgICAgICAgICAgIGlmICghbmV4dFRleHQtPmxlbmd0aCgpKSB7CkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9kb20vUG9zaXRpb24uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL2RvbS9Qb3NpdGlvbi5jcHAJKHJldmlzaW9uIDEwNzQzNCkKKysrIFNvdXJjZS9XZWJDb3Jl
L2RvbS9Qb3NpdGlvbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE1Myw3ICsxNTMsNyBAQCBUZXh0
KiBQb3NpdGlvbjo6Y29udGFpbmVyVGV4dCgpIGNvbnN0CiB7CiAgICAgc3dpdGNoIChhbmNob3JU
eXBlKCkpIHsKICAgICBjYXNlIFBvc2l0aW9uSXNPZmZzZXRJbkFuY2hvcjoKLSAgICAgICAgcmV0
dXJuIG1fYW5jaG9yTm9kZSAmJiBtX2FuY2hvck5vZGUtPmlzVGV4dE5vZGUoKSA/IHN0YXRpY19j
YXN0PFRleHQqPihtX2FuY2hvck5vZGUuZ2V0KCkpIDogMDsKKyAgICAgICAgcmV0dXJuIG1fYW5j
aG9yTm9kZSAmJiBtX2FuY2hvck5vZGUtPmlzVGV4dE5vZGUoKSA/IHRvVGV4dChtX2FuY2hvck5v
ZGUuZ2V0KCkpIDogMDsKICAgICBjYXNlIFBvc2l0aW9uSXNCZWZvcmVBbmNob3I6CiAgICAgY2Fz
ZSBQb3NpdGlvbklzQWZ0ZXJBbmNob3I6CiAgICAgICAgIHJldHVybiAwOwpAQCAtMTAxOCw3ICsx
MDE4LDcgQEAgUG9zaXRpb24gUG9zaXRpb246OmxlYWRpbmdXaGl0ZXNwYWNlUG9zaQogCiAgICAg
UG9zaXRpb24gcHJldiA9IHByZXZpb3VzQ2hhcmFjdGVyUG9zaXRpb24oYWZmaW5pdHkpOwogICAg
IGlmIChwcmV2ICE9ICp0aGlzICYmIHByZXYuZGVwcmVjYXRlZE5vZGUoKS0+aW5TYW1lQ29udGFp
bmluZ0Jsb2NrRmxvd0VsZW1lbnQoZGVwcmVjYXRlZE5vZGUoKSkgJiYgcHJldi5kZXByZWNhdGVk
Tm9kZSgpLT5pc1RleHROb2RlKCkpIHsKLSAgICAgICAgU3RyaW5nIHN0cmluZyA9IHN0YXRpY19j
YXN0PFRleHQgKj4ocHJldi5kZXByZWNhdGVkTm9kZSgpKS0+ZGF0YSgpOworICAgICAgICBTdHJp
bmcgc3RyaW5nID0gdG9UZXh0KHByZXYuZGVwcmVjYXRlZE5vZGUoKSktPmRhdGEoKTsKICAgICAg
ICAgVUNoYXIgYyA9IHN0cmluZ1twcmV2LmRlcHJlY2F0ZWRFZGl0aW5nT2Zmc2V0KCldOwogICAg
ICAgICBpZiAoY29uc2lkZXJOb25Db2xsYXBzaWJsZVdoaXRlc3BhY2UgPyAoaXNTcGFjZU9yTmV3
bGluZShjKSB8fCBjID09IG5vQnJlYWtTcGFjZSkgOiBpc0NvbGxhcHNpYmxlV2hpdGVzcGFjZShj
KSkKICAgICAgICAgICAgIGlmIChpc0VkaXRhYmxlUG9zaXRpb24ocHJldikpCkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9kb20vUmFuZ2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2Rv
bS9SYW5nZS5jcHAJKHJldmlzaW9uIDEwNzQzNCkKKysrIFNvdXJjZS9XZWJDb3JlL2RvbS9SYW5n
ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEwMzcsNyArMTAzNyw3IEBAIHZvaWQgUmFuZ2U6Omlu
c2VydE5vZGUoUGFzc1JlZlB0cjxOb2RlPiAKIAogICAgIGJvb2wgY29sbGFwc2VkID0gbV9zdGFy
dCA9PSBtX2VuZDsKICAgICBpZiAoc3RhcnRJc1RleHQpIHsKLSAgICAgICAgUmVmUHRyPFRleHQ+
IG5ld1RleHQgPSBzdGF0aWNfY2FzdDxUZXh0Kj4obV9zdGFydC5jb250YWluZXIoKSktPnNwbGl0
VGV4dChtX3N0YXJ0Lm9mZnNldCgpLCBlYyk7CisgICAgICAgIFJlZlB0cjxUZXh0PiBuZXdUZXh0
ID0gdG9UZXh0KG1fc3RhcnQuY29udGFpbmVyKCkpLT5zcGxpdFRleHQobV9zdGFydC5vZmZzZXQo
KSwgZWMpOwogICAgICAgICBpZiAoZWMpCiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIG1f
c3RhcnQuY29udGFpbmVyKCktPnBhcmVudE5vZGUoKS0+aW5zZXJ0QmVmb3JlKG5ld05vZGUucmVs
ZWFzZSgpLCBuZXdUZXh0LmdldCgpLCBlYyk7CkBAIC0yMDQwLDcgKzIwNDAsNyBAQCB2b2lkIFJh
bmdlOjpnZXRCb3JkZXJBbmRUZXh0UXVhZHMoVmVjdG9yCiAgICAgICAgICAgICAgICAgfQogICAg
ICAgICAgICAgfQogICAgICAgICB9IGVsc2UgaWYgKG5vZGUtPmlzVGV4dE5vZGUoKSkgewotICAg
ICAgICAgICAgaWYgKFJlbmRlck9iamVjdCogcmVuZGVyZXIgPSBzdGF0aWNfY2FzdDxUZXh0Kj4o
bm9kZSktPnJlbmRlcmVyKCkpIHsKKyAgICAgICAgICAgIGlmIChSZW5kZXJPYmplY3QqIHJlbmRl
cmVyID0gdG9UZXh0KG5vZGUpLT5yZW5kZXJlcigpKSB7CiAgICAgICAgICAgICAgICAgUmVuZGVy
VGV4dCogcmVuZGVyVGV4dCA9IHRvUmVuZGVyVGV4dChyZW5kZXJlcik7CiAgICAgICAgICAgICAg
ICAgaW50IHN0YXJ0T2Zmc2V0ID0gKG5vZGUgPT0gc3RhcnRDb250YWluZXIpID8gbV9zdGFydC5v
ZmZzZXQoKSA6IDA7CiAgICAgICAgICAgICAgICAgaW50IGVuZE9mZnNldCA9IChub2RlID09IGVu
ZENvbnRhaW5lcikgPyBtX2VuZC5vZmZzZXQoKSA6IElOVF9NQVg7CkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9kb20vU2NyaXB0RWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
ZG9tL1NjcmlwdEVsZW1lbnQuY3BwCShyZXZpc2lvbiAxMDc0MzQpCisrKyBTb3VyY2UvV2ViQ29y
ZS9kb20vU2NyaXB0RWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM1NSw3ICszNTUsNyBA
QCBTdHJpbmcgU2NyaXB0RWxlbWVudDo6c2NyaXB0Q29udGVudCgpIGNvCiAgICAgICAgIGlmICgh
bi0+aXNUZXh0Tm9kZSgpKQogICAgICAgICAgICAgY29udGludWU7CiAKLSAgICAgICAgVGV4dCog
dCA9IHN0YXRpY19jYXN0PFRleHQqPihuKTsKKyAgICAgICAgVGV4dCogdCA9IHRvVGV4dChuKTsK
ICAgICAgICAgaWYgKGZvdW5kTXVsdGlwbGVUZXh0Tm9kZXMpCiAgICAgICAgICAgICBjb250ZW50
LmFwcGVuZCh0LT5kYXRhKCkpOwogICAgICAgICBlbHNlIGlmIChmaXJzdFRleHROb2RlKSB7Cklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9kb20vU2hhZG93Um9vdC5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvZG9tL1NoYWRvd1Jvb3QuY3BwCShyZXZpc2lvbiAxMDc0MzQpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9kb20vU2hhZG93Um9vdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE1NSw3ICsx
NTUsNyBAQCB2b2lkIFNoYWRvd1Jvb3Q6OnJlY2FsY1NoYWRvd1RyZWVTdHlsZShTCiAgICAgICAg
ICAgICBpZiAobi0+aXNFbGVtZW50Tm9kZSgpKQogICAgICAgICAgICAgICAgIHN0YXRpY19jYXN0
PEVsZW1lbnQqPihuKS0+cmVjYWxjU3R5bGUoY2hhbmdlKTsKICAgICAgICAgICAgIGVsc2UgaWYg
KG4tPmlzVGV4dE5vZGUoKSkKLSAgICAgICAgICAgICAgICBzdGF0aWNfY2FzdDxUZXh0Kj4obikt
PnJlY2FsY1RleHRTdHlsZShjaGFuZ2UpOworICAgICAgICAgICAgICAgIHRvVGV4dChuKS0+cmVj
YWxjVGV4dFN0eWxlKGNoYW5nZSk7CiAgICAgICAgIH0KICAgICB9CiAKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL2RvbS9UZXh0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZG9tL1RleHQu
aAkocmV2aXNpb24gMTA3NDM0KQorKysgU291cmNlL1dlYkNvcmUvZG9tL1RleHQuaAkod29ya2lu
ZyBjb3B5KQpAQCAtNzAsNiArNzAsMTIgQEAgcHJpdmF0ZToKICNlbmRpZgogfTsKIAoraW5saW5l
IFRleHQqIHRvVGV4dChOb2RlKiBub2RlKQoreworICAgIEFTU0VSVCghbm9kZSB8fCBub2RlLT5p
c1RleHROb2RlKCkpOworICAgIHJldHVybiBzdGF0aWNfY2FzdDxUZXh0Kj4obm9kZSk7Cit9CisK
IH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIAogI2VuZGlmIC8vIFRleHRfaApJbmRleDogU291cmNl
L1dlYkNvcmUvZWRpdGluZy9BcHBseUJsb2NrRWxlbWVudENvbW1hbmQuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvQXBwbHlCbG9ja0VsZW1lbnRDb21tYW5kLmNwcAko
cmV2aXNpb24gMTA3NDM0KQorKysgU291cmNlL1dlYkNvcmUvZWRpdGluZy9BcHBseUJsb2NrRWxl
bWVudENvbW1hbmQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNjIsNyArMTYyLDcgQEAgc3RhdGlj
IGJvb2wgaXNOZXdMaW5lQXRQb3NpdGlvbihjb25zdCBQbwogICAgICAgICByZXR1cm4gZmFsc2U7
CiAKICAgICBFeGNlcHRpb25Db2RlIGVjID0gMDsKLSAgICBTdHJpbmcgdGV4dEF0UG9zaXRpb24g
PSBzdGF0aWNfY2FzdDxUZXh0Kj4odGV4dE5vZGUpLT5zdWJzdHJpbmdEYXRhKG9mZnNldCwgMSwg
ZWMpOworICAgIFN0cmluZyB0ZXh0QXRQb3NpdGlvbiA9IHRvVGV4dCh0ZXh0Tm9kZSktPnN1YnN0
cmluZ0RhdGEob2Zmc2V0LCAxLCBlYyk7CiAgICAgaWYgKGVjKQogICAgICAgICByZXR1cm4gZmFs
c2U7CiAKQEAgLTI1NywxOCArMjU3LDE4IEBAIFZpc2libGVQb3NpdGlvbiBBcHBseUJsb2NrRWxl
bWVudENvbW1hbmQKIAogICAgIGlmICh0ZXh0ID09IHN0YXJ0LmNvbnRhaW5lck5vZGUoKSAmJiB0
ZXh0LT5wcmV2aW91c1NpYmxpbmcoKSAmJiB0ZXh0LT5wcmV2aW91c1NpYmxpbmcoKS0+aXNUZXh0
Tm9kZSgpKSB7CiAgICAgICAgIEFTU0VSVChzdGFydC5vZmZzZXRJbkNvbnRhaW5lck5vZGUoKSA8
IHBvc2l0aW9uLm9mZnNldEluQ29udGFpbmVyTm9kZSgpKTsKLSAgICAgICAgc3RhcnQgPSBQb3Np
dGlvbihzdGF0aWNfY2FzdDxUZXh0Kj4odGV4dC0+cHJldmlvdXNTaWJsaW5nKCkpLCBzdGFydC5v
ZmZzZXRJbkNvbnRhaW5lck5vZGUoKSk7CisgICAgICAgIHN0YXJ0ID0gUG9zaXRpb24odG9UZXh0
KHRleHQtPnByZXZpb3VzU2libGluZygpKSwgc3RhcnQub2Zmc2V0SW5Db250YWluZXJOb2RlKCkp
OwogICAgIH0KICAgICBpZiAodGV4dCA9PSBlbmQuY29udGFpbmVyTm9kZSgpICYmIHRleHQtPnBy
ZXZpb3VzU2libGluZygpICYmIHRleHQtPnByZXZpb3VzU2libGluZygpLT5pc1RleHROb2RlKCkp
IHsKICAgICAgICAgQVNTRVJUKGVuZC5vZmZzZXRJbkNvbnRhaW5lck5vZGUoKSA8IHBvc2l0aW9u
Lm9mZnNldEluQ29udGFpbmVyTm9kZSgpKTsKLSAgICAgICAgZW5kID0gUG9zaXRpb24oc3RhdGlj
X2Nhc3Q8VGV4dCo+KHRleHQtPnByZXZpb3VzU2libGluZygpKSwgZW5kLm9mZnNldEluQ29udGFp
bmVyTm9kZSgpKTsKKyAgICAgICAgZW5kID0gUG9zaXRpb24odG9UZXh0KHRleHQtPnByZXZpb3Vz
U2libGluZygpKSwgZW5kLm9mZnNldEluQ29udGFpbmVyTm9kZSgpKTsKICAgICB9CiAgICAgaWYg
KHRleHQgPT0gbV9lbmRPZkxhc3RQYXJhZ3JhcGguY29udGFpbmVyTm9kZSgpKSB7CiAgICAgICAg
IGlmIChtX2VuZE9mTGFzdFBhcmFncmFwaC5vZmZzZXRJbkNvbnRhaW5lck5vZGUoKSA8IHBvc2l0
aW9uLm9mZnNldEluQ29udGFpbmVyTm9kZSgpKSB7CiAgICAgICAgICAgICAvLyBXZSBjYW4gb25s
eSBmaXggZW5kT2ZMYXN0UGFyYWdyYXBoIGlmIHRoZSBwcmV2aW91cyBub2RlIHdhcyBzdGlsbCB0
ZXh0IGFuZCBoYXNuJ3QgYmVlbiBtb2RpZmllZCBieSBzY3JpcHQuCiAgICAgICAgICAgICBpZiAo
dGV4dC0+cHJldmlvdXNTaWJsaW5nKCktPmlzVGV4dE5vZGUoKQotICAgICAgICAgICAgICAgICYm
IHN0YXRpY19jYXN0PHVuc2lnbmVkPihtX2VuZE9mTGFzdFBhcmFncmFwaC5vZmZzZXRJbkNvbnRh
aW5lck5vZGUoKSkgPD0gc3RhdGljX2Nhc3Q8VGV4dCo+KHRleHQtPnByZXZpb3VzU2libGluZygp
KS0+bGVuZ3RoKCkpCi0gICAgICAgICAgICAgICAgbV9lbmRPZkxhc3RQYXJhZ3JhcGggPSBQb3Np
dGlvbihzdGF0aWNfY2FzdDxUZXh0Kj4odGV4dC0+cHJldmlvdXNTaWJsaW5nKCkpLCBtX2VuZE9m
TGFzdFBhcmFncmFwaC5vZmZzZXRJbkNvbnRhaW5lck5vZGUoKSk7CisgICAgICAgICAgICAgICAg
JiYgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KG1fZW5kT2ZMYXN0UGFyYWdyYXBoLm9mZnNldEluQ29u
dGFpbmVyTm9kZSgpKSA8PSB0b1RleHQodGV4dC0+cHJldmlvdXNTaWJsaW5nKCkpLT5sZW5ndGgo
KSkKKyAgICAgICAgICAgICAgICBtX2VuZE9mTGFzdFBhcmFncmFwaCA9IFBvc2l0aW9uKHRvVGV4
dCh0ZXh0LT5wcmV2aW91c1NpYmxpbmcoKSksIG1fZW5kT2ZMYXN0UGFyYWdyYXBoLm9mZnNldElu
Q29udGFpbmVyTm9kZSgpKTsKICAgICAgICAgfSBlbHNlCiAgICAgICAgICAgICBtX2VuZE9mTGFz
dFBhcmFncmFwaCA9IFBvc2l0aW9uKHRleHQuZ2V0KCksIG1fZW5kT2ZMYXN0UGFyYWdyYXBoLm9m
ZnNldEluQ29udGFpbmVyTm9kZSgpIC0gMSk7CiAgICAgfQpJbmRleDogU291cmNlL1dlYkNvcmUv
ZWRpdGluZy9BcHBseVN0eWxlQ29tbWFuZC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvZWRpdGluZy9BcHBseVN0eWxlQ29tbWFuZC5jcHAJKHJldmlzaW9uIDEwNzQzNCkKKysrIFNv
dXJjZS9XZWJDb3JlL2VkaXRpbmcvQXBwbHlTdHlsZUNvbW1hbmQuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0xMTIzLDE0ICsxMTIzLDE0IEBAIHZvaWQgQXBwbHlTdHlsZUNvbW1hbmQ6OnNwbGl0VGV4
dEF0RW5kKGMKICAgICBBU1NFUlQoZW5kLmNvbnRhaW5lck5vZGUoKS0+aXNUZXh0Tm9kZSgpKTsK
IAogICAgIGJvb2wgc2hvdWxkVXBkYXRlU3RhcnQgPSBzdGFydC5hbmNob3JUeXBlKCkgPT0gUG9z
aXRpb246OlBvc2l0aW9uSXNPZmZzZXRJbkFuY2hvciAmJiBzdGFydC5jb250YWluZXJOb2RlKCkg
PT0gZW5kLmNvbnRhaW5lck5vZGUoKTsKLSAgICBUZXh0KiB0ZXh0ID0gc3RhdGljX2Nhc3Q8VGV4
dCAqPihlbmQuZGVwcmVjYXRlZE5vZGUoKSk7CisgICAgVGV4dCogdGV4dCA9IHRvVGV4dChlbmQu
ZGVwcmVjYXRlZE5vZGUoKSk7CiAgICAgc3BsaXRUZXh0Tm9kZSh0ZXh0LCBlbmQub2Zmc2V0SW5D
b250YWluZXJOb2RlKCkpOwogCiAgICAgTm9kZSogcHJldk5vZGUgPSB0ZXh0LT5wcmV2aW91c1Np
YmxpbmcoKTsKICAgICBpZiAoIXByZXZOb2RlIHx8ICFwcmV2Tm9kZS0+aXNUZXh0Tm9kZSgpKQog
ICAgICAgICByZXR1cm47CiAKLSAgICBQb3NpdGlvbiBuZXdTdGFydCA9IHNob3VsZFVwZGF0ZVN0
YXJ0ID8gUG9zaXRpb24oc3RhdGljX2Nhc3Q8VGV4dCo+KHByZXZOb2RlKSwgc3RhcnQub2Zmc2V0
SW5Db250YWluZXJOb2RlKCkpIDogc3RhcnQ7CisgICAgUG9zaXRpb24gbmV3U3RhcnQgPSBzaG91
bGRVcGRhdGVTdGFydCA/IFBvc2l0aW9uKHRvVGV4dChwcmV2Tm9kZSksIHN0YXJ0Lm9mZnNldElu
Q29udGFpbmVyTm9kZSgpKSA6IHN0YXJ0OwogICAgIHVwZGF0ZVN0YXJ0RW5kKG5ld1N0YXJ0LCBs
YXN0UG9zaXRpb25Jbk5vZGUocHJldk5vZGUpKTsKIH0KIApAQCAtMTE2Miw3ICsxMTYyLDcgQEAg
dm9pZCBBcHBseVN0eWxlQ29tbWFuZDo6c3BsaXRUZXh0RWxlbWVudAogICAgIGlmICghZmlyc3RU
ZXh0Tm9kZSB8fCAhZmlyc3RUZXh0Tm9kZS0+aXNUZXh0Tm9kZSgpKQogICAgICAgICByZXR1cm47
CiAKLSAgICBQb3NpdGlvbiBuZXdTdGFydCA9IHNob3VsZFVwZGF0ZVN0YXJ0ID8gUG9zaXRpb24o
c3RhdGljX2Nhc3Q8VGV4dCo+KGZpcnN0VGV4dE5vZGUpLCBzdGFydC5vZmZzZXRJbkNvbnRhaW5l
ck5vZGUoKSkgOiBzdGFydDsKKyAgICBQb3NpdGlvbiBuZXdTdGFydCA9IHNob3VsZFVwZGF0ZVN0
YXJ0ID8gUG9zaXRpb24odG9UZXh0KGZpcnN0VGV4dE5vZGUpLCBzdGFydC5vZmZzZXRJbkNvbnRh
aW5lck5vZGUoKSkgOiBzdGFydDsKICAgICB1cGRhdGVTdGFydEVuZChuZXdTdGFydCwgcG9zaXRp
b25BZnRlck5vZGUoZmlyc3RUZXh0Tm9kZSkpOwogfQogCkBAIC0xNDMzLDggKzE0MzMsOCBAQCB2
b2lkIEFwcGx5U3R5bGVDb21tYW5kOjpqb2luQ2hpbGRUZXh0Tm9kCiAgICAgd2hpbGUgKGNoaWxk
KSB7CiAgICAgICAgIE5vZGUqIG5leHQgPSBjaGlsZC0+bmV4dFNpYmxpbmcoKTsKICAgICAgICAg
aWYgKGNoaWxkLT5pc1RleHROb2RlKCkgJiYgbmV4dCAmJiBuZXh0LT5pc1RleHROb2RlKCkpIHsK
LSAgICAgICAgICAgIFRleHQqIGNoaWxkVGV4dCA9IHN0YXRpY19jYXN0PFRleHQgKj4oY2hpbGQp
OwotICAgICAgICAgICAgVGV4dCogbmV4dFRleHQgPSBzdGF0aWNfY2FzdDxUZXh0ICo+KG5leHQp
OworICAgICAgICAgICAgVGV4dCogY2hpbGRUZXh0ID0gdG9UZXh0KGNoaWxkKTsKKyAgICAgICAg
ICAgIFRleHQqIG5leHRUZXh0ID0gdG9UZXh0KG5leHQpOwogICAgICAgICAgICAgaWYgKHN0YXJ0
LmFuY2hvclR5cGUoKSA9PSBQb3NpdGlvbjo6UG9zaXRpb25Jc09mZnNldEluQW5jaG9yICYmIG5l
eHQgPT0gc3RhcnQuY29udGFpbmVyTm9kZSgpKQogICAgICAgICAgICAgICAgIG5ld1N0YXJ0ID0g
UG9zaXRpb24oY2hpbGRUZXh0LCBjaGlsZFRleHQtPmxlbmd0aCgpICsgc3RhcnQub2Zmc2V0SW5D
b250YWluZXJOb2RlKCkpOwogICAgICAgICAgICAgaWYgKGVuZC5hbmNob3JUeXBlKCkgPT0gUG9z
aXRpb246OlBvc2l0aW9uSXNPZmZzZXRJbkFuY2hvciAmJiBuZXh0ID09IGVuZC5jb250YWluZXJO
b2RlKCkpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0JyZWFrQmxvY2txdW90ZUNvbW1h
bmQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvQnJlYWtCbG9ja3F1
b3RlQ29tbWFuZC5jcHAJKHJldmlzaW9uIDEwNzQzNCkKKysrIFNvdXJjZS9XZWJDb3JlL2VkaXRp
bmcvQnJlYWtCbG9ja3F1b3RlQ29tbWFuZC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEwNyw3ICsx
MDcsNyBAQCB2b2lkIEJyZWFrQmxvY2txdW90ZUNvbW1hbmQ6OmRvQXBwbHkoKQogICAgICAgICAK
ICAgICAvLyBTcGxpdCBhdCBwb3MgaWYgaW4gdGhlIG1pZGRsZSBvZiBhIHRleHQgbm9kZS4KICAg
ICBpZiAoc3RhcnROb2RlLT5pc1RleHROb2RlKCkpIHsKLSAgICAgICAgVGV4dCogdGV4dE5vZGUg
PSBzdGF0aWNfY2FzdDxUZXh0Kj4oc3RhcnROb2RlKTsKKyAgICAgICAgVGV4dCogdGV4dE5vZGUg
PSB0b1RleHQoc3RhcnROb2RlKTsKICAgICAgICAgaWYgKCh1bnNpZ25lZClwb3MuZGVwcmVjYXRl
ZEVkaXRpbmdPZmZzZXQoKSA+PSB0ZXh0Tm9kZS0+bGVuZ3RoKCkpIHsKICAgICAgICAgICAgIHN0
YXJ0Tm9kZSA9IHN0YXJ0Tm9kZS0+dHJhdmVyc2VOZXh0Tm9kZSgpOwogICAgICAgICAgICAgQVNT
RVJUKHN0YXJ0Tm9kZSk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0NvbXBvc2l0ZUVk
aXRDb21tYW5kLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0NvbXBv
c2l0ZUVkaXRDb21tYW5kLmNwcAkocmV2aXNpb24gMTA3NDM0KQorKysgU291cmNlL1dlYkNvcmUv
ZWRpdGluZy9Db21wb3NpdGVFZGl0Q29tbWFuZC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM1Niw3
ICszNTYsNyBAQCB2b2lkIENvbXBvc2l0ZUVkaXRDb21tYW5kOjppbnNlcnROb2RlQXQoCiAgICAg
fSBlbHNlIGlmIChjYXJldE1pbk9mZnNldChyZWZDaGlsZCkgPj0gb2Zmc2V0KQogICAgICAgICBp
bnNlcnROb2RlQmVmb3JlKGluc2VydENoaWxkLCByZWZDaGlsZCk7CiAgICAgZWxzZSBpZiAocmVm
Q2hpbGQtPmlzVGV4dE5vZGUoKSAmJiBjYXJldE1heE9mZnNldChyZWZDaGlsZCkgPiBvZmZzZXQp
IHsKLSAgICAgICAgc3BsaXRUZXh0Tm9kZShzdGF0aWNfY2FzdDxUZXh0ICo+KHJlZkNoaWxkKSwg
b2Zmc2V0KTsKKyAgICAgICAgc3BsaXRUZXh0Tm9kZSh0b1RleHQocmVmQ2hpbGQpLCBvZmZzZXQp
OwogCiAgICAgICAgIC8vIE11dGF0aW9uIGV2ZW50cyAoYnVnIDIyNjM0KSBmcm9tIHRoZSB0ZXh0
IG5vZGUgaW5zZXJ0aW9uIG1heSBoYXZlIHJlbW92ZWQgdGhlIHJlZkNoaWxkCiAgICAgICAgIGlm
ICghcmVmQ2hpbGQtPmluRG9jdW1lbnQoKSkKQEAgLTUzMiw3ICs1MzIsNyBAQCBQb3NpdGlvbiBD
b21wb3NpdGVFZGl0Q29tbWFuZDo6cG9zaXRpb25PCiAgICAgaWYgKHBvcy5vZmZzZXRJbkNvbnRh
aW5lck5vZGUoKSA+PSBjYXJldE1heE9mZnNldChwb3MuY29udGFpbmVyTm9kZSgpKSkKICAgICAg
ICAgcmV0dXJuIHBvc2l0aW9uSW5QYXJlbnRBZnRlck5vZGUodGFiU3Bhbik7CiAKLSAgICBzcGxp
dFRleHROb2RlQ29udGFpbmluZ0VsZW1lbnQoc3RhdGljX2Nhc3Q8VGV4dCAqPihwb3MuY29udGFp
bmVyTm9kZSgpKSwgcG9zLm9mZnNldEluQ29udGFpbmVyTm9kZSgpKTsKKyAgICBzcGxpdFRleHRO
b2RlQ29udGFpbmluZ0VsZW1lbnQodG9UZXh0KHBvcy5jb250YWluZXJOb2RlKCkpLCBwb3Mub2Zm
c2V0SW5Db250YWluZXJOb2RlKCkpOwogICAgIHJldHVybiBwb3NpdGlvbkluUGFyZW50QmVmb3Jl
Tm9kZSh0YWJTcGFuKTsKIH0KIApAQCAtNTkwLDcgKzU5MCw3IEBAIGJvb2wgQ29tcG9zaXRlRWRp
dENvbW1hbmQ6OmNhblJlYmFsYW5jZSgKICAgICBpZiAocG9zaXRpb24uYW5jaG9yVHlwZSgpICE9
IFBvc2l0aW9uOjpQb3NpdGlvbklzT2Zmc2V0SW5BbmNob3IgfHwgIW5vZGUgfHwgIW5vZGUtPmlz
VGV4dE5vZGUoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgVGV4dCogdGV4dE5vZGUg
PSBzdGF0aWNfY2FzdDxUZXh0Kj4obm9kZSk7CisgICAgVGV4dCogdGV4dE5vZGUgPSB0b1RleHQo
bm9kZSk7CiAgICAgaWYgKHRleHROb2RlLT5sZW5ndGgoKSA9PSAwKQogICAgICAgICByZXR1cm4g
ZmFsc2U7CiAKQEAgLTYxMCwxNCArNjEwLDE0IEBAIHZvaWQgQ29tcG9zaXRlRWRpdENvbW1hbmQ6
OnJlYmFsYW5jZVdoaXQKIAogICAgIC8vIElmIHRoZSByZWJhbGFuY2UgaXMgZm9yIHRoZSBzaW5n
bGUgb2Zmc2V0LCBhbmQgbmVpdGhlciB0ZXh0W29mZnNldF0gbm9yIHRleHRbb2Zmc2V0IC0gMV0g
YXJlIHNvbWUgZm9ybSBvZiB3aGl0ZXNwYWNlLCBkbyBub3RoaW5nLgogICAgIGludCBvZmZzZXQg
PSBwb3NpdGlvbi5kZXByZWNhdGVkRWRpdGluZ09mZnNldCgpOwotICAgIFN0cmluZyB0ZXh0ID0g
c3RhdGljX2Nhc3Q8VGV4dCo+KG5vZGUpLT5kYXRhKCk7CisgICAgU3RyaW5nIHRleHQgPSB0b1Rl
eHQobm9kZSktPmRhdGEoKTsKICAgICBpZiAoIWlzV2hpdGVzcGFjZSh0ZXh0W29mZnNldF0pKSB7
CiAgICAgICAgIG9mZnNldC0tOwogICAgICAgICBpZiAob2Zmc2V0IDwgMCB8fCAhaXNXaGl0ZXNw
YWNlKHRleHRbb2Zmc2V0XSkpCiAgICAgICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgcmVi
YWxhbmNlV2hpdGVzcGFjZU9uVGV4dFN1YnN0cmluZyhzdGF0aWNfY2FzdDxUZXh0Kj4obm9kZSks
IHBvc2l0aW9uLm9mZnNldEluQ29udGFpbmVyTm9kZSgpLCBwb3NpdGlvbi5vZmZzZXRJbkNvbnRh
aW5lck5vZGUoKSk7CisgICAgcmViYWxhbmNlV2hpdGVzcGFjZU9uVGV4dFN1YnN0cmluZyh0b1Rl
eHQobm9kZSksIHBvc2l0aW9uLm9mZnNldEluQ29udGFpbmVyTm9kZSgpLCBwb3NpdGlvbi5vZmZz
ZXRJbkNvbnRhaW5lck5vZGUoKSk7CiB9CiAKIHZvaWQgQ29tcG9zaXRlRWRpdENvbW1hbmQ6OnJl
YmFsYW5jZVdoaXRlc3BhY2VPblRleHRTdWJzdHJpbmcoUGFzc1JlZlB0cjxUZXh0PiBwcnBUZXh0
Tm9kZSwgaW50IHN0YXJ0T2Zmc2V0LCBpbnQgZW5kT2Zmc2V0KQpAQCAtNjU5LDcgKzY1OSw3IEBA
IHZvaWQgQ29tcG9zaXRlRWRpdENvbW1hbmQ6OnByZXBhcmVXaGl0ZXMKICAgICBOb2RlKiBub2Rl
ID0gcG9zaXRpb24uZGVwcmVjYXRlZE5vZGUoKTsKICAgICBpZiAoIW5vZGUgfHwgIW5vZGUtPmlz
VGV4dE5vZGUoKSkKICAgICAgICAgcmV0dXJuOwotICAgIFRleHQqIHRleHROb2RlID0gc3RhdGlj
X2Nhc3Q8VGV4dCo+KG5vZGUpOyAgICAKKyAgICBUZXh0KiB0ZXh0Tm9kZSA9IHRvVGV4dChub2Rl
KTsgICAgCiAgICAgCiAgICAgaWYgKHRleHROb2RlLT5sZW5ndGgoKSA9PSAwKQogICAgICAgICBy
ZXR1cm47CkBAIC02NzcsOSArNjc3LDkgQEAgdm9pZCBDb21wb3NpdGVFZGl0Q29tbWFuZDo6cHJl
cGFyZVdoaXRlcwogICAgIFBvc2l0aW9uIHByZXZpb3VzKHByZXZpb3VzVmlzaWJsZVBvcy5kZWVw
RXF1aXZhbGVudCgpKTsKICAgICAKICAgICBpZiAoaXNDb2xsYXBzaWJsZVdoaXRlc3BhY2UocHJl
dmlvdXNWaXNpYmxlUG9zLmNoYXJhY3RlckFmdGVyKCkpICYmIHByZXZpb3VzLmRlcHJlY2F0ZWRO
b2RlKCktPmlzVGV4dE5vZGUoKSAmJiAhcHJldmlvdXMuZGVwcmVjYXRlZE5vZGUoKS0+aGFzVGFn
TmFtZShiclRhZykpCi0gICAgICAgIHJlcGxhY2VUZXh0SW5Ob2RlUHJlc2VydmluZ01hcmtlcnMo
c3RhdGljX2Nhc3Q8VGV4dCo+KHByZXZpb3VzLmRlcHJlY2F0ZWROb2RlKCkpLCBwcmV2aW91cy5k
ZXByZWNhdGVkRWRpdGluZ09mZnNldCgpLCAxLCBub25CcmVha2luZ1NwYWNlU3RyaW5nKCkpOwor
ICAgICAgICByZXBsYWNlVGV4dEluTm9kZVByZXNlcnZpbmdNYXJrZXJzKHRvVGV4dChwcmV2aW91
cy5kZXByZWNhdGVkTm9kZSgpKSwgcHJldmlvdXMuZGVwcmVjYXRlZEVkaXRpbmdPZmZzZXQoKSwg
MSwgbm9uQnJlYWtpbmdTcGFjZVN0cmluZygpKTsKICAgICBpZiAoaXNDb2xsYXBzaWJsZVdoaXRl
c3BhY2UodmlzaWJsZVBvcy5jaGFyYWN0ZXJBZnRlcigpKSAmJiBwb3NpdGlvbi5kZXByZWNhdGVk
Tm9kZSgpLT5pc1RleHROb2RlKCkgJiYgIXBvc2l0aW9uLmRlcHJlY2F0ZWROb2RlKCktPmhhc1Rh
Z05hbWUoYnJUYWcpKQotICAgICAgICByZXBsYWNlVGV4dEluTm9kZVByZXNlcnZpbmdNYXJrZXJz
KHN0YXRpY19jYXN0PFRleHQqPihwb3NpdGlvbi5kZXByZWNhdGVkTm9kZSgpKSwgcG9zaXRpb24u
ZGVwcmVjYXRlZEVkaXRpbmdPZmZzZXQoKSwgMSwgbm9uQnJlYWtpbmdTcGFjZVN0cmluZygpKTsK
KyAgICAgICAgcmVwbGFjZVRleHRJbk5vZGVQcmVzZXJ2aW5nTWFya2Vycyh0b1RleHQocG9zaXRp
b24uZGVwcmVjYXRlZE5vZGUoKSksIHBvc2l0aW9uLmRlcHJlY2F0ZWRFZGl0aW5nT2Zmc2V0KCks
IDEsIG5vbkJyZWFraW5nU3BhY2VTdHJpbmcoKSk7CiB9CiAKIHZvaWQgQ29tcG9zaXRlRWRpdENv
bW1hbmQ6OnJlYmFsYW5jZVdoaXRlc3BhY2UoKQpAQCAtNzg0LDcgKzc4NCw3IEBAIHZvaWQgQ29t
cG9zaXRlRWRpdENvbW1hbmQ6OmRlbGV0ZUluc2lnbmkKICAgICBmb3IgKE5vZGUqIG5vZGUgPSBz
dGFydC5kZXByZWNhdGVkTm9kZSgpOyBub2RlOyBub2RlID0gbmV4dCkgewogICAgICAgICBuZXh0
ID0gbm9kZS0+dHJhdmVyc2VOZXh0Tm9kZSgpOwogICAgICAgICBpZiAobm9kZS0+aXNUZXh0Tm9k
ZSgpKSB7Ci0gICAgICAgICAgICBUZXh0KiB0ZXh0Tm9kZSA9IHN0YXRpY19jYXN0PFRleHQqPihu
b2RlKTsKKyAgICAgICAgICAgIFRleHQqIHRleHROb2RlID0gdG9UZXh0KG5vZGUpOwogICAgICAg
ICAgICAgaW50IHN0YXJ0T2Zmc2V0ID0gbm9kZSA9PSBzdGFydC5kZXByZWNhdGVkTm9kZSgpID8g
c3RhcnQuZGVwcmVjYXRlZEVkaXRpbmdPZmZzZXQoKSA6IDA7CiAgICAgICAgICAgICBpbnQgZW5k
T2Zmc2V0ID0gbm9kZSA9PSBlbmQuZGVwcmVjYXRlZE5vZGUoKSA/IGVuZC5kZXByZWNhdGVkRWRp
dGluZ09mZnNldCgpIDogc3RhdGljX2Nhc3Q8aW50Pih0ZXh0Tm9kZS0+bGVuZ3RoKCkpOwogICAg
ICAgICAgICAgZGVsZXRlSW5zaWduaWZpY2FudFRleHQodGV4dE5vZGUsIHN0YXJ0T2Zmc2V0LCBl
bmRPZmZzZXQpOwpAQCAtODU3LDcgKzg1Nyw3IEBAIHZvaWQgQ29tcG9zaXRlRWRpdENvbW1hbmQ6
OnJlbW92ZVBsYWNlaG8KICAgICAgICAgcmV0dXJuOwogICAgIH0KICAgICAKLSAgICBkZWxldGVU
ZXh0RnJvbU5vZGUoc3RhdGljX2Nhc3Q8VGV4dCo+KHAuYW5jaG9yTm9kZSgpKSwgcC5vZmZzZXRJ
bkNvbnRhaW5lck5vZGUoKSwgMSk7CisgICAgZGVsZXRlVGV4dEZyb21Ob2RlKHRvVGV4dChwLmFu
Y2hvck5vZGUoKSksIHAub2Zmc2V0SW5Db250YWluZXJOb2RlKCksIDEpOwogfQogCiBQYXNzUmVm
UHRyPE5vZGU+IENvbXBvc2l0ZUVkaXRDb21tYW5kOjppbnNlcnROZXdEZWZhdWx0UGFyYWdyYXBo
RWxlbWVudEF0KGNvbnN0IFBvc2l0aW9uJiBwb3NpdGlvbikKQEAgLTEwMzMsNyArMTAzMyw3IEBA
IHZvaWQgQ29tcG9zaXRlRWRpdENvbW1hbmQ6OmNsZWFudXBBZnRlckQKICAgICAgICAgZWxzZSBp
ZiAobGluZUJyZWFrRXhpc3RzQXRQb3NpdGlvbihwb3NpdGlvbikpIHsKICAgICAgICAgICAgIC8v
IFRoZXJlIGlzIGEgcHJlc2VydmVkICdcbicgYXQgY2FyZXRBZnRlckRlbGV0ZS4KICAgICAgICAg
ICAgIC8vIFdlIGNhbiBzYWZlbHkgYXNzdW1lIHRoaXMgaXMgYSB0ZXh0IG5vZGUuCi0gICAgICAg
ICAgICBUZXh0KiB0ZXh0Tm9kZSA9IHN0YXRpY19jYXN0PFRleHQqPihub2RlKTsKKyAgICAgICAg
ICAgIFRleHQqIHRleHROb2RlID0gdG9UZXh0KG5vZGUpOwogICAgICAgICAgICAgaWYgKHRleHRO
b2RlLT5sZW5ndGgoKSA9PSAxKQogICAgICAgICAgICAgICAgIHJlbW92ZU5vZGVBbmRQcnVuZUFu
Y2VzdG9ycyhub2RlKTsKICAgICAgICAgICAgIGVsc2UKQEAgLTEzMjYsNyArMTMyNiw3IEBAIGJv
b2wgQ29tcG9zaXRlRWRpdENvbW1hbmQ6OmJyZWFrT3V0T2ZFbXAKICAgICAgICAgcmVtb3ZlTm9k
ZUFuZFBydW5lQW5jZXN0b3JzKGNhcmV0UG9zLmRlcHJlY2F0ZWROb2RlKCkpOwogICAgIGVsc2Ug
aWYgKGNhcmV0UG9zLmRlcHJlY2F0ZWROb2RlKCktPmlzVGV4dE5vZGUoKSkgewogICAgICAgICBB
U1NFUlQoY2FyZXRQb3MuZGVwcmVjYXRlZEVkaXRpbmdPZmZzZXQoKSA9PSAwKTsKLSAgICAgICAg
VGV4dCogdGV4dE5vZGUgPSBzdGF0aWNfY2FzdDxUZXh0Kj4oY2FyZXRQb3MuZGVwcmVjYXRlZE5v
ZGUoKSk7CisgICAgICAgIFRleHQqIHRleHROb2RlID0gdG9UZXh0KGNhcmV0UG9zLmRlcHJlY2F0
ZWROb2RlKCkpOwogICAgICAgICBDb250YWluZXJOb2RlKiBwYXJlbnROb2RlID0gdGV4dE5vZGUt
PnBhcmVudE5vZGUoKTsKICAgICAgICAgLy8gVGhlIHByZXNlcnZlZCBuZXdsaW5lIG11c3QgYmUg
dGhlIGZpcnN0IHRoaW5nIGluIHRoZSBub2RlLCBzaW5jZSBvdGhlcndpc2UgdGhlIHByZXZpb3Vz
CiAgICAgICAgIC8vIHBhcmFncmFwaCB3b3VsZCBiZSBxdW90ZWQsIGFuZCB3ZSB2ZXJpZmllZCB0
aGF0IGl0IHdhc24ndCBhYm92ZS4KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRGVsZXRl
U2VsZWN0aW9uQ29tbWFuZC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZWRpdGlu
Zy9EZWxldGVTZWxlY3Rpb25Db21tYW5kLmNwcAkocmV2aXNpb24gMTA3NDM0KQorKysgU291cmNl
L1dlYkNvcmUvZWRpdGluZy9EZWxldGVTZWxlY3Rpb25Db21tYW5kLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtNDIzLDcgKzQyMyw3IEBAIHZvaWQgRGVsZXRlU2VsZWN0aW9uQ29tbWFuZDo6aGFuZGxl
R2VuZXIKICAgICB9CiAKICAgICBpZiAoc3RhcnRPZmZzZXQgPj0gY2FyZXRNYXhPZmZzZXQoc3Rh
cnROb2RlKSAmJiBzdGFydE5vZGUtPmlzVGV4dE5vZGUoKSkgewotICAgICAgICBUZXh0ICp0ZXh0
ID0gc3RhdGljX2Nhc3Q8VGV4dCAqPihzdGFydE5vZGUpOworICAgICAgICBUZXh0KiB0ZXh0ID0g
dG9UZXh0KHN0YXJ0Tm9kZSk7CiAgICAgICAgIGlmICh0ZXh0LT5sZW5ndGgoKSA+ICh1bnNpZ25l
ZCljYXJldE1heE9mZnNldChzdGFydE5vZGUpKQogICAgICAgICAgICAgZGVsZXRlVGV4dEZyb21O
b2RlKHRleHQsIGNhcmV0TWF4T2Zmc2V0KHN0YXJ0Tm9kZSksIHRleHQtPmxlbmd0aCgpIC0gY2Fy
ZXRNYXhPZmZzZXQoc3RhcnROb2RlKSk7CiAgICAgfQpAQCAtNDQxLDcgKzQ0MSw3IEBAIHZvaWQg
RGVsZXRlU2VsZWN0aW9uQ29tbWFuZDo6aGFuZGxlR2VuZXIKICAgICAgICAgaWYgKG1fZG93bnN0
cmVhbUVuZC5kZXByZWNhdGVkRWRpdGluZ09mZnNldCgpIC0gc3RhcnRPZmZzZXQgPiAwKSB7CiAg
ICAgICAgICAgICBpZiAoc3RhcnROb2RlLT5pc1RleHROb2RlKCkpIHsKICAgICAgICAgICAgICAg
ICAvLyBpbiBhIHRleHQgbm9kZSB0aGF0IG5lZWRzIHRvIGJlIHRyaW1tZWQKLSAgICAgICAgICAg
ICAgICBUZXh0KiB0ZXh0ID0gc3RhdGljX2Nhc3Q8VGV4dCo+KHN0YXJ0Tm9kZSk7CisgICAgICAg
ICAgICAgICAgVGV4dCogdGV4dCA9IHRvVGV4dChzdGFydE5vZGUpOwogICAgICAgICAgICAgICAg
IGRlbGV0ZVRleHRGcm9tTm9kZSh0ZXh0LCBzdGFydE9mZnNldCwgbV9kb3duc3RyZWFtRW5kLmRl
cHJlY2F0ZWRFZGl0aW5nT2Zmc2V0KCkgLSBzdGFydE9mZnNldCk7CiAgICAgICAgICAgICB9IGVs
c2UgewogICAgICAgICAgICAgICAgIHJlbW92ZUNoaWxkcmVuSW5SYW5nZShzdGFydE5vZGUsIHN0
YXJ0T2Zmc2V0LCBtX2Rvd25zdHJlYW1FbmQuZGVwcmVjYXRlZEVkaXRpbmdPZmZzZXQoKSk7CkBA
IC00NjEsMTQgKzQ2MSwxNCBAQCB2b2lkIERlbGV0ZVNlbGVjdGlvbkNvbW1hbmQ6OmhhbmRsZUdl
bmVyCiAgICAgICAgIGlmIChzdGFydE9mZnNldCA+IDApIHsKICAgICAgICAgICAgIGlmIChzdGFy
dE5vZGUtPmlzVGV4dE5vZGUoKSkgewogICAgICAgICAgICAgICAgIC8vIGluIGEgdGV4dCBub2Rl
IHRoYXQgbmVlZHMgdG8gYmUgdHJpbW1lZAotICAgICAgICAgICAgICAgIFRleHQgKnRleHQgPSBz
dGF0aWNfY2FzdDxUZXh0ICo+KG5vZGUuZ2V0KCkpOworICAgICAgICAgICAgICAgIFRleHQqIHRl
eHQgPSB0b1RleHQobm9kZS5nZXQoKSk7CiAgICAgICAgICAgICAgICAgZGVsZXRlVGV4dEZyb21O
b2RlKHRleHQsIHN0YXJ0T2Zmc2V0LCB0ZXh0LT5sZW5ndGgoKSAtIHN0YXJ0T2Zmc2V0KTsKICAg
ICAgICAgICAgICAgICBub2RlID0gbm9kZS0+dHJhdmVyc2VOZXh0Tm9kZSgpOwogICAgICAgICAg
ICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICBub2RlID0gc3RhcnROb2RlLT5jaGlsZE5vZGUo
c3RhcnRPZmZzZXQpOwogICAgICAgICAgICAgfQogICAgICAgICB9IGVsc2UgaWYgKHN0YXJ0Tm9k
ZSA9PSBtX3Vwc3RyZWFtRW5kLmRlcHJlY2F0ZWROb2RlKCkgJiYgc3RhcnROb2RlLT5pc1RleHRO
b2RlKCkpIHsKLSAgICAgICAgICAgIFRleHQqIHRleHQgPSBzdGF0aWNfY2FzdDxUZXh0Kj4obV91
cHN0cmVhbUVuZC5kZXByZWNhdGVkTm9kZSgpKTsKKyAgICAgICAgICAgIFRleHQqIHRleHQgPSB0
b1RleHQobV91cHN0cmVhbUVuZC5kZXByZWNhdGVkTm9kZSgpKTsKICAgICAgICAgICAgIGRlbGV0
ZVRleHRGcm9tTm9kZSh0ZXh0LCAwLCBtX3Vwc3RyZWFtRW5kLmRlcHJlY2F0ZWRFZGl0aW5nT2Zm
c2V0KCkpOwogICAgICAgICB9CiAgICAgICAgIApAQCAtNTAxLDcgKzUwMSw3IEBAIHZvaWQgRGVs
ZXRlU2VsZWN0aW9uQ29tbWFuZDo6aGFuZGxlR2VuZXIKICAgICAgICAgICAgIH0gZWxzZSB7CiAg
ICAgICAgICAgICAgICAgaWYgKG1fZG93bnN0cmVhbUVuZC5kZXByZWNhdGVkTm9kZSgpLT5pc1Rl
eHROb2RlKCkpIHsKICAgICAgICAgICAgICAgICAgICAgLy8gaW4gYSB0ZXh0IG5vZGUgdGhhdCBu
ZWVkcyB0byBiZSB0cmltbWVkCi0gICAgICAgICAgICAgICAgICAgIFRleHQqIHRleHQgPSBzdGF0
aWNfY2FzdDxUZXh0Kj4obV9kb3duc3RyZWFtRW5kLmRlcHJlY2F0ZWROb2RlKCkpOworICAgICAg
ICAgICAgICAgICAgICBUZXh0KiB0ZXh0ID0gdG9UZXh0KG1fZG93bnN0cmVhbUVuZC5kZXByZWNh
dGVkTm9kZSgpKTsKICAgICAgICAgICAgICAgICAgICAgaWYgKG1fZG93bnN0cmVhbUVuZC5kZXBy
ZWNhdGVkRWRpdGluZ09mZnNldCgpID4gMCkgewogICAgICAgICAgICAgICAgICAgICAgICAgZGVs
ZXRlVGV4dEZyb21Ob2RlKHRleHQsIDAsIG1fZG93bnN0cmVhbUVuZC5kZXByZWNhdGVkRWRpdGlu
Z09mZnNldCgpKTsKICAgICAgICAgICAgICAgICAgICAgfQpAQCAtNTMzLDEyICs1MzMsMTIgQEAg
dm9pZCBEZWxldGVTZWxlY3Rpb25Db21tYW5kOjpmaXh1cFdoaXRlcwogICAgIGRvY3VtZW50KCkt
PnVwZGF0ZUxheW91dElnbm9yZVBlbmRpbmdTdHlsZXNoZWV0cygpOwogICAgIC8vIEZJWE1FOiBp
c1JlbmRlcmVkQ2hhcmFjdGVyIHNob3VsZCBiZSByZW1vdmVkLCBhbmQgd2Ugc2hvdWxkIHVzZSBW
aXNpYmxlUG9zaXRpb246OmNoYXJhY3RlckFmdGVyIGFuZCBWaXNpYmxlUG9zaXRpb246OmNoYXJh
Y3RlckJlZm9yZQogICAgIGlmIChtX2xlYWRpbmdXaGl0ZXNwYWNlLmlzTm90TnVsbCgpICYmICFt
X2xlYWRpbmdXaGl0ZXNwYWNlLmlzUmVuZGVyZWRDaGFyYWN0ZXIoKSAmJiBtX2xlYWRpbmdXaGl0
ZXNwYWNlLmRlcHJlY2F0ZWROb2RlKCktPmlzVGV4dE5vZGUoKSkgewotICAgICAgICBUZXh0KiB0
ZXh0Tm9kZSA9IHN0YXRpY19jYXN0PFRleHQqPihtX2xlYWRpbmdXaGl0ZXNwYWNlLmRlcHJlY2F0
ZWROb2RlKCkpOworICAgICAgICBUZXh0KiB0ZXh0Tm9kZSA9IHRvVGV4dChtX2xlYWRpbmdXaGl0
ZXNwYWNlLmRlcHJlY2F0ZWROb2RlKCkpOwogICAgICAgICBBU1NFUlQoIXRleHROb2RlLT5yZW5k
ZXJlcigpIHx8IHRleHROb2RlLT5yZW5kZXJlcigpLT5zdHlsZSgpLT5jb2xsYXBzZVdoaXRlU3Bh
Y2UoKSk7CiAgICAgICAgIHJlcGxhY2VUZXh0SW5Ob2RlUHJlc2VydmluZ01hcmtlcnModGV4dE5v
ZGUsIG1fbGVhZGluZ1doaXRlc3BhY2UuZGVwcmVjYXRlZEVkaXRpbmdPZmZzZXQoKSwgMSwgbm9u
QnJlYWtpbmdTcGFjZVN0cmluZygpKTsKICAgICB9CiAgICAgaWYgKG1fdHJhaWxpbmdXaGl0ZXNw
YWNlLmlzTm90TnVsbCgpICYmICFtX3RyYWlsaW5nV2hpdGVzcGFjZS5pc1JlbmRlcmVkQ2hhcmFj
dGVyKCkgJiYgbV90cmFpbGluZ1doaXRlc3BhY2UuZGVwcmVjYXRlZE5vZGUoKS0+aXNUZXh0Tm9k
ZSgpKSB7Ci0gICAgICAgIFRleHQqIHRleHROb2RlID0gc3RhdGljX2Nhc3Q8VGV4dCo+KG1fdHJh
aWxpbmdXaGl0ZXNwYWNlLmRlcHJlY2F0ZWROb2RlKCkpOworICAgICAgICBUZXh0KiB0ZXh0Tm9k
ZSA9IHRvVGV4dChtX3RyYWlsaW5nV2hpdGVzcGFjZS5kZXByZWNhdGVkTm9kZSgpKTsKICAgICAg
ICAgQVNTRVJUKCF0ZXh0Tm9kZS0+cmVuZGVyZXIoKSB8fHRleHROb2RlLT5yZW5kZXJlcigpLT5z
dHlsZSgpLT5jb2xsYXBzZVdoaXRlU3BhY2UoKSk7CiAgICAgICAgIHJlcGxhY2VUZXh0SW5Ob2Rl
UHJlc2VydmluZ01hcmtlcnModGV4dE5vZGUsIG1fdHJhaWxpbmdXaGl0ZXNwYWNlLmRlcHJlY2F0
ZWRFZGl0aW5nT2Zmc2V0KCksIDEsIG5vbkJyZWFraW5nU3BhY2VTdHJpbmcoKSk7CiAgICAgfQpJ
bmRleDogU291cmNlL1dlYkNvcmUvZWRpdGluZy9FZGl0b3IuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL2VkaXRpbmcvRWRpdG9yLmNwcAkocmV2aXNpb24gMTA3NDM0KQorKysgU291
cmNlL1dlYkNvcmUvZWRpdGluZy9FZGl0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNTAyLDcg
KzE1MDIsNyBAQCB2b2lkIEVkaXRvcjo6c2V0Q29tcG9zaXRpb24oY29uc3QgU3RyaW5nCiAgICAg
ICAgIHVuc2lnbmVkIGV4dGVudE9mZnNldCA9IGV4dGVudC5kZXByZWNhdGVkRWRpdGluZ09mZnNl
dCgpOwogCiAgICAgICAgIGlmIChiYXNlTm9kZSAmJiBiYXNlTm9kZSA9PSBleHRlbnROb2RlICYm
IGJhc2VOb2RlLT5pc1RleHROb2RlKCkgJiYgYmFzZU9mZnNldCArIHRleHQubGVuZ3RoKCkgPT0g
ZXh0ZW50T2Zmc2V0KSB7Ci0gICAgICAgICAgICBtX2NvbXBvc2l0aW9uTm9kZSA9IHN0YXRpY19j
YXN0PFRleHQqPihiYXNlTm9kZSk7CisgICAgICAgICAgICBtX2NvbXBvc2l0aW9uTm9kZSA9IHRv
VGV4dChiYXNlTm9kZSk7CiAgICAgICAgICAgICBtX2NvbXBvc2l0aW9uU3RhcnQgPSBiYXNlT2Zm
c2V0OwogICAgICAgICAgICAgbV9jb21wb3NpdGlvbkVuZCA9IGV4dGVudE9mZnNldDsKICAgICAg
ICAgICAgIG1fY3VzdG9tQ29tcG9zaXRpb25VbmRlcmxpbmVzID0gdW5kZXJsaW5lczsKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvSW5zZXJ0TGluZUJyZWFrQ29tbWFuZC5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvZWRpdGluZy9JbnNlcnRMaW5lQnJlYWtDb21tYW5kLmNw
cAkocmV2aXNpb24gMTA3NDM0KQorKysgU291cmNlL1dlYkNvcmUvZWRpdGluZy9JbnNlcnRMaW5l
QnJlYWtDb21tYW5kLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTM3LDcgKzEzNyw3IEBAIHZvaWQg
SW5zZXJ0TGluZUJyZWFrQ29tbWFuZDo6ZG9BcHBseSgpCiAgICAgICAgIHNldEVuZGluZ1NlbGVj
dGlvbihWaXNpYmxlU2VsZWN0aW9uKHBvc2l0aW9uSW5QYXJlbnRBZnRlck5vZGUobm9kZVRvSW5z
ZXJ0LmdldCgpKSwgRE9XTlNUUkVBTSwgZW5kaW5nU2VsZWN0aW9uKCkuaXNEaXJlY3Rpb25hbCgp
KSk7CiAgICAgfSBlbHNlIGlmIChwb3MuZGVwcmVjYXRlZE5vZGUoKS0+aXNUZXh0Tm9kZSgpKSB7
CiAgICAgICAgIC8vIFNwbGl0IGEgdGV4dCBub2RlCi0gICAgICAgIFRleHQqIHRleHROb2RlID0g
c3RhdGljX2Nhc3Q8VGV4dCo+KHBvcy5kZXByZWNhdGVkTm9kZSgpKTsKKyAgICAgICAgVGV4dCog
dGV4dE5vZGUgPSB0b1RleHQocG9zLmRlcHJlY2F0ZWROb2RlKCkpOwogICAgICAgICBzcGxpdFRl
eHROb2RlKHRleHROb2RlLCBwb3MuZGVwcmVjYXRlZEVkaXRpbmdPZmZzZXQoKSk7CiAgICAgICAg
IGluc2VydE5vZGVCZWZvcmUobm9kZVRvSW5zZXJ0LCB0ZXh0Tm9kZSk7CiAgICAgICAgIFBvc2l0
aW9uIGVuZGluZ1Bvc2l0aW9uID0gZmlyc3RQb3NpdGlvbkluTm9kZSh0ZXh0Tm9kZSk7CkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0luc2VydFBhcmFncmFwaFNlcGFyYXRvckNvbW1hbmQu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvSW5zZXJ0UGFyYWdyYXBo
U2VwYXJhdG9yQ29tbWFuZC5jcHAJKHJldmlzaW9uIDEwNzQzNCkKKysrIFNvdXJjZS9XZWJDb3Jl
L2VkaXRpbmcvSW5zZXJ0UGFyYWdyYXBoU2VwYXJhdG9yQ29tbWFuZC5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTMyMiwxNCArMzIyLDE0IEBAIHZvaWQgSW5zZXJ0UGFyYWdyYXBoU2VwYXJhdG9yQ29t
bWFuZDo6ZG8KICAgICAvLyBGSVhNRTogbGVhZGluZ1doaXRlc3BhY2VQb3NpdGlvbiBpcyByZXR1
cm5pbmcgdGhlIHBvc2l0aW9uIGJlZm9yZSBwcmVzZXJ2ZWQgbmV3bGluZXMgZm9yIHBvc2l0aW9u
cwogICAgIC8vIGFmdGVyIHRoZSBwcmVzZXJ2ZWQgbmV3bGluZSwgY2F1c2luZyB0aGUgbmV3bGlu
ZSB0byBiZSB0dXJuZWQgaW50byBhIG5ic3AuCiAgICAgaWYgKGxlYWRpbmdXaGl0ZXNwYWNlLmlz
Tm90TnVsbCgpICYmIGxlYWRpbmdXaGl0ZXNwYWNlLmRlcHJlY2F0ZWROb2RlKCktPmlzVGV4dE5v
ZGUoKSkgewotICAgICAgICBUZXh0KiB0ZXh0Tm9kZSA9IHN0YXRpY19jYXN0PFRleHQqPihsZWFk
aW5nV2hpdGVzcGFjZS5kZXByZWNhdGVkTm9kZSgpKTsKKyAgICAgICAgVGV4dCogdGV4dE5vZGUg
PSB0b1RleHQobGVhZGluZ1doaXRlc3BhY2UuZGVwcmVjYXRlZE5vZGUoKSk7CiAgICAgICAgIEFT
U0VSVCghdGV4dE5vZGUtPnJlbmRlcmVyKCkgfHwgdGV4dE5vZGUtPnJlbmRlcmVyKCktPnN0eWxl
KCktPmNvbGxhcHNlV2hpdGVTcGFjZSgpKTsKICAgICAgICAgcmVwbGFjZVRleHRJbk5vZGVQcmVz
ZXJ2aW5nTWFya2Vycyh0ZXh0Tm9kZSwgbGVhZGluZ1doaXRlc3BhY2UuZGVwcmVjYXRlZEVkaXRp
bmdPZmZzZXQoKSwgMSwgbm9uQnJlYWtpbmdTcGFjZVN0cmluZygpKTsKICAgICB9CiAgICAgCiAg
ICAgLy8gU3BsaXQgYXQgcG9zIGlmIGluIHRoZSBtaWRkbGUgb2YgYSB0ZXh0IG5vZGUuCiAgICAg
aWYgKGluc2VydGlvblBvc2l0aW9uLmRlcHJlY2F0ZWROb2RlKCktPmlzVGV4dE5vZGUoKSkgewot
ICAgICAgICBUZXh0KiB0ZXh0Tm9kZSA9IHN0YXRpY19jYXN0PFRleHQqPihpbnNlcnRpb25Qb3Np
dGlvbi5kZXByZWNhdGVkTm9kZSgpKTsKKyAgICAgICAgVGV4dCogdGV4dE5vZGUgPSB0b1RleHQo
aW5zZXJ0aW9uUG9zaXRpb24uZGVwcmVjYXRlZE5vZGUoKSk7CiAgICAgICAgIGJvb2wgYXRFbmQg
PSAodW5zaWduZWQpaW5zZXJ0aW9uUG9zaXRpb24uZGVwcmVjYXRlZEVkaXRpbmdPZmZzZXQoKSA+
PSB0ZXh0Tm9kZS0+bGVuZ3RoKCk7CiAgICAgICAgIGlmIChpbnNlcnRpb25Qb3NpdGlvbi5kZXBy
ZWNhdGVkRWRpdGluZ09mZnNldCgpID4gMCAmJiAhYXRFbmQpIHsKICAgICAgICAgICAgIHNwbGl0
VGV4dE5vZGUodGV4dE5vZGUsIGluc2VydGlvblBvc2l0aW9uLmRlcHJlY2F0ZWRFZGl0aW5nT2Zm
c2V0KCkpOwpAQCAtMzg5LDcgKzM4OSw3IEBAIHZvaWQgSW5zZXJ0UGFyYWdyYXBoU2VwYXJhdG9y
Q29tbWFuZDo6ZG8KICAgICAgICAgICAgIEFTU0VSVCghaW5zZXJ0aW9uUG9zaXRpb24uZGVwcmVj
YXRlZE5vZGUoKS0+cmVuZGVyZXIoKSB8fCBpbnNlcnRpb25Qb3NpdGlvbi5kZXByZWNhdGVkTm9k
ZSgpLT5yZW5kZXJlcigpLT5zdHlsZSgpLT5jb2xsYXBzZVdoaXRlU3BhY2UoKSk7CiAgICAgICAg
ICAgICBkZWxldGVJbnNpZ25pZmljYW50VGV4dERvd25zdHJlYW0oaW5zZXJ0aW9uUG9zaXRpb24p
OwogICAgICAgICAgICAgaWYgKGluc2VydGlvblBvc2l0aW9uLmRlcHJlY2F0ZWROb2RlKCktPmlz
VGV4dE5vZGUoKSkKLSAgICAgICAgICAgICAgICBpbnNlcnRUZXh0SW50b05vZGUoc3RhdGljX2Nh
c3Q8VGV4dCo+KGluc2VydGlvblBvc2l0aW9uLmRlcHJlY2F0ZWROb2RlKCkpLCAwLCBub25CcmVh
a2luZ1NwYWNlU3RyaW5nKCkpOworICAgICAgICAgICAgICAgIGluc2VydFRleHRJbnRvTm9kZSh0
b1RleHQoaW5zZXJ0aW9uUG9zaXRpb24uZGVwcmVjYXRlZE5vZGUoKSksIDAsIG5vbkJyZWFraW5n
U3BhY2VTdHJpbmcoKSk7CiAgICAgICAgIH0KICAgICB9CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L2VkaXRpbmcvSW5zZXJ0VGV4dENvbW1hbmQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL2VkaXRpbmcvSW5zZXJ0VGV4dENvbW1hbmQuY3BwCShyZXZpc2lvbiAxMDc0MzQpCisrKyBT
b3VyY2UvV2ViQ29yZS9lZGl0aW5nL0luc2VydFRleHRDb21tYW5kLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMjA5LDcgKzIwOSw3IEBAIFBvc2l0aW9uIEluc2VydFRleHRDb21tYW5kOjppbnNlcnRU
YWIoY28KIAogICAgIC8vIGtlZXAgdGFicyBjb2FsZXNjZWQgaW4gdGFiIHNwYW4KICAgICBpZiAo
aXNUYWJTcGFuVGV4dE5vZGUobm9kZSkpIHsKLSAgICAgICAgUmVmUHRyPFRleHQ+IHRleHROb2Rl
ID0gc3RhdGljX2Nhc3Q8VGV4dCo+KG5vZGUpOworICAgICAgICBSZWZQdHI8VGV4dD4gdGV4dE5v
ZGUgPSB0b1RleHQobm9kZSk7CiAgICAgICAgIGluc2VydFRleHRJbnRvTm9kZSh0ZXh0Tm9kZSwg
b2Zmc2V0LCAiXHQiKTsKICAgICAgICAgcmV0dXJuIFBvc2l0aW9uKHRleHROb2RlLnJlbGVhc2Uo
KSwgb2Zmc2V0ICsgMSk7CiAgICAgfQpAQCAtMjIxLDcgKzIyMSw3IEBAIFBvc2l0aW9uIEluc2Vy
dFRleHRDb21tYW5kOjppbnNlcnRUYWIoY28KICAgICBpZiAoIW5vZGUtPmlzVGV4dE5vZGUoKSkg
ewogICAgICAgICBpbnNlcnROb2RlQXQoc3Bhbk5vZGUuZ2V0KCksIGluc2VydFBvcyk7CiAgICAg
fSBlbHNlIHsKLSAgICAgICAgUmVmUHRyPFRleHQ+IHRleHROb2RlID0gc3RhdGljX2Nhc3Q8VGV4
dCo+KG5vZGUpOworICAgICAgICBSZWZQdHI8VGV4dD4gdGV4dE5vZGUgPSB0b1RleHQobm9kZSk7
CiAgICAgICAgIGlmIChvZmZzZXQgPj0gdGV4dE5vZGUtPmxlbmd0aCgpKQogICAgICAgICAgICAg
aW5zZXJ0Tm9kZUFmdGVyKHNwYW5Ob2RlLCB0ZXh0Tm9kZS5yZWxlYXNlKCkpOwogICAgICAgICBl
bHNlIHsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvTWFya3VwQWNjdW11bGF0b3IuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvTWFya3VwQWNjdW11bGF0b3Iu
Y3BwCShyZXZpc2lvbiAxMDc0MzQpCisrKyBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL01hcmt1cEFj
Y3VtdWxhdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDE5LDcgKzQxOSw3IEBAIHZvaWQgTWFy
a3VwQWNjdW11bGF0b3I6OmFwcGVuZFN0YXJ0TWFya3UKIAogICAgIHN3aXRjaCAobm9kZS0+bm9k
ZVR5cGUoKSkgewogICAgIGNhc2UgTm9kZTo6VEVYVF9OT0RFOgotICAgICAgICBhcHBlbmRUZXh0
KHJlc3VsdCwgc3RhdGljX2Nhc3Q8VGV4dCo+KGNvbnN0X2Nhc3Q8Tm9kZSo+KG5vZGUpKSk7Cisg
ICAgICAgIGFwcGVuZFRleHQocmVzdWx0LCB0b1RleHQoY29uc3RfY2FzdDxOb2RlKj4obm9kZSkp
KTsKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBOb2RlOjpDT01NRU5UX05PREU6CiAgICAgICAg
IGFwcGVuZENvbW1lbnQocmVzdWx0LCBzdGF0aWNfY2FzdDxjb25zdCBDb21tZW50Kj4obm9kZSkt
PmRhdGEoKSk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1JlcGxhY2VTZWxlY3Rpb25D
b21tYW5kLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1JlcGxhY2VT
ZWxlY3Rpb25Db21tYW5kLmNwcAkocmV2aXNpb24gMTA3NDM0KQorKysgU291cmNlL1dlYkNvcmUv
ZWRpdGluZy9SZXBsYWNlU2VsZWN0aW9uQ29tbWFuZC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU5
Nyw3ICs1OTcsNyBAQCB2b2lkIFJlcGxhY2VTZWxlY3Rpb25Db21tYW5kOjpyZW1vdmVVbnJlCiAg
ICAgZG9jdW1lbnQoKS0+dXBkYXRlTGF5b3V0SWdub3JlUGVuZGluZ1N0eWxlc2hlZXRzKCk7CiAK
ICAgICBOb2RlKiBsYXN0TGVhZkluc2VydGVkID0gaW5zZXJ0ZWROb2Rlcy5sYXN0TGVhZkluc2Vy
dGVkKCk7Ci0gICAgaWYgKGxhc3RMZWFmSW5zZXJ0ZWQgJiYgbGFzdExlYWZJbnNlcnRlZC0+aXNU
ZXh0Tm9kZSgpICYmICFub2RlSGFzVmlzaWJsZVJlbmRlclRleHQoc3RhdGljX2Nhc3Q8VGV4dCo+
KGxhc3RMZWFmSW5zZXJ0ZWQpKQorICAgIGlmIChsYXN0TGVhZkluc2VydGVkICYmIGxhc3RMZWFm
SW5zZXJ0ZWQtPmlzVGV4dE5vZGUoKSAmJiAhbm9kZUhhc1Zpc2libGVSZW5kZXJUZXh0KHRvVGV4
dChsYXN0TGVhZkluc2VydGVkKSkKICAgICAgICAgJiYgIWVuY2xvc2luZ05vZGVXaXRoVGFnKGZp
cnN0UG9zaXRpb25Jbk9yQmVmb3JlTm9kZShsYXN0TGVhZkluc2VydGVkKSwgc2VsZWN0VGFnKQog
ICAgICAgICAmJiAhZW5jbG9zaW5nTm9kZVdpdGhUYWcoZmlyc3RQb3NpdGlvbkluT3JCZWZvcmVO
b2RlKGxhc3RMZWFmSW5zZXJ0ZWQpLCBzY3JpcHRUYWcpKSB7CiAgICAgICAgIGluc2VydGVkTm9k
ZXMud2lsbFJlbW92ZU5vZGUobGFzdExlYWZJbnNlcnRlZCk7CkBAIC02MDgsNyArNjA4LDcgQEAg
dm9pZCBSZXBsYWNlU2VsZWN0aW9uQ29tbWFuZDo6cmVtb3ZlVW5yZQogICAgIC8vIGl0IGlzIGEg
dG9wIGxldmVsIG5vZGUgaW4gdGhlIGZyYWdtZW50IGFuZCB0aGUgdXNlciBjYW4ndCBpbnNlcnQg
aW50byB0aG9zZSBlbGVtZW50cy4KICAgICBOb2RlKiBmaXJzdE5vZGVJbnNlcnRlZCA9IGluc2Vy
dGVkTm9kZXMuZmlyc3ROb2RlSW5zZXJ0ZWQoKTsKICAgICBsYXN0TGVhZkluc2VydGVkID0gaW5z
ZXJ0ZWROb2Rlcy5sYXN0TGVhZkluc2VydGVkKCk7Ci0gICAgaWYgKGZpcnN0Tm9kZUluc2VydGVk
ICYmIGZpcnN0Tm9kZUluc2VydGVkLT5pc1RleHROb2RlKCkgJiYgIW5vZGVIYXNWaXNpYmxlUmVu
ZGVyVGV4dChzdGF0aWNfY2FzdDxUZXh0Kj4oZmlyc3ROb2RlSW5zZXJ0ZWQpKSkgeworICAgIGlm
IChmaXJzdE5vZGVJbnNlcnRlZCAmJiBmaXJzdE5vZGVJbnNlcnRlZC0+aXNUZXh0Tm9kZSgpICYm
ICFub2RlSGFzVmlzaWJsZVJlbmRlclRleHQodG9UZXh0KGZpcnN0Tm9kZUluc2VydGVkKSkpIHsK
ICAgICAgICAgaW5zZXJ0ZWROb2Rlcy53aWxsUmVtb3ZlTm9kZShmaXJzdE5vZGVJbnNlcnRlZCk7
CiAgICAgICAgIHJlbW92ZU5vZGUoZmlyc3ROb2RlSW5zZXJ0ZWQpOwogICAgIH0KQEAgLTExODks
NyArMTE4OSw3IEBAIHZvaWQgUmVwbGFjZVNlbGVjdGlvbkNvbW1hbmQ6OmFkZFNwYWNlc0YKICAg
ICBpZiAobmVlZHNUcmFpbGluZ1NwYWNlICYmIGVuZE5vZGUpIHsKICAgICAgICAgYm9vbCBjb2xs
YXBzZVdoaXRlU3BhY2UgPSAhZW5kTm9kZS0+cmVuZGVyZXIoKSB8fCBlbmROb2RlLT5yZW5kZXJl
cigpLT5zdHlsZSgpLT5jb2xsYXBzZVdoaXRlU3BhY2UoKTsKICAgICAgICAgaWYgKGVuZE5vZGUt
PmlzVGV4dE5vZGUoKSkgewotICAgICAgICAgICAgVGV4dCogdGV4dCA9IHN0YXRpY19jYXN0PFRl
eHQqPihlbmROb2RlKTsKKyAgICAgICAgICAgIFRleHQqIHRleHQgPSB0b1RleHQoZW5kTm9kZSk7
CiAgICAgICAgICAgICAvLyBGSVhNRTogd2Ugc2hvdWxkbid0IGFsd2F5cyBiZSBpbnNlcnRpbmcg
dGhlIHNwYWNlIGF0IHRoZSBlbmQKICAgICAgICAgICAgIGluc2VydFRleHRJbnRvTm9kZSh0ZXh0
LCB0ZXh0LT5sZW5ndGgoKSwgY29sbGFwc2VXaGl0ZVNwYWNlID8gbm9uQnJlYWtpbmdTcGFjZVN0
cmluZygpIDogIiAiKTsKICAgICAgICAgICAgIGlmIChtX2VuZE9mSW5zZXJ0ZWRDb250ZW50LmNv
bnRhaW5lck5vZGUoKSA9PSB0ZXh0KQpAQCAtMTIxMyw3ICsxMjEzLDcgQEAgdm9pZCBSZXBsYWNl
U2VsZWN0aW9uQ29tbWFuZDo6YWRkU3BhY2VzRgogICAgIGlmIChuZWVkc0xlYWRpbmdTcGFjZSAm
JiBzdGFydE5vZGUpIHsKICAgICAgICAgYm9vbCBjb2xsYXBzZVdoaXRlU3BhY2UgPSAhc3RhcnRO
b2RlLT5yZW5kZXJlcigpIHx8IHN0YXJ0Tm9kZS0+cmVuZGVyZXIoKS0+c3R5bGUoKS0+Y29sbGFw
c2VXaGl0ZVNwYWNlKCk7CiAgICAgICAgIGlmIChzdGFydE5vZGUtPmlzVGV4dE5vZGUoKSkgewot
ICAgICAgICAgICAgaW5zZXJ0VGV4dEludG9Ob2RlKHN0YXRpY19jYXN0PFRleHQqPihzdGFydE5v
ZGUpLCBzdGFydE9mZnNldCwgY29sbGFwc2VXaGl0ZVNwYWNlID8gbm9uQnJlYWtpbmdTcGFjZVN0
cmluZygpIDogIiAiKTsKKyAgICAgICAgICAgIGluc2VydFRleHRJbnRvTm9kZSh0b1RleHQoc3Rh
cnROb2RlKSwgc3RhcnRPZmZzZXQsIGNvbGxhcHNlV2hpdGVTcGFjZSA/IG5vbkJyZWFraW5nU3Bh
Y2VTdHJpbmcoKSA6ICIgIik7CiAgICAgICAgICAgICBpZiAobV9lbmRPZkluc2VydGVkQ29udGVu
dC5jb250YWluZXJOb2RlKCkgPT0gc3RhcnROb2RlICYmIG1fZW5kT2ZJbnNlcnRlZENvbnRlbnQu
b2Zmc2V0SW5Db250YWluZXJOb2RlKCkpCiAgICAgICAgICAgICAgICAgbV9lbmRPZkluc2VydGVk
Q29udGVudC5tb3ZlVG9PZmZzZXQobV9lbmRPZkluc2VydGVkQ29udGVudC5vZmZzZXRJbkNvbnRh
aW5lck5vZGUoKSArIDEpOwogICAgICAgICB9IGVsc2UgewpAQCAtMTI3OSw3ICsxMjc5LDcgQEAg
Tm9kZSogUmVwbGFjZVNlbGVjdGlvbkNvbW1hbmQ6Omluc2VydEFzTAogICAgIGlmIChpc01pZGRs
ZSkgewogICAgICAgICBpbnQgdGV4dE5vZGVPZmZzZXQgPSBpbnNlcnRQb3Mub2Zmc2V0SW5Db250
YWluZXJOb2RlKCk7CiAgICAgICAgIGlmIChpbnNlcnRQb3MuZGVwcmVjYXRlZE5vZGUoKS0+aXNU
ZXh0Tm9kZSgpICYmIHRleHROb2RlT2Zmc2V0ID4gMCkKLSAgICAgICAgICAgIHNwbGl0VGV4dE5v
ZGUoc3RhdGljX2Nhc3Q8VGV4dCo+KGluc2VydFBvcy5kZXByZWNhdGVkTm9kZSgpKSwgdGV4dE5v
ZGVPZmZzZXQpOworICAgICAgICAgICAgc3BsaXRUZXh0Tm9kZSh0b1RleHQoaW5zZXJ0UG9zLmRl
cHJlY2F0ZWROb2RlKCkpLCB0ZXh0Tm9kZU9mZnNldCk7CiAgICAgICAgIHNwbGl0VHJlZVRvTm9k
ZShpbnNlcnRQb3MuZGVwcmVjYXRlZE5vZGUoKSwgbGFzdE5vZGUsIHRydWUpOwogICAgIH0KIApA
QCAtMTMzMyw3ICsxMzMzLDcgQEAgYm9vbCBSZXBsYWNlU2VsZWN0aW9uQ29tbWFuZDo6cGVyZm9y
bVRyaQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICBOb2RlKiBub2RlQWZ0ZXJJbnNlcnRp
b25Qb3MgPSBlbmRpbmdTZWxlY3Rpb24oKS5lbmQoKS5kb3duc3RyZWFtKCkuYW5jaG9yTm9kZSgp
OwotICAgIFRleHQqIHRleHROb2RlID0gc3RhdGljX2Nhc3Q8VGV4dCo+KGZyYWdtZW50LmZpcnN0
Q2hpbGQoKSk7CisgICAgVGV4dCogdGV4dE5vZGUgPSB0b1RleHQoZnJhZ21lbnQuZmlyc3RDaGls
ZCgpKTsKICAgICAvLyBPdXIgZnJhZ21lbnQgY3JlYXRpb24gY29kZSBoYW5kbGVzIHRhYnMsIHNw
YWNlcywgYW5kIG5ld2xpbmVzLCBzbyB3ZSBkb24ndCBoYXZlIHRvIHdvcnJ5IGFib3V0IHRob3Nl
IGhlcmUuCiAKICAgICBQb3NpdGlvbiBzdGFydCA9IGVuZGluZ1NlbGVjdGlvbigpLnN0YXJ0KCk7
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL2h0bWxlZGl0aW5nLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL2h0bWxlZGl0aW5nLmNwcAkocmV2aXNpb24gMTA3
NDM0KQorKysgU291cmNlL1dlYkNvcmUvZWRpdGluZy9odG1sZWRpdGluZy5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTEwMzMsNyArMTAzMyw3IEBAIGJvb2wgbGluZUJyZWFrRXhpc3RzQXRQb3NpdGlv
bihjb25zdCBQb3MKICAgICBpZiAoIXBvc2l0aW9uLmFuY2hvck5vZGUoKS0+aXNUZXh0Tm9kZSgp
IHx8ICFwb3NpdGlvbi5hbmNob3JOb2RlKCktPnJlbmRlcmVyKCktPnN0eWxlKCktPnByZXNlcnZl
TmV3bGluZSgpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgCi0gICAgVGV4dCogdGV4dE5v
ZGUgPSBzdGF0aWNfY2FzdDxUZXh0Kj4ocG9zaXRpb24uYW5jaG9yTm9kZSgpKTsKKyAgICBUZXh0
KiB0ZXh0Tm9kZSA9IHRvVGV4dChwb3NpdGlvbi5hbmNob3JOb2RlKCkpOwogICAgIHVuc2lnbmVk
IG9mZnNldCA9IHBvc2l0aW9uLm9mZnNldEluQ29udGFpbmVyTm9kZSgpOwogICAgIHJldHVybiBv
ZmZzZXQgPCB0ZXh0Tm9kZS0+bGVuZ3RoKCkgJiYgdGV4dE5vZGUtPmRhdGEoKVtvZmZzZXRdID09
ICdcbic7CiB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL3Zpc2libGVfdW5pdHMuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvdmlzaWJsZV91bml0cy5jcHAJ
KHJldmlzaW9uIDEwNzQzNCkKKysrIFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvdmlzaWJsZV91bml0
cy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM2MSw3ICszNjEsNyBAQCBzdGF0aWMgVmlzaWJsZVBv
c2l0aW9uIHN0YXJ0UG9zaXRpb25Gb3JMCiAgICAgICAgIH0KICAgICB9CiAKLSAgICByZXR1cm4g
c3RhcnROb2RlLT5pc1RleHROb2RlKCkgPyBQb3NpdGlvbihzdGF0aWNfY2FzdDxUZXh0Kj4oc3Rh
cnROb2RlKSwgdG9JbmxpbmVUZXh0Qm94KHN0YXJ0Qm94KS0+c3RhcnQoKSkKKyAgICByZXR1cm4g
c3RhcnROb2RlLT5pc1RleHROb2RlKCkgPyBQb3NpdGlvbih0b1RleHQoc3RhcnROb2RlKSwgdG9J
bmxpbmVUZXh0Qm94KHN0YXJ0Qm94KS0+c3RhcnQoKSkKICAgICAgICAgOiBwb3NpdGlvbkJlZm9y
ZU5vZGUoc3RhcnROb2RlKTsKIH0KIApAQCAtNDQxLDcgKzQ0MSw3IEBAIHN0YXRpYyBWaXNpYmxl
UG9zaXRpb24gZW5kUG9zaXRpb25Gb3JMaW4KICAgICAgICAgaW50IGVuZE9mZnNldCA9IGVuZFRl
eHRCb3gtPnN0YXJ0KCk7CiAgICAgICAgIGlmICghZW5kVGV4dEJveC0+aXNMaW5lQnJlYWsoKSkK
ICAgICAgICAgICAgIGVuZE9mZnNldCArPSBlbmRUZXh0Qm94LT5sZW4oKTsKLSAgICAgICAgcG9z
ID0gUG9zaXRpb24oc3RhdGljX2Nhc3Q8VGV4dCo+KGVuZE5vZGUpLCBlbmRPZmZzZXQpOworICAg
ICAgICBwb3MgPSBQb3NpdGlvbih0b1RleHQoZW5kTm9kZSksIGVuZE9mZnNldCk7CiAgICAgfSBl
bHNlCiAgICAgICAgIHBvcyA9IHBvc2l0aW9uQWZ0ZXJOb2RlKGVuZE5vZGUpOwogICAgIApAQCAt
ODM0LDcgKzgzNCw3IEBAIFZpc2libGVQb3NpdGlvbiBzdGFydE9mUGFyYWdyYXBoKGNvbnN0IFYK
ICAgICAgICAgICAgICAgICAgICAgaSA9IG1heCgwLCBvKTsKICAgICAgICAgICAgICAgICB3aGls
ZSAoLS1pID49IDApIHsKICAgICAgICAgICAgICAgICAgICAgaWYgKGNoYXJzW2ldID09ICdcbicp
Ci0gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gVmlzaWJsZVBvc2l0aW9uKFBvc2l0aW9u
KHN0YXRpY19jYXN0PFRleHQqPihuKSwgaSArIDEpLCBET1dOU1RSRUFNKTsKKyAgICAgICAgICAg
ICAgICAgICAgICAgIHJldHVybiBWaXNpYmxlUG9zaXRpb24oUG9zaXRpb24odG9UZXh0KG4pLCBp
ICsgMSksIERPV05TVFJFQU0pOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KICAg
ICAgICAgICAgIG5vZGUgPSBuOwpAQCAtOTEwLDcgKzkxMCw3IEBAIFZpc2libGVQb3NpdGlvbiBl
bmRPZlBhcmFncmFwaChjb25zdCBWaXMKICAgICAgICAgICAgICAgICBpbnQgbyA9IG4gPT0gc3Rh
cnROb2RlID8gb2Zmc2V0IDogMDsKICAgICAgICAgICAgICAgICBmb3IgKGludCBpID0gbzsgaSA8
IGxlbmd0aDsgKytpKSB7CiAgICAgICAgICAgICAgICAgICAgIGlmIChjaGFyc1tpXSA9PSAnXG4n
KQotICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFZpc2libGVQb3NpdGlvbihQb3NpdGlv
bihzdGF0aWNfY2FzdDxUZXh0Kj4obiksIGkpLCBET1dOU1RSRUFNKTsKKyAgICAgICAgICAgICAg
ICAgICAgICAgIHJldHVybiBWaXNpYmxlUG9zaXRpb24oUG9zaXRpb24odG9UZXh0KG4pLCBpKSwg
RE9XTlNUUkVBTSk7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQogICAgICAgICAg
ICAgbm9kZSA9IG47CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxFbGVtZW50LmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxFbGVtZW50LmNwcAkocmV2aXNp
b24gMTA3NDM0KQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MRWxlbWVudC5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTM2NSw3ICszNjUsNyBAQCBzdGF0aWMgdm9pZCByZXBsYWNlQ2hpbGRyZW5X
aXRoRnJhZ21lbnQoCiAgICAgfQogCiAgICAgaWYgKGhhc09uZVRleHRDaGlsZChlbGVtZW50KSAm
JiBoYXNPbmVUZXh0Q2hpbGQoZnJhZ21lbnQuZ2V0KCkpKSB7Ci0gICAgICAgIHN0YXRpY19jYXN0
PFRleHQqPihlbGVtZW50LT5maXJzdENoaWxkKCkpLT5zZXREYXRhKHN0YXRpY19jYXN0PFRleHQq
PihmcmFnbWVudC0+Zmlyc3RDaGlsZCgpKS0+ZGF0YSgpLCBlYyk7CisgICAgICAgIHRvVGV4dChl
bGVtZW50LT5maXJzdENoaWxkKCkpLT5zZXREYXRhKHRvVGV4dChmcmFnbWVudC0+Zmlyc3RDaGls
ZCgpKS0+ZGF0YSgpLCBlYyk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKQEAgLTM4NSw3ICsz
ODUsNyBAQCBzdGF0aWMgdm9pZCByZXBsYWNlQ2hpbGRyZW5XaXRoVGV4dChIVE1MCiAjZW5kaWYK
IAogICAgIGlmIChoYXNPbmVUZXh0Q2hpbGQoZWxlbWVudCkpIHsKLSAgICAgICAgc3RhdGljX2Nh
c3Q8VGV4dCo+KGVsZW1lbnQtPmZpcnN0Q2hpbGQoKSktPnNldERhdGEodGV4dCwgZWMpOworICAg
ICAgICB0b1RleHQoZWxlbWVudC0+Zmlyc3RDaGlsZCgpKS0+c2V0RGF0YSh0ZXh0LCBlYyk7CiAg
ICAgICAgIHJldHVybjsKICAgICB9CiAKQEAgLTQzNCw4ICs0MzQsOCBAQCBzdGF0aWMgdm9pZCBt
ZXJnZVdpdGhOZXh0VGV4dE5vZGUoUGFzc1JlCiAgICAgaWYgKCFuZXh0IHx8ICFuZXh0LT5pc1Rl
eHROb2RlKCkpCiAgICAgICAgIHJldHVybjsKICAgICAKLSAgICBSZWZQdHI8VGV4dD4gdGV4dE5v
ZGUgPSBzdGF0aWNfY2FzdDxUZXh0Kj4obm9kZS5nZXQoKSk7Ci0gICAgUmVmUHRyPFRleHQ+IHRl
eHROZXh0ID0gc3RhdGljX2Nhc3Q8VGV4dCo+KG5leHQpOworICAgIFJlZlB0cjxUZXh0PiB0ZXh0
Tm9kZSA9IHRvVGV4dChub2RlLmdldCgpKTsKKyAgICBSZWZQdHI8VGV4dD4gdGV4dE5leHQgPSB0
b1RleHQobmV4dCk7CiAgICAgdGV4dE5vZGUtPmFwcGVuZERhdGEodGV4dE5leHQtPmRhdGEoKSwg
ZWMpOwogICAgIGlmIChlYykKICAgICAgICAgcmV0dXJuOwpJbmRleDogU291cmNlL1dlYkNvcmUv
aHRtbC9IVE1MT2JqZWN0RWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
aHRtbC9IVE1MT2JqZWN0RWxlbWVudC5jcHAJKHJldmlzaW9uIDEwNzQzNCkKKysrIFNvdXJjZS9X
ZWJDb3JlL2h0bWwvSFRNTE9iamVjdEVsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMDcs
NyArMjA3LDcgQEAgYm9vbCBIVE1MT2JqZWN0RWxlbWVudDo6aGFzRmFsbGJhY2tDb250ZQogICAg
IGZvciAoTm9kZSogY2hpbGQgPSBmaXJzdENoaWxkKCk7IGNoaWxkOyBjaGlsZCA9IGNoaWxkLT5u
ZXh0U2libGluZygpKSB7CiAgICAgICAgIC8vIElnbm9yZSB3aGl0ZXNwYWNlLW9ubHkgdGV4dCwg
YW5kIDxwYXJhbT4gdGFncywgYW55IG90aGVyIGNvbnRlbnQgaXMgZmFsbGJhY2sgY29udGVudC4K
ICAgICAgICAgaWYgKGNoaWxkLT5pc1RleHROb2RlKCkpIHsKLSAgICAgICAgICAgIGlmICghc3Rh
dGljX2Nhc3Q8VGV4dCo+KGNoaWxkKS0+Y29udGFpbnNPbmx5V2hpdGVzcGFjZSgpKQorICAgICAg
ICAgICAgaWYgKCF0b1RleHQoY2hpbGQpLT5jb250YWluc09ubHlXaGl0ZXNwYWNlKCkpCiAgICAg
ICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgIH0gZWxzZSBpZiAoIWNoaWxkLT5oYXNU
YWdOYW1lKHBhcmFtVGFnKSkKICAgICAgICAgICAgIHJldHVybiB0cnVlOwpAQCAtNDE0LDcgKzQx
NCw3IEBAIHZvaWQgSFRNTE9iamVjdEVsZW1lbnQ6OnVwZGF0ZURvY05hbWVkSXQKICAgICAgICAg
ICAgIGlmIChpc1JlY29nbml6ZWRUYWdOYW1lKGVsZW1lbnQtPnRhZ1FOYW1lKCkpICYmICFlbGVt
ZW50LT5oYXNUYWdOYW1lKHBhcmFtVGFnKSkKICAgICAgICAgICAgICAgICBpc05hbWVkSXRlbSA9
IGZhbHNlOwogICAgICAgICB9IGVsc2UgaWYgKGNoaWxkLT5pc1RleHROb2RlKCkpIHsKLSAgICAg
ICAgICAgIGlmICghc3RhdGljX2Nhc3Q8VGV4dCo+KGNoaWxkKS0+Y29udGFpbnNPbmx5V2hpdGVz
cGFjZSgpKQorICAgICAgICAgICAgaWYgKCF0b1RleHQoY2hpbGQpLT5jb250YWluc09ubHlXaGl0
ZXNwYWNlKCkpCiAgICAgICAgICAgICAgICAgaXNOYW1lZEl0ZW0gPSBmYWxzZTsKICAgICAgICAg
fSBlbHNlCiAgICAgICAgICAgICBpc05hbWVkSXRlbSA9IGZhbHNlOwpJbmRleDogU291cmNlL1dl
YkNvcmUvaHRtbC9IVE1MT3B0aW9uRWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvaHRtbC9IVE1MT3B0aW9uRWxlbWVudC5jcHAJKHJldmlzaW9uIDEwNzQzNCkKKysrIFNv
dXJjZS9XZWJDb3JlL2h0bWwvSFRNTE9wdGlvbkVsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0xNDcsNyArMTQ3LDcgQEAgdm9pZCBIVE1MT3B0aW9uRWxlbWVudDo6c2V0VGV4dChjb25zdCBT
dAogICAgIC8vIEhhbmRsZSB0aGUgY29tbW9uIHNwZWNpYWwgY2FzZSB3aGVyZSB0aGVyZSdzIGV4
YWN0bHkgMSBjaGlsZCBub2RlLCBhbmQgaXQncyBhIHRleHQgbm9kZS4KICAgICBOb2RlKiBjaGls
ZCA9IGZpcnN0Q2hpbGQoKTsKICAgICBpZiAoY2hpbGQgJiYgY2hpbGQtPmlzVGV4dE5vZGUoKSAm
JiAhY2hpbGQtPm5leHRTaWJsaW5nKCkpCi0gICAgICAgIHN0YXRpY19jYXN0PFRleHQgKj4oY2hp
bGQpLT5zZXREYXRhKHRleHQsIGVjKTsKKyAgICAgICAgdG9UZXh0KGNoaWxkKS0+c2V0RGF0YSh0
ZXh0LCBlYyk7CiAgICAgZWxzZSB7CiAgICAgICAgIHJlbW92ZUNoaWxkcmVuKCk7CiAgICAgICAg
IGFwcGVuZENoaWxkKFRleHQ6OmNyZWF0ZShkb2N1bWVudCgpLCB0ZXh0KSwgZWMpOwpJbmRleDog
U291cmNlL1dlYkNvcmUvaHRtbC9IVE1MU2NyaXB0RWxlbWVudC5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvaHRtbC9IVE1MU2NyaXB0RWxlbWVudC5jcHAJKHJldmlzaW9uIDEwNzQz
NCkKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTFNjcmlwdEVsZW1lbnQuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC05MSw3ICs5MSw3IEBAIHZvaWQgSFRNTFNjcmlwdEVsZW1lbnQ6OnNldFRleHQo
Y29uc3QgU3QKICAgICBpbnQgbnVtQ2hpbGRyZW4gPSBjaGlsZE5vZGVDb3VudCgpOwogCiAgICAg
aWYgKG51bUNoaWxkcmVuID09IDEgJiYgZmlyc3RDaGlsZCgpLT5pc1RleHROb2RlKCkpIHsKLSAg
ICAgICAgc3RhdGljX2Nhc3Q8VGV4dCo+KGZpcnN0Q2hpbGQoKSktPnNldERhdGEodmFsdWUsIGVj
KTsKKyAgICAgICAgdG9UZXh0KGZpcnN0Q2hpbGQoKSktPnNldERhdGEodmFsdWUsIGVjKTsKICAg
ICAgICAgcmV0dXJuOwogICAgIH0KIApJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MVGV4
dEFyZWFFbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxU
ZXh0QXJlYUVsZW1lbnQuY3BwCShyZXZpc2lvbiAxMDc0MzQpCisrKyBTb3VyY2UvV2ViQ29yZS9o
dG1sL0hUTUxUZXh0QXJlYUVsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNjAsNyArMzYw
LDcgQEAgU3RyaW5nIEhUTUxUZXh0QXJlYUVsZW1lbnQ6OmRlZmF1bHRWYWx1ZQogICAgIC8vIFNp
bmNlIHRoZXJlIG1heSBiZSBjb21tZW50cywgaWdub3JlIG5vZGVzIG90aGVyIHRoYW4gdGV4dCBu
b2Rlcy4KICAgICBmb3IgKE5vZGUqIG4gPSBmaXJzdENoaWxkKCk7IG47IG4gPSBuLT5uZXh0U2li
bGluZygpKSB7CiAgICAgICAgIGlmIChuLT5pc1RleHROb2RlKCkpCi0gICAgICAgICAgICB2YWx1
ZSArPSBzdGF0aWNfY2FzdDxUZXh0Kj4obiktPmRhdGEoKTsKKyAgICAgICAgICAgIHZhbHVlICs9
IHRvVGV4dChuKS0+ZGF0YSgpOwogICAgIH0KIAogICAgIHJldHVybiB2YWx1ZTsKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL2h0bWwvSFRNTFRleHRGb3JtQ29udHJvbEVsZW1lbnQuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTFRleHRGb3JtQ29udHJvbEVsZW1lbnQuY3Bw
CShyZXZpc2lvbiAxMDc0MzQpCisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxUZXh0Rm9ybUNv
bnRyb2xFbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDkzLDcgKzQ5Myw3IEBAIFN0cmlu
ZyBIVE1MVGV4dEZvcm1Db250cm9sRWxlbWVudDo6aW5uZXIKICAgICAgICAgaWYgKG5vZGUtPmhh
c1RhZ05hbWUoYnJUYWcpKQogICAgICAgICAgICAgcmVzdWx0LmFwcGVuZChuZXdsaW5lQ2hhcmFj
dGVyKTsKICAgICAgICAgZWxzZSBpZiAobm9kZS0+aXNUZXh0Tm9kZSgpKQotICAgICAgICAgICAg
cmVzdWx0LmFwcGVuZChzdGF0aWNfY2FzdDxUZXh0Kj4obm9kZSktPmRhdGEoKSk7CisgICAgICAg
ICAgICByZXN1bHQuYXBwZW5kKHRvVGV4dChub2RlKS0+ZGF0YSgpKTsKICAgICB9CiAgICAgcmV0
dXJuIGZpbmlzaFRleHQocmVzdWx0KTsKIH0KQEAgLTU0MCw3ICs1NDAsNyBAQCBTdHJpbmcgSFRN
TFRleHRGb3JtQ29udHJvbEVsZW1lbnQ6OnZhbHVlCiAgICAgICAgIGlmIChub2RlLT5oYXNUYWdO
YW1lKGJyVGFnKSkKICAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQobmV3bGluZUNoYXJhY3Rlcik7
CiAgICAgICAgIGVsc2UgaWYgKG5vZGUtPmlzVGV4dE5vZGUoKSkgewotICAgICAgICAgICAgU3Ry
aW5nIGRhdGEgPSBzdGF0aWNfY2FzdDxUZXh0Kj4obm9kZSktPmRhdGEoKTsKKyAgICAgICAgICAg
IFN0cmluZyBkYXRhID0gdG9UZXh0KG5vZGUpLT5kYXRhKCk7CiAgICAgICAgICAgICB1bnNpZ25l
ZCBsZW5ndGggPSBkYXRhLmxlbmd0aCgpOwogICAgICAgICAgICAgdW5zaWduZWQgcG9zaXRpb24g
PSAwOwogICAgICAgICAgICAgd2hpbGUgKGJyZWFrTm9kZSA9PSBub2RlICYmIGJyZWFrT2Zmc2V0
IDw9IGxlbmd0aCkgewpJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MVGl0bGVFbGVtZW50
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxUaXRsZUVsZW1lbnQu
Y3BwCShyZXZpc2lvbiAxMDc0MzQpCisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxUaXRsZUVs
ZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03MCw3ICs3MCw3IEBAIFN0cmluZyBIVE1MVGl0
bGVFbGVtZW50Ojp0ZXh0KCkgY29uc3QKICAgICAKICAgICBmb3IgKE5vZGUgKm4gPSBmaXJzdENo
aWxkKCk7IG47IG4gPSBuLT5uZXh0U2libGluZygpKSB7CiAgICAgICAgIGlmIChuLT5pc1RleHRO
b2RlKCkpCi0gICAgICAgICAgICB2YWwgKz0gc3RhdGljX2Nhc3Q8VGV4dCo+KG4pLT5kYXRhKCk7
CisgICAgICAgICAgICB2YWwgKz0gdG9UZXh0KG4pLT5kYXRhKCk7CiAgICAgfQogCiAgICAgcmV0
dXJuIHZhbDsKQEAgLTkyLDcgKzkyLDcgQEAgdm9pZCBIVE1MVGl0bGVFbGVtZW50OjpzZXRUZXh0
KGNvbnN0IFN0cgogICAgIGludCBudW1DaGlsZHJlbiA9IGNoaWxkTm9kZUNvdW50KCk7CiAgICAg
CiAgICAgaWYgKG51bUNoaWxkcmVuID09IDEgJiYgZmlyc3RDaGlsZCgpLT5pc1RleHROb2RlKCkp
Ci0gICAgICAgIHN0YXRpY19jYXN0PFRleHQqPihmaXJzdENoaWxkKCkpLT5zZXREYXRhKHZhbHVl
LCBlYyk7CisgICAgICAgIHRvVGV4dChmaXJzdENoaWxkKCkpLT5zZXREYXRhKHZhbHVlLCBlYyk7
CiAgICAgZWxzZSB7ICAKICAgICAgICAgLy8gV2UgbWFrZSBhIGNvcHkgaGVyZSBiZWNhdXNlIGVu
dGl0eSBvZiAidmFsdWUiIGFyZ3VtZW50IGNhbiBiZSBEb2N1bWVudDo6bV90aXRsZSwKICAgICAg
ICAgLy8gd2hpY2ggZ29lcyBlbXB0eSBkdXJpbmcgcmVtb3ZlQ2hpbGRyZW4oKSBpbnZvY2F0aW9u
IGJlbG93LApJbmRleDogU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckRPTUFnZW50
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yRE9N
QWdlbnQuY3BwCShyZXZpc2lvbiAxMDc0MzQpCisrKyBTb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3Iv
SW5zcGVjdG9yRE9NQWdlbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03MDYsNyArNzA2LDcgQEAg
dm9pZCBJbnNwZWN0b3JET01BZ2VudDo6c2V0Tm9kZVZhbHVlKEVycgogICAgICAgICByZXR1cm47
CiAgICAgfQogCi0gICAgbV9kb21FZGl0b3ItPnJlcGxhY2VXaG9sZVRleHQoc3RhdGljX2Nhc3Q8
VGV4dCo+KG5vZGUpLCB2YWx1ZSwgZXJyb3JTdHJpbmcpOworICAgIG1fZG9tRWRpdG9yLT5yZXBs
YWNlV2hvbGVUZXh0KHRvVGV4dChub2RlKSwgdmFsdWUsIGVycm9yU3RyaW5nKTsKIH0KIAogdm9p
ZCBJbnNwZWN0b3JET01BZ2VudDo6Z2V0RXZlbnRMaXN0ZW5lcnNGb3JOb2RlKEVycm9yU3RyaW5n
KiwgaW50IG5vZGVJZCwgUmVmUHRyPEluc3BlY3RvckFycmF5PiYgbGlzdGVuZXJzQXJyYXkpCklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGV4dC5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRleHQuY3BwCShyZXZpc2lvbiAxMDc0
MzQpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGV4dC5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTMwMCw3ICszMDAsNyBAQCB2b2lkIFJlbmRlclRleHQ6OmRlbGV0ZVRleHRCb3hl
cygpCiBQYXNzUmVmUHRyPFN0cmluZ0ltcGw+IFJlbmRlclRleHQ6Om9yaWdpbmFsVGV4dCgpIGNv
bnN0CiB7CiAgICAgTm9kZSogZSA9IG5vZGUoKTsKLSAgICByZXR1cm4gKGUgJiYgZS0+aXNUZXh0
Tm9kZSgpKSA/IHN0YXRpY19jYXN0PFRleHQqPihlKS0+ZGF0YUltcGwoKSA6IDA7CisgICAgcmV0
dXJuIChlICYmIGUtPmlzVGV4dE5vZGUoKSkgPyB0b1RleHQoZSktPmRhdGFJbXBsKCkgOiAwOwog
fQogCiB2b2lkIFJlbmRlclRleHQ6OmFic29sdXRlUmVjdHMoVmVjdG9yPExheW91dFJlY3Q+JiBy
ZWN0cywgY29uc3QgTGF5b3V0UG9pbnQmIGFjY3VtdWxhdGVkT2Zmc2V0KSBjb25zdApJbmRleDog
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRleHRGcmFnbWVudC5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRleHRGcmFnbWVudC5jcHAJKHJl
dmlzaW9uIDEwNzQzNCkKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUZXh0RnJh
Z21lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01Miw3ICs1Miw3IEBAIFJlbmRlclRleHRGcmFn
bWVudDo6flJlbmRlclRleHRGcmFnbWVudCgKIFBhc3NSZWZQdHI8U3RyaW5nSW1wbD4gUmVuZGVy
VGV4dEZyYWdtZW50OjpvcmlnaW5hbFRleHQoKSBjb25zdAogewogICAgIE5vZGUqIGUgPSBub2Rl
KCk7Ci0gICAgUmVmUHRyPFN0cmluZ0ltcGw+IHJlc3VsdCA9ICgoZSAmJiBlLT5pc1RleHROb2Rl
KCkpID8gc3RhdGljX2Nhc3Q8VGV4dCo+KGUpLT5kYXRhSW1wbCgpIDogY29udGVudFN0cmluZygp
KTsKKyAgICBSZWZQdHI8U3RyaW5nSW1wbD4gcmVzdWx0ID0gKChlICYmIGUtPmlzVGV4dE5vZGUo
KSkgPyB0b1RleHQoZSktPmRhdGFJbXBsKCkgOiBjb250ZW50U3RyaW5nKCkpOwogICAgIGlmICgh
cmVzdWx0KQogICAgICAgICByZXR1cm4gMDsKICAgICByZXR1cm4gcmVzdWx0LT5zdWJzdHJpbmco
c3RhcnQoKSwgZW5kKCkpOwpAQCAtOTUsNyArOTUsNyBAQCBVQ2hhciBSZW5kZXJUZXh0RnJhZ21l
bnQ6OnByZXZpb3VzQ2hhcmFjCiB7CiAgICAgaWYgKHN0YXJ0KCkpIHsKICAgICAgICAgTm9kZSog
ZSA9IG5vZGUoKTsKLSAgICAgICAgU3RyaW5nSW1wbCogIG9yaWdpbmFsID0gKChlICYmIGUtPmlz
VGV4dE5vZGUoKSkgPyBzdGF0aWNfY2FzdDxUZXh0Kj4oZSktPmRhdGFJbXBsKCkgOiBjb250ZW50
U3RyaW5nKCkpOworICAgICAgICBTdHJpbmdJbXBsKiBvcmlnaW5hbCA9ICgoZSAmJiBlLT5pc1Rl
eHROb2RlKCkpID8gdG9UZXh0KGUpLT5kYXRhSW1wbCgpIDogY29udGVudFN0cmluZygpKTsKICAg
ICAgICAgaWYgKG9yaWdpbmFsICYmIHN0YXJ0KCkgPD0gb3JpZ2luYWwtPmxlbmd0aCgpKQogICAg
ICAgICAgICAgcmV0dXJuICgqb3JpZ2luYWwpW3N0YXJ0KCkgLSAxXTsKICAgICB9Cg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>126670</attachid>
            <date>2012-02-11 21:29:14 -0800</date>
            <delta_ts>2012-02-12 03:28:13 -0800</delta_ts>
            <desc>Patch-with-StyleChecker</desc>
            <filename>patch2</filename>
            <type>text/plain</type>
            <size>50732</size>
            <attacher name="Joe Thomas">joethomas</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDEwNzUwMSkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDExMSBAQAorMjAxMi0wMi0xMSAgSm9lIFRo
b21hcyAgPGpvZXRob21hc0Btb3Rvcm9sYS5jb20+CisKKyAgICAgICAgQWRkIHRvVGV4dCBhbmQg
aXNUZXh0Tm9kZSBoZWxwZXJzIGluIFRleHQgY2xhc3MuCisgICAgICAgIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD03ODE0MAorCisgICAgICAgIEFkZGVkIGEgbmV3IGhl
bHBlciBmdW5jdGlvbiB0b1RleHQoKSBpbiBkb20vVGV4dC5oIHdoaWNoIGRvZXMgdGhlIHR5cGUg
Y2FzdGluZyBvcGVyYXRpb24gdG8gVGV4dCBvYmplY3QuCisgICAgICAgIE1vZGlmaWVkIHRoZSBj
b2RlIHRvIG1ha2UgdXNlIG9mIHRoaXMgaGVscGVyIGZ1bmN0aW9uLgorCisgICAgICAgIFJldmll
d2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIE5vIG5ldyB0ZXN0cy4KKworICAgICAg
ICAqIGFjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdC5jcHA6CisgICAgICAg
IChXZWJDb3JlOjphY2Nlc3NpYmxlTmFtZUZvck5vZGUpOgorICAgICAgICAqIGJpbmRpbmdzL3Y4
L2N1c3RvbS9WOE5vZGVDdXN0b20uY3BwOgorICAgICAgICAoV2ViQ29yZTo6dG9WOFNsb3cpOgor
ICAgICAgICAqIGNzcy9TZWxlY3RvckNoZWNrZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U2Vs
ZWN0b3JDaGVja2VyOjpjaGVja09uZVNlbGVjdG9yKToKKyAgICAgICAgKiBkb20vQXR0ci5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpBdHRyOjpjaGlsZHJlbkNoYW5nZWQpOgorICAgICAgICAqIGRv
bS9FbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkVsZW1lbnQ6OnJlY2FsY1N0eWxlKToK
KyAgICAgICAgKiBkb20vTm9kZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpOb2RlOjpub3JtYWxp
emUpOgorICAgICAgICAqIGRvbS9Qb3NpdGlvbi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpQb3Np
dGlvbjo6Y29udGFpbmVyVGV4dCk6CisgICAgICAgIChXZWJDb3JlOjpQb3NpdGlvbjo6bGVhZGlu
Z1doaXRlc3BhY2VQb3NpdGlvbik6CisgICAgICAgICogZG9tL1JhbmdlLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OlJhbmdlOjppbnNlcnROb2RlKToKKyAgICAgICAgKFdlYkNvcmU6OlJhbmdlOjpn
ZXRCb3JkZXJBbmRUZXh0UXVhZHMpOgorICAgICAgICAqIGRvbS9TY3JpcHRFbGVtZW50LmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OlNjcmlwdEVsZW1lbnQ6OnNjcmlwdENvbnRlbnQpOgorICAgICAg
ICAqIGRvbS9TaGFkb3dSb290LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNoYWRvd1Jvb3Q6OnJl
Y2FsY1NoYWRvd1RyZWVTdHlsZSk6CisgICAgICAgICogZG9tL1RleHQuaDogQWRkZWQgbmV3IGhl
bHBlciBmdW5jdGlvbiB0b1RleHQuCisgICAgICAgIChXZWJDb3JlOjp0b1RleHQpOiBuZXcgaGVs
cGVyIGZ1bmN0aW9uIHdoaWNoIGRvZXMgdGhlIHR5cGUgY2FzdGluZyBvcGVyYXRpb24gdG8gVGV4
dCBvYmplY3QuCisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKiBlZGl0aW5nL0FwcGx5Qmxv
Y2tFbGVtZW50Q29tbWFuZC5jcHA6CisgICAgICAgIChXZWJDb3JlOjppc05ld0xpbmVBdFBvc2l0
aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkFwcGx5QmxvY2tFbGVtZW50Q29tbWFuZDo6ZW5kT2ZO
ZXh0UGFyYWdyYWhTcGxpdHRpbmdUZXh0Tm9kZXNJZk5lZWRlZCk6CisgICAgICAgICogZWRpdGlu
Zy9BcHBseVN0eWxlQ29tbWFuZC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpBcHBseVN0eWxlQ29t
bWFuZDo6c3BsaXRUZXh0QXRFbmQpOgorICAgICAgICAoV2ViQ29yZTo6QXBwbHlTdHlsZUNvbW1h
bmQ6OnNwbGl0VGV4dEVsZW1lbnRBdEVuZCk6CisgICAgICAgIChXZWJDb3JlOjpBcHBseVN0eWxl
Q29tbWFuZDo6am9pbkNoaWxkVGV4dE5vZGVzKToKKyAgICAgICAgKiBlZGl0aW5nL0JyZWFrQmxv
Y2txdW90ZUNvbW1hbmQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6QnJlYWtCbG9ja3F1b3RlQ29t
bWFuZDo6ZG9BcHBseSk6CisgICAgICAgICogZWRpdGluZy9Db21wb3NpdGVFZGl0Q29tbWFuZC5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpDb21wb3NpdGVFZGl0Q29tbWFuZDo6aW5zZXJ0Tm9kZUF0
KToKKyAgICAgICAgKFdlYkNvcmU6OkNvbXBvc2l0ZUVkaXRDb21tYW5kOjpwb3NpdGlvbk91dHNp
ZGVUYWJTcGFuKToKKyAgICAgICAgKFdlYkNvcmU6OkNvbXBvc2l0ZUVkaXRDb21tYW5kOjpjYW5S
ZWJhbGFuY2UpOgorICAgICAgICAoV2ViQ29yZTo6Q29tcG9zaXRlRWRpdENvbW1hbmQ6OnJlYmFs
YW5jZVdoaXRlc3BhY2VBdCk6CisgICAgICAgIChXZWJDb3JlOjpDb21wb3NpdGVFZGl0Q29tbWFu
ZDo6cHJlcGFyZVdoaXRlc3BhY2VBdFBvc2l0aW9uRm9yU3BsaXQpOgorICAgICAgICAoV2ViQ29y
ZTo6Q29tcG9zaXRlRWRpdENvbW1hbmQ6OmRlbGV0ZUluc2lnbmlmaWNhbnRUZXh0KToKKyAgICAg
ICAgKFdlYkNvcmU6OkNvbXBvc2l0ZUVkaXRDb21tYW5kOjpyZW1vdmVQbGFjZWhvbGRlckF0KToK
KyAgICAgICAgKFdlYkNvcmU6OkNvbXBvc2l0ZUVkaXRDb21tYW5kOjpjbGVhbnVwQWZ0ZXJEZWxl
dGlvbik6CisgICAgICAgIChXZWJDb3JlOjpDb21wb3NpdGVFZGl0Q29tbWFuZDo6YnJlYWtPdXRP
ZkVtcHR5TWFpbEJsb2NrcXVvdGVkUGFyYWdyYXBoKToKKyAgICAgICAgKiBlZGl0aW5nL0RlbGV0
ZVNlbGVjdGlvbkNvbW1hbmQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RGVsZXRlU2VsZWN0aW9u
Q29tbWFuZDo6aGFuZGxlR2VuZXJhbERlbGV0ZSk6CisgICAgICAgIChXZWJDb3JlOjpEZWxldGVT
ZWxlY3Rpb25Db21tYW5kOjpmaXh1cFdoaXRlc3BhY2UpOgorICAgICAgICAqIGVkaXRpbmcvRWRp
dG9yLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkVkaXRvcjo6c2V0Q29tcG9zaXRpb24pOgorICAg
ICAgICAqIGVkaXRpbmcvSW5zZXJ0TGluZUJyZWFrQ29tbWFuZC5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpJbnNlcnRMaW5lQnJlYWtDb21tYW5kOjpkb0FwcGx5KToKKyAgICAgICAgKiBlZGl0aW5n
L0luc2VydFBhcmFncmFwaFNlcGFyYXRvckNvbW1hbmQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
SW5zZXJ0UGFyYWdyYXBoU2VwYXJhdG9yQ29tbWFuZDo6ZG9BcHBseSk6CisgICAgICAgICogZWRp
dGluZy9JbnNlcnRUZXh0Q29tbWFuZC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJbnNlcnRUZXh0
Q29tbWFuZDo6aW5zZXJ0VGFiKToKKyAgICAgICAgKiBlZGl0aW5nL01hcmt1cEFjY3VtdWxhdG9y
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Ok1hcmt1cEFjY3VtdWxhdG9yOjphcHBlbmRTdGFydE1h
cmt1cCk6CisgICAgICAgICogZWRpdGluZy9SZXBsYWNlU2VsZWN0aW9uQ29tbWFuZC5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpSZXBsYWNlU2VsZWN0aW9uQ29tbWFuZDo6cmVtb3ZlVW5yZW5kZXJl
ZFRleHROb2Rlc0F0RW5kcyk6CisgICAgICAgIChXZWJDb3JlOjpSZXBsYWNlU2VsZWN0aW9uQ29t
bWFuZDo6YWRkU3BhY2VzRm9yU21hcnRSZXBsYWNlKToKKyAgICAgICAgKFdlYkNvcmU6OlJlcGxh
Y2VTZWxlY3Rpb25Db21tYW5kOjppbnNlcnRBc0xpc3RJdGVtcyk6CisgICAgICAgIChXZWJDb3Jl
OjpSZXBsYWNlU2VsZWN0aW9uQ29tbWFuZDo6cGVyZm9ybVRyaXZpYWxSZXBsYWNlKToKKyAgICAg
ICAgKiBlZGl0aW5nL2h0bWxlZGl0aW5nLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmxpbmVCcmVh
a0V4aXN0c0F0UG9zaXRpb24pOgorICAgICAgICAqIGVkaXRpbmcvdmlzaWJsZV91bml0cy5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpzdGFydFBvc2l0aW9uRm9yTGluZSk6CisgICAgICAgIChXZWJD
b3JlOjplbmRQb3NpdGlvbkZvckxpbmUpOgorICAgICAgICAoV2ViQ29yZTo6c3RhcnRPZlBhcmFn
cmFwaCk6CisgICAgICAgIChXZWJDb3JlOjplbmRPZlBhcmFncmFwaCk6CisgICAgICAgICogaHRt
bC9IVE1MRWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpyZXBsYWNlQ2hpbGRyZW5XaXRo
RnJhZ21lbnQpOgorICAgICAgICAoV2ViQ29yZTo6cmVwbGFjZUNoaWxkcmVuV2l0aFRleHQpOgor
ICAgICAgICAoV2ViQ29yZTo6bWVyZ2VXaXRoTmV4dFRleHROb2RlKToKKyAgICAgICAgKiBodG1s
L0hUTUxPYmplY3RFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxPYmplY3RFbGVt
ZW50OjpoYXNGYWxsYmFja0NvbnRlbnQpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTE9iamVjdEVs
ZW1lbnQ6OnVwZGF0ZURvY05hbWVkSXRlbSk6CisgICAgICAgICogaHRtbC9IVE1MT3B0aW9uRWxl
bWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpIVE1MT3B0aW9uRWxlbWVudDo6c2V0VGV4dCk6
CisgICAgICAgICogaHRtbC9IVE1MU2NyaXB0RWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpIVE1MU2NyaXB0RWxlbWVudDo6c2V0VGV4dCk6CisgICAgICAgICogaHRtbC9IVE1MVGV4dEFy
ZWFFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxUZXh0QXJlYUVsZW1lbnQ6OmRl
ZmF1bHRWYWx1ZSk6CisgICAgICAgICogaHRtbC9IVE1MVGV4dEZvcm1Db250cm9sRWxlbWVudC5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpIVE1MVGV4dEZvcm1Db250cm9sRWxlbWVudDo6aW5uZXJU
ZXh0VmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTFRleHRGb3JtQ29udHJvbEVsZW1lbnQ6
OnZhbHVlV2l0aEhhcmRMaW5lQnJlYWtzKToKKyAgICAgICAgKiBodG1sL0hUTUxUaXRsZUVsZW1l
bnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SFRNTFRpdGxlRWxlbWVudDo6dGV4dCk6CisgICAg
ICAgIChXZWJDb3JlOjpIVE1MVGl0bGVFbGVtZW50OjpzZXRUZXh0KToKKyAgICAgICAgKiBpbnNw
ZWN0b3IvSW5zcGVjdG9yRE9NQWdlbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9y
RE9NQWdlbnQ6OnNldE5vZGVWYWx1ZSk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlclRleHQu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGV4dDo6b3JpZ2luYWxUZXh0KToKKyAgICAg
ICAgKiByZW5kZXJpbmcvUmVuZGVyVGV4dEZyYWdtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OlJlbmRlclRleHRGcmFnbWVudDo6b3JpZ2luYWxUZXh0KToKKyAgICAgICAgKFdlYkNvcmU6OlJl
bmRlclRleHRGcmFnbWVudDo6cHJldmlvdXNDaGFyYWN0ZXIpOgorCiAyMDEyLTAyLTExICBGaWxp
cCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CiAKICAgICAgICAgSXQgc2hvdWxkIGJlIHBvc3Np
YmxlIHRvIHNlbmQgYWxsIEpTQyBkZWJ1ZyBsb2dnaW5nIHRvIGEgZmlsZQpJbmRleDogU291cmNl
L1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0LmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlSZW5k
ZXJPYmplY3QuY3BwCShyZXZpc2lvbiAxMDc0MzQpCisrKyBTb3VyY2UvV2ViQ29yZS9hY2Nlc3Np
YmlsaXR5L0FjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0x
MjEyLDcgKzEyMTIsNyBAQCBTdHJpbmcgQWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdDo6c3RyaW5n
CiBzdGF0aWMgU3RyaW5nIGFjY2Vzc2libGVOYW1lRm9yTm9kZShOb2RlKiBub2RlKQogewogICAg
IGlmIChub2RlLT5pc1RleHROb2RlKCkpCi0gICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxUZXh0
Kj4obm9kZSktPmRhdGEoKTsKKyAgICAgICAgcmV0dXJuIHRvVGV4dChub2RlKS0+ZGF0YSgpOwog
CiAgICAgaWYgKG5vZGUtPmhhc1RhZ05hbWUoaW5wdXRUYWcpKQogICAgICAgICByZXR1cm4gc3Rh
dGljX2Nhc3Q8SFRNTElucHV0RWxlbWVudCo+KG5vZGUpLT52YWx1ZSgpOwpJbmRleDogU291cmNl
L1dlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4Tm9kZUN1c3RvbS5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4Tm9kZUN1c3RvbS5jcHAJKHJl
dmlzaW9uIDEwNzQzNCkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOE5v
ZGVDdXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNDcsNyArMTQ3LDcgQEAgdjg6OkhhbmRs
ZTx2ODo6VmFsdWU+IHRvVjhTbG93KE5vZGUqIGltcAogICAgIGNhc2UgTm9kZTo6QVRUUklCVVRF
X05PREU6CiAgICAgICAgIHJldHVybiB0b1Y4KHN0YXRpY19jYXN0PEF0dHIqPihpbXBsKSwgZm9y
Y2VOZXdPYmplY3QpOwogICAgIGNhc2UgTm9kZTo6VEVYVF9OT0RFOgotICAgICAgICByZXR1cm4g
dG9WOChzdGF0aWNfY2FzdDxUZXh0Kj4oaW1wbCksIGZvcmNlTmV3T2JqZWN0KTsKKyAgICAgICAg
cmV0dXJuIHRvVjgodG9UZXh0KGltcGwpLCBmb3JjZU5ld09iamVjdCk7CiAgICAgY2FzZSBOb2Rl
OjpDREFUQV9TRUNUSU9OX05PREU6CiAgICAgICAgIHJldHVybiB0b1Y4KHN0YXRpY19jYXN0PENE
QVRBU2VjdGlvbio+KGltcGwpLCBmb3JjZU5ld09iamVjdCk7CiAgICAgY2FzZSBOb2RlOjpFTlRJ
VFlfUkVGRVJFTkNFX05PREU6CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9jc3MvU2VsZWN0b3JDaGVj
a2VyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9jc3MvU2VsZWN0b3JDaGVja2Vy
LmNwcAkocmV2aXNpb24gMTA3NDM0KQorKysgU291cmNlL1dlYkNvcmUvY3NzL1NlbGVjdG9yQ2hl
Y2tlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTc3MSw3ICs3NzEsNyBAQCBib29sIFNlbGVjdG9y
Q2hlY2tlcjo6Y2hlY2tPbmVTZWxlY3RvcihjCiAgICAgICAgICAgICAgICAgICAgICAgICBicmVh
azsKICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICBpZiAobi0+aXNU
ZXh0Tm9kZSgpKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBUZXh0KiB0ZXh0Tm9kZSA9IHN0
YXRpY19jYXN0PFRleHQqPihuKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIFRleHQqIHRleHRO
b2RlID0gdG9UZXh0KG4pOwogICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCF0ZXh0Tm9kZS0+
ZGF0YSgpLmlzRW1wdHkoKSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdCA9
IGZhbHNlOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwpJbmRleDogU291cmNl
L1dlYkNvcmUvZG9tL0F0dHIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2RvbS9B
dHRyLmNwcAkocmV2aXNpb24gMTA3NDM0KQorKysgU291cmNlL1dlYkNvcmUvZG9tL0F0dHIuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0xODEsNyArMTgxLDcgQEAgdm9pZCBBdHRyOjpjaGlsZHJlbkNo
YW5nZWQoYm9vbCBjaGFuZ2VkQgogICAgIFN0cmluZ0J1aWxkZXIgdmFsdWVCdWlsZGVyOwogICAg
IGZvciAoTm9kZSAqbiA9IGZpcnN0Q2hpbGQoKTsgbjsgbiA9IG4tPm5leHRTaWJsaW5nKCkpIHsK
ICAgICAgICAgaWYgKG4tPmlzVGV4dE5vZGUoKSkKLSAgICAgICAgICAgIHZhbHVlQnVpbGRlci5h
cHBlbmQoc3RhdGljX2Nhc3Q8VGV4dCo+KG4pLT5kYXRhKCkpOworICAgICAgICAgICAgdmFsdWVC
dWlsZGVyLmFwcGVuZCh0b1RleHQobiktPmRhdGEoKSk7CiAgICAgfQogCiAgICAgQXRvbWljU3Ry
aW5nIG5ld1ZhbHVlID0gdmFsdWVCdWlsZGVyLnRvU3RyaW5nKCk7CkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9kb20vRWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZG9tL0Vs
ZW1lbnQuY3BwCShyZXZpc2lvbiAxMDc0MzQpCisrKyBTb3VyY2UvV2ViQ29yZS9kb20vRWxlbWVu
dC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTExMjEsNyArMTEyMSw3IEBAIHZvaWQgRWxlbWVudDo6
cmVjYWxjU3R5bGUoU3R5bGVDaGFuZ2UgY2gKICAgICBib29sIGZvcmNlQ2hlY2tPZkFueUVsZW1l
bnRTaWJsaW5nID0gZmFsc2U7CiAgICAgZm9yIChOb2RlICpuID0gZmlyc3RDaGlsZCgpOyBuOyBu
ID0gbi0+bmV4dFNpYmxpbmcoKSkgewogICAgICAgICBpZiAobi0+aXNUZXh0Tm9kZSgpKSB7Ci0g
ICAgICAgICAgICBzdGF0aWNfY2FzdDxUZXh0Kj4obiktPnJlY2FsY1RleHRTdHlsZShjaGFuZ2Up
OworICAgICAgICAgICAgdG9UZXh0KG4pLT5yZWNhbGNUZXh0U3R5bGUoY2hhbmdlKTsKICAgICAg
ICAgICAgIGNvbnRpbnVlOwogICAgICAgICB9IAogICAgICAgICBpZiAoIW4tPmlzRWxlbWVudE5v
ZGUoKSkgCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9kb20vTm9kZS5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvZG9tL05vZGUuY3BwCShyZXZpc2lvbiAxMDc0MzQpCisrKyBTb3VyY2Uv
V2ViQ29yZS9kb20vTm9kZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTYzMiw3ICs2MzIsNyBAQCB2
b2lkIE5vZGU6Om5vcm1hbGl6ZSgpCiAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgfQog
Ci0gICAgICAgIFJlZlB0cjxUZXh0PiB0ZXh0ID0gc3RhdGljX2Nhc3Q8VGV4dCo+KG5vZGUuZ2V0
KCkpOworICAgICAgICBSZWZQdHI8VGV4dD4gdGV4dCA9IHRvVGV4dChub2RlLmdldCgpKTsKIAog
ICAgICAgICAvLyBSZW1vdmUgZW1wdHkgdGV4dCBub2Rlcy4KICAgICAgICAgaWYgKCF0ZXh0LT5s
ZW5ndGgoKSkgewpAQCAtNjQ3LDcgKzY0Nyw3IEBAIHZvaWQgTm9kZTo6bm9ybWFsaXplKCkKICAg
ICAgICAgd2hpbGUgKE5vZGUqIG5leHRTaWJsaW5nID0gbm9kZS0+bmV4dFNpYmxpbmcoKSkgewog
ICAgICAgICAgICAgaWYgKG5leHRTaWJsaW5nLT5ub2RlVHlwZSgpICE9IFRFWFRfTk9ERSkKICAg
ICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIFJlZlB0cjxUZXh0PiBuZXh0VGV4dCA9
IHN0YXRpY19jYXN0PFRleHQqPihuZXh0U2libGluZyk7CisgICAgICAgICAgICBSZWZQdHI8VGV4
dD4gbmV4dFRleHQgPSB0b1RleHQobmV4dFNpYmxpbmcpOwogCiAgICAgICAgICAgICAvLyBSZW1v
dmUgZW1wdHkgdGV4dCBub2Rlcy4KICAgICAgICAgICAgIGlmICghbmV4dFRleHQtPmxlbmd0aCgp
KSB7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9kb20vUG9zaXRpb24uY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL2RvbS9Qb3NpdGlvbi5jcHAJKHJldmlzaW9uIDEwNzQzNCkKKysrIFNv
dXJjZS9XZWJDb3JlL2RvbS9Qb3NpdGlvbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE1Myw3ICsx
NTMsNyBAQCBUZXh0KiBQb3NpdGlvbjo6Y29udGFpbmVyVGV4dCgpIGNvbnN0CiB7CiAgICAgc3dp
dGNoIChhbmNob3JUeXBlKCkpIHsKICAgICBjYXNlIFBvc2l0aW9uSXNPZmZzZXRJbkFuY2hvcjoK
LSAgICAgICAgcmV0dXJuIG1fYW5jaG9yTm9kZSAmJiBtX2FuY2hvck5vZGUtPmlzVGV4dE5vZGUo
KSA/IHN0YXRpY19jYXN0PFRleHQqPihtX2FuY2hvck5vZGUuZ2V0KCkpIDogMDsKKyAgICAgICAg
cmV0dXJuIG1fYW5jaG9yTm9kZSAmJiBtX2FuY2hvck5vZGUtPmlzVGV4dE5vZGUoKSA/IHRvVGV4
dChtX2FuY2hvck5vZGUuZ2V0KCkpIDogMDsKICAgICBjYXNlIFBvc2l0aW9uSXNCZWZvcmVBbmNo
b3I6CiAgICAgY2FzZSBQb3NpdGlvbklzQWZ0ZXJBbmNob3I6CiAgICAgICAgIHJldHVybiAwOwpA
QCAtMTAxOCw3ICsxMDE4LDcgQEAgUG9zaXRpb24gUG9zaXRpb246OmxlYWRpbmdXaGl0ZXNwYWNl
UG9zaQogCiAgICAgUG9zaXRpb24gcHJldiA9IHByZXZpb3VzQ2hhcmFjdGVyUG9zaXRpb24oYWZm
aW5pdHkpOwogICAgIGlmIChwcmV2ICE9ICp0aGlzICYmIHByZXYuZGVwcmVjYXRlZE5vZGUoKS0+
aW5TYW1lQ29udGFpbmluZ0Jsb2NrRmxvd0VsZW1lbnQoZGVwcmVjYXRlZE5vZGUoKSkgJiYgcHJl
di5kZXByZWNhdGVkTm9kZSgpLT5pc1RleHROb2RlKCkpIHsKLSAgICAgICAgU3RyaW5nIHN0cmlu
ZyA9IHN0YXRpY19jYXN0PFRleHQgKj4ocHJldi5kZXByZWNhdGVkTm9kZSgpKS0+ZGF0YSgpOwor
ICAgICAgICBTdHJpbmcgc3RyaW5nID0gdG9UZXh0KHByZXYuZGVwcmVjYXRlZE5vZGUoKSktPmRh
dGEoKTsKICAgICAgICAgVUNoYXIgYyA9IHN0cmluZ1twcmV2LmRlcHJlY2F0ZWRFZGl0aW5nT2Zm
c2V0KCldOwogICAgICAgICBpZiAoY29uc2lkZXJOb25Db2xsYXBzaWJsZVdoaXRlc3BhY2UgPyAo
aXNTcGFjZU9yTmV3bGluZShjKSB8fCBjID09IG5vQnJlYWtTcGFjZSkgOiBpc0NvbGxhcHNpYmxl
V2hpdGVzcGFjZShjKSkKICAgICAgICAgICAgIGlmIChpc0VkaXRhYmxlUG9zaXRpb24ocHJldikp
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9kb20vUmFuZ2UuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL2RvbS9SYW5nZS5jcHAJKHJldmlzaW9uIDEwNzQzNCkKKysrIFNvdXJjZS9XZWJD
b3JlL2RvbS9SYW5nZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEwMzcsNyArMTAzNyw3IEBAIHZv
aWQgUmFuZ2U6Omluc2VydE5vZGUoUGFzc1JlZlB0cjxOb2RlPiAKIAogICAgIGJvb2wgY29sbGFw
c2VkID0gbV9zdGFydCA9PSBtX2VuZDsKICAgICBpZiAoc3RhcnRJc1RleHQpIHsKLSAgICAgICAg
UmVmUHRyPFRleHQ+IG5ld1RleHQgPSBzdGF0aWNfY2FzdDxUZXh0Kj4obV9zdGFydC5jb250YWlu
ZXIoKSktPnNwbGl0VGV4dChtX3N0YXJ0Lm9mZnNldCgpLCBlYyk7CisgICAgICAgIFJlZlB0cjxU
ZXh0PiBuZXdUZXh0ID0gdG9UZXh0KG1fc3RhcnQuY29udGFpbmVyKCkpLT5zcGxpdFRleHQobV9z
dGFydC5vZmZzZXQoKSwgZWMpOwogICAgICAgICBpZiAoZWMpCiAgICAgICAgICAgICByZXR1cm47
CiAgICAgICAgIG1fc3RhcnQuY29udGFpbmVyKCktPnBhcmVudE5vZGUoKS0+aW5zZXJ0QmVmb3Jl
KG5ld05vZGUucmVsZWFzZSgpLCBuZXdUZXh0LmdldCgpLCBlYyk7CkBAIC0yMDQwLDcgKzIwNDAs
NyBAQCB2b2lkIFJhbmdlOjpnZXRCb3JkZXJBbmRUZXh0UXVhZHMoVmVjdG9yCiAgICAgICAgICAg
ICAgICAgfQogICAgICAgICAgICAgfQogICAgICAgICB9IGVsc2UgaWYgKG5vZGUtPmlzVGV4dE5v
ZGUoKSkgewotICAgICAgICAgICAgaWYgKFJlbmRlck9iamVjdCogcmVuZGVyZXIgPSBzdGF0aWNf
Y2FzdDxUZXh0Kj4obm9kZSktPnJlbmRlcmVyKCkpIHsKKyAgICAgICAgICAgIGlmIChSZW5kZXJP
YmplY3QqIHJlbmRlcmVyID0gdG9UZXh0KG5vZGUpLT5yZW5kZXJlcigpKSB7CiAgICAgICAgICAg
ICAgICAgUmVuZGVyVGV4dCogcmVuZGVyVGV4dCA9IHRvUmVuZGVyVGV4dChyZW5kZXJlcik7CiAg
ICAgICAgICAgICAgICAgaW50IHN0YXJ0T2Zmc2V0ID0gKG5vZGUgPT0gc3RhcnRDb250YWluZXIp
ID8gbV9zdGFydC5vZmZzZXQoKSA6IDA7CiAgICAgICAgICAgICAgICAgaW50IGVuZE9mZnNldCA9
IChub2RlID09IGVuZENvbnRhaW5lcikgPyBtX2VuZC5vZmZzZXQoKSA6IElOVF9NQVg7CkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9kb20vU2NyaXB0RWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvZG9tL1NjcmlwdEVsZW1lbnQuY3BwCShyZXZpc2lvbiAxMDc0MzQpCisrKyBT
b3VyY2UvV2ViQ29yZS9kb20vU2NyaXB0RWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM1
NSw3ICszNTUsNyBAQCBTdHJpbmcgU2NyaXB0RWxlbWVudDo6c2NyaXB0Q29udGVudCgpIGNvCiAg
ICAgICAgIGlmICghbi0+aXNUZXh0Tm9kZSgpKQogICAgICAgICAgICAgY29udGludWU7CiAKLSAg
ICAgICAgVGV4dCogdCA9IHN0YXRpY19jYXN0PFRleHQqPihuKTsKKyAgICAgICAgVGV4dCogdCA9
IHRvVGV4dChuKTsKICAgICAgICAgaWYgKGZvdW5kTXVsdGlwbGVUZXh0Tm9kZXMpCiAgICAgICAg
ICAgICBjb250ZW50LmFwcGVuZCh0LT5kYXRhKCkpOwogICAgICAgICBlbHNlIGlmIChmaXJzdFRl
eHROb2RlKSB7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9kb20vU2hhZG93Um9vdC5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvZG9tL1NoYWRvd1Jvb3QuY3BwCShyZXZpc2lvbiAxMDc0
MzQpCisrKyBTb3VyY2UvV2ViQ29yZS9kb20vU2hhZG93Um9vdC5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTE1NSw3ICsxNTUsNyBAQCB2b2lkIFNoYWRvd1Jvb3Q6OnJlY2FsY1NoYWRvd1RyZWVTdHls
ZShTCiAgICAgICAgICAgICBpZiAobi0+aXNFbGVtZW50Tm9kZSgpKQogICAgICAgICAgICAgICAg
IHN0YXRpY19jYXN0PEVsZW1lbnQqPihuKS0+cmVjYWxjU3R5bGUoY2hhbmdlKTsKICAgICAgICAg
ICAgIGVsc2UgaWYgKG4tPmlzVGV4dE5vZGUoKSkKLSAgICAgICAgICAgICAgICBzdGF0aWNfY2Fz
dDxUZXh0Kj4obiktPnJlY2FsY1RleHRTdHlsZShjaGFuZ2UpOworICAgICAgICAgICAgICAgIHRv
VGV4dChuKS0+cmVjYWxjVGV4dFN0eWxlKGNoYW5nZSk7CiAgICAgICAgIH0KICAgICB9CiAKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL2RvbS9UZXh0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvZG9tL1RleHQuaAkocmV2aXNpb24gMTA3NDM0KQorKysgU291cmNlL1dlYkNvcmUvZG9tL1Rl
eHQuaAkod29ya2luZyBjb3B5KQpAQCAtNzAsNiArNzAsMTIgQEAgcHJpdmF0ZToKICNlbmRpZgog
fTsKIAoraW5saW5lIFRleHQqIHRvVGV4dChOb2RlKiBub2RlKQoreworICAgIEFTU0VSVCghbm9k
ZSB8fCBub2RlLT5pc1RleHROb2RlKCkpOworICAgIHJldHVybiBzdGF0aWNfY2FzdDxUZXh0Kj4o
bm9kZSk7Cit9CisKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIAogI2VuZGlmIC8vIFRleHRfaApJ
bmRleDogU291cmNlL1dlYkNvcmUvZWRpdGluZy9BcHBseUJsb2NrRWxlbWVudENvbW1hbmQuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvQXBwbHlCbG9ja0VsZW1lbnRD
b21tYW5kLmNwcAkocmV2aXNpb24gMTA3NDM0KQorKysgU291cmNlL1dlYkNvcmUvZWRpdGluZy9B
cHBseUJsb2NrRWxlbWVudENvbW1hbmQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNjIsNyArMTYy
LDcgQEAgc3RhdGljIGJvb2wgaXNOZXdMaW5lQXRQb3NpdGlvbihjb25zdCBQbwogICAgICAgICBy
ZXR1cm4gZmFsc2U7CiAKICAgICBFeGNlcHRpb25Db2RlIGVjID0gMDsKLSAgICBTdHJpbmcgdGV4
dEF0UG9zaXRpb24gPSBzdGF0aWNfY2FzdDxUZXh0Kj4odGV4dE5vZGUpLT5zdWJzdHJpbmdEYXRh
KG9mZnNldCwgMSwgZWMpOworICAgIFN0cmluZyB0ZXh0QXRQb3NpdGlvbiA9IHRvVGV4dCh0ZXh0
Tm9kZSktPnN1YnN0cmluZ0RhdGEob2Zmc2V0LCAxLCBlYyk7CiAgICAgaWYgKGVjKQogICAgICAg
ICByZXR1cm4gZmFsc2U7CiAKQEAgLTI1NywxOCArMjU3LDE4IEBAIFZpc2libGVQb3NpdGlvbiBB
cHBseUJsb2NrRWxlbWVudENvbW1hbmQKIAogICAgIGlmICh0ZXh0ID09IHN0YXJ0LmNvbnRhaW5l
ck5vZGUoKSAmJiB0ZXh0LT5wcmV2aW91c1NpYmxpbmcoKSAmJiB0ZXh0LT5wcmV2aW91c1NpYmxp
bmcoKS0+aXNUZXh0Tm9kZSgpKSB7CiAgICAgICAgIEFTU0VSVChzdGFydC5vZmZzZXRJbkNvbnRh
aW5lck5vZGUoKSA8IHBvc2l0aW9uLm9mZnNldEluQ29udGFpbmVyTm9kZSgpKTsKLSAgICAgICAg
c3RhcnQgPSBQb3NpdGlvbihzdGF0aWNfY2FzdDxUZXh0Kj4odGV4dC0+cHJldmlvdXNTaWJsaW5n
KCkpLCBzdGFydC5vZmZzZXRJbkNvbnRhaW5lck5vZGUoKSk7CisgICAgICAgIHN0YXJ0ID0gUG9z
aXRpb24odG9UZXh0KHRleHQtPnByZXZpb3VzU2libGluZygpKSwgc3RhcnQub2Zmc2V0SW5Db250
YWluZXJOb2RlKCkpOwogICAgIH0KICAgICBpZiAodGV4dCA9PSBlbmQuY29udGFpbmVyTm9kZSgp
ICYmIHRleHQtPnByZXZpb3VzU2libGluZygpICYmIHRleHQtPnByZXZpb3VzU2libGluZygpLT5p
c1RleHROb2RlKCkpIHsKICAgICAgICAgQVNTRVJUKGVuZC5vZmZzZXRJbkNvbnRhaW5lck5vZGUo
KSA8IHBvc2l0aW9uLm9mZnNldEluQ29udGFpbmVyTm9kZSgpKTsKLSAgICAgICAgZW5kID0gUG9z
aXRpb24oc3RhdGljX2Nhc3Q8VGV4dCo+KHRleHQtPnByZXZpb3VzU2libGluZygpKSwgZW5kLm9m
ZnNldEluQ29udGFpbmVyTm9kZSgpKTsKKyAgICAgICAgZW5kID0gUG9zaXRpb24odG9UZXh0KHRl
eHQtPnByZXZpb3VzU2libGluZygpKSwgZW5kLm9mZnNldEluQ29udGFpbmVyTm9kZSgpKTsKICAg
ICB9CiAgICAgaWYgKHRleHQgPT0gbV9lbmRPZkxhc3RQYXJhZ3JhcGguY29udGFpbmVyTm9kZSgp
KSB7CiAgICAgICAgIGlmIChtX2VuZE9mTGFzdFBhcmFncmFwaC5vZmZzZXRJbkNvbnRhaW5lck5v
ZGUoKSA8IHBvc2l0aW9uLm9mZnNldEluQ29udGFpbmVyTm9kZSgpKSB7CiAgICAgICAgICAgICAv
LyBXZSBjYW4gb25seSBmaXggZW5kT2ZMYXN0UGFyYWdyYXBoIGlmIHRoZSBwcmV2aW91cyBub2Rl
IHdhcyBzdGlsbCB0ZXh0IGFuZCBoYXNuJ3QgYmVlbiBtb2RpZmllZCBieSBzY3JpcHQuCiAgICAg
ICAgICAgICBpZiAodGV4dC0+cHJldmlvdXNTaWJsaW5nKCktPmlzVGV4dE5vZGUoKQotICAgICAg
ICAgICAgICAgICYmIHN0YXRpY19jYXN0PHVuc2lnbmVkPihtX2VuZE9mTGFzdFBhcmFncmFwaC5v
ZmZzZXRJbkNvbnRhaW5lck5vZGUoKSkgPD0gc3RhdGljX2Nhc3Q8VGV4dCo+KHRleHQtPnByZXZp
b3VzU2libGluZygpKS0+bGVuZ3RoKCkpCi0gICAgICAgICAgICAgICAgbV9lbmRPZkxhc3RQYXJh
Z3JhcGggPSBQb3NpdGlvbihzdGF0aWNfY2FzdDxUZXh0Kj4odGV4dC0+cHJldmlvdXNTaWJsaW5n
KCkpLCBtX2VuZE9mTGFzdFBhcmFncmFwaC5vZmZzZXRJbkNvbnRhaW5lck5vZGUoKSk7CisgICAg
ICAgICAgICAgICAgJiYgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KG1fZW5kT2ZMYXN0UGFyYWdyYXBo
Lm9mZnNldEluQ29udGFpbmVyTm9kZSgpKSA8PSB0b1RleHQodGV4dC0+cHJldmlvdXNTaWJsaW5n
KCkpLT5sZW5ndGgoKSkKKyAgICAgICAgICAgICAgICBtX2VuZE9mTGFzdFBhcmFncmFwaCA9IFBv
c2l0aW9uKHRvVGV4dCh0ZXh0LT5wcmV2aW91c1NpYmxpbmcoKSksIG1fZW5kT2ZMYXN0UGFyYWdy
YXBoLm9mZnNldEluQ29udGFpbmVyTm9kZSgpKTsKICAgICAgICAgfSBlbHNlCiAgICAgICAgICAg
ICBtX2VuZE9mTGFzdFBhcmFncmFwaCA9IFBvc2l0aW9uKHRleHQuZ2V0KCksIG1fZW5kT2ZMYXN0
UGFyYWdyYXBoLm9mZnNldEluQ29udGFpbmVyTm9kZSgpIC0gMSk7CiAgICAgfQpJbmRleDogU291
cmNlL1dlYkNvcmUvZWRpdGluZy9BcHBseVN0eWxlQ29tbWFuZC5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvZWRpdGluZy9BcHBseVN0eWxlQ29tbWFuZC5jcHAJKHJldmlzaW9uIDEw
NzQzNCkKKysrIFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvQXBwbHlTdHlsZUNvbW1hbmQuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0xMTIzLDE0ICsxMTIzLDE0IEBAIHZvaWQgQXBwbHlTdHlsZUNvbW1h
bmQ6OnNwbGl0VGV4dEF0RW5kKGMKICAgICBBU1NFUlQoZW5kLmNvbnRhaW5lck5vZGUoKS0+aXNU
ZXh0Tm9kZSgpKTsKIAogICAgIGJvb2wgc2hvdWxkVXBkYXRlU3RhcnQgPSBzdGFydC5hbmNob3JU
eXBlKCkgPT0gUG9zaXRpb246OlBvc2l0aW9uSXNPZmZzZXRJbkFuY2hvciAmJiBzdGFydC5jb250
YWluZXJOb2RlKCkgPT0gZW5kLmNvbnRhaW5lck5vZGUoKTsKLSAgICBUZXh0KiB0ZXh0ID0gc3Rh
dGljX2Nhc3Q8VGV4dCAqPihlbmQuZGVwcmVjYXRlZE5vZGUoKSk7CisgICAgVGV4dCogdGV4dCA9
IHRvVGV4dChlbmQuZGVwcmVjYXRlZE5vZGUoKSk7CiAgICAgc3BsaXRUZXh0Tm9kZSh0ZXh0LCBl
bmQub2Zmc2V0SW5Db250YWluZXJOb2RlKCkpOwogCiAgICAgTm9kZSogcHJldk5vZGUgPSB0ZXh0
LT5wcmV2aW91c1NpYmxpbmcoKTsKICAgICBpZiAoIXByZXZOb2RlIHx8ICFwcmV2Tm9kZS0+aXNU
ZXh0Tm9kZSgpKQogICAgICAgICByZXR1cm47CiAKLSAgICBQb3NpdGlvbiBuZXdTdGFydCA9IHNo
b3VsZFVwZGF0ZVN0YXJ0ID8gUG9zaXRpb24oc3RhdGljX2Nhc3Q8VGV4dCo+KHByZXZOb2RlKSwg
c3RhcnQub2Zmc2V0SW5Db250YWluZXJOb2RlKCkpIDogc3RhcnQ7CisgICAgUG9zaXRpb24gbmV3
U3RhcnQgPSBzaG91bGRVcGRhdGVTdGFydCA/IFBvc2l0aW9uKHRvVGV4dChwcmV2Tm9kZSksIHN0
YXJ0Lm9mZnNldEluQ29udGFpbmVyTm9kZSgpKSA6IHN0YXJ0OwogICAgIHVwZGF0ZVN0YXJ0RW5k
KG5ld1N0YXJ0LCBsYXN0UG9zaXRpb25Jbk5vZGUocHJldk5vZGUpKTsKIH0KIApAQCAtMTE2Miw3
ICsxMTYyLDcgQEAgdm9pZCBBcHBseVN0eWxlQ29tbWFuZDo6c3BsaXRUZXh0RWxlbWVudAogICAg
IGlmICghZmlyc3RUZXh0Tm9kZSB8fCAhZmlyc3RUZXh0Tm9kZS0+aXNUZXh0Tm9kZSgpKQogICAg
ICAgICByZXR1cm47CiAKLSAgICBQb3NpdGlvbiBuZXdTdGFydCA9IHNob3VsZFVwZGF0ZVN0YXJ0
ID8gUG9zaXRpb24oc3RhdGljX2Nhc3Q8VGV4dCo+KGZpcnN0VGV4dE5vZGUpLCBzdGFydC5vZmZz
ZXRJbkNvbnRhaW5lck5vZGUoKSkgOiBzdGFydDsKKyAgICBQb3NpdGlvbiBuZXdTdGFydCA9IHNo
b3VsZFVwZGF0ZVN0YXJ0ID8gUG9zaXRpb24odG9UZXh0KGZpcnN0VGV4dE5vZGUpLCBzdGFydC5v
ZmZzZXRJbkNvbnRhaW5lck5vZGUoKSkgOiBzdGFydDsKICAgICB1cGRhdGVTdGFydEVuZChuZXdT
dGFydCwgcG9zaXRpb25BZnRlck5vZGUoZmlyc3RUZXh0Tm9kZSkpOwogfQogCkBAIC0xNDMzLDgg
KzE0MzMsOCBAQCB2b2lkIEFwcGx5U3R5bGVDb21tYW5kOjpqb2luQ2hpbGRUZXh0Tm9kCiAgICAg
d2hpbGUgKGNoaWxkKSB7CiAgICAgICAgIE5vZGUqIG5leHQgPSBjaGlsZC0+bmV4dFNpYmxpbmco
KTsKICAgICAgICAgaWYgKGNoaWxkLT5pc1RleHROb2RlKCkgJiYgbmV4dCAmJiBuZXh0LT5pc1Rl
eHROb2RlKCkpIHsKLSAgICAgICAgICAgIFRleHQqIGNoaWxkVGV4dCA9IHN0YXRpY19jYXN0PFRl
eHQgKj4oY2hpbGQpOwotICAgICAgICAgICAgVGV4dCogbmV4dFRleHQgPSBzdGF0aWNfY2FzdDxU
ZXh0ICo+KG5leHQpOworICAgICAgICAgICAgVGV4dCogY2hpbGRUZXh0ID0gdG9UZXh0KGNoaWxk
KTsKKyAgICAgICAgICAgIFRleHQqIG5leHRUZXh0ID0gdG9UZXh0KG5leHQpOwogICAgICAgICAg
ICAgaWYgKHN0YXJ0LmFuY2hvclR5cGUoKSA9PSBQb3NpdGlvbjo6UG9zaXRpb25Jc09mZnNldElu
QW5jaG9yICYmIG5leHQgPT0gc3RhcnQuY29udGFpbmVyTm9kZSgpKQogICAgICAgICAgICAgICAg
IG5ld1N0YXJ0ID0gUG9zaXRpb24oY2hpbGRUZXh0LCBjaGlsZFRleHQtPmxlbmd0aCgpICsgc3Rh
cnQub2Zmc2V0SW5Db250YWluZXJOb2RlKCkpOwogICAgICAgICAgICAgaWYgKGVuZC5hbmNob3JU
eXBlKCkgPT0gUG9zaXRpb246OlBvc2l0aW9uSXNPZmZzZXRJbkFuY2hvciAmJiBuZXh0ID09IGVu
ZC5jb250YWluZXJOb2RlKCkpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0JyZWFrQmxv
Y2txdW90ZUNvbW1hbmQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcv
QnJlYWtCbG9ja3F1b3RlQ29tbWFuZC5jcHAJKHJldmlzaW9uIDEwNzQzNCkKKysrIFNvdXJjZS9X
ZWJDb3JlL2VkaXRpbmcvQnJlYWtCbG9ja3F1b3RlQ29tbWFuZC5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTEwNyw3ICsxMDcsNyBAQCB2b2lkIEJyZWFrQmxvY2txdW90ZUNvbW1hbmQ6OmRvQXBwbHko
KQogICAgICAgICAKICAgICAvLyBTcGxpdCBhdCBwb3MgaWYgaW4gdGhlIG1pZGRsZSBvZiBhIHRl
eHQgbm9kZS4KICAgICBpZiAoc3RhcnROb2RlLT5pc1RleHROb2RlKCkpIHsKLSAgICAgICAgVGV4
dCogdGV4dE5vZGUgPSBzdGF0aWNfY2FzdDxUZXh0Kj4oc3RhcnROb2RlKTsKKyAgICAgICAgVGV4
dCogdGV4dE5vZGUgPSB0b1RleHQoc3RhcnROb2RlKTsKICAgICAgICAgaWYgKCh1bnNpZ25lZClw
b3MuZGVwcmVjYXRlZEVkaXRpbmdPZmZzZXQoKSA+PSB0ZXh0Tm9kZS0+bGVuZ3RoKCkpIHsKICAg
ICAgICAgICAgIHN0YXJ0Tm9kZSA9IHN0YXJ0Tm9kZS0+dHJhdmVyc2VOZXh0Tm9kZSgpOwogICAg
ICAgICAgICAgQVNTRVJUKHN0YXJ0Tm9kZSk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9lZGl0aW5n
L0NvbXBvc2l0ZUVkaXRDb21tYW5kLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9l
ZGl0aW5nL0NvbXBvc2l0ZUVkaXRDb21tYW5kLmNwcAkocmV2aXNpb24gMTA3NDM0KQorKysgU291
cmNlL1dlYkNvcmUvZWRpdGluZy9Db21wb3NpdGVFZGl0Q29tbWFuZC5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTM1Niw3ICszNTYsNyBAQCB2b2lkIENvbXBvc2l0ZUVkaXRDb21tYW5kOjppbnNlcnRO
b2RlQXQoCiAgICAgfSBlbHNlIGlmIChjYXJldE1pbk9mZnNldChyZWZDaGlsZCkgPj0gb2Zmc2V0
KQogICAgICAgICBpbnNlcnROb2RlQmVmb3JlKGluc2VydENoaWxkLCByZWZDaGlsZCk7CiAgICAg
ZWxzZSBpZiAocmVmQ2hpbGQtPmlzVGV4dE5vZGUoKSAmJiBjYXJldE1heE9mZnNldChyZWZDaGls
ZCkgPiBvZmZzZXQpIHsKLSAgICAgICAgc3BsaXRUZXh0Tm9kZShzdGF0aWNfY2FzdDxUZXh0ICo+
KHJlZkNoaWxkKSwgb2Zmc2V0KTsKKyAgICAgICAgc3BsaXRUZXh0Tm9kZSh0b1RleHQocmVmQ2hp
bGQpLCBvZmZzZXQpOwogCiAgICAgICAgIC8vIE11dGF0aW9uIGV2ZW50cyAoYnVnIDIyNjM0KSBm
cm9tIHRoZSB0ZXh0IG5vZGUgaW5zZXJ0aW9uIG1heSBoYXZlIHJlbW92ZWQgdGhlIHJlZkNoaWxk
CiAgICAgICAgIGlmICghcmVmQ2hpbGQtPmluRG9jdW1lbnQoKSkKQEAgLTUzMiw3ICs1MzIsNyBA
QCBQb3NpdGlvbiBDb21wb3NpdGVFZGl0Q29tbWFuZDo6cG9zaXRpb25PCiAgICAgaWYgKHBvcy5v
ZmZzZXRJbkNvbnRhaW5lck5vZGUoKSA+PSBjYXJldE1heE9mZnNldChwb3MuY29udGFpbmVyTm9k
ZSgpKSkKICAgICAgICAgcmV0dXJuIHBvc2l0aW9uSW5QYXJlbnRBZnRlck5vZGUodGFiU3Bhbik7
CiAKLSAgICBzcGxpdFRleHROb2RlQ29udGFpbmluZ0VsZW1lbnQoc3RhdGljX2Nhc3Q8VGV4dCAq
Pihwb3MuY29udGFpbmVyTm9kZSgpKSwgcG9zLm9mZnNldEluQ29udGFpbmVyTm9kZSgpKTsKKyAg
ICBzcGxpdFRleHROb2RlQ29udGFpbmluZ0VsZW1lbnQodG9UZXh0KHBvcy5jb250YWluZXJOb2Rl
KCkpLCBwb3Mub2Zmc2V0SW5Db250YWluZXJOb2RlKCkpOwogICAgIHJldHVybiBwb3NpdGlvbklu
UGFyZW50QmVmb3JlTm9kZSh0YWJTcGFuKTsKIH0KIApAQCAtNTkwLDcgKzU5MCw3IEBAIGJvb2wg
Q29tcG9zaXRlRWRpdENvbW1hbmQ6OmNhblJlYmFsYW5jZSgKICAgICBpZiAocG9zaXRpb24uYW5j
aG9yVHlwZSgpICE9IFBvc2l0aW9uOjpQb3NpdGlvbklzT2Zmc2V0SW5BbmNob3IgfHwgIW5vZGUg
fHwgIW5vZGUtPmlzVGV4dE5vZGUoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgVGV4
dCogdGV4dE5vZGUgPSBzdGF0aWNfY2FzdDxUZXh0Kj4obm9kZSk7CisgICAgVGV4dCogdGV4dE5v
ZGUgPSB0b1RleHQobm9kZSk7CiAgICAgaWYgKHRleHROb2RlLT5sZW5ndGgoKSA9PSAwKQogICAg
ICAgICByZXR1cm4gZmFsc2U7CiAKQEAgLTYxMCwxNCArNjEwLDE0IEBAIHZvaWQgQ29tcG9zaXRl
RWRpdENvbW1hbmQ6OnJlYmFsYW5jZVdoaXQKIAogICAgIC8vIElmIHRoZSByZWJhbGFuY2UgaXMg
Zm9yIHRoZSBzaW5nbGUgb2Zmc2V0LCBhbmQgbmVpdGhlciB0ZXh0W29mZnNldF0gbm9yIHRleHRb
b2Zmc2V0IC0gMV0gYXJlIHNvbWUgZm9ybSBvZiB3aGl0ZXNwYWNlLCBkbyBub3RoaW5nLgogICAg
IGludCBvZmZzZXQgPSBwb3NpdGlvbi5kZXByZWNhdGVkRWRpdGluZ09mZnNldCgpOwotICAgIFN0
cmluZyB0ZXh0ID0gc3RhdGljX2Nhc3Q8VGV4dCo+KG5vZGUpLT5kYXRhKCk7CisgICAgU3RyaW5n
IHRleHQgPSB0b1RleHQobm9kZSktPmRhdGEoKTsKICAgICBpZiAoIWlzV2hpdGVzcGFjZSh0ZXh0
W29mZnNldF0pKSB7CiAgICAgICAgIG9mZnNldC0tOwogICAgICAgICBpZiAob2Zmc2V0IDwgMCB8
fCAhaXNXaGl0ZXNwYWNlKHRleHRbb2Zmc2V0XSkpCiAgICAgICAgICAgICByZXR1cm47CiAgICAg
fQogCi0gICAgcmViYWxhbmNlV2hpdGVzcGFjZU9uVGV4dFN1YnN0cmluZyhzdGF0aWNfY2FzdDxU
ZXh0Kj4obm9kZSksIHBvc2l0aW9uLm9mZnNldEluQ29udGFpbmVyTm9kZSgpLCBwb3NpdGlvbi5v
ZmZzZXRJbkNvbnRhaW5lck5vZGUoKSk7CisgICAgcmViYWxhbmNlV2hpdGVzcGFjZU9uVGV4dFN1
YnN0cmluZyh0b1RleHQobm9kZSksIHBvc2l0aW9uLm9mZnNldEluQ29udGFpbmVyTm9kZSgpLCBw
b3NpdGlvbi5vZmZzZXRJbkNvbnRhaW5lck5vZGUoKSk7CiB9CiAKIHZvaWQgQ29tcG9zaXRlRWRp
dENvbW1hbmQ6OnJlYmFsYW5jZVdoaXRlc3BhY2VPblRleHRTdWJzdHJpbmcoUGFzc1JlZlB0cjxU
ZXh0PiBwcnBUZXh0Tm9kZSwgaW50IHN0YXJ0T2Zmc2V0LCBpbnQgZW5kT2Zmc2V0KQpAQCAtNjU5
LDcgKzY1OSw3IEBAIHZvaWQgQ29tcG9zaXRlRWRpdENvbW1hbmQ6OnByZXBhcmVXaGl0ZXMKICAg
ICBOb2RlKiBub2RlID0gcG9zaXRpb24uZGVwcmVjYXRlZE5vZGUoKTsKICAgICBpZiAoIW5vZGUg
fHwgIW5vZGUtPmlzVGV4dE5vZGUoKSkKICAgICAgICAgcmV0dXJuOwotICAgIFRleHQqIHRleHRO
b2RlID0gc3RhdGljX2Nhc3Q8VGV4dCo+KG5vZGUpOyAgICAKKyAgICBUZXh0KiB0ZXh0Tm9kZSA9
IHRvVGV4dChub2RlKTsgICAgCiAgICAgCiAgICAgaWYgKHRleHROb2RlLT5sZW5ndGgoKSA9PSAw
KQogICAgICAgICByZXR1cm47CkBAIC02NzcsOSArNjc3LDkgQEAgdm9pZCBDb21wb3NpdGVFZGl0
Q29tbWFuZDo6cHJlcGFyZVdoaXRlcwogICAgIFBvc2l0aW9uIHByZXZpb3VzKHByZXZpb3VzVmlz
aWJsZVBvcy5kZWVwRXF1aXZhbGVudCgpKTsKICAgICAKICAgICBpZiAoaXNDb2xsYXBzaWJsZVdo
aXRlc3BhY2UocHJldmlvdXNWaXNpYmxlUG9zLmNoYXJhY3RlckFmdGVyKCkpICYmIHByZXZpb3Vz
LmRlcHJlY2F0ZWROb2RlKCktPmlzVGV4dE5vZGUoKSAmJiAhcHJldmlvdXMuZGVwcmVjYXRlZE5v
ZGUoKS0+aGFzVGFnTmFtZShiclRhZykpCi0gICAgICAgIHJlcGxhY2VUZXh0SW5Ob2RlUHJlc2Vy
dmluZ01hcmtlcnMoc3RhdGljX2Nhc3Q8VGV4dCo+KHByZXZpb3VzLmRlcHJlY2F0ZWROb2RlKCkp
LCBwcmV2aW91cy5kZXByZWNhdGVkRWRpdGluZ09mZnNldCgpLCAxLCBub25CcmVha2luZ1NwYWNl
U3RyaW5nKCkpOworICAgICAgICByZXBsYWNlVGV4dEluTm9kZVByZXNlcnZpbmdNYXJrZXJzKHRv
VGV4dChwcmV2aW91cy5kZXByZWNhdGVkTm9kZSgpKSwgcHJldmlvdXMuZGVwcmVjYXRlZEVkaXRp
bmdPZmZzZXQoKSwgMSwgbm9uQnJlYWtpbmdTcGFjZVN0cmluZygpKTsKICAgICBpZiAoaXNDb2xs
YXBzaWJsZVdoaXRlc3BhY2UodmlzaWJsZVBvcy5jaGFyYWN0ZXJBZnRlcigpKSAmJiBwb3NpdGlv
bi5kZXByZWNhdGVkTm9kZSgpLT5pc1RleHROb2RlKCkgJiYgIXBvc2l0aW9uLmRlcHJlY2F0ZWRO
b2RlKCktPmhhc1RhZ05hbWUoYnJUYWcpKQotICAgICAgICByZXBsYWNlVGV4dEluTm9kZVByZXNl
cnZpbmdNYXJrZXJzKHN0YXRpY19jYXN0PFRleHQqPihwb3NpdGlvbi5kZXByZWNhdGVkTm9kZSgp
KSwgcG9zaXRpb24uZGVwcmVjYXRlZEVkaXRpbmdPZmZzZXQoKSwgMSwgbm9uQnJlYWtpbmdTcGFj
ZVN0cmluZygpKTsKKyAgICAgICAgcmVwbGFjZVRleHRJbk5vZGVQcmVzZXJ2aW5nTWFya2Vycyh0
b1RleHQocG9zaXRpb24uZGVwcmVjYXRlZE5vZGUoKSksIHBvc2l0aW9uLmRlcHJlY2F0ZWRFZGl0
aW5nT2Zmc2V0KCksIDEsIG5vbkJyZWFraW5nU3BhY2VTdHJpbmcoKSk7CiB9CiAKIHZvaWQgQ29t
cG9zaXRlRWRpdENvbW1hbmQ6OnJlYmFsYW5jZVdoaXRlc3BhY2UoKQpAQCAtNzg0LDcgKzc4NCw3
IEBAIHZvaWQgQ29tcG9zaXRlRWRpdENvbW1hbmQ6OmRlbGV0ZUluc2lnbmkKICAgICBmb3IgKE5v
ZGUqIG5vZGUgPSBzdGFydC5kZXByZWNhdGVkTm9kZSgpOyBub2RlOyBub2RlID0gbmV4dCkgewog
ICAgICAgICBuZXh0ID0gbm9kZS0+dHJhdmVyc2VOZXh0Tm9kZSgpOwogICAgICAgICBpZiAobm9k
ZS0+aXNUZXh0Tm9kZSgpKSB7Ci0gICAgICAgICAgICBUZXh0KiB0ZXh0Tm9kZSA9IHN0YXRpY19j
YXN0PFRleHQqPihub2RlKTsKKyAgICAgICAgICAgIFRleHQqIHRleHROb2RlID0gdG9UZXh0KG5v
ZGUpOwogICAgICAgICAgICAgaW50IHN0YXJ0T2Zmc2V0ID0gbm9kZSA9PSBzdGFydC5kZXByZWNh
dGVkTm9kZSgpID8gc3RhcnQuZGVwcmVjYXRlZEVkaXRpbmdPZmZzZXQoKSA6IDA7CiAgICAgICAg
ICAgICBpbnQgZW5kT2Zmc2V0ID0gbm9kZSA9PSBlbmQuZGVwcmVjYXRlZE5vZGUoKSA/IGVuZC5k
ZXByZWNhdGVkRWRpdGluZ09mZnNldCgpIDogc3RhdGljX2Nhc3Q8aW50Pih0ZXh0Tm9kZS0+bGVu
Z3RoKCkpOwogICAgICAgICAgICAgZGVsZXRlSW5zaWduaWZpY2FudFRleHQodGV4dE5vZGUsIHN0
YXJ0T2Zmc2V0LCBlbmRPZmZzZXQpOwpAQCAtODU3LDcgKzg1Nyw3IEBAIHZvaWQgQ29tcG9zaXRl
RWRpdENvbW1hbmQ6OnJlbW92ZVBsYWNlaG8KICAgICAgICAgcmV0dXJuOwogICAgIH0KICAgICAK
LSAgICBkZWxldGVUZXh0RnJvbU5vZGUoc3RhdGljX2Nhc3Q8VGV4dCo+KHAuYW5jaG9yTm9kZSgp
KSwgcC5vZmZzZXRJbkNvbnRhaW5lck5vZGUoKSwgMSk7CisgICAgZGVsZXRlVGV4dEZyb21Ob2Rl
KHRvVGV4dChwLmFuY2hvck5vZGUoKSksIHAub2Zmc2V0SW5Db250YWluZXJOb2RlKCksIDEpOwog
fQogCiBQYXNzUmVmUHRyPE5vZGU+IENvbXBvc2l0ZUVkaXRDb21tYW5kOjppbnNlcnROZXdEZWZh
dWx0UGFyYWdyYXBoRWxlbWVudEF0KGNvbnN0IFBvc2l0aW9uJiBwb3NpdGlvbikKQEAgLTEwMzMs
NyArMTAzMyw3IEBAIHZvaWQgQ29tcG9zaXRlRWRpdENvbW1hbmQ6OmNsZWFudXBBZnRlckQKICAg
ICAgICAgZWxzZSBpZiAobGluZUJyZWFrRXhpc3RzQXRQb3NpdGlvbihwb3NpdGlvbikpIHsKICAg
ICAgICAgICAgIC8vIFRoZXJlIGlzIGEgcHJlc2VydmVkICdcbicgYXQgY2FyZXRBZnRlckRlbGV0
ZS4KICAgICAgICAgICAgIC8vIFdlIGNhbiBzYWZlbHkgYXNzdW1lIHRoaXMgaXMgYSB0ZXh0IG5v
ZGUuCi0gICAgICAgICAgICBUZXh0KiB0ZXh0Tm9kZSA9IHN0YXRpY19jYXN0PFRleHQqPihub2Rl
KTsKKyAgICAgICAgICAgIFRleHQqIHRleHROb2RlID0gdG9UZXh0KG5vZGUpOwogICAgICAgICAg
ICAgaWYgKHRleHROb2RlLT5sZW5ndGgoKSA9PSAxKQogICAgICAgICAgICAgICAgIHJlbW92ZU5v
ZGVBbmRQcnVuZUFuY2VzdG9ycyhub2RlKTsKICAgICAgICAgICAgIGVsc2UKQEAgLTEzMjYsNyAr
MTMyNiw3IEBAIGJvb2wgQ29tcG9zaXRlRWRpdENvbW1hbmQ6OmJyZWFrT3V0T2ZFbXAKICAgICAg
ICAgcmVtb3ZlTm9kZUFuZFBydW5lQW5jZXN0b3JzKGNhcmV0UG9zLmRlcHJlY2F0ZWROb2RlKCkp
OwogICAgIGVsc2UgaWYgKGNhcmV0UG9zLmRlcHJlY2F0ZWROb2RlKCktPmlzVGV4dE5vZGUoKSkg
ewogICAgICAgICBBU1NFUlQoY2FyZXRQb3MuZGVwcmVjYXRlZEVkaXRpbmdPZmZzZXQoKSA9PSAw
KTsKLSAgICAgICAgVGV4dCogdGV4dE5vZGUgPSBzdGF0aWNfY2FzdDxUZXh0Kj4oY2FyZXRQb3Mu
ZGVwcmVjYXRlZE5vZGUoKSk7CisgICAgICAgIFRleHQqIHRleHROb2RlID0gdG9UZXh0KGNhcmV0
UG9zLmRlcHJlY2F0ZWROb2RlKCkpOwogICAgICAgICBDb250YWluZXJOb2RlKiBwYXJlbnROb2Rl
ID0gdGV4dE5vZGUtPnBhcmVudE5vZGUoKTsKICAgICAgICAgLy8gVGhlIHByZXNlcnZlZCBuZXds
aW5lIG11c3QgYmUgdGhlIGZpcnN0IHRoaW5nIGluIHRoZSBub2RlLCBzaW5jZSBvdGhlcndpc2Ug
dGhlIHByZXZpb3VzCiAgICAgICAgIC8vIHBhcmFncmFwaCB3b3VsZCBiZSBxdW90ZWQsIGFuZCB3
ZSB2ZXJpZmllZCB0aGF0IGl0IHdhc24ndCBhYm92ZS4KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2Vk
aXRpbmcvRGVsZXRlU2VsZWN0aW9uQ29tbWFuZC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvZWRpdGluZy9EZWxldGVTZWxlY3Rpb25Db21tYW5kLmNwcAkocmV2aXNpb24gMTA3NDM0
KQorKysgU291cmNlL1dlYkNvcmUvZWRpdGluZy9EZWxldGVTZWxlY3Rpb25Db21tYW5kLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtNDIzLDcgKzQyMyw3IEBAIHZvaWQgRGVsZXRlU2VsZWN0aW9uQ29t
bWFuZDo6aGFuZGxlR2VuZXIKICAgICB9CiAKICAgICBpZiAoc3RhcnRPZmZzZXQgPj0gY2FyZXRN
YXhPZmZzZXQoc3RhcnROb2RlKSAmJiBzdGFydE5vZGUtPmlzVGV4dE5vZGUoKSkgewotICAgICAg
ICBUZXh0ICp0ZXh0ID0gc3RhdGljX2Nhc3Q8VGV4dCAqPihzdGFydE5vZGUpOworICAgICAgICBU
ZXh0KiB0ZXh0ID0gdG9UZXh0KHN0YXJ0Tm9kZSk7CiAgICAgICAgIGlmICh0ZXh0LT5sZW5ndGgo
KSA+ICh1bnNpZ25lZCljYXJldE1heE9mZnNldChzdGFydE5vZGUpKQogICAgICAgICAgICAgZGVs
ZXRlVGV4dEZyb21Ob2RlKHRleHQsIGNhcmV0TWF4T2Zmc2V0KHN0YXJ0Tm9kZSksIHRleHQtPmxl
bmd0aCgpIC0gY2FyZXRNYXhPZmZzZXQoc3RhcnROb2RlKSk7CiAgICAgfQpAQCAtNDQxLDcgKzQ0
MSw3IEBAIHZvaWQgRGVsZXRlU2VsZWN0aW9uQ29tbWFuZDo6aGFuZGxlR2VuZXIKICAgICAgICAg
aWYgKG1fZG93bnN0cmVhbUVuZC5kZXByZWNhdGVkRWRpdGluZ09mZnNldCgpIC0gc3RhcnRPZmZz
ZXQgPiAwKSB7CiAgICAgICAgICAgICBpZiAoc3RhcnROb2RlLT5pc1RleHROb2RlKCkpIHsKICAg
ICAgICAgICAgICAgICAvLyBpbiBhIHRleHQgbm9kZSB0aGF0IG5lZWRzIHRvIGJlIHRyaW1tZWQK
LSAgICAgICAgICAgICAgICBUZXh0KiB0ZXh0ID0gc3RhdGljX2Nhc3Q8VGV4dCo+KHN0YXJ0Tm9k
ZSk7CisgICAgICAgICAgICAgICAgVGV4dCogdGV4dCA9IHRvVGV4dChzdGFydE5vZGUpOwogICAg
ICAgICAgICAgICAgIGRlbGV0ZVRleHRGcm9tTm9kZSh0ZXh0LCBzdGFydE9mZnNldCwgbV9kb3du
c3RyZWFtRW5kLmRlcHJlY2F0ZWRFZGl0aW5nT2Zmc2V0KCkgLSBzdGFydE9mZnNldCk7CiAgICAg
ICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgIHJlbW92ZUNoaWxkcmVuSW5SYW5nZShz
dGFydE5vZGUsIHN0YXJ0T2Zmc2V0LCBtX2Rvd25zdHJlYW1FbmQuZGVwcmVjYXRlZEVkaXRpbmdP
ZmZzZXQoKSk7CkBAIC00NjEsMTQgKzQ2MSwxNCBAQCB2b2lkIERlbGV0ZVNlbGVjdGlvbkNvbW1h
bmQ6OmhhbmRsZUdlbmVyCiAgICAgICAgIGlmIChzdGFydE9mZnNldCA+IDApIHsKICAgICAgICAg
ICAgIGlmIChzdGFydE5vZGUtPmlzVGV4dE5vZGUoKSkgewogICAgICAgICAgICAgICAgIC8vIGlu
IGEgdGV4dCBub2RlIHRoYXQgbmVlZHMgdG8gYmUgdHJpbW1lZAotICAgICAgICAgICAgICAgIFRl
eHQgKnRleHQgPSBzdGF0aWNfY2FzdDxUZXh0ICo+KG5vZGUuZ2V0KCkpOworICAgICAgICAgICAg
ICAgIFRleHQqIHRleHQgPSB0b1RleHQobm9kZS5nZXQoKSk7CiAgICAgICAgICAgICAgICAgZGVs
ZXRlVGV4dEZyb21Ob2RlKHRleHQsIHN0YXJ0T2Zmc2V0LCB0ZXh0LT5sZW5ndGgoKSAtIHN0YXJ0
T2Zmc2V0KTsKICAgICAgICAgICAgICAgICBub2RlID0gbm9kZS0+dHJhdmVyc2VOZXh0Tm9kZSgp
OwogICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICBub2RlID0gc3RhcnROb2Rl
LT5jaGlsZE5vZGUoc3RhcnRPZmZzZXQpOwogICAgICAgICAgICAgfQogICAgICAgICB9IGVsc2Ug
aWYgKHN0YXJ0Tm9kZSA9PSBtX3Vwc3RyZWFtRW5kLmRlcHJlY2F0ZWROb2RlKCkgJiYgc3RhcnRO
b2RlLT5pc1RleHROb2RlKCkpIHsKLSAgICAgICAgICAgIFRleHQqIHRleHQgPSBzdGF0aWNfY2Fz
dDxUZXh0Kj4obV91cHN0cmVhbUVuZC5kZXByZWNhdGVkTm9kZSgpKTsKKyAgICAgICAgICAgIFRl
eHQqIHRleHQgPSB0b1RleHQobV91cHN0cmVhbUVuZC5kZXByZWNhdGVkTm9kZSgpKTsKICAgICAg
ICAgICAgIGRlbGV0ZVRleHRGcm9tTm9kZSh0ZXh0LCAwLCBtX3Vwc3RyZWFtRW5kLmRlcHJlY2F0
ZWRFZGl0aW5nT2Zmc2V0KCkpOwogICAgICAgICB9CiAgICAgICAgIApAQCAtNTAxLDcgKzUwMSw3
IEBAIHZvaWQgRGVsZXRlU2VsZWN0aW9uQ29tbWFuZDo6aGFuZGxlR2VuZXIKICAgICAgICAgICAg
IH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgaWYgKG1fZG93bnN0cmVhbUVuZC5kZXByZWNhdGVk
Tm9kZSgpLT5pc1RleHROb2RlKCkpIHsKICAgICAgICAgICAgICAgICAgICAgLy8gaW4gYSB0ZXh0
IG5vZGUgdGhhdCBuZWVkcyB0byBiZSB0cmltbWVkCi0gICAgICAgICAgICAgICAgICAgIFRleHQq
IHRleHQgPSBzdGF0aWNfY2FzdDxUZXh0Kj4obV9kb3duc3RyZWFtRW5kLmRlcHJlY2F0ZWROb2Rl
KCkpOworICAgICAgICAgICAgICAgICAgICBUZXh0KiB0ZXh0ID0gdG9UZXh0KG1fZG93bnN0cmVh
bUVuZC5kZXByZWNhdGVkTm9kZSgpKTsKICAgICAgICAgICAgICAgICAgICAgaWYgKG1fZG93bnN0
cmVhbUVuZC5kZXByZWNhdGVkRWRpdGluZ09mZnNldCgpID4gMCkgewogICAgICAgICAgICAgICAg
ICAgICAgICAgZGVsZXRlVGV4dEZyb21Ob2RlKHRleHQsIDAsIG1fZG93bnN0cmVhbUVuZC5kZXBy
ZWNhdGVkRWRpdGluZ09mZnNldCgpKTsKICAgICAgICAgICAgICAgICAgICAgfQpAQCAtNTMzLDEy
ICs1MzMsMTIgQEAgdm9pZCBEZWxldGVTZWxlY3Rpb25Db21tYW5kOjpmaXh1cFdoaXRlcwogICAg
IGRvY3VtZW50KCktPnVwZGF0ZUxheW91dElnbm9yZVBlbmRpbmdTdHlsZXNoZWV0cygpOwogICAg
IC8vIEZJWE1FOiBpc1JlbmRlcmVkQ2hhcmFjdGVyIHNob3VsZCBiZSByZW1vdmVkLCBhbmQgd2Ug
c2hvdWxkIHVzZSBWaXNpYmxlUG9zaXRpb246OmNoYXJhY3RlckFmdGVyIGFuZCBWaXNpYmxlUG9z
aXRpb246OmNoYXJhY3RlckJlZm9yZQogICAgIGlmIChtX2xlYWRpbmdXaGl0ZXNwYWNlLmlzTm90
TnVsbCgpICYmICFtX2xlYWRpbmdXaGl0ZXNwYWNlLmlzUmVuZGVyZWRDaGFyYWN0ZXIoKSAmJiBt
X2xlYWRpbmdXaGl0ZXNwYWNlLmRlcHJlY2F0ZWROb2RlKCktPmlzVGV4dE5vZGUoKSkgewotICAg
ICAgICBUZXh0KiB0ZXh0Tm9kZSA9IHN0YXRpY19jYXN0PFRleHQqPihtX2xlYWRpbmdXaGl0ZXNw
YWNlLmRlcHJlY2F0ZWROb2RlKCkpOworICAgICAgICBUZXh0KiB0ZXh0Tm9kZSA9IHRvVGV4dCht
X2xlYWRpbmdXaGl0ZXNwYWNlLmRlcHJlY2F0ZWROb2RlKCkpOwogICAgICAgICBBU1NFUlQoIXRl
eHROb2RlLT5yZW5kZXJlcigpIHx8IHRleHROb2RlLT5yZW5kZXJlcigpLT5zdHlsZSgpLT5jb2xs
YXBzZVdoaXRlU3BhY2UoKSk7CiAgICAgICAgIHJlcGxhY2VUZXh0SW5Ob2RlUHJlc2VydmluZ01h
cmtlcnModGV4dE5vZGUsIG1fbGVhZGluZ1doaXRlc3BhY2UuZGVwcmVjYXRlZEVkaXRpbmdPZmZz
ZXQoKSwgMSwgbm9uQnJlYWtpbmdTcGFjZVN0cmluZygpKTsKICAgICB9CiAgICAgaWYgKG1fdHJh
aWxpbmdXaGl0ZXNwYWNlLmlzTm90TnVsbCgpICYmICFtX3RyYWlsaW5nV2hpdGVzcGFjZS5pc1Jl
bmRlcmVkQ2hhcmFjdGVyKCkgJiYgbV90cmFpbGluZ1doaXRlc3BhY2UuZGVwcmVjYXRlZE5vZGUo
KS0+aXNUZXh0Tm9kZSgpKSB7Ci0gICAgICAgIFRleHQqIHRleHROb2RlID0gc3RhdGljX2Nhc3Q8
VGV4dCo+KG1fdHJhaWxpbmdXaGl0ZXNwYWNlLmRlcHJlY2F0ZWROb2RlKCkpOworICAgICAgICBU
ZXh0KiB0ZXh0Tm9kZSA9IHRvVGV4dChtX3RyYWlsaW5nV2hpdGVzcGFjZS5kZXByZWNhdGVkTm9k
ZSgpKTsKICAgICAgICAgQVNTRVJUKCF0ZXh0Tm9kZS0+cmVuZGVyZXIoKSB8fHRleHROb2RlLT5y
ZW5kZXJlcigpLT5zdHlsZSgpLT5jb2xsYXBzZVdoaXRlU3BhY2UoKSk7CiAgICAgICAgIHJlcGxh
Y2VUZXh0SW5Ob2RlUHJlc2VydmluZ01hcmtlcnModGV4dE5vZGUsIG1fdHJhaWxpbmdXaGl0ZXNw
YWNlLmRlcHJlY2F0ZWRFZGl0aW5nT2Zmc2V0KCksIDEsIG5vbkJyZWFraW5nU3BhY2VTdHJpbmco
KSk7CiAgICAgfQpJbmRleDogU291cmNlL1dlYkNvcmUvZWRpdGluZy9FZGl0b3IuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRWRpdG9yLmNwcAkocmV2aXNpb24gMTA3
NDM0KQorKysgU291cmNlL1dlYkNvcmUvZWRpdGluZy9FZGl0b3IuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0xNTAyLDcgKzE1MDIsNyBAQCB2b2lkIEVkaXRvcjo6c2V0Q29tcG9zaXRpb24oY29uc3Qg
U3RyaW5nCiAgICAgICAgIHVuc2lnbmVkIGV4dGVudE9mZnNldCA9IGV4dGVudC5kZXByZWNhdGVk
RWRpdGluZ09mZnNldCgpOwogCiAgICAgICAgIGlmIChiYXNlTm9kZSAmJiBiYXNlTm9kZSA9PSBl
eHRlbnROb2RlICYmIGJhc2VOb2RlLT5pc1RleHROb2RlKCkgJiYgYmFzZU9mZnNldCArIHRleHQu
bGVuZ3RoKCkgPT0gZXh0ZW50T2Zmc2V0KSB7Ci0gICAgICAgICAgICBtX2NvbXBvc2l0aW9uTm9k
ZSA9IHN0YXRpY19jYXN0PFRleHQqPihiYXNlTm9kZSk7CisgICAgICAgICAgICBtX2NvbXBvc2l0
aW9uTm9kZSA9IHRvVGV4dChiYXNlTm9kZSk7CiAgICAgICAgICAgICBtX2NvbXBvc2l0aW9uU3Rh
cnQgPSBiYXNlT2Zmc2V0OwogICAgICAgICAgICAgbV9jb21wb3NpdGlvbkVuZCA9IGV4dGVudE9m
ZnNldDsKICAgICAgICAgICAgIG1fY3VzdG9tQ29tcG9zaXRpb25VbmRlcmxpbmVzID0gdW5kZXJs
aW5lczsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvSW5zZXJ0TGluZUJyZWFrQ29tbWFu
ZC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZWRpdGluZy9JbnNlcnRMaW5lQnJl
YWtDb21tYW5kLmNwcAkocmV2aXNpb24gMTA3NDM0KQorKysgU291cmNlL1dlYkNvcmUvZWRpdGlu
Zy9JbnNlcnRMaW5lQnJlYWtDb21tYW5kLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTM3LDcgKzEz
Nyw3IEBAIHZvaWQgSW5zZXJ0TGluZUJyZWFrQ29tbWFuZDo6ZG9BcHBseSgpCiAgICAgICAgIHNl
dEVuZGluZ1NlbGVjdGlvbihWaXNpYmxlU2VsZWN0aW9uKHBvc2l0aW9uSW5QYXJlbnRBZnRlck5v
ZGUobm9kZVRvSW5zZXJ0LmdldCgpKSwgRE9XTlNUUkVBTSwgZW5kaW5nU2VsZWN0aW9uKCkuaXNE
aXJlY3Rpb25hbCgpKSk7CiAgICAgfSBlbHNlIGlmIChwb3MuZGVwcmVjYXRlZE5vZGUoKS0+aXNU
ZXh0Tm9kZSgpKSB7CiAgICAgICAgIC8vIFNwbGl0IGEgdGV4dCBub2RlCi0gICAgICAgIFRleHQq
IHRleHROb2RlID0gc3RhdGljX2Nhc3Q8VGV4dCo+KHBvcy5kZXByZWNhdGVkTm9kZSgpKTsKKyAg
ICAgICAgVGV4dCogdGV4dE5vZGUgPSB0b1RleHQocG9zLmRlcHJlY2F0ZWROb2RlKCkpOwogICAg
ICAgICBzcGxpdFRleHROb2RlKHRleHROb2RlLCBwb3MuZGVwcmVjYXRlZEVkaXRpbmdPZmZzZXQo
KSk7CiAgICAgICAgIGluc2VydE5vZGVCZWZvcmUobm9kZVRvSW5zZXJ0LCB0ZXh0Tm9kZSk7CiAg
ICAgICAgIFBvc2l0aW9uIGVuZGluZ1Bvc2l0aW9uID0gZmlyc3RQb3NpdGlvbkluTm9kZSh0ZXh0
Tm9kZSk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0luc2VydFBhcmFncmFwaFNlcGFy
YXRvckNvbW1hbmQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvSW5z
ZXJ0UGFyYWdyYXBoU2VwYXJhdG9yQ29tbWFuZC5jcHAJKHJldmlzaW9uIDEwNzQzNCkKKysrIFNv
dXJjZS9XZWJDb3JlL2VkaXRpbmcvSW5zZXJ0UGFyYWdyYXBoU2VwYXJhdG9yQ29tbWFuZC5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTMyMiwxNCArMzIyLDE0IEBAIHZvaWQgSW5zZXJ0UGFyYWdyYXBo
U2VwYXJhdG9yQ29tbWFuZDo6ZG8KICAgICAvLyBGSVhNRTogbGVhZGluZ1doaXRlc3BhY2VQb3Np
dGlvbiBpcyByZXR1cm5pbmcgdGhlIHBvc2l0aW9uIGJlZm9yZSBwcmVzZXJ2ZWQgbmV3bGluZXMg
Zm9yIHBvc2l0aW9ucwogICAgIC8vIGFmdGVyIHRoZSBwcmVzZXJ2ZWQgbmV3bGluZSwgY2F1c2lu
ZyB0aGUgbmV3bGluZSB0byBiZSB0dXJuZWQgaW50byBhIG5ic3AuCiAgICAgaWYgKGxlYWRpbmdX
aGl0ZXNwYWNlLmlzTm90TnVsbCgpICYmIGxlYWRpbmdXaGl0ZXNwYWNlLmRlcHJlY2F0ZWROb2Rl
KCktPmlzVGV4dE5vZGUoKSkgewotICAgICAgICBUZXh0KiB0ZXh0Tm9kZSA9IHN0YXRpY19jYXN0
PFRleHQqPihsZWFkaW5nV2hpdGVzcGFjZS5kZXByZWNhdGVkTm9kZSgpKTsKKyAgICAgICAgVGV4
dCogdGV4dE5vZGUgPSB0b1RleHQobGVhZGluZ1doaXRlc3BhY2UuZGVwcmVjYXRlZE5vZGUoKSk7
CiAgICAgICAgIEFTU0VSVCghdGV4dE5vZGUtPnJlbmRlcmVyKCkgfHwgdGV4dE5vZGUtPnJlbmRl
cmVyKCktPnN0eWxlKCktPmNvbGxhcHNlV2hpdGVTcGFjZSgpKTsKICAgICAgICAgcmVwbGFjZVRl
eHRJbk5vZGVQcmVzZXJ2aW5nTWFya2Vycyh0ZXh0Tm9kZSwgbGVhZGluZ1doaXRlc3BhY2UuZGVw
cmVjYXRlZEVkaXRpbmdPZmZzZXQoKSwgMSwgbm9uQnJlYWtpbmdTcGFjZVN0cmluZygpKTsKICAg
ICB9CiAgICAgCiAgICAgLy8gU3BsaXQgYXQgcG9zIGlmIGluIHRoZSBtaWRkbGUgb2YgYSB0ZXh0
IG5vZGUuCiAgICAgaWYgKGluc2VydGlvblBvc2l0aW9uLmRlcHJlY2F0ZWROb2RlKCktPmlzVGV4
dE5vZGUoKSkgewotICAgICAgICBUZXh0KiB0ZXh0Tm9kZSA9IHN0YXRpY19jYXN0PFRleHQqPihp
bnNlcnRpb25Qb3NpdGlvbi5kZXByZWNhdGVkTm9kZSgpKTsKKyAgICAgICAgVGV4dCogdGV4dE5v
ZGUgPSB0b1RleHQoaW5zZXJ0aW9uUG9zaXRpb24uZGVwcmVjYXRlZE5vZGUoKSk7CiAgICAgICAg
IGJvb2wgYXRFbmQgPSAodW5zaWduZWQpaW5zZXJ0aW9uUG9zaXRpb24uZGVwcmVjYXRlZEVkaXRp
bmdPZmZzZXQoKSA+PSB0ZXh0Tm9kZS0+bGVuZ3RoKCk7CiAgICAgICAgIGlmIChpbnNlcnRpb25Q
b3NpdGlvbi5kZXByZWNhdGVkRWRpdGluZ09mZnNldCgpID4gMCAmJiAhYXRFbmQpIHsKICAgICAg
ICAgICAgIHNwbGl0VGV4dE5vZGUodGV4dE5vZGUsIGluc2VydGlvblBvc2l0aW9uLmRlcHJlY2F0
ZWRFZGl0aW5nT2Zmc2V0KCkpOwpAQCAtMzg5LDcgKzM4OSw3IEBAIHZvaWQgSW5zZXJ0UGFyYWdy
YXBoU2VwYXJhdG9yQ29tbWFuZDo6ZG8KICAgICAgICAgICAgIEFTU0VSVCghaW5zZXJ0aW9uUG9z
aXRpb24uZGVwcmVjYXRlZE5vZGUoKS0+cmVuZGVyZXIoKSB8fCBpbnNlcnRpb25Qb3NpdGlvbi5k
ZXByZWNhdGVkTm9kZSgpLT5yZW5kZXJlcigpLT5zdHlsZSgpLT5jb2xsYXBzZVdoaXRlU3BhY2Uo
KSk7CiAgICAgICAgICAgICBkZWxldGVJbnNpZ25pZmljYW50VGV4dERvd25zdHJlYW0oaW5zZXJ0
aW9uUG9zaXRpb24pOwogICAgICAgICAgICAgaWYgKGluc2VydGlvblBvc2l0aW9uLmRlcHJlY2F0
ZWROb2RlKCktPmlzVGV4dE5vZGUoKSkKLSAgICAgICAgICAgICAgICBpbnNlcnRUZXh0SW50b05v
ZGUoc3RhdGljX2Nhc3Q8VGV4dCo+KGluc2VydGlvblBvc2l0aW9uLmRlcHJlY2F0ZWROb2RlKCkp
LCAwLCBub25CcmVha2luZ1NwYWNlU3RyaW5nKCkpOworICAgICAgICAgICAgICAgIGluc2VydFRl
eHRJbnRvTm9kZSh0b1RleHQoaW5zZXJ0aW9uUG9zaXRpb24uZGVwcmVjYXRlZE5vZGUoKSksIDAs
IG5vbkJyZWFraW5nU3BhY2VTdHJpbmcoKSk7CiAgICAgICAgIH0KICAgICB9CiAKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL2VkaXRpbmcvSW5zZXJ0VGV4dENvbW1hbmQuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvSW5zZXJ0VGV4dENvbW1hbmQuY3BwCShyZXZpc2lvbiAx
MDc0MzQpCisrKyBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0luc2VydFRleHRDb21tYW5kLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMjA5LDcgKzIwOSw3IEBAIFBvc2l0aW9uIEluc2VydFRleHRDb21t
YW5kOjppbnNlcnRUYWIoY28KIAogICAgIC8vIGtlZXAgdGFicyBjb2FsZXNjZWQgaW4gdGFiIHNw
YW4KICAgICBpZiAoaXNUYWJTcGFuVGV4dE5vZGUobm9kZSkpIHsKLSAgICAgICAgUmVmUHRyPFRl
eHQ+IHRleHROb2RlID0gc3RhdGljX2Nhc3Q8VGV4dCo+KG5vZGUpOworICAgICAgICBSZWZQdHI8
VGV4dD4gdGV4dE5vZGUgPSB0b1RleHQobm9kZSk7CiAgICAgICAgIGluc2VydFRleHRJbnRvTm9k
ZSh0ZXh0Tm9kZSwgb2Zmc2V0LCAiXHQiKTsKICAgICAgICAgcmV0dXJuIFBvc2l0aW9uKHRleHRO
b2RlLnJlbGVhc2UoKSwgb2Zmc2V0ICsgMSk7CiAgICAgfQpAQCAtMjIxLDcgKzIyMSw3IEBAIFBv
c2l0aW9uIEluc2VydFRleHRDb21tYW5kOjppbnNlcnRUYWIoY28KICAgICBpZiAoIW5vZGUtPmlz
VGV4dE5vZGUoKSkgewogICAgICAgICBpbnNlcnROb2RlQXQoc3Bhbk5vZGUuZ2V0KCksIGluc2Vy
dFBvcyk7CiAgICAgfSBlbHNlIHsKLSAgICAgICAgUmVmUHRyPFRleHQ+IHRleHROb2RlID0gc3Rh
dGljX2Nhc3Q8VGV4dCo+KG5vZGUpOworICAgICAgICBSZWZQdHI8VGV4dD4gdGV4dE5vZGUgPSB0
b1RleHQobm9kZSk7CiAgICAgICAgIGlmIChvZmZzZXQgPj0gdGV4dE5vZGUtPmxlbmd0aCgpKQog
ICAgICAgICAgICAgaW5zZXJ0Tm9kZUFmdGVyKHNwYW5Ob2RlLCB0ZXh0Tm9kZS5yZWxlYXNlKCkp
OwogICAgICAgICBlbHNlIHsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvTWFya3VwQWNj
dW11bGF0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvTWFya3Vw
QWNjdW11bGF0b3IuY3BwCShyZXZpc2lvbiAxMDc0MzQpCisrKyBTb3VyY2UvV2ViQ29yZS9lZGl0
aW5nL01hcmt1cEFjY3VtdWxhdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDE5LDcgKzQxOSw3
IEBAIHZvaWQgTWFya3VwQWNjdW11bGF0b3I6OmFwcGVuZFN0YXJ0TWFya3UKIAogICAgIHN3aXRj
aCAobm9kZS0+bm9kZVR5cGUoKSkgewogICAgIGNhc2UgTm9kZTo6VEVYVF9OT0RFOgotICAgICAg
ICBhcHBlbmRUZXh0KHJlc3VsdCwgc3RhdGljX2Nhc3Q8VGV4dCo+KGNvbnN0X2Nhc3Q8Tm9kZSo+
KG5vZGUpKSk7CisgICAgICAgIGFwcGVuZFRleHQocmVzdWx0LCB0b1RleHQoY29uc3RfY2FzdDxO
b2RlKj4obm9kZSkpKTsKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBOb2RlOjpDT01NRU5UX05P
REU6CiAgICAgICAgIGFwcGVuZENvbW1lbnQocmVzdWx0LCBzdGF0aWNfY2FzdDxjb25zdCBDb21t
ZW50Kj4obm9kZSktPmRhdGEoKSk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1JlcGxh
Y2VTZWxlY3Rpb25Db21tYW5kLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9lZGl0
aW5nL1JlcGxhY2VTZWxlY3Rpb25Db21tYW5kLmNwcAkocmV2aXNpb24gMTA3NDM0KQorKysgU291
cmNlL1dlYkNvcmUvZWRpdGluZy9SZXBsYWNlU2VsZWN0aW9uQ29tbWFuZC5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTU5Nyw3ICs1OTcsNyBAQCB2b2lkIFJlcGxhY2VTZWxlY3Rpb25Db21tYW5kOjpy
ZW1vdmVVbnJlCiAgICAgZG9jdW1lbnQoKS0+dXBkYXRlTGF5b3V0SWdub3JlUGVuZGluZ1N0eWxl
c2hlZXRzKCk7CiAKICAgICBOb2RlKiBsYXN0TGVhZkluc2VydGVkID0gaW5zZXJ0ZWROb2Rlcy5s
YXN0TGVhZkluc2VydGVkKCk7Ci0gICAgaWYgKGxhc3RMZWFmSW5zZXJ0ZWQgJiYgbGFzdExlYWZJ
bnNlcnRlZC0+aXNUZXh0Tm9kZSgpICYmICFub2RlSGFzVmlzaWJsZVJlbmRlclRleHQoc3RhdGlj
X2Nhc3Q8VGV4dCo+KGxhc3RMZWFmSW5zZXJ0ZWQpKQorICAgIGlmIChsYXN0TGVhZkluc2VydGVk
ICYmIGxhc3RMZWFmSW5zZXJ0ZWQtPmlzVGV4dE5vZGUoKSAmJiAhbm9kZUhhc1Zpc2libGVSZW5k
ZXJUZXh0KHRvVGV4dChsYXN0TGVhZkluc2VydGVkKSkKICAgICAgICAgJiYgIWVuY2xvc2luZ05v
ZGVXaXRoVGFnKGZpcnN0UG9zaXRpb25Jbk9yQmVmb3JlTm9kZShsYXN0TGVhZkluc2VydGVkKSwg
c2VsZWN0VGFnKQogICAgICAgICAmJiAhZW5jbG9zaW5nTm9kZVdpdGhUYWcoZmlyc3RQb3NpdGlv
bkluT3JCZWZvcmVOb2RlKGxhc3RMZWFmSW5zZXJ0ZWQpLCBzY3JpcHRUYWcpKSB7CiAgICAgICAg
IGluc2VydGVkTm9kZXMud2lsbFJlbW92ZU5vZGUobGFzdExlYWZJbnNlcnRlZCk7CkBAIC02MDgs
NyArNjA4LDcgQEAgdm9pZCBSZXBsYWNlU2VsZWN0aW9uQ29tbWFuZDo6cmVtb3ZlVW5yZQogICAg
IC8vIGl0IGlzIGEgdG9wIGxldmVsIG5vZGUgaW4gdGhlIGZyYWdtZW50IGFuZCB0aGUgdXNlciBj
YW4ndCBpbnNlcnQgaW50byB0aG9zZSBlbGVtZW50cy4KICAgICBOb2RlKiBmaXJzdE5vZGVJbnNl
cnRlZCA9IGluc2VydGVkTm9kZXMuZmlyc3ROb2RlSW5zZXJ0ZWQoKTsKICAgICBsYXN0TGVhZklu
c2VydGVkID0gaW5zZXJ0ZWROb2Rlcy5sYXN0TGVhZkluc2VydGVkKCk7Ci0gICAgaWYgKGZpcnN0
Tm9kZUluc2VydGVkICYmIGZpcnN0Tm9kZUluc2VydGVkLT5pc1RleHROb2RlKCkgJiYgIW5vZGVI
YXNWaXNpYmxlUmVuZGVyVGV4dChzdGF0aWNfY2FzdDxUZXh0Kj4oZmlyc3ROb2RlSW5zZXJ0ZWQp
KSkgeworICAgIGlmIChmaXJzdE5vZGVJbnNlcnRlZCAmJiBmaXJzdE5vZGVJbnNlcnRlZC0+aXNU
ZXh0Tm9kZSgpICYmICFub2RlSGFzVmlzaWJsZVJlbmRlclRleHQodG9UZXh0KGZpcnN0Tm9kZUlu
c2VydGVkKSkpIHsKICAgICAgICAgaW5zZXJ0ZWROb2Rlcy53aWxsUmVtb3ZlTm9kZShmaXJzdE5v
ZGVJbnNlcnRlZCk7CiAgICAgICAgIHJlbW92ZU5vZGUoZmlyc3ROb2RlSW5zZXJ0ZWQpOwogICAg
IH0KQEAgLTExODksNyArMTE4OSw3IEBAIHZvaWQgUmVwbGFjZVNlbGVjdGlvbkNvbW1hbmQ6OmFk
ZFNwYWNlc0YKICAgICBpZiAobmVlZHNUcmFpbGluZ1NwYWNlICYmIGVuZE5vZGUpIHsKICAgICAg
ICAgYm9vbCBjb2xsYXBzZVdoaXRlU3BhY2UgPSAhZW5kTm9kZS0+cmVuZGVyZXIoKSB8fCBlbmRO
b2RlLT5yZW5kZXJlcigpLT5zdHlsZSgpLT5jb2xsYXBzZVdoaXRlU3BhY2UoKTsKICAgICAgICAg
aWYgKGVuZE5vZGUtPmlzVGV4dE5vZGUoKSkgewotICAgICAgICAgICAgVGV4dCogdGV4dCA9IHN0
YXRpY19jYXN0PFRleHQqPihlbmROb2RlKTsKKyAgICAgICAgICAgIFRleHQqIHRleHQgPSB0b1Rl
eHQoZW5kTm9kZSk7CiAgICAgICAgICAgICAvLyBGSVhNRTogd2Ugc2hvdWxkbid0IGFsd2F5cyBi
ZSBpbnNlcnRpbmcgdGhlIHNwYWNlIGF0IHRoZSBlbmQKICAgICAgICAgICAgIGluc2VydFRleHRJ
bnRvTm9kZSh0ZXh0LCB0ZXh0LT5sZW5ndGgoKSwgY29sbGFwc2VXaGl0ZVNwYWNlID8gbm9uQnJl
YWtpbmdTcGFjZVN0cmluZygpIDogIiAiKTsKICAgICAgICAgICAgIGlmIChtX2VuZE9mSW5zZXJ0
ZWRDb250ZW50LmNvbnRhaW5lck5vZGUoKSA9PSB0ZXh0KQpAQCAtMTIxMyw3ICsxMjEzLDcgQEAg
dm9pZCBSZXBsYWNlU2VsZWN0aW9uQ29tbWFuZDo6YWRkU3BhY2VzRgogICAgIGlmIChuZWVkc0xl
YWRpbmdTcGFjZSAmJiBzdGFydE5vZGUpIHsKICAgICAgICAgYm9vbCBjb2xsYXBzZVdoaXRlU3Bh
Y2UgPSAhc3RhcnROb2RlLT5yZW5kZXJlcigpIHx8IHN0YXJ0Tm9kZS0+cmVuZGVyZXIoKS0+c3R5
bGUoKS0+Y29sbGFwc2VXaGl0ZVNwYWNlKCk7CiAgICAgICAgIGlmIChzdGFydE5vZGUtPmlzVGV4
dE5vZGUoKSkgewotICAgICAgICAgICAgaW5zZXJ0VGV4dEludG9Ob2RlKHN0YXRpY19jYXN0PFRl
eHQqPihzdGFydE5vZGUpLCBzdGFydE9mZnNldCwgY29sbGFwc2VXaGl0ZVNwYWNlID8gbm9uQnJl
YWtpbmdTcGFjZVN0cmluZygpIDogIiAiKTsKKyAgICAgICAgICAgIGluc2VydFRleHRJbnRvTm9k
ZSh0b1RleHQoc3RhcnROb2RlKSwgc3RhcnRPZmZzZXQsIGNvbGxhcHNlV2hpdGVTcGFjZSA/IG5v
bkJyZWFraW5nU3BhY2VTdHJpbmcoKSA6ICIgIik7CiAgICAgICAgICAgICBpZiAobV9lbmRPZklu
c2VydGVkQ29udGVudC5jb250YWluZXJOb2RlKCkgPT0gc3RhcnROb2RlICYmIG1fZW5kT2ZJbnNl
cnRlZENvbnRlbnQub2Zmc2V0SW5Db250YWluZXJOb2RlKCkpCiAgICAgICAgICAgICAgICAgbV9l
bmRPZkluc2VydGVkQ29udGVudC5tb3ZlVG9PZmZzZXQobV9lbmRPZkluc2VydGVkQ29udGVudC5v
ZmZzZXRJbkNvbnRhaW5lck5vZGUoKSArIDEpOwogICAgICAgICB9IGVsc2UgewpAQCAtMTI3OSw3
ICsxMjc5LDcgQEAgTm9kZSogUmVwbGFjZVNlbGVjdGlvbkNvbW1hbmQ6Omluc2VydEFzTAogICAg
IGlmIChpc01pZGRsZSkgewogICAgICAgICBpbnQgdGV4dE5vZGVPZmZzZXQgPSBpbnNlcnRQb3Mu
b2Zmc2V0SW5Db250YWluZXJOb2RlKCk7CiAgICAgICAgIGlmIChpbnNlcnRQb3MuZGVwcmVjYXRl
ZE5vZGUoKS0+aXNUZXh0Tm9kZSgpICYmIHRleHROb2RlT2Zmc2V0ID4gMCkKLSAgICAgICAgICAg
IHNwbGl0VGV4dE5vZGUoc3RhdGljX2Nhc3Q8VGV4dCo+KGluc2VydFBvcy5kZXByZWNhdGVkTm9k
ZSgpKSwgdGV4dE5vZGVPZmZzZXQpOworICAgICAgICAgICAgc3BsaXRUZXh0Tm9kZSh0b1RleHQo
aW5zZXJ0UG9zLmRlcHJlY2F0ZWROb2RlKCkpLCB0ZXh0Tm9kZU9mZnNldCk7CiAgICAgICAgIHNw
bGl0VHJlZVRvTm9kZShpbnNlcnRQb3MuZGVwcmVjYXRlZE5vZGUoKSwgbGFzdE5vZGUsIHRydWUp
OwogICAgIH0KIApAQCAtMTMzMyw3ICsxMzMzLDcgQEAgYm9vbCBSZXBsYWNlU2VsZWN0aW9uQ29t
bWFuZDo6cGVyZm9ybVRyaQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICBOb2RlKiBub2Rl
QWZ0ZXJJbnNlcnRpb25Qb3MgPSBlbmRpbmdTZWxlY3Rpb24oKS5lbmQoKS5kb3duc3RyZWFtKCku
YW5jaG9yTm9kZSgpOwotICAgIFRleHQqIHRleHROb2RlID0gc3RhdGljX2Nhc3Q8VGV4dCo+KGZy
YWdtZW50LmZpcnN0Q2hpbGQoKSk7CisgICAgVGV4dCogdGV4dE5vZGUgPSB0b1RleHQoZnJhZ21l
bnQuZmlyc3RDaGlsZCgpKTsKICAgICAvLyBPdXIgZnJhZ21lbnQgY3JlYXRpb24gY29kZSBoYW5k
bGVzIHRhYnMsIHNwYWNlcywgYW5kIG5ld2xpbmVzLCBzbyB3ZSBkb24ndCBoYXZlIHRvIHdvcnJ5
IGFib3V0IHRob3NlIGhlcmUuCiAKICAgICBQb3NpdGlvbiBzdGFydCA9IGVuZGluZ1NlbGVjdGlv
bigpLnN0YXJ0KCk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL2h0bWxlZGl0aW5nLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL2h0bWxlZGl0aW5nLmNwcAko
cmV2aXNpb24gMTA3NDM0KQorKysgU291cmNlL1dlYkNvcmUvZWRpdGluZy9odG1sZWRpdGluZy5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTEwMzMsNyArMTAzMyw3IEBAIGJvb2wgbGluZUJyZWFrRXhp
c3RzQXRQb3NpdGlvbihjb25zdCBQb3MKICAgICBpZiAoIXBvc2l0aW9uLmFuY2hvck5vZGUoKS0+
aXNUZXh0Tm9kZSgpIHx8ICFwb3NpdGlvbi5hbmNob3JOb2RlKCktPnJlbmRlcmVyKCktPnN0eWxl
KCktPnByZXNlcnZlTmV3bGluZSgpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgCi0gICAg
VGV4dCogdGV4dE5vZGUgPSBzdGF0aWNfY2FzdDxUZXh0Kj4ocG9zaXRpb24uYW5jaG9yTm9kZSgp
KTsKKyAgICBUZXh0KiB0ZXh0Tm9kZSA9IHRvVGV4dChwb3NpdGlvbi5hbmNob3JOb2RlKCkpOwog
ICAgIHVuc2lnbmVkIG9mZnNldCA9IHBvc2l0aW9uLm9mZnNldEluQ29udGFpbmVyTm9kZSgpOwog
ICAgIHJldHVybiBvZmZzZXQgPCB0ZXh0Tm9kZS0+bGVuZ3RoKCkgJiYgdGV4dE5vZGUtPmRhdGEo
KVtvZmZzZXRdID09ICdcbic7CiB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL3Zpc2li
bGVfdW5pdHMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvdmlzaWJs
ZV91bml0cy5jcHAJKHJldmlzaW9uIDEwNzQzNCkKKysrIFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcv
dmlzaWJsZV91bml0cy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM2MSw3ICszNjEsNyBAQCBzdGF0
aWMgVmlzaWJsZVBvc2l0aW9uIHN0YXJ0UG9zaXRpb25Gb3JMCiAgICAgICAgIH0KICAgICB9CiAK
LSAgICByZXR1cm4gc3RhcnROb2RlLT5pc1RleHROb2RlKCkgPyBQb3NpdGlvbihzdGF0aWNfY2Fz
dDxUZXh0Kj4oc3RhcnROb2RlKSwgdG9JbmxpbmVUZXh0Qm94KHN0YXJ0Qm94KS0+c3RhcnQoKSkK
KyAgICByZXR1cm4gc3RhcnROb2RlLT5pc1RleHROb2RlKCkgPyBQb3NpdGlvbih0b1RleHQoc3Rh
cnROb2RlKSwgdG9JbmxpbmVUZXh0Qm94KHN0YXJ0Qm94KS0+c3RhcnQoKSkKICAgICAgICAgOiBw
b3NpdGlvbkJlZm9yZU5vZGUoc3RhcnROb2RlKTsKIH0KIApAQCAtNDQxLDcgKzQ0MSw3IEBAIHN0
YXRpYyBWaXNpYmxlUG9zaXRpb24gZW5kUG9zaXRpb25Gb3JMaW4KICAgICAgICAgaW50IGVuZE9m
ZnNldCA9IGVuZFRleHRCb3gtPnN0YXJ0KCk7CiAgICAgICAgIGlmICghZW5kVGV4dEJveC0+aXNM
aW5lQnJlYWsoKSkKICAgICAgICAgICAgIGVuZE9mZnNldCArPSBlbmRUZXh0Qm94LT5sZW4oKTsK
LSAgICAgICAgcG9zID0gUG9zaXRpb24oc3RhdGljX2Nhc3Q8VGV4dCo+KGVuZE5vZGUpLCBlbmRP
ZmZzZXQpOworICAgICAgICBwb3MgPSBQb3NpdGlvbih0b1RleHQoZW5kTm9kZSksIGVuZE9mZnNl
dCk7CiAgICAgfSBlbHNlCiAgICAgICAgIHBvcyA9IHBvc2l0aW9uQWZ0ZXJOb2RlKGVuZE5vZGUp
OwogICAgIApAQCAtODM0LDcgKzgzNCw3IEBAIFZpc2libGVQb3NpdGlvbiBzdGFydE9mUGFyYWdy
YXBoKGNvbnN0IFYKICAgICAgICAgICAgICAgICAgICAgaSA9IG1heCgwLCBvKTsKICAgICAgICAg
ICAgICAgICB3aGlsZSAoLS1pID49IDApIHsKICAgICAgICAgICAgICAgICAgICAgaWYgKGNoYXJz
W2ldID09ICdcbicpCi0gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gVmlzaWJsZVBvc2l0
aW9uKFBvc2l0aW9uKHN0YXRpY19jYXN0PFRleHQqPihuKSwgaSArIDEpLCBET1dOU1RSRUFNKTsK
KyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBWaXNpYmxlUG9zaXRpb24oUG9zaXRpb24o
dG9UZXh0KG4pLCBpICsgMSksIERPV05TVFJFQU0pOwogICAgICAgICAgICAgICAgIH0KICAgICAg
ICAgICAgIH0KICAgICAgICAgICAgIG5vZGUgPSBuOwpAQCAtOTEwLDcgKzkxMCw3IEBAIFZpc2li
bGVQb3NpdGlvbiBlbmRPZlBhcmFncmFwaChjb25zdCBWaXMKICAgICAgICAgICAgICAgICBpbnQg
byA9IG4gPT0gc3RhcnROb2RlID8gb2Zmc2V0IDogMDsKICAgICAgICAgICAgICAgICBmb3IgKGlu
dCBpID0gbzsgaSA8IGxlbmd0aDsgKytpKSB7CiAgICAgICAgICAgICAgICAgICAgIGlmIChjaGFy
c1tpXSA9PSAnXG4nKQotICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFZpc2libGVQb3Np
dGlvbihQb3NpdGlvbihzdGF0aWNfY2FzdDxUZXh0Kj4obiksIGkpLCBET1dOU1RSRUFNKTsKKyAg
ICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBWaXNpYmxlUG9zaXRpb24oUG9zaXRpb24odG9U
ZXh0KG4pLCBpKSwgRE9XTlNUUkVBTSk7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAg
fQogICAgICAgICAgICAgbm9kZSA9IG47CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxF
bGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxFbGVtZW50
LmNwcAkocmV2aXNpb24gMTA3NDM0KQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MRWxlbWVu
dC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM2NSw3ICszNjUsNyBAQCBzdGF0aWMgdm9pZCByZXBs
YWNlQ2hpbGRyZW5XaXRoRnJhZ21lbnQoCiAgICAgfQogCiAgICAgaWYgKGhhc09uZVRleHRDaGls
ZChlbGVtZW50KSAmJiBoYXNPbmVUZXh0Q2hpbGQoZnJhZ21lbnQuZ2V0KCkpKSB7Ci0gICAgICAg
IHN0YXRpY19jYXN0PFRleHQqPihlbGVtZW50LT5maXJzdENoaWxkKCkpLT5zZXREYXRhKHN0YXRp
Y19jYXN0PFRleHQqPihmcmFnbWVudC0+Zmlyc3RDaGlsZCgpKS0+ZGF0YSgpLCBlYyk7CisgICAg
ICAgIHRvVGV4dChlbGVtZW50LT5maXJzdENoaWxkKCkpLT5zZXREYXRhKHRvVGV4dChmcmFnbWVu
dC0+Zmlyc3RDaGlsZCgpKS0+ZGF0YSgpLCBlYyk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAK
QEAgLTM4NSw3ICszODUsNyBAQCBzdGF0aWMgdm9pZCByZXBsYWNlQ2hpbGRyZW5XaXRoVGV4dChI
VE1MCiAjZW5kaWYKIAogICAgIGlmIChoYXNPbmVUZXh0Q2hpbGQoZWxlbWVudCkpIHsKLSAgICAg
ICAgc3RhdGljX2Nhc3Q8VGV4dCo+KGVsZW1lbnQtPmZpcnN0Q2hpbGQoKSktPnNldERhdGEodGV4
dCwgZWMpOworICAgICAgICB0b1RleHQoZWxlbWVudC0+Zmlyc3RDaGlsZCgpKS0+c2V0RGF0YSh0
ZXh0LCBlYyk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKQEAgLTQzNCw4ICs0MzQsOCBAQCBz
dGF0aWMgdm9pZCBtZXJnZVdpdGhOZXh0VGV4dE5vZGUoUGFzc1JlCiAgICAgaWYgKCFuZXh0IHx8
ICFuZXh0LT5pc1RleHROb2RlKCkpCiAgICAgICAgIHJldHVybjsKICAgICAKLSAgICBSZWZQdHI8
VGV4dD4gdGV4dE5vZGUgPSBzdGF0aWNfY2FzdDxUZXh0Kj4obm9kZS5nZXQoKSk7Ci0gICAgUmVm
UHRyPFRleHQ+IHRleHROZXh0ID0gc3RhdGljX2Nhc3Q8VGV4dCo+KG5leHQpOworICAgIFJlZlB0
cjxUZXh0PiB0ZXh0Tm9kZSA9IHRvVGV4dChub2RlLmdldCgpKTsKKyAgICBSZWZQdHI8VGV4dD4g
dGV4dE5leHQgPSB0b1RleHQobmV4dCk7CiAgICAgdGV4dE5vZGUtPmFwcGVuZERhdGEodGV4dE5l
eHQtPmRhdGEoKSwgZWMpOwogICAgIGlmIChlYykKICAgICAgICAgcmV0dXJuOwpJbmRleDogU291
cmNlL1dlYkNvcmUvaHRtbC9IVE1MT2JqZWN0RWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvaHRtbC9IVE1MT2JqZWN0RWxlbWVudC5jcHAJKHJldmlzaW9uIDEwNzQzNCkK
KysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTE9iamVjdEVsZW1lbnQuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0yMDcsNyArMjA3LDcgQEAgYm9vbCBIVE1MT2JqZWN0RWxlbWVudDo6aGFzRmFsbGJh
Y2tDb250ZQogICAgIGZvciAoTm9kZSogY2hpbGQgPSBmaXJzdENoaWxkKCk7IGNoaWxkOyBjaGls
ZCA9IGNoaWxkLT5uZXh0U2libGluZygpKSB7CiAgICAgICAgIC8vIElnbm9yZSB3aGl0ZXNwYWNl
LW9ubHkgdGV4dCwgYW5kIDxwYXJhbT4gdGFncywgYW55IG90aGVyIGNvbnRlbnQgaXMgZmFsbGJh
Y2sgY29udGVudC4KICAgICAgICAgaWYgKGNoaWxkLT5pc1RleHROb2RlKCkpIHsKLSAgICAgICAg
ICAgIGlmICghc3RhdGljX2Nhc3Q8VGV4dCo+KGNoaWxkKS0+Y29udGFpbnNPbmx5V2hpdGVzcGFj
ZSgpKQorICAgICAgICAgICAgaWYgKCF0b1RleHQoY2hpbGQpLT5jb250YWluc09ubHlXaGl0ZXNw
YWNlKCkpCiAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgIH0gZWxzZSBpZiAo
IWNoaWxkLT5oYXNUYWdOYW1lKHBhcmFtVGFnKSkKICAgICAgICAgICAgIHJldHVybiB0cnVlOwpA
QCAtNDE0LDcgKzQxNCw3IEBAIHZvaWQgSFRNTE9iamVjdEVsZW1lbnQ6OnVwZGF0ZURvY05hbWVk
SXQKICAgICAgICAgICAgIGlmIChpc1JlY29nbml6ZWRUYWdOYW1lKGVsZW1lbnQtPnRhZ1FOYW1l
KCkpICYmICFlbGVtZW50LT5oYXNUYWdOYW1lKHBhcmFtVGFnKSkKICAgICAgICAgICAgICAgICBp
c05hbWVkSXRlbSA9IGZhbHNlOwogICAgICAgICB9IGVsc2UgaWYgKGNoaWxkLT5pc1RleHROb2Rl
KCkpIHsKLSAgICAgICAgICAgIGlmICghc3RhdGljX2Nhc3Q8VGV4dCo+KGNoaWxkKS0+Y29udGFp
bnNPbmx5V2hpdGVzcGFjZSgpKQorICAgICAgICAgICAgaWYgKCF0b1RleHQoY2hpbGQpLT5jb250
YWluc09ubHlXaGl0ZXNwYWNlKCkpCiAgICAgICAgICAgICAgICAgaXNOYW1lZEl0ZW0gPSBmYWxz
ZTsKICAgICAgICAgfSBlbHNlCiAgICAgICAgICAgICBpc05hbWVkSXRlbSA9IGZhbHNlOwpJbmRl
eDogU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MT3B0aW9uRWxlbWVudC5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MT3B0aW9uRWxlbWVudC5jcHAJKHJldmlzaW9uIDEw
NzQzNCkKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTE9wdGlvbkVsZW1lbnQuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xNDcsNyArMTQ3LDcgQEAgdm9pZCBIVE1MT3B0aW9uRWxlbWVudDo6c2V0
VGV4dChjb25zdCBTdAogICAgIC8vIEhhbmRsZSB0aGUgY29tbW9uIHNwZWNpYWwgY2FzZSB3aGVy
ZSB0aGVyZSdzIGV4YWN0bHkgMSBjaGlsZCBub2RlLCBhbmQgaXQncyBhIHRleHQgbm9kZS4KICAg
ICBOb2RlKiBjaGlsZCA9IGZpcnN0Q2hpbGQoKTsKICAgICBpZiAoY2hpbGQgJiYgY2hpbGQtPmlz
VGV4dE5vZGUoKSAmJiAhY2hpbGQtPm5leHRTaWJsaW5nKCkpCi0gICAgICAgIHN0YXRpY19jYXN0
PFRleHQgKj4oY2hpbGQpLT5zZXREYXRhKHRleHQsIGVjKTsKKyAgICAgICAgdG9UZXh0KGNoaWxk
KS0+c2V0RGF0YSh0ZXh0LCBlYyk7CiAgICAgZWxzZSB7CiAgICAgICAgIHJlbW92ZUNoaWxkcmVu
KCk7CiAgICAgICAgIGFwcGVuZENoaWxkKFRleHQ6OmNyZWF0ZShkb2N1bWVudCgpLCB0ZXh0KSwg
ZWMpOwpJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MU2NyaXB0RWxlbWVudC5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MU2NyaXB0RWxlbWVudC5jcHAJKHJl
dmlzaW9uIDEwNzQzNCkKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTFNjcmlwdEVsZW1lbnQu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC05MSw3ICs5MSw3IEBAIHZvaWQgSFRNTFNjcmlwdEVsZW1l
bnQ6OnNldFRleHQoY29uc3QgU3QKICAgICBpbnQgbnVtQ2hpbGRyZW4gPSBjaGlsZE5vZGVDb3Vu
dCgpOwogCiAgICAgaWYgKG51bUNoaWxkcmVuID09IDEgJiYgZmlyc3RDaGlsZCgpLT5pc1RleHRO
b2RlKCkpIHsKLSAgICAgICAgc3RhdGljX2Nhc3Q8VGV4dCo+KGZpcnN0Q2hpbGQoKSktPnNldERh
dGEodmFsdWUsIGVjKTsKKyAgICAgICAgdG9UZXh0KGZpcnN0Q2hpbGQoKSktPnNldERhdGEodmFs
dWUsIGVjKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIApJbmRleDogU291cmNlL1dlYkNvcmUv
aHRtbC9IVE1MVGV4dEFyZWFFbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9odG1sL0hUTUxUZXh0QXJlYUVsZW1lbnQuY3BwCShyZXZpc2lvbiAxMDc0MzQpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9odG1sL0hUTUxUZXh0QXJlYUVsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0zNjAsNyArMzYwLDcgQEAgU3RyaW5nIEhUTUxUZXh0QXJlYUVsZW1lbnQ6OmRlZmF1bHRWYWx1
ZQogICAgIC8vIFNpbmNlIHRoZXJlIG1heSBiZSBjb21tZW50cywgaWdub3JlIG5vZGVzIG90aGVy
IHRoYW4gdGV4dCBub2Rlcy4KICAgICBmb3IgKE5vZGUqIG4gPSBmaXJzdENoaWxkKCk7IG47IG4g
PSBuLT5uZXh0U2libGluZygpKSB7CiAgICAgICAgIGlmIChuLT5pc1RleHROb2RlKCkpCi0gICAg
ICAgICAgICB2YWx1ZSArPSBzdGF0aWNfY2FzdDxUZXh0Kj4obiktPmRhdGEoKTsKKyAgICAgICAg
ICAgIHZhbHVlICs9IHRvVGV4dChuKS0+ZGF0YSgpOwogICAgIH0KIAogICAgIHJldHVybiB2YWx1
ZTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTFRleHRGb3JtQ29udHJvbEVsZW1lbnQu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTFRleHRGb3JtQ29udHJv
bEVsZW1lbnQuY3BwCShyZXZpc2lvbiAxMDc0MzQpCisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL0hU
TUxUZXh0Rm9ybUNvbnRyb2xFbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDkzLDcgKzQ5
Myw3IEBAIFN0cmluZyBIVE1MVGV4dEZvcm1Db250cm9sRWxlbWVudDo6aW5uZXIKICAgICAgICAg
aWYgKG5vZGUtPmhhc1RhZ05hbWUoYnJUYWcpKQogICAgICAgICAgICAgcmVzdWx0LmFwcGVuZChu
ZXdsaW5lQ2hhcmFjdGVyKTsKICAgICAgICAgZWxzZSBpZiAobm9kZS0+aXNUZXh0Tm9kZSgpKQot
ICAgICAgICAgICAgcmVzdWx0LmFwcGVuZChzdGF0aWNfY2FzdDxUZXh0Kj4obm9kZSktPmRhdGEo
KSk7CisgICAgICAgICAgICByZXN1bHQuYXBwZW5kKHRvVGV4dChub2RlKS0+ZGF0YSgpKTsKICAg
ICB9CiAgICAgcmV0dXJuIGZpbmlzaFRleHQocmVzdWx0KTsKIH0KQEAgLTU0MCw3ICs1NDAsNyBA
QCBTdHJpbmcgSFRNTFRleHRGb3JtQ29udHJvbEVsZW1lbnQ6OnZhbHVlCiAgICAgICAgIGlmIChu
b2RlLT5oYXNUYWdOYW1lKGJyVGFnKSkKICAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQobmV3bGlu
ZUNoYXJhY3Rlcik7CiAgICAgICAgIGVsc2UgaWYgKG5vZGUtPmlzVGV4dE5vZGUoKSkgewotICAg
ICAgICAgICAgU3RyaW5nIGRhdGEgPSBzdGF0aWNfY2FzdDxUZXh0Kj4obm9kZSktPmRhdGEoKTsK
KyAgICAgICAgICAgIFN0cmluZyBkYXRhID0gdG9UZXh0KG5vZGUpLT5kYXRhKCk7CiAgICAgICAg
ICAgICB1bnNpZ25lZCBsZW5ndGggPSBkYXRhLmxlbmd0aCgpOwogICAgICAgICAgICAgdW5zaWdu
ZWQgcG9zaXRpb24gPSAwOwogICAgICAgICAgICAgd2hpbGUgKGJyZWFrTm9kZSA9PSBub2RlICYm
IGJyZWFrT2Zmc2V0IDw9IGxlbmd0aCkgewpJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9IVE1M
VGl0bGVFbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxU
aXRsZUVsZW1lbnQuY3BwCShyZXZpc2lvbiAxMDc0MzQpCisrKyBTb3VyY2UvV2ViQ29yZS9odG1s
L0hUTUxUaXRsZUVsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03MCw3ICs3MCw3IEBAIFN0
cmluZyBIVE1MVGl0bGVFbGVtZW50Ojp0ZXh0KCkgY29uc3QKICAgICAKICAgICBmb3IgKE5vZGUg
Km4gPSBmaXJzdENoaWxkKCk7IG47IG4gPSBuLT5uZXh0U2libGluZygpKSB7CiAgICAgICAgIGlm
IChuLT5pc1RleHROb2RlKCkpCi0gICAgICAgICAgICB2YWwgKz0gc3RhdGljX2Nhc3Q8VGV4dCo+
KG4pLT5kYXRhKCk7CisgICAgICAgICAgICB2YWwgKz0gdG9UZXh0KG4pLT5kYXRhKCk7CiAgICAg
fQogCiAgICAgcmV0dXJuIHZhbDsKQEAgLTkyLDcgKzkyLDcgQEAgdm9pZCBIVE1MVGl0bGVFbGVt
ZW50OjpzZXRUZXh0KGNvbnN0IFN0cgogICAgIGludCBudW1DaGlsZHJlbiA9IGNoaWxkTm9kZUNv
dW50KCk7CiAgICAgCiAgICAgaWYgKG51bUNoaWxkcmVuID09IDEgJiYgZmlyc3RDaGlsZCgpLT5p
c1RleHROb2RlKCkpCi0gICAgICAgIHN0YXRpY19jYXN0PFRleHQqPihmaXJzdENoaWxkKCkpLT5z
ZXREYXRhKHZhbHVlLCBlYyk7CisgICAgICAgIHRvVGV4dChmaXJzdENoaWxkKCkpLT5zZXREYXRh
KHZhbHVlLCBlYyk7CiAgICAgZWxzZSB7ICAKICAgICAgICAgLy8gV2UgbWFrZSBhIGNvcHkgaGVy
ZSBiZWNhdXNlIGVudGl0eSBvZiAidmFsdWUiIGFyZ3VtZW50IGNhbiBiZSBEb2N1bWVudDo6bV90
aXRsZSwKICAgICAgICAgLy8gd2hpY2ggZ29lcyBlbXB0eSBkdXJpbmcgcmVtb3ZlQ2hpbGRyZW4o
KSBpbnZvY2F0aW9uIGJlbG93LApJbmRleDogU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3Bl
Y3RvckRPTUFnZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3Iv
SW5zcGVjdG9yRE9NQWdlbnQuY3BwCShyZXZpc2lvbiAxMDc0MzQpCisrKyBTb3VyY2UvV2ViQ29y
ZS9pbnNwZWN0b3IvSW5zcGVjdG9yRE9NQWdlbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03MDYs
NyArNzA2LDcgQEAgdm9pZCBJbnNwZWN0b3JET01BZ2VudDo6c2V0Tm9kZVZhbHVlKEVycgogICAg
ICAgICByZXR1cm47CiAgICAgfQogCi0gICAgbV9kb21FZGl0b3ItPnJlcGxhY2VXaG9sZVRleHQo
c3RhdGljX2Nhc3Q8VGV4dCo+KG5vZGUpLCB2YWx1ZSwgZXJyb3JTdHJpbmcpOworICAgIG1fZG9t
RWRpdG9yLT5yZXBsYWNlV2hvbGVUZXh0KHRvVGV4dChub2RlKSwgdmFsdWUsIGVycm9yU3RyaW5n
KTsKIH0KIAogdm9pZCBJbnNwZWN0b3JET01BZ2VudDo6Z2V0RXZlbnRMaXN0ZW5lcnNGb3JOb2Rl
KEVycm9yU3RyaW5nKiwgaW50IG5vZGVJZCwgUmVmUHRyPEluc3BlY3RvckFycmF5PiYgbGlzdGVu
ZXJzQXJyYXkpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGV4dC5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRleHQuY3BwCShy
ZXZpc2lvbiAxMDc0MzQpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGV4dC5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTMwMCw3ICszMDAsNyBAQCB2b2lkIFJlbmRlclRleHQ6OmRl
bGV0ZVRleHRCb3hlcygpCiBQYXNzUmVmUHRyPFN0cmluZ0ltcGw+IFJlbmRlclRleHQ6Om9yaWdp
bmFsVGV4dCgpIGNvbnN0CiB7CiAgICAgTm9kZSogZSA9IG5vZGUoKTsKLSAgICByZXR1cm4gKGUg
JiYgZS0+aXNUZXh0Tm9kZSgpKSA/IHN0YXRpY19jYXN0PFRleHQqPihlKS0+ZGF0YUltcGwoKSA6
IDA7CisgICAgcmV0dXJuIChlICYmIGUtPmlzVGV4dE5vZGUoKSkgPyB0b1RleHQoZSktPmRhdGFJ
bXBsKCkgOiAwOwogfQogCiB2b2lkIFJlbmRlclRleHQ6OmFic29sdXRlUmVjdHMoVmVjdG9yPExh
eW91dFJlY3Q+JiByZWN0cywgY29uc3QgTGF5b3V0UG9pbnQmIGFjY3VtdWxhdGVkT2Zmc2V0KSBj
b25zdApJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRleHRGcmFnbWVudC5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRleHRGcmFn
bWVudC5jcHAJKHJldmlzaW9uIDEwNzQzNCkKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9S
ZW5kZXJUZXh0RnJhZ21lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01Miw3ICs1Miw3IEBAIFJl
bmRlclRleHRGcmFnbWVudDo6flJlbmRlclRleHRGcmFnbWVudCgKIFBhc3NSZWZQdHI8U3RyaW5n
SW1wbD4gUmVuZGVyVGV4dEZyYWdtZW50OjpvcmlnaW5hbFRleHQoKSBjb25zdAogewogICAgIE5v
ZGUqIGUgPSBub2RlKCk7Ci0gICAgUmVmUHRyPFN0cmluZ0ltcGw+IHJlc3VsdCA9ICgoZSAmJiBl
LT5pc1RleHROb2RlKCkpID8gc3RhdGljX2Nhc3Q8VGV4dCo+KGUpLT5kYXRhSW1wbCgpIDogY29u
dGVudFN0cmluZygpKTsKKyAgICBSZWZQdHI8U3RyaW5nSW1wbD4gcmVzdWx0ID0gKChlICYmIGUt
PmlzVGV4dE5vZGUoKSkgPyB0b1RleHQoZSktPmRhdGFJbXBsKCkgOiBjb250ZW50U3RyaW5nKCkp
OwogICAgIGlmICghcmVzdWx0KQogICAgICAgICByZXR1cm4gMDsKICAgICByZXR1cm4gcmVzdWx0
LT5zdWJzdHJpbmcoc3RhcnQoKSwgZW5kKCkpOwpAQCAtOTUsNyArOTUsNyBAQCBVQ2hhciBSZW5k
ZXJUZXh0RnJhZ21lbnQ6OnByZXZpb3VzQ2hhcmFjCiB7CiAgICAgaWYgKHN0YXJ0KCkpIHsKICAg
ICAgICAgTm9kZSogZSA9IG5vZGUoKTsKLSAgICAgICAgU3RyaW5nSW1wbCogIG9yaWdpbmFsID0g
KChlICYmIGUtPmlzVGV4dE5vZGUoKSkgPyBzdGF0aWNfY2FzdDxUZXh0Kj4oZSktPmRhdGFJbXBs
KCkgOiBjb250ZW50U3RyaW5nKCkpOworICAgICAgICBTdHJpbmdJbXBsKiBvcmlnaW5hbCA9ICgo
ZSAmJiBlLT5pc1RleHROb2RlKCkpID8gdG9UZXh0KGUpLT5kYXRhSW1wbCgpIDogY29udGVudFN0
cmluZygpKTsKICAgICAgICAgaWYgKG9yaWdpbmFsICYmIHN0YXJ0KCkgPD0gb3JpZ2luYWwtPmxl
bmd0aCgpKQogICAgICAgICAgICAgcmV0dXJuICgqb3JpZ2luYWwpW3N0YXJ0KCkgLSAxXTsKICAg
ICB9CkluZGV4OiBUb29scy9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvQ2hhbmdlTG9n
CShyZXZpc2lvbiAxMDc1MDEpCisrKyBUb29scy9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAg
LTEsMyArMSwxNSBAQAorMjAxMi0wMi0xMSAgSm9lIFRob21hcyAgPGpvZXRob21hc0Btb3Rvcm9s
YS5jb20+CisKKyAgICAgICAgQWRkIHRvVGV4dCBhbmQgaXNUZXh0Tm9kZSBoZWxwZXJzIGluIFRl
eHQgY2xhc3MuCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD03ODE0MAorCisgICAgICAgIEFkZGVkIGEgc3R5bGUgY2hlY2tlciB0byB1c2UgdG9UZXh0IHJh
dGhlciB0aGFuIHN0YXRpY19jYXN0PFRleHQqPi4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JP
RFkgKE9PUFMhKS4KKworICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkvc3R5bGUvY2hlY2tlcnMv
Y3BwLnB5OgorICAgICAgICAoY2hlY2tfbGFuZ3VhZ2UpOiBTdHlsZSBjaGVja2VyIGZvciBzdGF0
aWNfY2FzdDxUZXh0Kj4uCisKIDIwMTItMDItMTAgIEFkYW0gS2xlaW4gIDxhZGFta0BjaHJvbWl1
bS5vcmc+CiAKICAgICAgICAgRW5hYmxlIE1VVEFUSU9OX09CU0VSVkVSUyBieSBkZWZhdWx0IG9u
IGFsbCBwbGF0Zm9ybXMKSW5kZXg6IFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvc3R5bGUvY2hlY2tl
cnMvY3BwLnB5Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvc3R5bGUvY2hl
Y2tlcnMvY3BwLnB5CShyZXZpc2lvbiAxMDc0MzQpCisrKyBUb29scy9TY3JpcHRzL3dlYmtpdHB5
L3N0eWxlL2NoZWNrZXJzL2NwcC5weQkod29ya2luZyBjb3B5KQpAQCAtMjk4MCw2ICsyOTgwLDEx
IEBAIGRlZiBjaGVja19sYW5ndWFnZShmaWxlbmFtZSwgY2xlYW5fbGluZXMKIAogICAgIGNoZWNr
X2lkZW50aWZpZXJfbmFtZV9pbl9kZWNsYXJhdGlvbihmaWxlbmFtZSwgbGluZV9udW1iZXIsIGxp
bmUsIGZpbGVfc3RhdGUsIGVycm9yKQogCisgICAgIyBDaGVjayB0aGF0IHdlJ3JlIG5vdCB1c2lu
ZyBzdGF0aWNfY2FzdDxUZXh0Kj4uCisgICAgaWYgc2VhcmNoKHInXGJzdGF0aWNfY2FzdDxUZXh0
XCo+JywgbGluZSk6CisgICAgICAgIGVycm9yKGxpbmVfbnVtYmVyLCAncmVhZGFiaWxpdHkvY2hl
Y2snLCA0LAorICAgICAgICAgICAgICAnQ29uc2lkZXIgdXNpbmcgdG9UZXh0IGhlbHBlciBmdW5j
dGlvbiBpbiBXZWJDb3JlL2RvbS9UZXh0LmggJworICAgICAgICAgICAgICAnaW5zdGVhZCBvZiBz
dGF0aWNfY2FzdDxUZXh0Kj4nKQogCiBkZWYgY2hlY2tfaWRlbnRpZmllcl9uYW1lX2luX2RlY2xh
cmF0aW9uKGZpbGVuYW1lLCBsaW5lX251bWJlciwgbGluZSwgZmlsZV9zdGF0ZSwgZXJyb3IpOgog
ICAgICIiIkNoZWNrcyBpZiBpZGVudGlmaWVyIG5hbWVzIGNvbnRhaW4gYW55IHVuZGVyc2NvcmVz
Lgo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>126692</attachid>
            <date>2012-02-12 17:35:29 -0800</date>
            <delta_ts>2012-02-12 19:18:08 -0800</delta_ts>
            <desc>UnitTestCase-StyleChecker</desc>
            <filename>unittestcase_patch</filename>
            <type>text/plain</type>
            <size>1687</size>
            <attacher name="Joe Thomas">joethomas</attacher>
            
              <data encoding="base64">SW5kZXg6IFRvb2xzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9DaGFuZ2VMb2cJKHJl
dmlzaW9uIDEwNzUxOCkKKysrIFRvb2xzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwz
ICsxLDE2IEBACisyMDEyLTAyLTEyICBKb2UgVGhvbWFzICA8am9ldGhvbWFzQG1vdG9yb2xhLmNv
bT4KKworICAgICAgICBBZGQgdG9UZXh0IGFuZCBpc1RleHROb2RlIGhlbHBlcnMgaW4gVGV4dCBj
bGFzcy4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTc4
MTQwCisKKyAgICAgICAgVW5pdCB0ZXN0IGNhc2UgZm9yIHRoZSBuZXcgc3R5bGUgY2hlY2tlciBp
bnRyb2R1Y2VkLgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAg
ICAgICogU2NyaXB0cy93ZWJraXRweS9zdHlsZS9jaGVja2Vycy9jcHBfdW5pdHRlc3QucHk6Cisg
ICAgICAgIChDcHBTdHlsZVRlc3QpOgorICAgICAgICAoQ3BwU3R5bGVUZXN0LnRlc3Rfc3RhdGlj
X2Nhc3RfcmVhZGFiaWxpdHkpOiBBZGRlZCBhIHVuaXQgdGVzdCBjYXNlLgorCiAyMDEyLTAyLTEy
ICBKb2UgVGhvbWFzICA8am9ldGhvbWFzQG1vdG9yb2xhLmNvbT4KIAogICAgICAgICBBZGQgdG9U
ZXh0IGFuZCBpc1RleHROb2RlIGhlbHBlcnMgaW4gVGV4dCBjbGFzcy4KSW5kZXg6IFRvb2xzL1Nj
cmlwdHMvd2Via2l0cHkvc3R5bGUvY2hlY2tlcnMvY3BwX3VuaXR0ZXN0LnB5Cj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvc3R5bGUvY2hlY2tlcnMvY3BwX3VuaXR0ZXN0LnB5
CShyZXZpc2lvbiAxMDc1MTIpCisrKyBUb29scy9TY3JpcHRzL3dlYmtpdHB5L3N0eWxlL2NoZWNr
ZXJzL2NwcF91bml0dGVzdC5weQkod29ya2luZyBjb3B5KQpAQCAtNzU5LDYgKzc1OSwxNCBAQCBj
bGFzcyBDcHBTdHlsZVRlc3QoQ3BwU3R5bGVUZXN0QmFzZSk6CiAgICAgICAgIHNlbGYuYXNzZXJ0
X2xhbmd1YWdlX3J1bGVzX2NoZWNrKCdmb28uY3BwJywgc3RhdGVtZW50LCBlcnJvcl9tZXNzYWdl
KQogICAgICAgICBzZWxmLmFzc2VydF9sYW5ndWFnZV9ydWxlc19jaGVjaygnZm9vLmgnLCBzdGF0
ZW1lbnQsIGVycm9yX21lc3NhZ2UpCiAKKyAgICAjIFRlc3QgZm9yIHN0YXRpY19jYXN0IHJlYWRh
YmlsaXR5LgorICAgIGRlZiB0ZXN0X3N0YXRpY19jYXN0X3JlYWRhYmlsaXR5KHNlbGYpOgorICAg
ICAgICBzZWxmLmFzc2VydF9saW50KAorICAgICAgICAgICAgJ1RleHQqIHggPSBzdGF0aWNfY2Fz
dDxUZXh0Kj4oZm9vKTsnLAorICAgICAgICAgICAgJ0NvbnNpZGVyIHVzaW5nIHRvVGV4dCBoZWxw
ZXIgZnVuY3Rpb24gaW4gV2ViQ29yZS9kb20vVGV4dC5oICcKKyAgICAgICAgICAgICdpbnN0ZWFk
IG9mIHN0YXRpY19jYXN0PFRleHQqPicKKyAgICAgICAgICAgICcgIFtyZWFkYWJpbGl0eS9jaGVj
a10gWzRdJykKKwogICAgICMgV2UgY2Fubm90IHRlc3QgdGhpcyBmdW5jdGlvbmFsaXR5IGJlY2F1
c2Ugb2YgZGlmZmVyZW5jZSBvZgogICAgICMgZnVuY3Rpb24gZGVmaW5pdGlvbnMuICBBbnl3YXks
IHdlIG1heSBuZXZlciBlbmFibGUgdGhpcy4KICAgICAjCg==
</data>

          </attachment>
      

    </bug>

</bugzilla>