<?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>54972</bug_id>
          
          <creation_ts>2011-02-22 10:47:17 -0800</creation_ts>
          <short_desc>Eliminate DeprecatedPtrList from RenderBlock</short_desc>
          <delta_ts>2011-03-02 13:11:44 -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>WebCore Misc.</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>PC</rep_platform>
          <op_sys>OS X 10.5</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>54973</dependson>
          <blocked>17425</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Benjamin Poulain">benjamin</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>buildbot</cc>
    
    <cc>commit-queue</cc>
    
    <cc>dglazkov</cc>
    
    <cc>eric</cc>
    
    <cc>gustavo.noronha</cc>
    
    <cc>gustavo</cc>
    
    <cc>hyatt</cc>
    
    <cc>mjs</cc>
    
    <cc>simon.fraser</cc>
    
    <cc>webkit-ews</cc>
    
    <cc>webkit.review.bot</cc>
    
    <cc>xan.lopez</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>355391</commentid>
    <comment_count>0</comment_count>
    <who name="Benjamin Poulain">benjamin</who>
    <bug_when>2011-02-22 10:47:17 -0800</bug_when>
    <thetext>Splitting the task of 17425 in smaller chunk to make the review easier.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>355412</commentid>
    <comment_count>1</comment_count>
      <attachid>83345</attachid>
    <who name="Benjamin Poulain">benjamin</who>
    <bug_when>2011-02-22 11:08:58 -0800</bug_when>
    <thetext>Created attachment 83345
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>355417</commentid>
    <comment_count>2</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-02-22 11:13:57 -0800</bug_when>
    <thetext>Attachment 83345 did not build on chromium:
Build output: http://queues.webkit.org/results/7949151</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>355420</commentid>
    <comment_count>3</comment_count>
    <who name="Benjamin Poulain">benjamin</who>
    <bug_when>2011-02-22 11:16:25 -0800</bug_when>
    <thetext>Maciej suggested I split the patch of 17425 to simplify the review.

It does not build yet since 54973 is not integrated. I post it to get initial comments for this simpler version of the patch.

This is the part for RenderBlock. My comments from 17425: I did not use RefPtr to store the FloatingObject because that would add quite some mess (with floatMap deleting objects its own way). If you think the memory management is not clear here, I can add RefPtr later and refactor RenderBlock for that. I think that could be in a follow up patch because this one is already quite big to review.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>355437</commentid>
    <comment_count>4</comment_count>
    <who name="Build Bot">buildbot</who>
    <bug_when>2011-02-22 11:31:17 -0800</bug_when>
    <thetext>Attachment 83345 did not build on win:
Build output: http://queues.webkit.org/results/7944328</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>355476</commentid>
    <comment_count>5</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-02-22 12:08:17 -0800</bug_when>
    <thetext>Attachment 83345 did not build on chromium:
Build output: http://queues.webkit.org/results/7946327</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>355485</commentid>
    <comment_count>6</comment_count>
    <who name="Collabora GTK+ EWS bot">gustavo.noronha</who>
    <bug_when>2011-02-22 12:16:20 -0800</bug_when>
    <thetext>Attachment 83345 did not build on gtk:
Build output: http://queues.webkit.org/results/7946334</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>355497</commentid>
    <comment_count>7</comment_count>
    <who name="Early Warning System Bot">webkit-ews</who>
    <bug_when>2011-02-22 12:29:53 -0800</bug_when>
    <thetext>Attachment 83345 did not build on qt:
Build output: http://queues.webkit.org/results/7946337</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>355548</commentid>
    <comment_count>8</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-02-22 13:17:53 -0800</bug_when>
    <thetext>Attachment 83345 did not build on mac:
Build output: http://queues.webkit.org/results/7943417</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>356829</commentid>
    <comment_count>9</comment_count>
      <attachid>83345</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2011-02-24 03:07:06 -0800</bug_when>
    <thetext>Comment on attachment 83345
Patch

Yay!  I attempted this patch years ago... but failed.  I&apos;ll have to look when it&apos;s not 3am. :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>357925</commentid>
    <comment_count>10</comment_count>
      <attachid>83816</attachid>
    <who name="Benjamin Poulain">benjamin</who>
    <bug_when>2011-02-25 08:18:10 -0800</bug_when>
    <thetext>Created attachment 83816
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>357987</commentid>
    <comment_count>11</comment_count>
      <attachid>83816</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2011-02-25 09:56:38 -0800</bug_when>
    <thetext>Comment on attachment 83816
Patch

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

If it was me, I would also have emptied out DeprecatedPtrListImpl.cpp and replaced DeprecatedPtrList.h and DeprecatedPtrListImpl.h with just #error as part of this initial patch.

I’ll set review+, but not commit-queue+, in case you decide you want to make changes based on any of my comments.

&gt; Source/WebCore/rendering/RenderBlock.cpp:3518
&gt; +                FloatingObject* f = *it;
&gt; +                delete f;

I don’t think the local variable here is helpful.

Also, you may be able to use the deleteAllValues function.

&gt; Source/WebCore/rendering/RenderBlock.cpp:3714
&gt; -bool RenderBlock::containsFloat(RenderObject* o)
&gt; +bool RenderBlock::containsFloat(RenderBox* o)

It would be better to give this argument a name rather than a letter.

&gt; Source/WebCore/rendering/RenderBlock.h:706
&gt; +    typedef ListHashSet&lt;FloatingObject*, 4, FloatingObjectHashFunctions&gt; FloatingObjectListHashSet;

Did you try making the set values OwnPtr&lt;FloatingObject&gt; instead of FloatingObject*? I ask because doing it that way would be slightly trickier to right, but would make it much easier to be sure there are no storage leaks. I don’t know for sure that OwnPtr works with the set templates though. Doing all the storage management by hand makes it really easy to introduce leaks without realizing it.

There’s no need to give the typedef such a long name. I would call it FloatingObjectSet. I know it’s a ListHashSet, but you need not repeat all the adjectives in its typedef name.

I also suggest:

    typedef FloatingObjectListHashSet::const_iterator FloatingObjectIterator;

That will make the code much less wordy. I count 42 different places this expression appears; well worth a typedef!

&gt; Source/WebCore/rendering/RenderBlock.h:707
&gt; +    FloatingObjectListHashSet* m_floatingObjects;

This should be changed to be an OwnPtr, not a raw pointer. Obviously that need not be part of this patch.

&gt; Source/WebCore/rendering/RenderBlock.h:709
&gt; +    typedef PositionedObjectsListHashSet::const_iterator Iterator;

Seems clear this typedef should be PositionedObjectIterator, not Iterator! Obviously that need not be part of this patch.

&gt; Source/WebCore/rendering/RenderBlock.h:710
&gt;      PositionedObjectsListHashSet* m_positionedObjects;

This should be changed to be an OwnPtr, not a raw pointer. Obviously that need not be part of this patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>358014</commentid>
    <comment_count>12</comment_count>
      <attachid>83834</attachid>
    <who name="Benjamin Poulain">benjamin</who>
    <bug_when>2011-02-25 10:31:10 -0800</bug_when>
    <thetext>Created attachment 83834
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>358017</commentid>
    <comment_count>13</comment_count>
    <who name="Benjamin Poulain">benjamin</who>
    <bug_when>2011-02-25 10:34:23 -0800</bug_when>
    <thetext>Thanks Darin for the review.

I updated the patch from you comments. I will address the other points with follow up patches. I tried to keep that one as short as possible to make the review easier.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>358475</commentid>
    <comment_count>14</comment_count>
      <attachid>83834</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2011-02-26 05:51:48 -0800</bug_when>
    <thetext>Comment on attachment 83834
Patch

Rejecting attachment 83834 from commit-queue.

Failed to run &quot;[&apos;./Tools/Scripts/webkit-patch&apos;, &apos;--status-host=queues.webkit.org&apos;, &apos;--bot-id=cr-jail-3&apos;, &apos;apply-...&quot; exit_code: 2

Last 500 characters of output:
at 618 (offset 1 line).
Hunk #2 FAILED at 687.
Hunk #3 succeeded at 839 (offset 2 lines).
Hunk #4 succeeded at 856 (offset 2 lines).
Hunk #5 succeeded at 919 (offset 2 lines).
Hunk #6 succeeded at 1167 (offset 2 lines).
Hunk #7 succeeded at 1203 (offset 2 lines).
1 out of 7 hunks FAILED -- saving rejects to file Source/WebCore/rendering/RenderBlockLineLayout.cpp.rej

Failed to run &quot;[u&apos;/mnt/git/webkit-commit-queue/Tools/Scripts/svn-apply&apos;, u&apos;--reviewer&apos;, u&apos;Darin Adler&apos;, u&apos;--force&apos;]&quot; exit_code: 1

Full output: http://queues.webkit.org/results/8032715</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>358674</commentid>
    <comment_count>15</comment_count>
    <who name="Benjamin Poulain">benjamin</who>
    <bug_when>2011-02-27 07:52:22 -0800</bug_when>
    <thetext>Committed r79817: &lt;http://trac.webkit.org/changeset/79817&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>361022</commentid>
    <comment_count>16</comment_count>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2011-03-02 13:11:44 -0800</bug_when>
    <thetext>This cause leaks: bug 55602.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>83345</attachid>
            <date>2011-02-22 11:08:58 -0800</date>
            <delta_ts>2011-02-25 08:18:03 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-54972-20110222201826.patch</filename>
            <type>text/plain</type>
            <size>32725</size>
            <attacher name="Benjamin Poulain">benjamin</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogNzkzMDEKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwppbmRleCBkMzE4NGNlNWQ4M2ZkZTA5
YTUxY2MzNzlhMGZjNzQ4MjFhYzdiN2VkLi5lMWYzOWRmNmViZWU0ZjhkNjMyNzQ0MzI4YzUxN2Y2
NGUyNjM5YWI5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvU291
cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMzggQEAKKzIwMTEtMDItMjIgIEJlbmph
bWluIFBvdWxhaW4gIDxpa2lwb3VAZ21haWwuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5P
Qk9EWSAoT09QUyEpLgorCisgICAgICAgIEVsaW1pbmF0ZSBEZXByZWNhdGVkUHRyTGlzdCBmcm9t
IFJlbmRlckJsb2NrCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD01NDk3MgorCisgICAgICAgIFJlZmFjdG9yIFJlbmRlckJsb2NrIHRvIHVzZSBhIExpc3RI
YXNoVGFibGUgaW5zdGVhZCBvZiBhIERlcHJlY2F0ZWRQdHJMaXN0LgorCisgICAgICAgICogcmVu
ZGVyaW5nL1JlbmRlckJsb2NrLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJsb2NrOjph
ZGRPdmVyZmxvd0Zyb21GbG9hdHMpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQmxvY2s6OnJl
cGFpbnRPdmVyaGFuZ2luZ0Zsb2F0cyk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCbG9jazo6
cGFpbnRGbG9hdHMpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQmxvY2s6OnNlbGVjdGlvbkdh
cHMpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQmxvY2s6Omluc2VydEZsb2F0aW5nT2JqZWN0
KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJsb2NrOjpyZW1vdmVGbG9hdGluZ09iamVjdCk6
CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCbG9jazo6cmVtb3ZlRmxvYXRpbmdPYmplY3RzQmVs
b3cpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQmxvY2s6OnBvc2l0aW9uTmV3RmxvYXRzKToK
KyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJsb2NrOjpwb3NpdGlvbk5ld0Zsb2F0T25MaW5lKToK
KyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJsb2NrOjpsb2dpY2FsTGVmdE9mZnNldEZvckxpbmUp
OgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQmxvY2s6OmxvZ2ljYWxSaWdodE9mZnNldEZvckxp
bmUpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQmxvY2s6Om5leHRGbG9hdExvZ2ljYWxCb3R0
b21CZWxvdyk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCbG9jazo6bG93ZXN0RmxvYXRMb2dp
Y2FsQm90dG9tKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJsb2NrOjpjbGVhckZsb2F0cyk6
CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCbG9jazo6YWRkT3ZlcmhhbmdpbmdGbG9hdHMpOgor
ICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQmxvY2s6OmFkZEludHJ1ZGluZ0Zsb2F0cyk6CisgICAg
ICAgIChXZWJDb3JlOjpSZW5kZXJCbG9jazo6Y29udGFpbnNGbG9hdCk6CisgICAgICAgIChXZWJD
b3JlOjpSZW5kZXJCbG9jazo6aGl0VGVzdEZsb2F0cyk6CisgICAgICAgIChXZWJDb3JlOjpSZW5k
ZXJCbG9jazo6YWRqdXN0Rm9yQm9yZGVyRml0KToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVy
QmxvY2suaDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJsb2NrOjpGbG9hdGluZ09iamVjdFJl
bmRlcmVyRXh0cmFjdG9yOjpleHRyYWN0KToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyQmxv
Y2tMaW5lTGF5b3V0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJsb2NrOjpsYXlvdXRJ
bmxpbmVDaGlsZHJlbik6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCbG9jazo6bWF0Y2hlZEVu
ZExpbmUpOgorCiAyMDExLTAyLTIyICBTdGV2ZSBMYWNleSAgPHNqbEBjaHJvbWl1bS5vcmc+CiAK
ICAgICAgICAgUmV2aWV3ZWQgYnkgRGFyaW4gRmlzaGVyLgpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL1JlbmRlckJsb2NrLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9SZW5kZXJCbG9jay5jcHAKaW5kZXggMjE5NzUzMzliYjU3NmU5MDk5MmE3ZGQ1YjliNGQyNjNk
Mjc3NmExOS4uNTU4ZmE1NDE3OTk5ODQ5NGZkMmRhZTdmNDEzZTgxOTc0MDNkNWNjMSAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJsb2NrLmNwcAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2suY3BwCkBAIC0xMzc5LDkgKzEzNzksMTAg
QEAgdm9pZCBSZW5kZXJCbG9jazo6YWRkT3ZlcmZsb3dGcm9tRmxvYXRzKCkKIHsKICAgICBpZiAo
IW1fZmxvYXRpbmdPYmplY3RzKQogICAgICAgICByZXR1cm47Ci0gICAgRmxvYXRpbmdPYmplY3Qq
IHI7Ci0gICAgRGVwcmVjYXRlZFB0ckxpc3RJdGVyYXRvcjxGbG9hdGluZ09iamVjdD4gaXQoKm1f
ZmxvYXRpbmdPYmplY3RzKTsKLSAgICBmb3IgKDsgKHIgPSBpdC5jdXJyZW50KCkpOyArK2l0KSB7
CisKKyAgICBGbG9hdGluZ09iamVjdExpc3RIYXNoVGFibGU6OmNvbnN0X2l0ZXJhdG9yIGVuZCA9
IG1fZmxvYXRpbmdPYmplY3RzLT5lbmQoKTsKKyAgICBmb3IgKEZsb2F0aW5nT2JqZWN0TGlzdEhh
c2hUYWJsZTo6Y29uc3RfaXRlcmF0b3IgaXQgPSBtX2Zsb2F0aW5nT2JqZWN0cy0+YmVnaW4oKTsg
aXQgIT0gZW5kOyArK2l0KSB7CisgICAgICAgIEZsb2F0aW5nT2JqZWN0KiByID0gKml0OwogICAg
ICAgICBpZiAoci0+bV9pc0Rlc2NlbmRhbnQpCiAgICAgICAgICAgICBhZGRPdmVyZmxvd0Zyb21D
aGlsZChyLT5tX3JlbmRlcmVyLCBJbnRTaXplKHhQb3NpdGlvbkZvckZsb2F0SW5jbHVkaW5nTWFy
Z2luKHIpLCB5UG9zaXRpb25Gb3JGbG9hdEluY2x1ZGluZ01hcmdpbihyKSkpOwogICAgIH0KQEAg
LTIxNzIsMTQgKzIxNzMsMTMgQEAgdm9pZCBSZW5kZXJCbG9jazo6cmVwYWludE92ZXJoYW5naW5n
RmxvYXRzKGJvb2wgcGFpbnRBbGxEZXNjZW5kYW50cykKICAgICAgICAgQVNTRVJUKG1fZmxvYXRp
bmdPYmplY3RzKTsKICAgICAgICAgaWYgKCFtX2Zsb2F0aW5nT2JqZWN0cykKICAgICAgICAgICAg
IHJldHVybjsKLSAgICAgICAgCi0gICAgICAgIEZsb2F0aW5nT2JqZWN0KiByOwotICAgICAgICBE
ZXByZWNhdGVkUHRyTGlzdEl0ZXJhdG9yPEZsb2F0aW5nT2JqZWN0PiBpdCgqbV9mbG9hdGluZ09i
amVjdHMpOwogCiAgICAgICAgIC8vIEZJWE1FOiBBdm9pZCBkaXNhYmxpbmcgTGF5b3V0U3RhdGUu
IEF0IHRoZSB2ZXJ5IGxlYXN0LCBkb24ndCBkaXNhYmxlIGl0IGZvciBmbG9hdHMgb3JpZ2luYXRp
bmcKICAgICAgICAgLy8gaW4gdGhpcyBibG9jay4gQmV0dGVyIHlldCB3b3VsZCBiZSB0byBwdXNo
IGV4dHJhIHN0YXRlIGZvciB0aGUgY29udGFpbmVycyBvZiBvdGhlciBmbG9hdHMuCiAgICAgICAg
IHZpZXcoKS0+ZGlzYWJsZUxheW91dFN0YXRlKCk7Ci0gICAgICAgIGZvciAoIDsgKHIgPSBpdC5j
dXJyZW50KCkpOyArK2l0KSB7CisgICAgICAgIEZsb2F0aW5nT2JqZWN0TGlzdEhhc2hUYWJsZTo6
Y29uc3RfaXRlcmF0b3IgZW5kID0gbV9mbG9hdGluZ09iamVjdHMtPmVuZCgpOworICAgICAgICBm
b3IgKEZsb2F0aW5nT2JqZWN0TGlzdEhhc2hUYWJsZTo6Y29uc3RfaXRlcmF0b3IgaXQgPSBtX2Zs
b2F0aW5nT2JqZWN0cy0+YmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7CisgICAgICAgICAgICBG
bG9hdGluZ09iamVjdCogciA9ICppdDsKICAgICAgICAgICAgIC8vIE9ubHkgcmVwYWludCB0aGUg
b2JqZWN0IGlmIGl0IGlzIG92ZXJoYW5naW5nLCBpcyBub3QgaW4gaXRzIG93biBsYXllciwgYW5k
CiAgICAgICAgICAgICAvLyBpcyBvdXIgcmVzcG9uc2liaWxpdHkgdG8gcGFpbnQgKG1fc2hvdWxk
UGFpbnQgaXMgc2V0KS4gV2hlbiBwYWludEFsbERlc2NlbmRhbnRzIGlzIHRydWUsIHRoZSBsYXR0
ZXIKICAgICAgICAgICAgIC8vIGNvbmRpdGlvbiBpcyByZXBsYWNlZCB3aXRoIGJlaW5nIGEgZGVz
Y2VuZGFudCBvZiB1cy4KQEAgLTI1MDMsOSArMjUwMyw5IEBAIHZvaWQgUmVuZGVyQmxvY2s6OnBh
aW50RmxvYXRzKFBhaW50SW5mbyYgcGFpbnRJbmZvLCBpbnQgdHgsIGludCB0eSwgYm9vbCBwcmVz
ZXJ2CiAgICAgaWYgKCFtX2Zsb2F0aW5nT2JqZWN0cykKICAgICAgICAgcmV0dXJuOwogCi0gICAg
RmxvYXRpbmdPYmplY3QqIHI7Ci0gICAgRGVwcmVjYXRlZFB0ckxpc3RJdGVyYXRvcjxGbG9hdGlu
Z09iamVjdD4gaXQoKm1fZmxvYXRpbmdPYmplY3RzKTsKLSAgICBmb3IgKDsgKHIgPSBpdC5jdXJy
ZW50KCkpOyArK2l0KSB7CisgICAgRmxvYXRpbmdPYmplY3RMaXN0SGFzaFRhYmxlOjpjb25zdF9p
dGVyYXRvciBlbmQgPSBtX2Zsb2F0aW5nT2JqZWN0cy0+ZW5kKCk7CisgICAgZm9yIChGbG9hdGlu
Z09iamVjdExpc3RIYXNoVGFibGU6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbV9mbG9hdGluZ09iamVj
dHMtPmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkgeworICAgICAgICBGbG9hdGluZ09iamVjdCog
ciA9ICppdDsKICAgICAgICAgLy8gT25seSBwYWludCB0aGUgb2JqZWN0IGlmIG91ciBtX3Nob3Vs
ZFBhaW50IGZsYWcgaXMgc2V0LgogICAgICAgICBpZiAoci0+bV9zaG91bGRQYWludCAmJiAhci0+
bV9yZW5kZXJlci0+aGFzU2VsZlBhaW50aW5nTGF5ZXIoKSkgewogICAgICAgICAgICAgUGFpbnRJ
bmZvIGN1cnJlbnRQYWludEluZm8ocGFpbnRJbmZvKTsKQEAgLTI3NDIsOCArMjc0Miw5IEBAIEdh
cFJlY3RzIFJlbmRlckJsb2NrOjpzZWxlY3Rpb25HYXBzKFJlbmRlckJsb2NrKiByb290QmxvY2ss
IGNvbnN0IEludFBvaW50JiByb290CiAgICAgICAgICAgICBmb3IgKFJlbmRlckJsb2NrKiBjYiA9
IGNvbnRhaW5pbmdCbG9jaygpOyBjYiAmJiAhY2ItPmlzUmVuZGVyVmlldygpOyBjYiA9IGNiLT5j
b250YWluaW5nQmxvY2soKSkKICAgICAgICAgICAgICAgICBjbGlwT3V0UG9zaXRpb25lZE9iamVj
dHMocGFpbnRJbmZvLCBJbnRQb2ludChjYi0+eCgpLCBjYi0+eSgpKSwgY2ItPm1fcG9zaXRpb25l
ZE9iamVjdHMpOyAvLyBGSVhNRTogTm90IHJpZ2h0IGZvciBmbGlwcGVkIHdyaXRpbmcgbW9kZXMu
CiAgICAgICAgIGlmIChtX2Zsb2F0aW5nT2JqZWN0cykgewotICAgICAgICAgICAgZm9yIChEZXBy
ZWNhdGVkUHRyTGlzdEl0ZXJhdG9yPEZsb2F0aW5nT2JqZWN0PiBpdCgqbV9mbG9hdGluZ09iamVj
dHMpOyBpdC5jdXJyZW50KCk7ICsraXQpIHsKLSAgICAgICAgICAgICAgICBGbG9hdGluZ09iamVj
dCogciA9IGl0LmN1cnJlbnQoKTsKKyAgICAgICAgICAgIEZsb2F0aW5nT2JqZWN0TGlzdEhhc2hU
YWJsZTo6Y29uc3RfaXRlcmF0b3IgZW5kID0gbV9mbG9hdGluZ09iamVjdHMtPmVuZCgpOworICAg
ICAgICAgICAgZm9yIChGbG9hdGluZ09iamVjdExpc3RIYXNoVGFibGU6OmNvbnN0X2l0ZXJhdG9y
IGl0ID0gbV9mbG9hdGluZ09iamVjdHMtPmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkgeworICAg
ICAgICAgICAgICAgIEZsb2F0aW5nT2JqZWN0KiByID0gKml0OwogICAgICAgICAgICAgICAgIElu
dFJlY3QgZmxvYXRCb3ggPSBJbnRSZWN0KG9mZnNldEZyb21Sb290QmxvY2sud2lkdGgoKSArIHhQ
b3NpdGlvbkZvckZsb2F0SW5jbHVkaW5nTWFyZ2luKHIpLAogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIG9mZnNldEZyb21Sb290QmxvY2suaGVpZ2h0KCkgKyB5UG9z
aXRpb25Gb3JGbG9hdEluY2x1ZGluZ01hcmdpbihyKSwKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICByLT5tX3JlbmRlcmVyLT53aWR0aCgpLCByLT5tX3JlbmRlcmVy
LT5oZWlnaHQoKSk7CkBAIC0zMDUwLDE4ICszMDUxLDEzIEBAIFJlbmRlckJsb2NrOjpGbG9hdGlu
Z09iamVjdCogUmVuZGVyQmxvY2s6Omluc2VydEZsb2F0aW5nT2JqZWN0KFJlbmRlckJveCogbykK
ICAgICBBU1NFUlQoby0+aXNGbG9hdGluZygpKTsKIAogICAgIC8vIENyZWF0ZSB0aGUgbGlzdCBv
ZiBzcGVjaWFsIG9iamVjdHMgaWYgd2UgZG9uJ3QgYWxlYWR5IGhhdmUgb25lCi0gICAgaWYgKCFt
X2Zsb2F0aW5nT2JqZWN0cykgewotICAgICAgICBtX2Zsb2F0aW5nT2JqZWN0cyA9IG5ldyBEZXBy
ZWNhdGVkUHRyTGlzdDxGbG9hdGluZ09iamVjdD47Ci0gICAgICAgIG1fZmxvYXRpbmdPYmplY3Rz
LT5zZXRBdXRvRGVsZXRlKHRydWUpOwotICAgIH0gZWxzZSB7CisgICAgaWYgKCFtX2Zsb2F0aW5n
T2JqZWN0cykKKyAgICAgICAgbV9mbG9hdGluZ09iamVjdHMgPSBuZXcgRmxvYXRpbmdPYmplY3RM
aXN0SGFzaFRhYmxlOworICAgIGVsc2UgewogICAgICAgICAvLyBEb24ndCBpbnNlcnQgdGhlIG9i
amVjdCBhZ2FpbiBpZiBpdCdzIGFscmVhZHkgaW4gdGhlIGxpc3QKLSAgICAgICAgRGVwcmVjYXRl
ZFB0ckxpc3RJdGVyYXRvcjxGbG9hdGluZ09iamVjdD4gaXQoKm1fZmxvYXRpbmdPYmplY3RzKTsK
LSAgICAgICAgRmxvYXRpbmdPYmplY3QqIGY7Ci0gICAgICAgIHdoaWxlICggKGYgPSBpdC5jdXJy
ZW50KCkpICkgewotICAgICAgICAgICAgaWYgKGYtPm1fcmVuZGVyZXIgPT0gbykKLSAgICAgICAg
ICAgICAgICByZXR1cm4gZjsKLSAgICAgICAgICAgICsraXQ7Ci0gICAgICAgIH0KKyAgICAgICAg
RmxvYXRpbmdPYmplY3RMaXN0SGFzaFRhYmxlOjpjb25zdF9pdGVyYXRvciBpdCA9IG1fZmxvYXRp
bmdPYmplY3RzLT5maW5kKG8pOworICAgICAgICBpZiAoaXQgIT0gbV9mbG9hdGluZ09iamVjdHMt
PmVuZCgpKQorICAgICAgICAgICAgcmV0dXJuICppdDsKICAgICB9CiAKICAgICAvLyBDcmVhdGUg
dGhlIHNwZWNpYWwgb2JqZWN0IGVudHJ5ICYgYXBwZW5kIGl0IHRvIHRoZSBsaXN0CkBAIC0zMDg3
LDcgKzMwODMsNyBAQCBSZW5kZXJCbG9jazo6RmxvYXRpbmdPYmplY3QqIFJlbmRlckJsb2NrOjpp
bnNlcnRGbG9hdGluZ09iamVjdChSZW5kZXJCb3gqIG8pCiAgICAgbmV3T2JqLT5tX2lzRGVzY2Vu
ZGFudCA9IHRydWU7CiAgICAgbmV3T2JqLT5tX3JlbmRlcmVyID0gbzsKIAotICAgIG1fZmxvYXRp
bmdPYmplY3RzLT5hcHBlbmQobmV3T2JqKTsKKyAgICBtX2Zsb2F0aW5nT2JqZWN0cy0+YWRkKG5l
d09iaik7CiAgICAgCiAgICAgcmV0dXJuIG5ld09iajsKIH0KQEAgLTMwOTUsMjIgKzMwOTEsMjEg
QEAgUmVuZGVyQmxvY2s6OkZsb2F0aW5nT2JqZWN0KiBSZW5kZXJCbG9jazo6aW5zZXJ0RmxvYXRp
bmdPYmplY3QoUmVuZGVyQm94KiBvKQogdm9pZCBSZW5kZXJCbG9jazo6cmVtb3ZlRmxvYXRpbmdP
YmplY3QoUmVuZGVyQm94KiBvKQogewogICAgIGlmIChtX2Zsb2F0aW5nT2JqZWN0cykgewotICAg
ICAgICBEZXByZWNhdGVkUHRyTGlzdEl0ZXJhdG9yPEZsb2F0aW5nT2JqZWN0PiBpdCgqbV9mbG9h
dGluZ09iamVjdHMpOwotICAgICAgICB3aGlsZSAoaXQuY3VycmVudCgpKSB7Ci0gICAgICAgICAg
ICBpZiAoaXQuY3VycmVudCgpLT5tX3JlbmRlcmVyID09IG8pIHsKLSAgICAgICAgICAgICAgICBp
ZiAoY2hpbGRyZW5JbmxpbmUoKSkgewotICAgICAgICAgICAgICAgICAgICBpbnQgbG9naWNhbFRv
cCA9IGxvZ2ljYWxUb3BGb3JGbG9hdChpdC5jdXJyZW50KCkpOwotICAgICAgICAgICAgICAgICAg
ICBpbnQgbG9naWNhbEJvdHRvbSA9IGxvZ2ljYWxCb3R0b21Gb3JGbG9hdChpdC5jdXJyZW50KCkp
OwotICAgICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICAgICAgLy8gU3BlY2lhbC1j
YXNlIHplcm8tIGFuZCBsZXNzLXRoYW4temVyby1oZWlnaHQgZmxvYXRzOiB0aG9zZSBkb24ndCB0
b3VjaAotICAgICAgICAgICAgICAgICAgICAvLyB0aGUgbGluZSB0aGF0IHRoZXkncmUgb24sIGJ1
dCBpdCBzdGlsbCBuZWVkcyB0byBiZSBkaXJ0aWVkLiBUaGlzIGlzCi0gICAgICAgICAgICAgICAg
ICAgIC8vIGFjY29tcGxpc2hlZCBieSBwcmV0ZW5kaW5nIHRoZXkgaGF2ZSBhIGhlaWdodCBvZiAx
LgotICAgICAgICAgICAgICAgICAgICBsb2dpY2FsQm90dG9tID0gbWF4KGxvZ2ljYWxCb3R0b20s
IGxvZ2ljYWxUb3AgPT0gbnVtZXJpY19saW1pdHM8aW50Pjo6bWF4KCkgPyBsb2dpY2FsVG9wIDog
bG9naWNhbFRvcCArIDEpOwotICAgICAgICAgICAgICAgICAgICBtYXJrTGluZXNEaXJ0eUluQmxv
Y2tSYW5nZSgwLCBsb2dpY2FsQm90dG9tKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAg
ICAgICAgbV9mbG9hdGluZ09iamVjdHMtPnJlbW92ZVJlZihpdC5jdXJyZW50KCkpOworICAgICAg
ICBGbG9hdGluZ09iamVjdExpc3RIYXNoVGFibGU6Oml0ZXJhdG9yIGl0ID0gbV9mbG9hdGluZ09i
amVjdHMtPmZpbmQobyk7CisgICAgICAgIGlmIChpdCAhPSBtX2Zsb2F0aW5nT2JqZWN0cy0+ZW5k
KCkpIHsKKyAgICAgICAgICAgIEZsb2F0aW5nT2JqZWN0KiByID0gKml0OworICAgICAgICAgICAg
aWYgKGNoaWxkcmVuSW5saW5lKCkpIHsKKyAgICAgICAgICAgICAgICBpbnQgbG9naWNhbFRvcCA9
IGxvZ2ljYWxUb3BGb3JGbG9hdChyKTsKKyAgICAgICAgICAgICAgICBpbnQgbG9naWNhbEJvdHRv
bSA9IGxvZ2ljYWxCb3R0b21Gb3JGbG9hdChyKTsKKworICAgICAgICAgICAgICAgIC8vIFNwZWNp
YWwtY2FzZSB6ZXJvLSBhbmQgbGVzcy10aGFuLXplcm8taGVpZ2h0IGZsb2F0czogdGhvc2UgZG9u
J3QgdG91Y2gKKyAgICAgICAgICAgICAgICAvLyB0aGUgbGluZSB0aGF0IHRoZXkncmUgb24sIGJ1
dCBpdCBzdGlsbCBuZWVkcyB0byBiZSBkaXJ0aWVkLiBUaGlzIGlzCisgICAgICAgICAgICAgICAg
Ly8gYWNjb21wbGlzaGVkIGJ5IHByZXRlbmRpbmcgdGhleSBoYXZlIGEgaGVpZ2h0IG9mIDEuCisg
ICAgICAgICAgICAgICAgbG9naWNhbEJvdHRvbSA9IG1heChsb2dpY2FsQm90dG9tLCBsb2dpY2Fs
VG9wID09IG51bWVyaWNfbGltaXRzPGludD46Om1heCgpID8gbG9naWNhbFRvcCA6IGxvZ2ljYWxU
b3AgKyAxKTsKKyAgICAgICAgICAgICAgICBtYXJrTGluZXNEaXJ0eUluQmxvY2tSYW5nZSgwLCBs
b2dpY2FsQm90dG9tKTsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICsraXQ7CisgICAgICAg
ICAgICBkZWxldGUgcjsKKyAgICAgICAgICAgIG1fZmxvYXRpbmdPYmplY3RzLT5yZW1vdmUoaXQp
OwogICAgICAgICB9CiAgICAgfQogfQpAQCAtMzEyMyw2ICszMTE4LDcgQEAgdm9pZCBSZW5kZXJC
bG9jazo6cmVtb3ZlRmxvYXRpbmdPYmplY3RzQmVsb3coRmxvYXRpbmdPYmplY3QqIGxhc3RGbG9h
dCwgaW50IGxvZ2kKICAgICBGbG9hdGluZ09iamVjdCogY3VyciA9IG1fZmxvYXRpbmdPYmplY3Rz
LT5sYXN0KCk7CiAgICAgd2hpbGUgKGN1cnIgIT0gbGFzdEZsb2F0ICYmICghY3Vyci0+aXNQbGFj
ZWQoKSB8fCBsb2dpY2FsVG9wRm9yRmxvYXQoY3VycikgPj0gbG9naWNhbE9mZnNldCkpIHsKICAg
ICAgICAgbV9mbG9hdGluZ09iamVjdHMtPnJlbW92ZUxhc3QoKTsKKyAgICAgICAgZGVsZXRlIGN1
cnI7CiAgICAgICAgIGN1cnIgPSBtX2Zsb2F0aW5nT2JqZWN0cy0+bGFzdCgpOwogICAgIH0KIH0K
QEAgLTMxMzEsMzYgKzMxMjcsNDQgQEAgYm9vbCBSZW5kZXJCbG9jazo6cG9zaXRpb25OZXdGbG9h
dHMoKQogewogICAgIGlmICghbV9mbG9hdGluZ09iamVjdHMpCiAgICAgICAgIHJldHVybiBmYWxz
ZTsKLSAgICAKLSAgICBGbG9hdGluZ09iamVjdCogZmxvYXRpbmdPYmplY3QgPSBtX2Zsb2F0aW5n
T2JqZWN0cy0+bGFzdCgpOworCisgICAgaWYgKG1fZmxvYXRpbmdPYmplY3RzLT5pc0VtcHR5KCkp
CisgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgIC8vIElmIGFsbCBmbG9hdHMgaGF2ZSBhbHJl
YWR5IGJlZW4gcG9zaXRpb25lZCwgdGhlbiB3ZSBoYXZlIG5vIHdvcmsgdG8gZG8uCi0gICAgaWYg
KCFmbG9hdGluZ09iamVjdCB8fCBmbG9hdGluZ09iamVjdC0+aXNQbGFjZWQoKSkKKyAgICBpZiAo
bV9mbG9hdGluZ09iamVjdHMtPmxhc3QoKS0+aXNQbGFjZWQoKSkKICAgICAgICAgcmV0dXJuIGZh
bHNlOwogCiAgICAgLy8gTW92ZSBiYWNrd2FyZHMgdGhyb3VnaCBvdXIgZmxvYXRpbmcgb2JqZWN0
IGxpc3QgdW50aWwgd2UgZmluZCBhIGZsb2F0IHRoYXQgaGFzCiAgICAgLy8gYWxyZWFkeSBiZWVu
IHBvc2l0aW9uZWQuICBUaGVuIHdlJ2xsIGJlIGFibGUgdG8gbW92ZSBmb3J3YXJkLCBwb3NpdGlv
bmluZyBhbGwgb2YKICAgICAvLyB0aGUgbmV3IGZsb2F0cyB0aGF0IG5lZWQgaXQuCi0gICAgRmxv
YXRpbmdPYmplY3QqIGxhc3RGbG9hdCA9IG1fZmxvYXRpbmdPYmplY3RzLT5nZXRQcmV2KCk7Ci0g
ICAgd2hpbGUgKGxhc3RGbG9hdCAmJiAhbGFzdEZsb2F0LT5pc1BsYWNlZCgpKSB7Ci0gICAgICAg
IGZsb2F0aW5nT2JqZWN0ID0gbV9mbG9hdGluZ09iamVjdHMtPnByZXYoKTsKLSAgICAgICAgbGFz
dEZsb2F0ID0gbV9mbG9hdGluZ09iamVjdHMtPmdldFByZXYoKTsKKyAgICBGbG9hdGluZ09iamVj
dExpc3RIYXNoVGFibGU6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbV9mbG9hdGluZ09iamVjdHMtPmVu
ZCgpOworICAgIC0taXQ7IC8vIEdvIHRvIGxhc3QgaXRlbS4KKyAgICBGbG9hdGluZ09iamVjdExp
c3RIYXNoVGFibGU6OmNvbnN0X2l0ZXJhdG9yIGJlZ2luID0gbV9mbG9hdGluZ09iamVjdHMtPmJl
Z2luKCk7CisgICAgRmxvYXRpbmdPYmplY3QqIGxhc3RQbGFjZWRGbG9hdGluZ09iamVjdCA9IDA7
CisgICAgd2hpbGUgKGl0ICE9IGJlZ2luKSB7CisgICAgICAgIC0taXQ7CisgICAgICAgIGlmICgo
Kml0KS0+aXNQbGFjZWQoKSkgeworICAgICAgICAgICAgbGFzdFBsYWNlZEZsb2F0aW5nT2JqZWN0
ID0gKml0OworICAgICAgICAgICAgKytpdDsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9
CiAgICAgfQogCiAgICAgaW50IGxvZ2ljYWxUb3AgPSBsb2dpY2FsSGVpZ2h0KCk7CiAgICAgCiAg
ICAgLy8gVGhlIGZsb2F0IGNhbm5vdCBzdGFydCBhYm92ZSB0aGUgdG9wIHBvc2l0aW9uIG9mIHRo
ZSBsYXN0IHBvc2l0aW9uZWQgZmxvYXQuCi0gICAgaWYgKGxhc3RGbG9hdCkKLSAgICAgICAgbG9n
aWNhbFRvcCA9IG1heChsb2dpY2FsVG9wRm9yRmxvYXQobGFzdEZsb2F0KSwgbG9naWNhbFRvcCk7
CisgICAgaWYgKGxhc3RQbGFjZWRGbG9hdGluZ09iamVjdCkKKyAgICAgICAgbG9naWNhbFRvcCA9
IG1heChsb2dpY2FsVG9wRm9yRmxvYXQobGFzdFBsYWNlZEZsb2F0aW5nT2JqZWN0KSwgbG9naWNh
bFRvcCk7CiAKKyAgICBGbG9hdGluZ09iamVjdExpc3RIYXNoVGFibGU6OmNvbnN0X2l0ZXJhdG9y
IGVuZCA9IG1fZmxvYXRpbmdPYmplY3RzLT5lbmQoKTsKICAgICAvLyBOb3cgd2FsayB0aHJvdWdo
IHRoZSBzZXQgb2YgdW5wb3NpdGlvbmVkIGZsb2F0cyBhbmQgcGxhY2UgdGhlbS4KLSAgICB3aGls
ZSAoZmxvYXRpbmdPYmplY3QpIHsKKyAgICBmb3IgKDsgaXQgIT0gZW5kOyArK2l0KSB7CisgICAg
ICAgICBGbG9hdGluZ09iamVjdCogZmxvYXRpbmdPYmplY3QgPSAqaXQ7CiAgICAgICAgIC8vIFRo
ZSBjb250YWluaW5nIGJsb2NrIGlzIHJlc3BvbnNpYmxlIGZvciBwb3NpdGlvbmluZyBmbG9hdHMs
IHNvIGlmIHdlIGhhdmUgZmxvYXRzIGluIG91cgogICAgICAgICAvLyBsaXN0IHRoYXQgY29tZSBm
cm9tIHNvbWV3aGVyZSBlbHNlLCBkbyBub3QgYXR0ZW1wdCB0byBwb3NpdGlvbiB0aGVtLgotICAg
ICAgICBpZiAoZmxvYXRpbmdPYmplY3QtPnJlbmRlcmVyKCktPmNvbnRhaW5pbmdCbG9jaygpICE9
IHRoaXMpIHsKLSAgICAgICAgICAgIGZsb2F0aW5nT2JqZWN0ID0gbV9mbG9hdGluZ09iamVjdHMt
Pm5leHQoKTsKKyAgICAgICAgaWYgKGZsb2F0aW5nT2JqZWN0LT5yZW5kZXJlcigpLT5jb250YWlu
aW5nQmxvY2soKSAhPSB0aGlzKQogICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIH0KIAog
ICAgICAgICBSZW5kZXJCb3gqIGNoaWxkQm94ID0gZmxvYXRpbmdPYmplY3QtPnJlbmRlcmVyKCk7
CiAgICAgICAgIGludCBjaGlsZExvZ2ljYWxMZWZ0TWFyZ2luID0gc3R5bGUoKS0+aXNMZWZ0VG9S
aWdodERpcmVjdGlvbigpID8gbWFyZ2luU3RhcnRGb3JDaGlsZChjaGlsZEJveCkgOiBtYXJnaW5F
bmRGb3JDaGlsZChjaGlsZEJveCk7CkBAIC0zMjQyLDggKzMyNDYsNiBAQCBib29sIFJlbmRlckJs
b2NrOjpwb3NpdGlvbk5ld0Zsb2F0cygpCiAgICAgICAgIC8vIElmIHRoZSBjaGlsZCBtb3ZlZCwg
d2UgaGF2ZSB0byByZXBhaW50IGl0LgogICAgICAgICBpZiAoY2hpbGRCb3gtPmNoZWNrRm9yUmVw
YWludER1cmluZ0xheW91dCgpKQogICAgICAgICAgICAgY2hpbGRCb3gtPnJlcGFpbnREdXJpbmdM
YXlvdXRJZk1vdmVkKG9sZFJlY3QpOwotCi0gICAgICAgIGZsb2F0aW5nT2JqZWN0ID0gbV9mbG9h
dGluZ09iamVjdHMtPm5leHQoKTsKICAgICB9CiAgICAgcmV0dXJuIHRydWU7CiB9CkBAIC0zMjU0
LDE2ICszMjU2LDIyIEBAIGJvb2wgUmVuZGVyQmxvY2s6OnBvc2l0aW9uTmV3RmxvYXRPbkxpbmUo
RmxvYXRpbmdPYmplY3QqIG5ld0Zsb2F0LCBGbG9hdGluZ09iamVjCiAgICAgaWYgKCFkaWRQb3Np
dGlvbiB8fCAhbmV3RmxvYXQtPm1fcGFnaW5hdGlvblN0cnV0KQogICAgICAgICByZXR1cm4gZGlk
UG9zaXRpb247CiAgICAgCisgICAgQVNTRVJUKG1fZmxvYXRpbmdPYmplY3RzLT5sYXN0KCkgPT0g
bmV3RmxvYXQpOworCiAgICAgaW50IGZsb2F0TG9naWNhbFRvcCA9IGxvZ2ljYWxUb3BGb3JGbG9h
dChuZXdGbG9hdCk7CiAgICAgaW50IHBhZ2luYXRpb25TdHJ1dCA9IG5ld0Zsb2F0LT5tX3BhZ2lu
YXRpb25TdHJ1dDsKLSAgICBGbG9hdGluZ09iamVjdCogZiA9IG1fZmxvYXRpbmdPYmplY3RzLT5s
YXN0KCk7CiAgICAgCi0gICAgQVNTRVJUKGYgPT0gbmV3RmxvYXQpOwotCiAgICAgaWYgKGZsb2F0
TG9naWNhbFRvcCAtIHBhZ2luYXRpb25TdHJ1dCAhPSBsb2dpY2FsSGVpZ2h0KCkpCiAgICAgICAg
IHJldHVybiBkaWRQb3NpdGlvbjsKIAotICAgIGZvciAoZiA9IG1fZmxvYXRpbmdPYmplY3RzLT5w
cmV2KCk7IGYgJiYgZiAhPSBsYXN0RmxvYXRGcm9tUHJldmlvdXNMaW5lOyBmID0gbV9mbG9hdGlu
Z09iamVjdHMtPnByZXYoKSkgeworICAgIEZsb2F0aW5nT2JqZWN0TGlzdEhhc2hUYWJsZTo6Y29u
c3RfaXRlcmF0b3IgaXQgPSBtX2Zsb2F0aW5nT2JqZWN0cy0+ZW5kKCk7CisgICAgLS1pdDsgLy8g
TGFzdCBmbG9hdCBpcyBuZXdGbG9hdCwgc2tpcCB0aGF0IG9uZS4KKyAgICBGbG9hdGluZ09iamVj
dExpc3RIYXNoVGFibGU6OmNvbnN0X2l0ZXJhdG9yIGJlZ2luID0gbV9mbG9hdGluZ09iamVjdHMt
PmJlZ2luKCk7CisgICAgd2hpbGUgKGl0ICE9IGJlZ2luKSB7CisgICAgICAgIC0taXQ7CisgICAg
ICAgIEZsb2F0aW5nT2JqZWN0KiBmID0gKml0OworICAgICAgICBpZiAoZiA9PSBsYXN0RmxvYXRG
cm9tUHJldmlvdXNMaW5lKQorICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGlmIChsb2dpY2Fs
VG9wRm9yRmxvYXQoZikgPT0gbG9naWNhbEhlaWdodCgpKSB7CiAgICAgICAgICAgICBBU1NFUlQo
IWYtPm1fcGFnaW5hdGlvblN0cnV0KTsKICAgICAgICAgICAgIGYtPm1fcGFnaW5hdGlvblN0cnV0
ID0gcGFnaW5hdGlvblN0cnV0OwpAQCAtMzM2OSw5ICszMzc3LDEwIEBAIGludCBSZW5kZXJCbG9j
azo6bG9naWNhbExlZnRPZmZzZXRGb3JMaW5lKGludCBsb2dpY2FsVG9wLCBpbnQgZml4ZWRPZmZz
ZXQsIGJvb2wKICAgICBpZiAobV9mbG9hdGluZ09iamVjdHMpIHsKICAgICAgICAgaWYgKGhlaWdo
dFJlbWFpbmluZykKICAgICAgICAgICAgICpoZWlnaHRSZW1haW5pbmcgPSAxOwotICAgICAgICBG
bG9hdGluZ09iamVjdCogcjsKLSAgICAgICAgRGVwcmVjYXRlZFB0ckxpc3RJdGVyYXRvcjxGbG9h
dGluZ09iamVjdD4gaXQoKm1fZmxvYXRpbmdPYmplY3RzKTsKLSAgICAgICAgZm9yICggOyAociA9
IGl0LmN1cnJlbnQoKSk7ICsraXQpIHsKKworICAgICAgICBGbG9hdGluZ09iamVjdExpc3RIYXNo
VGFibGU6OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IG1fZmxvYXRpbmdPYmplY3RzLT5lbmQoKTsKKyAg
ICAgICAgZm9yIChGbG9hdGluZ09iamVjdExpc3RIYXNoVGFibGU6OmNvbnN0X2l0ZXJhdG9yIGl0
ID0gbV9mbG9hdGluZ09iamVjdHMtPmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkgeworICAgICAg
ICAgICAgRmxvYXRpbmdPYmplY3QqIHIgPSAqaXQ7CiAgICAgICAgICAgICBpZiAoci0+aXNQbGFj
ZWQoKSAmJiBsb2dpY2FsVG9wRm9yRmxvYXQocikgPD0gbG9naWNhbFRvcCAmJiBsb2dpY2FsQm90
dG9tRm9yRmxvYXQocikgPiBsb2dpY2FsVG9wCiAgICAgICAgICAgICAgICAgJiYgci0+dHlwZSgp
ID09IEZsb2F0aW5nT2JqZWN0OjpGbG9hdExlZnQKICAgICAgICAgICAgICAgICAmJiBsb2dpY2Fs
UmlnaHRGb3JGbG9hdChyKSA+IGxlZnQpIHsKQEAgLTMzOTksOSArMzQwOCw5IEBAIGludCBSZW5k
ZXJCbG9jazo6bG9naWNhbFJpZ2h0T2Zmc2V0Rm9yTGluZShpbnQgbG9naWNhbFRvcCwgaW50IGZp
eGVkT2Zmc2V0LCBib29sCiAgICAgaWYgKG1fZmxvYXRpbmdPYmplY3RzKSB7CiAgICAgICAgIGlm
IChoZWlnaHRSZW1haW5pbmcpCiAgICAgICAgICAgICAqaGVpZ2h0UmVtYWluaW5nID0gMTsKLSAg
ICAgICAgRmxvYXRpbmdPYmplY3QqIHI7Ci0gICAgICAgIERlcHJlY2F0ZWRQdHJMaXN0SXRlcmF0
b3I8RmxvYXRpbmdPYmplY3Q+IGl0KCptX2Zsb2F0aW5nT2JqZWN0cyk7Ci0gICAgICAgIGZvciAo
IDsgKHIgPSBpdC5jdXJyZW50KCkpOyArK2l0KSB7CisgICAgICAgIEZsb2F0aW5nT2JqZWN0TGlz
dEhhc2hUYWJsZTo6Y29uc3RfaXRlcmF0b3IgZW5kID0gbV9mbG9hdGluZ09iamVjdHMtPmVuZCgp
OworICAgICAgICBmb3IgKEZsb2F0aW5nT2JqZWN0TGlzdEhhc2hUYWJsZTo6Y29uc3RfaXRlcmF0
b3IgaXQgPSBtX2Zsb2F0aW5nT2JqZWN0cy0+YmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7Cisg
ICAgICAgICAgICBGbG9hdGluZ09iamVjdCogciA9ICppdDsKICAgICAgICAgICAgIGlmIChyLT5p
c1BsYWNlZCgpICYmIGxvZ2ljYWxUb3BGb3JGbG9hdChyKSA8PSBsb2dpY2FsVG9wICYmIGxvZ2lj
YWxCb3R0b21Gb3JGbG9hdChyKSA+IGxvZ2ljYWxUb3AKICAgICAgICAgICAgICAgICAmJiByLT50
eXBlKCkgPT0gRmxvYXRpbmdPYmplY3Q6OkZsb2F0UmlnaHQKICAgICAgICAgICAgICAgICAmJiBs
b2dpY2FsTGVmdEZvckZsb2F0KHIpIDwgcmlnaHQpIHsKQEAgLTM0MzUsOSArMzQ0NCw5IEBAIGlu
dCBSZW5kZXJCbG9jazo6bmV4dEZsb2F0TG9naWNhbEJvdHRvbUJlbG93KGludCBsb2dpY2FsSGVp
Z2h0KSBjb25zdAogICAgICAgICByZXR1cm4gMDsKIAogICAgIGludCBib3R0b20gPSBJTlRfTUFY
OwotICAgIEZsb2F0aW5nT2JqZWN0KiByOwotICAgIERlcHJlY2F0ZWRQdHJMaXN0SXRlcmF0b3I8
RmxvYXRpbmdPYmplY3Q+IGl0KCptX2Zsb2F0aW5nT2JqZWN0cyk7Ci0gICAgZm9yICggOyAociA9
IGl0LmN1cnJlbnQoKSk7ICsraXQpIHsKKyAgICBGbG9hdGluZ09iamVjdExpc3RIYXNoVGFibGU6
OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IG1fZmxvYXRpbmdPYmplY3RzLT5lbmQoKTsKKyAgICBmb3Ig
KEZsb2F0aW5nT2JqZWN0TGlzdEhhc2hUYWJsZTo6Y29uc3RfaXRlcmF0b3IgaXQgPSBtX2Zsb2F0
aW5nT2JqZWN0cy0+YmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7CisgICAgICAgIEZsb2F0aW5n
T2JqZWN0KiByID0gKml0OwogICAgICAgICBpbnQgZmxvYXRCb3R0b20gPSBsb2dpY2FsQm90dG9t
Rm9yRmxvYXQocik7CiAgICAgICAgIGlmIChmbG9hdEJvdHRvbSA+IGxvZ2ljYWxIZWlnaHQpCiAg
ICAgICAgICAgICBib3R0b20gPSBtaW4oZmxvYXRCb3R0b20sIGJvdHRvbSk7CkBAIC0zNDUxLDkg
KzM0NjAsOSBAQCBpbnQgUmVuZGVyQmxvY2s6Omxvd2VzdEZsb2F0TG9naWNhbEJvdHRvbShGbG9h
dGluZ09iamVjdDo6VHlwZSBmbG9hdFR5cGUpIGNvbnN0CiAgICAgaWYgKCFtX2Zsb2F0aW5nT2Jq
ZWN0cykKICAgICAgICAgcmV0dXJuIDA7CiAgICAgaW50IGxvd2VzdEZsb2F0Qm90dG9tID0gMDsK
LSAgICBGbG9hdGluZ09iamVjdCogcjsKLSAgICBEZXByZWNhdGVkUHRyTGlzdEl0ZXJhdG9yPEZs
b2F0aW5nT2JqZWN0PiBpdCgqbV9mbG9hdGluZ09iamVjdHMpOwotICAgIGZvciAoIDsgKHIgPSBp
dC5jdXJyZW50KCkpOyArK2l0KSB7CisgICAgRmxvYXRpbmdPYmplY3RMaXN0SGFzaFRhYmxlOjpj
b25zdF9pdGVyYXRvciBlbmQgPSBtX2Zsb2F0aW5nT2JqZWN0cy0+ZW5kKCk7CisgICAgZm9yIChG
bG9hdGluZ09iamVjdExpc3RIYXNoVGFibGU6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbV9mbG9hdGlu
Z09iamVjdHMtPmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkgeworICAgICAgICBGbG9hdGluZ09i
amVjdCogciA9ICppdDsKICAgICAgICAgaWYgKHItPmlzUGxhY2VkKCkgJiYgci0+dHlwZSgpICYg
ZmxvYXRUeXBlKQogICAgICAgICAgICAgbG93ZXN0RmxvYXRCb3R0b20gPSBtYXgobG93ZXN0Rmxv
YXRCb3R0b20sIGxvZ2ljYWxCb3R0b21Gb3JGbG9hdChyKSk7CiAgICAgfQpAQCAtMzQ5MiwxMSAr
MzUwMSwxOSBAQCB2b2lkIFJlbmRlckJsb2NrOjpjbGVhckZsb2F0cygpCiAKICAgICBpZiAobV9m
bG9hdGluZ09iamVjdHMpIHsKICAgICAgICAgaWYgKGNoaWxkcmVuSW5saW5lKCkpIHsKLSAgICAg
ICAgICAgIG1fZmxvYXRpbmdPYmplY3RzLT5maXJzdCgpOwotICAgICAgICAgICAgd2hpbGUgKEZs
b2F0aW5nT2JqZWN0KiBmID0gbV9mbG9hdGluZ09iamVjdHMtPnRha2UoKSkKKyAgICAgICAgICAg
IEZsb2F0aW5nT2JqZWN0TGlzdEhhc2hUYWJsZTo6aXRlcmF0b3IgZW5kID0gbV9mbG9hdGluZ09i
amVjdHMtPmVuZCgpOworICAgICAgICAgICAgZm9yIChGbG9hdGluZ09iamVjdExpc3RIYXNoVGFi
bGU6Oml0ZXJhdG9yIGl0ID0gbV9mbG9hdGluZ09iamVjdHMtPmJlZ2luKCk7IGl0ICE9IGVuZDsg
KytpdCkgeworICAgICAgICAgICAgICAgIEZsb2F0aW5nT2JqZWN0KiBmID0gKml0OwogICAgICAg
ICAgICAgICAgIGZsb2F0TWFwLmFkZChmLT5tX3JlbmRlcmVyLCBmKTsKLSAgICAgICAgfSBlbHNl
Ci0gICAgICAgICAgICBtX2Zsb2F0aW5nT2JqZWN0cy0+Y2xlYXIoKTsKKyAgICAgICAgICAgIH0K
KyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIEZsb2F0aW5nT2JqZWN0TGlzdEhhc2hUYWJs
ZTo6aXRlcmF0b3IgZW5kID0gbV9mbG9hdGluZ09iamVjdHMtPmVuZCgpOworICAgICAgICAgICAg
Zm9yIChGbG9hdGluZ09iamVjdExpc3RIYXNoVGFibGU6Oml0ZXJhdG9yIGl0ID0gbV9mbG9hdGlu
Z09iamVjdHMtPmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkgeworICAgICAgICAgICAgICAgIEZs
b2F0aW5nT2JqZWN0KiBmID0gKml0OworICAgICAgICAgICAgICAgIGRlbGV0ZSBmOworICAgICAg
ICAgICAgfQorICAgICAgICB9CisgICAgICAgIG1fZmxvYXRpbmdPYmplY3RzLT5jbGVhcigpOwog
ICAgIH0KIAogICAgIC8vIFdlIHNob3VsZCBub3QgcHJvY2VzcyBmbG9hdHMgaWYgdGhlIHBhcmVu
dCBub2RlIGlzIG5vdCBhIFJlbmRlckJsb2NrLiBPdGhlcndpc2UsIHdlIHdpbGwgYWRkIApAQCAt
MzU0Miw3ICszNTU5LDkgQEAgdm9pZCBSZW5kZXJCbG9jazo6Y2xlYXJGbG9hdHMoKQogICAgICAg
ICBpbnQgY2hhbmdlTG9naWNhbFRvcCA9IG51bWVyaWNfbGltaXRzPGludD46Om1heCgpOwogICAg
ICAgICBpbnQgY2hhbmdlTG9naWNhbEJvdHRvbSA9IG51bWVyaWNfbGltaXRzPGludD46Om1pbigp
OwogICAgICAgICBpZiAobV9mbG9hdGluZ09iamVjdHMpIHsKLSAgICAgICAgICAgIGZvciAoRmxv
YXRpbmdPYmplY3QqIGYgPSBtX2Zsb2F0aW5nT2JqZWN0cy0+Zmlyc3QoKTsgZjsgZiA9IG1fZmxv
YXRpbmdPYmplY3RzLT5uZXh0KCkpIHsKKyAgICAgICAgICAgIEZsb2F0aW5nT2JqZWN0TGlzdEhh
c2hUYWJsZTo6Y29uc3RfaXRlcmF0b3IgZW5kID0gbV9mbG9hdGluZ09iamVjdHMtPmVuZCgpOwor
ICAgICAgICAgICAgZm9yIChGbG9hdGluZ09iamVjdExpc3RIYXNoVGFibGU6OmNvbnN0X2l0ZXJh
dG9yIGl0ID0gbV9mbG9hdGluZ09iamVjdHMtPmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkgewor
ICAgICAgICAgICAgICAgIEZsb2F0aW5nT2JqZWN0KiBmID0gKml0OwogICAgICAgICAgICAgICAg
IEZsb2F0aW5nT2JqZWN0KiBvbGRGbG9hdGluZ09iamVjdCA9IGZsb2F0TWFwLmdldChmLT5tX3Jl
bmRlcmVyKTsKICAgICAgICAgICAgICAgICBpbnQgbG9naWNhbEJvdHRvbSA9IGxvZ2ljYWxCb3R0
b21Gb3JGbG9hdChmKTsKICAgICAgICAgICAgICAgICBpZiAob2xkRmxvYXRpbmdPYmplY3QpIHsK
QEAgLTM1ODgsOCArMzYwNyw5IEBAIGludCBSZW5kZXJCbG9jazo6YWRkT3ZlcmhhbmdpbmdGbG9h
dHMoUmVuZGVyQmxvY2sqIGNoaWxkLCBpbnQgbG9naWNhbExlZnRPZmZzZXQsCiAKICAgICAvLyBG
bG9hdHMgdGhhdCB3aWxsIHJlbWFpbiB0aGUgY2hpbGQncyByZXNwb25zaWJpbGl0eSB0byBwYWlu
dCBzaG91bGQgZmFjdG9yIGludG8gaXRzCiAgICAgLy8gb3ZlcmZsb3cuCi0gICAgRGVwcmVjYXRl
ZFB0ckxpc3RJdGVyYXRvcjxGbG9hdGluZ09iamVjdD4gaXQoKmNoaWxkLT5tX2Zsb2F0aW5nT2Jq
ZWN0cyk7Ci0gICAgZm9yIChGbG9hdGluZ09iamVjdCogcjsgKHIgPSBpdC5jdXJyZW50KCkpOyAr
K2l0KSB7CisgICAgRmxvYXRpbmdPYmplY3RMaXN0SGFzaFRhYmxlOjpjb25zdF9pdGVyYXRvciBj
aGlsZEVuZCA9IGNoaWxkLT5tX2Zsb2F0aW5nT2JqZWN0cy0+ZW5kKCk7CisgICAgZm9yIChGbG9h
dGluZ09iamVjdExpc3RIYXNoVGFibGU6OmNvbnN0X2l0ZXJhdG9yIGNoaWxkSXQgPSBjaGlsZC0+
bV9mbG9hdGluZ09iamVjdHMtPmJlZ2luKCk7IGNoaWxkSXQgIT0gY2hpbGRFbmQ7ICsrY2hpbGRJ
dCkgeworICAgICAgICBGbG9hdGluZ09iamVjdCogciA9ICpjaGlsZEl0OwogICAgICAgICBpbnQg
bG9naWNhbEJvdHRvbSA9IGNoaWxkLT5sb2dpY2FsVG9wKCkgKyBsb2dpY2FsQm90dG9tRm9yRmxv
YXQocik7CiAgICAgICAgIGxvd2VzdEZsb2F0TG9naWNhbEJvdHRvbSA9IG1heChsb3dlc3RGbG9h
dExvZ2ljYWxCb3R0b20sIGxvZ2ljYWxCb3R0b20pOwogCkBAIC0zNjEzLDExICszNjMzLDEwIEBA
IGludCBSZW5kZXJCbG9jazo6YWRkT3ZlcmhhbmdpbmdGbG9hdHMoUmVuZGVyQmxvY2sqIGNoaWxk
LCBpbnQgbG9naWNhbExlZnRPZmZzZXQsCiAgICAgICAgICAgICAgICAgZmxvYXRpbmdPYmotPm1f
aXNEZXNjZW5kYW50ID0gdHJ1ZTsKIAogICAgICAgICAgICAgICAgIC8vIFdlIGNyZWF0ZSB0aGUg
ZmxvYXRpbmcgb2JqZWN0IGxpc3QgbGF6aWx5LgotICAgICAgICAgICAgICAgIGlmICghbV9mbG9h
dGluZ09iamVjdHMpIHsKLSAgICAgICAgICAgICAgICAgICAgbV9mbG9hdGluZ09iamVjdHMgPSBu
ZXcgRGVwcmVjYXRlZFB0ckxpc3Q8RmxvYXRpbmdPYmplY3Q+OwotICAgICAgICAgICAgICAgICAg
ICBtX2Zsb2F0aW5nT2JqZWN0cy0+c2V0QXV0b0RlbGV0ZSh0cnVlKTsKLSAgICAgICAgICAgICAg
ICB9Ci0gICAgICAgICAgICAgICAgbV9mbG9hdGluZ09iamVjdHMtPmFwcGVuZChmbG9hdGluZ09i
aik7CisgICAgICAgICAgICAgICAgaWYgKCFtX2Zsb2F0aW5nT2JqZWN0cykKKyAgICAgICAgICAg
ICAgICAgICAgbV9mbG9hdGluZ09iamVjdHMgPSBuZXcgRmxvYXRpbmdPYmplY3RMaXN0SGFzaFRh
YmxlOworCisgICAgICAgICAgICAgICAgbV9mbG9hdGluZ09iamVjdHMtPmFkZChmbG9hdGluZ09i
aik7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICBpZiAobWFr
ZUNoaWxkUGFpbnRPdGhlckZsb2F0cyAmJiAhci0+bV9zaG91bGRQYWludCAmJiAhci0+bV9yZW5k
ZXJlci0+aGFzU2VsZlBhaW50aW5nTGF5ZXIoKSAmJgpAQCAtMzY0NiwyMiArMzY2NSwxMiBAQCB2
b2lkIFJlbmRlckJsb2NrOjphZGRJbnRydWRpbmdGbG9hdHMoUmVuZGVyQmxvY2sqIHByZXYsIGlu
dCBsb2dpY2FsTGVmdE9mZnNldCwgaQogICAgICAgICByZXR1cm47CiAKICAgICBsb2dpY2FsTGVm
dE9mZnNldCArPSAoc3R5bGUoKS0+aXNIb3Jpem9udGFsV3JpdGluZ01vZGUoKSA/IG1hcmdpbkxl
ZnQoKSA6IG1hcmdpblRvcCgpKTsKLSAgICAgICAgICAgICAgICAKLSAgICBEZXByZWNhdGVkUHRy
TGlzdEl0ZXJhdG9yPEZsb2F0aW5nT2JqZWN0PiBpdCgqcHJldi0+bV9mbG9hdGluZ09iamVjdHMp
OwotICAgIGZvciAoRmxvYXRpbmdPYmplY3QgKnI7IChyID0gaXQuY3VycmVudCgpKTsgKytpdCkg
eworCisgICAgRmxvYXRpbmdPYmplY3RMaXN0SGFzaFRhYmxlOjpjb25zdF9pdGVyYXRvciBwcmV2
RW5kID0gcHJldi0+bV9mbG9hdGluZ09iamVjdHMtPmVuZCgpOworICAgIGZvciAoRmxvYXRpbmdP
YmplY3RMaXN0SGFzaFRhYmxlOjpjb25zdF9pdGVyYXRvciBwcmV2SXQgPSBwcmV2LT5tX2Zsb2F0
aW5nT2JqZWN0cy0+YmVnaW4oKTsgcHJldkl0ICE9IHByZXZFbmQ7ICsrcHJldkl0KSB7CisgICAg
ICAgIEZsb2F0aW5nT2JqZWN0KiByID0gKnByZXZJdDsKICAgICAgICAgaWYgKGxvZ2ljYWxCb3R0
b21Gb3JGbG9hdChyKSA+IGxvZ2ljYWxUb3BPZmZzZXQpIHsKLSAgICAgICAgICAgIC8vIFRoZSBv
YmplY3QgbWF5IGFscmVhZHkgYmUgaW4gb3VyIGxpc3QuIENoZWNrIGZvciBpdCB1cCBmcm9udCB0
byBhdm9pZAotICAgICAgICAgICAgLy8gY3JlYXRpbmcgZHVwbGljYXRlIGVudHJpZXMuCi0gICAg
ICAgICAgICBGbG9hdGluZ09iamVjdCogZiA9IDA7Ci0gICAgICAgICAgICBpZiAobV9mbG9hdGlu
Z09iamVjdHMpIHsKLSAgICAgICAgICAgICAgICBEZXByZWNhdGVkUHRyTGlzdEl0ZXJhdG9yPEZs
b2F0aW5nT2JqZWN0PiBpdCgqbV9mbG9hdGluZ09iamVjdHMpOwotICAgICAgICAgICAgICAgIHdo
aWxlICgoZiA9IGl0LmN1cnJlbnQoKSkpIHsKLSAgICAgICAgICAgICAgICAgICAgaWYgKGYtPm1f
cmVuZGVyZXIgPT0gci0+bV9yZW5kZXJlcikKLSAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFr
OwotICAgICAgICAgICAgICAgICAgICArK2l0OwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAg
ICAgIH0KLSAgICAgICAgICAgIGlmICghZikgeworICAgICAgICAgICAgaWYgKCFtX2Zsb2F0aW5n
T2JqZWN0cyB8fCAhbV9mbG9hdGluZ09iamVjdHMtPmNvbnRhaW5zKHItPm1fcmVuZGVyZXIpKSB7
CiAgICAgICAgICAgICAgICAgaW50IGxlZnRPZmZzZXQgPSBzdHlsZSgpLT5pc0hvcml6b250YWxX
cml0aW5nTW9kZSgpID8gbG9naWNhbExlZnRPZmZzZXQgOiBsb2dpY2FsVG9wT2Zmc2V0OwogICAg
ICAgICAgICAgICAgIGludCB0b3BPZmZzZXQgPSBzdHlsZSgpLT5pc0hvcml6b250YWxXcml0aW5n
TW9kZSgpID8gbG9naWNhbFRvcE9mZnNldCA6IGxvZ2ljYWxMZWZ0T2Zmc2V0OwogICAgICAgICAg
ICAgICAgIApAQCAtMzY4MywxMSArMzY5Miw5IEBAIHZvaWQgUmVuZGVyQmxvY2s6OmFkZEludHJ1
ZGluZ0Zsb2F0cyhSZW5kZXJCbG9jayogcHJldiwgaW50IGxvZ2ljYWxMZWZ0T2Zmc2V0LCBpCiAg
ICAgICAgICAgICAgICAgZmxvYXRpbmdPYmotPm1fcmVuZGVyZXIgPSByLT5tX3JlbmRlcmVyOwog
ICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgIC8vIFdlIGNyZWF0ZSB0aGUgZmxvYXRp
bmcgb2JqZWN0IGxpc3QgbGF6aWx5LgotICAgICAgICAgICAgICAgIGlmICghbV9mbG9hdGluZ09i
amVjdHMpIHsKLSAgICAgICAgICAgICAgICAgICAgbV9mbG9hdGluZ09iamVjdHMgPSBuZXcgRGVw
cmVjYXRlZFB0ckxpc3Q8RmxvYXRpbmdPYmplY3Q+OwotICAgICAgICAgICAgICAgICAgICBtX2Zs
b2F0aW5nT2JqZWN0cy0+c2V0QXV0b0RlbGV0ZSh0cnVlKTsKLSAgICAgICAgICAgICAgICB9Ci0g
ICAgICAgICAgICAgICAgbV9mbG9hdGluZ09iamVjdHMtPmFwcGVuZChmbG9hdGluZ09iaik7Cisg
ICAgICAgICAgICAgICAgaWYgKCFtX2Zsb2F0aW5nT2JqZWN0cykKKyAgICAgICAgICAgICAgICAg
ICAgbV9mbG9hdGluZ09iamVjdHMgPSBuZXcgRmxvYXRpbmdPYmplY3RMaXN0SGFzaFRhYmxlOwor
ICAgICAgICAgICAgICAgIG1fZmxvYXRpbmdPYmplY3RzLT5hZGQoZmxvYXRpbmdPYmopOwogICAg
ICAgICAgICAgfQogICAgICAgICB9CiAgICAgfQpAQCAtMzY5OSwxNyArMzcwNiw5IEBAIGJvb2wg
UmVuZGVyQmxvY2s6OmF2b2lkc0Zsb2F0cygpIGNvbnN0CiAgICAgcmV0dXJuIFJlbmRlckJveDo6
YXZvaWRzRmxvYXRzKCkgfHwgIXN0eWxlKCktPmhhc0F1dG9Db2x1bW5Db3VudCgpIHx8ICFzdHls
ZSgpLT5oYXNBdXRvQ29sdW1uV2lkdGgoKTsKIH0KIAotYm9vbCBSZW5kZXJCbG9jazo6Y29udGFp
bnNGbG9hdChSZW5kZXJPYmplY3QqIG8pCitib29sIFJlbmRlckJsb2NrOjpjb250YWluc0Zsb2F0
KFJlbmRlckJveCogbykKIHsKLSAgICBpZiAobV9mbG9hdGluZ09iamVjdHMpIHsKLSAgICAgICAg
RGVwcmVjYXRlZFB0ckxpc3RJdGVyYXRvcjxGbG9hdGluZ09iamVjdD4gaXQoKm1fZmxvYXRpbmdP
YmplY3RzKTsKLSAgICAgICAgd2hpbGUgKGl0LmN1cnJlbnQoKSkgewotICAgICAgICAgICAgaWYg
KGl0LmN1cnJlbnQoKS0+bV9yZW5kZXJlciA9PSBvKQotICAgICAgICAgICAgICAgIHJldHVybiB0
cnVlOwotICAgICAgICAgICAgKytpdDsKLSAgICAgICAgfQotICAgIH0KLSAgICByZXR1cm4gZmFs
c2U7CisgICAgcmV0dXJuIG1fZmxvYXRpbmdPYmplY3RzICYmIG1fZmxvYXRpbmdPYmplY3RzLT5j
b250YWlucyhvKTsKIH0KIAogdm9pZCBSZW5kZXJCbG9jazo6bWFya0FsbERlc2NlbmRhbnRzV2l0
aEZsb2F0c0ZvckxheW91dChSZW5kZXJCb3gqIGZsb2F0VG9SZW1vdmUsIGJvb2wgaW5MYXlvdXQp
CkBAIC0zODY3LDkgKzM4NjYsMTAgQEAgYm9vbCBSZW5kZXJCbG9jazo6aGl0VGVzdEZsb2F0cyhj
b25zdCBIaXRUZXN0UmVxdWVzdCYgcmVxdWVzdCwgSGl0VGVzdFJlc3VsdCYgcmUKICAgICAgICAg
dHkgKz0gdG9SZW5kZXJWaWV3KHRoaXMpLT5mcmFtZVZpZXcoKS0+c2Nyb2xsWSgpOwogICAgIH0K
IAotICAgIEZsb2F0aW5nT2JqZWN0KiBmbG9hdGluZ09iamVjdDsKLSAgICBEZXByZWNhdGVkUHRy
TGlzdEl0ZXJhdG9yPEZsb2F0aW5nT2JqZWN0PiBpdCgqbV9mbG9hdGluZ09iamVjdHMpOwotICAg
IGZvciAoaXQudG9MYXN0KCk7IChmbG9hdGluZ09iamVjdCA9IGl0LmN1cnJlbnQoKSk7IC0taXQp
IHsKKyAgICBGbG9hdGluZ09iamVjdExpc3RIYXNoVGFibGU6OmNvbnN0X2l0ZXJhdG9yIGJlZ2lu
ID0gbV9mbG9hdGluZ09iamVjdHMtPmJlZ2luKCk7CisgICAgZm9yIChGbG9hdGluZ09iamVjdExp
c3RIYXNoVGFibGU6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbV9mbG9hdGluZ09iamVjdHMtPmVuZCgp
OyBpdCAhPSBiZWdpbjspIHsKKyAgICAgICAgLS1pdDsKKyAgICAgICAgRmxvYXRpbmdPYmplY3Qq
IGZsb2F0aW5nT2JqZWN0ID0gKml0OwogICAgICAgICBpZiAoZmxvYXRpbmdPYmplY3QtPm1fc2hv
dWxkUGFpbnQgJiYgIWZsb2F0aW5nT2JqZWN0LT5tX3JlbmRlcmVyLT5oYXNTZWxmUGFpbnRpbmdM
YXllcigpKSB7CiAgICAgICAgICAgICBpbnQgeE9mZnNldCA9IHhQb3NpdGlvbkZvckZsb2F0SW5j
bHVkaW5nTWFyZ2luKGZsb2F0aW5nT2JqZWN0KSAtIGZsb2F0aW5nT2JqZWN0LT5tX3JlbmRlcmVy
LT54KCk7CiAgICAgICAgICAgICBpbnQgeU9mZnNldCA9IHlQb3NpdGlvbkZvckZsb2F0SW5jbHVk
aW5nTWFyZ2luKGZsb2F0aW5nT2JqZWN0KSAtIGZsb2F0aW5nT2JqZWN0LT5tX3JlbmRlcmVyLT55
KCk7CkBAIC01NDk0LDkgKzU0OTQsOSBAQCB2b2lkIFJlbmRlckJsb2NrOjphZGp1c3RGb3JCb3Jk
ZXJGaXQoaW50IHgsIGludCYgbGVmdCwgaW50JiByaWdodCkgY29uc3QKICAgICAgICAgfQogICAg
ICAgICAKICAgICAgICAgaWYgKG1fZmxvYXRpbmdPYmplY3RzKSB7Ci0gICAgICAgICAgICBGbG9h
dGluZ09iamVjdCogcjsKLSAgICAgICAgICAgIERlcHJlY2F0ZWRQdHJMaXN0SXRlcmF0b3I8Rmxv
YXRpbmdPYmplY3Q+IGl0KCptX2Zsb2F0aW5nT2JqZWN0cyk7Ci0gICAgICAgICAgICBmb3IgKDsg
KHIgPSBpdC5jdXJyZW50KCkpOyArK2l0KSB7CisgICAgICAgICAgICBGbG9hdGluZ09iamVjdExp
c3RIYXNoVGFibGU6OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IG1fZmxvYXRpbmdPYmplY3RzLT5lbmQo
KTsKKyAgICAgICAgICAgIGZvciAoRmxvYXRpbmdPYmplY3RMaXN0SGFzaFRhYmxlOjpjb25zdF9p
dGVyYXRvciBpdCA9IG1fZmxvYXRpbmdPYmplY3RzLT5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQp
IHsKKyAgICAgICAgICAgICAgICBGbG9hdGluZ09iamVjdCogciA9ICppdDsKICAgICAgICAgICAg
ICAgICAvLyBPbmx5IGV4YW1pbmUgdGhlIG9iamVjdCBpZiBvdXIgbV9zaG91bGRQYWludCBmbGFn
IGlzIHNldC4KICAgICAgICAgICAgICAgICBpZiAoci0+bV9zaG91bGRQYWludCkgewogICAgICAg
ICAgICAgICAgICAgICBpbnQgZmxvYXRMZWZ0ID0geFBvc2l0aW9uRm9yRmxvYXRJbmNsdWRpbmdN
YXJnaW4ocikgLSByLT5tX3JlbmRlcmVyLT54KCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2suaCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5k
ZXJCbG9jay5oCmluZGV4IDJkYjM1NzBiYjBiMWUxNWQ1YjYxMzkwNGVmNjlkNTUzYWM2YWZkMzku
LmNjY2JkYTBmNGU0MzU4MGRjNDc4MjBlZmVhNTJhMmVmMzgzOTRkNmYgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCbG9jay5oCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9SZW5kZXJCbG9jay5oCkBAIC0yOSw2ICsyOSw3IEBACiAjaW5jbHVkZSAiUmVu
ZGVyTGluZUJveExpc3QuaCIKICNpbmNsdWRlICJSb290SW5saW5lQm94LmgiCiAjaW5jbHVkZSA8
d3RmL0xpc3RIYXNoU2V0Lmg+CisjaW5jbHVkZSA8d3RmL0xpc3RIYXNoVGFibGUuaD4KIAogbmFt
ZXNwYWNlIFdlYkNvcmUgewogCkBAIC05NSw3ICs5Niw3IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFs
IHZvaWQgbWFya0ZvclBhZ2luYXRpb25SZWxheW91dElmTmVlZGVkKCk7CiAgICAgCiAgICAgYm9v
bCBjb250YWluc0Zsb2F0cygpIHsgcmV0dXJuIG1fZmxvYXRpbmdPYmplY3RzICYmICFtX2Zsb2F0
aW5nT2JqZWN0cy0+aXNFbXB0eSgpOyB9Ci0gICAgYm9vbCBjb250YWluc0Zsb2F0KFJlbmRlck9i
amVjdCopOworICAgIGJvb2wgY29udGFpbnNGbG9hdChSZW5kZXJCb3gqKTsKIAogICAgIGludCBh
dmFpbGFibGVMb2dpY2FsV2lkdGhGb3JMaW5lKGludCBwb3NpdGlvbiwgYm9vbCBmaXJzdExpbmUp
IGNvbnN0OwogICAgIGludCBsb2dpY2FsUmlnaHRPZmZzZXRGb3JMaW5lKGludCBwb3NpdGlvbiwg
Ym9vbCBmaXJzdExpbmUpIGNvbnN0IHsgcmV0dXJuIGxvZ2ljYWxSaWdodE9mZnNldEZvckxpbmUo
cG9zaXRpb24sIGxvZ2ljYWxSaWdodE9mZnNldEZvckNvbnRlbnQoKSwgZmlyc3RMaW5lKTsgfQpA
QCAtNjk1LDkgKzY5NiwxMyBAQCBwcml2YXRlOgogICAgIGludCBhZGp1c3RGb3JVbnNwbGl0dGFi
bGVDaGlsZChSZW5kZXJCb3gqIGNoaWxkLCBpbnQgbG9naWNhbE9mZnNldCwgYm9vbCBpbmNsdWRl
TWFyZ2lucyA9IGZhbHNlKTsgLy8gSWYgdGhlIGNoaWxkIGlzIHVuc3BsaXR0YWJsZSBhbmQgY2Fu
J3QgZml0IG9uIHRoZSBjdXJyZW50IHBhZ2UsIHJldHVybiB0aGUgdG9wIG9mIHRoZSBuZXh0IHBh
Z2UvY29sdW1uLgogICAgIHZvaWQgYWRqdXN0TGluZVBvc2l0aW9uRm9yUGFnaW5hdGlvbihSb290
SW5saW5lQm94KiwgaW50JiBkZWx0YU9mZnNldCk7IC8vIENvbXB1dGVzIGEgZGVsdGFPZmZzZXQg
dmFsdWUgdGhhdCBwdXQgYSBsaW5lIGF0IHRoZSB0b3Agb2YgdGhlIG5leHQgcGFnZSBpZiBpdCBk
b2Vzbid0IGZpdCBvbiB0aGUgY3VycmVudCBwYWdlLgogCi0gICAgdHlwZWRlZiBQb3NpdGlvbmVk
T2JqZWN0c0xpc3RIYXNoU2V0Ojpjb25zdF9pdGVyYXRvciBJdGVyYXRvcjsKLSAgICBEZXByZWNh
dGVkUHRyTGlzdDxGbG9hdGluZ09iamVjdD4qIG1fZmxvYXRpbmdPYmplY3RzOworICAgIHN0cnVj
dCBGbG9hdGluZ09iamVjdFJlbmRlcmVyRXh0cmFjdG9yIHsKKyAgICAgICAgc3RhdGljIGlubGlu
ZSBSZW5kZXJCb3gqIGV4dHJhY3QoY29uc3QgRmxvYXRpbmdPYmplY3QqIG9iamVjdCkgeyByZXR1
cm4gb2JqZWN0LT5tX3JlbmRlcmVyOyB9CisgICAgfTsKKyAgICB0eXBlZGVmIExpc3RIYXNoVGFi
bGU8UmVuZGVyQm94KiwgRmxvYXRpbmdPYmplY3QqLCBGbG9hdGluZ09iamVjdFJlbmRlcmVyRXh0
cmFjdG9yPiBGbG9hdGluZ09iamVjdExpc3RIYXNoVGFibGU7CisgICAgRmxvYXRpbmdPYmplY3RM
aXN0SGFzaFRhYmxlKiBtX2Zsb2F0aW5nT2JqZWN0czsKICAgICAKKyAgICB0eXBlZGVmIFBvc2l0
aW9uZWRPYmplY3RzTGlzdEhhc2hTZXQ6OmNvbnN0X2l0ZXJhdG9yIEl0ZXJhdG9yOwogICAgIFBv
c2l0aW9uZWRPYmplY3RzTGlzdEhhc2hTZXQqIG1fcG9zaXRpb25lZE9iamVjdHM7CiAKICAgICAv
LyBBbGxvY2F0ZWQgb25seSB3aGVuIHNvbWUgb2YgdGhlc2UgZmllbGRzIGhhdmUgbm9uLWRlZmF1
bHQgdmFsdWVzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQmxv
Y2tMaW5lTGF5b3V0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCbG9ja0xp
bmVMYXlvdXQuY3BwCmluZGV4IGZiZWQwNjlmYmI1MGQ3OGU3MGJkMDkwNjRiMDI3MDg3NmMzYzU3
ZmUuLjkyNzYwYzhjNTQyMjE2NTk3ZWMyMDk0NjA0MGY3MDdmNjUyZTUzYWUgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCbG9ja0xpbmVMYXlvdXQuY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCbG9ja0xpbmVMYXlvdXQuY3BwCkBAIC02
MDgsNyArNjA4LDcgQEAgdm9pZCBSZW5kZXJCbG9jazo6bGF5b3V0SW5saW5lQ2hpbGRyZW4oYm9v
bCByZWxheW91dENoaWxkcmVuLCBpbnQmIHJlcGFpbnRMb2dpY2EKICAgICAgICAgICAgIH0KICAg
ICAgICAgfQogCi0gICAgICAgIEZsb2F0aW5nT2JqZWN0KiBsYXN0RmxvYXQgPSBtX2Zsb2F0aW5n
T2JqZWN0cyA/IG1fZmxvYXRpbmdPYmplY3RzLT5sYXN0KCkgOiAwOworICAgICAgICBGbG9hdGlu
Z09iamVjdCogbGFzdEZsb2F0ID0gKG1fZmxvYXRpbmdPYmplY3RzICYmICFtX2Zsb2F0aW5nT2Jq
ZWN0cy0+aXNFbXB0eSgpKSA/IG1fZmxvYXRpbmdPYmplY3RzLT5sYXN0KCkgOiAwOwogCiAgICAg
ICAgIExpbmVNaWRwb2ludFN0YXRlJiBsaW5lTWlkcG9pbnRTdGF0ZSA9IHJlc29sdmVyLm1pZHBv
aW50U3RhdGUoKTsKIApAQCAtNjc3LDcgKzY3Nyw3IEBAIHZvaWQgUmVuZGVyQmxvY2s6OmxheW91
dElubGluZUNoaWxkcmVuKGJvb2wgcmVsYXlvdXRDaGlsZHJlbiwgaW50JiByZXBhaW50TG9naWNh
CiAgICAgICAgICAgICBib29sIGh5cGhlbmF0ZWQ7CiAgICAgICAgICAgICAKICAgICAgICAgICAg
IElubGluZUl0ZXJhdG9yIG9sZEVuZCA9IGVuZDsKLSAgICAgICAgICAgIEZsb2F0aW5nT2JqZWN0
KiBsYXN0RmxvYXRGcm9tUHJldmlvdXNMaW5lID0gbV9mbG9hdGluZ09iamVjdHMgPyBtX2Zsb2F0
aW5nT2JqZWN0cy0+bGFzdCgpIDogMDsKKyAgICAgICAgICAgIEZsb2F0aW5nT2JqZWN0KiBsYXN0
RmxvYXRGcm9tUHJldmlvdXNMaW5lID0gKG1fZmxvYXRpbmdPYmplY3RzICYmICFtX2Zsb2F0aW5n
T2JqZWN0cy0+aXNFbXB0eSgpKSA/IG1fZmxvYXRpbmdPYmplY3RzLT5sYXN0KCkgOiAwOwogICAg
ICAgICAgICAgZW5kID0gZmluZE5leHRMaW5lQnJlYWsocmVzb2x2ZXIsIGZpcnN0TGluZSwgaXNM
aW5lRW1wdHksIHByZXZpb3VzTGluZUJyb2tlQ2xlYW5seSwgaHlwaGVuYXRlZCwgJmNsZWFyLCBs
YXN0RmxvYXRGcm9tUHJldmlvdXNMaW5lKTsKICAgICAgICAgICAgIGlmIChyZXNvbHZlci5wb3Np
dGlvbigpLmF0RW5kKCkpIHsKICAgICAgICAgICAgICAgICByZXNvbHZlci5kZWxldGVSdW5zKCk7
CkBAIC04MjgsMTMgKzgyOCwxNyBAQCB2b2lkIFJlbmRlckJsb2NrOjpsYXlvdXRJbmxpbmVDaGls
ZHJlbihib29sIHJlbGF5b3V0Q2hpbGRyZW4sIGludCYgcmVwYWludExvZ2ljYQogICAgICAgICAg
ICAgfQogCiAgICAgICAgICAgICBpZiAobV9mbG9hdGluZ09iamVjdHMgJiYgbGFzdFJvb3RCb3go
KSkgeworICAgICAgICAgICAgICAgIEZsb2F0aW5nT2JqZWN0TGlzdEhhc2hUYWJsZTo6Y29uc3Rf
aXRlcmF0b3IgaXQgPSBtX2Zsb2F0aW5nT2JqZWN0cy0+YmVnaW4oKTsKKyAgICAgICAgICAgICAg
ICBGbG9hdGluZ09iamVjdExpc3RIYXNoVGFibGU6OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IG1fZmxv
YXRpbmdPYmplY3RzLT5lbmQoKTsKICAgICAgICAgICAgICAgICBpZiAobGFzdEZsb2F0KSB7Ci0g
ICAgICAgICAgICAgICAgICAgIGZvciAoRmxvYXRpbmdPYmplY3QqIGYgPSBtX2Zsb2F0aW5nT2Jq
ZWN0cy0+bGFzdCgpOyBmICE9IGxhc3RGbG9hdDsgZiA9IG1fZmxvYXRpbmdPYmplY3RzLT5wcmV2
KCkpIHsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICBtX2Zsb2F0
aW5nT2JqZWN0cy0+bmV4dCgpOwotICAgICAgICAgICAgICAgIH0gZWxzZQotICAgICAgICAgICAg
ICAgICAgICBtX2Zsb2F0aW5nT2JqZWN0cy0+Zmlyc3QoKTsKLSAgICAgICAgICAgICAgICBmb3Ig
KEZsb2F0aW5nT2JqZWN0KiBmID0gbV9mbG9hdGluZ09iamVjdHMtPmN1cnJlbnQoKTsgZjsgZiA9
IG1fZmxvYXRpbmdPYmplY3RzLT5uZXh0KCkpIHsKKyAgICAgICAgICAgICAgICAgICAgRmxvYXRp
bmdPYmplY3RMaXN0SGFzaFRhYmxlOjpjb25zdF9pdGVyYXRvciBsYXN0RmxvYXRJdGVyYXRvciA9
IG1fZmxvYXRpbmdPYmplY3RzLT5maW5kKGxhc3RGbG9hdC0+bV9yZW5kZXJlcik7CisgICAgICAg
ICAgICAgICAgICAgIEFTU0VSVChsYXN0RmxvYXRJdGVyYXRvciAhPSBlbmQpOworICAgICAgICAg
ICAgICAgICAgICBBU1NFUlQobGFzdEZsb2F0ID09ICpsYXN0RmxvYXRJdGVyYXRvcik7CisgICAg
ICAgICAgICAgICAgICAgICsrbGFzdEZsb2F0SXRlcmF0b3I7CisgICAgICAgICAgICAgICAgICAg
IGl0ID0gbGFzdEZsb2F0SXRlcmF0b3I7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAg
ICAgIGZvciAoOyBpdCAhPSBlbmQ7ICsraXQpIHsKKyAgICAgICAgICAgICAgICAgICAgRmxvYXRp
bmdPYmplY3QqIGYgPSAqaXQ7CiAgICAgICAgICAgICAgICAgICAgIGxhc3RSb290Qm94KCktPmZs
b2F0cygpLmFwcGVuZChmLT5tX3JlbmRlcmVyKTsKICAgICAgICAgICAgICAgICAgICAgQVNTRVJU
KGYtPm1fcmVuZGVyZXIgPT0gZmxvYXRzW2Zsb2F0SW5kZXhdLm9iamVjdCk7CiAgICAgICAgICAg
ICAgICAgICAgIC8vIElmIGEgZmxvYXQncyBnZW9tZXRyeSBoYXMgY2hhbmdlZCwgZ2l2ZSB1cCBv
biBzeW5jaW5nIHdpdGggY2xlYW4gbGluZXMuCkBAIC04NDIsNyArODQ2LDcgQEAgdm9pZCBSZW5k
ZXJCbG9jazo6bGF5b3V0SW5saW5lQ2hpbGRyZW4oYm9vbCByZWxheW91dENoaWxkcmVuLCBpbnQm
IHJlcGFpbnRMb2dpY2EKICAgICAgICAgICAgICAgICAgICAgICAgIGNoZWNrRm9yRW5kTGluZU1h
dGNoID0gZmFsc2U7CiAgICAgICAgICAgICAgICAgICAgIGZsb2F0SW5kZXgrKzsKICAgICAgICAg
ICAgICAgICB9Ci0gICAgICAgICAgICAgICAgbGFzdEZsb2F0ID0gbV9mbG9hdGluZ09iamVjdHMt
Pmxhc3QoKTsKKyAgICAgICAgICAgICAgICBsYXN0RmxvYXQgPSAhbV9mbG9hdGluZ09iamVjdHMt
PmlzRW1wdHkoKSA/IG1fZmxvYXRpbmdPYmplY3RzLT5sYXN0KCkgOiAwOwogICAgICAgICAgICAg
fQogCiAgICAgICAgICAgICBsaW5lTWlkcG9pbnRTdGF0ZS5yZXNldCgpOwpAQCAtOTA1LDE1ICs5
MDksMTkgQEAgdm9pZCBSZW5kZXJCbG9jazo6bGF5b3V0SW5saW5lQ2hpbGRyZW4oYm9vbCByZWxh
eW91dENoaWxkcmVuLCBpbnQmIHJlcGFpbnRMb2dpY2EKICAgICAgICAgICAgICAgICB0cmFpbGlu
Z0Zsb2F0c0xpbmVCb3gtPnNldE92ZXJmbG93RnJvbUxvZ2ljYWxSZWN0cyhsb2dpY2FsTGF5b3V0
T3ZlcmZsb3csIGxvZ2ljYWxWaXN1YWxPdmVyZmxvdyk7CiAgICAgICAgICAgICAgICAgdHJhaWxp
bmdGbG9hdHNMaW5lQm94LT5zZXRCbG9ja0xvZ2ljYWxIZWlnaHQobG9naWNhbEhlaWdodCgpKTsK
ICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgRmxvYXRpbmdPYmplY3RMaXN0SGFzaFRhYmxl
Ojpjb25zdF9pdGVyYXRvciBpdCA9IG1fZmxvYXRpbmdPYmplY3RzLT5iZWdpbigpOworICAgICAg
ICAgICAgRmxvYXRpbmdPYmplY3RMaXN0SGFzaFRhYmxlOjpjb25zdF9pdGVyYXRvciBlbmQgPSBt
X2Zsb2F0aW5nT2JqZWN0cy0+ZW5kKCk7CiAgICAgICAgICAgICBpZiAobGFzdEZsb2F0KSB7Ci0g
ICAgICAgICAgICAgICAgZm9yIChGbG9hdGluZ09iamVjdCogZiA9IG1fZmxvYXRpbmdPYmplY3Rz
LT5sYXN0KCk7IGYgIT0gbGFzdEZsb2F0OyBmID0gbV9mbG9hdGluZ09iamVjdHMtPnByZXYoKSkg
ewotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBtX2Zsb2F0aW5nT2JqZWN0cy0+
bmV4dCgpOwotICAgICAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICAgICAgbV9mbG9hdGluZ09i
amVjdHMtPmZpcnN0KCk7Ci0gICAgICAgICAgICBmb3IgKEZsb2F0aW5nT2JqZWN0KiBmID0gbV9m
bG9hdGluZ09iamVjdHMtPmN1cnJlbnQoKTsgZjsgZiA9IG1fZmxvYXRpbmdPYmplY3RzLT5uZXh0
KCkpCi0gICAgICAgICAgICAgICAgbGFzdFJvb3RCb3goKS0+ZmxvYXRzKCkuYXBwZW5kKGYtPm1f
cmVuZGVyZXIpOwotICAgICAgICAgICAgbGFzdEZsb2F0ID0gbV9mbG9hdGluZ09iamVjdHMtPmxh
c3QoKTsKKyAgICAgICAgICAgICAgICBGbG9hdGluZ09iamVjdExpc3RIYXNoVGFibGU6OmNvbnN0
X2l0ZXJhdG9yIGxhc3RGbG9hdEl0ZXJhdG9yID0gbV9mbG9hdGluZ09iamVjdHMtPmZpbmQobGFz
dEZsb2F0LT5tX3JlbmRlcmVyKTsKKyAgICAgICAgICAgICAgICBBU1NFUlQobGFzdEZsb2F0SXRl
cmF0b3IgIT0gZW5kKTsKKyAgICAgICAgICAgICAgICBBU1NFUlQobGFzdEZsb2F0ID09ICpsYXN0
RmxvYXRJdGVyYXRvcik7CisgICAgICAgICAgICAgICAgKytsYXN0RmxvYXRJdGVyYXRvcjsKKyAg
ICAgICAgICAgICAgICBpdCA9IGxhc3RGbG9hdEl0ZXJhdG9yOworICAgICAgICAgICAgfQorICAg
ICAgICAgICAgZm9yICg7IGl0ICE9IGVuZDsgKytpdCkKKyAgICAgICAgICAgICAgICBsYXN0Um9v
dEJveCgpLT5mbG9hdHMoKS5hcHBlbmQoKCppdCktPm1fcmVuZGVyZXIpOworICAgICAgICAgICAg
bGFzdEZsb2F0ID0gIW1fZmxvYXRpbmdPYmplY3RzLT5pc0VtcHR5KCkgPyBtX2Zsb2F0aW5nT2Jq
ZWN0cy0+bGFzdCgpIDogMDsKICAgICAgICAgfQogICAgICAgICBzaXplX3QgZmxvYXRDb3VudCA9
IGZsb2F0cy5zaXplKCk7CiAgICAgICAgIC8vIEZsb2F0cyB0aGF0IGRpZCBub3QgaGF2ZSBsYXlv
dXQgZGlkIG5vdCByZXBhaW50IHdoZW4gd2UgbGFpZCB0aGVtIG91dC4gVGhleSB3b3VsZCBoYXZl
CkBAIC0xMTUwLDcgKzExNTgsOSBAQCBib29sIFJlbmRlckJsb2NrOjptYXRjaGVkRW5kTGluZShj
b25zdCBJbmxpbmVCaWRpUmVzb2x2ZXImIHJlc29sdmVyLCBjb25zdCBJbmxpbgogCiAgICAgICAg
IGludCBsb2dpY2FsQm90dG9tID0gbGFzdExpbmUtPmJsb2NrTG9naWNhbEhlaWdodCgpICsgYWJz
KGRlbHRhKTsKIAotICAgICAgICBmb3IgKEZsb2F0aW5nT2JqZWN0KiBmID0gbV9mbG9hdGluZ09i
amVjdHMtPmZpcnN0KCk7IGY7IGYgPSBtX2Zsb2F0aW5nT2JqZWN0cy0+bmV4dCgpKSB7CisgICAg
ICAgIEZsb2F0aW5nT2JqZWN0TGlzdEhhc2hUYWJsZTo6Y29uc3RfaXRlcmF0b3IgZW5kID0gbV9m
bG9hdGluZ09iamVjdHMtPmVuZCgpOworICAgICAgICBmb3IgKEZsb2F0aW5nT2JqZWN0TGlzdEhh
c2hUYWJsZTo6Y29uc3RfaXRlcmF0b3IgaXQgPSBtX2Zsb2F0aW5nT2JqZWN0cy0+YmVnaW4oKTsg
aXQgIT0gZW5kOyArK2l0KSB7CisgICAgICAgICAgICBGbG9hdGluZ09iamVjdCogZiA9ICppdDsK
ICAgICAgICAgICAgIGlmIChsb2dpY2FsQm90dG9tRm9yRmxvYXQoZikgPj0gbG9naWNhbFRvcCAm
JiBsb2dpY2FsQm90dG9tRm9yRmxvYXQoZikgPCBsb2dpY2FsQm90dG9tKQogICAgICAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgfQpAQCAtMTE4NCw3ICsxMTk0LDkgQEAgYm9vbCBS
ZW5kZXJCbG9jazo6bWF0Y2hlZEVuZExpbmUoY29uc3QgSW5saW5lQmlkaVJlc29sdmVyJiByZXNv
bHZlciwgY29uc3QgSW5saW4KIAogICAgICAgICAgICAgICAgIGludCBsb2dpY2FsQm90dG9tID0g
bGFzdExpbmUtPmJsb2NrTG9naWNhbEhlaWdodCgpICsgYWJzKGRlbHRhKTsKIAotICAgICAgICAg
ICAgICAgIGZvciAoRmxvYXRpbmdPYmplY3QqIGYgPSBtX2Zsb2F0aW5nT2JqZWN0cy0+Zmlyc3Qo
KTsgZjsgZiA9IG1fZmxvYXRpbmdPYmplY3RzLT5uZXh0KCkpIHsKKyAgICAgICAgICAgICAgICBG
bG9hdGluZ09iamVjdExpc3RIYXNoVGFibGU6OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IG1fZmxvYXRp
bmdPYmplY3RzLT5lbmQoKTsKKyAgICAgICAgICAgICAgICBmb3IgKEZsb2F0aW5nT2JqZWN0TGlz
dEhhc2hUYWJsZTo6Y29uc3RfaXRlcmF0b3IgaXQgPSBtX2Zsb2F0aW5nT2JqZWN0cy0+YmVnaW4o
KTsgaXQgIT0gZW5kOyArK2l0KSB7CisgICAgICAgICAgICAgICAgICAgIEZsb2F0aW5nT2JqZWN0
KiBmID0gKml0OwogICAgICAgICAgICAgICAgICAgICBpZiAobG9naWNhbEJvdHRvbUZvckZsb2F0
KGYpID49IGxvZ2ljYWxUb3AgJiYgbG9naWNhbEJvdHRvbUZvckZsb2F0KGYpIDwgbG9naWNhbEJv
dHRvbSkKICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgICAg
ICAgICB9Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>83816</attachid>
            <date>2011-02-25 08:18:10 -0800</date>
            <delta_ts>2011-02-25 10:31:05 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-54972-20110225171807.patch</filename>
            <type>text/plain</type>
            <size>40264</size>
            <attacher name="Benjamin Poulain">benjamin</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogNzk1OTYKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9DaGFuZ2VMb2cgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nCmluZGV4IDNj
NTAxMzM2MTFhMjE4OGMzYmYxOGJkOGUwNmI1NmRiNTUwMjRjOWUuLmIyOWViMzhiNTIzYWIwMDcz
YzIyMmQyNjU4MDExN2RhNzllNDAzOTUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwpAQCAtMSwz
ICsxLDI2IEBACisyMDExLTAyLTI1ICBCZW5qYW1pbiBQb3VsYWluICA8aWtpcG91QGdtYWlsLmNv
bT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBFbGlt
aW5hdGUgRGVwcmVjYXRlZFB0ckxpc3QgZnJvbSBSZW5kZXJCbG9jaworICAgICAgICBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NTQ5NzIKKworICAgICAgICBBZGQgbWV0
aG9kcyBmaW5kKCkgYW5kIGNvbnRhaW5zKCkgdXNpbmcgYW4gYWRhcHRvciB0byBMaXN0SGFzaFNl
dC4KKyAgICAgICAgVGhvc2UgbWV0aG9kIGFyZSBsaWtlIHRoZSBvbmUgb2YgSGFzaFNldCwgdGhl
eSBhbGxvdyB0byBmaW5kIG9iamVjdHMKKyAgICAgICAgYmFzZWQgb24gYSBkaWZmZXJlbnQga2V5
IHRoYW4gdGhlIG9uZSB1c2VkIHRvIGRlZmluZSB0aGUgc2V0LgorCisgICAgICAgIEFkZCBjb252
ZW5pZW5jZSBtZXRob2RzIGZvciBkaXJlY3QgYWNjZXNzIHRvIHRoZSBoZWFkIGFuZCB0YWlsIG9m
IHRoZSBsaXN0LgorICAgICAgICBUaG9zZSBtZXRob2RzIGFyZSBwcm92aWRpbmcgc2ltaWxhciBB
UEkvYmVoYXZpb3IgYXMgVmVjdG9yLgorCisgICAgICAgICogd3RmL0xpc3RIYXNoU2V0Lmg6Cisg
ICAgICAgIChXVEY6Ojo6Zmlyc3QpOgorICAgICAgICAoV1RGOjo6Omxhc3QpOgorICAgICAgICAo
V1RGOjo6OnJlbW92ZUxhc3QpOgorICAgICAgICAoV1RGOjpMaXN0SGFzaFNldFRyYW5zbGF0b3JB
ZGFwdGVyOjpoYXNoKToKKyAgICAgICAgKFdURjo6TGlzdEhhc2hTZXRUcmFuc2xhdG9yQWRhcHRl
cjo6ZXF1YWwpOgorICAgICAgICAoV1RGOjo6OmZpbmQpOgorICAgICAgICAoV1RGOjo6OmNvbnRh
aW5zKToKKwogMjAxMS0wMi0yNCAgTWljaGFlbCBTYWJvZmYgIDxtc2Fib2ZmQGFwcGxlLmNvbT4K
IAogICAgICAgICBSZXZpZXdlZCBieSBPbGl2ZXIgSHVudC4KZGlmZiAtLWdpdCBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS93dGYvTGlzdEhhc2hTZXQuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93
dGYvTGlzdEhhc2hTZXQuaAppbmRleCBlOTE2ZWYyZTM0N2FjYWNmN2NmZjFjNDliYjMwMTU3OTk2
MDdkN2UzLi5iMGQwZTQzZDU1ZWJkODI2NWVhOTllNDY0ZjIyOWZlMjk5MTkzOTk0IDEwMDY0NAot
LS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd3RmL0xpc3RIYXNoU2V0LmgKKysrIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL3d0Zi9MaXN0SGFzaFNldC5oCkBAIC0xLDUgKzEsNiBAQAogLyoKICAq
IENvcHlyaWdodCAoQykgMjAwNSwgMjAwNiwgMjAwNywgMjAwOCBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEsIEJlbmphbWluIFBvdWxhaW4gPGlr
aXBvdUBnbWFpbC5jb20+CiAgKgogICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlv
dSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJt
cyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKQEAgLTkwLDEwICs5MSwyNCBAQCBu
YW1lc3BhY2UgV1RGIHsKICAgICAgICAgY29uc3RfaXRlcmF0b3IgYmVnaW4oKSBjb25zdDsKICAg
ICAgICAgY29uc3RfaXRlcmF0b3IgZW5kKCkgY29uc3Q7CiAKKyAgICAgICAgVmFsdWVUeXBlJiBm
aXJzdCgpOworICAgICAgICBjb25zdCBWYWx1ZVR5cGUmIGZpcnN0KCkgY29uc3Q7CisKKyAgICAg
ICAgVmFsdWVUeXBlJiBsYXN0KCk7CisgICAgICAgIGNvbnN0IFZhbHVlVHlwZSYgbGFzdCgpIGNv
bnN0OworICAgICAgICB2b2lkIHJlbW92ZUxhc3QoKTsKKwogICAgICAgICBpdGVyYXRvciBmaW5k
KGNvbnN0IFZhbHVlVHlwZSYpOwogICAgICAgICBjb25zdF9pdGVyYXRvciBmaW5kKGNvbnN0IFZh
bHVlVHlwZSYpIGNvbnN0OwogICAgICAgICBib29sIGNvbnRhaW5zKGNvbnN0IFZhbHVlVHlwZSYp
IGNvbnN0OwogCisgICAgICAgIC8vIEFuIGFsdGVybmF0ZSB2ZXJzaW9uIG9mIGZpbmQoKSB0aGF0
IGZpbmRzIHRoZSBvYmplY3QgYnkgaGFzaGluZyBhbmQgY29tcGFyaW5nCisgICAgICAgIC8vIHdp
dGggc29tZSBvdGhlciB0eXBlLCB0byBhdm9pZCB0aGUgY29zdCBvZiB0eXBlIGNvbnZlcnNpb24u
CisgICAgICAgIC8vIFRoZSBIYXNoVHJhbnNsYXRvciBpbnRlcmZhY2UgaXMgZGVmaW5lZCBpbiBI
YXNoU2V0LgorICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBIYXNoVHJhbnNs
YXRvcj4gaXRlcmF0b3IgZmluZChjb25zdCBUJik7CisgICAgICAgIHRlbXBsYXRlPHR5cGVuYW1l
IFQsIHR5cGVuYW1lIEhhc2hUcmFuc2xhdG9yPiBjb25zdF9pdGVyYXRvciBmaW5kKGNvbnN0IFQm
KSBjb25zdDsKKyAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgSGFzaFRyYW5z
bGF0b3I+IGJvb2wgY29udGFpbnMoY29uc3QgVCYpIGNvbnN0OworCiAgICAgICAgIC8vIHRoZSBy
ZXR1cm4gdmFsdWUgaXMgYSBwYWlyIG9mIGFuIGl0ZXJhdG9yIHRvIHRoZSBuZXcgdmFsdWUncyBs
b2NhdGlvbiwgCiAgICAgICAgIC8vIGFuZCBhIGJvb2wgdGhhdCBpcyB0cnVlIGlmIGFuIG5ldyBl
bnRyeSB3YXMgYWRkZWQKICAgICAgICAgcGFpcjxpdGVyYXRvciwgYm9vbD4gYWRkKGNvbnN0IFZh
bHVlVHlwZSYpOwpAQCAtNDQyLDYgKzQ1Nyw0MiBAQCBuYW1lc3BhY2UgV1RGIHsKICAgICB9CiAK
ICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBULCBzaXplX3QgaW5saW5lQ2FwYWNpdHksIHR5cGVuYW1l
IFU+CisgICAgaW5saW5lIFQmIExpc3RIYXNoU2V0PFQsIGlubGluZUNhcGFjaXR5LCBVPjo6Zmly
c3QoKQorICAgIHsKKyAgICAgICAgQVNTRVJUKCFpc0VtcHR5KCkpOworICAgICAgICByZXR1cm4g
bV9oZWFkLT5tX3ZhbHVlOworICAgIH0KKworICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQsIHNpemVf
dCBpbmxpbmVDYXBhY2l0eSwgdHlwZW5hbWUgVT4KKyAgICBpbmxpbmUgY29uc3QgVCYgTGlzdEhh
c2hTZXQ8VCwgaW5saW5lQ2FwYWNpdHksIFU+OjpmaXJzdCgpIGNvbnN0CisgICAgeworICAgICAg
ICBBU1NFUlQoIWlzRW1wdHkoKSk7CisgICAgICAgIHJldHVybiBtX2hlYWQtPm1fdmFsdWU7Cisg
ICAgfQorCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVCwgc2l6ZV90IGlubGluZUNhcGFjaXR5LCB0
eXBlbmFtZSBVPgorICAgIGlubGluZSBUJiBMaXN0SGFzaFNldDxULCBpbmxpbmVDYXBhY2l0eSwg
VT46Omxhc3QoKQorICAgIHsKKyAgICAgICAgQVNTRVJUKCFpc0VtcHR5KCkpOworICAgICAgICBy
ZXR1cm4gbV90YWlsLT5tX3ZhbHVlOworICAgIH0KKworICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQs
IHNpemVfdCBpbmxpbmVDYXBhY2l0eSwgdHlwZW5hbWUgVT4KKyAgICBpbmxpbmUgY29uc3QgVCYg
TGlzdEhhc2hTZXQ8VCwgaW5saW5lQ2FwYWNpdHksIFU+OjpsYXN0KCkgY29uc3QKKyAgICB7Cisg
ICAgICAgIEFTU0VSVCghaXNFbXB0eSgpKTsKKyAgICAgICAgcmV0dXJuIG1fdGFpbC0+bV92YWx1
ZTsKKyAgICB9CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBULCBzaXplX3QgaW5saW5lQ2FwYWNp
dHksIHR5cGVuYW1lIFU+CisgICAgaW5saW5lIHZvaWQgTGlzdEhhc2hTZXQ8VCwgaW5saW5lQ2Fw
YWNpdHksIFU+OjpyZW1vdmVMYXN0KCkKKyAgICB7CisgICAgICAgIEFTU0VSVCghaXNFbXB0eSgp
KTsKKyAgICAgICAgbV9pbXBsLnJlbW92ZShtX3RhaWwpOworICAgICAgICB1bmxpbmtBbmREZWxl
dGUobV90YWlsKTsKKyAgICB9CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBULCBzaXplX3QgaW5s
aW5lQ2FwYWNpdHksIHR5cGVuYW1lIFU+CiAgICAgaW5saW5lIHR5cGVuYW1lIExpc3RIYXNoU2V0
PFQsIGlubGluZUNhcGFjaXR5LCBVPjo6aXRlcmF0b3IgTGlzdEhhc2hTZXQ8VCwgaW5saW5lQ2Fw
YWNpdHksIFU+OjpmaW5kKGNvbnN0IFZhbHVlVHlwZSYgdmFsdWUpCiAgICAgewogICAgICAgICB0
eXBlZGVmIExpc3RIYXNoU2V0VHJhbnNsYXRvcjxWYWx1ZVR5cGUsIGlubGluZUNhcGFjaXR5LCBI
YXNoRnVuY3Rpb25zPiBUcmFuc2xhdG9yOwpAQCAtNDYxLDYgKzUxMiw0NSBAQCBuYW1lc3BhY2Ug
V1RGIHsKICAgICAgICAgcmV0dXJuIG1ha2VDb25zdEl0ZXJhdG9yKCppdCk7CiAgICAgfQogCisg
ICAgdGVtcGxhdGU8dHlwZW5hbWUgVmFsdWVUeXBlLCBzaXplX3QgaW5saW5lQ2FwYWNpdHksIHR5
cGVuYW1lIFQsIHR5cGVuYW1lIFRyYW5zbGF0b3I+CisgICAgc3RydWN0IExpc3RIYXNoU2V0VHJh
bnNsYXRvckFkYXB0ZXIgeworICAgIHByaXZhdGU6CisgICAgICAgIHR5cGVkZWYgTGlzdEhhc2hT
ZXROb2RlPFZhbHVlVHlwZSwgaW5saW5lQ2FwYWNpdHk+IE5vZGU7CisgICAgcHVibGljOgorICAg
ICAgICBzdGF0aWMgdW5zaWduZWQgaGFzaChjb25zdCBUJiBrZXkpIHsgcmV0dXJuIFRyYW5zbGF0
b3I6Omhhc2goa2V5KTsgfQorICAgICAgICBzdGF0aWMgYm9vbCBlcXVhbChOb2RlKiBjb25zdCYg
YSwgY29uc3QgVCYgYikgeyByZXR1cm4gVHJhbnNsYXRvcjo6ZXF1YWwoYS0+bV92YWx1ZSwgYik7
IH0KKyAgICB9OworCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVmFsdWVUeXBlLCBzaXplX3QgaW5s
aW5lQ2FwYWNpdHksIHR5cGVuYW1lIFU+CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5h
bWUgSGFzaFRyYW5zbGF0b3I+CisgICAgaW5saW5lIHR5cGVuYW1lIExpc3RIYXNoU2V0PFZhbHVl
VHlwZSwgaW5saW5lQ2FwYWNpdHksIFU+OjppdGVyYXRvciBMaXN0SGFzaFNldDxWYWx1ZVR5cGUs
IGlubGluZUNhcGFjaXR5LCBVPjo6ZmluZChjb25zdCBUJiB2YWx1ZSkKKyAgICB7CisgICAgICAg
IHR5cGVkZWYgTGlzdEhhc2hTZXRUcmFuc2xhdG9yQWRhcHRlcjxWYWx1ZVR5cGUsIGlubGluZUNh
cGFjaXR5LCBULCBIYXNoVHJhbnNsYXRvcj4gQWRhcHRlcjsKKyAgICAgICAgSW1wbFR5cGVDb25z
dEl0ZXJhdG9yIGl0ID0gbV9pbXBsLnRlbXBsYXRlIGZpbmQ8VCwgQWRhcHRlcj4odmFsdWUpOwor
ICAgICAgICBpZiAoaXQgPT0gbV9pbXBsLmVuZCgpKQorICAgICAgICAgICAgcmV0dXJuIGVuZCgp
OworICAgICAgICByZXR1cm4gbWFrZUl0ZXJhdG9yKCppdCk7CisgICAgfQorCisgICAgdGVtcGxh
dGU8dHlwZW5hbWUgVmFsdWVUeXBlLCBzaXplX3QgaW5saW5lQ2FwYWNpdHksIHR5cGVuYW1lIFU+
CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgSGFzaFRyYW5zbGF0b3I+CisgICAg
aW5saW5lIHR5cGVuYW1lIExpc3RIYXNoU2V0PFZhbHVlVHlwZSwgaW5saW5lQ2FwYWNpdHksIFU+
Ojpjb25zdF9pdGVyYXRvciBMaXN0SGFzaFNldDxWYWx1ZVR5cGUsIGlubGluZUNhcGFjaXR5LCBV
Pjo6ZmluZChjb25zdCBUJiB2YWx1ZSkgY29uc3QKKyAgICB7CisgICAgICAgIHR5cGVkZWYgTGlz
dEhhc2hTZXRUcmFuc2xhdG9yQWRhcHRlcjxWYWx1ZVR5cGUsIGlubGluZUNhcGFjaXR5LCBULCBI
YXNoVHJhbnNsYXRvcj4gQWRhcHRlcjsKKyAgICAgICAgSW1wbFR5cGVDb25zdEl0ZXJhdG9yIGl0
ID0gbV9pbXBsLnRlbXBsYXRlIGZpbmQ8VCwgQWRhcHRlcj4odmFsdWUpOworICAgICAgICBpZiAo
aXQgPT0gbV9pbXBsLmVuZCgpKQorICAgICAgICAgICAgcmV0dXJuIGVuZCgpOworICAgICAgICBy
ZXR1cm4gbWFrZUNvbnN0SXRlcmF0b3IoKml0KTsKKyAgICB9CisKKyAgICB0ZW1wbGF0ZTx0eXBl
bmFtZSBWYWx1ZVR5cGUsIHNpemVfdCBpbmxpbmVDYXBhY2l0eSwgdHlwZW5hbWUgVT4KKyAgICB0
ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBIYXNoVHJhbnNsYXRvcj4KKyAgICBpbmxpbmUg
Ym9vbCBMaXN0SGFzaFNldDxWYWx1ZVR5cGUsIGlubGluZUNhcGFjaXR5LCBVPjo6Y29udGFpbnMo
Y29uc3QgVCYgdmFsdWUpIGNvbnN0CisgICAgeworICAgICAgICB0eXBlZGVmIExpc3RIYXNoU2V0
VHJhbnNsYXRvckFkYXB0ZXI8VmFsdWVUeXBlLCBpbmxpbmVDYXBhY2l0eSwgVCwgSGFzaFRyYW5z
bGF0b3I+IEFkYXB0ZXI7CisgICAgICAgIHJldHVybiBtX2ltcGwudGVtcGxhdGUgY29udGFpbnM8
VCwgQWRhcHRlcj4odmFsdWUpOworICAgIH0KKwogICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQsIHNp
emVfdCBpbmxpbmVDYXBhY2l0eSwgdHlwZW5hbWUgVT4KICAgICBpbmxpbmUgYm9vbCBMaXN0SGFz
aFNldDxULCBpbmxpbmVDYXBhY2l0eSwgVT46OmNvbnRhaW5zKGNvbnN0IFZhbHVlVHlwZSYgdmFs
dWUpIGNvbnN0CiAgICAgewpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nIGIv
U291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCmluZGV4IDNiMjNhZGYxYzg2YTJiNmM2YzYwZmNjNjcw
ZWUyOTc3NzM2NmUxY2YuLmExOGFhN2YxNDIzOTU4OWNmZTE1Yzc3YTZhZWJiZjA2Mzg4YjBjM2Eg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViQ29y
ZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSw0NCBAQAorMjAxMS0wMi0yNSAgQmVuamFtaW4gUG91bGFp
biAgPGlraXBvdUBnbWFpbC5jb20+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BT
ISkuCisKKyAgICAgICAgRWxpbWluYXRlIERlcHJlY2F0ZWRQdHJMaXN0IGZyb20gUmVuZGVyQmxv
Y2sKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTU0OTcy
CisKKyAgICAgICAgUmVmYWN0b3IgUmVuZGVyQmxvY2sgdG8gZ2V0IHJpZCBvZiB0aGUgRGVwcmVj
YXRlZFB0ckxpc3QuCisgICAgICAgIFRoZSBmbG9hdGluZyBvYmplY3RzIGFyZSBzdG9yZWQgaW4g
YSBMaXN0SGFzaFNldC4KKworICAgICAgICBSZWZhY3RvcmluZyBjb3ZlcmVkIGJ5IGV4aXN0aW5n
IHRlc3QuCisKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyQmxvY2suY3BwOgorICAgICAgICAo
V2ViQ29yZTo6UmVuZGVyQmxvY2s6OmFkZE92ZXJmbG93RnJvbUZsb2F0cyk6CisgICAgICAgIChX
ZWJDb3JlOjpSZW5kZXJCbG9jazo6cmVwYWludE92ZXJoYW5naW5nRmxvYXRzKToKKyAgICAgICAg
KFdlYkNvcmU6OlJlbmRlckJsb2NrOjpwYWludEZsb2F0cyk6CisgICAgICAgIChXZWJDb3JlOjpS
ZW5kZXJCbG9jazo6c2VsZWN0aW9uR2Fwcyk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCbG9j
azo6aW5zZXJ0RmxvYXRpbmdPYmplY3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQmxvY2s6
OnJlbW92ZUZsb2F0aW5nT2JqZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJsb2NrOjpy
ZW1vdmVGbG9hdGluZ09iamVjdHNCZWxvdyk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCbG9j
azo6cG9zaXRpb25OZXdGbG9hdHMpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQmxvY2s6OnBv
c2l0aW9uTmV3RmxvYXRPbkxpbmUpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQmxvY2s6Omxv
Z2ljYWxMZWZ0T2Zmc2V0Rm9yTGluZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCbG9jazo6
bG9naWNhbFJpZ2h0T2Zmc2V0Rm9yTGluZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCbG9j
azo6bmV4dEZsb2F0TG9naWNhbEJvdHRvbUJlbG93KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRl
ckJsb2NrOjpsb3dlc3RGbG9hdExvZ2ljYWxCb3R0b20pOgorICAgICAgICAoV2ViQ29yZTo6UmVu
ZGVyQmxvY2s6OmNsZWFyRmxvYXRzKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJsb2NrOjph
ZGRPdmVyaGFuZ2luZ0Zsb2F0cyk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCbG9jazo6YWRk
SW50cnVkaW5nRmxvYXRzKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJsb2NrOjpjb250YWlu
c0Zsb2F0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJsb2NrOjpoaXRUZXN0RmxvYXRzKToK
KyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJsb2NrOjphZGp1c3RGb3JCb3JkZXJGaXQpOgorICAg
ICAgICAqIHJlbmRlcmluZy9SZW5kZXJCbG9jay5oOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVy
QmxvY2s6OkZsb2F0aW5nT2JqZWN0SGFzaEZ1bmN0aW9uczo6aGFzaCk6CisgICAgICAgIChXZWJD
b3JlOjpSZW5kZXJCbG9jazo6RmxvYXRpbmdPYmplY3RIYXNoRnVuY3Rpb25zOjplcXVhbCk6Cisg
ICAgICAgIChXZWJDb3JlOjpSZW5kZXJCbG9jazo6RmxvYXRpbmdPYmplY3RIYXNoVHJhbnNsYXRv
cjo6aGFzaCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCbG9jazo6RmxvYXRpbmdPYmplY3RI
YXNoVHJhbnNsYXRvcjo6ZXF1YWwpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJCbG9ja0xp
bmVMYXlvdXQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQmxvY2s6OmxheW91dElubGlu
ZUNoaWxkcmVuKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJsb2NrOjptYXRjaGVkRW5kTGlu
ZSk6CisKIDIwMTEtMDItMjQgIE1pc2hhIFR5dXR5dW5payAgPG1pY2hhZWwudHl1dHl1bmlrQG5v
a2lhLmNvbT4KIAogICAgICAgICBSZXZpZXdlZCBieSBBbmRyZWFzIEtsaW5nLgpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJsb2NrLmNwcCBiL1NvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9SZW5kZXJCbG9jay5jcHAKaW5kZXggNWVjMmIzMThlMGJjYTM4MDM4NTY5
N2EyZDlmNDlkMWY3MDk3NTZlOC4uZjY2NzkwNWZmZWJmYjlmYmIyMWU5MDhkYmM3OTY2ZjljN2E1
OGI3YiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJsb2NrLmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2suY3BwCkBAIC0xMzc5
LDkgKzEzNzksMTAgQEAgdm9pZCBSZW5kZXJCbG9jazo6YWRkT3ZlcmZsb3dGcm9tRmxvYXRzKCkK
IHsKICAgICBpZiAoIW1fZmxvYXRpbmdPYmplY3RzKQogICAgICAgICByZXR1cm47Ci0gICAgRmxv
YXRpbmdPYmplY3QqIHI7Ci0gICAgRGVwcmVjYXRlZFB0ckxpc3RJdGVyYXRvcjxGbG9hdGluZ09i
amVjdD4gaXQoKm1fZmxvYXRpbmdPYmplY3RzKTsKLSAgICBmb3IgKDsgKHIgPSBpdC5jdXJyZW50
KCkpOyArK2l0KSB7CisKKyAgICBGbG9hdGluZ09iamVjdExpc3RIYXNoU2V0Ojpjb25zdF9pdGVy
YXRvciBlbmQgPSBtX2Zsb2F0aW5nT2JqZWN0cy0+ZW5kKCk7CisgICAgZm9yIChGbG9hdGluZ09i
amVjdExpc3RIYXNoU2V0Ojpjb25zdF9pdGVyYXRvciBpdCA9IG1fZmxvYXRpbmdPYmplY3RzLT5i
ZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKKyAgICAgICAgRmxvYXRpbmdPYmplY3QqIHIgPSAq
aXQ7CiAgICAgICAgIGlmIChyLT5tX2lzRGVzY2VuZGFudCkKICAgICAgICAgICAgIGFkZE92ZXJm
bG93RnJvbUNoaWxkKHItPm1fcmVuZGVyZXIsIEludFNpemUoeFBvc2l0aW9uRm9yRmxvYXRJbmNs
dWRpbmdNYXJnaW4ociksIHlQb3NpdGlvbkZvckZsb2F0SW5jbHVkaW5nTWFyZ2luKHIpKSk7CiAg
ICAgfQpAQCAtMjE3MiwxNCArMjE3MywxMyBAQCB2b2lkIFJlbmRlckJsb2NrOjpyZXBhaW50T3Zl
cmhhbmdpbmdGbG9hdHMoYm9vbCBwYWludEFsbERlc2NlbmRhbnRzKQogICAgICAgICBBU1NFUlQo
bV9mbG9hdGluZ09iamVjdHMpOwogICAgICAgICBpZiAoIW1fZmxvYXRpbmdPYmplY3RzKQogICAg
ICAgICAgICAgcmV0dXJuOwotICAgICAgICAKLSAgICAgICAgRmxvYXRpbmdPYmplY3QqIHI7Ci0g
ICAgICAgIERlcHJlY2F0ZWRQdHJMaXN0SXRlcmF0b3I8RmxvYXRpbmdPYmplY3Q+IGl0KCptX2Zs
b2F0aW5nT2JqZWN0cyk7CiAKICAgICAgICAgLy8gRklYTUU6IEF2b2lkIGRpc2FibGluZyBMYXlv
dXRTdGF0ZS4gQXQgdGhlIHZlcnkgbGVhc3QsIGRvbid0IGRpc2FibGUgaXQgZm9yIGZsb2F0cyBv
cmlnaW5hdGluZwogICAgICAgICAvLyBpbiB0aGlzIGJsb2NrLiBCZXR0ZXIgeWV0IHdvdWxkIGJl
IHRvIHB1c2ggZXh0cmEgc3RhdGUgZm9yIHRoZSBjb250YWluZXJzIG9mIG90aGVyIGZsb2F0cy4K
ICAgICAgICAgdmlldygpLT5kaXNhYmxlTGF5b3V0U3RhdGUoKTsKLSAgICAgICAgZm9yICggOyAo
ciA9IGl0LmN1cnJlbnQoKSk7ICsraXQpIHsKKyAgICAgICAgRmxvYXRpbmdPYmplY3RMaXN0SGFz
aFNldDo6Y29uc3RfaXRlcmF0b3IgZW5kID0gbV9mbG9hdGluZ09iamVjdHMtPmVuZCgpOworICAg
ICAgICBmb3IgKEZsb2F0aW5nT2JqZWN0TGlzdEhhc2hTZXQ6OmNvbnN0X2l0ZXJhdG9yIGl0ID0g
bV9mbG9hdGluZ09iamVjdHMtPmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkgeworICAgICAgICAg
ICAgRmxvYXRpbmdPYmplY3QqIHIgPSAqaXQ7CiAgICAgICAgICAgICAvLyBPbmx5IHJlcGFpbnQg
dGhlIG9iamVjdCBpZiBpdCBpcyBvdmVyaGFuZ2luZywgaXMgbm90IGluIGl0cyBvd24gbGF5ZXIs
IGFuZAogICAgICAgICAgICAgLy8gaXMgb3VyIHJlc3BvbnNpYmlsaXR5IHRvIHBhaW50IChtX3No
b3VsZFBhaW50IGlzIHNldCkuIFdoZW4gcGFpbnRBbGxEZXNjZW5kYW50cyBpcyB0cnVlLCB0aGUg
bGF0dGVyCiAgICAgICAgICAgICAvLyBjb25kaXRpb24gaXMgcmVwbGFjZWQgd2l0aCBiZWluZyBh
IGRlc2NlbmRhbnQgb2YgdXMuCkBAIC0yNTAzLDkgKzI1MDMsOSBAQCB2b2lkIFJlbmRlckJsb2Nr
OjpwYWludEZsb2F0cyhQYWludEluZm8mIHBhaW50SW5mbywgaW50IHR4LCBpbnQgdHksIGJvb2wg
cHJlc2VydgogICAgIGlmICghbV9mbG9hdGluZ09iamVjdHMpCiAgICAgICAgIHJldHVybjsKIAot
ICAgIEZsb2F0aW5nT2JqZWN0KiByOwotICAgIERlcHJlY2F0ZWRQdHJMaXN0SXRlcmF0b3I8Rmxv
YXRpbmdPYmplY3Q+IGl0KCptX2Zsb2F0aW5nT2JqZWN0cyk7Ci0gICAgZm9yICg7IChyID0gaXQu
Y3VycmVudCgpKTsgKytpdCkgeworICAgIEZsb2F0aW5nT2JqZWN0TGlzdEhhc2hTZXQ6OmNvbnN0
X2l0ZXJhdG9yIGVuZCA9IG1fZmxvYXRpbmdPYmplY3RzLT5lbmQoKTsKKyAgICBmb3IgKEZsb2F0
aW5nT2JqZWN0TGlzdEhhc2hTZXQ6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbV9mbG9hdGluZ09iamVj
dHMtPmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkgeworICAgICAgICBGbG9hdGluZ09iamVjdCog
ciA9ICppdDsKICAgICAgICAgLy8gT25seSBwYWludCB0aGUgb2JqZWN0IGlmIG91ciBtX3Nob3Vs
ZFBhaW50IGZsYWcgaXMgc2V0LgogICAgICAgICBpZiAoci0+bV9zaG91bGRQYWludCAmJiAhci0+
bV9yZW5kZXJlci0+aGFzU2VsZlBhaW50aW5nTGF5ZXIoKSkgewogICAgICAgICAgICAgUGFpbnRJ
bmZvIGN1cnJlbnRQYWludEluZm8ocGFpbnRJbmZvKTsKQEAgLTI3NDIsOCArMjc0Miw5IEBAIEdh
cFJlY3RzIFJlbmRlckJsb2NrOjpzZWxlY3Rpb25HYXBzKFJlbmRlckJsb2NrKiByb290QmxvY2ss
IGNvbnN0IEludFBvaW50JiByb290CiAgICAgICAgICAgICBmb3IgKFJlbmRlckJsb2NrKiBjYiA9
IGNvbnRhaW5pbmdCbG9jaygpOyBjYiAmJiAhY2ItPmlzUmVuZGVyVmlldygpOyBjYiA9IGNiLT5j
b250YWluaW5nQmxvY2soKSkKICAgICAgICAgICAgICAgICBjbGlwT3V0UG9zaXRpb25lZE9iamVj
dHMocGFpbnRJbmZvLCBJbnRQb2ludChjYi0+eCgpLCBjYi0+eSgpKSwgY2ItPm1fcG9zaXRpb25l
ZE9iamVjdHMpOyAvLyBGSVhNRTogTm90IHJpZ2h0IGZvciBmbGlwcGVkIHdyaXRpbmcgbW9kZXMu
CiAgICAgICAgIGlmIChtX2Zsb2F0aW5nT2JqZWN0cykgewotICAgICAgICAgICAgZm9yIChEZXBy
ZWNhdGVkUHRyTGlzdEl0ZXJhdG9yPEZsb2F0aW5nT2JqZWN0PiBpdCgqbV9mbG9hdGluZ09iamVj
dHMpOyBpdC5jdXJyZW50KCk7ICsraXQpIHsKLSAgICAgICAgICAgICAgICBGbG9hdGluZ09iamVj
dCogciA9IGl0LmN1cnJlbnQoKTsKKyAgICAgICAgICAgIEZsb2F0aW5nT2JqZWN0TGlzdEhhc2hT
ZXQ6OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IG1fZmxvYXRpbmdPYmplY3RzLT5lbmQoKTsKKyAgICAg
ICAgICAgIGZvciAoRmxvYXRpbmdPYmplY3RMaXN0SGFzaFNldDo6Y29uc3RfaXRlcmF0b3IgaXQg
PSBtX2Zsb2F0aW5nT2JqZWN0cy0+YmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7CisgICAgICAg
ICAgICAgICAgRmxvYXRpbmdPYmplY3QqIHIgPSAqaXQ7CiAgICAgICAgICAgICAgICAgSW50UmVj
dCBmbG9hdEJveCA9IEludFJlY3Qob2Zmc2V0RnJvbVJvb3RCbG9jay53aWR0aCgpICsgeFBvc2l0
aW9uRm9yRmxvYXRJbmNsdWRpbmdNYXJnaW4ociksCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgb2Zmc2V0RnJvbVJvb3RCbG9jay5oZWlnaHQoKSArIHlQb3NpdGlv
bkZvckZsb2F0SW5jbHVkaW5nTWFyZ2luKHIpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHItPm1fcmVuZGVyZXItPndpZHRoKCksIHItPm1fcmVuZGVyZXItPmhl
aWdodCgpKTsKQEAgLTMwNTAsMTggKzMwNTEsMTMgQEAgUmVuZGVyQmxvY2s6OkZsb2F0aW5nT2Jq
ZWN0KiBSZW5kZXJCbG9jazo6aW5zZXJ0RmxvYXRpbmdPYmplY3QoUmVuZGVyQm94KiBvKQogICAg
IEFTU0VSVChvLT5pc0Zsb2F0aW5nKCkpOwogCiAgICAgLy8gQ3JlYXRlIHRoZSBsaXN0IG9mIHNw
ZWNpYWwgb2JqZWN0cyBpZiB3ZSBkb24ndCBhbGVhZHkgaGF2ZSBvbmUKLSAgICBpZiAoIW1fZmxv
YXRpbmdPYmplY3RzKSB7Ci0gICAgICAgIG1fZmxvYXRpbmdPYmplY3RzID0gbmV3IERlcHJlY2F0
ZWRQdHJMaXN0PEZsb2F0aW5nT2JqZWN0PjsKLSAgICAgICAgbV9mbG9hdGluZ09iamVjdHMtPnNl
dEF1dG9EZWxldGUodHJ1ZSk7Ci0gICAgfSBlbHNlIHsKKyAgICBpZiAoIW1fZmxvYXRpbmdPYmpl
Y3RzKQorICAgICAgICBtX2Zsb2F0aW5nT2JqZWN0cyA9IG5ldyBGbG9hdGluZ09iamVjdExpc3RI
YXNoU2V0OworICAgIGVsc2UgewogICAgICAgICAvLyBEb24ndCBpbnNlcnQgdGhlIG9iamVjdCBh
Z2FpbiBpZiBpdCdzIGFscmVhZHkgaW4gdGhlIGxpc3QKLSAgICAgICAgRGVwcmVjYXRlZFB0ckxp
c3RJdGVyYXRvcjxGbG9hdGluZ09iamVjdD4gaXQoKm1fZmxvYXRpbmdPYmplY3RzKTsKLSAgICAg
ICAgRmxvYXRpbmdPYmplY3QqIGY7Ci0gICAgICAgIHdoaWxlICggKGYgPSBpdC5jdXJyZW50KCkp
ICkgewotICAgICAgICAgICAgaWYgKGYtPm1fcmVuZGVyZXIgPT0gbykKLSAgICAgICAgICAgICAg
ICByZXR1cm4gZjsKLSAgICAgICAgICAgICsraXQ7Ci0gICAgICAgIH0KKyAgICAgICAgRmxvYXRp
bmdPYmplY3RMaXN0SGFzaFNldDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBtX2Zsb2F0aW5nT2JqZWN0
cy0+ZmluZDxSZW5kZXJCb3gqLCBGbG9hdGluZ09iamVjdEhhc2hUcmFuc2xhdG9yPihvKTsKKyAg
ICAgICAgaWYgKGl0ICE9IG1fZmxvYXRpbmdPYmplY3RzLT5lbmQoKSkKKyAgICAgICAgICAgIHJl
dHVybiAqaXQ7CiAgICAgfQogCiAgICAgLy8gQ3JlYXRlIHRoZSBzcGVjaWFsIG9iamVjdCBlbnRy
eSAmIGFwcGVuZCBpdCB0byB0aGUgbGlzdApAQCAtMzA4Nyw3ICszMDgzLDcgQEAgUmVuZGVyQmxv
Y2s6OkZsb2F0aW5nT2JqZWN0KiBSZW5kZXJCbG9jazo6aW5zZXJ0RmxvYXRpbmdPYmplY3QoUmVu
ZGVyQm94KiBvKQogICAgIG5ld09iai0+bV9pc0Rlc2NlbmRhbnQgPSB0cnVlOwogICAgIG5ld09i
ai0+bV9yZW5kZXJlciA9IG87CiAKLSAgICBtX2Zsb2F0aW5nT2JqZWN0cy0+YXBwZW5kKG5ld09i
aik7CisgICAgbV9mbG9hdGluZ09iamVjdHMtPmFkZChuZXdPYmopOwogICAgIAogICAgIHJldHVy
biBuZXdPYmo7CiB9CkBAIC0zMDk1LDI3ICszMDkxLDI2IEBAIFJlbmRlckJsb2NrOjpGbG9hdGlu
Z09iamVjdCogUmVuZGVyQmxvY2s6Omluc2VydEZsb2F0aW5nT2JqZWN0KFJlbmRlckJveCogbykK
IHZvaWQgUmVuZGVyQmxvY2s6OnJlbW92ZUZsb2F0aW5nT2JqZWN0KFJlbmRlckJveCogbykKIHsK
ICAgICBpZiAobV9mbG9hdGluZ09iamVjdHMpIHsKLSAgICAgICAgRGVwcmVjYXRlZFB0ckxpc3RJ
dGVyYXRvcjxGbG9hdGluZ09iamVjdD4gaXQoKm1fZmxvYXRpbmdPYmplY3RzKTsKLSAgICAgICAg
d2hpbGUgKGl0LmN1cnJlbnQoKSkgewotICAgICAgICAgICAgaWYgKGl0LmN1cnJlbnQoKS0+bV9y
ZW5kZXJlciA9PSBvKSB7Ci0gICAgICAgICAgICAgICAgaWYgKGNoaWxkcmVuSW5saW5lKCkpIHsK
LSAgICAgICAgICAgICAgICAgICAgaW50IGxvZ2ljYWxUb3AgPSBsb2dpY2FsVG9wRm9yRmxvYXQo
aXQuY3VycmVudCgpKTsKLSAgICAgICAgICAgICAgICAgICAgaW50IGxvZ2ljYWxCb3R0b20gPSBs
b2dpY2FsQm90dG9tRm9yRmxvYXQoaXQuY3VycmVudCgpKTsKLSAgICAgICAgICAgICAgICAgICAg
Ci0gICAgICAgICAgICAgICAgICAgIC8vIEZpeCBmb3IgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTU0OTk1LgotICAgICAgICAgICAgICAgICAgICBpZiAobG9naWNhbEJv
dHRvbSA8IDAgfHwgbG9naWNhbEJvdHRvbSA8IGxvZ2ljYWxUb3AgfHwgbG9naWNhbFRvcCA9PSBu
dW1lcmljX2xpbWl0czxpbnQ+OjptYXgoKSkKLSAgICAgICAgICAgICAgICAgICAgICAgIGxvZ2lj
YWxCb3R0b20gPSBudW1lcmljX2xpbWl0czxpbnQ+OjptYXgoKTsKLSAgICAgICAgICAgICAgICAg
ICAgZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAvLyBTcGVjaWFsLWNhc2UgemVyby0g
YW5kIGxlc3MtdGhhbi16ZXJvLWhlaWdodCBmbG9hdHM6IHRob3NlIGRvbid0IHRvdWNoCi0gICAg
ICAgICAgICAgICAgICAgICAgICAvLyB0aGUgbGluZSB0aGF0IHRoZXkncmUgb24sIGJ1dCBpdCBz
dGlsbCBuZWVkcyB0byBiZSBkaXJ0aWVkLiBUaGlzIGlzCi0gICAgICAgICAgICAgICAgICAgICAg
ICAvLyBhY2NvbXBsaXNoZWQgYnkgcHJldGVuZGluZyB0aGV5IGhhdmUgYSBoZWlnaHQgb2YgMS4K
LSAgICAgICAgICAgICAgICAgICAgICAgIGxvZ2ljYWxCb3R0b20gPSBtYXgobG9naWNhbEJvdHRv
bSwgbG9naWNhbFRvcCArIDEpOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAg
ICAgICAgIG1hcmtMaW5lc0RpcnR5SW5CbG9ja1JhbmdlKDAsIGxvZ2ljYWxCb3R0b20pOworICAg
ICAgICBGbG9hdGluZ09iamVjdExpc3RIYXNoU2V0OjppdGVyYXRvciBpdCA9IG1fZmxvYXRpbmdP
YmplY3RzLT5maW5kPFJlbmRlckJveCosIEZsb2F0aW5nT2JqZWN0SGFzaFRyYW5zbGF0b3I+KG8p
OworICAgICAgICBpZiAoaXQgIT0gbV9mbG9hdGluZ09iamVjdHMtPmVuZCgpKSB7CisgICAgICAg
ICAgICBGbG9hdGluZ09iamVjdCogciA9ICppdDsKKyAgICAgICAgICAgIGlmIChjaGlsZHJlbklu
bGluZSgpKSB7CisgICAgICAgICAgICAgICAgaW50IGxvZ2ljYWxUb3AgPSBsb2dpY2FsVG9wRm9y
RmxvYXQocik7CisgICAgICAgICAgICAgICAgaW50IGxvZ2ljYWxCb3R0b20gPSBsb2dpY2FsQm90
dG9tRm9yRmxvYXQocik7CisKKyAgICAgICAgICAgICAgICAvLyBGaXggZm9yIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD01NDk5NS4KKyAgICAgICAgICAgICAgICBpZiAo
bG9naWNhbEJvdHRvbSA8IDAgfHwgbG9naWNhbEJvdHRvbSA8IGxvZ2ljYWxUb3AgfHwgbG9naWNh
bFRvcCA9PSBudW1lcmljX2xpbWl0czxpbnQ+OjptYXgoKSkKKyAgICAgICAgICAgICAgICAgICAg
bG9naWNhbEJvdHRvbSA9IG51bWVyaWNfbGltaXRzPGludD46Om1heCgpOworICAgICAgICAgICAg
ICAgIGVsc2UgeworICAgICAgICAgICAgICAgICAgICAvLyBTcGVjaWFsLWNhc2UgemVyby0gYW5k
IGxlc3MtdGhhbi16ZXJvLWhlaWdodCBmbG9hdHM6IHRob3NlIGRvbid0IHRvdWNoCisgICAgICAg
ICAgICAgICAgICAgIC8vIHRoZSBsaW5lIHRoYXQgdGhleSdyZSBvbiwgYnV0IGl0IHN0aWxsIG5l
ZWRzIHRvIGJlIGRpcnRpZWQuIFRoaXMgaXMKKyAgICAgICAgICAgICAgICAgICAgLy8gYWNjb21w
bGlzaGVkIGJ5IHByZXRlbmRpbmcgdGhleSBoYXZlIGEgaGVpZ2h0IG9mIDEuCisgICAgICAgICAg
ICAgICAgICAgIGxvZ2ljYWxCb3R0b20gPSBtYXgobG9naWNhbEJvdHRvbSwgbG9naWNhbFRvcCAr
IDEpOwogICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBtX2Zsb2F0aW5nT2JqZWN0
cy0+cmVtb3ZlUmVmKGl0LmN1cnJlbnQoKSk7CisgICAgICAgICAgICAgICAgbWFya0xpbmVzRGly
dHlJbkJsb2NrUmFuZ2UoMCwgbG9naWNhbEJvdHRvbSk7CiAgICAgICAgICAgICB9Ci0gICAgICAg
ICAgICArK2l0OworICAgICAgICAgICAgbV9mbG9hdGluZ09iamVjdHMtPnJlbW92ZShpdCk7Cisg
ICAgICAgICAgICBkZWxldGUgcjsKICAgICAgICAgfQogICAgIH0KIH0KQEAgLTMxMjgsNiArMzEy
Myw3IEBAIHZvaWQgUmVuZGVyQmxvY2s6OnJlbW92ZUZsb2F0aW5nT2JqZWN0c0JlbG93KEZsb2F0
aW5nT2JqZWN0KiBsYXN0RmxvYXQsIGludCBsb2dpCiAgICAgRmxvYXRpbmdPYmplY3QqIGN1cnIg
PSBtX2Zsb2F0aW5nT2JqZWN0cy0+bGFzdCgpOwogICAgIHdoaWxlIChjdXJyICE9IGxhc3RGbG9h
dCAmJiAoIWN1cnItPmlzUGxhY2VkKCkgfHwgbG9naWNhbFRvcEZvckZsb2F0KGN1cnIpID49IGxv
Z2ljYWxPZmZzZXQpKSB7CiAgICAgICAgIG1fZmxvYXRpbmdPYmplY3RzLT5yZW1vdmVMYXN0KCk7
CisgICAgICAgIGRlbGV0ZSBjdXJyOwogICAgICAgICBjdXJyID0gbV9mbG9hdGluZ09iamVjdHMt
Pmxhc3QoKTsKICAgICB9CiB9CkBAIC0zMTM2LDM2ICszMTMyLDQ0IEBAIGJvb2wgUmVuZGVyQmxv
Y2s6OnBvc2l0aW9uTmV3RmxvYXRzKCkKIHsKICAgICBpZiAoIW1fZmxvYXRpbmdPYmplY3RzKQog
ICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgCi0gICAgRmxvYXRpbmdPYmplY3QqIGZsb2F0aW5n
T2JqZWN0ID0gbV9mbG9hdGluZ09iamVjdHMtPmxhc3QoKTsKKworICAgIGlmIChtX2Zsb2F0aW5n
T2JqZWN0cy0+aXNFbXB0eSgpKQorICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICAvLyBJZiBh
bGwgZmxvYXRzIGhhdmUgYWxyZWFkeSBiZWVuIHBvc2l0aW9uZWQsIHRoZW4gd2UgaGF2ZSBubyB3
b3JrIHRvIGRvLgotICAgIGlmICghZmxvYXRpbmdPYmplY3QgfHwgZmxvYXRpbmdPYmplY3QtPmlz
UGxhY2VkKCkpCisgICAgaWYgKG1fZmxvYXRpbmdPYmplY3RzLT5sYXN0KCktPmlzUGxhY2VkKCkp
CiAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgIC8vIE1vdmUgYmFja3dhcmRzIHRocm91Z2gg
b3VyIGZsb2F0aW5nIG9iamVjdCBsaXN0IHVudGlsIHdlIGZpbmQgYSBmbG9hdCB0aGF0IGhhcwog
ICAgIC8vIGFscmVhZHkgYmVlbiBwb3NpdGlvbmVkLiAgVGhlbiB3ZSdsbCBiZSBhYmxlIHRvIG1v
dmUgZm9yd2FyZCwgcG9zaXRpb25pbmcgYWxsIG9mCiAgICAgLy8gdGhlIG5ldyBmbG9hdHMgdGhh
dCBuZWVkIGl0LgotICAgIEZsb2F0aW5nT2JqZWN0KiBsYXN0RmxvYXQgPSBtX2Zsb2F0aW5nT2Jq
ZWN0cy0+Z2V0UHJldigpOwotICAgIHdoaWxlIChsYXN0RmxvYXQgJiYgIWxhc3RGbG9hdC0+aXNQ
bGFjZWQoKSkgewotICAgICAgICBmbG9hdGluZ09iamVjdCA9IG1fZmxvYXRpbmdPYmplY3RzLT5w
cmV2KCk7Ci0gICAgICAgIGxhc3RGbG9hdCA9IG1fZmxvYXRpbmdPYmplY3RzLT5nZXRQcmV2KCk7
CisgICAgRmxvYXRpbmdPYmplY3RMaXN0SGFzaFNldDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBtX2Zs
b2F0aW5nT2JqZWN0cy0+ZW5kKCk7CisgICAgLS1pdDsgLy8gR28gdG8gbGFzdCBpdGVtLgorICAg
IEZsb2F0aW5nT2JqZWN0TGlzdEhhc2hTZXQ6OmNvbnN0X2l0ZXJhdG9yIGJlZ2luID0gbV9mbG9h
dGluZ09iamVjdHMtPmJlZ2luKCk7CisgICAgRmxvYXRpbmdPYmplY3QqIGxhc3RQbGFjZWRGbG9h
dGluZ09iamVjdCA9IDA7CisgICAgd2hpbGUgKGl0ICE9IGJlZ2luKSB7CisgICAgICAgIC0taXQ7
CisgICAgICAgIGlmICgoKml0KS0+aXNQbGFjZWQoKSkgeworICAgICAgICAgICAgbGFzdFBsYWNl
ZEZsb2F0aW5nT2JqZWN0ID0gKml0OworICAgICAgICAgICAgKytpdDsKKyAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICB9CiAgICAgfQogCiAgICAgaW50IGxvZ2ljYWxUb3AgPSBsb2dpY2FsSGVp
Z2h0KCk7CiAgICAgCiAgICAgLy8gVGhlIGZsb2F0IGNhbm5vdCBzdGFydCBhYm92ZSB0aGUgdG9w
IHBvc2l0aW9uIG9mIHRoZSBsYXN0IHBvc2l0aW9uZWQgZmxvYXQuCi0gICAgaWYgKGxhc3RGbG9h
dCkKLSAgICAgICAgbG9naWNhbFRvcCA9IG1heChsb2dpY2FsVG9wRm9yRmxvYXQobGFzdEZsb2F0
KSwgbG9naWNhbFRvcCk7CisgICAgaWYgKGxhc3RQbGFjZWRGbG9hdGluZ09iamVjdCkKKyAgICAg
ICAgbG9naWNhbFRvcCA9IG1heChsb2dpY2FsVG9wRm9yRmxvYXQobGFzdFBsYWNlZEZsb2F0aW5n
T2JqZWN0KSwgbG9naWNhbFRvcCk7CiAKKyAgICBGbG9hdGluZ09iamVjdExpc3RIYXNoU2V0Ojpj
b25zdF9pdGVyYXRvciBlbmQgPSBtX2Zsb2F0aW5nT2JqZWN0cy0+ZW5kKCk7CiAgICAgLy8gTm93
IHdhbGsgdGhyb3VnaCB0aGUgc2V0IG9mIHVucG9zaXRpb25lZCBmbG9hdHMgYW5kIHBsYWNlIHRo
ZW0uCi0gICAgd2hpbGUgKGZsb2F0aW5nT2JqZWN0KSB7CisgICAgZm9yICg7IGl0ICE9IGVuZDsg
KytpdCkgeworICAgICAgICAgRmxvYXRpbmdPYmplY3QqIGZsb2F0aW5nT2JqZWN0ID0gKml0Owog
ICAgICAgICAvLyBUaGUgY29udGFpbmluZyBibG9jayBpcyByZXNwb25zaWJsZSBmb3IgcG9zaXRp
b25pbmcgZmxvYXRzLCBzbyBpZiB3ZSBoYXZlIGZsb2F0cyBpbiBvdXIKICAgICAgICAgLy8gbGlz
dCB0aGF0IGNvbWUgZnJvbSBzb21ld2hlcmUgZWxzZSwgZG8gbm90IGF0dGVtcHQgdG8gcG9zaXRp
b24gdGhlbS4KLSAgICAgICAgaWYgKGZsb2F0aW5nT2JqZWN0LT5yZW5kZXJlcigpLT5jb250YWlu
aW5nQmxvY2soKSAhPSB0aGlzKSB7Ci0gICAgICAgICAgICBmbG9hdGluZ09iamVjdCA9IG1fZmxv
YXRpbmdPYmplY3RzLT5uZXh0KCk7CisgICAgICAgIGlmIChmbG9hdGluZ09iamVjdC0+cmVuZGVy
ZXIoKS0+Y29udGFpbmluZ0Jsb2NrKCkgIT0gdGhpcykKICAgICAgICAgICAgIGNvbnRpbnVlOwot
ICAgICAgICB9CiAKICAgICAgICAgUmVuZGVyQm94KiBjaGlsZEJveCA9IGZsb2F0aW5nT2JqZWN0
LT5yZW5kZXJlcigpOwogICAgICAgICBpbnQgY2hpbGRMb2dpY2FsTGVmdE1hcmdpbiA9IHN0eWxl
KCktPmlzTGVmdFRvUmlnaHREaXJlY3Rpb24oKSA/IG1hcmdpblN0YXJ0Rm9yQ2hpbGQoY2hpbGRC
b3gpIDogbWFyZ2luRW5kRm9yQ2hpbGQoY2hpbGRCb3gpOwpAQCAtMzI0Nyw4ICszMjUxLDYgQEAg
Ym9vbCBSZW5kZXJCbG9jazo6cG9zaXRpb25OZXdGbG9hdHMoKQogICAgICAgICAvLyBJZiB0aGUg
Y2hpbGQgbW92ZWQsIHdlIGhhdmUgdG8gcmVwYWludCBpdC4KICAgICAgICAgaWYgKGNoaWxkQm94
LT5jaGVja0ZvclJlcGFpbnREdXJpbmdMYXlvdXQoKSkKICAgICAgICAgICAgIGNoaWxkQm94LT5y
ZXBhaW50RHVyaW5nTGF5b3V0SWZNb3ZlZChvbGRSZWN0KTsKLQotICAgICAgICBmbG9hdGluZ09i
amVjdCA9IG1fZmxvYXRpbmdPYmplY3RzLT5uZXh0KCk7CiAgICAgfQogICAgIHJldHVybiB0cnVl
OwogfQpAQCAtMzI1OSwxNiArMzI2MSwyMiBAQCBib29sIFJlbmRlckJsb2NrOjpwb3NpdGlvbk5l
d0Zsb2F0T25MaW5lKEZsb2F0aW5nT2JqZWN0KiBuZXdGbG9hdCwgRmxvYXRpbmdPYmplYwogICAg
IGlmICghZGlkUG9zaXRpb24gfHwgIW5ld0Zsb2F0LT5tX3BhZ2luYXRpb25TdHJ1dCkKICAgICAg
ICAgcmV0dXJuIGRpZFBvc2l0aW9uOwogICAgIAorICAgIEFTU0VSVChtX2Zsb2F0aW5nT2JqZWN0
cy0+bGFzdCgpID09IG5ld0Zsb2F0KTsKKwogICAgIGludCBmbG9hdExvZ2ljYWxUb3AgPSBsb2dp
Y2FsVG9wRm9yRmxvYXQobmV3RmxvYXQpOwogICAgIGludCBwYWdpbmF0aW9uU3RydXQgPSBuZXdG
bG9hdC0+bV9wYWdpbmF0aW9uU3RydXQ7Ci0gICAgRmxvYXRpbmdPYmplY3QqIGYgPSBtX2Zsb2F0
aW5nT2JqZWN0cy0+bGFzdCgpOwogICAgIAotICAgIEFTU0VSVChmID09IG5ld0Zsb2F0KTsKLQog
ICAgIGlmIChmbG9hdExvZ2ljYWxUb3AgLSBwYWdpbmF0aW9uU3RydXQgIT0gbG9naWNhbEhlaWdo
dCgpKQogICAgICAgICByZXR1cm4gZGlkUG9zaXRpb247CiAKLSAgICBmb3IgKGYgPSBtX2Zsb2F0
aW5nT2JqZWN0cy0+cHJldigpOyBmICYmIGYgIT0gbGFzdEZsb2F0RnJvbVByZXZpb3VzTGluZTsg
ZiA9IG1fZmxvYXRpbmdPYmplY3RzLT5wcmV2KCkpIHsKKyAgICBGbG9hdGluZ09iamVjdExpc3RI
YXNoU2V0Ojpjb25zdF9pdGVyYXRvciBpdCA9IG1fZmxvYXRpbmdPYmplY3RzLT5lbmQoKTsKKyAg
ICAtLWl0OyAvLyBMYXN0IGZsb2F0IGlzIG5ld0Zsb2F0LCBza2lwIHRoYXQgb25lLgorICAgIEZs
b2F0aW5nT2JqZWN0TGlzdEhhc2hTZXQ6OmNvbnN0X2l0ZXJhdG9yIGJlZ2luID0gbV9mbG9hdGlu
Z09iamVjdHMtPmJlZ2luKCk7CisgICAgd2hpbGUgKGl0ICE9IGJlZ2luKSB7CisgICAgICAgIC0t
aXQ7CisgICAgICAgIEZsb2F0aW5nT2JqZWN0KiBmID0gKml0OworICAgICAgICBpZiAoZiA9PSBs
YXN0RmxvYXRGcm9tUHJldmlvdXNMaW5lKQorICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGlm
IChsb2dpY2FsVG9wRm9yRmxvYXQoZikgPT0gbG9naWNhbEhlaWdodCgpKSB7CiAgICAgICAgICAg
ICBBU1NFUlQoIWYtPm1fcGFnaW5hdGlvblN0cnV0KTsKICAgICAgICAgICAgIGYtPm1fcGFnaW5h
dGlvblN0cnV0ID0gcGFnaW5hdGlvblN0cnV0OwpAQCAtMzM3NCw5ICszMzgyLDEwIEBAIGludCBS
ZW5kZXJCbG9jazo6bG9naWNhbExlZnRPZmZzZXRGb3JMaW5lKGludCBsb2dpY2FsVG9wLCBpbnQg
Zml4ZWRPZmZzZXQsIGJvb2wKICAgICBpZiAobV9mbG9hdGluZ09iamVjdHMpIHsKICAgICAgICAg
aWYgKGhlaWdodFJlbWFpbmluZykKICAgICAgICAgICAgICpoZWlnaHRSZW1haW5pbmcgPSAxOwot
ICAgICAgICBGbG9hdGluZ09iamVjdCogcjsKLSAgICAgICAgRGVwcmVjYXRlZFB0ckxpc3RJdGVy
YXRvcjxGbG9hdGluZ09iamVjdD4gaXQoKm1fZmxvYXRpbmdPYmplY3RzKTsKLSAgICAgICAgZm9y
ICggOyAociA9IGl0LmN1cnJlbnQoKSk7ICsraXQpIHsKKworICAgICAgICBGbG9hdGluZ09iamVj
dExpc3RIYXNoU2V0Ojpjb25zdF9pdGVyYXRvciBlbmQgPSBtX2Zsb2F0aW5nT2JqZWN0cy0+ZW5k
KCk7CisgICAgICAgIGZvciAoRmxvYXRpbmdPYmplY3RMaXN0SGFzaFNldDo6Y29uc3RfaXRlcmF0
b3IgaXQgPSBtX2Zsb2F0aW5nT2JqZWN0cy0+YmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7Cisg
ICAgICAgICAgICBGbG9hdGluZ09iamVjdCogciA9ICppdDsKICAgICAgICAgICAgIGlmIChyLT5p
c1BsYWNlZCgpICYmIGxvZ2ljYWxUb3BGb3JGbG9hdChyKSA8PSBsb2dpY2FsVG9wICYmIGxvZ2lj
YWxCb3R0b21Gb3JGbG9hdChyKSA+IGxvZ2ljYWxUb3AKICAgICAgICAgICAgICAgICAmJiByLT50
eXBlKCkgPT0gRmxvYXRpbmdPYmplY3Q6OkZsb2F0TGVmdAogICAgICAgICAgICAgICAgICYmIGxv
Z2ljYWxSaWdodEZvckZsb2F0KHIpID4gbGVmdCkgewpAQCAtMzQwNCw5ICszNDEzLDkgQEAgaW50
IFJlbmRlckJsb2NrOjpsb2dpY2FsUmlnaHRPZmZzZXRGb3JMaW5lKGludCBsb2dpY2FsVG9wLCBp
bnQgZml4ZWRPZmZzZXQsIGJvb2wKICAgICBpZiAobV9mbG9hdGluZ09iamVjdHMpIHsKICAgICAg
ICAgaWYgKGhlaWdodFJlbWFpbmluZykKICAgICAgICAgICAgICpoZWlnaHRSZW1haW5pbmcgPSAx
OwotICAgICAgICBGbG9hdGluZ09iamVjdCogcjsKLSAgICAgICAgRGVwcmVjYXRlZFB0ckxpc3RJ
dGVyYXRvcjxGbG9hdGluZ09iamVjdD4gaXQoKm1fZmxvYXRpbmdPYmplY3RzKTsKLSAgICAgICAg
Zm9yICggOyAociA9IGl0LmN1cnJlbnQoKSk7ICsraXQpIHsKKyAgICAgICAgRmxvYXRpbmdPYmpl
Y3RMaXN0SGFzaFNldDo6Y29uc3RfaXRlcmF0b3IgZW5kID0gbV9mbG9hdGluZ09iamVjdHMtPmVu
ZCgpOworICAgICAgICBmb3IgKEZsb2F0aW5nT2JqZWN0TGlzdEhhc2hTZXQ6OmNvbnN0X2l0ZXJh
dG9yIGl0ID0gbV9mbG9hdGluZ09iamVjdHMtPmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkgewor
ICAgICAgICAgICAgRmxvYXRpbmdPYmplY3QqIHIgPSAqaXQ7CiAgICAgICAgICAgICBpZiAoci0+
aXNQbGFjZWQoKSAmJiBsb2dpY2FsVG9wRm9yRmxvYXQocikgPD0gbG9naWNhbFRvcCAmJiBsb2dp
Y2FsQm90dG9tRm9yRmxvYXQocikgPiBsb2dpY2FsVG9wCiAgICAgICAgICAgICAgICAgJiYgci0+
dHlwZSgpID09IEZsb2F0aW5nT2JqZWN0OjpGbG9hdFJpZ2h0CiAgICAgICAgICAgICAgICAgJiYg
bG9naWNhbExlZnRGb3JGbG9hdChyKSA8IHJpZ2h0KSB7CkBAIC0zNDQwLDkgKzM0NDksOSBAQCBp
bnQgUmVuZGVyQmxvY2s6Om5leHRGbG9hdExvZ2ljYWxCb3R0b21CZWxvdyhpbnQgbG9naWNhbEhl
aWdodCkgY29uc3QKICAgICAgICAgcmV0dXJuIDA7CiAKICAgICBpbnQgYm90dG9tID0gSU5UX01B
WDsKLSAgICBGbG9hdGluZ09iamVjdCogcjsKLSAgICBEZXByZWNhdGVkUHRyTGlzdEl0ZXJhdG9y
PEZsb2F0aW5nT2JqZWN0PiBpdCgqbV9mbG9hdGluZ09iamVjdHMpOwotICAgIGZvciAoIDsgKHIg
PSBpdC5jdXJyZW50KCkpOyArK2l0KSB7CisgICAgRmxvYXRpbmdPYmplY3RMaXN0SGFzaFNldDo6
Y29uc3RfaXRlcmF0b3IgZW5kID0gbV9mbG9hdGluZ09iamVjdHMtPmVuZCgpOworICAgIGZvciAo
RmxvYXRpbmdPYmplY3RMaXN0SGFzaFNldDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBtX2Zsb2F0aW5n
T2JqZWN0cy0+YmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7CisgICAgICAgIEZsb2F0aW5nT2Jq
ZWN0KiByID0gKml0OwogICAgICAgICBpbnQgZmxvYXRCb3R0b20gPSBsb2dpY2FsQm90dG9tRm9y
RmxvYXQocik7CiAgICAgICAgIGlmIChmbG9hdEJvdHRvbSA+IGxvZ2ljYWxIZWlnaHQpCiAgICAg
ICAgICAgICBib3R0b20gPSBtaW4oZmxvYXRCb3R0b20sIGJvdHRvbSk7CkBAIC0zNDU2LDkgKzM0
NjUsOSBAQCBpbnQgUmVuZGVyQmxvY2s6Omxvd2VzdEZsb2F0TG9naWNhbEJvdHRvbShGbG9hdGlu
Z09iamVjdDo6VHlwZSBmbG9hdFR5cGUpIGNvbnN0CiAgICAgaWYgKCFtX2Zsb2F0aW5nT2JqZWN0
cykKICAgICAgICAgcmV0dXJuIDA7CiAgICAgaW50IGxvd2VzdEZsb2F0Qm90dG9tID0gMDsKLSAg
ICBGbG9hdGluZ09iamVjdCogcjsKLSAgICBEZXByZWNhdGVkUHRyTGlzdEl0ZXJhdG9yPEZsb2F0
aW5nT2JqZWN0PiBpdCgqbV9mbG9hdGluZ09iamVjdHMpOwotICAgIGZvciAoIDsgKHIgPSBpdC5j
dXJyZW50KCkpOyArK2l0KSB7CisgICAgRmxvYXRpbmdPYmplY3RMaXN0SGFzaFNldDo6Y29uc3Rf
aXRlcmF0b3IgZW5kID0gbV9mbG9hdGluZ09iamVjdHMtPmVuZCgpOworICAgIGZvciAoRmxvYXRp
bmdPYmplY3RMaXN0SGFzaFNldDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBtX2Zsb2F0aW5nT2JqZWN0
cy0+YmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7CisgICAgICAgIEZsb2F0aW5nT2JqZWN0KiBy
ID0gKml0OwogICAgICAgICBpZiAoci0+aXNQbGFjZWQoKSAmJiByLT50eXBlKCkgJiBmbG9hdFR5
cGUpCiAgICAgICAgICAgICBsb3dlc3RGbG9hdEJvdHRvbSA9IG1heChsb3dlc3RGbG9hdEJvdHRv
bSwgbG9naWNhbEJvdHRvbUZvckZsb2F0KHIpKTsKICAgICB9CkBAIC0zNDk3LDExICszNTA2LDE5
IEBAIHZvaWQgUmVuZGVyQmxvY2s6OmNsZWFyRmxvYXRzKCkKIAogICAgIGlmIChtX2Zsb2F0aW5n
T2JqZWN0cykgewogICAgICAgICBpZiAoY2hpbGRyZW5JbmxpbmUoKSkgewotICAgICAgICAgICAg
bV9mbG9hdGluZ09iamVjdHMtPmZpcnN0KCk7Ci0gICAgICAgICAgICB3aGlsZSAoRmxvYXRpbmdP
YmplY3QqIGYgPSBtX2Zsb2F0aW5nT2JqZWN0cy0+dGFrZSgpKQorICAgICAgICAgICAgRmxvYXRp
bmdPYmplY3RMaXN0SGFzaFNldDo6aXRlcmF0b3IgZW5kID0gbV9mbG9hdGluZ09iamVjdHMtPmVu
ZCgpOworICAgICAgICAgICAgZm9yIChGbG9hdGluZ09iamVjdExpc3RIYXNoU2V0OjppdGVyYXRv
ciBpdCA9IG1fZmxvYXRpbmdPYmplY3RzLT5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKKyAg
ICAgICAgICAgICAgICBGbG9hdGluZ09iamVjdCogZiA9ICppdDsKICAgICAgICAgICAgICAgICBm
bG9hdE1hcC5hZGQoZi0+bV9yZW5kZXJlciwgZik7Ci0gICAgICAgIH0gZWxzZQotICAgICAgICAg
ICAgbV9mbG9hdGluZ09iamVjdHMtPmNsZWFyKCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0g
ZWxzZSB7CisgICAgICAgICAgICBGbG9hdGluZ09iamVjdExpc3RIYXNoU2V0OjppdGVyYXRvciBl
bmQgPSBtX2Zsb2F0aW5nT2JqZWN0cy0+ZW5kKCk7CisgICAgICAgICAgICBmb3IgKEZsb2F0aW5n
T2JqZWN0TGlzdEhhc2hTZXQ6Oml0ZXJhdG9yIGl0ID0gbV9mbG9hdGluZ09iamVjdHMtPmJlZ2lu
KCk7IGl0ICE9IGVuZDsgKytpdCkgeworICAgICAgICAgICAgICAgIEZsb2F0aW5nT2JqZWN0KiBm
ID0gKml0OworICAgICAgICAgICAgICAgIGRlbGV0ZSBmOworICAgICAgICAgICAgfQorICAgICAg
ICB9CisgICAgICAgIG1fZmxvYXRpbmdPYmplY3RzLT5jbGVhcigpOwogICAgIH0KIAogICAgIC8v
IFdlIHNob3VsZCBub3QgcHJvY2VzcyBmbG9hdHMgaWYgdGhlIHBhcmVudCBub2RlIGlzIG5vdCBh
IFJlbmRlckJsb2NrLiBPdGhlcndpc2UsIHdlIHdpbGwgYWRkIApAQCAtMzU0Nyw3ICszNTY0LDkg
QEAgdm9pZCBSZW5kZXJCbG9jazo6Y2xlYXJGbG9hdHMoKQogICAgICAgICBpbnQgY2hhbmdlTG9n
aWNhbFRvcCA9IG51bWVyaWNfbGltaXRzPGludD46Om1heCgpOwogICAgICAgICBpbnQgY2hhbmdl
TG9naWNhbEJvdHRvbSA9IG51bWVyaWNfbGltaXRzPGludD46Om1pbigpOwogICAgICAgICBpZiAo
bV9mbG9hdGluZ09iamVjdHMpIHsKLSAgICAgICAgICAgIGZvciAoRmxvYXRpbmdPYmplY3QqIGYg
PSBtX2Zsb2F0aW5nT2JqZWN0cy0+Zmlyc3QoKTsgZjsgZiA9IG1fZmxvYXRpbmdPYmplY3RzLT5u
ZXh0KCkpIHsKKyAgICAgICAgICAgIEZsb2F0aW5nT2JqZWN0TGlzdEhhc2hTZXQ6OmNvbnN0X2l0
ZXJhdG9yIGVuZCA9IG1fZmxvYXRpbmdPYmplY3RzLT5lbmQoKTsKKyAgICAgICAgICAgIGZvciAo
RmxvYXRpbmdPYmplY3RMaXN0SGFzaFNldDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBtX2Zsb2F0aW5n
T2JqZWN0cy0+YmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7CisgICAgICAgICAgICAgICAgRmxv
YXRpbmdPYmplY3QqIGYgPSAqaXQ7CiAgICAgICAgICAgICAgICAgRmxvYXRpbmdPYmplY3QqIG9s
ZEZsb2F0aW5nT2JqZWN0ID0gZmxvYXRNYXAuZ2V0KGYtPm1fcmVuZGVyZXIpOwogICAgICAgICAg
ICAgICAgIGludCBsb2dpY2FsQm90dG9tID0gbG9naWNhbEJvdHRvbUZvckZsb2F0KGYpOwogICAg
ICAgICAgICAgICAgIGlmIChvbGRGbG9hdGluZ09iamVjdCkgewpAQCAtMzU5Myw4ICszNjEyLDkg
QEAgaW50IFJlbmRlckJsb2NrOjphZGRPdmVyaGFuZ2luZ0Zsb2F0cyhSZW5kZXJCbG9jayogY2hp
bGQsIGludCBsb2dpY2FsTGVmdE9mZnNldCwKIAogICAgIC8vIEZsb2F0cyB0aGF0IHdpbGwgcmVt
YWluIHRoZSBjaGlsZCdzIHJlc3BvbnNpYmlsaXR5IHRvIHBhaW50IHNob3VsZCBmYWN0b3IgaW50
byBpdHMKICAgICAvLyBvdmVyZmxvdy4KLSAgICBEZXByZWNhdGVkUHRyTGlzdEl0ZXJhdG9yPEZs
b2F0aW5nT2JqZWN0PiBpdCgqY2hpbGQtPm1fZmxvYXRpbmdPYmplY3RzKTsKLSAgICBmb3IgKEZs
b2F0aW5nT2JqZWN0KiByOyAociA9IGl0LmN1cnJlbnQoKSk7ICsraXQpIHsKKyAgICBGbG9hdGlu
Z09iamVjdExpc3RIYXNoU2V0Ojpjb25zdF9pdGVyYXRvciBjaGlsZEVuZCA9IGNoaWxkLT5tX2Zs
b2F0aW5nT2JqZWN0cy0+ZW5kKCk7CisgICAgZm9yIChGbG9hdGluZ09iamVjdExpc3RIYXNoU2V0
Ojpjb25zdF9pdGVyYXRvciBjaGlsZEl0ID0gY2hpbGQtPm1fZmxvYXRpbmdPYmplY3RzLT5iZWdp
bigpOyBjaGlsZEl0ICE9IGNoaWxkRW5kOyArK2NoaWxkSXQpIHsKKyAgICAgICAgRmxvYXRpbmdP
YmplY3QqIHIgPSAqY2hpbGRJdDsKICAgICAgICAgaW50IGxvZ2ljYWxCb3R0b20gPSBjaGlsZC0+
bG9naWNhbFRvcCgpICsgbG9naWNhbEJvdHRvbUZvckZsb2F0KHIpOwogICAgICAgICBsb3dlc3RG
bG9hdExvZ2ljYWxCb3R0b20gPSBtYXgobG93ZXN0RmxvYXRMb2dpY2FsQm90dG9tLCBsb2dpY2Fs
Qm90dG9tKTsKIApAQCAtMzYxOCwxMSArMzYzOCwxMCBAQCBpbnQgUmVuZGVyQmxvY2s6OmFkZE92
ZXJoYW5naW5nRmxvYXRzKFJlbmRlckJsb2NrKiBjaGlsZCwgaW50IGxvZ2ljYWxMZWZ0T2Zmc2V0
LAogICAgICAgICAgICAgICAgIGZsb2F0aW5nT2JqLT5tX2lzRGVzY2VuZGFudCA9IHRydWU7CiAK
ICAgICAgICAgICAgICAgICAvLyBXZSBjcmVhdGUgdGhlIGZsb2F0aW5nIG9iamVjdCBsaXN0IGxh
emlseS4KLSAgICAgICAgICAgICAgICBpZiAoIW1fZmxvYXRpbmdPYmplY3RzKSB7Ci0gICAgICAg
ICAgICAgICAgICAgIG1fZmxvYXRpbmdPYmplY3RzID0gbmV3IERlcHJlY2F0ZWRQdHJMaXN0PEZs
b2F0aW5nT2JqZWN0PjsKLSAgICAgICAgICAgICAgICAgICAgbV9mbG9hdGluZ09iamVjdHMtPnNl
dEF1dG9EZWxldGUodHJ1ZSk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIG1f
ZmxvYXRpbmdPYmplY3RzLT5hcHBlbmQoZmxvYXRpbmdPYmopOworICAgICAgICAgICAgICAgIGlm
ICghbV9mbG9hdGluZ09iamVjdHMpCisgICAgICAgICAgICAgICAgICAgIG1fZmxvYXRpbmdPYmpl
Y3RzID0gbmV3IEZsb2F0aW5nT2JqZWN0TGlzdEhhc2hTZXQ7CisKKyAgICAgICAgICAgICAgICBt
X2Zsb2F0aW5nT2JqZWN0cy0+YWRkKGZsb2F0aW5nT2JqKTsKICAgICAgICAgICAgIH0KICAgICAg
ICAgfSBlbHNlIHsKICAgICAgICAgICAgIGlmIChtYWtlQ2hpbGRQYWludE90aGVyRmxvYXRzICYm
ICFyLT5tX3Nob3VsZFBhaW50ICYmICFyLT5tX3JlbmRlcmVyLT5oYXNTZWxmUGFpbnRpbmdMYXll
cigpICYmCkBAIC0zNjUxLDIyICszNjcwLDEyIEBAIHZvaWQgUmVuZGVyQmxvY2s6OmFkZEludHJ1
ZGluZ0Zsb2F0cyhSZW5kZXJCbG9jayogcHJldiwgaW50IGxvZ2ljYWxMZWZ0T2Zmc2V0LCBpCiAg
ICAgICAgIHJldHVybjsKIAogICAgIGxvZ2ljYWxMZWZ0T2Zmc2V0ICs9IChzdHlsZSgpLT5pc0hv
cml6b250YWxXcml0aW5nTW9kZSgpID8gbWFyZ2luTGVmdCgpIDogbWFyZ2luVG9wKCkpOwotICAg
ICAgICAgICAgICAgIAotICAgIERlcHJlY2F0ZWRQdHJMaXN0SXRlcmF0b3I8RmxvYXRpbmdPYmpl
Y3Q+IGl0KCpwcmV2LT5tX2Zsb2F0aW5nT2JqZWN0cyk7Ci0gICAgZm9yIChGbG9hdGluZ09iamVj
dCAqcjsgKHIgPSBpdC5jdXJyZW50KCkpOyArK2l0KSB7CisKKyAgICBGbG9hdGluZ09iamVjdExp
c3RIYXNoU2V0Ojpjb25zdF9pdGVyYXRvciBwcmV2RW5kID0gcHJldi0+bV9mbG9hdGluZ09iamVj
dHMtPmVuZCgpOworICAgIGZvciAoRmxvYXRpbmdPYmplY3RMaXN0SGFzaFNldDo6Y29uc3RfaXRl
cmF0b3IgcHJldkl0ID0gcHJldi0+bV9mbG9hdGluZ09iamVjdHMtPmJlZ2luKCk7IHByZXZJdCAh
PSBwcmV2RW5kOyArK3ByZXZJdCkgeworICAgICAgICBGbG9hdGluZ09iamVjdCogciA9ICpwcmV2
SXQ7CiAgICAgICAgIGlmIChsb2dpY2FsQm90dG9tRm9yRmxvYXQocikgPiBsb2dpY2FsVG9wT2Zm
c2V0KSB7Ci0gICAgICAgICAgICAvLyBUaGUgb2JqZWN0IG1heSBhbHJlYWR5IGJlIGluIG91ciBs
aXN0LiBDaGVjayBmb3IgaXQgdXAgZnJvbnQgdG8gYXZvaWQKLSAgICAgICAgICAgIC8vIGNyZWF0
aW5nIGR1cGxpY2F0ZSBlbnRyaWVzLgotICAgICAgICAgICAgRmxvYXRpbmdPYmplY3QqIGYgPSAw
OwotICAgICAgICAgICAgaWYgKG1fZmxvYXRpbmdPYmplY3RzKSB7Ci0gICAgICAgICAgICAgICAg
RGVwcmVjYXRlZFB0ckxpc3RJdGVyYXRvcjxGbG9hdGluZ09iamVjdD4gaXQoKm1fZmxvYXRpbmdP
YmplY3RzKTsKLSAgICAgICAgICAgICAgICB3aGlsZSAoKGYgPSBpdC5jdXJyZW50KCkpKSB7Ci0g
ICAgICAgICAgICAgICAgICAgIGlmIChmLT5tX3JlbmRlcmVyID09IHItPm1fcmVuZGVyZXIpCi0g
ICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgKytpdDsK
LSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBpZiAoIWYpIHsK
KyAgICAgICAgICAgIGlmICghbV9mbG9hdGluZ09iamVjdHMgfHwgIW1fZmxvYXRpbmdPYmplY3Rz
LT5jb250YWlucyhyKSkgewogICAgICAgICAgICAgICAgIGludCBsZWZ0T2Zmc2V0ID0gc3R5bGUo
KS0+aXNIb3Jpem9udGFsV3JpdGluZ01vZGUoKSA/IGxvZ2ljYWxMZWZ0T2Zmc2V0IDogbG9naWNh
bFRvcE9mZnNldDsKICAgICAgICAgICAgICAgICBpbnQgdG9wT2Zmc2V0ID0gc3R5bGUoKS0+aXNI
b3Jpem9udGFsV3JpdGluZ01vZGUoKSA/IGxvZ2ljYWxUb3BPZmZzZXQgOiBsb2dpY2FsTGVmdE9m
ZnNldDsKICAgICAgICAgICAgICAgICAKQEAgLTM2ODgsMTEgKzM2OTcsOSBAQCB2b2lkIFJlbmRl
ckJsb2NrOjphZGRJbnRydWRpbmdGbG9hdHMoUmVuZGVyQmxvY2sqIHByZXYsIGludCBsb2dpY2Fs
TGVmdE9mZnNldCwgaQogICAgICAgICAgICAgICAgIGZsb2F0aW5nT2JqLT5tX3JlbmRlcmVyID0g
ci0+bV9yZW5kZXJlcjsKICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAvLyBXZSBj
cmVhdGUgdGhlIGZsb2F0aW5nIG9iamVjdCBsaXN0IGxhemlseS4KLSAgICAgICAgICAgICAgICBp
ZiAoIW1fZmxvYXRpbmdPYmplY3RzKSB7Ci0gICAgICAgICAgICAgICAgICAgIG1fZmxvYXRpbmdP
YmplY3RzID0gbmV3IERlcHJlY2F0ZWRQdHJMaXN0PEZsb2F0aW5nT2JqZWN0PjsKLSAgICAgICAg
ICAgICAgICAgICAgbV9mbG9hdGluZ09iamVjdHMtPnNldEF1dG9EZWxldGUodHJ1ZSk7Ci0gICAg
ICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIG1fZmxvYXRpbmdPYmplY3RzLT5hcHBlbmQo
ZmxvYXRpbmdPYmopOworICAgICAgICAgICAgICAgIGlmICghbV9mbG9hdGluZ09iamVjdHMpCisg
ICAgICAgICAgICAgICAgICAgIG1fZmxvYXRpbmdPYmplY3RzID0gbmV3IEZsb2F0aW5nT2JqZWN0
TGlzdEhhc2hTZXQ7CisgICAgICAgICAgICAgICAgbV9mbG9hdGluZ09iamVjdHMtPmFkZChmbG9h
dGluZ09iaik7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICB9CkBAIC0zNzA0LDE3ICsz
NzExLDkgQEAgYm9vbCBSZW5kZXJCbG9jazo6YXZvaWRzRmxvYXRzKCkgY29uc3QKICAgICByZXR1
cm4gUmVuZGVyQm94Ojphdm9pZHNGbG9hdHMoKSB8fCAhc3R5bGUoKS0+aGFzQXV0b0NvbHVtbkNv
dW50KCkgfHwgIXN0eWxlKCktPmhhc0F1dG9Db2x1bW5XaWR0aCgpOwogfQogCi1ib29sIFJlbmRl
ckJsb2NrOjpjb250YWluc0Zsb2F0KFJlbmRlck9iamVjdCogbykKK2Jvb2wgUmVuZGVyQmxvY2s6
OmNvbnRhaW5zRmxvYXQoUmVuZGVyQm94KiBvKQogewotICAgIGlmIChtX2Zsb2F0aW5nT2JqZWN0
cykgewotICAgICAgICBEZXByZWNhdGVkUHRyTGlzdEl0ZXJhdG9yPEZsb2F0aW5nT2JqZWN0PiBp
dCgqbV9mbG9hdGluZ09iamVjdHMpOwotICAgICAgICB3aGlsZSAoaXQuY3VycmVudCgpKSB7Ci0g
ICAgICAgICAgICBpZiAoaXQuY3VycmVudCgpLT5tX3JlbmRlcmVyID09IG8pCi0gICAgICAgICAg
ICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgICAgICArK2l0OwotICAgICAgICB9Ci0gICAgfQot
ICAgIHJldHVybiBmYWxzZTsKKyAgICByZXR1cm4gbV9mbG9hdGluZ09iamVjdHMgJiYgbV9mbG9h
dGluZ09iamVjdHMtPmNvbnRhaW5zPFJlbmRlckJveCosIEZsb2F0aW5nT2JqZWN0SGFzaFRyYW5z
bGF0b3I+KG8pOwogfQogCiB2b2lkIFJlbmRlckJsb2NrOjptYXJrQWxsRGVzY2VuZGFudHNXaXRo
RmxvYXRzRm9yTGF5b3V0KFJlbmRlckJveCogZmxvYXRUb1JlbW92ZSwgYm9vbCBpbkxheW91dCkK
QEAgLTM4NzIsOSArMzg3MSwxMCBAQCBib29sIFJlbmRlckJsb2NrOjpoaXRUZXN0RmxvYXRzKGNv
bnN0IEhpdFRlc3RSZXF1ZXN0JiByZXF1ZXN0LCBIaXRUZXN0UmVzdWx0JiByZQogICAgICAgICB0
eSArPSB0b1JlbmRlclZpZXcodGhpcyktPmZyYW1lVmlldygpLT5zY3JvbGxZKCk7CiAgICAgfQog
Ci0gICAgRmxvYXRpbmdPYmplY3QqIGZsb2F0aW5nT2JqZWN0OwotICAgIERlcHJlY2F0ZWRQdHJM
aXN0SXRlcmF0b3I8RmxvYXRpbmdPYmplY3Q+IGl0KCptX2Zsb2F0aW5nT2JqZWN0cyk7Ci0gICAg
Zm9yIChpdC50b0xhc3QoKTsgKGZsb2F0aW5nT2JqZWN0ID0gaXQuY3VycmVudCgpKTsgLS1pdCkg
eworICAgIEZsb2F0aW5nT2JqZWN0TGlzdEhhc2hTZXQ6OmNvbnN0X2l0ZXJhdG9yIGJlZ2luID0g
bV9mbG9hdGluZ09iamVjdHMtPmJlZ2luKCk7CisgICAgZm9yIChGbG9hdGluZ09iamVjdExpc3RI
YXNoU2V0Ojpjb25zdF9pdGVyYXRvciBpdCA9IG1fZmxvYXRpbmdPYmplY3RzLT5lbmQoKTsgaXQg
IT0gYmVnaW47KSB7CisgICAgICAgIC0taXQ7CisgICAgICAgIEZsb2F0aW5nT2JqZWN0KiBmbG9h
dGluZ09iamVjdCA9ICppdDsKICAgICAgICAgaWYgKGZsb2F0aW5nT2JqZWN0LT5tX3Nob3VsZFBh
aW50ICYmICFmbG9hdGluZ09iamVjdC0+bV9yZW5kZXJlci0+aGFzU2VsZlBhaW50aW5nTGF5ZXIo
KSkgewogICAgICAgICAgICAgaW50IHhPZmZzZXQgPSB4UG9zaXRpb25Gb3JGbG9hdEluY2x1ZGlu
Z01hcmdpbihmbG9hdGluZ09iamVjdCkgLSBmbG9hdGluZ09iamVjdC0+bV9yZW5kZXJlci0+eCgp
OwogICAgICAgICAgICAgaW50IHlPZmZzZXQgPSB5UG9zaXRpb25Gb3JGbG9hdEluY2x1ZGluZ01h
cmdpbihmbG9hdGluZ09iamVjdCkgLSBmbG9hdGluZ09iamVjdC0+bV9yZW5kZXJlci0+eSgpOwpA
QCAtNTQ5OSw5ICs1NDk5LDkgQEAgdm9pZCBSZW5kZXJCbG9jazo6YWRqdXN0Rm9yQm9yZGVyRml0
KGludCB4LCBpbnQmIGxlZnQsIGludCYgcmlnaHQpIGNvbnN0CiAgICAgICAgIH0KICAgICAgICAg
CiAgICAgICAgIGlmIChtX2Zsb2F0aW5nT2JqZWN0cykgewotICAgICAgICAgICAgRmxvYXRpbmdP
YmplY3QqIHI7Ci0gICAgICAgICAgICBEZXByZWNhdGVkUHRyTGlzdEl0ZXJhdG9yPEZsb2F0aW5n
T2JqZWN0PiBpdCgqbV9mbG9hdGluZ09iamVjdHMpOwotICAgICAgICAgICAgZm9yICg7IChyID0g
aXQuY3VycmVudCgpKTsgKytpdCkgeworICAgICAgICAgICAgRmxvYXRpbmdPYmplY3RMaXN0SGFz
aFNldDo6Y29uc3RfaXRlcmF0b3IgZW5kID0gbV9mbG9hdGluZ09iamVjdHMtPmVuZCgpOworICAg
ICAgICAgICAgZm9yIChGbG9hdGluZ09iamVjdExpc3RIYXNoU2V0Ojpjb25zdF9pdGVyYXRvciBp
dCA9IG1fZmxvYXRpbmdPYmplY3RzLT5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKKyAgICAg
ICAgICAgICAgICBGbG9hdGluZ09iamVjdCogciA9ICppdDsKICAgICAgICAgICAgICAgICAvLyBP
bmx5IGV4YW1pbmUgdGhlIG9iamVjdCBpZiBvdXIgbV9zaG91bGRQYWludCBmbGFnIGlzIHNldC4K
ICAgICAgICAgICAgICAgICBpZiAoci0+bV9zaG91bGRQYWludCkgewogICAgICAgICAgICAgICAg
ICAgICBpbnQgZmxvYXRMZWZ0ID0geFBvc2l0aW9uRm9yRmxvYXRJbmNsdWRpbmdNYXJnaW4ocikg
LSByLT5tX3JlbmRlcmVyLT54KCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvUmVuZGVyQmxvY2suaCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCbG9jay5o
CmluZGV4IDJkYjM1NzBiYjBiMWUxNWQ1YjYxMzkwNGVmNjlkNTUzYWM2YWZkMzkuLmU5MjA5NzYx
N2UwNTIxODdmY2RkN2UyYzIzMTNkYmM3MzgwYjYyZmQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9SZW5kZXJCbG9jay5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9SZW5kZXJCbG9jay5oCkBAIC0yMyw3ICsyMyw2IEBACiAjaWZuZGVmIFJlbmRlckJsb2NrX2gK
ICNkZWZpbmUgUmVuZGVyQmxvY2tfaAogCi0jaW5jbHVkZSAiRGVwcmVjYXRlZFB0ckxpc3QuaCIK
ICNpbmNsdWRlICJHYXBSZWN0cy5oIgogI2luY2x1ZGUgIlJlbmRlckJveC5oIgogI2luY2x1ZGUg
IlJlbmRlckxpbmVCb3hMaXN0LmgiCkBAIC05NSw3ICs5NCw3IEBAIHB1YmxpYzoKICAgICB2aXJ0
dWFsIHZvaWQgbWFya0ZvclBhZ2luYXRpb25SZWxheW91dElmTmVlZGVkKCk7CiAgICAgCiAgICAg
Ym9vbCBjb250YWluc0Zsb2F0cygpIHsgcmV0dXJuIG1fZmxvYXRpbmdPYmplY3RzICYmICFtX2Zs
b2F0aW5nT2JqZWN0cy0+aXNFbXB0eSgpOyB9Ci0gICAgYm9vbCBjb250YWluc0Zsb2F0KFJlbmRl
ck9iamVjdCopOworICAgIGJvb2wgY29udGFpbnNGbG9hdChSZW5kZXJCb3gqKTsKIAogICAgIGlu
dCBhdmFpbGFibGVMb2dpY2FsV2lkdGhGb3JMaW5lKGludCBwb3NpdGlvbiwgYm9vbCBmaXJzdExp
bmUpIGNvbnN0OwogICAgIGludCBsb2dpY2FsUmlnaHRPZmZzZXRGb3JMaW5lKGludCBwb3NpdGlv
biwgYm9vbCBmaXJzdExpbmUpIGNvbnN0IHsgcmV0dXJuIGxvZ2ljYWxSaWdodE9mZnNldEZvckxp
bmUocG9zaXRpb24sIGxvZ2ljYWxSaWdodE9mZnNldEZvckNvbnRlbnQoKSwgZmlyc3RMaW5lKTsg
fQpAQCAtNjk1LDkgKzY5NCwxOSBAQCBwcml2YXRlOgogICAgIGludCBhZGp1c3RGb3JVbnNwbGl0
dGFibGVDaGlsZChSZW5kZXJCb3gqIGNoaWxkLCBpbnQgbG9naWNhbE9mZnNldCwgYm9vbCBpbmNs
dWRlTWFyZ2lucyA9IGZhbHNlKTsgLy8gSWYgdGhlIGNoaWxkIGlzIHVuc3BsaXR0YWJsZSBhbmQg
Y2FuJ3QgZml0IG9uIHRoZSBjdXJyZW50IHBhZ2UsIHJldHVybiB0aGUgdG9wIG9mIHRoZSBuZXh0
IHBhZ2UvY29sdW1uLgogICAgIHZvaWQgYWRqdXN0TGluZVBvc2l0aW9uRm9yUGFnaW5hdGlvbihS
b290SW5saW5lQm94KiwgaW50JiBkZWx0YU9mZnNldCk7IC8vIENvbXB1dGVzIGEgZGVsdGFPZmZz
ZXQgdmFsdWUgdGhhdCBwdXQgYSBsaW5lIGF0IHRoZSB0b3Agb2YgdGhlIG5leHQgcGFnZSBpZiBp
dCBkb2Vzbid0IGZpdCBvbiB0aGUgY3VycmVudCBwYWdlLgogCi0gICAgdHlwZWRlZiBQb3NpdGlv
bmVkT2JqZWN0c0xpc3RIYXNoU2V0Ojpjb25zdF9pdGVyYXRvciBJdGVyYXRvcjsKLSAgICBEZXBy
ZWNhdGVkUHRyTGlzdDxGbG9hdGluZ09iamVjdD4qIG1fZmxvYXRpbmdPYmplY3RzOworICAgIHN0
cnVjdCBGbG9hdGluZ09iamVjdEhhc2hGdW5jdGlvbnMgeworICAgICAgICBzdGF0aWMgdW5zaWdu
ZWQgaGFzaChGbG9hdGluZ09iamVjdCoga2V5KSB7IHJldHVybiBEZWZhdWx0SGFzaDxSZW5kZXJC
b3gqPjo6SGFzaDo6aGFzaChrZXktPm1fcmVuZGVyZXIpOyB9CisgICAgICAgIHN0YXRpYyBib29s
IGVxdWFsKEZsb2F0aW5nT2JqZWN0KiBhLCBGbG9hdGluZ09iamVjdCogYikgeyByZXR1cm4gYS0+
bV9yZW5kZXJlciA9PSBiLT5tX3JlbmRlcmVyOyB9CisgICAgICAgIHN0YXRpYyBjb25zdCBib29s
IHNhZmVUb0NvbXBhcmVUb0VtcHR5T3JEZWxldGVkID0gdHJ1ZTsKKyAgICB9OworICAgIHN0cnVj
dCBGbG9hdGluZ09iamVjdEhhc2hUcmFuc2xhdG9yIHsKKyAgICAgICAgc3RhdGljIHVuc2lnbmVk
IGhhc2goUmVuZGVyQm94KiBrZXkpIHsgcmV0dXJuIERlZmF1bHRIYXNoPFJlbmRlckJveCo+OjpI
YXNoOjpoYXNoKGtleSk7IH0KKyAgICAgICAgc3RhdGljIGJvb2wgZXF1YWwoRmxvYXRpbmdPYmpl
Y3QqIGEsIFJlbmRlckJveCogYikgeyByZXR1cm4gYS0+bV9yZW5kZXJlciA9PSBiOyB9CisgICAg
fTsKKyAgICB0eXBlZGVmIExpc3RIYXNoU2V0PEZsb2F0aW5nT2JqZWN0KiwgNCwgRmxvYXRpbmdP
YmplY3RIYXNoRnVuY3Rpb25zPiBGbG9hdGluZ09iamVjdExpc3RIYXNoU2V0OworICAgIEZsb2F0
aW5nT2JqZWN0TGlzdEhhc2hTZXQqIG1fZmxvYXRpbmdPYmplY3RzOwogICAgIAorICAgIHR5cGVk
ZWYgUG9zaXRpb25lZE9iamVjdHNMaXN0SGFzaFNldDo6Y29uc3RfaXRlcmF0b3IgSXRlcmF0b3I7
CiAgICAgUG9zaXRpb25lZE9iamVjdHNMaXN0SGFzaFNldCogbV9wb3NpdGlvbmVkT2JqZWN0czsK
IAogICAgIC8vIEFsbG9jYXRlZCBvbmx5IHdoZW4gc29tZSBvZiB0aGVzZSBmaWVsZHMgaGF2ZSBu
b24tZGVmYXVsdCB2YWx1ZXMKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9S
ZW5kZXJCbG9ja0xpbmVMYXlvdXQuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
ckJsb2NrTGluZUxheW91dC5jcHAKaW5kZXggZmJlZDA2OWZiYjUwZDc4ZTcwYmQwOTA2NGIwMjcw
ODc2YzNjNTdmZS4uYzk2ZDM4YmU3OTA4NjVjYTRlOTUzYTE1NTljYmZiMzc2MjJjODhmMCAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJsb2NrTGluZUxheW91dC5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJsb2NrTGluZUxheW91dC5j
cHAKQEAgLTYwOCw3ICs2MDgsNyBAQCB2b2lkIFJlbmRlckJsb2NrOjpsYXlvdXRJbmxpbmVDaGls
ZHJlbihib29sIHJlbGF5b3V0Q2hpbGRyZW4sIGludCYgcmVwYWludExvZ2ljYQogICAgICAgICAg
ICAgfQogICAgICAgICB9CiAKLSAgICAgICAgRmxvYXRpbmdPYmplY3QqIGxhc3RGbG9hdCA9IG1f
ZmxvYXRpbmdPYmplY3RzID8gbV9mbG9hdGluZ09iamVjdHMtPmxhc3QoKSA6IDA7CisgICAgICAg
IEZsb2F0aW5nT2JqZWN0KiBsYXN0RmxvYXQgPSAobV9mbG9hdGluZ09iamVjdHMgJiYgIW1fZmxv
YXRpbmdPYmplY3RzLT5pc0VtcHR5KCkpID8gbV9mbG9hdGluZ09iamVjdHMtPmxhc3QoKSA6IDA7
CiAKICAgICAgICAgTGluZU1pZHBvaW50U3RhdGUmIGxpbmVNaWRwb2ludFN0YXRlID0gcmVzb2x2
ZXIubWlkcG9pbnRTdGF0ZSgpOwogCkBAIC02NzcsNyArNjc3LDcgQEAgdm9pZCBSZW5kZXJCbG9j
azo6bGF5b3V0SW5saW5lQ2hpbGRyZW4oYm9vbCByZWxheW91dENoaWxkcmVuLCBpbnQmIHJlcGFp
bnRMb2dpY2EKICAgICAgICAgICAgIGJvb2wgaHlwaGVuYXRlZDsKICAgICAgICAgICAgIAogICAg
ICAgICAgICAgSW5saW5lSXRlcmF0b3Igb2xkRW5kID0gZW5kOwotICAgICAgICAgICAgRmxvYXRp
bmdPYmplY3QqIGxhc3RGbG9hdEZyb21QcmV2aW91c0xpbmUgPSBtX2Zsb2F0aW5nT2JqZWN0cyA/
IG1fZmxvYXRpbmdPYmplY3RzLT5sYXN0KCkgOiAwOworICAgICAgICAgICAgRmxvYXRpbmdPYmpl
Y3QqIGxhc3RGbG9hdEZyb21QcmV2aW91c0xpbmUgPSAobV9mbG9hdGluZ09iamVjdHMgJiYgIW1f
ZmxvYXRpbmdPYmplY3RzLT5pc0VtcHR5KCkpID8gbV9mbG9hdGluZ09iamVjdHMtPmxhc3QoKSA6
IDA7CiAgICAgICAgICAgICBlbmQgPSBmaW5kTmV4dExpbmVCcmVhayhyZXNvbHZlciwgZmlyc3RM
aW5lLCBpc0xpbmVFbXB0eSwgcHJldmlvdXNMaW5lQnJva2VDbGVhbmx5LCBoeXBoZW5hdGVkLCAm
Y2xlYXIsIGxhc3RGbG9hdEZyb21QcmV2aW91c0xpbmUpOwogICAgICAgICAgICAgaWYgKHJlc29s
dmVyLnBvc2l0aW9uKCkuYXRFbmQoKSkgewogICAgICAgICAgICAgICAgIHJlc29sdmVyLmRlbGV0
ZVJ1bnMoKTsKQEAgLTgyOCwxMyArODI4LDE2IEBAIHZvaWQgUmVuZGVyQmxvY2s6OmxheW91dElu
bGluZUNoaWxkcmVuKGJvb2wgcmVsYXlvdXRDaGlsZHJlbiwgaW50JiByZXBhaW50TG9naWNhCiAg
ICAgICAgICAgICB9CiAKICAgICAgICAgICAgIGlmIChtX2Zsb2F0aW5nT2JqZWN0cyAmJiBsYXN0
Um9vdEJveCgpKSB7CisgICAgICAgICAgICAgICAgRmxvYXRpbmdPYmplY3RMaXN0SGFzaFNldDo6
Y29uc3RfaXRlcmF0b3IgaXQgPSBtX2Zsb2F0aW5nT2JqZWN0cy0+YmVnaW4oKTsKKyAgICAgICAg
ICAgICAgICBGbG9hdGluZ09iamVjdExpc3RIYXNoU2V0Ojpjb25zdF9pdGVyYXRvciBlbmQgPSBt
X2Zsb2F0aW5nT2JqZWN0cy0+ZW5kKCk7CiAgICAgICAgICAgICAgICAgaWYgKGxhc3RGbG9hdCkg
ewotICAgICAgICAgICAgICAgICAgICBmb3IgKEZsb2F0aW5nT2JqZWN0KiBmID0gbV9mbG9hdGlu
Z09iamVjdHMtPmxhc3QoKTsgZiAhPSBsYXN0RmxvYXQ7IGYgPSBtX2Zsb2F0aW5nT2JqZWN0cy0+
cHJldigpKSB7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgbV9m
bG9hdGluZ09iamVjdHMtPm5leHQoKTsKLSAgICAgICAgICAgICAgICB9IGVsc2UKLSAgICAgICAg
ICAgICAgICAgICAgbV9mbG9hdGluZ09iamVjdHMtPmZpcnN0KCk7Ci0gICAgICAgICAgICAgICAg
Zm9yIChGbG9hdGluZ09iamVjdCogZiA9IG1fZmxvYXRpbmdPYmplY3RzLT5jdXJyZW50KCk7IGY7
IGYgPSBtX2Zsb2F0aW5nT2JqZWN0cy0+bmV4dCgpKSB7CisgICAgICAgICAgICAgICAgICAgIEZs
b2F0aW5nT2JqZWN0TGlzdEhhc2hTZXQ6OmNvbnN0X2l0ZXJhdG9yIGxhc3RGbG9hdEl0ZXJhdG9y
ID0gbV9mbG9hdGluZ09iamVjdHMtPmZpbmQobGFzdEZsb2F0KTsKKyAgICAgICAgICAgICAgICAg
ICAgQVNTRVJUKGxhc3RGbG9hdEl0ZXJhdG9yICE9IGVuZCk7CisgICAgICAgICAgICAgICAgICAg
ICsrbGFzdEZsb2F0SXRlcmF0b3I7CisgICAgICAgICAgICAgICAgICAgIGl0ID0gbGFzdEZsb2F0
SXRlcmF0b3I7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGZvciAoOyBpdCAh
PSBlbmQ7ICsraXQpIHsKKyAgICAgICAgICAgICAgICAgICAgRmxvYXRpbmdPYmplY3QqIGYgPSAq
aXQ7CiAgICAgICAgICAgICAgICAgICAgIGxhc3RSb290Qm94KCktPmZsb2F0cygpLmFwcGVuZChm
LT5tX3JlbmRlcmVyKTsKICAgICAgICAgICAgICAgICAgICAgQVNTRVJUKGYtPm1fcmVuZGVyZXIg
PT0gZmxvYXRzW2Zsb2F0SW5kZXhdLm9iamVjdCk7CiAgICAgICAgICAgICAgICAgICAgIC8vIElm
IGEgZmxvYXQncyBnZW9tZXRyeSBoYXMgY2hhbmdlZCwgZ2l2ZSB1cCBvbiBzeW5jaW5nIHdpdGgg
Y2xlYW4gbGluZXMuCkBAIC04NDIsNyArODQ1LDcgQEAgdm9pZCBSZW5kZXJCbG9jazo6bGF5b3V0
SW5saW5lQ2hpbGRyZW4oYm9vbCByZWxheW91dENoaWxkcmVuLCBpbnQmIHJlcGFpbnRMb2dpY2EK
ICAgICAgICAgICAgICAgICAgICAgICAgIGNoZWNrRm9yRW5kTGluZU1hdGNoID0gZmFsc2U7CiAg
ICAgICAgICAgICAgICAgICAgIGZsb2F0SW5kZXgrKzsKICAgICAgICAgICAgICAgICB9Ci0gICAg
ICAgICAgICAgICAgbGFzdEZsb2F0ID0gbV9mbG9hdGluZ09iamVjdHMtPmxhc3QoKTsKKyAgICAg
ICAgICAgICAgICBsYXN0RmxvYXQgPSAhbV9mbG9hdGluZ09iamVjdHMtPmlzRW1wdHkoKSA/IG1f
ZmxvYXRpbmdPYmplY3RzLT5sYXN0KCkgOiAwOwogICAgICAgICAgICAgfQogCiAgICAgICAgICAg
ICBsaW5lTWlkcG9pbnRTdGF0ZS5yZXNldCgpOwpAQCAtOTA1LDE1ICs5MDgsMTggQEAgdm9pZCBS
ZW5kZXJCbG9jazo6bGF5b3V0SW5saW5lQ2hpbGRyZW4oYm9vbCByZWxheW91dENoaWxkcmVuLCBp
bnQmIHJlcGFpbnRMb2dpY2EKICAgICAgICAgICAgICAgICB0cmFpbGluZ0Zsb2F0c0xpbmVCb3gt
PnNldE92ZXJmbG93RnJvbUxvZ2ljYWxSZWN0cyhsb2dpY2FsTGF5b3V0T3ZlcmZsb3csIGxvZ2lj
YWxWaXN1YWxPdmVyZmxvdyk7CiAgICAgICAgICAgICAgICAgdHJhaWxpbmdGbG9hdHNMaW5lQm94
LT5zZXRCbG9ja0xvZ2ljYWxIZWlnaHQobG9naWNhbEhlaWdodCgpKTsKICAgICAgICAgICAgIH0K
KworICAgICAgICAgICAgRmxvYXRpbmdPYmplY3RMaXN0SGFzaFNldDo6Y29uc3RfaXRlcmF0b3Ig
aXQgPSBtX2Zsb2F0aW5nT2JqZWN0cy0+YmVnaW4oKTsKKyAgICAgICAgICAgIEZsb2F0aW5nT2Jq
ZWN0TGlzdEhhc2hTZXQ6OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IG1fZmxvYXRpbmdPYmplY3RzLT5l
bmQoKTsKICAgICAgICAgICAgIGlmIChsYXN0RmxvYXQpIHsKLSAgICAgICAgICAgICAgICBmb3Ig
KEZsb2F0aW5nT2JqZWN0KiBmID0gbV9mbG9hdGluZ09iamVjdHMtPmxhc3QoKTsgZiAhPSBsYXN0
RmxvYXQ7IGYgPSBtX2Zsb2F0aW5nT2JqZWN0cy0+cHJldigpKSB7Ci0gICAgICAgICAgICAgICAg
fQotICAgICAgICAgICAgICAgIG1fZmxvYXRpbmdPYmplY3RzLT5uZXh0KCk7Ci0gICAgICAgICAg
ICB9IGVsc2UKLSAgICAgICAgICAgICAgICBtX2Zsb2F0aW5nT2JqZWN0cy0+Zmlyc3QoKTsKLSAg
ICAgICAgICAgIGZvciAoRmxvYXRpbmdPYmplY3QqIGYgPSBtX2Zsb2F0aW5nT2JqZWN0cy0+Y3Vy
cmVudCgpOyBmOyBmID0gbV9mbG9hdGluZ09iamVjdHMtPm5leHQoKSkKLSAgICAgICAgICAgICAg
ICBsYXN0Um9vdEJveCgpLT5mbG9hdHMoKS5hcHBlbmQoZi0+bV9yZW5kZXJlcik7Ci0gICAgICAg
ICAgICBsYXN0RmxvYXQgPSBtX2Zsb2F0aW5nT2JqZWN0cy0+bGFzdCgpOworICAgICAgICAgICAg
ICAgIEZsb2F0aW5nT2JqZWN0TGlzdEhhc2hTZXQ6OmNvbnN0X2l0ZXJhdG9yIGxhc3RGbG9hdEl0
ZXJhdG9yID0gbV9mbG9hdGluZ09iamVjdHMtPmZpbmQobGFzdEZsb2F0KTsKKyAgICAgICAgICAg
ICAgICBBU1NFUlQobGFzdEZsb2F0SXRlcmF0b3IgIT0gZW5kKTsKKyAgICAgICAgICAgICAgICAr
K2xhc3RGbG9hdEl0ZXJhdG9yOworICAgICAgICAgICAgICAgIGl0ID0gbGFzdEZsb2F0SXRlcmF0
b3I7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBmb3IgKDsgaXQgIT0gZW5kOyArK2l0KQor
ICAgICAgICAgICAgICAgIGxhc3RSb290Qm94KCktPmZsb2F0cygpLmFwcGVuZCgoKml0KS0+bV9y
ZW5kZXJlcik7CisgICAgICAgICAgICBsYXN0RmxvYXQgPSAhbV9mbG9hdGluZ09iamVjdHMtPmlz
RW1wdHkoKSA/IG1fZmxvYXRpbmdPYmplY3RzLT5sYXN0KCkgOiAwOwogICAgICAgICB9CiAgICAg
ICAgIHNpemVfdCBmbG9hdENvdW50ID0gZmxvYXRzLnNpemUoKTsKICAgICAgICAgLy8gRmxvYXRz
IHRoYXQgZGlkIG5vdCBoYXZlIGxheW91dCBkaWQgbm90IHJlcGFpbnQgd2hlbiB3ZSBsYWlkIHRo
ZW0gb3V0LiBUaGV5IHdvdWxkIGhhdmUKQEAgLTExNTAsNyArMTE1Niw5IEBAIGJvb2wgUmVuZGVy
QmxvY2s6Om1hdGNoZWRFbmRMaW5lKGNvbnN0IElubGluZUJpZGlSZXNvbHZlciYgcmVzb2x2ZXIs
IGNvbnN0IElubGluCiAKICAgICAgICAgaW50IGxvZ2ljYWxCb3R0b20gPSBsYXN0TGluZS0+Ymxv
Y2tMb2dpY2FsSGVpZ2h0KCkgKyBhYnMoZGVsdGEpOwogCi0gICAgICAgIGZvciAoRmxvYXRpbmdP
YmplY3QqIGYgPSBtX2Zsb2F0aW5nT2JqZWN0cy0+Zmlyc3QoKTsgZjsgZiA9IG1fZmxvYXRpbmdP
YmplY3RzLT5uZXh0KCkpIHsKKyAgICAgICAgRmxvYXRpbmdPYmplY3RMaXN0SGFzaFNldDo6Y29u
c3RfaXRlcmF0b3IgZW5kID0gbV9mbG9hdGluZ09iamVjdHMtPmVuZCgpOworICAgICAgICBmb3Ig
KEZsb2F0aW5nT2JqZWN0TGlzdEhhc2hTZXQ6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbV9mbG9hdGlu
Z09iamVjdHMtPmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkgeworICAgICAgICAgICAgRmxvYXRp
bmdPYmplY3QqIGYgPSAqaXQ7CiAgICAgICAgICAgICBpZiAobG9naWNhbEJvdHRvbUZvckZsb2F0
KGYpID49IGxvZ2ljYWxUb3AgJiYgbG9naWNhbEJvdHRvbUZvckZsb2F0KGYpIDwgbG9naWNhbEJv
dHRvbSkKICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIH0KQEAgLTExODQs
NyArMTE5Miw5IEBAIGJvb2wgUmVuZGVyQmxvY2s6Om1hdGNoZWRFbmRMaW5lKGNvbnN0IElubGlu
ZUJpZGlSZXNvbHZlciYgcmVzb2x2ZXIsIGNvbnN0IElubGluCiAKICAgICAgICAgICAgICAgICBp
bnQgbG9naWNhbEJvdHRvbSA9IGxhc3RMaW5lLT5ibG9ja0xvZ2ljYWxIZWlnaHQoKSArIGFicyhk
ZWx0YSk7CiAKLSAgICAgICAgICAgICAgICBmb3IgKEZsb2F0aW5nT2JqZWN0KiBmID0gbV9mbG9h
dGluZ09iamVjdHMtPmZpcnN0KCk7IGY7IGYgPSBtX2Zsb2F0aW5nT2JqZWN0cy0+bmV4dCgpKSB7
CisgICAgICAgICAgICAgICAgRmxvYXRpbmdPYmplY3RMaXN0SGFzaFNldDo6Y29uc3RfaXRlcmF0
b3IgZW5kID0gbV9mbG9hdGluZ09iamVjdHMtPmVuZCgpOworICAgICAgICAgICAgICAgIGZvciAo
RmxvYXRpbmdPYmplY3RMaXN0SGFzaFNldDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBtX2Zsb2F0aW5n
T2JqZWN0cy0+YmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7CisgICAgICAgICAgICAgICAgICAg
IEZsb2F0aW5nT2JqZWN0KiBmID0gKml0OwogICAgICAgICAgICAgICAgICAgICBpZiAobG9naWNh
bEJvdHRvbUZvckZsb2F0KGYpID49IGxvZ2ljYWxUb3AgJiYgbG9naWNhbEJvdHRvbUZvckZsb2F0
KGYpIDwgbG9naWNhbEJvdHRvbSkKICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKICAgICAgICAgICAgICAgICB9Cg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>83834</attachid>
            <date>2011-02-25 10:31:10 -0800</date>
            <delta_ts>2011-02-26 05:51:48 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-54972-20110225194044.patch</filename>
            <type>text/plain</type>
            <size>39344</size>
            <attacher name="Benjamin Poulain">benjamin</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogNzk2ODkKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9DaGFuZ2VMb2cgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nCmluZGV4IDY3
ZDA0OTQ4OGJlYjdmNDAwZDY2ZDNlYjVlZjE5ZWUzYzVmZmE5YjcuLmE5MjA0YTkzNmFlY2UyZjdh
Zjc2NGI5ZmNhNWExZWZhYmEzYmQ1YjYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwpAQCAtMSwz
ICsxLDI2IEBACisyMDExLTAyLTI1ICBCZW5qYW1pbiBQb3VsYWluICA8aWtpcG91QGdtYWlsLmNv
bT4KKworICAgICAgICBSZXZpZXdlZCBieSBEYXJpbiBBZGxlci4KKworICAgICAgICBFbGltaW5h
dGUgRGVwcmVjYXRlZFB0ckxpc3QgZnJvbSBSZW5kZXJCbG9jaworICAgICAgICBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NTQ5NzIKKworICAgICAgICBBZGQgbWV0aG9k
cyBmaW5kKCkgYW5kIGNvbnRhaW5zKCkgdXNpbmcgYW4gYWRhcHRvciB0byBMaXN0SGFzaFNldC4K
KyAgICAgICAgVGhvc2UgbWV0aG9kIGFyZSBsaWtlIHRoZSBvbmUgb2YgSGFzaFNldCwgdGhleSBh
bGxvdyB0byBmaW5kIG9iamVjdHMKKyAgICAgICAgYmFzZWQgb24gYSBkaWZmZXJlbnQga2V5IHRo
YW4gdGhlIG9uZSB1c2VkIHRvIGRlZmluZSB0aGUgc2V0LgorCisgICAgICAgIEFkZCBjb252ZW5p
ZW5jZSBtZXRob2RzIGZvciBkaXJlY3QgYWNjZXNzIHRvIHRoZSBoZWFkIGFuZCB0YWlsIG9mIHRo
ZSBsaXN0LgorICAgICAgICBUaG9zZSBtZXRob2RzIGFyZSBwcm92aWRpbmcgc2ltaWxhciBBUEkv
YmVoYXZpb3IgYXMgVmVjdG9yLgorCisgICAgICAgICogd3RmL0xpc3RIYXNoU2V0Lmg6CisgICAg
ICAgIChXVEY6Ojo6Zmlyc3QpOgorICAgICAgICAoV1RGOjo6Omxhc3QpOgorICAgICAgICAoV1RG
Ojo6OnJlbW92ZUxhc3QpOgorICAgICAgICAoV1RGOjpMaXN0SGFzaFNldFRyYW5zbGF0b3JBZGFw
dGVyOjpoYXNoKToKKyAgICAgICAgKFdURjo6TGlzdEhhc2hTZXRUcmFuc2xhdG9yQWRhcHRlcjo6
ZXF1YWwpOgorICAgICAgICAoV1RGOjo6OmZpbmQpOgorICAgICAgICAoV1RGOjo6OmNvbnRhaW5z
KToKKwogMjAxMS0wMi0yNCAgQWRhbSBCYXJ0aCAgPGFiYXJ0aEB3ZWJraXQub3JnPgogCiAgICAg
ICAgIFJldmlld2VkIGJ5IEVyaWMgU2VpZGVsLgpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL3d0Zi9MaXN0SGFzaFNldC5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3d0Zi9MaXN0
SGFzaFNldC5oCmluZGV4IGU5MTZlZjJlMzQ3YWNhY2Y3Y2ZmMWM0OWJiMzAxNTc5OTYwN2Q3ZTMu
LmIwZDBlNDNkNTVlYmQ4MjY1ZWE5OWU0NjRmMjI5ZmUyOTkxOTM5OTQgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS93dGYvTGlzdEhhc2hTZXQuaAorKysgYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvd3RmL0xpc3RIYXNoU2V0LmgKQEAgLTEsNSArMSw2IEBACiAvKgogICogQ29weXJp
Z2h0IChDKSAyMDA1LCAyMDA2LCAyMDA3LCAyMDA4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMSwgQmVuamFtaW4gUG91bGFpbiA8aWtpcG91QGdt
YWlsLmNvbT4KICAqCiAgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiBy
ZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRo
ZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwpAQCAtOTAsMTAgKzkxLDI0IEBAIG5hbWVzcGFj
ZSBXVEYgewogICAgICAgICBjb25zdF9pdGVyYXRvciBiZWdpbigpIGNvbnN0OwogICAgICAgICBj
b25zdF9pdGVyYXRvciBlbmQoKSBjb25zdDsKIAorICAgICAgICBWYWx1ZVR5cGUmIGZpcnN0KCk7
CisgICAgICAgIGNvbnN0IFZhbHVlVHlwZSYgZmlyc3QoKSBjb25zdDsKKworICAgICAgICBWYWx1
ZVR5cGUmIGxhc3QoKTsKKyAgICAgICAgY29uc3QgVmFsdWVUeXBlJiBsYXN0KCkgY29uc3Q7Cisg
ICAgICAgIHZvaWQgcmVtb3ZlTGFzdCgpOworCiAgICAgICAgIGl0ZXJhdG9yIGZpbmQoY29uc3Qg
VmFsdWVUeXBlJik7CiAgICAgICAgIGNvbnN0X2l0ZXJhdG9yIGZpbmQoY29uc3QgVmFsdWVUeXBl
JikgY29uc3Q7CiAgICAgICAgIGJvb2wgY29udGFpbnMoY29uc3QgVmFsdWVUeXBlJikgY29uc3Q7
CiAKKyAgICAgICAgLy8gQW4gYWx0ZXJuYXRlIHZlcnNpb24gb2YgZmluZCgpIHRoYXQgZmluZHMg
dGhlIG9iamVjdCBieSBoYXNoaW5nIGFuZCBjb21wYXJpbmcKKyAgICAgICAgLy8gd2l0aCBzb21l
IG90aGVyIHR5cGUsIHRvIGF2b2lkIHRoZSBjb3N0IG9mIHR5cGUgY29udmVyc2lvbi4KKyAgICAg
ICAgLy8gVGhlIEhhc2hUcmFuc2xhdG9yIGludGVyZmFjZSBpcyBkZWZpbmVkIGluIEhhc2hTZXQu
CisgICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIEhhc2hUcmFuc2xhdG9yPiBp
dGVyYXRvciBmaW5kKGNvbnN0IFQmKTsKKyAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlw
ZW5hbWUgSGFzaFRyYW5zbGF0b3I+IGNvbnN0X2l0ZXJhdG9yIGZpbmQoY29uc3QgVCYpIGNvbnN0
OworICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBIYXNoVHJhbnNsYXRvcj4g
Ym9vbCBjb250YWlucyhjb25zdCBUJikgY29uc3Q7CisKICAgICAgICAgLy8gdGhlIHJldHVybiB2
YWx1ZSBpcyBhIHBhaXIgb2YgYW4gaXRlcmF0b3IgdG8gdGhlIG5ldyB2YWx1ZSdzIGxvY2F0aW9u
LCAKICAgICAgICAgLy8gYW5kIGEgYm9vbCB0aGF0IGlzIHRydWUgaWYgYW4gbmV3IGVudHJ5IHdh
cyBhZGRlZAogICAgICAgICBwYWlyPGl0ZXJhdG9yLCBib29sPiBhZGQoY29uc3QgVmFsdWVUeXBl
Jik7CkBAIC00NDIsNiArNDU3LDQyIEBAIG5hbWVzcGFjZSBXVEYgewogICAgIH0KIAogICAgIHRl
bXBsYXRlPHR5cGVuYW1lIFQsIHNpemVfdCBpbmxpbmVDYXBhY2l0eSwgdHlwZW5hbWUgVT4KKyAg
ICBpbmxpbmUgVCYgTGlzdEhhc2hTZXQ8VCwgaW5saW5lQ2FwYWNpdHksIFU+OjpmaXJzdCgpCisg
ICAgeworICAgICAgICBBU1NFUlQoIWlzRW1wdHkoKSk7CisgICAgICAgIHJldHVybiBtX2hlYWQt
Pm1fdmFsdWU7CisgICAgfQorCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVCwgc2l6ZV90IGlubGlu
ZUNhcGFjaXR5LCB0eXBlbmFtZSBVPgorICAgIGlubGluZSBjb25zdCBUJiBMaXN0SGFzaFNldDxU
LCBpbmxpbmVDYXBhY2l0eSwgVT46OmZpcnN0KCkgY29uc3QKKyAgICB7CisgICAgICAgIEFTU0VS
VCghaXNFbXB0eSgpKTsKKyAgICAgICAgcmV0dXJuIG1faGVhZC0+bV92YWx1ZTsKKyAgICB9CisK
KyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBULCBzaXplX3QgaW5saW5lQ2FwYWNpdHksIHR5cGVuYW1l
IFU+CisgICAgaW5saW5lIFQmIExpc3RIYXNoU2V0PFQsIGlubGluZUNhcGFjaXR5LCBVPjo6bGFz
dCgpCisgICAgeworICAgICAgICBBU1NFUlQoIWlzRW1wdHkoKSk7CisgICAgICAgIHJldHVybiBt
X3RhaWwtPm1fdmFsdWU7CisgICAgfQorCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVCwgc2l6ZV90
IGlubGluZUNhcGFjaXR5LCB0eXBlbmFtZSBVPgorICAgIGlubGluZSBjb25zdCBUJiBMaXN0SGFz
aFNldDxULCBpbmxpbmVDYXBhY2l0eSwgVT46Omxhc3QoKSBjb25zdAorICAgIHsKKyAgICAgICAg
QVNTRVJUKCFpc0VtcHR5KCkpOworICAgICAgICByZXR1cm4gbV90YWlsLT5tX3ZhbHVlOworICAg
IH0KKworICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQsIHNpemVfdCBpbmxpbmVDYXBhY2l0eSwgdHlw
ZW5hbWUgVT4KKyAgICBpbmxpbmUgdm9pZCBMaXN0SGFzaFNldDxULCBpbmxpbmVDYXBhY2l0eSwg
VT46OnJlbW92ZUxhc3QoKQorICAgIHsKKyAgICAgICAgQVNTRVJUKCFpc0VtcHR5KCkpOworICAg
ICAgICBtX2ltcGwucmVtb3ZlKG1fdGFpbCk7CisgICAgICAgIHVubGlua0FuZERlbGV0ZShtX3Rh
aWwpOworICAgIH0KKworICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQsIHNpemVfdCBpbmxpbmVDYXBh
Y2l0eSwgdHlwZW5hbWUgVT4KICAgICBpbmxpbmUgdHlwZW5hbWUgTGlzdEhhc2hTZXQ8VCwgaW5s
aW5lQ2FwYWNpdHksIFU+OjppdGVyYXRvciBMaXN0SGFzaFNldDxULCBpbmxpbmVDYXBhY2l0eSwg
VT46OmZpbmQoY29uc3QgVmFsdWVUeXBlJiB2YWx1ZSkKICAgICB7CiAgICAgICAgIHR5cGVkZWYg
TGlzdEhhc2hTZXRUcmFuc2xhdG9yPFZhbHVlVHlwZSwgaW5saW5lQ2FwYWNpdHksIEhhc2hGdW5j
dGlvbnM+IFRyYW5zbGF0b3I7CkBAIC00NjEsNiArNTEyLDQ1IEBAIG5hbWVzcGFjZSBXVEYgewog
ICAgICAgICByZXR1cm4gbWFrZUNvbnN0SXRlcmF0b3IoKml0KTsKICAgICB9CiAKKyAgICB0ZW1w
bGF0ZTx0eXBlbmFtZSBWYWx1ZVR5cGUsIHNpemVfdCBpbmxpbmVDYXBhY2l0eSwgdHlwZW5hbWUg
VCwgdHlwZW5hbWUgVHJhbnNsYXRvcj4KKyAgICBzdHJ1Y3QgTGlzdEhhc2hTZXRUcmFuc2xhdG9y
QWRhcHRlciB7CisgICAgcHJpdmF0ZToKKyAgICAgICAgdHlwZWRlZiBMaXN0SGFzaFNldE5vZGU8
VmFsdWVUeXBlLCBpbmxpbmVDYXBhY2l0eT4gTm9kZTsKKyAgICBwdWJsaWM6CisgICAgICAgIHN0
YXRpYyB1bnNpZ25lZCBoYXNoKGNvbnN0IFQmIGtleSkgeyByZXR1cm4gVHJhbnNsYXRvcjo6aGFz
aChrZXkpOyB9CisgICAgICAgIHN0YXRpYyBib29sIGVxdWFsKE5vZGUqIGNvbnN0JiBhLCBjb25z
dCBUJiBiKSB7IHJldHVybiBUcmFuc2xhdG9yOjplcXVhbChhLT5tX3ZhbHVlLCBiKTsgfQorICAg
IH07CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBWYWx1ZVR5cGUsIHNpemVfdCBpbmxpbmVDYXBh
Y2l0eSwgdHlwZW5hbWUgVT4KKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBIYXNo
VHJhbnNsYXRvcj4KKyAgICBpbmxpbmUgdHlwZW5hbWUgTGlzdEhhc2hTZXQ8VmFsdWVUeXBlLCBp
bmxpbmVDYXBhY2l0eSwgVT46Oml0ZXJhdG9yIExpc3RIYXNoU2V0PFZhbHVlVHlwZSwgaW5saW5l
Q2FwYWNpdHksIFU+OjpmaW5kKGNvbnN0IFQmIHZhbHVlKQorICAgIHsKKyAgICAgICAgdHlwZWRl
ZiBMaXN0SGFzaFNldFRyYW5zbGF0b3JBZGFwdGVyPFZhbHVlVHlwZSwgaW5saW5lQ2FwYWNpdHks
IFQsIEhhc2hUcmFuc2xhdG9yPiBBZGFwdGVyOworICAgICAgICBJbXBsVHlwZUNvbnN0SXRlcmF0
b3IgaXQgPSBtX2ltcGwudGVtcGxhdGUgZmluZDxULCBBZGFwdGVyPih2YWx1ZSk7CisgICAgICAg
IGlmIChpdCA9PSBtX2ltcGwuZW5kKCkpCisgICAgICAgICAgICByZXR1cm4gZW5kKCk7CisgICAg
ICAgIHJldHVybiBtYWtlSXRlcmF0b3IoKml0KTsKKyAgICB9CisKKyAgICB0ZW1wbGF0ZTx0eXBl
bmFtZSBWYWx1ZVR5cGUsIHNpemVfdCBpbmxpbmVDYXBhY2l0eSwgdHlwZW5hbWUgVT4KKyAgICB0
ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBIYXNoVHJhbnNsYXRvcj4KKyAgICBpbmxpbmUg
dHlwZW5hbWUgTGlzdEhhc2hTZXQ8VmFsdWVUeXBlLCBpbmxpbmVDYXBhY2l0eSwgVT46OmNvbnN0
X2l0ZXJhdG9yIExpc3RIYXNoU2V0PFZhbHVlVHlwZSwgaW5saW5lQ2FwYWNpdHksIFU+OjpmaW5k
KGNvbnN0IFQmIHZhbHVlKSBjb25zdAorICAgIHsKKyAgICAgICAgdHlwZWRlZiBMaXN0SGFzaFNl
dFRyYW5zbGF0b3JBZGFwdGVyPFZhbHVlVHlwZSwgaW5saW5lQ2FwYWNpdHksIFQsIEhhc2hUcmFu
c2xhdG9yPiBBZGFwdGVyOworICAgICAgICBJbXBsVHlwZUNvbnN0SXRlcmF0b3IgaXQgPSBtX2lt
cGwudGVtcGxhdGUgZmluZDxULCBBZGFwdGVyPih2YWx1ZSk7CisgICAgICAgIGlmIChpdCA9PSBt
X2ltcGwuZW5kKCkpCisgICAgICAgICAgICByZXR1cm4gZW5kKCk7CisgICAgICAgIHJldHVybiBt
YWtlQ29uc3RJdGVyYXRvcigqaXQpOworICAgIH0KKworICAgIHRlbXBsYXRlPHR5cGVuYW1lIFZh
bHVlVHlwZSwgc2l6ZV90IGlubGluZUNhcGFjaXR5LCB0eXBlbmFtZSBVPgorICAgIHRlbXBsYXRl
PHR5cGVuYW1lIFQsIHR5cGVuYW1lIEhhc2hUcmFuc2xhdG9yPgorICAgIGlubGluZSBib29sIExp
c3RIYXNoU2V0PFZhbHVlVHlwZSwgaW5saW5lQ2FwYWNpdHksIFU+Ojpjb250YWlucyhjb25zdCBU
JiB2YWx1ZSkgY29uc3QKKyAgICB7CisgICAgICAgIHR5cGVkZWYgTGlzdEhhc2hTZXRUcmFuc2xh
dG9yQWRhcHRlcjxWYWx1ZVR5cGUsIGlubGluZUNhcGFjaXR5LCBULCBIYXNoVHJhbnNsYXRvcj4g
QWRhcHRlcjsKKyAgICAgICAgcmV0dXJuIG1faW1wbC50ZW1wbGF0ZSBjb250YWluczxULCBBZGFw
dGVyPih2YWx1ZSk7CisgICAgfQorCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgVCwgc2l6ZV90IGlu
bGluZUNhcGFjaXR5LCB0eXBlbmFtZSBVPgogICAgIGlubGluZSBib29sIExpc3RIYXNoU2V0PFQs
IGlubGluZUNhcGFjaXR5LCBVPjo6Y29udGFpbnMoY29uc3QgVmFsdWVUeXBlJiB2YWx1ZSkgY29u
c3QKICAgICB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cgYi9Tb3VyY2Uv
V2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMzliMTkxNDg0ZWEyMTAxYTk2OWE0ZmZkZTQ1MmUxZWY5
NTU0ZGQxMi4uZTI2YzJiOTMyMzFjZjZiNzY3MmU2OWMyNzQ0ZGU4MDJjNzEwODNlZCAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwpAQCAtMSwzICsxLDQ0IEBACisyMDExLTAyLTI1ICBCZW5qYW1pbiBQb3VsYWluICA8aWtp
cG91QGdtYWlsLmNvbT4KKworICAgICAgICBSZXZpZXdlZCBieSBEYXJpbiBBZGxlci4KKworICAg
ICAgICBFbGltaW5hdGUgRGVwcmVjYXRlZFB0ckxpc3QgZnJvbSBSZW5kZXJCbG9jaworICAgICAg
ICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NTQ5NzIKKworICAgICAg
ICBSZWZhY3RvciBSZW5kZXJCbG9jayB0byBnZXQgcmlkIG9mIHRoZSBEZXByZWNhdGVkUHRyTGlz
dC4KKyAgICAgICAgVGhlIGZsb2F0aW5nIG9iamVjdHMgYXJlIHN0b3JlZCBpbiBhIExpc3RIYXNo
U2V0LgorCisgICAgICAgIFJlZmFjdG9yaW5nIGNvdmVyZWQgYnkgZXhpc3RpbmcgdGVzdC4KKwor
ICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJCbG9jay5jcHA6CisgICAgICAgIChXZWJDb3JlOjpS
ZW5kZXJCbG9jazo6YWRkT3ZlcmZsb3dGcm9tRmxvYXRzKToKKyAgICAgICAgKFdlYkNvcmU6OlJl
bmRlckJsb2NrOjpyZXBhaW50T3ZlcmhhbmdpbmdGbG9hdHMpOgorICAgICAgICAoV2ViQ29yZTo6
UmVuZGVyQmxvY2s6OnBhaW50RmxvYXRzKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJsb2Nr
OjpzZWxlY3Rpb25HYXBzKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJsb2NrOjppbnNlcnRG
bG9hdGluZ09iamVjdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCbG9jazo6cmVtb3ZlRmxv
YXRpbmdPYmplY3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQmxvY2s6OnJlbW92ZUZsb2F0
aW5nT2JqZWN0c0JlbG93KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJsb2NrOjpwb3NpdGlv
bk5ld0Zsb2F0cyk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCbG9jazo6cG9zaXRpb25OZXdG
bG9hdE9uTGluZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCbG9jazo6bG9naWNhbExlZnRP
ZmZzZXRGb3JMaW5lKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJsb2NrOjpsb2dpY2FsUmln
aHRPZmZzZXRGb3JMaW5lKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJsb2NrOjpuZXh0Rmxv
YXRMb2dpY2FsQm90dG9tQmVsb3cpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQmxvY2s6Omxv
d2VzdEZsb2F0TG9naWNhbEJvdHRvbSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCbG9jazo6
Y2xlYXJGbG9hdHMpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQmxvY2s6OmFkZE92ZXJoYW5n
aW5nRmxvYXRzKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJsb2NrOjphZGRJbnRydWRpbmdG
bG9hdHMpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQmxvY2s6OmNvbnRhaW5zRmxvYXQpOgor
ICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQmxvY2s6OmhpdFRlc3RGbG9hdHMpOgorICAgICAgICAo
V2ViQ29yZTo6UmVuZGVyQmxvY2s6OmFkanVzdEZvckJvcmRlckZpdCk6CisgICAgICAgICogcmVu
ZGVyaW5nL1JlbmRlckJsb2NrLmg6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCbG9jazo6Rmxv
YXRpbmdPYmplY3RIYXNoRnVuY3Rpb25zOjpoYXNoKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRl
ckJsb2NrOjpGbG9hdGluZ09iamVjdEhhc2hGdW5jdGlvbnM6OmVxdWFsKToKKyAgICAgICAgKFdl
YkNvcmU6OlJlbmRlckJsb2NrOjpGbG9hdGluZ09iamVjdEhhc2hUcmFuc2xhdG9yOjpoYXNoKToK
KyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJsb2NrOjpGbG9hdGluZ09iamVjdEhhc2hUcmFuc2xh
dG9yOjplcXVhbCk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckJsb2NrTGluZUxheW91dC5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCbG9jazo6bGF5b3V0SW5saW5lQ2hpbGRyZW4p
OgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQmxvY2s6Om1hdGNoZWRFbmRMaW5lKToKKwogMjAx
MS0wMi0yNSAgQWJoaXNoZWsgQXJ5YSAgPGluZmVybm9AY2hyb21pdW0ub3JnPgogCiAgICAgICAg
IFJldmlld2VkIGJ5IERhdmUgSHlhdHQuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvUmVuZGVyQmxvY2suY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJs
b2NrLmNwcAppbmRleCBkOGZlY2UzZmQ3NzBhMzA4YmI5ODI0ODlmNDJjNTdlYTU1NjQ5MTI2Li42
NGMzNmEwZDlhYmU2YmRmNmVlMTk3M2E5MzdjNTMxODI1NmI2YzVjIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2suY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9SZW5kZXJCbG9jay5jcHAKQEAgLTEzNzksOSArMTM3OSwxMCBAQCB2b2lkIFJl
bmRlckJsb2NrOjphZGRPdmVyZmxvd0Zyb21GbG9hdHMoKQogewogICAgIGlmICghbV9mbG9hdGlu
Z09iamVjdHMpCiAgICAgICAgIHJldHVybjsKLSAgICBGbG9hdGluZ09iamVjdCogcjsKLSAgICBE
ZXByZWNhdGVkUHRyTGlzdEl0ZXJhdG9yPEZsb2F0aW5nT2JqZWN0PiBpdCgqbV9mbG9hdGluZ09i
amVjdHMpOwotICAgIGZvciAoOyAociA9IGl0LmN1cnJlbnQoKSk7ICsraXQpIHsKKworICAgIEZs
b2F0aW5nT2JqZWN0U2V0SXRlcmF0b3IgZW5kID0gbV9mbG9hdGluZ09iamVjdHMtPmVuZCgpOwor
ICAgIGZvciAoRmxvYXRpbmdPYmplY3RTZXRJdGVyYXRvciBpdCA9IG1fZmxvYXRpbmdPYmplY3Rz
LT5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKKyAgICAgICAgRmxvYXRpbmdPYmplY3QqIHIg
PSAqaXQ7CiAgICAgICAgIGlmIChyLT5tX2lzRGVzY2VuZGFudCkKICAgICAgICAgICAgIGFkZE92
ZXJmbG93RnJvbUNoaWxkKHItPm1fcmVuZGVyZXIsIEludFNpemUoeFBvc2l0aW9uRm9yRmxvYXRJ
bmNsdWRpbmdNYXJnaW4ociksIHlQb3NpdGlvbkZvckZsb2F0SW5jbHVkaW5nTWFyZ2luKHIpKSk7
CiAgICAgfQpAQCAtMjE3MiwxNCArMjE3MywxMyBAQCB2b2lkIFJlbmRlckJsb2NrOjpyZXBhaW50
T3ZlcmhhbmdpbmdGbG9hdHMoYm9vbCBwYWludEFsbERlc2NlbmRhbnRzKQogICAgICAgICBBU1NF
UlQobV9mbG9hdGluZ09iamVjdHMpOwogICAgICAgICBpZiAoIW1fZmxvYXRpbmdPYmplY3RzKQog
ICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAKLSAgICAgICAgRmxvYXRpbmdPYmplY3QqIHI7
Ci0gICAgICAgIERlcHJlY2F0ZWRQdHJMaXN0SXRlcmF0b3I8RmxvYXRpbmdPYmplY3Q+IGl0KCpt
X2Zsb2F0aW5nT2JqZWN0cyk7CiAKICAgICAgICAgLy8gRklYTUU6IEF2b2lkIGRpc2FibGluZyBM
YXlvdXRTdGF0ZS4gQXQgdGhlIHZlcnkgbGVhc3QsIGRvbid0IGRpc2FibGUgaXQgZm9yIGZsb2F0
cyBvcmlnaW5hdGluZwogICAgICAgICAvLyBpbiB0aGlzIGJsb2NrLiBCZXR0ZXIgeWV0IHdvdWxk
IGJlIHRvIHB1c2ggZXh0cmEgc3RhdGUgZm9yIHRoZSBjb250YWluZXJzIG9mIG90aGVyIGZsb2F0
cy4KICAgICAgICAgdmlldygpLT5kaXNhYmxlTGF5b3V0U3RhdGUoKTsKLSAgICAgICAgZm9yICgg
OyAociA9IGl0LmN1cnJlbnQoKSk7ICsraXQpIHsKKyAgICAgICAgRmxvYXRpbmdPYmplY3RTZXRJ
dGVyYXRvciBlbmQgPSBtX2Zsb2F0aW5nT2JqZWN0cy0+ZW5kKCk7CisgICAgICAgIGZvciAoRmxv
YXRpbmdPYmplY3RTZXRJdGVyYXRvciBpdCA9IG1fZmxvYXRpbmdPYmplY3RzLT5iZWdpbigpOyBp
dCAhPSBlbmQ7ICsraXQpIHsKKyAgICAgICAgICAgIEZsb2F0aW5nT2JqZWN0KiByID0gKml0Owog
ICAgICAgICAgICAgLy8gT25seSByZXBhaW50IHRoZSBvYmplY3QgaWYgaXQgaXMgb3Zlcmhhbmdp
bmcsIGlzIG5vdCBpbiBpdHMgb3duIGxheWVyLCBhbmQKICAgICAgICAgICAgIC8vIGlzIG91ciBy
ZXNwb25zaWJpbGl0eSB0byBwYWludCAobV9zaG91bGRQYWludCBpcyBzZXQpLiBXaGVuIHBhaW50
QWxsRGVzY2VuZGFudHMgaXMgdHJ1ZSwgdGhlIGxhdHRlcgogICAgICAgICAgICAgLy8gY29uZGl0
aW9uIGlzIHJlcGxhY2VkIHdpdGggYmVpbmcgYSBkZXNjZW5kYW50IG9mIHVzLgpAQCAtMjUwMyw5
ICsyNTAzLDkgQEAgdm9pZCBSZW5kZXJCbG9jazo6cGFpbnRGbG9hdHMoUGFpbnRJbmZvJiBwYWlu
dEluZm8sIGludCB0eCwgaW50IHR5LCBib29sIHByZXNlcnYKICAgICBpZiAoIW1fZmxvYXRpbmdP
YmplY3RzKQogICAgICAgICByZXR1cm47CiAKLSAgICBGbG9hdGluZ09iamVjdCogcjsKLSAgICBE
ZXByZWNhdGVkUHRyTGlzdEl0ZXJhdG9yPEZsb2F0aW5nT2JqZWN0PiBpdCgqbV9mbG9hdGluZ09i
amVjdHMpOwotICAgIGZvciAoOyAociA9IGl0LmN1cnJlbnQoKSk7ICsraXQpIHsKKyAgICBGbG9h
dGluZ09iamVjdFNldEl0ZXJhdG9yIGVuZCA9IG1fZmxvYXRpbmdPYmplY3RzLT5lbmQoKTsKKyAg
ICBmb3IgKEZsb2F0aW5nT2JqZWN0U2V0SXRlcmF0b3IgaXQgPSBtX2Zsb2F0aW5nT2JqZWN0cy0+
YmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7CisgICAgICAgIEZsb2F0aW5nT2JqZWN0KiByID0g
Kml0OwogICAgICAgICAvLyBPbmx5IHBhaW50IHRoZSBvYmplY3QgaWYgb3VyIG1fc2hvdWxkUGFp
bnQgZmxhZyBpcyBzZXQuCiAgICAgICAgIGlmIChyLT5tX3Nob3VsZFBhaW50ICYmICFyLT5tX3Jl
bmRlcmVyLT5oYXNTZWxmUGFpbnRpbmdMYXllcigpKSB7CiAgICAgICAgICAgICBQYWludEluZm8g
Y3VycmVudFBhaW50SW5mbyhwYWludEluZm8pOwpAQCAtMjc0Miw4ICsyNzQyLDkgQEAgR2FwUmVj
dHMgUmVuZGVyQmxvY2s6OnNlbGVjdGlvbkdhcHMoUmVuZGVyQmxvY2sqIHJvb3RCbG9jaywgY29u
c3QgSW50UG9pbnQmIHJvb3QKICAgICAgICAgICAgIGZvciAoUmVuZGVyQmxvY2sqIGNiID0gY29u
dGFpbmluZ0Jsb2NrKCk7IGNiICYmICFjYi0+aXNSZW5kZXJWaWV3KCk7IGNiID0gY2ItPmNvbnRh
aW5pbmdCbG9jaygpKQogICAgICAgICAgICAgICAgIGNsaXBPdXRQb3NpdGlvbmVkT2JqZWN0cyhw
YWludEluZm8sIEludFBvaW50KGNiLT54KCksIGNiLT55KCkpLCBjYi0+bV9wb3NpdGlvbmVkT2Jq
ZWN0cyk7IC8vIEZJWE1FOiBOb3QgcmlnaHQgZm9yIGZsaXBwZWQgd3JpdGluZyBtb2Rlcy4KICAg
ICAgICAgaWYgKG1fZmxvYXRpbmdPYmplY3RzKSB7Ci0gICAgICAgICAgICBmb3IgKERlcHJlY2F0
ZWRQdHJMaXN0SXRlcmF0b3I8RmxvYXRpbmdPYmplY3Q+IGl0KCptX2Zsb2F0aW5nT2JqZWN0cyk7
IGl0LmN1cnJlbnQoKTsgKytpdCkgewotICAgICAgICAgICAgICAgIEZsb2F0aW5nT2JqZWN0KiBy
ID0gaXQuY3VycmVudCgpOworICAgICAgICAgICAgRmxvYXRpbmdPYmplY3RTZXRJdGVyYXRvciBl
bmQgPSBtX2Zsb2F0aW5nT2JqZWN0cy0+ZW5kKCk7CisgICAgICAgICAgICBmb3IgKEZsb2F0aW5n
T2JqZWN0U2V0SXRlcmF0b3IgaXQgPSBtX2Zsb2F0aW5nT2JqZWN0cy0+YmVnaW4oKTsgaXQgIT0g
ZW5kOyArK2l0KSB7CisgICAgICAgICAgICAgICAgRmxvYXRpbmdPYmplY3QqIHIgPSAqaXQ7CiAg
ICAgICAgICAgICAgICAgSW50UmVjdCBmbG9hdEJveCA9IEludFJlY3Qob2Zmc2V0RnJvbVJvb3RC
bG9jay53aWR0aCgpICsgeFBvc2l0aW9uRm9yRmxvYXRJbmNsdWRpbmdNYXJnaW4ociksCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb2Zmc2V0RnJvbVJvb3RCbG9j
ay5oZWlnaHQoKSArIHlQb3NpdGlvbkZvckZsb2F0SW5jbHVkaW5nTWFyZ2luKHIpLAogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHItPm1fcmVuZGVyZXItPndpZHRo
KCksIHItPm1fcmVuZGVyZXItPmhlaWdodCgpKTsKQEAgLTMwNTAsMTggKzMwNTEsMTMgQEAgUmVu
ZGVyQmxvY2s6OkZsb2F0aW5nT2JqZWN0KiBSZW5kZXJCbG9jazo6aW5zZXJ0RmxvYXRpbmdPYmpl
Y3QoUmVuZGVyQm94KiBvKQogICAgIEFTU0VSVChvLT5pc0Zsb2F0aW5nKCkpOwogCiAgICAgLy8g
Q3JlYXRlIHRoZSBsaXN0IG9mIHNwZWNpYWwgb2JqZWN0cyBpZiB3ZSBkb24ndCBhbGVhZHkgaGF2
ZSBvbmUKLSAgICBpZiAoIW1fZmxvYXRpbmdPYmplY3RzKSB7Ci0gICAgICAgIG1fZmxvYXRpbmdP
YmplY3RzID0gbmV3IERlcHJlY2F0ZWRQdHJMaXN0PEZsb2F0aW5nT2JqZWN0PjsKLSAgICAgICAg
bV9mbG9hdGluZ09iamVjdHMtPnNldEF1dG9EZWxldGUodHJ1ZSk7Ci0gICAgfSBlbHNlIHsKKyAg
ICBpZiAoIW1fZmxvYXRpbmdPYmplY3RzKQorICAgICAgICBtX2Zsb2F0aW5nT2JqZWN0cyA9IG5l
dyBGbG9hdGluZ09iamVjdFNldDsKKyAgICBlbHNlIHsKICAgICAgICAgLy8gRG9uJ3QgaW5zZXJ0
IHRoZSBvYmplY3QgYWdhaW4gaWYgaXQncyBhbHJlYWR5IGluIHRoZSBsaXN0Ci0gICAgICAgIERl
cHJlY2F0ZWRQdHJMaXN0SXRlcmF0b3I8RmxvYXRpbmdPYmplY3Q+IGl0KCptX2Zsb2F0aW5nT2Jq
ZWN0cyk7Ci0gICAgICAgIEZsb2F0aW5nT2JqZWN0KiBmOwotICAgICAgICB3aGlsZSAoIChmID0g
aXQuY3VycmVudCgpKSApIHsKLSAgICAgICAgICAgIGlmIChmLT5tX3JlbmRlcmVyID09IG8pCi0g
ICAgICAgICAgICAgICAgcmV0dXJuIGY7Ci0gICAgICAgICAgICArK2l0OwotICAgICAgICB9Cisg
ICAgICAgIEZsb2F0aW5nT2JqZWN0U2V0SXRlcmF0b3IgaXQgPSBtX2Zsb2F0aW5nT2JqZWN0cy0+
ZmluZDxSZW5kZXJCb3gqLCBGbG9hdGluZ09iamVjdEhhc2hUcmFuc2xhdG9yPihvKTsKKyAgICAg
ICAgaWYgKGl0ICE9IG1fZmxvYXRpbmdPYmplY3RzLT5lbmQoKSkKKyAgICAgICAgICAgIHJldHVy
biAqaXQ7CiAgICAgfQogCiAgICAgLy8gQ3JlYXRlIHRoZSBzcGVjaWFsIG9iamVjdCBlbnRyeSAm
IGFwcGVuZCBpdCB0byB0aGUgbGlzdApAQCAtMzA4Nyw3ICszMDgzLDcgQEAgUmVuZGVyQmxvY2s6
OkZsb2F0aW5nT2JqZWN0KiBSZW5kZXJCbG9jazo6aW5zZXJ0RmxvYXRpbmdPYmplY3QoUmVuZGVy
Qm94KiBvKQogICAgIG5ld09iai0+bV9pc0Rlc2NlbmRhbnQgPSB0cnVlOwogICAgIG5ld09iai0+
bV9yZW5kZXJlciA9IG87CiAKLSAgICBtX2Zsb2F0aW5nT2JqZWN0cy0+YXBwZW5kKG5ld09iaik7
CisgICAgbV9mbG9hdGluZ09iamVjdHMtPmFkZChuZXdPYmopOwogICAgIAogICAgIHJldHVybiBu
ZXdPYmo7CiB9CkBAIC0zMDk1LDI3ICszMDkxLDI2IEBAIFJlbmRlckJsb2NrOjpGbG9hdGluZ09i
amVjdCogUmVuZGVyQmxvY2s6Omluc2VydEZsb2F0aW5nT2JqZWN0KFJlbmRlckJveCogbykKIHZv
aWQgUmVuZGVyQmxvY2s6OnJlbW92ZUZsb2F0aW5nT2JqZWN0KFJlbmRlckJveCogbykKIHsKICAg
ICBpZiAobV9mbG9hdGluZ09iamVjdHMpIHsKLSAgICAgICAgRGVwcmVjYXRlZFB0ckxpc3RJdGVy
YXRvcjxGbG9hdGluZ09iamVjdD4gaXQoKm1fZmxvYXRpbmdPYmplY3RzKTsKLSAgICAgICAgd2hp
bGUgKGl0LmN1cnJlbnQoKSkgewotICAgICAgICAgICAgaWYgKGl0LmN1cnJlbnQoKS0+bV9yZW5k
ZXJlciA9PSBvKSB7Ci0gICAgICAgICAgICAgICAgaWYgKGNoaWxkcmVuSW5saW5lKCkpIHsKLSAg
ICAgICAgICAgICAgICAgICAgaW50IGxvZ2ljYWxUb3AgPSBsb2dpY2FsVG9wRm9yRmxvYXQoaXQu
Y3VycmVudCgpKTsKLSAgICAgICAgICAgICAgICAgICAgaW50IGxvZ2ljYWxCb3R0b20gPSBsb2dp
Y2FsQm90dG9tRm9yRmxvYXQoaXQuY3VycmVudCgpKTsKLSAgICAgICAgICAgICAgICAgICAgCi0g
ICAgICAgICAgICAgICAgICAgIC8vIEZpeCBmb3IgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTU0OTk1LgotICAgICAgICAgICAgICAgICAgICBpZiAobG9naWNhbEJvdHRv
bSA8IDAgfHwgbG9naWNhbEJvdHRvbSA8IGxvZ2ljYWxUb3AgfHwgbG9naWNhbFRvcCA9PSBudW1l
cmljX2xpbWl0czxpbnQ+OjptYXgoKSkKLSAgICAgICAgICAgICAgICAgICAgICAgIGxvZ2ljYWxC
b3R0b20gPSBudW1lcmljX2xpbWl0czxpbnQ+OjptYXgoKTsKLSAgICAgICAgICAgICAgICAgICAg
ZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAvLyBTcGVjaWFsLWNhc2UgemVyby0gYW5k
IGxlc3MtdGhhbi16ZXJvLWhlaWdodCBmbG9hdHM6IHRob3NlIGRvbid0IHRvdWNoCi0gICAgICAg
ICAgICAgICAgICAgICAgICAvLyB0aGUgbGluZSB0aGF0IHRoZXkncmUgb24sIGJ1dCBpdCBzdGls
bCBuZWVkcyB0byBiZSBkaXJ0aWVkLiBUaGlzIGlzCi0gICAgICAgICAgICAgICAgICAgICAgICAv
LyBhY2NvbXBsaXNoZWQgYnkgcHJldGVuZGluZyB0aGV5IGhhdmUgYSBoZWlnaHQgb2YgMS4KLSAg
ICAgICAgICAgICAgICAgICAgICAgIGxvZ2ljYWxCb3R0b20gPSBtYXgobG9naWNhbEJvdHRvbSwg
bG9naWNhbFRvcCArIDEpOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAg
ICAgIG1hcmtMaW5lc0RpcnR5SW5CbG9ja1JhbmdlKDAsIGxvZ2ljYWxCb3R0b20pOworICAgICAg
ICBGbG9hdGluZ09iamVjdFNldDo6aXRlcmF0b3IgaXQgPSBtX2Zsb2F0aW5nT2JqZWN0cy0+Zmlu
ZDxSZW5kZXJCb3gqLCBGbG9hdGluZ09iamVjdEhhc2hUcmFuc2xhdG9yPihvKTsKKyAgICAgICAg
aWYgKGl0ICE9IG1fZmxvYXRpbmdPYmplY3RzLT5lbmQoKSkgeworICAgICAgICAgICAgRmxvYXRp
bmdPYmplY3QqIHIgPSAqaXQ7CisgICAgICAgICAgICBpZiAoY2hpbGRyZW5JbmxpbmUoKSkgewor
ICAgICAgICAgICAgICAgIGludCBsb2dpY2FsVG9wID0gbG9naWNhbFRvcEZvckZsb2F0KHIpOwor
ICAgICAgICAgICAgICAgIGludCBsb2dpY2FsQm90dG9tID0gbG9naWNhbEJvdHRvbUZvckZsb2F0
KHIpOworCisgICAgICAgICAgICAgICAgLy8gRml4IGZvciBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9NTQ5OTUuCisgICAgICAgICAgICAgICAgaWYgKGxvZ2ljYWxCb3R0
b20gPCAwIHx8IGxvZ2ljYWxCb3R0b20gPCBsb2dpY2FsVG9wIHx8IGxvZ2ljYWxUb3AgPT0gbnVt
ZXJpY19saW1pdHM8aW50Pjo6bWF4KCkpCisgICAgICAgICAgICAgICAgICAgIGxvZ2ljYWxCb3R0
b20gPSBudW1lcmljX2xpbWl0czxpbnQ+OjptYXgoKTsKKyAgICAgICAgICAgICAgICBlbHNlIHsK
KyAgICAgICAgICAgICAgICAgICAgLy8gU3BlY2lhbC1jYXNlIHplcm8tIGFuZCBsZXNzLXRoYW4t
emVyby1oZWlnaHQgZmxvYXRzOiB0aG9zZSBkb24ndCB0b3VjaAorICAgICAgICAgICAgICAgICAg
ICAvLyB0aGUgbGluZSB0aGF0IHRoZXkncmUgb24sIGJ1dCBpdCBzdGlsbCBuZWVkcyB0byBiZSBk
aXJ0aWVkLiBUaGlzIGlzCisgICAgICAgICAgICAgICAgICAgIC8vIGFjY29tcGxpc2hlZCBieSBw
cmV0ZW5kaW5nIHRoZXkgaGF2ZSBhIGhlaWdodCBvZiAxLgorICAgICAgICAgICAgICAgICAgICBs
b2dpY2FsQm90dG9tID0gbWF4KGxvZ2ljYWxCb3R0b20sIGxvZ2ljYWxUb3AgKyAxKTsKICAgICAg
ICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgbV9mbG9hdGluZ09iamVjdHMtPnJlbW92ZVJl
ZihpdC5jdXJyZW50KCkpOworICAgICAgICAgICAgICAgIG1hcmtMaW5lc0RpcnR5SW5CbG9ja1Jh
bmdlKDAsIGxvZ2ljYWxCb3R0b20pOwogICAgICAgICAgICAgfQotICAgICAgICAgICAgKytpdDsK
KyAgICAgICAgICAgIG1fZmxvYXRpbmdPYmplY3RzLT5yZW1vdmUoaXQpOworICAgICAgICAgICAg
ZGVsZXRlIHI7CiAgICAgICAgIH0KICAgICB9CiB9CkBAIC0zMTI4LDYgKzMxMjMsNyBAQCB2b2lk
IFJlbmRlckJsb2NrOjpyZW1vdmVGbG9hdGluZ09iamVjdHNCZWxvdyhGbG9hdGluZ09iamVjdCog
bGFzdEZsb2F0LCBpbnQgbG9naQogICAgIEZsb2F0aW5nT2JqZWN0KiBjdXJyID0gbV9mbG9hdGlu
Z09iamVjdHMtPmxhc3QoKTsKICAgICB3aGlsZSAoY3VyciAhPSBsYXN0RmxvYXQgJiYgKCFjdXJy
LT5pc1BsYWNlZCgpIHx8IGxvZ2ljYWxUb3BGb3JGbG9hdChjdXJyKSA+PSBsb2dpY2FsT2Zmc2V0
KSkgewogICAgICAgICBtX2Zsb2F0aW5nT2JqZWN0cy0+cmVtb3ZlTGFzdCgpOworICAgICAgICBk
ZWxldGUgY3VycjsKICAgICAgICAgY3VyciA9IG1fZmxvYXRpbmdPYmplY3RzLT5sYXN0KCk7CiAg
ICAgfQogfQpAQCAtMzEzNiwzNiArMzEzMiw0NCBAQCBib29sIFJlbmRlckJsb2NrOjpwb3NpdGlv
bk5ld0Zsb2F0cygpCiB7CiAgICAgaWYgKCFtX2Zsb2F0aW5nT2JqZWN0cykKICAgICAgICAgcmV0
dXJuIGZhbHNlOwotICAgIAotICAgIEZsb2F0aW5nT2JqZWN0KiBmbG9hdGluZ09iamVjdCA9IG1f
ZmxvYXRpbmdPYmplY3RzLT5sYXN0KCk7CisKKyAgICBpZiAobV9mbG9hdGluZ09iamVjdHMtPmlz
RW1wdHkoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgLy8gSWYgYWxsIGZsb2F0cyBo
YXZlIGFscmVhZHkgYmVlbiBwb3NpdGlvbmVkLCB0aGVuIHdlIGhhdmUgbm8gd29yayB0byBkby4K
LSAgICBpZiAoIWZsb2F0aW5nT2JqZWN0IHx8IGZsb2F0aW5nT2JqZWN0LT5pc1BsYWNlZCgpKQor
ICAgIGlmIChtX2Zsb2F0aW5nT2JqZWN0cy0+bGFzdCgpLT5pc1BsYWNlZCgpKQogICAgICAgICBy
ZXR1cm4gZmFsc2U7CiAKICAgICAvLyBNb3ZlIGJhY2t3YXJkcyB0aHJvdWdoIG91ciBmbG9hdGlu
ZyBvYmplY3QgbGlzdCB1bnRpbCB3ZSBmaW5kIGEgZmxvYXQgdGhhdCBoYXMKICAgICAvLyBhbHJl
YWR5IGJlZW4gcG9zaXRpb25lZC4gIFRoZW4gd2UnbGwgYmUgYWJsZSB0byBtb3ZlIGZvcndhcmQs
IHBvc2l0aW9uaW5nIGFsbCBvZgogICAgIC8vIHRoZSBuZXcgZmxvYXRzIHRoYXQgbmVlZCBpdC4K
LSAgICBGbG9hdGluZ09iamVjdCogbGFzdEZsb2F0ID0gbV9mbG9hdGluZ09iamVjdHMtPmdldFBy
ZXYoKTsKLSAgICB3aGlsZSAobGFzdEZsb2F0ICYmICFsYXN0RmxvYXQtPmlzUGxhY2VkKCkpIHsK
LSAgICAgICAgZmxvYXRpbmdPYmplY3QgPSBtX2Zsb2F0aW5nT2JqZWN0cy0+cHJldigpOwotICAg
ICAgICBsYXN0RmxvYXQgPSBtX2Zsb2F0aW5nT2JqZWN0cy0+Z2V0UHJldigpOworICAgIEZsb2F0
aW5nT2JqZWN0U2V0SXRlcmF0b3IgaXQgPSBtX2Zsb2F0aW5nT2JqZWN0cy0+ZW5kKCk7CisgICAg
LS1pdDsgLy8gR28gdG8gbGFzdCBpdGVtLgorICAgIEZsb2F0aW5nT2JqZWN0U2V0SXRlcmF0b3Ig
YmVnaW4gPSBtX2Zsb2F0aW5nT2JqZWN0cy0+YmVnaW4oKTsKKyAgICBGbG9hdGluZ09iamVjdCog
bGFzdFBsYWNlZEZsb2F0aW5nT2JqZWN0ID0gMDsKKyAgICB3aGlsZSAoaXQgIT0gYmVnaW4pIHsK
KyAgICAgICAgLS1pdDsKKyAgICAgICAgaWYgKCgqaXQpLT5pc1BsYWNlZCgpKSB7CisgICAgICAg
ICAgICBsYXN0UGxhY2VkRmxvYXRpbmdPYmplY3QgPSAqaXQ7CisgICAgICAgICAgICArK2l0Owor
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KICAgICB9CiAKICAgICBpbnQgbG9naWNhbFRv
cCA9IGxvZ2ljYWxIZWlnaHQoKTsKICAgICAKICAgICAvLyBUaGUgZmxvYXQgY2Fubm90IHN0YXJ0
IGFib3ZlIHRoZSB0b3AgcG9zaXRpb24gb2YgdGhlIGxhc3QgcG9zaXRpb25lZCBmbG9hdC4KLSAg
ICBpZiAobGFzdEZsb2F0KQotICAgICAgICBsb2dpY2FsVG9wID0gbWF4KGxvZ2ljYWxUb3BGb3JG
bG9hdChsYXN0RmxvYXQpLCBsb2dpY2FsVG9wKTsKKyAgICBpZiAobGFzdFBsYWNlZEZsb2F0aW5n
T2JqZWN0KQorICAgICAgICBsb2dpY2FsVG9wID0gbWF4KGxvZ2ljYWxUb3BGb3JGbG9hdChsYXN0
UGxhY2VkRmxvYXRpbmdPYmplY3QpLCBsb2dpY2FsVG9wKTsKIAorICAgIEZsb2F0aW5nT2JqZWN0
U2V0SXRlcmF0b3IgZW5kID0gbV9mbG9hdGluZ09iamVjdHMtPmVuZCgpOwogICAgIC8vIE5vdyB3
YWxrIHRocm91Z2ggdGhlIHNldCBvZiB1bnBvc2l0aW9uZWQgZmxvYXRzIGFuZCBwbGFjZSB0aGVt
LgotICAgIHdoaWxlIChmbG9hdGluZ09iamVjdCkgeworICAgIGZvciAoOyBpdCAhPSBlbmQ7ICsr
aXQpIHsKKyAgICAgICAgIEZsb2F0aW5nT2JqZWN0KiBmbG9hdGluZ09iamVjdCA9ICppdDsKICAg
ICAgICAgLy8gVGhlIGNvbnRhaW5pbmcgYmxvY2sgaXMgcmVzcG9uc2libGUgZm9yIHBvc2l0aW9u
aW5nIGZsb2F0cywgc28gaWYgd2UgaGF2ZSBmbG9hdHMgaW4gb3VyCiAgICAgICAgIC8vIGxpc3Qg
dGhhdCBjb21lIGZyb20gc29tZXdoZXJlIGVsc2UsIGRvIG5vdCBhdHRlbXB0IHRvIHBvc2l0aW9u
IHRoZW0uCi0gICAgICAgIGlmIChmbG9hdGluZ09iamVjdC0+cmVuZGVyZXIoKS0+Y29udGFpbmlu
Z0Jsb2NrKCkgIT0gdGhpcykgewotICAgICAgICAgICAgZmxvYXRpbmdPYmplY3QgPSBtX2Zsb2F0
aW5nT2JqZWN0cy0+bmV4dCgpOworICAgICAgICBpZiAoZmxvYXRpbmdPYmplY3QtPnJlbmRlcmVy
KCktPmNvbnRhaW5pbmdCbG9jaygpICE9IHRoaXMpCiAgICAgICAgICAgICBjb250aW51ZTsKLSAg
ICAgICAgfQogCiAgICAgICAgIFJlbmRlckJveCogY2hpbGRCb3ggPSBmbG9hdGluZ09iamVjdC0+
cmVuZGVyZXIoKTsKICAgICAgICAgaW50IGNoaWxkTG9naWNhbExlZnRNYXJnaW4gPSBzdHlsZSgp
LT5pc0xlZnRUb1JpZ2h0RGlyZWN0aW9uKCkgPyBtYXJnaW5TdGFydEZvckNoaWxkKGNoaWxkQm94
KSA6IG1hcmdpbkVuZEZvckNoaWxkKGNoaWxkQm94KTsKQEAgLTMyNDcsOCArMzI1MSw2IEBAIGJv
b2wgUmVuZGVyQmxvY2s6OnBvc2l0aW9uTmV3RmxvYXRzKCkKICAgICAgICAgLy8gSWYgdGhlIGNo
aWxkIG1vdmVkLCB3ZSBoYXZlIHRvIHJlcGFpbnQgaXQuCiAgICAgICAgIGlmIChjaGlsZEJveC0+
Y2hlY2tGb3JSZXBhaW50RHVyaW5nTGF5b3V0KCkpCiAgICAgICAgICAgICBjaGlsZEJveC0+cmVw
YWludER1cmluZ0xheW91dElmTW92ZWQob2xkUmVjdCk7Ci0KLSAgICAgICAgZmxvYXRpbmdPYmpl
Y3QgPSBtX2Zsb2F0aW5nT2JqZWN0cy0+bmV4dCgpOwogICAgIH0KICAgICByZXR1cm4gdHJ1ZTsK
IH0KQEAgLTMyNTksMTYgKzMyNjEsMjIgQEAgYm9vbCBSZW5kZXJCbG9jazo6cG9zaXRpb25OZXdG
bG9hdE9uTGluZShGbG9hdGluZ09iamVjdCogbmV3RmxvYXQsIEZsb2F0aW5nT2JqZWMKICAgICBp
ZiAoIWRpZFBvc2l0aW9uIHx8ICFuZXdGbG9hdC0+bV9wYWdpbmF0aW9uU3RydXQpCiAgICAgICAg
IHJldHVybiBkaWRQb3NpdGlvbjsKICAgICAKKyAgICBBU1NFUlQobV9mbG9hdGluZ09iamVjdHMt
Pmxhc3QoKSA9PSBuZXdGbG9hdCk7CisKICAgICBpbnQgZmxvYXRMb2dpY2FsVG9wID0gbG9naWNh
bFRvcEZvckZsb2F0KG5ld0Zsb2F0KTsKICAgICBpbnQgcGFnaW5hdGlvblN0cnV0ID0gbmV3Rmxv
YXQtPm1fcGFnaW5hdGlvblN0cnV0OwotICAgIEZsb2F0aW5nT2JqZWN0KiBmID0gbV9mbG9hdGlu
Z09iamVjdHMtPmxhc3QoKTsKICAgICAKLSAgICBBU1NFUlQoZiA9PSBuZXdGbG9hdCk7Ci0KICAg
ICBpZiAoZmxvYXRMb2dpY2FsVG9wIC0gcGFnaW5hdGlvblN0cnV0ICE9IGxvZ2ljYWxIZWlnaHQo
KSkKICAgICAgICAgcmV0dXJuIGRpZFBvc2l0aW9uOwogCi0gICAgZm9yIChmID0gbV9mbG9hdGlu
Z09iamVjdHMtPnByZXYoKTsgZiAmJiBmICE9IGxhc3RGbG9hdEZyb21QcmV2aW91c0xpbmU7IGYg
PSBtX2Zsb2F0aW5nT2JqZWN0cy0+cHJldigpKSB7CisgICAgRmxvYXRpbmdPYmplY3RTZXRJdGVy
YXRvciBpdCA9IG1fZmxvYXRpbmdPYmplY3RzLT5lbmQoKTsKKyAgICAtLWl0OyAvLyBMYXN0IGZs
b2F0IGlzIG5ld0Zsb2F0LCBza2lwIHRoYXQgb25lLgorICAgIEZsb2F0aW5nT2JqZWN0U2V0SXRl
cmF0b3IgYmVnaW4gPSBtX2Zsb2F0aW5nT2JqZWN0cy0+YmVnaW4oKTsKKyAgICB3aGlsZSAoaXQg
IT0gYmVnaW4pIHsKKyAgICAgICAgLS1pdDsKKyAgICAgICAgRmxvYXRpbmdPYmplY3QqIGYgPSAq
aXQ7CisgICAgICAgIGlmIChmID09IGxhc3RGbG9hdEZyb21QcmV2aW91c0xpbmUpCisgICAgICAg
ICAgICBicmVhazsKICAgICAgICAgaWYgKGxvZ2ljYWxUb3BGb3JGbG9hdChmKSA9PSBsb2dpY2Fs
SGVpZ2h0KCkpIHsKICAgICAgICAgICAgIEFTU0VSVCghZi0+bV9wYWdpbmF0aW9uU3RydXQpOwog
ICAgICAgICAgICAgZi0+bV9wYWdpbmF0aW9uU3RydXQgPSBwYWdpbmF0aW9uU3RydXQ7CkBAIC0z
Mzc0LDkgKzMzODIsMTAgQEAgaW50IFJlbmRlckJsb2NrOjpsb2dpY2FsTGVmdE9mZnNldEZvckxp
bmUoaW50IGxvZ2ljYWxUb3AsIGludCBmaXhlZE9mZnNldCwgYm9vbAogICAgIGlmIChtX2Zsb2F0
aW5nT2JqZWN0cykgewogICAgICAgICBpZiAoaGVpZ2h0UmVtYWluaW5nKQogICAgICAgICAgICAg
KmhlaWdodFJlbWFpbmluZyA9IDE7Ci0gICAgICAgIEZsb2F0aW5nT2JqZWN0KiByOwotICAgICAg
ICBEZXByZWNhdGVkUHRyTGlzdEl0ZXJhdG9yPEZsb2F0aW5nT2JqZWN0PiBpdCgqbV9mbG9hdGlu
Z09iamVjdHMpOwotICAgICAgICBmb3IgKCA7IChyID0gaXQuY3VycmVudCgpKTsgKytpdCkgewor
CisgICAgICAgIEZsb2F0aW5nT2JqZWN0U2V0SXRlcmF0b3IgZW5kID0gbV9mbG9hdGluZ09iamVj
dHMtPmVuZCgpOworICAgICAgICBmb3IgKEZsb2F0aW5nT2JqZWN0U2V0SXRlcmF0b3IgaXQgPSBt
X2Zsb2F0aW5nT2JqZWN0cy0+YmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7CisgICAgICAgICAg
ICBGbG9hdGluZ09iamVjdCogciA9ICppdDsKICAgICAgICAgICAgIGlmIChyLT5pc1BsYWNlZCgp
ICYmIGxvZ2ljYWxUb3BGb3JGbG9hdChyKSA8PSBsb2dpY2FsVG9wICYmIGxvZ2ljYWxCb3R0b21G
b3JGbG9hdChyKSA+IGxvZ2ljYWxUb3AKICAgICAgICAgICAgICAgICAmJiByLT50eXBlKCkgPT0g
RmxvYXRpbmdPYmplY3Q6OkZsb2F0TGVmdAogICAgICAgICAgICAgICAgICYmIGxvZ2ljYWxSaWdo
dEZvckZsb2F0KHIpID4gbGVmdCkgewpAQCAtMzQwNCw5ICszNDEzLDkgQEAgaW50IFJlbmRlckJs
b2NrOjpsb2dpY2FsUmlnaHRPZmZzZXRGb3JMaW5lKGludCBsb2dpY2FsVG9wLCBpbnQgZml4ZWRP
ZmZzZXQsIGJvb2wKICAgICBpZiAobV9mbG9hdGluZ09iamVjdHMpIHsKICAgICAgICAgaWYgKGhl
aWdodFJlbWFpbmluZykKICAgICAgICAgICAgICpoZWlnaHRSZW1haW5pbmcgPSAxOwotICAgICAg
ICBGbG9hdGluZ09iamVjdCogcjsKLSAgICAgICAgRGVwcmVjYXRlZFB0ckxpc3RJdGVyYXRvcjxG
bG9hdGluZ09iamVjdD4gaXQoKm1fZmxvYXRpbmdPYmplY3RzKTsKLSAgICAgICAgZm9yICggOyAo
ciA9IGl0LmN1cnJlbnQoKSk7ICsraXQpIHsKKyAgICAgICAgRmxvYXRpbmdPYmplY3RTZXRJdGVy
YXRvciBlbmQgPSBtX2Zsb2F0aW5nT2JqZWN0cy0+ZW5kKCk7CisgICAgICAgIGZvciAoRmxvYXRp
bmdPYmplY3RTZXRJdGVyYXRvciBpdCA9IG1fZmxvYXRpbmdPYmplY3RzLT5iZWdpbigpOyBpdCAh
PSBlbmQ7ICsraXQpIHsKKyAgICAgICAgICAgIEZsb2F0aW5nT2JqZWN0KiByID0gKml0OwogICAg
ICAgICAgICAgaWYgKHItPmlzUGxhY2VkKCkgJiYgbG9naWNhbFRvcEZvckZsb2F0KHIpIDw9IGxv
Z2ljYWxUb3AgJiYgbG9naWNhbEJvdHRvbUZvckZsb2F0KHIpID4gbG9naWNhbFRvcAogICAgICAg
ICAgICAgICAgICYmIHItPnR5cGUoKSA9PSBGbG9hdGluZ09iamVjdDo6RmxvYXRSaWdodAogICAg
ICAgICAgICAgICAgICYmIGxvZ2ljYWxMZWZ0Rm9yRmxvYXQocikgPCByaWdodCkgewpAQCAtMzQz
OSw5ICszNDQ4LDkgQEAgaW50IFJlbmRlckJsb2NrOjpuZXh0RmxvYXRMb2dpY2FsQm90dG9tQmVs
b3coaW50IGxvZ2ljYWxIZWlnaHQpIGNvbnN0CiAgICAgICAgIHJldHVybiAwOwogCiAgICAgaW50
IGJvdHRvbSA9IElOVF9NQVg7Ci0gICAgRmxvYXRpbmdPYmplY3QqIHI7Ci0gICAgRGVwcmVjYXRl
ZFB0ckxpc3RJdGVyYXRvcjxGbG9hdGluZ09iamVjdD4gaXQoKm1fZmxvYXRpbmdPYmplY3RzKTsK
LSAgICBmb3IgKCA7IChyID0gaXQuY3VycmVudCgpKTsgKytpdCkgeworICAgIEZsb2F0aW5nT2Jq
ZWN0U2V0SXRlcmF0b3IgZW5kID0gbV9mbG9hdGluZ09iamVjdHMtPmVuZCgpOworICAgIGZvciAo
RmxvYXRpbmdPYmplY3RTZXRJdGVyYXRvciBpdCA9IG1fZmxvYXRpbmdPYmplY3RzLT5iZWdpbigp
OyBpdCAhPSBlbmQ7ICsraXQpIHsKKyAgICAgICAgRmxvYXRpbmdPYmplY3QqIHIgPSAqaXQ7CiAg
ICAgICAgIGludCBmbG9hdEJvdHRvbSA9IGxvZ2ljYWxCb3R0b21Gb3JGbG9hdChyKTsKICAgICAg
ICAgaWYgKGZsb2F0Qm90dG9tID4gbG9naWNhbEhlaWdodCkKICAgICAgICAgICAgIGJvdHRvbSA9
IG1pbihmbG9hdEJvdHRvbSwgYm90dG9tKTsKQEAgLTM0NTUsOSArMzQ2NCw5IEBAIGludCBSZW5k
ZXJCbG9jazo6bG93ZXN0RmxvYXRMb2dpY2FsQm90dG9tKEZsb2F0aW5nT2JqZWN0OjpUeXBlIGZs
b2F0VHlwZSkgY29uc3QKICAgICBpZiAoIW1fZmxvYXRpbmdPYmplY3RzKQogICAgICAgICByZXR1
cm4gMDsKICAgICBpbnQgbG93ZXN0RmxvYXRCb3R0b20gPSAwOwotICAgIEZsb2F0aW5nT2JqZWN0
KiByOwotICAgIERlcHJlY2F0ZWRQdHJMaXN0SXRlcmF0b3I8RmxvYXRpbmdPYmplY3Q+IGl0KCpt
X2Zsb2F0aW5nT2JqZWN0cyk7Ci0gICAgZm9yICggOyAociA9IGl0LmN1cnJlbnQoKSk7ICsraXQp
IHsKKyAgICBGbG9hdGluZ09iamVjdFNldEl0ZXJhdG9yIGVuZCA9IG1fZmxvYXRpbmdPYmplY3Rz
LT5lbmQoKTsKKyAgICBmb3IgKEZsb2F0aW5nT2JqZWN0U2V0SXRlcmF0b3IgaXQgPSBtX2Zsb2F0
aW5nT2JqZWN0cy0+YmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7CisgICAgICAgIEZsb2F0aW5n
T2JqZWN0KiByID0gKml0OwogICAgICAgICBpZiAoci0+aXNQbGFjZWQoKSAmJiByLT50eXBlKCkg
JiBmbG9hdFR5cGUpCiAgICAgICAgICAgICBsb3dlc3RGbG9hdEJvdHRvbSA9IG1heChsb3dlc3RG
bG9hdEJvdHRvbSwgbG9naWNhbEJvdHRvbUZvckZsb2F0KHIpKTsKICAgICB9CkBAIC0zNDk2LDEx
ICszNTA1LDE0IEBAIHZvaWQgUmVuZGVyQmxvY2s6OmNsZWFyRmxvYXRzKCkKIAogICAgIGlmICht
X2Zsb2F0aW5nT2JqZWN0cykgewogICAgICAgICBpZiAoY2hpbGRyZW5JbmxpbmUoKSkgewotICAg
ICAgICAgICAgbV9mbG9hdGluZ09iamVjdHMtPmZpcnN0KCk7Ci0gICAgICAgICAgICB3aGlsZSAo
RmxvYXRpbmdPYmplY3QqIGYgPSBtX2Zsb2F0aW5nT2JqZWN0cy0+dGFrZSgpKQorICAgICAgICAg
ICAgRmxvYXRpbmdPYmplY3RTZXQ6Oml0ZXJhdG9yIGVuZCA9IG1fZmxvYXRpbmdPYmplY3RzLT5l
bmQoKTsKKyAgICAgICAgICAgIGZvciAoRmxvYXRpbmdPYmplY3RTZXQ6Oml0ZXJhdG9yIGl0ID0g
bV9mbG9hdGluZ09iamVjdHMtPmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkgeworICAgICAgICAg
ICAgICAgIEZsb2F0aW5nT2JqZWN0KiBmID0gKml0OwogICAgICAgICAgICAgICAgIGZsb2F0TWFw
LmFkZChmLT5tX3JlbmRlcmVyLCBmKTsKKyAgICAgICAgICAgIH0KICAgICAgICAgfSBlbHNlCi0g
ICAgICAgICAgICBtX2Zsb2F0aW5nT2JqZWN0cy0+Y2xlYXIoKTsKKyAgICAgICAgICAgIGRlbGV0
ZUFsbFZhbHVlcygqbV9mbG9hdGluZ09iamVjdHMpOworICAgICAgICBtX2Zsb2F0aW5nT2JqZWN0
cy0+Y2xlYXIoKTsKICAgICB9CiAKICAgICAvLyBXZSBzaG91bGQgbm90IHByb2Nlc3MgZmxvYXRz
IGlmIHRoZSBwYXJlbnQgbm9kZSBpcyBub3QgYSBSZW5kZXJCbG9jay4gT3RoZXJ3aXNlLCB3ZSB3
aWxsIGFkZCAKQEAgLTM1NDYsNyArMzU1OCw5IEBAIHZvaWQgUmVuZGVyQmxvY2s6OmNsZWFyRmxv
YXRzKCkKICAgICAgICAgaW50IGNoYW5nZUxvZ2ljYWxUb3AgPSBudW1lcmljX2xpbWl0czxpbnQ+
OjptYXgoKTsKICAgICAgICAgaW50IGNoYW5nZUxvZ2ljYWxCb3R0b20gPSBudW1lcmljX2xpbWl0
czxpbnQ+OjptaW4oKTsKICAgICAgICAgaWYgKG1fZmxvYXRpbmdPYmplY3RzKSB7Ci0gICAgICAg
ICAgICBmb3IgKEZsb2F0aW5nT2JqZWN0KiBmID0gbV9mbG9hdGluZ09iamVjdHMtPmZpcnN0KCk7
IGY7IGYgPSBtX2Zsb2F0aW5nT2JqZWN0cy0+bmV4dCgpKSB7CisgICAgICAgICAgICBGbG9hdGlu
Z09iamVjdFNldEl0ZXJhdG9yIGVuZCA9IG1fZmxvYXRpbmdPYmplY3RzLT5lbmQoKTsKKyAgICAg
ICAgICAgIGZvciAoRmxvYXRpbmdPYmplY3RTZXRJdGVyYXRvciBpdCA9IG1fZmxvYXRpbmdPYmpl
Y3RzLT5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKKyAgICAgICAgICAgICAgICBGbG9hdGlu
Z09iamVjdCogZiA9ICppdDsKICAgICAgICAgICAgICAgICBGbG9hdGluZ09iamVjdCogb2xkRmxv
YXRpbmdPYmplY3QgPSBmbG9hdE1hcC5nZXQoZi0+bV9yZW5kZXJlcik7CiAgICAgICAgICAgICAg
ICAgaW50IGxvZ2ljYWxCb3R0b20gPSBsb2dpY2FsQm90dG9tRm9yRmxvYXQoZik7CiAgICAgICAg
ICAgICAgICAgaWYgKG9sZEZsb2F0aW5nT2JqZWN0KSB7CkBAIC0zNTkyLDggKzM2MDYsOSBAQCBp
bnQgUmVuZGVyQmxvY2s6OmFkZE92ZXJoYW5naW5nRmxvYXRzKFJlbmRlckJsb2NrKiBjaGlsZCwg
aW50IGxvZ2ljYWxMZWZ0T2Zmc2V0LAogCiAgICAgLy8gRmxvYXRzIHRoYXQgd2lsbCByZW1haW4g
dGhlIGNoaWxkJ3MgcmVzcG9uc2liaWxpdHkgdG8gcGFpbnQgc2hvdWxkIGZhY3RvciBpbnRvIGl0
cwogICAgIC8vIG92ZXJmbG93LgotICAgIERlcHJlY2F0ZWRQdHJMaXN0SXRlcmF0b3I8RmxvYXRp
bmdPYmplY3Q+IGl0KCpjaGlsZC0+bV9mbG9hdGluZ09iamVjdHMpOwotICAgIGZvciAoRmxvYXRp
bmdPYmplY3QqIHI7IChyID0gaXQuY3VycmVudCgpKTsgKytpdCkgeworICAgIEZsb2F0aW5nT2Jq
ZWN0U2V0SXRlcmF0b3IgY2hpbGRFbmQgPSBjaGlsZC0+bV9mbG9hdGluZ09iamVjdHMtPmVuZCgp
OworICAgIGZvciAoRmxvYXRpbmdPYmplY3RTZXRJdGVyYXRvciBjaGlsZEl0ID0gY2hpbGQtPm1f
ZmxvYXRpbmdPYmplY3RzLT5iZWdpbigpOyBjaGlsZEl0ICE9IGNoaWxkRW5kOyArK2NoaWxkSXQp
IHsKKyAgICAgICAgRmxvYXRpbmdPYmplY3QqIHIgPSAqY2hpbGRJdDsKICAgICAgICAgaW50IGxv
Z2ljYWxCb3R0b20gPSBjaGlsZC0+bG9naWNhbFRvcCgpICsgbG9naWNhbEJvdHRvbUZvckZsb2F0
KHIpOwogICAgICAgICBsb3dlc3RGbG9hdExvZ2ljYWxCb3R0b20gPSBtYXgobG93ZXN0RmxvYXRM
b2dpY2FsQm90dG9tLCBsb2dpY2FsQm90dG9tKTsKIApAQCAtMzYxNywxMSArMzYzMiwxMCBAQCBp
bnQgUmVuZGVyQmxvY2s6OmFkZE92ZXJoYW5naW5nRmxvYXRzKFJlbmRlckJsb2NrKiBjaGlsZCwg
aW50IGxvZ2ljYWxMZWZ0T2Zmc2V0LAogICAgICAgICAgICAgICAgIGZsb2F0aW5nT2JqLT5tX2lz
RGVzY2VuZGFudCA9IHRydWU7CiAKICAgICAgICAgICAgICAgICAvLyBXZSBjcmVhdGUgdGhlIGZs
b2F0aW5nIG9iamVjdCBsaXN0IGxhemlseS4KLSAgICAgICAgICAgICAgICBpZiAoIW1fZmxvYXRp
bmdPYmplY3RzKSB7Ci0gICAgICAgICAgICAgICAgICAgIG1fZmxvYXRpbmdPYmplY3RzID0gbmV3
IERlcHJlY2F0ZWRQdHJMaXN0PEZsb2F0aW5nT2JqZWN0PjsKLSAgICAgICAgICAgICAgICAgICAg
bV9mbG9hdGluZ09iamVjdHMtPnNldEF1dG9EZWxldGUodHJ1ZSk7Ci0gICAgICAgICAgICAgICAg
fQotICAgICAgICAgICAgICAgIG1fZmxvYXRpbmdPYmplY3RzLT5hcHBlbmQoZmxvYXRpbmdPYmop
OworICAgICAgICAgICAgICAgIGlmICghbV9mbG9hdGluZ09iamVjdHMpCisgICAgICAgICAgICAg
ICAgICAgIG1fZmxvYXRpbmdPYmplY3RzID0gbmV3IEZsb2F0aW5nT2JqZWN0U2V0OworCisgICAg
ICAgICAgICAgICAgbV9mbG9hdGluZ09iamVjdHMtPmFkZChmbG9hdGluZ09iaik7CiAgICAgICAg
ICAgICB9CiAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICBpZiAobWFrZUNoaWxkUGFpbnRP
dGhlckZsb2F0cyAmJiAhci0+bV9zaG91bGRQYWludCAmJiAhci0+bV9yZW5kZXJlci0+aGFzU2Vs
ZlBhaW50aW5nTGF5ZXIoKSAmJgpAQCAtMzY1MCwyMiArMzY2NCwxMiBAQCB2b2lkIFJlbmRlckJs
b2NrOjphZGRJbnRydWRpbmdGbG9hdHMoUmVuZGVyQmxvY2sqIHByZXYsIGludCBsb2dpY2FsTGVm
dE9mZnNldCwgaQogICAgICAgICByZXR1cm47CiAKICAgICBsb2dpY2FsTGVmdE9mZnNldCArPSAo
c3R5bGUoKS0+aXNIb3Jpem9udGFsV3JpdGluZ01vZGUoKSA/IG1hcmdpbkxlZnQoKSA6IG1hcmdp
blRvcCgpKTsKLSAgICAgICAgICAgICAgICAKLSAgICBEZXByZWNhdGVkUHRyTGlzdEl0ZXJhdG9y
PEZsb2F0aW5nT2JqZWN0PiBpdCgqcHJldi0+bV9mbG9hdGluZ09iamVjdHMpOwotICAgIGZvciAo
RmxvYXRpbmdPYmplY3QgKnI7IChyID0gaXQuY3VycmVudCgpKTsgKytpdCkgeworCisgICAgRmxv
YXRpbmdPYmplY3RTZXRJdGVyYXRvciBwcmV2RW5kID0gcHJldi0+bV9mbG9hdGluZ09iamVjdHMt
PmVuZCgpOworICAgIGZvciAoRmxvYXRpbmdPYmplY3RTZXRJdGVyYXRvciBwcmV2SXQgPSBwcmV2
LT5tX2Zsb2F0aW5nT2JqZWN0cy0+YmVnaW4oKTsgcHJldkl0ICE9IHByZXZFbmQ7ICsrcHJldkl0
KSB7CisgICAgICAgIEZsb2F0aW5nT2JqZWN0KiByID0gKnByZXZJdDsKICAgICAgICAgaWYgKGxv
Z2ljYWxCb3R0b21Gb3JGbG9hdChyKSA+IGxvZ2ljYWxUb3BPZmZzZXQpIHsKLSAgICAgICAgICAg
IC8vIFRoZSBvYmplY3QgbWF5IGFscmVhZHkgYmUgaW4gb3VyIGxpc3QuIENoZWNrIGZvciBpdCB1
cCBmcm9udCB0byBhdm9pZAotICAgICAgICAgICAgLy8gY3JlYXRpbmcgZHVwbGljYXRlIGVudHJp
ZXMuCi0gICAgICAgICAgICBGbG9hdGluZ09iamVjdCogZiA9IDA7Ci0gICAgICAgICAgICBpZiAo
bV9mbG9hdGluZ09iamVjdHMpIHsKLSAgICAgICAgICAgICAgICBEZXByZWNhdGVkUHRyTGlzdEl0
ZXJhdG9yPEZsb2F0aW5nT2JqZWN0PiBpdCgqbV9mbG9hdGluZ09iamVjdHMpOwotICAgICAgICAg
ICAgICAgIHdoaWxlICgoZiA9IGl0LmN1cnJlbnQoKSkpIHsKLSAgICAgICAgICAgICAgICAgICAg
aWYgKGYtPm1fcmVuZGVyZXIgPT0gci0+bV9yZW5kZXJlcikKLSAgICAgICAgICAgICAgICAgICAg
ICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgICArK2l0OwotICAgICAgICAgICAgICAgIH0K
LSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGlmICghZikgeworICAgICAgICAgICAgaWYgKCFt
X2Zsb2F0aW5nT2JqZWN0cyB8fCAhbV9mbG9hdGluZ09iamVjdHMtPmNvbnRhaW5zKHIpKSB7CiAg
ICAgICAgICAgICAgICAgaW50IGxlZnRPZmZzZXQgPSBzdHlsZSgpLT5pc0hvcml6b250YWxXcml0
aW5nTW9kZSgpID8gbG9naWNhbExlZnRPZmZzZXQgOiBsb2dpY2FsVG9wT2Zmc2V0OwogICAgICAg
ICAgICAgICAgIGludCB0b3BPZmZzZXQgPSBzdHlsZSgpLT5pc0hvcml6b250YWxXcml0aW5nTW9k
ZSgpID8gbG9naWNhbFRvcE9mZnNldCA6IGxvZ2ljYWxMZWZ0T2Zmc2V0OwogICAgICAgICAgICAg
ICAgIApAQCAtMzY4NywxMSArMzY5MSw5IEBAIHZvaWQgUmVuZGVyQmxvY2s6OmFkZEludHJ1ZGlu
Z0Zsb2F0cyhSZW5kZXJCbG9jayogcHJldiwgaW50IGxvZ2ljYWxMZWZ0T2Zmc2V0LCBpCiAgICAg
ICAgICAgICAgICAgZmxvYXRpbmdPYmotPm1fcmVuZGVyZXIgPSByLT5tX3JlbmRlcmVyOwogICAg
ICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgIC8vIFdlIGNyZWF0ZSB0aGUgZmxvYXRpbmcg
b2JqZWN0IGxpc3QgbGF6aWx5LgotICAgICAgICAgICAgICAgIGlmICghbV9mbG9hdGluZ09iamVj
dHMpIHsKLSAgICAgICAgICAgICAgICAgICAgbV9mbG9hdGluZ09iamVjdHMgPSBuZXcgRGVwcmVj
YXRlZFB0ckxpc3Q8RmxvYXRpbmdPYmplY3Q+OwotICAgICAgICAgICAgICAgICAgICBtX2Zsb2F0
aW5nT2JqZWN0cy0+c2V0QXV0b0RlbGV0ZSh0cnVlKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAg
ICAgICAgICAgICAgbV9mbG9hdGluZ09iamVjdHMtPmFwcGVuZChmbG9hdGluZ09iaik7CisgICAg
ICAgICAgICAgICAgaWYgKCFtX2Zsb2F0aW5nT2JqZWN0cykKKyAgICAgICAgICAgICAgICAgICAg
bV9mbG9hdGluZ09iamVjdHMgPSBuZXcgRmxvYXRpbmdPYmplY3RTZXQ7CisgICAgICAgICAgICAg
ICAgbV9mbG9hdGluZ09iamVjdHMtPmFkZChmbG9hdGluZ09iaik7CiAgICAgICAgICAgICB9CiAg
ICAgICAgIH0KICAgICB9CkBAIC0zNzAzLDE3ICszNzA1LDkgQEAgYm9vbCBSZW5kZXJCbG9jazo6
YXZvaWRzRmxvYXRzKCkgY29uc3QKICAgICByZXR1cm4gUmVuZGVyQm94Ojphdm9pZHNGbG9hdHMo
KSB8fCAhc3R5bGUoKS0+aGFzQXV0b0NvbHVtbkNvdW50KCkgfHwgIXN0eWxlKCktPmhhc0F1dG9D
b2x1bW5XaWR0aCgpOwogfQogCi1ib29sIFJlbmRlckJsb2NrOjpjb250YWluc0Zsb2F0KFJlbmRl
ck9iamVjdCogbykKK2Jvb2wgUmVuZGVyQmxvY2s6OmNvbnRhaW5zRmxvYXQoUmVuZGVyQm94KiBy
ZW5kZXJlcikKIHsKLSAgICBpZiAobV9mbG9hdGluZ09iamVjdHMpIHsKLSAgICAgICAgRGVwcmVj
YXRlZFB0ckxpc3RJdGVyYXRvcjxGbG9hdGluZ09iamVjdD4gaXQoKm1fZmxvYXRpbmdPYmplY3Rz
KTsKLSAgICAgICAgd2hpbGUgKGl0LmN1cnJlbnQoKSkgewotICAgICAgICAgICAgaWYgKGl0LmN1
cnJlbnQoKS0+bV9yZW5kZXJlciA9PSBvKQotICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwot
ICAgICAgICAgICAgKytpdDsKLSAgICAgICAgfQotICAgIH0KLSAgICByZXR1cm4gZmFsc2U7Cisg
ICAgcmV0dXJuIG1fZmxvYXRpbmdPYmplY3RzICYmIG1fZmxvYXRpbmdPYmplY3RzLT5jb250YWlu
czxSZW5kZXJCb3gqLCBGbG9hdGluZ09iamVjdEhhc2hUcmFuc2xhdG9yPihyZW5kZXJlcik7CiB9
CiAKIHZvaWQgUmVuZGVyQmxvY2s6Om1hcmtBbGxEZXNjZW5kYW50c1dpdGhGbG9hdHNGb3JMYXlv
dXQoUmVuZGVyQm94KiBmbG9hdFRvUmVtb3ZlLCBib29sIGluTGF5b3V0KQpAQCAtMzg3MSw5ICsz
ODY1LDEwIEBAIGJvb2wgUmVuZGVyQmxvY2s6OmhpdFRlc3RGbG9hdHMoY29uc3QgSGl0VGVzdFJl
cXVlc3QmIHJlcXVlc3QsIEhpdFRlc3RSZXN1bHQmIHJlCiAgICAgICAgIHR5ICs9IHRvUmVuZGVy
Vmlldyh0aGlzKS0+ZnJhbWVWaWV3KCktPnNjcm9sbFkoKTsKICAgICB9CiAKLSAgICBGbG9hdGlu
Z09iamVjdCogZmxvYXRpbmdPYmplY3Q7Ci0gICAgRGVwcmVjYXRlZFB0ckxpc3RJdGVyYXRvcjxG
bG9hdGluZ09iamVjdD4gaXQoKm1fZmxvYXRpbmdPYmplY3RzKTsKLSAgICBmb3IgKGl0LnRvTGFz
dCgpOyAoZmxvYXRpbmdPYmplY3QgPSBpdC5jdXJyZW50KCkpOyAtLWl0KSB7CisgICAgRmxvYXRp
bmdPYmplY3RTZXRJdGVyYXRvciBiZWdpbiA9IG1fZmxvYXRpbmdPYmplY3RzLT5iZWdpbigpOwor
ICAgIGZvciAoRmxvYXRpbmdPYmplY3RTZXRJdGVyYXRvciBpdCA9IG1fZmxvYXRpbmdPYmplY3Rz
LT5lbmQoKTsgaXQgIT0gYmVnaW47KSB7CisgICAgICAgIC0taXQ7CisgICAgICAgIEZsb2F0aW5n
T2JqZWN0KiBmbG9hdGluZ09iamVjdCA9ICppdDsKICAgICAgICAgaWYgKGZsb2F0aW5nT2JqZWN0
LT5tX3Nob3VsZFBhaW50ICYmICFmbG9hdGluZ09iamVjdC0+bV9yZW5kZXJlci0+aGFzU2VsZlBh
aW50aW5nTGF5ZXIoKSkgewogICAgICAgICAgICAgaW50IHhPZmZzZXQgPSB4UG9zaXRpb25Gb3JG
bG9hdEluY2x1ZGluZ01hcmdpbihmbG9hdGluZ09iamVjdCkgLSBmbG9hdGluZ09iamVjdC0+bV9y
ZW5kZXJlci0+eCgpOwogICAgICAgICAgICAgaW50IHlPZmZzZXQgPSB5UG9zaXRpb25Gb3JGbG9h
dEluY2x1ZGluZ01hcmdpbihmbG9hdGluZ09iamVjdCkgLSBmbG9hdGluZ09iamVjdC0+bV9yZW5k
ZXJlci0+eSgpOwpAQCAtNTQ5OCw5ICs1NDkzLDkgQEAgdm9pZCBSZW5kZXJCbG9jazo6YWRqdXN0
Rm9yQm9yZGVyRml0KGludCB4LCBpbnQmIGxlZnQsIGludCYgcmlnaHQpIGNvbnN0CiAgICAgICAg
IH0KICAgICAgICAgCiAgICAgICAgIGlmIChtX2Zsb2F0aW5nT2JqZWN0cykgewotICAgICAgICAg
ICAgRmxvYXRpbmdPYmplY3QqIHI7Ci0gICAgICAgICAgICBEZXByZWNhdGVkUHRyTGlzdEl0ZXJh
dG9yPEZsb2F0aW5nT2JqZWN0PiBpdCgqbV9mbG9hdGluZ09iamVjdHMpOwotICAgICAgICAgICAg
Zm9yICg7IChyID0gaXQuY3VycmVudCgpKTsgKytpdCkgeworICAgICAgICAgICAgRmxvYXRpbmdP
YmplY3RTZXRJdGVyYXRvciBlbmQgPSBtX2Zsb2F0aW5nT2JqZWN0cy0+ZW5kKCk7CisgICAgICAg
ICAgICBmb3IgKEZsb2F0aW5nT2JqZWN0U2V0SXRlcmF0b3IgaXQgPSBtX2Zsb2F0aW5nT2JqZWN0
cy0+YmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7CisgICAgICAgICAgICAgICAgRmxvYXRpbmdP
YmplY3QqIHIgPSAqaXQ7CiAgICAgICAgICAgICAgICAgLy8gT25seSBleGFtaW5lIHRoZSBvYmpl
Y3QgaWYgb3VyIG1fc2hvdWxkUGFpbnQgZmxhZyBpcyBzZXQuCiAgICAgICAgICAgICAgICAgaWYg
KHItPm1fc2hvdWxkUGFpbnQpIHsKICAgICAgICAgICAgICAgICAgICAgaW50IGZsb2F0TGVmdCA9
IHhQb3NpdGlvbkZvckZsb2F0SW5jbHVkaW5nTWFyZ2luKHIpIC0gci0+bV9yZW5kZXJlci0+eCgp
OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJsb2NrLmggYi9T
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2suaAppbmRleCBiODlmZmJjYzk0ZDE3
OGM0OWYwMmEwNzcxOTRiMjZiNzY5ODdjNTM5Li43Y2UyNDJjYTFkNjY1MzY5MzJmMjAzMjQ3ZTQx
NDgzYjQ0ZWJmMmJhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVy
QmxvY2suaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2suaApAQCAt
MjMsNyArMjMsNiBAQAogI2lmbmRlZiBSZW5kZXJCbG9ja19oCiAjZGVmaW5lIFJlbmRlckJsb2Nr
X2gKIAotI2luY2x1ZGUgIkRlcHJlY2F0ZWRQdHJMaXN0LmgiCiAjaW5jbHVkZSAiR2FwUmVjdHMu
aCIKICNpbmNsdWRlICJSZW5kZXJCb3guaCIKICNpbmNsdWRlICJSZW5kZXJMaW5lQm94TGlzdC5o
IgpAQCAtOTUsNyArOTQsNyBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCB2b2lkIG1hcmtGb3JQYWdp
bmF0aW9uUmVsYXlvdXRJZk5lZWRlZCgpOwogICAgIAogICAgIGJvb2wgY29udGFpbnNGbG9hdHMo
KSB7IHJldHVybiBtX2Zsb2F0aW5nT2JqZWN0cyAmJiAhbV9mbG9hdGluZ09iamVjdHMtPmlzRW1w
dHkoKTsgfQotICAgIGJvb2wgY29udGFpbnNGbG9hdChSZW5kZXJPYmplY3QqKTsKKyAgICBib29s
IGNvbnRhaW5zRmxvYXQoUmVuZGVyQm94Kik7CiAKICAgICBpbnQgYXZhaWxhYmxlTG9naWNhbFdp
ZHRoRm9yTGluZShpbnQgcG9zaXRpb24sIGJvb2wgZmlyc3RMaW5lKSBjb25zdDsKICAgICBpbnQg
bG9naWNhbFJpZ2h0T2Zmc2V0Rm9yTGluZShpbnQgcG9zaXRpb24sIGJvb2wgZmlyc3RMaW5lKSBj
b25zdCB7IHJldHVybiBsb2dpY2FsUmlnaHRPZmZzZXRGb3JMaW5lKHBvc2l0aW9uLCBsb2dpY2Fs
UmlnaHRPZmZzZXRGb3JDb250ZW50KCksIGZpcnN0TGluZSk7IH0KQEAgLTY5OSw5ICs2OTgsMjAg
QEAgcHJpdmF0ZToKICAgICBpbnQgYWRqdXN0Rm9yVW5zcGxpdHRhYmxlQ2hpbGQoUmVuZGVyQm94
KiBjaGlsZCwgaW50IGxvZ2ljYWxPZmZzZXQsIGJvb2wgaW5jbHVkZU1hcmdpbnMgPSBmYWxzZSk7
IC8vIElmIHRoZSBjaGlsZCBpcyB1bnNwbGl0dGFibGUgYW5kIGNhbid0IGZpdCBvbiB0aGUgY3Vy
cmVudCBwYWdlLCByZXR1cm4gdGhlIHRvcCBvZiB0aGUgbmV4dCBwYWdlL2NvbHVtbi4KICAgICB2
b2lkIGFkanVzdExpbmVQb3NpdGlvbkZvclBhZ2luYXRpb24oUm9vdElubGluZUJveCosIGludCYg
ZGVsdGFPZmZzZXQpOyAvLyBDb21wdXRlcyBhIGRlbHRhT2Zmc2V0IHZhbHVlIHRoYXQgcHV0IGEg
bGluZSBhdCB0aGUgdG9wIG9mIHRoZSBuZXh0IHBhZ2UgaWYgaXQgZG9lc24ndCBmaXQgb24gdGhl
IGN1cnJlbnQgcGFnZS4KIAotICAgIHR5cGVkZWYgUG9zaXRpb25lZE9iamVjdHNMaXN0SGFzaFNl
dDo6Y29uc3RfaXRlcmF0b3IgSXRlcmF0b3I7Ci0gICAgRGVwcmVjYXRlZFB0ckxpc3Q8RmxvYXRp
bmdPYmplY3Q+KiBtX2Zsb2F0aW5nT2JqZWN0czsKKyAgICBzdHJ1Y3QgRmxvYXRpbmdPYmplY3RI
YXNoRnVuY3Rpb25zIHsKKyAgICAgICAgc3RhdGljIHVuc2lnbmVkIGhhc2goRmxvYXRpbmdPYmpl
Y3QqIGtleSkgeyByZXR1cm4gRGVmYXVsdEhhc2g8UmVuZGVyQm94Kj46Okhhc2g6Omhhc2goa2V5
LT5tX3JlbmRlcmVyKTsgfQorICAgICAgICBzdGF0aWMgYm9vbCBlcXVhbChGbG9hdGluZ09iamVj
dCogYSwgRmxvYXRpbmdPYmplY3QqIGIpIHsgcmV0dXJuIGEtPm1fcmVuZGVyZXIgPT0gYi0+bV9y
ZW5kZXJlcjsgfQorICAgICAgICBzdGF0aWMgY29uc3QgYm9vbCBzYWZlVG9Db21wYXJlVG9FbXB0
eU9yRGVsZXRlZCA9IHRydWU7CisgICAgfTsKKyAgICBzdHJ1Y3QgRmxvYXRpbmdPYmplY3RIYXNo
VHJhbnNsYXRvciB7CisgICAgICAgIHN0YXRpYyB1bnNpZ25lZCBoYXNoKFJlbmRlckJveCoga2V5
KSB7IHJldHVybiBEZWZhdWx0SGFzaDxSZW5kZXJCb3gqPjo6SGFzaDo6aGFzaChrZXkpOyB9Cisg
ICAgICAgIHN0YXRpYyBib29sIGVxdWFsKEZsb2F0aW5nT2JqZWN0KiBhLCBSZW5kZXJCb3gqIGIp
IHsgcmV0dXJuIGEtPm1fcmVuZGVyZXIgPT0gYjsgfQorICAgIH07CisgICAgdHlwZWRlZiBMaXN0
SGFzaFNldDxGbG9hdGluZ09iamVjdCosIDQsIEZsb2F0aW5nT2JqZWN0SGFzaEZ1bmN0aW9ucz4g
RmxvYXRpbmdPYmplY3RTZXQ7CisgICAgdHlwZWRlZiBGbG9hdGluZ09iamVjdFNldDo6Y29uc3Rf
aXRlcmF0b3IgRmxvYXRpbmdPYmplY3RTZXRJdGVyYXRvcjsKKyAgICBGbG9hdGluZ09iamVjdFNl
dCogbV9mbG9hdGluZ09iamVjdHM7CiAgICAgCisgICAgdHlwZWRlZiBQb3NpdGlvbmVkT2JqZWN0
c0xpc3RIYXNoU2V0Ojpjb25zdF9pdGVyYXRvciBJdGVyYXRvcjsKICAgICBQb3NpdGlvbmVkT2Jq
ZWN0c0xpc3RIYXNoU2V0KiBtX3Bvc2l0aW9uZWRPYmplY3RzOwogCiAgICAgLy8gQWxsb2NhdGVk
IG9ubHkgd2hlbiBzb21lIG9mIHRoZXNlIGZpZWxkcyBoYXZlIG5vbi1kZWZhdWx0IHZhbHVlcwpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJsb2NrTGluZUxheW91
dC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2tMaW5lTGF5b3V0LmNw
cAppbmRleCA4MGYxYTQzOGU4MTYwNmJkYzg0MzUxYjVjNGI4MTVkNjA0MGIyNTI5Li5iMmEwY2Y5
NmE0NWRmM2M1MDI1MjEzOWEwNmYzNDI2ODM3OTBlN2U3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2tMaW5lTGF5b3V0LmNwcAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2tMaW5lTGF5b3V0LmNwcApAQCAtNjE3LDcgKzYxNyw3
IEBAIHZvaWQgUmVuZGVyQmxvY2s6OmxheW91dElubGluZUNoaWxkcmVuKGJvb2wgcmVsYXlvdXRD
aGlsZHJlbiwgaW50JiByZXBhaW50TG9naWNhCiAgICAgICAgICAgICB9CiAgICAgICAgIH0KIAot
ICAgICAgICBGbG9hdGluZ09iamVjdCogbGFzdEZsb2F0ID0gbV9mbG9hdGluZ09iamVjdHMgPyBt
X2Zsb2F0aW5nT2JqZWN0cy0+bGFzdCgpIDogMDsKKyAgICAgICAgRmxvYXRpbmdPYmplY3QqIGxh
c3RGbG9hdCA9IChtX2Zsb2F0aW5nT2JqZWN0cyAmJiAhbV9mbG9hdGluZ09iamVjdHMtPmlzRW1w
dHkoKSkgPyBtX2Zsb2F0aW5nT2JqZWN0cy0+bGFzdCgpIDogMDsKIAogICAgICAgICBMaW5lTWlk
cG9pbnRTdGF0ZSYgbGluZU1pZHBvaW50U3RhdGUgPSByZXNvbHZlci5taWRwb2ludFN0YXRlKCk7
CiAKQEAgLTY4Niw3ICs2ODYsNyBAQCB2b2lkIFJlbmRlckJsb2NrOjpsYXlvdXRJbmxpbmVDaGls
ZHJlbihib29sIHJlbGF5b3V0Q2hpbGRyZW4sIGludCYgcmVwYWludExvZ2ljYQogICAgICAgICAg
ICAgYm9vbCBoeXBoZW5hdGVkOwogICAgICAgICAgICAgCiAgICAgICAgICAgICBJbmxpbmVJdGVy
YXRvciBvbGRFbmQgPSBlbmQ7Ci0gICAgICAgICAgICBGbG9hdGluZ09iamVjdCogbGFzdEZsb2F0
RnJvbVByZXZpb3VzTGluZSA9IG1fZmxvYXRpbmdPYmplY3RzID8gbV9mbG9hdGluZ09iamVjdHMt
Pmxhc3QoKSA6IDA7CisgICAgICAgICAgICBGbG9hdGluZ09iamVjdCogbGFzdEZsb2F0RnJvbVBy
ZXZpb3VzTGluZSA9IChtX2Zsb2F0aW5nT2JqZWN0cyAmJiAhbV9mbG9hdGluZ09iamVjdHMtPmlz
RW1wdHkoKSkgPyBtX2Zsb2F0aW5nT2JqZWN0cy0+bGFzdCgpIDogMDsKICAgICAgICAgICAgIGVu
ZCA9IGZpbmROZXh0TGluZUJyZWFrKHJlc29sdmVyLCBmaXJzdExpbmUsIGlzTGluZUVtcHR5LCBw
cmV2aW91c0xpbmVCcm9rZUNsZWFubHksIGh5cGhlbmF0ZWQsICZjbGVhciwgbGFzdEZsb2F0RnJv
bVByZXZpb3VzTGluZSk7CiAgICAgICAgICAgICBpZiAocmVzb2x2ZXIucG9zaXRpb24oKS5hdEVu
ZCgpKSB7CiAgICAgICAgICAgICAgICAgcmVzb2x2ZXIuZGVsZXRlUnVucygpOwpAQCAtODM3LDEz
ICs4MzcsMTYgQEAgdm9pZCBSZW5kZXJCbG9jazo6bGF5b3V0SW5saW5lQ2hpbGRyZW4oYm9vbCBy
ZWxheW91dENoaWxkcmVuLCBpbnQmIHJlcGFpbnRMb2dpY2EKICAgICAgICAgICAgIH0KIAogICAg
ICAgICAgICAgaWYgKG1fZmxvYXRpbmdPYmplY3RzICYmIGxhc3RSb290Qm94KCkpIHsKKyAgICAg
ICAgICAgICAgICBGbG9hdGluZ09iamVjdFNldEl0ZXJhdG9yIGl0ID0gbV9mbG9hdGluZ09iamVj
dHMtPmJlZ2luKCk7CisgICAgICAgICAgICAgICAgRmxvYXRpbmdPYmplY3RTZXRJdGVyYXRvciBl
bmQgPSBtX2Zsb2F0aW5nT2JqZWN0cy0+ZW5kKCk7CiAgICAgICAgICAgICAgICAgaWYgKGxhc3RG
bG9hdCkgewotICAgICAgICAgICAgICAgICAgICBmb3IgKEZsb2F0aW5nT2JqZWN0KiBmID0gbV9m
bG9hdGluZ09iamVjdHMtPmxhc3QoKTsgZiAhPSBsYXN0RmxvYXQ7IGYgPSBtX2Zsb2F0aW5nT2Jq
ZWN0cy0+cHJldigpKSB7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAg
ICAgbV9mbG9hdGluZ09iamVjdHMtPm5leHQoKTsKLSAgICAgICAgICAgICAgICB9IGVsc2UKLSAg
ICAgICAgICAgICAgICAgICAgbV9mbG9hdGluZ09iamVjdHMtPmZpcnN0KCk7Ci0gICAgICAgICAg
ICAgICAgZm9yIChGbG9hdGluZ09iamVjdCogZiA9IG1fZmxvYXRpbmdPYmplY3RzLT5jdXJyZW50
KCk7IGY7IGYgPSBtX2Zsb2F0aW5nT2JqZWN0cy0+bmV4dCgpKSB7CisgICAgICAgICAgICAgICAg
ICAgIEZsb2F0aW5nT2JqZWN0U2V0SXRlcmF0b3IgbGFzdEZsb2F0SXRlcmF0b3IgPSBtX2Zsb2F0
aW5nT2JqZWN0cy0+ZmluZChsYXN0RmxvYXQpOworICAgICAgICAgICAgICAgICAgICBBU1NFUlQo
bGFzdEZsb2F0SXRlcmF0b3IgIT0gZW5kKTsKKyAgICAgICAgICAgICAgICAgICAgKytsYXN0Rmxv
YXRJdGVyYXRvcjsKKyAgICAgICAgICAgICAgICAgICAgaXQgPSBsYXN0RmxvYXRJdGVyYXRvcjsK
KyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgZm9yICg7IGl0ICE9IGVuZDsgKytp
dCkgeworICAgICAgICAgICAgICAgICAgICBGbG9hdGluZ09iamVjdCogZiA9ICppdDsKICAgICAg
ICAgICAgICAgICAgICAgbGFzdFJvb3RCb3goKS0+ZmxvYXRzKCkuYXBwZW5kKGYtPm1fcmVuZGVy
ZXIpOwogICAgICAgICAgICAgICAgICAgICBBU1NFUlQoZi0+bV9yZW5kZXJlciA9PSBmbG9hdHNb
ZmxvYXRJbmRleF0ub2JqZWN0KTsKICAgICAgICAgICAgICAgICAgICAgLy8gSWYgYSBmbG9hdCdz
IGdlb21ldHJ5IGhhcyBjaGFuZ2VkLCBnaXZlIHVwIG9uIHN5bmNpbmcgd2l0aCBjbGVhbiBsaW5l
cy4KQEAgLTg1MSw3ICs4NTQsNyBAQCB2b2lkIFJlbmRlckJsb2NrOjpsYXlvdXRJbmxpbmVDaGls
ZHJlbihib29sIHJlbGF5b3V0Q2hpbGRyZW4sIGludCYgcmVwYWludExvZ2ljYQogICAgICAgICAg
ICAgICAgICAgICAgICAgY2hlY2tGb3JFbmRMaW5lTWF0Y2ggPSBmYWxzZTsKICAgICAgICAgICAg
ICAgICAgICAgZmxvYXRJbmRleCsrOwogICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAg
ICBsYXN0RmxvYXQgPSBtX2Zsb2F0aW5nT2JqZWN0cy0+bGFzdCgpOworICAgICAgICAgICAgICAg
IGxhc3RGbG9hdCA9ICFtX2Zsb2F0aW5nT2JqZWN0cy0+aXNFbXB0eSgpID8gbV9mbG9hdGluZ09i
amVjdHMtPmxhc3QoKSA6IDA7CiAgICAgICAgICAgICB9CiAKICAgICAgICAgICAgIGxpbmVNaWRw
b2ludFN0YXRlLnJlc2V0KCk7CkBAIC05MTQsMTUgKzkxNywxOCBAQCB2b2lkIFJlbmRlckJsb2Nr
OjpsYXlvdXRJbmxpbmVDaGlsZHJlbihib29sIHJlbGF5b3V0Q2hpbGRyZW4sIGludCYgcmVwYWlu
dExvZ2ljYQogICAgICAgICAgICAgICAgIHRyYWlsaW5nRmxvYXRzTGluZUJveC0+c2V0T3ZlcmZs
b3dGcm9tTG9naWNhbFJlY3RzKGxvZ2ljYWxMYXlvdXRPdmVyZmxvdywgbG9naWNhbFZpc3VhbE92
ZXJmbG93KTsKICAgICAgICAgICAgICAgICB0cmFpbGluZ0Zsb2F0c0xpbmVCb3gtPnNldEJsb2Nr
TG9naWNhbEhlaWdodChsb2dpY2FsSGVpZ2h0KCkpOwogICAgICAgICAgICAgfQorCisgICAgICAg
ICAgICBGbG9hdGluZ09iamVjdFNldEl0ZXJhdG9yIGl0ID0gbV9mbG9hdGluZ09iamVjdHMtPmJl
Z2luKCk7CisgICAgICAgICAgICBGbG9hdGluZ09iamVjdFNldEl0ZXJhdG9yIGVuZCA9IG1fZmxv
YXRpbmdPYmplY3RzLT5lbmQoKTsKICAgICAgICAgICAgIGlmIChsYXN0RmxvYXQpIHsKLSAgICAg
ICAgICAgICAgICBmb3IgKEZsb2F0aW5nT2JqZWN0KiBmID0gbV9mbG9hdGluZ09iamVjdHMtPmxh
c3QoKTsgZiAhPSBsYXN0RmxvYXQ7IGYgPSBtX2Zsb2F0aW5nT2JqZWN0cy0+cHJldigpKSB7Ci0g
ICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIG1fZmxvYXRpbmdPYmplY3RzLT5uZXh0
KCk7Ci0gICAgICAgICAgICB9IGVsc2UKLSAgICAgICAgICAgICAgICBtX2Zsb2F0aW5nT2JqZWN0
cy0+Zmlyc3QoKTsKLSAgICAgICAgICAgIGZvciAoRmxvYXRpbmdPYmplY3QqIGYgPSBtX2Zsb2F0
aW5nT2JqZWN0cy0+Y3VycmVudCgpOyBmOyBmID0gbV9mbG9hdGluZ09iamVjdHMtPm5leHQoKSkK
LSAgICAgICAgICAgICAgICBsYXN0Um9vdEJveCgpLT5mbG9hdHMoKS5hcHBlbmQoZi0+bV9yZW5k
ZXJlcik7Ci0gICAgICAgICAgICBsYXN0RmxvYXQgPSBtX2Zsb2F0aW5nT2JqZWN0cy0+bGFzdCgp
OworICAgICAgICAgICAgICAgIEZsb2F0aW5nT2JqZWN0U2V0SXRlcmF0b3IgbGFzdEZsb2F0SXRl
cmF0b3IgPSBtX2Zsb2F0aW5nT2JqZWN0cy0+ZmluZChsYXN0RmxvYXQpOworICAgICAgICAgICAg
ICAgIEFTU0VSVChsYXN0RmxvYXRJdGVyYXRvciAhPSBlbmQpOworICAgICAgICAgICAgICAgICsr
bGFzdEZsb2F0SXRlcmF0b3I7CisgICAgICAgICAgICAgICAgaXQgPSBsYXN0RmxvYXRJdGVyYXRv
cjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGZvciAoOyBpdCAhPSBlbmQ7ICsraXQpCisg
ICAgICAgICAgICAgICAgbGFzdFJvb3RCb3goKS0+ZmxvYXRzKCkuYXBwZW5kKCgqaXQpLT5tX3Jl
bmRlcmVyKTsKKyAgICAgICAgICAgIGxhc3RGbG9hdCA9ICFtX2Zsb2F0aW5nT2JqZWN0cy0+aXNF
bXB0eSgpID8gbV9mbG9hdGluZ09iamVjdHMtPmxhc3QoKSA6IDA7CiAgICAgICAgIH0KICAgICAg
ICAgc2l6ZV90IGZsb2F0Q291bnQgPSBmbG9hdHMuc2l6ZSgpOwogICAgICAgICAvLyBGbG9hdHMg
dGhhdCBkaWQgbm90IGhhdmUgbGF5b3V0IGRpZCBub3QgcmVwYWludCB3aGVuIHdlIGxhaWQgdGhl
bSBvdXQuIFRoZXkgd291bGQgaGF2ZQpAQCAtMTE1OSw3ICsxMTY1LDkgQEAgYm9vbCBSZW5kZXJC
bG9jazo6bWF0Y2hlZEVuZExpbmUoY29uc3QgSW5saW5lQmlkaVJlc29sdmVyJiByZXNvbHZlciwg
Y29uc3QgSW5saW4KIAogICAgICAgICBpbnQgbG9naWNhbEJvdHRvbSA9IGxhc3RMaW5lLT5ibG9j
a0xvZ2ljYWxIZWlnaHQoKSArIGFicyhkZWx0YSk7CiAKLSAgICAgICAgZm9yIChGbG9hdGluZ09i
amVjdCogZiA9IG1fZmxvYXRpbmdPYmplY3RzLT5maXJzdCgpOyBmOyBmID0gbV9mbG9hdGluZ09i
amVjdHMtPm5leHQoKSkgeworICAgICAgICBGbG9hdGluZ09iamVjdFNldEl0ZXJhdG9yIGVuZCA9
IG1fZmxvYXRpbmdPYmplY3RzLT5lbmQoKTsKKyAgICAgICAgZm9yIChGbG9hdGluZ09iamVjdFNl
dEl0ZXJhdG9yIGl0ID0gbV9mbG9hdGluZ09iamVjdHMtPmJlZ2luKCk7IGl0ICE9IGVuZDsgKytp
dCkgeworICAgICAgICAgICAgRmxvYXRpbmdPYmplY3QqIGYgPSAqaXQ7CiAgICAgICAgICAgICBp
ZiAobG9naWNhbEJvdHRvbUZvckZsb2F0KGYpID49IGxvZ2ljYWxUb3AgJiYgbG9naWNhbEJvdHRv
bUZvckZsb2F0KGYpIDwgbG9naWNhbEJvdHRvbSkKICAgICAgICAgICAgICAgICByZXR1cm4gZmFs
c2U7CiAgICAgICAgIH0KQEAgLTExOTMsNyArMTIwMSw5IEBAIGJvb2wgUmVuZGVyQmxvY2s6Om1h
dGNoZWRFbmRMaW5lKGNvbnN0IElubGluZUJpZGlSZXNvbHZlciYgcmVzb2x2ZXIsIGNvbnN0IElu
bGluCiAKICAgICAgICAgICAgICAgICBpbnQgbG9naWNhbEJvdHRvbSA9IGxhc3RMaW5lLT5ibG9j
a0xvZ2ljYWxIZWlnaHQoKSArIGFicyhkZWx0YSk7CiAKLSAgICAgICAgICAgICAgICBmb3IgKEZs
b2F0aW5nT2JqZWN0KiBmID0gbV9mbG9hdGluZ09iamVjdHMtPmZpcnN0KCk7IGY7IGYgPSBtX2Zs
b2F0aW5nT2JqZWN0cy0+bmV4dCgpKSB7CisgICAgICAgICAgICAgICAgRmxvYXRpbmdPYmplY3RT
ZXRJdGVyYXRvciBlbmQgPSBtX2Zsb2F0aW5nT2JqZWN0cy0+ZW5kKCk7CisgICAgICAgICAgICAg
ICAgZm9yIChGbG9hdGluZ09iamVjdFNldEl0ZXJhdG9yIGl0ID0gbV9mbG9hdGluZ09iamVjdHMt
PmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkgeworICAgICAgICAgICAgICAgICAgICBGbG9hdGlu
Z09iamVjdCogZiA9ICppdDsKICAgICAgICAgICAgICAgICAgICAgaWYgKGxvZ2ljYWxCb3R0b21G
b3JGbG9hdChmKSA+PSBsb2dpY2FsVG9wICYmIGxvZ2ljYWxCb3R0b21Gb3JGbG9hdChmKSA8IGxv
Z2ljYWxCb3R0b20pCiAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAg
ICAgICAgICAgICAgfQo=
</data>
<flag name="review"
          id="75727"
          type_id="1"
          status="+"
          setter="darin"
    />
    <flag name="commit-queue"
          id="75725"
          type_id="3"
          status="-"
          setter="commit-queue"
    />
          </attachment>
      

    </bug>

</bugzilla>