<?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>124837</bug_id>
          
          <creation_ts>2013-11-25 04:32:07 -0800</creation_ts>
          <short_desc>Rename InlineIterator::m_obj and make it private</short_desc>
          <delta_ts>2013-11-28 15:22:44 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>New Bugs</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>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Gyuyoung Kim">gyuyoung.kim</reporter>
          <assigned_to name="Gyuyoung Kim">gyuyoung.kim</assigned_to>
          <cc>commit-queue</cc>
    
    <cc>esprehn+autocc</cc>
    
    <cc>glenn</cc>
    
    <cc>kling</cc>
    
    <cc>kondapallykalyan</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>953964</commentid>
    <comment_count>0</comment_count>
    <who name="Gyuyoung Kim">gyuyoung.kim</who>
    <bug_when>2013-11-25 04:32:07 -0800</bug_when>
    <thetext>InlineIterator has been exported m_obj as public though there is a getter function. Fixed it. Additionally, setObject() is added as well.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>953965</commentid>
    <comment_count>1</comment_count>
      <attachid>217790</attachid>
    <who name="Gyuyoung Kim">gyuyoung.kim</who>
    <bug_when>2013-11-25 04:33:52 -0800</bug_when>
    <thetext>Created attachment 217790
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>954356</commentid>
    <comment_count>2</comment_count>
      <attachid>217790</attachid>
    <who name="Andreas Kling">kling</who>
    <bug_when>2013-11-26 15:01:20 -0800</bug_when>
    <thetext>Comment on attachment 217790
Patch

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

&gt; Source/WebCore/rendering/InlineIterator.h:70
&gt;      RenderObject* object() const { return m_obj; }
&gt; +    void setObject(RenderObject* object) { m_obj = object; }

I would call these renderer() and setRenderer().

&gt; Source/WebCore/rendering/InlineIterator.h:96
&gt; +    RenderObject* m_obj;

And this would be &quot;m_renderer&quot;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>954467</commentid>
    <comment_count>3</comment_count>
      <attachid>217926</attachid>
    <who name="Gyuyoung Kim">gyuyoung.kim</who>
    <bug_when>2013-11-26 22:35:37 -0800</bug_when>
    <thetext>Created attachment 217926
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>954468</commentid>
    <comment_count>4</comment_count>
    <who name="Gyuyoung Kim">gyuyoung.kim</who>
    <bug_when>2013-11-26 22:36:54 -0800</bug_when>
    <thetext>(In reply to comment #2)
&gt; (From update of attachment 217790 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=217790&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/rendering/InlineIterator.h:70
&gt; &gt;      RenderObject* object() const { return m_obj; }
&gt; &gt; +    void setObject(RenderObject* object) { m_obj = object; }
&gt; 
&gt; I would call these renderer() and setRenderer().
&gt; 
&gt; &gt; Source/WebCore/rendering/InlineIterator.h:96
&gt; &gt; +    RenderObject* m_obj;
&gt; 
&gt; And this would be &quot;m_renderer&quot;

Seems good to me as well. Changed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>954622</commentid>
    <comment_count>5</comment_count>
    <who name="Gyuyoung Kim">gyuyoung.kim</who>
    <bug_when>2013-11-27 16:54:27 -0800</bug_when>
    <thetext>Kling, could you take a look again ?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>954827</commentid>
    <comment_count>6</comment_count>
      <attachid>217926</attachid>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2013-11-28 14:02:21 -0800</bug_when>
    <thetext>Comment on attachment 217926
Patch

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

&gt; Source/WebCore/ChangeLog:3
&gt; +        Set m_obj member variable as private

The title is not informative. Maybe something like &quot;Rename InlineIterator::m_obj and make it private&quot;

&gt; Source/WebCore/rendering/InlineIterator.h:69
&gt; +    RenderObject* renderer() const { return m_renderer; }

It would be good to make this return a reference and ASSERT(m_renderer). Any valid null checks in client would be replaced with atEnd() tests. For future patch though.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>954828</commentid>
    <comment_count>7</comment_count>
    <who name="Gyuyoung Kim">gyuyoung.kim</who>
    <bug_when>2013-11-28 14:27:48 -0800</bug_when>
    <thetext>(In reply to comment #6)
 
&gt; &gt; Source/WebCore/rendering/InlineIterator.h:69
&gt; &gt; +    RenderObject* renderer() const { return m_renderer; }
&gt; 
&gt; It would be good to make this return a reference and ASSERT(m_renderer). Any valid null checks in client would be replaced with atEnd() tests. For future patch though.

Antti, I&apos;d like to support this comment on new bug. I will file a bug for this. Thx.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>954829</commentid>
    <comment_count>8</comment_count>
      <attachid>218025</attachid>
    <who name="Gyuyoung Kim">gyuyoung.kim</who>
    <bug_when>2013-11-28 14:28:47 -0800</bug_when>
    <thetext>Created attachment 218025
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>954837</commentid>
    <comment_count>9</comment_count>
      <attachid>218025</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2013-11-28 15:22:41 -0800</bug_when>
    <thetext>Comment on attachment 218025
Patch

Clearing flags on attachment: 218025

Committed r159860: &lt;http://trac.webkit.org/changeset/159860&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>954838</commentid>
    <comment_count>10</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2013-11-28 15:22:44 -0800</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>217790</attachid>
            <date>2013-11-25 04:33:52 -0800</date>
            <delta_ts>2013-11-26 22:35:30 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-124837-20131125213350.patch</filename>
            <type>text/plain</type>
            <size>40253</size>
            <attacher name="Gyuyoung Kim">gyuyoung.kim</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTU5NzQzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggYmUyZjVmNzI2MmRkZTZh
NzRjMmMzMGJkN2FhYzUzYTM2ZjRlYjlmMS4uYmY4NDk5YTIwOTQ2OGViZWNjMmQyZjRlNzllMGE5
ZTk0NTVhYjBhZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDUwIEBACisyMDEzLTExLTI1ICBHeXV5
b3VuZyBLaW0gIDxneXV5b3VuZy5raW1Ac2Ftc3VuZy5jb20+CisKKyAgICAgICAgU2V0IG1fb2Jq
IG1lbWJlciB2YXJpYWJsZSBhcyBwcml2YXRlCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD0xMjQ4MzcKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkg
KE9PUFMhKS4KKworICAgICAgICBJbmxpbmVJdGVyYXRvciBoYXMgYmVlbiBleHBvcnRlZCBtX29i
aiBhcyBwdWJsaWMgdGhvdWdoIHRoZXJlIGlzIGEgZ2V0dGVyIGZ1bmN0aW9uLgorICAgICAgICBG
aXhlZCBpdC4gQWRkaXRpb25hbGx5LCBzZXRPYmplY3QoKSBpcyBhZGRlZCBhcyB3ZWxsLgorCisg
ICAgICAgIE5vIG5ldyB0ZXN0cywgbm8gYmVoYXZpb3IgY2hhbmdlcy4KKworICAgICAgICAqIHJl
bmRlcmluZy9JbmxpbmVJdGVyYXRvci5oOgorICAgICAgICAoV2ViQ29yZTo6SW5saW5lSXRlcmF0
b3I6OnNldE9iamVjdCk6CisgICAgICAgIChXZWJDb3JlOjpvcGVyYXRvcj09KToKKyAgICAgICAg
KFdlYkNvcmU6Om9wZXJhdG9yIT0pOgorICAgICAgICAoV2ViQ29yZTo6SW5saW5lQmlkaVJlc29s
dmVyOjphcHBlbmRSdW4pOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJCbG9ja0xpbmVMYXlv
dXQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQmxvY2tGbG93OjphcHBlbmRSdW5zRm9y
T2JqZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OmNvbnN0cnVjdEJpZGlSdW5zRm9yTGluZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpSZW5kZXJCbG9ja0Zsb3c6OmNyZWF0ZUxpbmVCb3hlc0Zyb21CaWRp
UnVucyk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCbG9ja0Zsb3c6OmxheW91dFJ1bnNBbmRG
bG9hdHNJblJhbmdlKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJsb2NrRmxvdzo6bWF0Y2hl
ZEVuZExpbmUpOgorICAgICAgICAqIHJlbmRlcmluZy9saW5lL0JyZWFraW5nQ29udGV4dElubGlu
ZUhlYWRlcnMuaDoKKyAgICAgICAgKFdlYkNvcmU6OlRyYWlsaW5nT2JqZWN0czo6dXBkYXRlTWlk
cG9pbnRzRm9yVHJhaWxpbmdCb3hlcyk6CisgICAgICAgIChXZWJDb3JlOjpCcmVha2luZ0NvbnRl
eHQ6OkJyZWFraW5nQ29udGV4dCk6CisgICAgICAgIChXZWJDb3JlOjpCcmVha2luZ0NvbnRleHQ6
OmN1cnJlbnRPYmplY3QpOgorICAgICAgICAoV2ViQ29yZTo6QnJlYWtpbmdDb250ZXh0Ojppbml0
aWFsaXplRm9yQ3VycmVudE9iamVjdCk6CisgICAgICAgIChXZWJDb3JlOjpCcmVha2luZ0NvbnRl
eHQ6OmhhbmRsZUJSKToKKyAgICAgICAgKFdlYkNvcmU6OkJyZWFraW5nQ29udGV4dDo6aGFuZGxl
T3V0T2ZGbG93UG9zaXRpb25lZCk6CisgICAgICAgIChXZWJDb3JlOjpCcmVha2luZ0NvbnRleHQ6
OmhhbmRsZUZsb2F0KToKKyAgICAgICAgKFdlYkNvcmU6OkJyZWFraW5nQ29udGV4dDo6aGFuZGxl
RW1wdHlJbmxpbmUpOgorICAgICAgICAoV2ViQ29yZTo6QnJlYWtpbmdDb250ZXh0OjpoYW5kbGVS
ZXBsYWNlZCk6CisgICAgICAgIChXZWJDb3JlOjppdGVyYXRvcklzQmV5b25kRW5kT2ZSZW5kZXJD
b21iaW5lVGV4dCk6CisgICAgICAgIChXZWJDb3JlOjplbnN1cmVDaGFyYWN0ZXJHZXRzTGluZUJv
eCk6CisgICAgICAgIChXZWJDb3JlOjpCcmVha2luZ0NvbnRleHQ6OmhhbmRsZVRleHQpOgorICAg
ICAgICAoV2ViQ29yZTo6QnJlYWtpbmdDb250ZXh0OjpjYW5CcmVha0F0VGhpc1Bvc2l0aW9uKToK
KyAgICAgICAgKFdlYkNvcmU6OkJyZWFraW5nQ29udGV4dDo6Y29tbWl0QW5kVXBkYXRlTGluZUJy
ZWFrSWZOZWVkZWQpOgorICAgICAgICAoV2ViQ29yZTo6Y2hlY2tNaWRwb2ludHMpOgorICAgICAg
ICAoV2ViQ29yZTo6QnJlYWtpbmdDb250ZXh0OjpoYW5kbGVFbmRPZkxpbmUpOgorICAgICAgICAq
IHJlbmRlcmluZy9saW5lL0xpbmVCcmVha2VyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkxpbmVC
cmVha2VyOjpza2lwVHJhaWxpbmdXaGl0ZXNwYWNlKToKKyAgICAgICAgKFdlYkNvcmU6OkxpbmVC
cmVha2VyOjpza2lwTGVhZGluZ1doaXRlc3BhY2UpOgorICAgICAgICAqIHJlbmRlcmluZy9saW5l
L0xpbmVJbmxpbmVIZWFkZXJzLmg6CisgICAgICAgIChXZWJDb3JlOjpza2lwTm9uQnJlYWtpbmdT
cGFjZSk6CisgICAgICAgIChXZWJDb3JlOjpyZXF1aXJlc0xpbmVCb3gpOgorCiAyMDEzLTExLTE4
ICBTZXJnaW8gVmlsbGFyIFNlbmluICA8c3ZpbGxhckBpZ2FsaWEuY29tPgogCiAgICAgICAgIFtD
U1MgR3JpZCBMYXlvdXRdIENhY2hlIHNldmVyYWwgdmVjdG9ycyB0byBhdm9pZCBtYWxsb2MvZnJl
ZSBjaHVybgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0lubGluZUl0ZXJh
dG9yLmggYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvSW5saW5lSXRlcmF0b3IuaAppbmRleCAy
YTRlYTAzNzJmZDhjN2JjYjg0OWY0OTYwMDE3M2U4NjAwNjIyOTRlLi41Mjk0MzlhMzU0NzNkYmJk
ZTA1MzU3MmZhNDU4ZTUyYTE2MjE5MmMxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvSW5saW5lSXRlcmF0b3IuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvSW5s
aW5lSXRlcmF0b3IuaApAQCAtNjcsNiArNjcsNyBAQCBwdWJsaWM6CiAgICAgfQogCiAgICAgUmVu
ZGVyT2JqZWN0KiBvYmplY3QoKSBjb25zdCB7IHJldHVybiBtX29iajsgfQorICAgIHZvaWQgc2V0
T2JqZWN0KFJlbmRlck9iamVjdCogb2JqZWN0KSB7IG1fb2JqID0gb2JqZWN0OyB9CiAgICAgdW5z
aWduZWQgb2Zmc2V0KCkgY29uc3QgeyByZXR1cm4gbV9wb3M7IH0KICAgICBSZW5kZXJFbGVtZW50
KiByb290KCkgY29uc3QgeyByZXR1cm4gbV9yb290OyB9CiAKQEAgLTkyLDIyICs5MywyMiBAQCBw
dWJsaWM6CiAKIHByaXZhdGU6CiAgICAgUmVuZGVyRWxlbWVudCogbV9yb290OworICAgIFJlbmRl
ck9iamVjdCogbV9vYmo7CiAKLSAgICAvLyBGSVhNRTogVGhlc2Ugc2hvdWxkIGJlIHByaXZhdGUu
CisvLyBGSVhNRTogVGhlc2Ugc2hvdWxkIGJlIHByaXZhdGUuCiBwdWJsaWM6Ci0gICAgUmVuZGVy
T2JqZWN0KiBtX29iajsKICAgICB1bnNpZ25lZCBtX3BvczsKICAgICBpbnQgbV9uZXh0QnJlYWth
YmxlUG9zaXRpb247CiB9OwogCiBpbmxpbmUgYm9vbCBvcGVyYXRvcj09KGNvbnN0IElubGluZUl0
ZXJhdG9yJiBpdDEsIGNvbnN0IElubGluZUl0ZXJhdG9yJiBpdDIpCiB7Ci0gICAgcmV0dXJuIGl0
MS5tX3BvcyA9PSBpdDIubV9wb3MgJiYgaXQxLm1fb2JqID09IGl0Mi5tX29iajsKKyAgICByZXR1
cm4gaXQxLm1fcG9zID09IGl0Mi5tX3BvcyAmJiBpdDEub2JqZWN0KCkgPT0gaXQyLm9iamVjdCgp
OwogfQogCiBpbmxpbmUgYm9vbCBvcGVyYXRvciE9KGNvbnN0IElubGluZUl0ZXJhdG9yJiBpdDEs
IGNvbnN0IElubGluZUl0ZXJhdG9yJiBpdDIpCiB7Ci0gICAgcmV0dXJuIGl0MS5tX3BvcyAhPSBp
dDIubV9wb3MgfHwgaXQxLm1fb2JqICE9IGl0Mi5tX29iajsKKyAgICByZXR1cm4gaXQxLm1fcG9z
ICE9IGl0Mi5tX3BvcyB8fCBpdDEub2JqZWN0KCkgIT0gaXQyLm9iamVjdCgpOwogfQogCiBzdGF0
aWMgaW5saW5lIFVDaGFyRGlyZWN0aW9uIGVtYmVkQ2hhckZyb21EaXJlY3Rpb24oVGV4dERpcmVj
dGlvbiBkaXJlY3Rpb24sIEVVbmljb2RlQmlkaSB1bmljb2RlQmlkaSkKQEAgLTUxNSw4ICs1MTYs
OCBAQCBpbmxpbmUgdm9pZCBJbmxpbmVCaWRpUmVzb2x2ZXI6OmFwcGVuZFJ1bigpCiAgICAgICAg
IC8vIEZJWE1FOiBDb3VsZCB0aGlzIGluaXRpYWxpemUgZnJvbSB0aGlzLT5pbklzb2xhdGUoKSBp
bnN0ZWFkIG9mIHdhbGtpbmcgdXAgdGhlIHJlbmRlciB0cmVlPwogICAgICAgICBJc29sYXRlVHJh
Y2tlciBpc29sYXRlVHJhY2tlcihudW1iZXJPZklzb2xhdGVBbmNlc3RvcnMobV9zb3IpKTsKICAg
ICAgICAgaW50IHN0YXJ0ID0gbV9zb3IubV9wb3M7Ci0gICAgICAgIFJlbmRlck9iamVjdCogb2Jq
ID0gbV9zb3IubV9vYmo7Ci0gICAgICAgIHdoaWxlIChvYmogJiYgb2JqICE9IG1fZW9yLm1fb2Jq
ICYmIG9iaiAhPSBlbmRPZkxpbmUubV9vYmopIHsKKyAgICAgICAgUmVuZGVyT2JqZWN0KiBvYmog
PSBtX3Nvci5vYmplY3QoKTsKKyAgICAgICAgd2hpbGUgKG9iaiAmJiBvYmogIT0gbV9lb3Iub2Jq
ZWN0KCkgJiYgb2JqICE9IGVuZE9mTGluZS5vYmplY3QoKSkgewogICAgICAgICAgICAgaWYgKGlz
b2xhdGVUcmFja2VyLmluSXNvbGF0ZSgpKQogICAgICAgICAgICAgICAgIGlzb2xhdGVUcmFja2Vy
LmFkZEZha2VSdW5JZk5lY2Vzc2FyeSgqb2JqLCBzdGFydCwgKnRoaXMpOwogICAgICAgICAgICAg
ZWxzZQpAQCAtNTI2LDggKzUyNyw4IEBAIGlubGluZSB2b2lkIElubGluZUJpZGlSZXNvbHZlcjo6
YXBwZW5kUnVuKCkKICAgICAgICAgICAgIG9iaiA9IGJpZGlOZXh0U2tpcHBpbmdFbXB0eUlubGlu
ZXMoKm1fc29yLnJvb3QoKSwgb2JqLCAmaXNvbGF0ZVRyYWNrZXIpOwogICAgICAgICB9CiAgICAg
ICAgIGlmIChvYmopIHsKLSAgICAgICAgICAgIHVuc2lnbmVkIHBvcyA9IG9iaiA9PSBtX2Vvci5t
X29iaiA/IG1fZW9yLm1fcG9zIDogVUlOVF9NQVg7Ci0gICAgICAgICAgICBpZiAob2JqID09IGVu
ZE9mTGluZS5tX29iaiAmJiBlbmRPZkxpbmUubV9wb3MgPD0gcG9zKSB7CisgICAgICAgICAgICB1
bnNpZ25lZCBwb3MgPSBvYmogPT0gbV9lb3Iub2JqZWN0KCkgPyBtX2Vvci5tX3BvcyA6IFVJTlRf
TUFYOworICAgICAgICAgICAgaWYgKG9iaiA9PSBlbmRPZkxpbmUub2JqZWN0KCkgJiYgZW5kT2ZM
aW5lLm1fcG9zIDw9IHBvcykgewogICAgICAgICAgICAgICAgIG1fcmVhY2hlZEVuZE9mTGluZSA9
IHRydWU7CiAgICAgICAgICAgICAgICAgcG9zID0gZW5kT2ZMaW5lLm1fcG9zOwogICAgICAgICAg
ICAgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJsb2NrTGlu
ZUxheW91dC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2tMaW5lTGF5
b3V0LmNwcAppbmRleCA5YTg1MjdjZjBjZmFmYWZlMTkyOTI2Nzg1YTE0YWE2NmViNzkxOGU2Li4w
N2IzNmEyODhjZjdmZWRiOGQ4ZTFlYzEzMDQyODJlN2ZkN2FmODcyIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2tMaW5lTGF5b3V0LmNwcAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2tMaW5lTGF5b3V0LmNwcApAQCAtODgsNyAr
ODgsNyBAQCB2b2lkIFJlbmRlckJsb2NrRmxvdzo6YXBwZW5kUnVuc0Zvck9iamVjdChCaWRpUnVu
TGlzdDxCaWRpUnVuPiYgcnVucywgaW50IHN0YXJ0LAogICAgIGlmIChoYXZlTmV4dE1pZHBvaW50
KQogICAgICAgICBuZXh0TWlkcG9pbnQgPSBsaW5lTWlkcG9pbnRTdGF0ZS5taWRwb2ludHNbbGlu
ZU1pZHBvaW50U3RhdGUuY3VycmVudE1pZHBvaW50XTsKICAgICBpZiAobGluZU1pZHBvaW50U3Rh
dGUuYmV0d2Vlbk1pZHBvaW50cykgewotICAgICAgICBpZiAoIShoYXZlTmV4dE1pZHBvaW50ICYm
IG5leHRNaWRwb2ludC5tX29iaiA9PSBvYmopKQorICAgICAgICBpZiAoIShoYXZlTmV4dE1pZHBv
aW50ICYmIG5leHRNaWRwb2ludC5vYmplY3QoKSA9PSBvYmopKQogICAgICAgICAgICAgcmV0dXJu
OwogICAgICAgICAvLyBUaGlzIGlzIGEgbmV3IHN0YXJ0IHBvaW50LiBTdG9wIGlnbm9yaW5nIG9i
amVjdHMgYW5kCiAgICAgICAgIC8vIGFkanVzdCBvdXIgc3RhcnQuCkBAIC05OCw3ICs5OCw3IEBA
IHZvaWQgUmVuZGVyQmxvY2tGbG93OjphcHBlbmRSdW5zRm9yT2JqZWN0KEJpZGlSdW5MaXN0PEJp
ZGlSdW4+JiBydW5zLCBpbnQgc3RhcnQsCiAgICAgICAgIGlmIChzdGFydCA8IGVuZCkKICAgICAg
ICAgICAgIHJldHVybiBhcHBlbmRSdW5zRm9yT2JqZWN0KHJ1bnMsIHN0YXJ0LCBlbmQsIG9iaiwg
cmVzb2x2ZXIpOwogICAgIH0gZWxzZSB7Ci0gICAgICAgIGlmICghaGF2ZU5leHRNaWRwb2ludCB8
fCAob2JqICE9IG5leHRNaWRwb2ludC5tX29iaikpIHsKKyAgICAgICAgaWYgKCFoYXZlTmV4dE1p
ZHBvaW50IHx8IChvYmogIT0gbmV4dE1pZHBvaW50Lm9iamVjdCgpKSkgewogICAgICAgICAgICAg
cnVucy5hZGRSdW4oY3JlYXRlUnVuKHN0YXJ0LCBlbmQsIG9iaiwgcmVzb2x2ZXIpKTsKICAgICAg
ICAgICAgIHJldHVybjsKICAgICAgICAgfQpAQCAtOTYyLDggKzk2Miw4IEBAIHN0YXRpYyBpbmxp
bmUgdm9pZCBjb25zdHJ1Y3RCaWRpUnVuc0ZvckxpbmUoY29uc3QgUmVuZGVyQmxvY2tGbG93KiBi
bG9jaywgSW5saW5lCiAgICAgICAgIGl0ZXJhdG9yID0gc2VnbWVudFJhbmdlc1tpXS5lbmQ7CiAg
ICAgICAgIElubGluZUl0ZXJhdG9yIHNlZ21lbnRFbmQoaXRlcmF0b3Iucm9vdCwgaXRlcmF0b3Iu
b2JqZWN0LCBpdGVyYXRvci5vZmZzZXQpOwogICAgICAgICBpZiAoaSkgewotICAgICAgICAgICAg
QVNTRVJUKHNlZ21lbnRTdGFydC5tX29iaik7Ci0gICAgICAgICAgICBCaWRpUnVuKiBzZWdtZW50
TWFya2VyID0gY3JlYXRlUnVuKHNlZ21lbnRTdGFydC5tX3Bvcywgc2VnbWVudFN0YXJ0Lm1fcG9z
LCBzZWdtZW50U3RhcnQubV9vYmosIHRvcFJlc29sdmVyKTsKKyAgICAgICAgICAgIEFTU0VSVChz
ZWdtZW50U3RhcnQub2JqZWN0KCkpOworICAgICAgICAgICAgQmlkaVJ1biogc2VnbWVudE1hcmtl
ciA9IGNyZWF0ZVJ1bihzZWdtZW50U3RhcnQubV9wb3MsIHNlZ21lbnRTdGFydC5tX3Bvcywgc2Vn
bWVudFN0YXJ0Lm9iamVjdCgpLCB0b3BSZXNvbHZlcik7CiAgICAgICAgICAgICBzZWdtZW50TWFy
a2VyLT5tX3N0YXJ0c1NlZ21lbnQgPSB0cnVlOwogICAgICAgICAgICAgYmlkaVJ1bnMuYWRkUnVu
KHNlZ21lbnRNYXJrZXIpOwogICAgICAgICAgICAgLy8gRG8gbm90IGNvbGxhcHNlIG1pZHBvaW50
cyBiZXR3ZWVuIHNlZ21lbnRzCkBAIC05ODQsNyArOTg0LDcgQEAgUm9vdElubGluZUJveCogUmVu
ZGVyQmxvY2tGbG93OjpjcmVhdGVMaW5lQm94ZXNGcm9tQmlkaVJ1bnMoQmlkaVJ1bkxpc3Q8Qmlk
aVJ1bj4KICAgICAgICAgcmV0dXJuIDA7CiAKICAgICAvLyBGSVhNRTogV2h5IGlzIHRoaXMgb25s
eSBkb25lIHdoZW4gd2UgaGFkIHJ1bnM/Ci0gICAgbGluZUluZm8uc2V0TGFzdExpbmUoIWVuZC5t
X29iaik7CisgICAgbGluZUluZm8uc2V0TGFzdExpbmUoIWVuZC5vYmplY3QoKSk7CiAKICAgICBS
b290SW5saW5lQm94KiBsaW5lQm94ID0gY29uc3RydWN0TGluZShiaWRpUnVucywgbGluZUluZm8p
OwogICAgIGlmICghbGluZUJveCkKQEAgLTEzNjEsNyArMTM2MSw3IEBAIHZvaWQgUmVuZGVyQmxv
Y2tGbG93OjpsYXlvdXRSdW5zQW5kRmxvYXRzSW5SYW5nZShMaW5lTGF5b3V0U3RhdGUmIGxheW91
dFN0YXRlLCBJCiAgICAgICAgIC8vIFRoaXMgaXMgYSBzaG9ydC1jdXQgZm9yIGVtcHR5IGxpbmVz
LgogICAgICAgICBpZiAobGF5b3V0U3RhdGUubGluZUluZm8oKS5pc0VtcHR5KCkpIHsKICAgICAg
ICAgICAgIGlmIChsYXN0Um9vdEJveCgpKQotICAgICAgICAgICAgICAgIGxhc3RSb290Qm94KCkt
PnNldExpbmVCcmVha0luZm8oZW5kLm1fb2JqLCBlbmQubV9wb3MsIHJlc29sdmVyLnN0YXR1cygp
KTsKKyAgICAgICAgICAgICAgICBsYXN0Um9vdEJveCgpLT5zZXRMaW5lQnJlYWtJbmZvKGVuZC5v
YmplY3QoKSwgZW5kLm1fcG9zLCByZXNvbHZlci5zdGF0dXMoKSk7CiAgICAgICAgIH0gZWxzZSB7
CiAgICAgICAgICAgICBWaXN1YWxEaXJlY3Rpb25PdmVycmlkZSBvdmVycmlkZSA9IChzdHlsZVRv
VXNlLnJ0bE9yZGVyaW5nKCkgPT0gVmlzdWFsT3JkZXIgPyAoc3R5bGVUb1VzZS5kaXJlY3Rpb24o
KSA9PSBMVFIgPyBWaXN1YWxMZWZ0VG9SaWdodE92ZXJyaWRlIDogVmlzdWFsUmlnaHRUb0xlZnRP
dmVycmlkZSkgOiBOb1Zpc3VhbE92ZXJyaWRlKTsKIApAQCAtMTM5NCw3ICsxMzk0LDcgQEAgdm9p
ZCBSZW5kZXJCbG9ja0Zsb3c6OmxheW91dFJ1bnNBbmRGbG9hdHNJblJhbmdlKExpbmVMYXlvdXRT
dGF0ZSYgbGF5b3V0U3RhdGUsIEkKICAgICAgICAgICAgIHJlc29sdmVyLm1hcmtDdXJyZW50UnVu
RW1wdHkoKTsgLy8gRklYTUU6IFRoaXMgY2FuIHByb2JhYmx5IGJlIHJlcGxhY2VkIGJ5IGFuIEFT
U0VSVCAob3IganVzdCByZW1vdmVkKS4KIAogICAgICAgICAgICAgaWYgKGxpbmVCb3gpIHsKLSAg
ICAgICAgICAgICAgICBsaW5lQm94LT5zZXRMaW5lQnJlYWtJbmZvKGVuZC5tX29iaiwgZW5kLm1f
cG9zLCByZXNvbHZlci5zdGF0dXMoKSk7CisgICAgICAgICAgICAgICAgbGluZUJveC0+c2V0TGlu
ZUJyZWFrSW5mbyhlbmQub2JqZWN0KCksIGVuZC5tX3BvcywgcmVzb2x2ZXIuc3RhdHVzKCkpOwog
ICAgICAgICAgICAgICAgIGlmIChsYXlvdXRTdGF0ZS51c2VzUmVwYWludEJvdW5kcygpKQogICAg
ICAgICAgICAgICAgICAgICBsYXlvdXRTdGF0ZS51cGRhdGVSZXBhaW50UmFuZ2VGcm9tQm94KGxp
bmVCb3gpOwogCkBAIC0xOTcyLDcgKzE5NzIsNyBAQCBib29sIFJlbmRlckJsb2NrRmxvdzo6bWF0
Y2hlZEVuZExpbmUoTGluZUxheW91dFN0YXRlJiBsYXlvdXRTdGF0ZSwgY29uc3QgSW5saW5lQgog
ICAgIFJvb3RJbmxpbmVCb3gqIG9yaWdpbmFsRW5kTGluZSA9IGxheW91dFN0YXRlLmVuZExpbmUo
KTsKICAgICBSb290SW5saW5lQm94KiBsaW5lID0gb3JpZ2luYWxFbmRMaW5lOwogICAgIGZvciAo
aW50IGkgPSAwOyBpIDwgbnVtTGluZXMgJiYgbGluZTsgaSsrLCBsaW5lID0gbGluZS0+bmV4dFJv
b3RCb3goKSkgewotICAgICAgICBpZiAobGluZS0+bGluZUJyZWFrT2JqKCkgPT0gcmVzb2x2ZXIu
cG9zaXRpb24oKS5tX29iaiAmJiBsaW5lLT5saW5lQnJlYWtQb3MoKSA9PSByZXNvbHZlci5wb3Np
dGlvbigpLm1fcG9zKSB7CisgICAgICAgIGlmIChsaW5lLT5saW5lQnJlYWtPYmooKSA9PSByZXNv
bHZlci5wb3NpdGlvbigpLm9iamVjdCgpICYmIGxpbmUtPmxpbmVCcmVha1BvcygpID09IHJlc29s
dmVyLnBvc2l0aW9uKCkubV9wb3MpIHsKICAgICAgICAgICAgIC8vIFdlIGhhdmUgYSBtYXRjaC4K
ICAgICAgICAgICAgIGlmIChsaW5lLT5saW5lQnJlYWtCaWRpU3RhdHVzKCkgIT0gcmVzb2x2ZXIu
c3RhdHVzKCkpCiAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOyAvLyAuLi5idXQgdGhlIGJp
ZGkgc3RhdGUgZG9lc24ndCBtYXRjaC4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9saW5lL0JyZWFraW5nQ29udGV4dElubGluZUhlYWRlcnMuaCBiL1NvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9saW5lL0JyZWFraW5nQ29udGV4dElubGluZUhlYWRlcnMuaAppbmRleCAyMmM1
M2FiMDE4NWYxYTk4YWE5MTI4MzhhMDVmOWMxNWEzY2Q0NTdhLi5hOTBiNzVkNDg5NmFlOTM3OTc0
MDcxNjVmNjdlZmIwNTc3MDJkY2ZhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvbGluZS9CcmVha2luZ0NvbnRleHRJbmxpbmVIZWFkZXJzLmgKKysrIGIvU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL2xpbmUvQnJlYWtpbmdDb250ZXh0SW5saW5lSGVhZGVycy5oCkBAIC0xNDcs
NyArMTQ3LDcgQEAgdm9pZCBUcmFpbGluZ09iamVjdHM6OnVwZGF0ZU1pZHBvaW50c0ZvclRyYWls
aW5nQm94ZXMoTGluZU1pZHBvaW50U3RhdGUmIGxpbmVNaWQKICAgICBpZiAobGluZU1pZHBvaW50
U3RhdGUubnVtTWlkcG9pbnRzICUgMikgewogICAgICAgICAvLyBGaW5kIHRoZSB0cmFpbGluZyBz
cGFjZSBvYmplY3QncyBtaWRwb2ludC4KICAgICAgICAgaW50IHRyYWlsaW5nU3BhY2VNaWRwb2lu
dCA9IGxpbmVNaWRwb2ludFN0YXRlLm51bU1pZHBvaW50cyAtIDE7Ci0gICAgICAgIGZvciAoIDsg
dHJhaWxpbmdTcGFjZU1pZHBvaW50ID4gMCAmJiBsaW5lTWlkcG9pbnRTdGF0ZS5taWRwb2ludHNb
dHJhaWxpbmdTcGFjZU1pZHBvaW50XS5tX29iaiAhPSBtX3doaXRlc3BhY2U7IC0tdHJhaWxpbmdT
cGFjZU1pZHBvaW50KSB7IH0KKyAgICAgICAgZm9yICggOyB0cmFpbGluZ1NwYWNlTWlkcG9pbnQg
PiAwICYmIGxpbmVNaWRwb2ludFN0YXRlLm1pZHBvaW50c1t0cmFpbGluZ1NwYWNlTWlkcG9pbnRd
Lm9iamVjdCgpICE9IG1fd2hpdGVzcGFjZTsgLS10cmFpbGluZ1NwYWNlTWlkcG9pbnQpIHsgfQog
ICAgICAgICBBU1NFUlQodHJhaWxpbmdTcGFjZU1pZHBvaW50ID49IDApOwogICAgICAgICBpZiAo
Y29sbGFwc2VGaXJzdFNwYWNlID09IENvbGxhcHNlRmlyc3RTcGFjZSkKICAgICAgICAgICAgIGxp
bmVNaWRwb2ludFN0YXRlLm1pZHBvaW50c1t0cmFpbGluZ1NwYWNlTWlkcG9pbnRdLm1fcG9zLS07
CkBAIC0xNjAsMTIgKzE2MCwxMiBAQCB2b2lkIFRyYWlsaW5nT2JqZWN0czo6dXBkYXRlTWlkcG9p
bnRzRm9yVHJhaWxpbmdCb3hlcyhMaW5lTWlkcG9pbnRTdGF0ZSYgbGluZU1pZAogICAgICAgICAg
ICAgICAgIC8vIFdlIGRvbid0IGhhdmUgYSBtaWRwb2ludCBmb3IgdGhpcyBib3ggeWV0LgogICAg
ICAgICAgICAgICAgIGVuc3VyZUxpbmVCb3hJbnNpZGVJZ25vcmVkU3BhY2VzKGxpbmVNaWRwb2lu
dFN0YXRlLCBtX2JveGVzW2ldKTsKICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAg
ICAgQVNTRVJUKGxpbmVNaWRwb2ludFN0YXRlLm1pZHBvaW50c1tjdXJyZW50TWlkcG9pbnRdLm1f
b2JqID09IG1fYm94ZXNbaV0pOwotICAgICAgICAgICAgICAgIEFTU0VSVChsaW5lTWlkcG9pbnRT
dGF0ZS5taWRwb2ludHNbY3VycmVudE1pZHBvaW50ICsgMV0ubV9vYmogPT0gbV9ib3hlc1tpXSk7
CisgICAgICAgICAgICAgICAgQVNTRVJUKGxpbmVNaWRwb2ludFN0YXRlLm1pZHBvaW50c1tjdXJy
ZW50TWlkcG9pbnRdLm9iamVjdCgpID09IG1fYm94ZXNbaV0pOworICAgICAgICAgICAgICAgIEFT
U0VSVChsaW5lTWlkcG9pbnRTdGF0ZS5taWRwb2ludHNbY3VycmVudE1pZHBvaW50ICsgMV0ub2Jq
ZWN0KCkgPT0gbV9ib3hlc1tpXSk7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBjdXJyZW50
TWlkcG9pbnQgKz0gMjsKICAgICAgICAgfQotICAgIH0gZWxzZSBpZiAoIWxCcmVhay5tX29iaikg
eworICAgIH0gZWxzZSBpZiAoIWxCcmVhay5vYmplY3QoKSkgewogICAgICAgICBBU1NFUlQobV93
aGl0ZXNwYWNlLT5pc1RleHQoKSk7CiAgICAgICAgIEFTU0VSVChjb2xsYXBzZUZpcnN0U3BhY2Ug
PT0gQ29sbGFwc2VGaXJzdFNwYWNlKTsKICAgICAgICAgLy8gQWRkIGEgbmV3IGVuZCBtaWRwb2lu
dCB0aGF0IHN0b3BzIHJpZ2h0IGF0IHRoZSB2ZXJ5IGVuZC4KQEAgLTE4Niw3ICsxODYsNyBAQCBw
dWJsaWM6CiAgICAgICAgICwgbV9jdXJyZW50KHJlc29sdmVyLnBvc2l0aW9uKCkpCiAgICAgICAg
ICwgbV9saW5lQnJlYWsocmVzb2x2ZXIucG9zaXRpb24oKSkKICAgICAgICAgLCBtX2Jsb2NrKGJs
b2NrKQotICAgICAgICAsIG1fbGFzdE9iamVjdChtX2N1cnJlbnQubV9vYmopCisgICAgICAgICwg
bV9sYXN0T2JqZWN0KG1fY3VycmVudC5vYmplY3QoKSkKICAgICAgICAgLCBtX25leHRPYmplY3Qo
MCkKICAgICAgICAgLCBtX2N1cnJlbnRTdHlsZSgwKQogICAgICAgICAsIG1fYmxvY2tTdHlsZShi
bG9jay5zdHlsZSgpKQpAQCAtMjE2LDcgKzIxNiw3IEBAIHB1YmxpYzoKICAgICAgICAgbV9saW5l
SW5mby5zZXRQcmV2aW91c0xpbmVCcm9rZUNsZWFubHkoZmFsc2UpOwogICAgIH0KIAotICAgIFJl
bmRlck9iamVjdCogY3VycmVudE9iamVjdCgpIHsgcmV0dXJuIG1fY3VycmVudC5tX29iajsgfQor
ICAgIFJlbmRlck9iamVjdCogY3VycmVudE9iamVjdCgpIHsgcmV0dXJuIG1fY3VycmVudC5vYmpl
Y3QoKTsgfQogICAgIElubGluZUl0ZXJhdG9yIGxpbmVCcmVhaygpIHsgcmV0dXJuIG1fbGluZUJy
ZWFrOyB9CiAgICAgSW5saW5lSXRlcmF0b3ImIGxpbmVCcmVha1JlZigpIHtyZXR1cm4gbV9saW5l
QnJlYWs7IH0KICAgICBMaW5lV2lkdGgmIGxpbmVXaWR0aCgpIHsgcmV0dXJuIG1fd2lkdGg7IH0K
QEAgLTMxMCwyMiArMzEwLDIyIEBAIGlubGluZSB2b2lkIEJyZWFraW5nQ29udGV4dDo6aW5pdGlh
bGl6ZUZvckN1cnJlbnRPYmplY3QoKQogewogICAgIG1faGFkVW5jb21taXR0ZWRXaWR0aEJlZm9y
ZUN1cnJlbnQgPSAhIW1fd2lkdGgudW5jb21taXR0ZWRXaWR0aCgpOwogCi0gICAgbV9jdXJyZW50
U3R5bGUgPSAmbV9jdXJyZW50Lm1fb2JqLT5zdHlsZSgpOworICAgIG1fY3VycmVudFN0eWxlID0g
Jm1fY3VycmVudC5vYmplY3QoKS0+c3R5bGUoKTsKIAogICAgIEFTU0VSVChtX2N1cnJlbnRTdHls
ZSk7CiAKLSAgICBtX25leHRPYmplY3QgPSBiaWRpTmV4dFNraXBwaW5nRW1wdHlJbmxpbmVzKG1f
YmxvY2ssIG1fY3VycmVudC5tX29iaik7Ci0gICAgaWYgKG1fbmV4dE9iamVjdCAmJiBtX25leHRP
YmplY3QtPnBhcmVudCgpICYmICFtX25leHRPYmplY3QtPnBhcmVudCgpLT5pc0Rlc2NlbmRhbnRP
ZihtX2N1cnJlbnQubV9vYmotPnBhcmVudCgpKSkKKyAgICBtX25leHRPYmplY3QgPSBiaWRpTmV4
dFNraXBwaW5nRW1wdHlJbmxpbmVzKG1fYmxvY2ssIG1fY3VycmVudC5vYmplY3QoKSk7CisgICAg
aWYgKG1fbmV4dE9iamVjdCAmJiBtX25leHRPYmplY3QtPnBhcmVudCgpICYmICFtX25leHRPYmpl
Y3QtPnBhcmVudCgpLT5pc0Rlc2NlbmRhbnRPZihtX2N1cnJlbnQub2JqZWN0KCktPnBhcmVudCgp
KSkKICAgICAgICAgbV9pbmNsdWRlRW5kV2lkdGggPSB0cnVlOwogCi0gICAgbV9jdXJyV1MgPSBt
X2N1cnJlbnQubV9vYmotPmlzUmVwbGFjZWQoKSA/IG1fY3VycmVudC5tX29iai0+cGFyZW50KCkt
PnN0eWxlKCkud2hpdGVTcGFjZSgpIDogbV9jdXJyZW50U3R5bGUtPndoaXRlU3BhY2UoKTsKKyAg
ICBtX2N1cnJXUyA9IG1fY3VycmVudC5vYmplY3QoKS0+aXNSZXBsYWNlZCgpID8gbV9jdXJyZW50
Lm9iamVjdCgpLT5wYXJlbnQoKS0+c3R5bGUoKS53aGl0ZVNwYWNlKCkgOiBtX2N1cnJlbnRTdHls
ZS0+d2hpdGVTcGFjZSgpOwogICAgIG1fbGFzdFdTID0gbV9sYXN0T2JqZWN0LT5pc1JlcGxhY2Vk
KCkgPyBtX2xhc3RPYmplY3QtPnBhcmVudCgpLT5zdHlsZSgpLndoaXRlU3BhY2UoKSA6IG1fbGFz
dE9iamVjdC0+c3R5bGUoKS53aGl0ZVNwYWNlKCk7CiAKICAgICBtX2F1dG9XcmFwID0gUmVuZGVy
U3R5bGU6OmF1dG9XcmFwKG1fY3VycldTKTsKICAgICBtX2F1dG9XcmFwV2FzRXZlclRydWVPbkxp
bmUgPSBtX2F1dG9XcmFwV2FzRXZlclRydWVPbkxpbmUgfHwgbV9hdXRvV3JhcDsKIAogI2lmIEVO
QUJMRShTVkcpCi0gICAgbV9wcmVzZXJ2ZXNOZXdsaW5lID0gbV9jdXJyZW50Lm1fb2JqLT5pc1NW
R0lubGluZVRleHQoKSA/IGZhbHNlIDogUmVuZGVyU3R5bGU6OnByZXNlcnZlTmV3bGluZShtX2N1
cnJXUyk7CisgICAgbV9wcmVzZXJ2ZXNOZXdsaW5lID0gbV9jdXJyZW50Lm9iamVjdCgpLT5pc1NW
R0lubGluZVRleHQoKSA/IGZhbHNlIDogUmVuZGVyU3R5bGU6OnByZXNlcnZlTmV3bGluZShtX2N1
cnJXUyk7CiAjZWxzZQogICAgIG1fcHJlc2VydmVzTmV3bGluZSA9IFJlbmRlclN0eWxlOjpwcmVz
ZXJ2ZU5ld2xpbmUobV9jdXJyV1MpOwogI2VuZGlmCkBAIC0zNDcsNyArMzQ3LDcgQEAgaW5saW5l
IHZvaWQgQnJlYWtpbmdDb250ZXh0OjppbmNyZW1lbnQoKQogaW5saW5lIHZvaWQgQnJlYWtpbmdD
b250ZXh0OjpoYW5kbGVCUihFQ2xlYXImIGNsZWFyKQogewogICAgIGlmIChtX3dpZHRoLmZpdHNP
bkxpbmUoKSkgewotICAgICAgICBSZW5kZXJPYmplY3QqIGJyID0gbV9jdXJyZW50Lm1fb2JqOwor
ICAgICAgICBSZW5kZXJPYmplY3QqIGJyID0gbV9jdXJyZW50Lm9iamVjdCgpOwogICAgICAgICBt
X2xpbmVCcmVhay5tb3ZlVG9TdGFydE9mKGJyKTsKICAgICAgICAgbV9saW5lQnJlYWsuaW5jcmVt
ZW50KCk7CiAKQEAgLTM3MCw3ICszNzAsNyBAQCBpbmxpbmUgdm9pZCBCcmVha2luZ0NvbnRleHQ6
OmhhbmRsZUJSKEVDbGVhciYgY2xlYXIpCiAgICAgICAgIC8vIGNvbGxhcHNlZCBhd2F5IHNvIHRo
YXQgaXQgZG9lc24ndCBwdXNoIHRoZSB0ZXh0IG91dCBmcm9tIHRoZSBjb250YWluZXIncyByaWdo
dC1oYW5kIGVkZ2UuCiAgICAgICAgIC8vIEZJWE1FOiBEbyB0aGlzIHJlZ2FyZGxlc3Mgb2YgdGhl
IGNvbnRhaW5lcidzIGFsaWdubWVudCAtIHdpbGwgcmVxdWlyZSByZWJhc2VsaW5pbmcgYSBsb3Qg
b2YgdGVzdCByZXN1bHRzLgogICAgICAgICBlbHNlIGlmIChtX2lnbm9yaW5nU3BhY2VzICYmICht
X2Jsb2NrU3R5bGUudGV4dEFsaWduKCkgPT0gUklHSFQgfHwgbV9ibG9ja1N0eWxlLnRleHRBbGln
bigpID09IFdFQktJVF9SSUdIVCkpCi0gICAgICAgICAgICBzdG9wSWdub3JpbmdTcGFjZXMobV9s
aW5lTWlkcG9pbnRTdGF0ZSwgSW5saW5lSXRlcmF0b3IoMCwgbV9jdXJyZW50Lm1fb2JqLCBtX2N1
cnJlbnQubV9wb3MpKTsKKyAgICAgICAgICAgIHN0b3BJZ25vcmluZ1NwYWNlcyhtX2xpbmVNaWRw
b2ludFN0YXRlLCBJbmxpbmVJdGVyYXRvcigwLCBtX2N1cnJlbnQub2JqZWN0KCksIG1fY3VycmVu
dC5tX3BvcykpOwogCiAgICAgICAgIGlmICghbV9saW5lSW5mby5pc0VtcHR5KCkpCiAgICAgICAg
ICAgICBjbGVhciA9IG1fY3VycmVudFN0eWxlLT5jbGVhcigpOwpAQCAtNDI5LDcgKzQyOSw3IEBA
IGlubGluZSB2b2lkIEJyZWFraW5nQ29udGV4dDo6aGFuZGxlT3V0T2ZGbG93UG9zaXRpb25lZChW
ZWN0b3I8UmVuZGVyQm94Kj4mIHBvc2l0CiB7CiAgICAgLy8gSWYgb3VyIG9yaWdpbmFsIGRpc3Bs
YXkgd2Fzbid0IGFuIGlubGluZSB0eXBlLCB0aGVuIHdlIGNhbgogICAgIC8vIGdvIGFoZWFkIGFu
ZCBkZXRlcm1pbmUgb3VyIHN0YXRpYyBpbmxpbmUgcG9zaXRpb24gbm93LgotICAgIFJlbmRlckJv
eCogYm94ID0gdG9SZW5kZXJCb3gobV9jdXJyZW50Lm1fb2JqKTsKKyAgICBSZW5kZXJCb3gqIGJv
eCA9IHRvUmVuZGVyQm94KG1fY3VycmVudC5vYmplY3QoKSk7CiAgICAgYm9vbCBpc0lubGluZVR5
cGUgPSBib3gtPnN0eWxlKCkuaXNPcmlnaW5hbERpc3BsYXlJbmxpbmVUeXBlKCk7CiAgICAgaWYg
KCFpc0lubGluZVR5cGUpCiAgICAgICAgIG1fYmxvY2suc2V0U3RhdGljSW5saW5lUG9zaXRpb25G
b3JDaGlsZCgqYm94LCBtX2Jsb2NrLmxvZ2ljYWxIZWlnaHQoKSwgbV9ibG9jay5zdGFydE9mZnNl
dEZvckNvbnRlbnQobV9ibG9jay5sb2dpY2FsSGVpZ2h0KCkpKTsKQEAgLTQ1NSw3ICs0NTUsNyBA
QCBpbmxpbmUgdm9pZCBCcmVha2luZ0NvbnRleHQ6OmhhbmRsZU91dE9mRmxvd1Bvc2l0aW9uZWQo
VmVjdG9yPFJlbmRlckJveCo+JiBwb3NpdAogCiBpbmxpbmUgdm9pZCBCcmVha2luZ0NvbnRleHQ6
OmhhbmRsZUZsb2F0KCkKIHsKLSAgICBSZW5kZXJCb3gmIGZsb2F0Qm94ID0gdG9SZW5kZXJCb3go
Km1fY3VycmVudC5tX29iaik7CisgICAgUmVuZGVyQm94JiBmbG9hdEJveCA9IHRvUmVuZGVyQm94
KCptX2N1cnJlbnQub2JqZWN0KCkpOwogICAgIEZsb2F0aW5nT2JqZWN0KiBmbG9hdGluZ09iamVj
dCA9IG1fYmxvY2suaW5zZXJ0RmxvYXRpbmdPYmplY3QoZmxvYXRCb3gpOwogICAgIC8vIGNoZWNr
IGlmIGl0IGZpdHMgaW4gdGhlIGN1cnJlbnQgbGluZS4KICAgICAvLyBJZiBpdCBkb2VzLCBwb3Np
dGlvbiBpdCBub3csIG90aGVyd2lzZSwgcG9zaXRpb24KQEAgLTQ2Myw3ICs0NjMsNyBAQCBpbmxp
bmUgdm9pZCBCcmVha2luZ0NvbnRleHQ6OmhhbmRsZUZsb2F0KCkKICAgICAvLyBGSVhNRTogQnVn
IDExMDM3MjogUHJvcGVybHkgcG9zaXRpb24gbXVsdGlwbGUgc3RhY2tlZCBmbG9hdHMgd2l0aCBu
b24tcmVjdGFuZ3VsYXIgc2hhcGUgb3V0c2lkZS4KICAgICBpZiAobV9mbG9hdHNGaXRPbkxpbmUg
JiYgbV93aWR0aC5maXRzT25MaW5lRXhjbHVkaW5nVHJhaWxpbmdXaGl0ZXNwYWNlKG1fYmxvY2su
bG9naWNhbFdpZHRoRm9yRmxvYXQoZmxvYXRpbmdPYmplY3QpKSkgewogICAgICAgICBtX2Jsb2Nr
LnBvc2l0aW9uTmV3RmxvYXRPbkxpbmUoZmxvYXRpbmdPYmplY3QsIG1fbGFzdEZsb2F0RnJvbVBy
ZXZpb3VzTGluZSwgbV9saW5lSW5mbywgbV93aWR0aCk7Ci0gICAgICAgIGlmIChtX2xpbmVCcmVh
ay5tX29iaiA9PSBtX2N1cnJlbnQubV9vYmopIHsKKyAgICAgICAgaWYgKG1fbGluZUJyZWFrLm9i
amVjdCgpID09IG1fY3VycmVudC5vYmplY3QoKSkgewogICAgICAgICAgICAgQVNTRVJUKCFtX2xp
bmVCcmVhay5tX3Bvcyk7CiAgICAgICAgICAgICBtX2xpbmVCcmVhay5pbmNyZW1lbnQoKTsKICAg
ICAgICAgfQpAQCAtNDk1LDcgKzQ5NSw3IEBAIGlubGluZSBib29sIHNob3VsZFNraXBXaGl0ZXNw
YWNlQWZ0ZXJTdGFydE9iamVjdChSZW5kZXJCbG9ja0Zsb3cmIGJsb2NrLCBSZW5kZXJPCiAKIGlu
bGluZSB2b2lkIEJyZWFraW5nQ29udGV4dDo6aGFuZGxlRW1wdHlJbmxpbmUoKQogewotICAgIFJl
bmRlcklubGluZSYgZmxvd0JveCA9IHRvUmVuZGVySW5saW5lKCptX2N1cnJlbnQubV9vYmopOwor
ICAgIFJlbmRlcklubGluZSYgZmxvd0JveCA9IHRvUmVuZGVySW5saW5lKCptX2N1cnJlbnQub2Jq
ZWN0KCkpOwogCiAgICAgLy8gVGhpcyBzaG91bGQgb25seSBlbmQgdXAgYmVpbmcgY2FsbGVkIG9u
IGVtcHR5IGlubGluZXMKICAgICBBU1NFUlQoaXNFbXB0eUlubGluZShmbG93Qm94KSk7CkBAIC01
MTIsOSArNTEyLDkgQEAgaW5saW5lIHZvaWQgQnJlYWtpbmdDb250ZXh0OjpoYW5kbGVFbXB0eUlu
bGluZSgpCiAgICAgICAgICAgICBtX2xpbmVJbmZvLnNldEVtcHR5KGZhbHNlLCAmbV9ibG9jaywg
Jm1fd2lkdGgpOwogICAgICAgICBpZiAobV9pZ25vcmluZ1NwYWNlcykgewogICAgICAgICAgICAg
bV90cmFpbGluZ09iamVjdHMuY2xlYXIoKTsKLSAgICAgICAgICAgIGVuc3VyZUxpbmVCb3hJbnNp
ZGVJZ25vcmVkU3BhY2VzKG1fbGluZU1pZHBvaW50U3RhdGUsIG1fY3VycmVudC5tX29iaik7Ci0g
ICAgICAgIH0gZWxzZSBpZiAobV9ibG9ja1N0eWxlLmNvbGxhcHNlV2hpdGVTcGFjZSgpICYmIG1f
cmVzb2x2ZXIucG9zaXRpb24oKS5tX29iaiA9PSBtX2N1cnJlbnQubV9vYmoKLSAgICAgICAgICAg
ICYmIHNob3VsZFNraXBXaGl0ZXNwYWNlQWZ0ZXJTdGFydE9iamVjdChtX2Jsb2NrLCBtX2N1cnJl
bnQubV9vYmosIG1fbGluZU1pZHBvaW50U3RhdGUpKSB7CisgICAgICAgICAgICBlbnN1cmVMaW5l
Qm94SW5zaWRlSWdub3JlZFNwYWNlcyhtX2xpbmVNaWRwb2ludFN0YXRlLCBtX2N1cnJlbnQub2Jq
ZWN0KCkpOworICAgICAgICB9IGVsc2UgaWYgKG1fYmxvY2tTdHlsZS5jb2xsYXBzZVdoaXRlU3Bh
Y2UoKSAmJiBtX3Jlc29sdmVyLnBvc2l0aW9uKCkub2JqZWN0KCkgPT0gbV9jdXJyZW50Lm9iamVj
dCgpCisgICAgICAgICAgICAmJiBzaG91bGRTa2lwV2hpdGVzcGFjZUFmdGVyU3RhcnRPYmplY3Qo
bV9ibG9jaywgbV9jdXJyZW50Lm9iamVjdCgpLCBtX2xpbmVNaWRwb2ludFN0YXRlKSkgewogICAg
ICAgICAgICAgLy8gTGlrZSB3aXRoIGxpc3QgbWFya2Vycywgd2Ugc3RhcnQgaWdub3Jpbmcgc3Bh
Y2VzIHRvIG1ha2Ugc3VyZSB0aGF0IGFueQogICAgICAgICAgICAgLy8gYWRkaXRpb25hbCBzcGFj
ZXMgd2Ugc2VlIHdpbGwgYmUgZGlzY2FyZGVkLgogICAgICAgICAgICAgbV9jdXJyZW50Q2hhcmFj
dGVySXNTcGFjZSA9IHRydWU7CkBAIC01MjQsMjQgKzUyNCwyNCBAQCBpbmxpbmUgdm9pZCBCcmVh
a2luZ0NvbnRleHQ6OmhhbmRsZUVtcHR5SW5saW5lKCkKICAgICAgICAgICAgIG1fdHJhaWxpbmdP
YmplY3RzLmFwcGVuZEJveElmTmVlZGVkKCZmbG93Qm94KTsKICAgICB9CiAKLSAgICBtX3dpZHRo
LmFkZFVuY29tbWl0dGVkV2lkdGgoaW5saW5lTG9naWNhbFdpZHRoKG1fY3VycmVudC5tX29iaikg
KyBib3JkZXJQYWRkaW5nTWFyZ2luU3RhcnQoZmxvd0JveCkgKyBib3JkZXJQYWRkaW5nTWFyZ2lu
RW5kKGZsb3dCb3gpKTsKKyAgICBtX3dpZHRoLmFkZFVuY29tbWl0dGVkV2lkdGgoaW5saW5lTG9n
aWNhbFdpZHRoKG1fY3VycmVudC5vYmplY3QoKSkgKyBib3JkZXJQYWRkaW5nTWFyZ2luU3RhcnQo
Zmxvd0JveCkgKyBib3JkZXJQYWRkaW5nTWFyZ2luRW5kKGZsb3dCb3gpKTsKIH0KIAogaW5saW5l
IHZvaWQgQnJlYWtpbmdDb250ZXh0OjpoYW5kbGVSZXBsYWNlZCgpCiB7Ci0gICAgUmVuZGVyQm94
JiByZXBsYWNlZEJveCA9IHRvUmVuZGVyQm94KCptX2N1cnJlbnQubV9vYmopOworICAgIFJlbmRl
ckJveCYgcmVwbGFjZWRCb3ggPSB0b1JlbmRlckJveCgqbV9jdXJyZW50Lm9iamVjdCgpKTsKIAog
ICAgIGlmIChtX2F0U3RhcnQpCiAgICAgICAgIG1fd2lkdGgudXBkYXRlQXZhaWxhYmxlV2lkdGgo
cmVwbGFjZWRCb3gubG9naWNhbEhlaWdodCgpKTsKIAogICAgIC8vIEJyZWFrIG9uIHJlcGxhY2Vk
IGVsZW1lbnRzIGlmIGVpdGhlciBoYXMgbm9ybWFsIHdoaXRlLXNwYWNlLgotICAgIGlmICgobV9h
dXRvV3JhcCB8fCBSZW5kZXJTdHlsZTo6YXV0b1dyYXAobV9sYXN0V1MpKSAmJiAoIW1fY3VycmVu
dC5tX29iai0+aXNJbWFnZSgpIHx8IG1fYWxsb3dJbWFnZXNUb0JyZWFrKSkgeworICAgIGlmICgo
bV9hdXRvV3JhcCB8fCBSZW5kZXJTdHlsZTo6YXV0b1dyYXAobV9sYXN0V1MpKSAmJiAoIW1fY3Vy
cmVudC5vYmplY3QoKS0+aXNJbWFnZSgpIHx8IG1fYWxsb3dJbWFnZXNUb0JyZWFrKSkgewogICAg
ICAgICBtX3dpZHRoLmNvbW1pdCgpOwotICAgICAgICBtX2xpbmVCcmVhay5tb3ZlVG9TdGFydE9m
KG1fY3VycmVudC5tX29iaik7CisgICAgICAgIG1fbGluZUJyZWFrLm1vdmVUb1N0YXJ0T2YobV9j
dXJyZW50Lm9iamVjdCgpKTsKICAgICB9CiAKICAgICBpZiAobV9pZ25vcmluZ1NwYWNlcykKLSAg
ICAgICAgc3RvcElnbm9yaW5nU3BhY2VzKG1fbGluZU1pZHBvaW50U3RhdGUsIElubGluZUl0ZXJh
dG9yKDAsIG1fY3VycmVudC5tX29iaiwgMCkpOworICAgICAgICBzdG9wSWdub3JpbmdTcGFjZXMo
bV9saW5lTWlkcG9pbnRTdGF0ZSwgSW5saW5lSXRlcmF0b3IoMCwgbV9jdXJyZW50Lm9iamVjdCgp
LCAwKSk7CiAKICAgICBtX2xpbmVJbmZvLnNldEVtcHR5KGZhbHNlLCAmbV9ibG9jaywgJm1fd2lk
dGgpOwogICAgIG1faWdub3JpbmdTcGFjZXMgPSBmYWxzZTsKQEAgLTU1MSwyMSArNTUxLDIxIEBA
IGlubGluZSB2b2lkIEJyZWFraW5nQ29udGV4dDo6aGFuZGxlUmVwbGFjZWQoKQogCiAgICAgLy8g
T3B0aW1pemUgZm9yIGEgY29tbW9uIGNhc2UuIElmIHdlIGNhbid0IGZpbmQgd2hpdGVzcGFjZSBh
ZnRlciB0aGUgbGlzdAogICAgIC8vIGl0ZW0sIHRoZW4gdGhpcyBpcyBhbGwgbW9vdC4KLSAgICBM
YXlvdXRVbml0IHJlcGxhY2VkTG9naWNhbFdpZHRoID0gbV9ibG9jay5sb2dpY2FsV2lkdGhGb3JD
aGlsZChyZXBsYWNlZEJveCkgKyBtX2Jsb2NrLm1hcmdpblN0YXJ0Rm9yQ2hpbGQocmVwbGFjZWRC
b3gpICsgbV9ibG9jay5tYXJnaW5FbmRGb3JDaGlsZChyZXBsYWNlZEJveCkgKyBpbmxpbmVMb2dp
Y2FsV2lkdGgobV9jdXJyZW50Lm1fb2JqKTsKLSAgICBpZiAobV9jdXJyZW50Lm1fb2JqLT5pc0xp
c3RNYXJrZXIoKSkgewotICAgICAgICBpZiAobV9ibG9ja1N0eWxlLmNvbGxhcHNlV2hpdGVTcGFj
ZSgpICYmIHNob3VsZFNraXBXaGl0ZXNwYWNlQWZ0ZXJTdGFydE9iamVjdChtX2Jsb2NrLCBtX2N1
cnJlbnQubV9vYmosIG1fbGluZU1pZHBvaW50U3RhdGUpKSB7CisgICAgTGF5b3V0VW5pdCByZXBs
YWNlZExvZ2ljYWxXaWR0aCA9IG1fYmxvY2subG9naWNhbFdpZHRoRm9yQ2hpbGQocmVwbGFjZWRC
b3gpICsgbV9ibG9jay5tYXJnaW5TdGFydEZvckNoaWxkKHJlcGxhY2VkQm94KSArIG1fYmxvY2su
bWFyZ2luRW5kRm9yQ2hpbGQocmVwbGFjZWRCb3gpICsgaW5saW5lTG9naWNhbFdpZHRoKG1fY3Vy
cmVudC5vYmplY3QoKSk7CisgICAgaWYgKG1fY3VycmVudC5vYmplY3QoKS0+aXNMaXN0TWFya2Vy
KCkpIHsKKyAgICAgICAgaWYgKG1fYmxvY2tTdHlsZS5jb2xsYXBzZVdoaXRlU3BhY2UoKSAmJiBz
aG91bGRTa2lwV2hpdGVzcGFjZUFmdGVyU3RhcnRPYmplY3QobV9ibG9jaywgbV9jdXJyZW50Lm9i
amVjdCgpLCBtX2xpbmVNaWRwb2ludFN0YXRlKSkgewogICAgICAgICAgICAgLy8gTGlrZSB3aXRo
IGlubGluZSBmbG93cywgd2Ugc3RhcnQgaWdub3Jpbmcgc3BhY2VzIHRvIG1ha2Ugc3VyZSB0aGF0
IGFueQogICAgICAgICAgICAgLy8gYWRkaXRpb25hbCBzcGFjZXMgd2Ugc2VlIHdpbGwgYmUgZGlz
Y2FyZGVkLgogICAgICAgICAgICAgbV9jdXJyZW50Q2hhcmFjdGVySXNTcGFjZSA9IHRydWU7CiAg
ICAgICAgICAgICBtX2N1cnJlbnRDaGFyYWN0ZXJJc1dTID0gZmFsc2U7CiAgICAgICAgICAgICBt
X2lnbm9yaW5nU3BhY2VzID0gdHJ1ZTsKICAgICAgICAgfQotICAgICAgICBpZiAodG9SZW5kZXJM
aXN0TWFya2VyKCptX2N1cnJlbnQubV9vYmopLmlzSW5zaWRlKCkpCisgICAgICAgIGlmICh0b1Jl
bmRlckxpc3RNYXJrZXIoKm1fY3VycmVudC5vYmplY3QoKSkuaXNJbnNpZGUoKSkKICAgICAgICAg
ICAgIG1fd2lkdGguYWRkVW5jb21taXR0ZWRXaWR0aChyZXBsYWNlZExvZ2ljYWxXaWR0aCk7CiAg
ICAgfSBlbHNlCiAgICAgICAgIG1fd2lkdGguYWRkVW5jb21taXR0ZWRXaWR0aChyZXBsYWNlZExv
Z2ljYWxXaWR0aCk7Ci0gICAgaWYgKG1fY3VycmVudC5tX29iai0+aXNSdWJ5UnVuKCkpCi0gICAg
ICAgIG1fd2lkdGguYXBwbHlPdmVyaGFuZyh0b1JlbmRlclJ1YnlSdW4obV9jdXJyZW50Lm1fb2Jq
KSwgbV9sYXN0T2JqZWN0LCBtX25leHRPYmplY3QpOworICAgIGlmIChtX2N1cnJlbnQub2JqZWN0
KCktPmlzUnVieVJ1bigpKQorICAgICAgICBtX3dpZHRoLmFwcGx5T3ZlcmhhbmcodG9SZW5kZXJS
dWJ5UnVuKG1fY3VycmVudC5vYmplY3QoKSksIG1fbGFzdE9iamVjdCwgbV9uZXh0T2JqZWN0KTsK
ICAgICAvLyBVcGRhdGUgcHJpb3IgbGluZSBicmVhayBjb250ZXh0IGNoYXJhY3RlcnMsIHVzaW5n
IFUrRkZGRCAoT0JKRUNUIFJFUExBQ0VNRU5UIENIQVJBQ1RFUikgZm9yIHJlcGxhY2VkIGVsZW1l
bnQuCiAgICAgbV9yZW5kZXJUZXh0SW5mby5tX2xpbmVCcmVha0l0ZXJhdG9yLnVwZGF0ZVByaW9y
Q29udGV4dChyZXBsYWNlbWVudENoYXJhY3Rlcik7CiB9CkBAIC02MjQsNyArNjI0LDcgQEAgaW5s
aW5lIHZvaWQgdXBkYXRlU2VnbWVudHNGb3JTaGFwZXMoUmVuZGVyQmxvY2tGbG93JiBibG9jaywg
Y29uc3QgRmxvYXRpbmdPYmplY3QKIAogaW5saW5lIGJvb2wgaXRlcmF0b3JJc0JleW9uZEVuZE9m
UmVuZGVyQ29tYmluZVRleHQoY29uc3QgSW5saW5lSXRlcmF0b3ImIGl0ZXIsIFJlbmRlckNvbWJp
bmVUZXh0JiByZW5kZXJlcikKIHsKLSAgICByZXR1cm4gaXRlci5tX29iaiA9PSAmcmVuZGVyZXIg
JiYgaXRlci5tX3BvcyA+PSByZW5kZXJlci50ZXh0TGVuZ3RoKCk7CisgICAgcmV0dXJuIGl0ZXIu
b2JqZWN0KCkgPT0gJnJlbmRlcmVyICYmIGl0ZXIubV9wb3MgPj0gcmVuZGVyZXIudGV4dExlbmd0
aCgpOwogfQogCiBpbmxpbmUgdm9pZCBuZXh0Q2hhcmFjdGVyKFVDaGFyJiBjdXJyZW50Q2hhcmFj
dGVyLCBVQ2hhciYgbGFzdENoYXJhY3RlciwgVUNoYXImIHNlY29uZFRvTGFzdENoYXJhY3RlcikK
QEAgLTY3Miw5ICs2NzIsOSBAQCBBTFdBWVNfSU5MSU5FIGZsb2F0IHRleHRXaWR0aChSZW5kZXJU
ZXh0KiB0ZXh0LCB1bnNpZ25lZCBmcm9tLCB1bnNpZ25lZCBsZW4sIGNvbgogLy8gQWRkaW5nIGEg
cGFpciBvZiBtaWRwb2ludHMgYmVmb3JlIGEgY2hhcmFjdGVyIHdpbGwgc3BsaXQgaXQgb3V0IGlu
dG8gYSBuZXcgbGluZSBib3guCiBpbmxpbmUgdm9pZCBlbnN1cmVDaGFyYWN0ZXJHZXRzTGluZUJv
eChMaW5lTWlkcG9pbnRTdGF0ZSYgbGluZU1pZHBvaW50U3RhdGUsIElubGluZUl0ZXJhdG9yJiB0
ZXh0UGFyYWdyYXBoU2VwYXJhdG9yKQogewotICAgIElubGluZUl0ZXJhdG9yIG1pZHBvaW50KDAs
IHRleHRQYXJhZ3JhcGhTZXBhcmF0b3IubV9vYmosIHRleHRQYXJhZ3JhcGhTZXBhcmF0b3IubV9w
b3MpOwotICAgIHN0YXJ0SWdub3JpbmdTcGFjZXMobGluZU1pZHBvaW50U3RhdGUsIElubGluZUl0
ZXJhdG9yKDAsIHRleHRQYXJhZ3JhcGhTZXBhcmF0b3IubV9vYmosIHRleHRQYXJhZ3JhcGhTZXBh
cmF0b3IubV9wb3MgLSAxKSk7Ci0gICAgc3RvcElnbm9yaW5nU3BhY2VzKGxpbmVNaWRwb2ludFN0
YXRlLCBJbmxpbmVJdGVyYXRvcigwLCB0ZXh0UGFyYWdyYXBoU2VwYXJhdG9yLm1fb2JqLCB0ZXh0
UGFyYWdyYXBoU2VwYXJhdG9yLm1fcG9zKSk7CisgICAgSW5saW5lSXRlcmF0b3IgbWlkcG9pbnQo
MCwgdGV4dFBhcmFncmFwaFNlcGFyYXRvci5vYmplY3QoKSwgdGV4dFBhcmFncmFwaFNlcGFyYXRv
ci5tX3Bvcyk7CisgICAgc3RhcnRJZ25vcmluZ1NwYWNlcyhsaW5lTWlkcG9pbnRTdGF0ZSwgSW5s
aW5lSXRlcmF0b3IoMCwgdGV4dFBhcmFncmFwaFNlcGFyYXRvci5vYmplY3QoKSwgdGV4dFBhcmFn
cmFwaFNlcGFyYXRvci5tX3BvcyAtIDEpKTsKKyAgICBzdG9wSWdub3JpbmdTcGFjZXMobGluZU1p
ZHBvaW50U3RhdGUsIElubGluZUl0ZXJhdG9yKDAsIHRleHRQYXJhZ3JhcGhTZXBhcmF0b3Iub2Jq
ZWN0KCksIHRleHRQYXJhZ3JhcGhTZXBhcmF0b3IubV9wb3MpKTsKIH0KIAogaW5saW5lIHZvaWQg
dHJ5SHlwaGVuYXRpbmcoUmVuZGVyVGV4dCogdGV4dCwgY29uc3QgRm9udCYgZm9udCwgY29uc3Qg
QXRvbWljU3RyaW5nJiBsb2NhbGVJZGVudGlmaWVyLCB1bnNpZ25lZCBjb25zZWN1dGl2ZUh5cGhl
bmF0ZWRMaW5lcywgaW50IGNvbnNlY3V0aXZlSHlwaGVuYXRlZExpbmVzTGltaXQsIGludCBtaW5p
bXVtUHJlZml4TGltaXQsIGludCBtaW5pbXVtU3VmZml4TGltaXQsIHVuc2lnbmVkIGxhc3RTcGFj
ZSwgdW5zaWduZWQgcG9zLCBmbG9hdCB4UG9zLCBpbnQgYXZhaWxhYmxlV2lkdGgsIGJvb2wgaXNG
aXhlZFBpdGNoLCBib29sIGNvbGxhcHNlV2hpdGVTcGFjZSwgaW50IGxhc3RTcGFjZVdvcmRTcGFj
aW5nLCBJbmxpbmVJdGVyYXRvciYgbGluZUJyZWFrLCBpbnQgbmV4dEJyZWFrYWJsZSwgYm9vbCYg
aHlwaGVuYXRlZCkKQEAgLTc1MCw3ICs3NTAsNyBAQCBpbmxpbmUgYm9vbCBCcmVha2luZ0NvbnRl
eHQ6OmhhbmRsZVRleHQoV29yZE1lYXN1cmVtZW50cyYgd29yZE1lYXN1cmVtZW50cywgYm9vbAog
ICAgIGlmICghbV9jdXJyZW50Lm1fcG9zKQogICAgICAgICBtX2FwcGxpZWRTdGFydFdpZHRoID0g
ZmFsc2U7CiAKLSAgICBSZW5kZXJUZXh0KiByZW5kZXJUZXh0ID0gdG9SZW5kZXJUZXh0KG1fY3Vy
cmVudC5tX29iaik7CisgICAgUmVuZGVyVGV4dCogcmVuZGVyVGV4dCA9IHRvUmVuZGVyVGV4dCht
X2N1cnJlbnQub2JqZWN0KCkpOwogCiAjaWYgRU5BQkxFKFNWRykKICAgICBib29sIGlzU1ZHVGV4
dCA9IHJlbmRlclRleHQtPmlzU1ZHSW5saW5lVGV4dCgpOwpAQCAtNzU5LDEwICs3NTksMTAgQEAg
aW5saW5lIGJvb2wgQnJlYWtpbmdDb250ZXh0OjpoYW5kbGVUZXh0KFdvcmRNZWFzdXJlbWVudHMm
IHdvcmRNZWFzdXJlbWVudHMsIGJvb2wKICAgICAvLyBJZiB3ZSBoYXZlIGxlZnQgYSBuby13cmFw
IGlubGluZSBhbmQgZW50ZXJlZCBhbiBhdXRvd3JhcCBpbmxpbmUgd2hpbGUgaWdub3Jpbmcgc3Bh
Y2VzCiAgICAgLy8gdGhlbiB3ZSBuZWVkIHRvIG1hcmsgdGhlIHN0YXJ0IG9mIHRoZSBhdXRvd3Jh
cCBpbmxpbmUgYXMgYSBwb3RlbnRpYWwgbGluZWJyZWFrIG5vdy4KICAgICBpZiAobV9hdXRvV3Jh
cCAmJiAhUmVuZGVyU3R5bGU6OmF1dG9XcmFwKG1fbGFzdFdTKSAmJiBtX2lnbm9yaW5nU3BhY2Vz
KQotICAgICAgICBjb21taXRMaW5lQnJlYWtBdEN1cnJlbnRXaWR0aChtX2N1cnJlbnQubV9vYmop
OworICAgICAgICBjb21taXRMaW5lQnJlYWtBdEN1cnJlbnRXaWR0aChtX2N1cnJlbnQub2JqZWN0
KCkpOwogCi0gICAgaWYgKHJlbmRlclRleHQtPnN0eWxlKCkuaGFzVGV4dENvbWJpbmUoKSAmJiBt
X2N1cnJlbnQubV9vYmotPmlzQ29tYmluZVRleHQoKSAmJiAhdG9SZW5kZXJDb21iaW5lVGV4dCgq
bV9jdXJyZW50Lm1fb2JqKS5pc0NvbWJpbmVkKCkpIHsKLSAgICAgICAgUmVuZGVyQ29tYmluZVRl
eHQmIGNvbWJpbmVSZW5kZXJlciA9IHRvUmVuZGVyQ29tYmluZVRleHQoKm1fY3VycmVudC5tX29i
aik7CisgICAgaWYgKHJlbmRlclRleHQtPnN0eWxlKCkuaGFzVGV4dENvbWJpbmUoKSAmJiBtX2N1
cnJlbnQub2JqZWN0KCktPmlzQ29tYmluZVRleHQoKSAmJiAhdG9SZW5kZXJDb21iaW5lVGV4dCgq
bV9jdXJyZW50Lm9iamVjdCgpKS5pc0NvbWJpbmVkKCkpIHsKKyAgICAgICAgUmVuZGVyQ29tYmlu
ZVRleHQmIGNvbWJpbmVSZW5kZXJlciA9IHRvUmVuZGVyQ29tYmluZVRleHQoKm1fY3VycmVudC5v
YmplY3QoKSk7CiAgICAgICAgIGNvbWJpbmVSZW5kZXJlci5jb21iaW5lVGV4dCgpOwogICAgICAg
ICAvLyBUaGUgbGVuZ3RoIG9mIHRoZSByZW5kZXJlcidzIHRleHQgbWF5IGhhdmUgY2hhbmdlZC4g
SW5jcmVtZW50IHN0YWxlIGl0ZXJhdG9yIHBvc2l0aW9ucwogICAgICAgICBpZiAoaXRlcmF0b3JJ
c0JleW9uZEVuZE9mUmVuZGVyQ29tYmluZVRleHQobV9saW5lQnJlYWssIGNvbWJpbmVSZW5kZXJl
cikpIHsKQEAgLTc4Miw3ICs3ODIsNyBAQCBpbmxpbmUgYm9vbCBCcmVha2luZ0NvbnRleHQ6Omhh
bmRsZVRleHQoV29yZE1lYXN1cmVtZW50cyYgd29yZE1lYXN1cmVtZW50cywgYm9vbAogICAgIGZs
b2F0IGxhc3RTcGFjZVdvcmRTcGFjaW5nID0gMDsKICAgICBmbG9hdCB3b3JkU3BhY2luZ0Zvcldv
cmRNZWFzdXJlbWVudCA9IDA7CiAKLSAgICBmbG9hdCB3cmFwVyA9IG1fd2lkdGgudW5jb21taXR0
ZWRXaWR0aCgpICsgaW5saW5lTG9naWNhbFdpZHRoKG1fY3VycmVudC5tX29iaiwgIW1fYXBwbGll
ZFN0YXJ0V2lkdGgsIHRydWUpOworICAgIGZsb2F0IHdyYXBXID0gbV93aWR0aC51bmNvbW1pdHRl
ZFdpZHRoKCkgKyBpbmxpbmVMb2dpY2FsV2lkdGgobV9jdXJyZW50Lm9iamVjdCgpLCAhbV9hcHBs
aWVkU3RhcnRXaWR0aCwgdHJ1ZSk7CiAgICAgZmxvYXQgY2hhcldpZHRoID0gMDsKICAgICBib29s
IGJyZWFrTkJTUCA9IG1fYXV0b1dyYXAgJiYgbV9jdXJyZW50U3R5bGUtPm5ic3BNb2RlKCkgPT0g
U1BBQ0U7CiAgICAgLy8gQXV0by13cmFwcGluZyB0ZXh0IHNob3VsZCB3cmFwIGluIHRoZSBtaWRk
bGUgb2YgYSB3b3JkIG9ubHkgaWYgaXQgY291bGQgbm90IHdyYXAgYmVmb3JlIHRoZSB3b3JkLApA
QCAtODU2LDcgKzg1Niw3IEBAIGlubGluZSBib29sIEJyZWFraW5nQ29udGV4dDo6aGFuZGxlVGV4
dChXb3JkTWVhc3VyZW1lbnRzJiB3b3JkTWVhc3VyZW1lbnRzLCBib29sCiAgICAgICAgICAgICAg
ICAgICAgIG1faWdub3JpbmdTcGFjZXMgPSBmYWxzZTsKICAgICAgICAgICAgICAgICAgICAgd29y
ZFNwYWNpbmdGb3JXb3JkTWVhc3VyZW1lbnQgPSAwOwogICAgICAgICAgICAgICAgICAgICBsYXN0
U3BhY2UgPSBtX2N1cnJlbnQubV9wb3M7IC8vIGUuZy4sICJGb28gICAgZ29vIiwgZG9uJ3QgYWRk
IGluIGFueSBvZiB0aGUgaWdub3JlZCBzcGFjZXMuCi0gICAgICAgICAgICAgICAgICAgIHN0b3BJ
Z25vcmluZ1NwYWNlcyhtX2xpbmVNaWRwb2ludFN0YXRlLCBJbmxpbmVJdGVyYXRvcigwLCBtX2N1
cnJlbnQubV9vYmosIG1fY3VycmVudC5tX3BvcykpOworICAgICAgICAgICAgICAgICAgICBzdG9w
SWdub3JpbmdTcGFjZXMobV9saW5lTWlkcG9pbnRTdGF0ZSwgSW5saW5lSXRlcmF0b3IoMCwgbV9j
dXJyZW50Lm9iamVjdCgpLCBtX2N1cnJlbnQubV9wb3MpKTsKICAgICAgICAgICAgICAgICAgICAg
c3RvcHBlZElnbm9yaW5nU3BhY2VzID0gdHJ1ZTsKICAgICAgICAgICAgICAgICB9IGVsc2Ugewog
ICAgICAgICAgICAgICAgICAgICAvLyBKdXN0IGtlZXAgaWdub3JpbmcgdGhlc2Ugc3BhY2VzLgpA
QCAtODkwLDcgKzg5MCw3IEBAIGlubGluZSBib29sIEJyZWFraW5nQ29udGV4dDo6aGFuZGxlVGV4
dChXb3JkTWVhc3VyZW1lbnRzJiB3b3JkTWVhc3VyZW1lbnRzLCBib29sCiAgICAgICAgICAgICAg
ICAgbV93aWR0aC5zZXRUcmFpbGluZ1doaXRlc3BhY2VXaWR0aChhZGRpdGlvbmFsVGVtcFdpZHRo
KTsKIAogICAgICAgICAgICAgaWYgKCFtX2FwcGxpZWRTdGFydFdpZHRoKSB7Ci0gICAgICAgICAg
ICAgICAgbV93aWR0aC5hZGRVbmNvbW1pdHRlZFdpZHRoKGlubGluZUxvZ2ljYWxXaWR0aChtX2N1
cnJlbnQubV9vYmosIHRydWUsIGZhbHNlKSk7CisgICAgICAgICAgICAgICAgbV93aWR0aC5hZGRV
bmNvbW1pdHRlZFdpZHRoKGlubGluZUxvZ2ljYWxXaWR0aChtX2N1cnJlbnQub2JqZWN0KCksIHRy
dWUsIGZhbHNlKSk7CiAgICAgICAgICAgICAgICAgbV9hcHBsaWVkU3RhcnRXaWR0aCA9IHRydWU7
CiAgICAgICAgICAgICB9CiAKQEAgLTkxNiw3ICs5MTYsNyBAQCBpbmxpbmUgYm9vbCBCcmVha2lu
Z0NvbnRleHQ6OmhhbmRsZVRleHQoV29yZE1lYXN1cmVtZW50cyYgd29yZE1lYXN1cmVtZW50cywg
Ym9vbAogICAgICAgICAgICAgICAgICAgICAvLyBhZGRpdGlvbmFsIHdoaXRlc3BhY2UuCiAgICAg
ICAgICAgICAgICAgICAgIGlmICghbV93aWR0aC5maXRzT25MaW5lSW5jbHVkaW5nRXh0cmFXaWR0
aChjaGFyV2lkdGgpKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICBsaW5lV2FzVG9vV2lkZSA9
IHRydWU7Ci0gICAgICAgICAgICAgICAgICAgICAgICBtX2xpbmVCcmVhay5tb3ZlVG8obV9jdXJy
ZW50Lm1fb2JqLCBtX2N1cnJlbnQubV9wb3MsIG1fY3VycmVudC5tX25leHRCcmVha2FibGVQb3Np
dGlvbik7CisgICAgICAgICAgICAgICAgICAgICAgICBtX2xpbmVCcmVhay5tb3ZlVG8obV9jdXJy
ZW50Lm9iamVjdCgpLCBtX2N1cnJlbnQubV9wb3MsIG1fY3VycmVudC5tX25leHRCcmVha2FibGVQ
b3NpdGlvbik7CiAgICAgICAgICAgICAgICAgICAgICAgICBtX2xpbmVCcmVha2VyLnNraXBUcmFp
bGluZ1doaXRlc3BhY2UobV9saW5lQnJlYWssIG1fbGluZUluZm8pOwogICAgICAgICAgICAgICAg
ICAgICB9CiAgICAgICAgICAgICAgICAgfQpAQCAtOTM1LDcgKzkzNSw3IEBAIGlubGluZSBib29s
IEJyZWFraW5nQ29udGV4dDo6aGFuZGxlVGV4dChXb3JkTWVhc3VyZW1lbnRzJiB3b3JkTWVhc3Vy
ZW1lbnRzLCBib29sCiAgICAgICAgICAgICAgICAgICAgICAgICBtX2xpbmVJbmZvLnNldFByZXZp
b3VzTGluZUJyb2tlQ2xlYW5seSh0cnVlKTsKICAgICAgICAgICAgICAgICAgICAgICAgIHdvcmRN
ZWFzdXJlbWVudC5lbmRPZmZzZXQgPSBtX2xpbmVCcmVhay5tX3BvczsKICAgICAgICAgICAgICAg
ICAgICAgfQotICAgICAgICAgICAgICAgICAgICBpZiAobV9saW5lQnJlYWsubV9vYmogJiYgbV9s
aW5lQnJlYWsubV9wb3MgJiYgbV9saW5lQnJlYWsubV9vYmotPmlzVGV4dCgpICYmIHRvUmVuZGVy
VGV4dChtX2xpbmVCcmVhay5tX29iaiktPnRleHRMZW5ndGgoKSAmJiB0b1JlbmRlclRleHQobV9s
aW5lQnJlYWsubV9vYmopLT5jaGFyYWN0ZXJBdChtX2xpbmVCcmVhay5tX3BvcyAtIDEpID09IHNv
ZnRIeXBoZW4gJiYgc3R5bGUuaHlwaGVucygpICE9IEh5cGhlbnNOb25lKQorICAgICAgICAgICAg
ICAgICAgICBpZiAobV9saW5lQnJlYWsub2JqZWN0KCkgJiYgbV9saW5lQnJlYWsubV9wb3MgJiYg
bV9saW5lQnJlYWsub2JqZWN0KCktPmlzVGV4dCgpICYmIHRvUmVuZGVyVGV4dChtX2xpbmVCcmVh
ay5vYmplY3QoKSktPnRleHRMZW5ndGgoKSAmJiB0b1JlbmRlclRleHQobV9saW5lQnJlYWsub2Jq
ZWN0KCkpLT5jaGFyYWN0ZXJBdChtX2xpbmVCcmVhay5tX3BvcyAtIDEpID09IHNvZnRIeXBoZW4g
JiYgc3R5bGUuaHlwaGVucygpICE9IEh5cGhlbnNOb25lKQogICAgICAgICAgICAgICAgICAgICAg
ICAgaHlwaGVuYXRlZCA9IHRydWU7CiAgICAgICAgICAgICAgICAgICAgIGlmIChtX2xpbmVCcmVh
ay5tX3BvcyAmJiBtX2xpbmVCcmVhay5tX3BvcyAhPSAodW5zaWduZWQpd29yZE1lYXN1cmVtZW50
LmVuZE9mZnNldCAmJiAhd29yZE1lYXN1cmVtZW50LndpZHRoKSB7CiAgICAgICAgICAgICAgICAg
ICAgICAgICBpZiAoY2hhcldpZHRoKSB7CkBAIC05NjIsNyArOTYyLDcgQEAgaW5saW5lIGJvb2wg
QnJlYWtpbmdDb250ZXh0OjpoYW5kbGVUZXh0KFdvcmRNZWFzdXJlbWVudHMmIHdvcmRNZWFzdXJl
bWVudHMsIGJvb2wKICAgICAgICAgICAgIGlmIChjID09ICdcbicgJiYgbV9wcmVzZXJ2ZXNOZXds
aW5lKSB7CiAgICAgICAgICAgICAgICAgaWYgKCFzdG9wcGVkSWdub3JpbmdTcGFjZXMgJiYgbV9j
dXJyZW50Lm1fcG9zID4gMCkKICAgICAgICAgICAgICAgICAgICAgZW5zdXJlQ2hhcmFjdGVyR2V0
c0xpbmVCb3gobV9saW5lTWlkcG9pbnRTdGF0ZSwgbV9jdXJyZW50KTsKLSAgICAgICAgICAgICAg
ICBtX2xpbmVCcmVhay5tb3ZlVG8obV9jdXJyZW50Lm1fb2JqLCBtX2N1cnJlbnQubV9wb3MsIG1f
Y3VycmVudC5tX25leHRCcmVha2FibGVQb3NpdGlvbik7CisgICAgICAgICAgICAgICAgbV9saW5l
QnJlYWsubW92ZVRvKG1fY3VycmVudC5vYmplY3QoKSwgbV9jdXJyZW50Lm1fcG9zLCBtX2N1cnJl
bnQubV9uZXh0QnJlYWthYmxlUG9zaXRpb24pOwogICAgICAgICAgICAgICAgIG1fbGluZUJyZWFr
LmluY3JlbWVudCgpOwogICAgICAgICAgICAgICAgIG1fbGluZUluZm8uc2V0UHJldmlvdXNMaW5l
QnJva2VDbGVhbmx5KHRydWUpOwogICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwpAQCAtOTcx
LDcgKzk3MSw3IEBAIGlubGluZSBib29sIEJyZWFraW5nQ29udGV4dDo6aGFuZGxlVGV4dChXb3Jk
TWVhc3VyZW1lbnRzJiB3b3JkTWVhc3VyZW1lbnRzLCBib29sCiAgICAgICAgICAgICBpZiAobV9h
dXRvV3JhcCAmJiBiZXR3ZWVuV29yZHMpIHsKICAgICAgICAgICAgICAgICBtX3dpZHRoLmNvbW1p
dCgpOwogICAgICAgICAgICAgICAgIHdyYXBXID0gMDsKLSAgICAgICAgICAgICAgICBtX2xpbmVC
cmVhay5tb3ZlVG8obV9jdXJyZW50Lm1fb2JqLCBtX2N1cnJlbnQubV9wb3MsIG1fY3VycmVudC5t
X25leHRCcmVha2FibGVQb3NpdGlvbik7CisgICAgICAgICAgICAgICAgbV9saW5lQnJlYWsubW92
ZVRvKG1fY3VycmVudC5vYmplY3QoKSwgbV9jdXJyZW50Lm1fcG9zLCBtX2N1cnJlbnQubV9uZXh0
QnJlYWthYmxlUG9zaXRpb24pOwogICAgICAgICAgICAgICAgIC8vIEF1dG8td3JhcHBpbmcgdGV4
dCBzaG91bGQgbm90IHdyYXAgaW4gdGhlIG1pZGRsZSBvZiBhIHdvcmQgb25jZSBpdCBoYXMgaGFk
IGFuCiAgICAgICAgICAgICAgICAgLy8gb3Bwb3J0dW5pdHkgdG8gYnJlYWsgYWZ0ZXIgYSB3b3Jk
LgogICAgICAgICAgICAgICAgIGJyZWFrV29yZHMgPSBmYWxzZTsKQEAgLTk4MCw3ICs5ODAsNyBA
QCBpbmxpbmUgYm9vbCBCcmVha2luZ0NvbnRleHQ6OmhhbmRsZVRleHQoV29yZE1lYXN1cmVtZW50
cyYgd29yZE1lYXN1cmVtZW50cywgYm9vbAogICAgICAgICAgICAgaWYgKG1pZFdvcmRCcmVhayAm
JiAhVTE2X0lTX1RSQUlMKGMpICYmICEoVV9HRVRfR0NfTUFTSyhjKSAmIFVfR0NfTV9NQVNLKSkg
ewogICAgICAgICAgICAgICAgIC8vIFJlbWVtYmVyIHRoaXMgYXMgYSBicmVha2FibGUgcG9zaXRp
b24gaW4gY2FzZQogICAgICAgICAgICAgICAgIC8vIGFkZGluZyB0aGUgZW5kIHdpZHRoIGZvcmNl
cyBhIGJyZWFrLgotICAgICAgICAgICAgICAgIG1fbGluZUJyZWFrLm1vdmVUbyhtX2N1cnJlbnQu
bV9vYmosIG1fY3VycmVudC5tX3BvcywgbV9jdXJyZW50Lm1fbmV4dEJyZWFrYWJsZVBvc2l0aW9u
KTsKKyAgICAgICAgICAgICAgICBtX2xpbmVCcmVhay5tb3ZlVG8obV9jdXJyZW50Lm9iamVjdCgp
LCBtX2N1cnJlbnQubV9wb3MsIG1fY3VycmVudC5tX25leHRCcmVha2FibGVQb3NpdGlvbik7CiAg
ICAgICAgICAgICAgICAgbWlkV29yZEJyZWFrICY9IChicmVha1dvcmRzIHx8IGJyZWFrQWxsKTsK
ICAgICAgICAgICAgIH0KIApAQCAtMTAxMSw3ICsxMDExLDcgQEAgaW5saW5lIGJvb2wgQnJlYWtp
bmdDb250ZXh0OjpoYW5kbGVUZXh0KFdvcmRNZWFzdXJlbWVudHMmIHdvcmRNZWFzdXJlbWVudHMs
IGJvb2wKICAgICAgICAgICAgIGxhc3RTcGFjZVdvcmRTcGFjaW5nID0gYXBwbHlXb3JkU3BhY2lu
ZyA/IHdvcmRTcGFjaW5nIDogMDsKICAgICAgICAgICAgIHdvcmRTcGFjaW5nRm9yV29yZE1lYXN1
cmVtZW50ID0gKGFwcGx5V29yZFNwYWNpbmcgJiYgd29yZE1lYXN1cmVtZW50cy5sYXN0KCkud2lk
dGgpID8gd29yZFNwYWNpbmcgOiAwOwogICAgICAgICAgICAgbGFzdFNwYWNlID0gbV9jdXJyZW50
Lm1fcG9zOyAvLyBlLmcuLCAiRm9vICAgIGdvbyIsIGRvbid0IGFkZCBpbiBhbnkgb2YgdGhlIGln
bm9yZWQgc3BhY2VzLgotICAgICAgICAgICAgc3RvcElnbm9yaW5nU3BhY2VzKG1fbGluZU1pZHBv
aW50U3RhdGUsIElubGluZUl0ZXJhdG9yKDAsIG1fY3VycmVudC5tX29iaiwgbV9jdXJyZW50Lm1f
cG9zKSk7CisgICAgICAgICAgICBzdG9wSWdub3JpbmdTcGFjZXMobV9saW5lTWlkcG9pbnRTdGF0
ZSwgSW5saW5lSXRlcmF0b3IoMCwgbV9jdXJyZW50Lm9iamVjdCgpLCBtX2N1cnJlbnQubV9wb3Mp
KTsKICAgICAgICAgfQogI2lmIEVOQUJMRShTVkcpCiAgICAgICAgIGlmIChpc1NWR1RleHQgJiYg
bV9jdXJyZW50Lm1fcG9zID4gMCkgewpAQCAtMTAyMiw3ICsxMDIyLDcgQEAgaW5saW5lIGJvb2wg
QnJlYWtpbmdDb250ZXh0OjpoYW5kbGVUZXh0KFdvcmRNZWFzdXJlbWVudHMmIHdvcmRNZWFzdXJl
bWVudHMsIGJvb2wKICNlbmRpZgogCiAgICAgICAgIGlmIChtX2N1cnJlbnRDaGFyYWN0ZXJJc1Nw
YWNlICYmICFwcmV2aW91c0NoYXJhY3RlcklzU3BhY2UpIHsKLSAgICAgICAgICAgIG1fc3RhcnRP
Zklnbm9yZWRTcGFjZXMubV9vYmogPSBtX2N1cnJlbnQubV9vYmo7CisgICAgICAgICAgICBtX3N0
YXJ0T2ZJZ25vcmVkU3BhY2VzLnNldE9iamVjdChtX2N1cnJlbnQub2JqZWN0KCkpOwogICAgICAg
ICAgICAgbV9zdGFydE9mSWdub3JlZFNwYWNlcy5tX3BvcyA9IG1fY3VycmVudC5tX3BvczsKICAg
ICAgICAgICAgIC8vIFNwYWNlcyBhZnRlciByaWdodC1hbGlnbmVkIHRleHQgYW5kIGJlZm9yZSBh
IGxpbmUtYnJlYWsgZ2V0IGNvbGxhcHNlZCBhd2F5IGNvbXBsZXRlbHkgc28gdGhhdCB0aGUgdHJh
aWxpbmcKICAgICAgICAgICAgIC8vIHNwYWNlIGRvZXNuJ3Qgc2VlbSB0byBwdXNoIHRoZSB0ZXh0
IG91dCBmcm9tIHRoZSByaWdodC1oYW5kIGVkZ2UuCkBAIC0xMDM3LDExICsxMDM3LDExIEBAIGlu
bGluZSBib29sIEJyZWFraW5nQ29udGV4dDo6aGFuZGxlVGV4dChXb3JkTWVhc3VyZW1lbnRzJiB3
b3JkTWVhc3VyZW1lbnRzLCBib29sCiAKICAgICAgICAgaWYgKCFtX2N1cnJlbnRDaGFyYWN0ZXJJ
c1NwYWNlICYmIHByZXZpb3VzQ2hhcmFjdGVySXNXUykgewogICAgICAgICAgICAgaWYgKG1fYXV0
b1dyYXAgJiYgbV9jdXJyZW50U3R5bGUtPmJyZWFrT25seUFmdGVyV2hpdGVTcGFjZSgpKQotICAg
ICAgICAgICAgICAgIG1fbGluZUJyZWFrLm1vdmVUbyhtX2N1cnJlbnQubV9vYmosIG1fY3VycmVu
dC5tX3BvcywgbV9jdXJyZW50Lm1fbmV4dEJyZWFrYWJsZVBvc2l0aW9uKTsKKyAgICAgICAgICAg
ICAgICBtX2xpbmVCcmVhay5tb3ZlVG8obV9jdXJyZW50Lm9iamVjdCgpLCBtX2N1cnJlbnQubV9w
b3MsIG1fY3VycmVudC5tX25leHRCcmVha2FibGVQb3NpdGlvbik7CiAgICAgICAgIH0KIAogICAg
ICAgICBpZiAobV9jb2xsYXBzZVdoaXRlU3BhY2UgJiYgbV9jdXJyZW50Q2hhcmFjdGVySXNTcGFj
ZSAmJiAhbV9pZ25vcmluZ1NwYWNlcykKLSAgICAgICAgICAgIG1fdHJhaWxpbmdPYmplY3RzLnNl
dFRyYWlsaW5nV2hpdGVzcGFjZSh0b1JlbmRlclRleHQobV9jdXJyZW50Lm1fb2JqKSk7CisgICAg
ICAgICAgICBtX3RyYWlsaW5nT2JqZWN0cy5zZXRUcmFpbGluZ1doaXRlc3BhY2UodG9SZW5kZXJU
ZXh0KG1fY3VycmVudC5vYmplY3QoKSkpOwogICAgICAgICBlbHNlIGlmICghbV9jdXJyZW50U3R5
bGUtPmNvbGxhcHNlV2hpdGVTcGFjZSgpIHx8ICFtX2N1cnJlbnRDaGFyYWN0ZXJJc1NwYWNlKQog
ICAgICAgICAgICAgbV90cmFpbGluZ09iamVjdHMuY2xlYXIoKTsKIApAQCAtMTA2Miw3ICsxMDYy
LDcgQEAgaW5saW5lIGJvb2wgQnJlYWtpbmdDb250ZXh0OjpoYW5kbGVUZXh0KFdvcmRNZWFzdXJl
bWVudHMmIHdvcmRNZWFzdXJlbWVudHMsIGJvb2wKICAgICB3b3JkTWVhc3VyZW1lbnQud2lkdGgg
PSBtX2lnbm9yaW5nU3BhY2VzID8gMCA6IGFkZGl0aW9uYWxUZW1wV2lkdGggKyB3b3JkU3BhY2lu
Z0ZvcldvcmRNZWFzdXJlbWVudDsKICAgICBhZGRpdGlvbmFsVGVtcFdpZHRoICs9IGxhc3RTcGFj
ZVdvcmRTcGFjaW5nOwogCi0gICAgZmxvYXQgaW5saW5lTG9naWNhbFRlbXBXaWR0aCA9IGlubGlu
ZUxvZ2ljYWxXaWR0aChtX2N1cnJlbnQubV9vYmosICFtX2FwcGxpZWRTdGFydFdpZHRoLCBtX2lu
Y2x1ZGVFbmRXaWR0aCk7CisgICAgZmxvYXQgaW5saW5lTG9naWNhbFRlbXBXaWR0aCA9IGlubGlu
ZUxvZ2ljYWxXaWR0aChtX2N1cnJlbnQub2JqZWN0KCksICFtX2FwcGxpZWRTdGFydFdpZHRoLCBt
X2luY2x1ZGVFbmRXaWR0aCk7CiAgICAgbV93aWR0aC5hZGRVbmNvbW1pdHRlZFdpZHRoKGFkZGl0
aW9uYWxUZW1wV2lkdGggKyBpbmxpbmVMb2dpY2FsVGVtcFdpZHRoKTsKIAogICAgIGlmICh3b3Jk
TWVhc3VyZW1lbnQuZmFsbGJhY2tGb250cy5pc0VtcHR5KCkgJiYgIWZhbGxiYWNrRm9udHMuaXNF
bXB0eSgpKQpAQCAtMTExNiw3ICsxMTE2LDcgQEAgaW5saW5lIGJvb2wgQnJlYWtpbmdDb250ZXh0
OjpjYW5CcmVha0F0VGhpc1Bvc2l0aW9uKCkKICAgICBib29sIG5leHRJc0F1dG9XcmFwcGluZ1Rl
eHQgPSAobV9uZXh0T2JqZWN0ICYmIG1fbmV4dE9iamVjdC0+aXNUZXh0KCkgJiYgKG1fYXV0b1dy
YXAgfHwgbV9uZXh0T2JqZWN0LT5zdHlsZSgpLmF1dG9XcmFwKCkpKTsKICAgICBpZiAoIW5leHRJ
c0F1dG9XcmFwcGluZ1RleHQpCiAgICAgICAgIHJldHVybiBtX2F1dG9XcmFwOwotICAgIGJvb2wg
Y3VycmVudElzVGV4dE9yRW1wdHlJbmxpbmUgPSBtX2N1cnJlbnQubV9vYmotPmlzVGV4dCgpIHx8
IChtX2N1cnJlbnQubV9vYmotPmlzUmVuZGVySW5saW5lKCkgJiYgaXNFbXB0eUlubGluZSh0b1Jl
bmRlcklubGluZSgqbV9jdXJyZW50Lm1fb2JqKSkpOworICAgIGJvb2wgY3VycmVudElzVGV4dE9y
RW1wdHlJbmxpbmUgPSBtX2N1cnJlbnQub2JqZWN0KCktPmlzVGV4dCgpIHx8IChtX2N1cnJlbnQu
b2JqZWN0KCktPmlzUmVuZGVySW5saW5lKCkgJiYgaXNFbXB0eUlubGluZSh0b1JlbmRlcklubGlu
ZSgqbV9jdXJyZW50Lm9iamVjdCgpKSkpOwogICAgIGlmICghY3VycmVudElzVGV4dE9yRW1wdHlJ
bmxpbmUpCiAgICAgICAgIHJldHVybiBtX2F1dG9XcmFwOwogCkBAIC0xMTYzLDggKzExNjMsOCBA
QCBpbmxpbmUgdm9pZCBCcmVha2luZ0NvbnRleHQ6OmNvbW1pdEFuZFVwZGF0ZUxpbmVCcmVha0lm
TmVlZGVkKCkKICAgICAgICAgbV93aWR0aC5maXRCZWxvd0Zsb2F0cygpOwogICAgIH0KIAotICAg
IGlmICghbV9jdXJyZW50Lm1fb2JqLT5pc0Zsb2F0aW5nT3JPdXRPZkZsb3dQb3NpdGlvbmVkKCkp
IHsKLSAgICAgICAgbV9sYXN0T2JqZWN0ID0gbV9jdXJyZW50Lm1fb2JqOworICAgIGlmICghbV9j
dXJyZW50Lm9iamVjdCgpLT5pc0Zsb2F0aW5nT3JPdXRPZkZsb3dQb3NpdGlvbmVkKCkpIHsKKyAg
ICAgICAgbV9sYXN0T2JqZWN0ID0gbV9jdXJyZW50Lm9iamVjdCgpOwogICAgICAgICBpZiAobV9s
YXN0T2JqZWN0LT5pc1JlcGxhY2VkKCkgJiYgbV9hdXRvV3JhcCAmJiAoIW1fbGFzdE9iamVjdC0+
aXNJbWFnZSgpIHx8IG1fYWxsb3dJbWFnZXNUb0JyZWFrKSAmJiAoIW1fbGFzdE9iamVjdC0+aXNM
aXN0TWFya2VyKCkgfHwgdG9SZW5kZXJMaXN0TWFya2VyKCptX2xhc3RPYmplY3QpLmlzSW5zaWRl
KCkpKSB7CiAgICAgICAgICAgICBtX3dpZHRoLmNvbW1pdCgpOwogICAgICAgICAgICAgbV9saW5l
QnJlYWsubW92ZVRvU3RhcnRPZihtX25leHRPYmplY3QpOwpAQCAtMTE3Nyw3ICsxMTc3LDcgQEAg
aW5saW5lIHZvaWQgY2hlY2tNaWRwb2ludHMoTGluZU1pZHBvaW50U3RhdGUmIGxpbmVNaWRwb2lu
dFN0YXRlLCBJbmxpbmVJdGVyYXRvciYKICAgICAvLyBDaGVjayB0byBzZWUgaWYgb3VyIGxhc3Qg
bWlkcG9pbnQgaXMgYSBzdGFydCBwb2ludCBiZXlvbmQgdGhlIGxpbmUgYnJlYWsuIElmIHNvLAog
ICAgIC8vIHNoYXZlIGl0IG9mZiB0aGUgbGlzdCwgYW5kIHNoYXZlIG9mZiBhIHRyYWlsaW5nIHNw
YWNlIGlmIHRoZSBwcmV2aW91cyBlbmQgcG9pbnQgZG9lc24ndAogICAgIC8vIHByZXNlcnZlIHdo
aXRlc3BhY2UuCi0gICAgaWYgKGxCcmVhay5tX29iaiAmJiBsaW5lTWlkcG9pbnRTdGF0ZS5udW1N
aWRwb2ludHMgJiYgIShsaW5lTWlkcG9pbnRTdGF0ZS5udW1NaWRwb2ludHMgJSAyKSkgeworICAg
IGlmIChsQnJlYWsub2JqZWN0KCkgJiYgbGluZU1pZHBvaW50U3RhdGUubnVtTWlkcG9pbnRzICYm
ICEobGluZU1pZHBvaW50U3RhdGUubnVtTWlkcG9pbnRzICUgMikpIHsKICAgICAgICAgSW5saW5l
SXRlcmF0b3IqIG1pZHBvaW50cyA9IGxpbmVNaWRwb2ludFN0YXRlLm1pZHBvaW50cy5kYXRhKCk7
CiAgICAgICAgIElubGluZUl0ZXJhdG9yJiBlbmRwb2ludCA9IG1pZHBvaW50c1tsaW5lTWlkcG9p
bnRTdGF0ZS5udW1NaWRwb2ludHMgLSAyXTsKICAgICAgICAgY29uc3QgSW5saW5lSXRlcmF0b3Im
IHN0YXJ0cG9pbnQgPSBtaWRwb2ludHNbbGluZU1pZHBvaW50U3RhdGUubnVtTWlkcG9pbnRzIC0g
MV07CkBAIC0xMTg3LDcgKzExODcsNyBAQCBpbmxpbmUgdm9pZCBjaGVja01pZHBvaW50cyhMaW5l
TWlkcG9pbnRTdGF0ZSYgbGluZU1pZHBvaW50U3RhdGUsIElubGluZUl0ZXJhdG9yJgogICAgICAg
ICBpZiAoY3VycnBvaW50ID09IGxCcmVhaykgewogICAgICAgICAgICAgLy8gV2UgaGl0IHRoZSBs
aW5lIGJyZWFrIGJlZm9yZSB0aGUgc3RhcnQgcG9pbnQuIFNoYXZlIG9mZiB0aGUgc3RhcnQgcG9p
bnQuCiAgICAgICAgICAgICBsaW5lTWlkcG9pbnRTdGF0ZS5udW1NaWRwb2ludHMtLTsKLSAgICAg
ICAgICAgIGlmIChlbmRwb2ludC5tX29iai0+c3R5bGUoKS5jb2xsYXBzZVdoaXRlU3BhY2UoKSAm
JiBlbmRwb2ludC5tX29iai0+aXNUZXh0KCkpCisgICAgICAgICAgICBpZiAoZW5kcG9pbnQub2Jq
ZWN0KCktPnN0eWxlKCkuY29sbGFwc2VXaGl0ZVNwYWNlKCkgJiYgZW5kcG9pbnQub2JqZWN0KCkt
PmlzVGV4dCgpKQogICAgICAgICAgICAgICAgIGVuZHBvaW50Lm1fcG9zLS07CiAgICAgICAgIH0K
ICAgICB9CkBAIC0xMjAzLDE1ICsxMjAzLDE1IEBAIElubGluZUl0ZXJhdG9yIEJyZWFraW5nQ29u
dGV4dDo6aGFuZGxlRW5kT2ZMaW5lKCkKICNlbmRpZgogICAgIGlmIChzZWdtZW50QWxsb3dzT3Zl
cmZsb3cpIHsKICAgICAgICAgaWYgKG1fbGluZUJyZWFrID09IG1fcmVzb2x2ZXIucG9zaXRpb24o
KSkgewotICAgICAgICAgICAgaWYgKCFtX2xpbmVCcmVhay5tX29iaiB8fCAhbV9saW5lQnJlYWsu
bV9vYmotPmlzQlIoKSkgeworICAgICAgICAgICAgaWYgKCFtX2xpbmVCcmVhay5vYmplY3QoKSB8
fCAhbV9saW5lQnJlYWsub2JqZWN0KCktPmlzQlIoKSkgewogICAgICAgICAgICAgICAgIC8vIHdl
IGp1c3QgYWRkIGFzIG11Y2ggYXMgcG9zc2libGUKICAgICAgICAgICAgICAgICBpZiAobV9ibG9j
a1N0eWxlLndoaXRlU3BhY2UoKSA9PSBQUkUgJiYgIW1fY3VycmVudC5tX3BvcykgewogICAgICAg
ICAgICAgICAgICAgICBtX2xpbmVCcmVhay5tb3ZlVG8obV9sYXN0T2JqZWN0LCBtX2xhc3RPYmpl
Y3QtPmlzVGV4dCgpID8gbV9sYXN0T2JqZWN0LT5sZW5ndGgoKSA6IDApOwotICAgICAgICAgICAg
ICAgIH0gZWxzZSBpZiAobV9saW5lQnJlYWsubV9vYmopIHsKKyAgICAgICAgICAgICAgICB9IGVs
c2UgaWYgKG1fbGluZUJyZWFrLm9iamVjdCgpKSB7CiAgICAgICAgICAgICAgICAgICAgIC8vIERv
bid0IGV2ZXIgYnJlYWsgaW4gdGhlIG1pZGRsZSBvZiBhIHdvcmQgaWYgd2UgY2FuIGhlbHAgaXQu
CiAgICAgICAgICAgICAgICAgICAgIC8vIFRoZXJlJ3Mgbm8gcm9vbSBhdCBhbGwuIFdlIGp1c3Qg
aGF2ZSB0byBiZSBvbiB0aGlzIGxpbmUsCiAgICAgICAgICAgICAgICAgICAgIC8vIGV2ZW4gdGhv
dWdoIHdlJ2xsIHNwaWxsIG91dC4KLSAgICAgICAgICAgICAgICAgICAgbV9saW5lQnJlYWsubW92
ZVRvKG1fY3VycmVudC5tX29iaiwgbV9jdXJyZW50Lm1fcG9zKTsKKyAgICAgICAgICAgICAgICAg
ICAgbV9saW5lQnJlYWsubW92ZVRvKG1fY3VycmVudC5vYmplY3QoKSwgbV9jdXJyZW50Lm1fcG9z
KTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICAvLyBtYWtl
IHN1cmUgd2UgY29uc3VtZSBhdCBsZWFzdCBvbmUgY2hhci9vYmplY3QuCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvbGluZS9MaW5lQnJlYWtlci5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvbGluZS9MaW5lQnJlYWtlci5jcHAKaW5kZXggY2I5M2JiYzUxMzY5NTBj
ZTcwNGNiODgxN2ZjYzNiMjkxMzBmZmMyNS4uMDc0MDEzYzUwYjIyYTJlZjY3ZDMxYTM2OWEyZTBj
YTQ2MDMyZGI5OCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL2xpbmUvTGlu
ZUJyZWFrZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9saW5lL0xpbmVCcmVh
a2VyLmNwcApAQCAtNDUsNyArNDUsNyBAQCB2b2lkIExpbmVCcmVha2VyOjpyZXNldCgpCiB2b2lk
IExpbmVCcmVha2VyOjpza2lwVHJhaWxpbmdXaGl0ZXNwYWNlKElubGluZUl0ZXJhdG9yJiBpdGVy
YXRvciwgY29uc3QgTGluZUluZm8mIGxpbmVJbmZvKQogewogICAgIHdoaWxlICghaXRlcmF0b3Iu
YXRFbmQoKSAmJiAhcmVxdWlyZXNMaW5lQm94KGl0ZXJhdG9yLCBsaW5lSW5mbywgVHJhaWxpbmdX
aGl0ZXNwYWNlKSkgewotICAgICAgICBSZW5kZXJPYmplY3QmIG9iamVjdCA9ICppdGVyYXRvci5t
X29iajsKKyAgICAgICAgUmVuZGVyT2JqZWN0JiBvYmplY3QgPSAqaXRlcmF0b3Iub2JqZWN0KCk7
CiAgICAgICAgIGlmIChvYmplY3QuaXNPdXRPZkZsb3dQb3NpdGlvbmVkKCkpCiAgICAgICAgICAg
ICBzZXRTdGF0aWNQb3NpdGlvbnMobV9ibG9jaywgdG9SZW5kZXJCb3gob2JqZWN0KSk7CiAgICAg
ICAgIGVsc2UgaWYgKG9iamVjdC5pc0Zsb2F0aW5nKCkpCkBAIC01Nyw3ICs1Nyw3IEBAIHZvaWQg
TGluZUJyZWFrZXI6OnNraXBUcmFpbGluZ1doaXRlc3BhY2UoSW5saW5lSXRlcmF0b3ImIGl0ZXJh
dG9yLCBjb25zdCBMaW5lSW5mCiB2b2lkIExpbmVCcmVha2VyOjpza2lwTGVhZGluZ1doaXRlc3Bh
Y2UoSW5saW5lQmlkaVJlc29sdmVyJiByZXNvbHZlciwgTGluZUluZm8mIGxpbmVJbmZvLCBGbG9h
dGluZ09iamVjdCogbGFzdEZsb2F0RnJvbVByZXZpb3VzTGluZSwgTGluZVdpZHRoJiB3aWR0aCkK
IHsKICAgICB3aGlsZSAoIXJlc29sdmVyLnBvc2l0aW9uKCkuYXRFbmQoKSAmJiAhcmVxdWlyZXNM
aW5lQm94KHJlc29sdmVyLnBvc2l0aW9uKCksIGxpbmVJbmZvLCBMZWFkaW5nV2hpdGVzcGFjZSkp
IHsKLSAgICAgICAgUmVuZGVyT2JqZWN0JiBvYmplY3QgPSAqcmVzb2x2ZXIucG9zaXRpb24oKS5t
X29iajsKKyAgICAgICAgUmVuZGVyT2JqZWN0JiBvYmplY3QgPSAqcmVzb2x2ZXIucG9zaXRpb24o
KS5vYmplY3QoKTsKICAgICAgICAgaWYgKG9iamVjdC5pc091dE9mRmxvd1Bvc2l0aW9uZWQoKSkg
ewogICAgICAgICAgICAgc2V0U3RhdGljUG9zaXRpb25zKG1fYmxvY2ssIHRvUmVuZGVyQm94KG9i
amVjdCkpOwogICAgICAgICAgICAgaWYgKG9iamVjdC5zdHlsZSgpLmlzT3JpZ2luYWxEaXNwbGF5
SW5saW5lVHlwZSgpKSB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvbGlu
ZS9MaW5lSW5saW5lSGVhZGVycy5oIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL2xpbmUvTGlu
ZUlubGluZUhlYWRlcnMuaAppbmRleCA3NWExYmVlMmRmMGQwNmJjZjIxMzlmYjY1ZDJhOTg2NTRh
YzZmOTM0Li5iMzY5ZjgyMzA2ZjRkMzNkNzBmNTUxZjY1ZjRlZjNiOTNjYzVkNjJmIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvbGluZS9MaW5lSW5saW5lSGVhZGVycy5oCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9saW5lL0xpbmVJbmxpbmVIZWFkZXJzLmgKQEAg
LTc0LDcgKzc0LDcgQEAgaW5saW5lIGJvb2wgc2hvdWxkQ29sbGFwc2VXaGl0ZVNwYWNlKGNvbnN0
IFJlbmRlclN0eWxlKiBzdHlsZSwgY29uc3QgTGluZUluZm8mIGwKIAogaW5saW5lIGJvb2wgc2tp
cE5vbkJyZWFraW5nU3BhY2UoY29uc3QgSW5saW5lSXRlcmF0b3ImIGl0LCBjb25zdCBMaW5lSW5m
byYgbGluZUluZm8pCiB7Ci0gICAgaWYgKGl0Lm1fb2JqLT5zdHlsZSgpLm5ic3BNb2RlKCkgIT0g
U1BBQ0UgfHwgaXQuY3VycmVudCgpICE9IG5vQnJlYWtTcGFjZSkKKyAgICBpZiAoaXQub2JqZWN0
KCktPnN0eWxlKCkubmJzcE1vZGUoKSAhPSBTUEFDRSB8fCBpdC5jdXJyZW50KCkgIT0gbm9CcmVh
a1NwYWNlKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICAvLyBGSVhNRTogVGhpcyBpcyBi
YWQuIEl0IG1ha2VzIG5ic3AgaW5jb25zaXN0ZW50IHdpdGggc3BhY2UgYW5kIHdvbid0IHdvcmsg
Y29ycmVjdGx5CkBAIC05OCwyNSArOTgsMjUgQEAgaW5saW5lIGJvb2wgYWx3YXlzUmVxdWlyZXNM
aW5lQm94KGNvbnN0IFJlbmRlcklubGluZSYgZmxvdykKIAogaW5saW5lIGJvb2wgcmVxdWlyZXNM
aW5lQm94KGNvbnN0IElubGluZUl0ZXJhdG9yJiBpdCwgY29uc3QgTGluZUluZm8mIGxpbmVJbmZv
ID0gTGluZUluZm8oKSwgV2hpdGVzcGFjZVBvc2l0aW9uIHdoaXRlc3BhY2VQb3NpdGlvbiA9IExl
YWRpbmdXaGl0ZXNwYWNlKQogewotICAgIGlmIChpdC5tX29iai0+aXNGbG9hdGluZ09yT3V0T2ZG
bG93UG9zaXRpb25lZCgpKQorICAgIGlmIChpdC5vYmplY3QoKS0+aXNGbG9hdGluZ09yT3V0T2ZG
bG93UG9zaXRpb25lZCgpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBpZiAoaXQubV9v
YmotPmlzQlIoKSkKKyAgICBpZiAoaXQub2JqZWN0KCktPmlzQlIoKSkKICAgICAgICAgcmV0dXJu
IHRydWU7CiAKICAgICBib29sIHJlbmRlcmVySXNFbXB0eUlubGluZSA9IGZhbHNlOwotICAgIGlm
IChpdC5tX29iai0+aXNSZW5kZXJJbmxpbmUoKSkgewotICAgICAgICBjb25zdCBSZW5kZXJJbmxp
bmUmIGlubGluZVJlbmRlcmVyID0gdG9SZW5kZXJJbmxpbmUoKml0Lm1fb2JqKTsKKyAgICBpZiAo
aXQub2JqZWN0KCktPmlzUmVuZGVySW5saW5lKCkpIHsKKyAgICAgICAgY29uc3QgUmVuZGVySW5s
aW5lJiBpbmxpbmVSZW5kZXJlciA9IHRvUmVuZGVySW5saW5lKCppdC5vYmplY3QoKSk7CiAgICAg
ICAgIGlmICghYWx3YXlzUmVxdWlyZXNMaW5lQm94KGlubGluZVJlbmRlcmVyKSAmJiAhcmVxdWly
ZXNMaW5lQm94Rm9yQ29udGVudChpbmxpbmVSZW5kZXJlciwgbGluZUluZm8pKQogICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOwogICAgICAgICByZW5kZXJlcklzRW1wdHlJbmxpbmUgPSBpc0VtcHR5
SW5saW5lKGlubGluZVJlbmRlcmVyKTsKICAgICB9CiAKLSAgICBpZiAoIXNob3VsZENvbGxhcHNl
V2hpdGVTcGFjZSgmaXQubV9vYmotPnN0eWxlKCksIGxpbmVJbmZvLCB3aGl0ZXNwYWNlUG9zaXRp
b24pKQorICAgIGlmICghc2hvdWxkQ29sbGFwc2VXaGl0ZVNwYWNlKCZpdC5vYmplY3QoKS0+c3R5
bGUoKSwgbGluZUluZm8sIHdoaXRlc3BhY2VQb3NpdGlvbikpCiAgICAgICAgIHJldHVybiB0cnVl
OwogCiAgICAgVUNoYXIgY3VycmVudCA9IGl0LmN1cnJlbnQoKTsKLSAgICBib29sIG5vdEp1c3RX
aGl0ZXNwYWNlID0gY3VycmVudCAhPSAnICcgJiYgY3VycmVudCAhPSAnXHQnICYmIGN1cnJlbnQg
IT0gc29mdEh5cGhlbiAmJiAoY3VycmVudCAhPSAnXG4nIHx8IGl0Lm1fb2JqLT5wcmVzZXJ2ZXNO
ZXdsaW5lKCkpICYmICFza2lwTm9uQnJlYWtpbmdTcGFjZShpdCwgbGluZUluZm8pOworICAgIGJv
b2wgbm90SnVzdFdoaXRlc3BhY2UgPSBjdXJyZW50ICE9ICcgJyAmJiBjdXJyZW50ICE9ICdcdCcg
JiYgY3VycmVudCAhPSBzb2Z0SHlwaGVuICYmIChjdXJyZW50ICE9ICdcbicgfHwgaXQub2JqZWN0
KCktPnByZXNlcnZlc05ld2xpbmUoKSkgJiYgIXNraXBOb25CcmVha2luZ1NwYWNlKGl0LCBsaW5l
SW5mbyk7CiAgICAgcmV0dXJuIG5vdEp1c3RXaGl0ZXNwYWNlIHx8IHJlbmRlcmVySXNFbXB0eUlu
bGluZTsKIH0KIAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>217926</attachid>
            <date>2013-11-26 22:35:37 -0800</date>
            <delta_ts>2013-11-28 14:28:40 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-124837-20131127153535.patch</filename>
            <type>text/plain</type>
            <size>45583</size>
            <attacher name="Gyuyoung Kim">gyuyoung.kim</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTU5ODA0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggOThkNTk0MjA0ZGY3ZDJi
MDM1NTliMWE3MjkzYWNjYWRlNjhiMzgwMS4uNTYxYjc3YjVkOGYyOGNjMDI4NTQzNTFmNDQyZGU3
YTY3MDMwNGI0MyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDUxIEBACisyMDEzLTExLTI2ICBHeXV5
b3VuZyBLaW0gIDxneXV5b3VuZy5raW1Ac2Ftc3VuZy5jb20+CisKKyAgICAgICAgU2V0IG1fb2Jq
IG1lbWJlciB2YXJpYWJsZSBhcyBwcml2YXRlCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD0xMjQ4MzcKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkg
KE9PUFMhKS4KKworICAgICAgICBJbmxpbmVJdGVyYXRvciBoYXMgYmVlbiBleHBvcnRlZCBtX29i
aiBhcyBwdWJsaWMgdGhvdWdoIHRoZXJlIGlzIGEgZ2V0dGVyIGZ1bmN0aW9uLgorICAgICAgICBC
ZXNpZGVzICpvYmplY3QqIG5hbWUgaXNuJ3QgYW1iaWdpb3VzLiBTbywgY2hhbmdlZCBpdCB3aXRo
IG1fcmVuZGVyZXIgYW5kIHJlbmRlcmVyKCkuCisgICAgICAgIEFkZGl0aW9uYWxseSwgc2V0UmVu
ZGVyZXIoKSBpcyBhZGRlZCBhcyB3ZWxsLgorCisgICAgICAgIE5vIG5ldyB0ZXN0cywgbm8gYmVo
YXZpb3IgY2hhbmdlcy4KKworICAgICAgICAqIHJlbmRlcmluZy9JbmxpbmVJdGVyYXRvci5oOgor
ICAgICAgICAoV2ViQ29yZTo6SW5saW5lSXRlcmF0b3I6OnNldE9iamVjdCk6CisgICAgICAgIChX
ZWJDb3JlOjpvcGVyYXRvcj09KToKKyAgICAgICAgKFdlYkNvcmU6Om9wZXJhdG9yIT0pOgorICAg
ICAgICAoV2ViQ29yZTo6SW5saW5lQmlkaVJlc29sdmVyOjphcHBlbmRSdW4pOgorICAgICAgICAq
IHJlbmRlcmluZy9SZW5kZXJCbG9ja0xpbmVMYXlvdXQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
UmVuZGVyQmxvY2tGbG93OjphcHBlbmRSdW5zRm9yT2JqZWN0KToKKyAgICAgICAgKFdlYkNvcmU6
OmNvbnN0cnVjdEJpZGlSdW5zRm9yTGluZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCbG9j
a0Zsb3c6OmNyZWF0ZUxpbmVCb3hlc0Zyb21CaWRpUnVucyk6CisgICAgICAgIChXZWJDb3JlOjpS
ZW5kZXJCbG9ja0Zsb3c6OmxheW91dFJ1bnNBbmRGbG9hdHNJblJhbmdlKToKKyAgICAgICAgKFdl
YkNvcmU6OlJlbmRlckJsb2NrRmxvdzo6bWF0Y2hlZEVuZExpbmUpOgorICAgICAgICAqIHJlbmRl
cmluZy9saW5lL0JyZWFraW5nQ29udGV4dElubGluZUhlYWRlcnMuaDoKKyAgICAgICAgKFdlYkNv
cmU6OlRyYWlsaW5nT2JqZWN0czo6dXBkYXRlTWlkcG9pbnRzRm9yVHJhaWxpbmdCb3hlcyk6Cisg
ICAgICAgIChXZWJDb3JlOjpCcmVha2luZ0NvbnRleHQ6OkJyZWFraW5nQ29udGV4dCk6CisgICAg
ICAgIChXZWJDb3JlOjpCcmVha2luZ0NvbnRleHQ6OmN1cnJlbnRPYmplY3QpOgorICAgICAgICAo
V2ViQ29yZTo6QnJlYWtpbmdDb250ZXh0Ojppbml0aWFsaXplRm9yQ3VycmVudE9iamVjdCk6Cisg
ICAgICAgIChXZWJDb3JlOjpCcmVha2luZ0NvbnRleHQ6OmhhbmRsZUJSKToKKyAgICAgICAgKFdl
YkNvcmU6OkJyZWFraW5nQ29udGV4dDo6aGFuZGxlT3V0T2ZGbG93UG9zaXRpb25lZCk6CisgICAg
ICAgIChXZWJDb3JlOjpCcmVha2luZ0NvbnRleHQ6OmhhbmRsZUZsb2F0KToKKyAgICAgICAgKFdl
YkNvcmU6OkJyZWFraW5nQ29udGV4dDo6aGFuZGxlRW1wdHlJbmxpbmUpOgorICAgICAgICAoV2Vi
Q29yZTo6QnJlYWtpbmdDb250ZXh0OjpoYW5kbGVSZXBsYWNlZCk6CisgICAgICAgIChXZWJDb3Jl
OjppdGVyYXRvcklzQmV5b25kRW5kT2ZSZW5kZXJDb21iaW5lVGV4dCk6CisgICAgICAgIChXZWJD
b3JlOjplbnN1cmVDaGFyYWN0ZXJHZXRzTGluZUJveCk6CisgICAgICAgIChXZWJDb3JlOjpCcmVh
a2luZ0NvbnRleHQ6OmhhbmRsZVRleHQpOgorICAgICAgICAoV2ViQ29yZTo6QnJlYWtpbmdDb250
ZXh0OjpjYW5CcmVha0F0VGhpc1Bvc2l0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkJyZWFraW5n
Q29udGV4dDo6Y29tbWl0QW5kVXBkYXRlTGluZUJyZWFrSWZOZWVkZWQpOgorICAgICAgICAoV2Vi
Q29yZTo6Y2hlY2tNaWRwb2ludHMpOgorICAgICAgICAoV2ViQ29yZTo6QnJlYWtpbmdDb250ZXh0
OjpoYW5kbGVFbmRPZkxpbmUpOgorICAgICAgICAqIHJlbmRlcmluZy9saW5lL0xpbmVCcmVha2Vy
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkxpbmVCcmVha2VyOjpza2lwVHJhaWxpbmdXaGl0ZXNw
YWNlKToKKyAgICAgICAgKFdlYkNvcmU6OkxpbmVCcmVha2VyOjpza2lwTGVhZGluZ1doaXRlc3Bh
Y2UpOgorICAgICAgICAqIHJlbmRlcmluZy9saW5lL0xpbmVJbmxpbmVIZWFkZXJzLmg6CisgICAg
ICAgIChXZWJDb3JlOjpza2lwTm9uQnJlYWtpbmdTcGFjZSk6CisgICAgICAgIChXZWJDb3JlOjpy
ZXF1aXJlc0xpbmVCb3gpOgorCiAyMDEzLTExLTI2ICBUaW0gSG9ydG9uICA8dGltb3RoeV9ob3J0
b25AYXBwbGUuY29tPgogCiAgICAgICAgIERvbid0IHBhcmVudCB0aGUgVGlsZUNvbnRyb2xsZXIg
cm9vdCBsYXllciBpbiB0d28gcGxhY2VzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvSW5saW5lSXRlcmF0b3IuaCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9JbmxpbmVJ
dGVyYXRvci5oCmluZGV4IDJhNGVhMDM3MmZkOGM3YmNiODQ5ZjQ5NjAwMTczZTg2MDA2MjI5NGUu
LjYwM2RmMWQ4Yzc0M2JhMDBiNDIyN2FkYzQxODA5MzI4ODllYWQ4MjQgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9JbmxpbmVJdGVyYXRvci5oCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9JbmxpbmVJdGVyYXRvci5oCkBAIC0zOCw3ICszOCw3IEBAIGNsYXNzIElu
bGluZUl0ZXJhdG9yIHsKIHB1YmxpYzoKICAgICBJbmxpbmVJdGVyYXRvcigpCiAgICAgICAgIDog
bV9yb290KDApCi0gICAgICAgICwgbV9vYmooMCkKKyAgICAgICAgLCBtX3JlbmRlcmVyKDApCiAg
ICAgICAgICwgbV9wb3MoMCkKICAgICAgICAgLCBtX25leHRCcmVha2FibGVQb3NpdGlvbigtMSkK
ICAgICB7CkBAIC00Niw3ICs0Niw3IEBAIHB1YmxpYzoKIAogICAgIElubGluZUl0ZXJhdG9yKFJl
bmRlckVsZW1lbnQqIHJvb3QsIFJlbmRlck9iamVjdCogbywgdW5zaWduZWQgcCkKICAgICAgICAg
OiBtX3Jvb3Qocm9vdCkKLSAgICAgICAgLCBtX29iaihvKQorICAgICAgICAsIG1fcmVuZGVyZXIo
bykKICAgICAgICAgLCBtX3BvcyhwKQogICAgICAgICAsIG1fbmV4dEJyZWFrYWJsZVBvc2l0aW9u
KC0xKQogICAgIHsKQEAgLTYxLDEyICs2MSwxMyBAQCBwdWJsaWM6CiAKICAgICB2b2lkIG1vdmVU
byhSZW5kZXJPYmplY3QqIG9iamVjdCwgdW5zaWduZWQgb2Zmc2V0LCBpbnQgbmV4dEJyZWFrID0g
LTEpCiAgICAgewotICAgICAgICBtX29iaiA9IG9iamVjdDsKKyAgICAgICAgbV9yZW5kZXJlciA9
IG9iamVjdDsKICAgICAgICAgbV9wb3MgPSBvZmZzZXQ7CiAgICAgICAgIG1fbmV4dEJyZWFrYWJs
ZVBvc2l0aW9uID0gbmV4dEJyZWFrOwogICAgIH0KIAotICAgIFJlbmRlck9iamVjdCogb2JqZWN0
KCkgY29uc3QgeyByZXR1cm4gbV9vYmo7IH0KKyAgICBSZW5kZXJPYmplY3QqIHJlbmRlcmVyKCkg
Y29uc3QgeyByZXR1cm4gbV9yZW5kZXJlcjsgfQorICAgIHZvaWQgc2V0UmVuZGVyZXIoUmVuZGVy
T2JqZWN0KiByZW5kZXJlcikgeyBtX3JlbmRlcmVyID0gcmVuZGVyZXI7IH0KICAgICB1bnNpZ25l
ZCBvZmZzZXQoKSBjb25zdCB7IHJldHVybiBtX3BvczsgfQogICAgIFJlbmRlckVsZW1lbnQqIHJv
b3QoKSBjb25zdCB7IHJldHVybiBtX3Jvb3Q7IH0KIApAQCAtNzYsMTMgKzc3LDEzIEBAIHB1Ymxp
YzoKIAogICAgIGlubGluZSBib29sIGF0VGV4dFBhcmFncmFwaFNlcGFyYXRvcigpCiAgICAgewot
ICAgICAgICByZXR1cm4gbV9vYmogJiYgbV9vYmotPnByZXNlcnZlc05ld2xpbmUoKSAmJiBtX29i
ai0+aXNUZXh0KCkgJiYgdG9SZW5kZXJUZXh0KG1fb2JqKS0+dGV4dExlbmd0aCgpCi0gICAgICAg
ICAgICAmJiB0b1JlbmRlclRleHQobV9vYmopLT5jaGFyYWN0ZXJBdChtX3BvcykgPT0gJ1xuJzsK
KyAgICAgICAgcmV0dXJuIG1fcmVuZGVyZXIgJiYgbV9yZW5kZXJlci0+cHJlc2VydmVzTmV3bGlu
ZSgpICYmIG1fcmVuZGVyZXItPmlzVGV4dCgpICYmIHRvUmVuZGVyVGV4dChtX3JlbmRlcmVyKS0+
dGV4dExlbmd0aCgpCisgICAgICAgICAgICAmJiB0b1JlbmRlclRleHQobV9yZW5kZXJlciktPmNo
YXJhY3RlckF0KG1fcG9zKSA9PSAnXG4nOwogICAgIH0KICAgICAKICAgICBpbmxpbmUgYm9vbCBh
dFBhcmFncmFwaFNlcGFyYXRvcigpCiAgICAgewotICAgICAgICByZXR1cm4gKG1fb2JqICYmIG1f
b2JqLT5pc0JSKCkpIHx8IGF0VGV4dFBhcmFncmFwaFNlcGFyYXRvcigpOworICAgICAgICByZXR1
cm4gKG1fcmVuZGVyZXIgJiYgbV9yZW5kZXJlci0+aXNCUigpKSB8fCBhdFRleHRQYXJhZ3JhcGhT
ZXBhcmF0b3IoKTsKICAgICB9CiAKICAgICBVQ2hhciBjaGFyYWN0ZXJBdCh1bnNpZ25lZCkgY29u
c3Q7CkBAIC05MiwyMiArOTMsMjIgQEAgcHVibGljOgogCiBwcml2YXRlOgogICAgIFJlbmRlckVs
ZW1lbnQqIG1fcm9vdDsKKyAgICBSZW5kZXJPYmplY3QqIG1fcmVuZGVyZXI7CiAKLSAgICAvLyBG
SVhNRTogVGhlc2Ugc2hvdWxkIGJlIHByaXZhdGUuCisvLyBGSVhNRTogVGhlc2Ugc2hvdWxkIGJl
IHByaXZhdGUuCiBwdWJsaWM6Ci0gICAgUmVuZGVyT2JqZWN0KiBtX29iajsKICAgICB1bnNpZ25l
ZCBtX3BvczsKICAgICBpbnQgbV9uZXh0QnJlYWthYmxlUG9zaXRpb247CiB9OwogCiBpbmxpbmUg
Ym9vbCBvcGVyYXRvcj09KGNvbnN0IElubGluZUl0ZXJhdG9yJiBpdDEsIGNvbnN0IElubGluZUl0
ZXJhdG9yJiBpdDIpCiB7Ci0gICAgcmV0dXJuIGl0MS5tX3BvcyA9PSBpdDIubV9wb3MgJiYgaXQx
Lm1fb2JqID09IGl0Mi5tX29iajsKKyAgICByZXR1cm4gaXQxLm1fcG9zID09IGl0Mi5tX3BvcyAm
JiBpdDEucmVuZGVyZXIoKSA9PSBpdDIucmVuZGVyZXIoKTsKIH0KIAogaW5saW5lIGJvb2wgb3Bl
cmF0b3IhPShjb25zdCBJbmxpbmVJdGVyYXRvciYgaXQxLCBjb25zdCBJbmxpbmVJdGVyYXRvciYg
aXQyKQogewotICAgIHJldHVybiBpdDEubV9wb3MgIT0gaXQyLm1fcG9zIHx8IGl0MS5tX29iaiAh
PSBpdDIubV9vYmo7CisgICAgcmV0dXJuIGl0MS5tX3BvcyAhPSBpdDIubV9wb3MgfHwgaXQxLnJl
bmRlcmVyKCkgIT0gaXQyLnJlbmRlcmVyKCk7CiB9CiAKIHN0YXRpYyBpbmxpbmUgVUNoYXJEaXJl
Y3Rpb24gZW1iZWRDaGFyRnJvbURpcmVjdGlvbihUZXh0RGlyZWN0aW9uIGRpcmVjdGlvbiwgRVVu
aWNvZGVCaWRpIHVuaWNvZGVCaWRpKQpAQCAtMzEzLDkgKzMxNCw5IEBAIHN0YXRpYyBpbmxpbmUg
UmVuZGVyT2JqZWN0KiBiaWRpRmlyc3RJbmNsdWRpbmdFbXB0eUlubGluZXMoUmVuZGVyRWxlbWVu
dCYgcm9vdCkKIAogaW5saW5lIHZvaWQgSW5saW5lSXRlcmF0b3I6OmZhc3RJbmNyZW1lbnRJblRl
eHROb2RlKCkKIHsKLSAgICBBU1NFUlQobV9vYmopOwotICAgIEFTU0VSVChtX29iai0+aXNUZXh0
KCkpOwotICAgIEFTU0VSVChtX3BvcyA8PSB0b1JlbmRlclRleHQobV9vYmopLT50ZXh0TGVuZ3Ro
KCkpOworICAgIEFTU0VSVChtX3JlbmRlcmVyKTsKKyAgICBBU1NFUlQobV9yZW5kZXJlci0+aXNU
ZXh0KCkpOworICAgIEFTU0VSVChtX3BvcyA8PSB0b1JlbmRlclRleHQobV9yZW5kZXJlciktPnRl
eHRMZW5ndGgoKSk7CiAgICAgbV9wb3MrKzsKIH0KIApAQCAtMzUyLDI4ICszNTMsMjggQEAgcHJp
dmF0ZToKIAogaW5saW5lIHZvaWQgSW5saW5lSXRlcmF0b3I6OmluY3JlbWVudChJbmxpbmVCaWRp
UmVzb2x2ZXIqIHJlc29sdmVyKQogewotICAgIGlmICghbV9vYmopCisgICAgaWYgKCFtX3JlbmRl
cmVyKQogICAgICAgICByZXR1cm47Ci0gICAgaWYgKG1fb2JqLT5pc1RleHQoKSkgeworICAgIGlm
IChtX3JlbmRlcmVyLT5pc1RleHQoKSkgewogICAgICAgICBmYXN0SW5jcmVtZW50SW5UZXh0Tm9k
ZSgpOwotICAgICAgICBpZiAobV9wb3MgPCB0b1JlbmRlclRleHQobV9vYmopLT50ZXh0TGVuZ3Ro
KCkpCisgICAgICAgIGlmIChtX3BvcyA8IHRvUmVuZGVyVGV4dChtX3JlbmRlcmVyKS0+dGV4dExl
bmd0aCgpKQogICAgICAgICAgICAgcmV0dXJuOwogICAgIH0KICAgICAvLyBiaWRpTmV4dCBjYW4g
cmV0dXJuIDAsIHNvIHVzZSBtb3ZlVG8gaW5zdGVhZCBvZiBtb3ZlVG9TdGFydE9mCi0gICAgbW92
ZVRvKGJpZGlOZXh0U2tpcHBpbmdFbXB0eUlubGluZXMoKm1fcm9vdCwgbV9vYmosIHJlc29sdmVy
KSwgMCk7CisgICAgbW92ZVRvKGJpZGlOZXh0U2tpcHBpbmdFbXB0eUlubGluZXMoKm1fcm9vdCwg
bV9yZW5kZXJlciwgcmVzb2x2ZXIpLCAwKTsKIH0KIAogaW5saW5lIGJvb2wgSW5saW5lSXRlcmF0
b3I6OmF0RW5kKCkgY29uc3QKIHsKLSAgICByZXR1cm4gIW1fb2JqOworICAgIHJldHVybiAhbV9y
ZW5kZXJlcjsKIH0KIAogaW5saW5lIFVDaGFyIElubGluZUl0ZXJhdG9yOjpjaGFyYWN0ZXJBdCh1
bnNpZ25lZCBpbmRleCkgY29uc3QKIHsKLSAgICBpZiAoIW1fb2JqIHx8ICFtX29iai0+aXNUZXh0
KCkpCisgICAgaWYgKCFtX3JlbmRlcmVyIHx8ICFtX3JlbmRlcmVyLT5pc1RleHQoKSkKICAgICAg
ICAgcmV0dXJuIDA7CiAKLSAgICBSZW5kZXJUZXh0KiB0ZXh0ID0gdG9SZW5kZXJUZXh0KG1fb2Jq
KTsKKyAgICBSZW5kZXJUZXh0KiB0ZXh0ID0gdG9SZW5kZXJUZXh0KG1fcmVuZGVyZXIpOwogICAg
IGlmIChpbmRleCA+PSB0ZXh0LT50ZXh0TGVuZ3RoKCkpCiAgICAgICAgIHJldHVybiAwOwogCkBA
IC0zOTgsOCArMzk5LDggQEAgQUxXQVlTX0lOTElORSBVQ2hhckRpcmVjdGlvbiBJbmxpbmVJdGVy
YXRvcjo6ZGlyZWN0aW9uKCkgY29uc3QKICAgICBpZiAoVUNoYXIgY2hhcmFjdGVyID0gY3VycmVu
dCgpKQogICAgICAgICByZXR1cm4gdV9jaGFyRGlyZWN0aW9uKGNoYXJhY3Rlcik7CiAKLSAgICBp
ZiAobV9vYmogJiYgbV9vYmotPmlzTGlzdE1hcmtlcigpKQotICAgICAgICByZXR1cm4gbV9vYmot
PnN0eWxlKCkuaXNMZWZ0VG9SaWdodERpcmVjdGlvbigpID8gVV9MRUZUX1RPX1JJR0hUIDogVV9S
SUdIVF9UT19MRUZUOworICAgIGlmIChtX3JlbmRlcmVyICYmIG1fcmVuZGVyZXItPmlzTGlzdE1h
cmtlcigpKQorICAgICAgICByZXR1cm4gbV9yZW5kZXJlci0+c3R5bGUoKS5pc0xlZnRUb1JpZ2h0
RGlyZWN0aW9uKCkgPyBVX0xFRlRfVE9fUklHSFQgOiBVX1JJR0hUX1RPX0xFRlQ7CiAKICAgICBy
ZXR1cm4gVV9PVEhFUl9ORVVUUkFMOwogfQpAQCAtNDM0LDcgKzQzNSw3IEBAIHN0YXRpYyBpbmxp
bmUgUmVuZGVyT2JqZWN0KiBjb250YWluaW5nSXNvbGF0ZShSZW5kZXJPYmplY3QqIG9iamVjdCwg
UmVuZGVyT2JqZWN0CiAKIHN0YXRpYyBpbmxpbmUgdW5zaWduZWQgbnVtYmVyT2ZJc29sYXRlQW5j
ZXN0b3JzKGNvbnN0IElubGluZUl0ZXJhdG9yJiBpdGVyKQogewotICAgIFJlbmRlck9iamVjdCog
b2JqZWN0ID0gaXRlci5vYmplY3QoKTsKKyAgICBSZW5kZXJPYmplY3QqIG9iamVjdCA9IGl0ZXIu
cmVuZGVyZXIoKTsKICAgICBpZiAoIW9iamVjdCkKICAgICAgICAgcmV0dXJuIDA7CiAgICAgdW5z
aWduZWQgY291bnQgPSAwOwpAQCAtNDk1LDcgKzQ5Niw3IEBAIHB1YmxpYzoKICAgICAgICAgLy8g
Rm9yIG5vdywgaWYgd2UgZW50ZXIgYW4gaXNvbGF0ZSBiZXR3ZWVuIG1pZHBvaW50cywgd2UgaW5j
cmVtZW50IG91ciBjdXJyZW50IG1pZHBvaW50IG9yIGVsc2UKICAgICAgICAgLy8gd2UnbGwgbGVh
dmUgdGhlIGlzb2xhdGUgYW5kIGlnbm9yZSB0aGUgY29udGVudCB0aGF0IGZvbGxvd3MuCiAgICAg
ICAgIE1pZHBvaW50U3RhdGU8SW5saW5lSXRlcmF0b3I+JiBtaWRwb2ludFN0YXRlID0gcmVzb2x2
ZXIubWlkcG9pbnRTdGF0ZSgpOwotICAgICAgICBpZiAobWlkcG9pbnRTdGF0ZS5iZXR3ZWVuTWlk
cG9pbnRzICYmIG1pZHBvaW50U3RhdGUubWlkcG9pbnRzW21pZHBvaW50U3RhdGUuY3VycmVudE1p
ZHBvaW50XS5vYmplY3QoKSA9PSAmb2JqKSB7CisgICAgICAgIGlmIChtaWRwb2ludFN0YXRlLmJl
dHdlZW5NaWRwb2ludHMgJiYgbWlkcG9pbnRTdGF0ZS5taWRwb2ludHNbbWlkcG9pbnRTdGF0ZS5j
dXJyZW50TWlkcG9pbnRdLnJlbmRlcmVyKCkgPT0gJm9iaikgewogICAgICAgICAgICAgbWlkcG9p
bnRTdGF0ZS5iZXR3ZWVuTWlkcG9pbnRzID0gZmFsc2U7CiAgICAgICAgICAgICArK21pZHBvaW50
U3RhdGUuY3VycmVudE1pZHBvaW50OwogICAgICAgICB9CkBAIC01MTUsOCArNTE2LDggQEAgaW5s
aW5lIHZvaWQgSW5saW5lQmlkaVJlc29sdmVyOjphcHBlbmRSdW4oKQogICAgICAgICAvLyBGSVhN
RTogQ291bGQgdGhpcyBpbml0aWFsaXplIGZyb20gdGhpcy0+aW5Jc29sYXRlKCkgaW5zdGVhZCBv
ZiB3YWxraW5nIHVwIHRoZSByZW5kZXIgdHJlZT8KICAgICAgICAgSXNvbGF0ZVRyYWNrZXIgaXNv
bGF0ZVRyYWNrZXIobnVtYmVyT2ZJc29sYXRlQW5jZXN0b3JzKG1fc29yKSk7CiAgICAgICAgIGlu
dCBzdGFydCA9IG1fc29yLm1fcG9zOwotICAgICAgICBSZW5kZXJPYmplY3QqIG9iaiA9IG1fc29y
Lm1fb2JqOwotICAgICAgICB3aGlsZSAob2JqICYmIG9iaiAhPSBtX2Vvci5tX29iaiAmJiBvYmog
IT0gZW5kT2ZMaW5lLm1fb2JqKSB7CisgICAgICAgIFJlbmRlck9iamVjdCogb2JqID0gbV9zb3Iu
cmVuZGVyZXIoKTsKKyAgICAgICAgd2hpbGUgKG9iaiAmJiBvYmogIT0gbV9lb3IucmVuZGVyZXIo
KSAmJiBvYmogIT0gZW5kT2ZMaW5lLnJlbmRlcmVyKCkpIHsKICAgICAgICAgICAgIGlmIChpc29s
YXRlVHJhY2tlci5pbklzb2xhdGUoKSkKICAgICAgICAgICAgICAgICBpc29sYXRlVHJhY2tlci5h
ZGRGYWtlUnVuSWZOZWNlc3NhcnkoKm9iaiwgc3RhcnQsICp0aGlzKTsKICAgICAgICAgICAgIGVs
c2UKQEAgLTUyNiw4ICs1MjcsOCBAQCBpbmxpbmUgdm9pZCBJbmxpbmVCaWRpUmVzb2x2ZXI6OmFw
cGVuZFJ1bigpCiAgICAgICAgICAgICBvYmogPSBiaWRpTmV4dFNraXBwaW5nRW1wdHlJbmxpbmVz
KCptX3Nvci5yb290KCksIG9iaiwgJmlzb2xhdGVUcmFja2VyKTsKICAgICAgICAgfQogICAgICAg
ICBpZiAob2JqKSB7Ci0gICAgICAgICAgICB1bnNpZ25lZCBwb3MgPSBvYmogPT0gbV9lb3IubV9v
YmogPyBtX2Vvci5tX3BvcyA6IFVJTlRfTUFYOwotICAgICAgICAgICAgaWYgKG9iaiA9PSBlbmRP
ZkxpbmUubV9vYmogJiYgZW5kT2ZMaW5lLm1fcG9zIDw9IHBvcykgeworICAgICAgICAgICAgdW5z
aWduZWQgcG9zID0gb2JqID09IG1fZW9yLnJlbmRlcmVyKCkgPyBtX2Vvci5tX3BvcyA6IFVJTlRf
TUFYOworICAgICAgICAgICAgaWYgKG9iaiA9PSBlbmRPZkxpbmUucmVuZGVyZXIoKSAmJiBlbmRP
ZkxpbmUubV9wb3MgPD0gcG9zKSB7CiAgICAgICAgICAgICAgICAgbV9yZWFjaGVkRW5kT2ZMaW5l
ID0gdHJ1ZTsKICAgICAgICAgICAgICAgICBwb3MgPSBlbmRPZkxpbmUubV9wb3M7CiAgICAgICAg
ICAgICB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2tM
aW5lTGF5b3V0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCbG9ja0xpbmVM
YXlvdXQuY3BwCmluZGV4IDNkZDYwYmNlNWI4NjJkYjIwMjFjODdjMmU4NWIyYzQ5MDlkNTk0YWEu
LjRiZmQ0ZjllYjlkZjc2Njk1NTg3OTMwNzEyZGYwOWNmODUyNDJjMzUgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCbG9ja0xpbmVMYXlvdXQuY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCbG9ja0xpbmVMYXlvdXQuY3BwCkBAIC04OCw3
ICs4OCw3IEBAIHZvaWQgUmVuZGVyQmxvY2tGbG93OjphcHBlbmRSdW5zRm9yT2JqZWN0KEJpZGlS
dW5MaXN0PEJpZGlSdW4+JiBydW5zLCBpbnQgc3RhcnQsCiAgICAgaWYgKGhhdmVOZXh0TWlkcG9p
bnQpCiAgICAgICAgIG5leHRNaWRwb2ludCA9IGxpbmVNaWRwb2ludFN0YXRlLm1pZHBvaW50c1ts
aW5lTWlkcG9pbnRTdGF0ZS5jdXJyZW50TWlkcG9pbnRdOwogICAgIGlmIChsaW5lTWlkcG9pbnRT
dGF0ZS5iZXR3ZWVuTWlkcG9pbnRzKSB7Ci0gICAgICAgIGlmICghKGhhdmVOZXh0TWlkcG9pbnQg
JiYgbmV4dE1pZHBvaW50Lm1fb2JqID09IG9iaikpCisgICAgICAgIGlmICghKGhhdmVOZXh0TWlk
cG9pbnQgJiYgbmV4dE1pZHBvaW50LnJlbmRlcmVyKCkgPT0gb2JqKSkKICAgICAgICAgICAgIHJl
dHVybjsKICAgICAgICAgLy8gVGhpcyBpcyBhIG5ldyBzdGFydCBwb2ludC4gU3RvcCBpZ25vcmlu
ZyBvYmplY3RzIGFuZAogICAgICAgICAvLyBhZGp1c3Qgb3VyIHN0YXJ0LgpAQCAtOTgsNyArOTgs
NyBAQCB2b2lkIFJlbmRlckJsb2NrRmxvdzo6YXBwZW5kUnVuc0Zvck9iamVjdChCaWRpUnVuTGlz
dDxCaWRpUnVuPiYgcnVucywgaW50IHN0YXJ0LAogICAgICAgICBpZiAoc3RhcnQgPCBlbmQpCiAg
ICAgICAgICAgICByZXR1cm4gYXBwZW5kUnVuc0Zvck9iamVjdChydW5zLCBzdGFydCwgZW5kLCBv
YmosIHJlc29sdmVyKTsKICAgICB9IGVsc2UgewotICAgICAgICBpZiAoIWhhdmVOZXh0TWlkcG9p
bnQgfHwgKG9iaiAhPSBuZXh0TWlkcG9pbnQubV9vYmopKSB7CisgICAgICAgIGlmICghaGF2ZU5l
eHRNaWRwb2ludCB8fCAob2JqICE9IG5leHRNaWRwb2ludC5yZW5kZXJlcigpKSkgewogICAgICAg
ICAgICAgcnVucy5hZGRSdW4oY3JlYXRlUnVuKHN0YXJ0LCBlbmQsIG9iaiwgcmVzb2x2ZXIpKTsK
ICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQpAQCAtOTYyLDggKzk2Miw4IEBAIHN0YXRp
YyBpbmxpbmUgdm9pZCBjb25zdHJ1Y3RCaWRpUnVuc0ZvckxpbmUoY29uc3QgUmVuZGVyQmxvY2tG
bG93KiBibG9jaywgSW5saW5lCiAgICAgICAgIGl0ZXJhdG9yID0gc2VnbWVudFJhbmdlc1tpXS5l
bmQ7CiAgICAgICAgIElubGluZUl0ZXJhdG9yIHNlZ21lbnRFbmQoaXRlcmF0b3Iucm9vdCwgaXRl
cmF0b3Iub2JqZWN0LCBpdGVyYXRvci5vZmZzZXQpOwogICAgICAgICBpZiAoaSkgewotICAgICAg
ICAgICAgQVNTRVJUKHNlZ21lbnRTdGFydC5tX29iaik7Ci0gICAgICAgICAgICBCaWRpUnVuKiBz
ZWdtZW50TWFya2VyID0gY3JlYXRlUnVuKHNlZ21lbnRTdGFydC5tX3Bvcywgc2VnbWVudFN0YXJ0
Lm1fcG9zLCBzZWdtZW50U3RhcnQubV9vYmosIHRvcFJlc29sdmVyKTsKKyAgICAgICAgICAgIEFT
U0VSVChzZWdtZW50U3RhcnQucmVuZGVyZXIoKSk7CisgICAgICAgICAgICBCaWRpUnVuKiBzZWdt
ZW50TWFya2VyID0gY3JlYXRlUnVuKHNlZ21lbnRTdGFydC5tX3Bvcywgc2VnbWVudFN0YXJ0Lm1f
cG9zLCBzZWdtZW50U3RhcnQucmVuZGVyZXIoKSwgdG9wUmVzb2x2ZXIpOwogICAgICAgICAgICAg
c2VnbWVudE1hcmtlci0+bV9zdGFydHNTZWdtZW50ID0gdHJ1ZTsKICAgICAgICAgICAgIGJpZGlS
dW5zLmFkZFJ1bihzZWdtZW50TWFya2VyKTsKICAgICAgICAgICAgIC8vIERvIG5vdCBjb2xsYXBz
ZSBtaWRwb2ludHMgYmV0d2VlbiBzZWdtZW50cwpAQCAtOTg0LDcgKzk4NCw3IEBAIFJvb3RJbmxp
bmVCb3gqIFJlbmRlckJsb2NrRmxvdzo6Y3JlYXRlTGluZUJveGVzRnJvbUJpZGlSdW5zKEJpZGlS
dW5MaXN0PEJpZGlSdW4+CiAgICAgICAgIHJldHVybiAwOwogCiAgICAgLy8gRklYTUU6IFdoeSBp
cyB0aGlzIG9ubHkgZG9uZSB3aGVuIHdlIGhhZCBydW5zPwotICAgIGxpbmVJbmZvLnNldExhc3RM
aW5lKCFlbmQubV9vYmopOworICAgIGxpbmVJbmZvLnNldExhc3RMaW5lKCFlbmQucmVuZGVyZXIo
KSk7CiAKICAgICBSb290SW5saW5lQm94KiBsaW5lQm94ID0gY29uc3RydWN0TGluZShiaWRpUnVu
cywgbGluZUluZm8pOwogICAgIGlmICghbGluZUJveCkKQEAgLTEzNjEsNyArMTM2MSw3IEBAIHZv
aWQgUmVuZGVyQmxvY2tGbG93OjpsYXlvdXRSdW5zQW5kRmxvYXRzSW5SYW5nZShMaW5lTGF5b3V0
U3RhdGUmIGxheW91dFN0YXRlLCBJCiAgICAgICAgIC8vIFRoaXMgaXMgYSBzaG9ydC1jdXQgZm9y
IGVtcHR5IGxpbmVzLgogICAgICAgICBpZiAobGF5b3V0U3RhdGUubGluZUluZm8oKS5pc0VtcHR5
KCkpIHsKICAgICAgICAgICAgIGlmIChsYXN0Um9vdEJveCgpKQotICAgICAgICAgICAgICAgIGxh
c3RSb290Qm94KCktPnNldExpbmVCcmVha0luZm8oZW5kLm1fb2JqLCBlbmQubV9wb3MsIHJlc29s
dmVyLnN0YXR1cygpKTsKKyAgICAgICAgICAgICAgICBsYXN0Um9vdEJveCgpLT5zZXRMaW5lQnJl
YWtJbmZvKGVuZC5yZW5kZXJlcigpLCBlbmQubV9wb3MsIHJlc29sdmVyLnN0YXR1cygpKTsKICAg
ICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgIFZpc3VhbERpcmVjdGlvbk92ZXJyaWRlIG92ZXJy
aWRlID0gKHN0eWxlVG9Vc2UucnRsT3JkZXJpbmcoKSA9PSBWaXN1YWxPcmRlciA/IChzdHlsZVRv
VXNlLmRpcmVjdGlvbigpID09IExUUiA/IFZpc3VhbExlZnRUb1JpZ2h0T3ZlcnJpZGUgOiBWaXN1
YWxSaWdodFRvTGVmdE92ZXJyaWRlKSA6IE5vVmlzdWFsT3ZlcnJpZGUpOwogCkBAIC0xMzk0LDcg
KzEzOTQsNyBAQCB2b2lkIFJlbmRlckJsb2NrRmxvdzo6bGF5b3V0UnVuc0FuZEZsb2F0c0luUmFu
Z2UoTGluZUxheW91dFN0YXRlJiBsYXlvdXRTdGF0ZSwgSQogICAgICAgICAgICAgcmVzb2x2ZXIu
bWFya0N1cnJlbnRSdW5FbXB0eSgpOyAvLyBGSVhNRTogVGhpcyBjYW4gcHJvYmFibHkgYmUgcmVw
bGFjZWQgYnkgYW4gQVNTRVJUIChvciBqdXN0IHJlbW92ZWQpLgogCiAgICAgICAgICAgICBpZiAo
bGluZUJveCkgewotICAgICAgICAgICAgICAgIGxpbmVCb3gtPnNldExpbmVCcmVha0luZm8oZW5k
Lm1fb2JqLCBlbmQubV9wb3MsIHJlc29sdmVyLnN0YXR1cygpKTsKKyAgICAgICAgICAgICAgICBs
aW5lQm94LT5zZXRMaW5lQnJlYWtJbmZvKGVuZC5yZW5kZXJlcigpLCBlbmQubV9wb3MsIHJlc29s
dmVyLnN0YXR1cygpKTsKICAgICAgICAgICAgICAgICBpZiAobGF5b3V0U3RhdGUudXNlc1JlcGFp
bnRCb3VuZHMoKSkKICAgICAgICAgICAgICAgICAgICAgbGF5b3V0U3RhdGUudXBkYXRlUmVwYWlu
dFJhbmdlRnJvbUJveChsaW5lQm94KTsKIApAQCAtMTk3Miw3ICsxOTcyLDcgQEAgYm9vbCBSZW5k
ZXJCbG9ja0Zsb3c6Om1hdGNoZWRFbmRMaW5lKExpbmVMYXlvdXRTdGF0ZSYgbGF5b3V0U3RhdGUs
IGNvbnN0IElubGluZUIKICAgICBSb290SW5saW5lQm94KiBvcmlnaW5hbEVuZExpbmUgPSBsYXlv
dXRTdGF0ZS5lbmRMaW5lKCk7CiAgICAgUm9vdElubGluZUJveCogbGluZSA9IG9yaWdpbmFsRW5k
TGluZTsKICAgICBmb3IgKGludCBpID0gMDsgaSA8IG51bUxpbmVzICYmIGxpbmU7IGkrKywgbGlu
ZSA9IGxpbmUtPm5leHRSb290Qm94KCkpIHsKLSAgICAgICAgaWYgKGxpbmUtPmxpbmVCcmVha09i
aigpID09IHJlc29sdmVyLnBvc2l0aW9uKCkubV9vYmogJiYgbGluZS0+bGluZUJyZWFrUG9zKCkg
PT0gcmVzb2x2ZXIucG9zaXRpb24oKS5tX3BvcykgeworICAgICAgICBpZiAobGluZS0+bGluZUJy
ZWFrT2JqKCkgPT0gcmVzb2x2ZXIucG9zaXRpb24oKS5yZW5kZXJlcigpICYmIGxpbmUtPmxpbmVC
cmVha1BvcygpID09IHJlc29sdmVyLnBvc2l0aW9uKCkubV9wb3MpIHsKICAgICAgICAgICAgIC8v
IFdlIGhhdmUgYSBtYXRjaC4KICAgICAgICAgICAgIGlmIChsaW5lLT5saW5lQnJlYWtCaWRpU3Rh
dHVzKCkgIT0gcmVzb2x2ZXIuc3RhdHVzKCkpCiAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OyAvLyAuLi5idXQgdGhlIGJpZGkgc3RhdGUgZG9lc24ndCBtYXRjaC4KZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9saW5lL0JyZWFraW5nQ29udGV4dElubGluZUhlYWRlcnMu
aCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9saW5lL0JyZWFraW5nQ29udGV4dElubGluZUhl
YWRlcnMuaAppbmRleCA3Yjk5NTc1Mzk5YzVjZmFlYzc3YWRmYWQzZGQ3ZTQzZjc1OTdiODY4Li5m
NjVkN2JjMTA0ODgwMjIxODQ1YjI1NWM5MjA5OTQ4ZWI3YTFjMmY3IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvbGluZS9CcmVha2luZ0NvbnRleHRJbmxpbmVIZWFkZXJzLmgK
KysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL2xpbmUvQnJlYWtpbmdDb250ZXh0SW5saW5l
SGVhZGVycy5oCkBAIC0xNDcsNyArMTQ3LDcgQEAgdm9pZCBUcmFpbGluZ09iamVjdHM6OnVwZGF0
ZU1pZHBvaW50c0ZvclRyYWlsaW5nQm94ZXMoTGluZU1pZHBvaW50U3RhdGUmIGxpbmVNaWQKICAg
ICBpZiAobGluZU1pZHBvaW50U3RhdGUubnVtTWlkcG9pbnRzICUgMikgewogICAgICAgICAvLyBG
aW5kIHRoZSB0cmFpbGluZyBzcGFjZSBvYmplY3QncyBtaWRwb2ludC4KICAgICAgICAgaW50IHRy
YWlsaW5nU3BhY2VNaWRwb2ludCA9IGxpbmVNaWRwb2ludFN0YXRlLm51bU1pZHBvaW50cyAtIDE7
Ci0gICAgICAgIGZvciAoIDsgdHJhaWxpbmdTcGFjZU1pZHBvaW50ID4gMCAmJiBsaW5lTWlkcG9p
bnRTdGF0ZS5taWRwb2ludHNbdHJhaWxpbmdTcGFjZU1pZHBvaW50XS5tX29iaiAhPSBtX3doaXRl
c3BhY2U7IC0tdHJhaWxpbmdTcGFjZU1pZHBvaW50KSB7IH0KKyAgICAgICAgZm9yICggOyB0cmFp
bGluZ1NwYWNlTWlkcG9pbnQgPiAwICYmIGxpbmVNaWRwb2ludFN0YXRlLm1pZHBvaW50c1t0cmFp
bGluZ1NwYWNlTWlkcG9pbnRdLnJlbmRlcmVyKCkgIT0gbV93aGl0ZXNwYWNlOyAtLXRyYWlsaW5n
U3BhY2VNaWRwb2ludCkgeyB9CiAgICAgICAgIEFTU0VSVCh0cmFpbGluZ1NwYWNlTWlkcG9pbnQg
Pj0gMCk7CiAgICAgICAgIGlmIChjb2xsYXBzZUZpcnN0U3BhY2UgPT0gQ29sbGFwc2VGaXJzdFNw
YWNlKQogICAgICAgICAgICAgbGluZU1pZHBvaW50U3RhdGUubWlkcG9pbnRzW3RyYWlsaW5nU3Bh
Y2VNaWRwb2ludF0ubV9wb3MtLTsKQEAgLTE2MCwxMiArMTYwLDEyIEBAIHZvaWQgVHJhaWxpbmdP
YmplY3RzOjp1cGRhdGVNaWRwb2ludHNGb3JUcmFpbGluZ0JveGVzKExpbmVNaWRwb2ludFN0YXRl
JiBsaW5lTWlkCiAgICAgICAgICAgICAgICAgLy8gV2UgZG9uJ3QgaGF2ZSBhIG1pZHBvaW50IGZv
ciB0aGlzIGJveCB5ZXQuCiAgICAgICAgICAgICAgICAgZW5zdXJlTGluZUJveEluc2lkZUlnbm9y
ZWRTcGFjZXMobGluZU1pZHBvaW50U3RhdGUsIG1fYm94ZXNbaV0pOwogICAgICAgICAgICAgfSBl
bHNlIHsKLSAgICAgICAgICAgICAgICBBU1NFUlQobGluZU1pZHBvaW50U3RhdGUubWlkcG9pbnRz
W2N1cnJlbnRNaWRwb2ludF0ubV9vYmogPT0gbV9ib3hlc1tpXSk7Ci0gICAgICAgICAgICAgICAg
QVNTRVJUKGxpbmVNaWRwb2ludFN0YXRlLm1pZHBvaW50c1tjdXJyZW50TWlkcG9pbnQgKyAxXS5t
X29iaiA9PSBtX2JveGVzW2ldKTsKKyAgICAgICAgICAgICAgICBBU1NFUlQobGluZU1pZHBvaW50
U3RhdGUubWlkcG9pbnRzW2N1cnJlbnRNaWRwb2ludF0ucmVuZGVyZXIoKSA9PSBtX2JveGVzW2ld
KTsKKyAgICAgICAgICAgICAgICBBU1NFUlQobGluZU1pZHBvaW50U3RhdGUubWlkcG9pbnRzW2N1
cnJlbnRNaWRwb2ludCArIDFdLnJlbmRlcmVyKCkgPT0gbV9ib3hlc1tpXSk7CiAgICAgICAgICAg
ICB9CiAgICAgICAgICAgICBjdXJyZW50TWlkcG9pbnQgKz0gMjsKICAgICAgICAgfQotICAgIH0g
ZWxzZSBpZiAoIWxCcmVhay5tX29iaikgeworICAgIH0gZWxzZSBpZiAoIWxCcmVhay5yZW5kZXJl
cigpKSB7CiAgICAgICAgIEFTU0VSVChtX3doaXRlc3BhY2UtPmlzVGV4dCgpKTsKICAgICAgICAg
QVNTRVJUKGNvbGxhcHNlRmlyc3RTcGFjZSA9PSBDb2xsYXBzZUZpcnN0U3BhY2UpOwogICAgICAg
ICAvLyBBZGQgYSBuZXcgZW5kIG1pZHBvaW50IHRoYXQgc3RvcHMgcmlnaHQgYXQgdGhlIHZlcnkg
ZW5kLgpAQCAtMTg2LDcgKzE4Niw3IEBAIHB1YmxpYzoKICAgICAgICAgLCBtX2N1cnJlbnQocmVz
b2x2ZXIucG9zaXRpb24oKSkKICAgICAgICAgLCBtX2xpbmVCcmVhayhyZXNvbHZlci5wb3NpdGlv
bigpKQogICAgICAgICAsIG1fYmxvY2soYmxvY2spCi0gICAgICAgICwgbV9sYXN0T2JqZWN0KG1f
Y3VycmVudC5tX29iaikKKyAgICAgICAgLCBtX2xhc3RPYmplY3QobV9jdXJyZW50LnJlbmRlcmVy
KCkpCiAgICAgICAgICwgbV9uZXh0T2JqZWN0KDApCiAgICAgICAgICwgbV9jdXJyZW50U3R5bGUo
MCkKICAgICAgICAgLCBtX2Jsb2NrU3R5bGUoYmxvY2suc3R5bGUoKSkKQEAgLTIxNiw3ICsyMTYs
NyBAQCBwdWJsaWM6CiAgICAgICAgIG1fbGluZUluZm8uc2V0UHJldmlvdXNMaW5lQnJva2VDbGVh
bmx5KGZhbHNlKTsKICAgICB9CiAKLSAgICBSZW5kZXJPYmplY3QqIGN1cnJlbnRPYmplY3QoKSB7
IHJldHVybiBtX2N1cnJlbnQubV9vYmo7IH0KKyAgICBSZW5kZXJPYmplY3QqIGN1cnJlbnRPYmpl
Y3QoKSB7IHJldHVybiBtX2N1cnJlbnQucmVuZGVyZXIoKTsgfQogICAgIElubGluZUl0ZXJhdG9y
IGxpbmVCcmVhaygpIHsgcmV0dXJuIG1fbGluZUJyZWFrOyB9CiAgICAgSW5saW5lSXRlcmF0b3Im
IGxpbmVCcmVha1JlZigpIHtyZXR1cm4gbV9saW5lQnJlYWs7IH0KICAgICBMaW5lV2lkdGgmIGxp
bmVXaWR0aCgpIHsgcmV0dXJuIG1fd2lkdGg7IH0KQEAgLTMxMCwyMiArMzEwLDIyIEBAIGlubGlu
ZSB2b2lkIEJyZWFraW5nQ29udGV4dDo6aW5pdGlhbGl6ZUZvckN1cnJlbnRPYmplY3QoKQogewog
ICAgIG1faGFkVW5jb21taXR0ZWRXaWR0aEJlZm9yZUN1cnJlbnQgPSAhIW1fd2lkdGgudW5jb21t
aXR0ZWRXaWR0aCgpOwogCi0gICAgbV9jdXJyZW50U3R5bGUgPSAmbV9jdXJyZW50Lm1fb2JqLT5z
dHlsZSgpOworICAgIG1fY3VycmVudFN0eWxlID0gJm1fY3VycmVudC5yZW5kZXJlcigpLT5zdHls
ZSgpOwogCiAgICAgQVNTRVJUKG1fY3VycmVudFN0eWxlKTsKIAotICAgIG1fbmV4dE9iamVjdCA9
IGJpZGlOZXh0U2tpcHBpbmdFbXB0eUlubGluZXMobV9ibG9jaywgbV9jdXJyZW50Lm1fb2JqKTsK
LSAgICBpZiAobV9uZXh0T2JqZWN0ICYmIG1fbmV4dE9iamVjdC0+cGFyZW50KCkgJiYgIW1fbmV4
dE9iamVjdC0+cGFyZW50KCktPmlzRGVzY2VuZGFudE9mKG1fY3VycmVudC5tX29iai0+cGFyZW50
KCkpKQorICAgIG1fbmV4dE9iamVjdCA9IGJpZGlOZXh0U2tpcHBpbmdFbXB0eUlubGluZXMobV9i
bG9jaywgbV9jdXJyZW50LnJlbmRlcmVyKCkpOworICAgIGlmIChtX25leHRPYmplY3QgJiYgbV9u
ZXh0T2JqZWN0LT5wYXJlbnQoKSAmJiAhbV9uZXh0T2JqZWN0LT5wYXJlbnQoKS0+aXNEZXNjZW5k
YW50T2YobV9jdXJyZW50LnJlbmRlcmVyKCktPnBhcmVudCgpKSkKICAgICAgICAgbV9pbmNsdWRl
RW5kV2lkdGggPSB0cnVlOwogCi0gICAgbV9jdXJyV1MgPSBtX2N1cnJlbnQubV9vYmotPmlzUmVw
bGFjZWQoKSA/IG1fY3VycmVudC5tX29iai0+cGFyZW50KCktPnN0eWxlKCkud2hpdGVTcGFjZSgp
IDogbV9jdXJyZW50U3R5bGUtPndoaXRlU3BhY2UoKTsKKyAgICBtX2N1cnJXUyA9IG1fY3VycmVu
dC5yZW5kZXJlcigpLT5pc1JlcGxhY2VkKCkgPyBtX2N1cnJlbnQucmVuZGVyZXIoKS0+cGFyZW50
KCktPnN0eWxlKCkud2hpdGVTcGFjZSgpIDogbV9jdXJyZW50U3R5bGUtPndoaXRlU3BhY2UoKTsK
ICAgICBtX2xhc3RXUyA9IG1fbGFzdE9iamVjdC0+aXNSZXBsYWNlZCgpID8gbV9sYXN0T2JqZWN0
LT5wYXJlbnQoKS0+c3R5bGUoKS53aGl0ZVNwYWNlKCkgOiBtX2xhc3RPYmplY3QtPnN0eWxlKCku
d2hpdGVTcGFjZSgpOwogCiAgICAgbV9hdXRvV3JhcCA9IFJlbmRlclN0eWxlOjphdXRvV3JhcCht
X2N1cnJXUyk7CiAgICAgbV9hdXRvV3JhcFdhc0V2ZXJUcnVlT25MaW5lID0gbV9hdXRvV3JhcFdh
c0V2ZXJUcnVlT25MaW5lIHx8IG1fYXV0b1dyYXA7CiAKICNpZiBFTkFCTEUoU1ZHKQotICAgIG1f
cHJlc2VydmVzTmV3bGluZSA9IG1fY3VycmVudC5tX29iai0+aXNTVkdJbmxpbmVUZXh0KCkgPyBm
YWxzZSA6IFJlbmRlclN0eWxlOjpwcmVzZXJ2ZU5ld2xpbmUobV9jdXJyV1MpOworICAgIG1fcHJl
c2VydmVzTmV3bGluZSA9IG1fY3VycmVudC5yZW5kZXJlcigpLT5pc1NWR0lubGluZVRleHQoKSA/
IGZhbHNlIDogUmVuZGVyU3R5bGU6OnByZXNlcnZlTmV3bGluZShtX2N1cnJXUyk7CiAjZWxzZQog
ICAgIG1fcHJlc2VydmVzTmV3bGluZSA9IFJlbmRlclN0eWxlOjpwcmVzZXJ2ZU5ld2xpbmUobV9j
dXJyV1MpOwogI2VuZGlmCkBAIC0zNDcsNyArMzQ3LDcgQEAgaW5saW5lIHZvaWQgQnJlYWtpbmdD
b250ZXh0OjppbmNyZW1lbnQoKQogaW5saW5lIHZvaWQgQnJlYWtpbmdDb250ZXh0OjpoYW5kbGVC
UihFQ2xlYXImIGNsZWFyKQogewogICAgIGlmIChtX3dpZHRoLmZpdHNPbkxpbmUoKSkgewotICAg
ICAgICBSZW5kZXJPYmplY3QqIGJyID0gbV9jdXJyZW50Lm1fb2JqOworICAgICAgICBSZW5kZXJP
YmplY3QqIGJyID0gbV9jdXJyZW50LnJlbmRlcmVyKCk7CiAgICAgICAgIG1fbGluZUJyZWFrLm1v
dmVUb1N0YXJ0T2YoYnIpOwogICAgICAgICBtX2xpbmVCcmVhay5pbmNyZW1lbnQoKTsKIApAQCAt
MzcwLDcgKzM3MCw3IEBAIGlubGluZSB2b2lkIEJyZWFraW5nQ29udGV4dDo6aGFuZGxlQlIoRUNs
ZWFyJiBjbGVhcikKICAgICAgICAgLy8gY29sbGFwc2VkIGF3YXkgc28gdGhhdCBpdCBkb2Vzbid0
IHB1c2ggdGhlIHRleHQgb3V0IGZyb20gdGhlIGNvbnRhaW5lcidzIHJpZ2h0LWhhbmQgZWRnZS4K
ICAgICAgICAgLy8gRklYTUU6IERvIHRoaXMgcmVnYXJkbGVzcyBvZiB0aGUgY29udGFpbmVyJ3Mg
YWxpZ25tZW50IC0gd2lsbCByZXF1aXJlIHJlYmFzZWxpbmluZyBhIGxvdCBvZiB0ZXN0IHJlc3Vs
dHMuCiAgICAgICAgIGVsc2UgaWYgKG1faWdub3JpbmdTcGFjZXMgJiYgKG1fYmxvY2tTdHlsZS50
ZXh0QWxpZ24oKSA9PSBSSUdIVCB8fCBtX2Jsb2NrU3R5bGUudGV4dEFsaWduKCkgPT0gV0VCS0lU
X1JJR0hUKSkKLSAgICAgICAgICAgIHN0b3BJZ25vcmluZ1NwYWNlcyhtX2xpbmVNaWRwb2ludFN0
YXRlLCBJbmxpbmVJdGVyYXRvcigwLCBtX2N1cnJlbnQubV9vYmosIG1fY3VycmVudC5tX3Bvcykp
OworICAgICAgICAgICAgc3RvcElnbm9yaW5nU3BhY2VzKG1fbGluZU1pZHBvaW50U3RhdGUsIElu
bGluZUl0ZXJhdG9yKDAsIG1fY3VycmVudC5yZW5kZXJlcigpLCBtX2N1cnJlbnQubV9wb3MpKTsK
IAogICAgICAgICBpZiAoIW1fbGluZUluZm8uaXNFbXB0eSgpKQogICAgICAgICAgICAgY2xlYXIg
PSBtX2N1cnJlbnRTdHlsZS0+Y2xlYXIoKTsKQEAgLTQyOSw3ICs0MjksNyBAQCBpbmxpbmUgdm9p
ZCBCcmVha2luZ0NvbnRleHQ6OmhhbmRsZU91dE9mRmxvd1Bvc2l0aW9uZWQoVmVjdG9yPFJlbmRl
ckJveCo+JiBwb3NpdAogewogICAgIC8vIElmIG91ciBvcmlnaW5hbCBkaXNwbGF5IHdhc24ndCBh
biBpbmxpbmUgdHlwZSwgdGhlbiB3ZSBjYW4KICAgICAvLyBnbyBhaGVhZCBhbmQgZGV0ZXJtaW5l
IG91ciBzdGF0aWMgaW5saW5lIHBvc2l0aW9uIG5vdy4KLSAgICBSZW5kZXJCb3gqIGJveCA9IHRv
UmVuZGVyQm94KG1fY3VycmVudC5tX29iaik7CisgICAgUmVuZGVyQm94KiBib3ggPSB0b1JlbmRl
ckJveChtX2N1cnJlbnQucmVuZGVyZXIoKSk7CiAgICAgYm9vbCBpc0lubGluZVR5cGUgPSBib3gt
PnN0eWxlKCkuaXNPcmlnaW5hbERpc3BsYXlJbmxpbmVUeXBlKCk7CiAgICAgaWYgKCFpc0lubGlu
ZVR5cGUpCiAgICAgICAgIG1fYmxvY2suc2V0U3RhdGljSW5saW5lUG9zaXRpb25Gb3JDaGlsZCgq
Ym94LCBtX2Jsb2NrLmxvZ2ljYWxIZWlnaHQoKSwgbV9ibG9jay5zdGFydE9mZnNldEZvckNvbnRl
bnQobV9ibG9jay5sb2dpY2FsSGVpZ2h0KCkpKTsKQEAgLTQ1NSw3ICs0NTUsNyBAQCBpbmxpbmUg
dm9pZCBCcmVha2luZ0NvbnRleHQ6OmhhbmRsZU91dE9mRmxvd1Bvc2l0aW9uZWQoVmVjdG9yPFJl
bmRlckJveCo+JiBwb3NpdAogCiBpbmxpbmUgdm9pZCBCcmVha2luZ0NvbnRleHQ6OmhhbmRsZUZs
b2F0KCkKIHsKLSAgICBSZW5kZXJCb3gmIGZsb2F0Qm94ID0gdG9SZW5kZXJCb3goKm1fY3VycmVu
dC5tX29iaik7CisgICAgUmVuZGVyQm94JiBmbG9hdEJveCA9IHRvUmVuZGVyQm94KCptX2N1cnJl
bnQucmVuZGVyZXIoKSk7CiAgICAgRmxvYXRpbmdPYmplY3QqIGZsb2F0aW5nT2JqZWN0ID0gbV9i
bG9jay5pbnNlcnRGbG9hdGluZ09iamVjdChmbG9hdEJveCk7CiAgICAgLy8gY2hlY2sgaWYgaXQg
Zml0cyBpbiB0aGUgY3VycmVudCBsaW5lLgogICAgIC8vIElmIGl0IGRvZXMsIHBvc2l0aW9uIGl0
IG5vdywgb3RoZXJ3aXNlLCBwb3NpdGlvbgpAQCAtNDYzLDcgKzQ2Myw3IEBAIGlubGluZSB2b2lk
IEJyZWFraW5nQ29udGV4dDo6aGFuZGxlRmxvYXQoKQogICAgIC8vIEZJWE1FOiBCdWcgMTEwMzcy
OiBQcm9wZXJseSBwb3NpdGlvbiBtdWx0aXBsZSBzdGFja2VkIGZsb2F0cyB3aXRoIG5vbi1yZWN0
YW5ndWxhciBzaGFwZSBvdXRzaWRlLgogICAgIGlmIChtX2Zsb2F0c0ZpdE9uTGluZSAmJiBtX3dp
ZHRoLmZpdHNPbkxpbmVFeGNsdWRpbmdUcmFpbGluZ1doaXRlc3BhY2UobV9ibG9jay5sb2dpY2Fs
V2lkdGhGb3JGbG9hdChmbG9hdGluZ09iamVjdCkpKSB7CiAgICAgICAgIG1fYmxvY2sucG9zaXRp
b25OZXdGbG9hdE9uTGluZShmbG9hdGluZ09iamVjdCwgbV9sYXN0RmxvYXRGcm9tUHJldmlvdXNM
aW5lLCBtX2xpbmVJbmZvLCBtX3dpZHRoKTsKLSAgICAgICAgaWYgKG1fbGluZUJyZWFrLm1fb2Jq
ID09IG1fY3VycmVudC5tX29iaikgeworICAgICAgICBpZiAobV9saW5lQnJlYWsucmVuZGVyZXIo
KSA9PSBtX2N1cnJlbnQucmVuZGVyZXIoKSkgewogICAgICAgICAgICAgQVNTRVJUKCFtX2xpbmVC
cmVhay5tX3Bvcyk7CiAgICAgICAgICAgICBtX2xpbmVCcmVhay5pbmNyZW1lbnQoKTsKICAgICAg
ICAgfQpAQCAtNDk1LDcgKzQ5NSw3IEBAIGlubGluZSBib29sIHNob3VsZFNraXBXaGl0ZXNwYWNl
QWZ0ZXJTdGFydE9iamVjdChSZW5kZXJCbG9ja0Zsb3cmIGJsb2NrLCBSZW5kZXJPCiAKIGlubGlu
ZSB2b2lkIEJyZWFraW5nQ29udGV4dDo6aGFuZGxlRW1wdHlJbmxpbmUoKQogewotICAgIFJlbmRl
cklubGluZSYgZmxvd0JveCA9IHRvUmVuZGVySW5saW5lKCptX2N1cnJlbnQubV9vYmopOworICAg
IFJlbmRlcklubGluZSYgZmxvd0JveCA9IHRvUmVuZGVySW5saW5lKCptX2N1cnJlbnQucmVuZGVy
ZXIoKSk7CiAKICAgICAvLyBUaGlzIHNob3VsZCBvbmx5IGVuZCB1cCBiZWluZyBjYWxsZWQgb24g
ZW1wdHkgaW5saW5lcwogICAgIEFTU0VSVChpc0VtcHR5SW5saW5lKGZsb3dCb3gpKTsKQEAgLTUx
Miw5ICs1MTIsOSBAQCBpbmxpbmUgdm9pZCBCcmVha2luZ0NvbnRleHQ6OmhhbmRsZUVtcHR5SW5s
aW5lKCkKICAgICAgICAgICAgIG1fbGluZUluZm8uc2V0RW1wdHkoZmFsc2UsICZtX2Jsb2NrLCAm
bV93aWR0aCk7CiAgICAgICAgIGlmIChtX2lnbm9yaW5nU3BhY2VzKSB7CiAgICAgICAgICAgICBt
X3RyYWlsaW5nT2JqZWN0cy5jbGVhcigpOwotICAgICAgICAgICAgZW5zdXJlTGluZUJveEluc2lk
ZUlnbm9yZWRTcGFjZXMobV9saW5lTWlkcG9pbnRTdGF0ZSwgbV9jdXJyZW50Lm1fb2JqKTsKLSAg
ICAgICAgfSBlbHNlIGlmIChtX2Jsb2NrU3R5bGUuY29sbGFwc2VXaGl0ZVNwYWNlKCkgJiYgbV9y
ZXNvbHZlci5wb3NpdGlvbigpLm1fb2JqID09IG1fY3VycmVudC5tX29iagotICAgICAgICAgICAg
JiYgc2hvdWxkU2tpcFdoaXRlc3BhY2VBZnRlclN0YXJ0T2JqZWN0KG1fYmxvY2ssIG1fY3VycmVu
dC5tX29iaiwgbV9saW5lTWlkcG9pbnRTdGF0ZSkpIHsKKyAgICAgICAgICAgIGVuc3VyZUxpbmVC
b3hJbnNpZGVJZ25vcmVkU3BhY2VzKG1fbGluZU1pZHBvaW50U3RhdGUsIG1fY3VycmVudC5yZW5k
ZXJlcigpKTsKKyAgICAgICAgfSBlbHNlIGlmIChtX2Jsb2NrU3R5bGUuY29sbGFwc2VXaGl0ZVNw
YWNlKCkgJiYgbV9yZXNvbHZlci5wb3NpdGlvbigpLnJlbmRlcmVyKCkgPT0gbV9jdXJyZW50LnJl
bmRlcmVyKCkKKyAgICAgICAgICAgICYmIHNob3VsZFNraXBXaGl0ZXNwYWNlQWZ0ZXJTdGFydE9i
amVjdChtX2Jsb2NrLCBtX2N1cnJlbnQucmVuZGVyZXIoKSwgbV9saW5lTWlkcG9pbnRTdGF0ZSkp
IHsKICAgICAgICAgICAgIC8vIExpa2Ugd2l0aCBsaXN0IG1hcmtlcnMsIHdlIHN0YXJ0IGlnbm9y
aW5nIHNwYWNlcyB0byBtYWtlIHN1cmUgdGhhdCBhbnkKICAgICAgICAgICAgIC8vIGFkZGl0aW9u
YWwgc3BhY2VzIHdlIHNlZSB3aWxsIGJlIGRpc2NhcmRlZC4KICAgICAgICAgICAgIG1fY3VycmVu
dENoYXJhY3RlcklzU3BhY2UgPSB0cnVlOwpAQCAtNTI0LDI0ICs1MjQsMjQgQEAgaW5saW5lIHZv
aWQgQnJlYWtpbmdDb250ZXh0OjpoYW5kbGVFbXB0eUlubGluZSgpCiAgICAgICAgICAgICBtX3Ry
YWlsaW5nT2JqZWN0cy5hcHBlbmRCb3hJZk5lZWRlZCgmZmxvd0JveCk7CiAgICAgfQogCi0gICAg
bV93aWR0aC5hZGRVbmNvbW1pdHRlZFdpZHRoKGlubGluZUxvZ2ljYWxXaWR0aChtX2N1cnJlbnQu
bV9vYmopICsgYm9yZGVyUGFkZGluZ01hcmdpblN0YXJ0KGZsb3dCb3gpICsgYm9yZGVyUGFkZGlu
Z01hcmdpbkVuZChmbG93Qm94KSk7CisgICAgbV93aWR0aC5hZGRVbmNvbW1pdHRlZFdpZHRoKGlu
bGluZUxvZ2ljYWxXaWR0aChtX2N1cnJlbnQucmVuZGVyZXIoKSkgKyBib3JkZXJQYWRkaW5nTWFy
Z2luU3RhcnQoZmxvd0JveCkgKyBib3JkZXJQYWRkaW5nTWFyZ2luRW5kKGZsb3dCb3gpKTsKIH0K
IAogaW5saW5lIHZvaWQgQnJlYWtpbmdDb250ZXh0OjpoYW5kbGVSZXBsYWNlZCgpCiB7Ci0gICAg
UmVuZGVyQm94JiByZXBsYWNlZEJveCA9IHRvUmVuZGVyQm94KCptX2N1cnJlbnQubV9vYmopOwor
ICAgIFJlbmRlckJveCYgcmVwbGFjZWRCb3ggPSB0b1JlbmRlckJveCgqbV9jdXJyZW50LnJlbmRl
cmVyKCkpOwogCiAgICAgaWYgKG1fYXRTdGFydCkKICAgICAgICAgbV93aWR0aC51cGRhdGVBdmFp
bGFibGVXaWR0aChyZXBsYWNlZEJveC5sb2dpY2FsSGVpZ2h0KCkpOwogCiAgICAgLy8gQnJlYWsg
b24gcmVwbGFjZWQgZWxlbWVudHMgaWYgZWl0aGVyIGhhcyBub3JtYWwgd2hpdGUtc3BhY2UuCi0g
ICAgaWYgKChtX2F1dG9XcmFwIHx8IFJlbmRlclN0eWxlOjphdXRvV3JhcChtX2xhc3RXUykpICYm
ICghbV9jdXJyZW50Lm1fb2JqLT5pc0ltYWdlKCkgfHwgbV9hbGxvd0ltYWdlc1RvQnJlYWspKSB7
CisgICAgaWYgKChtX2F1dG9XcmFwIHx8IFJlbmRlclN0eWxlOjphdXRvV3JhcChtX2xhc3RXUykp
ICYmICghbV9jdXJyZW50LnJlbmRlcmVyKCktPmlzSW1hZ2UoKSB8fCBtX2FsbG93SW1hZ2VzVG9C
cmVhaykpIHsKICAgICAgICAgbV93aWR0aC5jb21taXQoKTsKLSAgICAgICAgbV9saW5lQnJlYWsu
bW92ZVRvU3RhcnRPZihtX2N1cnJlbnQubV9vYmopOworICAgICAgICBtX2xpbmVCcmVhay5tb3Zl
VG9TdGFydE9mKG1fY3VycmVudC5yZW5kZXJlcigpKTsKICAgICB9CiAKICAgICBpZiAobV9pZ25v
cmluZ1NwYWNlcykKLSAgICAgICAgc3RvcElnbm9yaW5nU3BhY2VzKG1fbGluZU1pZHBvaW50U3Rh
dGUsIElubGluZUl0ZXJhdG9yKDAsIG1fY3VycmVudC5tX29iaiwgMCkpOworICAgICAgICBzdG9w
SWdub3JpbmdTcGFjZXMobV9saW5lTWlkcG9pbnRTdGF0ZSwgSW5saW5lSXRlcmF0b3IoMCwgbV9j
dXJyZW50LnJlbmRlcmVyKCksIDApKTsKIAogICAgIG1fbGluZUluZm8uc2V0RW1wdHkoZmFsc2Us
ICZtX2Jsb2NrLCAmbV93aWR0aCk7CiAgICAgbV9pZ25vcmluZ1NwYWNlcyA9IGZhbHNlOwpAQCAt
NTUxLDIxICs1NTEsMjEgQEAgaW5saW5lIHZvaWQgQnJlYWtpbmdDb250ZXh0OjpoYW5kbGVSZXBs
YWNlZCgpCiAKICAgICAvLyBPcHRpbWl6ZSBmb3IgYSBjb21tb24gY2FzZS4gSWYgd2UgY2FuJ3Qg
ZmluZCB3aGl0ZXNwYWNlIGFmdGVyIHRoZSBsaXN0CiAgICAgLy8gaXRlbSwgdGhlbiB0aGlzIGlz
IGFsbCBtb290LgotICAgIExheW91dFVuaXQgcmVwbGFjZWRMb2dpY2FsV2lkdGggPSBtX2Jsb2Nr
LmxvZ2ljYWxXaWR0aEZvckNoaWxkKHJlcGxhY2VkQm94KSArIG1fYmxvY2subWFyZ2luU3RhcnRG
b3JDaGlsZChyZXBsYWNlZEJveCkgKyBtX2Jsb2NrLm1hcmdpbkVuZEZvckNoaWxkKHJlcGxhY2Vk
Qm94KSArIGlubGluZUxvZ2ljYWxXaWR0aChtX2N1cnJlbnQubV9vYmopOwotICAgIGlmIChtX2N1
cnJlbnQubV9vYmotPmlzTGlzdE1hcmtlcigpKSB7Ci0gICAgICAgIGlmIChtX2Jsb2NrU3R5bGUu
Y29sbGFwc2VXaGl0ZVNwYWNlKCkgJiYgc2hvdWxkU2tpcFdoaXRlc3BhY2VBZnRlclN0YXJ0T2Jq
ZWN0KG1fYmxvY2ssIG1fY3VycmVudC5tX29iaiwgbV9saW5lTWlkcG9pbnRTdGF0ZSkpIHsKKyAg
ICBMYXlvdXRVbml0IHJlcGxhY2VkTG9naWNhbFdpZHRoID0gbV9ibG9jay5sb2dpY2FsV2lkdGhG
b3JDaGlsZChyZXBsYWNlZEJveCkgKyBtX2Jsb2NrLm1hcmdpblN0YXJ0Rm9yQ2hpbGQocmVwbGFj
ZWRCb3gpICsgbV9ibG9jay5tYXJnaW5FbmRGb3JDaGlsZChyZXBsYWNlZEJveCkgKyBpbmxpbmVM
b2dpY2FsV2lkdGgobV9jdXJyZW50LnJlbmRlcmVyKCkpOworICAgIGlmIChtX2N1cnJlbnQucmVu
ZGVyZXIoKS0+aXNMaXN0TWFya2VyKCkpIHsKKyAgICAgICAgaWYgKG1fYmxvY2tTdHlsZS5jb2xs
YXBzZVdoaXRlU3BhY2UoKSAmJiBzaG91bGRTa2lwV2hpdGVzcGFjZUFmdGVyU3RhcnRPYmplY3Qo
bV9ibG9jaywgbV9jdXJyZW50LnJlbmRlcmVyKCksIG1fbGluZU1pZHBvaW50U3RhdGUpKSB7CiAg
ICAgICAgICAgICAvLyBMaWtlIHdpdGggaW5saW5lIGZsb3dzLCB3ZSBzdGFydCBpZ25vcmluZyBz
cGFjZXMgdG8gbWFrZSBzdXJlIHRoYXQgYW55CiAgICAgICAgICAgICAvLyBhZGRpdGlvbmFsIHNw
YWNlcyB3ZSBzZWUgd2lsbCBiZSBkaXNjYXJkZWQuCiAgICAgICAgICAgICBtX2N1cnJlbnRDaGFy
YWN0ZXJJc1NwYWNlID0gdHJ1ZTsKICAgICAgICAgICAgIG1fY3VycmVudENoYXJhY3RlcklzV1Mg
PSBmYWxzZTsKICAgICAgICAgICAgIG1faWdub3JpbmdTcGFjZXMgPSB0cnVlOwogICAgICAgICB9
Ci0gICAgICAgIGlmICh0b1JlbmRlckxpc3RNYXJrZXIoKm1fY3VycmVudC5tX29iaikuaXNJbnNp
ZGUoKSkKKyAgICAgICAgaWYgKHRvUmVuZGVyTGlzdE1hcmtlcigqbV9jdXJyZW50LnJlbmRlcmVy
KCkpLmlzSW5zaWRlKCkpCiAgICAgICAgICAgICBtX3dpZHRoLmFkZFVuY29tbWl0dGVkV2lkdGgo
cmVwbGFjZWRMb2dpY2FsV2lkdGgpOwogICAgIH0gZWxzZQogICAgICAgICBtX3dpZHRoLmFkZFVu
Y29tbWl0dGVkV2lkdGgocmVwbGFjZWRMb2dpY2FsV2lkdGgpOwotICAgIGlmIChtX2N1cnJlbnQu
bV9vYmotPmlzUnVieVJ1bigpKQotICAgICAgICBtX3dpZHRoLmFwcGx5T3ZlcmhhbmcodG9SZW5k
ZXJSdWJ5UnVuKG1fY3VycmVudC5tX29iaiksIG1fbGFzdE9iamVjdCwgbV9uZXh0T2JqZWN0KTsK
KyAgICBpZiAobV9jdXJyZW50LnJlbmRlcmVyKCktPmlzUnVieVJ1bigpKQorICAgICAgICBtX3dp
ZHRoLmFwcGx5T3ZlcmhhbmcodG9SZW5kZXJSdWJ5UnVuKG1fY3VycmVudC5yZW5kZXJlcigpKSwg
bV9sYXN0T2JqZWN0LCBtX25leHRPYmplY3QpOwogICAgIC8vIFVwZGF0ZSBwcmlvciBsaW5lIGJy
ZWFrIGNvbnRleHQgY2hhcmFjdGVycywgdXNpbmcgVStGRkZEIChPQkpFQ1QgUkVQTEFDRU1FTlQg
Q0hBUkFDVEVSKSBmb3IgcmVwbGFjZWQgZWxlbWVudC4KICAgICBtX3JlbmRlclRleHRJbmZvLm1f
bGluZUJyZWFrSXRlcmF0b3IudXBkYXRlUHJpb3JDb250ZXh0KHJlcGxhY2VtZW50Q2hhcmFjdGVy
KTsKIH0KQEAgLTYyNCw3ICs2MjQsNyBAQCBpbmxpbmUgdm9pZCB1cGRhdGVTZWdtZW50c0ZvclNo
YXBlcyhSZW5kZXJCbG9ja0Zsb3cmIGJsb2NrLCBjb25zdCBGbG9hdGluZ09iamVjdAogCiBpbmxp
bmUgYm9vbCBpdGVyYXRvcklzQmV5b25kRW5kT2ZSZW5kZXJDb21iaW5lVGV4dChjb25zdCBJbmxp
bmVJdGVyYXRvciYgaXRlciwgUmVuZGVyQ29tYmluZVRleHQmIHJlbmRlcmVyKQogewotICAgIHJl
dHVybiBpdGVyLm1fb2JqID09ICZyZW5kZXJlciAmJiBpdGVyLm1fcG9zID49IHJlbmRlcmVyLnRl
eHRMZW5ndGgoKTsKKyAgICByZXR1cm4gaXRlci5yZW5kZXJlcigpID09ICZyZW5kZXJlciAmJiBp
dGVyLm1fcG9zID49IHJlbmRlcmVyLnRleHRMZW5ndGgoKTsKIH0KIAogaW5saW5lIHZvaWQgbmV4
dENoYXJhY3RlcihVQ2hhciYgY3VycmVudENoYXJhY3RlciwgVUNoYXImIGxhc3RDaGFyYWN0ZXIs
IFVDaGFyJiBzZWNvbmRUb0xhc3RDaGFyYWN0ZXIpCkBAIC02NzIsOSArNjcyLDkgQEAgQUxXQVlT
X0lOTElORSBmbG9hdCB0ZXh0V2lkdGgoUmVuZGVyVGV4dCogdGV4dCwgdW5zaWduZWQgZnJvbSwg
dW5zaWduZWQgbGVuLCBjb24KIC8vIEFkZGluZyBhIHBhaXIgb2YgbWlkcG9pbnRzIGJlZm9yZSBh
IGNoYXJhY3RlciB3aWxsIHNwbGl0IGl0IG91dCBpbnRvIGEgbmV3IGxpbmUgYm94LgogaW5saW5l
IHZvaWQgZW5zdXJlQ2hhcmFjdGVyR2V0c0xpbmVCb3goTGluZU1pZHBvaW50U3RhdGUmIGxpbmVN
aWRwb2ludFN0YXRlLCBJbmxpbmVJdGVyYXRvciYgdGV4dFBhcmFncmFwaFNlcGFyYXRvcikKIHsK
LSAgICBJbmxpbmVJdGVyYXRvciBtaWRwb2ludCgwLCB0ZXh0UGFyYWdyYXBoU2VwYXJhdG9yLm1f
b2JqLCB0ZXh0UGFyYWdyYXBoU2VwYXJhdG9yLm1fcG9zKTsKLSAgICBzdGFydElnbm9yaW5nU3Bh
Y2VzKGxpbmVNaWRwb2ludFN0YXRlLCBJbmxpbmVJdGVyYXRvcigwLCB0ZXh0UGFyYWdyYXBoU2Vw
YXJhdG9yLm1fb2JqLCB0ZXh0UGFyYWdyYXBoU2VwYXJhdG9yLm1fcG9zIC0gMSkpOwotICAgIHN0
b3BJZ25vcmluZ1NwYWNlcyhsaW5lTWlkcG9pbnRTdGF0ZSwgSW5saW5lSXRlcmF0b3IoMCwgdGV4
dFBhcmFncmFwaFNlcGFyYXRvci5tX29iaiwgdGV4dFBhcmFncmFwaFNlcGFyYXRvci5tX3Bvcykp
OworICAgIElubGluZUl0ZXJhdG9yIG1pZHBvaW50KDAsIHRleHRQYXJhZ3JhcGhTZXBhcmF0b3Iu
cmVuZGVyZXIoKSwgdGV4dFBhcmFncmFwaFNlcGFyYXRvci5tX3Bvcyk7CisgICAgc3RhcnRJZ25v
cmluZ1NwYWNlcyhsaW5lTWlkcG9pbnRTdGF0ZSwgSW5saW5lSXRlcmF0b3IoMCwgdGV4dFBhcmFn
cmFwaFNlcGFyYXRvci5yZW5kZXJlcigpLCB0ZXh0UGFyYWdyYXBoU2VwYXJhdG9yLm1fcG9zIC0g
MSkpOworICAgIHN0b3BJZ25vcmluZ1NwYWNlcyhsaW5lTWlkcG9pbnRTdGF0ZSwgSW5saW5lSXRl
cmF0b3IoMCwgdGV4dFBhcmFncmFwaFNlcGFyYXRvci5yZW5kZXJlcigpLCB0ZXh0UGFyYWdyYXBo
U2VwYXJhdG9yLm1fcG9zKSk7CiB9CiAKIGlubGluZSB2b2lkIHRyeUh5cGhlbmF0aW5nKFJlbmRl
clRleHQqIHRleHQsIGNvbnN0IEZvbnQmIGZvbnQsIGNvbnN0IEF0b21pY1N0cmluZyYgbG9jYWxl
SWRlbnRpZmllciwgdW5zaWduZWQgY29uc2VjdXRpdmVIeXBoZW5hdGVkTGluZXMsIGludCBjb25z
ZWN1dGl2ZUh5cGhlbmF0ZWRMaW5lc0xpbWl0LCBpbnQgbWluaW11bVByZWZpeExpbWl0LCBpbnQg
bWluaW11bVN1ZmZpeExpbWl0LCB1bnNpZ25lZCBsYXN0U3BhY2UsIHVuc2lnbmVkIHBvcywgZmxv
YXQgeFBvcywgaW50IGF2YWlsYWJsZVdpZHRoLCBib29sIGlzRml4ZWRQaXRjaCwgYm9vbCBjb2xs
YXBzZVdoaXRlU3BhY2UsIGludCBsYXN0U3BhY2VXb3JkU3BhY2luZywgSW5saW5lSXRlcmF0b3Im
IGxpbmVCcmVhaywgaW50IG5leHRCcmVha2FibGUsIGJvb2wmIGh5cGhlbmF0ZWQpCkBAIC03NTAs
NyArNzUwLDcgQEAgaW5saW5lIGJvb2wgQnJlYWtpbmdDb250ZXh0OjpoYW5kbGVUZXh0KFdvcmRN
ZWFzdXJlbWVudHMmIHdvcmRNZWFzdXJlbWVudHMsIGJvb2wKICAgICBpZiAoIW1fY3VycmVudC5t
X3BvcykKICAgICAgICAgbV9hcHBsaWVkU3RhcnRXaWR0aCA9IGZhbHNlOwogCi0gICAgUmVuZGVy
VGV4dCogcmVuZGVyVGV4dCA9IHRvUmVuZGVyVGV4dChtX2N1cnJlbnQubV9vYmopOworICAgIFJl
bmRlclRleHQqIHJlbmRlclRleHQgPSB0b1JlbmRlclRleHQobV9jdXJyZW50LnJlbmRlcmVyKCkp
OwogCiAjaWYgRU5BQkxFKFNWRykKICAgICBib29sIGlzU1ZHVGV4dCA9IHJlbmRlclRleHQtPmlz
U1ZHSW5saW5lVGV4dCgpOwpAQCAtNzU5LDEwICs3NTksMTAgQEAgaW5saW5lIGJvb2wgQnJlYWtp
bmdDb250ZXh0OjpoYW5kbGVUZXh0KFdvcmRNZWFzdXJlbWVudHMmIHdvcmRNZWFzdXJlbWVudHMs
IGJvb2wKICAgICAvLyBJZiB3ZSBoYXZlIGxlZnQgYSBuby13cmFwIGlubGluZSBhbmQgZW50ZXJl
ZCBhbiBhdXRvd3JhcCBpbmxpbmUgd2hpbGUgaWdub3Jpbmcgc3BhY2VzCiAgICAgLy8gdGhlbiB3
ZSBuZWVkIHRvIG1hcmsgdGhlIHN0YXJ0IG9mIHRoZSBhdXRvd3JhcCBpbmxpbmUgYXMgYSBwb3Rl
bnRpYWwgbGluZWJyZWFrIG5vdy4KICAgICBpZiAobV9hdXRvV3JhcCAmJiAhUmVuZGVyU3R5bGU6
OmF1dG9XcmFwKG1fbGFzdFdTKSAmJiBtX2lnbm9yaW5nU3BhY2VzKQotICAgICAgICBjb21taXRM
aW5lQnJlYWtBdEN1cnJlbnRXaWR0aChtX2N1cnJlbnQubV9vYmopOworICAgICAgICBjb21taXRM
aW5lQnJlYWtBdEN1cnJlbnRXaWR0aChtX2N1cnJlbnQucmVuZGVyZXIoKSk7CiAKLSAgICBpZiAo
cmVuZGVyVGV4dC0+c3R5bGUoKS5oYXNUZXh0Q29tYmluZSgpICYmIG1fY3VycmVudC5tX29iai0+
aXNDb21iaW5lVGV4dCgpICYmICF0b1JlbmRlckNvbWJpbmVUZXh0KCptX2N1cnJlbnQubV9vYmop
LmlzQ29tYmluZWQoKSkgewotICAgICAgICBSZW5kZXJDb21iaW5lVGV4dCYgY29tYmluZVJlbmRl
cmVyID0gdG9SZW5kZXJDb21iaW5lVGV4dCgqbV9jdXJyZW50Lm1fb2JqKTsKKyAgICBpZiAocmVu
ZGVyVGV4dC0+c3R5bGUoKS5oYXNUZXh0Q29tYmluZSgpICYmIG1fY3VycmVudC5yZW5kZXJlcigp
LT5pc0NvbWJpbmVUZXh0KCkgJiYgIXRvUmVuZGVyQ29tYmluZVRleHQoKm1fY3VycmVudC5yZW5k
ZXJlcigpKS5pc0NvbWJpbmVkKCkpIHsKKyAgICAgICAgUmVuZGVyQ29tYmluZVRleHQmIGNvbWJp
bmVSZW5kZXJlciA9IHRvUmVuZGVyQ29tYmluZVRleHQoKm1fY3VycmVudC5yZW5kZXJlcigpKTsK
ICAgICAgICAgY29tYmluZVJlbmRlcmVyLmNvbWJpbmVUZXh0KCk7CiAgICAgICAgIC8vIFRoZSBs
ZW5ndGggb2YgdGhlIHJlbmRlcmVyJ3MgdGV4dCBtYXkgaGF2ZSBjaGFuZ2VkLiBJbmNyZW1lbnQg
c3RhbGUgaXRlcmF0b3IgcG9zaXRpb25zCiAgICAgICAgIGlmIChpdGVyYXRvcklzQmV5b25kRW5k
T2ZSZW5kZXJDb21iaW5lVGV4dChtX2xpbmVCcmVhaywgY29tYmluZVJlbmRlcmVyKSkgewpAQCAt
NzgyLDcgKzc4Miw3IEBAIGlubGluZSBib29sIEJyZWFraW5nQ29udGV4dDo6aGFuZGxlVGV4dChX
b3JkTWVhc3VyZW1lbnRzJiB3b3JkTWVhc3VyZW1lbnRzLCBib29sCiAgICAgZmxvYXQgbGFzdFNw
YWNlV29yZFNwYWNpbmcgPSAwOwogICAgIGZsb2F0IHdvcmRTcGFjaW5nRm9yV29yZE1lYXN1cmVt
ZW50ID0gMDsKIAotICAgIGZsb2F0IHdyYXBXID0gbV93aWR0aC51bmNvbW1pdHRlZFdpZHRoKCkg
KyBpbmxpbmVMb2dpY2FsV2lkdGgobV9jdXJyZW50Lm1fb2JqLCAhbV9hcHBsaWVkU3RhcnRXaWR0
aCwgdHJ1ZSk7CisgICAgZmxvYXQgd3JhcFcgPSBtX3dpZHRoLnVuY29tbWl0dGVkV2lkdGgoKSAr
IGlubGluZUxvZ2ljYWxXaWR0aChtX2N1cnJlbnQucmVuZGVyZXIoKSwgIW1fYXBwbGllZFN0YXJ0
V2lkdGgsIHRydWUpOwogICAgIGZsb2F0IGNoYXJXaWR0aCA9IDA7CiAgICAgYm9vbCBicmVha05C
U1AgPSBtX2F1dG9XcmFwICYmIG1fY3VycmVudFN0eWxlLT5uYnNwTW9kZSgpID09IFNQQUNFOwog
ICAgIC8vIEF1dG8td3JhcHBpbmcgdGV4dCBzaG91bGQgd3JhcCBpbiB0aGUgbWlkZGxlIG9mIGEg
d29yZCBvbmx5IGlmIGl0IGNvdWxkIG5vdCB3cmFwIGJlZm9yZSB0aGUgd29yZCwKQEAgLTg1Niw3
ICs4NTYsNyBAQCBpbmxpbmUgYm9vbCBCcmVha2luZ0NvbnRleHQ6OmhhbmRsZVRleHQoV29yZE1l
YXN1cmVtZW50cyYgd29yZE1lYXN1cmVtZW50cywgYm9vbAogICAgICAgICAgICAgICAgICAgICBt
X2lnbm9yaW5nU3BhY2VzID0gZmFsc2U7CiAgICAgICAgICAgICAgICAgICAgIHdvcmRTcGFjaW5n
Rm9yV29yZE1lYXN1cmVtZW50ID0gMDsKICAgICAgICAgICAgICAgICAgICAgbGFzdFNwYWNlID0g
bV9jdXJyZW50Lm1fcG9zOyAvLyBlLmcuLCAiRm9vICAgIGdvbyIsIGRvbid0IGFkZCBpbiBhbnkg
b2YgdGhlIGlnbm9yZWQgc3BhY2VzLgotICAgICAgICAgICAgICAgICAgICBzdG9wSWdub3JpbmdT
cGFjZXMobV9saW5lTWlkcG9pbnRTdGF0ZSwgSW5saW5lSXRlcmF0b3IoMCwgbV9jdXJyZW50Lm1f
b2JqLCBtX2N1cnJlbnQubV9wb3MpKTsKKyAgICAgICAgICAgICAgICAgICAgc3RvcElnbm9yaW5n
U3BhY2VzKG1fbGluZU1pZHBvaW50U3RhdGUsIElubGluZUl0ZXJhdG9yKDAsIG1fY3VycmVudC5y
ZW5kZXJlcigpLCBtX2N1cnJlbnQubV9wb3MpKTsKICAgICAgICAgICAgICAgICAgICAgc3RvcHBl
ZElnbm9yaW5nU3BhY2VzID0gdHJ1ZTsKICAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAg
ICAgICAgICAgICAgICAvLyBKdXN0IGtlZXAgaWdub3JpbmcgdGhlc2Ugc3BhY2VzLgpAQCAtODkw
LDcgKzg5MCw3IEBAIGlubGluZSBib29sIEJyZWFraW5nQ29udGV4dDo6aGFuZGxlVGV4dChXb3Jk
TWVhc3VyZW1lbnRzJiB3b3JkTWVhc3VyZW1lbnRzLCBib29sCiAgICAgICAgICAgICAgICAgbV93
aWR0aC5zZXRUcmFpbGluZ1doaXRlc3BhY2VXaWR0aChhZGRpdGlvbmFsVGVtcFdpZHRoKTsKIAog
ICAgICAgICAgICAgaWYgKCFtX2FwcGxpZWRTdGFydFdpZHRoKSB7Ci0gICAgICAgICAgICAgICAg
bV93aWR0aC5hZGRVbmNvbW1pdHRlZFdpZHRoKGlubGluZUxvZ2ljYWxXaWR0aChtX2N1cnJlbnQu
bV9vYmosIHRydWUsIGZhbHNlKSk7CisgICAgICAgICAgICAgICAgbV93aWR0aC5hZGRVbmNvbW1p
dHRlZFdpZHRoKGlubGluZUxvZ2ljYWxXaWR0aChtX2N1cnJlbnQucmVuZGVyZXIoKSwgdHJ1ZSwg
ZmFsc2UpKTsKICAgICAgICAgICAgICAgICBtX2FwcGxpZWRTdGFydFdpZHRoID0gdHJ1ZTsKICAg
ICAgICAgICAgIH0KIApAQCAtOTE2LDcgKzkxNiw3IEBAIGlubGluZSBib29sIEJyZWFraW5nQ29u
dGV4dDo6aGFuZGxlVGV4dChXb3JkTWVhc3VyZW1lbnRzJiB3b3JkTWVhc3VyZW1lbnRzLCBib29s
CiAgICAgICAgICAgICAgICAgICAgIC8vIGFkZGl0aW9uYWwgd2hpdGVzcGFjZS4KICAgICAgICAg
ICAgICAgICAgICAgaWYgKCFtX3dpZHRoLmZpdHNPbkxpbmVJbmNsdWRpbmdFeHRyYVdpZHRoKGNo
YXJXaWR0aCkpIHsKICAgICAgICAgICAgICAgICAgICAgICAgIGxpbmVXYXNUb29XaWRlID0gdHJ1
ZTsKLSAgICAgICAgICAgICAgICAgICAgICAgIG1fbGluZUJyZWFrLm1vdmVUbyhtX2N1cnJlbnQu
bV9vYmosIG1fY3VycmVudC5tX3BvcywgbV9jdXJyZW50Lm1fbmV4dEJyZWFrYWJsZVBvc2l0aW9u
KTsKKyAgICAgICAgICAgICAgICAgICAgICAgIG1fbGluZUJyZWFrLm1vdmVUbyhtX2N1cnJlbnQu
cmVuZGVyZXIoKSwgbV9jdXJyZW50Lm1fcG9zLCBtX2N1cnJlbnQubV9uZXh0QnJlYWthYmxlUG9z
aXRpb24pOwogICAgICAgICAgICAgICAgICAgICAgICAgbV9saW5lQnJlYWtlci5za2lwVHJhaWxp
bmdXaGl0ZXNwYWNlKG1fbGluZUJyZWFrLCBtX2xpbmVJbmZvKTsKICAgICAgICAgICAgICAgICAg
ICAgfQogICAgICAgICAgICAgICAgIH0KQEAgLTkzNSw3ICs5MzUsNyBAQCBpbmxpbmUgYm9vbCBC
cmVha2luZ0NvbnRleHQ6OmhhbmRsZVRleHQoV29yZE1lYXN1cmVtZW50cyYgd29yZE1lYXN1cmVt
ZW50cywgYm9vbAogICAgICAgICAgICAgICAgICAgICAgICAgbV9saW5lSW5mby5zZXRQcmV2aW91
c0xpbmVCcm9rZUNsZWFubHkodHJ1ZSk7CiAgICAgICAgICAgICAgICAgICAgICAgICB3b3JkTWVh
c3VyZW1lbnQuZW5kT2Zmc2V0ID0gbV9saW5lQnJlYWsubV9wb3M7CiAgICAgICAgICAgICAgICAg
ICAgIH0KLSAgICAgICAgICAgICAgICAgICAgaWYgKG1fbGluZUJyZWFrLm1fb2JqICYmIG1fbGlu
ZUJyZWFrLm1fcG9zICYmIG1fbGluZUJyZWFrLm1fb2JqLT5pc1RleHQoKSAmJiB0b1JlbmRlclRl
eHQobV9saW5lQnJlYWsubV9vYmopLT50ZXh0TGVuZ3RoKCkgJiYgdG9SZW5kZXJUZXh0KG1fbGlu
ZUJyZWFrLm1fb2JqKS0+Y2hhcmFjdGVyQXQobV9saW5lQnJlYWsubV9wb3MgLSAxKSA9PSBzb2Z0
SHlwaGVuICYmIHN0eWxlLmh5cGhlbnMoKSAhPSBIeXBoZW5zTm9uZSkKKyAgICAgICAgICAgICAg
ICAgICAgaWYgKG1fbGluZUJyZWFrLnJlbmRlcmVyKCkgJiYgbV9saW5lQnJlYWsubV9wb3MgJiYg
bV9saW5lQnJlYWsucmVuZGVyZXIoKS0+aXNUZXh0KCkgJiYgdG9SZW5kZXJUZXh0KG1fbGluZUJy
ZWFrLnJlbmRlcmVyKCkpLT50ZXh0TGVuZ3RoKCkgJiYgdG9SZW5kZXJUZXh0KG1fbGluZUJyZWFr
LnJlbmRlcmVyKCkpLT5jaGFyYWN0ZXJBdChtX2xpbmVCcmVhay5tX3BvcyAtIDEpID09IHNvZnRI
eXBoZW4gJiYgc3R5bGUuaHlwaGVucygpICE9IEh5cGhlbnNOb25lKQogICAgICAgICAgICAgICAg
ICAgICAgICAgaHlwaGVuYXRlZCA9IHRydWU7CiAgICAgICAgICAgICAgICAgICAgIGlmIChtX2xp
bmVCcmVhay5tX3BvcyAmJiBtX2xpbmVCcmVhay5tX3BvcyAhPSAodW5zaWduZWQpd29yZE1lYXN1
cmVtZW50LmVuZE9mZnNldCAmJiAhd29yZE1lYXN1cmVtZW50LndpZHRoKSB7CiAgICAgICAgICAg
ICAgICAgICAgICAgICBpZiAoY2hhcldpZHRoKSB7CkBAIC05NjIsNyArOTYyLDcgQEAgaW5saW5l
IGJvb2wgQnJlYWtpbmdDb250ZXh0OjpoYW5kbGVUZXh0KFdvcmRNZWFzdXJlbWVudHMmIHdvcmRN
ZWFzdXJlbWVudHMsIGJvb2wKICAgICAgICAgICAgIGlmIChjID09ICdcbicgJiYgbV9wcmVzZXJ2
ZXNOZXdsaW5lKSB7CiAgICAgICAgICAgICAgICAgaWYgKCFzdG9wcGVkSWdub3JpbmdTcGFjZXMg
JiYgbV9jdXJyZW50Lm1fcG9zID4gMCkKICAgICAgICAgICAgICAgICAgICAgZW5zdXJlQ2hhcmFj
dGVyR2V0c0xpbmVCb3gobV9saW5lTWlkcG9pbnRTdGF0ZSwgbV9jdXJyZW50KTsKLSAgICAgICAg
ICAgICAgICBtX2xpbmVCcmVhay5tb3ZlVG8obV9jdXJyZW50Lm1fb2JqLCBtX2N1cnJlbnQubV9w
b3MsIG1fY3VycmVudC5tX25leHRCcmVha2FibGVQb3NpdGlvbik7CisgICAgICAgICAgICAgICAg
bV9saW5lQnJlYWsubW92ZVRvKG1fY3VycmVudC5yZW5kZXJlcigpLCBtX2N1cnJlbnQubV9wb3Ms
IG1fY3VycmVudC5tX25leHRCcmVha2FibGVQb3NpdGlvbik7CiAgICAgICAgICAgICAgICAgbV9s
aW5lQnJlYWsuaW5jcmVtZW50KCk7CiAgICAgICAgICAgICAgICAgbV9saW5lSW5mby5zZXRQcmV2
aW91c0xpbmVCcm9rZUNsZWFubHkodHJ1ZSk7CiAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7
CkBAIC05NzEsNyArOTcxLDcgQEAgaW5saW5lIGJvb2wgQnJlYWtpbmdDb250ZXh0OjpoYW5kbGVU
ZXh0KFdvcmRNZWFzdXJlbWVudHMmIHdvcmRNZWFzdXJlbWVudHMsIGJvb2wKICAgICAgICAgICAg
IGlmIChtX2F1dG9XcmFwICYmIGJldHdlZW5Xb3JkcykgewogICAgICAgICAgICAgICAgIG1fd2lk
dGguY29tbWl0KCk7CiAgICAgICAgICAgICAgICAgd3JhcFcgPSAwOwotICAgICAgICAgICAgICAg
IG1fbGluZUJyZWFrLm1vdmVUbyhtX2N1cnJlbnQubV9vYmosIG1fY3VycmVudC5tX3BvcywgbV9j
dXJyZW50Lm1fbmV4dEJyZWFrYWJsZVBvc2l0aW9uKTsKKyAgICAgICAgICAgICAgICBtX2xpbmVC
cmVhay5tb3ZlVG8obV9jdXJyZW50LnJlbmRlcmVyKCksIG1fY3VycmVudC5tX3BvcywgbV9jdXJy
ZW50Lm1fbmV4dEJyZWFrYWJsZVBvc2l0aW9uKTsKICAgICAgICAgICAgICAgICAvLyBBdXRvLXdy
YXBwaW5nIHRleHQgc2hvdWxkIG5vdCB3cmFwIGluIHRoZSBtaWRkbGUgb2YgYSB3b3JkIG9uY2Ug
aXQgaGFzIGhhZCBhbgogICAgICAgICAgICAgICAgIC8vIG9wcG9ydHVuaXR5IHRvIGJyZWFrIGFm
dGVyIGEgd29yZC4KICAgICAgICAgICAgICAgICBicmVha1dvcmRzID0gZmFsc2U7CkBAIC05ODAs
NyArOTgwLDcgQEAgaW5saW5lIGJvb2wgQnJlYWtpbmdDb250ZXh0OjpoYW5kbGVUZXh0KFdvcmRN
ZWFzdXJlbWVudHMmIHdvcmRNZWFzdXJlbWVudHMsIGJvb2wKICAgICAgICAgICAgIGlmIChtaWRX
b3JkQnJlYWsgJiYgIVUxNl9JU19UUkFJTChjKSAmJiAhKFVfR0VUX0dDX01BU0soYykgJiBVX0dD
X01fTUFTSykpIHsKICAgICAgICAgICAgICAgICAvLyBSZW1lbWJlciB0aGlzIGFzIGEgYnJlYWth
YmxlIHBvc2l0aW9uIGluIGNhc2UKICAgICAgICAgICAgICAgICAvLyBhZGRpbmcgdGhlIGVuZCB3
aWR0aCBmb3JjZXMgYSBicmVhay4KLSAgICAgICAgICAgICAgICBtX2xpbmVCcmVhay5tb3ZlVG8o
bV9jdXJyZW50Lm1fb2JqLCBtX2N1cnJlbnQubV9wb3MsIG1fY3VycmVudC5tX25leHRCcmVha2Fi
bGVQb3NpdGlvbik7CisgICAgICAgICAgICAgICAgbV9saW5lQnJlYWsubW92ZVRvKG1fY3VycmVu
dC5yZW5kZXJlcigpLCBtX2N1cnJlbnQubV9wb3MsIG1fY3VycmVudC5tX25leHRCcmVha2FibGVQ
b3NpdGlvbik7CiAgICAgICAgICAgICAgICAgbWlkV29yZEJyZWFrICY9IChicmVha1dvcmRzIHx8
IGJyZWFrQWxsKTsKICAgICAgICAgICAgIH0KIApAQCAtMTAxMSw3ICsxMDExLDcgQEAgaW5saW5l
IGJvb2wgQnJlYWtpbmdDb250ZXh0OjpoYW5kbGVUZXh0KFdvcmRNZWFzdXJlbWVudHMmIHdvcmRN
ZWFzdXJlbWVudHMsIGJvb2wKICAgICAgICAgICAgIGxhc3RTcGFjZVdvcmRTcGFjaW5nID0gYXBw
bHlXb3JkU3BhY2luZyA/IHdvcmRTcGFjaW5nIDogMDsKICAgICAgICAgICAgIHdvcmRTcGFjaW5n
Rm9yV29yZE1lYXN1cmVtZW50ID0gKGFwcGx5V29yZFNwYWNpbmcgJiYgd29yZE1lYXN1cmVtZW50
cy5sYXN0KCkud2lkdGgpID8gd29yZFNwYWNpbmcgOiAwOwogICAgICAgICAgICAgbGFzdFNwYWNl
ID0gbV9jdXJyZW50Lm1fcG9zOyAvLyBlLmcuLCAiRm9vICAgIGdvbyIsIGRvbid0IGFkZCBpbiBh
bnkgb2YgdGhlIGlnbm9yZWQgc3BhY2VzLgotICAgICAgICAgICAgc3RvcElnbm9yaW5nU3BhY2Vz
KG1fbGluZU1pZHBvaW50U3RhdGUsIElubGluZUl0ZXJhdG9yKDAsIG1fY3VycmVudC5tX29iaiwg
bV9jdXJyZW50Lm1fcG9zKSk7CisgICAgICAgICAgICBzdG9wSWdub3JpbmdTcGFjZXMobV9saW5l
TWlkcG9pbnRTdGF0ZSwgSW5saW5lSXRlcmF0b3IoMCwgbV9jdXJyZW50LnJlbmRlcmVyKCksIG1f
Y3VycmVudC5tX3BvcykpOwogICAgICAgICB9CiAjaWYgRU5BQkxFKFNWRykKICAgICAgICAgaWYg
KGlzU1ZHVGV4dCAmJiBtX2N1cnJlbnQubV9wb3MgPiAwKSB7CkBAIC0xMDIyLDcgKzEwMjIsNyBA
QCBpbmxpbmUgYm9vbCBCcmVha2luZ0NvbnRleHQ6OmhhbmRsZVRleHQoV29yZE1lYXN1cmVtZW50
cyYgd29yZE1lYXN1cmVtZW50cywgYm9vbAogI2VuZGlmCiAKICAgICAgICAgaWYgKG1fY3VycmVu
dENoYXJhY3RlcklzU3BhY2UgJiYgIXByZXZpb3VzQ2hhcmFjdGVySXNTcGFjZSkgewotICAgICAg
ICAgICAgbV9zdGFydE9mSWdub3JlZFNwYWNlcy5tX29iaiA9IG1fY3VycmVudC5tX29iajsKKyAg
ICAgICAgICAgIG1fc3RhcnRPZklnbm9yZWRTcGFjZXMuc2V0UmVuZGVyZXIobV9jdXJyZW50LnJl
bmRlcmVyKCkpOwogICAgICAgICAgICAgbV9zdGFydE9mSWdub3JlZFNwYWNlcy5tX3BvcyA9IG1f
Y3VycmVudC5tX3BvczsKICAgICAgICAgICAgIC8vIFNwYWNlcyBhZnRlciByaWdodC1hbGlnbmVk
IHRleHQgYW5kIGJlZm9yZSBhIGxpbmUtYnJlYWsgZ2V0IGNvbGxhcHNlZCBhd2F5IGNvbXBsZXRl
bHkgc28gdGhhdCB0aGUgdHJhaWxpbmcKICAgICAgICAgICAgIC8vIHNwYWNlIGRvZXNuJ3Qgc2Vl
bSB0byBwdXNoIHRoZSB0ZXh0IG91dCBmcm9tIHRoZSByaWdodC1oYW5kIGVkZ2UuCkBAIC0xMDM3
LDExICsxMDM3LDExIEBAIGlubGluZSBib29sIEJyZWFraW5nQ29udGV4dDo6aGFuZGxlVGV4dChX
b3JkTWVhc3VyZW1lbnRzJiB3b3JkTWVhc3VyZW1lbnRzLCBib29sCiAKICAgICAgICAgaWYgKCFt
X2N1cnJlbnRDaGFyYWN0ZXJJc1NwYWNlICYmIHByZXZpb3VzQ2hhcmFjdGVySXNXUykgewogICAg
ICAgICAgICAgaWYgKG1fYXV0b1dyYXAgJiYgbV9jdXJyZW50U3R5bGUtPmJyZWFrT25seUFmdGVy
V2hpdGVTcGFjZSgpKQotICAgICAgICAgICAgICAgIG1fbGluZUJyZWFrLm1vdmVUbyhtX2N1cnJl
bnQubV9vYmosIG1fY3VycmVudC5tX3BvcywgbV9jdXJyZW50Lm1fbmV4dEJyZWFrYWJsZVBvc2l0
aW9uKTsKKyAgICAgICAgICAgICAgICBtX2xpbmVCcmVhay5tb3ZlVG8obV9jdXJyZW50LnJlbmRl
cmVyKCksIG1fY3VycmVudC5tX3BvcywgbV9jdXJyZW50Lm1fbmV4dEJyZWFrYWJsZVBvc2l0aW9u
KTsKICAgICAgICAgfQogCiAgICAgICAgIGlmIChtX2NvbGxhcHNlV2hpdGVTcGFjZSAmJiBtX2N1
cnJlbnRDaGFyYWN0ZXJJc1NwYWNlICYmICFtX2lnbm9yaW5nU3BhY2VzKQotICAgICAgICAgICAg
bV90cmFpbGluZ09iamVjdHMuc2V0VHJhaWxpbmdXaGl0ZXNwYWNlKHRvUmVuZGVyVGV4dChtX2N1
cnJlbnQubV9vYmopKTsKKyAgICAgICAgICAgIG1fdHJhaWxpbmdPYmplY3RzLnNldFRyYWlsaW5n
V2hpdGVzcGFjZSh0b1JlbmRlclRleHQobV9jdXJyZW50LnJlbmRlcmVyKCkpKTsKICAgICAgICAg
ZWxzZSBpZiAoIW1fY3VycmVudFN0eWxlLT5jb2xsYXBzZVdoaXRlU3BhY2UoKSB8fCAhbV9jdXJy
ZW50Q2hhcmFjdGVySXNTcGFjZSkKICAgICAgICAgICAgIG1fdHJhaWxpbmdPYmplY3RzLmNsZWFy
KCk7CiAKQEAgLTEwNjIsNyArMTA2Miw3IEBAIGlubGluZSBib29sIEJyZWFraW5nQ29udGV4dDo6
aGFuZGxlVGV4dChXb3JkTWVhc3VyZW1lbnRzJiB3b3JkTWVhc3VyZW1lbnRzLCBib29sCiAgICAg
d29yZE1lYXN1cmVtZW50LndpZHRoID0gbV9pZ25vcmluZ1NwYWNlcyA/IDAgOiBhZGRpdGlvbmFs
VGVtcFdpZHRoICsgd29yZFNwYWNpbmdGb3JXb3JkTWVhc3VyZW1lbnQ7CiAgICAgYWRkaXRpb25h
bFRlbXBXaWR0aCArPSBsYXN0U3BhY2VXb3JkU3BhY2luZzsKIAotICAgIGZsb2F0IGlubGluZUxv
Z2ljYWxUZW1wV2lkdGggPSBpbmxpbmVMb2dpY2FsV2lkdGgobV9jdXJyZW50Lm1fb2JqLCAhbV9h
cHBsaWVkU3RhcnRXaWR0aCwgbV9pbmNsdWRlRW5kV2lkdGgpOworICAgIGZsb2F0IGlubGluZUxv
Z2ljYWxUZW1wV2lkdGggPSBpbmxpbmVMb2dpY2FsV2lkdGgobV9jdXJyZW50LnJlbmRlcmVyKCks
ICFtX2FwcGxpZWRTdGFydFdpZHRoLCBtX2luY2x1ZGVFbmRXaWR0aCk7CiAgICAgbV93aWR0aC5h
ZGRVbmNvbW1pdHRlZFdpZHRoKGFkZGl0aW9uYWxUZW1wV2lkdGggKyBpbmxpbmVMb2dpY2FsVGVt
cFdpZHRoKTsKIAogICAgIGlmICh3b3JkTWVhc3VyZW1lbnQuZmFsbGJhY2tGb250cy5pc0VtcHR5
KCkgJiYgIWZhbGxiYWNrRm9udHMuaXNFbXB0eSgpKQpAQCAtMTExNiw3ICsxMTE2LDcgQEAgaW5s
aW5lIGJvb2wgQnJlYWtpbmdDb250ZXh0OjpjYW5CcmVha0F0VGhpc1Bvc2l0aW9uKCkKICAgICBi
b29sIG5leHRJc0F1dG9XcmFwcGluZ1RleHQgPSAobV9uZXh0T2JqZWN0ICYmIG1fbmV4dE9iamVj
dC0+aXNUZXh0KCkgJiYgKG1fYXV0b1dyYXAgfHwgbV9uZXh0T2JqZWN0LT5zdHlsZSgpLmF1dG9X
cmFwKCkpKTsKICAgICBpZiAoIW5leHRJc0F1dG9XcmFwcGluZ1RleHQpCiAgICAgICAgIHJldHVy
biBtX2F1dG9XcmFwOwotICAgIGJvb2wgY3VycmVudElzVGV4dE9yRW1wdHlJbmxpbmUgPSBtX2N1
cnJlbnQubV9vYmotPmlzVGV4dCgpIHx8IChtX2N1cnJlbnQubV9vYmotPmlzUmVuZGVySW5saW5l
KCkgJiYgaXNFbXB0eUlubGluZSh0b1JlbmRlcklubGluZSgqbV9jdXJyZW50Lm1fb2JqKSkpOwor
ICAgIGJvb2wgY3VycmVudElzVGV4dE9yRW1wdHlJbmxpbmUgPSBtX2N1cnJlbnQucmVuZGVyZXIo
KS0+aXNUZXh0KCkgfHwgKG1fY3VycmVudC5yZW5kZXJlcigpLT5pc1JlbmRlcklubGluZSgpICYm
IGlzRW1wdHlJbmxpbmUodG9SZW5kZXJJbmxpbmUoKm1fY3VycmVudC5yZW5kZXJlcigpKSkpOwog
ICAgIGlmICghY3VycmVudElzVGV4dE9yRW1wdHlJbmxpbmUpCiAgICAgICAgIHJldHVybiBtX2F1
dG9XcmFwOwogCkBAIC0xMTYzLDggKzExNjMsOCBAQCBpbmxpbmUgdm9pZCBCcmVha2luZ0NvbnRl
eHQ6OmNvbW1pdEFuZFVwZGF0ZUxpbmVCcmVha0lmTmVlZGVkKCkKICAgICAgICAgbV93aWR0aC5m
aXRCZWxvd0Zsb2F0cygpOwogICAgIH0KIAotICAgIGlmICghbV9jdXJyZW50Lm1fb2JqLT5pc0Zs
b2F0aW5nT3JPdXRPZkZsb3dQb3NpdGlvbmVkKCkpIHsKLSAgICAgICAgbV9sYXN0T2JqZWN0ID0g
bV9jdXJyZW50Lm1fb2JqOworICAgIGlmICghbV9jdXJyZW50LnJlbmRlcmVyKCktPmlzRmxvYXRp
bmdPck91dE9mRmxvd1Bvc2l0aW9uZWQoKSkgeworICAgICAgICBtX2xhc3RPYmplY3QgPSBtX2N1
cnJlbnQucmVuZGVyZXIoKTsKICAgICAgICAgaWYgKG1fbGFzdE9iamVjdC0+aXNSZXBsYWNlZCgp
ICYmIG1fYXV0b1dyYXAgJiYgKCFtX2xhc3RPYmplY3QtPmlzSW1hZ2UoKSB8fCBtX2FsbG93SW1h
Z2VzVG9CcmVhaykgJiYgKCFtX2xhc3RPYmplY3QtPmlzTGlzdE1hcmtlcigpIHx8IHRvUmVuZGVy
TGlzdE1hcmtlcigqbV9sYXN0T2JqZWN0KS5pc0luc2lkZSgpKSkgewogICAgICAgICAgICAgbV93
aWR0aC5jb21taXQoKTsKICAgICAgICAgICAgIG1fbGluZUJyZWFrLm1vdmVUb1N0YXJ0T2YobV9u
ZXh0T2JqZWN0KTsKQEAgLTExNzcsNyArMTE3Nyw3IEBAIGlubGluZSB2b2lkIGNoZWNrTWlkcG9p
bnRzKExpbmVNaWRwb2ludFN0YXRlJiBsaW5lTWlkcG9pbnRTdGF0ZSwgSW5saW5lSXRlcmF0b3Im
CiAgICAgLy8gQ2hlY2sgdG8gc2VlIGlmIG91ciBsYXN0IG1pZHBvaW50IGlzIGEgc3RhcnQgcG9p
bnQgYmV5b25kIHRoZSBsaW5lIGJyZWFrLiBJZiBzbywKICAgICAvLyBzaGF2ZSBpdCBvZmYgdGhl
IGxpc3QsIGFuZCBzaGF2ZSBvZmYgYSB0cmFpbGluZyBzcGFjZSBpZiB0aGUgcHJldmlvdXMgZW5k
IHBvaW50IGRvZXNuJ3QKICAgICAvLyBwcmVzZXJ2ZSB3aGl0ZXNwYWNlLgotICAgIGlmIChsQnJl
YWsubV9vYmogJiYgbGluZU1pZHBvaW50U3RhdGUubnVtTWlkcG9pbnRzICYmICEobGluZU1pZHBv
aW50U3RhdGUubnVtTWlkcG9pbnRzICUgMikpIHsKKyAgICBpZiAobEJyZWFrLnJlbmRlcmVyKCkg
JiYgbGluZU1pZHBvaW50U3RhdGUubnVtTWlkcG9pbnRzICYmICEobGluZU1pZHBvaW50U3RhdGUu
bnVtTWlkcG9pbnRzICUgMikpIHsKICAgICAgICAgSW5saW5lSXRlcmF0b3IqIG1pZHBvaW50cyA9
IGxpbmVNaWRwb2ludFN0YXRlLm1pZHBvaW50cy5kYXRhKCk7CiAgICAgICAgIElubGluZUl0ZXJh
dG9yJiBlbmRwb2ludCA9IG1pZHBvaW50c1tsaW5lTWlkcG9pbnRTdGF0ZS5udW1NaWRwb2ludHMg
LSAyXTsKICAgICAgICAgY29uc3QgSW5saW5lSXRlcmF0b3ImIHN0YXJ0cG9pbnQgPSBtaWRwb2lu
dHNbbGluZU1pZHBvaW50U3RhdGUubnVtTWlkcG9pbnRzIC0gMV07CkBAIC0xMTg3LDcgKzExODcs
NyBAQCBpbmxpbmUgdm9pZCBjaGVja01pZHBvaW50cyhMaW5lTWlkcG9pbnRTdGF0ZSYgbGluZU1p
ZHBvaW50U3RhdGUsIElubGluZUl0ZXJhdG9yJgogICAgICAgICBpZiAoY3VycnBvaW50ID09IGxC
cmVhaykgewogICAgICAgICAgICAgLy8gV2UgaGl0IHRoZSBsaW5lIGJyZWFrIGJlZm9yZSB0aGUg
c3RhcnQgcG9pbnQuIFNoYXZlIG9mZiB0aGUgc3RhcnQgcG9pbnQuCiAgICAgICAgICAgICBsaW5l
TWlkcG9pbnRTdGF0ZS5udW1NaWRwb2ludHMtLTsKLSAgICAgICAgICAgIGlmIChlbmRwb2ludC5t
X29iai0+c3R5bGUoKS5jb2xsYXBzZVdoaXRlU3BhY2UoKSAmJiBlbmRwb2ludC5tX29iai0+aXNU
ZXh0KCkpCisgICAgICAgICAgICBpZiAoZW5kcG9pbnQucmVuZGVyZXIoKS0+c3R5bGUoKS5jb2xs
YXBzZVdoaXRlU3BhY2UoKSAmJiBlbmRwb2ludC5yZW5kZXJlcigpLT5pc1RleHQoKSkKICAgICAg
ICAgICAgICAgICBlbmRwb2ludC5tX3Bvcy0tOwogICAgICAgICB9CiAgICAgfQpAQCAtMTIwMywx
NSArMTIwMywxNSBAQCBJbmxpbmVJdGVyYXRvciBCcmVha2luZ0NvbnRleHQ6OmhhbmRsZUVuZE9m
TGluZSgpCiAjZW5kaWYKICAgICBpZiAoc2VnbWVudEFsbG93c092ZXJmbG93KSB7CiAgICAgICAg
IGlmIChtX2xpbmVCcmVhayA9PSBtX3Jlc29sdmVyLnBvc2l0aW9uKCkpIHsKLSAgICAgICAgICAg
IGlmICghbV9saW5lQnJlYWsubV9vYmogfHwgIW1fbGluZUJyZWFrLm1fb2JqLT5pc0JSKCkpIHsK
KyAgICAgICAgICAgIGlmICghbV9saW5lQnJlYWsucmVuZGVyZXIoKSB8fCAhbV9saW5lQnJlYWsu
cmVuZGVyZXIoKS0+aXNCUigpKSB7CiAgICAgICAgICAgICAgICAgLy8gd2UganVzdCBhZGQgYXMg
bXVjaCBhcyBwb3NzaWJsZQogICAgICAgICAgICAgICAgIGlmIChtX2Jsb2NrU3R5bGUud2hpdGVT
cGFjZSgpID09IFBSRSAmJiAhbV9jdXJyZW50Lm1fcG9zKSB7CiAgICAgICAgICAgICAgICAgICAg
IG1fbGluZUJyZWFrLm1vdmVUbyhtX2xhc3RPYmplY3QsIG1fbGFzdE9iamVjdC0+aXNUZXh0KCkg
PyBtX2xhc3RPYmplY3QtPmxlbmd0aCgpIDogMCk7Ci0gICAgICAgICAgICAgICAgfSBlbHNlIGlm
IChtX2xpbmVCcmVhay5tX29iaikgeworICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAobV9saW5l
QnJlYWsucmVuZGVyZXIoKSkgewogICAgICAgICAgICAgICAgICAgICAvLyBEb24ndCBldmVyIGJy
ZWFrIGluIHRoZSBtaWRkbGUgb2YgYSB3b3JkIGlmIHdlIGNhbiBoZWxwIGl0LgogICAgICAgICAg
ICAgICAgICAgICAvLyBUaGVyZSdzIG5vIHJvb20gYXQgYWxsLiBXZSBqdXN0IGhhdmUgdG8gYmUg
b24gdGhpcyBsaW5lLAogICAgICAgICAgICAgICAgICAgICAvLyBldmVuIHRob3VnaCB3ZSdsbCBz
cGlsbCBvdXQuCi0gICAgICAgICAgICAgICAgICAgIG1fbGluZUJyZWFrLm1vdmVUbyhtX2N1cnJl
bnQubV9vYmosIG1fY3VycmVudC5tX3Bvcyk7CisgICAgICAgICAgICAgICAgICAgIG1fbGluZUJy
ZWFrLm1vdmVUbyhtX2N1cnJlbnQucmVuZGVyZXIoKSwgbV9jdXJyZW50Lm1fcG9zKTsKICAgICAg
ICAgICAgICAgICB9CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICAvLyBtYWtlIHN1cmUgd2Ug
Y29uc3VtZSBhdCBsZWFzdCBvbmUgY2hhci9vYmplY3QuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvbGluZS9MaW5lQnJlYWtlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvbGluZS9MaW5lQnJlYWtlci5jcHAKaW5kZXggZDEyYTk3ZDExYWFmZTc2Y2EyMWQ0ZjVj
YTQ1OGJmZGUxOTdlNTUzNC4uMGNiMzJjYWI0ZDdkMTU3MzliMGEyOWExZTdkYWRhYjA1ZTM0ZDgz
MSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL2xpbmUvTGluZUJyZWFrZXIu
Y3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9saW5lL0xpbmVCcmVha2VyLmNwcApA
QCAtNDUsNyArNDUsNyBAQCB2b2lkIExpbmVCcmVha2VyOjpyZXNldCgpCiB2b2lkIExpbmVCcmVh
a2VyOjpza2lwVHJhaWxpbmdXaGl0ZXNwYWNlKElubGluZUl0ZXJhdG9yJiBpdGVyYXRvciwgY29u
c3QgTGluZUluZm8mIGxpbmVJbmZvKQogewogICAgIHdoaWxlICghaXRlcmF0b3IuYXRFbmQoKSAm
JiAhcmVxdWlyZXNMaW5lQm94KGl0ZXJhdG9yLCBsaW5lSW5mbywgVHJhaWxpbmdXaGl0ZXNwYWNl
KSkgewotICAgICAgICBSZW5kZXJPYmplY3QmIG9iamVjdCA9ICppdGVyYXRvci5tX29iajsKKyAg
ICAgICAgUmVuZGVyT2JqZWN0JiBvYmplY3QgPSAqaXRlcmF0b3IucmVuZGVyZXIoKTsKICAgICAg
ICAgaWYgKG9iamVjdC5pc091dE9mRmxvd1Bvc2l0aW9uZWQoKSkKICAgICAgICAgICAgIHNldFN0
YXRpY1Bvc2l0aW9ucyhtX2Jsb2NrLCB0b1JlbmRlckJveChvYmplY3QpKTsKICAgICAgICAgZWxz
ZSBpZiAob2JqZWN0LmlzRmxvYXRpbmcoKSkKQEAgLTU3LDcgKzU3LDcgQEAgdm9pZCBMaW5lQnJl
YWtlcjo6c2tpcFRyYWlsaW5nV2hpdGVzcGFjZShJbmxpbmVJdGVyYXRvciYgaXRlcmF0b3IsIGNv
bnN0IExpbmVJbmYKIHZvaWQgTGluZUJyZWFrZXI6OnNraXBMZWFkaW5nV2hpdGVzcGFjZShJbmxp
bmVCaWRpUmVzb2x2ZXImIHJlc29sdmVyLCBMaW5lSW5mbyYgbGluZUluZm8sIEZsb2F0aW5nT2Jq
ZWN0KiBsYXN0RmxvYXRGcm9tUHJldmlvdXNMaW5lLCBMaW5lV2lkdGgmIHdpZHRoKQogewogICAg
IHdoaWxlICghcmVzb2x2ZXIucG9zaXRpb24oKS5hdEVuZCgpICYmICFyZXF1aXJlc0xpbmVCb3go
cmVzb2x2ZXIucG9zaXRpb24oKSwgbGluZUluZm8sIExlYWRpbmdXaGl0ZXNwYWNlKSkgewotICAg
ICAgICBSZW5kZXJPYmplY3QmIG9iamVjdCA9ICpyZXNvbHZlci5wb3NpdGlvbigpLm1fb2JqOwor
ICAgICAgICBSZW5kZXJPYmplY3QmIG9iamVjdCA9ICpyZXNvbHZlci5wb3NpdGlvbigpLnJlbmRl
cmVyKCk7CiAgICAgICAgIGlmIChvYmplY3QuaXNPdXRPZkZsb3dQb3NpdGlvbmVkKCkpIHsKICAg
ICAgICAgICAgIHNldFN0YXRpY1Bvc2l0aW9ucyhtX2Jsb2NrLCB0b1JlbmRlckJveChvYmplY3Qp
KTsKICAgICAgICAgICAgIGlmIChvYmplY3Quc3R5bGUoKS5pc09yaWdpbmFsRGlzcGxheUlubGlu
ZVR5cGUoKSkgewpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL2xpbmUvTGlu
ZUlubGluZUhlYWRlcnMuaCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9saW5lL0xpbmVJbmxp
bmVIZWFkZXJzLmgKaW5kZXggNzVhMWJlZTJkZjBkMDZiY2YyMTM5ZmI2NWQyYTk4NjU0YWM2Zjkz
NC4uMGIwYzQ0ZTZlNjBjYjUyNGZiMjlkZjQxNDU0OTliODhiNTcyYTk1YSAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL2xpbmUvTGluZUlubGluZUhlYWRlcnMuaAorKysgYi9T
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvbGluZS9MaW5lSW5saW5lSGVhZGVycy5oCkBAIC03NCw3
ICs3NCw3IEBAIGlubGluZSBib29sIHNob3VsZENvbGxhcHNlV2hpdGVTcGFjZShjb25zdCBSZW5k
ZXJTdHlsZSogc3R5bGUsIGNvbnN0IExpbmVJbmZvJiBsCiAKIGlubGluZSBib29sIHNraXBOb25C
cmVha2luZ1NwYWNlKGNvbnN0IElubGluZUl0ZXJhdG9yJiBpdCwgY29uc3QgTGluZUluZm8mIGxp
bmVJbmZvKQogewotICAgIGlmIChpdC5tX29iai0+c3R5bGUoKS5uYnNwTW9kZSgpICE9IFNQQUNF
IHx8IGl0LmN1cnJlbnQoKSAhPSBub0JyZWFrU3BhY2UpCisgICAgaWYgKGl0LnJlbmRlcmVyKCkt
PnN0eWxlKCkubmJzcE1vZGUoKSAhPSBTUEFDRSB8fCBpdC5jdXJyZW50KCkgIT0gbm9CcmVha1Nw
YWNlKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICAvLyBGSVhNRTogVGhpcyBpcyBiYWQu
IEl0IG1ha2VzIG5ic3AgaW5jb25zaXN0ZW50IHdpdGggc3BhY2UgYW5kIHdvbid0IHdvcmsgY29y
cmVjdGx5CkBAIC05OCwyNSArOTgsMjUgQEAgaW5saW5lIGJvb2wgYWx3YXlzUmVxdWlyZXNMaW5l
Qm94KGNvbnN0IFJlbmRlcklubGluZSYgZmxvdykKIAogaW5saW5lIGJvb2wgcmVxdWlyZXNMaW5l
Qm94KGNvbnN0IElubGluZUl0ZXJhdG9yJiBpdCwgY29uc3QgTGluZUluZm8mIGxpbmVJbmZvID0g
TGluZUluZm8oKSwgV2hpdGVzcGFjZVBvc2l0aW9uIHdoaXRlc3BhY2VQb3NpdGlvbiA9IExlYWRp
bmdXaGl0ZXNwYWNlKQogewotICAgIGlmIChpdC5tX29iai0+aXNGbG9hdGluZ09yT3V0T2ZGbG93
UG9zaXRpb25lZCgpKQorICAgIGlmIChpdC5yZW5kZXJlcigpLT5pc0Zsb2F0aW5nT3JPdXRPZkZs
b3dQb3NpdGlvbmVkKCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIGlmIChpdC5tX29i
ai0+aXNCUigpKQorICAgIGlmIChpdC5yZW5kZXJlcigpLT5pc0JSKCkpCiAgICAgICAgIHJldHVy
biB0cnVlOwogCiAgICAgYm9vbCByZW5kZXJlcklzRW1wdHlJbmxpbmUgPSBmYWxzZTsKLSAgICBp
ZiAoaXQubV9vYmotPmlzUmVuZGVySW5saW5lKCkpIHsKLSAgICAgICAgY29uc3QgUmVuZGVySW5s
aW5lJiBpbmxpbmVSZW5kZXJlciA9IHRvUmVuZGVySW5saW5lKCppdC5tX29iaik7CisgICAgaWYg
KGl0LnJlbmRlcmVyKCktPmlzUmVuZGVySW5saW5lKCkpIHsKKyAgICAgICAgY29uc3QgUmVuZGVy
SW5saW5lJiBpbmxpbmVSZW5kZXJlciA9IHRvUmVuZGVySW5saW5lKCppdC5yZW5kZXJlcigpKTsK
ICAgICAgICAgaWYgKCFhbHdheXNSZXF1aXJlc0xpbmVCb3goaW5saW5lUmVuZGVyZXIpICYmICFy
ZXF1aXJlc0xpbmVCb3hGb3JDb250ZW50KGlubGluZVJlbmRlcmVyLCBsaW5lSW5mbykpCiAgICAg
ICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIHJlbmRlcmVySXNFbXB0eUlubGluZSA9IGlz
RW1wdHlJbmxpbmUoaW5saW5lUmVuZGVyZXIpOwogICAgIH0KIAotICAgIGlmICghc2hvdWxkQ29s
bGFwc2VXaGl0ZVNwYWNlKCZpdC5tX29iai0+c3R5bGUoKSwgbGluZUluZm8sIHdoaXRlc3BhY2VQ
b3NpdGlvbikpCisgICAgaWYgKCFzaG91bGRDb2xsYXBzZVdoaXRlU3BhY2UoJml0LnJlbmRlcmVy
KCktPnN0eWxlKCksIGxpbmVJbmZvLCB3aGl0ZXNwYWNlUG9zaXRpb24pKQogICAgICAgICByZXR1
cm4gdHJ1ZTsKIAogICAgIFVDaGFyIGN1cnJlbnQgPSBpdC5jdXJyZW50KCk7Ci0gICAgYm9vbCBu
b3RKdXN0V2hpdGVzcGFjZSA9IGN1cnJlbnQgIT0gJyAnICYmIGN1cnJlbnQgIT0gJ1x0JyAmJiBj
dXJyZW50ICE9IHNvZnRIeXBoZW4gJiYgKGN1cnJlbnQgIT0gJ1xuJyB8fCBpdC5tX29iai0+cHJl
c2VydmVzTmV3bGluZSgpKSAmJiAhc2tpcE5vbkJyZWFraW5nU3BhY2UoaXQsIGxpbmVJbmZvKTsK
KyAgICBib29sIG5vdEp1c3RXaGl0ZXNwYWNlID0gY3VycmVudCAhPSAnICcgJiYgY3VycmVudCAh
PSAnXHQnICYmIGN1cnJlbnQgIT0gc29mdEh5cGhlbiAmJiAoY3VycmVudCAhPSAnXG4nIHx8IGl0
LnJlbmRlcmVyKCktPnByZXNlcnZlc05ld2xpbmUoKSkgJiYgIXNraXBOb25CcmVha2luZ1NwYWNl
KGl0LCBsaW5lSW5mbyk7CiAgICAgcmV0dXJuIG5vdEp1c3RXaGl0ZXNwYWNlIHx8IHJlbmRlcmVy
SXNFbXB0eUlubGluZTsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L3NoYXBlcy9TaGFwZUluc2lkZUluZm8uY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3No
YXBlcy9TaGFwZUluc2lkZUluZm8uY3BwCmluZGV4IGIzMmJkYjU5ZmJiOWQxMTY5OWU2NTMwNzll
NGFlYmQyMzBmMDlmZDAuLjE2MjgxYTk0MDc3OTg5NDI2M2I5YjM0YzczYWVlOWI1YzE3ZDU3N2Mg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zaGFwZXMvU2hhcGVJbnNpZGVJ
bmZvLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc2hhcGVzL1NoYXBlSW5zaWRl
SW5mby5jcHAKQEAgLTM4LDggKzM4LDggQEAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogTGluZVNl
Z21lbnRSYW5nZTo6TGluZVNlZ21lbnRSYW5nZShjb25zdCBJbmxpbmVJdGVyYXRvciYgc3RhcnQs
IGNvbnN0IElubGluZUl0ZXJhdG9yJiBlbmQpCi0gICAgOiBzdGFydChzdGFydC5yb290KCksIHN0
YXJ0Lm9iamVjdCgpLCBzdGFydC5vZmZzZXQoKSkKLSAgICAsIGVuZChlbmQucm9vdCgpLCBlbmQu
b2JqZWN0KCksIGVuZC5vZmZzZXQoKSkKKyAgICA6IHN0YXJ0KHN0YXJ0LnJvb3QoKSwgc3RhcnQu
cmVuZGVyZXIoKSwgc3RhcnQub2Zmc2V0KCkpCisgICAgLCBlbmQoZW5kLnJvb3QoKSwgZW5kLnJl
bmRlcmVyKCksIGVuZC5vZmZzZXQoKSkKICAgICB7CiAgICAgfQogCg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>218025</attachid>
            <date>2013-11-28 14:28:47 -0800</date>
            <delta_ts>2013-11-28 15:22:41 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-124837-20131129072845.patch</filename>
            <type>text/plain</type>
            <size>45576</size>
            <attacher name="Gyuyoung Kim">gyuyoung.kim</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTU5ODU5CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNGJiZDQzNjFmZmQ2NzE0
OGIzZmI0ZDExMDg0MjM2YjExMjlmZDUzZC4uZDAzMzQyMjZkYTg0NDM0MTE4YTMyNjcwNDVlOGVi
ZGU3YzdkZDc5ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDUxIEBACisyMDEzLTExLTI4ICBHeXV5
b3VuZyBLaW0gIDxneXV5b3VuZy5raW1Ac2Ftc3VuZy5jb20+CisKKyAgICAgICAgUmVuYW1lIElu
bGluZUl0ZXJhdG9yOjptX29iaiBhbmQgbWFrZSBpdCBwcml2YXRlCisgICAgICAgIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMjQ4MzcKKworICAgICAgICBSZXZpZXdl
ZCBieSBBbnR0aSBLb2l2aXN0by4KKworICAgICAgICBJbmxpbmVJdGVyYXRvciBoYXMgYmVlbiBl
eHBvcnRlZCBtX29iaiBhcyBwdWJsaWMgdGhvdWdoIHRoZXJlIGlzIGEgZ2V0dGVyIGZ1bmN0aW9u
LgorICAgICAgICBCZXNpZGVzICpvYmplY3QqIG5hbWUgaXNuJ3QgYW1iaWdpb3VzLiBTbywgY2hh
bmdlZCBpdCB3aXRoIG1fcmVuZGVyZXIgYW5kIHJlbmRlcmVyKCkuCisgICAgICAgIEFkZGl0aW9u
YWxseSwgc2V0UmVuZGVyZXIoKSBpcyBhZGRlZCBhcyB3ZWxsLgorCisgICAgICAgIE5vIG5ldyB0
ZXN0cywgbm8gYmVoYXZpb3IgY2hhbmdlcy4KKworICAgICAgICAqIHJlbmRlcmluZy9JbmxpbmVJ
dGVyYXRvci5oOgorICAgICAgICAoV2ViQ29yZTo6SW5saW5lSXRlcmF0b3I6OnNldE9iamVjdCk6
CisgICAgICAgIChXZWJDb3JlOjpvcGVyYXRvcj09KToKKyAgICAgICAgKFdlYkNvcmU6Om9wZXJh
dG9yIT0pOgorICAgICAgICAoV2ViQ29yZTo6SW5saW5lQmlkaVJlc29sdmVyOjphcHBlbmRSdW4p
OgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJCbG9ja0xpbmVMYXlvdXQuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6UmVuZGVyQmxvY2tGbG93OjphcHBlbmRSdW5zRm9yT2JqZWN0KToKKyAgICAg
ICAgKFdlYkNvcmU6OmNvbnN0cnVjdEJpZGlSdW5zRm9yTGluZSk6CisgICAgICAgIChXZWJDb3Jl
OjpSZW5kZXJCbG9ja0Zsb3c6OmNyZWF0ZUxpbmVCb3hlc0Zyb21CaWRpUnVucyk6CisgICAgICAg
IChXZWJDb3JlOjpSZW5kZXJCbG9ja0Zsb3c6OmxheW91dFJ1bnNBbmRGbG9hdHNJblJhbmdlKToK
KyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJsb2NrRmxvdzo6bWF0Y2hlZEVuZExpbmUpOgorICAg
ICAgICAqIHJlbmRlcmluZy9saW5lL0JyZWFraW5nQ29udGV4dElubGluZUhlYWRlcnMuaDoKKyAg
ICAgICAgKFdlYkNvcmU6OlRyYWlsaW5nT2JqZWN0czo6dXBkYXRlTWlkcG9pbnRzRm9yVHJhaWxp
bmdCb3hlcyk6CisgICAgICAgIChXZWJDb3JlOjpCcmVha2luZ0NvbnRleHQ6OkJyZWFraW5nQ29u
dGV4dCk6CisgICAgICAgIChXZWJDb3JlOjpCcmVha2luZ0NvbnRleHQ6OmN1cnJlbnRPYmplY3Qp
OgorICAgICAgICAoV2ViQ29yZTo6QnJlYWtpbmdDb250ZXh0Ojppbml0aWFsaXplRm9yQ3VycmVu
dE9iamVjdCk6CisgICAgICAgIChXZWJDb3JlOjpCcmVha2luZ0NvbnRleHQ6OmhhbmRsZUJSKToK
KyAgICAgICAgKFdlYkNvcmU6OkJyZWFraW5nQ29udGV4dDo6aGFuZGxlT3V0T2ZGbG93UG9zaXRp
b25lZCk6CisgICAgICAgIChXZWJDb3JlOjpCcmVha2luZ0NvbnRleHQ6OmhhbmRsZUZsb2F0KToK
KyAgICAgICAgKFdlYkNvcmU6OkJyZWFraW5nQ29udGV4dDo6aGFuZGxlRW1wdHlJbmxpbmUpOgor
ICAgICAgICAoV2ViQ29yZTo6QnJlYWtpbmdDb250ZXh0OjpoYW5kbGVSZXBsYWNlZCk6CisgICAg
ICAgIChXZWJDb3JlOjppdGVyYXRvcklzQmV5b25kRW5kT2ZSZW5kZXJDb21iaW5lVGV4dCk6Cisg
ICAgICAgIChXZWJDb3JlOjplbnN1cmVDaGFyYWN0ZXJHZXRzTGluZUJveCk6CisgICAgICAgIChX
ZWJDb3JlOjpCcmVha2luZ0NvbnRleHQ6OmhhbmRsZVRleHQpOgorICAgICAgICAoV2ViQ29yZTo6
QnJlYWtpbmdDb250ZXh0OjpjYW5CcmVha0F0VGhpc1Bvc2l0aW9uKToKKyAgICAgICAgKFdlYkNv
cmU6OkJyZWFraW5nQ29udGV4dDo6Y29tbWl0QW5kVXBkYXRlTGluZUJyZWFrSWZOZWVkZWQpOgor
ICAgICAgICAoV2ViQ29yZTo6Y2hlY2tNaWRwb2ludHMpOgorICAgICAgICAoV2ViQ29yZTo6QnJl
YWtpbmdDb250ZXh0OjpoYW5kbGVFbmRPZkxpbmUpOgorICAgICAgICAqIHJlbmRlcmluZy9saW5l
L0xpbmVCcmVha2VyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkxpbmVCcmVha2VyOjpza2lwVHJh
aWxpbmdXaGl0ZXNwYWNlKToKKyAgICAgICAgKFdlYkNvcmU6OkxpbmVCcmVha2VyOjpza2lwTGVh
ZGluZ1doaXRlc3BhY2UpOgorICAgICAgICAqIHJlbmRlcmluZy9saW5lL0xpbmVJbmxpbmVIZWFk
ZXJzLmg6CisgICAgICAgIChXZWJDb3JlOjpza2lwTm9uQnJlYWtpbmdTcGFjZSk6CisgICAgICAg
IChXZWJDb3JlOjpyZXF1aXJlc0xpbmVCb3gpOgorCiAyMDEzLTExLTI4ICBBbnR0aSBLb2l2aXN0
byAgPGFudHRpQGFwcGxlLmNvbT4KIAogICAgICAgICBSZW5hbWUgU3R5bGVQcm9wZXJ0eVNldCB0
byBTdHlsZVByb3BlcnRpZXMKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9J
bmxpbmVJdGVyYXRvci5oIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0lubGluZUl0ZXJhdG9y
LmgKaW5kZXggMmE0ZWEwMzcyZmQ4YzdiY2I4NDlmNDk2MDAxNzNlODYwMDYyMjk0ZS4uNjAzZGYx
ZDhjNzQzYmEwMGI0MjI3YWRjNDE4MDkzMjg4OWVhZDgyNCAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL0lubGluZUl0ZXJhdG9yLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL0lubGluZUl0ZXJhdG9yLmgKQEAgLTM4LDcgKzM4LDcgQEAgY2xhc3MgSW5saW5lSXRl
cmF0b3IgewogcHVibGljOgogICAgIElubGluZUl0ZXJhdG9yKCkKICAgICAgICAgOiBtX3Jvb3Qo
MCkKLSAgICAgICAgLCBtX29iaigwKQorICAgICAgICAsIG1fcmVuZGVyZXIoMCkKICAgICAgICAg
LCBtX3BvcygwKQogICAgICAgICAsIG1fbmV4dEJyZWFrYWJsZVBvc2l0aW9uKC0xKQogICAgIHsK
QEAgLTQ2LDcgKzQ2LDcgQEAgcHVibGljOgogCiAgICAgSW5saW5lSXRlcmF0b3IoUmVuZGVyRWxl
bWVudCogcm9vdCwgUmVuZGVyT2JqZWN0KiBvLCB1bnNpZ25lZCBwKQogICAgICAgICA6IG1fcm9v
dChyb290KQotICAgICAgICAsIG1fb2JqKG8pCisgICAgICAgICwgbV9yZW5kZXJlcihvKQogICAg
ICAgICAsIG1fcG9zKHApCiAgICAgICAgICwgbV9uZXh0QnJlYWthYmxlUG9zaXRpb24oLTEpCiAg
ICAgewpAQCAtNjEsMTIgKzYxLDEzIEBAIHB1YmxpYzoKIAogICAgIHZvaWQgbW92ZVRvKFJlbmRl
ck9iamVjdCogb2JqZWN0LCB1bnNpZ25lZCBvZmZzZXQsIGludCBuZXh0QnJlYWsgPSAtMSkKICAg
ICB7Ci0gICAgICAgIG1fb2JqID0gb2JqZWN0OworICAgICAgICBtX3JlbmRlcmVyID0gb2JqZWN0
OwogICAgICAgICBtX3BvcyA9IG9mZnNldDsKICAgICAgICAgbV9uZXh0QnJlYWthYmxlUG9zaXRp
b24gPSBuZXh0QnJlYWs7CiAgICAgfQogCi0gICAgUmVuZGVyT2JqZWN0KiBvYmplY3QoKSBjb25z
dCB7IHJldHVybiBtX29iajsgfQorICAgIFJlbmRlck9iamVjdCogcmVuZGVyZXIoKSBjb25zdCB7
IHJldHVybiBtX3JlbmRlcmVyOyB9CisgICAgdm9pZCBzZXRSZW5kZXJlcihSZW5kZXJPYmplY3Qq
IHJlbmRlcmVyKSB7IG1fcmVuZGVyZXIgPSByZW5kZXJlcjsgfQogICAgIHVuc2lnbmVkIG9mZnNl
dCgpIGNvbnN0IHsgcmV0dXJuIG1fcG9zOyB9CiAgICAgUmVuZGVyRWxlbWVudCogcm9vdCgpIGNv
bnN0IHsgcmV0dXJuIG1fcm9vdDsgfQogCkBAIC03NiwxMyArNzcsMTMgQEAgcHVibGljOgogCiAg
ICAgaW5saW5lIGJvb2wgYXRUZXh0UGFyYWdyYXBoU2VwYXJhdG9yKCkKICAgICB7Ci0gICAgICAg
IHJldHVybiBtX29iaiAmJiBtX29iai0+cHJlc2VydmVzTmV3bGluZSgpICYmIG1fb2JqLT5pc1Rl
eHQoKSAmJiB0b1JlbmRlclRleHQobV9vYmopLT50ZXh0TGVuZ3RoKCkKLSAgICAgICAgICAgICYm
IHRvUmVuZGVyVGV4dChtX29iaiktPmNoYXJhY3RlckF0KG1fcG9zKSA9PSAnXG4nOworICAgICAg
ICByZXR1cm4gbV9yZW5kZXJlciAmJiBtX3JlbmRlcmVyLT5wcmVzZXJ2ZXNOZXdsaW5lKCkgJiYg
bV9yZW5kZXJlci0+aXNUZXh0KCkgJiYgdG9SZW5kZXJUZXh0KG1fcmVuZGVyZXIpLT50ZXh0TGVu
Z3RoKCkKKyAgICAgICAgICAgICYmIHRvUmVuZGVyVGV4dChtX3JlbmRlcmVyKS0+Y2hhcmFjdGVy
QXQobV9wb3MpID09ICdcbic7CiAgICAgfQogICAgIAogICAgIGlubGluZSBib29sIGF0UGFyYWdy
YXBoU2VwYXJhdG9yKCkKICAgICB7Ci0gICAgICAgIHJldHVybiAobV9vYmogJiYgbV9vYmotPmlz
QlIoKSkgfHwgYXRUZXh0UGFyYWdyYXBoU2VwYXJhdG9yKCk7CisgICAgICAgIHJldHVybiAobV9y
ZW5kZXJlciAmJiBtX3JlbmRlcmVyLT5pc0JSKCkpIHx8IGF0VGV4dFBhcmFncmFwaFNlcGFyYXRv
cigpOwogICAgIH0KIAogICAgIFVDaGFyIGNoYXJhY3RlckF0KHVuc2lnbmVkKSBjb25zdDsKQEAg
LTkyLDIyICs5MywyMiBAQCBwdWJsaWM6CiAKIHByaXZhdGU6CiAgICAgUmVuZGVyRWxlbWVudCog
bV9yb290OworICAgIFJlbmRlck9iamVjdCogbV9yZW5kZXJlcjsKIAotICAgIC8vIEZJWE1FOiBU
aGVzZSBzaG91bGQgYmUgcHJpdmF0ZS4KKy8vIEZJWE1FOiBUaGVzZSBzaG91bGQgYmUgcHJpdmF0
ZS4KIHB1YmxpYzoKLSAgICBSZW5kZXJPYmplY3QqIG1fb2JqOwogICAgIHVuc2lnbmVkIG1fcG9z
OwogICAgIGludCBtX25leHRCcmVha2FibGVQb3NpdGlvbjsKIH07CiAKIGlubGluZSBib29sIG9w
ZXJhdG9yPT0oY29uc3QgSW5saW5lSXRlcmF0b3ImIGl0MSwgY29uc3QgSW5saW5lSXRlcmF0b3Im
IGl0MikKIHsKLSAgICByZXR1cm4gaXQxLm1fcG9zID09IGl0Mi5tX3BvcyAmJiBpdDEubV9vYmog
PT0gaXQyLm1fb2JqOworICAgIHJldHVybiBpdDEubV9wb3MgPT0gaXQyLm1fcG9zICYmIGl0MS5y
ZW5kZXJlcigpID09IGl0Mi5yZW5kZXJlcigpOwogfQogCiBpbmxpbmUgYm9vbCBvcGVyYXRvciE9
KGNvbnN0IElubGluZUl0ZXJhdG9yJiBpdDEsIGNvbnN0IElubGluZUl0ZXJhdG9yJiBpdDIpCiB7
Ci0gICAgcmV0dXJuIGl0MS5tX3BvcyAhPSBpdDIubV9wb3MgfHwgaXQxLm1fb2JqICE9IGl0Mi5t
X29iajsKKyAgICByZXR1cm4gaXQxLm1fcG9zICE9IGl0Mi5tX3BvcyB8fCBpdDEucmVuZGVyZXIo
KSAhPSBpdDIucmVuZGVyZXIoKTsKIH0KIAogc3RhdGljIGlubGluZSBVQ2hhckRpcmVjdGlvbiBl
bWJlZENoYXJGcm9tRGlyZWN0aW9uKFRleHREaXJlY3Rpb24gZGlyZWN0aW9uLCBFVW5pY29kZUJp
ZGkgdW5pY29kZUJpZGkpCkBAIC0zMTMsOSArMzE0LDkgQEAgc3RhdGljIGlubGluZSBSZW5kZXJP
YmplY3QqIGJpZGlGaXJzdEluY2x1ZGluZ0VtcHR5SW5saW5lcyhSZW5kZXJFbGVtZW50JiByb290
KQogCiBpbmxpbmUgdm9pZCBJbmxpbmVJdGVyYXRvcjo6ZmFzdEluY3JlbWVudEluVGV4dE5vZGUo
KQogewotICAgIEFTU0VSVChtX29iaik7Ci0gICAgQVNTRVJUKG1fb2JqLT5pc1RleHQoKSk7Ci0g
ICAgQVNTRVJUKG1fcG9zIDw9IHRvUmVuZGVyVGV4dChtX29iaiktPnRleHRMZW5ndGgoKSk7Cisg
ICAgQVNTRVJUKG1fcmVuZGVyZXIpOworICAgIEFTU0VSVChtX3JlbmRlcmVyLT5pc1RleHQoKSk7
CisgICAgQVNTRVJUKG1fcG9zIDw9IHRvUmVuZGVyVGV4dChtX3JlbmRlcmVyKS0+dGV4dExlbmd0
aCgpKTsKICAgICBtX3BvcysrOwogfQogCkBAIC0zNTIsMjggKzM1MywyOCBAQCBwcml2YXRlOgog
CiBpbmxpbmUgdm9pZCBJbmxpbmVJdGVyYXRvcjo6aW5jcmVtZW50KElubGluZUJpZGlSZXNvbHZl
ciogcmVzb2x2ZXIpCiB7Ci0gICAgaWYgKCFtX29iaikKKyAgICBpZiAoIW1fcmVuZGVyZXIpCiAg
ICAgICAgIHJldHVybjsKLSAgICBpZiAobV9vYmotPmlzVGV4dCgpKSB7CisgICAgaWYgKG1fcmVu
ZGVyZXItPmlzVGV4dCgpKSB7CiAgICAgICAgIGZhc3RJbmNyZW1lbnRJblRleHROb2RlKCk7Ci0g
ICAgICAgIGlmIChtX3BvcyA8IHRvUmVuZGVyVGV4dChtX29iaiktPnRleHRMZW5ndGgoKSkKKyAg
ICAgICAgaWYgKG1fcG9zIDwgdG9SZW5kZXJUZXh0KG1fcmVuZGVyZXIpLT50ZXh0TGVuZ3RoKCkp
CiAgICAgICAgICAgICByZXR1cm47CiAgICAgfQogICAgIC8vIGJpZGlOZXh0IGNhbiByZXR1cm4g
MCwgc28gdXNlIG1vdmVUbyBpbnN0ZWFkIG9mIG1vdmVUb1N0YXJ0T2YKLSAgICBtb3ZlVG8oYmlk
aU5leHRTa2lwcGluZ0VtcHR5SW5saW5lcygqbV9yb290LCBtX29iaiwgcmVzb2x2ZXIpLCAwKTsK
KyAgICBtb3ZlVG8oYmlkaU5leHRTa2lwcGluZ0VtcHR5SW5saW5lcygqbV9yb290LCBtX3JlbmRl
cmVyLCByZXNvbHZlciksIDApOwogfQogCiBpbmxpbmUgYm9vbCBJbmxpbmVJdGVyYXRvcjo6YXRF
bmQoKSBjb25zdAogewotICAgIHJldHVybiAhbV9vYmo7CisgICAgcmV0dXJuICFtX3JlbmRlcmVy
OwogfQogCiBpbmxpbmUgVUNoYXIgSW5saW5lSXRlcmF0b3I6OmNoYXJhY3RlckF0KHVuc2lnbmVk
IGluZGV4KSBjb25zdAogewotICAgIGlmICghbV9vYmogfHwgIW1fb2JqLT5pc1RleHQoKSkKKyAg
ICBpZiAoIW1fcmVuZGVyZXIgfHwgIW1fcmVuZGVyZXItPmlzVGV4dCgpKQogICAgICAgICByZXR1
cm4gMDsKIAotICAgIFJlbmRlclRleHQqIHRleHQgPSB0b1JlbmRlclRleHQobV9vYmopOworICAg
IFJlbmRlclRleHQqIHRleHQgPSB0b1JlbmRlclRleHQobV9yZW5kZXJlcik7CiAgICAgaWYgKGlu
ZGV4ID49IHRleHQtPnRleHRMZW5ndGgoKSkKICAgICAgICAgcmV0dXJuIDA7CiAKQEAgLTM5OCw4
ICszOTksOCBAQCBBTFdBWVNfSU5MSU5FIFVDaGFyRGlyZWN0aW9uIElubGluZUl0ZXJhdG9yOjpk
aXJlY3Rpb24oKSBjb25zdAogICAgIGlmIChVQ2hhciBjaGFyYWN0ZXIgPSBjdXJyZW50KCkpCiAg
ICAgICAgIHJldHVybiB1X2NoYXJEaXJlY3Rpb24oY2hhcmFjdGVyKTsKIAotICAgIGlmIChtX29i
aiAmJiBtX29iai0+aXNMaXN0TWFya2VyKCkpCi0gICAgICAgIHJldHVybiBtX29iai0+c3R5bGUo
KS5pc0xlZnRUb1JpZ2h0RGlyZWN0aW9uKCkgPyBVX0xFRlRfVE9fUklHSFQgOiBVX1JJR0hUX1RP
X0xFRlQ7CisgICAgaWYgKG1fcmVuZGVyZXIgJiYgbV9yZW5kZXJlci0+aXNMaXN0TWFya2VyKCkp
CisgICAgICAgIHJldHVybiBtX3JlbmRlcmVyLT5zdHlsZSgpLmlzTGVmdFRvUmlnaHREaXJlY3Rp
b24oKSA/IFVfTEVGVF9UT19SSUdIVCA6IFVfUklHSFRfVE9fTEVGVDsKIAogICAgIHJldHVybiBV
X09USEVSX05FVVRSQUw7CiB9CkBAIC00MzQsNyArNDM1LDcgQEAgc3RhdGljIGlubGluZSBSZW5k
ZXJPYmplY3QqIGNvbnRhaW5pbmdJc29sYXRlKFJlbmRlck9iamVjdCogb2JqZWN0LCBSZW5kZXJP
YmplY3QKIAogc3RhdGljIGlubGluZSB1bnNpZ25lZCBudW1iZXJPZklzb2xhdGVBbmNlc3RvcnMo
Y29uc3QgSW5saW5lSXRlcmF0b3ImIGl0ZXIpCiB7Ci0gICAgUmVuZGVyT2JqZWN0KiBvYmplY3Qg
PSBpdGVyLm9iamVjdCgpOworICAgIFJlbmRlck9iamVjdCogb2JqZWN0ID0gaXRlci5yZW5kZXJl
cigpOwogICAgIGlmICghb2JqZWN0KQogICAgICAgICByZXR1cm4gMDsKICAgICB1bnNpZ25lZCBj
b3VudCA9IDA7CkBAIC00OTUsNyArNDk2LDcgQEAgcHVibGljOgogICAgICAgICAvLyBGb3Igbm93
LCBpZiB3ZSBlbnRlciBhbiBpc29sYXRlIGJldHdlZW4gbWlkcG9pbnRzLCB3ZSBpbmNyZW1lbnQg
b3VyIGN1cnJlbnQgbWlkcG9pbnQgb3IgZWxzZQogICAgICAgICAvLyB3ZSdsbCBsZWF2ZSB0aGUg
aXNvbGF0ZSBhbmQgaWdub3JlIHRoZSBjb250ZW50IHRoYXQgZm9sbG93cy4KICAgICAgICAgTWlk
cG9pbnRTdGF0ZTxJbmxpbmVJdGVyYXRvcj4mIG1pZHBvaW50U3RhdGUgPSByZXNvbHZlci5taWRw
b2ludFN0YXRlKCk7Ci0gICAgICAgIGlmIChtaWRwb2ludFN0YXRlLmJldHdlZW5NaWRwb2ludHMg
JiYgbWlkcG9pbnRTdGF0ZS5taWRwb2ludHNbbWlkcG9pbnRTdGF0ZS5jdXJyZW50TWlkcG9pbnRd
Lm9iamVjdCgpID09ICZvYmopIHsKKyAgICAgICAgaWYgKG1pZHBvaW50U3RhdGUuYmV0d2Vlbk1p
ZHBvaW50cyAmJiBtaWRwb2ludFN0YXRlLm1pZHBvaW50c1ttaWRwb2ludFN0YXRlLmN1cnJlbnRN
aWRwb2ludF0ucmVuZGVyZXIoKSA9PSAmb2JqKSB7CiAgICAgICAgICAgICBtaWRwb2ludFN0YXRl
LmJldHdlZW5NaWRwb2ludHMgPSBmYWxzZTsKICAgICAgICAgICAgICsrbWlkcG9pbnRTdGF0ZS5j
dXJyZW50TWlkcG9pbnQ7CiAgICAgICAgIH0KQEAgLTUxNSw4ICs1MTYsOCBAQCBpbmxpbmUgdm9p
ZCBJbmxpbmVCaWRpUmVzb2x2ZXI6OmFwcGVuZFJ1bigpCiAgICAgICAgIC8vIEZJWE1FOiBDb3Vs
ZCB0aGlzIGluaXRpYWxpemUgZnJvbSB0aGlzLT5pbklzb2xhdGUoKSBpbnN0ZWFkIG9mIHdhbGtp
bmcgdXAgdGhlIHJlbmRlciB0cmVlPwogICAgICAgICBJc29sYXRlVHJhY2tlciBpc29sYXRlVHJh
Y2tlcihudW1iZXJPZklzb2xhdGVBbmNlc3RvcnMobV9zb3IpKTsKICAgICAgICAgaW50IHN0YXJ0
ID0gbV9zb3IubV9wb3M7Ci0gICAgICAgIFJlbmRlck9iamVjdCogb2JqID0gbV9zb3IubV9vYmo7
Ci0gICAgICAgIHdoaWxlIChvYmogJiYgb2JqICE9IG1fZW9yLm1fb2JqICYmIG9iaiAhPSBlbmRP
ZkxpbmUubV9vYmopIHsKKyAgICAgICAgUmVuZGVyT2JqZWN0KiBvYmogPSBtX3Nvci5yZW5kZXJl
cigpOworICAgICAgICB3aGlsZSAob2JqICYmIG9iaiAhPSBtX2Vvci5yZW5kZXJlcigpICYmIG9i
aiAhPSBlbmRPZkxpbmUucmVuZGVyZXIoKSkgewogICAgICAgICAgICAgaWYgKGlzb2xhdGVUcmFj
a2VyLmluSXNvbGF0ZSgpKQogICAgICAgICAgICAgICAgIGlzb2xhdGVUcmFja2VyLmFkZEZha2VS
dW5JZk5lY2Vzc2FyeSgqb2JqLCBzdGFydCwgKnRoaXMpOwogICAgICAgICAgICAgZWxzZQpAQCAt
NTI2LDggKzUyNyw4IEBAIGlubGluZSB2b2lkIElubGluZUJpZGlSZXNvbHZlcjo6YXBwZW5kUnVu
KCkKICAgICAgICAgICAgIG9iaiA9IGJpZGlOZXh0U2tpcHBpbmdFbXB0eUlubGluZXMoKm1fc29y
LnJvb3QoKSwgb2JqLCAmaXNvbGF0ZVRyYWNrZXIpOwogICAgICAgICB9CiAgICAgICAgIGlmIChv
YmopIHsKLSAgICAgICAgICAgIHVuc2lnbmVkIHBvcyA9IG9iaiA9PSBtX2Vvci5tX29iaiA/IG1f
ZW9yLm1fcG9zIDogVUlOVF9NQVg7Ci0gICAgICAgICAgICBpZiAob2JqID09IGVuZE9mTGluZS5t
X29iaiAmJiBlbmRPZkxpbmUubV9wb3MgPD0gcG9zKSB7CisgICAgICAgICAgICB1bnNpZ25lZCBw
b3MgPSBvYmogPT0gbV9lb3IucmVuZGVyZXIoKSA/IG1fZW9yLm1fcG9zIDogVUlOVF9NQVg7Cisg
ICAgICAgICAgICBpZiAob2JqID09IGVuZE9mTGluZS5yZW5kZXJlcigpICYmIGVuZE9mTGluZS5t
X3BvcyA8PSBwb3MpIHsKICAgICAgICAgICAgICAgICBtX3JlYWNoZWRFbmRPZkxpbmUgPSB0cnVl
OwogICAgICAgICAgICAgICAgIHBvcyA9IGVuZE9mTGluZS5tX3BvczsKICAgICAgICAgICAgIH0K
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCbG9ja0xpbmVMYXlv
dXQuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJsb2NrTGluZUxheW91dC5j
cHAKaW5kZXggM2RkNjBiY2U1Yjg2MmRiMjAyMWM4N2MyZTg1YjJjNDkwOWQ1OTRhYS4uNGJmZDRm
OWViOWRmNzY2OTU1ODc5MzA3MTJkZjA5Y2Y4NTI0MmMzNSAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL1JlbmRlckJsb2NrTGluZUxheW91dC5jcHAKKysrIGIvU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL1JlbmRlckJsb2NrTGluZUxheW91dC5jcHAKQEAgLTg4LDcgKzg4LDcg
QEAgdm9pZCBSZW5kZXJCbG9ja0Zsb3c6OmFwcGVuZFJ1bnNGb3JPYmplY3QoQmlkaVJ1bkxpc3Q8
QmlkaVJ1bj4mIHJ1bnMsIGludCBzdGFydCwKICAgICBpZiAoaGF2ZU5leHRNaWRwb2ludCkKICAg
ICAgICAgbmV4dE1pZHBvaW50ID0gbGluZU1pZHBvaW50U3RhdGUubWlkcG9pbnRzW2xpbmVNaWRw
b2ludFN0YXRlLmN1cnJlbnRNaWRwb2ludF07CiAgICAgaWYgKGxpbmVNaWRwb2ludFN0YXRlLmJl
dHdlZW5NaWRwb2ludHMpIHsKLSAgICAgICAgaWYgKCEoaGF2ZU5leHRNaWRwb2ludCAmJiBuZXh0
TWlkcG9pbnQubV9vYmogPT0gb2JqKSkKKyAgICAgICAgaWYgKCEoaGF2ZU5leHRNaWRwb2ludCAm
JiBuZXh0TWlkcG9pbnQucmVuZGVyZXIoKSA9PSBvYmopKQogICAgICAgICAgICAgcmV0dXJuOwog
ICAgICAgICAvLyBUaGlzIGlzIGEgbmV3IHN0YXJ0IHBvaW50LiBTdG9wIGlnbm9yaW5nIG9iamVj
dHMgYW5kCiAgICAgICAgIC8vIGFkanVzdCBvdXIgc3RhcnQuCkBAIC05OCw3ICs5OCw3IEBAIHZv
aWQgUmVuZGVyQmxvY2tGbG93OjphcHBlbmRSdW5zRm9yT2JqZWN0KEJpZGlSdW5MaXN0PEJpZGlS
dW4+JiBydW5zLCBpbnQgc3RhcnQsCiAgICAgICAgIGlmIChzdGFydCA8IGVuZCkKICAgICAgICAg
ICAgIHJldHVybiBhcHBlbmRSdW5zRm9yT2JqZWN0KHJ1bnMsIHN0YXJ0LCBlbmQsIG9iaiwgcmVz
b2x2ZXIpOwogICAgIH0gZWxzZSB7Ci0gICAgICAgIGlmICghaGF2ZU5leHRNaWRwb2ludCB8fCAo
b2JqICE9IG5leHRNaWRwb2ludC5tX29iaikpIHsKKyAgICAgICAgaWYgKCFoYXZlTmV4dE1pZHBv
aW50IHx8IChvYmogIT0gbmV4dE1pZHBvaW50LnJlbmRlcmVyKCkpKSB7CiAgICAgICAgICAgICBy
dW5zLmFkZFJ1bihjcmVhdGVSdW4oc3RhcnQsIGVuZCwgb2JqLCByZXNvbHZlcikpOwogICAgICAg
ICAgICAgcmV0dXJuOwogICAgICAgICB9CkBAIC05NjIsOCArOTYyLDggQEAgc3RhdGljIGlubGlu
ZSB2b2lkIGNvbnN0cnVjdEJpZGlSdW5zRm9yTGluZShjb25zdCBSZW5kZXJCbG9ja0Zsb3cqIGJs
b2NrLCBJbmxpbmUKICAgICAgICAgaXRlcmF0b3IgPSBzZWdtZW50UmFuZ2VzW2ldLmVuZDsKICAg
ICAgICAgSW5saW5lSXRlcmF0b3Igc2VnbWVudEVuZChpdGVyYXRvci5yb290LCBpdGVyYXRvci5v
YmplY3QsIGl0ZXJhdG9yLm9mZnNldCk7CiAgICAgICAgIGlmIChpKSB7Ci0gICAgICAgICAgICBB
U1NFUlQoc2VnbWVudFN0YXJ0Lm1fb2JqKTsKLSAgICAgICAgICAgIEJpZGlSdW4qIHNlZ21lbnRN
YXJrZXIgPSBjcmVhdGVSdW4oc2VnbWVudFN0YXJ0Lm1fcG9zLCBzZWdtZW50U3RhcnQubV9wb3Ms
IHNlZ21lbnRTdGFydC5tX29iaiwgdG9wUmVzb2x2ZXIpOworICAgICAgICAgICAgQVNTRVJUKHNl
Z21lbnRTdGFydC5yZW5kZXJlcigpKTsKKyAgICAgICAgICAgIEJpZGlSdW4qIHNlZ21lbnRNYXJr
ZXIgPSBjcmVhdGVSdW4oc2VnbWVudFN0YXJ0Lm1fcG9zLCBzZWdtZW50U3RhcnQubV9wb3MsIHNl
Z21lbnRTdGFydC5yZW5kZXJlcigpLCB0b3BSZXNvbHZlcik7CiAgICAgICAgICAgICBzZWdtZW50
TWFya2VyLT5tX3N0YXJ0c1NlZ21lbnQgPSB0cnVlOwogICAgICAgICAgICAgYmlkaVJ1bnMuYWRk
UnVuKHNlZ21lbnRNYXJrZXIpOwogICAgICAgICAgICAgLy8gRG8gbm90IGNvbGxhcHNlIG1pZHBv
aW50cyBiZXR3ZWVuIHNlZ21lbnRzCkBAIC05ODQsNyArOTg0LDcgQEAgUm9vdElubGluZUJveCog
UmVuZGVyQmxvY2tGbG93OjpjcmVhdGVMaW5lQm94ZXNGcm9tQmlkaVJ1bnMoQmlkaVJ1bkxpc3Q8
QmlkaVJ1bj4KICAgICAgICAgcmV0dXJuIDA7CiAKICAgICAvLyBGSVhNRTogV2h5IGlzIHRoaXMg
b25seSBkb25lIHdoZW4gd2UgaGFkIHJ1bnM/Ci0gICAgbGluZUluZm8uc2V0TGFzdExpbmUoIWVu
ZC5tX29iaik7CisgICAgbGluZUluZm8uc2V0TGFzdExpbmUoIWVuZC5yZW5kZXJlcigpKTsKIAog
ICAgIFJvb3RJbmxpbmVCb3gqIGxpbmVCb3ggPSBjb25zdHJ1Y3RMaW5lKGJpZGlSdW5zLCBsaW5l
SW5mbyk7CiAgICAgaWYgKCFsaW5lQm94KQpAQCAtMTM2MSw3ICsxMzYxLDcgQEAgdm9pZCBSZW5k
ZXJCbG9ja0Zsb3c6OmxheW91dFJ1bnNBbmRGbG9hdHNJblJhbmdlKExpbmVMYXlvdXRTdGF0ZSYg
bGF5b3V0U3RhdGUsIEkKICAgICAgICAgLy8gVGhpcyBpcyBhIHNob3J0LWN1dCBmb3IgZW1wdHkg
bGluZXMuCiAgICAgICAgIGlmIChsYXlvdXRTdGF0ZS5saW5lSW5mbygpLmlzRW1wdHkoKSkgewog
ICAgICAgICAgICAgaWYgKGxhc3RSb290Qm94KCkpCi0gICAgICAgICAgICAgICAgbGFzdFJvb3RC
b3goKS0+c2V0TGluZUJyZWFrSW5mbyhlbmQubV9vYmosIGVuZC5tX3BvcywgcmVzb2x2ZXIuc3Rh
dHVzKCkpOworICAgICAgICAgICAgICAgIGxhc3RSb290Qm94KCktPnNldExpbmVCcmVha0luZm8o
ZW5kLnJlbmRlcmVyKCksIGVuZC5tX3BvcywgcmVzb2x2ZXIuc3RhdHVzKCkpOwogICAgICAgICB9
IGVsc2UgewogICAgICAgICAgICAgVmlzdWFsRGlyZWN0aW9uT3ZlcnJpZGUgb3ZlcnJpZGUgPSAo
c3R5bGVUb1VzZS5ydGxPcmRlcmluZygpID09IFZpc3VhbE9yZGVyID8gKHN0eWxlVG9Vc2UuZGly
ZWN0aW9uKCkgPT0gTFRSID8gVmlzdWFsTGVmdFRvUmlnaHRPdmVycmlkZSA6IFZpc3VhbFJpZ2h0
VG9MZWZ0T3ZlcnJpZGUpIDogTm9WaXN1YWxPdmVycmlkZSk7CiAKQEAgLTEzOTQsNyArMTM5NCw3
IEBAIHZvaWQgUmVuZGVyQmxvY2tGbG93OjpsYXlvdXRSdW5zQW5kRmxvYXRzSW5SYW5nZShMaW5l
TGF5b3V0U3RhdGUmIGxheW91dFN0YXRlLCBJCiAgICAgICAgICAgICByZXNvbHZlci5tYXJrQ3Vy
cmVudFJ1bkVtcHR5KCk7IC8vIEZJWE1FOiBUaGlzIGNhbiBwcm9iYWJseSBiZSByZXBsYWNlZCBi
eSBhbiBBU1NFUlQgKG9yIGp1c3QgcmVtb3ZlZCkuCiAKICAgICAgICAgICAgIGlmIChsaW5lQm94
KSB7Ci0gICAgICAgICAgICAgICAgbGluZUJveC0+c2V0TGluZUJyZWFrSW5mbyhlbmQubV9vYmos
IGVuZC5tX3BvcywgcmVzb2x2ZXIuc3RhdHVzKCkpOworICAgICAgICAgICAgICAgIGxpbmVCb3gt
PnNldExpbmVCcmVha0luZm8oZW5kLnJlbmRlcmVyKCksIGVuZC5tX3BvcywgcmVzb2x2ZXIuc3Rh
dHVzKCkpOwogICAgICAgICAgICAgICAgIGlmIChsYXlvdXRTdGF0ZS51c2VzUmVwYWludEJvdW5k
cygpKQogICAgICAgICAgICAgICAgICAgICBsYXlvdXRTdGF0ZS51cGRhdGVSZXBhaW50UmFuZ2VG
cm9tQm94KGxpbmVCb3gpOwogCkBAIC0xOTcyLDcgKzE5NzIsNyBAQCBib29sIFJlbmRlckJsb2Nr
Rmxvdzo6bWF0Y2hlZEVuZExpbmUoTGluZUxheW91dFN0YXRlJiBsYXlvdXRTdGF0ZSwgY29uc3Qg
SW5saW5lQgogICAgIFJvb3RJbmxpbmVCb3gqIG9yaWdpbmFsRW5kTGluZSA9IGxheW91dFN0YXRl
LmVuZExpbmUoKTsKICAgICBSb290SW5saW5lQm94KiBsaW5lID0gb3JpZ2luYWxFbmRMaW5lOwog
ICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbnVtTGluZXMgJiYgbGluZTsgaSsrLCBsaW5lID0gbGlu
ZS0+bmV4dFJvb3RCb3goKSkgewotICAgICAgICBpZiAobGluZS0+bGluZUJyZWFrT2JqKCkgPT0g
cmVzb2x2ZXIucG9zaXRpb24oKS5tX29iaiAmJiBsaW5lLT5saW5lQnJlYWtQb3MoKSA9PSByZXNv
bHZlci5wb3NpdGlvbigpLm1fcG9zKSB7CisgICAgICAgIGlmIChsaW5lLT5saW5lQnJlYWtPYmoo
KSA9PSByZXNvbHZlci5wb3NpdGlvbigpLnJlbmRlcmVyKCkgJiYgbGluZS0+bGluZUJyZWFrUG9z
KCkgPT0gcmVzb2x2ZXIucG9zaXRpb24oKS5tX3BvcykgewogICAgICAgICAgICAgLy8gV2UgaGF2
ZSBhIG1hdGNoLgogICAgICAgICAgICAgaWYgKGxpbmUtPmxpbmVCcmVha0JpZGlTdGF0dXMoKSAh
PSByZXNvbHZlci5zdGF0dXMoKSkKICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7IC8vIC4u
LmJ1dCB0aGUgYmlkaSBzdGF0ZSBkb2Vzbid0IG1hdGNoLgpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL2xpbmUvQnJlYWtpbmdDb250ZXh0SW5saW5lSGVhZGVycy5oIGIvU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL2xpbmUvQnJlYWtpbmdDb250ZXh0SW5saW5lSGVhZGVycy5o
CmluZGV4IDdiOTk1NzUzOTljNWNmYWVjNzdhZGZhZDNkZDdlNDNmNzU5N2I4NjguLmY2NWQ3YmMx
MDQ4ODAyMjE4NDViMjU1YzkyMDk5NDhlYjdhMWMyZjcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9saW5lL0JyZWFraW5nQ29udGV4dElubGluZUhlYWRlcnMuaAorKysgYi9T
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvbGluZS9CcmVha2luZ0NvbnRleHRJbmxpbmVIZWFkZXJz
LmgKQEAgLTE0Nyw3ICsxNDcsNyBAQCB2b2lkIFRyYWlsaW5nT2JqZWN0czo6dXBkYXRlTWlkcG9p
bnRzRm9yVHJhaWxpbmdCb3hlcyhMaW5lTWlkcG9pbnRTdGF0ZSYgbGluZU1pZAogICAgIGlmIChs
aW5lTWlkcG9pbnRTdGF0ZS5udW1NaWRwb2ludHMgJSAyKSB7CiAgICAgICAgIC8vIEZpbmQgdGhl
IHRyYWlsaW5nIHNwYWNlIG9iamVjdCdzIG1pZHBvaW50LgogICAgICAgICBpbnQgdHJhaWxpbmdT
cGFjZU1pZHBvaW50ID0gbGluZU1pZHBvaW50U3RhdGUubnVtTWlkcG9pbnRzIC0gMTsKLSAgICAg
ICAgZm9yICggOyB0cmFpbGluZ1NwYWNlTWlkcG9pbnQgPiAwICYmIGxpbmVNaWRwb2ludFN0YXRl
Lm1pZHBvaW50c1t0cmFpbGluZ1NwYWNlTWlkcG9pbnRdLm1fb2JqICE9IG1fd2hpdGVzcGFjZTsg
LS10cmFpbGluZ1NwYWNlTWlkcG9pbnQpIHsgfQorICAgICAgICBmb3IgKCA7IHRyYWlsaW5nU3Bh
Y2VNaWRwb2ludCA+IDAgJiYgbGluZU1pZHBvaW50U3RhdGUubWlkcG9pbnRzW3RyYWlsaW5nU3Bh
Y2VNaWRwb2ludF0ucmVuZGVyZXIoKSAhPSBtX3doaXRlc3BhY2U7IC0tdHJhaWxpbmdTcGFjZU1p
ZHBvaW50KSB7IH0KICAgICAgICAgQVNTRVJUKHRyYWlsaW5nU3BhY2VNaWRwb2ludCA+PSAwKTsK
ICAgICAgICAgaWYgKGNvbGxhcHNlRmlyc3RTcGFjZSA9PSBDb2xsYXBzZUZpcnN0U3BhY2UpCiAg
ICAgICAgICAgICBsaW5lTWlkcG9pbnRTdGF0ZS5taWRwb2ludHNbdHJhaWxpbmdTcGFjZU1pZHBv
aW50XS5tX3Bvcy0tOwpAQCAtMTYwLDEyICsxNjAsMTIgQEAgdm9pZCBUcmFpbGluZ09iamVjdHM6
OnVwZGF0ZU1pZHBvaW50c0ZvclRyYWlsaW5nQm94ZXMoTGluZU1pZHBvaW50U3RhdGUmIGxpbmVN
aWQKICAgICAgICAgICAgICAgICAvLyBXZSBkb24ndCBoYXZlIGEgbWlkcG9pbnQgZm9yIHRoaXMg
Ym94IHlldC4KICAgICAgICAgICAgICAgICBlbnN1cmVMaW5lQm94SW5zaWRlSWdub3JlZFNwYWNl
cyhsaW5lTWlkcG9pbnRTdGF0ZSwgbV9ib3hlc1tpXSk7CiAgICAgICAgICAgICB9IGVsc2Ugewot
ICAgICAgICAgICAgICAgIEFTU0VSVChsaW5lTWlkcG9pbnRTdGF0ZS5taWRwb2ludHNbY3VycmVu
dE1pZHBvaW50XS5tX29iaiA9PSBtX2JveGVzW2ldKTsKLSAgICAgICAgICAgICAgICBBU1NFUlQo
bGluZU1pZHBvaW50U3RhdGUubWlkcG9pbnRzW2N1cnJlbnRNaWRwb2ludCArIDFdLm1fb2JqID09
IG1fYm94ZXNbaV0pOworICAgICAgICAgICAgICAgIEFTU0VSVChsaW5lTWlkcG9pbnRTdGF0ZS5t
aWRwb2ludHNbY3VycmVudE1pZHBvaW50XS5yZW5kZXJlcigpID09IG1fYm94ZXNbaV0pOworICAg
ICAgICAgICAgICAgIEFTU0VSVChsaW5lTWlkcG9pbnRTdGF0ZS5taWRwb2ludHNbY3VycmVudE1p
ZHBvaW50ICsgMV0ucmVuZGVyZXIoKSA9PSBtX2JveGVzW2ldKTsKICAgICAgICAgICAgIH0KICAg
ICAgICAgICAgIGN1cnJlbnRNaWRwb2ludCArPSAyOwogICAgICAgICB9Ci0gICAgfSBlbHNlIGlm
ICghbEJyZWFrLm1fb2JqKSB7CisgICAgfSBlbHNlIGlmICghbEJyZWFrLnJlbmRlcmVyKCkpIHsK
ICAgICAgICAgQVNTRVJUKG1fd2hpdGVzcGFjZS0+aXNUZXh0KCkpOwogICAgICAgICBBU1NFUlQo
Y29sbGFwc2VGaXJzdFNwYWNlID09IENvbGxhcHNlRmlyc3RTcGFjZSk7CiAgICAgICAgIC8vIEFk
ZCBhIG5ldyBlbmQgbWlkcG9pbnQgdGhhdCBzdG9wcyByaWdodCBhdCB0aGUgdmVyeSBlbmQuCkBA
IC0xODYsNyArMTg2LDcgQEAgcHVibGljOgogICAgICAgICAsIG1fY3VycmVudChyZXNvbHZlci5w
b3NpdGlvbigpKQogICAgICAgICAsIG1fbGluZUJyZWFrKHJlc29sdmVyLnBvc2l0aW9uKCkpCiAg
ICAgICAgICwgbV9ibG9jayhibG9jaykKLSAgICAgICAgLCBtX2xhc3RPYmplY3QobV9jdXJyZW50
Lm1fb2JqKQorICAgICAgICAsIG1fbGFzdE9iamVjdChtX2N1cnJlbnQucmVuZGVyZXIoKSkKICAg
ICAgICAgLCBtX25leHRPYmplY3QoMCkKICAgICAgICAgLCBtX2N1cnJlbnRTdHlsZSgwKQogICAg
ICAgICAsIG1fYmxvY2tTdHlsZShibG9jay5zdHlsZSgpKQpAQCAtMjE2LDcgKzIxNiw3IEBAIHB1
YmxpYzoKICAgICAgICAgbV9saW5lSW5mby5zZXRQcmV2aW91c0xpbmVCcm9rZUNsZWFubHkoZmFs
c2UpOwogICAgIH0KIAotICAgIFJlbmRlck9iamVjdCogY3VycmVudE9iamVjdCgpIHsgcmV0dXJu
IG1fY3VycmVudC5tX29iajsgfQorICAgIFJlbmRlck9iamVjdCogY3VycmVudE9iamVjdCgpIHsg
cmV0dXJuIG1fY3VycmVudC5yZW5kZXJlcigpOyB9CiAgICAgSW5saW5lSXRlcmF0b3IgbGluZUJy
ZWFrKCkgeyByZXR1cm4gbV9saW5lQnJlYWs7IH0KICAgICBJbmxpbmVJdGVyYXRvciYgbGluZUJy
ZWFrUmVmKCkge3JldHVybiBtX2xpbmVCcmVhazsgfQogICAgIExpbmVXaWR0aCYgbGluZVdpZHRo
KCkgeyByZXR1cm4gbV93aWR0aDsgfQpAQCAtMzEwLDIyICszMTAsMjIgQEAgaW5saW5lIHZvaWQg
QnJlYWtpbmdDb250ZXh0Ojppbml0aWFsaXplRm9yQ3VycmVudE9iamVjdCgpCiB7CiAgICAgbV9o
YWRVbmNvbW1pdHRlZFdpZHRoQmVmb3JlQ3VycmVudCA9ICEhbV93aWR0aC51bmNvbW1pdHRlZFdp
ZHRoKCk7CiAKLSAgICBtX2N1cnJlbnRTdHlsZSA9ICZtX2N1cnJlbnQubV9vYmotPnN0eWxlKCk7
CisgICAgbV9jdXJyZW50U3R5bGUgPSAmbV9jdXJyZW50LnJlbmRlcmVyKCktPnN0eWxlKCk7CiAK
ICAgICBBU1NFUlQobV9jdXJyZW50U3R5bGUpOwogCi0gICAgbV9uZXh0T2JqZWN0ID0gYmlkaU5l
eHRTa2lwcGluZ0VtcHR5SW5saW5lcyhtX2Jsb2NrLCBtX2N1cnJlbnQubV9vYmopOwotICAgIGlm
IChtX25leHRPYmplY3QgJiYgbV9uZXh0T2JqZWN0LT5wYXJlbnQoKSAmJiAhbV9uZXh0T2JqZWN0
LT5wYXJlbnQoKS0+aXNEZXNjZW5kYW50T2YobV9jdXJyZW50Lm1fb2JqLT5wYXJlbnQoKSkpCisg
ICAgbV9uZXh0T2JqZWN0ID0gYmlkaU5leHRTa2lwcGluZ0VtcHR5SW5saW5lcyhtX2Jsb2NrLCBt
X2N1cnJlbnQucmVuZGVyZXIoKSk7CisgICAgaWYgKG1fbmV4dE9iamVjdCAmJiBtX25leHRPYmpl
Y3QtPnBhcmVudCgpICYmICFtX25leHRPYmplY3QtPnBhcmVudCgpLT5pc0Rlc2NlbmRhbnRPZiht
X2N1cnJlbnQucmVuZGVyZXIoKS0+cGFyZW50KCkpKQogICAgICAgICBtX2luY2x1ZGVFbmRXaWR0
aCA9IHRydWU7CiAKLSAgICBtX2N1cnJXUyA9IG1fY3VycmVudC5tX29iai0+aXNSZXBsYWNlZCgp
ID8gbV9jdXJyZW50Lm1fb2JqLT5wYXJlbnQoKS0+c3R5bGUoKS53aGl0ZVNwYWNlKCkgOiBtX2N1
cnJlbnRTdHlsZS0+d2hpdGVTcGFjZSgpOworICAgIG1fY3VycldTID0gbV9jdXJyZW50LnJlbmRl
cmVyKCktPmlzUmVwbGFjZWQoKSA/IG1fY3VycmVudC5yZW5kZXJlcigpLT5wYXJlbnQoKS0+c3R5
bGUoKS53aGl0ZVNwYWNlKCkgOiBtX2N1cnJlbnRTdHlsZS0+d2hpdGVTcGFjZSgpOwogICAgIG1f
bGFzdFdTID0gbV9sYXN0T2JqZWN0LT5pc1JlcGxhY2VkKCkgPyBtX2xhc3RPYmplY3QtPnBhcmVu
dCgpLT5zdHlsZSgpLndoaXRlU3BhY2UoKSA6IG1fbGFzdE9iamVjdC0+c3R5bGUoKS53aGl0ZVNw
YWNlKCk7CiAKICAgICBtX2F1dG9XcmFwID0gUmVuZGVyU3R5bGU6OmF1dG9XcmFwKG1fY3VycldT
KTsKICAgICBtX2F1dG9XcmFwV2FzRXZlclRydWVPbkxpbmUgPSBtX2F1dG9XcmFwV2FzRXZlclRy
dWVPbkxpbmUgfHwgbV9hdXRvV3JhcDsKIAogI2lmIEVOQUJMRShTVkcpCi0gICAgbV9wcmVzZXJ2
ZXNOZXdsaW5lID0gbV9jdXJyZW50Lm1fb2JqLT5pc1NWR0lubGluZVRleHQoKSA/IGZhbHNlIDog
UmVuZGVyU3R5bGU6OnByZXNlcnZlTmV3bGluZShtX2N1cnJXUyk7CisgICAgbV9wcmVzZXJ2ZXNO
ZXdsaW5lID0gbV9jdXJyZW50LnJlbmRlcmVyKCktPmlzU1ZHSW5saW5lVGV4dCgpID8gZmFsc2Ug
OiBSZW5kZXJTdHlsZTo6cHJlc2VydmVOZXdsaW5lKG1fY3VycldTKTsKICNlbHNlCiAgICAgbV9w
cmVzZXJ2ZXNOZXdsaW5lID0gUmVuZGVyU3R5bGU6OnByZXNlcnZlTmV3bGluZShtX2N1cnJXUyk7
CiAjZW5kaWYKQEAgLTM0Nyw3ICszNDcsNyBAQCBpbmxpbmUgdm9pZCBCcmVha2luZ0NvbnRleHQ6
OmluY3JlbWVudCgpCiBpbmxpbmUgdm9pZCBCcmVha2luZ0NvbnRleHQ6OmhhbmRsZUJSKEVDbGVh
ciYgY2xlYXIpCiB7CiAgICAgaWYgKG1fd2lkdGguZml0c09uTGluZSgpKSB7Ci0gICAgICAgIFJl
bmRlck9iamVjdCogYnIgPSBtX2N1cnJlbnQubV9vYmo7CisgICAgICAgIFJlbmRlck9iamVjdCog
YnIgPSBtX2N1cnJlbnQucmVuZGVyZXIoKTsKICAgICAgICAgbV9saW5lQnJlYWsubW92ZVRvU3Rh
cnRPZihicik7CiAgICAgICAgIG1fbGluZUJyZWFrLmluY3JlbWVudCgpOwogCkBAIC0zNzAsNyAr
MzcwLDcgQEAgaW5saW5lIHZvaWQgQnJlYWtpbmdDb250ZXh0OjpoYW5kbGVCUihFQ2xlYXImIGNs
ZWFyKQogICAgICAgICAvLyBjb2xsYXBzZWQgYXdheSBzbyB0aGF0IGl0IGRvZXNuJ3QgcHVzaCB0
aGUgdGV4dCBvdXQgZnJvbSB0aGUgY29udGFpbmVyJ3MgcmlnaHQtaGFuZCBlZGdlLgogICAgICAg
ICAvLyBGSVhNRTogRG8gdGhpcyByZWdhcmRsZXNzIG9mIHRoZSBjb250YWluZXIncyBhbGlnbm1l
bnQgLSB3aWxsIHJlcXVpcmUgcmViYXNlbGluaW5nIGEgbG90IG9mIHRlc3QgcmVzdWx0cy4KICAg
ICAgICAgZWxzZSBpZiAobV9pZ25vcmluZ1NwYWNlcyAmJiAobV9ibG9ja1N0eWxlLnRleHRBbGln
bigpID09IFJJR0hUIHx8IG1fYmxvY2tTdHlsZS50ZXh0QWxpZ24oKSA9PSBXRUJLSVRfUklHSFQp
KQotICAgICAgICAgICAgc3RvcElnbm9yaW5nU3BhY2VzKG1fbGluZU1pZHBvaW50U3RhdGUsIElu
bGluZUl0ZXJhdG9yKDAsIG1fY3VycmVudC5tX29iaiwgbV9jdXJyZW50Lm1fcG9zKSk7CisgICAg
ICAgICAgICBzdG9wSWdub3JpbmdTcGFjZXMobV9saW5lTWlkcG9pbnRTdGF0ZSwgSW5saW5lSXRl
cmF0b3IoMCwgbV9jdXJyZW50LnJlbmRlcmVyKCksIG1fY3VycmVudC5tX3BvcykpOwogCiAgICAg
ICAgIGlmICghbV9saW5lSW5mby5pc0VtcHR5KCkpCiAgICAgICAgICAgICBjbGVhciA9IG1fY3Vy
cmVudFN0eWxlLT5jbGVhcigpOwpAQCAtNDI5LDcgKzQyOSw3IEBAIGlubGluZSB2b2lkIEJyZWFr
aW5nQ29udGV4dDo6aGFuZGxlT3V0T2ZGbG93UG9zaXRpb25lZChWZWN0b3I8UmVuZGVyQm94Kj4m
IHBvc2l0CiB7CiAgICAgLy8gSWYgb3VyIG9yaWdpbmFsIGRpc3BsYXkgd2Fzbid0IGFuIGlubGlu
ZSB0eXBlLCB0aGVuIHdlIGNhbgogICAgIC8vIGdvIGFoZWFkIGFuZCBkZXRlcm1pbmUgb3VyIHN0
YXRpYyBpbmxpbmUgcG9zaXRpb24gbm93LgotICAgIFJlbmRlckJveCogYm94ID0gdG9SZW5kZXJC
b3gobV9jdXJyZW50Lm1fb2JqKTsKKyAgICBSZW5kZXJCb3gqIGJveCA9IHRvUmVuZGVyQm94KG1f
Y3VycmVudC5yZW5kZXJlcigpKTsKICAgICBib29sIGlzSW5saW5lVHlwZSA9IGJveC0+c3R5bGUo
KS5pc09yaWdpbmFsRGlzcGxheUlubGluZVR5cGUoKTsKICAgICBpZiAoIWlzSW5saW5lVHlwZSkK
ICAgICAgICAgbV9ibG9jay5zZXRTdGF0aWNJbmxpbmVQb3NpdGlvbkZvckNoaWxkKCpib3gsIG1f
YmxvY2subG9naWNhbEhlaWdodCgpLCBtX2Jsb2NrLnN0YXJ0T2Zmc2V0Rm9yQ29udGVudChtX2Js
b2NrLmxvZ2ljYWxIZWlnaHQoKSkpOwpAQCAtNDU1LDcgKzQ1NSw3IEBAIGlubGluZSB2b2lkIEJy
ZWFraW5nQ29udGV4dDo6aGFuZGxlT3V0T2ZGbG93UG9zaXRpb25lZChWZWN0b3I8UmVuZGVyQm94
Kj4mIHBvc2l0CiAKIGlubGluZSB2b2lkIEJyZWFraW5nQ29udGV4dDo6aGFuZGxlRmxvYXQoKQog
ewotICAgIFJlbmRlckJveCYgZmxvYXRCb3ggPSB0b1JlbmRlckJveCgqbV9jdXJyZW50Lm1fb2Jq
KTsKKyAgICBSZW5kZXJCb3gmIGZsb2F0Qm94ID0gdG9SZW5kZXJCb3goKm1fY3VycmVudC5yZW5k
ZXJlcigpKTsKICAgICBGbG9hdGluZ09iamVjdCogZmxvYXRpbmdPYmplY3QgPSBtX2Jsb2NrLmlu
c2VydEZsb2F0aW5nT2JqZWN0KGZsb2F0Qm94KTsKICAgICAvLyBjaGVjayBpZiBpdCBmaXRzIGlu
IHRoZSBjdXJyZW50IGxpbmUuCiAgICAgLy8gSWYgaXQgZG9lcywgcG9zaXRpb24gaXQgbm93LCBv
dGhlcndpc2UsIHBvc2l0aW9uCkBAIC00NjMsNyArNDYzLDcgQEAgaW5saW5lIHZvaWQgQnJlYWtp
bmdDb250ZXh0OjpoYW5kbGVGbG9hdCgpCiAgICAgLy8gRklYTUU6IEJ1ZyAxMTAzNzI6IFByb3Bl
cmx5IHBvc2l0aW9uIG11bHRpcGxlIHN0YWNrZWQgZmxvYXRzIHdpdGggbm9uLXJlY3Rhbmd1bGFy
IHNoYXBlIG91dHNpZGUuCiAgICAgaWYgKG1fZmxvYXRzRml0T25MaW5lICYmIG1fd2lkdGguZml0
c09uTGluZUV4Y2x1ZGluZ1RyYWlsaW5nV2hpdGVzcGFjZShtX2Jsb2NrLmxvZ2ljYWxXaWR0aEZv
ckZsb2F0KGZsb2F0aW5nT2JqZWN0KSkpIHsKICAgICAgICAgbV9ibG9jay5wb3NpdGlvbk5ld0Zs
b2F0T25MaW5lKGZsb2F0aW5nT2JqZWN0LCBtX2xhc3RGbG9hdEZyb21QcmV2aW91c0xpbmUsIG1f
bGluZUluZm8sIG1fd2lkdGgpOwotICAgICAgICBpZiAobV9saW5lQnJlYWsubV9vYmogPT0gbV9j
dXJyZW50Lm1fb2JqKSB7CisgICAgICAgIGlmIChtX2xpbmVCcmVhay5yZW5kZXJlcigpID09IG1f
Y3VycmVudC5yZW5kZXJlcigpKSB7CiAgICAgICAgICAgICBBU1NFUlQoIW1fbGluZUJyZWFrLm1f
cG9zKTsKICAgICAgICAgICAgIG1fbGluZUJyZWFrLmluY3JlbWVudCgpOwogICAgICAgICB9CkBA
IC00OTUsNyArNDk1LDcgQEAgaW5saW5lIGJvb2wgc2hvdWxkU2tpcFdoaXRlc3BhY2VBZnRlclN0
YXJ0T2JqZWN0KFJlbmRlckJsb2NrRmxvdyYgYmxvY2ssIFJlbmRlck8KIAogaW5saW5lIHZvaWQg
QnJlYWtpbmdDb250ZXh0OjpoYW5kbGVFbXB0eUlubGluZSgpCiB7Ci0gICAgUmVuZGVySW5saW5l
JiBmbG93Qm94ID0gdG9SZW5kZXJJbmxpbmUoKm1fY3VycmVudC5tX29iaik7CisgICAgUmVuZGVy
SW5saW5lJiBmbG93Qm94ID0gdG9SZW5kZXJJbmxpbmUoKm1fY3VycmVudC5yZW5kZXJlcigpKTsK
IAogICAgIC8vIFRoaXMgc2hvdWxkIG9ubHkgZW5kIHVwIGJlaW5nIGNhbGxlZCBvbiBlbXB0eSBp
bmxpbmVzCiAgICAgQVNTRVJUKGlzRW1wdHlJbmxpbmUoZmxvd0JveCkpOwpAQCAtNTEyLDkgKzUx
Miw5IEBAIGlubGluZSB2b2lkIEJyZWFraW5nQ29udGV4dDo6aGFuZGxlRW1wdHlJbmxpbmUoKQog
ICAgICAgICAgICAgbV9saW5lSW5mby5zZXRFbXB0eShmYWxzZSwgJm1fYmxvY2ssICZtX3dpZHRo
KTsKICAgICAgICAgaWYgKG1faWdub3JpbmdTcGFjZXMpIHsKICAgICAgICAgICAgIG1fdHJhaWxp
bmdPYmplY3RzLmNsZWFyKCk7Ci0gICAgICAgICAgICBlbnN1cmVMaW5lQm94SW5zaWRlSWdub3Jl
ZFNwYWNlcyhtX2xpbmVNaWRwb2ludFN0YXRlLCBtX2N1cnJlbnQubV9vYmopOwotICAgICAgICB9
IGVsc2UgaWYgKG1fYmxvY2tTdHlsZS5jb2xsYXBzZVdoaXRlU3BhY2UoKSAmJiBtX3Jlc29sdmVy
LnBvc2l0aW9uKCkubV9vYmogPT0gbV9jdXJyZW50Lm1fb2JqCi0gICAgICAgICAgICAmJiBzaG91
bGRTa2lwV2hpdGVzcGFjZUFmdGVyU3RhcnRPYmplY3QobV9ibG9jaywgbV9jdXJyZW50Lm1fb2Jq
LCBtX2xpbmVNaWRwb2ludFN0YXRlKSkgeworICAgICAgICAgICAgZW5zdXJlTGluZUJveEluc2lk
ZUlnbm9yZWRTcGFjZXMobV9saW5lTWlkcG9pbnRTdGF0ZSwgbV9jdXJyZW50LnJlbmRlcmVyKCkp
OworICAgICAgICB9IGVsc2UgaWYgKG1fYmxvY2tTdHlsZS5jb2xsYXBzZVdoaXRlU3BhY2UoKSAm
JiBtX3Jlc29sdmVyLnBvc2l0aW9uKCkucmVuZGVyZXIoKSA9PSBtX2N1cnJlbnQucmVuZGVyZXIo
KQorICAgICAgICAgICAgJiYgc2hvdWxkU2tpcFdoaXRlc3BhY2VBZnRlclN0YXJ0T2JqZWN0KG1f
YmxvY2ssIG1fY3VycmVudC5yZW5kZXJlcigpLCBtX2xpbmVNaWRwb2ludFN0YXRlKSkgewogICAg
ICAgICAgICAgLy8gTGlrZSB3aXRoIGxpc3QgbWFya2Vycywgd2Ugc3RhcnQgaWdub3Jpbmcgc3Bh
Y2VzIHRvIG1ha2Ugc3VyZSB0aGF0IGFueQogICAgICAgICAgICAgLy8gYWRkaXRpb25hbCBzcGFj
ZXMgd2Ugc2VlIHdpbGwgYmUgZGlzY2FyZGVkLgogICAgICAgICAgICAgbV9jdXJyZW50Q2hhcmFj
dGVySXNTcGFjZSA9IHRydWU7CkBAIC01MjQsMjQgKzUyNCwyNCBAQCBpbmxpbmUgdm9pZCBCcmVh
a2luZ0NvbnRleHQ6OmhhbmRsZUVtcHR5SW5saW5lKCkKICAgICAgICAgICAgIG1fdHJhaWxpbmdP
YmplY3RzLmFwcGVuZEJveElmTmVlZGVkKCZmbG93Qm94KTsKICAgICB9CiAKLSAgICBtX3dpZHRo
LmFkZFVuY29tbWl0dGVkV2lkdGgoaW5saW5lTG9naWNhbFdpZHRoKG1fY3VycmVudC5tX29iaikg
KyBib3JkZXJQYWRkaW5nTWFyZ2luU3RhcnQoZmxvd0JveCkgKyBib3JkZXJQYWRkaW5nTWFyZ2lu
RW5kKGZsb3dCb3gpKTsKKyAgICBtX3dpZHRoLmFkZFVuY29tbWl0dGVkV2lkdGgoaW5saW5lTG9n
aWNhbFdpZHRoKG1fY3VycmVudC5yZW5kZXJlcigpKSArIGJvcmRlclBhZGRpbmdNYXJnaW5TdGFy
dChmbG93Qm94KSArIGJvcmRlclBhZGRpbmdNYXJnaW5FbmQoZmxvd0JveCkpOwogfQogCiBpbmxp
bmUgdm9pZCBCcmVha2luZ0NvbnRleHQ6OmhhbmRsZVJlcGxhY2VkKCkKIHsKLSAgICBSZW5kZXJC
b3gmIHJlcGxhY2VkQm94ID0gdG9SZW5kZXJCb3goKm1fY3VycmVudC5tX29iaik7CisgICAgUmVu
ZGVyQm94JiByZXBsYWNlZEJveCA9IHRvUmVuZGVyQm94KCptX2N1cnJlbnQucmVuZGVyZXIoKSk7
CiAKICAgICBpZiAobV9hdFN0YXJ0KQogICAgICAgICBtX3dpZHRoLnVwZGF0ZUF2YWlsYWJsZVdp
ZHRoKHJlcGxhY2VkQm94LmxvZ2ljYWxIZWlnaHQoKSk7CiAKICAgICAvLyBCcmVhayBvbiByZXBs
YWNlZCBlbGVtZW50cyBpZiBlaXRoZXIgaGFzIG5vcm1hbCB3aGl0ZS1zcGFjZS4KLSAgICBpZiAo
KG1fYXV0b1dyYXAgfHwgUmVuZGVyU3R5bGU6OmF1dG9XcmFwKG1fbGFzdFdTKSkgJiYgKCFtX2N1
cnJlbnQubV9vYmotPmlzSW1hZ2UoKSB8fCBtX2FsbG93SW1hZ2VzVG9CcmVhaykpIHsKKyAgICBp
ZiAoKG1fYXV0b1dyYXAgfHwgUmVuZGVyU3R5bGU6OmF1dG9XcmFwKG1fbGFzdFdTKSkgJiYgKCFt
X2N1cnJlbnQucmVuZGVyZXIoKS0+aXNJbWFnZSgpIHx8IG1fYWxsb3dJbWFnZXNUb0JyZWFrKSkg
ewogICAgICAgICBtX3dpZHRoLmNvbW1pdCgpOwotICAgICAgICBtX2xpbmVCcmVhay5tb3ZlVG9T
dGFydE9mKG1fY3VycmVudC5tX29iaik7CisgICAgICAgIG1fbGluZUJyZWFrLm1vdmVUb1N0YXJ0
T2YobV9jdXJyZW50LnJlbmRlcmVyKCkpOwogICAgIH0KIAogICAgIGlmIChtX2lnbm9yaW5nU3Bh
Y2VzKQotICAgICAgICBzdG9wSWdub3JpbmdTcGFjZXMobV9saW5lTWlkcG9pbnRTdGF0ZSwgSW5s
aW5lSXRlcmF0b3IoMCwgbV9jdXJyZW50Lm1fb2JqLCAwKSk7CisgICAgICAgIHN0b3BJZ25vcmlu
Z1NwYWNlcyhtX2xpbmVNaWRwb2ludFN0YXRlLCBJbmxpbmVJdGVyYXRvcigwLCBtX2N1cnJlbnQu
cmVuZGVyZXIoKSwgMCkpOwogCiAgICAgbV9saW5lSW5mby5zZXRFbXB0eShmYWxzZSwgJm1fYmxv
Y2ssICZtX3dpZHRoKTsKICAgICBtX2lnbm9yaW5nU3BhY2VzID0gZmFsc2U7CkBAIC01NTEsMjEg
KzU1MSwyMSBAQCBpbmxpbmUgdm9pZCBCcmVha2luZ0NvbnRleHQ6OmhhbmRsZVJlcGxhY2VkKCkK
IAogICAgIC8vIE9wdGltaXplIGZvciBhIGNvbW1vbiBjYXNlLiBJZiB3ZSBjYW4ndCBmaW5kIHdo
aXRlc3BhY2UgYWZ0ZXIgdGhlIGxpc3QKICAgICAvLyBpdGVtLCB0aGVuIHRoaXMgaXMgYWxsIG1v
b3QuCi0gICAgTGF5b3V0VW5pdCByZXBsYWNlZExvZ2ljYWxXaWR0aCA9IG1fYmxvY2subG9naWNh
bFdpZHRoRm9yQ2hpbGQocmVwbGFjZWRCb3gpICsgbV9ibG9jay5tYXJnaW5TdGFydEZvckNoaWxk
KHJlcGxhY2VkQm94KSArIG1fYmxvY2subWFyZ2luRW5kRm9yQ2hpbGQocmVwbGFjZWRCb3gpICsg
aW5saW5lTG9naWNhbFdpZHRoKG1fY3VycmVudC5tX29iaik7Ci0gICAgaWYgKG1fY3VycmVudC5t
X29iai0+aXNMaXN0TWFya2VyKCkpIHsKLSAgICAgICAgaWYgKG1fYmxvY2tTdHlsZS5jb2xsYXBz
ZVdoaXRlU3BhY2UoKSAmJiBzaG91bGRTa2lwV2hpdGVzcGFjZUFmdGVyU3RhcnRPYmplY3QobV9i
bG9jaywgbV9jdXJyZW50Lm1fb2JqLCBtX2xpbmVNaWRwb2ludFN0YXRlKSkgeworICAgIExheW91
dFVuaXQgcmVwbGFjZWRMb2dpY2FsV2lkdGggPSBtX2Jsb2NrLmxvZ2ljYWxXaWR0aEZvckNoaWxk
KHJlcGxhY2VkQm94KSArIG1fYmxvY2subWFyZ2luU3RhcnRGb3JDaGlsZChyZXBsYWNlZEJveCkg
KyBtX2Jsb2NrLm1hcmdpbkVuZEZvckNoaWxkKHJlcGxhY2VkQm94KSArIGlubGluZUxvZ2ljYWxX
aWR0aChtX2N1cnJlbnQucmVuZGVyZXIoKSk7CisgICAgaWYgKG1fY3VycmVudC5yZW5kZXJlcigp
LT5pc0xpc3RNYXJrZXIoKSkgeworICAgICAgICBpZiAobV9ibG9ja1N0eWxlLmNvbGxhcHNlV2hp
dGVTcGFjZSgpICYmIHNob3VsZFNraXBXaGl0ZXNwYWNlQWZ0ZXJTdGFydE9iamVjdChtX2Jsb2Nr
LCBtX2N1cnJlbnQucmVuZGVyZXIoKSwgbV9saW5lTWlkcG9pbnRTdGF0ZSkpIHsKICAgICAgICAg
ICAgIC8vIExpa2Ugd2l0aCBpbmxpbmUgZmxvd3MsIHdlIHN0YXJ0IGlnbm9yaW5nIHNwYWNlcyB0
byBtYWtlIHN1cmUgdGhhdCBhbnkKICAgICAgICAgICAgIC8vIGFkZGl0aW9uYWwgc3BhY2VzIHdl
IHNlZSB3aWxsIGJlIGRpc2NhcmRlZC4KICAgICAgICAgICAgIG1fY3VycmVudENoYXJhY3Rlcklz
U3BhY2UgPSB0cnVlOwogICAgICAgICAgICAgbV9jdXJyZW50Q2hhcmFjdGVySXNXUyA9IGZhbHNl
OwogICAgICAgICAgICAgbV9pZ25vcmluZ1NwYWNlcyA9IHRydWU7CiAgICAgICAgIH0KLSAgICAg
ICAgaWYgKHRvUmVuZGVyTGlzdE1hcmtlcigqbV9jdXJyZW50Lm1fb2JqKS5pc0luc2lkZSgpKQor
ICAgICAgICBpZiAodG9SZW5kZXJMaXN0TWFya2VyKCptX2N1cnJlbnQucmVuZGVyZXIoKSkuaXNJ
bnNpZGUoKSkKICAgICAgICAgICAgIG1fd2lkdGguYWRkVW5jb21taXR0ZWRXaWR0aChyZXBsYWNl
ZExvZ2ljYWxXaWR0aCk7CiAgICAgfSBlbHNlCiAgICAgICAgIG1fd2lkdGguYWRkVW5jb21taXR0
ZWRXaWR0aChyZXBsYWNlZExvZ2ljYWxXaWR0aCk7Ci0gICAgaWYgKG1fY3VycmVudC5tX29iai0+
aXNSdWJ5UnVuKCkpCi0gICAgICAgIG1fd2lkdGguYXBwbHlPdmVyaGFuZyh0b1JlbmRlclJ1YnlS
dW4obV9jdXJyZW50Lm1fb2JqKSwgbV9sYXN0T2JqZWN0LCBtX25leHRPYmplY3QpOworICAgIGlm
IChtX2N1cnJlbnQucmVuZGVyZXIoKS0+aXNSdWJ5UnVuKCkpCisgICAgICAgIG1fd2lkdGguYXBw
bHlPdmVyaGFuZyh0b1JlbmRlclJ1YnlSdW4obV9jdXJyZW50LnJlbmRlcmVyKCkpLCBtX2xhc3RP
YmplY3QsIG1fbmV4dE9iamVjdCk7CiAgICAgLy8gVXBkYXRlIHByaW9yIGxpbmUgYnJlYWsgY29u
dGV4dCBjaGFyYWN0ZXJzLCB1c2luZyBVK0ZGRkQgKE9CSkVDVCBSRVBMQUNFTUVOVCBDSEFSQUNU
RVIpIGZvciByZXBsYWNlZCBlbGVtZW50LgogICAgIG1fcmVuZGVyVGV4dEluZm8ubV9saW5lQnJl
YWtJdGVyYXRvci51cGRhdGVQcmlvckNvbnRleHQocmVwbGFjZW1lbnRDaGFyYWN0ZXIpOwogfQpA
QCAtNjI0LDcgKzYyNCw3IEBAIGlubGluZSB2b2lkIHVwZGF0ZVNlZ21lbnRzRm9yU2hhcGVzKFJl
bmRlckJsb2NrRmxvdyYgYmxvY2ssIGNvbnN0IEZsb2F0aW5nT2JqZWN0CiAKIGlubGluZSBib29s
IGl0ZXJhdG9ySXNCZXlvbmRFbmRPZlJlbmRlckNvbWJpbmVUZXh0KGNvbnN0IElubGluZUl0ZXJh
dG9yJiBpdGVyLCBSZW5kZXJDb21iaW5lVGV4dCYgcmVuZGVyZXIpCiB7Ci0gICAgcmV0dXJuIGl0
ZXIubV9vYmogPT0gJnJlbmRlcmVyICYmIGl0ZXIubV9wb3MgPj0gcmVuZGVyZXIudGV4dExlbmd0
aCgpOworICAgIHJldHVybiBpdGVyLnJlbmRlcmVyKCkgPT0gJnJlbmRlcmVyICYmIGl0ZXIubV9w
b3MgPj0gcmVuZGVyZXIudGV4dExlbmd0aCgpOwogfQogCiBpbmxpbmUgdm9pZCBuZXh0Q2hhcmFj
dGVyKFVDaGFyJiBjdXJyZW50Q2hhcmFjdGVyLCBVQ2hhciYgbGFzdENoYXJhY3RlciwgVUNoYXIm
IHNlY29uZFRvTGFzdENoYXJhY3RlcikKQEAgLTY3Miw5ICs2NzIsOSBAQCBBTFdBWVNfSU5MSU5F
IGZsb2F0IHRleHRXaWR0aChSZW5kZXJUZXh0KiB0ZXh0LCB1bnNpZ25lZCBmcm9tLCB1bnNpZ25l
ZCBsZW4sIGNvbgogLy8gQWRkaW5nIGEgcGFpciBvZiBtaWRwb2ludHMgYmVmb3JlIGEgY2hhcmFj
dGVyIHdpbGwgc3BsaXQgaXQgb3V0IGludG8gYSBuZXcgbGluZSBib3guCiBpbmxpbmUgdm9pZCBl
bnN1cmVDaGFyYWN0ZXJHZXRzTGluZUJveChMaW5lTWlkcG9pbnRTdGF0ZSYgbGluZU1pZHBvaW50
U3RhdGUsIElubGluZUl0ZXJhdG9yJiB0ZXh0UGFyYWdyYXBoU2VwYXJhdG9yKQogewotICAgIElu
bGluZUl0ZXJhdG9yIG1pZHBvaW50KDAsIHRleHRQYXJhZ3JhcGhTZXBhcmF0b3IubV9vYmosIHRl
eHRQYXJhZ3JhcGhTZXBhcmF0b3IubV9wb3MpOwotICAgIHN0YXJ0SWdub3JpbmdTcGFjZXMobGlu
ZU1pZHBvaW50U3RhdGUsIElubGluZUl0ZXJhdG9yKDAsIHRleHRQYXJhZ3JhcGhTZXBhcmF0b3Iu
bV9vYmosIHRleHRQYXJhZ3JhcGhTZXBhcmF0b3IubV9wb3MgLSAxKSk7Ci0gICAgc3RvcElnbm9y
aW5nU3BhY2VzKGxpbmVNaWRwb2ludFN0YXRlLCBJbmxpbmVJdGVyYXRvcigwLCB0ZXh0UGFyYWdy
YXBoU2VwYXJhdG9yLm1fb2JqLCB0ZXh0UGFyYWdyYXBoU2VwYXJhdG9yLm1fcG9zKSk7CisgICAg
SW5saW5lSXRlcmF0b3IgbWlkcG9pbnQoMCwgdGV4dFBhcmFncmFwaFNlcGFyYXRvci5yZW5kZXJl
cigpLCB0ZXh0UGFyYWdyYXBoU2VwYXJhdG9yLm1fcG9zKTsKKyAgICBzdGFydElnbm9yaW5nU3Bh
Y2VzKGxpbmVNaWRwb2ludFN0YXRlLCBJbmxpbmVJdGVyYXRvcigwLCB0ZXh0UGFyYWdyYXBoU2Vw
YXJhdG9yLnJlbmRlcmVyKCksIHRleHRQYXJhZ3JhcGhTZXBhcmF0b3IubV9wb3MgLSAxKSk7Cisg
ICAgc3RvcElnbm9yaW5nU3BhY2VzKGxpbmVNaWRwb2ludFN0YXRlLCBJbmxpbmVJdGVyYXRvcigw
LCB0ZXh0UGFyYWdyYXBoU2VwYXJhdG9yLnJlbmRlcmVyKCksIHRleHRQYXJhZ3JhcGhTZXBhcmF0
b3IubV9wb3MpKTsKIH0KIAogaW5saW5lIHZvaWQgdHJ5SHlwaGVuYXRpbmcoUmVuZGVyVGV4dCog
dGV4dCwgY29uc3QgRm9udCYgZm9udCwgY29uc3QgQXRvbWljU3RyaW5nJiBsb2NhbGVJZGVudGlm
aWVyLCB1bnNpZ25lZCBjb25zZWN1dGl2ZUh5cGhlbmF0ZWRMaW5lcywgaW50IGNvbnNlY3V0aXZl
SHlwaGVuYXRlZExpbmVzTGltaXQsIGludCBtaW5pbXVtUHJlZml4TGltaXQsIGludCBtaW5pbXVt
U3VmZml4TGltaXQsIHVuc2lnbmVkIGxhc3RTcGFjZSwgdW5zaWduZWQgcG9zLCBmbG9hdCB4UG9z
LCBpbnQgYXZhaWxhYmxlV2lkdGgsIGJvb2wgaXNGaXhlZFBpdGNoLCBib29sIGNvbGxhcHNlV2hp
dGVTcGFjZSwgaW50IGxhc3RTcGFjZVdvcmRTcGFjaW5nLCBJbmxpbmVJdGVyYXRvciYgbGluZUJy
ZWFrLCBpbnQgbmV4dEJyZWFrYWJsZSwgYm9vbCYgaHlwaGVuYXRlZCkKQEAgLTc1MCw3ICs3NTAs
NyBAQCBpbmxpbmUgYm9vbCBCcmVha2luZ0NvbnRleHQ6OmhhbmRsZVRleHQoV29yZE1lYXN1cmVt
ZW50cyYgd29yZE1lYXN1cmVtZW50cywgYm9vbAogICAgIGlmICghbV9jdXJyZW50Lm1fcG9zKQog
ICAgICAgICBtX2FwcGxpZWRTdGFydFdpZHRoID0gZmFsc2U7CiAKLSAgICBSZW5kZXJUZXh0KiBy
ZW5kZXJUZXh0ID0gdG9SZW5kZXJUZXh0KG1fY3VycmVudC5tX29iaik7CisgICAgUmVuZGVyVGV4
dCogcmVuZGVyVGV4dCA9IHRvUmVuZGVyVGV4dChtX2N1cnJlbnQucmVuZGVyZXIoKSk7CiAKICNp
ZiBFTkFCTEUoU1ZHKQogICAgIGJvb2wgaXNTVkdUZXh0ID0gcmVuZGVyVGV4dC0+aXNTVkdJbmxp
bmVUZXh0KCk7CkBAIC03NTksMTAgKzc1OSwxMCBAQCBpbmxpbmUgYm9vbCBCcmVha2luZ0NvbnRl
eHQ6OmhhbmRsZVRleHQoV29yZE1lYXN1cmVtZW50cyYgd29yZE1lYXN1cmVtZW50cywgYm9vbAog
ICAgIC8vIElmIHdlIGhhdmUgbGVmdCBhIG5vLXdyYXAgaW5saW5lIGFuZCBlbnRlcmVkIGFuIGF1
dG93cmFwIGlubGluZSB3aGlsZSBpZ25vcmluZyBzcGFjZXMKICAgICAvLyB0aGVuIHdlIG5lZWQg
dG8gbWFyayB0aGUgc3RhcnQgb2YgdGhlIGF1dG93cmFwIGlubGluZSBhcyBhIHBvdGVudGlhbCBs
aW5lYnJlYWsgbm93LgogICAgIGlmIChtX2F1dG9XcmFwICYmICFSZW5kZXJTdHlsZTo6YXV0b1dy
YXAobV9sYXN0V1MpICYmIG1faWdub3JpbmdTcGFjZXMpCi0gICAgICAgIGNvbW1pdExpbmVCcmVh
a0F0Q3VycmVudFdpZHRoKG1fY3VycmVudC5tX29iaik7CisgICAgICAgIGNvbW1pdExpbmVCcmVh
a0F0Q3VycmVudFdpZHRoKG1fY3VycmVudC5yZW5kZXJlcigpKTsKIAotICAgIGlmIChyZW5kZXJU
ZXh0LT5zdHlsZSgpLmhhc1RleHRDb21iaW5lKCkgJiYgbV9jdXJyZW50Lm1fb2JqLT5pc0NvbWJp
bmVUZXh0KCkgJiYgIXRvUmVuZGVyQ29tYmluZVRleHQoKm1fY3VycmVudC5tX29iaikuaXNDb21i
aW5lZCgpKSB7Ci0gICAgICAgIFJlbmRlckNvbWJpbmVUZXh0JiBjb21iaW5lUmVuZGVyZXIgPSB0
b1JlbmRlckNvbWJpbmVUZXh0KCptX2N1cnJlbnQubV9vYmopOworICAgIGlmIChyZW5kZXJUZXh0
LT5zdHlsZSgpLmhhc1RleHRDb21iaW5lKCkgJiYgbV9jdXJyZW50LnJlbmRlcmVyKCktPmlzQ29t
YmluZVRleHQoKSAmJiAhdG9SZW5kZXJDb21iaW5lVGV4dCgqbV9jdXJyZW50LnJlbmRlcmVyKCkp
LmlzQ29tYmluZWQoKSkgeworICAgICAgICBSZW5kZXJDb21iaW5lVGV4dCYgY29tYmluZVJlbmRl
cmVyID0gdG9SZW5kZXJDb21iaW5lVGV4dCgqbV9jdXJyZW50LnJlbmRlcmVyKCkpOwogICAgICAg
ICBjb21iaW5lUmVuZGVyZXIuY29tYmluZVRleHQoKTsKICAgICAgICAgLy8gVGhlIGxlbmd0aCBv
ZiB0aGUgcmVuZGVyZXIncyB0ZXh0IG1heSBoYXZlIGNoYW5nZWQuIEluY3JlbWVudCBzdGFsZSBp
dGVyYXRvciBwb3NpdGlvbnMKICAgICAgICAgaWYgKGl0ZXJhdG9ySXNCZXlvbmRFbmRPZlJlbmRl
ckNvbWJpbmVUZXh0KG1fbGluZUJyZWFrLCBjb21iaW5lUmVuZGVyZXIpKSB7CkBAIC03ODIsNyAr
NzgyLDcgQEAgaW5saW5lIGJvb2wgQnJlYWtpbmdDb250ZXh0OjpoYW5kbGVUZXh0KFdvcmRNZWFz
dXJlbWVudHMmIHdvcmRNZWFzdXJlbWVudHMsIGJvb2wKICAgICBmbG9hdCBsYXN0U3BhY2VXb3Jk
U3BhY2luZyA9IDA7CiAgICAgZmxvYXQgd29yZFNwYWNpbmdGb3JXb3JkTWVhc3VyZW1lbnQgPSAw
OwogCi0gICAgZmxvYXQgd3JhcFcgPSBtX3dpZHRoLnVuY29tbWl0dGVkV2lkdGgoKSArIGlubGlu
ZUxvZ2ljYWxXaWR0aChtX2N1cnJlbnQubV9vYmosICFtX2FwcGxpZWRTdGFydFdpZHRoLCB0cnVl
KTsKKyAgICBmbG9hdCB3cmFwVyA9IG1fd2lkdGgudW5jb21taXR0ZWRXaWR0aCgpICsgaW5saW5l
TG9naWNhbFdpZHRoKG1fY3VycmVudC5yZW5kZXJlcigpLCAhbV9hcHBsaWVkU3RhcnRXaWR0aCwg
dHJ1ZSk7CiAgICAgZmxvYXQgY2hhcldpZHRoID0gMDsKICAgICBib29sIGJyZWFrTkJTUCA9IG1f
YXV0b1dyYXAgJiYgbV9jdXJyZW50U3R5bGUtPm5ic3BNb2RlKCkgPT0gU1BBQ0U7CiAgICAgLy8g
QXV0by13cmFwcGluZyB0ZXh0IHNob3VsZCB3cmFwIGluIHRoZSBtaWRkbGUgb2YgYSB3b3JkIG9u
bHkgaWYgaXQgY291bGQgbm90IHdyYXAgYmVmb3JlIHRoZSB3b3JkLApAQCAtODU2LDcgKzg1Niw3
IEBAIGlubGluZSBib29sIEJyZWFraW5nQ29udGV4dDo6aGFuZGxlVGV4dChXb3JkTWVhc3VyZW1l
bnRzJiB3b3JkTWVhc3VyZW1lbnRzLCBib29sCiAgICAgICAgICAgICAgICAgICAgIG1faWdub3Jp
bmdTcGFjZXMgPSBmYWxzZTsKICAgICAgICAgICAgICAgICAgICAgd29yZFNwYWNpbmdGb3JXb3Jk
TWVhc3VyZW1lbnQgPSAwOwogICAgICAgICAgICAgICAgICAgICBsYXN0U3BhY2UgPSBtX2N1cnJl
bnQubV9wb3M7IC8vIGUuZy4sICJGb28gICAgZ29vIiwgZG9uJ3QgYWRkIGluIGFueSBvZiB0aGUg
aWdub3JlZCBzcGFjZXMuCi0gICAgICAgICAgICAgICAgICAgIHN0b3BJZ25vcmluZ1NwYWNlcyht
X2xpbmVNaWRwb2ludFN0YXRlLCBJbmxpbmVJdGVyYXRvcigwLCBtX2N1cnJlbnQubV9vYmosIG1f
Y3VycmVudC5tX3BvcykpOworICAgICAgICAgICAgICAgICAgICBzdG9wSWdub3JpbmdTcGFjZXMo
bV9saW5lTWlkcG9pbnRTdGF0ZSwgSW5saW5lSXRlcmF0b3IoMCwgbV9jdXJyZW50LnJlbmRlcmVy
KCksIG1fY3VycmVudC5tX3BvcykpOwogICAgICAgICAgICAgICAgICAgICBzdG9wcGVkSWdub3Jp
bmdTcGFjZXMgPSB0cnVlOwogICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAg
ICAgICAgIC8vIEp1c3Qga2VlcCBpZ25vcmluZyB0aGVzZSBzcGFjZXMuCkBAIC04OTAsNyArODkw
LDcgQEAgaW5saW5lIGJvb2wgQnJlYWtpbmdDb250ZXh0OjpoYW5kbGVUZXh0KFdvcmRNZWFzdXJl
bWVudHMmIHdvcmRNZWFzdXJlbWVudHMsIGJvb2wKICAgICAgICAgICAgICAgICBtX3dpZHRoLnNl
dFRyYWlsaW5nV2hpdGVzcGFjZVdpZHRoKGFkZGl0aW9uYWxUZW1wV2lkdGgpOwogCiAgICAgICAg
ICAgICBpZiAoIW1fYXBwbGllZFN0YXJ0V2lkdGgpIHsKLSAgICAgICAgICAgICAgICBtX3dpZHRo
LmFkZFVuY29tbWl0dGVkV2lkdGgoaW5saW5lTG9naWNhbFdpZHRoKG1fY3VycmVudC5tX29iaiwg
dHJ1ZSwgZmFsc2UpKTsKKyAgICAgICAgICAgICAgICBtX3dpZHRoLmFkZFVuY29tbWl0dGVkV2lk
dGgoaW5saW5lTG9naWNhbFdpZHRoKG1fY3VycmVudC5yZW5kZXJlcigpLCB0cnVlLCBmYWxzZSkp
OwogICAgICAgICAgICAgICAgIG1fYXBwbGllZFN0YXJ0V2lkdGggPSB0cnVlOwogICAgICAgICAg
ICAgfQogCkBAIC05MTYsNyArOTE2LDcgQEAgaW5saW5lIGJvb2wgQnJlYWtpbmdDb250ZXh0Ojpo
YW5kbGVUZXh0KFdvcmRNZWFzdXJlbWVudHMmIHdvcmRNZWFzdXJlbWVudHMsIGJvb2wKICAgICAg
ICAgICAgICAgICAgICAgLy8gYWRkaXRpb25hbCB3aGl0ZXNwYWNlLgogICAgICAgICAgICAgICAg
ICAgICBpZiAoIW1fd2lkdGguZml0c09uTGluZUluY2x1ZGluZ0V4dHJhV2lkdGgoY2hhcldpZHRo
KSkgewogICAgICAgICAgICAgICAgICAgICAgICAgbGluZVdhc1Rvb1dpZGUgPSB0cnVlOwotICAg
ICAgICAgICAgICAgICAgICAgICAgbV9saW5lQnJlYWsubW92ZVRvKG1fY3VycmVudC5tX29iaiwg
bV9jdXJyZW50Lm1fcG9zLCBtX2N1cnJlbnQubV9uZXh0QnJlYWthYmxlUG9zaXRpb24pOworICAg
ICAgICAgICAgICAgICAgICAgICAgbV9saW5lQnJlYWsubW92ZVRvKG1fY3VycmVudC5yZW5kZXJl
cigpLCBtX2N1cnJlbnQubV9wb3MsIG1fY3VycmVudC5tX25leHRCcmVha2FibGVQb3NpdGlvbik7
CiAgICAgICAgICAgICAgICAgICAgICAgICBtX2xpbmVCcmVha2VyLnNraXBUcmFpbGluZ1doaXRl
c3BhY2UobV9saW5lQnJlYWssIG1fbGluZUluZm8pOwogICAgICAgICAgICAgICAgICAgICB9CiAg
ICAgICAgICAgICAgICAgfQpAQCAtOTM1LDcgKzkzNSw3IEBAIGlubGluZSBib29sIEJyZWFraW5n
Q29udGV4dDo6aGFuZGxlVGV4dChXb3JkTWVhc3VyZW1lbnRzJiB3b3JkTWVhc3VyZW1lbnRzLCBi
b29sCiAgICAgICAgICAgICAgICAgICAgICAgICBtX2xpbmVJbmZvLnNldFByZXZpb3VzTGluZUJy
b2tlQ2xlYW5seSh0cnVlKTsKICAgICAgICAgICAgICAgICAgICAgICAgIHdvcmRNZWFzdXJlbWVu
dC5lbmRPZmZzZXQgPSBtX2xpbmVCcmVhay5tX3BvczsKICAgICAgICAgICAgICAgICAgICAgfQot
ICAgICAgICAgICAgICAgICAgICBpZiAobV9saW5lQnJlYWsubV9vYmogJiYgbV9saW5lQnJlYWsu
bV9wb3MgJiYgbV9saW5lQnJlYWsubV9vYmotPmlzVGV4dCgpICYmIHRvUmVuZGVyVGV4dChtX2xp
bmVCcmVhay5tX29iaiktPnRleHRMZW5ndGgoKSAmJiB0b1JlbmRlclRleHQobV9saW5lQnJlYWsu
bV9vYmopLT5jaGFyYWN0ZXJBdChtX2xpbmVCcmVhay5tX3BvcyAtIDEpID09IHNvZnRIeXBoZW4g
JiYgc3R5bGUuaHlwaGVucygpICE9IEh5cGhlbnNOb25lKQorICAgICAgICAgICAgICAgICAgICBp
ZiAobV9saW5lQnJlYWsucmVuZGVyZXIoKSAmJiBtX2xpbmVCcmVhay5tX3BvcyAmJiBtX2xpbmVC
cmVhay5yZW5kZXJlcigpLT5pc1RleHQoKSAmJiB0b1JlbmRlclRleHQobV9saW5lQnJlYWsucmVu
ZGVyZXIoKSktPnRleHRMZW5ndGgoKSAmJiB0b1JlbmRlclRleHQobV9saW5lQnJlYWsucmVuZGVy
ZXIoKSktPmNoYXJhY3RlckF0KG1fbGluZUJyZWFrLm1fcG9zIC0gMSkgPT0gc29mdEh5cGhlbiAm
JiBzdHlsZS5oeXBoZW5zKCkgIT0gSHlwaGVuc05vbmUpCiAgICAgICAgICAgICAgICAgICAgICAg
ICBoeXBoZW5hdGVkID0gdHJ1ZTsKICAgICAgICAgICAgICAgICAgICAgaWYgKG1fbGluZUJyZWFr
Lm1fcG9zICYmIG1fbGluZUJyZWFrLm1fcG9zICE9ICh1bnNpZ25lZCl3b3JkTWVhc3VyZW1lbnQu
ZW5kT2Zmc2V0ICYmICF3b3JkTWVhc3VyZW1lbnQud2lkdGgpIHsKICAgICAgICAgICAgICAgICAg
ICAgICAgIGlmIChjaGFyV2lkdGgpIHsKQEAgLTk2Miw3ICs5NjIsNyBAQCBpbmxpbmUgYm9vbCBC
cmVha2luZ0NvbnRleHQ6OmhhbmRsZVRleHQoV29yZE1lYXN1cmVtZW50cyYgd29yZE1lYXN1cmVt
ZW50cywgYm9vbAogICAgICAgICAgICAgaWYgKGMgPT0gJ1xuJyAmJiBtX3ByZXNlcnZlc05ld2xp
bmUpIHsKICAgICAgICAgICAgICAgICBpZiAoIXN0b3BwZWRJZ25vcmluZ1NwYWNlcyAmJiBtX2N1
cnJlbnQubV9wb3MgPiAwKQogICAgICAgICAgICAgICAgICAgICBlbnN1cmVDaGFyYWN0ZXJHZXRz
TGluZUJveChtX2xpbmVNaWRwb2ludFN0YXRlLCBtX2N1cnJlbnQpOwotICAgICAgICAgICAgICAg
IG1fbGluZUJyZWFrLm1vdmVUbyhtX2N1cnJlbnQubV9vYmosIG1fY3VycmVudC5tX3BvcywgbV9j
dXJyZW50Lm1fbmV4dEJyZWFrYWJsZVBvc2l0aW9uKTsKKyAgICAgICAgICAgICAgICBtX2xpbmVC
cmVhay5tb3ZlVG8obV9jdXJyZW50LnJlbmRlcmVyKCksIG1fY3VycmVudC5tX3BvcywgbV9jdXJy
ZW50Lm1fbmV4dEJyZWFrYWJsZVBvc2l0aW9uKTsKICAgICAgICAgICAgICAgICBtX2xpbmVCcmVh
ay5pbmNyZW1lbnQoKTsKICAgICAgICAgICAgICAgICBtX2xpbmVJbmZvLnNldFByZXZpb3VzTGlu
ZUJyb2tlQ2xlYW5seSh0cnVlKTsKICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKQEAgLTk3
MSw3ICs5NzEsNyBAQCBpbmxpbmUgYm9vbCBCcmVha2luZ0NvbnRleHQ6OmhhbmRsZVRleHQoV29y
ZE1lYXN1cmVtZW50cyYgd29yZE1lYXN1cmVtZW50cywgYm9vbAogICAgICAgICAgICAgaWYgKG1f
YXV0b1dyYXAgJiYgYmV0d2VlbldvcmRzKSB7CiAgICAgICAgICAgICAgICAgbV93aWR0aC5jb21t
aXQoKTsKICAgICAgICAgICAgICAgICB3cmFwVyA9IDA7Ci0gICAgICAgICAgICAgICAgbV9saW5l
QnJlYWsubW92ZVRvKG1fY3VycmVudC5tX29iaiwgbV9jdXJyZW50Lm1fcG9zLCBtX2N1cnJlbnQu
bV9uZXh0QnJlYWthYmxlUG9zaXRpb24pOworICAgICAgICAgICAgICAgIG1fbGluZUJyZWFrLm1v
dmVUbyhtX2N1cnJlbnQucmVuZGVyZXIoKSwgbV9jdXJyZW50Lm1fcG9zLCBtX2N1cnJlbnQubV9u
ZXh0QnJlYWthYmxlUG9zaXRpb24pOwogICAgICAgICAgICAgICAgIC8vIEF1dG8td3JhcHBpbmcg
dGV4dCBzaG91bGQgbm90IHdyYXAgaW4gdGhlIG1pZGRsZSBvZiBhIHdvcmQgb25jZSBpdCBoYXMg
aGFkIGFuCiAgICAgICAgICAgICAgICAgLy8gb3Bwb3J0dW5pdHkgdG8gYnJlYWsgYWZ0ZXIgYSB3
b3JkLgogICAgICAgICAgICAgICAgIGJyZWFrV29yZHMgPSBmYWxzZTsKQEAgLTk4MCw3ICs5ODAs
NyBAQCBpbmxpbmUgYm9vbCBCcmVha2luZ0NvbnRleHQ6OmhhbmRsZVRleHQoV29yZE1lYXN1cmVt
ZW50cyYgd29yZE1lYXN1cmVtZW50cywgYm9vbAogICAgICAgICAgICAgaWYgKG1pZFdvcmRCcmVh
ayAmJiAhVTE2X0lTX1RSQUlMKGMpICYmICEoVV9HRVRfR0NfTUFTSyhjKSAmIFVfR0NfTV9NQVNL
KSkgewogICAgICAgICAgICAgICAgIC8vIFJlbWVtYmVyIHRoaXMgYXMgYSBicmVha2FibGUgcG9z
aXRpb24gaW4gY2FzZQogICAgICAgICAgICAgICAgIC8vIGFkZGluZyB0aGUgZW5kIHdpZHRoIGZv
cmNlcyBhIGJyZWFrLgotICAgICAgICAgICAgICAgIG1fbGluZUJyZWFrLm1vdmVUbyhtX2N1cnJl
bnQubV9vYmosIG1fY3VycmVudC5tX3BvcywgbV9jdXJyZW50Lm1fbmV4dEJyZWFrYWJsZVBvc2l0
aW9uKTsKKyAgICAgICAgICAgICAgICBtX2xpbmVCcmVhay5tb3ZlVG8obV9jdXJyZW50LnJlbmRl
cmVyKCksIG1fY3VycmVudC5tX3BvcywgbV9jdXJyZW50Lm1fbmV4dEJyZWFrYWJsZVBvc2l0aW9u
KTsKICAgICAgICAgICAgICAgICBtaWRXb3JkQnJlYWsgJj0gKGJyZWFrV29yZHMgfHwgYnJlYWtB
bGwpOwogICAgICAgICAgICAgfQogCkBAIC0xMDExLDcgKzEwMTEsNyBAQCBpbmxpbmUgYm9vbCBC
cmVha2luZ0NvbnRleHQ6OmhhbmRsZVRleHQoV29yZE1lYXN1cmVtZW50cyYgd29yZE1lYXN1cmVt
ZW50cywgYm9vbAogICAgICAgICAgICAgbGFzdFNwYWNlV29yZFNwYWNpbmcgPSBhcHBseVdvcmRT
cGFjaW5nID8gd29yZFNwYWNpbmcgOiAwOwogICAgICAgICAgICAgd29yZFNwYWNpbmdGb3JXb3Jk
TWVhc3VyZW1lbnQgPSAoYXBwbHlXb3JkU3BhY2luZyAmJiB3b3JkTWVhc3VyZW1lbnRzLmxhc3Qo
KS53aWR0aCkgPyB3b3JkU3BhY2luZyA6IDA7CiAgICAgICAgICAgICBsYXN0U3BhY2UgPSBtX2N1
cnJlbnQubV9wb3M7IC8vIGUuZy4sICJGb28gICAgZ29vIiwgZG9uJ3QgYWRkIGluIGFueSBvZiB0
aGUgaWdub3JlZCBzcGFjZXMuCi0gICAgICAgICAgICBzdG9wSWdub3JpbmdTcGFjZXMobV9saW5l
TWlkcG9pbnRTdGF0ZSwgSW5saW5lSXRlcmF0b3IoMCwgbV9jdXJyZW50Lm1fb2JqLCBtX2N1cnJl
bnQubV9wb3MpKTsKKyAgICAgICAgICAgIHN0b3BJZ25vcmluZ1NwYWNlcyhtX2xpbmVNaWRwb2lu
dFN0YXRlLCBJbmxpbmVJdGVyYXRvcigwLCBtX2N1cnJlbnQucmVuZGVyZXIoKSwgbV9jdXJyZW50
Lm1fcG9zKSk7CiAgICAgICAgIH0KICNpZiBFTkFCTEUoU1ZHKQogICAgICAgICBpZiAoaXNTVkdU
ZXh0ICYmIG1fY3VycmVudC5tX3BvcyA+IDApIHsKQEAgLTEwMjIsNyArMTAyMiw3IEBAIGlubGlu
ZSBib29sIEJyZWFraW5nQ29udGV4dDo6aGFuZGxlVGV4dChXb3JkTWVhc3VyZW1lbnRzJiB3b3Jk
TWVhc3VyZW1lbnRzLCBib29sCiAjZW5kaWYKIAogICAgICAgICBpZiAobV9jdXJyZW50Q2hhcmFj
dGVySXNTcGFjZSAmJiAhcHJldmlvdXNDaGFyYWN0ZXJJc1NwYWNlKSB7Ci0gICAgICAgICAgICBt
X3N0YXJ0T2ZJZ25vcmVkU3BhY2VzLm1fb2JqID0gbV9jdXJyZW50Lm1fb2JqOworICAgICAgICAg
ICAgbV9zdGFydE9mSWdub3JlZFNwYWNlcy5zZXRSZW5kZXJlcihtX2N1cnJlbnQucmVuZGVyZXIo
KSk7CiAgICAgICAgICAgICBtX3N0YXJ0T2ZJZ25vcmVkU3BhY2VzLm1fcG9zID0gbV9jdXJyZW50
Lm1fcG9zOwogICAgICAgICAgICAgLy8gU3BhY2VzIGFmdGVyIHJpZ2h0LWFsaWduZWQgdGV4dCBh
bmQgYmVmb3JlIGEgbGluZS1icmVhayBnZXQgY29sbGFwc2VkIGF3YXkgY29tcGxldGVseSBzbyB0
aGF0IHRoZSB0cmFpbGluZwogICAgICAgICAgICAgLy8gc3BhY2UgZG9lc24ndCBzZWVtIHRvIHB1
c2ggdGhlIHRleHQgb3V0IGZyb20gdGhlIHJpZ2h0LWhhbmQgZWRnZS4KQEAgLTEwMzcsMTEgKzEw
MzcsMTEgQEAgaW5saW5lIGJvb2wgQnJlYWtpbmdDb250ZXh0OjpoYW5kbGVUZXh0KFdvcmRNZWFz
dXJlbWVudHMmIHdvcmRNZWFzdXJlbWVudHMsIGJvb2wKIAogICAgICAgICBpZiAoIW1fY3VycmVu
dENoYXJhY3RlcklzU3BhY2UgJiYgcHJldmlvdXNDaGFyYWN0ZXJJc1dTKSB7CiAgICAgICAgICAg
ICBpZiAobV9hdXRvV3JhcCAmJiBtX2N1cnJlbnRTdHlsZS0+YnJlYWtPbmx5QWZ0ZXJXaGl0ZVNw
YWNlKCkpCi0gICAgICAgICAgICAgICAgbV9saW5lQnJlYWsubW92ZVRvKG1fY3VycmVudC5tX29i
aiwgbV9jdXJyZW50Lm1fcG9zLCBtX2N1cnJlbnQubV9uZXh0QnJlYWthYmxlUG9zaXRpb24pOwor
ICAgICAgICAgICAgICAgIG1fbGluZUJyZWFrLm1vdmVUbyhtX2N1cnJlbnQucmVuZGVyZXIoKSwg
bV9jdXJyZW50Lm1fcG9zLCBtX2N1cnJlbnQubV9uZXh0QnJlYWthYmxlUG9zaXRpb24pOwogICAg
ICAgICB9CiAKICAgICAgICAgaWYgKG1fY29sbGFwc2VXaGl0ZVNwYWNlICYmIG1fY3VycmVudENo
YXJhY3RlcklzU3BhY2UgJiYgIW1faWdub3JpbmdTcGFjZXMpCi0gICAgICAgICAgICBtX3RyYWls
aW5nT2JqZWN0cy5zZXRUcmFpbGluZ1doaXRlc3BhY2UodG9SZW5kZXJUZXh0KG1fY3VycmVudC5t
X29iaikpOworICAgICAgICAgICAgbV90cmFpbGluZ09iamVjdHMuc2V0VHJhaWxpbmdXaGl0ZXNw
YWNlKHRvUmVuZGVyVGV4dChtX2N1cnJlbnQucmVuZGVyZXIoKSkpOwogICAgICAgICBlbHNlIGlm
ICghbV9jdXJyZW50U3R5bGUtPmNvbGxhcHNlV2hpdGVTcGFjZSgpIHx8ICFtX2N1cnJlbnRDaGFy
YWN0ZXJJc1NwYWNlKQogICAgICAgICAgICAgbV90cmFpbGluZ09iamVjdHMuY2xlYXIoKTsKIApA
QCAtMTA2Miw3ICsxMDYyLDcgQEAgaW5saW5lIGJvb2wgQnJlYWtpbmdDb250ZXh0OjpoYW5kbGVU
ZXh0KFdvcmRNZWFzdXJlbWVudHMmIHdvcmRNZWFzdXJlbWVudHMsIGJvb2wKICAgICB3b3JkTWVh
c3VyZW1lbnQud2lkdGggPSBtX2lnbm9yaW5nU3BhY2VzID8gMCA6IGFkZGl0aW9uYWxUZW1wV2lk
dGggKyB3b3JkU3BhY2luZ0ZvcldvcmRNZWFzdXJlbWVudDsKICAgICBhZGRpdGlvbmFsVGVtcFdp
ZHRoICs9IGxhc3RTcGFjZVdvcmRTcGFjaW5nOwogCi0gICAgZmxvYXQgaW5saW5lTG9naWNhbFRl
bXBXaWR0aCA9IGlubGluZUxvZ2ljYWxXaWR0aChtX2N1cnJlbnQubV9vYmosICFtX2FwcGxpZWRT
dGFydFdpZHRoLCBtX2luY2x1ZGVFbmRXaWR0aCk7CisgICAgZmxvYXQgaW5saW5lTG9naWNhbFRl
bXBXaWR0aCA9IGlubGluZUxvZ2ljYWxXaWR0aChtX2N1cnJlbnQucmVuZGVyZXIoKSwgIW1fYXBw
bGllZFN0YXJ0V2lkdGgsIG1faW5jbHVkZUVuZFdpZHRoKTsKICAgICBtX3dpZHRoLmFkZFVuY29t
bWl0dGVkV2lkdGgoYWRkaXRpb25hbFRlbXBXaWR0aCArIGlubGluZUxvZ2ljYWxUZW1wV2lkdGgp
OwogCiAgICAgaWYgKHdvcmRNZWFzdXJlbWVudC5mYWxsYmFja0ZvbnRzLmlzRW1wdHkoKSAmJiAh
ZmFsbGJhY2tGb250cy5pc0VtcHR5KCkpCkBAIC0xMTE2LDcgKzExMTYsNyBAQCBpbmxpbmUgYm9v
bCBCcmVha2luZ0NvbnRleHQ6OmNhbkJyZWFrQXRUaGlzUG9zaXRpb24oKQogICAgIGJvb2wgbmV4
dElzQXV0b1dyYXBwaW5nVGV4dCA9IChtX25leHRPYmplY3QgJiYgbV9uZXh0T2JqZWN0LT5pc1Rl
eHQoKSAmJiAobV9hdXRvV3JhcCB8fCBtX25leHRPYmplY3QtPnN0eWxlKCkuYXV0b1dyYXAoKSkp
OwogICAgIGlmICghbmV4dElzQXV0b1dyYXBwaW5nVGV4dCkKICAgICAgICAgcmV0dXJuIG1fYXV0
b1dyYXA7Ci0gICAgYm9vbCBjdXJyZW50SXNUZXh0T3JFbXB0eUlubGluZSA9IG1fY3VycmVudC5t
X29iai0+aXNUZXh0KCkgfHwgKG1fY3VycmVudC5tX29iai0+aXNSZW5kZXJJbmxpbmUoKSAmJiBp
c0VtcHR5SW5saW5lKHRvUmVuZGVySW5saW5lKCptX2N1cnJlbnQubV9vYmopKSk7CisgICAgYm9v
bCBjdXJyZW50SXNUZXh0T3JFbXB0eUlubGluZSA9IG1fY3VycmVudC5yZW5kZXJlcigpLT5pc1Rl
eHQoKSB8fCAobV9jdXJyZW50LnJlbmRlcmVyKCktPmlzUmVuZGVySW5saW5lKCkgJiYgaXNFbXB0
eUlubGluZSh0b1JlbmRlcklubGluZSgqbV9jdXJyZW50LnJlbmRlcmVyKCkpKSk7CiAgICAgaWYg
KCFjdXJyZW50SXNUZXh0T3JFbXB0eUlubGluZSkKICAgICAgICAgcmV0dXJuIG1fYXV0b1dyYXA7
CiAKQEAgLTExNjMsOCArMTE2Myw4IEBAIGlubGluZSB2b2lkIEJyZWFraW5nQ29udGV4dDo6Y29t
bWl0QW5kVXBkYXRlTGluZUJyZWFrSWZOZWVkZWQoKQogICAgICAgICBtX3dpZHRoLmZpdEJlbG93
RmxvYXRzKCk7CiAgICAgfQogCi0gICAgaWYgKCFtX2N1cnJlbnQubV9vYmotPmlzRmxvYXRpbmdP
ck91dE9mRmxvd1Bvc2l0aW9uZWQoKSkgewotICAgICAgICBtX2xhc3RPYmplY3QgPSBtX2N1cnJl
bnQubV9vYmo7CisgICAgaWYgKCFtX2N1cnJlbnQucmVuZGVyZXIoKS0+aXNGbG9hdGluZ09yT3V0
T2ZGbG93UG9zaXRpb25lZCgpKSB7CisgICAgICAgIG1fbGFzdE9iamVjdCA9IG1fY3VycmVudC5y
ZW5kZXJlcigpOwogICAgICAgICBpZiAobV9sYXN0T2JqZWN0LT5pc1JlcGxhY2VkKCkgJiYgbV9h
dXRvV3JhcCAmJiAoIW1fbGFzdE9iamVjdC0+aXNJbWFnZSgpIHx8IG1fYWxsb3dJbWFnZXNUb0Jy
ZWFrKSAmJiAoIW1fbGFzdE9iamVjdC0+aXNMaXN0TWFya2VyKCkgfHwgdG9SZW5kZXJMaXN0TWFy
a2VyKCptX2xhc3RPYmplY3QpLmlzSW5zaWRlKCkpKSB7CiAgICAgICAgICAgICBtX3dpZHRoLmNv
bW1pdCgpOwogICAgICAgICAgICAgbV9saW5lQnJlYWsubW92ZVRvU3RhcnRPZihtX25leHRPYmpl
Y3QpOwpAQCAtMTE3Nyw3ICsxMTc3LDcgQEAgaW5saW5lIHZvaWQgY2hlY2tNaWRwb2ludHMoTGlu
ZU1pZHBvaW50U3RhdGUmIGxpbmVNaWRwb2ludFN0YXRlLCBJbmxpbmVJdGVyYXRvciYKICAgICAv
LyBDaGVjayB0byBzZWUgaWYgb3VyIGxhc3QgbWlkcG9pbnQgaXMgYSBzdGFydCBwb2ludCBiZXlv
bmQgdGhlIGxpbmUgYnJlYWsuIElmIHNvLAogICAgIC8vIHNoYXZlIGl0IG9mZiB0aGUgbGlzdCwg
YW5kIHNoYXZlIG9mZiBhIHRyYWlsaW5nIHNwYWNlIGlmIHRoZSBwcmV2aW91cyBlbmQgcG9pbnQg
ZG9lc24ndAogICAgIC8vIHByZXNlcnZlIHdoaXRlc3BhY2UuCi0gICAgaWYgKGxCcmVhay5tX29i
aiAmJiBsaW5lTWlkcG9pbnRTdGF0ZS5udW1NaWRwb2ludHMgJiYgIShsaW5lTWlkcG9pbnRTdGF0
ZS5udW1NaWRwb2ludHMgJSAyKSkgeworICAgIGlmIChsQnJlYWsucmVuZGVyZXIoKSAmJiBsaW5l
TWlkcG9pbnRTdGF0ZS5udW1NaWRwb2ludHMgJiYgIShsaW5lTWlkcG9pbnRTdGF0ZS5udW1NaWRw
b2ludHMgJSAyKSkgewogICAgICAgICBJbmxpbmVJdGVyYXRvciogbWlkcG9pbnRzID0gbGluZU1p
ZHBvaW50U3RhdGUubWlkcG9pbnRzLmRhdGEoKTsKICAgICAgICAgSW5saW5lSXRlcmF0b3ImIGVu
ZHBvaW50ID0gbWlkcG9pbnRzW2xpbmVNaWRwb2ludFN0YXRlLm51bU1pZHBvaW50cyAtIDJdOwog
ICAgICAgICBjb25zdCBJbmxpbmVJdGVyYXRvciYgc3RhcnRwb2ludCA9IG1pZHBvaW50c1tsaW5l
TWlkcG9pbnRTdGF0ZS5udW1NaWRwb2ludHMgLSAxXTsKQEAgLTExODcsNyArMTE4Nyw3IEBAIGlu
bGluZSB2b2lkIGNoZWNrTWlkcG9pbnRzKExpbmVNaWRwb2ludFN0YXRlJiBsaW5lTWlkcG9pbnRT
dGF0ZSwgSW5saW5lSXRlcmF0b3ImCiAgICAgICAgIGlmIChjdXJycG9pbnQgPT0gbEJyZWFrKSB7
CiAgICAgICAgICAgICAvLyBXZSBoaXQgdGhlIGxpbmUgYnJlYWsgYmVmb3JlIHRoZSBzdGFydCBw
b2ludC4gU2hhdmUgb2ZmIHRoZSBzdGFydCBwb2ludC4KICAgICAgICAgICAgIGxpbmVNaWRwb2lu
dFN0YXRlLm51bU1pZHBvaW50cy0tOwotICAgICAgICAgICAgaWYgKGVuZHBvaW50Lm1fb2JqLT5z
dHlsZSgpLmNvbGxhcHNlV2hpdGVTcGFjZSgpICYmIGVuZHBvaW50Lm1fb2JqLT5pc1RleHQoKSkK
KyAgICAgICAgICAgIGlmIChlbmRwb2ludC5yZW5kZXJlcigpLT5zdHlsZSgpLmNvbGxhcHNlV2hp
dGVTcGFjZSgpICYmIGVuZHBvaW50LnJlbmRlcmVyKCktPmlzVGV4dCgpKQogICAgICAgICAgICAg
ICAgIGVuZHBvaW50Lm1fcG9zLS07CiAgICAgICAgIH0KICAgICB9CkBAIC0xMjAzLDE1ICsxMjAz
LDE1IEBAIElubGluZUl0ZXJhdG9yIEJyZWFraW5nQ29udGV4dDo6aGFuZGxlRW5kT2ZMaW5lKCkK
ICNlbmRpZgogICAgIGlmIChzZWdtZW50QWxsb3dzT3ZlcmZsb3cpIHsKICAgICAgICAgaWYgKG1f
bGluZUJyZWFrID09IG1fcmVzb2x2ZXIucG9zaXRpb24oKSkgewotICAgICAgICAgICAgaWYgKCFt
X2xpbmVCcmVhay5tX29iaiB8fCAhbV9saW5lQnJlYWsubV9vYmotPmlzQlIoKSkgeworICAgICAg
ICAgICAgaWYgKCFtX2xpbmVCcmVhay5yZW5kZXJlcigpIHx8ICFtX2xpbmVCcmVhay5yZW5kZXJl
cigpLT5pc0JSKCkpIHsKICAgICAgICAgICAgICAgICAvLyB3ZSBqdXN0IGFkZCBhcyBtdWNoIGFz
IHBvc3NpYmxlCiAgICAgICAgICAgICAgICAgaWYgKG1fYmxvY2tTdHlsZS53aGl0ZVNwYWNlKCkg
PT0gUFJFICYmICFtX2N1cnJlbnQubV9wb3MpIHsKICAgICAgICAgICAgICAgICAgICAgbV9saW5l
QnJlYWsubW92ZVRvKG1fbGFzdE9iamVjdCwgbV9sYXN0T2JqZWN0LT5pc1RleHQoKSA/IG1fbGFz
dE9iamVjdC0+bGVuZ3RoKCkgOiAwKTsKLSAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKG1fbGlu
ZUJyZWFrLm1fb2JqKSB7CisgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChtX2xpbmVCcmVhay5y
ZW5kZXJlcigpKSB7CiAgICAgICAgICAgICAgICAgICAgIC8vIERvbid0IGV2ZXIgYnJlYWsgaW4g
dGhlIG1pZGRsZSBvZiBhIHdvcmQgaWYgd2UgY2FuIGhlbHAgaXQuCiAgICAgICAgICAgICAgICAg
ICAgIC8vIFRoZXJlJ3Mgbm8gcm9vbSBhdCBhbGwuIFdlIGp1c3QgaGF2ZSB0byBiZSBvbiB0aGlz
IGxpbmUsCiAgICAgICAgICAgICAgICAgICAgIC8vIGV2ZW4gdGhvdWdoIHdlJ2xsIHNwaWxsIG91
dC4KLSAgICAgICAgICAgICAgICAgICAgbV9saW5lQnJlYWsubW92ZVRvKG1fY3VycmVudC5tX29i
aiwgbV9jdXJyZW50Lm1fcG9zKTsKKyAgICAgICAgICAgICAgICAgICAgbV9saW5lQnJlYWsubW92
ZVRvKG1fY3VycmVudC5yZW5kZXJlcigpLCBtX2N1cnJlbnQubV9wb3MpOwogICAgICAgICAgICAg
ICAgIH0KICAgICAgICAgICAgIH0KICAgICAgICAgICAgIC8vIG1ha2Ugc3VyZSB3ZSBjb25zdW1l
IGF0IGxlYXN0IG9uZSBjaGFyL29iamVjdC4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9saW5lL0xpbmVCcmVha2VyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9s
aW5lL0xpbmVCcmVha2VyLmNwcAppbmRleCBkMTJhOTdkMTFhYWZlNzZjYTIxZDRmNWNhNDU4YmZk
ZTE5N2U1NTM0Li4wY2IzMmNhYjRkN2QxNTczOWIwYTI5YTFlN2RhZGFiMDVlMzRkODMxIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvbGluZS9MaW5lQnJlYWtlci5jcHAKKysr
IGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL2xpbmUvTGluZUJyZWFrZXIuY3BwCkBAIC00NSw3
ICs0NSw3IEBAIHZvaWQgTGluZUJyZWFrZXI6OnJlc2V0KCkKIHZvaWQgTGluZUJyZWFrZXI6OnNr
aXBUcmFpbGluZ1doaXRlc3BhY2UoSW5saW5lSXRlcmF0b3ImIGl0ZXJhdG9yLCBjb25zdCBMaW5l
SW5mbyYgbGluZUluZm8pCiB7CiAgICAgd2hpbGUgKCFpdGVyYXRvci5hdEVuZCgpICYmICFyZXF1
aXJlc0xpbmVCb3goaXRlcmF0b3IsIGxpbmVJbmZvLCBUcmFpbGluZ1doaXRlc3BhY2UpKSB7Ci0g
ICAgICAgIFJlbmRlck9iamVjdCYgb2JqZWN0ID0gKml0ZXJhdG9yLm1fb2JqOworICAgICAgICBS
ZW5kZXJPYmplY3QmIG9iamVjdCA9ICppdGVyYXRvci5yZW5kZXJlcigpOwogICAgICAgICBpZiAo
b2JqZWN0LmlzT3V0T2ZGbG93UG9zaXRpb25lZCgpKQogICAgICAgICAgICAgc2V0U3RhdGljUG9z
aXRpb25zKG1fYmxvY2ssIHRvUmVuZGVyQm94KG9iamVjdCkpOwogICAgICAgICBlbHNlIGlmIChv
YmplY3QuaXNGbG9hdGluZygpKQpAQCAtNTcsNyArNTcsNyBAQCB2b2lkIExpbmVCcmVha2VyOjpz
a2lwVHJhaWxpbmdXaGl0ZXNwYWNlKElubGluZUl0ZXJhdG9yJiBpdGVyYXRvciwgY29uc3QgTGlu
ZUluZgogdm9pZCBMaW5lQnJlYWtlcjo6c2tpcExlYWRpbmdXaGl0ZXNwYWNlKElubGluZUJpZGlS
ZXNvbHZlciYgcmVzb2x2ZXIsIExpbmVJbmZvJiBsaW5lSW5mbywgRmxvYXRpbmdPYmplY3QqIGxh
c3RGbG9hdEZyb21QcmV2aW91c0xpbmUsIExpbmVXaWR0aCYgd2lkdGgpCiB7CiAgICAgd2hpbGUg
KCFyZXNvbHZlci5wb3NpdGlvbigpLmF0RW5kKCkgJiYgIXJlcXVpcmVzTGluZUJveChyZXNvbHZl
ci5wb3NpdGlvbigpLCBsaW5lSW5mbywgTGVhZGluZ1doaXRlc3BhY2UpKSB7Ci0gICAgICAgIFJl
bmRlck9iamVjdCYgb2JqZWN0ID0gKnJlc29sdmVyLnBvc2l0aW9uKCkubV9vYmo7CisgICAgICAg
IFJlbmRlck9iamVjdCYgb2JqZWN0ID0gKnJlc29sdmVyLnBvc2l0aW9uKCkucmVuZGVyZXIoKTsK
ICAgICAgICAgaWYgKG9iamVjdC5pc091dE9mRmxvd1Bvc2l0aW9uZWQoKSkgewogICAgICAgICAg
ICAgc2V0U3RhdGljUG9zaXRpb25zKG1fYmxvY2ssIHRvUmVuZGVyQm94KG9iamVjdCkpOwogICAg
ICAgICAgICAgaWYgKG9iamVjdC5zdHlsZSgpLmlzT3JpZ2luYWxEaXNwbGF5SW5saW5lVHlwZSgp
KSB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvbGluZS9MaW5lSW5saW5l
SGVhZGVycy5oIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL2xpbmUvTGluZUlubGluZUhlYWRl
cnMuaAppbmRleCA3NWExYmVlMmRmMGQwNmJjZjIxMzlmYjY1ZDJhOTg2NTRhYzZmOTM0Li4wYjBj
NDRlNmU2MGNiNTI0ZmIyOWRmNDE0NTQ5OWI4OGI1NzJhOTVhIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvbGluZS9MaW5lSW5saW5lSGVhZGVycy5oCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9saW5lL0xpbmVJbmxpbmVIZWFkZXJzLmgKQEAgLTc0LDcgKzc0LDcg
QEAgaW5saW5lIGJvb2wgc2hvdWxkQ29sbGFwc2VXaGl0ZVNwYWNlKGNvbnN0IFJlbmRlclN0eWxl
KiBzdHlsZSwgY29uc3QgTGluZUluZm8mIGwKIAogaW5saW5lIGJvb2wgc2tpcE5vbkJyZWFraW5n
U3BhY2UoY29uc3QgSW5saW5lSXRlcmF0b3ImIGl0LCBjb25zdCBMaW5lSW5mbyYgbGluZUluZm8p
CiB7Ci0gICAgaWYgKGl0Lm1fb2JqLT5zdHlsZSgpLm5ic3BNb2RlKCkgIT0gU1BBQ0UgfHwgaXQu
Y3VycmVudCgpICE9IG5vQnJlYWtTcGFjZSkKKyAgICBpZiAoaXQucmVuZGVyZXIoKS0+c3R5bGUo
KS5uYnNwTW9kZSgpICE9IFNQQUNFIHx8IGl0LmN1cnJlbnQoKSAhPSBub0JyZWFrU3BhY2UpCiAg
ICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgIC8vIEZJWE1FOiBUaGlzIGlzIGJhZC4gSXQgbWFr
ZXMgbmJzcCBpbmNvbnNpc3RlbnQgd2l0aCBzcGFjZSBhbmQgd29uJ3Qgd29yayBjb3JyZWN0bHkK
QEAgLTk4LDI1ICs5OCwyNSBAQCBpbmxpbmUgYm9vbCBhbHdheXNSZXF1aXJlc0xpbmVCb3goY29u
c3QgUmVuZGVySW5saW5lJiBmbG93KQogCiBpbmxpbmUgYm9vbCByZXF1aXJlc0xpbmVCb3goY29u
c3QgSW5saW5lSXRlcmF0b3ImIGl0LCBjb25zdCBMaW5lSW5mbyYgbGluZUluZm8gPSBMaW5lSW5m
bygpLCBXaGl0ZXNwYWNlUG9zaXRpb24gd2hpdGVzcGFjZVBvc2l0aW9uID0gTGVhZGluZ1doaXRl
c3BhY2UpCiB7Ci0gICAgaWYgKGl0Lm1fb2JqLT5pc0Zsb2F0aW5nT3JPdXRPZkZsb3dQb3NpdGlv
bmVkKCkpCisgICAgaWYgKGl0LnJlbmRlcmVyKCktPmlzRmxvYXRpbmdPck91dE9mRmxvd1Bvc2l0
aW9uZWQoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgaWYgKGl0Lm1fb2JqLT5pc0JS
KCkpCisgICAgaWYgKGl0LnJlbmRlcmVyKCktPmlzQlIoKSkKICAgICAgICAgcmV0dXJuIHRydWU7
CiAKICAgICBib29sIHJlbmRlcmVySXNFbXB0eUlubGluZSA9IGZhbHNlOwotICAgIGlmIChpdC5t
X29iai0+aXNSZW5kZXJJbmxpbmUoKSkgewotICAgICAgICBjb25zdCBSZW5kZXJJbmxpbmUmIGlu
bGluZVJlbmRlcmVyID0gdG9SZW5kZXJJbmxpbmUoKml0Lm1fb2JqKTsKKyAgICBpZiAoaXQucmVu
ZGVyZXIoKS0+aXNSZW5kZXJJbmxpbmUoKSkgeworICAgICAgICBjb25zdCBSZW5kZXJJbmxpbmUm
IGlubGluZVJlbmRlcmVyID0gdG9SZW5kZXJJbmxpbmUoKml0LnJlbmRlcmVyKCkpOwogICAgICAg
ICBpZiAoIWFsd2F5c1JlcXVpcmVzTGluZUJveChpbmxpbmVSZW5kZXJlcikgJiYgIXJlcXVpcmVz
TGluZUJveEZvckNvbnRlbnQoaW5saW5lUmVuZGVyZXIsIGxpbmVJbmZvKSkKICAgICAgICAgICAg
IHJldHVybiBmYWxzZTsKICAgICAgICAgcmVuZGVyZXJJc0VtcHR5SW5saW5lID0gaXNFbXB0eUlu
bGluZShpbmxpbmVSZW5kZXJlcik7CiAgICAgfQogCi0gICAgaWYgKCFzaG91bGRDb2xsYXBzZVdo
aXRlU3BhY2UoJml0Lm1fb2JqLT5zdHlsZSgpLCBsaW5lSW5mbywgd2hpdGVzcGFjZVBvc2l0aW9u
KSkKKyAgICBpZiAoIXNob3VsZENvbGxhcHNlV2hpdGVTcGFjZSgmaXQucmVuZGVyZXIoKS0+c3R5
bGUoKSwgbGluZUluZm8sIHdoaXRlc3BhY2VQb3NpdGlvbikpCiAgICAgICAgIHJldHVybiB0cnVl
OwogCiAgICAgVUNoYXIgY3VycmVudCA9IGl0LmN1cnJlbnQoKTsKLSAgICBib29sIG5vdEp1c3RX
aGl0ZXNwYWNlID0gY3VycmVudCAhPSAnICcgJiYgY3VycmVudCAhPSAnXHQnICYmIGN1cnJlbnQg
IT0gc29mdEh5cGhlbiAmJiAoY3VycmVudCAhPSAnXG4nIHx8IGl0Lm1fb2JqLT5wcmVzZXJ2ZXNO
ZXdsaW5lKCkpICYmICFza2lwTm9uQnJlYWtpbmdTcGFjZShpdCwgbGluZUluZm8pOworICAgIGJv
b2wgbm90SnVzdFdoaXRlc3BhY2UgPSBjdXJyZW50ICE9ICcgJyAmJiBjdXJyZW50ICE9ICdcdCcg
JiYgY3VycmVudCAhPSBzb2Z0SHlwaGVuICYmIChjdXJyZW50ICE9ICdcbicgfHwgaXQucmVuZGVy
ZXIoKS0+cHJlc2VydmVzTmV3bGluZSgpKSAmJiAhc2tpcE5vbkJyZWFraW5nU3BhY2UoaXQsIGxp
bmVJbmZvKTsKICAgICByZXR1cm4gbm90SnVzdFdoaXRlc3BhY2UgfHwgcmVuZGVyZXJJc0VtcHR5
SW5saW5lOwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc2hhcGVz
L1NoYXBlSW5zaWRlSW5mby5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc2hhcGVzL1No
YXBlSW5zaWRlSW5mby5jcHAKaW5kZXggYjMyYmRiNTlmYmI5ZDExNjk5ZTY1MzA3OWU0YWViZDIz
MGYwOWZkMC4uMTYyODFhOTQwNzc5ODk0MjYzYjliMzRjNzNhZWU5YjVjMTdkNTc3YyAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3NoYXBlcy9TaGFwZUluc2lkZUluZm8uY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zaGFwZXMvU2hhcGVJbnNpZGVJbmZvLmNw
cApAQCAtMzgsOCArMzgsOCBAQAogbmFtZXNwYWNlIFdlYkNvcmUgewogCiBMaW5lU2VnbWVudFJh
bmdlOjpMaW5lU2VnbWVudFJhbmdlKGNvbnN0IElubGluZUl0ZXJhdG9yJiBzdGFydCwgY29uc3Qg
SW5saW5lSXRlcmF0b3ImIGVuZCkKLSAgICA6IHN0YXJ0KHN0YXJ0LnJvb3QoKSwgc3RhcnQub2Jq
ZWN0KCksIHN0YXJ0Lm9mZnNldCgpKQotICAgICwgZW5kKGVuZC5yb290KCksIGVuZC5vYmplY3Qo
KSwgZW5kLm9mZnNldCgpKQorICAgIDogc3RhcnQoc3RhcnQucm9vdCgpLCBzdGFydC5yZW5kZXJl
cigpLCBzdGFydC5vZmZzZXQoKSkKKyAgICAsIGVuZChlbmQucm9vdCgpLCBlbmQucmVuZGVyZXIo
KSwgZW5kLm9mZnNldCgpKQogICAgIHsKICAgICB9CiAK
</data>

          </attachment>
      

    </bug>

</bugzilla>