<?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>40453</bug_id>
          
          <creation_ts>2010-06-10 16:56:22 -0700</creation_ts>
          <short_desc>FrameLoader cleanup: Pull subframe and plugin request functions into a separate class</short_desc>
          <delta_ts>2010-06-21 15:51:03 -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>WebCore Misc.</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>PC</rep_platform>
          <op_sys>OS X 10.5</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Nate Chapin">japhet</reporter>
          <assigned_to name="Nate Chapin">japhet</assigned_to>
          <cc>abarth</cc>
    
    <cc>cjerdonek</cc>
    
    <cc>darin</cc>
    
    <cc>dglazkov</cc>
    
    <cc>webkit-ews</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>236587</commentid>
    <comment_count>0</comment_count>
    <who name="Nate Chapin">japhet</who>
    <bug_when>2010-06-10 16:56:22 -0700</bug_when>
    <thetext>There are a series of functions that are sort of entry points into FrameLoader that are specifically related to requesting plugin objects or subframes but that don&apos;t have an dependencies on private FrameLoader members (except m_frame and m_client).  I don&apos;t think there&apos;s any reason they can&apos;t be in a separate class.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>236995</commentid>
    <comment_count>1</comment_count>
      <attachid>58500</attachid>
    <who name="Nate Chapin">japhet</who>
    <bug_when>2010-06-11 13:17:32 -0700</bug_when>
    <thetext>Created attachment 58500
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>237027</commentid>
    <comment_count>2</comment_count>
      <attachid>58500</attachid>
    <who name="Adam Barth">abarth</who>
    <bug_when>2010-06-11 14:13:41 -0700</bug_when>
    <thetext>Comment on attachment 58500
patch

I like the idea.  The high-level question is whether we should move this over to the DocLoader side of things.  We can do that separately though.

WebCore/GNUmakefile.am:1423
 +      WebCore/loader/SinkDocument.h \
Bad indent here?

WebCore/loader/FrameLoader.cpp:181
 +      , m_subframeLoader(frame, client)
We usually don&apos;t give the subobjects pointers to the client.  They can get the client via m_frame-&gt;loader()-&gt;client().

WebCore/loader/FrameLoader.cpp:1268
 +  void FrameLoader::setIsComplete(bool isComplete)
This seems sort of low-level.

WebCore/loader/SubframeLoader.cpp:73
 +          || node-&gt;hasTagName(appletTag));
Should be on one line.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>237028</commentid>
    <comment_count>3</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2010-06-11 14:14:55 -0700</bug_when>
    <thetext>Ideally, Darin would have time to review this too.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>237066</commentid>
    <comment_count>4</comment_count>
    <who name="Nate Chapin">japhet</who>
    <bug_when>2010-06-11 15:20:05 -0700</bug_when>
    <thetext>(In reply to comment #2)
&gt; (From update of attachment 58500 [details])
&gt; I like the idea.  The high-level question is whether we should move this over to the DocLoader side of things.  We can do that separately though.
&gt; 
&gt; WebCore/GNUmakefile.am:1423
&gt;  +      WebCore/loader/SinkDocument.h \
&gt; Bad indent here?

That file appears to be mostly tabs with some 4-indent spacing mixed in.  I thought I left it as it was, but I can try to fix it if you like.

&gt; WebCore/loader/FrameLoader.cpp:1268
&gt;  +  void FrameLoader::setIsComplete(bool isComplete)
&gt; This seems sort of low-level.

I could make FrameLoader::started() non-private instead or move a chunk of this function back into FrameLoader.   Either of those sound more appealing?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>237087</commentid>
    <comment_count>5</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2010-06-11 15:40:18 -0700</bug_when>
    <thetext>&gt; I could make FrameLoader::started() non-private instead or move a chunk of this function back into FrameLoader.   Either of those sound more appealing?

I&apos;m not sure.  I&apos;d have to look into the details.  Use your best judgement here and I&apos;ll review your patch in detail later.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>237093</commentid>
    <comment_count>6</comment_count>
    <who name="Nate Chapin">japhet</who>
    <bug_when>2010-06-11 15:44:40 -0700</bug_when>
    <thetext>(In reply to comment #5)
&gt; &gt; I could make FrameLoader::started() non-private instead or move a chunk of this function back into FrameLoader.   Either of those sound more appealing?
&gt; 
&gt; I&apos;m not sure.  I&apos;d have to look into the details.  Use your best judgement here and I&apos;ll review your patch in detail later.

Ok, I think I&apos;m going to experiment with making started() public.  I probably won&apos;t have time to get a new patch out this afternoon and I&apos;m out on Monday, so I&apos;ll plan on posting a new version on Tuesday.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>238510</commentid>
    <comment_count>7</comment_count>
      <attachid>58810</attachid>
    <who name="Nate Chapin">japhet</who>
    <bug_when>2010-06-15 12:55:59 -0700</bug_when>
    <thetext>Created attachment 58810
patch #2</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>238515</commentid>
    <comment_count>8</comment_count>
    <who name="Early Warning System Bot">webkit-ews</who>
    <bug_when>2010-06-15 13:06:47 -0700</bug_when>
    <thetext>Attachment 58810 did not build on qt:
Build output: http://webkit-commit-queue.appspot.com/results/3321193</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>238540</commentid>
    <comment_count>9</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-06-15 14:13:02 -0700</bug_when>
    <thetext>Attachment 58810 did not build on chromium:
Build output: http://webkit-commit-queue.appspot.com/results/3298191</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>238544</commentid>
    <comment_count>10</comment_count>
      <attachid>58818</attachid>
    <who name="Nate Chapin">japhet</who>
    <bug_when>2010-06-15 14:21:01 -0700</bug_when>
    <thetext>Created attachment 58818
Fix qt compile issue</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>239814</commentid>
    <comment_count>11</comment_count>
      <attachid>58818</attachid>
    <who name="Adam Barth">abarth</who>
    <bug_when>2010-06-18 01:44:12 -0700</bug_when>
    <thetext>Comment on attachment 58818
Fix qt compile issue

I think you uploaded the wrong patch.  This one seems to be about image loads...</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>239957</commentid>
    <comment_count>12</comment_count>
      <attachid>59117</attachid>
    <who name="Nate Chapin">japhet</who>
    <bug_when>2010-06-18 08:56:58 -0700</bug_when>
    <thetext>Created attachment 59117
a relevant patch

Sorry about that.  Too many clients on this machine, grabbed from the wrong one.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>240393</commentid>
    <comment_count>13</comment_count>
      <attachid>59117</attachid>
    <who name="Adam Barth">abarth</who>
    <bug_when>2010-06-19 17:13:19 -0700</bug_when>
    <thetext>Comment on attachment 59117
a relevant patch

Wow, that&apos;s amazing.  I wish I could see the diff of what you changed in each function more easily.  In the past, I&apos;ve done these patches in two steps:

1) In place in FrameLoader.cpp so you can see how the code is changing.
2) Moving the next class to its own file.

In any case, it&apos;s crazy how there&apos;s practically zero communication from FrameLoader to SubframeLoader.  Nice patch.

WebCore/ChangeLog:11
 +          * Android.mk:
Darin would ask you for comments next to each of these entries to explain what you&apos;re doing.  I&apos;m bad at writing those comments too though.

WebCore/WebCore.base.exp: 
 +  __ZNK7WebCore11FrameLoader15containsPluginsEv
I&apos;m surprised you don&apos;t need to add the new version of this symbol as an export.  Please make sure this compiles on Mac before landing.

WebCore/GNUmakefile.am:1424
 +      WebCore/loader/SinkDocument.h \
Bad indent.  Please fix before landing.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>240930</commentid>
    <comment_count>14</comment_count>
    <who name="Nate Chapin">japhet</who>
    <bug_when>2010-06-21 15:51:03 -0700</bug_when>
    <thetext>http://trac.webkit.org/changeset/61584</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>58500</attachid>
            <date>2010-06-11 13:17:32 -0700</date>
            <delta_ts>2010-06-15 12:55:59 -0700</delta_ts>
            <desc>patch</desc>
            <filename>fl.txt</filename>
            <type>text/plain</type>
            <size>59375</size>
            <attacher name="Nate Chapin">japhet</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYktpdC9tYWMvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdC9tYWMvQ2hh
bmdlTG9nCShyZXZpc2lvbiA2MTAzMykKKysrIFdlYktpdC9tYWMvQ2hhbmdlTG9nCSh3b3JraW5n
IGNvcHkpCkBAIC0xLDMgKzEsMTQgQEAKKzIwMTAtMDYtMTEgIE5hdGUgQ2hhcGluICA8amFwaGV0
QGNocm9taXVtLm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKwor
ICAgICAgICBGcmFtZUxvYWRlciBjbGVhbnVwOiBTcGxpdCBoaWdoIGxldmVsIHN1YmZyYW1lIGFu
ZCBwbHVnaW4KKyAgICAgICAgbG9hZGluZyBmdW5jdGlvbnMgaW50byBhIHNlcGFyYXRlIGNsYXNz
LgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NDA0NTMK
KworICAgICAgICAqIFdlYlZpZXcvV2ViRnJhbWUubW06CisgICAgICAgICgtW1dlYkZyYW1lIF9j
YWNoZWFiaWxpdHlEaWN0aW9uYXJ5XSk6CisKIDIwMTAtMDYtMTAgIERhdmlkIEh5YXR0ICA8aHlh
dHRAYXBwbGUuY29tPgogCiAgICAgICAgIFJldmlld2VkIGJ5IEpvaG4gU3VsbGl2YW4uCkluZGV4
OiBXZWJLaXQvbWFjL1dlYlZpZXcvV2ViRnJhbWUubW0KPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0L21h
Yy9XZWJWaWV3L1dlYkZyYW1lLm1tCShyZXZpc2lvbiA2MDkxNykKKysrIFdlYktpdC9tYWMvV2Vi
Vmlldy9XZWJGcmFtZS5tbQkod29ya2luZyBjb3B5KQpAQCAtMTIyMiw3ICsxMjIyLDcgQEAKICAg
ICBpZiAoZG9jdW1lbnRMb2FkZXIgJiYgIWRvY3VtZW50TG9hZGVyLT5tYWluRG9jdW1lbnRFcnJv
cigpLmlzTnVsbCgpKQogICAgICAgICBbcmVzdWx0IHNldE9iamVjdDooTlNFcnJvciAqKWRvY3Vt
ZW50TG9hZGVyLT5tYWluRG9jdW1lbnRFcnJvcigpIGZvcktleTpXZWJGcmFtZU1haW5Eb2N1bWVu
dEVycm9yXTsKICAgICAgICAgCi0gICAgaWYgKGZyYW1lTG9hZGVyLT5jb250YWluc1BsdWdpbnMo
KSkKKyAgICBpZiAoZnJhbWVMb2FkZXItPnN1YmZyYW1lTG9hZGVyKCktPmNvbnRhaW5zUGx1Z2lu
cygpKQogICAgICAgICBbcmVzdWx0IHNldE9iamVjdDpbTlNOdW1iZXIgbnVtYmVyV2l0aEJvb2w6
WUVTXSBmb3JLZXk6V2ViRnJhbWVIYXNQbHVnaW5zXTsKICAgICAKICAgICBpZiAoRE9NV2luZG93
KiBkb21XaW5kb3cgPSBfcHJpdmF0ZS0+Y29yZUZyYW1lLT5kb21XaW5kb3coKSkgewpJbmRleDog
V2ViQ29yZS9kb20vRE9NSW1wbGVtZW50YXRpb24uY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUv
ZG9tL0RPTUltcGxlbWVudGF0aW9uLmNwcAkocmV2aXNpb24gNjA5MTcpCisrKyBXZWJDb3JlL2Rv
bS9ET01JbXBsZW1lbnRhdGlvbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMyOSw3ICszMjksNyBA
QAogI2VuZGlmCiAKICAgICBQbHVnaW5EYXRhKiBwbHVnaW5EYXRhID0gMDsKLSAgICBpZiAoZnJh
bWUgJiYgZnJhbWUtPnBhZ2UoKSAmJiBmcmFtZS0+bG9hZGVyKCktPmFsbG93UGx1Z2lucyhOb3RB
Ym91dFRvSW5zdGFudGlhdGVQbHVnaW4pKQorICAgIGlmIChmcmFtZSAmJiBmcmFtZS0+cGFnZSgp
ICYmIGZyYW1lLT5sb2FkZXIoKS0+c3ViZnJhbWVMb2FkZXIoKS0+YWxsb3dQbHVnaW5zKE5vdEFi
b3V0VG9JbnN0YW50aWF0ZVBsdWdpbikpCiAgICAgICAgIHBsdWdpbkRhdGEgPSBmcmFtZS0+cGFn
ZSgpLT5wbHVnaW5EYXRhKCk7CiAKICAgICAvLyBQREYgaXMgb25lIGltYWdlIHR5cGUgZm9yIHdo
aWNoIGEgcGx1Z2luIGNhbiBvdmVycmlkZSBidWlsdC1pbiBzdXBwb3J0LgpJbmRleDogV2ViQ29y
ZS9wbHVnaW5zL01pbWVUeXBlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsdWdpbnMvTWlt
ZVR5cGUuY3BwCShyZXZpc2lvbiA2MDkxNykKKysrIFdlYkNvcmUvcGx1Z2lucy9NaW1lVHlwZS5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTU2LDcgKzU2LDcgQEAKIFBhc3NSZWZQdHI8UGx1Z2luPiBN
aW1lVHlwZTo6ZW5hYmxlZFBsdWdpbigpIGNvbnN0CiB7CiAgICAgY29uc3QgUGFnZSogcCA9IG1f
cGx1Z2luRGF0YS0+cGFnZSgpOwotICAgIGlmICghcCB8fCAhcC0+bWFpbkZyYW1lKCktPmxvYWRl
cigpLT5hbGxvd1BsdWdpbnMoTm90QWJvdXRUb0luc3RhbnRpYXRlUGx1Z2luKSkKKyAgICBpZiAo
IXAgfHwgIXAtPm1haW5GcmFtZSgpLT5sb2FkZXIoKS0+c3ViZnJhbWVMb2FkZXIoKS0+YWxsb3dQ
bHVnaW5zKE5vdEFib3V0VG9JbnN0YW50aWF0ZVBsdWdpbikpCiAgICAgICAgIHJldHVybiAwOwog
CiAgICAgcmV0dXJuIFBsdWdpbjo6Y3JlYXRlKG1fcGx1Z2luRGF0YS5nZXQoKSwgbWltZUNsYXNz
SW5mbygpLnBsdWdpbkluZGV4KTsKSW5kZXg6IFdlYkNvcmUvV2ViQ29yZS5wcm8KPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gV2ViQ29yZS9XZWJDb3JlLnBybwkocmV2aXNpb24gNjA5MTcpCisrKyBXZWJDb3JlL1dl
YkNvcmUucHJvCSh3b3JraW5nIGNvcHkpCkBAIC03NTksNiArNzU5LDcgQEAKICAgICBsb2FkZXIv
UmVzb3VyY2VMb2FkZXIuY3BwIFwKICAgICBsb2FkZXIvUmVzb3VyY2VMb2FkTm90aWZpZXIuY3Bw
IFwKICAgICBsb2FkZXIvU2lua0RvY3VtZW50LmNwcCBcCisgICAgbG9hZGVyL1N1YmZyYW1lTG9h
ZGVyLmNwcCBcCiAgICAgbG9hZGVyL1N1YnJlc291cmNlTG9hZGVyLmNwcCBcCiAgICAgbG9hZGVy
L1RleHREb2N1bWVudC5jcHAgXAogICAgIGxvYWRlci9UZXh0UmVzb3VyY2VEZWNvZGVyLmNwcCBc
CkluZGV4OiBXZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL0NoYW5nZUxv
ZwkocmV2aXNpb24gNjEwMzMpCisrKyBXZWJDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpA
QCAtMSwzICsxLDUxIEBACisyMDEwLTA2LTExICBOYXRlIENoYXBpbiAgPGphcGhldEBjaHJvbWl1
bS5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAg
RnJhbWVMb2FkZXIgY2xlYW51cDogU3BsaXQgaGlnaCBsZXZlbCBzdWJmcmFtZSBhbmQgcGx1Z2lu
CisgICAgICAgIGxvYWRpbmcgZnVuY3Rpb25zIGludG8gYSBzZXBhcmF0ZSBjbGFzcy4KKyAgICAg
ICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTQwNDUzCisKKyAgICAg
ICAgUmVmYWN0b3Igb25seSwgbm8gbmV3IHRlc3RzLgorCisgICAgICAgICogQW5kcm9pZC5tazoK
KyAgICAgICAgKiBDTWFrZUxpc3RzLnR4dDoKKyAgICAgICAgKiBHTlVtYWtlZmlsZS5hbToKKyAg
ICAgICAgKiBXZWJDb3JlLmJhc2UuZXhwOgorICAgICAgICAqIFdlYkNvcmUuZ3lwaToKKyAgICAg
ICAgKiBXZWJDb3JlLnBybzoKKyAgICAgICAgKiBXZWJDb3JlLnZjcHJvai9XZWJDb3JlLnZjcHJv
ajoKKyAgICAgICAgKiBXZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAg
ICogZG9tL0RPTUltcGxlbWVudGF0aW9uLmNwcDoKKyAgICAgICAgKiBoaXN0b3J5L1BhZ2VDYWNo
ZS5jcHA6CisgICAgICAgICogaHRtbC9IVE1MRnJhbWVFbGVtZW50QmFzZS5jcHA6CisgICAgICAg
ICogaHRtbC9IVE1MTWVkaWFFbGVtZW50LmNwcDoKKyAgICAgICAgKiBsb2FkZXIvRnJhbWVMb2Fk
ZXIuY3BwOgorICAgICAgICAqIGxvYWRlci9GcmFtZUxvYWRlci5oOgorICAgICAgICAoV2ViQ29y
ZTo6RnJhbWVMb2FkZXI6OnN1YmZyYW1lTG9hZGVyKToKKyAgICAgICAgKiBsb2FkZXIvUGx1Z2lu
RG9jdW1lbnQuY3BwOgorICAgICAgICAqIGxvYWRlci9TdWJmcmFtZUxvYWRlci5jcHA6IEFkZGVk
LgorICAgICAgICAoV2ViQ29yZTo6U3ViZnJhbWVMb2FkZXI6OlN1YmZyYW1lTG9hZGVyKToKKyAg
ICAgICAgKFdlYkNvcmU6OnRvUGx1Z0luRWxlbWVudCk6CisgICAgICAgIChXZWJDb3JlOjpTdWJm
cmFtZUxvYWRlcjo6Y2xlYXIpOgorICAgICAgICAoV2ViQ29yZTo6U3ViZnJhbWVMb2FkZXI6OnJl
cXVlc3RGcmFtZSk6CisgICAgICAgIChXZWJDb3JlOjpTdWJmcmFtZUxvYWRlcjo6cmVxdWVzdE9i
amVjdCk6CisgICAgICAgIChXZWJDb3JlOjpGcmFtZUxvYWRlcjo6bG9hZE1lZGlhUGxheWVyUHJv
eHlQbHVnaW4pOgorICAgICAgICAoV2ViQ29yZTo6U3ViZnJhbWVMb2FkZXI6OmNyZWF0ZUphdmFB
cHBsZXRXaWRnZXQpOgorICAgICAgICAoV2ViQ29yZTo6U3ViZnJhbWVMb2FkZXI6OmxvYWRTdWJm
cmFtZSk6CisgICAgICAgIChXZWJDb3JlOjpTdWJmcmFtZUxvYWRlcjo6YWxsb3dQbHVnaW5zKToK
KyAgICAgICAgKFdlYkNvcmU6OlN1YmZyYW1lTG9hZGVyOjpzaG91bGRVc2VQbHVnaW4pOgorICAg
ICAgICAoV2ViQ29yZTo6U3ViZnJhbWVMb2FkZXI6OmxvYWRQbHVnaW4pOgorICAgICAgICAoV2Vi
Q29yZTo6U3ViZnJhbWVMb2FkZXI6OmNvbXBsZXRlVVJMKToKKyAgICAgICAgKiBsb2FkZXIvU3Vi
ZnJhbWVMb2FkZXIuaDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpTdWJmcmFtZUxvYWRlcjo6
Y29udGFpbnNQbHVnaW5zKToKKyAgICAgICAgKiBwYWdlL1BhZ2UuY3BwOgorICAgICAgICAqIHBh
Z2UvWFNTQXVkaXRvci5oOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3dpbmNlL01lZGlh
UGxheWVyUHJveHkuY3BwOgorICAgICAgICAqIHBsdWdpbnMvTWltZVR5cGUuY3BwOgorICAgICAg
ICAqIHJlbmRlcmluZy9SZW5kZXJBcHBsZXQuY3BwOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5k
ZXJFbWJlZGRlZE9iamVjdC5jcHA6CisKIDIwMTAtMDYtMTEgIEFudG9uIE11aGluICA8YW50b25t
QGNocm9taXVtLm9yZz4KIAogICAgICAgICBSZXZpZXdlZCBieSBBZGFtIEJhcnRoLgpJbmRleDog
V2ViQ29yZS9XZWJDb3JlLnZjcHJvai9XZWJDb3JlLnZjcHJvago9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJD
b3JlL1dlYkNvcmUudmNwcm9qL1dlYkNvcmUudmNwcm9qCShyZXZpc2lvbiA2MDkxNykKKysrIFdl
YkNvcmUvV2ViQ29yZS52Y3Byb2ovV2ViQ29yZS52Y3Byb2oJKHdvcmtpbmcgY29weSkKQEAgLTIy
MTQ5LDYgKzIyMTQ5LDE0IEBACiAJCQkJPg0KIAkJCTwvRmlsZT4NCiAJCQk8RmlsZQ0KKwkJCQlS
ZWxhdGl2ZVBhdGg9Ii4uXGxvYWRlclxTdWJmcmFtZUxvYWRlci5jcHAiDQorCQkJCT4NCisJCQk8
L0ZpbGU+DQorCQkJPEZpbGUNCisJCQkJUmVsYXRpdmVQYXRoPSIuLlxsb2FkZXJcU3ViZnJhbWVM
b2FkZXIuaCINCisJCQkJPg0KKwkJCTwvRmlsZT4NCisJCQk8RmlsZQ0KIAkJCQlSZWxhdGl2ZVBh
dGg9Ii4uXGxvYWRlclxTdWJyZXNvdXJjZUxvYWRlci5jcHAiDQogCQkJCT4NCiAJCQk8L0ZpbGU+
DQpJbmRleDogV2ViQ29yZS9XZWJDb3JlLmJhc2UuZXhwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUv
V2ViQ29yZS5iYXNlLmV4cAkocmV2aXNpb24gNjA5MTcpCisrKyBXZWJDb3JlL1dlYkNvcmUuYmFz
ZS5leHAJKHdvcmtpbmcgY29weSkKQEAgLTc5NCw3ICs3OTQsNiBAQAogX19aTks3V2ViQ29yZTEx
Q2FjaGVkSW1hZ2U1aW1hZ2VFdgogX19aTks3V2ViQ29yZTExRnJhbWVMb2FkZXIxMGlzQ29tcGxl
dGVFdgogX19aTks3V2ViQ29yZTExRnJhbWVMb2FkZXIxNGZyYW1lSGFzTG9hZGVkRXYKLV9fWk5L
N1dlYkNvcmUxMUZyYW1lTG9hZGVyMTVjb250YWluc1BsdWdpbnNFdgogX19aTks3V2ViQ29yZTEx
RnJhbWVMb2FkZXIxNWZpcnN0TGF5b3V0RG9uZUV2CiBfX1pOSzdXZWJDb3JlMTFGcmFtZUxvYWRl
cjE2b3V0Z29pbmdSZWZlcnJlckV2CiBfX1pOSzdXZWJDb3JlMTFGcmFtZUxvYWRlcjIwYWN0aXZl
RG9jdW1lbnRMb2FkZXJFdgpJbmRleDogV2ViQ29yZS9oaXN0b3J5L1BhZ2VDYWNoZS5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gV2ViQ29yZS9oaXN0b3J5L1BhZ2VDYWNoZS5jcHAJKHJldmlzaW9uIDYwOTE3
KQorKysgV2ViQ29yZS9oaXN0b3J5L1BhZ2VDYWNoZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEw
Miw3ICsxMDIsNyBAQAogICAgICAgICAgICAgUENMT0coIiAgIC1NYWluIGRvY3VtZW50IGhhcyBh
biBlcnJvciIpOwogICAgICAgICAgICAgY2Fubm90Q2FjaGUgPSB0cnVlOwogICAgICAgICB9Ci0g
ICAgICAgIGlmIChmcmFtZS0+bG9hZGVyKCktPmNvbnRhaW5zUGx1Z2lucygpKSB7CisgICAgICAg
IGlmIChmcmFtZS0+bG9hZGVyKCktPnN1YmZyYW1lTG9hZGVyKCktPmNvbnRhaW5zUGx1Z2lucygp
KSB7CiAgICAgICAgICAgICBQQ0xPRygiICAgLUZyYW1lIGNvbnRhaW5zIHBsdWdpbnMiKTsKICAg
ICAgICAgICAgIGNhbm5vdENhY2hlID0gdHJ1ZTsKICAgICAgICAgfQpAQCAtMjQ2LDcgKzI0Niw3
IEBACiAgICAgICAgIC8vIChvYmplY3RzIGNyZWF0ZWQgYnkgdGhlIHBsdWctaW4pLiBTaW5jZSB0
aGVyZSBpcyBubyB3YXkgdG8gcGF1c2UvcmVzdW1lIGEgTmV0c2NhcGUgcGx1Zy1pbiwKICAgICAg
ICAgLy8gdGhleSB3b3VsZCBuZWVkIHRvIGJlIGRlc3Ryb3llZCBhbmQgdGhlbiByZWNyZWF0ZWQs
IGFuZCB0aGVyZSBpcyBubyB3YXkgdGhhdCB3ZSBjYW4gcmVjcmVhdGUKICAgICAgICAgLy8gdGhl
IHJpZ2h0IE5QT2JqZWN0cy4gU2VlIDxyZGFyOi8vcHJvYmxlbS81MTk3MDQxPiBmb3IgbW9yZSBp
bmZvcm1hdGlvbi4KLSAgICAgICAgJiYgIWZyYW1lLT5sb2FkZXIoKS0+Y29udGFpbnNQbHVnaW5z
KCkKKyAgICAgICAgJiYgIWZyYW1lLT5sb2FkZXIoKS0+c3ViZnJhbWVMb2FkZXIoKS0+Y29udGFp
bnNQbHVnaW5zKCkKICAgICAgICAgJiYgIWZyYW1lLT5sb2FkZXIoKS0+dXJsKCkucHJvdG9jb2xJ
cygiaHR0cHMiKQogICAgICAgICAmJiAoIWZyYW1lLT5kb21XaW5kb3coKSB8fCAhZnJhbWUtPmRv
bVdpbmRvdygpLT5oYXNFdmVudExpc3RlbmVycyhldmVudE5hbWVzKCkudW5sb2FkRXZlbnQpKQog
I2lmIEVOQUJMRShEQVRBQkFTRSkKSW5kZXg6IFdlYkNvcmUvcGFnZS9YU1NBdWRpdG9yLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gV2ViQ29yZS9wYWdlL1hTU0F1ZGl0b3IuaAkocmV2aXNpb24gNjA5MTcpCisr
KyBXZWJDb3JlL3BhZ2UvWFNTQXVkaXRvci5oCSh3b3JraW5nIGNvcHkpCkBAIC02Nyw3ICs2Nyw3
IEBACiAgICAgLy8gKiBTY3JpcHRFdmVudExpc3RlbmVyOjpjcmVhdGVBdHRyaWJ1dGVFdmVudExp
c3RlbmVyIC0gdXNlZCB0byBjcmVhdGUgSmF2YVNjcmlwdCBldmVudCBoYW5kbGVycy4KICAgICAv
LyAqIEhUTUxCYXNlRWxlbWVudDo6cHJvY2VzcyAtIHVzZWQgdG8gc2V0IHRoZSBkb2N1bWVudCBi
YXNlIFVSTC4KICAgICAvLyAqIEhUTUxUb2tlbml6ZXI6OnBhcnNlVGFnIC0gdXNlZCB0byBsb2Fk
IGV4dGVybmFsIEphdmFTY3JpcHQgc2NyaXB0cy4KLSAgICAvLyAqIEZyYW1lTG9hZGVyOjpyZXF1
ZXN0T2JqZWN0IC0gdXNlZCB0byBsb2FkIDxvYmplY3Q+LzxlbWJlZD4gZWxlbWVudHMuCisgICAg
Ly8gKiBTdWJmcmFtZUxvYWRlcjo6cmVxdWVzdE9iamVjdCAtIHVzZWQgdG8gbG9hZCA8b2JqZWN0
Pi88ZW1iZWQ+IGVsZW1lbnRzLgogICAgIC8vCiAgICAgY2xhc3MgWFNTQXVkaXRvciA6IHB1Ymxp
YyBOb25jb3B5YWJsZSB7CiAgICAgcHVibGljOgpAQCAtOTUsNyArOTUsNyBAQAogICAgICAgICAv
LyBEZXRlcm1pbmVzIHdoZXRoZXIgb2JqZWN0IHNob3VsZCBiZSBsb2FkZWQgYmFzZWQgb24gdGhl
IGNvbnRlbnQgb2YKICAgICAgICAgLy8gYW55IHVzZXItc3VibWl0dGVkIGRhdGEuCiAgICAgICAg
IC8vCi0gICAgICAgIC8vIFRoaXMgbWV0aG9kIGlzIGNhbGxlZCBieSBGcmFtZUxvYWRlcjo6cmVx
dWVzdE9iamVjdC4KKyAgICAgICAgLy8gVGhpcyBtZXRob2QgaXMgY2FsbGVkIGJ5IFN1YmZyYW1l
TG9hZGVyOjpyZXF1ZXN0T2JqZWN0LgogICAgICAgICBib29sIGNhbkxvYWRPYmplY3QoY29uc3Qg
U3RyaW5nJiB1cmwpIGNvbnN0OwogCiAgICAgICAgIC8vIERldGVybWluZXMgd2hldGhlciB0aGUg
YmFzZSBVUkwgc2hvdWxkIGJlIGNoYW5nZWQgYmFzZWQgb24gdGhlIGNvbnRlbnQKSW5kZXg6IFdl
YkNvcmUvcGFnZS9QYWdlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BhZ2UvUGFnZS5jcHAJ
KHJldmlzaW9uIDYwOTE3KQorKysgV2ViQ29yZS9wYWdlL1BhZ2UuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0zODYsNyArMzg2LDcgQEAKICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAKICAg
ICAgICAgZm9yIChGcmFtZSogZnJhbWUgPSAoKml0KS0+bWFpbkZyYW1lKCk7IGZyYW1lOyBmcmFt
ZSA9IGZyYW1lLT50cmVlKCktPnRyYXZlcnNlTmV4dCgpKSB7Ci0gICAgICAgICAgICBpZiAoZnJh
bWUtPmxvYWRlcigpLT5jb250YWluc1BsdWdpbnMoKSkKKyAgICAgICAgICAgIGlmIChmcmFtZS0+
bG9hZGVyKCktPnN1YmZyYW1lTG9hZGVyKCktPmNvbnRhaW5zUGx1Z2lucygpKQogICAgICAgICAg
ICAgICAgIGZyYW1lc05lZWRpbmdSZWxvYWQuYXBwZW5kKGZyYW1lKTsKICAgICAgICAgfQogICAg
IH0KQEAgLTM5Nyw3ICszOTcsNyBAQAogCiBQbHVnaW5EYXRhKiBQYWdlOjpwbHVnaW5EYXRhKCkg
Y29uc3QKIHsKLSAgICBpZiAoIW1haW5GcmFtZSgpLT5sb2FkZXIoKS0+YWxsb3dQbHVnaW5zKE5v
dEFib3V0VG9JbnN0YW50aWF0ZVBsdWdpbikpCisgICAgaWYgKCFtYWluRnJhbWUoKS0+bG9hZGVy
KCktPnN1YmZyYW1lTG9hZGVyKCktPmFsbG93UGx1Z2lucyhOb3RBYm91dFRvSW5zdGFudGlhdGVQ
bHVnaW4pKQogICAgICAgICByZXR1cm4gMDsKICAgICBpZiAoIW1fcGx1Z2luRGF0YSkKICAgICAg
ICAgbV9wbHVnaW5EYXRhID0gUGx1Z2luRGF0YTo6Y3JlYXRlKHRoaXMpOwpJbmRleDogV2ViQ29y
ZS9HTlVtYWtlZmlsZS5hbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL0dOVW1ha2VmaWxlLmFtCShy
ZXZpc2lvbiA2MDkxNykKKysrIFdlYkNvcmUvR05VbWFrZWZpbGUuYW0JKHdvcmtpbmcgY29weSkK
QEAgLTE0MjEsNiArMTQyMSw4IEBACiAJV2ViQ29yZS9sb2FkZXIvUmVzb3VyY2VMb2FkTm90aWZp
ZXIuaCBcCiAgICAgV2ViQ29yZS9sb2FkZXIvU2lua0RvY3VtZW50LmNwcCBcCiAgICAgV2ViQ29y
ZS9sb2FkZXIvU2lua0RvY3VtZW50LmggXAorCVdlYkNvcmUvbG9hZGVyL1N1YmZyYW1lTG9hZGVy
LmNwcCBcCisJV2ViQ29yZS9sb2FkZXIvU3ViZnJhbWVMb2FkZXIuaCBcCiAJV2ViQ29yZS9sb2Fk
ZXIvU3VicmVzb3VyY2VMb2FkZXIuY3BwIFwKIAlXZWJDb3JlL2xvYWRlci9TdWJyZXNvdXJjZUxv
YWRlci5oIFwKIAlXZWJDb3JlL2xvYWRlci9TdWJyZXNvdXJjZUxvYWRlckNsaWVudC5oIFwKSW5k
ZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luY2UvTWVkaWFQbGF5ZXJQcm94eS5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW5jZS9NZWRpYVBsYXll
clByb3h5LmNwcAkocmV2aXNpb24gNjA5MTcpCisrKyBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L3dpbmNlL01lZGlhUGxheWVyUHJveHkuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMDksNyArMTA5
LDcgQEAKICAgICAgICAgfQogICAgIH0KICAgICBzZXJ2aWNlVHlwZSA9ICJhcHBsaWNhdGlvbi94
LW1wbGF5ZXIyIjsKLSAgICBmcmFtZS0+bG9hZGVyKCktPnJlcXVlc3RPYmplY3Qoc3RhdGljX2Nh
c3Q8UmVuZGVyUGFydE9iamVjdCo+KGVsZW1lbnQtPnJlbmRlcmVyKCkpLCB1cmwsIG51bGxBdG9t
LCBzZXJ2aWNlVHlwZSwgcGFyYW1OYW1lcywgcGFyYW1WYWx1ZXMpOworICAgIGZyYW1lLT5sb2Fk
ZXIoKS0+c3ViZnJhbWVMb2FkZXIoKS0+cmVxdWVzdE9iamVjdChzdGF0aWNfY2FzdDxSZW5kZXJQ
YXJ0T2JqZWN0Kj4oZWxlbWVudC0+cmVuZGVyZXIoKSksIHVybCwgbnVsbEF0b20sIHNlcnZpY2VU
eXBlLCBwYXJhbU5hbWVzLCBwYXJhbVZhbHVlcyk7CiAgICAgbV9pbml0ID0gdHJ1ZTsKIAogfQpJ
bmRleDogV2ViQ29yZS9XZWJDb3JlLmd5cGkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9XZWJDb3Jl
Lmd5cGkJKHJldmlzaW9uIDYwOTE3KQorKysgV2ViQ29yZS9XZWJDb3JlLmd5cGkJKHdvcmtpbmcg
Y29weSkKQEAgLTE4MjksNiArMTgyOSw4IEBACiAgICAgICAgICAgICAnbG9hZGVyL1Jlc291cmNl
TG9hZE5vdGlmaWVyLmgnLAogICAgICAgICAgICAgJ2xvYWRlci9TaW5rRG9jdW1lbnQuY3BwJywK
ICAgICAgICAgICAgICdsb2FkZXIvU2lua0RvY3VtZW50LmgnLAorICAgICAgICAgICAgJ2xvYWRl
ci9TdWJmcmFtZUxvYWRlci5jcHAnLAorICAgICAgICAgICAgJ2xvYWRlci9TdWJmcmFtZUxvYWRl
ci5oJywKICAgICAgICAgICAgICdsb2FkZXIvU3VicmVzb3VyY2VMb2FkZXIuY3BwJywKICAgICAg
ICAgICAgICdsb2FkZXIvU3VicmVzb3VyY2VMb2FkZXIuaCcsCiAgICAgICAgICAgICAnbG9hZGVy
L1N1YnJlc291cmNlTG9hZGVyQ2xpZW50LmgnLApJbmRleDogV2ViQ29yZS9odG1sL0hUTUxNZWRp
YUVsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvaHRtbC9IVE1MTWVkaWFFbGVtZW50
LmNwcAkocmV2aXNpb24gNjA5MTcpCisrKyBXZWJDb3JlL2h0bWwvSFRNTE1lZGlhRWxlbWVudC5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTE5OTIsNyArMTk5Miw3IEBACiAgICAgCiAgICAgLy8gSGFu
ZyBvbnRvIHRoZSBwcm94eSB3aWRnZXQgc28gaXQgd29uJ3QgYmUgZGVzdHJveWVkIGlmIHRoZSBw
bHVnLWluIGlzIHNldCB0bwogICAgIC8vIGRpc3BsYXk6bm9uZQotICAgIG1fcHJveHlXaWRnZXQg
PSBsb2FkZXItPmxvYWRNZWRpYVBsYXllclByb3h5UGx1Z2luKHRoaXMsIHVybCwgcGFyYW1OYW1l
cywgcGFyYW1WYWx1ZXMpOworICAgIG1fcHJveHlXaWRnZXQgPSBsb2FkZXItPnN1YmZyYW1lTG9h
ZGVyKCktPmxvYWRNZWRpYVBsYXllclByb3h5UGx1Z2luKHRoaXMsIHVybCwgcGFyYW1OYW1lcywg
cGFyYW1WYWx1ZXMpOwogICAgIGlmIChtX3Byb3h5V2lkZ2V0KQogICAgICAgICBtX25lZWRXaWRn
ZXRVcGRhdGUgPSBmYWxzZTsKIH0KSW5kZXg6IFdlYkNvcmUvaHRtbC9IVE1MRnJhbWVFbGVtZW50
QmFzZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9odG1sL0hUTUxGcmFtZUVsZW1lbnRCYXNl
LmNwcAkocmV2aXNpb24gNjA5MTcpCisrKyBXZWJDb3JlL2h0bWwvSFRNTEZyYW1lRWxlbWVudEJh
c2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMDQsNyArMTA0LDcgQEAKICAgICBpZiAoIXBhcmVu
dEZyYW1lKQogICAgICAgICByZXR1cm47CiAKLSAgICBwYXJlbnRGcmFtZS0+bG9hZGVyKCktPnJl
cXVlc3RGcmFtZSh0aGlzLCBtX1VSTCwgbV9mcmFtZU5hbWUsIGxvY2tIaXN0b3J5LCBsb2NrQmFj
a0ZvcndhcmRMaXN0KTsKKyAgICBwYXJlbnRGcmFtZS0+bG9hZGVyKCktPnN1YmZyYW1lTG9hZGVy
KCktPnJlcXVlc3RGcmFtZSh0aGlzLCBtX1VSTCwgbV9mcmFtZU5hbWUsIGxvY2tIaXN0b3J5LCBs
b2NrQmFja0ZvcndhcmRMaXN0KTsKICAgICBpZiAoY29udGVudEZyYW1lKCkpCiAgICAgICAgIGNv
bnRlbnRGcmFtZSgpLT5zZXRJblZpZXdTb3VyY2VNb2RlKHZpZXdTb3VyY2VNb2RlKCkpOwogfQpJ
bmRleDogV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQXBwbGV0LmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBX
ZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJBcHBsZXQuY3BwCShyZXZpc2lvbiA2MDkxNykKKysrIFdl
YkNvcmUvcmVuZGVyaW5nL1JlbmRlckFwcGxldC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTcyLDcg
KzcyLDcgQEAKIAogICAgIEZyYW1lKiBmcmFtZSA9IHRoaXMtPmZyYW1lKCk7CiAgICAgQVNTRVJU
KGZyYW1lKTsKLSAgICBzZXRXaWRnZXQoZnJhbWUtPmxvYWRlcigpLT5jcmVhdGVKYXZhQXBwbGV0
V2lkZ2V0KEludFNpemUoY29udGVudFdpZHRoLCBjb250ZW50SGVpZ2h0KSwgZWxlbWVudCwgbV9h
cmdzKSk7CisgICAgc2V0V2lkZ2V0KGZyYW1lLT5sb2FkZXIoKS0+c3ViZnJhbWVMb2FkZXIoKS0+
Y3JlYXRlSmF2YUFwcGxldFdpZGdldChJbnRTaXplKGNvbnRlbnRXaWR0aCwgY29udGVudEhlaWdo
dCksIGVsZW1lbnQsIG1fYXJncykpOwogfQogCiB2b2lkIFJlbmRlckFwcGxldDo6bGF5b3V0KCkK
SW5kZXg6IFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckVtYmVkZGVkT2JqZWN0LmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJFbWJlZGRlZE9iamVjdC5jcHAJKHJldmlz
aW9uIDYwOTE3KQorKysgV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyRW1iZWRkZWRPYmplY3QuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0xNjUsNyArMTY1LDcgQEAKICAgICBWZWN0b3I8U3RyaW5nPiBw
YXJhbVZhbHVlczsKICAgICBGcmFtZSogZnJhbWUgPSBmcmFtZVZpZXcoKS0+ZnJhbWUoKTsKIAot
ICAgIC8vIFRoZSBjYWxscyB0byBGcmFtZUxvYWRlcjo6cmVxdWVzdE9iamVjdCB3aXRoaW4gdGhp
cyBmdW5jdGlvbiBjYW4gcmVzdWx0IGluIGEgcGx1Zy1pbiBiZWluZyBpbml0aWFsaXplZC4KKyAg
ICAvLyBUaGUgY2FsbHMgdG8gU3ViZnJhbWVMb2FkZXI6OnJlcXVlc3RPYmplY3Qgd2l0aGluIHRo
aXMgZnVuY3Rpb24gY2FuIHJlc3VsdCBpbiBhIHBsdWctaW4gYmVpbmcgaW5pdGlhbGl6ZWQuCiAg
ICAgLy8gVGhpcyBjYW4gcnVuIGNhdXNlIGFyYml0cmFyeSBKYXZhU2NyaXB0IHRvIHJ1biBhbmQg
bWF5IHJlc3VsdCBpbiB0aGlzIFJlbmRlck9iamVjdCBiZWluZyBkZXRhY2hlZCBmcm9tCiAgICAg
Ly8gdGhlIHJlbmRlciB0cmVlIGFuZCBkZXN0cm95ZWQsIGNhdXNpbmcgYSBjcmFzaCBsaWtlIDxy
ZGFyOi8vcHJvYmxlbS82OTU0NTQ2Pi4gIEJ5IGV4dGVuZGluZyBvdXIgbGlmZXRpbWUKICAgICAv
LyBhcnRpZmljYWxseSB0byBlbnN1cmUgdGhhdCB3ZSByZW1haW4gYWxpdmUgZm9yIHRoZSBkdXJh
dGlvbiBvZiBwbHVnLWluIGluaXRpYWxpemF0aW9uLgpAQCAtMjg0LDcgKzI4NCw3IEBACiAgICAg
ICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAKLSAgICAgICAgYm9vbCBzdWNjZXNzID0g
b2JqZWN0RWxlbWVudC0+ZGlzcGF0Y2hCZWZvcmVMb2FkRXZlbnQodXJsKSAmJiBmcmFtZS0+bG9h
ZGVyKCktPnJlcXVlc3RPYmplY3QodGhpcywgdXJsLCBvYmplY3RFbGVtZW50LT5nZXRBdHRyaWJ1
dGUobmFtZUF0dHIpLCBzZXJ2aWNlVHlwZSwgcGFyYW1OYW1lcywgcGFyYW1WYWx1ZXMpOworICAg
ICAgICBib29sIHN1Y2Nlc3MgPSBvYmplY3RFbGVtZW50LT5kaXNwYXRjaEJlZm9yZUxvYWRFdmVu
dCh1cmwpICYmIGZyYW1lLT5sb2FkZXIoKS0+c3ViZnJhbWVMb2FkZXIoKS0+cmVxdWVzdE9iamVj
dCh0aGlzLCB1cmwsIG9iamVjdEVsZW1lbnQtPmdldEF0dHJpYnV0ZShuYW1lQXR0ciksIHNlcnZp
Y2VUeXBlLCBwYXJhbU5hbWVzLCBwYXJhbVZhbHVlcyk7CiAgICAgICAgIGlmICghc3VjY2VzcyAm
JiBtX2hhc0ZhbGxiYWNrQ29udGVudCkKICAgICAgICAgICAgIG9iamVjdEVsZW1lbnQtPnJlbmRl
ckZhbGxiYWNrQ29udGVudCgpOwogCkBAIC0zMTksNyArMzE5LDcgQEAKICAgICAgICAgfQogCiAg
ICAgICAgIGlmIChlbWJlZEVsZW1lbnQtPmRpc3BhdGNoQmVmb3JlTG9hZEV2ZW50KHVybCkpCi0g
ICAgICAgICAgICBmcmFtZS0+bG9hZGVyKCktPnJlcXVlc3RPYmplY3QodGhpcywgdXJsLCBlbWJl
ZEVsZW1lbnQtPmdldEF0dHJpYnV0ZShuYW1lQXR0ciksIHNlcnZpY2VUeXBlLCBwYXJhbU5hbWVz
LCBwYXJhbVZhbHVlcyk7CisgICAgICAgICAgICBmcmFtZS0+bG9hZGVyKCktPnN1YmZyYW1lTG9h
ZGVyKCktPnJlcXVlc3RPYmplY3QodGhpcywgdXJsLCBlbWJlZEVsZW1lbnQtPmdldEF0dHJpYnV0
ZShuYW1lQXR0ciksIHNlcnZpY2VUeXBlLCBwYXJhbU5hbWVzLCBwYXJhbVZhbHVlcyk7CiAgICAg
fQogI2lmIEVOQUJMRShQTFVHSU5fUFJPWFlfRk9SX1ZJREVPKSAgICAgICAgCiAgICAgZWxzZSBp
ZiAobm9kZSgpLT5oYXNUYWdOYW1lKHZpZGVvVGFnKSB8fCBub2RlKCktPmhhc1RhZ05hbWUoYXVk
aW9UYWcpKSB7CkBAIC0zMjgsNyArMzI4LDcgQEAKIAogICAgICAgICBtZWRpYUVsZW1lbnQtPmdl
dFBsdWdpblByb3h5UGFyYW1zKGt1cmwsIHBhcmFtTmFtZXMsIHBhcmFtVmFsdWVzKTsKICAgICAg
ICAgbWVkaWFFbGVtZW50LT5zZXROZWVkV2lkZ2V0VXBkYXRlKGZhbHNlKTsKLSAgICAgICAgZnJh
bWUtPmxvYWRlcigpLT5sb2FkTWVkaWFQbGF5ZXJQcm94eVBsdWdpbihub2RlKCksIGt1cmwsIHBh
cmFtTmFtZXMsIHBhcmFtVmFsdWVzKTsKKyAgICAgICAgZnJhbWUtPmxvYWRlcigpLT5zdWJmcmFt
ZUxvYWRlcigpLT5sb2FkTWVkaWFQbGF5ZXJQcm94eVBsdWdpbihub2RlKCksIGt1cmwsIHBhcmFt
TmFtZXMsIHBhcmFtVmFsdWVzKTsKICAgICB9CiAjZW5kaWYKIH0KSW5kZXg6IFdlYkNvcmUvQ01h
a2VMaXN0cy50eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9DTWFrZUxpc3RzLnR4dAkocmV2aXNp
b24gNjA5MTcpCisrKyBXZWJDb3JlL0NNYWtlTGlzdHMudHh0CSh3b3JraW5nIGNvcHkpCkBAIC0x
MDU0LDYgKzEwNTQsNyBAQAogICAgIGxvYWRlci9SZXNvdXJjZUxvYWROb3RpZmllci5jcHAKICAg
ICBsb2FkZXIvUmVzb3VyY2VMb2FkZXIuY3BwCiAgICAgbG9hZGVyL1NpbmtEb2N1bWVudC5jcHAK
KyAgICBsb2FkZXIvU3ViZnJhbWVMb2FkZXIuY3BwCiAgICAgbG9hZGVyL1N1YnJlc291cmNlTG9h
ZGVyLmNwcAogICAgIGxvYWRlci9UZXh0RG9jdW1lbnQuY3BwCiAgICAgbG9hZGVyL1RleHRSZXNv
dXJjZURlY29kZXIuY3BwCkluZGV4OiBXZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3Qu
cGJ4cHJvago9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3Qu
cGJ4cHJvagkocmV2aXNpb24gNjA5MTcpCisrKyBXZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3By
b2plY3QucGJ4cHJvagkod29ya2luZyBjb3B5KQpAQCAtNDg2NSw2ICs0ODY1LDggQEAKIAkJQ0U1
NEZEMzgxMDE2RDlBNjAwOEI0NEM4IC8qIFNjcmlwdFNvdXJjZVByb3ZpZGVyLmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBDRTU0RkQzNzEwMTZEOUE2MDA4
QjQ0QzggLyogU2NyaXB0U291cmNlUHJvdmlkZXIuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRF
UyA9IChQcml2YXRlLCApOyB9OyB9OwogCQlDRUY0MThDRTExNzk2NzhDMDA5RDExMkMgLyogVmll
d3BvcnRBcmd1bWVudHMuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gQ0VGNDE4Q0MxMTc5Njc4QzAwOUQxMTJDIC8qIFZpZXdwb3J0QXJndW1lbnRzLmNw
cCAqLzsgfTsKIAkJQ0VGNDE4Q0YxMTc5Njc4QzAwOUQxMTJDIC8qIFZpZXdwb3J0QXJndW1lbnRz
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBDRUY0MThD
RDExNzk2NzhDMDA5RDExMkMgLyogVmlld3BvcnRBcmd1bWVudHMuaCAqLzsgfTsKKwkJRDAwMEVE
MjcxMUMxQjlDRDAwQzQ3NzI2IC8qIFN1YmZyYW1lTG9hZGVyLmNwcCBpbiBTb3VyY2VzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEQwMDBFRDI1MTFDMUI5Q0QwMEM0NzcyNiAv
KiBTdWJmcmFtZUxvYWRlci5jcHAgKi87IH07CisJCUQwMDBFRDI4MTFDMUI5Q0QwMEM0NzcyNiAv
KiBTdWJmcmFtZUxvYWRlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gRDAwMEVEMjYxMUMxQjlDRDAwQzQ3NzI2IC8qIFN1YmZyYW1lTG9hZGVyLmggKi87
IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJRDAxQTI3QUQx
MEM5QkZEODAwMDI2QTQyIC8qIFNwYWNlU3BsaXRTdHJpbmcuY3BwIGluIFNvdXJjZXMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRDAxQTI3QUIxMEM5QkZEODAwMDI2QTQyIC8q
IFNwYWNlU3BsaXRTdHJpbmcuY3BwICovOyB9OwogCQlEMDFBMjdBRTEwQzlCRkQ4MDAwMjZBNDIg
LyogU3BhY2VTcGxpdFN0cmluZy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gRDAxQTI3QUMxMEM5QkZEODAwMDI2QTQyIC8qIFNwYWNlU3BsaXRTdHJpbmcu
aCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQlEMDVD
RUQyOTBBNDBCQjJDMDBDNUFGMzggLyogRm9ybWF0QmxvY2tDb21tYW5kLmNwcCBpbiBTb3VyY2Vz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEQwNUNFRDI3MEE0MEJCMkMwMEM1
QUYzOCAvKiBGb3JtYXRCbG9ja0NvbW1hbmQuY3BwICovOyB9OwpAQCAtMTA0MTYsNiArMTA0MTgs
OCBAQAogCQlDRTU0RkQzNzEwMTZEOUE2MDA4QjQ0QzggLyogU2NyaXB0U291cmNlUHJvdmlkZXIu
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU2NyaXB0U291cmNlUHJvdmlkZXIu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQ0VGNDE4Q0MxMTc5Njc4QzAwOUQxMTJD
IC8qIFZpZXdwb3J0QXJndW1lbnRzLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsg
cGF0aCA9IFZpZXdwb3J0QXJndW1lbnRzLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJQ0VGNDE4Q0QxMTc5Njc4QzAwOUQxMTJDIC8qIFZpZXdwb3J0QXJndW1lbnRzLmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFZpZXdwb3J0QXJndW1lbnRzLmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CisJCUQwMDBFRDI1MTFDMUI5Q0QwMEM0NzcyNiAvKiBTdWJmcmFt
ZUxvYWRlci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBTdWJmcmFt
ZUxvYWRlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUQwMDBFRDI2MTFDMUI5
Q0QwMEM0NzcyNiAvKiBTdWJmcmFtZUxvYWRlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBTdWJmcmFtZUxvYWRlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlE
MDFBMjdBQjEwQzlCRkQ4MDAwMjZBNDIgLyogU3BhY2VTcGxpdFN0cmluZy5jcHAgKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBTcGFjZVNwbGl0U3RyaW5nLmNwcDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRDAxQTI3QUMxMEM5QkZEODAwMDI2QTQyIC8qIFNwYWNl
U3BsaXRTdHJpbmcuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU3BhY2VTcGxp
dFN0cmluZy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlEMDVDRUQyNzBBNDBCQjJD
MDBDNUFGMzggLyogRm9ybWF0QmxvY2tDb21tYW5kLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmNwcC5jcHA7IHBhdGggPSBGb3JtYXRCbG9ja0NvbW1hbmQuY3BwOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwpAQCAtMTU2ODEsNiArMTU2ODUsOCBAQAogCQlCQ0IxNkJGQjA5NzlDMzg3MDA0
Njc3NDEgLyogbG9hZGVyICovID0gewogCQkJaXNhID0gUEJYR3JvdXA7CiAJCQljaGlsZHJlbiA9
ICgKKwkJCQlEMDAwRUQyNTExQzFCOUNEMDBDNDc3MjYgLyogU3ViZnJhbWVMb2FkZXIuY3BwICov
LAorCQkJCUQwMDBFRDI2MTFDMUI5Q0QwMEM0NzcyNiAvKiBTdWJmcmFtZUxvYWRlci5oICovLAog
CQkJCTFBOEY2QkIwMERCNTVDREMwMDFEQjc5NCAvKiBhcHBjYWNoZSAqLywKIAkJCQk1MTJERDhF
ODBEOTFFNjkxMDAwRjg5RUUgLyogYXJjaGl2ZSAqLywKIAkJCQk1MTI2RTZCNjBBMkUzQUVGMDA1
QzI5RkEgLyogaWNvbiAqLywKQEAgLTE5NDUyLDYgKzE5NDU4LDcgQEAKIAkJCQk0RjE1MzRERTEx
QjUzMkVDMDAyMUZEODYgLyogRWRpdGluZ0JlaGF2aW9yLmggaW4gSGVhZGVycyAqLywKIAkJCQk0
RjE1MzRFMDExQjUzMzAyMDAyMUZEODYgLyogRWRpdGluZ0JlaGF2aW9yVHlwZXMuaCBpbiBIZWFk
ZXJzICovLAogCQkJCUY5OEZGRjQ1MTFBMjY3NjIwMEY1NDhFOCAvKiBDU1NPTVV0aWxzLmggaW4g
SGVhZGVycyAqLywKKwkJCQlEMDAwRUQyODExQzFCOUNEMDBDNDc3MjYgLyogU3ViZnJhbWVMb2Fk
ZXIuaCBpbiBIZWFkZXJzICovLAogCQkJKTsKIAkJCXJ1bk9ubHlGb3JEZXBsb3ltZW50UG9zdHBy
b2Nlc3NpbmcgPSAwOwogCQl9OwpAQCAtMjE3NTUsNiArMjE3NjIsNyBAQAogCQkJCUE3QkJFMjY2
MTFBRkIzRjIwMDA1RUEwMyAvKiBKU0hUTUxNZXRlckVsZW1lbnQuY3BwIGluIFNvdXJjZXMgKi8s
CiAJCQkJQjZCMDU0MDkxMUI2OEYxMDAwMjU2NEM1IC8qIElEQk9iamVjdFN0b3JlSW1wbC5jcHAg
aW4gU291cmNlcyAqLywKIAkJCQlGOThGRkY0NDExQTI2NzYyMDBGNTQ4RTggLyogQ1NTT01VdGls
cy5jcHAgaW4gU291cmNlcyAqLywKKwkJCQlEMDAwRUQyNzExQzFCOUNEMDBDNDc3MjYgLyogU3Vi
ZnJhbWVMb2FkZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkpOwogCQkJcnVuT25seUZvckRlcGxv
eW1lbnRQb3N0cHJvY2Vzc2luZyA9IDA7CiAJCX07CkluZGV4OiBXZWJDb3JlL0FuZHJvaWQubWsK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gV2ViQ29yZS9BbmRyb2lkLm1rCShyZXZpc2lvbiA2MDkxNykKKysrIFdl
YkNvcmUvQW5kcm9pZC5tawkod29ya2luZyBjb3B5KQpAQCAtMzExLDYgKzMxMSw3IEBACiAJbG9h
ZGVyL1JlcXVlc3QuY3BwIFwKIAlsb2FkZXIvUmVzb3VyY2VMb2FkTm90aWZpZXIuY3BwIFwKIAls
b2FkZXIvUmVzb3VyY2VMb2FkZXIuY3BwIFwKKwlsb2FkZXIvU3ViZnJhbWVMb2FkZXIuY3BwIFwK
IAlsb2FkZXIvU3VicmVzb3VyY2VMb2FkZXIuY3BwIFwKIAlsb2FkZXIvVGV4dERvY3VtZW50LmNw
cCBcCiAJbG9hZGVyL1RleHRSZXNvdXJjZURlY29kZXIuY3BwIFwKSW5kZXg6IFdlYkNvcmUvbG9h
ZGVyL0ZyYW1lTG9hZGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2xvYWRlci9GcmFtZUxv
YWRlci5jcHAJKHJldmlzaW9uIDYwOTE3KQorKysgV2ViQ29yZS9sb2FkZXIvRnJhbWVMb2FkZXIu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC01OSwxMiArNTksNyBAQAogI2luY2x1ZGUgIkZyYW1lVHJl
ZS5oIgogI2luY2x1ZGUgIkZyYW1lVmlldy5oIgogI2luY2x1ZGUgIkhUTUxBbmNob3JFbGVtZW50
LmgiCi0jaW5jbHVkZSAiSFRNTEFwcGxldEVsZW1lbnQuaCIKICNpbmNsdWRlICJIVE1MRm9ybUVs
ZW1lbnQuaCIKLSNpbmNsdWRlICJIVE1MRnJhbWVFbGVtZW50LmgiCi0jaWYgRU5BQkxFKFBMVUdJ
Tl9QUk9YWV9GT1JfVklERU8pCi0jaW5jbHVkZSAiSFRNTE1lZGlhRWxlbWVudC5oIgotI2VuZGlm
CiAjaW5jbHVkZSAiSFRNTE5hbWVzLmgiCiAjaW5jbHVkZSAiSFRNTE9iamVjdEVsZW1lbnQuaCIK
ICNpbmNsdWRlICJIVFRQUGFyc2Vycy5oIgpAQCAtODQsMTEgKzc5LDYgQEAKICNpbmNsdWRlICJQ
bHVnaW5EYXRhYmFzZS5oIgogI2luY2x1ZGUgIlBsdWdpbkRvY3VtZW50LmgiCiAjaW5jbHVkZSAi
UHJvZ3Jlc3NUcmFja2VyLmgiCi0jaW5jbHVkZSAiUmVuZGVyRW1iZWRkZWRPYmplY3QuaCIKLSNp
ZiBFTkFCTEUoUExVR0lOX1BST1hZX0ZPUl9WSURFTykKLSNpbmNsdWRlICJSZW5kZXJWaWRlby5o
IgotI2VuZGlmCi0jaW5jbHVkZSAiUmVuZGVyVmlldy5oIgogI2luY2x1ZGUgIlJlc291cmNlSGFu
ZGxlLmgiCiAjaW5jbHVkZSAiUmVzb3VyY2VSZXF1ZXN0LmgiCiAjaW5jbHVkZSAiU2NyaXB0Q29u
dHJvbGxlci5oIgpAQCAtMTA3LDcgKzk3LDYgQEAKICNpbmNsdWRlICJXaW5kb3dGZWF0dXJlcy5o
IgogI2luY2x1ZGUgIlhNTEh0dHBSZXF1ZXN0LmgiCiAjaW5jbHVkZSAiWE1MVG9rZW5pemVyLmgi
Ci0jaW5jbHVkZSAiWFNTQXVkaXRvci5oIgogI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4K
ICNpbmNsdWRlIDx3dGYvQ3VycmVudFRpbWUuaD4KICNpbmNsdWRlIDx3dGYvU3RkTGliRXh0cmFz
Lmg+CkBAIC0xODksNiArMTc4LDcgQEAKICAgICAsIG1faGlzdG9yeShmcmFtZSkKICAgICAsIG1f
bm90aWZlcihmcmFtZSkKICAgICAsIG1fd3JpdGVyKGZyYW1lKQorICAgICwgbV9zdWJmcmFtZUxv
YWRlcihmcmFtZSwgY2xpZW50KQogICAgICwgbV9zdGF0ZShGcmFtZVN0YXRlQ29tbWl0dGVkUGFn
ZSkKICAgICAsIG1fbG9hZFR5cGUoRnJhbWVMb2FkVHlwZVN0YW5kYXJkKQogICAgICwgbV9kZWxl
Z2F0ZUlzSGFuZGxpbmdQcm92aXNpb25hbExvYWRFcnJvcihmYWxzZSkKQEAgLTIwNCw3ICsxOTQs
NiBAQAogICAgICwgbV9pc0xvYWRpbmdNYWluUmVzb3VyY2UoZmFsc2UpCiAgICAgLCBtX25lZWRz
Q2xlYXIoZmFsc2UpCiAgICAgLCBtX3JlY2VpdmVkRGF0YShmYWxzZSkKLSAgICAsIG1fY29udGFp
bnNQbHVnSW5zKGZhbHNlKQogICAgICwgbV9jaGVja1RpbWVyKHRoaXMsICZGcmFtZUxvYWRlcjo6
Y2hlY2tUaW1lckZpcmVkKQogICAgICwgbV9zaG91bGRDYWxsQ2hlY2tDb21wbGV0ZWQoZmFsc2Up
CiAgICAgLCBtX3Nob3VsZENhbGxDaGVja0xvYWRDb21wbGV0ZShmYWxzZSkKQEAgLTM4MCw4NyAr
MzY5LDYgQEAKICAgICBtX3N1cHByZXNzT3BlbmVySW5OZXdGcmFtZSA9IGZhbHNlOwogfQogCi1i
b29sIEZyYW1lTG9hZGVyOjpyZXF1ZXN0RnJhbWUoSFRNTEZyYW1lT3duZXJFbGVtZW50KiBvd25l
ckVsZW1lbnQsIGNvbnN0IFN0cmluZyYgdXJsU3RyaW5nLCBjb25zdCBBdG9taWNTdHJpbmcmIGZy
YW1lTmFtZSwgYm9vbCBsb2NrSGlzdG9yeSwgYm9vbCBsb2NrQmFja0ZvcndhcmRMaXN0KQotewot
ICAgIC8vIFN1cHBvcnQgZm9yIDxmcmFtZSBzcmM9ImphdmFzY3JpcHQ6c3RyaW5nIj4KLSAgICBL
VVJMIHNjcmlwdFVSTDsKLSAgICBLVVJMIHVybDsKLSAgICBpZiAocHJvdG9jb2xJc0phdmFTY3Jp
cHQodXJsU3RyaW5nKSkgewotICAgICAgICBzY3JpcHRVUkwgPSBjb21wbGV0ZVVSTCh1cmxTdHJp
bmcpOyAvLyBjb21wbGV0ZVVSTCgpIGVuY29kZXMgdGhlIFVSTC4KLSAgICAgICAgdXJsID0gYmxh
bmtVUkwoKTsKLSAgICB9IGVsc2UKLSAgICAgICAgdXJsID0gY29tcGxldGVVUkwodXJsU3RyaW5n
KTsKLQotICAgIEZyYW1lKiBmcmFtZSA9IG93bmVyRWxlbWVudC0+Y29udGVudEZyYW1lKCk7Ci0g
ICAgaWYgKGZyYW1lKQotICAgICAgICBmcmFtZS0+cmVkaXJlY3RTY2hlZHVsZXIoKS0+c2NoZWR1
bGVMb2NhdGlvbkNoYW5nZSh1cmwuc3RyaW5nKCksIG1fb3V0Z29pbmdSZWZlcnJlciwgbG9ja0hp
c3RvcnksIGxvY2tCYWNrRm9yd2FyZExpc3QsIGlzUHJvY2Vzc2luZ1VzZXJHZXN0dXJlKCkpOwot
ICAgIGVsc2UKLSAgICAgICAgZnJhbWUgPSBsb2FkU3ViZnJhbWUob3duZXJFbGVtZW50LCB1cmws
IGZyYW1lTmFtZSwgbV9vdXRnb2luZ1JlZmVycmVyKTsKLSAgICAKLSAgICBpZiAoIWZyYW1lKQot
ICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBpZiAoIXNjcmlwdFVSTC5pc0VtcHR5KCkpCi0g
ICAgICAgIGZyYW1lLT5zY3JpcHQoKS0+ZXhlY3V0ZUlmSmF2YVNjcmlwdFVSTChzY3JpcHRVUkwp
OwotCi0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLUZyYW1lKiBGcmFtZUxvYWRlcjo6bG9hZFN1YmZy
YW1lKEhUTUxGcmFtZU93bmVyRWxlbWVudCogb3duZXJFbGVtZW50LCBjb25zdCBLVVJMJiB1cmws
IGNvbnN0IFN0cmluZyYgbmFtZSwgY29uc3QgU3RyaW5nJiByZWZlcnJlcikKLXsKLSAgICBib29s
IGFsbG93c1Njcm9sbGluZyA9IHRydWU7Ci0gICAgaW50IG1hcmdpbldpZHRoID0gLTE7Ci0gICAg
aW50IG1hcmdpbkhlaWdodCA9IC0xOwotICAgIGlmIChvd25lckVsZW1lbnQtPmhhc1RhZ05hbWUo
ZnJhbWVUYWcpIHx8IG93bmVyRWxlbWVudC0+aGFzVGFnTmFtZShpZnJhbWVUYWcpKSB7Ci0gICAg
ICAgIEhUTUxGcmFtZUVsZW1lbnRCYXNlKiBvID0gc3RhdGljX2Nhc3Q8SFRNTEZyYW1lRWxlbWVu
dEJhc2UqPihvd25lckVsZW1lbnQpOwotICAgICAgICBhbGxvd3NTY3JvbGxpbmcgPSBvLT5zY3Jv
bGxpbmdNb2RlKCkgIT0gU2Nyb2xsYmFyQWx3YXlzT2ZmOwotICAgICAgICBtYXJnaW5XaWR0aCA9
IG8tPmdldE1hcmdpbldpZHRoKCk7Ci0gICAgICAgIG1hcmdpbkhlaWdodCA9IG8tPmdldE1hcmdp
bkhlaWdodCgpOwotICAgIH0KLQotICAgIGlmICghU2VjdXJpdHlPcmlnaW46OmNhbkxvYWQodXJs
LCByZWZlcnJlciwgMCkpIHsKLSAgICAgICAgRnJhbWVMb2FkZXI6OnJlcG9ydExvY2FsTG9hZEZh
aWxlZChtX2ZyYW1lLCB1cmwuc3RyaW5nKCkpOwotICAgICAgICByZXR1cm4gMDsKLSAgICB9Ci0K
LSAgICBib29sIGhpZGVSZWZlcnJlciA9IFNlY3VyaXR5T3JpZ2luOjpzaG91bGRIaWRlUmVmZXJy
ZXIodXJsLCByZWZlcnJlcik7Ci0gICAgUmVmUHRyPEZyYW1lPiBmcmFtZSA9IG1fY2xpZW50LT5j
cmVhdGVGcmFtZSh1cmwsIG5hbWUsIG93bmVyRWxlbWVudCwgaGlkZVJlZmVycmVyID8gU3RyaW5n
KCkgOiByZWZlcnJlciwgYWxsb3dzU2Nyb2xsaW5nLCBtYXJnaW5XaWR0aCwgbWFyZ2luSGVpZ2h0
KTsKLQotICAgIGlmICghZnJhbWUpICB7Ci0gICAgICAgIGNoZWNrQ2FsbEltcGxpY2l0Q2xvc2Uo
KTsKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgfQotICAgIAotICAgIC8vIEFsbCBuZXcgZnJhbWVz
IHdpbGwgaGF2ZSBtX2lzQ29tcGxldGUgc2V0IHRvIHRydWUgYXQgdGhpcyBwb2ludCBkdWUgdG8g
c3luY2hyb25vdXNseSBsb2FkaW5nCi0gICAgLy8gYW4gZW1wdHkgZG9jdW1lbnQgaW4gRnJhbWVM
b2FkZXI6OmluaXQoKS4gQnV0IG1hbnkgZnJhbWVzIHdpbGwgbm93IGJlIHN0YXJ0aW5nIGFuCi0g
ICAgLy8gYXN5bmNocm9ub3VzIGxvYWQgb2YgdXJsLCBzbyB3ZSBzZXQgbV9pc0NvbXBsZXRlIHRv
IGZhbHNlIGFuZCB0aGVuIGNoZWNrIGlmIHRoZSBsb2FkIGlzCi0gICAgLy8gYWN0dWFsbHkgY29t
cGxldGVkIGJlbG93LiAoTm90ZSB0aGF0IHdlIHNldCBtX2lzQ29tcGxldGUgdG8gZmFsc2UgZXZl
biBmb3Igc3luY2hyb25vdXMKLSAgICAvLyBsb2Fkcywgc28gdGhhdCBjaGVja0NvbXBsZXRlZCgp
IGJlbG93IHdvbid0IGJhaWwgZWFybHkuKQotICAgIC8vIEZJWE1FOiBDYW4gd2UgcmVtb3ZlIHRo
aXMgZW50aXJlbHk/IG1faXNDb21wbGV0ZSBub3JtYWxseSBnZXRzIHNldCB0byBmYWxzZSB3aGVu
IGEgbG9hZCBpcyBjb21taXR0ZWQuCi0gICAgZnJhbWUtPmxvYWRlcigpLT5tX2lzQ29tcGxldGUg
PSBmYWxzZTsKLSAgIAotICAgIFJlbmRlck9iamVjdCogcmVuZGVyZXIgPSBvd25lckVsZW1lbnQt
PnJlbmRlcmVyKCk7Ci0gICAgRnJhbWVWaWV3KiB2aWV3ID0gZnJhbWUtPnZpZXcoKTsKLSAgICBp
ZiAocmVuZGVyZXIgJiYgcmVuZGVyZXItPmlzV2lkZ2V0KCkgJiYgdmlldykKLSAgICAgICAgdG9S
ZW5kZXJXaWRnZXQocmVuZGVyZXIpLT5zZXRXaWRnZXQodmlldyk7Ci0gICAgCi0gICAgY2hlY2tD
YWxsSW1wbGljaXRDbG9zZSgpOwotICAgIAotICAgIC8vIFNvbWUgbG9hZHMgYXJlIHBlcmZvcm1l
ZCBzeW5jaHJvbm91c2x5IChlLmcuLCBhYm91dDpibGFuayBhbmQgbG9hZHMKLSAgICAvLyBjYW5j
ZWxsZWQgYnkgcmV0dXJuaW5nIGEgbnVsbCBSZXNvdXJjZVJlcXVlc3QgZnJvbSByZXF1ZXN0RnJv
bURlbGVnYXRlKS4KLSAgICAvLyBJbiB0aGVzZSBjYXNlcywgdGhlIHN5bmNocm9ub3VzIGxvYWQg
d291bGQgaGF2ZSBmaW5pc2hlZAotICAgIC8vIGJlZm9yZSB3ZSBjb3VsZCBjb25uZWN0IHRoZSBz
aWduYWxzLCBzbyBtYWtlIHN1cmUgdG8gc2VuZCB0aGUgCi0gICAgLy8gY29tcGxldGVkKCkgc2ln
bmFsIGZvciB0aGUgY2hpbGQgYnkgaGFuZCBhbmQgbWFyayB0aGUgbG9hZCBhcyBiZWluZwotICAg
IC8vIGNvbXBsZXRlLgotICAgIC8vIEZJWE1FOiBJbiB0aGlzIGNhc2UgdGhlIEZyYW1lIHdpbGwg
aGF2ZSBmaW5pc2hlZCBsb2FkaW5nIGJlZm9yZSAKLSAgICAvLyBpdCdzIGJlaW5nIGFkZGVkIHRv
IHRoZSBjaGlsZCBsaXN0LiBJdCB3b3VsZCBiZSBhIGdvb2QgaWRlYSB0bwotICAgIC8vIGNyZWF0
ZSB0aGUgY2hpbGQgZmlyc3QsIHRoZW4gaW52b2tlIHRoZSBsb2FkZXIgc2VwYXJhdGVseS4KLSAg
ICBpZiAoZnJhbWUtPmxvYWRlcigpLT5zdGF0ZSgpID09IEZyYW1lU3RhdGVDb21wbGV0ZSkKLSAg
ICAgICAgZnJhbWUtPmxvYWRlcigpLT5jaGVja0NvbXBsZXRlZCgpOwotCi0gICAgcmV0dXJuIGZy
YW1lLmdldCgpOwotfQotCiB2b2lkIEZyYW1lTG9hZGVyOjpzdWJtaXRGb3JtKGNvbnN0IGNoYXIq
IGFjdGlvbiwgY29uc3QgU3RyaW5nJiB1cmwsIFBhc3NSZWZQdHI8Rm9ybURhdGE+IGZvcm1EYXRh
LAogICAgIGNvbnN0IFN0cmluZyYgdGFyZ2V0LCBjb25zdCBTdHJpbmcmIGNvbnRlbnRUeXBlLCBj
b25zdCBTdHJpbmcmIGJvdW5kYXJ5LAogICAgIGJvb2wgbG9ja0hpc3RvcnksIFBhc3NSZWZQdHI8
RXZlbnQ+IGV2ZW50LCBQYXNzUmVmUHRyPEZvcm1TdGF0ZT4gZm9ybVN0YXRlKQpAQCAtNzU4LDcg
KzY2Niw3IEBACiAgICAgbV9mcmFtZS0+c2V0RG9jdW1lbnQoMCk7CiAgICAgd3JpdGVyKCktPmNs
ZWFyKCk7CiAKLSAgICBtX2NvbnRhaW5zUGx1Z0lucyA9IGZhbHNlOworICAgIG1fc3ViZnJhbWVM
b2FkZXIuY2xlYXIoKTsKIAogICAgIGlmIChjbGVhclNjcmlwdE9iamVjdHMpCiAgICAgICAgIG1f
ZnJhbWUtPnNjcmlwdCgpLT5jbGVhclNjcmlwdE9iamVjdHMoKTsKQEAgLTExMjUsNjggKzEwMzMs
NiBAQAogICAgIGxvYWQoZG9jdW1lbnRMb2FkZXIuZ2V0KCkpOwogfQogCi1ib29sIEZyYW1lTG9h
ZGVyOjpyZXF1ZXN0T2JqZWN0KFJlbmRlckVtYmVkZGVkT2JqZWN0KiByZW5kZXJlciwgY29uc3Qg
U3RyaW5nJiB1cmwsIGNvbnN0IEF0b21pY1N0cmluZyYgZnJhbWVOYW1lLAotICAgIGNvbnN0IFN0
cmluZyYgbWltZVR5cGUsIGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBwYXJhbU5hbWVzLCBjb25zdCBW
ZWN0b3I8U3RyaW5nPiYgcGFyYW1WYWx1ZXMpCi17Ci0gICAgaWYgKHVybC5pc0VtcHR5KCkgJiYg
bWltZVR5cGUuaXNFbXB0eSgpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgCi0gICAgaWYg
KCFtX2ZyYW1lLT5zY3JpcHQoKS0+eHNzQXVkaXRvcigpLT5jYW5Mb2FkT2JqZWN0KHVybCkpIHsK
LSAgICAgICAgLy8gSXQgaXMgdW5zYWZlIHRvIGhvbm9yIHRoZSByZXF1ZXN0IGZvciB0aGlzIG9i
amVjdC4KLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAgIEtVUkwgY29tcGxldGVk
VVJMOwotICAgIGlmICghdXJsLmlzRW1wdHkoKSkKLSAgICAgICAgY29tcGxldGVkVVJMID0gY29t
cGxldGVVUkwodXJsKTsKLQotICAgIGJvb2wgdXNlRmFsbGJhY2s7Ci0gICAgaWYgKHNob3VsZFVz
ZVBsdWdpbihjb21wbGV0ZWRVUkwsIG1pbWVUeXBlLCByZW5kZXJlci0+aGFzRmFsbGJhY2tDb250
ZW50KCksIHVzZUZhbGxiYWNrKSkgewotICAgICAgICBTZXR0aW5ncyogc2V0dGluZ3MgPSBtX2Zy
YW1lLT5zZXR0aW5ncygpOwotICAgICAgICBpZiAoKCFhbGxvd1BsdWdpbnMoQWJvdXRUb0luc3Rh
bnRpYXRlUGx1Z2luKQotICAgICAgICAgICAgIC8vIEFwcGxpY2F0aW9uIHBsdWdpbnMgYXJlIHBs
dWdpbnMgaW1wbGVtZW50ZWQgYnkgdGhlIHVzZXIgYWdlbnQsIGZvciBleGFtcGxlIFF0IHBsdWdp
bnMsCi0gICAgICAgICAgICAgLy8gYXMgb3Bwb3NlZCB0byB0aGlyZC1wYXJ0eSBjb2RlIHN1Y2gg
YXMgZmxhc2guIFRoZSB1c2VyIGFnZW50IGRlY2lkZXMgd2hldGhlciBvciBub3QgdGhleSBhcmUK
LSAgICAgICAgICAgICAvLyBwZXJtaXR0ZWQsIHJhdGhlciB0aGFuIFdlYktpdC4KLSAgICAgICAg
ICAgICAmJiAhTUlNRVR5cGVSZWdpc3RyeTo6aXNBcHBsaWNhdGlvblBsdWdpbk1JTUVUeXBlKG1p
bWVUeXBlKSkKLSAgICAgICAgICAgIHx8ICghc2V0dGluZ3MtPmlzSmF2YUVuYWJsZWQoKSAmJiBN
SU1FVHlwZVJlZ2lzdHJ5Ojppc0phdmFBcHBsZXRNSU1FVHlwZShtaW1lVHlwZSkpKQotICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICBpZiAoaXNEb2N1bWVudFNhbmRib3hlZChtX2Zy
YW1lLCBTYW5kYm94UGx1Z2lucykpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAg
IHJldHVybiBsb2FkUGx1Z2luKHJlbmRlcmVyLCBjb21wbGV0ZWRVUkwsIG1pbWVUeXBlLCBwYXJh
bU5hbWVzLCBwYXJhbVZhbHVlcywgdXNlRmFsbGJhY2spOwotICAgIH0KLQotICAgIEFTU0VSVChy
ZW5kZXJlci0+bm9kZSgpLT5oYXNUYWdOYW1lKG9iamVjdFRhZykgfHwgcmVuZGVyZXItPm5vZGUo
KS0+aGFzVGFnTmFtZShlbWJlZFRhZykpOwotICAgIEhUTUxQbHVnSW5FbGVtZW50KiBlbGVtZW50
ID0gc3RhdGljX2Nhc3Q8SFRNTFBsdWdJbkVsZW1lbnQqPihyZW5kZXJlci0+bm9kZSgpKTsKLQot
ICAgIC8vIElmIHRoZSBwbHVnLWluIGVsZW1lbnQgYWxyZWFkeSBjb250YWlucyBhIHN1YmZyYW1l
LCByZXF1ZXN0RnJhbWUgd2lsbCByZS11c2UgaXQuIE90aGVyd2lzZSwKLSAgICAvLyBpdCB3aWxs
IGNyZWF0ZSBhIG5ldyBmcmFtZSBhbmQgc2V0IGl0IGFzIHRoZSBSZW5kZXJQYXJ0J3Mgd2lkZ2V0
LCBjYXVzaW5nIHdoYXQgd2FzIHByZXZpb3VzbHkgCi0gICAgLy8gaW4gdGhlIHdpZGdldCB0byBi
ZSB0b3JuIGRvd24uCi0gICAgcmV0dXJuIHJlcXVlc3RGcmFtZShlbGVtZW50LCBjb21wbGV0ZWRV
UkwsIGZyYW1lTmFtZSk7Ci19Ci0KLWJvb2wgRnJhbWVMb2FkZXI6OnNob3VsZFVzZVBsdWdpbihj
b25zdCBLVVJMJiB1cmwsIGNvbnN0IFN0cmluZyYgbWltZVR5cGUsIGJvb2wgaGFzRmFsbGJhY2ss
IGJvb2wmIHVzZUZhbGxiYWNrKQotewotICAgIGlmIChtX2NsaWVudC0+c2hvdWxkVXNlUGx1Z2lu
RG9jdW1lbnQobWltZVR5cGUpKSB7Ci0gICAgICAgIHVzZUZhbGxiYWNrID0gZmFsc2U7Ci0gICAg
ICAgIHJldHVybiB0cnVlOwotICAgIH0KLQotICAgIC8vIEFsbG93IG90aGVyIHBsdWctaW5zIHRv
IHdpbiBvdmVyIFF1aWNrVGltZSBiZWNhdXNlIGlmIHRoZSB1c2VyIGhhcyBpbnN0YWxsZWQgYSBw
bHVnLWluIHRoYXQKLSAgICAvLyBjYW4gaGFuZGxlIFRJRkYgKHdoaWNoIFF1aWNrVGltZSBjYW4g
YWxzbyBoYW5kbGUpIHRoZXkgcHJvYmFibHkgaW50ZW5kZWQgdG8gb3ZlcnJpZGUgUVQuCi0gICAg
aWYgKG1fZnJhbWUtPnBhZ2UoKSAmJiAobWltZVR5cGUgPT0gImltYWdlL3RpZmYiIHx8IG1pbWVU
eXBlID09ICJpbWFnZS90aWYiIHx8IG1pbWVUeXBlID09ICJpbWFnZS94LXRpZmYiKSkgewotICAg
ICAgICBjb25zdCBQbHVnaW5EYXRhKiBwbHVnaW5EYXRhID0gbV9mcmFtZS0+cGFnZSgpLT5wbHVn
aW5EYXRhKCk7Ci0gICAgICAgIFN0cmluZyBwbHVnaW5OYW1lID0gcGx1Z2luRGF0YSA/IHBsdWdp
bkRhdGEtPnBsdWdpbk5hbWVGb3JNaW1lVHlwZShtaW1lVHlwZSkgOiBTdHJpbmcoKTsKLSAgICAg
ICAgaWYgKCFwbHVnaW5OYW1lLmlzRW1wdHkoKSAmJiAhcGx1Z2luTmFtZS5jb250YWlucygiUXVp
Y2tUaW1lIiwgZmFsc2UpKSAKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLSAgICAg
ICAgCi0gICAgT2JqZWN0Q29udGVudFR5cGUgb2JqZWN0VHlwZSA9IG1fY2xpZW50LT5vYmplY3RD
b250ZW50VHlwZSh1cmwsIG1pbWVUeXBlKTsKLSAgICAvLyBJZiBhbiBvYmplY3QncyBjb250ZW50
IGNhbid0IGJlIGhhbmRsZWQgYW5kIGl0IGhhcyBubyBmYWxsYmFjaywgbGV0Ci0gICAgLy8gaXQg
YmUgaGFuZGxlZCBhcyBhIHBsdWdpbiB0byBzaG93IHRoZSBicm9rZW4gcGx1Z2luIGljb24uCi0g
ICAgdXNlRmFsbGJhY2sgPSBvYmplY3RUeXBlID09IE9iamVjdENvbnRlbnROb25lICYmIGhhc0Zh
bGxiYWNrOwotICAgIHJldHVybiBvYmplY3RUeXBlID09IE9iamVjdENvbnRlbnROb25lIHx8IG9i
amVjdFR5cGUgPT0gT2JqZWN0Q29udGVudE5ldHNjYXBlUGx1Z2luIHx8IG9iamVjdFR5cGUgPT0g
T2JqZWN0Q29udGVudE90aGVyUGx1Z2luOwotfQotCiBPYmplY3RDb250ZW50VHlwZSBGcmFtZUxv
YWRlcjo6ZGVmYXVsdE9iamVjdENvbnRlbnRUeXBlKGNvbnN0IEtVUkwmIHVybCwgY29uc3QgU3Ry
aW5nJiBtaW1lVHlwZUluKQogewogICAgIFN0cmluZyBtaW1lVHlwZSA9IG1pbWVUeXBlSW47CkBA
IC0xMjExLDkxICsxMDU3LDYgQEAKICAgICByZXR1cm4gV2ViQ29yZTo6T2JqZWN0Q29udGVudE5v
bmU7CiB9CiAKLXN0YXRpYyBIVE1MUGx1Z0luRWxlbWVudCogdG9QbHVnSW5FbGVtZW50KE5vZGUq
IG5vZGUpCi17Ci0gICAgaWYgKCFub2RlKQotICAgICAgICByZXR1cm4gMDsKLQotICAgIEFTU0VS
VChub2RlLT5oYXNUYWdOYW1lKG9iamVjdFRhZykgfHwgbm9kZS0+aGFzVGFnTmFtZShlbWJlZFRh
ZykgCi0gICAgICAgIHx8IG5vZGUtPmhhc1RhZ05hbWUoYXBwbGV0VGFnKSk7Ci0KLSAgICByZXR1
cm4gc3RhdGljX2Nhc3Q8SFRNTFBsdWdJbkVsZW1lbnQqPihub2RlKTsKLX0KLSAgICAKLWJvb2wg
RnJhbWVMb2FkZXI6OmxvYWRQbHVnaW4oUmVuZGVyRW1iZWRkZWRPYmplY3QqIHJlbmRlcmVyLCBj
b25zdCBLVVJMJiB1cmwsIGNvbnN0IFN0cmluZyYgbWltZVR5cGUsIAotICAgIGNvbnN0IFZlY3Rv
cjxTdHJpbmc+JiBwYXJhbU5hbWVzLCBjb25zdCBWZWN0b3I8U3RyaW5nPiYgcGFyYW1WYWx1ZXMs
IGJvb2wgdXNlRmFsbGJhY2spCi17Ci0gICAgUmVmUHRyPFdpZGdldD4gd2lkZ2V0OwotCi0gICAg
aWYgKHJlbmRlcmVyICYmICF1c2VGYWxsYmFjaykgewotICAgICAgICBIVE1MUGx1Z0luRWxlbWVu
dCogZWxlbWVudCA9IHRvUGx1Z0luRWxlbWVudChyZW5kZXJlci0+bm9kZSgpKTsKLQotICAgICAg
ICBpZiAoIVNlY3VyaXR5T3JpZ2luOjpjYW5Mb2FkKHVybCwgU3RyaW5nKCksIGZyYW1lKCktPmRv
Y3VtZW50KCkpKSB7Ci0gICAgICAgICAgICBGcmFtZUxvYWRlcjo6cmVwb3J0TG9jYWxMb2FkRmFp
bGVkKG1fZnJhbWUsIHVybC5zdHJpbmcoKSk7Ci0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0g
ICAgICAgIH0KLQotICAgICAgICBjaGVja0lmUnVuSW5zZWN1cmVDb250ZW50KG1fZnJhbWUtPmRv
Y3VtZW50KCktPnNlY3VyaXR5T3JpZ2luKCksIHVybCk7Ci0KLSAgICAgICAgd2lkZ2V0ID0gbV9j
bGllbnQtPmNyZWF0ZVBsdWdpbihJbnRTaXplKHJlbmRlcmVyLT5jb250ZW50V2lkdGgoKSwgcmVu
ZGVyZXItPmNvbnRlbnRIZWlnaHQoKSksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgZWxlbWVudCwgdXJsLCBwYXJhbU5hbWVzLCBwYXJhbVZhbHVlcywgbWltZVR5cGUs
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbV9mcmFtZS0+ZG9jdW1l
bnQoKS0+aXNQbHVnaW5Eb2N1bWVudCgpICYmICFtX2NvbnRhaW5zUGx1Z0lucyk7Ci0gICAgICAg
IGlmICh3aWRnZXQpIHsKLSAgICAgICAgICAgIHJlbmRlcmVyLT5zZXRXaWRnZXQod2lkZ2V0KTsK
LSAgICAgICAgICAgIG1fY29udGFpbnNQbHVnSW5zID0gdHJ1ZTsKLQotI2lmIEVOQUJMRShQTFVH
SU5fUFJPWFlfRk9SX1ZJREVPKQotICAgICAgICAgICAgcmVuZGVyZXItPm5vZGUoKS0+c2V0TmVl
ZHNTdHlsZVJlY2FsYyhTeW50aGV0aWNTdHlsZUNoYW5nZSk7Ci0jZW5kaWYKLSAgICAgICAgfSBl
bHNlCi0gICAgICAgICAgICByZW5kZXJlci0+c2V0U2hvd3NNaXNzaW5nUGx1Z2luSW5kaWNhdG9y
KCk7Ci0gICAgfQotCi0gICAgcmV0dXJuIHdpZGdldCAhPSAwOwotfQotCi0jaWYgRU5BQkxFKFBM
VUdJTl9QUk9YWV9GT1JfVklERU8pCi1QYXNzUmVmUHRyPFdpZGdldD4gRnJhbWVMb2FkZXI6Omxv
YWRNZWRpYVBsYXllclByb3h5UGx1Z2luKE5vZGUqIG5vZGUsIGNvbnN0IEtVUkwmIHVybCwgCi0g
ICAgY29uc3QgVmVjdG9yPFN0cmluZz4mIHBhcmFtTmFtZXMsIGNvbnN0IFZlY3RvcjxTdHJpbmc+
JiBwYXJhbVZhbHVlcykKLXsKLSAgICBBU1NFUlQobm9kZS0+aGFzVGFnTmFtZSh2aWRlb1RhZykg
fHwgbm9kZS0+aGFzVGFnTmFtZShhdWRpb1RhZykpOwotCi0gICAgaWYgKCFtX2ZyYW1lLT5zY3Jp
cHQoKS0+eHNzQXVkaXRvcigpLT5jYW5Mb2FkT2JqZWN0KHVybC5zdHJpbmcoKSkpCi0gICAgICAg
IHJldHVybiAwOwotCi0gICAgS1VSTCBjb21wbGV0ZWRVUkw7Ci0gICAgaWYgKCF1cmwuaXNFbXB0
eSgpKQotICAgICAgICBjb21wbGV0ZWRVUkwgPSBjb21wbGV0ZVVSTCh1cmwpOwotCi0gICAgaWYg
KCFTZWN1cml0eU9yaWdpbjo6Y2FuTG9hZChjb21wbGV0ZWRVUkwsIFN0cmluZygpLCBmcmFtZSgp
LT5kb2N1bWVudCgpKSkgewotICAgICAgICBGcmFtZUxvYWRlcjo6cmVwb3J0TG9jYWxMb2FkRmFp
bGVkKG1fZnJhbWUsIGNvbXBsZXRlZFVSTC5zdHJpbmcoKSk7Ci0gICAgICAgIHJldHVybiAwOwot
ICAgIH0KLQotICAgIEhUTUxNZWRpYUVsZW1lbnQqIG1lZGlhRWxlbWVudCA9IHN0YXRpY19jYXN0
PEhUTUxNZWRpYUVsZW1lbnQqPihub2RlKTsKLSAgICBSZW5kZXJQYXJ0KiByZW5kZXJlciA9IHRv
UmVuZGVyUGFydChub2RlLT5yZW5kZXJlcigpKTsKLSAgICBJbnRTaXplIHNpemU7Ci0KLSAgICBp
ZiAocmVuZGVyZXIpCi0gICAgICAgIHNpemUgPSBJbnRTaXplKHJlbmRlcmVyLT5jb250ZW50V2lk
dGgoKSwgcmVuZGVyZXItPmNvbnRlbnRIZWlnaHQoKSk7Ci0gICAgZWxzZSBpZiAobWVkaWFFbGVt
ZW50LT5pc1ZpZGVvKCkpCi0gICAgICAgIHNpemUgPSBSZW5kZXJWaWRlbzo6ZGVmYXVsdFNpemUo
KTsKLQotICAgIGNoZWNrSWZSdW5JbnNlY3VyZUNvbnRlbnQobV9mcmFtZS0+ZG9jdW1lbnQoKS0+
c2VjdXJpdHlPcmlnaW4oKSwgY29tcGxldGVkVVJMKTsKLQotICAgIFJlZlB0cjxXaWRnZXQ+IHdp
ZGdldCA9IG1fY2xpZW50LT5jcmVhdGVNZWRpYVBsYXllclByb3h5UGx1Z2luKHNpemUsIG1lZGlh
RWxlbWVudCwgY29tcGxldGVkVVJMLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBwYXJhbU5hbWVzLCBwYXJhbVZhbHVlcywgImFwcGxpY2F0aW9uL3gtbWVkaWEtZWxl
bWVudC1wcm94eS1wbHVnaW4iKTsKLQotICAgIGlmICh3aWRnZXQgJiYgcmVuZGVyZXIpIHsKLSAg
ICAgICAgcmVuZGVyZXItPnNldFdpZGdldCh3aWRnZXQpOwotICAgICAgICBtX2NvbnRhaW5zUGx1
Z0lucyA9IHRydWU7Ci0gICAgICAgIHJlbmRlcmVyLT5ub2RlKCktPnNldE5lZWRzU3R5bGVSZWNh
bGMoU3ludGhldGljU3R5bGVDaGFuZ2UpOwotICAgIH0KLQotICAgIHJldHVybiB3aWRnZXQgPyB3
aWRnZXQucmVsZWFzZSgpIDogMDsKLX0KLSNlbmRpZiAvLyBFTkFCTEUoUExVR0lOX1BST1hZX0ZP
Ul9WSURFTykKLQogU3RyaW5nIEZyYW1lTG9hZGVyOjpvdXRnb2luZ1JlZmVycmVyKCkgY29uc3QK
IHsKICAgICByZXR1cm4gbV9vdXRnb2luZ1JlZmVycmVyOwpAQCAtMTUwNCw2ICsxMjY1LDExIEBA
CiAgICAgcmV0dXJuIG1faXNDb21wbGV0ZTsKIH0KIAordm9pZCBGcmFtZUxvYWRlcjo6c2V0SXND
b21wbGV0ZShib29sIGlzQ29tcGxldGUpCit7CisgICAgbV9pc0NvbXBsZXRlID0gaXNDb21wbGV0
ZTsKK30KKwogdm9pZCBGcmFtZUxvYWRlcjo6Y29tcGxldGVkKCkKIHsKICAgICBSZWZQdHI8RnJh
bWU+IHByb3RlY3QobV9mcmFtZSk7CkBAIC0xNTI0LDIwICsxMjkwLDYgQEAKICAgICAgICAgZnJh
bWUtPmxvYWRlcigpLT5tX2lzQ29tcGxldGUgPSBmYWxzZTsKIH0KIAotYm9vbCBGcmFtZUxvYWRl
cjo6YWxsb3dQbHVnaW5zKFJlYXNvbkZvckNhbGxpbmdBbGxvd1BsdWdpbnMgcmVhc29uKQotewot
ICAgIFNldHRpbmdzKiBzZXR0aW5ncyA9IG1fZnJhbWUtPnNldHRpbmdzKCk7Ci0gICAgYm9vbCBh
bGxvd2VkID0gbV9jbGllbnQtPmFsbG93UGx1Z2lucyhzZXR0aW5ncyAmJiBzZXR0aW5ncy0+YXJl
UGx1Z2luc0VuYWJsZWQoKSk7Ci0gICAgaWYgKCFhbGxvd2VkICYmIHJlYXNvbiA9PSBBYm91dFRv
SW5zdGFudGlhdGVQbHVnaW4pCi0gICAgICAgIG1fZnJhbWUtPmxvYWRlcigpLT5jbGllbnQoKS0+
ZGlkTm90QWxsb3dQbHVnaW5zKCk7Ci0gICAgcmV0dXJuIGFsbG93ZWQ7Ci19Ci0KLWJvb2wgRnJh
bWVMb2FkZXI6OmNvbnRhaW5zUGx1Z2lucygpIGNvbnN0IAoteyAKLSAgICByZXR1cm4gbV9jb250
YWluc1BsdWdJbnM7Ci19Ci0KIHZvaWQgRnJhbWVMb2FkZXI6OnByZXBhcmVGb3JMb2FkU3RhcnQo
KQogewogICAgIGlmIChQYWdlKiBwYWdlID0gbV9mcmFtZS0+cGFnZSgpKQpAQCAtMzY5Myw0MiAr
MzQ0NSw2IEBACiAgICAgICAgIGNoaWxkLT5sb2FkZXIoKS0+dXBkYXRlU2FuZGJveEZsYWdzKCk7
CiB9CiAKLVBhc3NSZWZQdHI8V2lkZ2V0PiBGcmFtZUxvYWRlcjo6Y3JlYXRlSmF2YUFwcGxldFdp
ZGdldChjb25zdCBJbnRTaXplJiBzaXplLCBIVE1MQXBwbGV0RWxlbWVudCogZWxlbWVudCwgY29u
c3QgSGFzaE1hcDxTdHJpbmcsIFN0cmluZz4mIGFyZ3MpCi17Ci0gICAgU3RyaW5nIGJhc2VVUkxT
dHJpbmc7Ci0gICAgU3RyaW5nIGNvZGVCYXNlVVJMU3RyaW5nOwotICAgIFZlY3RvcjxTdHJpbmc+
IHBhcmFtTmFtZXM7Ci0gICAgVmVjdG9yPFN0cmluZz4gcGFyYW1WYWx1ZXM7Ci0gICAgSGFzaE1h
cDxTdHJpbmcsIFN0cmluZz46OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IGFyZ3MuZW5kKCk7Ci0gICAg
Zm9yIChIYXNoTWFwPFN0cmluZywgU3RyaW5nPjo6Y29uc3RfaXRlcmF0b3IgaXQgPSBhcmdzLmJl
Z2luKCk7IGl0ICE9IGVuZDsgKytpdCkgewotICAgICAgICBpZiAoZXF1YWxJZ25vcmluZ0Nhc2Uo
aXQtPmZpcnN0LCAiYmFzZXVybCIpKQotICAgICAgICAgICAgYmFzZVVSTFN0cmluZyA9IGl0LT5z
ZWNvbmQ7Ci0gICAgICAgIGVsc2UgaWYgKGVxdWFsSWdub3JpbmdDYXNlKGl0LT5maXJzdCwgImNv
ZGViYXNlIikpCi0gICAgICAgICAgICBjb2RlQmFzZVVSTFN0cmluZyA9IGl0LT5zZWNvbmQ7Ci0g
ICAgICAgIHBhcmFtTmFtZXMuYXBwZW5kKGl0LT5maXJzdCk7Ci0gICAgICAgIHBhcmFtVmFsdWVz
LmFwcGVuZChpdC0+c2Vjb25kKTsKLSAgICB9Ci0KLSAgICBpZiAoIWNvZGVCYXNlVVJMU3RyaW5n
LmlzRW1wdHkoKSkgewotICAgICAgICBLVVJMIGNvZGVCYXNlVVJMID0gY29tcGxldGVVUkwoY29k
ZUJhc2VVUkxTdHJpbmcpOwotICAgICAgICBpZiAoIVNlY3VyaXR5T3JpZ2luOjpjYW5Mb2FkKGNv
ZGVCYXNlVVJMLCBTdHJpbmcoKSwgZWxlbWVudC0+ZG9jdW1lbnQoKSkpIHsKLSAgICAgICAgICAg
IEZyYW1lTG9hZGVyOjpyZXBvcnRMb2NhbExvYWRGYWlsZWQobV9mcmFtZSwgY29kZUJhc2VVUkwu
c3RyaW5nKCkpOwotICAgICAgICAgICAgcmV0dXJuIDA7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAg
ICBpZiAoYmFzZVVSTFN0cmluZy5pc0VtcHR5KCkpCi0gICAgICAgIGJhc2VVUkxTdHJpbmcgPSBt
X2ZyYW1lLT5kb2N1bWVudCgpLT5iYXNlVVJMKCkuc3RyaW5nKCk7Ci0gICAgS1VSTCBiYXNlVVJM
ID0gY29tcGxldGVVUkwoYmFzZVVSTFN0cmluZyk7Ci0KLSAgICBSZWZQdHI8V2lkZ2V0PiB3aWRn
ZXQgPSBtX2NsaWVudC0+Y3JlYXRlSmF2YUFwcGxldFdpZGdldChzaXplLCBlbGVtZW50LCBiYXNl
VVJMLCBwYXJhbU5hbWVzLCBwYXJhbVZhbHVlcyk7Ci0gICAgaWYgKCF3aWRnZXQpCi0gICAgICAg
IHJldHVybiAwOwotCi0gICAgbV9jb250YWluc1BsdWdJbnMgPSB0cnVlOwotICAgIHJldHVybiB3
aWRnZXQ7Ci19Ci0KIHZvaWQgRnJhbWVMb2FkZXI6OmRpZENoYW5nZVRpdGxlKERvY3VtZW50TG9h
ZGVyKiBsb2FkZXIpCiB7CiAgICAgbV9jbGllbnQtPmRpZENoYW5nZVRpdGxlKGxvYWRlcik7Cklu
ZGV4OiBXZWJDb3JlL2xvYWRlci9QbHVnaW5Eb2N1bWVudC5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2Vi
Q29yZS9sb2FkZXIvUGx1Z2luRG9jdW1lbnQuY3BwCShyZXZpc2lvbiA2MDkxNykKKysrIFdlYkNv
cmUvbG9hZGVyL1BsdWdpbkRvY3VtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTE5LDcgKzEx
OSw3IEBACiAKICAgICBpZiAoRnJhbWUqIGZyYW1lID0gbV9kb2MtPmZyYW1lKCkpIHsKICAgICAg
ICAgU2V0dGluZ3MqIHNldHRpbmdzID0gZnJhbWUtPnNldHRpbmdzKCk7Ci0gICAgICAgIGlmIChz
ZXR0aW5ncyAmJiBmcmFtZS0+bG9hZGVyKCktPmFsbG93UGx1Z2lucyhOb3RBYm91dFRvSW5zdGFu
dGlhdGVQbHVnaW4pKSB7CisgICAgICAgIGlmIChzZXR0aW5ncyAmJiBmcmFtZS0+bG9hZGVyKCkt
PnN1YmZyYW1lTG9hZGVyKCktPmFsbG93UGx1Z2lucyhOb3RBYm91dFRvSW5zdGFudGlhdGVQbHVn
aW4pKSB7CiAgICAgICAgICAgICBtX2RvYy0+dXBkYXRlTGF5b3V0KCk7CiAKICAgICAgICAgICAg
IGlmIChSZW5kZXJXaWRnZXQqIHJlbmRlcmVyID0gdG9SZW5kZXJXaWRnZXQobV9lbWJlZEVsZW1l
bnQtPnJlbmRlcmVyKCkpKSB7CkluZGV4OiBXZWJDb3JlL2xvYWRlci9TdWJmcmFtZUxvYWRlci5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFdlYkNvcmUvbG9hZGVyL1N1YmZyYW1lTG9hZGVyLmgJKHJldmlzaW9u
IDApCisrKyBXZWJDb3JlL2xvYWRlci9TdWJmcmFtZUxvYWRlci5oCShyZXZpc2lvbiAwKQpAQCAt
MCwwICsxLDkzIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA2LCAyMDA3LCAyMDA4LCAyMDA5
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwOCwg
MjAwOSBUb3JjaCBNb2JpbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLiAoaHR0cDovL3d3dy50
b3JjaG1vYmlsZS5jb20vKQorICogQ29weXJpZ2h0IChDKSBSZXNlYXJjaCBJbiBNb3Rpb24gTGlt
aXRlZCAyMDA5LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCisgKiBhcmUgbWV0OgorICoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4gCisgKiAy
LiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4gCisgKiAz
LiAgTmVpdGhlciB0aGUgbmFtZSBvZiBBcHBsZSBDb21wdXRlciwgSW5jLiAoIkFwcGxlIikgbm9y
IHRoZSBuYW1lcyBvZgorICogICAgIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5k
b3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQKKyAqICAgICBmcm9tIHRoaXMgc29mdHdh
cmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uIAorICoKKyAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFT
IElTIiBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBE
SVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJF
IExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECisgKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFIE9GCisgKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgU3ViZnJhbWVMb2FkZXJf
aAorI2RlZmluZSBTdWJmcmFtZUxvYWRlcl9oCisKKyNpbmNsdWRlICJGcmFtZUxvYWRlclR5cGVz
LmgiCisjaW5jbHVkZSAiUGxhdGZvcm1TdHJpbmcuaCIKKyNpbmNsdWRlIDx3dGYvRm9yd2FyZC5o
PgorI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+CisjaW5jbHVkZSA8d3RmL05vbmNvcHlhYmxlLmg+
CisjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNz
IEF0b21pY1N0cmluZzsKK2NsYXNzIEZyYW1lOworY2xhc3MgRnJhbWVMb2FkZXJDbGllbnQ7Citj
bGFzcyBIVE1MQXBwbGV0RWxlbWVudDsKK2NsYXNzIEhUTUxGcmFtZU93bmVyRWxlbWVudDsKK2Ns
YXNzIEludFNpemU7CitjbGFzcyBLVVJMOworI2lmIEVOQUJMRShQTFVHSU5fUFJPWFlfRk9SX1ZJ
REVPKQorY2xhc3MgTm9kZTsKKyNlbmRpZgorY2xhc3MgUmVuZGVyRW1iZWRkZWRPYmplY3Q7Citj
bGFzcyBXaWRnZXQ7CisKKy8vIFRoaXMgaXMgYSBzbGlnaHQgbWlzbm9tZXIuIEl0IGhhbmRsZXMg
dGhlIGhpZ2hlciBsZXZlbCBsb2dpYyBvZiBsb2FkaW5nIGJvdGggc3ViZnJhbWVzIGFuZCBwbHVn
aW5zLgorY2xhc3MgU3ViZnJhbWVMb2FkZXIgOiBwdWJsaWMgTm9uY29weWFibGUgeworcHVibGlj
OgorICAgIFN1YmZyYW1lTG9hZGVyKEZyYW1lKiwgRnJhbWVMb2FkZXJDbGllbnQqKTsKKworICAg
IHZvaWQgY2xlYXIoKTsKKworICAgIGJvb2wgcmVxdWVzdEZyYW1lKEhUTUxGcmFtZU93bmVyRWxl
bWVudCosIGNvbnN0IFN0cmluZyYgdXJsLCBjb25zdCBBdG9taWNTdHJpbmcmIGZyYW1lTmFtZSwg
Ym9vbCBsb2NrSGlzdG9yeSA9IHRydWUsIGJvb2wgbG9ja0JhY2tGb3J3YXJkTGlzdCA9IHRydWUp
OyAgICAKKyAgICBib29sIHJlcXVlc3RPYmplY3QoUmVuZGVyRW1iZWRkZWRPYmplY3QqLCBjb25z
dCBTdHJpbmcmIHVybCwgY29uc3QgQXRvbWljU3RyaW5nJiBmcmFtZU5hbWUsCisgICAgICAgIGNv
bnN0IFN0cmluZyYgc2VydmljZVR5cGUsIGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBwYXJhbU5hbWVz
LCBjb25zdCBWZWN0b3I8U3RyaW5nPiYgcGFyYW1WYWx1ZXMpOworCisjaWYgRU5BQkxFKFBMVUdJ
Tl9QUk9YWV9GT1JfVklERU8pCisgICAgUGFzc1JlZlB0cjxXaWRnZXQ+IGxvYWRNZWRpYVBsYXll
clByb3h5UGx1Z2luKE5vZGUqLCBjb25zdCBLVVJMJiwgY29uc3QgVmVjdG9yPFN0cmluZz4mIHBh
cmFtTmFtZXMsIGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBwYXJhbVZhbHVlcyk7CisjZW5kaWYKKwor
ICAgIFBhc3NSZWZQdHI8V2lkZ2V0PiBjcmVhdGVKYXZhQXBwbGV0V2lkZ2V0KGNvbnN0IEludFNp
emUmLCBIVE1MQXBwbGV0RWxlbWVudCosIGNvbnN0IEhhc2hNYXA8U3RyaW5nLCBTdHJpbmc+JiBh
cmdzKTsKKworICAgIGJvb2wgYWxsb3dQbHVnaW5zKFJlYXNvbkZvckNhbGxpbmdBbGxvd1BsdWdp
bnMpOworCisgICAgYm9vbCBjb250YWluc1BsdWdpbnMoKSBjb25zdCB7IHJldHVybiBtX2NvbnRh
aW5zUGx1Z2luczsgfQorCitwcml2YXRlOgorICAgIEZyYW1lKiBsb2FkU3ViZnJhbWUoSFRNTEZy
YW1lT3duZXJFbGVtZW50KiwgY29uc3QgS1VSTCYsIGNvbnN0IFN0cmluZyYgbmFtZSwgY29uc3Qg
U3RyaW5nJiByZWZlcnJlcik7CisgICAgYm9vbCBsb2FkUGx1Z2luKFJlbmRlckVtYmVkZGVkT2Jq
ZWN0KiwgY29uc3QgS1VSTCYsIGNvbnN0IFN0cmluZyYgbWltZVR5cGUsCisgICAgICAgIGNvbnN0
IFZlY3RvcjxTdHJpbmc+JiBwYXJhbU5hbWVzLCBjb25zdCBWZWN0b3I8U3RyaW5nPiYgcGFyYW1W
YWx1ZXMsIGJvb2wgdXNlRmFsbGJhY2spOworCisgICAgYm9vbCBzaG91bGRVc2VQbHVnaW4oY29u
c3QgS1VSTCYsIGNvbnN0IFN0cmluZyYgbWltZVR5cGUsIGJvb2wgaGFzRmFsbGJhY2ssIGJvb2wm
IHVzZUZhbGxiYWNrKTsKKworICAgIGJvb2wgbV9jb250YWluc1BsdWdpbnM7CisgICAgRnJhbWUq
IG1fZnJhbWU7CisgICAgRnJhbWVMb2FkZXJDbGllbnQqIG1fY2xpZW50OworCisgICAgS1VSTCBj
b21wbGV0ZVVSTChjb25zdCBTdHJpbmcmKSBjb25zdDsKK307CisKK30gLy8gbmFtZXNwYWNlIFdl
YkNvcmUKKworI2VuZGlmIC8vIFN1YmZyYW1lTG9hZGVyX2gKSW5kZXg6IFdlYkNvcmUvbG9hZGVy
L0ZyYW1lTG9hZGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9sb2FkZXIvRnJhbWVMb2FkZXIu
aAkocmV2aXNpb24gNjA5MTcpCisrKyBXZWJDb3JlL2xvYWRlci9GcmFtZUxvYWRlci5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC00MCw2ICs0MCw3IEBACiAjaW5jbHVkZSAiUmVkaXJlY3RTY2hlZHVsZXIu
aCIKICNpbmNsdWRlICJSZXNvdXJjZUxvYWROb3RpZmllci5oIgogI2luY2x1ZGUgIlJlc291cmNl
UmVxdWVzdC5oIgorI2luY2x1ZGUgIlN1YmZyYW1lTG9hZGVyLmgiCiAjaW5jbHVkZSAiVGhyZWFk
YWJsZUxvYWRlci5oIgogI2luY2x1ZGUgIlRpbWVyLmgiCiAjaW5jbHVkZSA8d3RmL0ZvcndhcmQu
aD4KQEAgLTYwLDE3ICs2MSwxMCBAQAogY2xhc3MgRnJhbWU7CiBjbGFzcyBGcmFtZUxvYWRlckNs
aWVudDsKIGNsYXNzIEhpc3RvcnlJdGVtOwotY2xhc3MgSFRNTEFwcGxldEVsZW1lbnQ7CiBjbGFz
cyBIVE1MRm9ybUVsZW1lbnQ7Ci1jbGFzcyBIVE1MRnJhbWVPd25lckVsZW1lbnQ7CiBjbGFzcyBJ
Y29uTG9hZGVyOwotY2xhc3MgSW50U2l6ZTsKIGNsYXNzIE5hdmlnYXRpb25BY3Rpb247Ci0jaWYg
RU5BQkxFKFBMVUdJTl9QUk9YWV9GT1JfVklERU8pCi1jbGFzcyBOb2RlOwotI2VuZGlmCiBjbGFz
cyBQcm90ZWN0aW9uU3BhY2U7Ci1jbGFzcyBSZW5kZXJFbWJlZGRlZE9iamVjdDsKIGNsYXNzIFJl
c291cmNlRXJyb3I7CiBjbGFzcyBSZXNvdXJjZUxvYWRlcjsKIGNsYXNzIFJlc291cmNlUmVzcG9u
c2U7CkBAIC04Miw3ICs3Niw2IEBACiBjbGFzcyBTaGFyZWRCdWZmZXI7CiBjbGFzcyBTdWJzdGl0
dXRlRGF0YTsKIGNsYXNzIFRleHRSZXNvdXJjZURlY29kZXI7Ci1jbGFzcyBXaWRnZXQ7CiAKIHN0
cnVjdCBGcmFtZUxvYWRSZXF1ZXN0Owogc3RydWN0IFdpbmRvd0ZlYXR1cmVzOwpAQCAtMTAyLDYg
Kzk1LDcgQEAKICAgICBIaXN0b3J5Q29udHJvbGxlciogaGlzdG9yeSgpIGNvbnN0IHsgcmV0dXJu
ICZtX2hpc3Rvcnk7IH0KICAgICBSZXNvdXJjZUxvYWROb3RpZmllciogbm90aWZpZXIoKSBjb25z
dCB7IHJldHVybiAmbV9ub3RpZmVyOyB9CiAgICAgRG9jdW1lbnRXcml0ZXIqIHdyaXRlcigpIGNv
bnN0IHsgcmV0dXJuICZtX3dyaXRlcjsgfQorICAgIFN1YmZyYW1lTG9hZGVyKiBzdWJmcmFtZUxv
YWRlcigpIGNvbnN0IHsgcmV0dXJuICZtX3N1YmZyYW1lTG9hZGVyOyB9CiAKICAgICAvLyBGSVhN
RTogVGhpcyBpcyBub3QgY29vbCwgcGVvcGxlLiBUaGVyZSBhcmUgdG9vIG1hbnkgZGlmZmVyZW50
IGZ1bmN0aW9ucyB0aGF0IGFsbCBzdGFydCBsb2Fkcy4KICAgICAvLyBXZSBzaG91bGQgYWltIHRv
IGNvbnNvbGlkYXRlIHRoZXNlIGludG8gYSBzbWFsbGVyIHNldCBvZiBmdW5jdGlvbnMsIGFuZCB0
cnkgdG8gcmV1c2UgbW9yZSBvZgpAQCAtMjIyLDcgKzIxNiw2IEBACiAKICAgICB2b2lkIGNoYW5n
ZUxvY2F0aW9uKGNvbnN0IEtVUkwmLCBjb25zdCBTdHJpbmcmIHJlZmVycmVyLCBib29sIGxvY2tI
aXN0b3J5ID0gdHJ1ZSwgYm9vbCBsb2NrQmFja0ZvcndhcmRMaXN0ID0gdHJ1ZSwgYm9vbCB1c2Vy
R2VzdHVyZSA9IGZhbHNlLCBib29sIHJlZnJlc2ggPSBmYWxzZSk7CiAgICAgdm9pZCB1cmxTZWxl
Y3RlZChjb25zdCBLVVJMJiwgY29uc3QgU3RyaW5nJiB0YXJnZXQsIFBhc3NSZWZQdHI8RXZlbnQ+
LCBib29sIGxvY2tIaXN0b3J5LCBib29sIGxvY2tCYWNrRm9yd2FyZExpc3QsIGJvb2wgdXNlckdl
c3R1cmUsIFJlZmVycmVyUG9saWN5KTsKLSAgICBib29sIHJlcXVlc3RGcmFtZShIVE1MRnJhbWVP
d25lckVsZW1lbnQqLCBjb25zdCBTdHJpbmcmIHVybCwgY29uc3QgQXRvbWljU3RyaW5nJiBmcmFt
ZU5hbWUsIGJvb2wgbG9ja0hpc3RvcnkgPSB0cnVlLCBib29sIGxvY2tCYWNrRm9yd2FyZExpc3Qg
PSB0cnVlKTsKIAogICAgIHZvaWQgc3VibWl0Rm9ybShjb25zdCBjaGFyKiBhY3Rpb24sIGNvbnN0
IFN0cmluZyYgdXJsLAogICAgICAgICBQYXNzUmVmUHRyPEZvcm1EYXRhPiwgY29uc3QgU3RyaW5n
JiB0YXJnZXQsIGNvbnN0IFN0cmluZyYgY29udGVudFR5cGUsIGNvbnN0IFN0cmluZyYgYm91bmRh
cnksCkBAIC0yNDcsOCArMjQwLDYgQEAKICAgICB2b2lkIGhhbmRsZWRPbmxvYWRFdmVudHMoKTsK
ICAgICBTdHJpbmcgdXNlckFnZW50KGNvbnN0IEtVUkwmKSBjb25zdDsKIAotICAgIFBhc3NSZWZQ
dHI8V2lkZ2V0PiBjcmVhdGVKYXZhQXBwbGV0V2lkZ2V0KGNvbnN0IEludFNpemUmLCBIVE1MQXBw
bGV0RWxlbWVudCosIGNvbnN0IEhhc2hNYXA8U3RyaW5nLCBTdHJpbmc+JiBhcmdzKTsKLQogICAg
IHZvaWQgZGlzcGF0Y2hEaWRDbGVhcldpbmRvd09iamVjdEluV29ybGQoRE9NV3JhcHBlcldvcmxk
Kik7CiAgICAgdm9pZCBkaXNwYXRjaERpZENsZWFyV2luZG93T2JqZWN0c0luQWxsV29ybGRzKCk7
CiAgICAgdm9pZCBkaXNwYXRjaERvY3VtZW50RWxlbWVudEF2YWlsYWJsZSgpOwpAQCAtMjg0LDkg
KzI3NSw2IEBACiAgICAgLy8gc2V0VVJMIGlzIGEgbG93LWxldmVsIHNldHRlciBhbmQgZG9lcyBu
b3QgdHJpZ2dlciBsb2FkaW5nLgogICAgIHZvaWQgc2V0VVJMKGNvbnN0IEtVUkwmKTsKIAotICAg
IGJvb2wgYWxsb3dQbHVnaW5zKFJlYXNvbkZvckNhbGxpbmdBbGxvd1BsdWdpbnMpOwotICAgIGJv
b2wgY29udGFpbnNQbHVnaW5zKCkgY29uc3Q7Ci0KICAgICB2b2lkIGxvYWREb25lKCk7CiAgICAg
dm9pZCBmaW5pc2hlZFBhcnNpbmcoKTsKICAgICB2b2lkIGNoZWNrQ29tcGxldGVkKCk7CkBAIC0y
OTQsMTAgKzI4Miw4IEBACiAgICAgdm9pZCBjaGVja0RpZFBlcmZvcm1GaXJzdE5hdmlnYXRpb24o
KTsKIAogICAgIGJvb2wgaXNDb21wbGV0ZSgpIGNvbnN0OworICAgIHZvaWQgc2V0SXNDb21wbGV0
ZShib29sKTsKIAotICAgIGJvb2wgcmVxdWVzdE9iamVjdChSZW5kZXJFbWJlZGRlZE9iamVjdCos
IGNvbnN0IFN0cmluZyYgdXJsLCBjb25zdCBBdG9taWNTdHJpbmcmIGZyYW1lTmFtZSwKLSAgICAg
ICAgY29uc3QgU3RyaW5nJiBzZXJ2aWNlVHlwZSwgY29uc3QgVmVjdG9yPFN0cmluZz4mIHBhcmFt
TmFtZXMsIGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBwYXJhbVZhbHVlcyk7Ci0KICAgICBLVVJMIGNv
bXBsZXRlVVJMKGNvbnN0IFN0cmluZyYgdXJsKTsKIAogICAgIHZvaWQgY2FuY2VsQW5kQ2xlYXIo
KTsKQEAgLTMyNSwxMCArMzExLDYgQEAKIAogICAgIHZvaWQgb3BlbihDYWNoZWRGcmFtZUJhc2Um
KTsKIAotI2lmIEVOQUJMRShQTFVHSU5fUFJPWFlfRk9SX1ZJREVPKQotICAgIFBhc3NSZWZQdHI8
V2lkZ2V0PiBsb2FkTWVkaWFQbGF5ZXJQcm94eVBsdWdpbihOb2RlKiwgY29uc3QgS1VSTCYsIGNv
bnN0IFZlY3RvcjxTdHJpbmc+JiBwYXJhbU5hbWVzLCBjb25zdCBWZWN0b3I8U3RyaW5nPiYgcGFy
YW1WYWx1ZXMpOwotI2VuZGlmCi0KICAgICAvLyBGSVhNRTogU2hvdWxkIHRoZXNlIHJlYWxseSBi
ZSBwdWJsaWM/CiAgICAgdm9pZCBjb21wbGV0ZWQoKTsKICAgICBib29sIGFsbEFuY2VzdG9yc0Fy
ZUNvbXBsZXRlKCkgY29uc3Q7IC8vIGluY2x1ZGluZyB0aGlzCkBAIC0zNjQsMTAgKzM0Niw2IEBA
CiAgICAgdm9pZCBjaGVja1RpbWVyRmlyZWQoVGltZXI8RnJhbWVMb2FkZXI+Kik7CiAKICAgICB2
b2lkIHN0YXJ0ZWQoKTsKLQotICAgIGJvb2wgc2hvdWxkVXNlUGx1Z2luKGNvbnN0IEtVUkwmLCBj
b25zdCBTdHJpbmcmIG1pbWVUeXBlLCBib29sIGhhc0ZhbGxiYWNrLCBib29sJiB1c2VGYWxsYmFj
ayk7Ci0gICAgYm9vbCBsb2FkUGx1Z2luKFJlbmRlckVtYmVkZGVkT2JqZWN0KiwgY29uc3QgS1VS
TCYsIGNvbnN0IFN0cmluZyYgbWltZVR5cGUsCi0gICAgICAgIGNvbnN0IFZlY3RvcjxTdHJpbmc+
JiBwYXJhbU5hbWVzLCBjb25zdCBWZWN0b3I8U3RyaW5nPiYgcGFyYW1WYWx1ZXMsIGJvb2wgdXNl
RmFsbGJhY2spOwogICAgIAogICAgIHZvaWQgbmF2aWdhdGVXaXRoaW5Eb2N1bWVudChIaXN0b3J5
SXRlbSopOwogICAgIHZvaWQgbmF2aWdhdGVUb0RpZmZlcmVudERvY3VtZW50KEhpc3RvcnlJdGVt
KiwgRnJhbWVMb2FkVHlwZSk7CkBAIC00NDMsOCArNDIxLDYgQEAKICAgICB2b2lkIGRldGFjaENo
aWxkcmVuKCk7CiAgICAgdm9pZCBjbG9zZUFuZFJlbW92ZUNoaWxkKEZyYW1lKik7CiAKLSAgICBG
cmFtZSogbG9hZFN1YmZyYW1lKEhUTUxGcmFtZU93bmVyRWxlbWVudCosIGNvbnN0IEtVUkwmLCBj
b25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0IFN0cmluZyYgcmVmZXJyZXIpOwotCiAgICAgdm9pZCBs
b2FkSW5TYW1lRG9jdW1lbnQoY29uc3QgS1VSTCYsIFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZSogc3Rh
dGVPYmplY3QsIGJvb2wgaXNOZXdOYXZpZ2F0aW9uKTsKIAogICAgIHZvaWQgcHJvdmlzaW9uYWxM
b2FkU3RhcnRlZCgpOwpAQCAtNDcwLDYgKzQ0Niw3IEBACiAgICAgbXV0YWJsZSBIaXN0b3J5Q29u
dHJvbGxlciBtX2hpc3Rvcnk7CiAgICAgbXV0YWJsZSBSZXNvdXJjZUxvYWROb3RpZmllciBtX25v
dGlmZXI7CiAgICAgbXV0YWJsZSBEb2N1bWVudFdyaXRlciBtX3dyaXRlcjsKKyAgICBtdXRhYmxl
IFN1YmZyYW1lTG9hZGVyIG1fc3ViZnJhbWVMb2FkZXI7CiAKICAgICBGcmFtZVN0YXRlIG1fc3Rh
dGU7CiAgICAgRnJhbWVMb2FkVHlwZSBtX2xvYWRUeXBlOwpAQCAtNTEyLDggKzQ4OSw2IEBACiAg
ICAgYm9vbCBtX25lZWRzQ2xlYXI7CiAgICAgYm9vbCBtX3JlY2VpdmVkRGF0YTsKIAotICAgIGJv
b2wgbV9jb250YWluc1BsdWdJbnM7Ci0KICAgICBLVVJMIG1fc3VibWl0dGVkRm9ybVVSTDsKIAog
ICAgIFRpbWVyPEZyYW1lTG9hZGVyPiBtX2NoZWNrVGltZXI7CkluZGV4OiBXZWJDb3JlL2xvYWRl
ci9TdWJmcmFtZUxvYWRlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9sb2FkZXIvU3ViZnJh
bWVMb2FkZXIuY3BwCShyZXZpc2lvbiAwKQorKysgV2ViQ29yZS9sb2FkZXIvU3ViZnJhbWVMb2Fk
ZXIuY3BwCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDM1MyBAQAorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAwNiwgMjAwNywgMjAwOCwgMjAwOSwgMjAxMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDggTm9raWEgQ29ycG9yYXRpb24gYW5kL29yIGl0
cyBzdWJzaWRpYXJ5KC1pZXMpCisgKiBDb3B5cmlnaHQgKEMpIDIwMDgsIDIwMDkgVG9yY2ggTW9i
aWxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gKGh0dHA6Ly93d3cudG9yY2htb2JpbGUuY29t
LykKKyAqIENvcHlyaWdodCAoQykgMjAwOCBBbHAgVG9rZXIgPGFscEBhdG9rZXIuY29tPgorICog
Q29weXJpZ2h0IChDKSBSZXNlYXJjaCBJbiBNb3Rpb24gTGltaXRlZCAyMDA5LiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0Ogor
ICoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4gCisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4gCisgKiAzLiAgTmVpdGhlciB0aGUgbmFtZSBv
ZiBBcHBsZSBDb21wdXRlciwgSW5jLiAoIkFwcGxlIikgbm9yIHRoZSBuYW1lcyBvZgorICogICAg
IGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1
Y3RzIGRlcml2ZWQKKyAqICAgICBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBw
cmlvciB3cml0dGVuIHBlcm1pc3Npb24uIAorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCisgKiBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNF
UVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9D
VVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0Us
IERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5ECisgKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCisgKiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJTdWJmcmFtZUxvYWRl
ci5oIgorCisjaW5jbHVkZSAiRnJhbWUuaCIKKyNpbmNsdWRlICJGcmFtZUxvYWRlckNsaWVudC5o
IgorI2luY2x1ZGUgIkhUTUxBcHBsZXRFbGVtZW50LmgiCisjaW5jbHVkZSAiSFRNTEZyYW1lRWxl
bWVudEJhc2UuaCIKKyNpZiBFTkFCTEUoUExVR0lOX1BST1hZX0ZPUl9WSURFTykKKyNpbmNsdWRl
ICJIVE1MTWVkaWFFbGVtZW50LmgiCisjZW5kaWYKKyNpbmNsdWRlICJIVE1MTmFtZXMuaCIKKyNp
bmNsdWRlICJIVE1MUGx1Z0luRWxlbWVudC5oIgorI2luY2x1ZGUgIk1JTUVUeXBlUmVnaXN0cnku
aCIKKyNpbmNsdWRlICJOb2RlLmgiCisjaW5jbHVkZSAiUGFnZS5oIgorI2luY2x1ZGUgIlBsdWdp
bkRhdGEuaCIKKyNpbmNsdWRlICJSZW5kZXJFbWJlZGRlZE9iamVjdC5oIgorI2lmIEVOQUJMRShQ
TFVHSU5fUFJPWFlfRk9SX1ZJREVPKQorI2luY2x1ZGUgIlJlbmRlclZpZGVvLmgiCisjZW5kaWYK
KyNpbmNsdWRlICJSZW5kZXJWaWV3LmgiCisjaW5jbHVkZSAiU2V0dGluZ3MuaCIKKyNpbmNsdWRl
ICJYU1NBdWRpdG9yLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKyAgICAKK3VzaW5nIG5hbWVz
cGFjZSBIVE1MTmFtZXM7CisKK1N1YmZyYW1lTG9hZGVyOjpTdWJmcmFtZUxvYWRlcihGcmFtZSog
ZnJhbWUsIEZyYW1lTG9hZGVyQ2xpZW50KiBjbGllbnQpCisgICAgOiBtX2ZyYW1lKGZyYW1lKQor
ICAgICwgbV9jbGllbnQoY2xpZW50KQoreworfQorCitzdGF0aWMgSFRNTFBsdWdJbkVsZW1lbnQq
IHRvUGx1Z0luRWxlbWVudChOb2RlKiBub2RlKQoreworICAgIGlmICghbm9kZSkKKyAgICAgICAg
cmV0dXJuIDA7CisKKyAgICBBU1NFUlQobm9kZS0+aGFzVGFnTmFtZShvYmplY3RUYWcpIHx8IG5v
ZGUtPmhhc1RhZ05hbWUoZW1iZWRUYWcpIAorICAgICAgICB8fCBub2RlLT5oYXNUYWdOYW1lKGFw
cGxldFRhZykpOworCisgICAgcmV0dXJuIHN0YXRpY19jYXN0PEhUTUxQbHVnSW5FbGVtZW50Kj4o
bm9kZSk7Cit9CisKK3ZvaWQgU3ViZnJhbWVMb2FkZXI6OmNsZWFyKCkKK3sKKyAgICBtX2NvbnRh
aW5zUGx1Z2lucyA9IGZhbHNlOworfQorCitib29sIFN1YmZyYW1lTG9hZGVyOjpyZXF1ZXN0RnJh
bWUoSFRNTEZyYW1lT3duZXJFbGVtZW50KiBvd25lckVsZW1lbnQsIGNvbnN0IFN0cmluZyYgdXJs
U3RyaW5nLCBjb25zdCBBdG9taWNTdHJpbmcmIGZyYW1lTmFtZSwgYm9vbCBsb2NrSGlzdG9yeSwg
Ym9vbCBsb2NrQmFja0ZvcndhcmRMaXN0KQoreworICAgIC8vIFN1cHBvcnQgZm9yIDxmcmFtZSBz
cmM9ImphdmFzY3JpcHQ6c3RyaW5nIj4KKyAgICBLVVJMIHNjcmlwdFVSTDsKKyAgICBLVVJMIHVy
bDsKKyAgICBpZiAocHJvdG9jb2xJc0phdmFTY3JpcHQodXJsU3RyaW5nKSkgeworICAgICAgICBz
Y3JpcHRVUkwgPSBjb21wbGV0ZVVSTCh1cmxTdHJpbmcpOyAvLyBjb21wbGV0ZVVSTCgpIGVuY29k
ZXMgdGhlIFVSTC4KKyAgICAgICAgdXJsID0gYmxhbmtVUkwoKTsKKyAgICB9IGVsc2UKKyAgICAg
ICAgdXJsID0gY29tcGxldGVVUkwodXJsU3RyaW5nKTsKKworICAgIEZyYW1lKiBmcmFtZSA9IG93
bmVyRWxlbWVudC0+Y29udGVudEZyYW1lKCk7CisgICAgaWYgKGZyYW1lKQorICAgICAgICBmcmFt
ZS0+cmVkaXJlY3RTY2hlZHVsZXIoKS0+c2NoZWR1bGVMb2NhdGlvbkNoYW5nZSh1cmwuc3RyaW5n
KCksIG1fZnJhbWUtPmxvYWRlcigpLT5vdXRnb2luZ1JlZmVycmVyKCksIGxvY2tIaXN0b3J5LCBs
b2NrQmFja0ZvcndhcmRMaXN0LCBtX2ZyYW1lLT5sb2FkZXIoKS0+aXNQcm9jZXNzaW5nVXNlckdl
c3R1cmUoKSk7CisgICAgZWxzZQorICAgICAgICBmcmFtZSA9IGxvYWRTdWJmcmFtZShvd25lckVs
ZW1lbnQsIHVybCwgZnJhbWVOYW1lLCBtX2ZyYW1lLT5sb2FkZXIoKS0+b3V0Z29pbmdSZWZlcnJl
cigpKTsKKyAgICAKKyAgICBpZiAoIWZyYW1lKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAg
ICBpZiAoIXNjcmlwdFVSTC5pc0VtcHR5KCkpCisgICAgICAgIGZyYW1lLT5zY3JpcHQoKS0+ZXhl
Y3V0ZUlmSmF2YVNjcmlwdFVSTChzY3JpcHRVUkwpOworCisgICAgcmV0dXJuIHRydWU7Cit9CisK
K2Jvb2wgU3ViZnJhbWVMb2FkZXI6OnJlcXVlc3RPYmplY3QoUmVuZGVyRW1iZWRkZWRPYmplY3Qq
IHJlbmRlcmVyLCBjb25zdCBTdHJpbmcmIHVybCwgY29uc3QgQXRvbWljU3RyaW5nJiBmcmFtZU5h
bWUsCisgICAgY29uc3QgU3RyaW5nJiBtaW1lVHlwZSwgY29uc3QgVmVjdG9yPFN0cmluZz4mIHBh
cmFtTmFtZXMsIGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBwYXJhbVZhbHVlcykKK3sKKyAgICBpZiAo
dXJsLmlzRW1wdHkoKSAmJiBtaW1lVHlwZS5pc0VtcHR5KCkpCisgICAgICAgIHJldHVybiBmYWxz
ZTsKKyAgICAKKyAgICBpZiAoIW1fZnJhbWUtPnNjcmlwdCgpLT54c3NBdWRpdG9yKCktPmNhbkxv
YWRPYmplY3QodXJsKSkgeworICAgICAgICAvLyBJdCBpcyB1bnNhZmUgdG8gaG9ub3IgdGhlIHJl
cXVlc3QgZm9yIHRoaXMgb2JqZWN0LgorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisg
ICAgS1VSTCBjb21wbGV0ZWRVUkw7CisgICAgaWYgKCF1cmwuaXNFbXB0eSgpKQorICAgICAgICBj
b21wbGV0ZWRVUkwgPSBjb21wbGV0ZVVSTCh1cmwpOworCisgICAgYm9vbCB1c2VGYWxsYmFjazsK
KyAgICBpZiAoc2hvdWxkVXNlUGx1Z2luKGNvbXBsZXRlZFVSTCwgbWltZVR5cGUsIHJlbmRlcmVy
LT5oYXNGYWxsYmFja0NvbnRlbnQoKSwgdXNlRmFsbGJhY2spKSB7CisgICAgICAgIFNldHRpbmdz
KiBzZXR0aW5ncyA9IG1fZnJhbWUtPnNldHRpbmdzKCk7CisgICAgICAgIGlmICgoIWFsbG93UGx1
Z2lucyhBYm91dFRvSW5zdGFudGlhdGVQbHVnaW4pCisgICAgICAgICAgICAgLy8gQXBwbGljYXRp
b24gcGx1Z2lucyBhcmUgcGx1Z2lucyBpbXBsZW1lbnRlZCBieSB0aGUgdXNlciBhZ2VudCwgZm9y
IGV4YW1wbGUgUXQgcGx1Z2lucywKKyAgICAgICAgICAgICAvLyBhcyBvcHBvc2VkIHRvIHRoaXJk
LXBhcnR5IGNvZGUgc3VjaCBhcyBmbGFzaC4gVGhlIHVzZXIgYWdlbnQgZGVjaWRlcyB3aGV0aGVy
IG9yIG5vdCB0aGV5IGFyZQorICAgICAgICAgICAgIC8vIHBlcm1pdHRlZCwgcmF0aGVyIHRoYW4g
V2ViS2l0LgorICAgICAgICAgICAgICYmICFNSU1FVHlwZVJlZ2lzdHJ5Ojppc0FwcGxpY2F0aW9u
UGx1Z2luTUlNRVR5cGUobWltZVR5cGUpKQorICAgICAgICAgICAgfHwgKCFzZXR0aW5ncy0+aXNK
YXZhRW5hYmxlZCgpICYmIE1JTUVUeXBlUmVnaXN0cnk6OmlzSmF2YUFwcGxldE1JTUVUeXBlKG1p
bWVUeXBlKSkpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIGlmIChtX2ZyYW1l
LT5kb2N1bWVudCgpICYmIG1fZnJhbWUtPmRvY3VtZW50KCktPnNlY3VyaXR5T3JpZ2luKCktPmlz
U2FuZGJveGVkKFNhbmRib3hQbHVnaW5zKSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAg
ICAgICAgcmV0dXJuIGxvYWRQbHVnaW4ocmVuZGVyZXIsIGNvbXBsZXRlZFVSTCwgbWltZVR5cGUs
IHBhcmFtTmFtZXMsIHBhcmFtVmFsdWVzLCB1c2VGYWxsYmFjayk7CisgICAgfQorCisgICAgQVNT
RVJUKHJlbmRlcmVyLT5ub2RlKCktPmhhc1RhZ05hbWUob2JqZWN0VGFnKSB8fCByZW5kZXJlci0+
bm9kZSgpLT5oYXNUYWdOYW1lKGVtYmVkVGFnKSk7CisgICAgSFRNTFBsdWdJbkVsZW1lbnQqIGVs
ZW1lbnQgPSBzdGF0aWNfY2FzdDxIVE1MUGx1Z0luRWxlbWVudCo+KHJlbmRlcmVyLT5ub2RlKCkp
OworCisgICAgLy8gSWYgdGhlIHBsdWctaW4gZWxlbWVudCBhbHJlYWR5IGNvbnRhaW5zIGEgc3Vi
ZnJhbWUsIHJlcXVlc3RGcmFtZSB3aWxsIHJlLXVzZSBpdC4gT3RoZXJ3aXNlLAorICAgIC8vIGl0
IHdpbGwgY3JlYXRlIGEgbmV3IGZyYW1lIGFuZCBzZXQgaXQgYXMgdGhlIFJlbmRlclBhcnQncyB3
aWRnZXQsIGNhdXNpbmcgd2hhdCB3YXMgcHJldmlvdXNseSAKKyAgICAvLyBpbiB0aGUgd2lkZ2V0
IHRvIGJlIHRvcm4gZG93bi4KKyAgICByZXR1cm4gcmVxdWVzdEZyYW1lKGVsZW1lbnQsIGNvbXBs
ZXRlZFVSTCwgZnJhbWVOYW1lKTsKK30KKworCisjaWYgRU5BQkxFKFBMVUdJTl9QUk9YWV9GT1Jf
VklERU8pCitQYXNzUmVmUHRyPFdpZGdldD4gRnJhbWVMb2FkZXI6OmxvYWRNZWRpYVBsYXllclBy
b3h5UGx1Z2luKE5vZGUqIG5vZGUsIGNvbnN0IEtVUkwmIHVybCwgCisgICAgY29uc3QgVmVjdG9y
PFN0cmluZz4mIHBhcmFtTmFtZXMsIGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBwYXJhbVZhbHVlcykK
K3sKKyAgICBBU1NFUlQobm9kZS0+aGFzVGFnTmFtZSh2aWRlb1RhZykgfHwgbm9kZS0+aGFzVGFn
TmFtZShhdWRpb1RhZykpOworCisgICAgaWYgKCFtX2ZyYW1lLT5zY3JpcHQoKS0+eHNzQXVkaXRv
cigpLT5jYW5Mb2FkT2JqZWN0KHVybC5zdHJpbmcoKSkpCisgICAgICAgIHJldHVybiAwOworCisg
ICAgS1VSTCBjb21wbGV0ZWRVUkw7CisgICAgaWYgKCF1cmwuaXNFbXB0eSgpKQorICAgICAgICBj
b21wbGV0ZWRVUkwgPSBjb21wbGV0ZVVSTCh1cmwpOworCisgICAgaWYgKCFTZWN1cml0eU9yaWdp
bjo6Y2FuTG9hZChjb21wbGV0ZWRVUkwsIFN0cmluZygpLCBmcmFtZSgpLT5kb2N1bWVudCgpKSkg
eworICAgICAgICBGcmFtZUxvYWRlcjo6cmVwb3J0TG9jYWxMb2FkRmFpbGVkKG1fZnJhbWUsIGNv
bXBsZXRlZFVSTC5zdHJpbmcoKSk7CisgICAgICAgIHJldHVybiAwOworICAgIH0KKworICAgIEhU
TUxNZWRpYUVsZW1lbnQqIG1lZGlhRWxlbWVudCA9IHN0YXRpY19jYXN0PEhUTUxNZWRpYUVsZW1l
bnQqPihub2RlKTsKKyAgICBSZW5kZXJQYXJ0KiByZW5kZXJlciA9IHRvUmVuZGVyUGFydChub2Rl
LT5yZW5kZXJlcigpKTsKKyAgICBJbnRTaXplIHNpemU7CisKKyAgICBpZiAocmVuZGVyZXIpCisg
ICAgICAgIHNpemUgPSBJbnRTaXplKHJlbmRlcmVyLT5jb250ZW50V2lkdGgoKSwgcmVuZGVyZXIt
PmNvbnRlbnRIZWlnaHQoKSk7CisgICAgZWxzZSBpZiAobWVkaWFFbGVtZW50LT5pc1ZpZGVvKCkp
CisgICAgICAgIHNpemUgPSBSZW5kZXJWaWRlbzo6ZGVmYXVsdFNpemUoKTsKKworICAgIG1fZnJh
bWUtPmxvYWRlcigpLT5jaGVja0lmUnVuSW5zZWN1cmVDb250ZW50KG1fZnJhbWUtPmRvY3VtZW50
KCktPnNlY3VyaXR5T3JpZ2luKCksIGNvbXBsZXRlZFVSTCk7CisKKyAgICBSZWZQdHI8V2lkZ2V0
PiB3aWRnZXQgPSBtX2NsaWVudC0+Y3JlYXRlTWVkaWFQbGF5ZXJQcm94eVBsdWdpbihzaXplLCBt
ZWRpYUVsZW1lbnQsIGNvbXBsZXRlZFVSTCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgcGFyYW1OYW1lcywgcGFyYW1WYWx1ZXMsICJhcHBsaWNhdGlvbi94LW1lZGlh
LWVsZW1lbnQtcHJveHktcGx1Z2luIik7CisKKyAgICBpZiAod2lkZ2V0ICYmIHJlbmRlcmVyKSB7
CisgICAgICAgIHJlbmRlcmVyLT5zZXRXaWRnZXQod2lkZ2V0KTsKKyAgICAgICAgbV9jb250YWlu
c1BsdWdJbnMgPSB0cnVlOworICAgICAgICByZW5kZXJlci0+bm9kZSgpLT5zZXROZWVkc1N0eWxl
UmVjYWxjKFN5bnRoZXRpY1N0eWxlQ2hhbmdlKTsKKyAgICB9CisKKyAgICByZXR1cm4gd2lkZ2V0
ID8gd2lkZ2V0LnJlbGVhc2UoKSA6IDA7Cit9CisjZW5kaWYgLy8gRU5BQkxFKFBMVUdJTl9QUk9Y
WV9GT1JfVklERU8pCisKK1Bhc3NSZWZQdHI8V2lkZ2V0PiBTdWJmcmFtZUxvYWRlcjo6Y3JlYXRl
SmF2YUFwcGxldFdpZGdldChjb25zdCBJbnRTaXplJiBzaXplLCBIVE1MQXBwbGV0RWxlbWVudCog
ZWxlbWVudCwgY29uc3QgSGFzaE1hcDxTdHJpbmcsIFN0cmluZz4mIGFyZ3MpCit7CisgICAgU3Ry
aW5nIGJhc2VVUkxTdHJpbmc7CisgICAgU3RyaW5nIGNvZGVCYXNlVVJMU3RyaW5nOworICAgIFZl
Y3RvcjxTdHJpbmc+IHBhcmFtTmFtZXM7CisgICAgVmVjdG9yPFN0cmluZz4gcGFyYW1WYWx1ZXM7
CisgICAgSGFzaE1hcDxTdHJpbmcsIFN0cmluZz46OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IGFyZ3Mu
ZW5kKCk7CisgICAgZm9yIChIYXNoTWFwPFN0cmluZywgU3RyaW5nPjo6Y29uc3RfaXRlcmF0b3Ig
aXQgPSBhcmdzLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkgeworICAgICAgICBpZiAoZXF1YWxJ
Z25vcmluZ0Nhc2UoaXQtPmZpcnN0LCAiYmFzZXVybCIpKQorICAgICAgICAgICAgYmFzZVVSTFN0
cmluZyA9IGl0LT5zZWNvbmQ7CisgICAgICAgIGVsc2UgaWYgKGVxdWFsSWdub3JpbmdDYXNlKGl0
LT5maXJzdCwgImNvZGViYXNlIikpCisgICAgICAgICAgICBjb2RlQmFzZVVSTFN0cmluZyA9IGl0
LT5zZWNvbmQ7CisgICAgICAgIHBhcmFtTmFtZXMuYXBwZW5kKGl0LT5maXJzdCk7CisgICAgICAg
IHBhcmFtVmFsdWVzLmFwcGVuZChpdC0+c2Vjb25kKTsKKyAgICB9CisKKyAgICBpZiAoIWNvZGVC
YXNlVVJMU3RyaW5nLmlzRW1wdHkoKSkgeworICAgICAgICBLVVJMIGNvZGVCYXNlVVJMID0gY29t
cGxldGVVUkwoY29kZUJhc2VVUkxTdHJpbmcpOworICAgICAgICBpZiAoIVNlY3VyaXR5T3JpZ2lu
OjpjYW5Mb2FkKGNvZGVCYXNlVVJMLCBTdHJpbmcoKSwgZWxlbWVudC0+ZG9jdW1lbnQoKSkpIHsK
KyAgICAgICAgICAgIEZyYW1lTG9hZGVyOjpyZXBvcnRMb2NhbExvYWRGYWlsZWQobV9mcmFtZSwg
Y29kZUJhc2VVUkwuc3RyaW5nKCkpOworICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIH0K
KyAgICB9CisKKyAgICBpZiAoYmFzZVVSTFN0cmluZy5pc0VtcHR5KCkpCisgICAgICAgIGJhc2VV
UkxTdHJpbmcgPSBtX2ZyYW1lLT5kb2N1bWVudCgpLT5iYXNlVVJMKCkuc3RyaW5nKCk7CisgICAg
S1VSTCBiYXNlVVJMID0gY29tcGxldGVVUkwoYmFzZVVSTFN0cmluZyk7CisKKyAgICBSZWZQdHI8
V2lkZ2V0PiB3aWRnZXQgPSBtX2NsaWVudC0+Y3JlYXRlSmF2YUFwcGxldFdpZGdldChzaXplLCBl
bGVtZW50LCBiYXNlVVJMLCBwYXJhbU5hbWVzLCBwYXJhbVZhbHVlcyk7CisgICAgaWYgKCF3aWRn
ZXQpCisgICAgICAgIHJldHVybiAwOworCisgICAgbV9jb250YWluc1BsdWdpbnMgPSB0cnVlOwor
ICAgIHJldHVybiB3aWRnZXQ7Cit9CisKK0ZyYW1lKiBTdWJmcmFtZUxvYWRlcjo6bG9hZFN1YmZy
YW1lKEhUTUxGcmFtZU93bmVyRWxlbWVudCogb3duZXJFbGVtZW50LCBjb25zdCBLVVJMJiB1cmws
IGNvbnN0IFN0cmluZyYgbmFtZSwgY29uc3QgU3RyaW5nJiByZWZlcnJlcikKK3sKKyAgICBib29s
IGFsbG93c1Njcm9sbGluZyA9IHRydWU7CisgICAgaW50IG1hcmdpbldpZHRoID0gLTE7CisgICAg
aW50IG1hcmdpbkhlaWdodCA9IC0xOworICAgIGlmIChvd25lckVsZW1lbnQtPmhhc1RhZ05hbWUo
ZnJhbWVUYWcpIHx8IG93bmVyRWxlbWVudC0+aGFzVGFnTmFtZShpZnJhbWVUYWcpKSB7CisgICAg
ICAgIEhUTUxGcmFtZUVsZW1lbnRCYXNlKiBvID0gc3RhdGljX2Nhc3Q8SFRNTEZyYW1lRWxlbWVu
dEJhc2UqPihvd25lckVsZW1lbnQpOworICAgICAgICBhbGxvd3NTY3JvbGxpbmcgPSBvLT5zY3Jv
bGxpbmdNb2RlKCkgIT0gU2Nyb2xsYmFyQWx3YXlzT2ZmOworICAgICAgICBtYXJnaW5XaWR0aCA9
IG8tPmdldE1hcmdpbldpZHRoKCk7CisgICAgICAgIG1hcmdpbkhlaWdodCA9IG8tPmdldE1hcmdp
bkhlaWdodCgpOworICAgIH0KKworICAgIGlmICghU2VjdXJpdHlPcmlnaW46OmNhbkxvYWQodXJs
LCByZWZlcnJlciwgMCkpIHsKKyAgICAgICAgRnJhbWVMb2FkZXI6OnJlcG9ydExvY2FsTG9hZEZh
aWxlZChtX2ZyYW1lLCB1cmwuc3RyaW5nKCkpOworICAgICAgICByZXR1cm4gMDsKKyAgICB9CisK
KyAgICBib29sIGhpZGVSZWZlcnJlciA9IFNlY3VyaXR5T3JpZ2luOjpzaG91bGRIaWRlUmVmZXJy
ZXIodXJsLCByZWZlcnJlcik7CisgICAgUmVmUHRyPEZyYW1lPiBmcmFtZSA9IG1fY2xpZW50LT5j
cmVhdGVGcmFtZSh1cmwsIG5hbWUsIG93bmVyRWxlbWVudCwgaGlkZVJlZmVycmVyID8gU3RyaW5n
KCkgOiByZWZlcnJlciwgYWxsb3dzU2Nyb2xsaW5nLCBtYXJnaW5XaWR0aCwgbWFyZ2luSGVpZ2h0
KTsKKworICAgIGlmICghZnJhbWUpICB7CisgICAgICAgIG1fZnJhbWUtPmxvYWRlcigpLT5jaGVj
a0NhbGxJbXBsaWNpdENsb3NlKCk7CisgICAgICAgIHJldHVybiAwOworICAgIH0KKyAgICAKKyAg
ICAvLyBBbGwgbmV3IGZyYW1lcyB3aWxsIGhhdmUgbV9pc0NvbXBsZXRlIHNldCB0byB0cnVlIGF0
IHRoaXMgcG9pbnQgZHVlIHRvIHN5bmNocm9ub3VzbHkgbG9hZGluZworICAgIC8vIGFuIGVtcHR5
IGRvY3VtZW50IGluIEZyYW1lTG9hZGVyOjppbml0KCkuIEJ1dCBtYW55IGZyYW1lcyB3aWxsIG5v
dyBiZSBzdGFydGluZyBhbgorICAgIC8vIGFzeW5jaHJvbm91cyBsb2FkIG9mIHVybCwgc28gd2Ug
c2V0IG1faXNDb21wbGV0ZSB0byBmYWxzZSBhbmQgdGhlbiBjaGVjayBpZiB0aGUgbG9hZCBpcwor
ICAgIC8vIGFjdHVhbGx5IGNvbXBsZXRlZCBiZWxvdy4gKE5vdGUgdGhhdCB3ZSBzZXQgbV9pc0Nv
bXBsZXRlIHRvIGZhbHNlIGV2ZW4gZm9yIHN5bmNocm9ub3VzCisgICAgLy8gbG9hZHMsIHNvIHRo
YXQgY2hlY2tDb21wbGV0ZWQoKSBiZWxvdyB3b24ndCBiYWlsIGVhcmx5LikKKyAgICAvLyBGSVhN
RTogQ2FuIHdlIHJlbW92ZSB0aGlzIGVudGlyZWx5PyBtX2lzQ29tcGxldGUgbm9ybWFsbHkgZ2V0
cyBzZXQgdG8gZmFsc2Ugd2hlbiBhIGxvYWQgaXMgY29tbWl0dGVkLgorICAgIGZyYW1lLT5sb2Fk
ZXIoKS0+c2V0SXNDb21wbGV0ZShmYWxzZSk7CisgICAKKyAgICBSZW5kZXJPYmplY3QqIHJlbmRl
cmVyID0gb3duZXJFbGVtZW50LT5yZW5kZXJlcigpOworICAgIEZyYW1lVmlldyogdmlldyA9IGZy
YW1lLT52aWV3KCk7CisgICAgaWYgKHJlbmRlcmVyICYmIHJlbmRlcmVyLT5pc1dpZGdldCgpICYm
IHZpZXcpCisgICAgICAgIHRvUmVuZGVyV2lkZ2V0KHJlbmRlcmVyKS0+c2V0V2lkZ2V0KHZpZXcp
OworICAgIAorICAgIG1fZnJhbWUtPmxvYWRlcigpLT5jaGVja0NhbGxJbXBsaWNpdENsb3NlKCk7
CisgICAgCisgICAgLy8gU29tZSBsb2FkcyBhcmUgcGVyZm9ybWVkIHN5bmNocm9ub3VzbHkgKGUu
Zy4sIGFib3V0OmJsYW5rIGFuZCBsb2FkcworICAgIC8vIGNhbmNlbGxlZCBieSByZXR1cm5pbmcg
YSBudWxsIFJlc291cmNlUmVxdWVzdCBmcm9tIHJlcXVlc3RGcm9tRGVsZWdhdGUpLgorICAgIC8v
IEluIHRoZXNlIGNhc2VzLCB0aGUgc3luY2hyb25vdXMgbG9hZCB3b3VsZCBoYXZlIGZpbmlzaGVk
CisgICAgLy8gYmVmb3JlIHdlIGNvdWxkIGNvbm5lY3QgdGhlIHNpZ25hbHMsIHNvIG1ha2Ugc3Vy
ZSB0byBzZW5kIHRoZSAKKyAgICAvLyBjb21wbGV0ZWQoKSBzaWduYWwgZm9yIHRoZSBjaGlsZCBi
eSBoYW5kIGFuZCBtYXJrIHRoZSBsb2FkIGFzIGJlaW5nCisgICAgLy8gY29tcGxldGUuCisgICAg
Ly8gRklYTUU6IEluIHRoaXMgY2FzZSB0aGUgRnJhbWUgd2lsbCBoYXZlIGZpbmlzaGVkIGxvYWRp
bmcgYmVmb3JlIAorICAgIC8vIGl0J3MgYmVpbmcgYWRkZWQgdG8gdGhlIGNoaWxkIGxpc3QuIEl0
IHdvdWxkIGJlIGEgZ29vZCBpZGVhIHRvCisgICAgLy8gY3JlYXRlIHRoZSBjaGlsZCBmaXJzdCwg
dGhlbiBpbnZva2UgdGhlIGxvYWRlciBzZXBhcmF0ZWx5LgorICAgIGlmIChmcmFtZS0+bG9hZGVy
KCktPnN0YXRlKCkgPT0gRnJhbWVTdGF0ZUNvbXBsZXRlKQorICAgICAgICBmcmFtZS0+bG9hZGVy
KCktPmNoZWNrQ29tcGxldGVkKCk7CisKKyAgICByZXR1cm4gZnJhbWUuZ2V0KCk7Cit9CisKK2Jv
b2wgU3ViZnJhbWVMb2FkZXI6OmFsbG93UGx1Z2lucyhSZWFzb25Gb3JDYWxsaW5nQWxsb3dQbHVn
aW5zIHJlYXNvbikKK3sKKyAgICBTZXR0aW5ncyogc2V0dGluZ3MgPSBtX2ZyYW1lLT5zZXR0aW5n
cygpOworICAgIGJvb2wgYWxsb3dlZCA9IG1fY2xpZW50LT5hbGxvd1BsdWdpbnMoc2V0dGluZ3Mg
JiYgc2V0dGluZ3MtPmFyZVBsdWdpbnNFbmFibGVkKCkpOworICAgIGlmICghYWxsb3dlZCAmJiBy
ZWFzb24gPT0gQWJvdXRUb0luc3RhbnRpYXRlUGx1Z2luKQorICAgICAgICBtX2ZyYW1lLT5sb2Fk
ZXIoKS0+Y2xpZW50KCktPmRpZE5vdEFsbG93UGx1Z2lucygpOworICAgIHJldHVybiBhbGxvd2Vk
OworfQorCisKK2Jvb2wgU3ViZnJhbWVMb2FkZXI6OnNob3VsZFVzZVBsdWdpbihjb25zdCBLVVJM
JiB1cmwsIGNvbnN0IFN0cmluZyYgbWltZVR5cGUsIGJvb2wgaGFzRmFsbGJhY2ssIGJvb2wmIHVz
ZUZhbGxiYWNrKQoreworICAgIGlmIChtX2NsaWVudC0+c2hvdWxkVXNlUGx1Z2luRG9jdW1lbnQo
bWltZVR5cGUpKSB7CisgICAgICAgIHVzZUZhbGxiYWNrID0gZmFsc2U7CisgICAgICAgIHJldHVy
biB0cnVlOworICAgIH0KKworICAgIC8vIEFsbG93IG90aGVyIHBsdWctaW5zIHRvIHdpbiBvdmVy
IFF1aWNrVGltZSBiZWNhdXNlIGlmIHRoZSB1c2VyIGhhcyBpbnN0YWxsZWQgYSBwbHVnLWluIHRo
YXQKKyAgICAvLyBjYW4gaGFuZGxlIFRJRkYgKHdoaWNoIFF1aWNrVGltZSBjYW4gYWxzbyBoYW5k
bGUpIHRoZXkgcHJvYmFibHkgaW50ZW5kZWQgdG8gb3ZlcnJpZGUgUVQuCisgICAgaWYgKG1fZnJh
bWUtPnBhZ2UoKSAmJiAobWltZVR5cGUgPT0gImltYWdlL3RpZmYiIHx8IG1pbWVUeXBlID09ICJp
bWFnZS90aWYiIHx8IG1pbWVUeXBlID09ICJpbWFnZS94LXRpZmYiKSkgeworICAgICAgICBjb25z
dCBQbHVnaW5EYXRhKiBwbHVnaW5EYXRhID0gbV9mcmFtZS0+cGFnZSgpLT5wbHVnaW5EYXRhKCk7
CisgICAgICAgIFN0cmluZyBwbHVnaW5OYW1lID0gcGx1Z2luRGF0YSA/IHBsdWdpbkRhdGEtPnBs
dWdpbk5hbWVGb3JNaW1lVHlwZShtaW1lVHlwZSkgOiBTdHJpbmcoKTsKKyAgICAgICAgaWYgKCFw
bHVnaW5OYW1lLmlzRW1wdHkoKSAmJiAhcGx1Z2luTmFtZS5jb250YWlucygiUXVpY2tUaW1lIiwg
ZmFsc2UpKSAKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKyAgICAgICAgCisgICAg
T2JqZWN0Q29udGVudFR5cGUgb2JqZWN0VHlwZSA9IG1fY2xpZW50LT5vYmplY3RDb250ZW50VHlw
ZSh1cmwsIG1pbWVUeXBlKTsKKyAgICAvLyBJZiBhbiBvYmplY3QncyBjb250ZW50IGNhbid0IGJl
IGhhbmRsZWQgYW5kIGl0IGhhcyBubyBmYWxsYmFjaywgbGV0CisgICAgLy8gaXQgYmUgaGFuZGxl
ZCBhcyBhIHBsdWdpbiB0byBzaG93IHRoZSBicm9rZW4gcGx1Z2luIGljb24uCisgICAgdXNlRmFs
bGJhY2sgPSBvYmplY3RUeXBlID09IE9iamVjdENvbnRlbnROb25lICYmIGhhc0ZhbGxiYWNrOwor
ICAgIHJldHVybiBvYmplY3RUeXBlID09IE9iamVjdENvbnRlbnROb25lIHx8IG9iamVjdFR5cGUg
PT0gT2JqZWN0Q29udGVudE5ldHNjYXBlUGx1Z2luIHx8IG9iamVjdFR5cGUgPT0gT2JqZWN0Q29u
dGVudE90aGVyUGx1Z2luOworfQorICAKK2Jvb2wgU3ViZnJhbWVMb2FkZXI6OmxvYWRQbHVnaW4o
UmVuZGVyRW1iZWRkZWRPYmplY3QqIHJlbmRlcmVyLCBjb25zdCBLVVJMJiB1cmwsIGNvbnN0IFN0
cmluZyYgbWltZVR5cGUsIAorICAgIGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBwYXJhbU5hbWVzLCBj
b25zdCBWZWN0b3I8U3RyaW5nPiYgcGFyYW1WYWx1ZXMsIGJvb2wgdXNlRmFsbGJhY2spCit7Cisg
ICAgUmVmUHRyPFdpZGdldD4gd2lkZ2V0OworCisgICAgaWYgKHJlbmRlcmVyICYmICF1c2VGYWxs
YmFjaykgeworICAgICAgICBIVE1MUGx1Z0luRWxlbWVudCogZWxlbWVudCA9IHRvUGx1Z0luRWxl
bWVudChyZW5kZXJlci0+bm9kZSgpKTsKKworICAgICAgICBpZiAoIVNlY3VyaXR5T3JpZ2luOjpj
YW5Mb2FkKHVybCwgU3RyaW5nKCksIG1fZnJhbWUtPmRvY3VtZW50KCkpKSB7CisgICAgICAgICAg
ICBGcmFtZUxvYWRlcjo6cmVwb3J0TG9jYWxMb2FkRmFpbGVkKG1fZnJhbWUsIHVybC5zdHJpbmco
KSk7CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKworICAgICAgICBtX2Zy
YW1lLT5sb2FkZXIoKS0+Y2hlY2tJZlJ1bkluc2VjdXJlQ29udGVudChtX2ZyYW1lLT5kb2N1bWVu
dCgpLT5zZWN1cml0eU9yaWdpbigpLCB1cmwpOworCisgICAgICAgIHdpZGdldCA9IG1fY2xpZW50
LT5jcmVhdGVQbHVnaW4oSW50U2l6ZShyZW5kZXJlci0+Y29udGVudFdpZHRoKCksIHJlbmRlcmVy
LT5jb250ZW50SGVpZ2h0KCkpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGVsZW1lbnQsIHVybCwgcGFyYW1OYW1lcywgcGFyYW1WYWx1ZXMsIG1pbWVUeXBlLAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1fZnJhbWUtPmRvY3VtZW50KCkt
PmlzUGx1Z2luRG9jdW1lbnQoKSAmJiAhbV9jb250YWluc1BsdWdpbnMpOworICAgICAgICBpZiAo
d2lkZ2V0KSB7CisgICAgICAgICAgICByZW5kZXJlci0+c2V0V2lkZ2V0KHdpZGdldCk7CisgICAg
ICAgICAgICBtX2NvbnRhaW5zUGx1Z2lucyA9IHRydWU7CisKKyNpZiBFTkFCTEUoUExVR0lOX1BS
T1hZX0ZPUl9WSURFTykKKyAgICAgICAgICAgIHJlbmRlcmVyLT5ub2RlKCktPnNldE5lZWRzU3R5
bGVSZWNhbGMoU3ludGhldGljU3R5bGVDaGFuZ2UpOworI2VuZGlmCisgICAgICAgIH0gZWxzZQor
ICAgICAgICAgICAgcmVuZGVyZXItPnNldFNob3dzTWlzc2luZ1BsdWdpbkluZGljYXRvcigpOwor
ICAgIH0KKworICAgIHJldHVybiB3aWRnZXQ7Cit9CisKK0tVUkwgU3ViZnJhbWVMb2FkZXI6OmNv
bXBsZXRlVVJMKGNvbnN0IFN0cmluZyYgdXJsKSBjb25zdAoreworICAgIEFTU0VSVChtX2ZyYW1l
LT5kb2N1bWVudCgpKTsKKyAgICByZXR1cm4gbV9mcmFtZS0+ZG9jdW1lbnQoKS0+Y29tcGxldGVV
UkwodXJsKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>58810</attachid>
            <date>2010-06-15 12:55:59 -0700</date>
            <delta_ts>2010-06-15 14:21:01 -0700</delta_ts>
            <desc>patch #2</desc>
            <filename>fl2.txt</filename>
            <type>text/plain</type>
            <size>59690</size>
            <attacher name="Nate Chapin">japhet</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYktpdC9tYWMvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdC9tYWMvQ2hh
bmdlTG9nCShyZXZpc2lvbiA2MTE5NykKKysrIFdlYktpdC9tYWMvQ2hhbmdlTG9nCSh3b3JraW5n
IGNvcHkpCkBAIC0xLDMgKzEsMTQgQEAKKzIwMTAtMDYtMTEgIE5hdGUgQ2hhcGluICA8amFwaGV0
QGNocm9taXVtLm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKwor
ICAgICAgICBGcmFtZUxvYWRlciBjbGVhbnVwOiBTcGxpdCBoaWdoIGxldmVsIHN1YmZyYW1lIGFu
ZCBwbHVnaW4KKyAgICAgICAgbG9hZGluZyBmdW5jdGlvbnMgaW50byBhIHNlcGFyYXRlIGNsYXNz
LgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NDA0NTMK
KworICAgICAgICAqIFdlYlZpZXcvV2ViRnJhbWUubW06CisgICAgICAgICgtW1dlYkZyYW1lIF9j
YWNoZWFiaWxpdHlEaWN0aW9uYXJ5XSk6CisKIDIwMTAtMDYtMTUgIERhbiBCZXJuc3RlaW4gIDxt
aXR6QGFwcGxlLmNvbT4KIAogICAgICAgICBSZXZpZXdlZCBieSBKb2huIFN1bGxpdmFuLgpJbmRl
eDogV2ViS2l0L21hYy9XZWJWaWV3L1dlYkZyYW1lLm1tCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdC9t
YWMvV2ViVmlldy9XZWJGcmFtZS5tbQkocmV2aXNpb24gNjExOTcpCisrKyBXZWJLaXQvbWFjL1dl
YlZpZXcvV2ViRnJhbWUubW0JKHdvcmtpbmcgY29weSkKQEAgLTEyMjIsNyArMTIyMiw3IEBACiAg
ICAgaWYgKGRvY3VtZW50TG9hZGVyICYmICFkb2N1bWVudExvYWRlci0+bWFpbkRvY3VtZW50RXJy
b3IoKS5pc051bGwoKSkKICAgICAgICAgW3Jlc3VsdCBzZXRPYmplY3Q6KE5TRXJyb3IgKilkb2N1
bWVudExvYWRlci0+bWFpbkRvY3VtZW50RXJyb3IoKSBmb3JLZXk6V2ViRnJhbWVNYWluRG9jdW1l
bnRFcnJvcl07CiAgICAgICAgIAotICAgIGlmIChmcmFtZUxvYWRlci0+Y29udGFpbnNQbHVnaW5z
KCkpCisgICAgaWYgKGZyYW1lTG9hZGVyLT5zdWJmcmFtZUxvYWRlcigpLT5jb250YWluc1BsdWdp
bnMoKSkKICAgICAgICAgW3Jlc3VsdCBzZXRPYmplY3Q6W05TTnVtYmVyIG51bWJlcldpdGhCb29s
OllFU10gZm9yS2V5OldlYkZyYW1lSGFzUGx1Z2luc107CiAgICAgCiAgICAgaWYgKERPTVdpbmRv
dyogZG9tV2luZG93ID0gX3ByaXZhdGUtPmNvcmVGcmFtZS0+ZG9tV2luZG93KCkpIHsKSW5kZXg6
IFdlYkNvcmUvZG9tL0RPTUltcGxlbWVudGF0aW9uLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3Jl
L2RvbS9ET01JbXBsZW1lbnRhdGlvbi5jcHAJKHJldmlzaW9uIDYxMTk3KQorKysgV2ViQ29yZS9k
b20vRE9NSW1wbGVtZW50YXRpb24uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMjksNyArMzI5LDcg
QEAKICNlbmRpZgogCiAgICAgUGx1Z2luRGF0YSogcGx1Z2luRGF0YSA9IDA7Ci0gICAgaWYgKGZy
YW1lICYmIGZyYW1lLT5wYWdlKCkgJiYgZnJhbWUtPmxvYWRlcigpLT5hbGxvd1BsdWdpbnMoTm90
QWJvdXRUb0luc3RhbnRpYXRlUGx1Z2luKSkKKyAgICBpZiAoZnJhbWUgJiYgZnJhbWUtPnBhZ2Uo
KSAmJiBmcmFtZS0+bG9hZGVyKCktPnN1YmZyYW1lTG9hZGVyKCktPmFsbG93UGx1Z2lucyhOb3RB
Ym91dFRvSW5zdGFudGlhdGVQbHVnaW4pKQogICAgICAgICBwbHVnaW5EYXRhID0gZnJhbWUtPnBh
Z2UoKS0+cGx1Z2luRGF0YSgpOwogCiAgICAgLy8gUERGIGlzIG9uZSBpbWFnZSB0eXBlIGZvciB3
aGljaCBhIHBsdWdpbiBjYW4gb3ZlcnJpZGUgYnVpbHQtaW4gc3VwcG9ydC4KSW5kZXg6IFdlYkNv
cmUvcGx1Z2lucy9NaW1lVHlwZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbHVnaW5zL01p
bWVUeXBlLmNwcAkocmV2aXNpb24gNjExOTcpCisrKyBXZWJDb3JlL3BsdWdpbnMvTWltZVR5cGUu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC02NSw3ICs2NSw3IEBACiBQYXNzUmVmUHRyPFBsdWdpbj4g
TWltZVR5cGU6OmVuYWJsZWRQbHVnaW4oKSBjb25zdAogewogICAgIGNvbnN0IFBhZ2UqIHAgPSBt
X3BsdWdpbkRhdGEtPnBhZ2UoKTsKLSAgICBpZiAoIXAgfHwgIXAtPm1haW5GcmFtZSgpLT5sb2Fk
ZXIoKS0+YWxsb3dQbHVnaW5zKE5vdEFib3V0VG9JbnN0YW50aWF0ZVBsdWdpbikpCisgICAgaWYg
KCFwIHx8ICFwLT5tYWluRnJhbWUoKS0+bG9hZGVyKCktPnN1YmZyYW1lTG9hZGVyKCktPmFsbG93
UGx1Z2lucyhOb3RBYm91dFRvSW5zdGFudGlhdGVQbHVnaW4pKQogICAgICAgICByZXR1cm4gMDsK
IAogICAgIHJldHVybiBQbHVnaW46OmNyZWF0ZShtX3BsdWdpbkRhdGEuZ2V0KCksIG1fcGx1Z2lu
RGF0YS0+bWltZVBsdWdpbkluZGljZXMoKVttX2luZGV4XSk7CkluZGV4OiBXZWJDb3JlL1dlYkNv
cmUucHJvCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvV2ViQ29yZS5wcm8JKHJldmlzaW9uIDYxMTk3
KQorKysgV2ViQ29yZS9XZWJDb3JlLnBybwkod29ya2luZyBjb3B5KQpAQCAtNzYyLDYgKzc2Miw3
IEBACiAgICAgbG9hZGVyL1Jlc291cmNlTG9hZGVyLmNwcCBcCiAgICAgbG9hZGVyL1Jlc291cmNl
TG9hZE5vdGlmaWVyLmNwcCBcCiAgICAgbG9hZGVyL1NpbmtEb2N1bWVudC5jcHAgXAorICAgIGxv
YWRlci9TdWJmcmFtZUxvYWRlci5jcHAgXAogICAgIGxvYWRlci9TdWJyZXNvdXJjZUxvYWRlci5j
cHAgXAogICAgIGxvYWRlci9UZXh0RG9jdW1lbnQuY3BwIFwKICAgICBsb2FkZXIvVGV4dFJlc291
cmNlRGVjb2Rlci5jcHAgXApJbmRleDogV2ViQ29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
V2ViQ29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDYxMTk3KQorKysgV2ViQ29yZS9DaGFuZ2VMb2cJ
KHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSw1MSBAQAorMjAxMC0wNi0xMSAgTmF0ZSBDaGFwaW4g
IDxqYXBoZXRAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09Q
UyEpLgorCisgICAgICAgIEZyYW1lTG9hZGVyIGNsZWFudXA6IFNwbGl0IGhpZ2ggbGV2ZWwgc3Vi
ZnJhbWUgYW5kIHBsdWdpbgorICAgICAgICBsb2FkaW5nIGZ1bmN0aW9ucyBpbnRvIGEgc2VwYXJh
dGUgY2xhc3MuCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD00MDQ1MworCisgICAgICAgIFJlZmFjdG9yIG9ubHksIG5vIG5ldyB0ZXN0cy4KKworICAgICAg
ICAqIEFuZHJvaWQubWs6CisgICAgICAgICogQ01ha2VMaXN0cy50eHQ6CisgICAgICAgICogR05V
bWFrZWZpbGUuYW06CisgICAgICAgICogV2ViQ29yZS5iYXNlLmV4cDoKKyAgICAgICAgKiBXZWJD
b3JlLmd5cGk6CisgICAgICAgICogV2ViQ29yZS5wcm86CisgICAgICAgICogV2ViQ29yZS52Y3By
b2ovV2ViQ29yZS52Y3Byb2o6CisgICAgICAgICogV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5w
Ynhwcm9qOgorICAgICAgICAqIGRvbS9ET01JbXBsZW1lbnRhdGlvbi5jcHA6CisgICAgICAgICog
aGlzdG9yeS9QYWdlQ2FjaGUuY3BwOgorICAgICAgICAqIGh0bWwvSFRNTEZyYW1lRWxlbWVudEJh
c2UuY3BwOgorICAgICAgICAqIGh0bWwvSFRNTE1lZGlhRWxlbWVudC5jcHA6CisgICAgICAgICog
bG9hZGVyL0ZyYW1lTG9hZGVyLmNwcDoKKyAgICAgICAgKiBsb2FkZXIvRnJhbWVMb2FkZXIuaDoK
KyAgICAgICAgKFdlYkNvcmU6OkZyYW1lTG9hZGVyOjpzdWJmcmFtZUxvYWRlcik6CisgICAgICAg
ICogbG9hZGVyL1BsdWdpbkRvY3VtZW50LmNwcDoKKyAgICAgICAgKiBsb2FkZXIvU3ViZnJhbWVM
b2FkZXIuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlN1YmZyYW1lTG9hZGVyOjpTdWJm
cmFtZUxvYWRlcik6CisgICAgICAgIChXZWJDb3JlOjp0b1BsdWdJbkVsZW1lbnQpOgorICAgICAg
ICAoV2ViQ29yZTo6U3ViZnJhbWVMb2FkZXI6OmNsZWFyKToKKyAgICAgICAgKFdlYkNvcmU6OlN1
YmZyYW1lTG9hZGVyOjpyZXF1ZXN0RnJhbWUpOgorICAgICAgICAoV2ViQ29yZTo6U3ViZnJhbWVM
b2FkZXI6OnJlcXVlc3RPYmplY3QpOgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVMb2FkZXI6Omxv
YWRNZWRpYVBsYXllclByb3h5UGx1Z2luKToKKyAgICAgICAgKFdlYkNvcmU6OlN1YmZyYW1lTG9h
ZGVyOjpjcmVhdGVKYXZhQXBwbGV0V2lkZ2V0KToKKyAgICAgICAgKFdlYkNvcmU6OlN1YmZyYW1l
TG9hZGVyOjpsb2FkU3ViZnJhbWUpOgorICAgICAgICAoV2ViQ29yZTo6U3ViZnJhbWVMb2FkZXI6
OmFsbG93UGx1Z2lucyk6CisgICAgICAgIChXZWJDb3JlOjpTdWJmcmFtZUxvYWRlcjo6c2hvdWxk
VXNlUGx1Z2luKToKKyAgICAgICAgKFdlYkNvcmU6OlN1YmZyYW1lTG9hZGVyOjpsb2FkUGx1Z2lu
KToKKyAgICAgICAgKFdlYkNvcmU6OlN1YmZyYW1lTG9hZGVyOjpjb21wbGV0ZVVSTCk6CisgICAg
ICAgICogbG9hZGVyL1N1YmZyYW1lTG9hZGVyLmg6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6
U3ViZnJhbWVMb2FkZXI6OmNvbnRhaW5zUGx1Z2lucyk6CisgICAgICAgICogcGFnZS9QYWdlLmNw
cDoKKyAgICAgICAgKiBwYWdlL1hTU0F1ZGl0b3IuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFw
aGljcy93aW5jZS9NZWRpYVBsYXllclByb3h5LmNwcDoKKyAgICAgICAgKiBwbHVnaW5zL01pbWVU
eXBlLmNwcDoKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyQXBwbGV0LmNwcDoKKyAgICAgICAg
KiByZW5kZXJpbmcvUmVuZGVyRW1iZWRkZWRPYmplY3QuY3BwOgorCiAyMDEwLTA2LTE1ICBBZGFt
IFJvYmVuICA8YXJvYmVuQGFwcGxlLmNvbT4KIAogICAgICAgICBNYWtlIFdlYkNvcmUncyBhbmQg
SmF2YVNjcmlwdENvcmUncyBEZXJpdmVkU291cmNlcyBhdmFpbGFibGUgZm9yIGRlYnVnZ2luZyBp
biBwcm9kdWN0aW9uIGJ1aWxkcwpJbmRleDogV2ViQ29yZS9XZWJDb3JlLnZjcHJvai9XZWJDb3Jl
LnZjcHJvago9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL1dlYkNvcmUudmNwcm9qL1dlYkNvcmUudmNw
cm9qCShyZXZpc2lvbiA2MTE5NykKKysrIFdlYkNvcmUvV2ViQ29yZS52Y3Byb2ovV2ViQ29yZS52
Y3Byb2oJKHdvcmtpbmcgY29weSkKQEAgLTIyMTQ5LDYgKzIyMTQ5LDE0IEBACiAJCQkJPg0KIAkJ
CTwvRmlsZT4NCiAJCQk8RmlsZQ0KKwkJCQlSZWxhdGl2ZVBhdGg9Ii4uXGxvYWRlclxTdWJmcmFt
ZUxvYWRlci5jcHAiDQorCQkJCT4NCisJCQk8L0ZpbGU+DQorCQkJPEZpbGUNCisJCQkJUmVsYXRp
dmVQYXRoPSIuLlxsb2FkZXJcU3ViZnJhbWVMb2FkZXIuaCINCisJCQkJPg0KKwkJCTwvRmlsZT4N
CisJCQk8RmlsZQ0KIAkJCQlSZWxhdGl2ZVBhdGg9Ii4uXGxvYWRlclxTdWJyZXNvdXJjZUxvYWRl
ci5jcHAiDQogCQkJCT4NCiAJCQk8L0ZpbGU+DQpJbmRleDogV2ViQ29yZS9XZWJDb3JlLmJhc2Uu
ZXhwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvV2ViQ29yZS5iYXNlLmV4cAkocmV2aXNpb24gNjEx
OTcpCisrKyBXZWJDb3JlL1dlYkNvcmUuYmFzZS5leHAJKHdvcmtpbmcgY29weSkKQEAgLTc5NCw3
ICs3OTQsNiBAQAogX19aTks3V2ViQ29yZTExQ2FjaGVkSW1hZ2U1aW1hZ2VFdgogX19aTks3V2Vi
Q29yZTExRnJhbWVMb2FkZXIxMGlzQ29tcGxldGVFdgogX19aTks3V2ViQ29yZTExRnJhbWVMb2Fk
ZXIxNGZyYW1lSGFzTG9hZGVkRXYKLV9fWk5LN1dlYkNvcmUxMUZyYW1lTG9hZGVyMTVjb250YWlu
c1BsdWdpbnNFdgogX19aTks3V2ViQ29yZTExRnJhbWVMb2FkZXIxNWZpcnN0TGF5b3V0RG9uZUV2
CiBfX1pOSzdXZWJDb3JlMTFGcmFtZUxvYWRlcjE2b3V0Z29pbmdSZWZlcnJlckV2CiBfX1pOSzdX
ZWJDb3JlMTFGcmFtZUxvYWRlcjIwYWN0aXZlRG9jdW1lbnRMb2FkZXJFdgpJbmRleDogV2ViQ29y
ZS9oaXN0b3J5L1BhZ2VDYWNoZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9oaXN0b3J5L1Bh
Z2VDYWNoZS5jcHAJKHJldmlzaW9uIDYxMTk3KQorKysgV2ViQ29yZS9oaXN0b3J5L1BhZ2VDYWNo
ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEwMiw3ICsxMDIsNyBAQAogICAgICAgICAgICAgUENM
T0coIiAgIC1NYWluIGRvY3VtZW50IGhhcyBhbiBlcnJvciIpOwogICAgICAgICAgICAgY2Fubm90
Q2FjaGUgPSB0cnVlOwogICAgICAgICB9Ci0gICAgICAgIGlmIChmcmFtZS0+bG9hZGVyKCktPmNv
bnRhaW5zUGx1Z2lucygpKSB7CisgICAgICAgIGlmIChmcmFtZS0+bG9hZGVyKCktPnN1YmZyYW1l
TG9hZGVyKCktPmNvbnRhaW5zUGx1Z2lucygpKSB7CiAgICAgICAgICAgICBQQ0xPRygiICAgLUZy
YW1lIGNvbnRhaW5zIHBsdWdpbnMiKTsKICAgICAgICAgICAgIGNhbm5vdENhY2hlID0gdHJ1ZTsK
ICAgICAgICAgfQpAQCAtMjQ2LDcgKzI0Niw3IEBACiAgICAgICAgIC8vIChvYmplY3RzIGNyZWF0
ZWQgYnkgdGhlIHBsdWctaW4pLiBTaW5jZSB0aGVyZSBpcyBubyB3YXkgdG8gcGF1c2UvcmVzdW1l
IGEgTmV0c2NhcGUgcGx1Zy1pbiwKICAgICAgICAgLy8gdGhleSB3b3VsZCBuZWVkIHRvIGJlIGRl
c3Ryb3llZCBhbmQgdGhlbiByZWNyZWF0ZWQsIGFuZCB0aGVyZSBpcyBubyB3YXkgdGhhdCB3ZSBj
YW4gcmVjcmVhdGUKICAgICAgICAgLy8gdGhlIHJpZ2h0IE5QT2JqZWN0cy4gU2VlIDxyZGFyOi8v
cHJvYmxlbS81MTk3MDQxPiBmb3IgbW9yZSBpbmZvcm1hdGlvbi4KLSAgICAgICAgJiYgIWZyYW1l
LT5sb2FkZXIoKS0+Y29udGFpbnNQbHVnaW5zKCkKKyAgICAgICAgJiYgIWZyYW1lLT5sb2FkZXIo
KS0+c3ViZnJhbWVMb2FkZXIoKS0+Y29udGFpbnNQbHVnaW5zKCkKICAgICAgICAgJiYgIWZyYW1l
LT5sb2FkZXIoKS0+dXJsKCkucHJvdG9jb2xJcygiaHR0cHMiKQogICAgICAgICAmJiAoIWZyYW1l
LT5kb21XaW5kb3coKSB8fCAhZnJhbWUtPmRvbVdpbmRvdygpLT5oYXNFdmVudExpc3RlbmVycyhl
dmVudE5hbWVzKCkudW5sb2FkRXZlbnQpKQogI2lmIEVOQUJMRShEQVRBQkFTRSkKSW5kZXg6IFdl
YkNvcmUvcGFnZS9YU1NBdWRpdG9yLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wYWdlL1hTU0F1
ZGl0b3IuaAkocmV2aXNpb24gNjExOTcpCisrKyBXZWJDb3JlL3BhZ2UvWFNTQXVkaXRvci5oCSh3
b3JraW5nIGNvcHkpCkBAIC02Nyw3ICs2Nyw3IEBACiAgICAgLy8gKiBTY3JpcHRFdmVudExpc3Rl
bmVyOjpjcmVhdGVBdHRyaWJ1dGVFdmVudExpc3RlbmVyIC0gdXNlZCB0byBjcmVhdGUgSmF2YVNj
cmlwdCBldmVudCBoYW5kbGVycy4KICAgICAvLyAqIEhUTUxCYXNlRWxlbWVudDo6cHJvY2VzcyAt
IHVzZWQgdG8gc2V0IHRoZSBkb2N1bWVudCBiYXNlIFVSTC4KICAgICAvLyAqIEhUTUxEb2N1bWVu
dFBhcnNlcjo6cGFyc2VUYWcgLSB1c2VkIHRvIGxvYWQgZXh0ZXJuYWwgSmF2YVNjcmlwdCBzY3Jp
cHRzLgotICAgIC8vICogRnJhbWVMb2FkZXI6OnJlcXVlc3RPYmplY3QgLSB1c2VkIHRvIGxvYWQg
PG9iamVjdD4vPGVtYmVkPiBlbGVtZW50cy4KKyAgICAvLyAqIFN1YmZyYW1lTG9hZGVyOjpyZXF1
ZXN0T2JqZWN0IC0gdXNlZCB0byBsb2FkIDxvYmplY3Q+LzxlbWJlZD4gZWxlbWVudHMuCiAgICAg
Ly8KICAgICBjbGFzcyBYU1NBdWRpdG9yIDogcHVibGljIE5vbmNvcHlhYmxlIHsKICAgICBwdWJs
aWM6CkBAIC05NSw3ICs5NSw3IEBACiAgICAgICAgIC8vIERldGVybWluZXMgd2hldGhlciBvYmpl
Y3Qgc2hvdWxkIGJlIGxvYWRlZCBiYXNlZCBvbiB0aGUgY29udGVudCBvZgogICAgICAgICAvLyBh
bnkgdXNlci1zdWJtaXR0ZWQgZGF0YS4KICAgICAgICAgLy8KLSAgICAgICAgLy8gVGhpcyBtZXRo
b2QgaXMgY2FsbGVkIGJ5IEZyYW1lTG9hZGVyOjpyZXF1ZXN0T2JqZWN0LgorICAgICAgICAvLyBU
aGlzIG1ldGhvZCBpcyBjYWxsZWQgYnkgU3ViZnJhbWVMb2FkZXI6OnJlcXVlc3RPYmplY3QuCiAg
ICAgICAgIGJvb2wgY2FuTG9hZE9iamVjdChjb25zdCBTdHJpbmcmIHVybCkgY29uc3Q7CiAKICAg
ICAgICAgLy8gRGV0ZXJtaW5lcyB3aGV0aGVyIHRoZSBiYXNlIFVSTCBzaG91bGQgYmUgY2hhbmdl
ZCBiYXNlZCBvbiB0aGUgY29udGVudApJbmRleDogV2ViQ29yZS9wYWdlL1BhZ2UuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFdlYkNvcmUvcGFnZS9QYWdlLmNwcAkocmV2aXNpb24gNjExOTcpCisrKyBXZWJD
b3JlL3BhZ2UvUGFnZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM4Niw3ICszODYsNyBAQAogICAg
ICAgICAgICAgY29udGludWU7CiAgICAgICAgIAogICAgICAgICBmb3IgKEZyYW1lKiBmcmFtZSA9
ICgqaXQpLT5tYWluRnJhbWUoKTsgZnJhbWU7IGZyYW1lID0gZnJhbWUtPnRyZWUoKS0+dHJhdmVy
c2VOZXh0KCkpIHsKLSAgICAgICAgICAgIGlmIChmcmFtZS0+bG9hZGVyKCktPmNvbnRhaW5zUGx1
Z2lucygpKQorICAgICAgICAgICAgaWYgKGZyYW1lLT5sb2FkZXIoKS0+c3ViZnJhbWVMb2FkZXIo
KS0+Y29udGFpbnNQbHVnaW5zKCkpCiAgICAgICAgICAgICAgICAgZnJhbWVzTmVlZGluZ1JlbG9h
ZC5hcHBlbmQoZnJhbWUpOwogICAgICAgICB9CiAgICAgfQpAQCAtMzk3LDcgKzM5Nyw3IEBACiAK
IFBsdWdpbkRhdGEqIFBhZ2U6OnBsdWdpbkRhdGEoKSBjb25zdAogewotICAgIGlmICghbWFpbkZy
YW1lKCktPmxvYWRlcigpLT5hbGxvd1BsdWdpbnMoTm90QWJvdXRUb0luc3RhbnRpYXRlUGx1Z2lu
KSkKKyAgICBpZiAoIW1haW5GcmFtZSgpLT5sb2FkZXIoKS0+c3ViZnJhbWVMb2FkZXIoKS0+YWxs
b3dQbHVnaW5zKE5vdEFib3V0VG9JbnN0YW50aWF0ZVBsdWdpbikpCiAgICAgICAgIHJldHVybiAw
OwogICAgIGlmICghbV9wbHVnaW5EYXRhKQogICAgICAgICBtX3BsdWdpbkRhdGEgPSBQbHVnaW5E
YXRhOjpjcmVhdGUodGhpcyk7CkluZGV4OiBXZWJDb3JlL0dOVW1ha2VmaWxlLmFtCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFdlYkNvcmUvR05VbWFrZWZpbGUuYW0JKHJldmlzaW9uIDYxMTk3KQorKysgV2ViQ29y
ZS9HTlVtYWtlZmlsZS5hbQkod29ya2luZyBjb3B5KQpAQCAtMTQyMiw2ICsxNDIyLDggQEAKIAlX
ZWJDb3JlL2xvYWRlci9SZXNvdXJjZUxvYWROb3RpZmllci5oIFwKICAgICBXZWJDb3JlL2xvYWRl
ci9TaW5rRG9jdW1lbnQuY3BwIFwKICAgICBXZWJDb3JlL2xvYWRlci9TaW5rRG9jdW1lbnQuaCBc
CisJV2ViQ29yZS9sb2FkZXIvU3ViZnJhbWVMb2FkZXIuY3BwIFwKKwlXZWJDb3JlL2xvYWRlci9T
dWJmcmFtZUxvYWRlci5oIFwKIAlXZWJDb3JlL2xvYWRlci9TdWJyZXNvdXJjZUxvYWRlci5jcHAg
XAogCVdlYkNvcmUvbG9hZGVyL1N1YnJlc291cmNlTG9hZGVyLmggXAogCVdlYkNvcmUvbG9hZGVy
L1N1YnJlc291cmNlTG9hZGVyQ2xpZW50LmggXApJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy93aW5jZS9NZWRpYVBsYXllclByb3h5LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL3dpbmNlL01lZGlhUGxheWVyUHJveHkuY3BwCShyZXZpc2lvbiA2MTE5
NykKKysrIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luY2UvTWVkaWFQbGF5ZXJQcm94eS5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTEwOSw3ICsxMDksNyBAQAogICAgICAgICB9CiAgICAgfQog
ICAgIHNlcnZpY2VUeXBlID0gImFwcGxpY2F0aW9uL3gtbXBsYXllcjIiOwotICAgIGZyYW1lLT5s
b2FkZXIoKS0+cmVxdWVzdE9iamVjdChzdGF0aWNfY2FzdDxSZW5kZXJQYXJ0T2JqZWN0Kj4oZWxl
bWVudC0+cmVuZGVyZXIoKSksIHVybCwgbnVsbEF0b20sIHNlcnZpY2VUeXBlLCBwYXJhbU5hbWVz
LCBwYXJhbVZhbHVlcyk7CisgICAgZnJhbWUtPmxvYWRlcigpLT5zdWJmcmFtZUxvYWRlcigpLT5y
ZXF1ZXN0T2JqZWN0KHN0YXRpY19jYXN0PFJlbmRlclBhcnRPYmplY3QqPihlbGVtZW50LT5yZW5k
ZXJlcigpKSwgdXJsLCBudWxsQXRvbSwgc2VydmljZVR5cGUsIHBhcmFtTmFtZXMsIHBhcmFtVmFs
dWVzKTsKICAgICBtX2luaXQgPSB0cnVlOwogCiB9CkluZGV4OiBXZWJDb3JlL1dlYkNvcmUuZ3lw
aQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL1dlYkNvcmUuZ3lwaQkocmV2aXNpb24gNjExOTcpCisr
KyBXZWJDb3JlL1dlYkNvcmUuZ3lwaQkod29ya2luZyBjb3B5KQpAQCAtMTgyNyw2ICsxODI3LDgg
QEAKICAgICAgICAgICAgICdsb2FkZXIvUmVzb3VyY2VMb2FkTm90aWZpZXIuaCcsCiAgICAgICAg
ICAgICAnbG9hZGVyL1NpbmtEb2N1bWVudC5jcHAnLAogICAgICAgICAgICAgJ2xvYWRlci9TaW5r
RG9jdW1lbnQuaCcsCisgICAgICAgICAgICAnbG9hZGVyL1N1YmZyYW1lTG9hZGVyLmNwcCcsCisg
ICAgICAgICAgICAnbG9hZGVyL1N1YmZyYW1lTG9hZGVyLmgnLAogICAgICAgICAgICAgJ2xvYWRl
ci9TdWJyZXNvdXJjZUxvYWRlci5jcHAnLAogICAgICAgICAgICAgJ2xvYWRlci9TdWJyZXNvdXJj
ZUxvYWRlci5oJywKICAgICAgICAgICAgICdsb2FkZXIvU3VicmVzb3VyY2VMb2FkZXJDbGllbnQu
aCcsCkluZGV4OiBXZWJDb3JlL2h0bWwvSFRNTE1lZGlhRWxlbWVudC5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gV2ViQ29yZS9odG1sL0hUTUxNZWRpYUVsZW1lbnQuY3BwCShyZXZpc2lvbiA2MTE5NykKKysr
IFdlYkNvcmUvaHRtbC9IVE1MTWVkaWFFbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTk5
Miw3ICsxOTkyLDcgQEAKICAgICAKICAgICAvLyBIYW5nIG9udG8gdGhlIHByb3h5IHdpZGdldCBz
byBpdCB3b24ndCBiZSBkZXN0cm95ZWQgaWYgdGhlIHBsdWctaW4gaXMgc2V0IHRvCiAgICAgLy8g
ZGlzcGxheTpub25lCi0gICAgbV9wcm94eVdpZGdldCA9IGxvYWRlci0+bG9hZE1lZGlhUGxheWVy
UHJveHlQbHVnaW4odGhpcywgdXJsLCBwYXJhbU5hbWVzLCBwYXJhbVZhbHVlcyk7CisgICAgbV9w
cm94eVdpZGdldCA9IGxvYWRlci0+c3ViZnJhbWVMb2FkZXIoKS0+bG9hZE1lZGlhUGxheWVyUHJv
eHlQbHVnaW4odGhpcywgdXJsLCBwYXJhbU5hbWVzLCBwYXJhbVZhbHVlcyk7CiAgICAgaWYgKG1f
cHJveHlXaWRnZXQpCiAgICAgICAgIG1fbmVlZFdpZGdldFVwZGF0ZSA9IGZhbHNlOwogfQpJbmRl
eDogV2ViQ29yZS9odG1sL0hUTUxGcmFtZUVsZW1lbnRCYXNlLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBX
ZWJDb3JlL2h0bWwvSFRNTEZyYW1lRWxlbWVudEJhc2UuY3BwCShyZXZpc2lvbiA2MTE5NykKKysr
IFdlYkNvcmUvaHRtbC9IVE1MRnJhbWVFbGVtZW50QmFzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTEwNCw3ICsxMDQsNyBAQAogICAgIGlmICghcGFyZW50RnJhbWUpCiAgICAgICAgIHJldHVybjsK
IAotICAgIHBhcmVudEZyYW1lLT5sb2FkZXIoKS0+cmVxdWVzdEZyYW1lKHRoaXMsIG1fVVJMLCBt
X2ZyYW1lTmFtZSwgbG9ja0hpc3RvcnksIGxvY2tCYWNrRm9yd2FyZExpc3QpOworICAgIHBhcmVu
dEZyYW1lLT5sb2FkZXIoKS0+c3ViZnJhbWVMb2FkZXIoKS0+cmVxdWVzdEZyYW1lKHRoaXMsIG1f
VVJMLCBtX2ZyYW1lTmFtZSwgbG9ja0hpc3RvcnksIGxvY2tCYWNrRm9yd2FyZExpc3QpOwogICAg
IGlmIChjb250ZW50RnJhbWUoKSkKICAgICAgICAgY29udGVudEZyYW1lKCktPnNldEluVmlld1Nv
dXJjZU1vZGUodmlld1NvdXJjZU1vZGUoKSk7CiB9CkluZGV4OiBXZWJDb3JlL3JlbmRlcmluZy9S
ZW5kZXJBcHBsZXQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckFw
cGxldC5jcHAJKHJldmlzaW9uIDYxMTk3KQorKysgV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQXBw
bGV0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzIsNyArNzIsNyBAQAogCiAgICAgRnJhbWUqIGZy
YW1lID0gdGhpcy0+ZnJhbWUoKTsKICAgICBBU1NFUlQoZnJhbWUpOwotICAgIHNldFdpZGdldChm
cmFtZS0+bG9hZGVyKCktPmNyZWF0ZUphdmFBcHBsZXRXaWRnZXQoSW50U2l6ZShjb250ZW50V2lk
dGgsIGNvbnRlbnRIZWlnaHQpLCBlbGVtZW50LCBtX2FyZ3MpKTsKKyAgICBzZXRXaWRnZXQoZnJh
bWUtPmxvYWRlcigpLT5zdWJmcmFtZUxvYWRlcigpLT5jcmVhdGVKYXZhQXBwbGV0V2lkZ2V0KElu
dFNpemUoY29udGVudFdpZHRoLCBjb250ZW50SGVpZ2h0KSwgZWxlbWVudCwgbV9hcmdzKSk7CiB9
CiAKIHZvaWQgUmVuZGVyQXBwbGV0OjpsYXlvdXQoKQpJbmRleDogV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVyRW1iZWRkZWRPYmplY3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlckVtYmVkZGVkT2JqZWN0LmNwcAkocmV2aXNpb24gNjExOTcpCisrKyBXZWJDb3JlL3Jl
bmRlcmluZy9SZW5kZXJFbWJlZGRlZE9iamVjdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE2NSw3
ICsxNjUsNyBAQAogICAgIFZlY3RvcjxTdHJpbmc+IHBhcmFtVmFsdWVzOwogICAgIEZyYW1lKiBm
cmFtZSA9IGZyYW1lVmlldygpLT5mcmFtZSgpOwogCi0gICAgLy8gVGhlIGNhbGxzIHRvIEZyYW1l
TG9hZGVyOjpyZXF1ZXN0T2JqZWN0IHdpdGhpbiB0aGlzIGZ1bmN0aW9uIGNhbiByZXN1bHQgaW4g
YSBwbHVnLWluIGJlaW5nIGluaXRpYWxpemVkLgorICAgIC8vIFRoZSBjYWxscyB0byBTdWJmcmFt
ZUxvYWRlcjo6cmVxdWVzdE9iamVjdCB3aXRoaW4gdGhpcyBmdW5jdGlvbiBjYW4gcmVzdWx0IGlu
IGEgcGx1Zy1pbiBiZWluZyBpbml0aWFsaXplZC4KICAgICAvLyBUaGlzIGNhbiBydW4gY2F1c2Ug
YXJiaXRyYXJ5IEphdmFTY3JpcHQgdG8gcnVuIGFuZCBtYXkgcmVzdWx0IGluIHRoaXMgUmVuZGVy
T2JqZWN0IGJlaW5nIGRldGFjaGVkIGZyb20KICAgICAvLyB0aGUgcmVuZGVyIHRyZWUgYW5kIGRl
c3Ryb3llZCwgY2F1c2luZyBhIGNyYXNoIGxpa2UgPHJkYXI6Ly9wcm9ibGVtLzY5NTQ1NDY+LiAg
QnkgZXh0ZW5kaW5nIG91ciBsaWZldGltZQogICAgIC8vIGFydGlmaWNhbGx5IHRvIGVuc3VyZSB0
aGF0IHdlIHJlbWFpbiBhbGl2ZSBmb3IgdGhlIGR1cmF0aW9uIG9mIHBsdWctaW4gaW5pdGlhbGl6
YXRpb24uCkBAIC0yODQsNyArMjg0LDcgQEAKICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAg
ICAgIH0KIAotICAgICAgICBib29sIHN1Y2Nlc3MgPSBvYmplY3RFbGVtZW50LT5kaXNwYXRjaEJl
Zm9yZUxvYWRFdmVudCh1cmwpICYmIGZyYW1lLT5sb2FkZXIoKS0+cmVxdWVzdE9iamVjdCh0aGlz
LCB1cmwsIG9iamVjdEVsZW1lbnQtPmdldEF0dHJpYnV0ZShuYW1lQXR0ciksIHNlcnZpY2VUeXBl
LCBwYXJhbU5hbWVzLCBwYXJhbVZhbHVlcyk7CisgICAgICAgIGJvb2wgc3VjY2VzcyA9IG9iamVj
dEVsZW1lbnQtPmRpc3BhdGNoQmVmb3JlTG9hZEV2ZW50KHVybCkgJiYgZnJhbWUtPmxvYWRlcigp
LT5zdWJmcmFtZUxvYWRlcigpLT5yZXF1ZXN0T2JqZWN0KHRoaXMsIHVybCwgb2JqZWN0RWxlbWVu
dC0+Z2V0QXR0cmlidXRlKG5hbWVBdHRyKSwgc2VydmljZVR5cGUsIHBhcmFtTmFtZXMsIHBhcmFt
VmFsdWVzKTsKICAgICAgICAgaWYgKCFzdWNjZXNzICYmIG1faGFzRmFsbGJhY2tDb250ZW50KQog
ICAgICAgICAgICAgb2JqZWN0RWxlbWVudC0+cmVuZGVyRmFsbGJhY2tDb250ZW50KCk7CiAKQEAg
LTMxOSw3ICszMTksNyBAQAogICAgICAgICB9CiAKICAgICAgICAgaWYgKGVtYmVkRWxlbWVudC0+
ZGlzcGF0Y2hCZWZvcmVMb2FkRXZlbnQodXJsKSkKLSAgICAgICAgICAgIGZyYW1lLT5sb2FkZXIo
KS0+cmVxdWVzdE9iamVjdCh0aGlzLCB1cmwsIGVtYmVkRWxlbWVudC0+Z2V0QXR0cmlidXRlKG5h
bWVBdHRyKSwgc2VydmljZVR5cGUsIHBhcmFtTmFtZXMsIHBhcmFtVmFsdWVzKTsKKyAgICAgICAg
ICAgIGZyYW1lLT5sb2FkZXIoKS0+c3ViZnJhbWVMb2FkZXIoKS0+cmVxdWVzdE9iamVjdCh0aGlz
LCB1cmwsIGVtYmVkRWxlbWVudC0+Z2V0QXR0cmlidXRlKG5hbWVBdHRyKSwgc2VydmljZVR5cGUs
IHBhcmFtTmFtZXMsIHBhcmFtVmFsdWVzKTsKICAgICB9CiAjaWYgRU5BQkxFKFBMVUdJTl9QUk9Y
WV9GT1JfVklERU8pICAgICAgICAKICAgICBlbHNlIGlmIChub2RlKCktPmhhc1RhZ05hbWUodmlk
ZW9UYWcpIHx8IG5vZGUoKS0+aGFzVGFnTmFtZShhdWRpb1RhZykpIHsKQEAgLTMyOCw3ICszMjgs
NyBAQAogCiAgICAgICAgIG1lZGlhRWxlbWVudC0+Z2V0UGx1Z2luUHJveHlQYXJhbXMoa3VybCwg
cGFyYW1OYW1lcywgcGFyYW1WYWx1ZXMpOwogICAgICAgICBtZWRpYUVsZW1lbnQtPnNldE5lZWRX
aWRnZXRVcGRhdGUoZmFsc2UpOwotICAgICAgICBmcmFtZS0+bG9hZGVyKCktPmxvYWRNZWRpYVBs
YXllclByb3h5UGx1Z2luKG5vZGUoKSwga3VybCwgcGFyYW1OYW1lcywgcGFyYW1WYWx1ZXMpOwor
ICAgICAgICBmcmFtZS0+bG9hZGVyKCktPnN1YmZyYW1lTG9hZGVyKCktPmxvYWRNZWRpYVBsYXll
clByb3h5UGx1Z2luKG5vZGUoKSwga3VybCwgcGFyYW1OYW1lcywgcGFyYW1WYWx1ZXMpOwogICAg
IH0KICNlbmRpZgogfQpJbmRleDogV2ViQ29yZS9DTWFrZUxpc3RzLnR4dAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBXZWJDb3JlL0NNYWtlTGlzdHMudHh0CShyZXZpc2lvbiA2MTE5NykKKysrIFdlYkNvcmUvQ01h
a2VMaXN0cy50eHQJKHdvcmtpbmcgY29weSkKQEAgLTEwNTUsNiArMTA1NSw3IEBACiAgICAgbG9h
ZGVyL1Jlc291cmNlTG9hZE5vdGlmaWVyLmNwcAogICAgIGxvYWRlci9SZXNvdXJjZUxvYWRlci5j
cHAKICAgICBsb2FkZXIvU2lua0RvY3VtZW50LmNwcAorICAgIGxvYWRlci9TdWJmcmFtZUxvYWRl
ci5jcHAKICAgICBsb2FkZXIvU3VicmVzb3VyY2VMb2FkZXIuY3BwCiAgICAgbG9hZGVyL1RleHRE
b2N1bWVudC5jcHAKICAgICBsb2FkZXIvVGV4dFJlc291cmNlRGVjb2Rlci5jcHAKSW5kZXg6IFdl
YkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdl
YkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiA2MTE5NykK
KysrIFdlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCSh3b3JraW5nIGNv
cHkpCkBAIC00ODU3LDYgKzQ4NTcsOCBAQAogCQlDRTU0RkQzODEwMTZEOUE2MDA4QjQ0QzggLyog
U2NyaXB0U291cmNlUHJvdmlkZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IENFNTRGRDM3MTAxNkQ5QTYwMDhCNDRDOCAvKiBTY3JpcHRTb3VyY2VQcm92
aWRlci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJ
CUNFRjQxOENFMTE3OTY3OEMwMDlEMTEyQyAvKiBWaWV3cG9ydEFyZ3VtZW50cy5jcHAgaW4gU291
cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBDRUY0MThDQzExNzk2NzhD
MDA5RDExMkMgLyogVmlld3BvcnRBcmd1bWVudHMuY3BwICovOyB9OwogCQlDRUY0MThDRjExNzk2
NzhDMDA5RDExMkMgLyogVmlld3BvcnRBcmd1bWVudHMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IENFRjQxOENEMTE3OTY3OEMwMDlEMTEyQyAvKiBWaWV3
cG9ydEFyZ3VtZW50cy5oICovOyB9OworCQlEMDAwRUQyNzExQzFCOUNEMDBDNDc3MjYgLyogU3Vi
ZnJhbWVMb2FkZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gRDAwMEVEMjUxMUMxQjlDRDAwQzQ3NzI2IC8qIFN1YmZyYW1lTG9hZGVyLmNwcCAqLzsg
fTsKKwkJRDAwMEVEMjgxMUMxQjlDRDAwQzQ3NzI2IC8qIFN1YmZyYW1lTG9hZGVyLmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBEMDAwRUQyNjExQzFCOUNE
MDBDNDc3MjYgLyogU3ViZnJhbWVMb2FkZXIuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9
IChQcml2YXRlLCApOyB9OyB9OwogCQlEMDFBMjdBRDEwQzlCRkQ4MDAwMjZBNDIgLyogU3BhY2VT
cGxpdFN0cmluZy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSBEMDFBMjdBQjEwQzlCRkQ4MDAwMjZBNDIgLyogU3BhY2VTcGxpdFN0cmluZy5jcHAgKi87
IH07CiAJCUQwMUEyN0FFMTBDOUJGRDgwMDAyNkE0MiAvKiBTcGFjZVNwbGl0U3RyaW5nLmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBEMDFBMjdBQzEwQzlC
RkQ4MDAwMjZBNDIgLyogU3BhY2VTcGxpdFN0cmluZy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJV
VEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCUQwNUNFRDI5MEE0MEJCMkMwMEM1QUYzOCAvKiBG
b3JtYXRCbG9ja0NvbW1hbmQuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gRDA1Q0VEMjcwQTQwQkIyQzAwQzVBRjM4IC8qIEZvcm1hdEJsb2NrQ29tbWFu
ZC5jcHAgKi87IH07CkBAIC0xMDM5MCw2ICsxMDM5Miw4IEBACiAJCUNFNTRGRDM3MTAxNkQ5QTYw
MDhCNDRDOCAvKiBTY3JpcHRTb3VyY2VQcm92aWRlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSBTY3JpcHRTb3VyY2VQcm92aWRlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQlDRUY0MThDQzExNzk2NzhDMDA5RDExMkMgLyogVmlld3BvcnRBcmd1bWVudHMuY3Bw
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gVmlld3BvcnRBcmd1bWVudHMu
Y3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlDRUY0MThDRDExNzk2NzhDMDA5RDEx
MkMgLyogVmlld3BvcnRBcmd1bWVudHMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRo
ID0gVmlld3BvcnRBcmd1bWVudHMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJRDAw
MEVEMjUxMUMxQjlDRDAwQzQ3NzI2IC8qIFN1YmZyYW1lTG9hZGVyLmNwcCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFN1YmZyYW1lTG9hZGVyLmNwcDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKKwkJRDAwMEVEMjYxMUMxQjlDRDAwQzQ3NzI2IC8qIFN1YmZyYW1lTG9h
ZGVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFN1YmZyYW1lTG9hZGVyLmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUQwMUEyN0FCMTBDOUJGRDgwMDAyNkE0MiAv
KiBTcGFjZVNwbGl0U3RyaW5nLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0
aCA9IFNwYWNlU3BsaXRTdHJpbmcuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlE
MDFBMjdBQzEwQzlCRkQ4MDAwMjZBNDIgLyogU3BhY2VTcGxpdFN0cmluZy5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBTcGFjZVNwbGl0U3RyaW5nLmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCUQwNUNFRDI3MEE0MEJCMkMwMEM1QUYzOCAvKiBGb3JtYXRCbG9ja0Nv
bW1hbmQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMw
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEZvcm1hdEJs
b2NrQ29tbWFuZC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0xNTY3Nyw2ICsx
NTY4MSw4IEBACiAJCUJDQjE2QkZCMDk3OUMzODcwMDQ2Nzc0MSAvKiBsb2FkZXIgKi8gPSB7CiAJ
CQlpc2EgPSBQQlhHcm91cDsKIAkJCWNoaWxkcmVuID0gKAorCQkJCUQwMDBFRDI1MTFDMUI5Q0Qw
MEM0NzcyNiAvKiBTdWJmcmFtZUxvYWRlci5jcHAgKi8sCisJCQkJRDAwMEVEMjYxMUMxQjlDRDAw
QzQ3NzI2IC8qIFN1YmZyYW1lTG9hZGVyLmggKi8sCiAJCQkJMUE4RjZCQjAwREI1NUNEQzAwMURC
Nzk0IC8qIGFwcGNhY2hlICovLAogCQkJCTUxMkREOEU4MEQ5MUU2OTEwMDBGODlFRSAvKiBhcmNo
aXZlICovLAogCQkJCTUxMjZFNkI2MEEyRTNBRUYwMDVDMjlGQSAvKiBpY29uICovLApAQCAtMTk0
MDQsNiArMTk0MTAsNyBAQAogCQkJCUUxQkU1MTJFMENGNkM1MTIwMDJFQTk1OSAvKiBYU0xUVW5p
Y29kZVNvcnQuaCBpbiBIZWFkZXJzICovLAogCQkJCTk3REQ0RDg3MEZERjRENkUwMEVDRjlBNCAv
KiBYU1NBdWRpdG9yLmggaW4gSGVhZGVycyAqLywKIAkJCQlDRTE3MkUwMTExMzZFOENFMDA2MkE1
MzMgLyogWm9vbU1vZGUuaCBpbiBIZWFkZXJzICovLAorCQkJCUQwMDBFRDI4MTFDMUI5Q0QwMEM0
NzcyNiAvKiBTdWJmcmFtZUxvYWRlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJOTdFNzkzNjYxMUM2
MDMwOTAwRTY0OUJDIC8qIEhUTUw1UHJlbG9hZFNjYW5uZXIuaCBpbiBIZWFkZXJzICovLAogCQkJ
CUI2NjkzRUVDMTFBRDYzRTYwMDNGMjc3MCAvKiBJREJPYmplY3RTdG9yZS5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJQjY2OTNFRUUxMUFENjNFNjAwM0YyNzcwIC8qIElEQk9iamVjdFN0b3JlUmVxdWVz
dC5oIGluIEhlYWRlcnMgKi8sCkBAIC0yMTcwNiw2ICsyMTcxMyw3IEBACiAJCQkJOTNGMTlCMDUw
ODI0NUU1OTAwMUU5QUJDIC8qIFhTTFRQcm9jZXNzb3JMaWJ4c2x0LmNwcCBpbiBTb3VyY2VzICov
LAogCQkJCUUxQkU1MTJEMENGNkM1MTIwMDJFQTk1OSAvKiBYU0xUVW5pY29kZVNvcnQuY3BwIGlu
IFNvdXJjZXMgKi8sCiAJCQkJOTdERDREODYwRkRGNEQ2RTAwRUNGOUE0IC8qIFhTU0F1ZGl0b3Iu
Y3BwIGluIFNvdXJjZXMgKi8sCisJCQkJRDAwMEVEMjcxMUMxQjlDRDAwQzQ3NzI2IC8qIFN1YmZy
YW1lTG9hZGVyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTk3RTc5MzY1MTFDNjAzMDkwMEU2NDlC
QyAvKiBIVE1MNVByZWxvYWRTY2FubmVyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUJDMjc1Qjc5
MTFDNUQxQzMwMEM5MjA2QyAvKiBKU1dlYktpdFBvaW50Q3VzdG9tLmNwcCBpbiBTb3VyY2VzICov
LAogCQkJCUJDMjc1QjdEMTFDNUQyMzUwMEM5MjA2QyAvKiBKU1dlYktpdENTU01hdHJpeEN1c3Rv
bS5jcHAgaW4gU291cmNlcyAqLywKSW5kZXg6IFdlYkNvcmUvQW5kcm9pZC5tawo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBXZWJDb3JlL0FuZHJvaWQubWsJKHJldmlzaW9uIDYxMTk3KQorKysgV2ViQ29yZS9BbmRy
b2lkLm1rCSh3b3JraW5nIGNvcHkpCkBAIC0zMTUsNiArMzE1LDcgQEAKIAlsb2FkZXIvUmVxdWVz
dC5jcHAgXAogCWxvYWRlci9SZXNvdXJjZUxvYWROb3RpZmllci5jcHAgXAogCWxvYWRlci9SZXNv
dXJjZUxvYWRlci5jcHAgXAorCWxvYWRlci9TdWJmcmFtZUxvYWRlci5jcHAgXAogCWxvYWRlci9T
dWJyZXNvdXJjZUxvYWRlci5jcHAgXAogCWxvYWRlci9UZXh0RG9jdW1lbnQuY3BwIFwKIAlsb2Fk
ZXIvVGV4dFJlc291cmNlRGVjb2Rlci5jcHAgXApJbmRleDogV2ViQ29yZS9sb2FkZXIvRnJhbWVM
b2FkZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvbG9hZGVyL0ZyYW1lTG9hZGVyLmNwcAko
cmV2aXNpb24gNjExOTcpCisrKyBXZWJDb3JlL2xvYWRlci9GcmFtZUxvYWRlci5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTU5LDEyICs1OSw3IEBACiAjaW5jbHVkZSAiRnJhbWVUcmVlLmgiCiAjaW5j
bHVkZSAiRnJhbWVWaWV3LmgiCiAjaW5jbHVkZSAiSFRNTEFuY2hvckVsZW1lbnQuaCIKLSNpbmNs
dWRlICJIVE1MQXBwbGV0RWxlbWVudC5oIgogI2luY2x1ZGUgIkhUTUxGb3JtRWxlbWVudC5oIgot
I2luY2x1ZGUgIkhUTUxGcmFtZUVsZW1lbnQuaCIKLSNpZiBFTkFCTEUoUExVR0lOX1BST1hZX0ZP
Ul9WSURFTykKLSNpbmNsdWRlICJIVE1MTWVkaWFFbGVtZW50LmgiCi0jZW5kaWYKICNpbmNsdWRl
ICJIVE1MTmFtZXMuaCIKICNpbmNsdWRlICJIVE1MT2JqZWN0RWxlbWVudC5oIgogI2luY2x1ZGUg
IkhUVFBQYXJzZXJzLmgiCkBAIC04NCwxMSArNzksNiBAQAogI2luY2x1ZGUgIlBsdWdpbkRhdGFi
YXNlLmgiCiAjaW5jbHVkZSAiUGx1Z2luRG9jdW1lbnQuaCIKICNpbmNsdWRlICJQcm9ncmVzc1Ry
YWNrZXIuaCIKLSNpbmNsdWRlICJSZW5kZXJFbWJlZGRlZE9iamVjdC5oIgotI2lmIEVOQUJMRShQ
TFVHSU5fUFJPWFlfRk9SX1ZJREVPKQotI2luY2x1ZGUgIlJlbmRlclZpZGVvLmgiCi0jZW5kaWYK
LSNpbmNsdWRlICJSZW5kZXJWaWV3LmgiCiAjaW5jbHVkZSAiUmVzb3VyY2VIYW5kbGUuaCIKICNp
bmNsdWRlICJSZXNvdXJjZVJlcXVlc3QuaCIKICNpbmNsdWRlICJTY3JpcHRDb250cm9sbGVyLmgi
CkBAIC0xMDcsNyArOTcsNiBAQAogI2luY2x1ZGUgIldpbmRvd0ZlYXR1cmVzLmgiCiAjaW5jbHVk
ZSAiWE1MSHR0cFJlcXVlc3QuaCIKICNpbmNsdWRlICJYTUxEb2N1bWVudFBhcnNlci5oIgotI2lu
Y2x1ZGUgIlhTU0F1ZGl0b3IuaCIKICNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+CiAjaW5j
bHVkZSA8d3RmL0N1cnJlbnRUaW1lLmg+CiAjaW5jbHVkZSA8d3RmL1N0ZExpYkV4dHJhcy5oPgpA
QCAtMTg5LDYgKzE3OCw3IEBACiAgICAgLCBtX2hpc3RvcnkoZnJhbWUpCiAgICAgLCBtX25vdGlm
ZXIoZnJhbWUpCiAgICAgLCBtX3dyaXRlcihmcmFtZSkKKyAgICAsIG1fc3ViZnJhbWVMb2FkZXIo
ZnJhbWUpCiAgICAgLCBtX3N0YXRlKEZyYW1lU3RhdGVDb21taXR0ZWRQYWdlKQogICAgICwgbV9s
b2FkVHlwZShGcmFtZUxvYWRUeXBlU3RhbmRhcmQpCiAgICAgLCBtX2RlbGVnYXRlSXNIYW5kbGlu
Z1Byb3Zpc2lvbmFsTG9hZEVycm9yKGZhbHNlKQpAQCAtMjA0LDcgKzE5NCw2IEBACiAgICAgLCBt
X2lzTG9hZGluZ01haW5SZXNvdXJjZShmYWxzZSkKICAgICAsIG1fbmVlZHNDbGVhcihmYWxzZSkK
ICAgICAsIG1fcmVjZWl2ZWREYXRhKGZhbHNlKQotICAgICwgbV9jb250YWluc1BsdWdJbnMoZmFs
c2UpCiAgICAgLCBtX2NoZWNrVGltZXIodGhpcywgJkZyYW1lTG9hZGVyOjpjaGVja1RpbWVyRmly
ZWQpCiAgICAgLCBtX3Nob3VsZENhbGxDaGVja0NvbXBsZXRlZChmYWxzZSkKICAgICAsIG1fc2hv
dWxkQ2FsbENoZWNrTG9hZENvbXBsZXRlKGZhbHNlKQpAQCAtMzgwLDg3ICszNjksNiBAQAogICAg
IG1fc3VwcHJlc3NPcGVuZXJJbk5ld0ZyYW1lID0gZmFsc2U7CiB9CiAKLWJvb2wgRnJhbWVMb2Fk
ZXI6OnJlcXVlc3RGcmFtZShIVE1MRnJhbWVPd25lckVsZW1lbnQqIG93bmVyRWxlbWVudCwgY29u
c3QgU3RyaW5nJiB1cmxTdHJpbmcsIGNvbnN0IEF0b21pY1N0cmluZyYgZnJhbWVOYW1lLCBib29s
IGxvY2tIaXN0b3J5LCBib29sIGxvY2tCYWNrRm9yd2FyZExpc3QpCi17Ci0gICAgLy8gU3VwcG9y
dCBmb3IgPGZyYW1lIHNyYz0iamF2YXNjcmlwdDpzdHJpbmciPgotICAgIEtVUkwgc2NyaXB0VVJM
OwotICAgIEtVUkwgdXJsOwotICAgIGlmIChwcm90b2NvbElzSmF2YVNjcmlwdCh1cmxTdHJpbmcp
KSB7Ci0gICAgICAgIHNjcmlwdFVSTCA9IGNvbXBsZXRlVVJMKHVybFN0cmluZyk7IC8vIGNvbXBs
ZXRlVVJMKCkgZW5jb2RlcyB0aGUgVVJMLgotICAgICAgICB1cmwgPSBibGFua1VSTCgpOwotICAg
IH0gZWxzZQotICAgICAgICB1cmwgPSBjb21wbGV0ZVVSTCh1cmxTdHJpbmcpOwotCi0gICAgRnJh
bWUqIGZyYW1lID0gb3duZXJFbGVtZW50LT5jb250ZW50RnJhbWUoKTsKLSAgICBpZiAoZnJhbWUp
Ci0gICAgICAgIGZyYW1lLT5yZWRpcmVjdFNjaGVkdWxlcigpLT5zY2hlZHVsZUxvY2F0aW9uQ2hh
bmdlKHVybC5zdHJpbmcoKSwgbV9vdXRnb2luZ1JlZmVycmVyLCBsb2NrSGlzdG9yeSwgbG9ja0Jh
Y2tGb3J3YXJkTGlzdCwgaXNQcm9jZXNzaW5nVXNlckdlc3R1cmUoKSk7Ci0gICAgZWxzZQotICAg
ICAgICBmcmFtZSA9IGxvYWRTdWJmcmFtZShvd25lckVsZW1lbnQsIHVybCwgZnJhbWVOYW1lLCBt
X291dGdvaW5nUmVmZXJyZXIpOwotICAgIAotICAgIGlmICghZnJhbWUpCi0gICAgICAgIHJldHVy
biBmYWxzZTsKLQotICAgIGlmICghc2NyaXB0VVJMLmlzRW1wdHkoKSkKLSAgICAgICAgZnJhbWUt
PnNjcmlwdCgpLT5leGVjdXRlSWZKYXZhU2NyaXB0VVJMKHNjcmlwdFVSTCk7Ci0KLSAgICByZXR1
cm4gdHJ1ZTsKLX0KLQotRnJhbWUqIEZyYW1lTG9hZGVyOjpsb2FkU3ViZnJhbWUoSFRNTEZyYW1l
T3duZXJFbGVtZW50KiBvd25lckVsZW1lbnQsIGNvbnN0IEtVUkwmIHVybCwgY29uc3QgU3RyaW5n
JiBuYW1lLCBjb25zdCBTdHJpbmcmIHJlZmVycmVyKQotewotICAgIGJvb2wgYWxsb3dzU2Nyb2xs
aW5nID0gdHJ1ZTsKLSAgICBpbnQgbWFyZ2luV2lkdGggPSAtMTsKLSAgICBpbnQgbWFyZ2luSGVp
Z2h0ID0gLTE7Ci0gICAgaWYgKG93bmVyRWxlbWVudC0+aGFzVGFnTmFtZShmcmFtZVRhZykgfHwg
b3duZXJFbGVtZW50LT5oYXNUYWdOYW1lKGlmcmFtZVRhZykpIHsKLSAgICAgICAgSFRNTEZyYW1l
RWxlbWVudEJhc2UqIG8gPSBzdGF0aWNfY2FzdDxIVE1MRnJhbWVFbGVtZW50QmFzZSo+KG93bmVy
RWxlbWVudCk7Ci0gICAgICAgIGFsbG93c1Njcm9sbGluZyA9IG8tPnNjcm9sbGluZ01vZGUoKSAh
PSBTY3JvbGxiYXJBbHdheXNPZmY7Ci0gICAgICAgIG1hcmdpbldpZHRoID0gby0+Z2V0TWFyZ2lu
V2lkdGgoKTsKLSAgICAgICAgbWFyZ2luSGVpZ2h0ID0gby0+Z2V0TWFyZ2luSGVpZ2h0KCk7Ci0g
ICAgfQotCi0gICAgaWYgKCFTZWN1cml0eU9yaWdpbjo6Y2FuTG9hZCh1cmwsIHJlZmVycmVyLCAw
KSkgewotICAgICAgICBGcmFtZUxvYWRlcjo6cmVwb3J0TG9jYWxMb2FkRmFpbGVkKG1fZnJhbWUs
IHVybC5zdHJpbmcoKSk7Ci0gICAgICAgIHJldHVybiAwOwotICAgIH0KLQotICAgIGJvb2wgaGlk
ZVJlZmVycmVyID0gU2VjdXJpdHlPcmlnaW46OnNob3VsZEhpZGVSZWZlcnJlcih1cmwsIHJlZmVy
cmVyKTsKLSAgICBSZWZQdHI8RnJhbWU+IGZyYW1lID0gbV9jbGllbnQtPmNyZWF0ZUZyYW1lKHVy
bCwgbmFtZSwgb3duZXJFbGVtZW50LCBoaWRlUmVmZXJyZXIgPyBTdHJpbmcoKSA6IHJlZmVycmVy
LCBhbGxvd3NTY3JvbGxpbmcsIG1hcmdpbldpZHRoLCBtYXJnaW5IZWlnaHQpOwotCi0gICAgaWYg
KCFmcmFtZSkgIHsKLSAgICAgICAgY2hlY2tDYWxsSW1wbGljaXRDbG9zZSgpOwotICAgICAgICBy
ZXR1cm4gMDsKLSAgICB9Ci0gICAgCi0gICAgLy8gQWxsIG5ldyBmcmFtZXMgd2lsbCBoYXZlIG1f
aXNDb21wbGV0ZSBzZXQgdG8gdHJ1ZSBhdCB0aGlzIHBvaW50IGR1ZSB0byBzeW5jaHJvbm91c2x5
IGxvYWRpbmcKLSAgICAvLyBhbiBlbXB0eSBkb2N1bWVudCBpbiBGcmFtZUxvYWRlcjo6aW5pdCgp
LiBCdXQgbWFueSBmcmFtZXMgd2lsbCBub3cgYmUgc3RhcnRpbmcgYW4KLSAgICAvLyBhc3luY2hy
b25vdXMgbG9hZCBvZiB1cmwsIHNvIHdlIHNldCBtX2lzQ29tcGxldGUgdG8gZmFsc2UgYW5kIHRo
ZW4gY2hlY2sgaWYgdGhlIGxvYWQgaXMKLSAgICAvLyBhY3R1YWxseSBjb21wbGV0ZWQgYmVsb3cu
IChOb3RlIHRoYXQgd2Ugc2V0IG1faXNDb21wbGV0ZSB0byBmYWxzZSBldmVuIGZvciBzeW5jaHJv
bm91cwotICAgIC8vIGxvYWRzLCBzbyB0aGF0IGNoZWNrQ29tcGxldGVkKCkgYmVsb3cgd29uJ3Qg
YmFpbCBlYXJseS4pCi0gICAgLy8gRklYTUU6IENhbiB3ZSByZW1vdmUgdGhpcyBlbnRpcmVseT8g
bV9pc0NvbXBsZXRlIG5vcm1hbGx5IGdldHMgc2V0IHRvIGZhbHNlIHdoZW4gYSBsb2FkIGlzIGNv
bW1pdHRlZC4KLSAgICBmcmFtZS0+bG9hZGVyKCktPm1faXNDb21wbGV0ZSA9IGZhbHNlOwotICAg
Ci0gICAgUmVuZGVyT2JqZWN0KiByZW5kZXJlciA9IG93bmVyRWxlbWVudC0+cmVuZGVyZXIoKTsK
LSAgICBGcmFtZVZpZXcqIHZpZXcgPSBmcmFtZS0+dmlldygpOwotICAgIGlmIChyZW5kZXJlciAm
JiByZW5kZXJlci0+aXNXaWRnZXQoKSAmJiB2aWV3KQotICAgICAgICB0b1JlbmRlcldpZGdldChy
ZW5kZXJlciktPnNldFdpZGdldCh2aWV3KTsKLSAgICAKLSAgICBjaGVja0NhbGxJbXBsaWNpdENs
b3NlKCk7Ci0gICAgCi0gICAgLy8gU29tZSBsb2FkcyBhcmUgcGVyZm9ybWVkIHN5bmNocm9ub3Vz
bHkgKGUuZy4sIGFib3V0OmJsYW5rIGFuZCBsb2FkcwotICAgIC8vIGNhbmNlbGxlZCBieSByZXR1
cm5pbmcgYSBudWxsIFJlc291cmNlUmVxdWVzdCBmcm9tIHJlcXVlc3RGcm9tRGVsZWdhdGUpLgot
ICAgIC8vIEluIHRoZXNlIGNhc2VzLCB0aGUgc3luY2hyb25vdXMgbG9hZCB3b3VsZCBoYXZlIGZp
bmlzaGVkCi0gICAgLy8gYmVmb3JlIHdlIGNvdWxkIGNvbm5lY3QgdGhlIHNpZ25hbHMsIHNvIG1h
a2Ugc3VyZSB0byBzZW5kIHRoZSAKLSAgICAvLyBjb21wbGV0ZWQoKSBzaWduYWwgZm9yIHRoZSBj
aGlsZCBieSBoYW5kIGFuZCBtYXJrIHRoZSBsb2FkIGFzIGJlaW5nCi0gICAgLy8gY29tcGxldGUu
Ci0gICAgLy8gRklYTUU6IEluIHRoaXMgY2FzZSB0aGUgRnJhbWUgd2lsbCBoYXZlIGZpbmlzaGVk
IGxvYWRpbmcgYmVmb3JlIAotICAgIC8vIGl0J3MgYmVpbmcgYWRkZWQgdG8gdGhlIGNoaWxkIGxp
c3QuIEl0IHdvdWxkIGJlIGEgZ29vZCBpZGVhIHRvCi0gICAgLy8gY3JlYXRlIHRoZSBjaGlsZCBm
aXJzdCwgdGhlbiBpbnZva2UgdGhlIGxvYWRlciBzZXBhcmF0ZWx5LgotICAgIGlmIChmcmFtZS0+
bG9hZGVyKCktPnN0YXRlKCkgPT0gRnJhbWVTdGF0ZUNvbXBsZXRlKQotICAgICAgICBmcmFtZS0+
bG9hZGVyKCktPmNoZWNrQ29tcGxldGVkKCk7Ci0KLSAgICByZXR1cm4gZnJhbWUuZ2V0KCk7Ci19
Ci0KIHZvaWQgRnJhbWVMb2FkZXI6OnN1Ym1pdEZvcm0oY29uc3QgY2hhciogYWN0aW9uLCBjb25z
dCBTdHJpbmcmIHVybCwgUGFzc1JlZlB0cjxGb3JtRGF0YT4gZm9ybURhdGEsCiAgICAgY29uc3Qg
U3RyaW5nJiB0YXJnZXQsIGNvbnN0IFN0cmluZyYgY29udGVudFR5cGUsIGNvbnN0IFN0cmluZyYg
Ym91bmRhcnksCiAgICAgYm9vbCBsb2NrSGlzdG9yeSwgUGFzc1JlZlB0cjxFdmVudD4gZXZlbnQs
IFBhc3NSZWZQdHI8Rm9ybVN0YXRlPiBmb3JtU3RhdGUpCkBAIC03NTgsNyArNjY2LDcgQEAKICAg
ICBtX2ZyYW1lLT5zZXREb2N1bWVudCgwKTsKICAgICB3cml0ZXIoKS0+Y2xlYXIoKTsKIAotICAg
IG1fY29udGFpbnNQbHVnSW5zID0gZmFsc2U7CisgICAgbV9zdWJmcmFtZUxvYWRlci5jbGVhcigp
OwogCiAgICAgaWYgKGNsZWFyU2NyaXB0T2JqZWN0cykKICAgICAgICAgbV9mcmFtZS0+c2NyaXB0
KCktPmNsZWFyU2NyaXB0T2JqZWN0cygpOwpAQCAtMTEyNSw2OCArMTAzMyw2IEBACiAgICAgbG9h
ZChkb2N1bWVudExvYWRlci5nZXQoKSk7CiB9CiAKLWJvb2wgRnJhbWVMb2FkZXI6OnJlcXVlc3RP
YmplY3QoUmVuZGVyRW1iZWRkZWRPYmplY3QqIHJlbmRlcmVyLCBjb25zdCBTdHJpbmcmIHVybCwg
Y29uc3QgQXRvbWljU3RyaW5nJiBmcmFtZU5hbWUsCi0gICAgY29uc3QgU3RyaW5nJiBtaW1lVHlw
ZSwgY29uc3QgVmVjdG9yPFN0cmluZz4mIHBhcmFtTmFtZXMsIGNvbnN0IFZlY3RvcjxTdHJpbmc+
JiBwYXJhbVZhbHVlcykKLXsKLSAgICBpZiAodXJsLmlzRW1wdHkoKSAmJiBtaW1lVHlwZS5pc0Vt
cHR5KCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAKLSAgICBpZiAoIW1fZnJhbWUtPnNj
cmlwdCgpLT54c3NBdWRpdG9yKCktPmNhbkxvYWRPYmplY3QodXJsKSkgewotICAgICAgICAvLyBJ
dCBpcyB1bnNhZmUgdG8gaG9ub3IgdGhlIHJlcXVlc3QgZm9yIHRoaXMgb2JqZWN0LgotICAgICAg
ICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgS1VSTCBjb21wbGV0ZWRVUkw7Ci0gICAgaWYg
KCF1cmwuaXNFbXB0eSgpKQotICAgICAgICBjb21wbGV0ZWRVUkwgPSBjb21wbGV0ZVVSTCh1cmwp
OwotCi0gICAgYm9vbCB1c2VGYWxsYmFjazsKLSAgICBpZiAoc2hvdWxkVXNlUGx1Z2luKGNvbXBs
ZXRlZFVSTCwgbWltZVR5cGUsIHJlbmRlcmVyLT5oYXNGYWxsYmFja0NvbnRlbnQoKSwgdXNlRmFs
bGJhY2spKSB7Ci0gICAgICAgIFNldHRpbmdzKiBzZXR0aW5ncyA9IG1fZnJhbWUtPnNldHRpbmdz
KCk7Ci0gICAgICAgIGlmICgoIWFsbG93UGx1Z2lucyhBYm91dFRvSW5zdGFudGlhdGVQbHVnaW4p
Ci0gICAgICAgICAgICAgLy8gQXBwbGljYXRpb24gcGx1Z2lucyBhcmUgcGx1Z2lucyBpbXBsZW1l
bnRlZCBieSB0aGUgdXNlciBhZ2VudCwgZm9yIGV4YW1wbGUgUXQgcGx1Z2lucywKLSAgICAgICAg
ICAgICAvLyBhcyBvcHBvc2VkIHRvIHRoaXJkLXBhcnR5IGNvZGUgc3VjaCBhcyBmbGFzaC4gVGhl
IHVzZXIgYWdlbnQgZGVjaWRlcyB3aGV0aGVyIG9yIG5vdCB0aGV5IGFyZQotICAgICAgICAgICAg
IC8vIHBlcm1pdHRlZCwgcmF0aGVyIHRoYW4gV2ViS2l0LgotICAgICAgICAgICAgICYmICFNSU1F
VHlwZVJlZ2lzdHJ5Ojppc0FwcGxpY2F0aW9uUGx1Z2luTUlNRVR5cGUobWltZVR5cGUpKQotICAg
ICAgICAgICAgfHwgKCFzZXR0aW5ncy0+aXNKYXZhRW5hYmxlZCgpICYmIE1JTUVUeXBlUmVnaXN0
cnk6OmlzSmF2YUFwcGxldE1JTUVUeXBlKG1pbWVUeXBlKSkpCi0gICAgICAgICAgICByZXR1cm4g
ZmFsc2U7Ci0gICAgICAgIGlmIChpc0RvY3VtZW50U2FuZGJveGVkKG1fZnJhbWUsIFNhbmRib3hQ
bHVnaW5zKSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgcmV0dXJuIGxvYWRQ
bHVnaW4ocmVuZGVyZXIsIGNvbXBsZXRlZFVSTCwgbWltZVR5cGUsIHBhcmFtTmFtZXMsIHBhcmFt
VmFsdWVzLCB1c2VGYWxsYmFjayk7Ci0gICAgfQotCi0gICAgQVNTRVJUKHJlbmRlcmVyLT5ub2Rl
KCktPmhhc1RhZ05hbWUob2JqZWN0VGFnKSB8fCByZW5kZXJlci0+bm9kZSgpLT5oYXNUYWdOYW1l
KGVtYmVkVGFnKSk7Ci0gICAgSFRNTFBsdWdJbkVsZW1lbnQqIGVsZW1lbnQgPSBzdGF0aWNfY2Fz
dDxIVE1MUGx1Z0luRWxlbWVudCo+KHJlbmRlcmVyLT5ub2RlKCkpOwotCi0gICAgLy8gSWYgdGhl
IHBsdWctaW4gZWxlbWVudCBhbHJlYWR5IGNvbnRhaW5zIGEgc3ViZnJhbWUsIHJlcXVlc3RGcmFt
ZSB3aWxsIHJlLXVzZSBpdC4gT3RoZXJ3aXNlLAotICAgIC8vIGl0IHdpbGwgY3JlYXRlIGEgbmV3
IGZyYW1lIGFuZCBzZXQgaXQgYXMgdGhlIFJlbmRlclBhcnQncyB3aWRnZXQsIGNhdXNpbmcgd2hh
dCB3YXMgcHJldmlvdXNseSAKLSAgICAvLyBpbiB0aGUgd2lkZ2V0IHRvIGJlIHRvcm4gZG93bi4K
LSAgICByZXR1cm4gcmVxdWVzdEZyYW1lKGVsZW1lbnQsIGNvbXBsZXRlZFVSTCwgZnJhbWVOYW1l
KTsKLX0KLQotYm9vbCBGcmFtZUxvYWRlcjo6c2hvdWxkVXNlUGx1Z2luKGNvbnN0IEtVUkwmIHVy
bCwgY29uc3QgU3RyaW5nJiBtaW1lVHlwZSwgYm9vbCBoYXNGYWxsYmFjaywgYm9vbCYgdXNlRmFs
bGJhY2spCi17Ci0gICAgaWYgKG1fY2xpZW50LT5zaG91bGRVc2VQbHVnaW5Eb2N1bWVudChtaW1l
VHlwZSkpIHsKLSAgICAgICAgdXNlRmFsbGJhY2sgPSBmYWxzZTsKLSAgICAgICAgcmV0dXJuIHRy
dWU7Ci0gICAgfQotCi0gICAgLy8gQWxsb3cgb3RoZXIgcGx1Zy1pbnMgdG8gd2luIG92ZXIgUXVp
Y2tUaW1lIGJlY2F1c2UgaWYgdGhlIHVzZXIgaGFzIGluc3RhbGxlZCBhIHBsdWctaW4gdGhhdAot
ICAgIC8vIGNhbiBoYW5kbGUgVElGRiAod2hpY2ggUXVpY2tUaW1lIGNhbiBhbHNvIGhhbmRsZSkg
dGhleSBwcm9iYWJseSBpbnRlbmRlZCB0byBvdmVycmlkZSBRVC4KLSAgICBpZiAobV9mcmFtZS0+
cGFnZSgpICYmIChtaW1lVHlwZSA9PSAiaW1hZ2UvdGlmZiIgfHwgbWltZVR5cGUgPT0gImltYWdl
L3RpZiIgfHwgbWltZVR5cGUgPT0gImltYWdlL3gtdGlmZiIpKSB7Ci0gICAgICAgIGNvbnN0IFBs
dWdpbkRhdGEqIHBsdWdpbkRhdGEgPSBtX2ZyYW1lLT5wYWdlKCktPnBsdWdpbkRhdGEoKTsKLSAg
ICAgICAgU3RyaW5nIHBsdWdpbk5hbWUgPSBwbHVnaW5EYXRhID8gcGx1Z2luRGF0YS0+cGx1Z2lu
TmFtZUZvck1pbWVUeXBlKG1pbWVUeXBlKSA6IFN0cmluZygpOwotICAgICAgICBpZiAoIXBsdWdp
bk5hbWUuaXNFbXB0eSgpICYmICFwbHVnaW5OYW1lLmNvbnRhaW5zKCJRdWlja1RpbWUiLCBmYWxz
ZSkpIAotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotICAgICAgICAKLSAgICBPYmpl
Y3RDb250ZW50VHlwZSBvYmplY3RUeXBlID0gbV9jbGllbnQtPm9iamVjdENvbnRlbnRUeXBlKHVy
bCwgbWltZVR5cGUpOwotICAgIC8vIElmIGFuIG9iamVjdCdzIGNvbnRlbnQgY2FuJ3QgYmUgaGFu
ZGxlZCBhbmQgaXQgaGFzIG5vIGZhbGxiYWNrLCBsZXQKLSAgICAvLyBpdCBiZSBoYW5kbGVkIGFz
IGEgcGx1Z2luIHRvIHNob3cgdGhlIGJyb2tlbiBwbHVnaW4gaWNvbi4KLSAgICB1c2VGYWxsYmFj
ayA9IG9iamVjdFR5cGUgPT0gT2JqZWN0Q29udGVudE5vbmUgJiYgaGFzRmFsbGJhY2s7Ci0gICAg
cmV0dXJuIG9iamVjdFR5cGUgPT0gT2JqZWN0Q29udGVudE5vbmUgfHwgb2JqZWN0VHlwZSA9PSBP
YmplY3RDb250ZW50TmV0c2NhcGVQbHVnaW4gfHwgb2JqZWN0VHlwZSA9PSBPYmplY3RDb250ZW50
T3RoZXJQbHVnaW47Ci19Ci0KIE9iamVjdENvbnRlbnRUeXBlIEZyYW1lTG9hZGVyOjpkZWZhdWx0
T2JqZWN0Q29udGVudFR5cGUoY29uc3QgS1VSTCYgdXJsLCBjb25zdCBTdHJpbmcmIG1pbWVUeXBl
SW4pCiB7CiAgICAgU3RyaW5nIG1pbWVUeXBlID0gbWltZVR5cGVJbjsKQEAgLTEyMTEsOTEgKzEw
NTcsNiBAQAogICAgIHJldHVybiBXZWJDb3JlOjpPYmplY3RDb250ZW50Tm9uZTsKIH0KIAotc3Rh
dGljIEhUTUxQbHVnSW5FbGVtZW50KiB0b1BsdWdJbkVsZW1lbnQoTm9kZSogbm9kZSkKLXsKLSAg
ICBpZiAoIW5vZGUpCi0gICAgICAgIHJldHVybiAwOwotCi0gICAgQVNTRVJUKG5vZGUtPmhhc1Rh
Z05hbWUob2JqZWN0VGFnKSB8fCBub2RlLT5oYXNUYWdOYW1lKGVtYmVkVGFnKSAKLSAgICAgICAg
fHwgbm9kZS0+aGFzVGFnTmFtZShhcHBsZXRUYWcpKTsKLQotICAgIHJldHVybiBzdGF0aWNfY2Fz
dDxIVE1MUGx1Z0luRWxlbWVudCo+KG5vZGUpOwotfQotICAgIAotYm9vbCBGcmFtZUxvYWRlcjo6
bG9hZFBsdWdpbihSZW5kZXJFbWJlZGRlZE9iamVjdCogcmVuZGVyZXIsIGNvbnN0IEtVUkwmIHVy
bCwgY29uc3QgU3RyaW5nJiBtaW1lVHlwZSwgCi0gICAgY29uc3QgVmVjdG9yPFN0cmluZz4mIHBh
cmFtTmFtZXMsIGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBwYXJhbVZhbHVlcywgYm9vbCB1c2VGYWxs
YmFjaykKLXsKLSAgICBSZWZQdHI8V2lkZ2V0PiB3aWRnZXQ7Ci0KLSAgICBpZiAocmVuZGVyZXIg
JiYgIXVzZUZhbGxiYWNrKSB7Ci0gICAgICAgIEhUTUxQbHVnSW5FbGVtZW50KiBlbGVtZW50ID0g
dG9QbHVnSW5FbGVtZW50KHJlbmRlcmVyLT5ub2RlKCkpOwotCi0gICAgICAgIGlmICghU2VjdXJp
dHlPcmlnaW46OmNhbkxvYWQodXJsLCBTdHJpbmcoKSwgZnJhbWUoKS0+ZG9jdW1lbnQoKSkpIHsK
LSAgICAgICAgICAgIEZyYW1lTG9hZGVyOjpyZXBvcnRMb2NhbExvYWRGYWlsZWQobV9mcmFtZSwg
dXJsLnN0cmluZygpKTsKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgfQotCi0g
ICAgICAgIGNoZWNrSWZSdW5JbnNlY3VyZUNvbnRlbnQobV9mcmFtZS0+ZG9jdW1lbnQoKS0+c2Vj
dXJpdHlPcmlnaW4oKSwgdXJsKTsKLQotICAgICAgICB3aWRnZXQgPSBtX2NsaWVudC0+Y3JlYXRl
UGx1Z2luKEludFNpemUocmVuZGVyZXItPmNvbnRlbnRXaWR0aCgpLCByZW5kZXJlci0+Y29udGVu
dEhlaWdodCgpKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbGVt
ZW50LCB1cmwsIHBhcmFtTmFtZXMsIHBhcmFtVmFsdWVzLCBtaW1lVHlwZSwKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX2ZyYW1lLT5kb2N1bWVudCgpLT5pc1BsdWdp
bkRvY3VtZW50KCkgJiYgIW1fY29udGFpbnNQbHVnSW5zKTsKLSAgICAgICAgaWYgKHdpZGdldCkg
ewotICAgICAgICAgICAgcmVuZGVyZXItPnNldFdpZGdldCh3aWRnZXQpOwotICAgICAgICAgICAg
bV9jb250YWluc1BsdWdJbnMgPSB0cnVlOwotCi0jaWYgRU5BQkxFKFBMVUdJTl9QUk9YWV9GT1Jf
VklERU8pCi0gICAgICAgICAgICByZW5kZXJlci0+bm9kZSgpLT5zZXROZWVkc1N0eWxlUmVjYWxj
KFN5bnRoZXRpY1N0eWxlQ2hhbmdlKTsKLSNlbmRpZgotICAgICAgICB9IGVsc2UKLSAgICAgICAg
ICAgIHJlbmRlcmVyLT5zZXRTaG93c01pc3NpbmdQbHVnaW5JbmRpY2F0b3IoKTsKLSAgICB9Ci0K
LSAgICByZXR1cm4gd2lkZ2V0ICE9IDA7Ci19Ci0KLSNpZiBFTkFCTEUoUExVR0lOX1BST1hZX0ZP
Ul9WSURFTykKLVBhc3NSZWZQdHI8V2lkZ2V0PiBGcmFtZUxvYWRlcjo6bG9hZE1lZGlhUGxheWVy
UHJveHlQbHVnaW4oTm9kZSogbm9kZSwgY29uc3QgS1VSTCYgdXJsLCAKLSAgICBjb25zdCBWZWN0
b3I8U3RyaW5nPiYgcGFyYW1OYW1lcywgY29uc3QgVmVjdG9yPFN0cmluZz4mIHBhcmFtVmFsdWVz
KQotewotICAgIEFTU0VSVChub2RlLT5oYXNUYWdOYW1lKHZpZGVvVGFnKSB8fCBub2RlLT5oYXNU
YWdOYW1lKGF1ZGlvVGFnKSk7Ci0KLSAgICBpZiAoIW1fZnJhbWUtPnNjcmlwdCgpLT54c3NBdWRp
dG9yKCktPmNhbkxvYWRPYmplY3QodXJsLnN0cmluZygpKSkKLSAgICAgICAgcmV0dXJuIDA7Ci0K
LSAgICBLVVJMIGNvbXBsZXRlZFVSTDsKLSAgICBpZiAoIXVybC5pc0VtcHR5KCkpCi0gICAgICAg
IGNvbXBsZXRlZFVSTCA9IGNvbXBsZXRlVVJMKHVybCk7Ci0KLSAgICBpZiAoIVNlY3VyaXR5T3Jp
Z2luOjpjYW5Mb2FkKGNvbXBsZXRlZFVSTCwgU3RyaW5nKCksIGZyYW1lKCktPmRvY3VtZW50KCkp
KSB7Ci0gICAgICAgIEZyYW1lTG9hZGVyOjpyZXBvcnRMb2NhbExvYWRGYWlsZWQobV9mcmFtZSwg
Y29tcGxldGVkVVJMLnN0cmluZygpKTsKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgfQotCi0gICAg
SFRNTE1lZGlhRWxlbWVudCogbWVkaWFFbGVtZW50ID0gc3RhdGljX2Nhc3Q8SFRNTE1lZGlhRWxl
bWVudCo+KG5vZGUpOwotICAgIFJlbmRlclBhcnQqIHJlbmRlcmVyID0gdG9SZW5kZXJQYXJ0KG5v
ZGUtPnJlbmRlcmVyKCkpOwotICAgIEludFNpemUgc2l6ZTsKLQotICAgIGlmIChyZW5kZXJlcikK
LSAgICAgICAgc2l6ZSA9IEludFNpemUocmVuZGVyZXItPmNvbnRlbnRXaWR0aCgpLCByZW5kZXJl
ci0+Y29udGVudEhlaWdodCgpKTsKLSAgICBlbHNlIGlmIChtZWRpYUVsZW1lbnQtPmlzVmlkZW8o
KSkKLSAgICAgICAgc2l6ZSA9IFJlbmRlclZpZGVvOjpkZWZhdWx0U2l6ZSgpOwotCi0gICAgY2hl
Y2tJZlJ1bkluc2VjdXJlQ29udGVudChtX2ZyYW1lLT5kb2N1bWVudCgpLT5zZWN1cml0eU9yaWdp
bigpLCBjb21wbGV0ZWRVUkwpOwotCi0gICAgUmVmUHRyPFdpZGdldD4gd2lkZ2V0ID0gbV9jbGll
bnQtPmNyZWF0ZU1lZGlhUGxheWVyUHJveHlQbHVnaW4oc2l6ZSwgbWVkaWFFbGVtZW50LCBjb21w
bGV0ZWRVUkwsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcmFt
TmFtZXMsIHBhcmFtVmFsdWVzLCAiYXBwbGljYXRpb24veC1tZWRpYS1lbGVtZW50LXByb3h5LXBs
dWdpbiIpOwotCi0gICAgaWYgKHdpZGdldCAmJiByZW5kZXJlcikgewotICAgICAgICByZW5kZXJl
ci0+c2V0V2lkZ2V0KHdpZGdldCk7Ci0gICAgICAgIG1fY29udGFpbnNQbHVnSW5zID0gdHJ1ZTsK
LSAgICAgICAgcmVuZGVyZXItPm5vZGUoKS0+c2V0TmVlZHNTdHlsZVJlY2FsYyhTeW50aGV0aWNT
dHlsZUNoYW5nZSk7Ci0gICAgfQotCi0gICAgcmV0dXJuIHdpZGdldCA/IHdpZGdldC5yZWxlYXNl
KCkgOiAwOwotfQotI2VuZGlmIC8vIEVOQUJMRShQTFVHSU5fUFJPWFlfRk9SX1ZJREVPKQotCiBT
dHJpbmcgRnJhbWVMb2FkZXI6Om91dGdvaW5nUmVmZXJyZXIoKSBjb25zdAogewogICAgIHJldHVy
biBtX291dGdvaW5nUmVmZXJyZXI7CkBAIC0xNTI0LDIwICsxMjg1LDYgQEAKICAgICAgICAgZnJh
bWUtPmxvYWRlcigpLT5tX2lzQ29tcGxldGUgPSBmYWxzZTsKIH0KIAotYm9vbCBGcmFtZUxvYWRl
cjo6YWxsb3dQbHVnaW5zKFJlYXNvbkZvckNhbGxpbmdBbGxvd1BsdWdpbnMgcmVhc29uKQotewot
ICAgIFNldHRpbmdzKiBzZXR0aW5ncyA9IG1fZnJhbWUtPnNldHRpbmdzKCk7Ci0gICAgYm9vbCBh
bGxvd2VkID0gbV9jbGllbnQtPmFsbG93UGx1Z2lucyhzZXR0aW5ncyAmJiBzZXR0aW5ncy0+YXJl
UGx1Z2luc0VuYWJsZWQoKSk7Ci0gICAgaWYgKCFhbGxvd2VkICYmIHJlYXNvbiA9PSBBYm91dFRv
SW5zdGFudGlhdGVQbHVnaW4pCi0gICAgICAgIG1fZnJhbWUtPmxvYWRlcigpLT5jbGllbnQoKS0+
ZGlkTm90QWxsb3dQbHVnaW5zKCk7Ci0gICAgcmV0dXJuIGFsbG93ZWQ7Ci19Ci0KLWJvb2wgRnJh
bWVMb2FkZXI6OmNvbnRhaW5zUGx1Z2lucygpIGNvbnN0IAoteyAKLSAgICByZXR1cm4gbV9jb250
YWluc1BsdWdJbnM7Ci19Ci0KIHZvaWQgRnJhbWVMb2FkZXI6OnByZXBhcmVGb3JMb2FkU3RhcnQo
KQogewogICAgIGlmIChQYWdlKiBwYWdlID0gbV9mcmFtZS0+cGFnZSgpKQpAQCAtMzY5Myw0MiAr
MzQ0MCw2IEBACiAgICAgICAgIGNoaWxkLT5sb2FkZXIoKS0+dXBkYXRlU2FuZGJveEZsYWdzKCk7
CiB9CiAKLVBhc3NSZWZQdHI8V2lkZ2V0PiBGcmFtZUxvYWRlcjo6Y3JlYXRlSmF2YUFwcGxldFdp
ZGdldChjb25zdCBJbnRTaXplJiBzaXplLCBIVE1MQXBwbGV0RWxlbWVudCogZWxlbWVudCwgY29u
c3QgSGFzaE1hcDxTdHJpbmcsIFN0cmluZz4mIGFyZ3MpCi17Ci0gICAgU3RyaW5nIGJhc2VVUkxT
dHJpbmc7Ci0gICAgU3RyaW5nIGNvZGVCYXNlVVJMU3RyaW5nOwotICAgIFZlY3RvcjxTdHJpbmc+
IHBhcmFtTmFtZXM7Ci0gICAgVmVjdG9yPFN0cmluZz4gcGFyYW1WYWx1ZXM7Ci0gICAgSGFzaE1h
cDxTdHJpbmcsIFN0cmluZz46OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IGFyZ3MuZW5kKCk7Ci0gICAg
Zm9yIChIYXNoTWFwPFN0cmluZywgU3RyaW5nPjo6Y29uc3RfaXRlcmF0b3IgaXQgPSBhcmdzLmJl
Z2luKCk7IGl0ICE9IGVuZDsgKytpdCkgewotICAgICAgICBpZiAoZXF1YWxJZ25vcmluZ0Nhc2Uo
aXQtPmZpcnN0LCAiYmFzZXVybCIpKQotICAgICAgICAgICAgYmFzZVVSTFN0cmluZyA9IGl0LT5z
ZWNvbmQ7Ci0gICAgICAgIGVsc2UgaWYgKGVxdWFsSWdub3JpbmdDYXNlKGl0LT5maXJzdCwgImNv
ZGViYXNlIikpCi0gICAgICAgICAgICBjb2RlQmFzZVVSTFN0cmluZyA9IGl0LT5zZWNvbmQ7Ci0g
ICAgICAgIHBhcmFtTmFtZXMuYXBwZW5kKGl0LT5maXJzdCk7Ci0gICAgICAgIHBhcmFtVmFsdWVz
LmFwcGVuZChpdC0+c2Vjb25kKTsKLSAgICB9Ci0KLSAgICBpZiAoIWNvZGVCYXNlVVJMU3RyaW5n
LmlzRW1wdHkoKSkgewotICAgICAgICBLVVJMIGNvZGVCYXNlVVJMID0gY29tcGxldGVVUkwoY29k
ZUJhc2VVUkxTdHJpbmcpOwotICAgICAgICBpZiAoIVNlY3VyaXR5T3JpZ2luOjpjYW5Mb2FkKGNv
ZGVCYXNlVVJMLCBTdHJpbmcoKSwgZWxlbWVudC0+ZG9jdW1lbnQoKSkpIHsKLSAgICAgICAgICAg
IEZyYW1lTG9hZGVyOjpyZXBvcnRMb2NhbExvYWRGYWlsZWQobV9mcmFtZSwgY29kZUJhc2VVUkwu
c3RyaW5nKCkpOwotICAgICAgICAgICAgcmV0dXJuIDA7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAg
ICBpZiAoYmFzZVVSTFN0cmluZy5pc0VtcHR5KCkpCi0gICAgICAgIGJhc2VVUkxTdHJpbmcgPSBt
X2ZyYW1lLT5kb2N1bWVudCgpLT5iYXNlVVJMKCkuc3RyaW5nKCk7Ci0gICAgS1VSTCBiYXNlVVJM
ID0gY29tcGxldGVVUkwoYmFzZVVSTFN0cmluZyk7Ci0KLSAgICBSZWZQdHI8V2lkZ2V0PiB3aWRn
ZXQgPSBtX2NsaWVudC0+Y3JlYXRlSmF2YUFwcGxldFdpZGdldChzaXplLCBlbGVtZW50LCBiYXNl
VVJMLCBwYXJhbU5hbWVzLCBwYXJhbVZhbHVlcyk7Ci0gICAgaWYgKCF3aWRnZXQpCi0gICAgICAg
IHJldHVybiAwOwotCi0gICAgbV9jb250YWluc1BsdWdJbnMgPSB0cnVlOwotICAgIHJldHVybiB3
aWRnZXQ7Ci19Ci0KIHZvaWQgRnJhbWVMb2FkZXI6OmRpZENoYW5nZVRpdGxlKERvY3VtZW50TG9h
ZGVyKiBsb2FkZXIpCiB7CiAgICAgbV9jbGllbnQtPmRpZENoYW5nZVRpdGxlKGxvYWRlcik7Cklu
ZGV4OiBXZWJDb3JlL2xvYWRlci9QbHVnaW5Eb2N1bWVudC5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2Vi
Q29yZS9sb2FkZXIvUGx1Z2luRG9jdW1lbnQuY3BwCShyZXZpc2lvbiA2MTE5NykKKysrIFdlYkNv
cmUvbG9hZGVyL1BsdWdpbkRvY3VtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTE5LDcgKzEx
OSw3IEBACiAKICAgICBpZiAoRnJhbWUqIGZyYW1lID0gbV9kb2MtPmZyYW1lKCkpIHsKICAgICAg
ICAgU2V0dGluZ3MqIHNldHRpbmdzID0gZnJhbWUtPnNldHRpbmdzKCk7Ci0gICAgICAgIGlmIChz
ZXR0aW5ncyAmJiBmcmFtZS0+bG9hZGVyKCktPmFsbG93UGx1Z2lucyhOb3RBYm91dFRvSW5zdGFu
dGlhdGVQbHVnaW4pKSB7CisgICAgICAgIGlmIChzZXR0aW5ncyAmJiBmcmFtZS0+bG9hZGVyKCkt
PnN1YmZyYW1lTG9hZGVyKCktPmFsbG93UGx1Z2lucyhOb3RBYm91dFRvSW5zdGFudGlhdGVQbHVn
aW4pKSB7CiAgICAgICAgICAgICBtX2RvYy0+dXBkYXRlTGF5b3V0KCk7CiAKICAgICAgICAgICAg
IGlmIChSZW5kZXJXaWRnZXQqIHJlbmRlcmVyID0gdG9SZW5kZXJXaWRnZXQobV9lbWJlZEVsZW1l
bnQtPnJlbmRlcmVyKCkpKSB7CkluZGV4OiBXZWJDb3JlL2xvYWRlci9TdWJmcmFtZUxvYWRlci5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFdlYkNvcmUvbG9hZGVyL1N1YmZyYW1lTG9hZGVyLmgJKHJldmlzaW9u
IDApCisrKyBXZWJDb3JlL2xvYWRlci9TdWJmcmFtZUxvYWRlci5oCShyZXZpc2lvbiAwKQpAQCAt
MCwwICsxLDkyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA2LCAyMDA3LCAyMDA4LCAyMDA5
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwOCwg
MjAwOSBUb3JjaCBNb2JpbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLiAoaHR0cDovL3d3dy50
b3JjaG1vYmlsZS5jb20vKQorICogQ29weXJpZ2h0IChDKSBSZXNlYXJjaCBJbiBNb3Rpb24gTGlt
aXRlZCAyMDA5LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCisgKiBhcmUgbWV0OgorICoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4gCisgKiAy
LiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4gCisgKiAz
LiAgTmVpdGhlciB0aGUgbmFtZSBvZiBBcHBsZSBDb21wdXRlciwgSW5jLiAoIkFwcGxlIikgbm9y
IHRoZSBuYW1lcyBvZgorICogICAgIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5k
b3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQKKyAqICAgICBmcm9tIHRoaXMgc29mdHdh
cmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uIAorICoKKyAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFT
IElTIiBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBE
SVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJF
IExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECisgKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFIE9GCisgKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgU3ViZnJhbWVMb2FkZXJf
aAorI2RlZmluZSBTdWJmcmFtZUxvYWRlcl9oCisKKyNpbmNsdWRlICJGcmFtZUxvYWRlclR5cGVz
LmgiCisjaW5jbHVkZSAiUGxhdGZvcm1TdHJpbmcuaCIKKyNpbmNsdWRlIDx3dGYvRm9yd2FyZC5o
PgorI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+CisjaW5jbHVkZSA8d3RmL05vbmNvcHlhYmxlLmg+
CisjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNz
IEF0b21pY1N0cmluZzsKK2NsYXNzIEZyYW1lOworY2xhc3MgRnJhbWVMb2FkZXJDbGllbnQ7Citj
bGFzcyBIVE1MQXBwbGV0RWxlbWVudDsKK2NsYXNzIEhUTUxGcmFtZU93bmVyRWxlbWVudDsKK2Ns
YXNzIEludFNpemU7CitjbGFzcyBLVVJMOworI2lmIEVOQUJMRShQTFVHSU5fUFJPWFlfRk9SX1ZJ
REVPKQorY2xhc3MgTm9kZTsKKyNlbmRpZgorY2xhc3MgUmVuZGVyRW1iZWRkZWRPYmplY3Q7Citj
bGFzcyBXaWRnZXQ7CisKKy8vIFRoaXMgaXMgYSBzbGlnaHQgbWlzbm9tZXIuIEl0IGhhbmRsZXMg
dGhlIGhpZ2hlciBsZXZlbCBsb2dpYyBvZiBsb2FkaW5nIGJvdGggc3ViZnJhbWVzIGFuZCBwbHVn
aW5zLgorY2xhc3MgU3ViZnJhbWVMb2FkZXIgOiBwdWJsaWMgTm9uY29weWFibGUgeworcHVibGlj
OgorICAgIFN1YmZyYW1lTG9hZGVyKEZyYW1lKik7CisKKyAgICB2b2lkIGNsZWFyKCk7CisKKyAg
ICBib29sIHJlcXVlc3RGcmFtZShIVE1MRnJhbWVPd25lckVsZW1lbnQqLCBjb25zdCBTdHJpbmcm
IHVybCwgY29uc3QgQXRvbWljU3RyaW5nJiBmcmFtZU5hbWUsIGJvb2wgbG9ja0hpc3RvcnkgPSB0
cnVlLCBib29sIGxvY2tCYWNrRm9yd2FyZExpc3QgPSB0cnVlKTsgICAgCisgICAgYm9vbCByZXF1
ZXN0T2JqZWN0KFJlbmRlckVtYmVkZGVkT2JqZWN0KiwgY29uc3QgU3RyaW5nJiB1cmwsIGNvbnN0
IEF0b21pY1N0cmluZyYgZnJhbWVOYW1lLAorICAgICAgICBjb25zdCBTdHJpbmcmIHNlcnZpY2VU
eXBlLCBjb25zdCBWZWN0b3I8U3RyaW5nPiYgcGFyYW1OYW1lcywgY29uc3QgVmVjdG9yPFN0cmlu
Zz4mIHBhcmFtVmFsdWVzKTsKKworI2lmIEVOQUJMRShQTFVHSU5fUFJPWFlfRk9SX1ZJREVPKQor
ICAgIFBhc3NSZWZQdHI8V2lkZ2V0PiBsb2FkTWVkaWFQbGF5ZXJQcm94eVBsdWdpbihOb2RlKiwg
Y29uc3QgS1VSTCYsIGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBwYXJhbU5hbWVzLCBjb25zdCBWZWN0
b3I8U3RyaW5nPiYgcGFyYW1WYWx1ZXMpOworI2VuZGlmCisKKyAgICBQYXNzUmVmUHRyPFdpZGdl
dD4gY3JlYXRlSmF2YUFwcGxldFdpZGdldChjb25zdCBJbnRTaXplJiwgSFRNTEFwcGxldEVsZW1l
bnQqLCBjb25zdCBIYXNoTWFwPFN0cmluZywgU3RyaW5nPiYgYXJncyk7CisKKyAgICBib29sIGFs
bG93UGx1Z2lucyhSZWFzb25Gb3JDYWxsaW5nQWxsb3dQbHVnaW5zKTsKKworICAgIGJvb2wgY29u
dGFpbnNQbHVnaW5zKCkgY29uc3QgeyByZXR1cm4gbV9jb250YWluc1BsdWdpbnM7IH0KKworcHJp
dmF0ZToKKyAgICBGcmFtZSogbG9hZFN1YmZyYW1lKEhUTUxGcmFtZU93bmVyRWxlbWVudCosIGNv
bnN0IEtVUkwmLCBjb25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0IFN0cmluZyYgcmVmZXJyZXIpOwor
ICAgIGJvb2wgbG9hZFBsdWdpbihSZW5kZXJFbWJlZGRlZE9iamVjdCosIGNvbnN0IEtVUkwmLCBj
b25zdCBTdHJpbmcmIG1pbWVUeXBlLAorICAgICAgICBjb25zdCBWZWN0b3I8U3RyaW5nPiYgcGFy
YW1OYW1lcywgY29uc3QgVmVjdG9yPFN0cmluZz4mIHBhcmFtVmFsdWVzLCBib29sIHVzZUZhbGxi
YWNrKTsKKworICAgIGJvb2wgc2hvdWxkVXNlUGx1Z2luKGNvbnN0IEtVUkwmLCBjb25zdCBTdHJp
bmcmIG1pbWVUeXBlLCBib29sIGhhc0ZhbGxiYWNrLCBib29sJiB1c2VGYWxsYmFjayk7CisKKyAg
ICBib29sIG1fY29udGFpbnNQbHVnaW5zOworICAgIEZyYW1lKiBtX2ZyYW1lOworCisgICAgS1VS
TCBjb21wbGV0ZVVSTChjb25zdCBTdHJpbmcmKSBjb25zdDsKK307CisKK30gLy8gbmFtZXNwYWNl
IFdlYkNvcmUKKworI2VuZGlmIC8vIFN1YmZyYW1lTG9hZGVyX2gKSW5kZXg6IFdlYkNvcmUvbG9h
ZGVyL0ZyYW1lTG9hZGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9sb2FkZXIvRnJhbWVMb2Fk
ZXIuaAkocmV2aXNpb24gNjExOTcpCisrKyBXZWJDb3JlL2xvYWRlci9GcmFtZUxvYWRlci5oCSh3
b3JraW5nIGNvcHkpCkBAIC00MCw2ICs0MCw3IEBACiAjaW5jbHVkZSAiUmVkaXJlY3RTY2hlZHVs
ZXIuaCIKICNpbmNsdWRlICJSZXNvdXJjZUxvYWROb3RpZmllci5oIgogI2luY2x1ZGUgIlJlc291
cmNlUmVxdWVzdC5oIgorI2luY2x1ZGUgIlN1YmZyYW1lTG9hZGVyLmgiCiAjaW5jbHVkZSAiVGhy
ZWFkYWJsZUxvYWRlci5oIgogI2luY2x1ZGUgIlRpbWVyLmgiCiAjaW5jbHVkZSA8d3RmL0Zvcndh
cmQuaD4KQEAgLTYwLDE3ICs2MSwxMCBAQAogY2xhc3MgRnJhbWU7CiBjbGFzcyBGcmFtZUxvYWRl
ckNsaWVudDsKIGNsYXNzIEhpc3RvcnlJdGVtOwotY2xhc3MgSFRNTEFwcGxldEVsZW1lbnQ7CiBj
bGFzcyBIVE1MRm9ybUVsZW1lbnQ7Ci1jbGFzcyBIVE1MRnJhbWVPd25lckVsZW1lbnQ7CiBjbGFz
cyBJY29uTG9hZGVyOwotY2xhc3MgSW50U2l6ZTsKIGNsYXNzIE5hdmlnYXRpb25BY3Rpb247Ci0j
aWYgRU5BQkxFKFBMVUdJTl9QUk9YWV9GT1JfVklERU8pCi1jbGFzcyBOb2RlOwotI2VuZGlmCiBj
bGFzcyBQcm90ZWN0aW9uU3BhY2U7Ci1jbGFzcyBSZW5kZXJFbWJlZGRlZE9iamVjdDsKIGNsYXNz
IFJlc291cmNlRXJyb3I7CiBjbGFzcyBSZXNvdXJjZUxvYWRlcjsKIGNsYXNzIFJlc291cmNlUmVz
cG9uc2U7CkBAIC04Miw3ICs3Niw2IEBACiBjbGFzcyBTaGFyZWRCdWZmZXI7CiBjbGFzcyBTdWJz
dGl0dXRlRGF0YTsKIGNsYXNzIFRleHRSZXNvdXJjZURlY29kZXI7Ci1jbGFzcyBXaWRnZXQ7CiAK
IHN0cnVjdCBGcmFtZUxvYWRSZXF1ZXN0Owogc3RydWN0IFdpbmRvd0ZlYXR1cmVzOwpAQCAtMTAy
LDYgKzk1LDcgQEAKICAgICBIaXN0b3J5Q29udHJvbGxlciogaGlzdG9yeSgpIGNvbnN0IHsgcmV0
dXJuICZtX2hpc3Rvcnk7IH0KICAgICBSZXNvdXJjZUxvYWROb3RpZmllciogbm90aWZpZXIoKSBj
b25zdCB7IHJldHVybiAmbV9ub3RpZmVyOyB9CiAgICAgRG9jdW1lbnRXcml0ZXIqIHdyaXRlcigp
IGNvbnN0IHsgcmV0dXJuICZtX3dyaXRlcjsgfQorICAgIFN1YmZyYW1lTG9hZGVyKiBzdWJmcmFt
ZUxvYWRlcigpIGNvbnN0IHsgcmV0dXJuICZtX3N1YmZyYW1lTG9hZGVyOyB9CiAKICAgICAvLyBG
SVhNRTogVGhpcyBpcyBub3QgY29vbCwgcGVvcGxlLiBUaGVyZSBhcmUgdG9vIG1hbnkgZGlmZmVy
ZW50IGZ1bmN0aW9ucyB0aGF0IGFsbCBzdGFydCBsb2Fkcy4KICAgICAvLyBXZSBzaG91bGQgYWlt
IHRvIGNvbnNvbGlkYXRlIHRoZXNlIGludG8gYSBzbWFsbGVyIHNldCBvZiBmdW5jdGlvbnMsIGFu
ZCB0cnkgdG8gcmV1c2UgbW9yZSBvZgpAQCAtMjIyLDcgKzIxNiw2IEBACiAKICAgICB2b2lkIGNo
YW5nZUxvY2F0aW9uKGNvbnN0IEtVUkwmLCBjb25zdCBTdHJpbmcmIHJlZmVycmVyLCBib29sIGxv
Y2tIaXN0b3J5ID0gdHJ1ZSwgYm9vbCBsb2NrQmFja0ZvcndhcmRMaXN0ID0gdHJ1ZSwgYm9vbCB1
c2VyR2VzdHVyZSA9IGZhbHNlLCBib29sIHJlZnJlc2ggPSBmYWxzZSk7CiAgICAgdm9pZCB1cmxT
ZWxlY3RlZChjb25zdCBLVVJMJiwgY29uc3QgU3RyaW5nJiB0YXJnZXQsIFBhc3NSZWZQdHI8RXZl
bnQ+LCBib29sIGxvY2tIaXN0b3J5LCBib29sIGxvY2tCYWNrRm9yd2FyZExpc3QsIGJvb2wgdXNl
ckdlc3R1cmUsIFJlZmVycmVyUG9saWN5KTsKLSAgICBib29sIHJlcXVlc3RGcmFtZShIVE1MRnJh
bWVPd25lckVsZW1lbnQqLCBjb25zdCBTdHJpbmcmIHVybCwgY29uc3QgQXRvbWljU3RyaW5nJiBm
cmFtZU5hbWUsIGJvb2wgbG9ja0hpc3RvcnkgPSB0cnVlLCBib29sIGxvY2tCYWNrRm9yd2FyZExp
c3QgPSB0cnVlKTsKIAogICAgIHZvaWQgc3VibWl0Rm9ybShjb25zdCBjaGFyKiBhY3Rpb24sIGNv
bnN0IFN0cmluZyYgdXJsLAogICAgICAgICBQYXNzUmVmUHRyPEZvcm1EYXRhPiwgY29uc3QgU3Ry
aW5nJiB0YXJnZXQsIGNvbnN0IFN0cmluZyYgY29udGVudFR5cGUsIGNvbnN0IFN0cmluZyYgYm91
bmRhcnksCkBAIC0yNDcsOCArMjQwLDYgQEAKICAgICB2b2lkIGhhbmRsZWRPbmxvYWRFdmVudHMo
KTsKICAgICBTdHJpbmcgdXNlckFnZW50KGNvbnN0IEtVUkwmKSBjb25zdDsKIAotICAgIFBhc3NS
ZWZQdHI8V2lkZ2V0PiBjcmVhdGVKYXZhQXBwbGV0V2lkZ2V0KGNvbnN0IEludFNpemUmLCBIVE1M
QXBwbGV0RWxlbWVudCosIGNvbnN0IEhhc2hNYXA8U3RyaW5nLCBTdHJpbmc+JiBhcmdzKTsKLQog
ICAgIHZvaWQgZGlzcGF0Y2hEaWRDbGVhcldpbmRvd09iamVjdEluV29ybGQoRE9NV3JhcHBlcldv
cmxkKik7CiAgICAgdm9pZCBkaXNwYXRjaERpZENsZWFyV2luZG93T2JqZWN0c0luQWxsV29ybGRz
KCk7CiAgICAgdm9pZCBkaXNwYXRjaERvY3VtZW50RWxlbWVudEF2YWlsYWJsZSgpOwpAQCAtMjg0
LDkgKzI3NSw2IEBACiAgICAgLy8gc2V0VVJMIGlzIGEgbG93LWxldmVsIHNldHRlciBhbmQgZG9l
cyBub3QgdHJpZ2dlciBsb2FkaW5nLgogICAgIHZvaWQgc2V0VVJMKGNvbnN0IEtVUkwmKTsKIAot
ICAgIGJvb2wgYWxsb3dQbHVnaW5zKFJlYXNvbkZvckNhbGxpbmdBbGxvd1BsdWdpbnMpOwotICAg
IGJvb2wgY29udGFpbnNQbHVnaW5zKCkgY29uc3Q7Ci0KICAgICB2b2lkIGxvYWREb25lKCk7CiAg
ICAgdm9pZCBmaW5pc2hlZFBhcnNpbmcoKTsKICAgICB2b2lkIGNoZWNrQ29tcGxldGVkKCk7CkBA
IC0yOTUsOSArMjgzLDYgQEAKIAogICAgIGJvb2wgaXNDb21wbGV0ZSgpIGNvbnN0OwogCi0gICAg
Ym9vbCByZXF1ZXN0T2JqZWN0KFJlbmRlckVtYmVkZGVkT2JqZWN0KiwgY29uc3QgU3RyaW5nJiB1
cmwsIGNvbnN0IEF0b21pY1N0cmluZyYgZnJhbWVOYW1lLAotICAgICAgICBjb25zdCBTdHJpbmcm
IHNlcnZpY2VUeXBlLCBjb25zdCBWZWN0b3I8U3RyaW5nPiYgcGFyYW1OYW1lcywgY29uc3QgVmVj
dG9yPFN0cmluZz4mIHBhcmFtVmFsdWVzKTsKLQogICAgIEtVUkwgY29tcGxldGVVUkwoY29uc3Qg
U3RyaW5nJiB1cmwpOwogCiAgICAgdm9pZCBjYW5jZWxBbmRDbGVhcigpOwpAQCAtMzI1LDEwICsz
MTAsNiBAQAogCiAgICAgdm9pZCBvcGVuKENhY2hlZEZyYW1lQmFzZSYpOwogCi0jaWYgRU5BQkxF
KFBMVUdJTl9QUk9YWV9GT1JfVklERU8pCi0gICAgUGFzc1JlZlB0cjxXaWRnZXQ+IGxvYWRNZWRp
YVBsYXllclByb3h5UGx1Z2luKE5vZGUqLCBjb25zdCBLVVJMJiwgY29uc3QgVmVjdG9yPFN0cmlu
Zz4mIHBhcmFtTmFtZXMsIGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBwYXJhbVZhbHVlcyk7Ci0jZW5k
aWYKLQogICAgIC8vIEZJWE1FOiBTaG91bGQgdGhlc2UgcmVhbGx5IGJlIHB1YmxpYz8KICAgICB2
b2lkIGNvbXBsZXRlZCgpOwogICAgIGJvb2wgYWxsQW5jZXN0b3JzQXJlQ29tcGxldGUoKSBjb25z
dDsgLy8gaW5jbHVkaW5nIHRoaXMKQEAgLTM1Myw2ICszMzQsOCBAQAogICAgIGJvb2wgcXVpY2tS
ZWRpcmVjdENvbWluZygpIGNvbnN0IHsgcmV0dXJuIG1fcXVpY2tSZWRpcmVjdENvbWluZzsgfQog
CiAgICAgYm9vbCBzaG91bGRDbG9zZSgpOworICAgIAorICAgIHZvaWQgc3RhcnRlZCgpOwogCiBw
cml2YXRlOgogICAgIGJvb2wgY2FuQ2FjaGVQYWdlQ29udGFpbmluZ1RoaXNGcmFtZSgpOwpAQCAt
MzYyLDEyICszNDUsNiBAQAogI2VuZGlmCiAKICAgICB2b2lkIGNoZWNrVGltZXJGaXJlZChUaW1l
cjxGcmFtZUxvYWRlcj4qKTsKLQotICAgIHZvaWQgc3RhcnRlZCgpOwotCi0gICAgYm9vbCBzaG91
bGRVc2VQbHVnaW4oY29uc3QgS1VSTCYsIGNvbnN0IFN0cmluZyYgbWltZVR5cGUsIGJvb2wgaGFz
RmFsbGJhY2ssIGJvb2wmIHVzZUZhbGxiYWNrKTsKLSAgICBib29sIGxvYWRQbHVnaW4oUmVuZGVy
RW1iZWRkZWRPYmplY3QqLCBjb25zdCBLVVJMJiwgY29uc3QgU3RyaW5nJiBtaW1lVHlwZSwKLSAg
ICAgICAgY29uc3QgVmVjdG9yPFN0cmluZz4mIHBhcmFtTmFtZXMsIGNvbnN0IFZlY3RvcjxTdHJp
bmc+JiBwYXJhbVZhbHVlcywgYm9vbCB1c2VGYWxsYmFjayk7CiAgICAgCiAgICAgdm9pZCBuYXZp
Z2F0ZVdpdGhpbkRvY3VtZW50KEhpc3RvcnlJdGVtKik7CiAgICAgdm9pZCBuYXZpZ2F0ZVRvRGlm
ZmVyZW50RG9jdW1lbnQoSGlzdG9yeUl0ZW0qLCBGcmFtZUxvYWRUeXBlKTsKQEAgLTQ0Myw4ICs0
MjAsNiBAQAogICAgIHZvaWQgZGV0YWNoQ2hpbGRyZW4oKTsKICAgICB2b2lkIGNsb3NlQW5kUmVt
b3ZlQ2hpbGQoRnJhbWUqKTsKIAotICAgIEZyYW1lKiBsb2FkU3ViZnJhbWUoSFRNTEZyYW1lT3du
ZXJFbGVtZW50KiwgY29uc3QgS1VSTCYsIGNvbnN0IFN0cmluZyYgbmFtZSwgY29uc3QgU3RyaW5n
JiByZWZlcnJlcik7Ci0KICAgICB2b2lkIGxvYWRJblNhbWVEb2N1bWVudChjb25zdCBLVVJMJiwg
U2VyaWFsaXplZFNjcmlwdFZhbHVlKiBzdGF0ZU9iamVjdCwgYm9vbCBpc05ld05hdmlnYXRpb24p
OwogCiAgICAgdm9pZCBwcm92aXNpb25hbExvYWRTdGFydGVkKCk7CkBAIC00NzAsNiArNDQ1LDcg
QEAKICAgICBtdXRhYmxlIEhpc3RvcnlDb250cm9sbGVyIG1faGlzdG9yeTsKICAgICBtdXRhYmxl
IFJlc291cmNlTG9hZE5vdGlmaWVyIG1fbm90aWZlcjsKICAgICBtdXRhYmxlIERvY3VtZW50V3Jp
dGVyIG1fd3JpdGVyOworICAgIG11dGFibGUgU3ViZnJhbWVMb2FkZXIgbV9zdWJmcmFtZUxvYWRl
cjsKIAogICAgIEZyYW1lU3RhdGUgbV9zdGF0ZTsKICAgICBGcmFtZUxvYWRUeXBlIG1fbG9hZFR5
cGU7CkBAIC01MTIsOCArNDg4LDYgQEAKICAgICBib29sIG1fbmVlZHNDbGVhcjsKICAgICBib29s
IG1fcmVjZWl2ZWREYXRhOwogCi0gICAgYm9vbCBtX2NvbnRhaW5zUGx1Z0luczsKLQogICAgIEtV
UkwgbV9zdWJtaXR0ZWRGb3JtVVJMOwogCiAgICAgVGltZXI8RnJhbWVMb2FkZXI+IG1fY2hlY2tU
aW1lcjsKSW5kZXg6IFdlYkNvcmUvbG9hZGVyL1N1YmZyYW1lTG9hZGVyLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBXZWJDb3JlL2xvYWRlci9TdWJmcmFtZUxvYWRlci5jcHAJKHJldmlzaW9uIDApCisrKyBX
ZWJDb3JlL2xvYWRlci9TdWJmcmFtZUxvYWRlci5jcHAJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEs
MzUxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA2LCAyMDA3LCAyMDA4LCAyMDA5LCAyMDEw
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwOCBO
b2tpYSBDb3Jwb3JhdGlvbiBhbmQvb3IgaXRzIHN1YnNpZGlhcnkoLWllcykKKyAqIENvcHlyaWdo
dCAoQykgMjAwOCwgMjAwOSBUb3JjaCBNb2JpbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLiAo
aHR0cDovL3d3dy50b3JjaG1vYmlsZS5jb20vKQorICogQ29weXJpZ2h0IChDKSAyMDA4IEFscCBU
b2tlciA8YWxwQGF0b2tlci5jb20+CisgKiBDb3B5cmlnaHQgKEMpIFJlc2VhcmNoIEluIE1vdGlv
biBMaW1pdGVkIDIwMDkuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLiAK
KyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLiAK
KyAqIDMuICBOZWl0aGVyIHRoZSBuYW1lIG9mIEFwcGxlIENvbXB1dGVyLCBJbmMuICgiQXBwbGUi
KSBub3IgdGhlIG5hbWVzIG9mCisgKiAgICAgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0
byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZAorICogICAgIGZyb20gdGhpcyBz
b2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4gCisgKgor
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9S
UyAiQVMgSVMiIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUK
KyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRP
UlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKKyAqIE9OIEFOWSBUSEVPUlkgT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisg
KiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UgT0YKKyAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5o
IgorI2luY2x1ZGUgIlN1YmZyYW1lTG9hZGVyLmgiCisKKyNpbmNsdWRlICJGcmFtZS5oIgorI2lu
Y2x1ZGUgIkZyYW1lTG9hZGVyQ2xpZW50LmgiCisjaW5jbHVkZSAiSFRNTEFwcGxldEVsZW1lbnQu
aCIKKyNpbmNsdWRlICJIVE1MRnJhbWVFbGVtZW50QmFzZS5oIgorI2lmIEVOQUJMRShQTFVHSU5f
UFJPWFlfRk9SX1ZJREVPKQorI2luY2x1ZGUgIkhUTUxNZWRpYUVsZW1lbnQuaCIKKyNlbmRpZgor
I2luY2x1ZGUgIkhUTUxOYW1lcy5oIgorI2luY2x1ZGUgIkhUTUxQbHVnSW5FbGVtZW50LmgiCisj
aW5jbHVkZSAiTUlNRVR5cGVSZWdpc3RyeS5oIgorI2luY2x1ZGUgIk5vZGUuaCIKKyNpbmNsdWRl
ICJQYWdlLmgiCisjaW5jbHVkZSAiUGx1Z2luRGF0YS5oIgorI2luY2x1ZGUgIlJlbmRlckVtYmVk
ZGVkT2JqZWN0LmgiCisjaWYgRU5BQkxFKFBMVUdJTl9QUk9YWV9GT1JfVklERU8pCisjaW5jbHVk
ZSAiUmVuZGVyVmlkZW8uaCIKKyNlbmRpZgorI2luY2x1ZGUgIlJlbmRlclZpZXcuaCIKKyNpbmNs
dWRlICJTZXR0aW5ncy5oIgorI2luY2x1ZGUgIlhTU0F1ZGl0b3IuaCIKKworbmFtZXNwYWNlIFdl
YkNvcmUgeworICAgIAordXNpbmcgbmFtZXNwYWNlIEhUTUxOYW1lczsKKworU3ViZnJhbWVMb2Fk
ZXI6OlN1YmZyYW1lTG9hZGVyKEZyYW1lKiBmcmFtZSkKKyAgICA6IG1fZnJhbWUoZnJhbWUpCit7
Cit9CisKK3N0YXRpYyBIVE1MUGx1Z0luRWxlbWVudCogdG9QbHVnSW5FbGVtZW50KE5vZGUqIG5v
ZGUpCit7CisgICAgaWYgKCFub2RlKQorICAgICAgICByZXR1cm4gMDsKKworICAgIEFTU0VSVChu
b2RlLT5oYXNUYWdOYW1lKG9iamVjdFRhZykgfHwgbm9kZS0+aGFzVGFnTmFtZShlbWJlZFRhZykg
fHwgbm9kZS0+aGFzVGFnTmFtZShhcHBsZXRUYWcpKTsKKworICAgIHJldHVybiBzdGF0aWNfY2Fz
dDxIVE1MUGx1Z0luRWxlbWVudCo+KG5vZGUpOworfQorCit2b2lkIFN1YmZyYW1lTG9hZGVyOjpj
bGVhcigpCit7CisgICAgbV9jb250YWluc1BsdWdpbnMgPSBmYWxzZTsKK30KKworYm9vbCBTdWJm
cmFtZUxvYWRlcjo6cmVxdWVzdEZyYW1lKEhUTUxGcmFtZU93bmVyRWxlbWVudCogb3duZXJFbGVt
ZW50LCBjb25zdCBTdHJpbmcmIHVybFN0cmluZywgY29uc3QgQXRvbWljU3RyaW5nJiBmcmFtZU5h
bWUsIGJvb2wgbG9ja0hpc3RvcnksIGJvb2wgbG9ja0JhY2tGb3J3YXJkTGlzdCkKK3sKKyAgICAv
LyBTdXBwb3J0IGZvciA8ZnJhbWUgc3JjPSJqYXZhc2NyaXB0OnN0cmluZyI+CisgICAgS1VSTCBz
Y3JpcHRVUkw7CisgICAgS1VSTCB1cmw7CisgICAgaWYgKHByb3RvY29sSXNKYXZhU2NyaXB0KHVy
bFN0cmluZykpIHsKKyAgICAgICAgc2NyaXB0VVJMID0gY29tcGxldGVVUkwodXJsU3RyaW5nKTsg
Ly8gY29tcGxldGVVUkwoKSBlbmNvZGVzIHRoZSBVUkwuCisgICAgICAgIHVybCA9IGJsYW5rVVJM
KCk7CisgICAgfSBlbHNlCisgICAgICAgIHVybCA9IGNvbXBsZXRlVVJMKHVybFN0cmluZyk7CisK
KyAgICBGcmFtZSogZnJhbWUgPSBvd25lckVsZW1lbnQtPmNvbnRlbnRGcmFtZSgpOworICAgIGlm
IChmcmFtZSkKKyAgICAgICAgZnJhbWUtPnJlZGlyZWN0U2NoZWR1bGVyKCktPnNjaGVkdWxlTG9j
YXRpb25DaGFuZ2UodXJsLnN0cmluZygpLCBtX2ZyYW1lLT5sb2FkZXIoKS0+b3V0Z29pbmdSZWZl
cnJlcigpLCBsb2NrSGlzdG9yeSwgbG9ja0JhY2tGb3J3YXJkTGlzdCwgbV9mcmFtZS0+bG9hZGVy
KCktPmlzUHJvY2Vzc2luZ1VzZXJHZXN0dXJlKCkpOworICAgIGVsc2UKKyAgICAgICAgZnJhbWUg
PSBsb2FkU3ViZnJhbWUob3duZXJFbGVtZW50LCB1cmwsIGZyYW1lTmFtZSwgbV9mcmFtZS0+bG9h
ZGVyKCktPm91dGdvaW5nUmVmZXJyZXIoKSk7CisgICAgCisgICAgaWYgKCFmcmFtZSkKKyAgICAg
ICAgcmV0dXJuIGZhbHNlOworCisgICAgaWYgKCFzY3JpcHRVUkwuaXNFbXB0eSgpKQorICAgICAg
ICBmcmFtZS0+c2NyaXB0KCktPmV4ZWN1dGVJZkphdmFTY3JpcHRVUkwoc2NyaXB0VVJMKTsKKwor
ICAgIHJldHVybiB0cnVlOworfQorCitib29sIFN1YmZyYW1lTG9hZGVyOjpyZXF1ZXN0T2JqZWN0
KFJlbmRlckVtYmVkZGVkT2JqZWN0KiByZW5kZXJlciwgY29uc3QgU3RyaW5nJiB1cmwsIGNvbnN0
IEF0b21pY1N0cmluZyYgZnJhbWVOYW1lLAorICAgIGNvbnN0IFN0cmluZyYgbWltZVR5cGUsIGNv
bnN0IFZlY3RvcjxTdHJpbmc+JiBwYXJhbU5hbWVzLCBjb25zdCBWZWN0b3I8U3RyaW5nPiYgcGFy
YW1WYWx1ZXMpCit7CisgICAgaWYgKHVybC5pc0VtcHR5KCkgJiYgbWltZVR5cGUuaXNFbXB0eSgp
KQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgCisgICAgaWYgKCFtX2ZyYW1lLT5zY3JpcHQo
KS0+eHNzQXVkaXRvcigpLT5jYW5Mb2FkT2JqZWN0KHVybCkpIHsKKyAgICAgICAgLy8gSXQgaXMg
dW5zYWZlIHRvIGhvbm9yIHRoZSByZXF1ZXN0IGZvciB0aGlzIG9iamVjdC4KKyAgICAgICAgcmV0
dXJuIGZhbHNlOworICAgIH0KKworICAgIEtVUkwgY29tcGxldGVkVVJMOworICAgIGlmICghdXJs
LmlzRW1wdHkoKSkKKyAgICAgICAgY29tcGxldGVkVVJMID0gY29tcGxldGVVUkwodXJsKTsKKwor
ICAgIGJvb2wgdXNlRmFsbGJhY2s7CisgICAgaWYgKHNob3VsZFVzZVBsdWdpbihjb21wbGV0ZWRV
UkwsIG1pbWVUeXBlLCByZW5kZXJlci0+aGFzRmFsbGJhY2tDb250ZW50KCksIHVzZUZhbGxiYWNr
KSkgeworICAgICAgICBTZXR0aW5ncyogc2V0dGluZ3MgPSBtX2ZyYW1lLT5zZXR0aW5ncygpOwor
ICAgICAgICBpZiAoKCFhbGxvd1BsdWdpbnMoQWJvdXRUb0luc3RhbnRpYXRlUGx1Z2luKQorICAg
ICAgICAgICAgIC8vIEFwcGxpY2F0aW9uIHBsdWdpbnMgYXJlIHBsdWdpbnMgaW1wbGVtZW50ZWQg
YnkgdGhlIHVzZXIgYWdlbnQsIGZvciBleGFtcGxlIFF0IHBsdWdpbnMsCisgICAgICAgICAgICAg
Ly8gYXMgb3Bwb3NlZCB0byB0aGlyZC1wYXJ0eSBjb2RlIHN1Y2ggYXMgZmxhc2guIFRoZSB1c2Vy
IGFnZW50IGRlY2lkZXMgd2hldGhlciBvciBub3QgdGhleSBhcmUKKyAgICAgICAgICAgICAvLyBw
ZXJtaXR0ZWQsIHJhdGhlciB0aGFuIFdlYktpdC4KKyAgICAgICAgICAgICAmJiAhTUlNRVR5cGVS
ZWdpc3RyeTo6aXNBcHBsaWNhdGlvblBsdWdpbk1JTUVUeXBlKG1pbWVUeXBlKSkKKyAgICAgICAg
ICAgIHx8ICghc2V0dGluZ3MtPmlzSmF2YUVuYWJsZWQoKSAmJiBNSU1FVHlwZVJlZ2lzdHJ5Ojpp
c0phdmFBcHBsZXRNSU1FVHlwZShtaW1lVHlwZSkpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OworICAgICAgICBpZiAobV9mcmFtZS0+ZG9jdW1lbnQoKSAmJiBtX2ZyYW1lLT5kb2N1bWVudCgp
LT5zZWN1cml0eU9yaWdpbigpLT5pc1NhbmRib3hlZChTYW5kYm94UGx1Z2lucykpCisgICAgICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIHJldHVybiBsb2FkUGx1Z2luKHJlbmRlcmVyLCBj
b21wbGV0ZWRVUkwsIG1pbWVUeXBlLCBwYXJhbU5hbWVzLCBwYXJhbVZhbHVlcywgdXNlRmFsbGJh
Y2spOworICAgIH0KKworICAgIEFTU0VSVChyZW5kZXJlci0+bm9kZSgpLT5oYXNUYWdOYW1lKG9i
amVjdFRhZykgfHwgcmVuZGVyZXItPm5vZGUoKS0+aGFzVGFnTmFtZShlbWJlZFRhZykpOworICAg
IEhUTUxQbHVnSW5FbGVtZW50KiBlbGVtZW50ID0gc3RhdGljX2Nhc3Q8SFRNTFBsdWdJbkVsZW1l
bnQqPihyZW5kZXJlci0+bm9kZSgpKTsKKworICAgIC8vIElmIHRoZSBwbHVnLWluIGVsZW1lbnQg
YWxyZWFkeSBjb250YWlucyBhIHN1YmZyYW1lLCByZXF1ZXN0RnJhbWUgd2lsbCByZS11c2UgaXQu
IE90aGVyd2lzZSwKKyAgICAvLyBpdCB3aWxsIGNyZWF0ZSBhIG5ldyBmcmFtZSBhbmQgc2V0IGl0
IGFzIHRoZSBSZW5kZXJQYXJ0J3Mgd2lkZ2V0LCBjYXVzaW5nIHdoYXQgd2FzIHByZXZpb3VzbHkg
CisgICAgLy8gaW4gdGhlIHdpZGdldCB0byBiZSB0b3JuIGRvd24uCisgICAgcmV0dXJuIHJlcXVl
c3RGcmFtZShlbGVtZW50LCBjb21wbGV0ZWRVUkwsIGZyYW1lTmFtZSk7Cit9CisKKworI2lmIEVO
QUJMRShQTFVHSU5fUFJPWFlfRk9SX1ZJREVPKQorUGFzc1JlZlB0cjxXaWRnZXQ+IEZyYW1lTG9h
ZGVyOjpsb2FkTWVkaWFQbGF5ZXJQcm94eVBsdWdpbihOb2RlKiBub2RlLCBjb25zdCBLVVJMJiB1
cmwsIAorICAgIGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBwYXJhbU5hbWVzLCBjb25zdCBWZWN0b3I8
U3RyaW5nPiYgcGFyYW1WYWx1ZXMpCit7CisgICAgQVNTRVJUKG5vZGUtPmhhc1RhZ05hbWUodmlk
ZW9UYWcpIHx8IG5vZGUtPmhhc1RhZ05hbWUoYXVkaW9UYWcpKTsKKworICAgIGlmICghbV9mcmFt
ZS0+c2NyaXB0KCktPnhzc0F1ZGl0b3IoKS0+Y2FuTG9hZE9iamVjdCh1cmwuc3RyaW5nKCkpKQor
ICAgICAgICByZXR1cm4gMDsKKworICAgIEtVUkwgY29tcGxldGVkVVJMOworICAgIGlmICghdXJs
LmlzRW1wdHkoKSkKKyAgICAgICAgY29tcGxldGVkVVJMID0gY29tcGxldGVVUkwodXJsKTsKKwor
ICAgIGlmICghU2VjdXJpdHlPcmlnaW46OmNhbkxvYWQoY29tcGxldGVkVVJMLCBTdHJpbmcoKSwg
ZnJhbWUoKS0+ZG9jdW1lbnQoKSkpIHsKKyAgICAgICAgRnJhbWVMb2FkZXI6OnJlcG9ydExvY2Fs
TG9hZEZhaWxlZChtX2ZyYW1lLCBjb21wbGV0ZWRVUkwuc3RyaW5nKCkpOworICAgICAgICByZXR1
cm4gMDsKKyAgICB9CisKKyAgICBIVE1MTWVkaWFFbGVtZW50KiBtZWRpYUVsZW1lbnQgPSBzdGF0
aWNfY2FzdDxIVE1MTWVkaWFFbGVtZW50Kj4obm9kZSk7CisgICAgUmVuZGVyUGFydCogcmVuZGVy
ZXIgPSB0b1JlbmRlclBhcnQobm9kZS0+cmVuZGVyZXIoKSk7CisgICAgSW50U2l6ZSBzaXplOwor
CisgICAgaWYgKHJlbmRlcmVyKQorICAgICAgICBzaXplID0gSW50U2l6ZShyZW5kZXJlci0+Y29u
dGVudFdpZHRoKCksIHJlbmRlcmVyLT5jb250ZW50SGVpZ2h0KCkpOworICAgIGVsc2UgaWYgKG1l
ZGlhRWxlbWVudC0+aXNWaWRlbygpKQorICAgICAgICBzaXplID0gUmVuZGVyVmlkZW86OmRlZmF1
bHRTaXplKCk7CisKKyAgICBtX2ZyYW1lLT5sb2FkZXIoKS0+Y2hlY2tJZlJ1bkluc2VjdXJlQ29u
dGVudChtX2ZyYW1lLT5kb2N1bWVudCgpLT5zZWN1cml0eU9yaWdpbigpLCBjb21wbGV0ZWRVUkwp
OworCisgICAgUmVmUHRyPFdpZGdldD4gd2lkZ2V0ID0gbV9mcmFtZS0+bG9hZGVyKCktPmNsaWVu
dCgpLT5jcmVhdGVNZWRpYVBsYXllclByb3h5UGx1Z2luKHNpemUsIG1lZGlhRWxlbWVudCwgY29t
cGxldGVkVVJMLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJh
bU5hbWVzLCBwYXJhbVZhbHVlcywgImFwcGxpY2F0aW9uL3gtbWVkaWEtZWxlbWVudC1wcm94eS1w
bHVnaW4iKTsKKworICAgIGlmICh3aWRnZXQgJiYgcmVuZGVyZXIpIHsKKyAgICAgICAgcmVuZGVy
ZXItPnNldFdpZGdldCh3aWRnZXQpOworICAgICAgICBtX2NvbnRhaW5zUGx1Z0lucyA9IHRydWU7
CisgICAgICAgIHJlbmRlcmVyLT5ub2RlKCktPnNldE5lZWRzU3R5bGVSZWNhbGMoU3ludGhldGlj
U3R5bGVDaGFuZ2UpOworICAgIH0KKworICAgIHJldHVybiB3aWRnZXQgPyB3aWRnZXQucmVsZWFz
ZSgpIDogMDsKK30KKyNlbmRpZiAvLyBFTkFCTEUoUExVR0lOX1BST1hZX0ZPUl9WSURFTykKKwor
UGFzc1JlZlB0cjxXaWRnZXQ+IFN1YmZyYW1lTG9hZGVyOjpjcmVhdGVKYXZhQXBwbGV0V2lkZ2V0
KGNvbnN0IEludFNpemUmIHNpemUsIEhUTUxBcHBsZXRFbGVtZW50KiBlbGVtZW50LCBjb25zdCBI
YXNoTWFwPFN0cmluZywgU3RyaW5nPiYgYXJncykKK3sKKyAgICBTdHJpbmcgYmFzZVVSTFN0cmlu
ZzsKKyAgICBTdHJpbmcgY29kZUJhc2VVUkxTdHJpbmc7CisgICAgVmVjdG9yPFN0cmluZz4gcGFy
YW1OYW1lczsKKyAgICBWZWN0b3I8U3RyaW5nPiBwYXJhbVZhbHVlczsKKyAgICBIYXNoTWFwPFN0
cmluZywgU3RyaW5nPjo6Y29uc3RfaXRlcmF0b3IgZW5kID0gYXJncy5lbmQoKTsKKyAgICBmb3Ig
KEhhc2hNYXA8U3RyaW5nLCBTdHJpbmc+Ojpjb25zdF9pdGVyYXRvciBpdCA9IGFyZ3MuYmVnaW4o
KTsgaXQgIT0gZW5kOyArK2l0KSB7CisgICAgICAgIGlmIChlcXVhbElnbm9yaW5nQ2FzZShpdC0+
Zmlyc3QsICJiYXNldXJsIikpCisgICAgICAgICAgICBiYXNlVVJMU3RyaW5nID0gaXQtPnNlY29u
ZDsKKyAgICAgICAgZWxzZSBpZiAoZXF1YWxJZ25vcmluZ0Nhc2UoaXQtPmZpcnN0LCAiY29kZWJh
c2UiKSkKKyAgICAgICAgICAgIGNvZGVCYXNlVVJMU3RyaW5nID0gaXQtPnNlY29uZDsKKyAgICAg
ICAgcGFyYW1OYW1lcy5hcHBlbmQoaXQtPmZpcnN0KTsKKyAgICAgICAgcGFyYW1WYWx1ZXMuYXBw
ZW5kKGl0LT5zZWNvbmQpOworICAgIH0KKworICAgIGlmICghY29kZUJhc2VVUkxTdHJpbmcuaXNF
bXB0eSgpKSB7CisgICAgICAgIEtVUkwgY29kZUJhc2VVUkwgPSBjb21wbGV0ZVVSTChjb2RlQmFz
ZVVSTFN0cmluZyk7CisgICAgICAgIGlmICghU2VjdXJpdHlPcmlnaW46OmNhbkxvYWQoY29kZUJh
c2VVUkwsIFN0cmluZygpLCBlbGVtZW50LT5kb2N1bWVudCgpKSkgeworICAgICAgICAgICAgRnJh
bWVMb2FkZXI6OnJlcG9ydExvY2FsTG9hZEZhaWxlZChtX2ZyYW1lLCBjb2RlQmFzZVVSTC5zdHJp
bmcoKSk7CisgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgfQorICAgIH0KKworICAgIGlm
IChiYXNlVVJMU3RyaW5nLmlzRW1wdHkoKSkKKyAgICAgICAgYmFzZVVSTFN0cmluZyA9IG1fZnJh
bWUtPmRvY3VtZW50KCktPmJhc2VVUkwoKS5zdHJpbmcoKTsKKyAgICBLVVJMIGJhc2VVUkwgPSBj
b21wbGV0ZVVSTChiYXNlVVJMU3RyaW5nKTsKKworICAgIFJlZlB0cjxXaWRnZXQ+IHdpZGdldCA9
IG1fZnJhbWUtPmxvYWRlcigpLT5jbGllbnQoKS0+Y3JlYXRlSmF2YUFwcGxldFdpZGdldChzaXpl
LCBlbGVtZW50LCBiYXNlVVJMLCBwYXJhbU5hbWVzLCBwYXJhbVZhbHVlcyk7CisgICAgaWYgKCF3
aWRnZXQpCisgICAgICAgIHJldHVybiAwOworCisgICAgbV9jb250YWluc1BsdWdpbnMgPSB0cnVl
OworICAgIHJldHVybiB3aWRnZXQ7Cit9CisKK0ZyYW1lKiBTdWJmcmFtZUxvYWRlcjo6bG9hZFN1
YmZyYW1lKEhUTUxGcmFtZU93bmVyRWxlbWVudCogb3duZXJFbGVtZW50LCBjb25zdCBLVVJMJiB1
cmwsIGNvbnN0IFN0cmluZyYgbmFtZSwgY29uc3QgU3RyaW5nJiByZWZlcnJlcikKK3sKKyAgICBi
b29sIGFsbG93c1Njcm9sbGluZyA9IHRydWU7CisgICAgaW50IG1hcmdpbldpZHRoID0gLTE7Cisg
ICAgaW50IG1hcmdpbkhlaWdodCA9IC0xOworICAgIGlmIChvd25lckVsZW1lbnQtPmhhc1RhZ05h
bWUoZnJhbWVUYWcpIHx8IG93bmVyRWxlbWVudC0+aGFzVGFnTmFtZShpZnJhbWVUYWcpKSB7Cisg
ICAgICAgIEhUTUxGcmFtZUVsZW1lbnRCYXNlKiBvID0gc3RhdGljX2Nhc3Q8SFRNTEZyYW1lRWxl
bWVudEJhc2UqPihvd25lckVsZW1lbnQpOworICAgICAgICBhbGxvd3NTY3JvbGxpbmcgPSBvLT5z
Y3JvbGxpbmdNb2RlKCkgIT0gU2Nyb2xsYmFyQWx3YXlzT2ZmOworICAgICAgICBtYXJnaW5XaWR0
aCA9IG8tPmdldE1hcmdpbldpZHRoKCk7CisgICAgICAgIG1hcmdpbkhlaWdodCA9IG8tPmdldE1h
cmdpbkhlaWdodCgpOworICAgIH0KKworICAgIGlmICghU2VjdXJpdHlPcmlnaW46OmNhbkxvYWQo
dXJsLCByZWZlcnJlciwgMCkpIHsKKyAgICAgICAgRnJhbWVMb2FkZXI6OnJlcG9ydExvY2FsTG9h
ZEZhaWxlZChtX2ZyYW1lLCB1cmwuc3RyaW5nKCkpOworICAgICAgICByZXR1cm4gMDsKKyAgICB9
CisKKyAgICBib29sIGhpZGVSZWZlcnJlciA9IFNlY3VyaXR5T3JpZ2luOjpzaG91bGRIaWRlUmVm
ZXJyZXIodXJsLCByZWZlcnJlcik7CisgICAgUmVmUHRyPEZyYW1lPiBmcmFtZSA9IG1fZnJhbWUt
PmxvYWRlcigpLT5jbGllbnQoKS0+Y3JlYXRlRnJhbWUodXJsLCBuYW1lLCBvd25lckVsZW1lbnQs
IGhpZGVSZWZlcnJlciA/IFN0cmluZygpIDogcmVmZXJyZXIsIGFsbG93c1Njcm9sbGluZywgbWFy
Z2luV2lkdGgsIG1hcmdpbkhlaWdodCk7CisKKyAgICBpZiAoIWZyYW1lKSAgeworICAgICAgICBt
X2ZyYW1lLT5sb2FkZXIoKS0+Y2hlY2tDYWxsSW1wbGljaXRDbG9zZSgpOworICAgICAgICByZXR1
cm4gMDsKKyAgICB9CisgICAgCisgICAgLy8gQWxsIG5ldyBmcmFtZXMgd2lsbCBoYXZlIG1faXND
b21wbGV0ZSBzZXQgdG8gdHJ1ZSBhdCB0aGlzIHBvaW50IGR1ZSB0byBzeW5jaHJvbm91c2x5IGxv
YWRpbmcKKyAgICAvLyBhbiBlbXB0eSBkb2N1bWVudCBpbiBGcmFtZUxvYWRlcjo6aW5pdCgpLiBC
dXQgbWFueSBmcmFtZXMgd2lsbCBub3cgYmUgc3RhcnRpbmcgYW4KKyAgICAvLyBhc3luY2hyb25v
dXMgbG9hZCBvZiB1cmwsIHNvIHdlIHNldCBtX2lzQ29tcGxldGUgdG8gZmFsc2UgYW5kIHRoZW4g
Y2hlY2sgaWYgdGhlIGxvYWQgaXMKKyAgICAvLyBhY3R1YWxseSBjb21wbGV0ZWQgYmVsb3cuIChO
b3RlIHRoYXQgd2Ugc2V0IG1faXNDb21wbGV0ZSB0byBmYWxzZSBldmVuIGZvciBzeW5jaHJvbm91
cworICAgIC8vIGxvYWRzLCBzbyB0aGF0IGNoZWNrQ29tcGxldGVkKCkgYmVsb3cgd29uJ3QgYmFp
bCBlYXJseS4pCisgICAgLy8gRklYTUU6IENhbiB3ZSByZW1vdmUgdGhpcyBlbnRpcmVseT8gbV9p
c0NvbXBsZXRlIG5vcm1hbGx5IGdldHMgc2V0IHRvIGZhbHNlIHdoZW4gYSBsb2FkIGlzIGNvbW1p
dHRlZC4KKyAgICBmcmFtZS0+bG9hZGVyKCktPnN0YXJ0ZWQoKTsKKyAgIAorICAgIFJlbmRlck9i
amVjdCogcmVuZGVyZXIgPSBvd25lckVsZW1lbnQtPnJlbmRlcmVyKCk7CisgICAgRnJhbWVWaWV3
KiB2aWV3ID0gZnJhbWUtPnZpZXcoKTsKKyAgICBpZiAocmVuZGVyZXIgJiYgcmVuZGVyZXItPmlz
V2lkZ2V0KCkgJiYgdmlldykKKyAgICAgICAgdG9SZW5kZXJXaWRnZXQocmVuZGVyZXIpLT5zZXRX
aWRnZXQodmlldyk7CisgICAgCisgICAgbV9mcmFtZS0+bG9hZGVyKCktPmNoZWNrQ2FsbEltcGxp
Y2l0Q2xvc2UoKTsKKyAgICAKKyAgICAvLyBTb21lIGxvYWRzIGFyZSBwZXJmb3JtZWQgc3luY2hy
b25vdXNseSAoZS5nLiwgYWJvdXQ6YmxhbmsgYW5kIGxvYWRzCisgICAgLy8gY2FuY2VsbGVkIGJ5
IHJldHVybmluZyBhIG51bGwgUmVzb3VyY2VSZXF1ZXN0IGZyb20gcmVxdWVzdEZyb21EZWxlZ2F0
ZSkuCisgICAgLy8gSW4gdGhlc2UgY2FzZXMsIHRoZSBzeW5jaHJvbm91cyBsb2FkIHdvdWxkIGhh
dmUgZmluaXNoZWQKKyAgICAvLyBiZWZvcmUgd2UgY291bGQgY29ubmVjdCB0aGUgc2lnbmFscywg
c28gbWFrZSBzdXJlIHRvIHNlbmQgdGhlIAorICAgIC8vIGNvbXBsZXRlZCgpIHNpZ25hbCBmb3Ig
dGhlIGNoaWxkIGJ5IGhhbmQgYW5kIG1hcmsgdGhlIGxvYWQgYXMgYmVpbmcKKyAgICAvLyBjb21w
bGV0ZS4KKyAgICAvLyBGSVhNRTogSW4gdGhpcyBjYXNlIHRoZSBGcmFtZSB3aWxsIGhhdmUgZmlu
aXNoZWQgbG9hZGluZyBiZWZvcmUgCisgICAgLy8gaXQncyBiZWluZyBhZGRlZCB0byB0aGUgY2hp
bGQgbGlzdC4gSXQgd291bGQgYmUgYSBnb29kIGlkZWEgdG8KKyAgICAvLyBjcmVhdGUgdGhlIGNo
aWxkIGZpcnN0LCB0aGVuIGludm9rZSB0aGUgbG9hZGVyIHNlcGFyYXRlbHkuCisgICAgaWYgKGZy
YW1lLT5sb2FkZXIoKS0+c3RhdGUoKSA9PSBGcmFtZVN0YXRlQ29tcGxldGUpCisgICAgICAgIGZy
YW1lLT5sb2FkZXIoKS0+Y2hlY2tDb21wbGV0ZWQoKTsKKworICAgIHJldHVybiBmcmFtZS5nZXQo
KTsKK30KKworYm9vbCBTdWJmcmFtZUxvYWRlcjo6YWxsb3dQbHVnaW5zKFJlYXNvbkZvckNhbGxp
bmdBbGxvd1BsdWdpbnMgcmVhc29uKQoreworICAgIFNldHRpbmdzKiBzZXR0aW5ncyA9IG1fZnJh
bWUtPnNldHRpbmdzKCk7CisgICAgYm9vbCBhbGxvd2VkID0gbV9mcmFtZS0+bG9hZGVyKCktPmNs
aWVudCgpLT5hbGxvd1BsdWdpbnMoc2V0dGluZ3MgJiYgc2V0dGluZ3MtPmFyZVBsdWdpbnNFbmFi
bGVkKCkpOworICAgIGlmICghYWxsb3dlZCAmJiByZWFzb24gPT0gQWJvdXRUb0luc3RhbnRpYXRl
UGx1Z2luKQorICAgICAgICBtX2ZyYW1lLT5sb2FkZXIoKS0+Y2xpZW50KCktPmRpZE5vdEFsbG93
UGx1Z2lucygpOworICAgIHJldHVybiBhbGxvd2VkOworfQorCisKK2Jvb2wgU3ViZnJhbWVMb2Fk
ZXI6OnNob3VsZFVzZVBsdWdpbihjb25zdCBLVVJMJiB1cmwsIGNvbnN0IFN0cmluZyYgbWltZVR5
cGUsIGJvb2wgaGFzRmFsbGJhY2ssIGJvb2wmIHVzZUZhbGxiYWNrKQoreworICAgIGlmIChtX2Zy
YW1lLT5sb2FkZXIoKS0+Y2xpZW50KCktPnNob3VsZFVzZVBsdWdpbkRvY3VtZW50KG1pbWVUeXBl
KSkgeworICAgICAgICB1c2VGYWxsYmFjayA9IGZhbHNlOworICAgICAgICByZXR1cm4gdHJ1ZTsK
KyAgICB9CisKKyAgICAvLyBBbGxvdyBvdGhlciBwbHVnLWlucyB0byB3aW4gb3ZlciBRdWlja1Rp
bWUgYmVjYXVzZSBpZiB0aGUgdXNlciBoYXMgaW5zdGFsbGVkIGEgcGx1Zy1pbiB0aGF0CisgICAg
Ly8gY2FuIGhhbmRsZSBUSUZGICh3aGljaCBRdWlja1RpbWUgY2FuIGFsc28gaGFuZGxlKSB0aGV5
IHByb2JhYmx5IGludGVuZGVkIHRvIG92ZXJyaWRlIFFULgorICAgIGlmIChtX2ZyYW1lLT5wYWdl
KCkgJiYgKG1pbWVUeXBlID09ICJpbWFnZS90aWZmIiB8fCBtaW1lVHlwZSA9PSAiaW1hZ2UvdGlm
IiB8fCBtaW1lVHlwZSA9PSAiaW1hZ2UveC10aWZmIikpIHsKKyAgICAgICAgY29uc3QgUGx1Z2lu
RGF0YSogcGx1Z2luRGF0YSA9IG1fZnJhbWUtPnBhZ2UoKS0+cGx1Z2luRGF0YSgpOworICAgICAg
ICBTdHJpbmcgcGx1Z2luTmFtZSA9IHBsdWdpbkRhdGEgPyBwbHVnaW5EYXRhLT5wbHVnaW5OYW1l
Rm9yTWltZVR5cGUobWltZVR5cGUpIDogU3RyaW5nKCk7CisgICAgICAgIGlmICghcGx1Z2luTmFt
ZS5pc0VtcHR5KCkgJiYgIXBsdWdpbk5hbWUuY29udGFpbnMoIlF1aWNrVGltZSIsIGZhbHNlKSkg
CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisgICAgICAgIAorICAgIE9iamVjdENv
bnRlbnRUeXBlIG9iamVjdFR5cGUgPSBtX2ZyYW1lLT5sb2FkZXIoKS0+Y2xpZW50KCktPm9iamVj
dENvbnRlbnRUeXBlKHVybCwgbWltZVR5cGUpOworICAgIC8vIElmIGFuIG9iamVjdCdzIGNvbnRl
bnQgY2FuJ3QgYmUgaGFuZGxlZCBhbmQgaXQgaGFzIG5vIGZhbGxiYWNrLCBsZXQKKyAgICAvLyBp
dCBiZSBoYW5kbGVkIGFzIGEgcGx1Z2luIHRvIHNob3cgdGhlIGJyb2tlbiBwbHVnaW4gaWNvbi4K
KyAgICB1c2VGYWxsYmFjayA9IG9iamVjdFR5cGUgPT0gT2JqZWN0Q29udGVudE5vbmUgJiYgaGFz
RmFsbGJhY2s7CisgICAgcmV0dXJuIG9iamVjdFR5cGUgPT0gT2JqZWN0Q29udGVudE5vbmUgfHwg
b2JqZWN0VHlwZSA9PSBPYmplY3RDb250ZW50TmV0c2NhcGVQbHVnaW4gfHwgb2JqZWN0VHlwZSA9
PSBPYmplY3RDb250ZW50T3RoZXJQbHVnaW47Cit9CisgIAorYm9vbCBTdWJmcmFtZUxvYWRlcjo6
bG9hZFBsdWdpbihSZW5kZXJFbWJlZGRlZE9iamVjdCogcmVuZGVyZXIsIGNvbnN0IEtVUkwmIHVy
bCwgY29uc3QgU3RyaW5nJiBtaW1lVHlwZSwgCisgICAgY29uc3QgVmVjdG9yPFN0cmluZz4mIHBh
cmFtTmFtZXMsIGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBwYXJhbVZhbHVlcywgYm9vbCB1c2VGYWxs
YmFjaykKK3sKKyAgICBSZWZQdHI8V2lkZ2V0PiB3aWRnZXQ7CisKKyAgICBpZiAocmVuZGVyZXIg
JiYgIXVzZUZhbGxiYWNrKSB7CisgICAgICAgIEhUTUxQbHVnSW5FbGVtZW50KiBlbGVtZW50ID0g
dG9QbHVnSW5FbGVtZW50KHJlbmRlcmVyLT5ub2RlKCkpOworCisgICAgICAgIGlmICghU2VjdXJp
dHlPcmlnaW46OmNhbkxvYWQodXJsLCBTdHJpbmcoKSwgbV9mcmFtZS0+ZG9jdW1lbnQoKSkpIHsK
KyAgICAgICAgICAgIEZyYW1lTG9hZGVyOjpyZXBvcnRMb2NhbExvYWRGYWlsZWQobV9mcmFtZSwg
dXJsLnN0cmluZygpKTsKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorCisg
ICAgICAgIG1fZnJhbWUtPmxvYWRlcigpLT5jaGVja0lmUnVuSW5zZWN1cmVDb250ZW50KG1fZnJh
bWUtPmRvY3VtZW50KCktPnNlY3VyaXR5T3JpZ2luKCksIHVybCk7CisKKyAgICAgICAgd2lkZ2V0
ID0gbV9mcmFtZS0+bG9hZGVyKCktPmNsaWVudCgpLT5jcmVhdGVQbHVnaW4oSW50U2l6ZShyZW5k
ZXJlci0+Y29udGVudFdpZHRoKCksIHJlbmRlcmVyLT5jb250ZW50SGVpZ2h0KCkpLAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsZW1lbnQsIHVybCwgcGFyYW1OYW1l
cywgcGFyYW1WYWx1ZXMsIG1pbWVUeXBlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIG1fZnJhbWUtPmRvY3VtZW50KCktPmlzUGx1Z2luRG9jdW1lbnQoKSAmJiAhbV9j
b250YWluc1BsdWdpbnMpOworICAgICAgICBpZiAod2lkZ2V0KSB7CisgICAgICAgICAgICByZW5k
ZXJlci0+c2V0V2lkZ2V0KHdpZGdldCk7CisgICAgICAgICAgICBtX2NvbnRhaW5zUGx1Z2lucyA9
IHRydWU7CisKKyNpZiBFTkFCTEUoUExVR0lOX1BST1hZX0ZPUl9WSURFTykKKyAgICAgICAgICAg
IHJlbmRlcmVyLT5ub2RlKCktPnNldE5lZWRzU3R5bGVSZWNhbGMoU3ludGhldGljU3R5bGVDaGFu
Z2UpOworI2VuZGlmCisgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgcmVuZGVyZXItPnNldFNo
b3dzTWlzc2luZ1BsdWdpbkluZGljYXRvcigpOworICAgIH0KKworICAgIHJldHVybiB3aWRnZXQ7
Cit9CisKK0tVUkwgU3ViZnJhbWVMb2FkZXI6OmNvbXBsZXRlVVJMKGNvbnN0IFN0cmluZyYgdXJs
KSBjb25zdAoreworICAgIEFTU0VSVChtX2ZyYW1lLT5kb2N1bWVudCgpKTsKKyAgICByZXR1cm4g
bV9mcmFtZS0+ZG9jdW1lbnQoKS0+Y29tcGxldGVVUkwodXJsKTsKK30KKworfSAvLyBuYW1lc3Bh
Y2UgV2ViQ29yZQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>58818</attachid>
            <date>2010-06-15 14:21:01 -0700</date>
            <delta_ts>2010-06-18 08:56:58 -0700</delta_ts>
            <desc>Fix qt compile issue</desc>
            <filename>patch3.txt</filename>
            <type>text/plain</type>
            <size>29284</size>
            <attacher name="Nate Chapin">japhet</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA2MTIwOSkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsNjMgQEAKKzIwMTAtMDYtMTUgIE5hdGUgQ2hhcGluICA8amFwaGV0QGNocm9taXVt
Lm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBJ
ZiBhbiBpbWFnZSBsb2FkIGlzIHN0YXJ0ZWQgZHVyaW5nIGFuIHVubG9hZCBvciBiZWZvcmV1bmxv
YWQgZXZlbnQsIHJ1biBpdAorICAgICAgICBhc3luY2hyb25vdXNseSAoYW5kIGFsbG93IGl0IHRv
IG91dGxpdmUgaXRzIHBhZ2UpIHNvIG5hdmlnYXRpb24gY2FuIGNvbnRpbnVlIAorICAgICAgICB3
aGlsZSB0aGUgbG9hZCBjb21wbGV0ZXMuCisKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTMwNDU3CisKKyAgICAgICAgVGVzdHM6IGh0dHAvdGVzdHMvbmF2
aWdhdGlvbi9pbWFnZS1sb2FkLWluLWJlZm9yZXVubG9hZC1oYW5kbGVyLmh0bWwKKyAgICAgICAg
ICAgICAgIGh0dHAvdGVzdHMvbmF2aWdhdGlvbi9pbWFnZS1sb2FkLWluLXVubG9hZC1oYW5kbGVy
Lmh0bWwKKworICAgICAgICAqIGxvYWRlci9DYWNoZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpD
YWNoZTo6cmVxdWVzdFVzZXJDU1NTdHlsZVNoZWV0KToKKyAgICAgICAgKiBsb2FkZXIvQ2FjaGVk
SW1hZ2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q2FjaGVkSW1hZ2U6OmxvYWQpOiBQZXJmb3Jt
IHRoZSBjaGVjayB0aGF0IGRlY2lkZXMgd2hldGhlciBhbgorICAgICAgICAgICAgaW1hZ2UgbG9h
ZCBzaG91bGQgYmUgcnVuIGFzeW5jaHJvbm91c2x5IHRocm91Z2ggbmF2aWdhdGlvbi4KKyAgICAg
ICAgKFdlYkNvcmU6OkNhY2hlZEltYWdlOjptYXhpbXVtRGVjb2RlZEltYWdlU2l6ZSk6IFVzZSBS
ZXF1ZXN0OjpmcmFtZSgpLgorICAgICAgICAqIGxvYWRlci9DYWNoZWRSZXNvdXJjZS5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpDYWNoZWRSZXNvdXJjZTo6bG9hZCk6IFBhc3MgT3V0bGl2ZVBhZ2VQ
b2xpY3kgdG8gbG9hZGVyLgorICAgICAgICAqIGxvYWRlci9DYWNoZWRSZXNvdXJjZS5oOgorICAg
ICAgICAqIGxvYWRlci9Eb2N1bWVudExvYWRlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpEb2N1
bWVudExvYWRlcjo6c2NoZWR1bGVBcmNoaXZlTG9hZCk6IEFsbG93IEZyYW1lOjpzZXR0aW5ncygp
IHRvIGJlIG5vbi1udWxsLAorICAgICAgICAgICAgIGFzIHdpbGwgb2Z0ZW4gYmUgdGhlIGNhc2Ug
aW4gb3V0bGl2aW5nIHBhZ2UgcmVxdWVzdHMuCisgICAgICAgICogbG9hZGVyL0RvY3VtZW50VGhy
ZWFkYWJsZUxvYWRlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpEb2N1bWVudFRocmVhZGFibGVM
b2FkZXI6OmxvYWRSZXF1ZXN0KToKKyAgICAgICAgKiBsb2FkZXIvRnJhbWVMb2FkZXIuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6RnJhbWVMb2FkZXI6OkZyYW1lTG9hZGVyKToKKyAgICAgICAgKFdl
YkNvcmU6OkZyYW1lTG9hZGVyOjpzZXREb2N1bWVudExvYWRlcik6IERvbid0IGFsbG93IG1fZG9j
dW1lbnRMb2FkZXIgdG8KKyAgICAgICAgICAgIGJlY29tZSBudWxsIGlmIGEgcmVxdWVzdCBpcyBp
biBwcm9ncmVzcyB0aGF0IG91dGxpdmVzIGl0cyBwYWdlLiBDcmVhdGUKKyAgICAgICAgICAgIGEg
ZHVtbXkgRG9jdW1lbnRMb2FkZXIgaW5zdGVhZC4KKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lTG9h
ZGVyOjpjaGVja0xvYWRDb21wbGV0ZSk6IE91dGxpdmluZyBsb2FkcyBtYXkgbm90IGhhdmUgYQor
ICAgICAgICAgICAgd2VidmlldyBhbnltb3JlLCBzbyBkb24ndCBBU1NFUlQgdGhhdCB0aGV5IGRv
LgorICAgICAgICAqIGxvYWRlci9GcmFtZUxvYWRlci5oOgorICAgICAgICAoV2ViQ29yZTo6RnJh
bWVMb2FkZXI6OmlzRGlzcGF0Y2hpbmdQYWdlRGlzbWlzc2FsRXZlbnQpOiBBZGRlZC4KKyAgICAg
ICAgKFdlYkNvcmU6OkZyYW1lTG9hZGVyOjppbmNyZW1lbnRPdXRsaXZlUGFnZVJlcXVlc3RDb3Vu
dCk6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVMb2FkZXI6OmRlY3JlbWVudE91dGxp
dmVQYWdlUmVxdWVzdENvdW50KTogQWRkZWQuCisgICAgICAgICogbG9hZGVyL0ZyYW1lTG9hZGVy
VHlwZXMuaDogQWRkIE91dGxpdmVQYWdlUG9saWN5IGVudW0uCisgICAgICAgICogbG9hZGVyL1Jl
cXVlc3QuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVxdWVzdDo6UmVxdWVzdCk6IEFkZCBPdXRs
aXZlUGFnZVBvbGljeSB0byBwYXJhbWV0ZXJzIGFuZCBjcmVhdGUgCisgICAgICAgICAgICBGcmFt
ZS9Eb2N1bWVudC9Eb2NMb2FkZXIgZHVtbWllcyBpZiB0aGUgcG9saWN5IHJlcXVpcmVzIGl0Lgor
ICAgICAgICAoV2ViQ29yZTo6UmVxdWVzdDo6flJlcXVlc3QpOiBDbGVhbiB1cCBhZnRlciBhbiBv
dXRsaXZpbmcgcGFnZSByZXF1ZXN0LgorICAgICAgICAoV2ViQ29yZTo6UmVxdWVzdDo6ZnJhbWUp
OiBSZXR1cm4gdGhlIGR1bW15IGZyYW1lIHdlJ3JlIGhvbGRpbmcgaWYgdGhpcyBpcworICAgICAg
ICAgICAgYW4gb3V0bGl2aW5nIHJlcXVlc3QsIGRlZmF1bHQgdG8gbV9kb2NMb2FkZXIoKS0+ZnJh
bWUoKSBvdGhlcndpc2UuCisgICAgICAgICogbG9hZGVyL1JlcXVlc3QuaDoKKyAgICAgICAgKFdl
YkNvcmU6OlJlcXVlc3Q6OmNhbk91dGxpdmVQYWdlKTogQWRkZWQuCisgICAgICAgICogbG9hZGVy
L1Jlc291cmNlTG9hZGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlc291cmNlTG9hZGVyOjpS
ZXNvdXJjZUxvYWRlcik6IEFsbG93IEZyYW1lOjpwYWdlKCkgdG8gYmUgbm9uLW51bGwsCisgICAg
ICAgICAgICAgYXMgd2lsbCBvZnRlbiBiZSB0aGUgY2FzZSBpbiBvdXRsaXZpbmcgcGFnZSByZXF1
ZXN0cy4KKyAgICAgICAgKFdlYkNvcmU6OlJlc291cmNlTG9hZGVyOjp3aWxsU2VuZFJlcXVlc3Qp
OiBBbGxvdyBGcmFtZTo6cGFnZSgpIHRvIGJlIG5vbi1udWxsLgorICAgICAgICAqIGxvYWRlci9T
dWJyZXNvdXJjZUxvYWRlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTdWJyZXNvdXJjZUxvYWRl
cjo6Y3JlYXRlKTogU2VwYXJhdGUgU2VjdXJpdHlDaGVja1BvbGljeSBmcm9tIE91dGxpdmVQYWdl
UG9saWN5LgorICAgICAgICAqIGxvYWRlci9TdWJyZXNvdXJjZUxvYWRlci5oOgorICAgICAgICAq
IGxvYWRlci9sb2FkZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6TG9hZGVyOjpsb2FkKTogVGFr
ZSBhbiBPdXRsaXZlUGFnZVBvbGljeSBwYXJhbWV0ZXIgdG8gZ2l2ZSB0byBSZXF1ZXN0LAorICAg
ICAgICAgICAgIGFuZCBlbnN1cmUgcmVxdWVzdHMgdGhhdCBvdXRsaXZlIHRoZWlyIHBhZ2UgYXJl
IGFsd2F5cyBydW4gYXN5bmNocm9ub3VzbHkuCisgICAgICAgIChXZWJDb3JlOjpMb2FkZXI6Okhv
c3Q6OnNlcnZlUGVuZGluZ1JlcXVlc3RzKTogUGFzcyBPdXRsaXZlUGFnZVBvbGljeSB0byBTdWJy
ZXNvdXJjZUxvYWRlci4KKyAgICAgICAgKiBsb2FkZXIvbG9hZGVyLmg6CisKIDIwMTAtMDYtMTUg
IFhhbiBMb3BleiAgPHhsb3BlekBpZ2FsaWEuY29tPgogCiAgICAgICAgIFRyeSB0byBmaXggR1RL
KyBidWlsZC4KSW5kZXg6IFdlYkNvcmUvbG9hZGVyL0ZyYW1lTG9hZGVyVHlwZXMuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBXZWJDb3JlL2xvYWRlci9GcmFtZUxvYWRlclR5cGVzLmgJKHJldmlzaW9uIDYxMjA5
KQorKysgV2ViQ29yZS9sb2FkZXIvRnJhbWVMb2FkZXJUeXBlcy5oCSh3b3JraW5nIGNvcHkpCkBA
IC04Miw2ICs4MiwxMSBAQAogICAgICAgICBPYmplY3RDb250ZW50T3RoZXJQbHVnaW4KICAgICB9
OwogICAgIAorICAgIGVudW0gT3V0bGl2ZVBhZ2VQb2xpY3kgeworICAgICAgICBEb05vdE91dGxp
dmVQYWdlLAorICAgICAgICBPdXRsaXZlUGFnZQorICAgIH07CisgICAgCiAgICAgZW51bSBVbmxv
YWRFdmVudFBvbGljeSB7CiAgICAgICAgIFVubG9hZEV2ZW50UG9saWN5Tm9uZSwKICAgICAgICAg
VW5sb2FkRXZlbnRQb2xpY3lVbmxvYWRPbmx5LApJbmRleDogV2ViQ29yZS9sb2FkZXIvbG9hZGVy
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9sb2FkZXIvbG9hZGVyLmgJKHJldmlzaW9uIDYxMjA5
KQorKysgV2ViQ29yZS9sb2FkZXIvbG9hZGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ0LDcgKzQ0
LDcgQEAKICAgICAgICAgTG9hZGVyKCk7CiAgICAgICAgIH5Mb2FkZXIoKTsKIAotICAgICAgICB2
b2lkIGxvYWQoRG9jTG9hZGVyKiwgQ2FjaGVkUmVzb3VyY2UqLCBib29sIGluY3JlbWVudGFsID0g
dHJ1ZSwgU2VjdXJpdHlDaGVja1BvbGljeSA9IERvU2VjdXJpdHlDaGVjaywgYm9vbCBzZW5kUmVz
b3VyY2VMb2FkQ2FsbGJhY2tzID0gdHJ1ZSk7CisgICAgICAgIHZvaWQgbG9hZChEb2NMb2FkZXIq
LCBDYWNoZWRSZXNvdXJjZSosIGJvb2wgaW5jcmVtZW50YWwgPSB0cnVlLCBTZWN1cml0eUNoZWNr
UG9saWN5ID0gRG9TZWN1cml0eUNoZWNrLCBPdXRsaXZlUGFnZVBvbGljeSA9IERvTm90T3V0bGl2
ZVBhZ2UsIGJvb2wgc2VuZFJlc291cmNlTG9hZENhbGxiYWNrcyA9IHRydWUpOwogCiAgICAgICAg
IHZvaWQgY2FuY2VsUmVxdWVzdHMoRG9jTG9hZGVyKik7CiAgICAgICAgIApJbmRleDogV2ViQ29y
ZS9sb2FkZXIvRnJhbWVMb2FkZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvbG9hZGVyL0Zy
YW1lTG9hZGVyLmNwcAkocmV2aXNpb24gNjEyMDkpCisrKyBXZWJDb3JlL2xvYWRlci9GcmFtZUxv
YWRlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIwMCw2ICsyMDAsNyBAQAogICAgICwgbV9kaWRD
YWxsSW1wbGljaXRDbG9zZShmYWxzZSkKICAgICAsIG1fd2FzVW5sb2FkRXZlbnRFbWl0dGVkKGZh
bHNlKQogICAgICwgbV9wYWdlRGlzbWlzc2FsRXZlbnRCZWluZ0Rpc3BhdGNoZWQoZmFsc2UpCisg
ICAgLCBtX291dGxpdmVQYWdlUmVxdWVzdENvdW50KDApCiAgICAgLCBtX2lzQ29tcGxldGUoZmFs
c2UpCiAgICAgLCBtX2lzTG9hZGluZ01haW5SZXNvdXJjZShmYWxzZSkKICAgICAsIG1fbmVlZHND
bGVhcihmYWxzZSkKQEAgLTIwODcsNyArMjA4OCwxMyBAQAogICAgIGlmIChtX2RvY3VtZW50TG9h
ZGVyKQogICAgICAgICBtX2RvY3VtZW50TG9hZGVyLT5kZXRhY2hGcm9tRnJhbWUoKTsKIAotICAg
IG1fZG9jdW1lbnRMb2FkZXIgPSBsb2FkZXI7CisgICAgLy8gSWYgdGhpcyBGcmFtZUxvYWRlciBp
cyBzdGlsbCByZWZlcnJlZCB0byBieSBhIFJlcXVlc3QgdGhhdCB3aWxsIG91dGxpdmUgdGhlIGN1
cnJlbnQgcGFnZSwgd2UgbmVlZAorICAgIC8vIHRvIGtlZXAgYSBub24tbnVsbCBEb2N1bWVudExv
YWRlci4KKyAgICBpZiAoIWxvYWRlciAmJiBtX291dGxpdmVQYWdlUmVxdWVzdENvdW50KSB7Cisg
ICAgICAgIG1fZG9jdW1lbnRMb2FkZXIgPSBEb2N1bWVudExvYWRlcjo6Y3JlYXRlKFJlc291cmNl
UmVxdWVzdCgpLCBTdWJzdGl0dXRlRGF0YSgpKTsKKyAgICAgICAgbV9kb2N1bWVudExvYWRlci0+
c2V0RnJhbWUobV9mcmFtZSk7CisgICAgfSBlbHNlCisgICAgICAgIG1fZG9jdW1lbnRMb2FkZXIg
PSBsb2FkZXI7CiB9CiAKIHZvaWQgRnJhbWVMb2FkZXI6OnNldFBvbGljeURvY3VtZW50TG9hZGVy
KERvY3VtZW50TG9hZGVyKiBsb2FkZXIpCkBAIC0yODQzLDggKzI4NTAsNiBAQAogLy8gQ2FsbGVk
IGV2ZXJ5IHRpbWUgYSByZXNvdXJjZSBpcyBjb21wbGV0ZWx5IGxvYWRlZCwgb3IgYW4gZXJyb3Ig
aXMgcmVjZWl2ZWQuCiB2b2lkIEZyYW1lTG9hZGVyOjpjaGVja0xvYWRDb21wbGV0ZSgpCiB7Ci0g
ICAgQVNTRVJUKG1fY2xpZW50LT5oYXNXZWJWaWV3KCkpOwotICAgIAogICAgIG1fc2hvdWxkQ2Fs
bENoZWNrTG9hZENvbXBsZXRlID0gZmFsc2U7CiAKICAgICAvLyBGSVhNRTogQWx3YXlzIHRyYXZl
cnNpbmcgdGhlIGVudGlyZSBmcmFtZSB0cmVlIGlzIGEgYml0IGluZWZmaWNpZW50LCBidXQgCklu
ZGV4OiBXZWJDb3JlL2xvYWRlci9DYWNoZWRSZXNvdXJjZS5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNv
cmUvbG9hZGVyL0NhY2hlZFJlc291cmNlLmgJKHJldmlzaW9uIDYxMjA5KQorKysgV2ViQ29yZS9s
b2FkZXIvQ2FjaGVkUmVzb3VyY2UuaAkod29ya2luZyBjb3B5KQpAQCAtNzcsOCArNzcsOCBAQAog
ICAgIENhY2hlZFJlc291cmNlKGNvbnN0IFN0cmluZyYgdXJsLCBUeXBlKTsKICAgICB2aXJ0dWFs
IH5DYWNoZWRSZXNvdXJjZSgpOwogICAgIAotICAgIHZpcnR1YWwgdm9pZCBsb2FkKERvY0xvYWRl
ciogZG9jTG9hZGVyKSAgeyBsb2FkKGRvY0xvYWRlciwgZmFsc2UsIERvU2VjdXJpdHlDaGVjaywg
dHJ1ZSk7IH0KLSAgICB2b2lkIGxvYWQoRG9jTG9hZGVyKiwgYm9vbCBpbmNyZW1lbnRhbCwgU2Vj
dXJpdHlDaGVja1BvbGljeSwgYm9vbCBzZW5kUmVzb3VyY2VMb2FkQ2FsbGJhY2tzKTsKKyAgICB2
aXJ0dWFsIHZvaWQgbG9hZChEb2NMb2FkZXIqIGRvY0xvYWRlcikgIHsgbG9hZChkb2NMb2FkZXIs
IGZhbHNlLCBEb1NlY3VyaXR5Q2hlY2ssIERvTm90T3V0bGl2ZVBhZ2UsIHRydWUpOyB9CisgICAg
dm9pZCBsb2FkKERvY0xvYWRlciosIGJvb2wgaW5jcmVtZW50YWwsIFNlY3VyaXR5Q2hlY2tQb2xp
Y3ksIE91dGxpdmVQYWdlUG9saWN5LCBib29sIHNlbmRSZXNvdXJjZUxvYWRDYWxsYmFja3MpOwog
CiAgICAgdmlydHVhbCB2b2lkIHNldEVuY29kaW5nKGNvbnN0IFN0cmluZyYpIHsgfQogICAgIHZp
cnR1YWwgU3RyaW5nIGVuY29kaW5nKCkgY29uc3QgeyByZXR1cm4gU3RyaW5nKCk7IH0KSW5kZXg6
IFdlYkNvcmUvbG9hZGVyL1JlcXVlc3QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2xvYWRlci9S
ZXF1ZXN0LmgJKHJldmlzaW9uIDYxMjA5KQorKysgV2ViQ29yZS9sb2FkZXIvUmVxdWVzdC5oCSh3
b3JraW5nIGNvcHkpCkBAIC0yNCwxNiArMjQsMTkgQEAKICNkZWZpbmUgUmVxdWVzdF9oCiAKICNp
bmNsdWRlICJGcmFtZUxvYWRlclR5cGVzLmgiCisjaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgogI2lu
Y2x1ZGUgPHd0Zi9WZWN0b3IuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCiAgICAgY2xhc3Mg
Q2FjaGVkUmVzb3VyY2U7CiAgICAgY2xhc3MgRG9jTG9hZGVyOworICAgIGNsYXNzIERvY3VtZW50
OworICAgIGNsYXNzIEZyYW1lOwogCiAgICAgY2xhc3MgUmVxdWVzdCA6IHB1YmxpYyBOb25jb3B5
YWJsZSB7CiAgICAgcHVibGljOgotICAgICAgICBSZXF1ZXN0KERvY0xvYWRlciosIENhY2hlZFJl
c291cmNlKiwgYm9vbCBpbmNyZW1lbnRhbCwgU2VjdXJpdHlDaGVja1BvbGljeSwgYm9vbCBzZW5k
UmVzb3VyY2VMb2FkQ2FsbGJhY2tzKTsKKyAgICAgICAgUmVxdWVzdChEb2NMb2FkZXIqLCBDYWNo
ZWRSZXNvdXJjZSosIGJvb2wgaW5jcmVtZW50YWwsIFNlY3VyaXR5Q2hlY2tQb2xpY3ksIE91dGxp
dmVQYWdlUG9saWN5LCBib29sIHNlbmRSZXNvdXJjZUxvYWRDYWxsYmFja3MpOwogICAgICAgICB+
UmVxdWVzdCgpOwogICAgICAgICAKICAgICAgICAgVmVjdG9yPGNoYXI+JiBidWZmZXIoKSB7IHJl
dHVybiBtX2J1ZmZlcjsgfQpAQCAtNDksNiArNTIsOSBAQAogICAgICAgICBTZWN1cml0eUNoZWNr
UG9saWN5IHNob3VsZERvU2VjdXJpdHlDaGVjaygpIGNvbnN0IHsgcmV0dXJuIG1fc2hvdWxkRG9T
ZWN1cml0eUNoZWNrOyB9CiAgICAgICAgIGJvb2wgc2VuZFJlc291cmNlTG9hZENhbGxiYWNrcygp
IGNvbnN0IHsgcmV0dXJuIG1fc2VuZFJlc291cmNlTG9hZENhbGxiYWNrczsgfQogICAgICAgICAK
KyAgICAgICAgT3V0bGl2ZVBhZ2VQb2xpY3kgY2FuT3V0bGl2ZVBhZ2UoKSBjb25zdCB7IHJldHVy
biBtX2ZyYW1lRm9yUmVxdWVzdFRoYXRDYW5PdXRsaXZlUGFnZSA/IE91dGxpdmVQYWdlIDogRG9O
b3RPdXRsaXZlUGFnZTsgfQorICAgICAgICBGcmFtZSogZnJhbWUoKSBjb25zdDsKKyAgICAgICAg
CiAgICAgcHJpdmF0ZToKICAgICAgICAgVmVjdG9yPGNoYXI+IG1fYnVmZmVyOwogICAgICAgICBD
YWNoZWRSZXNvdXJjZSogbV9vYmplY3Q7CkBAIC01Nyw2ICs2Myw4IEBACiAgICAgICAgIGJvb2wg
bV9tdWx0aXBhcnQ7CiAgICAgICAgIFNlY3VyaXR5Q2hlY2tQb2xpY3kgbV9zaG91bGREb1NlY3Vy
aXR5Q2hlY2s7CiAgICAgICAgIGJvb2wgbV9zZW5kUmVzb3VyY2VMb2FkQ2FsbGJhY2tzOworICAg
ICAgICBSZWZQdHI8RnJhbWU+IG1fZnJhbWVGb3JSZXF1ZXN0VGhhdENhbk91dGxpdmVQYWdlOwor
ICAgICAgICBSZWZQdHI8RG9jdW1lbnQ+IG1fZG9jdW1lbnRGb3JSZXF1ZXN0VGhhdENhbk91dGxp
dmVQYWdlOwogICAgIH07CiAKIH0gLy9uYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogV2ViQ29yZS9s
b2FkZXIvQ2FjaGVkSW1hZ2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvbG9hZGVyL0NhY2hl
ZEltYWdlLmNwcAkocmV2aXNpb24gNjEyMDkpCisrKyBXZWJDb3JlL2xvYWRlci9DYWNoZWRJbWFn
ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTgyLDkgKzgyLDE2IEBACiAKIHZvaWQgQ2FjaGVkSW1h
Z2U6OmxvYWQoRG9jTG9hZGVyKiBkb2NMb2FkZXIpCiB7Ci0gICAgaWYgKCFkb2NMb2FkZXIgfHwg
ZG9jTG9hZGVyLT5hdXRvTG9hZEltYWdlcygpKQotICAgICAgICBDYWNoZWRSZXNvdXJjZTo6bG9h
ZChkb2NMb2FkZXIsIHRydWUsIERvU2VjdXJpdHlDaGVjaywgdHJ1ZSk7Ci0gICAgZWxzZQorICAg
IGlmICghZG9jTG9hZGVyIHx8IGRvY0xvYWRlci0+YXV0b0xvYWRJbWFnZXMoKSkgeworICAgICAg
ICAvLyBJZiB3ZSBhcmUgbG9hZGluZyBhbiBpbWFnZSBkdXJpbmcgYW4gdW5sb2FkIGV2ZW50LCB3
ZSB3YW50IHRvIGFsbG93IHRoZSByZXF1ZXN0IHRvIG91dGxpdmUgdGhlIHBhZ2UKKyAgICAgICAg
Ly8gdGhhdCB3ZSBhcmUgbGVhdmluZy4gU29tZSBzaXRlcyByZWx5IG9uIGltYWdlIHJlcXVlc3Rz
IGluIGJlZm9yZXVubG9hZCBvciB1bmxvYWQgZXZlbnQgaGFuZGxlcnMgdG8gCisgICAgICAgIC8v
IHRyYWNrIHRpbWUgc3BlbnQgb24gdGhlIHBhZ2UuIFRoaXMgd2lsbCBhbGxvdyB0aGVtIHRvIGRv
IHRoZSB0cmFja2luZyB0aGF0IHRoZXkgYXJlIGdvaW5nIHRvIGRvIGFueXdheSwKKyAgICAgICAg
Ly8gYnV0IGFzeW5jaHJvbm91c2x5IHNvIHRoYXQgdGhleSBkb24ndCBzbG93IGRvd24gbmF2aWdh
dGlvbi4KKyAgICAgICAgT3V0bGl2ZVBhZ2VQb2xpY3kgb3V0bGl2ZVBhZ2VQb2xpY3kgPSBkb2NM
b2FkZXIgJiYgZG9jTG9hZGVyLT5mcmFtZSgpCisgICAgICAgICAgICAmJiBkb2NMb2FkZXItPmZy
YW1lKCktPmxvYWRlcigpLT5pc0Rpc3BhdGNoaW5nUGFnZURpc21pc3NhbEV2ZW50KCkKKyAgICAg
ICAgICAgID8gT3V0bGl2ZVBhZ2UgOiBEb05vdE91dGxpdmVQYWdlOworICAgICAgICBDYWNoZWRS
ZXNvdXJjZTo6bG9hZChkb2NMb2FkZXIsIHRydWUsIERvU2VjdXJpdHlDaGVjaywgb3V0bGl2ZVBh
Z2VQb2xpY3ksIHRydWUpOworICAgIH0gZWxzZQogICAgICAgICBzZXRMb2FkaW5nKGZhbHNlKTsK
IH0KIApAQCAtMjU0LDcgKzI2MSw3IEBACiAKIHNpemVfdCBDYWNoZWRJbWFnZTo6bWF4aW11bURl
Y29kZWRJbWFnZVNpemUoKQogewotICAgIEZyYW1lKiBmcmFtZSA9IG1fcmVxdWVzdCA/IG1fcmVx
dWVzdC0+ZG9jTG9hZGVyKCktPmZyYW1lKCkgOiAwOworICAgIEZyYW1lKiBmcmFtZSA9IG1fcmVx
dWVzdCA/IG1fcmVxdWVzdC0+ZnJhbWUoKSA6IDA7CiAgICAgaWYgKCFmcmFtZSkKICAgICAgICAg
cmV0dXJuIDA7CiAgICAgU2V0dGluZ3MqIHNldHRpbmdzID0gZnJhbWUtPnNldHRpbmdzKCk7Cklu
ZGV4OiBXZWJDb3JlL2xvYWRlci9SZXNvdXJjZUxvYWRlci5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2Vi
Q29yZS9sb2FkZXIvUmVzb3VyY2VMb2FkZXIuY3BwCShyZXZpc2lvbiA2MTIwOSkKKysrIFdlYkNv
cmUvbG9hZGVyL1Jlc291cmNlTG9hZGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjUsNyArNjUs
NyBAQAogICAgICwgbV9zZW5kUmVzb3VyY2VMb2FkQ2FsbGJhY2tzKHNlbmRSZXNvdXJjZUxvYWRD
YWxsYmFja3MpCiAgICAgLCBtX3Nob3VsZENvbnRlbnRTbmlmZihzaG91bGRDb250ZW50U25pZmYp
CiAgICAgLCBtX3Nob3VsZEJ1ZmZlckRhdGEodHJ1ZSkKLSAgICAsIG1fZGVmZXJzTG9hZGluZyhm
cmFtZS0+cGFnZSgpLT5kZWZlcnNMb2FkaW5nKCkpCisgICAgLCBtX2RlZmVyc0xvYWRpbmcoZnJh
bWUtPnBhZ2UoKSAmJiBmcmFtZS0+cGFnZSgpLT5kZWZlcnNMb2FkaW5nKCkpCiB7CiB9CiAKQEAg
LTIxNCw3ICsyMTQsNyBAQAogCiAgICAgaWYgKG1fc2VuZFJlc291cmNlTG9hZENhbGxiYWNrcykg
ewogICAgICAgICBpZiAoIW1faWRlbnRpZmllcikgewotICAgICAgICAgICAgbV9pZGVudGlmaWVy
ID0gbV9mcmFtZS0+cGFnZSgpLT5wcm9ncmVzcygpLT5jcmVhdGVVbmlxdWVJZGVudGlmaWVyKCk7
CisgICAgICAgICAgICBtX2lkZW50aWZpZXIgPSBtX2ZyYW1lLT5wYWdlKCkgPyBtX2ZyYW1lLT5w
YWdlKCktPnByb2dyZXNzKCktPmNyZWF0ZVVuaXF1ZUlkZW50aWZpZXIoKSA6IDA7CiAgICAgICAg
ICAgICBmcmFtZUxvYWRlcigpLT5ub3RpZmllcigpLT5hc3NpZ25JZGVudGlmaWVyVG9Jbml0aWFs
UmVxdWVzdChtX2lkZW50aWZpZXIsIGRvY3VtZW50TG9hZGVyKCksIHJlcXVlc3QpOwogICAgICAg
ICB9CiAKSW5kZXg6IFdlYkNvcmUvbG9hZGVyL0NhY2hlZFJlc291cmNlLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBXZWJDb3JlL2xvYWRlci9DYWNoZWRSZXNvdXJjZS5jcHAJKHJldmlzaW9uIDYxMjA5KQor
KysgV2ViQ29yZS9sb2FkZXIvQ2FjaGVkUmVzb3VyY2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0x
MDEsMTAgKzEwMSwxMCBAQAogICAgICAgICBtX2RvY0xvYWRlci0+cmVtb3ZlQ2FjaGVkUmVzb3Vy
Y2UodGhpcyk7CiB9CiAgICAgCi12b2lkIENhY2hlZFJlc291cmNlOjpsb2FkKERvY0xvYWRlciog
ZG9jTG9hZGVyLCBib29sIGluY3JlbWVudGFsLCBTZWN1cml0eUNoZWNrUG9saWN5IHNlY3VyaXR5
Q2hlY2ssIGJvb2wgc2VuZFJlc291cmNlTG9hZENhbGxiYWNrcykKK3ZvaWQgQ2FjaGVkUmVzb3Vy
Y2U6OmxvYWQoRG9jTG9hZGVyKiBkb2NMb2FkZXIsIGJvb2wgaW5jcmVtZW50YWwsIFNlY3VyaXR5
Q2hlY2tQb2xpY3kgc2VjdXJpdHlDaGVjaywgT3V0bGl2ZVBhZ2VQb2xpY3kgb3V0bGl2ZVBhZ2VQ
b2xpY3ksIGJvb2wgc2VuZFJlc291cmNlTG9hZENhbGxiYWNrcykKIHsKICAgICBtX3NlbmRSZXNv
dXJjZUxvYWRDYWxsYmFja3MgPSBzZW5kUmVzb3VyY2VMb2FkQ2FsbGJhY2tzOwotICAgIGNhY2hl
KCktPmxvYWRlcigpLT5sb2FkKGRvY0xvYWRlciwgdGhpcywgaW5jcmVtZW50YWwsIHNlY3VyaXR5
Q2hlY2ssIHNlbmRSZXNvdXJjZUxvYWRDYWxsYmFja3MpOworICAgIGNhY2hlKCktPmxvYWRlcigp
LT5sb2FkKGRvY0xvYWRlciwgdGhpcywgaW5jcmVtZW50YWwsIHNlY3VyaXR5Q2hlY2ssIG91dGxp
dmVQYWdlUG9saWN5LCBzZW5kUmVzb3VyY2VMb2FkQ2FsbGJhY2tzKTsKICAgICBtX2xvYWRpbmcg
PSB0cnVlOwogfQogCkluZGV4OiBXZWJDb3JlL2xvYWRlci9Eb2N1bWVudExvYWRlci5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gV2ViQ29yZS9sb2FkZXIvRG9jdW1lbnRMb2FkZXIuY3BwCShyZXZpc2lvbiA2
MTIwOSkKKysrIFdlYkNvcmUvbG9hZGVyL0RvY3VtZW50TG9hZGVyLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtNTcyLDcgKzU3Miw3IEBACiAKICAgICBpZiAoIXJlc291cmNlKSB7CiAgICAgICAgIC8v
IFdlYkFyY2hpdmVEZWJ1Z01vZGUgbWVhbnMgd2UgZmFpbCBsb2FkcyBpbnN0ZWFkIG9mIHRyeWlu
ZyB0byBmZXRjaCB0aGVtIGZyb20gdGhlIG5ldHdvcmsgaWYgdGhleSdyZSBub3QgaW4gdGhlIGFy
Y2hpdmUuCi0gICAgICAgIGJvb2wgc2hvdWxkRmFpbExvYWQgPSBtX2ZyYW1lLT5zZXR0aW5ncygp
LT53ZWJBcmNoaXZlRGVidWdNb2RlRW5hYmxlZCgpICYmIEFyY2hpdmVGYWN0b3J5Ojppc0FyY2hp
dmVNaW1lVHlwZShyZXNwb25zZU1JTUVUeXBlKCkpOworICAgICAgICBib29sIHNob3VsZEZhaWxM
b2FkID0gbV9mcmFtZS0+c2V0dGluZ3MoKSAmJiBtX2ZyYW1lLT5zZXR0aW5ncygpLT53ZWJBcmNo
aXZlRGVidWdNb2RlRW5hYmxlZCgpICYmIEFyY2hpdmVGYWN0b3J5Ojppc0FyY2hpdmVNaW1lVHlw
ZShyZXNwb25zZU1JTUVUeXBlKCkpOwogCiAgICAgICAgIGlmICghc2hvdWxkRmFpbExvYWQpCiAg
ICAgICAgICAgICByZXR1cm4gZmFsc2U7CkluZGV4OiBXZWJDb3JlL2xvYWRlci9TdWJyZXNvdXJj
ZUxvYWRlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9sb2FkZXIvU3VicmVzb3VyY2VMb2Fk
ZXIuY3BwCShyZXZpc2lvbiA2MTIwOSkKKysrIFdlYkNvcmUvbG9hZGVyL1N1YnJlc291cmNlTG9h
ZGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjEsMTggKzYxLDE4IEBACiAjZW5kaWYKIH0KIAot
UGFzc1JlZlB0cjxTdWJyZXNvdXJjZUxvYWRlcj4gU3VicmVzb3VyY2VMb2FkZXI6OmNyZWF0ZShG
cmFtZSogZnJhbWUsIFN1YnJlc291cmNlTG9hZGVyQ2xpZW50KiBjbGllbnQsIGNvbnN0IFJlc291
cmNlUmVxdWVzdCYgcmVxdWVzdCwgU2VjdXJpdHlDaGVja1BvbGljeSBzZWN1cml0eUNoZWNrLCBi
b29sIHNlbmRSZXNvdXJjZUxvYWRDYWxsYmFja3MsIGJvb2wgc2hvdWxkQ29udGVudFNuaWZmKQor
UGFzc1JlZlB0cjxTdWJyZXNvdXJjZUxvYWRlcj4gU3VicmVzb3VyY2VMb2FkZXI6OmNyZWF0ZShG
cmFtZSogZnJhbWUsIFN1YnJlc291cmNlTG9hZGVyQ2xpZW50KiBjbGllbnQsIGNvbnN0IFJlc291
cmNlUmVxdWVzdCYgcmVxdWVzdCwgU2VjdXJpdHlDaGVja1BvbGljeSBzZWN1cml0eUNoZWNrUG9s
aWN5LCBPdXRsaXZlUGFnZVBvbGljeSBvdXRsaXZlUGFnZVBvbGljeSwgYm9vbCBzZW5kUmVzb3Vy
Y2VMb2FkQ2FsbGJhY2tzLCBib29sIHNob3VsZENvbnRlbnRTbmlmZikKIHsKICAgICBpZiAoIWZy
YW1lKQogICAgICAgICByZXR1cm4gMDsKIAogICAgIEZyYW1lTG9hZGVyKiBmbCA9IGZyYW1lLT5s
b2FkZXIoKTsKLSAgICBpZiAoc2VjdXJpdHlDaGVjayA9PSBEb1NlY3VyaXR5Q2hlY2sgJiYgKGZs
LT5zdGF0ZSgpID09IEZyYW1lU3RhdGVQcm92aXNpb25hbCB8fCBmbC0+YWN0aXZlRG9jdW1lbnRM
b2FkZXIoKS0+aXNTdG9wcGluZygpKSkKKyAgICBpZiAob3V0bGl2ZVBhZ2VQb2xpY3kgPT0gRG9O
b3RPdXRsaXZlUGFnZSAmJiAoZmwtPnN0YXRlKCkgPT0gRnJhbWVTdGF0ZVByb3Zpc2lvbmFsIHx8
IGZsLT5hY3RpdmVEb2N1bWVudExvYWRlcigpLT5pc1N0b3BwaW5nKCkpKQogICAgICAgICByZXR1
cm4gMDsKIAogICAgIFJlc291cmNlUmVxdWVzdCBuZXdSZXF1ZXN0ID0gcmVxdWVzdDsKIAotICAg
IGlmIChzZWN1cml0eUNoZWNrID09IERvU2VjdXJpdHlDaGVjaworICAgIGlmIChzZWN1cml0eUNo
ZWNrUG9saWN5ID09IERvU2VjdXJpdHlDaGVjawogICAgICAgICAgICAgJiYgU2VjdXJpdHlPcmln
aW46OnJlc3RyaWN0QWNjZXNzVG9Mb2NhbCgpCiAgICAgICAgICAgICAmJiAhU2VjdXJpdHlPcmln
aW46OmNhbkxvYWQocmVxdWVzdC51cmwoKSwgU3RyaW5nKCksIGZyYW1lLT5kb2N1bWVudCgpKSkg
ewogICAgICAgICBGcmFtZUxvYWRlcjo6cmVwb3J0TG9jYWxMb2FkRmFpbGVkKGZyYW1lLCByZXF1
ZXN0LnVybCgpLnN0cmluZygpKTsKSW5kZXg6IFdlYkNvcmUvbG9hZGVyL0NhY2hlLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBXZWJDb3JlL2xvYWRlci9DYWNoZS5jcHAJKHJldmlzaW9uIDYxMjA5KQorKysg
V2ViQ29yZS9sb2FkZXIvQ2FjaGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNjcsNyArMTY3LDcg
QEAKICAgICAgICAgLy8gRklYTUU6IENhY2hlZFJlc291cmNlIHNob3VsZCBqdXN0IHVzZSBub3Jt
YWwgcmVmY291bnRpbmcgaW5zdGVhZC4KICAgICAgICAgdXNlclNoZWV0LT5zZXRJbkNhY2hlKHRy
dWUpOwogICAgICAgICAvLyBEb24ndCBsb2FkIGluY3JlbWVudGFsbHksIHNraXAgbG9hZCBjaGVj
a3MsIGRvbid0IHNlbmQgcmVzb3VyY2UgbG9hZCBjYWxsYmFja3MuCi0gICAgICAgIHVzZXJTaGVl
dC0+bG9hZChkb2NMb2FkZXIsIGZhbHNlLCBTa2lwU2VjdXJpdHlDaGVjaywgZmFsc2UpOworICAg
ICAgICB1c2VyU2hlZXQtPmxvYWQoZG9jTG9hZGVyLCBmYWxzZSwgU2tpcFNlY3VyaXR5Q2hlY2ss
IERvTm90T3V0bGl2ZVBhZ2UsIGZhbHNlKTsKICAgICAgICAgaWYgKCFkaXNhYmxlZCgpKQogICAg
ICAgICAgICAgbV9yZXNvdXJjZXMuc2V0KHVybCwgdXNlclNoZWV0KTsKICAgICAgICAgZWxzZQpJ
bmRleDogV2ViQ29yZS9sb2FkZXIvbG9hZGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2xv
YWRlci9sb2FkZXIuY3BwCShyZXZpc2lvbiA2MTIwOSkKKysrIFdlYkNvcmUvbG9hZGVyL2xvYWRl
ci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTExOCwxMCArMTE4LDEwIEBACiAjZW5kaWYKIH0KIAot
dm9pZCBMb2FkZXI6OmxvYWQoRG9jTG9hZGVyKiBkb2NMb2FkZXIsIENhY2hlZFJlc291cmNlKiBy
ZXNvdXJjZSwgYm9vbCBpbmNyZW1lbnRhbCwgU2VjdXJpdHlDaGVja1BvbGljeSBzZWN1cml0eUNo
ZWNrLCBib29sIHNlbmRSZXNvdXJjZUxvYWRDYWxsYmFja3MpCit2b2lkIExvYWRlcjo6bG9hZChE
b2NMb2FkZXIqIGRvY0xvYWRlciwgQ2FjaGVkUmVzb3VyY2UqIHJlc291cmNlLCBib29sIGluY3Jl
bWVudGFsLCBTZWN1cml0eUNoZWNrUG9saWN5IHNlY3VyaXR5Q2hlY2ssIE91dGxpdmVQYWdlUG9s
aWN5IG91dGxpdmVQYWdlUG9saWN5LCBib29sIHNlbmRSZXNvdXJjZUxvYWRDYWxsYmFja3MpCiB7
CiAgICAgQVNTRVJUKGRvY0xvYWRlcik7Ci0gICAgUmVxdWVzdCogcmVxdWVzdCA9IG5ldyBSZXF1
ZXN0KGRvY0xvYWRlciwgcmVzb3VyY2UsIGluY3JlbWVudGFsLCBzZWN1cml0eUNoZWNrLCBzZW5k
UmVzb3VyY2VMb2FkQ2FsbGJhY2tzKTsKKyAgICBSZXF1ZXN0KiByZXF1ZXN0ID0gbmV3IFJlcXVl
c3QoZG9jTG9hZGVyLCByZXNvdXJjZSwgaW5jcmVtZW50YWwsIHNlY3VyaXR5Q2hlY2ssIG91dGxp
dmVQYWdlUG9saWN5LCBzZW5kUmVzb3VyY2VMb2FkQ2FsbGJhY2tzKTsKIAogICAgIFJlZlB0cjxI
b3N0PiBob3N0OwogICAgIEtVUkwgdXJsKFBhcnNlZFVSTFN0cmluZywgcmVzb3VyY2UtPnVybCgp
KTsKQEAgLTEzOSw5ICsxMzksMTEgQEAKICAgICBib29sIGhhZFJlcXVlc3RzID0gaG9zdC0+aGFz
UmVxdWVzdHMoKTsKICAgICBQcmlvcml0eSBwcmlvcml0eSA9IGRldGVybWluZVByaW9yaXR5KHJl
c291cmNlKTsKICAgICBob3N0LT5hZGRSZXF1ZXN0KHJlcXVlc3QsIHByaW9yaXR5KTsKLSAgICBk
b2NMb2FkZXItPmluY3JlbWVudFJlcXVlc3RDb3VudCgpOworICAgIHJlcXVlc3QtPmRvY0xvYWRl
cigpLT5pbmNyZW1lbnRSZXF1ZXN0Q291bnQoKTsKIAotICAgIGlmIChwcmlvcml0eSA+IExvdyB8
fCAhdXJsLnByb3RvY29sSW5IVFRQRmFtaWx5KCkgfHwgIWhhZFJlcXVlc3RzKSB7CisgICAgLy8g
V2Ugd2FudCB0byBndWFyYW50ZWUgdGhhdCByZXF1ZXN0cyB3aGljaCBvdXRsaXZlIHRoZSBwYWdl
IGFyZSBydW4gYXN5bmNocm9ub3VzbHksIHNvIG9ubHkKKyAgICAvLyBzZXJ2ZSB0aGUgcmVxdWVz
dCBpbW1lZGlhdGVseSBpZiB0aGUgcmVxdWVzdCBkb2Vzbid0IG5lZWQgdG8gb3V0bGl2ZSB0aGUg
cGFnZS4KKyAgICBpZiAocmVxdWVzdC0+Y2FuT3V0bGl2ZVBhZ2UoKSA9PSBEb05vdE91dGxpdmVQ
YWdlICYmIChwcmlvcml0eSA+IExvdyB8fCAhdXJsLnByb3RvY29sSW5IVFRQRmFtaWx5KCkgfHwg
IWhhZFJlcXVlc3RzKSkgewogICAgICAgICAvLyBUcnkgdG8gcmVxdWVzdCBpbXBvcnRhbnQgcmVz
b3VyY2VzIGltbWVkaWF0ZWx5CiAgICAgICAgIGhvc3QtPnNlcnZlUGVuZGluZ1JlcXVlc3RzKHBy
aW9yaXR5KTsKICAgICB9IGVsc2UgewpAQCAtMzYxLDggKzM2Myw4IEBACiAgICAgICAgICAgICB9
CiAgICAgICAgIH0KIAotICAgICAgICBSZWZQdHI8U3VicmVzb3VyY2VMb2FkZXI+IGxvYWRlciA9
IFN1YnJlc291cmNlTG9hZGVyOjpjcmVhdGUoZG9jTG9hZGVyLT5kb2MoKS0+ZnJhbWUoKSwKLSAg
ICAgICAgICAgIHRoaXMsIHJlc291cmNlUmVxdWVzdCwgcmVxdWVzdC0+c2hvdWxkRG9TZWN1cml0
eUNoZWNrKCksIHJlcXVlc3QtPnNlbmRSZXNvdXJjZUxvYWRDYWxsYmFja3MoKSk7CisgICAgICAg
IFJlZlB0cjxTdWJyZXNvdXJjZUxvYWRlcj4gbG9hZGVyID0gU3VicmVzb3VyY2VMb2FkZXI6OmNy
ZWF0ZShyZXF1ZXN0LT5mcmFtZSgpLAorICAgICAgICAgICAgdGhpcywgcmVzb3VyY2VSZXF1ZXN0
LCByZXF1ZXN0LT5zaG91bGREb1NlY3VyaXR5Q2hlY2soKSwgcmVxdWVzdC0+Y2FuT3V0bGl2ZVBh
Z2UoKSwgcmVxdWVzdC0+c2VuZFJlc291cmNlTG9hZENhbGxiYWNrcygpKTsKICAgICAgICAgaWYg
KGxvYWRlcikgewogICAgICAgICAgICAgbV9yZXF1ZXN0c0xvYWRpbmcuYWRkKGxvYWRlci5yZWxl
YXNlKCksIHJlcXVlc3QpOwogICAgICAgICAgICAgcmVxdWVzdC0+Y2FjaGVkUmVzb3VyY2UoKS0+
c2V0UmVxdWVzdGVkRnJvbU5ldHdvcmtpbmdMYXllcigpOwpJbmRleDogV2ViQ29yZS9sb2FkZXIv
RG9jdW1lbnRUaHJlYWRhYmxlTG9hZGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2xvYWRl
ci9Eb2N1bWVudFRocmVhZGFibGVMb2FkZXIuY3BwCShyZXZpc2lvbiA2MTIwOSkKKysrIFdlYkNv
cmUvbG9hZGVyL0RvY3VtZW50VGhyZWFkYWJsZUxvYWRlci5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTMxMCw3ICszMTAsNyBAQAogCiAgICAgICAgIC8vIENsZWFyIHRoZSBsb2FkZXIgc28gdGhhdCBh
bnkgY2FsbGJhY2tzIGZyb20gU3VicmVzb3VyY2VMb2FkZXI6OmNyZWF0ZSB3aWxsIG5vdCBoYXZl
IHRoZSBvbGQgbG9hZGVyLgogICAgICAgICBtX2xvYWRlciA9IDA7Ci0gICAgICAgIG1fbG9hZGVy
ID0gU3VicmVzb3VyY2VMb2FkZXI6OmNyZWF0ZShtX2RvY3VtZW50LT5mcmFtZSgpLCB0aGlzLCBy
ZXF1ZXN0LCBzZWN1cml0eUNoZWNrLCBzZW5kTG9hZENhbGxiYWNrcywgc25pZmZDb250ZW50KTsK
KyAgICAgICAgbV9sb2FkZXIgPSBTdWJyZXNvdXJjZUxvYWRlcjo6Y3JlYXRlKG1fZG9jdW1lbnQt
PmZyYW1lKCksIHRoaXMsIHJlcXVlc3QsIHNlY3VyaXR5Q2hlY2ssIERvTm90T3V0bGl2ZVBhZ2Us
IHNlbmRMb2FkQ2FsbGJhY2tzLCBzbmlmZkNvbnRlbnQpOwogICAgICAgICByZXR1cm47CiAgICAg
fQogICAgIApJbmRleDogV2ViQ29yZS9sb2FkZXIvRnJhbWVMb2FkZXIuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBXZWJDb3JlL2xvYWRlci9GcmFtZUxvYWRlci5oCShyZXZpc2lvbiA2MTIwOSkKKysrIFdlYkNv
cmUvbG9hZGVyL0ZyYW1lTG9hZGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTM0Myw2ICszNDMsMTAg
QEAKICAgICB2b2lkIGNvbnRpbnVlTG9hZEFmdGVyV2lsbFN1Ym1pdEZvcm0oKTsKICAgICAKICAg
ICBib29sIHN1cHByZXNzT3BlbmVySW5OZXdGcmFtZSgpIGNvbnN0IHsgcmV0dXJuIG1fc3VwcHJl
c3NPcGVuZXJJbk5ld0ZyYW1lOyB9CisgICAgCisgICAgYm9vbCBpc0Rpc3BhdGNoaW5nUGFnZURp
c21pc3NhbEV2ZW50KCkgY29uc3QgeyByZXR1cm4gbV9wYWdlRGlzbWlzc2FsRXZlbnRCZWluZ0Rp
c3BhdGNoZWQ7IH0KKyAgICB2b2lkIGluY3JlbWVudE91dGxpdmVQYWdlUmVxdWVzdENvdW50KCkg
eyBtX291dGxpdmVQYWdlUmVxdWVzdENvdW50Kys7IH0KKyAgICB2b2lkIGRlY3JlbWVudE91dGxp
dmVQYWdlUmVxdWVzdENvdW50KCkgeyBtX291dGxpdmVQYWdlUmVxdWVzdENvdW50LS07IH0KIAog
ICAgIHN0YXRpYyBPYmplY3RDb250ZW50VHlwZSBkZWZhdWx0T2JqZWN0Q29udGVudFR5cGUoY29u
c3QgS1VSTCYgdXJsLCBjb25zdCBTdHJpbmcmIG1pbWVUeXBlKTsKIApAQCAtMzU1LDEyICszNTks
NiBAQAogICAgIGJvb2wgc2hvdWxkQ2xvc2UoKTsKIAogcHJpdmF0ZToKLSAgICBib29sIGNhbkNh
Y2hlUGFnZUNvbnRhaW5pbmdUaGlzRnJhbWUoKTsKLSNpZm5kZWYgTkRFQlVHCi0gICAgdm9pZCBs
b2dDYW5DYWNoZVBhZ2VEZWNpc2lvbigpOwotICAgIGJvb2wgbG9nQ2FuQ2FjaGVGcmFtZURlY2lz
aW9uKGludCBpbmRlbnRMZXZlbCk7Ci0jZW5kaWYKLQogICAgIHZvaWQgY2hlY2tUaW1lckZpcmVk
KFRpbWVyPEZyYW1lTG9hZGVyPiopOwogCiAgICAgdm9pZCBzdGFydGVkKCk7CkBAIC00NDksOCAr
NDQ3LDYgQEAKIAogICAgIHZvaWQgcHJvdmlzaW9uYWxMb2FkU3RhcnRlZCgpOwogCi0gICAgYm9v
bCBjYW5DYWNoZVBhZ2UoKTsKLQogICAgIGJvb2wgZGlkT3BlblVSTChjb25zdCBLVVJMJik7CiAK
ICAgICB2b2lkIHNjaGVkdWxlQ2hlY2tDb21wbGV0ZWQoKTsKQEAgLTQ5Niw2ICs0OTIsNyBAQAog
ICAgIGJvb2wgbV9kaWRDYWxsSW1wbGljaXRDbG9zZTsKICAgICBib29sIG1fd2FzVW5sb2FkRXZl
bnRFbWl0dGVkOwogICAgIGJvb2wgbV9wYWdlRGlzbWlzc2FsRXZlbnRCZWluZ0Rpc3BhdGNoZWQ7
CisgICAgaW50IG1fb3V0bGl2ZVBhZ2VSZXF1ZXN0Q291bnQ7CiAgICAgYm9vbCBtX2lzQ29tcGxl
dGU7CiAgICAgYm9vbCBtX2lzTG9hZGluZ01haW5SZXNvdXJjZTsKIApJbmRleDogV2ViQ29yZS9s
b2FkZXIvUmVxdWVzdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9sb2FkZXIvUmVxdWVzdC5j
cHAJKHJldmlzaW9uIDYxMjA5KQorKysgV2ViQ29yZS9sb2FkZXIvUmVxdWVzdC5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTI1LDEwICsyNSwxMiBAQAogI2luY2x1ZGUgIlJlcXVlc3QuaCIKIAogI2lu
Y2x1ZGUgIkNhY2hlZFJlc291cmNlLmgiCisjaW5jbHVkZSAiRG9jTG9hZGVyLmgiCisjaW5jbHVk
ZSAiRnJhbWUuaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1SZXF1ZXN0OjpSZXF1ZXN0KERv
Y0xvYWRlciogZG9jTG9hZGVyLCBDYWNoZWRSZXNvdXJjZSogb2JqZWN0LCBib29sIGluY3JlbWVu
dGFsLCBTZWN1cml0eUNoZWNrUG9saWN5IHNob3VsZERvU2VjdXJpdHlDaGVjaywgYm9vbCBzZW5k
UmVzb3VyY2VMb2FkQ2FsbGJhY2tzKQorUmVxdWVzdDo6UmVxdWVzdChEb2NMb2FkZXIqIGRvY0xv
YWRlciwgQ2FjaGVkUmVzb3VyY2UqIG9iamVjdCwgYm9vbCBpbmNyZW1lbnRhbCwgU2VjdXJpdHlD
aGVja1BvbGljeSBzaG91bGREb1NlY3VyaXR5Q2hlY2ssIE91dGxpdmVQYWdlUG9saWN5IG91dGxp
dmVQYWdlUG9saWN5LCBib29sIHNlbmRSZXNvdXJjZUxvYWRDYWxsYmFja3MpCiAgICAgOiBtX29i
amVjdChvYmplY3QpCiAgICAgLCBtX2RvY0xvYWRlcihkb2NMb2FkZXIpCiAgICAgLCBtX2luY3Jl
bWVudGFsKGluY3JlbWVudGFsKQpAQCAtMzcsMTEgKzM5LDI3IEBACiAgICAgLCBtX3NlbmRSZXNv
dXJjZUxvYWRDYWxsYmFja3Moc2VuZFJlc291cmNlTG9hZENhbGxiYWNrcykKIHsKICAgICBtX29i
amVjdC0+c2V0UmVxdWVzdCh0aGlzKTsKKyAgICBpZiAob3V0bGl2ZVBhZ2VQb2xpY3kgPT0gT3V0
bGl2ZVBhZ2UpIHsKKyAgICAgICAgLy8gSWYgYSByZXF1ZXN0IG5lZWRzIHRvIHN1cnZpdmUgZG9j
dW1lbnQgZGV0YWNobWVudCBhbmQgbmF2aWdhdGlvbiwgd2UgbmVlZCB0byBrZWVwIHNvbWUgb2Jq
ZWN0cworICAgICAgICAvLyBhcm91bmQgYW5kIHJlZmNvdW50ZWQuIFdlIGtlZXAgYSBmcmFtZSwg
YW5kIGluc3RhbnRpYXRlIGEgZHVtbXkgRG9jdW1lbnQgYW5kIERvY0xvYWRlciBmb3IgdGhlIGxv
YWQuCisgICAgICAgIC8vIFRoaXMgYWxsb3dzIHRoZSBEb2NMb2FkZXIgcGFzc2VkIGluIHRvIGJl
IGNhbmNlbGxlZC9kZXN0cnVjdGVkIG5vcm1hbGx5LgorICAgICAgICBtX2ZyYW1lRm9yUmVxdWVz
dFRoYXRDYW5PdXRsaXZlUGFnZSA9IGRvY0xvYWRlci0+ZnJhbWUoKTsKKyAgICAgICAgbV9kb2N1
bWVudEZvclJlcXVlc3RUaGF0Q2FuT3V0bGl2ZVBhZ2UgPSBEb2N1bWVudDo6Y3JlYXRlKG1fZnJh
bWVGb3JSZXF1ZXN0VGhhdENhbk91dGxpdmVQYWdlLmdldCgpKTsKKyAgICAgICAgbV9kb2NMb2Fk
ZXIgPSBtX2RvY3VtZW50Rm9yUmVxdWVzdFRoYXRDYW5PdXRsaXZlUGFnZS0+ZG9jTG9hZGVyKCk7
CisgICAgICAgIG1fZnJhbWVGb3JSZXF1ZXN0VGhhdENhbk91dGxpdmVQYWdlLT5sb2FkZXIoKS0+
aW5jcmVtZW50T3V0bGl2ZVBhZ2VSZXF1ZXN0Q291bnQoKTsKKyAgICB9CiB9CiAKIFJlcXVlc3Q6
On5SZXF1ZXN0KCkKIHsKKyAgICBpZiAobV9mcmFtZUZvclJlcXVlc3RUaGF0Q2FuT3V0bGl2ZVBh
Z2UpCisgICAgICAgIG1fZnJhbWVGb3JSZXF1ZXN0VGhhdENhbk91dGxpdmVQYWdlLT5sb2FkZXIo
KS0+ZGVjcmVtZW50T3V0bGl2ZVBhZ2VSZXF1ZXN0Q291bnQoKTsKICAgICBtX29iamVjdC0+c2V0
UmVxdWVzdCgwKTsKIH0KKyAgICAKK0ZyYW1lKiBSZXF1ZXN0OjpmcmFtZSgpIGNvbnN0Cit7Cisg
ICAgcmV0dXJuIG1fZnJhbWVGb3JSZXF1ZXN0VGhhdENhbk91dGxpdmVQYWdlID8gbV9mcmFtZUZv
clJlcXVlc3RUaGF0Q2FuT3V0bGl2ZVBhZ2UuZ2V0KCkgOiBtX2RvY0xvYWRlci0+ZnJhbWUoKTsK
K30KIAogfSAvL25hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBXZWJDb3JlL2xvYWRlci9TdWJyZXNv
dXJjZUxvYWRlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvbG9hZGVyL1N1YnJlc291cmNlTG9h
ZGVyLmgJKHJldmlzaW9uIDYxMjA5KQorKysgV2ViQ29yZS9sb2FkZXIvU3VicmVzb3VyY2VMb2Fk
ZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMzAsNiArMzAsNyBAQAogI2RlZmluZSBTdWJyZXNvdXJj
ZUxvYWRlcl9oCiAKICNpbmNsdWRlICJGcmFtZUxvYWRlclR5cGVzLmgiCisjaW5jbHVkZSAiUmVx
dWVzdC5oIgogI2luY2x1ZGUgIlJlc291cmNlTG9hZGVyLmgiCiAgCiBuYW1lc3BhY2UgV2ViQ29y
ZSB7CkBAIC0zOSw3ICs0MCw3IEBACiAgICAgCiAgICAgY2xhc3MgU3VicmVzb3VyY2VMb2FkZXIg
OiBwdWJsaWMgUmVzb3VyY2VMb2FkZXIgewogICAgIHB1YmxpYzoKLSAgICAgICAgc3RhdGljIFBh
c3NSZWZQdHI8U3VicmVzb3VyY2VMb2FkZXI+IGNyZWF0ZShGcmFtZSosIFN1YnJlc291cmNlTG9h
ZGVyQ2xpZW50KiwgY29uc3QgUmVzb3VyY2VSZXF1ZXN0JiwgU2VjdXJpdHlDaGVja1BvbGljeSA9
IERvU2VjdXJpdHlDaGVjaywgYm9vbCBzZW5kUmVzb3VyY2VMb2FkQ2FsbGJhY2tzID0gdHJ1ZSwg
Ym9vbCBzaG91bGRDb250ZW50U25pZmYgPSB0cnVlKTsKKyAgICAgICAgc3RhdGljIFBhc3NSZWZQ
dHI8U3VicmVzb3VyY2VMb2FkZXI+IGNyZWF0ZShGcmFtZSosIFN1YnJlc291cmNlTG9hZGVyQ2xp
ZW50KiwgY29uc3QgUmVzb3VyY2VSZXF1ZXN0JiwgU2VjdXJpdHlDaGVja1BvbGljeSA9IERvU2Vj
dXJpdHlDaGVjaywgT3V0bGl2ZVBhZ2VQb2xpY3kgPSBEb05vdE91dGxpdmVQYWdlLCBib29sIHNl
bmRSZXNvdXJjZUxvYWRDYWxsYmFja3MgPSB0cnVlLCBib29sIHNob3VsZENvbnRlbnRTbmlmZiA9
IHRydWUpOwogCiAgICAgICAgIHZvaWQgY2xlYXJDbGllbnQoKSB7IG1fY2xpZW50ID0gMDsgfQog
CkluZGV4OiBMYXlvdXRUZXN0cy9odHRwL3Rlc3RzL25hdmlnYXRpb24vaW1hZ2UtbG9hZC1pbi1i
ZWZvcmV1bmxvYWQtaGFuZGxlci1leHBlY3RlZC50eHQKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVz
dHMvaHR0cC90ZXN0cy9uYXZpZ2F0aW9uL2ltYWdlLWxvYWQtaW4tYmVmb3JldW5sb2FkLWhhbmRs
ZXItZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9u
YXZpZ2F0aW9uL2ltYWdlLWxvYWQtaW4tYmVmb3JldW5sb2FkLWhhbmRsZXItZXhwZWN0ZWQudHh0
CShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDggQEAKKzx1bmtub3duPiAtIGRpZEZhaWxMb2FkaW5n
V2l0aEVycm9yOiA8TlNFcnJvciBkb21haW4gTlNVUkxFcnJvckRvbWFpbiwgY29kZSAtOTk5LCBm
YWlsaW5nIFVSTCAiaHR0cDovLzEyNy4wLjAuMTo4MDAwL25hdmlnYXRpb24vaW1hZ2UtbG9hZC1p
bi1iZWZvcmV1bmxvYWQtaGFuZGxlci5odG1sIj4KK2h0dHA6Ly8xMjcuMC4wLjE6ODAwMC9uYXZp
Z2F0aW9uL3Jlc291cmNlcy93YWl0LXRoZW4tbm90aWZ5LWRvbmUuaHRtbCAtIHdpbGxTZW5kUmVx
dWVzdCA8TlNVUkxSZXF1ZXN0IFVSTCBodHRwOi8vMTI3LjAuMC4xOjgwMDAvbmF2aWdhdGlvbi9y
ZXNvdXJjZXMvd2FpdC10aGVuLW5vdGlmeS1kb25lLmh0bWwsIG1haW4gZG9jdW1lbnQgVVJMIGh0
dHA6Ly8xMjcuMC4wLjE6ODAwMC9uYXZpZ2F0aW9uL3Jlc291cmNlcy93YWl0LXRoZW4tbm90aWZ5
LWRvbmUuaHRtbCwgaHR0cCBtZXRob2QgR0VUPiByZWRpcmVjdFJlc3BvbnNlIChudWxsKQoraHR0
cDovLzEyNy4wLjAuMTo4MDAwL25hdmlnYXRpb24vcmVzb3VyY2VzL3Nsb3ctcmVzb3VyY2UtMS1z
ZWMucGwgLSB3aWxsU2VuZFJlcXVlc3QgPE5TVVJMUmVxdWVzdCBVUkwgaHR0cDovLzEyNy4wLjAu
MTo4MDAwL25hdmlnYXRpb24vcmVzb3VyY2VzL3Nsb3ctcmVzb3VyY2UtMS1zZWMucGwsIG1haW4g
ZG9jdW1lbnQgVVJMIGh0dHA6Ly8xMjcuMC4wLjE6ODAwMC9uYXZpZ2F0aW9uL2ltYWdlLWxvYWQt
aW4tYmVmb3JldW5sb2FkLWhhbmRsZXIuaHRtbCwgaHR0cCBtZXRob2QgR0VUPiByZWRpcmVjdFJl
c3BvbnNlIChudWxsKQoraHR0cDovLzEyNy4wLjAuMTo4MDAwL25hdmlnYXRpb24vcmVzb3VyY2Vz
L3dhaXQtdGhlbi1ub3RpZnktZG9uZS5odG1sIC0gZGlkUmVjZWl2ZVJlc3BvbnNlIDxOU1VSTFJl
c3BvbnNlIGh0dHA6Ly8xMjcuMC4wLjE6ODAwMC9uYXZpZ2F0aW9uL3Jlc291cmNlcy93YWl0LXRo
ZW4tbm90aWZ5LWRvbmUuaHRtbCwgaHR0cCBzdGF0dXMgY29kZSAyMDA+CitodHRwOi8vMTI3LjAu
MC4xOjgwMDAvbmF2aWdhdGlvbi9yZXNvdXJjZXMvd2FpdC10aGVuLW5vdGlmeS1kb25lLmh0bWwg
LSBkaWRGaW5pc2hMb2FkaW5nCitodHRwOi8vMTI3LjAuMC4xOjgwMDAvbmF2aWdhdGlvbi9yZXNv
dXJjZXMvc2xvdy1yZXNvdXJjZS0xLXNlYy5wbCAtIGRpZFJlY2VpdmVSZXNwb25zZSA8TlNVUkxS
ZXNwb25zZSBodHRwOi8vMTI3LjAuMC4xOjgwMDAvbmF2aWdhdGlvbi9yZXNvdXJjZXMvc2xvdy1y
ZXNvdXJjZS0xLXNlYy5wbCwgaHR0cCBzdGF0dXMgY29kZSAyMDA+CitodHRwOi8vMTI3LjAuMC4x
OjgwMDAvbmF2aWdhdGlvbi9yZXNvdXJjZXMvc2xvdy1yZXNvdXJjZS0xLXNlYy5wbCAtIGRpZEZp
bmlzaExvYWRpbmcKKwpJbmRleDogTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9uYXZpZ2F0aW9uL2lt
YWdlLWxvYWQtaW4tYmVmb3JldW5sb2FkLWhhbmRsZXIuaHRtbAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlv
dXRUZXN0cy9odHRwL3Rlc3RzL25hdmlnYXRpb24vaW1hZ2UtbG9hZC1pbi1iZWZvcmV1bmxvYWQt
aGFuZGxlci5odG1sCShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9uYXZp
Z2F0aW9uL2ltYWdlLWxvYWQtaW4tYmVmb3JldW5sb2FkLWhhbmRsZXIuaHRtbAkocmV2aXNpb24g
MCkKQEAgLTAsMCArMSwyMyBAQAorPGh0bWw+PGhlYWQ+Cis8dGl0bGU+SW1hZ2UgbG9hZCBpbiB1
bmxvYWQgaGFuZGxlcjwvdGl0bGU+Cis8c2NyaXB0PgorZnVuY3Rpb24gbmF2aWdhdGUoKSB7Cisg
ICAgaWYgKHdpbmRvdy5sYXlvdXRUZXN0Q29udHJvbGxlcikgeworICAgICAgICBsYXlvdXRUZXN0
Q29udHJvbGxlci5kdW1wQXNUZXh0KCk7CisgICAgICAgIGxheW91dFRlc3RDb250cm9sbGVyLmR1
bXBSZXNvdXJjZUxvYWRDYWxsYmFja3MoKTsKKyAgICAgICAgbGF5b3V0VGVzdENvbnRyb2xsZXIu
d2FpdFVudGlsRG9uZSgpOworICAgICAgICB2YXIgdGFyZ2V0ID0gZG9jdW1lbnQuZ2V0RWxlbWVu
dEJ5SWQoImxpbmsiKTsKKyAgICAgICAgZXZlbnRTZW5kZXIubW91c2VNb3ZlVG8odGFyZ2V0Lm9m
ZnNldExlZnQgKyAyLCB0YXJnZXQub2Zmc2V0VG9wICsgMik7CisgICAgICAgIGV2ZW50U2VuZGVy
Lm1vdXNlRG93bigpOworICAgICAgICBldmVudFNlbmRlci5tb3VzZVVwKCk7CisgICAgfQorfQor
CitmdW5jdGlvbiByZXF1ZXN0SW1hZ2UoKSB7CisgICAgdmFyIGltZyA9IG5ldyBJbWFnZSgxLCAx
KTsKKyAgICBpbWcuc3JjID0gInJlc291cmNlcy9zbG93LXJlc291cmNlLTEtc2VjLnBsIjsKK30K
Kzwvc2NyaXB0PjwvaGVhZD4KKzxib2R5IG9ubG9hZD0ibmF2aWdhdGUoKTsiIG9uYmVmb3JldW5s
b2FkPSJyZXF1ZXN0SW1hZ2UoKTsiPgorPGEgaWQ9ImxpbmsiIGhyZWY9InJlc291cmNlcy93YWl0
LXRoZW4tbm90aWZ5LWRvbmUuaHRtbCI+bGluazwvYT4KKzwvYm9keT48L2h0bWw+CkluZGV4OiBM
YXlvdXRUZXN0cy9odHRwL3Rlc3RzL25hdmlnYXRpb24vcmVzb3VyY2VzL3dhaXQtdGhlbi1ub3Rp
ZnktZG9uZS5odG1sCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2h0dHAvdGVzdHMvbmF2aWdh
dGlvbi9yZXNvdXJjZXMvd2FpdC10aGVuLW5vdGlmeS1kb25lLmh0bWwJKHJldmlzaW9uIDApCisr
KyBMYXlvdXRUZXN0cy9odHRwL3Rlc3RzL25hdmlnYXRpb24vcmVzb3VyY2VzL3dhaXQtdGhlbi1u
b3RpZnktZG9uZS5odG1sCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDkgQEAKKzxodG1sPg0KKzxz
Y3JpcHQ+DQorICAgIGlmICh3aW5kb3cubGF5b3V0VGVzdENvbnRyb2xsZXIpIHsNCisgICAgICAg
IHNldFRpbWVvdXQoZnVuY3Rpb24oKSB7DQorICAgICAgICAgICAgbGF5b3V0VGVzdENvbnRyb2xs
ZXIubm90aWZ5RG9uZSgpOw0KKyAgICAgICAgfSwgMjAwMCk7DQorICAgIH0NCis8L3NjcmlwdD4N
Cis8L2h0bWw+DQpJbmRleDogTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9uYXZpZ2F0aW9uL2ltYWdl
LWxvYWQtaW4tdW5sb2FkLWhhbmRsZXItZXhwZWN0ZWQudHh0Cj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91
dFRlc3RzL2h0dHAvdGVzdHMvbmF2aWdhdGlvbi9pbWFnZS1sb2FkLWluLXVubG9hZC1oYW5kbGVy
LWV4cGVjdGVkLnR4dAkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2h0dHAvdGVzdHMvbmF2
aWdhdGlvbi9pbWFnZS1sb2FkLWluLXVubG9hZC1oYW5kbGVyLWV4cGVjdGVkLnR4dAkocmV2aXNp
b24gMCkKQEAgLTAsMCArMSw5IEBACittYWluIGZyYW1lIC0gaGFzIDEgb251bmxvYWQgaGFuZGxl
cihzKQorPHVua25vd24+IC0gZGlkRmFpbExvYWRpbmdXaXRoRXJyb3I6IDxOU0Vycm9yIGRvbWFp
biBOU1VSTEVycm9yRG9tYWluLCBjb2RlIC05OTksIGZhaWxpbmcgVVJMICJodHRwOi8vMTI3LjAu
MC4xOjgwMDAvbmF2aWdhdGlvbi9pbWFnZS1sb2FkLWluLXVubG9hZC1oYW5kbGVyLmh0bWwiPgor
aHR0cDovLzEyNy4wLjAuMTo4MDAwL25hdmlnYXRpb24vcmVzb3VyY2VzL3dhaXQtdGhlbi1ub3Rp
ZnktZG9uZS5odG1sIC0gd2lsbFNlbmRSZXF1ZXN0IDxOU1VSTFJlcXVlc3QgVVJMIGh0dHA6Ly8x
MjcuMC4wLjE6ODAwMC9uYXZpZ2F0aW9uL3Jlc291cmNlcy93YWl0LXRoZW4tbm90aWZ5LWRvbmUu
aHRtbCwgbWFpbiBkb2N1bWVudCBVUkwgaHR0cDovLzEyNy4wLjAuMTo4MDAwL25hdmlnYXRpb24v
cmVzb3VyY2VzL3dhaXQtdGhlbi1ub3RpZnktZG9uZS5odG1sLCBodHRwIG1ldGhvZCBHRVQ+IHJl
ZGlyZWN0UmVzcG9uc2UgKG51bGwpCitodHRwOi8vMTI3LjAuMC4xOjgwMDAvbmF2aWdhdGlvbi9y
ZXNvdXJjZXMvd2FpdC10aGVuLW5vdGlmeS1kb25lLmh0bWwgLSBkaWRSZWNlaXZlUmVzcG9uc2Ug
PE5TVVJMUmVzcG9uc2UgaHR0cDovLzEyNy4wLjAuMTo4MDAwL25hdmlnYXRpb24vcmVzb3VyY2Vz
L3dhaXQtdGhlbi1ub3RpZnktZG9uZS5odG1sLCBodHRwIHN0YXR1cyBjb2RlIDIwMD4KK2h0dHA6
Ly8xMjcuMC4wLjE6ODAwMC9uYXZpZ2F0aW9uL3Jlc291cmNlcy93YWl0LXRoZW4tbm90aWZ5LWRv
bmUuaHRtbCAtIGRpZEZpbmlzaExvYWRpbmcKK2h0dHA6Ly8xMjcuMC4wLjE6ODAwMC9uYXZpZ2F0
aW9uL3Jlc291cmNlcy9zbG93LXJlc291cmNlLTEtc2VjLnBsIC0gd2lsbFNlbmRSZXF1ZXN0IDxO
U1VSTFJlcXVlc3QgVVJMIGh0dHA6Ly8xMjcuMC4wLjE6ODAwMC9uYXZpZ2F0aW9uL3Jlc291cmNl
cy9zbG93LXJlc291cmNlLTEtc2VjLnBsLCBtYWluIGRvY3VtZW50IFVSTCBodHRwOi8vMTI3LjAu
MC4xOjgwMDAvbmF2aWdhdGlvbi9yZXNvdXJjZXMvd2FpdC10aGVuLW5vdGlmeS1kb25lLmh0bWws
IGh0dHAgbWV0aG9kIEdFVD4gcmVkaXJlY3RSZXNwb25zZSAobnVsbCkKK2h0dHA6Ly8xMjcuMC4w
LjE6ODAwMC9uYXZpZ2F0aW9uL3Jlc291cmNlcy9zbG93LXJlc291cmNlLTEtc2VjLnBsIC0gZGlk
UmVjZWl2ZVJlc3BvbnNlIDxOU1VSTFJlc3BvbnNlIGh0dHA6Ly8xMjcuMC4wLjE6ODAwMC9uYXZp
Z2F0aW9uL3Jlc291cmNlcy9zbG93LXJlc291cmNlLTEtc2VjLnBsLCBodHRwIHN0YXR1cyBjb2Rl
IDIwMD4KK2h0dHA6Ly8xMjcuMC4wLjE6ODAwMC9uYXZpZ2F0aW9uL3Jlc291cmNlcy9zbG93LXJl
c291cmNlLTEtc2VjLnBsIC0gZGlkRmluaXNoTG9hZGluZworCkluZGV4OiBMYXlvdXRUZXN0cy9o
dHRwL3Rlc3RzL25hdmlnYXRpb24vaW1hZ2UtbG9hZC1pbi11bmxvYWQtaGFuZGxlci5odG1sCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIExheW91dFRlc3RzL2h0dHAvdGVzdHMvbmF2aWdhdGlvbi9pbWFnZS1sb2Fk
LWluLXVubG9hZC1oYW5kbGVyLmh0bWwJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9odHRw
L3Rlc3RzL25hdmlnYXRpb24vaW1hZ2UtbG9hZC1pbi11bmxvYWQtaGFuZGxlci5odG1sCShyZXZp
c2lvbiAwKQpAQCAtMCwwICsxLDI0IEBACis8aHRtbD48aGVhZD4KKzx0aXRsZT5JbWFnZSBsb2Fk
IGluIHVubG9hZCBoYW5kbGVyPC90aXRsZT4KKzxzY3JpcHQ+CitmdW5jdGlvbiBuYXZpZ2F0ZSgp
IHsKKyAgICBpZiAod2luZG93LmxheW91dFRlc3RDb250cm9sbGVyKSB7CisgICAgICAgIGxheW91
dFRlc3RDb250cm9sbGVyLmR1bXBBc1RleHQoKTsKKyAgICAgICAgbGF5b3V0VGVzdENvbnRyb2xs
ZXIuZHVtcFJlc291cmNlTG9hZENhbGxiYWNrcygpOworICAgICAgICBsYXlvdXRUZXN0Q29udHJv
bGxlci53YWl0VW50aWxEb25lKCk7CisgICAgICAgIHZhciB0YXJnZXQgPSBkb2N1bWVudC5nZXRF
bGVtZW50QnlJZCgibGluayIpOworICAgICAgICBldmVudFNlbmRlci5tb3VzZU1vdmVUbyh0YXJn
ZXQub2Zmc2V0TGVmdCArIDIsIHRhcmdldC5vZmZzZXRUb3AgKyAyKTsKKyAgICAgICAgZXZlbnRT
ZW5kZXIubW91c2VEb3duKCk7CisgICAgICAgIGV2ZW50U2VuZGVyLm1vdXNlVXAoKTsKKyAgICB9
Cit9CisKK2Z1bmN0aW9uIHJlcXVlc3RJbWFnZSgpIHsKKyAgICB2YXIgaW1nID0gbmV3IEltYWdl
KDEsIDEpOworICAgIGltZy5zcmMgPSAicmVzb3VyY2VzL3Nsb3ctcmVzb3VyY2UtMS1zZWMucGwi
OworfQorPC9zY3JpcHQ+Cis8L2hlYWQ+Cis8Ym9keSBvbmxvYWQ9Im5hdmlnYXRlKCk7IiBvbnVu
bG9hZD0icmVxdWVzdEltYWdlKCk7Ij4KKzxhIGlkPSJsaW5rIiBocmVmPSJyZXNvdXJjZXMvd2Fp
dC10aGVuLW5vdGlmeS1kb25lLmh0bWwiPmxpbms8L2E+Cis8L2JvZHk+PC9odG1sPgpJbmRleDog
TGF5b3V0VGVzdHMvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL0NoYW5nZUxv
ZwkocmV2aXNpb24gNjEyMDkpCisrKyBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cJKHdvcmtpbmcgY29w
eSkKQEAgLTEsMyArMSwxNSBAQAorMjAxMC0wNi0xNSAgTmF0ZSBDaGFwaW4gIDxqYXBoZXRAY2hy
b21pdW0ub3JnPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAg
ICAgIFRlc3RzIGZvciBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MzA0
NTcuCisKKyAgICAgICAgKiBodHRwL3Rlc3RzL25hdmlnYXRpb24vaW1hZ2UtbG9hZC1pbi1iZWZv
cmV1bmxvYWQtaGFuZGxlci1leHBlY3RlZC50eHQ6IEFkZGVkLgorICAgICAgICAqIGh0dHAvdGVz
dHMvbmF2aWdhdGlvbi9pbWFnZS1sb2FkLWluLWJlZm9yZXVubG9hZC1oYW5kbGVyLmh0bWw6IEFk
ZGVkLgorICAgICAgICAqIGh0dHAvdGVzdHMvbmF2aWdhdGlvbi9pbWFnZS1sb2FkLWluLXVubG9h
ZC1oYW5kbGVyLWV4cGVjdGVkLnR4dDogQWRkZWQuCisgICAgICAgICogaHR0cC90ZXN0cy9uYXZp
Z2F0aW9uL2ltYWdlLWxvYWQtaW4tdW5sb2FkLWhhbmRsZXIuaHRtbDogQWRkZWQuCisgICAgICAg
ICogaHR0cC90ZXN0cy9uYXZpZ2F0aW9uL3Jlc291cmNlcy93YWl0LXRoZW4tbm90aWZ5LWRvbmUu
aHRtbDogQWRkZWQuCisKIDIwMTAtMDYtMTUgIERhcmluIEZpc2hlciAgPGRhcmluQGNocm9taXVt
Lm9yZz4KIAogICAgICAgICBSZXZpZXdlZCBieSBCcmFkeSBFaWRzb24uCg==
</data>
<flag name="review"
          id="45302"
          type_id="1"
          status="-"
          setter="abarth"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>59117</attachid>
            <date>2010-06-18 08:56:58 -0700</date>
            <delta_ts>2010-06-19 17:13:19 -0700</delta_ts>
            <desc>a relevant patch</desc>
            <filename>fl3.txt</filename>
            <type>text/plain</type>
            <size>60283</size>
            <attacher name="Nate Chapin">japhet</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYktpdC9tYWMvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdC9tYWMvQ2hh
bmdlTG9nCShyZXZpc2lvbiA2MTE5NykKKysrIFdlYktpdC9tYWMvQ2hhbmdlTG9nCSh3b3JraW5n
IGNvcHkpCkBAIC0xLDMgKzEsMTQgQEAKKzIwMTAtMDYtMTEgIE5hdGUgQ2hhcGluICA8amFwaGV0
QGNocm9taXVtLm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKwor
ICAgICAgICBGcmFtZUxvYWRlciBjbGVhbnVwOiBTcGxpdCBoaWdoIGxldmVsIHN1YmZyYW1lIGFu
ZCBwbHVnaW4KKyAgICAgICAgbG9hZGluZyBmdW5jdGlvbnMgaW50byBhIHNlcGFyYXRlIGNsYXNz
LgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NDA0NTMK
KworICAgICAgICAqIFdlYlZpZXcvV2ViRnJhbWUubW06CisgICAgICAgICgtW1dlYkZyYW1lIF9j
YWNoZWFiaWxpdHlEaWN0aW9uYXJ5XSk6CisKIDIwMTAtMDYtMTUgIERhbiBCZXJuc3RlaW4gIDxt
aXR6QGFwcGxlLmNvbT4KIAogICAgICAgICBSZXZpZXdlZCBieSBKb2huIFN1bGxpdmFuLgpJbmRl
eDogV2ViS2l0L21hYy9XZWJWaWV3L1dlYkZyYW1lLm1tCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdC9t
YWMvV2ViVmlldy9XZWJGcmFtZS5tbQkocmV2aXNpb24gNjExOTcpCisrKyBXZWJLaXQvbWFjL1dl
YlZpZXcvV2ViRnJhbWUubW0JKHdvcmtpbmcgY29weSkKQEAgLTEyMjIsNyArMTIyMiw3IEBACiAg
ICAgaWYgKGRvY3VtZW50TG9hZGVyICYmICFkb2N1bWVudExvYWRlci0+bWFpbkRvY3VtZW50RXJy
b3IoKS5pc051bGwoKSkKICAgICAgICAgW3Jlc3VsdCBzZXRPYmplY3Q6KE5TRXJyb3IgKilkb2N1
bWVudExvYWRlci0+bWFpbkRvY3VtZW50RXJyb3IoKSBmb3JLZXk6V2ViRnJhbWVNYWluRG9jdW1l
bnRFcnJvcl07CiAgICAgICAgIAotICAgIGlmIChmcmFtZUxvYWRlci0+Y29udGFpbnNQbHVnaW5z
KCkpCisgICAgaWYgKGZyYW1lTG9hZGVyLT5zdWJmcmFtZUxvYWRlcigpLT5jb250YWluc1BsdWdp
bnMoKSkKICAgICAgICAgW3Jlc3VsdCBzZXRPYmplY3Q6W05TTnVtYmVyIG51bWJlcldpdGhCb29s
OllFU10gZm9yS2V5OldlYkZyYW1lSGFzUGx1Z2luc107CiAgICAgCiAgICAgaWYgKERPTVdpbmRv
dyogZG9tV2luZG93ID0gX3ByaXZhdGUtPmNvcmVGcmFtZS0+ZG9tV2luZG93KCkpIHsKSW5kZXg6
IFdlYkNvcmUvZG9tL0RPTUltcGxlbWVudGF0aW9uLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3Jl
L2RvbS9ET01JbXBsZW1lbnRhdGlvbi5jcHAJKHJldmlzaW9uIDYxMTk3KQorKysgV2ViQ29yZS9k
b20vRE9NSW1wbGVtZW50YXRpb24uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMjksNyArMzI5LDcg
QEAKICNlbmRpZgogCiAgICAgUGx1Z2luRGF0YSogcGx1Z2luRGF0YSA9IDA7Ci0gICAgaWYgKGZy
YW1lICYmIGZyYW1lLT5wYWdlKCkgJiYgZnJhbWUtPmxvYWRlcigpLT5hbGxvd1BsdWdpbnMoTm90
QWJvdXRUb0luc3RhbnRpYXRlUGx1Z2luKSkKKyAgICBpZiAoZnJhbWUgJiYgZnJhbWUtPnBhZ2Uo
KSAmJiBmcmFtZS0+bG9hZGVyKCktPnN1YmZyYW1lTG9hZGVyKCktPmFsbG93UGx1Z2lucyhOb3RB
Ym91dFRvSW5zdGFudGlhdGVQbHVnaW4pKQogICAgICAgICBwbHVnaW5EYXRhID0gZnJhbWUtPnBh
Z2UoKS0+cGx1Z2luRGF0YSgpOwogCiAgICAgLy8gUERGIGlzIG9uZSBpbWFnZSB0eXBlIGZvciB3
aGljaCBhIHBsdWdpbiBjYW4gb3ZlcnJpZGUgYnVpbHQtaW4gc3VwcG9ydC4KSW5kZXg6IFdlYkNv
cmUvcGx1Z2lucy9NaW1lVHlwZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbHVnaW5zL01p
bWVUeXBlLmNwcAkocmV2aXNpb24gNjExOTcpCisrKyBXZWJDb3JlL3BsdWdpbnMvTWltZVR5cGUu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC02NSw3ICs2NSw3IEBACiBQYXNzUmVmUHRyPFBsdWdpbj4g
TWltZVR5cGU6OmVuYWJsZWRQbHVnaW4oKSBjb25zdAogewogICAgIGNvbnN0IFBhZ2UqIHAgPSBt
X3BsdWdpbkRhdGEtPnBhZ2UoKTsKLSAgICBpZiAoIXAgfHwgIXAtPm1haW5GcmFtZSgpLT5sb2Fk
ZXIoKS0+YWxsb3dQbHVnaW5zKE5vdEFib3V0VG9JbnN0YW50aWF0ZVBsdWdpbikpCisgICAgaWYg
KCFwIHx8ICFwLT5tYWluRnJhbWUoKS0+bG9hZGVyKCktPnN1YmZyYW1lTG9hZGVyKCktPmFsbG93
UGx1Z2lucyhOb3RBYm91dFRvSW5zdGFudGlhdGVQbHVnaW4pKQogICAgICAgICByZXR1cm4gMDsK
IAogICAgIHJldHVybiBQbHVnaW46OmNyZWF0ZShtX3BsdWdpbkRhdGEuZ2V0KCksIG1fcGx1Z2lu
RGF0YS0+bWltZVBsdWdpbkluZGljZXMoKVttX2luZGV4XSk7CkluZGV4OiBXZWJDb3JlL1dlYkNv
cmUucHJvCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvV2ViQ29yZS5wcm8JKHJldmlzaW9uIDYxMTk3
KQorKysgV2ViQ29yZS9XZWJDb3JlLnBybwkod29ya2luZyBjb3B5KQpAQCAtNzYyLDYgKzc2Miw3
IEBACiAgICAgbG9hZGVyL1Jlc291cmNlTG9hZGVyLmNwcCBcCiAgICAgbG9hZGVyL1Jlc291cmNl
TG9hZE5vdGlmaWVyLmNwcCBcCiAgICAgbG9hZGVyL1NpbmtEb2N1bWVudC5jcHAgXAorICAgIGxv
YWRlci9TdWJmcmFtZUxvYWRlci5jcHAgXAogICAgIGxvYWRlci9TdWJyZXNvdXJjZUxvYWRlci5j
cHAgXAogICAgIGxvYWRlci9UZXh0RG9jdW1lbnQuY3BwIFwKICAgICBsb2FkZXIvVGV4dFJlc291
cmNlRGVjb2Rlci5jcHAgXApJbmRleDogV2ViQ29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
V2ViQ29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDYxMTk3KQorKysgV2ViQ29yZS9DaGFuZ2VMb2cJ
KHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSw1MSBAQAorMjAxMC0wNi0xMSAgTmF0ZSBDaGFwaW4g
IDxqYXBoZXRAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09Q
UyEpLgorCisgICAgICAgIEZyYW1lTG9hZGVyIGNsZWFudXA6IFNwbGl0IGhpZ2ggbGV2ZWwgc3Vi
ZnJhbWUgYW5kIHBsdWdpbgorICAgICAgICBsb2FkaW5nIGZ1bmN0aW9ucyBpbnRvIGEgc2VwYXJh
dGUgY2xhc3MuCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD00MDQ1MworCisgICAgICAgIFJlZmFjdG9yIG9ubHksIG5vIG5ldyB0ZXN0cy4KKworICAgICAg
ICAqIEFuZHJvaWQubWs6CisgICAgICAgICogQ01ha2VMaXN0cy50eHQ6CisgICAgICAgICogR05V
bWFrZWZpbGUuYW06CisgICAgICAgICogV2ViQ29yZS5iYXNlLmV4cDoKKyAgICAgICAgKiBXZWJD
b3JlLmd5cGk6CisgICAgICAgICogV2ViQ29yZS5wcm86CisgICAgICAgICogV2ViQ29yZS52Y3By
b2ovV2ViQ29yZS52Y3Byb2o6CisgICAgICAgICogV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5w
Ynhwcm9qOgorICAgICAgICAqIGRvbS9ET01JbXBsZW1lbnRhdGlvbi5jcHA6CisgICAgICAgICog
aGlzdG9yeS9QYWdlQ2FjaGUuY3BwOgorICAgICAgICAqIGh0bWwvSFRNTEZyYW1lRWxlbWVudEJh
c2UuY3BwOgorICAgICAgICAqIGh0bWwvSFRNTE1lZGlhRWxlbWVudC5jcHA6CisgICAgICAgICog
bG9hZGVyL0ZyYW1lTG9hZGVyLmNwcDoKKyAgICAgICAgKiBsb2FkZXIvRnJhbWVMb2FkZXIuaDoK
KyAgICAgICAgKFdlYkNvcmU6OkZyYW1lTG9hZGVyOjpzdWJmcmFtZUxvYWRlcik6CisgICAgICAg
ICogbG9hZGVyL1BsdWdpbkRvY3VtZW50LmNwcDoKKyAgICAgICAgKiBsb2FkZXIvU3ViZnJhbWVM
b2FkZXIuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlN1YmZyYW1lTG9hZGVyOjpTdWJm
cmFtZUxvYWRlcik6CisgICAgICAgIChXZWJDb3JlOjp0b1BsdWdJbkVsZW1lbnQpOgorICAgICAg
ICAoV2ViQ29yZTo6U3ViZnJhbWVMb2FkZXI6OmNsZWFyKToKKyAgICAgICAgKFdlYkNvcmU6OlN1
YmZyYW1lTG9hZGVyOjpyZXF1ZXN0RnJhbWUpOgorICAgICAgICAoV2ViQ29yZTo6U3ViZnJhbWVM
b2FkZXI6OnJlcXVlc3RPYmplY3QpOgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVMb2FkZXI6Omxv
YWRNZWRpYVBsYXllclByb3h5UGx1Z2luKToKKyAgICAgICAgKFdlYkNvcmU6OlN1YmZyYW1lTG9h
ZGVyOjpjcmVhdGVKYXZhQXBwbGV0V2lkZ2V0KToKKyAgICAgICAgKFdlYkNvcmU6OlN1YmZyYW1l
TG9hZGVyOjpsb2FkU3ViZnJhbWUpOgorICAgICAgICAoV2ViQ29yZTo6U3ViZnJhbWVMb2FkZXI6
OmFsbG93UGx1Z2lucyk6CisgICAgICAgIChXZWJDb3JlOjpTdWJmcmFtZUxvYWRlcjo6c2hvdWxk
VXNlUGx1Z2luKToKKyAgICAgICAgKFdlYkNvcmU6OlN1YmZyYW1lTG9hZGVyOjpsb2FkUGx1Z2lu
KToKKyAgICAgICAgKFdlYkNvcmU6OlN1YmZyYW1lTG9hZGVyOjpjb21wbGV0ZVVSTCk6CisgICAg
ICAgICogbG9hZGVyL1N1YmZyYW1lTG9hZGVyLmg6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6
U3ViZnJhbWVMb2FkZXI6OmNvbnRhaW5zUGx1Z2lucyk6CisgICAgICAgICogcGFnZS9QYWdlLmNw
cDoKKyAgICAgICAgKiBwYWdlL1hTU0F1ZGl0b3IuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFw
aGljcy93aW5jZS9NZWRpYVBsYXllclByb3h5LmNwcDoKKyAgICAgICAgKiBwbHVnaW5zL01pbWVU
eXBlLmNwcDoKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyQXBwbGV0LmNwcDoKKyAgICAgICAg
KiByZW5kZXJpbmcvUmVuZGVyRW1iZWRkZWRPYmplY3QuY3BwOgorCiAyMDEwLTA2LTE1ICBBZGFt
IFJvYmVuICA8YXJvYmVuQGFwcGxlLmNvbT4KIAogICAgICAgICBNYWtlIFdlYkNvcmUncyBhbmQg
SmF2YVNjcmlwdENvcmUncyBEZXJpdmVkU291cmNlcyBhdmFpbGFibGUgZm9yIGRlYnVnZ2luZyBp
biBwcm9kdWN0aW9uIGJ1aWxkcwpJbmRleDogV2ViQ29yZS9XZWJDb3JlLnZjcHJvai9XZWJDb3Jl
LnZjcHJvago9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL1dlYkNvcmUudmNwcm9qL1dlYkNvcmUudmNw
cm9qCShyZXZpc2lvbiA2MTE5NykKKysrIFdlYkNvcmUvV2ViQ29yZS52Y3Byb2ovV2ViQ29yZS52
Y3Byb2oJKHdvcmtpbmcgY29weSkKQEAgLTIyMTQ5LDYgKzIyMTQ5LDE0IEBACiAJCQkJPg0KIAkJ
CTwvRmlsZT4NCiAJCQk8RmlsZQ0KKwkJCQlSZWxhdGl2ZVBhdGg9Ii4uXGxvYWRlclxTdWJmcmFt
ZUxvYWRlci5jcHAiDQorCQkJCT4NCisJCQk8L0ZpbGU+DQorCQkJPEZpbGUNCisJCQkJUmVsYXRp
dmVQYXRoPSIuLlxsb2FkZXJcU3ViZnJhbWVMb2FkZXIuaCINCisJCQkJPg0KKwkJCTwvRmlsZT4N
CisJCQk8RmlsZQ0KIAkJCQlSZWxhdGl2ZVBhdGg9Ii4uXGxvYWRlclxTdWJyZXNvdXJjZUxvYWRl
ci5jcHAiDQogCQkJCT4NCiAJCQk8L0ZpbGU+DQpJbmRleDogV2ViQ29yZS9XZWJDb3JlLmJhc2Uu
ZXhwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvV2ViQ29yZS5iYXNlLmV4cAkocmV2aXNpb24gNjEx
OTcpCisrKyBXZWJDb3JlL1dlYkNvcmUuYmFzZS5leHAJKHdvcmtpbmcgY29weSkKQEAgLTc5NCw3
ICs3OTQsNiBAQAogX19aTks3V2ViQ29yZTExQ2FjaGVkSW1hZ2U1aW1hZ2VFdgogX19aTks3V2Vi
Q29yZTExRnJhbWVMb2FkZXIxMGlzQ29tcGxldGVFdgogX19aTks3V2ViQ29yZTExRnJhbWVMb2Fk
ZXIxNGZyYW1lSGFzTG9hZGVkRXYKLV9fWk5LN1dlYkNvcmUxMUZyYW1lTG9hZGVyMTVjb250YWlu
c1BsdWdpbnNFdgogX19aTks3V2ViQ29yZTExRnJhbWVMb2FkZXIxNWZpcnN0TGF5b3V0RG9uZUV2
CiBfX1pOSzdXZWJDb3JlMTFGcmFtZUxvYWRlcjE2b3V0Z29pbmdSZWZlcnJlckV2CiBfX1pOSzdX
ZWJDb3JlMTFGcmFtZUxvYWRlcjIwYWN0aXZlRG9jdW1lbnRMb2FkZXJFdgpJbmRleDogV2ViQ29y
ZS9oaXN0b3J5L1BhZ2VDYWNoZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9oaXN0b3J5L1Bh
Z2VDYWNoZS5jcHAJKHJldmlzaW9uIDYxMTk3KQorKysgV2ViQ29yZS9oaXN0b3J5L1BhZ2VDYWNo
ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEwMiw3ICsxMDIsNyBAQAogICAgICAgICAgICAgUENM
T0coIiAgIC1NYWluIGRvY3VtZW50IGhhcyBhbiBlcnJvciIpOwogICAgICAgICAgICAgY2Fubm90
Q2FjaGUgPSB0cnVlOwogICAgICAgICB9Ci0gICAgICAgIGlmIChmcmFtZS0+bG9hZGVyKCktPmNv
bnRhaW5zUGx1Z2lucygpKSB7CisgICAgICAgIGlmIChmcmFtZS0+bG9hZGVyKCktPnN1YmZyYW1l
TG9hZGVyKCktPmNvbnRhaW5zUGx1Z2lucygpKSB7CiAgICAgICAgICAgICBQQ0xPRygiICAgLUZy
YW1lIGNvbnRhaW5zIHBsdWdpbnMiKTsKICAgICAgICAgICAgIGNhbm5vdENhY2hlID0gdHJ1ZTsK
ICAgICAgICAgfQpAQCAtMjQ2LDcgKzI0Niw3IEBACiAgICAgICAgIC8vIChvYmplY3RzIGNyZWF0
ZWQgYnkgdGhlIHBsdWctaW4pLiBTaW5jZSB0aGVyZSBpcyBubyB3YXkgdG8gcGF1c2UvcmVzdW1l
IGEgTmV0c2NhcGUgcGx1Zy1pbiwKICAgICAgICAgLy8gdGhleSB3b3VsZCBuZWVkIHRvIGJlIGRl
c3Ryb3llZCBhbmQgdGhlbiByZWNyZWF0ZWQsIGFuZCB0aGVyZSBpcyBubyB3YXkgdGhhdCB3ZSBj
YW4gcmVjcmVhdGUKICAgICAgICAgLy8gdGhlIHJpZ2h0IE5QT2JqZWN0cy4gU2VlIDxyZGFyOi8v
cHJvYmxlbS81MTk3MDQxPiBmb3IgbW9yZSBpbmZvcm1hdGlvbi4KLSAgICAgICAgJiYgIWZyYW1l
LT5sb2FkZXIoKS0+Y29udGFpbnNQbHVnaW5zKCkKKyAgICAgICAgJiYgIWZyYW1lLT5sb2FkZXIo
KS0+c3ViZnJhbWVMb2FkZXIoKS0+Y29udGFpbnNQbHVnaW5zKCkKICAgICAgICAgJiYgIWZyYW1l
LT5sb2FkZXIoKS0+dXJsKCkucHJvdG9jb2xJcygiaHR0cHMiKQogICAgICAgICAmJiAoIWZyYW1l
LT5kb21XaW5kb3coKSB8fCAhZnJhbWUtPmRvbVdpbmRvdygpLT5oYXNFdmVudExpc3RlbmVycyhl
dmVudE5hbWVzKCkudW5sb2FkRXZlbnQpKQogI2lmIEVOQUJMRShEQVRBQkFTRSkKSW5kZXg6IFdl
YkNvcmUvcGFnZS9YU1NBdWRpdG9yLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wYWdlL1hTU0F1
ZGl0b3IuaAkocmV2aXNpb24gNjExOTcpCisrKyBXZWJDb3JlL3BhZ2UvWFNTQXVkaXRvci5oCSh3
b3JraW5nIGNvcHkpCkBAIC02Nyw3ICs2Nyw3IEBACiAgICAgLy8gKiBTY3JpcHRFdmVudExpc3Rl
bmVyOjpjcmVhdGVBdHRyaWJ1dGVFdmVudExpc3RlbmVyIC0gdXNlZCB0byBjcmVhdGUgSmF2YVNj
cmlwdCBldmVudCBoYW5kbGVycy4KICAgICAvLyAqIEhUTUxCYXNlRWxlbWVudDo6cHJvY2VzcyAt
IHVzZWQgdG8gc2V0IHRoZSBkb2N1bWVudCBiYXNlIFVSTC4KICAgICAvLyAqIEhUTUxEb2N1bWVu
dFBhcnNlcjo6cGFyc2VUYWcgLSB1c2VkIHRvIGxvYWQgZXh0ZXJuYWwgSmF2YVNjcmlwdCBzY3Jp
cHRzLgotICAgIC8vICogRnJhbWVMb2FkZXI6OnJlcXVlc3RPYmplY3QgLSB1c2VkIHRvIGxvYWQg
PG9iamVjdD4vPGVtYmVkPiBlbGVtZW50cy4KKyAgICAvLyAqIFN1YmZyYW1lTG9hZGVyOjpyZXF1
ZXN0T2JqZWN0IC0gdXNlZCB0byBsb2FkIDxvYmplY3Q+LzxlbWJlZD4gZWxlbWVudHMuCiAgICAg
Ly8KICAgICBjbGFzcyBYU1NBdWRpdG9yIDogcHVibGljIE5vbmNvcHlhYmxlIHsKICAgICBwdWJs
aWM6CkBAIC05NSw3ICs5NSw3IEBACiAgICAgICAgIC8vIERldGVybWluZXMgd2hldGhlciBvYmpl
Y3Qgc2hvdWxkIGJlIGxvYWRlZCBiYXNlZCBvbiB0aGUgY29udGVudCBvZgogICAgICAgICAvLyBh
bnkgdXNlci1zdWJtaXR0ZWQgZGF0YS4KICAgICAgICAgLy8KLSAgICAgICAgLy8gVGhpcyBtZXRo
b2QgaXMgY2FsbGVkIGJ5IEZyYW1lTG9hZGVyOjpyZXF1ZXN0T2JqZWN0LgorICAgICAgICAvLyBU
aGlzIG1ldGhvZCBpcyBjYWxsZWQgYnkgU3ViZnJhbWVMb2FkZXI6OnJlcXVlc3RPYmplY3QuCiAg
ICAgICAgIGJvb2wgY2FuTG9hZE9iamVjdChjb25zdCBTdHJpbmcmIHVybCkgY29uc3Q7CiAKICAg
ICAgICAgLy8gRGV0ZXJtaW5lcyB3aGV0aGVyIHRoZSBiYXNlIFVSTCBzaG91bGQgYmUgY2hhbmdl
ZCBiYXNlZCBvbiB0aGUgY29udGVudApJbmRleDogV2ViQ29yZS9wYWdlL1BhZ2UuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFdlYkNvcmUvcGFnZS9QYWdlLmNwcAkocmV2aXNpb24gNjExOTcpCisrKyBXZWJD
b3JlL3BhZ2UvUGFnZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM4Niw3ICszODYsNyBAQAogICAg
ICAgICAgICAgY29udGludWU7CiAgICAgICAgIAogICAgICAgICBmb3IgKEZyYW1lKiBmcmFtZSA9
ICgqaXQpLT5tYWluRnJhbWUoKTsgZnJhbWU7IGZyYW1lID0gZnJhbWUtPnRyZWUoKS0+dHJhdmVy
c2VOZXh0KCkpIHsKLSAgICAgICAgICAgIGlmIChmcmFtZS0+bG9hZGVyKCktPmNvbnRhaW5zUGx1
Z2lucygpKQorICAgICAgICAgICAgaWYgKGZyYW1lLT5sb2FkZXIoKS0+c3ViZnJhbWVMb2FkZXIo
KS0+Y29udGFpbnNQbHVnaW5zKCkpCiAgICAgICAgICAgICAgICAgZnJhbWVzTmVlZGluZ1JlbG9h
ZC5hcHBlbmQoZnJhbWUpOwogICAgICAgICB9CiAgICAgfQpAQCAtMzk3LDcgKzM5Nyw3IEBACiAK
IFBsdWdpbkRhdGEqIFBhZ2U6OnBsdWdpbkRhdGEoKSBjb25zdAogewotICAgIGlmICghbWFpbkZy
YW1lKCktPmxvYWRlcigpLT5hbGxvd1BsdWdpbnMoTm90QWJvdXRUb0luc3RhbnRpYXRlUGx1Z2lu
KSkKKyAgICBpZiAoIW1haW5GcmFtZSgpLT5sb2FkZXIoKS0+c3ViZnJhbWVMb2FkZXIoKS0+YWxs
b3dQbHVnaW5zKE5vdEFib3V0VG9JbnN0YW50aWF0ZVBsdWdpbikpCiAgICAgICAgIHJldHVybiAw
OwogICAgIGlmICghbV9wbHVnaW5EYXRhKQogICAgICAgICBtX3BsdWdpbkRhdGEgPSBQbHVnaW5E
YXRhOjpjcmVhdGUodGhpcyk7CkluZGV4OiBXZWJDb3JlL0dOVW1ha2VmaWxlLmFtCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFdlYkNvcmUvR05VbWFrZWZpbGUuYW0JKHJldmlzaW9uIDYxMTk3KQorKysgV2ViQ29y
ZS9HTlVtYWtlZmlsZS5hbQkod29ya2luZyBjb3B5KQpAQCAtMTQyMiw2ICsxNDIyLDggQEAKIAlX
ZWJDb3JlL2xvYWRlci9SZXNvdXJjZUxvYWROb3RpZmllci5oIFwKICAgICBXZWJDb3JlL2xvYWRl
ci9TaW5rRG9jdW1lbnQuY3BwIFwKICAgICBXZWJDb3JlL2xvYWRlci9TaW5rRG9jdW1lbnQuaCBc
CisJV2ViQ29yZS9sb2FkZXIvU3ViZnJhbWVMb2FkZXIuY3BwIFwKKwlXZWJDb3JlL2xvYWRlci9T
dWJmcmFtZUxvYWRlci5oIFwKIAlXZWJDb3JlL2xvYWRlci9TdWJyZXNvdXJjZUxvYWRlci5jcHAg
XAogCVdlYkNvcmUvbG9hZGVyL1N1YnJlc291cmNlTG9hZGVyLmggXAogCVdlYkNvcmUvbG9hZGVy
L1N1YnJlc291cmNlTG9hZGVyQ2xpZW50LmggXApJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy93aW5jZS9NZWRpYVBsYXllclByb3h5LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL3dpbmNlL01lZGlhUGxheWVyUHJveHkuY3BwCShyZXZpc2lvbiA2MTE5
NykKKysrIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luY2UvTWVkaWFQbGF5ZXJQcm94eS5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTEwOSw3ICsxMDksNyBAQAogICAgICAgICB9CiAgICAgfQog
ICAgIHNlcnZpY2VUeXBlID0gImFwcGxpY2F0aW9uL3gtbXBsYXllcjIiOwotICAgIGZyYW1lLT5s
b2FkZXIoKS0+cmVxdWVzdE9iamVjdChzdGF0aWNfY2FzdDxSZW5kZXJQYXJ0T2JqZWN0Kj4oZWxl
bWVudC0+cmVuZGVyZXIoKSksIHVybCwgbnVsbEF0b20sIHNlcnZpY2VUeXBlLCBwYXJhbU5hbWVz
LCBwYXJhbVZhbHVlcyk7CisgICAgZnJhbWUtPmxvYWRlcigpLT5zdWJmcmFtZUxvYWRlcigpLT5y
ZXF1ZXN0T2JqZWN0KHN0YXRpY19jYXN0PFJlbmRlclBhcnRPYmplY3QqPihlbGVtZW50LT5yZW5k
ZXJlcigpKSwgdXJsLCBudWxsQXRvbSwgc2VydmljZVR5cGUsIHBhcmFtTmFtZXMsIHBhcmFtVmFs
dWVzKTsKICAgICBtX2luaXQgPSB0cnVlOwogCiB9CkluZGV4OiBXZWJDb3JlL1dlYkNvcmUuZ3lw
aQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL1dlYkNvcmUuZ3lwaQkocmV2aXNpb24gNjExOTcpCisr
KyBXZWJDb3JlL1dlYkNvcmUuZ3lwaQkod29ya2luZyBjb3B5KQpAQCAtMTgyNyw2ICsxODI3LDgg
QEAKICAgICAgICAgICAgICdsb2FkZXIvUmVzb3VyY2VMb2FkTm90aWZpZXIuaCcsCiAgICAgICAg
ICAgICAnbG9hZGVyL1NpbmtEb2N1bWVudC5jcHAnLAogICAgICAgICAgICAgJ2xvYWRlci9TaW5r
RG9jdW1lbnQuaCcsCisgICAgICAgICAgICAnbG9hZGVyL1N1YmZyYW1lTG9hZGVyLmNwcCcsCisg
ICAgICAgICAgICAnbG9hZGVyL1N1YmZyYW1lTG9hZGVyLmgnLAogICAgICAgICAgICAgJ2xvYWRl
ci9TdWJyZXNvdXJjZUxvYWRlci5jcHAnLAogICAgICAgICAgICAgJ2xvYWRlci9TdWJyZXNvdXJj
ZUxvYWRlci5oJywKICAgICAgICAgICAgICdsb2FkZXIvU3VicmVzb3VyY2VMb2FkZXJDbGllbnQu
aCcsCkluZGV4OiBXZWJDb3JlL2h0bWwvSFRNTE1lZGlhRWxlbWVudC5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gV2ViQ29yZS9odG1sL0hUTUxNZWRpYUVsZW1lbnQuY3BwCShyZXZpc2lvbiA2MTE5NykKKysr
IFdlYkNvcmUvaHRtbC9IVE1MTWVkaWFFbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTk5
Miw3ICsxOTkyLDcgQEAKICAgICAKICAgICAvLyBIYW5nIG9udG8gdGhlIHByb3h5IHdpZGdldCBz
byBpdCB3b24ndCBiZSBkZXN0cm95ZWQgaWYgdGhlIHBsdWctaW4gaXMgc2V0IHRvCiAgICAgLy8g
ZGlzcGxheTpub25lCi0gICAgbV9wcm94eVdpZGdldCA9IGxvYWRlci0+bG9hZE1lZGlhUGxheWVy
UHJveHlQbHVnaW4odGhpcywgdXJsLCBwYXJhbU5hbWVzLCBwYXJhbVZhbHVlcyk7CisgICAgbV9w
cm94eVdpZGdldCA9IGxvYWRlci0+c3ViZnJhbWVMb2FkZXIoKS0+bG9hZE1lZGlhUGxheWVyUHJv
eHlQbHVnaW4odGhpcywgdXJsLCBwYXJhbU5hbWVzLCBwYXJhbVZhbHVlcyk7CiAgICAgaWYgKG1f
cHJveHlXaWRnZXQpCiAgICAgICAgIG1fbmVlZFdpZGdldFVwZGF0ZSA9IGZhbHNlOwogfQpJbmRl
eDogV2ViQ29yZS9odG1sL0hUTUxGcmFtZUVsZW1lbnRCYXNlLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBX
ZWJDb3JlL2h0bWwvSFRNTEZyYW1lRWxlbWVudEJhc2UuY3BwCShyZXZpc2lvbiA2MTE5NykKKysr
IFdlYkNvcmUvaHRtbC9IVE1MRnJhbWVFbGVtZW50QmFzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTEwNCw3ICsxMDQsNyBAQAogICAgIGlmICghcGFyZW50RnJhbWUpCiAgICAgICAgIHJldHVybjsK
IAotICAgIHBhcmVudEZyYW1lLT5sb2FkZXIoKS0+cmVxdWVzdEZyYW1lKHRoaXMsIG1fVVJMLCBt
X2ZyYW1lTmFtZSwgbG9ja0hpc3RvcnksIGxvY2tCYWNrRm9yd2FyZExpc3QpOworICAgIHBhcmVu
dEZyYW1lLT5sb2FkZXIoKS0+c3ViZnJhbWVMb2FkZXIoKS0+cmVxdWVzdEZyYW1lKHRoaXMsIG1f
VVJMLCBtX2ZyYW1lTmFtZSwgbG9ja0hpc3RvcnksIGxvY2tCYWNrRm9yd2FyZExpc3QpOwogICAg
IGlmIChjb250ZW50RnJhbWUoKSkKICAgICAgICAgY29udGVudEZyYW1lKCktPnNldEluVmlld1Nv
dXJjZU1vZGUodmlld1NvdXJjZU1vZGUoKSk7CiB9CkluZGV4OiBXZWJDb3JlL3JlbmRlcmluZy9S
ZW5kZXJBcHBsZXQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckFw
cGxldC5jcHAJKHJldmlzaW9uIDYxMTk3KQorKysgV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQXBw
bGV0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzIsNyArNzIsNyBAQAogCiAgICAgRnJhbWUqIGZy
YW1lID0gdGhpcy0+ZnJhbWUoKTsKICAgICBBU1NFUlQoZnJhbWUpOwotICAgIHNldFdpZGdldChm
cmFtZS0+bG9hZGVyKCktPmNyZWF0ZUphdmFBcHBsZXRXaWRnZXQoSW50U2l6ZShjb250ZW50V2lk
dGgsIGNvbnRlbnRIZWlnaHQpLCBlbGVtZW50LCBtX2FyZ3MpKTsKKyAgICBzZXRXaWRnZXQoZnJh
bWUtPmxvYWRlcigpLT5zdWJmcmFtZUxvYWRlcigpLT5jcmVhdGVKYXZhQXBwbGV0V2lkZ2V0KElu
dFNpemUoY29udGVudFdpZHRoLCBjb250ZW50SGVpZ2h0KSwgZWxlbWVudCwgbV9hcmdzKSk7CiB9
CiAKIHZvaWQgUmVuZGVyQXBwbGV0OjpsYXlvdXQoKQpJbmRleDogV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVyRW1iZWRkZWRPYmplY3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlckVtYmVkZGVkT2JqZWN0LmNwcAkocmV2aXNpb24gNjExOTcpCisrKyBXZWJDb3JlL3Jl
bmRlcmluZy9SZW5kZXJFbWJlZGRlZE9iamVjdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE2NSw3
ICsxNjUsNyBAQAogICAgIFZlY3RvcjxTdHJpbmc+IHBhcmFtVmFsdWVzOwogICAgIEZyYW1lKiBm
cmFtZSA9IGZyYW1lVmlldygpLT5mcmFtZSgpOwogCi0gICAgLy8gVGhlIGNhbGxzIHRvIEZyYW1l
TG9hZGVyOjpyZXF1ZXN0T2JqZWN0IHdpdGhpbiB0aGlzIGZ1bmN0aW9uIGNhbiByZXN1bHQgaW4g
YSBwbHVnLWluIGJlaW5nIGluaXRpYWxpemVkLgorICAgIC8vIFRoZSBjYWxscyB0byBTdWJmcmFt
ZUxvYWRlcjo6cmVxdWVzdE9iamVjdCB3aXRoaW4gdGhpcyBmdW5jdGlvbiBjYW4gcmVzdWx0IGlu
IGEgcGx1Zy1pbiBiZWluZyBpbml0aWFsaXplZC4KICAgICAvLyBUaGlzIGNhbiBydW4gY2F1c2Ug
YXJiaXRyYXJ5IEphdmFTY3JpcHQgdG8gcnVuIGFuZCBtYXkgcmVzdWx0IGluIHRoaXMgUmVuZGVy
T2JqZWN0IGJlaW5nIGRldGFjaGVkIGZyb20KICAgICAvLyB0aGUgcmVuZGVyIHRyZWUgYW5kIGRl
c3Ryb3llZCwgY2F1c2luZyBhIGNyYXNoIGxpa2UgPHJkYXI6Ly9wcm9ibGVtLzY5NTQ1NDY+LiAg
QnkgZXh0ZW5kaW5nIG91ciBsaWZldGltZQogICAgIC8vIGFydGlmaWNhbGx5IHRvIGVuc3VyZSB0
aGF0IHdlIHJlbWFpbiBhbGl2ZSBmb3IgdGhlIGR1cmF0aW9uIG9mIHBsdWctaW4gaW5pdGlhbGl6
YXRpb24uCkBAIC0yODQsNyArMjg0LDcgQEAKICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAg
ICAgIH0KIAotICAgICAgICBib29sIHN1Y2Nlc3MgPSBvYmplY3RFbGVtZW50LT5kaXNwYXRjaEJl
Zm9yZUxvYWRFdmVudCh1cmwpICYmIGZyYW1lLT5sb2FkZXIoKS0+cmVxdWVzdE9iamVjdCh0aGlz
LCB1cmwsIG9iamVjdEVsZW1lbnQtPmdldEF0dHJpYnV0ZShuYW1lQXR0ciksIHNlcnZpY2VUeXBl
LCBwYXJhbU5hbWVzLCBwYXJhbVZhbHVlcyk7CisgICAgICAgIGJvb2wgc3VjY2VzcyA9IG9iamVj
dEVsZW1lbnQtPmRpc3BhdGNoQmVmb3JlTG9hZEV2ZW50KHVybCkgJiYgZnJhbWUtPmxvYWRlcigp
LT5zdWJmcmFtZUxvYWRlcigpLT5yZXF1ZXN0T2JqZWN0KHRoaXMsIHVybCwgb2JqZWN0RWxlbWVu
dC0+Z2V0QXR0cmlidXRlKG5hbWVBdHRyKSwgc2VydmljZVR5cGUsIHBhcmFtTmFtZXMsIHBhcmFt
VmFsdWVzKTsKICAgICAgICAgaWYgKCFzdWNjZXNzICYmIG1faGFzRmFsbGJhY2tDb250ZW50KQog
ICAgICAgICAgICAgb2JqZWN0RWxlbWVudC0+cmVuZGVyRmFsbGJhY2tDb250ZW50KCk7CiAKQEAg
LTMxOSw3ICszMTksNyBAQAogICAgICAgICB9CiAKICAgICAgICAgaWYgKGVtYmVkRWxlbWVudC0+
ZGlzcGF0Y2hCZWZvcmVMb2FkRXZlbnQodXJsKSkKLSAgICAgICAgICAgIGZyYW1lLT5sb2FkZXIo
KS0+cmVxdWVzdE9iamVjdCh0aGlzLCB1cmwsIGVtYmVkRWxlbWVudC0+Z2V0QXR0cmlidXRlKG5h
bWVBdHRyKSwgc2VydmljZVR5cGUsIHBhcmFtTmFtZXMsIHBhcmFtVmFsdWVzKTsKKyAgICAgICAg
ICAgIGZyYW1lLT5sb2FkZXIoKS0+c3ViZnJhbWVMb2FkZXIoKS0+cmVxdWVzdE9iamVjdCh0aGlz
LCB1cmwsIGVtYmVkRWxlbWVudC0+Z2V0QXR0cmlidXRlKG5hbWVBdHRyKSwgc2VydmljZVR5cGUs
IHBhcmFtTmFtZXMsIHBhcmFtVmFsdWVzKTsKICAgICB9CiAjaWYgRU5BQkxFKFBMVUdJTl9QUk9Y
WV9GT1JfVklERU8pICAgICAgICAKICAgICBlbHNlIGlmIChub2RlKCktPmhhc1RhZ05hbWUodmlk
ZW9UYWcpIHx8IG5vZGUoKS0+aGFzVGFnTmFtZShhdWRpb1RhZykpIHsKQEAgLTMyOCw3ICszMjgs
NyBAQAogCiAgICAgICAgIG1lZGlhRWxlbWVudC0+Z2V0UGx1Z2luUHJveHlQYXJhbXMoa3VybCwg
cGFyYW1OYW1lcywgcGFyYW1WYWx1ZXMpOwogICAgICAgICBtZWRpYUVsZW1lbnQtPnNldE5lZWRX
aWRnZXRVcGRhdGUoZmFsc2UpOwotICAgICAgICBmcmFtZS0+bG9hZGVyKCktPmxvYWRNZWRpYVBs
YXllclByb3h5UGx1Z2luKG5vZGUoKSwga3VybCwgcGFyYW1OYW1lcywgcGFyYW1WYWx1ZXMpOwor
ICAgICAgICBmcmFtZS0+bG9hZGVyKCktPnN1YmZyYW1lTG9hZGVyKCktPmxvYWRNZWRpYVBsYXll
clByb3h5UGx1Z2luKG5vZGUoKSwga3VybCwgcGFyYW1OYW1lcywgcGFyYW1WYWx1ZXMpOwogICAg
IH0KICNlbmRpZgogfQpJbmRleDogV2ViQ29yZS9DTWFrZUxpc3RzLnR4dAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBXZWJDb3JlL0NNYWtlTGlzdHMudHh0CShyZXZpc2lvbiA2MTE5NykKKysrIFdlYkNvcmUvQ01h
a2VMaXN0cy50eHQJKHdvcmtpbmcgY29weSkKQEAgLTEwNTUsNiArMTA1NSw3IEBACiAgICAgbG9h
ZGVyL1Jlc291cmNlTG9hZE5vdGlmaWVyLmNwcAogICAgIGxvYWRlci9SZXNvdXJjZUxvYWRlci5j
cHAKICAgICBsb2FkZXIvU2lua0RvY3VtZW50LmNwcAorICAgIGxvYWRlci9TdWJmcmFtZUxvYWRl
ci5jcHAKICAgICBsb2FkZXIvU3VicmVzb3VyY2VMb2FkZXIuY3BwCiAgICAgbG9hZGVyL1RleHRE
b2N1bWVudC5jcHAKICAgICBsb2FkZXIvVGV4dFJlc291cmNlRGVjb2Rlci5jcHAKSW5kZXg6IFdl
YkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdl
YkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiA2MTE5NykK
KysrIFdlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCSh3b3JraW5nIGNv
cHkpCkBAIC00ODU3LDYgKzQ4NTcsOCBAQAogCQlDRTU0RkQzODEwMTZEOUE2MDA4QjQ0QzggLyog
U2NyaXB0U291cmNlUHJvdmlkZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IENFNTRGRDM3MTAxNkQ5QTYwMDhCNDRDOCAvKiBTY3JpcHRTb3VyY2VQcm92
aWRlci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJ
CUNFRjQxOENFMTE3OTY3OEMwMDlEMTEyQyAvKiBWaWV3cG9ydEFyZ3VtZW50cy5jcHAgaW4gU291
cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBDRUY0MThDQzExNzk2NzhD
MDA5RDExMkMgLyogVmlld3BvcnRBcmd1bWVudHMuY3BwICovOyB9OwogCQlDRUY0MThDRjExNzk2
NzhDMDA5RDExMkMgLyogVmlld3BvcnRBcmd1bWVudHMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IENFRjQxOENEMTE3OTY3OEMwMDlEMTEyQyAvKiBWaWV3
cG9ydEFyZ3VtZW50cy5oICovOyB9OworCQlEMDAwRUQyNzExQzFCOUNEMDBDNDc3MjYgLyogU3Vi
ZnJhbWVMb2FkZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gRDAwMEVEMjUxMUMxQjlDRDAwQzQ3NzI2IC8qIFN1YmZyYW1lTG9hZGVyLmNwcCAqLzsg
fTsKKwkJRDAwMEVEMjgxMUMxQjlDRDAwQzQ3NzI2IC8qIFN1YmZyYW1lTG9hZGVyLmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBEMDAwRUQyNjExQzFCOUNE
MDBDNDc3MjYgLyogU3ViZnJhbWVMb2FkZXIuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9
IChQcml2YXRlLCApOyB9OyB9OwogCQlEMDFBMjdBRDEwQzlCRkQ4MDAwMjZBNDIgLyogU3BhY2VT
cGxpdFN0cmluZy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSBEMDFBMjdBQjEwQzlCRkQ4MDAwMjZBNDIgLyogU3BhY2VTcGxpdFN0cmluZy5jcHAgKi87
IH07CiAJCUQwMUEyN0FFMTBDOUJGRDgwMDAyNkE0MiAvKiBTcGFjZVNwbGl0U3RyaW5nLmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBEMDFBMjdBQzEwQzlC
RkQ4MDAwMjZBNDIgLyogU3BhY2VTcGxpdFN0cmluZy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJV
VEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCUQwNUNFRDI5MEE0MEJCMkMwMEM1QUYzOCAvKiBG
b3JtYXRCbG9ja0NvbW1hbmQuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gRDA1Q0VEMjcwQTQwQkIyQzAwQzVBRjM4IC8qIEZvcm1hdEJsb2NrQ29tbWFu
ZC5jcHAgKi87IH07CkBAIC0xMDM5MCw2ICsxMDM5Miw4IEBACiAJCUNFNTRGRDM3MTAxNkQ5QTYw
MDhCNDRDOCAvKiBTY3JpcHRTb3VyY2VQcm92aWRlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSBTY3JpcHRTb3VyY2VQcm92aWRlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQlDRUY0MThDQzExNzk2NzhDMDA5RDExMkMgLyogVmlld3BvcnRBcmd1bWVudHMuY3Bw
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gVmlld3BvcnRBcmd1bWVudHMu
Y3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlDRUY0MThDRDExNzk2NzhDMDA5RDEx
MkMgLyogVmlld3BvcnRBcmd1bWVudHMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRo
ID0gVmlld3BvcnRBcmd1bWVudHMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJRDAw
MEVEMjUxMUMxQjlDRDAwQzQ3NzI2IC8qIFN1YmZyYW1lTG9hZGVyLmNwcCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFN1YmZyYW1lTG9hZGVyLmNwcDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKKwkJRDAwMEVEMjYxMUMxQjlDRDAwQzQ3NzI2IC8qIFN1YmZyYW1lTG9h
ZGVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFN1YmZyYW1lTG9hZGVyLmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUQwMUEyN0FCMTBDOUJGRDgwMDAyNkE0MiAv
KiBTcGFjZVNwbGl0U3RyaW5nLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0
aCA9IFNwYWNlU3BsaXRTdHJpbmcuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlE
MDFBMjdBQzEwQzlCRkQ4MDAwMjZBNDIgLyogU3BhY2VTcGxpdFN0cmluZy5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBTcGFjZVNwbGl0U3RyaW5nLmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCUQwNUNFRDI3MEE0MEJCMkMwMEM1QUYzOCAvKiBGb3JtYXRCbG9ja0Nv
bW1hbmQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMw
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEZvcm1hdEJs
b2NrQ29tbWFuZC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0xNTY3Nyw2ICsx
NTY4MSw4IEBACiAJCUJDQjE2QkZCMDk3OUMzODcwMDQ2Nzc0MSAvKiBsb2FkZXIgKi8gPSB7CiAJ
CQlpc2EgPSBQQlhHcm91cDsKIAkJCWNoaWxkcmVuID0gKAorCQkJCUQwMDBFRDI1MTFDMUI5Q0Qw
MEM0NzcyNiAvKiBTdWJmcmFtZUxvYWRlci5jcHAgKi8sCisJCQkJRDAwMEVEMjYxMUMxQjlDRDAw
QzQ3NzI2IC8qIFN1YmZyYW1lTG9hZGVyLmggKi8sCiAJCQkJMUE4RjZCQjAwREI1NUNEQzAwMURC
Nzk0IC8qIGFwcGNhY2hlICovLAogCQkJCTUxMkREOEU4MEQ5MUU2OTEwMDBGODlFRSAvKiBhcmNo
aXZlICovLAogCQkJCTUxMjZFNkI2MEEyRTNBRUYwMDVDMjlGQSAvKiBpY29uICovLApAQCAtMTk0
MDQsNiArMTk0MTAsNyBAQAogCQkJCUUxQkU1MTJFMENGNkM1MTIwMDJFQTk1OSAvKiBYU0xUVW5p
Y29kZVNvcnQuaCBpbiBIZWFkZXJzICovLAogCQkJCTk3REQ0RDg3MEZERjRENkUwMEVDRjlBNCAv
KiBYU1NBdWRpdG9yLmggaW4gSGVhZGVycyAqLywKIAkJCQlDRTE3MkUwMTExMzZFOENFMDA2MkE1
MzMgLyogWm9vbU1vZGUuaCBpbiBIZWFkZXJzICovLAorCQkJCUQwMDBFRDI4MTFDMUI5Q0QwMEM0
NzcyNiAvKiBTdWJmcmFtZUxvYWRlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJOTdFNzkzNjYxMUM2
MDMwOTAwRTY0OUJDIC8qIEhUTUw1UHJlbG9hZFNjYW5uZXIuaCBpbiBIZWFkZXJzICovLAogCQkJ
CUI2NjkzRUVDMTFBRDYzRTYwMDNGMjc3MCAvKiBJREJPYmplY3RTdG9yZS5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJQjY2OTNFRUUxMUFENjNFNjAwM0YyNzcwIC8qIElEQk9iamVjdFN0b3JlUmVxdWVz
dC5oIGluIEhlYWRlcnMgKi8sCkBAIC0yMTcwNiw2ICsyMTcxMyw3IEBACiAJCQkJOTNGMTlCMDUw
ODI0NUU1OTAwMUU5QUJDIC8qIFhTTFRQcm9jZXNzb3JMaWJ4c2x0LmNwcCBpbiBTb3VyY2VzICov
LAogCQkJCUUxQkU1MTJEMENGNkM1MTIwMDJFQTk1OSAvKiBYU0xUVW5pY29kZVNvcnQuY3BwIGlu
IFNvdXJjZXMgKi8sCiAJCQkJOTdERDREODYwRkRGNEQ2RTAwRUNGOUE0IC8qIFhTU0F1ZGl0b3Iu
Y3BwIGluIFNvdXJjZXMgKi8sCisJCQkJRDAwMEVEMjcxMUMxQjlDRDAwQzQ3NzI2IC8qIFN1YmZy
YW1lTG9hZGVyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTk3RTc5MzY1MTFDNjAzMDkwMEU2NDlC
QyAvKiBIVE1MNVByZWxvYWRTY2FubmVyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUJDMjc1Qjc5
MTFDNUQxQzMwMEM5MjA2QyAvKiBKU1dlYktpdFBvaW50Q3VzdG9tLmNwcCBpbiBTb3VyY2VzICov
LAogCQkJCUJDMjc1QjdEMTFDNUQyMzUwMEM5MjA2QyAvKiBKU1dlYktpdENTU01hdHJpeEN1c3Rv
bS5jcHAgaW4gU291cmNlcyAqLywKSW5kZXg6IFdlYkNvcmUvQW5kcm9pZC5tawo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBXZWJDb3JlL0FuZHJvaWQubWsJKHJldmlzaW9uIDYxMTk3KQorKysgV2ViQ29yZS9BbmRy
b2lkLm1rCSh3b3JraW5nIGNvcHkpCkBAIC0zMTUsNiArMzE1LDcgQEAKIAlsb2FkZXIvUmVxdWVz
dC5jcHAgXAogCWxvYWRlci9SZXNvdXJjZUxvYWROb3RpZmllci5jcHAgXAogCWxvYWRlci9SZXNv
dXJjZUxvYWRlci5jcHAgXAorCWxvYWRlci9TdWJmcmFtZUxvYWRlci5jcHAgXAogCWxvYWRlci9T
dWJyZXNvdXJjZUxvYWRlci5jcHAgXAogCWxvYWRlci9UZXh0RG9jdW1lbnQuY3BwIFwKIAlsb2Fk
ZXIvVGV4dFJlc291cmNlRGVjb2Rlci5jcHAgXApJbmRleDogV2ViQ29yZS9sb2FkZXIvRnJhbWVM
b2FkZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvbG9hZGVyL0ZyYW1lTG9hZGVyLmNwcAko
cmV2aXNpb24gNjExOTcpCisrKyBXZWJDb3JlL2xvYWRlci9GcmFtZUxvYWRlci5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTU5LDEyICs1OSw3IEBACiAjaW5jbHVkZSAiRnJhbWVUcmVlLmgiCiAjaW5j
bHVkZSAiRnJhbWVWaWV3LmgiCiAjaW5jbHVkZSAiSFRNTEFuY2hvckVsZW1lbnQuaCIKLSNpbmNs
dWRlICJIVE1MQXBwbGV0RWxlbWVudC5oIgogI2luY2x1ZGUgIkhUTUxGb3JtRWxlbWVudC5oIgot
I2luY2x1ZGUgIkhUTUxGcmFtZUVsZW1lbnQuaCIKLSNpZiBFTkFCTEUoUExVR0lOX1BST1hZX0ZP
Ul9WSURFTykKLSNpbmNsdWRlICJIVE1MTWVkaWFFbGVtZW50LmgiCi0jZW5kaWYKICNpbmNsdWRl
ICJIVE1MTmFtZXMuaCIKICNpbmNsdWRlICJIVE1MT2JqZWN0RWxlbWVudC5oIgogI2luY2x1ZGUg
IkhUVFBQYXJzZXJzLmgiCkBAIC04NCwxMSArNzksNiBAQAogI2luY2x1ZGUgIlBsdWdpbkRhdGFi
YXNlLmgiCiAjaW5jbHVkZSAiUGx1Z2luRG9jdW1lbnQuaCIKICNpbmNsdWRlICJQcm9ncmVzc1Ry
YWNrZXIuaCIKLSNpbmNsdWRlICJSZW5kZXJFbWJlZGRlZE9iamVjdC5oIgotI2lmIEVOQUJMRShQ
TFVHSU5fUFJPWFlfRk9SX1ZJREVPKQotI2luY2x1ZGUgIlJlbmRlclZpZGVvLmgiCi0jZW5kaWYK
LSNpbmNsdWRlICJSZW5kZXJWaWV3LmgiCiAjaW5jbHVkZSAiUmVzb3VyY2VIYW5kbGUuaCIKICNp
bmNsdWRlICJSZXNvdXJjZVJlcXVlc3QuaCIKICNpbmNsdWRlICJTY3JpcHRDb250cm9sbGVyLmgi
CkBAIC0xMDcsNyArOTcsNiBAQAogI2luY2x1ZGUgIldpbmRvd0ZlYXR1cmVzLmgiCiAjaW5jbHVk
ZSAiWE1MSHR0cFJlcXVlc3QuaCIKICNpbmNsdWRlICJYTUxEb2N1bWVudFBhcnNlci5oIgotI2lu
Y2x1ZGUgIlhTU0F1ZGl0b3IuaCIKICNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+CiAjaW5j
bHVkZSA8d3RmL0N1cnJlbnRUaW1lLmg+CiAjaW5jbHVkZSA8d3RmL1N0ZExpYkV4dHJhcy5oPgpA
QCAtMTg5LDYgKzE3OCw3IEBACiAgICAgLCBtX2hpc3RvcnkoZnJhbWUpCiAgICAgLCBtX25vdGlm
ZXIoZnJhbWUpCiAgICAgLCBtX3dyaXRlcihmcmFtZSkKKyAgICAsIG1fc3ViZnJhbWVMb2FkZXIo
ZnJhbWUpCiAgICAgLCBtX3N0YXRlKEZyYW1lU3RhdGVDb21taXR0ZWRQYWdlKQogICAgICwgbV9s
b2FkVHlwZShGcmFtZUxvYWRUeXBlU3RhbmRhcmQpCiAgICAgLCBtX2RlbGVnYXRlSXNIYW5kbGlu
Z1Byb3Zpc2lvbmFsTG9hZEVycm9yKGZhbHNlKQpAQCAtMjA0LDcgKzE5NCw2IEBACiAgICAgLCBt
X2lzTG9hZGluZ01haW5SZXNvdXJjZShmYWxzZSkKICAgICAsIG1fbmVlZHNDbGVhcihmYWxzZSkK
ICAgICAsIG1fcmVjZWl2ZWREYXRhKGZhbHNlKQotICAgICwgbV9jb250YWluc1BsdWdJbnMoZmFs
c2UpCiAgICAgLCBtX2NoZWNrVGltZXIodGhpcywgJkZyYW1lTG9hZGVyOjpjaGVja1RpbWVyRmly
ZWQpCiAgICAgLCBtX3Nob3VsZENhbGxDaGVja0NvbXBsZXRlZChmYWxzZSkKICAgICAsIG1fc2hv
dWxkQ2FsbENoZWNrTG9hZENvbXBsZXRlKGZhbHNlKQpAQCAtMzgwLDg3ICszNjksNiBAQAogICAg
IG1fc3VwcHJlc3NPcGVuZXJJbk5ld0ZyYW1lID0gZmFsc2U7CiB9CiAKLWJvb2wgRnJhbWVMb2Fk
ZXI6OnJlcXVlc3RGcmFtZShIVE1MRnJhbWVPd25lckVsZW1lbnQqIG93bmVyRWxlbWVudCwgY29u
c3QgU3RyaW5nJiB1cmxTdHJpbmcsIGNvbnN0IEF0b21pY1N0cmluZyYgZnJhbWVOYW1lLCBib29s
IGxvY2tIaXN0b3J5LCBib29sIGxvY2tCYWNrRm9yd2FyZExpc3QpCi17Ci0gICAgLy8gU3VwcG9y
dCBmb3IgPGZyYW1lIHNyYz0iamF2YXNjcmlwdDpzdHJpbmciPgotICAgIEtVUkwgc2NyaXB0VVJM
OwotICAgIEtVUkwgdXJsOwotICAgIGlmIChwcm90b2NvbElzSmF2YVNjcmlwdCh1cmxTdHJpbmcp
KSB7Ci0gICAgICAgIHNjcmlwdFVSTCA9IGNvbXBsZXRlVVJMKHVybFN0cmluZyk7IC8vIGNvbXBs
ZXRlVVJMKCkgZW5jb2RlcyB0aGUgVVJMLgotICAgICAgICB1cmwgPSBibGFua1VSTCgpOwotICAg
IH0gZWxzZQotICAgICAgICB1cmwgPSBjb21wbGV0ZVVSTCh1cmxTdHJpbmcpOwotCi0gICAgRnJh
bWUqIGZyYW1lID0gb3duZXJFbGVtZW50LT5jb250ZW50RnJhbWUoKTsKLSAgICBpZiAoZnJhbWUp
Ci0gICAgICAgIGZyYW1lLT5yZWRpcmVjdFNjaGVkdWxlcigpLT5zY2hlZHVsZUxvY2F0aW9uQ2hh
bmdlKHVybC5zdHJpbmcoKSwgbV9vdXRnb2luZ1JlZmVycmVyLCBsb2NrSGlzdG9yeSwgbG9ja0Jh
Y2tGb3J3YXJkTGlzdCwgaXNQcm9jZXNzaW5nVXNlckdlc3R1cmUoKSk7Ci0gICAgZWxzZQotICAg
ICAgICBmcmFtZSA9IGxvYWRTdWJmcmFtZShvd25lckVsZW1lbnQsIHVybCwgZnJhbWVOYW1lLCBt
X291dGdvaW5nUmVmZXJyZXIpOwotICAgIAotICAgIGlmICghZnJhbWUpCi0gICAgICAgIHJldHVy
biBmYWxzZTsKLQotICAgIGlmICghc2NyaXB0VVJMLmlzRW1wdHkoKSkKLSAgICAgICAgZnJhbWUt
PnNjcmlwdCgpLT5leGVjdXRlSWZKYXZhU2NyaXB0VVJMKHNjcmlwdFVSTCk7Ci0KLSAgICByZXR1
cm4gdHJ1ZTsKLX0KLQotRnJhbWUqIEZyYW1lTG9hZGVyOjpsb2FkU3ViZnJhbWUoSFRNTEZyYW1l
T3duZXJFbGVtZW50KiBvd25lckVsZW1lbnQsIGNvbnN0IEtVUkwmIHVybCwgY29uc3QgU3RyaW5n
JiBuYW1lLCBjb25zdCBTdHJpbmcmIHJlZmVycmVyKQotewotICAgIGJvb2wgYWxsb3dzU2Nyb2xs
aW5nID0gdHJ1ZTsKLSAgICBpbnQgbWFyZ2luV2lkdGggPSAtMTsKLSAgICBpbnQgbWFyZ2luSGVp
Z2h0ID0gLTE7Ci0gICAgaWYgKG93bmVyRWxlbWVudC0+aGFzVGFnTmFtZShmcmFtZVRhZykgfHwg
b3duZXJFbGVtZW50LT5oYXNUYWdOYW1lKGlmcmFtZVRhZykpIHsKLSAgICAgICAgSFRNTEZyYW1l
RWxlbWVudEJhc2UqIG8gPSBzdGF0aWNfY2FzdDxIVE1MRnJhbWVFbGVtZW50QmFzZSo+KG93bmVy
RWxlbWVudCk7Ci0gICAgICAgIGFsbG93c1Njcm9sbGluZyA9IG8tPnNjcm9sbGluZ01vZGUoKSAh
PSBTY3JvbGxiYXJBbHdheXNPZmY7Ci0gICAgICAgIG1hcmdpbldpZHRoID0gby0+Z2V0TWFyZ2lu
V2lkdGgoKTsKLSAgICAgICAgbWFyZ2luSGVpZ2h0ID0gby0+Z2V0TWFyZ2luSGVpZ2h0KCk7Ci0g
ICAgfQotCi0gICAgaWYgKCFTZWN1cml0eU9yaWdpbjo6Y2FuTG9hZCh1cmwsIHJlZmVycmVyLCAw
KSkgewotICAgICAgICBGcmFtZUxvYWRlcjo6cmVwb3J0TG9jYWxMb2FkRmFpbGVkKG1fZnJhbWUs
IHVybC5zdHJpbmcoKSk7Ci0gICAgICAgIHJldHVybiAwOwotICAgIH0KLQotICAgIGJvb2wgaGlk
ZVJlZmVycmVyID0gU2VjdXJpdHlPcmlnaW46OnNob3VsZEhpZGVSZWZlcnJlcih1cmwsIHJlZmVy
cmVyKTsKLSAgICBSZWZQdHI8RnJhbWU+IGZyYW1lID0gbV9jbGllbnQtPmNyZWF0ZUZyYW1lKHVy
bCwgbmFtZSwgb3duZXJFbGVtZW50LCBoaWRlUmVmZXJyZXIgPyBTdHJpbmcoKSA6IHJlZmVycmVy
LCBhbGxvd3NTY3JvbGxpbmcsIG1hcmdpbldpZHRoLCBtYXJnaW5IZWlnaHQpOwotCi0gICAgaWYg
KCFmcmFtZSkgIHsKLSAgICAgICAgY2hlY2tDYWxsSW1wbGljaXRDbG9zZSgpOwotICAgICAgICBy
ZXR1cm4gMDsKLSAgICB9Ci0gICAgCi0gICAgLy8gQWxsIG5ldyBmcmFtZXMgd2lsbCBoYXZlIG1f
aXNDb21wbGV0ZSBzZXQgdG8gdHJ1ZSBhdCB0aGlzIHBvaW50IGR1ZSB0byBzeW5jaHJvbm91c2x5
IGxvYWRpbmcKLSAgICAvLyBhbiBlbXB0eSBkb2N1bWVudCBpbiBGcmFtZUxvYWRlcjo6aW5pdCgp
LiBCdXQgbWFueSBmcmFtZXMgd2lsbCBub3cgYmUgc3RhcnRpbmcgYW4KLSAgICAvLyBhc3luY2hy
b25vdXMgbG9hZCBvZiB1cmwsIHNvIHdlIHNldCBtX2lzQ29tcGxldGUgdG8gZmFsc2UgYW5kIHRo
ZW4gY2hlY2sgaWYgdGhlIGxvYWQgaXMKLSAgICAvLyBhY3R1YWxseSBjb21wbGV0ZWQgYmVsb3cu
IChOb3RlIHRoYXQgd2Ugc2V0IG1faXNDb21wbGV0ZSB0byBmYWxzZSBldmVuIGZvciBzeW5jaHJv
bm91cwotICAgIC8vIGxvYWRzLCBzbyB0aGF0IGNoZWNrQ29tcGxldGVkKCkgYmVsb3cgd29uJ3Qg
YmFpbCBlYXJseS4pCi0gICAgLy8gRklYTUU6IENhbiB3ZSByZW1vdmUgdGhpcyBlbnRpcmVseT8g
bV9pc0NvbXBsZXRlIG5vcm1hbGx5IGdldHMgc2V0IHRvIGZhbHNlIHdoZW4gYSBsb2FkIGlzIGNv
bW1pdHRlZC4KLSAgICBmcmFtZS0+bG9hZGVyKCktPm1faXNDb21wbGV0ZSA9IGZhbHNlOwotICAg
Ci0gICAgUmVuZGVyT2JqZWN0KiByZW5kZXJlciA9IG93bmVyRWxlbWVudC0+cmVuZGVyZXIoKTsK
LSAgICBGcmFtZVZpZXcqIHZpZXcgPSBmcmFtZS0+dmlldygpOwotICAgIGlmIChyZW5kZXJlciAm
JiByZW5kZXJlci0+aXNXaWRnZXQoKSAmJiB2aWV3KQotICAgICAgICB0b1JlbmRlcldpZGdldChy
ZW5kZXJlciktPnNldFdpZGdldCh2aWV3KTsKLSAgICAKLSAgICBjaGVja0NhbGxJbXBsaWNpdENs
b3NlKCk7Ci0gICAgCi0gICAgLy8gU29tZSBsb2FkcyBhcmUgcGVyZm9ybWVkIHN5bmNocm9ub3Vz
bHkgKGUuZy4sIGFib3V0OmJsYW5rIGFuZCBsb2FkcwotICAgIC8vIGNhbmNlbGxlZCBieSByZXR1
cm5pbmcgYSBudWxsIFJlc291cmNlUmVxdWVzdCBmcm9tIHJlcXVlc3RGcm9tRGVsZWdhdGUpLgot
ICAgIC8vIEluIHRoZXNlIGNhc2VzLCB0aGUgc3luY2hyb25vdXMgbG9hZCB3b3VsZCBoYXZlIGZp
bmlzaGVkCi0gICAgLy8gYmVmb3JlIHdlIGNvdWxkIGNvbm5lY3QgdGhlIHNpZ25hbHMsIHNvIG1h
a2Ugc3VyZSB0byBzZW5kIHRoZSAKLSAgICAvLyBjb21wbGV0ZWQoKSBzaWduYWwgZm9yIHRoZSBj
aGlsZCBieSBoYW5kIGFuZCBtYXJrIHRoZSBsb2FkIGFzIGJlaW5nCi0gICAgLy8gY29tcGxldGUu
Ci0gICAgLy8gRklYTUU6IEluIHRoaXMgY2FzZSB0aGUgRnJhbWUgd2lsbCBoYXZlIGZpbmlzaGVk
IGxvYWRpbmcgYmVmb3JlIAotICAgIC8vIGl0J3MgYmVpbmcgYWRkZWQgdG8gdGhlIGNoaWxkIGxp
c3QuIEl0IHdvdWxkIGJlIGEgZ29vZCBpZGVhIHRvCi0gICAgLy8gY3JlYXRlIHRoZSBjaGlsZCBm
aXJzdCwgdGhlbiBpbnZva2UgdGhlIGxvYWRlciBzZXBhcmF0ZWx5LgotICAgIGlmIChmcmFtZS0+
bG9hZGVyKCktPnN0YXRlKCkgPT0gRnJhbWVTdGF0ZUNvbXBsZXRlKQotICAgICAgICBmcmFtZS0+
bG9hZGVyKCktPmNoZWNrQ29tcGxldGVkKCk7Ci0KLSAgICByZXR1cm4gZnJhbWUuZ2V0KCk7Ci19
Ci0KIHZvaWQgRnJhbWVMb2FkZXI6OnN1Ym1pdEZvcm0oY29uc3QgY2hhciogYWN0aW9uLCBjb25z
dCBTdHJpbmcmIHVybCwgUGFzc1JlZlB0cjxGb3JtRGF0YT4gZm9ybURhdGEsCiAgICAgY29uc3Qg
U3RyaW5nJiB0YXJnZXQsIGNvbnN0IFN0cmluZyYgY29udGVudFR5cGUsIGNvbnN0IFN0cmluZyYg
Ym91bmRhcnksCiAgICAgYm9vbCBsb2NrSGlzdG9yeSwgUGFzc1JlZlB0cjxFdmVudD4gZXZlbnQs
IFBhc3NSZWZQdHI8Rm9ybVN0YXRlPiBmb3JtU3RhdGUpCkBAIC03NTgsNyArNjY2LDcgQEAKICAg
ICBtX2ZyYW1lLT5zZXREb2N1bWVudCgwKTsKICAgICB3cml0ZXIoKS0+Y2xlYXIoKTsKIAotICAg
IG1fY29udGFpbnNQbHVnSW5zID0gZmFsc2U7CisgICAgbV9zdWJmcmFtZUxvYWRlci5jbGVhcigp
OwogCiAgICAgaWYgKGNsZWFyU2NyaXB0T2JqZWN0cykKICAgICAgICAgbV9mcmFtZS0+c2NyaXB0
KCktPmNsZWFyU2NyaXB0T2JqZWN0cygpOwpAQCAtMTEyNSw2OCArMTAzMyw2IEBACiAgICAgbG9h
ZChkb2N1bWVudExvYWRlci5nZXQoKSk7CiB9CiAKLWJvb2wgRnJhbWVMb2FkZXI6OnJlcXVlc3RP
YmplY3QoUmVuZGVyRW1iZWRkZWRPYmplY3QqIHJlbmRlcmVyLCBjb25zdCBTdHJpbmcmIHVybCwg
Y29uc3QgQXRvbWljU3RyaW5nJiBmcmFtZU5hbWUsCi0gICAgY29uc3QgU3RyaW5nJiBtaW1lVHlw
ZSwgY29uc3QgVmVjdG9yPFN0cmluZz4mIHBhcmFtTmFtZXMsIGNvbnN0IFZlY3RvcjxTdHJpbmc+
JiBwYXJhbVZhbHVlcykKLXsKLSAgICBpZiAodXJsLmlzRW1wdHkoKSAmJiBtaW1lVHlwZS5pc0Vt
cHR5KCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAKLSAgICBpZiAoIW1fZnJhbWUtPnNj
cmlwdCgpLT54c3NBdWRpdG9yKCktPmNhbkxvYWRPYmplY3QodXJsKSkgewotICAgICAgICAvLyBJ
dCBpcyB1bnNhZmUgdG8gaG9ub3IgdGhlIHJlcXVlc3QgZm9yIHRoaXMgb2JqZWN0LgotICAgICAg
ICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgS1VSTCBjb21wbGV0ZWRVUkw7Ci0gICAgaWYg
KCF1cmwuaXNFbXB0eSgpKQotICAgICAgICBjb21wbGV0ZWRVUkwgPSBjb21wbGV0ZVVSTCh1cmwp
OwotCi0gICAgYm9vbCB1c2VGYWxsYmFjazsKLSAgICBpZiAoc2hvdWxkVXNlUGx1Z2luKGNvbXBs
ZXRlZFVSTCwgbWltZVR5cGUsIHJlbmRlcmVyLT5oYXNGYWxsYmFja0NvbnRlbnQoKSwgdXNlRmFs
bGJhY2spKSB7Ci0gICAgICAgIFNldHRpbmdzKiBzZXR0aW5ncyA9IG1fZnJhbWUtPnNldHRpbmdz
KCk7Ci0gICAgICAgIGlmICgoIWFsbG93UGx1Z2lucyhBYm91dFRvSW5zdGFudGlhdGVQbHVnaW4p
Ci0gICAgICAgICAgICAgLy8gQXBwbGljYXRpb24gcGx1Z2lucyBhcmUgcGx1Z2lucyBpbXBsZW1l
bnRlZCBieSB0aGUgdXNlciBhZ2VudCwgZm9yIGV4YW1wbGUgUXQgcGx1Z2lucywKLSAgICAgICAg
ICAgICAvLyBhcyBvcHBvc2VkIHRvIHRoaXJkLXBhcnR5IGNvZGUgc3VjaCBhcyBmbGFzaC4gVGhl
IHVzZXIgYWdlbnQgZGVjaWRlcyB3aGV0aGVyIG9yIG5vdCB0aGV5IGFyZQotICAgICAgICAgICAg
IC8vIHBlcm1pdHRlZCwgcmF0aGVyIHRoYW4gV2ViS2l0LgotICAgICAgICAgICAgICYmICFNSU1F
VHlwZVJlZ2lzdHJ5Ojppc0FwcGxpY2F0aW9uUGx1Z2luTUlNRVR5cGUobWltZVR5cGUpKQotICAg
ICAgICAgICAgfHwgKCFzZXR0aW5ncy0+aXNKYXZhRW5hYmxlZCgpICYmIE1JTUVUeXBlUmVnaXN0
cnk6OmlzSmF2YUFwcGxldE1JTUVUeXBlKG1pbWVUeXBlKSkpCi0gICAgICAgICAgICByZXR1cm4g
ZmFsc2U7Ci0gICAgICAgIGlmIChpc0RvY3VtZW50U2FuZGJveGVkKG1fZnJhbWUsIFNhbmRib3hQ
bHVnaW5zKSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgcmV0dXJuIGxvYWRQ
bHVnaW4ocmVuZGVyZXIsIGNvbXBsZXRlZFVSTCwgbWltZVR5cGUsIHBhcmFtTmFtZXMsIHBhcmFt
VmFsdWVzLCB1c2VGYWxsYmFjayk7Ci0gICAgfQotCi0gICAgQVNTRVJUKHJlbmRlcmVyLT5ub2Rl
KCktPmhhc1RhZ05hbWUob2JqZWN0VGFnKSB8fCByZW5kZXJlci0+bm9kZSgpLT5oYXNUYWdOYW1l
KGVtYmVkVGFnKSk7Ci0gICAgSFRNTFBsdWdJbkVsZW1lbnQqIGVsZW1lbnQgPSBzdGF0aWNfY2Fz
dDxIVE1MUGx1Z0luRWxlbWVudCo+KHJlbmRlcmVyLT5ub2RlKCkpOwotCi0gICAgLy8gSWYgdGhl
IHBsdWctaW4gZWxlbWVudCBhbHJlYWR5IGNvbnRhaW5zIGEgc3ViZnJhbWUsIHJlcXVlc3RGcmFt
ZSB3aWxsIHJlLXVzZSBpdC4gT3RoZXJ3aXNlLAotICAgIC8vIGl0IHdpbGwgY3JlYXRlIGEgbmV3
IGZyYW1lIGFuZCBzZXQgaXQgYXMgdGhlIFJlbmRlclBhcnQncyB3aWRnZXQsIGNhdXNpbmcgd2hh
dCB3YXMgcHJldmlvdXNseSAKLSAgICAvLyBpbiB0aGUgd2lkZ2V0IHRvIGJlIHRvcm4gZG93bi4K
LSAgICByZXR1cm4gcmVxdWVzdEZyYW1lKGVsZW1lbnQsIGNvbXBsZXRlZFVSTCwgZnJhbWVOYW1l
KTsKLX0KLQotYm9vbCBGcmFtZUxvYWRlcjo6c2hvdWxkVXNlUGx1Z2luKGNvbnN0IEtVUkwmIHVy
bCwgY29uc3QgU3RyaW5nJiBtaW1lVHlwZSwgYm9vbCBoYXNGYWxsYmFjaywgYm9vbCYgdXNlRmFs
bGJhY2spCi17Ci0gICAgaWYgKG1fY2xpZW50LT5zaG91bGRVc2VQbHVnaW5Eb2N1bWVudChtaW1l
VHlwZSkpIHsKLSAgICAgICAgdXNlRmFsbGJhY2sgPSBmYWxzZTsKLSAgICAgICAgcmV0dXJuIHRy
dWU7Ci0gICAgfQotCi0gICAgLy8gQWxsb3cgb3RoZXIgcGx1Zy1pbnMgdG8gd2luIG92ZXIgUXVp
Y2tUaW1lIGJlY2F1c2UgaWYgdGhlIHVzZXIgaGFzIGluc3RhbGxlZCBhIHBsdWctaW4gdGhhdAot
ICAgIC8vIGNhbiBoYW5kbGUgVElGRiAod2hpY2ggUXVpY2tUaW1lIGNhbiBhbHNvIGhhbmRsZSkg
dGhleSBwcm9iYWJseSBpbnRlbmRlZCB0byBvdmVycmlkZSBRVC4KLSAgICBpZiAobV9mcmFtZS0+
cGFnZSgpICYmIChtaW1lVHlwZSA9PSAiaW1hZ2UvdGlmZiIgfHwgbWltZVR5cGUgPT0gImltYWdl
L3RpZiIgfHwgbWltZVR5cGUgPT0gImltYWdlL3gtdGlmZiIpKSB7Ci0gICAgICAgIGNvbnN0IFBs
dWdpbkRhdGEqIHBsdWdpbkRhdGEgPSBtX2ZyYW1lLT5wYWdlKCktPnBsdWdpbkRhdGEoKTsKLSAg
ICAgICAgU3RyaW5nIHBsdWdpbk5hbWUgPSBwbHVnaW5EYXRhID8gcGx1Z2luRGF0YS0+cGx1Z2lu
TmFtZUZvck1pbWVUeXBlKG1pbWVUeXBlKSA6IFN0cmluZygpOwotICAgICAgICBpZiAoIXBsdWdp
bk5hbWUuaXNFbXB0eSgpICYmICFwbHVnaW5OYW1lLmNvbnRhaW5zKCJRdWlja1RpbWUiLCBmYWxz
ZSkpIAotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotICAgICAgICAKLSAgICBPYmpl
Y3RDb250ZW50VHlwZSBvYmplY3RUeXBlID0gbV9jbGllbnQtPm9iamVjdENvbnRlbnRUeXBlKHVy
bCwgbWltZVR5cGUpOwotICAgIC8vIElmIGFuIG9iamVjdCdzIGNvbnRlbnQgY2FuJ3QgYmUgaGFu
ZGxlZCBhbmQgaXQgaGFzIG5vIGZhbGxiYWNrLCBsZXQKLSAgICAvLyBpdCBiZSBoYW5kbGVkIGFz
IGEgcGx1Z2luIHRvIHNob3cgdGhlIGJyb2tlbiBwbHVnaW4gaWNvbi4KLSAgICB1c2VGYWxsYmFj
ayA9IG9iamVjdFR5cGUgPT0gT2JqZWN0Q29udGVudE5vbmUgJiYgaGFzRmFsbGJhY2s7Ci0gICAg
cmV0dXJuIG9iamVjdFR5cGUgPT0gT2JqZWN0Q29udGVudE5vbmUgfHwgb2JqZWN0VHlwZSA9PSBP
YmplY3RDb250ZW50TmV0c2NhcGVQbHVnaW4gfHwgb2JqZWN0VHlwZSA9PSBPYmplY3RDb250ZW50
T3RoZXJQbHVnaW47Ci19Ci0KIE9iamVjdENvbnRlbnRUeXBlIEZyYW1lTG9hZGVyOjpkZWZhdWx0
T2JqZWN0Q29udGVudFR5cGUoY29uc3QgS1VSTCYgdXJsLCBjb25zdCBTdHJpbmcmIG1pbWVUeXBl
SW4pCiB7CiAgICAgU3RyaW5nIG1pbWVUeXBlID0gbWltZVR5cGVJbjsKQEAgLTEyMTEsOTEgKzEw
NTcsNiBAQAogICAgIHJldHVybiBXZWJDb3JlOjpPYmplY3RDb250ZW50Tm9uZTsKIH0KIAotc3Rh
dGljIEhUTUxQbHVnSW5FbGVtZW50KiB0b1BsdWdJbkVsZW1lbnQoTm9kZSogbm9kZSkKLXsKLSAg
ICBpZiAoIW5vZGUpCi0gICAgICAgIHJldHVybiAwOwotCi0gICAgQVNTRVJUKG5vZGUtPmhhc1Rh
Z05hbWUob2JqZWN0VGFnKSB8fCBub2RlLT5oYXNUYWdOYW1lKGVtYmVkVGFnKSAKLSAgICAgICAg
fHwgbm9kZS0+aGFzVGFnTmFtZShhcHBsZXRUYWcpKTsKLQotICAgIHJldHVybiBzdGF0aWNfY2Fz
dDxIVE1MUGx1Z0luRWxlbWVudCo+KG5vZGUpOwotfQotICAgIAotYm9vbCBGcmFtZUxvYWRlcjo6
bG9hZFBsdWdpbihSZW5kZXJFbWJlZGRlZE9iamVjdCogcmVuZGVyZXIsIGNvbnN0IEtVUkwmIHVy
bCwgY29uc3QgU3RyaW5nJiBtaW1lVHlwZSwgCi0gICAgY29uc3QgVmVjdG9yPFN0cmluZz4mIHBh
cmFtTmFtZXMsIGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBwYXJhbVZhbHVlcywgYm9vbCB1c2VGYWxs
YmFjaykKLXsKLSAgICBSZWZQdHI8V2lkZ2V0PiB3aWRnZXQ7Ci0KLSAgICBpZiAocmVuZGVyZXIg
JiYgIXVzZUZhbGxiYWNrKSB7Ci0gICAgICAgIEhUTUxQbHVnSW5FbGVtZW50KiBlbGVtZW50ID0g
dG9QbHVnSW5FbGVtZW50KHJlbmRlcmVyLT5ub2RlKCkpOwotCi0gICAgICAgIGlmICghU2VjdXJp
dHlPcmlnaW46OmNhbkxvYWQodXJsLCBTdHJpbmcoKSwgZnJhbWUoKS0+ZG9jdW1lbnQoKSkpIHsK
LSAgICAgICAgICAgIEZyYW1lTG9hZGVyOjpyZXBvcnRMb2NhbExvYWRGYWlsZWQobV9mcmFtZSwg
dXJsLnN0cmluZygpKTsKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgfQotCi0g
ICAgICAgIGNoZWNrSWZSdW5JbnNlY3VyZUNvbnRlbnQobV9mcmFtZS0+ZG9jdW1lbnQoKS0+c2Vj
dXJpdHlPcmlnaW4oKSwgdXJsKTsKLQotICAgICAgICB3aWRnZXQgPSBtX2NsaWVudC0+Y3JlYXRl
UGx1Z2luKEludFNpemUocmVuZGVyZXItPmNvbnRlbnRXaWR0aCgpLCByZW5kZXJlci0+Y29udGVu
dEhlaWdodCgpKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbGVt
ZW50LCB1cmwsIHBhcmFtTmFtZXMsIHBhcmFtVmFsdWVzLCBtaW1lVHlwZSwKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX2ZyYW1lLT5kb2N1bWVudCgpLT5pc1BsdWdp
bkRvY3VtZW50KCkgJiYgIW1fY29udGFpbnNQbHVnSW5zKTsKLSAgICAgICAgaWYgKHdpZGdldCkg
ewotICAgICAgICAgICAgcmVuZGVyZXItPnNldFdpZGdldCh3aWRnZXQpOwotICAgICAgICAgICAg
bV9jb250YWluc1BsdWdJbnMgPSB0cnVlOwotCi0jaWYgRU5BQkxFKFBMVUdJTl9QUk9YWV9GT1Jf
VklERU8pCi0gICAgICAgICAgICByZW5kZXJlci0+bm9kZSgpLT5zZXROZWVkc1N0eWxlUmVjYWxj
KFN5bnRoZXRpY1N0eWxlQ2hhbmdlKTsKLSNlbmRpZgotICAgICAgICB9IGVsc2UKLSAgICAgICAg
ICAgIHJlbmRlcmVyLT5zZXRTaG93c01pc3NpbmdQbHVnaW5JbmRpY2F0b3IoKTsKLSAgICB9Ci0K
LSAgICByZXR1cm4gd2lkZ2V0ICE9IDA7Ci19Ci0KLSNpZiBFTkFCTEUoUExVR0lOX1BST1hZX0ZP
Ul9WSURFTykKLVBhc3NSZWZQdHI8V2lkZ2V0PiBGcmFtZUxvYWRlcjo6bG9hZE1lZGlhUGxheWVy
UHJveHlQbHVnaW4oTm9kZSogbm9kZSwgY29uc3QgS1VSTCYgdXJsLCAKLSAgICBjb25zdCBWZWN0
b3I8U3RyaW5nPiYgcGFyYW1OYW1lcywgY29uc3QgVmVjdG9yPFN0cmluZz4mIHBhcmFtVmFsdWVz
KQotewotICAgIEFTU0VSVChub2RlLT5oYXNUYWdOYW1lKHZpZGVvVGFnKSB8fCBub2RlLT5oYXNU
YWdOYW1lKGF1ZGlvVGFnKSk7Ci0KLSAgICBpZiAoIW1fZnJhbWUtPnNjcmlwdCgpLT54c3NBdWRp
dG9yKCktPmNhbkxvYWRPYmplY3QodXJsLnN0cmluZygpKSkKLSAgICAgICAgcmV0dXJuIDA7Ci0K
LSAgICBLVVJMIGNvbXBsZXRlZFVSTDsKLSAgICBpZiAoIXVybC5pc0VtcHR5KCkpCi0gICAgICAg
IGNvbXBsZXRlZFVSTCA9IGNvbXBsZXRlVVJMKHVybCk7Ci0KLSAgICBpZiAoIVNlY3VyaXR5T3Jp
Z2luOjpjYW5Mb2FkKGNvbXBsZXRlZFVSTCwgU3RyaW5nKCksIGZyYW1lKCktPmRvY3VtZW50KCkp
KSB7Ci0gICAgICAgIEZyYW1lTG9hZGVyOjpyZXBvcnRMb2NhbExvYWRGYWlsZWQobV9mcmFtZSwg
Y29tcGxldGVkVVJMLnN0cmluZygpKTsKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgfQotCi0gICAg
SFRNTE1lZGlhRWxlbWVudCogbWVkaWFFbGVtZW50ID0gc3RhdGljX2Nhc3Q8SFRNTE1lZGlhRWxl
bWVudCo+KG5vZGUpOwotICAgIFJlbmRlclBhcnQqIHJlbmRlcmVyID0gdG9SZW5kZXJQYXJ0KG5v
ZGUtPnJlbmRlcmVyKCkpOwotICAgIEludFNpemUgc2l6ZTsKLQotICAgIGlmIChyZW5kZXJlcikK
LSAgICAgICAgc2l6ZSA9IEludFNpemUocmVuZGVyZXItPmNvbnRlbnRXaWR0aCgpLCByZW5kZXJl
ci0+Y29udGVudEhlaWdodCgpKTsKLSAgICBlbHNlIGlmIChtZWRpYUVsZW1lbnQtPmlzVmlkZW8o
KSkKLSAgICAgICAgc2l6ZSA9IFJlbmRlclZpZGVvOjpkZWZhdWx0U2l6ZSgpOwotCi0gICAgY2hl
Y2tJZlJ1bkluc2VjdXJlQ29udGVudChtX2ZyYW1lLT5kb2N1bWVudCgpLT5zZWN1cml0eU9yaWdp
bigpLCBjb21wbGV0ZWRVUkwpOwotCi0gICAgUmVmUHRyPFdpZGdldD4gd2lkZ2V0ID0gbV9jbGll
bnQtPmNyZWF0ZU1lZGlhUGxheWVyUHJveHlQbHVnaW4oc2l6ZSwgbWVkaWFFbGVtZW50LCBjb21w
bGV0ZWRVUkwsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcmFt
TmFtZXMsIHBhcmFtVmFsdWVzLCAiYXBwbGljYXRpb24veC1tZWRpYS1lbGVtZW50LXByb3h5LXBs
dWdpbiIpOwotCi0gICAgaWYgKHdpZGdldCAmJiByZW5kZXJlcikgewotICAgICAgICByZW5kZXJl
ci0+c2V0V2lkZ2V0KHdpZGdldCk7Ci0gICAgICAgIG1fY29udGFpbnNQbHVnSW5zID0gdHJ1ZTsK
LSAgICAgICAgcmVuZGVyZXItPm5vZGUoKS0+c2V0TmVlZHNTdHlsZVJlY2FsYyhTeW50aGV0aWNT
dHlsZUNoYW5nZSk7Ci0gICAgfQotCi0gICAgcmV0dXJuIHdpZGdldCA/IHdpZGdldC5yZWxlYXNl
KCkgOiAwOwotfQotI2VuZGlmIC8vIEVOQUJMRShQTFVHSU5fUFJPWFlfRk9SX1ZJREVPKQotCiBT
dHJpbmcgRnJhbWVMb2FkZXI6Om91dGdvaW5nUmVmZXJyZXIoKSBjb25zdAogewogICAgIHJldHVy
biBtX291dGdvaW5nUmVmZXJyZXI7CkBAIC0xNTI0LDIwICsxMjg1LDYgQEAKICAgICAgICAgZnJh
bWUtPmxvYWRlcigpLT5tX2lzQ29tcGxldGUgPSBmYWxzZTsKIH0KIAotYm9vbCBGcmFtZUxvYWRl
cjo6YWxsb3dQbHVnaW5zKFJlYXNvbkZvckNhbGxpbmdBbGxvd1BsdWdpbnMgcmVhc29uKQotewot
ICAgIFNldHRpbmdzKiBzZXR0aW5ncyA9IG1fZnJhbWUtPnNldHRpbmdzKCk7Ci0gICAgYm9vbCBh
bGxvd2VkID0gbV9jbGllbnQtPmFsbG93UGx1Z2lucyhzZXR0aW5ncyAmJiBzZXR0aW5ncy0+YXJl
UGx1Z2luc0VuYWJsZWQoKSk7Ci0gICAgaWYgKCFhbGxvd2VkICYmIHJlYXNvbiA9PSBBYm91dFRv
SW5zdGFudGlhdGVQbHVnaW4pCi0gICAgICAgIG1fZnJhbWUtPmxvYWRlcigpLT5jbGllbnQoKS0+
ZGlkTm90QWxsb3dQbHVnaW5zKCk7Ci0gICAgcmV0dXJuIGFsbG93ZWQ7Ci19Ci0KLWJvb2wgRnJh
bWVMb2FkZXI6OmNvbnRhaW5zUGx1Z2lucygpIGNvbnN0IAoteyAKLSAgICByZXR1cm4gbV9jb250
YWluc1BsdWdJbnM7Ci19Ci0KIHZvaWQgRnJhbWVMb2FkZXI6OnByZXBhcmVGb3JMb2FkU3RhcnQo
KQogewogICAgIGlmIChQYWdlKiBwYWdlID0gbV9mcmFtZS0+cGFnZSgpKQpAQCAtMzY5Myw0MiAr
MzQ0MCw2IEBACiAgICAgICAgIGNoaWxkLT5sb2FkZXIoKS0+dXBkYXRlU2FuZGJveEZsYWdzKCk7
CiB9CiAKLVBhc3NSZWZQdHI8V2lkZ2V0PiBGcmFtZUxvYWRlcjo6Y3JlYXRlSmF2YUFwcGxldFdp
ZGdldChjb25zdCBJbnRTaXplJiBzaXplLCBIVE1MQXBwbGV0RWxlbWVudCogZWxlbWVudCwgY29u
c3QgSGFzaE1hcDxTdHJpbmcsIFN0cmluZz4mIGFyZ3MpCi17Ci0gICAgU3RyaW5nIGJhc2VVUkxT
dHJpbmc7Ci0gICAgU3RyaW5nIGNvZGVCYXNlVVJMU3RyaW5nOwotICAgIFZlY3RvcjxTdHJpbmc+
IHBhcmFtTmFtZXM7Ci0gICAgVmVjdG9yPFN0cmluZz4gcGFyYW1WYWx1ZXM7Ci0gICAgSGFzaE1h
cDxTdHJpbmcsIFN0cmluZz46OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IGFyZ3MuZW5kKCk7Ci0gICAg
Zm9yIChIYXNoTWFwPFN0cmluZywgU3RyaW5nPjo6Y29uc3RfaXRlcmF0b3IgaXQgPSBhcmdzLmJl
Z2luKCk7IGl0ICE9IGVuZDsgKytpdCkgewotICAgICAgICBpZiAoZXF1YWxJZ25vcmluZ0Nhc2Uo
aXQtPmZpcnN0LCAiYmFzZXVybCIpKQotICAgICAgICAgICAgYmFzZVVSTFN0cmluZyA9IGl0LT5z
ZWNvbmQ7Ci0gICAgICAgIGVsc2UgaWYgKGVxdWFsSWdub3JpbmdDYXNlKGl0LT5maXJzdCwgImNv
ZGViYXNlIikpCi0gICAgICAgICAgICBjb2RlQmFzZVVSTFN0cmluZyA9IGl0LT5zZWNvbmQ7Ci0g
ICAgICAgIHBhcmFtTmFtZXMuYXBwZW5kKGl0LT5maXJzdCk7Ci0gICAgICAgIHBhcmFtVmFsdWVz
LmFwcGVuZChpdC0+c2Vjb25kKTsKLSAgICB9Ci0KLSAgICBpZiAoIWNvZGVCYXNlVVJMU3RyaW5n
LmlzRW1wdHkoKSkgewotICAgICAgICBLVVJMIGNvZGVCYXNlVVJMID0gY29tcGxldGVVUkwoY29k
ZUJhc2VVUkxTdHJpbmcpOwotICAgICAgICBpZiAoIVNlY3VyaXR5T3JpZ2luOjpjYW5Mb2FkKGNv
ZGVCYXNlVVJMLCBTdHJpbmcoKSwgZWxlbWVudC0+ZG9jdW1lbnQoKSkpIHsKLSAgICAgICAgICAg
IEZyYW1lTG9hZGVyOjpyZXBvcnRMb2NhbExvYWRGYWlsZWQobV9mcmFtZSwgY29kZUJhc2VVUkwu
c3RyaW5nKCkpOwotICAgICAgICAgICAgcmV0dXJuIDA7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAg
ICBpZiAoYmFzZVVSTFN0cmluZy5pc0VtcHR5KCkpCi0gICAgICAgIGJhc2VVUkxTdHJpbmcgPSBt
X2ZyYW1lLT5kb2N1bWVudCgpLT5iYXNlVVJMKCkuc3RyaW5nKCk7Ci0gICAgS1VSTCBiYXNlVVJM
ID0gY29tcGxldGVVUkwoYmFzZVVSTFN0cmluZyk7Ci0KLSAgICBSZWZQdHI8V2lkZ2V0PiB3aWRn
ZXQgPSBtX2NsaWVudC0+Y3JlYXRlSmF2YUFwcGxldFdpZGdldChzaXplLCBlbGVtZW50LCBiYXNl
VVJMLCBwYXJhbU5hbWVzLCBwYXJhbVZhbHVlcyk7Ci0gICAgaWYgKCF3aWRnZXQpCi0gICAgICAg
IHJldHVybiAwOwotCi0gICAgbV9jb250YWluc1BsdWdJbnMgPSB0cnVlOwotICAgIHJldHVybiB3
aWRnZXQ7Ci19Ci0KIHZvaWQgRnJhbWVMb2FkZXI6OmRpZENoYW5nZVRpdGxlKERvY3VtZW50TG9h
ZGVyKiBsb2FkZXIpCiB7CiAgICAgbV9jbGllbnQtPmRpZENoYW5nZVRpdGxlKGxvYWRlcik7Cklu
ZGV4OiBXZWJDb3JlL2xvYWRlci9NYWluUmVzb3VyY2VMb2FkZXIuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFdlYkNvcmUvbG9hZGVyL01haW5SZXNvdXJjZUxvYWRlci5jcHAJKHJldmlzaW9uIDYxMTk3KQor
KysgV2ViQ29yZS9sb2FkZXIvTWFpblJlc291cmNlTG9hZGVyLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMjg1LDcgKzI4NSw3IEBACiAjaWYgUExBVEZPUk0oUVQpCiB2b2lkIE1haW5SZXNvdXJjZUxv
YWRlcjo6c3Vic3RpdHV0ZU1JTUVUeXBlRnJvbVBsdWdpbkRhdGFiYXNlKGNvbnN0IFJlc291cmNl
UmVzcG9uc2UmIHIpCiB7Ci0gICAgaWYgKCFtX2ZyYW1lLT5sb2FkZXIoKS0+YWxsb3dQbHVnaW5z
KE5vdEFib3V0VG9JbnN0YW50aWF0ZVBsdWdpbikpCisgICAgaWYgKCFtX2ZyYW1lLT5sb2FkZXIo
KS0+c3ViZnJhbWVMb2FkZXIoKS0+YWxsb3dQbHVnaW5zKE5vdEFib3V0VG9JbnN0YW50aWF0ZVBs
dWdpbikpCiAgICAgICAgIHJldHVybjsKIAogICAgIFN0cmluZyBmaWxlbmFtZSA9IHIudXJsKCku
bGFzdFBhdGhDb21wb25lbnQoKTsKSW5kZXg6IFdlYkNvcmUvbG9hZGVyL1BsdWdpbkRvY3VtZW50
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2xvYWRlci9QbHVnaW5Eb2N1bWVudC5jcHAJKHJl
dmlzaW9uIDYxMTk3KQorKysgV2ViQ29yZS9sb2FkZXIvUGx1Z2luRG9jdW1lbnQuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xMTksNyArMTE5LDcgQEAKIAogICAgIGlmIChGcmFtZSogZnJhbWUgPSBt
X2RvYy0+ZnJhbWUoKSkgewogICAgICAgICBTZXR0aW5ncyogc2V0dGluZ3MgPSBmcmFtZS0+c2V0
dGluZ3MoKTsKLSAgICAgICAgaWYgKHNldHRpbmdzICYmIGZyYW1lLT5sb2FkZXIoKS0+YWxsb3dQ
bHVnaW5zKE5vdEFib3V0VG9JbnN0YW50aWF0ZVBsdWdpbikpIHsKKyAgICAgICAgaWYgKHNldHRp
bmdzICYmIGZyYW1lLT5sb2FkZXIoKS0+c3ViZnJhbWVMb2FkZXIoKS0+YWxsb3dQbHVnaW5zKE5v
dEFib3V0VG9JbnN0YW50aWF0ZVBsdWdpbikpIHsKICAgICAgICAgICAgIG1fZG9jLT51cGRhdGVM
YXlvdXQoKTsKIAogICAgICAgICAgICAgaWYgKFJlbmRlcldpZGdldCogcmVuZGVyZXIgPSB0b1Jl
bmRlcldpZGdldChtX2VtYmVkRWxlbWVudC0+cmVuZGVyZXIoKSkpIHsKSW5kZXg6IFdlYkNvcmUv
bG9hZGVyL1N1YmZyYW1lTG9hZGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9sb2FkZXIvU3Vi
ZnJhbWVMb2FkZXIuaAkocmV2aXNpb24gMCkKKysrIFdlYkNvcmUvbG9hZGVyL1N1YmZyYW1lTG9h
ZGVyLmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsOTIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMDYsIDIwMDcsIDIwMDgsIDIwMDkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICogQ29weXJpZ2h0IChDKSAyMDA4LCAyMDA5IFRvcmNoIE1vYmlsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuIChodHRwOi8vd3d3LnRvcmNobW9iaWxlLmNvbS8pCisgKiBDb3B5cmlnaHQgKEMp
IFJlc2VhcmNoIEluIE1vdGlvbiBMaW1pdGVkIDIwMDkuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKgorICogMS4gIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLiAKKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAq
ICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLiAKKyAqIDMuICBOZWl0aGVyIHRoZSBuYW1lIG9mIEFwcGxlIENvbXB1
dGVyLCBJbmMuICgiQXBwbGUiKSBub3IgdGhlIG5hbWVzIG9mCisgKiAgICAgaXRzIGNvbnRyaWJ1
dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZAor
ICogICAgIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4g
cGVybWlzc2lvbi4gCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBB
TkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQK
KyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1B
R0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJP
RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKKyAqIE9O
IEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKKyAqIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKwor
I2lmbmRlZiBTdWJmcmFtZUxvYWRlcl9oCisjZGVmaW5lIFN1YmZyYW1lTG9hZGVyX2gKKworI2lu
Y2x1ZGUgIkZyYW1lTG9hZGVyVHlwZXMuaCIKKyNpbmNsdWRlICJQbGF0Zm9ybVN0cmluZy5oIgor
I2luY2x1ZGUgPHd0Zi9Gb3J3YXJkLmg+CisjaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KKyNpbmNs
dWRlIDx3dGYvTm9uY29weWFibGUuaD4KKyNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CisKK25hbWVz
cGFjZSBXZWJDb3JlIHsKKworY2xhc3MgQXRvbWljU3RyaW5nOworY2xhc3MgRnJhbWU7CitjbGFz
cyBGcmFtZUxvYWRlckNsaWVudDsKK2NsYXNzIEhUTUxBcHBsZXRFbGVtZW50OworY2xhc3MgSFRN
TEZyYW1lT3duZXJFbGVtZW50OworY2xhc3MgSW50U2l6ZTsKK2NsYXNzIEtVUkw7CisjaWYgRU5B
QkxFKFBMVUdJTl9QUk9YWV9GT1JfVklERU8pCitjbGFzcyBOb2RlOworI2VuZGlmCitjbGFzcyBS
ZW5kZXJFbWJlZGRlZE9iamVjdDsKK2NsYXNzIFdpZGdldDsKKworLy8gVGhpcyBpcyBhIHNsaWdo
dCBtaXNub21lci4gSXQgaGFuZGxlcyB0aGUgaGlnaGVyIGxldmVsIGxvZ2ljIG9mIGxvYWRpbmcg
Ym90aCBzdWJmcmFtZXMgYW5kIHBsdWdpbnMuCitjbGFzcyBTdWJmcmFtZUxvYWRlciA6IHB1Ymxp
YyBOb25jb3B5YWJsZSB7CitwdWJsaWM6CisgICAgU3ViZnJhbWVMb2FkZXIoRnJhbWUqKTsKKwor
ICAgIHZvaWQgY2xlYXIoKTsKKworICAgIGJvb2wgcmVxdWVzdEZyYW1lKEhUTUxGcmFtZU93bmVy
RWxlbWVudCosIGNvbnN0IFN0cmluZyYgdXJsLCBjb25zdCBBdG9taWNTdHJpbmcmIGZyYW1lTmFt
ZSwgYm9vbCBsb2NrSGlzdG9yeSA9IHRydWUsIGJvb2wgbG9ja0JhY2tGb3J3YXJkTGlzdCA9IHRy
dWUpOyAgICAKKyAgICBib29sIHJlcXVlc3RPYmplY3QoUmVuZGVyRW1iZWRkZWRPYmplY3QqLCBj
b25zdCBTdHJpbmcmIHVybCwgY29uc3QgQXRvbWljU3RyaW5nJiBmcmFtZU5hbWUsCisgICAgICAg
IGNvbnN0IFN0cmluZyYgc2VydmljZVR5cGUsIGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBwYXJhbU5h
bWVzLCBjb25zdCBWZWN0b3I8U3RyaW5nPiYgcGFyYW1WYWx1ZXMpOworCisjaWYgRU5BQkxFKFBM
VUdJTl9QUk9YWV9GT1JfVklERU8pCisgICAgUGFzc1JlZlB0cjxXaWRnZXQ+IGxvYWRNZWRpYVBs
YXllclByb3h5UGx1Z2luKE5vZGUqLCBjb25zdCBLVVJMJiwgY29uc3QgVmVjdG9yPFN0cmluZz4m
IHBhcmFtTmFtZXMsIGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBwYXJhbVZhbHVlcyk7CisjZW5kaWYK
KworICAgIFBhc3NSZWZQdHI8V2lkZ2V0PiBjcmVhdGVKYXZhQXBwbGV0V2lkZ2V0KGNvbnN0IElu
dFNpemUmLCBIVE1MQXBwbGV0RWxlbWVudCosIGNvbnN0IEhhc2hNYXA8U3RyaW5nLCBTdHJpbmc+
JiBhcmdzKTsKKworICAgIGJvb2wgYWxsb3dQbHVnaW5zKFJlYXNvbkZvckNhbGxpbmdBbGxvd1Bs
dWdpbnMpOworCisgICAgYm9vbCBjb250YWluc1BsdWdpbnMoKSBjb25zdCB7IHJldHVybiBtX2Nv
bnRhaW5zUGx1Z2luczsgfQorCitwcml2YXRlOgorICAgIEZyYW1lKiBsb2FkU3ViZnJhbWUoSFRN
TEZyYW1lT3duZXJFbGVtZW50KiwgY29uc3QgS1VSTCYsIGNvbnN0IFN0cmluZyYgbmFtZSwgY29u
c3QgU3RyaW5nJiByZWZlcnJlcik7CisgICAgYm9vbCBsb2FkUGx1Z2luKFJlbmRlckVtYmVkZGVk
T2JqZWN0KiwgY29uc3QgS1VSTCYsIGNvbnN0IFN0cmluZyYgbWltZVR5cGUsCisgICAgICAgIGNv
bnN0IFZlY3RvcjxTdHJpbmc+JiBwYXJhbU5hbWVzLCBjb25zdCBWZWN0b3I8U3RyaW5nPiYgcGFy
YW1WYWx1ZXMsIGJvb2wgdXNlRmFsbGJhY2spOworCisgICAgYm9vbCBzaG91bGRVc2VQbHVnaW4o
Y29uc3QgS1VSTCYsIGNvbnN0IFN0cmluZyYgbWltZVR5cGUsIGJvb2wgaGFzRmFsbGJhY2ssIGJv
b2wmIHVzZUZhbGxiYWNrKTsKKworICAgIGJvb2wgbV9jb250YWluc1BsdWdpbnM7CisgICAgRnJh
bWUqIG1fZnJhbWU7CisKKyAgICBLVVJMIGNvbXBsZXRlVVJMKGNvbnN0IFN0cmluZyYpIGNvbnN0
OworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gU3ViZnJhbWVMb2Fk
ZXJfaApJbmRleDogV2ViQ29yZS9sb2FkZXIvRnJhbWVMb2FkZXIuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBX
ZWJDb3JlL2xvYWRlci9GcmFtZUxvYWRlci5oCShyZXZpc2lvbiA2MTE5NykKKysrIFdlYkNvcmUv
bG9hZGVyL0ZyYW1lTG9hZGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTQwLDYgKzQwLDcgQEAKICNp
bmNsdWRlICJSZWRpcmVjdFNjaGVkdWxlci5oIgogI2luY2x1ZGUgIlJlc291cmNlTG9hZE5vdGlm
aWVyLmgiCiAjaW5jbHVkZSAiUmVzb3VyY2VSZXF1ZXN0LmgiCisjaW5jbHVkZSAiU3ViZnJhbWVM
b2FkZXIuaCIKICNpbmNsdWRlICJUaHJlYWRhYmxlTG9hZGVyLmgiCiAjaW5jbHVkZSAiVGltZXIu
aCIKICNpbmNsdWRlIDx3dGYvRm9yd2FyZC5oPgpAQCAtNjAsMTcgKzYxLDEwIEBACiBjbGFzcyBG
cmFtZTsKIGNsYXNzIEZyYW1lTG9hZGVyQ2xpZW50OwogY2xhc3MgSGlzdG9yeUl0ZW07Ci1jbGFz
cyBIVE1MQXBwbGV0RWxlbWVudDsKIGNsYXNzIEhUTUxGb3JtRWxlbWVudDsKLWNsYXNzIEhUTUxG
cmFtZU93bmVyRWxlbWVudDsKIGNsYXNzIEljb25Mb2FkZXI7Ci1jbGFzcyBJbnRTaXplOwogY2xh
c3MgTmF2aWdhdGlvbkFjdGlvbjsKLSNpZiBFTkFCTEUoUExVR0lOX1BST1hZX0ZPUl9WSURFTykK
LWNsYXNzIE5vZGU7Ci0jZW5kaWYKIGNsYXNzIFByb3RlY3Rpb25TcGFjZTsKLWNsYXNzIFJlbmRl
ckVtYmVkZGVkT2JqZWN0OwogY2xhc3MgUmVzb3VyY2VFcnJvcjsKIGNsYXNzIFJlc291cmNlTG9h
ZGVyOwogY2xhc3MgUmVzb3VyY2VSZXNwb25zZTsKQEAgLTgyLDcgKzc2LDYgQEAKIGNsYXNzIFNo
YXJlZEJ1ZmZlcjsKIGNsYXNzIFN1YnN0aXR1dGVEYXRhOwogY2xhc3MgVGV4dFJlc291cmNlRGVj
b2RlcjsKLWNsYXNzIFdpZGdldDsKIAogc3RydWN0IEZyYW1lTG9hZFJlcXVlc3Q7CiBzdHJ1Y3Qg
V2luZG93RmVhdHVyZXM7CkBAIC0xMDIsNiArOTUsNyBAQAogICAgIEhpc3RvcnlDb250cm9sbGVy
KiBoaXN0b3J5KCkgY29uc3QgeyByZXR1cm4gJm1faGlzdG9yeTsgfQogICAgIFJlc291cmNlTG9h
ZE5vdGlmaWVyKiBub3RpZmllcigpIGNvbnN0IHsgcmV0dXJuICZtX25vdGlmZXI7IH0KICAgICBE
b2N1bWVudFdyaXRlciogd3JpdGVyKCkgY29uc3QgeyByZXR1cm4gJm1fd3JpdGVyOyB9CisgICAg
U3ViZnJhbWVMb2FkZXIqIHN1YmZyYW1lTG9hZGVyKCkgY29uc3QgeyByZXR1cm4gJm1fc3ViZnJh
bWVMb2FkZXI7IH0KIAogICAgIC8vIEZJWE1FOiBUaGlzIGlzIG5vdCBjb29sLCBwZW9wbGUuIFRo
ZXJlIGFyZSB0b28gbWFueSBkaWZmZXJlbnQgZnVuY3Rpb25zIHRoYXQgYWxsIHN0YXJ0IGxvYWRz
LgogICAgIC8vIFdlIHNob3VsZCBhaW0gdG8gY29uc29saWRhdGUgdGhlc2UgaW50byBhIHNtYWxs
ZXIgc2V0IG9mIGZ1bmN0aW9ucywgYW5kIHRyeSB0byByZXVzZSBtb3JlIG9mCkBAIC0yMjIsNyAr
MjE2LDYgQEAKIAogICAgIHZvaWQgY2hhbmdlTG9jYXRpb24oY29uc3QgS1VSTCYsIGNvbnN0IFN0
cmluZyYgcmVmZXJyZXIsIGJvb2wgbG9ja0hpc3RvcnkgPSB0cnVlLCBib29sIGxvY2tCYWNrRm9y
d2FyZExpc3QgPSB0cnVlLCBib29sIHVzZXJHZXN0dXJlID0gZmFsc2UsIGJvb2wgcmVmcmVzaCA9
IGZhbHNlKTsKICAgICB2b2lkIHVybFNlbGVjdGVkKGNvbnN0IEtVUkwmLCBjb25zdCBTdHJpbmcm
IHRhcmdldCwgUGFzc1JlZlB0cjxFdmVudD4sIGJvb2wgbG9ja0hpc3RvcnksIGJvb2wgbG9ja0Jh
Y2tGb3J3YXJkTGlzdCwgYm9vbCB1c2VyR2VzdHVyZSwgUmVmZXJyZXJQb2xpY3kpOwotICAgIGJv
b2wgcmVxdWVzdEZyYW1lKEhUTUxGcmFtZU93bmVyRWxlbWVudCosIGNvbnN0IFN0cmluZyYgdXJs
LCBjb25zdCBBdG9taWNTdHJpbmcmIGZyYW1lTmFtZSwgYm9vbCBsb2NrSGlzdG9yeSA9IHRydWUs
IGJvb2wgbG9ja0JhY2tGb3J3YXJkTGlzdCA9IHRydWUpOwogCiAgICAgdm9pZCBzdWJtaXRGb3Jt
KGNvbnN0IGNoYXIqIGFjdGlvbiwgY29uc3QgU3RyaW5nJiB1cmwsCiAgICAgICAgIFBhc3NSZWZQ
dHI8Rm9ybURhdGE+LCBjb25zdCBTdHJpbmcmIHRhcmdldCwgY29uc3QgU3RyaW5nJiBjb250ZW50
VHlwZSwgY29uc3QgU3RyaW5nJiBib3VuZGFyeSwKQEAgLTI0Nyw4ICsyNDAsNiBAQAogICAgIHZv
aWQgaGFuZGxlZE9ubG9hZEV2ZW50cygpOwogICAgIFN0cmluZyB1c2VyQWdlbnQoY29uc3QgS1VS
TCYpIGNvbnN0OwogCi0gICAgUGFzc1JlZlB0cjxXaWRnZXQ+IGNyZWF0ZUphdmFBcHBsZXRXaWRn
ZXQoY29uc3QgSW50U2l6ZSYsIEhUTUxBcHBsZXRFbGVtZW50KiwgY29uc3QgSGFzaE1hcDxTdHJp
bmcsIFN0cmluZz4mIGFyZ3MpOwotCiAgICAgdm9pZCBkaXNwYXRjaERpZENsZWFyV2luZG93T2Jq
ZWN0SW5Xb3JsZChET01XcmFwcGVyV29ybGQqKTsKICAgICB2b2lkIGRpc3BhdGNoRGlkQ2xlYXJX
aW5kb3dPYmplY3RzSW5BbGxXb3JsZHMoKTsKICAgICB2b2lkIGRpc3BhdGNoRG9jdW1lbnRFbGVt
ZW50QXZhaWxhYmxlKCk7CkBAIC0yODQsOSArMjc1LDYgQEAKICAgICAvLyBzZXRVUkwgaXMgYSBs
b3ctbGV2ZWwgc2V0dGVyIGFuZCBkb2VzIG5vdCB0cmlnZ2VyIGxvYWRpbmcuCiAgICAgdm9pZCBz
ZXRVUkwoY29uc3QgS1VSTCYpOwogCi0gICAgYm9vbCBhbGxvd1BsdWdpbnMoUmVhc29uRm9yQ2Fs
bGluZ0FsbG93UGx1Z2lucyk7Ci0gICAgYm9vbCBjb250YWluc1BsdWdpbnMoKSBjb25zdDsKLQog
ICAgIHZvaWQgbG9hZERvbmUoKTsKICAgICB2b2lkIGZpbmlzaGVkUGFyc2luZygpOwogICAgIHZv
aWQgY2hlY2tDb21wbGV0ZWQoKTsKQEAgLTI5NSw5ICsyODMsNiBAQAogCiAgICAgYm9vbCBpc0Nv
bXBsZXRlKCkgY29uc3Q7CiAKLSAgICBib29sIHJlcXVlc3RPYmplY3QoUmVuZGVyRW1iZWRkZWRP
YmplY3QqLCBjb25zdCBTdHJpbmcmIHVybCwgY29uc3QgQXRvbWljU3RyaW5nJiBmcmFtZU5hbWUs
Ci0gICAgICAgIGNvbnN0IFN0cmluZyYgc2VydmljZVR5cGUsIGNvbnN0IFZlY3RvcjxTdHJpbmc+
JiBwYXJhbU5hbWVzLCBjb25zdCBWZWN0b3I8U3RyaW5nPiYgcGFyYW1WYWx1ZXMpOwotCiAgICAg
S1VSTCBjb21wbGV0ZVVSTChjb25zdCBTdHJpbmcmIHVybCk7CiAKICAgICB2b2lkIGNhbmNlbEFu
ZENsZWFyKCk7CkBAIC0zMjUsMTAgKzMxMCw2IEBACiAKICAgICB2b2lkIG9wZW4oQ2FjaGVkRnJh
bWVCYXNlJik7CiAKLSNpZiBFTkFCTEUoUExVR0lOX1BST1hZX0ZPUl9WSURFTykKLSAgICBQYXNz
UmVmUHRyPFdpZGdldD4gbG9hZE1lZGlhUGxheWVyUHJveHlQbHVnaW4oTm9kZSosIGNvbnN0IEtV
UkwmLCBjb25zdCBWZWN0b3I8U3RyaW5nPiYgcGFyYW1OYW1lcywgY29uc3QgVmVjdG9yPFN0cmlu
Zz4mIHBhcmFtVmFsdWVzKTsKLSNlbmRpZgotCiAgICAgLy8gRklYTUU6IFNob3VsZCB0aGVzZSBy
ZWFsbHkgYmUgcHVibGljPwogICAgIHZvaWQgY29tcGxldGVkKCk7CiAgICAgYm9vbCBhbGxBbmNl
c3RvcnNBcmVDb21wbGV0ZSgpIGNvbnN0OyAvLyBpbmNsdWRpbmcgdGhpcwpAQCAtMzUzLDYgKzMz
NCw4IEBACiAgICAgYm9vbCBxdWlja1JlZGlyZWN0Q29taW5nKCkgY29uc3QgeyByZXR1cm4gbV9x
dWlja1JlZGlyZWN0Q29taW5nOyB9CiAKICAgICBib29sIHNob3VsZENsb3NlKCk7CisgICAgCisg
ICAgdm9pZCBzdGFydGVkKCk7CiAKIHByaXZhdGU6CiAgICAgYm9vbCBjYW5DYWNoZVBhZ2VDb250
YWluaW5nVGhpc0ZyYW1lKCk7CkBAIC0zNjIsMTIgKzM0NSw2IEBACiAjZW5kaWYKIAogICAgIHZv
aWQgY2hlY2tUaW1lckZpcmVkKFRpbWVyPEZyYW1lTG9hZGVyPiopOwotCi0gICAgdm9pZCBzdGFy
dGVkKCk7Ci0KLSAgICBib29sIHNob3VsZFVzZVBsdWdpbihjb25zdCBLVVJMJiwgY29uc3QgU3Ry
aW5nJiBtaW1lVHlwZSwgYm9vbCBoYXNGYWxsYmFjaywgYm9vbCYgdXNlRmFsbGJhY2spOwotICAg
IGJvb2wgbG9hZFBsdWdpbihSZW5kZXJFbWJlZGRlZE9iamVjdCosIGNvbnN0IEtVUkwmLCBjb25z
dCBTdHJpbmcmIG1pbWVUeXBlLAotICAgICAgICBjb25zdCBWZWN0b3I8U3RyaW5nPiYgcGFyYW1O
YW1lcywgY29uc3QgVmVjdG9yPFN0cmluZz4mIHBhcmFtVmFsdWVzLCBib29sIHVzZUZhbGxiYWNr
KTsKICAgICAKICAgICB2b2lkIG5hdmlnYXRlV2l0aGluRG9jdW1lbnQoSGlzdG9yeUl0ZW0qKTsK
ICAgICB2b2lkIG5hdmlnYXRlVG9EaWZmZXJlbnREb2N1bWVudChIaXN0b3J5SXRlbSosIEZyYW1l
TG9hZFR5cGUpOwpAQCAtNDQzLDggKzQyMCw2IEBACiAgICAgdm9pZCBkZXRhY2hDaGlsZHJlbigp
OwogICAgIHZvaWQgY2xvc2VBbmRSZW1vdmVDaGlsZChGcmFtZSopOwogCi0gICAgRnJhbWUqIGxv
YWRTdWJmcmFtZShIVE1MRnJhbWVPd25lckVsZW1lbnQqLCBjb25zdCBLVVJMJiwgY29uc3QgU3Ry
aW5nJiBuYW1lLCBjb25zdCBTdHJpbmcmIHJlZmVycmVyKTsKLQogICAgIHZvaWQgbG9hZEluU2Ft
ZURvY3VtZW50KGNvbnN0IEtVUkwmLCBTZXJpYWxpemVkU2NyaXB0VmFsdWUqIHN0YXRlT2JqZWN0
LCBib29sIGlzTmV3TmF2aWdhdGlvbik7CiAKICAgICB2b2lkIHByb3Zpc2lvbmFsTG9hZFN0YXJ0
ZWQoKTsKQEAgLTQ3MCw2ICs0NDUsNyBAQAogICAgIG11dGFibGUgSGlzdG9yeUNvbnRyb2xsZXIg
bV9oaXN0b3J5OwogICAgIG11dGFibGUgUmVzb3VyY2VMb2FkTm90aWZpZXIgbV9ub3RpZmVyOwog
ICAgIG11dGFibGUgRG9jdW1lbnRXcml0ZXIgbV93cml0ZXI7CisgICAgbXV0YWJsZSBTdWJmcmFt
ZUxvYWRlciBtX3N1YmZyYW1lTG9hZGVyOwogCiAgICAgRnJhbWVTdGF0ZSBtX3N0YXRlOwogICAg
IEZyYW1lTG9hZFR5cGUgbV9sb2FkVHlwZTsKQEAgLTUxMiw4ICs0ODgsNiBAQAogICAgIGJvb2wg
bV9uZWVkc0NsZWFyOwogICAgIGJvb2wgbV9yZWNlaXZlZERhdGE7CiAKLSAgICBib29sIG1fY29u
dGFpbnNQbHVnSW5zOwotCiAgICAgS1VSTCBtX3N1Ym1pdHRlZEZvcm1VUkw7CiAKICAgICBUaW1l
cjxGcmFtZUxvYWRlcj4gbV9jaGVja1RpbWVyOwpJbmRleDogV2ViQ29yZS9sb2FkZXIvU3ViZnJh
bWVMb2FkZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvbG9hZGVyL1N1YmZyYW1lTG9hZGVy
LmNwcAkocmV2aXNpb24gMCkKKysrIFdlYkNvcmUvbG9hZGVyL1N1YmZyYW1lTG9hZGVyLmNwcAko
cmV2aXNpb24gMCkKQEAgLTAsMCArMSwzNTEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYs
IDIwMDcsIDIwMDgsIDIwMDksIDIwMTAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICogQ29weXJpZ2h0IChDKSAyMDA4IE5va2lhIENvcnBvcmF0aW9uIGFuZC9vciBpdHMgc3Vic2lk
aWFyeSgtaWVzKQorICogQ29weXJpZ2h0IChDKSAyMDA4LCAyMDA5IFRvcmNoIE1vYmlsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuIChodHRwOi8vd3d3LnRvcmNobW9iaWxlLmNvbS8pCisgKiBD
b3B5cmlnaHQgKEMpIDIwMDggQWxwIFRva2VyIDxhbHBAYXRva2VyLmNvbT4KKyAqIENvcHlyaWdo
dCAoQykgUmVzZWFyY2ggSW4gTW90aW9uIExpbWl0ZWQgMjAwOS4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqCisgKiAx
LiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuIAorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uIAorICogMy4gIE5laXRoZXIgdGhlIG5hbWUgb2YgQXBwbGUg
Q29tcHV0ZXIsIEluYy4gKCJBcHBsZSIpIG5vciB0aGUgbmFtZXMgb2YKKyAqICAgICBpdHMgY29u
dHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJp
dmVkCisgKiAgICAgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3Jp
dHRlbiBwZXJtaXNzaW9uLiAKKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1Q
TElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFM
IERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQg
T0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBP
UiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAor
ICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgorICogVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAq
LworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiU3ViZnJhbWVMb2FkZXIuaCIKKwor
I2luY2x1ZGUgIkZyYW1lLmgiCisjaW5jbHVkZSAiRnJhbWVMb2FkZXJDbGllbnQuaCIKKyNpbmNs
dWRlICJIVE1MQXBwbGV0RWxlbWVudC5oIgorI2luY2x1ZGUgIkhUTUxGcmFtZUVsZW1lbnRCYXNl
LmgiCisjaWYgRU5BQkxFKFBMVUdJTl9QUk9YWV9GT1JfVklERU8pCisjaW5jbHVkZSAiSFRNTE1l
ZGlhRWxlbWVudC5oIgorI2VuZGlmCisjaW5jbHVkZSAiSFRNTE5hbWVzLmgiCisjaW5jbHVkZSAi
SFRNTFBsdWdJbkVsZW1lbnQuaCIKKyNpbmNsdWRlICJNSU1FVHlwZVJlZ2lzdHJ5LmgiCisjaW5j
bHVkZSAiTm9kZS5oIgorI2luY2x1ZGUgIlBhZ2UuaCIKKyNpbmNsdWRlICJQbHVnaW5EYXRhLmgi
CisjaW5jbHVkZSAiUmVuZGVyRW1iZWRkZWRPYmplY3QuaCIKKyNpZiBFTkFCTEUoUExVR0lOX1BS
T1hZX0ZPUl9WSURFTykKKyNpbmNsdWRlICJSZW5kZXJWaWRlby5oIgorI2VuZGlmCisjaW5jbHVk
ZSAiUmVuZGVyVmlldy5oIgorI2luY2x1ZGUgIlNldHRpbmdzLmgiCisjaW5jbHVkZSAiWFNTQXVk
aXRvci5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisgICAgCit1c2luZyBuYW1lc3BhY2UgSFRN
TE5hbWVzOworCitTdWJmcmFtZUxvYWRlcjo6U3ViZnJhbWVMb2FkZXIoRnJhbWUqIGZyYW1lKQor
ICAgIDogbV9mcmFtZShmcmFtZSkKK3sKK30KKworc3RhdGljIEhUTUxQbHVnSW5FbGVtZW50KiB0
b1BsdWdJbkVsZW1lbnQoTm9kZSogbm9kZSkKK3sKKyAgICBpZiAoIW5vZGUpCisgICAgICAgIHJl
dHVybiAwOworCisgICAgQVNTRVJUKG5vZGUtPmhhc1RhZ05hbWUob2JqZWN0VGFnKSB8fCBub2Rl
LT5oYXNUYWdOYW1lKGVtYmVkVGFnKSB8fCBub2RlLT5oYXNUYWdOYW1lKGFwcGxldFRhZykpOwor
CisgICAgcmV0dXJuIHN0YXRpY19jYXN0PEhUTUxQbHVnSW5FbGVtZW50Kj4obm9kZSk7Cit9CisK
K3ZvaWQgU3ViZnJhbWVMb2FkZXI6OmNsZWFyKCkKK3sKKyAgICBtX2NvbnRhaW5zUGx1Z2lucyA9
IGZhbHNlOworfQorCitib29sIFN1YmZyYW1lTG9hZGVyOjpyZXF1ZXN0RnJhbWUoSFRNTEZyYW1l
T3duZXJFbGVtZW50KiBvd25lckVsZW1lbnQsIGNvbnN0IFN0cmluZyYgdXJsU3RyaW5nLCBjb25z
dCBBdG9taWNTdHJpbmcmIGZyYW1lTmFtZSwgYm9vbCBsb2NrSGlzdG9yeSwgYm9vbCBsb2NrQmFj
a0ZvcndhcmRMaXN0KQoreworICAgIC8vIFN1cHBvcnQgZm9yIDxmcmFtZSBzcmM9ImphdmFzY3Jp
cHQ6c3RyaW5nIj4KKyAgICBLVVJMIHNjcmlwdFVSTDsKKyAgICBLVVJMIHVybDsKKyAgICBpZiAo
cHJvdG9jb2xJc0phdmFTY3JpcHQodXJsU3RyaW5nKSkgeworICAgICAgICBzY3JpcHRVUkwgPSBj
b21wbGV0ZVVSTCh1cmxTdHJpbmcpOyAvLyBjb21wbGV0ZVVSTCgpIGVuY29kZXMgdGhlIFVSTC4K
KyAgICAgICAgdXJsID0gYmxhbmtVUkwoKTsKKyAgICB9IGVsc2UKKyAgICAgICAgdXJsID0gY29t
cGxldGVVUkwodXJsU3RyaW5nKTsKKworICAgIEZyYW1lKiBmcmFtZSA9IG93bmVyRWxlbWVudC0+
Y29udGVudEZyYW1lKCk7CisgICAgaWYgKGZyYW1lKQorICAgICAgICBmcmFtZS0+cmVkaXJlY3RT
Y2hlZHVsZXIoKS0+c2NoZWR1bGVMb2NhdGlvbkNoYW5nZSh1cmwuc3RyaW5nKCksIG1fZnJhbWUt
PmxvYWRlcigpLT5vdXRnb2luZ1JlZmVycmVyKCksIGxvY2tIaXN0b3J5LCBsb2NrQmFja0Zvcndh
cmRMaXN0LCBtX2ZyYW1lLT5sb2FkZXIoKS0+aXNQcm9jZXNzaW5nVXNlckdlc3R1cmUoKSk7Cisg
ICAgZWxzZQorICAgICAgICBmcmFtZSA9IGxvYWRTdWJmcmFtZShvd25lckVsZW1lbnQsIHVybCwg
ZnJhbWVOYW1lLCBtX2ZyYW1lLT5sb2FkZXIoKS0+b3V0Z29pbmdSZWZlcnJlcigpKTsKKyAgICAK
KyAgICBpZiAoIWZyYW1lKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBpZiAoIXNjcmlw
dFVSTC5pc0VtcHR5KCkpCisgICAgICAgIGZyYW1lLT5zY3JpcHQoKS0+ZXhlY3V0ZUlmSmF2YVNj
cmlwdFVSTChzY3JpcHRVUkwpOworCisgICAgcmV0dXJuIHRydWU7Cit9CisKK2Jvb2wgU3ViZnJh
bWVMb2FkZXI6OnJlcXVlc3RPYmplY3QoUmVuZGVyRW1iZWRkZWRPYmplY3QqIHJlbmRlcmVyLCBj
b25zdCBTdHJpbmcmIHVybCwgY29uc3QgQXRvbWljU3RyaW5nJiBmcmFtZU5hbWUsCisgICAgY29u
c3QgU3RyaW5nJiBtaW1lVHlwZSwgY29uc3QgVmVjdG9yPFN0cmluZz4mIHBhcmFtTmFtZXMsIGNv
bnN0IFZlY3RvcjxTdHJpbmc+JiBwYXJhbVZhbHVlcykKK3sKKyAgICBpZiAodXJsLmlzRW1wdHko
KSAmJiBtaW1lVHlwZS5pc0VtcHR5KCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAKKyAg
ICBpZiAoIW1fZnJhbWUtPnNjcmlwdCgpLT54c3NBdWRpdG9yKCktPmNhbkxvYWRPYmplY3QodXJs
KSkgeworICAgICAgICAvLyBJdCBpcyB1bnNhZmUgdG8gaG9ub3IgdGhlIHJlcXVlc3QgZm9yIHRo
aXMgb2JqZWN0LgorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgS1VSTCBjb21w
bGV0ZWRVUkw7CisgICAgaWYgKCF1cmwuaXNFbXB0eSgpKQorICAgICAgICBjb21wbGV0ZWRVUkwg
PSBjb21wbGV0ZVVSTCh1cmwpOworCisgICAgYm9vbCB1c2VGYWxsYmFjazsKKyAgICBpZiAoc2hv
dWxkVXNlUGx1Z2luKGNvbXBsZXRlZFVSTCwgbWltZVR5cGUsIHJlbmRlcmVyLT5oYXNGYWxsYmFj
a0NvbnRlbnQoKSwgdXNlRmFsbGJhY2spKSB7CisgICAgICAgIFNldHRpbmdzKiBzZXR0aW5ncyA9
IG1fZnJhbWUtPnNldHRpbmdzKCk7CisgICAgICAgIGlmICgoIWFsbG93UGx1Z2lucyhBYm91dFRv
SW5zdGFudGlhdGVQbHVnaW4pCisgICAgICAgICAgICAgLy8gQXBwbGljYXRpb24gcGx1Z2lucyBh
cmUgcGx1Z2lucyBpbXBsZW1lbnRlZCBieSB0aGUgdXNlciBhZ2VudCwgZm9yIGV4YW1wbGUgUXQg
cGx1Z2lucywKKyAgICAgICAgICAgICAvLyBhcyBvcHBvc2VkIHRvIHRoaXJkLXBhcnR5IGNvZGUg
c3VjaCBhcyBmbGFzaC4gVGhlIHVzZXIgYWdlbnQgZGVjaWRlcyB3aGV0aGVyIG9yIG5vdCB0aGV5
IGFyZQorICAgICAgICAgICAgIC8vIHBlcm1pdHRlZCwgcmF0aGVyIHRoYW4gV2ViS2l0LgorICAg
ICAgICAgICAgICYmICFNSU1FVHlwZVJlZ2lzdHJ5Ojppc0FwcGxpY2F0aW9uUGx1Z2luTUlNRVR5
cGUobWltZVR5cGUpKQorICAgICAgICAgICAgfHwgKCFzZXR0aW5ncy0+aXNKYXZhRW5hYmxlZCgp
ICYmIE1JTUVUeXBlUmVnaXN0cnk6OmlzSmF2YUFwcGxldE1JTUVUeXBlKG1pbWVUeXBlKSkpCisg
ICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIGlmIChtX2ZyYW1lLT5kb2N1bWVudCgp
ICYmIG1fZnJhbWUtPmRvY3VtZW50KCktPnNlY3VyaXR5T3JpZ2luKCktPmlzU2FuZGJveGVkKFNh
bmRib3hQbHVnaW5zKSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgcmV0dXJu
IGxvYWRQbHVnaW4ocmVuZGVyZXIsIGNvbXBsZXRlZFVSTCwgbWltZVR5cGUsIHBhcmFtTmFtZXMs
IHBhcmFtVmFsdWVzLCB1c2VGYWxsYmFjayk7CisgICAgfQorCisgICAgQVNTRVJUKHJlbmRlcmVy
LT5ub2RlKCktPmhhc1RhZ05hbWUob2JqZWN0VGFnKSB8fCByZW5kZXJlci0+bm9kZSgpLT5oYXNU
YWdOYW1lKGVtYmVkVGFnKSk7CisgICAgSFRNTFBsdWdJbkVsZW1lbnQqIGVsZW1lbnQgPSBzdGF0
aWNfY2FzdDxIVE1MUGx1Z0luRWxlbWVudCo+KHJlbmRlcmVyLT5ub2RlKCkpOworCisgICAgLy8g
SWYgdGhlIHBsdWctaW4gZWxlbWVudCBhbHJlYWR5IGNvbnRhaW5zIGEgc3ViZnJhbWUsIHJlcXVl
c3RGcmFtZSB3aWxsIHJlLXVzZSBpdC4gT3RoZXJ3aXNlLAorICAgIC8vIGl0IHdpbGwgY3JlYXRl
IGEgbmV3IGZyYW1lIGFuZCBzZXQgaXQgYXMgdGhlIFJlbmRlclBhcnQncyB3aWRnZXQsIGNhdXNp
bmcgd2hhdCB3YXMgcHJldmlvdXNseSAKKyAgICAvLyBpbiB0aGUgd2lkZ2V0IHRvIGJlIHRvcm4g
ZG93bi4KKyAgICByZXR1cm4gcmVxdWVzdEZyYW1lKGVsZW1lbnQsIGNvbXBsZXRlZFVSTCwgZnJh
bWVOYW1lKTsKK30KKworCisjaWYgRU5BQkxFKFBMVUdJTl9QUk9YWV9GT1JfVklERU8pCitQYXNz
UmVmUHRyPFdpZGdldD4gRnJhbWVMb2FkZXI6OmxvYWRNZWRpYVBsYXllclByb3h5UGx1Z2luKE5v
ZGUqIG5vZGUsIGNvbnN0IEtVUkwmIHVybCwgCisgICAgY29uc3QgVmVjdG9yPFN0cmluZz4mIHBh
cmFtTmFtZXMsIGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBwYXJhbVZhbHVlcykKK3sKKyAgICBBU1NF
UlQobm9kZS0+aGFzVGFnTmFtZSh2aWRlb1RhZykgfHwgbm9kZS0+aGFzVGFnTmFtZShhdWRpb1Rh
ZykpOworCisgICAgaWYgKCFtX2ZyYW1lLT5zY3JpcHQoKS0+eHNzQXVkaXRvcigpLT5jYW5Mb2Fk
T2JqZWN0KHVybC5zdHJpbmcoKSkpCisgICAgICAgIHJldHVybiAwOworCisgICAgS1VSTCBjb21w
bGV0ZWRVUkw7CisgICAgaWYgKCF1cmwuaXNFbXB0eSgpKQorICAgICAgICBjb21wbGV0ZWRVUkwg
PSBjb21wbGV0ZVVSTCh1cmwpOworCisgICAgaWYgKCFTZWN1cml0eU9yaWdpbjo6Y2FuTG9hZChj
b21wbGV0ZWRVUkwsIFN0cmluZygpLCBmcmFtZSgpLT5kb2N1bWVudCgpKSkgeworICAgICAgICBG
cmFtZUxvYWRlcjo6cmVwb3J0TG9jYWxMb2FkRmFpbGVkKG1fZnJhbWUsIGNvbXBsZXRlZFVSTC5z
dHJpbmcoKSk7CisgICAgICAgIHJldHVybiAwOworICAgIH0KKworICAgIEhUTUxNZWRpYUVsZW1l
bnQqIG1lZGlhRWxlbWVudCA9IHN0YXRpY19jYXN0PEhUTUxNZWRpYUVsZW1lbnQqPihub2RlKTsK
KyAgICBSZW5kZXJQYXJ0KiByZW5kZXJlciA9IHRvUmVuZGVyUGFydChub2RlLT5yZW5kZXJlcigp
KTsKKyAgICBJbnRTaXplIHNpemU7CisKKyAgICBpZiAocmVuZGVyZXIpCisgICAgICAgIHNpemUg
PSBJbnRTaXplKHJlbmRlcmVyLT5jb250ZW50V2lkdGgoKSwgcmVuZGVyZXItPmNvbnRlbnRIZWln
aHQoKSk7CisgICAgZWxzZSBpZiAobWVkaWFFbGVtZW50LT5pc1ZpZGVvKCkpCisgICAgICAgIHNp
emUgPSBSZW5kZXJWaWRlbzo6ZGVmYXVsdFNpemUoKTsKKworICAgIG1fZnJhbWUtPmxvYWRlcigp
LT5jaGVja0lmUnVuSW5zZWN1cmVDb250ZW50KG1fZnJhbWUtPmRvY3VtZW50KCktPnNlY3VyaXR5
T3JpZ2luKCksIGNvbXBsZXRlZFVSTCk7CisKKyAgICBSZWZQdHI8V2lkZ2V0PiB3aWRnZXQgPSBt
X2ZyYW1lLT5sb2FkZXIoKS0+Y2xpZW50KCktPmNyZWF0ZU1lZGlhUGxheWVyUHJveHlQbHVnaW4o
c2l6ZSwgbWVkaWFFbGVtZW50LCBjb21wbGV0ZWRVUkwsCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHBhcmFtTmFtZXMsIHBhcmFtVmFsdWVzLCAiYXBwbGljYXRpb24v
eC1tZWRpYS1lbGVtZW50LXByb3h5LXBsdWdpbiIpOworCisgICAgaWYgKHdpZGdldCAmJiByZW5k
ZXJlcikgeworICAgICAgICByZW5kZXJlci0+c2V0V2lkZ2V0KHdpZGdldCk7CisgICAgICAgIG1f
Y29udGFpbnNQbHVnSW5zID0gdHJ1ZTsKKyAgICAgICAgcmVuZGVyZXItPm5vZGUoKS0+c2V0TmVl
ZHNTdHlsZVJlY2FsYyhTeW50aGV0aWNTdHlsZUNoYW5nZSk7CisgICAgfQorCisgICAgcmV0dXJu
IHdpZGdldCA/IHdpZGdldC5yZWxlYXNlKCkgOiAwOworfQorI2VuZGlmIC8vIEVOQUJMRShQTFVH
SU5fUFJPWFlfRk9SX1ZJREVPKQorCitQYXNzUmVmUHRyPFdpZGdldD4gU3ViZnJhbWVMb2FkZXI6
OmNyZWF0ZUphdmFBcHBsZXRXaWRnZXQoY29uc3QgSW50U2l6ZSYgc2l6ZSwgSFRNTEFwcGxldEVs
ZW1lbnQqIGVsZW1lbnQsIGNvbnN0IEhhc2hNYXA8U3RyaW5nLCBTdHJpbmc+JiBhcmdzKQorewor
ICAgIFN0cmluZyBiYXNlVVJMU3RyaW5nOworICAgIFN0cmluZyBjb2RlQmFzZVVSTFN0cmluZzsK
KyAgICBWZWN0b3I8U3RyaW5nPiBwYXJhbU5hbWVzOworICAgIFZlY3RvcjxTdHJpbmc+IHBhcmFt
VmFsdWVzOworICAgIEhhc2hNYXA8U3RyaW5nLCBTdHJpbmc+Ojpjb25zdF9pdGVyYXRvciBlbmQg
PSBhcmdzLmVuZCgpOworICAgIGZvciAoSGFzaE1hcDxTdHJpbmcsIFN0cmluZz46OmNvbnN0X2l0
ZXJhdG9yIGl0ID0gYXJncy5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKKyAgICAgICAgaWYg
KGVxdWFsSWdub3JpbmdDYXNlKGl0LT5maXJzdCwgImJhc2V1cmwiKSkKKyAgICAgICAgICAgIGJh
c2VVUkxTdHJpbmcgPSBpdC0+c2Vjb25kOworICAgICAgICBlbHNlIGlmIChlcXVhbElnbm9yaW5n
Q2FzZShpdC0+Zmlyc3QsICJjb2RlYmFzZSIpKQorICAgICAgICAgICAgY29kZUJhc2VVUkxTdHJp
bmcgPSBpdC0+c2Vjb25kOworICAgICAgICBwYXJhbU5hbWVzLmFwcGVuZChpdC0+Zmlyc3QpOwor
ICAgICAgICBwYXJhbVZhbHVlcy5hcHBlbmQoaXQtPnNlY29uZCk7CisgICAgfQorCisgICAgaWYg
KCFjb2RlQmFzZVVSTFN0cmluZy5pc0VtcHR5KCkpIHsKKyAgICAgICAgS1VSTCBjb2RlQmFzZVVS
TCA9IGNvbXBsZXRlVVJMKGNvZGVCYXNlVVJMU3RyaW5nKTsKKyAgICAgICAgaWYgKCFTZWN1cml0
eU9yaWdpbjo6Y2FuTG9hZChjb2RlQmFzZVVSTCwgU3RyaW5nKCksIGVsZW1lbnQtPmRvY3VtZW50
KCkpKSB7CisgICAgICAgICAgICBGcmFtZUxvYWRlcjo6cmVwb3J0TG9jYWxMb2FkRmFpbGVkKG1f
ZnJhbWUsIGNvZGVCYXNlVVJMLnN0cmluZygpKTsKKyAgICAgICAgICAgIHJldHVybiAwOworICAg
ICAgICB9CisgICAgfQorCisgICAgaWYgKGJhc2VVUkxTdHJpbmcuaXNFbXB0eSgpKQorICAgICAg
ICBiYXNlVVJMU3RyaW5nID0gbV9mcmFtZS0+ZG9jdW1lbnQoKS0+YmFzZVVSTCgpLnN0cmluZygp
OworICAgIEtVUkwgYmFzZVVSTCA9IGNvbXBsZXRlVVJMKGJhc2VVUkxTdHJpbmcpOworCisgICAg
UmVmUHRyPFdpZGdldD4gd2lkZ2V0ID0gbV9mcmFtZS0+bG9hZGVyKCktPmNsaWVudCgpLT5jcmVh
dGVKYXZhQXBwbGV0V2lkZ2V0KHNpemUsIGVsZW1lbnQsIGJhc2VVUkwsIHBhcmFtTmFtZXMsIHBh
cmFtVmFsdWVzKTsKKyAgICBpZiAoIXdpZGdldCkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICBt
X2NvbnRhaW5zUGx1Z2lucyA9IHRydWU7CisgICAgcmV0dXJuIHdpZGdldDsKK30KKworRnJhbWUq
IFN1YmZyYW1lTG9hZGVyOjpsb2FkU3ViZnJhbWUoSFRNTEZyYW1lT3duZXJFbGVtZW50KiBvd25l
ckVsZW1lbnQsIGNvbnN0IEtVUkwmIHVybCwgY29uc3QgU3RyaW5nJiBuYW1lLCBjb25zdCBTdHJp
bmcmIHJlZmVycmVyKQoreworICAgIGJvb2wgYWxsb3dzU2Nyb2xsaW5nID0gdHJ1ZTsKKyAgICBp
bnQgbWFyZ2luV2lkdGggPSAtMTsKKyAgICBpbnQgbWFyZ2luSGVpZ2h0ID0gLTE7CisgICAgaWYg
KG93bmVyRWxlbWVudC0+aGFzVGFnTmFtZShmcmFtZVRhZykgfHwgb3duZXJFbGVtZW50LT5oYXNU
YWdOYW1lKGlmcmFtZVRhZykpIHsKKyAgICAgICAgSFRNTEZyYW1lRWxlbWVudEJhc2UqIG8gPSBz
dGF0aWNfY2FzdDxIVE1MRnJhbWVFbGVtZW50QmFzZSo+KG93bmVyRWxlbWVudCk7CisgICAgICAg
IGFsbG93c1Njcm9sbGluZyA9IG8tPnNjcm9sbGluZ01vZGUoKSAhPSBTY3JvbGxiYXJBbHdheXNP
ZmY7CisgICAgICAgIG1hcmdpbldpZHRoID0gby0+Z2V0TWFyZ2luV2lkdGgoKTsKKyAgICAgICAg
bWFyZ2luSGVpZ2h0ID0gby0+Z2V0TWFyZ2luSGVpZ2h0KCk7CisgICAgfQorCisgICAgaWYgKCFT
ZWN1cml0eU9yaWdpbjo6Y2FuTG9hZCh1cmwsIHJlZmVycmVyLCAwKSkgeworICAgICAgICBGcmFt
ZUxvYWRlcjo6cmVwb3J0TG9jYWxMb2FkRmFpbGVkKG1fZnJhbWUsIHVybC5zdHJpbmcoKSk7Cisg
ICAgICAgIHJldHVybiAwOworICAgIH0KKworICAgIGJvb2wgaGlkZVJlZmVycmVyID0gU2VjdXJp
dHlPcmlnaW46OnNob3VsZEhpZGVSZWZlcnJlcih1cmwsIHJlZmVycmVyKTsKKyAgICBSZWZQdHI8
RnJhbWU+IGZyYW1lID0gbV9mcmFtZS0+bG9hZGVyKCktPmNsaWVudCgpLT5jcmVhdGVGcmFtZSh1
cmwsIG5hbWUsIG93bmVyRWxlbWVudCwgaGlkZVJlZmVycmVyID8gU3RyaW5nKCkgOiByZWZlcnJl
ciwgYWxsb3dzU2Nyb2xsaW5nLCBtYXJnaW5XaWR0aCwgbWFyZ2luSGVpZ2h0KTsKKworICAgIGlm
ICghZnJhbWUpICB7CisgICAgICAgIG1fZnJhbWUtPmxvYWRlcigpLT5jaGVja0NhbGxJbXBsaWNp
dENsb3NlKCk7CisgICAgICAgIHJldHVybiAwOworICAgIH0KKyAgICAKKyAgICAvLyBBbGwgbmV3
IGZyYW1lcyB3aWxsIGhhdmUgbV9pc0NvbXBsZXRlIHNldCB0byB0cnVlIGF0IHRoaXMgcG9pbnQg
ZHVlIHRvIHN5bmNocm9ub3VzbHkgbG9hZGluZworICAgIC8vIGFuIGVtcHR5IGRvY3VtZW50IGlu
IEZyYW1lTG9hZGVyOjppbml0KCkuIEJ1dCBtYW55IGZyYW1lcyB3aWxsIG5vdyBiZSBzdGFydGlu
ZyBhbgorICAgIC8vIGFzeW5jaHJvbm91cyBsb2FkIG9mIHVybCwgc28gd2Ugc2V0IG1faXNDb21w
bGV0ZSB0byBmYWxzZSBhbmQgdGhlbiBjaGVjayBpZiB0aGUgbG9hZCBpcworICAgIC8vIGFjdHVh
bGx5IGNvbXBsZXRlZCBiZWxvdy4gKE5vdGUgdGhhdCB3ZSBzZXQgbV9pc0NvbXBsZXRlIHRvIGZh
bHNlIGV2ZW4gZm9yIHN5bmNocm9ub3VzCisgICAgLy8gbG9hZHMsIHNvIHRoYXQgY2hlY2tDb21w
bGV0ZWQoKSBiZWxvdyB3b24ndCBiYWlsIGVhcmx5LikKKyAgICAvLyBGSVhNRTogQ2FuIHdlIHJl
bW92ZSB0aGlzIGVudGlyZWx5PyBtX2lzQ29tcGxldGUgbm9ybWFsbHkgZ2V0cyBzZXQgdG8gZmFs
c2Ugd2hlbiBhIGxvYWQgaXMgY29tbWl0dGVkLgorICAgIGZyYW1lLT5sb2FkZXIoKS0+c3RhcnRl
ZCgpOworICAgCisgICAgUmVuZGVyT2JqZWN0KiByZW5kZXJlciA9IG93bmVyRWxlbWVudC0+cmVu
ZGVyZXIoKTsKKyAgICBGcmFtZVZpZXcqIHZpZXcgPSBmcmFtZS0+dmlldygpOworICAgIGlmIChy
ZW5kZXJlciAmJiByZW5kZXJlci0+aXNXaWRnZXQoKSAmJiB2aWV3KQorICAgICAgICB0b1JlbmRl
cldpZGdldChyZW5kZXJlciktPnNldFdpZGdldCh2aWV3KTsKKyAgICAKKyAgICBtX2ZyYW1lLT5s
b2FkZXIoKS0+Y2hlY2tDYWxsSW1wbGljaXRDbG9zZSgpOworICAgIAorICAgIC8vIFNvbWUgbG9h
ZHMgYXJlIHBlcmZvcm1lZCBzeW5jaHJvbm91c2x5IChlLmcuLCBhYm91dDpibGFuayBhbmQgbG9h
ZHMKKyAgICAvLyBjYW5jZWxsZWQgYnkgcmV0dXJuaW5nIGEgbnVsbCBSZXNvdXJjZVJlcXVlc3Qg
ZnJvbSByZXF1ZXN0RnJvbURlbGVnYXRlKS4KKyAgICAvLyBJbiB0aGVzZSBjYXNlcywgdGhlIHN5
bmNocm9ub3VzIGxvYWQgd291bGQgaGF2ZSBmaW5pc2hlZAorICAgIC8vIGJlZm9yZSB3ZSBjb3Vs
ZCBjb25uZWN0IHRoZSBzaWduYWxzLCBzbyBtYWtlIHN1cmUgdG8gc2VuZCB0aGUgCisgICAgLy8g
Y29tcGxldGVkKCkgc2lnbmFsIGZvciB0aGUgY2hpbGQgYnkgaGFuZCBhbmQgbWFyayB0aGUgbG9h
ZCBhcyBiZWluZworICAgIC8vIGNvbXBsZXRlLgorICAgIC8vIEZJWE1FOiBJbiB0aGlzIGNhc2Ug
dGhlIEZyYW1lIHdpbGwgaGF2ZSBmaW5pc2hlZCBsb2FkaW5nIGJlZm9yZSAKKyAgICAvLyBpdCdz
IGJlaW5nIGFkZGVkIHRvIHRoZSBjaGlsZCBsaXN0LiBJdCB3b3VsZCBiZSBhIGdvb2QgaWRlYSB0
bworICAgIC8vIGNyZWF0ZSB0aGUgY2hpbGQgZmlyc3QsIHRoZW4gaW52b2tlIHRoZSBsb2FkZXIg
c2VwYXJhdGVseS4KKyAgICBpZiAoZnJhbWUtPmxvYWRlcigpLT5zdGF0ZSgpID09IEZyYW1lU3Rh
dGVDb21wbGV0ZSkKKyAgICAgICAgZnJhbWUtPmxvYWRlcigpLT5jaGVja0NvbXBsZXRlZCgpOwor
CisgICAgcmV0dXJuIGZyYW1lLmdldCgpOworfQorCitib29sIFN1YmZyYW1lTG9hZGVyOjphbGxv
d1BsdWdpbnMoUmVhc29uRm9yQ2FsbGluZ0FsbG93UGx1Z2lucyByZWFzb24pCit7CisgICAgU2V0
dGluZ3MqIHNldHRpbmdzID0gbV9mcmFtZS0+c2V0dGluZ3MoKTsKKyAgICBib29sIGFsbG93ZWQg
PSBtX2ZyYW1lLT5sb2FkZXIoKS0+Y2xpZW50KCktPmFsbG93UGx1Z2lucyhzZXR0aW5ncyAmJiBz
ZXR0aW5ncy0+YXJlUGx1Z2luc0VuYWJsZWQoKSk7CisgICAgaWYgKCFhbGxvd2VkICYmIHJlYXNv
biA9PSBBYm91dFRvSW5zdGFudGlhdGVQbHVnaW4pCisgICAgICAgIG1fZnJhbWUtPmxvYWRlcigp
LT5jbGllbnQoKS0+ZGlkTm90QWxsb3dQbHVnaW5zKCk7CisgICAgcmV0dXJuIGFsbG93ZWQ7Cit9
CisKKworYm9vbCBTdWJmcmFtZUxvYWRlcjo6c2hvdWxkVXNlUGx1Z2luKGNvbnN0IEtVUkwmIHVy
bCwgY29uc3QgU3RyaW5nJiBtaW1lVHlwZSwgYm9vbCBoYXNGYWxsYmFjaywgYm9vbCYgdXNlRmFs
bGJhY2spCit7CisgICAgaWYgKG1fZnJhbWUtPmxvYWRlcigpLT5jbGllbnQoKS0+c2hvdWxkVXNl
UGx1Z2luRG9jdW1lbnQobWltZVR5cGUpKSB7CisgICAgICAgIHVzZUZhbGxiYWNrID0gZmFsc2U7
CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKworICAgIC8vIEFsbG93IG90aGVyIHBsdWct
aW5zIHRvIHdpbiBvdmVyIFF1aWNrVGltZSBiZWNhdXNlIGlmIHRoZSB1c2VyIGhhcyBpbnN0YWxs
ZWQgYSBwbHVnLWluIHRoYXQKKyAgICAvLyBjYW4gaGFuZGxlIFRJRkYgKHdoaWNoIFF1aWNrVGlt
ZSBjYW4gYWxzbyBoYW5kbGUpIHRoZXkgcHJvYmFibHkgaW50ZW5kZWQgdG8gb3ZlcnJpZGUgUVQu
CisgICAgaWYgKG1fZnJhbWUtPnBhZ2UoKSAmJiAobWltZVR5cGUgPT0gImltYWdlL3RpZmYiIHx8
IG1pbWVUeXBlID09ICJpbWFnZS90aWYiIHx8IG1pbWVUeXBlID09ICJpbWFnZS94LXRpZmYiKSkg
eworICAgICAgICBjb25zdCBQbHVnaW5EYXRhKiBwbHVnaW5EYXRhID0gbV9mcmFtZS0+cGFnZSgp
LT5wbHVnaW5EYXRhKCk7CisgICAgICAgIFN0cmluZyBwbHVnaW5OYW1lID0gcGx1Z2luRGF0YSA/
IHBsdWdpbkRhdGEtPnBsdWdpbk5hbWVGb3JNaW1lVHlwZShtaW1lVHlwZSkgOiBTdHJpbmcoKTsK
KyAgICAgICAgaWYgKCFwbHVnaW5OYW1lLmlzRW1wdHkoKSAmJiAhcGx1Z2luTmFtZS5jb250YWlu
cygiUXVpY2tUaW1lIiwgZmFsc2UpKSAKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgIH0K
KyAgICAgICAgCisgICAgT2JqZWN0Q29udGVudFR5cGUgb2JqZWN0VHlwZSA9IG1fZnJhbWUtPmxv
YWRlcigpLT5jbGllbnQoKS0+b2JqZWN0Q29udGVudFR5cGUodXJsLCBtaW1lVHlwZSk7CisgICAg
Ly8gSWYgYW4gb2JqZWN0J3MgY29udGVudCBjYW4ndCBiZSBoYW5kbGVkIGFuZCBpdCBoYXMgbm8g
ZmFsbGJhY2ssIGxldAorICAgIC8vIGl0IGJlIGhhbmRsZWQgYXMgYSBwbHVnaW4gdG8gc2hvdyB0
aGUgYnJva2VuIHBsdWdpbiBpY29uLgorICAgIHVzZUZhbGxiYWNrID0gb2JqZWN0VHlwZSA9PSBP
YmplY3RDb250ZW50Tm9uZSAmJiBoYXNGYWxsYmFjazsKKyAgICByZXR1cm4gb2JqZWN0VHlwZSA9
PSBPYmplY3RDb250ZW50Tm9uZSB8fCBvYmplY3RUeXBlID09IE9iamVjdENvbnRlbnROZXRzY2Fw
ZVBsdWdpbiB8fCBvYmplY3RUeXBlID09IE9iamVjdENvbnRlbnRPdGhlclBsdWdpbjsKK30KKyAg
Citib29sIFN1YmZyYW1lTG9hZGVyOjpsb2FkUGx1Z2luKFJlbmRlckVtYmVkZGVkT2JqZWN0KiBy
ZW5kZXJlciwgY29uc3QgS1VSTCYgdXJsLCBjb25zdCBTdHJpbmcmIG1pbWVUeXBlLCAKKyAgICBj
b25zdCBWZWN0b3I8U3RyaW5nPiYgcGFyYW1OYW1lcywgY29uc3QgVmVjdG9yPFN0cmluZz4mIHBh
cmFtVmFsdWVzLCBib29sIHVzZUZhbGxiYWNrKQoreworICAgIFJlZlB0cjxXaWRnZXQ+IHdpZGdl
dDsKKworICAgIGlmIChyZW5kZXJlciAmJiAhdXNlRmFsbGJhY2spIHsKKyAgICAgICAgSFRNTFBs
dWdJbkVsZW1lbnQqIGVsZW1lbnQgPSB0b1BsdWdJbkVsZW1lbnQocmVuZGVyZXItPm5vZGUoKSk7
CisKKyAgICAgICAgaWYgKCFTZWN1cml0eU9yaWdpbjo6Y2FuTG9hZCh1cmwsIFN0cmluZygpLCBt
X2ZyYW1lLT5kb2N1bWVudCgpKSkgeworICAgICAgICAgICAgRnJhbWVMb2FkZXI6OnJlcG9ydExv
Y2FsTG9hZEZhaWxlZChtX2ZyYW1lLCB1cmwuc3RyaW5nKCkpOworICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOworICAgICAgICB9CisKKyAgICAgICAgbV9mcmFtZS0+bG9hZGVyKCktPmNoZWNrSWZS
dW5JbnNlY3VyZUNvbnRlbnQobV9mcmFtZS0+ZG9jdW1lbnQoKS0+c2VjdXJpdHlPcmlnaW4oKSwg
dXJsKTsKKworICAgICAgICB3aWRnZXQgPSBtX2ZyYW1lLT5sb2FkZXIoKS0+Y2xpZW50KCktPmNy
ZWF0ZVBsdWdpbihJbnRTaXplKHJlbmRlcmVyLT5jb250ZW50V2lkdGgoKSwgcmVuZGVyZXItPmNv
bnRlbnRIZWlnaHQoKSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ZWxlbWVudCwgdXJsLCBwYXJhbU5hbWVzLCBwYXJhbVZhbHVlcywgbWltZVR5cGUsCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbV9mcmFtZS0+ZG9jdW1lbnQoKS0+aXNQ
bHVnaW5Eb2N1bWVudCgpICYmICFtX2NvbnRhaW5zUGx1Z2lucyk7CisgICAgICAgIGlmICh3aWRn
ZXQpIHsKKyAgICAgICAgICAgIHJlbmRlcmVyLT5zZXRXaWRnZXQod2lkZ2V0KTsKKyAgICAgICAg
ICAgIG1fY29udGFpbnNQbHVnaW5zID0gdHJ1ZTsKKworI2lmIEVOQUJMRShQTFVHSU5fUFJPWFlf
Rk9SX1ZJREVPKQorICAgICAgICAgICAgcmVuZGVyZXItPm5vZGUoKS0+c2V0TmVlZHNTdHlsZVJl
Y2FsYyhTeW50aGV0aWNTdHlsZUNoYW5nZSk7CisjZW5kaWYKKyAgICAgICAgfSBlbHNlCisgICAg
ICAgICAgICByZW5kZXJlci0+c2V0U2hvd3NNaXNzaW5nUGx1Z2luSW5kaWNhdG9yKCk7CisgICAg
fQorCisgICAgcmV0dXJuIHdpZGdldDsKK30KKworS1VSTCBTdWJmcmFtZUxvYWRlcjo6Y29tcGxl
dGVVUkwoY29uc3QgU3RyaW5nJiB1cmwpIGNvbnN0Cit7CisgICAgQVNTRVJUKG1fZnJhbWUtPmRv
Y3VtZW50KCkpOworICAgIHJldHVybiBtX2ZyYW1lLT5kb2N1bWVudCgpLT5jb21wbGV0ZVVSTCh1
cmwpOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCg==
</data>
<flag name="review"
          id="45776"
          type_id="1"
          status="+"
          setter="abarth"
    />
          </attachment>
      

    </bug>

</bugzilla>