<?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>134168</bug_id>
          
          <creation_ts>2014-06-21 19:15:20 -0700</creation_ts>
          <short_desc>Make offset from ancestor computation explicit by moving it to the callers.</short_desc>
          <delta_ts>2014-06-22 21:28:47 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>Layout and Rendering</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>134156</dependson>
          
          <everconfirmed>1</everconfirmed>
          <reporter name="alan">zalan</reporter>
          <assigned_to name="alan">zalan</assigned_to>
          <cc>commit-queue</cc>
    
    <cc>esprehn+autocc</cc>
    
    <cc>glenn</cc>
    
    <cc>kondapallykalyan</cc>
    
    <cc>simon.fraser</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1017363</commentid>
    <comment_count>0</comment_count>
    <who name="alan">zalan</who>
    <bug_when>2014-06-21 19:15:20 -0700</bug_when>
    <thetext>Instead of passing the offset by pointer and call compute when the offset is null.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1017368</commentid>
    <comment_count>1</comment_count>
      <attachid>233555</attachid>
    <who name="alan">zalan</who>
    <bug_when>2014-06-21 20:44:07 -0700</bug_when>
    <thetext>Created attachment 233555
Patch

It has source dependency on bug 134156, won&apos;t compile as it is.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1017369</commentid>
    <comment_count>2</comment_count>
      <attachid>233556</attachid>
    <who name="alan">zalan</who>
    <bug_when>2014-06-21 20:50:24 -0700</bug_when>
    <thetext>Created attachment 233556
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1017415</commentid>
    <comment_count>3</comment_count>
      <attachid>233556</attachid>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2014-06-22 11:18:53 -0700</bug_when>
    <thetext>Comment on attachment 233556
Patch

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

&gt; Source/WebCore/rendering/RenderLayer.cpp:3581
&gt; +    LayoutRect boundingBox = layer-&gt;boundingBox(rootLayer, layer-&gt;offsetFromAncestor(rootLayer));

I think it would be cleaner for boundingBox to always return a local box (so remove the parameter), and for the caller to offset the result.

&gt; Source/WebCore/rendering/RenderLayer.cpp:5382
&gt; +    calculateRects(clipRectsContext, renderer().view().documentRect(), layerBounds, backgroundRect, foregroundRect, outlineRect, offsetFromAncestor(clipRectsContext.rootLayer));

Should check to see if any callers have already computed offsetFromAncestor.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1017469</commentid>
    <comment_count>4</comment_count>
      <attachid>233582</attachid>
    <who name="alan">zalan</who>
    <bug_when>2014-06-22 19:36:44 -0700</bug_when>
    <thetext>Created attachment 233582
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1017470</commentid>
    <comment_count>5</comment_count>
      <attachid>233582</attachid>
    <who name="alan">zalan</who>
    <bug_when>2014-06-22 19:36:59 -0700</bug_when>
    <thetext>Comment on attachment 233582
Patch

EWSing</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1017481</commentid>
    <comment_count>6</comment_count>
      <attachid>233582</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2014-06-22 21:28:43 -0700</bug_when>
    <thetext>Comment on attachment 233582
Patch

Clearing flags on attachment: 233582

Committed r170282: &lt;http://trac.webkit.org/changeset/170282&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1017482</commentid>
    <comment_count>7</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2014-06-22 21:28:47 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>233555</attachid>
            <date>2014-06-21 20:44:07 -0700</date>
            <delta_ts>2014-06-21 20:50:24 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>patch.txt</filename>
            <type>text/plain</type>
            <size>33043</size>
            <attacher name="alan">zalan</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCBjZDJmZjZhLi5kNjk2ZmM1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDUgKzEsMzYg
