<?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>121036</bug_id>
          
          <creation_ts>2013-09-09 11:58:11 -0700</creation_ts>
          <short_desc>Move the layoutBlock method into RenderBlockFlow.</short_desc>
          <delta_ts>2013-09-09 13:22:24 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>Layout and Rendering</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>84924</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Dave Hyatt">hyatt</reporter>
          <assigned_to name="Dave Hyatt">hyatt</assigned_to>
          <cc>commit-queue</cc>
    
    <cc>d-r</cc>
    
    <cc>eric</cc>
    
    <cc>esprehn+autocc</cc>
    
    <cc>fmalita</cc>
    
    <cc>glenn</cc>
    
    <cc>kondapallykalyan</cc>
    
    <cc>leviw</cc>
    
    <cc>pdr</cc>
    
    <cc>philn</cc>
    
    <cc>schenney</cc>
    
    <cc>WebkitBugTracker</cc>
    
    <cc>webkit-ews</cc>
    
    <cc>xan.lopez</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>926824</commentid>
    <comment_count>0</comment_count>
    <who name="Dave Hyatt">hyatt</who>
    <bug_when>2013-09-09 11:58:11 -0700</bug_when>
    <thetext>Begin the process of moving layout into RenderBlockFlow.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>926827</commentid>
    <comment_count>1</comment_count>
      <attachid>211061</attachid>
    <who name="Dave Hyatt">hyatt</who>
    <bug_when>2013-09-09 12:09:32 -0700</bug_when>
    <thetext>Created attachment 211061
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>926829</commentid>
    <comment_count>2</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2013-09-09 12:12:23 -0700</bug_when>
    <thetext>Attachment 211061 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;Source/WebCore/ChangeLog&apos;, u&apos;Source/WebCore/rendering/RenderBlock.cpp&apos;, u&apos;Source/WebCore/rendering/RenderBlock.h&apos;, u&apos;Source/WebCore/rendering/RenderBlockFlow.cpp&apos;, u&apos;Source/WebCore/rendering/RenderBlockFlow.h&apos;, u&apos;Source/WebCore/rendering/RenderBlockLineLayout.cpp&apos;, u&apos;Source/WebCore/rendering/svg/RenderSVGText.cpp&apos;]&quot; exit_code: 1
Source/WebCore/rendering/RenderBlockFlow.cpp:94:  Should have only a single space after a punctuation in a comment.  [whitespace/comments] [5]
Source/WebCore/rendering/RenderBlockFlow.cpp:197:  One space before end of line comments  [whitespace/comments] [5]
Source/WebCore/rendering/RenderBlockFlow.cpp:197:  Should have only a single space after a punctuation in a comment.  [whitespace/comments] [5]
Source/WebCore/rendering/RenderBlockFlow.cpp:229:  Should have only a single space after a punctuation in a comment.  [whitespace/comments] [5]
Source/WebCore/rendering/RenderBlockFlow.cpp:233:  Should have only a single space after a punctuation in a comment.  [whitespace/comments] [5]
Source/WebCore/rendering/RenderBlockFlow.cpp:236:  Should have only a single space after a punctuation in a comment.  [whitespace/comments] [5]
Source/WebCore/rendering/RenderBlockFlow.cpp:320:  Should have only a single space after a punctuation in a comment.  [whitespace/comments] [5]
Source/WebCore/rendering/RenderBlockFlow.cpp:325:  Should have only a single space after a punctuation in a comment.  [whitespace/comments] [5]
Source/WebCore/rendering/RenderBlockFlow.cpp:374:  Should have only a single space after a punctuation in a comment.  [whitespace/comments] [5]
Source/WebCore/rendering/RenderBlockFlow.cpp:378:  Should have only a single space after a punctuation in a comment.  [whitespace/comments] [5]
Total errors found: 10 in 7 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>926839</commentid>
    <comment_count>3</comment_count>
      <attachid>211065</attachid>
    <who name="Dave Hyatt">hyatt</who>
    <bug_when>2013-09-09 12:22:11 -0700</bug_when>
    <thetext>Created attachment 211065
Patch to pass the style queue</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>926841</commentid>
    <comment_count>4</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2013-09-09 12:23:29 -0700</bug_when>
    <thetext>Attachment 211065 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;Source/WebCore/ChangeLog&apos;, u&apos;Source/WebCore/rendering/RenderBlock.cpp&apos;, u&apos;Source/WebCore/rendering/RenderBlock.h&apos;, u&apos;Source/WebCore/rendering/RenderBlockFlow.cpp&apos;, u&apos;Source/WebCore/rendering/RenderBlockFlow.h&apos;, u&apos;Source/WebCore/rendering/RenderBlockLineLayout.cpp&apos;, u&apos;Source/WebCore/rendering/svg/RenderSVGText.cpp&apos;]&quot; exit_code: 1
Source/WebCore/rendering/RenderBlockFlow.cpp:371:  Should have only a single space after a punctuation in a comment.  [whitespace/comments] [5]
Total errors found: 1 in 7 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>926853</commentid>
    <comment_count>5</comment_count>
      <attachid>211067</attachid>
    <who name="Dave Hyatt">hyatt</who>
    <bug_when>2013-09-09 12:50:50 -0700</bug_when>
    <thetext>Created attachment 211067
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>926854</commentid>
    <comment_count>6</comment_count>
      <attachid>211068</attachid>
    <who name="Dave Hyatt">hyatt</who>
    <bug_when>2013-09-09 12:51:36 -0700</bug_when>
    <thetext>Created attachment 211068
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>926857</commentid>
    <comment_count>7</comment_count>
      <attachid>211068</attachid>
    <who name="Early Warning System Bot">webkit-ews</who>
    <bug_when>2013-09-09 12:58:12 -0700</bug_when>
    <thetext>Comment on attachment 211068
Patch

Attachment 211068 did not pass qt-ews (qt):
Output: http://webkit-queues.appspot.com/results/1719954</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>926858</commentid>
    <comment_count>8</comment_count>
      <attachid>211069</attachid>
    <who name="Dave Hyatt">hyatt</who>
    <bug_when>2013-09-09 12:58:54 -0700</bug_when>
    <thetext>Created attachment 211069
Patch to account for Antti&apos;s patch landing. :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>926859</commentid>
    <comment_count>9</comment_count>
      <attachid>211069</attachid>
    <who name="Dean Jackson">dino</who>
    <bug_when>2013-09-09 13:00:23 -0700</bug_when>
    <thetext>Comment on attachment 211069
Patch to account for Antti&apos;s patch landing. :)

Needs more &lt;ruby&gt;!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>926862</commentid>
    <comment_count>10</comment_count>
      <attachid>211072</attachid>
    <who name="Dave Hyatt">hyatt</who>
    <bug_when>2013-09-09 13:04:02 -0700</bug_when>
    <thetext>Created attachment 211072
Make release builds work by removing some inlining for now.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>926867</commentid>
    <comment_count>11</comment_count>
    <who name="Dave Hyatt">hyatt</who>
    <bug_when>2013-09-09 13:22:24 -0700</bug_when>
    <thetext>Fix landed in r155377.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>211061</attachid>
            <date>2013-09-09 12:09:32 -0700</date>
            <delta_ts>2013-09-09 12:22:11 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>patch.txt</filename>
            <type>text/plain</type>
            <size>44885</size>
            <attacher name="Dave Hyatt">hyatt</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDE1NTM2OCkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDMxIEBACisyMDEzLTA5LTA5ICBEYXZpZCBI
eWF0dCAgPGh5YXR0QGFwcGxlLmNvbT4KKworICAgICAgICBNb3ZlIGxheW91dEJsb2NrIGFuZCBs
YXlvdXRCbG9ja0NoaWxkcmVuIGludG8gUmVuZGVyQmxvY2tGbG93CisgICAgICAgIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMjEwMzYKKworICAgICAgICBSZXZpZXdl
ZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBNb3ZlIGxheW91dEJsb2NrIGludG8gUmVu
ZGVyQmxvY2tGbG93IGFuZCBtYWtlIHRoZSBiYXNlIGNsYXNzIHZlcnNpb24gb2YKKyAgICAgICAg
dGhlIG1ldGhvZCBBU1NFUlRfTk9UX1JFQUNIRUQuIEJlZ2luIHRoZSBwcm9jZXNzIG9mIG1vdmlu
ZyBibG9jayBsYXlvdXQgCisgICAgICAgIGludG8gUmVuZGVyQmxvY2tGbG93IGJ5IHB1dHRpbmcg
bGF5b3V0QmxvY2tDaGlsZHJlbiB0aGVyZSBhcyB3ZWxsLgorICAgICAgICAKKyAgICAgICAgVGhp
cyBwYXRjaCBhbHNvIHB1dHMgY2xlYXJGbG9hdHMgaW50byBSZW5kZXJCbG9ja0Zsb3cgYW5kIGp1
c3QgZGl0Y2hlcyB0aGUKKyAgICAgICAgU1ZHLXNwZWNpZmljIGZvcmNlTGF5b3V0SW5saW5lQ2hp
bGRyZW4gYnkgbGV0dGluZyBSZW5kZXJTVkdUZXh0IGRvIHdoYXQgaXQKKyAgICAgICAgbmVlZWRz
IGluIGl0cyBvd24gZmlsZS4KKworICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJCbG9jay5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCbG9jazo6bGF5b3V0QmxvY2spOgorICAgICAgICAq
IHJlbmRlcmluZy9SZW5kZXJCbG9jay5oOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJCbG9j
a0Zsb3cuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQmxvY2tGbG93OjpjbGVhckZsb2F0
cyk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCbG9ja0Zsb3c6OmxheW91dEJsb2NrKToKKyAg
ICAgICAgKFdlYkNvcmU6OlJlbmRlckJsb2NrRmxvdzo6bGF5b3V0QmxvY2tDaGlsZHJlbik6Cisg
ICAgICAgICogcmVuZGVyaW5nL1JlbmRlckJsb2NrRmxvdy5oOgorICAgICAgICAqIHJlbmRlcmlu
Zy9SZW5kZXJCbG9ja0xpbmVMYXlvdXQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQmxv
Y2tGbG93OjpsYXlvdXRJbmxpbmVDaGlsZHJlbik6CisgICAgICAgICogcmVuZGVyaW5nL3N2Zy9S
ZW5kZXJTVkdUZXh0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclNWR1RleHQ6OmxheW91
dCk6CisKIDIwMTMtMDktMDkgIEJlbSBKb25lcy1CZXkgIDxiam9uZXNiZUBhZG9iZS5jb20+CiAK
ICAgICAgICAgTW92ZSBsb2dpY2FsKExlZnR8UmlnaHQpRmxvYXRPZmZzZXRGb3JMaW5lIG1ldGhv
ZHMgaW50byBGbG9hdGluZ09iamVjdHMKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9S
ZW5kZXJCbG9jay5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1Jl
bmRlckJsb2NrLmNwcAkocmV2aXNpb24gMTU1MzY2KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlckJsb2NrLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTYzMCwxNzIgKzE2MzAsOSBA
QCBib29sIFJlbmRlckJsb2NrOjpyZWxheW91dFRvQXZvaWRXaWRvd3MoCiAgICAgcmV0dXJuIHRy
dWU7CiB9CiAKLXZvaWQgUmVuZGVyQmxvY2s6OmxheW91dEJsb2NrKGJvb2wgcmVsYXlvdXRDaGls
ZHJlbiwgTGF5b3V0VW5pdCBwYWdlTG9naWNhbEhlaWdodCkKK3ZvaWQgUmVuZGVyQmxvY2s6Omxh
eW91dEJsb2NrKGJvb2wsIExheW91dFVuaXQpCiB7Ci0gICAgQVNTRVJUKG5lZWRzTGF5b3V0KCkp
OwotCi0gICAgaWYgKGlzSW5saW5lKCkgJiYgIWlzSW5saW5lQmxvY2tPcklubGluZVRhYmxlKCkp
IC8vIElubGluZSA8Zm9ybT5zIGluc2lkZSB2YXJpb3VzIHRhYmxlIGVsZW1lbnRzIGNhbgotICAg
ICAgICByZXR1cm47ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBjYXVz
ZSB1cyB0byBjb21lIGluIGhlcmUuICBKdXN0IGJhaWwuCi0KLSAgICBpZiAoIXJlbGF5b3V0Q2hp
bGRyZW4gJiYgc2ltcGxpZmllZExheW91dCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBMYXlv
dXRSZXBhaW50ZXIgcmVwYWludGVyKCp0aGlzLCBjaGVja0ZvclJlcGFpbnREdXJpbmdMYXlvdXQo
KSk7Ci0KLSAgICBpZiAodXBkYXRlTG9naWNhbFdpZHRoQW5kQ29sdW1uV2lkdGgoKSkKLSAgICAg
ICAgcmVsYXlvdXRDaGlsZHJlbiA9IHRydWU7Ci0KLSAgICBjbGVhckZsb2F0cygpOwotCi0gICAg
TGF5b3V0VW5pdCBwcmV2aW91c0hlaWdodCA9IGxvZ2ljYWxIZWlnaHQoKTsKLSAgICAvLyBGSVhN
RTogc2hvdWxkIHRoaXMgc3RhcnQgb3V0IGFzIGJvcmRlckFuZFBhZGRpbmdMb2dpY2FsSGVpZ2h0
KCkgKyBzY3JvbGxiYXJMb2dpY2FsSGVpZ2h0KCksCi0gICAgLy8gZm9yIGNvbnNpc3RlbmN5IHdp
dGggb3RoZXIgcmVuZGVyIGNsYXNzZXM/Ci0gICAgc2V0TG9naWNhbEhlaWdodCgwKTsKLQotICAg
IGJvb2wgcGFnZUxvZ2ljYWxIZWlnaHRDaGFuZ2VkID0gZmFsc2U7Ci0gICAgYm9vbCBoYXNTcGVj
aWZpZWRQYWdlTG9naWNhbEhlaWdodCA9IGZhbHNlOwotICAgIGNoZWNrRm9yUGFnaW5hdGlvbkxv
Z2ljYWxIZWlnaHRDaGFuZ2UocGFnZUxvZ2ljYWxIZWlnaHQsIHBhZ2VMb2dpY2FsSGVpZ2h0Q2hh
bmdlZCwgaGFzU3BlY2lmaWVkUGFnZUxvZ2ljYWxIZWlnaHQpOwotCi0gICAgUmVuZGVyU3R5bGUq
IHN0eWxlVG9Vc2UgPSBzdHlsZSgpOwotICAgIExheW91dFN0YXRlTWFpbnRhaW5lciBzdGF0ZVB1
c2hlcigmdmlldygpLCB0aGlzLCBsb2NhdGlvbk9mZnNldCgpLCBoYXNDb2x1bW5zKCkgfHwgaGFz
VHJhbnNmb3JtKCkgfHwgaGFzUmVmbGVjdGlvbigpIHx8IHN0eWxlVG9Vc2UtPmlzRmxpcHBlZEJs
b2Nrc1dyaXRpbmdNb2RlKCksIHBhZ2VMb2dpY2FsSGVpZ2h0LCBwYWdlTG9naWNhbEhlaWdodENo
YW5nZWQsIGNvbHVtbkluZm8oKSk7Ci0KLSAgICAvLyBSZWdpb25zIGNoYW5naW5nIHdpZHRocyBj
YW4gZm9yY2UgdXMgdG8gcmVsYXlvdXQgb3VyIGNoaWxkcmVuLgotICAgIFJlbmRlckZsb3dUaHJl
YWQqIGZsb3dUaHJlYWQgPSBmbG93VGhyZWFkQ29udGFpbmluZ0Jsb2NrKCk7Ci0gICAgaWYgKGxv
Z2ljYWxXaWR0aENoYW5nZWRJblJlZ2lvbnMoZmxvd1RocmVhZCkpCi0gICAgICAgIHJlbGF5b3V0
Q2hpbGRyZW4gPSB0cnVlOwotICAgIGlmICh1cGRhdGVTaGFwZXNCZWZvcmVCbG9ja0xheW91dCgp
KQotICAgICAgICByZWxheW91dENoaWxkcmVuID0gdHJ1ZTsKLQotICAgIC8vIFdlIHVzZSBmb3Vy
IHZhbHVlcywgbWF4VG9wUG9zLCBtYXhUb3BOZWcsIG1heEJvdHRvbVBvcywgYW5kIG1heEJvdHRv
bU5lZywgdG8gdHJhY2sKLSAgICAvLyBvdXIgY3VycmVudCBtYXhpbWFsIHBvc2l0aXZlIGFuZCBu
ZWdhdGl2ZSBtYXJnaW5zLiAgVGhlc2UgdmFsdWVzIGFyZSB1c2VkIHdoZW4gd2UKLSAgICAvLyBh
cmUgY29sbGFwc2VkIHdpdGggYWRqYWNlbnQgYmxvY2tzLCBzbyBmb3IgZXhhbXBsZSwgaWYgeW91
IGhhdmUgYmxvY2sgQSBhbmQgQgotICAgIC8vIGNvbGxhcHNpbmcgdG9nZXRoZXIsIHRoZW4geW91
J2QgdGFrZSB0aGUgbWF4aW1hbCBwb3NpdGl2ZSBtYXJnaW4gZnJvbSBib3RoIEEgYW5kIEIKLSAg
ICAvLyBhbmQgc3VidHJhY3QgaXQgZnJvbSB0aGUgbWF4aW1hbCBuZWdhdGl2ZSBtYXJnaW4gZnJv
bSBib3RoIEEgYW5kIEIgdG8gZ2V0IHRoZQotICAgIC8vIHRydWUgY29sbGFwc2VkIG1hcmdpbi4g
IFRoaXMgYWxnb3JpdGhtIGlzIHJlY3Vyc2l2ZSwgc28gd2hlbiB3ZSBmaW5pc2ggbGF5b3V0KCkK
LSAgICAvLyBvdXIgYmxvY2sga25vd3MgaXRzIGN1cnJlbnQgbWF4aW1hbCBwb3NpdGl2ZS9uZWdh
dGl2ZSB2YWx1ZXMuCi0gICAgLy8KLSAgICAvLyBTdGFydCBvdXQgYnkgc2V0dGluZyBvdXIgbWFy
Z2luIHZhbHVlcyB0byBvdXIgY3VycmVudCBtYXJnaW5zLiAgVGFibGUgY2VsbHMgaGF2ZQotICAg
IC8vIG5vIG1hcmdpbnMsIHNvIHdlIGRvbid0IGZpbGwgaW4gdGhlIHZhbHVlcyBmb3IgdGFibGUg
Y2VsbHMuCi0gICAgYm9vbCBpc0NlbGwgPSBpc1RhYmxlQ2VsbCgpOwotICAgIGlmICghaXNDZWxs
KSB7Ci0gICAgICAgIGluaXRNYXhNYXJnaW5WYWx1ZXMoKTsKLSAgICAgICAgCi0gICAgICAgIHNl
dEhhc01hcmdpbkJlZm9yZVF1aXJrKHN0eWxlVG9Vc2UtPmhhc01hcmdpbkJlZm9yZVF1aXJrKCkp
OwotICAgICAgICBzZXRIYXNNYXJnaW5BZnRlclF1aXJrKHN0eWxlVG9Vc2UtPmhhc01hcmdpbkFm
dGVyUXVpcmsoKSk7Ci0gICAgICAgIHNldFBhZ2luYXRpb25TdHJ1dCgwKTsKLSAgICB9Ci0KLSAg
ICBMYXlvdXRVbml0IHJlcGFpbnRMb2dpY2FsVG9wID0gMDsKLSAgICBMYXlvdXRVbml0IHJlcGFp
bnRMb2dpY2FsQm90dG9tID0gMDsKLSAgICBMYXlvdXRVbml0IG1heEZsb2F0TG9naWNhbEJvdHRv
bSA9IDA7Ci0gICAgaWYgKCFmaXJzdENoaWxkKCkgJiYgIWlzQW5vbnltb3VzQmxvY2soKSkKLSAg
ICAgICAgc2V0Q2hpbGRyZW5JbmxpbmUodHJ1ZSk7Ci0gICAgaWYgKGNoaWxkcmVuSW5saW5lKCkp
Ci0gICAgICAgIGxheW91dElubGluZUNoaWxkcmVuKHJlbGF5b3V0Q2hpbGRyZW4sIHJlcGFpbnRM
b2dpY2FsVG9wLCByZXBhaW50TG9naWNhbEJvdHRvbSk7Ci0gICAgZWxzZQotICAgICAgICBsYXlv
dXRCbG9ja0NoaWxkcmVuKHJlbGF5b3V0Q2hpbGRyZW4sIG1heEZsb2F0TG9naWNhbEJvdHRvbSk7
Ci0KLSAgICAvLyBFeHBhbmQgb3VyIGludHJpbnNpYyBoZWlnaHQgdG8gZW5jb21wYXNzIGZsb2F0
cy4KLSAgICBMYXlvdXRVbml0IHRvQWRkID0gYm9yZGVyQW5kUGFkZGluZ0FmdGVyKCkgKyBzY3Jv
bGxiYXJMb2dpY2FsSGVpZ2h0KCk7Ci0gICAgaWYgKGxvd2VzdEZsb2F0TG9naWNhbEJvdHRvbSgp
ID4gKGxvZ2ljYWxIZWlnaHQoKSAtIHRvQWRkKSAmJiBleHBhbmRzVG9FbmNsb3NlT3Zlcmhhbmdp
bmdGbG9hdHMoKSkKLSAgICAgICAgc2V0TG9naWNhbEhlaWdodChsb3dlc3RGbG9hdExvZ2ljYWxC
b3R0b20oKSArIHRvQWRkKTsKLSAgICAKLSAgICBpZiAocmVsYXlvdXRGb3JQYWdpbmF0aW9uKGhh
c1NwZWNpZmllZFBhZ2VMb2dpY2FsSGVpZ2h0LCBwYWdlTG9naWNhbEhlaWdodCwgc3RhdGVQdXNo
ZXIpIHx8IHJlbGF5b3V0VG9Bdm9pZFdpZG93cyhzdGF0ZVB1c2hlcikpIHsKLSAgICAgICAgQVNT
RVJUKCFzaG91bGRCcmVha0F0TGluZVRvQXZvaWRXaWRvdygpKTsKLSAgICAgICAgcmV0dXJuOwot
ICAgIH0KLQotICAgIC8vIENhbGN1bGF0ZSBvdXIgbmV3IGhlaWdodC4KLSAgICBMYXlvdXRVbml0
IG9sZEhlaWdodCA9IGxvZ2ljYWxIZWlnaHQoKTsKLSAgICBMYXlvdXRVbml0IG9sZENsaWVudEFm
dGVyRWRnZSA9IGNsaWVudExvZ2ljYWxCb3R0b20oKTsKLQotICAgIC8vIEJlZm9yZSB1cGRhdGlu
ZyB0aGUgZmluYWwgc2l6ZSBvZiB0aGUgZmxvdyB0aHJlYWQgbWFrZSBzdXJlIGEgZm9yY2VkIGJy
ZWFrIGlzIGFwcGxpZWQgYWZ0ZXIgdGhlIGNvbnRlbnQuCi0gICAgLy8gVGhpcyBlbnN1cmVzIHRo
ZSBzaXplIGluZm9ybWF0aW9uIGlzIGNvcnJlY3RseSBjb21wdXRlZCBmb3IgdGhlIGxhc3QgYXV0
by1oZWlnaHQgcmVnaW9uIHJlY2VpdmluZyBjb250ZW50LgotICAgIGlmIChpc1JlbmRlckZsb3dU
aHJlYWQoKSkKLSAgICAgICAgdG9SZW5kZXJGbG93VGhyZWFkKHRoaXMpLT5hcHBseUJyZWFrQWZ0
ZXJDb250ZW50KG9sZENsaWVudEFmdGVyRWRnZSk7Ci0KLSAgICB1cGRhdGVMb2dpY2FsSGVpZ2h0
KCk7Ci0gICAgTGF5b3V0VW5pdCBuZXdIZWlnaHQgPSBsb2dpY2FsSGVpZ2h0KCk7Ci0gICAgaWYg
KG9sZEhlaWdodCAhPSBuZXdIZWlnaHQpIHsKLSAgICAgICAgaWYgKG9sZEhlaWdodCA+IG5ld0hl
aWdodCAmJiBtYXhGbG9hdExvZ2ljYWxCb3R0b20gPiBuZXdIZWlnaHQgJiYgIWNoaWxkcmVuSW5s
aW5lKCkpIHsKLSAgICAgICAgICAgIC8vIE9uZSBvZiBvdXIgY2hpbGRyZW4ncyBmbG9hdHMgbWF5
IGhhdmUgYmVjb21lIGFuIG92ZXJoYW5naW5nIGZsb2F0IGZvciB1cy4gV2UgbmVlZCB0byBsb29r
IGZvciBpdC4KLSAgICAgICAgICAgIGZvciAoUmVuZGVyT2JqZWN0KiBjaGlsZCA9IGZpcnN0Q2hp
bGQoKTsgY2hpbGQ7IGNoaWxkID0gY2hpbGQtPm5leHRTaWJsaW5nKCkpIHsKLSAgICAgICAgICAg
ICAgICBpZiAoY2hpbGQtPmlzUmVuZGVyQmxvY2tGbG93KCkgJiYgIWNoaWxkLT5pc0Zsb2F0aW5n
T3JPdXRPZkZsb3dQb3NpdGlvbmVkKCkpIHsKLSAgICAgICAgICAgICAgICAgICAgUmVuZGVyQmxv
Y2sqIGJsb2NrID0gdG9SZW5kZXJCbG9jayhjaGlsZCk7Ci0gICAgICAgICAgICAgICAgICAgIGlm
IChibG9jay0+bG93ZXN0RmxvYXRMb2dpY2FsQm90dG9tKCkgKyBibG9jay0+bG9naWNhbFRvcCgp
ID4gbmV3SGVpZ2h0KQotICAgICAgICAgICAgICAgICAgICAgICAgYWRkT3ZlcmhhbmdpbmdGbG9h
dHMoYmxvY2ssIGZhbHNlKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAg
ICAgIH0KLSAgICB9Ci0KLSAgICBib29sIGhlaWdodENoYW5nZWQgPSAocHJldmlvdXNIZWlnaHQg
IT0gbmV3SGVpZ2h0KTsKLSAgICBpZiAoaGVpZ2h0Q2hhbmdlZCkKLSAgICAgICAgcmVsYXlvdXRD
aGlsZHJlbiA9IHRydWU7Ci0KLSAgICBsYXlvdXRQb3NpdGlvbmVkT2JqZWN0cyhyZWxheW91dENo
aWxkcmVuIHx8IGlzUm9vdCgpKTsKLQotICAgIHVwZGF0ZVNoYXBlc0FmdGVyQmxvY2tMYXlvdXQo
aGVpZ2h0Q2hhbmdlZCk7Ci0KLSAgICAvLyBBZGQgb3ZlcmZsb3cgZnJvbSBjaGlsZHJlbiAodW5s
ZXNzIHdlJ3JlIG11bHRpLWNvbHVtbiwgc2luY2UgaW4gdGhhdCBjYXNlIGFsbCBvdXIgY2hpbGQg
b3ZlcmZsb3cgaXMgY2xpcHBlZCBhbnl3YXkpLgotICAgIGNvbXB1dGVPdmVyZmxvdyhvbGRDbGll
bnRBZnRlckVkZ2UpOwotICAgIAotICAgIHN0YXRlUHVzaGVyLnBvcCgpOwotCi0gICAgZml0Qm9y
ZGVyVG9MaW5lc0lmTmVlZGVkKCk7Ci0KLSAgICBpZiAodmlldygpLmxheW91dFN0YXRlKCktPm1f
cGFnZUxvZ2ljYWxIZWlnaHQpCi0gICAgICAgIHNldFBhZ2VMb2dpY2FsT2Zmc2V0KHZpZXcoKS5s
YXlvdXRTdGF0ZSgpLT5wYWdlTG9naWNhbE9mZnNldCh0aGlzLCBsb2dpY2FsVG9wKCkpKTsKLQot
ICAgIHVwZGF0ZUxheWVyVHJhbnNmb3JtKCk7Ci0KLSAgICAvLyBVcGRhdGUgb3VyIHNjcm9sbCBp
bmZvcm1hdGlvbiBpZiB3ZSdyZSBvdmVyZmxvdzphdXRvL3Njcm9sbC9oaWRkZW4gbm93IHRoYXQg
d2Uga25vdyBpZgotICAgIC8vIHdlIG92ZXJmbG93IG9yIG5vdC4KLSAgICB1cGRhdGVTY3JvbGxJ
bmZvQWZ0ZXJMYXlvdXQoKTsKLQotICAgIC8vIEZJWE1FOiBUaGlzIHJlcGFpbnQgbG9naWMgc2hv
dWxkIGJlIG1vdmVkIGludG8gYSBzZXBhcmF0ZSBoZWxwZXIgZnVuY3Rpb24hCi0gICAgLy8gUmVw
YWludCB3aXRoIG91ciBuZXcgYm91bmRzIGlmIHRoZXkgYXJlIGRpZmZlcmVudCBmcm9tIG91ciBv
bGQgYm91bmRzLgotICAgIGJvb2wgZGlkRnVsbFJlcGFpbnQgPSByZXBhaW50ZXIucmVwYWludEFm
dGVyTGF5b3V0KCk7Ci0gICAgaWYgKCFkaWRGdWxsUmVwYWludCAmJiByZXBhaW50TG9naWNhbFRv
cCAhPSByZXBhaW50TG9naWNhbEJvdHRvbSAmJiAoc3R5bGVUb1VzZS0+dmlzaWJpbGl0eSgpID09
IFZJU0lCTEUgfHwgZW5jbG9zaW5nTGF5ZXIoKS0+aGFzVmlzaWJsZUNvbnRlbnQoKSkpIHsKLSAg
ICAgICAgLy8gRklYTUU6IFdlIGNvdWxkIHRpZ2h0ZW4gdXAgdGhlIGxlZnQgYW5kIHJpZ2h0IGlu
dmFsaWRhdGlvbiBwb2ludHMgaWYgd2UgbGV0IGxheW91dElubGluZUNoaWxkcmVuIGZpbGwgdGhl
bSBpbiBiYXNlZCBvZmYgdGhlIHBhcnRpY3VsYXIgbGluZXMKLSAgICAgICAgLy8gaXQgaGFkIHRv
IGxheSBvdXQuICBXZSB3b3VsZG4ndCBuZWVkIHRoZSBoYXNPdmVyZmxvd0NsaXAoKSBoYWNrIGlu
IHRoYXQgY2FzZSBlaXRoZXIuCi0gICAgICAgIExheW91dFVuaXQgcmVwYWludExvZ2ljYWxMZWZ0
ID0gbG9naWNhbExlZnRWaXN1YWxPdmVyZmxvdygpOwotICAgICAgICBMYXlvdXRVbml0IHJlcGFp
bnRMb2dpY2FsUmlnaHQgPSBsb2dpY2FsUmlnaHRWaXN1YWxPdmVyZmxvdygpOwotICAgICAgICBp
ZiAoaGFzT3ZlcmZsb3dDbGlwKCkpIHsKLSAgICAgICAgICAgIC8vIElmIHdlIGhhdmUgY2xpcHBl
ZCBvdmVyZmxvdywgd2Ugc2hvdWxkIHVzZSBsYXlvdXQgb3ZlcmZsb3cgYXMgd2VsbCwgc2luY2Ug
dmlzdWFsIG92ZXJmbG93IGZyb20gbGluZXMgZGlkbid0IHByb3BhZ2F0ZSB0byBvdXIgYmxvY2sn
cyBvdmVyZmxvdy4KLSAgICAgICAgICAgIC8vIE5vdGUgdGhlIG9sZCBjb2RlIGRpZCB0aGlzIGFz
IHdlbGwgYnV0IGV2ZW4gZm9yIG92ZXJmbG93OnZpc2libGUuICBUaGUgYWRkaXRpb24gb2YgaGFz
T3ZlcmZsb3dDbGlwKCkgYXQgbGVhc3QgdGlnaHRlbnMgdXAgdGhlIGhhY2sgYSBiaXQuCi0gICAg
ICAgICAgICAvLyBsYXlvdXRJbmxpbmVDaGlsZHJlbiBzaG91bGQgYmUgcGF0Y2hlZCB0byBjb21w
dXRlIHRoZSBlbnRpcmUgcmVwYWludCByZWN0LgotICAgICAgICAgICAgcmVwYWludExvZ2ljYWxM
ZWZ0ID0gbWluKHJlcGFpbnRMb2dpY2FsTGVmdCwgbG9naWNhbExlZnRMYXlvdXRPdmVyZmxvdygp
KTsKLSAgICAgICAgICAgIHJlcGFpbnRMb2dpY2FsUmlnaHQgPSBtYXgocmVwYWludExvZ2ljYWxS
aWdodCwgbG9naWNhbFJpZ2h0TGF5b3V0T3ZlcmZsb3coKSk7Ci0gICAgICAgIH0KLSAgICAgICAg
Ci0gICAgICAgIExheW91dFJlY3QgcmVwYWludFJlY3Q7Ci0gICAgICAgIGlmIChpc0hvcml6b250
YWxXcml0aW5nTW9kZSgpKQotICAgICAgICAgICAgcmVwYWludFJlY3QgPSBMYXlvdXRSZWN0KHJl
cGFpbnRMb2dpY2FsTGVmdCwgcmVwYWludExvZ2ljYWxUb3AsIHJlcGFpbnRMb2dpY2FsUmlnaHQg
LSByZXBhaW50TG9naWNhbExlZnQsIHJlcGFpbnRMb2dpY2FsQm90dG9tIC0gcmVwYWludExvZ2lj
YWxUb3ApOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICByZXBhaW50UmVjdCA9IExheW91dFJl
Y3QocmVwYWludExvZ2ljYWxUb3AsIHJlcGFpbnRMb2dpY2FsTGVmdCwgcmVwYWludExvZ2ljYWxC
b3R0b20gLSByZXBhaW50TG9naWNhbFRvcCwgcmVwYWludExvZ2ljYWxSaWdodCAtIHJlcGFpbnRM
b2dpY2FsTGVmdCk7Ci0KLSAgICAgICAgLy8gVGhlIHJlcGFpbnQgcmVjdCBtYXkgYmUgc3BsaXQg
YWNyb3NzIGNvbHVtbnMsIGluIHdoaWNoIGNhc2UgYWRqdXN0UmVjdEZvckNvbHVtbnMoKSB3aWxs
IHJldHVybiB0aGUgdW5pb24uCi0gICAgICAgIGFkanVzdFJlY3RGb3JDb2x1bW5zKHJlcGFpbnRS
ZWN0KTsKLQotICAgICAgICByZXBhaW50UmVjdC5pbmZsYXRlKG1heGltYWxPdXRsaW5lU2l6ZShQ
YWludFBoYXNlT3V0bGluZSkpOwotICAgICAgICAKLSAgICAgICAgaWYgKGhhc092ZXJmbG93Q2xp
cCgpKSB7Ci0gICAgICAgICAgICAvLyBBZGp1c3QgcmVwYWludCByZWN0IGZvciBzY3JvbGwgb2Zm
c2V0Ci0gICAgICAgICAgICByZXBhaW50UmVjdC5tb3ZlKC1zY3JvbGxlZENvbnRlbnRPZmZzZXQo
KSk7Ci0KLSAgICAgICAgICAgIC8vIERvbid0IGFsbG93IHRoaXMgcmVjdCB0byBzcGlsbCBvdXQg
b2Ygb3VyIG92ZXJmbG93IGJveC4KLSAgICAgICAgICAgIHJlcGFpbnRSZWN0LmludGVyc2VjdChM
YXlvdXRSZWN0KExheW91dFBvaW50KCksIHNpemUoKSkpOwotICAgICAgICB9Ci0KLSAgICAgICAg
Ly8gTWFrZSBzdXJlIHRoZSByZWN0IGlzIHN0aWxsIG5vbi1lbXB0eSBhZnRlciBpbnRlcnNlY3Rp
bmcgZm9yIG92ZXJmbG93IGFib3ZlCi0gICAgICAgIGlmICghcmVwYWludFJlY3QuaXNFbXB0eSgp
KSB7Ci0gICAgICAgICAgICByZXBhaW50UmVjdGFuZ2xlKHJlcGFpbnRSZWN0KTsgLy8gV2UgbmVl
ZCB0byBkbyBhIHBhcnRpYWwgcmVwYWludCBvZiBvdXIgY29udGVudC4KLSAgICAgICAgICAgIGlm
IChoYXNSZWZsZWN0aW9uKCkpCi0gICAgICAgICAgICAgICAgcmVwYWludFJlY3RhbmdsZShyZWZs
ZWN0ZWRSZWN0KHJlcGFpbnRSZWN0KSk7Ci0gICAgICAgIH0KLSAgICB9Ci0KKyAgICBBU1NFUlRf
Tk9UX1JFQUNIRUQoKTsKICAgICBzZXROZWVkc0xheW91dChmYWxzZSk7CiB9CiAKQEAgLTI1OTgs
NjEgKzI0MzUsNiBAQCB2b2lkIFJlbmRlckJsb2NrOjpkaXJ0eUZvckxheW91dEZyb21QZXJjCiAg
ICAgfQogfQogCi12b2lkIFJlbmRlckJsb2NrOjpsYXlvdXRCbG9ja0NoaWxkcmVuKGJvb2wgcmVs
YXlvdXRDaGlsZHJlbiwgTGF5b3V0VW5pdCYgbWF4RmxvYXRMb2dpY2FsQm90dG9tKQotewotICAg
IGRpcnR5Rm9yTGF5b3V0RnJvbVBlcmNlbnRhZ2VIZWlnaHREZXNjZW5kYW50cygpOwotCi0gICAg
TGF5b3V0VW5pdCBiZWZvcmVFZGdlID0gYm9yZGVyQW5kUGFkZGluZ0JlZm9yZSgpOwotICAgIExh
eW91dFVuaXQgYWZ0ZXJFZGdlID0gYm9yZGVyQW5kUGFkZGluZ0FmdGVyKCkgKyBzY3JvbGxiYXJM
b2dpY2FsSGVpZ2h0KCk7Ci0KLSAgICBzZXRMb2dpY2FsSGVpZ2h0KGJlZm9yZUVkZ2UpOwotICAg
IAotICAgIC8vIExheSBvdXQgb3VyIGh5cG90aGV0aWNhbCBncmlkIGxpbmUgYXMgdGhvdWdoIGl0
IG9jY3VycyBhdCB0aGUgdG9wIG9mIHRoZSBibG9jay4KLSAgICBpZiAodmlldygpLmxheW91dFN0
YXRlKCktPmxpbmVHcmlkKCkgPT0gdGhpcykKLSAgICAgICAgbGF5b3V0TGluZUdyaWRCb3goKTsK
LQotICAgIC8vIFRoZSBtYXJnaW4gc3RydWN0IGNhY2hlcyBhbGwgb3VyIGN1cnJlbnQgbWFyZ2lu
IGNvbGxhcHNpbmcgc3RhdGUuICBUaGUgY29tcGFjdCBzdHJ1Y3QgY2FjaGVzIHN0YXRlIHdoZW4g
d2UgZW5jb3VudGVyIGNvbXBhY3RzLAotICAgIE1hcmdpbkluZm8gbWFyZ2luSW5mbyh0aGlzLCBi
ZWZvcmVFZGdlLCBhZnRlckVkZ2UpOwotCi0gICAgLy8gRmllbGRzZXRzIG5lZWQgdG8gZmluZCB0
aGVpciBsZWdlbmQgYW5kIHBvc2l0aW9uIGl0IGluc2lkZSB0aGUgYm9yZGVyIG9mIHRoZSBvYmpl
Y3QuCi0gICAgLy8gVGhlIGxlZ2VuZCB0aGVuIGdldHMgc2tpcHBlZCBkdXJpbmcgbm9ybWFsIGxh
eW91dC4gIFRoZSBzYW1lIGlzIHRydWUgZm9yIHJ1YnkgdGV4dC4KLSAgICAvLyBJdCBkb2Vzbid0
IGdldCBpbmNsdWRlZCBpbiB0aGUgbm9ybWFsIGxheW91dCBwcm9jZXNzIGJ1dCBpcyBpbnN0ZWFk
IHNraXBwZWQuCi0gICAgUmVuZGVyT2JqZWN0KiBjaGlsZFRvRXhjbHVkZSA9IGxheW91dFNwZWNp
YWxFeGNsdWRlZENoaWxkKHJlbGF5b3V0Q2hpbGRyZW4pOwotCi0gICAgTGF5b3V0VW5pdCBwcmV2
aW91c0Zsb2F0TG9naWNhbEJvdHRvbSA9IDA7Ci0gICAgbWF4RmxvYXRMb2dpY2FsQm90dG9tID0g
MDsKLQotICAgIFJlbmRlckJveCogbmV4dCA9IGZpcnN0Q2hpbGRCb3goKTsKLQotICAgIHdoaWxl
IChuZXh0KSB7Ci0gICAgICAgIFJlbmRlckJveCogY2hpbGQgPSBuZXh0OwotICAgICAgICBuZXh0
ID0gY2hpbGQtPm5leHRTaWJsaW5nQm94KCk7Ci0KLSAgICAgICAgaWYgKGNoaWxkVG9FeGNsdWRl
ID09IGNoaWxkKQotICAgICAgICAgICAgY29udGludWU7IC8vIFNraXAgdGhpcyBjaGlsZCwgc2lu
Y2UgaXQgd2lsbCBiZSBwb3NpdGlvbmVkIGJ5IHRoZSBzcGVjaWFsaXplZCBzdWJjbGFzcyAoZmll
bGRzZXRzIGFuZCBydWJ5IHJ1bnMpLgotCi0gICAgICAgIHVwZGF0ZUJsb2NrQ2hpbGREaXJ0eUJp
dHNCZWZvcmVMYXlvdXQocmVsYXlvdXRDaGlsZHJlbiwgY2hpbGQpOwotCi0gICAgICAgIGlmIChj
aGlsZC0+aXNPdXRPZkZsb3dQb3NpdGlvbmVkKCkpIHsKLSAgICAgICAgICAgIGNoaWxkLT5jb250
YWluaW5nQmxvY2soKS0+aW5zZXJ0UG9zaXRpb25lZE9iamVjdChjaGlsZCk7Ci0gICAgICAgICAg
ICBhZGp1c3RQb3NpdGlvbmVkQmxvY2soY2hpbGQsIG1hcmdpbkluZm8pOwotICAgICAgICAgICAg
Y29udGludWU7Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKGNoaWxkLT5pc0Zsb2F0aW5nKCkpIHsK
LSAgICAgICAgICAgIGluc2VydEZsb2F0aW5nT2JqZWN0KGNoaWxkKTsKLSAgICAgICAgICAgIGFk
anVzdEZsb2F0aW5nQmxvY2sobWFyZ2luSW5mbyk7Ci0gICAgICAgICAgICBjb250aW51ZTsKLSAg
ICAgICAgfQotCi0gICAgICAgIC8vIExheSBvdXQgdGhlIGNoaWxkLgotICAgICAgICBsYXlvdXRC
bG9ja0NoaWxkKGNoaWxkLCBtYXJnaW5JbmZvLCBwcmV2aW91c0Zsb2F0TG9naWNhbEJvdHRvbSwg
bWF4RmxvYXRMb2dpY2FsQm90dG9tKTsKLSAgICB9Ci0gICAgCi0gICAgLy8gTm93IGRvIHRoZSBo
YW5kbGluZyBvZiB0aGUgYm90dG9tIG9mIHRoZSBibG9jaywgYWRkaW5nIGluIG91ciBib3R0b20g
Ym9yZGVyL3BhZGRpbmcgYW5kCi0gICAgLy8gZGV0ZXJtaW5pbmcgdGhlIGNvcnJlY3QgY29sbGFw
c2VkIGJvdHRvbSBtYXJnaW4gaW5mb3JtYXRpb24uCi0gICAgaGFuZGxlQWZ0ZXJTaWRlT2ZCbG9j
ayhiZWZvcmVFZGdlLCBhZnRlckVkZ2UsIG1hcmdpbkluZm8pOwotfQotCiB2b2lkIFJlbmRlckJs
b2NrOjpsYXlvdXRCbG9ja0NoaWxkKFJlbmRlckJveCogY2hpbGQsIE1hcmdpbkluZm8mIG1hcmdp
bkluZm8sIExheW91dFVuaXQmIHByZXZpb3VzRmxvYXRMb2dpY2FsQm90dG9tLCBMYXlvdXRVbml0
JiBtYXhGbG9hdExvZ2ljYWxCb3R0b20pCiB7CiAgICAgTGF5b3V0VW5pdCBvbGRQb3NNYXJnaW5C
ZWZvcmUgPSBtYXhQb3NpdGl2ZU1hcmdpbkJlZm9yZSgpOwpAQCAtNDc0MywxNTMgKzQ1MjUsNiBA
QCB2b2lkIFJlbmRlckJsb2NrOjptYXJrTGluZXNEaXJ0eUluQmxvY2tSCiAgICAgfQogfQogCi12
b2lkIFJlbmRlckJsb2NrOjpjbGVhckZsb2F0cygpCi17Ci0gICAgaWYgKG1fZmxvYXRpbmdPYmpl
Y3RzKQotICAgICAgICBtX2Zsb2F0aW5nT2JqZWN0cy0+c2V0SG9yaXpvbnRhbFdyaXRpbmdNb2Rl
KGlzSG9yaXpvbnRhbFdyaXRpbmdNb2RlKCkpOwotCi0gICAgSGFzaFNldDxSZW5kZXJCb3gqPiBv
bGRJbnRydWRpbmdGbG9hdFNldDsKLSAgICBpZiAoIWNoaWxkcmVuSW5saW5lKCkgJiYgbV9mbG9h
dGluZ09iamVjdHMpIHsKLSAgICAgICAgY29uc3QgRmxvYXRpbmdPYmplY3RTZXQmIGZsb2F0aW5n
T2JqZWN0U2V0ID0gbV9mbG9hdGluZ09iamVjdHMtPnNldCgpOwotICAgICAgICBGbG9hdGluZ09i
amVjdFNldEl0ZXJhdG9yIGVuZCA9IGZsb2F0aW5nT2JqZWN0U2V0LmVuZCgpOwotICAgICAgICBm
b3IgKEZsb2F0aW5nT2JqZWN0U2V0SXRlcmF0b3IgaXQgPSBmbG9hdGluZ09iamVjdFNldC5iZWdp
bigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKLSAgICAgICAgICAgIEZsb2F0aW5nT2JqZWN0KiBmbG9h
dGluZ09iamVjdCA9ICppdDsKLSAgICAgICAgICAgIGlmICghZmxvYXRpbmdPYmplY3QtPmlzRGVz
Y2VuZGFudCgpKQotICAgICAgICAgICAgICAgIG9sZEludHJ1ZGluZ0Zsb2F0U2V0LmFkZChmbG9h
dGluZ09iamVjdC0+cmVuZGVyZXIoKSk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICAvLyBJbmxp
bmUgYmxvY2tzIGFyZSBjb3ZlcmVkIGJ5IHRoZSBpc1JlcGxhY2VkKCkgY2hlY2sgaW4gdGhlIGF2
b2lkRmxvYXRzIG1ldGhvZC4KLSAgICBpZiAoYXZvaWRzRmxvYXRzKCkgfHwgaXNSb290KCkgfHwg
aXNSZW5kZXJWaWV3KCkgfHwgaXNGbG9hdGluZ09yT3V0T2ZGbG93UG9zaXRpb25lZCgpIHx8IGlz
VGFibGVDZWxsKCkpIHsKLSAgICAgICAgaWYgKG1fZmxvYXRpbmdPYmplY3RzKSB7Ci0gICAgICAg
ICAgICBkZWxldGVBbGxWYWx1ZXMobV9mbG9hdGluZ09iamVjdHMtPnNldCgpKTsKLSAgICAgICAg
ICAgIG1fZmxvYXRpbmdPYmplY3RzLT5jbGVhcigpOwotICAgICAgICB9Ci0gICAgICAgIGlmICgh
b2xkSW50cnVkaW5nRmxvYXRTZXQuaXNFbXB0eSgpKQotICAgICAgICAgICAgbWFya0FsbERlc2Nl
bmRhbnRzV2l0aEZsb2F0c0ZvckxheW91dCgpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0g
ICAgdHlwZWRlZiBIYXNoTWFwPFJlbmRlck9iamVjdCosIEZsb2F0aW5nT2JqZWN0Kj4gUmVuZGVy
ZXJUb0Zsb2F0SW5mb01hcDsKLSAgICBSZW5kZXJlclRvRmxvYXRJbmZvTWFwIGZsb2F0TWFwOwot
Ci0gICAgaWYgKG1fZmxvYXRpbmdPYmplY3RzKSB7Ci0gICAgICAgIGNvbnN0IEZsb2F0aW5nT2Jq
ZWN0U2V0JiBmbG9hdGluZ09iamVjdFNldCA9IG1fZmxvYXRpbmdPYmplY3RzLT5zZXQoKTsKLSAg
ICAgICAgaWYgKGNoaWxkcmVuSW5saW5lKCkpIHsKLSAgICAgICAgICAgIEZsb2F0aW5nT2JqZWN0
U2V0SXRlcmF0b3IgZW5kID0gZmxvYXRpbmdPYmplY3RTZXQuZW5kKCk7Ci0gICAgICAgICAgICBm
b3IgKEZsb2F0aW5nT2JqZWN0U2V0SXRlcmF0b3IgaXQgPSBmbG9hdGluZ09iamVjdFNldC5iZWdp
bigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKLSAgICAgICAgICAgICAgICBGbG9hdGluZ09iamVjdCog
ZiA9ICppdDsKLSAgICAgICAgICAgICAgICBmbG9hdE1hcC5hZGQoZi0+cmVuZGVyZXIoKSwgZik7
Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0gZWxzZQotICAgICAgICAgICAgZGVsZXRlQWxsVmFs
dWVzKGZsb2F0aW5nT2JqZWN0U2V0KTsKLSAgICAgICAgbV9mbG9hdGluZ09iamVjdHMtPmNsZWFy
KCk7Ci0gICAgfQotCi0gICAgLy8gV2Ugc2hvdWxkIG5vdCBwcm9jZXNzIGZsb2F0cyBpZiB0aGUg
cGFyZW50IG5vZGUgaXMgbm90IGEgUmVuZGVyQmxvY2suIE90aGVyd2lzZSwgd2Ugd2lsbCBhZGQg
Ci0gICAgLy8gZmxvYXRzIGluIGFuIGludmFsaWQgY29udGV4dC4gVGhpcyB3aWxsIGNhdXNlIGEg
Y3Jhc2ggYXJpc2luZyBmcm9tIGEgYmFkIGNhc3Qgb24gdGhlIHBhcmVudC4KLSAgICAvLyBTZWUg
PHJkYXI6Ly9wcm9ibGVtLzgwNDk3NTM+LCB3aGVyZSBmbG9hdCBwcm9wZXJ0eSBpcyBhcHBsaWVk
IG9uIGEgdGV4dCBub2RlIGluIGEgU1ZHLgotICAgIGlmICghcGFyZW50KCkgfHwgIXBhcmVudCgp
LT5pc1JlbmRlckJsb2NrKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIC8vIEF0dGVtcHQgdG8g
bG9jYXRlIGEgcHJldmlvdXMgc2libGluZyB3aXRoIG92ZXJoYW5naW5nIGZsb2F0cy4gIFdlIHNr
aXAgYW55IGVsZW1lbnRzIHRoYXQgYXJlCi0gICAgLy8gb3V0IG9mIGZsb3cgKGxpa2UgZmxvYXRp
bmcvcG9zaXRpb25lZCBlbGVtZW50cyksIGFuZCB3ZSBhbHNvIHNraXAgb3ZlciBhbnkgb2JqZWN0
cyB0aGF0IG1heSBoYXZlIHNoaWZ0ZWQKLSAgICAvLyB0byBhdm9pZCBmbG9hdHMuCi0gICAgUmVu
ZGVyQmxvY2sqIHBhcmVudEJsb2NrID0gdG9SZW5kZXJCbG9jayhwYXJlbnQoKSk7Ci0gICAgYm9v
bCBwYXJlbnRIYXNGbG9hdHMgPSBmYWxzZTsKLSAgICBSZW5kZXJPYmplY3QqIHByZXYgPSBwcmV2
aW91c1NpYmxpbmcoKTsKLSAgICB3aGlsZSAocHJldiAmJiAocHJldi0+aXNGbG9hdGluZ09yT3V0
T2ZGbG93UG9zaXRpb25lZCgpIHx8ICFwcmV2LT5pc0JveCgpIHx8ICFwcmV2LT5pc1JlbmRlckJs
b2NrKCkgfHwgdG9SZW5kZXJCbG9jayhwcmV2KS0+YXZvaWRzRmxvYXRzKCkpKSB7Ci0gICAgICAg
IGlmIChwcmV2LT5pc0Zsb2F0aW5nKCkpCi0gICAgICAgICAgICBwYXJlbnRIYXNGbG9hdHMgPSB0
cnVlOwotICAgICAgICBwcmV2ID0gcHJldi0+cHJldmlvdXNTaWJsaW5nKCk7Ci0gICAgfQotCi0g
ICAgLy8gRmlyc3QgYWRkIGluIGZsb2F0cyBmcm9tIHRoZSBwYXJlbnQuCi0gICAgTGF5b3V0VW5p
dCBsb2dpY2FsVG9wT2Zmc2V0ID0gbG9naWNhbFRvcCgpOwotICAgIGlmIChwYXJlbnRIYXNGbG9h
dHMpCi0gICAgICAgIGFkZEludHJ1ZGluZ0Zsb2F0cyhwYXJlbnRCbG9jaywgcGFyZW50QmxvY2st
PmxvZ2ljYWxMZWZ0T2Zmc2V0Rm9yQ29udGVudCgpLCBsb2dpY2FsVG9wT2Zmc2V0KTsKLSAgICAK
LSAgICBMYXlvdXRVbml0IGxvZ2ljYWxMZWZ0T2Zmc2V0ID0gMDsKLSAgICBpZiAocHJldikKLSAg
ICAgICAgbG9naWNhbFRvcE9mZnNldCAtPSB0b1JlbmRlckJveChwcmV2KS0+bG9naWNhbFRvcCgp
OwotICAgIGVsc2UgewotICAgICAgICBwcmV2ID0gcGFyZW50QmxvY2s7Ci0gICAgICAgIGxvZ2lj
YWxMZWZ0T2Zmc2V0ICs9IHBhcmVudEJsb2NrLT5sb2dpY2FsTGVmdE9mZnNldEZvckNvbnRlbnQo
KTsKLSAgICB9Ci0KLSAgICAvLyBBZGQgb3ZlcmhhbmdpbmcgZmxvYXRzIGZyb20gdGhlIHByZXZp
b3VzIFJlbmRlckJsb2NrLCBidXQgb25seSBpZiBpdCBoYXMgYSBmbG9hdCB0aGF0IGludHJ1ZGVz
IGludG8gb3VyIHNwYWNlLiAgICAKLSAgICBSZW5kZXJCbG9jayogYmxvY2sgPSB0b1JlbmRlckJs
b2NrKHByZXYpOwotICAgIGlmIChibG9jay0+bV9mbG9hdGluZ09iamVjdHMgJiYgYmxvY2stPmxv
d2VzdEZsb2F0TG9naWNhbEJvdHRvbSgpID4gbG9naWNhbFRvcE9mZnNldCkKLSAgICAgICAgYWRk
SW50cnVkaW5nRmxvYXRzKGJsb2NrLCBsb2dpY2FsTGVmdE9mZnNldCwgbG9naWNhbFRvcE9mZnNl
dCk7Ci0KLSAgICBpZiAoY2hpbGRyZW5JbmxpbmUoKSkgewotICAgICAgICBMYXlvdXRVbml0IGNo
YW5nZUxvZ2ljYWxUb3AgPSBMYXlvdXRVbml0OjptYXgoKTsKLSAgICAgICAgTGF5b3V0VW5pdCBj
aGFuZ2VMb2dpY2FsQm90dG9tID0gTGF5b3V0VW5pdDo6bWluKCk7Ci0gICAgICAgIGlmIChtX2Zs
b2F0aW5nT2JqZWN0cykgewotICAgICAgICAgICAgY29uc3QgRmxvYXRpbmdPYmplY3RTZXQmIGZs
b2F0aW5nT2JqZWN0U2V0ID0gbV9mbG9hdGluZ09iamVjdHMtPnNldCgpOwotICAgICAgICAgICAg
RmxvYXRpbmdPYmplY3RTZXRJdGVyYXRvciBlbmQgPSBmbG9hdGluZ09iamVjdFNldC5lbmQoKTsK
LSAgICAgICAgICAgIGZvciAoRmxvYXRpbmdPYmplY3RTZXRJdGVyYXRvciBpdCA9IGZsb2F0aW5n
T2JqZWN0U2V0LmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkgewotICAgICAgICAgICAgICAgIEZs
b2F0aW5nT2JqZWN0KiBmID0gKml0OwotICAgICAgICAgICAgICAgIEZsb2F0aW5nT2JqZWN0KiBv
bGRGbG9hdGluZ09iamVjdCA9IGZsb2F0TWFwLmdldChmLT5yZW5kZXJlcigpKTsKLSAgICAgICAg
ICAgICAgICBMYXlvdXRVbml0IGxvZ2ljYWxCb3R0b20gPSBmLT5sb2dpY2FsQm90dG9tKGlzSG9y
aXpvbnRhbFdyaXRpbmdNb2RlKCkpOwotICAgICAgICAgICAgICAgIGlmIChvbGRGbG9hdGluZ09i
amVjdCkgewotICAgICAgICAgICAgICAgICAgICBMYXlvdXRVbml0IG9sZExvZ2ljYWxCb3R0b20g
PSBvbGRGbG9hdGluZ09iamVjdC0+bG9naWNhbEJvdHRvbShpc0hvcml6b250YWxXcml0aW5nTW9k
ZSgpKTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKGYtPmxvZ2ljYWxXaWR0aChpc0hvcml6b250
YWxXcml0aW5nTW9kZSgpKSAhPSBvbGRGbG9hdGluZ09iamVjdC0+bG9naWNhbFdpZHRoKGlzSG9y
aXpvbnRhbFdyaXRpbmdNb2RlKCkpIHx8IGYtPmxvZ2ljYWxMZWZ0KGlzSG9yaXpvbnRhbFdyaXRp
bmdNb2RlKCkpICE9IG9sZEZsb2F0aW5nT2JqZWN0LT5sb2dpY2FsTGVmdChpc0hvcml6b250YWxX
cml0aW5nTW9kZSgpKSkgewotICAgICAgICAgICAgICAgICAgICAgICAgY2hhbmdlTG9naWNhbFRv
cCA9IDA7Ci0gICAgICAgICAgICAgICAgICAgICAgICBjaGFuZ2VMb2dpY2FsQm90dG9tID0gbWF4
KGNoYW5nZUxvZ2ljYWxCb3R0b20sIG1heChsb2dpY2FsQm90dG9tLCBvbGRMb2dpY2FsQm90dG9t
KSk7Ci0gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgICAg
ICBpZiAobG9naWNhbEJvdHRvbSAhPSBvbGRMb2dpY2FsQm90dG9tKSB7Ci0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgY2hhbmdlTG9naWNhbFRvcCA9IG1pbihjaGFuZ2VMb2dpY2FsVG9wLCBt
aW4obG9naWNhbEJvdHRvbSwgb2xkTG9naWNhbEJvdHRvbSkpOwotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGNoYW5nZUxvZ2ljYWxCb3R0b20gPSBtYXgoY2hhbmdlTG9naWNhbEJvdHRvbSwg
bWF4KGxvZ2ljYWxCb3R0b20sIG9sZExvZ2ljYWxCb3R0b20pKTsKLSAgICAgICAgICAgICAgICAg
ICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgIExheW91dFVuaXQgbG9naWNhbFRvcCA9
IGYtPmxvZ2ljYWxUb3AoaXNIb3Jpem9udGFsV3JpdGluZ01vZGUoKSk7Ci0gICAgICAgICAgICAg
ICAgICAgICAgICBMYXlvdXRVbml0IG9sZExvZ2ljYWxUb3AgPSBvbGRGbG9hdGluZ09iamVjdC0+
bG9naWNhbFRvcChpc0hvcml6b250YWxXcml0aW5nTW9kZSgpKTsKLSAgICAgICAgICAgICAgICAg
ICAgICAgIGlmIChsb2dpY2FsVG9wICE9IG9sZExvZ2ljYWxUb3ApIHsKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBjaGFuZ2VMb2dpY2FsVG9wID0gbWluKGNoYW5nZUxvZ2ljYWxUb3AsIG1p
bihsb2dpY2FsVG9wLCBvbGRMb2dpY2FsVG9wKSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgY2hhbmdlTG9naWNhbEJvdHRvbSA9IG1heChjaGFuZ2VMb2dpY2FsQm90dG9tLCBtYXgobG9n
aWNhbFRvcCwgb2xkTG9naWNhbFRvcCkpOwotICAgICAgICAgICAgICAgICAgICAgICAgfQotICAg
ICAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICAgICAgZmxvYXRNYXAucmVtb3Zl
KGYtPnJlbmRlcmVyKCkpOwotICAgICAgICAgICAgICAgICAgICBpZiAob2xkRmxvYXRpbmdPYmpl
Y3QtPm9yaWdpbmF0aW5nTGluZSgpICYmICFzZWxmTmVlZHNMYXlvdXQoKSkgewotICAgICAgICAg
ICAgICAgICAgICAgICAgQVNTRVJUKCZvbGRGbG9hdGluZ09iamVjdC0+b3JpZ2luYXRpbmdMaW5l
KCktPnJlbmRlcmVyKCkgPT0gdGhpcyk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBvbGRGbG9h
dGluZ09iamVjdC0+b3JpZ2luYXRpbmdMaW5lKCktPm1hcmtEaXJ0eSgpOwotICAgICAgICAgICAg
ICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIGRlbGV0ZSBvbGRGbG9hdGluZ09iamVjdDsK
LSAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICBjaGFuZ2VMb2dp
Y2FsVG9wID0gMDsKLSAgICAgICAgICAgICAgICAgICAgY2hhbmdlTG9naWNhbEJvdHRvbSA9IG1h
eChjaGFuZ2VMb2dpY2FsQm90dG9tLCBsb2dpY2FsQm90dG9tKTsKLSAgICAgICAgICAgICAgICB9
Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICBSZW5kZXJlclRvRmxvYXRJbmZv
TWFwOjppdGVyYXRvciBlbmQgPSBmbG9hdE1hcC5lbmQoKTsKLSAgICAgICAgZm9yIChSZW5kZXJl
clRvRmxvYXRJbmZvTWFwOjppdGVyYXRvciBpdCA9IGZsb2F0TWFwLmJlZ2luKCk7IGl0ICE9IGVu
ZDsgKytpdCkgewotICAgICAgICAgICAgRmxvYXRpbmdPYmplY3QqIGZsb2F0aW5nT2JqZWN0ID0g
KCppdCkudmFsdWU7Ci0gICAgICAgICAgICBpZiAoIWZsb2F0aW5nT2JqZWN0LT5pc0Rlc2NlbmRh
bnQoKSkgewotICAgICAgICAgICAgICAgIGNoYW5nZUxvZ2ljYWxUb3AgPSAwOwotICAgICAgICAg
ICAgICAgIGNoYW5nZUxvZ2ljYWxCb3R0b20gPSBtYXgoY2hhbmdlTG9naWNhbEJvdHRvbSwgZmxv
YXRpbmdPYmplY3QtPmxvZ2ljYWxCb3R0b20oaXNIb3Jpem9udGFsV3JpdGluZ01vZGUoKSkpOwot
ICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIGRlbGV0ZUFsbFZhbHVlcyhmbG9hdE1h
cCk7Ci0KLSAgICAgICAgbWFya0xpbmVzRGlydHlJbkJsb2NrUmFuZ2UoY2hhbmdlTG9naWNhbFRv
cCwgY2hhbmdlTG9naWNhbEJvdHRvbSk7Ci0gICAgfSBlbHNlIGlmICghb2xkSW50cnVkaW5nRmxv
YXRTZXQuaXNFbXB0eSgpKSB7Ci0gICAgICAgIC8vIElmIHRoZXJlIGFyZSBwcmV2aW91c2x5IGlu
dHJ1ZGluZyBmbG9hdHMgdGhhdCBubyBsb25nZXIgaW50cnVkZSwgdGhlbiBjaGlsZHJlbiB3aXRo
IGZsb2F0cwotICAgICAgICAvLyBzaG91bGQgYWxzbyBnZXQgbGF5b3V0IGJlY2F1c2UgdGhleSBt
aWdodCBuZWVkIHRoZWlyIGZsb2F0aW5nIG9iamVjdCBsaXN0cyBjbGVhcmVkLgotICAgICAgICBp
ZiAobV9mbG9hdGluZ09iamVjdHMtPnNldCgpLnNpemUoKSA8IG9sZEludHJ1ZGluZ0Zsb2F0U2V0
LnNpemUoKSkKLSAgICAgICAgICAgIG1hcmtBbGxEZXNjZW5kYW50c1dpdGhGbG9hdHNGb3JMYXlv
dXQoKTsKLSAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICBjb25zdCBGbG9hdGluZ09iamVjdFNl
dCYgZmxvYXRpbmdPYmplY3RTZXQgPSBtX2Zsb2F0aW5nT2JqZWN0cy0+c2V0KCk7Ci0gICAgICAg
ICAgICBGbG9hdGluZ09iamVjdFNldEl0ZXJhdG9yIGVuZCA9IGZsb2F0aW5nT2JqZWN0U2V0LmVu
ZCgpOwotICAgICAgICAgICAgZm9yIChGbG9hdGluZ09iamVjdFNldEl0ZXJhdG9yIGl0ID0gZmxv
YXRpbmdPYmplY3RTZXQuYmVnaW4oKTsgaXQgIT0gZW5kICYmICFvbGRJbnRydWRpbmdGbG9hdFNl
dC5pc0VtcHR5KCk7ICsraXQpCi0gICAgICAgICAgICAgICAgb2xkSW50cnVkaW5nRmxvYXRTZXQu
cmVtb3ZlKCgqaXQpLT5yZW5kZXJlcigpKTsKLSAgICAgICAgICAgIGlmICghb2xkSW50cnVkaW5n
RmxvYXRTZXQuaXNFbXB0eSgpKQotICAgICAgICAgICAgICAgIG1hcmtBbGxEZXNjZW5kYW50c1dp
dGhGbG9hdHNGb3JMYXlvdXQoKTsKLSAgICAgICAgfQotICAgIH0KLX0KLQogTGF5b3V0VW5pdCBS
ZW5kZXJCbG9jazo6YWRkT3ZlcmhhbmdpbmdGbG9hdHMoUmVuZGVyQmxvY2sqIGNoaWxkLCBib29s
IG1ha2VDaGlsZFBhaW50T3RoZXJGbG9hdHMpCiB7CiAgICAgLy8gUHJldmVudCBmbG9hdHMgZnJv
bSBiZWluZyBhZGRlZCB0byB0aGUgY2FudmFzIGJ5IHRoZSByb290IGVsZW1lbnQsIGUuZy4sIDxo
dG1sPi4KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCbG9jay5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCbG9jay5oCShyZXZpc2lv
biAxNTUzNjUpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2suaAkod29y
a2luZyBjb3B5KQpAQCAtNTg3LDE3ICs1ODcsNiBAQCBwcm90ZWN0ZWQ6CiAKICAgICB2aXJ0dWFs
IHZvaWQgYWRkRm9jdXNSaW5nUmVjdHMoVmVjdG9yPEludFJlY3Q+JiwgY29uc3QgTGF5b3V0UG9p
bnQmIGFkZGl0aW9uYWxPZmZzZXQsIGNvbnN0IFJlbmRlckxheWVyTW9kZWxPYmplY3QqIHBhaW50
Q29udGFpbmVyID0gMCkgT1ZFUlJJREU7CiAKLSNpZiBFTkFCTEUoU1ZHKQotICAgIC8vIE9ubHkg
dXNlZCBieSBSZW5kZXJTVkdUZXh0LCB3aGljaCBleHBsaWNpdGVseSBvdmVycmlkZXMgUmVuZGVy
QmxvY2s6OmxheW91dEJsb2NrKCksIGRvIE5PVCB1c2UgZm9yIGFueXRoaW5nIGVsc2UuCi0gICAg
dm9pZCBmb3JjZUxheW91dElubGluZUNoaWxkcmVuKCkKLSAgICB7Ci0gICAgICAgIExheW91dFVu
aXQgcmVwYWludExvZ2ljYWxUb3AgPSAwOwotICAgICAgICBMYXlvdXRVbml0IHJlcGFpbnRMb2dp
Y2FsQm90dG9tID0gMDsKLSAgICAgICAgY2xlYXJGbG9hdHMoKTsKLSAgICAgICAgbGF5b3V0SW5s
aW5lQ2hpbGRyZW4odHJ1ZSwgcmVwYWludExvZ2ljYWxUb3AsIHJlcGFpbnRMb2dpY2FsQm90dG9t
KTsKLSAgICB9Ci0jZW5kaWYKLQogICAgIGJvb2wgdXBkYXRlU2hhcGVzQmVmb3JlQmxvY2tMYXlv
dXQoKTsKICAgICB2b2lkIHVwZGF0ZVNoYXBlc0FmdGVyQmxvY2tMYXlvdXQoYm9vbCBoZWlnaHRD
aGFuZ2VkID0gZmFsc2UpOwogICAgIHZvaWQgY29tcHV0ZVJlZ2lvblJhbmdlRm9yQm94Q2hpbGQo
Y29uc3QgUmVuZGVyQm94KikgY29uc3Q7CkBAIC02NTEsOCArNjQwLDYgQEAgcHJpdmF0ZToKIAog
ICAgIHZpcnR1YWwgdm9pZCByZXBhaW50T3ZlcmhhbmdpbmdGbG9hdHMoYm9vbCBwYWludEFsbERl
c2NlbmRhbnRzKSBPVkVSUklERSBGSU5BTDsKIAotICAgIHZvaWQgbGF5b3V0QmxvY2tDaGlsZHJl
bihib29sIHJlbGF5b3V0Q2hpbGRyZW4sIExheW91dFVuaXQmIG1heEZsb2F0TG9naWNhbEJvdHRv
bSk7Ci0gICAgdm9pZCBsYXlvdXRJbmxpbmVDaGlsZHJlbihib29sIHJlbGF5b3V0Q2hpbGRyZW4s
IExheW91dFVuaXQmIHJlcGFpbnRMb2dpY2FsVG9wLCBMYXlvdXRVbml0JiByZXBhaW50TG9naWNh
bEJvdHRvbSk7CiAgICAgQmlkaVJ1biogaGFuZGxlVHJhaWxpbmdTcGFjZXMoQmlkaVJ1bkxpc3Q8
QmlkaVJ1bj4mLCBCaWRpQ29udGV4dCopOwogCiAgICAgdm9pZCBpbnNlcnRJbnRvVHJhY2tlZFJl
bmRlcmVyTWFwcyhSZW5kZXJCb3gqIGRlc2NlbmRhbnQsIFRyYWNrZWREZXNjZW5kYW50c01hcCom
LCBUcmFja2VkQ29udGFpbmVyTWFwKiYpOwpAQCAtOTI2LDggKzkxMyw2IEBAIHByaXZhdGU6CiAg
ICAgLy8gUmV0dXJucyB0cnVlIGlmIGFuZCBvbmx5IGlmIGl0IGhhcyBwb3NpdGlvbmVkIGFueSBm
bG9hdHMuCiAgICAgYm9vbCBwb3NpdGlvbk5ld0Zsb2F0cygpOwogCi0gICAgdm9pZCBjbGVhckZs
b2F0cygpOwotCiAgICAgTGF5b3V0VW5pdCBnZXRDbGVhckRlbHRhKFJlbmRlckJveCogY2hpbGQs
IExheW91dFVuaXQgeVBvcyk7CiAKICAgICB2aXJ0dWFsIGJvb2wgYXZvaWRzRmxvYXRzKCkgY29u
c3Q7CkBAIC0xMTkxLDYgKzExNzYsMTAgQEAgcHVibGljOgogICAgIHZpcnR1YWwgTGF5b3V0VW5p
dCBvZmZzZXRGcm9tTG9naWNhbFRvcE9mRmlyc3RQYWdlKCkgY29uc3Q7CiAgICAgUmVuZGVyUmVn
aW9uKiByZWdpb25BdEJsb2NrT2Zmc2V0KExheW91dFVuaXQpIGNvbnN0OwogCisgICAgLy8gRklY
TUU6IFRoaXMgaXMgdGVtcG9yYXJ5IHRvIGFsbG93IHVzIHRvIG1vdmUgY29kZSBmcm9tIFJlbmRl
ckJsb2NrIGludG8gUmVuZGVyQmxvY2tGbG93IHRoYXQgYWNjZXNzZXMgbWVtYmVyIHZhcmlhYmxl
cyB0aGF0IHdlIGhhdmVuJ3QgbW92ZWQgb3V0IG9mCisgICAgLy8gUmVuZGVyQmxvY2sgeWV0Lgor
ICAgIGZyaWVuZCBjbGFzcyBSZW5kZXJCbG9ja0Zsb3c7CisKIHByb3RlY3RlZDoKICAgICBzdHJ1
Y3QgRmxvYXRpbmdPYmplY3RIYXNoRnVuY3Rpb25zIHsKICAgICAgICAgc3RhdGljIHVuc2lnbmVk
IGhhc2goRmxvYXRpbmdPYmplY3QqIGtleSkgeyByZXR1cm4gRGVmYXVsdEhhc2g8UmVuZGVyQm94
Kj46Okhhc2g6Omhhc2goa2V5LT5yZW5kZXJlcigpKTsgfQpJbmRleDogU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL1JlbmRlckJsb2NrRmxvdy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL1JlbmRlckJsb2NrRmxvdy5jcHAJKHJldmlzaW9uIDE1NTM2NSkKKysrIFNv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCbG9ja0Zsb3cuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0yNCw2ICsyNCwxMyBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIlJlbmRl
ckJsb2NrRmxvdy5oIgogCisjaW5jbHVkZSAiTGF5b3V0UmVwYWludGVyLmgiCisjaW5jbHVkZSAi
UmVuZGVyRmxvd1RocmVhZC5oIgorI2luY2x1ZGUgIlJlbmRlckxheWVyLmgiCisjaW5jbHVkZSAi
UmVuZGVyVmlldy5oIgorCit1c2luZyBuYW1lc3BhY2Ugc3RkOworCiBuYW1lc3BhY2UgV2ViQ29y
ZSB7CiAKIFJlbmRlckJsb2NrRmxvdzo6UmVuZGVyQmxvY2tGbG93KENvbnRhaW5lck5vZGUqIG5v
ZGUpCkBAIC0zNSw0ICs0MiwzNzUgQEAgUmVuZGVyQmxvY2tGbG93Ojp+UmVuZGVyQmxvY2tGbG93
KCkKIHsKIH0KIAordm9pZCBSZW5kZXJCbG9ja0Zsb3c6OmNsZWFyRmxvYXRzKCkKK3sKKyAgICBp
ZiAobV9mbG9hdGluZ09iamVjdHMpCisgICAgICAgIG1fZmxvYXRpbmdPYmplY3RzLT5zZXRIb3Jp
em9udGFsV3JpdGluZ01vZGUoaXNIb3Jpem9udGFsV3JpdGluZ01vZGUoKSk7CisKKyAgICBIYXNo
U2V0PFJlbmRlckJveCo+IG9sZEludHJ1ZGluZ0Zsb2F0U2V0OworICAgIGlmICghY2hpbGRyZW5J
bmxpbmUoKSAmJiBtX2Zsb2F0aW5nT2JqZWN0cykgeworICAgICAgICBjb25zdCBGbG9hdGluZ09i
amVjdFNldCYgZmxvYXRpbmdPYmplY3RTZXQgPSBtX2Zsb2F0aW5nT2JqZWN0cy0+c2V0KCk7Cisg
ICAgICAgIEZsb2F0aW5nT2JqZWN0U2V0SXRlcmF0b3IgZW5kID0gZmxvYXRpbmdPYmplY3RTZXQu
ZW5kKCk7CisgICAgICAgIGZvciAoRmxvYXRpbmdPYmplY3RTZXRJdGVyYXRvciBpdCA9IGZsb2F0
aW5nT2JqZWN0U2V0LmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkgeworICAgICAgICAgICAgRmxv
YXRpbmdPYmplY3QqIGZsb2F0aW5nT2JqZWN0ID0gKml0OworICAgICAgICAgICAgaWYgKCFmbG9h
dGluZ09iamVjdC0+aXNEZXNjZW5kYW50KCkpCisgICAgICAgICAgICAgICAgb2xkSW50cnVkaW5n
RmxvYXRTZXQuYWRkKGZsb2F0aW5nT2JqZWN0LT5yZW5kZXJlcigpKTsKKyAgICAgICAgfQorICAg
IH0KKworICAgIC8vIElubGluZSBibG9ja3MgYXJlIGNvdmVyZWQgYnkgdGhlIGlzUmVwbGFjZWQo
KSBjaGVjayBpbiB0aGUgYXZvaWRGbG9hdHMgbWV0aG9kLgorICAgIGlmIChhdm9pZHNGbG9hdHMo
KSB8fCBpc1Jvb3QoKSB8fCBpc1JlbmRlclZpZXcoKSB8fCBpc0Zsb2F0aW5nT3JPdXRPZkZsb3dQ
b3NpdGlvbmVkKCkgfHwgaXNUYWJsZUNlbGwoKSkgeworICAgICAgICBpZiAobV9mbG9hdGluZ09i
amVjdHMpIHsKKyAgICAgICAgICAgIGRlbGV0ZUFsbFZhbHVlcyhtX2Zsb2F0aW5nT2JqZWN0cy0+
c2V0KCkpOworICAgICAgICAgICAgbV9mbG9hdGluZ09iamVjdHMtPmNsZWFyKCk7CisgICAgICAg
IH0KKyAgICAgICAgaWYgKCFvbGRJbnRydWRpbmdGbG9hdFNldC5pc0VtcHR5KCkpCisgICAgICAg
ICAgICBtYXJrQWxsRGVzY2VuZGFudHNXaXRoRmxvYXRzRm9yTGF5b3V0KCk7CisgICAgICAgIHJl
dHVybjsKKyAgICB9CisKKyAgICB0eXBlZGVmIEhhc2hNYXA8UmVuZGVyT2JqZWN0KiwgRmxvYXRp
bmdPYmplY3QqPiBSZW5kZXJlclRvRmxvYXRJbmZvTWFwOworICAgIFJlbmRlcmVyVG9GbG9hdElu
Zm9NYXAgZmxvYXRNYXA7CisKKyAgICBpZiAobV9mbG9hdGluZ09iamVjdHMpIHsKKyAgICAgICAg
Y29uc3QgRmxvYXRpbmdPYmplY3RTZXQmIGZsb2F0aW5nT2JqZWN0U2V0ID0gbV9mbG9hdGluZ09i
amVjdHMtPnNldCgpOworICAgICAgICBpZiAoY2hpbGRyZW5JbmxpbmUoKSkgeworICAgICAgICAg
ICAgRmxvYXRpbmdPYmplY3RTZXRJdGVyYXRvciBlbmQgPSBmbG9hdGluZ09iamVjdFNldC5lbmQo
KTsKKyAgICAgICAgICAgIGZvciAoRmxvYXRpbmdPYmplY3RTZXRJdGVyYXRvciBpdCA9IGZsb2F0
aW5nT2JqZWN0U2V0LmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkgeworICAgICAgICAgICAgICAg
IEZsb2F0aW5nT2JqZWN0KiBmID0gKml0OworICAgICAgICAgICAgICAgIGZsb2F0TWFwLmFkZChm
LT5yZW5kZXJlcigpLCBmKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSBlbHNlCisgICAgICAg
ICAgICBkZWxldGVBbGxWYWx1ZXMoZmxvYXRpbmdPYmplY3RTZXQpOworICAgICAgICBtX2Zsb2F0
aW5nT2JqZWN0cy0+Y2xlYXIoKTsKKyAgICB9CisKKyAgICAvLyBXZSBzaG91bGQgbm90IHByb2Nl
c3MgZmxvYXRzIGlmIHRoZSBwYXJlbnQgbm9kZSBpcyBub3QgYSBSZW5kZXJCbG9jay4gT3RoZXJ3
aXNlLCB3ZSB3aWxsIGFkZCAKKyAgICAvLyBmbG9hdHMgaW4gYW4gaW52YWxpZCBjb250ZXh0LiBU
aGlzIHdpbGwgY2F1c2UgYSBjcmFzaCBhcmlzaW5nIGZyb20gYSBiYWQgY2FzdCBvbiB0aGUgcGFy
ZW50LgorICAgIC8vIFNlZSA8cmRhcjovL3Byb2JsZW0vODA0OTc1Mz4sIHdoZXJlIGZsb2F0IHBy
b3BlcnR5IGlzIGFwcGxpZWQgb24gYSB0ZXh0IG5vZGUgaW4gYSBTVkcuCisgICAgaWYgKCFwYXJl
bnQoKSB8fCAhcGFyZW50KCktPmlzUmVuZGVyQmxvY2soKSkKKyAgICAgICAgcmV0dXJuOworCisg
ICAgLy8gQXR0ZW1wdCB0byBsb2NhdGUgYSBwcmV2aW91cyBzaWJsaW5nIHdpdGggb3Zlcmhhbmdp
bmcgZmxvYXRzLiAgV2Ugc2tpcCBhbnkgZWxlbWVudHMgdGhhdCBhcmUKKyAgICAvLyBvdXQgb2Yg
ZmxvdyAobGlrZSBmbG9hdGluZy9wb3NpdGlvbmVkIGVsZW1lbnRzKSwgYW5kIHdlIGFsc28gc2tp
cCBvdmVyIGFueSBvYmplY3RzIHRoYXQgbWF5IGhhdmUgc2hpZnRlZAorICAgIC8vIHRvIGF2b2lk
IGZsb2F0cy4KKyAgICBSZW5kZXJCbG9jayogcGFyZW50QmxvY2sgPSB0b1JlbmRlckJsb2NrKHBh
cmVudCgpKTsKKyAgICBib29sIHBhcmVudEhhc0Zsb2F0cyA9IGZhbHNlOworICAgIFJlbmRlck9i
amVjdCogcHJldiA9IHByZXZpb3VzU2libGluZygpOworICAgIHdoaWxlIChwcmV2ICYmIChwcmV2
LT5pc0Zsb2F0aW5nT3JPdXRPZkZsb3dQb3NpdGlvbmVkKCkgfHwgIXByZXYtPmlzQm94KCkgfHwg
IXByZXYtPmlzUmVuZGVyQmxvY2soKSB8fCB0b1JlbmRlckJsb2NrKHByZXYpLT5hdm9pZHNGbG9h
dHMoKSkpIHsKKyAgICAgICAgaWYgKHByZXYtPmlzRmxvYXRpbmcoKSkKKyAgICAgICAgICAgIHBh
cmVudEhhc0Zsb2F0cyA9IHRydWU7CisgICAgICAgIHByZXYgPSBwcmV2LT5wcmV2aW91c1NpYmxp
bmcoKTsKKyAgICB9CisKKyAgICAvLyBGaXJzdCBhZGQgaW4gZmxvYXRzIGZyb20gdGhlIHBhcmVu
dC4KKyAgICBMYXlvdXRVbml0IGxvZ2ljYWxUb3BPZmZzZXQgPSBsb2dpY2FsVG9wKCk7CisgICAg
aWYgKHBhcmVudEhhc0Zsb2F0cykKKyAgICAgICAgYWRkSW50cnVkaW5nRmxvYXRzKHBhcmVudEJs
b2NrLCBwYXJlbnRCbG9jay0+bG9naWNhbExlZnRPZmZzZXRGb3JDb250ZW50KCksIGxvZ2ljYWxU
b3BPZmZzZXQpOworICAgIAorICAgIExheW91dFVuaXQgbG9naWNhbExlZnRPZmZzZXQgPSAwOwor
ICAgIGlmIChwcmV2KQorICAgICAgICBsb2dpY2FsVG9wT2Zmc2V0IC09IHRvUmVuZGVyQm94KHBy
ZXYpLT5sb2dpY2FsVG9wKCk7CisgICAgZWxzZSB7CisgICAgICAgIHByZXYgPSBwYXJlbnRCbG9j
azsKKyAgICAgICAgbG9naWNhbExlZnRPZmZzZXQgKz0gcGFyZW50QmxvY2stPmxvZ2ljYWxMZWZ0
T2Zmc2V0Rm9yQ29udGVudCgpOworICAgIH0KKworICAgIC8vIEFkZCBvdmVyaGFuZ2luZyBmbG9h
dHMgZnJvbSB0aGUgcHJldmlvdXMgUmVuZGVyQmxvY2ssIGJ1dCBvbmx5IGlmIGl0IGhhcyBhIGZs
b2F0IHRoYXQgaW50cnVkZXMgaW50byBvdXIgc3BhY2UuICAgIAorICAgIFJlbmRlckJsb2NrKiBi
bG9jayA9IHRvUmVuZGVyQmxvY2socHJldik7CisgICAgaWYgKGJsb2NrLT5tX2Zsb2F0aW5nT2Jq
ZWN0cyAmJiBibG9jay0+bG93ZXN0RmxvYXRMb2dpY2FsQm90dG9tKCkgPiBsb2dpY2FsVG9wT2Zm
c2V0KQorICAgICAgICBhZGRJbnRydWRpbmdGbG9hdHMoYmxvY2ssIGxvZ2ljYWxMZWZ0T2Zmc2V0
LCBsb2dpY2FsVG9wT2Zmc2V0KTsKKworICAgIGlmIChjaGlsZHJlbklubGluZSgpKSB7CisgICAg
ICAgIExheW91dFVuaXQgY2hhbmdlTG9naWNhbFRvcCA9IExheW91dFVuaXQ6Om1heCgpOworICAg
ICAgICBMYXlvdXRVbml0IGNoYW5nZUxvZ2ljYWxCb3R0b20gPSBMYXlvdXRVbml0OjptaW4oKTsK
KyAgICAgICAgaWYgKG1fZmxvYXRpbmdPYmplY3RzKSB7CisgICAgICAgICAgICBjb25zdCBGbG9h
dGluZ09iamVjdFNldCYgZmxvYXRpbmdPYmplY3RTZXQgPSBtX2Zsb2F0aW5nT2JqZWN0cy0+c2V0
KCk7CisgICAgICAgICAgICBGbG9hdGluZ09iamVjdFNldEl0ZXJhdG9yIGVuZCA9IGZsb2F0aW5n
T2JqZWN0U2V0LmVuZCgpOworICAgICAgICAgICAgZm9yIChGbG9hdGluZ09iamVjdFNldEl0ZXJh
dG9yIGl0ID0gZmxvYXRpbmdPYmplY3RTZXQuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7Cisg
ICAgICAgICAgICAgICAgRmxvYXRpbmdPYmplY3QqIGYgPSAqaXQ7CisgICAgICAgICAgICAgICAg
RmxvYXRpbmdPYmplY3QqIG9sZEZsb2F0aW5nT2JqZWN0ID0gZmxvYXRNYXAuZ2V0KGYtPnJlbmRl
cmVyKCkpOworICAgICAgICAgICAgICAgIExheW91dFVuaXQgbG9naWNhbEJvdHRvbSA9IGYtPmxv
Z2ljYWxCb3R0b20oaXNIb3Jpem9udGFsV3JpdGluZ01vZGUoKSk7CisgICAgICAgICAgICAgICAg
aWYgKG9sZEZsb2F0aW5nT2JqZWN0KSB7CisgICAgICAgICAgICAgICAgICAgIExheW91dFVuaXQg
b2xkTG9naWNhbEJvdHRvbSA9IG9sZEZsb2F0aW5nT2JqZWN0LT5sb2dpY2FsQm90dG9tKGlzSG9y
aXpvbnRhbFdyaXRpbmdNb2RlKCkpOworICAgICAgICAgICAgICAgICAgICBpZiAoZi0+bG9naWNh
bFdpZHRoKGlzSG9yaXpvbnRhbFdyaXRpbmdNb2RlKCkpICE9IG9sZEZsb2F0aW5nT2JqZWN0LT5s
b2dpY2FsV2lkdGgoaXNIb3Jpem9udGFsV3JpdGluZ01vZGUoKSkgfHwgZi0+bG9naWNhbExlZnQo
aXNIb3Jpem9udGFsV3JpdGluZ01vZGUoKSkgIT0gb2xkRmxvYXRpbmdPYmplY3QtPmxvZ2ljYWxM
ZWZ0KGlzSG9yaXpvbnRhbFdyaXRpbmdNb2RlKCkpKSB7CisgICAgICAgICAgICAgICAgICAgICAg
ICBjaGFuZ2VMb2dpY2FsVG9wID0gMDsKKyAgICAgICAgICAgICAgICAgICAgICAgIGNoYW5nZUxv
Z2ljYWxCb3R0b20gPSBtYXgoY2hhbmdlTG9naWNhbEJvdHRvbSwgbWF4KGxvZ2ljYWxCb3R0b20s
IG9sZExvZ2ljYWxCb3R0b20pKTsKKyAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAg
ICAgICAgICAgICAgICAgICAgIGlmIChsb2dpY2FsQm90dG9tICE9IG9sZExvZ2ljYWxCb3R0b20p
IHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFuZ2VMb2dpY2FsVG9wID0gbWluKGNo
YW5nZUxvZ2ljYWxUb3AsIG1pbihsb2dpY2FsQm90dG9tLCBvbGRMb2dpY2FsQm90dG9tKSk7Cisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhbmdlTG9naWNhbEJvdHRvbSA9IG1heChjaGFu
Z2VMb2dpY2FsQm90dG9tLCBtYXgobG9naWNhbEJvdHRvbSwgb2xkTG9naWNhbEJvdHRvbSkpOwor
ICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgTGF5b3V0
VW5pdCBsb2dpY2FsVG9wID0gZi0+bG9naWNhbFRvcChpc0hvcml6b250YWxXcml0aW5nTW9kZSgp
KTsKKyAgICAgICAgICAgICAgICAgICAgICAgIExheW91dFVuaXQgb2xkTG9naWNhbFRvcCA9IG9s
ZEZsb2F0aW5nT2JqZWN0LT5sb2dpY2FsVG9wKGlzSG9yaXpvbnRhbFdyaXRpbmdNb2RlKCkpOwor
ICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGxvZ2ljYWxUb3AgIT0gb2xkTG9naWNhbFRvcCkg
eworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYW5nZUxvZ2ljYWxUb3AgPSBtaW4oY2hh
bmdlTG9naWNhbFRvcCwgbWluKGxvZ2ljYWxUb3AsIG9sZExvZ2ljYWxUb3ApKTsKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBjaGFuZ2VMb2dpY2FsQm90dG9tID0gbWF4KGNoYW5nZUxvZ2lj
YWxCb3R0b20sIG1heChsb2dpY2FsVG9wLCBvbGRMb2dpY2FsVG9wKSk7CisgICAgICAgICAgICAg
ICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgICAg
ICBmbG9hdE1hcC5yZW1vdmUoZi0+cmVuZGVyZXIoKSk7CisgICAgICAgICAgICAgICAgICAgIGlm
IChvbGRGbG9hdGluZ09iamVjdC0+b3JpZ2luYXRpbmdMaW5lKCkgJiYgIXNlbGZOZWVkc0xheW91
dCgpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBBU1NFUlQoJm9sZEZsb2F0aW5nT2JqZWN0
LT5vcmlnaW5hdGluZ0xpbmUoKS0+cmVuZGVyZXIoKSA9PSB0aGlzKTsKKyAgICAgICAgICAgICAg
ICAgICAgICAgIG9sZEZsb2F0aW5nT2JqZWN0LT5vcmlnaW5hdGluZ0xpbmUoKS0+bWFya0RpcnR5
KCk7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgZGVsZXRlIG9s
ZEZsb2F0aW5nT2JqZWN0OworICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAg
ICAgICAgIGNoYW5nZUxvZ2ljYWxUb3AgPSAwOworICAgICAgICAgICAgICAgICAgICBjaGFuZ2VM
b2dpY2FsQm90dG9tID0gbWF4KGNoYW5nZUxvZ2ljYWxCb3R0b20sIGxvZ2ljYWxCb3R0b20pOwor
ICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIFJl
bmRlcmVyVG9GbG9hdEluZm9NYXA6Oml0ZXJhdG9yIGVuZCA9IGZsb2F0TWFwLmVuZCgpOworICAg
ICAgICBmb3IgKFJlbmRlcmVyVG9GbG9hdEluZm9NYXA6Oml0ZXJhdG9yIGl0ID0gZmxvYXRNYXAu
YmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7CisgICAgICAgICAgICBGbG9hdGluZ09iamVjdCog
ZmxvYXRpbmdPYmplY3QgPSAoKml0KS52YWx1ZTsKKyAgICAgICAgICAgIGlmICghZmxvYXRpbmdP
YmplY3QtPmlzRGVzY2VuZGFudCgpKSB7CisgICAgICAgICAgICAgICAgY2hhbmdlTG9naWNhbFRv
cCA9IDA7CisgICAgICAgICAgICAgICAgY2hhbmdlTG9naWNhbEJvdHRvbSA9IG1heChjaGFuZ2VM
b2dpY2FsQm90dG9tLCBmbG9hdGluZ09iamVjdC0+bG9naWNhbEJvdHRvbShpc0hvcml6b250YWxX
cml0aW5nTW9kZSgpKSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgZGVsZXRl
QWxsVmFsdWVzKGZsb2F0TWFwKTsKKworICAgICAgICBtYXJrTGluZXNEaXJ0eUluQmxvY2tSYW5n
ZShjaGFuZ2VMb2dpY2FsVG9wLCBjaGFuZ2VMb2dpY2FsQm90dG9tKTsKKyAgICB9IGVsc2UgaWYg
KCFvbGRJbnRydWRpbmdGbG9hdFNldC5pc0VtcHR5KCkpIHsKKyAgICAgICAgLy8gSWYgdGhlcmUg
YXJlIHByZXZpb3VzbHkgaW50cnVkaW5nIGZsb2F0cyB0aGF0IG5vIGxvbmdlciBpbnRydWRlLCB0
aGVuIGNoaWxkcmVuIHdpdGggZmxvYXRzCisgICAgICAgIC8vIHNob3VsZCBhbHNvIGdldCBsYXlv
dXQgYmVjYXVzZSB0aGV5IG1pZ2h0IG5lZWQgdGhlaXIgZmxvYXRpbmcgb2JqZWN0IGxpc3RzIGNs
ZWFyZWQuCisgICAgICAgIGlmIChtX2Zsb2F0aW5nT2JqZWN0cy0+c2V0KCkuc2l6ZSgpIDwgb2xk
SW50cnVkaW5nRmxvYXRTZXQuc2l6ZSgpKQorICAgICAgICAgICAgbWFya0FsbERlc2NlbmRhbnRz
V2l0aEZsb2F0c0ZvckxheW91dCgpOworICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIGNvbnN0
IEZsb2F0aW5nT2JqZWN0U2V0JiBmbG9hdGluZ09iamVjdFNldCA9IG1fZmxvYXRpbmdPYmplY3Rz
LT5zZXQoKTsKKyAgICAgICAgICAgIEZsb2F0aW5nT2JqZWN0U2V0SXRlcmF0b3IgZW5kID0gZmxv
YXRpbmdPYmplY3RTZXQuZW5kKCk7CisgICAgICAgICAgICBmb3IgKEZsb2F0aW5nT2JqZWN0U2V0
SXRlcmF0b3IgaXQgPSBmbG9hdGluZ09iamVjdFNldC5iZWdpbigpOyBpdCAhPSBlbmQgJiYgIW9s
ZEludHJ1ZGluZ0Zsb2F0U2V0LmlzRW1wdHkoKTsgKytpdCkKKyAgICAgICAgICAgICAgICBvbGRJ
bnRydWRpbmdGbG9hdFNldC5yZW1vdmUoKCppdCktPnJlbmRlcmVyKCkpOworICAgICAgICAgICAg
aWYgKCFvbGRJbnRydWRpbmdGbG9hdFNldC5pc0VtcHR5KCkpCisgICAgICAgICAgICAgICAgbWFy
a0FsbERlc2NlbmRhbnRzV2l0aEZsb2F0c0ZvckxheW91dCgpOworICAgICAgICB9CisgICAgfQor
fQorCit2b2lkIFJlbmRlckJsb2NrRmxvdzo6bGF5b3V0QmxvY2soYm9vbCByZWxheW91dENoaWxk
cmVuLCBMYXlvdXRVbml0IHBhZ2VMb2dpY2FsSGVpZ2h0KQoreworICAgIEFTU0VSVChuZWVkc0xh
eW91dCgpKTsKKworICAgIGlmIChpc0lubGluZSgpICYmICFpc0lubGluZUJsb2NrT3JJbmxpbmVU
YWJsZSgpKSAvLyBJbmxpbmUgPGZvcm0+cyBpbnNpZGUgdmFyaW91cyB0YWJsZSBlbGVtZW50cyBj
YW4KKyAgICAgICAgcmV0dXJuOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Ly8gY2F1c2UgdXMgdG8gY29tZSBpbiBoZXJlLiAgSnVzdCBiYWlsLgorCisgICAgaWYgKCFyZWxh
eW91dENoaWxkcmVuICYmIHNpbXBsaWZpZWRMYXlvdXQoKSkKKyAgICAgICAgcmV0dXJuOworCisg
ICAgTGF5b3V0UmVwYWludGVyIHJlcGFpbnRlcigqdGhpcywgY2hlY2tGb3JSZXBhaW50RHVyaW5n
TGF5b3V0KCkpOworCisgICAgaWYgKHVwZGF0ZUxvZ2ljYWxXaWR0aEFuZENvbHVtbldpZHRoKCkp
CisgICAgICAgIHJlbGF5b3V0Q2hpbGRyZW4gPSB0cnVlOworCisgICAgY2xlYXJGbG9hdHMoKTsK
KworICAgIExheW91dFVuaXQgcHJldmlvdXNIZWlnaHQgPSBsb2dpY2FsSGVpZ2h0KCk7CisgICAg
Ly8gRklYTUU6IHNob3VsZCB0aGlzIHN0YXJ0IG91dCBhcyBib3JkZXJBbmRQYWRkaW5nTG9naWNh
bEhlaWdodCgpICsgc2Nyb2xsYmFyTG9naWNhbEhlaWdodCgpLAorICAgIC8vIGZvciBjb25zaXN0
ZW5jeSB3aXRoIG90aGVyIHJlbmRlciBjbGFzc2VzPworICAgIHNldExvZ2ljYWxIZWlnaHQoMCk7
CisKKyAgICBib29sIHBhZ2VMb2dpY2FsSGVpZ2h0Q2hhbmdlZCA9IGZhbHNlOworICAgIGJvb2wg
aGFzU3BlY2lmaWVkUGFnZUxvZ2ljYWxIZWlnaHQgPSBmYWxzZTsKKyAgICBjaGVja0ZvclBhZ2lu
YXRpb25Mb2dpY2FsSGVpZ2h0Q2hhbmdlKHBhZ2VMb2dpY2FsSGVpZ2h0LCBwYWdlTG9naWNhbEhl
aWdodENoYW5nZWQsIGhhc1NwZWNpZmllZFBhZ2VMb2dpY2FsSGVpZ2h0KTsKKworICAgIFJlbmRl
clN0eWxlKiBzdHlsZVRvVXNlID0gc3R5bGUoKTsKKyAgICBMYXlvdXRTdGF0ZU1haW50YWluZXIg
c3RhdGVQdXNoZXIoJnZpZXcoKSwgdGhpcywgbG9jYXRpb25PZmZzZXQoKSwgaGFzQ29sdW1ucygp
IHx8IGhhc1RyYW5zZm9ybSgpIHx8IGhhc1JlZmxlY3Rpb24oKSB8fCBzdHlsZVRvVXNlLT5pc0Zs
aXBwZWRCbG9ja3NXcml0aW5nTW9kZSgpLCBwYWdlTG9naWNhbEhlaWdodCwgcGFnZUxvZ2ljYWxI
ZWlnaHRDaGFuZ2VkLCBjb2x1bW5JbmZvKCkpOworCisgICAgLy8gUmVnaW9ucyBjaGFuZ2luZyB3
aWR0aHMgY2FuIGZvcmNlIHVzIHRvIHJlbGF5b3V0IG91ciBjaGlsZHJlbi4KKyAgICBSZW5kZXJG
bG93VGhyZWFkKiBmbG93VGhyZWFkID0gZmxvd1RocmVhZENvbnRhaW5pbmdCbG9jaygpOworICAg
IGlmIChsb2dpY2FsV2lkdGhDaGFuZ2VkSW5SZWdpb25zKGZsb3dUaHJlYWQpKQorICAgICAgICBy
ZWxheW91dENoaWxkcmVuID0gdHJ1ZTsKKyAgICBpZiAodXBkYXRlU2hhcGVzQmVmb3JlQmxvY2tM
YXlvdXQoKSkKKyAgICAgICAgcmVsYXlvdXRDaGlsZHJlbiA9IHRydWU7CisKKyAgICAvLyBXZSB1
c2UgZm91ciB2YWx1ZXMsIG1heFRvcFBvcywgbWF4VG9wTmVnLCBtYXhCb3R0b21Qb3MsIGFuZCBt
YXhCb3R0b21OZWcsIHRvIHRyYWNrCisgICAgLy8gb3VyIGN1cnJlbnQgbWF4aW1hbCBwb3NpdGl2
ZSBhbmQgbmVnYXRpdmUgbWFyZ2lucy4gIFRoZXNlIHZhbHVlcyBhcmUgdXNlZCB3aGVuIHdlCisg
ICAgLy8gYXJlIGNvbGxhcHNlZCB3aXRoIGFkamFjZW50IGJsb2Nrcywgc28gZm9yIGV4YW1wbGUs
IGlmIHlvdSBoYXZlIGJsb2NrIEEgYW5kIEIKKyAgICAvLyBjb2xsYXBzaW5nIHRvZ2V0aGVyLCB0
aGVuIHlvdSdkIHRha2UgdGhlIG1heGltYWwgcG9zaXRpdmUgbWFyZ2luIGZyb20gYm90aCBBIGFu
ZCBCCisgICAgLy8gYW5kIHN1YnRyYWN0IGl0IGZyb20gdGhlIG1heGltYWwgbmVnYXRpdmUgbWFy
Z2luIGZyb20gYm90aCBBIGFuZCBCIHRvIGdldCB0aGUKKyAgICAvLyB0cnVlIGNvbGxhcHNlZCBt
YXJnaW4uICBUaGlzIGFsZ29yaXRobSBpcyByZWN1cnNpdmUsIHNvIHdoZW4gd2UgZmluaXNoIGxh
eW91dCgpCisgICAgLy8gb3VyIGJsb2NrIGtub3dzIGl0cyBjdXJyZW50IG1heGltYWwgcG9zaXRp
dmUvbmVnYXRpdmUgdmFsdWVzLgorICAgIC8vCisgICAgLy8gU3RhcnQgb3V0IGJ5IHNldHRpbmcg
b3VyIG1hcmdpbiB2YWx1ZXMgdG8gb3VyIGN1cnJlbnQgbWFyZ2lucy4gIFRhYmxlIGNlbGxzIGhh
dmUKKyAgICAvLyBubyBtYXJnaW5zLCBzbyB3ZSBkb24ndCBmaWxsIGluIHRoZSB2YWx1ZXMgZm9y
IHRhYmxlIGNlbGxzLgorICAgIGJvb2wgaXNDZWxsID0gaXNUYWJsZUNlbGwoKTsKKyAgICBpZiAo
IWlzQ2VsbCkgeworICAgICAgICBpbml0TWF4TWFyZ2luVmFsdWVzKCk7CisgICAgICAgIAorICAg
ICAgICBzZXRIYXNNYXJnaW5CZWZvcmVRdWlyayhzdHlsZVRvVXNlLT5oYXNNYXJnaW5CZWZvcmVR
dWlyaygpKTsKKyAgICAgICAgc2V0SGFzTWFyZ2luQWZ0ZXJRdWlyayhzdHlsZVRvVXNlLT5oYXNN
YXJnaW5BZnRlclF1aXJrKCkpOworICAgICAgICBzZXRQYWdpbmF0aW9uU3RydXQoMCk7CisgICAg
fQorCisgICAgTGF5b3V0VW5pdCByZXBhaW50TG9naWNhbFRvcCA9IDA7CisgICAgTGF5b3V0VW5p
dCByZXBhaW50TG9naWNhbEJvdHRvbSA9IDA7CisgICAgTGF5b3V0VW5pdCBtYXhGbG9hdExvZ2lj
YWxCb3R0b20gPSAwOworICAgIGlmICghZmlyc3RDaGlsZCgpICYmICFpc0Fub255bW91c0Jsb2Nr
KCkpCisgICAgICAgIHNldENoaWxkcmVuSW5saW5lKHRydWUpOworICAgIGlmIChjaGlsZHJlbklu
bGluZSgpKQorICAgICAgICBsYXlvdXRJbmxpbmVDaGlsZHJlbihyZWxheW91dENoaWxkcmVuLCBy
ZXBhaW50TG9naWNhbFRvcCwgcmVwYWludExvZ2ljYWxCb3R0b20pOworICAgIGVsc2UKKyAgICAg
ICAgbGF5b3V0QmxvY2tDaGlsZHJlbihyZWxheW91dENoaWxkcmVuLCBtYXhGbG9hdExvZ2ljYWxC
b3R0b20pOworCisgICAgLy8gRXhwYW5kIG91ciBpbnRyaW5zaWMgaGVpZ2h0IHRvIGVuY29tcGFz
cyBmbG9hdHMuCisgICAgTGF5b3V0VW5pdCB0b0FkZCA9IGJvcmRlckFuZFBhZGRpbmdBZnRlcigp
ICsgc2Nyb2xsYmFyTG9naWNhbEhlaWdodCgpOworICAgIGlmIChsb3dlc3RGbG9hdExvZ2ljYWxC
b3R0b20oKSA+IChsb2dpY2FsSGVpZ2h0KCkgLSB0b0FkZCkgJiYgZXhwYW5kc1RvRW5jbG9zZU92
ZXJoYW5naW5nRmxvYXRzKCkpCisgICAgICAgIHNldExvZ2ljYWxIZWlnaHQobG93ZXN0RmxvYXRM
b2dpY2FsQm90dG9tKCkgKyB0b0FkZCk7CisgICAgCisgICAgaWYgKHJlbGF5b3V0Rm9yUGFnaW5h
dGlvbihoYXNTcGVjaWZpZWRQYWdlTG9naWNhbEhlaWdodCwgcGFnZUxvZ2ljYWxIZWlnaHQsIHN0
YXRlUHVzaGVyKSB8fCByZWxheW91dFRvQXZvaWRXaWRvd3Moc3RhdGVQdXNoZXIpKSB7CisgICAg
ICAgIEFTU0VSVCghc2hvdWxkQnJlYWtBdExpbmVUb0F2b2lkV2lkb3coKSk7CisgICAgICAgIHJl
dHVybjsKKyAgICB9CisKKyAgICAvLyBDYWxjdWxhdGUgb3VyIG5ldyBoZWlnaHQuCisgICAgTGF5
b3V0VW5pdCBvbGRIZWlnaHQgPSBsb2dpY2FsSGVpZ2h0KCk7CisgICAgTGF5b3V0VW5pdCBvbGRD
bGllbnRBZnRlckVkZ2UgPSBjbGllbnRMb2dpY2FsQm90dG9tKCk7CisKKyAgICAvLyBCZWZvcmUg
dXBkYXRpbmcgdGhlIGZpbmFsIHNpemUgb2YgdGhlIGZsb3cgdGhyZWFkIG1ha2Ugc3VyZSBhIGZv
cmNlZCBicmVhayBpcyBhcHBsaWVkIGFmdGVyIHRoZSBjb250ZW50LgorICAgIC8vIFRoaXMgZW5z
dXJlcyB0aGUgc2l6ZSBpbmZvcm1hdGlvbiBpcyBjb3JyZWN0bHkgY29tcHV0ZWQgZm9yIHRoZSBs
YXN0IGF1dG8taGVpZ2h0IHJlZ2lvbiByZWNlaXZpbmcgY29udGVudC4KKyAgICBpZiAoaXNSZW5k
ZXJGbG93VGhyZWFkKCkpCisgICAgICAgIHRvUmVuZGVyRmxvd1RocmVhZCh0aGlzKS0+YXBwbHlC
cmVha0FmdGVyQ29udGVudChvbGRDbGllbnRBZnRlckVkZ2UpOworCisgICAgdXBkYXRlTG9naWNh
bEhlaWdodCgpOworICAgIExheW91dFVuaXQgbmV3SGVpZ2h0ID0gbG9naWNhbEhlaWdodCgpOwor
ICAgIGlmIChvbGRIZWlnaHQgIT0gbmV3SGVpZ2h0KSB7CisgICAgICAgIGlmIChvbGRIZWlnaHQg
PiBuZXdIZWlnaHQgJiYgbWF4RmxvYXRMb2dpY2FsQm90dG9tID4gbmV3SGVpZ2h0ICYmICFjaGls
ZHJlbklubGluZSgpKSB7CisgICAgICAgICAgICAvLyBPbmUgb2Ygb3VyIGNoaWxkcmVuJ3MgZmxv
YXRzIG1heSBoYXZlIGJlY29tZSBhbiBvdmVyaGFuZ2luZyBmbG9hdCBmb3IgdXMuIFdlIG5lZWQg
dG8gbG9vayBmb3IgaXQuCisgICAgICAgICAgICBmb3IgKFJlbmRlck9iamVjdCogY2hpbGQgPSBm
aXJzdENoaWxkKCk7IGNoaWxkOyBjaGlsZCA9IGNoaWxkLT5uZXh0U2libGluZygpKSB7CisgICAg
ICAgICAgICAgICAgaWYgKGNoaWxkLT5pc1JlbmRlckJsb2NrRmxvdygpICYmICFjaGlsZC0+aXNG
bG9hdGluZ09yT3V0T2ZGbG93UG9zaXRpb25lZCgpKSB7CisgICAgICAgICAgICAgICAgICAgIFJl
bmRlckJsb2NrKiBibG9jayA9IHRvUmVuZGVyQmxvY2soY2hpbGQpOworICAgICAgICAgICAgICAg
ICAgICBpZiAoYmxvY2stPmxvd2VzdEZsb2F0TG9naWNhbEJvdHRvbSgpICsgYmxvY2stPmxvZ2lj
YWxUb3AoKSA+IG5ld0hlaWdodCkKKyAgICAgICAgICAgICAgICAgICAgICAgIGFkZE92ZXJoYW5n
aW5nRmxvYXRzKGJsb2NrLCBmYWxzZSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAg
fQorICAgICAgICB9CisgICAgfQorCisgICAgYm9vbCBoZWlnaHRDaGFuZ2VkID0gKHByZXZpb3Vz
SGVpZ2h0ICE9IG5ld0hlaWdodCk7CisgICAgaWYgKGhlaWdodENoYW5nZWQpCisgICAgICAgIHJl
bGF5b3V0Q2hpbGRyZW4gPSB0cnVlOworCisgICAgbGF5b3V0UG9zaXRpb25lZE9iamVjdHMocmVs
YXlvdXRDaGlsZHJlbiB8fCBpc1Jvb3QoKSk7CisKKyAgICB1cGRhdGVTaGFwZXNBZnRlckJsb2Nr
TGF5b3V0KGhlaWdodENoYW5nZWQpOworCisgICAgLy8gQWRkIG92ZXJmbG93IGZyb20gY2hpbGRy
ZW4gKHVubGVzcyB3ZSdyZSBtdWx0aS1jb2x1bW4sIHNpbmNlIGluIHRoYXQgY2FzZSBhbGwgb3Vy
IGNoaWxkIG92ZXJmbG93IGlzIGNsaXBwZWQgYW55d2F5KS4KKyAgICBjb21wdXRlT3ZlcmZsb3co
b2xkQ2xpZW50QWZ0ZXJFZGdlKTsKKyAgICAKKyAgICBzdGF0ZVB1c2hlci5wb3AoKTsKKworICAg
IGZpdEJvcmRlclRvTGluZXNJZk5lZWRlZCgpOworCisgICAgaWYgKHZpZXcoKS5sYXlvdXRTdGF0
ZSgpLT5tX3BhZ2VMb2dpY2FsSGVpZ2h0KQorICAgICAgICBzZXRQYWdlTG9naWNhbE9mZnNldCh2
aWV3KCkubGF5b3V0U3RhdGUoKS0+cGFnZUxvZ2ljYWxPZmZzZXQodGhpcywgbG9naWNhbFRvcCgp
KSk7CisKKyAgICB1cGRhdGVMYXllclRyYW5zZm9ybSgpOworCisgICAgLy8gVXBkYXRlIG91ciBz
Y3JvbGwgaW5mb3JtYXRpb24gaWYgd2UncmUgb3ZlcmZsb3c6YXV0by9zY3JvbGwvaGlkZGVuIG5v
dyB0aGF0IHdlIGtub3cgaWYKKyAgICAvLyB3ZSBvdmVyZmxvdyBvciBub3QuCisgICAgdXBkYXRl
U2Nyb2xsSW5mb0FmdGVyTGF5b3V0KCk7CisKKyAgICAvLyBGSVhNRTogVGhpcyByZXBhaW50IGxv
Z2ljIHNob3VsZCBiZSBtb3ZlZCBpbnRvIGEgc2VwYXJhdGUgaGVscGVyIGZ1bmN0aW9uIQorICAg
IC8vIFJlcGFpbnQgd2l0aCBvdXIgbmV3IGJvdW5kcyBpZiB0aGV5IGFyZSBkaWZmZXJlbnQgZnJv
bSBvdXIgb2xkIGJvdW5kcy4KKyAgICBib29sIGRpZEZ1bGxSZXBhaW50ID0gcmVwYWludGVyLnJl
cGFpbnRBZnRlckxheW91dCgpOworICAgIGlmICghZGlkRnVsbFJlcGFpbnQgJiYgcmVwYWludExv
Z2ljYWxUb3AgIT0gcmVwYWludExvZ2ljYWxCb3R0b20gJiYgKHN0eWxlVG9Vc2UtPnZpc2liaWxp
dHkoKSA9PSBWSVNJQkxFIHx8IGVuY2xvc2luZ0xheWVyKCktPmhhc1Zpc2libGVDb250ZW50KCkp
KSB7CisgICAgICAgIC8vIEZJWE1FOiBXZSBjb3VsZCB0aWdodGVuIHVwIHRoZSBsZWZ0IGFuZCBy
aWdodCBpbnZhbGlkYXRpb24gcG9pbnRzIGlmIHdlIGxldCBsYXlvdXRJbmxpbmVDaGlsZHJlbiBm
aWxsIHRoZW0gaW4gYmFzZWQgb2ZmIHRoZSBwYXJ0aWN1bGFyIGxpbmVzCisgICAgICAgIC8vIGl0
IGhhZCB0byBsYXkgb3V0LiAgV2Ugd291bGRuJ3QgbmVlZCB0aGUgaGFzT3ZlcmZsb3dDbGlwKCkg
aGFjayBpbiB0aGF0IGNhc2UgZWl0aGVyLgorICAgICAgICBMYXlvdXRVbml0IHJlcGFpbnRMb2dp
Y2FsTGVmdCA9IGxvZ2ljYWxMZWZ0VmlzdWFsT3ZlcmZsb3coKTsKKyAgICAgICAgTGF5b3V0VW5p
dCByZXBhaW50TG9naWNhbFJpZ2h0ID0gbG9naWNhbFJpZ2h0VmlzdWFsT3ZlcmZsb3coKTsKKyAg
ICAgICAgaWYgKGhhc092ZXJmbG93Q2xpcCgpKSB7CisgICAgICAgICAgICAvLyBJZiB3ZSBoYXZl
IGNsaXBwZWQgb3ZlcmZsb3csIHdlIHNob3VsZCB1c2UgbGF5b3V0IG92ZXJmbG93IGFzIHdlbGws
IHNpbmNlIHZpc3VhbCBvdmVyZmxvdyBmcm9tIGxpbmVzIGRpZG4ndCBwcm9wYWdhdGUgdG8gb3Vy
IGJsb2NrJ3Mgb3ZlcmZsb3cuCisgICAgICAgICAgICAvLyBOb3RlIHRoZSBvbGQgY29kZSBkaWQg
dGhpcyBhcyB3ZWxsIGJ1dCBldmVuIGZvciBvdmVyZmxvdzp2aXNpYmxlLiAgVGhlIGFkZGl0aW9u
IG9mIGhhc092ZXJmbG93Q2xpcCgpIGF0IGxlYXN0IHRpZ2h0ZW5zIHVwIHRoZSBoYWNrIGEgYml0
LgorICAgICAgICAgICAgLy8gbGF5b3V0SW5saW5lQ2hpbGRyZW4gc2hvdWxkIGJlIHBhdGNoZWQg
dG8gY29tcHV0ZSB0aGUgZW50aXJlIHJlcGFpbnQgcmVjdC4KKyAgICAgICAgICAgIHJlcGFpbnRM
b2dpY2FsTGVmdCA9IG1pbihyZXBhaW50TG9naWNhbExlZnQsIGxvZ2ljYWxMZWZ0TGF5b3V0T3Zl
cmZsb3coKSk7CisgICAgICAgICAgICByZXBhaW50TG9naWNhbFJpZ2h0ID0gbWF4KHJlcGFpbnRM
b2dpY2FsUmlnaHQsIGxvZ2ljYWxSaWdodExheW91dE92ZXJmbG93KCkpOworICAgICAgICB9Cisg
ICAgICAgIAorICAgICAgICBMYXlvdXRSZWN0IHJlcGFpbnRSZWN0OworICAgICAgICBpZiAoaXNI
b3Jpem9udGFsV3JpdGluZ01vZGUoKSkKKyAgICAgICAgICAgIHJlcGFpbnRSZWN0ID0gTGF5b3V0
UmVjdChyZXBhaW50TG9naWNhbExlZnQsIHJlcGFpbnRMb2dpY2FsVG9wLCByZXBhaW50TG9naWNh
bFJpZ2h0IC0gcmVwYWludExvZ2ljYWxMZWZ0LCByZXBhaW50TG9naWNhbEJvdHRvbSAtIHJlcGFp
bnRMb2dpY2FsVG9wKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgcmVwYWludFJlY3QgPSBM
YXlvdXRSZWN0KHJlcGFpbnRMb2dpY2FsVG9wLCByZXBhaW50TG9naWNhbExlZnQsIHJlcGFpbnRM
b2dpY2FsQm90dG9tIC0gcmVwYWludExvZ2ljYWxUb3AsIHJlcGFpbnRMb2dpY2FsUmlnaHQgLSBy
ZXBhaW50TG9naWNhbExlZnQpOworCisgICAgICAgIC8vIFRoZSByZXBhaW50IHJlY3QgbWF5IGJl
IHNwbGl0IGFjcm9zcyBjb2x1bW5zLCBpbiB3aGljaCBjYXNlIGFkanVzdFJlY3RGb3JDb2x1bW5z
KCkgd2lsbCByZXR1cm4gdGhlIHVuaW9uLgorICAgICAgICBhZGp1c3RSZWN0Rm9yQ29sdW1ucyhy
ZXBhaW50UmVjdCk7CisKKyAgICAgICAgcmVwYWludFJlY3QuaW5mbGF0ZShtYXhpbWFsT3V0bGlu
ZVNpemUoUGFpbnRQaGFzZU91dGxpbmUpKTsKKyAgICAgICAgCisgICAgICAgIGlmIChoYXNPdmVy
Zmxvd0NsaXAoKSkgeworICAgICAgICAgICAgLy8gQWRqdXN0IHJlcGFpbnQgcmVjdCBmb3Igc2Ny
b2xsIG9mZnNldAorICAgICAgICAgICAgcmVwYWludFJlY3QubW92ZSgtc2Nyb2xsZWRDb250ZW50
T2Zmc2V0KCkpOworCisgICAgICAgICAgICAvLyBEb24ndCBhbGxvdyB0aGlzIHJlY3QgdG8gc3Bp
bGwgb3V0IG9mIG91ciBvdmVyZmxvdyBib3guCisgICAgICAgICAgICByZXBhaW50UmVjdC5pbnRl
cnNlY3QoTGF5b3V0UmVjdChMYXlvdXRQb2ludCgpLCBzaXplKCkpKTsKKyAgICAgICAgfQorCisg
ICAgICAgIC8vIE1ha2Ugc3VyZSB0aGUgcmVjdCBpcyBzdGlsbCBub24tZW1wdHkgYWZ0ZXIgaW50
ZXJzZWN0aW5nIGZvciBvdmVyZmxvdyBhYm92ZQorICAgICAgICBpZiAoIXJlcGFpbnRSZWN0Lmlz
RW1wdHkoKSkgeworICAgICAgICAgICAgcmVwYWludFJlY3RhbmdsZShyZXBhaW50UmVjdCk7IC8v
IFdlIG5lZWQgdG8gZG8gYSBwYXJ0aWFsIHJlcGFpbnQgb2Ygb3VyIGNvbnRlbnQuCisgICAgICAg
ICAgICBpZiAoaGFzUmVmbGVjdGlvbigpKQorICAgICAgICAgICAgICAgIHJlcGFpbnRSZWN0YW5n
bGUocmVmbGVjdGVkUmVjdChyZXBhaW50UmVjdCkpOworICAgICAgICB9CisgICAgfQorCisgICAg
c2V0TmVlZHNMYXlvdXQoZmFsc2UpOworfQorCit2b2lkIFJlbmRlckJsb2NrRmxvdzo6bGF5b3V0
QmxvY2tDaGlsZHJlbihib29sIHJlbGF5b3V0Q2hpbGRyZW4sIExheW91dFVuaXQmIG1heEZsb2F0
TG9naWNhbEJvdHRvbSkKK3sKKyAgICBkaXJ0eUZvckxheW91dEZyb21QZXJjZW50YWdlSGVpZ2h0
RGVzY2VuZGFudHMoKTsKKworICAgIExheW91dFVuaXQgYmVmb3JlRWRnZSA9IGJvcmRlckFuZFBh
ZGRpbmdCZWZvcmUoKTsKKyAgICBMYXlvdXRVbml0IGFmdGVyRWRnZSA9IGJvcmRlckFuZFBhZGRp
bmdBZnRlcigpICsgc2Nyb2xsYmFyTG9naWNhbEhlaWdodCgpOworCisgICAgc2V0TG9naWNhbEhl
aWdodChiZWZvcmVFZGdlKTsKKyAgICAKKyAgICAvLyBMYXkgb3V0IG91ciBoeXBvdGhldGljYWwg
Z3JpZCBsaW5lIGFzIHRob3VnaCBpdCBvY2N1cnMgYXQgdGhlIHRvcCBvZiB0aGUgYmxvY2suCisg
ICAgaWYgKHZpZXcoKS5sYXlvdXRTdGF0ZSgpLT5saW5lR3JpZCgpID09IHRoaXMpCisgICAgICAg
IGxheW91dExpbmVHcmlkQm94KCk7CisKKyAgICAvLyBUaGUgbWFyZ2luIHN0cnVjdCBjYWNoZXMg
YWxsIG91ciBjdXJyZW50IG1hcmdpbiBjb2xsYXBzaW5nIHN0YXRlLiAgVGhlIGNvbXBhY3Qgc3Ry
dWN0IGNhY2hlcyBzdGF0ZSB3aGVuIHdlIGVuY291bnRlciBjb21wYWN0cywKKyAgICBNYXJnaW5J
bmZvIG1hcmdpbkluZm8odGhpcywgYmVmb3JlRWRnZSwgYWZ0ZXJFZGdlKTsKKworICAgIC8vIEZp
ZWxkc2V0cyBuZWVkIHRvIGZpbmQgdGhlaXIgbGVnZW5kIGFuZCBwb3NpdGlvbiBpdCBpbnNpZGUg
dGhlIGJvcmRlciBvZiB0aGUgb2JqZWN0LgorICAgIC8vIFRoZSBsZWdlbmQgdGhlbiBnZXRzIHNr
aXBwZWQgZHVyaW5nIG5vcm1hbCBsYXlvdXQuICBUaGUgc2FtZSBpcyB0cnVlIGZvciBydWJ5IHRl
eHQuCisgICAgLy8gSXQgZG9lc24ndCBnZXQgaW5jbHVkZWQgaW4gdGhlIG5vcm1hbCBsYXlvdXQg
cHJvY2VzcyBidXQgaXMgaW5zdGVhZCBza2lwcGVkLgorICAgIFJlbmRlck9iamVjdCogY2hpbGRU
b0V4Y2x1ZGUgPSBsYXlvdXRTcGVjaWFsRXhjbHVkZWRDaGlsZChyZWxheW91dENoaWxkcmVuKTsK
KworICAgIExheW91dFVuaXQgcHJldmlvdXNGbG9hdExvZ2ljYWxCb3R0b20gPSAwOworICAgIG1h
eEZsb2F0TG9naWNhbEJvdHRvbSA9IDA7CisKKyAgICBSZW5kZXJCb3gqIG5leHQgPSBmaXJzdENo
aWxkQm94KCk7CisKKyAgICB3aGlsZSAobmV4dCkgeworICAgICAgICBSZW5kZXJCb3gqIGNoaWxk
ID0gbmV4dDsKKyAgICAgICAgbmV4dCA9IGNoaWxkLT5uZXh0U2libGluZ0JveCgpOworCisgICAg
ICAgIGlmIChjaGlsZFRvRXhjbHVkZSA9PSBjaGlsZCkKKyAgICAgICAgICAgIGNvbnRpbnVlOyAv
LyBTa2lwIHRoaXMgY2hpbGQsIHNpbmNlIGl0IHdpbGwgYmUgcG9zaXRpb25lZCBieSB0aGUgc3Bl
Y2lhbGl6ZWQgc3ViY2xhc3MgKGZpZWxkc2V0cyBhbmQgcnVieSBydW5zKS4KKworICAgICAgICB1
cGRhdGVCbG9ja0NoaWxkRGlydHlCaXRzQmVmb3JlTGF5b3V0KHJlbGF5b3V0Q2hpbGRyZW4sIGNo
aWxkKTsKKworICAgICAgICBpZiAoY2hpbGQtPmlzT3V0T2ZGbG93UG9zaXRpb25lZCgpKSB7Cisg
ICAgICAgICAgICBjaGlsZC0+Y29udGFpbmluZ0Jsb2NrKCktPmluc2VydFBvc2l0aW9uZWRPYmpl
Y3QoY2hpbGQpOworICAgICAgICAgICAgYWRqdXN0UG9zaXRpb25lZEJsb2NrKGNoaWxkLCBtYXJn
aW5JbmZvKTsKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICB9CisgICAgICAgIGlmIChj
aGlsZC0+aXNGbG9hdGluZygpKSB7CisgICAgICAgICAgICBpbnNlcnRGbG9hdGluZ09iamVjdChj
aGlsZCk7CisgICAgICAgICAgICBhZGp1c3RGbG9hdGluZ0Jsb2NrKG1hcmdpbkluZm8pOworICAg
ICAgICAgICAgY29udGludWU7CisgICAgICAgIH0KKworICAgICAgICAvLyBMYXkgb3V0IHRoZSBj
aGlsZC4KKyAgICAgICAgbGF5b3V0QmxvY2tDaGlsZChjaGlsZCwgbWFyZ2luSW5mbywgcHJldmlv
dXNGbG9hdExvZ2ljYWxCb3R0b20sIG1heEZsb2F0TG9naWNhbEJvdHRvbSk7CisgICAgfQorICAg
IAorICAgIC8vIE5vdyBkbyB0aGUgaGFuZGxpbmcgb2YgdGhlIGJvdHRvbSBvZiB0aGUgYmxvY2ss
IGFkZGluZyBpbiBvdXIgYm90dG9tIGJvcmRlci9wYWRkaW5nIGFuZAorICAgIC8vIGRldGVybWlu
aW5nIHRoZSBjb3JyZWN0IGNvbGxhcHNlZCBib3R0b20gbWFyZ2luIGluZm9ybWF0aW9uLgorICAg
IGhhbmRsZUFmdGVyU2lkZU9mQmxvY2soYmVmb3JlRWRnZSwgYWZ0ZXJFZGdlLCBtYXJnaW5JbmZv
KTsKK30KKwogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL1JlbmRlckJsb2NrRmxvdy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9SZW5kZXJCbG9ja0Zsb3cuaAkocmV2aXNpb24gMTU1MzY1KQorKysgU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL1JlbmRlckJsb2NrRmxvdy5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMyw2
ICszMywyMCBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCB+UmVuZGVyQmxvY2tGbG93KCk7CiAgICAg
CiAgICAgdmlydHVhbCBib29sIGlzUmVuZGVyQmxvY2tGbG93KCkgY29uc3QgT1ZFUlJJREUgRklO
QUwgeyByZXR1cm4gdHJ1ZTsgfQorICAgIAorICAgIHZpcnR1YWwgdm9pZCBsYXlvdXRCbG9jayhi
b29sIHJlbGF5b3V0Q2hpbGRyZW4sIExheW91dFVuaXQgcGFnZUxvZ2ljYWxIZWlnaHQgPSAwKSBP
VkVSUklERTsKKyAgICAKK3Byb3RlY3RlZDoKKyAgICAvLyBUaGlzIG1ldGhvZCBpcyBjYWxsZWQg
YXQgdGhlIHN0YXJ0IG9mIGxheW91dCB0byB3aXBlIGF3YXkgYWxsIG9mIHRoZSBmbG9hdHMgaW4g
b3VyIGZsb2F0aW5nIG9iamVjdHMgbGlzdC4gSXQgYWxzbworICAgIC8vIHJlcG9wdWxhdGVzIHRo
ZSBsaXN0IHdpdGggYW55IGZsb2F0cyB0aGF0IGludHJ1ZGUgZnJvbSBwcmV2aW91cyBzaWJsaW5n
cyBvciBwYXJlbnRzLiBGbG9hdHMgdGhhdCB3b3VsZCBiZSBhZGRlZCBieQorICAgIC8vIGRlc2Nl
bmRhbnRzIGFyZSBnb25lIHdoZW4gdGhpcyBjYWxsIGNvbXBsZXRlcyBhbmQgd2lsbCBnZXQgYWRk
ZWQgYmFjayBsYXRlciBvbiBhZnRlciB0aGUgY2hpbGRyZW4gaGF2ZSBnb3R0ZW4KKyAgICAvLyBh
IHJlbGF5b3V0LgorICAgIHZvaWQgY2xlYXJGbG9hdHMoKTsKKworICAgIC8vIFJlbmRlckJsb2Nr
RmxvdyBhbHdheXMgY29udGFpbnMgZWl0aGVyIGxpbmVzIG9yIHBhcmFncmFwaHMuIFdoZW4gdGhl
IGNoaWxkcmVuIGFyZSBhbGwgYmxvY2tzIChlLmcuIHBhcmFncmFwaHMpLCB3ZSBjYWxsIGxheW91
dEJsb2NrQ2hpbGRyZW4uCisgICAgLy8gV2hlbiB0aGUgY2hpbGRyZW4gYXJlIGFyZSBhbGwgaW5s
aW5lIChlLmcuLCBsaW5lcyksIHdlIGNhbGwgbGF5b3V0SW5saW5lQ2hpbGRyZW4uCisgICAgdm9p
ZCBsYXlvdXRCbG9ja0NoaWxkcmVuKGJvb2wgcmVsYXlvdXRDaGlsZHJlbiwgTGF5b3V0VW5pdCYg
bWF4RmxvYXRMb2dpY2FsQm90dG9tKTsKKyAgICB2b2lkIGxheW91dElubGluZUNoaWxkcmVuKGJv
b2wgcmVsYXlvdXRDaGlsZHJlbiwgTGF5b3V0VW5pdCYgcmVwYWludExvZ2ljYWxUb3AsIExheW91
dFVuaXQmIHJlcGFpbnRMb2dpY2FsQm90dG9tKTsKIH07CiAKIGlubGluZSBSZW5kZXJCbG9ja0Zs
b3cmIHRvUmVuZGVyQmxvY2tGbG93KFJlbmRlck9iamVjdCYgb2JqZWN0KQpJbmRleDogU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJsb2NrTGluZUxheW91dC5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJsb2NrTGluZUxheW91dC5jcHAJKHJl
dmlzaW9uIDE1NTM2NSkKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCbG9ja0xp
bmVMYXlvdXQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMTA5LDcgKzIxMDksNyBAQCB2b2lkIFJl
bmRlckJsb2NrOjpyZXBhaW50RGlydHlGbG9hdHMoVmVjCiAgICAgfQogfQogCi12b2lkIFJlbmRl
ckJsb2NrOjpsYXlvdXRJbmxpbmVDaGlsZHJlbihib29sIHJlbGF5b3V0Q2hpbGRyZW4sIExheW91
dFVuaXQmIHJlcGFpbnRMb2dpY2FsVG9wLCBMYXlvdXRVbml0JiByZXBhaW50TG9naWNhbEJvdHRv
bSkKK3ZvaWQgUmVuZGVyQmxvY2tGbG93OjpsYXlvdXRJbmxpbmVDaGlsZHJlbihib29sIHJlbGF5
b3V0Q2hpbGRyZW4sIExheW91dFVuaXQmIHJlcGFpbnRMb2dpY2FsVG9wLCBMYXlvdXRVbml0JiBy
ZXBhaW50TG9naWNhbEJvdHRvbSkKIHsKICAgICBzZXRMb2dpY2FsSGVpZ2h0KGJvcmRlckFuZFBh
ZGRpbmdCZWZvcmUoKSk7CiAgICAgCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3Zn
L1JlbmRlclNWR1RleHQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9zdmcvUmVuZGVyU1ZHVGV4dC5jcHAJKHJldmlzaW9uIDE1NTM2NSkKKysrIFNvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHVGV4dC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQx
NCw3ICs0MTQsMTAgQEAgdm9pZCBSZW5kZXJTVkdUZXh0OjpsYXlvdXQoKQogICAgIC8vIEZJWE1F
OiBXZSBuZWVkIHRvIGZpbmQgYSB3YXkgdG8gb25seSBsYXlvdXQgdGhlIGNoaWxkIGJveGVzLCBp
ZiBuZWVkZWQuCiAgICAgRmxvYXRSZWN0IG9sZEJvdW5kYXJpZXMgPSBvYmplY3RCb3VuZGluZ0Jv
eCgpOwogICAgIEFTU0VSVChjaGlsZHJlbklubGluZSgpKTsKLSAgICBmb3JjZUxheW91dElubGlu
ZUNoaWxkcmVuKCk7CisgICAgTGF5b3V0VW5pdCByZXBhaW50TG9naWNhbFRvcCA9IDA7CisgICAg
TGF5b3V0VW5pdCByZXBhaW50TG9naWNhbEJvdHRvbSA9IDA7CisgICAgY2xlYXJGbG9hdHMoKTsK
KyAgICBsYXlvdXRJbmxpbmVDaGlsZHJlbih0cnVlLCByZXBhaW50TG9naWNhbFRvcCwgcmVwYWlu
dExvZ2ljYWxCb3R0b20pOwogCiAgICAgaWYgKG1fbmVlZHNSZW9yZGVyaW5nKQogICAgICAgICBt
X25lZWRzUmVvcmRlcmluZyA9IGZhbHNlOwo=
</data>
<flag name="review"
          id="233113"
          type_id="1"
          status="+"
          setter="dino"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>211065</attachid>
            <date>2013-09-09 12:22:11 -0700</date>
            <delta_ts>2013-09-09 12:50:50 -0700</delta_ts>
            <desc>Patch to pass the style queue</desc>
            <filename>patch.txt</filename>
            <type>text/plain</type>
            <size>44670</size>
            <attacher name="Dave Hyatt">hyatt</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDE1NTM2OCkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDMxIEBACisyMDEzLTA5LTA5ICBEYXZpZCBI
eWF0dCAgPGh5YXR0QGFwcGxlLmNvbT4KKworICAgICAgICBNb3ZlIGxheW91dEJsb2NrIGFuZCBs
YXlvdXRCbG9ja0NoaWxkcmVuIGludG8gUmVuZGVyQmxvY2tGbG93CisgICAgICAgIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMjEwMzYKKworICAgICAgICBSZXZpZXdl
ZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBNb3ZlIGxheW91dEJsb2NrIGludG8gUmVu
ZGVyQmxvY2tGbG93IGFuZCBtYWtlIHRoZSBiYXNlIGNsYXNzIHZlcnNpb24gb2YKKyAgICAgICAg
dGhlIG1ldGhvZCBBU1NFUlRfTk9UX1JFQUNIRUQuIEJlZ2luIHRoZSBwcm9jZXNzIG9mIG1vdmlu
ZyBibG9jayBsYXlvdXQgCisgICAgICAgIGludG8gUmVuZGVyQmxvY2tGbG93IGJ5IHB1dHRpbmcg
bGF5b3V0QmxvY2tDaGlsZHJlbiB0aGVyZSBhcyB3ZWxsLgorICAgICAgICAKKyAgICAgICAgVGhp
cyBwYXRjaCBhbHNvIHB1dHMgY2xlYXJGbG9hdHMgaW50byBSZW5kZXJCbG9ja0Zsb3cgYW5kIGp1
c3QgZGl0Y2hlcyB0aGUKKyAgICAgICAgU1ZHLXNwZWNpZmljIGZvcmNlTGF5b3V0SW5saW5lQ2hp
bGRyZW4gYnkgbGV0dGluZyBSZW5kZXJTVkdUZXh0IGRvIHdoYXQgaXQKKyAgICAgICAgbmVlZHMg
aW4gaXRzIG93biBmaWxlLgorCisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckJsb2NrLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJsb2NrOjpsYXlvdXRCbG9jayk6CisgICAgICAgICog
cmVuZGVyaW5nL1JlbmRlckJsb2NrLmg6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckJsb2Nr
Rmxvdy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCbG9ja0Zsb3c6OmNsZWFyRmxvYXRz
KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJsb2NrRmxvdzo6bGF5b3V0QmxvY2spOgorICAg
ICAgICAoV2ViQ29yZTo6UmVuZGVyQmxvY2tGbG93OjpsYXlvdXRCbG9ja0NoaWxkcmVuKToKKyAg
ICAgICAgKiByZW5kZXJpbmcvUmVuZGVyQmxvY2tGbG93Lmg6CisgICAgICAgICogcmVuZGVyaW5n
L1JlbmRlckJsb2NrTGluZUxheW91dC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCbG9j
a0Zsb3c6OmxheW91dElubGluZUNoaWxkcmVuKToKKyAgICAgICAgKiByZW5kZXJpbmcvc3ZnL1Jl
bmRlclNWR1RleHQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU1ZHVGV4dDo6bGF5b3V0
KToKKwogMjAxMy0wOS0wOSAgQmVtIEpvbmVzLUJleSAgPGJqb25lc2JlQGFkb2JlLmNvbT4KIAog
ICAgICAgICBNb3ZlIGxvZ2ljYWwoTGVmdHxSaWdodClGbG9hdE9mZnNldEZvckxpbmUgbWV0aG9k
cyBpbnRvIEZsb2F0aW5nT2JqZWN0cwpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1Jl
bmRlckJsb2NrLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVu
ZGVyQmxvY2suY3BwCShyZXZpc2lvbiAxNTUzNjYpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvUmVuZGVyQmxvY2suY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNjMwLDE3MiArMTYzMCw5IEBA
IGJvb2wgUmVuZGVyQmxvY2s6OnJlbGF5b3V0VG9Bdm9pZFdpZG93cygKICAgICByZXR1cm4gdHJ1
ZTsKIH0KIAotdm9pZCBSZW5kZXJCbG9jazo6bGF5b3V0QmxvY2soYm9vbCByZWxheW91dENoaWxk
cmVuLCBMYXlvdXRVbml0IHBhZ2VMb2dpY2FsSGVpZ2h0KQordm9pZCBSZW5kZXJCbG9jazo6bGF5
b3V0QmxvY2soYm9vbCwgTGF5b3V0VW5pdCkKIHsKLSAgICBBU1NFUlQobmVlZHNMYXlvdXQoKSk7
Ci0KLSAgICBpZiAoaXNJbmxpbmUoKSAmJiAhaXNJbmxpbmVCbG9ja09ySW5saW5lVGFibGUoKSkg
Ly8gSW5saW5lIDxmb3JtPnMgaW5zaWRlIHZhcmlvdXMgdGFibGUgZWxlbWVudHMgY2FuCi0gICAg
ICAgIHJldHVybjsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGNhdXNl
IHVzIHRvIGNvbWUgaW4gaGVyZS4gIEp1c3QgYmFpbC4KLQotICAgIGlmICghcmVsYXlvdXRDaGls
ZHJlbiAmJiBzaW1wbGlmaWVkTGF5b3V0KCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIExheW91
dFJlcGFpbnRlciByZXBhaW50ZXIoKnRoaXMsIGNoZWNrRm9yUmVwYWludER1cmluZ0xheW91dCgp
KTsKLQotICAgIGlmICh1cGRhdGVMb2dpY2FsV2lkdGhBbmRDb2x1bW5XaWR0aCgpKQotICAgICAg
ICByZWxheW91dENoaWxkcmVuID0gdHJ1ZTsKLQotICAgIGNsZWFyRmxvYXRzKCk7Ci0KLSAgICBM
YXlvdXRVbml0IHByZXZpb3VzSGVpZ2h0ID0gbG9naWNhbEhlaWdodCgpOwotICAgIC8vIEZJWE1F
OiBzaG91bGQgdGhpcyBzdGFydCBvdXQgYXMgYm9yZGVyQW5kUGFkZGluZ0xvZ2ljYWxIZWlnaHQo
KSArIHNjcm9sbGJhckxvZ2ljYWxIZWlnaHQoKSwKLSAgICAvLyBmb3IgY29uc2lzdGVuY3kgd2l0
aCBvdGhlciByZW5kZXIgY2xhc3Nlcz8KLSAgICBzZXRMb2dpY2FsSGVpZ2h0KDApOwotCi0gICAg
Ym9vbCBwYWdlTG9naWNhbEhlaWdodENoYW5nZWQgPSBmYWxzZTsKLSAgICBib29sIGhhc1NwZWNp
ZmllZFBhZ2VMb2dpY2FsSGVpZ2h0ID0gZmFsc2U7Ci0gICAgY2hlY2tGb3JQYWdpbmF0aW9uTG9n
aWNhbEhlaWdodENoYW5nZShwYWdlTG9naWNhbEhlaWdodCwgcGFnZUxvZ2ljYWxIZWlnaHRDaGFu
Z2VkLCBoYXNTcGVjaWZpZWRQYWdlTG9naWNhbEhlaWdodCk7Ci0KLSAgICBSZW5kZXJTdHlsZSog
c3R5bGVUb1VzZSA9IHN0eWxlKCk7Ci0gICAgTGF5b3V0U3RhdGVNYWludGFpbmVyIHN0YXRlUHVz
aGVyKCZ2aWV3KCksIHRoaXMsIGxvY2F0aW9uT2Zmc2V0KCksIGhhc0NvbHVtbnMoKSB8fCBoYXNU
cmFuc2Zvcm0oKSB8fCBoYXNSZWZsZWN0aW9uKCkgfHwgc3R5bGVUb1VzZS0+aXNGbGlwcGVkQmxv
Y2tzV3JpdGluZ01vZGUoKSwgcGFnZUxvZ2ljYWxIZWlnaHQsIHBhZ2VMb2dpY2FsSGVpZ2h0Q2hh
bmdlZCwgY29sdW1uSW5mbygpKTsKLQotICAgIC8vIFJlZ2lvbnMgY2hhbmdpbmcgd2lkdGhzIGNh
biBmb3JjZSB1cyB0byByZWxheW91dCBvdXIgY2hpbGRyZW4uCi0gICAgUmVuZGVyRmxvd1RocmVh
ZCogZmxvd1RocmVhZCA9IGZsb3dUaHJlYWRDb250YWluaW5nQmxvY2soKTsKLSAgICBpZiAobG9n
aWNhbFdpZHRoQ2hhbmdlZEluUmVnaW9ucyhmbG93VGhyZWFkKSkKLSAgICAgICAgcmVsYXlvdXRD
aGlsZHJlbiA9IHRydWU7Ci0gICAgaWYgKHVwZGF0ZVNoYXBlc0JlZm9yZUJsb2NrTGF5b3V0KCkp
Ci0gICAgICAgIHJlbGF5b3V0Q2hpbGRyZW4gPSB0cnVlOwotCi0gICAgLy8gV2UgdXNlIGZvdXIg
dmFsdWVzLCBtYXhUb3BQb3MsIG1heFRvcE5lZywgbWF4Qm90dG9tUG9zLCBhbmQgbWF4Qm90dG9t
TmVnLCB0byB0cmFjawotICAgIC8vIG91ciBjdXJyZW50IG1heGltYWwgcG9zaXRpdmUgYW5kIG5l
Z2F0aXZlIG1hcmdpbnMuICBUaGVzZSB2YWx1ZXMgYXJlIHVzZWQgd2hlbiB3ZQotICAgIC8vIGFy
ZSBjb2xsYXBzZWQgd2l0aCBhZGphY2VudCBibG9ja3MsIHNvIGZvciBleGFtcGxlLCBpZiB5b3Ug
aGF2ZSBibG9jayBBIGFuZCBCCi0gICAgLy8gY29sbGFwc2luZyB0b2dldGhlciwgdGhlbiB5b3Un
ZCB0YWtlIHRoZSBtYXhpbWFsIHBvc2l0aXZlIG1hcmdpbiBmcm9tIGJvdGggQSBhbmQgQgotICAg
IC8vIGFuZCBzdWJ0cmFjdCBpdCBmcm9tIHRoZSBtYXhpbWFsIG5lZ2F0aXZlIG1hcmdpbiBmcm9t
IGJvdGggQSBhbmQgQiB0byBnZXQgdGhlCi0gICAgLy8gdHJ1ZSBjb2xsYXBzZWQgbWFyZ2luLiAg
VGhpcyBhbGdvcml0aG0gaXMgcmVjdXJzaXZlLCBzbyB3aGVuIHdlIGZpbmlzaCBsYXlvdXQoKQot
ICAgIC8vIG91ciBibG9jayBrbm93cyBpdHMgY3VycmVudCBtYXhpbWFsIHBvc2l0aXZlL25lZ2F0
aXZlIHZhbHVlcy4KLSAgICAvLwotICAgIC8vIFN0YXJ0IG91dCBieSBzZXR0aW5nIG91ciBtYXJn
aW4gdmFsdWVzIHRvIG91ciBjdXJyZW50IG1hcmdpbnMuICBUYWJsZSBjZWxscyBoYXZlCi0gICAg
Ly8gbm8gbWFyZ2lucywgc28gd2UgZG9uJ3QgZmlsbCBpbiB0aGUgdmFsdWVzIGZvciB0YWJsZSBj
ZWxscy4KLSAgICBib29sIGlzQ2VsbCA9IGlzVGFibGVDZWxsKCk7Ci0gICAgaWYgKCFpc0NlbGwp
IHsKLSAgICAgICAgaW5pdE1heE1hcmdpblZhbHVlcygpOwotICAgICAgICAKLSAgICAgICAgc2V0
SGFzTWFyZ2luQmVmb3JlUXVpcmsoc3R5bGVUb1VzZS0+aGFzTWFyZ2luQmVmb3JlUXVpcmsoKSk7
Ci0gICAgICAgIHNldEhhc01hcmdpbkFmdGVyUXVpcmsoc3R5bGVUb1VzZS0+aGFzTWFyZ2luQWZ0
ZXJRdWlyaygpKTsKLSAgICAgICAgc2V0UGFnaW5hdGlvblN0cnV0KDApOwotICAgIH0KLQotICAg
IExheW91dFVuaXQgcmVwYWludExvZ2ljYWxUb3AgPSAwOwotICAgIExheW91dFVuaXQgcmVwYWlu
dExvZ2ljYWxCb3R0b20gPSAwOwotICAgIExheW91dFVuaXQgbWF4RmxvYXRMb2dpY2FsQm90dG9t
ID0gMDsKLSAgICBpZiAoIWZpcnN0Q2hpbGQoKSAmJiAhaXNBbm9ueW1vdXNCbG9jaygpKQotICAg
ICAgICBzZXRDaGlsZHJlbklubGluZSh0cnVlKTsKLSAgICBpZiAoY2hpbGRyZW5JbmxpbmUoKSkK
LSAgICAgICAgbGF5b3V0SW5saW5lQ2hpbGRyZW4ocmVsYXlvdXRDaGlsZHJlbiwgcmVwYWludExv
Z2ljYWxUb3AsIHJlcGFpbnRMb2dpY2FsQm90dG9tKTsKLSAgICBlbHNlCi0gICAgICAgIGxheW91
dEJsb2NrQ2hpbGRyZW4ocmVsYXlvdXRDaGlsZHJlbiwgbWF4RmxvYXRMb2dpY2FsQm90dG9tKTsK
LQotICAgIC8vIEV4cGFuZCBvdXIgaW50cmluc2ljIGhlaWdodCB0byBlbmNvbXBhc3MgZmxvYXRz
LgotICAgIExheW91dFVuaXQgdG9BZGQgPSBib3JkZXJBbmRQYWRkaW5nQWZ0ZXIoKSArIHNjcm9s
bGJhckxvZ2ljYWxIZWlnaHQoKTsKLSAgICBpZiAobG93ZXN0RmxvYXRMb2dpY2FsQm90dG9tKCkg
PiAobG9naWNhbEhlaWdodCgpIC0gdG9BZGQpICYmIGV4cGFuZHNUb0VuY2xvc2VPdmVyaGFuZ2lu
Z0Zsb2F0cygpKQotICAgICAgICBzZXRMb2dpY2FsSGVpZ2h0KGxvd2VzdEZsb2F0TG9naWNhbEJv
dHRvbSgpICsgdG9BZGQpOwotICAgIAotICAgIGlmIChyZWxheW91dEZvclBhZ2luYXRpb24oaGFz
U3BlY2lmaWVkUGFnZUxvZ2ljYWxIZWlnaHQsIHBhZ2VMb2dpY2FsSGVpZ2h0LCBzdGF0ZVB1c2hl
cikgfHwgcmVsYXlvdXRUb0F2b2lkV2lkb3dzKHN0YXRlUHVzaGVyKSkgewotICAgICAgICBBU1NF
UlQoIXNob3VsZEJyZWFrQXRMaW5lVG9Bdm9pZFdpZG93KCkpOwotICAgICAgICByZXR1cm47Ci0g
ICAgfQotCi0gICAgLy8gQ2FsY3VsYXRlIG91ciBuZXcgaGVpZ2h0LgotICAgIExheW91dFVuaXQg
b2xkSGVpZ2h0ID0gbG9naWNhbEhlaWdodCgpOwotICAgIExheW91dFVuaXQgb2xkQ2xpZW50QWZ0
ZXJFZGdlID0gY2xpZW50TG9naWNhbEJvdHRvbSgpOwotCi0gICAgLy8gQmVmb3JlIHVwZGF0aW5n
IHRoZSBmaW5hbCBzaXplIG9mIHRoZSBmbG93IHRocmVhZCBtYWtlIHN1cmUgYSBmb3JjZWQgYnJl
YWsgaXMgYXBwbGllZCBhZnRlciB0aGUgY29udGVudC4KLSAgICAvLyBUaGlzIGVuc3VyZXMgdGhl
IHNpemUgaW5mb3JtYXRpb24gaXMgY29ycmVjdGx5IGNvbXB1dGVkIGZvciB0aGUgbGFzdCBhdXRv
LWhlaWdodCByZWdpb24gcmVjZWl2aW5nIGNvbnRlbnQuCi0gICAgaWYgKGlzUmVuZGVyRmxvd1Ro
cmVhZCgpKQotICAgICAgICB0b1JlbmRlckZsb3dUaHJlYWQodGhpcyktPmFwcGx5QnJlYWtBZnRl
ckNvbnRlbnQob2xkQ2xpZW50QWZ0ZXJFZGdlKTsKLQotICAgIHVwZGF0ZUxvZ2ljYWxIZWlnaHQo
KTsKLSAgICBMYXlvdXRVbml0IG5ld0hlaWdodCA9IGxvZ2ljYWxIZWlnaHQoKTsKLSAgICBpZiAo
b2xkSGVpZ2h0ICE9IG5ld0hlaWdodCkgewotICAgICAgICBpZiAob2xkSGVpZ2h0ID4gbmV3SGVp
Z2h0ICYmIG1heEZsb2F0TG9naWNhbEJvdHRvbSA+IG5ld0hlaWdodCAmJiAhY2hpbGRyZW5Jbmxp
bmUoKSkgewotICAgICAgICAgICAgLy8gT25lIG9mIG91ciBjaGlsZHJlbidzIGZsb2F0cyBtYXkg
aGF2ZSBiZWNvbWUgYW4gb3ZlcmhhbmdpbmcgZmxvYXQgZm9yIHVzLiBXZSBuZWVkIHRvIGxvb2sg
Zm9yIGl0LgotICAgICAgICAgICAgZm9yIChSZW5kZXJPYmplY3QqIGNoaWxkID0gZmlyc3RDaGls
ZCgpOyBjaGlsZDsgY2hpbGQgPSBjaGlsZC0+bmV4dFNpYmxpbmcoKSkgewotICAgICAgICAgICAg
ICAgIGlmIChjaGlsZC0+aXNSZW5kZXJCbG9ja0Zsb3coKSAmJiAhY2hpbGQtPmlzRmxvYXRpbmdP
ck91dE9mRmxvd1Bvc2l0aW9uZWQoKSkgewotICAgICAgICAgICAgICAgICAgICBSZW5kZXJCbG9j
ayogYmxvY2sgPSB0b1JlbmRlckJsb2NrKGNoaWxkKTsKLSAgICAgICAgICAgICAgICAgICAgaWYg
KGJsb2NrLT5sb3dlc3RGbG9hdExvZ2ljYWxCb3R0b20oKSArIGJsb2NrLT5sb2dpY2FsVG9wKCkg
PiBuZXdIZWlnaHQpCi0gICAgICAgICAgICAgICAgICAgICAgICBhZGRPdmVyaGFuZ2luZ0Zsb2F0
cyhibG9jaywgZmFsc2UpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAg
ICAgfQotICAgIH0KLQotICAgIGJvb2wgaGVpZ2h0Q2hhbmdlZCA9IChwcmV2aW91c0hlaWdodCAh
PSBuZXdIZWlnaHQpOwotICAgIGlmIChoZWlnaHRDaGFuZ2VkKQotICAgICAgICByZWxheW91dENo
aWxkcmVuID0gdHJ1ZTsKLQotICAgIGxheW91dFBvc2l0aW9uZWRPYmplY3RzKHJlbGF5b3V0Q2hp
bGRyZW4gfHwgaXNSb290KCkpOwotCi0gICAgdXBkYXRlU2hhcGVzQWZ0ZXJCbG9ja0xheW91dCho
ZWlnaHRDaGFuZ2VkKTsKLQotICAgIC8vIEFkZCBvdmVyZmxvdyBmcm9tIGNoaWxkcmVuICh1bmxl
c3Mgd2UncmUgbXVsdGktY29sdW1uLCBzaW5jZSBpbiB0aGF0IGNhc2UgYWxsIG91ciBjaGlsZCBv
dmVyZmxvdyBpcyBjbGlwcGVkIGFueXdheSkuCi0gICAgY29tcHV0ZU92ZXJmbG93KG9sZENsaWVu
dEFmdGVyRWRnZSk7Ci0gICAgCi0gICAgc3RhdGVQdXNoZXIucG9wKCk7Ci0KLSAgICBmaXRCb3Jk
ZXJUb0xpbmVzSWZOZWVkZWQoKTsKLQotICAgIGlmICh2aWV3KCkubGF5b3V0U3RhdGUoKS0+bV9w
YWdlTG9naWNhbEhlaWdodCkKLSAgICAgICAgc2V0UGFnZUxvZ2ljYWxPZmZzZXQodmlldygpLmxh
eW91dFN0YXRlKCktPnBhZ2VMb2dpY2FsT2Zmc2V0KHRoaXMsIGxvZ2ljYWxUb3AoKSkpOwotCi0g
ICAgdXBkYXRlTGF5ZXJUcmFuc2Zvcm0oKTsKLQotICAgIC8vIFVwZGF0ZSBvdXIgc2Nyb2xsIGlu
Zm9ybWF0aW9uIGlmIHdlJ3JlIG92ZXJmbG93OmF1dG8vc2Nyb2xsL2hpZGRlbiBub3cgdGhhdCB3
ZSBrbm93IGlmCi0gICAgLy8gd2Ugb3ZlcmZsb3cgb3Igbm90LgotICAgIHVwZGF0ZVNjcm9sbElu
Zm9BZnRlckxheW91dCgpOwotCi0gICAgLy8gRklYTUU6IFRoaXMgcmVwYWludCBsb2dpYyBzaG91
bGQgYmUgbW92ZWQgaW50byBhIHNlcGFyYXRlIGhlbHBlciBmdW5jdGlvbiEKLSAgICAvLyBSZXBh
aW50IHdpdGggb3VyIG5ldyBib3VuZHMgaWYgdGhleSBhcmUgZGlmZmVyZW50IGZyb20gb3VyIG9s
ZCBib3VuZHMuCi0gICAgYm9vbCBkaWRGdWxsUmVwYWludCA9IHJlcGFpbnRlci5yZXBhaW50QWZ0
ZXJMYXlvdXQoKTsKLSAgICBpZiAoIWRpZEZ1bGxSZXBhaW50ICYmIHJlcGFpbnRMb2dpY2FsVG9w
ICE9IHJlcGFpbnRMb2dpY2FsQm90dG9tICYmIChzdHlsZVRvVXNlLT52aXNpYmlsaXR5KCkgPT0g
VklTSUJMRSB8fCBlbmNsb3NpbmdMYXllcigpLT5oYXNWaXNpYmxlQ29udGVudCgpKSkgewotICAg
ICAgICAvLyBGSVhNRTogV2UgY291bGQgdGlnaHRlbiB1cCB0aGUgbGVmdCBhbmQgcmlnaHQgaW52
YWxpZGF0aW9uIHBvaW50cyBpZiB3ZSBsZXQgbGF5b3V0SW5saW5lQ2hpbGRyZW4gZmlsbCB0aGVt
IGluIGJhc2VkIG9mZiB0aGUgcGFydGljdWxhciBsaW5lcwotICAgICAgICAvLyBpdCBoYWQgdG8g
bGF5IG91dC4gIFdlIHdvdWxkbid0IG5lZWQgdGhlIGhhc092ZXJmbG93Q2xpcCgpIGhhY2sgaW4g
dGhhdCBjYXNlIGVpdGhlci4KLSAgICAgICAgTGF5b3V0VW5pdCByZXBhaW50TG9naWNhbExlZnQg
PSBsb2dpY2FsTGVmdFZpc3VhbE92ZXJmbG93KCk7Ci0gICAgICAgIExheW91dFVuaXQgcmVwYWlu
dExvZ2ljYWxSaWdodCA9IGxvZ2ljYWxSaWdodFZpc3VhbE92ZXJmbG93KCk7Ci0gICAgICAgIGlm
IChoYXNPdmVyZmxvd0NsaXAoKSkgewotICAgICAgICAgICAgLy8gSWYgd2UgaGF2ZSBjbGlwcGVk
IG92ZXJmbG93LCB3ZSBzaG91bGQgdXNlIGxheW91dCBvdmVyZmxvdyBhcyB3ZWxsLCBzaW5jZSB2
aXN1YWwgb3ZlcmZsb3cgZnJvbSBsaW5lcyBkaWRuJ3QgcHJvcGFnYXRlIHRvIG91ciBibG9jaydz
IG92ZXJmbG93LgotICAgICAgICAgICAgLy8gTm90ZSB0aGUgb2xkIGNvZGUgZGlkIHRoaXMgYXMg
d2VsbCBidXQgZXZlbiBmb3Igb3ZlcmZsb3c6dmlzaWJsZS4gIFRoZSBhZGRpdGlvbiBvZiBoYXNP
dmVyZmxvd0NsaXAoKSBhdCBsZWFzdCB0aWdodGVucyB1cCB0aGUgaGFjayBhIGJpdC4KLSAgICAg
ICAgICAgIC8vIGxheW91dElubGluZUNoaWxkcmVuIHNob3VsZCBiZSBwYXRjaGVkIHRvIGNvbXB1
dGUgdGhlIGVudGlyZSByZXBhaW50IHJlY3QuCi0gICAgICAgICAgICByZXBhaW50TG9naWNhbExl
ZnQgPSBtaW4ocmVwYWludExvZ2ljYWxMZWZ0LCBsb2dpY2FsTGVmdExheW91dE92ZXJmbG93KCkp
OwotICAgICAgICAgICAgcmVwYWludExvZ2ljYWxSaWdodCA9IG1heChyZXBhaW50TG9naWNhbFJp
Z2h0LCBsb2dpY2FsUmlnaHRMYXlvdXRPdmVyZmxvdygpKTsKLSAgICAgICAgfQotICAgICAgICAK
LSAgICAgICAgTGF5b3V0UmVjdCByZXBhaW50UmVjdDsKLSAgICAgICAgaWYgKGlzSG9yaXpvbnRh
bFdyaXRpbmdNb2RlKCkpCi0gICAgICAgICAgICByZXBhaW50UmVjdCA9IExheW91dFJlY3QocmVw
YWludExvZ2ljYWxMZWZ0LCByZXBhaW50TG9naWNhbFRvcCwgcmVwYWludExvZ2ljYWxSaWdodCAt
IHJlcGFpbnRMb2dpY2FsTGVmdCwgcmVwYWludExvZ2ljYWxCb3R0b20gLSByZXBhaW50TG9naWNh
bFRvcCk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIHJlcGFpbnRSZWN0ID0gTGF5b3V0UmVj
dChyZXBhaW50TG9naWNhbFRvcCwgcmVwYWludExvZ2ljYWxMZWZ0LCByZXBhaW50TG9naWNhbEJv
dHRvbSAtIHJlcGFpbnRMb2dpY2FsVG9wLCByZXBhaW50TG9naWNhbFJpZ2h0IC0gcmVwYWludExv
Z2ljYWxMZWZ0KTsKLQotICAgICAgICAvLyBUaGUgcmVwYWludCByZWN0IG1heSBiZSBzcGxpdCBh
Y3Jvc3MgY29sdW1ucywgaW4gd2hpY2ggY2FzZSBhZGp1c3RSZWN0Rm9yQ29sdW1ucygpIHdpbGwg
cmV0dXJuIHRoZSB1bmlvbi4KLSAgICAgICAgYWRqdXN0UmVjdEZvckNvbHVtbnMocmVwYWludFJl
Y3QpOwotCi0gICAgICAgIHJlcGFpbnRSZWN0LmluZmxhdGUobWF4aW1hbE91dGxpbmVTaXplKFBh
aW50UGhhc2VPdXRsaW5lKSk7Ci0gICAgICAgIAotICAgICAgICBpZiAoaGFzT3ZlcmZsb3dDbGlw
KCkpIHsKLSAgICAgICAgICAgIC8vIEFkanVzdCByZXBhaW50IHJlY3QgZm9yIHNjcm9sbCBvZmZz
ZXQKLSAgICAgICAgICAgIHJlcGFpbnRSZWN0Lm1vdmUoLXNjcm9sbGVkQ29udGVudE9mZnNldCgp
KTsKLQotICAgICAgICAgICAgLy8gRG9uJ3QgYWxsb3cgdGhpcyByZWN0IHRvIHNwaWxsIG91dCBv
ZiBvdXIgb3ZlcmZsb3cgYm94LgotICAgICAgICAgICAgcmVwYWludFJlY3QuaW50ZXJzZWN0KExh
eW91dFJlY3QoTGF5b3V0UG9pbnQoKSwgc2l6ZSgpKSk7Ci0gICAgICAgIH0KLQotICAgICAgICAv
LyBNYWtlIHN1cmUgdGhlIHJlY3QgaXMgc3RpbGwgbm9uLWVtcHR5IGFmdGVyIGludGVyc2VjdGlu
ZyBmb3Igb3ZlcmZsb3cgYWJvdmUKLSAgICAgICAgaWYgKCFyZXBhaW50UmVjdC5pc0VtcHR5KCkp
IHsKLSAgICAgICAgICAgIHJlcGFpbnRSZWN0YW5nbGUocmVwYWludFJlY3QpOyAvLyBXZSBuZWVk
IHRvIGRvIGEgcGFydGlhbCByZXBhaW50IG9mIG91ciBjb250ZW50LgotICAgICAgICAgICAgaWYg
KGhhc1JlZmxlY3Rpb24oKSkKLSAgICAgICAgICAgICAgICByZXBhaW50UmVjdGFuZ2xlKHJlZmxl
Y3RlZFJlY3QocmVwYWludFJlY3QpKTsKLSAgICAgICAgfQotICAgIH0KLQorICAgIEFTU0VSVF9O
T1RfUkVBQ0hFRCgpOwogICAgIHNldE5lZWRzTGF5b3V0KGZhbHNlKTsKIH0KIApAQCAtMjU5OCw2
MSArMjQzNSw2IEBAIHZvaWQgUmVuZGVyQmxvY2s6OmRpcnR5Rm9yTGF5b3V0RnJvbVBlcmMKICAg
ICB9CiB9CiAKLXZvaWQgUmVuZGVyQmxvY2s6OmxheW91dEJsb2NrQ2hpbGRyZW4oYm9vbCByZWxh
eW91dENoaWxkcmVuLCBMYXlvdXRVbml0JiBtYXhGbG9hdExvZ2ljYWxCb3R0b20pCi17Ci0gICAg
ZGlydHlGb3JMYXlvdXRGcm9tUGVyY2VudGFnZUhlaWdodERlc2NlbmRhbnRzKCk7Ci0KLSAgICBM
YXlvdXRVbml0IGJlZm9yZUVkZ2UgPSBib3JkZXJBbmRQYWRkaW5nQmVmb3JlKCk7Ci0gICAgTGF5
b3V0VW5pdCBhZnRlckVkZ2UgPSBib3JkZXJBbmRQYWRkaW5nQWZ0ZXIoKSArIHNjcm9sbGJhckxv
Z2ljYWxIZWlnaHQoKTsKLQotICAgIHNldExvZ2ljYWxIZWlnaHQoYmVmb3JlRWRnZSk7Ci0gICAg
Ci0gICAgLy8gTGF5IG91dCBvdXIgaHlwb3RoZXRpY2FsIGdyaWQgbGluZSBhcyB0aG91Z2ggaXQg
b2NjdXJzIGF0IHRoZSB0b3Agb2YgdGhlIGJsb2NrLgotICAgIGlmICh2aWV3KCkubGF5b3V0U3Rh
dGUoKS0+bGluZUdyaWQoKSA9PSB0aGlzKQotICAgICAgICBsYXlvdXRMaW5lR3JpZEJveCgpOwot
Ci0gICAgLy8gVGhlIG1hcmdpbiBzdHJ1Y3QgY2FjaGVzIGFsbCBvdXIgY3VycmVudCBtYXJnaW4g
Y29sbGFwc2luZyBzdGF0ZS4gIFRoZSBjb21wYWN0IHN0cnVjdCBjYWNoZXMgc3RhdGUgd2hlbiB3
ZSBlbmNvdW50ZXIgY29tcGFjdHMsCi0gICAgTWFyZ2luSW5mbyBtYXJnaW5JbmZvKHRoaXMsIGJl
Zm9yZUVkZ2UsIGFmdGVyRWRnZSk7Ci0KLSAgICAvLyBGaWVsZHNldHMgbmVlZCB0byBmaW5kIHRo
ZWlyIGxlZ2VuZCBhbmQgcG9zaXRpb24gaXQgaW5zaWRlIHRoZSBib3JkZXIgb2YgdGhlIG9iamVj
dC4KLSAgICAvLyBUaGUgbGVnZW5kIHRoZW4gZ2V0cyBza2lwcGVkIGR1cmluZyBub3JtYWwgbGF5
b3V0LiAgVGhlIHNhbWUgaXMgdHJ1ZSBmb3IgcnVieSB0ZXh0LgotICAgIC8vIEl0IGRvZXNuJ3Qg
Z2V0IGluY2x1ZGVkIGluIHRoZSBub3JtYWwgbGF5b3V0IHByb2Nlc3MgYnV0IGlzIGluc3RlYWQg
c2tpcHBlZC4KLSAgICBSZW5kZXJPYmplY3QqIGNoaWxkVG9FeGNsdWRlID0gbGF5b3V0U3BlY2lh
bEV4Y2x1ZGVkQ2hpbGQocmVsYXlvdXRDaGlsZHJlbik7Ci0KLSAgICBMYXlvdXRVbml0IHByZXZp
b3VzRmxvYXRMb2dpY2FsQm90dG9tID0gMDsKLSAgICBtYXhGbG9hdExvZ2ljYWxCb3R0b20gPSAw
OwotCi0gICAgUmVuZGVyQm94KiBuZXh0ID0gZmlyc3RDaGlsZEJveCgpOwotCi0gICAgd2hpbGUg
KG5leHQpIHsKLSAgICAgICAgUmVuZGVyQm94KiBjaGlsZCA9IG5leHQ7Ci0gICAgICAgIG5leHQg
PSBjaGlsZC0+bmV4dFNpYmxpbmdCb3goKTsKLQotICAgICAgICBpZiAoY2hpbGRUb0V4Y2x1ZGUg
PT0gY2hpbGQpCi0gICAgICAgICAgICBjb250aW51ZTsgLy8gU2tpcCB0aGlzIGNoaWxkLCBzaW5j
ZSBpdCB3aWxsIGJlIHBvc2l0aW9uZWQgYnkgdGhlIHNwZWNpYWxpemVkIHN1YmNsYXNzIChmaWVs
ZHNldHMgYW5kIHJ1YnkgcnVucykuCi0KLSAgICAgICAgdXBkYXRlQmxvY2tDaGlsZERpcnR5Qml0
c0JlZm9yZUxheW91dChyZWxheW91dENoaWxkcmVuLCBjaGlsZCk7Ci0KLSAgICAgICAgaWYgKGNo
aWxkLT5pc091dE9mRmxvd1Bvc2l0aW9uZWQoKSkgewotICAgICAgICAgICAgY2hpbGQtPmNvbnRh
aW5pbmdCbG9jaygpLT5pbnNlcnRQb3NpdGlvbmVkT2JqZWN0KGNoaWxkKTsKLSAgICAgICAgICAg
IGFkanVzdFBvc2l0aW9uZWRCbG9jayhjaGlsZCwgbWFyZ2luSW5mbyk7Ci0gICAgICAgICAgICBj
b250aW51ZTsKLSAgICAgICAgfQotICAgICAgICBpZiAoY2hpbGQtPmlzRmxvYXRpbmcoKSkgewot
ICAgICAgICAgICAgaW5zZXJ0RmxvYXRpbmdPYmplY3QoY2hpbGQpOwotICAgICAgICAgICAgYWRq
dXN0RmxvYXRpbmdCbG9jayhtYXJnaW5JbmZvKTsKLSAgICAgICAgICAgIGNvbnRpbnVlOwotICAg
ICAgICB9Ci0KLSAgICAgICAgLy8gTGF5IG91dCB0aGUgY2hpbGQuCi0gICAgICAgIGxheW91dEJs
b2NrQ2hpbGQoY2hpbGQsIG1hcmdpbkluZm8sIHByZXZpb3VzRmxvYXRMb2dpY2FsQm90dG9tLCBt
YXhGbG9hdExvZ2ljYWxCb3R0b20pOwotICAgIH0KLSAgICAKLSAgICAvLyBOb3cgZG8gdGhlIGhh
bmRsaW5nIG9mIHRoZSBib3R0b20gb2YgdGhlIGJsb2NrLCBhZGRpbmcgaW4gb3VyIGJvdHRvbSBi
b3JkZXIvcGFkZGluZyBhbmQKLSAgICAvLyBkZXRlcm1pbmluZyB0aGUgY29ycmVjdCBjb2xsYXBz
ZWQgYm90dG9tIG1hcmdpbiBpbmZvcm1hdGlvbi4KLSAgICBoYW5kbGVBZnRlclNpZGVPZkJsb2Nr
KGJlZm9yZUVkZ2UsIGFmdGVyRWRnZSwgbWFyZ2luSW5mbyk7Ci19Ci0KIHZvaWQgUmVuZGVyQmxv
Y2s6OmxheW91dEJsb2NrQ2hpbGQoUmVuZGVyQm94KiBjaGlsZCwgTWFyZ2luSW5mbyYgbWFyZ2lu
SW5mbywgTGF5b3V0VW5pdCYgcHJldmlvdXNGbG9hdExvZ2ljYWxCb3R0b20sIExheW91dFVuaXQm
IG1heEZsb2F0TG9naWNhbEJvdHRvbSkKIHsKICAgICBMYXlvdXRVbml0IG9sZFBvc01hcmdpbkJl
Zm9yZSA9IG1heFBvc2l0aXZlTWFyZ2luQmVmb3JlKCk7CkBAIC00NzQzLDE1MyArNDUyNSw2IEBA
IHZvaWQgUmVuZGVyQmxvY2s6Om1hcmtMaW5lc0RpcnR5SW5CbG9ja1IKICAgICB9CiB9CiAKLXZv
aWQgUmVuZGVyQmxvY2s6OmNsZWFyRmxvYXRzKCkKLXsKLSAgICBpZiAobV9mbG9hdGluZ09iamVj
dHMpCi0gICAgICAgIG1fZmxvYXRpbmdPYmplY3RzLT5zZXRIb3Jpem9udGFsV3JpdGluZ01vZGUo
aXNIb3Jpem9udGFsV3JpdGluZ01vZGUoKSk7Ci0KLSAgICBIYXNoU2V0PFJlbmRlckJveCo+IG9s
ZEludHJ1ZGluZ0Zsb2F0U2V0OwotICAgIGlmICghY2hpbGRyZW5JbmxpbmUoKSAmJiBtX2Zsb2F0
aW5nT2JqZWN0cykgewotICAgICAgICBjb25zdCBGbG9hdGluZ09iamVjdFNldCYgZmxvYXRpbmdP
YmplY3RTZXQgPSBtX2Zsb2F0aW5nT2JqZWN0cy0+c2V0KCk7Ci0gICAgICAgIEZsb2F0aW5nT2Jq
ZWN0U2V0SXRlcmF0b3IgZW5kID0gZmxvYXRpbmdPYmplY3RTZXQuZW5kKCk7Ci0gICAgICAgIGZv
ciAoRmxvYXRpbmdPYmplY3RTZXRJdGVyYXRvciBpdCA9IGZsb2F0aW5nT2JqZWN0U2V0LmJlZ2lu
KCk7IGl0ICE9IGVuZDsgKytpdCkgewotICAgICAgICAgICAgRmxvYXRpbmdPYmplY3QqIGZsb2F0
aW5nT2JqZWN0ID0gKml0OwotICAgICAgICAgICAgaWYgKCFmbG9hdGluZ09iamVjdC0+aXNEZXNj
ZW5kYW50KCkpCi0gICAgICAgICAgICAgICAgb2xkSW50cnVkaW5nRmxvYXRTZXQuYWRkKGZsb2F0
aW5nT2JqZWN0LT5yZW5kZXJlcigpKTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIC8vIElubGlu
ZSBibG9ja3MgYXJlIGNvdmVyZWQgYnkgdGhlIGlzUmVwbGFjZWQoKSBjaGVjayBpbiB0aGUgYXZv
aWRGbG9hdHMgbWV0aG9kLgotICAgIGlmIChhdm9pZHNGbG9hdHMoKSB8fCBpc1Jvb3QoKSB8fCBp
c1JlbmRlclZpZXcoKSB8fCBpc0Zsb2F0aW5nT3JPdXRPZkZsb3dQb3NpdGlvbmVkKCkgfHwgaXNU
YWJsZUNlbGwoKSkgewotICAgICAgICBpZiAobV9mbG9hdGluZ09iamVjdHMpIHsKLSAgICAgICAg
ICAgIGRlbGV0ZUFsbFZhbHVlcyhtX2Zsb2F0aW5nT2JqZWN0cy0+c2V0KCkpOwotICAgICAgICAg
ICAgbV9mbG9hdGluZ09iamVjdHMtPmNsZWFyKCk7Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKCFv
bGRJbnRydWRpbmdGbG9hdFNldC5pc0VtcHR5KCkpCi0gICAgICAgICAgICBtYXJrQWxsRGVzY2Vu
ZGFudHNXaXRoRmxvYXRzRm9yTGF5b3V0KCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAg
ICB0eXBlZGVmIEhhc2hNYXA8UmVuZGVyT2JqZWN0KiwgRmxvYXRpbmdPYmplY3QqPiBSZW5kZXJl
clRvRmxvYXRJbmZvTWFwOwotICAgIFJlbmRlcmVyVG9GbG9hdEluZm9NYXAgZmxvYXRNYXA7Ci0K
LSAgICBpZiAobV9mbG9hdGluZ09iamVjdHMpIHsKLSAgICAgICAgY29uc3QgRmxvYXRpbmdPYmpl
Y3RTZXQmIGZsb2F0aW5nT2JqZWN0U2V0ID0gbV9mbG9hdGluZ09iamVjdHMtPnNldCgpOwotICAg
ICAgICBpZiAoY2hpbGRyZW5JbmxpbmUoKSkgewotICAgICAgICAgICAgRmxvYXRpbmdPYmplY3RT
ZXRJdGVyYXRvciBlbmQgPSBmbG9hdGluZ09iamVjdFNldC5lbmQoKTsKLSAgICAgICAgICAgIGZv
ciAoRmxvYXRpbmdPYmplY3RTZXRJdGVyYXRvciBpdCA9IGZsb2F0aW5nT2JqZWN0U2V0LmJlZ2lu
KCk7IGl0ICE9IGVuZDsgKytpdCkgewotICAgICAgICAgICAgICAgIEZsb2F0aW5nT2JqZWN0KiBm
ID0gKml0OwotICAgICAgICAgICAgICAgIGZsb2F0TWFwLmFkZChmLT5yZW5kZXJlcigpLCBmKTsK
LSAgICAgICAgICAgIH0KLSAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICBkZWxldGVBbGxWYWx1
ZXMoZmxvYXRpbmdPYmplY3RTZXQpOwotICAgICAgICBtX2Zsb2F0aW5nT2JqZWN0cy0+Y2xlYXIo
KTsKLSAgICB9Ci0KLSAgICAvLyBXZSBzaG91bGQgbm90IHByb2Nlc3MgZmxvYXRzIGlmIHRoZSBw
YXJlbnQgbm9kZSBpcyBub3QgYSBSZW5kZXJCbG9jay4gT3RoZXJ3aXNlLCB3ZSB3aWxsIGFkZCAK
LSAgICAvLyBmbG9hdHMgaW4gYW4gaW52YWxpZCBjb250ZXh0LiBUaGlzIHdpbGwgY2F1c2UgYSBj
cmFzaCBhcmlzaW5nIGZyb20gYSBiYWQgY2FzdCBvbiB0aGUgcGFyZW50LgotICAgIC8vIFNlZSA8
cmRhcjovL3Byb2JsZW0vODA0OTc1Mz4sIHdoZXJlIGZsb2F0IHByb3BlcnR5IGlzIGFwcGxpZWQg
b24gYSB0ZXh0IG5vZGUgaW4gYSBTVkcuCi0gICAgaWYgKCFwYXJlbnQoKSB8fCAhcGFyZW50KCkt
PmlzUmVuZGVyQmxvY2soKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgLy8gQXR0ZW1wdCB0byBs
b2NhdGUgYSBwcmV2aW91cyBzaWJsaW5nIHdpdGggb3ZlcmhhbmdpbmcgZmxvYXRzLiAgV2Ugc2tp
cCBhbnkgZWxlbWVudHMgdGhhdCBhcmUKLSAgICAvLyBvdXQgb2YgZmxvdyAobGlrZSBmbG9hdGlu
Zy9wb3NpdGlvbmVkIGVsZW1lbnRzKSwgYW5kIHdlIGFsc28gc2tpcCBvdmVyIGFueSBvYmplY3Rz
IHRoYXQgbWF5IGhhdmUgc2hpZnRlZAotICAgIC8vIHRvIGF2b2lkIGZsb2F0cy4KLSAgICBSZW5k
ZXJCbG9jayogcGFyZW50QmxvY2sgPSB0b1JlbmRlckJsb2NrKHBhcmVudCgpKTsKLSAgICBib29s
IHBhcmVudEhhc0Zsb2F0cyA9IGZhbHNlOwotICAgIFJlbmRlck9iamVjdCogcHJldiA9IHByZXZp
b3VzU2libGluZygpOwotICAgIHdoaWxlIChwcmV2ICYmIChwcmV2LT5pc0Zsb2F0aW5nT3JPdXRP
ZkZsb3dQb3NpdGlvbmVkKCkgfHwgIXByZXYtPmlzQm94KCkgfHwgIXByZXYtPmlzUmVuZGVyQmxv
Y2soKSB8fCB0b1JlbmRlckJsb2NrKHByZXYpLT5hdm9pZHNGbG9hdHMoKSkpIHsKLSAgICAgICAg
aWYgKHByZXYtPmlzRmxvYXRpbmcoKSkKLSAgICAgICAgICAgIHBhcmVudEhhc0Zsb2F0cyA9IHRy
dWU7Ci0gICAgICAgIHByZXYgPSBwcmV2LT5wcmV2aW91c1NpYmxpbmcoKTsKLSAgICB9Ci0KLSAg
ICAvLyBGaXJzdCBhZGQgaW4gZmxvYXRzIGZyb20gdGhlIHBhcmVudC4KLSAgICBMYXlvdXRVbml0
IGxvZ2ljYWxUb3BPZmZzZXQgPSBsb2dpY2FsVG9wKCk7Ci0gICAgaWYgKHBhcmVudEhhc0Zsb2F0
cykKLSAgICAgICAgYWRkSW50cnVkaW5nRmxvYXRzKHBhcmVudEJsb2NrLCBwYXJlbnRCbG9jay0+
bG9naWNhbExlZnRPZmZzZXRGb3JDb250ZW50KCksIGxvZ2ljYWxUb3BPZmZzZXQpOwotICAgIAot
ICAgIExheW91dFVuaXQgbG9naWNhbExlZnRPZmZzZXQgPSAwOwotICAgIGlmIChwcmV2KQotICAg
ICAgICBsb2dpY2FsVG9wT2Zmc2V0IC09IHRvUmVuZGVyQm94KHByZXYpLT5sb2dpY2FsVG9wKCk7
Ci0gICAgZWxzZSB7Ci0gICAgICAgIHByZXYgPSBwYXJlbnRCbG9jazsKLSAgICAgICAgbG9naWNh
bExlZnRPZmZzZXQgKz0gcGFyZW50QmxvY2stPmxvZ2ljYWxMZWZ0T2Zmc2V0Rm9yQ29udGVudCgp
OwotICAgIH0KLQotICAgIC8vIEFkZCBvdmVyaGFuZ2luZyBmbG9hdHMgZnJvbSB0aGUgcHJldmlv
dXMgUmVuZGVyQmxvY2ssIGJ1dCBvbmx5IGlmIGl0IGhhcyBhIGZsb2F0IHRoYXQgaW50cnVkZXMg
aW50byBvdXIgc3BhY2UuICAgIAotICAgIFJlbmRlckJsb2NrKiBibG9jayA9IHRvUmVuZGVyQmxv
Y2socHJldik7Ci0gICAgaWYgKGJsb2NrLT5tX2Zsb2F0aW5nT2JqZWN0cyAmJiBibG9jay0+bG93
ZXN0RmxvYXRMb2dpY2FsQm90dG9tKCkgPiBsb2dpY2FsVG9wT2Zmc2V0KQotICAgICAgICBhZGRJ
bnRydWRpbmdGbG9hdHMoYmxvY2ssIGxvZ2ljYWxMZWZ0T2Zmc2V0LCBsb2dpY2FsVG9wT2Zmc2V0
KTsKLQotICAgIGlmIChjaGlsZHJlbklubGluZSgpKSB7Ci0gICAgICAgIExheW91dFVuaXQgY2hh
bmdlTG9naWNhbFRvcCA9IExheW91dFVuaXQ6Om1heCgpOwotICAgICAgICBMYXlvdXRVbml0IGNo
YW5nZUxvZ2ljYWxCb3R0b20gPSBMYXlvdXRVbml0OjptaW4oKTsKLSAgICAgICAgaWYgKG1fZmxv
YXRpbmdPYmplY3RzKSB7Ci0gICAgICAgICAgICBjb25zdCBGbG9hdGluZ09iamVjdFNldCYgZmxv
YXRpbmdPYmplY3RTZXQgPSBtX2Zsb2F0aW5nT2JqZWN0cy0+c2V0KCk7Ci0gICAgICAgICAgICBG
bG9hdGluZ09iamVjdFNldEl0ZXJhdG9yIGVuZCA9IGZsb2F0aW5nT2JqZWN0U2V0LmVuZCgpOwot
ICAgICAgICAgICAgZm9yIChGbG9hdGluZ09iamVjdFNldEl0ZXJhdG9yIGl0ID0gZmxvYXRpbmdP
YmplY3RTZXQuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7Ci0gICAgICAgICAgICAgICAgRmxv
YXRpbmdPYmplY3QqIGYgPSAqaXQ7Ci0gICAgICAgICAgICAgICAgRmxvYXRpbmdPYmplY3QqIG9s
ZEZsb2F0aW5nT2JqZWN0ID0gZmxvYXRNYXAuZ2V0KGYtPnJlbmRlcmVyKCkpOwotICAgICAgICAg
ICAgICAgIExheW91dFVuaXQgbG9naWNhbEJvdHRvbSA9IGYtPmxvZ2ljYWxCb3R0b20oaXNIb3Jp
em9udGFsV3JpdGluZ01vZGUoKSk7Ci0gICAgICAgICAgICAgICAgaWYgKG9sZEZsb2F0aW5nT2Jq
ZWN0KSB7Ci0gICAgICAgICAgICAgICAgICAgIExheW91dFVuaXQgb2xkTG9naWNhbEJvdHRvbSA9
IG9sZEZsb2F0aW5nT2JqZWN0LT5sb2dpY2FsQm90dG9tKGlzSG9yaXpvbnRhbFdyaXRpbmdNb2Rl
KCkpOwotICAgICAgICAgICAgICAgICAgICBpZiAoZi0+bG9naWNhbFdpZHRoKGlzSG9yaXpvbnRh
bFdyaXRpbmdNb2RlKCkpICE9IG9sZEZsb2F0aW5nT2JqZWN0LT5sb2dpY2FsV2lkdGgoaXNIb3Jp
em9udGFsV3JpdGluZ01vZGUoKSkgfHwgZi0+bG9naWNhbExlZnQoaXNIb3Jpem9udGFsV3JpdGlu
Z01vZGUoKSkgIT0gb2xkRmxvYXRpbmdPYmplY3QtPmxvZ2ljYWxMZWZ0KGlzSG9yaXpvbnRhbFdy
aXRpbmdNb2RlKCkpKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBjaGFuZ2VMb2dpY2FsVG9w
ID0gMDsKLSAgICAgICAgICAgICAgICAgICAgICAgIGNoYW5nZUxvZ2ljYWxCb3R0b20gPSBtYXgo
Y2hhbmdlTG9naWNhbEJvdHRvbSwgbWF4KGxvZ2ljYWxCb3R0b20sIG9sZExvZ2ljYWxCb3R0b20p
KTsKLSAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgICAg
IGlmIChsb2dpY2FsQm90dG9tICE9IG9sZExvZ2ljYWxCb3R0b20pIHsKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBjaGFuZ2VMb2dpY2FsVG9wID0gbWluKGNoYW5nZUxvZ2ljYWxUb3AsIG1p
bihsb2dpY2FsQm90dG9tLCBvbGRMb2dpY2FsQm90dG9tKSk7Ci0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgY2hhbmdlTG9naWNhbEJvdHRvbSA9IG1heChjaGFuZ2VMb2dpY2FsQm90dG9tLCBt
YXgobG9naWNhbEJvdHRvbSwgb2xkTG9naWNhbEJvdHRvbSkpOwotICAgICAgICAgICAgICAgICAg
ICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgTGF5b3V0VW5pdCBsb2dpY2FsVG9wID0g
Zi0+bG9naWNhbFRvcChpc0hvcml6b250YWxXcml0aW5nTW9kZSgpKTsKLSAgICAgICAgICAgICAg
ICAgICAgICAgIExheW91dFVuaXQgb2xkTG9naWNhbFRvcCA9IG9sZEZsb2F0aW5nT2JqZWN0LT5s
b2dpY2FsVG9wKGlzSG9yaXpvbnRhbFdyaXRpbmdNb2RlKCkpOwotICAgICAgICAgICAgICAgICAg
ICAgICAgaWYgKGxvZ2ljYWxUb3AgIT0gb2xkTG9naWNhbFRvcCkgewotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGNoYW5nZUxvZ2ljYWxUb3AgPSBtaW4oY2hhbmdlTG9naWNhbFRvcCwgbWlu
KGxvZ2ljYWxUb3AsIG9sZExvZ2ljYWxUb3ApKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBjaGFuZ2VMb2dpY2FsQm90dG9tID0gbWF4KGNoYW5nZUxvZ2ljYWxCb3R0b20sIG1heChsb2dp
Y2FsVG9wLCBvbGRMb2dpY2FsVG9wKSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAg
ICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgICAgICBmbG9hdE1hcC5yZW1vdmUo
Zi0+cmVuZGVyZXIoKSk7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChvbGRGbG9hdGluZ09iamVj
dC0+b3JpZ2luYXRpbmdMaW5lKCkgJiYgIXNlbGZOZWVkc0xheW91dCgpKSB7Ci0gICAgICAgICAg
ICAgICAgICAgICAgICBBU1NFUlQoJm9sZEZsb2F0aW5nT2JqZWN0LT5vcmlnaW5hdGluZ0xpbmUo
KS0+cmVuZGVyZXIoKSA9PSB0aGlzKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIG9sZEZsb2F0
aW5nT2JqZWN0LT5vcmlnaW5hdGluZ0xpbmUoKS0+bWFya0RpcnR5KCk7Ci0gICAgICAgICAgICAg
ICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgZGVsZXRlIG9sZEZsb2F0aW5nT2JqZWN0Owot
ICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgIGNoYW5nZUxvZ2lj
YWxUb3AgPSAwOwotICAgICAgICAgICAgICAgICAgICBjaGFuZ2VMb2dpY2FsQm90dG9tID0gbWF4
KGNoYW5nZUxvZ2ljYWxCb3R0b20sIGxvZ2ljYWxCb3R0b20pOwotICAgICAgICAgICAgICAgIH0K
LSAgICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIFJlbmRlcmVyVG9GbG9hdEluZm9N
YXA6Oml0ZXJhdG9yIGVuZCA9IGZsb2F0TWFwLmVuZCgpOwotICAgICAgICBmb3IgKFJlbmRlcmVy
VG9GbG9hdEluZm9NYXA6Oml0ZXJhdG9yIGl0ID0gZmxvYXRNYXAuYmVnaW4oKTsgaXQgIT0gZW5k
OyArK2l0KSB7Ci0gICAgICAgICAgICBGbG9hdGluZ09iamVjdCogZmxvYXRpbmdPYmplY3QgPSAo
Kml0KS52YWx1ZTsKLSAgICAgICAgICAgIGlmICghZmxvYXRpbmdPYmplY3QtPmlzRGVzY2VuZGFu
dCgpKSB7Ci0gICAgICAgICAgICAgICAgY2hhbmdlTG9naWNhbFRvcCA9IDA7Ci0gICAgICAgICAg
ICAgICAgY2hhbmdlTG9naWNhbEJvdHRvbSA9IG1heChjaGFuZ2VMb2dpY2FsQm90dG9tLCBmbG9h
dGluZ09iamVjdC0+bG9naWNhbEJvdHRvbShpc0hvcml6b250YWxXcml0aW5nTW9kZSgpKSk7Ci0g
ICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgZGVsZXRlQWxsVmFsdWVzKGZsb2F0TWFw
KTsKLQotICAgICAgICBtYXJrTGluZXNEaXJ0eUluQmxvY2tSYW5nZShjaGFuZ2VMb2dpY2FsVG9w
LCBjaGFuZ2VMb2dpY2FsQm90dG9tKTsKLSAgICB9IGVsc2UgaWYgKCFvbGRJbnRydWRpbmdGbG9h
dFNldC5pc0VtcHR5KCkpIHsKLSAgICAgICAgLy8gSWYgdGhlcmUgYXJlIHByZXZpb3VzbHkgaW50
cnVkaW5nIGZsb2F0cyB0aGF0IG5vIGxvbmdlciBpbnRydWRlLCB0aGVuIGNoaWxkcmVuIHdpdGgg
ZmxvYXRzCi0gICAgICAgIC8vIHNob3VsZCBhbHNvIGdldCBsYXlvdXQgYmVjYXVzZSB0aGV5IG1p
Z2h0IG5lZWQgdGhlaXIgZmxvYXRpbmcgb2JqZWN0IGxpc3RzIGNsZWFyZWQuCi0gICAgICAgIGlm
IChtX2Zsb2F0aW5nT2JqZWN0cy0+c2V0KCkuc2l6ZSgpIDwgb2xkSW50cnVkaW5nRmxvYXRTZXQu
c2l6ZSgpKQotICAgICAgICAgICAgbWFya0FsbERlc2NlbmRhbnRzV2l0aEZsb2F0c0ZvckxheW91
dCgpOwotICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgIGNvbnN0IEZsb2F0aW5nT2JqZWN0U2V0
JiBmbG9hdGluZ09iamVjdFNldCA9IG1fZmxvYXRpbmdPYmplY3RzLT5zZXQoKTsKLSAgICAgICAg
ICAgIEZsb2F0aW5nT2JqZWN0U2V0SXRlcmF0b3IgZW5kID0gZmxvYXRpbmdPYmplY3RTZXQuZW5k
KCk7Ci0gICAgICAgICAgICBmb3IgKEZsb2F0aW5nT2JqZWN0U2V0SXRlcmF0b3IgaXQgPSBmbG9h
dGluZ09iamVjdFNldC5iZWdpbigpOyBpdCAhPSBlbmQgJiYgIW9sZEludHJ1ZGluZ0Zsb2F0U2V0
LmlzRW1wdHkoKTsgKytpdCkKLSAgICAgICAgICAgICAgICBvbGRJbnRydWRpbmdGbG9hdFNldC5y
ZW1vdmUoKCppdCktPnJlbmRlcmVyKCkpOwotICAgICAgICAgICAgaWYgKCFvbGRJbnRydWRpbmdG
bG9hdFNldC5pc0VtcHR5KCkpCi0gICAgICAgICAgICAgICAgbWFya0FsbERlc2NlbmRhbnRzV2l0
aEZsb2F0c0ZvckxheW91dCgpOwotICAgICAgICB9Ci0gICAgfQotfQotCiBMYXlvdXRVbml0IFJl
bmRlckJsb2NrOjphZGRPdmVyaGFuZ2luZ0Zsb2F0cyhSZW5kZXJCbG9jayogY2hpbGQsIGJvb2wg
bWFrZUNoaWxkUGFpbnRPdGhlckZsb2F0cykKIHsKICAgICAvLyBQcmV2ZW50IGZsb2F0cyBmcm9t
IGJlaW5nIGFkZGVkIHRvIHRoZSBjYW52YXMgYnkgdGhlIHJvb3QgZWxlbWVudCwgZS5nLiwgPGh0
bWw+LgpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJsb2NrLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJsb2NrLmgJKHJldmlzaW9u
IDE1NTM2NSkKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCbG9jay5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC01ODcsMTcgKzU4Nyw2IEBAIHByb3RlY3RlZDoKIAogICAgIHZpcnR1YWwg
dm9pZCBhZGRGb2N1c1JpbmdSZWN0cyhWZWN0b3I8SW50UmVjdD4mLCBjb25zdCBMYXlvdXRQb2lu
dCYgYWRkaXRpb25hbE9mZnNldCwgY29uc3QgUmVuZGVyTGF5ZXJNb2RlbE9iamVjdCogcGFpbnRD
b250YWluZXIgPSAwKSBPVkVSUklERTsKIAotI2lmIEVOQUJMRShTVkcpCi0gICAgLy8gT25seSB1
c2VkIGJ5IFJlbmRlclNWR1RleHQsIHdoaWNoIGV4cGxpY2l0ZWx5IG92ZXJyaWRlcyBSZW5kZXJC
bG9jazo6bGF5b3V0QmxvY2soKSwgZG8gTk9UIHVzZSBmb3IgYW55dGhpbmcgZWxzZS4KLSAgICB2
b2lkIGZvcmNlTGF5b3V0SW5saW5lQ2hpbGRyZW4oKQotICAgIHsKLSAgICAgICAgTGF5b3V0VW5p
dCByZXBhaW50TG9naWNhbFRvcCA9IDA7Ci0gICAgICAgIExheW91dFVuaXQgcmVwYWludExvZ2lj
YWxCb3R0b20gPSAwOwotICAgICAgICBjbGVhckZsb2F0cygpOwotICAgICAgICBsYXlvdXRJbmxp
bmVDaGlsZHJlbih0cnVlLCByZXBhaW50TG9naWNhbFRvcCwgcmVwYWludExvZ2ljYWxCb3R0b20p
OwotICAgIH0KLSNlbmRpZgotCiAgICAgYm9vbCB1cGRhdGVTaGFwZXNCZWZvcmVCbG9ja0xheW91
dCgpOwogICAgIHZvaWQgdXBkYXRlU2hhcGVzQWZ0ZXJCbG9ja0xheW91dChib29sIGhlaWdodENo
YW5nZWQgPSBmYWxzZSk7CiAgICAgdm9pZCBjb21wdXRlUmVnaW9uUmFuZ2VGb3JCb3hDaGlsZChj
b25zdCBSZW5kZXJCb3gqKSBjb25zdDsKQEAgLTY1MSw4ICs2NDAsNiBAQCBwcml2YXRlOgogCiAg
ICAgdmlydHVhbCB2b2lkIHJlcGFpbnRPdmVyaGFuZ2luZ0Zsb2F0cyhib29sIHBhaW50QWxsRGVz
Y2VuZGFudHMpIE9WRVJSSURFIEZJTkFMOwogCi0gICAgdm9pZCBsYXlvdXRCbG9ja0NoaWxkcmVu
KGJvb2wgcmVsYXlvdXRDaGlsZHJlbiwgTGF5b3V0VW5pdCYgbWF4RmxvYXRMb2dpY2FsQm90dG9t
KTsKLSAgICB2b2lkIGxheW91dElubGluZUNoaWxkcmVuKGJvb2wgcmVsYXlvdXRDaGlsZHJlbiwg
TGF5b3V0VW5pdCYgcmVwYWludExvZ2ljYWxUb3AsIExheW91dFVuaXQmIHJlcGFpbnRMb2dpY2Fs
Qm90dG9tKTsKICAgICBCaWRpUnVuKiBoYW5kbGVUcmFpbGluZ1NwYWNlcyhCaWRpUnVuTGlzdDxC
aWRpUnVuPiYsIEJpZGlDb250ZXh0Kik7CiAKICAgICB2b2lkIGluc2VydEludG9UcmFja2VkUmVu
ZGVyZXJNYXBzKFJlbmRlckJveCogZGVzY2VuZGFudCwgVHJhY2tlZERlc2NlbmRhbnRzTWFwKiYs
IFRyYWNrZWRDb250YWluZXJNYXAqJik7CkBAIC05MjYsOCArOTEzLDYgQEAgcHJpdmF0ZToKICAg
ICAvLyBSZXR1cm5zIHRydWUgaWYgYW5kIG9ubHkgaWYgaXQgaGFzIHBvc2l0aW9uZWQgYW55IGZs
b2F0cy4KICAgICBib29sIHBvc2l0aW9uTmV3RmxvYXRzKCk7CiAKLSAgICB2b2lkIGNsZWFyRmxv
YXRzKCk7Ci0KICAgICBMYXlvdXRVbml0IGdldENsZWFyRGVsdGEoUmVuZGVyQm94KiBjaGlsZCwg
TGF5b3V0VW5pdCB5UG9zKTsKIAogICAgIHZpcnR1YWwgYm9vbCBhdm9pZHNGbG9hdHMoKSBjb25z
dDsKQEAgLTExOTEsNiArMTE3NiwxMCBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCBMYXlvdXRVbml0
IG9mZnNldEZyb21Mb2dpY2FsVG9wT2ZGaXJzdFBhZ2UoKSBjb25zdDsKICAgICBSZW5kZXJSZWdp
b24qIHJlZ2lvbkF0QmxvY2tPZmZzZXQoTGF5b3V0VW5pdCkgY29uc3Q7CiAKKyAgICAvLyBGSVhN
RTogVGhpcyBpcyB0ZW1wb3JhcnkgdG8gYWxsb3cgdXMgdG8gbW92ZSBjb2RlIGZyb20gUmVuZGVy
QmxvY2sgaW50byBSZW5kZXJCbG9ja0Zsb3cgdGhhdCBhY2Nlc3NlcyBtZW1iZXIgdmFyaWFibGVz
IHRoYXQgd2UgaGF2ZW4ndCBtb3ZlZCBvdXQgb2YKKyAgICAvLyBSZW5kZXJCbG9jayB5ZXQuCisg
ICAgZnJpZW5kIGNsYXNzIFJlbmRlckJsb2NrRmxvdzsKKwogcHJvdGVjdGVkOgogICAgIHN0cnVj
dCBGbG9hdGluZ09iamVjdEhhc2hGdW5jdGlvbnMgewogICAgICAgICBzdGF0aWMgdW5zaWduZWQg
aGFzaChGbG9hdGluZ09iamVjdCoga2V5KSB7IHJldHVybiBEZWZhdWx0SGFzaDxSZW5kZXJCb3gq
Pjo6SGFzaDo6aGFzaChrZXktPnJlbmRlcmVyKCkpOyB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvUmVuZGVyQmxvY2tGbG93LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2tGbG93LmNwcAkocmV2aXNpb24gMTU1MzY1KQorKysgU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJsb2NrRmxvdy5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTI0LDYgKzI0LDEzIEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiUmVuZGVy
QmxvY2tGbG93LmgiCiAKKyNpbmNsdWRlICJMYXlvdXRSZXBhaW50ZXIuaCIKKyNpbmNsdWRlICJS
ZW5kZXJGbG93VGhyZWFkLmgiCisjaW5jbHVkZSAiUmVuZGVyTGF5ZXIuaCIKKyNpbmNsdWRlICJS
ZW5kZXJWaWV3LmgiCisKK3VzaW5nIG5hbWVzcGFjZSBzdGQ7CisKIG5hbWVzcGFjZSBXZWJDb3Jl
IHsKIAogUmVuZGVyQmxvY2tGbG93OjpSZW5kZXJCbG9ja0Zsb3coQ29udGFpbmVyTm9kZSogbm9k
ZSkKQEAgLTM1LDQgKzQyLDM3MiBAQCBSZW5kZXJCbG9ja0Zsb3c6On5SZW5kZXJCbG9ja0Zsb3co
KQogewogfQogCit2b2lkIFJlbmRlckJsb2NrRmxvdzo6Y2xlYXJGbG9hdHMoKQoreworICAgIGlm
IChtX2Zsb2F0aW5nT2JqZWN0cykKKyAgICAgICAgbV9mbG9hdGluZ09iamVjdHMtPnNldEhvcml6
b250YWxXcml0aW5nTW9kZShpc0hvcml6b250YWxXcml0aW5nTW9kZSgpKTsKKworICAgIEhhc2hT
ZXQ8UmVuZGVyQm94Kj4gb2xkSW50cnVkaW5nRmxvYXRTZXQ7CisgICAgaWYgKCFjaGlsZHJlbklu
bGluZSgpICYmIG1fZmxvYXRpbmdPYmplY3RzKSB7CisgICAgICAgIGNvbnN0IEZsb2F0aW5nT2Jq
ZWN0U2V0JiBmbG9hdGluZ09iamVjdFNldCA9IG1fZmxvYXRpbmdPYmplY3RzLT5zZXQoKTsKKyAg
ICAgICAgRmxvYXRpbmdPYmplY3RTZXRJdGVyYXRvciBlbmQgPSBmbG9hdGluZ09iamVjdFNldC5l
bmQoKTsKKyAgICAgICAgZm9yIChGbG9hdGluZ09iamVjdFNldEl0ZXJhdG9yIGl0ID0gZmxvYXRp
bmdPYmplY3RTZXQuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7CisgICAgICAgICAgICBGbG9h
dGluZ09iamVjdCogZmxvYXRpbmdPYmplY3QgPSAqaXQ7CisgICAgICAgICAgICBpZiAoIWZsb2F0
aW5nT2JqZWN0LT5pc0Rlc2NlbmRhbnQoKSkKKyAgICAgICAgICAgICAgICBvbGRJbnRydWRpbmdG
bG9hdFNldC5hZGQoZmxvYXRpbmdPYmplY3QtPnJlbmRlcmVyKCkpOworICAgICAgICB9CisgICAg
fQorCisgICAgLy8gSW5saW5lIGJsb2NrcyBhcmUgY292ZXJlZCBieSB0aGUgaXNSZXBsYWNlZCgp
IGNoZWNrIGluIHRoZSBhdm9pZEZsb2F0cyBtZXRob2QuCisgICAgaWYgKGF2b2lkc0Zsb2F0cygp
IHx8IGlzUm9vdCgpIHx8IGlzUmVuZGVyVmlldygpIHx8IGlzRmxvYXRpbmdPck91dE9mRmxvd1Bv
c2l0aW9uZWQoKSB8fCBpc1RhYmxlQ2VsbCgpKSB7CisgICAgICAgIGlmIChtX2Zsb2F0aW5nT2Jq
ZWN0cykgeworICAgICAgICAgICAgZGVsZXRlQWxsVmFsdWVzKG1fZmxvYXRpbmdPYmplY3RzLT5z
ZXQoKSk7CisgICAgICAgICAgICBtX2Zsb2F0aW5nT2JqZWN0cy0+Y2xlYXIoKTsKKyAgICAgICAg
fQorICAgICAgICBpZiAoIW9sZEludHJ1ZGluZ0Zsb2F0U2V0LmlzRW1wdHkoKSkKKyAgICAgICAg
ICAgIG1hcmtBbGxEZXNjZW5kYW50c1dpdGhGbG9hdHNGb3JMYXlvdXQoKTsKKyAgICAgICAgcmV0
dXJuOworICAgIH0KKworICAgIHR5cGVkZWYgSGFzaE1hcDxSZW5kZXJPYmplY3QqLCBGbG9hdGlu
Z09iamVjdCo+IFJlbmRlcmVyVG9GbG9hdEluZm9NYXA7CisgICAgUmVuZGVyZXJUb0Zsb2F0SW5m
b01hcCBmbG9hdE1hcDsKKworICAgIGlmIChtX2Zsb2F0aW5nT2JqZWN0cykgeworICAgICAgICBj
b25zdCBGbG9hdGluZ09iamVjdFNldCYgZmxvYXRpbmdPYmplY3RTZXQgPSBtX2Zsb2F0aW5nT2Jq
ZWN0cy0+c2V0KCk7CisgICAgICAgIGlmIChjaGlsZHJlbklubGluZSgpKSB7CisgICAgICAgICAg
ICBGbG9hdGluZ09iamVjdFNldEl0ZXJhdG9yIGVuZCA9IGZsb2F0aW5nT2JqZWN0U2V0LmVuZCgp
OworICAgICAgICAgICAgZm9yIChGbG9hdGluZ09iamVjdFNldEl0ZXJhdG9yIGl0ID0gZmxvYXRp
bmdPYmplY3RTZXQuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7CisgICAgICAgICAgICAgICAg
RmxvYXRpbmdPYmplY3QqIGYgPSAqaXQ7CisgICAgICAgICAgICAgICAgZmxvYXRNYXAuYWRkKGYt
PnJlbmRlcmVyKCksIGYpOworICAgICAgICAgICAgfQorICAgICAgICB9IGVsc2UKKyAgICAgICAg
ICAgIGRlbGV0ZUFsbFZhbHVlcyhmbG9hdGluZ09iamVjdFNldCk7CisgICAgICAgIG1fZmxvYXRp
bmdPYmplY3RzLT5jbGVhcigpOworICAgIH0KKworICAgIC8vIFdlIHNob3VsZCBub3QgcHJvY2Vz
cyBmbG9hdHMgaWYgdGhlIHBhcmVudCBub2RlIGlzIG5vdCBhIFJlbmRlckJsb2NrLiBPdGhlcndp
c2UsIHdlIHdpbGwgYWRkIAorICAgIC8vIGZsb2F0cyBpbiBhbiBpbnZhbGlkIGNvbnRleHQuIFRo
aXMgd2lsbCBjYXVzZSBhIGNyYXNoIGFyaXNpbmcgZnJvbSBhIGJhZCBjYXN0IG9uIHRoZSBwYXJl
bnQuCisgICAgLy8gU2VlIDxyZGFyOi8vcHJvYmxlbS84MDQ5NzUzPiwgd2hlcmUgZmxvYXQgcHJv
cGVydHkgaXMgYXBwbGllZCBvbiBhIHRleHQgbm9kZSBpbiBhIFNWRy4KKyAgICBpZiAoIXBhcmVu
dCgpIHx8ICFwYXJlbnQoKS0+aXNSZW5kZXJCbG9jaygpKQorICAgICAgICByZXR1cm47CisKKyAg
ICAvLyBBdHRlbXB0IHRvIGxvY2F0ZSBhIHByZXZpb3VzIHNpYmxpbmcgd2l0aCBvdmVyaGFuZ2lu
ZyBmbG9hdHMuIFdlIHNraXAgYW55IGVsZW1lbnRzIHRoYXQgYXJlCisgICAgLy8gb3V0IG9mIGZs
b3cgKGxpa2UgZmxvYXRpbmcvcG9zaXRpb25lZCBlbGVtZW50cyksIGFuZCB3ZSBhbHNvIHNraXAg
b3ZlciBhbnkgb2JqZWN0cyB0aGF0IG1heSBoYXZlIHNoaWZ0ZWQKKyAgICAvLyB0byBhdm9pZCBm
bG9hdHMuCisgICAgUmVuZGVyQmxvY2sqIHBhcmVudEJsb2NrID0gdG9SZW5kZXJCbG9jayhwYXJl
bnQoKSk7CisgICAgYm9vbCBwYXJlbnRIYXNGbG9hdHMgPSBmYWxzZTsKKyAgICBSZW5kZXJPYmpl
Y3QqIHByZXYgPSBwcmV2aW91c1NpYmxpbmcoKTsKKyAgICB3aGlsZSAocHJldiAmJiAocHJldi0+
aXNGbG9hdGluZ09yT3V0T2ZGbG93UG9zaXRpb25lZCgpIHx8ICFwcmV2LT5pc0JveCgpIHx8ICFw
cmV2LT5pc1JlbmRlckJsb2NrKCkgfHwgdG9SZW5kZXJCbG9jayhwcmV2KS0+YXZvaWRzRmxvYXRz
KCkpKSB7CisgICAgICAgIGlmIChwcmV2LT5pc0Zsb2F0aW5nKCkpCisgICAgICAgICAgICBwYXJl
bnRIYXNGbG9hdHMgPSB0cnVlOworICAgICAgICBwcmV2ID0gcHJldi0+cHJldmlvdXNTaWJsaW5n
KCk7CisgICAgfQorCisgICAgLy8gRmlyc3QgYWRkIGluIGZsb2F0cyBmcm9tIHRoZSBwYXJlbnQu
CisgICAgTGF5b3V0VW5pdCBsb2dpY2FsVG9wT2Zmc2V0ID0gbG9naWNhbFRvcCgpOworICAgIGlm
IChwYXJlbnRIYXNGbG9hdHMpCisgICAgICAgIGFkZEludHJ1ZGluZ0Zsb2F0cyhwYXJlbnRCbG9j
aywgcGFyZW50QmxvY2stPmxvZ2ljYWxMZWZ0T2Zmc2V0Rm9yQ29udGVudCgpLCBsb2dpY2FsVG9w
T2Zmc2V0KTsKKyAgICAKKyAgICBMYXlvdXRVbml0IGxvZ2ljYWxMZWZ0T2Zmc2V0ID0gMDsKKyAg
ICBpZiAocHJldikKKyAgICAgICAgbG9naWNhbFRvcE9mZnNldCAtPSB0b1JlbmRlckJveChwcmV2
KS0+bG9naWNhbFRvcCgpOworICAgIGVsc2UgeworICAgICAgICBwcmV2ID0gcGFyZW50QmxvY2s7
CisgICAgICAgIGxvZ2ljYWxMZWZ0T2Zmc2V0ICs9IHBhcmVudEJsb2NrLT5sb2dpY2FsTGVmdE9m
ZnNldEZvckNvbnRlbnQoKTsKKyAgICB9CisKKyAgICAvLyBBZGQgb3ZlcmhhbmdpbmcgZmxvYXRz
IGZyb20gdGhlIHByZXZpb3VzIFJlbmRlckJsb2NrLCBidXQgb25seSBpZiBpdCBoYXMgYSBmbG9h
dCB0aGF0IGludHJ1ZGVzIGludG8gb3VyIHNwYWNlLiAgICAKKyAgICBSZW5kZXJCbG9jayogYmxv
Y2sgPSB0b1JlbmRlckJsb2NrKHByZXYpOworICAgIGlmIChibG9jay0+bV9mbG9hdGluZ09iamVj
dHMgJiYgYmxvY2stPmxvd2VzdEZsb2F0TG9naWNhbEJvdHRvbSgpID4gbG9naWNhbFRvcE9mZnNl
dCkKKyAgICAgICAgYWRkSW50cnVkaW5nRmxvYXRzKGJsb2NrLCBsb2dpY2FsTGVmdE9mZnNldCwg
bG9naWNhbFRvcE9mZnNldCk7CisKKyAgICBpZiAoY2hpbGRyZW5JbmxpbmUoKSkgeworICAgICAg
ICBMYXlvdXRVbml0IGNoYW5nZUxvZ2ljYWxUb3AgPSBMYXlvdXRVbml0OjptYXgoKTsKKyAgICAg
ICAgTGF5b3V0VW5pdCBjaGFuZ2VMb2dpY2FsQm90dG9tID0gTGF5b3V0VW5pdDo6bWluKCk7Cisg
ICAgICAgIGlmIChtX2Zsb2F0aW5nT2JqZWN0cykgeworICAgICAgICAgICAgY29uc3QgRmxvYXRp
bmdPYmplY3RTZXQmIGZsb2F0aW5nT2JqZWN0U2V0ID0gbV9mbG9hdGluZ09iamVjdHMtPnNldCgp
OworICAgICAgICAgICAgRmxvYXRpbmdPYmplY3RTZXRJdGVyYXRvciBlbmQgPSBmbG9hdGluZ09i
amVjdFNldC5lbmQoKTsKKyAgICAgICAgICAgIGZvciAoRmxvYXRpbmdPYmplY3RTZXRJdGVyYXRv
ciBpdCA9IGZsb2F0aW5nT2JqZWN0U2V0LmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkgeworICAg
ICAgICAgICAgICAgIEZsb2F0aW5nT2JqZWN0KiBmID0gKml0OworICAgICAgICAgICAgICAgIEZs
b2F0aW5nT2JqZWN0KiBvbGRGbG9hdGluZ09iamVjdCA9IGZsb2F0TWFwLmdldChmLT5yZW5kZXJl
cigpKTsKKyAgICAgICAgICAgICAgICBMYXlvdXRVbml0IGxvZ2ljYWxCb3R0b20gPSBmLT5sb2dp
Y2FsQm90dG9tKGlzSG9yaXpvbnRhbFdyaXRpbmdNb2RlKCkpOworICAgICAgICAgICAgICAgIGlm
IChvbGRGbG9hdGluZ09iamVjdCkgeworICAgICAgICAgICAgICAgICAgICBMYXlvdXRVbml0IG9s
ZExvZ2ljYWxCb3R0b20gPSBvbGRGbG9hdGluZ09iamVjdC0+bG9naWNhbEJvdHRvbShpc0hvcml6
b250YWxXcml0aW5nTW9kZSgpKTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKGYtPmxvZ2ljYWxX
aWR0aChpc0hvcml6b250YWxXcml0aW5nTW9kZSgpKSAhPSBvbGRGbG9hdGluZ09iamVjdC0+bG9n
aWNhbFdpZHRoKGlzSG9yaXpvbnRhbFdyaXRpbmdNb2RlKCkpIHx8IGYtPmxvZ2ljYWxMZWZ0KGlz
SG9yaXpvbnRhbFdyaXRpbmdNb2RlKCkpICE9IG9sZEZsb2F0aW5nT2JqZWN0LT5sb2dpY2FsTGVm
dChpc0hvcml6b250YWxXcml0aW5nTW9kZSgpKSkgeworICAgICAgICAgICAgICAgICAgICAgICAg
Y2hhbmdlTG9naWNhbFRvcCA9IDA7CisgICAgICAgICAgICAgICAgICAgICAgICBjaGFuZ2VMb2dp
Y2FsQm90dG9tID0gbWF4KGNoYW5nZUxvZ2ljYWxCb3R0b20sIG1heChsb2dpY2FsQm90dG9tLCBv
bGRMb2dpY2FsQm90dG9tKSk7CisgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAg
ICAgICAgICAgICAgICAgICBpZiAobG9naWNhbEJvdHRvbSAhPSBvbGRMb2dpY2FsQm90dG9tKSB7
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhbmdlTG9naWNhbFRvcCA9IG1pbihjaGFu
Z2VMb2dpY2FsVG9wLCBtaW4obG9naWNhbEJvdHRvbSwgb2xkTG9naWNhbEJvdHRvbSkpOworICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGNoYW5nZUxvZ2ljYWxCb3R0b20gPSBtYXgoY2hhbmdl
TG9naWNhbEJvdHRvbSwgbWF4KGxvZ2ljYWxCb3R0b20sIG9sZExvZ2ljYWxCb3R0b20pKTsKKyAg
ICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIExheW91dFVu
aXQgbG9naWNhbFRvcCA9IGYtPmxvZ2ljYWxUb3AoaXNIb3Jpem9udGFsV3JpdGluZ01vZGUoKSk7
CisgICAgICAgICAgICAgICAgICAgICAgICBMYXlvdXRVbml0IG9sZExvZ2ljYWxUb3AgPSBvbGRG
bG9hdGluZ09iamVjdC0+bG9naWNhbFRvcChpc0hvcml6b250YWxXcml0aW5nTW9kZSgpKTsKKyAg
ICAgICAgICAgICAgICAgICAgICAgIGlmIChsb2dpY2FsVG9wICE9IG9sZExvZ2ljYWxUb3ApIHsK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFuZ2VMb2dpY2FsVG9wID0gbWluKGNoYW5n
ZUxvZ2ljYWxUb3AsIG1pbihsb2dpY2FsVG9wLCBvbGRMb2dpY2FsVG9wKSk7CisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgY2hhbmdlTG9naWNhbEJvdHRvbSA9IG1heChjaGFuZ2VMb2dpY2Fs
Qm90dG9tLCBtYXgobG9naWNhbFRvcCwgb2xkTG9naWNhbFRvcCkpOworICAgICAgICAgICAgICAg
ICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAgICAg
ZmxvYXRNYXAucmVtb3ZlKGYtPnJlbmRlcmVyKCkpOworICAgICAgICAgICAgICAgICAgICBpZiAo
b2xkRmxvYXRpbmdPYmplY3QtPm9yaWdpbmF0aW5nTGluZSgpICYmICFzZWxmTmVlZHNMYXlvdXQo
KSkgeworICAgICAgICAgICAgICAgICAgICAgICAgQVNTRVJUKCZvbGRGbG9hdGluZ09iamVjdC0+
b3JpZ2luYXRpbmdMaW5lKCktPnJlbmRlcmVyKCkgPT0gdGhpcyk7CisgICAgICAgICAgICAgICAg
ICAgICAgICBvbGRGbG9hdGluZ09iamVjdC0+b3JpZ2luYXRpbmdMaW5lKCktPm1hcmtEaXJ0eSgp
OworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIGRlbGV0ZSBvbGRG
bG9hdGluZ09iamVjdDsKKyAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAg
ICAgICBjaGFuZ2VMb2dpY2FsVG9wID0gMDsKKyAgICAgICAgICAgICAgICAgICAgY2hhbmdlTG9n
aWNhbEJvdHRvbSA9IG1heChjaGFuZ2VMb2dpY2FsQm90dG9tLCBsb2dpY2FsQm90dG9tKTsKKyAg
ICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICBSZW5k
ZXJlclRvRmxvYXRJbmZvTWFwOjppdGVyYXRvciBlbmQgPSBmbG9hdE1hcC5lbmQoKTsKKyAgICAg
ICAgZm9yIChSZW5kZXJlclRvRmxvYXRJbmZvTWFwOjppdGVyYXRvciBpdCA9IGZsb2F0TWFwLmJl
Z2luKCk7IGl0ICE9IGVuZDsgKytpdCkgeworICAgICAgICAgICAgRmxvYXRpbmdPYmplY3QqIGZs
b2F0aW5nT2JqZWN0ID0gKCppdCkudmFsdWU7CisgICAgICAgICAgICBpZiAoIWZsb2F0aW5nT2Jq
ZWN0LT5pc0Rlc2NlbmRhbnQoKSkgeworICAgICAgICAgICAgICAgIGNoYW5nZUxvZ2ljYWxUb3Ag
PSAwOworICAgICAgICAgICAgICAgIGNoYW5nZUxvZ2ljYWxCb3R0b20gPSBtYXgoY2hhbmdlTG9n
aWNhbEJvdHRvbSwgZmxvYXRpbmdPYmplY3QtPmxvZ2ljYWxCb3R0b20oaXNIb3Jpem9udGFsV3Jp
dGluZ01vZGUoKSkpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGRlbGV0ZUFs
bFZhbHVlcyhmbG9hdE1hcCk7CisKKyAgICAgICAgbWFya0xpbmVzRGlydHlJbkJsb2NrUmFuZ2Uo
Y2hhbmdlTG9naWNhbFRvcCwgY2hhbmdlTG9naWNhbEJvdHRvbSk7CisgICAgfSBlbHNlIGlmICgh
b2xkSW50cnVkaW5nRmxvYXRTZXQuaXNFbXB0eSgpKSB7CisgICAgICAgIC8vIElmIHRoZXJlIGFy
ZSBwcmV2aW91c2x5IGludHJ1ZGluZyBmbG9hdHMgdGhhdCBubyBsb25nZXIgaW50cnVkZSwgdGhl
biBjaGlsZHJlbiB3aXRoIGZsb2F0cworICAgICAgICAvLyBzaG91bGQgYWxzbyBnZXQgbGF5b3V0
IGJlY2F1c2UgdGhleSBtaWdodCBuZWVkIHRoZWlyIGZsb2F0aW5nIG9iamVjdCBsaXN0cyBjbGVh
cmVkLgorICAgICAgICBpZiAobV9mbG9hdGluZ09iamVjdHMtPnNldCgpLnNpemUoKSA8IG9sZElu
dHJ1ZGluZ0Zsb2F0U2V0LnNpemUoKSkKKyAgICAgICAgICAgIG1hcmtBbGxEZXNjZW5kYW50c1dp
dGhGbG9hdHNGb3JMYXlvdXQoKTsKKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICBjb25zdCBG
bG9hdGluZ09iamVjdFNldCYgZmxvYXRpbmdPYmplY3RTZXQgPSBtX2Zsb2F0aW5nT2JqZWN0cy0+
c2V0KCk7CisgICAgICAgICAgICBGbG9hdGluZ09iamVjdFNldEl0ZXJhdG9yIGVuZCA9IGZsb2F0
aW5nT2JqZWN0U2V0LmVuZCgpOworICAgICAgICAgICAgZm9yIChGbG9hdGluZ09iamVjdFNldEl0
ZXJhdG9yIGl0ID0gZmxvYXRpbmdPYmplY3RTZXQuYmVnaW4oKTsgaXQgIT0gZW5kICYmICFvbGRJ
bnRydWRpbmdGbG9hdFNldC5pc0VtcHR5KCk7ICsraXQpCisgICAgICAgICAgICAgICAgb2xkSW50
cnVkaW5nRmxvYXRTZXQucmVtb3ZlKCgqaXQpLT5yZW5kZXJlcigpKTsKKyAgICAgICAgICAgIGlm
ICghb2xkSW50cnVkaW5nRmxvYXRTZXQuaXNFbXB0eSgpKQorICAgICAgICAgICAgICAgIG1hcmtB
bGxEZXNjZW5kYW50c1dpdGhGbG9hdHNGb3JMYXlvdXQoKTsKKyAgICAgICAgfQorICAgIH0KK30K
Kwordm9pZCBSZW5kZXJCbG9ja0Zsb3c6OmxheW91dEJsb2NrKGJvb2wgcmVsYXlvdXRDaGlsZHJl
biwgTGF5b3V0VW5pdCBwYWdlTG9naWNhbEhlaWdodCkKK3sKKyAgICBBU1NFUlQobmVlZHNMYXlv
dXQoKSk7CisKKyAgICBpZiAoIXJlbGF5b3V0Q2hpbGRyZW4gJiYgc2ltcGxpZmllZExheW91dCgp
KQorICAgICAgICByZXR1cm47CisKKyAgICBMYXlvdXRSZXBhaW50ZXIgcmVwYWludGVyKCp0aGlz
LCBjaGVja0ZvclJlcGFpbnREdXJpbmdMYXlvdXQoKSk7CisKKyAgICBpZiAodXBkYXRlTG9naWNh
bFdpZHRoQW5kQ29sdW1uV2lkdGgoKSkKKyAgICAgICAgcmVsYXlvdXRDaGlsZHJlbiA9IHRydWU7
CisKKyAgICBjbGVhckZsb2F0cygpOworCisgICAgTGF5b3V0VW5pdCBwcmV2aW91c0hlaWdodCA9
IGxvZ2ljYWxIZWlnaHQoKTsKKyAgICAvLyBGSVhNRTogc2hvdWxkIHRoaXMgc3RhcnQgb3V0IGFz
IGJvcmRlckFuZFBhZGRpbmdMb2dpY2FsSGVpZ2h0KCkgKyBzY3JvbGxiYXJMb2dpY2FsSGVpZ2h0
KCksCisgICAgLy8gZm9yIGNvbnNpc3RlbmN5IHdpdGggb3RoZXIgcmVuZGVyIGNsYXNzZXM/Cisg
ICAgc2V0TG9naWNhbEhlaWdodCgwKTsKKworICAgIGJvb2wgcGFnZUxvZ2ljYWxIZWlnaHRDaGFu
Z2VkID0gZmFsc2U7CisgICAgYm9vbCBoYXNTcGVjaWZpZWRQYWdlTG9naWNhbEhlaWdodCA9IGZh
bHNlOworICAgIGNoZWNrRm9yUGFnaW5hdGlvbkxvZ2ljYWxIZWlnaHRDaGFuZ2UocGFnZUxvZ2lj
YWxIZWlnaHQsIHBhZ2VMb2dpY2FsSGVpZ2h0Q2hhbmdlZCwgaGFzU3BlY2lmaWVkUGFnZUxvZ2lj
YWxIZWlnaHQpOworCisgICAgUmVuZGVyU3R5bGUqIHN0eWxlVG9Vc2UgPSBzdHlsZSgpOworICAg
IExheW91dFN0YXRlTWFpbnRhaW5lciBzdGF0ZVB1c2hlcigmdmlldygpLCB0aGlzLCBsb2NhdGlv
bk9mZnNldCgpLCBoYXNDb2x1bW5zKCkgfHwgaGFzVHJhbnNmb3JtKCkgfHwgaGFzUmVmbGVjdGlv
bigpIHx8IHN0eWxlVG9Vc2UtPmlzRmxpcHBlZEJsb2Nrc1dyaXRpbmdNb2RlKCksIHBhZ2VMb2dp
Y2FsSGVpZ2h0LCBwYWdlTG9naWNhbEhlaWdodENoYW5nZWQsIGNvbHVtbkluZm8oKSk7CisKKyAg
ICAvLyBSZWdpb25zIGNoYW5naW5nIHdpZHRocyBjYW4gZm9yY2UgdXMgdG8gcmVsYXlvdXQgb3Vy
IGNoaWxkcmVuLgorICAgIFJlbmRlckZsb3dUaHJlYWQqIGZsb3dUaHJlYWQgPSBmbG93VGhyZWFk
Q29udGFpbmluZ0Jsb2NrKCk7CisgICAgaWYgKGxvZ2ljYWxXaWR0aENoYW5nZWRJblJlZ2lvbnMo
Zmxvd1RocmVhZCkpCisgICAgICAgIHJlbGF5b3V0Q2hpbGRyZW4gPSB0cnVlOworICAgIGlmICh1
cGRhdGVTaGFwZXNCZWZvcmVCbG9ja0xheW91dCgpKQorICAgICAgICByZWxheW91dENoaWxkcmVu
ID0gdHJ1ZTsKKworICAgIC8vIFdlIHVzZSBmb3VyIHZhbHVlcywgbWF4VG9wUG9zLCBtYXhUb3BO
ZWcsIG1heEJvdHRvbVBvcywgYW5kIG1heEJvdHRvbU5lZywgdG8gdHJhY2sKKyAgICAvLyBvdXIg
Y3VycmVudCBtYXhpbWFsIHBvc2l0aXZlIGFuZCBuZWdhdGl2ZSBtYXJnaW5zLiBUaGVzZSB2YWx1
ZXMgYXJlIHVzZWQgd2hlbiB3ZQorICAgIC8vIGFyZSBjb2xsYXBzZWQgd2l0aCBhZGphY2VudCBi
bG9ja3MsIHNvIGZvciBleGFtcGxlLCBpZiB5b3UgaGF2ZSBibG9jayBBIGFuZCBCCisgICAgLy8g
Y29sbGFwc2luZyB0b2dldGhlciwgdGhlbiB5b3UnZCB0YWtlIHRoZSBtYXhpbWFsIHBvc2l0aXZl
IG1hcmdpbiBmcm9tIGJvdGggQSBhbmQgQgorICAgIC8vIGFuZCBzdWJ0cmFjdCBpdCBmcm9tIHRo
ZSBtYXhpbWFsIG5lZ2F0aXZlIG1hcmdpbiBmcm9tIGJvdGggQSBhbmQgQiB0byBnZXQgdGhlCisg
ICAgLy8gdHJ1ZSBjb2xsYXBzZWQgbWFyZ2luLiBUaGlzIGFsZ29yaXRobSBpcyByZWN1cnNpdmUs
IHNvIHdoZW4gd2UgZmluaXNoIGxheW91dCgpCisgICAgLy8gb3VyIGJsb2NrIGtub3dzIGl0cyBj
dXJyZW50IG1heGltYWwgcG9zaXRpdmUvbmVnYXRpdmUgdmFsdWVzLgorICAgIC8vCisgICAgLy8g
U3RhcnQgb3V0IGJ5IHNldHRpbmcgb3VyIG1hcmdpbiB2YWx1ZXMgdG8gb3VyIGN1cnJlbnQgbWFy
Z2lucy4gVGFibGUgY2VsbHMgaGF2ZQorICAgIC8vIG5vIG1hcmdpbnMsIHNvIHdlIGRvbid0IGZp
bGwgaW4gdGhlIHZhbHVlcyBmb3IgdGFibGUgY2VsbHMuCisgICAgYm9vbCBpc0NlbGwgPSBpc1Rh
YmxlQ2VsbCgpOworICAgIGlmICghaXNDZWxsKSB7CisgICAgICAgIGluaXRNYXhNYXJnaW5WYWx1
ZXMoKTsKKyAgICAgICAgCisgICAgICAgIHNldEhhc01hcmdpbkJlZm9yZVF1aXJrKHN0eWxlVG9V
c2UtPmhhc01hcmdpbkJlZm9yZVF1aXJrKCkpOworICAgICAgICBzZXRIYXNNYXJnaW5BZnRlclF1
aXJrKHN0eWxlVG9Vc2UtPmhhc01hcmdpbkFmdGVyUXVpcmsoKSk7CisgICAgICAgIHNldFBhZ2lu
YXRpb25TdHJ1dCgwKTsKKyAgICB9CisKKyAgICBMYXlvdXRVbml0IHJlcGFpbnRMb2dpY2FsVG9w
ID0gMDsKKyAgICBMYXlvdXRVbml0IHJlcGFpbnRMb2dpY2FsQm90dG9tID0gMDsKKyAgICBMYXlv
dXRVbml0IG1heEZsb2F0TG9naWNhbEJvdHRvbSA9IDA7CisgICAgaWYgKCFmaXJzdENoaWxkKCkg
JiYgIWlzQW5vbnltb3VzQmxvY2soKSkKKyAgICAgICAgc2V0Q2hpbGRyZW5JbmxpbmUodHJ1ZSk7
CisgICAgaWYgKGNoaWxkcmVuSW5saW5lKCkpCisgICAgICAgIGxheW91dElubGluZUNoaWxkcmVu
KHJlbGF5b3V0Q2hpbGRyZW4sIHJlcGFpbnRMb2dpY2FsVG9wLCByZXBhaW50TG9naWNhbEJvdHRv
bSk7CisgICAgZWxzZQorICAgICAgICBsYXlvdXRCbG9ja0NoaWxkcmVuKHJlbGF5b3V0Q2hpbGRy
ZW4sIG1heEZsb2F0TG9naWNhbEJvdHRvbSk7CisKKyAgICAvLyBFeHBhbmQgb3VyIGludHJpbnNp
YyBoZWlnaHQgdG8gZW5jb21wYXNzIGZsb2F0cy4KKyAgICBMYXlvdXRVbml0IHRvQWRkID0gYm9y
ZGVyQW5kUGFkZGluZ0FmdGVyKCkgKyBzY3JvbGxiYXJMb2dpY2FsSGVpZ2h0KCk7CisgICAgaWYg
KGxvd2VzdEZsb2F0TG9naWNhbEJvdHRvbSgpID4gKGxvZ2ljYWxIZWlnaHQoKSAtIHRvQWRkKSAm
JiBleHBhbmRzVG9FbmNsb3NlT3ZlcmhhbmdpbmdGbG9hdHMoKSkKKyAgICAgICAgc2V0TG9naWNh
bEhlaWdodChsb3dlc3RGbG9hdExvZ2ljYWxCb3R0b20oKSArIHRvQWRkKTsKKyAgICAKKyAgICBp
ZiAocmVsYXlvdXRGb3JQYWdpbmF0aW9uKGhhc1NwZWNpZmllZFBhZ2VMb2dpY2FsSGVpZ2h0LCBw
YWdlTG9naWNhbEhlaWdodCwgc3RhdGVQdXNoZXIpIHx8IHJlbGF5b3V0VG9Bdm9pZFdpZG93cyhz
dGF0ZVB1c2hlcikpIHsKKyAgICAgICAgQVNTRVJUKCFzaG91bGRCcmVha0F0TGluZVRvQXZvaWRX
aWRvdygpKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIC8vIENhbGN1bGF0ZSBvdXIg
bmV3IGhlaWdodC4KKyAgICBMYXlvdXRVbml0IG9sZEhlaWdodCA9IGxvZ2ljYWxIZWlnaHQoKTsK
KyAgICBMYXlvdXRVbml0IG9sZENsaWVudEFmdGVyRWRnZSA9IGNsaWVudExvZ2ljYWxCb3R0b20o
KTsKKworICAgIC8vIEJlZm9yZSB1cGRhdGluZyB0aGUgZmluYWwgc2l6ZSBvZiB0aGUgZmxvdyB0
aHJlYWQgbWFrZSBzdXJlIGEgZm9yY2VkIGJyZWFrIGlzIGFwcGxpZWQgYWZ0ZXIgdGhlIGNvbnRl
bnQuCisgICAgLy8gVGhpcyBlbnN1cmVzIHRoZSBzaXplIGluZm9ybWF0aW9uIGlzIGNvcnJlY3Rs
eSBjb21wdXRlZCBmb3IgdGhlIGxhc3QgYXV0by1oZWlnaHQgcmVnaW9uIHJlY2VpdmluZyBjb250
ZW50LgorICAgIGlmIChpc1JlbmRlckZsb3dUaHJlYWQoKSkKKyAgICAgICAgdG9SZW5kZXJGbG93
VGhyZWFkKHRoaXMpLT5hcHBseUJyZWFrQWZ0ZXJDb250ZW50KG9sZENsaWVudEFmdGVyRWRnZSk7
CisKKyAgICB1cGRhdGVMb2dpY2FsSGVpZ2h0KCk7CisgICAgTGF5b3V0VW5pdCBuZXdIZWlnaHQg
PSBsb2dpY2FsSGVpZ2h0KCk7CisgICAgaWYgKG9sZEhlaWdodCAhPSBuZXdIZWlnaHQpIHsKKyAg
ICAgICAgaWYgKG9sZEhlaWdodCA+IG5ld0hlaWdodCAmJiBtYXhGbG9hdExvZ2ljYWxCb3R0b20g
PiBuZXdIZWlnaHQgJiYgIWNoaWxkcmVuSW5saW5lKCkpIHsKKyAgICAgICAgICAgIC8vIE9uZSBv
ZiBvdXIgY2hpbGRyZW4ncyBmbG9hdHMgbWF5IGhhdmUgYmVjb21lIGFuIG92ZXJoYW5naW5nIGZs
b2F0IGZvciB1cy4gV2UgbmVlZCB0byBsb29rIGZvciBpdC4KKyAgICAgICAgICAgIGZvciAoUmVu
ZGVyT2JqZWN0KiBjaGlsZCA9IGZpcnN0Q2hpbGQoKTsgY2hpbGQ7IGNoaWxkID0gY2hpbGQtPm5l
eHRTaWJsaW5nKCkpIHsKKyAgICAgICAgICAgICAgICBpZiAoY2hpbGQtPmlzUmVuZGVyQmxvY2tG
bG93KCkgJiYgIWNoaWxkLT5pc0Zsb2F0aW5nT3JPdXRPZkZsb3dQb3NpdGlvbmVkKCkpIHsKKyAg
ICAgICAgICAgICAgICAgICAgUmVuZGVyQmxvY2sqIGJsb2NrID0gdG9SZW5kZXJCbG9jayhjaGls
ZCk7CisgICAgICAgICAgICAgICAgICAgIGlmIChibG9jay0+bG93ZXN0RmxvYXRMb2dpY2FsQm90
dG9tKCkgKyBibG9jay0+bG9naWNhbFRvcCgpID4gbmV3SGVpZ2h0KQorICAgICAgICAgICAgICAg
ICAgICAgICAgYWRkT3ZlcmhhbmdpbmdGbG9hdHMoYmxvY2ssIGZhbHNlKTsKKyAgICAgICAgICAg
ICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisKKyAgICBib29sIGhlaWdo
dENoYW5nZWQgPSAocHJldmlvdXNIZWlnaHQgIT0gbmV3SGVpZ2h0KTsKKyAgICBpZiAoaGVpZ2h0
Q2hhbmdlZCkKKyAgICAgICAgcmVsYXlvdXRDaGlsZHJlbiA9IHRydWU7CisKKyAgICBsYXlvdXRQ
b3NpdGlvbmVkT2JqZWN0cyhyZWxheW91dENoaWxkcmVuIHx8IGlzUm9vdCgpKTsKKworICAgIHVw
ZGF0ZVNoYXBlc0FmdGVyQmxvY2tMYXlvdXQoaGVpZ2h0Q2hhbmdlZCk7CisKKyAgICAvLyBBZGQg
b3ZlcmZsb3cgZnJvbSBjaGlsZHJlbiAodW5sZXNzIHdlJ3JlIG11bHRpLWNvbHVtbiwgc2luY2Ug
aW4gdGhhdCBjYXNlIGFsbCBvdXIgY2hpbGQgb3ZlcmZsb3cgaXMgY2xpcHBlZCBhbnl3YXkpLgor
ICAgIGNvbXB1dGVPdmVyZmxvdyhvbGRDbGllbnRBZnRlckVkZ2UpOworICAgIAorICAgIHN0YXRl
UHVzaGVyLnBvcCgpOworCisgICAgZml0Qm9yZGVyVG9MaW5lc0lmTmVlZGVkKCk7CisKKyAgICBp
ZiAodmlldygpLmxheW91dFN0YXRlKCktPm1fcGFnZUxvZ2ljYWxIZWlnaHQpCisgICAgICAgIHNl
dFBhZ2VMb2dpY2FsT2Zmc2V0KHZpZXcoKS5sYXlvdXRTdGF0ZSgpLT5wYWdlTG9naWNhbE9mZnNl
dCh0aGlzLCBsb2dpY2FsVG9wKCkpKTsKKworICAgIHVwZGF0ZUxheWVyVHJhbnNmb3JtKCk7CisK
KyAgICAvLyBVcGRhdGUgb3VyIHNjcm9sbCBpbmZvcm1hdGlvbiBpZiB3ZSdyZSBvdmVyZmxvdzph
dXRvL3Njcm9sbC9oaWRkZW4gbm93IHRoYXQgd2Uga25vdyBpZgorICAgIC8vIHdlIG92ZXJmbG93
IG9yIG5vdC4KKyAgICB1cGRhdGVTY3JvbGxJbmZvQWZ0ZXJMYXlvdXQoKTsKKworICAgIC8vIEZJ
WE1FOiBUaGlzIHJlcGFpbnQgbG9naWMgc2hvdWxkIGJlIG1vdmVkIGludG8gYSBzZXBhcmF0ZSBo
ZWxwZXIgZnVuY3Rpb24hCisgICAgLy8gUmVwYWludCB3aXRoIG91ciBuZXcgYm91bmRzIGlmIHRo
ZXkgYXJlIGRpZmZlcmVudCBmcm9tIG91ciBvbGQgYm91bmRzLgorICAgIGJvb2wgZGlkRnVsbFJl
cGFpbnQgPSByZXBhaW50ZXIucmVwYWludEFmdGVyTGF5b3V0KCk7CisgICAgaWYgKCFkaWRGdWxs
UmVwYWludCAmJiByZXBhaW50TG9naWNhbFRvcCAhPSByZXBhaW50TG9naWNhbEJvdHRvbSAmJiAo
c3R5bGVUb1VzZS0+dmlzaWJpbGl0eSgpID09IFZJU0lCTEUgfHwgZW5jbG9zaW5nTGF5ZXIoKS0+
aGFzVmlzaWJsZUNvbnRlbnQoKSkpIHsKKyAgICAgICAgLy8gRklYTUU6IFdlIGNvdWxkIHRpZ2h0
ZW4gdXAgdGhlIGxlZnQgYW5kIHJpZ2h0IGludmFsaWRhdGlvbiBwb2ludHMgaWYgd2UgbGV0IGxh
eW91dElubGluZUNoaWxkcmVuIGZpbGwgdGhlbSBpbiBiYXNlZCBvZmYgdGhlIHBhcnRpY3VsYXIg
bGluZXMKKyAgICAgICAgLy8gaXQgaGFkIHRvIGxheSBvdXQuIFdlIHdvdWxkbid0IG5lZWQgdGhl
IGhhc092ZXJmbG93Q2xpcCgpIGhhY2sgaW4gdGhhdCBjYXNlIGVpdGhlci4KKyAgICAgICAgTGF5
b3V0VW5pdCByZXBhaW50TG9naWNhbExlZnQgPSBsb2dpY2FsTGVmdFZpc3VhbE92ZXJmbG93KCk7
CisgICAgICAgIExheW91dFVuaXQgcmVwYWludExvZ2ljYWxSaWdodCA9IGxvZ2ljYWxSaWdodFZp
c3VhbE92ZXJmbG93KCk7CisgICAgICAgIGlmIChoYXNPdmVyZmxvd0NsaXAoKSkgeworICAgICAg
ICAgICAgLy8gSWYgd2UgaGF2ZSBjbGlwcGVkIG92ZXJmbG93LCB3ZSBzaG91bGQgdXNlIGxheW91
dCBvdmVyZmxvdyBhcyB3ZWxsLCBzaW5jZSB2aXN1YWwgb3ZlcmZsb3cgZnJvbSBsaW5lcyBkaWRu
J3QgcHJvcGFnYXRlIHRvIG91ciBibG9jaydzIG92ZXJmbG93LgorICAgICAgICAgICAgLy8gTm90
ZSB0aGUgb2xkIGNvZGUgZGlkIHRoaXMgYXMgd2VsbCBidXQgZXZlbiBmb3Igb3ZlcmZsb3c6dmlz
aWJsZS4gVGhlIGFkZGl0aW9uIG9mIGhhc092ZXJmbG93Q2xpcCgpIGF0IGxlYXN0IHRpZ2h0ZW5z
IHVwIHRoZSBoYWNrIGEgYml0LgorICAgICAgICAgICAgLy8gbGF5b3V0SW5saW5lQ2hpbGRyZW4g
c2hvdWxkIGJlIHBhdGNoZWQgdG8gY29tcHV0ZSB0aGUgZW50aXJlIHJlcGFpbnQgcmVjdC4KKyAg
ICAgICAgICAgIHJlcGFpbnRMb2dpY2FsTGVmdCA9IG1pbihyZXBhaW50TG9naWNhbExlZnQsIGxv
Z2ljYWxMZWZ0TGF5b3V0T3ZlcmZsb3coKSk7CisgICAgICAgICAgICByZXBhaW50TG9naWNhbFJp
Z2h0ID0gbWF4KHJlcGFpbnRMb2dpY2FsUmlnaHQsIGxvZ2ljYWxSaWdodExheW91dE92ZXJmbG93
KCkpOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBMYXlvdXRSZWN0IHJlcGFpbnRSZWN0
OworICAgICAgICBpZiAoaXNIb3Jpem9udGFsV3JpdGluZ01vZGUoKSkKKyAgICAgICAgICAgIHJl
cGFpbnRSZWN0ID0gTGF5b3V0UmVjdChyZXBhaW50TG9naWNhbExlZnQsIHJlcGFpbnRMb2dpY2Fs
VG9wLCByZXBhaW50TG9naWNhbFJpZ2h0IC0gcmVwYWludExvZ2ljYWxMZWZ0LCByZXBhaW50TG9n
aWNhbEJvdHRvbSAtIHJlcGFpbnRMb2dpY2FsVG9wKTsKKyAgICAgICAgZWxzZQorICAgICAgICAg
ICAgcmVwYWludFJlY3QgPSBMYXlvdXRSZWN0KHJlcGFpbnRMb2dpY2FsVG9wLCByZXBhaW50TG9n
aWNhbExlZnQsIHJlcGFpbnRMb2dpY2FsQm90dG9tIC0gcmVwYWludExvZ2ljYWxUb3AsIHJlcGFp
bnRMb2dpY2FsUmlnaHQgLSByZXBhaW50TG9naWNhbExlZnQpOworCisgICAgICAgIC8vIFRoZSBy
ZXBhaW50IHJlY3QgbWF5IGJlIHNwbGl0IGFjcm9zcyBjb2x1bW5zLCBpbiB3aGljaCBjYXNlIGFk
anVzdFJlY3RGb3JDb2x1bW5zKCkgd2lsbCByZXR1cm4gdGhlIHVuaW9uLgorICAgICAgICBhZGp1
c3RSZWN0Rm9yQ29sdW1ucyhyZXBhaW50UmVjdCk7CisKKyAgICAgICAgcmVwYWludFJlY3QuaW5m
bGF0ZShtYXhpbWFsT3V0bGluZVNpemUoUGFpbnRQaGFzZU91dGxpbmUpKTsKKyAgICAgICAgCisg
ICAgICAgIGlmIChoYXNPdmVyZmxvd0NsaXAoKSkgeworICAgICAgICAgICAgLy8gQWRqdXN0IHJl
cGFpbnQgcmVjdCBmb3Igc2Nyb2xsIG9mZnNldAorICAgICAgICAgICAgcmVwYWludFJlY3QubW92
ZSgtc2Nyb2xsZWRDb250ZW50T2Zmc2V0KCkpOworCisgICAgICAgICAgICAvLyBEb24ndCBhbGxv
dyB0aGlzIHJlY3QgdG8gc3BpbGwgb3V0IG9mIG91ciBvdmVyZmxvdyBib3guCisgICAgICAgICAg
ICByZXBhaW50UmVjdC5pbnRlcnNlY3QoTGF5b3V0UmVjdChMYXlvdXRQb2ludCgpLCBzaXplKCkp
KTsKKyAgICAgICAgfQorCisgICAgICAgIC8vIE1ha2Ugc3VyZSB0aGUgcmVjdCBpcyBzdGlsbCBu
b24tZW1wdHkgYWZ0ZXIgaW50ZXJzZWN0aW5nIGZvciBvdmVyZmxvdyBhYm92ZQorICAgICAgICBp
ZiAoIXJlcGFpbnRSZWN0LmlzRW1wdHkoKSkgeworICAgICAgICAgICAgcmVwYWludFJlY3Rhbmds
ZShyZXBhaW50UmVjdCk7IC8vIFdlIG5lZWQgdG8gZG8gYSBwYXJ0aWFsIHJlcGFpbnQgb2Ygb3Vy
IGNvbnRlbnQuCisgICAgICAgICAgICBpZiAoaGFzUmVmbGVjdGlvbigpKQorICAgICAgICAgICAg
ICAgIHJlcGFpbnRSZWN0YW5nbGUocmVmbGVjdGVkUmVjdChyZXBhaW50UmVjdCkpOworICAgICAg
ICB9CisgICAgfQorCisgICAgc2V0TmVlZHNMYXlvdXQoZmFsc2UpOworfQorCit2b2lkIFJlbmRl
ckJsb2NrRmxvdzo6bGF5b3V0QmxvY2tDaGlsZHJlbihib29sIHJlbGF5b3V0Q2hpbGRyZW4sIExh
eW91dFVuaXQmIG1heEZsb2F0TG9naWNhbEJvdHRvbSkKK3sKKyAgICBkaXJ0eUZvckxheW91dEZy
b21QZXJjZW50YWdlSGVpZ2h0RGVzY2VuZGFudHMoKTsKKworICAgIExheW91dFVuaXQgYmVmb3Jl
RWRnZSA9IGJvcmRlckFuZFBhZGRpbmdCZWZvcmUoKTsKKyAgICBMYXlvdXRVbml0IGFmdGVyRWRn
ZSA9IGJvcmRlckFuZFBhZGRpbmdBZnRlcigpICsgc2Nyb2xsYmFyTG9naWNhbEhlaWdodCgpOwor
CisgICAgc2V0TG9naWNhbEhlaWdodChiZWZvcmVFZGdlKTsKKyAgICAKKyAgICAvLyBMYXkgb3V0
IG91ciBoeXBvdGhldGljYWwgZ3JpZCBsaW5lIGFzIHRob3VnaCBpdCBvY2N1cnMgYXQgdGhlIHRv
cCBvZiB0aGUgYmxvY2suCisgICAgaWYgKHZpZXcoKS5sYXlvdXRTdGF0ZSgpLT5saW5lR3JpZCgp
ID09IHRoaXMpCisgICAgICAgIGxheW91dExpbmVHcmlkQm94KCk7CisKKyAgICAvLyBUaGUgbWFy
Z2luIHN0cnVjdCBjYWNoZXMgYWxsIG91ciBjdXJyZW50IG1hcmdpbiBjb2xsYXBzaW5nIHN0YXRl
LiAgVGhlIGNvbXBhY3Qgc3RydWN0IGNhY2hlcyBzdGF0ZSB3aGVuIHdlIGVuY291bnRlciBjb21w
YWN0cywKKyAgICBNYXJnaW5JbmZvIG1hcmdpbkluZm8odGhpcywgYmVmb3JlRWRnZSwgYWZ0ZXJF
ZGdlKTsKKworICAgIC8vIEZpZWxkc2V0cyBuZWVkIHRvIGZpbmQgdGhlaXIgbGVnZW5kIGFuZCBw
b3NpdGlvbiBpdCBpbnNpZGUgdGhlIGJvcmRlciBvZiB0aGUgb2JqZWN0LgorICAgIC8vIFRoZSBs
ZWdlbmQgdGhlbiBnZXRzIHNraXBwZWQgZHVyaW5nIG5vcm1hbCBsYXlvdXQuIFRoZSBzYW1lIGlz
IHRydWUgZm9yIHJ1YnkgdGV4dC4KKyAgICAvLyBJdCBkb2Vzbid0IGdldCBpbmNsdWRlZCBpbiB0
aGUgbm9ybWFsIGxheW91dCBwcm9jZXNzIGJ1dCBpcyBpbnN0ZWFkIHNraXBwZWQuCisgICAgUmVu
ZGVyT2JqZWN0KiBjaGlsZFRvRXhjbHVkZSA9IGxheW91dFNwZWNpYWxFeGNsdWRlZENoaWxkKHJl
bGF5b3V0Q2hpbGRyZW4pOworCisgICAgTGF5b3V0VW5pdCBwcmV2aW91c0Zsb2F0TG9naWNhbEJv
dHRvbSA9IDA7CisgICAgbWF4RmxvYXRMb2dpY2FsQm90dG9tID0gMDsKKworICAgIFJlbmRlckJv
eCogbmV4dCA9IGZpcnN0Q2hpbGRCb3goKTsKKworICAgIHdoaWxlIChuZXh0KSB7CisgICAgICAg
IFJlbmRlckJveCogY2hpbGQgPSBuZXh0OworICAgICAgICBuZXh0ID0gY2hpbGQtPm5leHRTaWJs
aW5nQm94KCk7CisKKyAgICAgICAgaWYgKGNoaWxkVG9FeGNsdWRlID09IGNoaWxkKQorICAgICAg
ICAgICAgY29udGludWU7IC8vIFNraXAgdGhpcyBjaGlsZCwgc2luY2UgaXQgd2lsbCBiZSBwb3Np
dGlvbmVkIGJ5IHRoZSBzcGVjaWFsaXplZCBzdWJjbGFzcyAoZmllbGRzZXRzIGFuZCBydWJ5IHJ1
bnMpLgorCisgICAgICAgIHVwZGF0ZUJsb2NrQ2hpbGREaXJ0eUJpdHNCZWZvcmVMYXlvdXQocmVs
YXlvdXRDaGlsZHJlbiwgY2hpbGQpOworCisgICAgICAgIGlmIChjaGlsZC0+aXNPdXRPZkZsb3dQ
b3NpdGlvbmVkKCkpIHsKKyAgICAgICAgICAgIGNoaWxkLT5jb250YWluaW5nQmxvY2soKS0+aW5z
ZXJ0UG9zaXRpb25lZE9iamVjdChjaGlsZCk7CisgICAgICAgICAgICBhZGp1c3RQb3NpdGlvbmVk
QmxvY2soY2hpbGQsIG1hcmdpbkluZm8pOworICAgICAgICAgICAgY29udGludWU7CisgICAgICAg
IH0KKyAgICAgICAgaWYgKGNoaWxkLT5pc0Zsb2F0aW5nKCkpIHsKKyAgICAgICAgICAgIGluc2Vy
dEZsb2F0aW5nT2JqZWN0KGNoaWxkKTsKKyAgICAgICAgICAgIGFkanVzdEZsb2F0aW5nQmxvY2so
bWFyZ2luSW5mbyk7CisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgfQorCisgICAgICAg
IC8vIExheSBvdXQgdGhlIGNoaWxkLgorICAgICAgICBsYXlvdXRCbG9ja0NoaWxkKGNoaWxkLCBt
YXJnaW5JbmZvLCBwcmV2aW91c0Zsb2F0TG9naWNhbEJvdHRvbSwgbWF4RmxvYXRMb2dpY2FsQm90
dG9tKTsKKyAgICB9CisgICAgCisgICAgLy8gTm93IGRvIHRoZSBoYW5kbGluZyBvZiB0aGUgYm90
dG9tIG9mIHRoZSBibG9jaywgYWRkaW5nIGluIG91ciBib3R0b20gYm9yZGVyL3BhZGRpbmcgYW5k
CisgICAgLy8gZGV0ZXJtaW5pbmcgdGhlIGNvcnJlY3QgY29sbGFwc2VkIGJvdHRvbSBtYXJnaW4g
aW5mb3JtYXRpb24uCisgICAgaGFuZGxlQWZ0ZXJTaWRlT2ZCbG9jayhiZWZvcmVFZGdlLCBhZnRl
ckVkZ2UsIG1hcmdpbkluZm8pOworfQorCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2tGbG93LmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJsb2NrRmxvdy5oCShyZXZpc2lvbiAxNTUz
NjUpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2tGbG93LmgJKHdvcmtp
bmcgY29weSkKQEAgLTMzLDYgKzMzLDIwIEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIH5SZW5kZXJC
bG9ja0Zsb3coKTsKICAgICAKICAgICB2aXJ0dWFsIGJvb2wgaXNSZW5kZXJCbG9ja0Zsb3coKSBj
b25zdCBPVkVSUklERSBGSU5BTCB7IHJldHVybiB0cnVlOyB9CisgICAgCisgICAgdmlydHVhbCB2
b2lkIGxheW91dEJsb2NrKGJvb2wgcmVsYXlvdXRDaGlsZHJlbiwgTGF5b3V0VW5pdCBwYWdlTG9n
aWNhbEhlaWdodCA9IDApIE9WRVJSSURFOworICAgIAorcHJvdGVjdGVkOgorICAgIC8vIFRoaXMg
bWV0aG9kIGlzIGNhbGxlZCBhdCB0aGUgc3RhcnQgb2YgbGF5b3V0IHRvIHdpcGUgYXdheSBhbGwg
b2YgdGhlIGZsb2F0cyBpbiBvdXIgZmxvYXRpbmcgb2JqZWN0cyBsaXN0LiBJdCBhbHNvCisgICAg
Ly8gcmVwb3B1bGF0ZXMgdGhlIGxpc3Qgd2l0aCBhbnkgZmxvYXRzIHRoYXQgaW50cnVkZSBmcm9t
IHByZXZpb3VzIHNpYmxpbmdzIG9yIHBhcmVudHMuIEZsb2F0cyB0aGF0IHdlcmUgYWRkZWQgYnkK
KyAgICAvLyBkZXNjZW5kYW50cyBhcmUgZ29uZSB3aGVuIHRoaXMgY2FsbCBjb21wbGV0ZXMgYW5k
IHdpbGwgZ2V0IGFkZGVkIGJhY2sgbGF0ZXIgb24gYWZ0ZXIgdGhlIGNoaWxkcmVuIGhhdmUgZ290
dGVuCisgICAgLy8gYSByZWxheW91dC4KKyAgICB2b2lkIGNsZWFyRmxvYXRzKCk7CisKKyAgICAv
LyBSZW5kZXJCbG9ja0Zsb3cgYWx3YXlzIGNvbnRhaW5zIGVpdGhlciBsaW5lcyBvciBwYXJhZ3Jh
cGhzLiBXaGVuIHRoZSBjaGlsZHJlbiBhcmUgYWxsIGJsb2NrcyAoZS5nLiBwYXJhZ3JhcGhzKSwg
d2UgY2FsbCBsYXlvdXRCbG9ja0NoaWxkcmVuLgorICAgIC8vIFdoZW4gdGhlIGNoaWxkcmVuIGFy
ZSBhcmUgYWxsIGlubGluZSAoZS5nLiwgbGluZXMpLCB3ZSBjYWxsIGxheW91dElubGluZUNoaWxk
cmVuLgorICAgIHZvaWQgbGF5b3V0QmxvY2tDaGlsZHJlbihib29sIHJlbGF5b3V0Q2hpbGRyZW4s
IExheW91dFVuaXQmIG1heEZsb2F0TG9naWNhbEJvdHRvbSk7CisgICAgdm9pZCBsYXlvdXRJbmxp
bmVDaGlsZHJlbihib29sIHJlbGF5b3V0Q2hpbGRyZW4sIExheW91dFVuaXQmIHJlcGFpbnRMb2dp
Y2FsVG9wLCBMYXlvdXRVbml0JiByZXBhaW50TG9naWNhbEJvdHRvbSk7CiB9OwogCiBpbmxpbmUg
UmVuZGVyQmxvY2tGbG93JiB0b1JlbmRlckJsb2NrRmxvdyhSZW5kZXJPYmplY3QmIG9iamVjdCkK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCbG9ja0xpbmVMYXlvdXQuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCbG9ja0xpbmVM
YXlvdXQuY3BwCShyZXZpc2lvbiAxNTUzNjUpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVyQmxvY2tMaW5lTGF5b3V0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjEwOSw3ICsyMTA5
LDcgQEAgdm9pZCBSZW5kZXJCbG9jazo6cmVwYWludERpcnR5RmxvYXRzKFZlYwogICAgIH0KIH0K
IAotdm9pZCBSZW5kZXJCbG9jazo6bGF5b3V0SW5saW5lQ2hpbGRyZW4oYm9vbCByZWxheW91dENo
aWxkcmVuLCBMYXlvdXRVbml0JiByZXBhaW50TG9naWNhbFRvcCwgTGF5b3V0VW5pdCYgcmVwYWlu
dExvZ2ljYWxCb3R0b20pCit2b2lkIFJlbmRlckJsb2NrRmxvdzo6bGF5b3V0SW5saW5lQ2hpbGRy
ZW4oYm9vbCByZWxheW91dENoaWxkcmVuLCBMYXlvdXRVbml0JiByZXBhaW50TG9naWNhbFRvcCwg
TGF5b3V0VW5pdCYgcmVwYWludExvZ2ljYWxCb3R0b20pCiB7CiAgICAgc2V0TG9naWNhbEhlaWdo
dChib3JkZXJBbmRQYWRkaW5nQmVmb3JlKCkpOwogICAgIApJbmRleDogU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdUZXh0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1RleHQuY3BwCShyZXZpc2lvbiAxNTUzNjUpCisr
KyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1RleHQuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC00MTQsNyArNDE0LDEwIEBAIHZvaWQgUmVuZGVyU1ZHVGV4dDo6bGF5b3V0KCkK
ICAgICAvLyBGSVhNRTogV2UgbmVlZCB0byBmaW5kIGEgd2F5IHRvIG9ubHkgbGF5b3V0IHRoZSBj
aGlsZCBib3hlcywgaWYgbmVlZGVkLgogICAgIEZsb2F0UmVjdCBvbGRCb3VuZGFyaWVzID0gb2Jq
ZWN0Qm91bmRpbmdCb3goKTsKICAgICBBU1NFUlQoY2hpbGRyZW5JbmxpbmUoKSk7Ci0gICAgZm9y
Y2VMYXlvdXRJbmxpbmVDaGlsZHJlbigpOworICAgIExheW91dFVuaXQgcmVwYWludExvZ2ljYWxU
b3AgPSAwOworICAgIExheW91dFVuaXQgcmVwYWludExvZ2ljYWxCb3R0b20gPSAwOworICAgIGNs
ZWFyRmxvYXRzKCk7CisgICAgbGF5b3V0SW5saW5lQ2hpbGRyZW4odHJ1ZSwgcmVwYWludExvZ2lj
YWxUb3AsIHJlcGFpbnRMb2dpY2FsQm90dG9tKTsKIAogICAgIGlmIChtX25lZWRzUmVvcmRlcmlu
ZykKICAgICAgICAgbV9uZWVkc1Jlb3JkZXJpbmcgPSBmYWxzZTsK
</data>
<flag name="review"
          id="233116"
          type_id="1"
          status="-"
          setter="hyatt"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>211067</attachid>
            <date>2013-09-09 12:50:50 -0700</date>
            <delta_ts>2013-09-09 12:51:36 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>patch.txt</filename>
            <type>text/plain</type>
            <size>44670</size>
            <attacher name="Dave Hyatt">hyatt</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDE1NTM2OCkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDMxIEBACisyMDEzLTA5LTA5ICBEYXZpZCBI
eWF0dCAgPGh5YXR0QGFwcGxlLmNvbT4KKworICAgICAgICBNb3ZlIGxheW91dEJsb2NrIGFuZCBs
YXlvdXRCbG9ja0NoaWxkcmVuIGludG8gUmVuZGVyQmxvY2tGbG93CisgICAgICAgIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMjEwMzYKKworICAgICAgICBSZXZpZXdl
ZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBNb3ZlIGxheW91dEJsb2NrIGludG8gUmVu
ZGVyQmxvY2tGbG93IGFuZCBtYWtlIHRoZSBiYXNlIGNsYXNzIHZlcnNpb24gb2YKKyAgICAgICAg
dGhlIG1ldGhvZCBBU1NFUlRfTk9UX1JFQUNIRUQuIEJlZ2luIHRoZSBwcm9jZXNzIG9mIG1vdmlu
ZyBibG9jayBsYXlvdXQgCisgICAgICAgIGludG8gUmVuZGVyQmxvY2tGbG93IGJ5IHB1dHRpbmcg
bGF5b3V0QmxvY2tDaGlsZHJlbiB0aGVyZSBhcyB3ZWxsLgorICAgICAgICAKKyAgICAgICAgVGhp
cyBwYXRjaCBhbHNvIHB1dHMgY2xlYXJGbG9hdHMgaW50byBSZW5kZXJCbG9ja0Zsb3cgYW5kIGp1
c3QgZGl0Y2hlcyB0aGUKKyAgICAgICAgU1ZHLXNwZWNpZmljIGZvcmNlTGF5b3V0SW5saW5lQ2hp
bGRyZW4gYnkgbGV0dGluZyBSZW5kZXJTVkdUZXh0IGRvIHdoYXQgaXQKKyAgICAgICAgbmVlZHMg
aW4gaXRzIG93biBmaWxlLgorCisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckJsb2NrLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJsb2NrOjpsYXlvdXRCbG9jayk6CisgICAgICAgICog
cmVuZGVyaW5nL1JlbmRlckJsb2NrLmg6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckJsb2Nr
Rmxvdy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCbG9ja0Zsb3c6OmNsZWFyRmxvYXRz
KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJsb2NrRmxvdzo6bGF5b3V0QmxvY2spOgorICAg
ICAgICAoV2ViQ29yZTo6UmVuZGVyQmxvY2tGbG93OjpsYXlvdXRCbG9ja0NoaWxkcmVuKToKKyAg
ICAgICAgKiByZW5kZXJpbmcvUmVuZGVyQmxvY2tGbG93Lmg6CisgICAgICAgICogcmVuZGVyaW5n
L1JlbmRlckJsb2NrTGluZUxheW91dC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCbG9j
a0Zsb3c6OmxheW91dElubGluZUNoaWxkcmVuKToKKyAgICAgICAgKiByZW5kZXJpbmcvc3ZnL1Jl
bmRlclNWR1RleHQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU1ZHVGV4dDo6bGF5b3V0
KToKKwogMjAxMy0wOS0wOSAgQmVtIEpvbmVzLUJleSAgPGJqb25lc2JlQGFkb2JlLmNvbT4KIAog
ICAgICAgICBNb3ZlIGxvZ2ljYWwoTGVmdHxSaWdodClGbG9hdE9mZnNldEZvckxpbmUgbWV0aG9k
cyBpbnRvIEZsb2F0aW5nT2JqZWN0cwpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1Jl
bmRlckJsb2NrLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVu
ZGVyQmxvY2suY3BwCShyZXZpc2lvbiAxNTUzNjYpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvUmVuZGVyQmxvY2suY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNjMwLDE3MiArMTYzMCw5IEBA
IGJvb2wgUmVuZGVyQmxvY2s6OnJlbGF5b3V0VG9Bdm9pZFdpZG93cygKICAgICByZXR1cm4gdHJ1
ZTsKIH0KIAotdm9pZCBSZW5kZXJCbG9jazo6bGF5b3V0QmxvY2soYm9vbCByZWxheW91dENoaWxk
cmVuLCBMYXlvdXRVbml0IHBhZ2VMb2dpY2FsSGVpZ2h0KQordm9pZCBSZW5kZXJCbG9jazo6bGF5
b3V0QmxvY2soYm9vbCwgTGF5b3V0VW5pdCkKIHsKLSAgICBBU1NFUlQobmVlZHNMYXlvdXQoKSk7
Ci0KLSAgICBpZiAoaXNJbmxpbmUoKSAmJiAhaXNJbmxpbmVCbG9ja09ySW5saW5lVGFibGUoKSkg
Ly8gSW5saW5lIDxmb3JtPnMgaW5zaWRlIHZhcmlvdXMgdGFibGUgZWxlbWVudHMgY2FuCi0gICAg
ICAgIHJldHVybjsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGNhdXNl
IHVzIHRvIGNvbWUgaW4gaGVyZS4gIEp1c3QgYmFpbC4KLQotICAgIGlmICghcmVsYXlvdXRDaGls
ZHJlbiAmJiBzaW1wbGlmaWVkTGF5b3V0KCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIExheW91
dFJlcGFpbnRlciByZXBhaW50ZXIoKnRoaXMsIGNoZWNrRm9yUmVwYWludER1cmluZ0xheW91dCgp
KTsKLQotICAgIGlmICh1cGRhdGVMb2dpY2FsV2lkdGhBbmRDb2x1bW5XaWR0aCgpKQotICAgICAg
ICByZWxheW91dENoaWxkcmVuID0gdHJ1ZTsKLQotICAgIGNsZWFyRmxvYXRzKCk7Ci0KLSAgICBM
YXlvdXRVbml0IHByZXZpb3VzSGVpZ2h0ID0gbG9naWNhbEhlaWdodCgpOwotICAgIC8vIEZJWE1F
OiBzaG91bGQgdGhpcyBzdGFydCBvdXQgYXMgYm9yZGVyQW5kUGFkZGluZ0xvZ2ljYWxIZWlnaHQo
KSArIHNjcm9sbGJhckxvZ2ljYWxIZWlnaHQoKSwKLSAgICAvLyBmb3IgY29uc2lzdGVuY3kgd2l0
aCBvdGhlciByZW5kZXIgY2xhc3Nlcz8KLSAgICBzZXRMb2dpY2FsSGVpZ2h0KDApOwotCi0gICAg
Ym9vbCBwYWdlTG9naWNhbEhlaWdodENoYW5nZWQgPSBmYWxzZTsKLSAgICBib29sIGhhc1NwZWNp
ZmllZFBhZ2VMb2dpY2FsSGVpZ2h0ID0gZmFsc2U7Ci0gICAgY2hlY2tGb3JQYWdpbmF0aW9uTG9n
aWNhbEhlaWdodENoYW5nZShwYWdlTG9naWNhbEhlaWdodCwgcGFnZUxvZ2ljYWxIZWlnaHRDaGFu
Z2VkLCBoYXNTcGVjaWZpZWRQYWdlTG9naWNhbEhlaWdodCk7Ci0KLSAgICBSZW5kZXJTdHlsZSog
c3R5bGVUb1VzZSA9IHN0eWxlKCk7Ci0gICAgTGF5b3V0U3RhdGVNYWludGFpbmVyIHN0YXRlUHVz
aGVyKCZ2aWV3KCksIHRoaXMsIGxvY2F0aW9uT2Zmc2V0KCksIGhhc0NvbHVtbnMoKSB8fCBoYXNU
cmFuc2Zvcm0oKSB8fCBoYXNSZWZsZWN0aW9uKCkgfHwgc3R5bGVUb1VzZS0+aXNGbGlwcGVkQmxv
Y2tzV3JpdGluZ01vZGUoKSwgcGFnZUxvZ2ljYWxIZWlnaHQsIHBhZ2VMb2dpY2FsSGVpZ2h0Q2hh
bmdlZCwgY29sdW1uSW5mbygpKTsKLQotICAgIC8vIFJlZ2lvbnMgY2hhbmdpbmcgd2lkdGhzIGNh
biBmb3JjZSB1cyB0byByZWxheW91dCBvdXIgY2hpbGRyZW4uCi0gICAgUmVuZGVyRmxvd1RocmVh
ZCogZmxvd1RocmVhZCA9IGZsb3dUaHJlYWRDb250YWluaW5nQmxvY2soKTsKLSAgICBpZiAobG9n
aWNhbFdpZHRoQ2hhbmdlZEluUmVnaW9ucyhmbG93VGhyZWFkKSkKLSAgICAgICAgcmVsYXlvdXRD
aGlsZHJlbiA9IHRydWU7Ci0gICAgaWYgKHVwZGF0ZVNoYXBlc0JlZm9yZUJsb2NrTGF5b3V0KCkp
Ci0gICAgICAgIHJlbGF5b3V0Q2hpbGRyZW4gPSB0cnVlOwotCi0gICAgLy8gV2UgdXNlIGZvdXIg
dmFsdWVzLCBtYXhUb3BQb3MsIG1heFRvcE5lZywgbWF4Qm90dG9tUG9zLCBhbmQgbWF4Qm90dG9t
TmVnLCB0byB0cmFjawotICAgIC8vIG91ciBjdXJyZW50IG1heGltYWwgcG9zaXRpdmUgYW5kIG5l
Z2F0aXZlIG1hcmdpbnMuICBUaGVzZSB2YWx1ZXMgYXJlIHVzZWQgd2hlbiB3ZQotICAgIC8vIGFy
ZSBjb2xsYXBzZWQgd2l0aCBhZGphY2VudCBibG9ja3MsIHNvIGZvciBleGFtcGxlLCBpZiB5b3Ug
aGF2ZSBibG9jayBBIGFuZCBCCi0gICAgLy8gY29sbGFwc2luZyB0b2dldGhlciwgdGhlbiB5b3Un
ZCB0YWtlIHRoZSBtYXhpbWFsIHBvc2l0aXZlIG1hcmdpbiBmcm9tIGJvdGggQSBhbmQgQgotICAg
IC8vIGFuZCBzdWJ0cmFjdCBpdCBmcm9tIHRoZSBtYXhpbWFsIG5lZ2F0aXZlIG1hcmdpbiBmcm9t
IGJvdGggQSBhbmQgQiB0byBnZXQgdGhlCi0gICAgLy8gdHJ1ZSBjb2xsYXBzZWQgbWFyZ2luLiAg
VGhpcyBhbGdvcml0aG0gaXMgcmVjdXJzaXZlLCBzbyB3aGVuIHdlIGZpbmlzaCBsYXlvdXQoKQot
ICAgIC8vIG91ciBibG9jayBrbm93cyBpdHMgY3VycmVudCBtYXhpbWFsIHBvc2l0aXZlL25lZ2F0
aXZlIHZhbHVlcy4KLSAgICAvLwotICAgIC8vIFN0YXJ0IG91dCBieSBzZXR0aW5nIG91ciBtYXJn
aW4gdmFsdWVzIHRvIG91ciBjdXJyZW50IG1hcmdpbnMuICBUYWJsZSBjZWxscyBoYXZlCi0gICAg
Ly8gbm8gbWFyZ2lucywgc28gd2UgZG9uJ3QgZmlsbCBpbiB0aGUgdmFsdWVzIGZvciB0YWJsZSBj
ZWxscy4KLSAgICBib29sIGlzQ2VsbCA9IGlzVGFibGVDZWxsKCk7Ci0gICAgaWYgKCFpc0NlbGwp
IHsKLSAgICAgICAgaW5pdE1heE1hcmdpblZhbHVlcygpOwotICAgICAgICAKLSAgICAgICAgc2V0
SGFzTWFyZ2luQmVmb3JlUXVpcmsoc3R5bGVUb1VzZS0+aGFzTWFyZ2luQmVmb3JlUXVpcmsoKSk7
Ci0gICAgICAgIHNldEhhc01hcmdpbkFmdGVyUXVpcmsoc3R5bGVUb1VzZS0+aGFzTWFyZ2luQWZ0
ZXJRdWlyaygpKTsKLSAgICAgICAgc2V0UGFnaW5hdGlvblN0cnV0KDApOwotICAgIH0KLQotICAg
IExheW91dFVuaXQgcmVwYWludExvZ2ljYWxUb3AgPSAwOwotICAgIExheW91dFVuaXQgcmVwYWlu
dExvZ2ljYWxCb3R0b20gPSAwOwotICAgIExheW91dFVuaXQgbWF4RmxvYXRMb2dpY2FsQm90dG9t
ID0gMDsKLSAgICBpZiAoIWZpcnN0Q2hpbGQoKSAmJiAhaXNBbm9ueW1vdXNCbG9jaygpKQotICAg
ICAgICBzZXRDaGlsZHJlbklubGluZSh0cnVlKTsKLSAgICBpZiAoY2hpbGRyZW5JbmxpbmUoKSkK
LSAgICAgICAgbGF5b3V0SW5saW5lQ2hpbGRyZW4ocmVsYXlvdXRDaGlsZHJlbiwgcmVwYWludExv
Z2ljYWxUb3AsIHJlcGFpbnRMb2dpY2FsQm90dG9tKTsKLSAgICBlbHNlCi0gICAgICAgIGxheW91
dEJsb2NrQ2hpbGRyZW4ocmVsYXlvdXRDaGlsZHJlbiwgbWF4RmxvYXRMb2dpY2FsQm90dG9tKTsK
LQotICAgIC8vIEV4cGFuZCBvdXIgaW50cmluc2ljIGhlaWdodCB0byBlbmNvbXBhc3MgZmxvYXRz
LgotICAgIExheW91dFVuaXQgdG9BZGQgPSBib3JkZXJBbmRQYWRkaW5nQWZ0ZXIoKSArIHNjcm9s
bGJhckxvZ2ljYWxIZWlnaHQoKTsKLSAgICBpZiAobG93ZXN0RmxvYXRMb2dpY2FsQm90dG9tKCkg
PiAobG9naWNhbEhlaWdodCgpIC0gdG9BZGQpICYmIGV4cGFuZHNUb0VuY2xvc2VPdmVyaGFuZ2lu
Z0Zsb2F0cygpKQotICAgICAgICBzZXRMb2dpY2FsSGVpZ2h0KGxvd2VzdEZsb2F0TG9naWNhbEJv
dHRvbSgpICsgdG9BZGQpOwotICAgIAotICAgIGlmIChyZWxheW91dEZvclBhZ2luYXRpb24oaGFz
U3BlY2lmaWVkUGFnZUxvZ2ljYWxIZWlnaHQsIHBhZ2VMb2dpY2FsSGVpZ2h0LCBzdGF0ZVB1c2hl
cikgfHwgcmVsYXlvdXRUb0F2b2lkV2lkb3dzKHN0YXRlUHVzaGVyKSkgewotICAgICAgICBBU1NF
UlQoIXNob3VsZEJyZWFrQXRMaW5lVG9Bdm9pZFdpZG93KCkpOwotICAgICAgICByZXR1cm47Ci0g
ICAgfQotCi0gICAgLy8gQ2FsY3VsYXRlIG91ciBuZXcgaGVpZ2h0LgotICAgIExheW91dFVuaXQg
b2xkSGVpZ2h0ID0gbG9naWNhbEhlaWdodCgpOwotICAgIExheW91dFVuaXQgb2xkQ2xpZW50QWZ0
ZXJFZGdlID0gY2xpZW50TG9naWNhbEJvdHRvbSgpOwotCi0gICAgLy8gQmVmb3JlIHVwZGF0aW5n
IHRoZSBmaW5hbCBzaXplIG9mIHRoZSBmbG93IHRocmVhZCBtYWtlIHN1cmUgYSBmb3JjZWQgYnJl
YWsgaXMgYXBwbGllZCBhZnRlciB0aGUgY29udGVudC4KLSAgICAvLyBUaGlzIGVuc3VyZXMgdGhl
IHNpemUgaW5mb3JtYXRpb24gaXMgY29ycmVjdGx5IGNvbXB1dGVkIGZvciB0aGUgbGFzdCBhdXRv
LWhlaWdodCByZWdpb24gcmVjZWl2aW5nIGNvbnRlbnQuCi0gICAgaWYgKGlzUmVuZGVyRmxvd1Ro
cmVhZCgpKQotICAgICAgICB0b1JlbmRlckZsb3dUaHJlYWQodGhpcyktPmFwcGx5QnJlYWtBZnRl
ckNvbnRlbnQob2xkQ2xpZW50QWZ0ZXJFZGdlKTsKLQotICAgIHVwZGF0ZUxvZ2ljYWxIZWlnaHQo
KTsKLSAgICBMYXlvdXRVbml0IG5ld0hlaWdodCA9IGxvZ2ljYWxIZWlnaHQoKTsKLSAgICBpZiAo
b2xkSGVpZ2h0ICE9IG5ld0hlaWdodCkgewotICAgICAgICBpZiAob2xkSGVpZ2h0ID4gbmV3SGVp
Z2h0ICYmIG1heEZsb2F0TG9naWNhbEJvdHRvbSA+IG5ld0hlaWdodCAmJiAhY2hpbGRyZW5Jbmxp
bmUoKSkgewotICAgICAgICAgICAgLy8gT25lIG9mIG91ciBjaGlsZHJlbidzIGZsb2F0cyBtYXkg
aGF2ZSBiZWNvbWUgYW4gb3ZlcmhhbmdpbmcgZmxvYXQgZm9yIHVzLiBXZSBuZWVkIHRvIGxvb2sg
Zm9yIGl0LgotICAgICAgICAgICAgZm9yIChSZW5kZXJPYmplY3QqIGNoaWxkID0gZmlyc3RDaGls
ZCgpOyBjaGlsZDsgY2hpbGQgPSBjaGlsZC0+bmV4dFNpYmxpbmcoKSkgewotICAgICAgICAgICAg
ICAgIGlmIChjaGlsZC0+aXNSZW5kZXJCbG9ja0Zsb3coKSAmJiAhY2hpbGQtPmlzRmxvYXRpbmdP
ck91dE9mRmxvd1Bvc2l0aW9uZWQoKSkgewotICAgICAgICAgICAgICAgICAgICBSZW5kZXJCbG9j
ayogYmxvY2sgPSB0b1JlbmRlckJsb2NrKGNoaWxkKTsKLSAgICAgICAgICAgICAgICAgICAgaWYg
KGJsb2NrLT5sb3dlc3RGbG9hdExvZ2ljYWxCb3R0b20oKSArIGJsb2NrLT5sb2dpY2FsVG9wKCkg
PiBuZXdIZWlnaHQpCi0gICAgICAgICAgICAgICAgICAgICAgICBhZGRPdmVyaGFuZ2luZ0Zsb2F0
cyhibG9jaywgZmFsc2UpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAg
ICAgfQotICAgIH0KLQotICAgIGJvb2wgaGVpZ2h0Q2hhbmdlZCA9IChwcmV2aW91c0hlaWdodCAh
PSBuZXdIZWlnaHQpOwotICAgIGlmIChoZWlnaHRDaGFuZ2VkKQotICAgICAgICByZWxheW91dENo
aWxkcmVuID0gdHJ1ZTsKLQotICAgIGxheW91dFBvc2l0aW9uZWRPYmplY3RzKHJlbGF5b3V0Q2hp
bGRyZW4gfHwgaXNSb290KCkpOwotCi0gICAgdXBkYXRlU2hhcGVzQWZ0ZXJCbG9ja0xheW91dCho
ZWlnaHRDaGFuZ2VkKTsKLQotICAgIC8vIEFkZCBvdmVyZmxvdyBmcm9tIGNoaWxkcmVuICh1bmxl
c3Mgd2UncmUgbXVsdGktY29sdW1uLCBzaW5jZSBpbiB0aGF0IGNhc2UgYWxsIG91ciBjaGlsZCBv
dmVyZmxvdyBpcyBjbGlwcGVkIGFueXdheSkuCi0gICAgY29tcHV0ZU92ZXJmbG93KG9sZENsaWVu
dEFmdGVyRWRnZSk7Ci0gICAgCi0gICAgc3RhdGVQdXNoZXIucG9wKCk7Ci0KLSAgICBmaXRCb3Jk
ZXJUb0xpbmVzSWZOZWVkZWQoKTsKLQotICAgIGlmICh2aWV3KCkubGF5b3V0U3RhdGUoKS0+bV9w
YWdlTG9naWNhbEhlaWdodCkKLSAgICAgICAgc2V0UGFnZUxvZ2ljYWxPZmZzZXQodmlldygpLmxh
eW91dFN0YXRlKCktPnBhZ2VMb2dpY2FsT2Zmc2V0KHRoaXMsIGxvZ2ljYWxUb3AoKSkpOwotCi0g
ICAgdXBkYXRlTGF5ZXJUcmFuc2Zvcm0oKTsKLQotICAgIC8vIFVwZGF0ZSBvdXIgc2Nyb2xsIGlu
Zm9ybWF0aW9uIGlmIHdlJ3JlIG92ZXJmbG93OmF1dG8vc2Nyb2xsL2hpZGRlbiBub3cgdGhhdCB3
ZSBrbm93IGlmCi0gICAgLy8gd2Ugb3ZlcmZsb3cgb3Igbm90LgotICAgIHVwZGF0ZVNjcm9sbElu
Zm9BZnRlckxheW91dCgpOwotCi0gICAgLy8gRklYTUU6IFRoaXMgcmVwYWludCBsb2dpYyBzaG91
bGQgYmUgbW92ZWQgaW50byBhIHNlcGFyYXRlIGhlbHBlciBmdW5jdGlvbiEKLSAgICAvLyBSZXBh
aW50IHdpdGggb3VyIG5ldyBib3VuZHMgaWYgdGhleSBhcmUgZGlmZmVyZW50IGZyb20gb3VyIG9s
ZCBib3VuZHMuCi0gICAgYm9vbCBkaWRGdWxsUmVwYWludCA9IHJlcGFpbnRlci5yZXBhaW50QWZ0
ZXJMYXlvdXQoKTsKLSAgICBpZiAoIWRpZEZ1bGxSZXBhaW50ICYmIHJlcGFpbnRMb2dpY2FsVG9w
ICE9IHJlcGFpbnRMb2dpY2FsQm90dG9tICYmIChzdHlsZVRvVXNlLT52aXNpYmlsaXR5KCkgPT0g
VklTSUJMRSB8fCBlbmNsb3NpbmdMYXllcigpLT5oYXNWaXNpYmxlQ29udGVudCgpKSkgewotICAg
ICAgICAvLyBGSVhNRTogV2UgY291bGQgdGlnaHRlbiB1cCB0aGUgbGVmdCBhbmQgcmlnaHQgaW52
YWxpZGF0aW9uIHBvaW50cyBpZiB3ZSBsZXQgbGF5b3V0SW5saW5lQ2hpbGRyZW4gZmlsbCB0aGVt
IGluIGJhc2VkIG9mZiB0aGUgcGFydGljdWxhciBsaW5lcwotICAgICAgICAvLyBpdCBoYWQgdG8g
bGF5IG91dC4gIFdlIHdvdWxkbid0IG5lZWQgdGhlIGhhc092ZXJmbG93Q2xpcCgpIGhhY2sgaW4g
dGhhdCBjYXNlIGVpdGhlci4KLSAgICAgICAgTGF5b3V0VW5pdCByZXBhaW50TG9naWNhbExlZnQg
PSBsb2dpY2FsTGVmdFZpc3VhbE92ZXJmbG93KCk7Ci0gICAgICAgIExheW91dFVuaXQgcmVwYWlu
dExvZ2ljYWxSaWdodCA9IGxvZ2ljYWxSaWdodFZpc3VhbE92ZXJmbG93KCk7Ci0gICAgICAgIGlm
IChoYXNPdmVyZmxvd0NsaXAoKSkgewotICAgICAgICAgICAgLy8gSWYgd2UgaGF2ZSBjbGlwcGVk
IG92ZXJmbG93LCB3ZSBzaG91bGQgdXNlIGxheW91dCBvdmVyZmxvdyBhcyB3ZWxsLCBzaW5jZSB2
aXN1YWwgb3ZlcmZsb3cgZnJvbSBsaW5lcyBkaWRuJ3QgcHJvcGFnYXRlIHRvIG91ciBibG9jaydz
IG92ZXJmbG93LgotICAgICAgICAgICAgLy8gTm90ZSB0aGUgb2xkIGNvZGUgZGlkIHRoaXMgYXMg
d2VsbCBidXQgZXZlbiBmb3Igb3ZlcmZsb3c6dmlzaWJsZS4gIFRoZSBhZGRpdGlvbiBvZiBoYXNP
dmVyZmxvd0NsaXAoKSBhdCBsZWFzdCB0aWdodGVucyB1cCB0aGUgaGFjayBhIGJpdC4KLSAgICAg
ICAgICAgIC8vIGxheW91dElubGluZUNoaWxkcmVuIHNob3VsZCBiZSBwYXRjaGVkIHRvIGNvbXB1
dGUgdGhlIGVudGlyZSByZXBhaW50IHJlY3QuCi0gICAgICAgICAgICByZXBhaW50TG9naWNhbExl
ZnQgPSBtaW4ocmVwYWludExvZ2ljYWxMZWZ0LCBsb2dpY2FsTGVmdExheW91dE92ZXJmbG93KCkp
OwotICAgICAgICAgICAgcmVwYWludExvZ2ljYWxSaWdodCA9IG1heChyZXBhaW50TG9naWNhbFJp
Z2h0LCBsb2dpY2FsUmlnaHRMYXlvdXRPdmVyZmxvdygpKTsKLSAgICAgICAgfQotICAgICAgICAK
LSAgICAgICAgTGF5b3V0UmVjdCByZXBhaW50UmVjdDsKLSAgICAgICAgaWYgKGlzSG9yaXpvbnRh
bFdyaXRpbmdNb2RlKCkpCi0gICAgICAgICAgICByZXBhaW50UmVjdCA9IExheW91dFJlY3QocmVw
YWludExvZ2ljYWxMZWZ0LCByZXBhaW50TG9naWNhbFRvcCwgcmVwYWludExvZ2ljYWxSaWdodCAt
IHJlcGFpbnRMb2dpY2FsTGVmdCwgcmVwYWludExvZ2ljYWxCb3R0b20gLSByZXBhaW50TG9naWNh
bFRvcCk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIHJlcGFpbnRSZWN0ID0gTGF5b3V0UmVj
dChyZXBhaW50TG9naWNhbFRvcCwgcmVwYWludExvZ2ljYWxMZWZ0LCByZXBhaW50TG9naWNhbEJv
dHRvbSAtIHJlcGFpbnRMb2dpY2FsVG9wLCByZXBhaW50TG9naWNhbFJpZ2h0IC0gcmVwYWludExv
Z2ljYWxMZWZ0KTsKLQotICAgICAgICAvLyBUaGUgcmVwYWludCByZWN0IG1heSBiZSBzcGxpdCBh
Y3Jvc3MgY29sdW1ucywgaW4gd2hpY2ggY2FzZSBhZGp1c3RSZWN0Rm9yQ29sdW1ucygpIHdpbGwg
cmV0dXJuIHRoZSB1bmlvbi4KLSAgICAgICAgYWRqdXN0UmVjdEZvckNvbHVtbnMocmVwYWludFJl
Y3QpOwotCi0gICAgICAgIHJlcGFpbnRSZWN0LmluZmxhdGUobWF4aW1hbE91dGxpbmVTaXplKFBh
aW50UGhhc2VPdXRsaW5lKSk7Ci0gICAgICAgIAotICAgICAgICBpZiAoaGFzT3ZlcmZsb3dDbGlw
KCkpIHsKLSAgICAgICAgICAgIC8vIEFkanVzdCByZXBhaW50IHJlY3QgZm9yIHNjcm9sbCBvZmZz
ZXQKLSAgICAgICAgICAgIHJlcGFpbnRSZWN0Lm1vdmUoLXNjcm9sbGVkQ29udGVudE9mZnNldCgp
KTsKLQotICAgICAgICAgICAgLy8gRG9uJ3QgYWxsb3cgdGhpcyByZWN0IHRvIHNwaWxsIG91dCBv
ZiBvdXIgb3ZlcmZsb3cgYm94LgotICAgICAgICAgICAgcmVwYWludFJlY3QuaW50ZXJzZWN0KExh
eW91dFJlY3QoTGF5b3V0UG9pbnQoKSwgc2l6ZSgpKSk7Ci0gICAgICAgIH0KLQotICAgICAgICAv
LyBNYWtlIHN1cmUgdGhlIHJlY3QgaXMgc3RpbGwgbm9uLWVtcHR5IGFmdGVyIGludGVyc2VjdGlu
ZyBmb3Igb3ZlcmZsb3cgYWJvdmUKLSAgICAgICAgaWYgKCFyZXBhaW50UmVjdC5pc0VtcHR5KCkp
IHsKLSAgICAgICAgICAgIHJlcGFpbnRSZWN0YW5nbGUocmVwYWludFJlY3QpOyAvLyBXZSBuZWVk
IHRvIGRvIGEgcGFydGlhbCByZXBhaW50IG9mIG91ciBjb250ZW50LgotICAgICAgICAgICAgaWYg
KGhhc1JlZmxlY3Rpb24oKSkKLSAgICAgICAgICAgICAgICByZXBhaW50UmVjdGFuZ2xlKHJlZmxl
Y3RlZFJlY3QocmVwYWludFJlY3QpKTsKLSAgICAgICAgfQotICAgIH0KLQorICAgIEFTU0VSVF9O
T1RfUkVBQ0hFRCgpOwogICAgIHNldE5lZWRzTGF5b3V0KGZhbHNlKTsKIH0KIApAQCAtMjU5OCw2
MSArMjQzNSw2IEBAIHZvaWQgUmVuZGVyQmxvY2s6OmRpcnR5Rm9yTGF5b3V0RnJvbVBlcmMKICAg
ICB9CiB9CiAKLXZvaWQgUmVuZGVyQmxvY2s6OmxheW91dEJsb2NrQ2hpbGRyZW4oYm9vbCByZWxh
eW91dENoaWxkcmVuLCBMYXlvdXRVbml0JiBtYXhGbG9hdExvZ2ljYWxCb3R0b20pCi17Ci0gICAg
ZGlydHlGb3JMYXlvdXRGcm9tUGVyY2VudGFnZUhlaWdodERlc2NlbmRhbnRzKCk7Ci0KLSAgICBM
YXlvdXRVbml0IGJlZm9yZUVkZ2UgPSBib3JkZXJBbmRQYWRkaW5nQmVmb3JlKCk7Ci0gICAgTGF5
b3V0VW5pdCBhZnRlckVkZ2UgPSBib3JkZXJBbmRQYWRkaW5nQWZ0ZXIoKSArIHNjcm9sbGJhckxv
Z2ljYWxIZWlnaHQoKTsKLQotICAgIHNldExvZ2ljYWxIZWlnaHQoYmVmb3JlRWRnZSk7Ci0gICAg
Ci0gICAgLy8gTGF5IG91dCBvdXIgaHlwb3RoZXRpY2FsIGdyaWQgbGluZSBhcyB0aG91Z2ggaXQg
b2NjdXJzIGF0IHRoZSB0b3Agb2YgdGhlIGJsb2NrLgotICAgIGlmICh2aWV3KCkubGF5b3V0U3Rh
dGUoKS0+bGluZUdyaWQoKSA9PSB0aGlzKQotICAgICAgICBsYXlvdXRMaW5lR3JpZEJveCgpOwot
Ci0gICAgLy8gVGhlIG1hcmdpbiBzdHJ1Y3QgY2FjaGVzIGFsbCBvdXIgY3VycmVudCBtYXJnaW4g
Y29sbGFwc2luZyBzdGF0ZS4gIFRoZSBjb21wYWN0IHN0cnVjdCBjYWNoZXMgc3RhdGUgd2hlbiB3
ZSBlbmNvdW50ZXIgY29tcGFjdHMsCi0gICAgTWFyZ2luSW5mbyBtYXJnaW5JbmZvKHRoaXMsIGJl
Zm9yZUVkZ2UsIGFmdGVyRWRnZSk7Ci0KLSAgICAvLyBGaWVsZHNldHMgbmVlZCB0byBmaW5kIHRo
ZWlyIGxlZ2VuZCBhbmQgcG9zaXRpb24gaXQgaW5zaWRlIHRoZSBib3JkZXIgb2YgdGhlIG9iamVj
dC4KLSAgICAvLyBUaGUgbGVnZW5kIHRoZW4gZ2V0cyBza2lwcGVkIGR1cmluZyBub3JtYWwgbGF5
b3V0LiAgVGhlIHNhbWUgaXMgdHJ1ZSBmb3IgcnVieSB0ZXh0LgotICAgIC8vIEl0IGRvZXNuJ3Qg
Z2V0IGluY2x1ZGVkIGluIHRoZSBub3JtYWwgbGF5b3V0IHByb2Nlc3MgYnV0IGlzIGluc3RlYWQg
c2tpcHBlZC4KLSAgICBSZW5kZXJPYmplY3QqIGNoaWxkVG9FeGNsdWRlID0gbGF5b3V0U3BlY2lh
bEV4Y2x1ZGVkQ2hpbGQocmVsYXlvdXRDaGlsZHJlbik7Ci0KLSAgICBMYXlvdXRVbml0IHByZXZp
b3VzRmxvYXRMb2dpY2FsQm90dG9tID0gMDsKLSAgICBtYXhGbG9hdExvZ2ljYWxCb3R0b20gPSAw
OwotCi0gICAgUmVuZGVyQm94KiBuZXh0ID0gZmlyc3RDaGlsZEJveCgpOwotCi0gICAgd2hpbGUg
KG5leHQpIHsKLSAgICAgICAgUmVuZGVyQm94KiBjaGlsZCA9IG5leHQ7Ci0gICAgICAgIG5leHQg
PSBjaGlsZC0+bmV4dFNpYmxpbmdCb3goKTsKLQotICAgICAgICBpZiAoY2hpbGRUb0V4Y2x1ZGUg
PT0gY2hpbGQpCi0gICAgICAgICAgICBjb250aW51ZTsgLy8gU2tpcCB0aGlzIGNoaWxkLCBzaW5j
ZSBpdCB3aWxsIGJlIHBvc2l0aW9uZWQgYnkgdGhlIHNwZWNpYWxpemVkIHN1YmNsYXNzIChmaWVs
ZHNldHMgYW5kIHJ1YnkgcnVucykuCi0KLSAgICAgICAgdXBkYXRlQmxvY2tDaGlsZERpcnR5Qml0
c0JlZm9yZUxheW91dChyZWxheW91dENoaWxkcmVuLCBjaGlsZCk7Ci0KLSAgICAgICAgaWYgKGNo
aWxkLT5pc091dE9mRmxvd1Bvc2l0aW9uZWQoKSkgewotICAgICAgICAgICAgY2hpbGQtPmNvbnRh
aW5pbmdCbG9jaygpLT5pbnNlcnRQb3NpdGlvbmVkT2JqZWN0KGNoaWxkKTsKLSAgICAgICAgICAg
IGFkanVzdFBvc2l0aW9uZWRCbG9jayhjaGlsZCwgbWFyZ2luSW5mbyk7Ci0gICAgICAgICAgICBj
b250aW51ZTsKLSAgICAgICAgfQotICAgICAgICBpZiAoY2hpbGQtPmlzRmxvYXRpbmcoKSkgewot
ICAgICAgICAgICAgaW5zZXJ0RmxvYXRpbmdPYmplY3QoY2hpbGQpOwotICAgICAgICAgICAgYWRq
dXN0RmxvYXRpbmdCbG9jayhtYXJnaW5JbmZvKTsKLSAgICAgICAgICAgIGNvbnRpbnVlOwotICAg
ICAgICB9Ci0KLSAgICAgICAgLy8gTGF5IG91dCB0aGUgY2hpbGQuCi0gICAgICAgIGxheW91dEJs
b2NrQ2hpbGQoY2hpbGQsIG1hcmdpbkluZm8sIHByZXZpb3VzRmxvYXRMb2dpY2FsQm90dG9tLCBt
YXhGbG9hdExvZ2ljYWxCb3R0b20pOwotICAgIH0KLSAgICAKLSAgICAvLyBOb3cgZG8gdGhlIGhh
bmRsaW5nIG9mIHRoZSBib3R0b20gb2YgdGhlIGJsb2NrLCBhZGRpbmcgaW4gb3VyIGJvdHRvbSBi
b3JkZXIvcGFkZGluZyBhbmQKLSAgICAvLyBkZXRlcm1pbmluZyB0aGUgY29ycmVjdCBjb2xsYXBz
ZWQgYm90dG9tIG1hcmdpbiBpbmZvcm1hdGlvbi4KLSAgICBoYW5kbGVBZnRlclNpZGVPZkJsb2Nr
KGJlZm9yZUVkZ2UsIGFmdGVyRWRnZSwgbWFyZ2luSW5mbyk7Ci19Ci0KIHZvaWQgUmVuZGVyQmxv
Y2s6OmxheW91dEJsb2NrQ2hpbGQoUmVuZGVyQm94KiBjaGlsZCwgTWFyZ2luSW5mbyYgbWFyZ2lu
SW5mbywgTGF5b3V0VW5pdCYgcHJldmlvdXNGbG9hdExvZ2ljYWxCb3R0b20sIExheW91dFVuaXQm
IG1heEZsb2F0TG9naWNhbEJvdHRvbSkKIHsKICAgICBMYXlvdXRVbml0IG9sZFBvc01hcmdpbkJl
Zm9yZSA9IG1heFBvc2l0aXZlTWFyZ2luQmVmb3JlKCk7CkBAIC00NzQzLDE1MyArNDUyNSw2IEBA
IHZvaWQgUmVuZGVyQmxvY2s6Om1hcmtMaW5lc0RpcnR5SW5CbG9ja1IKICAgICB9CiB9CiAKLXZv
aWQgUmVuZGVyQmxvY2s6OmNsZWFyRmxvYXRzKCkKLXsKLSAgICBpZiAobV9mbG9hdGluZ09iamVj
dHMpCi0gICAgICAgIG1fZmxvYXRpbmdPYmplY3RzLT5zZXRIb3Jpem9udGFsV3JpdGluZ01vZGUo
aXNIb3Jpem9udGFsV3JpdGluZ01vZGUoKSk7Ci0KLSAgICBIYXNoU2V0PFJlbmRlckJveCo+IG9s
ZEludHJ1ZGluZ0Zsb2F0U2V0OwotICAgIGlmICghY2hpbGRyZW5JbmxpbmUoKSAmJiBtX2Zsb2F0
aW5nT2JqZWN0cykgewotICAgICAgICBjb25zdCBGbG9hdGluZ09iamVjdFNldCYgZmxvYXRpbmdP
YmplY3RTZXQgPSBtX2Zsb2F0aW5nT2JqZWN0cy0+c2V0KCk7Ci0gICAgICAgIEZsb2F0aW5nT2Jq
ZWN0U2V0SXRlcmF0b3IgZW5kID0gZmxvYXRpbmdPYmplY3RTZXQuZW5kKCk7Ci0gICAgICAgIGZv
ciAoRmxvYXRpbmdPYmplY3RTZXRJdGVyYXRvciBpdCA9IGZsb2F0aW5nT2JqZWN0U2V0LmJlZ2lu
KCk7IGl0ICE9IGVuZDsgKytpdCkgewotICAgICAgICAgICAgRmxvYXRpbmdPYmplY3QqIGZsb2F0
aW5nT2JqZWN0ID0gKml0OwotICAgICAgICAgICAgaWYgKCFmbG9hdGluZ09iamVjdC0+aXNEZXNj
ZW5kYW50KCkpCi0gICAgICAgICAgICAgICAgb2xkSW50cnVkaW5nRmxvYXRTZXQuYWRkKGZsb2F0
aW5nT2JqZWN0LT5yZW5kZXJlcigpKTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIC8vIElubGlu
ZSBibG9ja3MgYXJlIGNvdmVyZWQgYnkgdGhlIGlzUmVwbGFjZWQoKSBjaGVjayBpbiB0aGUgYXZv
aWRGbG9hdHMgbWV0aG9kLgotICAgIGlmIChhdm9pZHNGbG9hdHMoKSB8fCBpc1Jvb3QoKSB8fCBp
c1JlbmRlclZpZXcoKSB8fCBpc0Zsb2F0aW5nT3JPdXRPZkZsb3dQb3NpdGlvbmVkKCkgfHwgaXNU
YWJsZUNlbGwoKSkgewotICAgICAgICBpZiAobV9mbG9hdGluZ09iamVjdHMpIHsKLSAgICAgICAg
ICAgIGRlbGV0ZUFsbFZhbHVlcyhtX2Zsb2F0aW5nT2JqZWN0cy0+c2V0KCkpOwotICAgICAgICAg
ICAgbV9mbG9hdGluZ09iamVjdHMtPmNsZWFyKCk7Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKCFv
bGRJbnRydWRpbmdGbG9hdFNldC5pc0VtcHR5KCkpCi0gICAgICAgICAgICBtYXJrQWxsRGVzY2Vu
ZGFudHNXaXRoRmxvYXRzRm9yTGF5b3V0KCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAg
ICB0eXBlZGVmIEhhc2hNYXA8UmVuZGVyT2JqZWN0KiwgRmxvYXRpbmdPYmplY3QqPiBSZW5kZXJl
clRvRmxvYXRJbmZvTWFwOwotICAgIFJlbmRlcmVyVG9GbG9hdEluZm9NYXAgZmxvYXRNYXA7Ci0K
LSAgICBpZiAobV9mbG9hdGluZ09iamVjdHMpIHsKLSAgICAgICAgY29uc3QgRmxvYXRpbmdPYmpl
Y3RTZXQmIGZsb2F0aW5nT2JqZWN0U2V0ID0gbV9mbG9hdGluZ09iamVjdHMtPnNldCgpOwotICAg
ICAgICBpZiAoY2hpbGRyZW5JbmxpbmUoKSkgewotICAgICAgICAgICAgRmxvYXRpbmdPYmplY3RT
ZXRJdGVyYXRvciBlbmQgPSBmbG9hdGluZ09iamVjdFNldC5lbmQoKTsKLSAgICAgICAgICAgIGZv
ciAoRmxvYXRpbmdPYmplY3RTZXRJdGVyYXRvciBpdCA9IGZsb2F0aW5nT2JqZWN0U2V0LmJlZ2lu
KCk7IGl0ICE9IGVuZDsgKytpdCkgewotICAgICAgICAgICAgICAgIEZsb2F0aW5nT2JqZWN0KiBm
ID0gKml0OwotICAgICAgICAgICAgICAgIGZsb2F0TWFwLmFkZChmLT5yZW5kZXJlcigpLCBmKTsK
LSAgICAgICAgICAgIH0KLSAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICBkZWxldGVBbGxWYWx1
ZXMoZmxvYXRpbmdPYmplY3RTZXQpOwotICAgICAgICBtX2Zsb2F0aW5nT2JqZWN0cy0+Y2xlYXIo
KTsKLSAgICB9Ci0KLSAgICAvLyBXZSBzaG91bGQgbm90IHByb2Nlc3MgZmxvYXRzIGlmIHRoZSBw
YXJlbnQgbm9kZSBpcyBub3QgYSBSZW5kZXJCbG9jay4gT3RoZXJ3aXNlLCB3ZSB3aWxsIGFkZCAK
LSAgICAvLyBmbG9hdHMgaW4gYW4gaW52YWxpZCBjb250ZXh0LiBUaGlzIHdpbGwgY2F1c2UgYSBj
cmFzaCBhcmlzaW5nIGZyb20gYSBiYWQgY2FzdCBvbiB0aGUgcGFyZW50LgotICAgIC8vIFNlZSA8
cmRhcjovL3Byb2JsZW0vODA0OTc1Mz4sIHdoZXJlIGZsb2F0IHByb3BlcnR5IGlzIGFwcGxpZWQg
b24gYSB0ZXh0IG5vZGUgaW4gYSBTVkcuCi0gICAgaWYgKCFwYXJlbnQoKSB8fCAhcGFyZW50KCkt
PmlzUmVuZGVyQmxvY2soKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgLy8gQXR0ZW1wdCB0byBs
b2NhdGUgYSBwcmV2aW91cyBzaWJsaW5nIHdpdGggb3ZlcmhhbmdpbmcgZmxvYXRzLiAgV2Ugc2tp
cCBhbnkgZWxlbWVudHMgdGhhdCBhcmUKLSAgICAvLyBvdXQgb2YgZmxvdyAobGlrZSBmbG9hdGlu
Zy9wb3NpdGlvbmVkIGVsZW1lbnRzKSwgYW5kIHdlIGFsc28gc2tpcCBvdmVyIGFueSBvYmplY3Rz
IHRoYXQgbWF5IGhhdmUgc2hpZnRlZAotICAgIC8vIHRvIGF2b2lkIGZsb2F0cy4KLSAgICBSZW5k
ZXJCbG9jayogcGFyZW50QmxvY2sgPSB0b1JlbmRlckJsb2NrKHBhcmVudCgpKTsKLSAgICBib29s
IHBhcmVudEhhc0Zsb2F0cyA9IGZhbHNlOwotICAgIFJlbmRlck9iamVjdCogcHJldiA9IHByZXZp
b3VzU2libGluZygpOwotICAgIHdoaWxlIChwcmV2ICYmIChwcmV2LT5pc0Zsb2F0aW5nT3JPdXRP
ZkZsb3dQb3NpdGlvbmVkKCkgfHwgIXByZXYtPmlzQm94KCkgfHwgIXByZXYtPmlzUmVuZGVyQmxv
Y2soKSB8fCB0b1JlbmRlckJsb2NrKHByZXYpLT5hdm9pZHNGbG9hdHMoKSkpIHsKLSAgICAgICAg
aWYgKHByZXYtPmlzRmxvYXRpbmcoKSkKLSAgICAgICAgICAgIHBhcmVudEhhc0Zsb2F0cyA9IHRy
dWU7Ci0gICAgICAgIHByZXYgPSBwcmV2LT5wcmV2aW91c1NpYmxpbmcoKTsKLSAgICB9Ci0KLSAg
ICAvLyBGaXJzdCBhZGQgaW4gZmxvYXRzIGZyb20gdGhlIHBhcmVudC4KLSAgICBMYXlvdXRVbml0
IGxvZ2ljYWxUb3BPZmZzZXQgPSBsb2dpY2FsVG9wKCk7Ci0gICAgaWYgKHBhcmVudEhhc0Zsb2F0
cykKLSAgICAgICAgYWRkSW50cnVkaW5nRmxvYXRzKHBhcmVudEJsb2NrLCBwYXJlbnRCbG9jay0+
bG9naWNhbExlZnRPZmZzZXRGb3JDb250ZW50KCksIGxvZ2ljYWxUb3BPZmZzZXQpOwotICAgIAot
ICAgIExheW91dFVuaXQgbG9naWNhbExlZnRPZmZzZXQgPSAwOwotICAgIGlmIChwcmV2KQotICAg
ICAgICBsb2dpY2FsVG9wT2Zmc2V0IC09IHRvUmVuZGVyQm94KHByZXYpLT5sb2dpY2FsVG9wKCk7
Ci0gICAgZWxzZSB7Ci0gICAgICAgIHByZXYgPSBwYXJlbnRCbG9jazsKLSAgICAgICAgbG9naWNh
bExlZnRPZmZzZXQgKz0gcGFyZW50QmxvY2stPmxvZ2ljYWxMZWZ0T2Zmc2V0Rm9yQ29udGVudCgp
OwotICAgIH0KLQotICAgIC8vIEFkZCBvdmVyaGFuZ2luZyBmbG9hdHMgZnJvbSB0aGUgcHJldmlv
dXMgUmVuZGVyQmxvY2ssIGJ1dCBvbmx5IGlmIGl0IGhhcyBhIGZsb2F0IHRoYXQgaW50cnVkZXMg
aW50byBvdXIgc3BhY2UuICAgIAotICAgIFJlbmRlckJsb2NrKiBibG9jayA9IHRvUmVuZGVyQmxv
Y2socHJldik7Ci0gICAgaWYgKGJsb2NrLT5tX2Zsb2F0aW5nT2JqZWN0cyAmJiBibG9jay0+bG93
ZXN0RmxvYXRMb2dpY2FsQm90dG9tKCkgPiBsb2dpY2FsVG9wT2Zmc2V0KQotICAgICAgICBhZGRJ
bnRydWRpbmdGbG9hdHMoYmxvY2ssIGxvZ2ljYWxMZWZ0T2Zmc2V0LCBsb2dpY2FsVG9wT2Zmc2V0
KTsKLQotICAgIGlmIChjaGlsZHJlbklubGluZSgpKSB7Ci0gICAgICAgIExheW91dFVuaXQgY2hh
bmdlTG9naWNhbFRvcCA9IExheW91dFVuaXQ6Om1heCgpOwotICAgICAgICBMYXlvdXRVbml0IGNo
YW5nZUxvZ2ljYWxCb3R0b20gPSBMYXlvdXRVbml0OjptaW4oKTsKLSAgICAgICAgaWYgKG1fZmxv
YXRpbmdPYmplY3RzKSB7Ci0gICAgICAgICAgICBjb25zdCBGbG9hdGluZ09iamVjdFNldCYgZmxv
YXRpbmdPYmplY3RTZXQgPSBtX2Zsb2F0aW5nT2JqZWN0cy0+c2V0KCk7Ci0gICAgICAgICAgICBG
bG9hdGluZ09iamVjdFNldEl0ZXJhdG9yIGVuZCA9IGZsb2F0aW5nT2JqZWN0U2V0LmVuZCgpOwot
ICAgICAgICAgICAgZm9yIChGbG9hdGluZ09iamVjdFNldEl0ZXJhdG9yIGl0ID0gZmxvYXRpbmdP
YmplY3RTZXQuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7Ci0gICAgICAgICAgICAgICAgRmxv
YXRpbmdPYmplY3QqIGYgPSAqaXQ7Ci0gICAgICAgICAgICAgICAgRmxvYXRpbmdPYmplY3QqIG9s
ZEZsb2F0aW5nT2JqZWN0ID0gZmxvYXRNYXAuZ2V0KGYtPnJlbmRlcmVyKCkpOwotICAgICAgICAg
ICAgICAgIExheW91dFVuaXQgbG9naWNhbEJvdHRvbSA9IGYtPmxvZ2ljYWxCb3R0b20oaXNIb3Jp
em9udGFsV3JpdGluZ01vZGUoKSk7Ci0gICAgICAgICAgICAgICAgaWYgKG9sZEZsb2F0aW5nT2Jq
ZWN0KSB7Ci0gICAgICAgICAgICAgICAgICAgIExheW91dFVuaXQgb2xkTG9naWNhbEJvdHRvbSA9
IG9sZEZsb2F0aW5nT2JqZWN0LT5sb2dpY2FsQm90dG9tKGlzSG9yaXpvbnRhbFdyaXRpbmdNb2Rl
KCkpOwotICAgICAgICAgICAgICAgICAgICBpZiAoZi0+bG9naWNhbFdpZHRoKGlzSG9yaXpvbnRh
bFdyaXRpbmdNb2RlKCkpICE9IG9sZEZsb2F0aW5nT2JqZWN0LT5sb2dpY2FsV2lkdGgoaXNIb3Jp
em9udGFsV3JpdGluZ01vZGUoKSkgfHwgZi0+bG9naWNhbExlZnQoaXNIb3Jpem9udGFsV3JpdGlu
Z01vZGUoKSkgIT0gb2xkRmxvYXRpbmdPYmplY3QtPmxvZ2ljYWxMZWZ0KGlzSG9yaXpvbnRhbFdy
aXRpbmdNb2RlKCkpKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBjaGFuZ2VMb2dpY2FsVG9w
ID0gMDsKLSAgICAgICAgICAgICAgICAgICAgICAgIGNoYW5nZUxvZ2ljYWxCb3R0b20gPSBtYXgo
Y2hhbmdlTG9naWNhbEJvdHRvbSwgbWF4KGxvZ2ljYWxCb3R0b20sIG9sZExvZ2ljYWxCb3R0b20p
KTsKLSAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgICAg
IGlmIChsb2dpY2FsQm90dG9tICE9IG9sZExvZ2ljYWxCb3R0b20pIHsKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBjaGFuZ2VMb2dpY2FsVG9wID0gbWluKGNoYW5nZUxvZ2ljYWxUb3AsIG1p
bihsb2dpY2FsQm90dG9tLCBvbGRMb2dpY2FsQm90dG9tKSk7Ci0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgY2hhbmdlTG9naWNhbEJvdHRvbSA9IG1heChjaGFuZ2VMb2dpY2FsQm90dG9tLCBt
YXgobG9naWNhbEJvdHRvbSwgb2xkTG9naWNhbEJvdHRvbSkpOwotICAgICAgICAgICAgICAgICAg
ICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgTGF5b3V0VW5pdCBsb2dpY2FsVG9wID0g
Zi0+bG9naWNhbFRvcChpc0hvcml6b250YWxXcml0aW5nTW9kZSgpKTsKLSAgICAgICAgICAgICAg
ICAgICAgICAgIExheW91dFVuaXQgb2xkTG9naWNhbFRvcCA9IG9sZEZsb2F0aW5nT2JqZWN0LT5s
b2dpY2FsVG9wKGlzSG9yaXpvbnRhbFdyaXRpbmdNb2RlKCkpOwotICAgICAgICAgICAgICAgICAg
ICAgICAgaWYgKGxvZ2ljYWxUb3AgIT0gb2xkTG9naWNhbFRvcCkgewotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGNoYW5nZUxvZ2ljYWxUb3AgPSBtaW4oY2hhbmdlTG9naWNhbFRvcCwgbWlu
KGxvZ2ljYWxUb3AsIG9sZExvZ2ljYWxUb3ApKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBjaGFuZ2VMb2dpY2FsQm90dG9tID0gbWF4KGNoYW5nZUxvZ2ljYWxCb3R0b20sIG1heChsb2dp
Y2FsVG9wLCBvbGRMb2dpY2FsVG9wKSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAg
ICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgICAgICBmbG9hdE1hcC5yZW1vdmUo
Zi0+cmVuZGVyZXIoKSk7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChvbGRGbG9hdGluZ09iamVj
dC0+b3JpZ2luYXRpbmdMaW5lKCkgJiYgIXNlbGZOZWVkc0xheW91dCgpKSB7Ci0gICAgICAgICAg
ICAgICAgICAgICAgICBBU1NFUlQoJm9sZEZsb2F0aW5nT2JqZWN0LT5vcmlnaW5hdGluZ0xpbmUo
KS0+cmVuZGVyZXIoKSA9PSB0aGlzKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIG9sZEZsb2F0
aW5nT2JqZWN0LT5vcmlnaW5hdGluZ0xpbmUoKS0+bWFya0RpcnR5KCk7Ci0gICAgICAgICAgICAg
ICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgZGVsZXRlIG9sZEZsb2F0aW5nT2JqZWN0Owot
ICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgIGNoYW5nZUxvZ2lj
YWxUb3AgPSAwOwotICAgICAgICAgICAgICAgICAgICBjaGFuZ2VMb2dpY2FsQm90dG9tID0gbWF4
KGNoYW5nZUxvZ2ljYWxCb3R0b20sIGxvZ2ljYWxCb3R0b20pOwotICAgICAgICAgICAgICAgIH0K
LSAgICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIFJlbmRlcmVyVG9GbG9hdEluZm9N
YXA6Oml0ZXJhdG9yIGVuZCA9IGZsb2F0TWFwLmVuZCgpOwotICAgICAgICBmb3IgKFJlbmRlcmVy
VG9GbG9hdEluZm9NYXA6Oml0ZXJhdG9yIGl0ID0gZmxvYXRNYXAuYmVnaW4oKTsgaXQgIT0gZW5k
OyArK2l0KSB7Ci0gICAgICAgICAgICBGbG9hdGluZ09iamVjdCogZmxvYXRpbmdPYmplY3QgPSAo
Kml0KS52YWx1ZTsKLSAgICAgICAgICAgIGlmICghZmxvYXRpbmdPYmplY3QtPmlzRGVzY2VuZGFu
dCgpKSB7Ci0gICAgICAgICAgICAgICAgY2hhbmdlTG9naWNhbFRvcCA9IDA7Ci0gICAgICAgICAg
ICAgICAgY2hhbmdlTG9naWNhbEJvdHRvbSA9IG1heChjaGFuZ2VMb2dpY2FsQm90dG9tLCBmbG9h
dGluZ09iamVjdC0+bG9naWNhbEJvdHRvbShpc0hvcml6b250YWxXcml0aW5nTW9kZSgpKSk7Ci0g
ICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgZGVsZXRlQWxsVmFsdWVzKGZsb2F0TWFw
KTsKLQotICAgICAgICBtYXJrTGluZXNEaXJ0eUluQmxvY2tSYW5nZShjaGFuZ2VMb2dpY2FsVG9w
LCBjaGFuZ2VMb2dpY2FsQm90dG9tKTsKLSAgICB9IGVsc2UgaWYgKCFvbGRJbnRydWRpbmdGbG9h
dFNldC5pc0VtcHR5KCkpIHsKLSAgICAgICAgLy8gSWYgdGhlcmUgYXJlIHByZXZpb3VzbHkgaW50
cnVkaW5nIGZsb2F0cyB0aGF0IG5vIGxvbmdlciBpbnRydWRlLCB0aGVuIGNoaWxkcmVuIHdpdGgg
ZmxvYXRzCi0gICAgICAgIC8vIHNob3VsZCBhbHNvIGdldCBsYXlvdXQgYmVjYXVzZSB0aGV5IG1p
Z2h0IG5lZWQgdGhlaXIgZmxvYXRpbmcgb2JqZWN0IGxpc3RzIGNsZWFyZWQuCi0gICAgICAgIGlm
IChtX2Zsb2F0aW5nT2JqZWN0cy0+c2V0KCkuc2l6ZSgpIDwgb2xkSW50cnVkaW5nRmxvYXRTZXQu
c2l6ZSgpKQotICAgICAgICAgICAgbWFya0FsbERlc2NlbmRhbnRzV2l0aEZsb2F0c0ZvckxheW91
dCgpOwotICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgIGNvbnN0IEZsb2F0aW5nT2JqZWN0U2V0
JiBmbG9hdGluZ09iamVjdFNldCA9IG1fZmxvYXRpbmdPYmplY3RzLT5zZXQoKTsKLSAgICAgICAg
ICAgIEZsb2F0aW5nT2JqZWN0U2V0SXRlcmF0b3IgZW5kID0gZmxvYXRpbmdPYmplY3RTZXQuZW5k
KCk7Ci0gICAgICAgICAgICBmb3IgKEZsb2F0aW5nT2JqZWN0U2V0SXRlcmF0b3IgaXQgPSBmbG9h
dGluZ09iamVjdFNldC5iZWdpbigpOyBpdCAhPSBlbmQgJiYgIW9sZEludHJ1ZGluZ0Zsb2F0U2V0
LmlzRW1wdHkoKTsgKytpdCkKLSAgICAgICAgICAgICAgICBvbGRJbnRydWRpbmdGbG9hdFNldC5y
ZW1vdmUoKCppdCktPnJlbmRlcmVyKCkpOwotICAgICAgICAgICAgaWYgKCFvbGRJbnRydWRpbmdG
bG9hdFNldC5pc0VtcHR5KCkpCi0gICAgICAgICAgICAgICAgbWFya0FsbERlc2NlbmRhbnRzV2l0
aEZsb2F0c0ZvckxheW91dCgpOwotICAgICAgICB9Ci0gICAgfQotfQotCiBMYXlvdXRVbml0IFJl
bmRlckJsb2NrOjphZGRPdmVyaGFuZ2luZ0Zsb2F0cyhSZW5kZXJCbG9jayogY2hpbGQsIGJvb2wg
bWFrZUNoaWxkUGFpbnRPdGhlckZsb2F0cykKIHsKICAgICAvLyBQcmV2ZW50IGZsb2F0cyBmcm9t
IGJlaW5nIGFkZGVkIHRvIHRoZSBjYW52YXMgYnkgdGhlIHJvb3QgZWxlbWVudCwgZS5nLiwgPGh0
bWw+LgpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJsb2NrLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJsb2NrLmgJKHJldmlzaW9u
IDE1NTM2NSkKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCbG9jay5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC01ODcsMTcgKzU4Nyw2IEBAIHByb3RlY3RlZDoKIAogICAgIHZpcnR1YWwg
dm9pZCBhZGRGb2N1c1JpbmdSZWN0cyhWZWN0b3I8SW50UmVjdD4mLCBjb25zdCBMYXlvdXRQb2lu
dCYgYWRkaXRpb25hbE9mZnNldCwgY29uc3QgUmVuZGVyTGF5ZXJNb2RlbE9iamVjdCogcGFpbnRD
b250YWluZXIgPSAwKSBPVkVSUklERTsKIAotI2lmIEVOQUJMRShTVkcpCi0gICAgLy8gT25seSB1
c2VkIGJ5IFJlbmRlclNWR1RleHQsIHdoaWNoIGV4cGxpY2l0ZWx5IG92ZXJyaWRlcyBSZW5kZXJC
bG9jazo6bGF5b3V0QmxvY2soKSwgZG8gTk9UIHVzZSBmb3IgYW55dGhpbmcgZWxzZS4KLSAgICB2
b2lkIGZvcmNlTGF5b3V0SW5saW5lQ2hpbGRyZW4oKQotICAgIHsKLSAgICAgICAgTGF5b3V0VW5p
dCByZXBhaW50TG9naWNhbFRvcCA9IDA7Ci0gICAgICAgIExheW91dFVuaXQgcmVwYWludExvZ2lj
YWxCb3R0b20gPSAwOwotICAgICAgICBjbGVhckZsb2F0cygpOwotICAgICAgICBsYXlvdXRJbmxp
bmVDaGlsZHJlbih0cnVlLCByZXBhaW50TG9naWNhbFRvcCwgcmVwYWludExvZ2ljYWxCb3R0b20p
OwotICAgIH0KLSNlbmRpZgotCiAgICAgYm9vbCB1cGRhdGVTaGFwZXNCZWZvcmVCbG9ja0xheW91
dCgpOwogICAgIHZvaWQgdXBkYXRlU2hhcGVzQWZ0ZXJCbG9ja0xheW91dChib29sIGhlaWdodENo
YW5nZWQgPSBmYWxzZSk7CiAgICAgdm9pZCBjb21wdXRlUmVnaW9uUmFuZ2VGb3JCb3hDaGlsZChj
b25zdCBSZW5kZXJCb3gqKSBjb25zdDsKQEAgLTY1MSw4ICs2NDAsNiBAQCBwcml2YXRlOgogCiAg
ICAgdmlydHVhbCB2b2lkIHJlcGFpbnRPdmVyaGFuZ2luZ0Zsb2F0cyhib29sIHBhaW50QWxsRGVz
Y2VuZGFudHMpIE9WRVJSSURFIEZJTkFMOwogCi0gICAgdm9pZCBsYXlvdXRCbG9ja0NoaWxkcmVu
KGJvb2wgcmVsYXlvdXRDaGlsZHJlbiwgTGF5b3V0VW5pdCYgbWF4RmxvYXRMb2dpY2FsQm90dG9t
KTsKLSAgICB2b2lkIGxheW91dElubGluZUNoaWxkcmVuKGJvb2wgcmVsYXlvdXRDaGlsZHJlbiwg
TGF5b3V0VW5pdCYgcmVwYWludExvZ2ljYWxUb3AsIExheW91dFVuaXQmIHJlcGFpbnRMb2dpY2Fs
Qm90dG9tKTsKICAgICBCaWRpUnVuKiBoYW5kbGVUcmFpbGluZ1NwYWNlcyhCaWRpUnVuTGlzdDxC
aWRpUnVuPiYsIEJpZGlDb250ZXh0Kik7CiAKICAgICB2b2lkIGluc2VydEludG9UcmFja2VkUmVu
ZGVyZXJNYXBzKFJlbmRlckJveCogZGVzY2VuZGFudCwgVHJhY2tlZERlc2NlbmRhbnRzTWFwKiYs
IFRyYWNrZWRDb250YWluZXJNYXAqJik7CkBAIC05MjYsOCArOTEzLDYgQEAgcHJpdmF0ZToKICAg
ICAvLyBSZXR1cm5zIHRydWUgaWYgYW5kIG9ubHkgaWYgaXQgaGFzIHBvc2l0aW9uZWQgYW55IGZs
b2F0cy4KICAgICBib29sIHBvc2l0aW9uTmV3RmxvYXRzKCk7CiAKLSAgICB2b2lkIGNsZWFyRmxv
YXRzKCk7Ci0KICAgICBMYXlvdXRVbml0IGdldENsZWFyRGVsdGEoUmVuZGVyQm94KiBjaGlsZCwg
TGF5b3V0VW5pdCB5UG9zKTsKIAogICAgIHZpcnR1YWwgYm9vbCBhdm9pZHNGbG9hdHMoKSBjb25z
dDsKQEAgLTExOTEsNiArMTE3NiwxMCBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCBMYXlvdXRVbml0
IG9mZnNldEZyb21Mb2dpY2FsVG9wT2ZGaXJzdFBhZ2UoKSBjb25zdDsKICAgICBSZW5kZXJSZWdp
b24qIHJlZ2lvbkF0QmxvY2tPZmZzZXQoTGF5b3V0VW5pdCkgY29uc3Q7CiAKKyAgICAvLyBGSVhN
RTogVGhpcyBpcyB0ZW1wb3JhcnkgdG8gYWxsb3cgdXMgdG8gbW92ZSBjb2RlIGZyb20gUmVuZGVy
QmxvY2sgaW50byBSZW5kZXJCbG9ja0Zsb3cgdGhhdCBhY2Nlc3NlcyBtZW1iZXIgdmFyaWFibGVz
IHRoYXQgd2UgaGF2ZW4ndCBtb3ZlZCBvdXQgb2YKKyAgICAvLyBSZW5kZXJCbG9jayB5ZXQuCisg
ICAgZnJpZW5kIGNsYXNzIFJlbmRlckJsb2NrRmxvdzsKKwogcHJvdGVjdGVkOgogICAgIHN0cnVj
dCBGbG9hdGluZ09iamVjdEhhc2hGdW5jdGlvbnMgewogICAgICAgICBzdGF0aWMgdW5zaWduZWQg
aGFzaChGbG9hdGluZ09iamVjdCoga2V5KSB7IHJldHVybiBEZWZhdWx0SGFzaDxSZW5kZXJCb3gq
Pjo6SGFzaDo6aGFzaChrZXktPnJlbmRlcmVyKCkpOyB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvUmVuZGVyQmxvY2tGbG93LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2tGbG93LmNwcAkocmV2aXNpb24gMTU1MzY1KQorKysgU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJsb2NrRmxvdy5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTI0LDYgKzI0LDEzIEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiUmVuZGVy
QmxvY2tGbG93LmgiCiAKKyNpbmNsdWRlICJMYXlvdXRSZXBhaW50ZXIuaCIKKyNpbmNsdWRlICJS
ZW5kZXJGbG93VGhyZWFkLmgiCisjaW5jbHVkZSAiUmVuZGVyTGF5ZXIuaCIKKyNpbmNsdWRlICJS
ZW5kZXJWaWV3LmgiCisKK3VzaW5nIG5hbWVzcGFjZSBzdGQ7CisKIG5hbWVzcGFjZSBXZWJDb3Jl
IHsKIAogUmVuZGVyQmxvY2tGbG93OjpSZW5kZXJCbG9ja0Zsb3coQ29udGFpbmVyTm9kZSogbm9k
ZSkKQEAgLTM1LDQgKzQyLDM3MiBAQCBSZW5kZXJCbG9ja0Zsb3c6On5SZW5kZXJCbG9ja0Zsb3co
KQogewogfQogCit2b2lkIFJlbmRlckJsb2NrRmxvdzo6Y2xlYXJGbG9hdHMoKQoreworICAgIGlm
IChtX2Zsb2F0aW5nT2JqZWN0cykKKyAgICAgICAgbV9mbG9hdGluZ09iamVjdHMtPnNldEhvcml6
b250YWxXcml0aW5nTW9kZShpc0hvcml6b250YWxXcml0aW5nTW9kZSgpKTsKKworICAgIEhhc2hT
ZXQ8UmVuZGVyQm94Kj4gb2xkSW50cnVkaW5nRmxvYXRTZXQ7CisgICAgaWYgKCFjaGlsZHJlbklu
bGluZSgpICYmIG1fZmxvYXRpbmdPYmplY3RzKSB7CisgICAgICAgIGNvbnN0IEZsb2F0aW5nT2Jq
ZWN0U2V0JiBmbG9hdGluZ09iamVjdFNldCA9IG1fZmxvYXRpbmdPYmplY3RzLT5zZXQoKTsKKyAg
ICAgICAgRmxvYXRpbmdPYmplY3RTZXRJdGVyYXRvciBlbmQgPSBmbG9hdGluZ09iamVjdFNldC5l
bmQoKTsKKyAgICAgICAgZm9yIChGbG9hdGluZ09iamVjdFNldEl0ZXJhdG9yIGl0ID0gZmxvYXRp
bmdPYmplY3RTZXQuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7CisgICAgICAgICAgICBGbG9h
dGluZ09iamVjdCogZmxvYXRpbmdPYmplY3QgPSAqaXQ7CisgICAgICAgICAgICBpZiAoIWZsb2F0
aW5nT2JqZWN0LT5pc0Rlc2NlbmRhbnQoKSkKKyAgICAgICAgICAgICAgICBvbGRJbnRydWRpbmdG
bG9hdFNldC5hZGQoZmxvYXRpbmdPYmplY3QtPnJlbmRlcmVyKCkpOworICAgICAgICB9CisgICAg
fQorCisgICAgLy8gSW5saW5lIGJsb2NrcyBhcmUgY292ZXJlZCBieSB0aGUgaXNSZXBsYWNlZCgp
IGNoZWNrIGluIHRoZSBhdm9pZEZsb2F0cyBtZXRob2QuCisgICAgaWYgKGF2b2lkc0Zsb2F0cygp
IHx8IGlzUm9vdCgpIHx8IGlzUmVuZGVyVmlldygpIHx8IGlzRmxvYXRpbmdPck91dE9mRmxvd1Bv
c2l0aW9uZWQoKSB8fCBpc1RhYmxlQ2VsbCgpKSB7CisgICAgICAgIGlmIChtX2Zsb2F0aW5nT2Jq
ZWN0cykgeworICAgICAgICAgICAgZGVsZXRlQWxsVmFsdWVzKG1fZmxvYXRpbmdPYmplY3RzLT5z
ZXQoKSk7CisgICAgICAgICAgICBtX2Zsb2F0aW5nT2JqZWN0cy0+Y2xlYXIoKTsKKyAgICAgICAg
fQorICAgICAgICBpZiAoIW9sZEludHJ1ZGluZ0Zsb2F0U2V0LmlzRW1wdHkoKSkKKyAgICAgICAg
ICAgIG1hcmtBbGxEZXNjZW5kYW50c1dpdGhGbG9hdHNGb3JMYXlvdXQoKTsKKyAgICAgICAgcmV0
dXJuOworICAgIH0KKworICAgIHR5cGVkZWYgSGFzaE1hcDxSZW5kZXJPYmplY3QqLCBGbG9hdGlu
Z09iamVjdCo+IFJlbmRlcmVyVG9GbG9hdEluZm9NYXA7CisgICAgUmVuZGVyZXJUb0Zsb2F0SW5m
b01hcCBmbG9hdE1hcDsKKworICAgIGlmIChtX2Zsb2F0aW5nT2JqZWN0cykgeworICAgICAgICBj
b25zdCBGbG9hdGluZ09iamVjdFNldCYgZmxvYXRpbmdPYmplY3RTZXQgPSBtX2Zsb2F0aW5nT2Jq
ZWN0cy0+c2V0KCk7CisgICAgICAgIGlmIChjaGlsZHJlbklubGluZSgpKSB7CisgICAgICAgICAg
ICBGbG9hdGluZ09iamVjdFNldEl0ZXJhdG9yIGVuZCA9IGZsb2F0aW5nT2JqZWN0U2V0LmVuZCgp
OworICAgICAgICAgICAgZm9yIChGbG9hdGluZ09iamVjdFNldEl0ZXJhdG9yIGl0ID0gZmxvYXRp
bmdPYmplY3RTZXQuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7CisgICAgICAgICAgICAgICAg
RmxvYXRpbmdPYmplY3QqIGYgPSAqaXQ7CisgICAgICAgICAgICAgICAgZmxvYXRNYXAuYWRkKGYt
PnJlbmRlcmVyKCksIGYpOworICAgICAgICAgICAgfQorICAgICAgICB9IGVsc2UKKyAgICAgICAg
ICAgIGRlbGV0ZUFsbFZhbHVlcyhmbG9hdGluZ09iamVjdFNldCk7CisgICAgICAgIG1fZmxvYXRp
bmdPYmplY3RzLT5jbGVhcigpOworICAgIH0KKworICAgIC8vIFdlIHNob3VsZCBub3QgcHJvY2Vz
cyBmbG9hdHMgaWYgdGhlIHBhcmVudCBub2RlIGlzIG5vdCBhIFJlbmRlckJsb2NrLiBPdGhlcndp
c2UsIHdlIHdpbGwgYWRkIAorICAgIC8vIGZsb2F0cyBpbiBhbiBpbnZhbGlkIGNvbnRleHQuIFRo
aXMgd2lsbCBjYXVzZSBhIGNyYXNoIGFyaXNpbmcgZnJvbSBhIGJhZCBjYXN0IG9uIHRoZSBwYXJl
bnQuCisgICAgLy8gU2VlIDxyZGFyOi8vcHJvYmxlbS84MDQ5NzUzPiwgd2hlcmUgZmxvYXQgcHJv
cGVydHkgaXMgYXBwbGllZCBvbiBhIHRleHQgbm9kZSBpbiBhIFNWRy4KKyAgICBpZiAoIXBhcmVu
dCgpIHx8ICFwYXJlbnQoKS0+aXNSZW5kZXJCbG9jaygpKQorICAgICAgICByZXR1cm47CisKKyAg
ICAvLyBBdHRlbXB0IHRvIGxvY2F0ZSBhIHByZXZpb3VzIHNpYmxpbmcgd2l0aCBvdmVyaGFuZ2lu
ZyBmbG9hdHMuIFdlIHNraXAgYW55IGVsZW1lbnRzIHRoYXQgYXJlCisgICAgLy8gb3V0IG9mIGZs
b3cgKGxpa2UgZmxvYXRpbmcvcG9zaXRpb25lZCBlbGVtZW50cyksIGFuZCB3ZSBhbHNvIHNraXAg
b3ZlciBhbnkgb2JqZWN0cyB0aGF0IG1heSBoYXZlIHNoaWZ0ZWQKKyAgICAvLyB0byBhdm9pZCBm
bG9hdHMuCisgICAgUmVuZGVyQmxvY2sqIHBhcmVudEJsb2NrID0gdG9SZW5kZXJCbG9jayhwYXJl
bnQoKSk7CisgICAgYm9vbCBwYXJlbnRIYXNGbG9hdHMgPSBmYWxzZTsKKyAgICBSZW5kZXJPYmpl
Y3QqIHByZXYgPSBwcmV2aW91c1NpYmxpbmcoKTsKKyAgICB3aGlsZSAocHJldiAmJiAocHJldi0+
aXNGbG9hdGluZ09yT3V0T2ZGbG93UG9zaXRpb25lZCgpIHx8ICFwcmV2LT5pc0JveCgpIHx8ICFw
cmV2LT5pc1JlbmRlckJsb2NrKCkgfHwgdG9SZW5kZXJCbG9jayhwcmV2KS0+YXZvaWRzRmxvYXRz
KCkpKSB7CisgICAgICAgIGlmIChwcmV2LT5pc0Zsb2F0aW5nKCkpCisgICAgICAgICAgICBwYXJl
bnRIYXNGbG9hdHMgPSB0cnVlOworICAgICAgICBwcmV2ID0gcHJldi0+cHJldmlvdXNTaWJsaW5n
KCk7CisgICAgfQorCisgICAgLy8gRmlyc3QgYWRkIGluIGZsb2F0cyBmcm9tIHRoZSBwYXJlbnQu
CisgICAgTGF5b3V0VW5pdCBsb2dpY2FsVG9wT2Zmc2V0ID0gbG9naWNhbFRvcCgpOworICAgIGlm
IChwYXJlbnRIYXNGbG9hdHMpCisgICAgICAgIGFkZEludHJ1ZGluZ0Zsb2F0cyhwYXJlbnRCbG9j
aywgcGFyZW50QmxvY2stPmxvZ2ljYWxMZWZ0T2Zmc2V0Rm9yQ29udGVudCgpLCBsb2dpY2FsVG9w
T2Zmc2V0KTsKKyAgICAKKyAgICBMYXlvdXRVbml0IGxvZ2ljYWxMZWZ0T2Zmc2V0ID0gMDsKKyAg
ICBpZiAocHJldikKKyAgICAgICAgbG9naWNhbFRvcE9mZnNldCAtPSB0b1JlbmRlckJveChwcmV2
KS0+bG9naWNhbFRvcCgpOworICAgIGVsc2UgeworICAgICAgICBwcmV2ID0gcGFyZW50QmxvY2s7
CisgICAgICAgIGxvZ2ljYWxMZWZ0T2Zmc2V0ICs9IHBhcmVudEJsb2NrLT5sb2dpY2FsTGVmdE9m
ZnNldEZvckNvbnRlbnQoKTsKKyAgICB9CisKKyAgICAvLyBBZGQgb3ZlcmhhbmdpbmcgZmxvYXRz
IGZyb20gdGhlIHByZXZpb3VzIFJlbmRlckJsb2NrLCBidXQgb25seSBpZiBpdCBoYXMgYSBmbG9h
dCB0aGF0IGludHJ1ZGVzIGludG8gb3VyIHNwYWNlLiAgICAKKyAgICBSZW5kZXJCbG9jayogYmxv
Y2sgPSB0b1JlbmRlckJsb2NrKHByZXYpOworICAgIGlmIChibG9jay0+bV9mbG9hdGluZ09iamVj
dHMgJiYgYmxvY2stPmxvd2VzdEZsb2F0TG9naWNhbEJvdHRvbSgpID4gbG9naWNhbFRvcE9mZnNl
dCkKKyAgICAgICAgYWRkSW50cnVkaW5nRmxvYXRzKGJsb2NrLCBsb2dpY2FsTGVmdE9mZnNldCwg
bG9naWNhbFRvcE9mZnNldCk7CisKKyAgICBpZiAoY2hpbGRyZW5JbmxpbmUoKSkgeworICAgICAg
ICBMYXlvdXRVbml0IGNoYW5nZUxvZ2ljYWxUb3AgPSBMYXlvdXRVbml0OjptYXgoKTsKKyAgICAg
ICAgTGF5b3V0VW5pdCBjaGFuZ2VMb2dpY2FsQm90dG9tID0gTGF5b3V0VW5pdDo6bWluKCk7Cisg
ICAgICAgIGlmIChtX2Zsb2F0aW5nT2JqZWN0cykgeworICAgICAgICAgICAgY29uc3QgRmxvYXRp
bmdPYmplY3RTZXQmIGZsb2F0aW5nT2JqZWN0U2V0ID0gbV9mbG9hdGluZ09iamVjdHMtPnNldCgp
OworICAgICAgICAgICAgRmxvYXRpbmdPYmplY3RTZXRJdGVyYXRvciBlbmQgPSBmbG9hdGluZ09i
amVjdFNldC5lbmQoKTsKKyAgICAgICAgICAgIGZvciAoRmxvYXRpbmdPYmplY3RTZXRJdGVyYXRv
ciBpdCA9IGZsb2F0aW5nT2JqZWN0U2V0LmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkgeworICAg
ICAgICAgICAgICAgIEZsb2F0aW5nT2JqZWN0KiBmID0gKml0OworICAgICAgICAgICAgICAgIEZs
b2F0aW5nT2JqZWN0KiBvbGRGbG9hdGluZ09iamVjdCA9IGZsb2F0TWFwLmdldChmLT5yZW5kZXJl
cigpKTsKKyAgICAgICAgICAgICAgICBMYXlvdXRVbml0IGxvZ2ljYWxCb3R0b20gPSBmLT5sb2dp
Y2FsQm90dG9tKGlzSG9yaXpvbnRhbFdyaXRpbmdNb2RlKCkpOworICAgICAgICAgICAgICAgIGlm
IChvbGRGbG9hdGluZ09iamVjdCkgeworICAgICAgICAgICAgICAgICAgICBMYXlvdXRVbml0IG9s
ZExvZ2ljYWxCb3R0b20gPSBvbGRGbG9hdGluZ09iamVjdC0+bG9naWNhbEJvdHRvbShpc0hvcml6
b250YWxXcml0aW5nTW9kZSgpKTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKGYtPmxvZ2ljYWxX
aWR0aChpc0hvcml6b250YWxXcml0aW5nTW9kZSgpKSAhPSBvbGRGbG9hdGluZ09iamVjdC0+bG9n
aWNhbFdpZHRoKGlzSG9yaXpvbnRhbFdyaXRpbmdNb2RlKCkpIHx8IGYtPmxvZ2ljYWxMZWZ0KGlz
SG9yaXpvbnRhbFdyaXRpbmdNb2RlKCkpICE9IG9sZEZsb2F0aW5nT2JqZWN0LT5sb2dpY2FsTGVm
dChpc0hvcml6b250YWxXcml0aW5nTW9kZSgpKSkgeworICAgICAgICAgICAgICAgICAgICAgICAg
Y2hhbmdlTG9naWNhbFRvcCA9IDA7CisgICAgICAgICAgICAgICAgICAgICAgICBjaGFuZ2VMb2dp
Y2FsQm90dG9tID0gbWF4KGNoYW5nZUxvZ2ljYWxCb3R0b20sIG1heChsb2dpY2FsQm90dG9tLCBv
bGRMb2dpY2FsQm90dG9tKSk7CisgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAg
ICAgICAgICAgICAgICAgICBpZiAobG9naWNhbEJvdHRvbSAhPSBvbGRMb2dpY2FsQm90dG9tKSB7
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhbmdlTG9naWNhbFRvcCA9IG1pbihjaGFu
Z2VMb2dpY2FsVG9wLCBtaW4obG9naWNhbEJvdHRvbSwgb2xkTG9naWNhbEJvdHRvbSkpOworICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGNoYW5nZUxvZ2ljYWxCb3R0b20gPSBtYXgoY2hhbmdl
TG9naWNhbEJvdHRvbSwgbWF4KGxvZ2ljYWxCb3R0b20sIG9sZExvZ2ljYWxCb3R0b20pKTsKKyAg
ICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIExheW91dFVu
aXQgbG9naWNhbFRvcCA9IGYtPmxvZ2ljYWxUb3AoaXNIb3Jpem9udGFsV3JpdGluZ01vZGUoKSk7
CisgICAgICAgICAgICAgICAgICAgICAgICBMYXlvdXRVbml0IG9sZExvZ2ljYWxUb3AgPSBvbGRG
bG9hdGluZ09iamVjdC0+bG9naWNhbFRvcChpc0hvcml6b250YWxXcml0aW5nTW9kZSgpKTsKKyAg
ICAgICAgICAgICAgICAgICAgICAgIGlmIChsb2dpY2FsVG9wICE9IG9sZExvZ2ljYWxUb3ApIHsK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFuZ2VMb2dpY2FsVG9wID0gbWluKGNoYW5n
ZUxvZ2ljYWxUb3AsIG1pbihsb2dpY2FsVG9wLCBvbGRMb2dpY2FsVG9wKSk7CisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgY2hhbmdlTG9naWNhbEJvdHRvbSA9IG1heChjaGFuZ2VMb2dpY2Fs
Qm90dG9tLCBtYXgobG9naWNhbFRvcCwgb2xkTG9naWNhbFRvcCkpOworICAgICAgICAgICAgICAg
ICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAgICAg
ZmxvYXRNYXAucmVtb3ZlKGYtPnJlbmRlcmVyKCkpOworICAgICAgICAgICAgICAgICAgICBpZiAo
b2xkRmxvYXRpbmdPYmplY3QtPm9yaWdpbmF0aW5nTGluZSgpICYmICFzZWxmTmVlZHNMYXlvdXQo
KSkgeworICAgICAgICAgICAgICAgICAgICAgICAgQVNTRVJUKCZvbGRGbG9hdGluZ09iamVjdC0+
b3JpZ2luYXRpbmdMaW5lKCktPnJlbmRlcmVyKCkgPT0gdGhpcyk7CisgICAgICAgICAgICAgICAg
ICAgICAgICBvbGRGbG9hdGluZ09iamVjdC0+b3JpZ2luYXRpbmdMaW5lKCktPm1hcmtEaXJ0eSgp
OworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIGRlbGV0ZSBvbGRG
bG9hdGluZ09iamVjdDsKKyAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAg
ICAgICBjaGFuZ2VMb2dpY2FsVG9wID0gMDsKKyAgICAgICAgICAgICAgICAgICAgY2hhbmdlTG9n
aWNhbEJvdHRvbSA9IG1heChjaGFuZ2VMb2dpY2FsQm90dG9tLCBsb2dpY2FsQm90dG9tKTsKKyAg
ICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICBSZW5k
ZXJlclRvRmxvYXRJbmZvTWFwOjppdGVyYXRvciBlbmQgPSBmbG9hdE1hcC5lbmQoKTsKKyAgICAg
ICAgZm9yIChSZW5kZXJlclRvRmxvYXRJbmZvTWFwOjppdGVyYXRvciBpdCA9IGZsb2F0TWFwLmJl
Z2luKCk7IGl0ICE9IGVuZDsgKytpdCkgeworICAgICAgICAgICAgRmxvYXRpbmdPYmplY3QqIGZs
b2F0aW5nT2JqZWN0ID0gKCppdCkudmFsdWU7CisgICAgICAgICAgICBpZiAoIWZsb2F0aW5nT2Jq
ZWN0LT5pc0Rlc2NlbmRhbnQoKSkgeworICAgICAgICAgICAgICAgIGNoYW5nZUxvZ2ljYWxUb3Ag
PSAwOworICAgICAgICAgICAgICAgIGNoYW5nZUxvZ2ljYWxCb3R0b20gPSBtYXgoY2hhbmdlTG9n
aWNhbEJvdHRvbSwgZmxvYXRpbmdPYmplY3QtPmxvZ2ljYWxCb3R0b20oaXNIb3Jpem9udGFsV3Jp
dGluZ01vZGUoKSkpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGRlbGV0ZUFs
bFZhbHVlcyhmbG9hdE1hcCk7CisKKyAgICAgICAgbWFya0xpbmVzRGlydHlJbkJsb2NrUmFuZ2Uo
Y2hhbmdlTG9naWNhbFRvcCwgY2hhbmdlTG9naWNhbEJvdHRvbSk7CisgICAgfSBlbHNlIGlmICgh
b2xkSW50cnVkaW5nRmxvYXRTZXQuaXNFbXB0eSgpKSB7CisgICAgICAgIC8vIElmIHRoZXJlIGFy
ZSBwcmV2aW91c2x5IGludHJ1ZGluZyBmbG9hdHMgdGhhdCBubyBsb25nZXIgaW50cnVkZSwgdGhl
biBjaGlsZHJlbiB3aXRoIGZsb2F0cworICAgICAgICAvLyBzaG91bGQgYWxzbyBnZXQgbGF5b3V0
IGJlY2F1c2UgdGhleSBtaWdodCBuZWVkIHRoZWlyIGZsb2F0aW5nIG9iamVjdCBsaXN0cyBjbGVh
cmVkLgorICAgICAgICBpZiAobV9mbG9hdGluZ09iamVjdHMtPnNldCgpLnNpemUoKSA8IG9sZElu
dHJ1ZGluZ0Zsb2F0U2V0LnNpemUoKSkKKyAgICAgICAgICAgIG1hcmtBbGxEZXNjZW5kYW50c1dp
dGhGbG9hdHNGb3JMYXlvdXQoKTsKKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICBjb25zdCBG
bG9hdGluZ09iamVjdFNldCYgZmxvYXRpbmdPYmplY3RTZXQgPSBtX2Zsb2F0aW5nT2JqZWN0cy0+
c2V0KCk7CisgICAgICAgICAgICBGbG9hdGluZ09iamVjdFNldEl0ZXJhdG9yIGVuZCA9IGZsb2F0
aW5nT2JqZWN0U2V0LmVuZCgpOworICAgICAgICAgICAgZm9yIChGbG9hdGluZ09iamVjdFNldEl0
ZXJhdG9yIGl0ID0gZmxvYXRpbmdPYmplY3RTZXQuYmVnaW4oKTsgaXQgIT0gZW5kICYmICFvbGRJ
bnRydWRpbmdGbG9hdFNldC5pc0VtcHR5KCk7ICsraXQpCisgICAgICAgICAgICAgICAgb2xkSW50
cnVkaW5nRmxvYXRTZXQucmVtb3ZlKCgqaXQpLT5yZW5kZXJlcigpKTsKKyAgICAgICAgICAgIGlm
ICghb2xkSW50cnVkaW5nRmxvYXRTZXQuaXNFbXB0eSgpKQorICAgICAgICAgICAgICAgIG1hcmtB
bGxEZXNjZW5kYW50c1dpdGhGbG9hdHNGb3JMYXlvdXQoKTsKKyAgICAgICAgfQorICAgIH0KK30K
Kwordm9pZCBSZW5kZXJCbG9ja0Zsb3c6OmxheW91dEJsb2NrKGJvb2wgcmVsYXlvdXRDaGlsZHJl
biwgTGF5b3V0VW5pdCBwYWdlTG9naWNhbEhlaWdodCkKK3sKKyAgICBBU1NFUlQobmVlZHNMYXlv
dXQoKSk7CisKKyAgICBpZiAoIXJlbGF5b3V0Q2hpbGRyZW4gJiYgc2ltcGxpZmllZExheW91dCgp
KQorICAgICAgICByZXR1cm47CisKKyAgICBMYXlvdXRSZXBhaW50ZXIgcmVwYWludGVyKCp0aGlz
LCBjaGVja0ZvclJlcGFpbnREdXJpbmdMYXlvdXQoKSk7CisKKyAgICBpZiAodXBkYXRlTG9naWNh
bFdpZHRoQW5kQ29sdW1uV2lkdGgoKSkKKyAgICAgICAgcmVsYXlvdXRDaGlsZHJlbiA9IHRydWU7
CisKKyAgICBjbGVhckZsb2F0cygpOworCisgICAgTGF5b3V0VW5pdCBwcmV2aW91c0hlaWdodCA9
IGxvZ2ljYWxIZWlnaHQoKTsKKyAgICAvLyBGSVhNRTogc2hvdWxkIHRoaXMgc3RhcnQgb3V0IGFz
IGJvcmRlckFuZFBhZGRpbmdMb2dpY2FsSGVpZ2h0KCkgKyBzY3JvbGxiYXJMb2dpY2FsSGVpZ2h0
KCksCisgICAgLy8gZm9yIGNvbnNpc3RlbmN5IHdpdGggb3RoZXIgcmVuZGVyIGNsYXNzZXM/Cisg
ICAgc2V0TG9naWNhbEhlaWdodCgwKTsKKworICAgIGJvb2wgcGFnZUxvZ2ljYWxIZWlnaHRDaGFu
Z2VkID0gZmFsc2U7CisgICAgYm9vbCBoYXNTcGVjaWZpZWRQYWdlTG9naWNhbEhlaWdodCA9IGZh
bHNlOworICAgIGNoZWNrRm9yUGFnaW5hdGlvbkxvZ2ljYWxIZWlnaHRDaGFuZ2UocGFnZUxvZ2lj
YWxIZWlnaHQsIHBhZ2VMb2dpY2FsSGVpZ2h0Q2hhbmdlZCwgaGFzU3BlY2lmaWVkUGFnZUxvZ2lj
YWxIZWlnaHQpOworCisgICAgUmVuZGVyU3R5bGUqIHN0eWxlVG9Vc2UgPSBzdHlsZSgpOworICAg
IExheW91dFN0YXRlTWFpbnRhaW5lciBzdGF0ZVB1c2hlcigmdmlldygpLCB0aGlzLCBsb2NhdGlv
bk9mZnNldCgpLCBoYXNDb2x1bW5zKCkgfHwgaGFzVHJhbnNmb3JtKCkgfHwgaGFzUmVmbGVjdGlv
bigpIHx8IHN0eWxlVG9Vc2UtPmlzRmxpcHBlZEJsb2Nrc1dyaXRpbmdNb2RlKCksIHBhZ2VMb2dp
Y2FsSGVpZ2h0LCBwYWdlTG9naWNhbEhlaWdodENoYW5nZWQsIGNvbHVtbkluZm8oKSk7CisKKyAg
ICAvLyBSZWdpb25zIGNoYW5naW5nIHdpZHRocyBjYW4gZm9yY2UgdXMgdG8gcmVsYXlvdXQgb3Vy
IGNoaWxkcmVuLgorICAgIFJlbmRlckZsb3dUaHJlYWQqIGZsb3dUaHJlYWQgPSBmbG93VGhyZWFk
Q29udGFpbmluZ0Jsb2NrKCk7CisgICAgaWYgKGxvZ2ljYWxXaWR0aENoYW5nZWRJblJlZ2lvbnMo
Zmxvd1RocmVhZCkpCisgICAgICAgIHJlbGF5b3V0Q2hpbGRyZW4gPSB0cnVlOworICAgIGlmICh1
cGRhdGVTaGFwZXNCZWZvcmVCbG9ja0xheW91dCgpKQorICAgICAgICByZWxheW91dENoaWxkcmVu
ID0gdHJ1ZTsKKworICAgIC8vIFdlIHVzZSBmb3VyIHZhbHVlcywgbWF4VG9wUG9zLCBtYXhUb3BO
ZWcsIG1heEJvdHRvbVBvcywgYW5kIG1heEJvdHRvbU5lZywgdG8gdHJhY2sKKyAgICAvLyBvdXIg
Y3VycmVudCBtYXhpbWFsIHBvc2l0aXZlIGFuZCBuZWdhdGl2ZSBtYXJnaW5zLiBUaGVzZSB2YWx1
ZXMgYXJlIHVzZWQgd2hlbiB3ZQorICAgIC8vIGFyZSBjb2xsYXBzZWQgd2l0aCBhZGphY2VudCBi
bG9ja3MsIHNvIGZvciBleGFtcGxlLCBpZiB5b3UgaGF2ZSBibG9jayBBIGFuZCBCCisgICAgLy8g
Y29sbGFwc2luZyB0b2dldGhlciwgdGhlbiB5b3UnZCB0YWtlIHRoZSBtYXhpbWFsIHBvc2l0aXZl
IG1hcmdpbiBmcm9tIGJvdGggQSBhbmQgQgorICAgIC8vIGFuZCBzdWJ0cmFjdCBpdCBmcm9tIHRo
ZSBtYXhpbWFsIG5lZ2F0aXZlIG1hcmdpbiBmcm9tIGJvdGggQSBhbmQgQiB0byBnZXQgdGhlCisg
ICAgLy8gdHJ1ZSBjb2xsYXBzZWQgbWFyZ2luLiBUaGlzIGFsZ29yaXRobSBpcyByZWN1cnNpdmUs
IHNvIHdoZW4gd2UgZmluaXNoIGxheW91dCgpCisgICAgLy8gb3VyIGJsb2NrIGtub3dzIGl0cyBj
dXJyZW50IG1heGltYWwgcG9zaXRpdmUvbmVnYXRpdmUgdmFsdWVzLgorICAgIC8vCisgICAgLy8g
U3RhcnQgb3V0IGJ5IHNldHRpbmcgb3VyIG1hcmdpbiB2YWx1ZXMgdG8gb3VyIGN1cnJlbnQgbWFy
Z2lucy4gVGFibGUgY2VsbHMgaGF2ZQorICAgIC8vIG5vIG1hcmdpbnMsIHNvIHdlIGRvbid0IGZp
bGwgaW4gdGhlIHZhbHVlcyBmb3IgdGFibGUgY2VsbHMuCisgICAgYm9vbCBpc0NlbGwgPSBpc1Rh
YmxlQ2VsbCgpOworICAgIGlmICghaXNDZWxsKSB7CisgICAgICAgIGluaXRNYXhNYXJnaW5WYWx1
ZXMoKTsKKyAgICAgICAgCisgICAgICAgIHNldEhhc01hcmdpbkJlZm9yZVF1aXJrKHN0eWxlVG9V
c2UtPmhhc01hcmdpbkJlZm9yZVF1aXJrKCkpOworICAgICAgICBzZXRIYXNNYXJnaW5BZnRlclF1
aXJrKHN0eWxlVG9Vc2UtPmhhc01hcmdpbkFmdGVyUXVpcmsoKSk7CisgICAgICAgIHNldFBhZ2lu
YXRpb25TdHJ1dCgwKTsKKyAgICB9CisKKyAgICBMYXlvdXRVbml0IHJlcGFpbnRMb2dpY2FsVG9w
ID0gMDsKKyAgICBMYXlvdXRVbml0IHJlcGFpbnRMb2dpY2FsQm90dG9tID0gMDsKKyAgICBMYXlv
dXRVbml0IG1heEZsb2F0TG9naWNhbEJvdHRvbSA9IDA7CisgICAgaWYgKCFmaXJzdENoaWxkKCkg
JiYgIWlzQW5vbnltb3VzQmxvY2soKSkKKyAgICAgICAgc2V0Q2hpbGRyZW5JbmxpbmUodHJ1ZSk7
CisgICAgaWYgKGNoaWxkcmVuSW5saW5lKCkpCisgICAgICAgIGxheW91dElubGluZUNoaWxkcmVu
KHJlbGF5b3V0Q2hpbGRyZW4sIHJlcGFpbnRMb2dpY2FsVG9wLCByZXBhaW50TG9naWNhbEJvdHRv
bSk7CisgICAgZWxzZQorICAgICAgICBsYXlvdXRCbG9ja0NoaWxkcmVuKHJlbGF5b3V0Q2hpbGRy
ZW4sIG1heEZsb2F0TG9naWNhbEJvdHRvbSk7CisKKyAgICAvLyBFeHBhbmQgb3VyIGludHJpbnNp
YyBoZWlnaHQgdG8gZW5jb21wYXNzIGZsb2F0cy4KKyAgICBMYXlvdXRVbml0IHRvQWRkID0gYm9y
ZGVyQW5kUGFkZGluZ0FmdGVyKCkgKyBzY3JvbGxiYXJMb2dpY2FsSGVpZ2h0KCk7CisgICAgaWYg
KGxvd2VzdEZsb2F0TG9naWNhbEJvdHRvbSgpID4gKGxvZ2ljYWxIZWlnaHQoKSAtIHRvQWRkKSAm
JiBleHBhbmRzVG9FbmNsb3NlT3ZlcmhhbmdpbmdGbG9hdHMoKSkKKyAgICAgICAgc2V0TG9naWNh
bEhlaWdodChsb3dlc3RGbG9hdExvZ2ljYWxCb3R0b20oKSArIHRvQWRkKTsKKyAgICAKKyAgICBp
ZiAocmVsYXlvdXRGb3JQYWdpbmF0aW9uKGhhc1NwZWNpZmllZFBhZ2VMb2dpY2FsSGVpZ2h0LCBw
YWdlTG9naWNhbEhlaWdodCwgc3RhdGVQdXNoZXIpIHx8IHJlbGF5b3V0VG9Bdm9pZFdpZG93cyhz
dGF0ZVB1c2hlcikpIHsKKyAgICAgICAgQVNTRVJUKCFzaG91bGRCcmVha0F0TGluZVRvQXZvaWRX
aWRvdygpKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIC8vIENhbGN1bGF0ZSBvdXIg
bmV3IGhlaWdodC4KKyAgICBMYXlvdXRVbml0IG9sZEhlaWdodCA9IGxvZ2ljYWxIZWlnaHQoKTsK
KyAgICBMYXlvdXRVbml0IG9sZENsaWVudEFmdGVyRWRnZSA9IGNsaWVudExvZ2ljYWxCb3R0b20o
KTsKKworICAgIC8vIEJlZm9yZSB1cGRhdGluZyB0aGUgZmluYWwgc2l6ZSBvZiB0aGUgZmxvdyB0
aHJlYWQgbWFrZSBzdXJlIGEgZm9yY2VkIGJyZWFrIGlzIGFwcGxpZWQgYWZ0ZXIgdGhlIGNvbnRl
bnQuCisgICAgLy8gVGhpcyBlbnN1cmVzIHRoZSBzaXplIGluZm9ybWF0aW9uIGlzIGNvcnJlY3Rs
eSBjb21wdXRlZCBmb3IgdGhlIGxhc3QgYXV0by1oZWlnaHQgcmVnaW9uIHJlY2VpdmluZyBjb250
ZW50LgorICAgIGlmIChpc1JlbmRlckZsb3dUaHJlYWQoKSkKKyAgICAgICAgdG9SZW5kZXJGbG93
VGhyZWFkKHRoaXMpLT5hcHBseUJyZWFrQWZ0ZXJDb250ZW50KG9sZENsaWVudEFmdGVyRWRnZSk7
CisKKyAgICB1cGRhdGVMb2dpY2FsSGVpZ2h0KCk7CisgICAgTGF5b3V0VW5pdCBuZXdIZWlnaHQg
PSBsb2dpY2FsSGVpZ2h0KCk7CisgICAgaWYgKG9sZEhlaWdodCAhPSBuZXdIZWlnaHQpIHsKKyAg
ICAgICAgaWYgKG9sZEhlaWdodCA+IG5ld0hlaWdodCAmJiBtYXhGbG9hdExvZ2ljYWxCb3R0b20g
PiBuZXdIZWlnaHQgJiYgIWNoaWxkcmVuSW5saW5lKCkpIHsKKyAgICAgICAgICAgIC8vIE9uZSBv
ZiBvdXIgY2hpbGRyZW4ncyBmbG9hdHMgbWF5IGhhdmUgYmVjb21lIGFuIG92ZXJoYW5naW5nIGZs
b2F0IGZvciB1cy4gV2UgbmVlZCB0byBsb29rIGZvciBpdC4KKyAgICAgICAgICAgIGZvciAoUmVu
ZGVyT2JqZWN0KiBjaGlsZCA9IGZpcnN0Q2hpbGQoKTsgY2hpbGQ7IGNoaWxkID0gY2hpbGQtPm5l
eHRTaWJsaW5nKCkpIHsKKyAgICAgICAgICAgICAgICBpZiAoY2hpbGQtPmlzUmVuZGVyQmxvY2tG
bG93KCkgJiYgIWNoaWxkLT5pc0Zsb2F0aW5nT3JPdXRPZkZsb3dQb3NpdGlvbmVkKCkpIHsKKyAg
ICAgICAgICAgICAgICAgICAgUmVuZGVyQmxvY2sqIGJsb2NrID0gdG9SZW5kZXJCbG9jayhjaGls
ZCk7CisgICAgICAgICAgICAgICAgICAgIGlmIChibG9jay0+bG93ZXN0RmxvYXRMb2dpY2FsQm90
dG9tKCkgKyBibG9jay0+bG9naWNhbFRvcCgpID4gbmV3SGVpZ2h0KQorICAgICAgICAgICAgICAg
ICAgICAgICAgYWRkT3ZlcmhhbmdpbmdGbG9hdHMoYmxvY2ssIGZhbHNlKTsKKyAgICAgICAgICAg
ICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisKKyAgICBib29sIGhlaWdo
dENoYW5nZWQgPSAocHJldmlvdXNIZWlnaHQgIT0gbmV3SGVpZ2h0KTsKKyAgICBpZiAoaGVpZ2h0
Q2hhbmdlZCkKKyAgICAgICAgcmVsYXlvdXRDaGlsZHJlbiA9IHRydWU7CisKKyAgICBsYXlvdXRQ
b3NpdGlvbmVkT2JqZWN0cyhyZWxheW91dENoaWxkcmVuIHx8IGlzUm9vdCgpKTsKKworICAgIHVw
ZGF0ZVNoYXBlc0FmdGVyQmxvY2tMYXlvdXQoaGVpZ2h0Q2hhbmdlZCk7CisKKyAgICAvLyBBZGQg
b3ZlcmZsb3cgZnJvbSBjaGlsZHJlbiAodW5sZXNzIHdlJ3JlIG11bHRpLWNvbHVtbiwgc2luY2Ug
aW4gdGhhdCBjYXNlIGFsbCBvdXIgY2hpbGQgb3ZlcmZsb3cgaXMgY2xpcHBlZCBhbnl3YXkpLgor
ICAgIGNvbXB1dGVPdmVyZmxvdyhvbGRDbGllbnRBZnRlckVkZ2UpOworICAgIAorICAgIHN0YXRl
UHVzaGVyLnBvcCgpOworCisgICAgZml0Qm9yZGVyVG9MaW5lc0lmTmVlZGVkKCk7CisKKyAgICBp
ZiAodmlldygpLmxheW91dFN0YXRlKCktPm1fcGFnZUxvZ2ljYWxIZWlnaHQpCisgICAgICAgIHNl
dFBhZ2VMb2dpY2FsT2Zmc2V0KHZpZXcoKS5sYXlvdXRTdGF0ZSgpLT5wYWdlTG9naWNhbE9mZnNl
dCh0aGlzLCBsb2dpY2FsVG9wKCkpKTsKKworICAgIHVwZGF0ZUxheWVyVHJhbnNmb3JtKCk7CisK
KyAgICAvLyBVcGRhdGUgb3VyIHNjcm9sbCBpbmZvcm1hdGlvbiBpZiB3ZSdyZSBvdmVyZmxvdzph
dXRvL3Njcm9sbC9oaWRkZW4gbm93IHRoYXQgd2Uga25vdyBpZgorICAgIC8vIHdlIG92ZXJmbG93
IG9yIG5vdC4KKyAgICB1cGRhdGVTY3JvbGxJbmZvQWZ0ZXJMYXlvdXQoKTsKKworICAgIC8vIEZJ
WE1FOiBUaGlzIHJlcGFpbnQgbG9naWMgc2hvdWxkIGJlIG1vdmVkIGludG8gYSBzZXBhcmF0ZSBo
ZWxwZXIgZnVuY3Rpb24hCisgICAgLy8gUmVwYWludCB3aXRoIG91ciBuZXcgYm91bmRzIGlmIHRo
ZXkgYXJlIGRpZmZlcmVudCBmcm9tIG91ciBvbGQgYm91bmRzLgorICAgIGJvb2wgZGlkRnVsbFJl
cGFpbnQgPSByZXBhaW50ZXIucmVwYWludEFmdGVyTGF5b3V0KCk7CisgICAgaWYgKCFkaWRGdWxs
UmVwYWludCAmJiByZXBhaW50TG9naWNhbFRvcCAhPSByZXBhaW50TG9naWNhbEJvdHRvbSAmJiAo
c3R5bGVUb1VzZS0+dmlzaWJpbGl0eSgpID09IFZJU0lCTEUgfHwgZW5jbG9zaW5nTGF5ZXIoKS0+
aGFzVmlzaWJsZUNvbnRlbnQoKSkpIHsKKyAgICAgICAgLy8gRklYTUU6IFdlIGNvdWxkIHRpZ2h0
ZW4gdXAgdGhlIGxlZnQgYW5kIHJpZ2h0IGludmFsaWRhdGlvbiBwb2ludHMgaWYgd2UgbGV0IGxh
eW91dElubGluZUNoaWxkcmVuIGZpbGwgdGhlbSBpbiBiYXNlZCBvZmYgdGhlIHBhcnRpY3VsYXIg
bGluZXMKKyAgICAgICAgLy8gaXQgaGFkIHRvIGxheSBvdXQuIFdlIHdvdWxkbid0IG5lZWQgdGhl
IGhhc092ZXJmbG93Q2xpcCgpIGhhY2sgaW4gdGhhdCBjYXNlIGVpdGhlci4KKyAgICAgICAgTGF5
b3V0VW5pdCByZXBhaW50TG9naWNhbExlZnQgPSBsb2dpY2FsTGVmdFZpc3VhbE92ZXJmbG93KCk7
CisgICAgICAgIExheW91dFVuaXQgcmVwYWludExvZ2ljYWxSaWdodCA9IGxvZ2ljYWxSaWdodFZp
c3VhbE92ZXJmbG93KCk7CisgICAgICAgIGlmIChoYXNPdmVyZmxvd0NsaXAoKSkgeworICAgICAg
ICAgICAgLy8gSWYgd2UgaGF2ZSBjbGlwcGVkIG92ZXJmbG93LCB3ZSBzaG91bGQgdXNlIGxheW91
dCBvdmVyZmxvdyBhcyB3ZWxsLCBzaW5jZSB2aXN1YWwgb3ZlcmZsb3cgZnJvbSBsaW5lcyBkaWRu
J3QgcHJvcGFnYXRlIHRvIG91ciBibG9jaydzIG92ZXJmbG93LgorICAgICAgICAgICAgLy8gTm90
ZSB0aGUgb2xkIGNvZGUgZGlkIHRoaXMgYXMgd2VsbCBidXQgZXZlbiBmb3Igb3ZlcmZsb3c6dmlz
aWJsZS4gVGhlIGFkZGl0aW9uIG9mIGhhc092ZXJmbG93Q2xpcCgpIGF0IGxlYXN0IHRpZ2h0ZW5z
IHVwIHRoZSBoYWNrIGEgYml0LgorICAgICAgICAgICAgLy8gbGF5b3V0SW5saW5lQ2hpbGRyZW4g
c2hvdWxkIGJlIHBhdGNoZWQgdG8gY29tcHV0ZSB0aGUgZW50aXJlIHJlcGFpbnQgcmVjdC4KKyAg
ICAgICAgICAgIHJlcGFpbnRMb2dpY2FsTGVmdCA9IG1pbihyZXBhaW50TG9naWNhbExlZnQsIGxv
Z2ljYWxMZWZ0TGF5b3V0T3ZlcmZsb3coKSk7CisgICAgICAgICAgICByZXBhaW50TG9naWNhbFJp
Z2h0ID0gbWF4KHJlcGFpbnRMb2dpY2FsUmlnaHQsIGxvZ2ljYWxSaWdodExheW91dE92ZXJmbG93
KCkpOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBMYXlvdXRSZWN0IHJlcGFpbnRSZWN0
OworICAgICAgICBpZiAoaXNIb3Jpem9udGFsV3JpdGluZ01vZGUoKSkKKyAgICAgICAgICAgIHJl
cGFpbnRSZWN0ID0gTGF5b3V0UmVjdChyZXBhaW50TG9naWNhbExlZnQsIHJlcGFpbnRMb2dpY2Fs
VG9wLCByZXBhaW50TG9naWNhbFJpZ2h0IC0gcmVwYWludExvZ2ljYWxMZWZ0LCByZXBhaW50TG9n
aWNhbEJvdHRvbSAtIHJlcGFpbnRMb2dpY2FsVG9wKTsKKyAgICAgICAgZWxzZQorICAgICAgICAg
ICAgcmVwYWludFJlY3QgPSBMYXlvdXRSZWN0KHJlcGFpbnRMb2dpY2FsVG9wLCByZXBhaW50TG9n
aWNhbExlZnQsIHJlcGFpbnRMb2dpY2FsQm90dG9tIC0gcmVwYWludExvZ2ljYWxUb3AsIHJlcGFp
bnRMb2dpY2FsUmlnaHQgLSByZXBhaW50TG9naWNhbExlZnQpOworCisgICAgICAgIC8vIFRoZSBy
ZXBhaW50IHJlY3QgbWF5IGJlIHNwbGl0IGFjcm9zcyBjb2x1bW5zLCBpbiB3aGljaCBjYXNlIGFk
anVzdFJlY3RGb3JDb2x1bW5zKCkgd2lsbCByZXR1cm4gdGhlIHVuaW9uLgorICAgICAgICBhZGp1
c3RSZWN0Rm9yQ29sdW1ucyhyZXBhaW50UmVjdCk7CisKKyAgICAgICAgcmVwYWludFJlY3QuaW5m
bGF0ZShtYXhpbWFsT3V0bGluZVNpemUoUGFpbnRQaGFzZU91dGxpbmUpKTsKKyAgICAgICAgCisg
ICAgICAgIGlmIChoYXNPdmVyZmxvd0NsaXAoKSkgeworICAgICAgICAgICAgLy8gQWRqdXN0IHJl
cGFpbnQgcmVjdCBmb3Igc2Nyb2xsIG9mZnNldAorICAgICAgICAgICAgcmVwYWludFJlY3QubW92
ZSgtc2Nyb2xsZWRDb250ZW50T2Zmc2V0KCkpOworCisgICAgICAgICAgICAvLyBEb24ndCBhbGxv
dyB0aGlzIHJlY3QgdG8gc3BpbGwgb3V0IG9mIG91ciBvdmVyZmxvdyBib3guCisgICAgICAgICAg
ICByZXBhaW50UmVjdC5pbnRlcnNlY3QoTGF5b3V0UmVjdChMYXlvdXRQb2ludCgpLCBzaXplKCkp
KTsKKyAgICAgICAgfQorCisgICAgICAgIC8vIE1ha2Ugc3VyZSB0aGUgcmVjdCBpcyBzdGlsbCBu
b24tZW1wdHkgYWZ0ZXIgaW50ZXJzZWN0aW5nIGZvciBvdmVyZmxvdyBhYm92ZQorICAgICAgICBp
ZiAoIXJlcGFpbnRSZWN0LmlzRW1wdHkoKSkgeworICAgICAgICAgICAgcmVwYWludFJlY3Rhbmds
ZShyZXBhaW50UmVjdCk7IC8vIFdlIG5lZWQgdG8gZG8gYSBwYXJ0aWFsIHJlcGFpbnQgb2Ygb3Vy
IGNvbnRlbnQuCisgICAgICAgICAgICBpZiAoaGFzUmVmbGVjdGlvbigpKQorICAgICAgICAgICAg
ICAgIHJlcGFpbnRSZWN0YW5nbGUocmVmbGVjdGVkUmVjdChyZXBhaW50UmVjdCkpOworICAgICAg
ICB9CisgICAgfQorCisgICAgc2V0TmVlZHNMYXlvdXQoZmFsc2UpOworfQorCit2b2lkIFJlbmRl
ckJsb2NrRmxvdzo6bGF5b3V0QmxvY2tDaGlsZHJlbihib29sIHJlbGF5b3V0Q2hpbGRyZW4sIExh
eW91dFVuaXQmIG1heEZsb2F0TG9naWNhbEJvdHRvbSkKK3sKKyAgICBkaXJ0eUZvckxheW91dEZy
b21QZXJjZW50YWdlSGVpZ2h0RGVzY2VuZGFudHMoKTsKKworICAgIExheW91dFVuaXQgYmVmb3Jl
RWRnZSA9IGJvcmRlckFuZFBhZGRpbmdCZWZvcmUoKTsKKyAgICBMYXlvdXRVbml0IGFmdGVyRWRn
ZSA9IGJvcmRlckFuZFBhZGRpbmdBZnRlcigpICsgc2Nyb2xsYmFyTG9naWNhbEhlaWdodCgpOwor
CisgICAgc2V0TG9naWNhbEhlaWdodChiZWZvcmVFZGdlKTsKKyAgICAKKyAgICAvLyBMYXkgb3V0
IG91ciBoeXBvdGhldGljYWwgZ3JpZCBsaW5lIGFzIHRob3VnaCBpdCBvY2N1cnMgYXQgdGhlIHRv
cCBvZiB0aGUgYmxvY2suCisgICAgaWYgKHZpZXcoKS5sYXlvdXRTdGF0ZSgpLT5saW5lR3JpZCgp
ID09IHRoaXMpCisgICAgICAgIGxheW91dExpbmVHcmlkQm94KCk7CisKKyAgICAvLyBUaGUgbWFy
Z2luIHN0cnVjdCBjYWNoZXMgYWxsIG91ciBjdXJyZW50IG1hcmdpbiBjb2xsYXBzaW5nIHN0YXRl
LiAgVGhlIGNvbXBhY3Qgc3RydWN0IGNhY2hlcyBzdGF0ZSB3aGVuIHdlIGVuY291bnRlciBjb21w
YWN0cywKKyAgICBNYXJnaW5JbmZvIG1hcmdpbkluZm8odGhpcywgYmVmb3JlRWRnZSwgYWZ0ZXJF
ZGdlKTsKKworICAgIC8vIEZpZWxkc2V0cyBuZWVkIHRvIGZpbmQgdGhlaXIgbGVnZW5kIGFuZCBw
b3NpdGlvbiBpdCBpbnNpZGUgdGhlIGJvcmRlciBvZiB0aGUgb2JqZWN0LgorICAgIC8vIFRoZSBs
ZWdlbmQgdGhlbiBnZXRzIHNraXBwZWQgZHVyaW5nIG5vcm1hbCBsYXlvdXQuIFRoZSBzYW1lIGlz
IHRydWUgZm9yIHJ1YnkgdGV4dC4KKyAgICAvLyBJdCBkb2Vzbid0IGdldCBpbmNsdWRlZCBpbiB0
aGUgbm9ybWFsIGxheW91dCBwcm9jZXNzIGJ1dCBpcyBpbnN0ZWFkIHNraXBwZWQuCisgICAgUmVu
ZGVyT2JqZWN0KiBjaGlsZFRvRXhjbHVkZSA9IGxheW91dFNwZWNpYWxFeGNsdWRlZENoaWxkKHJl
bGF5b3V0Q2hpbGRyZW4pOworCisgICAgTGF5b3V0VW5pdCBwcmV2aW91c0Zsb2F0TG9naWNhbEJv
dHRvbSA9IDA7CisgICAgbWF4RmxvYXRMb2dpY2FsQm90dG9tID0gMDsKKworICAgIFJlbmRlckJv
eCogbmV4dCA9IGZpcnN0Q2hpbGRCb3goKTsKKworICAgIHdoaWxlIChuZXh0KSB7CisgICAgICAg
IFJlbmRlckJveCogY2hpbGQgPSBuZXh0OworICAgICAgICBuZXh0ID0gY2hpbGQtPm5leHRTaWJs
aW5nQm94KCk7CisKKyAgICAgICAgaWYgKGNoaWxkVG9FeGNsdWRlID09IGNoaWxkKQorICAgICAg
ICAgICAgY29udGludWU7IC8vIFNraXAgdGhpcyBjaGlsZCwgc2luY2UgaXQgd2lsbCBiZSBwb3Np
dGlvbmVkIGJ5IHRoZSBzcGVjaWFsaXplZCBzdWJjbGFzcyAoZmllbGRzZXRzIGFuZCBydWJ5IHJ1
bnMpLgorCisgICAgICAgIHVwZGF0ZUJsb2NrQ2hpbGREaXJ0eUJpdHNCZWZvcmVMYXlvdXQocmVs
YXlvdXRDaGlsZHJlbiwgY2hpbGQpOworCisgICAgICAgIGlmIChjaGlsZC0+aXNPdXRPZkZsb3dQ
b3NpdGlvbmVkKCkpIHsKKyAgICAgICAgICAgIGNoaWxkLT5jb250YWluaW5nQmxvY2soKS0+aW5z
ZXJ0UG9zaXRpb25lZE9iamVjdChjaGlsZCk7CisgICAgICAgICAgICBhZGp1c3RQb3NpdGlvbmVk
QmxvY2soY2hpbGQsIG1hcmdpbkluZm8pOworICAgICAgICAgICAgY29udGludWU7CisgICAgICAg
IH0KKyAgICAgICAgaWYgKGNoaWxkLT5pc0Zsb2F0aW5nKCkpIHsKKyAgICAgICAgICAgIGluc2Vy
dEZsb2F0aW5nT2JqZWN0KGNoaWxkKTsKKyAgICAgICAgICAgIGFkanVzdEZsb2F0aW5nQmxvY2so
bWFyZ2luSW5mbyk7CisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgfQorCisgICAgICAg
IC8vIExheSBvdXQgdGhlIGNoaWxkLgorICAgICAgICBsYXlvdXRCbG9ja0NoaWxkKGNoaWxkLCBt
YXJnaW5JbmZvLCBwcmV2aW91c0Zsb2F0TG9naWNhbEJvdHRvbSwgbWF4RmxvYXRMb2dpY2FsQm90
dG9tKTsKKyAgICB9CisgICAgCisgICAgLy8gTm93IGRvIHRoZSBoYW5kbGluZyBvZiB0aGUgYm90
dG9tIG9mIHRoZSBibG9jaywgYWRkaW5nIGluIG91ciBib3R0b20gYm9yZGVyL3BhZGRpbmcgYW5k
CisgICAgLy8gZGV0ZXJtaW5pbmcgdGhlIGNvcnJlY3QgY29sbGFwc2VkIGJvdHRvbSBtYXJnaW4g
aW5mb3JtYXRpb24uCisgICAgaGFuZGxlQWZ0ZXJTaWRlT2ZCbG9jayhiZWZvcmVFZGdlLCBhZnRl
ckVkZ2UsIG1hcmdpbkluZm8pOworfQorCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2tGbG93LmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJsb2NrRmxvdy5oCShyZXZpc2lvbiAxNTUz
NjUpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2tGbG93LmgJKHdvcmtp
bmcgY29weSkKQEAgLTMzLDYgKzMzLDIwIEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIH5SZW5kZXJC
bG9ja0Zsb3coKTsKICAgICAKICAgICB2aXJ0dWFsIGJvb2wgaXNSZW5kZXJCbG9ja0Zsb3coKSBj
b25zdCBPVkVSUklERSBGSU5BTCB7IHJldHVybiB0cnVlOyB9CisgICAgCisgICAgdmlydHVhbCB2
b2lkIGxheW91dEJsb2NrKGJvb2wgcmVsYXlvdXRDaGlsZHJlbiwgTGF5b3V0VW5pdCBwYWdlTG9n
aWNhbEhlaWdodCA9IDApIE9WRVJSSURFOworICAgIAorcHJvdGVjdGVkOgorICAgIC8vIFRoaXMg
bWV0aG9kIGlzIGNhbGxlZCBhdCB0aGUgc3RhcnQgb2YgbGF5b3V0IHRvIHdpcGUgYXdheSBhbGwg
b2YgdGhlIGZsb2F0cyBpbiBvdXIgZmxvYXRpbmcgb2JqZWN0cyBsaXN0LiBJdCBhbHNvCisgICAg
Ly8gcmVwb3B1bGF0ZXMgdGhlIGxpc3Qgd2l0aCBhbnkgZmxvYXRzIHRoYXQgaW50cnVkZSBmcm9t
IHByZXZpb3VzIHNpYmxpbmdzIG9yIHBhcmVudHMuIEZsb2F0cyB0aGF0IHdlcmUgYWRkZWQgYnkK
KyAgICAvLyBkZXNjZW5kYW50cyBhcmUgZ29uZSB3aGVuIHRoaXMgY2FsbCBjb21wbGV0ZXMgYW5k
IHdpbGwgZ2V0IGFkZGVkIGJhY2sgbGF0ZXIgb24gYWZ0ZXIgdGhlIGNoaWxkcmVuIGhhdmUgZ290
dGVuCisgICAgLy8gYSByZWxheW91dC4KKyAgICB2b2lkIGNsZWFyRmxvYXRzKCk7CisKKyAgICAv
LyBSZW5kZXJCbG9ja0Zsb3cgYWx3YXlzIGNvbnRhaW5zIGVpdGhlciBsaW5lcyBvciBwYXJhZ3Jh
cGhzLiBXaGVuIHRoZSBjaGlsZHJlbiBhcmUgYWxsIGJsb2NrcyAoZS5nLiBwYXJhZ3JhcGhzKSwg
d2UgY2FsbCBsYXlvdXRCbG9ja0NoaWxkcmVuLgorICAgIC8vIFdoZW4gdGhlIGNoaWxkcmVuIGFy
ZSBhcmUgYWxsIGlubGluZSAoZS5nLiwgbGluZXMpLCB3ZSBjYWxsIGxheW91dElubGluZUNoaWxk
cmVuLgorICAgIHZvaWQgbGF5b3V0QmxvY2tDaGlsZHJlbihib29sIHJlbGF5b3V0Q2hpbGRyZW4s
IExheW91dFVuaXQmIG1heEZsb2F0TG9naWNhbEJvdHRvbSk7CisgICAgdm9pZCBsYXlvdXRJbmxp
bmVDaGlsZHJlbihib29sIHJlbGF5b3V0Q2hpbGRyZW4sIExheW91dFVuaXQmIHJlcGFpbnRMb2dp
Y2FsVG9wLCBMYXlvdXRVbml0JiByZXBhaW50TG9naWNhbEJvdHRvbSk7CiB9OwogCiBpbmxpbmUg
UmVuZGVyQmxvY2tGbG93JiB0b1JlbmRlckJsb2NrRmxvdyhSZW5kZXJPYmplY3QmIG9iamVjdCkK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCbG9ja0xpbmVMYXlvdXQuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCbG9ja0xpbmVM
YXlvdXQuY3BwCShyZXZpc2lvbiAxNTUzNjUpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVyQmxvY2tMaW5lTGF5b3V0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjEwOSw3ICsyMTA5
LDcgQEAgdm9pZCBSZW5kZXJCbG9jazo6cmVwYWludERpcnR5RmxvYXRzKFZlYwogICAgIH0KIH0K
IAotdm9pZCBSZW5kZXJCbG9jazo6bGF5b3V0SW5saW5lQ2hpbGRyZW4oYm9vbCByZWxheW91dENo
aWxkcmVuLCBMYXlvdXRVbml0JiByZXBhaW50TG9naWNhbFRvcCwgTGF5b3V0VW5pdCYgcmVwYWlu
dExvZ2ljYWxCb3R0b20pCit2b2lkIFJlbmRlckJsb2NrRmxvdzo6bGF5b3V0SW5saW5lQ2hpbGRy
ZW4oYm9vbCByZWxheW91dENoaWxkcmVuLCBMYXlvdXRVbml0JiByZXBhaW50TG9naWNhbFRvcCwg
TGF5b3V0VW5pdCYgcmVwYWludExvZ2ljYWxCb3R0b20pCiB7CiAgICAgc2V0TG9naWNhbEhlaWdo
dChib3JkZXJBbmRQYWRkaW5nQmVmb3JlKCkpOwogICAgIApJbmRleDogU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdUZXh0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1RleHQuY3BwCShyZXZpc2lvbiAxNTUzNjUpCisr
KyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1RleHQuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC00MTQsNyArNDE0LDEwIEBAIHZvaWQgUmVuZGVyU1ZHVGV4dDo6bGF5b3V0KCkK
ICAgICAvLyBGSVhNRTogV2UgbmVlZCB0byBmaW5kIGEgd2F5IHRvIG9ubHkgbGF5b3V0IHRoZSBj
aGlsZCBib3hlcywgaWYgbmVlZGVkLgogICAgIEZsb2F0UmVjdCBvbGRCb3VuZGFyaWVzID0gb2Jq
ZWN0Qm91bmRpbmdCb3goKTsKICAgICBBU1NFUlQoY2hpbGRyZW5JbmxpbmUoKSk7Ci0gICAgZm9y
Y2VMYXlvdXRJbmxpbmVDaGlsZHJlbigpOworICAgIExheW91dFVuaXQgcmVwYWludExvZ2ljYWxU
b3AgPSAwOworICAgIExheW91dFVuaXQgcmVwYWludExvZ2ljYWxCb3R0b20gPSAwOworICAgIGNs
ZWFyRmxvYXRzKCk7CisgICAgbGF5b3V0SW5saW5lQ2hpbGRyZW4odHJ1ZSwgcmVwYWludExvZ2lj
YWxUb3AsIHJlcGFpbnRMb2dpY2FsQm90dG9tKTsKIAogICAgIGlmIChtX25lZWRzUmVvcmRlcmlu
ZykKICAgICAgICAgbV9uZWVkc1Jlb3JkZXJpbmcgPSBmYWxzZTsK
</data>
<flag name="review"
          id="233118"
          type_id="1"
          status="-"
          setter="hyatt"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>211068</attachid>
            <date>2013-09-09 12:51:36 -0700</date>
            <delta_ts>2013-09-09 12:58:54 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>patch.txt</filename>
            <type>text/plain</type>
            <size>53776</size>
            <attacher name="Dave Hyatt">hyatt</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDE1NTM3MykKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDU5IEBACisyMDEzLTA5LTA5ICBEYXZpZCBI
eWF0dCAgPGh5YXR0QGFwcGxlLmNvbT4KKworICAgICAgICBNb3ZlIGxheW91dEJsb2NrIGFuZCBs
YXlvdXRCbG9ja0NoaWxkcmVuIGludG8gUmVuZGVyQmxvY2tGbG93CisgICAgICAgIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMjEwMzYKKworICAgICAgICBSZXZpZXdl
ZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBNb3ZlIGxheW91dEJsb2NrIGludG8gUmVu
ZGVyQmxvY2tGbG93IGFuZCBtYWtlIHRoZSBiYXNlIGNsYXNzIHZlcnNpb24gb2YKKyAgICAgICAg
dGhlIG1ldGhvZCBBU1NFUlRfTk9UX1JFQUNIRUQuIEJlZ2luIHRoZSBwcm9jZXNzIG9mIG1vdmlu
ZyBibG9jayBsYXlvdXQgCisgICAgICAgIGludG8gUmVuZGVyQmxvY2tGbG93IGJ5IHB1dHRpbmcg
bGF5b3V0QmxvY2tDaGlsZHJlbiB0aGVyZSBhcyB3ZWxsLgorICAgICAgICAKKyAgICAgICAgVGhp
cyBwYXRjaCBhbHNvIHB1dHMgY2xlYXJGbG9hdHMgaW50byBSZW5kZXJCbG9ja0Zsb3cgYW5kIGp1
c3QgZGl0Y2hlcyB0aGUKKyAgICAgICAgU1ZHLXNwZWNpZmljIGZvcmNlTGF5b3V0SW5saW5lQ2hp
bGRyZW4gYnkgbGV0dGluZyBSZW5kZXJTVkdUZXh0IGRvIHdoYXQgaXQKKyAgICAgICAgbmVlZHMg
aW4gaXRzIG93biBmaWxlLgorCisgICAgICAgIENvbnZlcnQgUmVuZGVyTGlzdEJveCB0byBiZSBh
IFJlbmRlckJsb2NrRmxvdywgc2luY2UgdGhpcyBpcyBuZWNlc3NhcnkgZm9yIGl0CisgICAgICAg
IHRvIGdldCB0aGUgY29ycmVjdCBsYXlvdXRCbG9jayBtZXRob2QuCisgICAgICAgIAorICAgICAg
ICBQYXRjaCBSZW5kZXJSZWdpb24gdG8gY2FsbCBSZW5kZXJCbG9ja0Zsb3c6OmxheW91dEJsb2Nr
IHJhdGhlciB0aGFuIFJlbmRlckJsb2NrOjpsYXlvdXRCbG9jay4KKyAgICAgICAgCisgICAgICAg
IEZpeCBydW4taW5zIHNvIHRoYXQgdGhleSBjcmVhdGUgYmxvY2sgZmxvd3MgcmF0aGVyIHRoYW4g
YmxvY2tzLCBhbmQgcmVzdHJpY3QgcnVuLWlucyB0bworICAgICAgICBvbmx5IGJlIGJsb2NrIGZs
b3dzLgorCisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckJsb2NrLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OlJlbmRlckJsb2NrOjpsYXlvdXRCbG9jayk6CisgICAgICAgIChXZWJDb3JlOjpSZW5k
ZXJCbG9jazo6Y3JlYXRlUmVwbGFjZW1lbnRSdW5Jbik6CisgICAgICAgIChXZWJDb3JlOjpSZW5k
ZXJCbG9jazo6bW92ZVJ1bkluVW5kZXJTaWJsaW5nQmxvY2tJZk5lZWRlZCk6CisgICAgICAgICog
cmVuZGVyaW5nL1JlbmRlckJsb2NrLmg6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckJsb2Nr
Rmxvdy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCbG9ja0Zsb3c6OmNsZWFyRmxvYXRz
KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJsb2NrRmxvdzo6bGF5b3V0QmxvY2spOgorICAg
ICAgICAoV2ViQ29yZTo6UmVuZGVyQmxvY2tGbG93OjpsYXlvdXRCbG9ja0NoaWxkcmVuKToKKyAg
ICAgICAgKiByZW5kZXJpbmcvUmVuZGVyQmxvY2tGbG93Lmg6CisgICAgICAgICogcmVuZGVyaW5n
L1JlbmRlckJsb2NrTGluZUxheW91dC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCbG9j
a0Zsb3c6OmxheW91dElubGluZUNoaWxkcmVuKToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVy
TGlzdEJveC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMaXN0Qm94OjpSZW5kZXJMaXN0
Qm94KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxpc3RCb3g6OmxheW91dCk6CisgICAgICAg
IChXZWJDb3JlOjpSZW5kZXJMaXN0Qm94OjpwYWludE9iamVjdCk6CisgICAgICAgIChXZWJDb3Jl
OjpSZW5kZXJMaXN0Qm94OjphZGRGb2N1c1JpbmdSZWN0cyk6CisgICAgICAgIChXZWJDb3JlOjpS
ZW5kZXJMaXN0Qm94Ojpub2RlQXRQb2ludCk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckxp
c3RCb3guaDoKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyUmVnaW9uLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OlJlbmRlclJlZ2lvbjo6cGFpbnRPYmplY3QpOgorICAgICAgICAoV2ViQ29yZTo6
UmVuZGVyUmVnaW9uOjpzdHlsZURpZENoYW5nZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJS
ZWdpb246OmxheW91dEJsb2NrKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclJlZ2lvbjo6aW5z
ZXJ0ZWRJbnRvVHJlZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJSZWdpb246OndpbGxCZVJl
bW92ZWRGcm9tVHJlZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJSZWdpb246OmNvbXB1dGVJ
bnRyaW5zaWNMb2dpY2FsV2lkdGhzKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclJlZ2lvbjo6
Y29tcHV0ZVByZWZlcnJlZExvZ2ljYWxXaWR0aHMpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVy
UmVnaW9uOjp1cGRhdGVMb2dpY2FsSGVpZ2h0KToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVy
VGV4dENvbnRyb2xTaW5nbGVMaW5lLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRleHRD
b250cm9sU2luZ2xlTGluZTo6bGF5b3V0KToKKyAgICAgICAgKiByZW5kZXJpbmcvc3ZnL1JlbmRl
clNWR1RleHQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU1ZHVGV4dDo6bGF5b3V0KToK
KwogMjAxMy0wOS0wOSAgQW50dGkgS29pdmlzdG8gIDxhbnR0aUBhcHBsZS5jb20+CiAKICAgICAg
ICAgTWFrZSBSZW5kZXJWaWV3IGFub255bW91cwpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlckJsb2NrLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvUmVuZGVyQmxvY2suY3BwCShyZXZpc2lvbiAxNTUzNjYpCisrKyBTb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvUmVuZGVyQmxvY2suY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNjMwLDE3MiArMTYz
MCw5IEBAIGJvb2wgUmVuZGVyQmxvY2s6OnJlbGF5b3V0VG9Bdm9pZFdpZG93cygKICAgICByZXR1
cm4gdHJ1ZTsKIH0KIAotdm9pZCBSZW5kZXJCbG9jazo6bGF5b3V0QmxvY2soYm9vbCByZWxheW91
dENoaWxkcmVuLCBMYXlvdXRVbml0IHBhZ2VMb2dpY2FsSGVpZ2h0KQordm9pZCBSZW5kZXJCbG9j
azo6bGF5b3V0QmxvY2soYm9vbCwgTGF5b3V0VW5pdCkKIHsKLSAgICBBU1NFUlQobmVlZHNMYXlv
dXQoKSk7Ci0KLSAgICBpZiAoaXNJbmxpbmUoKSAmJiAhaXNJbmxpbmVCbG9ja09ySW5saW5lVGFi
bGUoKSkgLy8gSW5saW5lIDxmb3JtPnMgaW5zaWRlIHZhcmlvdXMgdGFibGUgZWxlbWVudHMgY2Fu
Ci0gICAgICAgIHJldHVybjsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8v
IGNhdXNlIHVzIHRvIGNvbWUgaW4gaGVyZS4gIEp1c3QgYmFpbC4KLQotICAgIGlmICghcmVsYXlv
dXRDaGlsZHJlbiAmJiBzaW1wbGlmaWVkTGF5b3V0KCkpCi0gICAgICAgIHJldHVybjsKLQotICAg
IExheW91dFJlcGFpbnRlciByZXBhaW50ZXIoKnRoaXMsIGNoZWNrRm9yUmVwYWludER1cmluZ0xh
eW91dCgpKTsKLQotICAgIGlmICh1cGRhdGVMb2dpY2FsV2lkdGhBbmRDb2x1bW5XaWR0aCgpKQot
ICAgICAgICByZWxheW91dENoaWxkcmVuID0gdHJ1ZTsKLQotICAgIGNsZWFyRmxvYXRzKCk7Ci0K
LSAgICBMYXlvdXRVbml0IHByZXZpb3VzSGVpZ2h0ID0gbG9naWNhbEhlaWdodCgpOwotICAgIC8v
IEZJWE1FOiBzaG91bGQgdGhpcyBzdGFydCBvdXQgYXMgYm9yZGVyQW5kUGFkZGluZ0xvZ2ljYWxI
ZWlnaHQoKSArIHNjcm9sbGJhckxvZ2ljYWxIZWlnaHQoKSwKLSAgICAvLyBmb3IgY29uc2lzdGVu
Y3kgd2l0aCBvdGhlciByZW5kZXIgY2xhc3Nlcz8KLSAgICBzZXRMb2dpY2FsSGVpZ2h0KDApOwot
Ci0gICAgYm9vbCBwYWdlTG9naWNhbEhlaWdodENoYW5nZWQgPSBmYWxzZTsKLSAgICBib29sIGhh
c1NwZWNpZmllZFBhZ2VMb2dpY2FsSGVpZ2h0ID0gZmFsc2U7Ci0gICAgY2hlY2tGb3JQYWdpbmF0
aW9uTG9naWNhbEhlaWdodENoYW5nZShwYWdlTG9naWNhbEhlaWdodCwgcGFnZUxvZ2ljYWxIZWln
aHRDaGFuZ2VkLCBoYXNTcGVjaWZpZWRQYWdlTG9naWNhbEhlaWdodCk7Ci0KLSAgICBSZW5kZXJT
dHlsZSogc3R5bGVUb1VzZSA9IHN0eWxlKCk7Ci0gICAgTGF5b3V0U3RhdGVNYWludGFpbmVyIHN0
YXRlUHVzaGVyKCZ2aWV3KCksIHRoaXMsIGxvY2F0aW9uT2Zmc2V0KCksIGhhc0NvbHVtbnMoKSB8
fCBoYXNUcmFuc2Zvcm0oKSB8fCBoYXNSZWZsZWN0aW9uKCkgfHwgc3R5bGVUb1VzZS0+aXNGbGlw
cGVkQmxvY2tzV3JpdGluZ01vZGUoKSwgcGFnZUxvZ2ljYWxIZWlnaHQsIHBhZ2VMb2dpY2FsSGVp
Z2h0Q2hhbmdlZCwgY29sdW1uSW5mbygpKTsKLQotICAgIC8vIFJlZ2lvbnMgY2hhbmdpbmcgd2lk
dGhzIGNhbiBmb3JjZSB1cyB0byByZWxheW91dCBvdXIgY2hpbGRyZW4uCi0gICAgUmVuZGVyRmxv
d1RocmVhZCogZmxvd1RocmVhZCA9IGZsb3dUaHJlYWRDb250YWluaW5nQmxvY2soKTsKLSAgICBp
ZiAobG9naWNhbFdpZHRoQ2hhbmdlZEluUmVnaW9ucyhmbG93VGhyZWFkKSkKLSAgICAgICAgcmVs
YXlvdXRDaGlsZHJlbiA9IHRydWU7Ci0gICAgaWYgKHVwZGF0ZVNoYXBlc0JlZm9yZUJsb2NrTGF5
b3V0KCkpCi0gICAgICAgIHJlbGF5b3V0Q2hpbGRyZW4gPSB0cnVlOwotCi0gICAgLy8gV2UgdXNl
IGZvdXIgdmFsdWVzLCBtYXhUb3BQb3MsIG1heFRvcE5lZywgbWF4Qm90dG9tUG9zLCBhbmQgbWF4
Qm90dG9tTmVnLCB0byB0cmFjawotICAgIC8vIG91ciBjdXJyZW50IG1heGltYWwgcG9zaXRpdmUg
YW5kIG5lZ2F0aXZlIG1hcmdpbnMuICBUaGVzZSB2YWx1ZXMgYXJlIHVzZWQgd2hlbiB3ZQotICAg
IC8vIGFyZSBjb2xsYXBzZWQgd2l0aCBhZGphY2VudCBibG9ja3MsIHNvIGZvciBleGFtcGxlLCBp
ZiB5b3UgaGF2ZSBibG9jayBBIGFuZCBCCi0gICAgLy8gY29sbGFwc2luZyB0b2dldGhlciwgdGhl
biB5b3UnZCB0YWtlIHRoZSBtYXhpbWFsIHBvc2l0aXZlIG1hcmdpbiBmcm9tIGJvdGggQSBhbmQg
QgotICAgIC8vIGFuZCBzdWJ0cmFjdCBpdCBmcm9tIHRoZSBtYXhpbWFsIG5lZ2F0aXZlIG1hcmdp
biBmcm9tIGJvdGggQSBhbmQgQiB0byBnZXQgdGhlCi0gICAgLy8gdHJ1ZSBjb2xsYXBzZWQgbWFy
Z2luLiAgVGhpcyBhbGdvcml0aG0gaXMgcmVjdXJzaXZlLCBzbyB3aGVuIHdlIGZpbmlzaCBsYXlv
dXQoKQotICAgIC8vIG91ciBibG9jayBrbm93cyBpdHMgY3VycmVudCBtYXhpbWFsIHBvc2l0aXZl
L25lZ2F0aXZlIHZhbHVlcy4KLSAgICAvLwotICAgIC8vIFN0YXJ0IG91dCBieSBzZXR0aW5nIG91
ciBtYXJnaW4gdmFsdWVzIHRvIG91ciBjdXJyZW50IG1hcmdpbnMuICBUYWJsZSBjZWxscyBoYXZl
Ci0gICAgLy8gbm8gbWFyZ2lucywgc28gd2UgZG9uJ3QgZmlsbCBpbiB0aGUgdmFsdWVzIGZvciB0
YWJsZSBjZWxscy4KLSAgICBib29sIGlzQ2VsbCA9IGlzVGFibGVDZWxsKCk7Ci0gICAgaWYgKCFp
c0NlbGwpIHsKLSAgICAgICAgaW5pdE1heE1hcmdpblZhbHVlcygpOwotICAgICAgICAKLSAgICAg
ICAgc2V0SGFzTWFyZ2luQmVmb3JlUXVpcmsoc3R5bGVUb1VzZS0+aGFzTWFyZ2luQmVmb3JlUXVp
cmsoKSk7Ci0gICAgICAgIHNldEhhc01hcmdpbkFmdGVyUXVpcmsoc3R5bGVUb1VzZS0+aGFzTWFy
Z2luQWZ0ZXJRdWlyaygpKTsKLSAgICAgICAgc2V0UGFnaW5hdGlvblN0cnV0KDApOwotICAgIH0K
LQotICAgIExheW91dFVuaXQgcmVwYWludExvZ2ljYWxUb3AgPSAwOwotICAgIExheW91dFVuaXQg
cmVwYWludExvZ2ljYWxCb3R0b20gPSAwOwotICAgIExheW91dFVuaXQgbWF4RmxvYXRMb2dpY2Fs
Qm90dG9tID0gMDsKLSAgICBpZiAoIWZpcnN0Q2hpbGQoKSAmJiAhaXNBbm9ueW1vdXNCbG9jaygp
KQotICAgICAgICBzZXRDaGlsZHJlbklubGluZSh0cnVlKTsKLSAgICBpZiAoY2hpbGRyZW5Jbmxp
bmUoKSkKLSAgICAgICAgbGF5b3V0SW5saW5lQ2hpbGRyZW4ocmVsYXlvdXRDaGlsZHJlbiwgcmVw
YWludExvZ2ljYWxUb3AsIHJlcGFpbnRMb2dpY2FsQm90dG9tKTsKLSAgICBlbHNlCi0gICAgICAg
IGxheW91dEJsb2NrQ2hpbGRyZW4ocmVsYXlvdXRDaGlsZHJlbiwgbWF4RmxvYXRMb2dpY2FsQm90
dG9tKTsKLQotICAgIC8vIEV4cGFuZCBvdXIgaW50cmluc2ljIGhlaWdodCB0byBlbmNvbXBhc3Mg
ZmxvYXRzLgotICAgIExheW91dFVuaXQgdG9BZGQgPSBib3JkZXJBbmRQYWRkaW5nQWZ0ZXIoKSAr
IHNjcm9sbGJhckxvZ2ljYWxIZWlnaHQoKTsKLSAgICBpZiAobG93ZXN0RmxvYXRMb2dpY2FsQm90
dG9tKCkgPiAobG9naWNhbEhlaWdodCgpIC0gdG9BZGQpICYmIGV4cGFuZHNUb0VuY2xvc2VPdmVy
aGFuZ2luZ0Zsb2F0cygpKQotICAgICAgICBzZXRMb2dpY2FsSGVpZ2h0KGxvd2VzdEZsb2F0TG9n
aWNhbEJvdHRvbSgpICsgdG9BZGQpOwotICAgIAotICAgIGlmIChyZWxheW91dEZvclBhZ2luYXRp
b24oaGFzU3BlY2lmaWVkUGFnZUxvZ2ljYWxIZWlnaHQsIHBhZ2VMb2dpY2FsSGVpZ2h0LCBzdGF0
ZVB1c2hlcikgfHwgcmVsYXlvdXRUb0F2b2lkV2lkb3dzKHN0YXRlUHVzaGVyKSkgewotICAgICAg
ICBBU1NFUlQoIXNob3VsZEJyZWFrQXRMaW5lVG9Bdm9pZFdpZG93KCkpOwotICAgICAgICByZXR1
cm47Ci0gICAgfQotCi0gICAgLy8gQ2FsY3VsYXRlIG91ciBuZXcgaGVpZ2h0LgotICAgIExheW91
dFVuaXQgb2xkSGVpZ2h0ID0gbG9naWNhbEhlaWdodCgpOwotICAgIExheW91dFVuaXQgb2xkQ2xp
ZW50QWZ0ZXJFZGdlID0gY2xpZW50TG9naWNhbEJvdHRvbSgpOwotCi0gICAgLy8gQmVmb3JlIHVw
ZGF0aW5nIHRoZSBmaW5hbCBzaXplIG9mIHRoZSBmbG93IHRocmVhZCBtYWtlIHN1cmUgYSBmb3Jj
ZWQgYnJlYWsgaXMgYXBwbGllZCBhZnRlciB0aGUgY29udGVudC4KLSAgICAvLyBUaGlzIGVuc3Vy
ZXMgdGhlIHNpemUgaW5mb3JtYXRpb24gaXMgY29ycmVjdGx5IGNvbXB1dGVkIGZvciB0aGUgbGFz
dCBhdXRvLWhlaWdodCByZWdpb24gcmVjZWl2aW5nIGNvbnRlbnQuCi0gICAgaWYgKGlzUmVuZGVy
Rmxvd1RocmVhZCgpKQotICAgICAgICB0b1JlbmRlckZsb3dUaHJlYWQodGhpcyktPmFwcGx5QnJl
YWtBZnRlckNvbnRlbnQob2xkQ2xpZW50QWZ0ZXJFZGdlKTsKLQotICAgIHVwZGF0ZUxvZ2ljYWxI
ZWlnaHQoKTsKLSAgICBMYXlvdXRVbml0IG5ld0hlaWdodCA9IGxvZ2ljYWxIZWlnaHQoKTsKLSAg
ICBpZiAob2xkSGVpZ2h0ICE9IG5ld0hlaWdodCkgewotICAgICAgICBpZiAob2xkSGVpZ2h0ID4g
bmV3SGVpZ2h0ICYmIG1heEZsb2F0TG9naWNhbEJvdHRvbSA+IG5ld0hlaWdodCAmJiAhY2hpbGRy
ZW5JbmxpbmUoKSkgewotICAgICAgICAgICAgLy8gT25lIG9mIG91ciBjaGlsZHJlbidzIGZsb2F0
cyBtYXkgaGF2ZSBiZWNvbWUgYW4gb3ZlcmhhbmdpbmcgZmxvYXQgZm9yIHVzLiBXZSBuZWVkIHRv
IGxvb2sgZm9yIGl0LgotICAgICAgICAgICAgZm9yIChSZW5kZXJPYmplY3QqIGNoaWxkID0gZmly
c3RDaGlsZCgpOyBjaGlsZDsgY2hpbGQgPSBjaGlsZC0+bmV4dFNpYmxpbmcoKSkgewotICAgICAg
ICAgICAgICAgIGlmIChjaGlsZC0+aXNSZW5kZXJCbG9ja0Zsb3coKSAmJiAhY2hpbGQtPmlzRmxv
YXRpbmdPck91dE9mRmxvd1Bvc2l0aW9uZWQoKSkgewotICAgICAgICAgICAgICAgICAgICBSZW5k
ZXJCbG9jayogYmxvY2sgPSB0b1JlbmRlckJsb2NrKGNoaWxkKTsKLSAgICAgICAgICAgICAgICAg
ICAgaWYgKGJsb2NrLT5sb3dlc3RGbG9hdExvZ2ljYWxCb3R0b20oKSArIGJsb2NrLT5sb2dpY2Fs
VG9wKCkgPiBuZXdIZWlnaHQpCi0gICAgICAgICAgICAgICAgICAgICAgICBhZGRPdmVyaGFuZ2lu
Z0Zsb2F0cyhibG9jaywgZmFsc2UpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0K
LSAgICAgICAgfQotICAgIH0KLQotICAgIGJvb2wgaGVpZ2h0Q2hhbmdlZCA9IChwcmV2aW91c0hl
aWdodCAhPSBuZXdIZWlnaHQpOwotICAgIGlmIChoZWlnaHRDaGFuZ2VkKQotICAgICAgICByZWxh
eW91dENoaWxkcmVuID0gdHJ1ZTsKLQotICAgIGxheW91dFBvc2l0aW9uZWRPYmplY3RzKHJlbGF5
b3V0Q2hpbGRyZW4gfHwgaXNSb290KCkpOwotCi0gICAgdXBkYXRlU2hhcGVzQWZ0ZXJCbG9ja0xh
eW91dChoZWlnaHRDaGFuZ2VkKTsKLQotICAgIC8vIEFkZCBvdmVyZmxvdyBmcm9tIGNoaWxkcmVu
ICh1bmxlc3Mgd2UncmUgbXVsdGktY29sdW1uLCBzaW5jZSBpbiB0aGF0IGNhc2UgYWxsIG91ciBj
aGlsZCBvdmVyZmxvdyBpcyBjbGlwcGVkIGFueXdheSkuCi0gICAgY29tcHV0ZU92ZXJmbG93KG9s
ZENsaWVudEFmdGVyRWRnZSk7Ci0gICAgCi0gICAgc3RhdGVQdXNoZXIucG9wKCk7Ci0KLSAgICBm
aXRCb3JkZXJUb0xpbmVzSWZOZWVkZWQoKTsKLQotICAgIGlmICh2aWV3KCkubGF5b3V0U3RhdGUo
KS0+bV9wYWdlTG9naWNhbEhlaWdodCkKLSAgICAgICAgc2V0UGFnZUxvZ2ljYWxPZmZzZXQodmll
dygpLmxheW91dFN0YXRlKCktPnBhZ2VMb2dpY2FsT2Zmc2V0KHRoaXMsIGxvZ2ljYWxUb3AoKSkp
OwotCi0gICAgdXBkYXRlTGF5ZXJUcmFuc2Zvcm0oKTsKLQotICAgIC8vIFVwZGF0ZSBvdXIgc2Ny
b2xsIGluZm9ybWF0aW9uIGlmIHdlJ3JlIG92ZXJmbG93OmF1dG8vc2Nyb2xsL2hpZGRlbiBub3cg
dGhhdCB3ZSBrbm93IGlmCi0gICAgLy8gd2Ugb3ZlcmZsb3cgb3Igbm90LgotICAgIHVwZGF0ZVNj
cm9sbEluZm9BZnRlckxheW91dCgpOwotCi0gICAgLy8gRklYTUU6IFRoaXMgcmVwYWludCBsb2dp
YyBzaG91bGQgYmUgbW92ZWQgaW50byBhIHNlcGFyYXRlIGhlbHBlciBmdW5jdGlvbiEKLSAgICAv
LyBSZXBhaW50IHdpdGggb3VyIG5ldyBib3VuZHMgaWYgdGhleSBhcmUgZGlmZmVyZW50IGZyb20g
b3VyIG9sZCBib3VuZHMuCi0gICAgYm9vbCBkaWRGdWxsUmVwYWludCA9IHJlcGFpbnRlci5yZXBh
aW50QWZ0ZXJMYXlvdXQoKTsKLSAgICBpZiAoIWRpZEZ1bGxSZXBhaW50ICYmIHJlcGFpbnRMb2dp
Y2FsVG9wICE9IHJlcGFpbnRMb2dpY2FsQm90dG9tICYmIChzdHlsZVRvVXNlLT52aXNpYmlsaXR5
KCkgPT0gVklTSUJMRSB8fCBlbmNsb3NpbmdMYXllcigpLT5oYXNWaXNpYmxlQ29udGVudCgpKSkg
ewotICAgICAgICAvLyBGSVhNRTogV2UgY291bGQgdGlnaHRlbiB1cCB0aGUgbGVmdCBhbmQgcmln
aHQgaW52YWxpZGF0aW9uIHBvaW50cyBpZiB3ZSBsZXQgbGF5b3V0SW5saW5lQ2hpbGRyZW4gZmls
bCB0aGVtIGluIGJhc2VkIG9mZiB0aGUgcGFydGljdWxhciBsaW5lcwotICAgICAgICAvLyBpdCBo
YWQgdG8gbGF5IG91dC4gIFdlIHdvdWxkbid0IG5lZWQgdGhlIGhhc092ZXJmbG93Q2xpcCgpIGhh
Y2sgaW4gdGhhdCBjYXNlIGVpdGhlci4KLSAgICAgICAgTGF5b3V0VW5pdCByZXBhaW50TG9naWNh
bExlZnQgPSBsb2dpY2FsTGVmdFZpc3VhbE92ZXJmbG93KCk7Ci0gICAgICAgIExheW91dFVuaXQg
cmVwYWludExvZ2ljYWxSaWdodCA9IGxvZ2ljYWxSaWdodFZpc3VhbE92ZXJmbG93KCk7Ci0gICAg
ICAgIGlmIChoYXNPdmVyZmxvd0NsaXAoKSkgewotICAgICAgICAgICAgLy8gSWYgd2UgaGF2ZSBj
bGlwcGVkIG92ZXJmbG93LCB3ZSBzaG91bGQgdXNlIGxheW91dCBvdmVyZmxvdyBhcyB3ZWxsLCBz
aW5jZSB2aXN1YWwgb3ZlcmZsb3cgZnJvbSBsaW5lcyBkaWRuJ3QgcHJvcGFnYXRlIHRvIG91ciBi
bG9jaydzIG92ZXJmbG93LgotICAgICAgICAgICAgLy8gTm90ZSB0aGUgb2xkIGNvZGUgZGlkIHRo
aXMgYXMgd2VsbCBidXQgZXZlbiBmb3Igb3ZlcmZsb3c6dmlzaWJsZS4gIFRoZSBhZGRpdGlvbiBv
ZiBoYXNPdmVyZmxvd0NsaXAoKSBhdCBsZWFzdCB0aWdodGVucyB1cCB0aGUgaGFjayBhIGJpdC4K
LSAgICAgICAgICAgIC8vIGxheW91dElubGluZUNoaWxkcmVuIHNob3VsZCBiZSBwYXRjaGVkIHRv
IGNvbXB1dGUgdGhlIGVudGlyZSByZXBhaW50IHJlY3QuCi0gICAgICAgICAgICByZXBhaW50TG9n
aWNhbExlZnQgPSBtaW4ocmVwYWludExvZ2ljYWxMZWZ0LCBsb2dpY2FsTGVmdExheW91dE92ZXJm
bG93KCkpOwotICAgICAgICAgICAgcmVwYWludExvZ2ljYWxSaWdodCA9IG1heChyZXBhaW50TG9n
aWNhbFJpZ2h0LCBsb2dpY2FsUmlnaHRMYXlvdXRPdmVyZmxvdygpKTsKLSAgICAgICAgfQotICAg
ICAgICAKLSAgICAgICAgTGF5b3V0UmVjdCByZXBhaW50UmVjdDsKLSAgICAgICAgaWYgKGlzSG9y
aXpvbnRhbFdyaXRpbmdNb2RlKCkpCi0gICAgICAgICAgICByZXBhaW50UmVjdCA9IExheW91dFJl
Y3QocmVwYWludExvZ2ljYWxMZWZ0LCByZXBhaW50TG9naWNhbFRvcCwgcmVwYWludExvZ2ljYWxS
aWdodCAtIHJlcGFpbnRMb2dpY2FsTGVmdCwgcmVwYWludExvZ2ljYWxCb3R0b20gLSByZXBhaW50
TG9naWNhbFRvcCk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIHJlcGFpbnRSZWN0ID0gTGF5
b3V0UmVjdChyZXBhaW50TG9naWNhbFRvcCwgcmVwYWludExvZ2ljYWxMZWZ0LCByZXBhaW50TG9n
aWNhbEJvdHRvbSAtIHJlcGFpbnRMb2dpY2FsVG9wLCByZXBhaW50TG9naWNhbFJpZ2h0IC0gcmVw
YWludExvZ2ljYWxMZWZ0KTsKLQotICAgICAgICAvLyBUaGUgcmVwYWludCByZWN0IG1heSBiZSBz
cGxpdCBhY3Jvc3MgY29sdW1ucywgaW4gd2hpY2ggY2FzZSBhZGp1c3RSZWN0Rm9yQ29sdW1ucygp
IHdpbGwgcmV0dXJuIHRoZSB1bmlvbi4KLSAgICAgICAgYWRqdXN0UmVjdEZvckNvbHVtbnMocmVw
YWludFJlY3QpOwotCi0gICAgICAgIHJlcGFpbnRSZWN0LmluZmxhdGUobWF4aW1hbE91dGxpbmVT
aXplKFBhaW50UGhhc2VPdXRsaW5lKSk7Ci0gICAgICAgIAotICAgICAgICBpZiAoaGFzT3ZlcmZs
b3dDbGlwKCkpIHsKLSAgICAgICAgICAgIC8vIEFkanVzdCByZXBhaW50IHJlY3QgZm9yIHNjcm9s
bCBvZmZzZXQKLSAgICAgICAgICAgIHJlcGFpbnRSZWN0Lm1vdmUoLXNjcm9sbGVkQ29udGVudE9m
ZnNldCgpKTsKLQotICAgICAgICAgICAgLy8gRG9uJ3QgYWxsb3cgdGhpcyByZWN0IHRvIHNwaWxs
IG91dCBvZiBvdXIgb3ZlcmZsb3cgYm94LgotICAgICAgICAgICAgcmVwYWludFJlY3QuaW50ZXJz
ZWN0KExheW91dFJlY3QoTGF5b3V0UG9pbnQoKSwgc2l6ZSgpKSk7Ci0gICAgICAgIH0KLQotICAg
ICAgICAvLyBNYWtlIHN1cmUgdGhlIHJlY3QgaXMgc3RpbGwgbm9uLWVtcHR5IGFmdGVyIGludGVy
c2VjdGluZyBmb3Igb3ZlcmZsb3cgYWJvdmUKLSAgICAgICAgaWYgKCFyZXBhaW50UmVjdC5pc0Vt
cHR5KCkpIHsKLSAgICAgICAgICAgIHJlcGFpbnRSZWN0YW5nbGUocmVwYWludFJlY3QpOyAvLyBX
ZSBuZWVkIHRvIGRvIGEgcGFydGlhbCByZXBhaW50IG9mIG91ciBjb250ZW50LgotICAgICAgICAg
ICAgaWYgKGhhc1JlZmxlY3Rpb24oKSkKLSAgICAgICAgICAgICAgICByZXBhaW50UmVjdGFuZ2xl
KHJlZmxlY3RlZFJlY3QocmVwYWludFJlY3QpKTsKLSAgICAgICAgfQotICAgIH0KLQorICAgIEFT
U0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgIHNldE5lZWRzTGF5b3V0KGZhbHNlKTsKIH0KIApAQCAt
MjAxNyw4ICsxODU0LDggQEAgUmVuZGVyQm94TW9kZWxPYmplY3QqIFJlbmRlckJsb2NrOjpjcmVh
dAogICAgIEFTU0VSVChydW5Jbi0+bm9kZSgpKTsKIAogICAgIFJlbmRlckJveE1vZGVsT2JqZWN0
KiBuZXdSdW5JbiA9IDA7Ci0gICAgaWYgKCFydW5Jbi0+aXNSZW5kZXJCbG9jaygpKQotICAgICAg
ICBuZXdSdW5JbiA9IG5ldyAocmVuZGVyQXJlbmEoKSkgUmVuZGVyQmxvY2socnVuSW4tPm5vZGUo
KSk7CisgICAgaWYgKCFydW5Jbi0+aXNSZW5kZXJCbG9ja0Zsb3coKSkKKyAgICAgICAgbmV3UnVu
SW4gPSBuZXcgKHJlbmRlckFyZW5hKCkpIFJlbmRlckJsb2NrRmxvdyhydW5Jbi0+bm9kZSgpKTsK
ICAgICBlbHNlCiAgICAgICAgIG5ld1J1bkluID0gbmV3IChyZW5kZXJBcmVuYSgpKSBSZW5kZXJJ
bmxpbmUodG9FbGVtZW50KHJ1bkluLT5ub2RlKCkpKTsKIApAQCAtMjA0MCw3ICsxODc3LDcgQEAg
dm9pZCBSZW5kZXJCbG9jazo6bW92ZVJ1bkluVW5kZXJTaWJsaW5nQgogICAgICAgICByZXR1cm47
CiAKICAgICAvLyBGSVhNRTogV2UgZG9uJ3QgaGFuZGxlIG5vbi1ibG9jayBlbGVtZW50cyB3aXRo
IHJ1bi1pbiBmb3Igbm93LgotICAgIGlmICghcnVuSW4tPmlzUmVuZGVyQmxvY2soKSkKKyAgICBp
ZiAoIXJ1bkluLT5pc1JlbmRlckJsb2NrRmxvdygpKQogICAgICAgICByZXR1cm47CiAKICAgICAv
LyBGSVhNRTogV2UgZG9uJ3Qgc3VwcG9ydCBydW4taW5zIHdpdGggb3IgYXMgcGFydCBvZiBhIGNv
bnRpbnVhdGlvbgpAQCAtMjU5OCw2MSArMjQzNSw2IEBAIHZvaWQgUmVuZGVyQmxvY2s6OmRpcnR5
Rm9yTGF5b3V0RnJvbVBlcmMKICAgICB9CiB9CiAKLXZvaWQgUmVuZGVyQmxvY2s6OmxheW91dEJs
b2NrQ2hpbGRyZW4oYm9vbCByZWxheW91dENoaWxkcmVuLCBMYXlvdXRVbml0JiBtYXhGbG9hdExv
Z2ljYWxCb3R0b20pCi17Ci0gICAgZGlydHlGb3JMYXlvdXRGcm9tUGVyY2VudGFnZUhlaWdodERl
c2NlbmRhbnRzKCk7Ci0KLSAgICBMYXlvdXRVbml0IGJlZm9yZUVkZ2UgPSBib3JkZXJBbmRQYWRk
aW5nQmVmb3JlKCk7Ci0gICAgTGF5b3V0VW5pdCBhZnRlckVkZ2UgPSBib3JkZXJBbmRQYWRkaW5n
QWZ0ZXIoKSArIHNjcm9sbGJhckxvZ2ljYWxIZWlnaHQoKTsKLQotICAgIHNldExvZ2ljYWxIZWln
aHQoYmVmb3JlRWRnZSk7Ci0gICAgCi0gICAgLy8gTGF5IG91dCBvdXIgaHlwb3RoZXRpY2FsIGdy
aWQgbGluZSBhcyB0aG91Z2ggaXQgb2NjdXJzIGF0IHRoZSB0b3Agb2YgdGhlIGJsb2NrLgotICAg
IGlmICh2aWV3KCkubGF5b3V0U3RhdGUoKS0+bGluZUdyaWQoKSA9PSB0aGlzKQotICAgICAgICBs
YXlvdXRMaW5lR3JpZEJveCgpOwotCi0gICAgLy8gVGhlIG1hcmdpbiBzdHJ1Y3QgY2FjaGVzIGFs
bCBvdXIgY3VycmVudCBtYXJnaW4gY29sbGFwc2luZyBzdGF0ZS4gIFRoZSBjb21wYWN0IHN0cnVj
dCBjYWNoZXMgc3RhdGUgd2hlbiB3ZSBlbmNvdW50ZXIgY29tcGFjdHMsCi0gICAgTWFyZ2luSW5m
byBtYXJnaW5JbmZvKHRoaXMsIGJlZm9yZUVkZ2UsIGFmdGVyRWRnZSk7Ci0KLSAgICAvLyBGaWVs
ZHNldHMgbmVlZCB0byBmaW5kIHRoZWlyIGxlZ2VuZCBhbmQgcG9zaXRpb24gaXQgaW5zaWRlIHRo
ZSBib3JkZXIgb2YgdGhlIG9iamVjdC4KLSAgICAvLyBUaGUgbGVnZW5kIHRoZW4gZ2V0cyBza2lw
cGVkIGR1cmluZyBub3JtYWwgbGF5b3V0LiAgVGhlIHNhbWUgaXMgdHJ1ZSBmb3IgcnVieSB0ZXh0
LgotICAgIC8vIEl0IGRvZXNuJ3QgZ2V0IGluY2x1ZGVkIGluIHRoZSBub3JtYWwgbGF5b3V0IHBy
b2Nlc3MgYnV0IGlzIGluc3RlYWQgc2tpcHBlZC4KLSAgICBSZW5kZXJPYmplY3QqIGNoaWxkVG9F
eGNsdWRlID0gbGF5b3V0U3BlY2lhbEV4Y2x1ZGVkQ2hpbGQocmVsYXlvdXRDaGlsZHJlbik7Ci0K
LSAgICBMYXlvdXRVbml0IHByZXZpb3VzRmxvYXRMb2dpY2FsQm90dG9tID0gMDsKLSAgICBtYXhG
bG9hdExvZ2ljYWxCb3R0b20gPSAwOwotCi0gICAgUmVuZGVyQm94KiBuZXh0ID0gZmlyc3RDaGls
ZEJveCgpOwotCi0gICAgd2hpbGUgKG5leHQpIHsKLSAgICAgICAgUmVuZGVyQm94KiBjaGlsZCA9
IG5leHQ7Ci0gICAgICAgIG5leHQgPSBjaGlsZC0+bmV4dFNpYmxpbmdCb3goKTsKLQotICAgICAg
ICBpZiAoY2hpbGRUb0V4Y2x1ZGUgPT0gY2hpbGQpCi0gICAgICAgICAgICBjb250aW51ZTsgLy8g
U2tpcCB0aGlzIGNoaWxkLCBzaW5jZSBpdCB3aWxsIGJlIHBvc2l0aW9uZWQgYnkgdGhlIHNwZWNp
YWxpemVkIHN1YmNsYXNzIChmaWVsZHNldHMgYW5kIHJ1YnkgcnVucykuCi0KLSAgICAgICAgdXBk
YXRlQmxvY2tDaGlsZERpcnR5Qml0c0JlZm9yZUxheW91dChyZWxheW91dENoaWxkcmVuLCBjaGls
ZCk7Ci0KLSAgICAgICAgaWYgKGNoaWxkLT5pc091dE9mRmxvd1Bvc2l0aW9uZWQoKSkgewotICAg
ICAgICAgICAgY2hpbGQtPmNvbnRhaW5pbmdCbG9jaygpLT5pbnNlcnRQb3NpdGlvbmVkT2JqZWN0
KGNoaWxkKTsKLSAgICAgICAgICAgIGFkanVzdFBvc2l0aW9uZWRCbG9jayhjaGlsZCwgbWFyZ2lu
SW5mbyk7Ci0gICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgfQotICAgICAgICBpZiAoY2hp
bGQtPmlzRmxvYXRpbmcoKSkgewotICAgICAgICAgICAgaW5zZXJ0RmxvYXRpbmdPYmplY3QoY2hp
bGQpOwotICAgICAgICAgICAgYWRqdXN0RmxvYXRpbmdCbG9jayhtYXJnaW5JbmZvKTsKLSAgICAg
ICAgICAgIGNvbnRpbnVlOwotICAgICAgICB9Ci0KLSAgICAgICAgLy8gTGF5IG91dCB0aGUgY2hp
bGQuCi0gICAgICAgIGxheW91dEJsb2NrQ2hpbGQoY2hpbGQsIG1hcmdpbkluZm8sIHByZXZpb3Vz
RmxvYXRMb2dpY2FsQm90dG9tLCBtYXhGbG9hdExvZ2ljYWxCb3R0b20pOwotICAgIH0KLSAgICAK
LSAgICAvLyBOb3cgZG8gdGhlIGhhbmRsaW5nIG9mIHRoZSBib3R0b20gb2YgdGhlIGJsb2NrLCBh
ZGRpbmcgaW4gb3VyIGJvdHRvbSBib3JkZXIvcGFkZGluZyBhbmQKLSAgICAvLyBkZXRlcm1pbmlu
ZyB0aGUgY29ycmVjdCBjb2xsYXBzZWQgYm90dG9tIG1hcmdpbiBpbmZvcm1hdGlvbi4KLSAgICBo
YW5kbGVBZnRlclNpZGVPZkJsb2NrKGJlZm9yZUVkZ2UsIGFmdGVyRWRnZSwgbWFyZ2luSW5mbyk7
Ci19Ci0KIHZvaWQgUmVuZGVyQmxvY2s6OmxheW91dEJsb2NrQ2hpbGQoUmVuZGVyQm94KiBjaGls
ZCwgTWFyZ2luSW5mbyYgbWFyZ2luSW5mbywgTGF5b3V0VW5pdCYgcHJldmlvdXNGbG9hdExvZ2lj
YWxCb3R0b20sIExheW91dFVuaXQmIG1heEZsb2F0TG9naWNhbEJvdHRvbSkKIHsKICAgICBMYXlv
dXRVbml0IG9sZFBvc01hcmdpbkJlZm9yZSA9IG1heFBvc2l0aXZlTWFyZ2luQmVmb3JlKCk7CkBA
IC00NzQzLDE1MyArNDUyNSw2IEBAIHZvaWQgUmVuZGVyQmxvY2s6Om1hcmtMaW5lc0RpcnR5SW5C
bG9ja1IKICAgICB9CiB9CiAKLXZvaWQgUmVuZGVyQmxvY2s6OmNsZWFyRmxvYXRzKCkKLXsKLSAg
ICBpZiAobV9mbG9hdGluZ09iamVjdHMpCi0gICAgICAgIG1fZmxvYXRpbmdPYmplY3RzLT5zZXRI
b3Jpem9udGFsV3JpdGluZ01vZGUoaXNIb3Jpem9udGFsV3JpdGluZ01vZGUoKSk7Ci0KLSAgICBI
YXNoU2V0PFJlbmRlckJveCo+IG9sZEludHJ1ZGluZ0Zsb2F0U2V0OwotICAgIGlmICghY2hpbGRy
ZW5JbmxpbmUoKSAmJiBtX2Zsb2F0aW5nT2JqZWN0cykgewotICAgICAgICBjb25zdCBGbG9hdGlu
Z09iamVjdFNldCYgZmxvYXRpbmdPYmplY3RTZXQgPSBtX2Zsb2F0aW5nT2JqZWN0cy0+c2V0KCk7
Ci0gICAgICAgIEZsb2F0aW5nT2JqZWN0U2V0SXRlcmF0b3IgZW5kID0gZmxvYXRpbmdPYmplY3RT
ZXQuZW5kKCk7Ci0gICAgICAgIGZvciAoRmxvYXRpbmdPYmplY3RTZXRJdGVyYXRvciBpdCA9IGZs
b2F0aW5nT2JqZWN0U2V0LmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkgewotICAgICAgICAgICAg
RmxvYXRpbmdPYmplY3QqIGZsb2F0aW5nT2JqZWN0ID0gKml0OwotICAgICAgICAgICAgaWYgKCFm
bG9hdGluZ09iamVjdC0+aXNEZXNjZW5kYW50KCkpCi0gICAgICAgICAgICAgICAgb2xkSW50cnVk
aW5nRmxvYXRTZXQuYWRkKGZsb2F0aW5nT2JqZWN0LT5yZW5kZXJlcigpKTsKLSAgICAgICAgfQot
ICAgIH0KLQotICAgIC8vIElubGluZSBibG9ja3MgYXJlIGNvdmVyZWQgYnkgdGhlIGlzUmVwbGFj
ZWQoKSBjaGVjayBpbiB0aGUgYXZvaWRGbG9hdHMgbWV0aG9kLgotICAgIGlmIChhdm9pZHNGbG9h
dHMoKSB8fCBpc1Jvb3QoKSB8fCBpc1JlbmRlclZpZXcoKSB8fCBpc0Zsb2F0aW5nT3JPdXRPZkZs
b3dQb3NpdGlvbmVkKCkgfHwgaXNUYWJsZUNlbGwoKSkgewotICAgICAgICBpZiAobV9mbG9hdGlu
Z09iamVjdHMpIHsKLSAgICAgICAgICAgIGRlbGV0ZUFsbFZhbHVlcyhtX2Zsb2F0aW5nT2JqZWN0
cy0+c2V0KCkpOwotICAgICAgICAgICAgbV9mbG9hdGluZ09iamVjdHMtPmNsZWFyKCk7Ci0gICAg
ICAgIH0KLSAgICAgICAgaWYgKCFvbGRJbnRydWRpbmdGbG9hdFNldC5pc0VtcHR5KCkpCi0gICAg
ICAgICAgICBtYXJrQWxsRGVzY2VuZGFudHNXaXRoRmxvYXRzRm9yTGF5b3V0KCk7Ci0gICAgICAg
IHJldHVybjsKLSAgICB9Ci0KLSAgICB0eXBlZGVmIEhhc2hNYXA8UmVuZGVyT2JqZWN0KiwgRmxv
YXRpbmdPYmplY3QqPiBSZW5kZXJlclRvRmxvYXRJbmZvTWFwOwotICAgIFJlbmRlcmVyVG9GbG9h
dEluZm9NYXAgZmxvYXRNYXA7Ci0KLSAgICBpZiAobV9mbG9hdGluZ09iamVjdHMpIHsKLSAgICAg
ICAgY29uc3QgRmxvYXRpbmdPYmplY3RTZXQmIGZsb2F0aW5nT2JqZWN0U2V0ID0gbV9mbG9hdGlu
Z09iamVjdHMtPnNldCgpOwotICAgICAgICBpZiAoY2hpbGRyZW5JbmxpbmUoKSkgewotICAgICAg
ICAgICAgRmxvYXRpbmdPYmplY3RTZXRJdGVyYXRvciBlbmQgPSBmbG9hdGluZ09iamVjdFNldC5l
bmQoKTsKLSAgICAgICAgICAgIGZvciAoRmxvYXRpbmdPYmplY3RTZXRJdGVyYXRvciBpdCA9IGZs
b2F0aW5nT2JqZWN0U2V0LmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkgewotICAgICAgICAgICAg
ICAgIEZsb2F0aW5nT2JqZWN0KiBmID0gKml0OwotICAgICAgICAgICAgICAgIGZsb2F0TWFwLmFk
ZChmLT5yZW5kZXJlcigpLCBmKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfSBlbHNlCi0gICAg
ICAgICAgICBkZWxldGVBbGxWYWx1ZXMoZmxvYXRpbmdPYmplY3RTZXQpOwotICAgICAgICBtX2Zs
b2F0aW5nT2JqZWN0cy0+Y2xlYXIoKTsKLSAgICB9Ci0KLSAgICAvLyBXZSBzaG91bGQgbm90IHBy
b2Nlc3MgZmxvYXRzIGlmIHRoZSBwYXJlbnQgbm9kZSBpcyBub3QgYSBSZW5kZXJCbG9jay4gT3Ro
ZXJ3aXNlLCB3ZSB3aWxsIGFkZCAKLSAgICAvLyBmbG9hdHMgaW4gYW4gaW52YWxpZCBjb250ZXh0
LiBUaGlzIHdpbGwgY2F1c2UgYSBjcmFzaCBhcmlzaW5nIGZyb20gYSBiYWQgY2FzdCBvbiB0aGUg
cGFyZW50LgotICAgIC8vIFNlZSA8cmRhcjovL3Byb2JsZW0vODA0OTc1Mz4sIHdoZXJlIGZsb2F0
IHByb3BlcnR5IGlzIGFwcGxpZWQgb24gYSB0ZXh0IG5vZGUgaW4gYSBTVkcuCi0gICAgaWYgKCFw
YXJlbnQoKSB8fCAhcGFyZW50KCktPmlzUmVuZGVyQmxvY2soKSkKLSAgICAgICAgcmV0dXJuOwot
Ci0gICAgLy8gQXR0ZW1wdCB0byBsb2NhdGUgYSBwcmV2aW91cyBzaWJsaW5nIHdpdGggb3Zlcmhh
bmdpbmcgZmxvYXRzLiAgV2Ugc2tpcCBhbnkgZWxlbWVudHMgdGhhdCBhcmUKLSAgICAvLyBvdXQg
b2YgZmxvdyAobGlrZSBmbG9hdGluZy9wb3NpdGlvbmVkIGVsZW1lbnRzKSwgYW5kIHdlIGFsc28g
c2tpcCBvdmVyIGFueSBvYmplY3RzIHRoYXQgbWF5IGhhdmUgc2hpZnRlZAotICAgIC8vIHRvIGF2
b2lkIGZsb2F0cy4KLSAgICBSZW5kZXJCbG9jayogcGFyZW50QmxvY2sgPSB0b1JlbmRlckJsb2Nr
KHBhcmVudCgpKTsKLSAgICBib29sIHBhcmVudEhhc0Zsb2F0cyA9IGZhbHNlOwotICAgIFJlbmRl
ck9iamVjdCogcHJldiA9IHByZXZpb3VzU2libGluZygpOwotICAgIHdoaWxlIChwcmV2ICYmIChw
cmV2LT5pc0Zsb2F0aW5nT3JPdXRPZkZsb3dQb3NpdGlvbmVkKCkgfHwgIXByZXYtPmlzQm94KCkg
fHwgIXByZXYtPmlzUmVuZGVyQmxvY2soKSB8fCB0b1JlbmRlckJsb2NrKHByZXYpLT5hdm9pZHNG
bG9hdHMoKSkpIHsKLSAgICAgICAgaWYgKHByZXYtPmlzRmxvYXRpbmcoKSkKLSAgICAgICAgICAg
IHBhcmVudEhhc0Zsb2F0cyA9IHRydWU7Ci0gICAgICAgIHByZXYgPSBwcmV2LT5wcmV2aW91c1Np
YmxpbmcoKTsKLSAgICB9Ci0KLSAgICAvLyBGaXJzdCBhZGQgaW4gZmxvYXRzIGZyb20gdGhlIHBh
cmVudC4KLSAgICBMYXlvdXRVbml0IGxvZ2ljYWxUb3BPZmZzZXQgPSBsb2dpY2FsVG9wKCk7Ci0g
ICAgaWYgKHBhcmVudEhhc0Zsb2F0cykKLSAgICAgICAgYWRkSW50cnVkaW5nRmxvYXRzKHBhcmVu
dEJsb2NrLCBwYXJlbnRCbG9jay0+bG9naWNhbExlZnRPZmZzZXRGb3JDb250ZW50KCksIGxvZ2lj
YWxUb3BPZmZzZXQpOwotICAgIAotICAgIExheW91dFVuaXQgbG9naWNhbExlZnRPZmZzZXQgPSAw
OwotICAgIGlmIChwcmV2KQotICAgICAgICBsb2dpY2FsVG9wT2Zmc2V0IC09IHRvUmVuZGVyQm94
KHByZXYpLT5sb2dpY2FsVG9wKCk7Ci0gICAgZWxzZSB7Ci0gICAgICAgIHByZXYgPSBwYXJlbnRC
bG9jazsKLSAgICAgICAgbG9naWNhbExlZnRPZmZzZXQgKz0gcGFyZW50QmxvY2stPmxvZ2ljYWxM
ZWZ0T2Zmc2V0Rm9yQ29udGVudCgpOwotICAgIH0KLQotICAgIC8vIEFkZCBvdmVyaGFuZ2luZyBm
bG9hdHMgZnJvbSB0aGUgcHJldmlvdXMgUmVuZGVyQmxvY2ssIGJ1dCBvbmx5IGlmIGl0IGhhcyBh
IGZsb2F0IHRoYXQgaW50cnVkZXMgaW50byBvdXIgc3BhY2UuICAgIAotICAgIFJlbmRlckJsb2Nr
KiBibG9jayA9IHRvUmVuZGVyQmxvY2socHJldik7Ci0gICAgaWYgKGJsb2NrLT5tX2Zsb2F0aW5n
T2JqZWN0cyAmJiBibG9jay0+bG93ZXN0RmxvYXRMb2dpY2FsQm90dG9tKCkgPiBsb2dpY2FsVG9w
T2Zmc2V0KQotICAgICAgICBhZGRJbnRydWRpbmdGbG9hdHMoYmxvY2ssIGxvZ2ljYWxMZWZ0T2Zm
c2V0LCBsb2dpY2FsVG9wT2Zmc2V0KTsKLQotICAgIGlmIChjaGlsZHJlbklubGluZSgpKSB7Ci0g
ICAgICAgIExheW91dFVuaXQgY2hhbmdlTG9naWNhbFRvcCA9IExheW91dFVuaXQ6Om1heCgpOwot
ICAgICAgICBMYXlvdXRVbml0IGNoYW5nZUxvZ2ljYWxCb3R0b20gPSBMYXlvdXRVbml0OjptaW4o
KTsKLSAgICAgICAgaWYgKG1fZmxvYXRpbmdPYmplY3RzKSB7Ci0gICAgICAgICAgICBjb25zdCBG
bG9hdGluZ09iamVjdFNldCYgZmxvYXRpbmdPYmplY3RTZXQgPSBtX2Zsb2F0aW5nT2JqZWN0cy0+
c2V0KCk7Ci0gICAgICAgICAgICBGbG9hdGluZ09iamVjdFNldEl0ZXJhdG9yIGVuZCA9IGZsb2F0
aW5nT2JqZWN0U2V0LmVuZCgpOwotICAgICAgICAgICAgZm9yIChGbG9hdGluZ09iamVjdFNldEl0
ZXJhdG9yIGl0ID0gZmxvYXRpbmdPYmplY3RTZXQuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7
Ci0gICAgICAgICAgICAgICAgRmxvYXRpbmdPYmplY3QqIGYgPSAqaXQ7Ci0gICAgICAgICAgICAg
ICAgRmxvYXRpbmdPYmplY3QqIG9sZEZsb2F0aW5nT2JqZWN0ID0gZmxvYXRNYXAuZ2V0KGYtPnJl
bmRlcmVyKCkpOwotICAgICAgICAgICAgICAgIExheW91dFVuaXQgbG9naWNhbEJvdHRvbSA9IGYt
PmxvZ2ljYWxCb3R0b20oaXNIb3Jpem9udGFsV3JpdGluZ01vZGUoKSk7Ci0gICAgICAgICAgICAg
ICAgaWYgKG9sZEZsb2F0aW5nT2JqZWN0KSB7Ci0gICAgICAgICAgICAgICAgICAgIExheW91dFVu
aXQgb2xkTG9naWNhbEJvdHRvbSA9IG9sZEZsb2F0aW5nT2JqZWN0LT5sb2dpY2FsQm90dG9tKGlz
SG9yaXpvbnRhbFdyaXRpbmdNb2RlKCkpOwotICAgICAgICAgICAgICAgICAgICBpZiAoZi0+bG9n
aWNhbFdpZHRoKGlzSG9yaXpvbnRhbFdyaXRpbmdNb2RlKCkpICE9IG9sZEZsb2F0aW5nT2JqZWN0
LT5sb2dpY2FsV2lkdGgoaXNIb3Jpem9udGFsV3JpdGluZ01vZGUoKSkgfHwgZi0+bG9naWNhbExl
ZnQoaXNIb3Jpem9udGFsV3JpdGluZ01vZGUoKSkgIT0gb2xkRmxvYXRpbmdPYmplY3QtPmxvZ2lj
YWxMZWZ0KGlzSG9yaXpvbnRhbFdyaXRpbmdNb2RlKCkpKSB7Ci0gICAgICAgICAgICAgICAgICAg
ICAgICBjaGFuZ2VMb2dpY2FsVG9wID0gMDsKLSAgICAgICAgICAgICAgICAgICAgICAgIGNoYW5n
ZUxvZ2ljYWxCb3R0b20gPSBtYXgoY2hhbmdlTG9naWNhbEJvdHRvbSwgbWF4KGxvZ2ljYWxCb3R0
b20sIG9sZExvZ2ljYWxCb3R0b20pKTsKLSAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAg
ICAgICAgICAgICAgICAgICAgICAgIGlmIChsb2dpY2FsQm90dG9tICE9IG9sZExvZ2ljYWxCb3R0
b20pIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFuZ2VMb2dpY2FsVG9wID0gbWlu
KGNoYW5nZUxvZ2ljYWxUb3AsIG1pbihsb2dpY2FsQm90dG9tLCBvbGRMb2dpY2FsQm90dG9tKSk7
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhbmdlTG9naWNhbEJvdHRvbSA9IG1heChj
aGFuZ2VMb2dpY2FsQm90dG9tLCBtYXgobG9naWNhbEJvdHRvbSwgb2xkTG9naWNhbEJvdHRvbSkp
OwotICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgTGF5
b3V0VW5pdCBsb2dpY2FsVG9wID0gZi0+bG9naWNhbFRvcChpc0hvcml6b250YWxXcml0aW5nTW9k
ZSgpKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIExheW91dFVuaXQgb2xkTG9naWNhbFRvcCA9
IG9sZEZsb2F0aW5nT2JqZWN0LT5sb2dpY2FsVG9wKGlzSG9yaXpvbnRhbFdyaXRpbmdNb2RlKCkp
OwotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGxvZ2ljYWxUb3AgIT0gb2xkTG9naWNhbFRv
cCkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYW5nZUxvZ2ljYWxUb3AgPSBtaW4o
Y2hhbmdlTG9naWNhbFRvcCwgbWluKGxvZ2ljYWxUb3AsIG9sZExvZ2ljYWxUb3ApKTsKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBjaGFuZ2VMb2dpY2FsQm90dG9tID0gbWF4KGNoYW5nZUxv
Z2ljYWxCb3R0b20sIG1heChsb2dpY2FsVG9wLCBvbGRMb2dpY2FsVG9wKSk7Ci0gICAgICAgICAg
ICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAg
ICAgICBmbG9hdE1hcC5yZW1vdmUoZi0+cmVuZGVyZXIoKSk7Ci0gICAgICAgICAgICAgICAgICAg
IGlmIChvbGRGbG9hdGluZ09iamVjdC0+b3JpZ2luYXRpbmdMaW5lKCkgJiYgIXNlbGZOZWVkc0xh
eW91dCgpKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBBU1NFUlQoJm9sZEZsb2F0aW5nT2Jq
ZWN0LT5vcmlnaW5hdGluZ0xpbmUoKS0+cmVuZGVyZXIoKSA9PSB0aGlzKTsKLSAgICAgICAgICAg
ICAgICAgICAgICAgIG9sZEZsb2F0aW5nT2JqZWN0LT5vcmlnaW5hdGluZ0xpbmUoKS0+bWFya0Rp
cnR5KCk7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgZGVsZXRl
IG9sZEZsb2F0aW5nT2JqZWN0OwotICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAg
ICAgICAgICAgIGNoYW5nZUxvZ2ljYWxUb3AgPSAwOwotICAgICAgICAgICAgICAgICAgICBjaGFu
Z2VMb2dpY2FsQm90dG9tID0gbWF4KGNoYW5nZUxvZ2ljYWxCb3R0b20sIGxvZ2ljYWxCb3R0b20p
OwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAg
IFJlbmRlcmVyVG9GbG9hdEluZm9NYXA6Oml0ZXJhdG9yIGVuZCA9IGZsb2F0TWFwLmVuZCgpOwot
ICAgICAgICBmb3IgKFJlbmRlcmVyVG9GbG9hdEluZm9NYXA6Oml0ZXJhdG9yIGl0ID0gZmxvYXRN
YXAuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7Ci0gICAgICAgICAgICBGbG9hdGluZ09iamVj
dCogZmxvYXRpbmdPYmplY3QgPSAoKml0KS52YWx1ZTsKLSAgICAgICAgICAgIGlmICghZmxvYXRp
bmdPYmplY3QtPmlzRGVzY2VuZGFudCgpKSB7Ci0gICAgICAgICAgICAgICAgY2hhbmdlTG9naWNh
bFRvcCA9IDA7Ci0gICAgICAgICAgICAgICAgY2hhbmdlTG9naWNhbEJvdHRvbSA9IG1heChjaGFu
Z2VMb2dpY2FsQm90dG9tLCBmbG9hdGluZ09iamVjdC0+bG9naWNhbEJvdHRvbShpc0hvcml6b250
YWxXcml0aW5nTW9kZSgpKSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgZGVs
ZXRlQWxsVmFsdWVzKGZsb2F0TWFwKTsKLQotICAgICAgICBtYXJrTGluZXNEaXJ0eUluQmxvY2tS
YW5nZShjaGFuZ2VMb2dpY2FsVG9wLCBjaGFuZ2VMb2dpY2FsQm90dG9tKTsKLSAgICB9IGVsc2Ug
aWYgKCFvbGRJbnRydWRpbmdGbG9hdFNldC5pc0VtcHR5KCkpIHsKLSAgICAgICAgLy8gSWYgdGhl
cmUgYXJlIHByZXZpb3VzbHkgaW50cnVkaW5nIGZsb2F0cyB0aGF0IG5vIGxvbmdlciBpbnRydWRl
LCB0aGVuIGNoaWxkcmVuIHdpdGggZmxvYXRzCi0gICAgICAgIC8vIHNob3VsZCBhbHNvIGdldCBs
YXlvdXQgYmVjYXVzZSB0aGV5IG1pZ2h0IG5lZWQgdGhlaXIgZmxvYXRpbmcgb2JqZWN0IGxpc3Rz
IGNsZWFyZWQuCi0gICAgICAgIGlmIChtX2Zsb2F0aW5nT2JqZWN0cy0+c2V0KCkuc2l6ZSgpIDwg
b2xkSW50cnVkaW5nRmxvYXRTZXQuc2l6ZSgpKQotICAgICAgICAgICAgbWFya0FsbERlc2NlbmRh
bnRzV2l0aEZsb2F0c0ZvckxheW91dCgpOwotICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgIGNv
bnN0IEZsb2F0aW5nT2JqZWN0U2V0JiBmbG9hdGluZ09iamVjdFNldCA9IG1fZmxvYXRpbmdPYmpl
Y3RzLT5zZXQoKTsKLSAgICAgICAgICAgIEZsb2F0aW5nT2JqZWN0U2V0SXRlcmF0b3IgZW5kID0g
ZmxvYXRpbmdPYmplY3RTZXQuZW5kKCk7Ci0gICAgICAgICAgICBmb3IgKEZsb2F0aW5nT2JqZWN0
U2V0SXRlcmF0b3IgaXQgPSBmbG9hdGluZ09iamVjdFNldC5iZWdpbigpOyBpdCAhPSBlbmQgJiYg
IW9sZEludHJ1ZGluZ0Zsb2F0U2V0LmlzRW1wdHkoKTsgKytpdCkKLSAgICAgICAgICAgICAgICBv
bGRJbnRydWRpbmdGbG9hdFNldC5yZW1vdmUoKCppdCktPnJlbmRlcmVyKCkpOwotICAgICAgICAg
ICAgaWYgKCFvbGRJbnRydWRpbmdGbG9hdFNldC5pc0VtcHR5KCkpCi0gICAgICAgICAgICAgICAg
bWFya0FsbERlc2NlbmRhbnRzV2l0aEZsb2F0c0ZvckxheW91dCgpOwotICAgICAgICB9Ci0gICAg
fQotfQotCiBMYXlvdXRVbml0IFJlbmRlckJsb2NrOjphZGRPdmVyaGFuZ2luZ0Zsb2F0cyhSZW5k
ZXJCbG9jayogY2hpbGQsIGJvb2wgbWFrZUNoaWxkUGFpbnRPdGhlckZsb2F0cykKIHsKICAgICAv
LyBQcmV2ZW50IGZsb2F0cyBmcm9tIGJlaW5nIGFkZGVkIHRvIHRoZSBjYW52YXMgYnkgdGhlIHJv
b3QgZWxlbWVudCwgZS5nLiwgPGh0bWw+LgpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlckJsb2NrLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1Jl
bmRlckJsb2NrLmgJKHJldmlzaW9uIDE1NTM2NSkKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9SZW5kZXJCbG9jay5oCSh3b3JraW5nIGNvcHkpCkBAIC01ODcsMTcgKzU4Nyw2IEBAIHByb3Rl
Y3RlZDoKIAogICAgIHZpcnR1YWwgdm9pZCBhZGRGb2N1c1JpbmdSZWN0cyhWZWN0b3I8SW50UmVj
dD4mLCBjb25zdCBMYXlvdXRQb2ludCYgYWRkaXRpb25hbE9mZnNldCwgY29uc3QgUmVuZGVyTGF5
ZXJNb2RlbE9iamVjdCogcGFpbnRDb250YWluZXIgPSAwKSBPVkVSUklERTsKIAotI2lmIEVOQUJM
RShTVkcpCi0gICAgLy8gT25seSB1c2VkIGJ5IFJlbmRlclNWR1RleHQsIHdoaWNoIGV4cGxpY2l0
ZWx5IG92ZXJyaWRlcyBSZW5kZXJCbG9jazo6bGF5b3V0QmxvY2soKSwgZG8gTk9UIHVzZSBmb3Ig
YW55dGhpbmcgZWxzZS4KLSAgICB2b2lkIGZvcmNlTGF5b3V0SW5saW5lQ2hpbGRyZW4oKQotICAg
IHsKLSAgICAgICAgTGF5b3V0VW5pdCByZXBhaW50TG9naWNhbFRvcCA9IDA7Ci0gICAgICAgIExh
eW91dFVuaXQgcmVwYWludExvZ2ljYWxCb3R0b20gPSAwOwotICAgICAgICBjbGVhckZsb2F0cygp
OwotICAgICAgICBsYXlvdXRJbmxpbmVDaGlsZHJlbih0cnVlLCByZXBhaW50TG9naWNhbFRvcCwg
cmVwYWludExvZ2ljYWxCb3R0b20pOwotICAgIH0KLSNlbmRpZgotCiAgICAgYm9vbCB1cGRhdGVT
aGFwZXNCZWZvcmVCbG9ja0xheW91dCgpOwogICAgIHZvaWQgdXBkYXRlU2hhcGVzQWZ0ZXJCbG9j
a0xheW91dChib29sIGhlaWdodENoYW5nZWQgPSBmYWxzZSk7CiAgICAgdm9pZCBjb21wdXRlUmVn
aW9uUmFuZ2VGb3JCb3hDaGlsZChjb25zdCBSZW5kZXJCb3gqKSBjb25zdDsKQEAgLTY1MSw4ICs2
NDAsNiBAQCBwcml2YXRlOgogCiAgICAgdmlydHVhbCB2b2lkIHJlcGFpbnRPdmVyaGFuZ2luZ0Zs
b2F0cyhib29sIHBhaW50QWxsRGVzY2VuZGFudHMpIE9WRVJSSURFIEZJTkFMOwogCi0gICAgdm9p
ZCBsYXlvdXRCbG9ja0NoaWxkcmVuKGJvb2wgcmVsYXlvdXRDaGlsZHJlbiwgTGF5b3V0VW5pdCYg
bWF4RmxvYXRMb2dpY2FsQm90dG9tKTsKLSAgICB2b2lkIGxheW91dElubGluZUNoaWxkcmVuKGJv
b2wgcmVsYXlvdXRDaGlsZHJlbiwgTGF5b3V0VW5pdCYgcmVwYWludExvZ2ljYWxUb3AsIExheW91
dFVuaXQmIHJlcGFpbnRMb2dpY2FsQm90dG9tKTsKICAgICBCaWRpUnVuKiBoYW5kbGVUcmFpbGlu
Z1NwYWNlcyhCaWRpUnVuTGlzdDxCaWRpUnVuPiYsIEJpZGlDb250ZXh0Kik7CiAKICAgICB2b2lk
IGluc2VydEludG9UcmFja2VkUmVuZGVyZXJNYXBzKFJlbmRlckJveCogZGVzY2VuZGFudCwgVHJh
Y2tlZERlc2NlbmRhbnRzTWFwKiYsIFRyYWNrZWRDb250YWluZXJNYXAqJik7CkBAIC05MjYsOCAr
OTEzLDYgQEAgcHJpdmF0ZToKICAgICAvLyBSZXR1cm5zIHRydWUgaWYgYW5kIG9ubHkgaWYgaXQg
aGFzIHBvc2l0aW9uZWQgYW55IGZsb2F0cy4KICAgICBib29sIHBvc2l0aW9uTmV3RmxvYXRzKCk7
CiAKLSAgICB2b2lkIGNsZWFyRmxvYXRzKCk7Ci0KICAgICBMYXlvdXRVbml0IGdldENsZWFyRGVs
dGEoUmVuZGVyQm94KiBjaGlsZCwgTGF5b3V0VW5pdCB5UG9zKTsKIAogICAgIHZpcnR1YWwgYm9v
bCBhdm9pZHNGbG9hdHMoKSBjb25zdDsKQEAgLTExOTEsNiArMTE3NiwxMCBAQCBwdWJsaWM6CiAg
ICAgdmlydHVhbCBMYXlvdXRVbml0IG9mZnNldEZyb21Mb2dpY2FsVG9wT2ZGaXJzdFBhZ2UoKSBj
b25zdDsKICAgICBSZW5kZXJSZWdpb24qIHJlZ2lvbkF0QmxvY2tPZmZzZXQoTGF5b3V0VW5pdCkg
Y29uc3Q7CiAKKyAgICAvLyBGSVhNRTogVGhpcyBpcyB0ZW1wb3JhcnkgdG8gYWxsb3cgdXMgdG8g
bW92ZSBjb2RlIGZyb20gUmVuZGVyQmxvY2sgaW50byBSZW5kZXJCbG9ja0Zsb3cgdGhhdCBhY2Nl
c3NlcyBtZW1iZXIgdmFyaWFibGVzIHRoYXQgd2UgaGF2ZW4ndCBtb3ZlZCBvdXQgb2YKKyAgICAv
LyBSZW5kZXJCbG9jayB5ZXQuCisgICAgZnJpZW5kIGNsYXNzIFJlbmRlckJsb2NrRmxvdzsKKwog
cHJvdGVjdGVkOgogICAgIHN0cnVjdCBGbG9hdGluZ09iamVjdEhhc2hGdW5jdGlvbnMgewogICAg
ICAgICBzdGF0aWMgdW5zaWduZWQgaGFzaChGbG9hdGluZ09iamVjdCoga2V5KSB7IHJldHVybiBE
ZWZhdWx0SGFzaDxSZW5kZXJCb3gqPjo6SGFzaDo6aGFzaChrZXktPnJlbmRlcmVyKCkpOyB9Cklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2tGbG93LmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2tGbG93LmNwcAkocmV2
aXNpb24gMTU1MzY1KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJsb2NrRmxv
dy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI0LDYgKzI0LDEzIEBACiAjaW5jbHVkZSAiY29uZmln
LmgiCiAjaW5jbHVkZSAiUmVuZGVyQmxvY2tGbG93LmgiCiAKKyNpbmNsdWRlICJMYXlvdXRSZXBh
aW50ZXIuaCIKKyNpbmNsdWRlICJSZW5kZXJGbG93VGhyZWFkLmgiCisjaW5jbHVkZSAiUmVuZGVy
TGF5ZXIuaCIKKyNpbmNsdWRlICJSZW5kZXJWaWV3LmgiCisKK3VzaW5nIG5hbWVzcGFjZSBzdGQ7
CisKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogUmVuZGVyQmxvY2tGbG93OjpSZW5kZXJCbG9ja0Zs
b3coQ29udGFpbmVyTm9kZSogbm9kZSkKQEAgLTM1LDQgKzQyLDM3MiBAQCBSZW5kZXJCbG9ja0Zs
b3c6On5SZW5kZXJCbG9ja0Zsb3coKQogewogfQogCit2b2lkIFJlbmRlckJsb2NrRmxvdzo6Y2xl
YXJGbG9hdHMoKQoreworICAgIGlmIChtX2Zsb2F0aW5nT2JqZWN0cykKKyAgICAgICAgbV9mbG9h
dGluZ09iamVjdHMtPnNldEhvcml6b250YWxXcml0aW5nTW9kZShpc0hvcml6b250YWxXcml0aW5n
TW9kZSgpKTsKKworICAgIEhhc2hTZXQ8UmVuZGVyQm94Kj4gb2xkSW50cnVkaW5nRmxvYXRTZXQ7
CisgICAgaWYgKCFjaGlsZHJlbklubGluZSgpICYmIG1fZmxvYXRpbmdPYmplY3RzKSB7CisgICAg
ICAgIGNvbnN0IEZsb2F0aW5nT2JqZWN0U2V0JiBmbG9hdGluZ09iamVjdFNldCA9IG1fZmxvYXRp
bmdPYmplY3RzLT5zZXQoKTsKKyAgICAgICAgRmxvYXRpbmdPYmplY3RTZXRJdGVyYXRvciBlbmQg
PSBmbG9hdGluZ09iamVjdFNldC5lbmQoKTsKKyAgICAgICAgZm9yIChGbG9hdGluZ09iamVjdFNl
dEl0ZXJhdG9yIGl0ID0gZmxvYXRpbmdPYmplY3RTZXQuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0
KSB7CisgICAgICAgICAgICBGbG9hdGluZ09iamVjdCogZmxvYXRpbmdPYmplY3QgPSAqaXQ7Cisg
ICAgICAgICAgICBpZiAoIWZsb2F0aW5nT2JqZWN0LT5pc0Rlc2NlbmRhbnQoKSkKKyAgICAgICAg
ICAgICAgICBvbGRJbnRydWRpbmdGbG9hdFNldC5hZGQoZmxvYXRpbmdPYmplY3QtPnJlbmRlcmVy
KCkpOworICAgICAgICB9CisgICAgfQorCisgICAgLy8gSW5saW5lIGJsb2NrcyBhcmUgY292ZXJl
ZCBieSB0aGUgaXNSZXBsYWNlZCgpIGNoZWNrIGluIHRoZSBhdm9pZEZsb2F0cyBtZXRob2QuCisg
ICAgaWYgKGF2b2lkc0Zsb2F0cygpIHx8IGlzUm9vdCgpIHx8IGlzUmVuZGVyVmlldygpIHx8IGlz
RmxvYXRpbmdPck91dE9mRmxvd1Bvc2l0aW9uZWQoKSB8fCBpc1RhYmxlQ2VsbCgpKSB7CisgICAg
ICAgIGlmIChtX2Zsb2F0aW5nT2JqZWN0cykgeworICAgICAgICAgICAgZGVsZXRlQWxsVmFsdWVz
KG1fZmxvYXRpbmdPYmplY3RzLT5zZXQoKSk7CisgICAgICAgICAgICBtX2Zsb2F0aW5nT2JqZWN0
cy0+Y2xlYXIoKTsKKyAgICAgICAgfQorICAgICAgICBpZiAoIW9sZEludHJ1ZGluZ0Zsb2F0U2V0
LmlzRW1wdHkoKSkKKyAgICAgICAgICAgIG1hcmtBbGxEZXNjZW5kYW50c1dpdGhGbG9hdHNGb3JM
YXlvdXQoKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIHR5cGVkZWYgSGFzaE1hcDxS
ZW5kZXJPYmplY3QqLCBGbG9hdGluZ09iamVjdCo+IFJlbmRlcmVyVG9GbG9hdEluZm9NYXA7Cisg
ICAgUmVuZGVyZXJUb0Zsb2F0SW5mb01hcCBmbG9hdE1hcDsKKworICAgIGlmIChtX2Zsb2F0aW5n
T2JqZWN0cykgeworICAgICAgICBjb25zdCBGbG9hdGluZ09iamVjdFNldCYgZmxvYXRpbmdPYmpl
Y3RTZXQgPSBtX2Zsb2F0aW5nT2JqZWN0cy0+c2V0KCk7CisgICAgICAgIGlmIChjaGlsZHJlbklu
bGluZSgpKSB7CisgICAgICAgICAgICBGbG9hdGluZ09iamVjdFNldEl0ZXJhdG9yIGVuZCA9IGZs
b2F0aW5nT2JqZWN0U2V0LmVuZCgpOworICAgICAgICAgICAgZm9yIChGbG9hdGluZ09iamVjdFNl
dEl0ZXJhdG9yIGl0ID0gZmxvYXRpbmdPYmplY3RTZXQuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0
KSB7CisgICAgICAgICAgICAgICAgRmxvYXRpbmdPYmplY3QqIGYgPSAqaXQ7CisgICAgICAgICAg
ICAgICAgZmxvYXRNYXAuYWRkKGYtPnJlbmRlcmVyKCksIGYpOworICAgICAgICAgICAgfQorICAg
ICAgICB9IGVsc2UKKyAgICAgICAgICAgIGRlbGV0ZUFsbFZhbHVlcyhmbG9hdGluZ09iamVjdFNl
dCk7CisgICAgICAgIG1fZmxvYXRpbmdPYmplY3RzLT5jbGVhcigpOworICAgIH0KKworICAgIC8v
IFdlIHNob3VsZCBub3QgcHJvY2VzcyBmbG9hdHMgaWYgdGhlIHBhcmVudCBub2RlIGlzIG5vdCBh
IFJlbmRlckJsb2NrLiBPdGhlcndpc2UsIHdlIHdpbGwgYWRkIAorICAgIC8vIGZsb2F0cyBpbiBh
biBpbnZhbGlkIGNvbnRleHQuIFRoaXMgd2lsbCBjYXVzZSBhIGNyYXNoIGFyaXNpbmcgZnJvbSBh
IGJhZCBjYXN0IG9uIHRoZSBwYXJlbnQuCisgICAgLy8gU2VlIDxyZGFyOi8vcHJvYmxlbS84MDQ5
NzUzPiwgd2hlcmUgZmxvYXQgcHJvcGVydHkgaXMgYXBwbGllZCBvbiBhIHRleHQgbm9kZSBpbiBh
IFNWRy4KKyAgICBpZiAoIXBhcmVudCgpIHx8ICFwYXJlbnQoKS0+aXNSZW5kZXJCbG9jaygpKQor
ICAgICAgICByZXR1cm47CisKKyAgICAvLyBBdHRlbXB0IHRvIGxvY2F0ZSBhIHByZXZpb3VzIHNp
Ymxpbmcgd2l0aCBvdmVyaGFuZ2luZyBmbG9hdHMuIFdlIHNraXAgYW55IGVsZW1lbnRzIHRoYXQg
YXJlCisgICAgLy8gb3V0IG9mIGZsb3cgKGxpa2UgZmxvYXRpbmcvcG9zaXRpb25lZCBlbGVtZW50
cyksIGFuZCB3ZSBhbHNvIHNraXAgb3ZlciBhbnkgb2JqZWN0cyB0aGF0IG1heSBoYXZlIHNoaWZ0
ZWQKKyAgICAvLyB0byBhdm9pZCBmbG9hdHMuCisgICAgUmVuZGVyQmxvY2sqIHBhcmVudEJsb2Nr
ID0gdG9SZW5kZXJCbG9jayhwYXJlbnQoKSk7CisgICAgYm9vbCBwYXJlbnRIYXNGbG9hdHMgPSBm
YWxzZTsKKyAgICBSZW5kZXJPYmplY3QqIHByZXYgPSBwcmV2aW91c1NpYmxpbmcoKTsKKyAgICB3
aGlsZSAocHJldiAmJiAocHJldi0+aXNGbG9hdGluZ09yT3V0T2ZGbG93UG9zaXRpb25lZCgpIHx8
ICFwcmV2LT5pc0JveCgpIHx8ICFwcmV2LT5pc1JlbmRlckJsb2NrKCkgfHwgdG9SZW5kZXJCbG9j
ayhwcmV2KS0+YXZvaWRzRmxvYXRzKCkpKSB7CisgICAgICAgIGlmIChwcmV2LT5pc0Zsb2F0aW5n
KCkpCisgICAgICAgICAgICBwYXJlbnRIYXNGbG9hdHMgPSB0cnVlOworICAgICAgICBwcmV2ID0g
cHJldi0+cHJldmlvdXNTaWJsaW5nKCk7CisgICAgfQorCisgICAgLy8gRmlyc3QgYWRkIGluIGZs
b2F0cyBmcm9tIHRoZSBwYXJlbnQuCisgICAgTGF5b3V0VW5pdCBsb2dpY2FsVG9wT2Zmc2V0ID0g
bG9naWNhbFRvcCgpOworICAgIGlmIChwYXJlbnRIYXNGbG9hdHMpCisgICAgICAgIGFkZEludHJ1
ZGluZ0Zsb2F0cyhwYXJlbnRCbG9jaywgcGFyZW50QmxvY2stPmxvZ2ljYWxMZWZ0T2Zmc2V0Rm9y
Q29udGVudCgpLCBsb2dpY2FsVG9wT2Zmc2V0KTsKKyAgICAKKyAgICBMYXlvdXRVbml0IGxvZ2lj
YWxMZWZ0T2Zmc2V0ID0gMDsKKyAgICBpZiAocHJldikKKyAgICAgICAgbG9naWNhbFRvcE9mZnNl
dCAtPSB0b1JlbmRlckJveChwcmV2KS0+bG9naWNhbFRvcCgpOworICAgIGVsc2UgeworICAgICAg
ICBwcmV2ID0gcGFyZW50QmxvY2s7CisgICAgICAgIGxvZ2ljYWxMZWZ0T2Zmc2V0ICs9IHBhcmVu
dEJsb2NrLT5sb2dpY2FsTGVmdE9mZnNldEZvckNvbnRlbnQoKTsKKyAgICB9CisKKyAgICAvLyBB
ZGQgb3ZlcmhhbmdpbmcgZmxvYXRzIGZyb20gdGhlIHByZXZpb3VzIFJlbmRlckJsb2NrLCBidXQg
b25seSBpZiBpdCBoYXMgYSBmbG9hdCB0aGF0IGludHJ1ZGVzIGludG8gb3VyIHNwYWNlLiAgICAK
KyAgICBSZW5kZXJCbG9jayogYmxvY2sgPSB0b1JlbmRlckJsb2NrKHByZXYpOworICAgIGlmIChi
bG9jay0+bV9mbG9hdGluZ09iamVjdHMgJiYgYmxvY2stPmxvd2VzdEZsb2F0TG9naWNhbEJvdHRv
bSgpID4gbG9naWNhbFRvcE9mZnNldCkKKyAgICAgICAgYWRkSW50cnVkaW5nRmxvYXRzKGJsb2Nr
LCBsb2dpY2FsTGVmdE9mZnNldCwgbG9naWNhbFRvcE9mZnNldCk7CisKKyAgICBpZiAoY2hpbGRy
ZW5JbmxpbmUoKSkgeworICAgICAgICBMYXlvdXRVbml0IGNoYW5nZUxvZ2ljYWxUb3AgPSBMYXlv
dXRVbml0OjptYXgoKTsKKyAgICAgICAgTGF5b3V0VW5pdCBjaGFuZ2VMb2dpY2FsQm90dG9tID0g
TGF5b3V0VW5pdDo6bWluKCk7CisgICAgICAgIGlmIChtX2Zsb2F0aW5nT2JqZWN0cykgeworICAg
ICAgICAgICAgY29uc3QgRmxvYXRpbmdPYmplY3RTZXQmIGZsb2F0aW5nT2JqZWN0U2V0ID0gbV9m
bG9hdGluZ09iamVjdHMtPnNldCgpOworICAgICAgICAgICAgRmxvYXRpbmdPYmplY3RTZXRJdGVy
YXRvciBlbmQgPSBmbG9hdGluZ09iamVjdFNldC5lbmQoKTsKKyAgICAgICAgICAgIGZvciAoRmxv
YXRpbmdPYmplY3RTZXRJdGVyYXRvciBpdCA9IGZsb2F0aW5nT2JqZWN0U2V0LmJlZ2luKCk7IGl0
ICE9IGVuZDsgKytpdCkgeworICAgICAgICAgICAgICAgIEZsb2F0aW5nT2JqZWN0KiBmID0gKml0
OworICAgICAgICAgICAgICAgIEZsb2F0aW5nT2JqZWN0KiBvbGRGbG9hdGluZ09iamVjdCA9IGZs
b2F0TWFwLmdldChmLT5yZW5kZXJlcigpKTsKKyAgICAgICAgICAgICAgICBMYXlvdXRVbml0IGxv
Z2ljYWxCb3R0b20gPSBmLT5sb2dpY2FsQm90dG9tKGlzSG9yaXpvbnRhbFdyaXRpbmdNb2RlKCkp
OworICAgICAgICAgICAgICAgIGlmIChvbGRGbG9hdGluZ09iamVjdCkgeworICAgICAgICAgICAg
ICAgICAgICBMYXlvdXRVbml0IG9sZExvZ2ljYWxCb3R0b20gPSBvbGRGbG9hdGluZ09iamVjdC0+
bG9naWNhbEJvdHRvbShpc0hvcml6b250YWxXcml0aW5nTW9kZSgpKTsKKyAgICAgICAgICAgICAg
ICAgICAgaWYgKGYtPmxvZ2ljYWxXaWR0aChpc0hvcml6b250YWxXcml0aW5nTW9kZSgpKSAhPSBv
bGRGbG9hdGluZ09iamVjdC0+bG9naWNhbFdpZHRoKGlzSG9yaXpvbnRhbFdyaXRpbmdNb2RlKCkp
IHx8IGYtPmxvZ2ljYWxMZWZ0KGlzSG9yaXpvbnRhbFdyaXRpbmdNb2RlKCkpICE9IG9sZEZsb2F0
aW5nT2JqZWN0LT5sb2dpY2FsTGVmdChpc0hvcml6b250YWxXcml0aW5nTW9kZSgpKSkgeworICAg
ICAgICAgICAgICAgICAgICAgICAgY2hhbmdlTG9naWNhbFRvcCA9IDA7CisgICAgICAgICAgICAg
ICAgICAgICAgICBjaGFuZ2VMb2dpY2FsQm90dG9tID0gbWF4KGNoYW5nZUxvZ2ljYWxCb3R0b20s
IG1heChsb2dpY2FsQm90dG9tLCBvbGRMb2dpY2FsQm90dG9tKSk7CisgICAgICAgICAgICAgICAg
ICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAobG9naWNhbEJvdHRvbSAh
PSBvbGRMb2dpY2FsQm90dG9tKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhbmdl
TG9naWNhbFRvcCA9IG1pbihjaGFuZ2VMb2dpY2FsVG9wLCBtaW4obG9naWNhbEJvdHRvbSwgb2xk
TG9naWNhbEJvdHRvbSkpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYW5nZUxvZ2lj
YWxCb3R0b20gPSBtYXgoY2hhbmdlTG9naWNhbEJvdHRvbSwgbWF4KGxvZ2ljYWxCb3R0b20sIG9s
ZExvZ2ljYWxCb3R0b20pKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg
ICAgICAgICAgICAgIExheW91dFVuaXQgbG9naWNhbFRvcCA9IGYtPmxvZ2ljYWxUb3AoaXNIb3Jp
em9udGFsV3JpdGluZ01vZGUoKSk7CisgICAgICAgICAgICAgICAgICAgICAgICBMYXlvdXRVbml0
IG9sZExvZ2ljYWxUb3AgPSBvbGRGbG9hdGluZ09iamVjdC0+bG9naWNhbFRvcChpc0hvcml6b250
YWxXcml0aW5nTW9kZSgpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChsb2dpY2FsVG9w
ICE9IG9sZExvZ2ljYWxUb3ApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFuZ2VM
b2dpY2FsVG9wID0gbWluKGNoYW5nZUxvZ2ljYWxUb3AsIG1pbihsb2dpY2FsVG9wLCBvbGRMb2dp
Y2FsVG9wKSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhbmdlTG9naWNhbEJvdHRv
bSA9IG1heChjaGFuZ2VMb2dpY2FsQm90dG9tLCBtYXgobG9naWNhbFRvcCwgb2xkTG9naWNhbFRv
cCkpOworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICB9CisK
KyAgICAgICAgICAgICAgICAgICAgZmxvYXRNYXAucmVtb3ZlKGYtPnJlbmRlcmVyKCkpOworICAg
ICAgICAgICAgICAgICAgICBpZiAob2xkRmxvYXRpbmdPYmplY3QtPm9yaWdpbmF0aW5nTGluZSgp
ICYmICFzZWxmTmVlZHNMYXlvdXQoKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgQVNTRVJU
KCZvbGRGbG9hdGluZ09iamVjdC0+b3JpZ2luYXRpbmdMaW5lKCktPnJlbmRlcmVyKCkgPT0gdGhp
cyk7CisgICAgICAgICAgICAgICAgICAgICAgICBvbGRGbG9hdGluZ09iamVjdC0+b3JpZ2luYXRp
bmdMaW5lKCktPm1hcmtEaXJ0eSgpOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAg
ICAgICAgICAgIGRlbGV0ZSBvbGRGbG9hdGluZ09iamVjdDsKKyAgICAgICAgICAgICAgICB9IGVs
c2UgeworICAgICAgICAgICAgICAgICAgICBjaGFuZ2VMb2dpY2FsVG9wID0gMDsKKyAgICAgICAg
ICAgICAgICAgICAgY2hhbmdlTG9naWNhbEJvdHRvbSA9IG1heChjaGFuZ2VMb2dpY2FsQm90dG9t
LCBsb2dpY2FsQm90dG9tKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAg
ICAgIH0KKworICAgICAgICBSZW5kZXJlclRvRmxvYXRJbmZvTWFwOjppdGVyYXRvciBlbmQgPSBm
bG9hdE1hcC5lbmQoKTsKKyAgICAgICAgZm9yIChSZW5kZXJlclRvRmxvYXRJbmZvTWFwOjppdGVy
YXRvciBpdCA9IGZsb2F0TWFwLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkgeworICAgICAgICAg
ICAgRmxvYXRpbmdPYmplY3QqIGZsb2F0aW5nT2JqZWN0ID0gKCppdCkudmFsdWU7CisgICAgICAg
ICAgICBpZiAoIWZsb2F0aW5nT2JqZWN0LT5pc0Rlc2NlbmRhbnQoKSkgeworICAgICAgICAgICAg
ICAgIGNoYW5nZUxvZ2ljYWxUb3AgPSAwOworICAgICAgICAgICAgICAgIGNoYW5nZUxvZ2ljYWxC
b3R0b20gPSBtYXgoY2hhbmdlTG9naWNhbEJvdHRvbSwgZmxvYXRpbmdPYmplY3QtPmxvZ2ljYWxC
b3R0b20oaXNIb3Jpem9udGFsV3JpdGluZ01vZGUoKSkpOworICAgICAgICAgICAgfQorICAgICAg
ICB9CisgICAgICAgIGRlbGV0ZUFsbFZhbHVlcyhmbG9hdE1hcCk7CisKKyAgICAgICAgbWFya0xp
bmVzRGlydHlJbkJsb2NrUmFuZ2UoY2hhbmdlTG9naWNhbFRvcCwgY2hhbmdlTG9naWNhbEJvdHRv
bSk7CisgICAgfSBlbHNlIGlmICghb2xkSW50cnVkaW5nRmxvYXRTZXQuaXNFbXB0eSgpKSB7Cisg
ICAgICAgIC8vIElmIHRoZXJlIGFyZSBwcmV2aW91c2x5IGludHJ1ZGluZyBmbG9hdHMgdGhhdCBu
byBsb25nZXIgaW50cnVkZSwgdGhlbiBjaGlsZHJlbiB3aXRoIGZsb2F0cworICAgICAgICAvLyBz
aG91bGQgYWxzbyBnZXQgbGF5b3V0IGJlY2F1c2UgdGhleSBtaWdodCBuZWVkIHRoZWlyIGZsb2F0
aW5nIG9iamVjdCBsaXN0cyBjbGVhcmVkLgorICAgICAgICBpZiAobV9mbG9hdGluZ09iamVjdHMt
PnNldCgpLnNpemUoKSA8IG9sZEludHJ1ZGluZ0Zsb2F0U2V0LnNpemUoKSkKKyAgICAgICAgICAg
IG1hcmtBbGxEZXNjZW5kYW50c1dpdGhGbG9hdHNGb3JMYXlvdXQoKTsKKyAgICAgICAgZWxzZSB7
CisgICAgICAgICAgICBjb25zdCBGbG9hdGluZ09iamVjdFNldCYgZmxvYXRpbmdPYmplY3RTZXQg
PSBtX2Zsb2F0aW5nT2JqZWN0cy0+c2V0KCk7CisgICAgICAgICAgICBGbG9hdGluZ09iamVjdFNl
dEl0ZXJhdG9yIGVuZCA9IGZsb2F0aW5nT2JqZWN0U2V0LmVuZCgpOworICAgICAgICAgICAgZm9y
IChGbG9hdGluZ09iamVjdFNldEl0ZXJhdG9yIGl0ID0gZmxvYXRpbmdPYmplY3RTZXQuYmVnaW4o
KTsgaXQgIT0gZW5kICYmICFvbGRJbnRydWRpbmdGbG9hdFNldC5pc0VtcHR5KCk7ICsraXQpCisg
ICAgICAgICAgICAgICAgb2xkSW50cnVkaW5nRmxvYXRTZXQucmVtb3ZlKCgqaXQpLT5yZW5kZXJl
cigpKTsKKyAgICAgICAgICAgIGlmICghb2xkSW50cnVkaW5nRmxvYXRTZXQuaXNFbXB0eSgpKQor
ICAgICAgICAgICAgICAgIG1hcmtBbGxEZXNjZW5kYW50c1dpdGhGbG9hdHNGb3JMYXlvdXQoKTsK
KyAgICAgICAgfQorICAgIH0KK30KKwordm9pZCBSZW5kZXJCbG9ja0Zsb3c6OmxheW91dEJsb2Nr
KGJvb2wgcmVsYXlvdXRDaGlsZHJlbiwgTGF5b3V0VW5pdCBwYWdlTG9naWNhbEhlaWdodCkKK3sK
KyAgICBBU1NFUlQobmVlZHNMYXlvdXQoKSk7CisKKyAgICBpZiAoIXJlbGF5b3V0Q2hpbGRyZW4g
JiYgc2ltcGxpZmllZExheW91dCgpKQorICAgICAgICByZXR1cm47CisKKyAgICBMYXlvdXRSZXBh
aW50ZXIgcmVwYWludGVyKCp0aGlzLCBjaGVja0ZvclJlcGFpbnREdXJpbmdMYXlvdXQoKSk7CisK
KyAgICBpZiAodXBkYXRlTG9naWNhbFdpZHRoQW5kQ29sdW1uV2lkdGgoKSkKKyAgICAgICAgcmVs
YXlvdXRDaGlsZHJlbiA9IHRydWU7CisKKyAgICBjbGVhckZsb2F0cygpOworCisgICAgTGF5b3V0
VW5pdCBwcmV2aW91c0hlaWdodCA9IGxvZ2ljYWxIZWlnaHQoKTsKKyAgICAvLyBGSVhNRTogc2hv
dWxkIHRoaXMgc3RhcnQgb3V0IGFzIGJvcmRlckFuZFBhZGRpbmdMb2dpY2FsSGVpZ2h0KCkgKyBz
Y3JvbGxiYXJMb2dpY2FsSGVpZ2h0KCksCisgICAgLy8gZm9yIGNvbnNpc3RlbmN5IHdpdGggb3Ro
ZXIgcmVuZGVyIGNsYXNzZXM/CisgICAgc2V0TG9naWNhbEhlaWdodCgwKTsKKworICAgIGJvb2wg
cGFnZUxvZ2ljYWxIZWlnaHRDaGFuZ2VkID0gZmFsc2U7CisgICAgYm9vbCBoYXNTcGVjaWZpZWRQ
YWdlTG9naWNhbEhlaWdodCA9IGZhbHNlOworICAgIGNoZWNrRm9yUGFnaW5hdGlvbkxvZ2ljYWxI
ZWlnaHRDaGFuZ2UocGFnZUxvZ2ljYWxIZWlnaHQsIHBhZ2VMb2dpY2FsSGVpZ2h0Q2hhbmdlZCwg
aGFzU3BlY2lmaWVkUGFnZUxvZ2ljYWxIZWlnaHQpOworCisgICAgUmVuZGVyU3R5bGUqIHN0eWxl
VG9Vc2UgPSBzdHlsZSgpOworICAgIExheW91dFN0YXRlTWFpbnRhaW5lciBzdGF0ZVB1c2hlcigm
dmlldygpLCB0aGlzLCBsb2NhdGlvbk9mZnNldCgpLCBoYXNDb2x1bW5zKCkgfHwgaGFzVHJhbnNm
b3JtKCkgfHwgaGFzUmVmbGVjdGlvbigpIHx8IHN0eWxlVG9Vc2UtPmlzRmxpcHBlZEJsb2Nrc1dy
aXRpbmdNb2RlKCksIHBhZ2VMb2dpY2FsSGVpZ2h0LCBwYWdlTG9naWNhbEhlaWdodENoYW5nZWQs
IGNvbHVtbkluZm8oKSk7CisKKyAgICAvLyBSZWdpb25zIGNoYW5naW5nIHdpZHRocyBjYW4gZm9y
Y2UgdXMgdG8gcmVsYXlvdXQgb3VyIGNoaWxkcmVuLgorICAgIFJlbmRlckZsb3dUaHJlYWQqIGZs
b3dUaHJlYWQgPSBmbG93VGhyZWFkQ29udGFpbmluZ0Jsb2NrKCk7CisgICAgaWYgKGxvZ2ljYWxX
aWR0aENoYW5nZWRJblJlZ2lvbnMoZmxvd1RocmVhZCkpCisgICAgICAgIHJlbGF5b3V0Q2hpbGRy
ZW4gPSB0cnVlOworICAgIGlmICh1cGRhdGVTaGFwZXNCZWZvcmVCbG9ja0xheW91dCgpKQorICAg
ICAgICByZWxheW91dENoaWxkcmVuID0gdHJ1ZTsKKworICAgIC8vIFdlIHVzZSBmb3VyIHZhbHVl
cywgbWF4VG9wUG9zLCBtYXhUb3BOZWcsIG1heEJvdHRvbVBvcywgYW5kIG1heEJvdHRvbU5lZywg
dG8gdHJhY2sKKyAgICAvLyBvdXIgY3VycmVudCBtYXhpbWFsIHBvc2l0aXZlIGFuZCBuZWdhdGl2
ZSBtYXJnaW5zLiBUaGVzZSB2YWx1ZXMgYXJlIHVzZWQgd2hlbiB3ZQorICAgIC8vIGFyZSBjb2xs
YXBzZWQgd2l0aCBhZGphY2VudCBibG9ja3MsIHNvIGZvciBleGFtcGxlLCBpZiB5b3UgaGF2ZSBi
bG9jayBBIGFuZCBCCisgICAgLy8gY29sbGFwc2luZyB0b2dldGhlciwgdGhlbiB5b3UnZCB0YWtl
IHRoZSBtYXhpbWFsIHBvc2l0aXZlIG1hcmdpbiBmcm9tIGJvdGggQSBhbmQgQgorICAgIC8vIGFu
ZCBzdWJ0cmFjdCBpdCBmcm9tIHRoZSBtYXhpbWFsIG5lZ2F0aXZlIG1hcmdpbiBmcm9tIGJvdGgg
QSBhbmQgQiB0byBnZXQgdGhlCisgICAgLy8gdHJ1ZSBjb2xsYXBzZWQgbWFyZ2luLiBUaGlzIGFs
Z29yaXRobSBpcyByZWN1cnNpdmUsIHNvIHdoZW4gd2UgZmluaXNoIGxheW91dCgpCisgICAgLy8g
b3VyIGJsb2NrIGtub3dzIGl0cyBjdXJyZW50IG1heGltYWwgcG9zaXRpdmUvbmVnYXRpdmUgdmFs
dWVzLgorICAgIC8vCisgICAgLy8gU3RhcnQgb3V0IGJ5IHNldHRpbmcgb3VyIG1hcmdpbiB2YWx1
ZXMgdG8gb3VyIGN1cnJlbnQgbWFyZ2lucy4gVGFibGUgY2VsbHMgaGF2ZQorICAgIC8vIG5vIG1h
cmdpbnMsIHNvIHdlIGRvbid0IGZpbGwgaW4gdGhlIHZhbHVlcyBmb3IgdGFibGUgY2VsbHMuCisg
ICAgYm9vbCBpc0NlbGwgPSBpc1RhYmxlQ2VsbCgpOworICAgIGlmICghaXNDZWxsKSB7CisgICAg
ICAgIGluaXRNYXhNYXJnaW5WYWx1ZXMoKTsKKyAgICAgICAgCisgICAgICAgIHNldEhhc01hcmdp
bkJlZm9yZVF1aXJrKHN0eWxlVG9Vc2UtPmhhc01hcmdpbkJlZm9yZVF1aXJrKCkpOworICAgICAg
ICBzZXRIYXNNYXJnaW5BZnRlclF1aXJrKHN0eWxlVG9Vc2UtPmhhc01hcmdpbkFmdGVyUXVpcmso
KSk7CisgICAgICAgIHNldFBhZ2luYXRpb25TdHJ1dCgwKTsKKyAgICB9CisKKyAgICBMYXlvdXRV
bml0IHJlcGFpbnRMb2dpY2FsVG9wID0gMDsKKyAgICBMYXlvdXRVbml0IHJlcGFpbnRMb2dpY2Fs
Qm90dG9tID0gMDsKKyAgICBMYXlvdXRVbml0IG1heEZsb2F0TG9naWNhbEJvdHRvbSA9IDA7Cisg
ICAgaWYgKCFmaXJzdENoaWxkKCkgJiYgIWlzQW5vbnltb3VzQmxvY2soKSkKKyAgICAgICAgc2V0
Q2hpbGRyZW5JbmxpbmUodHJ1ZSk7CisgICAgaWYgKGNoaWxkcmVuSW5saW5lKCkpCisgICAgICAg
IGxheW91dElubGluZUNoaWxkcmVuKHJlbGF5b3V0Q2hpbGRyZW4sIHJlcGFpbnRMb2dpY2FsVG9w
LCByZXBhaW50TG9naWNhbEJvdHRvbSk7CisgICAgZWxzZQorICAgICAgICBsYXlvdXRCbG9ja0No
aWxkcmVuKHJlbGF5b3V0Q2hpbGRyZW4sIG1heEZsb2F0TG9naWNhbEJvdHRvbSk7CisKKyAgICAv
LyBFeHBhbmQgb3VyIGludHJpbnNpYyBoZWlnaHQgdG8gZW5jb21wYXNzIGZsb2F0cy4KKyAgICBM
YXlvdXRVbml0IHRvQWRkID0gYm9yZGVyQW5kUGFkZGluZ0FmdGVyKCkgKyBzY3JvbGxiYXJMb2dp
Y2FsSGVpZ2h0KCk7CisgICAgaWYgKGxvd2VzdEZsb2F0TG9naWNhbEJvdHRvbSgpID4gKGxvZ2lj
YWxIZWlnaHQoKSAtIHRvQWRkKSAmJiBleHBhbmRzVG9FbmNsb3NlT3ZlcmhhbmdpbmdGbG9hdHMo
KSkKKyAgICAgICAgc2V0TG9naWNhbEhlaWdodChsb3dlc3RGbG9hdExvZ2ljYWxCb3R0b20oKSAr
IHRvQWRkKTsKKyAgICAKKyAgICBpZiAocmVsYXlvdXRGb3JQYWdpbmF0aW9uKGhhc1NwZWNpZmll
ZFBhZ2VMb2dpY2FsSGVpZ2h0LCBwYWdlTG9naWNhbEhlaWdodCwgc3RhdGVQdXNoZXIpIHx8IHJl
bGF5b3V0VG9Bdm9pZFdpZG93cyhzdGF0ZVB1c2hlcikpIHsKKyAgICAgICAgQVNTRVJUKCFzaG91
bGRCcmVha0F0TGluZVRvQXZvaWRXaWRvdygpKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKwor
ICAgIC8vIENhbGN1bGF0ZSBvdXIgbmV3IGhlaWdodC4KKyAgICBMYXlvdXRVbml0IG9sZEhlaWdo
dCA9IGxvZ2ljYWxIZWlnaHQoKTsKKyAgICBMYXlvdXRVbml0IG9sZENsaWVudEFmdGVyRWRnZSA9
IGNsaWVudExvZ2ljYWxCb3R0b20oKTsKKworICAgIC8vIEJlZm9yZSB1cGRhdGluZyB0aGUgZmlu
YWwgc2l6ZSBvZiB0aGUgZmxvdyB0aHJlYWQgbWFrZSBzdXJlIGEgZm9yY2VkIGJyZWFrIGlzIGFw
cGxpZWQgYWZ0ZXIgdGhlIGNvbnRlbnQuCisgICAgLy8gVGhpcyBlbnN1cmVzIHRoZSBzaXplIGlu
Zm9ybWF0aW9uIGlzIGNvcnJlY3RseSBjb21wdXRlZCBmb3IgdGhlIGxhc3QgYXV0by1oZWlnaHQg
cmVnaW9uIHJlY2VpdmluZyBjb250ZW50LgorICAgIGlmIChpc1JlbmRlckZsb3dUaHJlYWQoKSkK
KyAgICAgICAgdG9SZW5kZXJGbG93VGhyZWFkKHRoaXMpLT5hcHBseUJyZWFrQWZ0ZXJDb250ZW50
KG9sZENsaWVudEFmdGVyRWRnZSk7CisKKyAgICB1cGRhdGVMb2dpY2FsSGVpZ2h0KCk7CisgICAg
TGF5b3V0VW5pdCBuZXdIZWlnaHQgPSBsb2dpY2FsSGVpZ2h0KCk7CisgICAgaWYgKG9sZEhlaWdo
dCAhPSBuZXdIZWlnaHQpIHsKKyAgICAgICAgaWYgKG9sZEhlaWdodCA+IG5ld0hlaWdodCAmJiBt
YXhGbG9hdExvZ2ljYWxCb3R0b20gPiBuZXdIZWlnaHQgJiYgIWNoaWxkcmVuSW5saW5lKCkpIHsK
KyAgICAgICAgICAgIC8vIE9uZSBvZiBvdXIgY2hpbGRyZW4ncyBmbG9hdHMgbWF5IGhhdmUgYmVj
b21lIGFuIG92ZXJoYW5naW5nIGZsb2F0IGZvciB1cy4gV2UgbmVlZCB0byBsb29rIGZvciBpdC4K
KyAgICAgICAgICAgIGZvciAoUmVuZGVyT2JqZWN0KiBjaGlsZCA9IGZpcnN0Q2hpbGQoKTsgY2hp
bGQ7IGNoaWxkID0gY2hpbGQtPm5leHRTaWJsaW5nKCkpIHsKKyAgICAgICAgICAgICAgICBpZiAo
Y2hpbGQtPmlzUmVuZGVyQmxvY2tGbG93KCkgJiYgIWNoaWxkLT5pc0Zsb2F0aW5nT3JPdXRPZkZs
b3dQb3NpdGlvbmVkKCkpIHsKKyAgICAgICAgICAgICAgICAgICAgUmVuZGVyQmxvY2sqIGJsb2Nr
ID0gdG9SZW5kZXJCbG9jayhjaGlsZCk7CisgICAgICAgICAgICAgICAgICAgIGlmIChibG9jay0+
bG93ZXN0RmxvYXRMb2dpY2FsQm90dG9tKCkgKyBibG9jay0+bG9naWNhbFRvcCgpID4gbmV3SGVp
Z2h0KQorICAgICAgICAgICAgICAgICAgICAgICAgYWRkT3ZlcmhhbmdpbmdGbG9hdHMoYmxvY2ss
IGZhbHNlKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAg
ICB9CisKKyAgICBib29sIGhlaWdodENoYW5nZWQgPSAocHJldmlvdXNIZWlnaHQgIT0gbmV3SGVp
Z2h0KTsKKyAgICBpZiAoaGVpZ2h0Q2hhbmdlZCkKKyAgICAgICAgcmVsYXlvdXRDaGlsZHJlbiA9
IHRydWU7CisKKyAgICBsYXlvdXRQb3NpdGlvbmVkT2JqZWN0cyhyZWxheW91dENoaWxkcmVuIHx8
IGlzUm9vdCgpKTsKKworICAgIHVwZGF0ZVNoYXBlc0FmdGVyQmxvY2tMYXlvdXQoaGVpZ2h0Q2hh
bmdlZCk7CisKKyAgICAvLyBBZGQgb3ZlcmZsb3cgZnJvbSBjaGlsZHJlbiAodW5sZXNzIHdlJ3Jl
IG11bHRpLWNvbHVtbiwgc2luY2UgaW4gdGhhdCBjYXNlIGFsbCBvdXIgY2hpbGQgb3ZlcmZsb3cg
aXMgY2xpcHBlZCBhbnl3YXkpLgorICAgIGNvbXB1dGVPdmVyZmxvdyhvbGRDbGllbnRBZnRlckVk
Z2UpOworICAgIAorICAgIHN0YXRlUHVzaGVyLnBvcCgpOworCisgICAgZml0Qm9yZGVyVG9MaW5l
c0lmTmVlZGVkKCk7CisKKyAgICBpZiAodmlldygpLmxheW91dFN0YXRlKCktPm1fcGFnZUxvZ2lj
YWxIZWlnaHQpCisgICAgICAgIHNldFBhZ2VMb2dpY2FsT2Zmc2V0KHZpZXcoKS5sYXlvdXRTdGF0
ZSgpLT5wYWdlTG9naWNhbE9mZnNldCh0aGlzLCBsb2dpY2FsVG9wKCkpKTsKKworICAgIHVwZGF0
ZUxheWVyVHJhbnNmb3JtKCk7CisKKyAgICAvLyBVcGRhdGUgb3VyIHNjcm9sbCBpbmZvcm1hdGlv
biBpZiB3ZSdyZSBvdmVyZmxvdzphdXRvL3Njcm9sbC9oaWRkZW4gbm93IHRoYXQgd2Uga25vdyBp
ZgorICAgIC8vIHdlIG92ZXJmbG93IG9yIG5vdC4KKyAgICB1cGRhdGVTY3JvbGxJbmZvQWZ0ZXJM
YXlvdXQoKTsKKworICAgIC8vIEZJWE1FOiBUaGlzIHJlcGFpbnQgbG9naWMgc2hvdWxkIGJlIG1v
dmVkIGludG8gYSBzZXBhcmF0ZSBoZWxwZXIgZnVuY3Rpb24hCisgICAgLy8gUmVwYWludCB3aXRo
IG91ciBuZXcgYm91bmRzIGlmIHRoZXkgYXJlIGRpZmZlcmVudCBmcm9tIG91ciBvbGQgYm91bmRz
LgorICAgIGJvb2wgZGlkRnVsbFJlcGFpbnQgPSByZXBhaW50ZXIucmVwYWludEFmdGVyTGF5b3V0
KCk7CisgICAgaWYgKCFkaWRGdWxsUmVwYWludCAmJiByZXBhaW50TG9naWNhbFRvcCAhPSByZXBh
aW50TG9naWNhbEJvdHRvbSAmJiAoc3R5bGVUb1VzZS0+dmlzaWJpbGl0eSgpID09IFZJU0lCTEUg
fHwgZW5jbG9zaW5nTGF5ZXIoKS0+aGFzVmlzaWJsZUNvbnRlbnQoKSkpIHsKKyAgICAgICAgLy8g
RklYTUU6IFdlIGNvdWxkIHRpZ2h0ZW4gdXAgdGhlIGxlZnQgYW5kIHJpZ2h0IGludmFsaWRhdGlv
biBwb2ludHMgaWYgd2UgbGV0IGxheW91dElubGluZUNoaWxkcmVuIGZpbGwgdGhlbSBpbiBiYXNl
ZCBvZmYgdGhlIHBhcnRpY3VsYXIgbGluZXMKKyAgICAgICAgLy8gaXQgaGFkIHRvIGxheSBvdXQu
IFdlIHdvdWxkbid0IG5lZWQgdGhlIGhhc092ZXJmbG93Q2xpcCgpIGhhY2sgaW4gdGhhdCBjYXNl
IGVpdGhlci4KKyAgICAgICAgTGF5b3V0VW5pdCByZXBhaW50TG9naWNhbExlZnQgPSBsb2dpY2Fs
TGVmdFZpc3VhbE92ZXJmbG93KCk7CisgICAgICAgIExheW91dFVuaXQgcmVwYWludExvZ2ljYWxS
aWdodCA9IGxvZ2ljYWxSaWdodFZpc3VhbE92ZXJmbG93KCk7CisgICAgICAgIGlmIChoYXNPdmVy
Zmxvd0NsaXAoKSkgeworICAgICAgICAgICAgLy8gSWYgd2UgaGF2ZSBjbGlwcGVkIG92ZXJmbG93
LCB3ZSBzaG91bGQgdXNlIGxheW91dCBvdmVyZmxvdyBhcyB3ZWxsLCBzaW5jZSB2aXN1YWwgb3Zl
cmZsb3cgZnJvbSBsaW5lcyBkaWRuJ3QgcHJvcGFnYXRlIHRvIG91ciBibG9jaydzIG92ZXJmbG93
LgorICAgICAgICAgICAgLy8gTm90ZSB0aGUgb2xkIGNvZGUgZGlkIHRoaXMgYXMgd2VsbCBidXQg
ZXZlbiBmb3Igb3ZlcmZsb3c6dmlzaWJsZS4gVGhlIGFkZGl0aW9uIG9mIGhhc092ZXJmbG93Q2xp
cCgpIGF0IGxlYXN0IHRpZ2h0ZW5zIHVwIHRoZSBoYWNrIGEgYml0LgorICAgICAgICAgICAgLy8g
bGF5b3V0SW5saW5lQ2hpbGRyZW4gc2hvdWxkIGJlIHBhdGNoZWQgdG8gY29tcHV0ZSB0aGUgZW50
aXJlIHJlcGFpbnQgcmVjdC4KKyAgICAgICAgICAgIHJlcGFpbnRMb2dpY2FsTGVmdCA9IG1pbihy
ZXBhaW50TG9naWNhbExlZnQsIGxvZ2ljYWxMZWZ0TGF5b3V0T3ZlcmZsb3coKSk7CisgICAgICAg
ICAgICByZXBhaW50TG9naWNhbFJpZ2h0ID0gbWF4KHJlcGFpbnRMb2dpY2FsUmlnaHQsIGxvZ2lj
YWxSaWdodExheW91dE92ZXJmbG93KCkpOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBM
YXlvdXRSZWN0IHJlcGFpbnRSZWN0OworICAgICAgICBpZiAoaXNIb3Jpem9udGFsV3JpdGluZ01v
ZGUoKSkKKyAgICAgICAgICAgIHJlcGFpbnRSZWN0ID0gTGF5b3V0UmVjdChyZXBhaW50TG9naWNh
bExlZnQsIHJlcGFpbnRMb2dpY2FsVG9wLCByZXBhaW50TG9naWNhbFJpZ2h0IC0gcmVwYWludExv
Z2ljYWxMZWZ0LCByZXBhaW50TG9naWNhbEJvdHRvbSAtIHJlcGFpbnRMb2dpY2FsVG9wKTsKKyAg
ICAgICAgZWxzZQorICAgICAgICAgICAgcmVwYWludFJlY3QgPSBMYXlvdXRSZWN0KHJlcGFpbnRM
b2dpY2FsVG9wLCByZXBhaW50TG9naWNhbExlZnQsIHJlcGFpbnRMb2dpY2FsQm90dG9tIC0gcmVw
YWludExvZ2ljYWxUb3AsIHJlcGFpbnRMb2dpY2FsUmlnaHQgLSByZXBhaW50TG9naWNhbExlZnQp
OworCisgICAgICAgIC8vIFRoZSByZXBhaW50IHJlY3QgbWF5IGJlIHNwbGl0IGFjcm9zcyBjb2x1
bW5zLCBpbiB3aGljaCBjYXNlIGFkanVzdFJlY3RGb3JDb2x1bW5zKCkgd2lsbCByZXR1cm4gdGhl
IHVuaW9uLgorICAgICAgICBhZGp1c3RSZWN0Rm9yQ29sdW1ucyhyZXBhaW50UmVjdCk7CisKKyAg
ICAgICAgcmVwYWludFJlY3QuaW5mbGF0ZShtYXhpbWFsT3V0bGluZVNpemUoUGFpbnRQaGFzZU91
dGxpbmUpKTsKKyAgICAgICAgCisgICAgICAgIGlmIChoYXNPdmVyZmxvd0NsaXAoKSkgeworICAg
ICAgICAgICAgLy8gQWRqdXN0IHJlcGFpbnQgcmVjdCBmb3Igc2Nyb2xsIG9mZnNldAorICAgICAg
ICAgICAgcmVwYWludFJlY3QubW92ZSgtc2Nyb2xsZWRDb250ZW50T2Zmc2V0KCkpOworCisgICAg
ICAgICAgICAvLyBEb24ndCBhbGxvdyB0aGlzIHJlY3QgdG8gc3BpbGwgb3V0IG9mIG91ciBvdmVy
ZmxvdyBib3guCisgICAgICAgICAgICByZXBhaW50UmVjdC5pbnRlcnNlY3QoTGF5b3V0UmVjdChM
YXlvdXRQb2ludCgpLCBzaXplKCkpKTsKKyAgICAgICAgfQorCisgICAgICAgIC8vIE1ha2Ugc3Vy
ZSB0aGUgcmVjdCBpcyBzdGlsbCBub24tZW1wdHkgYWZ0ZXIgaW50ZXJzZWN0aW5nIGZvciBvdmVy
ZmxvdyBhYm92ZQorICAgICAgICBpZiAoIXJlcGFpbnRSZWN0LmlzRW1wdHkoKSkgeworICAgICAg
ICAgICAgcmVwYWludFJlY3RhbmdsZShyZXBhaW50UmVjdCk7IC8vIFdlIG5lZWQgdG8gZG8gYSBw
YXJ0aWFsIHJlcGFpbnQgb2Ygb3VyIGNvbnRlbnQuCisgICAgICAgICAgICBpZiAoaGFzUmVmbGVj
dGlvbigpKQorICAgICAgICAgICAgICAgIHJlcGFpbnRSZWN0YW5nbGUocmVmbGVjdGVkUmVjdChy
ZXBhaW50UmVjdCkpOworICAgICAgICB9CisgICAgfQorCisgICAgc2V0TmVlZHNMYXlvdXQoZmFs
c2UpOworfQorCit2b2lkIFJlbmRlckJsb2NrRmxvdzo6bGF5b3V0QmxvY2tDaGlsZHJlbihib29s
IHJlbGF5b3V0Q2hpbGRyZW4sIExheW91dFVuaXQmIG1heEZsb2F0TG9naWNhbEJvdHRvbSkKK3sK
KyAgICBkaXJ0eUZvckxheW91dEZyb21QZXJjZW50YWdlSGVpZ2h0RGVzY2VuZGFudHMoKTsKKwor
ICAgIExheW91dFVuaXQgYmVmb3JlRWRnZSA9IGJvcmRlckFuZFBhZGRpbmdCZWZvcmUoKTsKKyAg
ICBMYXlvdXRVbml0IGFmdGVyRWRnZSA9IGJvcmRlckFuZFBhZGRpbmdBZnRlcigpICsgc2Nyb2xs
YmFyTG9naWNhbEhlaWdodCgpOworCisgICAgc2V0TG9naWNhbEhlaWdodChiZWZvcmVFZGdlKTsK
KyAgICAKKyAgICAvLyBMYXkgb3V0IG91ciBoeXBvdGhldGljYWwgZ3JpZCBsaW5lIGFzIHRob3Vn
aCBpdCBvY2N1cnMgYXQgdGhlIHRvcCBvZiB0aGUgYmxvY2suCisgICAgaWYgKHZpZXcoKS5sYXlv
dXRTdGF0ZSgpLT5saW5lR3JpZCgpID09IHRoaXMpCisgICAgICAgIGxheW91dExpbmVHcmlkQm94
KCk7CisKKyAgICAvLyBUaGUgbWFyZ2luIHN0cnVjdCBjYWNoZXMgYWxsIG91ciBjdXJyZW50IG1h
cmdpbiBjb2xsYXBzaW5nIHN0YXRlLgorICAgIE1hcmdpbkluZm8gbWFyZ2luSW5mbyh0aGlzLCBi
ZWZvcmVFZGdlLCBhZnRlckVkZ2UpOworCisgICAgLy8gRmllbGRzZXRzIG5lZWQgdG8gZmluZCB0
aGVpciBsZWdlbmQgYW5kIHBvc2l0aW9uIGl0IGluc2lkZSB0aGUgYm9yZGVyIG9mIHRoZSBvYmpl
Y3QuCisgICAgLy8gVGhlIGxlZ2VuZCB0aGVuIGdldHMgc2tpcHBlZCBkdXJpbmcgbm9ybWFsIGxh
eW91dC4gVGhlIHNhbWUgaXMgdHJ1ZSBmb3IgcnVieSB0ZXh0LgorICAgIC8vIEl0IGRvZXNuJ3Qg
Z2V0IGluY2x1ZGVkIGluIHRoZSBub3JtYWwgbGF5b3V0IHByb2Nlc3MgYnV0IGlzIGluc3RlYWQg
c2tpcHBlZC4KKyAgICBSZW5kZXJPYmplY3QqIGNoaWxkVG9FeGNsdWRlID0gbGF5b3V0U3BlY2lh
bEV4Y2x1ZGVkQ2hpbGQocmVsYXlvdXRDaGlsZHJlbik7CisKKyAgICBMYXlvdXRVbml0IHByZXZp
b3VzRmxvYXRMb2dpY2FsQm90dG9tID0gMDsKKyAgICBtYXhGbG9hdExvZ2ljYWxCb3R0b20gPSAw
OworCisgICAgUmVuZGVyQm94KiBuZXh0ID0gZmlyc3RDaGlsZEJveCgpOworCisgICAgd2hpbGUg
KG5leHQpIHsKKyAgICAgICAgUmVuZGVyQm94KiBjaGlsZCA9IG5leHQ7CisgICAgICAgIG5leHQg
PSBjaGlsZC0+bmV4dFNpYmxpbmdCb3goKTsKKworICAgICAgICBpZiAoY2hpbGRUb0V4Y2x1ZGUg
PT0gY2hpbGQpCisgICAgICAgICAgICBjb250aW51ZTsgLy8gU2tpcCB0aGlzIGNoaWxkLCBzaW5j
ZSBpdCB3aWxsIGJlIHBvc2l0aW9uZWQgYnkgdGhlIHNwZWNpYWxpemVkIHN1YmNsYXNzIChmaWVs
ZHNldHMgYW5kIHJ1YnkgcnVucykuCisKKyAgICAgICAgdXBkYXRlQmxvY2tDaGlsZERpcnR5Qml0
c0JlZm9yZUxheW91dChyZWxheW91dENoaWxkcmVuLCBjaGlsZCk7CisKKyAgICAgICAgaWYgKGNo
aWxkLT5pc091dE9mRmxvd1Bvc2l0aW9uZWQoKSkgeworICAgICAgICAgICAgY2hpbGQtPmNvbnRh
aW5pbmdCbG9jaygpLT5pbnNlcnRQb3NpdGlvbmVkT2JqZWN0KGNoaWxkKTsKKyAgICAgICAgICAg
IGFkanVzdFBvc2l0aW9uZWRCbG9jayhjaGlsZCwgbWFyZ2luSW5mbyk7CisgICAgICAgICAgICBj
b250aW51ZTsKKyAgICAgICAgfQorICAgICAgICBpZiAoY2hpbGQtPmlzRmxvYXRpbmcoKSkgewor
ICAgICAgICAgICAgaW5zZXJ0RmxvYXRpbmdPYmplY3QoY2hpbGQpOworICAgICAgICAgICAgYWRq
dXN0RmxvYXRpbmdCbG9jayhtYXJnaW5JbmZvKTsKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAg
ICAgICB9CisKKyAgICAgICAgLy8gTGF5IG91dCB0aGUgY2hpbGQuCisgICAgICAgIGxheW91dEJs
b2NrQ2hpbGQoY2hpbGQsIG1hcmdpbkluZm8sIHByZXZpb3VzRmxvYXRMb2dpY2FsQm90dG9tLCBt
YXhGbG9hdExvZ2ljYWxCb3R0b20pOworICAgIH0KKyAgICAKKyAgICAvLyBOb3cgZG8gdGhlIGhh
bmRsaW5nIG9mIHRoZSBib3R0b20gb2YgdGhlIGJsb2NrLCBhZGRpbmcgaW4gb3VyIGJvdHRvbSBi
b3JkZXIvcGFkZGluZyBhbmQKKyAgICAvLyBkZXRlcm1pbmluZyB0aGUgY29ycmVjdCBjb2xsYXBz
ZWQgYm90dG9tIG1hcmdpbiBpbmZvcm1hdGlvbi4KKyAgICBoYW5kbGVBZnRlclNpZGVPZkJsb2Nr
KGJlZm9yZUVkZ2UsIGFmdGVyRWRnZSwgbWFyZ2luSW5mbyk7Cit9CisKIH0gLy8gbmFtZXNwYWNl
IFdlYkNvcmUKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCbG9ja0Zsb3cu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2tGbG93
LmgJKHJldmlzaW9uIDE1NTM2NSkKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJC
bG9ja0Zsb3cuaAkod29ya2luZyBjb3B5KQpAQCAtMzMsNiArMzMsMjAgQEAgcHVibGljOgogICAg
IHZpcnR1YWwgflJlbmRlckJsb2NrRmxvdygpOwogICAgIAogICAgIHZpcnR1YWwgYm9vbCBpc1Jl
bmRlckJsb2NrRmxvdygpIGNvbnN0IE9WRVJSSURFIEZJTkFMIHsgcmV0dXJuIHRydWU7IH0KKyAg
ICAKKyAgICB2aXJ0dWFsIHZvaWQgbGF5b3V0QmxvY2soYm9vbCByZWxheW91dENoaWxkcmVuLCBM
YXlvdXRVbml0IHBhZ2VMb2dpY2FsSGVpZ2h0ID0gMCkgT1ZFUlJJREU7CisgICAgCitwcm90ZWN0
ZWQ6CisgICAgLy8gVGhpcyBtZXRob2QgaXMgY2FsbGVkIGF0IHRoZSBzdGFydCBvZiBsYXlvdXQg
dG8gd2lwZSBhd2F5IGFsbCBvZiB0aGUgZmxvYXRzIGluIG91ciBmbG9hdGluZyBvYmplY3RzIGxp
c3QuIEl0IGFsc28KKyAgICAvLyByZXBvcHVsYXRlcyB0aGUgbGlzdCB3aXRoIGFueSBmbG9hdHMg
dGhhdCBpbnRydWRlIGZyb20gcHJldmlvdXMgc2libGluZ3Mgb3IgcGFyZW50cy4gRmxvYXRzIHRo
YXQgd2VyZSBhZGRlZCBieQorICAgIC8vIGRlc2NlbmRhbnRzIGFyZSBnb25lIHdoZW4gdGhpcyBj
YWxsIGNvbXBsZXRlcyBhbmQgd2lsbCBnZXQgYWRkZWQgYmFjayBsYXRlciBvbiBhZnRlciB0aGUg
Y2hpbGRyZW4gaGF2ZSBnb3R0ZW4KKyAgICAvLyBhIHJlbGF5b3V0LgorICAgIHZvaWQgY2xlYXJG
bG9hdHMoKTsKKworICAgIC8vIFJlbmRlckJsb2NrRmxvdyBhbHdheXMgY29udGFpbnMgZWl0aGVy
IGxpbmVzIG9yIHBhcmFncmFwaHMuIFdoZW4gdGhlIGNoaWxkcmVuIGFyZSBhbGwgYmxvY2tzIChl
LmcuIHBhcmFncmFwaHMpLCB3ZSBjYWxsIGxheW91dEJsb2NrQ2hpbGRyZW4uCisgICAgLy8gV2hl
biB0aGUgY2hpbGRyZW4gYXJlIGFyZSBhbGwgaW5saW5lIChlLmcuLCBsaW5lcyksIHdlIGNhbGwg
bGF5b3V0SW5saW5lQ2hpbGRyZW4uCisgICAgdm9pZCBsYXlvdXRCbG9ja0NoaWxkcmVuKGJvb2wg
cmVsYXlvdXRDaGlsZHJlbiwgTGF5b3V0VW5pdCYgbWF4RmxvYXRMb2dpY2FsQm90dG9tKTsKKyAg
ICB2b2lkIGxheW91dElubGluZUNoaWxkcmVuKGJvb2wgcmVsYXlvdXRDaGlsZHJlbiwgTGF5b3V0
VW5pdCYgcmVwYWludExvZ2ljYWxUb3AsIExheW91dFVuaXQmIHJlcGFpbnRMb2dpY2FsQm90dG9t
KTsKIH07CiAKIGlubGluZSBSZW5kZXJCbG9ja0Zsb3cmIHRvUmVuZGVyQmxvY2tGbG93KFJlbmRl
ck9iamVjdCYgb2JqZWN0KQpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJs
b2NrTGluZUxheW91dC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlckJsb2NrTGluZUxheW91dC5jcHAJKHJldmlzaW9uIDE1NTM2NSkKKysrIFNvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCbG9ja0xpbmVMYXlvdXQuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0yMTA5LDcgKzIxMDksNyBAQCB2b2lkIFJlbmRlckJsb2NrOjpyZXBhaW50RGlydHlGbG9h
dHMoVmVjCiAgICAgfQogfQogCi12b2lkIFJlbmRlckJsb2NrOjpsYXlvdXRJbmxpbmVDaGlsZHJl
bihib29sIHJlbGF5b3V0Q2hpbGRyZW4sIExheW91dFVuaXQmIHJlcGFpbnRMb2dpY2FsVG9wLCBM
YXlvdXRVbml0JiByZXBhaW50TG9naWNhbEJvdHRvbSkKK3ZvaWQgUmVuZGVyQmxvY2tGbG93Ojps
YXlvdXRJbmxpbmVDaGlsZHJlbihib29sIHJlbGF5b3V0Q2hpbGRyZW4sIExheW91dFVuaXQmIHJl
cGFpbnRMb2dpY2FsVG9wLCBMYXlvdXRVbml0JiByZXBhaW50TG9naWNhbEJvdHRvbSkKIHsKICAg
ICBzZXRMb2dpY2FsSGVpZ2h0KGJvcmRlckFuZFBhZGRpbmdCZWZvcmUoKSk7CiAgICAgCkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGlzdEJveC5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxpc3RCb3guY3BwCShyZXZpc2lvbiAx
NTUzNjUpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGlzdEJveC5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTgzLDcgKzgzLDcgQEAgY29uc3QgaW50IGRlZmF1bHRTaXplID0gNDsK
IGNvbnN0IGludCBiYXNlbGluZUFkanVzdG1lbnQgPSA3OwogCiBSZW5kZXJMaXN0Qm94OjpSZW5k
ZXJMaXN0Qm94KEVsZW1lbnQqIGVsZW1lbnQpCi0gICAgOiBSZW5kZXJCbG9jayhlbGVtZW50KQor
ICAgIDogUmVuZGVyQmxvY2tGbG93KGVsZW1lbnQpCiAgICAgLCBtX29wdGlvbnNDaGFuZ2VkKHRy
dWUpCiAgICAgLCBtX3Njcm9sbFRvUmV2ZWFsU2VsZWN0aW9uQWZ0ZXJMYXlvdXQoZmFsc2UpCiAg
ICAgLCBtX2luQXV0b3Njcm9sbChmYWxzZSkKQEAgLTE3MSw3ICsxNzEsNyBAQCB2b2lkIFJlbmRl
ckxpc3RCb3g6OnNlbGVjdGlvbkNoYW5nZWQoKQogdm9pZCBSZW5kZXJMaXN0Qm94OjpsYXlvdXQo
KQogewogICAgIFN0YWNrU3RhdHM6OkxheW91dENoZWNrUG9pbnQgbGF5b3V0Q2hlY2tQb2ludDsK
LSAgICBSZW5kZXJCbG9jazo6bGF5b3V0KCk7CisgICAgUmVuZGVyQmxvY2tGbG93OjpsYXlvdXQo
KTsKIAogICAgIGlmIChtX3ZCYXIpIHsKICAgICAgICAgYm9vbCBlbmFibGVkID0gbnVtVmlzaWJs
ZUl0ZW1zKCkgPCBudW1JdGVtcygpOwpAQCAtMjk4LDcgKzI5OCw3IEBAIHZvaWQgUmVuZGVyTGlz
dEJveDo6cGFpbnRPYmplY3QoUGFpbnRJbmYKICAgICB9CiAKICAgICAvLyBQYWludCB0aGUgY2hp
bGRyZW4uCi0gICAgUmVuZGVyQmxvY2s6OnBhaW50T2JqZWN0KHBhaW50SW5mbywgcGFpbnRPZmZz
ZXQpOworICAgIFJlbmRlckJsb2NrRmxvdzo6cGFpbnRPYmplY3QocGFpbnRJbmZvLCBwYWludE9m
ZnNldCk7CiAKICAgICBzd2l0Y2ggKHBhaW50SW5mby5waGFzZSkgewogICAgIC8vIERlcGVuZGlu
ZyBvbiB3aGV0aGVyIHdlIGhhdmUgb3ZlcmxheSBzY3JvbGxiYXJzIHRoZXkKQEAgLTMyOCw3ICsz
MjgsNyBAQCB2b2lkIFJlbmRlckxpc3RCb3g6OnBhaW50T2JqZWN0KFBhaW50SW5mCiB2b2lkIFJl
bmRlckxpc3RCb3g6OmFkZEZvY3VzUmluZ1JlY3RzKFZlY3RvcjxJbnRSZWN0PiYgcmVjdHMsIGNv
bnN0IExheW91dFBvaW50JiBhZGRpdGlvbmFsT2Zmc2V0LCBjb25zdCBSZW5kZXJMYXllck1vZGVs
T2JqZWN0KiBwYWludENvbnRhaW5lcikKIHsKICAgICBpZiAoIWlzU3BhdGlhbE5hdmlnYXRpb25F
bmFibGVkKCZmcmFtZSgpKSkKLSAgICAgICAgcmV0dXJuIFJlbmRlckJsb2NrOjphZGRGb2N1c1Jp
bmdSZWN0cyhyZWN0cywgYWRkaXRpb25hbE9mZnNldCwgcGFpbnRDb250YWluZXIpOworICAgICAg
ICByZXR1cm4gUmVuZGVyQmxvY2tGbG93OjphZGRGb2N1c1JpbmdSZWN0cyhyZWN0cywgYWRkaXRp
b25hbE9mZnNldCwgcGFpbnRDb250YWluZXIpOwogCiAgICAgSFRNTFNlbGVjdEVsZW1lbnQqIHNl
bGVjdCA9IHNlbGVjdEVsZW1lbnQoKTsKIApAQCAtNjk3LDcgKzY5Nyw3IEBAIHZvaWQgUmVuZGVy
TGlzdEJveDo6c2V0U2Nyb2xsVG9wKGludCBuZXcKIAogYm9vbCBSZW5kZXJMaXN0Qm94Ojpub2Rl
QXRQb2ludChjb25zdCBIaXRUZXN0UmVxdWVzdCYgcmVxdWVzdCwgSGl0VGVzdFJlc3VsdCYgcmVz
dWx0LCBjb25zdCBIaXRUZXN0TG9jYXRpb24mIGxvY2F0aW9uSW5Db250YWluZXIsIGNvbnN0IExh
eW91dFBvaW50JiBhY2N1bXVsYXRlZE9mZnNldCwgSGl0VGVzdEFjdGlvbiBoaXRUZXN0QWN0aW9u
KQogewotICAgIGlmICghUmVuZGVyQmxvY2s6Om5vZGVBdFBvaW50KHJlcXVlc3QsIHJlc3VsdCwg
bG9jYXRpb25JbkNvbnRhaW5lciwgYWNjdW11bGF0ZWRPZmZzZXQsIGhpdFRlc3RBY3Rpb24pKQor
ICAgIGlmICghUmVuZGVyQmxvY2tGbG93Ojpub2RlQXRQb2ludChyZXF1ZXN0LCByZXN1bHQsIGxv
Y2F0aW9uSW5Db250YWluZXIsIGFjY3VtdWxhdGVkT2Zmc2V0LCBoaXRUZXN0QWN0aW9uKSkKICAg
ICAgICAgcmV0dXJuIGZhbHNlOwogICAgIGNvbnN0IFZlY3RvcjxIVE1MRWxlbWVudCo+JiBsaXN0
SXRlbXMgPSBzZWxlY3RFbGVtZW50KCktPmxpc3RJdGVtcygpOwogICAgIGludCBzaXplID0gbnVt
SXRlbXMoKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMaXN0Qm94LmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxpc3RCb3guaAko
cmV2aXNpb24gMTU1MzY1KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxpc3RC
b3guaAkod29ya2luZyBjb3B5KQpAQCAtMzEsMTQgKzMxLDE0IEBACiAjaWZuZGVmIFJlbmRlckxp
c3RCb3hfaAogI2RlZmluZSBSZW5kZXJMaXN0Qm94X2gKIAotI2luY2x1ZGUgIlJlbmRlckJsb2Nr
LmgiCisjaW5jbHVkZSAiUmVuZGVyQmxvY2tGbG93LmgiCiAjaW5jbHVkZSAiU2Nyb2xsYWJsZUFy
ZWEuaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCiBjbGFzcyBIVE1MU2VsZWN0RWxlbWVudDsK
IAotY2xhc3MgUmVuZGVyTGlzdEJveCBGSU5BTCA6IHB1YmxpYyBSZW5kZXJCbG9jaywgcHJpdmF0
ZSBTY3JvbGxhYmxlQXJlYSB7CitjbGFzcyBSZW5kZXJMaXN0Qm94IEZJTkFMIDogcHVibGljIFJl
bmRlckJsb2NrRmxvdywgcHJpdmF0ZSBTY3JvbGxhYmxlQXJlYSB7CiBwdWJsaWM6CiAgICAgZXhw
bGljaXQgUmVuZGVyTGlzdEJveChFbGVtZW50Kik7CiAgICAgdmlydHVhbCB+UmVuZGVyTGlzdEJv
eCgpOwpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclJlZ2lvbi5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclJlZ2lvbi5jcHAJKHJl
dmlzaW9uIDE1NTM2NSkKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJSZWdpb24u
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xODYsNyArMTg2LDcgQEAgdm9pZCBSZW5kZXJSZWdpb246
OnBhaW50T2JqZWN0KFBhaW50SW5mbwogICAgIGlmIChzdHlsZSgpLT52aXNpYmlsaXR5KCkgIT0g
VklTSUJMRSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgUmVuZGVyQmxvY2s6OnBhaW50T2JqZWN0
KHBhaW50SW5mbywgcGFpbnRPZmZzZXQpOworICAgIFJlbmRlckJsb2NrRmxvdzo6cGFpbnRPYmpl
Y3QocGFpbnRJbmZvLCBwYWludE9mZnNldCk7CiAKICAgICBpZiAoIWlzVmFsaWQoKSkKICAgICAg
ICAgcmV0dXJuOwpAQCAtMjc2LDcgKzI3Niw3IEBAIGJvb2wgUmVuZGVyUmVnaW9uOjpzaG91bGRI
YXZlQXV0b0xvZ2ljYWwKICAgICAKIHZvaWQgUmVuZGVyUmVnaW9uOjpzdHlsZURpZENoYW5nZShT
dHlsZURpZmZlcmVuY2UgZGlmZiwgY29uc3QgUmVuZGVyU3R5bGUqIG9sZFN0eWxlKQogewotICAg
IFJlbmRlckJsb2NrOjpzdHlsZURpZENoYW5nZShkaWZmLCBvbGRTdHlsZSk7CisgICAgUmVuZGVy
QmxvY2tGbG93OjpzdHlsZURpZENoYW5nZShkaWZmLCBvbGRTdHlsZSk7CiAKICAgICAvLyBJZiB0
aGUgcmVnaW9uIGlzIG5vdCBhdHRhY2hlZCB0byBhbnkgdGhyZWFkLCB0aGVyZSBpcyBubyBuZWVk
IHRvIGNoZWNrCiAgICAgLy8gd2hldGhlciB0aGUgcmVnaW9uIGhhcyByZWdpb24gc3R5bGluZyBz
aW5jZSBubyBjb250ZW50IHdpbGwgYmUgZGlzcGxheWVkCkBAIC0yOTYsNyArMjk2LDcgQEAgdm9p
ZCBSZW5kZXJSZWdpb246OnN0eWxlRGlkQ2hhbmdlKFN0eWxlRAogdm9pZCBSZW5kZXJSZWdpb246
OmxheW91dEJsb2NrKGJvb2wgcmVsYXlvdXRDaGlsZHJlbiwgTGF5b3V0VW5pdCkKIHsKICAgICBT
dGFja1N0YXRzOjpMYXlvdXRDaGVja1BvaW50IGxheW91dENoZWNrUG9pbnQ7Ci0gICAgUmVuZGVy
QmxvY2s6OmxheW91dEJsb2NrKHJlbGF5b3V0Q2hpbGRyZW4pOworICAgIFJlbmRlckJsb2NrRmxv
dzo6bGF5b3V0QmxvY2socmVsYXlvdXRDaGlsZHJlbik7CiAKICAgICBpZiAoaXNWYWxpZCgpKSB7
CiAgICAgICAgIExheW91dFJlY3Qgb2xkUmVnaW9uUmVjdChmbG93VGhyZWFkUG9ydGlvblJlY3Qo
KSk7CkBAIC01NTMsMTQgKzU1MywxNCBAQCB2b2lkIFJlbmRlclJlZ2lvbjo6cmVzdG9yZVJlZ2lv
bk9iamVjdHNPCiAKIHZvaWQgUmVuZGVyUmVnaW9uOjppbnNlcnRlZEludG9UcmVlKCkKIHsKLSAg
ICBSZW5kZXJCbG9jazo6aW5zZXJ0ZWRJbnRvVHJlZSgpOworICAgIFJlbmRlckJsb2NrRmxvdzo6
aW5zZXJ0ZWRJbnRvVHJlZSgpOwogCiAgICAgYXR0YWNoUmVnaW9uKCk7CiB9CiAKIHZvaWQgUmVu
ZGVyUmVnaW9uOjp3aWxsQmVSZW1vdmVkRnJvbVRyZWUoKQogewotICAgIFJlbmRlckJsb2NrOjp3
aWxsQmVSZW1vdmVkRnJvbVRyZWUoKTsKKyAgICBSZW5kZXJCbG9ja0Zsb3c6OndpbGxCZVJlbW92
ZWRGcm9tVHJlZSgpOwogCiAgICAgZGV0YWNoUmVnaW9uKCk7CiB9CkBAIC02MzksNyArNjM5LDcg
QEAgdm9pZCBSZW5kZXJSZWdpb246OmNsZWFyT2JqZWN0U3R5bGVJblJlZwogdm9pZCBSZW5kZXJS
ZWdpb246OmNvbXB1dGVJbnRyaW5zaWNMb2dpY2FsV2lkdGhzKExheW91dFVuaXQmIG1pbkxvZ2lj
YWxXaWR0aCwgTGF5b3V0VW5pdCYgbWF4TG9naWNhbFdpZHRoKSBjb25zdAogewogICAgIGlmICgh
aXNWYWxpZCgpKSB7Ci0gICAgICAgIFJlbmRlckJsb2NrOjpjb21wdXRlSW50cmluc2ljTG9naWNh
bFdpZHRocyhtaW5Mb2dpY2FsV2lkdGgsIG1heExvZ2ljYWxXaWR0aCk7CisgICAgICAgIFJlbmRl
ckJsb2NrRmxvdzo6Y29tcHV0ZUludHJpbnNpY0xvZ2ljYWxXaWR0aHMobWluTG9naWNhbFdpZHRo
LCBtYXhMb2dpY2FsV2lkdGgpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCkBAIC02NTIsNyAr
NjUyLDcgQEAgdm9pZCBSZW5kZXJSZWdpb246OmNvbXB1dGVQcmVmZXJyZWRMb2dpYwogICAgIEFT
U0VSVChwcmVmZXJyZWRMb2dpY2FsV2lkdGhzRGlydHkoKSk7CiAKICAgICBpZiAoIWlzVmFsaWQo
KSkgewotICAgICAgICBSZW5kZXJCbG9jazo6Y29tcHV0ZVByZWZlcnJlZExvZ2ljYWxXaWR0aHMo
KTsKKyAgICAgICAgUmVuZGVyQmxvY2tGbG93Ojpjb21wdXRlUHJlZmVycmVkTG9naWNhbFdpZHRo
cygpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCkBAIC02OTAsNyArNjkwLDcgQEAgdm9pZCBS
ZW5kZXJSZWdpb246OmdldFJhbmdlcyhWZWN0b3I8UmVmUAogCiB2b2lkIFJlbmRlclJlZ2lvbjo6
dXBkYXRlTG9naWNhbEhlaWdodCgpCiB7Ci0gICAgUmVuZGVyQmxvY2s6OnVwZGF0ZUxvZ2ljYWxI
ZWlnaHQoKTsKKyAgICBSZW5kZXJCbG9ja0Zsb3c6OnVwZGF0ZUxvZ2ljYWxIZWlnaHQoKTsKIAog
ICAgIGlmICghaGFzQXV0b0xvZ2ljYWxIZWlnaHQoKSkKICAgICAgICAgcmV0dXJuOwpAQCAtNzE0
LDcgKzcxNCw3IEBAIHZvaWQgUmVuZGVyUmVnaW9uOjp1cGRhdGVMb2dpY2FsSGVpZ2h0KCkKICAg
ICAgICAgc2V0TG9naWNhbEhlaWdodChuZXdMb2dpY2FsSGVpZ2h0KTsKICAgICAgICAgLy8gUmVj
YWxjdWxhdGUgcG9zaXRpb24gb2YgdGhlIHJlbmRlciBibG9jayBhZnRlciBuZXcgbG9naWNhbCBo
ZWlnaHQgaXMgc2V0LgogICAgICAgICAvLyAobmVlZGVkIGluIGFic29sdXRlIHBvc2l0aW9uaW5n
IGNhc2Ugd2l0aCBib3R0b20gYWxpZ25tZW50IGZvciBleGFtcGxlKQotICAgICAgICBSZW5kZXJC
bG9jazo6dXBkYXRlTG9naWNhbEhlaWdodCgpOworICAgICAgICBSZW5kZXJCbG9ja0Zsb3c6OnVw
ZGF0ZUxvZ2ljYWxIZWlnaHQoKTsKICAgICB9CiB9CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9SZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmUuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmUuY3BwCShy
ZXZpc2lvbiAxNTUzNjUpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGV4dENv
bnRyb2xTaW5nbGVMaW5lLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTM2LDcgKzEzNiw3IEBAIHZv
aWQgUmVuZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5lOjpsYXlvdXQKICAgICAgICAgc2V0TmVlZHNM
YXlvdXRPbkFuY2VzdG9ycyhpbm5lckJsb2NrUmVuZGVyZXIsIHRoaXMpOwogICAgIH0KIAotICAg
IFJlbmRlckJsb2NrOjpsYXlvdXRCbG9jayhmYWxzZSk7CisgICAgUmVuZGVyQmxvY2tGbG93Ojps
YXlvdXRCbG9jayhmYWxzZSk7CiAKICAgICBIVE1MRWxlbWVudCogY29udGFpbmVyID0gY29udGFp
bmVyRWxlbWVudCgpOwogICAgIFJlbmRlckJveCogY29udGFpbmVyUmVuZGVyZXIgPSBjb250YWlu
ZXIgPyBjb250YWluZXItPnJlbmRlckJveCgpIDogMDsKQEAgLTE3Myw3ICsxNzMsNyBAQCB2b2lk
IFJlbmRlclRleHRDb250cm9sU2luZ2xlTGluZTo6bGF5b3V0CiAKICAgICAvLyBJZiB3ZSBuZWVk
IGFub3RoZXIgbGF5b3V0IHBhc3MsIHdlIGhhdmUgY2hhbmdlZCBvbmUgb2YgY2hpbGRyZW4ncyBo
ZWlnaHQgc28gd2UgbmVlZCB0byByZWxheW91dCB0aGVtLgogICAgIGlmIChuZWVkc0xheW91dCgp
KQotICAgICAgICBSZW5kZXJCbG9jazo6bGF5b3V0QmxvY2sodHJ1ZSk7CisgICAgICAgIFJlbmRl
ckJsb2NrRmxvdzo6bGF5b3V0QmxvY2sodHJ1ZSk7CiAKICAgICAvLyBDZW50ZXIgdGhlIGNoaWxk
IGJsb2NrIGluIHRoZSBibG9jayBwcm9ncmVzc2lvbiBkaXJlY3Rpb24gKHZlcnRpY2FsIGNlbnRl
cmluZyBmb3IgaG9yaXpvbnRhbCB0ZXh0IGZpZWxkcykuCiAgICAgaWYgKCFjb250YWluZXIgJiYg
aW5uZXJUZXh0UmVuZGVyZXIgJiYgaW5uZXJUZXh0UmVuZGVyZXItPmhlaWdodCgpICE9IGNvbnRl
bnRMb2dpY2FsSGVpZ2h0KCkpIHsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcv
UmVuZGVyU1ZHVGV4dC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L3N2Zy9SZW5kZXJTVkdUZXh0LmNwcAkocmV2aXNpb24gMTU1MzY1KQorKysgU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdUZXh0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDE0
LDcgKzQxNCwxMCBAQCB2b2lkIFJlbmRlclNWR1RleHQ6OmxheW91dCgpCiAgICAgLy8gRklYTUU6
IFdlIG5lZWQgdG8gZmluZCBhIHdheSB0byBvbmx5IGxheW91dCB0aGUgY2hpbGQgYm94ZXMsIGlm
IG5lZWRlZC4KICAgICBGbG9hdFJlY3Qgb2xkQm91bmRhcmllcyA9IG9iamVjdEJvdW5kaW5nQm94
KCk7CiAgICAgQVNTRVJUKGNoaWxkcmVuSW5saW5lKCkpOwotICAgIGZvcmNlTGF5b3V0SW5saW5l
Q2hpbGRyZW4oKTsKKyAgICBMYXlvdXRVbml0IHJlcGFpbnRMb2dpY2FsVG9wID0gMDsKKyAgICBM
YXlvdXRVbml0IHJlcGFpbnRMb2dpY2FsQm90dG9tID0gMDsKKyAgICBjbGVhckZsb2F0cygpOwor
ICAgIGxheW91dElubGluZUNoaWxkcmVuKHRydWUsIHJlcGFpbnRMb2dpY2FsVG9wLCByZXBhaW50
TG9naWNhbEJvdHRvbSk7CiAKICAgICBpZiAobV9uZWVkc1Jlb3JkZXJpbmcpCiAgICAgICAgIG1f
bmVlZHNSZW9yZGVyaW5nID0gZmFsc2U7Cg==
</data>
<flag name="review"
          id="233119"
          type_id="1"
          status="+"
          setter="dino"
    />
    <flag name="commit-queue"
          id="233120"
          type_id="3"
          status="-"
          setter="webkit-ews"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>211069</attachid>
            <date>2013-09-09 12:58:54 -0700</date>
            <delta_ts>2013-09-09 13:04:02 -0700</delta_ts>
            <desc>Patch to account for Antti&apos;s patch landing. :)</desc>
            <filename>patch.txt</filename>
            <type>text/plain</type>
            <size>53812</size>
            <attacher name="Dave Hyatt">hyatt</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDE1NTM3NCkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDU5IEBACisyMDEzLTA5LTA5ICBEYXZpZCBI
eWF0dCAgPGh5YXR0QGFwcGxlLmNvbT4KKworICAgICAgICBNb3ZlIGxheW91dEJsb2NrIGFuZCBs
YXlvdXRCbG9ja0NoaWxkcmVuIGludG8gUmVuZGVyQmxvY2tGbG93CisgICAgICAgIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMjEwMzYKKworICAgICAgICBSZXZpZXdl
ZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBNb3ZlIGxheW91dEJsb2NrIGludG8gUmVu
ZGVyQmxvY2tGbG93IGFuZCBtYWtlIHRoZSBiYXNlIGNsYXNzIHZlcnNpb24gb2YKKyAgICAgICAg
dGhlIG1ldGhvZCBBU1NFUlRfTk9UX1JFQUNIRUQuIEJlZ2luIHRoZSBwcm9jZXNzIG9mIG1vdmlu
ZyBibG9jayBsYXlvdXQgCisgICAgICAgIGludG8gUmVuZGVyQmxvY2tGbG93IGJ5IHB1dHRpbmcg
bGF5b3V0QmxvY2tDaGlsZHJlbiB0aGVyZSBhcyB3ZWxsLgorICAgICAgICAKKyAgICAgICAgVGhp
cyBwYXRjaCBhbHNvIHB1dHMgY2xlYXJGbG9hdHMgaW50byBSZW5kZXJCbG9ja0Zsb3cgYW5kIGp1
c3QgZGl0Y2hlcyB0aGUKKyAgICAgICAgU1ZHLXNwZWNpZmljIGZvcmNlTGF5b3V0SW5saW5lQ2hp
bGRyZW4gYnkgbGV0dGluZyBSZW5kZXJTVkdUZXh0IGRvIHdoYXQgaXQKKyAgICAgICAgbmVlZHMg
aW4gaXRzIG93biBmaWxlLgorCisgICAgICAgIENvbnZlcnQgUmVuZGVyTGlzdEJveCB0byBiZSBh
IFJlbmRlckJsb2NrRmxvdywgc2luY2UgdGhpcyBpcyBuZWNlc3NhcnkgZm9yIGl0CisgICAgICAg
IHRvIGdldCB0aGUgY29ycmVjdCBsYXlvdXRCbG9jayBtZXRob2QuCisgICAgICAgIAorICAgICAg
ICBQYXRjaCBSZW5kZXJSZWdpb24gdG8gY2FsbCBSZW5kZXJCbG9ja0Zsb3c6OmxheW91dEJsb2Nr
IHJhdGhlciB0aGFuIFJlbmRlckJsb2NrOjpsYXlvdXRCbG9jay4KKyAgICAgICAgCisgICAgICAg
IEZpeCBydW4taW5zIHNvIHRoYXQgdGhleSBjcmVhdGUgYmxvY2sgZmxvd3MgcmF0aGVyIHRoYW4g
YmxvY2tzLCBhbmQgcmVzdHJpY3QgcnVuLWlucyB0bworICAgICAgICBvbmx5IGJlIGJsb2NrIGZs
b3dzLgorCisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckJsb2NrLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OlJlbmRlckJsb2NrOjpsYXlvdXRCbG9jayk6CisgICAgICAgIChXZWJDb3JlOjpSZW5k
ZXJCbG9jazo6Y3JlYXRlUmVwbGFjZW1lbnRSdW5Jbik6CisgICAgICAgIChXZWJDb3JlOjpSZW5k
ZXJCbG9jazo6bW92ZVJ1bkluVW5kZXJTaWJsaW5nQmxvY2tJZk5lZWRlZCk6CisgICAgICAgICog
cmVuZGVyaW5nL1JlbmRlckJsb2NrLmg6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckJsb2Nr
Rmxvdy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCbG9ja0Zsb3c6OmNsZWFyRmxvYXRz
KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJsb2NrRmxvdzo6bGF5b3V0QmxvY2spOgorICAg
ICAgICAoV2ViQ29yZTo6UmVuZGVyQmxvY2tGbG93OjpsYXlvdXRCbG9ja0NoaWxkcmVuKToKKyAg
ICAgICAgKiByZW5kZXJpbmcvUmVuZGVyQmxvY2tGbG93Lmg6CisgICAgICAgICogcmVuZGVyaW5n
L1JlbmRlckJsb2NrTGluZUxheW91dC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCbG9j
a0Zsb3c6OmxheW91dElubGluZUNoaWxkcmVuKToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVy
TGlzdEJveC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMaXN0Qm94OjpSZW5kZXJMaXN0
Qm94KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxpc3RCb3g6OmxheW91dCk6CisgICAgICAg
IChXZWJDb3JlOjpSZW5kZXJMaXN0Qm94OjpwYWludE9iamVjdCk6CisgICAgICAgIChXZWJDb3Jl
OjpSZW5kZXJMaXN0Qm94OjphZGRGb2N1c1JpbmdSZWN0cyk6CisgICAgICAgIChXZWJDb3JlOjpS
ZW5kZXJMaXN0Qm94Ojpub2RlQXRQb2ludCk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckxp
c3RCb3guaDoKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyUmVnaW9uLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OlJlbmRlclJlZ2lvbjo6cGFpbnRPYmplY3QpOgorICAgICAgICAoV2ViQ29yZTo6
UmVuZGVyUmVnaW9uOjpzdHlsZURpZENoYW5nZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJS
ZWdpb246OmxheW91dEJsb2NrKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclJlZ2lvbjo6aW5z
ZXJ0ZWRJbnRvVHJlZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJSZWdpb246OndpbGxCZVJl
bW92ZWRGcm9tVHJlZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJSZWdpb246OmNvbXB1dGVJ
bnRyaW5zaWNMb2dpY2FsV2lkdGhzKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclJlZ2lvbjo6
Y29tcHV0ZVByZWZlcnJlZExvZ2ljYWxXaWR0aHMpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVy
UmVnaW9uOjp1cGRhdGVMb2dpY2FsSGVpZ2h0KToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVy
VGV4dENvbnRyb2xTaW5nbGVMaW5lLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRleHRD
b250cm9sU2luZ2xlTGluZTo6bGF5b3V0KToKKyAgICAgICAgKiByZW5kZXJpbmcvc3ZnL1JlbmRl
clNWR1RleHQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU1ZHVGV4dDo6bGF5b3V0KToK
KwogMjAxMy0wOS0wOSAgQW50dGkgS29pdmlzdG8gIDxhbnR0aUBhcHBsZS5jb20+CiAKICAgICAg
ICAgSGlkZSBub2RlKCkgYmVsb3cgUmVuZGVyTGF5ZXJNb2RlbE9iamVjdCwgdXNlIGVsZW1lbnQo
KSBpbnN0ZWFkCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2suY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCbG9jay5jcHAJ
KHJldmlzaW9uIDE1NTM3NCkKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCbG9j
ay5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE2MzAsMTcyICsxNjMwLDkgQEAgYm9vbCBSZW5kZXJC
bG9jazo6cmVsYXlvdXRUb0F2b2lkV2lkb3dzKAogICAgIHJldHVybiB0cnVlOwogfQogCi12b2lk
IFJlbmRlckJsb2NrOjpsYXlvdXRCbG9jayhib29sIHJlbGF5b3V0Q2hpbGRyZW4sIExheW91dFVu
aXQgcGFnZUxvZ2ljYWxIZWlnaHQpCit2b2lkIFJlbmRlckJsb2NrOjpsYXlvdXRCbG9jayhib29s
LCBMYXlvdXRVbml0KQogewotICAgIEFTU0VSVChuZWVkc0xheW91dCgpKTsKLQotICAgIGlmIChp
c0lubGluZSgpICYmICFpc0lubGluZUJsb2NrT3JJbmxpbmVUYWJsZSgpKSAvLyBJbmxpbmUgPGZv
cm0+cyBpbnNpZGUgdmFyaW91cyB0YWJsZSBlbGVtZW50cyBjYW4KLSAgICAgICAgcmV0dXJuOyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gY2F1c2UgdXMgdG8gY29tZSBp
biBoZXJlLiAgSnVzdCBiYWlsLgotCi0gICAgaWYgKCFyZWxheW91dENoaWxkcmVuICYmIHNpbXBs
aWZpZWRMYXlvdXQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgTGF5b3V0UmVwYWludGVyIHJl
cGFpbnRlcigqdGhpcywgY2hlY2tGb3JSZXBhaW50RHVyaW5nTGF5b3V0KCkpOwotCi0gICAgaWYg
KHVwZGF0ZUxvZ2ljYWxXaWR0aEFuZENvbHVtbldpZHRoKCkpCi0gICAgICAgIHJlbGF5b3V0Q2hp
bGRyZW4gPSB0cnVlOwotCi0gICAgY2xlYXJGbG9hdHMoKTsKLQotICAgIExheW91dFVuaXQgcHJl
dmlvdXNIZWlnaHQgPSBsb2dpY2FsSGVpZ2h0KCk7Ci0gICAgLy8gRklYTUU6IHNob3VsZCB0aGlz
IHN0YXJ0IG91dCBhcyBib3JkZXJBbmRQYWRkaW5nTG9naWNhbEhlaWdodCgpICsgc2Nyb2xsYmFy
TG9naWNhbEhlaWdodCgpLAotICAgIC8vIGZvciBjb25zaXN0ZW5jeSB3aXRoIG90aGVyIHJlbmRl
ciBjbGFzc2VzPwotICAgIHNldExvZ2ljYWxIZWlnaHQoMCk7Ci0KLSAgICBib29sIHBhZ2VMb2dp
Y2FsSGVpZ2h0Q2hhbmdlZCA9IGZhbHNlOwotICAgIGJvb2wgaGFzU3BlY2lmaWVkUGFnZUxvZ2lj
YWxIZWlnaHQgPSBmYWxzZTsKLSAgICBjaGVja0ZvclBhZ2luYXRpb25Mb2dpY2FsSGVpZ2h0Q2hh
bmdlKHBhZ2VMb2dpY2FsSGVpZ2h0LCBwYWdlTG9naWNhbEhlaWdodENoYW5nZWQsIGhhc1NwZWNp
ZmllZFBhZ2VMb2dpY2FsSGVpZ2h0KTsKLQotICAgIFJlbmRlclN0eWxlKiBzdHlsZVRvVXNlID0g
c3R5bGUoKTsKLSAgICBMYXlvdXRTdGF0ZU1haW50YWluZXIgc3RhdGVQdXNoZXIoJnZpZXcoKSwg
dGhpcywgbG9jYXRpb25PZmZzZXQoKSwgaGFzQ29sdW1ucygpIHx8IGhhc1RyYW5zZm9ybSgpIHx8
IGhhc1JlZmxlY3Rpb24oKSB8fCBzdHlsZVRvVXNlLT5pc0ZsaXBwZWRCbG9ja3NXcml0aW5nTW9k
ZSgpLCBwYWdlTG9naWNhbEhlaWdodCwgcGFnZUxvZ2ljYWxIZWlnaHRDaGFuZ2VkLCBjb2x1bW5J
bmZvKCkpOwotCi0gICAgLy8gUmVnaW9ucyBjaGFuZ2luZyB3aWR0aHMgY2FuIGZvcmNlIHVzIHRv
IHJlbGF5b3V0IG91ciBjaGlsZHJlbi4KLSAgICBSZW5kZXJGbG93VGhyZWFkKiBmbG93VGhyZWFk
ID0gZmxvd1RocmVhZENvbnRhaW5pbmdCbG9jaygpOwotICAgIGlmIChsb2dpY2FsV2lkdGhDaGFu
Z2VkSW5SZWdpb25zKGZsb3dUaHJlYWQpKQotICAgICAgICByZWxheW91dENoaWxkcmVuID0gdHJ1
ZTsKLSAgICBpZiAodXBkYXRlU2hhcGVzQmVmb3JlQmxvY2tMYXlvdXQoKSkKLSAgICAgICAgcmVs
YXlvdXRDaGlsZHJlbiA9IHRydWU7Ci0KLSAgICAvLyBXZSB1c2UgZm91ciB2YWx1ZXMsIG1heFRv
cFBvcywgbWF4VG9wTmVnLCBtYXhCb3R0b21Qb3MsIGFuZCBtYXhCb3R0b21OZWcsIHRvIHRyYWNr
Ci0gICAgLy8gb3VyIGN1cnJlbnQgbWF4aW1hbCBwb3NpdGl2ZSBhbmQgbmVnYXRpdmUgbWFyZ2lu
cy4gIFRoZXNlIHZhbHVlcyBhcmUgdXNlZCB3aGVuIHdlCi0gICAgLy8gYXJlIGNvbGxhcHNlZCB3
aXRoIGFkamFjZW50IGJsb2Nrcywgc28gZm9yIGV4YW1wbGUsIGlmIHlvdSBoYXZlIGJsb2NrIEEg
YW5kIEIKLSAgICAvLyBjb2xsYXBzaW5nIHRvZ2V0aGVyLCB0aGVuIHlvdSdkIHRha2UgdGhlIG1h
eGltYWwgcG9zaXRpdmUgbWFyZ2luIGZyb20gYm90aCBBIGFuZCBCCi0gICAgLy8gYW5kIHN1YnRy
YWN0IGl0IGZyb20gdGhlIG1heGltYWwgbmVnYXRpdmUgbWFyZ2luIGZyb20gYm90aCBBIGFuZCBC
IHRvIGdldCB0aGUKLSAgICAvLyB0cnVlIGNvbGxhcHNlZCBtYXJnaW4uICBUaGlzIGFsZ29yaXRo
bSBpcyByZWN1cnNpdmUsIHNvIHdoZW4gd2UgZmluaXNoIGxheW91dCgpCi0gICAgLy8gb3VyIGJs
b2NrIGtub3dzIGl0cyBjdXJyZW50IG1heGltYWwgcG9zaXRpdmUvbmVnYXRpdmUgdmFsdWVzLgot
ICAgIC8vCi0gICAgLy8gU3RhcnQgb3V0IGJ5IHNldHRpbmcgb3VyIG1hcmdpbiB2YWx1ZXMgdG8g
b3VyIGN1cnJlbnQgbWFyZ2lucy4gIFRhYmxlIGNlbGxzIGhhdmUKLSAgICAvLyBubyBtYXJnaW5z
LCBzbyB3ZSBkb24ndCBmaWxsIGluIHRoZSB2YWx1ZXMgZm9yIHRhYmxlIGNlbGxzLgotICAgIGJv
b2wgaXNDZWxsID0gaXNUYWJsZUNlbGwoKTsKLSAgICBpZiAoIWlzQ2VsbCkgewotICAgICAgICBp
bml0TWF4TWFyZ2luVmFsdWVzKCk7Ci0gICAgICAgIAotICAgICAgICBzZXRIYXNNYXJnaW5CZWZv
cmVRdWlyayhzdHlsZVRvVXNlLT5oYXNNYXJnaW5CZWZvcmVRdWlyaygpKTsKLSAgICAgICAgc2V0
SGFzTWFyZ2luQWZ0ZXJRdWlyayhzdHlsZVRvVXNlLT5oYXNNYXJnaW5BZnRlclF1aXJrKCkpOwot
ICAgICAgICBzZXRQYWdpbmF0aW9uU3RydXQoMCk7Ci0gICAgfQotCi0gICAgTGF5b3V0VW5pdCBy
ZXBhaW50TG9naWNhbFRvcCA9IDA7Ci0gICAgTGF5b3V0VW5pdCByZXBhaW50TG9naWNhbEJvdHRv
bSA9IDA7Ci0gICAgTGF5b3V0VW5pdCBtYXhGbG9hdExvZ2ljYWxCb3R0b20gPSAwOwotICAgIGlm
ICghZmlyc3RDaGlsZCgpICYmICFpc0Fub255bW91c0Jsb2NrKCkpCi0gICAgICAgIHNldENoaWxk
cmVuSW5saW5lKHRydWUpOwotICAgIGlmIChjaGlsZHJlbklubGluZSgpKQotICAgICAgICBsYXlv
dXRJbmxpbmVDaGlsZHJlbihyZWxheW91dENoaWxkcmVuLCByZXBhaW50TG9naWNhbFRvcCwgcmVw
YWludExvZ2ljYWxCb3R0b20pOwotICAgIGVsc2UKLSAgICAgICAgbGF5b3V0QmxvY2tDaGlsZHJl
bihyZWxheW91dENoaWxkcmVuLCBtYXhGbG9hdExvZ2ljYWxCb3R0b20pOwotCi0gICAgLy8gRXhw
YW5kIG91ciBpbnRyaW5zaWMgaGVpZ2h0IHRvIGVuY29tcGFzcyBmbG9hdHMuCi0gICAgTGF5b3V0
VW5pdCB0b0FkZCA9IGJvcmRlckFuZFBhZGRpbmdBZnRlcigpICsgc2Nyb2xsYmFyTG9naWNhbEhl
aWdodCgpOwotICAgIGlmIChsb3dlc3RGbG9hdExvZ2ljYWxCb3R0b20oKSA+IChsb2dpY2FsSGVp
Z2h0KCkgLSB0b0FkZCkgJiYgZXhwYW5kc1RvRW5jbG9zZU92ZXJoYW5naW5nRmxvYXRzKCkpCi0g
ICAgICAgIHNldExvZ2ljYWxIZWlnaHQobG93ZXN0RmxvYXRMb2dpY2FsQm90dG9tKCkgKyB0b0Fk
ZCk7Ci0gICAgCi0gICAgaWYgKHJlbGF5b3V0Rm9yUGFnaW5hdGlvbihoYXNTcGVjaWZpZWRQYWdl
TG9naWNhbEhlaWdodCwgcGFnZUxvZ2ljYWxIZWlnaHQsIHN0YXRlUHVzaGVyKSB8fCByZWxheW91
dFRvQXZvaWRXaWRvd3Moc3RhdGVQdXNoZXIpKSB7Ci0gICAgICAgIEFTU0VSVCghc2hvdWxkQnJl
YWtBdExpbmVUb0F2b2lkV2lkb3coKSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICAv
LyBDYWxjdWxhdGUgb3VyIG5ldyBoZWlnaHQuCi0gICAgTGF5b3V0VW5pdCBvbGRIZWlnaHQgPSBs
b2dpY2FsSGVpZ2h0KCk7Ci0gICAgTGF5b3V0VW5pdCBvbGRDbGllbnRBZnRlckVkZ2UgPSBjbGll
bnRMb2dpY2FsQm90dG9tKCk7Ci0KLSAgICAvLyBCZWZvcmUgdXBkYXRpbmcgdGhlIGZpbmFsIHNp
emUgb2YgdGhlIGZsb3cgdGhyZWFkIG1ha2Ugc3VyZSBhIGZvcmNlZCBicmVhayBpcyBhcHBsaWVk
IGFmdGVyIHRoZSBjb250ZW50LgotICAgIC8vIFRoaXMgZW5zdXJlcyB0aGUgc2l6ZSBpbmZvcm1h
dGlvbiBpcyBjb3JyZWN0bHkgY29tcHV0ZWQgZm9yIHRoZSBsYXN0IGF1dG8taGVpZ2h0IHJlZ2lv
biByZWNlaXZpbmcgY29udGVudC4KLSAgICBpZiAoaXNSZW5kZXJGbG93VGhyZWFkKCkpCi0gICAg
ICAgIHRvUmVuZGVyRmxvd1RocmVhZCh0aGlzKS0+YXBwbHlCcmVha0FmdGVyQ29udGVudChvbGRD
bGllbnRBZnRlckVkZ2UpOwotCi0gICAgdXBkYXRlTG9naWNhbEhlaWdodCgpOwotICAgIExheW91
dFVuaXQgbmV3SGVpZ2h0ID0gbG9naWNhbEhlaWdodCgpOwotICAgIGlmIChvbGRIZWlnaHQgIT0g
bmV3SGVpZ2h0KSB7Ci0gICAgICAgIGlmIChvbGRIZWlnaHQgPiBuZXdIZWlnaHQgJiYgbWF4Rmxv
YXRMb2dpY2FsQm90dG9tID4gbmV3SGVpZ2h0ICYmICFjaGlsZHJlbklubGluZSgpKSB7Ci0gICAg
ICAgICAgICAvLyBPbmUgb2Ygb3VyIGNoaWxkcmVuJ3MgZmxvYXRzIG1heSBoYXZlIGJlY29tZSBh
biBvdmVyaGFuZ2luZyBmbG9hdCBmb3IgdXMuIFdlIG5lZWQgdG8gbG9vayBmb3IgaXQuCi0gICAg
ICAgICAgICBmb3IgKFJlbmRlck9iamVjdCogY2hpbGQgPSBmaXJzdENoaWxkKCk7IGNoaWxkOyBj
aGlsZCA9IGNoaWxkLT5uZXh0U2libGluZygpKSB7Ci0gICAgICAgICAgICAgICAgaWYgKGNoaWxk
LT5pc1JlbmRlckJsb2NrRmxvdygpICYmICFjaGlsZC0+aXNGbG9hdGluZ09yT3V0T2ZGbG93UG9z
aXRpb25lZCgpKSB7Ci0gICAgICAgICAgICAgICAgICAgIFJlbmRlckJsb2NrKiBibG9jayA9IHRv
UmVuZGVyQmxvY2soY2hpbGQpOwotICAgICAgICAgICAgICAgICAgICBpZiAoYmxvY2stPmxvd2Vz
dEZsb2F0TG9naWNhbEJvdHRvbSgpICsgYmxvY2stPmxvZ2ljYWxUb3AoKSA+IG5ld0hlaWdodCkK
LSAgICAgICAgICAgICAgICAgICAgICAgIGFkZE92ZXJoYW5naW5nRmxvYXRzKGJsb2NrLCBmYWxz
ZSk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQot
Ci0gICAgYm9vbCBoZWlnaHRDaGFuZ2VkID0gKHByZXZpb3VzSGVpZ2h0ICE9IG5ld0hlaWdodCk7
Ci0gICAgaWYgKGhlaWdodENoYW5nZWQpCi0gICAgICAgIHJlbGF5b3V0Q2hpbGRyZW4gPSB0cnVl
OwotCi0gICAgbGF5b3V0UG9zaXRpb25lZE9iamVjdHMocmVsYXlvdXRDaGlsZHJlbiB8fCBpc1Jv
b3QoKSk7Ci0KLSAgICB1cGRhdGVTaGFwZXNBZnRlckJsb2NrTGF5b3V0KGhlaWdodENoYW5nZWQp
OwotCi0gICAgLy8gQWRkIG92ZXJmbG93IGZyb20gY2hpbGRyZW4gKHVubGVzcyB3ZSdyZSBtdWx0
aS1jb2x1bW4sIHNpbmNlIGluIHRoYXQgY2FzZSBhbGwgb3VyIGNoaWxkIG92ZXJmbG93IGlzIGNs
aXBwZWQgYW55d2F5KS4KLSAgICBjb21wdXRlT3ZlcmZsb3cob2xkQ2xpZW50QWZ0ZXJFZGdlKTsK
LSAgICAKLSAgICBzdGF0ZVB1c2hlci5wb3AoKTsKLQotICAgIGZpdEJvcmRlclRvTGluZXNJZk5l
ZWRlZCgpOwotCi0gICAgaWYgKHZpZXcoKS5sYXlvdXRTdGF0ZSgpLT5tX3BhZ2VMb2dpY2FsSGVp
Z2h0KQotICAgICAgICBzZXRQYWdlTG9naWNhbE9mZnNldCh2aWV3KCkubGF5b3V0U3RhdGUoKS0+
cGFnZUxvZ2ljYWxPZmZzZXQodGhpcywgbG9naWNhbFRvcCgpKSk7Ci0KLSAgICB1cGRhdGVMYXll
clRyYW5zZm9ybSgpOwotCi0gICAgLy8gVXBkYXRlIG91ciBzY3JvbGwgaW5mb3JtYXRpb24gaWYg
d2UncmUgb3ZlcmZsb3c6YXV0by9zY3JvbGwvaGlkZGVuIG5vdyB0aGF0IHdlIGtub3cgaWYKLSAg
ICAvLyB3ZSBvdmVyZmxvdyBvciBub3QuCi0gICAgdXBkYXRlU2Nyb2xsSW5mb0FmdGVyTGF5b3V0
KCk7Ci0KLSAgICAvLyBGSVhNRTogVGhpcyByZXBhaW50IGxvZ2ljIHNob3VsZCBiZSBtb3ZlZCBp
bnRvIGEgc2VwYXJhdGUgaGVscGVyIGZ1bmN0aW9uIQotICAgIC8vIFJlcGFpbnQgd2l0aCBvdXIg
bmV3IGJvdW5kcyBpZiB0aGV5IGFyZSBkaWZmZXJlbnQgZnJvbSBvdXIgb2xkIGJvdW5kcy4KLSAg
ICBib29sIGRpZEZ1bGxSZXBhaW50ID0gcmVwYWludGVyLnJlcGFpbnRBZnRlckxheW91dCgpOwot
ICAgIGlmICghZGlkRnVsbFJlcGFpbnQgJiYgcmVwYWludExvZ2ljYWxUb3AgIT0gcmVwYWludExv
Z2ljYWxCb3R0b20gJiYgKHN0eWxlVG9Vc2UtPnZpc2liaWxpdHkoKSA9PSBWSVNJQkxFIHx8IGVu
Y2xvc2luZ0xheWVyKCktPmhhc1Zpc2libGVDb250ZW50KCkpKSB7Ci0gICAgICAgIC8vIEZJWE1F
OiBXZSBjb3VsZCB0aWdodGVuIHVwIHRoZSBsZWZ0IGFuZCByaWdodCBpbnZhbGlkYXRpb24gcG9p
bnRzIGlmIHdlIGxldCBsYXlvdXRJbmxpbmVDaGlsZHJlbiBmaWxsIHRoZW0gaW4gYmFzZWQgb2Zm
IHRoZSBwYXJ0aWN1bGFyIGxpbmVzCi0gICAgICAgIC8vIGl0IGhhZCB0byBsYXkgb3V0LiAgV2Ug
d291bGRuJ3QgbmVlZCB0aGUgaGFzT3ZlcmZsb3dDbGlwKCkgaGFjayBpbiB0aGF0IGNhc2UgZWl0
aGVyLgotICAgICAgICBMYXlvdXRVbml0IHJlcGFpbnRMb2dpY2FsTGVmdCA9IGxvZ2ljYWxMZWZ0
VmlzdWFsT3ZlcmZsb3coKTsKLSAgICAgICAgTGF5b3V0VW5pdCByZXBhaW50TG9naWNhbFJpZ2h0
ID0gbG9naWNhbFJpZ2h0VmlzdWFsT3ZlcmZsb3coKTsKLSAgICAgICAgaWYgKGhhc092ZXJmbG93
Q2xpcCgpKSB7Ci0gICAgICAgICAgICAvLyBJZiB3ZSBoYXZlIGNsaXBwZWQgb3ZlcmZsb3csIHdl
IHNob3VsZCB1c2UgbGF5b3V0IG92ZXJmbG93IGFzIHdlbGwsIHNpbmNlIHZpc3VhbCBvdmVyZmxv
dyBmcm9tIGxpbmVzIGRpZG4ndCBwcm9wYWdhdGUgdG8gb3VyIGJsb2NrJ3Mgb3ZlcmZsb3cuCi0g
ICAgICAgICAgICAvLyBOb3RlIHRoZSBvbGQgY29kZSBkaWQgdGhpcyBhcyB3ZWxsIGJ1dCBldmVu
IGZvciBvdmVyZmxvdzp2aXNpYmxlLiAgVGhlIGFkZGl0aW9uIG9mIGhhc092ZXJmbG93Q2xpcCgp
IGF0IGxlYXN0IHRpZ2h0ZW5zIHVwIHRoZSBoYWNrIGEgYml0LgotICAgICAgICAgICAgLy8gbGF5
b3V0SW5saW5lQ2hpbGRyZW4gc2hvdWxkIGJlIHBhdGNoZWQgdG8gY29tcHV0ZSB0aGUgZW50aXJl
IHJlcGFpbnQgcmVjdC4KLSAgICAgICAgICAgIHJlcGFpbnRMb2dpY2FsTGVmdCA9IG1pbihyZXBh
aW50TG9naWNhbExlZnQsIGxvZ2ljYWxMZWZ0TGF5b3V0T3ZlcmZsb3coKSk7Ci0gICAgICAgICAg
ICByZXBhaW50TG9naWNhbFJpZ2h0ID0gbWF4KHJlcGFpbnRMb2dpY2FsUmlnaHQsIGxvZ2ljYWxS
aWdodExheW91dE92ZXJmbG93KCkpOwotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICBMYXlv
dXRSZWN0IHJlcGFpbnRSZWN0OwotICAgICAgICBpZiAoaXNIb3Jpem9udGFsV3JpdGluZ01vZGUo
KSkKLSAgICAgICAgICAgIHJlcGFpbnRSZWN0ID0gTGF5b3V0UmVjdChyZXBhaW50TG9naWNhbExl
ZnQsIHJlcGFpbnRMb2dpY2FsVG9wLCByZXBhaW50TG9naWNhbFJpZ2h0IC0gcmVwYWludExvZ2lj
YWxMZWZ0LCByZXBhaW50TG9naWNhbEJvdHRvbSAtIHJlcGFpbnRMb2dpY2FsVG9wKTsKLSAgICAg
ICAgZWxzZQotICAgICAgICAgICAgcmVwYWludFJlY3QgPSBMYXlvdXRSZWN0KHJlcGFpbnRMb2dp
Y2FsVG9wLCByZXBhaW50TG9naWNhbExlZnQsIHJlcGFpbnRMb2dpY2FsQm90dG9tIC0gcmVwYWlu
dExvZ2ljYWxUb3AsIHJlcGFpbnRMb2dpY2FsUmlnaHQgLSByZXBhaW50TG9naWNhbExlZnQpOwot
Ci0gICAgICAgIC8vIFRoZSByZXBhaW50IHJlY3QgbWF5IGJlIHNwbGl0IGFjcm9zcyBjb2x1bW5z
LCBpbiB3aGljaCBjYXNlIGFkanVzdFJlY3RGb3JDb2x1bW5zKCkgd2lsbCByZXR1cm4gdGhlIHVu
aW9uLgotICAgICAgICBhZGp1c3RSZWN0Rm9yQ29sdW1ucyhyZXBhaW50UmVjdCk7Ci0KLSAgICAg
ICAgcmVwYWludFJlY3QuaW5mbGF0ZShtYXhpbWFsT3V0bGluZVNpemUoUGFpbnRQaGFzZU91dGxp
bmUpKTsKLSAgICAgICAgCi0gICAgICAgIGlmIChoYXNPdmVyZmxvd0NsaXAoKSkgewotICAgICAg
ICAgICAgLy8gQWRqdXN0IHJlcGFpbnQgcmVjdCBmb3Igc2Nyb2xsIG9mZnNldAotICAgICAgICAg
ICAgcmVwYWludFJlY3QubW92ZSgtc2Nyb2xsZWRDb250ZW50T2Zmc2V0KCkpOwotCi0gICAgICAg
ICAgICAvLyBEb24ndCBhbGxvdyB0aGlzIHJlY3QgdG8gc3BpbGwgb3V0IG9mIG91ciBvdmVyZmxv
dyBib3guCi0gICAgICAgICAgICByZXBhaW50UmVjdC5pbnRlcnNlY3QoTGF5b3V0UmVjdChMYXlv
dXRQb2ludCgpLCBzaXplKCkpKTsKLSAgICAgICAgfQotCi0gICAgICAgIC8vIE1ha2Ugc3VyZSB0
aGUgcmVjdCBpcyBzdGlsbCBub24tZW1wdHkgYWZ0ZXIgaW50ZXJzZWN0aW5nIGZvciBvdmVyZmxv
dyBhYm92ZQotICAgICAgICBpZiAoIXJlcGFpbnRSZWN0LmlzRW1wdHkoKSkgewotICAgICAgICAg
ICAgcmVwYWludFJlY3RhbmdsZShyZXBhaW50UmVjdCk7IC8vIFdlIG5lZWQgdG8gZG8gYSBwYXJ0
aWFsIHJlcGFpbnQgb2Ygb3VyIGNvbnRlbnQuCi0gICAgICAgICAgICBpZiAoaGFzUmVmbGVjdGlv
bigpKQotICAgICAgICAgICAgICAgIHJlcGFpbnRSZWN0YW5nbGUocmVmbGVjdGVkUmVjdChyZXBh
aW50UmVjdCkpOwotICAgICAgICB9Ci0gICAgfQotCisgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7
CiAgICAgc2V0TmVlZHNMYXlvdXQoZmFsc2UpOwogfQogCkBAIC0yMDE3LDggKzE4NTQsOCBAQCBS
ZW5kZXJCb3hNb2RlbE9iamVjdCogUmVuZGVyQmxvY2s6OmNyZWF0CiAgICAgQVNTRVJUKHJ1bklu
LT5lbGVtZW50KCkpOwogCiAgICAgUmVuZGVyQm94TW9kZWxPYmplY3QqIG5ld1J1bkluID0gMDsK
LSAgICBpZiAoIXJ1bkluLT5pc1JlbmRlckJsb2NrKCkpCi0gICAgICAgIG5ld1J1bkluID0gbmV3
IChyZW5kZXJBcmVuYSgpKSBSZW5kZXJCbG9jayhydW5Jbi0+ZWxlbWVudCgpKTsKKyAgICBpZiAo
IXJ1bkluLT5pc1JlbmRlckJsb2NrRmxvdygpKQorICAgICAgICBuZXdSdW5JbiA9IG5ldyAocmVu
ZGVyQXJlbmEoKSkgUmVuZGVyQmxvY2tGbG93KHJ1bkluLT5lbGVtZW50KCkpOwogICAgIGVsc2UK
ICAgICAgICAgbmV3UnVuSW4gPSBuZXcgKHJlbmRlckFyZW5hKCkpIFJlbmRlcklubGluZShydW5J
bi0+ZWxlbWVudCgpKTsKIApAQCAtMjA0MCw3ICsxODc3LDcgQEAgdm9pZCBSZW5kZXJCbG9jazo6
bW92ZVJ1bkluVW5kZXJTaWJsaW5nQgogICAgICAgICByZXR1cm47CiAKICAgICAvLyBGSVhNRTog
V2UgZG9uJ3QgaGFuZGxlIG5vbi1ibG9jayBlbGVtZW50cyB3aXRoIHJ1bi1pbiBmb3Igbm93Lgot
ICAgIGlmICghcnVuSW4tPmlzUmVuZGVyQmxvY2soKSkKKyAgICBpZiAoIXJ1bkluLT5pc1JlbmRl
ckJsb2NrRmxvdygpKQogICAgICAgICByZXR1cm47CiAKICAgICAvLyBGSVhNRTogV2UgZG9uJ3Qg
c3VwcG9ydCBydW4taW5zIHdpdGggb3IgYXMgcGFydCBvZiBhIGNvbnRpbnVhdGlvbgpAQCAtMjU5
OCw2MSArMjQzNSw2IEBAIHZvaWQgUmVuZGVyQmxvY2s6OmRpcnR5Rm9yTGF5b3V0RnJvbVBlcmMK
ICAgICB9CiB9CiAKLXZvaWQgUmVuZGVyQmxvY2s6OmxheW91dEJsb2NrQ2hpbGRyZW4oYm9vbCBy
ZWxheW91dENoaWxkcmVuLCBMYXlvdXRVbml0JiBtYXhGbG9hdExvZ2ljYWxCb3R0b20pCi17Ci0g
ICAgZGlydHlGb3JMYXlvdXRGcm9tUGVyY2VudGFnZUhlaWdodERlc2NlbmRhbnRzKCk7Ci0KLSAg
ICBMYXlvdXRVbml0IGJlZm9yZUVkZ2UgPSBib3JkZXJBbmRQYWRkaW5nQmVmb3JlKCk7Ci0gICAg
TGF5b3V0VW5pdCBhZnRlckVkZ2UgPSBib3JkZXJBbmRQYWRkaW5nQWZ0ZXIoKSArIHNjcm9sbGJh
ckxvZ2ljYWxIZWlnaHQoKTsKLQotICAgIHNldExvZ2ljYWxIZWlnaHQoYmVmb3JlRWRnZSk7Ci0g
ICAgCi0gICAgLy8gTGF5IG91dCBvdXIgaHlwb3RoZXRpY2FsIGdyaWQgbGluZSBhcyB0aG91Z2gg
aXQgb2NjdXJzIGF0IHRoZSB0b3Agb2YgdGhlIGJsb2NrLgotICAgIGlmICh2aWV3KCkubGF5b3V0
U3RhdGUoKS0+bGluZUdyaWQoKSA9PSB0aGlzKQotICAgICAgICBsYXlvdXRMaW5lR3JpZEJveCgp
OwotCi0gICAgLy8gVGhlIG1hcmdpbiBzdHJ1Y3QgY2FjaGVzIGFsbCBvdXIgY3VycmVudCBtYXJn
aW4gY29sbGFwc2luZyBzdGF0ZS4gIFRoZSBjb21wYWN0IHN0cnVjdCBjYWNoZXMgc3RhdGUgd2hl
biB3ZSBlbmNvdW50ZXIgY29tcGFjdHMsCi0gICAgTWFyZ2luSW5mbyBtYXJnaW5JbmZvKHRoaXMs
IGJlZm9yZUVkZ2UsIGFmdGVyRWRnZSk7Ci0KLSAgICAvLyBGaWVsZHNldHMgbmVlZCB0byBmaW5k
IHRoZWlyIGxlZ2VuZCBhbmQgcG9zaXRpb24gaXQgaW5zaWRlIHRoZSBib3JkZXIgb2YgdGhlIG9i
amVjdC4KLSAgICAvLyBUaGUgbGVnZW5kIHRoZW4gZ2V0cyBza2lwcGVkIGR1cmluZyBub3JtYWwg
bGF5b3V0LiAgVGhlIHNhbWUgaXMgdHJ1ZSBmb3IgcnVieSB0ZXh0LgotICAgIC8vIEl0IGRvZXNu
J3QgZ2V0IGluY2x1ZGVkIGluIHRoZSBub3JtYWwgbGF5b3V0IHByb2Nlc3MgYnV0IGlzIGluc3Rl
YWQgc2tpcHBlZC4KLSAgICBSZW5kZXJPYmplY3QqIGNoaWxkVG9FeGNsdWRlID0gbGF5b3V0U3Bl
Y2lhbEV4Y2x1ZGVkQ2hpbGQocmVsYXlvdXRDaGlsZHJlbik7Ci0KLSAgICBMYXlvdXRVbml0IHBy
ZXZpb3VzRmxvYXRMb2dpY2FsQm90dG9tID0gMDsKLSAgICBtYXhGbG9hdExvZ2ljYWxCb3R0b20g
PSAwOwotCi0gICAgUmVuZGVyQm94KiBuZXh0ID0gZmlyc3RDaGlsZEJveCgpOwotCi0gICAgd2hp
bGUgKG5leHQpIHsKLSAgICAgICAgUmVuZGVyQm94KiBjaGlsZCA9IG5leHQ7Ci0gICAgICAgIG5l
eHQgPSBjaGlsZC0+bmV4dFNpYmxpbmdCb3goKTsKLQotICAgICAgICBpZiAoY2hpbGRUb0V4Y2x1
ZGUgPT0gY2hpbGQpCi0gICAgICAgICAgICBjb250aW51ZTsgLy8gU2tpcCB0aGlzIGNoaWxkLCBz
aW5jZSBpdCB3aWxsIGJlIHBvc2l0aW9uZWQgYnkgdGhlIHNwZWNpYWxpemVkIHN1YmNsYXNzIChm
aWVsZHNldHMgYW5kIHJ1YnkgcnVucykuCi0KLSAgICAgICAgdXBkYXRlQmxvY2tDaGlsZERpcnR5
Qml0c0JlZm9yZUxheW91dChyZWxheW91dENoaWxkcmVuLCBjaGlsZCk7Ci0KLSAgICAgICAgaWYg
KGNoaWxkLT5pc091dE9mRmxvd1Bvc2l0aW9uZWQoKSkgewotICAgICAgICAgICAgY2hpbGQtPmNv
bnRhaW5pbmdCbG9jaygpLT5pbnNlcnRQb3NpdGlvbmVkT2JqZWN0KGNoaWxkKTsKLSAgICAgICAg
ICAgIGFkanVzdFBvc2l0aW9uZWRCbG9jayhjaGlsZCwgbWFyZ2luSW5mbyk7Ci0gICAgICAgICAg
ICBjb250aW51ZTsKLSAgICAgICAgfQotICAgICAgICBpZiAoY2hpbGQtPmlzRmxvYXRpbmcoKSkg
ewotICAgICAgICAgICAgaW5zZXJ0RmxvYXRpbmdPYmplY3QoY2hpbGQpOwotICAgICAgICAgICAg
YWRqdXN0RmxvYXRpbmdCbG9jayhtYXJnaW5JbmZvKTsKLSAgICAgICAgICAgIGNvbnRpbnVlOwot
ICAgICAgICB9Ci0KLSAgICAgICAgLy8gTGF5IG91dCB0aGUgY2hpbGQuCi0gICAgICAgIGxheW91
dEJsb2NrQ2hpbGQoY2hpbGQsIG1hcmdpbkluZm8sIHByZXZpb3VzRmxvYXRMb2dpY2FsQm90dG9t
LCBtYXhGbG9hdExvZ2ljYWxCb3R0b20pOwotICAgIH0KLSAgICAKLSAgICAvLyBOb3cgZG8gdGhl
IGhhbmRsaW5nIG9mIHRoZSBib3R0b20gb2YgdGhlIGJsb2NrLCBhZGRpbmcgaW4gb3VyIGJvdHRv
bSBib3JkZXIvcGFkZGluZyBhbmQKLSAgICAvLyBkZXRlcm1pbmluZyB0aGUgY29ycmVjdCBjb2xs
YXBzZWQgYm90dG9tIG1hcmdpbiBpbmZvcm1hdGlvbi4KLSAgICBoYW5kbGVBZnRlclNpZGVPZkJs
b2NrKGJlZm9yZUVkZ2UsIGFmdGVyRWRnZSwgbWFyZ2luSW5mbyk7Ci19Ci0KIHZvaWQgUmVuZGVy
QmxvY2s6OmxheW91dEJsb2NrQ2hpbGQoUmVuZGVyQm94KiBjaGlsZCwgTWFyZ2luSW5mbyYgbWFy
Z2luSW5mbywgTGF5b3V0VW5pdCYgcHJldmlvdXNGbG9hdExvZ2ljYWxCb3R0b20sIExheW91dFVu
aXQmIG1heEZsb2F0TG9naWNhbEJvdHRvbSkKIHsKICAgICBMYXlvdXRVbml0IG9sZFBvc01hcmdp
bkJlZm9yZSA9IG1heFBvc2l0aXZlTWFyZ2luQmVmb3JlKCk7CkBAIC00NzAwLDE1MyArNDQ4Miw2
IEBAIHZvaWQgUmVuZGVyQmxvY2s6Om1hcmtMaW5lc0RpcnR5SW5CbG9ja1IKICAgICB9CiB9CiAK
LXZvaWQgUmVuZGVyQmxvY2s6OmNsZWFyRmxvYXRzKCkKLXsKLSAgICBpZiAobV9mbG9hdGluZ09i
amVjdHMpCi0gICAgICAgIG1fZmxvYXRpbmdPYmplY3RzLT5zZXRIb3Jpem9udGFsV3JpdGluZ01v
ZGUoaXNIb3Jpem9udGFsV3JpdGluZ01vZGUoKSk7Ci0KLSAgICBIYXNoU2V0PFJlbmRlckJveCo+
IG9sZEludHJ1ZGluZ0Zsb2F0U2V0OwotICAgIGlmICghY2hpbGRyZW5JbmxpbmUoKSAmJiBtX2Zs
b2F0aW5nT2JqZWN0cykgewotICAgICAgICBjb25zdCBGbG9hdGluZ09iamVjdFNldCYgZmxvYXRp
bmdPYmplY3RTZXQgPSBtX2Zsb2F0aW5nT2JqZWN0cy0+c2V0KCk7Ci0gICAgICAgIEZsb2F0aW5n
T2JqZWN0U2V0SXRlcmF0b3IgZW5kID0gZmxvYXRpbmdPYmplY3RTZXQuZW5kKCk7Ci0gICAgICAg
IGZvciAoRmxvYXRpbmdPYmplY3RTZXRJdGVyYXRvciBpdCA9IGZsb2F0aW5nT2JqZWN0U2V0LmJl
Z2luKCk7IGl0ICE9IGVuZDsgKytpdCkgewotICAgICAgICAgICAgRmxvYXRpbmdPYmplY3QqIGZs
b2F0aW5nT2JqZWN0ID0gKml0OwotICAgICAgICAgICAgaWYgKCFmbG9hdGluZ09iamVjdC0+aXNE
ZXNjZW5kYW50KCkpCi0gICAgICAgICAgICAgICAgb2xkSW50cnVkaW5nRmxvYXRTZXQuYWRkKGZs
b2F0aW5nT2JqZWN0LT5yZW5kZXJlcigpKTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIC8vIElu
bGluZSBibG9ja3MgYXJlIGNvdmVyZWQgYnkgdGhlIGlzUmVwbGFjZWQoKSBjaGVjayBpbiB0aGUg
YXZvaWRGbG9hdHMgbWV0aG9kLgotICAgIGlmIChhdm9pZHNGbG9hdHMoKSB8fCBpc1Jvb3QoKSB8
fCBpc1JlbmRlclZpZXcoKSB8fCBpc0Zsb2F0aW5nT3JPdXRPZkZsb3dQb3NpdGlvbmVkKCkgfHwg
aXNUYWJsZUNlbGwoKSkgewotICAgICAgICBpZiAobV9mbG9hdGluZ09iamVjdHMpIHsKLSAgICAg
ICAgICAgIGRlbGV0ZUFsbFZhbHVlcyhtX2Zsb2F0aW5nT2JqZWN0cy0+c2V0KCkpOwotICAgICAg
ICAgICAgbV9mbG9hdGluZ09iamVjdHMtPmNsZWFyKCk7Ci0gICAgICAgIH0KLSAgICAgICAgaWYg
KCFvbGRJbnRydWRpbmdGbG9hdFNldC5pc0VtcHR5KCkpCi0gICAgICAgICAgICBtYXJrQWxsRGVz
Y2VuZGFudHNXaXRoRmxvYXRzRm9yTGF5b3V0KCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0K
LSAgICB0eXBlZGVmIEhhc2hNYXA8UmVuZGVyT2JqZWN0KiwgRmxvYXRpbmdPYmplY3QqPiBSZW5k
ZXJlclRvRmxvYXRJbmZvTWFwOwotICAgIFJlbmRlcmVyVG9GbG9hdEluZm9NYXAgZmxvYXRNYXA7
Ci0KLSAgICBpZiAobV9mbG9hdGluZ09iamVjdHMpIHsKLSAgICAgICAgY29uc3QgRmxvYXRpbmdP
YmplY3RTZXQmIGZsb2F0aW5nT2JqZWN0U2V0ID0gbV9mbG9hdGluZ09iamVjdHMtPnNldCgpOwot
ICAgICAgICBpZiAoY2hpbGRyZW5JbmxpbmUoKSkgewotICAgICAgICAgICAgRmxvYXRpbmdPYmpl
Y3RTZXRJdGVyYXRvciBlbmQgPSBmbG9hdGluZ09iamVjdFNldC5lbmQoKTsKLSAgICAgICAgICAg
IGZvciAoRmxvYXRpbmdPYmplY3RTZXRJdGVyYXRvciBpdCA9IGZsb2F0aW5nT2JqZWN0U2V0LmJl
Z2luKCk7IGl0ICE9IGVuZDsgKytpdCkgewotICAgICAgICAgICAgICAgIEZsb2F0aW5nT2JqZWN0
KiBmID0gKml0OwotICAgICAgICAgICAgICAgIGZsb2F0TWFwLmFkZChmLT5yZW5kZXJlcigpLCBm
KTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICBkZWxldGVBbGxW
YWx1ZXMoZmxvYXRpbmdPYmplY3RTZXQpOwotICAgICAgICBtX2Zsb2F0aW5nT2JqZWN0cy0+Y2xl
YXIoKTsKLSAgICB9Ci0KLSAgICAvLyBXZSBzaG91bGQgbm90IHByb2Nlc3MgZmxvYXRzIGlmIHRo
ZSBwYXJlbnQgbm9kZSBpcyBub3QgYSBSZW5kZXJCbG9jay4gT3RoZXJ3aXNlLCB3ZSB3aWxsIGFk
ZCAKLSAgICAvLyBmbG9hdHMgaW4gYW4gaW52YWxpZCBjb250ZXh0LiBUaGlzIHdpbGwgY2F1c2Ug
YSBjcmFzaCBhcmlzaW5nIGZyb20gYSBiYWQgY2FzdCBvbiB0aGUgcGFyZW50LgotICAgIC8vIFNl
ZSA8cmRhcjovL3Byb2JsZW0vODA0OTc1Mz4sIHdoZXJlIGZsb2F0IHByb3BlcnR5IGlzIGFwcGxp
ZWQgb24gYSB0ZXh0IG5vZGUgaW4gYSBTVkcuCi0gICAgaWYgKCFwYXJlbnQoKSB8fCAhcGFyZW50
KCktPmlzUmVuZGVyQmxvY2soKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgLy8gQXR0ZW1wdCB0
byBsb2NhdGUgYSBwcmV2aW91cyBzaWJsaW5nIHdpdGggb3ZlcmhhbmdpbmcgZmxvYXRzLiAgV2Ug
c2tpcCBhbnkgZWxlbWVudHMgdGhhdCBhcmUKLSAgICAvLyBvdXQgb2YgZmxvdyAobGlrZSBmbG9h
dGluZy9wb3NpdGlvbmVkIGVsZW1lbnRzKSwgYW5kIHdlIGFsc28gc2tpcCBvdmVyIGFueSBvYmpl
Y3RzIHRoYXQgbWF5IGhhdmUgc2hpZnRlZAotICAgIC8vIHRvIGF2b2lkIGZsb2F0cy4KLSAgICBS
ZW5kZXJCbG9jayogcGFyZW50QmxvY2sgPSB0b1JlbmRlckJsb2NrKHBhcmVudCgpKTsKLSAgICBi
b29sIHBhcmVudEhhc0Zsb2F0cyA9IGZhbHNlOwotICAgIFJlbmRlck9iamVjdCogcHJldiA9IHBy
ZXZpb3VzU2libGluZygpOwotICAgIHdoaWxlIChwcmV2ICYmIChwcmV2LT5pc0Zsb2F0aW5nT3JP
dXRPZkZsb3dQb3NpdGlvbmVkKCkgfHwgIXByZXYtPmlzQm94KCkgfHwgIXByZXYtPmlzUmVuZGVy
QmxvY2soKSB8fCB0b1JlbmRlckJsb2NrKHByZXYpLT5hdm9pZHNGbG9hdHMoKSkpIHsKLSAgICAg
ICAgaWYgKHByZXYtPmlzRmxvYXRpbmcoKSkKLSAgICAgICAgICAgIHBhcmVudEhhc0Zsb2F0cyA9
IHRydWU7Ci0gICAgICAgIHByZXYgPSBwcmV2LT5wcmV2aW91c1NpYmxpbmcoKTsKLSAgICB9Ci0K
LSAgICAvLyBGaXJzdCBhZGQgaW4gZmxvYXRzIGZyb20gdGhlIHBhcmVudC4KLSAgICBMYXlvdXRV
bml0IGxvZ2ljYWxUb3BPZmZzZXQgPSBsb2dpY2FsVG9wKCk7Ci0gICAgaWYgKHBhcmVudEhhc0Zs
b2F0cykKLSAgICAgICAgYWRkSW50cnVkaW5nRmxvYXRzKHBhcmVudEJsb2NrLCBwYXJlbnRCbG9j
ay0+bG9naWNhbExlZnRPZmZzZXRGb3JDb250ZW50KCksIGxvZ2ljYWxUb3BPZmZzZXQpOwotICAg
IAotICAgIExheW91dFVuaXQgbG9naWNhbExlZnRPZmZzZXQgPSAwOwotICAgIGlmIChwcmV2KQot
ICAgICAgICBsb2dpY2FsVG9wT2Zmc2V0IC09IHRvUmVuZGVyQm94KHByZXYpLT5sb2dpY2FsVG9w
KCk7Ci0gICAgZWxzZSB7Ci0gICAgICAgIHByZXYgPSBwYXJlbnRCbG9jazsKLSAgICAgICAgbG9n
aWNhbExlZnRPZmZzZXQgKz0gcGFyZW50QmxvY2stPmxvZ2ljYWxMZWZ0T2Zmc2V0Rm9yQ29udGVu
dCgpOwotICAgIH0KLQotICAgIC8vIEFkZCBvdmVyaGFuZ2luZyBmbG9hdHMgZnJvbSB0aGUgcHJl
dmlvdXMgUmVuZGVyQmxvY2ssIGJ1dCBvbmx5IGlmIGl0IGhhcyBhIGZsb2F0IHRoYXQgaW50cnVk
ZXMgaW50byBvdXIgc3BhY2UuICAgIAotICAgIFJlbmRlckJsb2NrKiBibG9jayA9IHRvUmVuZGVy
QmxvY2socHJldik7Ci0gICAgaWYgKGJsb2NrLT5tX2Zsb2F0aW5nT2JqZWN0cyAmJiBibG9jay0+
bG93ZXN0RmxvYXRMb2dpY2FsQm90dG9tKCkgPiBsb2dpY2FsVG9wT2Zmc2V0KQotICAgICAgICBh
ZGRJbnRydWRpbmdGbG9hdHMoYmxvY2ssIGxvZ2ljYWxMZWZ0T2Zmc2V0LCBsb2dpY2FsVG9wT2Zm
c2V0KTsKLQotICAgIGlmIChjaGlsZHJlbklubGluZSgpKSB7Ci0gICAgICAgIExheW91dFVuaXQg
Y2hhbmdlTG9naWNhbFRvcCA9IExheW91dFVuaXQ6Om1heCgpOwotICAgICAgICBMYXlvdXRVbml0
IGNoYW5nZUxvZ2ljYWxCb3R0b20gPSBMYXlvdXRVbml0OjptaW4oKTsKLSAgICAgICAgaWYgKG1f
ZmxvYXRpbmdPYmplY3RzKSB7Ci0gICAgICAgICAgICBjb25zdCBGbG9hdGluZ09iamVjdFNldCYg
ZmxvYXRpbmdPYmplY3RTZXQgPSBtX2Zsb2F0aW5nT2JqZWN0cy0+c2V0KCk7Ci0gICAgICAgICAg
ICBGbG9hdGluZ09iamVjdFNldEl0ZXJhdG9yIGVuZCA9IGZsb2F0aW5nT2JqZWN0U2V0LmVuZCgp
OwotICAgICAgICAgICAgZm9yIChGbG9hdGluZ09iamVjdFNldEl0ZXJhdG9yIGl0ID0gZmxvYXRp
bmdPYmplY3RTZXQuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7Ci0gICAgICAgICAgICAgICAg
RmxvYXRpbmdPYmplY3QqIGYgPSAqaXQ7Ci0gICAgICAgICAgICAgICAgRmxvYXRpbmdPYmplY3Qq
IG9sZEZsb2F0aW5nT2JqZWN0ID0gZmxvYXRNYXAuZ2V0KGYtPnJlbmRlcmVyKCkpOwotICAgICAg
ICAgICAgICAgIExheW91dFVuaXQgbG9naWNhbEJvdHRvbSA9IGYtPmxvZ2ljYWxCb3R0b20oaXNI
b3Jpem9udGFsV3JpdGluZ01vZGUoKSk7Ci0gICAgICAgICAgICAgICAgaWYgKG9sZEZsb2F0aW5n
T2JqZWN0KSB7Ci0gICAgICAgICAgICAgICAgICAgIExheW91dFVuaXQgb2xkTG9naWNhbEJvdHRv
bSA9IG9sZEZsb2F0aW5nT2JqZWN0LT5sb2dpY2FsQm90dG9tKGlzSG9yaXpvbnRhbFdyaXRpbmdN
b2RlKCkpOwotICAgICAgICAgICAgICAgICAgICBpZiAoZi0+bG9naWNhbFdpZHRoKGlzSG9yaXpv
bnRhbFdyaXRpbmdNb2RlKCkpICE9IG9sZEZsb2F0aW5nT2JqZWN0LT5sb2dpY2FsV2lkdGgoaXNI
b3Jpem9udGFsV3JpdGluZ01vZGUoKSkgfHwgZi0+bG9naWNhbExlZnQoaXNIb3Jpem9udGFsV3Jp
dGluZ01vZGUoKSkgIT0gb2xkRmxvYXRpbmdPYmplY3QtPmxvZ2ljYWxMZWZ0KGlzSG9yaXpvbnRh
bFdyaXRpbmdNb2RlKCkpKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBjaGFuZ2VMb2dpY2Fs
VG9wID0gMDsKLSAgICAgICAgICAgICAgICAgICAgICAgIGNoYW5nZUxvZ2ljYWxCb3R0b20gPSBt
YXgoY2hhbmdlTG9naWNhbEJvdHRvbSwgbWF4KGxvZ2ljYWxCb3R0b20sIG9sZExvZ2ljYWxCb3R0
b20pKTsKLSAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAg
ICAgIGlmIChsb2dpY2FsQm90dG9tICE9IG9sZExvZ2ljYWxCb3R0b20pIHsKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBjaGFuZ2VMb2dpY2FsVG9wID0gbWluKGNoYW5nZUxvZ2ljYWxUb3As
IG1pbihsb2dpY2FsQm90dG9tLCBvbGRMb2dpY2FsQm90dG9tKSk7Ci0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgY2hhbmdlTG9naWNhbEJvdHRvbSA9IG1heChjaGFuZ2VMb2dpY2FsQm90dG9t
LCBtYXgobG9naWNhbEJvdHRvbSwgb2xkTG9naWNhbEJvdHRvbSkpOwotICAgICAgICAgICAgICAg
ICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgTGF5b3V0VW5pdCBsb2dpY2FsVG9w
ID0gZi0+bG9naWNhbFRvcChpc0hvcml6b250YWxXcml0aW5nTW9kZSgpKTsKLSAgICAgICAgICAg
ICAgICAgICAgICAgIExheW91dFVuaXQgb2xkTG9naWNhbFRvcCA9IG9sZEZsb2F0aW5nT2JqZWN0
LT5sb2dpY2FsVG9wKGlzSG9yaXpvbnRhbFdyaXRpbmdNb2RlKCkpOwotICAgICAgICAgICAgICAg
ICAgICAgICAgaWYgKGxvZ2ljYWxUb3AgIT0gb2xkTG9naWNhbFRvcCkgewotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGNoYW5nZUxvZ2ljYWxUb3AgPSBtaW4oY2hhbmdlTG9naWNhbFRvcCwg
bWluKGxvZ2ljYWxUb3AsIG9sZExvZ2ljYWxUb3ApKTsKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBjaGFuZ2VMb2dpY2FsQm90dG9tID0gbWF4KGNoYW5nZUxvZ2ljYWxCb3R0b20sIG1heChs
b2dpY2FsVG9wLCBvbGRMb2dpY2FsVG9wKSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0g
ICAgICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgICAgICBmbG9hdE1hcC5yZW1v
dmUoZi0+cmVuZGVyZXIoKSk7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChvbGRGbG9hdGluZ09i
amVjdC0+b3JpZ2luYXRpbmdMaW5lKCkgJiYgIXNlbGZOZWVkc0xheW91dCgpKSB7Ci0gICAgICAg
ICAgICAgICAgICAgICAgICBBU1NFUlQoJm9sZEZsb2F0aW5nT2JqZWN0LT5vcmlnaW5hdGluZ0xp
bmUoKS0+cmVuZGVyZXIoKSA9PSB0aGlzKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIG9sZEZs
b2F0aW5nT2JqZWN0LT5vcmlnaW5hdGluZ0xpbmUoKS0+bWFya0RpcnR5KCk7Ci0gICAgICAgICAg
ICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgZGVsZXRlIG9sZEZsb2F0aW5nT2JqZWN0
OwotICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgIGNoYW5nZUxv
Z2ljYWxUb3AgPSAwOwotICAgICAgICAgICAgICAgICAgICBjaGFuZ2VMb2dpY2FsQm90dG9tID0g
bWF4KGNoYW5nZUxvZ2ljYWxCb3R0b20sIGxvZ2ljYWxCb3R0b20pOwotICAgICAgICAgICAgICAg
IH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIFJlbmRlcmVyVG9GbG9hdElu
Zm9NYXA6Oml0ZXJhdG9yIGVuZCA9IGZsb2F0TWFwLmVuZCgpOwotICAgICAgICBmb3IgKFJlbmRl
cmVyVG9GbG9hdEluZm9NYXA6Oml0ZXJhdG9yIGl0ID0gZmxvYXRNYXAuYmVnaW4oKTsgaXQgIT0g
ZW5kOyArK2l0KSB7Ci0gICAgICAgICAgICBGbG9hdGluZ09iamVjdCogZmxvYXRpbmdPYmplY3Qg
PSAoKml0KS52YWx1ZTsKLSAgICAgICAgICAgIGlmICghZmxvYXRpbmdPYmplY3QtPmlzRGVzY2Vu
ZGFudCgpKSB7Ci0gICAgICAgICAgICAgICAgY2hhbmdlTG9naWNhbFRvcCA9IDA7Ci0gICAgICAg
ICAgICAgICAgY2hhbmdlTG9naWNhbEJvdHRvbSA9IG1heChjaGFuZ2VMb2dpY2FsQm90dG9tLCBm
bG9hdGluZ09iamVjdC0+bG9naWNhbEJvdHRvbShpc0hvcml6b250YWxXcml0aW5nTW9kZSgpKSk7
Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgZGVsZXRlQWxsVmFsdWVzKGZsb2F0
TWFwKTsKLQotICAgICAgICBtYXJrTGluZXNEaXJ0eUluQmxvY2tSYW5nZShjaGFuZ2VMb2dpY2Fs
VG9wLCBjaGFuZ2VMb2dpY2FsQm90dG9tKTsKLSAgICB9IGVsc2UgaWYgKCFvbGRJbnRydWRpbmdG
bG9hdFNldC5pc0VtcHR5KCkpIHsKLSAgICAgICAgLy8gSWYgdGhlcmUgYXJlIHByZXZpb3VzbHkg
aW50cnVkaW5nIGZsb2F0cyB0aGF0IG5vIGxvbmdlciBpbnRydWRlLCB0aGVuIGNoaWxkcmVuIHdp
dGggZmxvYXRzCi0gICAgICAgIC8vIHNob3VsZCBhbHNvIGdldCBsYXlvdXQgYmVjYXVzZSB0aGV5
IG1pZ2h0IG5lZWQgdGhlaXIgZmxvYXRpbmcgb2JqZWN0IGxpc3RzIGNsZWFyZWQuCi0gICAgICAg
IGlmIChtX2Zsb2F0aW5nT2JqZWN0cy0+c2V0KCkuc2l6ZSgpIDwgb2xkSW50cnVkaW5nRmxvYXRT
ZXQuc2l6ZSgpKQotICAgICAgICAgICAgbWFya0FsbERlc2NlbmRhbnRzV2l0aEZsb2F0c0Zvckxh
eW91dCgpOwotICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgIGNvbnN0IEZsb2F0aW5nT2JqZWN0
U2V0JiBmbG9hdGluZ09iamVjdFNldCA9IG1fZmxvYXRpbmdPYmplY3RzLT5zZXQoKTsKLSAgICAg
ICAgICAgIEZsb2F0aW5nT2JqZWN0U2V0SXRlcmF0b3IgZW5kID0gZmxvYXRpbmdPYmplY3RTZXQu
ZW5kKCk7Ci0gICAgICAgICAgICBmb3IgKEZsb2F0aW5nT2JqZWN0U2V0SXRlcmF0b3IgaXQgPSBm
bG9hdGluZ09iamVjdFNldC5iZWdpbigpOyBpdCAhPSBlbmQgJiYgIW9sZEludHJ1ZGluZ0Zsb2F0
U2V0LmlzRW1wdHkoKTsgKytpdCkKLSAgICAgICAgICAgICAgICBvbGRJbnRydWRpbmdGbG9hdFNl
dC5yZW1vdmUoKCppdCktPnJlbmRlcmVyKCkpOwotICAgICAgICAgICAgaWYgKCFvbGRJbnRydWRp
bmdGbG9hdFNldC5pc0VtcHR5KCkpCi0gICAgICAgICAgICAgICAgbWFya0FsbERlc2NlbmRhbnRz
V2l0aEZsb2F0c0ZvckxheW91dCgpOwotICAgICAgICB9Ci0gICAgfQotfQotCiBMYXlvdXRVbml0
IFJlbmRlckJsb2NrOjphZGRPdmVyaGFuZ2luZ0Zsb2F0cyhSZW5kZXJCbG9jayogY2hpbGQsIGJv
b2wgbWFrZUNoaWxkUGFpbnRPdGhlckZsb2F0cykKIHsKICAgICAvLyBQcmV2ZW50IGZsb2F0cyBm
cm9tIGJlaW5nIGFkZGVkIHRvIHRoZSBjYW52YXMgYnkgdGhlIHJvb3QgZWxlbWVudCwgZS5nLiwg
PGh0bWw+LgpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJsb2NrLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJsb2NrLmgJKHJldmlz
aW9uIDE1NTM3NCkKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCbG9jay5oCSh3
b3JraW5nIGNvcHkpCkBAIC01ODcsMTcgKzU4Nyw2IEBAIHByb3RlY3RlZDoKIAogICAgIHZpcnR1
YWwgdm9pZCBhZGRGb2N1c1JpbmdSZWN0cyhWZWN0b3I8SW50UmVjdD4mLCBjb25zdCBMYXlvdXRQ
b2ludCYgYWRkaXRpb25hbE9mZnNldCwgY29uc3QgUmVuZGVyTGF5ZXJNb2RlbE9iamVjdCogcGFp
bnRDb250YWluZXIgPSAwKSBPVkVSUklERTsKIAotI2lmIEVOQUJMRShTVkcpCi0gICAgLy8gT25s
eSB1c2VkIGJ5IFJlbmRlclNWR1RleHQsIHdoaWNoIGV4cGxpY2l0ZWx5IG92ZXJyaWRlcyBSZW5k
ZXJCbG9jazo6bGF5b3V0QmxvY2soKSwgZG8gTk9UIHVzZSBmb3IgYW55dGhpbmcgZWxzZS4KLSAg
ICB2b2lkIGZvcmNlTGF5b3V0SW5saW5lQ2hpbGRyZW4oKQotICAgIHsKLSAgICAgICAgTGF5b3V0
VW5pdCByZXBhaW50TG9naWNhbFRvcCA9IDA7Ci0gICAgICAgIExheW91dFVuaXQgcmVwYWludExv
Z2ljYWxCb3R0b20gPSAwOwotICAgICAgICBjbGVhckZsb2F0cygpOwotICAgICAgICBsYXlvdXRJ
bmxpbmVDaGlsZHJlbih0cnVlLCByZXBhaW50TG9naWNhbFRvcCwgcmVwYWludExvZ2ljYWxCb3R0
b20pOwotICAgIH0KLSNlbmRpZgotCiAgICAgYm9vbCB1cGRhdGVTaGFwZXNCZWZvcmVCbG9ja0xh
eW91dCgpOwogICAgIHZvaWQgdXBkYXRlU2hhcGVzQWZ0ZXJCbG9ja0xheW91dChib29sIGhlaWdo
dENoYW5nZWQgPSBmYWxzZSk7CiAgICAgdm9pZCBjb21wdXRlUmVnaW9uUmFuZ2VGb3JCb3hDaGls
ZChjb25zdCBSZW5kZXJCb3gqKSBjb25zdDsKQEAgLTY1MSw4ICs2NDAsNiBAQCBwcml2YXRlOgog
CiAgICAgdmlydHVhbCB2b2lkIHJlcGFpbnRPdmVyaGFuZ2luZ0Zsb2F0cyhib29sIHBhaW50QWxs
RGVzY2VuZGFudHMpIE9WRVJSSURFIEZJTkFMOwogCi0gICAgdm9pZCBsYXlvdXRCbG9ja0NoaWxk
cmVuKGJvb2wgcmVsYXlvdXRDaGlsZHJlbiwgTGF5b3V0VW5pdCYgbWF4RmxvYXRMb2dpY2FsQm90
dG9tKTsKLSAgICB2b2lkIGxheW91dElubGluZUNoaWxkcmVuKGJvb2wgcmVsYXlvdXRDaGlsZHJl
biwgTGF5b3V0VW5pdCYgcmVwYWludExvZ2ljYWxUb3AsIExheW91dFVuaXQmIHJlcGFpbnRMb2dp
Y2FsQm90dG9tKTsKICAgICBCaWRpUnVuKiBoYW5kbGVUcmFpbGluZ1NwYWNlcyhCaWRpUnVuTGlz
dDxCaWRpUnVuPiYsIEJpZGlDb250ZXh0Kik7CiAKICAgICB2b2lkIGluc2VydEludG9UcmFja2Vk
UmVuZGVyZXJNYXBzKFJlbmRlckJveCogZGVzY2VuZGFudCwgVHJhY2tlZERlc2NlbmRhbnRzTWFw
KiYsIFRyYWNrZWRDb250YWluZXJNYXAqJik7CkBAIC05MjYsOCArOTEzLDYgQEAgcHJpdmF0ZToK
ICAgICAvLyBSZXR1cm5zIHRydWUgaWYgYW5kIG9ubHkgaWYgaXQgaGFzIHBvc2l0aW9uZWQgYW55
IGZsb2F0cy4KICAgICBib29sIHBvc2l0aW9uTmV3RmxvYXRzKCk7CiAKLSAgICB2b2lkIGNsZWFy
RmxvYXRzKCk7Ci0KICAgICBMYXlvdXRVbml0IGdldENsZWFyRGVsdGEoUmVuZGVyQm94KiBjaGls
ZCwgTGF5b3V0VW5pdCB5UG9zKTsKIAogICAgIHZpcnR1YWwgYm9vbCBhdm9pZHNGbG9hdHMoKSBj
b25zdDsKQEAgLTExOTEsNiArMTE3NiwxMCBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCBMYXlvdXRV
bml0IG9mZnNldEZyb21Mb2dpY2FsVG9wT2ZGaXJzdFBhZ2UoKSBjb25zdDsKICAgICBSZW5kZXJS
ZWdpb24qIHJlZ2lvbkF0QmxvY2tPZmZzZXQoTGF5b3V0VW5pdCkgY29uc3Q7CiAKKyAgICAvLyBG
SVhNRTogVGhpcyBpcyB0ZW1wb3JhcnkgdG8gYWxsb3cgdXMgdG8gbW92ZSBjb2RlIGZyb20gUmVu
ZGVyQmxvY2sgaW50byBSZW5kZXJCbG9ja0Zsb3cgdGhhdCBhY2Nlc3NlcyBtZW1iZXIgdmFyaWFi
bGVzIHRoYXQgd2UgaGF2ZW4ndCBtb3ZlZCBvdXQgb2YKKyAgICAvLyBSZW5kZXJCbG9jayB5ZXQu
CisgICAgZnJpZW5kIGNsYXNzIFJlbmRlckJsb2NrRmxvdzsKKwogcHJvdGVjdGVkOgogICAgIHN0
cnVjdCBGbG9hdGluZ09iamVjdEhhc2hGdW5jdGlvbnMgewogICAgICAgICBzdGF0aWMgdW5zaWdu
ZWQgaGFzaChGbG9hdGluZ09iamVjdCoga2V5KSB7IHJldHVybiBEZWZhdWx0SGFzaDxSZW5kZXJC
b3gqPjo6SGFzaDo6aGFzaChrZXktPnJlbmRlcmVyKCkpOyB9CkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2tGbG93LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2tGbG93LmNwcAkocmV2aXNpb24gMTU1Mzc0KQorKysg
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJsb2NrRmxvdy5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTI0LDYgKzI0LDEzIEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiUmVu
ZGVyQmxvY2tGbG93LmgiCiAKKyNpbmNsdWRlICJMYXlvdXRSZXBhaW50ZXIuaCIKKyNpbmNsdWRl
ICJSZW5kZXJGbG93VGhyZWFkLmgiCisjaW5jbHVkZSAiUmVuZGVyTGF5ZXIuaCIKKyNpbmNsdWRl
ICJSZW5kZXJWaWV3LmgiCisKK3VzaW5nIG5hbWVzcGFjZSBzdGQ7CisKIG5hbWVzcGFjZSBXZWJD
b3JlIHsKIAogUmVuZGVyQmxvY2tGbG93OjpSZW5kZXJCbG9ja0Zsb3coRWxlbWVudCogZWxlbWVu
dCkKQEAgLTM1LDQgKzQyLDM3MiBAQCBSZW5kZXJCbG9ja0Zsb3c6On5SZW5kZXJCbG9ja0Zsb3co
KQogewogfQogCit2b2lkIFJlbmRlckJsb2NrRmxvdzo6Y2xlYXJGbG9hdHMoKQoreworICAgIGlm
IChtX2Zsb2F0aW5nT2JqZWN0cykKKyAgICAgICAgbV9mbG9hdGluZ09iamVjdHMtPnNldEhvcml6
b250YWxXcml0aW5nTW9kZShpc0hvcml6b250YWxXcml0aW5nTW9kZSgpKTsKKworICAgIEhhc2hT
ZXQ8UmVuZGVyQm94Kj4gb2xkSW50cnVkaW5nRmxvYXRTZXQ7CisgICAgaWYgKCFjaGlsZHJlbklu
bGluZSgpICYmIG1fZmxvYXRpbmdPYmplY3RzKSB7CisgICAgICAgIGNvbnN0IEZsb2F0aW5nT2Jq
ZWN0U2V0JiBmbG9hdGluZ09iamVjdFNldCA9IG1fZmxvYXRpbmdPYmplY3RzLT5zZXQoKTsKKyAg
ICAgICAgRmxvYXRpbmdPYmplY3RTZXRJdGVyYXRvciBlbmQgPSBmbG9hdGluZ09iamVjdFNldC5l
bmQoKTsKKyAgICAgICAgZm9yIChGbG9hdGluZ09iamVjdFNldEl0ZXJhdG9yIGl0ID0gZmxvYXRp
bmdPYmplY3RTZXQuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7CisgICAgICAgICAgICBGbG9h
dGluZ09iamVjdCogZmxvYXRpbmdPYmplY3QgPSAqaXQ7CisgICAgICAgICAgICBpZiAoIWZsb2F0
aW5nT2JqZWN0LT5pc0Rlc2NlbmRhbnQoKSkKKyAgICAgICAgICAgICAgICBvbGRJbnRydWRpbmdG
bG9hdFNldC5hZGQoZmxvYXRpbmdPYmplY3QtPnJlbmRlcmVyKCkpOworICAgICAgICB9CisgICAg
fQorCisgICAgLy8gSW5saW5lIGJsb2NrcyBhcmUgY292ZXJlZCBieSB0aGUgaXNSZXBsYWNlZCgp
IGNoZWNrIGluIHRoZSBhdm9pZEZsb2F0cyBtZXRob2QuCisgICAgaWYgKGF2b2lkc0Zsb2F0cygp
IHx8IGlzUm9vdCgpIHx8IGlzUmVuZGVyVmlldygpIHx8IGlzRmxvYXRpbmdPck91dE9mRmxvd1Bv
c2l0aW9uZWQoKSB8fCBpc1RhYmxlQ2VsbCgpKSB7CisgICAgICAgIGlmIChtX2Zsb2F0aW5nT2Jq
ZWN0cykgeworICAgICAgICAgICAgZGVsZXRlQWxsVmFsdWVzKG1fZmxvYXRpbmdPYmplY3RzLT5z
ZXQoKSk7CisgICAgICAgICAgICBtX2Zsb2F0aW5nT2JqZWN0cy0+Y2xlYXIoKTsKKyAgICAgICAg
fQorICAgICAgICBpZiAoIW9sZEludHJ1ZGluZ0Zsb2F0U2V0LmlzRW1wdHkoKSkKKyAgICAgICAg
ICAgIG1hcmtBbGxEZXNjZW5kYW50c1dpdGhGbG9hdHNGb3JMYXlvdXQoKTsKKyAgICAgICAgcmV0
dXJuOworICAgIH0KKworICAgIHR5cGVkZWYgSGFzaE1hcDxSZW5kZXJPYmplY3QqLCBGbG9hdGlu
Z09iamVjdCo+IFJlbmRlcmVyVG9GbG9hdEluZm9NYXA7CisgICAgUmVuZGVyZXJUb0Zsb2F0SW5m
b01hcCBmbG9hdE1hcDsKKworICAgIGlmIChtX2Zsb2F0aW5nT2JqZWN0cykgeworICAgICAgICBj
b25zdCBGbG9hdGluZ09iamVjdFNldCYgZmxvYXRpbmdPYmplY3RTZXQgPSBtX2Zsb2F0aW5nT2Jq
ZWN0cy0+c2V0KCk7CisgICAgICAgIGlmIChjaGlsZHJlbklubGluZSgpKSB7CisgICAgICAgICAg
ICBGbG9hdGluZ09iamVjdFNldEl0ZXJhdG9yIGVuZCA9IGZsb2F0aW5nT2JqZWN0U2V0LmVuZCgp
OworICAgICAgICAgICAgZm9yIChGbG9hdGluZ09iamVjdFNldEl0ZXJhdG9yIGl0ID0gZmxvYXRp
bmdPYmplY3RTZXQuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7CisgICAgICAgICAgICAgICAg
RmxvYXRpbmdPYmplY3QqIGYgPSAqaXQ7CisgICAgICAgICAgICAgICAgZmxvYXRNYXAuYWRkKGYt
PnJlbmRlcmVyKCksIGYpOworICAgICAgICAgICAgfQorICAgICAgICB9IGVsc2UKKyAgICAgICAg
ICAgIGRlbGV0ZUFsbFZhbHVlcyhmbG9hdGluZ09iamVjdFNldCk7CisgICAgICAgIG1fZmxvYXRp
bmdPYmplY3RzLT5jbGVhcigpOworICAgIH0KKworICAgIC8vIFdlIHNob3VsZCBub3QgcHJvY2Vz
cyBmbG9hdHMgaWYgdGhlIHBhcmVudCBub2RlIGlzIG5vdCBhIFJlbmRlckJsb2NrLiBPdGhlcndp
c2UsIHdlIHdpbGwgYWRkIAorICAgIC8vIGZsb2F0cyBpbiBhbiBpbnZhbGlkIGNvbnRleHQuIFRo
aXMgd2lsbCBjYXVzZSBhIGNyYXNoIGFyaXNpbmcgZnJvbSBhIGJhZCBjYXN0IG9uIHRoZSBwYXJl
bnQuCisgICAgLy8gU2VlIDxyZGFyOi8vcHJvYmxlbS84MDQ5NzUzPiwgd2hlcmUgZmxvYXQgcHJv
cGVydHkgaXMgYXBwbGllZCBvbiBhIHRleHQgbm9kZSBpbiBhIFNWRy4KKyAgICBpZiAoIXBhcmVu
dCgpIHx8ICFwYXJlbnQoKS0+aXNSZW5kZXJCbG9jaygpKQorICAgICAgICByZXR1cm47CisKKyAg
ICAvLyBBdHRlbXB0IHRvIGxvY2F0ZSBhIHByZXZpb3VzIHNpYmxpbmcgd2l0aCBvdmVyaGFuZ2lu
ZyBmbG9hdHMuIFdlIHNraXAgYW55IGVsZW1lbnRzIHRoYXQgYXJlCisgICAgLy8gb3V0IG9mIGZs
b3cgKGxpa2UgZmxvYXRpbmcvcG9zaXRpb25lZCBlbGVtZW50cyksIGFuZCB3ZSBhbHNvIHNraXAg
b3ZlciBhbnkgb2JqZWN0cyB0aGF0IG1heSBoYXZlIHNoaWZ0ZWQKKyAgICAvLyB0byBhdm9pZCBm
bG9hdHMuCisgICAgUmVuZGVyQmxvY2sqIHBhcmVudEJsb2NrID0gdG9SZW5kZXJCbG9jayhwYXJl
bnQoKSk7CisgICAgYm9vbCBwYXJlbnRIYXNGbG9hdHMgPSBmYWxzZTsKKyAgICBSZW5kZXJPYmpl
Y3QqIHByZXYgPSBwcmV2aW91c1NpYmxpbmcoKTsKKyAgICB3aGlsZSAocHJldiAmJiAocHJldi0+
aXNGbG9hdGluZ09yT3V0T2ZGbG93UG9zaXRpb25lZCgpIHx8ICFwcmV2LT5pc0JveCgpIHx8ICFw
cmV2LT5pc1JlbmRlckJsb2NrKCkgfHwgdG9SZW5kZXJCbG9jayhwcmV2KS0+YXZvaWRzRmxvYXRz
KCkpKSB7CisgICAgICAgIGlmIChwcmV2LT5pc0Zsb2F0aW5nKCkpCisgICAgICAgICAgICBwYXJl
bnRIYXNGbG9hdHMgPSB0cnVlOworICAgICAgICBwcmV2ID0gcHJldi0+cHJldmlvdXNTaWJsaW5n
KCk7CisgICAgfQorCisgICAgLy8gRmlyc3QgYWRkIGluIGZsb2F0cyBmcm9tIHRoZSBwYXJlbnQu
CisgICAgTGF5b3V0VW5pdCBsb2dpY2FsVG9wT2Zmc2V0ID0gbG9naWNhbFRvcCgpOworICAgIGlm
IChwYXJlbnRIYXNGbG9hdHMpCisgICAgICAgIGFkZEludHJ1ZGluZ0Zsb2F0cyhwYXJlbnRCbG9j
aywgcGFyZW50QmxvY2stPmxvZ2ljYWxMZWZ0T2Zmc2V0Rm9yQ29udGVudCgpLCBsb2dpY2FsVG9w
T2Zmc2V0KTsKKyAgICAKKyAgICBMYXlvdXRVbml0IGxvZ2ljYWxMZWZ0T2Zmc2V0ID0gMDsKKyAg
ICBpZiAocHJldikKKyAgICAgICAgbG9naWNhbFRvcE9mZnNldCAtPSB0b1JlbmRlckJveChwcmV2
KS0+bG9naWNhbFRvcCgpOworICAgIGVsc2UgeworICAgICAgICBwcmV2ID0gcGFyZW50QmxvY2s7
CisgICAgICAgIGxvZ2ljYWxMZWZ0T2Zmc2V0ICs9IHBhcmVudEJsb2NrLT5sb2dpY2FsTGVmdE9m
ZnNldEZvckNvbnRlbnQoKTsKKyAgICB9CisKKyAgICAvLyBBZGQgb3ZlcmhhbmdpbmcgZmxvYXRz
IGZyb20gdGhlIHByZXZpb3VzIFJlbmRlckJsb2NrLCBidXQgb25seSBpZiBpdCBoYXMgYSBmbG9h
dCB0aGF0IGludHJ1ZGVzIGludG8gb3VyIHNwYWNlLiAgICAKKyAgICBSZW5kZXJCbG9jayogYmxv
Y2sgPSB0b1JlbmRlckJsb2NrKHByZXYpOworICAgIGlmIChibG9jay0+bV9mbG9hdGluZ09iamVj
dHMgJiYgYmxvY2stPmxvd2VzdEZsb2F0TG9naWNhbEJvdHRvbSgpID4gbG9naWNhbFRvcE9mZnNl
dCkKKyAgICAgICAgYWRkSW50cnVkaW5nRmxvYXRzKGJsb2NrLCBsb2dpY2FsTGVmdE9mZnNldCwg
bG9naWNhbFRvcE9mZnNldCk7CisKKyAgICBpZiAoY2hpbGRyZW5JbmxpbmUoKSkgeworICAgICAg
ICBMYXlvdXRVbml0IGNoYW5nZUxvZ2ljYWxUb3AgPSBMYXlvdXRVbml0OjptYXgoKTsKKyAgICAg
ICAgTGF5b3V0VW5pdCBjaGFuZ2VMb2dpY2FsQm90dG9tID0gTGF5b3V0VW5pdDo6bWluKCk7Cisg
ICAgICAgIGlmIChtX2Zsb2F0aW5nT2JqZWN0cykgeworICAgICAgICAgICAgY29uc3QgRmxvYXRp
bmdPYmplY3RTZXQmIGZsb2F0aW5nT2JqZWN0U2V0ID0gbV9mbG9hdGluZ09iamVjdHMtPnNldCgp
OworICAgICAgICAgICAgRmxvYXRpbmdPYmplY3RTZXRJdGVyYXRvciBlbmQgPSBmbG9hdGluZ09i
amVjdFNldC5lbmQoKTsKKyAgICAgICAgICAgIGZvciAoRmxvYXRpbmdPYmplY3RTZXRJdGVyYXRv
ciBpdCA9IGZsb2F0aW5nT2JqZWN0U2V0LmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkgeworICAg
ICAgICAgICAgICAgIEZsb2F0aW5nT2JqZWN0KiBmID0gKml0OworICAgICAgICAgICAgICAgIEZs
b2F0aW5nT2JqZWN0KiBvbGRGbG9hdGluZ09iamVjdCA9IGZsb2F0TWFwLmdldChmLT5yZW5kZXJl
cigpKTsKKyAgICAgICAgICAgICAgICBMYXlvdXRVbml0IGxvZ2ljYWxCb3R0b20gPSBmLT5sb2dp
Y2FsQm90dG9tKGlzSG9yaXpvbnRhbFdyaXRpbmdNb2RlKCkpOworICAgICAgICAgICAgICAgIGlm
IChvbGRGbG9hdGluZ09iamVjdCkgeworICAgICAgICAgICAgICAgICAgICBMYXlvdXRVbml0IG9s
ZExvZ2ljYWxCb3R0b20gPSBvbGRGbG9hdGluZ09iamVjdC0+bG9naWNhbEJvdHRvbShpc0hvcml6
b250YWxXcml0aW5nTW9kZSgpKTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKGYtPmxvZ2ljYWxX
aWR0aChpc0hvcml6b250YWxXcml0aW5nTW9kZSgpKSAhPSBvbGRGbG9hdGluZ09iamVjdC0+bG9n
aWNhbFdpZHRoKGlzSG9yaXpvbnRhbFdyaXRpbmdNb2RlKCkpIHx8IGYtPmxvZ2ljYWxMZWZ0KGlz
SG9yaXpvbnRhbFdyaXRpbmdNb2RlKCkpICE9IG9sZEZsb2F0aW5nT2JqZWN0LT5sb2dpY2FsTGVm
dChpc0hvcml6b250YWxXcml0aW5nTW9kZSgpKSkgeworICAgICAgICAgICAgICAgICAgICAgICAg
Y2hhbmdlTG9naWNhbFRvcCA9IDA7CisgICAgICAgICAgICAgICAgICAgICAgICBjaGFuZ2VMb2dp
Y2FsQm90dG9tID0gbWF4KGNoYW5nZUxvZ2ljYWxCb3R0b20sIG1heChsb2dpY2FsQm90dG9tLCBv
bGRMb2dpY2FsQm90dG9tKSk7CisgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAg
ICAgICAgICAgICAgICAgICBpZiAobG9naWNhbEJvdHRvbSAhPSBvbGRMb2dpY2FsQm90dG9tKSB7
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhbmdlTG9naWNhbFRvcCA9IG1pbihjaGFu
Z2VMb2dpY2FsVG9wLCBtaW4obG9naWNhbEJvdHRvbSwgb2xkTG9naWNhbEJvdHRvbSkpOworICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGNoYW5nZUxvZ2ljYWxCb3R0b20gPSBtYXgoY2hhbmdl
TG9naWNhbEJvdHRvbSwgbWF4KGxvZ2ljYWxCb3R0b20sIG9sZExvZ2ljYWxCb3R0b20pKTsKKyAg
ICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIExheW91dFVu
aXQgbG9naWNhbFRvcCA9IGYtPmxvZ2ljYWxUb3AoaXNIb3Jpem9udGFsV3JpdGluZ01vZGUoKSk7
CisgICAgICAgICAgICAgICAgICAgICAgICBMYXlvdXRVbml0IG9sZExvZ2ljYWxUb3AgPSBvbGRG
bG9hdGluZ09iamVjdC0+bG9naWNhbFRvcChpc0hvcml6b250YWxXcml0aW5nTW9kZSgpKTsKKyAg
ICAgICAgICAgICAgICAgICAgICAgIGlmIChsb2dpY2FsVG9wICE9IG9sZExvZ2ljYWxUb3ApIHsK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFuZ2VMb2dpY2FsVG9wID0gbWluKGNoYW5n
ZUxvZ2ljYWxUb3AsIG1pbihsb2dpY2FsVG9wLCBvbGRMb2dpY2FsVG9wKSk7CisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgY2hhbmdlTG9naWNhbEJvdHRvbSA9IG1heChjaGFuZ2VMb2dpY2Fs
Qm90dG9tLCBtYXgobG9naWNhbFRvcCwgb2xkTG9naWNhbFRvcCkpOworICAgICAgICAgICAgICAg
ICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAgICAg
ZmxvYXRNYXAucmVtb3ZlKGYtPnJlbmRlcmVyKCkpOworICAgICAgICAgICAgICAgICAgICBpZiAo
b2xkRmxvYXRpbmdPYmplY3QtPm9yaWdpbmF0aW5nTGluZSgpICYmICFzZWxmTmVlZHNMYXlvdXQo
KSkgeworICAgICAgICAgICAgICAgICAgICAgICAgQVNTRVJUKCZvbGRGbG9hdGluZ09iamVjdC0+
b3JpZ2luYXRpbmdMaW5lKCktPnJlbmRlcmVyKCkgPT0gdGhpcyk7CisgICAgICAgICAgICAgICAg
ICAgICAgICBvbGRGbG9hdGluZ09iamVjdC0+b3JpZ2luYXRpbmdMaW5lKCktPm1hcmtEaXJ0eSgp
OworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIGRlbGV0ZSBvbGRG
bG9hdGluZ09iamVjdDsKKyAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAg
ICAgICBjaGFuZ2VMb2dpY2FsVG9wID0gMDsKKyAgICAgICAgICAgICAgICAgICAgY2hhbmdlTG9n
aWNhbEJvdHRvbSA9IG1heChjaGFuZ2VMb2dpY2FsQm90dG9tLCBsb2dpY2FsQm90dG9tKTsKKyAg
ICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICBSZW5k
ZXJlclRvRmxvYXRJbmZvTWFwOjppdGVyYXRvciBlbmQgPSBmbG9hdE1hcC5lbmQoKTsKKyAgICAg
ICAgZm9yIChSZW5kZXJlclRvRmxvYXRJbmZvTWFwOjppdGVyYXRvciBpdCA9IGZsb2F0TWFwLmJl
Z2luKCk7IGl0ICE9IGVuZDsgKytpdCkgeworICAgICAgICAgICAgRmxvYXRpbmdPYmplY3QqIGZs
b2F0aW5nT2JqZWN0ID0gKCppdCkudmFsdWU7CisgICAgICAgICAgICBpZiAoIWZsb2F0aW5nT2Jq
ZWN0LT5pc0Rlc2NlbmRhbnQoKSkgeworICAgICAgICAgICAgICAgIGNoYW5nZUxvZ2ljYWxUb3Ag
PSAwOworICAgICAgICAgICAgICAgIGNoYW5nZUxvZ2ljYWxCb3R0b20gPSBtYXgoY2hhbmdlTG9n
aWNhbEJvdHRvbSwgZmxvYXRpbmdPYmplY3QtPmxvZ2ljYWxCb3R0b20oaXNIb3Jpem9udGFsV3Jp
dGluZ01vZGUoKSkpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGRlbGV0ZUFs
bFZhbHVlcyhmbG9hdE1hcCk7CisKKyAgICAgICAgbWFya0xpbmVzRGlydHlJbkJsb2NrUmFuZ2Uo
Y2hhbmdlTG9naWNhbFRvcCwgY2hhbmdlTG9naWNhbEJvdHRvbSk7CisgICAgfSBlbHNlIGlmICgh
b2xkSW50cnVkaW5nRmxvYXRTZXQuaXNFbXB0eSgpKSB7CisgICAgICAgIC8vIElmIHRoZXJlIGFy
ZSBwcmV2aW91c2x5IGludHJ1ZGluZyBmbG9hdHMgdGhhdCBubyBsb25nZXIgaW50cnVkZSwgdGhl
biBjaGlsZHJlbiB3aXRoIGZsb2F0cworICAgICAgICAvLyBzaG91bGQgYWxzbyBnZXQgbGF5b3V0
IGJlY2F1c2UgdGhleSBtaWdodCBuZWVkIHRoZWlyIGZsb2F0aW5nIG9iamVjdCBsaXN0cyBjbGVh
cmVkLgorICAgICAgICBpZiAobV9mbG9hdGluZ09iamVjdHMtPnNldCgpLnNpemUoKSA8IG9sZElu
dHJ1ZGluZ0Zsb2F0U2V0LnNpemUoKSkKKyAgICAgICAgICAgIG1hcmtBbGxEZXNjZW5kYW50c1dp
dGhGbG9hdHNGb3JMYXlvdXQoKTsKKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICBjb25zdCBG
bG9hdGluZ09iamVjdFNldCYgZmxvYXRpbmdPYmplY3RTZXQgPSBtX2Zsb2F0aW5nT2JqZWN0cy0+
c2V0KCk7CisgICAgICAgICAgICBGbG9hdGluZ09iamVjdFNldEl0ZXJhdG9yIGVuZCA9IGZsb2F0
aW5nT2JqZWN0U2V0LmVuZCgpOworICAgICAgICAgICAgZm9yIChGbG9hdGluZ09iamVjdFNldEl0
ZXJhdG9yIGl0ID0gZmxvYXRpbmdPYmplY3RTZXQuYmVnaW4oKTsgaXQgIT0gZW5kICYmICFvbGRJ
bnRydWRpbmdGbG9hdFNldC5pc0VtcHR5KCk7ICsraXQpCisgICAgICAgICAgICAgICAgb2xkSW50
cnVkaW5nRmxvYXRTZXQucmVtb3ZlKCgqaXQpLT5yZW5kZXJlcigpKTsKKyAgICAgICAgICAgIGlm
ICghb2xkSW50cnVkaW5nRmxvYXRTZXQuaXNFbXB0eSgpKQorICAgICAgICAgICAgICAgIG1hcmtB
bGxEZXNjZW5kYW50c1dpdGhGbG9hdHNGb3JMYXlvdXQoKTsKKyAgICAgICAgfQorICAgIH0KK30K
Kwordm9pZCBSZW5kZXJCbG9ja0Zsb3c6OmxheW91dEJsb2NrKGJvb2wgcmVsYXlvdXRDaGlsZHJl
biwgTGF5b3V0VW5pdCBwYWdlTG9naWNhbEhlaWdodCkKK3sKKyAgICBBU1NFUlQobmVlZHNMYXlv
dXQoKSk7CisKKyAgICBpZiAoIXJlbGF5b3V0Q2hpbGRyZW4gJiYgc2ltcGxpZmllZExheW91dCgp
KQorICAgICAgICByZXR1cm47CisKKyAgICBMYXlvdXRSZXBhaW50ZXIgcmVwYWludGVyKCp0aGlz
LCBjaGVja0ZvclJlcGFpbnREdXJpbmdMYXlvdXQoKSk7CisKKyAgICBpZiAodXBkYXRlTG9naWNh
bFdpZHRoQW5kQ29sdW1uV2lkdGgoKSkKKyAgICAgICAgcmVsYXlvdXRDaGlsZHJlbiA9IHRydWU7
CisKKyAgICBjbGVhckZsb2F0cygpOworCisgICAgTGF5b3V0VW5pdCBwcmV2aW91c0hlaWdodCA9
IGxvZ2ljYWxIZWlnaHQoKTsKKyAgICAvLyBGSVhNRTogc2hvdWxkIHRoaXMgc3RhcnQgb3V0IGFz
IGJvcmRlckFuZFBhZGRpbmdMb2dpY2FsSGVpZ2h0KCkgKyBzY3JvbGxiYXJMb2dpY2FsSGVpZ2h0
KCksCisgICAgLy8gZm9yIGNvbnNpc3RlbmN5IHdpdGggb3RoZXIgcmVuZGVyIGNsYXNzZXM/Cisg
ICAgc2V0TG9naWNhbEhlaWdodCgwKTsKKworICAgIGJvb2wgcGFnZUxvZ2ljYWxIZWlnaHRDaGFu
Z2VkID0gZmFsc2U7CisgICAgYm9vbCBoYXNTcGVjaWZpZWRQYWdlTG9naWNhbEhlaWdodCA9IGZh
bHNlOworICAgIGNoZWNrRm9yUGFnaW5hdGlvbkxvZ2ljYWxIZWlnaHRDaGFuZ2UocGFnZUxvZ2lj
YWxIZWlnaHQsIHBhZ2VMb2dpY2FsSGVpZ2h0Q2hhbmdlZCwgaGFzU3BlY2lmaWVkUGFnZUxvZ2lj
YWxIZWlnaHQpOworCisgICAgUmVuZGVyU3R5bGUqIHN0eWxlVG9Vc2UgPSBzdHlsZSgpOworICAg
IExheW91dFN0YXRlTWFpbnRhaW5lciBzdGF0ZVB1c2hlcigmdmlldygpLCB0aGlzLCBsb2NhdGlv
bk9mZnNldCgpLCBoYXNDb2x1bW5zKCkgfHwgaGFzVHJhbnNmb3JtKCkgfHwgaGFzUmVmbGVjdGlv
bigpIHx8IHN0eWxlVG9Vc2UtPmlzRmxpcHBlZEJsb2Nrc1dyaXRpbmdNb2RlKCksIHBhZ2VMb2dp
Y2FsSGVpZ2h0LCBwYWdlTG9naWNhbEhlaWdodENoYW5nZWQsIGNvbHVtbkluZm8oKSk7CisKKyAg
ICAvLyBSZWdpb25zIGNoYW5naW5nIHdpZHRocyBjYW4gZm9yY2UgdXMgdG8gcmVsYXlvdXQgb3Vy
IGNoaWxkcmVuLgorICAgIFJlbmRlckZsb3dUaHJlYWQqIGZsb3dUaHJlYWQgPSBmbG93VGhyZWFk
Q29udGFpbmluZ0Jsb2NrKCk7CisgICAgaWYgKGxvZ2ljYWxXaWR0aENoYW5nZWRJblJlZ2lvbnMo
Zmxvd1RocmVhZCkpCisgICAgICAgIHJlbGF5b3V0Q2hpbGRyZW4gPSB0cnVlOworICAgIGlmICh1
cGRhdGVTaGFwZXNCZWZvcmVCbG9ja0xheW91dCgpKQorICAgICAgICByZWxheW91dENoaWxkcmVu
ID0gdHJ1ZTsKKworICAgIC8vIFdlIHVzZSBmb3VyIHZhbHVlcywgbWF4VG9wUG9zLCBtYXhUb3BO
ZWcsIG1heEJvdHRvbVBvcywgYW5kIG1heEJvdHRvbU5lZywgdG8gdHJhY2sKKyAgICAvLyBvdXIg
Y3VycmVudCBtYXhpbWFsIHBvc2l0aXZlIGFuZCBuZWdhdGl2ZSBtYXJnaW5zLiBUaGVzZSB2YWx1
ZXMgYXJlIHVzZWQgd2hlbiB3ZQorICAgIC8vIGFyZSBjb2xsYXBzZWQgd2l0aCBhZGphY2VudCBi
bG9ja3MsIHNvIGZvciBleGFtcGxlLCBpZiB5b3UgaGF2ZSBibG9jayBBIGFuZCBCCisgICAgLy8g
Y29sbGFwc2luZyB0b2dldGhlciwgdGhlbiB5b3UnZCB0YWtlIHRoZSBtYXhpbWFsIHBvc2l0aXZl
IG1hcmdpbiBmcm9tIGJvdGggQSBhbmQgQgorICAgIC8vIGFuZCBzdWJ0cmFjdCBpdCBmcm9tIHRo
ZSBtYXhpbWFsIG5lZ2F0aXZlIG1hcmdpbiBmcm9tIGJvdGggQSBhbmQgQiB0byBnZXQgdGhlCisg
ICAgLy8gdHJ1ZSBjb2xsYXBzZWQgbWFyZ2luLiBUaGlzIGFsZ29yaXRobSBpcyByZWN1cnNpdmUs
IHNvIHdoZW4gd2UgZmluaXNoIGxheW91dCgpCisgICAgLy8gb3VyIGJsb2NrIGtub3dzIGl0cyBj
dXJyZW50IG1heGltYWwgcG9zaXRpdmUvbmVnYXRpdmUgdmFsdWVzLgorICAgIC8vCisgICAgLy8g
U3RhcnQgb3V0IGJ5IHNldHRpbmcgb3VyIG1hcmdpbiB2YWx1ZXMgdG8gb3VyIGN1cnJlbnQgbWFy
Z2lucy4gVGFibGUgY2VsbHMgaGF2ZQorICAgIC8vIG5vIG1hcmdpbnMsIHNvIHdlIGRvbid0IGZp
bGwgaW4gdGhlIHZhbHVlcyBmb3IgdGFibGUgY2VsbHMuCisgICAgYm9vbCBpc0NlbGwgPSBpc1Rh
YmxlQ2VsbCgpOworICAgIGlmICghaXNDZWxsKSB7CisgICAgICAgIGluaXRNYXhNYXJnaW5WYWx1
ZXMoKTsKKyAgICAgICAgCisgICAgICAgIHNldEhhc01hcmdpbkJlZm9yZVF1aXJrKHN0eWxlVG9V
c2UtPmhhc01hcmdpbkJlZm9yZVF1aXJrKCkpOworICAgICAgICBzZXRIYXNNYXJnaW5BZnRlclF1
aXJrKHN0eWxlVG9Vc2UtPmhhc01hcmdpbkFmdGVyUXVpcmsoKSk7CisgICAgICAgIHNldFBhZ2lu
YXRpb25TdHJ1dCgwKTsKKyAgICB9CisKKyAgICBMYXlvdXRVbml0IHJlcGFpbnRMb2dpY2FsVG9w
ID0gMDsKKyAgICBMYXlvdXRVbml0IHJlcGFpbnRMb2dpY2FsQm90dG9tID0gMDsKKyAgICBMYXlv
dXRVbml0IG1heEZsb2F0TG9naWNhbEJvdHRvbSA9IDA7CisgICAgaWYgKCFmaXJzdENoaWxkKCkg
JiYgIWlzQW5vbnltb3VzQmxvY2soKSkKKyAgICAgICAgc2V0Q2hpbGRyZW5JbmxpbmUodHJ1ZSk7
CisgICAgaWYgKGNoaWxkcmVuSW5saW5lKCkpCisgICAgICAgIGxheW91dElubGluZUNoaWxkcmVu
KHJlbGF5b3V0Q2hpbGRyZW4sIHJlcGFpbnRMb2dpY2FsVG9wLCByZXBhaW50TG9naWNhbEJvdHRv
bSk7CisgICAgZWxzZQorICAgICAgICBsYXlvdXRCbG9ja0NoaWxkcmVuKHJlbGF5b3V0Q2hpbGRy
ZW4sIG1heEZsb2F0TG9naWNhbEJvdHRvbSk7CisKKyAgICAvLyBFeHBhbmQgb3VyIGludHJpbnNp
YyBoZWlnaHQgdG8gZW5jb21wYXNzIGZsb2F0cy4KKyAgICBMYXlvdXRVbml0IHRvQWRkID0gYm9y
ZGVyQW5kUGFkZGluZ0FmdGVyKCkgKyBzY3JvbGxiYXJMb2dpY2FsSGVpZ2h0KCk7CisgICAgaWYg
KGxvd2VzdEZsb2F0TG9naWNhbEJvdHRvbSgpID4gKGxvZ2ljYWxIZWlnaHQoKSAtIHRvQWRkKSAm
JiBleHBhbmRzVG9FbmNsb3NlT3ZlcmhhbmdpbmdGbG9hdHMoKSkKKyAgICAgICAgc2V0TG9naWNh
bEhlaWdodChsb3dlc3RGbG9hdExvZ2ljYWxCb3R0b20oKSArIHRvQWRkKTsKKyAgICAKKyAgICBp
ZiAocmVsYXlvdXRGb3JQYWdpbmF0aW9uKGhhc1NwZWNpZmllZFBhZ2VMb2dpY2FsSGVpZ2h0LCBw
YWdlTG9naWNhbEhlaWdodCwgc3RhdGVQdXNoZXIpIHx8IHJlbGF5b3V0VG9Bdm9pZFdpZG93cyhz
dGF0ZVB1c2hlcikpIHsKKyAgICAgICAgQVNTRVJUKCFzaG91bGRCcmVha0F0TGluZVRvQXZvaWRX
aWRvdygpKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIC8vIENhbGN1bGF0ZSBvdXIg
bmV3IGhlaWdodC4KKyAgICBMYXlvdXRVbml0IG9sZEhlaWdodCA9IGxvZ2ljYWxIZWlnaHQoKTsK
KyAgICBMYXlvdXRVbml0IG9sZENsaWVudEFmdGVyRWRnZSA9IGNsaWVudExvZ2ljYWxCb3R0b20o
KTsKKworICAgIC8vIEJlZm9yZSB1cGRhdGluZyB0aGUgZmluYWwgc2l6ZSBvZiB0aGUgZmxvdyB0
aHJlYWQgbWFrZSBzdXJlIGEgZm9yY2VkIGJyZWFrIGlzIGFwcGxpZWQgYWZ0ZXIgdGhlIGNvbnRl
bnQuCisgICAgLy8gVGhpcyBlbnN1cmVzIHRoZSBzaXplIGluZm9ybWF0aW9uIGlzIGNvcnJlY3Rs
eSBjb21wdXRlZCBmb3IgdGhlIGxhc3QgYXV0by1oZWlnaHQgcmVnaW9uIHJlY2VpdmluZyBjb250
ZW50LgorICAgIGlmIChpc1JlbmRlckZsb3dUaHJlYWQoKSkKKyAgICAgICAgdG9SZW5kZXJGbG93
VGhyZWFkKHRoaXMpLT5hcHBseUJyZWFrQWZ0ZXJDb250ZW50KG9sZENsaWVudEFmdGVyRWRnZSk7
CisKKyAgICB1cGRhdGVMb2dpY2FsSGVpZ2h0KCk7CisgICAgTGF5b3V0VW5pdCBuZXdIZWlnaHQg
PSBsb2dpY2FsSGVpZ2h0KCk7CisgICAgaWYgKG9sZEhlaWdodCAhPSBuZXdIZWlnaHQpIHsKKyAg
ICAgICAgaWYgKG9sZEhlaWdodCA+IG5ld0hlaWdodCAmJiBtYXhGbG9hdExvZ2ljYWxCb3R0b20g
PiBuZXdIZWlnaHQgJiYgIWNoaWxkcmVuSW5saW5lKCkpIHsKKyAgICAgICAgICAgIC8vIE9uZSBv
ZiBvdXIgY2hpbGRyZW4ncyBmbG9hdHMgbWF5IGhhdmUgYmVjb21lIGFuIG92ZXJoYW5naW5nIGZs
b2F0IGZvciB1cy4gV2UgbmVlZCB0byBsb29rIGZvciBpdC4KKyAgICAgICAgICAgIGZvciAoUmVu
ZGVyT2JqZWN0KiBjaGlsZCA9IGZpcnN0Q2hpbGQoKTsgY2hpbGQ7IGNoaWxkID0gY2hpbGQtPm5l
eHRTaWJsaW5nKCkpIHsKKyAgICAgICAgICAgICAgICBpZiAoY2hpbGQtPmlzUmVuZGVyQmxvY2tG
bG93KCkgJiYgIWNoaWxkLT5pc0Zsb2F0aW5nT3JPdXRPZkZsb3dQb3NpdGlvbmVkKCkpIHsKKyAg
ICAgICAgICAgICAgICAgICAgUmVuZGVyQmxvY2sqIGJsb2NrID0gdG9SZW5kZXJCbG9jayhjaGls
ZCk7CisgICAgICAgICAgICAgICAgICAgIGlmIChibG9jay0+bG93ZXN0RmxvYXRMb2dpY2FsQm90
dG9tKCkgKyBibG9jay0+bG9naWNhbFRvcCgpID4gbmV3SGVpZ2h0KQorICAgICAgICAgICAgICAg
ICAgICAgICAgYWRkT3ZlcmhhbmdpbmdGbG9hdHMoYmxvY2ssIGZhbHNlKTsKKyAgICAgICAgICAg
ICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisKKyAgICBib29sIGhlaWdo
dENoYW5nZWQgPSAocHJldmlvdXNIZWlnaHQgIT0gbmV3SGVpZ2h0KTsKKyAgICBpZiAoaGVpZ2h0
Q2hhbmdlZCkKKyAgICAgICAgcmVsYXlvdXRDaGlsZHJlbiA9IHRydWU7CisKKyAgICBsYXlvdXRQ
b3NpdGlvbmVkT2JqZWN0cyhyZWxheW91dENoaWxkcmVuIHx8IGlzUm9vdCgpKTsKKworICAgIHVw
ZGF0ZVNoYXBlc0FmdGVyQmxvY2tMYXlvdXQoaGVpZ2h0Q2hhbmdlZCk7CisKKyAgICAvLyBBZGQg
b3ZlcmZsb3cgZnJvbSBjaGlsZHJlbiAodW5sZXNzIHdlJ3JlIG11bHRpLWNvbHVtbiwgc2luY2Ug
aW4gdGhhdCBjYXNlIGFsbCBvdXIgY2hpbGQgb3ZlcmZsb3cgaXMgY2xpcHBlZCBhbnl3YXkpLgor
ICAgIGNvbXB1dGVPdmVyZmxvdyhvbGRDbGllbnRBZnRlckVkZ2UpOworICAgIAorICAgIHN0YXRl
UHVzaGVyLnBvcCgpOworCisgICAgZml0Qm9yZGVyVG9MaW5lc0lmTmVlZGVkKCk7CisKKyAgICBp
ZiAodmlldygpLmxheW91dFN0YXRlKCktPm1fcGFnZUxvZ2ljYWxIZWlnaHQpCisgICAgICAgIHNl
dFBhZ2VMb2dpY2FsT2Zmc2V0KHZpZXcoKS5sYXlvdXRTdGF0ZSgpLT5wYWdlTG9naWNhbE9mZnNl
dCh0aGlzLCBsb2dpY2FsVG9wKCkpKTsKKworICAgIHVwZGF0ZUxheWVyVHJhbnNmb3JtKCk7CisK
KyAgICAvLyBVcGRhdGUgb3VyIHNjcm9sbCBpbmZvcm1hdGlvbiBpZiB3ZSdyZSBvdmVyZmxvdzph
dXRvL3Njcm9sbC9oaWRkZW4gbm93IHRoYXQgd2Uga25vdyBpZgorICAgIC8vIHdlIG92ZXJmbG93
IG9yIG5vdC4KKyAgICB1cGRhdGVTY3JvbGxJbmZvQWZ0ZXJMYXlvdXQoKTsKKworICAgIC8vIEZJ
WE1FOiBUaGlzIHJlcGFpbnQgbG9naWMgc2hvdWxkIGJlIG1vdmVkIGludG8gYSBzZXBhcmF0ZSBo
ZWxwZXIgZnVuY3Rpb24hCisgICAgLy8gUmVwYWludCB3aXRoIG91ciBuZXcgYm91bmRzIGlmIHRo
ZXkgYXJlIGRpZmZlcmVudCBmcm9tIG91ciBvbGQgYm91bmRzLgorICAgIGJvb2wgZGlkRnVsbFJl
cGFpbnQgPSByZXBhaW50ZXIucmVwYWludEFmdGVyTGF5b3V0KCk7CisgICAgaWYgKCFkaWRGdWxs
UmVwYWludCAmJiByZXBhaW50TG9naWNhbFRvcCAhPSByZXBhaW50TG9naWNhbEJvdHRvbSAmJiAo
c3R5bGVUb1VzZS0+dmlzaWJpbGl0eSgpID09IFZJU0lCTEUgfHwgZW5jbG9zaW5nTGF5ZXIoKS0+
aGFzVmlzaWJsZUNvbnRlbnQoKSkpIHsKKyAgICAgICAgLy8gRklYTUU6IFdlIGNvdWxkIHRpZ2h0
ZW4gdXAgdGhlIGxlZnQgYW5kIHJpZ2h0IGludmFsaWRhdGlvbiBwb2ludHMgaWYgd2UgbGV0IGxh
eW91dElubGluZUNoaWxkcmVuIGZpbGwgdGhlbSBpbiBiYXNlZCBvZmYgdGhlIHBhcnRpY3VsYXIg
bGluZXMKKyAgICAgICAgLy8gaXQgaGFkIHRvIGxheSBvdXQuIFdlIHdvdWxkbid0IG5lZWQgdGhl
IGhhc092ZXJmbG93Q2xpcCgpIGhhY2sgaW4gdGhhdCBjYXNlIGVpdGhlci4KKyAgICAgICAgTGF5
b3V0VW5pdCByZXBhaW50TG9naWNhbExlZnQgPSBsb2dpY2FsTGVmdFZpc3VhbE92ZXJmbG93KCk7
CisgICAgICAgIExheW91dFVuaXQgcmVwYWludExvZ2ljYWxSaWdodCA9IGxvZ2ljYWxSaWdodFZp
c3VhbE92ZXJmbG93KCk7CisgICAgICAgIGlmIChoYXNPdmVyZmxvd0NsaXAoKSkgeworICAgICAg
ICAgICAgLy8gSWYgd2UgaGF2ZSBjbGlwcGVkIG92ZXJmbG93LCB3ZSBzaG91bGQgdXNlIGxheW91
dCBvdmVyZmxvdyBhcyB3ZWxsLCBzaW5jZSB2aXN1YWwgb3ZlcmZsb3cgZnJvbSBsaW5lcyBkaWRu
J3QgcHJvcGFnYXRlIHRvIG91ciBibG9jaydzIG92ZXJmbG93LgorICAgICAgICAgICAgLy8gTm90
ZSB0aGUgb2xkIGNvZGUgZGlkIHRoaXMgYXMgd2VsbCBidXQgZXZlbiBmb3Igb3ZlcmZsb3c6dmlz
aWJsZS4gVGhlIGFkZGl0aW9uIG9mIGhhc092ZXJmbG93Q2xpcCgpIGF0IGxlYXN0IHRpZ2h0ZW5z
IHVwIHRoZSBoYWNrIGEgYml0LgorICAgICAgICAgICAgLy8gbGF5b3V0SW5saW5lQ2hpbGRyZW4g
c2hvdWxkIGJlIHBhdGNoZWQgdG8gY29tcHV0ZSB0aGUgZW50aXJlIHJlcGFpbnQgcmVjdC4KKyAg
ICAgICAgICAgIHJlcGFpbnRMb2dpY2FsTGVmdCA9IG1pbihyZXBhaW50TG9naWNhbExlZnQsIGxv
Z2ljYWxMZWZ0TGF5b3V0T3ZlcmZsb3coKSk7CisgICAgICAgICAgICByZXBhaW50TG9naWNhbFJp
Z2h0ID0gbWF4KHJlcGFpbnRMb2dpY2FsUmlnaHQsIGxvZ2ljYWxSaWdodExheW91dE92ZXJmbG93
KCkpOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBMYXlvdXRSZWN0IHJlcGFpbnRSZWN0
OworICAgICAgICBpZiAoaXNIb3Jpem9udGFsV3JpdGluZ01vZGUoKSkKKyAgICAgICAgICAgIHJl
cGFpbnRSZWN0ID0gTGF5b3V0UmVjdChyZXBhaW50TG9naWNhbExlZnQsIHJlcGFpbnRMb2dpY2Fs
VG9wLCByZXBhaW50TG9naWNhbFJpZ2h0IC0gcmVwYWludExvZ2ljYWxMZWZ0LCByZXBhaW50TG9n
aWNhbEJvdHRvbSAtIHJlcGFpbnRMb2dpY2FsVG9wKTsKKyAgICAgICAgZWxzZQorICAgICAgICAg
ICAgcmVwYWludFJlY3QgPSBMYXlvdXRSZWN0KHJlcGFpbnRMb2dpY2FsVG9wLCByZXBhaW50TG9n
aWNhbExlZnQsIHJlcGFpbnRMb2dpY2FsQm90dG9tIC0gcmVwYWludExvZ2ljYWxUb3AsIHJlcGFp
bnRMb2dpY2FsUmlnaHQgLSByZXBhaW50TG9naWNhbExlZnQpOworCisgICAgICAgIC8vIFRoZSBy
ZXBhaW50IHJlY3QgbWF5IGJlIHNwbGl0IGFjcm9zcyBjb2x1bW5zLCBpbiB3aGljaCBjYXNlIGFk
anVzdFJlY3RGb3JDb2x1bW5zKCkgd2lsbCByZXR1cm4gdGhlIHVuaW9uLgorICAgICAgICBhZGp1
c3RSZWN0Rm9yQ29sdW1ucyhyZXBhaW50UmVjdCk7CisKKyAgICAgICAgcmVwYWludFJlY3QuaW5m
bGF0ZShtYXhpbWFsT3V0bGluZVNpemUoUGFpbnRQaGFzZU91dGxpbmUpKTsKKyAgICAgICAgCisg
ICAgICAgIGlmIChoYXNPdmVyZmxvd0NsaXAoKSkgeworICAgICAgICAgICAgLy8gQWRqdXN0IHJl
cGFpbnQgcmVjdCBmb3Igc2Nyb2xsIG9mZnNldAorICAgICAgICAgICAgcmVwYWludFJlY3QubW92
ZSgtc2Nyb2xsZWRDb250ZW50T2Zmc2V0KCkpOworCisgICAgICAgICAgICAvLyBEb24ndCBhbGxv
dyB0aGlzIHJlY3QgdG8gc3BpbGwgb3V0IG9mIG91ciBvdmVyZmxvdyBib3guCisgICAgICAgICAg
ICByZXBhaW50UmVjdC5pbnRlcnNlY3QoTGF5b3V0UmVjdChMYXlvdXRQb2ludCgpLCBzaXplKCkp
KTsKKyAgICAgICAgfQorCisgICAgICAgIC8vIE1ha2Ugc3VyZSB0aGUgcmVjdCBpcyBzdGlsbCBu
b24tZW1wdHkgYWZ0ZXIgaW50ZXJzZWN0aW5nIGZvciBvdmVyZmxvdyBhYm92ZQorICAgICAgICBp
ZiAoIXJlcGFpbnRSZWN0LmlzRW1wdHkoKSkgeworICAgICAgICAgICAgcmVwYWludFJlY3Rhbmds
ZShyZXBhaW50UmVjdCk7IC8vIFdlIG5lZWQgdG8gZG8gYSBwYXJ0aWFsIHJlcGFpbnQgb2Ygb3Vy
IGNvbnRlbnQuCisgICAgICAgICAgICBpZiAoaGFzUmVmbGVjdGlvbigpKQorICAgICAgICAgICAg
ICAgIHJlcGFpbnRSZWN0YW5nbGUocmVmbGVjdGVkUmVjdChyZXBhaW50UmVjdCkpOworICAgICAg
ICB9CisgICAgfQorCisgICAgc2V0TmVlZHNMYXlvdXQoZmFsc2UpOworfQorCit2b2lkIFJlbmRl
ckJsb2NrRmxvdzo6bGF5b3V0QmxvY2tDaGlsZHJlbihib29sIHJlbGF5b3V0Q2hpbGRyZW4sIExh
eW91dFVuaXQmIG1heEZsb2F0TG9naWNhbEJvdHRvbSkKK3sKKyAgICBkaXJ0eUZvckxheW91dEZy
b21QZXJjZW50YWdlSGVpZ2h0RGVzY2VuZGFudHMoKTsKKworICAgIExheW91dFVuaXQgYmVmb3Jl
RWRnZSA9IGJvcmRlckFuZFBhZGRpbmdCZWZvcmUoKTsKKyAgICBMYXlvdXRVbml0IGFmdGVyRWRn
ZSA9IGJvcmRlckFuZFBhZGRpbmdBZnRlcigpICsgc2Nyb2xsYmFyTG9naWNhbEhlaWdodCgpOwor
CisgICAgc2V0TG9naWNhbEhlaWdodChiZWZvcmVFZGdlKTsKKyAgICAKKyAgICAvLyBMYXkgb3V0
IG91ciBoeXBvdGhldGljYWwgZ3JpZCBsaW5lIGFzIHRob3VnaCBpdCBvY2N1cnMgYXQgdGhlIHRv
cCBvZiB0aGUgYmxvY2suCisgICAgaWYgKHZpZXcoKS5sYXlvdXRTdGF0ZSgpLT5saW5lR3JpZCgp
ID09IHRoaXMpCisgICAgICAgIGxheW91dExpbmVHcmlkQm94KCk7CisKKyAgICAvLyBUaGUgbWFy
Z2luIHN0cnVjdCBjYWNoZXMgYWxsIG91ciBjdXJyZW50IG1hcmdpbiBjb2xsYXBzaW5nIHN0YXRl
LgorICAgIE1hcmdpbkluZm8gbWFyZ2luSW5mbyh0aGlzLCBiZWZvcmVFZGdlLCBhZnRlckVkZ2Up
OworCisgICAgLy8gRmllbGRzZXRzIG5lZWQgdG8gZmluZCB0aGVpciBsZWdlbmQgYW5kIHBvc2l0
aW9uIGl0IGluc2lkZSB0aGUgYm9yZGVyIG9mIHRoZSBvYmplY3QuCisgICAgLy8gVGhlIGxlZ2Vu
ZCB0aGVuIGdldHMgc2tpcHBlZCBkdXJpbmcgbm9ybWFsIGxheW91dC4gVGhlIHNhbWUgaXMgdHJ1
ZSBmb3IgcnVieSB0ZXh0LgorICAgIC8vIEl0IGRvZXNuJ3QgZ2V0IGluY2x1ZGVkIGluIHRoZSBu
b3JtYWwgbGF5b3V0IHByb2Nlc3MgYnV0IGlzIGluc3RlYWQgc2tpcHBlZC4KKyAgICBSZW5kZXJP
YmplY3QqIGNoaWxkVG9FeGNsdWRlID0gbGF5b3V0U3BlY2lhbEV4Y2x1ZGVkQ2hpbGQocmVsYXlv
dXRDaGlsZHJlbik7CisKKyAgICBMYXlvdXRVbml0IHByZXZpb3VzRmxvYXRMb2dpY2FsQm90dG9t
ID0gMDsKKyAgICBtYXhGbG9hdExvZ2ljYWxCb3R0b20gPSAwOworCisgICAgUmVuZGVyQm94KiBu
ZXh0ID0gZmlyc3RDaGlsZEJveCgpOworCisgICAgd2hpbGUgKG5leHQpIHsKKyAgICAgICAgUmVu
ZGVyQm94KiBjaGlsZCA9IG5leHQ7CisgICAgICAgIG5leHQgPSBjaGlsZC0+bmV4dFNpYmxpbmdC
b3goKTsKKworICAgICAgICBpZiAoY2hpbGRUb0V4Y2x1ZGUgPT0gY2hpbGQpCisgICAgICAgICAg
ICBjb250aW51ZTsgLy8gU2tpcCB0aGlzIGNoaWxkLCBzaW5jZSBpdCB3aWxsIGJlIHBvc2l0aW9u
ZWQgYnkgdGhlIHNwZWNpYWxpemVkIHN1YmNsYXNzIChmaWVsZHNldHMgYW5kIHJ1YnkgcnVucyku
CisKKyAgICAgICAgdXBkYXRlQmxvY2tDaGlsZERpcnR5Qml0c0JlZm9yZUxheW91dChyZWxheW91
dENoaWxkcmVuLCBjaGlsZCk7CisKKyAgICAgICAgaWYgKGNoaWxkLT5pc091dE9mRmxvd1Bvc2l0
aW9uZWQoKSkgeworICAgICAgICAgICAgY2hpbGQtPmNvbnRhaW5pbmdCbG9jaygpLT5pbnNlcnRQ
b3NpdGlvbmVkT2JqZWN0KGNoaWxkKTsKKyAgICAgICAgICAgIGFkanVzdFBvc2l0aW9uZWRCbG9j
ayhjaGlsZCwgbWFyZ2luSW5mbyk7CisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgfQor
ICAgICAgICBpZiAoY2hpbGQtPmlzRmxvYXRpbmcoKSkgeworICAgICAgICAgICAgaW5zZXJ0Rmxv
YXRpbmdPYmplY3QoY2hpbGQpOworICAgICAgICAgICAgYWRqdXN0RmxvYXRpbmdCbG9jayhtYXJn
aW5JbmZvKTsKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICB9CisKKyAgICAgICAgLy8g
TGF5IG91dCB0aGUgY2hpbGQuCisgICAgICAgIGxheW91dEJsb2NrQ2hpbGQoY2hpbGQsIG1hcmdp
bkluZm8sIHByZXZpb3VzRmxvYXRMb2dpY2FsQm90dG9tLCBtYXhGbG9hdExvZ2ljYWxCb3R0b20p
OworICAgIH0KKyAgICAKKyAgICAvLyBOb3cgZG8gdGhlIGhhbmRsaW5nIG9mIHRoZSBib3R0b20g
b2YgdGhlIGJsb2NrLCBhZGRpbmcgaW4gb3VyIGJvdHRvbSBib3JkZXIvcGFkZGluZyBhbmQKKyAg
ICAvLyBkZXRlcm1pbmluZyB0aGUgY29ycmVjdCBjb2xsYXBzZWQgYm90dG9tIG1hcmdpbiBpbmZv
cm1hdGlvbi4KKyAgICBoYW5kbGVBZnRlclNpZGVPZkJsb2NrKGJlZm9yZUVkZ2UsIGFmdGVyRWRn
ZSwgbWFyZ2luSW5mbyk7Cit9CisKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCbG9ja0Zsb3cuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2tGbG93LmgJKHJldmlzaW9uIDE1NTM3NCkK
KysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCbG9ja0Zsb3cuaAkod29ya2luZyBj
b3B5KQpAQCAtMzMsNiArMzMsMjAgQEAgcHVibGljOgogICAgIHZpcnR1YWwgflJlbmRlckJsb2Nr
RmxvdygpOwogICAgIAogICAgIHZpcnR1YWwgYm9vbCBpc1JlbmRlckJsb2NrRmxvdygpIGNvbnN0
IE9WRVJSSURFIEZJTkFMIHsgcmV0dXJuIHRydWU7IH0KKyAgICAKKyAgICB2aXJ0dWFsIHZvaWQg
bGF5b3V0QmxvY2soYm9vbCByZWxheW91dENoaWxkcmVuLCBMYXlvdXRVbml0IHBhZ2VMb2dpY2Fs
SGVpZ2h0ID0gMCkgT1ZFUlJJREU7CisgICAgCitwcm90ZWN0ZWQ6CisgICAgLy8gVGhpcyBtZXRo
b2QgaXMgY2FsbGVkIGF0IHRoZSBzdGFydCBvZiBsYXlvdXQgdG8gd2lwZSBhd2F5IGFsbCBvZiB0
aGUgZmxvYXRzIGluIG91ciBmbG9hdGluZyBvYmplY3RzIGxpc3QuIEl0IGFsc28KKyAgICAvLyBy
ZXBvcHVsYXRlcyB0aGUgbGlzdCB3aXRoIGFueSBmbG9hdHMgdGhhdCBpbnRydWRlIGZyb20gcHJl
dmlvdXMgc2libGluZ3Mgb3IgcGFyZW50cy4gRmxvYXRzIHRoYXQgd2VyZSBhZGRlZCBieQorICAg
IC8vIGRlc2NlbmRhbnRzIGFyZSBnb25lIHdoZW4gdGhpcyBjYWxsIGNvbXBsZXRlcyBhbmQgd2ls
bCBnZXQgYWRkZWQgYmFjayBsYXRlciBvbiBhZnRlciB0aGUgY2hpbGRyZW4gaGF2ZSBnb3R0ZW4K
KyAgICAvLyBhIHJlbGF5b3V0LgorICAgIHZvaWQgY2xlYXJGbG9hdHMoKTsKKworICAgIC8vIFJl
bmRlckJsb2NrRmxvdyBhbHdheXMgY29udGFpbnMgZWl0aGVyIGxpbmVzIG9yIHBhcmFncmFwaHMu
IFdoZW4gdGhlIGNoaWxkcmVuIGFyZSBhbGwgYmxvY2tzIChlLmcuIHBhcmFncmFwaHMpLCB3ZSBj
YWxsIGxheW91dEJsb2NrQ2hpbGRyZW4uCisgICAgLy8gV2hlbiB0aGUgY2hpbGRyZW4gYXJlIGFy
ZSBhbGwgaW5saW5lIChlLmcuLCBsaW5lcyksIHdlIGNhbGwgbGF5b3V0SW5saW5lQ2hpbGRyZW4u
CisgICAgdm9pZCBsYXlvdXRCbG9ja0NoaWxkcmVuKGJvb2wgcmVsYXlvdXRDaGlsZHJlbiwgTGF5
b3V0VW5pdCYgbWF4RmxvYXRMb2dpY2FsQm90dG9tKTsKKyAgICB2b2lkIGxheW91dElubGluZUNo
aWxkcmVuKGJvb2wgcmVsYXlvdXRDaGlsZHJlbiwgTGF5b3V0VW5pdCYgcmVwYWludExvZ2ljYWxU
b3AsIExheW91dFVuaXQmIHJlcGFpbnRMb2dpY2FsQm90dG9tKTsKIH07CiAKIGlubGluZSBSZW5k
ZXJCbG9ja0Zsb3cmIHRvUmVuZGVyQmxvY2tGbG93KFJlbmRlck9iamVjdCYgb2JqZWN0KQpJbmRl
eDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJsb2NrTGluZUxheW91dC5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJsb2NrTGluZUxheW91
dC5jcHAJKHJldmlzaW9uIDE1NTM3NCkKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5k
ZXJCbG9ja0xpbmVMYXlvdXQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMTA5LDcgKzIxMDksNyBA
QCB2b2lkIFJlbmRlckJsb2NrOjpyZXBhaW50RGlydHlGbG9hdHMoVmVjCiAgICAgfQogfQogCi12
b2lkIFJlbmRlckJsb2NrOjpsYXlvdXRJbmxpbmVDaGlsZHJlbihib29sIHJlbGF5b3V0Q2hpbGRy
ZW4sIExheW91dFVuaXQmIHJlcGFpbnRMb2dpY2FsVG9wLCBMYXlvdXRVbml0JiByZXBhaW50TG9n
aWNhbEJvdHRvbSkKK3ZvaWQgUmVuZGVyQmxvY2tGbG93OjpsYXlvdXRJbmxpbmVDaGlsZHJlbihi
b29sIHJlbGF5b3V0Q2hpbGRyZW4sIExheW91dFVuaXQmIHJlcGFpbnRMb2dpY2FsVG9wLCBMYXlv
dXRVbml0JiByZXBhaW50TG9naWNhbEJvdHRvbSkKIHsKICAgICBzZXRMb2dpY2FsSGVpZ2h0KGJv
cmRlckFuZFBhZGRpbmdCZWZvcmUoKSk7CiAgICAgCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvUmVuZGVyTGlzdEJveC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL1JlbmRlckxpc3RCb3guY3BwCShyZXZpc2lvbiAxNTUzNzQpCisrKyBTb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvUmVuZGVyTGlzdEJveC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTgzLDcg
KzgzLDcgQEAgY29uc3QgaW50IGRlZmF1bHRTaXplID0gNDsKIGNvbnN0IGludCBiYXNlbGluZUFk
anVzdG1lbnQgPSA3OwogCiBSZW5kZXJMaXN0Qm94OjpSZW5kZXJMaXN0Qm94KEVsZW1lbnQqIGVs
ZW1lbnQpCi0gICAgOiBSZW5kZXJCbG9jayhlbGVtZW50KQorICAgIDogUmVuZGVyQmxvY2tGbG93
KGVsZW1lbnQpCiAgICAgLCBtX29wdGlvbnNDaGFuZ2VkKHRydWUpCiAgICAgLCBtX3Njcm9sbFRv
UmV2ZWFsU2VsZWN0aW9uQWZ0ZXJMYXlvdXQoZmFsc2UpCiAgICAgLCBtX2luQXV0b3Njcm9sbChm
YWxzZSkKQEAgLTE3MSw3ICsxNzEsNyBAQCB2b2lkIFJlbmRlckxpc3RCb3g6OnNlbGVjdGlvbkNo
YW5nZWQoKQogdm9pZCBSZW5kZXJMaXN0Qm94OjpsYXlvdXQoKQogewogICAgIFN0YWNrU3RhdHM6
OkxheW91dENoZWNrUG9pbnQgbGF5b3V0Q2hlY2tQb2ludDsKLSAgICBSZW5kZXJCbG9jazo6bGF5
b3V0KCk7CisgICAgUmVuZGVyQmxvY2tGbG93OjpsYXlvdXQoKTsKIAogICAgIGlmIChtX3ZCYXIp
IHsKICAgICAgICAgYm9vbCBlbmFibGVkID0gbnVtVmlzaWJsZUl0ZW1zKCkgPCBudW1JdGVtcygp
OwpAQCAtMjk4LDcgKzI5OCw3IEBAIHZvaWQgUmVuZGVyTGlzdEJveDo6cGFpbnRPYmplY3QoUGFp
bnRJbmYKICAgICB9CiAKICAgICAvLyBQYWludCB0aGUgY2hpbGRyZW4uCi0gICAgUmVuZGVyQmxv
Y2s6OnBhaW50T2JqZWN0KHBhaW50SW5mbywgcGFpbnRPZmZzZXQpOworICAgIFJlbmRlckJsb2Nr
Rmxvdzo6cGFpbnRPYmplY3QocGFpbnRJbmZvLCBwYWludE9mZnNldCk7CiAKICAgICBzd2l0Y2gg
KHBhaW50SW5mby5waGFzZSkgewogICAgIC8vIERlcGVuZGluZyBvbiB3aGV0aGVyIHdlIGhhdmUg
b3ZlcmxheSBzY3JvbGxiYXJzIHRoZXkKQEAgLTMyOCw3ICszMjgsNyBAQCB2b2lkIFJlbmRlckxp
c3RCb3g6OnBhaW50T2JqZWN0KFBhaW50SW5mCiB2b2lkIFJlbmRlckxpc3RCb3g6OmFkZEZvY3Vz
UmluZ1JlY3RzKFZlY3RvcjxJbnRSZWN0PiYgcmVjdHMsIGNvbnN0IExheW91dFBvaW50JiBhZGRp
dGlvbmFsT2Zmc2V0LCBjb25zdCBSZW5kZXJMYXllck1vZGVsT2JqZWN0KiBwYWludENvbnRhaW5l
cikKIHsKICAgICBpZiAoIWlzU3BhdGlhbE5hdmlnYXRpb25FbmFibGVkKCZmcmFtZSgpKSkKLSAg
ICAgICAgcmV0dXJuIFJlbmRlckJsb2NrOjphZGRGb2N1c1JpbmdSZWN0cyhyZWN0cywgYWRkaXRp
b25hbE9mZnNldCwgcGFpbnRDb250YWluZXIpOworICAgICAgICByZXR1cm4gUmVuZGVyQmxvY2tG
bG93OjphZGRGb2N1c1JpbmdSZWN0cyhyZWN0cywgYWRkaXRpb25hbE9mZnNldCwgcGFpbnRDb250
YWluZXIpOwogCiAgICAgSFRNTFNlbGVjdEVsZW1lbnQqIHNlbGVjdCA9IHNlbGVjdEVsZW1lbnQo
KTsKIApAQCAtNjk3LDcgKzY5Nyw3IEBAIHZvaWQgUmVuZGVyTGlzdEJveDo6c2V0U2Nyb2xsVG9w
KGludCBuZXcKIAogYm9vbCBSZW5kZXJMaXN0Qm94Ojpub2RlQXRQb2ludChjb25zdCBIaXRUZXN0
UmVxdWVzdCYgcmVxdWVzdCwgSGl0VGVzdFJlc3VsdCYgcmVzdWx0LCBjb25zdCBIaXRUZXN0TG9j
YXRpb24mIGxvY2F0aW9uSW5Db250YWluZXIsIGNvbnN0IExheW91dFBvaW50JiBhY2N1bXVsYXRl
ZE9mZnNldCwgSGl0VGVzdEFjdGlvbiBoaXRUZXN0QWN0aW9uKQogewotICAgIGlmICghUmVuZGVy
QmxvY2s6Om5vZGVBdFBvaW50KHJlcXVlc3QsIHJlc3VsdCwgbG9jYXRpb25JbkNvbnRhaW5lciwg
YWNjdW11bGF0ZWRPZmZzZXQsIGhpdFRlc3RBY3Rpb24pKQorICAgIGlmICghUmVuZGVyQmxvY2tG
bG93Ojpub2RlQXRQb2ludChyZXF1ZXN0LCByZXN1bHQsIGxvY2F0aW9uSW5Db250YWluZXIsIGFj
Y3VtdWxhdGVkT2Zmc2V0LCBoaXRUZXN0QWN0aW9uKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwog
ICAgIGNvbnN0IFZlY3RvcjxIVE1MRWxlbWVudCo+JiBsaXN0SXRlbXMgPSBzZWxlY3RFbGVtZW50
KCktPmxpc3RJdGVtcygpOwogICAgIGludCBzaXplID0gbnVtSXRlbXMoKTsKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMaXN0Qm94LmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxpc3RCb3guaAkocmV2aXNpb24gMTU1Mzc0KQorKysg
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxpc3RCb3guaAkod29ya2luZyBjb3B5KQpA
QCAtMzEsMTQgKzMxLDE0IEBACiAjaWZuZGVmIFJlbmRlckxpc3RCb3hfaAogI2RlZmluZSBSZW5k
ZXJMaXN0Qm94X2gKIAotI2luY2x1ZGUgIlJlbmRlckJsb2NrLmgiCisjaW5jbHVkZSAiUmVuZGVy
QmxvY2tGbG93LmgiCiAjaW5jbHVkZSAiU2Nyb2xsYWJsZUFyZWEuaCIKIAogbmFtZXNwYWNlIFdl
YkNvcmUgewogCiBjbGFzcyBIVE1MU2VsZWN0RWxlbWVudDsKIAotY2xhc3MgUmVuZGVyTGlzdEJv
eCBGSU5BTCA6IHB1YmxpYyBSZW5kZXJCbG9jaywgcHJpdmF0ZSBTY3JvbGxhYmxlQXJlYSB7Citj
bGFzcyBSZW5kZXJMaXN0Qm94IEZJTkFMIDogcHVibGljIFJlbmRlckJsb2NrRmxvdywgcHJpdmF0
ZSBTY3JvbGxhYmxlQXJlYSB7CiBwdWJsaWM6CiAgICAgZXhwbGljaXQgUmVuZGVyTGlzdEJveChF
bGVtZW50Kik7CiAgICAgdmlydHVhbCB+UmVuZGVyTGlzdEJveCgpOwpJbmRleDogU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL1JlbmRlclJlZ2lvbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL1JlbmRlclJlZ2lvbi5jcHAJKHJldmlzaW9uIDE1NTM3NCkKKysrIFNv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJSZWdpb24uY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0xODYsNyArMTg2LDcgQEAgdm9pZCBSZW5kZXJSZWdpb246OnBhaW50T2JqZWN0KFBhaW50SW5m
bwogICAgIGlmIChzdHlsZSgpLT52aXNpYmlsaXR5KCkgIT0gVklTSUJMRSkKICAgICAgICAgcmV0
dXJuOwogCi0gICAgUmVuZGVyQmxvY2s6OnBhaW50T2JqZWN0KHBhaW50SW5mbywgcGFpbnRPZmZz
ZXQpOworICAgIFJlbmRlckJsb2NrRmxvdzo6cGFpbnRPYmplY3QocGFpbnRJbmZvLCBwYWludE9m
ZnNldCk7CiAKICAgICBpZiAoIWlzVmFsaWQoKSkKICAgICAgICAgcmV0dXJuOwpAQCAtMjc2LDcg
KzI3Niw3IEBAIGJvb2wgUmVuZGVyUmVnaW9uOjpzaG91bGRIYXZlQXV0b0xvZ2ljYWwKICAgICAK
IHZvaWQgUmVuZGVyUmVnaW9uOjpzdHlsZURpZENoYW5nZShTdHlsZURpZmZlcmVuY2UgZGlmZiwg
Y29uc3QgUmVuZGVyU3R5bGUqIG9sZFN0eWxlKQogewotICAgIFJlbmRlckJsb2NrOjpzdHlsZURp
ZENoYW5nZShkaWZmLCBvbGRTdHlsZSk7CisgICAgUmVuZGVyQmxvY2tGbG93OjpzdHlsZURpZENo
YW5nZShkaWZmLCBvbGRTdHlsZSk7CiAKICAgICAvLyBJZiB0aGUgcmVnaW9uIGlzIG5vdCBhdHRh
Y2hlZCB0byBhbnkgdGhyZWFkLCB0aGVyZSBpcyBubyBuZWVkIHRvIGNoZWNrCiAgICAgLy8gd2hl
dGhlciB0aGUgcmVnaW9uIGhhcyByZWdpb24gc3R5bGluZyBzaW5jZSBubyBjb250ZW50IHdpbGwg
YmUgZGlzcGxheWVkCkBAIC0yOTYsNyArMjk2LDcgQEAgdm9pZCBSZW5kZXJSZWdpb246OnN0eWxl
RGlkQ2hhbmdlKFN0eWxlRAogdm9pZCBSZW5kZXJSZWdpb246OmxheW91dEJsb2NrKGJvb2wgcmVs
YXlvdXRDaGlsZHJlbiwgTGF5b3V0VW5pdCkKIHsKICAgICBTdGFja1N0YXRzOjpMYXlvdXRDaGVj
a1BvaW50IGxheW91dENoZWNrUG9pbnQ7Ci0gICAgUmVuZGVyQmxvY2s6OmxheW91dEJsb2NrKHJl
bGF5b3V0Q2hpbGRyZW4pOworICAgIFJlbmRlckJsb2NrRmxvdzo6bGF5b3V0QmxvY2socmVsYXlv
dXRDaGlsZHJlbik7CiAKICAgICBpZiAoaXNWYWxpZCgpKSB7CiAgICAgICAgIExheW91dFJlY3Qg
b2xkUmVnaW9uUmVjdChmbG93VGhyZWFkUG9ydGlvblJlY3QoKSk7CkBAIC01NTMsMTQgKzU1Mywx
NCBAQCB2b2lkIFJlbmRlclJlZ2lvbjo6cmVzdG9yZVJlZ2lvbk9iamVjdHNPCiAKIHZvaWQgUmVu
ZGVyUmVnaW9uOjppbnNlcnRlZEludG9UcmVlKCkKIHsKLSAgICBSZW5kZXJCbG9jazo6aW5zZXJ0
ZWRJbnRvVHJlZSgpOworICAgIFJlbmRlckJsb2NrRmxvdzo6aW5zZXJ0ZWRJbnRvVHJlZSgpOwog
CiAgICAgYXR0YWNoUmVnaW9uKCk7CiB9CiAKIHZvaWQgUmVuZGVyUmVnaW9uOjp3aWxsQmVSZW1v
dmVkRnJvbVRyZWUoKQogewotICAgIFJlbmRlckJsb2NrOjp3aWxsQmVSZW1vdmVkRnJvbVRyZWUo
KTsKKyAgICBSZW5kZXJCbG9ja0Zsb3c6OndpbGxCZVJlbW92ZWRGcm9tVHJlZSgpOwogCiAgICAg
ZGV0YWNoUmVnaW9uKCk7CiB9CkBAIC02MzksNyArNjM5LDcgQEAgdm9pZCBSZW5kZXJSZWdpb246
OmNsZWFyT2JqZWN0U3R5bGVJblJlZwogdm9pZCBSZW5kZXJSZWdpb246OmNvbXB1dGVJbnRyaW5z
aWNMb2dpY2FsV2lkdGhzKExheW91dFVuaXQmIG1pbkxvZ2ljYWxXaWR0aCwgTGF5b3V0VW5pdCYg
bWF4TG9naWNhbFdpZHRoKSBjb25zdAogewogICAgIGlmICghaXNWYWxpZCgpKSB7Ci0gICAgICAg
IFJlbmRlckJsb2NrOjpjb21wdXRlSW50cmluc2ljTG9naWNhbFdpZHRocyhtaW5Mb2dpY2FsV2lk
dGgsIG1heExvZ2ljYWxXaWR0aCk7CisgICAgICAgIFJlbmRlckJsb2NrRmxvdzo6Y29tcHV0ZUlu
dHJpbnNpY0xvZ2ljYWxXaWR0aHMobWluTG9naWNhbFdpZHRoLCBtYXhMb2dpY2FsV2lkdGgpOwog
ICAgICAgICByZXR1cm47CiAgICAgfQogCkBAIC02NTIsNyArNjUyLDcgQEAgdm9pZCBSZW5kZXJS
ZWdpb246OmNvbXB1dGVQcmVmZXJyZWRMb2dpYwogICAgIEFTU0VSVChwcmVmZXJyZWRMb2dpY2Fs
V2lkdGhzRGlydHkoKSk7CiAKICAgICBpZiAoIWlzVmFsaWQoKSkgewotICAgICAgICBSZW5kZXJC
bG9jazo6Y29tcHV0ZVByZWZlcnJlZExvZ2ljYWxXaWR0aHMoKTsKKyAgICAgICAgUmVuZGVyQmxv
Y2tGbG93Ojpjb21wdXRlUHJlZmVycmVkTG9naWNhbFdpZHRocygpOwogICAgICAgICByZXR1cm47
CiAgICAgfQogCkBAIC02OTAsNyArNjkwLDcgQEAgdm9pZCBSZW5kZXJSZWdpb246OmdldFJhbmdl
cyhWZWN0b3I8UmVmUAogCiB2b2lkIFJlbmRlclJlZ2lvbjo6dXBkYXRlTG9naWNhbEhlaWdodCgp
CiB7Ci0gICAgUmVuZGVyQmxvY2s6OnVwZGF0ZUxvZ2ljYWxIZWlnaHQoKTsKKyAgICBSZW5kZXJC
bG9ja0Zsb3c6OnVwZGF0ZUxvZ2ljYWxIZWlnaHQoKTsKIAogICAgIGlmICghaGFzQXV0b0xvZ2lj
YWxIZWlnaHQoKSkKICAgICAgICAgcmV0dXJuOwpAQCAtNzE0LDcgKzcxNCw3IEBAIHZvaWQgUmVu
ZGVyUmVnaW9uOjp1cGRhdGVMb2dpY2FsSGVpZ2h0KCkKICAgICAgICAgc2V0TG9naWNhbEhlaWdo
dChuZXdMb2dpY2FsSGVpZ2h0KTsKICAgICAgICAgLy8gUmVjYWxjdWxhdGUgcG9zaXRpb24gb2Yg
dGhlIHJlbmRlciBibG9jayBhZnRlciBuZXcgbG9naWNhbCBoZWlnaHQgaXMgc2V0LgogICAgICAg
ICAvLyAobmVlZGVkIGluIGFic29sdXRlIHBvc2l0aW9uaW5nIGNhc2Ugd2l0aCBib3R0b20gYWxp
Z25tZW50IGZvciBleGFtcGxlKQotICAgICAgICBSZW5kZXJCbG9jazo6dXBkYXRlTG9naWNhbEhl
aWdodCgpOworICAgICAgICBSZW5kZXJCbG9ja0Zsb3c6OnVwZGF0ZUxvZ2ljYWxIZWlnaHQoKTsK
ICAgICB9CiB9CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUZXh0Q29u
dHJvbFNpbmdsZUxpbmUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9SZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmUuY3BwCShyZXZpc2lvbiAxNTUzNzQpCisrKyBT
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5lLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMTM2LDcgKzEzNiw3IEBAIHZvaWQgUmVuZGVyVGV4dENvbnRyb2xT
aW5nbGVMaW5lOjpsYXlvdXQKICAgICAgICAgc2V0TmVlZHNMYXlvdXRPbkFuY2VzdG9ycyhpbm5l
ckJsb2NrUmVuZGVyZXIsIHRoaXMpOwogICAgIH0KIAotICAgIFJlbmRlckJsb2NrOjpsYXlvdXRC
bG9jayhmYWxzZSk7CisgICAgUmVuZGVyQmxvY2tGbG93OjpsYXlvdXRCbG9jayhmYWxzZSk7CiAK
ICAgICBIVE1MRWxlbWVudCogY29udGFpbmVyID0gY29udGFpbmVyRWxlbWVudCgpOwogICAgIFJl
bmRlckJveCogY29udGFpbmVyUmVuZGVyZXIgPSBjb250YWluZXIgPyBjb250YWluZXItPnJlbmRl
ckJveCgpIDogMDsKQEAgLTE3Myw3ICsxNzMsNyBAQCB2b2lkIFJlbmRlclRleHRDb250cm9sU2lu
Z2xlTGluZTo6bGF5b3V0CiAKICAgICAvLyBJZiB3ZSBuZWVkIGFub3RoZXIgbGF5b3V0IHBhc3Ms
IHdlIGhhdmUgY2hhbmdlZCBvbmUgb2YgY2hpbGRyZW4ncyBoZWlnaHQgc28gd2UgbmVlZCB0byBy
ZWxheW91dCB0aGVtLgogICAgIGlmIChuZWVkc0xheW91dCgpKQotICAgICAgICBSZW5kZXJCbG9j
azo6bGF5b3V0QmxvY2sodHJ1ZSk7CisgICAgICAgIFJlbmRlckJsb2NrRmxvdzo6bGF5b3V0Qmxv
Y2sodHJ1ZSk7CiAKICAgICAvLyBDZW50ZXIgdGhlIGNoaWxkIGJsb2NrIGluIHRoZSBibG9jayBw
cm9ncmVzc2lvbiBkaXJlY3Rpb24gKHZlcnRpY2FsIGNlbnRlcmluZyBmb3IgaG9yaXpvbnRhbCB0
ZXh0IGZpZWxkcykuCiAgICAgaWYgKCFjb250YWluZXIgJiYgaW5uZXJUZXh0UmVuZGVyZXIgJiYg
aW5uZXJUZXh0UmVuZGVyZXItPmhlaWdodCgpICE9IGNvbnRlbnRMb2dpY2FsSGVpZ2h0KCkpIHsK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHVGV4dC5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdUZXh0LmNw
cAkocmV2aXNpb24gMTU1Mzc0KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5k
ZXJTVkdUZXh0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDE0LDcgKzQxNCwxMCBAQCB2b2lkIFJl
bmRlclNWR1RleHQ6OmxheW91dCgpCiAgICAgLy8gRklYTUU6IFdlIG5lZWQgdG8gZmluZCBhIHdh
eSB0byBvbmx5IGxheW91dCB0aGUgY2hpbGQgYm94ZXMsIGlmIG5lZWRlZC4KICAgICBGbG9hdFJl
Y3Qgb2xkQm91bmRhcmllcyA9IG9iamVjdEJvdW5kaW5nQm94KCk7CiAgICAgQVNTRVJUKGNoaWxk
cmVuSW5saW5lKCkpOwotICAgIGZvcmNlTGF5b3V0SW5saW5lQ2hpbGRyZW4oKTsKKyAgICBMYXlv
dXRVbml0IHJlcGFpbnRMb2dpY2FsVG9wID0gMDsKKyAgICBMYXlvdXRVbml0IHJlcGFpbnRMb2dp
Y2FsQm90dG9tID0gMDsKKyAgICBjbGVhckZsb2F0cygpOworICAgIGxheW91dElubGluZUNoaWxk
cmVuKHRydWUsIHJlcGFpbnRMb2dpY2FsVG9wLCByZXBhaW50TG9naWNhbEJvdHRvbSk7CiAKICAg
ICBpZiAobV9uZWVkc1Jlb3JkZXJpbmcpCiAgICAgICAgIG1fbmVlZHNSZW9yZGVyaW5nID0gZmFs
c2U7Cg==
</data>
<flag name="review"
          id="233121"
          type_id="1"
          status="+"
          setter="dino"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>211072</attachid>
            <date>2013-09-09 13:04:02 -0700</date>
            <delta_ts>2013-09-09 13:04:48 -0700</delta_ts>
            <desc>Make release builds work by removing some inlining for now.</desc>
            <filename>patch.txt</filename>
            <type>text/plain</type>
            <size>54283</size>
            <attacher name="Dave Hyatt">hyatt</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDE1NTM3NCkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDU5IEBACisyMDEzLTA5LTA5ICBEYXZpZCBI
eWF0dCAgPGh5YXR0QGFwcGxlLmNvbT4KKworICAgICAgICBNb3ZlIGxheW91dEJsb2NrIGFuZCBs
YXlvdXRCbG9ja0NoaWxkcmVuIGludG8gUmVuZGVyQmxvY2tGbG93CisgICAgICAgIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMjEwMzYKKworICAgICAgICBSZXZpZXdl
ZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBNb3ZlIGxheW91dEJsb2NrIGludG8gUmVu
ZGVyQmxvY2tGbG93IGFuZCBtYWtlIHRoZSBiYXNlIGNsYXNzIHZlcnNpb24gb2YKKyAgICAgICAg
dGhlIG1ldGhvZCBBU1NFUlRfTk9UX1JFQUNIRUQuIEJlZ2luIHRoZSBwcm9jZXNzIG9mIG1vdmlu
ZyBibG9jayBsYXlvdXQgCisgICAgICAgIGludG8gUmVuZGVyQmxvY2tGbG93IGJ5IHB1dHRpbmcg
bGF5b3V0QmxvY2tDaGlsZHJlbiB0aGVyZSBhcyB3ZWxsLgorICAgICAgICAKKyAgICAgICAgVGhp
cyBwYXRjaCBhbHNvIHB1dHMgY2xlYXJGbG9hdHMgaW50byBSZW5kZXJCbG9ja0Zsb3cgYW5kIGp1
c3QgZGl0Y2hlcyB0aGUKKyAgICAgICAgU1ZHLXNwZWNpZmljIGZvcmNlTGF5b3V0SW5saW5lQ2hp
bGRyZW4gYnkgbGV0dGluZyBSZW5kZXJTVkdUZXh0IGRvIHdoYXQgaXQKKyAgICAgICAgbmVlZHMg
aW4gaXRzIG93biBmaWxlLgorCisgICAgICAgIENvbnZlcnQgUmVuZGVyTGlzdEJveCB0byBiZSBh
IFJlbmRlckJsb2NrRmxvdywgc2luY2UgdGhpcyBpcyBuZWNlc3NhcnkgZm9yIGl0CisgICAgICAg
IHRvIGdldCB0aGUgY29ycmVjdCBsYXlvdXRCbG9jayBtZXRob2QuCisgICAgICAgIAorICAgICAg
ICBQYXRjaCBSZW5kZXJSZWdpb24gdG8gY2FsbCBSZW5kZXJCbG9ja0Zsb3c6OmxheW91dEJsb2Nr
IHJhdGhlciB0aGFuIFJlbmRlckJsb2NrOjpsYXlvdXRCbG9jay4KKyAgICAgICAgCisgICAgICAg
IEZpeCBydW4taW5zIHNvIHRoYXQgdGhleSBjcmVhdGUgYmxvY2sgZmxvd3MgcmF0aGVyIHRoYW4g
YmxvY2tzLCBhbmQgcmVzdHJpY3QgcnVuLWlucyB0bworICAgICAgICBvbmx5IGJlIGJsb2NrIGZs
b3dzLgorCisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckJsb2NrLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OlJlbmRlckJsb2NrOjpsYXlvdXRCbG9jayk6CisgICAgICAgIChXZWJDb3JlOjpSZW5k
ZXJCbG9jazo6Y3JlYXRlUmVwbGFjZW1lbnRSdW5Jbik6CisgICAgICAgIChXZWJDb3JlOjpSZW5k
ZXJCbG9jazo6bW92ZVJ1bkluVW5kZXJTaWJsaW5nQmxvY2tJZk5lZWRlZCk6CisgICAgICAgICog
cmVuZGVyaW5nL1JlbmRlckJsb2NrLmg6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckJsb2Nr
Rmxvdy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCbG9ja0Zsb3c6OmNsZWFyRmxvYXRz
KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJsb2NrRmxvdzo6bGF5b3V0QmxvY2spOgorICAg
ICAgICAoV2ViQ29yZTo6UmVuZGVyQmxvY2tGbG93OjpsYXlvdXRCbG9ja0NoaWxkcmVuKToKKyAg
ICAgICAgKiByZW5kZXJpbmcvUmVuZGVyQmxvY2tGbG93Lmg6CisgICAgICAgICogcmVuZGVyaW5n
L1JlbmRlckJsb2NrTGluZUxheW91dC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCbG9j
a0Zsb3c6OmxheW91dElubGluZUNoaWxkcmVuKToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVy
TGlzdEJveC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMaXN0Qm94OjpSZW5kZXJMaXN0
Qm94KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxpc3RCb3g6OmxheW91dCk6CisgICAgICAg
IChXZWJDb3JlOjpSZW5kZXJMaXN0Qm94OjpwYWludE9iamVjdCk6CisgICAgICAgIChXZWJDb3Jl
OjpSZW5kZXJMaXN0Qm94OjphZGRGb2N1c1JpbmdSZWN0cyk6CisgICAgICAgIChXZWJDb3JlOjpS
ZW5kZXJMaXN0Qm94Ojpub2RlQXRQb2ludCk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckxp
c3RCb3guaDoKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyUmVnaW9uLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OlJlbmRlclJlZ2lvbjo6cGFpbnRPYmplY3QpOgorICAgICAgICAoV2ViQ29yZTo6
UmVuZGVyUmVnaW9uOjpzdHlsZURpZENoYW5nZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJS
ZWdpb246OmxheW91dEJsb2NrKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclJlZ2lvbjo6aW5z
ZXJ0ZWRJbnRvVHJlZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJSZWdpb246OndpbGxCZVJl
bW92ZWRGcm9tVHJlZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJSZWdpb246OmNvbXB1dGVJ
bnRyaW5zaWNMb2dpY2FsV2lkdGhzKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclJlZ2lvbjo6
Y29tcHV0ZVByZWZlcnJlZExvZ2ljYWxXaWR0aHMpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVy
UmVnaW9uOjp1cGRhdGVMb2dpY2FsSGVpZ2h0KToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVy
VGV4dENvbnRyb2xTaW5nbGVMaW5lLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRleHRD
b250cm9sU2luZ2xlTGluZTo6bGF5b3V0KToKKyAgICAgICAgKiByZW5kZXJpbmcvc3ZnL1JlbmRl
clNWR1RleHQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU1ZHVGV4dDo6bGF5b3V0KToK
KwogMjAxMy0wOS0wOSAgQW50dGkgS29pdmlzdG8gIDxhbnR0aUBhcHBsZS5jb20+CiAKICAgICAg
ICAgSGlkZSBub2RlKCkgYmVsb3cgUmVuZGVyTGF5ZXJNb2RlbE9iamVjdCwgdXNlIGVsZW1lbnQo
KSBpbnN0ZWFkCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2suY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCbG9jay5jcHAJ
KHJldmlzaW9uIDE1NTM3NCkKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCbG9j
ay5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE2MzAsMTcyICsxNjMwLDkgQEAgYm9vbCBSZW5kZXJC
bG9jazo6cmVsYXlvdXRUb0F2b2lkV2lkb3dzKAogICAgIHJldHVybiB0cnVlOwogfQogCi12b2lk
IFJlbmRlckJsb2NrOjpsYXlvdXRCbG9jayhib29sIHJlbGF5b3V0Q2hpbGRyZW4sIExheW91dFVu
aXQgcGFnZUxvZ2ljYWxIZWlnaHQpCit2b2lkIFJlbmRlckJsb2NrOjpsYXlvdXRCbG9jayhib29s
LCBMYXlvdXRVbml0KQogewotICAgIEFTU0VSVChuZWVkc0xheW91dCgpKTsKLQotICAgIGlmIChp
c0lubGluZSgpICYmICFpc0lubGluZUJsb2NrT3JJbmxpbmVUYWJsZSgpKSAvLyBJbmxpbmUgPGZv
cm0+cyBpbnNpZGUgdmFyaW91cyB0YWJsZSBlbGVtZW50cyBjYW4KLSAgICAgICAgcmV0dXJuOyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gY2F1c2UgdXMgdG8gY29tZSBp
biBoZXJlLiAgSnVzdCBiYWlsLgotCi0gICAgaWYgKCFyZWxheW91dENoaWxkcmVuICYmIHNpbXBs
aWZpZWRMYXlvdXQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgTGF5b3V0UmVwYWludGVyIHJl
cGFpbnRlcigqdGhpcywgY2hlY2tGb3JSZXBhaW50RHVyaW5nTGF5b3V0KCkpOwotCi0gICAgaWYg
KHVwZGF0ZUxvZ2ljYWxXaWR0aEFuZENvbHVtbldpZHRoKCkpCi0gICAgICAgIHJlbGF5b3V0Q2hp
bGRyZW4gPSB0cnVlOwotCi0gICAgY2xlYXJGbG9hdHMoKTsKLQotICAgIExheW91dFVuaXQgcHJl
dmlvdXNIZWlnaHQgPSBsb2dpY2FsSGVpZ2h0KCk7Ci0gICAgLy8gRklYTUU6IHNob3VsZCB0aGlz
IHN0YXJ0IG91dCBhcyBib3JkZXJBbmRQYWRkaW5nTG9naWNhbEhlaWdodCgpICsgc2Nyb2xsYmFy
TG9naWNhbEhlaWdodCgpLAotICAgIC8vIGZvciBjb25zaXN0ZW5jeSB3aXRoIG90aGVyIHJlbmRl
ciBjbGFzc2VzPwotICAgIHNldExvZ2ljYWxIZWlnaHQoMCk7Ci0KLSAgICBib29sIHBhZ2VMb2dp
Y2FsSGVpZ2h0Q2hhbmdlZCA9IGZhbHNlOwotICAgIGJvb2wgaGFzU3BlY2lmaWVkUGFnZUxvZ2lj
YWxIZWlnaHQgPSBmYWxzZTsKLSAgICBjaGVja0ZvclBhZ2luYXRpb25Mb2dpY2FsSGVpZ2h0Q2hh
bmdlKHBhZ2VMb2dpY2FsSGVpZ2h0LCBwYWdlTG9naWNhbEhlaWdodENoYW5nZWQsIGhhc1NwZWNp
ZmllZFBhZ2VMb2dpY2FsSGVpZ2h0KTsKLQotICAgIFJlbmRlclN0eWxlKiBzdHlsZVRvVXNlID0g
c3R5bGUoKTsKLSAgICBMYXlvdXRTdGF0ZU1haW50YWluZXIgc3RhdGVQdXNoZXIoJnZpZXcoKSwg
dGhpcywgbG9jYXRpb25PZmZzZXQoKSwgaGFzQ29sdW1ucygpIHx8IGhhc1RyYW5zZm9ybSgpIHx8
IGhhc1JlZmxlY3Rpb24oKSB8fCBzdHlsZVRvVXNlLT5pc0ZsaXBwZWRCbG9ja3NXcml0aW5nTW9k
ZSgpLCBwYWdlTG9naWNhbEhlaWdodCwgcGFnZUxvZ2ljYWxIZWlnaHRDaGFuZ2VkLCBjb2x1bW5J
bmZvKCkpOwotCi0gICAgLy8gUmVnaW9ucyBjaGFuZ2luZyB3aWR0aHMgY2FuIGZvcmNlIHVzIHRv
IHJlbGF5b3V0IG91ciBjaGlsZHJlbi4KLSAgICBSZW5kZXJGbG93VGhyZWFkKiBmbG93VGhyZWFk
ID0gZmxvd1RocmVhZENvbnRhaW5pbmdCbG9jaygpOwotICAgIGlmIChsb2dpY2FsV2lkdGhDaGFu
Z2VkSW5SZWdpb25zKGZsb3dUaHJlYWQpKQotICAgICAgICByZWxheW91dENoaWxkcmVuID0gdHJ1
ZTsKLSAgICBpZiAodXBkYXRlU2hhcGVzQmVmb3JlQmxvY2tMYXlvdXQoKSkKLSAgICAgICAgcmVs
YXlvdXRDaGlsZHJlbiA9IHRydWU7Ci0KLSAgICAvLyBXZSB1c2UgZm91ciB2YWx1ZXMsIG1heFRv
cFBvcywgbWF4VG9wTmVnLCBtYXhCb3R0b21Qb3MsIGFuZCBtYXhCb3R0b21OZWcsIHRvIHRyYWNr
Ci0gICAgLy8gb3VyIGN1cnJlbnQgbWF4aW1hbCBwb3NpdGl2ZSBhbmQgbmVnYXRpdmUgbWFyZ2lu
cy4gIFRoZXNlIHZhbHVlcyBhcmUgdXNlZCB3aGVuIHdlCi0gICAgLy8gYXJlIGNvbGxhcHNlZCB3
aXRoIGFkamFjZW50IGJsb2Nrcywgc28gZm9yIGV4YW1wbGUsIGlmIHlvdSBoYXZlIGJsb2NrIEEg
YW5kIEIKLSAgICAvLyBjb2xsYXBzaW5nIHRvZ2V0aGVyLCB0aGVuIHlvdSdkIHRha2UgdGhlIG1h
eGltYWwgcG9zaXRpdmUgbWFyZ2luIGZyb20gYm90aCBBIGFuZCBCCi0gICAgLy8gYW5kIHN1YnRy
YWN0IGl0IGZyb20gdGhlIG1heGltYWwgbmVnYXRpdmUgbWFyZ2luIGZyb20gYm90aCBBIGFuZCBC
IHRvIGdldCB0aGUKLSAgICAvLyB0cnVlIGNvbGxhcHNlZCBtYXJnaW4uICBUaGlzIGFsZ29yaXRo
bSBpcyByZWN1cnNpdmUsIHNvIHdoZW4gd2UgZmluaXNoIGxheW91dCgpCi0gICAgLy8gb3VyIGJs
b2NrIGtub3dzIGl0cyBjdXJyZW50IG1heGltYWwgcG9zaXRpdmUvbmVnYXRpdmUgdmFsdWVzLgot
ICAgIC8vCi0gICAgLy8gU3RhcnQgb3V0IGJ5IHNldHRpbmcgb3VyIG1hcmdpbiB2YWx1ZXMgdG8g
b3VyIGN1cnJlbnQgbWFyZ2lucy4gIFRhYmxlIGNlbGxzIGhhdmUKLSAgICAvLyBubyBtYXJnaW5z
LCBzbyB3ZSBkb24ndCBmaWxsIGluIHRoZSB2YWx1ZXMgZm9yIHRhYmxlIGNlbGxzLgotICAgIGJv
b2wgaXNDZWxsID0gaXNUYWJsZUNlbGwoKTsKLSAgICBpZiAoIWlzQ2VsbCkgewotICAgICAgICBp
bml0TWF4TWFyZ2luVmFsdWVzKCk7Ci0gICAgICAgIAotICAgICAgICBzZXRIYXNNYXJnaW5CZWZv
cmVRdWlyayhzdHlsZVRvVXNlLT5oYXNNYXJnaW5CZWZvcmVRdWlyaygpKTsKLSAgICAgICAgc2V0
SGFzTWFyZ2luQWZ0ZXJRdWlyayhzdHlsZVRvVXNlLT5oYXNNYXJnaW5BZnRlclF1aXJrKCkpOwot
ICAgICAgICBzZXRQYWdpbmF0aW9uU3RydXQoMCk7Ci0gICAgfQotCi0gICAgTGF5b3V0VW5pdCBy
ZXBhaW50TG9naWNhbFRvcCA9IDA7Ci0gICAgTGF5b3V0VW5pdCByZXBhaW50TG9naWNhbEJvdHRv
bSA9IDA7Ci0gICAgTGF5b3V0VW5pdCBtYXhGbG9hdExvZ2ljYWxCb3R0b20gPSAwOwotICAgIGlm
ICghZmlyc3RDaGlsZCgpICYmICFpc0Fub255bW91c0Jsb2NrKCkpCi0gICAgICAgIHNldENoaWxk
cmVuSW5saW5lKHRydWUpOwotICAgIGlmIChjaGlsZHJlbklubGluZSgpKQotICAgICAgICBsYXlv
dXRJbmxpbmVDaGlsZHJlbihyZWxheW91dENoaWxkcmVuLCByZXBhaW50TG9naWNhbFRvcCwgcmVw
YWludExvZ2ljYWxCb3R0b20pOwotICAgIGVsc2UKLSAgICAgICAgbGF5b3V0QmxvY2tDaGlsZHJl
bihyZWxheW91dENoaWxkcmVuLCBtYXhGbG9hdExvZ2ljYWxCb3R0b20pOwotCi0gICAgLy8gRXhw
YW5kIG91ciBpbnRyaW5zaWMgaGVpZ2h0IHRvIGVuY29tcGFzcyBmbG9hdHMuCi0gICAgTGF5b3V0
VW5pdCB0b0FkZCA9IGJvcmRlckFuZFBhZGRpbmdBZnRlcigpICsgc2Nyb2xsYmFyTG9naWNhbEhl
aWdodCgpOwotICAgIGlmIChsb3dlc3RGbG9hdExvZ2ljYWxCb3R0b20oKSA+IChsb2dpY2FsSGVp
Z2h0KCkgLSB0b0FkZCkgJiYgZXhwYW5kc1RvRW5jbG9zZU92ZXJoYW5naW5nRmxvYXRzKCkpCi0g
ICAgICAgIHNldExvZ2ljYWxIZWlnaHQobG93ZXN0RmxvYXRMb2dpY2FsQm90dG9tKCkgKyB0b0Fk
ZCk7Ci0gICAgCi0gICAgaWYgKHJlbGF5b3V0Rm9yUGFnaW5hdGlvbihoYXNTcGVjaWZpZWRQYWdl
TG9naWNhbEhlaWdodCwgcGFnZUxvZ2ljYWxIZWlnaHQsIHN0YXRlUHVzaGVyKSB8fCByZWxheW91
dFRvQXZvaWRXaWRvd3Moc3RhdGVQdXNoZXIpKSB7Ci0gICAgICAgIEFTU0VSVCghc2hvdWxkQnJl
YWtBdExpbmVUb0F2b2lkV2lkb3coKSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICAv
LyBDYWxjdWxhdGUgb3VyIG5ldyBoZWlnaHQuCi0gICAgTGF5b3V0VW5pdCBvbGRIZWlnaHQgPSBs
b2dpY2FsSGVpZ2h0KCk7Ci0gICAgTGF5b3V0VW5pdCBvbGRDbGllbnRBZnRlckVkZ2UgPSBjbGll
bnRMb2dpY2FsQm90dG9tKCk7Ci0KLSAgICAvLyBCZWZvcmUgdXBkYXRpbmcgdGhlIGZpbmFsIHNp
emUgb2YgdGhlIGZsb3cgdGhyZWFkIG1ha2Ugc3VyZSBhIGZvcmNlZCBicmVhayBpcyBhcHBsaWVk
IGFmdGVyIHRoZSBjb250ZW50LgotICAgIC8vIFRoaXMgZW5zdXJlcyB0aGUgc2l6ZSBpbmZvcm1h
dGlvbiBpcyBjb3JyZWN0bHkgY29tcHV0ZWQgZm9yIHRoZSBsYXN0IGF1dG8taGVpZ2h0IHJlZ2lv
biByZWNlaXZpbmcgY29udGVudC4KLSAgICBpZiAoaXNSZW5kZXJGbG93VGhyZWFkKCkpCi0gICAg
ICAgIHRvUmVuZGVyRmxvd1RocmVhZCh0aGlzKS0+YXBwbHlCcmVha0FmdGVyQ29udGVudChvbGRD
bGllbnRBZnRlckVkZ2UpOwotCi0gICAgdXBkYXRlTG9naWNhbEhlaWdodCgpOwotICAgIExheW91
dFVuaXQgbmV3SGVpZ2h0ID0gbG9naWNhbEhlaWdodCgpOwotICAgIGlmIChvbGRIZWlnaHQgIT0g
bmV3SGVpZ2h0KSB7Ci0gICAgICAgIGlmIChvbGRIZWlnaHQgPiBuZXdIZWlnaHQgJiYgbWF4Rmxv
YXRMb2dpY2FsQm90dG9tID4gbmV3SGVpZ2h0ICYmICFjaGlsZHJlbklubGluZSgpKSB7Ci0gICAg
ICAgICAgICAvLyBPbmUgb2Ygb3VyIGNoaWxkcmVuJ3MgZmxvYXRzIG1heSBoYXZlIGJlY29tZSBh
biBvdmVyaGFuZ2luZyBmbG9hdCBmb3IgdXMuIFdlIG5lZWQgdG8gbG9vayBmb3IgaXQuCi0gICAg
ICAgICAgICBmb3IgKFJlbmRlck9iamVjdCogY2hpbGQgPSBmaXJzdENoaWxkKCk7IGNoaWxkOyBj
aGlsZCA9IGNoaWxkLT5uZXh0U2libGluZygpKSB7Ci0gICAgICAgICAgICAgICAgaWYgKGNoaWxk
LT5pc1JlbmRlckJsb2NrRmxvdygpICYmICFjaGlsZC0+aXNGbG9hdGluZ09yT3V0T2ZGbG93UG9z
aXRpb25lZCgpKSB7Ci0gICAgICAgICAgICAgICAgICAgIFJlbmRlckJsb2NrKiBibG9jayA9IHRv
UmVuZGVyQmxvY2soY2hpbGQpOwotICAgICAgICAgICAgICAgICAgICBpZiAoYmxvY2stPmxvd2Vz
dEZsb2F0TG9naWNhbEJvdHRvbSgpICsgYmxvY2stPmxvZ2ljYWxUb3AoKSA+IG5ld0hlaWdodCkK
LSAgICAgICAgICAgICAgICAgICAgICAgIGFkZE92ZXJoYW5naW5nRmxvYXRzKGJsb2NrLCBmYWxz
ZSk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQot
Ci0gICAgYm9vbCBoZWlnaHRDaGFuZ2VkID0gKHByZXZpb3VzSGVpZ2h0ICE9IG5ld0hlaWdodCk7
Ci0gICAgaWYgKGhlaWdodENoYW5nZWQpCi0gICAgICAgIHJlbGF5b3V0Q2hpbGRyZW4gPSB0cnVl
OwotCi0gICAgbGF5b3V0UG9zaXRpb25lZE9iamVjdHMocmVsYXlvdXRDaGlsZHJlbiB8fCBpc1Jv
b3QoKSk7Ci0KLSAgICB1cGRhdGVTaGFwZXNBZnRlckJsb2NrTGF5b3V0KGhlaWdodENoYW5nZWQp
OwotCi0gICAgLy8gQWRkIG92ZXJmbG93IGZyb20gY2hpbGRyZW4gKHVubGVzcyB3ZSdyZSBtdWx0
aS1jb2x1bW4sIHNpbmNlIGluIHRoYXQgY2FzZSBhbGwgb3VyIGNoaWxkIG92ZXJmbG93IGlzIGNs
aXBwZWQgYW55d2F5KS4KLSAgICBjb21wdXRlT3ZlcmZsb3cob2xkQ2xpZW50QWZ0ZXJFZGdlKTsK
LSAgICAKLSAgICBzdGF0ZVB1c2hlci5wb3AoKTsKLQotICAgIGZpdEJvcmRlclRvTGluZXNJZk5l
ZWRlZCgpOwotCi0gICAgaWYgKHZpZXcoKS5sYXlvdXRTdGF0ZSgpLT5tX3BhZ2VMb2dpY2FsSGVp
Z2h0KQotICAgICAgICBzZXRQYWdlTG9naWNhbE9mZnNldCh2aWV3KCkubGF5b3V0U3RhdGUoKS0+
cGFnZUxvZ2ljYWxPZmZzZXQodGhpcywgbG9naWNhbFRvcCgpKSk7Ci0KLSAgICB1cGRhdGVMYXll
clRyYW5zZm9ybSgpOwotCi0gICAgLy8gVXBkYXRlIG91ciBzY3JvbGwgaW5mb3JtYXRpb24gaWYg
d2UncmUgb3ZlcmZsb3c6YXV0by9zY3JvbGwvaGlkZGVuIG5vdyB0aGF0IHdlIGtub3cgaWYKLSAg
ICAvLyB3ZSBvdmVyZmxvdyBvciBub3QuCi0gICAgdXBkYXRlU2Nyb2xsSW5mb0FmdGVyTGF5b3V0
KCk7Ci0KLSAgICAvLyBGSVhNRTogVGhpcyByZXBhaW50IGxvZ2ljIHNob3VsZCBiZSBtb3ZlZCBp
bnRvIGEgc2VwYXJhdGUgaGVscGVyIGZ1bmN0aW9uIQotICAgIC8vIFJlcGFpbnQgd2l0aCBvdXIg
bmV3IGJvdW5kcyBpZiB0aGV5IGFyZSBkaWZmZXJlbnQgZnJvbSBvdXIgb2xkIGJvdW5kcy4KLSAg
ICBib29sIGRpZEZ1bGxSZXBhaW50ID0gcmVwYWludGVyLnJlcGFpbnRBZnRlckxheW91dCgpOwot
ICAgIGlmICghZGlkRnVsbFJlcGFpbnQgJiYgcmVwYWludExvZ2ljYWxUb3AgIT0gcmVwYWludExv
Z2ljYWxCb3R0b20gJiYgKHN0eWxlVG9Vc2UtPnZpc2liaWxpdHkoKSA9PSBWSVNJQkxFIHx8IGVu
Y2xvc2luZ0xheWVyKCktPmhhc1Zpc2libGVDb250ZW50KCkpKSB7Ci0gICAgICAgIC8vIEZJWE1F
OiBXZSBjb3VsZCB0aWdodGVuIHVwIHRoZSBsZWZ0IGFuZCByaWdodCBpbnZhbGlkYXRpb24gcG9p
bnRzIGlmIHdlIGxldCBsYXlvdXRJbmxpbmVDaGlsZHJlbiBmaWxsIHRoZW0gaW4gYmFzZWQgb2Zm
IHRoZSBwYXJ0aWN1bGFyIGxpbmVzCi0gICAgICAgIC8vIGl0IGhhZCB0byBsYXkgb3V0LiAgV2Ug
d291bGRuJ3QgbmVlZCB0aGUgaGFzT3ZlcmZsb3dDbGlwKCkgaGFjayBpbiB0aGF0IGNhc2UgZWl0
aGVyLgotICAgICAgICBMYXlvdXRVbml0IHJlcGFpbnRMb2dpY2FsTGVmdCA9IGxvZ2ljYWxMZWZ0
VmlzdWFsT3ZlcmZsb3coKTsKLSAgICAgICAgTGF5b3V0VW5pdCByZXBhaW50TG9naWNhbFJpZ2h0
ID0gbG9naWNhbFJpZ2h0VmlzdWFsT3ZlcmZsb3coKTsKLSAgICAgICAgaWYgKGhhc092ZXJmbG93
Q2xpcCgpKSB7Ci0gICAgICAgICAgICAvLyBJZiB3ZSBoYXZlIGNsaXBwZWQgb3ZlcmZsb3csIHdl
IHNob3VsZCB1c2UgbGF5b3V0IG92ZXJmbG93IGFzIHdlbGwsIHNpbmNlIHZpc3VhbCBvdmVyZmxv
dyBmcm9tIGxpbmVzIGRpZG4ndCBwcm9wYWdhdGUgdG8gb3VyIGJsb2NrJ3Mgb3ZlcmZsb3cuCi0g
ICAgICAgICAgICAvLyBOb3RlIHRoZSBvbGQgY29kZSBkaWQgdGhpcyBhcyB3ZWxsIGJ1dCBldmVu
IGZvciBvdmVyZmxvdzp2aXNpYmxlLiAgVGhlIGFkZGl0aW9uIG9mIGhhc092ZXJmbG93Q2xpcCgp
IGF0IGxlYXN0IHRpZ2h0ZW5zIHVwIHRoZSBoYWNrIGEgYml0LgotICAgICAgICAgICAgLy8gbGF5
b3V0SW5saW5lQ2hpbGRyZW4gc2hvdWxkIGJlIHBhdGNoZWQgdG8gY29tcHV0ZSB0aGUgZW50aXJl
IHJlcGFpbnQgcmVjdC4KLSAgICAgICAgICAgIHJlcGFpbnRMb2dpY2FsTGVmdCA9IG1pbihyZXBh
aW50TG9naWNhbExlZnQsIGxvZ2ljYWxMZWZ0TGF5b3V0T3ZlcmZsb3coKSk7Ci0gICAgICAgICAg
ICByZXBhaW50TG9naWNhbFJpZ2h0ID0gbWF4KHJlcGFpbnRMb2dpY2FsUmlnaHQsIGxvZ2ljYWxS
aWdodExheW91dE92ZXJmbG93KCkpOwotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICBMYXlv
dXRSZWN0IHJlcGFpbnRSZWN0OwotICAgICAgICBpZiAoaXNIb3Jpem9udGFsV3JpdGluZ01vZGUo
KSkKLSAgICAgICAgICAgIHJlcGFpbnRSZWN0ID0gTGF5b3V0UmVjdChyZXBhaW50TG9naWNhbExl
ZnQsIHJlcGFpbnRMb2dpY2FsVG9wLCByZXBhaW50TG9naWNhbFJpZ2h0IC0gcmVwYWludExvZ2lj
YWxMZWZ0LCByZXBhaW50TG9naWNhbEJvdHRvbSAtIHJlcGFpbnRMb2dpY2FsVG9wKTsKLSAgICAg
ICAgZWxzZQotICAgICAgICAgICAgcmVwYWludFJlY3QgPSBMYXlvdXRSZWN0KHJlcGFpbnRMb2dp
Y2FsVG9wLCByZXBhaW50TG9naWNhbExlZnQsIHJlcGFpbnRMb2dpY2FsQm90dG9tIC0gcmVwYWlu
dExvZ2ljYWxUb3AsIHJlcGFpbnRMb2dpY2FsUmlnaHQgLSByZXBhaW50TG9naWNhbExlZnQpOwot
Ci0gICAgICAgIC8vIFRoZSByZXBhaW50IHJlY3QgbWF5IGJlIHNwbGl0IGFjcm9zcyBjb2x1bW5z
LCBpbiB3aGljaCBjYXNlIGFkanVzdFJlY3RGb3JDb2x1bW5zKCkgd2lsbCByZXR1cm4gdGhlIHVu
aW9uLgotICAgICAgICBhZGp1c3RSZWN0Rm9yQ29sdW1ucyhyZXBhaW50UmVjdCk7Ci0KLSAgICAg
ICAgcmVwYWludFJlY3QuaW5mbGF0ZShtYXhpbWFsT3V0bGluZVNpemUoUGFpbnRQaGFzZU91dGxp
bmUpKTsKLSAgICAgICAgCi0gICAgICAgIGlmIChoYXNPdmVyZmxvd0NsaXAoKSkgewotICAgICAg
ICAgICAgLy8gQWRqdXN0IHJlcGFpbnQgcmVjdCBmb3Igc2Nyb2xsIG9mZnNldAotICAgICAgICAg
ICAgcmVwYWludFJlY3QubW92ZSgtc2Nyb2xsZWRDb250ZW50T2Zmc2V0KCkpOwotCi0gICAgICAg
ICAgICAvLyBEb24ndCBhbGxvdyB0aGlzIHJlY3QgdG8gc3BpbGwgb3V0IG9mIG91ciBvdmVyZmxv
dyBib3guCi0gICAgICAgICAgICByZXBhaW50UmVjdC5pbnRlcnNlY3QoTGF5b3V0UmVjdChMYXlv
dXRQb2ludCgpLCBzaXplKCkpKTsKLSAgICAgICAgfQotCi0gICAgICAgIC8vIE1ha2Ugc3VyZSB0
aGUgcmVjdCBpcyBzdGlsbCBub24tZW1wdHkgYWZ0ZXIgaW50ZXJzZWN0aW5nIGZvciBvdmVyZmxv
dyBhYm92ZQotICAgICAgICBpZiAoIXJlcGFpbnRSZWN0LmlzRW1wdHkoKSkgewotICAgICAgICAg
ICAgcmVwYWludFJlY3RhbmdsZShyZXBhaW50UmVjdCk7IC8vIFdlIG5lZWQgdG8gZG8gYSBwYXJ0
aWFsIHJlcGFpbnQgb2Ygb3VyIGNvbnRlbnQuCi0gICAgICAgICAgICBpZiAoaGFzUmVmbGVjdGlv
bigpKQotICAgICAgICAgICAgICAgIHJlcGFpbnRSZWN0YW5nbGUocmVmbGVjdGVkUmVjdChyZXBh
aW50UmVjdCkpOwotICAgICAgICB9Ci0gICAgfQotCisgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7
CiAgICAgc2V0TmVlZHNMYXlvdXQoZmFsc2UpOwogfQogCkBAIC0yMDE3LDggKzE4NTQsOCBAQCBS
ZW5kZXJCb3hNb2RlbE9iamVjdCogUmVuZGVyQmxvY2s6OmNyZWF0CiAgICAgQVNTRVJUKHJ1bklu
LT5lbGVtZW50KCkpOwogCiAgICAgUmVuZGVyQm94TW9kZWxPYmplY3QqIG5ld1J1bkluID0gMDsK
LSAgICBpZiAoIXJ1bkluLT5pc1JlbmRlckJsb2NrKCkpCi0gICAgICAgIG5ld1J1bkluID0gbmV3
IChyZW5kZXJBcmVuYSgpKSBSZW5kZXJCbG9jayhydW5Jbi0+ZWxlbWVudCgpKTsKKyAgICBpZiAo
IXJ1bkluLT5pc1JlbmRlckJsb2NrRmxvdygpKQorICAgICAgICBuZXdSdW5JbiA9IG5ldyAocmVu
ZGVyQXJlbmEoKSkgUmVuZGVyQmxvY2tGbG93KHJ1bkluLT5lbGVtZW50KCkpOwogICAgIGVsc2UK
ICAgICAgICAgbmV3UnVuSW4gPSBuZXcgKHJlbmRlckFyZW5hKCkpIFJlbmRlcklubGluZShydW5J
bi0+ZWxlbWVudCgpKTsKIApAQCAtMjA0MCw3ICsxODc3LDcgQEAgdm9pZCBSZW5kZXJCbG9jazo6
bW92ZVJ1bkluVW5kZXJTaWJsaW5nQgogICAgICAgICByZXR1cm47CiAKICAgICAvLyBGSVhNRTog
V2UgZG9uJ3QgaGFuZGxlIG5vbi1ibG9jayBlbGVtZW50cyB3aXRoIHJ1bi1pbiBmb3Igbm93Lgot
ICAgIGlmICghcnVuSW4tPmlzUmVuZGVyQmxvY2soKSkKKyAgICBpZiAoIXJ1bkluLT5pc1JlbmRl
ckJsb2NrRmxvdygpKQogICAgICAgICByZXR1cm47CiAKICAgICAvLyBGSVhNRTogV2UgZG9uJ3Qg
c3VwcG9ydCBydW4taW5zIHdpdGggb3IgYXMgcGFydCBvZiBhIGNvbnRpbnVhdGlvbgpAQCAtMjU5
OCw2MSArMjQzNSw2IEBAIHZvaWQgUmVuZGVyQmxvY2s6OmRpcnR5Rm9yTGF5b3V0RnJvbVBlcmMK
ICAgICB9CiB9CiAKLXZvaWQgUmVuZGVyQmxvY2s6OmxheW91dEJsb2NrQ2hpbGRyZW4oYm9vbCBy
ZWxheW91dENoaWxkcmVuLCBMYXlvdXRVbml0JiBtYXhGbG9hdExvZ2ljYWxCb3R0b20pCi17Ci0g
ICAgZGlydHlGb3JMYXlvdXRGcm9tUGVyY2VudGFnZUhlaWdodERlc2NlbmRhbnRzKCk7Ci0KLSAg
ICBMYXlvdXRVbml0IGJlZm9yZUVkZ2UgPSBib3JkZXJBbmRQYWRkaW5nQmVmb3JlKCk7Ci0gICAg
TGF5b3V0VW5pdCBhZnRlckVkZ2UgPSBib3JkZXJBbmRQYWRkaW5nQWZ0ZXIoKSArIHNjcm9sbGJh
ckxvZ2ljYWxIZWlnaHQoKTsKLQotICAgIHNldExvZ2ljYWxIZWlnaHQoYmVmb3JlRWRnZSk7Ci0g
ICAgCi0gICAgLy8gTGF5IG91dCBvdXIgaHlwb3RoZXRpY2FsIGdyaWQgbGluZSBhcyB0aG91Z2gg
aXQgb2NjdXJzIGF0IHRoZSB0b3Agb2YgdGhlIGJsb2NrLgotICAgIGlmICh2aWV3KCkubGF5b3V0
U3RhdGUoKS0+bGluZUdyaWQoKSA9PSB0aGlzKQotICAgICAgICBsYXlvdXRMaW5lR3JpZEJveCgp
OwotCi0gICAgLy8gVGhlIG1hcmdpbiBzdHJ1Y3QgY2FjaGVzIGFsbCBvdXIgY3VycmVudCBtYXJn
aW4gY29sbGFwc2luZyBzdGF0ZS4gIFRoZSBjb21wYWN0IHN0cnVjdCBjYWNoZXMgc3RhdGUgd2hl
biB3ZSBlbmNvdW50ZXIgY29tcGFjdHMsCi0gICAgTWFyZ2luSW5mbyBtYXJnaW5JbmZvKHRoaXMs
IGJlZm9yZUVkZ2UsIGFmdGVyRWRnZSk7Ci0KLSAgICAvLyBGaWVsZHNldHMgbmVlZCB0byBmaW5k
IHRoZWlyIGxlZ2VuZCBhbmQgcG9zaXRpb24gaXQgaW5zaWRlIHRoZSBib3JkZXIgb2YgdGhlIG9i
amVjdC4KLSAgICAvLyBUaGUgbGVnZW5kIHRoZW4gZ2V0cyBza2lwcGVkIGR1cmluZyBub3JtYWwg
bGF5b3V0LiAgVGhlIHNhbWUgaXMgdHJ1ZSBmb3IgcnVieSB0ZXh0LgotICAgIC8vIEl0IGRvZXNu
J3QgZ2V0IGluY2x1ZGVkIGluIHRoZSBub3JtYWwgbGF5b3V0IHByb2Nlc3MgYnV0IGlzIGluc3Rl
YWQgc2tpcHBlZC4KLSAgICBSZW5kZXJPYmplY3QqIGNoaWxkVG9FeGNsdWRlID0gbGF5b3V0U3Bl
Y2lhbEV4Y2x1ZGVkQ2hpbGQocmVsYXlvdXRDaGlsZHJlbik7Ci0KLSAgICBMYXlvdXRVbml0IHBy
ZXZpb3VzRmxvYXRMb2dpY2FsQm90dG9tID0gMDsKLSAgICBtYXhGbG9hdExvZ2ljYWxCb3R0b20g
PSAwOwotCi0gICAgUmVuZGVyQm94KiBuZXh0ID0gZmlyc3RDaGlsZEJveCgpOwotCi0gICAgd2hp
bGUgKG5leHQpIHsKLSAgICAgICAgUmVuZGVyQm94KiBjaGlsZCA9IG5leHQ7Ci0gICAgICAgIG5l
eHQgPSBjaGlsZC0+bmV4dFNpYmxpbmdCb3goKTsKLQotICAgICAgICBpZiAoY2hpbGRUb0V4Y2x1
ZGUgPT0gY2hpbGQpCi0gICAgICAgICAgICBjb250aW51ZTsgLy8gU2tpcCB0aGlzIGNoaWxkLCBz
aW5jZSBpdCB3aWxsIGJlIHBvc2l0aW9uZWQgYnkgdGhlIHNwZWNpYWxpemVkIHN1YmNsYXNzIChm
aWVsZHNldHMgYW5kIHJ1YnkgcnVucykuCi0KLSAgICAgICAgdXBkYXRlQmxvY2tDaGlsZERpcnR5
Qml0c0JlZm9yZUxheW91dChyZWxheW91dENoaWxkcmVuLCBjaGlsZCk7Ci0KLSAgICAgICAgaWYg
KGNoaWxkLT5pc091dE9mRmxvd1Bvc2l0aW9uZWQoKSkgewotICAgICAgICAgICAgY2hpbGQtPmNv
bnRhaW5pbmdCbG9jaygpLT5pbnNlcnRQb3NpdGlvbmVkT2JqZWN0KGNoaWxkKTsKLSAgICAgICAg
ICAgIGFkanVzdFBvc2l0aW9uZWRCbG9jayhjaGlsZCwgbWFyZ2luSW5mbyk7Ci0gICAgICAgICAg
ICBjb250aW51ZTsKLSAgICAgICAgfQotICAgICAgICBpZiAoY2hpbGQtPmlzRmxvYXRpbmcoKSkg
ewotICAgICAgICAgICAgaW5zZXJ0RmxvYXRpbmdPYmplY3QoY2hpbGQpOwotICAgICAgICAgICAg
YWRqdXN0RmxvYXRpbmdCbG9jayhtYXJnaW5JbmZvKTsKLSAgICAgICAgICAgIGNvbnRpbnVlOwot
ICAgICAgICB9Ci0KLSAgICAgICAgLy8gTGF5IG91dCB0aGUgY2hpbGQuCi0gICAgICAgIGxheW91
dEJsb2NrQ2hpbGQoY2hpbGQsIG1hcmdpbkluZm8sIHByZXZpb3VzRmxvYXRMb2dpY2FsQm90dG9t
LCBtYXhGbG9hdExvZ2ljYWxCb3R0b20pOwotICAgIH0KLSAgICAKLSAgICAvLyBOb3cgZG8gdGhl
IGhhbmRsaW5nIG9mIHRoZSBib3R0b20gb2YgdGhlIGJsb2NrLCBhZGRpbmcgaW4gb3VyIGJvdHRv
bSBib3JkZXIvcGFkZGluZyBhbmQKLSAgICAvLyBkZXRlcm1pbmluZyB0aGUgY29ycmVjdCBjb2xs
YXBzZWQgYm90dG9tIG1hcmdpbiBpbmZvcm1hdGlvbi4KLSAgICBoYW5kbGVBZnRlclNpZGVPZkJs
b2NrKGJlZm9yZUVkZ2UsIGFmdGVyRWRnZSwgbWFyZ2luSW5mbyk7Ci19Ci0KIHZvaWQgUmVuZGVy
QmxvY2s6OmxheW91dEJsb2NrQ2hpbGQoUmVuZGVyQm94KiBjaGlsZCwgTWFyZ2luSW5mbyYgbWFy
Z2luSW5mbywgTGF5b3V0VW5pdCYgcHJldmlvdXNGbG9hdExvZ2ljYWxCb3R0b20sIExheW91dFVu
aXQmIG1heEZsb2F0TG9naWNhbEJvdHRvbSkKIHsKICAgICBMYXlvdXRVbml0IG9sZFBvc01hcmdp
bkJlZm9yZSA9IG1heFBvc2l0aXZlTWFyZ2luQmVmb3JlKCk7CkBAIC00NzAwLDE1MyArNDQ4Miw2
IEBAIHZvaWQgUmVuZGVyQmxvY2s6Om1hcmtMaW5lc0RpcnR5SW5CbG9ja1IKICAgICB9CiB9CiAK
LXZvaWQgUmVuZGVyQmxvY2s6OmNsZWFyRmxvYXRzKCkKLXsKLSAgICBpZiAobV9mbG9hdGluZ09i
amVjdHMpCi0gICAgICAgIG1fZmxvYXRpbmdPYmplY3RzLT5zZXRIb3Jpem9udGFsV3JpdGluZ01v
ZGUoaXNIb3Jpem9udGFsV3JpdGluZ01vZGUoKSk7Ci0KLSAgICBIYXNoU2V0PFJlbmRlckJveCo+
IG9sZEludHJ1ZGluZ0Zsb2F0U2V0OwotICAgIGlmICghY2hpbGRyZW5JbmxpbmUoKSAmJiBtX2Zs
b2F0aW5nT2JqZWN0cykgewotICAgICAgICBjb25zdCBGbG9hdGluZ09iamVjdFNldCYgZmxvYXRp
bmdPYmplY3RTZXQgPSBtX2Zsb2F0aW5nT2JqZWN0cy0+c2V0KCk7Ci0gICAgICAgIEZsb2F0aW5n
T2JqZWN0U2V0SXRlcmF0b3IgZW5kID0gZmxvYXRpbmdPYmplY3RTZXQuZW5kKCk7Ci0gICAgICAg
IGZvciAoRmxvYXRpbmdPYmplY3RTZXRJdGVyYXRvciBpdCA9IGZsb2F0aW5nT2JqZWN0U2V0LmJl
Z2luKCk7IGl0ICE9IGVuZDsgKytpdCkgewotICAgICAgICAgICAgRmxvYXRpbmdPYmplY3QqIGZs
b2F0aW5nT2JqZWN0ID0gKml0OwotICAgICAgICAgICAgaWYgKCFmbG9hdGluZ09iamVjdC0+aXNE
ZXNjZW5kYW50KCkpCi0gICAgICAgICAgICAgICAgb2xkSW50cnVkaW5nRmxvYXRTZXQuYWRkKGZs
b2F0aW5nT2JqZWN0LT5yZW5kZXJlcigpKTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIC8vIElu
bGluZSBibG9ja3MgYXJlIGNvdmVyZWQgYnkgdGhlIGlzUmVwbGFjZWQoKSBjaGVjayBpbiB0aGUg
YXZvaWRGbG9hdHMgbWV0aG9kLgotICAgIGlmIChhdm9pZHNGbG9hdHMoKSB8fCBpc1Jvb3QoKSB8
fCBpc1JlbmRlclZpZXcoKSB8fCBpc0Zsb2F0aW5nT3JPdXRPZkZsb3dQb3NpdGlvbmVkKCkgfHwg
aXNUYWJsZUNlbGwoKSkgewotICAgICAgICBpZiAobV9mbG9hdGluZ09iamVjdHMpIHsKLSAgICAg
ICAgICAgIGRlbGV0ZUFsbFZhbHVlcyhtX2Zsb2F0aW5nT2JqZWN0cy0+c2V0KCkpOwotICAgICAg
ICAgICAgbV9mbG9hdGluZ09iamVjdHMtPmNsZWFyKCk7Ci0gICAgICAgIH0KLSAgICAgICAgaWYg
KCFvbGRJbnRydWRpbmdGbG9hdFNldC5pc0VtcHR5KCkpCi0gICAgICAgICAgICBtYXJrQWxsRGVz
Y2VuZGFudHNXaXRoRmxvYXRzRm9yTGF5b3V0KCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0K
LSAgICB0eXBlZGVmIEhhc2hNYXA8UmVuZGVyT2JqZWN0KiwgRmxvYXRpbmdPYmplY3QqPiBSZW5k
ZXJlclRvRmxvYXRJbmZvTWFwOwotICAgIFJlbmRlcmVyVG9GbG9hdEluZm9NYXAgZmxvYXRNYXA7
Ci0KLSAgICBpZiAobV9mbG9hdGluZ09iamVjdHMpIHsKLSAgICAgICAgY29uc3QgRmxvYXRpbmdP
YmplY3RTZXQmIGZsb2F0aW5nT2JqZWN0U2V0ID0gbV9mbG9hdGluZ09iamVjdHMtPnNldCgpOwot
ICAgICAgICBpZiAoY2hpbGRyZW5JbmxpbmUoKSkgewotICAgICAgICAgICAgRmxvYXRpbmdPYmpl
Y3RTZXRJdGVyYXRvciBlbmQgPSBmbG9hdGluZ09iamVjdFNldC5lbmQoKTsKLSAgICAgICAgICAg
IGZvciAoRmxvYXRpbmdPYmplY3RTZXRJdGVyYXRvciBpdCA9IGZsb2F0aW5nT2JqZWN0U2V0LmJl
Z2luKCk7IGl0ICE9IGVuZDsgKytpdCkgewotICAgICAgICAgICAgICAgIEZsb2F0aW5nT2JqZWN0
KiBmID0gKml0OwotICAgICAgICAgICAgICAgIGZsb2F0TWFwLmFkZChmLT5yZW5kZXJlcigpLCBm
KTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICBkZWxldGVBbGxW
YWx1ZXMoZmxvYXRpbmdPYmplY3RTZXQpOwotICAgICAgICBtX2Zsb2F0aW5nT2JqZWN0cy0+Y2xl
YXIoKTsKLSAgICB9Ci0KLSAgICAvLyBXZSBzaG91bGQgbm90IHByb2Nlc3MgZmxvYXRzIGlmIHRo
ZSBwYXJlbnQgbm9kZSBpcyBub3QgYSBSZW5kZXJCbG9jay4gT3RoZXJ3aXNlLCB3ZSB3aWxsIGFk
ZCAKLSAgICAvLyBmbG9hdHMgaW4gYW4gaW52YWxpZCBjb250ZXh0LiBUaGlzIHdpbGwgY2F1c2Ug
YSBjcmFzaCBhcmlzaW5nIGZyb20gYSBiYWQgY2FzdCBvbiB0aGUgcGFyZW50LgotICAgIC8vIFNl
ZSA8cmRhcjovL3Byb2JsZW0vODA0OTc1Mz4sIHdoZXJlIGZsb2F0IHByb3BlcnR5IGlzIGFwcGxp
ZWQgb24gYSB0ZXh0IG5vZGUgaW4gYSBTVkcuCi0gICAgaWYgKCFwYXJlbnQoKSB8fCAhcGFyZW50
KCktPmlzUmVuZGVyQmxvY2soKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgLy8gQXR0ZW1wdCB0
byBsb2NhdGUgYSBwcmV2aW91cyBzaWJsaW5nIHdpdGggb3ZlcmhhbmdpbmcgZmxvYXRzLiAgV2Ug
c2tpcCBhbnkgZWxlbWVudHMgdGhhdCBhcmUKLSAgICAvLyBvdXQgb2YgZmxvdyAobGlrZSBmbG9h
dGluZy9wb3NpdGlvbmVkIGVsZW1lbnRzKSwgYW5kIHdlIGFsc28gc2tpcCBvdmVyIGFueSBvYmpl
Y3RzIHRoYXQgbWF5IGhhdmUgc2hpZnRlZAotICAgIC8vIHRvIGF2b2lkIGZsb2F0cy4KLSAgICBS
ZW5kZXJCbG9jayogcGFyZW50QmxvY2sgPSB0b1JlbmRlckJsb2NrKHBhcmVudCgpKTsKLSAgICBi
b29sIHBhcmVudEhhc0Zsb2F0cyA9IGZhbHNlOwotICAgIFJlbmRlck9iamVjdCogcHJldiA9IHBy
ZXZpb3VzU2libGluZygpOwotICAgIHdoaWxlIChwcmV2ICYmIChwcmV2LT5pc0Zsb2F0aW5nT3JP
dXRPZkZsb3dQb3NpdGlvbmVkKCkgfHwgIXByZXYtPmlzQm94KCkgfHwgIXByZXYtPmlzUmVuZGVy
QmxvY2soKSB8fCB0b1JlbmRlckJsb2NrKHByZXYpLT5hdm9pZHNGbG9hdHMoKSkpIHsKLSAgICAg
ICAgaWYgKHByZXYtPmlzRmxvYXRpbmcoKSkKLSAgICAgICAgICAgIHBhcmVudEhhc0Zsb2F0cyA9
IHRydWU7Ci0gICAgICAgIHByZXYgPSBwcmV2LT5wcmV2aW91c1NpYmxpbmcoKTsKLSAgICB9Ci0K
LSAgICAvLyBGaXJzdCBhZGQgaW4gZmxvYXRzIGZyb20gdGhlIHBhcmVudC4KLSAgICBMYXlvdXRV
bml0IGxvZ2ljYWxUb3BPZmZzZXQgPSBsb2dpY2FsVG9wKCk7Ci0gICAgaWYgKHBhcmVudEhhc0Zs
b2F0cykKLSAgICAgICAgYWRkSW50cnVkaW5nRmxvYXRzKHBhcmVudEJsb2NrLCBwYXJlbnRCbG9j
ay0+bG9naWNhbExlZnRPZmZzZXRGb3JDb250ZW50KCksIGxvZ2ljYWxUb3BPZmZzZXQpOwotICAg
IAotICAgIExheW91dFVuaXQgbG9naWNhbExlZnRPZmZzZXQgPSAwOwotICAgIGlmIChwcmV2KQot
ICAgICAgICBsb2dpY2FsVG9wT2Zmc2V0IC09IHRvUmVuZGVyQm94KHByZXYpLT5sb2dpY2FsVG9w
KCk7Ci0gICAgZWxzZSB7Ci0gICAgICAgIHByZXYgPSBwYXJlbnRCbG9jazsKLSAgICAgICAgbG9n
aWNhbExlZnRPZmZzZXQgKz0gcGFyZW50QmxvY2stPmxvZ2ljYWxMZWZ0T2Zmc2V0Rm9yQ29udGVu
dCgpOwotICAgIH0KLQotICAgIC8vIEFkZCBvdmVyaGFuZ2luZyBmbG9hdHMgZnJvbSB0aGUgcHJl
dmlvdXMgUmVuZGVyQmxvY2ssIGJ1dCBvbmx5IGlmIGl0IGhhcyBhIGZsb2F0IHRoYXQgaW50cnVk
ZXMgaW50byBvdXIgc3BhY2UuICAgIAotICAgIFJlbmRlckJsb2NrKiBibG9jayA9IHRvUmVuZGVy
QmxvY2socHJldik7Ci0gICAgaWYgKGJsb2NrLT5tX2Zsb2F0aW5nT2JqZWN0cyAmJiBibG9jay0+
bG93ZXN0RmxvYXRMb2dpY2FsQm90dG9tKCkgPiBsb2dpY2FsVG9wT2Zmc2V0KQotICAgICAgICBh
ZGRJbnRydWRpbmdGbG9hdHMoYmxvY2ssIGxvZ2ljYWxMZWZ0T2Zmc2V0LCBsb2dpY2FsVG9wT2Zm
c2V0KTsKLQotICAgIGlmIChjaGlsZHJlbklubGluZSgpKSB7Ci0gICAgICAgIExheW91dFVuaXQg
Y2hhbmdlTG9naWNhbFRvcCA9IExheW91dFVuaXQ6Om1heCgpOwotICAgICAgICBMYXlvdXRVbml0
IGNoYW5nZUxvZ2ljYWxCb3R0b20gPSBMYXlvdXRVbml0OjptaW4oKTsKLSAgICAgICAgaWYgKG1f
ZmxvYXRpbmdPYmplY3RzKSB7Ci0gICAgICAgICAgICBjb25zdCBGbG9hdGluZ09iamVjdFNldCYg
ZmxvYXRpbmdPYmplY3RTZXQgPSBtX2Zsb2F0aW5nT2JqZWN0cy0+c2V0KCk7Ci0gICAgICAgICAg
ICBGbG9hdGluZ09iamVjdFNldEl0ZXJhdG9yIGVuZCA9IGZsb2F0aW5nT2JqZWN0U2V0LmVuZCgp
OwotICAgICAgICAgICAgZm9yIChGbG9hdGluZ09iamVjdFNldEl0ZXJhdG9yIGl0ID0gZmxvYXRp
bmdPYmplY3RTZXQuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7Ci0gICAgICAgICAgICAgICAg
RmxvYXRpbmdPYmplY3QqIGYgPSAqaXQ7Ci0gICAgICAgICAgICAgICAgRmxvYXRpbmdPYmplY3Qq
IG9sZEZsb2F0aW5nT2JqZWN0ID0gZmxvYXRNYXAuZ2V0KGYtPnJlbmRlcmVyKCkpOwotICAgICAg
ICAgICAgICAgIExheW91dFVuaXQgbG9naWNhbEJvdHRvbSA9IGYtPmxvZ2ljYWxCb3R0b20oaXNI
b3Jpem9udGFsV3JpdGluZ01vZGUoKSk7Ci0gICAgICAgICAgICAgICAgaWYgKG9sZEZsb2F0aW5n
T2JqZWN0KSB7Ci0gICAgICAgICAgICAgICAgICAgIExheW91dFVuaXQgb2xkTG9naWNhbEJvdHRv
bSA9IG9sZEZsb2F0aW5nT2JqZWN0LT5sb2dpY2FsQm90dG9tKGlzSG9yaXpvbnRhbFdyaXRpbmdN
b2RlKCkpOwotICAgICAgICAgICAgICAgICAgICBpZiAoZi0+bG9naWNhbFdpZHRoKGlzSG9yaXpv
bnRhbFdyaXRpbmdNb2RlKCkpICE9IG9sZEZsb2F0aW5nT2JqZWN0LT5sb2dpY2FsV2lkdGgoaXNI
b3Jpem9udGFsV3JpdGluZ01vZGUoKSkgfHwgZi0+bG9naWNhbExlZnQoaXNIb3Jpem9udGFsV3Jp
dGluZ01vZGUoKSkgIT0gb2xkRmxvYXRpbmdPYmplY3QtPmxvZ2ljYWxMZWZ0KGlzSG9yaXpvbnRh
bFdyaXRpbmdNb2RlKCkpKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBjaGFuZ2VMb2dpY2Fs
VG9wID0gMDsKLSAgICAgICAgICAgICAgICAgICAgICAgIGNoYW5nZUxvZ2ljYWxCb3R0b20gPSBt
YXgoY2hhbmdlTG9naWNhbEJvdHRvbSwgbWF4KGxvZ2ljYWxCb3R0b20sIG9sZExvZ2ljYWxCb3R0
b20pKTsKLSAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAg
ICAgIGlmIChsb2dpY2FsQm90dG9tICE9IG9sZExvZ2ljYWxCb3R0b20pIHsKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBjaGFuZ2VMb2dpY2FsVG9wID0gbWluKGNoYW5nZUxvZ2ljYWxUb3As
IG1pbihsb2dpY2FsQm90dG9tLCBvbGRMb2dpY2FsQm90dG9tKSk7Ci0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgY2hhbmdlTG9naWNhbEJvdHRvbSA9IG1heChjaGFuZ2VMb2dpY2FsQm90dG9t
LCBtYXgobG9naWNhbEJvdHRvbSwgb2xkTG9naWNhbEJvdHRvbSkpOwotICAgICAgICAgICAgICAg
ICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgTGF5b3V0VW5pdCBsb2dpY2FsVG9w
ID0gZi0+bG9naWNhbFRvcChpc0hvcml6b250YWxXcml0aW5nTW9kZSgpKTsKLSAgICAgICAgICAg
ICAgICAgICAgICAgIExheW91dFVuaXQgb2xkTG9naWNhbFRvcCA9IG9sZEZsb2F0aW5nT2JqZWN0
LT5sb2dpY2FsVG9wKGlzSG9yaXpvbnRhbFdyaXRpbmdNb2RlKCkpOwotICAgICAgICAgICAgICAg
ICAgICAgICAgaWYgKGxvZ2ljYWxUb3AgIT0gb2xkTG9naWNhbFRvcCkgewotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGNoYW5nZUxvZ2ljYWxUb3AgPSBtaW4oY2hhbmdlTG9naWNhbFRvcCwg
bWluKGxvZ2ljYWxUb3AsIG9sZExvZ2ljYWxUb3ApKTsKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBjaGFuZ2VMb2dpY2FsQm90dG9tID0gbWF4KGNoYW5nZUxvZ2ljYWxCb3R0b20sIG1heChs
b2dpY2FsVG9wLCBvbGRMb2dpY2FsVG9wKSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0g
ICAgICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgICAgICBmbG9hdE1hcC5yZW1v
dmUoZi0+cmVuZGVyZXIoKSk7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChvbGRGbG9hdGluZ09i
amVjdC0+b3JpZ2luYXRpbmdMaW5lKCkgJiYgIXNlbGZOZWVkc0xheW91dCgpKSB7Ci0gICAgICAg
ICAgICAgICAgICAgICAgICBBU1NFUlQoJm9sZEZsb2F0aW5nT2JqZWN0LT5vcmlnaW5hdGluZ0xp
bmUoKS0+cmVuZGVyZXIoKSA9PSB0aGlzKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIG9sZEZs
b2F0aW5nT2JqZWN0LT5vcmlnaW5hdGluZ0xpbmUoKS0+bWFya0RpcnR5KCk7Ci0gICAgICAgICAg
ICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgZGVsZXRlIG9sZEZsb2F0aW5nT2JqZWN0
OwotICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgIGNoYW5nZUxv
Z2ljYWxUb3AgPSAwOwotICAgICAgICAgICAgICAgICAgICBjaGFuZ2VMb2dpY2FsQm90dG9tID0g
bWF4KGNoYW5nZUxvZ2ljYWxCb3R0b20sIGxvZ2ljYWxCb3R0b20pOwotICAgICAgICAgICAgICAg
IH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIFJlbmRlcmVyVG9GbG9hdElu
Zm9NYXA6Oml0ZXJhdG9yIGVuZCA9IGZsb2F0TWFwLmVuZCgpOwotICAgICAgICBmb3IgKFJlbmRl
cmVyVG9GbG9hdEluZm9NYXA6Oml0ZXJhdG9yIGl0ID0gZmxvYXRNYXAuYmVnaW4oKTsgaXQgIT0g
ZW5kOyArK2l0KSB7Ci0gICAgICAgICAgICBGbG9hdGluZ09iamVjdCogZmxvYXRpbmdPYmplY3Qg
PSAoKml0KS52YWx1ZTsKLSAgICAgICAgICAgIGlmICghZmxvYXRpbmdPYmplY3QtPmlzRGVzY2Vu
ZGFudCgpKSB7Ci0gICAgICAgICAgICAgICAgY2hhbmdlTG9naWNhbFRvcCA9IDA7Ci0gICAgICAg
ICAgICAgICAgY2hhbmdlTG9naWNhbEJvdHRvbSA9IG1heChjaGFuZ2VMb2dpY2FsQm90dG9tLCBm
bG9hdGluZ09iamVjdC0+bG9naWNhbEJvdHRvbShpc0hvcml6b250YWxXcml0aW5nTW9kZSgpKSk7
Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgZGVsZXRlQWxsVmFsdWVzKGZsb2F0
TWFwKTsKLQotICAgICAgICBtYXJrTGluZXNEaXJ0eUluQmxvY2tSYW5nZShjaGFuZ2VMb2dpY2Fs
VG9wLCBjaGFuZ2VMb2dpY2FsQm90dG9tKTsKLSAgICB9IGVsc2UgaWYgKCFvbGRJbnRydWRpbmdG
bG9hdFNldC5pc0VtcHR5KCkpIHsKLSAgICAgICAgLy8gSWYgdGhlcmUgYXJlIHByZXZpb3VzbHkg
aW50cnVkaW5nIGZsb2F0cyB0aGF0IG5vIGxvbmdlciBpbnRydWRlLCB0aGVuIGNoaWxkcmVuIHdp
dGggZmxvYXRzCi0gICAgICAgIC8vIHNob3VsZCBhbHNvIGdldCBsYXlvdXQgYmVjYXVzZSB0aGV5
IG1pZ2h0IG5lZWQgdGhlaXIgZmxvYXRpbmcgb2JqZWN0IGxpc3RzIGNsZWFyZWQuCi0gICAgICAg
IGlmIChtX2Zsb2F0aW5nT2JqZWN0cy0+c2V0KCkuc2l6ZSgpIDwgb2xkSW50cnVkaW5nRmxvYXRT
ZXQuc2l6ZSgpKQotICAgICAgICAgICAgbWFya0FsbERlc2NlbmRhbnRzV2l0aEZsb2F0c0Zvckxh
eW91dCgpOwotICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgIGNvbnN0IEZsb2F0aW5nT2JqZWN0
U2V0JiBmbG9hdGluZ09iamVjdFNldCA9IG1fZmxvYXRpbmdPYmplY3RzLT5zZXQoKTsKLSAgICAg
ICAgICAgIEZsb2F0aW5nT2JqZWN0U2V0SXRlcmF0b3IgZW5kID0gZmxvYXRpbmdPYmplY3RTZXQu
ZW5kKCk7Ci0gICAgICAgICAgICBmb3IgKEZsb2F0aW5nT2JqZWN0U2V0SXRlcmF0b3IgaXQgPSBm
bG9hdGluZ09iamVjdFNldC5iZWdpbigpOyBpdCAhPSBlbmQgJiYgIW9sZEludHJ1ZGluZ0Zsb2F0
U2V0LmlzRW1wdHkoKTsgKytpdCkKLSAgICAgICAgICAgICAgICBvbGRJbnRydWRpbmdGbG9hdFNl
dC5yZW1vdmUoKCppdCktPnJlbmRlcmVyKCkpOwotICAgICAgICAgICAgaWYgKCFvbGRJbnRydWRp
bmdGbG9hdFNldC5pc0VtcHR5KCkpCi0gICAgICAgICAgICAgICAgbWFya0FsbERlc2NlbmRhbnRz
V2l0aEZsb2F0c0ZvckxheW91dCgpOwotICAgICAgICB9Ci0gICAgfQotfQotCiBMYXlvdXRVbml0
IFJlbmRlckJsb2NrOjphZGRPdmVyaGFuZ2luZ0Zsb2F0cyhSZW5kZXJCbG9jayogY2hpbGQsIGJv
b2wgbWFrZUNoaWxkUGFpbnRPdGhlckZsb2F0cykKIHsKICAgICAvLyBQcmV2ZW50IGZsb2F0cyBm
cm9tIGJlaW5nIGFkZGVkIHRvIHRoZSBjYW52YXMgYnkgdGhlIHJvb3QgZWxlbWVudCwgZS5nLiwg
PGh0bWw+LgpAQCAtODIwMiw3ICs3ODM3LDggQEAgdm9pZCBSZW5kZXJCbG9jazo6Y3JlYXRlRmxv
YXRpbmdPYmplY3RzKAogICAgIG1fZmxvYXRpbmdPYmplY3RzID0gYWRvcHRQdHIobmV3IEZsb2F0
aW5nT2JqZWN0cyh0aGlzLCBpc0hvcml6b250YWxXcml0aW5nTW9kZSgpKSk7CiB9CiAKLWlubGlu
ZSB2b2lkIFJlbmRlckJsb2NrOjpGbG9hdGluZ09iamVjdHM6OmNsZWFyKCkKKy8vIEZJWE1FOiBS
ZS1pbmxpbmUgdGhpcyBvbmNlIGZsb2F0cyBtb3ZlIGludG8gUmVuZGVyQmxvY2tGbG93Lgordm9p
ZCBSZW5kZXJCbG9jazo6RmxvYXRpbmdPYmplY3RzOjpjbGVhcigpCiB7CiAgICAgLy8gRklYTUU6
IFRoaXMgc2hvdWxkIGNhbGwgZGVsZXRlQWxsVmFsdWVzLCBleGNlcHQgUmVuZGVyQmxvY2s6OmNs
ZWFyRmxvYXRzCiAgICAgLy8gbGlrZSB0byBwbGF5IGZhc3QgYW5kIGxvb3NlIHdpdGggb3duZXJz
aGlwIG9mIHRoZXNlIHBvaW50ZXJzLgpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1Jl
bmRlckJsb2NrLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
ckJsb2NrLmgJKHJldmlzaW9uIDE1NTM3NCkKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9S
ZW5kZXJCbG9jay5oCSh3b3JraW5nIGNvcHkpCkBAIC01ODcsMTcgKzU4Nyw2IEBAIHByb3RlY3Rl
ZDoKIAogICAgIHZpcnR1YWwgdm9pZCBhZGRGb2N1c1JpbmdSZWN0cyhWZWN0b3I8SW50UmVjdD4m
LCBjb25zdCBMYXlvdXRQb2ludCYgYWRkaXRpb25hbE9mZnNldCwgY29uc3QgUmVuZGVyTGF5ZXJN
b2RlbE9iamVjdCogcGFpbnRDb250YWluZXIgPSAwKSBPVkVSUklERTsKIAotI2lmIEVOQUJMRShT
VkcpCi0gICAgLy8gT25seSB1c2VkIGJ5IFJlbmRlclNWR1RleHQsIHdoaWNoIGV4cGxpY2l0ZWx5
IG92ZXJyaWRlcyBSZW5kZXJCbG9jazo6bGF5b3V0QmxvY2soKSwgZG8gTk9UIHVzZSBmb3IgYW55
dGhpbmcgZWxzZS4KLSAgICB2b2lkIGZvcmNlTGF5b3V0SW5saW5lQ2hpbGRyZW4oKQotICAgIHsK
LSAgICAgICAgTGF5b3V0VW5pdCByZXBhaW50TG9naWNhbFRvcCA9IDA7Ci0gICAgICAgIExheW91
dFVuaXQgcmVwYWludExvZ2ljYWxCb3R0b20gPSAwOwotICAgICAgICBjbGVhckZsb2F0cygpOwot
ICAgICAgICBsYXlvdXRJbmxpbmVDaGlsZHJlbih0cnVlLCByZXBhaW50TG9naWNhbFRvcCwgcmVw
YWludExvZ2ljYWxCb3R0b20pOwotICAgIH0KLSNlbmRpZgotCiAgICAgYm9vbCB1cGRhdGVTaGFw
ZXNCZWZvcmVCbG9ja0xheW91dCgpOwogICAgIHZvaWQgdXBkYXRlU2hhcGVzQWZ0ZXJCbG9ja0xh
eW91dChib29sIGhlaWdodENoYW5nZWQgPSBmYWxzZSk7CiAgICAgdm9pZCBjb21wdXRlUmVnaW9u
UmFuZ2VGb3JCb3hDaGlsZChjb25zdCBSZW5kZXJCb3gqKSBjb25zdDsKQEAgLTY1MSw4ICs2NDAs
NiBAQCBwcml2YXRlOgogCiAgICAgdmlydHVhbCB2b2lkIHJlcGFpbnRPdmVyaGFuZ2luZ0Zsb2F0
cyhib29sIHBhaW50QWxsRGVzY2VuZGFudHMpIE9WRVJSSURFIEZJTkFMOwogCi0gICAgdm9pZCBs
YXlvdXRCbG9ja0NoaWxkcmVuKGJvb2wgcmVsYXlvdXRDaGlsZHJlbiwgTGF5b3V0VW5pdCYgbWF4
RmxvYXRMb2dpY2FsQm90dG9tKTsKLSAgICB2b2lkIGxheW91dElubGluZUNoaWxkcmVuKGJvb2wg
cmVsYXlvdXRDaGlsZHJlbiwgTGF5b3V0VW5pdCYgcmVwYWludExvZ2ljYWxUb3AsIExheW91dFVu
aXQmIHJlcGFpbnRMb2dpY2FsQm90dG9tKTsKICAgICBCaWRpUnVuKiBoYW5kbGVUcmFpbGluZ1Nw
YWNlcyhCaWRpUnVuTGlzdDxCaWRpUnVuPiYsIEJpZGlDb250ZXh0Kik7CiAKICAgICB2b2lkIGlu
c2VydEludG9UcmFja2VkUmVuZGVyZXJNYXBzKFJlbmRlckJveCogZGVzY2VuZGFudCwgVHJhY2tl
ZERlc2NlbmRhbnRzTWFwKiYsIFRyYWNrZWRDb250YWluZXJNYXAqJik7CkBAIC05MjYsOCArOTEz
LDYgQEAgcHJpdmF0ZToKICAgICAvLyBSZXR1cm5zIHRydWUgaWYgYW5kIG9ubHkgaWYgaXQgaGFz
IHBvc2l0aW9uZWQgYW55IGZsb2F0cy4KICAgICBib29sIHBvc2l0aW9uTmV3RmxvYXRzKCk7CiAK
LSAgICB2b2lkIGNsZWFyRmxvYXRzKCk7Ci0KICAgICBMYXlvdXRVbml0IGdldENsZWFyRGVsdGEo
UmVuZGVyQm94KiBjaGlsZCwgTGF5b3V0VW5pdCB5UG9zKTsKIAogICAgIHZpcnR1YWwgYm9vbCBh
dm9pZHNGbG9hdHMoKSBjb25zdDsKQEAgLTExOTEsNiArMTE3NiwxMCBAQCBwdWJsaWM6CiAgICAg
dmlydHVhbCBMYXlvdXRVbml0IG9mZnNldEZyb21Mb2dpY2FsVG9wT2ZGaXJzdFBhZ2UoKSBjb25z
dDsKICAgICBSZW5kZXJSZWdpb24qIHJlZ2lvbkF0QmxvY2tPZmZzZXQoTGF5b3V0VW5pdCkgY29u
c3Q7CiAKKyAgICAvLyBGSVhNRTogVGhpcyBpcyB0ZW1wb3JhcnkgdG8gYWxsb3cgdXMgdG8gbW92
ZSBjb2RlIGZyb20gUmVuZGVyQmxvY2sgaW50byBSZW5kZXJCbG9ja0Zsb3cgdGhhdCBhY2Nlc3Nl
cyBtZW1iZXIgdmFyaWFibGVzIHRoYXQgd2UgaGF2ZW4ndCBtb3ZlZCBvdXQgb2YKKyAgICAvLyBS
ZW5kZXJCbG9jayB5ZXQuCisgICAgZnJpZW5kIGNsYXNzIFJlbmRlckJsb2NrRmxvdzsKKwogcHJv
dGVjdGVkOgogICAgIHN0cnVjdCBGbG9hdGluZ09iamVjdEhhc2hGdW5jdGlvbnMgewogICAgICAg
ICBzdGF0aWMgdW5zaWduZWQgaGFzaChGbG9hdGluZ09iamVjdCoga2V5KSB7IHJldHVybiBEZWZh
dWx0SGFzaDxSZW5kZXJCb3gqPjo6SGFzaDo6aGFzaChrZXktPnJlbmRlcmVyKCkpOyB9CkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2tGbG93LmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2tGbG93LmNwcAkocmV2aXNp
b24gMTU1Mzc0KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJsb2NrRmxvdy5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTI0LDYgKzI0LDEzIEBACiAjaW5jbHVkZSAiY29uZmlnLmgi
CiAjaW5jbHVkZSAiUmVuZGVyQmxvY2tGbG93LmgiCiAKKyNpbmNsdWRlICJMYXlvdXRSZXBhaW50
ZXIuaCIKKyNpbmNsdWRlICJSZW5kZXJGbG93VGhyZWFkLmgiCisjaW5jbHVkZSAiUmVuZGVyTGF5
ZXIuaCIKKyNpbmNsdWRlICJSZW5kZXJWaWV3LmgiCisKK3VzaW5nIG5hbWVzcGFjZSBzdGQ7CisK
IG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogUmVuZGVyQmxvY2tGbG93OjpSZW5kZXJCbG9ja0Zsb3co
RWxlbWVudCogZWxlbWVudCkKQEAgLTM1LDQgKzQyLDM3MiBAQCBSZW5kZXJCbG9ja0Zsb3c6On5S
ZW5kZXJCbG9ja0Zsb3coKQogewogfQogCit2b2lkIFJlbmRlckJsb2NrRmxvdzo6Y2xlYXJGbG9h
dHMoKQoreworICAgIGlmIChtX2Zsb2F0aW5nT2JqZWN0cykKKyAgICAgICAgbV9mbG9hdGluZ09i
amVjdHMtPnNldEhvcml6b250YWxXcml0aW5nTW9kZShpc0hvcml6b250YWxXcml0aW5nTW9kZSgp
KTsKKworICAgIEhhc2hTZXQ8UmVuZGVyQm94Kj4gb2xkSW50cnVkaW5nRmxvYXRTZXQ7CisgICAg
aWYgKCFjaGlsZHJlbklubGluZSgpICYmIG1fZmxvYXRpbmdPYmplY3RzKSB7CisgICAgICAgIGNv
bnN0IEZsb2F0aW5nT2JqZWN0U2V0JiBmbG9hdGluZ09iamVjdFNldCA9IG1fZmxvYXRpbmdPYmpl
Y3RzLT5zZXQoKTsKKyAgICAgICAgRmxvYXRpbmdPYmplY3RTZXRJdGVyYXRvciBlbmQgPSBmbG9h
dGluZ09iamVjdFNldC5lbmQoKTsKKyAgICAgICAgZm9yIChGbG9hdGluZ09iamVjdFNldEl0ZXJh
dG9yIGl0ID0gZmxvYXRpbmdPYmplY3RTZXQuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7Cisg
ICAgICAgICAgICBGbG9hdGluZ09iamVjdCogZmxvYXRpbmdPYmplY3QgPSAqaXQ7CisgICAgICAg
ICAgICBpZiAoIWZsb2F0aW5nT2JqZWN0LT5pc0Rlc2NlbmRhbnQoKSkKKyAgICAgICAgICAgICAg
ICBvbGRJbnRydWRpbmdGbG9hdFNldC5hZGQoZmxvYXRpbmdPYmplY3QtPnJlbmRlcmVyKCkpOwor
ICAgICAgICB9CisgICAgfQorCisgICAgLy8gSW5saW5lIGJsb2NrcyBhcmUgY292ZXJlZCBieSB0
aGUgaXNSZXBsYWNlZCgpIGNoZWNrIGluIHRoZSBhdm9pZEZsb2F0cyBtZXRob2QuCisgICAgaWYg
KGF2b2lkc0Zsb2F0cygpIHx8IGlzUm9vdCgpIHx8IGlzUmVuZGVyVmlldygpIHx8IGlzRmxvYXRp
bmdPck91dE9mRmxvd1Bvc2l0aW9uZWQoKSB8fCBpc1RhYmxlQ2VsbCgpKSB7CisgICAgICAgIGlm
IChtX2Zsb2F0aW5nT2JqZWN0cykgeworICAgICAgICAgICAgZGVsZXRlQWxsVmFsdWVzKG1fZmxv
YXRpbmdPYmplY3RzLT5zZXQoKSk7CisgICAgICAgICAgICBtX2Zsb2F0aW5nT2JqZWN0cy0+Y2xl
YXIoKTsKKyAgICAgICAgfQorICAgICAgICBpZiAoIW9sZEludHJ1ZGluZ0Zsb2F0U2V0LmlzRW1w
dHkoKSkKKyAgICAgICAgICAgIG1hcmtBbGxEZXNjZW5kYW50c1dpdGhGbG9hdHNGb3JMYXlvdXQo
KTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIHR5cGVkZWYgSGFzaE1hcDxSZW5kZXJP
YmplY3QqLCBGbG9hdGluZ09iamVjdCo+IFJlbmRlcmVyVG9GbG9hdEluZm9NYXA7CisgICAgUmVu
ZGVyZXJUb0Zsb2F0SW5mb01hcCBmbG9hdE1hcDsKKworICAgIGlmIChtX2Zsb2F0aW5nT2JqZWN0
cykgeworICAgICAgICBjb25zdCBGbG9hdGluZ09iamVjdFNldCYgZmxvYXRpbmdPYmplY3RTZXQg
PSBtX2Zsb2F0aW5nT2JqZWN0cy0+c2V0KCk7CisgICAgICAgIGlmIChjaGlsZHJlbklubGluZSgp
KSB7CisgICAgICAgICAgICBGbG9hdGluZ09iamVjdFNldEl0ZXJhdG9yIGVuZCA9IGZsb2F0aW5n
T2JqZWN0U2V0LmVuZCgpOworICAgICAgICAgICAgZm9yIChGbG9hdGluZ09iamVjdFNldEl0ZXJh
dG9yIGl0ID0gZmxvYXRpbmdPYmplY3RTZXQuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7Cisg
ICAgICAgICAgICAgICAgRmxvYXRpbmdPYmplY3QqIGYgPSAqaXQ7CisgICAgICAgICAgICAgICAg
ZmxvYXRNYXAuYWRkKGYtPnJlbmRlcmVyKCksIGYpOworICAgICAgICAgICAgfQorICAgICAgICB9
IGVsc2UKKyAgICAgICAgICAgIGRlbGV0ZUFsbFZhbHVlcyhmbG9hdGluZ09iamVjdFNldCk7Cisg
ICAgICAgIG1fZmxvYXRpbmdPYmplY3RzLT5jbGVhcigpOworICAgIH0KKworICAgIC8vIFdlIHNo
b3VsZCBub3QgcHJvY2VzcyBmbG9hdHMgaWYgdGhlIHBhcmVudCBub2RlIGlzIG5vdCBhIFJlbmRl
ckJsb2NrLiBPdGhlcndpc2UsIHdlIHdpbGwgYWRkIAorICAgIC8vIGZsb2F0cyBpbiBhbiBpbnZh
bGlkIGNvbnRleHQuIFRoaXMgd2lsbCBjYXVzZSBhIGNyYXNoIGFyaXNpbmcgZnJvbSBhIGJhZCBj
YXN0IG9uIHRoZSBwYXJlbnQuCisgICAgLy8gU2VlIDxyZGFyOi8vcHJvYmxlbS84MDQ5NzUzPiwg
d2hlcmUgZmxvYXQgcHJvcGVydHkgaXMgYXBwbGllZCBvbiBhIHRleHQgbm9kZSBpbiBhIFNWRy4K
KyAgICBpZiAoIXBhcmVudCgpIHx8ICFwYXJlbnQoKS0+aXNSZW5kZXJCbG9jaygpKQorICAgICAg
ICByZXR1cm47CisKKyAgICAvLyBBdHRlbXB0IHRvIGxvY2F0ZSBhIHByZXZpb3VzIHNpYmxpbmcg
d2l0aCBvdmVyaGFuZ2luZyBmbG9hdHMuIFdlIHNraXAgYW55IGVsZW1lbnRzIHRoYXQgYXJlCisg
ICAgLy8gb3V0IG9mIGZsb3cgKGxpa2UgZmxvYXRpbmcvcG9zaXRpb25lZCBlbGVtZW50cyksIGFu
ZCB3ZSBhbHNvIHNraXAgb3ZlciBhbnkgb2JqZWN0cyB0aGF0IG1heSBoYXZlIHNoaWZ0ZWQKKyAg
ICAvLyB0byBhdm9pZCBmbG9hdHMuCisgICAgUmVuZGVyQmxvY2sqIHBhcmVudEJsb2NrID0gdG9S
ZW5kZXJCbG9jayhwYXJlbnQoKSk7CisgICAgYm9vbCBwYXJlbnRIYXNGbG9hdHMgPSBmYWxzZTsK
KyAgICBSZW5kZXJPYmplY3QqIHByZXYgPSBwcmV2aW91c1NpYmxpbmcoKTsKKyAgICB3aGlsZSAo
cHJldiAmJiAocHJldi0+aXNGbG9hdGluZ09yT3V0T2ZGbG93UG9zaXRpb25lZCgpIHx8ICFwcmV2
LT5pc0JveCgpIHx8ICFwcmV2LT5pc1JlbmRlckJsb2NrKCkgfHwgdG9SZW5kZXJCbG9jayhwcmV2
KS0+YXZvaWRzRmxvYXRzKCkpKSB7CisgICAgICAgIGlmIChwcmV2LT5pc0Zsb2F0aW5nKCkpCisg
ICAgICAgICAgICBwYXJlbnRIYXNGbG9hdHMgPSB0cnVlOworICAgICAgICBwcmV2ID0gcHJldi0+
cHJldmlvdXNTaWJsaW5nKCk7CisgICAgfQorCisgICAgLy8gRmlyc3QgYWRkIGluIGZsb2F0cyBm
cm9tIHRoZSBwYXJlbnQuCisgICAgTGF5b3V0VW5pdCBsb2dpY2FsVG9wT2Zmc2V0ID0gbG9naWNh
bFRvcCgpOworICAgIGlmIChwYXJlbnRIYXNGbG9hdHMpCisgICAgICAgIGFkZEludHJ1ZGluZ0Zs
b2F0cyhwYXJlbnRCbG9jaywgcGFyZW50QmxvY2stPmxvZ2ljYWxMZWZ0T2Zmc2V0Rm9yQ29udGVu
dCgpLCBsb2dpY2FsVG9wT2Zmc2V0KTsKKyAgICAKKyAgICBMYXlvdXRVbml0IGxvZ2ljYWxMZWZ0
T2Zmc2V0ID0gMDsKKyAgICBpZiAocHJldikKKyAgICAgICAgbG9naWNhbFRvcE9mZnNldCAtPSB0
b1JlbmRlckJveChwcmV2KS0+bG9naWNhbFRvcCgpOworICAgIGVsc2UgeworICAgICAgICBwcmV2
ID0gcGFyZW50QmxvY2s7CisgICAgICAgIGxvZ2ljYWxMZWZ0T2Zmc2V0ICs9IHBhcmVudEJsb2Nr
LT5sb2dpY2FsTGVmdE9mZnNldEZvckNvbnRlbnQoKTsKKyAgICB9CisKKyAgICAvLyBBZGQgb3Zl
cmhhbmdpbmcgZmxvYXRzIGZyb20gdGhlIHByZXZpb3VzIFJlbmRlckJsb2NrLCBidXQgb25seSBp
ZiBpdCBoYXMgYSBmbG9hdCB0aGF0IGludHJ1ZGVzIGludG8gb3VyIHNwYWNlLiAgICAKKyAgICBS
ZW5kZXJCbG9jayogYmxvY2sgPSB0b1JlbmRlckJsb2NrKHByZXYpOworICAgIGlmIChibG9jay0+
bV9mbG9hdGluZ09iamVjdHMgJiYgYmxvY2stPmxvd2VzdEZsb2F0TG9naWNhbEJvdHRvbSgpID4g
bG9naWNhbFRvcE9mZnNldCkKKyAgICAgICAgYWRkSW50cnVkaW5nRmxvYXRzKGJsb2NrLCBsb2dp
Y2FsTGVmdE9mZnNldCwgbG9naWNhbFRvcE9mZnNldCk7CisKKyAgICBpZiAoY2hpbGRyZW5Jbmxp
bmUoKSkgeworICAgICAgICBMYXlvdXRVbml0IGNoYW5nZUxvZ2ljYWxUb3AgPSBMYXlvdXRVbml0
OjptYXgoKTsKKyAgICAgICAgTGF5b3V0VW5pdCBjaGFuZ2VMb2dpY2FsQm90dG9tID0gTGF5b3V0
VW5pdDo6bWluKCk7CisgICAgICAgIGlmIChtX2Zsb2F0aW5nT2JqZWN0cykgeworICAgICAgICAg
ICAgY29uc3QgRmxvYXRpbmdPYmplY3RTZXQmIGZsb2F0aW5nT2JqZWN0U2V0ID0gbV9mbG9hdGlu
Z09iamVjdHMtPnNldCgpOworICAgICAgICAgICAgRmxvYXRpbmdPYmplY3RTZXRJdGVyYXRvciBl
bmQgPSBmbG9hdGluZ09iamVjdFNldC5lbmQoKTsKKyAgICAgICAgICAgIGZvciAoRmxvYXRpbmdP
YmplY3RTZXRJdGVyYXRvciBpdCA9IGZsb2F0aW5nT2JqZWN0U2V0LmJlZ2luKCk7IGl0ICE9IGVu
ZDsgKytpdCkgeworICAgICAgICAgICAgICAgIEZsb2F0aW5nT2JqZWN0KiBmID0gKml0OworICAg
ICAgICAgICAgICAgIEZsb2F0aW5nT2JqZWN0KiBvbGRGbG9hdGluZ09iamVjdCA9IGZsb2F0TWFw
LmdldChmLT5yZW5kZXJlcigpKTsKKyAgICAgICAgICAgICAgICBMYXlvdXRVbml0IGxvZ2ljYWxC
b3R0b20gPSBmLT5sb2dpY2FsQm90dG9tKGlzSG9yaXpvbnRhbFdyaXRpbmdNb2RlKCkpOworICAg
ICAgICAgICAgICAgIGlmIChvbGRGbG9hdGluZ09iamVjdCkgeworICAgICAgICAgICAgICAgICAg
ICBMYXlvdXRVbml0IG9sZExvZ2ljYWxCb3R0b20gPSBvbGRGbG9hdGluZ09iamVjdC0+bG9naWNh
bEJvdHRvbShpc0hvcml6b250YWxXcml0aW5nTW9kZSgpKTsKKyAgICAgICAgICAgICAgICAgICAg
aWYgKGYtPmxvZ2ljYWxXaWR0aChpc0hvcml6b250YWxXcml0aW5nTW9kZSgpKSAhPSBvbGRGbG9h
dGluZ09iamVjdC0+bG9naWNhbFdpZHRoKGlzSG9yaXpvbnRhbFdyaXRpbmdNb2RlKCkpIHx8IGYt
PmxvZ2ljYWxMZWZ0KGlzSG9yaXpvbnRhbFdyaXRpbmdNb2RlKCkpICE9IG9sZEZsb2F0aW5nT2Jq
ZWN0LT5sb2dpY2FsTGVmdChpc0hvcml6b250YWxXcml0aW5nTW9kZSgpKSkgeworICAgICAgICAg
ICAgICAgICAgICAgICAgY2hhbmdlTG9naWNhbFRvcCA9IDA7CisgICAgICAgICAgICAgICAgICAg
ICAgICBjaGFuZ2VMb2dpY2FsQm90dG9tID0gbWF4KGNoYW5nZUxvZ2ljYWxCb3R0b20sIG1heChs
b2dpY2FsQm90dG9tLCBvbGRMb2dpY2FsQm90dG9tKSk7CisgICAgICAgICAgICAgICAgICAgIH0g
ZWxzZSB7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAobG9naWNhbEJvdHRvbSAhPSBvbGRM
b2dpY2FsQm90dG9tKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhbmdlTG9naWNh
bFRvcCA9IG1pbihjaGFuZ2VMb2dpY2FsVG9wLCBtaW4obG9naWNhbEJvdHRvbSwgb2xkTG9naWNh
bEJvdHRvbSkpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYW5nZUxvZ2ljYWxCb3R0
b20gPSBtYXgoY2hhbmdlTG9naWNhbEJvdHRvbSwgbWF4KGxvZ2ljYWxCb3R0b20sIG9sZExvZ2lj
YWxCb3R0b20pKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAg
ICAgICAgIExheW91dFVuaXQgbG9naWNhbFRvcCA9IGYtPmxvZ2ljYWxUb3AoaXNIb3Jpem9udGFs
V3JpdGluZ01vZGUoKSk7CisgICAgICAgICAgICAgICAgICAgICAgICBMYXlvdXRVbml0IG9sZExv
Z2ljYWxUb3AgPSBvbGRGbG9hdGluZ09iamVjdC0+bG9naWNhbFRvcChpc0hvcml6b250YWxXcml0
aW5nTW9kZSgpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChsb2dpY2FsVG9wICE9IG9s
ZExvZ2ljYWxUb3ApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFuZ2VMb2dpY2Fs
VG9wID0gbWluKGNoYW5nZUxvZ2ljYWxUb3AsIG1pbihsb2dpY2FsVG9wLCBvbGRMb2dpY2FsVG9w
KSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhbmdlTG9naWNhbEJvdHRvbSA9IG1h
eChjaGFuZ2VMb2dpY2FsQm90dG9tLCBtYXgobG9naWNhbFRvcCwgb2xkTG9naWNhbFRvcCkpOwor
ICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICB9CisKKyAgICAg
ICAgICAgICAgICAgICAgZmxvYXRNYXAucmVtb3ZlKGYtPnJlbmRlcmVyKCkpOworICAgICAgICAg
ICAgICAgICAgICBpZiAob2xkRmxvYXRpbmdPYmplY3QtPm9yaWdpbmF0aW5nTGluZSgpICYmICFz
ZWxmTmVlZHNMYXlvdXQoKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgQVNTRVJUKCZvbGRG
bG9hdGluZ09iamVjdC0+b3JpZ2luYXRpbmdMaW5lKCktPnJlbmRlcmVyKCkgPT0gdGhpcyk7Cisg
ICAgICAgICAgICAgICAgICAgICAgICBvbGRGbG9hdGluZ09iamVjdC0+b3JpZ2luYXRpbmdMaW5l
KCktPm1hcmtEaXJ0eSgpOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAg
ICAgIGRlbGV0ZSBvbGRGbG9hdGluZ09iamVjdDsKKyAgICAgICAgICAgICAgICB9IGVsc2Ugewor
ICAgICAgICAgICAgICAgICAgICBjaGFuZ2VMb2dpY2FsVG9wID0gMDsKKyAgICAgICAgICAgICAg
ICAgICAgY2hhbmdlTG9naWNhbEJvdHRvbSA9IG1heChjaGFuZ2VMb2dpY2FsQm90dG9tLCBsb2dp
Y2FsQm90dG9tKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0K
KworICAgICAgICBSZW5kZXJlclRvRmxvYXRJbmZvTWFwOjppdGVyYXRvciBlbmQgPSBmbG9hdE1h
cC5lbmQoKTsKKyAgICAgICAgZm9yIChSZW5kZXJlclRvRmxvYXRJbmZvTWFwOjppdGVyYXRvciBp
dCA9IGZsb2F0TWFwLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkgeworICAgICAgICAgICAgRmxv
YXRpbmdPYmplY3QqIGZsb2F0aW5nT2JqZWN0ID0gKCppdCkudmFsdWU7CisgICAgICAgICAgICBp
ZiAoIWZsb2F0aW5nT2JqZWN0LT5pc0Rlc2NlbmRhbnQoKSkgeworICAgICAgICAgICAgICAgIGNo
YW5nZUxvZ2ljYWxUb3AgPSAwOworICAgICAgICAgICAgICAgIGNoYW5nZUxvZ2ljYWxCb3R0b20g
PSBtYXgoY2hhbmdlTG9naWNhbEJvdHRvbSwgZmxvYXRpbmdPYmplY3QtPmxvZ2ljYWxCb3R0b20o
aXNIb3Jpem9udGFsV3JpdGluZ01vZGUoKSkpOworICAgICAgICAgICAgfQorICAgICAgICB9Cisg
ICAgICAgIGRlbGV0ZUFsbFZhbHVlcyhmbG9hdE1hcCk7CisKKyAgICAgICAgbWFya0xpbmVzRGly
dHlJbkJsb2NrUmFuZ2UoY2hhbmdlTG9naWNhbFRvcCwgY2hhbmdlTG9naWNhbEJvdHRvbSk7Cisg
ICAgfSBlbHNlIGlmICghb2xkSW50cnVkaW5nRmxvYXRTZXQuaXNFbXB0eSgpKSB7CisgICAgICAg
IC8vIElmIHRoZXJlIGFyZSBwcmV2aW91c2x5IGludHJ1ZGluZyBmbG9hdHMgdGhhdCBubyBsb25n
ZXIgaW50cnVkZSwgdGhlbiBjaGlsZHJlbiB3aXRoIGZsb2F0cworICAgICAgICAvLyBzaG91bGQg
YWxzbyBnZXQgbGF5b3V0IGJlY2F1c2UgdGhleSBtaWdodCBuZWVkIHRoZWlyIGZsb2F0aW5nIG9i
amVjdCBsaXN0cyBjbGVhcmVkLgorICAgICAgICBpZiAobV9mbG9hdGluZ09iamVjdHMtPnNldCgp
LnNpemUoKSA8IG9sZEludHJ1ZGluZ0Zsb2F0U2V0LnNpemUoKSkKKyAgICAgICAgICAgIG1hcmtB
bGxEZXNjZW5kYW50c1dpdGhGbG9hdHNGb3JMYXlvdXQoKTsKKyAgICAgICAgZWxzZSB7CisgICAg
ICAgICAgICBjb25zdCBGbG9hdGluZ09iamVjdFNldCYgZmxvYXRpbmdPYmplY3RTZXQgPSBtX2Zs
b2F0aW5nT2JqZWN0cy0+c2V0KCk7CisgICAgICAgICAgICBGbG9hdGluZ09iamVjdFNldEl0ZXJh
dG9yIGVuZCA9IGZsb2F0aW5nT2JqZWN0U2V0LmVuZCgpOworICAgICAgICAgICAgZm9yIChGbG9h
dGluZ09iamVjdFNldEl0ZXJhdG9yIGl0ID0gZmxvYXRpbmdPYmplY3RTZXQuYmVnaW4oKTsgaXQg
IT0gZW5kICYmICFvbGRJbnRydWRpbmdGbG9hdFNldC5pc0VtcHR5KCk7ICsraXQpCisgICAgICAg
ICAgICAgICAgb2xkSW50cnVkaW5nRmxvYXRTZXQucmVtb3ZlKCgqaXQpLT5yZW5kZXJlcigpKTsK
KyAgICAgICAgICAgIGlmICghb2xkSW50cnVkaW5nRmxvYXRTZXQuaXNFbXB0eSgpKQorICAgICAg
ICAgICAgICAgIG1hcmtBbGxEZXNjZW5kYW50c1dpdGhGbG9hdHNGb3JMYXlvdXQoKTsKKyAgICAg
ICAgfQorICAgIH0KK30KKwordm9pZCBSZW5kZXJCbG9ja0Zsb3c6OmxheW91dEJsb2NrKGJvb2wg
cmVsYXlvdXRDaGlsZHJlbiwgTGF5b3V0VW5pdCBwYWdlTG9naWNhbEhlaWdodCkKK3sKKyAgICBB
U1NFUlQobmVlZHNMYXlvdXQoKSk7CisKKyAgICBpZiAoIXJlbGF5b3V0Q2hpbGRyZW4gJiYgc2lt
cGxpZmllZExheW91dCgpKQorICAgICAgICByZXR1cm47CisKKyAgICBMYXlvdXRSZXBhaW50ZXIg
cmVwYWludGVyKCp0aGlzLCBjaGVja0ZvclJlcGFpbnREdXJpbmdMYXlvdXQoKSk7CisKKyAgICBp
ZiAodXBkYXRlTG9naWNhbFdpZHRoQW5kQ29sdW1uV2lkdGgoKSkKKyAgICAgICAgcmVsYXlvdXRD
aGlsZHJlbiA9IHRydWU7CisKKyAgICBjbGVhckZsb2F0cygpOworCisgICAgTGF5b3V0VW5pdCBw
cmV2aW91c0hlaWdodCA9IGxvZ2ljYWxIZWlnaHQoKTsKKyAgICAvLyBGSVhNRTogc2hvdWxkIHRo
aXMgc3RhcnQgb3V0IGFzIGJvcmRlckFuZFBhZGRpbmdMb2dpY2FsSGVpZ2h0KCkgKyBzY3JvbGxi
YXJMb2dpY2FsSGVpZ2h0KCksCisgICAgLy8gZm9yIGNvbnNpc3RlbmN5IHdpdGggb3RoZXIgcmVu
ZGVyIGNsYXNzZXM/CisgICAgc2V0TG9naWNhbEhlaWdodCgwKTsKKworICAgIGJvb2wgcGFnZUxv
Z2ljYWxIZWlnaHRDaGFuZ2VkID0gZmFsc2U7CisgICAgYm9vbCBoYXNTcGVjaWZpZWRQYWdlTG9n
aWNhbEhlaWdodCA9IGZhbHNlOworICAgIGNoZWNrRm9yUGFnaW5hdGlvbkxvZ2ljYWxIZWlnaHRD
aGFuZ2UocGFnZUxvZ2ljYWxIZWlnaHQsIHBhZ2VMb2dpY2FsSGVpZ2h0Q2hhbmdlZCwgaGFzU3Bl
Y2lmaWVkUGFnZUxvZ2ljYWxIZWlnaHQpOworCisgICAgUmVuZGVyU3R5bGUqIHN0eWxlVG9Vc2Ug
PSBzdHlsZSgpOworICAgIExheW91dFN0YXRlTWFpbnRhaW5lciBzdGF0ZVB1c2hlcigmdmlldygp
LCB0aGlzLCBsb2NhdGlvbk9mZnNldCgpLCBoYXNDb2x1bW5zKCkgfHwgaGFzVHJhbnNmb3JtKCkg
fHwgaGFzUmVmbGVjdGlvbigpIHx8IHN0eWxlVG9Vc2UtPmlzRmxpcHBlZEJsb2Nrc1dyaXRpbmdN
b2RlKCksIHBhZ2VMb2dpY2FsSGVpZ2h0LCBwYWdlTG9naWNhbEhlaWdodENoYW5nZWQsIGNvbHVt
bkluZm8oKSk7CisKKyAgICAvLyBSZWdpb25zIGNoYW5naW5nIHdpZHRocyBjYW4gZm9yY2UgdXMg
dG8gcmVsYXlvdXQgb3VyIGNoaWxkcmVuLgorICAgIFJlbmRlckZsb3dUaHJlYWQqIGZsb3dUaHJl
YWQgPSBmbG93VGhyZWFkQ29udGFpbmluZ0Jsb2NrKCk7CisgICAgaWYgKGxvZ2ljYWxXaWR0aENo
YW5nZWRJblJlZ2lvbnMoZmxvd1RocmVhZCkpCisgICAgICAgIHJlbGF5b3V0Q2hpbGRyZW4gPSB0
cnVlOworICAgIGlmICh1cGRhdGVTaGFwZXNCZWZvcmVCbG9ja0xheW91dCgpKQorICAgICAgICBy
ZWxheW91dENoaWxkcmVuID0gdHJ1ZTsKKworICAgIC8vIFdlIHVzZSBmb3VyIHZhbHVlcywgbWF4
VG9wUG9zLCBtYXhUb3BOZWcsIG1heEJvdHRvbVBvcywgYW5kIG1heEJvdHRvbU5lZywgdG8gdHJh
Y2sKKyAgICAvLyBvdXIgY3VycmVudCBtYXhpbWFsIHBvc2l0aXZlIGFuZCBuZWdhdGl2ZSBtYXJn
aW5zLiBUaGVzZSB2YWx1ZXMgYXJlIHVzZWQgd2hlbiB3ZQorICAgIC8vIGFyZSBjb2xsYXBzZWQg
d2l0aCBhZGphY2VudCBibG9ja3MsIHNvIGZvciBleGFtcGxlLCBpZiB5b3UgaGF2ZSBibG9jayBB
IGFuZCBCCisgICAgLy8gY29sbGFwc2luZyB0b2dldGhlciwgdGhlbiB5b3UnZCB0YWtlIHRoZSBt
YXhpbWFsIHBvc2l0aXZlIG1hcmdpbiBmcm9tIGJvdGggQSBhbmQgQgorICAgIC8vIGFuZCBzdWJ0
cmFjdCBpdCBmcm9tIHRoZSBtYXhpbWFsIG5lZ2F0aXZlIG1hcmdpbiBmcm9tIGJvdGggQSBhbmQg
QiB0byBnZXQgdGhlCisgICAgLy8gdHJ1ZSBjb2xsYXBzZWQgbWFyZ2luLiBUaGlzIGFsZ29yaXRo
bSBpcyByZWN1cnNpdmUsIHNvIHdoZW4gd2UgZmluaXNoIGxheW91dCgpCisgICAgLy8gb3VyIGJs
b2NrIGtub3dzIGl0cyBjdXJyZW50IG1heGltYWwgcG9zaXRpdmUvbmVnYXRpdmUgdmFsdWVzLgor
ICAgIC8vCisgICAgLy8gU3RhcnQgb3V0IGJ5IHNldHRpbmcgb3VyIG1hcmdpbiB2YWx1ZXMgdG8g
b3VyIGN1cnJlbnQgbWFyZ2lucy4gVGFibGUgY2VsbHMgaGF2ZQorICAgIC8vIG5vIG1hcmdpbnMs
IHNvIHdlIGRvbid0IGZpbGwgaW4gdGhlIHZhbHVlcyBmb3IgdGFibGUgY2VsbHMuCisgICAgYm9v
bCBpc0NlbGwgPSBpc1RhYmxlQ2VsbCgpOworICAgIGlmICghaXNDZWxsKSB7CisgICAgICAgIGlu
aXRNYXhNYXJnaW5WYWx1ZXMoKTsKKyAgICAgICAgCisgICAgICAgIHNldEhhc01hcmdpbkJlZm9y
ZVF1aXJrKHN0eWxlVG9Vc2UtPmhhc01hcmdpbkJlZm9yZVF1aXJrKCkpOworICAgICAgICBzZXRI
YXNNYXJnaW5BZnRlclF1aXJrKHN0eWxlVG9Vc2UtPmhhc01hcmdpbkFmdGVyUXVpcmsoKSk7Cisg
ICAgICAgIHNldFBhZ2luYXRpb25TdHJ1dCgwKTsKKyAgICB9CisKKyAgICBMYXlvdXRVbml0IHJl
cGFpbnRMb2dpY2FsVG9wID0gMDsKKyAgICBMYXlvdXRVbml0IHJlcGFpbnRMb2dpY2FsQm90dG9t
ID0gMDsKKyAgICBMYXlvdXRVbml0IG1heEZsb2F0TG9naWNhbEJvdHRvbSA9IDA7CisgICAgaWYg
KCFmaXJzdENoaWxkKCkgJiYgIWlzQW5vbnltb3VzQmxvY2soKSkKKyAgICAgICAgc2V0Q2hpbGRy
ZW5JbmxpbmUodHJ1ZSk7CisgICAgaWYgKGNoaWxkcmVuSW5saW5lKCkpCisgICAgICAgIGxheW91
dElubGluZUNoaWxkcmVuKHJlbGF5b3V0Q2hpbGRyZW4sIHJlcGFpbnRMb2dpY2FsVG9wLCByZXBh
aW50TG9naWNhbEJvdHRvbSk7CisgICAgZWxzZQorICAgICAgICBsYXlvdXRCbG9ja0NoaWxkcmVu
KHJlbGF5b3V0Q2hpbGRyZW4sIG1heEZsb2F0TG9naWNhbEJvdHRvbSk7CisKKyAgICAvLyBFeHBh
bmQgb3VyIGludHJpbnNpYyBoZWlnaHQgdG8gZW5jb21wYXNzIGZsb2F0cy4KKyAgICBMYXlvdXRV
bml0IHRvQWRkID0gYm9yZGVyQW5kUGFkZGluZ0FmdGVyKCkgKyBzY3JvbGxiYXJMb2dpY2FsSGVp
Z2h0KCk7CisgICAgaWYgKGxvd2VzdEZsb2F0TG9naWNhbEJvdHRvbSgpID4gKGxvZ2ljYWxIZWln
aHQoKSAtIHRvQWRkKSAmJiBleHBhbmRzVG9FbmNsb3NlT3ZlcmhhbmdpbmdGbG9hdHMoKSkKKyAg
ICAgICAgc2V0TG9naWNhbEhlaWdodChsb3dlc3RGbG9hdExvZ2ljYWxCb3R0b20oKSArIHRvQWRk
KTsKKyAgICAKKyAgICBpZiAocmVsYXlvdXRGb3JQYWdpbmF0aW9uKGhhc1NwZWNpZmllZFBhZ2VM
b2dpY2FsSGVpZ2h0LCBwYWdlTG9naWNhbEhlaWdodCwgc3RhdGVQdXNoZXIpIHx8IHJlbGF5b3V0
VG9Bdm9pZFdpZG93cyhzdGF0ZVB1c2hlcikpIHsKKyAgICAgICAgQVNTRVJUKCFzaG91bGRCcmVh
a0F0TGluZVRvQXZvaWRXaWRvdygpKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIC8v
IENhbGN1bGF0ZSBvdXIgbmV3IGhlaWdodC4KKyAgICBMYXlvdXRVbml0IG9sZEhlaWdodCA9IGxv
Z2ljYWxIZWlnaHQoKTsKKyAgICBMYXlvdXRVbml0IG9sZENsaWVudEFmdGVyRWRnZSA9IGNsaWVu
dExvZ2ljYWxCb3R0b20oKTsKKworICAgIC8vIEJlZm9yZSB1cGRhdGluZyB0aGUgZmluYWwgc2l6
ZSBvZiB0aGUgZmxvdyB0aHJlYWQgbWFrZSBzdXJlIGEgZm9yY2VkIGJyZWFrIGlzIGFwcGxpZWQg
YWZ0ZXIgdGhlIGNvbnRlbnQuCisgICAgLy8gVGhpcyBlbnN1cmVzIHRoZSBzaXplIGluZm9ybWF0
aW9uIGlzIGNvcnJlY3RseSBjb21wdXRlZCBmb3IgdGhlIGxhc3QgYXV0by1oZWlnaHQgcmVnaW9u
IHJlY2VpdmluZyBjb250ZW50LgorICAgIGlmIChpc1JlbmRlckZsb3dUaHJlYWQoKSkKKyAgICAg
ICAgdG9SZW5kZXJGbG93VGhyZWFkKHRoaXMpLT5hcHBseUJyZWFrQWZ0ZXJDb250ZW50KG9sZENs
aWVudEFmdGVyRWRnZSk7CisKKyAgICB1cGRhdGVMb2dpY2FsSGVpZ2h0KCk7CisgICAgTGF5b3V0
VW5pdCBuZXdIZWlnaHQgPSBsb2dpY2FsSGVpZ2h0KCk7CisgICAgaWYgKG9sZEhlaWdodCAhPSBu
ZXdIZWlnaHQpIHsKKyAgICAgICAgaWYgKG9sZEhlaWdodCA+IG5ld0hlaWdodCAmJiBtYXhGbG9h
dExvZ2ljYWxCb3R0b20gPiBuZXdIZWlnaHQgJiYgIWNoaWxkcmVuSW5saW5lKCkpIHsKKyAgICAg
ICAgICAgIC8vIE9uZSBvZiBvdXIgY2hpbGRyZW4ncyBmbG9hdHMgbWF5IGhhdmUgYmVjb21lIGFu
IG92ZXJoYW5naW5nIGZsb2F0IGZvciB1cy4gV2UgbmVlZCB0byBsb29rIGZvciBpdC4KKyAgICAg
ICAgICAgIGZvciAoUmVuZGVyT2JqZWN0KiBjaGlsZCA9IGZpcnN0Q2hpbGQoKTsgY2hpbGQ7IGNo
aWxkID0gY2hpbGQtPm5leHRTaWJsaW5nKCkpIHsKKyAgICAgICAgICAgICAgICBpZiAoY2hpbGQt
PmlzUmVuZGVyQmxvY2tGbG93KCkgJiYgIWNoaWxkLT5pc0Zsb2F0aW5nT3JPdXRPZkZsb3dQb3Np
dGlvbmVkKCkpIHsKKyAgICAgICAgICAgICAgICAgICAgUmVuZGVyQmxvY2sqIGJsb2NrID0gdG9S
ZW5kZXJCbG9jayhjaGlsZCk7CisgICAgICAgICAgICAgICAgICAgIGlmIChibG9jay0+bG93ZXN0
RmxvYXRMb2dpY2FsQm90dG9tKCkgKyBibG9jay0+bG9naWNhbFRvcCgpID4gbmV3SGVpZ2h0KQor
ICAgICAgICAgICAgICAgICAgICAgICAgYWRkT3ZlcmhhbmdpbmdGbG9hdHMoYmxvY2ssIGZhbHNl
KTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisK
KyAgICBib29sIGhlaWdodENoYW5nZWQgPSAocHJldmlvdXNIZWlnaHQgIT0gbmV3SGVpZ2h0KTsK
KyAgICBpZiAoaGVpZ2h0Q2hhbmdlZCkKKyAgICAgICAgcmVsYXlvdXRDaGlsZHJlbiA9IHRydWU7
CisKKyAgICBsYXlvdXRQb3NpdGlvbmVkT2JqZWN0cyhyZWxheW91dENoaWxkcmVuIHx8IGlzUm9v
dCgpKTsKKworICAgIHVwZGF0ZVNoYXBlc0FmdGVyQmxvY2tMYXlvdXQoaGVpZ2h0Q2hhbmdlZCk7
CisKKyAgICAvLyBBZGQgb3ZlcmZsb3cgZnJvbSBjaGlsZHJlbiAodW5sZXNzIHdlJ3JlIG11bHRp
LWNvbHVtbiwgc2luY2UgaW4gdGhhdCBjYXNlIGFsbCBvdXIgY2hpbGQgb3ZlcmZsb3cgaXMgY2xp
cHBlZCBhbnl3YXkpLgorICAgIGNvbXB1dGVPdmVyZmxvdyhvbGRDbGllbnRBZnRlckVkZ2UpOwor
ICAgIAorICAgIHN0YXRlUHVzaGVyLnBvcCgpOworCisgICAgZml0Qm9yZGVyVG9MaW5lc0lmTmVl
ZGVkKCk7CisKKyAgICBpZiAodmlldygpLmxheW91dFN0YXRlKCktPm1fcGFnZUxvZ2ljYWxIZWln
aHQpCisgICAgICAgIHNldFBhZ2VMb2dpY2FsT2Zmc2V0KHZpZXcoKS5sYXlvdXRTdGF0ZSgpLT5w
YWdlTG9naWNhbE9mZnNldCh0aGlzLCBsb2dpY2FsVG9wKCkpKTsKKworICAgIHVwZGF0ZUxheWVy
VHJhbnNmb3JtKCk7CisKKyAgICAvLyBVcGRhdGUgb3VyIHNjcm9sbCBpbmZvcm1hdGlvbiBpZiB3
ZSdyZSBvdmVyZmxvdzphdXRvL3Njcm9sbC9oaWRkZW4gbm93IHRoYXQgd2Uga25vdyBpZgorICAg
IC8vIHdlIG92ZXJmbG93IG9yIG5vdC4KKyAgICB1cGRhdGVTY3JvbGxJbmZvQWZ0ZXJMYXlvdXQo
KTsKKworICAgIC8vIEZJWE1FOiBUaGlzIHJlcGFpbnQgbG9naWMgc2hvdWxkIGJlIG1vdmVkIGlu
dG8gYSBzZXBhcmF0ZSBoZWxwZXIgZnVuY3Rpb24hCisgICAgLy8gUmVwYWludCB3aXRoIG91ciBu
ZXcgYm91bmRzIGlmIHRoZXkgYXJlIGRpZmZlcmVudCBmcm9tIG91ciBvbGQgYm91bmRzLgorICAg
IGJvb2wgZGlkRnVsbFJlcGFpbnQgPSByZXBhaW50ZXIucmVwYWludEFmdGVyTGF5b3V0KCk7Cisg
ICAgaWYgKCFkaWRGdWxsUmVwYWludCAmJiByZXBhaW50TG9naWNhbFRvcCAhPSByZXBhaW50TG9n
aWNhbEJvdHRvbSAmJiAoc3R5bGVUb1VzZS0+dmlzaWJpbGl0eSgpID09IFZJU0lCTEUgfHwgZW5j
bG9zaW5nTGF5ZXIoKS0+aGFzVmlzaWJsZUNvbnRlbnQoKSkpIHsKKyAgICAgICAgLy8gRklYTUU6
IFdlIGNvdWxkIHRpZ2h0ZW4gdXAgdGhlIGxlZnQgYW5kIHJpZ2h0IGludmFsaWRhdGlvbiBwb2lu
dHMgaWYgd2UgbGV0IGxheW91dElubGluZUNoaWxkcmVuIGZpbGwgdGhlbSBpbiBiYXNlZCBvZmYg
dGhlIHBhcnRpY3VsYXIgbGluZXMKKyAgICAgICAgLy8gaXQgaGFkIHRvIGxheSBvdXQuIFdlIHdv
dWxkbid0IG5lZWQgdGhlIGhhc092ZXJmbG93Q2xpcCgpIGhhY2sgaW4gdGhhdCBjYXNlIGVpdGhl
ci4KKyAgICAgICAgTGF5b3V0VW5pdCByZXBhaW50TG9naWNhbExlZnQgPSBsb2dpY2FsTGVmdFZp
c3VhbE92ZXJmbG93KCk7CisgICAgICAgIExheW91dFVuaXQgcmVwYWludExvZ2ljYWxSaWdodCA9
IGxvZ2ljYWxSaWdodFZpc3VhbE92ZXJmbG93KCk7CisgICAgICAgIGlmIChoYXNPdmVyZmxvd0Ns
aXAoKSkgeworICAgICAgICAgICAgLy8gSWYgd2UgaGF2ZSBjbGlwcGVkIG92ZXJmbG93LCB3ZSBz
aG91bGQgdXNlIGxheW91dCBvdmVyZmxvdyBhcyB3ZWxsLCBzaW5jZSB2aXN1YWwgb3ZlcmZsb3cg
ZnJvbSBsaW5lcyBkaWRuJ3QgcHJvcGFnYXRlIHRvIG91ciBibG9jaydzIG92ZXJmbG93LgorICAg
ICAgICAgICAgLy8gTm90ZSB0aGUgb2xkIGNvZGUgZGlkIHRoaXMgYXMgd2VsbCBidXQgZXZlbiBm
b3Igb3ZlcmZsb3c6dmlzaWJsZS4gVGhlIGFkZGl0aW9uIG9mIGhhc092ZXJmbG93Q2xpcCgpIGF0
IGxlYXN0IHRpZ2h0ZW5zIHVwIHRoZSBoYWNrIGEgYml0LgorICAgICAgICAgICAgLy8gbGF5b3V0
SW5saW5lQ2hpbGRyZW4gc2hvdWxkIGJlIHBhdGNoZWQgdG8gY29tcHV0ZSB0aGUgZW50aXJlIHJl
cGFpbnQgcmVjdC4KKyAgICAgICAgICAgIHJlcGFpbnRMb2dpY2FsTGVmdCA9IG1pbihyZXBhaW50
TG9naWNhbExlZnQsIGxvZ2ljYWxMZWZ0TGF5b3V0T3ZlcmZsb3coKSk7CisgICAgICAgICAgICBy
ZXBhaW50TG9naWNhbFJpZ2h0ID0gbWF4KHJlcGFpbnRMb2dpY2FsUmlnaHQsIGxvZ2ljYWxSaWdo
dExheW91dE92ZXJmbG93KCkpOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBMYXlvdXRS
ZWN0IHJlcGFpbnRSZWN0OworICAgICAgICBpZiAoaXNIb3Jpem9udGFsV3JpdGluZ01vZGUoKSkK
KyAgICAgICAgICAgIHJlcGFpbnRSZWN0ID0gTGF5b3V0UmVjdChyZXBhaW50TG9naWNhbExlZnQs
IHJlcGFpbnRMb2dpY2FsVG9wLCByZXBhaW50TG9naWNhbFJpZ2h0IC0gcmVwYWludExvZ2ljYWxM
ZWZ0LCByZXBhaW50TG9naWNhbEJvdHRvbSAtIHJlcGFpbnRMb2dpY2FsVG9wKTsKKyAgICAgICAg
ZWxzZQorICAgICAgICAgICAgcmVwYWludFJlY3QgPSBMYXlvdXRSZWN0KHJlcGFpbnRMb2dpY2Fs
VG9wLCByZXBhaW50TG9naWNhbExlZnQsIHJlcGFpbnRMb2dpY2FsQm90dG9tIC0gcmVwYWludExv
Z2ljYWxUb3AsIHJlcGFpbnRMb2dpY2FsUmlnaHQgLSByZXBhaW50TG9naWNhbExlZnQpOworCisg
ICAgICAgIC8vIFRoZSByZXBhaW50IHJlY3QgbWF5IGJlIHNwbGl0IGFjcm9zcyBjb2x1bW5zLCBp
biB3aGljaCBjYXNlIGFkanVzdFJlY3RGb3JDb2x1bW5zKCkgd2lsbCByZXR1cm4gdGhlIHVuaW9u
LgorICAgICAgICBhZGp1c3RSZWN0Rm9yQ29sdW1ucyhyZXBhaW50UmVjdCk7CisKKyAgICAgICAg
cmVwYWludFJlY3QuaW5mbGF0ZShtYXhpbWFsT3V0bGluZVNpemUoUGFpbnRQaGFzZU91dGxpbmUp
KTsKKyAgICAgICAgCisgICAgICAgIGlmIChoYXNPdmVyZmxvd0NsaXAoKSkgeworICAgICAgICAg
ICAgLy8gQWRqdXN0IHJlcGFpbnQgcmVjdCBmb3Igc2Nyb2xsIG9mZnNldAorICAgICAgICAgICAg
cmVwYWludFJlY3QubW92ZSgtc2Nyb2xsZWRDb250ZW50T2Zmc2V0KCkpOworCisgICAgICAgICAg
ICAvLyBEb24ndCBhbGxvdyB0aGlzIHJlY3QgdG8gc3BpbGwgb3V0IG9mIG91ciBvdmVyZmxvdyBi
b3guCisgICAgICAgICAgICByZXBhaW50UmVjdC5pbnRlcnNlY3QoTGF5b3V0UmVjdChMYXlvdXRQ
b2ludCgpLCBzaXplKCkpKTsKKyAgICAgICAgfQorCisgICAgICAgIC8vIE1ha2Ugc3VyZSB0aGUg
cmVjdCBpcyBzdGlsbCBub24tZW1wdHkgYWZ0ZXIgaW50ZXJzZWN0aW5nIGZvciBvdmVyZmxvdyBh
Ym92ZQorICAgICAgICBpZiAoIXJlcGFpbnRSZWN0LmlzRW1wdHkoKSkgeworICAgICAgICAgICAg
cmVwYWludFJlY3RhbmdsZShyZXBhaW50UmVjdCk7IC8vIFdlIG5lZWQgdG8gZG8gYSBwYXJ0aWFs
IHJlcGFpbnQgb2Ygb3VyIGNvbnRlbnQuCisgICAgICAgICAgICBpZiAoaGFzUmVmbGVjdGlvbigp
KQorICAgICAgICAgICAgICAgIHJlcGFpbnRSZWN0YW5nbGUocmVmbGVjdGVkUmVjdChyZXBhaW50
UmVjdCkpOworICAgICAgICB9CisgICAgfQorCisgICAgc2V0TmVlZHNMYXlvdXQoZmFsc2UpOwor
fQorCit2b2lkIFJlbmRlckJsb2NrRmxvdzo6bGF5b3V0QmxvY2tDaGlsZHJlbihib29sIHJlbGF5
b3V0Q2hpbGRyZW4sIExheW91dFVuaXQmIG1heEZsb2F0TG9naWNhbEJvdHRvbSkKK3sKKyAgICBk
aXJ0eUZvckxheW91dEZyb21QZXJjZW50YWdlSGVpZ2h0RGVzY2VuZGFudHMoKTsKKworICAgIExh
eW91dFVuaXQgYmVmb3JlRWRnZSA9IGJvcmRlckFuZFBhZGRpbmdCZWZvcmUoKTsKKyAgICBMYXlv
dXRVbml0IGFmdGVyRWRnZSA9IGJvcmRlckFuZFBhZGRpbmdBZnRlcigpICsgc2Nyb2xsYmFyTG9n
aWNhbEhlaWdodCgpOworCisgICAgc2V0TG9naWNhbEhlaWdodChiZWZvcmVFZGdlKTsKKyAgICAK
KyAgICAvLyBMYXkgb3V0IG91ciBoeXBvdGhldGljYWwgZ3JpZCBsaW5lIGFzIHRob3VnaCBpdCBv
Y2N1cnMgYXQgdGhlIHRvcCBvZiB0aGUgYmxvY2suCisgICAgaWYgKHZpZXcoKS5sYXlvdXRTdGF0
ZSgpLT5saW5lR3JpZCgpID09IHRoaXMpCisgICAgICAgIGxheW91dExpbmVHcmlkQm94KCk7CisK
KyAgICAvLyBUaGUgbWFyZ2luIHN0cnVjdCBjYWNoZXMgYWxsIG91ciBjdXJyZW50IG1hcmdpbiBj
b2xsYXBzaW5nIHN0YXRlLgorICAgIE1hcmdpbkluZm8gbWFyZ2luSW5mbyh0aGlzLCBiZWZvcmVF
ZGdlLCBhZnRlckVkZ2UpOworCisgICAgLy8gRmllbGRzZXRzIG5lZWQgdG8gZmluZCB0aGVpciBs
ZWdlbmQgYW5kIHBvc2l0aW9uIGl0IGluc2lkZSB0aGUgYm9yZGVyIG9mIHRoZSBvYmplY3QuCisg
ICAgLy8gVGhlIGxlZ2VuZCB0aGVuIGdldHMgc2tpcHBlZCBkdXJpbmcgbm9ybWFsIGxheW91dC4g
VGhlIHNhbWUgaXMgdHJ1ZSBmb3IgcnVieSB0ZXh0LgorICAgIC8vIEl0IGRvZXNuJ3QgZ2V0IGlu
Y2x1ZGVkIGluIHRoZSBub3JtYWwgbGF5b3V0IHByb2Nlc3MgYnV0IGlzIGluc3RlYWQgc2tpcHBl
ZC4KKyAgICBSZW5kZXJPYmplY3QqIGNoaWxkVG9FeGNsdWRlID0gbGF5b3V0U3BlY2lhbEV4Y2x1
ZGVkQ2hpbGQocmVsYXlvdXRDaGlsZHJlbik7CisKKyAgICBMYXlvdXRVbml0IHByZXZpb3VzRmxv
YXRMb2dpY2FsQm90dG9tID0gMDsKKyAgICBtYXhGbG9hdExvZ2ljYWxCb3R0b20gPSAwOworCisg
ICAgUmVuZGVyQm94KiBuZXh0ID0gZmlyc3RDaGlsZEJveCgpOworCisgICAgd2hpbGUgKG5leHQp
IHsKKyAgICAgICAgUmVuZGVyQm94KiBjaGlsZCA9IG5leHQ7CisgICAgICAgIG5leHQgPSBjaGls
ZC0+bmV4dFNpYmxpbmdCb3goKTsKKworICAgICAgICBpZiAoY2hpbGRUb0V4Y2x1ZGUgPT0gY2hp
bGQpCisgICAgICAgICAgICBjb250aW51ZTsgLy8gU2tpcCB0aGlzIGNoaWxkLCBzaW5jZSBpdCB3
aWxsIGJlIHBvc2l0aW9uZWQgYnkgdGhlIHNwZWNpYWxpemVkIHN1YmNsYXNzIChmaWVsZHNldHMg
YW5kIHJ1YnkgcnVucykuCisKKyAgICAgICAgdXBkYXRlQmxvY2tDaGlsZERpcnR5Qml0c0JlZm9y
ZUxheW91dChyZWxheW91dENoaWxkcmVuLCBjaGlsZCk7CisKKyAgICAgICAgaWYgKGNoaWxkLT5p
c091dE9mRmxvd1Bvc2l0aW9uZWQoKSkgeworICAgICAgICAgICAgY2hpbGQtPmNvbnRhaW5pbmdC
bG9jaygpLT5pbnNlcnRQb3NpdGlvbmVkT2JqZWN0KGNoaWxkKTsKKyAgICAgICAgICAgIGFkanVz
dFBvc2l0aW9uZWRCbG9jayhjaGlsZCwgbWFyZ2luSW5mbyk7CisgICAgICAgICAgICBjb250aW51
ZTsKKyAgICAgICAgfQorICAgICAgICBpZiAoY2hpbGQtPmlzRmxvYXRpbmcoKSkgeworICAgICAg
ICAgICAgaW5zZXJ0RmxvYXRpbmdPYmplY3QoY2hpbGQpOworICAgICAgICAgICAgYWRqdXN0Rmxv
YXRpbmdCbG9jayhtYXJnaW5JbmZvKTsKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICB9
CisKKyAgICAgICAgLy8gTGF5IG91dCB0aGUgY2hpbGQuCisgICAgICAgIGxheW91dEJsb2NrQ2hp
bGQoY2hpbGQsIG1hcmdpbkluZm8sIHByZXZpb3VzRmxvYXRMb2dpY2FsQm90dG9tLCBtYXhGbG9h
dExvZ2ljYWxCb3R0b20pOworICAgIH0KKyAgICAKKyAgICAvLyBOb3cgZG8gdGhlIGhhbmRsaW5n
IG9mIHRoZSBib3R0b20gb2YgdGhlIGJsb2NrLCBhZGRpbmcgaW4gb3VyIGJvdHRvbSBib3JkZXIv
cGFkZGluZyBhbmQKKyAgICAvLyBkZXRlcm1pbmluZyB0aGUgY29ycmVjdCBjb2xsYXBzZWQgYm90
dG9tIG1hcmdpbiBpbmZvcm1hdGlvbi4KKyAgICBoYW5kbGVBZnRlclNpZGVPZkJsb2NrKGJlZm9y
ZUVkZ2UsIGFmdGVyRWRnZSwgbWFyZ2luSW5mbyk7Cit9CisKIH0gLy8gbmFtZXNwYWNlIFdlYkNv
cmUKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCbG9ja0Zsb3cuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2tGbG93LmgJKHJl
dmlzaW9uIDE1NTM3NCkKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCbG9ja0Zs
b3cuaAkod29ya2luZyBjb3B5KQpAQCAtMzMsNiArMzMsMjAgQEAgcHVibGljOgogICAgIHZpcnR1
YWwgflJlbmRlckJsb2NrRmxvdygpOwogICAgIAogICAgIHZpcnR1YWwgYm9vbCBpc1JlbmRlckJs
b2NrRmxvdygpIGNvbnN0IE9WRVJSSURFIEZJTkFMIHsgcmV0dXJuIHRydWU7IH0KKyAgICAKKyAg
ICB2aXJ0dWFsIHZvaWQgbGF5b3V0QmxvY2soYm9vbCByZWxheW91dENoaWxkcmVuLCBMYXlvdXRV
bml0IHBhZ2VMb2dpY2FsSGVpZ2h0ID0gMCkgT1ZFUlJJREU7CisgICAgCitwcm90ZWN0ZWQ6Cisg
ICAgLy8gVGhpcyBtZXRob2QgaXMgY2FsbGVkIGF0IHRoZSBzdGFydCBvZiBsYXlvdXQgdG8gd2lw
ZSBhd2F5IGFsbCBvZiB0aGUgZmxvYXRzIGluIG91ciBmbG9hdGluZyBvYmplY3RzIGxpc3QuIEl0
IGFsc28KKyAgICAvLyByZXBvcHVsYXRlcyB0aGUgbGlzdCB3aXRoIGFueSBmbG9hdHMgdGhhdCBp
bnRydWRlIGZyb20gcHJldmlvdXMgc2libGluZ3Mgb3IgcGFyZW50cy4gRmxvYXRzIHRoYXQgd2Vy
ZSBhZGRlZCBieQorICAgIC8vIGRlc2NlbmRhbnRzIGFyZSBnb25lIHdoZW4gdGhpcyBjYWxsIGNv
bXBsZXRlcyBhbmQgd2lsbCBnZXQgYWRkZWQgYmFjayBsYXRlciBvbiBhZnRlciB0aGUgY2hpbGRy
ZW4gaGF2ZSBnb3R0ZW4KKyAgICAvLyBhIHJlbGF5b3V0LgorICAgIHZvaWQgY2xlYXJGbG9hdHMo
KTsKKworICAgIC8vIFJlbmRlckJsb2NrRmxvdyBhbHdheXMgY29udGFpbnMgZWl0aGVyIGxpbmVz
IG9yIHBhcmFncmFwaHMuIFdoZW4gdGhlIGNoaWxkcmVuIGFyZSBhbGwgYmxvY2tzIChlLmcuIHBh
cmFncmFwaHMpLCB3ZSBjYWxsIGxheW91dEJsb2NrQ2hpbGRyZW4uCisgICAgLy8gV2hlbiB0aGUg
Y2hpbGRyZW4gYXJlIGFyZSBhbGwgaW5saW5lIChlLmcuLCBsaW5lcyksIHdlIGNhbGwgbGF5b3V0
SW5saW5lQ2hpbGRyZW4uCisgICAgdm9pZCBsYXlvdXRCbG9ja0NoaWxkcmVuKGJvb2wgcmVsYXlv
dXRDaGlsZHJlbiwgTGF5b3V0VW5pdCYgbWF4RmxvYXRMb2dpY2FsQm90dG9tKTsKKyAgICB2b2lk
IGxheW91dElubGluZUNoaWxkcmVuKGJvb2wgcmVsYXlvdXRDaGlsZHJlbiwgTGF5b3V0VW5pdCYg
cmVwYWludExvZ2ljYWxUb3AsIExheW91dFVuaXQmIHJlcGFpbnRMb2dpY2FsQm90dG9tKTsKIH07
CiAKIGlubGluZSBSZW5kZXJCbG9ja0Zsb3cmIHRvUmVuZGVyQmxvY2tGbG93KFJlbmRlck9iamVj
dCYgb2JqZWN0KQpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJsb2NrTGlu
ZUxheW91dC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
ckJsb2NrTGluZUxheW91dC5jcHAJKHJldmlzaW9uIDE1NTM3NCkKKysrIFNvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9SZW5kZXJCbG9ja0xpbmVMYXlvdXQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0y
MTA5LDcgKzIxMDksNyBAQCB2b2lkIFJlbmRlckJsb2NrOjpyZXBhaW50RGlydHlGbG9hdHMoVmVj
CiAgICAgfQogfQogCi12b2lkIFJlbmRlckJsb2NrOjpsYXlvdXRJbmxpbmVDaGlsZHJlbihib29s
IHJlbGF5b3V0Q2hpbGRyZW4sIExheW91dFVuaXQmIHJlcGFpbnRMb2dpY2FsVG9wLCBMYXlvdXRV
bml0JiByZXBhaW50TG9naWNhbEJvdHRvbSkKK3ZvaWQgUmVuZGVyQmxvY2tGbG93OjpsYXlvdXRJ
bmxpbmVDaGlsZHJlbihib29sIHJlbGF5b3V0Q2hpbGRyZW4sIExheW91dFVuaXQmIHJlcGFpbnRM
b2dpY2FsVG9wLCBMYXlvdXRVbml0JiByZXBhaW50TG9naWNhbEJvdHRvbSkKIHsKICAgICBzZXRM
b2dpY2FsSGVpZ2h0KGJvcmRlckFuZFBhZGRpbmdCZWZvcmUoKSk7CiAgICAgCkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGlzdEJveC5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxpc3RCb3guY3BwCShyZXZpc2lvbiAxNTUzNzQp
CisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGlzdEJveC5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTgzLDcgKzgzLDcgQEAgY29uc3QgaW50IGRlZmF1bHRTaXplID0gNDsKIGNvbnN0
IGludCBiYXNlbGluZUFkanVzdG1lbnQgPSA3OwogCiBSZW5kZXJMaXN0Qm94OjpSZW5kZXJMaXN0
Qm94KEVsZW1lbnQqIGVsZW1lbnQpCi0gICAgOiBSZW5kZXJCbG9jayhlbGVtZW50KQorICAgIDog
UmVuZGVyQmxvY2tGbG93KGVsZW1lbnQpCiAgICAgLCBtX29wdGlvbnNDaGFuZ2VkKHRydWUpCiAg
ICAgLCBtX3Njcm9sbFRvUmV2ZWFsU2VsZWN0aW9uQWZ0ZXJMYXlvdXQoZmFsc2UpCiAgICAgLCBt
X2luQXV0b3Njcm9sbChmYWxzZSkKQEAgLTE3MSw3ICsxNzEsNyBAQCB2b2lkIFJlbmRlckxpc3RC
b3g6OnNlbGVjdGlvbkNoYW5nZWQoKQogdm9pZCBSZW5kZXJMaXN0Qm94OjpsYXlvdXQoKQogewog
ICAgIFN0YWNrU3RhdHM6OkxheW91dENoZWNrUG9pbnQgbGF5b3V0Q2hlY2tQb2ludDsKLSAgICBS
ZW5kZXJCbG9jazo6bGF5b3V0KCk7CisgICAgUmVuZGVyQmxvY2tGbG93OjpsYXlvdXQoKTsKIAog
ICAgIGlmIChtX3ZCYXIpIHsKICAgICAgICAgYm9vbCBlbmFibGVkID0gbnVtVmlzaWJsZUl0ZW1z
KCkgPCBudW1JdGVtcygpOwpAQCAtMjk4LDcgKzI5OCw3IEBAIHZvaWQgUmVuZGVyTGlzdEJveDo6
cGFpbnRPYmplY3QoUGFpbnRJbmYKICAgICB9CiAKICAgICAvLyBQYWludCB0aGUgY2hpbGRyZW4u
Ci0gICAgUmVuZGVyQmxvY2s6OnBhaW50T2JqZWN0KHBhaW50SW5mbywgcGFpbnRPZmZzZXQpOwor
ICAgIFJlbmRlckJsb2NrRmxvdzo6cGFpbnRPYmplY3QocGFpbnRJbmZvLCBwYWludE9mZnNldCk7
CiAKICAgICBzd2l0Y2ggKHBhaW50SW5mby5waGFzZSkgewogICAgIC8vIERlcGVuZGluZyBvbiB3
aGV0aGVyIHdlIGhhdmUgb3ZlcmxheSBzY3JvbGxiYXJzIHRoZXkKQEAgLTMyOCw3ICszMjgsNyBA
QCB2b2lkIFJlbmRlckxpc3RCb3g6OnBhaW50T2JqZWN0KFBhaW50SW5mCiB2b2lkIFJlbmRlckxp
c3RCb3g6OmFkZEZvY3VzUmluZ1JlY3RzKFZlY3RvcjxJbnRSZWN0PiYgcmVjdHMsIGNvbnN0IExh
eW91dFBvaW50JiBhZGRpdGlvbmFsT2Zmc2V0LCBjb25zdCBSZW5kZXJMYXllck1vZGVsT2JqZWN0
KiBwYWludENvbnRhaW5lcikKIHsKICAgICBpZiAoIWlzU3BhdGlhbE5hdmlnYXRpb25FbmFibGVk
KCZmcmFtZSgpKSkKLSAgICAgICAgcmV0dXJuIFJlbmRlckJsb2NrOjphZGRGb2N1c1JpbmdSZWN0
cyhyZWN0cywgYWRkaXRpb25hbE9mZnNldCwgcGFpbnRDb250YWluZXIpOworICAgICAgICByZXR1
cm4gUmVuZGVyQmxvY2tGbG93OjphZGRGb2N1c1JpbmdSZWN0cyhyZWN0cywgYWRkaXRpb25hbE9m
ZnNldCwgcGFpbnRDb250YWluZXIpOwogCiAgICAgSFRNTFNlbGVjdEVsZW1lbnQqIHNlbGVjdCA9
IHNlbGVjdEVsZW1lbnQoKTsKIApAQCAtNjk3LDcgKzY5Nyw3IEBAIHZvaWQgUmVuZGVyTGlzdEJv
eDo6c2V0U2Nyb2xsVG9wKGludCBuZXcKIAogYm9vbCBSZW5kZXJMaXN0Qm94Ojpub2RlQXRQb2lu
dChjb25zdCBIaXRUZXN0UmVxdWVzdCYgcmVxdWVzdCwgSGl0VGVzdFJlc3VsdCYgcmVzdWx0LCBj
b25zdCBIaXRUZXN0TG9jYXRpb24mIGxvY2F0aW9uSW5Db250YWluZXIsIGNvbnN0IExheW91dFBv
aW50JiBhY2N1bXVsYXRlZE9mZnNldCwgSGl0VGVzdEFjdGlvbiBoaXRUZXN0QWN0aW9uKQogewot
ICAgIGlmICghUmVuZGVyQmxvY2s6Om5vZGVBdFBvaW50KHJlcXVlc3QsIHJlc3VsdCwgbG9jYXRp
b25JbkNvbnRhaW5lciwgYWNjdW11bGF0ZWRPZmZzZXQsIGhpdFRlc3RBY3Rpb24pKQorICAgIGlm
ICghUmVuZGVyQmxvY2tGbG93Ojpub2RlQXRQb2ludChyZXF1ZXN0LCByZXN1bHQsIGxvY2F0aW9u
SW5Db250YWluZXIsIGFjY3VtdWxhdGVkT2Zmc2V0LCBoaXRUZXN0QWN0aW9uKSkKICAgICAgICAg
cmV0dXJuIGZhbHNlOwogICAgIGNvbnN0IFZlY3RvcjxIVE1MRWxlbWVudCo+JiBsaXN0SXRlbXMg
PSBzZWxlY3RFbGVtZW50KCktPmxpc3RJdGVtcygpOwogICAgIGludCBzaXplID0gbnVtSXRlbXMo
KTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMaXN0Qm94LmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxpc3RCb3guaAkocmV2aXNp
b24gMTU1Mzc0KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxpc3RCb3guaAko
d29ya2luZyBjb3B5KQpAQCAtMzEsMTQgKzMxLDE0IEBACiAjaWZuZGVmIFJlbmRlckxpc3RCb3hf
aAogI2RlZmluZSBSZW5kZXJMaXN0Qm94X2gKIAotI2luY2x1ZGUgIlJlbmRlckJsb2NrLmgiCisj
aW5jbHVkZSAiUmVuZGVyQmxvY2tGbG93LmgiCiAjaW5jbHVkZSAiU2Nyb2xsYWJsZUFyZWEuaCIK
IAogbmFtZXNwYWNlIFdlYkNvcmUgewogCiBjbGFzcyBIVE1MU2VsZWN0RWxlbWVudDsKIAotY2xh
c3MgUmVuZGVyTGlzdEJveCBGSU5BTCA6IHB1YmxpYyBSZW5kZXJCbG9jaywgcHJpdmF0ZSBTY3Jv
bGxhYmxlQXJlYSB7CitjbGFzcyBSZW5kZXJMaXN0Qm94IEZJTkFMIDogcHVibGljIFJlbmRlckJs
b2NrRmxvdywgcHJpdmF0ZSBTY3JvbGxhYmxlQXJlYSB7CiBwdWJsaWM6CiAgICAgZXhwbGljaXQg
UmVuZGVyTGlzdEJveChFbGVtZW50Kik7CiAgICAgdmlydHVhbCB+UmVuZGVyTGlzdEJveCgpOwpJ
bmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclJlZ2lvbi5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclJlZ2lvbi5jcHAJKHJldmlzaW9u
IDE1NTM3NCkKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJSZWdpb24uY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0xODYsNyArMTg2LDcgQEAgdm9pZCBSZW5kZXJSZWdpb246OnBhaW50
T2JqZWN0KFBhaW50SW5mbwogICAgIGlmIChzdHlsZSgpLT52aXNpYmlsaXR5KCkgIT0gVklTSUJM
RSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgUmVuZGVyQmxvY2s6OnBhaW50T2JqZWN0KHBhaW50
SW5mbywgcGFpbnRPZmZzZXQpOworICAgIFJlbmRlckJsb2NrRmxvdzo6cGFpbnRPYmplY3QocGFp
bnRJbmZvLCBwYWludE9mZnNldCk7CiAKICAgICBpZiAoIWlzVmFsaWQoKSkKICAgICAgICAgcmV0
dXJuOwpAQCAtMjc2LDcgKzI3Niw3IEBAIGJvb2wgUmVuZGVyUmVnaW9uOjpzaG91bGRIYXZlQXV0
b0xvZ2ljYWwKICAgICAKIHZvaWQgUmVuZGVyUmVnaW9uOjpzdHlsZURpZENoYW5nZShTdHlsZURp
ZmZlcmVuY2UgZGlmZiwgY29uc3QgUmVuZGVyU3R5bGUqIG9sZFN0eWxlKQogewotICAgIFJlbmRl
ckJsb2NrOjpzdHlsZURpZENoYW5nZShkaWZmLCBvbGRTdHlsZSk7CisgICAgUmVuZGVyQmxvY2tG
bG93OjpzdHlsZURpZENoYW5nZShkaWZmLCBvbGRTdHlsZSk7CiAKICAgICAvLyBJZiB0aGUgcmVn
aW9uIGlzIG5vdCBhdHRhY2hlZCB0byBhbnkgdGhyZWFkLCB0aGVyZSBpcyBubyBuZWVkIHRvIGNo
ZWNrCiAgICAgLy8gd2hldGhlciB0aGUgcmVnaW9uIGhhcyByZWdpb24gc3R5bGluZyBzaW5jZSBu
byBjb250ZW50IHdpbGwgYmUgZGlzcGxheWVkCkBAIC0yOTYsNyArMjk2LDcgQEAgdm9pZCBSZW5k
ZXJSZWdpb246OnN0eWxlRGlkQ2hhbmdlKFN0eWxlRAogdm9pZCBSZW5kZXJSZWdpb246OmxheW91
dEJsb2NrKGJvb2wgcmVsYXlvdXRDaGlsZHJlbiwgTGF5b3V0VW5pdCkKIHsKICAgICBTdGFja1N0
YXRzOjpMYXlvdXRDaGVja1BvaW50IGxheW91dENoZWNrUG9pbnQ7Ci0gICAgUmVuZGVyQmxvY2s6
OmxheW91dEJsb2NrKHJlbGF5b3V0Q2hpbGRyZW4pOworICAgIFJlbmRlckJsb2NrRmxvdzo6bGF5
b3V0QmxvY2socmVsYXlvdXRDaGlsZHJlbik7CiAKICAgICBpZiAoaXNWYWxpZCgpKSB7CiAgICAg
ICAgIExheW91dFJlY3Qgb2xkUmVnaW9uUmVjdChmbG93VGhyZWFkUG9ydGlvblJlY3QoKSk7CkBA
IC01NTMsMTQgKzU1MywxNCBAQCB2b2lkIFJlbmRlclJlZ2lvbjo6cmVzdG9yZVJlZ2lvbk9iamVj
dHNPCiAKIHZvaWQgUmVuZGVyUmVnaW9uOjppbnNlcnRlZEludG9UcmVlKCkKIHsKLSAgICBSZW5k
ZXJCbG9jazo6aW5zZXJ0ZWRJbnRvVHJlZSgpOworICAgIFJlbmRlckJsb2NrRmxvdzo6aW5zZXJ0
ZWRJbnRvVHJlZSgpOwogCiAgICAgYXR0YWNoUmVnaW9uKCk7CiB9CiAKIHZvaWQgUmVuZGVyUmVn
aW9uOjp3aWxsQmVSZW1vdmVkRnJvbVRyZWUoKQogewotICAgIFJlbmRlckJsb2NrOjp3aWxsQmVS
ZW1vdmVkRnJvbVRyZWUoKTsKKyAgICBSZW5kZXJCbG9ja0Zsb3c6OndpbGxCZVJlbW92ZWRGcm9t
VHJlZSgpOwogCiAgICAgZGV0YWNoUmVnaW9uKCk7CiB9CkBAIC02MzksNyArNjM5LDcgQEAgdm9p
ZCBSZW5kZXJSZWdpb246OmNsZWFyT2JqZWN0U3R5bGVJblJlZwogdm9pZCBSZW5kZXJSZWdpb246
OmNvbXB1dGVJbnRyaW5zaWNMb2dpY2FsV2lkdGhzKExheW91dFVuaXQmIG1pbkxvZ2ljYWxXaWR0
aCwgTGF5b3V0VW5pdCYgbWF4TG9naWNhbFdpZHRoKSBjb25zdAogewogICAgIGlmICghaXNWYWxp
ZCgpKSB7Ci0gICAgICAgIFJlbmRlckJsb2NrOjpjb21wdXRlSW50cmluc2ljTG9naWNhbFdpZHRo
cyhtaW5Mb2dpY2FsV2lkdGgsIG1heExvZ2ljYWxXaWR0aCk7CisgICAgICAgIFJlbmRlckJsb2Nr
Rmxvdzo6Y29tcHV0ZUludHJpbnNpY0xvZ2ljYWxXaWR0aHMobWluTG9naWNhbFdpZHRoLCBtYXhM
b2dpY2FsV2lkdGgpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCkBAIC02NTIsNyArNjUyLDcg
QEAgdm9pZCBSZW5kZXJSZWdpb246OmNvbXB1dGVQcmVmZXJyZWRMb2dpYwogICAgIEFTU0VSVChw
cmVmZXJyZWRMb2dpY2FsV2lkdGhzRGlydHkoKSk7CiAKICAgICBpZiAoIWlzVmFsaWQoKSkgewot
ICAgICAgICBSZW5kZXJCbG9jazo6Y29tcHV0ZVByZWZlcnJlZExvZ2ljYWxXaWR0aHMoKTsKKyAg
ICAgICAgUmVuZGVyQmxvY2tGbG93Ojpjb21wdXRlUHJlZmVycmVkTG9naWNhbFdpZHRocygpOwog
ICAgICAgICByZXR1cm47CiAgICAgfQogCkBAIC02OTAsNyArNjkwLDcgQEAgdm9pZCBSZW5kZXJS
ZWdpb246OmdldFJhbmdlcyhWZWN0b3I8UmVmUAogCiB2b2lkIFJlbmRlclJlZ2lvbjo6dXBkYXRl
TG9naWNhbEhlaWdodCgpCiB7Ci0gICAgUmVuZGVyQmxvY2s6OnVwZGF0ZUxvZ2ljYWxIZWlnaHQo
KTsKKyAgICBSZW5kZXJCbG9ja0Zsb3c6OnVwZGF0ZUxvZ2ljYWxIZWlnaHQoKTsKIAogICAgIGlm
ICghaGFzQXV0b0xvZ2ljYWxIZWlnaHQoKSkKICAgICAgICAgcmV0dXJuOwpAQCAtNzE0LDcgKzcx
NCw3IEBAIHZvaWQgUmVuZGVyUmVnaW9uOjp1cGRhdGVMb2dpY2FsSGVpZ2h0KCkKICAgICAgICAg
c2V0TG9naWNhbEhlaWdodChuZXdMb2dpY2FsSGVpZ2h0KTsKICAgICAgICAgLy8gUmVjYWxjdWxh
dGUgcG9zaXRpb24gb2YgdGhlIHJlbmRlciBibG9jayBhZnRlciBuZXcgbG9naWNhbCBoZWlnaHQg
aXMgc2V0LgogICAgICAgICAvLyAobmVlZGVkIGluIGFic29sdXRlIHBvc2l0aW9uaW5nIGNhc2Ug
d2l0aCBib3R0b20gYWxpZ25tZW50IGZvciBleGFtcGxlKQotICAgICAgICBSZW5kZXJCbG9jazo6
dXBkYXRlTG9naWNhbEhlaWdodCgpOworICAgICAgICBSZW5kZXJCbG9ja0Zsb3c6OnVwZGF0ZUxv
Z2ljYWxIZWlnaHQoKTsKICAgICB9CiB9CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9SZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmUuY3BwCShyZXZpc2lv
biAxNTUzNzQpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGV4dENvbnRyb2xT
aW5nbGVMaW5lLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTM2LDcgKzEzNiw3IEBAIHZvaWQgUmVu
ZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5lOjpsYXlvdXQKICAgICAgICAgc2V0TmVlZHNMYXlvdXRP
bkFuY2VzdG9ycyhpbm5lckJsb2NrUmVuZGVyZXIsIHRoaXMpOwogICAgIH0KIAotICAgIFJlbmRl
ckJsb2NrOjpsYXlvdXRCbG9jayhmYWxzZSk7CisgICAgUmVuZGVyQmxvY2tGbG93OjpsYXlvdXRC
bG9jayhmYWxzZSk7CiAKICAgICBIVE1MRWxlbWVudCogY29udGFpbmVyID0gY29udGFpbmVyRWxl
bWVudCgpOwogICAgIFJlbmRlckJveCogY29udGFpbmVyUmVuZGVyZXIgPSBjb250YWluZXIgPyBj
b250YWluZXItPnJlbmRlckJveCgpIDogMDsKQEAgLTE3Myw3ICsxNzMsNyBAQCB2b2lkIFJlbmRl
clRleHRDb250cm9sU2luZ2xlTGluZTo6bGF5b3V0CiAKICAgICAvLyBJZiB3ZSBuZWVkIGFub3Ro
ZXIgbGF5b3V0IHBhc3MsIHdlIGhhdmUgY2hhbmdlZCBvbmUgb2YgY2hpbGRyZW4ncyBoZWlnaHQg
c28gd2UgbmVlZCB0byByZWxheW91dCB0aGVtLgogICAgIGlmIChuZWVkc0xheW91dCgpKQotICAg
ICAgICBSZW5kZXJCbG9jazo6bGF5b3V0QmxvY2sodHJ1ZSk7CisgICAgICAgIFJlbmRlckJsb2Nr
Rmxvdzo6bGF5b3V0QmxvY2sodHJ1ZSk7CiAKICAgICAvLyBDZW50ZXIgdGhlIGNoaWxkIGJsb2Nr
IGluIHRoZSBibG9jayBwcm9ncmVzc2lvbiBkaXJlY3Rpb24gKHZlcnRpY2FsIGNlbnRlcmluZyBm
b3IgaG9yaXpvbnRhbCB0ZXh0IGZpZWxkcykuCiAgICAgaWYgKCFjb250YWluZXIgJiYgaW5uZXJU
ZXh0UmVuZGVyZXIgJiYgaW5uZXJUZXh0UmVuZGVyZXItPmhlaWdodCgpICE9IGNvbnRlbnRMb2dp
Y2FsSGVpZ2h0KCkpIHsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVy
U1ZHVGV4dC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9S
ZW5kZXJTVkdUZXh0LmNwcAkocmV2aXNpb24gMTU1Mzc0KQorKysgU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL3N2Zy9SZW5kZXJTVkdUZXh0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDE0LDcgKzQx
NCwxMCBAQCB2b2lkIFJlbmRlclNWR1RleHQ6OmxheW91dCgpCiAgICAgLy8gRklYTUU6IFdlIG5l
ZWQgdG8gZmluZCBhIHdheSB0byBvbmx5IGxheW91dCB0aGUgY2hpbGQgYm94ZXMsIGlmIG5lZWRl
ZC4KICAgICBGbG9hdFJlY3Qgb2xkQm91bmRhcmllcyA9IG9iamVjdEJvdW5kaW5nQm94KCk7CiAg
ICAgQVNTRVJUKGNoaWxkcmVuSW5saW5lKCkpOwotICAgIGZvcmNlTGF5b3V0SW5saW5lQ2hpbGRy
ZW4oKTsKKyAgICBMYXlvdXRVbml0IHJlcGFpbnRMb2dpY2FsVG9wID0gMDsKKyAgICBMYXlvdXRV
bml0IHJlcGFpbnRMb2dpY2FsQm90dG9tID0gMDsKKyAgICBjbGVhckZsb2F0cygpOworICAgIGxh
eW91dElubGluZUNoaWxkcmVuKHRydWUsIHJlcGFpbnRMb2dpY2FsVG9wLCByZXBhaW50TG9naWNh
bEJvdHRvbSk7CiAKICAgICBpZiAobV9uZWVkc1Jlb3JkZXJpbmcpCiAgICAgICAgIG1fbmVlZHNS
ZW9yZGVyaW5nID0gZmFsc2U7Cg==
</data>
<flag name="review"
          id="233124"
          type_id="1"
          status="+"
          setter="dino"
    />
          </attachment>
      

    </bug>

</bugzilla>