<?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>135787</bug_id>
          
          <creation_ts>2014-08-09 23:34:45 -0700</creation_ts>
          <short_desc>Refactor ServiceOverlayController in preparation for fading between highlights</short_desc>
          <delta_ts>2014-08-11 22:55:09 -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>WebKit2</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Tim Horton">thorton</reporter>
          <assigned_to name="Tim Horton">thorton</assigned_to>
          <cc>beidson</cc>
    
    <cc>enrica</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1028079</commentid>
    <comment_count>0</comment_count>
    <who name="Tim Horton">thorton</who>
    <bug_when>2014-08-09 23:34:45 -0700</bug_when>
    <thetext>A pretty significant refactor, so it would be nice to get a good review on this.
I think it&apos;s a hackability improvement, too, but let me know if you disagree!

Part of &lt;rdar://problem/17935736&gt;.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1028080</commentid>
    <comment_count>1</comment_count>
      <attachid>236340</attachid>
    <who name="Tim Horton">thorton</who>
    <bug_when>2014-08-09 23:35:52 -0700</bug_when>
    <thetext>Created attachment 236340
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1028081</commentid>
    <comment_count>2</comment_count>
    <who name="Tim Horton">thorton</who>
    <bug_when>2014-08-09 23:38:45 -0700</bug_when>
    <thetext>The primary motivation for this large change is the Highlight object; for fade, we need to be able to keep around/paint Highlights that might no longer be potentials (and certainly won&apos;t be &apos;active&apos;), so with a refcounted Highlight object we&apos;ll be able to keep them around separately and refer to them consistently in various places. Hackability/cleanup was a secondary motivation.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1028084</commentid>
    <comment_count>3</comment_count>
      <attachid>236340</attachid>
    <who name="Tim Horton">thorton</who>
    <bug_when>2014-08-10 00:27:00 -0700</bug_when>
    <thetext>Comment on attachment 236340
patch

not quite done yet</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1028086</commentid>
    <comment_count>4</comment_count>
      <attachid>236340</attachid>
    <who name="Tim Horton">thorton</who>
    <bug_when>2014-08-10 00:33:09 -0700</bug_when>
    <thetext>Comment on attachment 236340
patch

huh, the thing I found is not a regression from this patch like I assumed it was. re-r?ing</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1028088</commentid>
    <comment_count>5</comment_count>
      <attachid>236342</attachid>
    <who name="Tim Horton">thorton</who>
    <bug_when>2014-08-10 02:17:53 -0700</bug_when>
    <thetext>Created attachment 236342
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1028115</commentid>
    <comment_count>6</comment_count>
      <attachid>236342</attachid>
    <who name="Brady Eidson">beidson</who>
    <bug_when>2014-08-10 16:03:50 -0700</bug_when>
    <thetext>Comment on attachment 236342
patch

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

&gt; Source/WebKit2/WebProcess/WebPage/ServicesOverlayController.h:66
&gt; +        enum class Type { TelephoneNumber, Selection };

Even if only two thingies, I like seeing this on multiple lines.

enum class Type {
    Thingy1,
    Thingy2,
};

&gt; Source/WebKit2/WebProcess/WebPage/mac/ServicesOverlayController.mm:242
&gt; +    bool hovered = DDHighlightPointIsOnHighlight(highlight.highlight(), (CGPoint)m_mousePosition, &amp;onButton);

highlight.highlight() reads weirdly to me.

Could the DDHighlightRef accessor be &quot;ddHighlight()&quot; or &quot;ddHighlightRef()&quot;?

It&apos;s not too mysterious here because it&apos;s being fed into a DD API, but it would be mysterious without that context.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1028119</commentid>
    <comment_count>7</comment_count>
    <who name="Tim Horton">thorton</who>
    <bug_when>2014-08-10 18:27:15 -0700</bug_when>
    <thetext>http://trac.webkit.org/changeset/172382</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1028429</commentid>
    <comment_count>8</comment_count>
      <attachid>236342</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2014-08-11 22:55:09 -0700</bug_when>
    <thetext>Comment on attachment 236342
patch

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

&gt;&gt; Source/WebKit2/WebProcess/WebPage/ServicesOverlayController.h:66
&gt;&gt; +        enum class Type { TelephoneNumber, Selection };
&gt; 
&gt; Even if only two thingies, I like seeing this on multiple lines.
&gt; 
&gt; enum class Type {
&gt;     Thingy1,
&gt;     Thingy2,
&gt; };

I like them on one line.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>236340</attachid>
            <date>2014-08-09 23:35:52 -0700</date>
            <delta_ts>2014-08-10 02:17:53 -0700</delta_ts>
            <desc>patch</desc>
            <filename>fade-part-one.diff</filename>
            <type>text/plain</type>
            <size>37628</size>
            <attacher name="Tim Horton">thorton</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQyL0No