QEAKIDIwMTQtMDYtMjEgIFphbGFuIEJ1anRhcyAgPHphbGFuQGFwcGxlLmNvbT4KIAorICAgICAg
ICBNYWtlIG9mZnNldCBmcm9tIGFuY2VzdG9yIGNvbXB1dGF0aW9uIGV4cGxpY2l0IGJ5IG1vdmlu
ZyBpdCB0byB0aGUgY2FsbGVycy4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTEzNDE2OC4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMh
KS4KKyAgICAgICAgCisgICAgICAgIEV4cGxpY2l0IG9mZnNldCBjb21wdXRhdGlvbiBoZWxwcyBj
b2RlIHJlYWRpbmcgYW5kIGxlc3MgZXJyb3ItcHJvbmUgdGhhbiBwYXNzaW5nCisgICAgICAgIHRo
ZSBvZmZzZXQgcG9pbnRlciBhbmQgY29tcHV0ZSBpdCBsb2NhbGx5IHdoZW4gaXQgaXMgbnVsbC4K
KworICAgICAgICBObyBjaGFuZ2UgaW4gZnVuY3Rpb25hbGl0eS4KKworICAgICAgICAqIHJlbmRl
cmluZy9SZW5kZXJMYXllci5jcHA6CisgICAgICAgIChXZWJDb3JlOjp0cmFuc3BhcmVuY3lDbGlw
Qm94KToKKyAgICAgICAgKFdlYkNvcmU6OnBlcmZvcm1PdmVybGFwVGVzdHMpOgorICAgICAgICAo
V2ViQ29yZTo6UmVuZGVyTGF5ZXI6OnNldHVwQ2xpcFBhdGgpOgorICAgICAgICAoV2ViQ29yZTo6
UmVuZGVyTGF5ZXI6OnNldHVwRmlsdGVycyk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXll
cjo6cGFpbnRMYXllckNvbnRlbnRzKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyOjpj
b2xsZWN0RnJhZ21lbnRzKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyOjp1cGRhdGVQ
YWludGluZ0luZm9Gb3JGcmFnbWVudHMpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXI6
OnBhaW50VHJhbnNmb3JtZWRMYXllckludG9GcmFnbWVudHMpOgorICAgICAgICAoV2ViQ29yZTo6
UmVuZGVyTGF5ZXI6OmhpdFRlc3RMYXllcik6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXll
cjo6aGl0VGVzdFRyYW5zZm9ybWVkTGF5ZXJJbkZyYWdtZW50cyk6CisgICAgICAgIChXZWJDb3Jl
OjpSZW5kZXJMYXllcjo6Y2FsY3VsYXRlQ2xpcFJlY3RzKToKKyAgICAgICAgKiByZW5kZXJpbmcv
UmVuZGVyTGF5ZXIuaDoKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyTGF5ZXJDb21wb3NpdG9y
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyQ29tcG9zaXRvcjo6Y2FsY3VsYXRl
Q29tcG9zaXRlZEJvdW5kcyk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllckNvbXBvc2l0
b3I6OnJlcXVpcmVzQ29tcG9zaXRpbmdGb3JQb3NpdGlvbik6CisgICAgICAgICogcmVuZGVyaW5n
L1JlbmRlclRyZWVBc1RleHQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6d3JpdGVMYXllcnMpOgor
CisyMDE0LTA2LTIxICBaYWxhbiBCdWp0YXMgIDx6YWxhbkBhcHBsZS5jb20+CisKICAgICAgICAg
VHJhbnNpdGlvbiBsYXllciBvZmZzZXRzIGZyb20gTGF5b3V0UG9pbnQgdG8gTGF5b3V0U2l6ZS4K
ICAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEzNDE1Ngog
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXIuY3BwIGIv
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyLmNwcAppbmRleCBhMWNkZjE1Li5m
OWI2NzBmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXIu
Y3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllci5jcHAKQEAgLTE2
MzYsNyArMTYzNiw3IEBAIHN0YXRpYyBMYXlvdXRSZWN0IHRyYW5zcGFyZW5jeUNsaXBCb3goY29u
c3QgUmVuZGVyTGF5ZXIqIGxheWVyLCBjb25zdCBSZW5kZXJMYXllCiAgICAgICAgIHJldHVybiBy
ZXN1bHQ7CiAgICAgfQogICAgIAotICAgIExheW91dFJlY3QgY2xpcFJlY3QgPSBsYXllci0+Ym91
bmRpbmdCb3gocm9vdExheWVyLCB0cmFuc3BhcmVuY3lCZWhhdmlvciA9PSBIaXRUZXN0aW5nVHJh
bnNwYXJlbmN5Q2xpcEJveCA/IFJlbmRlckxheWVyOjpVc2VGcmFnbWVudEJveGVzSW5jbHVkaW5n
Q29tcG9zaXRpbmcgOiBSZW5kZXJMYXllcjo6VXNlRnJhZ21lbnRCb3hlc0V4Y2x1ZGluZ0NvbXBv
c2l0aW5nKTsKKyAgICBMYXlvdXRSZWN0IGNsaXBSZWN0ID0gbGF5ZXItPmJvdW5kaW5nQm94KHJv
b3RMYXllciwgbGF5ZXItPm9mZnNldEZyb21BbmNlc3Rvcihyb290TGF5ZXIpLCB0cmFuc3BhcmVu
Y3lCZWhhdmlvciA9PSBIaXRUZXN0aW5nVHJhbnNwYXJlbmN5Q2xpcEJveCA/IFJlbmRlckxheWVy
OjpVc2VGcmFnbWVudEJveGVzSW5jbHVkaW5nQ29tcG9zaXRpbmcgOiBSZW5kZXJMYXllcjo6VXNl
RnJhZ21lbnRCb3hlc0V4Y2x1ZGluZ0NvbXBvc2l0aW5nKTsKICAgICBleHBhbmRDbGlwUmVjdEZv
ckRlc2NlbmRhbnRzQW5kUmVmbGVjdGlvbihjbGlwUmVjdCwgbGF5ZXIsIHJvb3RMYXllciwgdHJh
bnNwYXJlbmN5QmVoYXZpb3IsIHBhaW50QmVoYXZpb3IpOwogI2lmIEVOQUJMRShDU1NfRklMVEVS
UykKICAgICBsYXllci0+cmVuZGVyZXIoKS5zdHlsZSgpLmZpbHRlck91dHNldHMoKS5leHBhbmRS
ZWN0KGNsaXBSZWN0KTsKQEAgLTM1NzgsNyArMzU3OCw3IEBAIHN0YXRpYyB2b2lkIHBlcmZvcm1P
dmVybGFwVGVzdHMoT3ZlcmxhcFRlc3RSZXF1ZXN0TWFwJiBvdmVybGFwVGVzdFJlcXVlc3RzLCBj
b25zCiB7CiAgICAgVmVjdG9yPE92ZXJsYXBUZXN0UmVxdWVzdENsaWVudCo+IG92ZXJsYXBwZWRS
ZXF1ZXN0Q2xpZW50czsKICAgICBPdmVybGFwVGVzdFJlcXVlc3RNYXA6Oml0ZXJhdG9yIGVuZCA9
IG92ZXJsYXBUZXN0UmVxdWVzdHMuZW5kKCk7Ci0gICAgTGF5b3V0UmVjdCBib3VuZGluZ0JveCA9
IGxheWVyLT5ib3VuZGluZ0JveChyb290TGF5ZXIpOworICAgIExheW91dFJlY3QgYm91bmRpbmdC
b3ggPSBsYXllci0+Ym91bmRpbmdCb3gocm9vdExheWVyLCBsYXllci0+b2Zmc2V0RnJvbUFuY2Vz
dG9yKHJvb3RMYXllcikpOwogICAgIGZvciAoT3ZlcmxhcFRlc3RSZXF1ZXN0TWFwOjppdGVyYXRv
ciBpdCA9IG92ZXJsYXBUZXN0UmVxdWVzdHMuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7CiAg
ICAgICAgIGlmICghYm91bmRpbmdCb3guaW50ZXJzZWN0cyhpdC0+dmFsdWUpKQogICAgICAgICAg
ICAgY29udGludWU7CkBAIC0zNzk1LDcgKzM3OTUsNyBAQCBib29sIFJlbmRlckxheWVyOjpzZXR1
cENsaXBQYXRoKEdyYXBoaWNzQ29udGV4dCogY29udGV4dCwgY29uc3QgTGF5ZXJQYWludGluZ0lu
ZgogICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICBpZiAoIXJvb3RSZWxhdGl2ZUJvdW5kc0Nv
bXB1dGVkKSB7Ci0gICAgICAgIHJvb3RSZWxhdGl2ZUJvdW5kcyA9IGNhbGN1bGF0ZUxheWVyQm91
bmRzKHBhaW50aW5nSW5mby5yb290TGF5ZXIsICZvZmZzZXRGcm9tUm9vdCwgMCk7CisgICAgICAg
IHJvb3RSZWxhdGl2ZUJvdW5kcyA9IGNhbGN1bGF0ZUxheWVyQm91bmRzKHBhaW50aW5nSW5mby5y
b290TGF5ZXIsIG9mZnNldEZyb21Sb290LCAwKTsKICAgICAgICAgcm9vdFJlbGF0aXZlQm91bmRz
Q29tcHV0ZWQgPSB0cnVlOwogICAgIH0KIApAQCAtMzg1Nyw3ICszODU3LDcgQEAgc3RkOjp1bmlx
dWVfcHRyPEZpbHRlckVmZmVjdFJlbmRlcmVySGVscGVyPiBSZW5kZXJMYXllcjo6c2V0dXBGaWx0
ZXJzKEdyYXBoaWNzQ28KICAgICBmaWx0ZXJSZXBhaW50UmVjdC5tb3ZlKG9mZnNldEZyb21Sb290
KTsKIAogICAgIGlmICghcm9vdFJlbGF0aXZlQm91bmRzQ29tcHV0ZWQpIHsKLSAgICAgICAgcm9v
dFJlbGF0aXZlQm91bmRzID0gY2FsY3VsYXRlTGF5ZXJCb3VuZHMocGFpbnRpbmdJbmZvLnJvb3RM
YXllciwgJm9mZnNldEZyb21Sb290LCAwKTsKKyAgICAgICAgcm9vdFJlbGF0aXZlQm91bmRzID0g
Y2FsY3VsYXRlTGF5ZXJCb3VuZHMocGFpbnRpbmdJbmZvLnJvb3RMYXllciwgb2Zmc2V0RnJvbVJv
b3QsIDApOwogICAgICAgICByb290UmVsYXRpdmVCb3VuZHNDb21wdXRlZCA9IHRydWU7CiAgICAg
fQogCkBAIC00MDIyLDggKzQwMjIsOCBAQCB2b2lkIFJlbmRlckxheWVyOjpwYWludExheWVyQ29u
dGVudHMoR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0LCBjb25zdCBMYXllclBhaW50aQogICAgICAg
ICB9CiAgICAgICAgIGNvbGxlY3RGcmFnbWVudHMobGF5ZXJGcmFnbWVudHMsIGxvY2FsUGFpbnRp
bmdJbmZvLnJvb3RMYXllciwgcGFpbnREaXJ0eVJlY3QsIEV4Y2x1ZGVDb21wb3NpdGVkUGFnaW5h
dGVkTGF5ZXJzLAogICAgICAgICAgICAgKGxvY2FsUGFpbnRGbGFncyAmIFBhaW50TGF5ZXJUZW1w
b3JhcnlDbGlwUmVjdHMpID8gVGVtcG9yYXJ5Q2xpcFJlY3RzIDogUGFpbnRpbmdDbGlwUmVjdHMs
IElnbm9yZU92ZXJsYXlTY3JvbGxiYXJTaXplLAotICAgICAgICAgICAgKGlzUGFpbnRpbmdPdmVy
Zmxvd0NvbnRlbnRzKSA/IElnbm9yZU92ZXJmbG93Q2xpcCA6IFJlc3BlY3RPdmVyZmxvd0NsaXAs
ICZvZmZzZXRGcm9tUm9vdCk7Ci0gICAgICAgIHVwZGF0ZVBhaW50aW5nSW5mb0ZvckZyYWdtZW50
cyhsYXllckZyYWdtZW50cywgbG9jYWxQYWludGluZ0luZm8sIGxvY2FsUGFpbnRGbGFncywgc2hv
dWxkUGFpbnRDb250ZW50LCAmb2Zmc2V0RnJvbVJvb3QpOworICAgICAgICAgICAgKGlzUGFpbnRp
bmdPdmVyZmxvd0NvbnRlbnRzKSA/IElnbm9yZU92ZXJmbG93Q2xpcCA6IFJlc3BlY3RPdmVyZmxv
d0NsaXAsIG9mZnNldEZyb21Sb290KTsKKyAgICAgICAgdXBkYXRlUGFpbnRpbmdJbmZvRm9yRnJh
Z21lbnRzKGxheWVyRnJhZ21lbnRzLCBsb2NhbFBhaW50aW5nSW5mbywgbG9jYWxQYWludEZsYWdz
LCBzaG91bGRQYWludENvbnRlbnQsIG9mZnNldEZyb21Sb290KTsKICAgICB9CiAgICAgCiAgICAg
aWYgKGlzUGFpbnRpbmdDb21wb3NpdGVkQmFja2dyb3VuZCkgewpAQCAtNDE2NSw3ICs0MTY1LDcg
QEAgUmVuZGVyTGF5ZXIqIFJlbmRlckxheWVyOjplbmNsb3NpbmdQYWdpbmF0aW9uTGF5ZXJJblN1
YnRyZWUoY29uc3QgUmVuZGVyTGF5ZXIqIHIKIH0KIAogdm9pZCBSZW5kZXJMYXllcjo6Y29sbGVj
dEZyYWdtZW50cyhMYXllckZyYWdtZW50cyYgZnJhZ21lbnRzLCBjb25zdCBSZW5kZXJMYXllciog
cm9vdExheWVyLCBjb25zdCBMYXlvdXRSZWN0JiBkaXJ0eVJlY3QsIFBhZ2luYXRpb25JbmNsdXNp
b25Nb2RlIGluY2x1c2lvbk1vZGUsCi0gICAgQ2xpcFJlY3RzVHlwZSBjbGlwUmVjdHNUeXBlLCBP
dmVybGF5U2Nyb2xsYmFyU2l6ZVJlbGV2YW5jeSBpbk92ZXJsYXlTY3JvbGxiYXJTaXplUmVsZXZh
bmN5LCBTaG91bGRSZXNwZWN0T3ZlcmZsb3dDbGlwIHJlc3BlY3RPdmVyZmxvd0NsaXAsIGNvbnN0
IExheW91dFNpemUqIG9mZnNldEZyb21Sb290LAorICAgIENsaXBSZWN0c1R5cGUgY2xpcFJlY3Rz
VHlwZSwgT3ZlcmxheVNjcm9sbGJhclNpemVSZWxldmFuY3kgaW5PdmVybGF5U2Nyb2xsYmFyU2l6
ZVJlbGV2YW5jeSwgU2hvdWxkUmVzcGVjdE92ZXJmbG93Q2xpcCByZXNwZWN0T3ZlcmZsb3dDbGlw
LCBjb25zdCBMYXlvdXRTaXplJiBvZmZzZXRGcm9tUm9vdCwKICAgICBjb25zdCBMYXlvdXRSZWN0
KiBsYXllckJvdW5kaW5nQm94LCBTaG91bGRBcHBseVJvb3RPZmZzZXRUb0ZyYWdtZW50cyBhcHBs
eVJvb3RPZmZzZXRUb0ZyYWdtZW50cykKIHsKICAgICBSZW5kZXJMYXllciogcGFnaW5hdGlvbkxh
eWVyID0gZW5jbG9zaW5nUGFnaW5hdGlvbkxheWVySW5TdWJ0cmVlKHJvb3RMYXllciwgaW5jbHVz
aW9uTW9kZSk7CkBAIC00MTg5LDEwICs0MTg5LDEwIEBAIHZvaWQgUmVuZGVyTGF5ZXI6OmNvbGxl
Y3RGcmFnbWVudHMoTGF5ZXJGcmFnbWVudHMmIGZyYWdtZW50cywgY29uc3QgUmVuZGVyTGF5ZXIq
CiAgICAgQ2xpcFJlY3QgZm9yZWdyb3VuZFJlY3RJbkZsb3dUaHJlYWQ7CiAgICAgQ2xpcFJlY3Qg
b3V0bGluZVJlY3RJbkZsb3dUaHJlYWQ7CiAgICAgY2FsY3VsYXRlUmVjdHMocGFnaW5hdGlvbkNs
aXBSZWN0c0NvbnRleHQsIExheW91dFJlY3Q6OmluZmluaXRlUmVjdCgpLCBsYXllckJvdW5kc0lu
Rmxvd1RocmVhZCwgYmFja2dyb3VuZFJlY3RJbkZsb3dUaHJlYWQsIGZvcmVncm91bmRSZWN0SW5G
bG93VGhyZWFkLAotICAgICAgICBvdXRsaW5lUmVjdEluRmxvd1RocmVhZCwgJm9mZnNldFdpdGhp
blBhZ2luYXRlZExheWVyKTsKKyAgICAgICAgb3V0bGluZVJlY3RJbkZsb3dUaHJlYWQsIG9mZnNl
dFdpdGhpblBhZ2luYXRlZExheWVyKTsKICAgICAKICAgICAvLyBUYWtlIG91ciBib3VuZGluZyBi
b3ggd2l0aGluIHRoZSBmbG93IHRocmVhZCBhbmQgY2xpcCBpdC4KLSAgICBMYXlvdXRSZWN0IGxh
eWVyQm91bmRpbmdCb3hJbkZsb3dUaHJlYWQgPSBsYXllckJvdW5kaW5nQm94ID8gKmxheWVyQm91
bmRpbmdCb3ggOiBib3VuZGluZ0JveChwYWdpbmF0aW9uTGF5ZXIsIDAsICZvZmZzZXRXaXRoaW5Q
YWdpbmF0ZWRMYXllcik7CisgICAgTGF5b3V0UmVjdCBsYXllckJvdW5kaW5nQm94SW5GbG93VGhy
ZWFkID0gbGF5ZXJCb3VuZGluZ0JveCA/ICpsYXllckJvdW5kaW5nQm94IDogYm91bmRpbmdCb3go
cGFnaW5hdGlvbkxheWVyLCBvZmZzZXRXaXRoaW5QYWdpbmF0ZWRMYXllcik7CiAgICAgbGF5ZXJC
b3VuZGluZ0JveEluRmxvd1RocmVhZC5pbnRlcnNlY3QoYmFja2dyb3VuZFJlY3RJbkZsb3dUaHJl
YWQucmVjdCgpKTsKICAgICAKICAgICBSZW5kZXJGbG93VGhyZWFkJiBlbmNsb3NpbmdGbG93VGhy
ZWFkID0gdG9SZW5kZXJGbG93VGhyZWFkKHBhZ2luYXRpb25MYXllci0+cmVuZGVyZXIoKSk7CkBA
IC00MjA3LDcgKzQyMDcsOCBAQCB2b2lkIFJlbmRlckxheWVyOjpjb2xsZWN0RnJhZ21lbnRzKExh
eWVyRnJhZ21lbnRzJiBmcmFnbWVudHMsIGNvbnN0IFJlbmRlckxheWVyKgogICAgICAgICBsYXll
ckZyYWdtZW50Qm91bmRpbmdCb3hJblBhcmVudFBhZ2luYXRpb25MYXllci5tb3ZlKG9mZnNldFdp
dGhpblBhcmVudFBhZ2luYXRlZExheWVyKTsKICAgICAgICAgCiAgICAgICAgIC8vIE5vdyBjb2xs
ZWN0IGFuY2VzdG9yIGZyYWdtZW50cy4KLSAgICAgICAgcGFyZW50UGFnaW5hdGlvbkxheWVyLT5j
b2xsZWN0RnJhZ21lbnRzKGFuY2VzdG9yRnJhZ21lbnRzLCByb290TGF5ZXIsIGRpcnR5UmVjdCwg
aW5jbHVzaW9uTW9kZSwgY2xpcFJlY3RzVHlwZSwgaW5PdmVybGF5U2Nyb2xsYmFyU2l6ZVJlbGV2
YW5jeSwgcmVzcGVjdE92ZXJmbG93Q2xpcCwgbnVsbHB0ciwgJmxheWVyRnJhZ21lbnRCb3VuZGlu
Z0JveEluUGFyZW50UGFnaW5hdGlvbkxheWVyLCBBcHBseVJvb3RPZmZzZXRUb0ZyYWdtZW50cyk7
CisgICAgICAgIHBhcmVudFBhZ2luYXRpb25MYXllci0+Y29sbGVjdEZyYWdtZW50cyhhbmNlc3Rv
ckZyYWdtZW50cywgcm9vdExheWVyLCBkaXJ0eVJlY3QsIGluY2x1c2lvbk1vZGUsIGNsaXBSZWN0
c1R5cGUsIGluT3ZlcmxheVNjcm9sbGJhclNpemVSZWxldmFuY3ksIHJlc3BlY3RPdmVyZmxvd0Ns
aXAsCisgICAgICAgICAgICBvZmZzZXRGcm9tQW5jZXN0b3Iocm9vdExheWVyKSwgJmxheWVyRnJh
Z21lbnRCb3VuZGluZ0JveEluUGFyZW50UGFnaW5hdGlvbkxheWVyLCBBcHBseVJvb3RPZmZzZXRU
b0ZyYWdtZW50cyk7CiAgICAgICAgIAogICAgICAgICBpZiAoYW5jZXN0b3JGcmFnbWVudHMuaXNF
bXB0eSgpKQogICAgICAgICAgICAgcmV0dXJuOwpAQCAtNDI5NiwxNSArNDI5NywxNCBAQCB2b2lk
IFJlbmRlckxheWVyOjpjb2xsZWN0RnJhZ21lbnRzKExheWVyRnJhZ21lbnRzJiBmcmFnbWVudHMs
IGNvbnN0IFJlbmRlckxheWVyKgogfQogCiB2b2lkIFJlbmRlckxheWVyOjp1cGRhdGVQYWludGlu
Z0luZm9Gb3JGcmFnbWVudHMoTGF5ZXJGcmFnbWVudHMmIGZyYWdtZW50cywgY29uc3QgTGF5ZXJQ
YWludGluZ0luZm8mIGxvY2FsUGFpbnRpbmdJbmZvLCBQYWludExheWVyRmxhZ3MgbG9jYWxQYWlu
dEZsYWdzLAotICAgIGJvb2wgc2hvdWxkUGFpbnRDb250ZW50LCBjb25zdCBMYXlvdXRTaXplKiBv
ZmZzZXRGcm9tUm9vdCkKKyAgICBib29sIHNob3VsZFBhaW50Q29udGVudCwgY29uc3QgTGF5b3V0
U2l6ZSYgb2Zmc2V0RnJvbVJvb3QpCiB7Ci0gICAgQVNTRVJUKG9mZnNldEZyb21Sb290KTsKICAg
ICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGZyYWdtZW50cy5zaXplKCk7ICsraSkgewogICAgICAg
ICBMYXllckZyYWdtZW50JiBmcmFnbWVudCA9IGZyYWdtZW50cy5hdChpKTsKICAgICAgICAgZnJh
Z21lbnQuc2hvdWxkUGFpbnRDb250ZW50ID0gc2hvdWxkUGFpbnRDb250ZW50OwogICAgICAgICBp
ZiAodGhpcyAhPSBsb2NhbFBhaW50aW5nSW5mby5yb290TGF5ZXIgfHwgIShsb2NhbFBhaW50Rmxh
Z3MgJiBQYWludExheWVyUGFpbnRpbmdPdmVyZmxvd0NvbnRlbnRzKSkgewotICAgICAgICAgICAg
TGF5b3V0U2l6ZSBuZXdPZmZzZXRGcm9tUm9vdCA9ICpvZmZzZXRGcm9tUm9vdCArIGZyYWdtZW50
LnBhZ2luYXRpb25PZmZzZXQ7Ci0gICAgICAgICAgICBmcmFnbWVudC5zaG91bGRQYWludENvbnRl
bnQgJj0gaW50ZXJzZWN0c0RhbWFnZVJlY3QoZnJhZ21lbnQubGF5ZXJCb3VuZHMsIGZyYWdtZW50
LmJhY2tncm91bmRSZWN0LnJlY3QoKSwgbG9jYWxQYWludGluZ0luZm8ucm9vdExheWVyLCAmbmV3
T2Zmc2V0RnJvbVJvb3QsIGZyYWdtZW50Lmhhc0JvdW5kaW5nQm94ID8gJmZyYWdtZW50LmJvdW5k
aW5nQm94IDogMCk7CisgICAgICAgICAgICBMYXlvdXRTaXplIG5ld09mZnNldEZyb21Sb290ID0g
b2Zmc2V0RnJvbVJvb3QgKyBmcmFnbWVudC5wYWdpbmF0aW9uT2Zmc2V0OworICAgICAgICAgICAg
ZnJhZ21lbnQuc2hvdWxkUGFpbnRDb250ZW50ICY9IGludGVyc2VjdHNEYW1hZ2VSZWN0KGZyYWdt
ZW50LmxheWVyQm91bmRzLCBmcmFnbWVudC5iYWNrZ3JvdW5kUmVjdC5yZWN0KCksIGxvY2FsUGFp
bnRpbmdJbmZvLnJvb3RMYXllciwgbmV3T2Zmc2V0RnJvbVJvb3QsIGZyYWdtZW50Lmhhc0JvdW5k
aW5nQm94ID8gJmZyYWdtZW50LmJvdW5kaW5nQm94IDogMCk7CiAgICAgICAgIH0KICAgICB9CiB9
CkBAIC00MzE3LDcgKzQzMTcsNyBAQCB2b2lkIFJlbmRlckxheWVyOjpwYWludFRyYW5zZm9ybWVk
TGF5ZXJJbnRvRnJhZ21lbnRzKEdyYXBoaWNzQ29udGV4dCogY29udGV4dCwgYwogICAgIExheW91
dFJlY3QgdHJhbnNmb3JtZWRFeHRlbnQgPSB0cmFuc3BhcmVuY3lDbGlwQm94KHRoaXMsIHBhZ2lu
YXRlZExheWVyLCBQYWludGluZ1RyYW5zcGFyZW5jeUNsaXBCb3gsIFJvb3RPZlRyYW5zcGFyZW5j
eUNsaXBCb3gsIHBhaW50aW5nSW5mby5wYWludEJlaGF2aW9yKTsKICAgICBwYWdpbmF0ZWRMYXll
ci0+Y29sbGVjdEZyYWdtZW50cyhlbmNsb3NpbmdQYWdpbmF0aW9uRnJhZ21lbnRzLCBwYWludGlu
Z0luZm8ucm9vdExheWVyLCBwYWludGluZ0luZm8ucGFpbnREaXJ0eVJlY3QsIEV4Y2x1ZGVDb21w
b3NpdGVkUGFnaW5hdGVkTGF5ZXJzLAogICAgICAgICAocGFpbnRGbGFncyAmIFBhaW50TGF5ZXJU
ZW1wb3JhcnlDbGlwUmVjdHMpID8gVGVtcG9yYXJ5Q2xpcFJlY3RzIDogUGFpbnRpbmdDbGlwUmVj
dHMsIElnbm9yZU92ZXJsYXlTY3JvbGxiYXJTaXplLAotICAgICAgICAocGFpbnRGbGFncyAmIFBh
aW50TGF5ZXJQYWludGluZ092ZXJmbG93Q29udGVudHMpID8gSWdub3JlT3ZlcmZsb3dDbGlwIDog
UmVzcGVjdE92ZXJmbG93Q2xpcCwgJm9mZnNldE9mUGFnaW5hdGlvbkxheWVyRnJvbVJvb3QsICZ0
cmFuc2Zvcm1lZEV4dGVudCk7CisgICAgICAgIChwYWludEZsYWdzICYgUGFpbnRMYXllclBhaW50
aW5nT3ZlcmZsb3dDb250ZW50cykgPyBJZ25vcmVPdmVyZmxvd0NsaXAgOiBSZXNwZWN0T3ZlcmZs
b3dDbGlwLCBvZmZzZXRPZlBhZ2luYXRpb25MYXllckZyb21Sb290LCAmdHJhbnNmb3JtZWRFeHRl
bnQpOwogICAgIAogICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgZW5jbG9zaW5nUGFnaW5hdGlv
bkZyYWdtZW50cy5zaXplKCk7ICsraSkgewogICAgICAgICBjb25zdCBMYXllckZyYWdtZW50JiBm
cmFnbWVudCA9IGVuY2xvc2luZ1BhZ2luYXRpb25GcmFnbWVudHMuYXQoaSk7CkBAIC00ODA5LDcg
KzQ4MDksOCBAQCBSZW5kZXJMYXllciogUmVuZGVyTGF5ZXI6OmhpdFRlc3RMYXllcihSZW5kZXJM
YXllciogcm9vdExheWVyLCBSZW5kZXJMYXllciogY29udAogCiAgICAgLy8gQ29sbGVjdCB0aGUg
ZnJhZ21lbnRzLiBUaGlzIHdpbGwgY29tcHV0ZSB0aGUgY2xpcCByZWN0YW5nbGVzIGZvciBlYWNo
IGxheWVyIGZyYWdtZW50LgogICAgIExheWVyRnJhZ21lbnRzIGxheWVyRnJhZ21lbnRzOwotICAg
IGNvbGxlY3RGcmFnbWVudHMobGF5ZXJGcmFnbWVudHMsIHJvb3RMYXllciwgaGl0VGVzdFJlY3Qs
IEluY2x1ZGVDb21wb3NpdGVkUGFnaW5hdGVkTGF5ZXJzLCBSb290UmVsYXRpdmVDbGlwUmVjdHMs
IEluY2x1ZGVPdmVybGF5U2Nyb2xsYmFyU2l6ZSk7CisgICAgY29sbGVjdEZyYWdtZW50cyhsYXll
ckZyYWdtZW50cywgcm9vdExheWVyLCBoaXRUZXN0UmVjdCwgSW5jbHVkZUNvbXBvc2l0ZWRQYWdp
bmF0ZWRMYXllcnMsIFJvb3RSZWxhdGl2ZUNsaXBSZWN0cywgSW5jbHVkZU92ZXJsYXlTY3JvbGxi
YXJTaXplLCBSZXNwZWN0T3ZlcmZsb3dDbGlwLAorICAgICAgICBvZmZzZXRGcm9tQW5jZXN0b3Io
cm9vdExheWVyKSk7CiAKICAgICBpZiAoY2FuUmVzaXplKCkgJiYgaGl0VGVzdFJlc2l6ZXJJbkZy
YWdtZW50cyhsYXllckZyYWdtZW50cywgaGl0VGVzdExvY2F0aW9uKSkgewogICAgICAgICByZW5k
ZXJlcigpLnVwZGF0ZUhpdFRlc3RSZXN1bHQocmVzdWx0LCBoaXRUZXN0TG9jYXRpb24ucG9pbnQo
KSk7CkBAIC00OTE2LDcgKzQ5MTcsNyBAQCBSZW5kZXJMYXllciogUmVuZGVyTGF5ZXI6OmhpdFRl
c3RUcmFuc2Zvcm1lZExheWVySW5GcmFnbWVudHMoUmVuZGVyTGF5ZXIqIHJvb3RMYQogICAgIFJl
bmRlckxheWVyKiBwYWdpbmF0ZWRMYXllciA9IGVuY2xvc2luZ1BhZ2luYXRpb25MYXllcihJbmNs
dWRlQ29tcG9zaXRlZFBhZ2luYXRlZExheWVycyk7CiAgICAgTGF5b3V0UmVjdCB0cmFuc2Zvcm1l
ZEV4dGVudCA9IHRyYW5zcGFyZW5jeUNsaXBCb3godGhpcywgcGFnaW5hdGVkTGF5ZXIsIEhpdFRl
c3RpbmdUcmFuc3BhcmVuY3lDbGlwQm94LCBSb290T2ZUcmFuc3BhcmVuY3lDbGlwQm94KTsKICAg
ICBwYWdpbmF0ZWRMYXllci0+Y29sbGVjdEZyYWdtZW50cyhlbmNsb3NpbmdQYWdpbmF0aW9uRnJh
Z21lbnRzLCByb290TGF5ZXIsIGhpdFRlc3RSZWN0LCBJbmNsdWRlQ29tcG9zaXRlZFBhZ2luYXRl
ZExheWVycywKLSAgICAgICAgUm9vdFJlbGF0aXZlQ2xpcFJlY3RzLCBJbmNsdWRlT3ZlcmxheVNj
cm9sbGJhclNpemUsIFJlc3BlY3RPdmVyZmxvd0NsaXAsICZvZmZzZXRPZlBhZ2luYXRpb25MYXll
ckZyb21Sb290LCAmdHJhbnNmb3JtZWRFeHRlbnQpOworICAgICAgICBSb290UmVsYXRpdmVDbGlw
UmVjdHMsIEluY2x1ZGVPdmVybGF5U2Nyb2xsYmFyU2l6ZSwgUmVzcGVjdE92ZXJmbG93Q2xpcCwg
b2Zmc2V0T2ZQYWdpbmF0aW9uTGF5ZXJGcm9tUm9vdCwgJnRyYW5zZm9ybWVkRXh0ZW50KTsKIAog
ICAgIGZvciAoaW50IGkgPSBlbmNsb3NpbmdQYWdpbmF0aW9uRnJhZ21lbnRzLnNpemUoKSAtIDE7
IGkgPj0gMDsgLS1pKSB7CiAgICAgICAgIGNvbnN0IExheWVyRnJhZ21lbnQmIGZyYWdtZW50ID0g
ZW5jbG9zaW5nUGFnaW5hdGlvbkZyYWdtZW50cy5hdChpKTsKQEAgLTUyNTEsNyArNTI1Miw3IEBA
IENsaXBSZWN0IFJlbmRlckxheWVyOjpiYWNrZ3JvdW5kQ2xpcFJlY3QoY29uc3QgQ2xpcFJlY3Rz
Q29udGV4dCYgY2xpcFJlY3RzQ29udGV4CiB9CiAKIHZvaWQgUmVuZGVyTGF5ZXI6OmNhbGN1bGF0
ZVJlY3RzKGNvbnN0IENsaXBSZWN0c0NvbnRleHQmIGNsaXBSZWN0c0NvbnRleHQsIGNvbnN0IExh
eW91dFJlY3QmIHBhaW50RGlydHlSZWN0LCBMYXlvdXRSZWN0JiBsYXllckJvdW5kcywKLSAgICBD
bGlwUmVjdCYgYmFja2dyb3VuZFJlY3QsIENsaXBSZWN0JiBmb3JlZ3JvdW5kUmVjdCwgQ2xpcFJl
Y3QmIG91dGxpbmVSZWN0LCBjb25zdCBMYXlvdXRTaXplKiBvZmZzZXRGcm9tUm9vdCkgY29uc3QK
KyAgICBDbGlwUmVjdCYgYmFja2dyb3VuZFJlY3QsIENsaXBSZWN0JiBmb3JlZ3JvdW5kUmVjdCwg
Q2xpcFJlY3QmIG91dGxpbmVSZWN0LCBjb25zdCBMYXlvdXRTaXplJiBvZmZzZXRGcm9tUm9vdCkg
Y29uc3QKIHsKICAgICBpZiAoY2xpcFJlY3RzQ29udGV4dC5yb290TGF5ZXIgIT0gdGhpcyAmJiBw
YXJlbnQoKSkgewogICAgICAgICBiYWNrZ3JvdW5kUmVjdCA9IGJhY2tncm91bmRDbGlwUmVjdChj
bGlwUmVjdHNDb250ZXh0KTsKQEAgLTUyNTksMjEgKzUyNjAsMTYgQEAgdm9pZCBSZW5kZXJMYXll
cjo6Y2FsY3VsYXRlUmVjdHMoY29uc3QgQ2xpcFJlY3RzQ29udGV4dCYgY2xpcFJlY3RzQ29udGV4
dCwgY29uc3QKICAgICB9IGVsc2UKICAgICAgICAgYmFja2dyb3VuZFJlY3QgPSBwYWludERpcnR5
UmVjdDsKIAotICAgIExheW91dFNpemUgb2Zmc2V0RnJvbUFjZXN0b3I7Ci0gICAgaWYgKG9mZnNl
dEZyb21Sb290KQotICAgICAgICBvZmZzZXRGcm9tQWNlc3RvciA9ICpvZmZzZXRGcm9tUm9vdDsK
LSAgICBlbHNlCi0gICAgICAgIG9mZnNldEZyb21BY2VzdG9yID0gb2Zmc2V0RnJvbUFuY2VzdG9y
KGNsaXBSZWN0c0NvbnRleHQucm9vdExheWVyKTsKLQorICAgIExheW91dFNpemUgb2Zmc2V0RnJv
bVJvb3RMb2NhbCA9IG9mZnNldEZyb21Sb290OwogICAgIFJlbmRlck5hbWVkRmxvd0ZyYWdtZW50
KiBuYW1lZEZsb3dGcmFnbWVudCA9IGN1cnJlbnRSZW5kZXJOYW1lZEZsb3dGcmFnbWVudCgpOwog
ICAgIC8vIElmIHRoZSB2aWV3IGlzIHNjcm9sbGVkLCB0aGUgZmxvdyB0aHJlYWQgaXMgbm90IHNj
cm9sbGVkIHdpdGggaXQgYW5kIHdlIHNob3VsZAogICAgIC8vIHRha2UgdGhlIHNjcm9sbCBvZmZz
ZXQgaW50byBhY2NvdW50LgogICAgIGlmIChjbGlwUmVjdHNDb250ZXh0LnJvb3RMYXllci0+aXNP
dXRPZkZsb3dSZW5kZXJGbG93VGhyZWFkKCkgJiYgIW5hbWVkRmxvd0ZyYWdtZW50KSB7CiAgICAg
ICAgIExheW91dFBvaW50IGFic1BvcyA9IExheW91dFBvaW50KHJlbmRlcmVyKCkudmlldygpLmxv
Y2FsVG9BYnNvbHV0ZShGbG9hdFBvaW50KCksIElzRml4ZWQpKTsKLSAgICAgICAgb2Zmc2V0RnJv
bUFjZXN0b3IgKz0gdG9MYXlvdXRTaXplKGFic1Bvcyk7CisgICAgICAgIG9mZnNldEZyb21Sb290
TG9jYWwgKz0gdG9MYXlvdXRTaXplKGFic1Bvcyk7CiAgICAgfQogCi0gICAgbGF5ZXJCb3VuZHMg
PSBMYXlvdXRSZWN0KHRvTGF5b3V0UG9pbnQob2Zmc2V0RnJvbUFjZXN0b3IpLCBzaXplKCkpOwor
ICAgIGxheWVyQm91bmRzID0gTGF5b3V0UmVjdCh0b0xheW91dFBvaW50KG9mZnNldEZyb21Sb290
TG9jYWwpLCBzaXplKCkpOwogCiAgICAgZm9yZWdyb3VuZFJlY3QgPSBiYWNrZ3JvdW5kUmVjdDsK
ICAgICBvdXRsaW5lUmVjdCA9IGJhY2tncm91bmRSZWN0OwpAQCAtNTI5Niw3ICs1MjkyLDcgQEAg
dm9pZCBSZW5kZXJMYXllcjo6Y2FsY3VsYXRlUmVjdHMoY29uc3QgQ2xpcFJlY3RzQ29udGV4dCYg
Y2xpcFJlY3RzQ29udGV4dCwgY29uc3QKICAgICAgICAgICAgICAgICByZW5kZXJlckNvbnRhaW5p
bmdCbG9jay0+ZmxpcEZvcldyaXRpbmdNb2RlKGxheWVyQm91bmRzV2l0aFZpc3VhbE92ZXJmbG93
KTsKICAgICAgICAgfQogCi0gICAgICAgIGxheWVyQm91bmRzV2l0aFZpc3VhbE92ZXJmbG93Lm1v
dmUob2Zmc2V0RnJvbUFjZXN0b3IpOworICAgICAgICBsYXllckJvdW5kc1dpdGhWaXN1YWxPdmVy
Zmxvdy5tb3ZlKG9mZnNldEZyb21Sb290TG9jYWwpOwogICAgICAgICBiYWNrZ3JvdW5kUmVjdC5p
bnRlcnNlY3QobGF5ZXJCb3VuZHNXaXRoVmlzdWFsT3ZlcmZsb3cpOwogCiAgICAgICAgIGZvcmVn
cm91bmRSZWN0ID0gYmFja2dyb3VuZFJlY3Q7CkBAIC01MzEzLDE0ICs1MzA5LDE0IEBAIHZvaWQg
UmVuZGVyTGF5ZXI6OmNhbGN1bGF0ZVJlY3RzKGNvbnN0IENsaXBSZWN0c0NvbnRleHQmIGNsaXBS
ZWN0c0NvbnRleHQsIGNvbnN0CiAgICAgaWYgKHJlbmRlcmVyKCkuaGFzQ2xpcE9yT3ZlcmZsb3dD
bGlwKCkpIHsKICAgICAgICAgLy8gVGhpcyBsYXllciBlc3RhYmxpc2hlcyBhIGNsaXAgb2Ygc29t
ZSBraW5kLgogICAgICAgICBpZiAocmVuZGVyZXIoKS5oYXNPdmVyZmxvd0NsaXAoKSAmJiAodGhp
cyAhPSBjbGlwUmVjdHNDb250ZXh0LnJvb3RMYXllciB8fCBjbGlwUmVjdHNDb250ZXh0LnJlc3Bl
Y3RPdmVyZmxvd0NsaXAgPT0gUmVzcGVjdE92ZXJmbG93Q2xpcCkpIHsKLSAgICAgICAgICAgIGZv
cmVncm91bmRSZWN0LmludGVyc2VjdCh0b1JlbmRlckJveChyZW5kZXJlcigpKS5vdmVyZmxvd0Ns
aXBSZWN0KHRvTGF5b3V0UG9pbnQob2Zmc2V0RnJvbUFjZXN0b3IpLCBuYW1lZEZsb3dGcmFnbWVu
dCwgY2xpcFJlY3RzQ29udGV4dC5vdmVybGF5U2Nyb2xsYmFyU2l6ZVJlbGV2YW5jeSkpOworICAg
ICAgICAgICAgZm9yZWdyb3VuZFJlY3QuaW50ZXJzZWN0KHRvUmVuZGVyQm94KHJlbmRlcmVyKCkp
Lm92ZXJmbG93Q2xpcFJlY3QodG9MYXlvdXRQb2ludChvZmZzZXRGcm9tUm9vdExvY2FsKSwgbmFt
ZWRGbG93RnJhZ21lbnQsIGNsaXBSZWN0c0NvbnRleHQub3ZlcmxheVNjcm9sbGJhclNpemVSZWxl
dmFuY3kpKTsKICAgICAgICAgICAgIGlmIChyZW5kZXJlcigpLnN0eWxlKCkuaGFzQm9yZGVyUmFk
aXVzKCkpCiAgICAgICAgICAgICAgICAgZm9yZWdyb3VuZFJlY3Quc2V0SGFzUmFkaXVzKHRydWUp
OwogICAgICAgICB9CiAKICAgICAgICAgaWYgKHJlbmRlcmVyKCkuaGFzQ2xpcCgpKSB7CiAgICAg
ICAgICAgICAvLyBDbGlwIGFwcGxpZXMgdG8gKnVzKiBhcyB3ZWxsLCBzbyBnbyBhaGVhZCBhbmQg
dXBkYXRlIHRoZSBkYW1hZ2VSZWN0LgotICAgICAgICAgICAgTGF5b3V0UmVjdCBuZXdQb3NDbGlw
ID0gdG9SZW5kZXJCb3gocmVuZGVyZXIoKSkuY2xpcFJlY3QodG9MYXlvdXRQb2ludChvZmZzZXRG
cm9tQWNlc3RvciksIG5hbWVkRmxvd0ZyYWdtZW50KTsKKyAgICAgICAgICAgIExheW91dFJlY3Qg
bmV3UG9zQ2xpcCA9IHRvUmVuZGVyQm94KHJlbmRlcmVyKCkpLmNsaXBSZWN0KHRvTGF5b3V0UG9p
bnQob2Zmc2V0RnJvbVJvb3RMb2NhbCksIG5hbWVkRmxvd0ZyYWdtZW50KTsKICAgICAgICAgICAg
IGJhY2tncm91bmRSZWN0LmludGVyc2VjdChuZXdQb3NDbGlwKTsKICAgICAgICAgICAgIGZvcmVn
cm91bmRSZWN0LmludGVyc2VjdChuZXdQb3NDbGlwKTsKICAgICAgICAgICAgIG91dGxpbmVSZWN0
LmludGVyc2VjdChuZXdQb3NDbGlwKTsKQEAgLTUzMzQsNyArNTMzMCw3IEBAIHZvaWQgUmVuZGVy
TGF5ZXI6OmNhbGN1bGF0ZVJlY3RzKGNvbnN0IENsaXBSZWN0c0NvbnRleHQmIGNsaXBSZWN0c0Nv
bnRleHQsIGNvbnN0CiAgICAgICAgICAgICAvLyBpbmRpdmlkdWFsIHJlZ2lvbiBib3hlcyBhcyBv
dmVyZmxvdy4KICAgICAgICAgICAgIExheW91dFJlY3QgbGF5ZXJCb3VuZHNXaXRoVmlzdWFsT3Zl
cmZsb3cgPSBuYW1lZEZsb3dGcmFnbWVudCA/IG5hbWVkRmxvd0ZyYWdtZW50LT52aXN1YWxPdmVy
Zmxvd1JlY3RGb3JCb3gocmVuZGVyQm94KCkpIDogcmVuZGVyQm94KCktPnZpc3VhbE92ZXJmbG93
UmVjdCgpOwogICAgICAgICAgICAgcmVuZGVyQm94KCktPmZsaXBGb3JXcml0aW5nTW9kZShsYXll
ckJvdW5kc1dpdGhWaXN1YWxPdmVyZmxvdyk7IC8vIExheWVycyBhcmUgaW4gcGh5c2ljYWwgY29v
cmRpbmF0ZXMsIHNvIHRoZSBvdmVyZmxvdyBoYXMgdG8gYmUgZmxpcHBlZC4KLSAgICAgICAgICAg
IGxheWVyQm91bmRzV2l0aFZpc3VhbE92ZXJmbG93Lm1vdmUob2Zmc2V0RnJvbUFjZXN0b3IpOwor
ICAgICAgICAgICAgbGF5ZXJCb3VuZHNXaXRoVmlzdWFsT3ZlcmZsb3cubW92ZShvZmZzZXRGcm9t
Um9vdExvY2FsKTsKICAgICAgICAgICAgIGlmICh0aGlzICE9IGNsaXBSZWN0c0NvbnRleHQucm9v
dExheWVyIHx8IGNsaXBSZWN0c0NvbnRleHQucmVzcGVjdE92ZXJmbG93Q2xpcCA9PSBSZXNwZWN0
T3ZlcmZsb3dDbGlwKQogICAgICAgICAgICAgICAgIGJhY2tncm91bmRSZWN0LmludGVyc2VjdChs
YXllckJvdW5kc1dpdGhWaXN1YWxPdmVyZmxvdyk7CiAgICAgICAgIH0gZWxzZSB7CkBAIC01MzQz
LDcgKzUzMzksNyBAQCB2b2lkIFJlbmRlckxheWVyOjpjYWxjdWxhdGVSZWN0cyhjb25zdCBDbGlw
UmVjdHNDb250ZXh0JiBjbGlwUmVjdHNDb250ZXh0LCBjb25zdAogICAgICAgICAgICAgaWYgKG5h
bWVkRmxvd0ZyYWdtZW50KQogICAgICAgICAgICAgICAgIGJvdW5kcyA9IG5hbWVkRmxvd0ZyYWdt
ZW50LT5yZWN0Rmxvd1BvcnRpb25Gb3JCb3gocmVuZGVyQm94KCksIGJvdW5kcyk7CiAKLSAgICAg
ICAgICAgIGJvdW5kcy5tb3ZlKG9mZnNldEZyb21BY2VzdG9yKTsKKyAgICAgICAgICAgIGJvdW5k
cy5tb3ZlKG9mZnNldEZyb21Sb290TG9jYWwpOwogICAgICAgICAgICAgaWYgKHRoaXMgIT0gY2xp
cFJlY3RzQ29udGV4dC5yb290TGF5ZXIgfHwgY2xpcFJlY3RzQ29udGV4dC5yZXNwZWN0T3ZlcmZs
b3dDbGlwID09IFJlc3BlY3RPdmVyZmxvd0NsaXApCiAgICAgICAgICAgICAgICAgYmFja2dyb3Vu
ZFJlY3QuaW50ZXJzZWN0KGJvdW5kcyk7CiAgICAgICAgICAgICAKQEAgLTUzNzEsNyArNTM2Nyw3
IEBAIExheW91dFJlY3QgUmVuZGVyTGF5ZXI6OmNoaWxkcmVuQ2xpcFJlY3QoKSBjb25zdAogICAg
IENsaXBSZWN0IGJhY2tncm91bmRSZWN0LCBmb3JlZ3JvdW5kUmVjdCwgb3V0bGluZVJlY3Q7CiAg
ICAgQ2xpcFJlY3RzQ29udGV4dCBjbGlwUmVjdHNDb250ZXh0KGNsaXBwaW5nUm9vdExheWVyLCBU
ZW1wb3JhcnlDbGlwUmVjdHMpOwogICAgIC8vIE5lZWQgdG8gdXNlIHRlbXBvcmFyeSBjbGlwIHJl
Y3RzLCBiZWNhdXNlIHRoZSB2YWx1ZSBvZiAnZG9udENsaXBUb092ZXJmbG93JyBtYXkgYmUgZGlm
ZmVyZW50IGZyb20gdGhlIHBhaW50aW5nIHBhdGggKDxyZGFyOi8vcHJvYmxlbS8xMTg0NDkwOT4p
LgotICAgIGNhbGN1bGF0ZVJlY3RzKGNsaXBSZWN0c0NvbnRleHQsIHJlbmRlcmVyKCkudmlldygp
LnVuc2NhbGVkRG9jdW1lbnRSZWN0KCksIGxheWVyQm91bmRzLCBiYWNrZ3JvdW5kUmVjdCwgZm9y
ZWdyb3VuZFJlY3QsIG91dGxpbmVSZWN0KTsKKyAgICBjYWxjdWxhdGVSZWN0cyhjbGlwUmVjdHND
b250ZXh0LCByZW5kZXJlcigpLnZpZXcoKS51bnNjYWxlZERvY3VtZW50UmVjdCgpLCBsYXllckJv
dW5kcywgYmFja2dyb3VuZFJlY3QsIGZvcmVncm91bmRSZWN0LCBvdXRsaW5lUmVjdCwgb2Zmc2V0
RnJvbUFuY2VzdG9yKGNsaXBSZWN0c0NvbnRleHQucm9vdExheWVyKSk7CiAgICAgcmV0dXJuIGNs
aXBwaW5nUm9vdExheWVyLT5yZW5kZXJlcigpLmxvY2FsVG9BYnNvbHV0ZVF1YWQoRmxvYXRRdWFk
KGZvcmVncm91bmRSZWN0LnJlY3QoKSkpLmVuY2xvc2luZ0JvdW5kaW5nQm94KCk7CiB9CiAKQEAg
LTUzODMsNyArNTM3OSw3IEBAIExheW91dFJlY3QgUmVuZGVyTGF5ZXI6OnNlbGZDbGlwUmVjdCgp
IGNvbnN0CiAgICAgTGF5b3V0UmVjdCBsYXllckJvdW5kczsKICAgICBDbGlwUmVjdCBiYWNrZ3Jv
dW5kUmVjdCwgZm9yZWdyb3VuZFJlY3QsIG91dGxpbmVSZWN0OwogICAgIENsaXBSZWN0c0NvbnRl
eHQgY2xpcFJlY3RzQ29udGV4dChjbGlwcGluZ1Jvb3RMYXllciwgUGFpbnRpbmdDbGlwUmVjdHMp
OwotICAgIGNhbGN1bGF0ZVJlY3RzKGNsaXBSZWN0c0NvbnRleHQsIHJlbmRlcmVyKCkudmlldygp
LmRvY3VtZW50UmVjdCgpLCBsYXllckJvdW5kcywgYmFja2dyb3VuZFJlY3QsIGZvcmVncm91bmRS
ZWN0LCBvdXRsaW5lUmVjdCk7CisgICAgY2FsY3VsYXRlUmVjdHMoY2xpcFJlY3RzQ29udGV4dCwg
cmVuZGVyZXIoKS52aWV3KCkuZG9jdW1lbnRSZWN0KCksIGxheWVyQm91bmRzLCBiYWNrZ3JvdW5k
UmVjdCwgZm9yZWdyb3VuZFJlY3QsIG91dGxpbmVSZWN0LCBvZmZzZXRGcm9tQW5jZXN0b3IoY2xp
cFJlY3RzQ29udGV4dC5yb290TGF5ZXIpKTsKICAgICByZXR1cm4gY2xpcHBpbmdSb290TGF5ZXIt
PnJlbmRlcmVyKCkubG9jYWxUb0Fic29sdXRlUXVhZChGbG9hdFF1YWQoYmFja2dyb3VuZFJlY3Qu
cmVjdCgpKSkuZW5jbG9zaW5nQm91bmRpbmdCb3goKTsKIH0KIApAQCAtNTM5OSw3ICs1Mzk1LDcg
QEAgTGF5b3V0UmVjdCBSZW5kZXJMYXllcjo6bG9jYWxDbGlwUmVjdChib29sJiBjbGlwRXhjZWVk
c0JvdW5kcykgY29uc3QKICAgICBMYXlvdXRSZWN0IGxheWVyQm91bmRzOwogICAgIENsaXBSZWN0
IGJhY2tncm91bmRSZWN0LCBmb3JlZ3JvdW5kUmVjdCwgb3V0bGluZVJlY3Q7CiAgICAgQ2xpcFJl
Y3RzQ29udGV4dCBjbGlwUmVjdHNDb250ZXh0KGNsaXBwaW5nUm9vdExheWVyLCBQYWludGluZ0Ns
aXBSZWN0cyk7Ci0gICAgY2FsY3VsYXRlUmVjdHMoY2xpcFJlY3RzQ29udGV4dCwgTGF5b3V0UmVj
dDo6aW5maW5pdGVSZWN0KCksIGxheWVyQm91bmRzLCBiYWNrZ3JvdW5kUmVjdCwgZm9yZWdyb3Vu
ZFJlY3QsIG91dGxpbmVSZWN0LCAmb2Zmc2V0RnJvbVJvb3QpOworICAgIGNhbGN1bGF0ZVJlY3Rz
KGNsaXBSZWN0c0NvbnRleHQsIExheW91dFJlY3Q6OmluZmluaXRlUmVjdCgpLCBsYXllckJvdW5k
cywgYmFja2dyb3VuZFJlY3QsIGZvcmVncm91bmRSZWN0LCBvdXRsaW5lUmVjdCwgb2Zmc2V0RnJv
bVJvb3QpOwogCiAgICAgTGF5b3V0UmVjdCBjbGlwUmVjdCA9IGJhY2tncm91bmRSZWN0LnJlY3Qo
KTsKICAgICBpZiAoY2xpcFJlY3QgPT0gTGF5b3V0UmVjdDo6aW5maW5pdGVSZWN0KCkpCkBAIC01
NDQ1LDcgKzU0NDEsNyBAQCB2b2lkIFJlbmRlckxheWVyOjpyZXBhaW50QmxvY2tTZWxlY3Rpb25H
YXBzKCkKICAgICAgICAgcmVuZGVyZXIoKS5yZXBhaW50UmVjdGFuZ2xlKHJlY3QpOwogfQogCi1i
b29sIFJlbmRlckxheWVyOjppbnRlcnNlY3RzRGFtYWdlUmVjdChjb25zdCBMYXlvdXRSZWN0JiBs
YXllckJvdW5kcywgY29uc3QgTGF5b3V0UmVjdCYgZGFtYWdlUmVjdCwgY29uc3QgUmVuZGVyTGF5
ZXIqIHJvb3RMYXllciwgY29uc3QgTGF5b3V0U2l6ZSogb2Zmc2V0RnJvbVJvb3QsIGNvbnN0IExh
eW91dFJlY3QqIGNhY2hlZEJvdW5kaW5nQm94KSBjb25zdAorYm9vbCBSZW5kZXJMYXllcjo6aW50
ZXJzZWN0c0RhbWFnZVJlY3QoY29uc3QgTGF5b3V0UmVjdCYgbGF5ZXJCb3VuZHMsIGNvbnN0IExh
eW91dFJlY3QmIGRhbWFnZVJlY3QsIGNvbnN0IFJlbmRlckxheWVyKiByb290TGF5ZXIsIGNvbnN0
IExheW91dFNpemUmIG9mZnNldEZyb21Sb290LCBjb25zdCBMYXlvdXRSZWN0KiBjYWNoZWRCb3Vu
ZGluZ0JveCkgY29uc3QKIHsKICAgICAvLyBBbHdheXMgZXhhbWluZSB0aGUgY2FudmFzIGFuZCB0
aGUgcm9vdC4KICAgICAvLyBGSVhNRTogQ291bGQgZWxpbWluYXRlIHRoZSBpc1Jvb3QoKSBjaGVj
ayBpZiB3ZSBmaXggYmFja2dyb3VuZCBwYWludGluZyBzbyB0aGF0IHRoZSBSZW5kZXJWaWV3CkBA
IC01NDgxLDcgKzU0NzcsNyBAQCBib29sIFJlbmRlckxheWVyOjppbnRlcnNlY3RzRGFtYWdlUmVj
dChjb25zdCBMYXlvdXRSZWN0JiBsYXllckJvdW5kcywgY29uc3QgTGF5bwogICAgIGlmIChjYWNo
ZWRCb3VuZGluZ0JveCkKICAgICAgICAgcmV0dXJuIGNhY2hlZEJvdW5kaW5nQm94LT5pbnRlcnNl
Y3RzKGRhbWFnZVJlY3QpOwogICAgIAotICAgIHJldHVybiBib3VuZGluZ0JveChyb290TGF5ZXIs
IDAsIG9mZnNldEZyb21Sb290KS5pbnRlcnNlY3RzKGRhbWFnZVJlY3QpOworICAgIHJldHVybiBi
b3VuZGluZ0JveChyb290TGF5ZXIsIG9mZnNldEZyb21Sb290KS5pbnRlcnNlY3RzKGRhbWFnZVJl
Y3QpOwogfQogCiBMYXlvdXRSZWN0IFJlbmRlckxheWVyOjpsb2NhbEJvdW5kaW5nQm94KENhbGN1
bGF0ZUxheWVyQm91bmRzRmxhZ3MgZmxhZ3MpIGNvbnN0CkBAIC01NTI3LDcgKzU1MjMsNyBAQCBM
YXlvdXRSZWN0IFJlbmRlckxheWVyOjpsb2NhbEJvdW5kaW5nQm94KENhbGN1bGF0ZUxheWVyQm91
bmRzRmxhZ3MgZmxhZ3MpIGNvbnN0CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAotTGF5b3V0UmVj
dCBSZW5kZXJMYXllcjo6Ym91bmRpbmdCb3goY29uc3QgUmVuZGVyTGF5ZXIqIGFuY2VzdG9yTGF5
ZXIsIENhbGN1bGF0ZUxheWVyQm91bmRzRmxhZ3MgZmxhZ3MsIGNvbnN0IExheW91dFNpemUqIG9m
ZnNldEZyb21Sb290KSBjb25zdAorTGF5b3V0UmVjdCBSZW5kZXJMYXllcjo6Ym91bmRpbmdCb3go
Y29uc3QgUmVuZGVyTGF5ZXIqIGFuY2VzdG9yTGF5ZXIsIGNvbnN0IExheW91dFNpemUmIG9mZnNl
dEZyb21Sb290LCBDYWxjdWxhdGVMYXllckJvdW5kc0ZsYWdzIGZsYWdzKSBjb25zdAogeyAgICAK
ICAgICBMYXlvdXRSZWN0IHJlc3VsdCA9IGxvY2FsQm91bmRpbmdCb3goZmxhZ3MpOwogICAgIGlm
IChyZW5kZXJlcigpLmlzQm94KCkpCkBAIC01NTYxLDI3ICs1NTU3LDIzIEBAIExheW91dFJlY3Qg
UmVuZGVyTGF5ZXI6OmJvdW5kaW5nQm94KGNvbnN0IFJlbmRlckxheWVyKiBhbmNlc3RvckxheWVy
LCBDYWxjdWxhdGVMCiAgICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgfQogICAgIAotICAgIExh
eW91dFNpemUgZGVsdGE7Ci0gICAgaWYgKG9mZnNldEZyb21Sb290KQotICAgICAgICBkZWx0YSA9
ICpvZmZzZXRGcm9tUm9vdDsKLSAgICBlbHNlCi0gICAgICAgIGRlbHRhID0gb2Zmc2V0RnJvbUFu
Y2VzdG9yKGFuY2VzdG9yTGF5ZXIpOwotICAgIAotICAgIHJlc3VsdC5tb3ZlKGRlbHRhKTsKKyAg
ICByZXN1bHQubW92ZShvZmZzZXRGcm9tUm9vdCk7CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAog
SW50UmVjdCBSZW5kZXJMYXllcjo6YWJzb2x1dGVCb3VuZGluZ0JveCgpIGNvbnN0CiB7Ci0gICAg
cmV0dXJuIHBpeGVsU25hcHBlZEludFJlY3QoYm91bmRpbmdCb3gocm9vdCgpKSk7CisgICAgY29u
c3QgUmVuZGVyTGF5ZXIqIHJvb3RMYXllciA9IHJvb3QoKTsKKyAgICByZXR1cm4gcGl4ZWxTbmFw
cGVkSW50UmVjdChib3VuZGluZ0JveChyb290TGF5ZXIsIG9mZnNldEZyb21BbmNlc3Rvcihyb290
TGF5ZXIpKSk7CiB9CiAKIEZsb2F0UmVjdCBSZW5kZXJMYXllcjo6YWJzb2x1dGVCb3VuZGluZ0Jv
eEZvclBhaW50aW5nKCkgY29uc3QKIHsKLSAgICByZXR1cm4gcGl4ZWxTbmFwcGVkRm9yUGFpbnRp
bmcoYm91bmRpbmdCb3gocm9vdCgpKSwgcmVuZGVyZXIoKS5kb2N1bWVudCgpLmRldmljZVNjYWxl
RmFjdG9yKCkpOworICAgIGNvbnN0IFJlbmRlckxheWVyKiByb290TGF5ZXIgPSByb290KCk7Cisg
ICAgcmV0dXJuIHBpeGVsU25hcHBlZEZvclBhaW50aW5nKGJvdW5kaW5nQm94KHJvb3RMYXllciwg
b2Zmc2V0RnJvbUFuY2VzdG9yKHJvb3RMYXllcikpLCByZW5kZXJlcigpLmRvY3VtZW50KCkuZGV2
aWNlU2NhbGVGYWN0b3IoKSk7CiB9CiAKLUxheW91dFJlY3QgUmVuZGVyTGF5ZXI6OmNhbGN1bGF0
ZUxheWVyQm91bmRzKGNvbnN0IFJlbmRlckxheWVyKiBhbmNlc3RvckxheWVyLCBjb25zdCBMYXlv
dXRTaXplKiBvZmZzZXRGcm9tUm9vdCwgQ2FsY3VsYXRlTGF5ZXJCb3VuZHNGbGFncyBmbGFncykg
Y29uc3QKK0xheW91dFJlY3QgUmVuZGVyTGF5ZXI6OmNhbGN1bGF0ZUxheWVyQm91bmRzKGNvbnN0
IFJlbmRlckxheWVyKiBhbmNlc3RvckxheWVyLCBjb25zdCBMYXlvdXRTaXplJiBvZmZzZXRGcm9t
Um9vdCwgQ2FsY3VsYXRlTGF5ZXJCb3VuZHNGbGFncyBmbGFncykgY29uc3QKIHsKICAgICBpZiAo
IWlzU2VsZlBhaW50aW5nTGF5ZXIoKSkKICAgICAgICAgcmV0dXJuIExheW91dFJlY3QoKTsKQEAg
LTU2MzIsNyArNTYyNCw3IEBAIExheW91dFJlY3QgUmVuZGVyTGF5ZXI6OmNhbGN1bGF0ZUxheWVy
Qm91bmRzKGNvbnN0IFJlbmRlckxheWVyKiBhbmNlc3RvckxheWVyLCBjCiAKICAgICBpZiAoUmVu
ZGVyTGF5ZXIqIHJlZmxlY3Rpb24gPSByZWZsZWN0aW9uTGF5ZXIoKSkgewogICAgICAgICBpZiAo
IXJlZmxlY3Rpb24tPmlzQ29tcG9zaXRlZCgpKSB7Ci0gICAgICAgICAgICBMYXlvdXRSZWN0IGNo
aWxkVW5pb25Cb3VuZHMgPSByZWZsZWN0aW9uLT5jYWxjdWxhdGVMYXllckJvdW5kcyh0aGlzLCBu
dWxscHRyLCBkZXNjZW5kYW50RmxhZ3MpOworICAgICAgICAgICAgTGF5b3V0UmVjdCBjaGlsZFVu
aW9uQm91bmRzID0gcmVmbGVjdGlvbi0+Y2FsY3VsYXRlTGF5ZXJCb3VuZHModGhpcywgcmVmbGVj
dGlvbi0+b2Zmc2V0RnJvbUFuY2VzdG9yKHRoaXMpLCBkZXNjZW5kYW50RmxhZ3MpOwogICAgICAg
ICAgICAgdW5pb25Cb3VuZHMudW5pdGUoY2hpbGRVbmlvbkJvdW5kcyk7CiAgICAgICAgIH0KICAg
ICB9CkBAIC01NjQ4LDcgKzU2NDAsNyBAQCBMYXlvdXRSZWN0IFJlbmRlckxheWVyOjpjYWxjdWxh
dGVMYXllckJvdW5kcyhjb25zdCBSZW5kZXJMYXllciogYW5jZXN0b3JMYXllciwgYwogICAgICAg
ICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGxpc3RTaXplOyArK2kpIHsKICAgICAgICAgICAgIFJl
bmRlckxheWVyKiBjdXJMYXllciA9IG5lZ1pPcmRlckxpc3QtPmF0KGkpOwogICAgICAgICAgICAg
aWYgKGZsYWdzICYgSW5jbHVkZUNvbXBvc2l0ZWREZXNjZW5kYW50cyB8fCAhY3VyTGF5ZXItPmlz
Q29tcG9zaXRlZCgpKSB7Ci0gICAgICAgICAgICAgICAgTGF5b3V0UmVjdCBjaGlsZFVuaW9uQm91
bmRzID0gY3VyTGF5ZXItPmNhbGN1bGF0ZUxheWVyQm91bmRzKHRoaXMsIG51bGxwdHIsIGRlc2Nl
bmRhbnRGbGFncyk7CisgICAgICAgICAgICAgICAgTGF5b3V0UmVjdCBjaGlsZFVuaW9uQm91bmRz
ID0gY3VyTGF5ZXItPmNhbGN1bGF0ZUxheWVyQm91bmRzKHRoaXMsIGN1ckxheWVyLT5vZmZzZXRG
cm9tQW5jZXN0b3IodGhpcyksIGRlc2NlbmRhbnRGbGFncyk7CiAgICAgICAgICAgICAgICAgdW5p
b25Cb3VuZHMudW5pdGUoY2hpbGRVbmlvbkJvdW5kcyk7CiAgICAgICAgICAgICB9CiAgICAgICAg
IH0KQEAgLTU2NjAsNyArNTY1Miw3IEBAIExheW91dFJlY3QgUmVuZGVyTGF5ZXI6OmNhbGN1bGF0
ZUxheWVyQm91bmRzKGNvbnN0IFJlbmRlckxheWVyKiBhbmNlc3RvckxheWVyLCBjCiAgICAgICAg
ICAgICBSZW5kZXJMYXllciogY3VyTGF5ZXIgPSBwb3NaT3JkZXJMaXN0LT5hdChpKTsKICAgICAg
ICAgICAgIC8vIFRoZSBSZW5kZXJOYW1lZEZsb3dUaHJlYWQgaXMgaWdub3JlZCB3aGVuIHdlIGNh
bGN1bGF0ZSB0aGUgYm91bmRzIG9mIHRoZSBSZW5kZXJWaWV3LgogICAgICAgICAgICAgaWYgKChm
bGFncyAmIEluY2x1ZGVDb21wb3NpdGVkRGVzY2VuZGFudHMgfHwgIWN1ckxheWVyLT5pc0NvbXBv
c2l0ZWQoKSkgJiYgIWN1ckxheWVyLT5pc0Zsb3dUaHJlYWRDb2xsZWN0aW5nR3JhcGhpY3NMYXll
cnNVbmRlclJlZ2lvbnMoKSkgewotICAgICAgICAgICAgICAgIExheW91dFJlY3QgY2hpbGRVbmlv
bkJvdW5kcyA9IGN1ckxheWVyLT5jYWxjdWxhdGVMYXllckJvdW5kcyh0aGlzLCBudWxscHRyLCBk
ZXNjZW5kYW50RmxhZ3MpOworICAgICAgICAgICAgICAgIExheW91dFJlY3QgY2hpbGRVbmlvbkJv
dW5kcyA9IGN1ckxheWVyLT5jYWxjdWxhdGVMYXllckJvdW5kcyh0aGlzLCBjdXJMYXllci0+b2Zm
c2V0RnJvbUFuY2VzdG9yKHRoaXMpLCBkZXNjZW5kYW50RmxhZ3MpOwogICAgICAgICAgICAgICAg
IHVuaW9uQm91bmRzLnVuaXRlKGNoaWxkVW5pb25Cb3VuZHMpOwogICAgICAgICAgICAgfQogICAg
ICAgICB9CkBAIC01Njc0LDcgKzU2NjYsNyBAQCBMYXlvdXRSZWN0IFJlbmRlckxheWVyOjpjYWxj
dWxhdGVMYXllckJvdW5kcyhjb25zdCBSZW5kZXJMYXllciogYW5jZXN0b3JMYXllciwgYwogICAg
ICAgICAgICAgLy8gc28gdGhlcmUncyBubyB3YXkgd2UgY291bGQgaGl0IGEgUmVuZGVyTmFtZWRG
bG93VGhyZWFkIGhlcmUuCiAgICAgICAgICAgICBBU1NFUlQoIWN1ckxheWVyLT5pc0Zsb3dUaHJl
YWRDb2xsZWN0aW5nR3JhcGhpY3NMYXllcnNVbmRlclJlZ2lvbnMoKSk7CiAgICAgICAgICAgICBp
ZiAoZmxhZ3MgJiBJbmNsdWRlQ29tcG9zaXRlZERlc2NlbmRhbnRzIHx8ICFjdXJMYXllci0+aXND
b21wb3NpdGVkKCkpIHsKLSAgICAgICAgICAgICAgICBMYXlvdXRSZWN0IGN1ckFic0JvdW5kcyA9
IGN1ckxheWVyLT5jYWxjdWxhdGVMYXllckJvdW5kcyh0aGlzLCBudWxscHRyLCBkZXNjZW5kYW50
RmxhZ3MpOworICAgICAgICAgICAgICAgIExheW91dFJlY3QgY3VyQWJzQm91bmRzID0gY3VyTGF5
ZXItPmNhbGN1bGF0ZUxheWVyQm91bmRzKHRoaXMsIGN1ckxheWVyLT5vZmZzZXRGcm9tQW5jZXN0
b3IodGhpcyksIGRlc2NlbmRhbnRGbGFncyk7CiAgICAgICAgICAgICAgICAgdW5pb25Cb3VuZHMu
dW5pdGUoY3VyQWJzQm91bmRzKTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQpAQCAtNTY5Mywx
NCArNTY4NSw3IEBAIExheW91dFJlY3QgUmVuZGVyTGF5ZXI6OmNhbGN1bGF0ZUxheWVyQm91bmRz
KGNvbnN0IFJlbmRlckxheWVyKiBhbmNlc3RvckxheWVyLCBjCiAgICAgICAgIGJvdW5kaW5nQm94
UmVjdCA9IGFmZmluZVRyYW5zLT5tYXBSZWN0KGJvdW5kaW5nQm94UmVjdCk7CiAgICAgICAgIHVu
aW9uQm91bmRzID0gYWZmaW5lVHJhbnMtPm1hcFJlY3QodW5pb25Cb3VuZHMpOwogICAgIH0KLQot
ICAgIExheW91dFNpemUgb2Zmc2V0RnJvbUFuY2VzdG9yOwotICAgIGlmIChvZmZzZXRGcm9tUm9v
dCkKLSAgICAgICAgb2Zmc2V0RnJvbUFuY2VzdG9yID0gKm9mZnNldEZyb21Sb290OwotICAgIGVs
c2UKLSAgICAgICAgb2Zmc2V0RnJvbUFuY2VzdG9yID0gdGhpcy0+b2Zmc2V0RnJvbUFuY2VzdG9y
KGFuY2VzdG9yTGF5ZXIpOwotICAgIHVuaW9uQm91bmRzLm1vdmUob2Zmc2V0RnJvbUFuY2VzdG9y
KTsKLSAgICAKKyAgICB1bmlvbkJvdW5kcy5tb3ZlKG9mZnNldEZyb21Sb290KTsKICAgICByZXR1
cm4gdW5pb25Cb3VuZHM7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9SZW5kZXJMYXllci5oIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyLmgK
aW5kZXggYzYxYTZjYy4uNzg5YmVlMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlckxheWVyLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxh
eWVyLmgKQEAgLTcwMCw3ICs3MDAsNyBAQCBwdWJsaWM6CiAgICAgLy8gZm9yIHBhaW50aW5nL2V2
ZW50IGhhbmRsaW5nLgogICAgIC8vIFBhc3Mgb2Zmc2V0RnJvbVJvb3QgaWYga25vd24uCiAgICAg
dm9pZCBjYWxjdWxhdGVSZWN0cyhjb25zdCBDbGlwUmVjdHNDb250ZXh0JiwgY29uc3QgTGF5b3V0
UmVjdCYgcGFpbnREaXJ0eVJlY3QsIExheW91dFJlY3QmIGxheWVyQm91bmRzLAotICAgICAgICBD
bGlwUmVjdCYgYmFja2dyb3VuZFJlY3QsIENsaXBSZWN0JiBmb3JlZ3JvdW5kUmVjdCwgQ2xpcFJl
Y3QmIG91dGxpbmVSZWN0LCBjb25zdCBMYXlvdXRTaXplKiBvZmZzZXRGcm9tUm9vdCA9IG51bGxw
dHIpIGNvbnN0OworICAgICAgICBDbGlwUmVjdCYgYmFja2dyb3VuZFJlY3QsIENsaXBSZWN0JiBm
b3JlZ3JvdW5kUmVjdCwgQ2xpcFJlY3QmIG91dGxpbmVSZWN0LCBjb25zdCBMYXlvdXRTaXplJiBv
ZmZzZXRGcm9tUm9vdCkgY29uc3Q7CiAKICAgICAvLyBDb21wdXRlIGFuZCBjYWNoZSBjbGlwIHJl
Y3RzIGNvbXB1dGVkIHdpdGggdGhlIGdpdmVuIGxheWVyIGFzIHRoZSByb290CiAgICAgdm9pZCB1
cGRhdGVDbGlwUmVjdHMoY29uc3QgQ2xpcFJlY3RzQ29udGV4dCYpOwpAQCAtNzE5LDcgKzcxOSw3
IEBAIHB1YmxpYzoKICAgICBMYXlvdXRSZWN0IGxvY2FsQ2xpcFJlY3QoYm9vbCYgY2xpcEV4Y2Vl
ZHNCb3VuZHMpIGNvbnN0OyAvLyBSZXR1cm5zIHRoZSBiYWNrZ3JvdW5kIGNsaXAgcmVjdCBvZiB0
aGUgbGF5ZXIgaW4gdGhlIGxvY2FsIGNvb3JkaW5hdGUgc3BhY2UuCiAKICAgICAvLyBQYXNzIG9m
ZnNldEZyb21Sb290IGlmIGtub3duLgotICAgIGJvb2wgaW50ZXJzZWN0c0RhbWFnZVJlY3QoY29u
c3QgTGF5b3V0UmVjdCYgbGF5ZXJCb3VuZHMsIGNvbnN0IExheW91dFJlY3QmIGRhbWFnZVJlY3Qs
IGNvbnN0IFJlbmRlckxheWVyKiByb290TGF5ZXIsIGNvbnN0IExheW91dFNpemUqIG9mZnNldEZy
b21Sb290ID0gbnVsbHB0ciwgY29uc3QgTGF5b3V0UmVjdCogY2FjaGVkQm91bmRpbmdCb3ggPSBu
dWxscHRyKSBjb25zdDsKKyAgICBib29sIGludGVyc2VjdHNEYW1hZ2VSZWN0KGNvbnN0IExheW91
dFJlY3QmIGxheWVyQm91bmRzLCBjb25zdCBMYXlvdXRSZWN0JiBkYW1hZ2VSZWN0LCBjb25zdCBS
ZW5kZXJMYXllciogcm9vdExheWVyLCBjb25zdCBMYXlvdXRTaXplJiBvZmZzZXRGcm9tUm9vdCwg
Y29uc3QgTGF5b3V0UmVjdCogY2FjaGVkQm91bmRpbmdCb3ggPSBudWxscHRyKSBjb25zdDsKIAog
ICAgIGVudW0gQ2FsY3VsYXRlTGF5ZXJCb3VuZHNGbGFnIHsKICAgICAgICAgSW5jbHVkZVNlbGZU
cmFuc2Zvcm0gPSAxIDw8IDAsCkBAIC03MzUsNyArNzM1LDcgQEAgcHVibGljOgogICAgIHR5cGVk
ZWYgdW5zaWduZWQgQ2FsY3VsYXRlTGF5ZXJCb3VuZHNGbGFnczsKIAogICAgIC8vIEJvdW5kaW5n
IGJveCByZWxhdGl2ZSB0byBzb21lIGFuY2VzdG9yIGxheWVyLiBQYXNzIG9mZnNldEZyb21Sb290
IGlmIGtub3duLgotICAgIExheW91dFJlY3QgYm91bmRpbmdCb3goY29uc3QgUmVuZGVyTGF5ZXIq
IHJvb3RMYXllciwgQ2FsY3VsYXRlTGF5ZXJCb3VuZHNGbGFncyA9IDAsIGNvbnN0IExheW91dFNp
emUqIG9mZnNldEZyb21Sb290ID0gbnVsbHB0cikgY29uc3Q7CisgICAgTGF5b3V0UmVjdCBib3Vu
ZGluZ0JveChjb25zdCBSZW5kZXJMYXllciogcm9vdExheWVyLCBjb25zdCBMYXlvdXRTaXplJiBv
ZmZzZXRGcm9tUm9vdCA9IExheW91dFNpemUoKSwgQ2FsY3VsYXRlTGF5ZXJCb3VuZHNGbGFncyA9
IDApIGNvbnN0OwogICAgIC8vIEJvdW5kaW5nIGJveCBpbiB0aGUgY29vcmRpbmF0ZXMgb2YgdGhp
cyBsYXllci4KICAgICBMYXlvdXRSZWN0IGxvY2FsQm91bmRpbmdCb3goQ2FsY3VsYXRlTGF5ZXJC
b3VuZHNGbGFncyA9IDApIGNvbnN0OwogICAgIC8vIERlcHJlY2F0ZWQ6IFBpeGVsIHNuYXBwZWQg
Ym91bmRpbmcgYm94IHJlbGF0aXZlIHRvIHRoZSByb290LgpAQCAtNzQ0LDcgKzc0NCw3IEBAIHB1
YmxpYzoKICAgICBGbG9hdFJlY3QgYWJzb2x1dGVCb3VuZGluZ0JveEZvclBhaW50aW5nKCkgY29u
c3Q7CiAKICAgICAvLyBCb3VuZHMgdXNlZCBmb3IgbGF5ZXIgb3ZlcmxhcCB0ZXN0aW5nIGluIFJl
bmRlckxheWVyQ29tcG9zaXRvci4KLSAgICBMYXlvdXRSZWN0IG92ZXJsYXBCb3VuZHMoKSBjb25z
dCB7IHJldHVybiBvdmVybGFwQm91bmRzSW5jbHVkZUNoaWxkcmVuKCkgPyBjYWxjdWxhdGVMYXll
ckJvdW5kcyh0aGlzKSA6IGxvY2FsQm91bmRpbmdCb3goKTsgfQorICAgIExheW91dFJlY3Qgb3Zl
cmxhcEJvdW5kcygpIGNvbnN0IHsgcmV0dXJuIG92ZXJsYXBCb3VuZHNJbmNsdWRlQ2hpbGRyZW4o
KSA/IGNhbGN1bGF0ZUxheWVyQm91bmRzKHRoaXMsIG9mZnNldEZyb21BbmNlc3Rvcih0aGlzKSkg
OiBsb2NhbEJvdW5kaW5nQm94KCk7IH0KIAogI2lmIEVOQUJMRShDU1NfRklMVEVSUykKICAgICAv
LyBJZiB0cnVlLCB0aGlzIGxheWVyJ3MgY2hpbGRyZW4gYXJlIGluY2x1ZGVkIGluIGl0cyBib3Vu
ZHMgZm9yIG92ZXJsYXAgdGVzdGluZy4KQEAgLTc1NSw3ICs3NTUsNyBAQCBwdWJsaWM6CiAjZW5k
aWYKIAogICAgIC8vIENhbiBwYXNzIG9mZnNldEZyb21Sb290IGlmIGtub3duLgotICAgIExheW91
dFJlY3QgY2FsY3VsYXRlTGF5ZXJCb3VuZHMoY29uc3QgUmVuZGVyTGF5ZXIqIGFuY2VzdG9yTGF5
ZXIsIGNvbnN0IExheW91dFNpemUqIG9mZnNldEZyb21Sb290ID0gbnVsbHB0ciwgQ2FsY3VsYXRl
TGF5ZXJCb3VuZHNGbGFncyA9IERlZmF1bHRDYWxjdWxhdGVMYXllckJvdW5kc0ZsYWdzKSBjb25z
dDsKKyAgICBMYXlvdXRSZWN0IGNhbGN1bGF0ZUxheWVyQm91bmRzKGNvbnN0IFJlbmRlckxheWVy
KiBhbmNlc3RvckxheWVyLCBjb25zdCBMYXlvdXRTaXplJiBvZmZzZXRGcm9tUm9vdCwgQ2FsY3Vs
YXRlTGF5ZXJCb3VuZHNGbGFncyA9IERlZmF1bHRDYWxjdWxhdGVMYXllckJvdW5kc0ZsYWdzKSBj
b25zdDsKICAgICAKICAgICAvLyBSZXR1cm4gYSBjYWNoZWQgcmVwYWludCByZWN0LCBjb21wdXRl
ZCByZWxhdGl2ZSB0byB0aGUgbGF5ZXIgcmVuZGVyZXIncyBjb250YWluZXJGb3JSZXBhaW50Lgog
ICAgIExheW91dFJlY3QgcmVwYWludFJlY3QoKSBjb25zdCB7IHJldHVybiBtX3JlcGFpbnRSZWN0
OyB9CkBAIC0xMDAxLDkgKzEwMDEsOSBAQCBwcml2YXRlOgogCiAgICAgdm9pZCBjb2xsZWN0RnJh
Z21lbnRzKExheWVyRnJhZ21lbnRzJiwgY29uc3QgUmVuZGVyTGF5ZXIqIHJvb3RMYXllciwgY29u
c3QgTGF5b3V0UmVjdCYgZGlydHlSZWN0LAogICAgICAgICBQYWdpbmF0aW9uSW5jbHVzaW9uTW9k
ZSwKLSAgICAgICAgQ2xpcFJlY3RzVHlwZSwgT3ZlcmxheVNjcm9sbGJhclNpemVSZWxldmFuY3kg
aW5PdmVybGF5U2Nyb2xsYmFyU2l6ZVJlbGV2YW5jeSA9IElnbm9yZU92ZXJsYXlTY3JvbGxiYXJT
aXplLAotICAgICAgICBTaG91bGRSZXNwZWN0T3ZlcmZsb3dDbGlwID0gUmVzcGVjdE92ZXJmbG93
Q2xpcCwgY29uc3QgTGF5b3V0U2l6ZSogb2Zmc2V0RnJvbVJvb3QgPSBudWxscHRyLCBjb25zdCBM
YXlvdXRSZWN0KiBsYXllckJvdW5kaW5nQm94ID0gbnVsbHB0ciwgU2hvdWxkQXBwbHlSb290T2Zm
c2V0VG9GcmFnbWVudHMgPSBJZ25vcmVSb290T2Zmc2V0Rm9yRnJhZ21lbnRzKTsKLSAgICB2b2lk
IHVwZGF0ZVBhaW50aW5nSW5mb0ZvckZyYWdtZW50cyhMYXllckZyYWdtZW50cyYsIGNvbnN0IExh
eWVyUGFpbnRpbmdJbmZvJiwgUGFpbnRMYXllckZsYWdzLCBib29sIHNob3VsZFBhaW50Q29udGVu
dCwgY29uc3QgTGF5b3V0U2l6ZSogb2Zmc2V0RnJvbVJvb3QpOworICAgICAgICBDbGlwUmVjdHNU
eXBlLCBPdmVybGF5U2Nyb2xsYmFyU2l6ZVJlbGV2YW5jeSBpbk92ZXJsYXlTY3JvbGxiYXJTaXpl
UmVsZXZhbmN5LCBTaG91bGRSZXNwZWN0T3ZlcmZsb3dDbGlwLCBjb25zdCBMYXlvdXRTaXplJiBv
ZmZzZXRGcm9tUm9vdCwKKyAgICAgICAgY29uc3QgTGF5b3V0UmVjdCogbGF5ZXJCb3VuZGluZ0Jv
eCA9IG51bGxwdHIsIFNob3VsZEFwcGx5Um9vdE9mZnNldFRvRnJhZ21lbnRzID0gSWdub3JlUm9v
dE9mZnNldEZvckZyYWdtZW50cyk7CisgICAgdm9pZCB1cGRhdGVQYWludGluZ0luZm9Gb3JGcmFn
bWVudHMoTGF5ZXJGcmFnbWVudHMmLCBjb25zdCBMYXllclBhaW50aW5nSW5mbyYsIFBhaW50TGF5
ZXJGbGFncywgYm9vbCBzaG91bGRQYWludENvbnRlbnQsIGNvbnN0IExheW91dFNpemUmIG9mZnNl
dEZyb21Sb290KTsKICAgICB2b2lkIHBhaW50QmFja2dyb3VuZEZvckZyYWdtZW50cyhjb25zdCBM
YXllckZyYWdtZW50cyYsIEdyYXBoaWNzQ29udGV4dCosIEdyYXBoaWNzQ29udGV4dCogdHJhbnNw
YXJlbmN5TGF5ZXJDb250ZXh0LAogICAgICAgICBjb25zdCBMYXlvdXRSZWN0JiB0cmFuc3BhcmVu
Y3lQYWludERpcnR5UmVjdCwgYm9vbCBoYXZlVHJhbnNwYXJlbmN5LCBjb25zdCBMYXllclBhaW50
aW5nSW5mbyYsIFBhaW50QmVoYXZpb3IsIFJlbmRlck9iamVjdCogcGFpbnRpbmdSb290Rm9yUmVu
ZGVyZXIpOwogICAgIHZvaWQgcGFpbnRGb3JlZ3JvdW5kRm9yRnJhZ21lbnRzKGNvbnN0IExheWVy
RnJhZ21lbnRzJiwgR3JhcGhpY3NDb250ZXh0KiwgR3JhcGhpY3NDb250ZXh0KiB0cmFuc3BhcmVu
Y3lMYXllckNvbnRleHQsCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVu
ZGVyTGF5ZXJDb21wb3NpdG9yLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJM
YXllckNvbXBvc2l0b3IuY3BwCmluZGV4IGI2ZGE1MmUuLmE2ZWE1NTAgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllckNvbXBvc2l0b3IuY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllckNvbXBvc2l0b3IuY3BwCkBAIC05NzUs
NyArOTc1LDcgQEAgTGF5b3V0UmVjdCBSZW5kZXJMYXllckNvbXBvc2l0b3I6OmNhbGN1bGF0ZUNv
bXBvc2l0ZWRCb3VuZHMoY29uc3QgUmVuZGVyTGF5ZXImIGwKIHsKICAgICBpZiAoIWNhbkJlQ29t
cG9zaXRlZChsYXllcikpCiAgICAgICAgIHJldHVybiBMYXlvdXRSZWN0KCk7Ci0gICAgcmV0dXJu
IGxheWVyLmNhbGN1bGF0ZUxheWVyQm91bmRzKCZhbmNlc3RvckxheWVyLCBudWxscHRyLCBSZW5k
ZXJMYXllcjo6RGVmYXVsdENhbGN1bGF0ZUxheWVyQm91bmRzRmxhZ3MgfCBSZW5kZXJMYXllcjo6
RXhjbHVkZUhpZGRlbkRlc2NlbmRhbnRzIHwgUmVuZGVyTGF5ZXI6OkRvbnRDb25zdHJhaW5Gb3JN
YXNrKTsKKyAgICByZXR1cm4gbGF5ZXIuY2FsY3VsYXRlTGF5ZXJCb3VuZHMoJmFuY2VzdG9yTGF5
ZXIsIGxheWVyLm9mZnNldEZyb21BbmNlc3RvcigmYW5jZXN0b3JMYXllciksIFJlbmRlckxheWVy
OjpEZWZhdWx0Q2FsY3VsYXRlTGF5ZXJCb3VuZHNGbGFncyB8IFJlbmRlckxheWVyOjpFeGNsdWRl
SGlkZGVuRGVzY2VuZGFudHMgfCBSZW5kZXJMYXllcjo6RG9udENvbnN0cmFpbkZvck1hc2spOwog
fQogCiB2b2lkIFJlbmRlckxheWVyQ29tcG9zaXRvcjo6bGF5ZXJXYXNBZGRlZChSZW5kZXJMYXll
ciYsIFJlbmRlckxheWVyJikKQEAgLTI2NTAsNyArMjY1MCw3IEBAIGJvb2wgUmVuZGVyTGF5ZXJD
b21wb3NpdG9yOjpyZXF1aXJlc0NvbXBvc2l0aW5nRm9yUG9zaXRpb24oUmVuZGVyTGF5ZXJNb2Rl
bE9iamVjCiAKICAgICAvLyBGaXhlZCBwb3NpdGlvbiBlbGVtZW50cyB0aGF0IGFyZSBpbnZpc2li
bGUgaW4gdGhlIGN1cnJlbnQgdmlldyBkb24ndCBnZXQgdGhlaXIgb3duIGxheWVyLgogICAgIExh
eW91dFJlY3Qgdmlld0JvdW5kcyA9IG1fcmVuZGVyVmlldy5mcmFtZVZpZXcoKS52aWV3cG9ydENv
bnN0cmFpbmVkVmlzaWJsZUNvbnRlbnRSZWN0KCk7Ci0gICAgTGF5b3V0UmVjdCBsYXllckJvdW5k
cyA9IGxheWVyLmNhbGN1bGF0ZUxheWVyQm91bmRzKCZsYXllciwgMCwgUmVuZGVyTGF5ZXI6OlVz
ZUxvY2FsQ2xpcFJlY3RJZlBvc3NpYmxlIHwgUmVuZGVyTGF5ZXI6OkluY2x1ZGVMYXllckZpbHRl
ck91dHNldHMgfCBSZW5kZXJMYXllcjo6VXNlRnJhZ21lbnRCb3hlc0V4Y2x1ZGluZ0NvbXBvc2l0
aW5nCisgICAgTGF5b3V0UmVjdCBsYXllckJvdW5kcyA9IGxheWVyLmNhbGN1bGF0ZUxheWVyQm91
bmRzKCZsYXllciwgTGF5b3V0U2l6ZSgpLCBSZW5kZXJMYXllcjo6VXNlTG9jYWxDbGlwUmVjdElm
UG9zc2libGUgfCBSZW5kZXJMYXllcjo6SW5jbHVkZUxheWVyRmlsdGVyT3V0c2V0cyB8IFJlbmRl
ckxheWVyOjpVc2VGcmFnbWVudEJveGVzRXhjbHVkaW5nQ29tcG9zaXRpbmcKICAgICAgICAgfCBS
ZW5kZXJMYXllcjo6RXhjbHVkZUhpZGRlbkRlc2NlbmRhbnRzIHwgUmVuZGVyTGF5ZXI6OkRvbnRD
b25zdHJhaW5Gb3JNYXNrIHwgUmVuZGVyTGF5ZXI6OkluY2x1ZGVDb21wb3NpdGVkRGVzY2VuZGFu
dHMpOwogICAgIC8vIE1hcCB0byBtX3JlbmRlclZpZXcgdG8gaWdub3JlIHBhZ2Ugc2NhbGUuCiAg
ICAgRmxvYXRSZWN0IGFic29sdXRlQm91bmRzID0gbGF5ZXIucmVuZGVyZXIoKS5sb2NhbFRvQ29u
dGFpbmVyUXVhZChGbG9hdFJlY3QobGF5ZXJCb3VuZHMpLCAmbV9yZW5kZXJWaWV3KS5ib3VuZGlu
Z0JveCgpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRyZWVB
c1RleHQuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRyZWVBc1RleHQuY3Bw
CmluZGV4IGFlZjAyMTYuLjZlOTUxOWUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9SZW5kZXJUcmVlQXNUZXh0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVyVHJlZUFzVGV4dC5jcHAKQEAgLTc0MSwxMiArNzQxLDEyIEBAIHN0YXRpYyB2b2lkIHdy
aXRlTGF5ZXJzKFRleHRTdHJlYW0mIHRzLCBjb25zdCBSZW5kZXJMYXllciogcm9vdExheWVyLCBS
ZW5kZXJMYXllCiAgICAgLy8gQ2FsY3VsYXRlIHRoZSBjbGlwIHJlY3RzIHdlIHNob3VsZCB1c2Uu
CiAgICAgTGF5b3V0UmVjdCBsYXllckJvdW5kczsKICAgICBDbGlwUmVjdCBkYW1hZ2VSZWN0LCBj
bGlwUmVjdFRvQXBwbHksIG91dGxpbmVSZWN0OwotICAgIGwtPmNhbGN1bGF0ZVJlY3RzKFJlbmRl
ckxheWVyOjpDbGlwUmVjdHNDb250ZXh0KHJvb3RMYXllciwgVGVtcG9yYXJ5Q2xpcFJlY3RzKSwg
cGFpbnREaXJ0eVJlY3QsIGxheWVyQm91bmRzLCBkYW1hZ2VSZWN0LCBjbGlwUmVjdFRvQXBwbHks
IG91dGxpbmVSZWN0KTsKKyAgICBsLT5jYWxjdWxhdGVSZWN0cyhSZW5kZXJMYXllcjo6Q2xpcFJl
Y3RzQ29udGV4dChyb290TGF5ZXIsIFRlbXBvcmFyeUNsaXBSZWN0cyksIHBhaW50RGlydHlSZWN0
LCBsYXllckJvdW5kcywgZGFtYWdlUmVjdCwgY2xpcFJlY3RUb0FwcGx5LCBvdXRsaW5lUmVjdCwg
bC0+b2Zmc2V0RnJvbUFuY2VzdG9yKHJvb3RMYXllcikpOwogCiAgICAgLy8gRW5zdXJlIG91ciBs
aXN0cyBhcmUgdXAtdG8tZGF0ZS4KICAgICBsLT51cGRhdGVMYXllckxpc3RzSWZOZWVkZWQoKTsK
IAotICAgIGJvb2wgc2hvdWxkUGFpbnQgPSAoYmVoYXZpb3IgJiBSZW5kZXJBc1RleHRTaG93QWxs
TGF5ZXJzKSA/IHRydWUgOiBsLT5pbnRlcnNlY3RzRGFtYWdlUmVjdChsYXllckJvdW5kcywgZGFt
YWdlUmVjdC5yZWN0KCksIHJvb3RMYXllcik7CisgICAgYm9vbCBzaG91bGRQYWludCA9IChiZWhh
dmlvciAmIFJlbmRlckFzVGV4dFNob3dBbGxMYXllcnMpID8gdHJ1ZSA6IGwtPmludGVyc2VjdHNE
YW1hZ2VSZWN0KGxheWVyQm91bmRzLCBkYW1hZ2VSZWN0LnJlY3QoKSwgcm9vdExheWVyLCBsLT5v
ZmZzZXRGcm9tQW5jZXN0b3Iocm9vdExheWVyKSk7CiAgICAgVmVjdG9yPFJlbmRlckxheWVyKj4q
IG5lZ0xpc3QgPSBsLT5uZWdaT3JkZXJMaXN0KCk7CiAgICAgYm9vbCBwYWludHNCYWNrZ3JvdW5k
U2VwYXJhdGVseSA9IG5lZ0xpc3QgJiYgbmVnTGlzdC0+c2l6ZSgpID4gMDsKICAgICBpZiAoc2hv
dWxkUGFpbnQgJiYgcGFpbnRzQmFja2dyb3VuZFNlcGFyYXRlbHkpCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>233556</attachid>
            <date>2014-06-21 20:50:24 -0700</date>
            <delta_ts>2014-06-22 19:36:41 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>patch.txt</filename>
            <type>text/plain</type>
            <size>33031</size>
            <attacher name="alan">zalan</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCBjZDJmZjZhLi5kNjk2ZmM1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDUgKzEsMzYg
