<?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>223396</bug_id>
          
          <creation_ts>2021-03-17 13:16:04 -0700</creation_ts>
          <short_desc>Web Inspector: Port grid overlay drawing to iOS</short_desc>
          <delta_ts>2021-03-22 17:05:52 -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>Web Inspector</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</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="Patrick Angle">pangle</reporter>
          <assigned_to name="Patrick Angle">pangle</assigned_to>
          <cc>annulen</cc>
    
    <cc>bburg</cc>
    
    <cc>ews-watchlist</cc>
    
    <cc>gyuyoung.kim</cc>
    
    <cc>hi</cc>
    
    <cc>inspector-bugzilla-changes</cc>
    
    <cc>joepeck</cc>
    
    <cc>pangle</cc>
    
    <cc>ryuan.choi</cc>
    
    <cc>sam</cc>
    
    <cc>sergio</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1740868</commentid>
    <comment_count>0</comment_count>
    <who name="Patrick Angle">pangle</who>
    <bug_when>2021-03-17 13:16:04 -0700</bug_when>
    <thetext>&lt;rdar://75333290&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1741912</commentid>
    <comment_count>1</comment_count>
      <attachid>423782</attachid>
    <who name="Patrick Angle">pangle</who>
    <bug_when>2021-03-19 14:54:01 -0700</bug_when>
    <thetext>Created attachment 423782
Patch v1.0</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1741938</commentid>
    <comment_count>2</comment_count>
      <attachid>423788</attachid>
    <who name="Patrick Angle">pangle</who>
    <bug_when>2021-03-19 15:37:36 -0700</bug_when>
    <thetext>Created attachment 423788
Patch v1.1 - Add FloatLine.h to Headers.cmake</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1742080</commentid>
    <comment_count>3</comment_count>
      <attachid>423788</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2021-03-21 10:37:44 -0700</bug_when>
    <thetext>Comment on attachment 423788
Patch v1.1 - Add FloatLine.h to Headers.cmake

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

&gt; Source/WebKit/Shared/WebCoreArgumentCoders.h:500
&gt; +template&lt;&gt; struct ArgumentCoder&lt;WebCore::InspectorOverlay::Highlight::GridHighlightOverlay&gt; {
&gt; +    static void encode(Encoder&amp;, const WebCore::InspectorOverlay::Highlight::GridHighlightOverlay&amp;);
&gt; +    static WARN_UNUSED_RETURN bool decode(Decoder&amp;, WebCore::InspectorOverlay::Highlight::GridHighlightOverlay&amp;);
&gt; +};
&gt; +
&gt; +template&lt;&gt; struct ArgumentCoder&lt;WebCore::InspectorOverlay::Highlight::GridHighlightOverlay::Label&gt; {
&gt; +    static void encode(Encoder&amp;, const WebCore::InspectorOverlay::Highlight::GridHighlightOverlay::Label&amp;);
&gt; +    static WARN_UNUSED_RETURN bool decode(Decoder&amp;, WebCore::InspectorOverlay::Highlight::GridHighlightOverlay::Label&amp;);
&gt; +};
&gt; +
&gt; +template&lt;&gt; struct ArgumentCoder&lt;WebCore::InspectorOverlay::Highlight::GridHighlightOverlay::Area&gt; {
&gt; +    static void encode(Encoder&amp;, const WebCore::InspectorOverlay::Highlight::GridHighlightOverlay::Area&amp;);
&gt; +    static WARN_UNUSED_RETURN bool decode(Decoder&amp;, WebCore::InspectorOverlay::Highlight::GridHighlightOverlay::Area&amp;);
&gt; +};

Rather than adding new coders here (which we are tying to avoid), please instead add the coders to the files these types are defined in using the generic coding (e.g. template&lt;class Encoder&gt;/template&lt;class Decoder&gt;) pattern.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1742101</commentid>
    <comment_count>4</comment_count>
      <attachid>423788</attachid>
    <who name="Patrick Angle">pangle</who>
    <bug_when>2021-03-21 15:17:54 -0700</bug_when>
    <thetext>Comment on attachment 423788
Patch v1.1 - Add FloatLine.h to Headers.cmake

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

&gt;&gt; Source/WebKit/Shared/WebCoreArgumentCoders.h:500
&gt;&gt; +};
&gt; 
&gt; Rather than adding new coders here (which we are tying to avoid), please instead add the coders to the files these types are defined in using the generic coding (e.g. template&lt;class Encoder&gt;/template&lt;class Decoder&gt;) pattern.

👍🏻</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1742107</commentid>
    <comment_count>5</comment_count>
      <attachid>423842</attachid>
    <who name="Patrick Angle">pangle</who>
    <bug_when>2021-03-21 16:48:57 -0700</bug_when>
    <thetext>Created attachment 423842
Patch v1.2 - Move new encoders/decoders to InspectorOverlay.h</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1742374</commentid>
    <comment_count>6</comment_count>
      <attachid>423842</attachid>
    <who name="Blaze Burg">bburg</who>
    <bug_when>2021-03-22 12:31:23 -0700</bug_when>
    <thetext>Comment on attachment 423842
Patch v1.2 - Move new encoders/decoders to InspectorOverlay.h

r=me

It&apos;s now possible to test the intermediate results of the grid overlay algorithm (HighlightConfig). If you can think of an area of this code that is likely to break, we can write a test for it. This would require helpers to dump the highlight data from WebCore Internals.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1742579</commentid>
    <comment_count>7</comment_count>
    <who name="EWS">ews-feeder</who>
    <bug_when>2021-03-22 17:05:49 -0700</bug_when>
    <thetext>Committed r274822: &lt;https://commits.webkit.org/r274822&gt;

All reviewed patches have been landed. Closing bug and clearing flags on attachment 423842.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>423782</attachid>
            <date>2021-03-19 14:54:01 -0700</date>
            <delta_ts>2021-03-19 15:57:03 -0700</delta_ts>
            <desc>Patch v1.0</desc>
            <filename>bug-223396-20210319145400.patch</filename>
            <type>text/plain</type>
            <size>49209</size>
            <attacher name="Patrick Angle">pangle</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjc0NTA4CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNGNjMjE2NDg3YjMyNjhi
NjAzOTQ5YzcxMjJhMzE1YzEyNzkwYWUxZi4uMzZjNjU5Y2NiNDJjMzkxNTExZDAyZDNhZmVkY2M4
MWQwZjAwYTIxOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDMxIEBACisyMDIxLTAzLTE5ICBQYXRy
aWNrIEFuZ2xlICA8cGFuZ2xlQGFwcGxlLmNvbT4KKworICAgICAgICBXZWIgSW5zcGVjdG9yOiBQ
b3J0IGdyaWQgb3ZlcmxheSBkcmF3aW5nIHRvIGlPUworICAgICAgICBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjIzMzk2CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9C
T0RZIChPT1BTISkuCisKKyAgICAgICAgRW5hYmxlIEdyaWQgT3ZlcmxheXMgdG8gYmUgZHJhd24g
b24gaU9TIGJlIGluY2x1ZGluZyBjb21wdXRlZCBvdmVybGF5IG9iamVjdHMgaW4gdGhlCisgICAg
ICAgIGBJbnNwZWN0b3JPdmVybGF5OjpIaWdobGlnaHRgLiBTb21lIHJlZmFjdG9yaW5nIHdhcyBh
bHNvIGRvbmUgdG8gcmVkdWNlIGNvZGUgZHVwbGljYXRpb24gaW4gdGhlIG5vcm1hbCBhbmQgaU9T
CisgICAgICAgIHBhdGhzLgorCisgICAgICAgICogV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5w
Ynhwcm9qOgorICAgICAgICAtIEZsb2F0TGluZSBzaG91bGQgYmUgYWNjZXNzaWJsZSBmcm9tIGBX
ZWJLaXQ6OipgCisgICAgICAgICogaW5zcGVjdG9yL0luc3BlY3Rvck92ZXJsYXkuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yT3ZlcmxheTo6cGFpbnQpOgorICAgICAgICAoV2ViQ29y
ZTo6SW5zcGVjdG9yT3ZlcmxheTo6Z2V0SGlnaGxpZ2h0KToKKyAgICAgICAgLSBBZGQgYEdyaWRI
aWdobGlnaHRPdmVybGF5YHMgdG8gdGhlIGhpZ2hsaWdodCBvYmplY3QgZm9yIGlPUy4KKyAgICAg
ICAgKFdlYkNvcmU6Okluc3BlY3Rvck92ZXJsYXk6OmRyYXdHcmlkT3ZlcmxheSk6CisgICAgICAg
IChXZWJDb3JlOjpidWlsZExhYmVsKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3Rvck92ZXJs
YXk6OmJ1aWxkR3JpZE92ZXJsYXkpOgorICAgICAgICAtIFJlZmFjdG9yZWQgYWN0dWFsIGRyYXdp
bmcgaW50byBhIHNlcGFyYXRlIG1ldGhvZCB0byByZWR1Y2UgdGhlIGFtb3VudCBvZiBjb2RlIGR1
cGxpY2F0aW9uIG5lZWRlZCBiZXR3ZWVuIHRoZQorICAgICAgICBub3JtYWwgcGF0aCBhbmQgdGhl
IGlPUyBwYXRoLgorICAgICAgICAqIGluc3BlY3Rvci9JbnNwZWN0b3JPdmVybGF5Lmg6CisgICAg
ICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvRmxvYXRMaW5lLmg6CisgICAgICAgIChXZWJDb3JlOjpG
bG9hdExpbmU6OmVuY29kZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpGbG9hdExpbmU6OmRl
Y29kZSk6CisgICAgICAgIC0gU3VwcG9ydCBlbmNvZGUvZGVjb2RlIGFzIHBhcnQgb2Ygc2VyaWFs
aXphdGlvbiBvZiBgSW5zcGVjdG9yT3ZlcmxheTo6SGlnaGxpZ2h0YAorCiAyMDIxLTAzLTE2ICBN
ZWdhbiBHYXJkbmVyICA8bWVnYW5fZ2FyZG5lckBhcHBsZS5jb20+CiAKICAgICAgICAgQXR0ZW1w
dCB0byByZXN0b3JlIGhpZ2hsaWdodHMgYWZ0ZXIgcGFpbnQgdG8gYWNjb3VudCBmb3IgbmV3bHkg
bG9hZGVkIGNvbnRlbnQuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxvZyBiL1Nv
dXJjZS9XZWJLaXQvQ2hhbmdlTG9nCmluZGV4IDllZTc5YjQwNjFiNmU1MWI2ZmMzYzdiMzlmNWUx
NGQ1NWU0NmQzNzUuLmMyNjBjMjE3NTRiN2YyYzdlMDE1ZWYyMDI5MmJjZDc4ZjUxMzllODEgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJLaXQvQ2hh
bmdlTG9nCkBAIC0xLDMgKzEsNDggQEAKKzIwMjEtMDMtMTkgIFBhdHJpY2sgQW5nbGUgIDxwYW5n
bGVAYXBwbGUuY29tPgorCisgICAgICAgIFdlYiBJbnNwZWN0b3I6IFBvcnQgZ3JpZCBvdmVybGF5
IGRyYXdpbmcgdG8gaU9TCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD0yMjMzOTYKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKwor
ICAgICAgICBQb3J0IGRyYXdpbmcgcm91dGluZXMgZnJvbSBgV2ViQ29yZTo6SW5zcGVjdG9yT3Zl
cmxheWAgdG8gdXNlIGBDQUxheWVyYHMgb24gaU9TIHRvIGVuYWJsZSBkcmF3aW5nIGdyaWQgb3Zl
cmxheXMKKyAgICAgICAgb24gaU9TLiBEcmF3aW5nIGxvZ2ljIGlzLCBhcyBtdWNoIGFzIHBvc3Np
YmxlLCBlcXVpdmFsZW50IHRvIHRoYXQgZGVmaW5lZCBpbiBgV2ViQ29yZTo6SW5zcGVjdG9yT3Zl
cmxheWAsIHdpdGgKKyAgICAgICAgY2hhbmdlcyB0byBmaXQgdGhlIENBTGF5ZXIgbW9kZWwuCisK
KyAgICAgICAgVGhlIGV4aXN0aW5nIGBJbnNwZWN0b3JPdmVybGF5OjpIaWdobGlnaHRgIGhhcyBi
ZWVuIGF1Z21lbnRlZCB0byBwcm92aWRlIGluZm9ybWF0aW9uIGFib3V0IHRoZSBncmlkIG92ZXJs
YXlzCisgICAgICAgIHRoYXQgc2hvdWxkIGJlIGRyYXduLgorCisgICAgICAgICogU2hhcmVkL1dl
YkNvcmVBcmd1bWVudENvZGVycy5jcHA6CisgICAgICAgIChJUEM6OkFyZ3VtZW50Q29kZXI8SW5z
cGVjdG9yT3ZlcmxheTo6SGlnaGxpZ2h0Pjo6ZW5jb2RlKToKKyAgICAgICAgKElQQzo6QXJndW1l
bnRDb2RlcjxJbnNwZWN0b3JPdmVybGF5OjpIaWdobGlnaHQ+OjpkZWNvZGUpOgorICAgICAgICAo
SVBDOjpBcmd1bWVudENvZGVyPEluc3BlY3Rvck92ZXJsYXk6OkhpZ2hsaWdodDo6R3JpZEhpZ2hs
aWdodE92ZXJsYXk+OjplbmNvZGUpOgorICAgICAgICAoSVBDOjpBcmd1bWVudENvZGVyPEluc3Bl
Y3Rvck92ZXJsYXk6OkhpZ2hsaWdodDo6R3JpZEhpZ2hsaWdodE92ZXJsYXk+OjpkZWNvZGUpOgor
ICAgICAgICAoSVBDOjpBcmd1bWVudENvZGVyPEluc3BlY3Rvck92ZXJsYXk6OkhpZ2hsaWdodDo6
R3JpZEhpZ2hsaWdodE92ZXJsYXk6OkxhYmVsPjo6ZW5jb2RlKToKKyAgICAgICAgKElQQzo6QXJn
dW1lbnRDb2RlcjxJbnNwZWN0b3JPdmVybGF5OjpIaWdobGlnaHQ6OkdyaWRIaWdobGlnaHRPdmVy
bGF5OjpMYWJlbD46OmRlY29kZSk6CisgICAgICAgIChJUEM6OkFyZ3VtZW50Q29kZXI8SW5zcGVj
dG9yT3ZlcmxheTo6SGlnaGxpZ2h0OjpHcmlkSGlnaGxpZ2h0T3ZlcmxheTo6QXJlYT46OmVuY29k
ZSk6CisgICAgICAgIChJUEM6OkFyZ3VtZW50Q29kZXI8SW5zcGVjdG9yT3ZlcmxheTo6SGlnaGxp
Z2h0OjpHcmlkSGlnaGxpZ2h0T3ZlcmxheTo6QXJlYT46OmRlY29kZSk6CisgICAgICAgICogU2hh
cmVkL1dlYkNvcmVBcmd1bWVudENvZGVycy5oOgorICAgICAgICAtIFByb3ZpZGUgZW5jb2Rpbmcg
YW5kIGRlY29kaW5nIGZvciBuZXcgSGlnaGxpZ2h0IHByb3BlcnRpZXMgcmVsYXRlZCB0byBHcmlk
SGlnaGxpZ2h0T3ZlcmxheS4KKyAgICAgICAgKiBVSVByb2Nlc3MvSW5zcGVjdG9yL2lvcy9XS0lu
c3BlY3RvckhpZ2hsaWdodFZpZXcuaDoKKyAgICAgICAgKiBVSVByb2Nlc3MvSW5zcGVjdG9yL2lv
cy9XS0luc3BlY3RvckhpZ2hsaWdodFZpZXcubW06CisgICAgICAgICgtW1dLSW5zcGVjdG9ySGln
aGxpZ2h0VmlldyBpbml0V2l0aEZyYW1lOl0pOgorICAgICAgICAoLVtXS0luc3BlY3RvckhpZ2hs
aWdodFZpZXcgX3JlbW92ZUFsbExheWVyc10pOgorICAgICAgICAoLVtXS0luc3BlY3RvckhpZ2hs
aWdodFZpZXcgX2NyZWF0ZUxheWVyczpdKToKKyAgICAgICAgKGxheWVyUGF0aCk6CisgICAgICAg
IC0gUGF0aCBzaG91bGQgYmUgY2xvc2VkIHNvIHRoYXQgb2JqZWN0cyBiZWluZyBzdHJva2VkIGFy
ZSBzdHJva2VkIG9uIGFsbCBlZGdlcy4KKyAgICAgICAgKC1bV0tJbnNwZWN0b3JIaWdobGlnaHRW
aWV3IF9sYXlvdXRGb3JOb2RlTGlzdEhpZ2hsaWdodDpdKToKKyAgICAgICAgKC1bV0tJbnNwZWN0
b3JIaWdobGlnaHRWaWV3IF9sYXlvdXRGb3JSZWN0c0hpZ2hsaWdodDpdKToKKyAgICAgICAgKC1b
V0tJbnNwZWN0b3JIaWdobGlnaHRWaWV3IF9jcmVhdGVHcmlkT3ZlcmxheUxheWVyczpzY2FsZTpd
KToKKyAgICAgICAgKGNyZWF0ZUxheW91dEhhdGNoaW5nTGF5ZXIpOgorICAgICAgICAoY3JlYXRl
TGF5b3V0TGFiZWxMYXllcik6CisgICAgICAgICgtW1dLSW5zcGVjdG9ySGlnaGxpZ2h0VmlldyBf
Y3JlYXRlR3JpZE92ZXJsYXlMYXllcjpzY2FsZTpdKToKKyAgICAgICAgLSBDcmVhdGUgbGF5ZXJz
IGZvciB0aGUgZ3JpZCBvdmVybGF5cy4KKyAgICAgICAgKC1bV0tJbnNwZWN0b3JIaWdobGlnaHRW
aWV3IHVwZGF0ZTpzY2FsZTpdKToKKyAgICAgICAgLSBPYnRhaW4gdGhlIHZpZXcgc2NhbGUgc28g
dGhhdCBgQ0FUZXh0TGF5ZXJgcyBjYW4gaGF2ZSB0aGUgY29ycmVjdCBjb250ZW50IHNjYWxlIHNl
dC4KKyAgICAgICAgKC1bV0tJbnNwZWN0b3JIaWdobGlnaHRWaWV3IHVwZGF0ZTpdKTogRGVsZXRl
ZC4KKyAgICAgICAgKiBVSVByb2Nlc3MvaW9zL1dLQ29udGVudFZpZXcubW06CisgICAgICAgICgt
W1dLQ29udGVudFZpZXcgX3Nob3dJbnNwZWN0b3JIaWdobGlnaHQ6XSk6CisKIDIwMjEtMDMtMTYg
IFBlciBBcm5lIFZvbGxhbiAgPHB2b2xsYW5AYXBwbGUuY29tPgogCiAgICAgICAgIFRoZSBXZWJD
b250ZW50IHByb2Nlc3MgY3Jhc2hlcyB3aGVuIGxhdW5jaGluZyBTYWZhcmkKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvaiBiL1NvdXJj
ZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagppbmRleCAxODJiOWE1
YTUwNGNhODc2OGM4ZmI5ZGI3OTUwYzIxYjIwY2NmNDc4Li41ODFiYzljNjFmMjNmNmUxZDNmNDk4
ZGY5M2U5MzU2YWM4YzE2MjRmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhj
b2RlcHJvai9wcm9qZWN0LnBieHByb2oKKysrIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29k
ZXByb2ovcHJvamVjdC5wYnhwcm9qCkBAIC04NjIsNyArODYyLDcgQEAKIAkJMkU0MzQ2NTUwRjU0
NkE4MjAwQjBGMUJBIC8qIFdvcmtlclRocmVhZC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gMkU0MzQ2NDMwRjU0NkE4MjAwQjBGMUJBIC8qIFdvcmtlclRo
cmVhZC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJ
CTJFNzU4NDFFMTI3NzlBREEwMDYyNjI4QiAvKiBGaWxlUmVhZGVyTG9hZGVyLmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyRTc1ODQxQjEyNzc5QURBMDA2
MjYyOEIgLyogRmlsZVJlYWRlckxvYWRlci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0g
KFByaXZhdGUsICk7IH07IH07CiAJCTJFNzU4NDFGMTI3NzlBREEwMDYyNjI4QiAvKiBGaWxlUmVh
ZGVyTG9hZGVyQ2xpZW50LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSAyRTc1ODQxQzEyNzc5QURBMDA2MjYyOEIgLyogRmlsZVJlYWRlckxvYWRlckNsaWVu
dC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07Ci0JCTJF
ODg4Q0FBMjVGNkE0MTEwMDU3OTE0QSAvKiBGbG9hdExpbmUuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDJFODg4Q0E4MjVGNkE0MTEwMDU3OTE0QSAvKiBG
bG9hdExpbmUuaCAqLzsgfTsKKwkJMkU4ODhDQUEyNUY2QTQxMTAwNTc5MTRBIC8qIEZsb2F0TGlu
ZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMkU4ODhD
QTgyNUY2QTQxMTAwNTc5MTRBIC8qIEZsb2F0TGluZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJV
VEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTJFOTRGNDNDMTE5MjA3REEwMEI3Rjc1RCAvKiBK
U0ZpbGVSZWFkZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDJFOTRGNDNBMTE5MjA3REEwMEI3Rjc1RCAvKiBKU0ZpbGVSZWFkZXIuaCAqLzsgfTsKIAkJ
MkU5QjVEOEYxQjY2QTk0RTAwOEM2QTI0IC8qIFdoZWVsRXZlbnREZWx0YUZpbHRlck1hYy5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMkU5QjVEOEUxQjY2
QTk0RTAwOEM2QTI0IC8qIFdoZWVsRXZlbnREZWx0YUZpbHRlck1hYy5oICovOyBzZXR0aW5ncyA9
IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTJFQTc2ODA0MEZFNzEyNjQwMEFC
OUM4QSAvKiBXb3JrZXJTY3JpcHRMb2FkZXJDbGllbnQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDJFQTc2ODAzMEZFNzEyNjQwMEFCOUM4QSAvKiBXb3Jr
ZXJTY3JpcHRMb2FkZXJDbGllbnQuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2
YXRlLCApOyB9OyB9OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3Bl
Y3Rvck92ZXJsYXkuY3BwIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3Rvck92ZXJs
YXkuY3BwCmluZGV4IDkyYWZmNTNjODZhMGYwODcyMjVkYjYyMDc4MDZkMDM5ZDRiZWY4ZjAuLjIw
OGE4YTkzMGUzNDk1YTM3NzhhNWIzODEwY2M2Mjc1ODQwNGU5MzQgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JPdmVybGF5LmNwcAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yT3ZlcmxheS5jcHAKQEAgLTQyNyw4ICs0MjcsMTAgQEAg
dm9pZCBJbnNwZWN0b3JPdmVybGF5OjpwYWludChHcmFwaGljc0NvbnRleHQmIGNvbnRleHQpCiAg
ICAgICAgIHJ1bGVyRXhjbHVzaW9uLnRpdGxlUGF0aCA9IG5vZGVSdWxlckV4Y2x1c2lvbi50aXRs
ZVBhdGg7CiAgICAgfQogCi0gICAgZm9yIChjb25zdCBJbnNwZWN0b3JPdmVybGF5OjpHcmlkJiBn
cmlkT3ZlcmxheSA6IG1fYWN0aXZlR3JpZE92ZXJsYXlzKQotICAgICAgICBkcmF3R3JpZE92ZXJs
YXkoY29udGV4dCwgZ3JpZE92ZXJsYXkpOworICAgIGZvciAoY29uc3QgSW5zcGVjdG9yT3Zlcmxh
eTo6R3JpZCYgZ3JpZE92ZXJsYXkgOiBtX2FjdGl2ZUdyaWRPdmVybGF5cykgeworICAgICAgICBp
ZiAoYXV0byBncmlkSGlnaGxpZ2h0T3ZlcmxheSA9IGJ1aWxkR3JpZE92ZXJsYXkoZ3JpZE92ZXJs
YXkpKQorICAgICAgICAgICAgZHJhd0dyaWRPdmVybGF5KGNvbnRleHQsICpncmlkSGlnaGxpZ2h0
T3ZlcmxheSk7CisgICAgfQogCiAgICAgaWYgKCFtX3BhaW50UmVjdHMuaXNFbXB0eSgpKQogICAg
ICAgICBkcmF3UGFpbnRSZWN0cyhjb250ZXh0LCBtX3BhaW50UmVjdHMpOwpAQCAtNDM3LDEyICs0
MzksMTIgQEAgdm9pZCBJbnNwZWN0b3JPdmVybGF5OjpwYWludChHcmFwaGljc0NvbnRleHQmIGNv
bnRleHQpCiAgICAgICAgIGRyYXdSdWxlcnMoY29udGV4dCwgcnVsZXJFeGNsdXNpb24pOwogfQog
Ci12b2lkIEluc3BlY3Rvck92ZXJsYXk6OmdldEhpZ2hsaWdodChJbnNwZWN0b3JPdmVybGF5OjpI
aWdobGlnaHQmIGhpZ2hsaWdodCwgSW5zcGVjdG9yT3ZlcmxheTo6Q29vcmRpbmF0ZVN5c3RlbSBj
b29yZGluYXRlU3lzdGVtKSBjb25zdAordm9pZCBJbnNwZWN0b3JPdmVybGF5OjpnZXRIaWdobGln
aHQoSW5zcGVjdG9yT3ZlcmxheTo6SGlnaGxpZ2h0JiBoaWdobGlnaHQsIEluc3BlY3Rvck92ZXJs
YXk6OkNvb3JkaW5hdGVTeXN0ZW0gY29vcmRpbmF0ZVN5c3RlbSkKIHsKLSAgICBpZiAoIW1faGln
aGxpZ2h0Tm9kZSAmJiAhbV9oaWdobGlnaHRRdWFkICYmICFtX2hpZ2hsaWdodE5vZGVMaXN0KQor
ICAgIGlmICghbV9oaWdobGlnaHROb2RlICYmICFtX2hpZ2hsaWdodFF1YWQgJiYgIW1faGlnaGxp
Z2h0Tm9kZUxpc3QgJiYgIW1fYWN0aXZlR3JpZE92ZXJsYXlzLnNpemUoKSkKICAgICAgICAgcmV0
dXJuOwogCi0gICAgaGlnaGxpZ2h0LnR5cGUgPSBJbnNwZWN0b3JPdmVybGF5OjpIaWdobGlnaHQ6
OlR5cGU6OlJlY3RzOworICAgIGhpZ2hsaWdodC50eXBlID0gSW5zcGVjdG9yT3ZlcmxheTo6SGln
aGxpZ2h0OjpUeXBlOjpOb25lOwogICAgIGlmIChtX2hpZ2hsaWdodE5vZGUpCiAgICAgICAgIGJ1
aWxkTm9kZUhpZ2hsaWdodCgqbV9oaWdobGlnaHROb2RlLCBtX25vZGVIaWdobGlnaHRDb25maWcs
IGhpZ2hsaWdodCwgY29vcmRpbmF0ZVN5c3RlbSk7CiAgICAgZWxzZSBpZiAobV9oaWdobGlnaHRO
b2RlTGlzdCkgewpAQCAtNDU0LDggKzQ1NiwxNSBAQCB2b2lkIEluc3BlY3Rvck92ZXJsYXk6Omdl
dEhpZ2hsaWdodChJbnNwZWN0b3JPdmVybGF5OjpIaWdobGlnaHQmIGhpZ2hsaWdodCwgSW5zcAog
ICAgICAgICAgICAgICAgIGhpZ2hsaWdodC5xdWFkcy5hcHBlbmRWZWN0b3Iobm9kZUhpZ2hsaWdo
dC5xdWFkcyk7CiAgICAgICAgIH0KICAgICAgICAgaGlnaGxpZ2h0LnR5cGUgPSBJbnNwZWN0b3JP
dmVybGF5OjpIaWdobGlnaHQ6OlR5cGU6Ok5vZGVMaXN0OwotICAgIH0gZWxzZQorICAgIH0gZWxz
ZSBpZiAobV9oaWdobGlnaHRRdWFkKSB7CisgICAgICAgIGhpZ2hsaWdodC50eXBlID0gSW5zcGVj
dG9yT3ZlcmxheTo6SGlnaGxpZ2h0OjpUeXBlOjpSZWN0czsKICAgICAgICAgYnVpbGRRdWFkSGln
aGxpZ2h0KCptX2hpZ2hsaWdodFF1YWQsIG1fcXVhZEhpZ2hsaWdodENvbmZpZywgaGlnaGxpZ2h0
KTsKKyAgICB9CisgICAgY29uc3RleHByIGJvb2wgb2Zmc2V0Qm91bmRzQnlTY3JvbGwgPSB0cnVl
OworICAgIGZvciAoY29uc3QgSW5zcGVjdG9yT3ZlcmxheTo6R3JpZCYgZ3JpZE92ZXJsYXkgOiBt
X2FjdGl2ZUdyaWRPdmVybGF5cykgeworICAgICAgICBpZiAoYXV0byBncmlkSGlnaGxpZ2h0T3Zl
cmxheSA9IGJ1aWxkR3JpZE92ZXJsYXkoZ3JpZE92ZXJsYXksIG9mZnNldEJvdW5kc0J5U2Nyb2xs
KSkKKyAgICAgICAgICAgIGhpZ2hsaWdodC5ncmlkSGlnaGxpZ2h0T3ZlcmxheXMuYXBwZW5kKCpn
cmlkSGlnaGxpZ2h0T3ZlcmxheSk7CisgICAgfQogfQogCiB2b2lkIEluc3BlY3Rvck92ZXJsYXk6
OmhpZGVIaWdobGlnaHQoKQpAQCAtMTI4MSw2ICsxMjkwLDM3IEBAIHZvaWQgSW5zcGVjdG9yT3Zl
cmxheTo6ZHJhd0xheW91dExhYmVsKEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCwgU3RyaW5nIGxh
YmVsLCBGCiAgICAgY29udGV4dC5kcmF3VGV4dChmb250LCBUZXh0UnVuKGxhYmVsKSwgdGV4dFBv
c2l0aW9uKTsKIH0KIAordm9pZCBJbnNwZWN0b3JPdmVybGF5OjpkcmF3R3JpZE92ZXJsYXkoR3Jh
cGhpY3NDb250ZXh0JiBjb250ZXh0LCBjb25zdCBJbnNwZWN0b3JPdmVybGF5OjpIaWdobGlnaHQ6
OkdyaWRIaWdobGlnaHRPdmVybGF5JiBncmlkT3ZlcmxheSkKK3sKKyAgICBjb25zdGV4cHIgYXV0
byB0cmFuc2x1Y2VudExhYmVsQmFja2dyb3VuZENvbG9yID0gQ29sb3I6OndoaXRlLmNvbG9yV2l0
aEFscGhhQnl0ZSgxNTMpOworCisgICAgR3JhcGhpY3NDb250ZXh0U3RhdGVTYXZlciBzYXZlcihj
b250ZXh0KTsKKyAgICBjb250ZXh0LnNldFN0cm9rZVRoaWNrbmVzcygxKTsKKyAgICBjb250ZXh0
LnNldFN0cm9rZUNvbG9yKGdyaWRPdmVybGF5LmNvbG9yKTsKKworICAgIFBhdGggZ3JpZExpbmVz
UGF0aDsKKyAgICBmb3IgKGF1dG8gZ3JpZExpbmUgOiBncmlkT3ZlcmxheS5ncmlkTGluZXMpIHsK
KyAgICAgICAgZ3JpZExpbmVzUGF0aC5tb3ZlVG8oZ3JpZExpbmUuc3RhcnQoKSk7CisgICAgICAg
IGdyaWRMaW5lc1BhdGguYWRkTGluZVRvKGdyaWRMaW5lLmVuZCgpKTsKKyAgICB9CisgICAgY29u
dGV4dC5zdHJva2VQYXRoKGdyaWRMaW5lc1BhdGgpOworCisgICAgZm9yIChhdXRvIGdhcFF1YWQg
OiBncmlkT3ZlcmxheS5nYXBzKQorICAgICAgICBkcmF3TGF5b3V0SGF0Y2hpbmcoY29udGV4dCwg
Z2FwUXVhZCk7CisKKyAgICBjb250ZXh0LnNldFN0cm9rZVRoaWNrbmVzcygzKTsKKyAgICBmb3Ig
KGF1dG8gYXJlYSA6IGdyaWRPdmVybGF5LmFyZWFzKQorICAgICAgICBjb250ZXh0LnN0cm9rZVBh
dGgocXVhZFRvUGF0aChhcmVhLnF1YWQpKTsKKworICAgIC8vIERyYXcgbGFiZWxzIG9uIHRvcCBv
ZiBhbGwgb3RoZXIgbGluZXMuCisgICAgY29udGV4dC5zZXRTdHJva2VUaGlja25lc3MoMSk7Cisg
ICAgZm9yIChhdXRvIGFyZWEgOiBncmlkT3ZlcmxheS5hcmVhcykKKyAgICAgICAgZHJhd0xheW91
dExhYmVsKGNvbnRleHQsIGFyZWEubmFtZSwgYXJlYS5xdWFkLnAxKCksIExhYmVsQXJyb3dEaXJl
Y3Rpb246Ok5vbmUsIHRyYW5zbHVjZW50TGFiZWxCYWNrZ3JvdW5kQ29sb3IsIGFyZWEucXVhZC5i
b3VuZGluZ0JveCgpLndpZHRoKCkpOworCisgICAgZm9yIChhdXRvIGxhYmVsIDogZ3JpZE92ZXJs
YXkubGFiZWxzKQorICAgICAgICBkcmF3TGF5b3V0TGFiZWwoY29udGV4dCwgbGFiZWwudGV4dCwg
bGFiZWwubG9jYXRpb24sIGxhYmVsLmFycm93RGlyZWN0aW9uLCBsYWJlbC5iYWNrZ3JvdW5kQ29s
b3IpOworfQorCiBzdGF0aWMgVmVjdG9yPFN0cmluZz4gYXV0aG9yZWRHcmlkVHJhY2tTaXplcyhO
b2RlKiBub2RlLCBHcmlkVHJhY2tTaXppbmdEaXJlY3Rpb24gZGlyZWN0aW9uLCB1bnNpZ25lZCBl
eHBlY3RlZFRyYWNrQ291bnQpCiB7CiAgICAgaWYgKCFpczxFbGVtZW50Pihub2RlKSkKQEAgLTEz
NzksMTQgKzE0MTksMjQgQEAgc3RhdGljIE9yZGVyZWROYW1lZEdyaWRMaW5lc01hcCBncmlkTGlu
ZU5hbWVzKGNvbnN0IFJlbmRlclN0eWxlKiByZW5kZXJTdHlsZSwgR3IKICAgICByZXR1cm4gY29t
YmluZWRHcmlkTGluZU5hbWVzOwogfQogCi12b2lkIEluc3BlY3Rvck92ZXJsYXk6OmRyYXdHcmlk
T3ZlcmxheShHcmFwaGljc0NvbnRleHQmIGNvbnRleHQsIGNvbnN0IEluc3BlY3Rvck92ZXJsYXk6
OkdyaWQmIGdyaWRPdmVybGF5KQorc3RhdGljIEluc3BlY3Rvck92ZXJsYXk6OkhpZ2hsaWdodDo6
R3JpZEhpZ2hsaWdodE92ZXJsYXk6OkxhYmVsIGJ1aWxkTGFiZWwoU3RyaW5nIHRleHQsIEZsb2F0
UG9pbnQgbG9jYXRpb24sIENvbG9yIGJhY2tncm91bmRDb2xvciwgSW5zcGVjdG9yT3ZlcmxheTo6
TGFiZWxBcnJvd0RpcmVjdGlvbiBhcnJvd0RpcmVjdGlvbikKK3sKKyAgICBJbnNwZWN0b3JPdmVy
bGF5OjpIaWdobGlnaHQ6OkdyaWRIaWdobGlnaHRPdmVybGF5OjpMYWJlbCBsYWJlbDsKKyAgICBs
YWJlbC50ZXh0ID0gdGV4dDsKKyAgICBsYWJlbC5sb2NhdGlvbiA9IGxvY2F0aW9uOworICAgIGxh
YmVsLmJhY2tncm91bmRDb2xvciA9IGJhY2tncm91bmRDb2xvcjsKKyAgICBsYWJlbC5hcnJvd0Rp
cmVjdGlvbiA9IGFycm93RGlyZWN0aW9uOworICAgIHJldHVybiBsYWJlbDsKK30KKworT3B0aW9u
YWw8SW5zcGVjdG9yT3ZlcmxheTo6SGlnaGxpZ2h0OjpHcmlkSGlnaGxpZ2h0T3ZlcmxheT4gSW5z
cGVjdG9yT3ZlcmxheTo6YnVpbGRHcmlkT3ZlcmxheShjb25zdCBJbnNwZWN0b3JPdmVybGF5OjpH
cmlkJiBncmlkT3ZlcmxheSwgYm9vbCBvZmZzZXRCb3VuZHNCeVNjcm9sbCkKIHsKICAgICAvLyBJ
ZiB0aGUgbm9kZSBXZWFrUHRyIGhhcyBiZWVuIGNsZWFyZWQsIHRoZW4gdGhlIG5vZGUgaXMgZ29u
ZSBhbmQgdGhlcmUncyBub3RoaW5nIHRvIGRyYXcuCiAgICAgaWYgKCFncmlkT3ZlcmxheS5ncmlk
Tm9kZSkgewogICAgICAgICBtX2FjdGl2ZUdyaWRPdmVybGF5cy5yZW1vdmVBbGxNYXRjaGluZyhb
Jl0gKGNvbnN0IEluc3BlY3Rvck92ZXJsYXk6OkdyaWQmIGdyaWRPdmVybGF5KSB7CiAgICAgICAg
ICAgICByZXR1cm4gIWdyaWRPdmVybGF5LmdyaWROb2RlOwogICAgICAgICB9KTsKLSAgICAgICAg
cmV0dXJuOworICAgICAgICByZXR1cm4geyB9OwogICAgIH0KICAgICAKICAgICAvLyBBbHdheXMg
cmUtY2hlY2sgYmVjYXVzZSB0aGUgbm9kZSdzIHJlbmRlcmVyIG1heSBoYXZlIGNoYW5nZWQgc2lu
Y2UgYmVpbmcgYWRkZWQuCkBAIC0xMzk1LDIxICsxNDQ1LDIzIEBAIHZvaWQgSW5zcGVjdG9yT3Zl
cmxheTo6ZHJhd0dyaWRPdmVybGF5KEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCwgY29uc3QgSW5z
cGVjdG9yCiAgICAgYXV0byByZW5kZXJlciA9IG5vZGUtPnJlbmRlcmVyKCk7CiAgICAgaWYgKCFp
czxSZW5kZXJHcmlkPihyZW5kZXJlcikpIHsKICAgICAgICAgcmVtb3ZlR3JpZE92ZXJsYXlGb3JO
b2RlKCpub2RlKTsKLSAgICAgICAgcmV0dXJuOworICAgICAgICByZXR1cm4geyB9OwogICAgIH0K
LSAgICAKKwogICAgIGNvbnN0ZXhwciBhdXRvIHRyYW5zbHVjZW50TGFiZWxCYWNrZ3JvdW5kQ29s
b3IgPSBDb2xvcjo6d2hpdGUuY29sb3JXaXRoQWxwaGFCeXRlKDE1Myk7CiAgICAgCiAgICAgRnJh
bWVWaWV3KiBwYWdlVmlldyA9IG1fcGFnZS5tYWluRnJhbWUoKS52aWV3KCk7CiAgICAgaWYgKCFw
YWdlVmlldykKLSAgICAgICAgcmV0dXJuOworICAgICAgICByZXR1cm4geyB9OwogICAgIEZsb2F0
UmVjdCB2aWV3cG9ydEJvdW5kcyA9IHsgeyAwLCAwIH0sIHBhZ2VWaWV3LT5zaXplRm9yVmlzaWJs
ZUNvbnRlbnQoKSB9OworICAgIGlmIChvZmZzZXRCb3VuZHNCeVNjcm9sbCkKKyAgICAgICAgdmll
d3BvcnRCb3VuZHMuc2V0TG9jYXRpb24ocGFnZVZpZXctPnNjcm9sbFBvc2l0aW9uKCkpOwogICAg
IAogICAgIGF1dG8mIHJlbmRlckdyaWQgPSAqZG93bmNhc3Q8UmVuZGVyR3JpZD4ocmVuZGVyZXIp
OwogICAgIGF1dG8gY29sdW1uUG9zaXRpb25zID0gcmVuZGVyR3JpZC5jb2x1bW5Qb3NpdGlvbnMo
KTsKICAgICBhdXRvIHJvd1Bvc2l0aW9ucyA9IHJlbmRlckdyaWQucm93UG9zaXRpb25zKCk7CiAg
ICAgaWYgKCFjb2x1bW5Qb3NpdGlvbnMuc2l6ZSgpIHx8ICFyb3dQb3NpdGlvbnMuc2l6ZSgpKQot
ICAgICAgICByZXR1cm47CisgICAgICAgIHJldHVybiB7IH07CiAgICAgCiAgICAgZmxvYXQgZ3Jp
ZFN0YXJ0WCA9IGNvbHVtblBvc2l0aW9uc1swXTsKICAgICBmbG9hdCBncmlkRW5kWCA9IGNvbHVt
blBvc2l0aW9uc1tjb2x1bW5Qb3NpdGlvbnMuc2l6ZSgpIC0gMV07CkBAIC0xNDE4LDcgKzE0NzAs
NyBAQCB2b2lkIEluc3BlY3Rvck92ZXJsYXk6OmRyYXdHcmlkT3ZlcmxheShHcmFwaGljc0NvbnRl
eHQmIGNvbnRleHQsIGNvbnN0IEluc3BlY3RvcgogCiAgICAgRnJhbWUqIGNvbnRhaW5pbmdGcmFt
ZSA9IG5vZGUtPmRvY3VtZW50KCkuZnJhbWUoKTsKICAgICBpZiAoIWNvbnRhaW5pbmdGcmFtZSkK
LSAgICAgICAgcmV0dXJuOworICAgICAgICByZXR1cm4geyB9OwogICAgIEZyYW1lVmlldyogY29u
dGFpbmluZ1ZpZXcgPSBjb250YWluaW5nRnJhbWUtPnZpZXcoKTsKIAogICAgIGF1dG8gY29sdW1u
TGluZUF0ID0gWyZdKGludCB4KSAtPiBGbG9hdExpbmUgewpAQCAtMTQzMywxMCArMTQ4NSw5IEBA
IHZvaWQgSW5zcGVjdG9yT3ZlcmxheTo6ZHJhd0dyaWRPdmVybGF5KEdyYXBoaWNzQ29udGV4dCYg
Y29udGV4dCwgY29uc3QgSW5zcGVjdG9yCiAgICAgICAgICAgICBsb2NhbFBvaW50VG9Sb290UG9p
bnQoY29udGFpbmluZ1ZpZXcsIHJlbmRlckdyaWQubG9jYWxUb0NvbnRhaW5lclBvaW50KEZsb2F0
UG9pbnQoZ3JpZEVuZFgsIHkpLCBudWxscHRyKSksCiAgICAgICAgIH07CiAgICAgfTsKLSAgICAK
LSAgICBHcmFwaGljc0NvbnRleHRTdGF0ZVNhdmVyIHNhdmVyKGNvbnRleHQpOwotICAgIGNvbnRl
eHQuc2V0U3Ryb2tlVGhpY2tuZXNzKDEpOwotICAgIGNvbnRleHQuc2V0U3Ryb2tlQ29sb3IoZ3Jp
ZE92ZXJsYXkuY29uZmlnLmdyaWRDb2xvcik7CisKKyAgICBJbnNwZWN0b3JPdmVybGF5OjpIaWdo
bGlnaHQ6OkdyaWRIaWdobGlnaHRPdmVybGF5IGdyaWRIaWdobGlnaHRPdmVybGF5OworICAgIGdy
aWRIaWdobGlnaHRPdmVybGF5LmNvbG9yID0gZ3JpZE92ZXJsYXkuY29uZmlnLmdyaWRDb2xvcjsK
IAogICAgIC8vIERyYXcgY29sdW1ucyBhbmQgcm93cy4KICAgICBhdXRvIGNvbHVtbldpZHRocyA9
IHJlbmRlckdyaWQudHJhY2tTaXplc0ZvckNvbXB1dGVkU3R5bGUoR3JpZFRyYWNrU2l6aW5nRGly
ZWN0aW9uOjpGb3JDb2x1bW5zKTsKQEAgLTE0NDYsMTkgKzE0OTcsMTYgQEAgdm9pZCBJbnNwZWN0
b3JPdmVybGF5OjpkcmF3R3JpZE92ZXJsYXkoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0LCBjb25z
dCBJbnNwZWN0b3IKICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgY29sdW1uUG9zaXRpb25z
LnNpemUoKTsgKytpKSB7CiAgICAgICAgIGF1dG8gY29sdW1uU3RhcnRMaW5lID0gY29sdW1uTGlu
ZUF0KGNvbHVtblBvc2l0aW9uc1tpXSk7CiAKLSAgICAgICAgUGF0aCBjb2x1bW5QYXRoczsKICAg
ICAgICAgaWYgKGdyaWRPdmVybGF5LmNvbmZpZy5zaG93RXh0ZW5kZWRHcmlkTGluZXMpIHsKICAg
ICAgICAgICAgIGF1dG8gZXh0ZW5kZWRMaW5lID0gY29sdW1uU3RhcnRMaW5lLmV4dGVuZGVkVG9C
b3VuZHModmlld3BvcnRCb3VuZHMpOwotICAgICAgICAgICAgY29sdW1uUGF0aHMubW92ZVRvKGV4
dGVuZGVkTGluZS5zdGFydCgpKTsKLSAgICAgICAgICAgIGNvbHVtblBhdGhzLmFkZExpbmVUbyhl
eHRlbmRlZExpbmUuZW5kKCkpOworICAgICAgICAgICAgZ3JpZEhpZ2hsaWdodE92ZXJsYXkuZ3Jp
ZExpbmVzLmFwcGVuZChleHRlbmRlZExpbmUpOwogICAgICAgICB9IGVsc2UgewotICAgICAgICAg
ICAgY29sdW1uUGF0aHMubW92ZVRvKGNvbHVtblN0YXJ0TGluZS5zdGFydCgpKTsKLSAgICAgICAg
ICAgIGNvbHVtblBhdGhzLmFkZExpbmVUbyhjb2x1bW5TdGFydExpbmUuZW5kKCkpOworICAgICAg
ICAgICAgZ3JpZEhpZ2hsaWdodE92ZXJsYXkuZ3JpZExpbmVzLmFwcGVuZChjb2x1bW5TdGFydExp
bmUpOwogICAgICAgICB9CiAgICAgICAgIAogICAgICAgICBGbG9hdFBvaW50IGdhcExhYmVsUG9z
aXRpb24gPSBjb2x1bW5TdGFydExpbmUuc3RhcnQoKTsKICAgICAgICAgaWYgKGkpIHsKLSAgICAg
ICAgICAgIGRyYXdMYXlvdXRIYXRjaGluZyhjb250ZXh0LCB7IHByZXZpb3VzQ29sdW1uRW5kTGlu
ZS5zdGFydCgpLCBjb2x1bW5TdGFydExpbmUuc3RhcnQoKSwgY29sdW1uU3RhcnRMaW5lLmVuZCgp
LCBwcmV2aW91c0NvbHVtbkVuZExpbmUuZW5kKCkgfSk7CisgICAgICAgICAgICBncmlkSGlnaGxp
Z2h0T3ZlcmxheS5nYXBzLmFwcGVuZCh7IHByZXZpb3VzQ29sdW1uRW5kTGluZS5zdGFydCgpLCBj
b2x1bW5TdGFydExpbmUuc3RhcnQoKSwgY29sdW1uU3RhcnRMaW5lLmVuZCgpLCBwcmV2aW91c0Nv
bHVtbkVuZExpbmUuZW5kKCkgfSk7CiAgICAgICAgICAgICBGbG9hdExpbmUgbGluZUJldHdlZW5D
b2x1bW5Ub3BzID0geyBjb2x1bW5TdGFydExpbmUuc3RhcnQoKSwgcHJldmlvdXNDb2x1bW5FbmRM
aW5lLnN0YXJ0KCkgfTsKICAgICAgICAgICAgIGdhcExhYmVsUG9zaXRpb24gPSBsaW5lQmV0d2Vl
bkNvbHVtblRvcHMucG9pbnRBdFJlbGF0aXZlRGlzdGFuY2UoMC41KTsKICAgICAgICAgfQpAQCAt
MTQ2OSwxMSArMTUxNyw5IEBAIHZvaWQgSW5zcGVjdG9yT3ZlcmxheTo6ZHJhd0dyaWRPdmVybGF5
KEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCwgY29uc3QgSW5zcGVjdG9yCiAKICAgICAgICAgICAg
IGlmIChncmlkT3ZlcmxheS5jb25maWcuc2hvd0V4dGVuZGVkR3JpZExpbmVzKSB7CiAgICAgICAg
ICAgICAgICAgYXV0byBleHRlbmRlZExpbmUgPSBjb2x1bW5FbmRMaW5lLmV4dGVuZGVkVG9Cb3Vu
ZHModmlld3BvcnRCb3VuZHMpOwotICAgICAgICAgICAgICAgIGNvbHVtblBhdGhzLm1vdmVUbyhl
eHRlbmRlZExpbmUuc3RhcnQoKSk7Ci0gICAgICAgICAgICAgICAgY29sdW1uUGF0aHMuYWRkTGlu
ZVRvKGV4dGVuZGVkTGluZS5lbmQoKSk7CisgICAgICAgICAgICAgICAgZ3JpZEhpZ2hsaWdodE92
ZXJsYXkuZ3JpZExpbmVzLmFwcGVuZChleHRlbmRlZExpbmUpOwogICAgICAgICAgICAgfSBlbHNl
IHsKLSAgICAgICAgICAgICAgICBjb2x1bW5QYXRocy5tb3ZlVG8oY29sdW1uRW5kTGluZS5zdGFy
dCgpKTsKLSAgICAgICAgICAgICAgICBjb2x1bW5QYXRocy5hZGRMaW5lVG8oY29sdW1uRW5kTGlu
ZS5lbmQoKSk7CisgICAgICAgICAgICAgICAgZ3JpZEhpZ2hsaWdodE92ZXJsYXkuZ3JpZExpbmVz
LmFwcGVuZChjb2x1bW5FbmRMaW5lKTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIHByZXZp
b3VzQ29sdW1uRW5kTGluZSA9IGNvbHVtbkVuZExpbmU7CiAgICAgICAgICAgICAKQEAgLTE0OTMs
MTMgKzE1MzksMTEgQEAgdm9pZCBJbnNwZWN0b3JPdmVybGF5OjpkcmF3R3JpZE92ZXJsYXkoR3Jh
cGhpY3NDb250ZXh0JiBjb250ZXh0LCBjb25zdCBJbnNwZWN0b3IKICAgICAgICAgICAgICAgICB9
CiAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgRmxvYXRMaW5lIHRyYWNrVG9wTGlu
ZSA9IHsgY29sdW1uU3RhcnRMaW5lLnN0YXJ0KCksIGNvbHVtbkVuZExpbmUuc3RhcnQoKSB9Owot
ICAgICAgICAgICAgICAgIGRyYXdMYXlvdXRMYWJlbChjb250ZXh0LCB0cmFja1NpemVMYWJlbCwg
dHJhY2tUb3BMaW5lLnBvaW50QXRSZWxhdGl2ZURpc3RhbmNlKDAuNSksIExhYmVsQXJyb3dEaXJl
Y3Rpb246OlVwLCB0cmFuc2x1Y2VudExhYmVsQmFja2dyb3VuZENvbG9yKTsKKyAgICAgICAgICAg
ICAgICBncmlkSGlnaGxpZ2h0T3ZlcmxheS5sYWJlbHMuYXBwZW5kKGJ1aWxkTGFiZWwodHJhY2tT
aXplTGFiZWwsIHRyYWNrVG9wTGluZS5wb2ludEF0UmVsYXRpdmVEaXN0YW5jZSgwLjUpLCB0cmFu
c2x1Y2VudExhYmVsQmFja2dyb3VuZENvbG9yLCBMYWJlbEFycm93RGlyZWN0aW9uOjpVcCkpOwog
ICAgICAgICAgICAgfQogICAgICAgICB9IGVsc2UKICAgICAgICAgICAgIHByZXZpb3VzQ29sdW1u
RW5kTGluZSA9IGNvbHVtblN0YXJ0TGluZTsKLSAgICAgICAgCi0gICAgICAgIGNvbnRleHQuc3Ry
b2tlUGF0aChjb2x1bW5QYXRocyk7Ci0gICAgICAgIAorCiAgICAgICAgIFN0cmluZ0J1aWxkZXIg
bGluZUxhYmVsOwogICAgICAgICBpZiAoZ3JpZE92ZXJsYXkuY29uZmlnLnNob3dMaW5lTnVtYmVy
cykKICAgICAgICAgICAgIGxpbmVMYWJlbC5hcHBlbmQoaSArIDEsIHRoaW5TcGFjZSwgYnVsbGV0
LCB0aGluU3BhY2UsIC1zdGF0aWNfY2FzdDxpbnQ+KGNvbHVtblBvc2l0aW9ucy5zaXplKCkgLSBp
KSk7CkBAIC0xNTEyLDcgKzE1NTYsNyBAQCB2b2lkIEluc3BlY3Rvck92ZXJsYXk6OmRyYXdHcmlk
T3ZlcmxheShHcmFwaGljc0NvbnRleHQmIGNvbnRleHQsIGNvbnN0IEluc3BlY3RvcgogICAgICAg
ICB9CiAgICAgICAgIC8vIEZJWE1FOiA8d2Via2l0Lm9yZy9iLzIyMTk3Mj4gTGF5b3V0IGxhYmVs
cyBjYW4gYmUgZHJhd24gb3V0c2lkZSB0aGUgdmlld3BvcnQsIGFuZCBhIGJlc3QgZWZmb3J0IHNo
b3VsZCBiZSBtYWRlIHRvIGtlZXAgdGhlbSBpbiB0aGUgdmlld3BvcnQgd2hpbGUgdGhlIGdyaWQg
aXMgaW4gdGhlIHZpZXdwb3J0LgogICAgICAgICBpZiAoIWxpbmVMYWJlbC5pc0VtcHR5KCkpCi0g
ICAgICAgICAgICBkcmF3TGF5b3V0TGFiZWwoY29udGV4dCwgbGluZUxhYmVsLnRvU3RyaW5nKCks
IGdhcExhYmVsUG9zaXRpb24sIExhYmVsQXJyb3dEaXJlY3Rpb246OkRvd24pOworICAgICAgICAg
ICAgZ3JpZEhpZ2hsaWdodE92ZXJsYXkubGFiZWxzLmFwcGVuZChidWlsZExhYmVsKGxpbmVMYWJl
bC50b1N0cmluZygpLCBnYXBMYWJlbFBvc2l0aW9uLCBDb2xvcjo6d2hpdGUsIExhYmVsQXJyb3dE
aXJlY3Rpb246OkRvd24pKTsKICAgICB9CiAKICAgICBhdXRvIHJvd0hlaWdodHMgPSByZW5kZXJH
cmlkLnRyYWNrU2l6ZXNGb3JDb21wdXRlZFN0eWxlKEdyaWRUcmFja1NpemluZ0RpcmVjdGlvbjo6
Rm9yUm93cyk7CkBAIC0xNTIyLDM3ICsxNTY2LDMyIEBAIHZvaWQgSW5zcGVjdG9yT3ZlcmxheTo6
ZHJhd0dyaWRPdmVybGF5KEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCwgY29uc3QgSW5zcGVjdG9y
CiAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHJvd1Bvc2l0aW9ucy5zaXplKCk7ICsraSkg
ewogICAgICAgICBhdXRvIHJvd1N0YXJ0TGluZSA9IHJvd0xpbmVBdChyb3dQb3NpdGlvbnNbaV0p
OwogCi0gICAgICAgIFBhdGggcm93UGF0aHM7CiAgICAgICAgIGlmIChncmlkT3ZlcmxheS5jb25m
aWcuc2hvd0V4dGVuZGVkR3JpZExpbmVzKSB7Ci0gICAgICAgICAgICBhdXRvIGxpbmUgPSByb3dT
dGFydExpbmUuZXh0ZW5kZWRUb0JvdW5kcyh2aWV3cG9ydEJvdW5kcyk7Ci0gICAgICAgICAgICBy
b3dQYXRocy5tb3ZlVG8obGluZS5zdGFydCgpKTsKLSAgICAgICAgICAgIHJvd1BhdGhzLmFkZExp
bmVUbyhsaW5lLmVuZCgpKTsKKyAgICAgICAgICAgIGF1dG8gZXh0ZW5kZWRMaW5lID0gcm93U3Rh
cnRMaW5lLmV4dGVuZGVkVG9Cb3VuZHModmlld3BvcnRCb3VuZHMpOworICAgICAgICAgICAgZ3Jp
ZEhpZ2hsaWdodE92ZXJsYXkuZ3JpZExpbmVzLmFwcGVuZChleHRlbmRlZExpbmUpOwogICAgICAg
ICB9IGVsc2UgewotICAgICAgICAgICAgcm93UGF0aHMubW92ZVRvKHJvd1N0YXJ0TGluZS5zdGFy
dCgpKTsKLSAgICAgICAgICAgIHJvd1BhdGhzLmFkZExpbmVUbyhyb3dTdGFydExpbmUuZW5kKCkp
OworICAgICAgICAgICAgZ3JpZEhpZ2hsaWdodE92ZXJsYXkuZ3JpZExpbmVzLmFwcGVuZChyb3dT
dGFydExpbmUpOwogICAgICAgICB9Ci0gICAgICAgIAorCiAgICAgICAgIEZsb2F0UG9pbnQgZ2Fw
TGFiZWxQb3NpdGlvbiA9IHJvd1N0YXJ0TGluZS5zdGFydCgpOwogICAgICAgICBpZiAoaSkgewog
ICAgICAgICAgICAgRmxvYXRMaW5lIGxpbmVCZXR3ZWVuUm93U3RhcnRzID0geyByb3dTdGFydExp
bmUuc3RhcnQoKSwgcHJldmlvdXNSb3dFbmRMaW5lLnN0YXJ0KCkgfTsKLSAgICAgICAgICAgIGRy
YXdMYXlvdXRIYXRjaGluZyhjb250ZXh0LCB7IHByZXZpb3VzUm93RW5kTGluZS5zdGFydCgpLCBw
cmV2aW91c1Jvd0VuZExpbmUuZW5kKCksIHJvd1N0YXJ0TGluZS5lbmQoKSwgcm93U3RhcnRMaW5l
LnN0YXJ0KCkgfSk7CisgICAgICAgICAgICBncmlkSGlnaGxpZ2h0T3ZlcmxheS5nYXBzLmFwcGVu
ZCh7IHByZXZpb3VzUm93RW5kTGluZS5zdGFydCgpLCBwcmV2aW91c1Jvd0VuZExpbmUuZW5kKCks
IHJvd1N0YXJ0TGluZS5lbmQoKSwgcm93U3RhcnRMaW5lLnN0YXJ0KCkgfSk7CiAgICAgICAgICAg
ICBnYXBMYWJlbFBvc2l0aW9uID0gbGluZUJldHdlZW5Sb3dTdGFydHMucG9pbnRBdFJlbGF0aXZl
RGlzdGFuY2UoMC41KTsKICAgICAgICAgfQogCiAgICAgICAgIGlmIChpIDwgcm93SGVpZ2h0cy5z
aXplKCkgJiYgaSA8IHJvd1Bvc2l0aW9ucy5zaXplKCkpIHsKICAgICAgICAgICAgIGF1dG8gaGVp
Z2h0ID0gcm93SGVpZ2h0c1tpXTsKICAgICAgICAgICAgIGF1dG8gcm93RW5kTGluZSA9IHJvd0xp
bmVBdChyb3dQb3NpdGlvbnNbaV0gKyBoZWlnaHQpOwotICAgICAgICAgICAgCisKICAgICAgICAg
ICAgIGlmIChncmlkT3ZlcmxheS5jb25maWcuc2hvd0V4dGVuZGVkR3JpZExpbmVzKSB7CiAgICAg
ICAgICAgICAgICAgYXV0byBleHRlbmRlZExpbmUgPSByb3dFbmRMaW5lLmV4dGVuZGVkVG9Cb3Vu
ZHModmlld3BvcnRCb3VuZHMpOwotICAgICAgICAgICAgICAgIHJvd1BhdGhzLm1vdmVUbyhleHRl
bmRlZExpbmUuc3RhcnQoKSk7Ci0gICAgICAgICAgICAgICAgcm93UGF0aHMuYWRkTGluZVRvKGV4
dGVuZGVkTGluZS5lbmQoKSk7CisgICAgICAgICAgICAgICAgZ3JpZEhpZ2hsaWdodE92ZXJsYXku
Z3JpZExpbmVzLmFwcGVuZChleHRlbmRlZExpbmUpOwogICAgICAgICAgICAgfSBlbHNlIHsKLSAg
ICAgICAgICAgICAgICByb3dQYXRocy5tb3ZlVG8ocm93RW5kTGluZS5zdGFydCgpKTsKLSAgICAg
ICAgICAgICAgICByb3dQYXRocy5hZGRMaW5lVG8ocm93RW5kTGluZS5lbmQoKSk7CisgICAgICAg
ICAgICAgICAgZ3JpZEhpZ2hsaWdodE92ZXJsYXkuZ3JpZExpbmVzLmFwcGVuZChyb3dFbmRMaW5l
KTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIHByZXZpb3VzUm93RW5kTGluZSA9IHJvd0Vu
ZExpbmU7Ci0gICAgICAgICAgICAKKwogICAgICAgICAgICAgaWYgKGdyaWRPdmVybGF5LmNvbmZp
Zy5zaG93VHJhY2tTaXplcykgewogICAgICAgICAgICAgICAgIGF1dG8gdHJhY2tTaXplTGFiZWwg
PSBTdHJpbmc6Om51bWJlcihyb3VuZGYoaGVpZ2h0KSk7CiAgICAgICAgICAgICAgICAgdHJhY2tT
aXplTGFiZWwuYXBwZW5kKCJweCJfcyk7CkBAIC0xNTY4LDEzICsxNjA3LDExIEBAIHZvaWQgSW5z
cGVjdG9yT3ZlcmxheTo6ZHJhd0dyaWRPdmVybGF5KEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCwg
Y29uc3QgSW5zcGVjdG9yCiAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICB9
CiAgICAgICAgICAgICAgICAgRmxvYXRMaW5lIHRyYWNrTGVmdExpbmUgPSB7IHJvd1N0YXJ0TGlu
ZS5zdGFydCgpLCByb3dFbmRMaW5lLnN0YXJ0KCkgfTsKLSAgICAgICAgICAgICAgICBkcmF3TGF5
b3V0TGFiZWwoY29udGV4dCwgdHJhY2tTaXplTGFiZWwsIHRyYWNrTGVmdExpbmUucG9pbnRBdFJl
bGF0aXZlRGlzdGFuY2UoMC41KSwgTGFiZWxBcnJvd0RpcmVjdGlvbjo6TGVmdCwgdHJhbnNsdWNl
bnRMYWJlbEJhY2tncm91bmRDb2xvcik7CisgICAgICAgICAgICAgICAgZ3JpZEhpZ2hsaWdodE92
ZXJsYXkubGFiZWxzLmFwcGVuZChidWlsZExhYmVsKHRyYWNrU2l6ZUxhYmVsLCB0cmFja0xlZnRM
aW5lLnBvaW50QXRSZWxhdGl2ZURpc3RhbmNlKDAuNSksIHRyYW5zbHVjZW50TGFiZWxCYWNrZ3Jv
dW5kQ29sb3IsIExhYmVsQXJyb3dEaXJlY3Rpb246OkxlZnQpKTsKICAgICAgICAgICAgIH0KICAg
ICAgICAgfSBlbHNlCiAgICAgICAgICAgICBwcmV2aW91c1Jvd0VuZExpbmUgPSByb3dTdGFydExp
bmU7CiAKLSAgICAgICAgY29udGV4dC5zdHJva2VQYXRoKHJvd1BhdGhzKTsKLSAgICAgICAgCiAg
ICAgICAgIFN0cmluZ0J1aWxkZXIgbGluZUxhYmVsOwogICAgICAgICBpZiAoZ3JpZE92ZXJsYXku
Y29uZmlnLnNob3dMaW5lTnVtYmVycykKICAgICAgICAgICAgIGxpbmVMYWJlbC5hcHBlbmQoaSAr
IDEsIHRoaW5TcGFjZSwgYnVsbGV0LCB0aGluU3BhY2UsIC1zdGF0aWNfY2FzdDxpbnQ+KHJvd1Bv
c2l0aW9ucy5zaXplKCkgLSBpKSk7CkBAIC0xNTg3LDkgKzE2MjQsOSBAQCB2b2lkIEluc3BlY3Rv
ck92ZXJsYXk6OmRyYXdHcmlkT3ZlcmxheShHcmFwaGljc0NvbnRleHQmIGNvbnRleHQsIGNvbnN0
IEluc3BlY3RvcgogICAgICAgICB9CiAgICAgICAgIC8vIEZJWE1FOiA8d2Via2l0Lm9yZy9iLzIy
MTk3Mj4gTGF5b3V0IGxhYmVscyBjYW4gYmUgZHJhd24gb3V0c2lkZSB0aGUgdmlld3BvcnQsIGFu
ZCBhIGJlc3QgZWZmb3J0IHNob3VsZCBiZSBtYWRlIHRvIGtlZXAgdGhlbSBpbiB0aGUgdmlld3Bv
cnQgd2hpbGUgdGhlIGdyaWQgaXMgaW4gdGhlIHZpZXdwb3J0LgogICAgICAgICBpZiAoIWxpbmVM
YWJlbC5pc0VtcHR5KCkpCi0gICAgICAgICAgICBkcmF3TGF5b3V0TGFiZWwoY29udGV4dCwgbGlu
ZUxhYmVsLnRvU3RyaW5nKCksIGdhcExhYmVsUG9zaXRpb24sIExhYmVsQXJyb3dEaXJlY3Rpb246
OlJpZ2h0KTsKKyAgICAgICAgICAgIGdyaWRIaWdobGlnaHRPdmVybGF5LmxhYmVscy5hcHBlbmQo
YnVpbGRMYWJlbChsaW5lTGFiZWwudG9TdHJpbmcoKSwgZ2FwTGFiZWxQb3NpdGlvbiwgQ29sb3I6
OndoaXRlLCBMYWJlbEFycm93RGlyZWN0aW9uOjpSaWdodCkpOwogICAgIH0KLSAgICAKKwogICAg
IGlmIChncmlkT3ZlcmxheS5jb25maWcuc2hvd0FyZWFOYW1lcykgewogICAgICAgICBmb3IgKGF1
dG8mIGdyaWRBcmVhIDogbm9kZS0+cmVuZGVyU3R5bGUoKS0+bmFtZWRHcmlkQXJlYSgpKSB7CiAg
ICAgICAgICAgICBhdXRvJiBuYW1lID0gZ3JpZEFyZWEua2V5OwpAQCAtMTYwMCwyNSArMTYzNywy
NCBAQCB2b2lkIEluc3BlY3Rvck92ZXJsYXk6OmRyYXdHcmlkT3ZlcmxheShHcmFwaGljc0NvbnRl
eHQmIGNvbnRleHQsIGNvbnN0IEluc3BlY3RvcgogICAgICAgICAgICAgYXV0byBjb2x1bW5FbmRM
aW5lID0gY29sdW1uTGluZUF0KGNvbHVtblBvc2l0aW9uc1thcmVhLmNvbHVtbnMuZW5kTGluZSgp
IC0gMV0gKyBjb2x1bW5XaWR0aHNbYXJlYS5jb2x1bW5zLmVuZExpbmUoKSAtIDFdKTsKICAgICAg
ICAgICAgIGF1dG8gcm93U3RhcnRMaW5lID0gcm93TGluZUF0KHJvd1Bvc2l0aW9uc1thcmVhLnJv
d3Muc3RhcnRMaW5lKCldIC0gcm93UG9zaXRpb25zWzBdKTsKICAgICAgICAgICAgIGF1dG8gcm93
RW5kTGluZSA9IHJvd0xpbmVBdChyb3dQb3NpdGlvbnNbYXJlYS5yb3dzLmVuZExpbmUoKSAtIDFd
ICsgcm93SGVpZ2h0c1thcmVhLnJvd3MuZW5kTGluZSgpIC0gMV0gLSByb3dQb3NpdGlvbnNbMF0p
OwotICAgICAgICAgICAgCisKICAgICAgICAgICAgIE9wdGlvbmFsPEZsb2F0UG9pbnQ+IHRvcExl
ZnQgPSBjb2x1bW5TdGFydExpbmUuaW50ZXJzZWN0aW9uV2l0aChyb3dTdGFydExpbmUpOwogICAg
ICAgICAgICAgT3B0aW9uYWw8RmxvYXRQb2ludD4gdG9wUmlnaHQgPSBjb2x1bW5FbmRMaW5lLmlu
dGVyc2VjdGlvbldpdGgocm93U3RhcnRMaW5lKTsKICAgICAgICAgICAgIE9wdGlvbmFsPEZsb2F0
UG9pbnQ+IGJvdHRvbVJpZ2h0ID0gY29sdW1uRW5kTGluZS5pbnRlcnNlY3Rpb25XaXRoKHJvd0Vu
ZExpbmUpOwogICAgICAgICAgICAgT3B0aW9uYWw8RmxvYXRQb2ludD4gYm90dG9tTGVmdCA9IGNv
bHVtblN0YXJ0TGluZS5pbnRlcnNlY3Rpb25XaXRoKHJvd0VuZExpbmUpOwotICAgICAgICAgICAg
CisKICAgICAgICAgICAgIC8vIElmIGFueSB0d28gbGluZXMgYXJlIGNvaW5jaWRlbnQgd2l0aCBl
YWNoIG90aGVyLCB0aGV5IHdpbGwgbm90IGhhdmUgYW4gaW50ZXJzZWN0aW9uLCB3aGljaCBjYW4g
b2NjdXIgd2l0aCBleHRyZW1lIGB0cmFuc2Zvcm06IHBlcnNwZWN0aXZlKC4uLilgIHZhbHVlcy4K
ICAgICAgICAgICAgIGlmICghdG9wTGVmdCB8fCAhdG9wUmlnaHQgfHwgIWJvdHRvbVJpZ2h0IHx8
ICFib3R0b21MZWZ0KQogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogCi0gICAgICAgICAgICBG
bG9hdFF1YWQgYXJlYVF1YWQgPSB7ICp0b3BMZWZ0LCAqdG9wUmlnaHQsICpib3R0b21SaWdodCwg
KmJvdHRvbUxlZnQgfTsKLQotICAgICAgICAgICAgY29udGV4dC5zZXRTdHJva2VUaGlja25lc3Mo
Myk7Ci0gICAgICAgICAgICBjb250ZXh0LnN0cm9rZVBhdGgocXVhZFRvUGF0aChhcmVhUXVhZCkp
OwotCi0gICAgICAgICAgICBjb250ZXh0LnNldFN0cm9rZVRoaWNrbmVzcygxKTsKLSAgICAgICAg
ICAgIGRyYXdMYXlvdXRMYWJlbChjb250ZXh0LCBuYW1lLCBhcmVhUXVhZC5wMSgpLCBMYWJlbEFy
cm93RGlyZWN0aW9uOjpOb25lLCB0cmFuc2x1Y2VudExhYmVsQmFja2dyb3VuZENvbG9yLCBhcmVh
UXVhZC5ib3VuZGluZ0JveCgpLndpZHRoKCkpOworICAgICAgICAgICAgSW5zcGVjdG9yT3Zlcmxh
eTo6SGlnaGxpZ2h0OjpHcmlkSGlnaGxpZ2h0T3ZlcmxheTo6QXJlYSBoaWdobGlnaHRPdmVybGF5
QXJlYTsKKyAgICAgICAgICAgIGhpZ2hsaWdodE92ZXJsYXlBcmVhLm5hbWUgPSBuYW1lOworICAg
ICAgICAgICAgaGlnaGxpZ2h0T3ZlcmxheUFyZWEucXVhZCA9IHsgKnRvcExlZnQsICp0b3BSaWdo
dCwgKmJvdHRvbVJpZ2h0LCAqYm90dG9tTGVmdCB9OworICAgICAgICAgICAgZ3JpZEhpZ2hsaWdo
dE92ZXJsYXkuYXJlYXMuYXBwZW5kKGhpZ2hsaWdodE92ZXJsYXlBcmVhKTsKICAgICAgICAgfQog
ICAgIH0KKworICAgIHJldHVybiB7IGdyaWRIaWdobGlnaHRPdmVybGF5IH07CiB9CiAKIH0gLy8g
bmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9J
bnNwZWN0b3JPdmVybGF5LmggYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yT3Zl
cmxheS5oCmluZGV4IDM4OGU2NTQ5ZDg1NWMyYmRlMTU1ZjYzMmNjN2IyYWNjY2RmYjFhNDAuLjFm
MTAxN2RjNGJlNjU0MzAxNzI1Y2JkZTI1OTZjMjM2NTE2YzViMDUgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JPdmVybGF5LmgKKysrIGIvU291cmNlL1dlYkNv
cmUvaW5zcGVjdG9yL0luc3BlY3Rvck92ZXJsYXkuaApAQCAtMzAsNiArMzAsNyBAQAogI3ByYWdt
YSBvbmNlCiAKICNpbmNsdWRlICJDb2xvci5oIgorI2luY2x1ZGUgIkZsb2F0TGluZS5oIgogI2lu
Y2x1ZGUgIkZsb2F0UXVhZC5oIgogI2luY2x1ZGUgIkZsb2F0UmVjdC5oIgogI2luY2x1ZGUgIlBh
dGguaCIKQEAgLTY0LDEwICs2NSwxOSBAQCBwdWJsaWM6CiAgICAgSW5zcGVjdG9yT3ZlcmxheShQ
YWdlJiwgSW5zcGVjdG9yQ2xpZW50Kik7CiAgICAgfkluc3BlY3Rvck92ZXJsYXkoKTsKIAorICAg
IGVudW0gY2xhc3MgTGFiZWxBcnJvd0RpcmVjdGlvbiB7CisgICAgICAgIE5vbmUsCisgICAgICAg
IERvd24sCisgICAgICAgIFVwLAorICAgICAgICBMZWZ0LAorICAgICAgICBSaWdodCwKKyAgICB9
OworCiAgICAgc3RydWN0IEhpZ2hsaWdodCB7CiAgICAgICAgIFdURl9NQUtFX1NUUlVDVF9GQVNU
X0FMTE9DQVRFRDsKIAogICAgICAgICBlbnVtIGNsYXNzIFR5cGUgeworICAgICAgICAgICAgTm9u
ZSwgLy8gUHJvdmlkZXMgb25seSBub24tcXVhZCBpbmZvcm1hdGlvbiwgaW5jbHVkaW5nIGdyaWQg
b3ZlcmxheXMuCiAgICAgICAgICAgICBOb2RlLCAvLyBQcm92aWRlcyA0IHF1YWRzOiBtYXJnaW4s
IGJvcmRlciwgcGFkZGluZywgY29udGVudC4KICAgICAgICAgICAgIE5vZGVMaXN0LCAvLyBQcm92
aWRlcyBhIGxpc3Qgb2Ygbm9kZXMuCiAgICAgICAgICAgICBSZWN0cywgLy8gUHJvdmlkZXMgYSBs
aXN0IG9mIHF1YWRzLgpAQCAtODQsNiArOTQsMzAgQEAgcHVibGljOgogICAgICAgICAgICAgYm9v
bCB1c2VQYWdlQ29vcmRpbmF0ZXM7CiAgICAgICAgIH07CiAKKyAgICAgICAgc3RydWN0IEdyaWRI
aWdobGlnaHRPdmVybGF5IHsKKyAgICAgICAgICAgIFdURl9NQUtFX1NUUlVDVF9GQVNUX0FMTE9D
QVRFRDsKKworICAgICAgICAgICAgc3RydWN0IExhYmVsIHsKKyAgICAgICAgICAgICAgICBXVEZf
TUFLRV9TVFJVQ1RfRkFTVF9BTExPQ0FURUQ7CisgICAgICAgICAgICAgICAgU3RyaW5nIHRleHQ7
CisgICAgICAgICAgICAgICAgRmxvYXRQb2ludCBsb2NhdGlvbjsKKyAgICAgICAgICAgICAgICBD
b2xvciBiYWNrZ3JvdW5kQ29sb3I7CisgICAgICAgICAgICAgICAgTGFiZWxBcnJvd0RpcmVjdGlv
biBhcnJvd0RpcmVjdGlvbjsKKyAgICAgICAgICAgIH07CisKKyAgICAgICAgICAgIHN0cnVjdCBB
cmVhIHsKKyAgICAgICAgICAgICAgICBXVEZfTUFLRV9TVFJVQ1RfRkFTVF9BTExPQ0FURUQ7Cisg
ICAgICAgICAgICAgICAgU3RyaW5nIG5hbWU7CisgICAgICAgICAgICAgICAgRmxvYXRRdWFkIHF1
YWQ7CisgICAgICAgICAgICB9OworCisgICAgICAgICAgICBDb2xvciBjb2xvcjsKKyAgICAgICAg
ICAgIFZlY3RvcjxGbG9hdExpbmU+IGdyaWRMaW5lczsKKyAgICAgICAgICAgIFZlY3RvcjxGbG9h
dFF1YWQ+IGdhcHM7CisgICAgICAgICAgICBWZWN0b3I8QXJlYT4gYXJlYXM7CisgICAgICAgICAg
ICBWZWN0b3I8TGFiZWw+IGxhYmVsczsKKyAgICAgICAgfTsKKwogICAgICAgICB2b2lkIHNldERh
dGFGcm9tQ29uZmlnKGNvbnN0IENvbmZpZyYgY29uZmlnKQogICAgICAgICB7CiAgICAgICAgICAg
ICBjb250ZW50Q29sb3IgPSBjb25maWcuY29udGVudDsKQEAgLTEwMiw2ICsxMzYsNyBAQCBwdWJs
aWM6CiAKICAgICAgICAgVHlwZSB0eXBlIHtUeXBlOjpOb2RlfTsKICAgICAgICAgVmVjdG9yPEZs
b2F0UXVhZD4gcXVhZHM7CisgICAgICAgIFZlY3RvcjxHcmlkSGlnaGxpZ2h0T3ZlcmxheT4gZ3Jp
ZEhpZ2hsaWdodE92ZXJsYXlzOwogICAgICAgICBib29sIHVzZVBhZ2VDb29yZGluYXRlcyB7dHJ1
ZX07CiAKICAgICAgICAgdXNpbmcgQm91bmRzID0gRmxvYXRSZWN0OwpAQCAtMTMyLDcgKzE2Nyw3
IEBAIHB1YmxpYzoKIAogICAgIHZvaWQgdXBkYXRlKCk7CiAgICAgdm9pZCBwYWludChHcmFwaGlj
c0NvbnRleHQmKTsKLSAgICB2b2lkIGdldEhpZ2hsaWdodChIaWdobGlnaHQmLCBDb29yZGluYXRl
U3lzdGVtKSBjb25zdDsKKyAgICB2b2lkIGdldEhpZ2hsaWdodChIaWdobGlnaHQmLCBDb29yZGlu
YXRlU3lzdGVtKTsKICAgICBib29sIHNob3VsZFNob3dPdmVybGF5KCkgY29uc3Q7CiAKICAgICB2
b2lkIGhpZGVIaWdobGlnaHQoKTsKQEAgLTE2NiwxNCArMjAxLDYgQEAgcHJpdmF0ZToKICAgICAg
ICAgSGlnaGxpZ2h0OjpCb3VuZHMgYm91bmRzOwogICAgICAgICBQYXRoIHRpdGxlUGF0aDsKICAg
ICB9OwotICAgIAotICAgIGVudW0gY2xhc3MgTGFiZWxBcnJvd0RpcmVjdGlvbiB7Ci0gICAgICAg
IE5vbmUsCi0gICAgICAgIERvd24sCi0gICAgICAgIFVwLAotICAgICAgICBMZWZ0LAotICAgICAg
ICBSaWdodCwKLSAgICB9OwogCiAgICAgUnVsZXJFeGNsdXNpb24gZHJhd05vZGVIaWdobGlnaHQo
R3JhcGhpY3NDb250ZXh0JiwgTm9kZSYpOwogICAgIFJ1bGVyRXhjbHVzaW9uIGRyYXdRdWFkSGln
aGxpZ2h0KEdyYXBoaWNzQ29udGV4dCYsIGNvbnN0IEZsb2F0UXVhZCYpOwpAQCAtMTg2LDcgKzIx
Myw4IEBAIHByaXZhdGU6CiAgICAgdm9pZCBkcmF3TGF5b3V0SGF0Y2hpbmcoR3JhcGhpY3NDb250
ZXh0JiwgRmxvYXRRdWFkKTsKICAgICB2b2lkIGRyYXdMYXlvdXRMYWJlbChHcmFwaGljc0NvbnRl
eHQmLCBTdHJpbmcsIEZsb2F0UG9pbnQsIExhYmVsQXJyb3dEaXJlY3Rpb24sIENvbG9yIGJhY2tn
cm91bmRDb2xvciA9IENvbG9yOjp3aGl0ZSwgZmxvYXQgbWF4aW11bVdpZHRoID0gMCk7CiAKLSAg
ICB2b2lkIGRyYXdHcmlkT3ZlcmxheShHcmFwaGljc0NvbnRleHQmLCBjb25zdCBJbnNwZWN0b3JP
dmVybGF5OjpHcmlkJik7CisgICAgdm9pZCBkcmF3R3JpZE92ZXJsYXkoR3JhcGhpY3NDb250ZXh0
JiwgY29uc3QgSW5zcGVjdG9yT3ZlcmxheTo6SGlnaGxpZ2h0OjpHcmlkSGlnaGxpZ2h0T3Zlcmxh
eSYpOworICAgIE9wdGlvbmFsPEluc3BlY3Rvck92ZXJsYXk6OkhpZ2hsaWdodDo6R3JpZEhpZ2hs
aWdodE92ZXJsYXk+IGJ1aWxkR3JpZE92ZXJsYXkoY29uc3QgSW5zcGVjdG9yT3ZlcmxheTo6R3Jp
ZCYsIGJvb2wgb2Zmc2V0Qm91bmRzQnlTY3JvbGwgPSBmYWxzZSk7CiAKICAgICB2b2lkIHVwZGF0
ZVBhaW50UmVjdHNUaW1lckZpcmVkKCk7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL0Zsb2F0TGluZS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvRmxvYXRMaW5lLmgKaW5kZXggOWIzYmNkYWMyNjEwM2NmYjY4MDlmNWMwYjZiOTNkYThi
NzVmZGY5OC4uMWEwZGI1MDhiMDAzZjRmNmU1MjRlMjU1MGE1Y2QxZWE5ZTE5MDFlYSAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRmxvYXRMaW5lLmgKKysrIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRmxvYXRMaW5lLmgKQEAgLTUwLDEwICs1
MCwxMyBAQCBwdWJsaWM6CiAgICAgCiAgICAgZmxvYXQgbGVuZ3RoKCkgY29uc3QgeyByZXR1cm4g
bV9sZW5ndGg7IH0KIAotICAgIGNvbnN0IEZsb2F0UG9pbnQgcG9pbnRBdEFic29sdXRlRGlzdGFu
Y2UoZmxvYXQpIGNvbnN0OworICAgIFdFQkNPUkVfRVhQT1JUIGNvbnN0IEZsb2F0UG9pbnQgcG9p
bnRBdEFic29sdXRlRGlzdGFuY2UoZmxvYXQpIGNvbnN0OwogICAgIGNvbnN0IEZsb2F0UG9pbnQg
cG9pbnRBdFJlbGF0aXZlRGlzdGFuY2UoZmxvYXQpIGNvbnN0OwogICAgIGNvbnN0IEZsb2F0TGlu
ZSBleHRlbmRlZFRvQm91bmRzKGNvbnN0IEZsb2F0UmVjdCYpIGNvbnN0OwogICAgIGNvbnN0IE9w
dGlvbmFsPEZsb2F0UG9pbnQ+IGludGVyc2VjdGlvbldpdGgoY29uc3QgRmxvYXRMaW5lJikgY29u
c3Q7CisKKyAgICB0ZW1wbGF0ZTxjbGFzcyBFbmNvZGVyPiB2b2lkIGVuY29kZShFbmNvZGVyJikg
Y29uc3Q7CisgICAgdGVtcGxhdGU8Y2xhc3MgRGVjb2Rlcj4gc3RhdGljIE9wdGlvbmFsPEZsb2F0
TGluZT4gZGVjb2RlKERlY29kZXImKTsKICAgICAKIHByaXZhdGU6CiAgICAgRmxvYXRQb2ludCBt
X3N0YXJ0IHsgMCwgMCB9OwpAQCAtNjEsNCArNjQsMjUgQEAgcHJpdmF0ZToKICAgICBmbG9hdCBt
X2xlbmd0aCB7IDAgfTsKIH07CiAKK3RlbXBsYXRlPGNsYXNzIEVuY29kZXI+IHZvaWQgRmxvYXRM
aW5lOjplbmNvZGUoRW5jb2RlciYgZW5jb2RlcikgY29uc3QKK3sKKyAgICBlbmNvZGVyIDw8IG1f
c3RhcnQ7CisgICAgZW5jb2RlciA8PCBtX2VuZDsKK30KKwordGVtcGxhdGU8Y2xhc3MgRGVjb2Rl
cj4gT3B0aW9uYWw8RmxvYXRMaW5lPiBGbG9hdExpbmU6OmRlY29kZShEZWNvZGVyJiBkZWNvZGVy
KQoreworICAgIE9wdGlvbmFsPEZsb2F0UG9pbnQ+IHN0YXJ0OworICAgIGRlY29kZXIgPj4gc3Rh
cnQ7CisgICAgaWYgKCFzdGFydCkKKyAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKKworICAg
IE9wdGlvbmFsPEZsb2F0UG9pbnQ+IGVuZDsKKyAgICBkZWNvZGVyID4+IGVuZDsKKyAgICBpZiAo
IWVuZCkKKyAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKKworICAgIHJldHVybiB7eyAqc3Rh
cnQsICplbmQgfX07Cit9CisKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvU2hhcmVkL1dl
YkNvcmVBcmd1bWVudENvZGVycy5jcHAgYi9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9XZWJDb3JlQXJn
dW1lbnRDb2RlcnMuY3BwCmluZGV4IDFkM2FiODgyNTQzNDZhYTExYWQ5YzY2ZjM0ZWFlYzcyNzlh
MTIyOWEuLmY4M2U4OGU2ZGYzMDk0ZWE0ZmI3YjlmNDk1MmQ5MWQ2YTNiNzVjMjcgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJLaXQvU2hhcmVkL1dlYkNvcmVBcmd1bWVudENvZGVycy5jcHAKKysrIGIv
U291cmNlL1dlYktpdC9TaGFyZWQvV2ViQ29yZUFyZ3VtZW50Q29kZXJzLmNwcApAQCAtMTY1MCw2
ICsxNjUwLDcgQEAgdm9pZCBBcmd1bWVudENvZGVyPEluc3BlY3Rvck92ZXJsYXk6OkhpZ2hsaWdo
dD46OmVuY29kZShFbmNvZGVyJiBlbmNvZGVyLCBjb25zdAogICAgIGVuY29kZXIgPDwgaGlnaGxp
Z2h0LmJvcmRlckNvbG9yOwogICAgIGVuY29kZXIgPDwgaGlnaGxpZ2h0Lm1hcmdpbkNvbG9yOwog
ICAgIGVuY29kZXIgPDwgaGlnaGxpZ2h0LnF1YWRzOworICAgIGVuY29kZXIgPDwgaGlnaGxpZ2h0
LmdyaWRIaWdobGlnaHRPdmVybGF5czsKIH0KIAogYm9vbCBBcmd1bWVudENvZGVyPEluc3BlY3Rv
ck92ZXJsYXk6OkhpZ2hsaWdodD46OmRlY29kZShEZWNvZGVyJiBkZWNvZGVyLCBJbnNwZWN0b3JP
dmVybGF5OjpIaWdobGlnaHQmIGhpZ2hsaWdodCkKQEAgLTE2NzMsNiArMTY3NCw3MiBAQCBib29s
IEFyZ3VtZW50Q29kZXI8SW5zcGVjdG9yT3ZlcmxheTo6SGlnaGxpZ2h0Pjo6ZGVjb2RlKERlY29k
ZXImIGRlY29kZXIsIEluc3BlYwogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgaWYgKCFkZWNv
ZGVyLmRlY29kZShoaWdobGlnaHQucXVhZHMpKQogICAgICAgICByZXR1cm4gZmFsc2U7CisgICAg
aWYgKCFkZWNvZGVyLmRlY29kZShoaWdobGlnaHQuZ3JpZEhpZ2hsaWdodE92ZXJsYXlzKSkKKyAg
ICAgICAgcmV0dXJuIGZhbHNlOworICAgIHJldHVybiB0cnVlOworfQorCit2b2lkIEFyZ3VtZW50
Q29kZXI8SW5zcGVjdG9yT3ZlcmxheTo6SGlnaGxpZ2h0OjpHcmlkSGlnaGxpZ2h0T3ZlcmxheT46
OmVuY29kZShFbmNvZGVyJiBlbmNvZGVyLCBjb25zdCBJbnNwZWN0b3JPdmVybGF5OjpIaWdobGln
aHQ6OkdyaWRIaWdobGlnaHRPdmVybGF5JiBncmlkSGlnaGxpZ2h0T3ZlcmxheSkKK3sKKyAgICBl
bmNvZGVyIDw8IGdyaWRIaWdobGlnaHRPdmVybGF5LmNvbG9yOworICAgIGVuY29kZXIgPDwgZ3Jp
ZEhpZ2hsaWdodE92ZXJsYXkuZ3JpZExpbmVzOworICAgIGVuY29kZXIgPDwgZ3JpZEhpZ2hsaWdo
dE92ZXJsYXkuZ2FwczsKKyAgICBlbmNvZGVyIDw8IGdyaWRIaWdobGlnaHRPdmVybGF5LmFyZWFz
OworICAgIGVuY29kZXIgPDwgZ3JpZEhpZ2hsaWdodE92ZXJsYXkubGFiZWxzOworfQorCitib29s
IEFyZ3VtZW50Q29kZXI8SW5zcGVjdG9yT3ZlcmxheTo6SGlnaGxpZ2h0OjpHcmlkSGlnaGxpZ2h0
T3ZlcmxheT46OmRlY29kZShEZWNvZGVyJiBkZWNvZGVyLCBJbnNwZWN0b3JPdmVybGF5OjpIaWdo
bGlnaHQ6OkdyaWRIaWdobGlnaHRPdmVybGF5JiBncmlkSGlnaGxpZ2h0T3ZlcmxheSkKK3sKKyAg
ICBpZiAoIWRlY29kZXIuZGVjb2RlKGdyaWRIaWdobGlnaHRPdmVybGF5LmNvbG9yKSkKKyAgICAg
ICAgcmV0dXJuIGZhbHNlOworICAgIGlmICghZGVjb2Rlci5kZWNvZGUoZ3JpZEhpZ2hsaWdodE92
ZXJsYXkuZ3JpZExpbmVzKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGlmICghZGVjb2Rl
ci5kZWNvZGUoZ3JpZEhpZ2hsaWdodE92ZXJsYXkuZ2FwcykpCisgICAgICAgIHJldHVybiBmYWxz
ZTsKKyAgICBpZiAoIWRlY29kZXIuZGVjb2RlKGdyaWRIaWdobGlnaHRPdmVybGF5LmFyZWFzKSkK
KyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGlmICghZGVjb2Rlci5kZWNvZGUoZ3JpZEhpZ2hs
aWdodE92ZXJsYXkubGFiZWxzKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIHJldHVybiB0
cnVlOworfQorCit2b2lkIEFyZ3VtZW50Q29kZXI8SW5zcGVjdG9yT3ZlcmxheTo6SGlnaGxpZ2h0
OjpHcmlkSGlnaGxpZ2h0T3ZlcmxheTo6TGFiZWw+OjplbmNvZGUoRW5jb2RlciYgZW5jb2Rlciwg
Y29uc3QgSW5zcGVjdG9yT3ZlcmxheTo6SGlnaGxpZ2h0OjpHcmlkSGlnaGxpZ2h0T3ZlcmxheTo6
TGFiZWwmIGxhYmVsKQoreworICAgIGVuY29kZXIgPDwgbGFiZWwudGV4dDsKKyAgICBlbmNvZGVy
IDw8IGxhYmVsLmxvY2F0aW9uOworICAgIGVuY29kZXIgPDwgbGFiZWwuYmFja2dyb3VuZENvbG9y
OworICAgIGVuY29kZXIgPDwgc3RhdGljX2Nhc3Q8dWludDMyX3Q+KGxhYmVsLmFycm93RGlyZWN0
aW9uKTsKK30KKworYm9vbCBBcmd1bWVudENvZGVyPEluc3BlY3Rvck92ZXJsYXk6OkhpZ2hsaWdo
dDo6R3JpZEhpZ2hsaWdodE92ZXJsYXk6OkxhYmVsPjo6ZGVjb2RlKERlY29kZXImIGRlY29kZXIs
IEluc3BlY3Rvck92ZXJsYXk6OkhpZ2hsaWdodDo6R3JpZEhpZ2hsaWdodE92ZXJsYXk6OkxhYmVs
JiBsYWJlbCkKK3sKKyAgICBpZiAoIWRlY29kZXIuZGVjb2RlKGxhYmVsLnRleHQpKQorICAgICAg
ICByZXR1cm4gZmFsc2U7CisgICAgaWYgKCFkZWNvZGVyLmRlY29kZShsYWJlbC5sb2NhdGlvbikp
CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBpZiAoIWRlY29kZXIuZGVjb2RlKGxhYmVsLmJh
Y2tncm91bmRDb2xvcikpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIHVpbnQzMl90IGFy
cm93RGlyZWN0aW9uOworICAgIGlmICghZGVjb2Rlci5kZWNvZGUoYXJyb3dEaXJlY3Rpb24pKQor
ICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgbGFiZWwuYXJyb3dEaXJlY3Rpb24gPSAoSW5zcGVj
dG9yT3ZlcmxheTo6TGFiZWxBcnJvd0RpcmVjdGlvbilhcnJvd0RpcmVjdGlvbjsKKworICAgIHJl
dHVybiB0cnVlOworfQorCit2b2lkIEFyZ3VtZW50Q29kZXI8SW5zcGVjdG9yT3ZlcmxheTo6SGln
aGxpZ2h0OjpHcmlkSGlnaGxpZ2h0T3ZlcmxheTo6QXJlYT46OmVuY29kZShFbmNvZGVyJiBlbmNv
ZGVyLCBjb25zdCBJbnNwZWN0b3JPdmVybGF5OjpIaWdobGlnaHQ6OkdyaWRIaWdobGlnaHRPdmVy
bGF5OjpBcmVhJiBhcmVhKQoreworICAgIGVuY29kZXIgPDwgYXJlYS5uYW1lOworICAgIGVuY29k
ZXIgPDwgYXJlYS5xdWFkOworfQorCitib29sIEFyZ3VtZW50Q29kZXI8SW5zcGVjdG9yT3Zlcmxh
eTo6SGlnaGxpZ2h0OjpHcmlkSGlnaGxpZ2h0T3ZlcmxheTo6QXJlYT46OmRlY29kZShEZWNvZGVy
JiBkZWNvZGVyLCBJbnNwZWN0b3JPdmVybGF5OjpIaWdobGlnaHQ6OkdyaWRIaWdobGlnaHRPdmVy
bGF5OjpBcmVhJiBhcmVhKQoreworICAgIGlmICghZGVjb2Rlci5kZWNvZGUoYXJlYS5uYW1lKSkK
KyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGlmICghZGVjb2Rlci5kZWNvZGUoYXJlYS5xdWFk
KSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIHJldHVybiB0cnVlOwogfQogCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9XZWJDb3JlQXJndW1lbnRDb2RlcnMuaCBiL1NvdXJj
ZS9XZWJLaXQvU2hhcmVkL1dlYkNvcmVBcmd1bWVudENvZGVycy5oCmluZGV4IGJkM2Q5ZTFiOTNi
ZmRjZTg5MmM4Y2EwNzIxZWEyNGY1ZmUyOWFiZGEuLmMwMDIwYjM5OWYyN2I2M2ZhYWYzN2JlM2Iy
YzFhYzA2OGQ1Nzg0NDAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvU2hhcmVkL1dlYkNvcmVB
cmd1bWVudENvZGVycy5oCisrKyBiL1NvdXJjZS9XZWJLaXQvU2hhcmVkL1dlYkNvcmVBcmd1bWVu
dENvZGVycy5oCkBAIC00ODQsNiArNDg0LDIxIEBAIHRlbXBsYXRlPD4gc3RydWN0IEFyZ3VtZW50
Q29kZXI8V2ViQ29yZTo6SW5zcGVjdG9yT3ZlcmxheTo6SGlnaGxpZ2h0PiB7CiAgICAgc3RhdGlj
IFdBUk5fVU5VU0VEX1JFVFVSTiBib29sIGRlY29kZShEZWNvZGVyJiwgV2ViQ29yZTo6SW5zcGVj
dG9yT3ZlcmxheTo6SGlnaGxpZ2h0Jik7CiB9OwogCit0ZW1wbGF0ZTw+IHN0cnVjdCBBcmd1bWVu
dENvZGVyPFdlYkNvcmU6Okluc3BlY3Rvck92ZXJsYXk6OkhpZ2hsaWdodDo6R3JpZEhpZ2hsaWdo
dE92ZXJsYXk+IHsKKyAgICBzdGF0aWMgdm9pZCBlbmNvZGUoRW5jb2RlciYsIGNvbnN0IFdlYkNv
cmU6Okluc3BlY3Rvck92ZXJsYXk6OkhpZ2hsaWdodDo6R3JpZEhpZ2hsaWdodE92ZXJsYXkmKTsK
KyAgICBzdGF0aWMgV0FSTl9VTlVTRURfUkVUVVJOIGJvb2wgZGVjb2RlKERlY29kZXImLCBXZWJD
b3JlOjpJbnNwZWN0b3JPdmVybGF5OjpIaWdobGlnaHQ6OkdyaWRIaWdobGlnaHRPdmVybGF5Jik7
Cit9OworCit0ZW1wbGF0ZTw+IHN0cnVjdCBBcmd1bWVudENvZGVyPFdlYkNvcmU6Okluc3BlY3Rv
ck92ZXJsYXk6OkhpZ2hsaWdodDo6R3JpZEhpZ2hsaWdodE92ZXJsYXk6OkxhYmVsPiB7CisgICAg
c3RhdGljIHZvaWQgZW5jb2RlKEVuY29kZXImLCBjb25zdCBXZWJDb3JlOjpJbnNwZWN0b3JPdmVy
bGF5OjpIaWdobGlnaHQ6OkdyaWRIaWdobGlnaHRPdmVybGF5OjpMYWJlbCYpOworICAgIHN0YXRp
YyBXQVJOX1VOVVNFRF9SRVRVUk4gYm9vbCBkZWNvZGUoRGVjb2RlciYsIFdlYkNvcmU6Okluc3Bl
Y3Rvck92ZXJsYXk6OkhpZ2hsaWdodDo6R3JpZEhpZ2hsaWdodE92ZXJsYXk6OkxhYmVsJik7Cit9
OworCit0ZW1wbGF0ZTw+IHN0cnVjdCBBcmd1bWVudENvZGVyPFdlYkNvcmU6Okluc3BlY3Rvck92
ZXJsYXk6OkhpZ2hsaWdodDo6R3JpZEhpZ2hsaWdodE92ZXJsYXk6OkFyZWE+IHsKKyAgICBzdGF0
aWMgdm9pZCBlbmNvZGUoRW5jb2RlciYsIGNvbnN0IFdlYkNvcmU6Okluc3BlY3Rvck92ZXJsYXk6
OkhpZ2hsaWdodDo6R3JpZEhpZ2hsaWdodE92ZXJsYXk6OkFyZWEmKTsKKyAgICBzdGF0aWMgV0FS
Tl9VTlVTRURfUkVUVVJOIGJvb2wgZGVjb2RlKERlY29kZXImLCBXZWJDb3JlOjpJbnNwZWN0b3JP
dmVybGF5OjpIaWdobGlnaHQ6OkdyaWRIaWdobGlnaHRPdmVybGF5OjpBcmVhJik7Cit9OworCiB0
ZW1wbGF0ZTw+IHN0cnVjdCBBcmd1bWVudENvZGVyPFdlYkNvcmU6OlBhc3RlYm9hcmRXZWJDb250
ZW50PiB7CiAgICAgc3RhdGljIHZvaWQgZW5jb2RlKEVuY29kZXImLCBjb25zdCBXZWJDb3JlOjpQ
YXN0ZWJvYXJkV2ViQ29udGVudCYpOwogICAgIHN0YXRpYyBXQVJOX1VOVVNFRF9SRVRVUk4gYm9v
bCBkZWNvZGUoRGVjb2RlciYsIFdlYkNvcmU6OlBhc3RlYm9hcmRXZWJDb250ZW50Jik7CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9JbnNwZWN0b3IvaW9zL1dLSW5zcGVjdG9y
SGlnaGxpZ2h0Vmlldy5oIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvSW5zcGVjdG9yL2lvcy9X
S0luc3BlY3RvckhpZ2hsaWdodFZpZXcuaAppbmRleCA3MzA1N2U0Y2VlM2RmNThkNjBkZmJmNjA1
N2U0NjgwMmVjM2UwODBhLi5hOTM2OWY5NjdlOTU3OGZhNTU0ODFkYTYwN2MzMjJkYTE1NWRiNWIw
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9JbnNwZWN0b3IvaW9zL1dLSW5z
cGVjdG9ySGlnaGxpZ2h0Vmlldy5oCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0luc3Bl
Y3Rvci9pb3MvV0tJbnNwZWN0b3JIaWdobGlnaHRWaWV3LmgKQEAgLTMwLDggKzMwLDkgQEAKIAog
QGludGVyZmFjZSBXS0luc3BlY3RvckhpZ2hsaWdodFZpZXcgOiBVSVZpZXcgewogICAgIFJldGFp
blB0cjxOU011dGFibGVBcnJheTxDQVNoYXBlTGF5ZXIgKj4+IF9sYXllcnM7CisgICAgUmV0YWlu
UHRyPE5TTXV0YWJsZUFycmF5PENBTGF5ZXIgKj4+IF9ncmlkT3ZlcmxheUxheWVyczsKIH0KLS0g
KHZvaWQpdXBkYXRlOihjb25zdCBXZWJDb3JlOjpJbnNwZWN0b3JPdmVybGF5OjpIaWdobGlnaHQm
KWhpZ2hsaWdodDsKKy0gKHZvaWQpdXBkYXRlOihjb25zdCBXZWJDb3JlOjpJbnNwZWN0b3JPdmVy
bGF5OjpIaWdobGlnaHQmKWhpZ2hsaWdodCBzY2FsZTooZG91YmxlKXNjYWxlOwogQGVuZAogCiAj
ZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0luc3BlY3Rvci9pb3Mv
V0tJbnNwZWN0b3JIaWdobGlnaHRWaWV3Lm1tIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvSW5z
cGVjdG9yL2lvcy9XS0luc3BlY3RvckhpZ2hsaWdodFZpZXcubW0KaW5kZXggYjFiMGJlMzRiZjMz
MGMwZWU1NTVlZDhkYzc0MWZjNjQyYjEwOWFmNC4uODY5ZDdiNWJhZWMzNGYwNzMwMzZjMGU3MDE2
NDgxOGI5NDU4OTRiZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvSW5zcGVj
dG9yL2lvcy9XS0luc3BlY3RvckhpZ2hsaWdodFZpZXcubW0KKysrIGIvU291cmNlL1dlYktpdC9V
SVByb2Nlc3MvSW5zcGVjdG9yL2lvcy9XS0luc3BlY3RvckhpZ2hsaWdodFZpZXcubW0KQEAgLTI4
LDggKzI4LDEyIEBACiAKICNpZiBQTEFURk9STShJT1NfRkFNSUxZKQogCisjaW1wb3J0IDxXZWJD
b3JlL0Zsb2F0TGluZS5oPgogI2ltcG9ydCA8V2ViQ29yZS9GbG9hdFF1YWQuaD4KKyNpbXBvcnQg
PFdlYkNvcmUvRm9udENhc2NhZGUuaD4KKyNpbXBvcnQgPFdlYkNvcmUvRm9udENhc2NhZGVEZXNj
cmlwdGlvbi5oPgogI2ltcG9ydCA8V2ViQ29yZS9HZW9tZXRyeVV0aWxpdGllcy5oPgorI2ltcG9y
dCA8V2ViQ29yZS9UZXh0UnVuLmg+CiAKIEBpbXBsZW1lbnRhdGlvbiBXS0luc3BlY3RvckhpZ2hs
aWdodFZpZXcKIApAQCAtMzgsNiArNDIsNyBAQCAtIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhGcmFt
ZTooQ0dSZWN0KWZyYW1lCiAgICAgaWYgKCEoc2VsZiA9IFtzdXBlciBpbml0V2l0aEZyYW1lOmZy
YW1lXSkpCiAgICAgICAgIHJldHVybiBuaWw7CiAgICAgX2xheWVycyA9IGFkb3B0TlMoW1tOU011
dGFibGVBcnJheSBhbGxvY10gaW5pdF0pOworICAgIF9ncmlkT3ZlcmxheUxheWVycyA9IGFkb3B0
TlMoW1tOU011dGFibGVBcnJheSBhbGxvY10gaW5pdF0pOwogICAgIHJldHVybiBzZWxmOwogfQog
CkBAIC01Miw2ICs1Nyw5IEBAIC0gKHZvaWQpX3JlbW92ZUFsbExheWVycwogICAgIGZvciAoQ0FT
aGFwZUxheWVyICpsYXllciBpbiBfbGF5ZXJzLmdldCgpKQogICAgICAgICBbbGF5ZXIgcmVtb3Zl
RnJvbVN1cGVybGF5ZXJdOwogICAgIFtfbGF5ZXJzIHJlbW92ZUFsbE9iamVjdHNdOworICAgIGZv
ciAoQ0FMYXllciAqbGF5ZXIgaW4gX2dyaWRPdmVybGF5TGF5ZXJzLmdldCgpKQorICAgICAgICBb
bGF5ZXIgcmVtb3ZlRnJvbVN1cGVybGF5ZXJdOworICAgIFtfZ3JpZE92ZXJsYXlMYXllcnMgcmVt
b3ZlQWxsT2JqZWN0c107CiB9CiAKIC0gKHZvaWQpX2NyZWF0ZUxheWVyczooTlNVSW50ZWdlcilu
dW1MYXllcnMKQEAgLTU5LDggKzY3LDYgQEAgLSAodm9pZClfY3JlYXRlTGF5ZXJzOihOU1VJbnRl
Z2VyKW51bUxheWVycwogICAgIGlmIChbX2xheWVycyBjb3VudF0gPT0gbnVtTGF5ZXJzKQogICAg
ICAgICByZXR1cm47CiAKLSAgICBbc2VsZiBfcmVtb3ZlQWxsTGF5ZXJzXTsKLQogICAgIGZvciAo
TlNVSW50ZWdlciBpID0gMDsgaSA8IG51bUxheWVyczsgKytpKSB7CiAgICAgICAgIGF1dG8gbGF5
ZXIgPSBhZG9wdE5TKFtbQ0FTaGFwZUxheWVyIGFsbG9jXSBpbml0XSk7CiAgICAgICAgIFtfbGF5
ZXJzIGFkZE9iamVjdDpsYXllci5nZXQoKV07CkBAIC0yMDIsNiArMjA4LDcgQEAgc3RhdGljIHZv
aWQgbGF5ZXJQYXRoKENBU2hhcGVMYXllciAqbGF5ZXIsIGNvbnN0IFdlYkNvcmU6OkZsb2F0UXVh
ZCYgb3V0ZXJRdWFkKQogICAgIENHUGF0aEFkZExpbmVUb1BvaW50KHBhdGguZ2V0KCksIDAsIG91
dGVyUXVhZC5wNCgpLngoKSwgb3V0ZXJRdWFkLnA0KCkueSgpKTsKICAgICBDR1BhdGhBZGRMaW5l
VG9Qb2ludChwYXRoLmdldCgpLCAwLCBvdXRlclF1YWQucDMoKS54KCksIG91dGVyUXVhZC5wMygp
LnkoKSk7CiAgICAgQ0dQYXRoQWRkTGluZVRvUG9pbnQocGF0aC5nZXQoKSwgMCwgb3V0ZXJRdWFk
LnAyKCkueCgpLCBvdXRlclF1YWQucDIoKS55KCkpOworICAgIENHUGF0aENsb3NlU3VicGF0aChw
YXRoLmdldCgpKTsKICAgICBsYXllci5wYXRoID0gcGF0aC5nZXQoKTsKIH0KIApAQCAtMjM1LDEw
ICsyNDIsOCBAQCAtICh2b2lkKV9sYXlvdXRGb3JOb2RlSGlnaGxpZ2h0Oihjb25zdCBXZWJDb3Jl
OjpJbnNwZWN0b3JPdmVybGF5OjpIaWdobGlnaHQmKWhpZwogCiAtICh2b2lkKV9sYXlvdXRGb3JO
b2RlTGlzdEhpZ2hsaWdodDooY29uc3QgV2ViQ29yZTo6SW5zcGVjdG9yT3ZlcmxheTo6SGlnaGxp
Z2h0JiloaWdobGlnaHQKIHsKLSAgICBpZiAoIWhpZ2hsaWdodC5xdWFkcy5zaXplKCkpIHsKLSAg
ICAgICAgW3NlbGYgX3JlbW92ZUFsbExheWVyc107CisgICAgaWYgKCFoaWdobGlnaHQucXVhZHMu
c2l6ZSgpKQogICAgICAgICByZXR1cm47Ci0gICAgfQogCiAgICAgdW5zaWduZWQgbm9kZUNvdW50
ID0gaGlnaGxpZ2h0LnF1YWRzLnNpemUoKSAvIDQ7CiAgICAgW3NlbGYgX2NyZWF0ZUxheWVyczpu
b2RlQ291bnQgKiA0XTsKQEAgLTI1MCwxMCArMjU1LDggQEAgLSAodm9pZClfbGF5b3V0Rm9yTm9k
ZUxpc3RIaWdobGlnaHQ6KGNvbnN0IFdlYkNvcmU6Okluc3BlY3Rvck92ZXJsYXk6OkhpZ2hsaWdo
dCYKIC0gKHZvaWQpX2xheW91dEZvclJlY3RzSGlnaGxpZ2h0Oihjb25zdCBXZWJDb3JlOjpJbnNw
ZWN0b3JPdmVybGF5OjpIaWdobGlnaHQmKWhpZ2hsaWdodAogewogICAgIE5TVUludGVnZXIgbnVt
TGF5ZXJzID0gaGlnaGxpZ2h0LnF1YWRzLnNpemUoKTsKLSAgICBpZiAoIW51bUxheWVycykgewot
ICAgICAgICBbc2VsZiBfcmVtb3ZlQWxsTGF5ZXJzXTsKKyAgICBpZiAoIW51bUxheWVycykKICAg
ICAgICAgcmV0dXJuOwotICAgIH0KIAogICAgIFtzZWxmIF9jcmVhdGVMYXllcnM6bnVtTGF5ZXJz
XTsKIApAQCAtMjY1LDEyICsyNjgsMjA5IEBAIC0gKHZvaWQpX2xheW91dEZvclJlY3RzSGlnaGxp
Z2h0Oihjb25zdCBXZWJDb3JlOjpJbnNwZWN0b3JPdmVybGF5OjpIaWdobGlnaHQmKWhpCiAgICAg
fQogfQogCi0tICh2b2lkKXVwZGF0ZTooY29uc3QgV2ViQ29yZTo6SW5zcGVjdG9yT3ZlcmxheTo6
SGlnaGxpZ2h0JiloaWdobGlnaHQKKy0gKHZvaWQpX2NyZWF0ZUdyaWRPdmVybGF5TGF5ZXJzOihj
b25zdCBXZWJDb3JlOjpJbnNwZWN0b3JPdmVybGF5OjpIaWdobGlnaHQmKWhpZ2hsaWdodCBzY2Fs
ZTooZG91YmxlKXNjYWxlCit7CisgICAgZm9yIChhdXRvIGdyaWRPdmVybGF5IDogaGlnaGxpZ2h0
LmdyaWRIaWdobGlnaHRPdmVybGF5cykgeworICAgICAgICBhdXRvIGxheWVyID0gW3NlbGYgX2Ny
ZWF0ZUdyaWRPdmVybGF5TGF5ZXI6Z3JpZE92ZXJsYXkgc2NhbGU6c2NhbGVdOworICAgICAgICBb
X2dyaWRPdmVybGF5TGF5ZXJzIGFkZE9iamVjdDpsYXllcl07CisgICAgICAgIFtzZWxmLmxheWVy
IGFkZFN1YmxheWVyOmxheWVyXTsKKyAgICB9Cit9CisKK3N0YXRpYyBDQUxheWVyICogY3JlYXRl
TGF5b3V0SGF0Y2hpbmdMYXllcihXZWJDb3JlOjpGbG9hdFF1YWQgcXVhZCwgV2ViQ29yZTo6Q29s
b3Igc3Ryb2tlQ29sb3IpCit7CisgICAgQ0FTaGFwZUxheWVyICpsYXllciA9IFtDQVNoYXBlTGF5
ZXIgbGF5ZXJdOworCisgICAgY29uc3RleHByIGF1dG8gaGF0Y2hTcGFjaW5nID0gMTI7CisgICAg
YXV0byBoYXRjaFBhdGggPSBhZG9wdENGKENHUGF0aENyZWF0ZU11dGFibGUoKSk7CisKKyAgICBX
ZWJDb3JlOjpGbG9hdExpbmUgdG9wU2lkZSA9IHsgcXVhZC5wMSgpLCBxdWFkLnAyKCkgfTsKKyAg
ICBXZWJDb3JlOjpGbG9hdExpbmUgbGVmdFNpZGUgPSB7IHF1YWQucDEoKSwgcXVhZC5wNCgpIH07
CisKKyAgICAvLyBUaGUgb3Bwb3NpdGUgYXhpcycgbGVuZ3RoIGlzIHVzZWQgdG8gZGV0ZXJtaW5l
IGhvdyBmYXIgdG8gZHJhdyBhIGhhdGNoIGxpbmUgaW4gYm90aCBkaW1lbnNpb25zLCB3aGljaCBr
ZWVwcyB0aGUgbGluZXMgYXQgYSA0NWRlZyBhbmdsZS4KKyAgICBpZiAodG9wU2lkZS5sZW5ndGgo
KSA+IGxlZnRTaWRlLmxlbmd0aCgpKSB7CisgICAgICAgIFdlYkNvcmU6OkZsb2F0TGluZSBib3R0
b21TaWRlID0geyBxdWFkLnA0KCksIHF1YWQucDMoKSB9OworICAgICAgICAvLyBNb3ZlIGFjcm9z
cyB0aGUgcmVsYXRpdmUgdG9wIG9mIHRoZSBxdWFkLCBzdGFydGluZyBsZWZ0IG9mIGAwLCAwYCB0
byBlbnN1cmUgdGhhdCB0aGUgdGFpbCBvZiB0aGUgcHJldmlvdXMgaGF0Y2ggbGluZSBpcyBkcmF3
biB3aGlsZSBzY3JvbGxpbmcuCisgICAgICAgIGZvciAoZmxvYXQgeCA9IC1sZWZ0U2lkZS5sZW5n
dGgoKTsgeCA8IHRvcFNpZGUubGVuZ3RoKCk7IHggKz0gaGF0Y2hTcGFjaW5nKSB7CisgICAgICAg
ICAgICBhdXRvIHN0YXJ0UG9pbnQgPSB0b3BTaWRlLnBvaW50QXRBYnNvbHV0ZURpc3RhbmNlKHgp
OworICAgICAgICAgICAgYXV0byBlbmRQb2ludCA9IGJvdHRvbVNpZGUucG9pbnRBdEFic29sdXRl
RGlzdGFuY2UoeCArIGxlZnRTaWRlLmxlbmd0aCgpKTsKKyAgICAgICAgICAgIENHUGF0aE1vdmVU
b1BvaW50KGhhdGNoUGF0aC5nZXQoKSwgMCwgc3RhcnRQb2ludC54KCksIHN0YXJ0UG9pbnQueSgp
KTsKKyAgICAgICAgICAgIENHUGF0aEFkZExpbmVUb1BvaW50KGhhdGNoUGF0aC5nZXQoKSwgMCwg
ZW5kUG9pbnQueCgpLCBlbmRQb2ludC55KCkpOworICAgICAgICB9CisgICAgfSBlbHNlIHsKKyAg
ICAgICAgV2ViQ29yZTo6RmxvYXRMaW5lIHJpZ2h0U2lkZSA9IHsgcXVhZC5wMigpLCBxdWFkLnAz
KCkgfTsKKyAgICAgICAgLy8gTW92ZSBkb3duIHRoZSByZWxhdGl2ZSBsZWZ0IHNpZGUgb2YgdGhl
IHF1YWQsIHN0YXJ0aW5nIGFib3ZlIGAwLCAwYCB0byBlbnN1cmUgdGhhdCB0aGUgdGFpbCBvZiB0
aGUgcHJldmlvdXMgaGF0Y2ggbGluZSBpcyBkcmF3biB3aGlsZSBzY3JvbGxpbmcuCisgICAgICAg
IGZvciAoZmxvYXQgeSA9IC10b3BTaWRlLmxlbmd0aCgpOyB5IDwgbGVmdFNpZGUubGVuZ3RoKCk7
IHkgKz0gaGF0Y2hTcGFjaW5nKSB7CisgICAgICAgICAgICBhdXRvIHN0YXJ0UG9pbnQgPSBsZWZ0
U2lkZS5wb2ludEF0QWJzb2x1dGVEaXN0YW5jZSh5KTsKKyAgICAgICAgICAgIGF1dG8gZW5kUG9p
bnQgPSByaWdodFNpZGUucG9pbnRBdEFic29sdXRlRGlzdGFuY2UoeSArIHRvcFNpZGUubGVuZ3Ro
KCkpOworICAgICAgICAgICAgQ0dQYXRoTW92ZVRvUG9pbnQoaGF0Y2hQYXRoLmdldCgpLCAwLCBz
dGFydFBvaW50LngoKSwgc3RhcnRQb2ludC55KCkpOworICAgICAgICAgICAgQ0dQYXRoQWRkTGlu
ZVRvUG9pbnQoaGF0Y2hQYXRoLmdldCgpLCAwLCBlbmRQb2ludC54KCksIGVuZFBvaW50LnkoKSk7
CisgICAgICAgIH0KKyAgICB9CisgICAgbGF5ZXIucGF0aCA9IGhhdGNoUGF0aC5nZXQoKTsKKyAg
ICBsYXllci5zdHJva2VDb2xvciA9IGNhY2hlZENHQ29sb3Ioc3Ryb2tlQ29sb3IpOworICAgIGxh
eWVyLmxpbmVXaWR0aCA9IDAuNTsKKyAgICBsYXllci5saW5lRGFzaFBhdHRlcm4gPSBAW1tOU051
bWJlciBudW1iZXJXaXRoSW50OjJdLCBbTlNOdW1iZXIgbnVtYmVyV2l0aEludDoyXV07CisKKyAg
ICBDQVNoYXBlTGF5ZXIgKm1hc2tMYXllciA9IFtDQVNoYXBlTGF5ZXIgbGF5ZXJdOworICAgIGxh
eWVyUGF0aChtYXNrTGF5ZXIsIHF1YWQpOworICAgIGxheWVyLm1hc2sgPSBtYXNrTGF5ZXI7Cisg
ICAgcmV0dXJuIGxheWVyOworfQorCitzdGF0aWMgQ0FMYXllciAqIGNyZWF0ZUxheW91dExhYmVs
TGF5ZXIoU3RyaW5nIGxhYmVsLCBXZWJDb3JlOjpGbG9hdFBvaW50IHBvaW50LCBXZWJDb3JlOjpJ
bnNwZWN0b3JPdmVybGF5OjpMYWJlbEFycm93RGlyZWN0aW9uIGRpcmVjdGlvbiwgV2ViQ29yZTo6
Q29sb3IgYmFja2dyb3VuZENvbG9yLCBXZWJDb3JlOjpDb2xvciBzdHJva2VDb2xvciwgZG91Ymxl
IHNjYWxlLCBmbG9hdCBtYXhpbXVtV2lkdGggPSAwKQoreworICAgIFdlYkNvcmU6OkZvbnRDYXNj
YWRlRGVzY3JpcHRpb24gZm9udERlc2NyaXB0aW9uOworICAgIGZvbnREZXNjcmlwdGlvbi5zZXRG
YW1pbGllcyh7ICJzeXN0ZW0tdWkiIH0pOworICAgIGZvbnREZXNjcmlwdGlvbi5zZXRXZWlnaHQo
V2ViQ29yZTo6Rm9udFNlbGVjdGlvblZhbHVlKDUwMCkpOworICAgIGZvbnREZXNjcmlwdGlvbi5z
ZXRDb21wdXRlZFNpemUoMTIpOworCisgICAgV2ViQ29yZTo6Rm9udENhc2NhZGUgZm9udChXVEZN
b3ZlKGZvbnREZXNjcmlwdGlvbiksIDAsIDApOworICAgIGZvbnQudXBkYXRlKG51bGxwdHIpOwor
CisgICAgY29uc3RleHByIGF1dG8gcGFkZGluZyA9IDQ7CisgICAgY29uc3RleHByIGF1dG8gYXJy
b3dTaXplID0gNDsKKyAgICBmbG9hdCB0ZXh0SGVpZ2h0ID0gZm9udC5mb250TWV0cmljcygpLmZs
b2F0SGVpZ2h0KCk7CisKKyAgICBmbG9hdCB0ZXh0V2lkdGggPSBmb250LndpZHRoKFdlYkNvcmU6
OlRleHRSdW4obGFiZWwpKTsKKyAgICBpZiAobWF4aW11bVdpZHRoICYmIHRleHRXaWR0aCArIChw
YWRkaW5nICogMikgPiBtYXhpbXVtV2lkdGgpIHsKKyAgICAgICAgbGFiZWwuYXBwZW5kKCIuLi4i
X3MpOworICAgICAgICB3aGlsZSAodGV4dFdpZHRoICsgKHBhZGRpbmcgKiAyKSA+IG1heGltdW1X
aWR0aCAmJiBsYWJlbC5sZW5ndGgoKSA+PSA0KSB7CisgICAgICAgICAgICAvLyBSZW1vdmUgdGhl
IGZvdXJ0aCBmcm9tIGxhc3QgY2hhcmFjdGVyICh0aGUgY2hhcmFjdGVyIGJlZm9yZSB0aGUgZWxs
aXBzaXMpIGFuZCByZW1lYXN1cmUuCisgICAgICAgICAgICBsYWJlbC5yZW1vdmUobGFiZWwubGVu
Z3RoKCkgLSA0KTsKKyAgICAgICAgICAgIHRleHRXaWR0aCA9IGZvbnQud2lkdGgoV2ViQ29yZTo6
VGV4dFJ1bihsYWJlbCkpOworICAgICAgICB9CisgICAgfQorCisgICAgYXV0byBsYWJlbFBhdGgg
PSBhZG9wdENGKENHUGF0aENyZWF0ZU11dGFibGUoKSk7CisKKyAgICAvLyBOb3RlOiBJbXBsZW1l
bnRhdGlvbiBEaWZmZXJlbmNlIC0gVGhlIHRleHRQb3NpdGlvbiBpcyB0aGUgY2VudGVyIG9mIHRl
eHQsIHVubGlrZSBXZWJDb3JlOjpJbnNwZWN0b3JPdmVybGF5LCB3aGVyZSB0aGUgdGV4dFBvc2l0
aW9uIGlzIGxlZnRtb3N0IHBvaW50IG9uIHRoZSBiYXNlbGluZSBvZiB0aGUgdGV4dC4KKyAgICBX
ZWJDb3JlOjpGbG9hdFBvaW50IHRleHRQb3NpdGlvbjsKKworICAgIHN3aXRjaCAoZGlyZWN0aW9u
KSB7CisgICAgY2FzZSBXZWJDb3JlOjpJbnNwZWN0b3JPdmVybGF5OjpMYWJlbEFycm93RGlyZWN0
aW9uOjpEb3duOgorICAgICAgICBDR1BhdGhNb3ZlVG9Qb2ludChsYWJlbFBhdGguZ2V0KCksIDAs
IC0odGV4dFdpZHRoIC8gMikgLSBwYWRkaW5nLCAtdGV4dEhlaWdodCAtIChwYWRkaW5nICogMikg
LSBhcnJvd1NpemUpOworICAgICAgICBDR1BhdGhBZGRMaW5lVG9Qb2ludChsYWJlbFBhdGguZ2V0
KCksIDAsIC0odGV4dFdpZHRoIC8gMikgLSBwYWRkaW5nLCAtYXJyb3dTaXplKTsKKyAgICAgICAg
Q0dQYXRoQWRkTGluZVRvUG9pbnQobGFiZWxQYXRoLmdldCgpLCAwLCAtYXJyb3dTaXplLCAtYXJy
b3dTaXplKTsKKyAgICAgICAgQ0dQYXRoQWRkTGluZVRvUG9pbnQobGFiZWxQYXRoLmdldCgpLCAw
LCAwLCAwKTsKKyAgICAgICAgQ0dQYXRoQWRkTGluZVRvUG9pbnQobGFiZWxQYXRoLmdldCgpLCAw
LCBhcnJvd1NpemUsIC1hcnJvd1NpemUpOworICAgICAgICBDR1BhdGhBZGRMaW5lVG9Qb2ludChs
YWJlbFBhdGguZ2V0KCksIDAsICh0ZXh0V2lkdGggLyAyKSArIHBhZGRpbmcsIC1hcnJvd1NpemUp
OworICAgICAgICBDR1BhdGhBZGRMaW5lVG9Qb2ludChsYWJlbFBhdGguZ2V0KCksIDAsICh0ZXh0
V2lkdGggLyAyKSArIHBhZGRpbmcsIC10ZXh0SGVpZ2h0IC0gKHBhZGRpbmcgKiAyKSAtIGFycm93
U2l6ZSk7CisgICAgICAgIHRleHRQb3NpdGlvbiA9IFdlYkNvcmU6OkZsb2F0UG9pbnQoMCwgLSh0
ZXh0SGVpZ2h0IC8gMikgLSBhcnJvd1NpemUgLSBwYWRkaW5nKTsKKyAgICAgICAgYnJlYWs7Cisg
ICAgY2FzZSBXZWJDb3JlOjpJbnNwZWN0b3JPdmVybGF5OjpMYWJlbEFycm93RGlyZWN0aW9uOjpV
cDoKKyAgICAgICAgQ0dQYXRoTW92ZVRvUG9pbnQobGFiZWxQYXRoLmdldCgpLCAwLCAtKHRleHRX
aWR0aCAvIDIpIC0gcGFkZGluZywgdGV4dEhlaWdodCArIChwYWRkaW5nICogMikgKyBhcnJvd1Np
emUpOworICAgICAgICBDR1BhdGhBZGRMaW5lVG9Qb2ludChsYWJlbFBhdGguZ2V0KCksIDAsIC0o
dGV4dFdpZHRoIC8gMikgLSBwYWRkaW5nLCBhcnJvd1NpemUpOworICAgICAgICBDR1BhdGhBZGRM
aW5lVG9Qb2ludChsYWJlbFBhdGguZ2V0KCksIDAsIC1hcnJvd1NpemUsIGFycm93U2l6ZSk7Cisg
ICAgICAgIENHUGF0aEFkZExpbmVUb1BvaW50KGxhYmVsUGF0aC5nZXQoKSwgMCwgMCwgMCk7Cisg
ICAgICAgIENHUGF0aEFkZExpbmVUb1BvaW50KGxhYmVsUGF0aC5nZXQoKSwgMCwgYXJyb3dTaXpl
LCBhcnJvd1NpemUpOworICAgICAgICBDR1BhdGhBZGRMaW5lVG9Qb2ludChsYWJlbFBhdGguZ2V0
KCksIDAsICh0ZXh0V2lkdGggLyAyKSArIHBhZGRpbmcsIGFycm93U2l6ZSk7CisgICAgICAgIENH
UGF0aEFkZExpbmVUb1BvaW50KGxhYmVsUGF0aC5nZXQoKSwgMCwgKHRleHRXaWR0aCAvIDIpICsg
cGFkZGluZywgdGV4dEhlaWdodCArIChwYWRkaW5nICogMikgKyBhcnJvd1NpemUpOworICAgICAg
ICB0ZXh0UG9zaXRpb24gPSBXZWJDb3JlOjpGbG9hdFBvaW50KDAsICh0ZXh0SGVpZ2h0IC8gMikg
KyBhcnJvd1NpemUgKyBwYWRkaW5nKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBXZWJDb3Jl
OjpJbnNwZWN0b3JPdmVybGF5OjpMYWJlbEFycm93RGlyZWN0aW9uOjpSaWdodDoKKyAgICAgICAg
Q0dQYXRoTW92ZVRvUG9pbnQobGFiZWxQYXRoLmdldCgpLCAwLCAtdGV4dFdpZHRoIC0gKHBhZGRp
bmcgKiAyKSAtIGFycm93U2l6ZSwgKHRleHRIZWlnaHQgLyAyKSArIHBhZGRpbmcpOworICAgICAg
ICBDR1BhdGhBZGRMaW5lVG9Qb2ludChsYWJlbFBhdGguZ2V0KCksIDAsIC1hcnJvd1NpemUsICh0
ZXh0SGVpZ2h0IC8gMikgKyBwYWRkaW5nKTsKKyAgICAgICAgQ0dQYXRoQWRkTGluZVRvUG9pbnQo
bGFiZWxQYXRoLmdldCgpLCAwLCAtYXJyb3dTaXplLCBhcnJvd1NpemUpOworICAgICAgICBDR1Bh
dGhBZGRMaW5lVG9Qb2ludChsYWJlbFBhdGguZ2V0KCksIDAsIDAsIDApOworICAgICAgICBDR1Bh
dGhBZGRMaW5lVG9Qb2ludChsYWJlbFBhdGguZ2V0KCksIDAsIC1hcnJvd1NpemUsIC1hcnJvd1Np
emUpOworICAgICAgICBDR1BhdGhBZGRMaW5lVG9Qb2ludChsYWJlbFBhdGguZ2V0KCksIDAsIC1h
cnJvd1NpemUsIC0odGV4dEhlaWdodCAvIDIpIC0gcGFkZGluZyk7CisgICAgICAgIENHUGF0aEFk
ZExpbmVUb1BvaW50KGxhYmVsUGF0aC5nZXQoKSwgMCwgLXRleHRXaWR0aCAtIChwYWRkaW5nICog
MikgLSBhcnJvd1NpemUsIC0odGV4dEhlaWdodCAvIDIpIC0gcGFkZGluZyk7CisgICAgICAgIHRl
eHRQb3NpdGlvbiA9IFdlYkNvcmU6OkZsb2F0UG9pbnQoLSh0ZXh0V2lkdGggLyAyKSAtIGFycm93
U2l6ZSAtIHBhZGRpbmcsIDApOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFdlYkNvcmU6Oklu
c3BlY3Rvck92ZXJsYXk6OkxhYmVsQXJyb3dEaXJlY3Rpb246OkxlZnQ6CisgICAgICAgIENHUGF0
aE1vdmVUb1BvaW50KGxhYmVsUGF0aC5nZXQoKSwgMCwgdGV4dFdpZHRoICsgKHBhZGRpbmcgKiAy
KSArIGFycm93U2l6ZSwgKHRleHRIZWlnaHQgLyAyKSArIHBhZGRpbmcpOworICAgICAgICBDR1Bh
dGhBZGRMaW5lVG9Qb2ludChsYWJlbFBhdGguZ2V0KCksIDAsIGFycm93U2l6ZSwgKHRleHRIZWln
aHQgLyAyKSArIHBhZGRpbmcpOworICAgICAgICBDR1BhdGhBZGRMaW5lVG9Qb2ludChsYWJlbFBh
dGguZ2V0KCksIDAsIGFycm93U2l6ZSwgYXJyb3dTaXplKTsKKyAgICAgICAgQ0dQYXRoQWRkTGlu
ZVRvUG9pbnQobGFiZWxQYXRoLmdldCgpLCAwLCAwLCAwKTsKKyAgICAgICAgQ0dQYXRoQWRkTGlu
ZVRvUG9pbnQobGFiZWxQYXRoLmdldCgpLCAwLCBhcnJvd1NpemUsIC1hcnJvd1NpemUpOworICAg
ICAgICBDR1BhdGhBZGRMaW5lVG9Qb2ludChsYWJlbFBhdGguZ2V0KCksIDAsIGFycm93U2l6ZSwg
LSh0ZXh0SGVpZ2h0IC8gMikgLSBwYWRkaW5nKTsKKyAgICAgICAgQ0dQYXRoQWRkTGluZVRvUG9p
bnQobGFiZWxQYXRoLmdldCgpLCAwLCB0ZXh0V2lkdGggKyAocGFkZGluZyAqIDIpICsgYXJyb3dT
aXplLCAtKHRleHRIZWlnaHQgLyAyKSAtIHBhZGRpbmcpOworICAgICAgICB0ZXh0UG9zaXRpb24g
PSBXZWJDb3JlOjpGbG9hdFBvaW50KCh0ZXh0V2lkdGggLyAyKSArIGFycm93U2l6ZSArIHBhZGRp
bmcsIDApOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFdlYkNvcmU6Okluc3BlY3Rvck92ZXJs
YXk6OkxhYmVsQXJyb3dEaXJlY3Rpb246Ok5vbmU6CisgICAgICAgIENHUGF0aE1vdmVUb1BvaW50
KGxhYmVsUGF0aC5nZXQoKSwgMCwgMCwgMCk7CisgICAgICAgIENHUGF0aEFkZExpbmVUb1BvaW50
KGxhYmVsUGF0aC5nZXQoKSwgMCwgMCwgdGV4dEhlaWdodCArIChwYWRkaW5nICogMikpOworICAg
ICAgICBDR1BhdGhBZGRMaW5lVG9Qb2ludChsYWJlbFBhdGguZ2V0KCksIDAsIHRleHRXaWR0aCAr
IChwYWRkaW5nICogMiksIHRleHRIZWlnaHQgKyAocGFkZGluZyAqIDIpKTsKKyAgICAgICAgQ0dQ
YXRoQWRkTGluZVRvUG9pbnQobGFiZWxQYXRoLmdldCgpLCAwLCB0ZXh0V2lkdGggKyAocGFkZGlu
ZyAqIDIpLCAwKTsKKyAgICAgICAgdGV4dFBvc2l0aW9uID0gV2ViQ29yZTo6RmxvYXRQb2ludChw
YWRkaW5nICsgKHRleHRXaWR0aCAvIDIpLCBwYWRkaW5nICsgKHRleHRIZWlnaHQgLyAyKSk7Cisg
ICAgICAgIGJyZWFrOworICAgIH0KKworICAgIENHUGF0aENsb3NlU3VicGF0aChsYWJlbFBhdGgu
Z2V0KCkpOworCisgICAgQ0FMYXllciAqbGF5ZXIgPSBbQ0FMYXllciBsYXllcl07CisKKyAgICBD
QVNoYXBlTGF5ZXIgKmxhYmVsUGF0aExheWVyID0gW0NBU2hhcGVMYXllciBsYXllcl07CisgICAg
bGFiZWxQYXRoTGF5ZXIucGF0aCA9IGxhYmVsUGF0aC5nZXQoKTsKKyAgICBsYWJlbFBhdGhMYXll
ci5maWxsQ29sb3IgPSBjYWNoZWRDR0NvbG9yKGJhY2tncm91bmRDb2xvcik7CisgICAgbGFiZWxQ
YXRoTGF5ZXIuc3Ryb2tlQ29sb3IgPSBjYWNoZWRDR0NvbG9yKHN0cm9rZUNvbG9yKTsKKyAgICBs
YWJlbFBhdGhMYXllci5wb3NpdGlvbiA9IENHUG9pbnRNYWtlKHBvaW50LngoKSwgcG9pbnQueSgp
KTsKKyAgICBbbGF5ZXIgYWRkU3VibGF5ZXI6bGFiZWxQYXRoTGF5ZXJdOworCisgICAgQ0FUZXh0
TGF5ZXIgKnRleHRMYXllciA9IFtDQVRleHRMYXllciBsYXllcl07CisgICAgdGV4dExheWVyLmZy
YW1lID0gQ0dSZWN0TWFrZSgwLCAwLCB0ZXh0V2lkdGgsIHRleHRIZWlnaHQpOworICAgIHRleHRM
YXllci5zdHJpbmcgPSBsYWJlbDsKKyAgICB0ZXh0TGF5ZXIuZm9udCA9IGZvbnQucHJpbWFyeUZv
bnQoKS5nZXRDVEZvbnQoKTsKKyAgICB0ZXh0TGF5ZXIuZm9udFNpemUgPSAxMjsKKyAgICB0ZXh0
TGF5ZXIuYWxpZ25tZW50TW9kZSA9IGtDQUFsaWdubWVudExlZnQ7CisgICAgdGV4dExheWVyLmZv
cmVncm91bmRDb2xvciA9IENHQ29sb3JHZXRDb25zdGFudENvbG9yKGtDR0NvbG9yQmxhY2spOwor
ICAgIHRleHRMYXllci5wb3NpdGlvbiA9IENHUG9pbnRNYWtlKHRleHRQb3NpdGlvbi54KCkgKyBw
b2ludC54KCksIHRleHRQb3NpdGlvbi55KCkgKyBwb2ludC55KCkpOworICAgIHRleHRMYXllci5j
b250ZW50c1NjYWxlID0gW1tVSVNjcmVlbiBtYWluU2NyZWVuXSBzY2FsZV0gKiBzY2FsZTsKKyAg
ICBbbGF5ZXIgYWRkU3VibGF5ZXI6dGV4dExheWVyXTsKKworICAgIHJldHVybiBsYXllcjsKK30K
KworLSAoQ0FMYXllciAqKV9jcmVhdGVHcmlkT3ZlcmxheUxheWVyOihjb25zdCBXZWJDb3JlOjpJ
bnNwZWN0b3JPdmVybGF5OjpIaWdobGlnaHQ6OkdyaWRIaWdobGlnaHRPdmVybGF5JilvdmVybGF5
IHNjYWxlOihkb3VibGUpc2NhbGUKIHsKKyAgICAvLyBLZWVwIGltcGxlbWVudGF0aW9uIHJvdWdo
bHkgZXF1aXZpbGVudCB0byBgV2ViQ29yZTo6SW5zcGVjdG9yT3ZlcmxheTo6ZHJhd0dyaWRPdmVy
bGF5YC4KKyAgICBDQUxheWVyICpsYXllciA9IFtDQUxheWVyIGxheWVyXTsKKworICAgIGF1dG8g
Z3JpZExpbmVzUGF0aCA9IGFkb3B0Q0YoQ0dQYXRoQ3JlYXRlTXV0YWJsZSgpKTsKKyAgICBmb3Ig
KGF1dG8gZ3JpZExpbmUgOiBvdmVybGF5LmdyaWRMaW5lcykgeworICAgICAgICBDR1BhdGhNb3Zl
VG9Qb2ludChncmlkTGluZXNQYXRoLmdldCgpLCAwLCBncmlkTGluZS5zdGFydCgpLngoKSwgZ3Jp
ZExpbmUuc3RhcnQoKS55KCkpOworICAgICAgICBDR1BhdGhBZGRMaW5lVG9Qb2ludChncmlkTGlu
ZXNQYXRoLmdldCgpLCAwLCBncmlkTGluZS5lbmQoKS54KCksIGdyaWRMaW5lLmVuZCgpLnkoKSk7
CisgICAgfQorICAgIENBU2hhcGVMYXllciAqZ3JpZExpbmVzTGF5ZXIgPSBbQ0FTaGFwZUxheWVy
IGxheWVyXTsKKyAgICBncmlkTGluZXNMYXllci5wYXRoID0gZ3JpZExpbmVzUGF0aC5nZXQoKTsK
KyAgICBncmlkTGluZXNMYXllci5saW5lV2lkdGggPSAxOworICAgIGdyaWRMaW5lc0xheWVyLnN0
cm9rZUNvbG9yID0gY2FjaGVkQ0dDb2xvcihvdmVybGF5LmNvbG9yKTsKKyAgICBbbGF5ZXIgYWRk
U3VibGF5ZXI6Z3JpZExpbmVzTGF5ZXJdOworCisgICAgZm9yIChhdXRvIGdhcFF1YWQgOiBvdmVy
bGF5LmdhcHMpCisgICAgICAgIFtsYXllciBhZGRTdWJsYXllcjpjcmVhdGVMYXlvdXRIYXRjaGlu
Z0xheWVyKGdhcFF1YWQsIG92ZXJsYXkuY29sb3IpXTsKKworICAgIGZvciAoYXV0byBhcmVhIDog
b3ZlcmxheS5hcmVhcykgeworICAgICAgICBDQVNoYXBlTGF5ZXIgKmFyZWFMYXllciA9IFtDQVNo
YXBlTGF5ZXIgbGF5ZXJdOworICAgICAgICBsYXllclBhdGgoYXJlYUxheWVyLCBhcmVhLnF1YWQp
OworICAgICAgICBhcmVhTGF5ZXIubGluZVdpZHRoID0gMzsKKyAgICAgICAgYXJlYUxheWVyLmZp
bGxDb2xvciA9IENHQ29sb3JHZXRDb25zdGFudENvbG9yKGtDR0NvbG9yQ2xlYXIpOworICAgICAg
ICBhcmVhTGF5ZXIuc3Ryb2tlQ29sb3IgPSBjYWNoZWRDR0NvbG9yKG92ZXJsYXkuY29sb3IpOwor
ICAgICAgICBbbGF5ZXIgYWRkU3VibGF5ZXI6YXJlYUxheWVyXTsKKyAgICB9CisKKyAgICBjb25z
dGV4cHIgYXV0byB0cmFuc2x1Y2VudExhYmVsQmFja2dyb3VuZENvbG9yID0gV2ViQ29yZTo6Q29s
b3I6OndoaXRlLmNvbG9yV2l0aEFscGhhQnl0ZSgxNTMpOworCisgICAgZm9yIChhdXRvIGFyZWEg
OiBvdmVybGF5LmFyZWFzKQorICAgICAgICBbbGF5ZXIgYWRkU3VibGF5ZXI6Y3JlYXRlTGF5b3V0
TGFiZWxMYXllcihhcmVhLm5hbWUsIGFyZWEucXVhZC5wMSgpLCBXZWJDb3JlOjpJbnNwZWN0b3JP
dmVybGF5OjpMYWJlbEFycm93RGlyZWN0aW9uOjpOb25lLCB0cmFuc2x1Y2VudExhYmVsQmFja2dy
b3VuZENvbG9yLCBvdmVybGF5LmNvbG9yLCBzY2FsZSwgYXJlYS5xdWFkLmJvdW5kaW5nQm94KCku
d2lkdGgoKSldOworCisgICAgZm9yIChhdXRvIGxhYmVsIDogb3ZlcmxheS5sYWJlbHMpCisgICAg
ICAgIFtsYXllciBhZGRTdWJsYXllcjpjcmVhdGVMYXlvdXRMYWJlbExheWVyKGxhYmVsLnRleHQs
IGxhYmVsLmxvY2F0aW9uLCBsYWJlbC5hcnJvd0RpcmVjdGlvbiwgbGFiZWwuYmFja2dyb3VuZENv
bG9yLCBvdmVybGF5LmNvbG9yLCBzY2FsZSldOworCisgICAgcmV0dXJuIGxheWVyOworfQorCist
ICh2b2lkKXVwZGF0ZTooY29uc3QgV2ViQ29yZTo6SW5zcGVjdG9yT3ZlcmxheTo6SGlnaGxpZ2h0
JiloaWdobGlnaHQgc2NhbGU6KGRvdWJsZSlzY2FsZQoreworICAgIFtzZWxmIF9yZW1vdmVBbGxM
YXllcnNdOworCiAgICAgaWYgKGhpZ2hsaWdodC50eXBlID09IFdlYkNvcmU6Okluc3BlY3Rvck92
ZXJsYXk6OkhpZ2hsaWdodDo6VHlwZTo6Tm9kZSB8fCBoaWdobGlnaHQudHlwZSA9PSBXZWJDb3Jl
OjpJbnNwZWN0b3JPdmVybGF5OjpIaWdobGlnaHQ6OlR5cGU6Ok5vZGVMaXN0KQogICAgICAgICBb
c2VsZiBfbGF5b3V0Rm9yTm9kZUxpc3RIaWdobGlnaHQ6aGlnaGxpZ2h0XTsKICAgICBlbHNlIGlm
IChoaWdobGlnaHQudHlwZSA9PSBXZWJDb3JlOjpJbnNwZWN0b3JPdmVybGF5OjpIaWdobGlnaHQ6
OlR5cGU6OlJlY3RzKQogICAgICAgICBbc2VsZiBfbGF5b3V0Rm9yUmVjdHNIaWdobGlnaHQ6aGln
aGxpZ2h0XTsKKworICAgIFtzZWxmIF9jcmVhdGVHcmlkT3ZlcmxheUxheWVyczpoaWdobGlnaHQg
c2NhbGU6c2NhbGVdOwogfQogCiBAZW5kCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJv
Y2Vzcy9pb3MvV0tDb250ZW50Vmlldy5tbSBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL2lvcy9X
S0NvbnRlbnRWaWV3Lm1tCmluZGV4IDE1YjllN2Q2ZmExMDg5MzMxZmY0ZjY4OTdjYWM4Y2JhNDRh
OTI2YmMuLmY0ZDY2NWE5NjRlYmFjZDU5NGU5ZGZlZGQxODk3MzcxZTUxNmRkMDcgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL2lvcy9XS0NvbnRlbnRWaWV3Lm1tCisrKyBiL1Nv
dXJjZS9XZWJLaXQvVUlQcm9jZXNzL2lvcy9XS0NvbnRlbnRWaWV3Lm1tCkBAIC0zNjUsNyArMzY1
LDcgQEAgLSAodm9pZClfc2hvd0luc3BlY3RvckhpZ2hsaWdodDooY29uc3QgV2ViQ29yZTo6SW5z
cGVjdG9yT3ZlcmxheTo6SGlnaGxpZ2h0JiloaWcKICAgICAgICAgW3NlbGYgaW5zZXJ0U3Vidmll
dzpfaW5zcGVjdG9ySGlnaGxpZ2h0Vmlldy5nZXQoKSBhYm92ZVN1YnZpZXc6X3Jvb3RDb250ZW50
Vmlldy5nZXQoKV07CiAgICAgfQogCi0gICAgW19pbnNwZWN0b3JIaWdobGlnaHRWaWV3IHVwZGF0
ZTpoaWdobGlnaHRdOworICAgIFtfaW5zcGVjdG9ySGlnaGxpZ2h0VmlldyB1cGRhdGU6aGlnaGxp
Z2h0IHNjYWxlOltzZWxmIF9jb250ZW50Wm9vbVNjYWxlXV07CiB9CiAKIC0gKHZvaWQpX2hpZGVJ
bnNwZWN0b3JIaWdobGlnaHQK
</data>
<flag name="commit-queue"
          id="443270"
          type_id="3"
          status="-"
          setter="ews-feeder"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>423788</attachid>
            <date>2021-03-19 15:37:36 -0700</date>
            <delta_ts>2021-03-21 16:48:54 -0700</delta_ts>
            <desc>Patch v1.1 - Add FloatLine.h to Headers.cmake</desc>
            <filename>bug-223396-20210319153735.patch</filename>
            <type>text/plain</type>
            <size>49823</size>
            <attacher name="Patrick Angle">pangle</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjc0NTA4CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNGNjMjE2NDg3YjMyNjhi
NjAzOTQ5YzcxMjJhMzE1YzEyNzkwYWUxZi4uZTNmZmNmYTAyNWY2MzM3N2JhOTBkMTg3MDBkNmZl
NGRiM2I2ZjY0OSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDMyIEBACisyMDIxLTAzLTE5ICBQYXRy
aWNrIEFuZ2xlICA8cGFuZ2xlQGFwcGxlLmNvbT4KKworICAgICAgICBXZWIgSW5zcGVjdG9yOiBQ
b3J0IGdyaWQgb3ZlcmxheSBkcmF3aW5nIHRvIGlPUworICAgICAgICBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjIzMzk2CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9C
T0RZIChPT1BTISkuCisKKyAgICAgICAgRW5hYmxlIEdyaWQgT3ZlcmxheXMgdG8gYmUgZHJhd24g
b24gaU9TIGJlIGluY2x1ZGluZyBjb21wdXRlZCBvdmVybGF5IG9iamVjdHMgaW4gdGhlCisgICAg
ICAgIGBJbnNwZWN0b3JPdmVybGF5OjpIaWdobGlnaHRgLiBTb21lIHJlZmFjdG9yaW5nIHdhcyBh
bHNvIGRvbmUgdG8gcmVkdWNlIGNvZGUgZHVwbGljYXRpb24gaW4gdGhlIG5vcm1hbCBhbmQgaU9T
CisgICAgICAgIHBhdGhzLgorCisgICAgICAgICogSGVhZGVycy5jbWFrZToKKyAgICAgICAgKiBX
ZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgIC0gRmxvYXRMaW5lIHNo
b3VsZCBiZSBhY2Nlc3NpYmxlIGZyb20gYFdlYktpdDo6KmAKKyAgICAgICAgKiBpbnNwZWN0b3Iv
SW5zcGVjdG9yT3ZlcmxheS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JPdmVybGF5
OjpwYWludCk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JPdmVybGF5OjpnZXRIaWdobGln
aHQpOgorICAgICAgICAtIEFkZCBgR3JpZEhpZ2hsaWdodE92ZXJsYXlgcyB0byB0aGUgaGlnaGxp
Z2h0IG9iamVjdCBmb3IgaU9TLgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yT3ZlcmxheTo6
ZHJhd0dyaWRPdmVybGF5KToKKyAgICAgICAgKFdlYkNvcmU6OmJ1aWxkTGFiZWwpOgorICAgICAg
ICAoV2ViQ29yZTo6SW5zcGVjdG9yT3ZlcmxheTo6YnVpbGRHcmlkT3ZlcmxheSk6CisgICAgICAg
IC0gUmVmYWN0b3JlZCBhY3R1YWwgZHJhd2luZyBpbnRvIGEgc2VwYXJhdGUgbWV0aG9kIHRvIHJl
ZHVjZSB0aGUgYW1vdW50IG9mIGNvZGUgZHVwbGljYXRpb24gbmVlZGVkIGJldHdlZW4gdGhlCisg
ICAgICAgIG5vcm1hbCBwYXRoIGFuZCB0aGUgaU9TIHBhdGguCisgICAgICAgICogaW5zcGVjdG9y
L0luc3BlY3Rvck92ZXJsYXkuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9GbG9hdExp
bmUuaDoKKyAgICAgICAgKFdlYkNvcmU6OkZsb2F0TGluZTo6ZW5jb2RlIGNvbnN0KToKKyAgICAg
ICAgKFdlYkNvcmU6OkZsb2F0TGluZTo6ZGVjb2RlKToKKyAgICAgICAgLSBTdXBwb3J0IGVuY29k
ZS9kZWNvZGUgYXMgcGFydCBvZiBzZXJpYWxpemF0aW9uIG9mIGBJbnNwZWN0b3JPdmVybGF5OjpI
aWdobGlnaHRgCisKIDIwMjEtMDMtMTYgIE1lZ2FuIEdhcmRuZXIgIDxtZWdhbl9nYXJkbmVyQGFw
cGxlLmNvbT4KIAogICAgICAgICBBdHRlbXB0IHRvIHJlc3RvcmUgaGlnaGxpZ2h0cyBhZnRlciBw
YWludCB0byBhY2NvdW50IGZvciBuZXdseSBsb2FkZWQgY29udGVudC4KZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJLaXQvQ2hhbmdlTG9nIGIvU291cmNlL1dlYktpdC9DaGFuZ2VMb2cKaW5kZXggOWVl
NzliNDA2MWI2ZTUxYjZmYzNjN2IzOWY1ZTE0ZDU1ZTQ2ZDM3NS4uYzI2MGMyMTc1NGI3ZjJjN2Uw
MTVlZjIwMjkyYmNkNzhmNTEzOWU4MSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9DaGFuZ2VM
b2cKKysrIGIvU291cmNlL1dlYktpdC9DaGFuZ2VMb2cKQEAgLTEsMyArMSw0OCBAQAorMjAyMS0w
My0xOSAgUGF0cmljayBBbmdsZSAgPHBhbmdsZUBhcHBsZS5jb20+CisKKyAgICAgICAgV2ViIElu
c3BlY3RvcjogUG9ydCBncmlkIG92ZXJsYXkgZHJhd2luZyB0byBpT1MKKyAgICAgICAgaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIyMzM5NgorCisgICAgICAgIFJldmll
d2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFBvcnQgZHJhd2luZyByb3V0aW5lcyBm
cm9tIGBXZWJDb3JlOjpJbnNwZWN0b3JPdmVybGF5YCB0byB1c2UgYENBTGF5ZXJgcyBvbiBpT1Mg
dG8gZW5hYmxlIGRyYXdpbmcgZ3JpZCBvdmVybGF5cworICAgICAgICBvbiBpT1MuIERyYXdpbmcg
bG9naWMgaXMsIGFzIG11Y2ggYXMgcG9zc2libGUsIGVxdWl2YWxlbnQgdG8gdGhhdCBkZWZpbmVk
IGluIGBXZWJDb3JlOjpJbnNwZWN0b3JPdmVybGF5YCwgd2l0aAorICAgICAgICBjaGFuZ2VzIHRv
IGZpdCB0aGUgQ0FMYXllciBtb2RlbC4KKworICAgICAgICBUaGUgZXhpc3RpbmcgYEluc3BlY3Rv
ck92ZXJsYXk6OkhpZ2hsaWdodGAgaGFzIGJlZW4gYXVnbWVudGVkIHRvIHByb3ZpZGUgaW5mb3Jt
YXRpb24gYWJvdXQgdGhlIGdyaWQgb3ZlcmxheXMKKyAgICAgICAgdGhhdCBzaG91bGQgYmUgZHJh
d24uCisKKyAgICAgICAgKiBTaGFyZWQvV2ViQ29yZUFyZ3VtZW50Q29kZXJzLmNwcDoKKyAgICAg
ICAgKElQQzo6QXJndW1lbnRDb2RlcjxJbnNwZWN0b3JPdmVybGF5OjpIaWdobGlnaHQ+OjplbmNv
ZGUpOgorICAgICAgICAoSVBDOjpBcmd1bWVudENvZGVyPEluc3BlY3Rvck92ZXJsYXk6OkhpZ2hs
aWdodD46OmRlY29kZSk6CisgICAgICAgIChJUEM6OkFyZ3VtZW50Q29kZXI8SW5zcGVjdG9yT3Zl
cmxheTo6SGlnaGxpZ2h0OjpHcmlkSGlnaGxpZ2h0T3ZlcmxheT46OmVuY29kZSk6CisgICAgICAg
IChJUEM6OkFyZ3VtZW50Q29kZXI8SW5zcGVjdG9yT3ZlcmxheTo6SGlnaGxpZ2h0OjpHcmlkSGln
aGxpZ2h0T3ZlcmxheT46OmRlY29kZSk6CisgICAgICAgIChJUEM6OkFyZ3VtZW50Q29kZXI8SW5z
cGVjdG9yT3ZlcmxheTo6SGlnaGxpZ2h0OjpHcmlkSGlnaGxpZ2h0T3ZlcmxheTo6TGFiZWw+Ojpl
bmNvZGUpOgorICAgICAgICAoSVBDOjpBcmd1bWVudENvZGVyPEluc3BlY3Rvck92ZXJsYXk6Okhp
Z2hsaWdodDo6R3JpZEhpZ2hsaWdodE92ZXJsYXk6OkxhYmVsPjo6ZGVjb2RlKToKKyAgICAgICAg
KElQQzo6QXJndW1lbnRDb2RlcjxJbnNwZWN0b3JPdmVybGF5OjpIaWdobGlnaHQ6OkdyaWRIaWdo
bGlnaHRPdmVybGF5OjpBcmVhPjo6ZW5jb2RlKToKKyAgICAgICAgKElQQzo6QXJndW1lbnRDb2Rl
cjxJbnNwZWN0b3JPdmVybGF5OjpIaWdobGlnaHQ6OkdyaWRIaWdobGlnaHRPdmVybGF5OjpBcmVh
Pjo6ZGVjb2RlKToKKyAgICAgICAgKiBTaGFyZWQvV2ViQ29yZUFyZ3VtZW50Q29kZXJzLmg6Cisg
ICAgICAgIC0gUHJvdmlkZSBlbmNvZGluZyBhbmQgZGVjb2RpbmcgZm9yIG5ldyBIaWdobGlnaHQg
cHJvcGVydGllcyByZWxhdGVkIHRvIEdyaWRIaWdobGlnaHRPdmVybGF5LgorICAgICAgICAqIFVJ
UHJvY2Vzcy9JbnNwZWN0b3IvaW9zL1dLSW5zcGVjdG9ySGlnaGxpZ2h0Vmlldy5oOgorICAgICAg
ICAqIFVJUHJvY2Vzcy9JbnNwZWN0b3IvaW9zL1dLSW5zcGVjdG9ySGlnaGxpZ2h0Vmlldy5tbToK
KyAgICAgICAgKC1bV0tJbnNwZWN0b3JIaWdobGlnaHRWaWV3IGluaXRXaXRoRnJhbWU6XSk6Cisg
ICAgICAgICgtW1dLSW5zcGVjdG9ySGlnaGxpZ2h0VmlldyBfcmVtb3ZlQWxsTGF5ZXJzXSk6Cisg
ICAgICAgICgtW1dLSW5zcGVjdG9ySGlnaGxpZ2h0VmlldyBfY3JlYXRlTGF5ZXJzOl0pOgorICAg
ICAgICAobGF5ZXJQYXRoKToKKyAgICAgICAgLSBQYXRoIHNob3VsZCBiZSBjbG9zZWQgc28gdGhh
dCBvYmplY3RzIGJlaW5nIHN0cm9rZWQgYXJlIHN0cm9rZWQgb24gYWxsIGVkZ2VzLgorICAgICAg
ICAoLVtXS0luc3BlY3RvckhpZ2hsaWdodFZpZXcgX2xheW91dEZvck5vZGVMaXN0SGlnaGxpZ2h0
Ol0pOgorICAgICAgICAoLVtXS0luc3BlY3RvckhpZ2hsaWdodFZpZXcgX2xheW91dEZvclJlY3Rz
SGlnaGxpZ2h0Ol0pOgorICAgICAgICAoLVtXS0luc3BlY3RvckhpZ2hsaWdodFZpZXcgX2NyZWF0
ZUdyaWRPdmVybGF5TGF5ZXJzOnNjYWxlOl0pOgorICAgICAgICAoY3JlYXRlTGF5b3V0SGF0Y2hp
bmdMYXllcik6CisgICAgICAgIChjcmVhdGVMYXlvdXRMYWJlbExheWVyKToKKyAgICAgICAgKC1b
V0tJbnNwZWN0b3JIaWdobGlnaHRWaWV3IF9jcmVhdGVHcmlkT3ZlcmxheUxheWVyOnNjYWxlOl0p
OgorICAgICAgICAtIENyZWF0ZSBsYXllcnMgZm9yIHRoZSBncmlkIG92ZXJsYXlzLgorICAgICAg
ICAoLVtXS0luc3BlY3RvckhpZ2hsaWdodFZpZXcgdXBkYXRlOnNjYWxlOl0pOgorICAgICAgICAt
IE9idGFpbiB0aGUgdmlldyBzY2FsZSBzbyB0aGF0IGBDQVRleHRMYXllcmBzIGNhbiBoYXZlIHRo
ZSBjb3JyZWN0IGNvbnRlbnQgc2NhbGUgc2V0LgorICAgICAgICAoLVtXS0luc3BlY3RvckhpZ2hs
aWdodFZpZXcgdXBkYXRlOl0pOiBEZWxldGVkLgorICAgICAgICAqIFVJUHJvY2Vzcy9pb3MvV0tD
b250ZW50Vmlldy5tbToKKyAgICAgICAgKC1bV0tDb250ZW50VmlldyBfc2hvd0luc3BlY3Rvckhp
Z2hsaWdodDpdKToKKwogMjAyMS0wMy0xNiAgUGVyIEFybmUgVm9sbGFuICA8cHZvbGxhbkBhcHBs
ZS5jb20+CiAKICAgICAgICAgVGhlIFdlYkNvbnRlbnQgcHJvY2VzcyBjcmFzaGVzIHdoZW4gbGF1
bmNoaW5nIFNhZmFyaQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvSGVhZGVycy5jbWFrZSBi
L1NvdXJjZS9XZWJDb3JlL0hlYWRlcnMuY21ha2UKaW5kZXggM2JjN2JmNjdlYTAxNDdkOTk4OGQ1
NDczODkwZGIwOWJjNzU0Mzg2NC4uOGM2NGM0OTI3MDhjMGNmNzhhYzBlZjhhYmUwYTgyYTE2YTZh
NmM3ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvSGVhZGVycy5jbWFrZQorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9IZWFkZXJzLmNtYWtlCkBAIC0xMTgyLDYgKzExODIsNyBAQCBzZXQoV2ViQ29y
ZV9QUklWQVRFX0ZSQU1FV09SS19IRUFERVJTCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvRGlzcGxh
eVJlZnJlc2hNb25pdG9yQ2xpZW50LmgKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9EaXNwbGF5UmVm
cmVzaE1vbml0b3JNYW5hZ2VyLmgKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9FeHRlbnNpb25zR0wu
aAorICAgIHBsYXRmb3JtL2dyYXBoaWNzL0Zsb2F0TGluZS5oCiAgICAgcGxhdGZvcm0vZ3JhcGhp
Y3MvRmxvYXRQb2ludC5oCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvRmxvYXRQb2ludDNELmgKICAg
ICBwbGF0Zm9ybS9ncmFwaGljcy9GbG9hdFF1YWQuaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qIGIvU291cmNlL1dlYkNvcmUvV2Vi
Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCmluZGV4IDE4MmI5YTVhNTA0Y2E4NzY4Yzhm
YjlkYjc5NTBjMjFiMjBjY2Y0NzguLjU4MWJjOWM2MWYyM2Y2ZTFkM2Y0OThkZjkzZTkzNTZhYzhj
MTYyNGYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2pl
Y3QucGJ4cHJvagorKysgYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0
LnBieHByb2oKQEAgLTg2Miw3ICs4NjIsNyBAQAogCQkyRTQzNDY1NTBGNTQ2QTgyMDBCMEYxQkEg
LyogV29ya2VyVGhyZWFkLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSAyRTQzNDY0MzBGNTQ2QTgyMDBCMEYxQkEgLyogV29ya2VyVGhyZWFkLmggKi87IHNl
dHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMkU3NTg0MUUxMjc3
OUFEQTAwNjI2MjhCIC8qIEZpbGVSZWFkZXJMb2FkZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDJFNzU4NDFCMTI3NzlBREEwMDYyNjI4QiAvKiBGaWxl
UmVhZGVyTG9hZGVyLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsg
fTsgfTsKIAkJMkU3NTg0MUYxMjc3OUFEQTAwNjI2MjhCIC8qIEZpbGVSZWFkZXJMb2FkZXJDbGll
bnQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDJFNzU4
NDFDMTI3NzlBREEwMDYyNjI4QiAvKiBGaWxlUmVhZGVyTG9hZGVyQ2xpZW50LmggKi87IHNldHRp
bmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKLQkJMkU4ODhDQUEyNUY2QTQx
MTAwNTc5MTRBIC8qIEZsb2F0TGluZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gMkU4ODhDQTgyNUY2QTQxMTAwNTc5MTRBIC8qIEZsb2F0TGluZS5oICov
OyB9OworCQkyRTg4OENBQTI1RjZBNDExMDA1NzkxNEEgLyogRmxvYXRMaW5lLmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyRTg4OENBODI1RjZBNDExMDA1
NzkxNEEgLyogRmxvYXRMaW5lLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0
ZSwgKTsgfTsgfTsKIAkJMkU5NEY0M0MxMTkyMDdEQTAwQjdGNzVEIC8qIEpTRmlsZVJlYWRlci5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMkU5NEY0M0Ex
MTkyMDdEQTAwQjdGNzVEIC8qIEpTRmlsZVJlYWRlci5oICovOyB9OwogCQkyRTlCNUQ4RjFCNjZB
OTRFMDA4QzZBMjQgLyogV2hlZWxFdmVudERlbHRhRmlsdGVyTWFjLmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyRTlCNUQ4RTFCNjZBOTRFMDA4QzZBMjQg
LyogV2hlZWxFdmVudERlbHRhRmlsdGVyTWFjLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMg
PSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMkVBNzY4MDQwRkU3MTI2NDAwQUI5QzhBIC8qIFdvcmtl
clNjcmlwdExvYWRlckNsaWVudC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gMkVBNzY4MDMwRkU3MTI2NDAwQUI5QzhBIC8qIFdvcmtlclNjcmlwdExvYWRl
ckNsaWVudC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yT3ZlcmxheS5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yT3ZlcmxheS5jcHAKaW5kZXgg
OTJhZmY1M2M4NmEwZjA4NzIyNWRiNjIwNzgwNmQwMzlkNGJlZjhmMC4uMjA4YThhOTMwZTM0OTVh
Mzc3OGE1YjM4MTBjYzYyNzU4NDA0ZTkzNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5z
cGVjdG9yL0luc3BlY3Rvck92ZXJsYXkuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rv
ci9JbnNwZWN0b3JPdmVybGF5LmNwcApAQCAtNDI3LDggKzQyNywxMCBAQCB2b2lkIEluc3BlY3Rv
ck92ZXJsYXk6OnBhaW50KEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCkKICAgICAgICAgcnVsZXJF
eGNsdXNpb24udGl0bGVQYXRoID0gbm9kZVJ1bGVyRXhjbHVzaW9uLnRpdGxlUGF0aDsKICAgICB9
CiAKLSAgICBmb3IgKGNvbnN0IEluc3BlY3Rvck92ZXJsYXk6OkdyaWQmIGdyaWRPdmVybGF5IDog
bV9hY3RpdmVHcmlkT3ZlcmxheXMpCi0gICAgICAgIGRyYXdHcmlkT3ZlcmxheShjb250ZXh0LCBn
cmlkT3ZlcmxheSk7CisgICAgZm9yIChjb25zdCBJbnNwZWN0b3JPdmVybGF5OjpHcmlkJiBncmlk
T3ZlcmxheSA6IG1fYWN0aXZlR3JpZE92ZXJsYXlzKSB7CisgICAgICAgIGlmIChhdXRvIGdyaWRI
aWdobGlnaHRPdmVybGF5ID0gYnVpbGRHcmlkT3ZlcmxheShncmlkT3ZlcmxheSkpCisgICAgICAg
ICAgICBkcmF3R3JpZE92ZXJsYXkoY29udGV4dCwgKmdyaWRIaWdobGlnaHRPdmVybGF5KTsKKyAg
ICB9CiAKICAgICBpZiAoIW1fcGFpbnRSZWN0cy5pc0VtcHR5KCkpCiAgICAgICAgIGRyYXdQYWlu
dFJlY3RzKGNvbnRleHQsIG1fcGFpbnRSZWN0cyk7CkBAIC00MzcsMTIgKzQzOSwxMiBAQCB2b2lk
IEluc3BlY3Rvck92ZXJsYXk6OnBhaW50KEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCkKICAgICAg
ICAgZHJhd1J1bGVycyhjb250ZXh0LCBydWxlckV4Y2x1c2lvbik7CiB9CiAKLXZvaWQgSW5zcGVj
dG9yT3ZlcmxheTo6Z2V0SGlnaGxpZ2h0KEluc3BlY3Rvck92ZXJsYXk6OkhpZ2hsaWdodCYgaGln
aGxpZ2h0LCBJbnNwZWN0b3JPdmVybGF5OjpDb29yZGluYXRlU3lzdGVtIGNvb3JkaW5hdGVTeXN0
ZW0pIGNvbnN0Cit2b2lkIEluc3BlY3Rvck92ZXJsYXk6OmdldEhpZ2hsaWdodChJbnNwZWN0b3JP
dmVybGF5OjpIaWdobGlnaHQmIGhpZ2hsaWdodCwgSW5zcGVjdG9yT3ZlcmxheTo6Q29vcmRpbmF0
ZVN5c3RlbSBjb29yZGluYXRlU3lzdGVtKQogewotICAgIGlmICghbV9oaWdobGlnaHROb2RlICYm
ICFtX2hpZ2hsaWdodFF1YWQgJiYgIW1faGlnaGxpZ2h0Tm9kZUxpc3QpCisgICAgaWYgKCFtX2hp
Z2hsaWdodE5vZGUgJiYgIW1faGlnaGxpZ2h0UXVhZCAmJiAhbV9oaWdobGlnaHROb2RlTGlzdCAm
JiAhbV9hY3RpdmVHcmlkT3ZlcmxheXMuc2l6ZSgpKQogICAgICAgICByZXR1cm47CiAKLSAgICBo
aWdobGlnaHQudHlwZSA9IEluc3BlY3Rvck92ZXJsYXk6OkhpZ2hsaWdodDo6VHlwZTo6UmVjdHM7
CisgICAgaGlnaGxpZ2h0LnR5cGUgPSBJbnNwZWN0b3JPdmVybGF5OjpIaWdobGlnaHQ6OlR5cGU6
Ok5vbmU7CiAgICAgaWYgKG1faGlnaGxpZ2h0Tm9kZSkKICAgICAgICAgYnVpbGROb2RlSGlnaGxp
Z2h0KCptX2hpZ2hsaWdodE5vZGUsIG1fbm9kZUhpZ2hsaWdodENvbmZpZywgaGlnaGxpZ2h0LCBj
b29yZGluYXRlU3lzdGVtKTsKICAgICBlbHNlIGlmIChtX2hpZ2hsaWdodE5vZGVMaXN0KSB7CkBA
IC00NTQsOCArNDU2LDE1IEBAIHZvaWQgSW5zcGVjdG9yT3ZlcmxheTo6Z2V0SGlnaGxpZ2h0KElu
c3BlY3Rvck92ZXJsYXk6OkhpZ2hsaWdodCYgaGlnaGxpZ2h0LCBJbnNwCiAgICAgICAgICAgICAg
ICAgaGlnaGxpZ2h0LnF1YWRzLmFwcGVuZFZlY3Rvcihub2RlSGlnaGxpZ2h0LnF1YWRzKTsKICAg
ICAgICAgfQogICAgICAgICBoaWdobGlnaHQudHlwZSA9IEluc3BlY3Rvck92ZXJsYXk6OkhpZ2hs
aWdodDo6VHlwZTo6Tm9kZUxpc3Q7Ci0gICAgfSBlbHNlCisgICAgfSBlbHNlIGlmIChtX2hpZ2hs
aWdodFF1YWQpIHsKKyAgICAgICAgaGlnaGxpZ2h0LnR5cGUgPSBJbnNwZWN0b3JPdmVybGF5OjpI
aWdobGlnaHQ6OlR5cGU6OlJlY3RzOwogICAgICAgICBidWlsZFF1YWRIaWdobGlnaHQoKm1faGln
aGxpZ2h0UXVhZCwgbV9xdWFkSGlnaGxpZ2h0Q29uZmlnLCBoaWdobGlnaHQpOworICAgIH0KKyAg
ICBjb25zdGV4cHIgYm9vbCBvZmZzZXRCb3VuZHNCeVNjcm9sbCA9IHRydWU7CisgICAgZm9yIChj
b25zdCBJbnNwZWN0b3JPdmVybGF5OjpHcmlkJiBncmlkT3ZlcmxheSA6IG1fYWN0aXZlR3JpZE92
ZXJsYXlzKSB7CisgICAgICAgIGlmIChhdXRvIGdyaWRIaWdobGlnaHRPdmVybGF5ID0gYnVpbGRH
cmlkT3ZlcmxheShncmlkT3ZlcmxheSwgb2Zmc2V0Qm91bmRzQnlTY3JvbGwpKQorICAgICAgICAg
ICAgaGlnaGxpZ2h0LmdyaWRIaWdobGlnaHRPdmVybGF5cy5hcHBlbmQoKmdyaWRIaWdobGlnaHRP
dmVybGF5KTsKKyAgICB9CiB9CiAKIHZvaWQgSW5zcGVjdG9yT3ZlcmxheTo6aGlkZUhpZ2hsaWdo
dCgpCkBAIC0xMjgxLDYgKzEyOTAsMzcgQEAgdm9pZCBJbnNwZWN0b3JPdmVybGF5OjpkcmF3TGF5
b3V0TGFiZWwoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0LCBTdHJpbmcgbGFiZWwsIEYKICAgICBj
b250ZXh0LmRyYXdUZXh0KGZvbnQsIFRleHRSdW4obGFiZWwpLCB0ZXh0UG9zaXRpb24pOwogfQog
Cit2b2lkIEluc3BlY3Rvck92ZXJsYXk6OmRyYXdHcmlkT3ZlcmxheShHcmFwaGljc0NvbnRleHQm
IGNvbnRleHQsIGNvbnN0IEluc3BlY3Rvck92ZXJsYXk6OkhpZ2hsaWdodDo6R3JpZEhpZ2hsaWdo
dE92ZXJsYXkmIGdyaWRPdmVybGF5KQoreworICAgIGNvbnN0ZXhwciBhdXRvIHRyYW5zbHVjZW50
TGFiZWxCYWNrZ3JvdW5kQ29sb3IgPSBDb2xvcjo6d2hpdGUuY29sb3JXaXRoQWxwaGFCeXRlKDE1
Myk7CisKKyAgICBHcmFwaGljc0NvbnRleHRTdGF0ZVNhdmVyIHNhdmVyKGNvbnRleHQpOworICAg
IGNvbnRleHQuc2V0U3Ryb2tlVGhpY2tuZXNzKDEpOworICAgIGNvbnRleHQuc2V0U3Ryb2tlQ29s
b3IoZ3JpZE92ZXJsYXkuY29sb3IpOworCisgICAgUGF0aCBncmlkTGluZXNQYXRoOworICAgIGZv
ciAoYXV0byBncmlkTGluZSA6IGdyaWRPdmVybGF5LmdyaWRMaW5lcykgeworICAgICAgICBncmlk
TGluZXNQYXRoLm1vdmVUbyhncmlkTGluZS5zdGFydCgpKTsKKyAgICAgICAgZ3JpZExpbmVzUGF0
aC5hZGRMaW5lVG8oZ3JpZExpbmUuZW5kKCkpOworICAgIH0KKyAgICBjb250ZXh0LnN0cm9rZVBh
dGgoZ3JpZExpbmVzUGF0aCk7CisKKyAgICBmb3IgKGF1dG8gZ2FwUXVhZCA6IGdyaWRPdmVybGF5
LmdhcHMpCisgICAgICAgIGRyYXdMYXlvdXRIYXRjaGluZyhjb250ZXh0LCBnYXBRdWFkKTsKKwor
ICAgIGNvbnRleHQuc2V0U3Ryb2tlVGhpY2tuZXNzKDMpOworICAgIGZvciAoYXV0byBhcmVhIDog
Z3JpZE92ZXJsYXkuYXJlYXMpCisgICAgICAgIGNvbnRleHQuc3Ryb2tlUGF0aChxdWFkVG9QYXRo
KGFyZWEucXVhZCkpOworCisgICAgLy8gRHJhdyBsYWJlbHMgb24gdG9wIG9mIGFsbCBvdGhlciBs
aW5lcy4KKyAgICBjb250ZXh0LnNldFN0cm9rZVRoaWNrbmVzcygxKTsKKyAgICBmb3IgKGF1dG8g
YXJlYSA6IGdyaWRPdmVybGF5LmFyZWFzKQorICAgICAgICBkcmF3TGF5b3V0TGFiZWwoY29udGV4
dCwgYXJlYS5uYW1lLCBhcmVhLnF1YWQucDEoKSwgTGFiZWxBcnJvd0RpcmVjdGlvbjo6Tm9uZSwg
dHJhbnNsdWNlbnRMYWJlbEJhY2tncm91bmRDb2xvciwgYXJlYS5xdWFkLmJvdW5kaW5nQm94KCku
d2lkdGgoKSk7CisKKyAgICBmb3IgKGF1dG8gbGFiZWwgOiBncmlkT3ZlcmxheS5sYWJlbHMpCisg
ICAgICAgIGRyYXdMYXlvdXRMYWJlbChjb250ZXh0LCBsYWJlbC50ZXh0LCBsYWJlbC5sb2NhdGlv
biwgbGFiZWwuYXJyb3dEaXJlY3Rpb24sIGxhYmVsLmJhY2tncm91bmRDb2xvcik7Cit9CisKIHN0
YXRpYyBWZWN0b3I8U3RyaW5nPiBhdXRob3JlZEdyaWRUcmFja1NpemVzKE5vZGUqIG5vZGUsIEdy
aWRUcmFja1NpemluZ0RpcmVjdGlvbiBkaXJlY3Rpb24sIHVuc2lnbmVkIGV4cGVjdGVkVHJhY2tD
b3VudCkKIHsKICAgICBpZiAoIWlzPEVsZW1lbnQ+KG5vZGUpKQpAQCAtMTM3OSwxNCArMTQxOSwy
NCBAQCBzdGF0aWMgT3JkZXJlZE5hbWVkR3JpZExpbmVzTWFwIGdyaWRMaW5lTmFtZXMoY29uc3Qg
UmVuZGVyU3R5bGUqIHJlbmRlclN0eWxlLCBHcgogICAgIHJldHVybiBjb21iaW5lZEdyaWRMaW5l
TmFtZXM7CiB9CiAKLXZvaWQgSW5zcGVjdG9yT3ZlcmxheTo6ZHJhd0dyaWRPdmVybGF5KEdyYXBo
aWNzQ29udGV4dCYgY29udGV4dCwgY29uc3QgSW5zcGVjdG9yT3ZlcmxheTo6R3JpZCYgZ3JpZE92
ZXJsYXkpCitzdGF0aWMgSW5zcGVjdG9yT3ZlcmxheTo6SGlnaGxpZ2h0OjpHcmlkSGlnaGxpZ2h0
T3ZlcmxheTo6TGFiZWwgYnVpbGRMYWJlbChTdHJpbmcgdGV4dCwgRmxvYXRQb2ludCBsb2NhdGlv
biwgQ29sb3IgYmFja2dyb3VuZENvbG9yLCBJbnNwZWN0b3JPdmVybGF5OjpMYWJlbEFycm93RGly
ZWN0aW9uIGFycm93RGlyZWN0aW9uKQoreworICAgIEluc3BlY3Rvck92ZXJsYXk6OkhpZ2hsaWdo
dDo6R3JpZEhpZ2hsaWdodE92ZXJsYXk6OkxhYmVsIGxhYmVsOworICAgIGxhYmVsLnRleHQgPSB0
ZXh0OworICAgIGxhYmVsLmxvY2F0aW9uID0gbG9jYXRpb247CisgICAgbGFiZWwuYmFja2dyb3Vu
ZENvbG9yID0gYmFja2dyb3VuZENvbG9yOworICAgIGxhYmVsLmFycm93RGlyZWN0aW9uID0gYXJy
b3dEaXJlY3Rpb247CisgICAgcmV0dXJuIGxhYmVsOworfQorCitPcHRpb25hbDxJbnNwZWN0b3JP
dmVybGF5OjpIaWdobGlnaHQ6OkdyaWRIaWdobGlnaHRPdmVybGF5PiBJbnNwZWN0b3JPdmVybGF5
OjpidWlsZEdyaWRPdmVybGF5KGNvbnN0IEluc3BlY3Rvck92ZXJsYXk6OkdyaWQmIGdyaWRPdmVy
bGF5LCBib29sIG9mZnNldEJvdW5kc0J5U2Nyb2xsKQogewogICAgIC8vIElmIHRoZSBub2RlIFdl
YWtQdHIgaGFzIGJlZW4gY2xlYXJlZCwgdGhlbiB0aGUgbm9kZSBpcyBnb25lIGFuZCB0aGVyZSdz
IG5vdGhpbmcgdG8gZHJhdy4KICAgICBpZiAoIWdyaWRPdmVybGF5LmdyaWROb2RlKSB7CiAgICAg
ICAgIG1fYWN0aXZlR3JpZE92ZXJsYXlzLnJlbW92ZUFsbE1hdGNoaW5nKFsmXSAoY29uc3QgSW5z
cGVjdG9yT3ZlcmxheTo6R3JpZCYgZ3JpZE92ZXJsYXkpIHsKICAgICAgICAgICAgIHJldHVybiAh
Z3JpZE92ZXJsYXkuZ3JpZE5vZGU7CiAgICAgICAgIH0pOwotICAgICAgICByZXR1cm47CisgICAg
ICAgIHJldHVybiB7IH07CiAgICAgfQogICAgIAogICAgIC8vIEFsd2F5cyByZS1jaGVjayBiZWNh
dXNlIHRoZSBub2RlJ3MgcmVuZGVyZXIgbWF5IGhhdmUgY2hhbmdlZCBzaW5jZSBiZWluZyBhZGRl
ZC4KQEAgLTEzOTUsMjEgKzE0NDUsMjMgQEAgdm9pZCBJbnNwZWN0b3JPdmVybGF5OjpkcmF3R3Jp
ZE92ZXJsYXkoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0LCBjb25zdCBJbnNwZWN0b3IKICAgICBh
dXRvIHJlbmRlcmVyID0gbm9kZS0+cmVuZGVyZXIoKTsKICAgICBpZiAoIWlzPFJlbmRlckdyaWQ+
KHJlbmRlcmVyKSkgewogICAgICAgICByZW1vdmVHcmlkT3ZlcmxheUZvck5vZGUoKm5vZGUpOwot
ICAgICAgICByZXR1cm47CisgICAgICAgIHJldHVybiB7IH07CiAgICAgfQotICAgIAorCiAgICAg
Y29uc3RleHByIGF1dG8gdHJhbnNsdWNlbnRMYWJlbEJhY2tncm91bmRDb2xvciA9IENvbG9yOjp3
aGl0ZS5jb2xvcldpdGhBbHBoYUJ5dGUoMTUzKTsKICAgICAKICAgICBGcmFtZVZpZXcqIHBhZ2VW
aWV3ID0gbV9wYWdlLm1haW5GcmFtZSgpLnZpZXcoKTsKICAgICBpZiAoIXBhZ2VWaWV3KQotICAg
ICAgICByZXR1cm47CisgICAgICAgIHJldHVybiB7IH07CiAgICAgRmxvYXRSZWN0IHZpZXdwb3J0
Qm91bmRzID0geyB7IDAsIDAgfSwgcGFnZVZpZXctPnNpemVGb3JWaXNpYmxlQ29udGVudCgpIH07
CisgICAgaWYgKG9mZnNldEJvdW5kc0J5U2Nyb2xsKQorICAgICAgICB2aWV3cG9ydEJvdW5kcy5z
ZXRMb2NhdGlvbihwYWdlVmlldy0+c2Nyb2xsUG9zaXRpb24oKSk7CiAgICAgCiAgICAgYXV0byYg
cmVuZGVyR3JpZCA9ICpkb3duY2FzdDxSZW5kZXJHcmlkPihyZW5kZXJlcik7CiAgICAgYXV0byBj
b2x1bW5Qb3NpdGlvbnMgPSByZW5kZXJHcmlkLmNvbHVtblBvc2l0aW9ucygpOwogICAgIGF1dG8g
cm93UG9zaXRpb25zID0gcmVuZGVyR3JpZC5yb3dQb3NpdGlvbnMoKTsKICAgICBpZiAoIWNvbHVt
blBvc2l0aW9ucy5zaXplKCkgfHwgIXJvd1Bvc2l0aW9ucy5zaXplKCkpCi0gICAgICAgIHJldHVy
bjsKKyAgICAgICAgcmV0dXJuIHsgfTsKICAgICAKICAgICBmbG9hdCBncmlkU3RhcnRYID0gY29s
dW1uUG9zaXRpb25zWzBdOwogICAgIGZsb2F0IGdyaWRFbmRYID0gY29sdW1uUG9zaXRpb25zW2Nv
bHVtblBvc2l0aW9ucy5zaXplKCkgLSAxXTsKQEAgLTE0MTgsNyArMTQ3MCw3IEBAIHZvaWQgSW5z
cGVjdG9yT3ZlcmxheTo6ZHJhd0dyaWRPdmVybGF5KEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCwg
Y29uc3QgSW5zcGVjdG9yCiAKICAgICBGcmFtZSogY29udGFpbmluZ0ZyYW1lID0gbm9kZS0+ZG9j
dW1lbnQoKS5mcmFtZSgpOwogICAgIGlmICghY29udGFpbmluZ0ZyYW1lKQotICAgICAgICByZXR1
cm47CisgICAgICAgIHJldHVybiB7IH07CiAgICAgRnJhbWVWaWV3KiBjb250YWluaW5nVmlldyA9
IGNvbnRhaW5pbmdGcmFtZS0+dmlldygpOwogCiAgICAgYXV0byBjb2x1bW5MaW5lQXQgPSBbJl0o
aW50IHgpIC0+IEZsb2F0TGluZSB7CkBAIC0xNDMzLDEwICsxNDg1LDkgQEAgdm9pZCBJbnNwZWN0
b3JPdmVybGF5OjpkcmF3R3JpZE92ZXJsYXkoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0LCBjb25z
dCBJbnNwZWN0b3IKICAgICAgICAgICAgIGxvY2FsUG9pbnRUb1Jvb3RQb2ludChjb250YWluaW5n
VmlldywgcmVuZGVyR3JpZC5sb2NhbFRvQ29udGFpbmVyUG9pbnQoRmxvYXRQb2ludChncmlkRW5k
WCwgeSksIG51bGxwdHIpKSwKICAgICAgICAgfTsKICAgICB9OwotICAgIAotICAgIEdyYXBoaWNz
Q29udGV4dFN0YXRlU2F2ZXIgc2F2ZXIoY29udGV4dCk7Ci0gICAgY29udGV4dC5zZXRTdHJva2VU
aGlja25lc3MoMSk7Ci0gICAgY29udGV4dC5zZXRTdHJva2VDb2xvcihncmlkT3ZlcmxheS5jb25m
aWcuZ3JpZENvbG9yKTsKKworICAgIEluc3BlY3Rvck92ZXJsYXk6OkhpZ2hsaWdodDo6R3JpZEhp
Z2hsaWdodE92ZXJsYXkgZ3JpZEhpZ2hsaWdodE92ZXJsYXk7CisgICAgZ3JpZEhpZ2hsaWdodE92
ZXJsYXkuY29sb3IgPSBncmlkT3ZlcmxheS5jb25maWcuZ3JpZENvbG9yOwogCiAgICAgLy8gRHJh
dyBjb2x1bW5zIGFuZCByb3dzLgogICAgIGF1dG8gY29sdW1uV2lkdGhzID0gcmVuZGVyR3JpZC50
cmFja1NpemVzRm9yQ29tcHV0ZWRTdHlsZShHcmlkVHJhY2tTaXppbmdEaXJlY3Rpb246OkZvckNv
bHVtbnMpOwpAQCAtMTQ0NiwxOSArMTQ5NywxNiBAQCB2b2lkIEluc3BlY3Rvck92ZXJsYXk6OmRy
YXdHcmlkT3ZlcmxheShHcmFwaGljc0NvbnRleHQmIGNvbnRleHQsIGNvbnN0IEluc3BlY3Rvcgog
ICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBjb2x1bW5Qb3NpdGlvbnMuc2l6ZSgpOyArK2kp
IHsKICAgICAgICAgYXV0byBjb2x1bW5TdGFydExpbmUgPSBjb2x1bW5MaW5lQXQoY29sdW1uUG9z
aXRpb25zW2ldKTsKIAotICAgICAgICBQYXRoIGNvbHVtblBhdGhzOwogICAgICAgICBpZiAoZ3Jp
ZE92ZXJsYXkuY29uZmlnLnNob3dFeHRlbmRlZEdyaWRMaW5lcykgewogICAgICAgICAgICAgYXV0
byBleHRlbmRlZExpbmUgPSBjb2x1bW5TdGFydExpbmUuZXh0ZW5kZWRUb0JvdW5kcyh2aWV3cG9y
dEJvdW5kcyk7Ci0gICAgICAgICAgICBjb2x1bW5QYXRocy5tb3ZlVG8oZXh0ZW5kZWRMaW5lLnN0
YXJ0KCkpOwotICAgICAgICAgICAgY29sdW1uUGF0aHMuYWRkTGluZVRvKGV4dGVuZGVkTGluZS5l
bmQoKSk7CisgICAgICAgICAgICBncmlkSGlnaGxpZ2h0T3ZlcmxheS5ncmlkTGluZXMuYXBwZW5k
KGV4dGVuZGVkTGluZSk7CiAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBjb2x1bW5QYXRo
cy5tb3ZlVG8oY29sdW1uU3RhcnRMaW5lLnN0YXJ0KCkpOwotICAgICAgICAgICAgY29sdW1uUGF0
aHMuYWRkTGluZVRvKGNvbHVtblN0YXJ0TGluZS5lbmQoKSk7CisgICAgICAgICAgICBncmlkSGln
aGxpZ2h0T3ZlcmxheS5ncmlkTGluZXMuYXBwZW5kKGNvbHVtblN0YXJ0TGluZSk7CiAgICAgICAg
IH0KICAgICAgICAgCiAgICAgICAgIEZsb2F0UG9pbnQgZ2FwTGFiZWxQb3NpdGlvbiA9IGNvbHVt
blN0YXJ0TGluZS5zdGFydCgpOwogICAgICAgICBpZiAoaSkgewotICAgICAgICAgICAgZHJhd0xh
eW91dEhhdGNoaW5nKGNvbnRleHQsIHsgcHJldmlvdXNDb2x1bW5FbmRMaW5lLnN0YXJ0KCksIGNv
bHVtblN0YXJ0TGluZS5zdGFydCgpLCBjb2x1bW5TdGFydExpbmUuZW5kKCksIHByZXZpb3VzQ29s
dW1uRW5kTGluZS5lbmQoKSB9KTsKKyAgICAgICAgICAgIGdyaWRIaWdobGlnaHRPdmVybGF5Lmdh
cHMuYXBwZW5kKHsgcHJldmlvdXNDb2x1bW5FbmRMaW5lLnN0YXJ0KCksIGNvbHVtblN0YXJ0TGlu
ZS5zdGFydCgpLCBjb2x1bW5TdGFydExpbmUuZW5kKCksIHByZXZpb3VzQ29sdW1uRW5kTGluZS5l
bmQoKSB9KTsKICAgICAgICAgICAgIEZsb2F0TGluZSBsaW5lQmV0d2VlbkNvbHVtblRvcHMgPSB7
IGNvbHVtblN0YXJ0TGluZS5zdGFydCgpLCBwcmV2aW91c0NvbHVtbkVuZExpbmUuc3RhcnQoKSB9
OwogICAgICAgICAgICAgZ2FwTGFiZWxQb3NpdGlvbiA9IGxpbmVCZXR3ZWVuQ29sdW1uVG9wcy5w
b2ludEF0UmVsYXRpdmVEaXN0YW5jZSgwLjUpOwogICAgICAgICB9CkBAIC0xNDY5LDExICsxNTE3
LDkgQEAgdm9pZCBJbnNwZWN0b3JPdmVybGF5OjpkcmF3R3JpZE92ZXJsYXkoR3JhcGhpY3NDb250
ZXh0JiBjb250ZXh0LCBjb25zdCBJbnNwZWN0b3IKIAogICAgICAgICAgICAgaWYgKGdyaWRPdmVy
bGF5LmNvbmZpZy5zaG93RXh0ZW5kZWRHcmlkTGluZXMpIHsKICAgICAgICAgICAgICAgICBhdXRv
IGV4dGVuZGVkTGluZSA9IGNvbHVtbkVuZExpbmUuZXh0ZW5kZWRUb0JvdW5kcyh2aWV3cG9ydEJv
dW5kcyk7Ci0gICAgICAgICAgICAgICAgY29sdW1uUGF0aHMubW92ZVRvKGV4dGVuZGVkTGluZS5z
dGFydCgpKTsKLSAgICAgICAgICAgICAgICBjb2x1bW5QYXRocy5hZGRMaW5lVG8oZXh0ZW5kZWRM
aW5lLmVuZCgpKTsKKyAgICAgICAgICAgICAgICBncmlkSGlnaGxpZ2h0T3ZlcmxheS5ncmlkTGlu
ZXMuYXBwZW5kKGV4dGVuZGVkTGluZSk7CiAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAg
ICAgICAgIGNvbHVtblBhdGhzLm1vdmVUbyhjb2x1bW5FbmRMaW5lLnN0YXJ0KCkpOwotICAgICAg
ICAgICAgICAgIGNvbHVtblBhdGhzLmFkZExpbmVUbyhjb2x1bW5FbmRMaW5lLmVuZCgpKTsKKyAg
ICAgICAgICAgICAgICBncmlkSGlnaGxpZ2h0T3ZlcmxheS5ncmlkTGluZXMuYXBwZW5kKGNvbHVt
bkVuZExpbmUpOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgcHJldmlvdXNDb2x1bW5FbmRM
aW5lID0gY29sdW1uRW5kTGluZTsKICAgICAgICAgICAgIApAQCAtMTQ5MywxMyArMTUzOSwxMSBA
QCB2b2lkIEluc3BlY3Rvck92ZXJsYXk6OmRyYXdHcmlkT3ZlcmxheShHcmFwaGljc0NvbnRleHQm
IGNvbnRleHQsIGNvbnN0IEluc3BlY3RvcgogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAg
ICAgICAKICAgICAgICAgICAgICAgICBGbG9hdExpbmUgdHJhY2tUb3BMaW5lID0geyBjb2x1bW5T
dGFydExpbmUuc3RhcnQoKSwgY29sdW1uRW5kTGluZS5zdGFydCgpIH07Ci0gICAgICAgICAgICAg
ICAgZHJhd0xheW91dExhYmVsKGNvbnRleHQsIHRyYWNrU2l6ZUxhYmVsLCB0cmFja1RvcExpbmUu
cG9pbnRBdFJlbGF0aXZlRGlzdGFuY2UoMC41KSwgTGFiZWxBcnJvd0RpcmVjdGlvbjo6VXAsIHRy
YW5zbHVjZW50TGFiZWxCYWNrZ3JvdW5kQ29sb3IpOworICAgICAgICAgICAgICAgIGdyaWRIaWdo
bGlnaHRPdmVybGF5LmxhYmVscy5hcHBlbmQoYnVpbGRMYWJlbCh0cmFja1NpemVMYWJlbCwgdHJh
Y2tUb3BMaW5lLnBvaW50QXRSZWxhdGl2ZURpc3RhbmNlKDAuNSksIHRyYW5zbHVjZW50TGFiZWxC
YWNrZ3JvdW5kQ29sb3IsIExhYmVsQXJyb3dEaXJlY3Rpb246OlVwKSk7CiAgICAgICAgICAgICB9
CiAgICAgICAgIH0gZWxzZQogICAgICAgICAgICAgcHJldmlvdXNDb2x1bW5FbmRMaW5lID0gY29s
dW1uU3RhcnRMaW5lOwotICAgICAgICAKLSAgICAgICAgY29udGV4dC5zdHJva2VQYXRoKGNvbHVt
blBhdGhzKTsKLSAgICAgICAgCisKICAgICAgICAgU3RyaW5nQnVpbGRlciBsaW5lTGFiZWw7CiAg
ICAgICAgIGlmIChncmlkT3ZlcmxheS5jb25maWcuc2hvd0xpbmVOdW1iZXJzKQogICAgICAgICAg
ICAgbGluZUxhYmVsLmFwcGVuZChpICsgMSwgdGhpblNwYWNlLCBidWxsZXQsIHRoaW5TcGFjZSwg
LXN0YXRpY19jYXN0PGludD4oY29sdW1uUG9zaXRpb25zLnNpemUoKSAtIGkpKTsKQEAgLTE1MTIs
NyArMTU1Niw3IEBAIHZvaWQgSW5zcGVjdG9yT3ZlcmxheTo6ZHJhd0dyaWRPdmVybGF5KEdyYXBo
aWNzQ29udGV4dCYgY29udGV4dCwgY29uc3QgSW5zcGVjdG9yCiAgICAgICAgIH0KICAgICAgICAg
Ly8gRklYTUU6IDx3ZWJraXQub3JnL2IvMjIxOTcyPiBMYXlvdXQgbGFiZWxzIGNhbiBiZSBkcmF3
biBvdXRzaWRlIHRoZSB2aWV3cG9ydCwgYW5kIGEgYmVzdCBlZmZvcnQgc2hvdWxkIGJlIG1hZGUg
dG8ga2VlcCB0aGVtIGluIHRoZSB2aWV3cG9ydCB3aGlsZSB0aGUgZ3JpZCBpcyBpbiB0aGUgdmll
d3BvcnQuCiAgICAgICAgIGlmICghbGluZUxhYmVsLmlzRW1wdHkoKSkKLSAgICAgICAgICAgIGRy
YXdMYXlvdXRMYWJlbChjb250ZXh0LCBsaW5lTGFiZWwudG9TdHJpbmcoKSwgZ2FwTGFiZWxQb3Np
dGlvbiwgTGFiZWxBcnJvd0RpcmVjdGlvbjo6RG93bik7CisgICAgICAgICAgICBncmlkSGlnaGxp
Z2h0T3ZlcmxheS5sYWJlbHMuYXBwZW5kKGJ1aWxkTGFiZWwobGluZUxhYmVsLnRvU3RyaW5nKCks
IGdhcExhYmVsUG9zaXRpb24sIENvbG9yOjp3aGl0ZSwgTGFiZWxBcnJvd0RpcmVjdGlvbjo6RG93
bikpOwogICAgIH0KIAogICAgIGF1dG8gcm93SGVpZ2h0cyA9IHJlbmRlckdyaWQudHJhY2tTaXpl
c0ZvckNvbXB1dGVkU3R5bGUoR3JpZFRyYWNrU2l6aW5nRGlyZWN0aW9uOjpGb3JSb3dzKTsKQEAg
LTE1MjIsMzcgKzE1NjYsMzIgQEAgdm9pZCBJbnNwZWN0b3JPdmVybGF5OjpkcmF3R3JpZE92ZXJs
YXkoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0LCBjb25zdCBJbnNwZWN0b3IKICAgICBmb3IgKHVu
c2lnbmVkIGkgPSAwOyBpIDwgcm93UG9zaXRpb25zLnNpemUoKTsgKytpKSB7CiAgICAgICAgIGF1
dG8gcm93U3RhcnRMaW5lID0gcm93TGluZUF0KHJvd1Bvc2l0aW9uc1tpXSk7CiAKLSAgICAgICAg
UGF0aCByb3dQYXRoczsKICAgICAgICAgaWYgKGdyaWRPdmVybGF5LmNvbmZpZy5zaG93RXh0ZW5k
ZWRHcmlkTGluZXMpIHsKLSAgICAgICAgICAgIGF1dG8gbGluZSA9IHJvd1N0YXJ0TGluZS5leHRl
bmRlZFRvQm91bmRzKHZpZXdwb3J0Qm91bmRzKTsKLSAgICAgICAgICAgIHJvd1BhdGhzLm1vdmVU
byhsaW5lLnN0YXJ0KCkpOwotICAgICAgICAgICAgcm93UGF0aHMuYWRkTGluZVRvKGxpbmUuZW5k
KCkpOworICAgICAgICAgICAgYXV0byBleHRlbmRlZExpbmUgPSByb3dTdGFydExpbmUuZXh0ZW5k
ZWRUb0JvdW5kcyh2aWV3cG9ydEJvdW5kcyk7CisgICAgICAgICAgICBncmlkSGlnaGxpZ2h0T3Zl
cmxheS5ncmlkTGluZXMuYXBwZW5kKGV4dGVuZGVkTGluZSk7CiAgICAgICAgIH0gZWxzZSB7Ci0g
ICAgICAgICAgICByb3dQYXRocy5tb3ZlVG8ocm93U3RhcnRMaW5lLnN0YXJ0KCkpOwotICAgICAg
ICAgICAgcm93UGF0aHMuYWRkTGluZVRvKHJvd1N0YXJ0TGluZS5lbmQoKSk7CisgICAgICAgICAg
ICBncmlkSGlnaGxpZ2h0T3ZlcmxheS5ncmlkTGluZXMuYXBwZW5kKHJvd1N0YXJ0TGluZSk7CiAg
ICAgICAgIH0KLSAgICAgICAgCisKICAgICAgICAgRmxvYXRQb2ludCBnYXBMYWJlbFBvc2l0aW9u
ID0gcm93U3RhcnRMaW5lLnN0YXJ0KCk7CiAgICAgICAgIGlmIChpKSB7CiAgICAgICAgICAgICBG
bG9hdExpbmUgbGluZUJldHdlZW5Sb3dTdGFydHMgPSB7IHJvd1N0YXJ0TGluZS5zdGFydCgpLCBw
cmV2aW91c1Jvd0VuZExpbmUuc3RhcnQoKSB9OwotICAgICAgICAgICAgZHJhd0xheW91dEhhdGNo
aW5nKGNvbnRleHQsIHsgcHJldmlvdXNSb3dFbmRMaW5lLnN0YXJ0KCksIHByZXZpb3VzUm93RW5k
TGluZS5lbmQoKSwgcm93U3RhcnRMaW5lLmVuZCgpLCByb3dTdGFydExpbmUuc3RhcnQoKSB9KTsK
KyAgICAgICAgICAgIGdyaWRIaWdobGlnaHRPdmVybGF5LmdhcHMuYXBwZW5kKHsgcHJldmlvdXNS
b3dFbmRMaW5lLnN0YXJ0KCksIHByZXZpb3VzUm93RW5kTGluZS5lbmQoKSwgcm93U3RhcnRMaW5l
LmVuZCgpLCByb3dTdGFydExpbmUuc3RhcnQoKSB9KTsKICAgICAgICAgICAgIGdhcExhYmVsUG9z
aXRpb24gPSBsaW5lQmV0d2VlblJvd1N0YXJ0cy5wb2ludEF0UmVsYXRpdmVEaXN0YW5jZSgwLjUp
OwogICAgICAgICB9CiAKICAgICAgICAgaWYgKGkgPCByb3dIZWlnaHRzLnNpemUoKSAmJiBpIDwg
cm93UG9zaXRpb25zLnNpemUoKSkgewogICAgICAgICAgICAgYXV0byBoZWlnaHQgPSByb3dIZWln
aHRzW2ldOwogICAgICAgICAgICAgYXV0byByb3dFbmRMaW5lID0gcm93TGluZUF0KHJvd1Bvc2l0
aW9uc1tpXSArIGhlaWdodCk7Ci0gICAgICAgICAgICAKKwogICAgICAgICAgICAgaWYgKGdyaWRP
dmVybGF5LmNvbmZpZy5zaG93RXh0ZW5kZWRHcmlkTGluZXMpIHsKICAgICAgICAgICAgICAgICBh
dXRvIGV4dGVuZGVkTGluZSA9IHJvd0VuZExpbmUuZXh0ZW5kZWRUb0JvdW5kcyh2aWV3cG9ydEJv
dW5kcyk7Ci0gICAgICAgICAgICAgICAgcm93UGF0aHMubW92ZVRvKGV4dGVuZGVkTGluZS5zdGFy
dCgpKTsKLSAgICAgICAgICAgICAgICByb3dQYXRocy5hZGRMaW5lVG8oZXh0ZW5kZWRMaW5lLmVu
ZCgpKTsKKyAgICAgICAgICAgICAgICBncmlkSGlnaGxpZ2h0T3ZlcmxheS5ncmlkTGluZXMuYXBw
ZW5kKGV4dGVuZGVkTGluZSk7CiAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAg
IHJvd1BhdGhzLm1vdmVUbyhyb3dFbmRMaW5lLnN0YXJ0KCkpOwotICAgICAgICAgICAgICAgIHJv
d1BhdGhzLmFkZExpbmVUbyhyb3dFbmRMaW5lLmVuZCgpKTsKKyAgICAgICAgICAgICAgICBncmlk
SGlnaGxpZ2h0T3ZlcmxheS5ncmlkTGluZXMuYXBwZW5kKHJvd0VuZExpbmUpOwogICAgICAgICAg
ICAgfQogICAgICAgICAgICAgcHJldmlvdXNSb3dFbmRMaW5lID0gcm93RW5kTGluZTsKLSAgICAg
ICAgICAgIAorCiAgICAgICAgICAgICBpZiAoZ3JpZE92ZXJsYXkuY29uZmlnLnNob3dUcmFja1Np
emVzKSB7CiAgICAgICAgICAgICAgICAgYXV0byB0cmFja1NpemVMYWJlbCA9IFN0cmluZzo6bnVt
YmVyKHJvdW5kZihoZWlnaHQpKTsKICAgICAgICAgICAgICAgICB0cmFja1NpemVMYWJlbC5hcHBl
bmQoInB4Il9zKTsKQEAgLTE1NjgsMTMgKzE2MDcsMTEgQEAgdm9pZCBJbnNwZWN0b3JPdmVybGF5
OjpkcmF3R3JpZE92ZXJsYXkoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0LCBjb25zdCBJbnNwZWN0
b3IKICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAg
ICAgICBGbG9hdExpbmUgdHJhY2tMZWZ0TGluZSA9IHsgcm93U3RhcnRMaW5lLnN0YXJ0KCksIHJv
d0VuZExpbmUuc3RhcnQoKSB9OwotICAgICAgICAgICAgICAgIGRyYXdMYXlvdXRMYWJlbChjb250
ZXh0LCB0cmFja1NpemVMYWJlbCwgdHJhY2tMZWZ0TGluZS5wb2ludEF0UmVsYXRpdmVEaXN0YW5j
ZSgwLjUpLCBMYWJlbEFycm93RGlyZWN0aW9uOjpMZWZ0LCB0cmFuc2x1Y2VudExhYmVsQmFja2dy
b3VuZENvbG9yKTsKKyAgICAgICAgICAgICAgICBncmlkSGlnaGxpZ2h0T3ZlcmxheS5sYWJlbHMu
YXBwZW5kKGJ1aWxkTGFiZWwodHJhY2tTaXplTGFiZWwsIHRyYWNrTGVmdExpbmUucG9pbnRBdFJl
bGF0aXZlRGlzdGFuY2UoMC41KSwgdHJhbnNsdWNlbnRMYWJlbEJhY2tncm91bmRDb2xvciwgTGFi
ZWxBcnJvd0RpcmVjdGlvbjo6TGVmdCkpOwogICAgICAgICAgICAgfQogICAgICAgICB9IGVsc2UK
ICAgICAgICAgICAgIHByZXZpb3VzUm93RW5kTGluZSA9IHJvd1N0YXJ0TGluZTsKIAotICAgICAg
ICBjb250ZXh0LnN0cm9rZVBhdGgocm93UGF0aHMpOwotICAgICAgICAKICAgICAgICAgU3RyaW5n
QnVpbGRlciBsaW5lTGFiZWw7CiAgICAgICAgIGlmIChncmlkT3ZlcmxheS5jb25maWcuc2hvd0xp
bmVOdW1iZXJzKQogICAgICAgICAgICAgbGluZUxhYmVsLmFwcGVuZChpICsgMSwgdGhpblNwYWNl
LCBidWxsZXQsIHRoaW5TcGFjZSwgLXN0YXRpY19jYXN0PGludD4ocm93UG9zaXRpb25zLnNpemUo
KSAtIGkpKTsKQEAgLTE1ODcsOSArMTYyNCw5IEBAIHZvaWQgSW5zcGVjdG9yT3ZlcmxheTo6ZHJh
d0dyaWRPdmVybGF5KEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCwgY29uc3QgSW5zcGVjdG9yCiAg
ICAgICAgIH0KICAgICAgICAgLy8gRklYTUU6IDx3ZWJraXQub3JnL2IvMjIxOTcyPiBMYXlvdXQg
bGFiZWxzIGNhbiBiZSBkcmF3biBvdXRzaWRlIHRoZSB2aWV3cG9ydCwgYW5kIGEgYmVzdCBlZmZv
cnQgc2hvdWxkIGJlIG1hZGUgdG8ga2VlcCB0aGVtIGluIHRoZSB2aWV3cG9ydCB3aGlsZSB0aGUg
Z3JpZCBpcyBpbiB0aGUgdmlld3BvcnQuCiAgICAgICAgIGlmICghbGluZUxhYmVsLmlzRW1wdHko
KSkKLSAgICAgICAgICAgIGRyYXdMYXlvdXRMYWJlbChjb250ZXh0LCBsaW5lTGFiZWwudG9TdHJp
bmcoKSwgZ2FwTGFiZWxQb3NpdGlvbiwgTGFiZWxBcnJvd0RpcmVjdGlvbjo6UmlnaHQpOworICAg
ICAgICAgICAgZ3JpZEhpZ2hsaWdodE92ZXJsYXkubGFiZWxzLmFwcGVuZChidWlsZExhYmVsKGxp
bmVMYWJlbC50b1N0cmluZygpLCBnYXBMYWJlbFBvc2l0aW9uLCBDb2xvcjo6d2hpdGUsIExhYmVs
QXJyb3dEaXJlY3Rpb246OlJpZ2h0KSk7CiAgICAgfQotICAgIAorCiAgICAgaWYgKGdyaWRPdmVy
bGF5LmNvbmZpZy5zaG93QXJlYU5hbWVzKSB7CiAgICAgICAgIGZvciAoYXV0byYgZ3JpZEFyZWEg
OiBub2RlLT5yZW5kZXJTdHlsZSgpLT5uYW1lZEdyaWRBcmVhKCkpIHsKICAgICAgICAgICAgIGF1
dG8mIG5hbWUgPSBncmlkQXJlYS5rZXk7CkBAIC0xNjAwLDI1ICsxNjM3LDI0IEBAIHZvaWQgSW5z
cGVjdG9yT3ZlcmxheTo6ZHJhd0dyaWRPdmVybGF5KEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCwg
Y29uc3QgSW5zcGVjdG9yCiAgICAgICAgICAgICBhdXRvIGNvbHVtbkVuZExpbmUgPSBjb2x1bW5M
aW5lQXQoY29sdW1uUG9zaXRpb25zW2FyZWEuY29sdW1ucy5lbmRMaW5lKCkgLSAxXSArIGNvbHVt
bldpZHRoc1thcmVhLmNvbHVtbnMuZW5kTGluZSgpIC0gMV0pOwogICAgICAgICAgICAgYXV0byBy
b3dTdGFydExpbmUgPSByb3dMaW5lQXQocm93UG9zaXRpb25zW2FyZWEucm93cy5zdGFydExpbmUo
KV0gLSByb3dQb3NpdGlvbnNbMF0pOwogICAgICAgICAgICAgYXV0byByb3dFbmRMaW5lID0gcm93
TGluZUF0KHJvd1Bvc2l0aW9uc1thcmVhLnJvd3MuZW5kTGluZSgpIC0gMV0gKyByb3dIZWlnaHRz
W2FyZWEucm93cy5lbmRMaW5lKCkgLSAxXSAtIHJvd1Bvc2l0aW9uc1swXSk7Ci0gICAgICAgICAg
ICAKKwogICAgICAgICAgICAgT3B0aW9uYWw8RmxvYXRQb2ludD4gdG9wTGVmdCA9IGNvbHVtblN0
YXJ0TGluZS5pbnRlcnNlY3Rpb25XaXRoKHJvd1N0YXJ0TGluZSk7CiAgICAgICAgICAgICBPcHRp
b25hbDxGbG9hdFBvaW50PiB0b3BSaWdodCA9IGNvbHVtbkVuZExpbmUuaW50ZXJzZWN0aW9uV2l0
aChyb3dTdGFydExpbmUpOwogICAgICAgICAgICAgT3B0aW9uYWw8RmxvYXRQb2ludD4gYm90dG9t
UmlnaHQgPSBjb2x1bW5FbmRMaW5lLmludGVyc2VjdGlvbldpdGgocm93RW5kTGluZSk7CiAgICAg
ICAgICAgICBPcHRpb25hbDxGbG9hdFBvaW50PiBib3R0b21MZWZ0ID0gY29sdW1uU3RhcnRMaW5l
LmludGVyc2VjdGlvbldpdGgocm93RW5kTGluZSk7Ci0gICAgICAgICAgICAKKwogICAgICAgICAg
ICAgLy8gSWYgYW55IHR3byBsaW5lcyBhcmUgY29pbmNpZGVudCB3aXRoIGVhY2ggb3RoZXIsIHRo
ZXkgd2lsbCBub3QgaGF2ZSBhbiBpbnRlcnNlY3Rpb24sIHdoaWNoIGNhbiBvY2N1ciB3aXRoIGV4
dHJlbWUgYHRyYW5zZm9ybTogcGVyc3BlY3RpdmUoLi4uKWAgdmFsdWVzLgogICAgICAgICAgICAg
aWYgKCF0b3BMZWZ0IHx8ICF0b3BSaWdodCB8fCAhYm90dG9tUmlnaHQgfHwgIWJvdHRvbUxlZnQp
CiAgICAgICAgICAgICAgICAgY29udGludWU7CiAKLSAgICAgICAgICAgIEZsb2F0UXVhZCBhcmVh
UXVhZCA9IHsgKnRvcExlZnQsICp0b3BSaWdodCwgKmJvdHRvbVJpZ2h0LCAqYm90dG9tTGVmdCB9
OwotCi0gICAgICAgICAgICBjb250ZXh0LnNldFN0cm9rZVRoaWNrbmVzcygzKTsKLSAgICAgICAg
ICAgIGNvbnRleHQuc3Ryb2tlUGF0aChxdWFkVG9QYXRoKGFyZWFRdWFkKSk7Ci0KLSAgICAgICAg
ICAgIGNvbnRleHQuc2V0U3Ryb2tlVGhpY2tuZXNzKDEpOwotICAgICAgICAgICAgZHJhd0xheW91
dExhYmVsKGNvbnRleHQsIG5hbWUsIGFyZWFRdWFkLnAxKCksIExhYmVsQXJyb3dEaXJlY3Rpb246
Ok5vbmUsIHRyYW5zbHVjZW50TGFiZWxCYWNrZ3JvdW5kQ29sb3IsIGFyZWFRdWFkLmJvdW5kaW5n
Qm94KCkud2lkdGgoKSk7CisgICAgICAgICAgICBJbnNwZWN0b3JPdmVybGF5OjpIaWdobGlnaHQ6
OkdyaWRIaWdobGlnaHRPdmVybGF5OjpBcmVhIGhpZ2hsaWdodE92ZXJsYXlBcmVhOworICAgICAg
ICAgICAgaGlnaGxpZ2h0T3ZlcmxheUFyZWEubmFtZSA9IG5hbWU7CisgICAgICAgICAgICBoaWdo
bGlnaHRPdmVybGF5QXJlYS5xdWFkID0geyAqdG9wTGVmdCwgKnRvcFJpZ2h0LCAqYm90dG9tUmln
aHQsICpib3R0b21MZWZ0IH07CisgICAgICAgICAgICBncmlkSGlnaGxpZ2h0T3ZlcmxheS5hcmVh
cy5hcHBlbmQoaGlnaGxpZ2h0T3ZlcmxheUFyZWEpOwogICAgICAgICB9CiAgICAgfQorCisgICAg
cmV0dXJuIHsgZ3JpZEhpZ2hsaWdodE92ZXJsYXkgfTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgV2Vi
Q29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3Rvck92ZXJs
YXkuaCBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JPdmVybGF5LmgKaW5kZXgg
Mzg4ZTY1NDlkODU1YzJiZGUxNTVmNjMyY2M3YjJhY2NjZGZiMWE0MC4uMWYxMDE3ZGM0YmU2NTQz
MDE3MjVjYmRlMjU5NmMyMzY1MTZjNWIwNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5z
cGVjdG9yL0luc3BlY3Rvck92ZXJsYXkuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3Iv
SW5zcGVjdG9yT3ZlcmxheS5oCkBAIC0zMCw2ICszMCw3IEBACiAjcHJhZ21hIG9uY2UKIAogI2lu
Y2x1ZGUgIkNvbG9yLmgiCisjaW5jbHVkZSAiRmxvYXRMaW5lLmgiCiAjaW5jbHVkZSAiRmxvYXRR
dWFkLmgiCiAjaW5jbHVkZSAiRmxvYXRSZWN0LmgiCiAjaW5jbHVkZSAiUGF0aC5oIgpAQCAtNjQs
MTAgKzY1LDE5IEBAIHB1YmxpYzoKICAgICBJbnNwZWN0b3JPdmVybGF5KFBhZ2UmLCBJbnNwZWN0
b3JDbGllbnQqKTsKICAgICB+SW5zcGVjdG9yT3ZlcmxheSgpOwogCisgICAgZW51bSBjbGFzcyBM
YWJlbEFycm93RGlyZWN0aW9uIHsKKyAgICAgICAgTm9uZSwKKyAgICAgICAgRG93biwKKyAgICAg
ICAgVXAsCisgICAgICAgIExlZnQsCisgICAgICAgIFJpZ2h0LAorICAgIH07CisKICAgICBzdHJ1
Y3QgSGlnaGxpZ2h0IHsKICAgICAgICAgV1RGX01BS0VfU1RSVUNUX0ZBU1RfQUxMT0NBVEVEOwog
CiAgICAgICAgIGVudW0gY2xhc3MgVHlwZSB7CisgICAgICAgICAgICBOb25lLCAvLyBQcm92aWRl
cyBvbmx5IG5vbi1xdWFkIGluZm9ybWF0aW9uLCBpbmNsdWRpbmcgZ3JpZCBvdmVybGF5cy4KICAg
ICAgICAgICAgIE5vZGUsIC8vIFByb3ZpZGVzIDQgcXVhZHM6IG1hcmdpbiwgYm9yZGVyLCBwYWRk
aW5nLCBjb250ZW50LgogICAgICAgICAgICAgTm9kZUxpc3QsIC8vIFByb3ZpZGVzIGEgbGlzdCBv
ZiBub2Rlcy4KICAgICAgICAgICAgIFJlY3RzLCAvLyBQcm92aWRlcyBhIGxpc3Qgb2YgcXVhZHMu
CkBAIC04NCw2ICs5NCwzMCBAQCBwdWJsaWM6CiAgICAgICAgICAgICBib29sIHVzZVBhZ2VDb29y
ZGluYXRlczsKICAgICAgICAgfTsKIAorICAgICAgICBzdHJ1Y3QgR3JpZEhpZ2hsaWdodE92ZXJs
YXkgeworICAgICAgICAgICAgV1RGX01BS0VfU1RSVUNUX0ZBU1RfQUxMT0NBVEVEOworCisgICAg
ICAgICAgICBzdHJ1Y3QgTGFiZWwgeworICAgICAgICAgICAgICAgIFdURl9NQUtFX1NUUlVDVF9G
QVNUX0FMTE9DQVRFRDsKKyAgICAgICAgICAgICAgICBTdHJpbmcgdGV4dDsKKyAgICAgICAgICAg
ICAgICBGbG9hdFBvaW50IGxvY2F0aW9uOworICAgICAgICAgICAgICAgIENvbG9yIGJhY2tncm91
bmRDb2xvcjsKKyAgICAgICAgICAgICAgICBMYWJlbEFycm93RGlyZWN0aW9uIGFycm93RGlyZWN0
aW9uOworICAgICAgICAgICAgfTsKKworICAgICAgICAgICAgc3RydWN0IEFyZWEgeworICAgICAg
ICAgICAgICAgIFdURl9NQUtFX1NUUlVDVF9GQVNUX0FMTE9DQVRFRDsKKyAgICAgICAgICAgICAg
ICBTdHJpbmcgbmFtZTsKKyAgICAgICAgICAgICAgICBGbG9hdFF1YWQgcXVhZDsKKyAgICAgICAg
ICAgIH07CisKKyAgICAgICAgICAgIENvbG9yIGNvbG9yOworICAgICAgICAgICAgVmVjdG9yPEZs
b2F0TGluZT4gZ3JpZExpbmVzOworICAgICAgICAgICAgVmVjdG9yPEZsb2F0UXVhZD4gZ2FwczsK
KyAgICAgICAgICAgIFZlY3RvcjxBcmVhPiBhcmVhczsKKyAgICAgICAgICAgIFZlY3RvcjxMYWJl
bD4gbGFiZWxzOworICAgICAgICB9OworCiAgICAgICAgIHZvaWQgc2V0RGF0YUZyb21Db25maWco
Y29uc3QgQ29uZmlnJiBjb25maWcpCiAgICAgICAgIHsKICAgICAgICAgICAgIGNvbnRlbnRDb2xv
ciA9IGNvbmZpZy5jb250ZW50OwpAQCAtMTAyLDYgKzEzNiw3IEBAIHB1YmxpYzoKIAogICAgICAg
ICBUeXBlIHR5cGUge1R5cGU6Ok5vZGV9OwogICAgICAgICBWZWN0b3I8RmxvYXRRdWFkPiBxdWFk
czsKKyAgICAgICAgVmVjdG9yPEdyaWRIaWdobGlnaHRPdmVybGF5PiBncmlkSGlnaGxpZ2h0T3Zl
cmxheXM7CiAgICAgICAgIGJvb2wgdXNlUGFnZUNvb3JkaW5hdGVzIHt0cnVlfTsKIAogICAgICAg
ICB1c2luZyBCb3VuZHMgPSBGbG9hdFJlY3Q7CkBAIC0xMzIsNyArMTY3LDcgQEAgcHVibGljOgog
CiAgICAgdm9pZCB1cGRhdGUoKTsKICAgICB2b2lkIHBhaW50KEdyYXBoaWNzQ29udGV4dCYpOwot
ICAgIHZvaWQgZ2V0SGlnaGxpZ2h0KEhpZ2hsaWdodCYsIENvb3JkaW5hdGVTeXN0ZW0pIGNvbnN0
OworICAgIHZvaWQgZ2V0SGlnaGxpZ2h0KEhpZ2hsaWdodCYsIENvb3JkaW5hdGVTeXN0ZW0pOwog
ICAgIGJvb2wgc2hvdWxkU2hvd092ZXJsYXkoKSBjb25zdDsKIAogICAgIHZvaWQgaGlkZUhpZ2hs
aWdodCgpOwpAQCAtMTY2LDE0ICsyMDEsNiBAQCBwcml2YXRlOgogICAgICAgICBIaWdobGlnaHQ6
OkJvdW5kcyBib3VuZHM7CiAgICAgICAgIFBhdGggdGl0bGVQYXRoOwogICAgIH07Ci0gICAgCi0g
ICAgZW51bSBjbGFzcyBMYWJlbEFycm93RGlyZWN0aW9uIHsKLSAgICAgICAgTm9uZSwKLSAgICAg
ICAgRG93biwKLSAgICAgICAgVXAsCi0gICAgICAgIExlZnQsCi0gICAgICAgIFJpZ2h0LAotICAg
IH07CiAKICAgICBSdWxlckV4Y2x1c2lvbiBkcmF3Tm9kZUhpZ2hsaWdodChHcmFwaGljc0NvbnRl
eHQmLCBOb2RlJik7CiAgICAgUnVsZXJFeGNsdXNpb24gZHJhd1F1YWRIaWdobGlnaHQoR3JhcGhp
Y3NDb250ZXh0JiwgY29uc3QgRmxvYXRRdWFkJik7CkBAIC0xODYsNyArMjEzLDggQEAgcHJpdmF0
ZToKICAgICB2b2lkIGRyYXdMYXlvdXRIYXRjaGluZyhHcmFwaGljc0NvbnRleHQmLCBGbG9hdFF1
YWQpOwogICAgIHZvaWQgZHJhd0xheW91dExhYmVsKEdyYXBoaWNzQ29udGV4dCYsIFN0cmluZywg
RmxvYXRQb2ludCwgTGFiZWxBcnJvd0RpcmVjdGlvbiwgQ29sb3IgYmFja2dyb3VuZENvbG9yID0g
Q29sb3I6OndoaXRlLCBmbG9hdCBtYXhpbXVtV2lkdGggPSAwKTsKIAotICAgIHZvaWQgZHJhd0dy
aWRPdmVybGF5KEdyYXBoaWNzQ29udGV4dCYsIGNvbnN0IEluc3BlY3Rvck92ZXJsYXk6OkdyaWQm
KTsKKyAgICB2b2lkIGRyYXdHcmlkT3ZlcmxheShHcmFwaGljc0NvbnRleHQmLCBjb25zdCBJbnNw
ZWN0b3JPdmVybGF5OjpIaWdobGlnaHQ6OkdyaWRIaWdobGlnaHRPdmVybGF5Jik7CisgICAgT3B0
aW9uYWw8SW5zcGVjdG9yT3ZlcmxheTo6SGlnaGxpZ2h0OjpHcmlkSGlnaGxpZ2h0T3ZlcmxheT4g
YnVpbGRHcmlkT3ZlcmxheShjb25zdCBJbnNwZWN0b3JPdmVybGF5OjpHcmlkJiwgYm9vbCBvZmZz
ZXRCb3VuZHNCeVNjcm9sbCA9IGZhbHNlKTsKIAogICAgIHZvaWQgdXBkYXRlUGFpbnRSZWN0c1Rp
bWVyRmlyZWQoKTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvRmxvYXRMaW5lLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9GbG9hdExp
bmUuaAppbmRleCA5YjNiY2RhYzI2MTAzY2ZiNjgwOWY1YzBiNmI5M2RhOGI3NWZkZjk4Li4xYTBk
YjUwOGIwMDNmNGY2ZTUyNGUyNTUwYTVjZDFlYTllMTkwMWVhIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9GbG9hdExpbmUuaAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9GbG9hdExpbmUuaApAQCAtNTAsMTAgKzUwLDEzIEBAIHB1Ymxp
YzoKICAgICAKICAgICBmbG9hdCBsZW5ndGgoKSBjb25zdCB7IHJldHVybiBtX2xlbmd0aDsgfQog
Ci0gICAgY29uc3QgRmxvYXRQb2ludCBwb2ludEF0QWJzb2x1dGVEaXN0YW5jZShmbG9hdCkgY29u
c3Q7CisgICAgV0VCQ09SRV9FWFBPUlQgY29uc3QgRmxvYXRQb2ludCBwb2ludEF0QWJzb2x1dGVE
aXN0YW5jZShmbG9hdCkgY29uc3Q7CiAgICAgY29uc3QgRmxvYXRQb2ludCBwb2ludEF0UmVsYXRp
dmVEaXN0YW5jZShmbG9hdCkgY29uc3Q7CiAgICAgY29uc3QgRmxvYXRMaW5lIGV4dGVuZGVkVG9C
b3VuZHMoY29uc3QgRmxvYXRSZWN0JikgY29uc3Q7CiAgICAgY29uc3QgT3B0aW9uYWw8RmxvYXRQ
b2ludD4gaW50ZXJzZWN0aW9uV2l0aChjb25zdCBGbG9hdExpbmUmKSBjb25zdDsKKworICAgIHRl
bXBsYXRlPGNsYXNzIEVuY29kZXI+IHZvaWQgZW5jb2RlKEVuY29kZXImKSBjb25zdDsKKyAgICB0
ZW1wbGF0ZTxjbGFzcyBEZWNvZGVyPiBzdGF0aWMgT3B0aW9uYWw8RmxvYXRMaW5lPiBkZWNvZGUo
RGVjb2RlciYpOwogICAgIAogcHJpdmF0ZToKICAgICBGbG9hdFBvaW50IG1fc3RhcnQgeyAwLCAw
IH07CkBAIC02MSw0ICs2NCwyNSBAQCBwcml2YXRlOgogICAgIGZsb2F0IG1fbGVuZ3RoIHsgMCB9
OwogfTsKIAordGVtcGxhdGU8Y2xhc3MgRW5jb2Rlcj4gdm9pZCBGbG9hdExpbmU6OmVuY29kZShF
bmNvZGVyJiBlbmNvZGVyKSBjb25zdAoreworICAgIGVuY29kZXIgPDwgbV9zdGFydDsKKyAgICBl
bmNvZGVyIDw8IG1fZW5kOworfQorCit0ZW1wbGF0ZTxjbGFzcyBEZWNvZGVyPiBPcHRpb25hbDxG
bG9hdExpbmU+IEZsb2F0TGluZTo6ZGVjb2RlKERlY29kZXImIGRlY29kZXIpCit7CisgICAgT3B0
aW9uYWw8RmxvYXRQb2ludD4gc3RhcnQ7CisgICAgZGVjb2RlciA+PiBzdGFydDsKKyAgICBpZiAo
IXN0YXJ0KQorICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OworCisgICAgT3B0aW9uYWw8Rmxv
YXRQb2ludD4gZW5kOworICAgIGRlY29kZXIgPj4gZW5kOworICAgIGlmICghZW5kKQorICAgICAg
ICByZXR1cm4gV1RGOjpudWxsb3B0OworCisgICAgcmV0dXJuIHt7ICpzdGFydCwgKmVuZCB9fTsK
K30KKwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9TaGFyZWQvV2ViQ29yZUFyZ3VtZW50
Q29kZXJzLmNwcCBiL1NvdXJjZS9XZWJLaXQvU2hhcmVkL1dlYkNvcmVBcmd1bWVudENvZGVycy5j
cHAKaW5kZXggMWQzYWI4ODI1NDM0NmFhMTFhZDljNjZmMzRlYWVjNzI3OWExMjI5YS4uZjgzZTg4
ZTZkZjMwOTRlYTRmYjdiOWY0OTUyZDkxZDZhM2I3NWMyNyAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YktpdC9TaGFyZWQvV2ViQ29yZUFyZ3VtZW50Q29kZXJzLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0
L1NoYXJlZC9XZWJDb3JlQXJndW1lbnRDb2RlcnMuY3BwCkBAIC0xNjUwLDYgKzE2NTAsNyBAQCB2
b2lkIEFyZ3VtZW50Q29kZXI8SW5zcGVjdG9yT3ZlcmxheTo6SGlnaGxpZ2h0Pjo6ZW5jb2RlKEVu
Y29kZXImIGVuY29kZXIsIGNvbnN0CiAgICAgZW5jb2RlciA8PCBoaWdobGlnaHQuYm9yZGVyQ29s
b3I7CiAgICAgZW5jb2RlciA8PCBoaWdobGlnaHQubWFyZ2luQ29sb3I7CiAgICAgZW5jb2RlciA8
PCBoaWdobGlnaHQucXVhZHM7CisgICAgZW5jb2RlciA8PCBoaWdobGlnaHQuZ3JpZEhpZ2hsaWdo
dE92ZXJsYXlzOwogfQogCiBib29sIEFyZ3VtZW50Q29kZXI8SW5zcGVjdG9yT3ZlcmxheTo6SGln
aGxpZ2h0Pjo6ZGVjb2RlKERlY29kZXImIGRlY29kZXIsIEluc3BlY3Rvck92ZXJsYXk6OkhpZ2hs
aWdodCYgaGlnaGxpZ2h0KQpAQCAtMTY3Myw2ICsxNjc0LDcyIEBAIGJvb2wgQXJndW1lbnRDb2Rl
cjxJbnNwZWN0b3JPdmVybGF5OjpIaWdobGlnaHQ+OjpkZWNvZGUoRGVjb2RlciYgZGVjb2Rlciwg
SW5zcGVjCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICBpZiAoIWRlY29kZXIuZGVjb2RlKGhp
Z2hsaWdodC5xdWFkcykpCiAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBpZiAoIWRlY29kZXIu
ZGVjb2RlKGhpZ2hsaWdodC5ncmlkSGlnaGxpZ2h0T3ZlcmxheXMpKQorICAgICAgICByZXR1cm4g
ZmFsc2U7CisgICAgcmV0dXJuIHRydWU7Cit9CisKK3ZvaWQgQXJndW1lbnRDb2RlcjxJbnNwZWN0
b3JPdmVybGF5OjpIaWdobGlnaHQ6OkdyaWRIaWdobGlnaHRPdmVybGF5Pjo6ZW5jb2RlKEVuY29k
ZXImIGVuY29kZXIsIGNvbnN0IEluc3BlY3Rvck92ZXJsYXk6OkhpZ2hsaWdodDo6R3JpZEhpZ2hs
aWdodE92ZXJsYXkmIGdyaWRIaWdobGlnaHRPdmVybGF5KQoreworICAgIGVuY29kZXIgPDwgZ3Jp
ZEhpZ2hsaWdodE92ZXJsYXkuY29sb3I7CisgICAgZW5jb2RlciA8PCBncmlkSGlnaGxpZ2h0T3Zl
cmxheS5ncmlkTGluZXM7CisgICAgZW5jb2RlciA8PCBncmlkSGlnaGxpZ2h0T3ZlcmxheS5nYXBz
OworICAgIGVuY29kZXIgPDwgZ3JpZEhpZ2hsaWdodE92ZXJsYXkuYXJlYXM7CisgICAgZW5jb2Rl
ciA8PCBncmlkSGlnaGxpZ2h0T3ZlcmxheS5sYWJlbHM7Cit9CisKK2Jvb2wgQXJndW1lbnRDb2Rl
cjxJbnNwZWN0b3JPdmVybGF5OjpIaWdobGlnaHQ6OkdyaWRIaWdobGlnaHRPdmVybGF5Pjo6ZGVj
b2RlKERlY29kZXImIGRlY29kZXIsIEluc3BlY3Rvck92ZXJsYXk6OkhpZ2hsaWdodDo6R3JpZEhp
Z2hsaWdodE92ZXJsYXkmIGdyaWRIaWdobGlnaHRPdmVybGF5KQoreworICAgIGlmICghZGVjb2Rl
ci5kZWNvZGUoZ3JpZEhpZ2hsaWdodE92ZXJsYXkuY29sb3IpKQorICAgICAgICByZXR1cm4gZmFs
c2U7CisgICAgaWYgKCFkZWNvZGVyLmRlY29kZShncmlkSGlnaGxpZ2h0T3ZlcmxheS5ncmlkTGlu
ZXMpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgaWYgKCFkZWNvZGVyLmRlY29kZShncmlk
SGlnaGxpZ2h0T3ZlcmxheS5nYXBzKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGlmICgh
ZGVjb2Rlci5kZWNvZGUoZ3JpZEhpZ2hsaWdodE92ZXJsYXkuYXJlYXMpKQorICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgaWYgKCFkZWNvZGVyLmRlY29kZShncmlkSGlnaGxpZ2h0T3ZlcmxheS5s
YWJlbHMpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgcmV0dXJuIHRydWU7Cit9CisKK3Zv
aWQgQXJndW1lbnRDb2RlcjxJbnNwZWN0b3JPdmVybGF5OjpIaWdobGlnaHQ6OkdyaWRIaWdobGln
aHRPdmVybGF5OjpMYWJlbD46OmVuY29kZShFbmNvZGVyJiBlbmNvZGVyLCBjb25zdCBJbnNwZWN0
b3JPdmVybGF5OjpIaWdobGlnaHQ6OkdyaWRIaWdobGlnaHRPdmVybGF5OjpMYWJlbCYgbGFiZWwp
Cit7CisgICAgZW5jb2RlciA8PCBsYWJlbC50ZXh0OworICAgIGVuY29kZXIgPDwgbGFiZWwubG9j
YXRpb247CisgICAgZW5jb2RlciA8PCBsYWJlbC5iYWNrZ3JvdW5kQ29sb3I7CisgICAgZW5jb2Rl
ciA8PCBzdGF0aWNfY2FzdDx1aW50MzJfdD4obGFiZWwuYXJyb3dEaXJlY3Rpb24pOworfQorCiti
b29sIEFyZ3VtZW50Q29kZXI8SW5zcGVjdG9yT3ZlcmxheTo6SGlnaGxpZ2h0OjpHcmlkSGlnaGxp
Z2h0T3ZlcmxheTo6TGFiZWw+OjpkZWNvZGUoRGVjb2RlciYgZGVjb2RlciwgSW5zcGVjdG9yT3Zl
cmxheTo6SGlnaGxpZ2h0OjpHcmlkSGlnaGxpZ2h0T3ZlcmxheTo6TGFiZWwmIGxhYmVsKQorewor
ICAgIGlmICghZGVjb2Rlci5kZWNvZGUobGFiZWwudGV4dCkpCisgICAgICAgIHJldHVybiBmYWxz
ZTsKKyAgICBpZiAoIWRlY29kZXIuZGVjb2RlKGxhYmVsLmxvY2F0aW9uKSkKKyAgICAgICAgcmV0
dXJuIGZhbHNlOworICAgIGlmICghZGVjb2Rlci5kZWNvZGUobGFiZWwuYmFja2dyb3VuZENvbG9y
KSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgdWludDMyX3QgYXJyb3dEaXJlY3Rpb247
CisgICAgaWYgKCFkZWNvZGVyLmRlY29kZShhcnJvd0RpcmVjdGlvbikpCisgICAgICAgIHJldHVy
biBmYWxzZTsKKyAgICBsYWJlbC5hcnJvd0RpcmVjdGlvbiA9IChJbnNwZWN0b3JPdmVybGF5OjpM
YWJlbEFycm93RGlyZWN0aW9uKWFycm93RGlyZWN0aW9uOworCisgICAgcmV0dXJuIHRydWU7Cit9
CisKK3ZvaWQgQXJndW1lbnRDb2RlcjxJbnNwZWN0b3JPdmVybGF5OjpIaWdobGlnaHQ6OkdyaWRI
aWdobGlnaHRPdmVybGF5OjpBcmVhPjo6ZW5jb2RlKEVuY29kZXImIGVuY29kZXIsIGNvbnN0IElu
c3BlY3Rvck92ZXJsYXk6OkhpZ2hsaWdodDo6R3JpZEhpZ2hsaWdodE92ZXJsYXk6OkFyZWEmIGFy
ZWEpCit7CisgICAgZW5jb2RlciA8PCBhcmVhLm5hbWU7CisgICAgZW5jb2RlciA8PCBhcmVhLnF1
YWQ7Cit9CisKK2Jvb2wgQXJndW1lbnRDb2RlcjxJbnNwZWN0b3JPdmVybGF5OjpIaWdobGlnaHQ6
OkdyaWRIaWdobGlnaHRPdmVybGF5OjpBcmVhPjo6ZGVjb2RlKERlY29kZXImIGRlY29kZXIsIElu
c3BlY3Rvck92ZXJsYXk6OkhpZ2hsaWdodDo6R3JpZEhpZ2hsaWdodE92ZXJsYXk6OkFyZWEmIGFy
ZWEpCit7CisgICAgaWYgKCFkZWNvZGVyLmRlY29kZShhcmVhLm5hbWUpKQorICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgaWYgKCFkZWNvZGVyLmRlY29kZShhcmVhLnF1YWQpKQorICAgICAgICBy
ZXR1cm4gZmFsc2U7CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJLaXQvU2hhcmVkL1dlYkNvcmVBcmd1bWVudENvZGVycy5oIGIvU291cmNlL1dlYktpdC9TaGFy
ZWQvV2ViQ29yZUFyZ3VtZW50Q29kZXJzLmgKaW5kZXggYmQzZDllMWI5M2JmZGNlODkyYzhjYTA3
MjFlYTI0ZjVmZTI5YWJkYS4uYzAwMjBiMzk5ZjI3YjYzZmFhZjM3YmUzYjJjMWFjMDY4ZDU3ODQ0
MCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9TaGFyZWQvV2ViQ29yZUFyZ3VtZW50Q29kZXJz
LmgKKysrIGIvU291cmNlL1dlYktpdC9TaGFyZWQvV2ViQ29yZUFyZ3VtZW50Q29kZXJzLmgKQEAg
LTQ4NCw2ICs0ODQsMjEgQEAgdGVtcGxhdGU8PiBzdHJ1Y3QgQXJndW1lbnRDb2RlcjxXZWJDb3Jl
OjpJbnNwZWN0b3JPdmVybGF5OjpIaWdobGlnaHQ+IHsKICAgICBzdGF0aWMgV0FSTl9VTlVTRURf
UkVUVVJOIGJvb2wgZGVjb2RlKERlY29kZXImLCBXZWJDb3JlOjpJbnNwZWN0b3JPdmVybGF5OjpI
aWdobGlnaHQmKTsKIH07CiAKK3RlbXBsYXRlPD4gc3RydWN0IEFyZ3VtZW50Q29kZXI8V2ViQ29y
ZTo6SW5zcGVjdG9yT3ZlcmxheTo6SGlnaGxpZ2h0OjpHcmlkSGlnaGxpZ2h0T3ZlcmxheT4gewor
ICAgIHN0YXRpYyB2b2lkIGVuY29kZShFbmNvZGVyJiwgY29uc3QgV2ViQ29yZTo6SW5zcGVjdG9y
T3ZlcmxheTo6SGlnaGxpZ2h0OjpHcmlkSGlnaGxpZ2h0T3ZlcmxheSYpOworICAgIHN0YXRpYyBX
QVJOX1VOVVNFRF9SRVRVUk4gYm9vbCBkZWNvZGUoRGVjb2RlciYsIFdlYkNvcmU6Okluc3BlY3Rv
ck92ZXJsYXk6OkhpZ2hsaWdodDo6R3JpZEhpZ2hsaWdodE92ZXJsYXkmKTsKK307CisKK3RlbXBs
YXRlPD4gc3RydWN0IEFyZ3VtZW50Q29kZXI8V2ViQ29yZTo6SW5zcGVjdG9yT3ZlcmxheTo6SGln
aGxpZ2h0OjpHcmlkSGlnaGxpZ2h0T3ZlcmxheTo6TGFiZWw+IHsKKyAgICBzdGF0aWMgdm9pZCBl
bmNvZGUoRW5jb2RlciYsIGNvbnN0IFdlYkNvcmU6Okluc3BlY3Rvck92ZXJsYXk6OkhpZ2hsaWdo
dDo6R3JpZEhpZ2hsaWdodE92ZXJsYXk6OkxhYmVsJik7CisgICAgc3RhdGljIFdBUk5fVU5VU0VE
X1JFVFVSTiBib29sIGRlY29kZShEZWNvZGVyJiwgV2ViQ29yZTo6SW5zcGVjdG9yT3ZlcmxheTo6
SGlnaGxpZ2h0OjpHcmlkSGlnaGxpZ2h0T3ZlcmxheTo6TGFiZWwmKTsKK307CisKK3RlbXBsYXRl
PD4gc3RydWN0IEFyZ3VtZW50Q29kZXI8V2ViQ29yZTo6SW5zcGVjdG9yT3ZlcmxheTo6SGlnaGxp
Z2h0OjpHcmlkSGlnaGxpZ2h0T3ZlcmxheTo6QXJlYT4geworICAgIHN0YXRpYyB2b2lkIGVuY29k
ZShFbmNvZGVyJiwgY29uc3QgV2ViQ29yZTo6SW5zcGVjdG9yT3ZlcmxheTo6SGlnaGxpZ2h0OjpH
cmlkSGlnaGxpZ2h0T3ZlcmxheTo6QXJlYSYpOworICAgIHN0YXRpYyBXQVJOX1VOVVNFRF9SRVRV
Uk4gYm9vbCBkZWNvZGUoRGVjb2RlciYsIFdlYkNvcmU6Okluc3BlY3Rvck92ZXJsYXk6OkhpZ2hs
aWdodDo6R3JpZEhpZ2hsaWdodE92ZXJsYXk6OkFyZWEmKTsKK307CisKIHRlbXBsYXRlPD4gc3Ry
dWN0IEFyZ3VtZW50Q29kZXI8V2ViQ29yZTo6UGFzdGVib2FyZFdlYkNvbnRlbnQ+IHsKICAgICBz
dGF0aWMgdm9pZCBlbmNvZGUoRW5jb2RlciYsIGNvbnN0IFdlYkNvcmU6OlBhc3RlYm9hcmRXZWJD
b250ZW50Jik7CiAgICAgc3RhdGljIFdBUk5fVU5VU0VEX1JFVFVSTiBib29sIGRlY29kZShEZWNv
ZGVyJiwgV2ViQ29yZTo6UGFzdGVib2FyZFdlYkNvbnRlbnQmKTsKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJLaXQvVUlQcm9jZXNzL0luc3BlY3Rvci9pb3MvV0tJbnNwZWN0b3JIaWdobGlnaHRWaWV3
LmggYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9JbnNwZWN0b3IvaW9zL1dLSW5zcGVjdG9ySGln
aGxpZ2h0Vmlldy5oCmluZGV4IDczMDU3ZTRjZWUzZGY1OGQ2MGRmYmY2MDU3ZTQ2ODAyZWMzZTA4
MGEuLmE5MzY5Zjk2N2U5NTc4ZmE1NTQ4MWRhNjA3YzMyMmRhMTU1ZGI1YjAgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0luc3BlY3Rvci9pb3MvV0tJbnNwZWN0b3JIaWdobGln
aHRWaWV3LmgKKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvSW5zcGVjdG9yL2lvcy9XS0lu
c3BlY3RvckhpZ2hsaWdodFZpZXcuaApAQCAtMzAsOCArMzAsOSBAQAogCiBAaW50ZXJmYWNlIFdL
SW5zcGVjdG9ySGlnaGxpZ2h0VmlldyA6IFVJVmlldyB7CiAgICAgUmV0YWluUHRyPE5TTXV0YWJs
ZUFycmF5PENBU2hhcGVMYXllciAqPj4gX2xheWVyczsKKyAgICBSZXRhaW5QdHI8TlNNdXRhYmxl
QXJyYXk8Q0FMYXllciAqPj4gX2dyaWRPdmVybGF5TGF5ZXJzOwogfQotLSAodm9pZCl1cGRhdGU6
KGNvbnN0IFdlYkNvcmU6Okluc3BlY3Rvck92ZXJsYXk6OkhpZ2hsaWdodCYpaGlnaGxpZ2h0Owor
LSAodm9pZCl1cGRhdGU6KGNvbnN0IFdlYkNvcmU6Okluc3BlY3Rvck92ZXJsYXk6OkhpZ2hsaWdo
dCYpaGlnaGxpZ2h0IHNjYWxlOihkb3VibGUpc2NhbGU7CiBAZW5kCiAKICNlbmRpZgpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvSW5zcGVjdG9yL2lvcy9XS0luc3BlY3Rvckhp
Z2hsaWdodFZpZXcubW0gYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9JbnNwZWN0b3IvaW9zL1dL
SW5zcGVjdG9ySGlnaGxpZ2h0Vmlldy5tbQppbmRleCBiMWIwYmUzNGJmMzMwYzBlZTU1NWVkOGRj
NzQxZmM2NDJiMTA5YWY0Li44NjlkN2I1YmFlYzM0ZjA3MzAzNmMwZTcwMTY0ODE4Yjk0NTg5NGJm
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9JbnNwZWN0b3IvaW9zL1dLSW5z
cGVjdG9ySGlnaGxpZ2h0Vmlldy5tbQorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9JbnNw
ZWN0b3IvaW9zL1dLSW5zcGVjdG9ySGlnaGxpZ2h0Vmlldy5tbQpAQCAtMjgsOCArMjgsMTIgQEAK
IAogI2lmIFBMQVRGT1JNKElPU19GQU1JTFkpCiAKKyNpbXBvcnQgPFdlYkNvcmUvRmxvYXRMaW5l
Lmg+CiAjaW1wb3J0IDxXZWJDb3JlL0Zsb2F0UXVhZC5oPgorI2ltcG9ydCA8V2ViQ29yZS9Gb250
Q2FzY2FkZS5oPgorI2ltcG9ydCA8V2ViQ29yZS9Gb250Q2FzY2FkZURlc2NyaXB0aW9uLmg+CiAj
aW1wb3J0IDxXZWJDb3JlL0dlb21ldHJ5VXRpbGl0aWVzLmg+CisjaW1wb3J0IDxXZWJDb3JlL1Rl
eHRSdW4uaD4KIAogQGltcGxlbWVudGF0aW9uIFdLSW5zcGVjdG9ySGlnaGxpZ2h0VmlldwogCkBA
IC0zOCw2ICs0Miw3IEBAIC0gKGluc3RhbmNldHlwZSlpbml0V2l0aEZyYW1lOihDR1JlY3QpZnJh
bWUKICAgICBpZiAoIShzZWxmID0gW3N1cGVyIGluaXRXaXRoRnJhbWU6ZnJhbWVdKSkKICAgICAg
ICAgcmV0dXJuIG5pbDsKICAgICBfbGF5ZXJzID0gYWRvcHROUyhbW05TTXV0YWJsZUFycmF5IGFs
bG9jXSBpbml0XSk7CisgICAgX2dyaWRPdmVybGF5TGF5ZXJzID0gYWRvcHROUyhbW05TTXV0YWJs
ZUFycmF5IGFsbG9jXSBpbml0XSk7CiAgICAgcmV0dXJuIHNlbGY7CiB9CiAKQEAgLTUyLDYgKzU3
LDkgQEAgLSAodm9pZClfcmVtb3ZlQWxsTGF5ZXJzCiAgICAgZm9yIChDQVNoYXBlTGF5ZXIgKmxh
eWVyIGluIF9sYXllcnMuZ2V0KCkpCiAgICAgICAgIFtsYXllciByZW1vdmVGcm9tU3VwZXJsYXll
cl07CiAgICAgW19sYXllcnMgcmVtb3ZlQWxsT2JqZWN0c107CisgICAgZm9yIChDQUxheWVyICps
YXllciBpbiBfZ3JpZE92ZXJsYXlMYXllcnMuZ2V0KCkpCisgICAgICAgIFtsYXllciByZW1vdmVG
cm9tU3VwZXJsYXllcl07CisgICAgW19ncmlkT3ZlcmxheUxheWVycyByZW1vdmVBbGxPYmplY3Rz
XTsKIH0KIAogLSAodm9pZClfY3JlYXRlTGF5ZXJzOihOU1VJbnRlZ2VyKW51bUxheWVycwpAQCAt
NTksOCArNjcsNiBAQCAtICh2b2lkKV9jcmVhdGVMYXllcnM6KE5TVUludGVnZXIpbnVtTGF5ZXJz
CiAgICAgaWYgKFtfbGF5ZXJzIGNvdW50XSA9PSBudW1MYXllcnMpCiAgICAgICAgIHJldHVybjsK
IAotICAgIFtzZWxmIF9yZW1vdmVBbGxMYXllcnNdOwotCiAgICAgZm9yIChOU1VJbnRlZ2VyIGkg
PSAwOyBpIDwgbnVtTGF5ZXJzOyArK2kpIHsKICAgICAgICAgYXV0byBsYXllciA9IGFkb3B0TlMo
W1tDQVNoYXBlTGF5ZXIgYWxsb2NdIGluaXRdKTsKICAgICAgICAgW19sYXllcnMgYWRkT2JqZWN0
OmxheWVyLmdldCgpXTsKQEAgLTIwMiw2ICsyMDgsNyBAQCBzdGF0aWMgdm9pZCBsYXllclBhdGgo
Q0FTaGFwZUxheWVyICpsYXllciwgY29uc3QgV2ViQ29yZTo6RmxvYXRRdWFkJiBvdXRlclF1YWQp
CiAgICAgQ0dQYXRoQWRkTGluZVRvUG9pbnQocGF0aC5nZXQoKSwgMCwgb3V0ZXJRdWFkLnA0KCku
eCgpLCBvdXRlclF1YWQucDQoKS55KCkpOwogICAgIENHUGF0aEFkZExpbmVUb1BvaW50KHBhdGgu
Z2V0KCksIDAsIG91dGVyUXVhZC5wMygpLngoKSwgb3V0ZXJRdWFkLnAzKCkueSgpKTsKICAgICBD
R1BhdGhBZGRMaW5lVG9Qb2ludChwYXRoLmdldCgpLCAwLCBvdXRlclF1YWQucDIoKS54KCksIG91
dGVyUXVhZC5wMigpLnkoKSk7CisgICAgQ0dQYXRoQ2xvc2VTdWJwYXRoKHBhdGguZ2V0KCkpOwog
ICAgIGxheWVyLnBhdGggPSBwYXRoLmdldCgpOwogfQogCkBAIC0yMzUsMTAgKzI0Miw4IEBAIC0g
KHZvaWQpX2xheW91dEZvck5vZGVIaWdobGlnaHQ6KGNvbnN0IFdlYkNvcmU6Okluc3BlY3Rvck92
ZXJsYXk6OkhpZ2hsaWdodCYpaGlnCiAKIC0gKHZvaWQpX2xheW91dEZvck5vZGVMaXN0SGlnaGxp
Z2h0Oihjb25zdCBXZWJDb3JlOjpJbnNwZWN0b3JPdmVybGF5OjpIaWdobGlnaHQmKWhpZ2hsaWdo
dAogewotICAgIGlmICghaGlnaGxpZ2h0LnF1YWRzLnNpemUoKSkgewotICAgICAgICBbc2VsZiBf
cmVtb3ZlQWxsTGF5ZXJzXTsKKyAgICBpZiAoIWhpZ2hsaWdodC5xdWFkcy5zaXplKCkpCiAgICAg
ICAgIHJldHVybjsKLSAgICB9CiAKICAgICB1bnNpZ25lZCBub2RlQ291bnQgPSBoaWdobGlnaHQu
cXVhZHMuc2l6ZSgpIC8gNDsKICAgICBbc2VsZiBfY3JlYXRlTGF5ZXJzOm5vZGVDb3VudCAqIDRd
OwpAQCAtMjUwLDEwICsyNTUsOCBAQCAtICh2b2lkKV9sYXlvdXRGb3JOb2RlTGlzdEhpZ2hsaWdo
dDooY29uc3QgV2ViQ29yZTo6SW5zcGVjdG9yT3ZlcmxheTo6SGlnaGxpZ2h0JgogLSAodm9pZClf
bGF5b3V0Rm9yUmVjdHNIaWdobGlnaHQ6KGNvbnN0IFdlYkNvcmU6Okluc3BlY3Rvck92ZXJsYXk6
OkhpZ2hsaWdodCYpaGlnaGxpZ2h0CiB7CiAgICAgTlNVSW50ZWdlciBudW1MYXllcnMgPSBoaWdo
bGlnaHQucXVhZHMuc2l6ZSgpOwotICAgIGlmICghbnVtTGF5ZXJzKSB7Ci0gICAgICAgIFtzZWxm
IF9yZW1vdmVBbGxMYXllcnNdOworICAgIGlmICghbnVtTGF5ZXJzKQogICAgICAgICByZXR1cm47
Ci0gICAgfQogCiAgICAgW3NlbGYgX2NyZWF0ZUxheWVyczpudW1MYXllcnNdOwogCkBAIC0yNjUs
MTIgKzI2OCwyMDkgQEAgLSAodm9pZClfbGF5b3V0Rm9yUmVjdHNIaWdobGlnaHQ6KGNvbnN0IFdl
YkNvcmU6Okluc3BlY3Rvck92ZXJsYXk6OkhpZ2hsaWdodCYpaGkKICAgICB9CiB9CiAKLS0gKHZv
aWQpdXBkYXRlOihjb25zdCBXZWJDb3JlOjpJbnNwZWN0b3JPdmVybGF5OjpIaWdobGlnaHQmKWhp
Z2hsaWdodAorLSAodm9pZClfY3JlYXRlR3JpZE92ZXJsYXlMYXllcnM6KGNvbnN0IFdlYkNvcmU6
Okluc3BlY3Rvck92ZXJsYXk6OkhpZ2hsaWdodCYpaGlnaGxpZ2h0IHNjYWxlOihkb3VibGUpc2Nh
bGUKK3sKKyAgICBmb3IgKGF1dG8gZ3JpZE92ZXJsYXkgOiBoaWdobGlnaHQuZ3JpZEhpZ2hsaWdo
dE92ZXJsYXlzKSB7CisgICAgICAgIGF1dG8gbGF5ZXIgPSBbc2VsZiBfY3JlYXRlR3JpZE92ZXJs
YXlMYXllcjpncmlkT3ZlcmxheSBzY2FsZTpzY2FsZV07CisgICAgICAgIFtfZ3JpZE92ZXJsYXlM
YXllcnMgYWRkT2JqZWN0OmxheWVyXTsKKyAgICAgICAgW3NlbGYubGF5ZXIgYWRkU3VibGF5ZXI6
bGF5ZXJdOworICAgIH0KK30KKworc3RhdGljIENBTGF5ZXIgKiBjcmVhdGVMYXlvdXRIYXRjaGlu
Z0xheWVyKFdlYkNvcmU6OkZsb2F0UXVhZCBxdWFkLCBXZWJDb3JlOjpDb2xvciBzdHJva2VDb2xv
cikKK3sKKyAgICBDQVNoYXBlTGF5ZXIgKmxheWVyID0gW0NBU2hhcGVMYXllciBsYXllcl07CisK
KyAgICBjb25zdGV4cHIgYXV0byBoYXRjaFNwYWNpbmcgPSAxMjsKKyAgICBhdXRvIGhhdGNoUGF0
aCA9IGFkb3B0Q0YoQ0dQYXRoQ3JlYXRlTXV0YWJsZSgpKTsKKworICAgIFdlYkNvcmU6OkZsb2F0
TGluZSB0b3BTaWRlID0geyBxdWFkLnAxKCksIHF1YWQucDIoKSB9OworICAgIFdlYkNvcmU6OkZs
b2F0TGluZSBsZWZ0U2lkZSA9IHsgcXVhZC5wMSgpLCBxdWFkLnA0KCkgfTsKKworICAgIC8vIFRo
ZSBvcHBvc2l0ZSBheGlzJyBsZW5ndGggaXMgdXNlZCB0byBkZXRlcm1pbmUgaG93IGZhciB0byBk
cmF3IGEgaGF0Y2ggbGluZSBpbiBib3RoIGRpbWVuc2lvbnMsIHdoaWNoIGtlZXBzIHRoZSBsaW5l
cyBhdCBhIDQ1ZGVnIGFuZ2xlLgorICAgIGlmICh0b3BTaWRlLmxlbmd0aCgpID4gbGVmdFNpZGUu
bGVuZ3RoKCkpIHsKKyAgICAgICAgV2ViQ29yZTo6RmxvYXRMaW5lIGJvdHRvbVNpZGUgPSB7IHF1
YWQucDQoKSwgcXVhZC5wMygpIH07CisgICAgICAgIC8vIE1vdmUgYWNyb3NzIHRoZSByZWxhdGl2
ZSB0b3Agb2YgdGhlIHF1YWQsIHN0YXJ0aW5nIGxlZnQgb2YgYDAsIDBgIHRvIGVuc3VyZSB0aGF0
IHRoZSB0YWlsIG9mIHRoZSBwcmV2aW91cyBoYXRjaCBsaW5lIGlzIGRyYXduIHdoaWxlIHNjcm9s
bGluZy4KKyAgICAgICAgZm9yIChmbG9hdCB4ID0gLWxlZnRTaWRlLmxlbmd0aCgpOyB4IDwgdG9w
U2lkZS5sZW5ndGgoKTsgeCArPSBoYXRjaFNwYWNpbmcpIHsKKyAgICAgICAgICAgIGF1dG8gc3Rh
cnRQb2ludCA9IHRvcFNpZGUucG9pbnRBdEFic29sdXRlRGlzdGFuY2UoeCk7CisgICAgICAgICAg
ICBhdXRvIGVuZFBvaW50ID0gYm90dG9tU2lkZS5wb2ludEF0QWJzb2x1dGVEaXN0YW5jZSh4ICsg
bGVmdFNpZGUubGVuZ3RoKCkpOworICAgICAgICAgICAgQ0dQYXRoTW92ZVRvUG9pbnQoaGF0Y2hQ
YXRoLmdldCgpLCAwLCBzdGFydFBvaW50LngoKSwgc3RhcnRQb2ludC55KCkpOworICAgICAgICAg
ICAgQ0dQYXRoQWRkTGluZVRvUG9pbnQoaGF0Y2hQYXRoLmdldCgpLCAwLCBlbmRQb2ludC54KCks
IGVuZFBvaW50LnkoKSk7CisgICAgICAgIH0KKyAgICB9IGVsc2UgeworICAgICAgICBXZWJDb3Jl
OjpGbG9hdExpbmUgcmlnaHRTaWRlID0geyBxdWFkLnAyKCksIHF1YWQucDMoKSB9OworICAgICAg
ICAvLyBNb3ZlIGRvd24gdGhlIHJlbGF0aXZlIGxlZnQgc2lkZSBvZiB0aGUgcXVhZCwgc3RhcnRp
bmcgYWJvdmUgYDAsIDBgIHRvIGVuc3VyZSB0aGF0IHRoZSB0YWlsIG9mIHRoZSBwcmV2aW91cyBo
YXRjaCBsaW5lIGlzIGRyYXduIHdoaWxlIHNjcm9sbGluZy4KKyAgICAgICAgZm9yIChmbG9hdCB5
ID0gLXRvcFNpZGUubGVuZ3RoKCk7IHkgPCBsZWZ0U2lkZS5sZW5ndGgoKTsgeSArPSBoYXRjaFNw
YWNpbmcpIHsKKyAgICAgICAgICAgIGF1dG8gc3RhcnRQb2ludCA9IGxlZnRTaWRlLnBvaW50QXRB
YnNvbHV0ZURpc3RhbmNlKHkpOworICAgICAgICAgICAgYXV0byBlbmRQb2ludCA9IHJpZ2h0U2lk
ZS5wb2ludEF0QWJzb2x1dGVEaXN0YW5jZSh5ICsgdG9wU2lkZS5sZW5ndGgoKSk7CisgICAgICAg
ICAgICBDR1BhdGhNb3ZlVG9Qb2ludChoYXRjaFBhdGguZ2V0KCksIDAsIHN0YXJ0UG9pbnQueCgp
LCBzdGFydFBvaW50LnkoKSk7CisgICAgICAgICAgICBDR1BhdGhBZGRMaW5lVG9Qb2ludChoYXRj
aFBhdGguZ2V0KCksIDAsIGVuZFBvaW50LngoKSwgZW5kUG9pbnQueSgpKTsKKyAgICAgICAgfQor
ICAgIH0KKyAgICBsYXllci5wYXRoID0gaGF0Y2hQYXRoLmdldCgpOworICAgIGxheWVyLnN0cm9r
ZUNvbG9yID0gY2FjaGVkQ0dDb2xvcihzdHJva2VDb2xvcik7CisgICAgbGF5ZXIubGluZVdpZHRo
ID0gMC41OworICAgIGxheWVyLmxpbmVEYXNoUGF0dGVybiA9IEBbW05TTnVtYmVyIG51bWJlcldp
dGhJbnQ6Ml0sIFtOU051bWJlciBudW1iZXJXaXRoSW50OjJdXTsKKworICAgIENBU2hhcGVMYXll
ciAqbWFza0xheWVyID0gW0NBU2hhcGVMYXllciBsYXllcl07CisgICAgbGF5ZXJQYXRoKG1hc2tM
YXllciwgcXVhZCk7CisgICAgbGF5ZXIubWFzayA9IG1hc2tMYXllcjsKKyAgICByZXR1cm4gbGF5
ZXI7Cit9CisKK3N0YXRpYyBDQUxheWVyICogY3JlYXRlTGF5b3V0TGFiZWxMYXllcihTdHJpbmcg
bGFiZWwsIFdlYkNvcmU6OkZsb2F0UG9pbnQgcG9pbnQsIFdlYkNvcmU6Okluc3BlY3Rvck92ZXJs
YXk6OkxhYmVsQXJyb3dEaXJlY3Rpb24gZGlyZWN0aW9uLCBXZWJDb3JlOjpDb2xvciBiYWNrZ3Jv
dW5kQ29sb3IsIFdlYkNvcmU6OkNvbG9yIHN0cm9rZUNvbG9yLCBkb3VibGUgc2NhbGUsIGZsb2F0
IG1heGltdW1XaWR0aCA9IDApCit7CisgICAgV2ViQ29yZTo6Rm9udENhc2NhZGVEZXNjcmlwdGlv
biBmb250RGVzY3JpcHRpb247CisgICAgZm9udERlc2NyaXB0aW9uLnNldEZhbWlsaWVzKHsgInN5
c3RlbS11aSIgfSk7CisgICAgZm9udERlc2NyaXB0aW9uLnNldFdlaWdodChXZWJDb3JlOjpGb250
U2VsZWN0aW9uVmFsdWUoNTAwKSk7CisgICAgZm9udERlc2NyaXB0aW9uLnNldENvbXB1dGVkU2l6
ZSgxMik7CisKKyAgICBXZWJDb3JlOjpGb250Q2FzY2FkZSBmb250KFdURk1vdmUoZm9udERlc2Ny
aXB0aW9uKSwgMCwgMCk7CisgICAgZm9udC51cGRhdGUobnVsbHB0cik7CisKKyAgICBjb25zdGV4
cHIgYXV0byBwYWRkaW5nID0gNDsKKyAgICBjb25zdGV4cHIgYXV0byBhcnJvd1NpemUgPSA0Owor
ICAgIGZsb2F0IHRleHRIZWlnaHQgPSBmb250LmZvbnRNZXRyaWNzKCkuZmxvYXRIZWlnaHQoKTsK
KworICAgIGZsb2F0IHRleHRXaWR0aCA9IGZvbnQud2lkdGgoV2ViQ29yZTo6VGV4dFJ1bihsYWJl
bCkpOworICAgIGlmIChtYXhpbXVtV2lkdGggJiYgdGV4dFdpZHRoICsgKHBhZGRpbmcgKiAyKSA+
IG1heGltdW1XaWR0aCkgeworICAgICAgICBsYWJlbC5hcHBlbmQoIi4uLiJfcyk7CisgICAgICAg
IHdoaWxlICh0ZXh0V2lkdGggKyAocGFkZGluZyAqIDIpID4gbWF4aW11bVdpZHRoICYmIGxhYmVs
Lmxlbmd0aCgpID49IDQpIHsKKyAgICAgICAgICAgIC8vIFJlbW92ZSB0aGUgZm91cnRoIGZyb20g
bGFzdCBjaGFyYWN0ZXIgKHRoZSBjaGFyYWN0ZXIgYmVmb3JlIHRoZSBlbGxpcHNpcykgYW5kIHJl
bWVhc3VyZS4KKyAgICAgICAgICAgIGxhYmVsLnJlbW92ZShsYWJlbC5sZW5ndGgoKSAtIDQpOwor
ICAgICAgICAgICAgdGV4dFdpZHRoID0gZm9udC53aWR0aChXZWJDb3JlOjpUZXh0UnVuKGxhYmVs
KSk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBhdXRvIGxhYmVsUGF0aCA9IGFkb3B0Q0YoQ0dQ
YXRoQ3JlYXRlTXV0YWJsZSgpKTsKKworICAgIC8vIE5vdGU6IEltcGxlbWVudGF0aW9uIERpZmZl
cmVuY2UgLSBUaGUgdGV4dFBvc2l0aW9uIGlzIHRoZSBjZW50ZXIgb2YgdGV4dCwgdW5saWtlIFdl
YkNvcmU6Okluc3BlY3Rvck92ZXJsYXksIHdoZXJlIHRoZSB0ZXh0UG9zaXRpb24gaXMgbGVmdG1v
c3QgcG9pbnQgb24gdGhlIGJhc2VsaW5lIG9mIHRoZSB0ZXh0LgorICAgIFdlYkNvcmU6OkZsb2F0
UG9pbnQgdGV4dFBvc2l0aW9uOworCisgICAgc3dpdGNoIChkaXJlY3Rpb24pIHsKKyAgICBjYXNl
IFdlYkNvcmU6Okluc3BlY3Rvck92ZXJsYXk6OkxhYmVsQXJyb3dEaXJlY3Rpb246OkRvd246Cisg
ICAgICAgIENHUGF0aE1vdmVUb1BvaW50KGxhYmVsUGF0aC5nZXQoKSwgMCwgLSh0ZXh0V2lkdGgg
LyAyKSAtIHBhZGRpbmcsIC10ZXh0SGVpZ2h0IC0gKHBhZGRpbmcgKiAyKSAtIGFycm93U2l6ZSk7
CisgICAgICAgIENHUGF0aEFkZExpbmVUb1BvaW50KGxhYmVsUGF0aC5nZXQoKSwgMCwgLSh0ZXh0
V2lkdGggLyAyKSAtIHBhZGRpbmcsIC1hcnJvd1NpemUpOworICAgICAgICBDR1BhdGhBZGRMaW5l
VG9Qb2ludChsYWJlbFBhdGguZ2V0KCksIDAsIC1hcnJvd1NpemUsIC1hcnJvd1NpemUpOworICAg
ICAgICBDR1BhdGhBZGRMaW5lVG9Qb2ludChsYWJlbFBhdGguZ2V0KCksIDAsIDAsIDApOworICAg
ICAgICBDR1BhdGhBZGRMaW5lVG9Qb2ludChsYWJlbFBhdGguZ2V0KCksIDAsIGFycm93U2l6ZSwg
LWFycm93U2l6ZSk7CisgICAgICAgIENHUGF0aEFkZExpbmVUb1BvaW50KGxhYmVsUGF0aC5nZXQo
KSwgMCwgKHRleHRXaWR0aCAvIDIpICsgcGFkZGluZywgLWFycm93U2l6ZSk7CisgICAgICAgIENH
UGF0aEFkZExpbmVUb1BvaW50KGxhYmVsUGF0aC5nZXQoKSwgMCwgKHRleHRXaWR0aCAvIDIpICsg
cGFkZGluZywgLXRleHRIZWlnaHQgLSAocGFkZGluZyAqIDIpIC0gYXJyb3dTaXplKTsKKyAgICAg
ICAgdGV4dFBvc2l0aW9uID0gV2ViQ29yZTo6RmxvYXRQb2ludCgwLCAtKHRleHRIZWlnaHQgLyAy
KSAtIGFycm93U2l6ZSAtIHBhZGRpbmcpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFdlYkNv
cmU6Okluc3BlY3Rvck92ZXJsYXk6OkxhYmVsQXJyb3dEaXJlY3Rpb246OlVwOgorICAgICAgICBD
R1BhdGhNb3ZlVG9Qb2ludChsYWJlbFBhdGguZ2V0KCksIDAsIC0odGV4dFdpZHRoIC8gMikgLSBw
YWRkaW5nLCB0ZXh0SGVpZ2h0ICsgKHBhZGRpbmcgKiAyKSArIGFycm93U2l6ZSk7CisgICAgICAg
IENHUGF0aEFkZExpbmVUb1BvaW50KGxhYmVsUGF0aC5nZXQoKSwgMCwgLSh0ZXh0V2lkdGggLyAy
KSAtIHBhZGRpbmcsIGFycm93U2l6ZSk7CisgICAgICAgIENHUGF0aEFkZExpbmVUb1BvaW50KGxh
YmVsUGF0aC5nZXQoKSwgMCwgLWFycm93U2l6ZSwgYXJyb3dTaXplKTsKKyAgICAgICAgQ0dQYXRo
QWRkTGluZVRvUG9pbnQobGFiZWxQYXRoLmdldCgpLCAwLCAwLCAwKTsKKyAgICAgICAgQ0dQYXRo
QWRkTGluZVRvUG9pbnQobGFiZWxQYXRoLmdldCgpLCAwLCBhcnJvd1NpemUsIGFycm93U2l6ZSk7
CisgICAgICAgIENHUGF0aEFkZExpbmVUb1BvaW50KGxhYmVsUGF0aC5nZXQoKSwgMCwgKHRleHRX
aWR0aCAvIDIpICsgcGFkZGluZywgYXJyb3dTaXplKTsKKyAgICAgICAgQ0dQYXRoQWRkTGluZVRv
UG9pbnQobGFiZWxQYXRoLmdldCgpLCAwLCAodGV4dFdpZHRoIC8gMikgKyBwYWRkaW5nLCB0ZXh0
SGVpZ2h0ICsgKHBhZGRpbmcgKiAyKSArIGFycm93U2l6ZSk7CisgICAgICAgIHRleHRQb3NpdGlv
biA9IFdlYkNvcmU6OkZsb2F0UG9pbnQoMCwgKHRleHRIZWlnaHQgLyAyKSArIGFycm93U2l6ZSAr
IHBhZGRpbmcpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFdlYkNvcmU6Okluc3BlY3Rvck92
ZXJsYXk6OkxhYmVsQXJyb3dEaXJlY3Rpb246OlJpZ2h0OgorICAgICAgICBDR1BhdGhNb3ZlVG9Q
b2ludChsYWJlbFBhdGguZ2V0KCksIDAsIC10ZXh0V2lkdGggLSAocGFkZGluZyAqIDIpIC0gYXJy
b3dTaXplLCAodGV4dEhlaWdodCAvIDIpICsgcGFkZGluZyk7CisgICAgICAgIENHUGF0aEFkZExp
bmVUb1BvaW50KGxhYmVsUGF0aC5nZXQoKSwgMCwgLWFycm93U2l6ZSwgKHRleHRIZWlnaHQgLyAy
KSArIHBhZGRpbmcpOworICAgICAgICBDR1BhdGhBZGRMaW5lVG9Qb2ludChsYWJlbFBhdGguZ2V0
KCksIDAsIC1hcnJvd1NpemUsIGFycm93U2l6ZSk7CisgICAgICAgIENHUGF0aEFkZExpbmVUb1Bv
aW50KGxhYmVsUGF0aC5nZXQoKSwgMCwgMCwgMCk7CisgICAgICAgIENHUGF0aEFkZExpbmVUb1Bv
aW50KGxhYmVsUGF0aC5nZXQoKSwgMCwgLWFycm93U2l6ZSwgLWFycm93U2l6ZSk7CisgICAgICAg
IENHUGF0aEFkZExpbmVUb1BvaW50KGxhYmVsUGF0aC5nZXQoKSwgMCwgLWFycm93U2l6ZSwgLSh0
ZXh0SGVpZ2h0IC8gMikgLSBwYWRkaW5nKTsKKyAgICAgICAgQ0dQYXRoQWRkTGluZVRvUG9pbnQo
bGFiZWxQYXRoLmdldCgpLCAwLCAtdGV4dFdpZHRoIC0gKHBhZGRpbmcgKiAyKSAtIGFycm93U2l6
ZSwgLSh0ZXh0SGVpZ2h0IC8gMikgLSBwYWRkaW5nKTsKKyAgICAgICAgdGV4dFBvc2l0aW9uID0g
V2ViQ29yZTo6RmxvYXRQb2ludCgtKHRleHRXaWR0aCAvIDIpIC0gYXJyb3dTaXplIC0gcGFkZGlu
ZywgMCk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgV2ViQ29yZTo6SW5zcGVjdG9yT3Zlcmxh
eTo6TGFiZWxBcnJvd0RpcmVjdGlvbjo6TGVmdDoKKyAgICAgICAgQ0dQYXRoTW92ZVRvUG9pbnQo
bGFiZWxQYXRoLmdldCgpLCAwLCB0ZXh0V2lkdGggKyAocGFkZGluZyAqIDIpICsgYXJyb3dTaXpl
LCAodGV4dEhlaWdodCAvIDIpICsgcGFkZGluZyk7CisgICAgICAgIENHUGF0aEFkZExpbmVUb1Bv
aW50KGxhYmVsUGF0aC5nZXQoKSwgMCwgYXJyb3dTaXplLCAodGV4dEhlaWdodCAvIDIpICsgcGFk
ZGluZyk7CisgICAgICAgIENHUGF0aEFkZExpbmVUb1BvaW50KGxhYmVsUGF0aC5nZXQoKSwgMCwg
YXJyb3dTaXplLCBhcnJvd1NpemUpOworICAgICAgICBDR1BhdGhBZGRMaW5lVG9Qb2ludChsYWJl
bFBhdGguZ2V0KCksIDAsIDAsIDApOworICAgICAgICBDR1BhdGhBZGRMaW5lVG9Qb2ludChsYWJl
bFBhdGguZ2V0KCksIDAsIGFycm93U2l6ZSwgLWFycm93U2l6ZSk7CisgICAgICAgIENHUGF0aEFk
ZExpbmVUb1BvaW50KGxhYmVsUGF0aC5nZXQoKSwgMCwgYXJyb3dTaXplLCAtKHRleHRIZWlnaHQg
LyAyKSAtIHBhZGRpbmcpOworICAgICAgICBDR1BhdGhBZGRMaW5lVG9Qb2ludChsYWJlbFBhdGgu
Z2V0KCksIDAsIHRleHRXaWR0aCArIChwYWRkaW5nICogMikgKyBhcnJvd1NpemUsIC0odGV4dEhl
aWdodCAvIDIpIC0gcGFkZGluZyk7CisgICAgICAgIHRleHRQb3NpdGlvbiA9IFdlYkNvcmU6OkZs
b2F0UG9pbnQoKHRleHRXaWR0aCAvIDIpICsgYXJyb3dTaXplICsgcGFkZGluZywgMCk7CisgICAg
ICAgIGJyZWFrOworICAgIGNhc2UgV2ViQ29yZTo6SW5zcGVjdG9yT3ZlcmxheTo6TGFiZWxBcnJv
d0RpcmVjdGlvbjo6Tm9uZToKKyAgICAgICAgQ0dQYXRoTW92ZVRvUG9pbnQobGFiZWxQYXRoLmdl
dCgpLCAwLCAwLCAwKTsKKyAgICAgICAgQ0dQYXRoQWRkTGluZVRvUG9pbnQobGFiZWxQYXRoLmdl
dCgpLCAwLCAwLCB0ZXh0SGVpZ2h0ICsgKHBhZGRpbmcgKiAyKSk7CisgICAgICAgIENHUGF0aEFk
ZExpbmVUb1BvaW50KGxhYmVsUGF0aC5nZXQoKSwgMCwgdGV4dFdpZHRoICsgKHBhZGRpbmcgKiAy
KSwgdGV4dEhlaWdodCArIChwYWRkaW5nICogMikpOworICAgICAgICBDR1BhdGhBZGRMaW5lVG9Q
b2ludChsYWJlbFBhdGguZ2V0KCksIDAsIHRleHRXaWR0aCArIChwYWRkaW5nICogMiksIDApOwor
ICAgICAgICB0ZXh0UG9zaXRpb24gPSBXZWJDb3JlOjpGbG9hdFBvaW50KHBhZGRpbmcgKyAodGV4
dFdpZHRoIC8gMiksIHBhZGRpbmcgKyAodGV4dEhlaWdodCAvIDIpKTsKKyAgICAgICAgYnJlYWs7
CisgICAgfQorCisgICAgQ0dQYXRoQ2xvc2VTdWJwYXRoKGxhYmVsUGF0aC5nZXQoKSk7CisKKyAg
ICBDQUxheWVyICpsYXllciA9IFtDQUxheWVyIGxheWVyXTsKKworICAgIENBU2hhcGVMYXllciAq
bGFiZWxQYXRoTGF5ZXIgPSBbQ0FTaGFwZUxheWVyIGxheWVyXTsKKyAgICBsYWJlbFBhdGhMYXll
ci5wYXRoID0gbGFiZWxQYXRoLmdldCgpOworICAgIGxhYmVsUGF0aExheWVyLmZpbGxDb2xvciA9
IGNhY2hlZENHQ29sb3IoYmFja2dyb3VuZENvbG9yKTsKKyAgICBsYWJlbFBhdGhMYXllci5zdHJv
a2VDb2xvciA9IGNhY2hlZENHQ29sb3Ioc3Ryb2tlQ29sb3IpOworICAgIGxhYmVsUGF0aExheWVy
LnBvc2l0aW9uID0gQ0dQb2ludE1ha2UocG9pbnQueCgpLCBwb2ludC55KCkpOworICAgIFtsYXll
ciBhZGRTdWJsYXllcjpsYWJlbFBhdGhMYXllcl07CisKKyAgICBDQVRleHRMYXllciAqdGV4dExh
eWVyID0gW0NBVGV4dExheWVyIGxheWVyXTsKKyAgICB0ZXh0TGF5ZXIuZnJhbWUgPSBDR1JlY3RN
YWtlKDAsIDAsIHRleHRXaWR0aCwgdGV4dEhlaWdodCk7CisgICAgdGV4dExheWVyLnN0cmluZyA9
IGxhYmVsOworICAgIHRleHRMYXllci5mb250ID0gZm9udC5wcmltYXJ5Rm9udCgpLmdldENURm9u
dCgpOworICAgIHRleHRMYXllci5mb250U2l6ZSA9IDEyOworICAgIHRleHRMYXllci5hbGlnbm1l
bnRNb2RlID0ga0NBQWxpZ25tZW50TGVmdDsKKyAgICB0ZXh0TGF5ZXIuZm9yZWdyb3VuZENvbG9y
ID0gQ0dDb2xvckdldENvbnN0YW50Q29sb3Ioa0NHQ29sb3JCbGFjayk7CisgICAgdGV4dExheWVy
LnBvc2l0aW9uID0gQ0dQb2ludE1ha2UodGV4dFBvc2l0aW9uLngoKSArIHBvaW50LngoKSwgdGV4
dFBvc2l0aW9uLnkoKSArIHBvaW50LnkoKSk7CisgICAgdGV4dExheWVyLmNvbnRlbnRzU2NhbGUg
PSBbW1VJU2NyZWVuIG1haW5TY3JlZW5dIHNjYWxlXSAqIHNjYWxlOworICAgIFtsYXllciBhZGRT
dWJsYXllcjp0ZXh0TGF5ZXJdOworCisgICAgcmV0dXJuIGxheWVyOworfQorCistIChDQUxheWVy
ICopX2NyZWF0ZUdyaWRPdmVybGF5TGF5ZXI6KGNvbnN0IFdlYkNvcmU6Okluc3BlY3Rvck92ZXJs
YXk6OkhpZ2hsaWdodDo6R3JpZEhpZ2hsaWdodE92ZXJsYXkmKW92ZXJsYXkgc2NhbGU6KGRvdWJs
ZSlzY2FsZQogeworICAgIC8vIEtlZXAgaW1wbGVtZW50YXRpb24gcm91Z2hseSBlcXVpdmlsZW50
IHRvIGBXZWJDb3JlOjpJbnNwZWN0b3JPdmVybGF5OjpkcmF3R3JpZE92ZXJsYXlgLgorICAgIENB
TGF5ZXIgKmxheWVyID0gW0NBTGF5ZXIgbGF5ZXJdOworCisgICAgYXV0byBncmlkTGluZXNQYXRo
ID0gYWRvcHRDRihDR1BhdGhDcmVhdGVNdXRhYmxlKCkpOworICAgIGZvciAoYXV0byBncmlkTGlu
ZSA6IG92ZXJsYXkuZ3JpZExpbmVzKSB7CisgICAgICAgIENHUGF0aE1vdmVUb1BvaW50KGdyaWRM
aW5lc1BhdGguZ2V0KCksIDAsIGdyaWRMaW5lLnN0YXJ0KCkueCgpLCBncmlkTGluZS5zdGFydCgp
LnkoKSk7CisgICAgICAgIENHUGF0aEFkZExpbmVUb1BvaW50KGdyaWRMaW5lc1BhdGguZ2V0KCks
IDAsIGdyaWRMaW5lLmVuZCgpLngoKSwgZ3JpZExpbmUuZW5kKCkueSgpKTsKKyAgICB9CisgICAg
Q0FTaGFwZUxheWVyICpncmlkTGluZXNMYXllciA9IFtDQVNoYXBlTGF5ZXIgbGF5ZXJdOworICAg
IGdyaWRMaW5lc0xheWVyLnBhdGggPSBncmlkTGluZXNQYXRoLmdldCgpOworICAgIGdyaWRMaW5l
c0xheWVyLmxpbmVXaWR0aCA9IDE7CisgICAgZ3JpZExpbmVzTGF5ZXIuc3Ryb2tlQ29sb3IgPSBj
YWNoZWRDR0NvbG9yKG92ZXJsYXkuY29sb3IpOworICAgIFtsYXllciBhZGRTdWJsYXllcjpncmlk
TGluZXNMYXllcl07CisKKyAgICBmb3IgKGF1dG8gZ2FwUXVhZCA6IG92ZXJsYXkuZ2FwcykKKyAg
ICAgICAgW2xheWVyIGFkZFN1YmxheWVyOmNyZWF0ZUxheW91dEhhdGNoaW5nTGF5ZXIoZ2FwUXVh
ZCwgb3ZlcmxheS5jb2xvcildOworCisgICAgZm9yIChhdXRvIGFyZWEgOiBvdmVybGF5LmFyZWFz
KSB7CisgICAgICAgIENBU2hhcGVMYXllciAqYXJlYUxheWVyID0gW0NBU2hhcGVMYXllciBsYXll
cl07CisgICAgICAgIGxheWVyUGF0aChhcmVhTGF5ZXIsIGFyZWEucXVhZCk7CisgICAgICAgIGFy
ZWFMYXllci5saW5lV2lkdGggPSAzOworICAgICAgICBhcmVhTGF5ZXIuZmlsbENvbG9yID0gQ0dD
b2xvckdldENvbnN0YW50Q29sb3Ioa0NHQ29sb3JDbGVhcik7CisgICAgICAgIGFyZWFMYXllci5z
dHJva2VDb2xvciA9IGNhY2hlZENHQ29sb3Iob3ZlcmxheS5jb2xvcik7CisgICAgICAgIFtsYXll
ciBhZGRTdWJsYXllcjphcmVhTGF5ZXJdOworICAgIH0KKworICAgIGNvbnN0ZXhwciBhdXRvIHRy
YW5zbHVjZW50TGFiZWxCYWNrZ3JvdW5kQ29sb3IgPSBXZWJDb3JlOjpDb2xvcjo6d2hpdGUuY29s
b3JXaXRoQWxwaGFCeXRlKDE1Myk7CisKKyAgICBmb3IgKGF1dG8gYXJlYSA6IG92ZXJsYXkuYXJl
YXMpCisgICAgICAgIFtsYXllciBhZGRTdWJsYXllcjpjcmVhdGVMYXlvdXRMYWJlbExheWVyKGFy
ZWEubmFtZSwgYXJlYS5xdWFkLnAxKCksIFdlYkNvcmU6Okluc3BlY3Rvck92ZXJsYXk6OkxhYmVs
QXJyb3dEaXJlY3Rpb246Ok5vbmUsIHRyYW5zbHVjZW50TGFiZWxCYWNrZ3JvdW5kQ29sb3IsIG92
ZXJsYXkuY29sb3IsIHNjYWxlLCBhcmVhLnF1YWQuYm91bmRpbmdCb3goKS53aWR0aCgpKV07CisK
KyAgICBmb3IgKGF1dG8gbGFiZWwgOiBvdmVybGF5LmxhYmVscykKKyAgICAgICAgW2xheWVyIGFk
ZFN1YmxheWVyOmNyZWF0ZUxheW91dExhYmVsTGF5ZXIobGFiZWwudGV4dCwgbGFiZWwubG9jYXRp
b24sIGxhYmVsLmFycm93RGlyZWN0aW9uLCBsYWJlbC5iYWNrZ3JvdW5kQ29sb3IsIG92ZXJsYXku
Y29sb3IsIHNjYWxlKV07CisKKyAgICByZXR1cm4gbGF5ZXI7Cit9CisKKy0gKHZvaWQpdXBkYXRl
Oihjb25zdCBXZWJDb3JlOjpJbnNwZWN0b3JPdmVybGF5OjpIaWdobGlnaHQmKWhpZ2hsaWdodCBz
Y2FsZTooZG91YmxlKXNjYWxlCit7CisgICAgW3NlbGYgX3JlbW92ZUFsbExheWVyc107CisKICAg
ICBpZiAoaGlnaGxpZ2h0LnR5cGUgPT0gV2ViQ29yZTo6SW5zcGVjdG9yT3ZlcmxheTo6SGlnaGxp
Z2h0OjpUeXBlOjpOb2RlIHx8IGhpZ2hsaWdodC50eXBlID09IFdlYkNvcmU6Okluc3BlY3Rvck92
ZXJsYXk6OkhpZ2hsaWdodDo6VHlwZTo6Tm9kZUxpc3QpCiAgICAgICAgIFtzZWxmIF9sYXlvdXRG
b3JOb2RlTGlzdEhpZ2hsaWdodDpoaWdobGlnaHRdOwogICAgIGVsc2UgaWYgKGhpZ2hsaWdodC50
eXBlID09IFdlYkNvcmU6Okluc3BlY3Rvck92ZXJsYXk6OkhpZ2hsaWdodDo6VHlwZTo6UmVjdHMp
CiAgICAgICAgIFtzZWxmIF9sYXlvdXRGb3JSZWN0c0hpZ2hsaWdodDpoaWdobGlnaHRdOworCisg
ICAgW3NlbGYgX2NyZWF0ZUdyaWRPdmVybGF5TGF5ZXJzOmhpZ2hsaWdodCBzY2FsZTpzY2FsZV07
CiB9CiAKIEBlbmQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL2lvcy9XS0Nv
bnRlbnRWaWV3Lm1tIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvaW9zL1dLQ29udGVudFZpZXcu
bW0KaW5kZXggMTViOWU3ZDZmYTEwODkzMzFmZjRmNjg5N2NhYzhjYmE0NGE5MjZiYy4uZjRkNjY1
YTk2NGViYWNkNTk0ZTlkZmVkZDE4OTczNzFlNTE2ZGQwNyAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YktpdC9VSVByb2Nlc3MvaW9zL1dLQ29udGVudFZpZXcubW0KKysrIGIvU291cmNlL1dlYktpdC9V
SVByb2Nlc3MvaW9zL1dLQ29udGVudFZpZXcubW0KQEAgLTM2NSw3ICszNjUsNyBAQCAtICh2b2lk
KV9zaG93SW5zcGVjdG9ySGlnaGxpZ2h0Oihjb25zdCBXZWJDb3JlOjpJbnNwZWN0b3JPdmVybGF5
OjpIaWdobGlnaHQmKWhpZwogICAgICAgICBbc2VsZiBpbnNlcnRTdWJ2aWV3Ol9pbnNwZWN0b3JI
aWdobGlnaHRWaWV3LmdldCgpIGFib3ZlU3Vidmlldzpfcm9vdENvbnRlbnRWaWV3LmdldCgpXTsK
ICAgICB9CiAKLSAgICBbX2luc3BlY3RvckhpZ2hsaWdodFZpZXcgdXBkYXRlOmhpZ2hsaWdodF07
CisgICAgW19pbnNwZWN0b3JIaWdobGlnaHRWaWV3IHVwZGF0ZTpoaWdobGlnaHQgc2NhbGU6W3Nl
bGYgX2NvbnRlbnRab29tU2NhbGVdXTsKIH0KIAogLSAodm9pZClfaGlkZUluc3BlY3RvckhpZ2hs
aWdodAo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>423842</attachid>
            <date>2021-03-21 16:48:57 -0700</date>
            <delta_ts>2021-03-22 17:05:50 -0700</delta_ts>
            <desc>Patch v1.2 - Move new encoders/decoders to InspectorOverlay.h</desc>
            <filename>bug-223396-20210321164856.patch</filename>
            <type>text/plain</type>
            <size>48406</size>
            <attacher name="Patrick Angle">pangle</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjc0NzUwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggYWQ5MjI2OTk4MWQ3OWQy
YjFmZjcwMjhmZGUyOGEwMGU3YzQ0MzdmMi4uZTg4MGI5OTUzNThhNGExODc2NDkzYTY0OGVmYjk4
NDA2NGVjYjI2YyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDM5IEBACisyMDIxLTAzLTIxICBQYXRy
aWNrIEFuZ2xlICA8cGFuZ2xlQGFwcGxlLmNvbT4KKworICAgICAgICBXZWIgSW5zcGVjdG9yOiBQ
b3J0IGdyaWQgb3ZlcmxheSBkcmF3aW5nIHRvIGlPUworICAgICAgICBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjIzMzk2CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9C
T0RZIChPT1BTISkuCisKKyAgICAgICAgRW5hYmxlIEdyaWQgT3ZlcmxheXMgdG8gYmUgZHJhd24g
b24gaU9TIGJlIGluY2x1ZGluZyBjb21wdXRlZCBvdmVybGF5IG9iamVjdHMgaW4gdGhlCisgICAg
ICAgIGBJbnNwZWN0b3JPdmVybGF5OjpIaWdobGlnaHRgLiBTb21lIHJlZmFjdG9yaW5nIHdhcyBh
bHNvIGRvbmUgdG8gcmVkdWNlIGNvZGUgZHVwbGljYXRpb24gaW4gdGhlIG5vcm1hbCBhbmQgaU9T
CisgICAgICAgIHBhdGhzLgorCisgICAgICAgICogSGVhZGVycy5jbWFrZToKKyAgICAgICAgKiBX
ZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgIC0gRmxvYXRMaW5lIHNo
b3VsZCBiZSBhY2Nlc3NpYmxlIGZyb20gYFdlYktpdDo6KmAKKyAgICAgICAgKiBpbnNwZWN0b3Iv
SW5zcGVjdG9yT3ZlcmxheS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JPdmVybGF5
OjpwYWludCk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JPdmVybGF5OjpnZXRIaWdobGln
aHQpOgorICAgICAgICAtIEFkZCBgR3JpZEhpZ2hsaWdodE92ZXJsYXlgcyB0byB0aGUgaGlnaGxp
Z2h0IG9iamVjdCBmb3IgaU9TLgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yT3ZlcmxheTo6
ZHJhd0dyaWRPdmVybGF5KToKKyAgICAgICAgKFdlYkNvcmU6OmJ1aWxkTGFiZWwpOgorICAgICAg
ICAoV2ViQ29yZTo6SW5zcGVjdG9yT3ZlcmxheTo6YnVpbGRHcmlkT3ZlcmxheSk6CisgICAgICAg
IC0gUmVmYWN0b3JlZCBhY3R1YWwgZHJhd2luZyBpbnRvIGEgc2VwYXJhdGUgbWV0aG9kIHRvIHJl
ZHVjZSB0aGUgYW1vdW50IG9mIGNvZGUgZHVwbGljYXRpb24gbmVlZGVkIGJldHdlZW4gdGhlCisg
ICAgICAgIG5vcm1hbCBwYXRoIGFuZCB0aGUgaU9TIHBhdGguCisgICAgICAgICogaW5zcGVjdG9y
L0luc3BlY3Rvck92ZXJsYXkuaDoKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3Rvck92ZXJsYXk6
OkhpZ2hsaWdodDo6R3JpZEhpZ2hsaWdodE92ZXJsYXk6OmVuY29kZSBjb25zdCk6CisgICAgICAg
IChXZWJDb3JlOjpJbnNwZWN0b3JPdmVybGF5OjpIaWdobGlnaHQ6OkdyaWRIaWdobGlnaHRPdmVy
bGF5OjpkZWNvZGUpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yT3ZlcmxheTo6SGlnaGxp
Z2h0OjpHcmlkSGlnaGxpZ2h0T3ZlcmxheTo6TGFiZWw6OmVuY29kZSBjb25zdCk6CisgICAgICAg
IChXZWJDb3JlOjpJbnNwZWN0b3JPdmVybGF5OjpIaWdobGlnaHQ6OkdyaWRIaWdobGlnaHRPdmVy
bGF5OjpMYWJlbDo6ZGVjb2RlKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3Rvck92ZXJsYXk6
OkhpZ2hsaWdodDo6R3JpZEhpZ2hsaWdodE92ZXJsYXk6OkFyZWE6OmVuY29kZSBjb25zdCk6Cisg
ICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JPdmVybGF5OjpIaWdobGlnaHQ6OkdyaWRIaWdobGln
aHRPdmVybGF5OjpBcmVhOjpkZWNvZGUpOgorICAgICAgICAtIFN1cHBvcnQgZW5jb2RlL2RlY29k
ZSBmb3Igc2VuZGluZyBuZXcgSGlnaGxpZ2h0IGNvbXBvbmVudHMgdG8gdGhlIFVJUHJvY2Vzcy4K
KyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9GbG9hdExpbmUuaDoKKyAgICAgICAgKFdlYkNv
cmU6OkZsb2F0TGluZTo6ZW5jb2RlIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkZsb2F0TGlu
ZTo6ZGVjb2RlKToKKyAgICAgICAgLSBTdXBwb3J0IGVuY29kZS9kZWNvZGUgYXMgcGFydCBvZiBz
ZXJpYWxpemF0aW9uIG9mIGBJbnNwZWN0b3JPdmVybGF5OjpIaWdobGlnaHRgCisKIDIwMjEtMDMt
MTkgIERlYW4gSmFja3NvbiAgPGRpbm9AYXBwbGUuY29tPgogCiAgICAgICAgIExpbmsgYWdhaW5z
dCB0aGUgQU5HTEUgU2hhcmVkIExpYnJhcnkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvQ2hh
bmdlTG9nIGIvU291cmNlL1dlYktpdC9DaGFuZ2VMb2cKaW5kZXggZTlmNzc5NGM5NWViMzBlZDZk
ZTRkMDRiMjM0NmI4MjU0OTJkNzM3My4uMDMyZjFkMDQzZDUwZjgwZjBmYTJkY2I3MDMwMGE2OGQ5
ZmQwMWYwMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9DaGFuZ2VMb2cKKysrIGIvU291cmNl
L1dlYktpdC9DaGFuZ2VMb2cKQEAgLTEsMyArMSwzNCBAQAorMjAyMS0wMy0yMSAgUGF0cmljayBB
bmdsZSAgPHBhbmdsZUBhcHBsZS5jb20+CisKKyAgICAgICAgV2ViIEluc3BlY3RvcjogUG9ydCBn
cmlkIG92ZXJsYXkgZHJhd2luZyB0byBpT1MKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTIyMzM5NgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAo
T09QUyEpLgorCisgICAgICAgIFBvcnQgZHJhd2luZyByb3V0aW5lcyBmcm9tIGBXZWJDb3JlOjpJ
bnNwZWN0b3JPdmVybGF5YCB0byB1c2UgYENBTGF5ZXJgcyBvbiBpT1MgdG8gZW5hYmxlIGRyYXdp
bmcgZ3JpZCBvdmVybGF5cworICAgICAgICBvbiBpT1MuIERyYXdpbmcgbG9naWMgaXMsIGFzIG11
Y2ggYXMgcG9zc2libGUsIGVxdWl2YWxlbnQgdG8gdGhhdCBkZWZpbmVkIGluIGBXZWJDb3JlOjpJ
bnNwZWN0b3JPdmVybGF5YCwgd2l0aAorICAgICAgICBjaGFuZ2VzIHRvIGZpdCB0aGUgQ0FMYXll
ciBtb2RlbC4KKworICAgICAgICAqIFVJUHJvY2Vzcy9JbnNwZWN0b3IvaW9zL1dLSW5zcGVjdG9y
SGlnaGxpZ2h0Vmlldy5oOgorICAgICAgICAqIFVJUHJvY2Vzcy9JbnNwZWN0b3IvaW9zL1dLSW5z
cGVjdG9ySGlnaGxpZ2h0Vmlldy5tbToKKyAgICAgICAgKC1bV0tJbnNwZWN0b3JIaWdobGlnaHRW
aWV3IGluaXRXaXRoRnJhbWU6XSk6CisgICAgICAgICgtW1dLSW5zcGVjdG9ySGlnaGxpZ2h0Vmll
dyBfcmVtb3ZlQWxsTGF5ZXJzXSk6CisgICAgICAgICgtW1dLSW5zcGVjdG9ySGlnaGxpZ2h0Vmll
dyBfY3JlYXRlTGF5ZXJzOl0pOgorICAgICAgICAobGF5ZXJQYXRoKToKKyAgICAgICAgLSBQYXRo
IHNob3VsZCBiZSBjbG9zZWQgc28gdGhhdCBvYmplY3RzIGJlaW5nIHN0cm9rZWQgYXJlIHN0cm9r
ZWQgb24gYWxsIGVkZ2VzLgorICAgICAgICAoLVtXS0luc3BlY3RvckhpZ2hsaWdodFZpZXcgX2xh
eW91dEZvck5vZGVMaXN0SGlnaGxpZ2h0Ol0pOgorICAgICAgICAoLVtXS0luc3BlY3RvckhpZ2hs
aWdodFZpZXcgX2xheW91dEZvclJlY3RzSGlnaGxpZ2h0Ol0pOgorICAgICAgICAoLVtXS0luc3Bl
Y3RvckhpZ2hsaWdodFZpZXcgX2NyZWF0ZUdyaWRPdmVybGF5TGF5ZXJzOnNjYWxlOl0pOgorICAg
ICAgICAoY3JlYXRlTGF5b3V0SGF0Y2hpbmdMYXllcik6CisgICAgICAgIChjcmVhdGVMYXlvdXRM
YWJlbExheWVyKToKKyAgICAgICAgKC1bV0tJbnNwZWN0b3JIaWdobGlnaHRWaWV3IF9jcmVhdGVH
cmlkT3ZlcmxheUxheWVyOnNjYWxlOl0pOgorICAgICAgICAtIENyZWF0ZSBsYXllcnMgZm9yIHRo
ZSBncmlkIG92ZXJsYXlzLgorICAgICAgICAoLVtXS0luc3BlY3RvckhpZ2hsaWdodFZpZXcgdXBk
YXRlOnNjYWxlOl0pOgorICAgICAgICAtIE9idGFpbiB0aGUgdmlldyBzY2FsZSBzbyB0aGF0IGBD
QVRleHRMYXllcmBzIGNhbiBoYXZlIHRoZSBjb3JyZWN0IGNvbnRlbnQgc2NhbGUgc2V0LgorICAg
ICAgICAoLVtXS0luc3BlY3RvckhpZ2hsaWdodFZpZXcgdXBkYXRlOl0pOiBEZWxldGVkLgorICAg
ICAgICAqIFVJUHJvY2Vzcy9pb3MvV0tDb250ZW50Vmlldy5tbToKKyAgICAgICAgKC1bV0tDb250
ZW50VmlldyBfc2hvd0luc3BlY3RvckhpZ2hsaWdodDpdKToKKwogMjAyMS0wMy0xOSAgS2F0ZSBD
aGVuZXkgIDxrYXRoZXJpbmVfY2hlbmV5QGFwcGxlLmNvbT4KIAogICAgICAgICBDYW5ub3QgbG9n
aW4gdG8gbWljcm9zb2Z0b25saW5lLmNvbSB3aXRob3V0IGFsbG93aW5nIHN0b3JhZ2UgYWNjZXNz
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9IZWFkZXJzLmNtYWtlIGIvU291cmNlL1dlYkNv
cmUvSGVhZGVycy5jbWFrZQppbmRleCAzYmM3YmY2N2VhMDE0N2Q5OTg4ZDU0NzM4OTBkYjA5YmM3
NTQzODY0Li44YzY0YzQ5MjcwOGMwY2Y3OGFjMGVmOGFiZTBhODJhMTZhNmE2YzdlIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9IZWFkZXJzLmNtYWtlCisrKyBiL1NvdXJjZS9XZWJDb3JlL0hl
YWRlcnMuY21ha2UKQEAgLTExODIsNiArMTE4Miw3IEBAIHNldChXZWJDb3JlX1BSSVZBVEVfRlJB
TUVXT1JLX0hFQURFUlMKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9EaXNwbGF5UmVmcmVzaE1vbml0
b3JDbGllbnQuaAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL0Rpc3BsYXlSZWZyZXNoTW9uaXRvck1h
bmFnZXIuaAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL0V4dGVuc2lvbnNHTC5oCisgICAgcGxhdGZv
cm0vZ3JhcGhpY3MvRmxvYXRMaW5lLmgKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9GbG9hdFBvaW50
LmgKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9GbG9hdFBvaW50M0QuaAogICAgIHBsYXRmb3JtL2dy
YXBoaWNzL0Zsb2F0UXVhZC5oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhj
b2RlcHJvai9wcm9qZWN0LnBieHByb2ogYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJv
ai9wcm9qZWN0LnBieHByb2oKaW5kZXggYTZlYzc0Zjg1NDM2YWNmOTkwOTM0ZjcwY2RjOTQ4MTZk
YTAxODM1NC4uNDU2YjAzYThiZGRlYjMyMWI2ZTllMDUwN2Y5NDNiYjVmNGIxYzQ4YSAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCisr
KyBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagpAQCAt
ODYyLDcgKzg2Miw3IEBACiAJCTJFNDM0NjU1MEY1NDZBODIwMEIwRjFCQSAvKiBXb3JrZXJUaHJl
YWQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDJFNDM0
NjQzMEY1NDZBODIwMEIwRjFCQSAvKiBXb3JrZXJUaHJlYWQuaCAqLzsgc2V0dGluZ3MgPSB7QVRU
UklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkyRTc1ODQxRTEyNzc5QURBMDA2MjYyOEIg
LyogRmlsZVJlYWRlckxvYWRlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gMkU3NTg0MUIxMjc3OUFEQTAwNjI2MjhCIC8qIEZpbGVSZWFkZXJMb2FkZXIu
aCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkyRTc1
ODQxRjEyNzc5QURBMDA2MjYyOEIgLyogRmlsZVJlYWRlckxvYWRlckNsaWVudC5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMkU3NTg0MUMxMjc3OUFEQTAw
NjI2MjhCIC8qIEZpbGVSZWFkZXJMb2FkZXJDbGllbnQuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklC
VVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwotCQkyRTg4OENBQTI1RjZBNDExMDA1NzkxNEEgLyog
RmxvYXRMaW5lLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSAyRTg4OENBODI1RjZBNDExMDA1NzkxNEEgLyogRmxvYXRMaW5lLmggKi87IH07CisJCTJFODg4
Q0FBMjVGNkE0MTEwMDU3OTE0QSAvKiBGbG9hdExpbmUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDJFODg4Q0E4MjVGNkE0MTEwMDU3OTE0QSAvKiBGbG9h
dExpbmUuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9Owog
CQkyRTk0RjQzQzExOTIwN0RBMDBCN0Y3NUQgLyogSlNGaWxlUmVhZGVyLmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyRTk0RjQzQTExOTIwN0RBMDBCN0Y3
NUQgLyogSlNGaWxlUmVhZGVyLmggKi87IH07CiAJCTJFOUI1RDhGMUI2NkE5NEUwMDhDNkEyNCAv
KiBXaGVlbEV2ZW50RGVsdGFGaWx0ZXJNYWMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDJFOUI1RDhFMUI2NkE5NEUwMDhDNkEyNCAvKiBXaGVlbEV2ZW50
RGVsdGFGaWx0ZXJNYWMuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCAp
OyB9OyB9OwogCQkyRUE3NjgwNDBGRTcxMjY0MDBBQjlDOEEgLyogV29ya2VyU2NyaXB0TG9hZGVy
Q2xpZW50LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAy
RUE3NjgwMzBGRTcxMjY0MDBBQjlDOEEgLyogV29ya2VyU2NyaXB0TG9hZGVyQ2xpZW50LmggKi87
IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JPdmVybGF5LmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JPdmVybGF5LmNwcAppbmRleCA5MmFmZjUzYzg2YTBm
MDg3MjI1ZGI2MjA3ODA2ZDAzOWQ0YmVmOGYwLi4yMDhhOGE5MzBlMzQ5NWEzNzc4YTViMzgxMGNj
NjI3NTg0MDRlOTM0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVj
dG9yT3ZlcmxheS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3Rvck92
ZXJsYXkuY3BwCkBAIC00MjcsOCArNDI3LDEwIEBAIHZvaWQgSW5zcGVjdG9yT3ZlcmxheTo6cGFp
bnQoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0KQogICAgICAgICBydWxlckV4Y2x1c2lvbi50aXRs
ZVBhdGggPSBub2RlUnVsZXJFeGNsdXNpb24udGl0bGVQYXRoOwogICAgIH0KIAotICAgIGZvciAo
Y29uc3QgSW5zcGVjdG9yT3ZlcmxheTo6R3JpZCYgZ3JpZE92ZXJsYXkgOiBtX2FjdGl2ZUdyaWRP
dmVybGF5cykKLSAgICAgICAgZHJhd0dyaWRPdmVybGF5KGNvbnRleHQsIGdyaWRPdmVybGF5KTsK
KyAgICBmb3IgKGNvbnN0IEluc3BlY3Rvck92ZXJsYXk6OkdyaWQmIGdyaWRPdmVybGF5IDogbV9h
Y3RpdmVHcmlkT3ZlcmxheXMpIHsKKyAgICAgICAgaWYgKGF1dG8gZ3JpZEhpZ2hsaWdodE92ZXJs
YXkgPSBidWlsZEdyaWRPdmVybGF5KGdyaWRPdmVybGF5KSkKKyAgICAgICAgICAgIGRyYXdHcmlk
T3ZlcmxheShjb250ZXh0LCAqZ3JpZEhpZ2hsaWdodE92ZXJsYXkpOworICAgIH0KIAogICAgIGlm
ICghbV9wYWludFJlY3RzLmlzRW1wdHkoKSkKICAgICAgICAgZHJhd1BhaW50UmVjdHMoY29udGV4
dCwgbV9wYWludFJlY3RzKTsKQEAgLTQzNywxMiArNDM5LDEyIEBAIHZvaWQgSW5zcGVjdG9yT3Zl
cmxheTo6cGFpbnQoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0KQogICAgICAgICBkcmF3UnVsZXJz
KGNvbnRleHQsIHJ1bGVyRXhjbHVzaW9uKTsKIH0KIAotdm9pZCBJbnNwZWN0b3JPdmVybGF5Ojpn
ZXRIaWdobGlnaHQoSW5zcGVjdG9yT3ZlcmxheTo6SGlnaGxpZ2h0JiBoaWdobGlnaHQsIEluc3Bl
Y3Rvck92ZXJsYXk6OkNvb3JkaW5hdGVTeXN0ZW0gY29vcmRpbmF0ZVN5c3RlbSkgY29uc3QKK3Zv
aWQgSW5zcGVjdG9yT3ZlcmxheTo6Z2V0SGlnaGxpZ2h0KEluc3BlY3Rvck92ZXJsYXk6OkhpZ2hs
aWdodCYgaGlnaGxpZ2h0LCBJbnNwZWN0b3JPdmVybGF5OjpDb29yZGluYXRlU3lzdGVtIGNvb3Jk
aW5hdGVTeXN0ZW0pCiB7Ci0gICAgaWYgKCFtX2hpZ2hsaWdodE5vZGUgJiYgIW1faGlnaGxpZ2h0
UXVhZCAmJiAhbV9oaWdobGlnaHROb2RlTGlzdCkKKyAgICBpZiAoIW1faGlnaGxpZ2h0Tm9kZSAm
JiAhbV9oaWdobGlnaHRRdWFkICYmICFtX2hpZ2hsaWdodE5vZGVMaXN0ICYmICFtX2FjdGl2ZUdy
aWRPdmVybGF5cy5zaXplKCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIGhpZ2hsaWdodC50eXBl
ID0gSW5zcGVjdG9yT3ZlcmxheTo6SGlnaGxpZ2h0OjpUeXBlOjpSZWN0czsKKyAgICBoaWdobGln
aHQudHlwZSA9IEluc3BlY3Rvck92ZXJsYXk6OkhpZ2hsaWdodDo6VHlwZTo6Tm9uZTsKICAgICBp
ZiAobV9oaWdobGlnaHROb2RlKQogICAgICAgICBidWlsZE5vZGVIaWdobGlnaHQoKm1faGlnaGxp
Z2h0Tm9kZSwgbV9ub2RlSGlnaGxpZ2h0Q29uZmlnLCBoaWdobGlnaHQsIGNvb3JkaW5hdGVTeXN0
ZW0pOwogICAgIGVsc2UgaWYgKG1faGlnaGxpZ2h0Tm9kZUxpc3QpIHsKQEAgLTQ1NCw4ICs0NTYs
MTUgQEAgdm9pZCBJbnNwZWN0b3JPdmVybGF5OjpnZXRIaWdobGlnaHQoSW5zcGVjdG9yT3Zlcmxh
eTo6SGlnaGxpZ2h0JiBoaWdobGlnaHQsIEluc3AKICAgICAgICAgICAgICAgICBoaWdobGlnaHQu
cXVhZHMuYXBwZW5kVmVjdG9yKG5vZGVIaWdobGlnaHQucXVhZHMpOwogICAgICAgICB9CiAgICAg
ICAgIGhpZ2hsaWdodC50eXBlID0gSW5zcGVjdG9yT3ZlcmxheTo6SGlnaGxpZ2h0OjpUeXBlOjpO
b2RlTGlzdDsKLSAgICB9IGVsc2UKKyAgICB9IGVsc2UgaWYgKG1faGlnaGxpZ2h0UXVhZCkgewor
ICAgICAgICBoaWdobGlnaHQudHlwZSA9IEluc3BlY3Rvck92ZXJsYXk6OkhpZ2hsaWdodDo6VHlw
ZTo6UmVjdHM7CiAgICAgICAgIGJ1aWxkUXVhZEhpZ2hsaWdodCgqbV9oaWdobGlnaHRRdWFkLCBt
X3F1YWRIaWdobGlnaHRDb25maWcsIGhpZ2hsaWdodCk7CisgICAgfQorICAgIGNvbnN0ZXhwciBi
b29sIG9mZnNldEJvdW5kc0J5U2Nyb2xsID0gdHJ1ZTsKKyAgICBmb3IgKGNvbnN0IEluc3BlY3Rv
ck92ZXJsYXk6OkdyaWQmIGdyaWRPdmVybGF5IDogbV9hY3RpdmVHcmlkT3ZlcmxheXMpIHsKKyAg
ICAgICAgaWYgKGF1dG8gZ3JpZEhpZ2hsaWdodE92ZXJsYXkgPSBidWlsZEdyaWRPdmVybGF5KGdy
aWRPdmVybGF5LCBvZmZzZXRCb3VuZHNCeVNjcm9sbCkpCisgICAgICAgICAgICBoaWdobGlnaHQu
Z3JpZEhpZ2hsaWdodE92ZXJsYXlzLmFwcGVuZCgqZ3JpZEhpZ2hsaWdodE92ZXJsYXkpOworICAg
IH0KIH0KIAogdm9pZCBJbnNwZWN0b3JPdmVybGF5OjpoaWRlSGlnaGxpZ2h0KCkKQEAgLTEyODEs
NiArMTI5MCwzNyBAQCB2b2lkIEluc3BlY3Rvck92ZXJsYXk6OmRyYXdMYXlvdXRMYWJlbChHcmFw
aGljc0NvbnRleHQmIGNvbnRleHQsIFN0cmluZyBsYWJlbCwgRgogICAgIGNvbnRleHQuZHJhd1Rl
eHQoZm9udCwgVGV4dFJ1bihsYWJlbCksIHRleHRQb3NpdGlvbik7CiB9CiAKK3ZvaWQgSW5zcGVj
dG9yT3ZlcmxheTo6ZHJhd0dyaWRPdmVybGF5KEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCwgY29u
c3QgSW5zcGVjdG9yT3ZlcmxheTo6SGlnaGxpZ2h0OjpHcmlkSGlnaGxpZ2h0T3ZlcmxheSYgZ3Jp
ZE92ZXJsYXkpCit7CisgICAgY29uc3RleHByIGF1dG8gdHJhbnNsdWNlbnRMYWJlbEJhY2tncm91
bmRDb2xvciA9IENvbG9yOjp3aGl0ZS5jb2xvcldpdGhBbHBoYUJ5dGUoMTUzKTsKKworICAgIEdy
YXBoaWNzQ29udGV4dFN0YXRlU2F2ZXIgc2F2ZXIoY29udGV4dCk7CisgICAgY29udGV4dC5zZXRT
dHJva2VUaGlja25lc3MoMSk7CisgICAgY29udGV4dC5zZXRTdHJva2VDb2xvcihncmlkT3Zlcmxh
eS5jb2xvcik7CisKKyAgICBQYXRoIGdyaWRMaW5lc1BhdGg7CisgICAgZm9yIChhdXRvIGdyaWRM
aW5lIDogZ3JpZE92ZXJsYXkuZ3JpZExpbmVzKSB7CisgICAgICAgIGdyaWRMaW5lc1BhdGgubW92
ZVRvKGdyaWRMaW5lLnN0YXJ0KCkpOworICAgICAgICBncmlkTGluZXNQYXRoLmFkZExpbmVUbyhn
cmlkTGluZS5lbmQoKSk7CisgICAgfQorICAgIGNvbnRleHQuc3Ryb2tlUGF0aChncmlkTGluZXNQ
YXRoKTsKKworICAgIGZvciAoYXV0byBnYXBRdWFkIDogZ3JpZE92ZXJsYXkuZ2FwcykKKyAgICAg
ICAgZHJhd0xheW91dEhhdGNoaW5nKGNvbnRleHQsIGdhcFF1YWQpOworCisgICAgY29udGV4dC5z
ZXRTdHJva2VUaGlja25lc3MoMyk7CisgICAgZm9yIChhdXRvIGFyZWEgOiBncmlkT3ZlcmxheS5h
cmVhcykKKyAgICAgICAgY29udGV4dC5zdHJva2VQYXRoKHF1YWRUb1BhdGgoYXJlYS5xdWFkKSk7
CisKKyAgICAvLyBEcmF3IGxhYmVscyBvbiB0b3Agb2YgYWxsIG90aGVyIGxpbmVzLgorICAgIGNv
bnRleHQuc2V0U3Ryb2tlVGhpY2tuZXNzKDEpOworICAgIGZvciAoYXV0byBhcmVhIDogZ3JpZE92
ZXJsYXkuYXJlYXMpCisgICAgICAgIGRyYXdMYXlvdXRMYWJlbChjb250ZXh0LCBhcmVhLm5hbWUs
IGFyZWEucXVhZC5wMSgpLCBMYWJlbEFycm93RGlyZWN0aW9uOjpOb25lLCB0cmFuc2x1Y2VudExh
YmVsQmFja2dyb3VuZENvbG9yLCBhcmVhLnF1YWQuYm91bmRpbmdCb3goKS53aWR0aCgpKTsKKwor
ICAgIGZvciAoYXV0byBsYWJlbCA6IGdyaWRPdmVybGF5LmxhYmVscykKKyAgICAgICAgZHJhd0xh
eW91dExhYmVsKGNvbnRleHQsIGxhYmVsLnRleHQsIGxhYmVsLmxvY2F0aW9uLCBsYWJlbC5hcnJv
d0RpcmVjdGlvbiwgbGFiZWwuYmFja2dyb3VuZENvbG9yKTsKK30KKwogc3RhdGljIFZlY3RvcjxT
dHJpbmc+IGF1dGhvcmVkR3JpZFRyYWNrU2l6ZXMoTm9kZSogbm9kZSwgR3JpZFRyYWNrU2l6aW5n
RGlyZWN0aW9uIGRpcmVjdGlvbiwgdW5zaWduZWQgZXhwZWN0ZWRUcmFja0NvdW50KQogewogICAg
IGlmICghaXM8RWxlbWVudD4obm9kZSkpCkBAIC0xMzc5LDE0ICsxNDE5LDI0IEBAIHN0YXRpYyBP
cmRlcmVkTmFtZWRHcmlkTGluZXNNYXAgZ3JpZExpbmVOYW1lcyhjb25zdCBSZW5kZXJTdHlsZSog
cmVuZGVyU3R5bGUsIEdyCiAgICAgcmV0dXJuIGNvbWJpbmVkR3JpZExpbmVOYW1lczsKIH0KIAot
dm9pZCBJbnNwZWN0b3JPdmVybGF5OjpkcmF3R3JpZE92ZXJsYXkoR3JhcGhpY3NDb250ZXh0JiBj
b250ZXh0LCBjb25zdCBJbnNwZWN0b3JPdmVybGF5OjpHcmlkJiBncmlkT3ZlcmxheSkKK3N0YXRp
YyBJbnNwZWN0b3JPdmVybGF5OjpIaWdobGlnaHQ6OkdyaWRIaWdobGlnaHRPdmVybGF5OjpMYWJl
bCBidWlsZExhYmVsKFN0cmluZyB0ZXh0LCBGbG9hdFBvaW50IGxvY2F0aW9uLCBDb2xvciBiYWNr
Z3JvdW5kQ29sb3IsIEluc3BlY3Rvck92ZXJsYXk6OkxhYmVsQXJyb3dEaXJlY3Rpb24gYXJyb3dE
aXJlY3Rpb24pCit7CisgICAgSW5zcGVjdG9yT3ZlcmxheTo6SGlnaGxpZ2h0OjpHcmlkSGlnaGxp
Z2h0T3ZlcmxheTo6TGFiZWwgbGFiZWw7CisgICAgbGFiZWwudGV4dCA9IHRleHQ7CisgICAgbGFi
ZWwubG9jYXRpb24gPSBsb2NhdGlvbjsKKyAgICBsYWJlbC5iYWNrZ3JvdW5kQ29sb3IgPSBiYWNr
Z3JvdW5kQ29sb3I7CisgICAgbGFiZWwuYXJyb3dEaXJlY3Rpb24gPSBhcnJvd0RpcmVjdGlvbjsK
KyAgICByZXR1cm4gbGFiZWw7Cit9CisKK09wdGlvbmFsPEluc3BlY3Rvck92ZXJsYXk6OkhpZ2hs
aWdodDo6R3JpZEhpZ2hsaWdodE92ZXJsYXk+IEluc3BlY3Rvck92ZXJsYXk6OmJ1aWxkR3JpZE92
ZXJsYXkoY29uc3QgSW5zcGVjdG9yT3ZlcmxheTo6R3JpZCYgZ3JpZE92ZXJsYXksIGJvb2wgb2Zm
c2V0Qm91bmRzQnlTY3JvbGwpCiB7CiAgICAgLy8gSWYgdGhlIG5vZGUgV2Vha1B0ciBoYXMgYmVl
biBjbGVhcmVkLCB0aGVuIHRoZSBub2RlIGlzIGdvbmUgYW5kIHRoZXJlJ3Mgbm90aGluZyB0byBk
cmF3LgogICAgIGlmICghZ3JpZE92ZXJsYXkuZ3JpZE5vZGUpIHsKICAgICAgICAgbV9hY3RpdmVH
cmlkT3ZlcmxheXMucmVtb3ZlQWxsTWF0Y2hpbmcoWyZdIChjb25zdCBJbnNwZWN0b3JPdmVybGF5
OjpHcmlkJiBncmlkT3ZlcmxheSkgewogICAgICAgICAgICAgcmV0dXJuICFncmlkT3ZlcmxheS5n
cmlkTm9kZTsKICAgICAgICAgfSk7Ci0gICAgICAgIHJldHVybjsKKyAgICAgICAgcmV0dXJuIHsg
fTsKICAgICB9CiAgICAgCiAgICAgLy8gQWx3YXlzIHJlLWNoZWNrIGJlY2F1c2UgdGhlIG5vZGUn
cyByZW5kZXJlciBtYXkgaGF2ZSBjaGFuZ2VkIHNpbmNlIGJlaW5nIGFkZGVkLgpAQCAtMTM5NSwy
MSArMTQ0NSwyMyBAQCB2b2lkIEluc3BlY3Rvck92ZXJsYXk6OmRyYXdHcmlkT3ZlcmxheShHcmFw
aGljc0NvbnRleHQmIGNvbnRleHQsIGNvbnN0IEluc3BlY3RvcgogICAgIGF1dG8gcmVuZGVyZXIg
PSBub2RlLT5yZW5kZXJlcigpOwogICAgIGlmICghaXM8UmVuZGVyR3JpZD4ocmVuZGVyZXIpKSB7
CiAgICAgICAgIHJlbW92ZUdyaWRPdmVybGF5Rm9yTm9kZSgqbm9kZSk7Ci0gICAgICAgIHJldHVy
bjsKKyAgICAgICAgcmV0dXJuIHsgfTsKICAgICB9Ci0gICAgCisKICAgICBjb25zdGV4cHIgYXV0
byB0cmFuc2x1Y2VudExhYmVsQmFja2dyb3VuZENvbG9yID0gQ29sb3I6OndoaXRlLmNvbG9yV2l0
aEFscGhhQnl0ZSgxNTMpOwogICAgIAogICAgIEZyYW1lVmlldyogcGFnZVZpZXcgPSBtX3BhZ2Uu
bWFpbkZyYW1lKCkudmlldygpOwogICAgIGlmICghcGFnZVZpZXcpCi0gICAgICAgIHJldHVybjsK
KyAgICAgICAgcmV0dXJuIHsgfTsKICAgICBGbG9hdFJlY3Qgdmlld3BvcnRCb3VuZHMgPSB7IHsg
MCwgMCB9LCBwYWdlVmlldy0+c2l6ZUZvclZpc2libGVDb250ZW50KCkgfTsKKyAgICBpZiAob2Zm
c2V0Qm91bmRzQnlTY3JvbGwpCisgICAgICAgIHZpZXdwb3J0Qm91bmRzLnNldExvY2F0aW9uKHBh
Z2VWaWV3LT5zY3JvbGxQb3NpdGlvbigpKTsKICAgICAKICAgICBhdXRvJiByZW5kZXJHcmlkID0g
KmRvd25jYXN0PFJlbmRlckdyaWQ+KHJlbmRlcmVyKTsKICAgICBhdXRvIGNvbHVtblBvc2l0aW9u
cyA9IHJlbmRlckdyaWQuY29sdW1uUG9zaXRpb25zKCk7CiAgICAgYXV0byByb3dQb3NpdGlvbnMg
PSByZW5kZXJHcmlkLnJvd1Bvc2l0aW9ucygpOwogICAgIGlmICghY29sdW1uUG9zaXRpb25zLnNp
emUoKSB8fCAhcm93UG9zaXRpb25zLnNpemUoKSkKLSAgICAgICAgcmV0dXJuOworICAgICAgICBy
ZXR1cm4geyB9OwogICAgIAogICAgIGZsb2F0IGdyaWRTdGFydFggPSBjb2x1bW5Qb3NpdGlvbnNb
MF07CiAgICAgZmxvYXQgZ3JpZEVuZFggPSBjb2x1bW5Qb3NpdGlvbnNbY29sdW1uUG9zaXRpb25z
LnNpemUoKSAtIDFdOwpAQCAtMTQxOCw3ICsxNDcwLDcgQEAgdm9pZCBJbnNwZWN0b3JPdmVybGF5
OjpkcmF3R3JpZE92ZXJsYXkoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0LCBjb25zdCBJbnNwZWN0
b3IKIAogICAgIEZyYW1lKiBjb250YWluaW5nRnJhbWUgPSBub2RlLT5kb2N1bWVudCgpLmZyYW1l
KCk7CiAgICAgaWYgKCFjb250YWluaW5nRnJhbWUpCi0gICAgICAgIHJldHVybjsKKyAgICAgICAg
cmV0dXJuIHsgfTsKICAgICBGcmFtZVZpZXcqIGNvbnRhaW5pbmdWaWV3ID0gY29udGFpbmluZ0Zy
YW1lLT52aWV3KCk7CiAKICAgICBhdXRvIGNvbHVtbkxpbmVBdCA9IFsmXShpbnQgeCkgLT4gRmxv
YXRMaW5lIHsKQEAgLTE0MzMsMTAgKzE0ODUsOSBAQCB2b2lkIEluc3BlY3Rvck92ZXJsYXk6OmRy
YXdHcmlkT3ZlcmxheShHcmFwaGljc0NvbnRleHQmIGNvbnRleHQsIGNvbnN0IEluc3BlY3Rvcgog
ICAgICAgICAgICAgbG9jYWxQb2ludFRvUm9vdFBvaW50KGNvbnRhaW5pbmdWaWV3LCByZW5kZXJH
cmlkLmxvY2FsVG9Db250YWluZXJQb2ludChGbG9hdFBvaW50KGdyaWRFbmRYLCB5KSwgbnVsbHB0
cikpLAogICAgICAgICB9OwogICAgIH07Ci0gICAgCi0gICAgR3JhcGhpY3NDb250ZXh0U3RhdGVT
YXZlciBzYXZlcihjb250ZXh0KTsKLSAgICBjb250ZXh0LnNldFN0cm9rZVRoaWNrbmVzcygxKTsK
LSAgICBjb250ZXh0LnNldFN0cm9rZUNvbG9yKGdyaWRPdmVybGF5LmNvbmZpZy5ncmlkQ29sb3Ip
OworCisgICAgSW5zcGVjdG9yT3ZlcmxheTo6SGlnaGxpZ2h0OjpHcmlkSGlnaGxpZ2h0T3Zlcmxh
eSBncmlkSGlnaGxpZ2h0T3ZlcmxheTsKKyAgICBncmlkSGlnaGxpZ2h0T3ZlcmxheS5jb2xvciA9
IGdyaWRPdmVybGF5LmNvbmZpZy5ncmlkQ29sb3I7CiAKICAgICAvLyBEcmF3IGNvbHVtbnMgYW5k
IHJvd3MuCiAgICAgYXV0byBjb2x1bW5XaWR0aHMgPSByZW5kZXJHcmlkLnRyYWNrU2l6ZXNGb3JD
b21wdXRlZFN0eWxlKEdyaWRUcmFja1NpemluZ0RpcmVjdGlvbjo6Rm9yQ29sdW1ucyk7CkBAIC0x
NDQ2LDE5ICsxNDk3LDE2IEBAIHZvaWQgSW5zcGVjdG9yT3ZlcmxheTo6ZHJhd0dyaWRPdmVybGF5
KEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCwgY29uc3QgSW5zcGVjdG9yCiAgICAgZm9yICh1bnNp
Z25lZCBpID0gMDsgaSA8IGNvbHVtblBvc2l0aW9ucy5zaXplKCk7ICsraSkgewogICAgICAgICBh
dXRvIGNvbHVtblN0YXJ0TGluZSA9IGNvbHVtbkxpbmVBdChjb2x1bW5Qb3NpdGlvbnNbaV0pOwog
Ci0gICAgICAgIFBhdGggY29sdW1uUGF0aHM7CiAgICAgICAgIGlmIChncmlkT3ZlcmxheS5jb25m
aWcuc2hvd0V4dGVuZGVkR3JpZExpbmVzKSB7CiAgICAgICAgICAgICBhdXRvIGV4dGVuZGVkTGlu
ZSA9IGNvbHVtblN0YXJ0TGluZS5leHRlbmRlZFRvQm91bmRzKHZpZXdwb3J0Qm91bmRzKTsKLSAg
ICAgICAgICAgIGNvbHVtblBhdGhzLm1vdmVUbyhleHRlbmRlZExpbmUuc3RhcnQoKSk7Ci0gICAg
ICAgICAgICBjb2x1bW5QYXRocy5hZGRMaW5lVG8oZXh0ZW5kZWRMaW5lLmVuZCgpKTsKKyAgICAg
ICAgICAgIGdyaWRIaWdobGlnaHRPdmVybGF5LmdyaWRMaW5lcy5hcHBlbmQoZXh0ZW5kZWRMaW5l
KTsKICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIGNvbHVtblBhdGhzLm1vdmVUbyhjb2x1
bW5TdGFydExpbmUuc3RhcnQoKSk7Ci0gICAgICAgICAgICBjb2x1bW5QYXRocy5hZGRMaW5lVG8o
Y29sdW1uU3RhcnRMaW5lLmVuZCgpKTsKKyAgICAgICAgICAgIGdyaWRIaWdobGlnaHRPdmVybGF5
LmdyaWRMaW5lcy5hcHBlbmQoY29sdW1uU3RhcnRMaW5lKTsKICAgICAgICAgfQogICAgICAgICAK
ICAgICAgICAgRmxvYXRQb2ludCBnYXBMYWJlbFBvc2l0aW9uID0gY29sdW1uU3RhcnRMaW5lLnN0
YXJ0KCk7CiAgICAgICAgIGlmIChpKSB7Ci0gICAgICAgICAgICBkcmF3TGF5b3V0SGF0Y2hpbmco
Y29udGV4dCwgeyBwcmV2aW91c0NvbHVtbkVuZExpbmUuc3RhcnQoKSwgY29sdW1uU3RhcnRMaW5l
LnN0YXJ0KCksIGNvbHVtblN0YXJ0TGluZS5lbmQoKSwgcHJldmlvdXNDb2x1bW5FbmRMaW5lLmVu
ZCgpIH0pOworICAgICAgICAgICAgZ3JpZEhpZ2hsaWdodE92ZXJsYXkuZ2Fwcy5hcHBlbmQoeyBw
cmV2aW91c0NvbHVtbkVuZExpbmUuc3RhcnQoKSwgY29sdW1uU3RhcnRMaW5lLnN0YXJ0KCksIGNv
bHVtblN0YXJ0TGluZS5lbmQoKSwgcHJldmlvdXNDb2x1bW5FbmRMaW5lLmVuZCgpIH0pOwogICAg
ICAgICAgICAgRmxvYXRMaW5lIGxpbmVCZXR3ZWVuQ29sdW1uVG9wcyA9IHsgY29sdW1uU3RhcnRM
aW5lLnN0YXJ0KCksIHByZXZpb3VzQ29sdW1uRW5kTGluZS5zdGFydCgpIH07CiAgICAgICAgICAg
ICBnYXBMYWJlbFBvc2l0aW9uID0gbGluZUJldHdlZW5Db2x1bW5Ub3BzLnBvaW50QXRSZWxhdGl2
ZURpc3RhbmNlKDAuNSk7CiAgICAgICAgIH0KQEAgLTE0NjksMTEgKzE1MTcsOSBAQCB2b2lkIElu
c3BlY3Rvck92ZXJsYXk6OmRyYXdHcmlkT3ZlcmxheShHcmFwaGljc0NvbnRleHQmIGNvbnRleHQs
IGNvbnN0IEluc3BlY3RvcgogCiAgICAgICAgICAgICBpZiAoZ3JpZE92ZXJsYXkuY29uZmlnLnNo
b3dFeHRlbmRlZEdyaWRMaW5lcykgewogICAgICAgICAgICAgICAgIGF1dG8gZXh0ZW5kZWRMaW5l
ID0gY29sdW1uRW5kTGluZS5leHRlbmRlZFRvQm91bmRzKHZpZXdwb3J0Qm91bmRzKTsKLSAgICAg
ICAgICAgICAgICBjb2x1bW5QYXRocy5tb3ZlVG8oZXh0ZW5kZWRMaW5lLnN0YXJ0KCkpOwotICAg
ICAgICAgICAgICAgIGNvbHVtblBhdGhzLmFkZExpbmVUbyhleHRlbmRlZExpbmUuZW5kKCkpOwor
ICAgICAgICAgICAgICAgIGdyaWRIaWdobGlnaHRPdmVybGF5LmdyaWRMaW5lcy5hcHBlbmQoZXh0
ZW5kZWRMaW5lKTsKICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgY29sdW1u
UGF0aHMubW92ZVRvKGNvbHVtbkVuZExpbmUuc3RhcnQoKSk7Ci0gICAgICAgICAgICAgICAgY29s
dW1uUGF0aHMuYWRkTGluZVRvKGNvbHVtbkVuZExpbmUuZW5kKCkpOworICAgICAgICAgICAgICAg
IGdyaWRIaWdobGlnaHRPdmVybGF5LmdyaWRMaW5lcy5hcHBlbmQoY29sdW1uRW5kTGluZSk7CiAg
ICAgICAgICAgICB9CiAgICAgICAgICAgICBwcmV2aW91c0NvbHVtbkVuZExpbmUgPSBjb2x1bW5F
bmRMaW5lOwogICAgICAgICAgICAgCkBAIC0xNDkzLDEzICsxNTM5LDExIEBAIHZvaWQgSW5zcGVj
dG9yT3ZlcmxheTo6ZHJhd0dyaWRPdmVybGF5KEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCwgY29u
c3QgSW5zcGVjdG9yCiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIAogICAgICAg
ICAgICAgICAgIEZsb2F0TGluZSB0cmFja1RvcExpbmUgPSB7IGNvbHVtblN0YXJ0TGluZS5zdGFy
dCgpLCBjb2x1bW5FbmRMaW5lLnN0YXJ0KCkgfTsKLSAgICAgICAgICAgICAgICBkcmF3TGF5b3V0
TGFiZWwoY29udGV4dCwgdHJhY2tTaXplTGFiZWwsIHRyYWNrVG9wTGluZS5wb2ludEF0UmVsYXRp
dmVEaXN0YW5jZSgwLjUpLCBMYWJlbEFycm93RGlyZWN0aW9uOjpVcCwgdHJhbnNsdWNlbnRMYWJl
bEJhY2tncm91bmRDb2xvcik7CisgICAgICAgICAgICAgICAgZ3JpZEhpZ2hsaWdodE92ZXJsYXku
bGFiZWxzLmFwcGVuZChidWlsZExhYmVsKHRyYWNrU2l6ZUxhYmVsLCB0cmFja1RvcExpbmUucG9p
bnRBdFJlbGF0aXZlRGlzdGFuY2UoMC41KSwgdHJhbnNsdWNlbnRMYWJlbEJhY2tncm91bmRDb2xv
ciwgTGFiZWxBcnJvd0RpcmVjdGlvbjo6VXApKTsKICAgICAgICAgICAgIH0KICAgICAgICAgfSBl
bHNlCiAgICAgICAgICAgICBwcmV2aW91c0NvbHVtbkVuZExpbmUgPSBjb2x1bW5TdGFydExpbmU7
Ci0gICAgICAgIAotICAgICAgICBjb250ZXh0LnN0cm9rZVBhdGgoY29sdW1uUGF0aHMpOwotICAg
ICAgICAKKwogICAgICAgICBTdHJpbmdCdWlsZGVyIGxpbmVMYWJlbDsKICAgICAgICAgaWYgKGdy
aWRPdmVybGF5LmNvbmZpZy5zaG93TGluZU51bWJlcnMpCiAgICAgICAgICAgICBsaW5lTGFiZWwu
YXBwZW5kKGkgKyAxLCB0aGluU3BhY2UsIGJ1bGxldCwgdGhpblNwYWNlLCAtc3RhdGljX2Nhc3Q8
aW50Pihjb2x1bW5Qb3NpdGlvbnMuc2l6ZSgpIC0gaSkpOwpAQCAtMTUxMiw3ICsxNTU2LDcgQEAg
dm9pZCBJbnNwZWN0b3JPdmVybGF5OjpkcmF3R3JpZE92ZXJsYXkoR3JhcGhpY3NDb250ZXh0JiBj
b250ZXh0LCBjb25zdCBJbnNwZWN0b3IKICAgICAgICAgfQogICAgICAgICAvLyBGSVhNRTogPHdl
YmtpdC5vcmcvYi8yMjE5NzI+IExheW91dCBsYWJlbHMgY2FuIGJlIGRyYXduIG91dHNpZGUgdGhl
IHZpZXdwb3J0LCBhbmQgYSBiZXN0IGVmZm9ydCBzaG91bGQgYmUgbWFkZSB0byBrZWVwIHRoZW0g
aW4gdGhlIHZpZXdwb3J0IHdoaWxlIHRoZSBncmlkIGlzIGluIHRoZSB2aWV3cG9ydC4KICAgICAg
ICAgaWYgKCFsaW5lTGFiZWwuaXNFbXB0eSgpKQotICAgICAgICAgICAgZHJhd0xheW91dExhYmVs
KGNvbnRleHQsIGxpbmVMYWJlbC50b1N0cmluZygpLCBnYXBMYWJlbFBvc2l0aW9uLCBMYWJlbEFy
cm93RGlyZWN0aW9uOjpEb3duKTsKKyAgICAgICAgICAgIGdyaWRIaWdobGlnaHRPdmVybGF5Lmxh
YmVscy5hcHBlbmQoYnVpbGRMYWJlbChsaW5lTGFiZWwudG9TdHJpbmcoKSwgZ2FwTGFiZWxQb3Np
dGlvbiwgQ29sb3I6OndoaXRlLCBMYWJlbEFycm93RGlyZWN0aW9uOjpEb3duKSk7CiAgICAgfQog
CiAgICAgYXV0byByb3dIZWlnaHRzID0gcmVuZGVyR3JpZC50cmFja1NpemVzRm9yQ29tcHV0ZWRT
dHlsZShHcmlkVHJhY2tTaXppbmdEaXJlY3Rpb246OkZvclJvd3MpOwpAQCAtMTUyMiwzNyArMTU2
NiwzMiBAQCB2b2lkIEluc3BlY3Rvck92ZXJsYXk6OmRyYXdHcmlkT3ZlcmxheShHcmFwaGljc0Nv
bnRleHQmIGNvbnRleHQsIGNvbnN0IEluc3BlY3RvcgogICAgIGZvciAodW5zaWduZWQgaSA9IDA7
IGkgPCByb3dQb3NpdGlvbnMuc2l6ZSgpOyArK2kpIHsKICAgICAgICAgYXV0byByb3dTdGFydExp
bmUgPSByb3dMaW5lQXQocm93UG9zaXRpb25zW2ldKTsKIAotICAgICAgICBQYXRoIHJvd1BhdGhz
OwogICAgICAgICBpZiAoZ3JpZE92ZXJsYXkuY29uZmlnLnNob3dFeHRlbmRlZEdyaWRMaW5lcykg
ewotICAgICAgICAgICAgYXV0byBsaW5lID0gcm93U3RhcnRMaW5lLmV4dGVuZGVkVG9Cb3VuZHMo
dmlld3BvcnRCb3VuZHMpOwotICAgICAgICAgICAgcm93UGF0aHMubW92ZVRvKGxpbmUuc3RhcnQo
KSk7Ci0gICAgICAgICAgICByb3dQYXRocy5hZGRMaW5lVG8obGluZS5lbmQoKSk7CisgICAgICAg
ICAgICBhdXRvIGV4dGVuZGVkTGluZSA9IHJvd1N0YXJ0TGluZS5leHRlbmRlZFRvQm91bmRzKHZp
ZXdwb3J0Qm91bmRzKTsKKyAgICAgICAgICAgIGdyaWRIaWdobGlnaHRPdmVybGF5LmdyaWRMaW5l
cy5hcHBlbmQoZXh0ZW5kZWRMaW5lKTsKICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIHJv
d1BhdGhzLm1vdmVUbyhyb3dTdGFydExpbmUuc3RhcnQoKSk7Ci0gICAgICAgICAgICByb3dQYXRo
cy5hZGRMaW5lVG8ocm93U3RhcnRMaW5lLmVuZCgpKTsKKyAgICAgICAgICAgIGdyaWRIaWdobGln
aHRPdmVybGF5LmdyaWRMaW5lcy5hcHBlbmQocm93U3RhcnRMaW5lKTsKICAgICAgICAgfQotICAg
ICAgICAKKwogICAgICAgICBGbG9hdFBvaW50IGdhcExhYmVsUG9zaXRpb24gPSByb3dTdGFydExp
bmUuc3RhcnQoKTsKICAgICAgICAgaWYgKGkpIHsKICAgICAgICAgICAgIEZsb2F0TGluZSBsaW5l
QmV0d2VlblJvd1N0YXJ0cyA9IHsgcm93U3RhcnRMaW5lLnN0YXJ0KCksIHByZXZpb3VzUm93RW5k
TGluZS5zdGFydCgpIH07Ci0gICAgICAgICAgICBkcmF3TGF5b3V0SGF0Y2hpbmcoY29udGV4dCwg
eyBwcmV2aW91c1Jvd0VuZExpbmUuc3RhcnQoKSwgcHJldmlvdXNSb3dFbmRMaW5lLmVuZCgpLCBy
b3dTdGFydExpbmUuZW5kKCksIHJvd1N0YXJ0TGluZS5zdGFydCgpIH0pOworICAgICAgICAgICAg
Z3JpZEhpZ2hsaWdodE92ZXJsYXkuZ2Fwcy5hcHBlbmQoeyBwcmV2aW91c1Jvd0VuZExpbmUuc3Rh
cnQoKSwgcHJldmlvdXNSb3dFbmRMaW5lLmVuZCgpLCByb3dTdGFydExpbmUuZW5kKCksIHJvd1N0
YXJ0TGluZS5zdGFydCgpIH0pOwogICAgICAgICAgICAgZ2FwTGFiZWxQb3NpdGlvbiA9IGxpbmVC
ZXR3ZWVuUm93U3RhcnRzLnBvaW50QXRSZWxhdGl2ZURpc3RhbmNlKDAuNSk7CiAgICAgICAgIH0K
IAogICAgICAgICBpZiAoaSA8IHJvd0hlaWdodHMuc2l6ZSgpICYmIGkgPCByb3dQb3NpdGlvbnMu
c2l6ZSgpKSB7CiAgICAgICAgICAgICBhdXRvIGhlaWdodCA9IHJvd0hlaWdodHNbaV07CiAgICAg
ICAgICAgICBhdXRvIHJvd0VuZExpbmUgPSByb3dMaW5lQXQocm93UG9zaXRpb25zW2ldICsgaGVp
Z2h0KTsKLSAgICAgICAgICAgIAorCiAgICAgICAgICAgICBpZiAoZ3JpZE92ZXJsYXkuY29uZmln
LnNob3dFeHRlbmRlZEdyaWRMaW5lcykgewogICAgICAgICAgICAgICAgIGF1dG8gZXh0ZW5kZWRM
aW5lID0gcm93RW5kTGluZS5leHRlbmRlZFRvQm91bmRzKHZpZXdwb3J0Qm91bmRzKTsKLSAgICAg
ICAgICAgICAgICByb3dQYXRocy5tb3ZlVG8oZXh0ZW5kZWRMaW5lLnN0YXJ0KCkpOwotICAgICAg
ICAgICAgICAgIHJvd1BhdGhzLmFkZExpbmVUbyhleHRlbmRlZExpbmUuZW5kKCkpOworICAgICAg
ICAgICAgICAgIGdyaWRIaWdobGlnaHRPdmVybGF5LmdyaWRMaW5lcy5hcHBlbmQoZXh0ZW5kZWRM
aW5lKTsKICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgcm93UGF0aHMubW92
ZVRvKHJvd0VuZExpbmUuc3RhcnQoKSk7Ci0gICAgICAgICAgICAgICAgcm93UGF0aHMuYWRkTGlu
ZVRvKHJvd0VuZExpbmUuZW5kKCkpOworICAgICAgICAgICAgICAgIGdyaWRIaWdobGlnaHRPdmVy
bGF5LmdyaWRMaW5lcy5hcHBlbmQocm93RW5kTGluZSk7CiAgICAgICAgICAgICB9CiAgICAgICAg
ICAgICBwcmV2aW91c1Jvd0VuZExpbmUgPSByb3dFbmRMaW5lOwotICAgICAgICAgICAgCisKICAg
ICAgICAgICAgIGlmIChncmlkT3ZlcmxheS5jb25maWcuc2hvd1RyYWNrU2l6ZXMpIHsKICAgICAg
ICAgICAgICAgICBhdXRvIHRyYWNrU2l6ZUxhYmVsID0gU3RyaW5nOjpudW1iZXIocm91bmRmKGhl
aWdodCkpOwogICAgICAgICAgICAgICAgIHRyYWNrU2l6ZUxhYmVsLmFwcGVuZCgicHgiX3MpOwpA
QCAtMTU2OCwxMyArMTYwNywxMSBAQCB2b2lkIEluc3BlY3Rvck92ZXJsYXk6OmRyYXdHcmlkT3Zl
cmxheShHcmFwaGljc0NvbnRleHQmIGNvbnRleHQsIGNvbnN0IEluc3BlY3RvcgogICAgICAgICAg
ICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIEZsb2F0TGlu
ZSB0cmFja0xlZnRMaW5lID0geyByb3dTdGFydExpbmUuc3RhcnQoKSwgcm93RW5kTGluZS5zdGFy
dCgpIH07Ci0gICAgICAgICAgICAgICAgZHJhd0xheW91dExhYmVsKGNvbnRleHQsIHRyYWNrU2l6
ZUxhYmVsLCB0cmFja0xlZnRMaW5lLnBvaW50QXRSZWxhdGl2ZURpc3RhbmNlKDAuNSksIExhYmVs
QXJyb3dEaXJlY3Rpb246OkxlZnQsIHRyYW5zbHVjZW50TGFiZWxCYWNrZ3JvdW5kQ29sb3IpOwor
ICAgICAgICAgICAgICAgIGdyaWRIaWdobGlnaHRPdmVybGF5LmxhYmVscy5hcHBlbmQoYnVpbGRM
YWJlbCh0cmFja1NpemVMYWJlbCwgdHJhY2tMZWZ0TGluZS5wb2ludEF0UmVsYXRpdmVEaXN0YW5j
ZSgwLjUpLCB0cmFuc2x1Y2VudExhYmVsQmFja2dyb3VuZENvbG9yLCBMYWJlbEFycm93RGlyZWN0
aW9uOjpMZWZ0KSk7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0gZWxzZQogICAgICAgICAgICAg
cHJldmlvdXNSb3dFbmRMaW5lID0gcm93U3RhcnRMaW5lOwogCi0gICAgICAgIGNvbnRleHQuc3Ry
b2tlUGF0aChyb3dQYXRocyk7Ci0gICAgICAgIAogICAgICAgICBTdHJpbmdCdWlsZGVyIGxpbmVM
YWJlbDsKICAgICAgICAgaWYgKGdyaWRPdmVybGF5LmNvbmZpZy5zaG93TGluZU51bWJlcnMpCiAg
ICAgICAgICAgICBsaW5lTGFiZWwuYXBwZW5kKGkgKyAxLCB0aGluU3BhY2UsIGJ1bGxldCwgdGhp
blNwYWNlLCAtc3RhdGljX2Nhc3Q8aW50Pihyb3dQb3NpdGlvbnMuc2l6ZSgpIC0gaSkpOwpAQCAt
MTU4Nyw5ICsxNjI0LDkgQEAgdm9pZCBJbnNwZWN0b3JPdmVybGF5OjpkcmF3R3JpZE92ZXJsYXko
R3JhcGhpY3NDb250ZXh0JiBjb250ZXh0LCBjb25zdCBJbnNwZWN0b3IKICAgICAgICAgfQogICAg
ICAgICAvLyBGSVhNRTogPHdlYmtpdC5vcmcvYi8yMjE5NzI+IExheW91dCBsYWJlbHMgY2FuIGJl
IGRyYXduIG91dHNpZGUgdGhlIHZpZXdwb3J0LCBhbmQgYSBiZXN0IGVmZm9ydCBzaG91bGQgYmUg
bWFkZSB0byBrZWVwIHRoZW0gaW4gdGhlIHZpZXdwb3J0IHdoaWxlIHRoZSBncmlkIGlzIGluIHRo
ZSB2aWV3cG9ydC4KICAgICAgICAgaWYgKCFsaW5lTGFiZWwuaXNFbXB0eSgpKQotICAgICAgICAg
ICAgZHJhd0xheW91dExhYmVsKGNvbnRleHQsIGxpbmVMYWJlbC50b1N0cmluZygpLCBnYXBMYWJl
bFBvc2l0aW9uLCBMYWJlbEFycm93RGlyZWN0aW9uOjpSaWdodCk7CisgICAgICAgICAgICBncmlk
SGlnaGxpZ2h0T3ZlcmxheS5sYWJlbHMuYXBwZW5kKGJ1aWxkTGFiZWwobGluZUxhYmVsLnRvU3Ry
aW5nKCksIGdhcExhYmVsUG9zaXRpb24sIENvbG9yOjp3aGl0ZSwgTGFiZWxBcnJvd0RpcmVjdGlv
bjo6UmlnaHQpKTsKICAgICB9Ci0gICAgCisKICAgICBpZiAoZ3JpZE92ZXJsYXkuY29uZmlnLnNo
b3dBcmVhTmFtZXMpIHsKICAgICAgICAgZm9yIChhdXRvJiBncmlkQXJlYSA6IG5vZGUtPnJlbmRl
clN0eWxlKCktPm5hbWVkR3JpZEFyZWEoKSkgewogICAgICAgICAgICAgYXV0byYgbmFtZSA9IGdy
aWRBcmVhLmtleTsKQEAgLTE2MDAsMjUgKzE2MzcsMjQgQEAgdm9pZCBJbnNwZWN0b3JPdmVybGF5
OjpkcmF3R3JpZE92ZXJsYXkoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0LCBjb25zdCBJbnNwZWN0
b3IKICAgICAgICAgICAgIGF1dG8gY29sdW1uRW5kTGluZSA9IGNvbHVtbkxpbmVBdChjb2x1bW5Q
b3NpdGlvbnNbYXJlYS5jb2x1bW5zLmVuZExpbmUoKSAtIDFdICsgY29sdW1uV2lkdGhzW2FyZWEu
Y29sdW1ucy5lbmRMaW5lKCkgLSAxXSk7CiAgICAgICAgICAgICBhdXRvIHJvd1N0YXJ0TGluZSA9
IHJvd0xpbmVBdChyb3dQb3NpdGlvbnNbYXJlYS5yb3dzLnN0YXJ0TGluZSgpXSAtIHJvd1Bvc2l0
aW9uc1swXSk7CiAgICAgICAgICAgICBhdXRvIHJvd0VuZExpbmUgPSByb3dMaW5lQXQocm93UG9z
aXRpb25zW2FyZWEucm93cy5lbmRMaW5lKCkgLSAxXSArIHJvd0hlaWdodHNbYXJlYS5yb3dzLmVu
ZExpbmUoKSAtIDFdIC0gcm93UG9zaXRpb25zWzBdKTsKLSAgICAgICAgICAgIAorCiAgICAgICAg
ICAgICBPcHRpb25hbDxGbG9hdFBvaW50PiB0b3BMZWZ0ID0gY29sdW1uU3RhcnRMaW5lLmludGVy
c2VjdGlvbldpdGgocm93U3RhcnRMaW5lKTsKICAgICAgICAgICAgIE9wdGlvbmFsPEZsb2F0UG9p
bnQ+IHRvcFJpZ2h0ID0gY29sdW1uRW5kTGluZS5pbnRlcnNlY3Rpb25XaXRoKHJvd1N0YXJ0TGlu
ZSk7CiAgICAgICAgICAgICBPcHRpb25hbDxGbG9hdFBvaW50PiBib3R0b21SaWdodCA9IGNvbHVt
bkVuZExpbmUuaW50ZXJzZWN0aW9uV2l0aChyb3dFbmRMaW5lKTsKICAgICAgICAgICAgIE9wdGlv
bmFsPEZsb2F0UG9pbnQ+IGJvdHRvbUxlZnQgPSBjb2x1bW5TdGFydExpbmUuaW50ZXJzZWN0aW9u
V2l0aChyb3dFbmRMaW5lKTsKLSAgICAgICAgICAgIAorCiAgICAgICAgICAgICAvLyBJZiBhbnkg
dHdvIGxpbmVzIGFyZSBjb2luY2lkZW50IHdpdGggZWFjaCBvdGhlciwgdGhleSB3aWxsIG5vdCBo
YXZlIGFuIGludGVyc2VjdGlvbiwgd2hpY2ggY2FuIG9jY3VyIHdpdGggZXh0cmVtZSBgdHJhbnNm
b3JtOiBwZXJzcGVjdGl2ZSguLi4pYCB2YWx1ZXMuCiAgICAgICAgICAgICBpZiAoIXRvcExlZnQg
fHwgIXRvcFJpZ2h0IHx8ICFib3R0b21SaWdodCB8fCAhYm90dG9tTGVmdCkKICAgICAgICAgICAg
ICAgICBjb250aW51ZTsKIAotICAgICAgICAgICAgRmxvYXRRdWFkIGFyZWFRdWFkID0geyAqdG9w
TGVmdCwgKnRvcFJpZ2h0LCAqYm90dG9tUmlnaHQsICpib3R0b21MZWZ0IH07Ci0KLSAgICAgICAg
ICAgIGNvbnRleHQuc2V0U3Ryb2tlVGhpY2tuZXNzKDMpOwotICAgICAgICAgICAgY29udGV4dC5z
dHJva2VQYXRoKHF1YWRUb1BhdGgoYXJlYVF1YWQpKTsKLQotICAgICAgICAgICAgY29udGV4dC5z
ZXRTdHJva2VUaGlja25lc3MoMSk7Ci0gICAgICAgICAgICBkcmF3TGF5b3V0TGFiZWwoY29udGV4
dCwgbmFtZSwgYXJlYVF1YWQucDEoKSwgTGFiZWxBcnJvd0RpcmVjdGlvbjo6Tm9uZSwgdHJhbnNs
dWNlbnRMYWJlbEJhY2tncm91bmRDb2xvciwgYXJlYVF1YWQuYm91bmRpbmdCb3goKS53aWR0aCgp
KTsKKyAgICAgICAgICAgIEluc3BlY3Rvck92ZXJsYXk6OkhpZ2hsaWdodDo6R3JpZEhpZ2hsaWdo
dE92ZXJsYXk6OkFyZWEgaGlnaGxpZ2h0T3ZlcmxheUFyZWE7CisgICAgICAgICAgICBoaWdobGln
aHRPdmVybGF5QXJlYS5uYW1lID0gbmFtZTsKKyAgICAgICAgICAgIGhpZ2hsaWdodE92ZXJsYXlB
cmVhLnF1YWQgPSB7ICp0b3BMZWZ0LCAqdG9wUmlnaHQsICpib3R0b21SaWdodCwgKmJvdHRvbUxl
ZnQgfTsKKyAgICAgICAgICAgIGdyaWRIaWdobGlnaHRPdmVybGF5LmFyZWFzLmFwcGVuZChoaWdo
bGlnaHRPdmVybGF5QXJlYSk7CiAgICAgICAgIH0KICAgICB9CisKKyAgICByZXR1cm4geyBncmlk
SGlnaGxpZ2h0T3ZlcmxheSB9OwogfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yT3ZlcmxheS5oIGIvU291cmNl
L1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3Rvck92ZXJsYXkuaAppbmRleCAzODhlNjU0OWQ4NTVj
MmJkZTE1NWY2MzJjYzdiMmFjY2NkZmIxYTQwLi4wYzJkZWRmZDRjOTk5YWYzYmE1ZGY1MmIxOTU1
MWI0ZTkyYWJiNGU2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVj
dG9yT3ZlcmxheS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JPdmVy
bGF5LmgKQEAgLTMwLDYgKzMwLDcgQEAKICNwcmFnbWEgb25jZQogCiAjaW5jbHVkZSAiQ29sb3Iu
aCIKKyNpbmNsdWRlICJGbG9hdExpbmUuaCIKICNpbmNsdWRlICJGbG9hdFF1YWQuaCIKICNpbmNs
dWRlICJGbG9hdFJlY3QuaCIKICNpbmNsdWRlICJQYXRoLmgiCkBAIC02NCwxMCArNjUsMTkgQEAg
cHVibGljOgogICAgIEluc3BlY3Rvck92ZXJsYXkoUGFnZSYsIEluc3BlY3RvckNsaWVudCopOwog
ICAgIH5JbnNwZWN0b3JPdmVybGF5KCk7CiAKKyAgICBlbnVtIGNsYXNzIExhYmVsQXJyb3dEaXJl
Y3Rpb24geworICAgICAgICBOb25lLAorICAgICAgICBEb3duLAorICAgICAgICBVcCwKKyAgICAg
ICAgTGVmdCwKKyAgICAgICAgUmlnaHQsCisgICAgfTsKKwogICAgIHN0cnVjdCBIaWdobGlnaHQg
ewogICAgICAgICBXVEZfTUFLRV9TVFJVQ1RfRkFTVF9BTExPQ0FURUQ7CiAKICAgICAgICAgZW51
bSBjbGFzcyBUeXBlIHsKKyAgICAgICAgICAgIE5vbmUsIC8vIFByb3ZpZGVzIG9ubHkgbm9uLXF1
YWQgaW5mb3JtYXRpb24sIGluY2x1ZGluZyBncmlkIG92ZXJsYXlzLgogICAgICAgICAgICAgTm9k
ZSwgLy8gUHJvdmlkZXMgNCBxdWFkczogbWFyZ2luLCBib3JkZXIsIHBhZGRpbmcsIGNvbnRlbnQu
CiAgICAgICAgICAgICBOb2RlTGlzdCwgLy8gUHJvdmlkZXMgYSBsaXN0IG9mIG5vZGVzLgogICAg
ICAgICAgICAgUmVjdHMsIC8vIFByb3ZpZGVzIGEgbGlzdCBvZiBxdWFkcy4KQEAgLTg0LDYgKzk0
LDQ1IEBAIHB1YmxpYzoKICAgICAgICAgICAgIGJvb2wgdXNlUGFnZUNvb3JkaW5hdGVzOwogICAg
ICAgICB9OwogCisgICAgICAgIHN0cnVjdCBHcmlkSGlnaGxpZ2h0T3ZlcmxheSB7CisgICAgICAg
ICAgICBXVEZfTUFLRV9TVFJVQ1RfRkFTVF9BTExPQ0FURUQ7CisKKyAgICAgICAgICAgIHN0cnVj
dCBMYWJlbCB7CisgICAgICAgICAgICAgICAgV1RGX01BS0VfU1RSVUNUX0ZBU1RfQUxMT0NBVEVE
OworICAgICAgICAgICAgICAgIFN0cmluZyB0ZXh0OworICAgICAgICAgICAgICAgIEZsb2F0UG9p
bnQgbG9jYXRpb247CisgICAgICAgICAgICAgICAgQ29sb3IgYmFja2dyb3VuZENvbG9yOworICAg
ICAgICAgICAgICAgIExhYmVsQXJyb3dEaXJlY3Rpb24gYXJyb3dEaXJlY3Rpb247CisKKyNpZiBQ
TEFURk9STShJT1NfRkFNSUxZKQorICAgICAgICAgICAgICAgIHRlbXBsYXRlPGNsYXNzIEVuY29k
ZXI+IHZvaWQgZW5jb2RlKEVuY29kZXImKSBjb25zdDsKKyAgICAgICAgICAgICAgICB0ZW1wbGF0
ZTxjbGFzcyBEZWNvZGVyPiBzdGF0aWMgT3B0aW9uYWw8SW5zcGVjdG9yT3ZlcmxheTo6SGlnaGxp
Z2h0OjpHcmlkSGlnaGxpZ2h0T3ZlcmxheTo6TGFiZWw+IGRlY29kZShEZWNvZGVyJik7CisjZW5k
aWYKKyAgICAgICAgICAgIH07CisKKyAgICAgICAgICAgIHN0cnVjdCBBcmVhIHsKKyAgICAgICAg
ICAgICAgICBXVEZfTUFLRV9TVFJVQ1RfRkFTVF9BTExPQ0FURUQ7CisgICAgICAgICAgICAgICAg
U3RyaW5nIG5hbWU7CisgICAgICAgICAgICAgICAgRmxvYXRRdWFkIHF1YWQ7CisKKyNpZiBQTEFU
Rk9STShJT1NfRkFNSUxZKQorICAgICAgICAgICAgICAgIHRlbXBsYXRlPGNsYXNzIEVuY29kZXI+
IHZvaWQgZW5jb2RlKEVuY29kZXImKSBjb25zdDsKKyAgICAgICAgICAgICAgICB0ZW1wbGF0ZTxj
bGFzcyBEZWNvZGVyPiBzdGF0aWMgT3B0aW9uYWw8SW5zcGVjdG9yT3ZlcmxheTo6SGlnaGxpZ2h0
OjpHcmlkSGlnaGxpZ2h0T3ZlcmxheTo6QXJlYT4gZGVjb2RlKERlY29kZXImKTsKKyNlbmRpZgor
ICAgICAgICAgICAgfTsKKworICAgICAgICAgICAgQ29sb3IgY29sb3I7CisgICAgICAgICAgICBW
ZWN0b3I8RmxvYXRMaW5lPiBncmlkTGluZXM7CisgICAgICAgICAgICBWZWN0b3I8RmxvYXRRdWFk
PiBnYXBzOworICAgICAgICAgICAgVmVjdG9yPEFyZWE+IGFyZWFzOworICAgICAgICAgICAgVmVj
dG9yPExhYmVsPiBsYWJlbHM7CisKKyNpZiBQTEFURk9STShJT1NfRkFNSUxZKQorICAgICAgICAg
ICAgdGVtcGxhdGU8Y2xhc3MgRW5jb2Rlcj4gdm9pZCBlbmNvZGUoRW5jb2RlciYpIGNvbnN0Owor
ICAgICAgICAgICAgdGVtcGxhdGU8Y2xhc3MgRGVjb2Rlcj4gc3RhdGljIE9wdGlvbmFsPEluc3Bl
Y3Rvck92ZXJsYXk6OkhpZ2hsaWdodDo6R3JpZEhpZ2hsaWdodE92ZXJsYXk+IGRlY29kZShEZWNv
ZGVyJik7CisjZW5kaWYKKyAgICAgICAgfTsKKwogICAgICAgICB2b2lkIHNldERhdGFGcm9tQ29u
ZmlnKGNvbnN0IENvbmZpZyYgY29uZmlnKQogICAgICAgICB7CiAgICAgICAgICAgICBjb250ZW50
Q29sb3IgPSBjb25maWcuY29udGVudDsKQEAgLTEwMiw2ICsxNTEsNyBAQCBwdWJsaWM6CiAKICAg
ICAgICAgVHlwZSB0eXBlIHtUeXBlOjpOb2RlfTsKICAgICAgICAgVmVjdG9yPEZsb2F0UXVhZD4g
cXVhZHM7CisgICAgICAgIFZlY3RvcjxHcmlkSGlnaGxpZ2h0T3ZlcmxheT4gZ3JpZEhpZ2hsaWdo
dE92ZXJsYXlzOwogICAgICAgICBib29sIHVzZVBhZ2VDb29yZGluYXRlcyB7dHJ1ZX07CiAKICAg
ICAgICAgdXNpbmcgQm91bmRzID0gRmxvYXRSZWN0OwpAQCAtMTMyLDcgKzE4Miw3IEBAIHB1Ymxp
YzoKIAogICAgIHZvaWQgdXBkYXRlKCk7CiAgICAgdm9pZCBwYWludChHcmFwaGljc0NvbnRleHQm
KTsKLSAgICB2b2lkIGdldEhpZ2hsaWdodChIaWdobGlnaHQmLCBDb29yZGluYXRlU3lzdGVtKSBj
b25zdDsKKyAgICB2b2lkIGdldEhpZ2hsaWdodChIaWdobGlnaHQmLCBDb29yZGluYXRlU3lzdGVt
KTsKICAgICBib29sIHNob3VsZFNob3dPdmVybGF5KCkgY29uc3Q7CiAKICAgICB2b2lkIGhpZGVI
aWdobGlnaHQoKTsKQEAgLTE2NiwxNCArMjE2LDYgQEAgcHJpdmF0ZToKICAgICAgICAgSGlnaGxp
Z2h0OjpCb3VuZHMgYm91bmRzOwogICAgICAgICBQYXRoIHRpdGxlUGF0aDsKICAgICB9OwotICAg
IAotICAgIGVudW0gY2xhc3MgTGFiZWxBcnJvd0RpcmVjdGlvbiB7Ci0gICAgICAgIE5vbmUsCi0g
ICAgICAgIERvd24sCi0gICAgICAgIFVwLAotICAgICAgICBMZWZ0LAotICAgICAgICBSaWdodCwK
LSAgICB9OwogCiAgICAgUnVsZXJFeGNsdXNpb24gZHJhd05vZGVIaWdobGlnaHQoR3JhcGhpY3ND
b250ZXh0JiwgTm9kZSYpOwogICAgIFJ1bGVyRXhjbHVzaW9uIGRyYXdRdWFkSGlnaGxpZ2h0KEdy
YXBoaWNzQ29udGV4dCYsIGNvbnN0IEZsb2F0UXVhZCYpOwpAQCAtMTg2LDcgKzIyOCw4IEBAIHBy
aXZhdGU6CiAgICAgdm9pZCBkcmF3TGF5b3V0SGF0Y2hpbmcoR3JhcGhpY3NDb250ZXh0JiwgRmxv
YXRRdWFkKTsKICAgICB2b2lkIGRyYXdMYXlvdXRMYWJlbChHcmFwaGljc0NvbnRleHQmLCBTdHJp
bmcsIEZsb2F0UG9pbnQsIExhYmVsQXJyb3dEaXJlY3Rpb24sIENvbG9yIGJhY2tncm91bmRDb2xv
ciA9IENvbG9yOjp3aGl0ZSwgZmxvYXQgbWF4aW11bVdpZHRoID0gMCk7CiAKLSAgICB2b2lkIGRy
YXdHcmlkT3ZlcmxheShHcmFwaGljc0NvbnRleHQmLCBjb25zdCBJbnNwZWN0b3JPdmVybGF5OjpH
cmlkJik7CisgICAgdm9pZCBkcmF3R3JpZE92ZXJsYXkoR3JhcGhpY3NDb250ZXh0JiwgY29uc3Qg
SW5zcGVjdG9yT3ZlcmxheTo6SGlnaGxpZ2h0OjpHcmlkSGlnaGxpZ2h0T3ZlcmxheSYpOworICAg
IE9wdGlvbmFsPEluc3BlY3Rvck92ZXJsYXk6OkhpZ2hsaWdodDo6R3JpZEhpZ2hsaWdodE92ZXJs
YXk+IGJ1aWxkR3JpZE92ZXJsYXkoY29uc3QgSW5zcGVjdG9yT3ZlcmxheTo6R3JpZCYsIGJvb2wg
b2Zmc2V0Qm91bmRzQnlTY3JvbGwgPSBmYWxzZSk7CiAKICAgICB2b2lkIHVwZGF0ZVBhaW50UmVj
dHNUaW1lckZpcmVkKCk7CiAKQEAgLTIxMyw0ICsyNTYsNzUgQEAgcHJpdmF0ZToKICAgICBib29s
IG1fc2hvd1J1bGVyc0R1cmluZ0VsZW1lbnRTZWxlY3Rpb24geyBmYWxzZSB9OwogfTsKIAorI2lm
IFBMQVRGT1JNKElPU19GQU1JTFkpCisKK3RlbXBsYXRlPGNsYXNzIEVuY29kZXI+IHZvaWQgSW5z
cGVjdG9yT3ZlcmxheTo6SGlnaGxpZ2h0OjpHcmlkSGlnaGxpZ2h0T3ZlcmxheTo6ZW5jb2RlKEVu
Y29kZXImIGVuY29kZXIpIGNvbnN0Cit7CisgICAgZW5jb2RlciA8PCBjb2xvcjsKKyAgICBlbmNv
ZGVyIDw8IGdyaWRMaW5lczsKKyAgICBlbmNvZGVyIDw8IGdhcHM7CisgICAgZW5jb2RlciA8PCBh
cmVhczsKKyAgICBlbmNvZGVyIDw8IGxhYmVsczsKK30KKwordGVtcGxhdGU8Y2xhc3MgRGVjb2Rl
cj4gT3B0aW9uYWw8SW5zcGVjdG9yT3ZlcmxheTo6SGlnaGxpZ2h0OjpHcmlkSGlnaGxpZ2h0T3Zl
cmxheT4gSW5zcGVjdG9yT3ZlcmxheTo6SGlnaGxpZ2h0OjpHcmlkSGlnaGxpZ2h0T3ZlcmxheTo6
ZGVjb2RlKERlY29kZXImIGRlY29kZXIpCit7CisgICAgSW5zcGVjdG9yT3ZlcmxheTo6SGlnaGxp
Z2h0OjpHcmlkSGlnaGxpZ2h0T3ZlcmxheSBncmlkSGlnaGxpZ2h0T3ZlcmxheTsKKyAgICBpZiAo
IWRlY29kZXIuZGVjb2RlKGdyaWRIaWdobGlnaHRPdmVybGF5LmNvbG9yKSkKKyAgICAgICAgcmV0
dXJuIHsgfTsKKyAgICBpZiAoIWRlY29kZXIuZGVjb2RlKGdyaWRIaWdobGlnaHRPdmVybGF5Lmdy
aWRMaW5lcykpCisgICAgICAgIHJldHVybiB7IH07CisgICAgaWYgKCFkZWNvZGVyLmRlY29kZShn
cmlkSGlnaGxpZ2h0T3ZlcmxheS5nYXBzKSkKKyAgICAgICAgcmV0dXJuIHsgfTsKKyAgICBpZiAo
IWRlY29kZXIuZGVjb2RlKGdyaWRIaWdobGlnaHRPdmVybGF5LmFyZWFzKSkKKyAgICAgICAgcmV0
dXJuIHsgfTsKKyAgICBpZiAoIWRlY29kZXIuZGVjb2RlKGdyaWRIaWdobGlnaHRPdmVybGF5Lmxh
YmVscykpCisgICAgICAgIHJldHVybiB7IH07CisgICAgcmV0dXJuIHsgZ3JpZEhpZ2hsaWdodE92
ZXJsYXkgfTsKK30KKwordGVtcGxhdGU8Y2xhc3MgRW5jb2Rlcj4gdm9pZCBJbnNwZWN0b3JPdmVy
bGF5OjpIaWdobGlnaHQ6OkdyaWRIaWdobGlnaHRPdmVybGF5OjpMYWJlbDo6ZW5jb2RlKEVuY29k
ZXImIGVuY29kZXIpIGNvbnN0Cit7CisgICAgZW5jb2RlciA8PCB0ZXh0OworICAgIGVuY29kZXIg
PDwgbG9jYXRpb247CisgICAgZW5jb2RlciA8PCBiYWNrZ3JvdW5kQ29sb3I7CisgICAgZW5jb2Rl
ciA8PCBzdGF0aWNfY2FzdDx1aW50MzJfdD4oYXJyb3dEaXJlY3Rpb24pOworfQorCit0ZW1wbGF0
ZTxjbGFzcyBEZWNvZGVyPiBPcHRpb25hbDxJbnNwZWN0b3JPdmVybGF5OjpIaWdobGlnaHQ6Okdy
aWRIaWdobGlnaHRPdmVybGF5OjpMYWJlbD4gSW5zcGVjdG9yT3ZlcmxheTo6SGlnaGxpZ2h0OjpH
cmlkSGlnaGxpZ2h0T3ZlcmxheTo6TGFiZWw6OmRlY29kZShEZWNvZGVyJiBkZWNvZGVyKQorewor
ICAgIEluc3BlY3Rvck92ZXJsYXk6OkhpZ2hsaWdodDo6R3JpZEhpZ2hsaWdodE92ZXJsYXk6Okxh
YmVsIGxhYmVsOworICAgIGlmICghZGVjb2Rlci5kZWNvZGUobGFiZWwudGV4dCkpCisgICAgICAg
IHJldHVybiB7IH07CisgICAgaWYgKCFkZWNvZGVyLmRlY29kZShsYWJlbC5sb2NhdGlvbikpCisg
ICAgICAgIHJldHVybiB7IH07CisgICAgaWYgKCFkZWNvZGVyLmRlY29kZShsYWJlbC5iYWNrZ3Jv
dW5kQ29sb3IpKQorICAgICAgICByZXR1cm4geyB9OworCisgICAgdWludDMyX3QgYXJyb3dEaXJl
Y3Rpb247CisgICAgaWYgKCFkZWNvZGVyLmRlY29kZShhcnJvd0RpcmVjdGlvbikpCisgICAgICAg
IHJldHVybiB7IH07CisgICAgbGFiZWwuYXJyb3dEaXJlY3Rpb24gPSAoSW5zcGVjdG9yT3Zlcmxh
eTo6TGFiZWxBcnJvd0RpcmVjdGlvbilhcnJvd0RpcmVjdGlvbjsKKworICAgIHJldHVybiB7IGxh
YmVsIH07Cit9CisKK3RlbXBsYXRlPGNsYXNzIEVuY29kZXI+IHZvaWQgSW5zcGVjdG9yT3Zlcmxh
eTo6SGlnaGxpZ2h0OjpHcmlkSGlnaGxpZ2h0T3ZlcmxheTo6QXJlYTo6ZW5jb2RlKEVuY29kZXIm
IGVuY29kZXIpIGNvbnN0Cit7CisgICAgZW5jb2RlciA8PCBuYW1lOworICAgIGVuY29kZXIgPDwg
cXVhZDsKK30KKwordGVtcGxhdGU8Y2xhc3MgRGVjb2Rlcj4gT3B0aW9uYWw8SW5zcGVjdG9yT3Zl
cmxheTo6SGlnaGxpZ2h0OjpHcmlkSGlnaGxpZ2h0T3ZlcmxheTo6QXJlYT4gSW5zcGVjdG9yT3Zl
cmxheTo6SGlnaGxpZ2h0OjpHcmlkSGlnaGxpZ2h0T3ZlcmxheTo6QXJlYTo6ZGVjb2RlKERlY29k
ZXImIGRlY29kZXIpCit7CisgICAgSW5zcGVjdG9yT3ZlcmxheTo6SGlnaGxpZ2h0OjpHcmlkSGln
aGxpZ2h0T3ZlcmxheTo6QXJlYSBhcmVhOworICAgIGlmICghZGVjb2Rlci5kZWNvZGUoYXJlYS5u
YW1lKSkKKyAgICAgICAgcmV0dXJuIHsgfTsKKyAgICBpZiAoIWRlY29kZXIuZGVjb2RlKGFyZWEu
cXVhZCkpCisgICAgICAgIHJldHVybiB7IH07CisgICAgcmV0dXJuIHsgYXJlYSB9OworfQorCisj
ZW5kaWYKKwogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvRmxvYXRMaW5lLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9GbG9hdExpbmUuaAppbmRleCA5YjNiY2RhYzI2MTAzY2ZiNjgwOWY1YzBiNmI5
M2RhOGI3NWZkZjk4Li4xYTBkYjUwOGIwMDNmNGY2ZTUyNGUyNTUwYTVjZDFlYTllMTkwMWVhIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9GbG9hdExpbmUuaAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9GbG9hdExpbmUuaApAQCAtNTAs
MTAgKzUwLDEzIEBAIHB1YmxpYzoKICAgICAKICAgICBmbG9hdCBsZW5ndGgoKSBjb25zdCB7IHJl
dHVybiBtX2xlbmd0aDsgfQogCi0gICAgY29uc3QgRmxvYXRQb2ludCBwb2ludEF0QWJzb2x1dGVE
aXN0YW5jZShmbG9hdCkgY29uc3Q7CisgICAgV0VCQ09SRV9FWFBPUlQgY29uc3QgRmxvYXRQb2lu
dCBwb2ludEF0QWJzb2x1dGVEaXN0YW5jZShmbG9hdCkgY29uc3Q7CiAgICAgY29uc3QgRmxvYXRQ
b2ludCBwb2ludEF0UmVsYXRpdmVEaXN0YW5jZShmbG9hdCkgY29uc3Q7CiAgICAgY29uc3QgRmxv
YXRMaW5lIGV4dGVuZGVkVG9Cb3VuZHMoY29uc3QgRmxvYXRSZWN0JikgY29uc3Q7CiAgICAgY29u
c3QgT3B0aW9uYWw8RmxvYXRQb2ludD4gaW50ZXJzZWN0aW9uV2l0aChjb25zdCBGbG9hdExpbmUm
KSBjb25zdDsKKworICAgIHRlbXBsYXRlPGNsYXNzIEVuY29kZXI+IHZvaWQgZW5jb2RlKEVuY29k
ZXImKSBjb25zdDsKKyAgICB0ZW1wbGF0ZTxjbGFzcyBEZWNvZGVyPiBzdGF0aWMgT3B0aW9uYWw8
RmxvYXRMaW5lPiBkZWNvZGUoRGVjb2RlciYpOwogICAgIAogcHJpdmF0ZToKICAgICBGbG9hdFBv
aW50IG1fc3RhcnQgeyAwLCAwIH07CkBAIC02MSw0ICs2NCwyNSBAQCBwcml2YXRlOgogICAgIGZs
b2F0IG1fbGVuZ3RoIHsgMCB9OwogfTsKIAordGVtcGxhdGU8Y2xhc3MgRW5jb2Rlcj4gdm9pZCBG
bG9hdExpbmU6OmVuY29kZShFbmNvZGVyJiBlbmNvZGVyKSBjb25zdAoreworICAgIGVuY29kZXIg
PDwgbV9zdGFydDsKKyAgICBlbmNvZGVyIDw8IG1fZW5kOworfQorCit0ZW1wbGF0ZTxjbGFzcyBE
ZWNvZGVyPiBPcHRpb25hbDxGbG9hdExpbmU+IEZsb2F0TGluZTo6ZGVjb2RlKERlY29kZXImIGRl
Y29kZXIpCit7CisgICAgT3B0aW9uYWw8RmxvYXRQb2ludD4gc3RhcnQ7CisgICAgZGVjb2RlciA+
PiBzdGFydDsKKyAgICBpZiAoIXN0YXJ0KQorICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0Owor
CisgICAgT3B0aW9uYWw8RmxvYXRQb2ludD4gZW5kOworICAgIGRlY29kZXIgPj4gZW5kOworICAg
IGlmICghZW5kKQorICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OworCisgICAgcmV0dXJuIHt7
ICpzdGFydCwgKmVuZCB9fTsKK30KKwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9TaGFy
ZWQvV2ViQ29yZUFyZ3VtZW50Q29kZXJzLmNwcCBiL1NvdXJjZS9XZWJLaXQvU2hhcmVkL1dlYkNv
cmVBcmd1bWVudENvZGVycy5jcHAKaW5kZXggMWQzYWI4ODI1NDM0NmFhMTFhZDljNjZmMzRlYWVj
NzI3OWExMjI5YS4uMjgwYzk4NDNjNjdlOWQ1ODVhMDM4NTc0ODUzYjI5MDZhMzMxMDliYSAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYktpdC9TaGFyZWQvV2ViQ29yZUFyZ3VtZW50Q29kZXJzLmNwcAor
KysgYi9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9XZWJDb3JlQXJndW1lbnRDb2RlcnMuY3BwCkBAIC0x
NjUwLDYgKzE2NTAsNyBAQCB2b2lkIEFyZ3VtZW50Q29kZXI8SW5zcGVjdG9yT3ZlcmxheTo6SGln
aGxpZ2h0Pjo6ZW5jb2RlKEVuY29kZXImIGVuY29kZXIsIGNvbnN0CiAgICAgZW5jb2RlciA8PCBo
aWdobGlnaHQuYm9yZGVyQ29sb3I7CiAgICAgZW5jb2RlciA8PCBoaWdobGlnaHQubWFyZ2luQ29s
b3I7CiAgICAgZW5jb2RlciA8PCBoaWdobGlnaHQucXVhZHM7CisgICAgZW5jb2RlciA8PCBoaWdo
bGlnaHQuZ3JpZEhpZ2hsaWdodE92ZXJsYXlzOwogfQogCiBib29sIEFyZ3VtZW50Q29kZXI8SW5z
cGVjdG9yT3ZlcmxheTo6SGlnaGxpZ2h0Pjo6ZGVjb2RlKERlY29kZXImIGRlY29kZXIsIEluc3Bl
Y3Rvck92ZXJsYXk6OkhpZ2hsaWdodCYgaGlnaGxpZ2h0KQpAQCAtMTY3Myw2ICsxNjc0LDggQEAg
Ym9vbCBBcmd1bWVudENvZGVyPEluc3BlY3Rvck92ZXJsYXk6OkhpZ2hsaWdodD46OmRlY29kZShE
ZWNvZGVyJiBkZWNvZGVyLCBJbnNwZWMKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIGlmICgh
ZGVjb2Rlci5kZWNvZGUoaGlnaGxpZ2h0LnF1YWRzKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwor
ICAgIGlmICghZGVjb2Rlci5kZWNvZGUoaGlnaGxpZ2h0LmdyaWRIaWdobGlnaHRPdmVybGF5cykp
CisgICAgICAgIHJldHVybiBmYWxzZTsKICAgICByZXR1cm4gdHJ1ZTsKIH0KIApkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvSW5zcGVjdG9yL2lvcy9XS0luc3BlY3RvckhpZ2hs
aWdodFZpZXcuaCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0luc3BlY3Rvci9pb3MvV0tJbnNw
ZWN0b3JIaWdobGlnaHRWaWV3LmgKaW5kZXggNzMwNTdlNGNlZTNkZjU4ZDYwZGZiZjYwNTdlNDY4
MDJlYzNlMDgwYS4uYTkzNjlmOTY3ZTk1NzhmYTU1NDgxZGE2MDdjMzIyZGExNTVkYjViMCAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvSW5zcGVjdG9yL2lvcy9XS0luc3BlY3Rv
ckhpZ2hsaWdodFZpZXcuaAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9JbnNwZWN0b3Iv
aW9zL1dLSW5zcGVjdG9ySGlnaGxpZ2h0Vmlldy5oCkBAIC0zMCw4ICszMCw5IEBACiAKIEBpbnRl
cmZhY2UgV0tJbnNwZWN0b3JIaWdobGlnaHRWaWV3IDogVUlWaWV3IHsKICAgICBSZXRhaW5QdHI8
TlNNdXRhYmxlQXJyYXk8Q0FTaGFwZUxheWVyICo+PiBfbGF5ZXJzOworICAgIFJldGFpblB0cjxO
U011dGFibGVBcnJheTxDQUxheWVyICo+PiBfZ3JpZE92ZXJsYXlMYXllcnM7CiB9Ci0tICh2b2lk
KXVwZGF0ZTooY29uc3QgV2ViQ29yZTo6SW5zcGVjdG9yT3ZlcmxheTo6SGlnaGxpZ2h0JiloaWdo
bGlnaHQ7CistICh2b2lkKXVwZGF0ZTooY29uc3QgV2ViQ29yZTo6SW5zcGVjdG9yT3ZlcmxheTo6
SGlnaGxpZ2h0JiloaWdobGlnaHQgc2NhbGU6KGRvdWJsZSlzY2FsZTsKIEBlbmQKIAogI2VuZGlm
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9JbnNwZWN0b3IvaW9zL1dLSW5z
cGVjdG9ySGlnaGxpZ2h0Vmlldy5tbSBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0luc3BlY3Rv
ci9pb3MvV0tJbnNwZWN0b3JIaWdobGlnaHRWaWV3Lm1tCmluZGV4IGIxYjBiZTM0YmYzMzBjMGVl
NTU1ZWQ4ZGM3NDFmYzY0MmIxMDlhZjQuLjg2OWQ3YjViYWVjMzRmMDczMDM2YzBlNzAxNjQ4MThi
OTQ1ODk0YmYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0luc3BlY3Rvci9p
b3MvV0tJbnNwZWN0b3JIaWdobGlnaHRWaWV3Lm1tCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9j
ZXNzL0luc3BlY3Rvci9pb3MvV0tJbnNwZWN0b3JIaWdobGlnaHRWaWV3Lm1tCkBAIC0yOCw4ICsy
OCwxMiBAQAogCiAjaWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkKIAorI2ltcG9ydCA8V2ViQ29yZS9G
bG9hdExpbmUuaD4KICNpbXBvcnQgPFdlYkNvcmUvRmxvYXRRdWFkLmg+CisjaW1wb3J0IDxXZWJD
b3JlL0ZvbnRDYXNjYWRlLmg+CisjaW1wb3J0IDxXZWJDb3JlL0ZvbnRDYXNjYWRlRGVzY3JpcHRp
b24uaD4KICNpbXBvcnQgPFdlYkNvcmUvR2VvbWV0cnlVdGlsaXRpZXMuaD4KKyNpbXBvcnQgPFdl
YkNvcmUvVGV4dFJ1bi5oPgogCiBAaW1wbGVtZW50YXRpb24gV0tJbnNwZWN0b3JIaWdobGlnaHRW
aWV3CiAKQEAgLTM4LDYgKzQyLDcgQEAgLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoRnJhbWU6KENH
UmVjdClmcmFtZQogICAgIGlmICghKHNlbGYgPSBbc3VwZXIgaW5pdFdpdGhGcmFtZTpmcmFtZV0p
KQogICAgICAgICByZXR1cm4gbmlsOwogICAgIF9sYXllcnMgPSBhZG9wdE5TKFtbTlNNdXRhYmxl
QXJyYXkgYWxsb2NdIGluaXRdKTsKKyAgICBfZ3JpZE92ZXJsYXlMYXllcnMgPSBhZG9wdE5TKFtb
TlNNdXRhYmxlQXJyYXkgYWxsb2NdIGluaXRdKTsKICAgICByZXR1cm4gc2VsZjsKIH0KIApAQCAt
NTIsNiArNTcsOSBAQCAtICh2b2lkKV9yZW1vdmVBbGxMYXllcnMKICAgICBmb3IgKENBU2hhcGVM
YXllciAqbGF5ZXIgaW4gX2xheWVycy5nZXQoKSkKICAgICAgICAgW2xheWVyIHJlbW92ZUZyb21T
dXBlcmxheWVyXTsKICAgICBbX2xheWVycyByZW1vdmVBbGxPYmplY3RzXTsKKyAgICBmb3IgKENB
TGF5ZXIgKmxheWVyIGluIF9ncmlkT3ZlcmxheUxheWVycy5nZXQoKSkKKyAgICAgICAgW2xheWVy
IHJlbW92ZUZyb21TdXBlcmxheWVyXTsKKyAgICBbX2dyaWRPdmVybGF5TGF5ZXJzIHJlbW92ZUFs
bE9iamVjdHNdOwogfQogCiAtICh2b2lkKV9jcmVhdGVMYXllcnM6KE5TVUludGVnZXIpbnVtTGF5
ZXJzCkBAIC01OSw4ICs2Nyw2IEBAIC0gKHZvaWQpX2NyZWF0ZUxheWVyczooTlNVSW50ZWdlcilu
dW1MYXllcnMKICAgICBpZiAoW19sYXllcnMgY291bnRdID09IG51bUxheWVycykKICAgICAgICAg
cmV0dXJuOwogCi0gICAgW3NlbGYgX3JlbW92ZUFsbExheWVyc107Ci0KICAgICBmb3IgKE5TVUlu
dGVnZXIgaSA9IDA7IGkgPCBudW1MYXllcnM7ICsraSkgewogICAgICAgICBhdXRvIGxheWVyID0g
YWRvcHROUyhbW0NBU2hhcGVMYXllciBhbGxvY10gaW5pdF0pOwogICAgICAgICBbX2xheWVycyBh
ZGRPYmplY3Q6bGF5ZXIuZ2V0KCldOwpAQCAtMjAyLDYgKzIwOCw3IEBAIHN0YXRpYyB2b2lkIGxh
eWVyUGF0aChDQVNoYXBlTGF5ZXIgKmxheWVyLCBjb25zdCBXZWJDb3JlOjpGbG9hdFF1YWQmIG91
dGVyUXVhZCkKICAgICBDR1BhdGhBZGRMaW5lVG9Qb2ludChwYXRoLmdldCgpLCAwLCBvdXRlclF1
YWQucDQoKS54KCksIG91dGVyUXVhZC5wNCgpLnkoKSk7CiAgICAgQ0dQYXRoQWRkTGluZVRvUG9p
bnQocGF0aC5nZXQoKSwgMCwgb3V0ZXJRdWFkLnAzKCkueCgpLCBvdXRlclF1YWQucDMoKS55KCkp
OwogICAgIENHUGF0aEFkZExpbmVUb1BvaW50KHBhdGguZ2V0KCksIDAsIG91dGVyUXVhZC5wMigp
LngoKSwgb3V0ZXJRdWFkLnAyKCkueSgpKTsKKyAgICBDR1BhdGhDbG9zZVN1YnBhdGgocGF0aC5n
ZXQoKSk7CiAgICAgbGF5ZXIucGF0aCA9IHBhdGguZ2V0KCk7CiB9CiAKQEAgLTIzNSwxMCArMjQy
LDggQEAgLSAodm9pZClfbGF5b3V0Rm9yTm9kZUhpZ2hsaWdodDooY29uc3QgV2ViQ29yZTo6SW5z
cGVjdG9yT3ZlcmxheTo6SGlnaGxpZ2h0JiloaWcKIAogLSAodm9pZClfbGF5b3V0Rm9yTm9kZUxp
c3RIaWdobGlnaHQ6KGNvbnN0IFdlYkNvcmU6Okluc3BlY3Rvck92ZXJsYXk6OkhpZ2hsaWdodCYp
aGlnaGxpZ2h0CiB7Ci0gICAgaWYgKCFoaWdobGlnaHQucXVhZHMuc2l6ZSgpKSB7Ci0gICAgICAg
IFtzZWxmIF9yZW1vdmVBbGxMYXllcnNdOworICAgIGlmICghaGlnaGxpZ2h0LnF1YWRzLnNpemUo
KSkKICAgICAgICAgcmV0dXJuOwotICAgIH0KIAogICAgIHVuc2lnbmVkIG5vZGVDb3VudCA9IGhp
Z2hsaWdodC5xdWFkcy5zaXplKCkgLyA0OwogICAgIFtzZWxmIF9jcmVhdGVMYXllcnM6bm9kZUNv
dW50ICogNF07CkBAIC0yNTAsMTAgKzI1NSw4IEBAIC0gKHZvaWQpX2xheW91dEZvck5vZGVMaXN0
SGlnaGxpZ2h0Oihjb25zdCBXZWJDb3JlOjpJbnNwZWN0b3JPdmVybGF5OjpIaWdobGlnaHQmCiAt
ICh2b2lkKV9sYXlvdXRGb3JSZWN0c0hpZ2hsaWdodDooY29uc3QgV2ViQ29yZTo6SW5zcGVjdG9y
T3ZlcmxheTo6SGlnaGxpZ2h0JiloaWdobGlnaHQKIHsKICAgICBOU1VJbnRlZ2VyIG51bUxheWVy
cyA9IGhpZ2hsaWdodC5xdWFkcy5zaXplKCk7Ci0gICAgaWYgKCFudW1MYXllcnMpIHsKLSAgICAg
ICAgW3NlbGYgX3JlbW92ZUFsbExheWVyc107CisgICAgaWYgKCFudW1MYXllcnMpCiAgICAgICAg
IHJldHVybjsKLSAgICB9CiAKICAgICBbc2VsZiBfY3JlYXRlTGF5ZXJzOm51bUxheWVyc107CiAK
QEAgLTI2NSwxMiArMjY4LDIwOSBAQCAtICh2b2lkKV9sYXlvdXRGb3JSZWN0c0hpZ2hsaWdodDoo
Y29uc3QgV2ViQ29yZTo6SW5zcGVjdG9yT3ZlcmxheTo6SGlnaGxpZ2h0JiloaQogICAgIH0KIH0K
IAotLSAodm9pZCl1cGRhdGU6KGNvbnN0IFdlYkNvcmU6Okluc3BlY3Rvck92ZXJsYXk6OkhpZ2hs
aWdodCYpaGlnaGxpZ2h0CistICh2b2lkKV9jcmVhdGVHcmlkT3ZlcmxheUxheWVyczooY29uc3Qg
V2ViQ29yZTo6SW5zcGVjdG9yT3ZlcmxheTo6SGlnaGxpZ2h0JiloaWdobGlnaHQgc2NhbGU6KGRv
dWJsZSlzY2FsZQoreworICAgIGZvciAoYXV0byBncmlkT3ZlcmxheSA6IGhpZ2hsaWdodC5ncmlk
SGlnaGxpZ2h0T3ZlcmxheXMpIHsKKyAgICAgICAgYXV0byBsYXllciA9IFtzZWxmIF9jcmVhdGVH
cmlkT3ZlcmxheUxheWVyOmdyaWRPdmVybGF5IHNjYWxlOnNjYWxlXTsKKyAgICAgICAgW19ncmlk
T3ZlcmxheUxheWVycyBhZGRPYmplY3Q6bGF5ZXJdOworICAgICAgICBbc2VsZi5sYXllciBhZGRT
dWJsYXllcjpsYXllcl07CisgICAgfQorfQorCitzdGF0aWMgQ0FMYXllciAqIGNyZWF0ZUxheW91
dEhhdGNoaW5nTGF5ZXIoV2ViQ29yZTo6RmxvYXRRdWFkIHF1YWQsIFdlYkNvcmU6OkNvbG9yIHN0
cm9rZUNvbG9yKQoreworICAgIENBU2hhcGVMYXllciAqbGF5ZXIgPSBbQ0FTaGFwZUxheWVyIGxh
eWVyXTsKKworICAgIGNvbnN0ZXhwciBhdXRvIGhhdGNoU3BhY2luZyA9IDEyOworICAgIGF1dG8g
aGF0Y2hQYXRoID0gYWRvcHRDRihDR1BhdGhDcmVhdGVNdXRhYmxlKCkpOworCisgICAgV2ViQ29y
ZTo6RmxvYXRMaW5lIHRvcFNpZGUgPSB7IHF1YWQucDEoKSwgcXVhZC5wMigpIH07CisgICAgV2Vi
Q29yZTo6RmxvYXRMaW5lIGxlZnRTaWRlID0geyBxdWFkLnAxKCksIHF1YWQucDQoKSB9OworCisg
ICAgLy8gVGhlIG9wcG9zaXRlIGF4aXMnIGxlbmd0aCBpcyB1c2VkIHRvIGRldGVybWluZSBob3cg
ZmFyIHRvIGRyYXcgYSBoYXRjaCBsaW5lIGluIGJvdGggZGltZW5zaW9ucywgd2hpY2gga2VlcHMg
dGhlIGxpbmVzIGF0IGEgNDVkZWcgYW5nbGUuCisgICAgaWYgKHRvcFNpZGUubGVuZ3RoKCkgPiBs
ZWZ0U2lkZS5sZW5ndGgoKSkgeworICAgICAgICBXZWJDb3JlOjpGbG9hdExpbmUgYm90dG9tU2lk
ZSA9IHsgcXVhZC5wNCgpLCBxdWFkLnAzKCkgfTsKKyAgICAgICAgLy8gTW92ZSBhY3Jvc3MgdGhl
IHJlbGF0aXZlIHRvcCBvZiB0aGUgcXVhZCwgc3RhcnRpbmcgbGVmdCBvZiBgMCwgMGAgdG8gZW5z
dXJlIHRoYXQgdGhlIHRhaWwgb2YgdGhlIHByZXZpb3VzIGhhdGNoIGxpbmUgaXMgZHJhd24gd2hp
bGUgc2Nyb2xsaW5nLgorICAgICAgICBmb3IgKGZsb2F0IHggPSAtbGVmdFNpZGUubGVuZ3RoKCk7
IHggPCB0b3BTaWRlLmxlbmd0aCgpOyB4ICs9IGhhdGNoU3BhY2luZykgeworICAgICAgICAgICAg
YXV0byBzdGFydFBvaW50ID0gdG9wU2lkZS5wb2ludEF0QWJzb2x1dGVEaXN0YW5jZSh4KTsKKyAg
ICAgICAgICAgIGF1dG8gZW5kUG9pbnQgPSBib3R0b21TaWRlLnBvaW50QXRBYnNvbHV0ZURpc3Rh
bmNlKHggKyBsZWZ0U2lkZS5sZW5ndGgoKSk7CisgICAgICAgICAgICBDR1BhdGhNb3ZlVG9Qb2lu
dChoYXRjaFBhdGguZ2V0KCksIDAsIHN0YXJ0UG9pbnQueCgpLCBzdGFydFBvaW50LnkoKSk7Cisg
ICAgICAgICAgICBDR1BhdGhBZGRMaW5lVG9Qb2ludChoYXRjaFBhdGguZ2V0KCksIDAsIGVuZFBv
aW50LngoKSwgZW5kUG9pbnQueSgpKTsKKyAgICAgICAgfQorICAgIH0gZWxzZSB7CisgICAgICAg
IFdlYkNvcmU6OkZsb2F0TGluZSByaWdodFNpZGUgPSB7IHF1YWQucDIoKSwgcXVhZC5wMygpIH07
CisgICAgICAgIC8vIE1vdmUgZG93biB0aGUgcmVsYXRpdmUgbGVmdCBzaWRlIG9mIHRoZSBxdWFk
LCBzdGFydGluZyBhYm92ZSBgMCwgMGAgdG8gZW5zdXJlIHRoYXQgdGhlIHRhaWwgb2YgdGhlIHBy
ZXZpb3VzIGhhdGNoIGxpbmUgaXMgZHJhd24gd2hpbGUgc2Nyb2xsaW5nLgorICAgICAgICBmb3Ig
KGZsb2F0IHkgPSAtdG9wU2lkZS5sZW5ndGgoKTsgeSA8IGxlZnRTaWRlLmxlbmd0aCgpOyB5ICs9
IGhhdGNoU3BhY2luZykgeworICAgICAgICAgICAgYXV0byBzdGFydFBvaW50ID0gbGVmdFNpZGUu
cG9pbnRBdEFic29sdXRlRGlzdGFuY2UoeSk7CisgICAgICAgICAgICBhdXRvIGVuZFBvaW50ID0g
cmlnaHRTaWRlLnBvaW50QXRBYnNvbHV0ZURpc3RhbmNlKHkgKyB0b3BTaWRlLmxlbmd0aCgpKTsK
KyAgICAgICAgICAgIENHUGF0aE1vdmVUb1BvaW50KGhhdGNoUGF0aC5nZXQoKSwgMCwgc3RhcnRQ
b2ludC54KCksIHN0YXJ0UG9pbnQueSgpKTsKKyAgICAgICAgICAgIENHUGF0aEFkZExpbmVUb1Bv
aW50KGhhdGNoUGF0aC5nZXQoKSwgMCwgZW5kUG9pbnQueCgpLCBlbmRQb2ludC55KCkpOworICAg
ICAgICB9CisgICAgfQorICAgIGxheWVyLnBhdGggPSBoYXRjaFBhdGguZ2V0KCk7CisgICAgbGF5
ZXIuc3Ryb2tlQ29sb3IgPSBjYWNoZWRDR0NvbG9yKHN0cm9rZUNvbG9yKTsKKyAgICBsYXllci5s
aW5lV2lkdGggPSAwLjU7CisgICAgbGF5ZXIubGluZURhc2hQYXR0ZXJuID0gQFtbTlNOdW1iZXIg
bnVtYmVyV2l0aEludDoyXSwgW05TTnVtYmVyIG51bWJlcldpdGhJbnQ6Ml1dOworCisgICAgQ0FT
aGFwZUxheWVyICptYXNrTGF5ZXIgPSBbQ0FTaGFwZUxheWVyIGxheWVyXTsKKyAgICBsYXllclBh
dGgobWFza0xheWVyLCBxdWFkKTsKKyAgICBsYXllci5tYXNrID0gbWFza0xheWVyOworICAgIHJl
dHVybiBsYXllcjsKK30KKworc3RhdGljIENBTGF5ZXIgKiBjcmVhdGVMYXlvdXRMYWJlbExheWVy
KFN0cmluZyBsYWJlbCwgV2ViQ29yZTo6RmxvYXRQb2ludCBwb2ludCwgV2ViQ29yZTo6SW5zcGVj
dG9yT3ZlcmxheTo6TGFiZWxBcnJvd0RpcmVjdGlvbiBkaXJlY3Rpb24sIFdlYkNvcmU6OkNvbG9y
IGJhY2tncm91bmRDb2xvciwgV2ViQ29yZTo6Q29sb3Igc3Ryb2tlQ29sb3IsIGRvdWJsZSBzY2Fs
ZSwgZmxvYXQgbWF4aW11bVdpZHRoID0gMCkKK3sKKyAgICBXZWJDb3JlOjpGb250Q2FzY2FkZURl
c2NyaXB0aW9uIGZvbnREZXNjcmlwdGlvbjsKKyAgICBmb250RGVzY3JpcHRpb24uc2V0RmFtaWxp
ZXMoeyAic3lzdGVtLXVpIiB9KTsKKyAgICBmb250RGVzY3JpcHRpb24uc2V0V2VpZ2h0KFdlYkNv
cmU6OkZvbnRTZWxlY3Rpb25WYWx1ZSg1MDApKTsKKyAgICBmb250RGVzY3JpcHRpb24uc2V0Q29t
cHV0ZWRTaXplKDEyKTsKKworICAgIFdlYkNvcmU6OkZvbnRDYXNjYWRlIGZvbnQoV1RGTW92ZShm
b250RGVzY3JpcHRpb24pLCAwLCAwKTsKKyAgICBmb250LnVwZGF0ZShudWxscHRyKTsKKworICAg
IGNvbnN0ZXhwciBhdXRvIHBhZGRpbmcgPSA0OworICAgIGNvbnN0ZXhwciBhdXRvIGFycm93U2l6
ZSA9IDQ7CisgICAgZmxvYXQgdGV4dEhlaWdodCA9IGZvbnQuZm9udE1ldHJpY3MoKS5mbG9hdEhl
aWdodCgpOworCisgICAgZmxvYXQgdGV4dFdpZHRoID0gZm9udC53aWR0aChXZWJDb3JlOjpUZXh0
UnVuKGxhYmVsKSk7CisgICAgaWYgKG1heGltdW1XaWR0aCAmJiB0ZXh0V2lkdGggKyAocGFkZGlu
ZyAqIDIpID4gbWF4aW11bVdpZHRoKSB7CisgICAgICAgIGxhYmVsLmFwcGVuZCgiLi4uIl9zKTsK
KyAgICAgICAgd2hpbGUgKHRleHRXaWR0aCArIChwYWRkaW5nICogMikgPiBtYXhpbXVtV2lkdGgg
JiYgbGFiZWwubGVuZ3RoKCkgPj0gNCkgeworICAgICAgICAgICAgLy8gUmVtb3ZlIHRoZSBmb3Vy
dGggZnJvbSBsYXN0IGNoYXJhY3RlciAodGhlIGNoYXJhY3RlciBiZWZvcmUgdGhlIGVsbGlwc2lz
KSBhbmQgcmVtZWFzdXJlLgorICAgICAgICAgICAgbGFiZWwucmVtb3ZlKGxhYmVsLmxlbmd0aCgp
IC0gNCk7CisgICAgICAgICAgICB0ZXh0V2lkdGggPSBmb250LndpZHRoKFdlYkNvcmU6OlRleHRS
dW4obGFiZWwpKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIGF1dG8gbGFiZWxQYXRoID0gYWRv
cHRDRihDR1BhdGhDcmVhdGVNdXRhYmxlKCkpOworCisgICAgLy8gTm90ZTogSW1wbGVtZW50YXRp
b24gRGlmZmVyZW5jZSAtIFRoZSB0ZXh0UG9zaXRpb24gaXMgdGhlIGNlbnRlciBvZiB0ZXh0LCB1
bmxpa2UgV2ViQ29yZTo6SW5zcGVjdG9yT3ZlcmxheSwgd2hlcmUgdGhlIHRleHRQb3NpdGlvbiBp
cyBsZWZ0bW9zdCBwb2ludCBvbiB0aGUgYmFzZWxpbmUgb2YgdGhlIHRleHQuCisgICAgV2ViQ29y
ZTo6RmxvYXRQb2ludCB0ZXh0UG9zaXRpb247CisKKyAgICBzd2l0Y2ggKGRpcmVjdGlvbikgewor
ICAgIGNhc2UgV2ViQ29yZTo6SW5zcGVjdG9yT3ZlcmxheTo6TGFiZWxBcnJvd0RpcmVjdGlvbjo6
RG93bjoKKyAgICAgICAgQ0dQYXRoTW92ZVRvUG9pbnQobGFiZWxQYXRoLmdldCgpLCAwLCAtKHRl
eHRXaWR0aCAvIDIpIC0gcGFkZGluZywgLXRleHRIZWlnaHQgLSAocGFkZGluZyAqIDIpIC0gYXJy
b3dTaXplKTsKKyAgICAgICAgQ0dQYXRoQWRkTGluZVRvUG9pbnQobGFiZWxQYXRoLmdldCgpLCAw
LCAtKHRleHRXaWR0aCAvIDIpIC0gcGFkZGluZywgLWFycm93U2l6ZSk7CisgICAgICAgIENHUGF0
aEFkZExpbmVUb1BvaW50KGxhYmVsUGF0aC5nZXQoKSwgMCwgLWFycm93U2l6ZSwgLWFycm93U2l6
ZSk7CisgICAgICAgIENHUGF0aEFkZExpbmVUb1BvaW50KGxhYmVsUGF0aC5nZXQoKSwgMCwgMCwg
MCk7CisgICAgICAgIENHUGF0aEFkZExpbmVUb1BvaW50KGxhYmVsUGF0aC5nZXQoKSwgMCwgYXJy
b3dTaXplLCAtYXJyb3dTaXplKTsKKyAgICAgICAgQ0dQYXRoQWRkTGluZVRvUG9pbnQobGFiZWxQ
YXRoLmdldCgpLCAwLCAodGV4dFdpZHRoIC8gMikgKyBwYWRkaW5nLCAtYXJyb3dTaXplKTsKKyAg
ICAgICAgQ0dQYXRoQWRkTGluZVRvUG9pbnQobGFiZWxQYXRoLmdldCgpLCAwLCAodGV4dFdpZHRo
IC8gMikgKyBwYWRkaW5nLCAtdGV4dEhlaWdodCAtIChwYWRkaW5nICogMikgLSBhcnJvd1NpemUp
OworICAgICAgICB0ZXh0UG9zaXRpb24gPSBXZWJDb3JlOjpGbG9hdFBvaW50KDAsIC0odGV4dEhl
aWdodCAvIDIpIC0gYXJyb3dTaXplIC0gcGFkZGluZyk7CisgICAgICAgIGJyZWFrOworICAgIGNh
c2UgV2ViQ29yZTo6SW5zcGVjdG9yT3ZlcmxheTo6TGFiZWxBcnJvd0RpcmVjdGlvbjo6VXA6Cisg
ICAgICAgIENHUGF0aE1vdmVUb1BvaW50KGxhYmVsUGF0aC5nZXQoKSwgMCwgLSh0ZXh0V2lkdGgg
LyAyKSAtIHBhZGRpbmcsIHRleHRIZWlnaHQgKyAocGFkZGluZyAqIDIpICsgYXJyb3dTaXplKTsK
KyAgICAgICAgQ0dQYXRoQWRkTGluZVRvUG9pbnQobGFiZWxQYXRoLmdldCgpLCAwLCAtKHRleHRX
aWR0aCAvIDIpIC0gcGFkZGluZywgYXJyb3dTaXplKTsKKyAgICAgICAgQ0dQYXRoQWRkTGluZVRv
UG9pbnQobGFiZWxQYXRoLmdldCgpLCAwLCAtYXJyb3dTaXplLCBhcnJvd1NpemUpOworICAgICAg
ICBDR1BhdGhBZGRMaW5lVG9Qb2ludChsYWJlbFBhdGguZ2V0KCksIDAsIDAsIDApOworICAgICAg
ICBDR1BhdGhBZGRMaW5lVG9Qb2ludChsYWJlbFBhdGguZ2V0KCksIDAsIGFycm93U2l6ZSwgYXJy
b3dTaXplKTsKKyAgICAgICAgQ0dQYXRoQWRkTGluZVRvUG9pbnQobGFiZWxQYXRoLmdldCgpLCAw
LCAodGV4dFdpZHRoIC8gMikgKyBwYWRkaW5nLCBhcnJvd1NpemUpOworICAgICAgICBDR1BhdGhB
ZGRMaW5lVG9Qb2ludChsYWJlbFBhdGguZ2V0KCksIDAsICh0ZXh0V2lkdGggLyAyKSArIHBhZGRp
bmcsIHRleHRIZWlnaHQgKyAocGFkZGluZyAqIDIpICsgYXJyb3dTaXplKTsKKyAgICAgICAgdGV4
dFBvc2l0aW9uID0gV2ViQ29yZTo6RmxvYXRQb2ludCgwLCAodGV4dEhlaWdodCAvIDIpICsgYXJy
b3dTaXplICsgcGFkZGluZyk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgV2ViQ29yZTo6SW5z
cGVjdG9yT3ZlcmxheTo6TGFiZWxBcnJvd0RpcmVjdGlvbjo6UmlnaHQ6CisgICAgICAgIENHUGF0
aE1vdmVUb1BvaW50KGxhYmVsUGF0aC5nZXQoKSwgMCwgLXRleHRXaWR0aCAtIChwYWRkaW5nICog
MikgLSBhcnJvd1NpemUsICh0ZXh0SGVpZ2h0IC8gMikgKyBwYWRkaW5nKTsKKyAgICAgICAgQ0dQ
YXRoQWRkTGluZVRvUG9pbnQobGFiZWxQYXRoLmdldCgpLCAwLCAtYXJyb3dTaXplLCAodGV4dEhl
aWdodCAvIDIpICsgcGFkZGluZyk7CisgICAgICAgIENHUGF0aEFkZExpbmVUb1BvaW50KGxhYmVs
UGF0aC5nZXQoKSwgMCwgLWFycm93U2l6ZSwgYXJyb3dTaXplKTsKKyAgICAgICAgQ0dQYXRoQWRk
TGluZVRvUG9pbnQobGFiZWxQYXRoLmdldCgpLCAwLCAwLCAwKTsKKyAgICAgICAgQ0dQYXRoQWRk
TGluZVRvUG9pbnQobGFiZWxQYXRoLmdldCgpLCAwLCAtYXJyb3dTaXplLCAtYXJyb3dTaXplKTsK
KyAgICAgICAgQ0dQYXRoQWRkTGluZVRvUG9pbnQobGFiZWxQYXRoLmdldCgpLCAwLCAtYXJyb3dT
aXplLCAtKHRleHRIZWlnaHQgLyAyKSAtIHBhZGRpbmcpOworICAgICAgICBDR1BhdGhBZGRMaW5l
VG9Qb2ludChsYWJlbFBhdGguZ2V0KCksIDAsIC10ZXh0V2lkdGggLSAocGFkZGluZyAqIDIpIC0g
YXJyb3dTaXplLCAtKHRleHRIZWlnaHQgLyAyKSAtIHBhZGRpbmcpOworICAgICAgICB0ZXh0UG9z
aXRpb24gPSBXZWJDb3JlOjpGbG9hdFBvaW50KC0odGV4dFdpZHRoIC8gMikgLSBhcnJvd1NpemUg
LSBwYWRkaW5nLCAwKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBXZWJDb3JlOjpJbnNwZWN0
b3JPdmVybGF5OjpMYWJlbEFycm93RGlyZWN0aW9uOjpMZWZ0OgorICAgICAgICBDR1BhdGhNb3Zl
VG9Qb2ludChsYWJlbFBhdGguZ2V0KCksIDAsIHRleHRXaWR0aCArIChwYWRkaW5nICogMikgKyBh
cnJvd1NpemUsICh0ZXh0SGVpZ2h0IC8gMikgKyBwYWRkaW5nKTsKKyAgICAgICAgQ0dQYXRoQWRk
TGluZVRvUG9pbnQobGFiZWxQYXRoLmdldCgpLCAwLCBhcnJvd1NpemUsICh0ZXh0SGVpZ2h0IC8g
MikgKyBwYWRkaW5nKTsKKyAgICAgICAgQ0dQYXRoQWRkTGluZVRvUG9pbnQobGFiZWxQYXRoLmdl
dCgpLCAwLCBhcnJvd1NpemUsIGFycm93U2l6ZSk7CisgICAgICAgIENHUGF0aEFkZExpbmVUb1Bv
aW50KGxhYmVsUGF0aC5nZXQoKSwgMCwgMCwgMCk7CisgICAgICAgIENHUGF0aEFkZExpbmVUb1Bv
aW50KGxhYmVsUGF0aC5nZXQoKSwgMCwgYXJyb3dTaXplLCAtYXJyb3dTaXplKTsKKyAgICAgICAg
Q0dQYXRoQWRkTGluZVRvUG9pbnQobGFiZWxQYXRoLmdldCgpLCAwLCBhcnJvd1NpemUsIC0odGV4
dEhlaWdodCAvIDIpIC0gcGFkZGluZyk7CisgICAgICAgIENHUGF0aEFkZExpbmVUb1BvaW50KGxh
YmVsUGF0aC5nZXQoKSwgMCwgdGV4dFdpZHRoICsgKHBhZGRpbmcgKiAyKSArIGFycm93U2l6ZSwg
LSh0ZXh0SGVpZ2h0IC8gMikgLSBwYWRkaW5nKTsKKyAgICAgICAgdGV4dFBvc2l0aW9uID0gV2Vi
Q29yZTo6RmxvYXRQb2ludCgodGV4dFdpZHRoIC8gMikgKyBhcnJvd1NpemUgKyBwYWRkaW5nLCAw
KTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBXZWJDb3JlOjpJbnNwZWN0b3JPdmVybGF5OjpM
YWJlbEFycm93RGlyZWN0aW9uOjpOb25lOgorICAgICAgICBDR1BhdGhNb3ZlVG9Qb2ludChsYWJl
bFBhdGguZ2V0KCksIDAsIDAsIDApOworICAgICAgICBDR1BhdGhBZGRMaW5lVG9Qb2ludChsYWJl
bFBhdGguZ2V0KCksIDAsIDAsIHRleHRIZWlnaHQgKyAocGFkZGluZyAqIDIpKTsKKyAgICAgICAg
Q0dQYXRoQWRkTGluZVRvUG9pbnQobGFiZWxQYXRoLmdldCgpLCAwLCB0ZXh0V2lkdGggKyAocGFk
ZGluZyAqIDIpLCB0ZXh0SGVpZ2h0ICsgKHBhZGRpbmcgKiAyKSk7CisgICAgICAgIENHUGF0aEFk
ZExpbmVUb1BvaW50KGxhYmVsUGF0aC5nZXQoKSwgMCwgdGV4dFdpZHRoICsgKHBhZGRpbmcgKiAy
KSwgMCk7CisgICAgICAgIHRleHRQb3NpdGlvbiA9IFdlYkNvcmU6OkZsb2F0UG9pbnQocGFkZGlu
ZyArICh0ZXh0V2lkdGggLyAyKSwgcGFkZGluZyArICh0ZXh0SGVpZ2h0IC8gMikpOworICAgICAg
ICBicmVhazsKKyAgICB9CisKKyAgICBDR1BhdGhDbG9zZVN1YnBhdGgobGFiZWxQYXRoLmdldCgp
KTsKKworICAgIENBTGF5ZXIgKmxheWVyID0gW0NBTGF5ZXIgbGF5ZXJdOworCisgICAgQ0FTaGFw
ZUxheWVyICpsYWJlbFBhdGhMYXllciA9IFtDQVNoYXBlTGF5ZXIgbGF5ZXJdOworICAgIGxhYmVs
UGF0aExheWVyLnBhdGggPSBsYWJlbFBhdGguZ2V0KCk7CisgICAgbGFiZWxQYXRoTGF5ZXIuZmls
bENvbG9yID0gY2FjaGVkQ0dDb2xvcihiYWNrZ3JvdW5kQ29sb3IpOworICAgIGxhYmVsUGF0aExh
eWVyLnN0cm9rZUNvbG9yID0gY2FjaGVkQ0dDb2xvcihzdHJva2VDb2xvcik7CisgICAgbGFiZWxQ
YXRoTGF5ZXIucG9zaXRpb24gPSBDR1BvaW50TWFrZShwb2ludC54KCksIHBvaW50LnkoKSk7Cisg
ICAgW2xheWVyIGFkZFN1YmxheWVyOmxhYmVsUGF0aExheWVyXTsKKworICAgIENBVGV4dExheWVy
ICp0ZXh0TGF5ZXIgPSBbQ0FUZXh0TGF5ZXIgbGF5ZXJdOworICAgIHRleHRMYXllci5mcmFtZSA9
IENHUmVjdE1ha2UoMCwgMCwgdGV4dFdpZHRoLCB0ZXh0SGVpZ2h0KTsKKyAgICB0ZXh0TGF5ZXIu
c3RyaW5nID0gbGFiZWw7CisgICAgdGV4dExheWVyLmZvbnQgPSBmb250LnByaW1hcnlGb250KCku
Z2V0Q1RGb250KCk7CisgICAgdGV4dExheWVyLmZvbnRTaXplID0gMTI7CisgICAgdGV4dExheWVy
LmFsaWdubWVudE1vZGUgPSBrQ0FBbGlnbm1lbnRMZWZ0OworICAgIHRleHRMYXllci5mb3JlZ3Jv
dW5kQ29sb3IgPSBDR0NvbG9yR2V0Q29uc3RhbnRDb2xvcihrQ0dDb2xvckJsYWNrKTsKKyAgICB0
ZXh0TGF5ZXIucG9zaXRpb24gPSBDR1BvaW50TWFrZSh0ZXh0UG9zaXRpb24ueCgpICsgcG9pbnQu
eCgpLCB0ZXh0UG9zaXRpb24ueSgpICsgcG9pbnQueSgpKTsKKyAgICB0ZXh0TGF5ZXIuY29udGVu
dHNTY2FsZSA9IFtbVUlTY3JlZW4gbWFpblNjcmVlbl0gc2NhbGVdICogc2NhbGU7CisgICAgW2xh
eWVyIGFkZFN1YmxheWVyOnRleHRMYXllcl07CisKKyAgICByZXR1cm4gbGF5ZXI7Cit9CisKKy0g
KENBTGF5ZXIgKilfY3JlYXRlR3JpZE92ZXJsYXlMYXllcjooY29uc3QgV2ViQ29yZTo6SW5zcGVj
dG9yT3ZlcmxheTo6SGlnaGxpZ2h0OjpHcmlkSGlnaGxpZ2h0T3ZlcmxheSYpb3ZlcmxheSBzY2Fs
ZTooZG91YmxlKXNjYWxlCiB7CisgICAgLy8gS2VlcCBpbXBsZW1lbnRhdGlvbiByb3VnaGx5IGVx
dWl2aWxlbnQgdG8gYFdlYkNvcmU6Okluc3BlY3Rvck92ZXJsYXk6OmRyYXdHcmlkT3ZlcmxheWAu
CisgICAgQ0FMYXllciAqbGF5ZXIgPSBbQ0FMYXllciBsYXllcl07CisKKyAgICBhdXRvIGdyaWRM
aW5lc1BhdGggPSBhZG9wdENGKENHUGF0aENyZWF0ZU11dGFibGUoKSk7CisgICAgZm9yIChhdXRv
IGdyaWRMaW5lIDogb3ZlcmxheS5ncmlkTGluZXMpIHsKKyAgICAgICAgQ0dQYXRoTW92ZVRvUG9p
bnQoZ3JpZExpbmVzUGF0aC5nZXQoKSwgMCwgZ3JpZExpbmUuc3RhcnQoKS54KCksIGdyaWRMaW5l
LnN0YXJ0KCkueSgpKTsKKyAgICAgICAgQ0dQYXRoQWRkTGluZVRvUG9pbnQoZ3JpZExpbmVzUGF0
aC5nZXQoKSwgMCwgZ3JpZExpbmUuZW5kKCkueCgpLCBncmlkTGluZS5lbmQoKS55KCkpOworICAg
IH0KKyAgICBDQVNoYXBlTGF5ZXIgKmdyaWRMaW5lc0xheWVyID0gW0NBU2hhcGVMYXllciBsYXll
cl07CisgICAgZ3JpZExpbmVzTGF5ZXIucGF0aCA9IGdyaWRMaW5lc1BhdGguZ2V0KCk7CisgICAg
Z3JpZExpbmVzTGF5ZXIubGluZVdpZHRoID0gMTsKKyAgICBncmlkTGluZXNMYXllci5zdHJva2VD
b2xvciA9IGNhY2hlZENHQ29sb3Iob3ZlcmxheS5jb2xvcik7CisgICAgW2xheWVyIGFkZFN1Ymxh
eWVyOmdyaWRMaW5lc0xheWVyXTsKKworICAgIGZvciAoYXV0byBnYXBRdWFkIDogb3ZlcmxheS5n
YXBzKQorICAgICAgICBbbGF5ZXIgYWRkU3VibGF5ZXI6Y3JlYXRlTGF5b3V0SGF0Y2hpbmdMYXll
cihnYXBRdWFkLCBvdmVybGF5LmNvbG9yKV07CisKKyAgICBmb3IgKGF1dG8gYXJlYSA6IG92ZXJs
YXkuYXJlYXMpIHsKKyAgICAgICAgQ0FTaGFwZUxheWVyICphcmVhTGF5ZXIgPSBbQ0FTaGFwZUxh
eWVyIGxheWVyXTsKKyAgICAgICAgbGF5ZXJQYXRoKGFyZWFMYXllciwgYXJlYS5xdWFkKTsKKyAg
ICAgICAgYXJlYUxheWVyLmxpbmVXaWR0aCA9IDM7CisgICAgICAgIGFyZWFMYXllci5maWxsQ29s
b3IgPSBDR0NvbG9yR2V0Q29uc3RhbnRDb2xvcihrQ0dDb2xvckNsZWFyKTsKKyAgICAgICAgYXJl
YUxheWVyLnN0cm9rZUNvbG9yID0gY2FjaGVkQ0dDb2xvcihvdmVybGF5LmNvbG9yKTsKKyAgICAg
ICAgW2xheWVyIGFkZFN1YmxheWVyOmFyZWFMYXllcl07CisgICAgfQorCisgICAgY29uc3RleHBy
IGF1dG8gdHJhbnNsdWNlbnRMYWJlbEJhY2tncm91bmRDb2xvciA9IFdlYkNvcmU6OkNvbG9yOjp3
aGl0ZS5jb2xvcldpdGhBbHBoYUJ5dGUoMTUzKTsKKworICAgIGZvciAoYXV0byBhcmVhIDogb3Zl
cmxheS5hcmVhcykKKyAgICAgICAgW2xheWVyIGFkZFN1YmxheWVyOmNyZWF0ZUxheW91dExhYmVs
TGF5ZXIoYXJlYS5uYW1lLCBhcmVhLnF1YWQucDEoKSwgV2ViQ29yZTo6SW5zcGVjdG9yT3Zlcmxh
eTo6TGFiZWxBcnJvd0RpcmVjdGlvbjo6Tm9uZSwgdHJhbnNsdWNlbnRMYWJlbEJhY2tncm91bmRD
b2xvciwgb3ZlcmxheS5jb2xvciwgc2NhbGUsIGFyZWEucXVhZC5ib3VuZGluZ0JveCgpLndpZHRo
KCkpXTsKKworICAgIGZvciAoYXV0byBsYWJlbCA6IG92ZXJsYXkubGFiZWxzKQorICAgICAgICBb
bGF5ZXIgYWRkU3VibGF5ZXI6Y3JlYXRlTGF5b3V0TGFiZWxMYXllcihsYWJlbC50ZXh0LCBsYWJl
bC5sb2NhdGlvbiwgbGFiZWwuYXJyb3dEaXJlY3Rpb24sIGxhYmVsLmJhY2tncm91bmRDb2xvciwg
b3ZlcmxheS5jb2xvciwgc2NhbGUpXTsKKworICAgIHJldHVybiBsYXllcjsKK30KKworLSAodm9p
ZCl1cGRhdGU6KGNvbnN0IFdlYkNvcmU6Okluc3BlY3Rvck92ZXJsYXk6OkhpZ2hsaWdodCYpaGln
aGxpZ2h0IHNjYWxlOihkb3VibGUpc2NhbGUKK3sKKyAgICBbc2VsZiBfcmVtb3ZlQWxsTGF5ZXJz
XTsKKwogICAgIGlmIChoaWdobGlnaHQudHlwZSA9PSBXZWJDb3JlOjpJbnNwZWN0b3JPdmVybGF5
OjpIaWdobGlnaHQ6OlR5cGU6Ok5vZGUgfHwgaGlnaGxpZ2h0LnR5cGUgPT0gV2ViQ29yZTo6SW5z
cGVjdG9yT3ZlcmxheTo6SGlnaGxpZ2h0OjpUeXBlOjpOb2RlTGlzdCkKICAgICAgICAgW3NlbGYg
X2xheW91dEZvck5vZGVMaXN0SGlnaGxpZ2h0OmhpZ2hsaWdodF07CiAgICAgZWxzZSBpZiAoaGln
aGxpZ2h0LnR5cGUgPT0gV2ViQ29yZTo6SW5zcGVjdG9yT3ZlcmxheTo6SGlnaGxpZ2h0OjpUeXBl
OjpSZWN0cykKICAgICAgICAgW3NlbGYgX2xheW91dEZvclJlY3RzSGlnaGxpZ2h0OmhpZ2hsaWdo
dF07CisKKyAgICBbc2VsZiBfY3JlYXRlR3JpZE92ZXJsYXlMYXllcnM6aGlnaGxpZ2h0IHNjYWxl
OnNjYWxlXTsKIH0KIAogQGVuZApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3Mv
aW9zL1dLQ29udGVudFZpZXcubW0gYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9pb3MvV0tDb250
ZW50Vmlldy5tbQppbmRleCAxNWI5ZTdkNmZhMTA4OTMzMWZmNGY2ODk3Y2FjOGNiYTQ0YTkyNmJj
Li5mNGQ2NjVhOTY0ZWJhY2Q1OTRlOWRmZWRkMTg5NzM3MWU1MTZkZDA3IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9pb3MvV0tDb250ZW50Vmlldy5tbQorKysgYi9Tb3VyY2Uv
V2ViS2l0L1VJUHJvY2Vzcy9pb3MvV0tDb250ZW50Vmlldy5tbQpAQCAtMzY1LDcgKzM2NSw3IEBA
IC0gKHZvaWQpX3Nob3dJbnNwZWN0b3JIaWdobGlnaHQ6KGNvbnN0IFdlYkNvcmU6Okluc3BlY3Rv
ck92ZXJsYXk6OkhpZ2hsaWdodCYpaGlnCiAgICAgICAgIFtzZWxmIGluc2VydFN1YnZpZXc6X2lu
c3BlY3RvckhpZ2hsaWdodFZpZXcuZ2V0KCkgYWJvdmVTdWJ2aWV3Ol9yb290Q29udGVudFZpZXcu
Z2V0KCldOwogICAgIH0KIAotICAgIFtfaW5zcGVjdG9ySGlnaGxpZ2h0VmlldyB1cGRhdGU6aGln
aGxpZ2h0XTsKKyAgICBbX2luc3BlY3RvckhpZ2hsaWdodFZpZXcgdXBkYXRlOmhpZ2hsaWdodCBz
Y2FsZTpbc2VsZiBfY29udGVudFpvb21TY2FsZV1dOwogfQogCiAtICh2b2lkKV9oaWRlSW5zcGVj
dG9ySGlnaGxpZ2h0Cg==
</data>

          </attachment>
      

    </bug>

</bugzilla>