YW5nZUxvZwppbmRleCA1MmMyNzg4Li5kZDI3NjU1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
Mi9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCkBAIC0xLDUgKzEsMTE3
IEBACiAyMDE0LTA4LTA5ICBUaW0gSG9ydG9uICA8dGltb3RoeV9ob3J0b25AYXBwbGUuY29tPgog
CisgICAgICAgIFJlZmFjdG9yIFNlcnZpY2VPdmVybGF5Q29udHJvbGxlciBpbiBwcmVwYXJhdGlv
biBmb3IgZmFkaW5nIGJldHdlZW4gaGlnaGxpZ2h0cworICAgICAgICBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTM1Nzg3CisgICAgICAgIDxyZGFyOi8vcHJvYmxlbS8x
NzkzNTczNj4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAg
ICBSZXdvcmsgU2VydmljZXNPdmVybGF5Q29udHJvbGxlciBzbyB0aGF0IHdlIGFsd2F5cyBrZWVw
IGEgc2V0IG9mIGdlbmVyaWMKKyAgICAgICAgInBvdGVudGlhbCBoaWdobGlnaHRzIiwgd2hpY2gg
YXJlIHJlZmNvdW50ZWQgSGlnaGxpZ2h0IG9iamVjdHMgYW5kCisgICAgICAgIHdyYXAgYSBEREhp
Z2hsaWdodFJlZiwgYXMgd2VsbCBhcyBhIHR5cGUgKFNlbGVjdGlvbiBvciBUZWxlcGhvbmVOdW1i
ZXIpLAorICAgICAgICBSYW5nZSAob25seSB1c2VkIGluIHRoZSBjYXNlIG9mIFRlbGVwaG9uZU51
bWJlciksIGFuZCBwb3RlbnRpYWxseSBtb3JlCisgICAgICAgIHRoaW5ncyBpbiB0aGUgZnV0dXJl
IChsaWtlLCBzYXksIGZhZGUgc3RhdGUhKS4KKworICAgICAgICBXZSBlYWdlcmx5IHVwZGF0ZSB0
aGUgbGlzdCBvZiBwb3RlbnRpYWwgaGlnaGxpZ2h0cyB3aGVuIHRoZSBzZWxlY3Rpb24gb3Igc2V0
CisgICAgICAgIG9mIGRldGVjdGVkIHRlbGVwaG9uZSBudW1iZXJzIGNoYW5nZXMsIGFuZCB1c2Ug
dGhpcyBpbmZvcm1hdGlvbiB0byBpbnN0YWxsCisgICAgICAgIG9yIHVuaW5zdGFsbCB0aGUgcGFn
ZSBvdmVybGF5IGFzIG5lZWRlZC4KKworICAgICAgICBXaGVuIHdlIG5lZWQgdG8gcmVjb21wdXRl
IHRoZSAiYWN0aXZlIiBoaWdobGlnaHQgZnJvbSB0aGlzIHNldCAoZm9yIGV4YW1wbGUsCisgICAg
ICAgIHdlIG5lZWQgdG8gaGFuZGxlIGEgbW91c2UgZXZlbnQgb3IgcGFpbnQgdGhlIGhpZ2hsaWdo
dCksIHdlIGxvb2sgdGhyb3VnaAorICAgICAgICB0aGUgc2V0IG9mIHBvdGVudGlhbCBoaWdobGln
aHRzIGFuZCBkZWNpZGUuIFRoaXMgbW92ZXMgdGhlICJhY3RpdmUiIGhpZ2hsaWdodAorICAgICAg
ICBkZWNpc2lvbiBsb2dpYyBpbnRvIG9uZSBzbWFsbCBhbmQgY29uZmluZWQgcGxhY2UuCisKKyAg
ICAgICAgKiBXZWJQcm9jZXNzL1dlYlBhZ2UvU2VydmljZXNPdmVybGF5Q29udHJvbGxlci5oOgor
ICAgICAgICAoV2ViS2l0OjpTZXJ2aWNlc092ZXJsYXlDb250cm9sbGVyOjpIaWdobGlnaHQpOgor
ICAgICAgICBBZGQgdGhlIG5ldyBhZm9yZW1lbnRpb25lZCByZWZjb3VudGVkIEhpZ2hsaWdodCBj
bGFzcy4KKyAgICAgICAgUmVuYW1lIG1fbGFzdEhvdmVyZWRIaWdobGlnaHRDaGFuZ2VUaW1lIHRv
IG1fbGFzdEFjdGl2ZUhpZ2hsaWdodENoYW5nZVRpbWUuCisgICAgICAgIE1ha2UgbV93ZWJQYWdl
IGEgcmVmZXJlbmNlLgorICAgICAgICBUaGUgcmVzdCBpcyBqdXN0IGFkZGVkL3JlbW92ZWQvYWRq
dXN0ZWQgZnVuY3Rpb25zIGZvciB0aGUgcmVmYWN0b3JpbmcuCisKKyAgICAgICAgKFdlYktpdDo6
VGVsZXBob25lTnVtYmVyRGF0YTo6VGVsZXBob25lTnVtYmVyRGF0YSk6IERlbGV0ZWQuCisgICAg
ICAgICogV2ViUHJvY2Vzcy9XZWJQYWdlL21hYy9TZXJ2aWNlc092ZXJsYXlDb250cm9sbGVyLm1t
OgorICAgICAgICAoV2ViS2l0OjpTZXJ2aWNlc092ZXJsYXlDb250cm9sbGVyOjpIaWdobGlnaHQ6
OmNyZWF0ZUZvclNlbGVjdGlvbik6CisgICAgICAgIChXZWJLaXQ6OlNlcnZpY2VzT3ZlcmxheUNv
bnRyb2xsZXI6OkhpZ2hsaWdodDo6Y3JlYXRlRm9yVGVsZXBob25lTnVtYmVyKToKKyAgICAgICAg
Q3JlYXRlIEhpZ2hsaWdodHMgZm9yIHRoZSB0d28gZGlmZmVyZW50IGhpZ2hsaWdodCB0eXBlcy4K
KworICAgICAgICAoV2ViS2l0OjpTZXJ2aWNlc092ZXJsYXlDb250cm9sbGVyOjpTZXJ2aWNlc092
ZXJsYXlDb250cm9sbGVyKToKKyAgICAgICAgKFdlYktpdDo6U2VydmljZXNPdmVybGF5Q29udHJv
bGxlcjo6d2lsbE1vdmVUb1dlYlBhZ2UpOgorICAgICAgICBPdXIgV2ViUGFnZSBwb2ludGVyIGlz
IGFsd2F5cyB2YWxpZCBiZWNhdXNlIGl0IG93bnMgdXM7IGRvbid0IGNsZWFyIGl0LgorICAgICAg
ICBXZSBuZWVkIHRvIGtlZXAgaXQgYXJvdW5kIHNvIHRoYXQgd2UgY2FuIHVuaW5zdGFsbCB0aGUg
b3ZlcmxheSBhbmQKKyAgICAgICAgaW5zdGFsbCBpdCBhZ2FpbiBsYXRlciwgYW55d2F5LgorCisg
ICAgICAgIChXZWJLaXQ6OlNlcnZpY2VzT3ZlcmxheUNvbnRyb2xsZXI6OnNlbGVjdGlvblJlY3Rz
RGlkQ2hhbmdlKToKKyAgICAgICAgKFdlYktpdDo6U2VydmljZXNPdmVybGF5Q29udHJvbGxlcjo6
c2VsZWN0ZWRUZWxlcGhvbmVOdW1iZXJSYW5nZXNDaGFuZ2VkKToKKyAgICAgICAgV2hlbiBzZWxl
Y3Rpb24gcmVjdHMgb3IgZGV0ZWN0ZWQgdGVsZXBob25lIG51bWJlcnMgY2hhbmdlLCByZWJ1aWxk
IHBvdGVudGlhbCBoaWdobGlnaHRzLgorICAgICAgICBUaGlzIHdpbGwgaGF2ZSB0aGUgc2lkZS1l
ZmZlY3Qgb2YgaW5zdGFsbGluZyB0aGUgb3ZlcmxheSBpZiBuZWVkZWQuCisKKyAgICAgICAgKFdl
YktpdDo6U2VydmljZXNPdmVybGF5Q29udHJvbGxlcjo6bW91c2VJc092ZXJIaWdobGlnaHQpOgor
ICAgICAgICBNYWtlIHRoaXMgZnVuY3Rpb24gdGFrZSBhIEhpZ2hsaWdodCBpbnN0ZWFkIG9mIGEg
RERIaWdobGlnaHRSZWYuCisKKyAgICAgICAgKFdlYktpdDo6U2VydmljZXNPdmVybGF5Q29udHJv
bGxlcjo6cmVtYWluaW5nVGltZVVudGlsSGlnaGxpZ2h0U2hvdWxkQmVTaG93bik6CisgICAgICAg
IE1ha2UgdGhpcyBmdW5jdGlvbiB0YWtlIGEgSGlnaGxpZ2h0IGluc3RlYWQgb2YgYSBEREhpZ2hs
aWdodFJlZi4KKworICAgICAgICAoV2ViS2l0OjpTZXJ2aWNlc092ZXJsYXlDb250cm9sbGVyOjpk
cmF3SGlnaGxpZ2h0KToKKyAgICAgICAgTWFrZSB0aGlzIGZ1bmN0aW9uIHRha2UgYSBIaWdobGln
aHQgaW5zdGVhZCBvZiBhIERESGlnaGxpZ2h0UmVmLgorICAgICAgICBUaGVyZSdzIG5vIHJlYXNv
biB0byBkbyB0aGUgdHJhbnNsYXRpb24gc2VwYXJhdGVseSBmcm9tIHRoZSBsYXllciBibGl0LAor
ICAgICAgICBhbHNvIGFsbG93aW5nIHVzIHRvIGF2b2lkIHRoZSBTdGF0ZVNhdmVyLgorCisgICAg
ICAgIChXZWJLaXQ6OlNlcnZpY2VzT3ZlcmxheUNvbnRyb2xsZXI6OmRyYXdSZWN0KToKKyAgICAg
ICAgZHJhd1JlY3Qgbm93IGFsd2F5cyBwYWludHMgdGhlIGFjdGl2ZSBoaWdobGlnaHQsIGluc3Rl
YWQgb2YgZHVwbGljYXRpbmcKKyAgICAgICAgbG9naWMgYWJvdXQgd2hpY2ggaGlnaGxpZ2h0IHNo
b3VsZCBiZSBhY3RpdmUuCisgICAgICAgIEFsc28sIGl0IHdpbGwgdXBkYXRlIHRoZSBhY3RpdmUg
aGlnaGxpZ2h0IGJlZm9yZSBwYWludGluZy4KKyAgICAgICAgV2Ugbm8gbG9uZ2VyIG5lZWQgdG8g
cmUtZGV0ZXJtaW5lIHdoZXRoZXIgdGhlIGFjdGl2ZSBoaWdobGlnaHQncyBwaG9uZQorICAgICAg
ICBudW1iZXIgcmFuZ2UgaXMgc3RpbGwgYSB2YWxpZCBwaG9uZSBudW1iZXIgcmFuZ2UsIGJlY2F1
c2Ugd2UgcmVidWlsZAorICAgICAgICB0aGUgcG90ZW50aWFsIGhpZ2hsaWdodHMgd2hlbmV2ZXIg
dGhlIHNldCBvZiBwaG9uZSBudW1iZXIgcmFuZ2VzIGNoYW5nZXMuCisKKyAgICAgICAgKFdlYktp
dDo6U2VydmljZXNPdmVybGF5Q29udHJvbGxlcjo6Y2xlYXJBY3RpdmVIaWdobGlnaHQpOgorICAg
ICAgICBNb3N0bHkgYW4gYWRvcHRpb24gb2YgbmV3IG5hbWVzLgorCisgICAgICAgIChXZWJLaXQ6
OlNlcnZpY2VzT3ZlcmxheUNvbnRyb2xsZXI6OnJlbW92ZUFsbFBvdGVudGlhbEhpZ2hsaWdodHNP
ZlR5cGUpOgorICAgICAgICBSdW4gdGhyb3VnaCB0aGUgbGlzdCBvZiBwb3RlbnRpYWwgaGlnaGxp
Z2h0cyBhbmQgcmVtb3ZlIGFueSBvZiB0aGUgZ2l2ZW4gdHlwZS4KKyAgICAgICAgVGhlIHR3byBo
aWdobGlnaHQgYnVpbGRpbmcgZnVuY3Rpb25zIHVzZSB0aGlzIGhlbHBlciB0byBjbGVhciB0aGUg
b2xkIG9uZXMgYmVmb3JlIGJ1aWxkaW5nLgorCisgICAgICAgIChXZWJLaXQ6OlNlcnZpY2VzT3Zl
cmxheUNvbnRyb2xsZXI6OmJ1aWxkUGhvbmVOdW1iZXJIaWdobGlnaHRzKToKKyAgICAgICAgKFdl
YktpdDo6U2VydmljZXNPdmVybGF5Q29udHJvbGxlcjo6YnVpbGRTZWxlY3Rpb25IaWdobGlnaHQp
OgorICAgICAgICBSZWJ1aWxkIHRoZSBsaXN0IG9mIHBvdGVudGlhbCBoaWdobGlnaHRzLCByZXBs
YWNpbmcgYWxsIGhpZ2hsaWdodHMgb2YKKyAgICAgICAgdGhlIGdpdmVuIHR5cGUgd2l0aCBuZXcg
b25lcywgYW5kIGNsZWFyaW5nIHRoZSBhY3RpdmUgaGlnaGxpZ2h0IGlmIHdlIHJlbW92ZWQgaXQu
CisKKyAgICAgICAgKFdlYktpdDo6U2VydmljZXNPdmVybGF5Q29udHJvbGxlcjo6aGFzUmVsZXZh
bnRTZWxlY3Rpb25TZXJ2aWNlcyk6CisgICAgICAgIEZhY3RvciBvdXQgdGhlIGNvZGUgdGhhdCBk
ZWNpZGVzIHdoZXRoZXIgb3VyIGN1cnJlbnQgc2VsZWN0aW9uIGlzCisgICAgICAgIHZpYWJsZSBz
ZXJ2aWNpbmcgYmFzZWQgb24gd2hldGhlciB3ZSBoYXZlIHBsYWluLXRleHQgYW5kL29yIHJpY2gt
dGV4dCBzZXJ2aWNlcy4KKworICAgICAgICAoV2ViS2l0OjpTZXJ2aWNlc092ZXJsYXlDb250cm9s
bGVyOjpkaWRSZWJ1aWxkUG90ZW50aWFsSGlnaGxpZ2h0cyk6CisgICAgICAgIFdoZW4gcmVidWls
ZGluZyBwb3RlbnRpYWwgaGlnaGxpZ2h0cywgaWYgd2UgaGF2ZSBubyBwb3RlbnRpYWwgaGlnaGxp
Z2h0cyBhdCBhbGwsCisgICAgICAgIHVuaW5zdGFsbCB0aGUgcGFnZSBvdmVybGF5OyB3ZSBkb24n
dCBuZWVkIG1vdXNlIHRyYWNraW5nIGFuZCBkb24ndCBuZWVkIHRvCisgICAgICAgIHBhaW50IGFu
eXRoaW5nLiBUaGlzIGltcHJvdmVzIG1lbW9yeSB1c2UgYW5kIGNvbXBvc2l0aW5nIHBlcmZvcm1h
bmNlIHNpZ25pZmljYW50bHksCisgICAgICAgIHdoZXJlIHByZXZpb3VzbHkgd2Ugd2VyZSBsZWF2
aW5nIHRoZSBvdmVybGF5IHVwIGZvcmV2ZXIgYWZ0ZXIgY3JlYXRpbmcgaXQuCisKKyAgICAgICAg
SWYgd2UgaGF2ZSBlaXRoZXIgZGV0ZWN0ZWQgdGVsZXBob25lIG51bWJlcnMgb3IgcmVsZXZhbnQg
c2VsZWN0aW9uIHNlcnZpY2VzLAorICAgICAgICBjcmVhdGUgYW5kIGluc3RhbGwgdGhlIG92ZXJs
YXkgaWYgaXQgZG9lc24ndCBhbHJlYWR5IGV4aXN0LgorCisgICAgICAgIChXZWJLaXQ6OlNlcnZp
Y2VzT3ZlcmxheUNvbnRyb2xsZXI6OmNyZWF0ZU92ZXJsYXlJZk5lZWRlZCk6CisgICAgICAgIFRo
aXMganVzdCBtb3ZlZCBmcm9tIGVsc2Vod2VyZSwgZXhjZXB0IHRoYXQgaXQgbm93IHVzZXMgRmFk
ZU1vZGU6OkRvTm90RmFkZS4KKyAgICAgICAgSXQgZG9lc24ndCBtYWtlIHNlbnNlIHRvIGZhZGUg
b24gaW5zdGFsbC91bmluc3RhbGwgKHdoaWNoIGhhcHBlbnMgZXZlbiBiZWZvcmUgaG92ZXIpCisg
ICAgICAgIGJ1dCBub3Qgb24gY2hhbmdpbmcgdGhlIGFjdGl2ZSBoaWdobGlnaHQ7IGZhZGluZyB3
aWxsIGJlIHJlLWFkZHJlc3NlZCBpbiB0aGUgbmV4dCBwYXRjaC4KKworICAgICAgICAoV2ViS2l0
OjpTZXJ2aWNlc092ZXJsYXlDb250cm9sbGVyOjpkZXRlcm1pbmVBY3RpdmVIaWdobGlnaHQpOgor
ICAgICAgICBSdW4gdGhyb3VnaCB0aGUgbGlzdCBvZiBzZXJ2aWNlcywgYW5kIHRyeSB0byBmaW5k
IG9uZSB0aGF0IGlzIGhvdmVyZWQuCisgICAgICAgIFdlIHByZWZlciB0ZWxlcGhvbmUgbnVtYmVy
IGhpZ2hsaWdodHMgdG8gc2VsZWN0aW9uIGhpZ2hsaWdodHMsIGFuZAorICAgICAgICB3ZSB3aWxs
IG5ldmVyIG1ha2UgYSBzZWxlY3Rpb24gaGlnaGxpZ2h0IGFjdGl2ZSBpZiBpdCBpcyBib3RoCisg
ICAgICAgIG5vdCBzZXJ2aWNlYWJsZSBhbmQgdGhlcmUgYXJlIG5vIHRlbGVwaG9uZSBudW1iZXJz
IHRvIHNob3cgaW4gdGhlIGNvbWJpbmVkIG1lbnUuCisgICAgICAgIFRoaXMgaXMgdGhlIGNlbnRy
YWxpemVkIGxvY2F0aW9uIGZvciBkZXRlcm1pbmF0aW9uIG9mIHdoaWNoIGhpZ2hsaWdodAorICAg
ICAgICBzaG91bGQgYmUgY29uc2lkZXJlZCBhY3RpdmUuIElmIHRoZSBhY3RpdmUgaGlnaGxpZ2h0
IGNoYW5nZWQsIHVwZGF0ZQorICAgICAgICB0aGUgdGltZSBzaW5jZSBsYXN0IGNoYW5nZSBhbmQg
Y2FuY2VsIHRoZSBtb3VzZS1kb3duIHRyYWNraW5nLgorCisgICAgICAgIChXZWJLaXQ6OlNlcnZp
Y2VzT3ZlcmxheUNvbnRyb2xsZXI6Om1vdXNlRXZlbnQpOgorICAgICAgICBBZGp1c3Qgc29tZSBj
b21tZW50cyB0byBiZSBtb3JlIGV4cGxhbmF0b3J5LgorICAgICAgICBBIGJ1bmNoIG9mIGNvZGUg
bW92ZWQgb3V0IG9mIGhlcmUgYW5kIGludG8gZGV0ZXJtaW5lQWN0aXZlSGlnaGxpZ2h0LgorCisg
ICAgICAgIChXZWJLaXQ6OlNlcnZpY2VzT3ZlcmxheUNvbnRyb2xsZXI6OmhhbmRsZUNsaWNrKToK
KyAgICAgICAgQWRqdXN0IHRvIHRha2UgYSByZWZlcmVuY2UgYW5kIHVzZSBIaWdobGlnaHQgaW5z
dGVhZCBvZiBEREhpZ2hsaWdodFJlZi4KKworMjAxNC0wOC0wOSAgVGltIEhvcnRvbiAgPHRpbW90
aHlfaG9ydG9uQGFwcGxlLmNvbT4KKwogICAgICAgICBSRUdSRVNTSU9OIChyMTcyMzAxKTogQ29t
YmluZWQgcGhvbmUgbnVtYmVyIGhpZ2hsaWdodCBkb2Vzbid0IGFwcGVhciBpZiByaWNoIGNvbnRl
bnQgaXMgc2VsZWN0ZWQgYW5kIHdlIGhhdmUgbm8gcmljaCBjb250ZW50IHNlcnZpY2VzCiAgICAg
ICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMzU3ODUKICAgICAg
ICAgPHJkYXI6Ly9wcm9ibGVtLzE3OTY5ODQzPgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIv
V2ViUHJvY2Vzcy9XZWJQYWdlL1NlcnZpY2VzT3ZlcmxheUNvbnRyb2xsZXIuaCBiL1NvdXJjZS9X
ZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9TZXJ2aWNlc092ZXJsYXlDb250cm9sbGVyLmgKaW5k
ZXggYjRmM2IxYi4uNjg4ODRlMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vz
cy9XZWJQYWdlL1NlcnZpY2VzT3ZlcmxheUNvbnRyb2xsZXIuaAorKysgYi9Tb3VyY2UvV2ViS2l0
Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvU2VydmljZXNPdmVybGF5Q29udHJvbGxlci5oCkBAIC0zMSw2
ICszMSw3IEBACiAjaW5jbHVkZSAiUGFnZU92ZXJsYXkuaCIKICNpbmNsdWRlIDxXZWJDb3JlL1Jh
bmdlLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9UaW1lci5oPgorI2luY2x1ZGUgPHd0Zi9SZWZDb3Vu
dGVkLmg+CiAKIHR5cGVkZWYgdm9pZCogRERIaWdobGlnaHRSZWY7CiAKQEAgLTQ0LDE5ICs0NSw2
IEBAIG5hbWVzcGFjZSBXZWJLaXQgewogCiBjbGFzcyBXZWJQYWdlOwogCi10eXBlZGVmIHZvaWQq
IERESGlnaGxpZ2h0UmVmOwotCi1zdHJ1Y3QgVGVsZXBob25lTnVtYmVyRGF0YSB7Ci0gICAgVGVs
ZXBob25lTnVtYmVyRGF0YShSZXRhaW5QdHI8RERIaWdobGlnaHRSZWY+IGhpZ2hsaWdodCwgUGFz
c1JlZlB0cjxXZWJDb3JlOjpSYW5nZT4gcmFuZ2UpCi0gICAgICAgIDogaGlnaGxpZ2h0KGhpZ2hs
aWdodCkKLSAgICAgICAgLCByYW5nZShyYW5nZSkKLSAgICB7Ci0gICAgfQotCi0gICAgUmV0YWlu
UHRyPERESGlnaGxpZ2h0UmVmPiBoaWdobGlnaHQ7Ci0gICAgUmVmUHRyPFdlYkNvcmU6OlJhbmdl
PiByYW5nZTsKLX07Ci0KIGNsYXNzIFNlcnZpY2VzT3ZlcmxheUNvbnRyb2xsZXIgOiBwcml2YXRl
IFBhZ2VPdmVybGF5OjpDbGllbnQgewogcHVibGljOgogICAgIFNlcnZpY2VzT3ZlcmxheUNvbnRy
b2xsZXIoV2ViUGFnZSYpOwpAQCAtNjYsNDkgKzU0LDc2IEBAIHB1YmxpYzoKICAgICB2b2lkIHNl
bGVjdGlvblJlY3RzRGlkQ2hhbmdlKGNvbnN0IFZlY3RvcjxXZWJDb3JlOjpMYXlvdXRSZWN0PiYs
IGNvbnN0IFZlY3RvcjxXZWJDb3JlOjpHYXBSZWN0cz4mLCBib29sIGlzVGV4dE9ubHkpOwogCiBw
cml2YXRlOgotICAgIHZvaWQgY3JlYXRlT3ZlcmxheUlmTmVlZGVkKCk7Ci0gICAgdm9pZCBoYW5k
bGVDbGljayhjb25zdCBXZWJDb3JlOjpJbnRQb2ludCYsIERESGlnaGxpZ2h0UmVmKTsKLSAgICB2
b2lkIGNsZWFySGlnaGxpZ2h0U3RhdGUoKTsKLQorICAgIGNsYXNzIEhpZ2hsaWdodCA6IHB1Ymxp
YyBSZWZDb3VudGVkPEhpZ2hsaWdodD4geworICAgICAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShI
aWdobGlnaHQpOworICAgIHB1YmxpYzoKKyAgICAgICAgc3RhdGljIFBhc3NSZWZQdHI8SGlnaGxp
Z2h0PiBjcmVhdGVGb3JTZWxlY3Rpb24oUmV0YWluUHRyPERESGlnaGxpZ2h0UmVmPik7CisgICAg
ICAgIHN0YXRpYyBQYXNzUmVmUHRyPEhpZ2hsaWdodD4gY3JlYXRlRm9yVGVsZXBob25lTnVtYmVy
KFJldGFpblB0cjxEREhpZ2hsaWdodFJlZj4sIFBhc3NSZWZQdHI8V2ViQ29yZTo6UmFuZ2U+KTsK
KworICAgICAgICBEREhpZ2hsaWdodFJlZiBoaWdobGlnaHQoKSBjb25zdCB7IHJldHVybiBtX2hp
Z2hsaWdodC5nZXQoKTsgfQorICAgICAgICBXZWJDb3JlOjpSYW5nZSogcmFuZ2UoKSBjb25zdCB7
IHJldHVybiBtX3JhbmdlLmdldCgpOyB9CisKKyAgICAgICAgZW51bSBjbGFzcyBUeXBlIHsgVGVs
ZXBob25lTnVtYmVyLCBTZWxlY3Rpb24gfTsKKyAgICAgICAgVHlwZSB0eXBlKCkgY29uc3QgeyBy
ZXR1cm4gbV90eXBlOyB9CisKKyAgICBwcml2YXRlOgorICAgICAgICBleHBsaWNpdCBIaWdobGln
aHQoVHlwZSB0eXBlLCBSZXRhaW5QdHI8RERIaWdobGlnaHRSZWY+IGhpZ2hsaWdodCwgUGFzc1Jl
ZlB0cjxXZWJDb3JlOjpSYW5nZT4gcmFuZ2UpCisgICAgICAgICAgICA6IG1faGlnaGxpZ2h0KGhp
Z2hsaWdodCkKKyAgICAgICAgICAgICwgbV9yYW5nZShyYW5nZSkKKyAgICAgICAgICAgICwgbV90
eXBlKHR5cGUpCisgICAgICAgIHsKKyAgICAgICAgICAgIEFTU0VSVChtX2hpZ2hsaWdodCk7Cisg
ICAgICAgICAgICBBU1NFUlQodHlwZSAhPSBUeXBlOjpUZWxlcGhvbmVOdW1iZXIgfHwgbV9yYW5n
ZSk7CisgICAgICAgIH0KKworICAgICAgICBSZXRhaW5QdHI8RERIaWdobGlnaHRSZWY+IG1faGln
aGxpZ2h0OworICAgICAgICBSZWZQdHI8V2ViQ29yZTo6UmFuZ2U+IG1fcmFuZ2U7CisgICAgICAg
IFR5cGUgbV90eXBlOworICAgIH07CisKKyAgICAvLyBQYWdlT3ZlcmxheTo6Q2xpZW50CiAgICAg
dmlydHVhbCB2b2lkIHBhZ2VPdmVybGF5RGVzdHJveWVkKFBhZ2VPdmVybGF5Kikgb3ZlcnJpZGU7
CiAgICAgdmlydHVhbCB2b2lkIHdpbGxNb3ZlVG9XZWJQYWdlKFBhZ2VPdmVybGF5KiwgV2ViUGFn
ZSopIG92ZXJyaWRlOwogICAgIHZpcnR1YWwgdm9pZCBkaWRNb3ZlVG9XZWJQYWdlKFBhZ2VPdmVy
bGF5KiwgV2ViUGFnZSopIG92ZXJyaWRlOwogICAgIHZpcnR1YWwgdm9pZCBkcmF3UmVjdChQYWdl
T3ZlcmxheSosIFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dCYsIGNvbnN0IFdlYkNvcmU6OkludFJl
Y3QmIGRpcnR5UmVjdCkgb3ZlcnJpZGU7CiAgICAgdmlydHVhbCBib29sIG1vdXNlRXZlbnQoUGFn
ZU92ZXJsYXkqLCBjb25zdCBXZWJNb3VzZUV2ZW50Jikgb3ZlcnJpZGU7CiAKLSAgICBib29sIGRy
YXdUZWxlcGhvbmVOdW1iZXJIaWdobGlnaHRJZlZpc2libGUoV2ViQ29yZTo6R3JhcGhpY3NDb250
ZXh0JiwgY29uc3QgV2ViQ29yZTo6SW50UmVjdCYgZGlydHlSZWN0KTsKLSAgICB2b2lkIGRyYXdT
ZWxlY3Rpb25IaWdobGlnaHQoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0JiwgY29uc3QgV2ViQ29y
ZTo6SW50UmVjdCYgZGlydHlSZWN0KTsKLSAgICB2b2lkIGRyYXdIaWdobGlnaHQoRERIaWdobGln
aHRSZWYsIFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dCYpOworICAgIHZvaWQgY3JlYXRlT3Zlcmxh
eUlmTmVlZGVkKCk7CisgICAgdm9pZCBoYW5kbGVDbGljayhjb25zdCBXZWJDb3JlOjpJbnRQb2lu
dCYsIEhpZ2hsaWdodCYpOworCisgICAgdm9pZCBkcmF3SGlnaGxpZ2h0KEhpZ2hsaWdodCYsIFdl
YkNvcmU6OkdyYXBoaWNzQ29udGV4dCYpOworCisgICAgdm9pZCByZW1vdmVBbGxQb3RlbnRpYWxI
aWdobGlnaHRzT2ZUeXBlKEhpZ2hsaWdodDo6VHlwZSk7CisgICAgdm9pZCBidWlsZFBob25lTnVt
YmVySGlnaGxpZ2h0cygpOworICAgIHZvaWQgYnVpbGRTZWxlY3Rpb25IaWdobGlnaHQoKTsKKyAg
ICB2b2lkIGRpZFJlYnVpbGRQb3RlbnRpYWxIaWdobGlnaHRzKCk7CiAKLSAgICB2b2lkIGVzdGFi
bGlzaEhvdmVyZWRUZWxlcGhvbmVIaWdobGlnaHQoYm9vbCYgbW91c2VJc092ZXJCdXR0b24pOwot
ICAgIHZvaWQgbWF5YmVDcmVhdGVTZWxlY3Rpb25IaWdobGlnaHQoKTsKKyAgICB2b2lkIGRldGVy
bWluZUFjdGl2ZUhpZ2hsaWdodChib29sJiBtb3VzZUlzT3ZlckJ1dHRvbik7CisgICAgdm9pZCBj
bGVhckFjdGl2ZUhpZ2hsaWdodCgpOwogCi0gICAgdm9pZCBjbGVhclNlbGVjdGlvbkhpZ2hsaWdo
dCgpOwotICAgIHZvaWQgY2xlYXJIb3ZlcmVkVGVsZXBob25lTnVtYmVySGlnaGxpZ2h0KCk7Cisg
ICAgYm9vbCBoYXNSZWxldmFudFNlbGVjdGlvblNlcnZpY2VzKCk7CiAKLSAgICBib29sIG1vdXNl
SXNPdmVySGlnaGxpZ2h0KERESGlnaGxpZ2h0UmVmLCBib29sJiBtb3VzZUlzT3ZlckJ1dHRvbikg
Y29uc3Q7CisgICAgYm9vbCBtb3VzZUlzT3ZlckhpZ2hsaWdodChIaWdobGlnaHQmLCBib29sJiBt
b3VzZUlzT3ZlckJ1dHRvbikgY29uc3Q7CiAgICAgc3RkOjpjaHJvbm86Om1pbGxpc2Vjb25kcyBy
ZW1haW5pbmdUaW1lVW50aWxIaWdobGlnaHRTaG91bGRCZVNob3duKCkgY29uc3Q7CiAgICAgdm9p
ZCByZXBhaW50SGlnaGxpZ2h0VGltZXJGaXJlZChXZWJDb3JlOjpUaW1lcjxTZXJ2aWNlc092ZXJs
YXlDb250cm9sbGVyPiYpOwogCi0gICAgV2ViUGFnZSogbV93ZWJQYWdlOworICAgIFdlYlBhZ2Um
IG1fd2ViUGFnZTsKICAgICBQYWdlT3ZlcmxheSogbV9zZXJ2aWNlc092ZXJsYXk7Ci0gICAgCisK
KyAgICBSZWZQdHI8SGlnaGxpZ2h0PiBtX2FjdGl2ZUhpZ2hsaWdodDsKKyAgICBIYXNoU2V0PFJl
ZlB0cjxIaWdobGlnaHQ+PiBtX3BvdGVudGlhbEhpZ2hsaWdodHM7CisKKyAgICBWZWN0b3I8UmVm
UHRyPFdlYkNvcmU6OlJhbmdlPj4gbV9jdXJyZW50VGVsZXBob25lTnVtYmVyUmFuZ2VzOwogICAg
IFZlY3RvcjxXZWJDb3JlOjpMYXlvdXRSZWN0PiBtX2N1cnJlbnRTZWxlY3Rpb25SZWN0czsKLSAg
ICBSZXRhaW5QdHI8RERIaWdobGlnaHRSZWY+IG1fc2VsZWN0aW9uSGlnaGxpZ2h0OwogICAgIGJv
b2wgbV9pc1RleHRPbmx5OwotICAgIHN0ZDo6Y2hyb25vOjpzdGVhZHlfY2xvY2s6OnRpbWVfcG9p
bnQgbV9sYXN0U2VsZWN0aW9uQ2hhbmdlVGltZTsKLSAgICBzdGQ6OmNocm9ubzo6c3RlYWR5X2Ns
b2NrOjp0aW1lX3BvaW50IG1fbGFzdEhvdmVyZWRIaWdobGlnaHRDaGFuZ2VUaW1lOwogCi0gICAg
VmVjdG9yPFJlZlB0cjxXZWJDb3JlOjpSYW5nZT4+IG1fY3VycmVudFRlbGVwaG9uZU51bWJlclJh
bmdlczsKLSAgICBWZWN0b3I8UmV0YWluUHRyPERESGlnaGxpZ2h0UmVmPj4gbV90ZWxlcGhvbmVO
dW1iZXJIaWdobGlnaHRzOwotICAgIHN0ZDo6dW5pcXVlX3B0cjxUZWxlcGhvbmVOdW1iZXJEYXRh
PiBtX2hvdmVyZWRUZWxlcGhvbmVOdW1iZXJEYXRhOworICAgIHN0ZDo6Y2hyb25vOjpzdGVhZHlf
Y2xvY2s6OnRpbWVfcG9pbnQgbV9sYXN0U2VsZWN0aW9uQ2hhbmdlVGltZTsKKyAgICBzdGQ6OmNo
cm9ubzo6c3RlYWR5X2Nsb2NrOjp0aW1lX3BvaW50IG1fbGFzdEFjdGl2ZUhpZ2hsaWdodENoYW5n
ZVRpbWU7CiAKLSAgICBSZXRhaW5QdHI8RERIaWdobGlnaHRSZWY+IG1fY3VycmVudEhvdmVyZWRI
aWdobGlnaHQ7Ci0gICAgUmV0YWluUHRyPERESGlnaGxpZ2h0UmVmPiBtX2N1cnJlbnRNb3VzZURv
d25PbkJ1dHRvbkhpZ2hsaWdodDsKKyAgICBSZWZQdHI8SGlnaGxpZ2h0PiBtX2N1cnJlbnRNb3Vz
ZURvd25PbkJ1dHRvbkhpZ2hsaWdodDsKKyAgICBXZWJDb3JlOjpJbnRQb2ludCBtX21vdXNlUG9z
aXRpb247CiAKICAgICBXZWJDb3JlOjpUaW1lcjxTZXJ2aWNlc092ZXJsYXlDb250cm9sbGVyPiBt
X3JlcGFpbnRIaWdobGlnaHRUaW1lcjsKLQotICAgIFdlYkNvcmU6OkludFBvaW50IG1fbW91c2VQ
b3NpdGlvbjsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYktpdApkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL21hYy9TZXJ2aWNlc092ZXJsYXlDb250cm9sbGVy
Lm1tIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL21hYy9TZXJ2aWNlc092ZXJs
YXlDb250cm9sbGVyLm1tCmluZGV4IGNmOGM4ZDcuLmJkNmNkOWMgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9tYWMvU2VydmljZXNPdmVybGF5Q29udHJvbGxl
ci5tbQorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvbWFjL1NlcnZpY2Vz
T3ZlcmxheUNvbnRyb2xsZXIubW0KQEAgLTYzLDYgKzYzLDE2IEBAIHVzaW5nIG5hbWVzcGFjZSBX
ZWJDb3JlOwogCiBuYW1lc3BhY2UgV2ViS2l0IHsKIAorUGFzc1JlZlB0cjxTZXJ2aWNlc092ZXJs
YXlDb250cm9sbGVyOjpIaWdobGlnaHQ+IFNlcnZpY2VzT3ZlcmxheUNvbnRyb2xsZXI6OkhpZ2hs
aWdodDo6Y3JlYXRlRm9yU2VsZWN0aW9uKFJldGFpblB0cjxEREhpZ2hsaWdodFJlZj4gaGlnaGxp
Z2h0KQoreworICAgIHJldHVybiBhZG9wdFJlZihuZXcgSGlnaGxpZ2h0KFR5cGU6OlNlbGVjdGlv
biwgaGlnaGxpZ2h0LCBudWxscHRyKSk7Cit9CisKK1Bhc3NSZWZQdHI8U2VydmljZXNPdmVybGF5
Q29udHJvbGxlcjo6SGlnaGxpZ2h0PiBTZXJ2aWNlc092ZXJsYXlDb250cm9sbGVyOjpIaWdobGln
aHQ6OmNyZWF0ZUZvclRlbGVwaG9uZU51bWJlcihSZXRhaW5QdHI8RERIaWdobGlnaHRSZWY+IGhp
Z2hsaWdodCwgUGFzc1JlZlB0cjxSYW5nZT4gcmFuZ2UpCit7CisgICAgcmV0dXJuIGFkb3B0UmVm
KG5ldyBIaWdobGlnaHQoVHlwZTo6VGVsZXBob25lTnVtYmVyLCBoaWdobGlnaHQsIHJhbmdlKSk7
Cit9CisKIHN0YXRpYyBJbnRSZWN0IHRleHRRdWFkc1RvQm91bmRpbmdSZWN0Rm9yUmFuZ2UoUmFu
Z2UmIHJhbmdlKQogewogICAgIFZlY3RvcjxGbG9hdFF1YWQ+IHRleHRRdWFkczsKQEAgLTc0LDcg
Kzg0LDcgQEAgc3RhdGljIEludFJlY3QgdGV4dFF1YWRzVG9Cb3VuZGluZ1JlY3RGb3JSYW5nZShS
YW5nZSYgcmFuZ2UpCiB9CiAKIFNlcnZpY2VzT3ZlcmxheUNvbnRyb2xsZXI6OlNlcnZpY2VzT3Zl
cmxheUNvbnRyb2xsZXIoV2ViUGFnZSYgd2ViUGFnZSkKLSAgICA6IG1fd2ViUGFnZSgmd2ViUGFn
ZSkKKyAgICA6IG1fd2ViUGFnZSh3ZWJQYWdlKQogICAgICwgbV9zZXJ2aWNlc092ZXJsYXkobnVs
bHB0cikKICAgICAsIG1faXNUZXh0T25seShmYWxzZSkKICAgICAsIG1fcmVwYWludEhpZ2hsaWdo
dFRpbWVyKHRoaXMsICZTZXJ2aWNlc092ZXJsYXlDb250cm9sbGVyOjpyZXBhaW50SGlnaGxpZ2h0
VGltZXJGaXJlZCkKQEAgLTk5LDMxICsxMDksMTIgQEAgdm9pZCBTZXJ2aWNlc092ZXJsYXlDb250
cm9sbGVyOjp3aWxsTW92ZVRvV2ViUGFnZShQYWdlT3ZlcmxheSosIFdlYlBhZ2UqIHdlYlBhZ2UK
IAogICAgIEFTU0VSVChtX3NlcnZpY2VzT3ZlcmxheSk7CiAgICAgbV9zZXJ2aWNlc092ZXJsYXkg
PSBudWxscHRyOwotCi0gICAgQVNTRVJUKG1fd2ViUGFnZSk7Ci0gICAgbV93ZWJQYWdlID0gbnVs
bHB0cjsKIH0KIAogdm9pZCBTZXJ2aWNlc092ZXJsYXlDb250cm9sbGVyOjpkaWRNb3ZlVG9XZWJQ
YWdlKFBhZ2VPdmVybGF5KiwgV2ViUGFnZSopCiB7CiB9CiAKLXZvaWQgU2VydmljZXNPdmVybGF5
Q29udHJvbGxlcjo6Y3JlYXRlT3ZlcmxheUlmTmVlZGVkKCkKLXsKLSAgICBpZiAobV9zZXJ2aWNl
c092ZXJsYXkpIHsKLSAgICAgICAgbV9zZXJ2aWNlc092ZXJsYXktPnNldE5lZWRzRGlzcGxheSgp
OwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgaWYgKG1fY3VycmVudFRlbGVwaG9uZU51
bWJlclJhbmdlcy5pc0VtcHR5KCkgJiYgKCFXZWJQcm9jZXNzOjpzaGFyZWQoKS5oYXNTZWxlY3Rp
b25TZXJ2aWNlcygpIHx8IG1fY3VycmVudFNlbGVjdGlvblJlY3RzLmlzRW1wdHkoKSkpCi0gICAg
ICAgIHJldHVybjsKLQotICAgIFJlZlB0cjxQYWdlT3ZlcmxheT4gb3ZlcmxheSA9IFBhZ2VPdmVy
bGF5OjpjcmVhdGUodGhpcywgUGFnZU92ZXJsYXk6Ok92ZXJsYXlUeXBlOjpEb2N1bWVudCk7Ci0g
ICAgbV9zZXJ2aWNlc092ZXJsYXkgPSBvdmVybGF5LmdldCgpOwotICAgIG1fd2ViUGFnZS0+aW5z
dGFsbFBhZ2VPdmVybGF5KG92ZXJsYXkucmVsZWFzZSgpLCBQYWdlT3ZlcmxheTo6RmFkZU1vZGU6
OkZhZGUpOwotICAgIG1fc2VydmljZXNPdmVybGF5LT5zZXROZWVkc0Rpc3BsYXkoKTsKLX0KLQog
c3RhdGljIGNvbnN0IHVpbnQ4X3QgQWxpZ25tZW50Tm9uZSA9IDA7CiBzdGF0aWMgY29uc3QgdWlu
dDhfdCBBbGlnbm1lbnRMZWZ0ID0gMSA8PCAwOwogc3RhdGljIGNvbnN0IHVpbnQ4X3QgQWxpZ25t
ZW50UmlnaHQgPSAxIDw8IDE7CkBAIC0yMTUsNyArMjA2LDYgQEAgc3RhdGljIHZvaWQgY29tcGFj
dFJlY3RzV2l0aEdhcFJlY3RzKFZlY3RvcjxMYXlvdXRSZWN0PiYgcmVjdHMsIGNvbnN0IFZlY3Rv
cjxHYXAKIHZvaWQgU2VydmljZXNPdmVybGF5Q29udHJvbGxlcjo6c2VsZWN0aW9uUmVjdHNEaWRD
aGFuZ2UoY29uc3QgVmVjdG9yPExheW91dFJlY3Q+JiByZWN0cywgY29uc3QgVmVjdG9yPEdhcFJl
Y3RzPiYgZ2FwUmVjdHMsIGJvb2wgaXNUZXh0T25seSkKIHsKICNpZiBfX01BQ19PU19YX1ZFUlNJ
T05fTUlOX1JFUVVJUkVEID4gMTA5MAotICAgIGNsZWFyU2VsZWN0aW9uSGlnaGxpZ2h0KCk7CiAg
ICAgbV9jdXJyZW50U2VsZWN0aW9uUmVjdHMgPSByZWN0czsKICAgICBtX2lzVGV4dE9ubHkgPSBp
c1RleHRPbmx5OwogCkBAIC0yMjgsNyArMjE4LDcgQEAgdm9pZCBTZXJ2aWNlc092ZXJsYXlDb250
cm9sbGVyOjpzZWxlY3Rpb25SZWN0c0RpZENoYW5nZShjb25zdCBWZWN0b3I8TGF5b3V0UmVjdD4K
IAogICAgIExPRyhTZXJ2aWNlcywgIlNlcnZpY2VzT3ZlcmxheUNvbnRyb2xsZXIgLSBTZWxlY3Rp
b24gcmVjdHMgY2hhbmdlZCAtIE5vdyBoYXZlICVsdVxuIiwgcmVjdHMuc2l6ZSgpKTsKIAotICAg
IGNyZWF0ZU92ZXJsYXlJZk5lZWRlZCgpOworICAgIGJ1aWxkU2VsZWN0aW9uSGlnaGxpZ2h0KCk7
CiAjZWxzZQogICAgIFVOVVNFRF9QQVJBTShyZWN0cyk7CiAjZW5kaWYKQEAgLTIzOSw5NSArMjI5
LDE3IEBAIHZvaWQgU2VydmljZXNPdmVybGF5Q29udHJvbGxlcjo6c2VsZWN0ZWRUZWxlcGhvbmVO
dW1iZXJSYW5nZXNDaGFuZ2VkKGNvbnN0IFZlY3RvCiAjaWYgUExBVEZPUk0oTUFDKSAmJiBfX01B
Q19PU19YX1ZFUlNJT05fTUlOX1JFUVVJUkVEID4gMTA5MAogICAgIExPRyhTZXJ2aWNlcywgIlNl
cnZpY2VzT3ZlcmxheUNvbnRyb2xsZXIgLSBUZWxlcGhvbmUgbnVtYmVyIHJhbmdlcyBjaGFuZ2Vk
IC0gSGFkICVsdSwgbm93IGhhdmUgJWx1XG4iLCBtX2N1cnJlbnRUZWxlcGhvbmVOdW1iZXJSYW5n
ZXMuc2l6ZSgpLCByYW5nZXMuc2l6ZSgpKTsKICAgICBtX2N1cnJlbnRUZWxlcGhvbmVOdW1iZXJS
YW5nZXMgPSByYW5nZXM7Ci0gICAgbV90ZWxlcGhvbmVOdW1iZXJIaWdobGlnaHRzLmNsZWFyKCk7
Ci0gICAgbV90ZWxlcGhvbmVOdW1iZXJIaWdobGlnaHRzLnJlc2l6ZShyYW5nZXMuc2l6ZSgpKTsK
IAotICAgIGNyZWF0ZU92ZXJsYXlJZk5lZWRlZCgpOworICAgIGJ1aWxkUGhvbmVOdW1iZXJIaWdo
bGlnaHRzKCk7CiAjZWxzZQogICAgIFVOVVNFRF9QQVJBTShyYW5nZXMpOwogI2VuZGlmCiB9CiAK
LXZvaWQgU2VydmljZXNPdmVybGF5Q29udHJvbGxlcjo6Y2xlYXJIaWdobGlnaHRTdGF0ZSgpCi17
Ci0gICAgY2xlYXJTZWxlY3Rpb25IaWdobGlnaHQoKTsKLSAgICBjbGVhckhvdmVyZWRUZWxlcGhv
bmVOdW1iZXJIaWdobGlnaHQoKTsKLQotICAgIG1fdGVsZXBob25lTnVtYmVySGlnaGxpZ2h0cy5j
bGVhcigpOwotfQotCi12b2lkIFNlcnZpY2VzT3ZlcmxheUNvbnRyb2xsZXI6OmRyYXdSZWN0KFBh
Z2VPdmVybGF5KiBvdmVybGF5LCBXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQmIGdyYXBoaWNzQ29u
dGV4dCwgY29uc3QgV2ViQ29yZTo6SW50UmVjdCYgZGlydHlSZWN0KQotewotICAgIGlmIChtX2N1
cnJlbnRTZWxlY3Rpb25SZWN0cy5pc0VtcHR5KCkgJiYgbV9jdXJyZW50VGVsZXBob25lTnVtYmVy
UmFuZ2VzLmlzRW1wdHkoKSkgewotICAgICAgICBjbGVhckhpZ2hsaWdodFN0YXRlKCk7Ci0gICAg
ICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBpZiAoZHJhd1RlbGVwaG9uZU51bWJlckhpZ2hsaWdo
dElmVmlzaWJsZShncmFwaGljc0NvbnRleHQsIGRpcnR5UmVjdCkpCi0gICAgICAgIHJldHVybjsK
LQotICAgIGRyYXdTZWxlY3Rpb25IaWdobGlnaHQoZ3JhcGhpY3NDb250ZXh0LCBkaXJ0eVJlY3Qp
OwotfQotCi12b2lkIFNlcnZpY2VzT3ZlcmxheUNvbnRyb2xsZXI6OmRyYXdTZWxlY3Rpb25IaWdo
bGlnaHQoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0JiBncmFwaGljc0NvbnRleHQsIGNvbnN0IFdl
YkNvcmU6OkludFJlY3QmIGRpcnR5UmVjdCkKLXsKLSAgICAvLyBJdCdzIHBvc3NpYmxlIHRvIGVu
ZCB1cCBkcmF3aW5nIHRoZSBzZWxlY3Rpb24gaGlnaGxpZ2h0IGJlZm9yZSB3ZSd2ZSBhY3R1YWxs
eSByZWNlaXZlZCB0aGUgc2VsZWN0aW9uIHJlY3RzLgotICAgIC8vIElmIHRoYXQgaGFwcGVucyB3
ZSdsbCBlbmQgdXAgaGVyZSBhZ2FpbiBvbmNlIHdlIGhhdmUgdGhlIHJlY3RzLgotICAgIGlmICht
X2N1cnJlbnRTZWxlY3Rpb25SZWN0cy5pc0VtcHR5KCkpCi0gICAgICAgIHJldHVybjsKLQotICAg
IC8vIElmIHRoZXJlIGFyZSBubyBhcHByb3ByaWF0ZSBpbnN0YWxsZWQgc2VsZWN0aW9uIHNlcnZp
Y2VzIGFuZCB3ZSBoYXZlIG5vIHBob25lIG51bWJlcnMgZGV0ZWN0ZWQsIHRoZW4gd2UgaGF2ZSBu
b3RoaW5nIHRvIGRyYXcuCi0gICAgaWYgKCghV2ViUHJvY2Vzczo6c2hhcmVkKCkuaGFzU2VsZWN0
aW9uU2VydmljZXMoKSB8fCAoIVdlYlByb2Nlc3M6OnNoYXJlZCgpLmhhc1JpY2hDb250ZW50U2Vy
dmljZXMoKSAmJiAhbV9pc1RleHRPbmx5KSkgJiYgbV9jdXJyZW50VGVsZXBob25lTnVtYmVyUmFu
Z2VzLmlzRW1wdHkoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYgKCFtX3NlbGVjdGlvbkhp
Z2hsaWdodCkKLSAgICAgICAgbWF5YmVDcmVhdGVTZWxlY3Rpb25IaWdobGlnaHQoKTsKLQotICAg
IGlmIChtX3NlbGVjdGlvbkhpZ2hsaWdodCkKLSAgICAgICAgZHJhd0hpZ2hsaWdodChtX3NlbGVj
dGlvbkhpZ2hsaWdodC5nZXQoKSwgZ3JhcGhpY3NDb250ZXh0KTsKLX0KLQotYm9vbCBTZXJ2aWNl
c092ZXJsYXlDb250cm9sbGVyOjpkcmF3VGVsZXBob25lTnVtYmVySGlnaGxpZ2h0SWZWaXNpYmxl
KFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dCYgZ3JhcGhpY3NDb250ZXh0LCBjb25zdCBXZWJDb3Jl
OjpJbnRSZWN0JiBkaXJ0eVJlY3QpCi17Ci0gICAgLy8gTWFrZSBzdXJlIHRoZSBob3ZlcmVkIHRl
bGVwaG9uZSBudW1iZXIgaGlnaGxpZ2h0IGlzIHN0aWxsIGhvdmVyZWQuCi0gICAgaWYgKG1faG92
ZXJlZFRlbGVwaG9uZU51bWJlckRhdGEpIHsKLSAgICAgICAgQm9vbGVhbiBvbkJ1dHRvbjsKLSAg
ICAgICAgaWYgKCFEREhpZ2hsaWdodFBvaW50SXNPbkhpZ2hsaWdodChtX2hvdmVyZWRUZWxlcGhv
bmVOdW1iZXJEYXRhLT5oaWdobGlnaHQuZ2V0KCksIChDR1BvaW50KW1fbW91c2VQb3NpdGlvbiwg
Jm9uQnV0dG9uKSkKLSAgICAgICAgICAgIGNsZWFySG92ZXJlZFRlbGVwaG9uZU51bWJlckhpZ2hs
aWdodCgpOwotCi0gICAgICAgIGJvb2wgZm91bmRNYXRjaGluZ1JhbmdlID0gZmFsc2U7Ci0KLSAg
ICAgICAgLy8gTWFrZSBzdXJlIHRoZSBob3ZlcmVkIGhpZ2hsaWdodCBzdGlsbCBjb3JyZXNwb25k
cyB0byBhIGN1cnJlbnQgdGVsZXBob25lIG51bWJlciByYW5nZS4KLSAgICAgICAgZm9yIChhdXRv
JiByYW5nZSA6IG1fY3VycmVudFRlbGVwaG9uZU51bWJlclJhbmdlcykgewotICAgICAgICAgICAg
aWYgKGFyZVJhbmdlc0VxdWFsKHJhbmdlLmdldCgpLCBtX2hvdmVyZWRUZWxlcGhvbmVOdW1iZXJE
YXRhLT5yYW5nZS5nZXQoKSkpIHsKLSAgICAgICAgICAgICAgICBmb3VuZE1hdGNoaW5nUmFuZ2Ug
PSB0cnVlOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQotICAgICAgICB9
Ci0KLSAgICAgICAgaWYgKCFmb3VuZE1hdGNoaW5nUmFuZ2UpCi0gICAgICAgICAgICBjbGVhckhv
dmVyZWRUZWxlcGhvbmVOdW1iZXJIaWdobGlnaHQoKTsKLSAgICB9Ci0KLSAgICAvLyBGb3VuZCBv
dXQgd2hpY2ggLSBpZiBhbnkgLSB0ZWxlcGhvbmUgbnVtYmVyIGlzIGhvdmVyZWQuCi0gICAgaWYg
KCFtX2hvdmVyZWRUZWxlcGhvbmVOdW1iZXJEYXRhKSB7Ci0gICAgICAgIGJvb2wgbW91c2VJc092
ZXJCdXR0b247Ci0gICAgICAgIGVzdGFibGlzaEhvdmVyZWRUZWxlcGhvbmVIaWdobGlnaHQobW91
c2VJc092ZXJCdXR0b24pOwotICAgIH0KLQotICAgIC8vIElmIGEgdGVsZXBob25lIG51bWJlciBp
cyBhY3R1YWxseSBob3ZlcmVkLCBkcmF3IGl0LgotICAgIGlmIChtX2hvdmVyZWRUZWxlcGhvbmVO
dW1iZXJEYXRhKSB7Ci0gICAgICAgIGRyYXdIaWdobGlnaHQobV9ob3ZlcmVkVGVsZXBob25lTnVt
YmVyRGF0YS0+aGlnaGxpZ2h0LmdldCgpLCBncmFwaGljc0NvbnRleHQpOwotICAgICAgICByZXR1
cm4gdHJ1ZTsKLSAgICB9Ci0KLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLWJvb2wgU2VydmljZXNP
dmVybGF5Q29udHJvbGxlcjo6bW91c2VJc092ZXJIaWdobGlnaHQoRERIaWdobGlnaHRSZWYgaGln
aGxpZ2h0LCBib29sJiBtb3VzZUlzT3ZlckJ1dHRvbikgY29uc3QKK2Jvb2wgU2VydmljZXNPdmVy
bGF5Q29udHJvbGxlcjo6bW91c2VJc092ZXJIaWdobGlnaHQoSGlnaGxpZ2h0JiBoaWdobGlnaHQs
IGJvb2wmIG1vdXNlSXNPdmVyQnV0dG9uKSBjb25zdAogewogICAgIEJvb2xlYW4gb25CdXR0b247
Ci0gICAgYm9vbCBob3ZlcmVkID0gRERIaWdobGlnaHRQb2ludElzT25IaWdobGlnaHQoaGlnaGxp
Z2h0LCAoQ0dQb2ludCltX21vdXNlUG9zaXRpb24sICZvbkJ1dHRvbik7CisgICAgYm9vbCBob3Zl
cmVkID0gRERIaWdobGlnaHRQb2ludElzT25IaWdobGlnaHQoaGlnaGxpZ2h0LmhpZ2hsaWdodCgp
LCAoQ0dQb2ludCltX21vdXNlUG9zaXRpb24sICZvbkJ1dHRvbik7CiAgICAgbW91c2VJc092ZXJC
dXR0b24gPSBvbkJ1dHRvbjsKICAgICByZXR1cm4gaG92ZXJlZDsKIH0KQEAgLTMzNiwxNiArMjQ4
LDE2IEBAIHN0ZDo6Y2hyb25vOjptaWxsaXNlY29uZHMgU2VydmljZXNPdmVybGF5Q29udHJvbGxl
cjo6cmVtYWluaW5nVGltZVVudGlsSGlnaGxpZ2h0CiB7CiAgICAgLy8gSGlnaGxpZ2h0IGh5c3Rl
cmVzaXMgaXMgb25seSBmb3Igc2VsZWN0aW9uIHNlcnZpY2VzLCBiZWNhdXNlIHRlbGVwaG9uZSBu
dW1iZXIgaGlnaGxpZ2h0cyBhcmUgYWxyZWFkeSBtdWNoIG1vcmUgc3RhYmxlCiAgICAgLy8gYnkg
dmlydHVlIG9mIGJlaW5nIGV4cGFuZGVkIHRvIGluY2x1ZGUgdGhlIGVudGlyZSB0ZWxlcGhvbmUg
bnVtYmVyLgotICAgIGlmIChtX2hvdmVyZWRUZWxlcGhvbmVOdW1iZXJEYXRhKQorICAgIGlmICht
X2FjdGl2ZUhpZ2hsaWdodC0+dHlwZSgpID09IEhpZ2hsaWdodDo6VHlwZTo6VGVsZXBob25lTnVt
YmVyKQogICAgICAgICByZXR1cm4gc3RkOjpjaHJvbm86Om1pbGxpc2Vjb25kczo6emVybygpOwog
CiAgICAgc3RkOjpjaHJvbm86OnN0ZWFkeV9jbG9jazo6ZHVyYXRpb24gbWluaW11bVRpbWVVbnRp
bEhpZ2hsaWdodFNob3VsZEJlU2hvd24gPSAyMDBfbXM7CiAKICAgICBhdXRvIG5vdyA9IHN0ZDo6
Y2hyb25vOjpzdGVhZHlfY2xvY2s6Om5vdygpOwogICAgIGF1dG8gdGltZVNpbmNlTGFzdFNlbGVj
dGlvbkNoYW5nZSA9IG5vdyAtIG1fbGFzdFNlbGVjdGlvbkNoYW5nZVRpbWU7Ci0gICAgYXV0byB0
aW1lU2luY2VNb3VzZU92ZXJTZWxlY3Rpb24gPSBub3cgLSBtX2xhc3RIb3ZlcmVkSGlnaGxpZ2h0
Q2hhbmdlVGltZTsKKyAgICBhdXRvIHRpbWVTaW5jZUhpZ2hsaWdodEJlY2FtZUFjdGl2ZSA9IG5v
dyAtIG1fbGFzdEFjdGl2ZUhpZ2hsaWdodENoYW5nZVRpbWU7CiAKLSAgICByZXR1cm4gc3RkOjpj
aHJvbm86OmR1cmF0aW9uX2Nhc3Q8c3RkOjpjaHJvbm86Om1pbGxpc2Vjb25kcz4oc3RkOjptYXgo
bWluaW11bVRpbWVVbnRpbEhpZ2hsaWdodFNob3VsZEJlU2hvd24gLSB0aW1lU2luY2VMYXN0U2Vs
ZWN0aW9uQ2hhbmdlLCBtaW5pbXVtVGltZVVudGlsSGlnaGxpZ2h0U2hvdWxkQmVTaG93biAtIHRp
bWVTaW5jZU1vdXNlT3ZlclNlbGVjdGlvbikpOworICAgIHJldHVybiBzdGQ6OmNocm9ubzo6ZHVy
YXRpb25fY2FzdDxzdGQ6OmNocm9ubzo6bWlsbGlzZWNvbmRzPihzdGQ6Om1heChtaW5pbXVtVGlt
ZVVudGlsSGlnaGxpZ2h0U2hvdWxkQmVTaG93biAtIHRpbWVTaW5jZUxhc3RTZWxlY3Rpb25DaGFu
Z2UsIG1pbmltdW1UaW1lVW50aWxIaWdobGlnaHRTaG91bGRCZVNob3duIC0gdGltZVNpbmNlSGln
aGxpZ2h0QmVjYW1lQWN0aXZlKSk7CiB9CiAKIHZvaWQgU2VydmljZXNPdmVybGF5Q29udHJvbGxl
cjo6cmVwYWludEhpZ2hsaWdodFRpbWVyRmlyZWQoV2ViQ29yZTo6VGltZXI8U2VydmljZXNPdmVy
bGF5Q29udHJvbGxlcj4mKQpAQCAtMzU0LDEwICsyNjYsOCBAQCB2b2lkIFNlcnZpY2VzT3Zlcmxh
eUNvbnRyb2xsZXI6OnJlcGFpbnRIaWdobGlnaHRUaW1lckZpcmVkKFdlYkNvcmU6OlRpbWVyPFNl
cnZpYwogICAgICAgICBtX3NlcnZpY2VzT3ZlcmxheS0+c2V0TmVlZHNEaXNwbGF5KCk7CiB9CiAK
LXZvaWQgU2VydmljZXNPdmVybGF5Q29udHJvbGxlcjo6ZHJhd0hpZ2hsaWdodChEREhpZ2hsaWdo
dFJlZiBoaWdobGlnaHQsIFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dCYgZ3JhcGhpY3NDb250ZXh0
KQordm9pZCBTZXJ2aWNlc092ZXJsYXlDb250cm9sbGVyOjpkcmF3SGlnaGxpZ2h0KEhpZ2hsaWdo
dCYgaGlnaGxpZ2h0LCBXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQmIGdyYXBoaWNzQ29udGV4dCkK
IHsKLSAgICBBU1NFUlQoaGlnaGxpZ2h0KTsKLQogICAgIGJvb2wgbW91c2VJc092ZXJCdXR0b247
CiAgICAgaWYgKCFtb3VzZUlzT3ZlckhpZ2hsaWdodChoaWdobGlnaHQsIG1vdXNlSXNPdmVyQnV0
dG9uKSkgewogICAgICAgICBMT0coU2VydmljZXMsICJTZXJ2aWNlc092ZXJsYXlDb250cm9sbGVy
OjpkcmF3SGlnaGxpZ2h0IC0gTW91c2UgaXMgbm90IG92ZXIgaGlnaGxpZ2h0LCBzbyBkcmF3aW5n
IG5vdGhpbmciKTsKQEAgLTM3Miw4NiArMjgyLDgwIEBAIHZvaWQgU2VydmljZXNPdmVybGF5Q29u
dHJvbGxlcjo6ZHJhd0hpZ2hsaWdodChEREhpZ2hsaWdodFJlZiBoaWdobGlnaHQsIFdlYkNvcmU6
CiAKICAgICBDR0NvbnRleHRSZWYgY2dDb250ZXh0ID0gZ3JhcGhpY3NDb250ZXh0LnBsYXRmb3Jt
Q29udGV4dCgpOwogICAgIAotICAgIENHTGF5ZXJSZWYgaGlnaGxpZ2h0TGF5ZXIgPSBEREhpZ2hs
aWdodEdldExheWVyV2l0aENvbnRleHQoaGlnaGxpZ2h0LCBjZ0NvbnRleHQpOwotICAgIENHUmVj
dCBoaWdobGlnaHRCb3VuZGluZ1JlY3QgPSBEREhpZ2hsaWdodEdldEJvdW5kaW5nUmVjdChoaWdo
bGlnaHQpOwotICAgIAotICAgIEdyYXBoaWNzQ29udGV4dFN0YXRlU2F2ZXIgc3RhdGVTYXZlcihn
cmFwaGljc0NvbnRleHQpOwotCi0gICAgZ3JhcGhpY3NDb250ZXh0LnRyYW5zbGF0ZSh0b0Zsb2F0
U2l6ZShoaWdobGlnaHRCb3VuZGluZ1JlY3Qub3JpZ2luKSk7CisgICAgQ0dMYXllclJlZiBoaWdo
bGlnaHRMYXllciA9IERESGlnaGxpZ2h0R2V0TGF5ZXJXaXRoQ29udGV4dChoaWdobGlnaHQuaGln
aGxpZ2h0KCksIGNnQ29udGV4dCk7CisgICAgQ0dSZWN0IGhpZ2hsaWdodEJvdW5kaW5nUmVjdCA9
IERESGlnaGxpZ2h0R2V0Qm91bmRpbmdSZWN0KGhpZ2hsaWdodC5oaWdobGlnaHQoKSk7CiAKLSAg
ICBDR1JlY3QgaGlnaGxpZ2h0RHJhd1JlY3QgPSBoaWdobGlnaHRCb3VuZGluZ1JlY3Q7Ci0gICAg
aGlnaGxpZ2h0RHJhd1JlY3Qub3JpZ2luLnggPSAwOwotICAgIGhpZ2hsaWdodERyYXdSZWN0Lm9y
aWdpbi55ID0gMDsKLSAgICAKLSAgICBDR0NvbnRleHREcmF3TGF5ZXJJblJlY3QoY2dDb250ZXh0
LCBoaWdobGlnaHREcmF3UmVjdCwgaGlnaGxpZ2h0TGF5ZXIpOworICAgIENHQ29udGV4dERyYXdM
YXllckluUmVjdChjZ0NvbnRleHQsIGhpZ2hsaWdodEJvdW5kaW5nUmVjdCwgaGlnaGxpZ2h0TGF5
ZXIpOwogfQogCi12b2lkIFNlcnZpY2VzT3ZlcmxheUNvbnRyb2xsZXI6OmNsZWFyU2VsZWN0aW9u
SGlnaGxpZ2h0KCkKK3ZvaWQgU2VydmljZXNPdmVybGF5Q29udHJvbGxlcjo6ZHJhd1JlY3QoUGFn
ZU92ZXJsYXkqIG92ZXJsYXksIFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dCYgZ3JhcGhpY3NDb250
ZXh0LCBjb25zdCBXZWJDb3JlOjpJbnRSZWN0JiBkaXJ0eVJlY3QpCiB7Ci0gICAgaWYgKCFtX3Nl
bGVjdGlvbkhpZ2hsaWdodCkKLSAgICAgICAgcmV0dXJuOworICAgIGJvb2wgbW91c2VJc092ZXJC
dXR0b247CisgICAgZGV0ZXJtaW5lQWN0aXZlSGlnaGxpZ2h0KG1vdXNlSXNPdmVyQnV0dG9uKTsK
IAotICAgIGlmIChtX2N1cnJlbnRIb3ZlcmVkSGlnaGxpZ2h0ID09IG1fc2VsZWN0aW9uSGlnaGxp
Z2h0KQotICAgICAgICBtX2N1cnJlbnRIb3ZlcmVkSGlnaGxpZ2h0ID0gbnVsbHB0cjsKLSAgICBp
ZiAobV9jdXJyZW50TW91c2VEb3duT25CdXR0b25IaWdobGlnaHQgPT0gbV9zZWxlY3Rpb25IaWdo
bGlnaHQpCi0gICAgICAgIG1fY3VycmVudE1vdXNlRG93bk9uQnV0dG9uSGlnaGxpZ2h0ID0gbnVs
bHB0cjsKLSAgICBtX3NlbGVjdGlvbkhpZ2hsaWdodCA9IG51bGxwdHI7CisgICAgaWYgKG1fYWN0
aXZlSGlnaGxpZ2h0KQorICAgICAgICBkcmF3SGlnaGxpZ2h0KCptX2FjdGl2ZUhpZ2hsaWdodCwg
Z3JhcGhpY3NDb250ZXh0KTsKIH0KIAotdm9pZCBTZXJ2aWNlc092ZXJsYXlDb250cm9sbGVyOjpj
bGVhckhvdmVyZWRUZWxlcGhvbmVOdW1iZXJIaWdobGlnaHQoKQordm9pZCBTZXJ2aWNlc092ZXJs
YXlDb250cm9sbGVyOjpjbGVhckFjdGl2ZUhpZ2hsaWdodCgpCiB7Ci0gICAgaWYgKCFtX2hvdmVy
ZWRUZWxlcGhvbmVOdW1iZXJEYXRhKQorICAgIGlmICghbV9hY3RpdmVIaWdobGlnaHQpCiAgICAg
ICAgIHJldHVybjsKIAotICAgIGlmIChtX2N1cnJlbnRIb3ZlcmVkSGlnaGxpZ2h0ID09IG1faG92
ZXJlZFRlbGVwaG9uZU51bWJlckRhdGEtPmhpZ2hsaWdodCkKLSAgICAgICAgbV9jdXJyZW50SG92
ZXJlZEhpZ2hsaWdodCA9IG51bGxwdHI7Ci0gICAgaWYgKG1fY3VycmVudE1vdXNlRG93bk9uQnV0
dG9uSGlnaGxpZ2h0ID09IG1faG92ZXJlZFRlbGVwaG9uZU51bWJlckRhdGEtPmhpZ2hsaWdodCkK
KyAgICBpZiAobV9jdXJyZW50TW91c2VEb3duT25CdXR0b25IaWdobGlnaHQgPT0gbV9hY3RpdmVI
aWdobGlnaHQpCiAgICAgICAgIG1fY3VycmVudE1vdXNlRG93bk9uQnV0dG9uSGlnaGxpZ2h0ID0g
bnVsbHB0cjsKLSAgICBtX2hvdmVyZWRUZWxlcGhvbmVOdW1iZXJEYXRhID0gbnVsbHB0cjsKKyAg
ICBtX2FjdGl2ZUhpZ2hsaWdodCA9IG51bGxwdHI7CiB9CiAKLXZvaWQgU2VydmljZXNPdmVybGF5
Q29udHJvbGxlcjo6ZXN0YWJsaXNoSG92ZXJlZFRlbGVwaG9uZUhpZ2hsaWdodChib29sJiBtb3Vz
ZUlzT3ZlckJ1dHRvbikKK3ZvaWQgU2VydmljZXNPdmVybGF5Q29udHJvbGxlcjo6cmVtb3ZlQWxs
UG90ZW50aWFsSGlnaGxpZ2h0c09mVHlwZShIaWdobGlnaHQ6OlR5cGUgdHlwZSkKIHsKLSAgICBB
U1NFUlQobV9jdXJyZW50VGVsZXBob25lTnVtYmVyUmFuZ2VzLnNpemUoKSA9PSBtX3RlbGVwaG9u
ZU51bWJlckhpZ2hsaWdodHMuc2l6ZSgpKTsKKyAgICBWZWN0b3I8UmVmUHRyPEhpZ2hsaWdodD4+
IGhpZ2hsaWdodHNUb1JlbW92ZTsKKyAgICBmb3IgKGF1dG8mIGhpZ2hsaWdodCA6IG1fcG90ZW50
aWFsSGlnaGxpZ2h0cykgeworICAgICAgICBpZiAoaGlnaGxpZ2h0LT50eXBlKCkgPT0gdHlwZSkK
KyAgICAgICAgICAgIGhpZ2hsaWdodHNUb1JlbW92ZS5hcHBlbmQoaGlnaGxpZ2h0KTsKKyAgICB9
CiAKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbV9jdXJyZW50VGVsZXBob25lTnVtYmVy
UmFuZ2VzLnNpemUoKTsgKytpKSB7Ci0gICAgICAgIGlmICghbV90ZWxlcGhvbmVOdW1iZXJIaWdo
bGlnaHRzW2ldKSB7Ci0gICAgICAgICAgICAvLyBGSVhNRTogVGhpcyB3aWxsIGNob2tlIGlmIHRo
ZSByYW5nZSB3cmFwcyBhcm91bmQgdGhlIGVkZ2Ugb2YgdGhlIHZpZXcuCi0gICAgICAgICAgICAv
LyBXaGF0IHNob3VsZCB3ZSBkbyBpbiB0aGF0IGNhc2U/Ci0gICAgICAgICAgICBJbnRSZWN0IHJl
Y3QgPSB0ZXh0UXVhZHNUb0JvdW5kaW5nUmVjdEZvclJhbmdlKCptX2N1cnJlbnRUZWxlcGhvbmVO
dW1iZXJSYW5nZXNbaV0pOwotCi0gICAgICAgICAgICAvLyBDb252ZXJ0IHRvIHRoZSBtYWluIGRv
Y3VtZW50J3MgY29vcmRpbmF0ZSBzcGFjZS4KLSAgICAgICAgICAgIC8vIEZJWE1FOiBJdCdzIGEg
bGl0dGxlIGNyYXp5IHRvIGNhbGwgY29udGVudHNUb1dpbmRvdyBhbmQgdGhlbiB3aW5kb3dUb0Nv
bnRlbnRzIGluIG9yZGVyIHRvIGdldCB0aGUgcmlnaHQgY29vcmRpbmF0ZSBzcGFjZS4KLSAgICAg
ICAgICAgIC8vIFdlIHNob3VsZCBjb25zaWRlciBhZGRpbmcgY29udmVyc2lvbiBmdW5jdGlvbnMg
dG8gU2Nyb2xsVmlldyBmb3IgY29udGVudHNUb0RvY3VtZW50KCkuIFJpZ2h0IG5vdywgY29udGVu
dHNUb1Jvb3RWaWV3KCkgaXMKLSAgICAgICAgICAgIC8vIG5vdCBlcXVpdmFsZW50IHRvIHdoYXQg
d2UgbmVlZCB3aGVuIHlvdSBoYXZlIGEgdG9wQ29udGVudEluc2V0IG9yIGEgaGVhZGVyIGJhbm5l
ci4KLSAgICAgICAgICAgIEZyYW1lVmlldyogdmlld0ZvclJhbmdlID0gbV9jdXJyZW50VGVsZXBo
b25lTnVtYmVyUmFuZ2VzW2ldLT5vd25lckRvY3VtZW50KCkudmlldygpOwotICAgICAgICAgICAg
aWYgKCF2aWV3Rm9yUmFuZ2UpCi0gICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAg
ICBGcmFtZVZpZXcmIG1haW5GcmFtZVZpZXcgPSAqbV93ZWJQYWdlLT5jb3JlUGFnZSgpLT5tYWlu
RnJhbWUoKS52aWV3KCk7Ci0gICAgICAgICAgICByZWN0LnNldExvY2F0aW9uKG1haW5GcmFtZVZp
ZXcud2luZG93VG9Db250ZW50cyh2aWV3Rm9yUmFuZ2UtPmNvbnRlbnRzVG9XaW5kb3cocmVjdC5s
b2NhdGlvbigpKSkpOworICAgIHdoaWxlICghaGlnaGxpZ2h0c1RvUmVtb3ZlLmlzRW1wdHkoKSkg
eworICAgICAgICBhdXRvIGhpZ2hsaWdodFRvUmVtb3ZlID0gaGlnaGxpZ2h0c1RvUmVtb3ZlLnRh
a2VMYXN0KCk7CiAKLSAgICAgICAgICAgIENHUmVjdCBjZ1JlY3QgPSByZWN0OwotICAgICAgICAg
ICAgbV90ZWxlcGhvbmVOdW1iZXJIaWdobGlnaHRzW2ldID0gYWRvcHRDRihEREhpZ2hsaWdodENy
ZWF0ZVdpdGhSZWN0c0luVmlzaWJsZVJlY3RXaXRoU3R5bGVBbmREaXJlY3Rpb24obnVsbHB0ciwg
JmNnUmVjdCwgMSwgbWFpbkZyYW1lVmlldy52aXNpYmxlQ29udGVudFJlY3QoKSwgRERIaWdobGln
aHRPdXRsaW5lV2l0aEFycm93LCBZRVMsIE5TV3JpdGluZ0RpcmVjdGlvbk5hdHVyYWwsIE5PLCBZ
RVMpKTsKLSAgICAgICAgfQorICAgICAgICBpZiAobV9hY3RpdmVIaWdobGlnaHQgPT0gaGlnaGxp
Z2h0VG9SZW1vdmUpCisgICAgICAgICAgICBjbGVhckFjdGl2ZUhpZ2hsaWdodCgpOwogCi0gICAg
ICAgIGlmICghbW91c2VJc092ZXJIaWdobGlnaHQobV90ZWxlcGhvbmVOdW1iZXJIaWdobGlnaHRz
W2ldLmdldCgpLCBtb3VzZUlzT3ZlckJ1dHRvbikpCisgICAgICAgIG1fcG90ZW50aWFsSGlnaGxp
Z2h0cy5yZW1vdmUoaGlnaGxpZ2h0VG9SZW1vdmUpOworICAgIH0KK30KKwordm9pZCBTZXJ2aWNl
c092ZXJsYXlDb250cm9sbGVyOjpidWlsZFBob25lTnVtYmVySGlnaGxpZ2h0cygpCit7CisgICAg
cmVtb3ZlQWxsUG90ZW50aWFsSGlnaGxpZ2h0c09mVHlwZShIaWdobGlnaHQ6OlR5cGU6OlRlbGVw
aG9uZU51bWJlcik7CisKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbV9jdXJyZW50VGVs
ZXBob25lTnVtYmVyUmFuZ2VzLnNpemUoKTsgKytpKSB7CisgICAgICAgIC8vIEZJWE1FOiBUaGlz
IHdpbGwgY2hva2UgaWYgdGhlIHJhbmdlIHdyYXBzIGFyb3VuZCB0aGUgZWRnZSBvZiB0aGUgdmll
dy4KKyAgICAgICAgLy8gV2hhdCBzaG91bGQgd2UgZG8gaW4gdGhhdCBjYXNlPworICAgICAgICBJ
bnRSZWN0IHJlY3QgPSB0ZXh0UXVhZHNUb0JvdW5kaW5nUmVjdEZvclJhbmdlKCptX2N1cnJlbnRU
ZWxlcGhvbmVOdW1iZXJSYW5nZXNbaV0pOworCisgICAgICAgIC8vIENvbnZlcnQgdG8gdGhlIG1h
aW4gZG9jdW1lbnQncyBjb29yZGluYXRlIHNwYWNlLgorICAgICAgICAvLyBGSVhNRTogSXQncyBh
IGxpdHRsZSBjcmF6eSB0byBjYWxsIGNvbnRlbnRzVG9XaW5kb3cgYW5kIHRoZW4gd2luZG93VG9D
b250ZW50cyBpbiBvcmRlciB0byBnZXQgdGhlIHJpZ2h0IGNvb3JkaW5hdGUgc3BhY2UuCisgICAg
ICAgIC8vIFdlIHNob3VsZCBjb25zaWRlciBhZGRpbmcgY29udmVyc2lvbiBmdW5jdGlvbnMgdG8g
U2Nyb2xsVmlldyBmb3IgY29udGVudHNUb0RvY3VtZW50KCkuIFJpZ2h0IG5vdywgY29udGVudHNU
b1Jvb3RWaWV3KCkgaXMKKyAgICAgICAgLy8gbm90IGVxdWl2YWxlbnQgdG8gd2hhdCB3ZSBuZWVk
IHdoZW4geW91IGhhdmUgYSB0b3BDb250ZW50SW5zZXQgb3IgYSBoZWFkZXIgYmFubmVyLgorICAg
ICAgICBGcmFtZVZpZXcqIHZpZXdGb3JSYW5nZSA9IG1fY3VycmVudFRlbGVwaG9uZU51bWJlclJh
bmdlc1tpXS0+b3duZXJEb2N1bWVudCgpLnZpZXcoKTsKKyAgICAgICAgaWYgKCF2aWV3Rm9yUmFu
Z2UpCiAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgRnJhbWVWaWV3JiBtYWluRnJhbWVW
aWV3ID0gKm1fd2ViUGFnZS5jb3JlUGFnZSgpLT5tYWluRnJhbWUoKS52aWV3KCk7CisgICAgICAg
IHJlY3Quc2V0TG9jYXRpb24obWFpbkZyYW1lVmlldy53aW5kb3dUb0NvbnRlbnRzKHZpZXdGb3JS
YW5nZS0+Y29udGVudHNUb1dpbmRvdyhyZWN0LmxvY2F0aW9uKCkpKSk7CiAKLSAgICAgICAgaWYg
KCFtX2hvdmVyZWRUZWxlcGhvbmVOdW1iZXJEYXRhIHx8IG1faG92ZXJlZFRlbGVwaG9uZU51bWJl
ckRhdGEtPmhpZ2hsaWdodCAhPSBtX3RlbGVwaG9uZU51bWJlckhpZ2hsaWdodHNbaV0pCi0gICAg
ICAgICAgICBtX2hvdmVyZWRUZWxlcGhvbmVOdW1iZXJEYXRhID0gc3RkOjptYWtlX3VuaXF1ZTxU
ZWxlcGhvbmVOdW1iZXJEYXRhPihtX3RlbGVwaG9uZU51bWJlckhpZ2hsaWdodHNbaV0sIG1fY3Vy
cmVudFRlbGVwaG9uZU51bWJlclJhbmdlc1tpXSk7CisgICAgICAgIENHUmVjdCBjZ1JlY3QgPSBy
ZWN0OworICAgICAgICBSZXRhaW5QdHI8RERIaWdobGlnaHRSZWY+IGRkSGlnaGxpZ2h0ID0gYWRv
cHRDRihEREhpZ2hsaWdodENyZWF0ZVdpdGhSZWN0c0luVmlzaWJsZVJlY3RXaXRoU3R5bGVBbmRE
aXJlY3Rpb24obnVsbHB0ciwgJmNnUmVjdCwgMSwgbWFpbkZyYW1lVmlldy52aXNpYmxlQ29udGVu
dFJlY3QoKSwgRERIaWdobGlnaHRPdXRsaW5lV2l0aEFycm93LCBZRVMsIE5TV3JpdGluZ0RpcmVj
dGlvbk5hdHVyYWwsIE5PLCBZRVMpKTsKIAotICAgICAgICBtX3NlcnZpY2VzT3ZlcmxheS0+c2V0
TmVlZHNEaXNwbGF5KCk7Ci0gICAgICAgIHJldHVybjsKKyAgICAgICAgbV9wb3RlbnRpYWxIaWdo
bGlnaHRzLmFkZChIaWdobGlnaHQ6OmNyZWF0ZUZvclRlbGVwaG9uZU51bWJlcihkZEhpZ2hsaWdo
dCwgbV9jdXJyZW50VGVsZXBob25lTnVtYmVyUmFuZ2VzW2ldKSk7CiAgICAgfQogCi0gICAgY2xl
YXJIb3ZlcmVkVGVsZXBob25lTnVtYmVySGlnaGxpZ2h0KCk7Ci0gICAgbW91c2VJc092ZXJCdXR0
b24gPSBmYWxzZTsKKyAgICBkaWRSZWJ1aWxkUG90ZW50aWFsSGlnaGxpZ2h0cygpOwogfQogCi12
b2lkIFNlcnZpY2VzT3ZlcmxheUNvbnRyb2xsZXI6Om1heWJlQ3JlYXRlU2VsZWN0aW9uSGlnaGxp
Z2h0KCkKK3ZvaWQgU2VydmljZXNPdmVybGF5Q29udHJvbGxlcjo6YnVpbGRTZWxlY3Rpb25IaWdo
bGlnaHQoKQogewotICAgIEFTU0VSVCghbV9zZWxlY3Rpb25IaWdobGlnaHQpOwotICAgIEFTU0VS
VChtX3NlcnZpY2VzT3ZlcmxheSk7CisgICAgcmVtb3ZlQWxsUG90ZW50aWFsSGlnaGxpZ2h0c09m
VHlwZShIaWdobGlnaHQ6OlR5cGU6OlNlbGVjdGlvbik7CiAKICAgICBWZWN0b3I8Q0dSZWN0PiBj
Z1JlY3RzOwogICAgIGNnUmVjdHMucmVzZXJ2ZUNhcGFjaXR5KG1fY3VycmVudFNlbGVjdGlvblJl
Y3RzLnNpemUoKSk7CkBAIC00NjAsMTA1ICszNjQsMTQ5IEBAIHZvaWQgU2VydmljZXNPdmVybGF5
Q29udHJvbGxlcjo6bWF5YmVDcmVhdGVTZWxlY3Rpb25IaWdobGlnaHQoKQogICAgICAgICBjZ1Jl
Y3RzLmFwcGVuZCgoQ0dSZWN0KXBpeGVsU25hcHBlZEludFJlY3QocmVjdCkpOwogCiAgICAgaWYg
KCFjZ1JlY3RzLmlzRW1wdHkoKSkgewotICAgICAgICBDR1JlY3QgdmlzaWJsZVJlY3QgPSBtX3dl
YlBhZ2UtPmNvcmVQYWdlKCktPm1haW5GcmFtZSgpLnZpZXcoKS0+dmlzaWJsZUNvbnRlbnRSZWN0
KCk7Ci0gICAgICAgIG1fc2VsZWN0aW9uSGlnaGxpZ2h0ID0gYWRvcHRDRihEREhpZ2hsaWdodENy
ZWF0ZVdpdGhSZWN0c0luVmlzaWJsZVJlY3RXaXRoU3R5bGVBbmREaXJlY3Rpb24obnVsbHB0ciwg
Y2dSZWN0cy5iZWdpbigpLCBjZ1JlY3RzLnNpemUoKSwgdmlzaWJsZVJlY3QsIERESGlnaGxpZ2h0
Tm9PdXRsaW5lV2l0aEFycm93LCBZRVMsIE5TV3JpdGluZ0RpcmVjdGlvbk5hdHVyYWwsIE5PLCBZ
RVMpKTsKKyAgICAgICAgQ0dSZWN0IHZpc2libGVSZWN0ID0gbV93ZWJQYWdlLmNvcmVQYWdlKCkt
Pm1haW5GcmFtZSgpLnZpZXcoKS0+dmlzaWJsZUNvbnRlbnRSZWN0KCk7CisgICAgICAgIFJldGFp
blB0cjxEREhpZ2hsaWdodFJlZj4gZGRIaWdobGlnaHQgPSBhZG9wdENGKERESGlnaGxpZ2h0Q3Jl
YXRlV2l0aFJlY3RzSW5WaXNpYmxlUmVjdFdpdGhTdHlsZUFuZERpcmVjdGlvbihudWxscHRyLCBj
Z1JlY3RzLmJlZ2luKCksIGNnUmVjdHMuc2l6ZSgpLCB2aXNpYmxlUmVjdCwgRERIaWdobGlnaHRO
b091dGxpbmVXaXRoQXJyb3csIFlFUywgTlNXcml0aW5nRGlyZWN0aW9uTmF0dXJhbCwgTk8sIFlF
UykpOworICAgICAgICAKKyAgICAgICAgbV9wb3RlbnRpYWxIaWdobGlnaHRzLmFkZChIaWdobGln
aHQ6OmNyZWF0ZUZvclNlbGVjdGlvbihkZEhpZ2hsaWdodCkpOworICAgIH0KKworICAgIGRpZFJl
YnVpbGRQb3RlbnRpYWxIaWdobGlnaHRzKCk7Cit9CisKK2Jvb2wgU2VydmljZXNPdmVybGF5Q29u
dHJvbGxlcjo6aGFzUmVsZXZhbnRTZWxlY3Rpb25TZXJ2aWNlcygpCit7CisgICAgcmV0dXJuICht
X2lzVGV4dE9ubHkgJiYgV2ViUHJvY2Vzczo6c2hhcmVkKCkuaGFzU2VsZWN0aW9uU2VydmljZXMo
KSkgfHwgV2ViUHJvY2Vzczo6c2hhcmVkKCkuaGFzUmljaENvbnRlbnRTZXJ2aWNlcygpOworfQor
Cit2b2lkIFNlcnZpY2VzT3ZlcmxheUNvbnRyb2xsZXI6OmRpZFJlYnVpbGRQb3RlbnRpYWxIaWdo
bGlnaHRzKCkKK3sKKyAgICBpZiAobV9wb3RlbnRpYWxIaWdobGlnaHRzLmlzRW1wdHkoKSkgewor
ICAgICAgICBpZiAobV9zZXJ2aWNlc092ZXJsYXkpCisgICAgICAgICAgICBtX3dlYlBhZ2UudW5p
bnN0YWxsUGFnZU92ZXJsYXkobV9zZXJ2aWNlc092ZXJsYXkpOworICAgICAgICByZXR1cm47Cisg
ICAgfQorCisgICAgaWYgKG1fY3VycmVudFRlbGVwaG9uZU51bWJlclJhbmdlcy5pc0VtcHR5KCkg
JiYgIWhhc1JlbGV2YW50U2VsZWN0aW9uU2VydmljZXMoKSkKKyAgICAgICAgcmV0dXJuOworCisg
ICAgY3JlYXRlT3ZlcmxheUlmTmVlZGVkKCk7Cit9CiAKK3ZvaWQgU2VydmljZXNPdmVybGF5Q29u
dHJvbGxlcjo6Y3JlYXRlT3ZlcmxheUlmTmVlZGVkKCkKK3sKKyAgICBpZiAobV9zZXJ2aWNlc092
ZXJsYXkpIHsKICAgICAgICAgbV9zZXJ2aWNlc092ZXJsYXktPnNldE5lZWRzRGlzcGxheSgpOwor
ICAgICAgICByZXR1cm47CiAgICAgfQorCisgICAgUmVmUHRyPFBhZ2VPdmVybGF5PiBvdmVybGF5
ID0gUGFnZU92ZXJsYXk6OmNyZWF0ZSh0aGlzLCBQYWdlT3ZlcmxheTo6T3ZlcmxheVR5cGU6OkRv
Y3VtZW50KTsKKyAgICBtX3NlcnZpY2VzT3ZlcmxheSA9IG92ZXJsYXkuZ2V0KCk7CisgICAgbV93
ZWJQYWdlLmluc3RhbGxQYWdlT3ZlcmxheShvdmVybGF5LnJlbGVhc2UoKSwgUGFnZU92ZXJsYXk6
OkZhZGVNb2RlOjpEb05vdEZhZGUpOworICAgIG1fc2VydmljZXNPdmVybGF5LT5zZXROZWVkc0Rp
c3BsYXkoKTsKIH0KIAotYm9vbCBTZXJ2aWNlc092ZXJsYXlDb250cm9sbGVyOjptb3VzZUV2ZW50
KFBhZ2VPdmVybGF5KiwgY29uc3QgV2ViTW91c2VFdmVudCYgZXZlbnQpCit2b2lkIFNlcnZpY2Vz
T3ZlcmxheUNvbnRyb2xsZXI6OmRldGVybWluZUFjdGl2ZUhpZ2hsaWdodChib29sJiBtb3VzZUlz
T3ZlckFjdGl2ZUhpZ2hsaWdodEJ1dHRvbikKIHsKLSAgICBtX21vdXNlUG9zaXRpb24gPSBtX3dl
YlBhZ2UtPmNvcmVQYWdlKCktPm1haW5GcmFtZSgpLnZpZXcoKS0+cm9vdFZpZXdUb0NvbnRlbnRz
KGV2ZW50LnBvc2l0aW9uKCkpOworICAgIG1vdXNlSXNPdmVyQWN0aXZlSGlnaGxpZ2h0QnV0dG9u
ID0gZmFsc2U7CiAKLSAgICBEREhpZ2hsaWdodFJlZiBvbGRIb3ZlcmVkSGlnaGxpZ2h0ID0gbV9j
dXJyZW50SG92ZXJlZEhpZ2hsaWdodC5nZXQoKTsKKyAgICBSZWZQdHI8SGlnaGxpZ2h0PiBvbGRB
Y3RpdmVIaWdobGlnaHQgPSBtX2FjdGl2ZUhpZ2hsaWdodC5yZWxlYXNlKCk7CiAKLSAgICBib29s
IG1vdXNlSXNPdmVyQnV0dG9uID0gZmFsc2U7Ci0gICAgZXN0YWJsaXNoSG92ZXJlZFRlbGVwaG9u
ZUhpZ2hsaWdodChtb3VzZUlzT3ZlckJ1dHRvbik7Ci0gICAgaWYgKG1faG92ZXJlZFRlbGVwaG9u
ZU51bWJlckRhdGEpIHsKLSAgICAgICAgQVNTRVJUKG1faG92ZXJlZFRlbGVwaG9uZU51bWJlckRh
dGEtPmhpZ2hsaWdodCk7Ci0gICAgICAgIG1fY3VycmVudEhvdmVyZWRIaWdobGlnaHQgPSBtX2hv
dmVyZWRUZWxlcGhvbmVOdW1iZXJEYXRhLT5oaWdobGlnaHQ7Ci0gICAgfSBlbHNlIHsKLSAgICAg
ICAgaWYgKCFtX3NlbGVjdGlvbkhpZ2hsaWdodCkKLSAgICAgICAgICAgIG1heWJlQ3JlYXRlU2Vs
ZWN0aW9uSGlnaGxpZ2h0KCk7CisgICAgZm9yIChhdXRvJiBoaWdobGlnaHQgOiBtX3BvdGVudGlh
bEhpZ2hsaWdodHMpIHsKKyAgICAgICAgaWYgKGhpZ2hsaWdodC0+dHlwZSgpID09IEhpZ2hsaWdo
dDo6VHlwZTo6U2VsZWN0aW9uKSB7CisgICAgICAgICAgICAvLyBJZiB3ZSd2ZSBhbHJlYWR5IGZv
dW5kIGEgbmV3IGFjdGl2ZSBoaWdobGlnaHQsIGFuZCBpdCdzCisgICAgICAgICAgICAvLyBhIHRl
bGVwaG9uZSBudW1iZXIgaGlnaGxpZ2h0LCBwcmVmZXIgdGhhdCBvdmVyIHRoaXMgc2VsZWN0aW9u
IGhpZ2hsaWdodC4KKyAgICAgICAgICAgIGlmIChtX2FjdGl2ZUhpZ2hsaWdodCAmJiBtX2FjdGl2
ZUhpZ2hsaWdodC0+dHlwZSgpID09IEhpZ2hsaWdodDo6VHlwZTo6VGVsZXBob25lTnVtYmVyKQor
ICAgICAgICAgICAgICAgIGNvbnRpbnVlOworCisgICAgICAgICAgICAvLyBJZiB0aGlzIGhpZ2hs
aWdodCBoYXMgbm8gY29tcGF0aWJsZSBzZXJ2aWNlcywgaXQgY2FuJ3QgYmUgYWN0aXZlLCB1bmxl
c3Mgd2UgaGF2ZSB0ZWxlcGhvbmUgbnVtYmVyIGhpZ2hsaWdodHMgdG8gc2hvdyBpbiB0aGUgY29t
YmluZWQgbWVudS4KKyAgICAgICAgICAgIGlmIChtX2N1cnJlbnRUZWxlcGhvbmVOdW1iZXJSYW5n
ZXMuaXNFbXB0eSgpICYmICFoYXNSZWxldmFudFNlbGVjdGlvblNlcnZpY2VzKCkpCisgICAgICAg
ICAgICAgICAgY29udGludWU7CisgICAgICAgIH0KIAotICAgICAgICBpZiAobV9zZWxlY3Rpb25I
aWdobGlnaHQgJiYgbW91c2VJc092ZXJIaWdobGlnaHQobV9zZWxlY3Rpb25IaWdobGlnaHQuZ2V0
KCksIG1vdXNlSXNPdmVyQnV0dG9uKSkKLSAgICAgICAgICAgIG1fY3VycmVudEhvdmVyZWRIaWdo
bGlnaHQgPSBtX3NlbGVjdGlvbkhpZ2hsaWdodDsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAg
bV9jdXJyZW50SG92ZXJlZEhpZ2hsaWdodCA9IG51bGxwdHI7CisgICAgICAgIC8vIElmIHRoaXMg
aGlnaGxpZ2h0IGlzbid0IGhvdmVyZWQsIGl0IGNhbid0IGJlIGFjdGl2ZS4KKyAgICAgICAgYm9v
bCBtb3VzZUlzT3ZlckJ1dHRvbjsKKyAgICAgICAgaWYgKCFtb3VzZUlzT3ZlckhpZ2hsaWdodCgq
aGlnaGxpZ2h0LCBtb3VzZUlzT3ZlckJ1dHRvbikpCisgICAgICAgICAgICBjb250aW51ZTsKKwor
ICAgICAgICBtX2FjdGl2ZUhpZ2hsaWdodCA9IGhpZ2hsaWdodDsKKyAgICAgICAgbW91c2VJc092
ZXJBY3RpdmVIaWdobGlnaHRCdXR0b24gPSBtb3VzZUlzT3ZlckJ1dHRvbjsKICAgICB9CiAKLSAg
ICBpZiAob2xkSG92ZXJlZEhpZ2hsaWdodCAhPSBtX2N1cnJlbnRIb3ZlcmVkSGlnaGxpZ2h0KSB7
Ci0gICAgICAgIG1fbGFzdEhvdmVyZWRIaWdobGlnaHRDaGFuZ2VUaW1lID0gc3RkOjpjaHJvbm86
OnN0ZWFkeV9jbG9jazo6bm93KCk7CisgICAgaWYgKG9sZEFjdGl2ZUhpZ2hsaWdodCAhPSBtX2Fj
dGl2ZUhpZ2hsaWdodCkgeworICAgICAgICBtX2xhc3RBY3RpdmVIaWdobGlnaHRDaGFuZ2VUaW1l
ID0gc3RkOjpjaHJvbm86OnN0ZWFkeV9jbG9jazo6bm93KCk7CiAgICAgICAgIG1fc2VydmljZXNP
dmVybGF5LT5zZXROZWVkc0Rpc3BsYXkoKTsKKyAgICAgICAgbV9jdXJyZW50TW91c2VEb3duT25C
dXR0b25IaWdobGlnaHQgPSBudWxscHRyOwogICAgIH0KK30KKworYm9vbCBTZXJ2aWNlc092ZXJs
YXlDb250cm9sbGVyOjptb3VzZUV2ZW50KFBhZ2VPdmVybGF5KiwgY29uc3QgV2ViTW91c2VFdmVu
dCYgZXZlbnQpCit7CisgICAgbV9tb3VzZVBvc2l0aW9uID0gbV93ZWJQYWdlLmNvcmVQYWdlKCkt
Pm1haW5GcmFtZSgpLnZpZXcoKS0+cm9vdFZpZXdUb0NvbnRlbnRzKGV2ZW50LnBvc2l0aW9uKCkp
OwogCi0gICAgLy8gSWYgdGhpcyBldmVudCBoYXMgbm90aGluZyB0byBkbyB3aXRoIHRoZSBsZWZ0
IGJ1dHRvbiwgaXQgY2xlYXJzIHRoZSBjdXJyZW50IG1vdXNlIGRvd24gdHJhY2tpbmcgYW5kIHdl
J3JlIGRvbmUgcHJvY2Vzc2luZyBpdC4KKyAgICBib29sIG1vdXNlSXNPdmVyQWN0aXZlSGlnaGxp
Z2h0QnV0dG9uID0gZmFsc2U7CisgICAgZGV0ZXJtaW5lQWN0aXZlSGlnaGxpZ2h0KG1vdXNlSXNP
dmVyQWN0aXZlSGlnaGxpZ2h0QnV0dG9uKTsKKworICAgIC8vIENhbmNlbCB0aGUgcG90ZW50aWFs
IGNsaWNrIGlmIGFueSBidXR0b24gb3RoZXIgdGhhbiB0aGUgbGVmdCBidXR0b24gY2hhbmdlcyBz
dGF0ZSwgYW5kIGlnbm9yZSB0aGUgZXZlbnQuCiAgICAgaWYgKGV2ZW50LmJ1dHRvbigpICE9IFdl
Yk1vdXNlRXZlbnQ6OkxlZnRCdXR0b24pIHsKICAgICAgICAgbV9jdXJyZW50TW91c2VEb3duT25C
dXR0b25IaWdobGlnaHQgPSBudWxscHRyOwogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQog
Ci0gICAgLy8gQ2hlY2sgYW5kIHNlZSBpZiB0aGUgbW91c2Ugd2VudCB1cCBhbmQgd2UgaGF2ZSBh
IGN1cnJlbnQgbW91c2UgZG93biBoaWdobGlnaHQgYnV0dG9uLgorICAgIC8vIElmIHRoZSBtb3Vz
ZSBsaWZ0ZWQgd2hpbGUgc3RpbGwgb3ZlciB0aGUgaGlnaGxpZ2h0IGJ1dHRvbiB0aGF0IGl0IHdl
bnQgZG93biBvbiwgdGhlbiB0aGF0IGlzIGEgY2xpY2suCiAgICAgaWYgKGV2ZW50LnR5cGUoKSA9
PSBXZWJFdmVudDo6TW91c2VVcCkgewotICAgICAgICBSZXRhaW5QdHI8RERIaWdobGlnaHRSZWY+
IG1vdXNlRG93bkhpZ2hsaWdodCA9IFdURjo6bW92ZShtX2N1cnJlbnRNb3VzZURvd25PbkJ1dHRv
bkhpZ2hsaWdodCk7CisgICAgICAgIFJlZlB0cjxIaWdobGlnaHQ+IG1vdXNlRG93bkhpZ2hsaWdo
dCA9IG1fY3VycmVudE1vdXNlRG93bk9uQnV0dG9uSGlnaGxpZ2h0OworICAgICAgICBtX2N1cnJl
bnRNb3VzZURvd25PbkJ1dHRvbkhpZ2hsaWdodCA9IG51bGxwdHI7CiAKLSAgICAgICAgLy8gSWYg
dGhlIG1vdXNlIGxpZnRlZCB3aGlsZSBzdGlsbCBvdmVyIHRoZSBoaWdobGlnaHQgYnV0dG9uIHRo
YXQgaXQgd2VudCBkb3duIG9uLCB0aGVuIHRoYXQgaXMgYSBjbGljay4KLSAgICAgICAgaWYgKG1v
dXNlSXNPdmVyQnV0dG9uICYmIG1vdXNlRG93bkhpZ2hsaWdodCAmJiByZW1haW5pbmdUaW1lVW50
aWxIaWdobGlnaHRTaG91bGRCZVNob3duKCkgPD0gc3RkOjpjaHJvbm86OnN0ZWFkeV9jbG9jazo6
ZHVyYXRpb246Onplcm8oKSkgewotICAgICAgICAgICAgaGFuZGxlQ2xpY2sobV9tb3VzZVBvc2l0
aW9uLCBtb3VzZURvd25IaWdobGlnaHQuZ2V0KCkpOworICAgICAgICBpZiAobW91c2VJc092ZXJB
Y3RpdmVIaWdobGlnaHRCdXR0b24gJiYgbW91c2VEb3duSGlnaGxpZ2h0ICYmIHJlbWFpbmluZ1Rp
bWVVbnRpbEhpZ2hsaWdodFNob3VsZEJlU2hvd24oKSA8PSBzdGQ6OmNocm9ubzo6c3RlYWR5X2Ns
b2NrOjpkdXJhdGlvbjo6emVybygpKSB7CisgICAgICAgICAgICBoYW5kbGVDbGljayhtX21vdXNl
UG9zaXRpb24sICptb3VzZURvd25IaWdobGlnaHQpOwogICAgICAgICAgICAgcmV0dXJuIHRydWU7
CiAgICAgICAgIH0KICAgICAgICAgCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CiAKLSAg
ICAvLyBDaGVjayBhbmQgc2VlIGlmIHRoZSBtb3VzZSBtb3ZlZCB3aXRoaW4gdGhlIGNvbmZpbmVz
IG9mIHRoZSBERCBoaWdobGlnaHQgYnV0dG9uLgorICAgIC8vIElmIHRoZSBtb3VzZSBtb3ZlZCBv
dXRzaWRlIG9mIHRoZSBidXR0b24gdHJhY2tpbmcgYSBwb3RlbnRpYWwgY2xpY2ssIHN0b3AgdHJh
Y2tpbmcgdGhlIGNsaWNrLgogICAgIGlmIChldmVudC50eXBlKCkgPT0gV2ViRXZlbnQ6Ok1vdXNl
TW92ZSkgewotICAgICAgICAvLyBNb3Zpbmcgd2l0aCB0aGUgbW91c2UgYnV0dG9uIGRvd24gaXMg
b2theSBhcyBsb25nIGFzIHRoZSBtb3VzZSBuZXZlciBsZWF2ZXMgdGhlIGhpZ2hsaWdodCBidXR0
b24uCi0gICAgICAgIGlmIChtX2N1cnJlbnRNb3VzZURvd25PbkJ1dHRvbkhpZ2hsaWdodCAmJiBt
b3VzZUlzT3ZlckJ1dHRvbikKKyAgICAgICAgaWYgKG1fY3VycmVudE1vdXNlRG93bk9uQnV0dG9u
SGlnaGxpZ2h0ICYmIG1vdXNlSXNPdmVyQWN0aXZlSGlnaGxpZ2h0QnV0dG9uKQogICAgICAgICAg
ICAgcmV0dXJuIHRydWU7CiAKICAgICAgICAgbV9jdXJyZW50TW91c2VEb3duT25CdXR0b25IaWdo
bGlnaHQgPSBudWxscHRyOwogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQogCi0gICAgLy8g
Q2hlY2sgYW5kIHNlZSBpZiB0aGUgbW91c2Ugd2VudCBkb3duIG92ZXIgYSBERCBoaWdobGlnaHQg
YnV0dG9uLgorICAgIC8vIElmIHRoZSBtb3VzZSB3ZW50IGRvd24gb3ZlciB0aGUgYWN0aXZlIGhp
Z2hsaWdodCdzIGJ1dHRvbiwgdHJhY2sgdGhpcyBhcyBhIHBvdGVudGlhbCBjbGljay4KICAgICBp
ZiAoZXZlbnQudHlwZSgpID09IFdlYkV2ZW50OjpNb3VzZURvd24pIHsKLSAgICAgICAgaWYgKG1f
Y3VycmVudEhvdmVyZWRIaWdobGlnaHQgJiYgbW91c2VJc092ZXJCdXR0b24pIHsKLSAgICAgICAg
ICAgIG1fY3VycmVudE1vdXNlRG93bk9uQnV0dG9uSGlnaGxpZ2h0ID0gbV9jdXJyZW50SG92ZXJl
ZEhpZ2hsaWdodDsKKyAgICAgICAgaWYgKG1fYWN0aXZlSGlnaGxpZ2h0ICYmIG1vdXNlSXNPdmVy
QWN0aXZlSGlnaGxpZ2h0QnV0dG9uKSB7CisgICAgICAgICAgICBtX2N1cnJlbnRNb3VzZURvd25P
bkJ1dHRvbkhpZ2hsaWdodCA9IG1fYWN0aXZlSGlnaGxpZ2h0OwogICAgICAgICAgICAgbV9zZXJ2
aWNlc092ZXJsYXktPnNldE5lZWRzRGlzcGxheSgpOwogICAgICAgICAgICAgcmV0dXJuIHRydWU7
CiAgICAgICAgIH0KIAogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQotICAgICAgICAKKwog
ICAgIHJldHVybiBmYWxzZTsKIH0KIAotdm9pZCBTZXJ2aWNlc092ZXJsYXlDb250cm9sbGVyOjpo
YW5kbGVDbGljayhjb25zdCBXZWJDb3JlOjpJbnRQb2ludCYgY2xpY2tQb2ludCwgRERIaWdobGln
aHRSZWYgaGlnaGxpZ2h0KQordm9pZCBTZXJ2aWNlc092ZXJsYXlDb250cm9sbGVyOjpoYW5kbGVD
bGljayhjb25zdCBXZWJDb3JlOjpJbnRQb2ludCYgY2xpY2tQb2ludCwgSGlnaGxpZ2h0JiBoaWdo
bGlnaHQpCiB7Ci0gICAgQVNTRVJUKGhpZ2hsaWdodCk7Ci0KLSAgICBGcmFtZVZpZXcqIGZyYW1l
VmlldyA9IG1fd2ViUGFnZS0+bWFpbkZyYW1lVmlldygpOworICAgIEZyYW1lVmlldyogZnJhbWVW
aWV3ID0gbV93ZWJQYWdlLm1haW5GcmFtZVZpZXcoKTsKICAgICBpZiAoIWZyYW1lVmlldykKICAg
ICAgICAgcmV0dXJuOwogCiAgICAgSW50UG9pbnQgd2luZG93UG9pbnQgPSBmcmFtZVZpZXctPmNv
bnRlbnRzVG9XaW5kb3coY2xpY2tQb2ludCk7CiAKLSAgICBpZiAoaGlnaGxpZ2h0ID09IG1fc2Vs
ZWN0aW9uSGlnaGxpZ2h0KSB7CisgICAgaWYgKGhpZ2hsaWdodC50eXBlKCkgPT0gSGlnaGxpZ2h0
OjpUeXBlOjpTZWxlY3Rpb24pIHsKICAgICAgICAgVmVjdG9yPFN0cmluZz4gc2VsZWN0ZWRUZWxl
cGhvbmVOdW1iZXJzOwogICAgICAgICBzZWxlY3RlZFRlbGVwaG9uZU51bWJlcnMucmVzZXJ2ZUNh
cGFjaXR5KG1fY3VycmVudFRlbGVwaG9uZU51bWJlclJhbmdlcy5zaXplKCkpOwogICAgICAgICBm
b3IgKGF1dG8mIHJhbmdlIDogbV9jdXJyZW50VGVsZXBob25lTnVtYmVyUmFuZ2VzKQogICAgICAg
ICAgICAgc2VsZWN0ZWRUZWxlcGhvbmVOdW1iZXJzLmFwcGVuZChyYW5nZS0+dGV4dCgpKTsKIAot
ICAgICAgICBtX3dlYlBhZ2UtPmhhbmRsZVNlbGVjdGlvblNlcnZpY2VDbGljayhtX3dlYlBhZ2Ut
PmNvcmVQYWdlKCktPm1haW5GcmFtZSgpLnNlbGVjdGlvbigpLCBzZWxlY3RlZFRlbGVwaG9uZU51
bWJlcnMsIHdpbmRvd1BvaW50KTsKLSAgICB9IGVsc2UgaWYgKG1faG92ZXJlZFRlbGVwaG9uZU51
bWJlckRhdGEgJiYgbV9ob3ZlcmVkVGVsZXBob25lTnVtYmVyRGF0YS0+aGlnaGxpZ2h0ID09IGhp
Z2hsaWdodCkKLSAgICAgICAgbV93ZWJQYWdlLT5oYW5kbGVUZWxlcGhvbmVOdW1iZXJDbGljayht
X2hvdmVyZWRUZWxlcGhvbmVOdW1iZXJEYXRhLT5yYW5nZS0+dGV4dCgpLCB3aW5kb3dQb2ludCk7
Ci0gICAgZWxzZQotICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgbV93ZWJQ
YWdlLmhhbmRsZVNlbGVjdGlvblNlcnZpY2VDbGljayhtX3dlYlBhZ2UuY29yZVBhZ2UoKS0+bWFp
bkZyYW1lKCkuc2VsZWN0aW9uKCksIHNlbGVjdGVkVGVsZXBob25lTnVtYmVycywgd2luZG93UG9p
bnQpOworICAgIH0gZWxzZSBpZiAoaGlnaGxpZ2h0LnR5cGUoKSA9PSBIaWdobGlnaHQ6OlR5cGU6
OlRlbGVwaG9uZU51bWJlcikKKyAgICAgICAgbV93ZWJQYWdlLmhhbmRsZVRlbGVwaG9uZU51bWJl
ckNsaWNrKGhpZ2hsaWdodC5yYW5nZSgpLT50ZXh0KCksIHdpbmRvd1BvaW50KTsKIH0KLSAgICAK
KwogfSAvLyBuYW1lc3BhY2UgV2ViS2l0CiAKICNlbmRpZiAvLyAjaWYgRU5BQkxFKFNFUlZJQ0Vf
Q09OVFJPTFMpIHx8IEVOQUJMRShURUxFUEhPTkVfTlVNQkVSX0RFVEVDVElPTikgJiYgUExBVEZP
Uk0oTUFDKQo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>236342</attachid>
            <date>2014-08-10 02:17:53 -0700</date>
            <delta_ts>2014-08-11 22:55:09 -0700</delta_ts>
            <desc>patch</desc>
            <filename>fade-part-one.diff</filename>
            <type>text/plain</type>
            <size>38239</size>
            <attacher name="Tim Horton">thorton</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQyL0No