QEAKIDIwMTQtMDYtMjEgIFphbGFuIEJ1anRhcyAgPHphbGFuQGFwcGxlLmNvbT4KIAorICAgICAg
ICBNYWtlIG9mZnNldCBmcm9tIGFuY2VzdG9yIGNvbXB1dGF0aW9uIGV4cGxpY2l0IGJ5IG1vdmlu
ZyBpdCB0byB0aGUgY2FsbGVycy4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTEzNDE2OC4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMh
KS4KKyAgICAgICAgCisgICAgICAgIEV4cGxpY2l0IG9mZnNldCBjb21wdXRhdGlvbiBoZWxwcyBj
b2RlIHJlYWRpbmcgYW5kIGxlc3MgZXJyb3ItcHJvbmUgdGhhbiBwYXNzaW5nCisgICAgICAgIHRo
ZSBvZmZzZXQgcG9pbnRlciBhbmQgY29tcHV0ZSBpdCBsb2NhbGx5IHdoZW4gaXQgaXMgbnVsbC4K
KworICAgICAgICBObyBjaGFuZ2UgaW4gZnVuY3Rpb25hbGl0eS4KKworICAgICAgICAqIHJlbmRl
cmluZy9SZW5kZXJMYXllci5jcHA6CisgICAgICAgIChXZWJDb3JlOjp0cmFuc3BhcmVuY3lDbGlw
Qm94KToKKyAgICAgICAgKFdlYkNvcmU6OnBlcmZvcm1PdmVybGFwVGVzdHMpOgorICAgICAgICAo
V2ViQ29yZTo6UmVuZGVyTGF5ZXI6OnNldHVwQ2xpcFBhdGgpOgorICAgICAgICAoV2ViQ29yZTo6
UmVuZGVyTGF5ZXI6OnNldHVwRmlsdGVycyk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXll
cjo6cGFpbnRMYXllckNvbnRlbnRzKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyOjpj
b2xsZWN0RnJhZ21lbnRzKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyOjp1cGRhdGVQ
YWludGluZ0luZm9Gb3JGcmFnbWVudHMpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXI6
OnBhaW50VHJhbnNmb3JtZWRMYXllckludG9GcmFnbWVudHMpOgorICAgICAgICAoV2ViQ29yZTo6
UmVuZGVyTGF5ZXI6OmhpdFRlc3RMYXllcik6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXll
cjo6aGl0VGVzdFRyYW5zZm9ybWVkTGF5ZXJJbkZyYWdtZW50cyk6CisgICAgICAgIChXZWJDb3Jl
OjpSZW5kZXJMYXllcjo6Y2FsY3VsYXRlQ2xpcFJlY3RzKToKKyAgICAgICAgKiByZW5kZXJpbmcv
UmVuZGVyTGF5ZXIuaDoKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyTGF5ZXJDb21wb3NpdG9y
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyQ29tcG9zaXRvcjo6Y2FsY3VsYXRl
Q29tcG9zaXRlZEJvdW5kcyk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllckNvbXBvc2l0
b3I6OnJlcXVpcmVzQ29tcG9zaXRpbmdGb3JQb3NpdGlvbik6CisgICAgICAgICogcmVuZGVyaW5n
L1JlbmRlclRyZWVBc1RleHQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6d3JpdGVMYXllcnMpOgor
CisyMDE0LTA2LTIxICBaYWxhbiBCdWp0YXMgIDx6YWxhbkBhcHBsZS5jb20+CisKICAgICAgICAg
VHJhbnNpdGlvbiBsYXllciBvZmZzZXRzIGZyb20gTGF5b3V0UG9pbnQgdG8gTGF5b3V0U2l6ZS4K
ICAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEzNDE1Ngog
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXIuY3BwIGIv
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyLmNwcAppbmRleCBhMWNkZjE1Li5m
OWI2NzBmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXIu
Y3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllci5jcHAKQEAgLTE2
MzYsNyArMTYzNiw3IEBAIHN0YXRpYyBMYXlvdXRSZWN0IHRyYW5zcGFyZW5jeUNsaXBCb3goY29u
c3QgUmVuZGVyTGF5ZXIqIGxheWVyLCBjb25zdCBSZW5kZXJMYXllCiAgICAgICAgIHJldHVybiBy
ZXN1bHQ7CiAgICAgfQogICAgIAotICAgIExheW91dFJlY3QgY2xpcFJlY3QgPSBsYXllci0+Ym91
bmRpbmdCb3gocm9vdExheWVyLCB0cmFuc3BhcmVuY3lCZWhhdmlvciA9PSBIaXRUZXN0aW5nVHJh
bnNwYXJlbmN5Q2xpcEJveCA/IFJlbmRlckxheWVyOjpVc2VGcmFnbWVudEJveGVzSW5jbHVkaW5n
Q29tcG9zaXRpbmcgOiBSZW5kZXJMYXllcjo6VXNlRnJhZ21lbnRCb3hlc0V4Y2x1ZGluZ0NvbXBv
c2l0aW5nKTsKKyAgICBMYXlvdXRSZWN0IGNsaXBSZWN0ID0gbGF5ZXItPmJvdW5kaW5nQm94KHJv
b3RMYXllciwgbGF5ZXItPm9mZnNldEZyb21BbmNlc3Rvcihyb290TGF5ZXIpLCB0cmFuc3BhcmVu
Y3lCZWhhdmlvciA9PSBIaXRUZXN0aW5nVHJhbnNwYXJlbmN5Q2xpcEJveCA/IFJlbmRlckxheWVy
OjpVc2VGcmFnbWVudEJveGVzSW5jbHVkaW5nQ29tcG9zaXRpbmcgOiBSZW5kZXJMYXllcjo6VXNl
RnJhZ21lbnRCb3hlc0V4Y2x1ZGluZ0NvbXBvc2l0aW5nKTsKICAgICBleHBhbmRDbGlwUmVjdEZv
ckRlc2NlbmRhbnRzQW5kUmVmbGVjdGlvbihjbGlwUmVjdCwgbGF5ZXIsIHJvb3RMYXllciwgdHJh
bnNwYXJlbmN5QmVoYXZpb3IsIHBhaW50QmVoYXZpb3IpOwogI2lmIEVOQUJMRShDU1NfRklMVEVS
UykKICAgICBsYXllci0+cmVuZGVyZXIoKS5zdHlsZSgpLmZpbHRlck91dHNldHMoKS5leHBhbmRS
ZWN0KGNsaXBSZWN0KTsKQEAgLTM1NzgsNyArMzU3OCw3IEBAIHN0YXRpYyB2b2lkIHBlcmZvcm1P
dmVybGFwVGVzdHMoT3ZlcmxhcFRlc3RSZXF1ZXN0TWFwJiBvdmVybGFwVGVzdFJlcXVlc3RzLCBj
b25zCiB7CiAgICAgVmVjdG9yPE92ZXJsYXBUZXN0UmVxdWVzdENsaWVudCo+IG92ZXJsYXBwZWRS
ZXF1ZXN0Q2xpZW50czsKICAgICBPdmVybGFwVGVzdFJlcXVlc3RNYXA6Oml0ZXJhdG9yIGVuZCA9
IG92ZXJsYXBUZXN0UmVxdWVzdHMuZW5kKCk7Ci0gICAgTGF5b3V0UmVjdCBib3VuZGluZ0JveCA9
IGxheWVyLT5ib3VuZGluZ0JveChyb290TGF5ZXIpOworICAgIExheW91dFJlY3QgYm91bmRpbmdC
b3ggPSBsYXllci0+Ym91bmRpbmdCb3gocm9vdExheWVyLCBsYXllci0+b2Zmc2V0RnJvbUFuY2Vz
dG9yKHJvb3RMYXllcikpOwogICAgIGZvciAoT3ZlcmxhcFRlc3RSZXF1ZXN0TWFwOjppdGVyYXRv
ciBpdCA9IG92ZXJsYXBUZXN0UmVxdWVzdHMuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7CiAg
ICAgICAgIGlmICghYm91bmRpbmdCb3guaW50ZXJzZWN0cyhpdC0+dmFsdWUpKQogICAgICAgICAg
ICAgY29udGludWU7CkBAIC0zNzk1LDcgKzM3OTUsNyBAQCBib29sIFJlbmRlckxheWVyOjpzZXR1
cENsaXBQYXRoKEdyYXBoaWNzQ29udGV4dCogY29udGV4dCwgY29uc3QgTGF5ZXJQYWludGluZ0lu
ZgogICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICBpZiAoIXJvb3RSZWxhdGl2ZUJvdW5kc0Nv
bXB1dGVkKSB7Ci0gICAgICAgIHJvb3RSZWxhdGl2ZUJvdW5kcyA9IGNhbGN1bGF0ZUxheWVyQm91
bmRzKHBhaW50aW5nSW5mby5yb290TGF5ZXIsICZvZmZzZXRGcm9tUm9vdCwgMCk7CisgICAgICAg
IHJvb3RSZWxhdGl2ZUJvdW5kcyA9IGNhbGN1bGF0ZUxheWVyQm91bmRzKHBhaW50aW5nSW5mby5y
b290TGF5ZXIsIG9mZnNldEZyb21Sb290LCAwKTsKICAgICAgICAgcm9vdFJlbGF0aXZlQm91bmRz
Q29tcHV0ZWQgPSB0cnVlOwogICAgIH0KIApAQCAtMzg1Nyw3ICszODU3LDcgQEAgc3RkOjp1bmlx
dWVfcHRyPEZpbHRlckVmZmVjdFJlbmRlcmVySGVscGVyPiBSZW5kZXJMYXllcjo6c2V0dXBGaWx0
ZXJzKEdyYXBoaWNzQ28KICAgICBmaWx0ZXJSZXBhaW50UmVjdC5tb3ZlKG9mZnNldEZyb21Sb290
KTsKIAogICAgIGlmICghcm9vdFJlbGF0aXZlQm91bmRzQ29tcHV0ZWQpIHsKLSAgICAgICAgcm9v
dFJlbGF0aXZlQm91bmRzID0gY2FsY3VsYXRlTGF5ZXJCb3VuZHMocGFpbnRpbmdJbmZvLnJvb3RM
YXllciwgJm9mZnNldEZyb21Sb290LCAwKTsKKyAgICAgICAgcm9vdFJlbGF0aXZlQm91bmRzID0g
Y2FsY3VsYXRlTGF5ZXJCb3VuZHMocGFpbnRpbmdJbmZvLnJvb3RMYXllciwgb2Zmc2V0RnJvbVJv
b3QsIDApOwogICAgICAgICByb290UmVsYXRpdmVCb3VuZHNDb21wdXRlZCA9IHRydWU7CiAgICAg
fQogCkBAIC00MDIyLDggKzQwMjIsOCBAQCB2b2lkIFJlbmRlckxheWVyOjpwYWludExheWVyQ29u
dGVudHMoR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0LCBjb25zdCBMYXllclBhaW50aQogICAgICAg
ICB9CiAgICAgICAgIGNvbGxlY3RGcmFnbWVudHMobGF5ZXJGcmFnbWVudHMsIGxvY2FsUGFpbnRp
bmdJbmZvLnJvb3RMYXllciwgcGFpbnREaXJ0eVJlY3QsIEV4Y2x1ZGVDb21wb3NpdGVkUGFnaW5h
dGVkTGF5ZXJzLAogICAgICAgICAgICAgKGxvY2FsUGFpbnRGbGFncyAmIFBhaW50TGF5ZXJUZW1w
b3JhcnlDbGlwUmVjdHMpID8gVGVtcG9yYXJ5Q2xpcFJlY3RzIDogUGFpbnRpbmdDbGlwUmVjdHMs
IElnbm9yZU92ZXJsYXlTY3JvbGxiYXJTaXplLAotICAgICAgICAgICAgKGlzUGFpbnRpbmdPdmVy
Zmxvd0NvbnRlbnRzKSA/IElnbm9yZU92ZXJmbG93Q2xpcCA6IFJlc3BlY3RPdmVyZmxvd0NsaXAs
ICZvZmZzZXRGcm9tUm9vdCk7Ci0gICAgICAgIHVwZGF0ZVBhaW50aW5nSW5mb0ZvckZyYWdtZW50
cyhsYXllckZyYWdtZW50cywgbG9jYWxQYWludGluZ0luZm8sIGxvY2FsUGFpbnRGbGFncywgc2hv
dWxkUGFpbnRDb250ZW50LCAmb2Zmc2V0RnJvbVJvb3QpOworICAgICAgICAgICAgKGlzUGFpbnRp
bmdPdmVyZmxvd0NvbnRlbnRzKSA/IElnbm9yZU92ZXJmbG93Q2xpcCA6IFJlc3BlY3RPdmVyZmxv
d0NsaXAsIG9mZnNldEZyb21Sb290KTsKKyAgICAgICAgdXBkYXRlUGFpbnRpbmdJbmZvRm9yRnJh
Z21lbnRzKGxheWVyRnJhZ21lbnRzLCBsb2NhbFBhaW50aW5nSW5mbywgbG9jYWxQYWludEZsYWdz
LCBzaG91bGRQYWludENvbnRlbnQsIG9mZnNldEZyb21Sb290KTsKICAgICB9CiAgICAgCiAgICAg
aWYgKGlzUGFpbnRpbmdDb21wb3NpdGVkQmFja2dyb3VuZCkgewpAQCAtNDE2NSw3ICs0MTY1LDcg
QEAgUmVuZGVyTGF5ZXIqIFJlbmRlckxheWVyOjplbmNsb3NpbmdQYWdpbmF0aW9uTGF5ZXJJblN1
YnRyZWUoY29uc3QgUmVuZGVyTGF5ZXIqIHIKIH0KIAogdm9pZCBSZW5kZXJMYXllcjo6Y29sbGVj
dEZyYWdtZW50cyhMYXllckZyYWdtZW50cyYgZnJhZ21lbnRzLCBjb25zdCBSZW5kZXJMYXllciog
cm9vdExheWVyLCBjb25zdCBMYXlvdXRSZWN0JiBkaXJ0eVJlY3QsIFBhZ2luYXRpb25JbmNsdXNp
b25Nb2RlIGluY2x1c2lvbk1vZGUsCi0gICAgQ2xpcFJlY3RzVHlwZSBjbGlwUmVjdHNUeXBlLCBP
dmVybGF5U2Nyb2xsYmFyU2l6ZVJlbGV2YW5jeSBpbk92ZXJsYXlTY3JvbGxiYXJTaXplUmVsZXZh
bmN5LCBTaG91bGRSZXNwZWN0T3ZlcmZsb3dDbGlwIHJlc3BlY3RPdmVyZmxvd0NsaXAsIGNvbnN0
IExheW91dFNpemUqIG9mZnNldEZyb21Sb290LAorICAgIENsaXBSZWN0c1R5cGUgY2xpcFJlY3Rz
VHlwZSwgT3ZlcmxheVNjcm9sbGJhclNpemVSZWxldmFuY3kgaW5PdmVybGF5U2Nyb2xsYmFyU2l6
ZVJlbGV2YW5jeSwgU2hvdWxkUmVzcGVjdE92ZXJmbG93Q2xpcCByZXNwZWN0T3ZlcmZsb3dDbGlw
LCBjb25zdCBMYXlvdXRTaXplJiBvZmZzZXRGcm9tUm9vdCwKICAgICBjb25zdCBMYXlvdXRSZWN0
KiBsYXllckJvdW5kaW5nQm94LCBTaG91bGRBcHBseVJvb3RPZmZzZXRUb0ZyYWdtZW50cyBhcHBs
eVJvb3RPZmZzZXRUb0ZyYWdtZW50cykKIHsKICAgICBSZW5kZXJMYXllciogcGFnaW5hdGlvbkxh
eWVyID0gZW5jbG9zaW5nUGFnaW5hdGlvbkxheWVySW5TdWJ0cmVlKHJvb3RMYXllciwgaW5jbHVz
aW9uTW9kZSk7CkBAIC00MTg5LDEwICs0MTg5LDEwIEBAIHZvaWQgUmVuZGVyTGF5ZXI6OmNvbGxl
Y3RGcmFnbWVudHMoTGF5ZXJGcmFnbWVudHMmIGZyYWdtZW50cywgY29uc3QgUmVuZGVyTGF5ZXIq
CiAgICAgQ2xpcFJlY3QgZm9yZWdyb3VuZFJlY3RJbkZsb3dUaHJlYWQ7CiAgICAgQ2xpcFJlY3Qg
b3V0bGluZVJlY3RJbkZsb3dUaHJlYWQ7CiAgICAgY2FsY3VsYXRlUmVjdHMocGFnaW5hdGlvbkNs
aXBSZWN0c0NvbnRleHQsIExheW91dFJlY3Q6OmluZmluaXRlUmVjdCgpLCBsYXllckJvdW5kc0lu
Rmxvd1RocmVhZCwgYmFja2dyb3VuZFJlY3RJbkZsb3dUaHJlYWQsIGZvcmVncm91bmRSZWN0SW5G
bG93VGhyZWFkLAotICAgICAgICBvdXRsaW5lUmVjdEluRmxvd1RocmVhZCwgJm9mZnNldFdpdGhp
blBhZ2luYXRlZExheWVyKTsKKyAgICAgICAgb3V0bGluZVJlY3RJbkZsb3dUaHJlYWQsIG9mZnNl
dFdpdGhpblBhZ2luYXRlZExheWVyKTsKICAgICAKICAgICAvLyBUYWtlIG91ciBib3VuZGluZyBi
b3ggd2l0aGluIHRoZSBmbG93IHRocmVhZCBhbmQgY2xpcCBpdC4KLSAgICBMYXlvdXRSZWN0IGxh
eWVyQm91bmRpbmdCb3hJbkZsb3dUaHJlYWQgPSBsYXllckJvdW5kaW5nQm94ID8gKmxheWVyQm91
bmRpbmdCb3ggOiBib3VuZGluZ0JveChwYWdpbmF0aW9uTGF5ZXIsIDAsICZvZmZzZXRXaXRoaW5Q
YWdpbmF0ZWRMYXllcik7CisgICAgTGF5b3V0UmVjdCBsYXllckJvdW5kaW5nQm94SW5GbG93VGhy
ZWFkID0gbGF5ZXJCb3VuZGluZ0JveCA/ICpsYXllckJvdW5kaW5nQm94IDogYm91bmRpbmdCb3go
cGFnaW5hdGlvbkxheWVyLCBvZmZzZXRXaXRoaW5QYWdpbmF0ZWRMYXllcik7CiAgICAgbGF5ZXJC
b3VuZGluZ0JveEluRmxvd1RocmVhZC5pbnRlcnNlY3QoYmFja2dyb3VuZFJlY3RJbkZsb3dUaHJl
YWQucmVjdCgpKTsKICAgICAKICAgICBSZW5kZXJGbG93VGhyZWFkJiBlbmNsb3NpbmdGbG93VGhy
ZWFkID0gdG9SZW5kZXJGbG93VGhyZWFkKHBhZ2luYXRpb25MYXllci0+cmVuZGVyZXIoKSk7CkBA
IC00MjA3LDcgKzQyMDcsOCBAQCB2b2lkIFJlbmRlckxheWVyOjpjb2xsZWN0RnJhZ21lbnRzKExh
eWVyRnJhZ21lbnRzJiBmcmFnbWVudHMsIGNvbnN0IFJlbmRlckxheWVyKgogICAgICAgICBsYXll
ckZyYWdtZW50Qm91bmRpbmdCb3hJblBhcmVudFBhZ2luYXRpb25MYXllci5tb3ZlKG9mZnNldFdp
dGhpblBhcmVudFBhZ2luYXRlZExheWVyKTsKICAgICAgICAgCiAgICAgICAgIC8vIE5vdyBjb2xs
ZWN0IGFuY2VzdG9yIGZyYWdtZW50cy4KLSAgICAgICAgcGFyZW50UGFnaW5hdGlvbkxheWVyLT5j
b2xsZWN0RnJhZ21lbnRzKGFuY2VzdG9yRnJhZ21lbnRzLCByb290TGF5ZXIsIGRpcnR5UmVjdCwg
aW5jbHVzaW9uTW9kZSwgY2xpcFJlY3RzVHlwZSwgaW5PdmVybGF5U2Nyb2xsYmFyU2l6ZVJlbGV2
YW5jeSwgcmVzcGVjdE92ZXJmbG93Q2xpcCwgbnVsbHB0ciwgJmxheWVyRnJhZ21lbnRCb3VuZGlu
Z0JveEluUGFyZW50UGFnaW5hdGlvbkxheWVyLCBBcHBseVJvb3RPZmZzZXRUb0ZyYWdtZW50cyk7
CisgICAgICAgIHBhcmVudFBhZ2luYXRpb25MYXllci0+Y29sbGVjdEZyYWdtZW50cyhhbmNlc3Rv
ckZyYWdtZW50cywgcm9vdExheWVyLCBkaXJ0eVJlY3QsIGluY2x1c2lvbk1vZGUsIGNsaXBSZWN0
c1R5cGUsIGluT3ZlcmxheVNjcm9sbGJhclNpemVSZWxldmFuY3ksIHJlc3BlY3RPdmVyZmxvd0Ns
aXAsCisgICAgICAgICAgICBvZmZzZXRGcm9tQW5jZXN0b3Iocm9vdExheWVyKSwgJmxheWVyRnJh
Z21lbnRCb3VuZGluZ0JveEluUGFyZW50UGFnaW5hdGlvbkxheWVyLCBBcHBseVJvb3RPZmZzZXRU
b0ZyYWdtZW50cyk7CiAgICAgICAgIAogICAgICAgICBpZiAoYW5jZXN0b3JGcmFnbWVudHMuaXNF
bXB0eSgpKQogICAgICAgICAgICAgcmV0dXJuOwpAQCAtNDI5NiwxNSArNDI5NywxNCBAQCB2b2lk
IFJlbmRlckxheWVyOjpjb2xsZWN0RnJhZ21lbnRzKExheWVyRnJhZ21lbnRzJiBmcmFnbWVudHMs
IGNvbnN0IFJlbmRlckxheWVyKgogfQogCiB2b2lkIFJlbmRlckxheWVyOjp1cGRhdGVQYWludGlu
Z0luZm9Gb3JGcmFnbWVudHMoTGF5ZXJGcmFnbWVudHMmIGZyYWdtZW50cywgY29uc3QgTGF5ZXJQ
YWludGluZ0luZm8mIGxvY2FsUGFpbnRpbmdJbmZvLCBQYWludExheWVyRmxhZ3MgbG9jYWxQYWlu
dEZsYWdzLAotICAgIGJvb2wgc2hvdWxkUGFpbnRDb250ZW50LCBjb25zdCBMYXlvdXRTaXplKiBv
ZmZzZXRGcm9tUm9vdCkKKyAgICBib29sIHNob3VsZFBhaW50Q29udGVudCwgY29uc3QgTGF5b3V0
U2l6ZSYgb2Zmc2V0RnJvbVJvb3QpCiB7Ci0gICAgQVNTRVJUKG9mZnNldEZyb21Sb290KTsKICAg
ICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGZyYWdtZW50cy5zaXplKCk7ICsraSkgewogICAgICAg
ICBMYXllckZyYWdtZW50JiBmcmFnbWVudCA9IGZyYWdtZW50cy5hdChpKTsKICAgICAgICAgZnJh
Z21lbnQuc2hvdWxkUGFpbnRDb250ZW50ID0gc2hvdWxkUGFpbnRDb250ZW50OwogICAgICAgICBp
ZiAodGhpcyAhPSBsb2NhbFBhaW50aW5nSW5mby5yb290TGF5ZXIgfHwgIShsb2NhbFBhaW50Rmxh
Z3MgJiBQYWludExheWVyUGFpbnRpbmdPdmVyZmxvd0NvbnRlbnRzKSkgewotICAgICAgICAgICAg
TGF5b3V0U2l6ZSBuZXdPZmZzZXRGcm9tUm9vdCA9ICpvZmZzZXRGcm9tUm9vdCArIGZyYWdtZW50
LnBhZ2luYXRpb25PZmZzZXQ7Ci0gICAgICAgICAgICBmcmFnbWVudC5zaG91bGRQYWludENvbnRl
bnQgJj0gaW50ZXJzZWN0c0RhbWFnZVJlY3QoZnJhZ21lbnQubGF5ZXJCb3VuZHMsIGZyYWdtZW50
LmJhY2tncm91bmRSZWN0LnJlY3QoKSwgbG9jYWxQYWludGluZ0luZm8ucm9vdExheWVyLCAmbmV3
T2Zmc2V0RnJvbVJvb3QsIGZyYWdtZW50Lmhhc0JvdW5kaW5nQm94ID8gJmZyYWdtZW50LmJvdW5k
aW5nQm94IDogMCk7CisgICAgICAgICAgICBMYXlvdXRTaXplIG5ld09mZnNldEZyb21Sb290ID0g
b2Zmc2V0RnJvbVJvb3QgKyBmcmFnbWVudC5wYWdpbmF0aW9uT2Zmc2V0OworICAgICAgICAgICAg
ZnJhZ21lbnQuc2hvdWxkUGFpbnRDb250ZW50ICY9IGludGVyc2VjdHNEYW1hZ2VSZWN0KGZyYWdt
ZW50LmxheWVyQm91bmRzLCBmcmFnbWVudC5iYWNrZ3JvdW5kUmVjdC5yZWN0KCksIGxvY2FsUGFp
bnRpbmdJbmZvLnJvb3RMYXllciwgbmV3T2Zmc2V0RnJvbVJvb3QsIGZyYWdtZW50Lmhhc0JvdW5k
aW5nQm94ID8gJmZyYWdtZW50LmJvdW5kaW5nQm94IDogMCk7CiAgICAgICAgIH0KICAgICB9CiB9
CkBAIC00MzE3LDcgKzQzMTcsNyBAQCB2b2lkIFJlbmRlckxheWVyOjpwYWludFRyYW5zZm9ybWVk
TGF5ZXJJbnRvRnJhZ21lbnRzKEdyYXBoaWNzQ29udGV4dCogY29udGV4dCwgYwogICAgIExheW91
dFJlY3QgdHJhbnNmb3JtZWRFeHRlbnQgPSB0cmFuc3BhcmVuY3lDbGlwQm94KHRoaXMsIHBhZ2lu
YXRlZExheWVyLCBQYWludGluZ1RyYW5zcGFyZW5jeUNsaXBCb3gsIFJvb3RPZlRyYW5zcGFyZW5j
eUNsaXBCb3gsIHBhaW50aW5nSW5mby5wYWludEJlaGF2aW9yKTsKICAgICBwYWdpbmF0ZWRMYXll
ci0+Y29sbGVjdEZyYWdtZW50cyhlbmNsb3NpbmdQYWdpbmF0aW9uRnJhZ21lbnRzLCBwYWludGlu
Z0luZm8ucm9vdExheWVyLCBwYWludGluZ0luZm8ucGFpbnREaXJ0eVJlY3QsIEV4Y2x1ZGVDb21w
b3NpdGVkUGFnaW5hdGVkTGF5ZXJzLAogICAgICAgICAocGFpbnRGbGFncyAmIFBhaW50TGF5ZXJU
ZW1wb3JhcnlDbGlwUmVjdHMpID8gVGVtcG9yYXJ5Q2xpcFJlY3RzIDogUGFpbnRpbmdDbGlwUmVj
dHMsIElnbm9yZU92ZXJsYXlTY3JvbGxiYXJTaXplLAotICAgICAgICAocGFpbnRGbGFncyAmIFBh
aW50TGF5ZXJQYWludGluZ092ZXJmbG93Q29udGVudHMpID8gSWdub3JlT3ZlcmZsb3dDbGlwIDog
UmVzcGVjdE92ZXJmbG93Q2xpcCwgJm9mZnNldE9mUGFnaW5hdGlvbkxheWVyRnJvbVJvb3QsICZ0
cmFuc2Zvcm1lZEV4dGVudCk7CisgICAgICAgIChwYWludEZsYWdzICYgUGFpbnRMYXllclBhaW50
aW5nT3ZlcmZsb3dDb250ZW50cykgPyBJZ25vcmVPdmVyZmxvd0NsaXAgOiBSZXNwZWN0T3ZlcmZs
b3dDbGlwLCBvZmZzZXRPZlBhZ2luYXRpb25MYXllckZyb21Sb290LCAmdHJhbnNmb3JtZWRFeHRl
bnQpOwogICAgIAogICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgZW5jbG9zaW5nUGFnaW5hdGlv
bkZyYWdtZW50cy5zaXplKCk7ICsraSkgewogICAgICAgICBjb25zdCBMYXllckZyYWdtZW50JiBm
cmFnbWVudCA9IGVuY2xvc2luZ1BhZ2luYXRpb25GcmFnbWVudHMuYXQoaSk7CkBAIC00ODA5LDcg
KzQ4MDksOCBAQCBSZW5kZXJMYXllciogUmVuZGVyTGF5ZXI6OmhpdFRlc3RMYXllcihSZW5kZXJM
YXllciogcm9vdExheWVyLCBSZW5kZXJMYXllciogY29udAogCiAgICAgLy8gQ29sbGVjdCB0aGUg
ZnJhZ21lbnRzLiBUaGlzIHdpbGwgY29tcHV0ZSB0aGUgY2xpcCByZWN0YW5nbGVzIGZvciBlYWNo
IGxheWVyIGZyYWdtZW50LgogICAgIExheWVyRnJhZ21lbnRzIGxheWVyRnJhZ21lbnRzOwotICAg
IGNvbGxlY3RGcmFnbWVudHMobGF5ZXJGcmFnbWVudHMsIHJvb3RMYXllciwgaGl0VGVzdFJlY3Qs
IEluY2x1ZGVDb21wb3NpdGVkUGFnaW5hdGVkTGF5ZXJzLCBSb290UmVsYXRpdmVDbGlwUmVjdHMs
IEluY2x1ZGVPdmVybGF5U2Nyb2xsYmFyU2l6ZSk7CisgICAgY29sbGVjdEZyYWdtZW50cyhsYXll
ckZyYWdtZW50cywgcm9vdExheWVyLCBoaXRUZXN0UmVjdCwgSW5jbHVkZUNvbXBvc2l0ZWRQYWdp
bmF0ZWRMYXllcnMsIFJvb3RSZWxhdGl2ZUNsaXBSZWN0cywgSW5jbHVkZU92ZXJsYXlTY3JvbGxi
YXJTaXplLCBSZXNwZWN0T3ZlcmZsb3dDbGlwLAorICAgICAgICBvZmZzZXRGcm9tQW5jZXN0b3Io
cm9vdExheWVyKSk7CiAKICAgICBpZiAoY2FuUmVzaXplKCkgJiYgaGl0VGVzdFJlc2l6ZXJJbkZy
YWdtZW50cyhsYXllckZyYWdtZW50cywgaGl0VGVzdExvY2F0aW9uKSkgewogICAgICAgICByZW5k
ZXJlcigpLnVwZGF0ZUhpdFRlc3RSZXN1bHQocmVzdWx0LCBoaXRUZXN0TG9jYXRpb24ucG9pbnQo
KSk7CkBAIC00OTE2LDcgKzQ5MTcsNyBAQCBSZW5kZXJMYXllciogUmVuZGVyTGF5ZXI6OmhpdFRl
c3RUcmFuc2Zvcm1lZExheWVySW5GcmFnbWVudHMoUmVuZGVyTGF5ZXIqIHJvb3RMYQogICAgIFJl
bmRlckxheWVyKiBwYWdpbmF0ZWRMYXllciA9IGVuY2xvc2luZ1BhZ2luYXRpb25MYXllcihJbmNs
dWRlQ29tcG9zaXRlZFBhZ2luYXRlZExheWVycyk7CiAgICAgTGF5b3V0UmVjdCB0cmFuc2Zvcm1l
ZEV4dGVudCA9IHRyYW5zcGFyZW5jeUNsaXBCb3godGhpcywgcGFnaW5hdGVkTGF5ZXIsIEhpdFRl
c3RpbmdUcmFuc3BhcmVuY3lDbGlwQm94LCBSb290T2ZUcmFuc3BhcmVuY3lDbGlwQm94KTsKICAg
ICBwYWdpbmF0ZWRMYXllci0+Y29sbGVjdEZyYWdtZW50cyhlbmNsb3NpbmdQYWdpbmF0aW9uRnJh
Z21lbnRzLCByb290TGF5ZXIsIGhpdFRlc3RSZWN0LCBJbmNsdWRlQ29tcG9zaXRlZFBhZ2luYXRl
ZExheWVycywKLSAgICAgICAgUm9vdFJlbGF0aXZlQ2xpcFJlY3RzLCBJbmNsdWRlT3ZlcmxheVNj
cm9sbGJhclNpemUsIFJlc3BlY3RPdmVyZmxvd0NsaXAsICZvZmZzZXRPZlBhZ2luYXRpb25MYXll
ckZyb21Sb290LCAmdHJhbnNmb3JtZWRFeHRlbnQpOworICAgICAgICBSb290UmVsYXRpdmVDbGlw
UmVjdHMsIEluY2x1ZGVPdmVybGF5U2Nyb2xsYmFyU2l6ZSwgUmVzcGVjdE92ZXJmbG93Q2xpcCwg
b2Zmc2V0T2ZQYWdpbmF0aW9uTGF5ZXJGcm9tUm9vdCwgJnRyYW5zZm9ybWVkRXh0ZW50KTsKIAog
ICAgIGZvciAoaW50IGkgPSBlbmNsb3NpbmdQYWdpbmF0aW9uRnJhZ21lbnRzLnNpemUoKSAtIDE7
IGkgPj0gMDsgLS1pKSB7CiAgICAgICAgIGNvbnN0IExheWVyRnJhZ21lbnQmIGZyYWdtZW50ID0g
ZW5jbG9zaW5nUGFnaW5hdGlvbkZyYWdtZW50cy5hdChpKTsKQEAgLTUyNTEsNyArNTI1Miw3IEBA
IENsaXBSZWN0IFJlbmRlckxheWVyOjpiYWNrZ3JvdW5kQ2xpcFJlY3QoY29uc3QgQ2xpcFJlY3Rz
Q29udGV4dCYgY2xpcFJlY3RzQ29udGV4CiB9CiAKIHZvaWQgUmVuZGVyTGF5ZXI6OmNhbGN1bGF0
ZVJlY3RzKGNvbnN0IENsaXBSZWN0c0NvbnRleHQmIGNsaXBSZWN0c0NvbnRleHQsIGNvbnN0IExh
eW91dFJlY3QmIHBhaW50RGlydHlSZWN0LCBMYXlvdXRSZWN0JiBsYXllckJvdW5kcywKLSAgICBD
bGlwUmVjdCYgYmFja2dyb3VuZFJlY3QsIENsaXBSZWN0JiBmb3JlZ3JvdW5kUmVjdCwgQ2xpcFJl
Y3QmIG91dGxpbmVSZWN0LCBjb25zdCBMYXlvdXRTaXplKiBvZmZzZXRGcm9tUm9vdCkgY29uc3QK
KyAgICBDbGlwUmVjdCYgYmFja2dyb3VuZFJlY3QsIENsaXBSZWN0JiBmb3JlZ3JvdW5kUmVjdCwg
Q2xpcFJlY3QmIG91dGxpbmVSZWN0LCBjb25zdCBMYXlvdXRTaXplJiBvZmZzZXRGcm9tUm9vdCkg
Y29uc3QKIHsKICAgICBpZiAoY2xpcFJlY3RzQ29udGV4dC5yb290TGF5ZXIgIT0gdGhpcyAmJiBw
YXJlbnQoKSkgewogICAgICAgICBiYWNrZ3JvdW5kUmVjdCA9IGJhY2tncm91bmRDbGlwUmVjdChj
bGlwUmVjdHNDb250ZXh0KTsKQEAgLTUyNTksMjEgKzUyNjAsMTYgQEAgdm9pZCBSZW5kZXJMYXll
cjo6Y2FsY3VsYXRlUmVjdHMoY29uc3QgQ2xpcFJlY3RzQ29udGV4dCYgY2xpcFJlY3RzQ29udGV4
dCwgY29uc3QKICAgICB9IGVsc2UKICAgICAgICAgYmFja2dyb3VuZFJlY3QgPSBwYWludERpcnR5
UmVjdDsKIAotICAgIExheW91dFNpemUgb2Zmc2V0RnJvbUFjZXN0b3I7Ci0gICAgaWYgKG9mZnNl
dEZyb21Sb290KQotICAgICAgICBvZmZzZXRGcm9tQWNlc3RvciA9ICpvZmZzZXRGcm9tUm9vdDsK
LSAgICBlbHNlCi0gICAgICAgIG9mZnNldEZyb21BY2VzdG9yID0gb2Zmc2V0RnJvbUFuY2VzdG9y
KGNsaXBSZWN0c0NvbnRleHQucm9vdExheWVyKTsKLQorICAgIExheW91dFNpemUgb2Zmc2V0RnJv
bVJvb3RMb2NhbCA9IG9mZnNldEZyb21Sb290OwogICAgIFJlbmRlck5hbWVkRmxvd0ZyYWdtZW50
KiBuYW1lZEZsb3dGcmFnbWVudCA9IGN1cnJlbnRSZW5kZXJOYW1lZEZsb3dGcmFnbWVudCgpOwog
ICAgIC8vIElmIHRoZSB2aWV3IGlzIHNjcm9sbGVkLCB0aGUgZmxvdyB0aHJlYWQgaXMgbm90IHNj
cm9sbGVkIHdpdGggaXQgYW5kIHdlIHNob3VsZAogICAgIC8vIHRha2UgdGhlIHNjcm9sbCBvZmZz
ZXQgaW50byBhY2NvdW50LgogICAgIGlmIChjbGlwUmVjdHNDb250ZXh0LnJvb3RMYXllci0+aXNP
dXRPZkZsb3dSZW5kZXJGbG93VGhyZWFkKCkgJiYgIW5hbWVkRmxvd0ZyYWdtZW50KSB7CiAgICAg
ICAgIExheW91dFBvaW50IGFic1BvcyA9IExheW91dFBvaW50KHJlbmRlcmVyKCkudmlldygpLmxv
Y2FsVG9BYnNvbHV0ZShGbG9hdFBvaW50KCksIElzRml4ZWQpKTsKLSAgICAgICAgb2Zmc2V0RnJv
bUFjZXN0b3IgKz0gdG9MYXlvdXRTaXplKGFic1Bvcyk7CisgICAgICAgIG9mZnNldEZyb21Sb290
TG9jYWwgKz0gdG9MYXlvdXRTaXplKGFic1Bvcyk7CiAgICAgfQogCi0gICAgbGF5ZXJCb3VuZHMg
PSBMYXlvdXRSZWN0KHRvTGF5b3V0UG9pbnQob2Zmc2V0RnJvbUFjZXN0b3IpLCBzaXplKCkpOwor
ICAgIGxheWVyQm91bmRzID0gTGF5b3V0UmVjdCh0b0xheW91dFBvaW50KG9mZnNldEZyb21Sb290
TG9jYWwpLCBzaXplKCkpOwogCiAgICAgZm9yZWdyb3VuZFJlY3QgPSBiYWNrZ3JvdW5kUmVjdDsK
ICAgICBvdXRsaW5lUmVjdCA9IGJhY2tncm91bmRSZWN0OwpAQCAtNTI5Niw3ICs1MjkyLDcgQEAg
dm9pZCBSZW5kZXJMYXllcjo6Y2FsY3VsYXRlUmVjdHMoY29uc3QgQ2xpcFJlY3RzQ29udGV4dCYg
Y2xpcFJlY3RzQ29udGV4dCwgY29uc3QKICAgICAgICAgICAgICAgICByZW5kZXJlckNvbnRhaW5p
bmdCbG9jay0+ZmxpcEZvcldyaXRpbmdNb2RlKGxheWVyQm91bmRzV2l0aFZpc3VhbE92ZXJmbG93
KTsKICAgICAgICAgfQogCi0gICAgICAgIGxheWVyQm91bmRzV2l0aFZpc3VhbE92ZXJmbG93Lm1v
dmUob2Zmc2V0RnJvbUFjZXN0b3IpOworICAgICAgICBsYXllckJvdW5kc1dpdGhWaXN1YWxPdmVy
Zmxvdy5tb3ZlKG9mZnNldEZyb21Sb290TG9jYWwpOwogICAgICAgICBiYWNrZ3JvdW5kUmVjdC5p
bnRlcnNlY3QobGF5ZXJCb3VuZHNXaXRoVmlzdWFsT3ZlcmZsb3cpOwogCiAgICAgICAgIGZvcmVn
cm91bmRSZWN0ID0gYmFja2dyb3VuZFJlY3Q7CkBAIC01MzEzLDE0ICs1MzA5LDE0IEBAIHZvaWQg
UmVuZGVyTGF5ZXI6OmNhbGN1bGF0ZVJlY3RzKGNvbnN0IENsaXBSZWN0c0NvbnRleHQmIGNsaXBS
ZWN0c0NvbnRleHQsIGNvbnN0CiAgICAgaWYgKHJlbmRlcmVyKCkuaGFzQ2xpcE9yT3ZlcmZsb3dD
bGlwKCkpIHsKICAgICAgICAgLy8gVGhpcyBsYXllciBlc3RhYmxpc2hlcyBhIGNsaXAgb2Ygc29t
ZSBraW5kLgogICAgICAgICBpZiAocmVuZGVyZXIoKS5oYXNPdmVyZmxvd0NsaXAoKSAmJiAodGhp
cyAhPSBjbGlwUmVjdHNDb250ZXh0LnJvb3RMYXllciB8fCBjbGlwUmVjdHNDb250ZXh0LnJlc3Bl
Y3RPdmVyZmxvd0NsaXAgPT0gUmVzcGVjdE92ZXJmbG93Q2xpcCkpIHsKLSAgICAgICAgICAgIGZv
cmVncm91bmRSZWN0LmludGVyc2VjdCh0b1JlbmRlckJveChyZW5kZXJlcigpKS5vdmVyZmxvd0Ns
aXBSZWN0KHRvTGF5b3V0UG9pbnQob2Zmc2V0RnJvbUFjZXN0b3IpLCBuYW1lZEZsb3dGcmFnbWVu
dCwgY2xpcFJlY3RzQ29udGV4dC5vdmVybGF5U2Nyb2xsYmFyU2l6ZVJlbGV2YW5jeSkpOworICAg
ICAgICAgICAgZm9yZWdyb3VuZFJlY3QuaW50ZXJzZWN0KHRvUmVuZGVyQm94KHJlbmRlcmVyKCkp
Lm92ZXJmbG93Q2xpcFJlY3QodG9MYXlvdXRQb2ludChvZmZzZXRGcm9tUm9vdExvY2FsKSwgbmFt
ZWRGbG93RnJhZ21lbnQsIGNsaXBSZWN0c0NvbnRleHQub3ZlcmxheVNjcm9sbGJhclNpemVSZWxl
dmFuY3kpKTsKICAgICAgICAgICAgIGlmIChyZW5kZXJlcigpLnN0eWxlKCkuaGFzQm9yZGVyUmFk
aXVzKCkpCiAgICAgICAgICAgICAgICAgZm9yZWdyb3VuZFJlY3Quc2V0SGFzUmFkaXVzKHRydWUp
OwogICAgICAgICB9CiAKICAgICAgICAgaWYgKHJlbmRlcmVyKCkuaGFzQ2xpcCgpKSB7CiAgICAg
ICAgICAgICAvLyBDbGlwIGFwcGxpZXMgdG8gKnVzKiBhcyB3ZWxsLCBzbyBnbyBhaGVhZCBhbmQg
dXBkYXRlIHRoZSBkYW1hZ2VSZWN0LgotICAgICAgICAgICAgTGF5b3V0UmVjdCBuZXdQb3NDbGlw
ID0gdG9SZW5kZXJCb3gocmVuZGVyZXIoKSkuY2xpcFJlY3QodG9MYXlvdXRQb2ludChvZmZzZXRG
cm9tQWNlc3RvciksIG5hbWVkRmxvd0ZyYWdtZW50KTsKKyAgICAgICAgICAgIExheW91dFJlY3Qg
bmV3UG9zQ2xpcCA9IHRvUmVuZGVyQm94KHJlbmRlcmVyKCkpLmNsaXBSZWN0KHRvTGF5b3V0UG9p
bnQob2Zmc2V0RnJvbVJvb3RMb2NhbCksIG5hbWVkRmxvd0ZyYWdtZW50KTsKICAgICAgICAgICAg
IGJhY2tncm91bmRSZWN0LmludGVyc2VjdChuZXdQb3NDbGlwKTsKICAgICAgICAgICAgIGZvcmVn
cm91bmRSZWN0LmludGVyc2VjdChuZXdQb3NDbGlwKTsKICAgICAgICAgICAgIG91dGxpbmVSZWN0
LmludGVyc2VjdChuZXdQb3NDbGlwKTsKQEAgLTUzMzQsNyArNTMzMCw3IEBAIHZvaWQgUmVuZGVy
TGF5ZXI6OmNhbGN1bGF0ZVJlY3RzKGNvbnN0IENsaXBSZWN0c0NvbnRleHQmIGNsaXBSZWN0c0Nv
bnRleHQsIGNvbnN0CiAgICAgICAgICAgICAvLyBpbmRpdmlkdWFsIHJlZ2lvbiBib3hlcyBhcyBv
dmVyZmxvdy4KICAgICAgICAgICAgIExheW91dFJlY3QgbGF5ZXJCb3VuZHNXaXRoVmlzdWFsT3Zl
cmZsb3cgPSBuYW1lZEZsb3dGcmFnbWVudCA/IG5hbWVkRmxvd0ZyYWdtZW50LT52aXN1YWxPdmVy
Zmxvd1JlY3RGb3JCb3gocmVuZGVyQm94KCkpIDogcmVuZGVyQm94KCktPnZpc3VhbE92ZXJmbG93
UmVjdCgpOwogICAgICAgICAgICAgcmVuZGVyQm94KCktPmZsaXBGb3JXcml0aW5nTW9kZShsYXll
ckJvdW5kc1dpdGhWaXN1YWxPdmVyZmxvdyk7IC8vIExheWVycyBhcmUgaW4gcGh5c2ljYWwgY29v
cmRpbmF0ZXMsIHNvIHRoZSBvdmVyZmxvdyBoYXMgdG8gYmUgZmxpcHBlZC4KLSAgICAgICAgICAg
IGxheWVyQm91bmRzV2l0aFZpc3VhbE92ZXJmbG93Lm1vdmUob2Zmc2V0RnJvbUFjZXN0b3IpOwor
ICAgICAgICAgICAgbGF5ZXJCb3VuZHNXaXRoVmlzdWFsT3ZlcmZsb3cubW92ZShvZmZzZXRGcm9t
Um9vdExvY2FsKTsKICAgICAgICAgICAgIGlmICh0aGlzICE9IGNsaXBSZWN0c0NvbnRleHQucm9v
dExheWVyIHx8IGNsaXBSZWN0c0NvbnRleHQucmVzcGVjdE92ZXJmbG93Q2xpcCA9PSBSZXNwZWN0
T3ZlcmZsb3dDbGlwKQogICAgICAgICAgICAgICAgIGJhY2tncm91bmRSZWN0LmludGVyc2VjdChs
YXllckJvdW5kc1dpdGhWaXN1YWxPdmVyZmxvdyk7CiAgICAgICAgIH0gZWxzZSB7CkBAIC01MzQz
LDcgKzUzMzksNyBAQCB2b2lkIFJlbmRlckxheWVyOjpjYWxjdWxhdGVSZWN0cyhjb25zdCBDbGlw
UmVjdHNDb250ZXh0JiBjbGlwUmVjdHNDb250ZXh0LCBjb25zdAogICAgICAgICAgICAgaWYgKG5h
bWVkRmxvd0ZyYWdtZW50KQogICAgICAgICAgICAgICAgIGJvdW5kcyA9IG5hbWVkRmxvd0ZyYWdt
ZW50LT5yZWN0Rmxvd1BvcnRpb25Gb3JCb3gocmVuZGVyQm94KCksIGJvdW5kcyk7CiAKLSAgICAg
ICAgICAgIGJvdW5kcy5tb3ZlKG9mZnNldEZyb21BY2VzdG9yKTsKKyAgICAgICAgICAgIGJvdW5k
cy5tb3ZlKG9mZnNldEZyb21Sb290TG9jYWwpOwogICAgICAgICAgICAgaWYgKHRoaXMgIT0gY2xp
cFJlY3RzQ29udGV4dC5yb290TGF5ZXIgfHwgY2xpcFJlY3RzQ29udGV4dC5yZXNwZWN0T3ZlcmZs
b3dDbGlwID09IFJlc3BlY3RPdmVyZmxvd0NsaXApCiAgICAgICAgICAgICAgICAgYmFja2dyb3Vu
ZFJlY3QuaW50ZXJzZWN0KGJvdW5kcyk7CiAgICAgICAgICAgICAKQEAgLTUzNzEsNyArNTM2Nyw3
IEBAIExheW91dFJlY3QgUmVuZGVyTGF5ZXI6OmNoaWxkcmVuQ2xpcFJlY3QoKSBjb25zdAogICAg
IENsaXBSZWN0IGJhY2tncm91bmRSZWN0LCBmb3JlZ3JvdW5kUmVjdCwgb3V0bGluZVJlY3Q7CiAg
ICAgQ2xpcFJlY3RzQ29udGV4dCBjbGlwUmVjdHNDb250ZXh0KGNsaXBwaW5nUm9vdExheWVyLCBU
ZW1wb3JhcnlDbGlwUmVjdHMpOwogICAgIC8vIE5lZWQgdG8gdXNlIHRlbXBvcmFyeSBjbGlwIHJl
Y3RzLCBiZWNhdXNlIHRoZSB2YWx1ZSBvZiAnZG9udENsaXBUb092ZXJmbG93JyBtYXkgYmUgZGlm
ZmVyZW50IGZyb20gdGhlIHBhaW50aW5nIHBhdGggKDxyZGFyOi8vcHJvYmxlbS8xMTg0NDkwOT4p
LgotICAgIGNhbGN1bGF0ZVJlY3RzKGNsaXBSZWN0c0NvbnRleHQsIHJlbmRlcmVyKCkudmlldygp
LnVuc2NhbGVkRG9jdW1lbnRSZWN0KCksIGxheWVyQm91bmRzLCBiYWNrZ3JvdW5kUmVjdCwgZm9y
ZWdyb3VuZFJlY3QsIG91dGxpbmVSZWN0KTsKKyAgICBjYWxjdWxhdGVSZWN0cyhjbGlwUmVjdHND
b250ZXh0LCByZW5kZXJlcigpLnZpZXcoKS51bnNjYWxlZERvY3VtZW50UmVjdCgpLCBsYXllckJv
dW5kcywgYmFja2dyb3VuZFJlY3QsIGZvcmVncm91bmRSZWN0LCBvdXRsaW5lUmVjdCwgb2Zmc2V0
RnJvbUFuY2VzdG9yKGNsaXBSZWN0c0NvbnRleHQucm9vdExheWVyKSk7CiAgICAgcmV0dXJuIGNs
aXBwaW5nUm9vdExheWVyLT5yZW5kZXJlcigpLmxvY2FsVG9BYnNvbHV0ZVF1YWQoRmxvYXRRdWFk
KGZvcmVncm91bmRSZWN0LnJlY3QoKSkpLmVuY2xvc2luZ0JvdW5kaW5nQm94KCk7CiB9CiAKQEAg
LTUzODMsNyArNTM3OSw3IEBAIExheW91dFJlY3QgUmVuZGVyTGF5ZXI6OnNlbGZDbGlwUmVjdCgp
IGNvbnN0CiAgICAgTGF5b3V0UmVjdCBsYXllckJvdW5kczsKICAgICBDbGlwUmVjdCBiYWNrZ3Jv
dW5kUmVjdCwgZm9yZWdyb3VuZFJlY3QsIG91dGxpbmVSZWN0OwogICAgIENsaXBSZWN0c0NvbnRl
eHQgY2xpcFJlY3RzQ29udGV4dChjbGlwcGluZ1Jvb3RMYXllciwgUGFpbnRpbmdDbGlwUmVjdHMp
OwotICAgIGNhbGN1bGF0ZVJlY3RzKGNsaXBSZWN0c0NvbnRleHQsIHJlbmRlcmVyKCkudmlldygp
LmRvY3VtZW50UmVjdCgpLCBsYXllckJvdW5kcywgYmFja2dyb3VuZFJlY3QsIGZvcmVncm91bmRS
ZWN0LCBvdXRsaW5lUmVjdCk7CisgICAgY2FsY3VsYXRlUmVjdHMoY2xpcFJlY3RzQ29udGV4dCwg
cmVuZGVyZXIoKS52aWV3KCkuZG9jdW1lbnRSZWN0KCksIGxheWVyQm91bmRzLCBiYWNrZ3JvdW5k
UmVjdCwgZm9yZWdyb3VuZFJlY3QsIG91dGxpbmVSZWN0LCBvZmZzZXRGcm9tQW5jZXN0b3IoY2xp
cFJlY3RzQ29udGV4dC5yb290TGF5ZXIpKTsKICAgICByZXR1cm4gY2xpcHBpbmdSb290TGF5ZXIt
PnJlbmRlcmVyKCkubG9jYWxUb0Fic29sdXRlUXVhZChGbG9hdFF1YWQoYmFja2dyb3VuZFJlY3Qu
cmVjdCgpKSkuZW5jbG9zaW5nQm91bmRpbmdCb3goKTsKIH0KIApAQCAtNTM5OSw3ICs1Mzk1LDcg
QEAgTGF5b3V0UmVjdCBSZW5kZXJMYXllcjo6bG9jYWxDbGlwUmVjdChib29sJiBjbGlwRXhjZWVk
c0JvdW5kcykgY29uc3QKICAgICBMYXlvdXRSZWN0IGxheWVyQm91bmRzOwogICAgIENsaXBSZWN0
IGJhY2tncm91bmRSZWN0LCBmb3JlZ3JvdW5kUmVjdCwgb3V0bGluZVJlY3Q7CiAgICAgQ2xpcFJl
Y3RzQ29udGV4dCBjbGlwUmVjdHNDb250ZXh0KGNsaXBwaW5nUm9vdExheWVyLCBQYWludGluZ0Ns
aXBSZWN0cyk7Ci0gICAgY2FsY3VsYXRlUmVjdHMoY2xpcFJlY3RzQ29udGV4dCwgTGF5b3V0UmVj
dDo6aW5maW5pdGVSZWN0KCksIGxheWVyQm91bmRzLCBiYWNrZ3JvdW5kUmVjdCwgZm9yZWdyb3Vu
ZFJlY3QsIG91dGxpbmVSZWN0LCAmb2Zmc2V0RnJvbVJvb3QpOworICAgIGNhbGN1bGF0ZVJlY3Rz
KGNsaXBSZWN0c0NvbnRleHQsIExheW91dFJlY3Q6OmluZmluaXRlUmVjdCgpLCBsYXllckJvdW5k
cywgYmFja2dyb3VuZFJlY3QsIGZvcmVncm91bmRSZWN0LCBvdXRsaW5lUmVjdCwgb2Zmc2V0RnJv
bVJvb3QpOwogCiAgICAgTGF5b3V0UmVjdCBjbGlwUmVjdCA9IGJhY2tncm91bmRSZWN0LnJlY3Qo
KTsKICAgICBpZiAoY2xpcFJlY3QgPT0gTGF5b3V0UmVjdDo6aW5maW5pdGVSZWN0KCkpCkBAIC01
NDQ1LDcgKzU0NDEsNyBAQCB2b2lkIFJlbmRlckxheWVyOjpyZXBhaW50QmxvY2tTZWxlY3Rpb25H
YXBzKCkKICAgICAgICAgcmVuZGVyZXIoKS5yZXBhaW50UmVjdGFuZ2xlKHJlY3QpOwogfQogCi1i
b29sIFJlbmRlckxheWVyOjppbnRlcnNlY3RzRGFtYWdlUmVjdChjb25zdCBMYXlvdXRSZWN0JiBs
YXllckJvdW5kcywgY29uc3QgTGF5b3V0UmVjdCYgZGFtYWdlUmVjdCwgY29uc3QgUmVuZGVyTGF5
ZXIqIHJvb3RMYXllciwgY29uc3QgTGF5b3V0U2l6ZSogb2Zmc2V0RnJvbVJvb3QsIGNvbnN0IExh
eW91dFJlY3QqIGNhY2hlZEJvdW5kaW5nQm94KSBjb25zdAorYm9vbCBSZW5kZXJMYXllcjo6aW50
ZXJzZWN0c0RhbWFnZVJlY3QoY29uc3QgTGF5b3V0UmVjdCYgbGF5ZXJCb3VuZHMsIGNvbnN0IExh
eW91dFJlY3QmIGRhbWFnZVJlY3QsIGNvbnN0IFJlbmRlckxheWVyKiByb290TGF5ZXIsIGNvbnN0
IExheW91dFNpemUmIG9mZnNldEZyb21Sb290LCBjb25zdCBMYXlvdXRSZWN0KiBjYWNoZWRCb3Vu
ZGluZ0JveCkgY29uc3QKIHsKICAgICAvLyBBbHdheXMgZXhhbWluZSB0aGUgY2FudmFzIGFuZCB0
aGUgcm9vdC4KICAgICAvLyBGSVhNRTogQ291bGQgZWxpbWluYXRlIHRoZSBpc1Jvb3QoKSBjaGVj
ayBpZiB3ZSBmaXggYmFja2dyb3VuZCBwYWludGluZyBzbyB0aGF0IHRoZSBSZW5kZXJWaWV3CkBA
IC01NDgxLDcgKzU0NzcsNyBAQCBib29sIFJlbmRlckxheWVyOjppbnRlcnNlY3RzRGFtYWdlUmVj
dChjb25zdCBMYXlvdXRSZWN0JiBsYXllckJvdW5kcywgY29uc3QgTGF5bwogICAgIGlmIChjYWNo
ZWRCb3VuZGluZ0JveCkKICAgICAgICAgcmV0dXJuIGNhY2hlZEJvdW5kaW5nQm94LT5pbnRlcnNl
Y3RzKGRhbWFnZVJlY3QpOwogICAgIAotICAgIHJldHVybiBib3VuZGluZ0JveChyb290TGF5ZXIs
IDAsIG9mZnNldEZyb21Sb290KS5pbnRlcnNlY3RzKGRhbWFnZVJlY3QpOworICAgIHJldHVybiBi
b3VuZGluZ0JveChyb290TGF5ZXIsIG9mZnNldEZyb21Sb290KS5pbnRlcnNlY3RzKGRhbWFnZVJl
Y3QpOwogfQogCiBMYXlvdXRSZWN0IFJlbmRlckxheWVyOjpsb2NhbEJvdW5kaW5nQm94KENhbGN1
bGF0ZUxheWVyQm91bmRzRmxhZ3MgZmxhZ3MpIGNvbnN0CkBAIC01NTI3LDcgKzU1MjMsNyBAQCBM
YXlvdXRSZWN0IFJlbmRlckxheWVyOjpsb2NhbEJvdW5kaW5nQm94KENhbGN1bGF0ZUxheWVyQm91
bmRzRmxhZ3MgZmxhZ3MpIGNvbnN0CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAotTGF5b3V0UmVj
dCBSZW5kZXJMYXllcjo6Ym91bmRpbmdCb3goY29uc3QgUmVuZGVyTGF5ZXIqIGFuY2VzdG9yTGF5
ZXIsIENhbGN1bGF0ZUxheWVyQm91bmRzRmxhZ3MgZmxhZ3MsIGNvbnN0IExheW91dFNpemUqIG9m
ZnNldEZyb21Sb290KSBjb25zdAorTGF5b3V0UmVjdCBSZW5kZXJMYXllcjo6Ym91bmRpbmdCb3go
Y29uc3QgUmVuZGVyTGF5ZXIqIGFuY2VzdG9yTGF5ZXIsIGNvbnN0IExheW91dFNpemUmIG9mZnNl
dEZyb21Sb290LCBDYWxjdWxhdGVMYXllckJvdW5kc0ZsYWdzIGZsYWdzKSBjb25zdAogeyAgICAK
ICAgICBMYXlvdXRSZWN0IHJlc3VsdCA9IGxvY2FsQm91bmRpbmdCb3goZmxhZ3MpOwogICAgIGlm
IChyZW5kZXJlcigpLmlzQm94KCkpCkBAIC01NTYxLDI3ICs1NTU3LDIzIEBAIExheW91dFJlY3Qg
UmVuZGVyTGF5ZXI6OmJvdW5kaW5nQm94KGNvbnN0IFJlbmRlckxheWVyKiBhbmNlc3RvckxheWVy
LCBDYWxjdWxhdGVMCiAgICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgfQogICAgIAotICAgIExh
eW91dFNpemUgZGVsdGE7Ci0gICAgaWYgKG9mZnNldEZyb21Sb290KQotICAgICAgICBkZWx0YSA9
ICpvZmZzZXRGcm9tUm9vdDsKLSAgICBlbHNlCi0gICAgICAgIGRlbHRhID0gb2Zmc2V0RnJvbUFu
Y2VzdG9yKGFuY2VzdG9yTGF5ZXIpOwotICAgIAotICAgIHJlc3VsdC5tb3ZlKGRlbHRhKTsKKyAg
ICByZXN1bHQubW92ZShvZmZzZXRGcm9tUm9vdCk7CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAog
SW50UmVjdCBSZW5kZXJMYXllcjo6YWJzb2x1dGVCb3VuZGluZ0JveCgpIGNvbnN0CiB7Ci0gICAg
cmV0dXJuIHBpeGVsU25hcHBlZEludFJlY3QoYm91bmRpbmdCb3gocm9vdCgpKSk7CisgICAgY29u
c3QgUmVuZGVyTGF5ZXIqIHJvb3RMYXllciA9IHJvb3QoKTsKKyAgICByZXR1cm4gcGl4ZWxTbmFw
cGVkSW50UmVjdChib3VuZGluZ0JveChyb290TGF5ZXIsIG9mZnNldEZyb21BbmNlc3Rvcihyb290
TGF5ZXIpKSk7CiB9CiAKIEZsb2F0UmVjdCBSZW5kZXJMYXllcjo6YWJzb2x1dGVCb3VuZGluZ0Jv
eEZvclBhaW50aW5nKCkgY29uc3QKIHsKLSAgICByZXR1cm4gcGl4ZWxTbmFwcGVkRm9yUGFpbnRp
bmcoYm91bmRpbmdCb3gocm9vdCgpKSwgcmVuZGVyZXIoKS5kb2N1bWVudCgpLmRldmljZVNjYWxl
RmFjdG9yKCkpOworICAgIGNvbnN0IFJlbmRlckxheWVyKiByb290TGF5ZXIgPSByb290KCk7Cisg
ICAgcmV0dXJuIHBpeGVsU25hcHBlZEZvclBhaW50aW5nKGJvdW5kaW5nQm94KHJvb3RMYXllciwg
b2Zmc2V0RnJvbUFuY2VzdG9yKHJvb3RMYXllcikpLCByZW5kZXJlcigpLmRvY3VtZW50KCkuZGV2
aWNlU2NhbGVGYWN0b3IoKSk7CiB9CiAKLUxheW91dFJlY3QgUmVuZGVyTGF5ZXI6OmNhbGN1bGF0
ZUxheWVyQm91bmRzKGNvbnN0IFJlbmRlckxheWVyKiBhbmNlc3RvckxheWVyLCBjb25zdCBMYXlv
dXRTaXplKiBvZmZzZXRGcm9tUm9vdCwgQ2FsY3VsYXRlTGF5ZXJCb3VuZHNGbGFncyBmbGFncykg
Y29uc3QKK0xheW91dFJlY3QgUmVuZGVyTGF5ZXI6OmNhbGN1bGF0ZUxheWVyQm91bmRzKGNvbnN0
IFJlbmRlckxheWVyKiBhbmNlc3RvckxheWVyLCBjb25zdCBMYXlvdXRTaXplJiBvZmZzZXRGcm9t
Um9vdCwgQ2FsY3VsYXRlTGF5ZXJCb3VuZHNGbGFncyBmbGFncykgY29uc3QKIHsKICAgICBpZiAo
IWlzU2VsZlBhaW50aW5nTGF5ZXIoKSkKICAgICAgICAgcmV0dXJuIExheW91dFJlY3QoKTsKQEAg
LTU2MzIsNyArNTYyNCw3IEBAIExheW91dFJlY3QgUmVuZGVyTGF5ZXI6OmNhbGN1bGF0ZUxheWVy
Qm91bmRzKGNvbnN0IFJlbmRlckxheWVyKiBhbmNlc3RvckxheWVyLCBjCiAKICAgICBpZiAoUmVu
ZGVyTGF5ZXIqIHJlZmxlY3Rpb24gPSByZWZsZWN0aW9uTGF5ZXIoKSkgewogICAgICAgICBpZiAo
IXJlZmxlY3Rpb24tPmlzQ29tcG9zaXRlZCgpKSB7Ci0gICAgICAgICAgICBMYXlvdXRSZWN0IGNo
aWxkVW5pb25Cb3VuZHMgPSByZWZsZWN0aW9uLT5jYWxjdWxhdGVMYXllckJvdW5kcyh0aGlzLCBu
dWxscHRyLCBkZXNjZW5kYW50RmxhZ3MpOworICAgICAgICAgICAgTGF5b3V0UmVjdCBjaGlsZFVu
aW9uQm91bmRzID0gcmVmbGVjdGlvbi0+Y2FsY3VsYXRlTGF5ZXJCb3VuZHModGhpcywgcmVmbGVj
dGlvbi0+b2Zmc2V0RnJvbUFuY2VzdG9yKHRoaXMpLCBkZXNjZW5kYW50RmxhZ3MpOwogICAgICAg
ICAgICAgdW5pb25Cb3VuZHMudW5pdGUoY2hpbGRVbmlvbkJvdW5kcyk7CiAgICAgICAgIH0KICAg
ICB9CkBAIC01NjQ4LDcgKzU2NDAsNyBAQCBMYXlvdXRSZWN0IFJlbmRlckxheWVyOjpjYWxjdWxh
dGVMYXllckJvdW5kcyhjb25zdCBSZW5kZXJMYXllciogYW5jZXN0b3JMYXllciwgYwogICAgICAg
ICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGxpc3RTaXplOyArK2kpIHsKICAgICAgICAgICAgIFJl
bmRlckxheWVyKiBjdXJMYXllciA9IG5lZ1pPcmRlckxpc3QtPmF0KGkpOwogICAgICAgICAgICAg
aWYgKGZsYWdzICYgSW5jbHVkZUNvbXBvc2l0ZWREZXNjZW5kYW50cyB8fCAhY3VyTGF5ZXItPmlz
Q29tcG9zaXRlZCgpKSB7Ci0gICAgICAgICAgICAgICAgTGF5b3V0UmVjdCBjaGlsZFVuaW9uQm91
bmRzID0gY3VyTGF5ZXItPmNhbGN1bGF0ZUxheWVyQm91bmRzKHRoaXMsIG51bGxwdHIsIGRlc2Nl
bmRhbnRGbGFncyk7CisgICAgICAgICAgICAgICAgTGF5b3V0UmVjdCBjaGlsZFVuaW9uQm91bmRz
ID0gY3VyTGF5ZXItPmNhbGN1bGF0ZUxheWVyQm91bmRzKHRoaXMsIGN1ckxheWVyLT5vZmZzZXRG
cm9tQW5jZXN0b3IodGhpcyksIGRlc2NlbmRhbnRGbGFncyk7CiAgICAgICAgICAgICAgICAgdW5p
b25Cb3VuZHMudW5pdGUoY2hpbGRVbmlvbkJvdW5kcyk7CiAgICAgICAgICAgICB9CiAgICAgICAg
IH0KQEAgLTU2NjAsNyArNTY1Miw3IEBAIExheW91dFJlY3QgUmVuZGVyTGF5ZXI6OmNhbGN1bGF0
ZUxheWVyQm91bmRzKGNvbnN0IFJlbmRlckxheWVyKiBhbmNlc3RvckxheWVyLCBjCiAgICAgICAg
ICAgICBSZW5kZXJMYXllciogY3VyTGF5ZXIgPSBwb3NaT3JkZXJMaXN0LT5hdChpKTsKICAgICAg
ICAgICAgIC8vIFRoZSBSZW5kZXJOYW1lZEZsb3dUaHJlYWQgaXMgaWdub3JlZCB3aGVuIHdlIGNh
bGN1bGF0ZSB0aGUgYm91bmRzIG9mIHRoZSBSZW5kZXJWaWV3LgogICAgICAgICAgICAgaWYgKChm
bGFncyAmIEluY2x1ZGVDb21wb3NpdGVkRGVzY2VuZGFudHMgfHwgIWN1ckxheWVyLT5pc0NvbXBv
c2l0ZWQoKSkgJiYgIWN1ckxheWVyLT5pc0Zsb3dUaHJlYWRDb2xsZWN0aW5nR3JhcGhpY3NMYXll
cnNVbmRlclJlZ2lvbnMoKSkgewotICAgICAgICAgICAgICAgIExheW91dFJlY3QgY2hpbGRVbmlv
bkJvdW5kcyA9IGN1ckxheWVyLT5jYWxjdWxhdGVMYXllckJvdW5kcyh0aGlzLCBudWxscHRyLCBk
ZXNjZW5kYW50RmxhZ3MpOworICAgICAgICAgICAgICAgIExheW91dFJlY3QgY2hpbGRVbmlvbkJv
dW5kcyA9IGN1ckxheWVyLT5jYWxjdWxhdGVMYXllckJvdW5kcyh0aGlzLCBjdXJMYXllci0+b2Zm
c2V0RnJvbUFuY2VzdG9yKHRoaXMpLCBkZXNjZW5kYW50RmxhZ3MpOwogICAgICAgICAgICAgICAg
IHVuaW9uQm91bmRzLnVuaXRlKGNoaWxkVW5pb25Cb3VuZHMpOwogICAgICAgICAgICAgfQogICAg
ICAgICB9CkBAIC01Njc0LDcgKzU2NjYsNyBAQCBMYXlvdXRSZWN0IFJlbmRlckxheWVyOjpjYWxj
dWxhdGVMYXllckJvdW5kcyhjb25zdCBSZW5kZXJMYXllciogYW5jZXN0b3JMYXllciwgYwogICAg
ICAgICAgICAgLy8gc28gdGhlcmUncyBubyB3YXkgd2UgY291bGQgaGl0IGEgUmVuZGVyTmFtZWRG
bG93VGhyZWFkIGhlcmUuCiAgICAgICAgICAgICBBU1NFUlQoIWN1ckxheWVyLT5pc0Zsb3dUaHJl
YWRDb2xsZWN0aW5nR3JhcGhpY3NMYXllcnNVbmRlclJlZ2lvbnMoKSk7CiAgICAgICAgICAgICBp
ZiAoZmxhZ3MgJiBJbmNsdWRlQ29tcG9zaXRlZERlc2NlbmRhbnRzIHx8ICFjdXJMYXllci0+aXND
b21wb3NpdGVkKCkpIHsKLSAgICAgICAgICAgICAgICBMYXlvdXRSZWN0IGN1ckFic0JvdW5kcyA9
IGN1ckxheWVyLT5jYWxjdWxhdGVMYXllckJvdW5kcyh0aGlzLCBudWxscHRyLCBkZXNjZW5kYW50
RmxhZ3MpOworICAgICAgICAgICAgICAgIExheW91dFJlY3QgY3VyQWJzQm91bmRzID0gY3VyTGF5
ZXItPmNhbGN1bGF0ZUxheWVyQm91bmRzKHRoaXMsIGN1ckxheWVyLT5vZmZzZXRGcm9tQW5jZXN0
b3IodGhpcyksIGRlc2NlbmRhbnRGbGFncyk7CiAgICAgICAgICAgICAgICAgdW5pb25Cb3VuZHMu
dW5pdGUoY3VyQWJzQm91bmRzKTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQpAQCAtNTY5Mywx
NCArNTY4NSw3IEBAIExheW91dFJlY3QgUmVuZGVyTGF5ZXI6OmNhbGN1bGF0ZUxheWVyQm91bmRz
KGNvbnN0IFJlbmRlckxheWVyKiBhbmNlc3RvckxheWVyLCBjCiAgICAgICAgIGJvdW5kaW5nQm94
UmVjdCA9IGFmZmluZVRyYW5zLT5tYXBSZWN0KGJvdW5kaW5nQm94UmVjdCk7CiAgICAgICAgIHVu
aW9uQm91bmRzID0gYWZmaW5lVHJhbnMtPm1hcFJlY3QodW5pb25Cb3VuZHMpOwogICAgIH0KLQot
ICAgIExheW91dFNpemUgb2Zmc2V0RnJvbUFuY2VzdG9yOwotICAgIGlmIChvZmZzZXRGcm9tUm9v
dCkKLSAgICAgICAgb2Zmc2V0RnJvbUFuY2VzdG9yID0gKm9mZnNldEZyb21Sb290OwotICAgIGVs
c2UKLSAgICAgICAgb2Zmc2V0RnJvbUFuY2VzdG9yID0gdGhpcy0+b2Zmc2V0RnJvbUFuY2VzdG9y
KGFuY2VzdG9yTGF5ZXIpOwotICAgIHVuaW9uQm91bmRzLm1vdmUob2Zmc2V0RnJvbUFuY2VzdG9y
KTsKLSAgICAKKyAgICB1bmlvbkJvdW5kcy5tb3ZlKG9mZnNldEZyb21Sb290KTsKICAgICByZXR1
cm4gdW5pb25Cb3VuZHM7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9SZW5kZXJMYXllci5oIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyLmgK
aW5kZXggYzYxYTZjYy4uN2Y3ZmI2YiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlckxheWVyLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxh
eWVyLmgKQEAgLTcwMCw3ICs3MDAsNyBAQCBwdWJsaWM6CiAgICAgLy8gZm9yIHBhaW50aW5nL2V2
ZW50IGhhbmRsaW5nLgogICAgIC8vIFBhc3Mgb2Zmc2V0RnJvbVJvb3QgaWYga25vd24uCiAgICAg
dm9pZCBjYWxjdWxhdGVSZWN0cyhjb25zdCBDbGlwUmVjdHNDb250ZXh0JiwgY29uc3QgTGF5b3V0
UmVjdCYgcGFpbnREaXJ0eVJlY3QsIExheW91dFJlY3QmIGxheWVyQm91bmRzLAotICAgICAgICBD
bGlwUmVjdCYgYmFja2dyb3VuZFJlY3QsIENsaXBSZWN0JiBmb3JlZ3JvdW5kUmVjdCwgQ2xpcFJl
Y3QmIG91dGxpbmVSZWN0LCBjb25zdCBMYXlvdXRTaXplKiBvZmZzZXRGcm9tUm9vdCA9IG51bGxw
dHIpIGNvbnN0OworICAgICAgICBDbGlwUmVjdCYgYmFja2dyb3VuZFJlY3QsIENsaXBSZWN0JiBm
b3JlZ3JvdW5kUmVjdCwgQ2xpcFJlY3QmIG91dGxpbmVSZWN0LCBjb25zdCBMYXlvdXRTaXplJiBv
ZmZzZXRGcm9tUm9vdCkgY29uc3Q7CiAKICAgICAvLyBDb21wdXRlIGFuZCBjYWNoZSBjbGlwIHJl
Y3RzIGNvbXB1dGVkIHdpdGggdGhlIGdpdmVuIGxheWVyIGFzIHRoZSByb290CiAgICAgdm9pZCB1
cGRhdGVDbGlwUmVjdHMoY29uc3QgQ2xpcFJlY3RzQ29udGV4dCYpOwpAQCAtNzE5LDcgKzcxOSw3
IEBAIHB1YmxpYzoKICAgICBMYXlvdXRSZWN0IGxvY2FsQ2xpcFJlY3QoYm9vbCYgY2xpcEV4Y2Vl
ZHNCb3VuZHMpIGNvbnN0OyAvLyBSZXR1cm5zIHRoZSBiYWNrZ3JvdW5kIGNsaXAgcmVjdCBvZiB0
aGUgbGF5ZXIgaW4gdGhlIGxvY2FsIGNvb3JkaW5hdGUgc3BhY2UuCiAKICAgICAvLyBQYXNzIG9m
ZnNldEZyb21Sb290IGlmIGtub3duLgotICAgIGJvb2wgaW50ZXJzZWN0c0RhbWFnZVJlY3QoY29u
c3QgTGF5b3V0UmVjdCYgbGF5ZXJCb3VuZHMsIGNvbnN0IExheW91dFJlY3QmIGRhbWFnZVJlY3Qs
IGNvbnN0IFJlbmRlckxheWVyKiByb290TGF5ZXIsIGNvbnN0IExheW91dFNpemUqIG9mZnNldEZy
b21Sb290ID0gbnVsbHB0ciwgY29uc3QgTGF5b3V0UmVjdCogY2FjaGVkQm91bmRpbmdCb3ggPSBu
dWxscHRyKSBjb25zdDsKKyAgICBib29sIGludGVyc2VjdHNEYW1hZ2VSZWN0KGNvbnN0IExheW91
dFJlY3QmIGxheWVyQm91bmRzLCBjb25zdCBMYXlvdXRSZWN0JiBkYW1hZ2VSZWN0LCBjb25zdCBS
ZW5kZXJMYXllciogcm9vdExheWVyLCBjb25zdCBMYXlvdXRTaXplJiBvZmZzZXRGcm9tUm9vdCwg
Y29uc3QgTGF5b3V0UmVjdCogY2FjaGVkQm91bmRpbmdCb3ggPSBudWxscHRyKSBjb25zdDsKIAog
ICAgIGVudW0gQ2FsY3VsYXRlTGF5ZXJCb3VuZHNGbGFnIHsKICAgICAgICAgSW5jbHVkZVNlbGZU
cmFuc2Zvcm0gPSAxIDw8IDAsCkBAIC03MzUsNyArNzM1LDcgQEAgcHVibGljOgogICAgIHR5cGVk
ZWYgdW5zaWduZWQgQ2FsY3VsYXRlTGF5ZXJCb3VuZHNGbGFnczsKIAogICAgIC8vIEJvdW5kaW5n
IGJveCByZWxhdGl2ZSB0byBzb21lIGFuY2VzdG9yIGxheWVyLiBQYXNzIG9mZnNldEZyb21Sb290
IGlmIGtub3duLgotICAgIExheW91dFJlY3QgYm91bmRpbmdCb3goY29uc3QgUmVuZGVyTGF5ZXIq
IHJvb3RMYXllciwgQ2FsY3VsYXRlTGF5ZXJCb3VuZHNGbGFncyA9IDAsIGNvbnN0IExheW91dFNp
emUqIG9mZnNldEZyb21Sb290ID0gbnVsbHB0cikgY29uc3Q7CisgICAgTGF5b3V0UmVjdCBib3Vu
ZGluZ0JveChjb25zdCBSZW5kZXJMYXllciogcm9vdExheWVyLCBjb25zdCBMYXlvdXRTaXplJiBv
ZmZzZXRGcm9tUm9vdCA9IExheW91dFNpemUoKSwgQ2FsY3VsYXRlTGF5ZXJCb3VuZHNGbGFncyA9
IDApIGNvbnN0OwogICAgIC8vIEJvdW5kaW5nIGJveCBpbiB0aGUgY29vcmRpbmF0ZXMgb2YgdGhp
cyBsYXllci4KICAgICBMYXlvdXRSZWN0IGxvY2FsQm91bmRpbmdCb3goQ2FsY3VsYXRlTGF5ZXJC
b3VuZHNGbGFncyA9IDApIGNvbnN0OwogICAgIC8vIERlcHJlY2F0ZWQ6IFBpeGVsIHNuYXBwZWQg
Ym91bmRpbmcgYm94IHJlbGF0aXZlIHRvIHRoZSByb290LgpAQCAtNzQ0LDcgKzc0NCw3IEBAIHB1
YmxpYzoKICAgICBGbG9hdFJlY3QgYWJzb2x1dGVCb3VuZGluZ0JveEZvclBhaW50aW5nKCkgY29u
c3Q7CiAKICAgICAvLyBCb3VuZHMgdXNlZCBmb3IgbGF5ZXIgb3ZlcmxhcCB0ZXN0aW5nIGluIFJl
bmRlckxheWVyQ29tcG9zaXRvci4KLSAgICBMYXlvdXRSZWN0IG92ZXJsYXBCb3VuZHMoKSBjb25z
dCB7IHJldHVybiBvdmVybGFwQm91bmRzSW5jbHVkZUNoaWxkcmVuKCkgPyBjYWxjdWxhdGVMYXll
ckJvdW5kcyh0aGlzKSA6IGxvY2FsQm91bmRpbmdCb3goKTsgfQorICAgIExheW91dFJlY3Qgb3Zl
cmxhcEJvdW5kcygpIGNvbnN0IHsgcmV0dXJuIG92ZXJsYXBCb3VuZHNJbmNsdWRlQ2hpbGRyZW4o
KSA/IGNhbGN1bGF0ZUxheWVyQm91bmRzKHRoaXMsIExheW91dFNpemUoKSkgOiBsb2NhbEJvdW5k
aW5nQm94KCk7IH0KIAogI2lmIEVOQUJMRShDU1NfRklMVEVSUykKICAgICAvLyBJZiB0cnVlLCB0
aGlzIGxheWVyJ3MgY2hpbGRyZW4gYXJlIGluY2x1ZGVkIGluIGl0cyBib3VuZHMgZm9yIG92ZXJs
YXAgdGVzdGluZy4KQEAgLTc1NSw3ICs3NTUsNyBAQCBwdWJsaWM6CiAjZW5kaWYKIAogICAgIC8v
IENhbiBwYXNzIG9mZnNldEZyb21Sb290IGlmIGtub3duLgotICAgIExheW91dFJlY3QgY2FsY3Vs
YXRlTGF5ZXJCb3VuZHMoY29uc3QgUmVuZGVyTGF5ZXIqIGFuY2VzdG9yTGF5ZXIsIGNvbnN0IExh
eW91dFNpemUqIG9mZnNldEZyb21Sb290ID0gbnVsbHB0ciwgQ2FsY3VsYXRlTGF5ZXJCb3VuZHNG
bGFncyA9IERlZmF1bHRDYWxjdWxhdGVMYXllckJvdW5kc0ZsYWdzKSBjb25zdDsKKyAgICBMYXlv
dXRSZWN0IGNhbGN1bGF0ZUxheWVyQm91bmRzKGNvbnN0IFJlbmRlckxheWVyKiBhbmNlc3Rvckxh
eWVyLCBjb25zdCBMYXlvdXRTaXplJiBvZmZzZXRGcm9tUm9vdCwgQ2FsY3VsYXRlTGF5ZXJCb3Vu
ZHNGbGFncyA9IERlZmF1bHRDYWxjdWxhdGVMYXllckJvdW5kc0ZsYWdzKSBjb25zdDsKICAgICAK
ICAgICAvLyBSZXR1cm4gYSBjYWNoZWQgcmVwYWludCByZWN0LCBjb21wdXRlZCByZWxhdGl2ZSB0
byB0aGUgbGF5ZXIgcmVuZGVyZXIncyBjb250YWluZXJGb3JSZXBhaW50LgogICAgIExheW91dFJl
Y3QgcmVwYWludFJlY3QoKSBjb25zdCB7IHJldHVybiBtX3JlcGFpbnRSZWN0OyB9CkBAIC0xMDAx
LDkgKzEwMDEsOSBAQCBwcml2YXRlOgogCiAgICAgdm9pZCBjb2xsZWN0RnJhZ21lbnRzKExheWVy
RnJhZ21lbnRzJiwgY29uc3QgUmVuZGVyTGF5ZXIqIHJvb3RMYXllciwgY29uc3QgTGF5b3V0UmVj
dCYgZGlydHlSZWN0LAogICAgICAgICBQYWdpbmF0aW9uSW5jbHVzaW9uTW9kZSwKLSAgICAgICAg
Q2xpcFJlY3RzVHlwZSwgT3ZlcmxheVNjcm9sbGJhclNpemVSZWxldmFuY3kgaW5PdmVybGF5U2Ny
b2xsYmFyU2l6ZVJlbGV2YW5jeSA9IElnbm9yZU92ZXJsYXlTY3JvbGxiYXJTaXplLAotICAgICAg
ICBTaG91bGRSZXNwZWN0T3ZlcmZsb3dDbGlwID0gUmVzcGVjdE92ZXJmbG93Q2xpcCwgY29uc3Qg
TGF5b3V0U2l6ZSogb2Zmc2V0RnJvbVJvb3QgPSBudWxscHRyLCBjb25zdCBMYXlvdXRSZWN0KiBs
YXllckJvdW5kaW5nQm94ID0gbnVsbHB0ciwgU2hvdWxkQXBwbHlSb290T2Zmc2V0VG9GcmFnbWVu
dHMgPSBJZ25vcmVSb290T2Zmc2V0Rm9yRnJhZ21lbnRzKTsKLSAgICB2b2lkIHVwZGF0ZVBhaW50
aW5nSW5mb0ZvckZyYWdtZW50cyhMYXllckZyYWdtZW50cyYsIGNvbnN0IExheWVyUGFpbnRpbmdJ
bmZvJiwgUGFpbnRMYXllckZsYWdzLCBib29sIHNob3VsZFBhaW50Q29udGVudCwgY29uc3QgTGF5
b3V0U2l6ZSogb2Zmc2V0RnJvbVJvb3QpOworICAgICAgICBDbGlwUmVjdHNUeXBlLCBPdmVybGF5
U2Nyb2xsYmFyU2l6ZVJlbGV2YW5jeSBpbk92ZXJsYXlTY3JvbGxiYXJTaXplUmVsZXZhbmN5LCBT
aG91bGRSZXNwZWN0T3ZlcmZsb3dDbGlwLCBjb25zdCBMYXlvdXRTaXplJiBvZmZzZXRGcm9tUm9v
dCwKKyAgICAgICAgY29uc3QgTGF5b3V0UmVjdCogbGF5ZXJCb3VuZGluZ0JveCA9IG51bGxwdHIs
IFNob3VsZEFwcGx5Um9vdE9mZnNldFRvRnJhZ21lbnRzID0gSWdub3JlUm9vdE9mZnNldEZvckZy
YWdtZW50cyk7CisgICAgdm9pZCB1cGRhdGVQYWludGluZ0luZm9Gb3JGcmFnbWVudHMoTGF5ZXJG
cmFnbWVudHMmLCBjb25zdCBMYXllclBhaW50aW5nSW5mbyYsIFBhaW50TGF5ZXJGbGFncywgYm9v
bCBzaG91bGRQYWludENvbnRlbnQsIGNvbnN0IExheW91dFNpemUmIG9mZnNldEZyb21Sb290KTsK
ICAgICB2b2lkIHBhaW50QmFja2dyb3VuZEZvckZyYWdtZW50cyhjb25zdCBMYXllckZyYWdtZW50
cyYsIEdyYXBoaWNzQ29udGV4dCosIEdyYXBoaWNzQ29udGV4dCogdHJhbnNwYXJlbmN5TGF5ZXJD
b250ZXh0LAogICAgICAgICBjb25zdCBMYXlvdXRSZWN0JiB0cmFuc3BhcmVuY3lQYWludERpcnR5
UmVjdCwgYm9vbCBoYXZlVHJhbnNwYXJlbmN5LCBjb25zdCBMYXllclBhaW50aW5nSW5mbyYsIFBh
aW50QmVoYXZpb3IsIFJlbmRlck9iamVjdCogcGFpbnRpbmdSb290Rm9yUmVuZGVyZXIpOwogICAg
IHZvaWQgcGFpbnRGb3JlZ3JvdW5kRm9yRnJhZ21lbnRzKGNvbnN0IExheWVyRnJhZ21lbnRzJiwg
R3JhcGhpY3NDb250ZXh0KiwgR3JhcGhpY3NDb250ZXh0KiB0cmFuc3BhcmVuY3lMYXllckNvbnRl
eHQsCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXJDb21w
b3NpdG9yLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllckNvbXBvc2l0
b3IuY3BwCmluZGV4IGI2ZGE1MmUuLmE2ZWE1NTAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9SZW5kZXJMYXllckNvbXBvc2l0b3IuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9SZW5kZXJMYXllckNvbXBvc2l0b3IuY3BwCkBAIC05NzUsNyArOTc1LDcgQEAg
TGF5b3V0UmVjdCBSZW5kZXJMYXllckNvbXBvc2l0b3I6OmNhbGN1bGF0ZUNvbXBvc2l0ZWRCb3Vu
ZHMoY29uc3QgUmVuZGVyTGF5ZXImIGwKIHsKICAgICBpZiAoIWNhbkJlQ29tcG9zaXRlZChsYXll
cikpCiAgICAgICAgIHJldHVybiBMYXlvdXRSZWN0KCk7Ci0gICAgcmV0dXJuIGxheWVyLmNhbGN1
bGF0ZUxheWVyQm91bmRzKCZhbmNlc3RvckxheWVyLCBudWxscHRyLCBSZW5kZXJMYXllcjo6RGVm
YXVsdENhbGN1bGF0ZUxheWVyQm91bmRzRmxhZ3MgfCBSZW5kZXJMYXllcjo6RXhjbHVkZUhpZGRl
bkRlc2NlbmRhbnRzIHwgUmVuZGVyTGF5ZXI6OkRvbnRDb25zdHJhaW5Gb3JNYXNrKTsKKyAgICBy
ZXR1cm4gbGF5ZXIuY2FsY3VsYXRlTGF5ZXJCb3VuZHMoJmFuY2VzdG9yTGF5ZXIsIGxheWVyLm9m
ZnNldEZyb21BbmNlc3RvcigmYW5jZXN0b3JMYXllciksIFJlbmRlckxheWVyOjpEZWZhdWx0Q2Fs
Y3VsYXRlTGF5ZXJCb3VuZHNGbGFncyB8IFJlbmRlckxheWVyOjpFeGNsdWRlSGlkZGVuRGVzY2Vu
ZGFudHMgfCBSZW5kZXJMYXllcjo6RG9udENvbnN0cmFpbkZvck1hc2spOwogfQogCiB2b2lkIFJl
bmRlckxheWVyQ29tcG9zaXRvcjo6bGF5ZXJXYXNBZGRlZChSZW5kZXJMYXllciYsIFJlbmRlckxh
eWVyJikKQEAgLTI2NTAsNyArMjY1MCw3IEBAIGJvb2wgUmVuZGVyTGF5ZXJDb21wb3NpdG9yOjpy
ZXF1aXJlc0NvbXBvc2l0aW5nRm9yUG9zaXRpb24oUmVuZGVyTGF5ZXJNb2RlbE9iamVjCiAKICAg
ICAvLyBGaXhlZCBwb3NpdGlvbiBlbGVtZW50cyB0aGF0IGFyZSBpbnZpc2libGUgaW4gdGhlIGN1
cnJlbnQgdmlldyBkb24ndCBnZXQgdGhlaXIgb3duIGxheWVyLgogICAgIExheW91dFJlY3Qgdmll
d0JvdW5kcyA9IG1fcmVuZGVyVmlldy5mcmFtZVZpZXcoKS52aWV3cG9ydENvbnN0cmFpbmVkVmlz
aWJsZUNvbnRlbnRSZWN0KCk7Ci0gICAgTGF5b3V0UmVjdCBsYXllckJvdW5kcyA9IGxheWVyLmNh
bGN1bGF0ZUxheWVyQm91bmRzKCZsYXllciwgMCwgUmVuZGVyTGF5ZXI6OlVzZUxvY2FsQ2xpcFJl
Y3RJZlBvc3NpYmxlIHwgUmVuZGVyTGF5ZXI6OkluY2x1ZGVMYXllckZpbHRlck91dHNldHMgfCBS
ZW5kZXJMYXllcjo6VXNlRnJhZ21lbnRCb3hlc0V4Y2x1ZGluZ0NvbXBvc2l0aW5nCisgICAgTGF5
b3V0UmVjdCBsYXllckJvdW5kcyA9IGxheWVyLmNhbGN1bGF0ZUxheWVyQm91bmRzKCZsYXllciwg
TGF5b3V0U2l6ZSgpLCBSZW5kZXJMYXllcjo6VXNlTG9jYWxDbGlwUmVjdElmUG9zc2libGUgfCBS
ZW5kZXJMYXllcjo6SW5jbHVkZUxheWVyRmlsdGVyT3V0c2V0cyB8IFJlbmRlckxheWVyOjpVc2VG
cmFnbWVudEJveGVzRXhjbHVkaW5nQ29tcG9zaXRpbmcKICAgICAgICAgfCBSZW5kZXJMYXllcjo6
RXhjbHVkZUhpZGRlbkRlc2NlbmRhbnRzIHwgUmVuZGVyTGF5ZXI6OkRvbnRDb25zdHJhaW5Gb3JN
YXNrIHwgUmVuZGVyTGF5ZXI6OkluY2x1ZGVDb21wb3NpdGVkRGVzY2VuZGFudHMpOwogICAgIC8v
IE1hcCB0byBtX3JlbmRlclZpZXcgdG8gaWdub3JlIHBhZ2Ugc2NhbGUuCiAgICAgRmxvYXRSZWN0
IGFic29sdXRlQm91bmRzID0gbGF5ZXIucmVuZGVyZXIoKS5sb2NhbFRvQ29udGFpbmVyUXVhZChG
bG9hdFJlY3QobGF5ZXJCb3VuZHMpLCAmbV9yZW5kZXJWaWV3KS5ib3VuZGluZ0JveCgpOwpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRyZWVBc1RleHQuY3BwIGIv
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRyZWVBc1RleHQuY3BwCmluZGV4IGFlZjAy
MTYuLjZlOTUxOWUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJU
cmVlQXNUZXh0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVHJlZUFz
VGV4dC5jcHAKQEAgLTc0MSwxMiArNzQxLDEyIEBAIHN0YXRpYyB2b2lkIHdyaXRlTGF5ZXJzKFRl
eHRTdHJlYW0mIHRzLCBjb25zdCBSZW5kZXJMYXllciogcm9vdExheWVyLCBSZW5kZXJMYXllCiAg
ICAgLy8gQ2FsY3VsYXRlIHRoZSBjbGlwIHJlY3RzIHdlIHNob3VsZCB1c2UuCiAgICAgTGF5b3V0
UmVjdCBsYXllckJvdW5kczsKICAgICBDbGlwUmVjdCBkYW1hZ2VSZWN0LCBjbGlwUmVjdFRvQXBw
bHksIG91dGxpbmVSZWN0OwotICAgIGwtPmNhbGN1bGF0ZVJlY3RzKFJlbmRlckxheWVyOjpDbGlw
UmVjdHNDb250ZXh0KHJvb3RMYXllciwgVGVtcG9yYXJ5Q2xpcFJlY3RzKSwgcGFpbnREaXJ0eVJl
Y3QsIGxheWVyQm91bmRzLCBkYW1hZ2VSZWN0LCBjbGlwUmVjdFRvQXBwbHksIG91dGxpbmVSZWN0
KTsKKyAgICBsLT5jYWxjdWxhdGVSZWN0cyhSZW5kZXJMYXllcjo6Q2xpcFJlY3RzQ29udGV4dChy
b290TGF5ZXIsIFRlbXBvcmFyeUNsaXBSZWN0cyksIHBhaW50RGlydHlSZWN0LCBsYXllckJvdW5k
cywgZGFtYWdlUmVjdCwgY2xpcFJlY3RUb0FwcGx5LCBvdXRsaW5lUmVjdCwgbC0+b2Zmc2V0RnJv
bUFuY2VzdG9yKHJvb3RMYXllcikpOwogCiAgICAgLy8gRW5zdXJlIG91ciBsaXN0cyBhcmUgdXAt
dG8tZGF0ZS4KICAgICBsLT51cGRhdGVMYXllckxpc3RzSWZOZWVkZWQoKTsKIAotICAgIGJvb2wg
c2hvdWxkUGFpbnQgPSAoYmVoYXZpb3IgJiBSZW5kZXJBc1RleHRTaG93QWxsTGF5ZXJzKSA/IHRy
dWUgOiBsLT5pbnRlcnNlY3RzRGFtYWdlUmVjdChsYXllckJvdW5kcywgZGFtYWdlUmVjdC5yZWN0
KCksIHJvb3RMYXllcik7CisgICAgYm9vbCBzaG91bGRQYWludCA9IChiZWhhdmlvciAmIFJlbmRl
ckFzVGV4dFNob3dBbGxMYXllcnMpID8gdHJ1ZSA6IGwtPmludGVyc2VjdHNEYW1hZ2VSZWN0KGxh
eWVyQm91bmRzLCBkYW1hZ2VSZWN0LnJlY3QoKSwgcm9vdExheWVyLCBsLT5vZmZzZXRGcm9tQW5j
ZXN0b3Iocm9vdExheWVyKSk7CiAgICAgVmVjdG9yPFJlbmRlckxheWVyKj4qIG5lZ0xpc3QgPSBs
LT5uZWdaT3JkZXJMaXN0KCk7CiAgICAgYm9vbCBwYWludHNCYWNrZ3JvdW5kU2VwYXJhdGVseSA9
IG5lZ0xpc3QgJiYgbmVnTGlzdC0+c2l6ZSgpID4gMDsKICAgICBpZiAoc2hvdWxkUGFpbnQgJiYg
cGFpbnRzQmFja2dyb3VuZFNlcGFyYXRlbHkpCg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>233582</attachid>
            <date>2014-06-22 19:36:44 -0700</date>
            <delta_ts>2014-06-22 21:28:43 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-134168-20140622193622.patch</filename>
            <type>text/plain</type>
            <size>33320</size>
            <attacher name="alan">zalan</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTcwMjczCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMzdlOTA5OTc0NGY4YTkx