YW5nZUxvZwppbmRleCA1MmMyNzg4Li5iMTJjZjM4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
Mi9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCkBAIC0xLDUgKzEsMTIy
IEBACiAyMDE0LTA4LTA5ICBUaW0gSG9ydG9uICA8dGltb3RoeV9ob3J0b25AYXBwbGUuY29tPgog
CisgICAgICAgIFJlZmFjdG9yIFNlcnZpY2VPdmVybGF5Q29udHJvbGxlciBpbiBwcmVwYXJhdGlv
biBmb3IgZmFkaW5nIGJldHdlZW4gaGlnaGxpZ2h0cworICAgICAgICBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTM1Nzg3CisgICAgICAgIDxyZGFyOi8vcHJvYmxlbS8x
NzkzNTczNj4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAg
ICBSZXdvcmsgU2VydmljZXNPdmVybGF5Q29udHJvbGxlciBzbyB0aGF0IHdlIGFsd2F5cyBrZWVw
IGEgc2V0IG9mIGdlbmVyaWMKKyAgICAgICAgInBvdGVudGlhbCBoaWdobGlnaHRzIiwgd2hpY2gg
YXJlIHJlZmNvdW50ZWQgSGlnaGxpZ2h0IG9iamVjdHMgYW5kCisgICAgICAgIHdyYXAgYSBEREhp
Z2hsaWdodFJlZiwgYXMgd2VsbCBhcyBhIHR5cGUgKFNlbGVjdGlvbiBvciBUZWxlcGhvbmVOdW1i
ZXIpLAorICAgICAgICBSYW5nZSAob25seSB1c2VkIGluIHRoZSBjYXNlIG9mIFRlbGVwaG9uZU51
bWJlciksIGFuZCBwb3RlbnRpYWxseSBtb3JlCisgICAgICAgIHRoaW5ncyBpbiB0aGUgZnV0dXJl
IChsaWtlLCBzYXksIGZhZGUgc3RhdGUhKS4KKworICAgICAgICBXZSBlYWdlcmx5IHVwZGF0ZSB0
aGUgbGlzdCBvZiBwb3RlbnRpYWwgaGlnaGxpZ2h0cyB3aGVuIHRoZSBzZWxlY3Rpb24gb3Igc2V0
CisgICAgICAgIG9mIGRldGVjdGVkIHRlbGVwaG9uZSBudW1iZXJzIGNoYW5nZXMsIGFuZCB1c2Ug
dGhpcyBpbmZvcm1hdGlvbiB0byBpbnN0YWxsCisgICAgICAgIG9yIHVuaW5zdGFsbCB0aGUgcGFn
ZSBvdmVybGF5IGFzIG5lZWRlZC4KKworICAgICAgICBXaGVuIHdlIG5lZWQgdG8gcmVjb21wdXRl
IHRoZSAiYWN0aXZlIiBoaWdobGlnaHQgZnJvbSB0aGlzIHNldCAoZm9yIGV4YW1wbGUsCisgICAg
ICAgIHdlIG5lZWQgdG8gaGFuZGxlIGEgbW91c2UgZXZlbnQgb3IgcGFpbnQgdGhlIGhpZ2hsaWdo
dCksIHdlIGxvb2sgdGhyb3VnaAorICAgICAgICB0aGUgc2V0IG9mIHBvdGVudGlhbCBoaWdobGln
aHRzIGFuZCBkZWNpZGUuIFRoaXMgbW92ZXMgdGhlICJhY3RpdmUiIGhpZ2hsaWdodAorICAgICAg
ICBkZWNpc2lvbiBsb2dpYyBpbnRvIG9uZSBzbWFsbCBhbmQgY29uZmluZWQgcGxhY2UuCisKKyAg
ICAgICAgKiBXZWJQcm9jZXNzL1dlYlBhZ2UvU2VydmljZXNPdmVybGF5Q29udHJvbGxlci5oOgor
ICAgICAgICAoV2ViS2l0OjpTZXJ2aWNlc092ZXJsYXlDb250cm9sbGVyOjpIaWdobGlnaHQpOgor
ICAgICAgICBBZGQgdGhlIG5ldyBhZm9yZW1lbnRpb25lZCByZWZjb3VudGVkIEhpZ2hsaWdodCBj
bGFzcy4KKyAgICAgICAgUmVuYW1lIG1fbGFzdEhvdmVyZWRIaWdobGlnaHRDaGFuZ2VUaW1lIHRv
IG1fbGFzdEFjdGl2ZUhpZ2hsaWdodENoYW5nZVRpbWUuCisgICAgICAgIE1ha2UgbV93ZWJQYWdl
IGEgcmVmZXJlbmNlLgorICAgICAgICBUaGUgcmVzdCBpcyBqdXN0IGFkZGVkL3JlbW92ZWQvYWRq
dXN0ZWQgZnVuY3Rpb25zIGZvciB0aGUgcmVmYWN0b3JpbmcuCisKKyAgICAgICAgKFdlYktpdDo6
VGVsZXBob25lTnVtYmVyRGF0YTo6VGVsZXBob25lTnVtYmVyRGF0YSk6IERlbGV0ZWQuCisgICAg
ICAgICogV2ViUHJvY2Vzcy9XZWJQYWdlL21hYy9TZXJ2aWNlc092ZXJsYXlDb250cm9sbGVyLm1t
OgorICAgICAgICAoV2ViS2l0OjpTZXJ2aWNlc092ZXJsYXlDb250cm9sbGVyOjpIaWdobGlnaHQ6
OmNyZWF0ZUZvclNlbGVjdGlvbik6CisgICAgICAgIChXZWJLaXQ6OlNlcnZpY2VzT3ZlcmxheUNv
bnRyb2xsZXI6OkhpZ2hsaWdodDo6Y3JlYXRlRm9yVGVsZXBob25lTnVtYmVyKToKKyAgICAgICAg
Q3JlYXRlIEhpZ2hsaWdodHMgZm9yIHRoZSB0d28gZGlmZmVyZW50IGhpZ2hsaWdodCB0eXBlcy4K
KworICAgICAgICAoV2ViS2l0OjpTZXJ2aWNlc092ZXJsYXlDb250cm9sbGVyOjpTZXJ2aWNlc092
ZXJsYXlDb250cm9sbGVyKToKKyAgICAgICAgKFdlYktpdDo6U2VydmljZXNPdmVybGF5Q29udHJv
bGxlcjo6d2lsbE1vdmVUb1dlYlBhZ2UpOgorICAgICAgICBPdXIgV2ViUGFnZSBwb2ludGVyIGlz
IGFsd2F5cyB2YWxpZCBiZWNhdXNlIGl0IG93bnMgdXM7IGRvbid0IGNsZWFyIGl0LgorICAgICAg
ICBXZSBuZWVkIHRvIGtlZXAgaXQgYXJvdW5kIHNvIHRoYXQgd2UgY2FuIHVuaW5zdGFsbCB0aGUg
b3ZlcmxheSBhbmQKKyAgICAgICAgaW5zdGFsbCBpdCBhZ2FpbiBsYXRlciwgYW55d2F5LgorCisg
ICAgICAgIChXZWJLaXQ6OlNlcnZpY2VzT3ZlcmxheUNvbnRyb2xsZXI6OnNlbGVjdGlvblJlY3Rz
RGlkQ2hhbmdlKToKKyAgICAgICAgKFdlYktpdDo6U2VydmljZXNPdmVybGF5Q29udHJvbGxlcjo6
c2VsZWN0ZWRUZWxlcGhvbmVOdW1iZXJSYW5nZXNDaGFuZ2VkKToKKyAgICAgICAgV2hlbiBzZWxl
Y3Rpb24gcmVjdHMgb3IgZGV0ZWN0ZWQgdGVsZXBob25lIG51bWJlcnMgY2hhbmdlLCByZWJ1aWxk
IHBvdGVudGlhbCBoaWdobGlnaHRzLgorICAgICAgICBUaGlzIHdpbGwgaGF2ZSB0aGUgc2lkZS1l
ZmZlY3Qgb2YgaW5zdGFsbGluZyB0aGUgb3ZlcmxheSBpZiBuZWVkZWQuCisKKyAgICAgICAgKFdl
YktpdDo6U2VydmljZXNPdmVybGF5Q29udHJvbGxlcjo6bW91c2VJc092ZXJIaWdobGlnaHQpOgor
ICAgICAgICBNYWtlIHRoaXMgZnVuY3Rpb24gdGFrZSBhIEhpZ2hsaWdodCBpbnN0ZWFkIG9mIGEg
RERIaWdobGlnaHRSZWYuCisKKyAgICAgICAgKFdlYktpdDo6U2VydmljZXNPdmVybGF5Q29udHJv
bGxlcjo6cmVtYWluaW5nVGltZVVudGlsSGlnaGxpZ2h0U2hvdWxkQmVTaG93bik6CisgICAgICAg
IE1ha2UgdGhpcyBmdW5jdGlvbiB0YWtlIGEgSGlnaGxpZ2h0IGluc3RlYWQgb2YgYSBEREhpZ2hs
aWdodFJlZi4KKworICAgICAgICAoV2ViS2l0OjpTZXJ2aWNlc092ZXJsYXlDb250cm9sbGVyOjpk
cmF3SGlnaGxpZ2h0KToKKyAgICAgICAgTWFrZSB0aGlzIGZ1bmN0aW9uIHRha2UgYSBIaWdobGln
aHQgaW5zdGVhZCBvZiBhIERESGlnaGxpZ2h0UmVmLgorICAgICAgICBUaGVyZSdzIG5vIHJlYXNv
biB0byBkbyB0aGUgdHJhbnNsYXRpb24gc2VwYXJhdGVseSBmcm9tIHRoZSBsYXllciBibGl0LAor
ICAgICAgICBhbHNvIGFsbG93aW5nIHVzIHRvIGF2b2lkIHRoZSBTdGF0ZVNhdmVyLgorCisgICAg
ICAgIChXZWJLaXQ6OlNlcnZpY2VzT3ZlcmxheUNvbnRyb2xsZXI6OmRyYXdSZWN0KToKKyAgICAg
ICAgZHJhd1JlY3Qgbm93IGFsd2F5cyBwYWludHMgdGhlIGFjdGl2ZSBoaWdobGlnaHQsIGluc3Rl
YWQgb2YgZHVwbGljYXRpbmcKKyAgICAgICAgbG9naWMgYWJvdXQgd2hpY2ggaGlnaGxpZ2h0IHNo
b3VsZCBiZSBhY3RpdmUuCisgICAgICAgIEFsc28sIGl0IHdpbGwgdXBkYXRlIHRoZSBhY3RpdmUg
aGlnaGxpZ2h0IGJlZm9yZSBwYWludGluZy4KKyAgICAgICAgV2Ugbm8gbG9uZ2VyIG5lZWQgdG8g
cmUtZGV0ZXJtaW5lIHdoZXRoZXIgdGhlIGFjdGl2ZSBoaWdobGlnaHQncyBwaG9uZQorICAgICAg
ICBudW1iZXIgcmFuZ2UgaXMgc3RpbGwgYSB2YWxpZCBwaG9uZSBudW1iZXIgcmFuZ2UsIGJlY2F1
c2Ugd2UgcmVidWlsZAorICAgICAgICB0aGUgcG90ZW50aWFsIGhpZ2hsaWdodHMgd2hlbmV2ZXIg
dGhlIHNldCBvZiBwaG9uZSBudW1iZXIgcmFuZ2VzIGNoYW5nZXMuCisKKyAgICAgICAgKFdlYktp
dDo6U2VydmljZXNPdmVybGF5Q29udHJvbGxlcjo6Y2xlYXJBY3RpdmVIaWdobGlnaHQpOgorICAg
ICAgICBNb3N0bHkgYW4gYWRvcHRpb24gb2YgbmV3IG5hbWVzLgorCisgICAgICAgIChXZWJLaXQ6
OlNlcnZpY2VzT3ZlcmxheUNvbnRyb2xsZXI6OnJlbW92ZUFsbFBvdGVudGlhbEhpZ2hsaWdodHNP
ZlR5cGUpOgorICAgICAgICBSdW4gdGhyb3VnaCB0aGUgbGlzdCBvZiBwb3RlbnRpYWwgaGlnaGxp
Z2h0cyBhbmQgcmVtb3ZlIGFueSBvZiB0aGUgZ2l2ZW4gdHlwZS4KKyAgICAgICAgVGhlIHR3byBo
aWdobGlnaHQgYnVpbGRpbmcgZnVuY3Rpb25zIHVzZSB0aGlzIGhlbHBlciB0byBjbGVhciB0aGUg
b2xkIG9uZXMgYmVmb3JlIGJ1aWxkaW5nLgorCisgICAgICAgIChXZWJLaXQ6OlNlcnZpY2VzT3Zl
cmxheUNvbnRyb2xsZXI6OmJ1aWxkUGhvbmVOdW1iZXJIaWdobGlnaHRzKToKKyAgICAgICAgKFdl
YktpdDo6U2VydmljZXNPdmVybGF5Q29udHJvbGxlcjo6YnVpbGRTZWxlY3Rpb25IaWdobGlnaHQp
OgorICAgICAgICBSZWJ1aWxkIHRoZSBsaXN0IG9mIHBvdGVudGlhbCBoaWdobGlnaHRzLCByZXBs
YWNpbmcgYWxsIGhpZ2hsaWdodHMgb2YKKyAgICAgICAgdGhlIGdpdmVuIHR5cGUgd2l0aCBuZXcg
b25lcy4KKworICAgICAgICAoV2ViS2l0OjpTZXJ2aWNlc092ZXJsYXlDb250cm9sbGVyOjpoYXNS
ZWxldmFudFNlbGVjdGlvblNlcnZpY2VzKToKKyAgICAgICAgRmFjdG9yIG91dCB0aGUgY29kZSB0
aGF0IGRlY2lkZXMgd2hldGhlciBvdXIgY3VycmVudCBzZWxlY3Rpb24gaXMKKyAgICAgICAgdmlh
YmxlIGZvciBzZXJ2aWNpbmcgYmFzZWQgb24gd2hldGhlciB3ZSBoYXZlIHBsYWluLXRleHQgYW5k
L29yIHJpY2gtdGV4dCBzZXJ2aWNlcy4KKworICAgICAgICAoV2ViS2l0OjpTZXJ2aWNlc092ZXJs
YXlDb250cm9sbGVyOjpkaWRSZWJ1aWxkUG90ZW50aWFsSGlnaGxpZ2h0cyk6CisgICAgICAgIFdo
ZW4gcmVidWlsZGluZyBwb3RlbnRpYWwgaGlnaGxpZ2h0cywgaWYgd2UgaGF2ZSBubyBwb3RlbnRp
YWwgaGlnaGxpZ2h0cyBhdCBhbGwsCisgICAgICAgIHVuaW5zdGFsbCB0aGUgcGFnZSBvdmVybGF5
OyB3ZSBkb24ndCBuZWVkIG1vdXNlIHRyYWNraW5nIGFuZCBkb24ndCBuZWVkIHRvCisgICAgICAg
IHBhaW50IGFueXRoaW5nLiBUaGlzIGltcHJvdmVzIG1lbW9yeSB1c2UgYW5kIGNvbXBvc2l0aW5n
IHBlcmZvcm1hbmNlIHNpZ25pZmljYW50bHksCisgICAgICAgIHdoZXJlIHByZXZpb3VzbHkgd2Ug
d2VyZSBsZWF2aW5nIHRoZSBvdmVybGF5IHVwIGZvcmV2ZXIgYWZ0ZXIgY3JlYXRpbmcgaXQuCisK
KyAgICAgICAgSWYgd2UgaGF2ZSBlaXRoZXIgZGV0ZWN0ZWQgdGVsZXBob25lIG51bWJlcnMgb3Ig
cmVsZXZhbnQgc2VsZWN0aW9uIHNlcnZpY2VzLAorICAgICAgICBjcmVhdGUgYW5kIGluc3RhbGwg
dGhlIG92ZXJsYXkgaWYgaXQgZG9lc24ndCBhbHJlYWR5IGV4aXN0LgorCisgICAgICAgIChXZWJL
aXQ6OlNlcnZpY2VzT3ZlcmxheUNvbnRyb2xsZXI6OmNyZWF0ZU92ZXJsYXlJZk5lZWRlZCk6Cisg
ICAgICAgIFRoaXMganVzdCBtb3ZlZCBmcm9tIGVsc2Vod2VyZSwgZXhjZXB0IHRoYXQgaXQgbm93
IHVzZXMgRmFkZU1vZGU6OkRvTm90RmFkZS4KKyAgICAgICAgSXQgZG9lc24ndCBtYWtlIHNlbnNl
IHRvIGZhZGUgb24gaW5zdGFsbC91bmluc3RhbGwgKHdoaWNoIGhhcHBlbnMgZXZlbiBiZWZvcmUg
aG92ZXIpCisgICAgICAgIGJ1dCBub3Qgb24gY2hhbmdpbmcgdGhlIGFjdGl2ZSBoaWdobGlnaHQ7
IGZhZGluZyB3aWxsIGJlIHJlLWFkZHJlc3NlZCBpbiB0aGUgbmV4dCBwYXRjaC4KKworICAgICAg
ICAoV2ViS2l0OjpTZXJ2aWNlc092ZXJsYXlDb250cm9sbGVyOjpoaWdobGlnaHRzQXJlRXF1aXZh
bGVudCk6CisgICAgICAgIERldGVybWluZSB3aGV0aGVyIHR3byBoaWdobGlnaHRzIGFyZSBlcXVp
dmFsZW50LiBXaGlsZSB3ZSBtYXkgaGF2ZQorICAgICAgICBjcmVhdGVkIGEgbmV3IEhpZ2hsaWdo
dCBhdCByZWJ1aWxkIHRpbWUsIGlmIHR3byB0ZWxlcGhvbmUgbnVtYmVyCisgICAgICAgIGhpZ2hs
aWdodHMgaGF2ZSBlcXVpdmFsZW50IHJhbmdlcywgdGhlcmUncyBubyBuZWVkIHRvICd0cmFuc2l0
aW9uJyB0byB0aGUgbmV3IG9uZS4KKworICAgICAgICAoV2ViS2l0OjpTZXJ2aWNlc092ZXJsYXlD
b250cm9sbGVyOjpkZXRlcm1pbmVBY3RpdmVIaWdobGlnaHQpOgorICAgICAgICBSdW4gdGhyb3Vn
aCB0aGUgbGlzdCBvZiBzZXJ2aWNlcywgYW5kIHRyeSB0byBmaW5kIG9uZSB0aGF0IGlzIGhvdmVy
ZWQuCisgICAgICAgIFdlIHByZWZlciB0ZWxlcGhvbmUgbnVtYmVyIGhpZ2hsaWdodHMgdG8gc2Vs
ZWN0aW9uIGhpZ2hsaWdodHMsIGFuZAorICAgICAgICB3ZSB3aWxsIG5ldmVyIG1ha2UgYSBzZWxl
Y3Rpb24gaGlnaGxpZ2h0IGFjdGl2ZSBpZiBpdCBpcyBib3RoCisgICAgICAgIG5vdCBzZXJ2aWNl
YWJsZSBhbmQgdGhlcmUgYXJlIG5vIHRlbGVwaG9uZSBudW1iZXJzIHRvIHNob3cgaW4gdGhlIGNv
bWJpbmVkIG1lbnUuCisgICAgICAgIFRoaXMgaXMgdGhlIGNlbnRyYWxpemVkIGxvY2F0aW9uIGZv
ciBkZXRlcm1pbmF0aW9uIG9mIHdoaWNoIGhpZ2hsaWdodAorICAgICAgICBzaG91bGQgYmUgY29u
c2lkZXJlZCBhY3RpdmUuIElmIHRoZSBhY3RpdmUgaGlnaGxpZ2h0IGNoYW5nZWQsIHVwZGF0ZQor
ICAgICAgICB0aGUgdGltZSBzaW5jZSBsYXN0IGNoYW5nZSBhbmQgY2FuY2VsIHRoZSBtb3VzZS1k
b3duIHRyYWNraW5nLgorCisgICAgICAgIChXZWJLaXQ6OlNlcnZpY2VzT3ZlcmxheUNvbnRyb2xs
ZXI6Om1vdXNlRXZlbnQpOgorICAgICAgICBBZGp1c3Qgc29tZSBjb21tZW50cyB0byBiZSBtb3Jl
IGV4cGxhbmF0b3J5LgorICAgICAgICBBIGJ1bmNoIG9mIGNvZGUgbW92ZWQgb3V0IG9mIGhlcmUg
YW5kIGludG8gZGV0ZXJtaW5lQWN0aXZlSGlnaGxpZ2h0LgorCisgICAgICAgIChXZWJLaXQ6OlNl
cnZpY2VzT3ZlcmxheUNvbnRyb2xsZXI6OmhhbmRsZUNsaWNrKToKKyAgICAgICAgQWRqdXN0IHRv
IHRha2UgYSByZWZlcmVuY2UgYW5kIHVzZSBIaWdobGlnaHQgaW5zdGVhZCBvZiBEREhpZ2hsaWdo
dFJlZi4KKworMjAxNC0wOC0wOSAgVGltIEhvcnRvbiAgPHRpbW90aHlfaG9ydG9uQGFwcGxlLmNv
bT4KKwogICAgICAgICBSRUdSRVNTSU9OIChyMTcyMzAxKTogQ29tYmluZWQgcGhvbmUgbnVtYmVy
IGhpZ2hsaWdodCBkb2Vzbid0IGFwcGVhciBpZiByaWNoIGNvbnRlbnQgaXMgc2VsZWN0ZWQgYW5k
IHdlIGhhdmUgbm8gcmljaCBjb250ZW50IHNlcnZpY2VzCiAgICAgICAgIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMzU3ODUKICAgICAgICAgPHJkYXI6Ly9wcm9ibGVt
LzE3OTY5ODQzPgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdl
L1NlcnZpY2VzT3ZlcmxheUNvbnRyb2xsZXIuaCBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3Mv
V2ViUGFnZS9TZXJ2aWNlc092ZXJsYXlDb250cm9sbGVyLmgKaW5kZXggYjRmM2IxYi4uMzk5ZTc1
YyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1NlcnZpY2Vz
T3ZlcmxheUNvbnRyb2xsZXIuaAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBh
Z2UvU2VydmljZXNPdmVybGF5Q29udHJvbGxlci5oCkBAIC0zMSw2ICszMSw3IEBACiAjaW5jbHVk
ZSAiUGFnZU92ZXJsYXkuaCIKICNpbmNsdWRlIDxXZWJDb3JlL1JhbmdlLmg+CiAjaW5jbHVkZSA8
V2ViQ29yZS9UaW1lci5oPgorI2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+CiAKIHR5cGVkZWYg
dm9pZCogRERIaWdobGlnaHRSZWY7CiAKQEAgLTQ0LDE5ICs0NSw2IEBAIG5hbWVzcGFjZSBXZWJL
aXQgewogCiBjbGFzcyBXZWJQYWdlOwogCi10eXBlZGVmIHZvaWQqIERESGlnaGxpZ2h0UmVmOwot
Ci1zdHJ1Y3QgVGVsZXBob25lTnVtYmVyRGF0YSB7Ci0gICAgVGVsZXBob25lTnVtYmVyRGF0YShS
ZXRhaW5QdHI8RERIaWdobGlnaHRSZWY+IGhpZ2hsaWdodCwgUGFzc1JlZlB0cjxXZWJDb3JlOjpS
YW5nZT4gcmFuZ2UpCi0gICAgICAgIDogaGlnaGxpZ2h0KGhpZ2hsaWdodCkKLSAgICAgICAgLCBy
YW5nZShyYW5nZSkKLSAgICB7Ci0gICAgfQotCi0gICAgUmV0YWluUHRyPERESGlnaGxpZ2h0UmVm
PiBoaWdobGlnaHQ7Ci0gICAgUmVmUHRyPFdlYkNvcmU6OlJhbmdlPiByYW5nZTsKLX07Ci0KIGNs
YXNzIFNlcnZpY2VzT3ZlcmxheUNvbnRyb2xsZXIgOiBwcml2YXRlIFBhZ2VPdmVybGF5OjpDbGll
bnQgewogcHVibGljOgogICAgIFNlcnZpY2VzT3ZlcmxheUNvbnRyb2xsZXIoV2ViUGFnZSYpOwpA
QCAtNjYsNDkgKzU0LDc4IEBAIHB1YmxpYzoKICAgICB2b2lkIHNlbGVjdGlvblJlY3RzRGlkQ2hh
bmdlKGNvbnN0IFZlY3RvcjxXZWJDb3JlOjpMYXlvdXRSZWN0PiYsIGNvbnN0IFZlY3RvcjxXZWJD
b3JlOjpHYXBSZWN0cz4mLCBib29sIGlzVGV4dE9ubHkpOwogCiBwcml2YXRlOgotICAgIHZvaWQg
Y3JlYXRlT3ZlcmxheUlmTmVlZGVkKCk7Ci0gICAgdm9pZCBoYW5kbGVDbGljayhjb25zdCBXZWJD
b3JlOjpJbnRQb2ludCYsIERESGlnaGxpZ2h0UmVmKTsKLSAgICB2b2lkIGNsZWFySGlnaGxpZ2h0
U3RhdGUoKTsKLQorICAgIGNsYXNzIEhpZ2hsaWdodCA6IHB1YmxpYyBSZWZDb3VudGVkPEhpZ2hs
aWdodD4geworICAgICAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShIaWdobGlnaHQpOworICAgIHB1
YmxpYzoKKyAgICAgICAgc3RhdGljIFBhc3NSZWZQdHI8SGlnaGxpZ2h0PiBjcmVhdGVGb3JTZWxl
Y3Rpb24oUmV0YWluUHRyPERESGlnaGxpZ2h0UmVmPik7CisgICAgICAgIHN0YXRpYyBQYXNzUmVm
UHRyPEhpZ2hsaWdodD4gY3JlYXRlRm9yVGVsZXBob25lTnVtYmVyKFJldGFpblB0cjxEREhpZ2hs
aWdodFJlZj4sIFBhc3NSZWZQdHI8V2ViQ29yZTo6UmFuZ2U+KTsKKworICAgICAgICBEREhpZ2hs
aWdodFJlZiBoaWdobGlnaHQoKSBjb25zdCB7IHJldHVybiBtX2hpZ2hsaWdodC5nZXQoKTsgfQor
ICAgICAgICBXZWJDb3JlOjpSYW5nZSogcmFuZ2UoKSBjb25zdCB7IHJldHVybiBtX3JhbmdlLmdl
dCgpOyB9CisKKyAgICAgICAgZW51bSBjbGFzcyBUeXBlIHsgVGVsZXBob25lTnVtYmVyLCBTZWxl
Y3Rpb24gfTsKKyAgICAgICAgVHlwZSB0eXBlKCkgY29uc3QgeyByZXR1cm4gbV90eXBlOyB9CisK
KyAgICBwcml2YXRlOgorICAgICAgICBleHBsaWNpdCBIaWdobGlnaHQoVHlwZSB0eXBlLCBSZXRh
aW5QdHI8RERIaWdobGlnaHRSZWY+IGhpZ2hsaWdodCwgUGFzc1JlZlB0cjxXZWJDb3JlOjpSYW5n
ZT4gcmFuZ2UpCisgICAgICAgICAgICA6IG1faGlnaGxpZ2h0KGhpZ2hsaWdodCkKKyAgICAgICAg
ICAgICwgbV9yYW5nZShyYW5nZSkKKyAgICAgICAgICAgICwgbV90eXBlKHR5cGUpCisgICAgICAg
IHsKKyAgICAgICAgICAgIEFTU0VSVChtX2hpZ2hsaWdodCk7CisgICAgICAgICAgICBBU1NFUlQo
dHlwZSAhPSBUeXBlOjpUZWxlcGhvbmVOdW1iZXIgfHwgbV9yYW5nZSk7CisgICAgICAgIH0KKwor
ICAgICAgICBSZXRhaW5QdHI8RERIaWdobGlnaHRSZWY+IG1faGlnaGxpZ2h0OworICAgICAgICBS
ZWZQdHI8V2ViQ29yZTo6UmFuZ2U+IG1fcmFuZ2U7CisgICAgICAgIFR5cGUgbV90eXBlOworICAg
IH07CisKKyAgICAvLyBQYWdlT3ZlcmxheTo6Q2xpZW50CiAgICAgdmlydHVhbCB2b2lkIHBhZ2VP
dmVybGF5RGVzdHJveWVkKFBhZ2VPdmVybGF5Kikgb3ZlcnJpZGU7CiAgICAgdmlydHVhbCB2b2lk
IHdpbGxNb3ZlVG9XZWJQYWdlKFBhZ2VPdmVybGF5KiwgV2ViUGFnZSopIG92ZXJyaWRlOwogICAg
IHZpcnR1YWwgdm9pZCBkaWRNb3ZlVG9XZWJQYWdlKFBhZ2VPdmVybGF5KiwgV2ViUGFnZSopIG92
ZXJyaWRlOwogICAgIHZpcnR1YWwgdm9pZCBkcmF3UmVjdChQYWdlT3ZlcmxheSosIFdlYkNvcmU6
OkdyYXBoaWNzQ29udGV4dCYsIGNvbnN0IFdlYkNvcmU6OkludFJlY3QmIGRpcnR5UmVjdCkgb3Zl
cnJpZGU7CiAgICAgdmlydHVhbCBib29sIG1vdXNlRXZlbnQoUGFnZU92ZXJsYXkqLCBjb25zdCBX
ZWJNb3VzZUV2ZW50Jikgb3ZlcnJpZGU7CiAKLSAgICBib29sIGRyYXdUZWxlcGhvbmVOdW1iZXJI
aWdobGlnaHRJZlZpc2libGUoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0JiwgY29uc3QgV2ViQ29y
ZTo6SW50UmVjdCYgZGlydHlSZWN0KTsKLSAgICB2b2lkIGRyYXdTZWxlY3Rpb25IaWdobGlnaHQo
V2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0JiwgY29uc3QgV2ViQ29yZTo6SW50UmVjdCYgZGlydHlS
ZWN0KTsKLSAgICB2b2lkIGRyYXdIaWdobGlnaHQoRERIaWdobGlnaHRSZWYsIFdlYkNvcmU6Okdy
YXBoaWNzQ29udGV4dCYpOworICAgIHZvaWQgY3JlYXRlT3ZlcmxheUlmTmVlZGVkKCk7CisgICAg
dm9pZCBoYW5kbGVDbGljayhjb25zdCBXZWJDb3JlOjpJbnRQb2ludCYsIEhpZ2hsaWdodCYpOwor
CisgICAgdm9pZCBkcmF3SGlnaGxpZ2h0KEhpZ2hsaWdodCYsIFdlYkNvcmU6OkdyYXBoaWNzQ29u
dGV4dCYpOworCisgICAgdm9pZCByZW1vdmVBbGxQb3RlbnRpYWxIaWdobGlnaHRzT2ZUeXBlKEhp
Z2hsaWdodDo6VHlwZSk7CisgICAgdm9pZCBidWlsZFBob25lTnVtYmVySGlnaGxpZ2h0cygpOwor
ICAgIHZvaWQgYnVpbGRTZWxlY3Rpb25IaWdobGlnaHQoKTsKKyAgICB2b2lkIGRpZFJlYnVpbGRQ
b3RlbnRpYWxIaWdobGlnaHRzKCk7CiAKLSAgICB2b2lkIGVzdGFibGlzaEhvdmVyZWRUZWxlcGhv
bmVIaWdobGlnaHQoYm9vbCYgbW91c2VJc092ZXJCdXR0b24pOwotICAgIHZvaWQgbWF5YmVDcmVh
dGVTZWxlY3Rpb25IaWdobGlnaHQoKTsKKyAgICB2b2lkIGRldGVybWluZUFjdGl2ZUhpZ2hsaWdo
dChib29sJiBtb3VzZUlzT3ZlckJ1dHRvbik7CisgICAgdm9pZCBjbGVhckFjdGl2ZUhpZ2hsaWdo
dCgpOwogCi0gICAgdm9pZCBjbGVhclNlbGVjdGlvbkhpZ2hsaWdodCgpOwotICAgIHZvaWQgY2xl
YXJIb3ZlcmVkVGVsZXBob25lTnVtYmVySGlnaGxpZ2h0KCk7CisgICAgYm9vbCBoYXNSZWxldmFu
dFNlbGVjdGlvblNlcnZpY2VzKCk7CiAKLSAgICBib29sIG1vdXNlSXNPdmVySGlnaGxpZ2h0KERE
SGlnaGxpZ2h0UmVmLCBib29sJiBtb3VzZUlzT3ZlckJ1dHRvbikgY29uc3Q7CisgICAgYm9vbCBt
b3VzZUlzT3ZlckhpZ2hsaWdodChIaWdobGlnaHQmLCBib29sJiBtb3VzZUlzT3ZlckJ1dHRvbikg
Y29uc3Q7CiAgICAgc3RkOjpjaHJvbm86Om1pbGxpc2Vjb25kcyByZW1haW5pbmdUaW1lVW50aWxI
aWdobGlnaHRTaG91bGRCZVNob3duKCkgY29uc3Q7CiAgICAgdm9pZCByZXBhaW50SGlnaGxpZ2h0
VGltZXJGaXJlZChXZWJDb3JlOjpUaW1lcjxTZXJ2aWNlc092ZXJsYXlDb250cm9sbGVyPiYpOwog
Ci0gICAgV2ViUGFnZSogbV93ZWJQYWdlOworICAgIHN0YXRpYyBib29sIGhpZ2hsaWdodHNBcmVF
cXVpdmFsZW50KGNvbnN0IEhpZ2hsaWdodCogYSwgY29uc3QgSGlnaGxpZ2h0KiBiKTsKKworICAg
IFdlYlBhZ2UmIG1fd2ViUGFnZTsKICAgICBQYWdlT3ZlcmxheSogbV9zZXJ2aWNlc092ZXJsYXk7
Ci0gICAgCisKKyAgICBSZWZQdHI8SGlnaGxpZ2h0PiBtX2FjdGl2ZUhpZ2hsaWdodDsKKyAgICBI
YXNoU2V0PFJlZlB0cjxIaWdobGlnaHQ+PiBtX3BvdGVudGlhbEhpZ2hsaWdodHM7CisKKyAgICBW
ZWN0b3I8UmVmUHRyPFdlYkNvcmU6OlJhbmdlPj4gbV9jdXJyZW50VGVsZXBob25lTnVtYmVyUmFu
Z2VzOwogICAgIFZlY3RvcjxXZWJDb3JlOjpMYXlvdXRSZWN0PiBtX2N1cnJlbnRTZWxlY3Rpb25S
ZWN0czsKLSAgICBSZXRhaW5QdHI8RERIaWdobGlnaHRSZWY+IG1fc2VsZWN0aW9uSGlnaGxpZ2h0
OwogICAgIGJvb2wgbV9pc1RleHRPbmx5OwotICAgIHN0ZDo6Y2hyb25vOjpzdGVhZHlfY2xvY2s6
OnRpbWVfcG9pbnQgbV9sYXN0U2VsZWN0aW9uQ2hhbmdlVGltZTsKLSAgICBzdGQ6OmNocm9ubzo6
c3RlYWR5X2Nsb2NrOjp0aW1lX3BvaW50IG1fbGFzdEhvdmVyZWRIaWdobGlnaHRDaGFuZ2VUaW1l
OwogCi0gICAgVmVjdG9yPFJlZlB0cjxXZWJDb3JlOjpSYW5nZT4+IG1fY3VycmVudFRlbGVwaG9u
ZU51bWJlclJhbmdlczsKLSAgICBWZWN0b3I8UmV0YWluUHRyPERESGlnaGxpZ2h0UmVmPj4gbV90
ZWxlcGhvbmVOdW1iZXJIaWdobGlnaHRzOwotICAgIHN0ZDo6dW5pcXVlX3B0cjxUZWxlcGhvbmVO
dW1iZXJEYXRhPiBtX2hvdmVyZWRUZWxlcGhvbmVOdW1iZXJEYXRhOworICAgIHN0ZDo6Y2hyb25v
OjpzdGVhZHlfY2xvY2s6OnRpbWVfcG9pbnQgbV9sYXN0U2VsZWN0aW9uQ2hhbmdlVGltZTsKKyAg
ICBzdGQ6OmNocm9ubzo6c3RlYWR5X2Nsb2NrOjp0aW1lX3BvaW50IG1fbGFzdEFjdGl2ZUhpZ2hs
aWdodENoYW5nZVRpbWU7CiAKLSAgICBSZXRhaW5QdHI8RERIaWdobGlnaHRSZWY+IG1fY3VycmVu
dEhvdmVyZWRIaWdobGlnaHQ7Ci0gICAgUmV0YWluUHRyPERESGlnaGxpZ2h0UmVmPiBtX2N1cnJl
bnRNb3VzZURvd25PbkJ1dHRvbkhpZ2hsaWdodDsKKyAgICBSZWZQdHI8SGlnaGxpZ2h0PiBtX2N1
cnJlbnRNb3VzZURvd25PbkJ1dHRvbkhpZ2hsaWdodDsKKyAgICBXZWJDb3JlOjpJbnRQb2ludCBt
X21vdXNlUG9zaXRpb247CiAKICAgICBXZWJDb3JlOjpUaW1lcjxTZXJ2aWNlc092ZXJsYXlDb250
cm9sbGVyPiBtX3JlcGFpbnRIaWdobGlnaHRUaW1lcjsKLQotICAgIFdlYkNvcmU6OkludFBvaW50
IG1fbW91c2VQb3NpdGlvbjsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYktpdApkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL21hYy9TZXJ2aWNlc092ZXJsYXlD
b250cm9sbGVyLm1tIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL21hYy9TZXJ2
aWNlc092ZXJsYXlDb250cm9sbGVyLm1tCmluZGV4IGNmOGM4ZDcuLjU4NzYwOWQgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9tYWMvU2VydmljZXNPdmVybGF5
Q29udHJvbGxlci5tbQorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvbWFj
L1NlcnZpY2VzT3ZlcmxheUNvbnRyb2xsZXIubW0KQEAgLTYzLDYgKzYzLDE2IEBAIHVzaW5nIG5h
bWVzcGFjZSBXZWJDb3JlOwogCiBuYW1lc3BhY2UgV2ViS2l0IHsKIAorUGFzc1JlZlB0cjxTZXJ2
aWNlc092ZXJsYXlDb250cm9sbGVyOjpIaWdobGlnaHQ+IFNlcnZpY2VzT3ZlcmxheUNvbnRyb2xs
ZXI6OkhpZ2hsaWdodDo6Y3JlYXRlRm9yU2VsZWN0aW9uKFJldGFpblB0cjxEREhpZ2hsaWdodFJl
Zj4gaGlnaGxpZ2h0KQoreworICAgIHJldHVybiBhZG9wdFJlZihuZXcgSGlnaGxpZ2h0KFR5cGU6
OlNlbGVjdGlvbiwgaGlnaGxpZ2h0LCBudWxscHRyKSk7Cit9CisKK1Bhc3NSZWZQdHI8U2Vydmlj
ZXNPdmVybGF5Q29udHJvbGxlcjo6SGlnaGxpZ2h0PiBTZXJ2aWNlc092ZXJsYXlDb250cm9sbGVy
OjpIaWdobGlnaHQ6OmNyZWF0ZUZvclRlbGVwaG9uZU51bWJlcihSZXRhaW5QdHI8RERIaWdobGln
aHRSZWY+IGhpZ2hsaWdodCwgUGFzc1JlZlB0cjxSYW5nZT4gcmFuZ2UpCit7CisgICAgcmV0dXJu
IGFkb3B0UmVmKG5ldyBIaWdobGlnaHQoVHlwZTo6VGVsZXBob25lTnVtYmVyLCBoaWdobGlnaHQs
IHJhbmdlKSk7Cit9CisKIHN0YXRpYyBJbnRSZWN0IHRleHRRdWFkc1RvQm91bmRpbmdSZWN0Rm9y
UmFuZ2UoUmFuZ2UmIHJhbmdlKQogewogICAgIFZlY3RvcjxGbG9hdFF1YWQ+IHRleHRRdWFkczsK
QEAgLTc0LDcgKzg0LDcgQEAgc3RhdGljIEludFJlY3QgdGV4dFF1YWRzVG9Cb3VuZGluZ1JlY3RG
b3JSYW5nZShSYW5nZSYgcmFuZ2UpCiB9CiAKIFNlcnZpY2VzT3ZlcmxheUNvbnRyb2xsZXI6OlNl
cnZpY2VzT3ZlcmxheUNvbnRyb2xsZXIoV2ViUGFnZSYgd2ViUGFnZSkKLSAgICA6IG1fd2ViUGFn
ZSgmd2ViUGFnZSkKKyAgICA6IG1fd2ViUGFnZSh3ZWJQYWdlKQogICAgICwgbV9zZXJ2aWNlc092
ZXJsYXkobnVsbHB0cikKICAgICAsIG1faXNUZXh0T25seShmYWxzZSkKICAgICAsIG1fcmVwYWlu
dEhpZ2hsaWdodFRpbWVyKHRoaXMsICZTZXJ2aWNlc092ZXJsYXlDb250cm9sbGVyOjpyZXBhaW50
SGlnaGxpZ2h0VGltZXJGaXJlZCkKQEAgLTk5LDMxICsxMDksMTIgQEAgdm9pZCBTZXJ2aWNlc092
ZXJsYXlDb250cm9sbGVyOjp3aWxsTW92ZVRvV2ViUGFnZShQYWdlT3ZlcmxheSosIFdlYlBhZ2Uq
IHdlYlBhZ2UKIAogICAgIEFTU0VSVChtX3NlcnZpY2VzT3ZlcmxheSk7CiAgICAgbV9zZXJ2aWNl
c092ZXJsYXkgPSBudWxscHRyOwotCi0gICAgQVNTRVJUKG1fd2ViUGFnZSk7Ci0gICAgbV93ZWJQ
YWdlID0gbnVsbHB0cjsKIH0KIAogdm9pZCBTZXJ2aWNlc092ZXJsYXlDb250cm9sbGVyOjpkaWRN
b3ZlVG9XZWJQYWdlKFBhZ2VPdmVybGF5KiwgV2ViUGFnZSopCiB7CiB9CiAKLXZvaWQgU2Vydmlj
ZXNPdmVybGF5Q29udHJvbGxlcjo6Y3JlYXRlT3ZlcmxheUlmTmVlZGVkKCkKLXsKLSAgICBpZiAo
bV9zZXJ2aWNlc092ZXJsYXkpIHsKLSAgICAgICAgbV9zZXJ2aWNlc092ZXJsYXktPnNldE5lZWRz
RGlzcGxheSgpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgaWYgKG1fY3VycmVudFRl
bGVwaG9uZU51bWJlclJhbmdlcy5pc0VtcHR5KCkgJiYgKCFXZWJQcm9jZXNzOjpzaGFyZWQoKS5o
YXNTZWxlY3Rpb25TZXJ2aWNlcygpIHx8IG1fY3VycmVudFNlbGVjdGlvblJlY3RzLmlzRW1wdHko
KSkpCi0gICAgICAgIHJldHVybjsKLQotICAgIFJlZlB0cjxQYWdlT3ZlcmxheT4gb3ZlcmxheSA9
IFBhZ2VPdmVybGF5OjpjcmVhdGUodGhpcywgUGFnZU92ZXJsYXk6Ok92ZXJsYXlUeXBlOjpEb2N1
bWVudCk7Ci0gICAgbV9zZXJ2aWNlc092ZXJsYXkgPSBvdmVybGF5LmdldCgpOwotICAgIG1fd2Vi
UGFnZS0+aW5zdGFsbFBhZ2VPdmVybGF5KG92ZXJsYXkucmVsZWFzZSgpLCBQYWdlT3ZlcmxheTo6
RmFkZU1vZGU6OkZhZGUpOwotICAgIG1fc2VydmljZXNPdmVybGF5LT5zZXROZWVkc0Rpc3BsYXko
KTsKLX0KLQogc3RhdGljIGNvbnN0IHVpbnQ4X3QgQWxpZ25tZW50Tm9uZSA9IDA7CiBzdGF0aWMg
Y29uc3QgdWludDhfdCBBbGlnbm1lbnRMZWZ0ID0gMSA8PCAwOwogc3RhdGljIGNvbnN0IHVpbnQ4
X3QgQWxpZ25tZW50UmlnaHQgPSAxIDw8IDE7CkBAIC0yMTUsNyArMjA2LDYgQEAgc3RhdGljIHZv
aWQgY29tcGFjdFJlY3RzV2l0aEdhcFJlY3RzKFZlY3RvcjxMYXlvdXRSZWN0PiYgcmVjdHMsIGNv
bnN0IFZlY3RvcjxHYXAKIHZvaWQgU2VydmljZXNPdmVybGF5Q29udHJvbGxlcjo6c2VsZWN0aW9u
UmVjdHNEaWRDaGFuZ2UoY29uc3QgVmVjdG9yPExheW91dFJlY3Q+JiByZWN0cywgY29uc3QgVmVj
dG9yPEdhcFJlY3RzPiYgZ2FwUmVjdHMsIGJvb2wgaXNUZXh0T25seSkKIHsKICNpZiBfX01BQ19P
U19YX1ZFUlNJT05fTUlOX1JFUVVJUkVEID4gMTA5MAotICAgIGNsZWFyU2VsZWN0aW9uSGlnaGxp
Z2h0KCk7CiAgICAgbV9jdXJyZW50U2VsZWN0aW9uUmVjdHMgPSByZWN0czsKICAgICBtX2lzVGV4
dE9ubHkgPSBpc1RleHRPbmx5OwogCkBAIC0yMjgsNyArMjE4LDcgQEAgdm9pZCBTZXJ2aWNlc092
ZXJsYXlDb250cm9sbGVyOjpzZWxlY3Rpb25SZWN0c0RpZENoYW5nZShjb25zdCBWZWN0b3I8TGF5
b3V0UmVjdD4KIAogICAgIExPRyhTZXJ2aWNlcywgIlNlcnZpY2VzT3ZlcmxheUNvbnRyb2xsZXIg
LSBTZWxlY3Rpb24gcmVjdHMgY2hhbmdlZCAtIE5vdyBoYXZlICVsdVxuIiwgcmVjdHMuc2l6ZSgp
KTsKIAotICAgIGNyZWF0ZU92ZXJsYXlJZk5lZWRlZCgpOworICAgIGJ1aWxkU2VsZWN0aW9uSGln
aGxpZ2h0KCk7CiAjZWxzZQogICAgIFVOVVNFRF9QQVJBTShyZWN0cyk7CiAjZW5kaWYKQEAgLTIz
OSw5NSArMjI5LDE3IEBAIHZvaWQgU2VydmljZXNPdmVybGF5Q29udHJvbGxlcjo6c2VsZWN0ZWRU
ZWxlcGhvbmVOdW1iZXJSYW5nZXNDaGFuZ2VkKGNvbnN0IFZlY3RvCiAjaWYgUExBVEZPUk0oTUFD
KSAmJiBfX01BQ19PU19YX1ZFUlNJT05fTUlOX1JFUVVJUkVEID4gMTA5MAogICAgIExPRyhTZXJ2
aWNlcywgIlNlcnZpY2VzT3ZlcmxheUNvbnRyb2xsZXIgLSBUZWxlcGhvbmUgbnVtYmVyIHJhbmdl
cyBjaGFuZ2VkIC0gSGFkICVsdSwgbm93IGhhdmUgJWx1XG4iLCBtX2N1cnJlbnRUZWxlcGhvbmVO
dW1iZXJSYW5nZXMuc2l6ZSgpLCByYW5nZXMuc2l6ZSgpKTsKICAgICBtX2N1cnJlbnRUZWxlcGhv
bmVOdW1iZXJSYW5nZXMgPSByYW5nZXM7Ci0gICAgbV90ZWxlcGhvbmVOdW1iZXJIaWdobGlnaHRz
LmNsZWFyKCk7Ci0gICAgbV90ZWxlcGhvbmVOdW1iZXJIaWdobGlnaHRzLnJlc2l6ZShyYW5nZXMu
c2l6ZSgpKTsKIAotICAgIGNyZWF0ZU92ZXJsYXlJZk5lZWRlZCgpOworICAgIGJ1aWxkUGhvbmVO
dW1iZXJIaWdobGlnaHRzKCk7CiAjZWxzZQogICAgIFVOVVNFRF9QQVJBTShyYW5nZXMpOwogI2Vu
ZGlmCiB9CiAKLXZvaWQgU2VydmljZXNPdmVybGF5Q29udHJvbGxlcjo6Y2xlYXJIaWdobGlnaHRT
dGF0ZSgpCi17Ci0gICAgY2xlYXJTZWxlY3Rpb25IaWdobGlnaHQoKTsKLSAgICBjbGVhckhvdmVy
ZWRUZWxlcGhvbmVOdW1iZXJIaWdobGlnaHQoKTsKLQotICAgIG1fdGVsZXBob25lTnVtYmVySGln
aGxpZ2h0cy5jbGVhcigpOwotfQotCi12b2lkIFNlcnZpY2VzT3ZlcmxheUNvbnRyb2xsZXI6OmRy
YXdSZWN0KFBhZ2VPdmVybGF5KiBvdmVybGF5LCBXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQmIGdy
YXBoaWNzQ29udGV4dCwgY29uc3QgV2ViQ29yZTo6SW50UmVjdCYgZGlydHlSZWN0KQotewotICAg
IGlmIChtX2N1cnJlbnRTZWxlY3Rpb25SZWN0cy5pc0VtcHR5KCkgJiYgbV9jdXJyZW50VGVsZXBo
b25lTnVtYmVyUmFuZ2VzLmlzRW1wdHkoKSkgewotICAgICAgICBjbGVhckhpZ2hsaWdodFN0YXRl
KCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBpZiAoZHJhd1RlbGVwaG9uZU51bWJl
ckhpZ2hsaWdodElmVmlzaWJsZShncmFwaGljc0NvbnRleHQsIGRpcnR5UmVjdCkpCi0gICAgICAg
IHJldHVybjsKLQotICAgIGRyYXdTZWxlY3Rpb25IaWdobGlnaHQoZ3JhcGhpY3NDb250ZXh0LCBk
aXJ0eVJlY3QpOwotfQotCi12b2lkIFNlcnZpY2VzT3ZlcmxheUNvbnRyb2xsZXI6OmRyYXdTZWxl
Y3Rpb25IaWdobGlnaHQoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0JiBncmFwaGljc0NvbnRleHQs
IGNvbnN0IFdlYkNvcmU6OkludFJlY3QmIGRpcnR5UmVjdCkKLXsKLSAgICAvLyBJdCdzIHBvc3Np
YmxlIHRvIGVuZCB1cCBkcmF3aW5nIHRoZSBzZWxlY3Rpb24gaGlnaGxpZ2h0IGJlZm9yZSB3ZSd2
ZSBhY3R1YWxseSByZWNlaXZlZCB0aGUgc2VsZWN0aW9uIHJlY3RzLgotICAgIC8vIElmIHRoYXQg
aGFwcGVucyB3ZSdsbCBlbmQgdXAgaGVyZSBhZ2FpbiBvbmNlIHdlIGhhdmUgdGhlIHJlY3RzLgot
ICAgIGlmIChtX2N1cnJlbnRTZWxlY3Rpb25SZWN0cy5pc0VtcHR5KCkpCi0gICAgICAgIHJldHVy
bjsKLQotICAgIC8vIElmIHRoZXJlIGFyZSBubyBhcHByb3ByaWF0ZSBpbnN0YWxsZWQgc2VsZWN0
aW9uIHNlcnZpY2VzIGFuZCB3ZSBoYXZlIG5vIHBob25lIG51bWJlcnMgZGV0ZWN0ZWQsIHRoZW4g
d2UgaGF2ZSBub3RoaW5nIHRvIGRyYXcuCi0gICAgaWYgKCghV2ViUHJvY2Vzczo6c2hhcmVkKCku
aGFzU2VsZWN0aW9uU2VydmljZXMoKSB8fCAoIVdlYlByb2Nlc3M6OnNoYXJlZCgpLmhhc1JpY2hD
b250ZW50U2VydmljZXMoKSAmJiAhbV9pc1RleHRPbmx5KSkgJiYgbV9jdXJyZW50VGVsZXBob25l
TnVtYmVyUmFuZ2VzLmlzRW1wdHkoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYgKCFtX3Nl
bGVjdGlvbkhpZ2hsaWdodCkKLSAgICAgICAgbWF5YmVDcmVhdGVTZWxlY3Rpb25IaWdobGlnaHQo
KTsKLQotICAgIGlmIChtX3NlbGVjdGlvbkhpZ2hsaWdodCkKLSAgICAgICAgZHJhd0hpZ2hsaWdo
dChtX3NlbGVjdGlvbkhpZ2hsaWdodC5nZXQoKSwgZ3JhcGhpY3NDb250ZXh0KTsKLX0KLQotYm9v
bCBTZXJ2aWNlc092ZXJsYXlDb250cm9sbGVyOjpkcmF3VGVsZXBob25lTnVtYmVySGlnaGxpZ2h0
SWZWaXNpYmxlKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dCYgZ3JhcGhpY3NDb250ZXh0LCBjb25z
dCBXZWJDb3JlOjpJbnRSZWN0JiBkaXJ0eVJlY3QpCi17Ci0gICAgLy8gTWFrZSBzdXJlIHRoZSBo
b3ZlcmVkIHRlbGVwaG9uZSBudW1iZXIgaGlnaGxpZ2h0IGlzIHN0aWxsIGhvdmVyZWQuCi0gICAg
aWYgKG1faG92ZXJlZFRlbGVwaG9uZU51bWJlckRhdGEpIHsKLSAgICAgICAgQm9vbGVhbiBvbkJ1
dHRvbjsKLSAgICAgICAgaWYgKCFEREhpZ2hsaWdodFBvaW50SXNPbkhpZ2hsaWdodChtX2hvdmVy
ZWRUZWxlcGhvbmVOdW1iZXJEYXRhLT5oaWdobGlnaHQuZ2V0KCksIChDR1BvaW50KW1fbW91c2VQ
b3NpdGlvbiwgJm9uQnV0dG9uKSkKLSAgICAgICAgICAgIGNsZWFySG92ZXJlZFRlbGVwaG9uZU51
bWJlckhpZ2hsaWdodCgpOwotCi0gICAgICAgIGJvb2wgZm91bmRNYXRjaGluZ1JhbmdlID0gZmFs
c2U7Ci0KLSAgICAgICAgLy8gTWFrZSBzdXJlIHRoZSBob3ZlcmVkIGhpZ2hsaWdodCBzdGlsbCBj
b3JyZXNwb25kcyB0byBhIGN1cnJlbnQgdGVsZXBob25lIG51bWJlciByYW5nZS4KLSAgICAgICAg
Zm9yIChhdXRvJiByYW5nZSA6IG1fY3VycmVudFRlbGVwaG9uZU51bWJlclJhbmdlcykgewotICAg
ICAgICAgICAgaWYgKGFyZVJhbmdlc0VxdWFsKHJhbmdlLmdldCgpLCBtX2hvdmVyZWRUZWxlcGhv
bmVOdW1iZXJEYXRhLT5yYW5nZS5nZXQoKSkpIHsKLSAgICAgICAgICAgICAgICBmb3VuZE1hdGNo
aW5nUmFuZ2UgPSB0cnVlOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQot
ICAgICAgICB9Ci0KLSAgICAgICAgaWYgKCFmb3VuZE1hdGNoaW5nUmFuZ2UpCi0gICAgICAgICAg
ICBjbGVhckhvdmVyZWRUZWxlcGhvbmVOdW1iZXJIaWdobGlnaHQoKTsKLSAgICB9Ci0KLSAgICAv
LyBGb3VuZCBvdXQgd2hpY2ggLSBpZiBhbnkgLSB0ZWxlcGhvbmUgbnVtYmVyIGlzIGhvdmVyZWQu
Ci0gICAgaWYgKCFtX2hvdmVyZWRUZWxlcGhvbmVOdW1iZXJEYXRhKSB7Ci0gICAgICAgIGJvb2wg
bW91c2VJc092ZXJCdXR0b247Ci0gICAgICAgIGVzdGFibGlzaEhvdmVyZWRUZWxlcGhvbmVIaWdo
bGlnaHQobW91c2VJc092ZXJCdXR0b24pOwotICAgIH0KLQotICAgIC8vIElmIGEgdGVsZXBob25l
IG51bWJlciBpcyBhY3R1YWxseSBob3ZlcmVkLCBkcmF3IGl0LgotICAgIGlmIChtX2hvdmVyZWRU
ZWxlcGhvbmVOdW1iZXJEYXRhKSB7Ci0gICAgICAgIGRyYXdIaWdobGlnaHQobV9ob3ZlcmVkVGVs
ZXBob25lTnVtYmVyRGF0YS0+aGlnaGxpZ2h0LmdldCgpLCBncmFwaGljc0NvbnRleHQpOwotICAg
ICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0KLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLWJvb2wg
U2VydmljZXNPdmVybGF5Q29udHJvbGxlcjo6bW91c2VJc092ZXJIaWdobGlnaHQoRERIaWdobGln
aHRSZWYgaGlnaGxpZ2h0LCBib29sJiBtb3VzZUlzT3ZlckJ1dHRvbikgY29uc3QKK2Jvb2wgU2Vy
dmljZXNPdmVybGF5Q29udHJvbGxlcjo6bW91c2VJc092ZXJIaWdobGlnaHQoSGlnaGxpZ2h0JiBo
aWdobGlnaHQsIGJvb2wmIG1vdXNlSXNPdmVyQnV0dG9uKSBjb25zdAogewogICAgIEJvb2xlYW4g
b25CdXR0b247Ci0gICAgYm9vbCBob3ZlcmVkID0gRERIaWdobGlnaHRQb2ludElzT25IaWdobGln
aHQoaGlnaGxpZ2h0LCAoQ0dQb2ludCltX21vdXNlUG9zaXRpb24sICZvbkJ1dHRvbik7CisgICAg
Ym9vbCBob3ZlcmVkID0gRERIaWdobGlnaHRQb2ludElzT25IaWdobGlnaHQoaGlnaGxpZ2h0Lmhp
Z2hsaWdodCgpLCAoQ0dQb2ludCltX21vdXNlUG9zaXRpb24sICZvbkJ1dHRvbik7CiAgICAgbW91
c2VJc092ZXJCdXR0b24gPSBvbkJ1dHRvbjsKICAgICByZXR1cm4gaG92ZXJlZDsKIH0KQEAgLTMz
NiwxNiArMjQ4LDE2IEBAIHN0ZDo6Y2hyb25vOjptaWxsaXNlY29uZHMgU2VydmljZXNPdmVybGF5
Q29udHJvbGxlcjo6cmVtYWluaW5nVGltZVVudGlsSGlnaGxpZ2h0CiB7CiAgICAgLy8gSGlnaGxp
Z2h0IGh5c3RlcmVzaXMgaXMgb25seSBmb3Igc2VsZWN0aW9uIHNlcnZpY2VzLCBiZWNhdXNlIHRl
bGVwaG9uZSBudW1iZXIgaGlnaGxpZ2h0cyBhcmUgYWxyZWFkeSBtdWNoIG1vcmUgc3RhYmxlCiAg
ICAgLy8gYnkgdmlydHVlIG9mIGJlaW5nIGV4cGFuZGVkIHRvIGluY2x1ZGUgdGhlIGVudGlyZSB0
ZWxlcGhvbmUgbnVtYmVyLgotICAgIGlmIChtX2hvdmVyZWRUZWxlcGhvbmVOdW1iZXJEYXRhKQor
ICAgIGlmIChtX2FjdGl2ZUhpZ2hsaWdodC0+dHlwZSgpID09IEhpZ2hsaWdodDo6VHlwZTo6VGVs
ZXBob25lTnVtYmVyKQogICAgICAgICByZXR1cm4gc3RkOjpjaHJvbm86Om1pbGxpc2Vjb25kczo6
emVybygpOwogCiAgICAgc3RkOjpjaHJvbm86OnN0ZWFkeV9jbG9jazo6ZHVyYXRpb24gbWluaW11
bVRpbWVVbnRpbEhpZ2hsaWdodFNob3VsZEJlU2hvd24gPSAyMDBfbXM7CiAKICAgICBhdXRvIG5v
dyA9IHN0ZDo6Y2hyb25vOjpzdGVhZHlfY2xvY2s6Om5vdygpOwogICAgIGF1dG8gdGltZVNpbmNl
TGFzdFNlbGVjdGlvbkNoYW5nZSA9IG5vdyAtIG1fbGFzdFNlbGVjdGlvbkNoYW5nZVRpbWU7Ci0g
ICAgYXV0byB0aW1lU2luY2VNb3VzZU92ZXJTZWxlY3Rpb24gPSBub3cgLSBtX2xhc3RIb3ZlcmVk
SGlnaGxpZ2h0Q2hhbmdlVGltZTsKKyAgICBhdXRvIHRpbWVTaW5jZUhpZ2hsaWdodEJlY2FtZUFj
dGl2ZSA9IG5vdyAtIG1fbGFzdEFjdGl2ZUhpZ2hsaWdodENoYW5nZVRpbWU7CiAKLSAgICByZXR1
cm4gc3RkOjpjaHJvbm86OmR1cmF0aW9uX2Nhc3Q8c3RkOjpjaHJvbm86Om1pbGxpc2Vjb25kcz4o
c3RkOjptYXgobWluaW11bVRpbWVVbnRpbEhpZ2hsaWdodFNob3VsZEJlU2hvd24gLSB0aW1lU2lu
Y2VMYXN0U2VsZWN0aW9uQ2hhbmdlLCBtaW5pbXVtVGltZVVudGlsSGlnaGxpZ2h0U2hvdWxkQmVT
aG93biAtIHRpbWVTaW5jZU1vdXNlT3ZlclNlbGVjdGlvbikpOworICAgIHJldHVybiBzdGQ6OmNo
cm9ubzo6ZHVyYXRpb25fY2FzdDxzdGQ6OmNocm9ubzo6bWlsbGlzZWNvbmRzPihzdGQ6Om1heCht
aW5pbXVtVGltZVVudGlsSGlnaGxpZ2h0U2hvdWxkQmVTaG93biAtIHRpbWVTaW5jZUxhc3RTZWxl
Y3Rpb25DaGFuZ2UsIG1pbmltdW1UaW1lVW50aWxIaWdobGlnaHRTaG91bGRCZVNob3duIC0gdGlt
ZVNpbmNlSGlnaGxpZ2h0QmVjYW1lQWN0aXZlKSk7CiB9CiAKIHZvaWQgU2VydmljZXNPdmVybGF5
Q29udHJvbGxlcjo6cmVwYWludEhpZ2hsaWdodFRpbWVyRmlyZWQoV2ViQ29yZTo6VGltZXI8U2Vy
dmljZXNPdmVybGF5Q29udHJvbGxlcj4mKQpAQCAtMzU0LDEwICsyNjYsOCBAQCB2b2lkIFNlcnZp
Y2VzT3ZlcmxheUNvbnRyb2xsZXI6OnJlcGFpbnRIaWdobGlnaHRUaW1lckZpcmVkKFdlYkNvcmU6
OlRpbWVyPFNlcnZpYwogICAgICAgICBtX3NlcnZpY2VzT3ZlcmxheS0+c2V0TmVlZHNEaXNwbGF5
KCk7CiB9CiAKLXZvaWQgU2VydmljZXNPdmVybGF5Q29udHJvbGxlcjo6ZHJhd0hpZ2hsaWdodChE
REhpZ2hsaWdodFJlZiBoaWdobGlnaHQsIFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dCYgZ3JhcGhp
Y3NDb250ZXh0KQordm9pZCBTZXJ2aWNlc092ZXJsYXlDb250cm9sbGVyOjpkcmF3SGlnaGxpZ2h0
KEhpZ2hsaWdodCYgaGlnaGxpZ2h0LCBXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQmIGdyYXBoaWNz
Q29udGV4dCkKIHsKLSAgICBBU1NFUlQoaGlnaGxpZ2h0KTsKLQogICAgIGJvb2wgbW91c2VJc092
ZXJCdXR0b247CiAgICAgaWYgKCFtb3VzZUlzT3ZlckhpZ2hsaWdodChoaWdobGlnaHQsIG1vdXNl
SXNPdmVyQnV0dG9uKSkgewogICAgICAgICBMT0coU2VydmljZXMsICJTZXJ2aWNlc092ZXJsYXlD
b250cm9sbGVyOjpkcmF3SGlnaGxpZ2h0IC0gTW91c2UgaXMgbm90IG92ZXIgaGlnaGxpZ2h0LCBz
byBkcmF3aW5nIG5vdGhpbmciKTsKQEAgLTM3Miw4NiArMjgyLDc0IEBAIHZvaWQgU2VydmljZXNP
dmVybGF5Q29udHJvbGxlcjo6ZHJhd0hpZ2hsaWdodChEREhpZ2hsaWdodFJlZiBoaWdobGlnaHQs
IFdlYkNvcmU6CiAKICAgICBDR0NvbnRleHRSZWYgY2dDb250ZXh0ID0gZ3JhcGhpY3NDb250ZXh0
LnBsYXRmb3JtQ29udGV4dCgpOwogICAgIAotICAgIENHTGF5ZXJSZWYgaGlnaGxpZ2h0TGF5ZXIg
PSBEREhpZ2hsaWdodEdldExheWVyV2l0aENvbnRleHQoaGlnaGxpZ2h0LCBjZ0NvbnRleHQpOwot
ICAgIENHUmVjdCBoaWdobGlnaHRCb3VuZGluZ1JlY3QgPSBEREhpZ2hsaWdodEdldEJvdW5kaW5n
UmVjdChoaWdobGlnaHQpOwotICAgIAotICAgIEdyYXBoaWNzQ29udGV4dFN0YXRlU2F2ZXIgc3Rh
dGVTYXZlcihncmFwaGljc0NvbnRleHQpOwotCi0gICAgZ3JhcGhpY3NDb250ZXh0LnRyYW5zbGF0
ZSh0b0Zsb2F0U2l6ZShoaWdobGlnaHRCb3VuZGluZ1JlY3Qub3JpZ2luKSk7CisgICAgQ0dMYXll
clJlZiBoaWdobGlnaHRMYXllciA9IERESGlnaGxpZ2h0R2V0TGF5ZXJXaXRoQ29udGV4dChoaWdo
bGlnaHQuaGlnaGxpZ2h0KCksIGNnQ29udGV4dCk7CisgICAgQ0dSZWN0IGhpZ2hsaWdodEJvdW5k
aW5nUmVjdCA9IERESGlnaGxpZ2h0R2V0Qm91bmRpbmdSZWN0KGhpZ2hsaWdodC5oaWdobGlnaHQo
KSk7CiAKLSAgICBDR1JlY3QgaGlnaGxpZ2h0RHJhd1JlY3QgPSBoaWdobGlnaHRCb3VuZGluZ1Jl
Y3Q7Ci0gICAgaGlnaGxpZ2h0RHJhd1JlY3Qub3JpZ2luLnggPSAwOwotICAgIGhpZ2hsaWdodERy
YXdSZWN0Lm9yaWdpbi55ID0gMDsKLSAgICAKLSAgICBDR0NvbnRleHREcmF3TGF5ZXJJblJlY3Qo
Y2dDb250ZXh0LCBoaWdobGlnaHREcmF3UmVjdCwgaGlnaGxpZ2h0TGF5ZXIpOworICAgIENHQ29u
dGV4dERyYXdMYXllckluUmVjdChjZ0NvbnRleHQsIGhpZ2hsaWdodEJvdW5kaW5nUmVjdCwgaGln
aGxpZ2h0TGF5ZXIpOwogfQogCi12b2lkIFNlcnZpY2VzT3ZlcmxheUNvbnRyb2xsZXI6OmNsZWFy
U2VsZWN0aW9uSGlnaGxpZ2h0KCkKK3ZvaWQgU2VydmljZXNPdmVybGF5Q29udHJvbGxlcjo6ZHJh
d1JlY3QoUGFnZU92ZXJsYXkqIG92ZXJsYXksIFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dCYgZ3Jh
cGhpY3NDb250ZXh0LCBjb25zdCBXZWJDb3JlOjpJbnRSZWN0JiBkaXJ0eVJlY3QpCiB7Ci0gICAg
aWYgKCFtX3NlbGVjdGlvbkhpZ2hsaWdodCkKLSAgICAgICAgcmV0dXJuOworICAgIGJvb2wgbW91
c2VJc092ZXJCdXR0b247CisgICAgZGV0ZXJtaW5lQWN0aXZlSGlnaGxpZ2h0KG1vdXNlSXNPdmVy
QnV0dG9uKTsKIAotICAgIGlmIChtX2N1cnJlbnRIb3ZlcmVkSGlnaGxpZ2h0ID09IG1fc2VsZWN0
aW9uSGlnaGxpZ2h0KQotICAgICAgICBtX2N1cnJlbnRIb3ZlcmVkSGlnaGxpZ2h0ID0gbnVsbHB0
cjsKLSAgICBpZiAobV9jdXJyZW50TW91c2VEb3duT25CdXR0b25IaWdobGlnaHQgPT0gbV9zZWxl
Y3Rpb25IaWdobGlnaHQpCi0gICAgICAgIG1fY3VycmVudE1vdXNlRG93bk9uQnV0dG9uSGlnaGxp
Z2h0ID0gbnVsbHB0cjsKLSAgICBtX3NlbGVjdGlvbkhpZ2hsaWdodCA9IG51bGxwdHI7CisgICAg
aWYgKG1fYWN0aXZlSGlnaGxpZ2h0KQorICAgICAgICBkcmF3SGlnaGxpZ2h0KCptX2FjdGl2ZUhp
Z2hsaWdodCwgZ3JhcGhpY3NDb250ZXh0KTsKIH0KIAotdm9pZCBTZXJ2aWNlc092ZXJsYXlDb250
cm9sbGVyOjpjbGVhckhvdmVyZWRUZWxlcGhvbmVOdW1iZXJIaWdobGlnaHQoKQordm9pZCBTZXJ2
aWNlc092ZXJsYXlDb250cm9sbGVyOjpjbGVhckFjdGl2ZUhpZ2hsaWdodCgpCiB7Ci0gICAgaWYg
KCFtX2hvdmVyZWRUZWxlcGhvbmVOdW1iZXJEYXRhKQorICAgIGlmICghbV9hY3RpdmVIaWdobGln
aHQpCiAgICAgICAgIHJldHVybjsKIAotICAgIGlmIChtX2N1cnJlbnRIb3ZlcmVkSGlnaGxpZ2h0
ID09IG1faG92ZXJlZFRlbGVwaG9uZU51bWJlckRhdGEtPmhpZ2hsaWdodCkKLSAgICAgICAgbV9j
dXJyZW50SG92ZXJlZEhpZ2hsaWdodCA9IG51bGxwdHI7Ci0gICAgaWYgKG1fY3VycmVudE1vdXNl
RG93bk9uQnV0dG9uSGlnaGxpZ2h0ID09IG1faG92ZXJlZFRlbGVwaG9uZU51bWJlckRhdGEtPmhp
Z2hsaWdodCkKKyAgICBpZiAobV9jdXJyZW50TW91c2VEb3duT25CdXR0b25IaWdobGlnaHQgPT0g
bV9hY3RpdmVIaWdobGlnaHQpCiAgICAgICAgIG1fY3VycmVudE1vdXNlRG93bk9uQnV0dG9uSGln
aGxpZ2h0ID0gbnVsbHB0cjsKLSAgICBtX2hvdmVyZWRUZWxlcGhvbmVOdW1iZXJEYXRhID0gbnVs
bHB0cjsKKyAgICBtX2FjdGl2ZUhpZ2hsaWdodCA9IG51bGxwdHI7CiB9CiAKLXZvaWQgU2Vydmlj
ZXNPdmVybGF5Q29udHJvbGxlcjo6ZXN0YWJsaXNoSG92ZXJlZFRlbGVwaG9uZUhpZ2hsaWdodChi
b29sJiBtb3VzZUlzT3ZlckJ1dHRvbikKK3ZvaWQgU2VydmljZXNPdmVybGF5Q29udHJvbGxlcjo6
cmVtb3ZlQWxsUG90ZW50aWFsSGlnaGxpZ2h0c09mVHlwZShIaWdobGlnaHQ6OlR5cGUgdHlwZSkK
IHsKLSAgICBBU1NFUlQobV9jdXJyZW50VGVsZXBob25lTnVtYmVyUmFuZ2VzLnNpemUoKSA9PSBt
X3RlbGVwaG9uZU51bWJlckhpZ2hsaWdodHMuc2l6ZSgpKTsKKyAgICBWZWN0b3I8UmVmUHRyPEhp
Z2hsaWdodD4+IGhpZ2hsaWdodHNUb1JlbW92ZTsKKyAgICBmb3IgKGF1dG8mIGhpZ2hsaWdodCA6
IG1fcG90ZW50aWFsSGlnaGxpZ2h0cykgeworICAgICAgICBpZiAoaGlnaGxpZ2h0LT50eXBlKCkg
PT0gdHlwZSkKKyAgICAgICAgICAgIGhpZ2hsaWdodHNUb1JlbW92ZS5hcHBlbmQoaGlnaGxpZ2h0
KTsKKyAgICB9CiAKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbV9jdXJyZW50VGVsZXBo
b25lTnVtYmVyUmFuZ2VzLnNpemUoKTsgKytpKSB7Ci0gICAgICAgIGlmICghbV90ZWxlcGhvbmVO
dW1iZXJIaWdobGlnaHRzW2ldKSB7Ci0gICAgICAgICAgICAvLyBGSVhNRTogVGhpcyB3aWxsIGNo
b2tlIGlmIHRoZSByYW5nZSB3cmFwcyBhcm91bmQgdGhlIGVkZ2Ugb2YgdGhlIHZpZXcuCi0gICAg
ICAgICAgICAvLyBXaGF0IHNob3VsZCB3ZSBkbyBpbiB0aGF0IGNhc2U/Ci0gICAgICAgICAgICBJ
bnRSZWN0IHJlY3QgPSB0ZXh0UXVhZHNUb0JvdW5kaW5nUmVjdEZvclJhbmdlKCptX2N1cnJlbnRU
ZWxlcGhvbmVOdW1iZXJSYW5nZXNbaV0pOwotCi0gICAgICAgICAgICAvLyBDb252ZXJ0IHRvIHRo
ZSBtYWluIGRvY3VtZW50J3MgY29vcmRpbmF0ZSBzcGFjZS4KLSAgICAgICAgICAgIC8vIEZJWE1F
OiBJdCdzIGEgbGl0dGxlIGNyYXp5IHRvIGNhbGwgY29udGVudHNUb1dpbmRvdyBhbmQgdGhlbiB3
aW5kb3dUb0NvbnRlbnRzIGluIG9yZGVyIHRvIGdldCB0aGUgcmlnaHQgY29vcmRpbmF0ZSBzcGFj
ZS4KLSAgICAgICAgICAgIC8vIFdlIHNob3VsZCBjb25zaWRlciBhZGRpbmcgY29udmVyc2lvbiBm
dW5jdGlvbnMgdG8gU2Nyb2xsVmlldyBmb3IgY29udGVudHNUb0RvY3VtZW50KCkuIFJpZ2h0IG5v
dywgY29udGVudHNUb1Jvb3RWaWV3KCkgaXMKLSAgICAgICAgICAgIC8vIG5vdCBlcXVpdmFsZW50
IHRvIHdoYXQgd2UgbmVlZCB3aGVuIHlvdSBoYXZlIGEgdG9wQ29udGVudEluc2V0IG9yIGEgaGVh
ZGVyIGJhbm5lci4KLSAgICAgICAgICAgIEZyYW1lVmlldyogdmlld0ZvclJhbmdlID0gbV9jdXJy
ZW50VGVsZXBob25lTnVtYmVyUmFuZ2VzW2ldLT5vd25lckRvY3VtZW50KCkudmlldygpOwotICAg
ICAgICAgICAgaWYgKCF2aWV3Rm9yUmFuZ2UpCi0gICAgICAgICAgICAgICAgY29udGludWU7Ci0g
ICAgICAgICAgICBGcmFtZVZpZXcmIG1haW5GcmFtZVZpZXcgPSAqbV93ZWJQYWdlLT5jb3JlUGFn
ZSgpLT5tYWluRnJhbWUoKS52aWV3KCk7Ci0gICAgICAgICAgICByZWN0LnNldExvY2F0aW9uKG1h
aW5GcmFtZVZpZXcud2luZG93VG9Db250ZW50cyh2aWV3Rm9yUmFuZ2UtPmNvbnRlbnRzVG9XaW5k
b3cocmVjdC5sb2NhdGlvbigpKSkpOworICAgIHdoaWxlICghaGlnaGxpZ2h0c1RvUmVtb3ZlLmlz
RW1wdHkoKSkKKyAgICAgICAgbV9wb3RlbnRpYWxIaWdobGlnaHRzLnJlbW92ZShoaWdobGlnaHRz
VG9SZW1vdmUudGFrZUxhc3QoKSk7Cit9CiAKLSAgICAgICAgICAgIENHUmVjdCBjZ1JlY3QgPSBy
ZWN0OwotICAgICAgICAgICAgbV90ZWxlcGhvbmVOdW1iZXJIaWdobGlnaHRzW2ldID0gYWRvcHRD
RihEREhpZ2hsaWdodENyZWF0ZVdpdGhSZWN0c0luVmlzaWJsZVJlY3RXaXRoU3R5bGVBbmREaXJl
Y3Rpb24obnVsbHB0ciwgJmNnUmVjdCwgMSwgbWFpbkZyYW1lVmlldy52aXNpYmxlQ29udGVudFJl
Y3QoKSwgRERIaWdobGlnaHRPdXRsaW5lV2l0aEFycm93LCBZRVMsIE5TV3JpdGluZ0RpcmVjdGlv
bk5hdHVyYWwsIE5PLCBZRVMpKTsKLSAgICAgICAgfQordm9pZCBTZXJ2aWNlc092ZXJsYXlDb250
cm9sbGVyOjpidWlsZFBob25lTnVtYmVySGlnaGxpZ2h0cygpCit7CisgICAgcmVtb3ZlQWxsUG90
ZW50aWFsSGlnaGxpZ2h0c09mVHlwZShIaWdobGlnaHQ6OlR5cGU6OlRlbGVwaG9uZU51bWJlcik7
CiAKLSAgICAgICAgaWYgKCFtb3VzZUlzT3ZlckhpZ2hsaWdodChtX3RlbGVwaG9uZU51bWJlckhp
Z2hsaWdodHNbaV0uZ2V0KCksIG1vdXNlSXNPdmVyQnV0dG9uKSkKKyAgICBmb3IgKHVuc2lnbmVk
IGkgPSAwOyBpIDwgbV9jdXJyZW50VGVsZXBob25lTnVtYmVyUmFuZ2VzLnNpemUoKTsgKytpKSB7
CisgICAgICAgIC8vIEZJWE1FOiBUaGlzIHdpbGwgY2hva2UgaWYgdGhlIHJhbmdlIHdyYXBzIGFy
b3VuZCB0aGUgZWRnZSBvZiB0aGUgdmlldy4KKyAgICAgICAgLy8gV2hhdCBzaG91bGQgd2UgZG8g
aW4gdGhhdCBjYXNlPworICAgICAgICBJbnRSZWN0IHJlY3QgPSB0ZXh0UXVhZHNUb0JvdW5kaW5n
UmVjdEZvclJhbmdlKCptX2N1cnJlbnRUZWxlcGhvbmVOdW1iZXJSYW5nZXNbaV0pOworCisgICAg
ICAgIC8vIENvbnZlcnQgdG8gdGhlIG1haW4gZG9jdW1lbnQncyBjb29yZGluYXRlIHNwYWNlLgor
ICAgICAgICAvLyBGSVhNRTogSXQncyBhIGxpdHRsZSBjcmF6eSB0byBjYWxsIGNvbnRlbnRzVG9X
aW5kb3cgYW5kIHRoZW4gd2luZG93VG9Db250ZW50cyBpbiBvcmRlciB0byBnZXQgdGhlIHJpZ2h0
IGNvb3JkaW5hdGUgc3BhY2UuCisgICAgICAgIC8vIFdlIHNob3VsZCBjb25zaWRlciBhZGRpbmcg
Y29udmVyc2lvbiBmdW5jdGlvbnMgdG8gU2Nyb2xsVmlldyBmb3IgY29udGVudHNUb0RvY3VtZW50
KCkuIFJpZ2h0IG5vdywgY29udGVudHNUb1Jvb3RWaWV3KCkgaXMKKyAgICAgICAgLy8gbm90IGVx
dWl2YWxlbnQgdG8gd2hhdCB3ZSBuZWVkIHdoZW4geW91IGhhdmUgYSB0b3BDb250ZW50SW5zZXQg
b3IgYSBoZWFkZXIgYmFubmVyLgorICAgICAgICBGcmFtZVZpZXcqIHZpZXdGb3JSYW5nZSA9IG1f
Y3VycmVudFRlbGVwaG9uZU51bWJlclJhbmdlc1tpXS0+b3duZXJEb2N1bWVudCgpLnZpZXcoKTsK
KyAgICAgICAgaWYgKCF2aWV3Rm9yUmFuZ2UpCiAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAg
ICAgRnJhbWVWaWV3JiBtYWluRnJhbWVWaWV3ID0gKm1fd2ViUGFnZS5jb3JlUGFnZSgpLT5tYWlu
RnJhbWUoKS52aWV3KCk7CisgICAgICAgIHJlY3Quc2V0TG9jYXRpb24obWFpbkZyYW1lVmlldy53
aW5kb3dUb0NvbnRlbnRzKHZpZXdGb3JSYW5nZS0+Y29udGVudHNUb1dpbmRvdyhyZWN0LmxvY2F0
aW9uKCkpKSk7CiAKLSAgICAgICAgaWYgKCFtX2hvdmVyZWRUZWxlcGhvbmVOdW1iZXJEYXRhIHx8
IG1faG92ZXJlZFRlbGVwaG9uZU51bWJlckRhdGEtPmhpZ2hsaWdodCAhPSBtX3RlbGVwaG9uZU51
bWJlckhpZ2hsaWdodHNbaV0pCi0gICAgICAgICAgICBtX2hvdmVyZWRUZWxlcGhvbmVOdW1iZXJE
YXRhID0gc3RkOjptYWtlX3VuaXF1ZTxUZWxlcGhvbmVOdW1iZXJEYXRhPihtX3RlbGVwaG9uZU51
bWJlckhpZ2hsaWdodHNbaV0sIG1fY3VycmVudFRlbGVwaG9uZU51bWJlclJhbmdlc1tpXSk7Cisg
ICAgICAgIENHUmVjdCBjZ1JlY3QgPSByZWN0OworICAgICAgICBSZXRhaW5QdHI8RERIaWdobGln
aHRSZWY+IGRkSGlnaGxpZ2h0ID0gYWRvcHRDRihEREhpZ2hsaWdodENyZWF0ZVdpdGhSZWN0c0lu
VmlzaWJsZVJlY3RXaXRoU3R5bGVBbmREaXJlY3Rpb24obnVsbHB0ciwgJmNnUmVjdCwgMSwgbWFp
bkZyYW1lVmlldy52aXNpYmxlQ29udGVudFJlY3QoKSwgRERIaWdobGlnaHRPdXRsaW5lV2l0aEFy
cm93LCBZRVMsIE5TV3JpdGluZ0RpcmVjdGlvbk5hdHVyYWwsIE5PLCBZRVMpKTsKIAotICAgICAg
ICBtX3NlcnZpY2VzT3ZlcmxheS0+c2V0TmVlZHNEaXNwbGF5KCk7Ci0gICAgICAgIHJldHVybjsK
KyAgICAgICAgbV9wb3RlbnRpYWxIaWdobGlnaHRzLmFkZChIaWdobGlnaHQ6OmNyZWF0ZUZvclRl
bGVwaG9uZU51bWJlcihkZEhpZ2hsaWdodCwgbV9jdXJyZW50VGVsZXBob25lTnVtYmVyUmFuZ2Vz
W2ldKSk7CiAgICAgfQogCi0gICAgY2xlYXJIb3ZlcmVkVGVsZXBob25lTnVtYmVySGlnaGxpZ2h0
KCk7Ci0gICAgbW91c2VJc092ZXJCdXR0b24gPSBmYWxzZTsKKyAgICBkaWRSZWJ1aWxkUG90ZW50
aWFsSGlnaGxpZ2h0cygpOwogfQogCi12b2lkIFNlcnZpY2VzT3ZlcmxheUNvbnRyb2xsZXI6Om1h
eWJlQ3JlYXRlU2VsZWN0aW9uSGlnaGxpZ2h0KCkKK3ZvaWQgU2VydmljZXNPdmVybGF5Q29udHJv
bGxlcjo6YnVpbGRTZWxlY3Rpb25IaWdobGlnaHQoKQogewotICAgIEFTU0VSVCghbV9zZWxlY3Rp
b25IaWdobGlnaHQpOwotICAgIEFTU0VSVChtX3NlcnZpY2VzT3ZlcmxheSk7CisgICAgcmVtb3Zl
QWxsUG90ZW50aWFsSGlnaGxpZ2h0c09mVHlwZShIaWdobGlnaHQ6OlR5cGU6OlNlbGVjdGlvbik7
CiAKICAgICBWZWN0b3I8Q0dSZWN0PiBjZ1JlY3RzOwogICAgIGNnUmVjdHMucmVzZXJ2ZUNhcGFj
aXR5KG1fY3VycmVudFNlbGVjdGlvblJlY3RzLnNpemUoKSk7CkBAIC00NjAsMTA1ICszNTgsMTYz
IEBAIHZvaWQgU2VydmljZXNPdmVybGF5Q29udHJvbGxlcjo6bWF5YmVDcmVhdGVTZWxlY3Rpb25I
aWdobGlnaHQoKQogICAgICAgICBjZ1JlY3RzLmFwcGVuZCgoQ0dSZWN0KXBpeGVsU25hcHBlZElu
dFJlY3QocmVjdCkpOwogCiAgICAgaWYgKCFjZ1JlY3RzLmlzRW1wdHkoKSkgewotICAgICAgICBD
R1JlY3QgdmlzaWJsZVJlY3QgPSBtX3dlYlBhZ2UtPmNvcmVQYWdlKCktPm1haW5GcmFtZSgpLnZp
ZXcoKS0+dmlzaWJsZUNvbnRlbnRSZWN0KCk7Ci0gICAgICAgIG1fc2VsZWN0aW9uSGlnaGxpZ2h0
ID0gYWRvcHRDRihEREhpZ2hsaWdodENyZWF0ZVdpdGhSZWN0c0luVmlzaWJsZVJlY3RXaXRoU3R5
bGVBbmREaXJlY3Rpb24obnVsbHB0ciwgY2dSZWN0cy5iZWdpbigpLCBjZ1JlY3RzLnNpemUoKSwg
dmlzaWJsZVJlY3QsIERESGlnaGxpZ2h0Tm9PdXRsaW5lV2l0aEFycm93LCBZRVMsIE5TV3JpdGlu
Z0RpcmVjdGlvbk5hdHVyYWwsIE5PLCBZRVMpKTsKKyAgICAgICAgQ0dSZWN0IHZpc2libGVSZWN0
ID0gbV93ZWJQYWdlLmNvcmVQYWdlKCktPm1haW5GcmFtZSgpLnZpZXcoKS0+dmlzaWJsZUNvbnRl
bnRSZWN0KCk7CisgICAgICAgIFJldGFpblB0cjxEREhpZ2hsaWdodFJlZj4gZGRIaWdobGlnaHQg
PSBhZG9wdENGKERESGlnaGxpZ2h0Q3JlYXRlV2l0aFJlY3RzSW5WaXNpYmxlUmVjdFdpdGhTdHls
ZUFuZERpcmVjdGlvbihudWxscHRyLCBjZ1JlY3RzLmJlZ2luKCksIGNnUmVjdHMuc2l6ZSgpLCB2
aXNpYmxlUmVjdCwgRERIaWdobGlnaHROb091dGxpbmVXaXRoQXJyb3csIFlFUywgTlNXcml0aW5n
RGlyZWN0aW9uTmF0dXJhbCwgTk8sIFlFUykpOworICAgICAgICAKKyAgICAgICAgbV9wb3RlbnRp
YWxIaWdobGlnaHRzLmFkZChIaWdobGlnaHQ6OmNyZWF0ZUZvclNlbGVjdGlvbihkZEhpZ2hsaWdo
dCkpOworICAgIH0KIAorICAgIGRpZFJlYnVpbGRQb3RlbnRpYWxIaWdobGlnaHRzKCk7Cit9CisK
K2Jvb2wgU2VydmljZXNPdmVybGF5Q29udHJvbGxlcjo6aGFzUmVsZXZhbnRTZWxlY3Rpb25TZXJ2
aWNlcygpCit7CisgICAgcmV0dXJuIChtX2lzVGV4dE9ubHkgJiYgV2ViUHJvY2Vzczo6c2hhcmVk
KCkuaGFzU2VsZWN0aW9uU2VydmljZXMoKSkgfHwgV2ViUHJvY2Vzczo6c2hhcmVkKCkuaGFzUmlj
aENvbnRlbnRTZXJ2aWNlcygpOworfQorCit2b2lkIFNlcnZpY2VzT3ZlcmxheUNvbnRyb2xsZXI6
OmRpZFJlYnVpbGRQb3RlbnRpYWxIaWdobGlnaHRzKCkKK3sKKyAgICBpZiAobV9wb3RlbnRpYWxI
aWdobGlnaHRzLmlzRW1wdHkoKSkgeworICAgICAgICBpZiAobV9zZXJ2aWNlc092ZXJsYXkpCisg
ICAgICAgICAgICBtX3dlYlBhZ2UudW5pbnN0YWxsUGFnZU92ZXJsYXkobV9zZXJ2aWNlc092ZXJs
YXkpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgaWYgKG1fY3VycmVudFRlbGVwaG9u
ZU51bWJlclJhbmdlcy5pc0VtcHR5KCkgJiYgIWhhc1JlbGV2YW50U2VsZWN0aW9uU2VydmljZXMo
KSkKKyAgICAgICAgcmV0dXJuOworCisgICAgY3JlYXRlT3ZlcmxheUlmTmVlZGVkKCk7Cit9CisK
K3ZvaWQgU2VydmljZXNPdmVybGF5Q29udHJvbGxlcjo6Y3JlYXRlT3ZlcmxheUlmTmVlZGVkKCkK
K3sKKyAgICBpZiAobV9zZXJ2aWNlc092ZXJsYXkpIHsKICAgICAgICAgbV9zZXJ2aWNlc092ZXJs
YXktPnNldE5lZWRzRGlzcGxheSgpOworICAgICAgICByZXR1cm47CiAgICAgfQorCisgICAgUmVm
UHRyPFBhZ2VPdmVybGF5PiBvdmVybGF5ID0gUGFnZU92ZXJsYXk6OmNyZWF0ZSh0aGlzLCBQYWdl
T3ZlcmxheTo6T3ZlcmxheVR5cGU6OkRvY3VtZW50KTsKKyAgICBtX3NlcnZpY2VzT3ZlcmxheSA9
IG92ZXJsYXkuZ2V0KCk7CisgICAgbV93ZWJQYWdlLmluc3RhbGxQYWdlT3ZlcmxheShvdmVybGF5
LnJlbGVhc2UoKSwgUGFnZU92ZXJsYXk6OkZhZGVNb2RlOjpEb05vdEZhZGUpOworICAgIG1fc2Vy
dmljZXNPdmVybGF5LT5zZXROZWVkc0Rpc3BsYXkoKTsKIH0KIAotYm9vbCBTZXJ2aWNlc092ZXJs
YXlDb250cm9sbGVyOjptb3VzZUV2ZW50KFBhZ2VPdmVybGF5KiwgY29uc3QgV2ViTW91c2VFdmVu
dCYgZXZlbnQpCitib29sIFNlcnZpY2VzT3ZlcmxheUNvbnRyb2xsZXI6OmhpZ2hsaWdodHNBcmVF
cXVpdmFsZW50KGNvbnN0IEhpZ2hsaWdodCogYSwgY29uc3QgSGlnaGxpZ2h0KiBiKQogewotICAg
IG1fbW91c2VQb3NpdGlvbiA9IG1fd2ViUGFnZS0+Y29yZVBhZ2UoKS0+bWFpbkZyYW1lKCkudmll
dygpLT5yb290Vmlld1RvQ29udGVudHMoZXZlbnQucG9zaXRpb24oKSk7CisgICAgaWYgKGEgPT0g
YikKKyAgICAgICAgcmV0dXJuIHRydWU7CiAKLSAgICBEREhpZ2hsaWdodFJlZiBvbGRIb3ZlcmVk
SGlnaGxpZ2h0ID0gbV9jdXJyZW50SG92ZXJlZEhpZ2hsaWdodC5nZXQoKTsKKyAgICBpZiAoIWEg
fHwgIWIpCisgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIGJvb2wgbW91c2VJc092ZXJCdXR0
b24gPSBmYWxzZTsKLSAgICBlc3RhYmxpc2hIb3ZlcmVkVGVsZXBob25lSGlnaGxpZ2h0KG1vdXNl
SXNPdmVyQnV0dG9uKTsKLSAgICBpZiAobV9ob3ZlcmVkVGVsZXBob25lTnVtYmVyRGF0YSkgewot
ICAgICAgICBBU1NFUlQobV9ob3ZlcmVkVGVsZXBob25lTnVtYmVyRGF0YS0+aGlnaGxpZ2h0KTsK
LSAgICAgICAgbV9jdXJyZW50SG92ZXJlZEhpZ2hsaWdodCA9IG1faG92ZXJlZFRlbGVwaG9uZU51
bWJlckRhdGEtPmhpZ2hsaWdodDsKLSAgICB9IGVsc2UgewotICAgICAgICBpZiAoIW1fc2VsZWN0
aW9uSGlnaGxpZ2h0KQotICAgICAgICAgICAgbWF5YmVDcmVhdGVTZWxlY3Rpb25IaWdobGlnaHQo
KTsKKyAgICBpZiAoYS0+dHlwZSgpID09IEhpZ2hsaWdodDo6VHlwZTo6VGVsZXBob25lTnVtYmVy
ICYmIGItPnR5cGUoKSA9PSBIaWdobGlnaHQ6OlR5cGU6OlRlbGVwaG9uZU51bWJlciAmJiBhcmVS
YW5nZXNFcXVhbChhLT5yYW5nZSgpLCBiLT5yYW5nZSgpKSkKKyAgICAgICAgcmV0dXJuIHRydWU7
CiAKLSAgICAgICAgaWYgKG1fc2VsZWN0aW9uSGlnaGxpZ2h0ICYmIG1vdXNlSXNPdmVySGlnaGxp
Z2h0KG1fc2VsZWN0aW9uSGlnaGxpZ2h0LmdldCgpLCBtb3VzZUlzT3ZlckJ1dHRvbikpCi0gICAg
ICAgICAgICBtX2N1cnJlbnRIb3ZlcmVkSGlnaGxpZ2h0ID0gbV9zZWxlY3Rpb25IaWdobGlnaHQ7
Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIG1fY3VycmVudEhvdmVyZWRIaWdobGlnaHQgPSBu
dWxscHRyOworICAgIHJldHVybiBmYWxzZTsKK30KKwordm9pZCBTZXJ2aWNlc092ZXJsYXlDb250
cm9sbGVyOjpkZXRlcm1pbmVBY3RpdmVIaWdobGlnaHQoYm9vbCYgbW91c2VJc092ZXJBY3RpdmVI
aWdobGlnaHRCdXR0b24pCit7CisgICAgbW91c2VJc092ZXJBY3RpdmVIaWdobGlnaHRCdXR0b24g
PSBmYWxzZTsKKworICAgIFJlZlB0cjxIaWdobGlnaHQ+IG9sZEFjdGl2ZUhpZ2hsaWdodCA9IG1f
YWN0aXZlSGlnaGxpZ2h0LnJlbGVhc2UoKTsKKworICAgIGZvciAoYXV0byYgaGlnaGxpZ2h0IDog
bV9wb3RlbnRpYWxIaWdobGlnaHRzKSB7CisgICAgICAgIGlmIChoaWdobGlnaHQtPnR5cGUoKSA9
PSBIaWdobGlnaHQ6OlR5cGU6OlNlbGVjdGlvbikgeworICAgICAgICAgICAgLy8gSWYgd2UndmUg
YWxyZWFkeSBmb3VuZCBhIG5ldyBhY3RpdmUgaGlnaGxpZ2h0LCBhbmQgaXQncworICAgICAgICAg
ICAgLy8gYSB0ZWxlcGhvbmUgbnVtYmVyIGhpZ2hsaWdodCwgcHJlZmVyIHRoYXQgb3ZlciB0aGlz
IHNlbGVjdGlvbiBoaWdobGlnaHQuCisgICAgICAgICAgICBpZiAobV9hY3RpdmVIaWdobGlnaHQg
JiYgbV9hY3RpdmVIaWdobGlnaHQtPnR5cGUoKSA9PSBIaWdobGlnaHQ6OlR5cGU6OlRlbGVwaG9u
ZU51bWJlcikKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKworICAgICAgICAgICAgLy8gSWYg
dGhpcyBoaWdobGlnaHQgaGFzIG5vIGNvbXBhdGlibGUgc2VydmljZXMsIGl0IGNhbid0IGJlIGFj
dGl2ZSwgdW5sZXNzIHdlIGhhdmUgdGVsZXBob25lIG51bWJlciBoaWdobGlnaHRzIHRvIHNob3cg
aW4gdGhlIGNvbWJpbmVkIG1lbnUuCisgICAgICAgICAgICBpZiAobV9jdXJyZW50VGVsZXBob25l
TnVtYmVyUmFuZ2VzLmlzRW1wdHkoKSAmJiAhaGFzUmVsZXZhbnRTZWxlY3Rpb25TZXJ2aWNlcygp
KQorICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICB9CisKKyAgICAgICAgLy8gSWYg
dGhpcyBoaWdobGlnaHQgaXNuJ3QgaG92ZXJlZCwgaXQgY2FuJ3QgYmUgYWN0aXZlLgorICAgICAg
ICBib29sIG1vdXNlSXNPdmVyQnV0dG9uOworICAgICAgICBpZiAoIW1vdXNlSXNPdmVySGlnaGxp
Z2h0KCpoaWdobGlnaHQsIG1vdXNlSXNPdmVyQnV0dG9uKSkKKyAgICAgICAgICAgIGNvbnRpbnVl
OworCisgICAgICAgIG1fYWN0aXZlSGlnaGxpZ2h0ID0gaGlnaGxpZ2h0OworICAgICAgICBtb3Vz
ZUlzT3ZlckFjdGl2ZUhpZ2hsaWdodEJ1dHRvbiA9IG1vdXNlSXNPdmVyQnV0dG9uOwogICAgIH0K
IAotICAgIGlmIChvbGRIb3ZlcmVkSGlnaGxpZ2h0ICE9IG1fY3VycmVudEhvdmVyZWRIaWdobGln
aHQpIHsKLSAgICAgICAgbV9sYXN0SG92ZXJlZEhpZ2hsaWdodENoYW5nZVRpbWUgPSBzdGQ6OmNo
cm9ubzo6c3RlYWR5X2Nsb2NrOjpub3coKTsKKyAgICBpZiAoIWhpZ2hsaWdodHNBcmVFcXVpdmFs
ZW50KG9sZEFjdGl2ZUhpZ2hsaWdodC5nZXQoKSwgbV9hY3RpdmVIaWdobGlnaHQuZ2V0KCkpKSB7
CisgICAgICAgIG1fbGFzdEFjdGl2ZUhpZ2hsaWdodENoYW5nZVRpbWUgPSBzdGQ6OmNocm9ubzo6
c3RlYWR5X2Nsb2NrOjpub3coKTsKICAgICAgICAgbV9zZXJ2aWNlc092ZXJsYXktPnNldE5lZWRz
RGlzcGxheSgpOworICAgICAgICBtX2N1cnJlbnRNb3VzZURvd25PbkJ1dHRvbkhpZ2hsaWdodCA9
IG51bGxwdHI7CiAgICAgfQorfQorCitib29sIFNlcnZpY2VzT3ZlcmxheUNvbnRyb2xsZXI6Om1v
dXNlRXZlbnQoUGFnZU92ZXJsYXkqLCBjb25zdCBXZWJNb3VzZUV2ZW50JiBldmVudCkKK3sKKyAg
ICBtX21vdXNlUG9zaXRpb24gPSBtX3dlYlBhZ2UuY29yZVBhZ2UoKS0+bWFpbkZyYW1lKCkudmll
dygpLT5yb290Vmlld1RvQ29udGVudHMoZXZlbnQucG9zaXRpb24oKSk7CisKKyAgICBib29sIG1v
dXNlSXNPdmVyQWN0aXZlSGlnaGxpZ2h0QnV0dG9uID0gZmFsc2U7CisgICAgZGV0ZXJtaW5lQWN0
aXZlSGlnaGxpZ2h0KG1vdXNlSXNPdmVyQWN0aXZlSGlnaGxpZ2h0QnV0dG9uKTsKIAotICAgIC8v
IElmIHRoaXMgZXZlbnQgaGFzIG5vdGhpbmcgdG8gZG8gd2l0aCB0aGUgbGVmdCBidXR0b24sIGl0
IGNsZWFycyB0aGUgY3VycmVudCBtb3VzZSBkb3duIHRyYWNraW5nIGFuZCB3ZSdyZSBkb25lIHBy
b2Nlc3NpbmcgaXQuCisgICAgLy8gQ2FuY2VsIHRoZSBwb3RlbnRpYWwgY2xpY2sgaWYgYW55IGJ1
dHRvbiBvdGhlciB0aGFuIHRoZSBsZWZ0IGJ1dHRvbiBjaGFuZ2VzIHN0YXRlLCBhbmQgaWdub3Jl
IHRoZSBldmVudC4KICAgICBpZiAoZXZlbnQuYnV0dG9uKCkgIT0gV2ViTW91c2VFdmVudDo6TGVm
dEJ1dHRvbikgewogICAgICAgICBtX2N1cnJlbnRNb3VzZURvd25PbkJ1dHRvbkhpZ2hsaWdodCA9
IG51bGxwdHI7CiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CiAKLSAgICAvLyBDaGVjayBh
bmQgc2VlIGlmIHRoZSBtb3VzZSB3ZW50IHVwIGFuZCB3ZSBoYXZlIGEgY3VycmVudCBtb3VzZSBk
b3duIGhpZ2hsaWdodCBidXR0b24uCisgICAgLy8gSWYgdGhlIG1vdXNlIGxpZnRlZCB3aGlsZSBz
dGlsbCBvdmVyIHRoZSBoaWdobGlnaHQgYnV0dG9uIHRoYXQgaXQgd2VudCBkb3duIG9uLCB0aGVu
IHRoYXQgaXMgYSBjbGljay4KICAgICBpZiAoZXZlbnQudHlwZSgpID09IFdlYkV2ZW50OjpNb3Vz
ZVVwKSB7Ci0gICAgICAgIFJldGFpblB0cjxEREhpZ2hsaWdodFJlZj4gbW91c2VEb3duSGlnaGxp
Z2h0ID0gV1RGOjptb3ZlKG1fY3VycmVudE1vdXNlRG93bk9uQnV0dG9uSGlnaGxpZ2h0KTsKKyAg
ICAgICAgUmVmUHRyPEhpZ2hsaWdodD4gbW91c2VEb3duSGlnaGxpZ2h0ID0gbV9jdXJyZW50TW91
c2VEb3duT25CdXR0b25IaWdobGlnaHQ7CisgICAgICAgIG1fY3VycmVudE1vdXNlRG93bk9uQnV0
dG9uSGlnaGxpZ2h0ID0gbnVsbHB0cjsKIAotICAgICAgICAvLyBJZiB0aGUgbW91c2UgbGlmdGVk
IHdoaWxlIHN0aWxsIG92ZXIgdGhlIGhpZ2hsaWdodCBidXR0b24gdGhhdCBpdCB3ZW50IGRvd24g
b24sIHRoZW4gdGhhdCBpcyBhIGNsaWNrLgotICAgICAgICBpZiAobW91c2VJc092ZXJCdXR0b24g
JiYgbW91c2VEb3duSGlnaGxpZ2h0ICYmIHJlbWFpbmluZ1RpbWVVbnRpbEhpZ2hsaWdodFNob3Vs
ZEJlU2hvd24oKSA8PSBzdGQ6OmNocm9ubzo6c3RlYWR5X2Nsb2NrOjpkdXJhdGlvbjo6emVybygp
KSB7Ci0gICAgICAgICAgICBoYW5kbGVDbGljayhtX21vdXNlUG9zaXRpb24sIG1vdXNlRG93bkhp
Z2hsaWdodC5nZXQoKSk7CisgICAgICAgIGlmIChtb3VzZUlzT3ZlckFjdGl2ZUhpZ2hsaWdodEJ1
dHRvbiAmJiBtb3VzZURvd25IaWdobGlnaHQgJiYgcmVtYWluaW5nVGltZVVudGlsSGlnaGxpZ2h0
U2hvdWxkQmVTaG93bigpIDw9IHN0ZDo6Y2hyb25vOjpzdGVhZHlfY2xvY2s6OmR1cmF0aW9uOjp6
ZXJvKCkpIHsKKyAgICAgICAgICAgIGhhbmRsZUNsaWNrKG1fbW91c2VQb3NpdGlvbiwgKm1vdXNl
RG93bkhpZ2hsaWdodCk7CiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgfQogICAg
ICAgICAKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KIAotICAgIC8vIENoZWNrIGFuZCBz
ZWUgaWYgdGhlIG1vdXNlIG1vdmVkIHdpdGhpbiB0aGUgY29uZmluZXMgb2YgdGhlIEREIGhpZ2hs
aWdodCBidXR0b24uCisgICAgLy8gSWYgdGhlIG1vdXNlIG1vdmVkIG91dHNpZGUgb2YgdGhlIGJ1
dHRvbiB0cmFja2luZyBhIHBvdGVudGlhbCBjbGljaywgc3RvcCB0cmFja2luZyB0aGUgY2xpY2su
CiAgICAgaWYgKGV2ZW50LnR5cGUoKSA9PSBXZWJFdmVudDo6TW91c2VNb3ZlKSB7Ci0gICAgICAg
IC8vIE1vdmluZyB3aXRoIHRoZSBtb3VzZSBidXR0b24gZG93biBpcyBva2F5IGFzIGxvbmcgYXMg
dGhlIG1vdXNlIG5ldmVyIGxlYXZlcyB0aGUgaGlnaGxpZ2h0IGJ1dHRvbi4KLSAgICAgICAgaWYg
KG1fY3VycmVudE1vdXNlRG93bk9uQnV0dG9uSGlnaGxpZ2h0ICYmIG1vdXNlSXNPdmVyQnV0dG9u
KQorICAgICAgICBpZiAobV9jdXJyZW50TW91c2VEb3duT25CdXR0b25IaWdobGlnaHQgJiYgbW91
c2VJc092ZXJBY3RpdmVIaWdobGlnaHRCdXR0b24pCiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsK
IAogICAgICAgICBtX2N1cnJlbnRNb3VzZURvd25PbkJ1dHRvbkhpZ2hsaWdodCA9IG51bGxwdHI7
CiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CiAKLSAgICAvLyBDaGVjayBhbmQgc2VlIGlm
IHRoZSBtb3VzZSB3ZW50IGRvd24gb3ZlciBhIEREIGhpZ2hsaWdodCBidXR0b24uCisgICAgLy8g
SWYgdGhlIG1vdXNlIHdlbnQgZG93biBvdmVyIHRoZSBhY3RpdmUgaGlnaGxpZ2h0J3MgYnV0dG9u
LCB0cmFjayB0aGlzIGFzIGEgcG90ZW50aWFsIGNsaWNrLgogICAgIGlmIChldmVudC50eXBlKCkg
PT0gV2ViRXZlbnQ6Ok1vdXNlRG93bikgewotICAgICAgICBpZiAobV9jdXJyZW50SG92ZXJlZEhp
Z2hsaWdodCAmJiBtb3VzZUlzT3ZlckJ1dHRvbikgewotICAgICAgICAgICAgbV9jdXJyZW50TW91
c2VEb3duT25CdXR0b25IaWdobGlnaHQgPSBtX2N1cnJlbnRIb3ZlcmVkSGlnaGxpZ2h0OworICAg
ICAgICBpZiAobV9hY3RpdmVIaWdobGlnaHQgJiYgbW91c2VJc092ZXJBY3RpdmVIaWdobGlnaHRC
dXR0b24pIHsKKyAgICAgICAgICAgIG1fY3VycmVudE1vdXNlRG93bk9uQnV0dG9uSGlnaGxpZ2h0
ID0gbV9hY3RpdmVIaWdobGlnaHQ7CiAgICAgICAgICAgICBtX3NlcnZpY2VzT3ZlcmxheS0+c2V0
TmVlZHNEaXNwbGF5KCk7CiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgfQogCiAg
ICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9Ci0gICAgICAgIAorCiAgICAgcmV0dXJuIGZhbHNl
OwogfQogCi12b2lkIFNlcnZpY2VzT3ZlcmxheUNvbnRyb2xsZXI6OmhhbmRsZUNsaWNrKGNvbnN0
IFdlYkNvcmU6OkludFBvaW50JiBjbGlja1BvaW50LCBEREhpZ2hsaWdodFJlZiBoaWdobGlnaHQp
Cit2b2lkIFNlcnZpY2VzT3ZlcmxheUNvbnRyb2xsZXI6OmhhbmRsZUNsaWNrKGNvbnN0IFdlYkNv
cmU6OkludFBvaW50JiBjbGlja1BvaW50LCBIaWdobGlnaHQmIGhpZ2hsaWdodCkKIHsKLSAgICBB
U1NFUlQoaGlnaGxpZ2h0KTsKLQotICAgIEZyYW1lVmlldyogZnJhbWVWaWV3ID0gbV93ZWJQYWdl
LT5tYWluRnJhbWVWaWV3KCk7CisgICAgRnJhbWVWaWV3KiBmcmFtZVZpZXcgPSBtX3dlYlBhZ2Uu
bWFpbkZyYW1lVmlldygpOwogICAgIGlmICghZnJhbWVWaWV3KQogICAgICAgICByZXR1cm47CiAK
ICAgICBJbnRQb2ludCB3aW5kb3dQb2ludCA9IGZyYW1lVmlldy0+Y29udGVudHNUb1dpbmRvdyhj
bGlja1BvaW50KTsKIAotICAgIGlmIChoaWdobGlnaHQgPT0gbV9zZWxlY3Rpb25IaWdobGlnaHQp
IHsKKyAgICBpZiAoaGlnaGxpZ2h0LnR5cGUoKSA9PSBIaWdobGlnaHQ6OlR5cGU6OlNlbGVjdGlv
bikgewogICAgICAgICBWZWN0b3I8U3RyaW5nPiBzZWxlY3RlZFRlbGVwaG9uZU51bWJlcnM7CiAg
ICAgICAgIHNlbGVjdGVkVGVsZXBob25lTnVtYmVycy5yZXNlcnZlQ2FwYWNpdHkobV9jdXJyZW50
VGVsZXBob25lTnVtYmVyUmFuZ2VzLnNpemUoKSk7CiAgICAgICAgIGZvciAoYXV0byYgcmFuZ2Ug
OiBtX2N1cnJlbnRUZWxlcGhvbmVOdW1iZXJSYW5nZXMpCiAgICAgICAgICAgICBzZWxlY3RlZFRl
bGVwaG9uZU51bWJlcnMuYXBwZW5kKHJhbmdlLT50ZXh0KCkpOwogCi0gICAgICAgIG1fd2ViUGFn
ZS0+aGFuZGxlU2VsZWN0aW9uU2VydmljZUNsaWNrKG1fd2ViUGFnZS0+Y29yZVBhZ2UoKS0+bWFp
bkZyYW1lKCkuc2VsZWN0aW9uKCksIHNlbGVjdGVkVGVsZXBob25lTnVtYmVycywgd2luZG93UG9p
bnQpOwotICAgIH0gZWxzZSBpZiAobV9ob3ZlcmVkVGVsZXBob25lTnVtYmVyRGF0YSAmJiBtX2hv
dmVyZWRUZWxlcGhvbmVOdW1iZXJEYXRhLT5oaWdobGlnaHQgPT0gaGlnaGxpZ2h0KQotICAgICAg
ICBtX3dlYlBhZ2UtPmhhbmRsZVRlbGVwaG9uZU51bWJlckNsaWNrKG1faG92ZXJlZFRlbGVwaG9u
ZU51bWJlckRhdGEtPnJhbmdlLT50ZXh0KCksIHdpbmRvd1BvaW50KTsKLSAgICBlbHNlCi0gICAg
ICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICBtX3dlYlBhZ2UuaGFuZGxlU2VsZWN0
aW9uU2VydmljZUNsaWNrKG1fd2ViUGFnZS5jb3JlUGFnZSgpLT5tYWluRnJhbWUoKS5zZWxlY3Rp
b24oKSwgc2VsZWN0ZWRUZWxlcGhvbmVOdW1iZXJzLCB3aW5kb3dQb2ludCk7CisgICAgfSBlbHNl
IGlmIChoaWdobGlnaHQudHlwZSgpID09IEhpZ2hsaWdodDo6VHlwZTo6VGVsZXBob25lTnVtYmVy
KQorICAgICAgICBtX3dlYlBhZ2UuaGFuZGxlVGVsZXBob25lTnVtYmVyQ2xpY2soaGlnaGxpZ2h0
LnJhbmdlKCktPnRleHQoKSwgd2luZG93UG9pbnQpOwogfQotICAgIAorCiB9IC8vIG5hbWVzcGFj
ZSBXZWJLaXQKIAogI2VuZGlmIC8vICNpZiBFTkFCTEUoU0VSVklDRV9DT05UUk9MUykgfHwgRU5B
QkxFKFRFTEVQSE9ORV9OVU1CRVJfREVURUNUSU9OKSAmJiBQTEFURk9STShNQUMpCg==
</data>
<flag name="review"
          id="260946"
          type_id="1"
          status="+"
          setter="beidson"
    />
          </attachment>
      

    </bug>

</bugzilla>