MTEzMGJiNTIzNWYwNDAxYTlhOTM0YTczZS4uYmYyYWQwYWIwYzFmNWRmMzE2NWRkODhhMzg4Y2Q5
YjY0ODhiMjMyNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDM0IEBACisyMDE0LTA2LTIxICBaYWxh
biBCdWp0YXMgIDx6YWxhbkBhcHBsZS5jb20+CisKKyAgICAgICAgTWFrZSBvZmZzZXQgZnJvbSBh
bmNlc3RvciBjb21wdXRhdGlvbiBleHBsaWNpdCBieSBtb3ZpbmcgaXQgdG8gdGhlIGNhbGxlcnMu
CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMzQxNjgu
CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgU2ltb24gRnJhc2VyLgorICAgICAgICAKKyAgICAgICAg
RXhwbGljaXQgb2Zmc2V0IGNvbXB1dGF0aW9uIGhlbHBzIGNvZGUgcmVhZGluZyBhbmQgbGVzcyBl
cnJvci1wcm9uZSB0aGFuIHBhc3NpbmcKKyAgICAgICAgdGhlIG9mZnNldCBwb2ludGVyIGFuZCBj
b21wdXRlIGl0IGxvY2FsbHkgd2hlbiBpdCBpcyBudWxsLgorCisgICAgICAgIE5vIGNoYW5nZSBp
biBmdW5jdGlvbmFsaXR5LgorCisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckxheWVyLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OnRyYW5zcGFyZW5jeUNsaXBCb3gpOgorICAgICAgICAoV2ViQ29y
ZTo6cGVyZm9ybU92ZXJsYXBUZXN0cyk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllcjo6
c2V0dXBDbGlwUGF0aCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllcjo6c2V0dXBGaWx0
ZXJzKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyOjpwYWludExheWVyQ29udGVudHMp
OgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXI6OmNvbGxlY3RGcmFnbWVudHMpOgorICAg
ICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXI6OnVwZGF0ZVBhaW50aW5nSW5mb0ZvckZyYWdtZW50
cyk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllcjo6cGFpbnRUcmFuc2Zvcm1lZExheWVy
SW50b0ZyYWdtZW50cyk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllcjo6aGl0VGVzdExh
eWVyKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyOjpoaXRUZXN0VHJhbnNmb3JtZWRM
YXllckluRnJhZ21lbnRzKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyOjpjYWxjdWxh
dGVDbGlwUmVjdHMpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJMYXllci5oOgorICAgICAg
ICAqIHJlbmRlcmluZy9SZW5kZXJMYXllckNvbXBvc2l0b3IuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6UmVuZGVyTGF5ZXJDb21wb3NpdG9yOjpjYWxjdWxhdGVDb21wb3NpdGVkQm91bmRzKToKKyAg
ICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyQ29tcG9zaXRvcjo6cmVxdWlyZXNDb21wb3NpdGlu
Z0ZvclBvc2l0aW9uKToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyVHJlZUFzVGV4dC5jcHA6
CisgICAgICAgIChXZWJDb3JlOjp3cml0ZUxheWVycyk6CisKIDIwMTQtMDYtMjIgIFphbGFuIEJ1
anRhcyAgPHphbGFuQGFwcGxlLmNvbT4KIAogICAgICAgICBUcmFuc2l0aW9uIGxheWVyIG9mZnNl
dHMgZnJvbSBMYXlvdXRQb2ludCB0byBMYXlvdXRTaXplLgpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9SZW5kZXJMYXllci5jcHAKaW5kZXggMDc5NWViZTY3ZWE4NzYxNWM2Mjc3ODRjMjdiZjk0NTVm
MzQ4ODQ2OS4uMGMwYTkyMzQ5ZTZmOTA5YWUxMDhlNTI1OWYxZDZkZGRmNGI5YmEyZiAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyLmNwcAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXIuY3BwCkBAIC0xNjM2LDcgKzE2MzYsNyBA
QCBzdGF0aWMgTGF5b3V0UmVjdCB0cmFuc3BhcmVuY3lDbGlwQm94KGNvbnN0IFJlbmRlckxheWVy
KiBsYXllciwgY29uc3QgUmVuZGVyTGF5ZQogICAgICAgICByZXR1cm4gcmVzdWx0OwogICAgIH0K
ICAgICAKLSAgICBMYXlvdXRSZWN0IGNsaXBSZWN0ID0gbGF5ZXItPmJvdW5kaW5nQm94KHJvb3RM
YXllciwgdHJhbnNwYXJlbmN5QmVoYXZpb3IgPT0gSGl0VGVzdGluZ1RyYW5zcGFyZW5jeUNsaXBC
b3ggPyBSZW5kZXJMYXllcjo6VXNlRnJhZ21lbnRCb3hlc0luY2x1ZGluZ0NvbXBvc2l0aW5nIDog
UmVuZGVyTGF5ZXI6OlVzZUZyYWdtZW50Qm94ZXNFeGNsdWRpbmdDb21wb3NpdGluZyk7CisgICAg
TGF5b3V0UmVjdCBjbGlwUmVjdCA9IGxheWVyLT5ib3VuZGluZ0JveChyb290TGF5ZXIsIGxheWVy
LT5vZmZzZXRGcm9tQW5jZXN0b3Iocm9vdExheWVyKSwgdHJhbnNwYXJlbmN5QmVoYXZpb3IgPT0g
SGl0VGVzdGluZ1RyYW5zcGFyZW5jeUNsaXBCb3ggPyBSZW5kZXJMYXllcjo6VXNlRnJhZ21lbnRC
b3hlc0luY2x1ZGluZ0NvbXBvc2l0aW5nIDogUmVuZGVyTGF5ZXI6OlVzZUZyYWdtZW50Qm94ZXNF
eGNsdWRpbmdDb21wb3NpdGluZyk7CiAgICAgZXhwYW5kQ2xpcFJlY3RGb3JEZXNjZW5kYW50c0Fu
ZFJlZmxlY3Rpb24oY2xpcFJlY3QsIGxheWVyLCByb290TGF5ZXIsIHRyYW5zcGFyZW5jeUJlaGF2
aW9yLCBwYWludEJlaGF2aW9yKTsKICNpZiBFTkFCTEUoQ1NTX0ZJTFRFUlMpCiAgICAgbGF5ZXIt
PnJlbmRlcmVyKCkuc3R5bGUoKS5maWx0ZXJPdXRzZXRzKCkuZXhwYW5kUmVjdChjbGlwUmVjdCk7
CkBAIC0zNTc4LDcgKzM1NzgsNyBAQCBzdGF0aWMgdm9pZCBwZXJmb3JtT3ZlcmxhcFRlc3RzKE92
ZXJsYXBUZXN0UmVxdWVzdE1hcCYgb3ZlcmxhcFRlc3RSZXF1ZXN0cywgY29ucwogewogICAgIFZl
Y3RvcjxPdmVybGFwVGVzdFJlcXVlc3RDbGllbnQqPiBvdmVybGFwcGVkUmVxdWVzdENsaWVudHM7
CiAgICAgT3ZlcmxhcFRlc3RSZXF1ZXN0TWFwOjppdGVyYXRvciBlbmQgPSBvdmVybGFwVGVzdFJl
cXVlc3RzLmVuZCgpOwotICAgIExheW91dFJlY3QgYm91bmRpbmdCb3ggPSBsYXllci0+Ym91bmRp
bmdCb3gocm9vdExheWVyKTsKKyAgICBMYXlvdXRSZWN0IGJvdW5kaW5nQm94ID0gbGF5ZXItPmJv
dW5kaW5nQm94KHJvb3RMYXllciwgbGF5ZXItPm9mZnNldEZyb21BbmNlc3Rvcihyb290TGF5ZXIp
KTsKICAgICBmb3IgKE92ZXJsYXBUZXN0UmVxdWVzdE1hcDo6aXRlcmF0b3IgaXQgPSBvdmVybGFw
VGVzdFJlcXVlc3RzLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkgewogICAgICAgICBpZiAoIWJv
dW5kaW5nQm94LmludGVyc2VjdHMoaXQtPnZhbHVlKSkKICAgICAgICAgICAgIGNvbnRpbnVlOwpA
QCAtMzc5NSw3ICszNzk1LDcgQEAgYm9vbCBSZW5kZXJMYXllcjo6c2V0dXBDbGlwUGF0aChHcmFw
aGljc0NvbnRleHQqIGNvbnRleHQsIGNvbnN0IExheWVyUGFpbnRpbmdJbmYKICAgICAgICAgcmV0
dXJuIGZhbHNlOwogCiAgICAgaWYgKCFyb290UmVsYXRpdmVCb3VuZHNDb21wdXRlZCkgewotICAg
ICAgICByb290UmVsYXRpdmVCb3VuZHMgPSBjYWxjdWxhdGVMYXllckJvdW5kcyhwYWludGluZ0lu
Zm8ucm9vdExheWVyLCAmb2Zmc2V0RnJvbVJvb3QsIDApOworICAgICAgICByb290UmVsYXRpdmVC
b3VuZHMgPSBjYWxjdWxhdGVMYXllckJvdW5kcyhwYWludGluZ0luZm8ucm9vdExheWVyLCBvZmZz
ZXRGcm9tUm9vdCwgMCk7CiAgICAgICAgIHJvb3RSZWxhdGl2ZUJvdW5kc0NvbXB1dGVkID0gdHJ1
ZTsKICAgICB9CiAKQEAgLTM4NTcsNyArMzg1Nyw3IEBAIHN0ZDo6dW5pcXVlX3B0cjxGaWx0ZXJF
ZmZlY3RSZW5kZXJlckhlbHBlcj4gUmVuZGVyTGF5ZXI6OnNldHVwRmlsdGVycyhHcmFwaGljc0Nv
CiAgICAgZmlsdGVyUmVwYWludFJlY3QubW92ZShvZmZzZXRGcm9tUm9vdCk7CiAKICAgICBpZiAo
IXJvb3RSZWxhdGl2ZUJvdW5kc0NvbXB1dGVkKSB7Ci0gICAgICAgIHJvb3RSZWxhdGl2ZUJvdW5k
cyA9IGNhbGN1bGF0ZUxheWVyQm91bmRzKHBhaW50aW5nSW5mby5yb290TGF5ZXIsICZvZmZzZXRG
cm9tUm9vdCwgMCk7CisgICAgICAgIHJvb3RSZWxhdGl2ZUJvdW5kcyA9IGNhbGN1bGF0ZUxheWVy
Qm91bmRzKHBhaW50aW5nSW5mby5yb290TGF5ZXIsIG9mZnNldEZyb21Sb290LCAwKTsKICAgICAg
ICAgcm9vdFJlbGF0aXZlQm91bmRzQ29tcHV0ZWQgPSB0cnVlOwogICAgIH0KIApAQCAtNDAyMiw4
ICs0MDIyLDggQEAgdm9pZCBSZW5kZXJMYXllcjo6cGFpbnRMYXllckNvbnRlbnRzKEdyYXBoaWNz
Q29udGV4dCogY29udGV4dCwgY29uc3QgTGF5ZXJQYWludGkKICAgICAgICAgfQogICAgICAgICBj
b2xsZWN0RnJhZ21lbnRzKGxheWVyRnJhZ21lbnRzLCBsb2NhbFBhaW50aW5nSW5mby5yb290TGF5
ZXIsIHBhaW50RGlydHlSZWN0LCBFeGNsdWRlQ29tcG9zaXRlZFBhZ2luYXRlZExheWVycywKICAg
ICAgICAgICAgIChsb2NhbFBhaW50RmxhZ3MgJiBQYWludExheWVyVGVtcG9yYXJ5Q2xpcFJlY3Rz
KSA/IFRlbXBvcmFyeUNsaXBSZWN0cyA6IFBhaW50aW5nQ2xpcFJlY3RzLCBJZ25vcmVPdmVybGF5
U2Nyb2xsYmFyU2l6ZSwKLSAgICAgICAgICAgIChpc1BhaW50aW5nT3ZlcmZsb3dDb250ZW50cykg
PyBJZ25vcmVPdmVyZmxvd0NsaXAgOiBSZXNwZWN0T3ZlcmZsb3dDbGlwLCAmb2Zmc2V0RnJvbVJv
b3QpOwotICAgICAgICB1cGRhdGVQYWludGluZ0luZm9Gb3JGcmFnbWVudHMobGF5ZXJGcmFnbWVu
dHMsIGxvY2FsUGFpbnRpbmdJbmZvLCBsb2NhbFBhaW50RmxhZ3MsIHNob3VsZFBhaW50Q29udGVu
dCwgJm9mZnNldEZyb21Sb290KTsKKyAgICAgICAgICAgIChpc1BhaW50aW5nT3ZlcmZsb3dDb250
ZW50cykgPyBJZ25vcmVPdmVyZmxvd0NsaXAgOiBSZXNwZWN0T3ZlcmZsb3dDbGlwLCBvZmZzZXRG
cm9tUm9vdCk7CisgICAgICAgIHVwZGF0ZVBhaW50aW5nSW5mb0ZvckZyYWdtZW50cyhsYXllckZy
YWdtZW50cywgbG9jYWxQYWludGluZ0luZm8sIGxvY2FsUGFpbnRGbGFncywgc2hvdWxkUGFpbnRD
b250ZW50LCBvZmZzZXRGcm9tUm9vdCk7CiAgICAgfQogICAgIAogICAgIGlmIChpc1BhaW50aW5n
Q29tcG9zaXRlZEJhY2tncm91bmQpIHsKQEAgLTQxNjUsNyArNDE2NSw3IEBAIFJlbmRlckxheWVy
KiBSZW5kZXJMYXllcjo6ZW5jbG9zaW5nUGFnaW5hdGlvbkxheWVySW5TdWJ0cmVlKGNvbnN0IFJl
bmRlckxheWVyKiByCiB9CiAKIHZvaWQgUmVuZGVyTGF5ZXI6OmNvbGxlY3RGcmFnbWVudHMoTGF5
ZXJGcmFnbWVudHMmIGZyYWdtZW50cywgY29uc3QgUmVuZGVyTGF5ZXIqIHJvb3RMYXllciwgY29u
c3QgTGF5b3V0UmVjdCYgZGlydHlSZWN0LCBQYWdpbmF0aW9uSW5jbHVzaW9uTW9kZSBpbmNsdXNp
b25Nb2RlLAotICAgIENsaXBSZWN0c1R5cGUgY2xpcFJlY3RzVHlwZSwgT3ZlcmxheVNjcm9sbGJh
clNpemVSZWxldmFuY3kgaW5PdmVybGF5U2Nyb2xsYmFyU2l6ZVJlbGV2YW5jeSwgU2hvdWxkUmVz
cGVjdE92ZXJmbG93Q2xpcCByZXNwZWN0T3ZlcmZsb3dDbGlwLCBjb25zdCBMYXlvdXRTaXplKiBv
ZmZzZXRGcm9tUm9vdCwKKyAgICBDbGlwUmVjdHNUeXBlIGNsaXBSZWN0c1R5cGUsIE92ZXJsYXlT
Y3JvbGxiYXJTaXplUmVsZXZhbmN5IGluT3ZlcmxheVNjcm9sbGJhclNpemVSZWxldmFuY3ksIFNo
b3VsZFJlc3BlY3RPdmVyZmxvd0NsaXAgcmVzcGVjdE92ZXJmbG93Q2xpcCwgY29uc3QgTGF5b3V0
U2l6ZSYgb2Zmc2V0RnJvbVJvb3QsCiAgICAgY29uc3QgTGF5b3V0UmVjdCogbGF5ZXJCb3VuZGlu
Z0JveCwgU2hvdWxkQXBwbHlSb290T2Zmc2V0VG9GcmFnbWVudHMgYXBwbHlSb290T2Zmc2V0VG9G
cmFnbWVudHMpCiB7CiAgICAgUmVuZGVyTGF5ZXIqIHBhZ2luYXRpb25MYXllciA9IGVuY2xvc2lu
Z1BhZ2luYXRpb25MYXllckluU3VidHJlZShyb290TGF5ZXIsIGluY2x1c2lvbk1vZGUpOwpAQCAt
NDE4OSwxMCArNDE4OSwxMCBAQCB2b2lkIFJlbmRlckxheWVyOjpjb2xsZWN0RnJhZ21lbnRzKExh
eWVyRnJhZ21lbnRzJiBmcmFnbWVudHMsIGNvbnN0IFJlbmRlckxheWVyKgogICAgIENsaXBSZWN0
IGZvcmVncm91bmRSZWN0SW5GbG93VGhyZWFkOwogICAgIENsaXBSZWN0IG91dGxpbmVSZWN0SW5G
bG93VGhyZWFkOwogICAgIGNhbGN1bGF0ZVJlY3RzKHBhZ2luYXRpb25DbGlwUmVjdHNDb250ZXh0
LCBMYXlvdXRSZWN0OjppbmZpbml0ZVJlY3QoKSwgbGF5ZXJCb3VuZHNJbkZsb3dUaHJlYWQsIGJh
Y2tncm91bmRSZWN0SW5GbG93VGhyZWFkLCBmb3JlZ3JvdW5kUmVjdEluRmxvd1RocmVhZCwKLSAg
ICAgICAgb3V0bGluZVJlY3RJbkZsb3dUaHJlYWQsICZvZmZzZXRXaXRoaW5QYWdpbmF0ZWRMYXll
cik7CisgICAgICAgIG91dGxpbmVSZWN0SW5GbG93VGhyZWFkLCBvZmZzZXRXaXRoaW5QYWdpbmF0
ZWRMYXllcik7CiAgICAgCiAgICAgLy8gVGFrZSBvdXIgYm91bmRpbmcgYm94IHdpdGhpbiB0aGUg
ZmxvdyB0aHJlYWQgYW5kIGNsaXAgaXQuCi0gICAgTGF5b3V0UmVjdCBsYXllckJvdW5kaW5nQm94
SW5GbG93VGhyZWFkID0gbGF5ZXJCb3VuZGluZ0JveCA/ICpsYXllckJvdW5kaW5nQm94IDogYm91
bmRpbmdCb3gocGFnaW5hdGlvbkxheWVyLCAwLCAmb2Zmc2V0V2l0aGluUGFnaW5hdGVkTGF5ZXIp
OworICAgIExheW91dFJlY3QgbGF5ZXJCb3VuZGluZ0JveEluRmxvd1RocmVhZCA9IGxheWVyQm91
bmRpbmdCb3ggPyAqbGF5ZXJCb3VuZGluZ0JveCA6IGJvdW5kaW5nQm94KHBhZ2luYXRpb25MYXll
ciwgb2Zmc2V0V2l0aGluUGFnaW5hdGVkTGF5ZXIpOwogICAgIGxheWVyQm91bmRpbmdCb3hJbkZs
b3dUaHJlYWQuaW50ZXJzZWN0KGJhY2tncm91bmRSZWN0SW5GbG93VGhyZWFkLnJlY3QoKSk7CiAg
ICAgCiAgICAgUmVuZGVyRmxvd1RocmVhZCYgZW5jbG9zaW5nRmxvd1RocmVhZCA9IHRvUmVuZGVy
Rmxvd1RocmVhZChwYWdpbmF0aW9uTGF5ZXItPnJlbmRlcmVyKCkpOwpAQCAtNDIwNyw3ICs0MjA3
LDggQEAgdm9pZCBSZW5kZXJMYXllcjo6Y29sbGVjdEZyYWdtZW50cyhMYXllckZyYWdtZW50cyYg
ZnJhZ21lbnRzLCBjb25zdCBSZW5kZXJMYXllcioKICAgICAgICAgbGF5ZXJGcmFnbWVudEJvdW5k
aW5nQm94SW5QYXJlbnRQYWdpbmF0aW9uTGF5ZXIubW92ZShvZmZzZXRXaXRoaW5QYXJlbnRQYWdp
bmF0ZWRMYXllcik7CiAgICAgICAgIAogICAgICAgICAvLyBOb3cgY29sbGVjdCBhbmNlc3RvciBm
cmFnbWVudHMuCi0gICAgICAgIHBhcmVudFBhZ2luYXRpb25MYXllci0+Y29sbGVjdEZyYWdtZW50
cyhhbmNlc3RvckZyYWdtZW50cywgcm9vdExheWVyLCBkaXJ0eVJlY3QsIGluY2x1c2lvbk1vZGUs
IGNsaXBSZWN0c1R5cGUsIGluT3ZlcmxheVNjcm9sbGJhclNpemVSZWxldmFuY3ksIHJlc3BlY3RP
dmVyZmxvd0NsaXAsIG51bGxwdHIsICZsYXllckZyYWdtZW50Qm91bmRpbmdCb3hJblBhcmVudFBh
Z2luYXRpb25MYXllciwgQXBwbHlSb290T2Zmc2V0VG9GcmFnbWVudHMpOworICAgICAgICBwYXJl
bnRQYWdpbmF0aW9uTGF5ZXItPmNvbGxlY3RGcmFnbWVudHMoYW5jZXN0b3JGcmFnbWVudHMsIHJv
b3RMYXllciwgZGlydHlSZWN0LCBpbmNsdXNpb25Nb2RlLCBjbGlwUmVjdHNUeXBlLCBpbk92ZXJs
YXlTY3JvbGxiYXJTaXplUmVsZXZhbmN5LCByZXNwZWN0T3ZlcmZsb3dDbGlwLAorICAgICAgICAg
ICAgb2Zmc2V0RnJvbUFuY2VzdG9yKHJvb3RMYXllciksICZsYXllckZyYWdtZW50Qm91bmRpbmdC
b3hJblBhcmVudFBhZ2luYXRpb25MYXllciwgQXBwbHlSb290T2Zmc2V0VG9GcmFnbWVudHMpOwog
ICAgICAgICAKICAgICAgICAgaWYgKGFuY2VzdG9yRnJhZ21lbnRzLmlzRW1wdHkoKSkKICAgICAg
ICAgICAgIHJldHVybjsKQEAgLTQyOTYsMTUgKzQyOTcsMTQgQEAgdm9pZCBSZW5kZXJMYXllcjo6
Y29sbGVjdEZyYWdtZW50cyhMYXllckZyYWdtZW50cyYgZnJhZ21lbnRzLCBjb25zdCBSZW5kZXJM
YXllcioKIH0KIAogdm9pZCBSZW5kZXJMYXllcjo6dXBkYXRlUGFpbnRpbmdJbmZvRm9yRnJhZ21l
bnRzKExheWVyRnJhZ21lbnRzJiBmcmFnbWVudHMsIGNvbnN0IExheWVyUGFpbnRpbmdJbmZvJiBs
b2NhbFBhaW50aW5nSW5mbywgUGFpbnRMYXllckZsYWdzIGxvY2FsUGFpbnRGbGFncywKLSAgICBi
b29sIHNob3VsZFBhaW50Q29udGVudCwgY29uc3QgTGF5b3V0U2l6ZSogb2Zmc2V0RnJvbVJvb3Qp
CisgICAgYm9vbCBzaG91bGRQYWludENvbnRlbnQsIGNvbnN0IExheW91dFNpemUmIG9mZnNldEZy
b21Sb290KQogewotICAgIEFTU0VSVChvZmZzZXRGcm9tUm9vdCk7CiAgICAgZm9yIChzaXplX3Qg
aSA9IDA7IGkgPCBmcmFnbWVudHMuc2l6ZSgpOyArK2kpIHsKICAgICAgICAgTGF5ZXJGcmFnbWVu
dCYgZnJhZ21lbnQgPSBmcmFnbWVudHMuYXQoaSk7CiAgICAgICAgIGZyYWdtZW50LnNob3VsZFBh
aW50Q29udGVudCA9IHNob3VsZFBhaW50Q29udGVudDsKICAgICAgICAgaWYgKHRoaXMgIT0gbG9j
YWxQYWludGluZ0luZm8ucm9vdExheWVyIHx8ICEobG9jYWxQYWludEZsYWdzICYgUGFpbnRMYXll
clBhaW50aW5nT3ZlcmZsb3dDb250ZW50cykpIHsKLSAgICAgICAgICAgIExheW91dFNpemUgbmV3
T2Zmc2V0RnJvbVJvb3QgPSAqb2Zmc2V0RnJvbVJvb3QgKyBmcmFnbWVudC5wYWdpbmF0aW9uT2Zm
c2V0OwotICAgICAgICAgICAgZnJhZ21lbnQuc2hvdWxkUGFpbnRDb250ZW50ICY9IGludGVyc2Vj
dHNEYW1hZ2VSZWN0KGZyYWdtZW50LmxheWVyQm91bmRzLCBmcmFnbWVudC5iYWNrZ3JvdW5kUmVj
dC5yZWN0KCksIGxvY2FsUGFpbnRpbmdJbmZvLnJvb3RMYXllciwgJm5ld09mZnNldEZyb21Sb290
LCBmcmFnbWVudC5oYXNCb3VuZGluZ0JveCA/ICZmcmFnbWVudC5ib3VuZGluZ0JveCA6IDApOwor
ICAgICAgICAgICAgTGF5b3V0U2l6ZSBuZXdPZmZzZXRGcm9tUm9vdCA9IG9mZnNldEZyb21Sb290
ICsgZnJhZ21lbnQucGFnaW5hdGlvbk9mZnNldDsKKyAgICAgICAgICAgIGZyYWdtZW50LnNob3Vs
ZFBhaW50Q29udGVudCAmPSBpbnRlcnNlY3RzRGFtYWdlUmVjdChmcmFnbWVudC5sYXllckJvdW5k
cywgZnJhZ21lbnQuYmFja2dyb3VuZFJlY3QucmVjdCgpLCBsb2NhbFBhaW50aW5nSW5mby5yb290
TGF5ZXIsIG5ld09mZnNldEZyb21Sb290LCBmcmFnbWVudC5oYXNCb3VuZGluZ0JveCA/ICZmcmFn
bWVudC5ib3VuZGluZ0JveCA6IDApOwogICAgICAgICB9CiAgICAgfQogfQpAQCAtNDMxNyw3ICs0
MzE3LDcgQEAgdm9pZCBSZW5kZXJMYXllcjo6cGFpbnRUcmFuc2Zvcm1lZExheWVySW50b0ZyYWdt
ZW50cyhHcmFwaGljc0NvbnRleHQqIGNvbnRleHQsIGMKICAgICBMYXlvdXRSZWN0IHRyYW5zZm9y
bWVkRXh0ZW50ID0gdHJhbnNwYXJlbmN5Q2xpcEJveCh0aGlzLCBwYWdpbmF0ZWRMYXllciwgUGFp
bnRpbmdUcmFuc3BhcmVuY3lDbGlwQm94LCBSb290T2ZUcmFuc3BhcmVuY3lDbGlwQm94LCBwYWlu
dGluZ0luZm8ucGFpbnRCZWhhdmlvcik7CiAgICAgcGFnaW5hdGVkTGF5ZXItPmNvbGxlY3RGcmFn
bWVudHMoZW5jbG9zaW5nUGFnaW5hdGlvbkZyYWdtZW50cywgcGFpbnRpbmdJbmZvLnJvb3RMYXll
ciwgcGFpbnRpbmdJbmZvLnBhaW50RGlydHlSZWN0LCBFeGNsdWRlQ29tcG9zaXRlZFBhZ2luYXRl
ZExheWVycywKICAgICAgICAgKHBhaW50RmxhZ3MgJiBQYWludExheWVyVGVtcG9yYXJ5Q2xpcFJl
Y3RzKSA/IFRlbXBvcmFyeUNsaXBSZWN0cyA6IFBhaW50aW5nQ2xpcFJlY3RzLCBJZ25vcmVPdmVy
bGF5U2Nyb2xsYmFyU2l6ZSwKLSAgICAgICAgKHBhaW50RmxhZ3MgJiBQYWludExheWVyUGFpbnRp
bmdPdmVyZmxvd0NvbnRlbnRzKSA/IElnbm9yZU92ZXJmbG93Q2xpcCA6IFJlc3BlY3RPdmVyZmxv
d0NsaXAsICZvZmZzZXRPZlBhZ2luYXRpb25MYXllckZyb21Sb290LCAmdHJhbnNmb3JtZWRFeHRl
bnQpOworICAgICAgICAocGFpbnRGbGFncyAmIFBhaW50TGF5ZXJQYWludGluZ092ZXJmbG93Q29u
dGVudHMpID8gSWdub3JlT3ZlcmZsb3dDbGlwIDogUmVzcGVjdE92ZXJmbG93Q2xpcCwgb2Zmc2V0
T2ZQYWdpbmF0aW9uTGF5ZXJGcm9tUm9vdCwgJnRyYW5zZm9ybWVkRXh0ZW50KTsKICAgICAKICAg
ICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGVuY2xvc2luZ1BhZ2luYXRpb25GcmFnbWVudHMuc2l6
ZSgpOyArK2kpIHsKICAgICAgICAgY29uc3QgTGF5ZXJGcmFnbWVudCYgZnJhZ21lbnQgPSBlbmNs
b3NpbmdQYWdpbmF0aW9uRnJhZ21lbnRzLmF0KGkpOwpAQCAtNDgwOSw3ICs0ODA5LDggQEAgUmVu
ZGVyTGF5ZXIqIFJlbmRlckxheWVyOjpoaXRUZXN0TGF5ZXIoUmVuZGVyTGF5ZXIqIHJvb3RMYXll
ciwgUmVuZGVyTGF5ZXIqIGNvbnQKIAogICAgIC8vIENvbGxlY3QgdGhlIGZyYWdtZW50cy4gVGhp
cyB3aWxsIGNvbXB1dGUgdGhlIGNsaXAgcmVjdGFuZ2xlcyBmb3IgZWFjaCBsYXllciBmcmFnbWVu
dC4KICAgICBMYXllckZyYWdtZW50cyBsYXllckZyYWdtZW50czsKLSAgICBjb2xsZWN0RnJhZ21l
bnRzKGxheWVyRnJhZ21lbnRzLCByb290TGF5ZXIsIGhpdFRlc3RSZWN0LCBJbmNsdWRlQ29tcG9z
aXRlZFBhZ2luYXRlZExheWVycywgUm9vdFJlbGF0aXZlQ2xpcFJlY3RzLCBJbmNsdWRlT3Zlcmxh
eVNjcm9sbGJhclNpemUpOworICAgIGNvbGxlY3RGcmFnbWVudHMobGF5ZXJGcmFnbWVudHMsIHJv
b3RMYXllciwgaGl0VGVzdFJlY3QsIEluY2x1ZGVDb21wb3NpdGVkUGFnaW5hdGVkTGF5ZXJzLCBS
b290UmVsYXRpdmVDbGlwUmVjdHMsIEluY2x1ZGVPdmVybGF5U2Nyb2xsYmFyU2l6ZSwgUmVzcGVj
dE92ZXJmbG93Q2xpcCwKKyAgICAgICAgb2Zmc2V0RnJvbUFuY2VzdG9yKHJvb3RMYXllcikpOwog
CiAgICAgaWYgKGNhblJlc2l6ZSgpICYmIGhpdFRlc3RSZXNpemVySW5GcmFnbWVudHMobGF5ZXJG
cmFnbWVudHMsIGhpdFRlc3RMb2NhdGlvbikpIHsKICAgICAgICAgcmVuZGVyZXIoKS51cGRhdGVI
aXRUZXN0UmVzdWx0KHJlc3VsdCwgaGl0VGVzdExvY2F0aW9uLnBvaW50KCkpOwpAQCAtNDkxNiw3
ICs0OTE3LDcgQEAgUmVuZGVyTGF5ZXIqIFJlbmRlckxheWVyOjpoaXRUZXN0VHJhbnNmb3JtZWRM
YXllckluRnJhZ21lbnRzKFJlbmRlckxheWVyKiByb290TGEKICAgICBSZW5kZXJMYXllciogcGFn
aW5hdGVkTGF5ZXIgPSBlbmNsb3NpbmdQYWdpbmF0aW9uTGF5ZXIoSW5jbHVkZUNvbXBvc2l0ZWRQ
YWdpbmF0ZWRMYXllcnMpOwogICAgIExheW91dFJlY3QgdHJhbnNmb3JtZWRFeHRlbnQgPSB0cmFu
c3BhcmVuY3lDbGlwQm94KHRoaXMsIHBhZ2luYXRlZExheWVyLCBIaXRUZXN0aW5nVHJhbnNwYXJl
bmN5Q2xpcEJveCwgUm9vdE9mVHJhbnNwYXJlbmN5Q2xpcEJveCk7CiAgICAgcGFnaW5hdGVkTGF5
ZXItPmNvbGxlY3RGcmFnbWVudHMoZW5jbG9zaW5nUGFnaW5hdGlvbkZyYWdtZW50cywgcm9vdExh
eWVyLCBoaXRUZXN0UmVjdCwgSW5jbHVkZUNvbXBvc2l0ZWRQYWdpbmF0ZWRMYXllcnMsCi0gICAg
ICAgIFJvb3RSZWxhdGl2ZUNsaXBSZWN0cywgSW5jbHVkZU92ZXJsYXlTY3JvbGxiYXJTaXplLCBS
ZXNwZWN0T3ZlcmZsb3dDbGlwLCAmb2Zmc2V0T2ZQYWdpbmF0aW9uTGF5ZXJGcm9tUm9vdCwgJnRy
YW5zZm9ybWVkRXh0ZW50KTsKKyAgICAgICAgUm9vdFJlbGF0aXZlQ2xpcFJlY3RzLCBJbmNsdWRl
T3ZlcmxheVNjcm9sbGJhclNpemUsIFJlc3BlY3RPdmVyZmxvd0NsaXAsIG9mZnNldE9mUGFnaW5h
dGlvbkxheWVyRnJvbVJvb3QsICZ0cmFuc2Zvcm1lZEV4dGVudCk7CiAKICAgICBmb3IgKGludCBp
ID0gZW5jbG9zaW5nUGFnaW5hdGlvbkZyYWdtZW50cy5zaXplKCkgLSAxOyBpID49IDA7IC0taSkg
ewogICAgICAgICBjb25zdCBMYXllckZyYWdtZW50JiBmcmFnbWVudCA9IGVuY2xvc2luZ1BhZ2lu
YXRpb25GcmFnbWVudHMuYXQoaSk7CkBAIC01MjUxLDcgKzUyNTIsNyBAQCBDbGlwUmVjdCBSZW5k
ZXJMYXllcjo6YmFja2dyb3VuZENsaXBSZWN0KGNvbnN0IENsaXBSZWN0c0NvbnRleHQmIGNsaXBS
ZWN0c0NvbnRleAogfQogCiB2b2lkIFJlbmRlckxheWVyOjpjYWxjdWxhdGVSZWN0cyhjb25zdCBD
bGlwUmVjdHNDb250ZXh0JiBjbGlwUmVjdHNDb250ZXh0LCBjb25zdCBMYXlvdXRSZWN0JiBwYWlu
dERpcnR5UmVjdCwgTGF5b3V0UmVjdCYgbGF5ZXJCb3VuZHMsCi0gICAgQ2xpcFJlY3QmIGJhY2tn
cm91bmRSZWN0LCBDbGlwUmVjdCYgZm9yZWdyb3VuZFJlY3QsIENsaXBSZWN0JiBvdXRsaW5lUmVj
dCwgY29uc3QgTGF5b3V0U2l6ZSogb2Zmc2V0RnJvbVJvb3QpIGNvbnN0CisgICAgQ2xpcFJlY3Qm
IGJhY2tncm91bmRSZWN0LCBDbGlwUmVjdCYgZm9yZWdyb3VuZFJlY3QsIENsaXBSZWN0JiBvdXRs
aW5lUmVjdCwgY29uc3QgTGF5b3V0U2l6ZSYgb2Zmc2V0RnJvbVJvb3QpIGNvbnN0CiB7CiAgICAg
aWYgKGNsaXBSZWN0c0NvbnRleHQucm9vdExheWVyICE9IHRoaXMgJiYgcGFyZW50KCkpIHsKICAg
ICAgICAgYmFja2dyb3VuZFJlY3QgPSBiYWNrZ3JvdW5kQ2xpcFJlY3QoY2xpcFJlY3RzQ29udGV4
dCk7CkBAIC01MjU5LDIxICs1MjYwLDE2IEBAIHZvaWQgUmVuZGVyTGF5ZXI6OmNhbGN1bGF0ZVJl
Y3RzKGNvbnN0IENsaXBSZWN0c0NvbnRleHQmIGNsaXBSZWN0c0NvbnRleHQsIGNvbnN0CiAgICAg
fSBlbHNlCiAgICAgICAgIGJhY2tncm91bmRSZWN0ID0gcGFpbnREaXJ0eVJlY3Q7CiAKLSAgICBM
YXlvdXRTaXplIG9mZnNldEZyb21BY2VzdG9yOwotICAgIGlmIChvZmZzZXRGcm9tUm9vdCkKLSAg
ICAgICAgb2Zmc2V0RnJvbUFjZXN0b3IgPSAqb2Zmc2V0RnJvbVJvb3Q7Ci0gICAgZWxzZQotICAg
ICAgICBvZmZzZXRGcm9tQWNlc3RvciA9IG9mZnNldEZyb21BbmNlc3RvcihjbGlwUmVjdHNDb250
ZXh0LnJvb3RMYXllcik7Ci0KKyAgICBMYXlvdXRTaXplIG9mZnNldEZyb21Sb290TG9jYWwgPSBv
ZmZzZXRGcm9tUm9vdDsKICAgICBSZW5kZXJOYW1lZEZsb3dGcmFnbWVudCogbmFtZWRGbG93RnJh
Z21lbnQgPSBjdXJyZW50UmVuZGVyTmFtZWRGbG93RnJhZ21lbnQoKTsKICAgICAvLyBJZiB0aGUg
dmlldyBpcyBzY3JvbGxlZCwgdGhlIGZsb3cgdGhyZWFkIGlzIG5vdCBzY3JvbGxlZCB3aXRoIGl0
IGFuZCB3ZSBzaG91bGQKICAgICAvLyB0YWtlIHRoZSBzY3JvbGwgb2Zmc2V0IGludG8gYWNjb3Vu
dC4KICAgICBpZiAoY2xpcFJlY3RzQ29udGV4dC5yb290TGF5ZXItPmlzT3V0T2ZGbG93UmVuZGVy
Rmxvd1RocmVhZCgpICYmICFuYW1lZEZsb3dGcmFnbWVudCkgewogICAgICAgICBMYXlvdXRQb2lu
dCBhYnNQb3MgPSBMYXlvdXRQb2ludChyZW5kZXJlcigpLnZpZXcoKS5sb2NhbFRvQWJzb2x1dGUo
RmxvYXRQb2ludCgpLCBJc0ZpeGVkKSk7Ci0gICAgICAgIG9mZnNldEZyb21BY2VzdG9yICs9IHRv
TGF5b3V0U2l6ZShhYnNQb3MpOworICAgICAgICBvZmZzZXRGcm9tUm9vdExvY2FsICs9IHRvTGF5
b3V0U2l6ZShhYnNQb3MpOwogICAgIH0KIAotICAgIGxheWVyQm91bmRzID0gTGF5b3V0UmVjdCh0
b0xheW91dFBvaW50KG9mZnNldEZyb21BY2VzdG9yKSwgc2l6ZSgpKTsKKyAgICBsYXllckJvdW5k
cyA9IExheW91dFJlY3QodG9MYXlvdXRQb2ludChvZmZzZXRGcm9tUm9vdExvY2FsKSwgc2l6ZSgp
KTsKIAogICAgIGZvcmVncm91bmRSZWN0ID0gYmFja2dyb3VuZFJlY3Q7CiAgICAgb3V0bGluZVJl
Y3QgPSBiYWNrZ3JvdW5kUmVjdDsKQEAgLTUyOTYsNyArNTI5Miw3IEBAIHZvaWQgUmVuZGVyTGF5
ZXI6OmNhbGN1bGF0ZVJlY3RzKGNvbnN0IENsaXBSZWN0c0NvbnRleHQmIGNsaXBSZWN0c0NvbnRl
eHQsIGNvbnN0CiAgICAgICAgICAgICAgICAgcmVuZGVyZXJDb250YWluaW5nQmxvY2stPmZsaXBG
b3JXcml0aW5nTW9kZShsYXllckJvdW5kc1dpdGhWaXN1YWxPdmVyZmxvdyk7CiAgICAgICAgIH0K
IAotICAgICAgICBsYXllckJvdW5kc1dpdGhWaXN1YWxPdmVyZmxvdy5tb3ZlKG9mZnNldEZyb21B
Y2VzdG9yKTsKKyAgICAgICAgbGF5ZXJCb3VuZHNXaXRoVmlzdWFsT3ZlcmZsb3cubW92ZShvZmZz
ZXRGcm9tUm9vdExvY2FsKTsKICAgICAgICAgYmFja2dyb3VuZFJlY3QuaW50ZXJzZWN0KGxheWVy
Qm91bmRzV2l0aFZpc3VhbE92ZXJmbG93KTsKIAogICAgICAgICBmb3JlZ3JvdW5kUmVjdCA9IGJh
Y2tncm91bmRSZWN0OwpAQCAtNTMxMywxNCArNTMwOSwxNCBAQCB2b2lkIFJlbmRlckxheWVyOjpj
YWxjdWxhdGVSZWN0cyhjb25zdCBDbGlwUmVjdHNDb250ZXh0JiBjbGlwUmVjdHNDb250ZXh0LCBj
b25zdAogICAgIGlmIChyZW5kZXJlcigpLmhhc0NsaXBPck92ZXJmbG93Q2xpcCgpKSB7CiAgICAg
ICAgIC8vIFRoaXMgbGF5ZXIgZXN0YWJsaXNoZXMgYSBjbGlwIG9mIHNvbWUga2luZC4KICAgICAg
ICAgaWYgKHJlbmRlcmVyKCkuaGFzT3ZlcmZsb3dDbGlwKCkgJiYgKHRoaXMgIT0gY2xpcFJlY3Rz
Q29udGV4dC5yb290TGF5ZXIgfHwgY2xpcFJlY3RzQ29udGV4dC5yZXNwZWN0T3ZlcmZsb3dDbGlw
ID09IFJlc3BlY3RPdmVyZmxvd0NsaXApKSB7Ci0gICAgICAgICAgICBmb3JlZ3JvdW5kUmVjdC5p
bnRlcnNlY3QodG9SZW5kZXJCb3gocmVuZGVyZXIoKSkub3ZlcmZsb3dDbGlwUmVjdCh0b0xheW91
dFBvaW50KG9mZnNldEZyb21BY2VzdG9yKSwgbmFtZWRGbG93RnJhZ21lbnQsIGNsaXBSZWN0c0Nv
bnRleHQub3ZlcmxheVNjcm9sbGJhclNpemVSZWxldmFuY3kpKTsKKyAgICAgICAgICAgIGZvcmVn
cm91bmRSZWN0LmludGVyc2VjdCh0b1JlbmRlckJveChyZW5kZXJlcigpKS5vdmVyZmxvd0NsaXBS
ZWN0KHRvTGF5b3V0UG9pbnQob2Zmc2V0RnJvbVJvb3RMb2NhbCksIG5hbWVkRmxvd0ZyYWdtZW50
LCBjbGlwUmVjdHNDb250ZXh0Lm92ZXJsYXlTY3JvbGxiYXJTaXplUmVsZXZhbmN5KSk7CiAgICAg
ICAgICAgICBpZiAocmVuZGVyZXIoKS5zdHlsZSgpLmhhc0JvcmRlclJhZGl1cygpKQogICAgICAg
ICAgICAgICAgIGZvcmVncm91bmRSZWN0LnNldEhhc1JhZGl1cyh0cnVlKTsKICAgICAgICAgfQog
CiAgICAgICAgIGlmIChyZW5kZXJlcigpLmhhc0NsaXAoKSkgewogICAgICAgICAgICAgLy8gQ2xp
cCBhcHBsaWVzIHRvICp1cyogYXMgd2VsbCwgc28gZ28gYWhlYWQgYW5kIHVwZGF0ZSB0aGUgZGFt
YWdlUmVjdC4KLSAgICAgICAgICAgIExheW91dFJlY3QgbmV3UG9zQ2xpcCA9IHRvUmVuZGVyQm94
KHJlbmRlcmVyKCkpLmNsaXBSZWN0KHRvTGF5b3V0UG9pbnQob2Zmc2V0RnJvbUFjZXN0b3IpLCBu
YW1lZEZsb3dGcmFnbWVudCk7CisgICAgICAgICAgICBMYXlvdXRSZWN0IG5ld1Bvc0NsaXAgPSB0
b1JlbmRlckJveChyZW5kZXJlcigpKS5jbGlwUmVjdCh0b0xheW91dFBvaW50KG9mZnNldEZyb21S
b290TG9jYWwpLCBuYW1lZEZsb3dGcmFnbWVudCk7CiAgICAgICAgICAgICBiYWNrZ3JvdW5kUmVj
dC5pbnRlcnNlY3QobmV3UG9zQ2xpcCk7CiAgICAgICAgICAgICBmb3JlZ3JvdW5kUmVjdC5pbnRl
cnNlY3QobmV3UG9zQ2xpcCk7CiAgICAgICAgICAgICBvdXRsaW5lUmVjdC5pbnRlcnNlY3QobmV3
UG9zQ2xpcCk7CkBAIC01MzM0LDcgKzUzMzAsNyBAQCB2b2lkIFJlbmRlckxheWVyOjpjYWxjdWxh
dGVSZWN0cyhjb25zdCBDbGlwUmVjdHNDb250ZXh0JiBjbGlwUmVjdHNDb250ZXh0LCBjb25zdAog
ICAgICAgICAgICAgLy8gaW5kaXZpZHVhbCByZWdpb24gYm94ZXMgYXMgb3ZlcmZsb3cuCiAgICAg
ICAgICAgICBMYXlvdXRSZWN0IGxheWVyQm91bmRzV2l0aFZpc3VhbE92ZXJmbG93ID0gbmFtZWRG
bG93RnJhZ21lbnQgPyBuYW1lZEZsb3dGcmFnbWVudC0+dmlzdWFsT3ZlcmZsb3dSZWN0Rm9yQm94
KHJlbmRlckJveCgpKSA6IHJlbmRlckJveCgpLT52aXN1YWxPdmVyZmxvd1JlY3QoKTsKICAgICAg
ICAgICAgIHJlbmRlckJveCgpLT5mbGlwRm9yV3JpdGluZ01vZGUobGF5ZXJCb3VuZHNXaXRoVmlz
dWFsT3ZlcmZsb3cpOyAvLyBMYXllcnMgYXJlIGluIHBoeXNpY2FsIGNvb3JkaW5hdGVzLCBzbyB0
aGUgb3ZlcmZsb3cgaGFzIHRvIGJlIGZsaXBwZWQuCi0gICAgICAgICAgICBsYXllckJvdW5kc1dp
dGhWaXN1YWxPdmVyZmxvdy5tb3ZlKG9mZnNldEZyb21BY2VzdG9yKTsKKyAgICAgICAgICAgIGxh
eWVyQm91bmRzV2l0aFZpc3VhbE92ZXJmbG93Lm1vdmUob2Zmc2V0RnJvbVJvb3RMb2NhbCk7CiAg
ICAgICAgICAgICBpZiAodGhpcyAhPSBjbGlwUmVjdHNDb250ZXh0LnJvb3RMYXllciB8fCBjbGlw
UmVjdHNDb250ZXh0LnJlc3BlY3RPdmVyZmxvd0NsaXAgPT0gUmVzcGVjdE92ZXJmbG93Q2xpcCkK
ICAgICAgICAgICAgICAgICBiYWNrZ3JvdW5kUmVjdC5pbnRlcnNlY3QobGF5ZXJCb3VuZHNXaXRo
VmlzdWFsT3ZlcmZsb3cpOwogICAgICAgICB9IGVsc2UgewpAQCAtNTM0Myw3ICs1MzM5LDcgQEAg
dm9pZCBSZW5kZXJMYXllcjo6Y2FsY3VsYXRlUmVjdHMoY29uc3QgQ2xpcFJlY3RzQ29udGV4dCYg
Y2xpcFJlY3RzQ29udGV4dCwgY29uc3QKICAgICAgICAgICAgIGlmIChuYW1lZEZsb3dGcmFnbWVu
dCkKICAgICAgICAgICAgICAgICBib3VuZHMgPSBuYW1lZEZsb3dGcmFnbWVudC0+cmVjdEZsb3dQ
b3J0aW9uRm9yQm94KHJlbmRlckJveCgpLCBib3VuZHMpOwogCi0gICAgICAgICAgICBib3VuZHMu
bW92ZShvZmZzZXRGcm9tQWNlc3Rvcik7CisgICAgICAgICAgICBib3VuZHMubW92ZShvZmZzZXRG
cm9tUm9vdExvY2FsKTsKICAgICAgICAgICAgIGlmICh0aGlzICE9IGNsaXBSZWN0c0NvbnRleHQu
cm9vdExheWVyIHx8IGNsaXBSZWN0c0NvbnRleHQucmVzcGVjdE92ZXJmbG93Q2xpcCA9PSBSZXNw
ZWN0T3ZlcmZsb3dDbGlwKQogICAgICAgICAgICAgICAgIGJhY2tncm91bmRSZWN0LmludGVyc2Vj
dChib3VuZHMpOwogICAgICAgICAgICAgCkBAIC01MzcxLDcgKzUzNjcsNyBAQCBMYXlvdXRSZWN0
IFJlbmRlckxheWVyOjpjaGlsZHJlbkNsaXBSZWN0KCkgY29uc3QKICAgICBDbGlwUmVjdCBiYWNr
Z3JvdW5kUmVjdCwgZm9yZWdyb3VuZFJlY3QsIG91dGxpbmVSZWN0OwogICAgIENsaXBSZWN0c0Nv
bnRleHQgY2xpcFJlY3RzQ29udGV4dChjbGlwcGluZ1Jvb3RMYXllciwgVGVtcG9yYXJ5Q2xpcFJl
Y3RzKTsKICAgICAvLyBOZWVkIHRvIHVzZSB0ZW1wb3JhcnkgY2xpcCByZWN0cywgYmVjYXVzZSB0
aGUgdmFsdWUgb2YgJ2RvbnRDbGlwVG9PdmVyZmxvdycgbWF5IGJlIGRpZmZlcmVudCBmcm9tIHRo
ZSBwYWludGluZyBwYXRoICg8cmRhcjovL3Byb2JsZW0vMTE4NDQ5MDk+KS4KLSAgICBjYWxjdWxh
dGVSZWN0cyhjbGlwUmVjdHNDb250ZXh0LCByZW5kZXJlcigpLnZpZXcoKS51bnNjYWxlZERvY3Vt
ZW50UmVjdCgpLCBsYXllckJvdW5kcywgYmFja2dyb3VuZFJlY3QsIGZvcmVncm91bmRSZWN0LCBv
dXRsaW5lUmVjdCk7CisgICAgY2FsY3VsYXRlUmVjdHMoY2xpcFJlY3RzQ29udGV4dCwgcmVuZGVy
ZXIoKS52aWV3KCkudW5zY2FsZWREb2N1bWVudFJlY3QoKSwgbGF5ZXJCb3VuZHMsIGJhY2tncm91
bmRSZWN0LCBmb3JlZ3JvdW5kUmVjdCwgb3V0bGluZVJlY3QsIG9mZnNldEZyb21BbmNlc3Rvcihj
bGlwUmVjdHNDb250ZXh0LnJvb3RMYXllcikpOwogICAgIHJldHVybiBjbGlwcGluZ1Jvb3RMYXll
ci0+cmVuZGVyZXIoKS5sb2NhbFRvQWJzb2x1dGVRdWFkKEZsb2F0UXVhZChmb3JlZ3JvdW5kUmVj
dC5yZWN0KCkpKS5lbmNsb3NpbmdCb3VuZGluZ0JveCgpOwogfQogCkBAIC01MzgzLDcgKzUzNzks
NyBAQCBMYXlvdXRSZWN0IFJlbmRlckxheWVyOjpzZWxmQ2xpcFJlY3QoKSBjb25zdAogICAgIExh
eW91dFJlY3QgbGF5ZXJCb3VuZHM7CiAgICAgQ2xpcFJlY3QgYmFja2dyb3VuZFJlY3QsIGZvcmVn
cm91bmRSZWN0LCBvdXRsaW5lUmVjdDsKICAgICBDbGlwUmVjdHNDb250ZXh0IGNsaXBSZWN0c0Nv
bnRleHQoY2xpcHBpbmdSb290TGF5ZXIsIFBhaW50aW5nQ2xpcFJlY3RzKTsKLSAgICBjYWxjdWxh
dGVSZWN0cyhjbGlwUmVjdHNDb250ZXh0LCByZW5kZXJlcigpLnZpZXcoKS5kb2N1bWVudFJlY3Qo
KSwgbGF5ZXJCb3VuZHMsIGJhY2tncm91bmRSZWN0LCBmb3JlZ3JvdW5kUmVjdCwgb3V0bGluZVJl
Y3QpOworICAgIGNhbGN1bGF0ZVJlY3RzKGNsaXBSZWN0c0NvbnRleHQsIHJlbmRlcmVyKCkudmll
dygpLmRvY3VtZW50UmVjdCgpLCBsYXllckJvdW5kcywgYmFja2dyb3VuZFJlY3QsIGZvcmVncm91
bmRSZWN0LCBvdXRsaW5lUmVjdCwgb2Zmc2V0RnJvbUFuY2VzdG9yKGNsaXBwaW5nUm9vdExheWVy
KSk7CiAgICAgcmV0dXJuIGNsaXBwaW5nUm9vdExheWVyLT5yZW5kZXJlcigpLmxvY2FsVG9BYnNv
bHV0ZVF1YWQoRmxvYXRRdWFkKGJhY2tncm91bmRSZWN0LnJlY3QoKSkpLmVuY2xvc2luZ0JvdW5k
aW5nQm94KCk7CiB9CiAKQEAgLTUzOTksNyArNTM5NSw3IEBAIExheW91dFJlY3QgUmVuZGVyTGF5
ZXI6OmxvY2FsQ2xpcFJlY3QoYm9vbCYgY2xpcEV4Y2VlZHNCb3VuZHMpIGNvbnN0CiAgICAgTGF5
b3V0UmVjdCBsYXllckJvdW5kczsKICAgICBDbGlwUmVjdCBiYWNrZ3JvdW5kUmVjdCwgZm9yZWdy
b3VuZFJlY3QsIG91dGxpbmVSZWN0OwogICAgIENsaXBSZWN0c0NvbnRleHQgY2xpcFJlY3RzQ29u
dGV4dChjbGlwcGluZ1Jvb3RMYXllciwgUGFpbnRpbmdDbGlwUmVjdHMpOwotICAgIGNhbGN1bGF0
ZVJlY3RzKGNsaXBSZWN0c0NvbnRleHQsIExheW91dFJlY3Q6OmluZmluaXRlUmVjdCgpLCBsYXll
ckJvdW5kcywgYmFja2dyb3VuZFJlY3QsIGZvcmVncm91bmRSZWN0LCBvdXRsaW5lUmVjdCwgJm9m
ZnNldEZyb21Sb290KTsKKyAgICBjYWxjdWxhdGVSZWN0cyhjbGlwUmVjdHNDb250ZXh0LCBMYXlv
dXRSZWN0OjppbmZpbml0ZVJlY3QoKSwgbGF5ZXJCb3VuZHMsIGJhY2tncm91bmRSZWN0LCBmb3Jl
Z3JvdW5kUmVjdCwgb3V0bGluZVJlY3QsIG9mZnNldEZyb21Sb290KTsKIAogICAgIExheW91dFJl
Y3QgY2xpcFJlY3QgPSBiYWNrZ3JvdW5kUmVjdC5yZWN0KCk7CiAgICAgaWYgKGNsaXBSZWN0ID09
IExheW91dFJlY3Q6OmluZmluaXRlUmVjdCgpKQpAQCAtNTQ0NSw3ICs1NDQxLDcgQEAgdm9pZCBS
ZW5kZXJMYXllcjo6cmVwYWludEJsb2NrU2VsZWN0aW9uR2FwcygpCiAgICAgICAgIHJlbmRlcmVy
KCkucmVwYWludFJlY3RhbmdsZShyZWN0KTsKIH0KIAotYm9vbCBSZW5kZXJMYXllcjo6aW50ZXJz
ZWN0c0RhbWFnZVJlY3QoY29uc3QgTGF5b3V0UmVjdCYgbGF5ZXJCb3VuZHMsIGNvbnN0IExheW91
dFJlY3QmIGRhbWFnZVJlY3QsIGNvbnN0IFJlbmRlckxheWVyKiByb290TGF5ZXIsIGNvbnN0IExh
eW91dFNpemUqIG9mZnNldEZyb21Sb290LCBjb25zdCBMYXlvdXRSZWN0KiBjYWNoZWRCb3VuZGlu
Z0JveCkgY29uc3QKK2Jvb2wgUmVuZGVyTGF5ZXI6OmludGVyc2VjdHNEYW1hZ2VSZWN0KGNvbnN0
IExheW91dFJlY3QmIGxheWVyQm91bmRzLCBjb25zdCBMYXlvdXRSZWN0JiBkYW1hZ2VSZWN0LCBj
b25zdCBSZW5kZXJMYXllciogcm9vdExheWVyLCBjb25zdCBMYXlvdXRTaXplJiBvZmZzZXRGcm9t
Um9vdCwgY29uc3QgTGF5b3V0UmVjdCogY2FjaGVkQm91bmRpbmdCb3gpIGNvbnN0CiB7CiAgICAg
Ly8gQWx3YXlzIGV4YW1pbmUgdGhlIGNhbnZhcyBhbmQgdGhlIHJvb3QuCiAgICAgLy8gRklYTUU6
IENvdWxkIGVsaW1pbmF0ZSB0aGUgaXNSb290KCkgY2hlY2sgaWYgd2UgZml4IGJhY2tncm91bmQg
cGFpbnRpbmcgc28gdGhhdCB0aGUgUmVuZGVyVmlldwpAQCAtNTQ4MSw3ICs1NDc3LDcgQEAgYm9v
bCBSZW5kZXJMYXllcjo6aW50ZXJzZWN0c0RhbWFnZVJlY3QoY29uc3QgTGF5b3V0UmVjdCYgbGF5
ZXJCb3VuZHMsIGNvbnN0IExheW8KICAgICBpZiAoY2FjaGVkQm91bmRpbmdCb3gpCiAgICAgICAg
IHJldHVybiBjYWNoZWRCb3VuZGluZ0JveC0+aW50ZXJzZWN0cyhkYW1hZ2VSZWN0KTsKICAgICAK
LSAgICByZXR1cm4gYm91bmRpbmdCb3gocm9vdExheWVyLCAwLCBvZmZzZXRGcm9tUm9vdCkuaW50
ZXJzZWN0cyhkYW1hZ2VSZWN0KTsKKyAgICByZXR1cm4gYm91bmRpbmdCb3gocm9vdExheWVyLCBv
ZmZzZXRGcm9tUm9vdCkuaW50ZXJzZWN0cyhkYW1hZ2VSZWN0KTsKIH0KIAogTGF5b3V0UmVjdCBS
ZW5kZXJMYXllcjo6bG9jYWxCb3VuZGluZ0JveChDYWxjdWxhdGVMYXllckJvdW5kc0ZsYWdzIGZs
YWdzKSBjb25zdApAQCAtNTUyNyw3ICs1NTIzLDcgQEAgTGF5b3V0UmVjdCBSZW5kZXJMYXllcjo6
bG9jYWxCb3VuZGluZ0JveChDYWxjdWxhdGVMYXllckJvdW5kc0ZsYWdzIGZsYWdzKSBjb25zdAog
ICAgIHJldHVybiByZXN1bHQ7CiB9CiAKLUxheW91dFJlY3QgUmVuZGVyTGF5ZXI6OmJvdW5kaW5n
Qm94KGNvbnN0IFJlbmRlckxheWVyKiBhbmNlc3RvckxheWVyLCBDYWxjdWxhdGVMYXllckJvdW5k
c0ZsYWdzIGZsYWdzLCBjb25zdCBMYXlvdXRTaXplKiBvZmZzZXRGcm9tUm9vdCkgY29uc3QKK0xh
eW91dFJlY3QgUmVuZGVyTGF5ZXI6OmJvdW5kaW5nQm94KGNvbnN0IFJlbmRlckxheWVyKiBhbmNl
c3RvckxheWVyLCBjb25zdCBMYXlvdXRTaXplJiBvZmZzZXRGcm9tUm9vdCwgQ2FsY3VsYXRlTGF5
ZXJCb3VuZHNGbGFncyBmbGFncykgY29uc3QKIHsgICAgCiAgICAgTGF5b3V0UmVjdCByZXN1bHQg
PSBsb2NhbEJvdW5kaW5nQm94KGZsYWdzKTsKICAgICBpZiAocmVuZGVyZXIoKS5pc0JveCgpKQpA
QCAtNTU2MSwyNyArNTU1NywyMyBAQCBMYXlvdXRSZWN0IFJlbmRlckxheWVyOjpib3VuZGluZ0Jv
eChjb25zdCBSZW5kZXJMYXllciogYW5jZXN0b3JMYXllciwgQ2FsY3VsYXRlTAogICAgICAgICBy
ZXR1cm4gcmVzdWx0OwogICAgIH0KICAgICAKLSAgICBMYXlvdXRTaXplIGRlbHRhOwotICAgIGlm
IChvZmZzZXRGcm9tUm9vdCkKLSAgICAgICAgZGVsdGEgPSAqb2Zmc2V0RnJvbVJvb3Q7Ci0gICAg
ZWxzZQotICAgICAgICBkZWx0YSA9IG9mZnNldEZyb21BbmNlc3RvcihhbmNlc3RvckxheWVyKTsK
LSAgICAKLSAgICByZXN1bHQubW92ZShkZWx0YSk7CisgICAgcmVzdWx0Lm1vdmUob2Zmc2V0RnJv
bVJvb3QpOwogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKIEludFJlY3QgUmVuZGVyTGF5ZXI6OmFi
c29sdXRlQm91bmRpbmdCb3goKSBjb25zdAogewotICAgIHJldHVybiBwaXhlbFNuYXBwZWRJbnRS
ZWN0KGJvdW5kaW5nQm94KHJvb3QoKSkpOworICAgIGNvbnN0IFJlbmRlckxheWVyKiByb290TGF5
ZXIgPSByb290KCk7CisgICAgcmV0dXJuIHBpeGVsU25hcHBlZEludFJlY3QoYm91bmRpbmdCb3go
cm9vdExheWVyLCBvZmZzZXRGcm9tQW5jZXN0b3Iocm9vdExheWVyKSkpOwogfQogCiBGbG9hdFJl
Y3QgUmVuZGVyTGF5ZXI6OmFic29sdXRlQm91bmRpbmdCb3hGb3JQYWludGluZygpIGNvbnN0CiB7
Ci0gICAgcmV0dXJuIHBpeGVsU25hcHBlZEZvclBhaW50aW5nKGJvdW5kaW5nQm94KHJvb3QoKSks
IHJlbmRlcmVyKCkuZG9jdW1lbnQoKS5kZXZpY2VTY2FsZUZhY3RvcigpKTsKKyAgICBjb25zdCBS
ZW5kZXJMYXllciogcm9vdExheWVyID0gcm9vdCgpOworICAgIHJldHVybiBwaXhlbFNuYXBwZWRG
b3JQYWludGluZyhib3VuZGluZ0JveChyb290TGF5ZXIsIG9mZnNldEZyb21BbmNlc3Rvcihyb290
TGF5ZXIpKSwgcmVuZGVyZXIoKS5kb2N1bWVudCgpLmRldmljZVNjYWxlRmFjdG9yKCkpOwogfQog
Ci1MYXlvdXRSZWN0IFJlbmRlckxheWVyOjpjYWxjdWxhdGVMYXllckJvdW5kcyhjb25zdCBSZW5k
ZXJMYXllciogYW5jZXN0b3JMYXllciwgY29uc3QgTGF5b3V0U2l6ZSogb2Zmc2V0RnJvbVJvb3Qs
IENhbGN1bGF0ZUxheWVyQm91bmRzRmxhZ3MgZmxhZ3MpIGNvbnN0CitMYXlvdXRSZWN0IFJlbmRl
ckxheWVyOjpjYWxjdWxhdGVMYXllckJvdW5kcyhjb25zdCBSZW5kZXJMYXllciogYW5jZXN0b3JM
YXllciwgY29uc3QgTGF5b3V0U2l6ZSYgb2Zmc2V0RnJvbVJvb3QsIENhbGN1bGF0ZUxheWVyQm91
bmRzRmxhZ3MgZmxhZ3MpIGNvbnN0CiB7CiAgICAgaWYgKCFpc1NlbGZQYWludGluZ0xheWVyKCkp
CiAgICAgICAgIHJldHVybiBMYXlvdXRSZWN0KCk7CkBAIC01NjMyLDcgKzU2MjQsNyBAQCBMYXlv
dXRSZWN0IFJlbmRlckxheWVyOjpjYWxjdWxhdGVMYXllckJvdW5kcyhjb25zdCBSZW5kZXJMYXll
ciogYW5jZXN0b3JMYXllciwgYwogCiAgICAgaWYgKFJlbmRlckxheWVyKiByZWZsZWN0aW9uID0g
cmVmbGVjdGlvbkxheWVyKCkpIHsKICAgICAgICAgaWYgKCFyZWZsZWN0aW9uLT5pc0NvbXBvc2l0
ZWQoKSkgewotICAgICAgICAgICAgTGF5b3V0UmVjdCBjaGlsZFVuaW9uQm91bmRzID0gcmVmbGVj
dGlvbi0+Y2FsY3VsYXRlTGF5ZXJCb3VuZHModGhpcywgbnVsbHB0ciwgZGVzY2VuZGFudEZsYWdz
KTsKKyAgICAgICAgICAgIExheW91dFJlY3QgY2hpbGRVbmlvbkJvdW5kcyA9IHJlZmxlY3Rpb24t
PmNhbGN1bGF0ZUxheWVyQm91bmRzKHRoaXMsIHJlZmxlY3Rpb24tPm9mZnNldEZyb21BbmNlc3Rv
cih0aGlzKSwgZGVzY2VuZGFudEZsYWdzKTsKICAgICAgICAgICAgIHVuaW9uQm91bmRzLnVuaXRl
KGNoaWxkVW5pb25Cb3VuZHMpOwogICAgICAgICB9CiAgICAgfQpAQCAtNTY0OCw3ICs1NjQwLDcg
QEAgTGF5b3V0UmVjdCBSZW5kZXJMYXllcjo6Y2FsY3VsYXRlTGF5ZXJCb3VuZHMoY29uc3QgUmVu
ZGVyTGF5ZXIqIGFuY2VzdG9yTGF5ZXIsIGMKICAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkg
PCBsaXN0U2l6ZTsgKytpKSB7CiAgICAgICAgICAgICBSZW5kZXJMYXllciogY3VyTGF5ZXIgPSBu
ZWdaT3JkZXJMaXN0LT5hdChpKTsKICAgICAgICAgICAgIGlmIChmbGFncyAmIEluY2x1ZGVDb21w
b3NpdGVkRGVzY2VuZGFudHMgfHwgIWN1ckxheWVyLT5pc0NvbXBvc2l0ZWQoKSkgewotICAgICAg
ICAgICAgICAgIExheW91dFJlY3QgY2hpbGRVbmlvbkJvdW5kcyA9IGN1ckxheWVyLT5jYWxjdWxh
dGVMYXllckJvdW5kcyh0aGlzLCBudWxscHRyLCBkZXNjZW5kYW50RmxhZ3MpOworICAgICAgICAg
ICAgICAgIExheW91dFJlY3QgY2hpbGRVbmlvbkJvdW5kcyA9IGN1ckxheWVyLT5jYWxjdWxhdGVM
YXllckJvdW5kcyh0aGlzLCBjdXJMYXllci0+b2Zmc2V0RnJvbUFuY2VzdG9yKHRoaXMpLCBkZXNj
ZW5kYW50RmxhZ3MpOwogICAgICAgICAgICAgICAgIHVuaW9uQm91bmRzLnVuaXRlKGNoaWxkVW5p
b25Cb3VuZHMpOwogICAgICAgICAgICAgfQogICAgICAgICB9CkBAIC01NjYwLDcgKzU2NTIsNyBA
QCBMYXlvdXRSZWN0IFJlbmRlckxheWVyOjpjYWxjdWxhdGVMYXllckJvdW5kcyhjb25zdCBSZW5k
ZXJMYXllciogYW5jZXN0b3JMYXllciwgYwogICAgICAgICAgICAgUmVuZGVyTGF5ZXIqIGN1ckxh
eWVyID0gcG9zWk9yZGVyTGlzdC0+YXQoaSk7CiAgICAgICAgICAgICAvLyBUaGUgUmVuZGVyTmFt
ZWRGbG93VGhyZWFkIGlzIGlnbm9yZWQgd2hlbiB3ZSBjYWxjdWxhdGUgdGhlIGJvdW5kcyBvZiB0
aGUgUmVuZGVyVmlldy4KICAgICAgICAgICAgIGlmICgoZmxhZ3MgJiBJbmNsdWRlQ29tcG9zaXRl
ZERlc2NlbmRhbnRzIHx8ICFjdXJMYXllci0+aXNDb21wb3NpdGVkKCkpICYmICFjdXJMYXllci0+
aXNGbG93VGhyZWFkQ29sbGVjdGluZ0dyYXBoaWNzTGF5ZXJzVW5kZXJSZWdpb25zKCkpIHsKLSAg
ICAgICAgICAgICAgICBMYXlvdXRSZWN0IGNoaWxkVW5pb25Cb3VuZHMgPSBjdXJMYXllci0+Y2Fs
Y3VsYXRlTGF5ZXJCb3VuZHModGhpcywgbnVsbHB0ciwgZGVzY2VuZGFudEZsYWdzKTsKKyAgICAg
ICAgICAgICAgICBMYXlvdXRSZWN0IGNoaWxkVW5pb25Cb3VuZHMgPSBjdXJMYXllci0+Y2FsY3Vs
YXRlTGF5ZXJCb3VuZHModGhpcywgY3VyTGF5ZXItPm9mZnNldEZyb21BbmNlc3Rvcih0aGlzKSwg
ZGVzY2VuZGFudEZsYWdzKTsKICAgICAgICAgICAgICAgICB1bmlvbkJvdW5kcy51bml0ZShjaGls
ZFVuaW9uQm91bmRzKTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQpAQCAtNTY3NCw3ICs1NjY2
LDcgQEAgTGF5b3V0UmVjdCBSZW5kZXJMYXllcjo6Y2FsY3VsYXRlTGF5ZXJCb3VuZHMoY29uc3Qg
UmVuZGVyTGF5ZXIqIGFuY2VzdG9yTGF5ZXIsIGMKICAgICAgICAgICAgIC8vIHNvIHRoZXJlJ3Mg
bm8gd2F5IHdlIGNvdWxkIGhpdCBhIFJlbmRlck5hbWVkRmxvd1RocmVhZCBoZXJlLgogICAgICAg
ICAgICAgQVNTRVJUKCFjdXJMYXllci0+aXNGbG93VGhyZWFkQ29sbGVjdGluZ0dyYXBoaWNzTGF5
ZXJzVW5kZXJSZWdpb25zKCkpOwogICAgICAgICAgICAgaWYgKGZsYWdzICYgSW5jbHVkZUNvbXBv
c2l0ZWREZXNjZW5kYW50cyB8fCAhY3VyTGF5ZXItPmlzQ29tcG9zaXRlZCgpKSB7Ci0gICAgICAg
ICAgICAgICAgTGF5b3V0UmVjdCBjdXJBYnNCb3VuZHMgPSBjdXJMYXllci0+Y2FsY3VsYXRlTGF5
ZXJCb3VuZHModGhpcywgbnVsbHB0ciwgZGVzY2VuZGFudEZsYWdzKTsKKyAgICAgICAgICAgICAg
ICBMYXlvdXRSZWN0IGN1ckFic0JvdW5kcyA9IGN1ckxheWVyLT5jYWxjdWxhdGVMYXllckJvdW5k
cyh0aGlzLCBjdXJMYXllci0+b2Zmc2V0RnJvbUFuY2VzdG9yKHRoaXMpLCBkZXNjZW5kYW50Rmxh
Z3MpOwogICAgICAgICAgICAgICAgIHVuaW9uQm91bmRzLnVuaXRlKGN1ckFic0JvdW5kcyk7CiAg
ICAgICAgICAgICB9CiAgICAgICAgIH0KQEAgLTU2OTMsMTQgKzU2ODUsNyBAQCBMYXlvdXRSZWN0
IFJlbmRlckxheWVyOjpjYWxjdWxhdGVMYXllckJvdW5kcyhjb25zdCBSZW5kZXJMYXllciogYW5j
ZXN0b3JMYXllciwgYwogICAgICAgICBib3VuZGluZ0JveFJlY3QgPSBhZmZpbmVUcmFucy0+bWFw
UmVjdChib3VuZGluZ0JveFJlY3QpOwogICAgICAgICB1bmlvbkJvdW5kcyA9IGFmZmluZVRyYW5z
LT5tYXBSZWN0KHVuaW9uQm91bmRzKTsKICAgICB9Ci0KLSAgICBMYXlvdXRTaXplIG9mZnNldEZy
b21BbmNlc3RvcjsKLSAgICBpZiAob2Zmc2V0RnJvbVJvb3QpCi0gICAgICAgIG9mZnNldEZyb21B
bmNlc3RvciA9ICpvZmZzZXRGcm9tUm9vdDsKLSAgICBlbHNlCi0gICAgICAgIG9mZnNldEZyb21B
bmNlc3RvciA9IHRoaXMtPm9mZnNldEZyb21BbmNlc3RvcihhbmNlc3RvckxheWVyKTsKLSAgICB1
bmlvbkJvdW5kcy5tb3ZlKG9mZnNldEZyb21BbmNlc3Rvcik7Ci0gICAgCisgICAgdW5pb25Cb3Vu
ZHMubW92ZShvZmZzZXRGcm9tUm9vdCk7CiAgICAgcmV0dXJuIHVuaW9uQm91bmRzOwogfQogCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXIuaCBiL1NvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllci5oCmluZGV4IGM2MWE2Y2M3Y2QzNjliYzIw
OTc2ZGFhNGFhMzM1MTgzNmMxZWZmZDguLjdmN2ZiNmJkOTViMzc0ZjFiYThiZDllYTEwNDY4OWRj
YmI3NjgzNTQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXll
ci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllci5oCkBAIC03MDAs
NyArNzAwLDcgQEAgcHVibGljOgogICAgIC8vIGZvciBwYWludGluZy9ldmVudCBoYW5kbGluZy4K
ICAgICAvLyBQYXNzIG9mZnNldEZyb21Sb290IGlmIGtub3duLgogICAgIHZvaWQgY2FsY3VsYXRl
UmVjdHMoY29uc3QgQ2xpcFJlY3RzQ29udGV4dCYsIGNvbnN0IExheW91dFJlY3QmIHBhaW50RGly
dHlSZWN0LCBMYXlvdXRSZWN0JiBsYXllckJvdW5kcywKLSAgICAgICAgQ2xpcFJlY3QmIGJhY2tn
cm91bmRSZWN0LCBDbGlwUmVjdCYgZm9yZWdyb3VuZFJlY3QsIENsaXBSZWN0JiBvdXRsaW5lUmVj
dCwgY29uc3QgTGF5b3V0U2l6ZSogb2Zmc2V0RnJvbVJvb3QgPSBudWxscHRyKSBjb25zdDsKKyAg
ICAgICAgQ2xpcFJlY3QmIGJhY2tncm91bmRSZWN0LCBDbGlwUmVjdCYgZm9yZWdyb3VuZFJlY3Qs
IENsaXBSZWN0JiBvdXRsaW5lUmVjdCwgY29uc3QgTGF5b3V0U2l6ZSYgb2Zmc2V0RnJvbVJvb3Qp
IGNvbnN0OwogCiAgICAgLy8gQ29tcHV0ZSBhbmQgY2FjaGUgY2xpcCByZWN0cyBjb21wdXRlZCB3
aXRoIHRoZSBnaXZlbiBsYXllciBhcyB0aGUgcm9vdAogICAgIHZvaWQgdXBkYXRlQ2xpcFJlY3Rz
KGNvbnN0IENsaXBSZWN0c0NvbnRleHQmKTsKQEAgLTcxOSw3ICs3MTksNyBAQCBwdWJsaWM6CiAg
ICAgTGF5b3V0UmVjdCBsb2NhbENsaXBSZWN0KGJvb2wmIGNsaXBFeGNlZWRzQm91bmRzKSBjb25z
dDsgLy8gUmV0dXJucyB0aGUgYmFja2dyb3VuZCBjbGlwIHJlY3Qgb2YgdGhlIGxheWVyIGluIHRo
ZSBsb2NhbCBjb29yZGluYXRlIHNwYWNlLgogCiAgICAgLy8gUGFzcyBvZmZzZXRGcm9tUm9vdCBp
ZiBrbm93bi4KLSAgICBib29sIGludGVyc2VjdHNEYW1hZ2VSZWN0KGNvbnN0IExheW91dFJlY3Qm
IGxheWVyQm91bmRzLCBjb25zdCBMYXlvdXRSZWN0JiBkYW1hZ2VSZWN0LCBjb25zdCBSZW5kZXJM
YXllciogcm9vdExheWVyLCBjb25zdCBMYXlvdXRTaXplKiBvZmZzZXRGcm9tUm9vdCA9IG51bGxw
dHIsIGNvbnN0IExheW91dFJlY3QqIGNhY2hlZEJvdW5kaW5nQm94ID0gbnVsbHB0cikgY29uc3Q7
CisgICAgYm9vbCBpbnRlcnNlY3RzRGFtYWdlUmVjdChjb25zdCBMYXlvdXRSZWN0JiBsYXllckJv
dW5kcywgY29uc3QgTGF5b3V0UmVjdCYgZGFtYWdlUmVjdCwgY29uc3QgUmVuZGVyTGF5ZXIqIHJv
b3RMYXllciwgY29uc3QgTGF5b3V0U2l6ZSYgb2Zmc2V0RnJvbVJvb3QsIGNvbnN0IExheW91dFJl
Y3QqIGNhY2hlZEJvdW5kaW5nQm94ID0gbnVsbHB0cikgY29uc3Q7CiAKICAgICBlbnVtIENhbGN1
bGF0ZUxheWVyQm91bmRzRmxhZyB7CiAgICAgICAgIEluY2x1ZGVTZWxmVHJhbnNmb3JtID0gMSA8
PCAwLApAQCAtNzM1LDcgKzczNSw3IEBAIHB1YmxpYzoKICAgICB0eXBlZGVmIHVuc2lnbmVkIENh
bGN1bGF0ZUxheWVyQm91bmRzRmxhZ3M7CiAKICAgICAvLyBCb3VuZGluZyBib3ggcmVsYXRpdmUg
dG8gc29tZSBhbmNlc3RvciBsYXllci4gUGFzcyBvZmZzZXRGcm9tUm9vdCBpZiBrbm93bi4KLSAg
ICBMYXlvdXRSZWN0IGJvdW5kaW5nQm94KGNvbnN0IFJlbmRlckxheWVyKiByb290TGF5ZXIsIENh
bGN1bGF0ZUxheWVyQm91bmRzRmxhZ3MgPSAwLCBjb25zdCBMYXlvdXRTaXplKiBvZmZzZXRGcm9t
Um9vdCA9IG51bGxwdHIpIGNvbnN0OworICAgIExheW91dFJlY3QgYm91bmRpbmdCb3goY29uc3Qg
UmVuZGVyTGF5ZXIqIHJvb3RMYXllciwgY29uc3QgTGF5b3V0U2l6ZSYgb2Zmc2V0RnJvbVJvb3Qg
PSBMYXlvdXRTaXplKCksIENhbGN1bGF0ZUxheWVyQm91bmRzRmxhZ3MgPSAwKSBjb25zdDsKICAg
ICAvLyBCb3VuZGluZyBib3ggaW4gdGhlIGNvb3JkaW5hdGVzIG9mIHRoaXMgbGF5ZXIuCiAgICAg
TGF5b3V0UmVjdCBsb2NhbEJvdW5kaW5nQm94KENhbGN1bGF0ZUxheWVyQm91bmRzRmxhZ3MgPSAw
KSBjb25zdDsKICAgICAvLyBEZXByZWNhdGVkOiBQaXhlbCBzbmFwcGVkIGJvdW5kaW5nIGJveCBy
ZWxhdGl2ZSB0byB0aGUgcm9vdC4KQEAgLTc0NCw3ICs3NDQsNyBAQCBwdWJsaWM6CiAgICAgRmxv
YXRSZWN0IGFic29sdXRlQm91bmRpbmdCb3hGb3JQYWludGluZygpIGNvbnN0OwogCiAgICAgLy8g
Qm91bmRzIHVzZWQgZm9yIGxheWVyIG92ZXJsYXAgdGVzdGluZyBpbiBSZW5kZXJMYXllckNvbXBv
c2l0b3IuCi0gICAgTGF5b3V0UmVjdCBvdmVybGFwQm91bmRzKCkgY29uc3QgeyByZXR1cm4gb3Zl
cmxhcEJvdW5kc0luY2x1ZGVDaGlsZHJlbigpID8gY2FsY3VsYXRlTGF5ZXJCb3VuZHModGhpcykg
OiBsb2NhbEJvdW5kaW5nQm94KCk7IH0KKyAgICBMYXlvdXRSZWN0IG92ZXJsYXBCb3VuZHMoKSBj
b25zdCB7IHJldHVybiBvdmVybGFwQm91bmRzSW5jbHVkZUNoaWxkcmVuKCkgPyBjYWxjdWxhdGVM
YXllckJvdW5kcyh0aGlzLCBMYXlvdXRTaXplKCkpIDogbG9jYWxCb3VuZGluZ0JveCgpOyB9CiAK
ICNpZiBFTkFCTEUoQ1NTX0ZJTFRFUlMpCiAgICAgLy8gSWYgdHJ1ZSwgdGhpcyBsYXllcidzIGNo
aWxkcmVuIGFyZSBpbmNsdWRlZCBpbiBpdHMgYm91bmRzIGZvciBvdmVybGFwIHRlc3RpbmcuCkBA
IC03NTUsNyArNzU1LDcgQEAgcHVibGljOgogI2VuZGlmCiAKICAgICAvLyBDYW4gcGFzcyBvZmZz
ZXRGcm9tUm9vdCBpZiBrbm93bi4KLSAgICBMYXlvdXRSZWN0IGNhbGN1bGF0ZUxheWVyQm91bmRz
KGNvbnN0IFJlbmRlckxheWVyKiBhbmNlc3RvckxheWVyLCBjb25zdCBMYXlvdXRTaXplKiBvZmZz
ZXRGcm9tUm9vdCA9IG51bGxwdHIsIENhbGN1bGF0ZUxheWVyQm91bmRzRmxhZ3MgPSBEZWZhdWx0
Q2FsY3VsYXRlTGF5ZXJCb3VuZHNGbGFncykgY29uc3Q7CisgICAgTGF5b3V0UmVjdCBjYWxjdWxh
dGVMYXllckJvdW5kcyhjb25zdCBSZW5kZXJMYXllciogYW5jZXN0b3JMYXllciwgY29uc3QgTGF5
b3V0U2l6ZSYgb2Zmc2V0RnJvbVJvb3QsIENhbGN1bGF0ZUxheWVyQm91bmRzRmxhZ3MgPSBEZWZh
dWx0Q2FsY3VsYXRlTGF5ZXJCb3VuZHNGbGFncykgY29uc3Q7CiAgICAgCiAgICAgLy8gUmV0dXJu
IGEgY2FjaGVkIHJlcGFpbnQgcmVjdCwgY29tcHV0ZWQgcmVsYXRpdmUgdG8gdGhlIGxheWVyIHJl
bmRlcmVyJ3MgY29udGFpbmVyRm9yUmVwYWludC4KICAgICBMYXlvdXRSZWN0IHJlcGFpbnRSZWN0
KCkgY29uc3QgeyByZXR1cm4gbV9yZXBhaW50UmVjdDsgfQpAQCAtMTAwMSw5ICsxMDAxLDkgQEAg
cHJpdmF0ZToKIAogICAgIHZvaWQgY29sbGVjdEZyYWdtZW50cyhMYXllckZyYWdtZW50cyYsIGNv
bnN0IFJlbmRlckxheWVyKiByb290TGF5ZXIsIGNvbnN0IExheW91dFJlY3QmIGRpcnR5UmVjdCwK
ICAgICAgICAgUGFnaW5hdGlvbkluY2x1c2lvbk1vZGUsCi0gICAgICAgIENsaXBSZWN0c1R5cGUs
IE92ZXJsYXlTY3JvbGxiYXJTaXplUmVsZXZhbmN5IGluT3ZlcmxheVNjcm9sbGJhclNpemVSZWxl
dmFuY3kgPSBJZ25vcmVPdmVybGF5U2Nyb2xsYmFyU2l6ZSwKLSAgICAgICAgU2hvdWxkUmVzcGVj
dE92ZXJmbG93Q2xpcCA9IFJlc3BlY3RPdmVyZmxvd0NsaXAsIGNvbnN0IExheW91dFNpemUqIG9m
ZnNldEZyb21Sb290ID0gbnVsbHB0ciwgY29uc3QgTGF5b3V0UmVjdCogbGF5ZXJCb3VuZGluZ0Jv
eCA9IG51bGxwdHIsIFNob3VsZEFwcGx5Um9vdE9mZnNldFRvRnJhZ21lbnRzID0gSWdub3JlUm9v
dE9mZnNldEZvckZyYWdtZW50cyk7Ci0gICAgdm9pZCB1cGRhdGVQYWludGluZ0luZm9Gb3JGcmFn
bWVudHMoTGF5ZXJGcmFnbWVudHMmLCBjb25zdCBMYXllclBhaW50aW5nSW5mbyYsIFBhaW50TGF5
ZXJGbGFncywgYm9vbCBzaG91bGRQYWludENvbnRlbnQsIGNvbnN0IExheW91dFNpemUqIG9mZnNl
dEZyb21Sb290KTsKKyAgICAgICAgQ2xpcFJlY3RzVHlwZSwgT3ZlcmxheVNjcm9sbGJhclNpemVS
ZWxldmFuY3kgaW5PdmVybGF5U2Nyb2xsYmFyU2l6ZVJlbGV2YW5jeSwgU2hvdWxkUmVzcGVjdE92
ZXJmbG93Q2xpcCwgY29uc3QgTGF5b3V0U2l6ZSYgb2Zmc2V0RnJvbVJvb3QsCisgICAgICAgIGNv
bnN0IExheW91dFJlY3QqIGxheWVyQm91bmRpbmdCb3ggPSBudWxscHRyLCBTaG91bGRBcHBseVJv
b3RPZmZzZXRUb0ZyYWdtZW50cyA9IElnbm9yZVJvb3RPZmZzZXRGb3JGcmFnbWVudHMpOworICAg
IHZvaWQgdXBkYXRlUGFpbnRpbmdJbmZvRm9yRnJhZ21lbnRzKExheWVyRnJhZ21lbnRzJiwgY29u
c3QgTGF5ZXJQYWludGluZ0luZm8mLCBQYWludExheWVyRmxhZ3MsIGJvb2wgc2hvdWxkUGFpbnRD
b250ZW50LCBjb25zdCBMYXlvdXRTaXplJiBvZmZzZXRGcm9tUm9vdCk7CiAgICAgdm9pZCBwYWlu
dEJhY2tncm91bmRGb3JGcmFnbWVudHMoY29uc3QgTGF5ZXJGcmFnbWVudHMmLCBHcmFwaGljc0Nv
bnRleHQqLCBHcmFwaGljc0NvbnRleHQqIHRyYW5zcGFyZW5jeUxheWVyQ29udGV4dCwKICAgICAg
ICAgY29uc3QgTGF5b3V0UmVjdCYgdHJhbnNwYXJlbmN5UGFpbnREaXJ0eVJlY3QsIGJvb2wgaGF2
ZVRyYW5zcGFyZW5jeSwgY29uc3QgTGF5ZXJQYWludGluZ0luZm8mLCBQYWludEJlaGF2aW9yLCBS
ZW5kZXJPYmplY3QqIHBhaW50aW5nUm9vdEZvclJlbmRlcmVyKTsKICAgICB2b2lkIHBhaW50Rm9y
ZWdyb3VuZEZvckZyYWdtZW50cyhjb25zdCBMYXllckZyYWdtZW50cyYsIEdyYXBoaWNzQ29udGV4
dCosIEdyYXBoaWNzQ29udGV4dCogdHJhbnNwYXJlbmN5TGF5ZXJDb250ZXh0LApkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyQ29tcG9zaXRvci5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXJDb21wb3NpdG9yLmNwcAppbmRleCBi
NmRhNTJlOTM5NjI1N2JjMzk3ZTgxZGVjNjMwNjkwNzBiYzAyMDEyLi5hNmVhNTUwZmJjYjYzNmVm
MTdlNzI2NjJiNzJkZTRkZWFlMGRmYzQyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvUmVuZGVyTGF5ZXJDb21wb3NpdG9yLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvUmVuZGVyTGF5ZXJDb21wb3NpdG9yLmNwcApAQCAtOTc1LDcgKzk3NSw3IEBAIExheW91
dFJlY3QgUmVuZGVyTGF5ZXJDb21wb3NpdG9yOjpjYWxjdWxhdGVDb21wb3NpdGVkQm91bmRzKGNv
bnN0IFJlbmRlckxheWVyJiBsCiB7CiAgICAgaWYgKCFjYW5CZUNvbXBvc2l0ZWQobGF5ZXIpKQog
ICAgICAgICByZXR1cm4gTGF5b3V0UmVjdCgpOwotICAgIHJldHVybiBsYXllci5jYWxjdWxhdGVM
YXllckJvdW5kcygmYW5jZXN0b3JMYXllciwgbnVsbHB0ciwgUmVuZGVyTGF5ZXI6OkRlZmF1bHRD
YWxjdWxhdGVMYXllckJvdW5kc0ZsYWdzIHwgUmVuZGVyTGF5ZXI6OkV4Y2x1ZGVIaWRkZW5EZXNj
ZW5kYW50cyB8IFJlbmRlckxheWVyOjpEb250Q29uc3RyYWluRm9yTWFzayk7CisgICAgcmV0dXJu
IGxheWVyLmNhbGN1bGF0ZUxheWVyQm91bmRzKCZhbmNlc3RvckxheWVyLCBsYXllci5vZmZzZXRG
cm9tQW5jZXN0b3IoJmFuY2VzdG9yTGF5ZXIpLCBSZW5kZXJMYXllcjo6RGVmYXVsdENhbGN1bGF0
ZUxheWVyQm91bmRzRmxhZ3MgfCBSZW5kZXJMYXllcjo6RXhjbHVkZUhpZGRlbkRlc2NlbmRhbnRz
IHwgUmVuZGVyTGF5ZXI6OkRvbnRDb25zdHJhaW5Gb3JNYXNrKTsKIH0KIAogdm9pZCBSZW5kZXJM
YXllckNvbXBvc2l0b3I6OmxheWVyV2FzQWRkZWQoUmVuZGVyTGF5ZXImLCBSZW5kZXJMYXllciYp
CkBAIC0yNjUwLDcgKzI2NTAsNyBAQCBib29sIFJlbmRlckxheWVyQ29tcG9zaXRvcjo6cmVxdWly
ZXNDb21wb3NpdGluZ0ZvclBvc2l0aW9uKFJlbmRlckxheWVyTW9kZWxPYmplYwogCiAgICAgLy8g
Rml4ZWQgcG9zaXRpb24gZWxlbWVudHMgdGhhdCBhcmUgaW52aXNpYmxlIGluIHRoZSBjdXJyZW50
IHZpZXcgZG9uJ3QgZ2V0IHRoZWlyIG93biBsYXllci4KICAgICBMYXlvdXRSZWN0IHZpZXdCb3Vu
ZHMgPSBtX3JlbmRlclZpZXcuZnJhbWVWaWV3KCkudmlld3BvcnRDb25zdHJhaW5lZFZpc2libGVD
b250ZW50UmVjdCgpOwotICAgIExheW91dFJlY3QgbGF5ZXJCb3VuZHMgPSBsYXllci5jYWxjdWxh
dGVMYXllckJvdW5kcygmbGF5ZXIsIDAsIFJlbmRlckxheWVyOjpVc2VMb2NhbENsaXBSZWN0SWZQ
b3NzaWJsZSB8IFJlbmRlckxheWVyOjpJbmNsdWRlTGF5ZXJGaWx0ZXJPdXRzZXRzIHwgUmVuZGVy
TGF5ZXI6OlVzZUZyYWdtZW50Qm94ZXNFeGNsdWRpbmdDb21wb3NpdGluZworICAgIExheW91dFJl
Y3QgbGF5ZXJCb3VuZHMgPSBsYXllci5jYWxjdWxhdGVMYXllckJvdW5kcygmbGF5ZXIsIExheW91
dFNpemUoKSwgUmVuZGVyTGF5ZXI6OlVzZUxvY2FsQ2xpcFJlY3RJZlBvc3NpYmxlIHwgUmVuZGVy
TGF5ZXI6OkluY2x1ZGVMYXllckZpbHRlck91dHNldHMgfCBSZW5kZXJMYXllcjo6VXNlRnJhZ21l
bnRCb3hlc0V4Y2x1ZGluZ0NvbXBvc2l0aW5nCiAgICAgICAgIHwgUmVuZGVyTGF5ZXI6OkV4Y2x1
ZGVIaWRkZW5EZXNjZW5kYW50cyB8IFJlbmRlckxheWVyOjpEb250Q29uc3RyYWluRm9yTWFzayB8
IFJlbmRlckxheWVyOjpJbmNsdWRlQ29tcG9zaXRlZERlc2NlbmRhbnRzKTsKICAgICAvLyBNYXAg
dG8gbV9yZW5kZXJWaWV3IHRvIGlnbm9yZSBwYWdlIHNjYWxlLgogICAgIEZsb2F0UmVjdCBhYnNv
bHV0ZUJvdW5kcyA9IGxheWVyLnJlbmRlcmVyKCkubG9jYWxUb0NvbnRhaW5lclF1YWQoRmxvYXRS
ZWN0KGxheWVyQm91bmRzKSwgJm1fcmVuZGVyVmlldykuYm91bmRpbmdCb3goKTsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUcmVlQXNUZXh0LmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUcmVlQXNUZXh0LmNwcAppbmRleCBhZWYwMjE2MmEx
ZWY3ZDFkZWRlYmM5ZDBkMzZjMGNmMGJjMTI2MzBlLi42ZTk1MTllMzk5MGIxYWU2NDgwNWQ5NDAz
MjYzYTAyOTYyMzhiODMyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVu
ZGVyVHJlZUFzVGV4dC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRy
ZWVBc1RleHQuY3BwCkBAIC03NDEsMTIgKzc0MSwxMiBAQCBzdGF0aWMgdm9pZCB3cml0ZUxheWVy
cyhUZXh0U3RyZWFtJiB0cywgY29uc3QgUmVuZGVyTGF5ZXIqIHJvb3RMYXllciwgUmVuZGVyTGF5
ZQogICAgIC8vIENhbGN1bGF0ZSB0aGUgY2xpcCByZWN0cyB3ZSBzaG91bGQgdXNlLgogICAgIExh
eW91dFJlY3QgbGF5ZXJCb3VuZHM7CiAgICAgQ2xpcFJlY3QgZGFtYWdlUmVjdCwgY2xpcFJlY3RU
b0FwcGx5LCBvdXRsaW5lUmVjdDsKLSAgICBsLT5jYWxjdWxhdGVSZWN0cyhSZW5kZXJMYXllcjo6
Q2xpcFJlY3RzQ29udGV4dChyb290TGF5ZXIsIFRlbXBvcmFyeUNsaXBSZWN0cyksIHBhaW50RGly
dHlSZWN0LCBsYXllckJvdW5kcywgZGFtYWdlUmVjdCwgY2xpcFJlY3RUb0FwcGx5LCBvdXRsaW5l
UmVjdCk7CisgICAgbC0+Y2FsY3VsYXRlUmVjdHMoUmVuZGVyTGF5ZXI6OkNsaXBSZWN0c0NvbnRl
eHQocm9vdExheWVyLCBUZW1wb3JhcnlDbGlwUmVjdHMpLCBwYWludERpcnR5UmVjdCwgbGF5ZXJC
b3VuZHMsIGRhbWFnZVJlY3QsIGNsaXBSZWN0VG9BcHBseSwgb3V0bGluZVJlY3QsIGwtPm9mZnNl
dEZyb21BbmNlc3Rvcihyb290TGF5ZXIpKTsKIAogICAgIC8vIEVuc3VyZSBvdXIgbGlzdHMgYXJl
IHVwLXRvLWRhdGUuCiAgICAgbC0+dXBkYXRlTGF5ZXJMaXN0c0lmTmVlZGVkKCk7CiAKLSAgICBi
b29sIHNob3VsZFBhaW50ID0gKGJlaGF2aW9yICYgUmVuZGVyQXNUZXh0U2hvd0FsbExheWVycykg
PyB0cnVlIDogbC0+aW50ZXJzZWN0c0RhbWFnZVJlY3QobGF5ZXJCb3VuZHMsIGRhbWFnZVJlY3Qu
cmVjdCgpLCByb290TGF5ZXIpOworICAgIGJvb2wgc2hvdWxkUGFpbnQgPSAoYmVoYXZpb3IgJiBS
ZW5kZXJBc1RleHRTaG93QWxsTGF5ZXJzKSA/IHRydWUgOiBsLT5pbnRlcnNlY3RzRGFtYWdlUmVj
dChsYXllckJvdW5kcywgZGFtYWdlUmVjdC5yZWN0KCksIHJvb3RMYXllciwgbC0+b2Zmc2V0RnJv
bUFuY2VzdG9yKHJvb3RMYXllcikpOwogICAgIFZlY3RvcjxSZW5kZXJMYXllcio+KiBuZWdMaXN0
ID0gbC0+bmVnWk9yZGVyTGlzdCgpOwogICAgIGJvb2wgcGFpbnRzQmFja2dyb3VuZFNlcGFyYXRl
bHkgPSBuZWdMaXN0ICYmIG5lZ0xpc3QtPnNpemUoKSA+IDA7CiAgICAgaWYgKHNob3VsZFBhaW50
ICYmIHBhaW50c0JhY2tncm91bmRTZXBhcmF0ZWx5KQo=
</data>

          </attachment>
      

    </bug>

</bugzilla>