<?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>105540</bug_id>
          
          <creation_ts>2012-12-20 08:43:37 -0800</creation_ts>
          <short_desc>CodeGen: Make [Reflect] use fastGetAttribute and fastHasAttribute</short_desc>
          <delta_ts>2012-12-20 11:47:08 -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>DOM</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="Erik Arvidsson">arv</reporter>
          <assigned_to name="Erik Arvidsson">arv</assigned_to>
          <cc>abarth</cc>
    
    <cc>eric</cc>
    
    <cc>haraken</cc>
    
    <cc>japhet</cc>
    
    <cc>tony</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>795468</commentid>
    <comment_count>0</comment_count>
    <who name="Erik Arvidsson">arv</who>
    <bug_when>2012-12-20 08:43:37 -0800</bug_when>
    <thetext>Currently the codegen generates code that use getAttribute and hasAttribute. We can use fastGetAttribute and fastHasAttribute when we use a non SVG animated attribute and not HTML::styleAttr.

Performance results:
				With patch				Master 
Bindings/id-getter	runs/s	518.13	± 2.85%	16.17% Better		446.03	± 7.74%
Dromaeo/dom-attr	runs/s	141.68	± 1.72%	20.81% Better		117.27	± 1.47%</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>795470</commentid>
    <comment_count>1</comment_count>
      <attachid>180347</attachid>
    <who name="Erik Arvidsson">arv</who>
    <bug_when>2012-12-20 08:47:52 -0800</bug_when>
    <thetext>Created attachment 180347
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>795477</commentid>
    <comment_count>2</comment_count>
      <attachid>180349</attachid>
    <who name="Erik Arvidsson">arv</who>
    <bug_when>2012-12-20 09:09:10 -0800</bug_when>
    <thetext>Created attachment 180349
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>795487</commentid>
    <comment_count>3</comment_count>
      <attachid>180349</attachid>
    <who name="Andreas Kling">kling</who>
    <bug_when>2012-12-20 09:27:48 -0800</bug_when>
    <thetext>Comment on attachment 180349
Patch

r=me, great idea!

Maybe we could also use getIdAttribute()/getNameAttribute() for id/name to avoid iterating over the attribute list in case the attribute isn&apos;t present.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>795492</commentid>
    <comment_count>4</comment_count>
    <who name="Erik Arvidsson">arv</who>
    <bug_when>2012-12-20 09:33:03 -0800</bug_when>
    <thetext>(In reply to comment #3)
&gt; (From update of attachment 180349 [details])
&gt; r=me, great idea!
&gt; 
&gt; Maybe we could also use getIdAttribute()/getNameAttribute() for id/name to avoid iterating over the attribute list in case the attribute isn&apos;t present.

Good idea. I&apos;ll do that next.

I was also considering introducing &quot;fast&quot; versions of the following:

getURLAttribute
getIntegralAttribute
getUnsignedIntegralAttribute

But the benefit might be less obvious since these do a lot of work compared to fastGetAttribute and fastHasAttribute.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>795500</commentid>
    <comment_count>5</comment_count>
      <attachid>180349</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-12-20 09:42:44 -0800</bug_when>
    <thetext>Comment on attachment 180349
Patch

Clearing flags on attachment: 180349

Committed r138263: &lt;http://trac.webkit.org/changeset/138263&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>795501</commentid>
    <comment_count>6</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-12-20 09:42:47 -0800</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>795563</commentid>
    <comment_count>7</comment_count>
    <who name="Tony Chang">tony</who>
    <bug_when>2012-12-20 10:51:03 -0800</bug_when>
    <thetext>I think this is causing svg/custom/animate-reference-crash.html to hit an ASSERT on the debug bots:
http://test-results.appspot.com/dashboards/flakiness_dashboard.html#showExpectations=true&amp;tests=svg%2Fcustom%2Fanimate-reference-crash.html</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>795585</commentid>
    <comment_count>8</comment_count>
    <who name="Erik Arvidsson">arv</who>
    <bug_when>2012-12-20 11:13:55 -0800</bug_when>
    <thetext>https://bugs.webkit.org/show_bug.cgi?id=105555</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>795586</commentid>
    <comment_count>9</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2012-12-20 11:14:17 -0800</bug_when>
    <thetext>Not surprising.  That means that fastAttributeLookupAllowed is doing it&apos;s job, and we need to make the generator slightly smarter!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>795595</commentid>
    <comment_count>10</comment_count>
    <who name="Erik Arvidsson">arv</who>
    <bug_when>2012-12-20 11:27:15 -0800</bug_when>
    <thetext>(In reply to comment #9)
&gt; Not surprising.  That means that fastAttributeLookupAllowed is doing it&apos;s job, and we need to make the generator slightly smarter!

Yup. The codegen only checks the type and className is a special case where the type is DOMString and not SVGAnimatedString. Maybe we should override it in SVGSVGElement.idl to use the correct type?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>795610</commentid>
    <comment_count>11</comment_count>
    <who name="Erik Arvidsson">arv</who>
    <bug_when>2012-12-20 11:47:08 -0800</bug_when>
    <thetext>(In reply to comment #10)
&gt; (In reply to comment #9)
&gt; &gt; Not surprising.  That means that fastAttributeLookupAllowed is doing it&apos;s job, and we need to make the generator slightly smarter!
&gt; 
&gt; Yup. The codegen only checks the type and className is a special case where the type is DOMString and not SVGAnimatedString. Maybe we should override it in SVGSVGElement.idl to use the correct type?

Actually, SVGStylable.idl does override className. Now I&apos;m not sure why we hit the assert.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>180347</attachid>
            <date>2012-12-20 08:47:52 -0800</date>
            <delta_ts>2012-12-20 09:09:07 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-105540-20121220114508.patch</filename>
            <type>text/plain</type>
            <size>4514</size>
            <attacher name="Erik Arvidsson">arv</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTM4MjUyCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggOTM0ZGFhZWYzMzAzMTNk
Y2FjZDkzNTY4NDZkMGE5OTg2ZTc3N2NmMi4uMDgzMDExY2NkMjI3MzIzMjFmYzc5MmU3ZDhiMjUy
ODE3NmU2NjYxMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDIxIEBACisyMDEyLTEyLTIwICBFcmlr
IEFydmlkc3NvbiAgPGFydkBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgQ29kZUdlbjogTWFrZSBb
UmVmbGVjdF0gdXNlIGZhc3RHZXRBdHRyaWJ1dGUgYW5kIGZhc3RIYXNBdHRyaWJ1dGUKKyAgICAg
ICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEwNTU0MAorCisgICAg
ICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEN1cnJlbnRseSB0aGUg
Y29kZWdlbiBnZW5lcmF0ZXMgY29kZSB0aGF0IHVzZSBnZXRBdHRyaWJ1dGUgYW5kIGhhc0F0dHJp
YnV0ZS4gV2UgY2FuIHVzZQorICAgICAgICBmYXN0R2V0QXR0cmlidXRlIGFuZCBmYXN0SGFzQXR0
cmlidXRlIHdoZW4gd2UgdXNlIGEgbm9uIFNWRyBhbmltYXRlZCBhdHRyaWJ1dGUgYW5kIG5vdAor
ICAgICAgICBIVE1MOjpzdHlsZUF0dHIuCisKKyAgICAgICAgVGhpcyBpbXByb3ZlcyBCaW5kaW5n
cy9pZC1nZXR0ZXIgYnkgMTYlIGFuZCBEcm9tYWVvL2RvbS1hdHRyIGJ5IDIxJS4KKworICAgICAg
ICBObyBuZXcgdGVzdHMuIE5vIGNoYW5nZSBpbiBiZWhhdmlvci4KKworICAgICAgICAqIGJpbmRp
bmdzL3NjcmlwdHMvQ29kZUdlbmVyYXRvci5wbToKKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRz
L0NvZGVHZW5lcmF0b3JWOC5wbToKKwogMjAxMi0xMi0yMCAgWmFuIERvYmVyc2VrICA8emFuZG9i
ZXJzZWtAZ21haWwuY29tPgogCiAgICAgICAgIFtHVEtdIFJlbW92ZSB0aGUgLS1lbmFibGUtdW5z
dGFibGUtZmVhdHVyZXMgY29uZmlndXJhdGlvbiBvcHRpb24KZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvQ29kZUdlbmVyYXRvci5wbSBiL1NvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL3NjcmlwdHMvQ29kZUdlbmVyYXRvci5wbQppbmRleCBhYzNhZDRhODVkYjFkNDNk
ZWZkNDYxZmI5NjAyYjAzMzcxYzNhOTg0Li4zYjgwNWZmMTFjYzhiM2U1ODU5NGJhMmQ0OGE4OTdm
MmM1Nzk4Y2ZiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL0Nv
ZGVHZW5lcmF0b3IucG0KKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy9Db2Rl
R2VuZXJhdG9yLnBtCkBAIC01NjUsNiArNTY1LDE0IEBAIHN1YiBDb250ZW50QXR0cmlidXRlTmFt
ZQogICAgIHJldHVybiAiV2ViQ29yZTo6JHtuYW1lc3BhY2V9Ojoke2NvbnRlbnRBdHRyaWJ1dGVO
YW1lfUF0dHIiOwogfQogCitzdWIgQ2FuVXNlRmFzdEF0dHJpYnV0ZQoreworICAgIG15ICgkZ2Vu
ZXJhdG9yLCAkYXR0cmlidXRlKSA9IEBfOworICAgIG15ICRhdHRyaWJ1dGVUeXBlID0gJGF0dHJp
YnV0ZS0+c2lnbmF0dXJlLT50eXBlOworICAgICMgSFRNTE5hbWVzOjpzdHlsZSBjYW5ub3QgYmUg
dXNlZCB3aXRoIGZhc3R7R2V0LEhhc31BdHRyaWJ1dGUgYnV0IGl0IGlzIG5vdCB1c2VkIHdpdGgg
W1JlZmxlY3RdCisgICAgcmV0dXJuICEkZ2VuZXJhdG9yLT5Jc1NWR0FuaW1hdGVkVHlwZSgkYXR0
cmlidXRlVHlwZSk7Cit9CisKIHN1YiBHZXR0ZXJFeHByZXNzaW9uCiB7CiAgICAgbXkgKCRnZW5l
cmF0b3IsICRpbXBsSW5jbHVkZXMsICRpbnRlcmZhY2VOYW1lLCAkYXR0cmlidXRlKSA9IEBfOwpA
QCAtNTc5LDEzICs1ODcsMjIgQEAgc3ViIEdldHRlckV4cHJlc3Npb24KICAgICBpZiAoJGF0dHJp
YnV0ZS0+c2lnbmF0dXJlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPnsiVVJMIn0pIHsKICAgICAgICAg
JGZ1bmN0aW9uTmFtZSA9ICJnZXRVUkxBdHRyaWJ1dGUiOwogICAgIH0gZWxzaWYgKCRhdHRyaWJ1
dGUtPnNpZ25hdHVyZS0+dHlwZSBlcSAiYm9vbGVhbiIpIHsKLSAgICAgICAgJGZ1bmN0aW9uTmFt
ZSA9ICJoYXNBdHRyaWJ1dGUiOworICAgICAgICBteSAkbmFtZXNwYWNlID0gJGdlbmVyYXRvci0+
TmFtZXNwYWNlRm9yQXR0cmlidXRlTmFtZSgkaW50ZXJmYWNlTmFtZSwgJGNvbnRlbnRBdHRyaWJ1
dGVOYW1lKTsKKyAgICAgICAgaWYgKCRnZW5lcmF0b3ItPkNhblVzZUZhc3RBdHRyaWJ1dGUoJGF0
dHJpYnV0ZSkpIHsKKyAgICAgICAgICAgICRmdW5jdGlvbk5hbWUgPSAiZmFzdEhhc0F0dHJpYnV0
ZSI7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAkZnVuY3Rpb25OYW1lID0gImhhc0F0
dHJpYnV0ZSI7CisgICAgICAgIH0KICAgICB9IGVsc2lmICgkYXR0cmlidXRlLT5zaWduYXR1cmUt
PnR5cGUgZXEgImxvbmciKSB7CiAgICAgICAgICRmdW5jdGlvbk5hbWUgPSAiZ2V0SW50ZWdyYWxB
dHRyaWJ1dGUiOwogICAgIH0gZWxzaWYgKCRhdHRyaWJ1dGUtPnNpZ25hdHVyZS0+dHlwZSBlcSAi
dW5zaWduZWQgbG9uZyIpIHsKICAgICAgICAgJGZ1bmN0aW9uTmFtZSA9ICJnZXRVbnNpZ25lZElu
dGVncmFsQXR0cmlidXRlIjsKICAgICB9IGVsc2UgewotICAgICAgICAkZnVuY3Rpb25OYW1lID0g
ImdldEF0dHJpYnV0ZSI7CisgICAgICAgIGlmICgkZ2VuZXJhdG9yLT5DYW5Vc2VGYXN0QXR0cmli
dXRlKCRhdHRyaWJ1dGUpKSB7CisgICAgICAgICAgICAkZnVuY3Rpb25OYW1lID0gImZhc3RHZXRB
dHRyaWJ1dGUiOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgJGZ1bmN0aW9uTmFtZSA9
ICJnZXRBdHRyaWJ1dGUiOworICAgICAgICB9CiAgICAgfQogCiAgICAgcmV0dXJuICgkZnVuY3Rp
b25OYW1lLCAkY29udGVudEF0dHJpYnV0ZU5hbWUpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvYmluZGluZ3Mvc2NyaXB0cy9Db2RlR2VuZXJhdG9yVjgucG0gYi9Tb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0b3JWOC5wbQppbmRleCBiMTEyNGMwNzQzNjAxN2U0
ZWNkZDU5MzIwNDFjMTQ5Y2YyMmFkNWRiLi5mYWI5ZTMyZDdkMzE2ZGZlZGE2ZmZjMzk1ODY5Yjkx
MDhhOGIwNjM1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL0Nv
ZGVHZW5lcmF0b3JWOC5wbQorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL0Nv
ZGVHZW5lcmF0b3JWOC5wbQpAQCAtOTMxLDExICs5MzEsOSBAQCBFTkQKICAgICAgICAgbXkgJHVy
bCA9ICRhdHRyaWJ1dGUtPnNpZ25hdHVyZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57IlVSTCJ9Owog
ICAgICAgICBpZiAoJGdldHRlclN0cmluZ1VzZXNJbXAgJiYgJHJlZmxlY3QgJiYgISR1cmwgJiYg
JGNvZGVHZW5lcmF0b3ItPklzU3ViVHlwZSgkaW50ZXJmYWNlLCAiTm9kZSIpICYmICRjb2RlR2Vu
ZXJhdG9yLT5Jc1N0cmluZ1R5cGUoJGF0dHJUeXBlKSkgewogICAgICAgICAgICAgIyBHZW5lcmF0
ZSBzdXBlci1jb21wYWN0IGNhbGwgZm9yIHJlZ3VsYXIgYXR0cmlidXRlIGdldHRlcjoKLSAgICAg
ICAgICAgIG15ICRjb250ZW50QXR0cmlidXRlTmFtZSA9ICRyZWZsZWN0IGVxICJWQUxVRV9JU19N
SVNTSU5HIiA/IGxjICRhdHRyTmFtZSA6ICRyZWZsZWN0OwotICAgICAgICAgICAgbXkgJG5hbWVz
cGFjZSA9ICRjb2RlR2VuZXJhdG9yLT5OYW1lc3BhY2VGb3JBdHRyaWJ1dGVOYW1lKCRpbnRlcmZh
Y2VOYW1lLCAkY29udGVudEF0dHJpYnV0ZU5hbWUpOwotICAgICAgICAgICAgQWRkVG9JbXBsSW5j
bHVkZXMoIiR7bmFtZXNwYWNlfS5oIik7CisgICAgICAgICAgICBteSAoJGZ1bmN0aW9uTmFtZSwg
QGFyZ3VtZW50cykgPSAkY29kZUdlbmVyYXRvci0+R2V0dGVyRXhwcmVzc2lvbihcJWltcGxJbmNs
dWRlcywgJGludGVyZmFjZU5hbWUsICRhdHRyaWJ1dGUpOwogICAgICAgICAgICAgcHVzaChAaW1w
bENvbnRlbnREZWNscywgIiAgICBFbGVtZW50KiBpbXAgPSBWOEVsZW1lbnQ6OnRvTmF0aXZlKGlu
Zm8uSG9sZGVyKCkpO1xuIik7Ci0gICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudERlY2xzLCAi
ICAgIHJldHVybiB2OFN0cmluZyhpbXAtPmdldEF0dHJpYnV0ZSgke25hbWVzcGFjZX06OiR7Y29u
dGVudEF0dHJpYnV0ZU5hbWV9QXR0ciksIGluZm8uR2V0SXNvbGF0ZSgpKTtcbiIpOworICAgICAg
ICAgICAgcHVzaChAaW1wbENvbnRlbnREZWNscywgIiAgICByZXR1cm4gdjhTdHJpbmcoaW1wLT4k
e2Z1bmN0aW9uTmFtZX0oIiAuIGpvaW4oIiwgIiwgQGFyZ3VtZW50cykgLiAiKSwgaW5mby5HZXRJ
c29sYXRlKCkpO1xuIik7CiAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudERlY2xzLCAifVxu
XG4iKTsKICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50RGVjbHMsICIjZW5kaWYgLy8gJHtj
b25kaXRpb25hbFN0cmluZ31cblxuIikgaWYgJGNvbmRpdGlvbmFsU3RyaW5nOwogICAgICAgICAg
ICAgcmV0dXJuOwo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>180349</attachid>
            <date>2012-12-20 09:09:10 -0800</date>
            <delta_ts>2012-12-20 09:42:44 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-105540-20121220120625.patch</filename>
            <type>text/plain</type>
            <size>17933</size>
            <attacher name="Erik Arvidsson">arv</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTM4MjUyCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggOTM0ZGFhZWYzMzAzMTNk
Y2FjZDkzNTY4NDZkMGE5OTg2ZTc3N2NmMi4uZWY0NDc4YzgyYjVmZDhjYWFkYmY5NTk2MTUxOGFj
NTNiNWRkMzkxNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDI2IEBACisyMDEyLTEyLTIwICBFcmlr
IEFydmlkc3NvbiAgPGFydkBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgQ29kZUdlbjogTWFrZSBb
UmVmbGVjdF0gdXNlIGZhc3RHZXRBdHRyaWJ1dGUgYW5kIGZhc3RIYXNBdHRyaWJ1dGUKKyAgICAg
ICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEwNTU0MAorCisgICAg
ICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEN1cnJlbnRseSB0aGUg
Y29kZWdlbiBnZW5lcmF0ZXMgY29kZSB0aGF0IHVzZSBnZXRBdHRyaWJ1dGUgYW5kIGhhc0F0dHJp
YnV0ZS4gV2UgY2FuIHVzZQorICAgICAgICBmYXN0R2V0QXR0cmlidXRlIGFuZCBmYXN0SGFzQXR0
cmlidXRlIHdoZW4gd2UgdXNlIGEgbm9uIFNWRyBhbmltYXRlZCBhdHRyaWJ1dGUgYW5kIG5vdAor
ICAgICAgICBIVE1MOjpzdHlsZUF0dHIuCisKKyAgICAgICAgVGhpcyBpbXByb3ZlcyBCaW5kaW5n
cy9pZC1nZXR0ZXIgYnkgMTYlIGFuZCBEcm9tYWVvL2RvbS1hdHRyIGJ5IDIxJS4KKworICAgICAg
ICBObyBuZXcgdGVzdHMuIE5vIGNoYW5nZSBpbiBiZWhhdmlvci4KKworICAgICAgICAqIGJpbmRp
bmdzL3NjcmlwdHMvQ29kZUdlbmVyYXRvci5wbToKKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRz
L0NvZGVHZW5lcmF0b3JWOC5wbToKKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvQ1BQ
L1dlYkRPTVRlc3RPYmouY3BwOgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9HT2Jq
ZWN0L1dlYktpdERPTVRlc3RPYmouY3BwOgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVz
dC9KUy9KU1Rlc3RPYmouY3BwOgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9PYmpD
L0RPTVRlc3RPYmoubW06CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Y4L1Y4VGVz
dE9iai5jcHA6CisKIDIwMTItMTItMjAgIFphbiBEb2JlcnNlayAgPHphbmRvYmVyc2VrQGdtYWls
LmNvbT4KIAogICAgICAgICBbR1RLXSBSZW1vdmUgdGhlIC0tZW5hYmxlLXVuc3RhYmxlLWZlYXR1
cmVzIGNvbmZpZ3VyYXRpb24gb3B0aW9uCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0b3IucG0gYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9z
Y3JpcHRzL0NvZGVHZW5lcmF0b3IucG0KaW5kZXggYWMzYWQ0YTg1ZGIxZDQzZGVmZDQ2MWZiOTYw
MmIwMzM3MWMzYTk4NC4uNjhiMzExNTBmNTgxYWRjNGE4ZDBmYzU1ZDc0ZmVkYjZiM2I4MzFlYSAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy9Db2RlR2VuZXJhdG9y
LnBtCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvQ29kZUdlbmVyYXRvci5w
bQpAQCAtNTY1LDYgKzU2NSwxNSBAQCBzdWIgQ29udGVudEF0dHJpYnV0ZU5hbWUKICAgICByZXR1
cm4gIldlYkNvcmU6OiR7bmFtZXNwYWNlfTo6JHtjb250ZW50QXR0cmlidXRlTmFtZX1BdHRyIjsK
IH0KIAorc3ViIENhblVzZUZhc3RBdHRyaWJ1dGUKK3sKKyAgICBteSAoJGdlbmVyYXRvciwgJGF0
dHJpYnV0ZSkgPSBAXzsKKyAgICBteSAkYXR0cmlidXRlVHlwZSA9ICRhdHRyaWJ1dGUtPnNpZ25h
dHVyZS0+dHlwZTsKKyAgICAjIEhUTUxOYW1lczo6c3R5bGVBdHRyIGNhbm5vdCBiZSB1c2VkIHdp
dGggZmFzdHtHZXQsSGFzfUF0dHJpYnV0ZSBidXQgd2UgZG8gbm90IFtSZWZsZWN0XSB0aGUKKyAg
ICAjIHN0eWxlIGF0dHJpYnV0ZS4KKyAgICByZXR1cm4gISRnZW5lcmF0b3ItPklzU1ZHQW5pbWF0
ZWRUeXBlKCRhdHRyaWJ1dGVUeXBlKTsKK30KKwogc3ViIEdldHRlckV4cHJlc3Npb24KIHsKICAg
ICBteSAoJGdlbmVyYXRvciwgJGltcGxJbmNsdWRlcywgJGludGVyZmFjZU5hbWUsICRhdHRyaWJ1
dGUpID0gQF87CkBAIC01NzksMTMgKzU4OCwyMiBAQCBzdWIgR2V0dGVyRXhwcmVzc2lvbgogICAg
IGlmICgkYXR0cmlidXRlLT5zaWduYXR1cmUtPmV4dGVuZGVkQXR0cmlidXRlcy0+eyJVUkwifSkg
ewogICAgICAgICAkZnVuY3Rpb25OYW1lID0gImdldFVSTEF0dHJpYnV0ZSI7CiAgICAgfSBlbHNp
ZiAoJGF0dHJpYnV0ZS0+c2lnbmF0dXJlLT50eXBlIGVxICJib29sZWFuIikgewotICAgICAgICAk
ZnVuY3Rpb25OYW1lID0gImhhc0F0dHJpYnV0ZSI7CisgICAgICAgIG15ICRuYW1lc3BhY2UgPSAk
Z2VuZXJhdG9yLT5OYW1lc3BhY2VGb3JBdHRyaWJ1dGVOYW1lKCRpbnRlcmZhY2VOYW1lLCAkY29u
dGVudEF0dHJpYnV0ZU5hbWUpOworICAgICAgICBpZiAoJGdlbmVyYXRvci0+Q2FuVXNlRmFzdEF0
dHJpYnV0ZSgkYXR0cmlidXRlKSkgeworICAgICAgICAgICAgJGZ1bmN0aW9uTmFtZSA9ICJmYXN0
SGFzQXR0cmlidXRlIjsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICRmdW5jdGlvbk5h
bWUgPSAiaGFzQXR0cmlidXRlIjsKKyAgICAgICAgfQogICAgIH0gZWxzaWYgKCRhdHRyaWJ1dGUt
PnNpZ25hdHVyZS0+dHlwZSBlcSAibG9uZyIpIHsKICAgICAgICAgJGZ1bmN0aW9uTmFtZSA9ICJn
ZXRJbnRlZ3JhbEF0dHJpYnV0ZSI7CiAgICAgfSBlbHNpZiAoJGF0dHJpYnV0ZS0+c2lnbmF0dXJl
LT50eXBlIGVxICJ1bnNpZ25lZCBsb25nIikgewogICAgICAgICAkZnVuY3Rpb25OYW1lID0gImdl
dFVuc2lnbmVkSW50ZWdyYWxBdHRyaWJ1dGUiOwogICAgIH0gZWxzZSB7Ci0gICAgICAgICRmdW5j
dGlvbk5hbWUgPSAiZ2V0QXR0cmlidXRlIjsKKyAgICAgICAgaWYgKCRnZW5lcmF0b3ItPkNhblVz
ZUZhc3RBdHRyaWJ1dGUoJGF0dHJpYnV0ZSkpIHsKKyAgICAgICAgICAgICRmdW5jdGlvbk5hbWUg
PSAiZmFzdEdldEF0dHJpYnV0ZSI7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAkZnVu
Y3Rpb25OYW1lID0gImdldEF0dHJpYnV0ZSI7CisgICAgICAgIH0KICAgICB9CiAKICAgICByZXR1
cm4gKCRmdW5jdGlvbk5hbWUsICRjb250ZW50QXR0cmlidXRlTmFtZSk7CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0b3JWOC5wbSBiL1NvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvQ29kZUdlbmVyYXRvclY4LnBtCmluZGV4IGIxMTI0
YzA3NDM2MDE3ZTRlY2RkNTkzMjA0MWMxNDljZjIyYWQ1ZGIuLmZhYjllMzJkN2QzMTZkZmVkYTZm
ZmMzOTU4NjliOTEwOGE4YjA2MzUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L3NjcmlwdHMvQ29kZUdlbmVyYXRvclY4LnBtCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L3NjcmlwdHMvQ29kZUdlbmVyYXRvclY4LnBtCkBAIC05MzEsMTEgKzkzMSw5IEBAIEVORAogICAg
ICAgICBteSAkdXJsID0gJGF0dHJpYnV0ZS0+c2lnbmF0dXJlLT5leHRlbmRlZEF0dHJpYnV0ZXMt
PnsiVVJMIn07CiAgICAgICAgIGlmICgkZ2V0dGVyU3RyaW5nVXNlc0ltcCAmJiAkcmVmbGVjdCAm
JiAhJHVybCAmJiAkY29kZUdlbmVyYXRvci0+SXNTdWJUeXBlKCRpbnRlcmZhY2UsICJOb2RlIikg
JiYgJGNvZGVHZW5lcmF0b3ItPklzU3RyaW5nVHlwZSgkYXR0clR5cGUpKSB7CiAgICAgICAgICAg
ICAjIEdlbmVyYXRlIHN1cGVyLWNvbXBhY3QgY2FsbCBmb3IgcmVndWxhciBhdHRyaWJ1dGUgZ2V0
dGVyOgotICAgICAgICAgICAgbXkgJGNvbnRlbnRBdHRyaWJ1dGVOYW1lID0gJHJlZmxlY3QgZXEg
IlZBTFVFX0lTX01JU1NJTkciID8gbGMgJGF0dHJOYW1lIDogJHJlZmxlY3Q7Ci0gICAgICAgICAg
ICBteSAkbmFtZXNwYWNlID0gJGNvZGVHZW5lcmF0b3ItPk5hbWVzcGFjZUZvckF0dHJpYnV0ZU5h
bWUoJGludGVyZmFjZU5hbWUsICRjb250ZW50QXR0cmlidXRlTmFtZSk7Ci0gICAgICAgICAgICBB
ZGRUb0ltcGxJbmNsdWRlcygiJHtuYW1lc3BhY2V9LmgiKTsKKyAgICAgICAgICAgIG15ICgkZnVu
Y3Rpb25OYW1lLCBAYXJndW1lbnRzKSA9ICRjb2RlR2VuZXJhdG9yLT5HZXR0ZXJFeHByZXNzaW9u
KFwlaW1wbEluY2x1ZGVzLCAkaW50ZXJmYWNlTmFtZSwgJGF0dHJpYnV0ZSk7CiAgICAgICAgICAg
ICBwdXNoKEBpbXBsQ29udGVudERlY2xzLCAiICAgIEVsZW1lbnQqIGltcCA9IFY4RWxlbWVudDo6
dG9OYXRpdmUoaW5mby5Ib2xkZXIoKSk7XG4iKTsKLSAgICAgICAgICAgIHB1c2goQGltcGxDb250
ZW50RGVjbHMsICIgICAgcmV0dXJuIHY4U3RyaW5nKGltcC0+Z2V0QXR0cmlidXRlKCR7bmFtZXNw
YWNlfTo6JHtjb250ZW50QXR0cmlidXRlTmFtZX1BdHRyKSwgaW5mby5HZXRJc29sYXRlKCkpO1xu
Iik7CisgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudERlY2xzLCAiICAgIHJldHVybiB2OFN0
cmluZyhpbXAtPiR7ZnVuY3Rpb25OYW1lfSgiIC4gam9pbigiLCAiLCBAYXJndW1lbnRzKSAuICIp
LCBpbmZvLkdldElzb2xhdGUoKSk7XG4iKTsKICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50
RGVjbHMsICJ9XG5cbiIpOwogICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnREZWNscywgIiNl
bmRpZiAvLyAke2NvbmRpdGlvbmFsU3RyaW5nfVxuXG4iKSBpZiAkY29uZGl0aW9uYWxTdHJpbmc7
CiAgICAgICAgICAgICByZXR1cm47CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy9zY3JpcHRzL3Rlc3QvQ1BQL1dlYkRPTVRlc3RPYmouY3BwIGIvU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3Mvc2NyaXB0cy90ZXN0L0NQUC9XZWJET01UZXN0T2JqLmNwcAppbmRleCA2NTc1OTUwYWQ4
MDY3MTYxYzI4ZDQ4NDY5MTNlMGJhZDc1MzZkNTRmLi5kNzkyMDRkMjAxMDBjNTRmYzFhMWUxNmE2
NGI3NWNhOTQwNGYyZjczIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3Jp
cHRzL3Rlc3QvQ1BQL1dlYkRPTVRlc3RPYmouY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL3NjcmlwdHMvdGVzdC9DUFAvV2ViRE9NVGVzdE9iai5jcHAKQEAgLTI3Miw3ICsyNzIsNyBA
QCBXZWJET01TdHJpbmcgV2ViRE9NVGVzdE9iajo6cmVmbGVjdGVkU3RyaW5nQXR0cigpIGNvbnN0
CiAgICAgaWYgKCFpbXBsKCkpCiAgICAgICAgIHJldHVybiBXZWJET01TdHJpbmcoKTsKIAotICAg
IHJldHVybiBzdGF0aWNfY2FzdDxjb25zdCBXVEY6OlN0cmluZyY+KGltcGwoKS0+Z2V0QXR0cmli
dXRlKFdlYkNvcmU6OkhUTUxOYW1lczo6cmVmbGVjdGVkc3RyaW5nYXR0ckF0dHIpKTsKKyAgICBy
ZXR1cm4gc3RhdGljX2Nhc3Q8Y29uc3QgV1RGOjpTdHJpbmcmPihpbXBsKCktPmZhc3RHZXRBdHRy
aWJ1dGUoV2ViQ29yZTo6SFRNTE5hbWVzOjpyZWZsZWN0ZWRzdHJpbmdhdHRyQXR0cikpOwogfQog
CiB2b2lkIFdlYkRPTVRlc3RPYmo6OnNldFJlZmxlY3RlZFN0cmluZ0F0dHIoY29uc3QgV2ViRE9N
U3RyaW5nJiBuZXdSZWZsZWN0ZWRTdHJpbmdBdHRyKQpAQCAtMzIwLDcgKzMyMCw3IEBAIGJvb2wg
V2ViRE9NVGVzdE9iajo6cmVmbGVjdGVkQm9vbGVhbkF0dHIoKSBjb25zdAogICAgIGlmICghaW1w
bCgpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICByZXR1cm4gaW1wbCgpLT5oYXNBdHRy
aWJ1dGUoV2ViQ29yZTo6SFRNTE5hbWVzOjpyZWZsZWN0ZWRib29sZWFuYXR0ckF0dHIpOworICAg
IHJldHVybiBpbXBsKCktPmZhc3RIYXNBdHRyaWJ1dGUoV2ViQ29yZTo6SFRNTE5hbWVzOjpyZWZs
ZWN0ZWRib29sZWFuYXR0ckF0dHIpOwogfQogCiB2b2lkIFdlYkRPTVRlc3RPYmo6OnNldFJlZmxl
Y3RlZEJvb2xlYW5BdHRyKGJvb2wgbmV3UmVmbGVjdGVkQm9vbGVhbkF0dHIpCkBAIC0zNTIsNyAr
MzUyLDcgQEAgV2ViRE9NU3RyaW5nIFdlYkRPTVRlc3RPYmo6OnJlZmxlY3RlZFN0cmluZ0F0dHIo
KSBjb25zdAogICAgIGlmICghaW1wbCgpKQogICAgICAgICByZXR1cm4gV2ViRE9NU3RyaW5nKCk7
CiAKLSAgICByZXR1cm4gc3RhdGljX2Nhc3Q8Y29uc3QgV1RGOjpTdHJpbmcmPihpbXBsKCktPmdl
dEF0dHJpYnV0ZShXZWJDb3JlOjpIVE1MTmFtZXM6OmN1c3RvbUNvbnRlbnRTdHJpbmdBdHRyQXR0
cikpOworICAgIHJldHVybiBzdGF0aWNfY2FzdDxjb25zdCBXVEY6OlN0cmluZyY+KGltcGwoKS0+
ZmFzdEdldEF0dHJpYnV0ZShXZWJDb3JlOjpIVE1MTmFtZXM6OmN1c3RvbUNvbnRlbnRTdHJpbmdB
dHRyQXR0cikpOwogfQogCiB2b2lkIFdlYkRPTVRlc3RPYmo6OnNldFJlZmxlY3RlZFN0cmluZ0F0
dHIoY29uc3QgV2ViRE9NU3RyaW5nJiBuZXdSZWZsZWN0ZWRTdHJpbmdBdHRyKQpAQCAtMzg0LDcg
KzM4NCw3IEBAIGJvb2wgV2ViRE9NVGVzdE9iajo6cmVmbGVjdGVkQ3VzdG9tQm9vbGVhbkF0dHIo
KSBjb25zdAogICAgIGlmICghaW1wbCgpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBy
ZXR1cm4gaW1wbCgpLT5oYXNBdHRyaWJ1dGUoV2ViQ29yZTo6SFRNTE5hbWVzOjpjdXN0b21Db250
ZW50Qm9vbGVhbkF0dHJBdHRyKTsKKyAgICByZXR1cm4gaW1wbCgpLT5mYXN0SGFzQXR0cmlidXRl
KFdlYkNvcmU6OkhUTUxOYW1lczo6Y3VzdG9tQ29udGVudEJvb2xlYW5BdHRyQXR0cik7CiB9CiAK
IHZvaWQgV2ViRE9NVGVzdE9iajo6c2V0UmVmbGVjdGVkQ3VzdG9tQm9vbGVhbkF0dHIoYm9vbCBu
ZXdSZWZsZWN0ZWRDdXN0b21Cb29sZWFuQXR0cikKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9HT2JqZWN0L1dlYktpdERPTVRlc3RPYmouY3BwIGIvU291
cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0dPYmplY3QvV2ViS2l0RE9NVGVzdE9i
ai5jcHAKaW5kZXggNGFmZjg5NWI5YjY2OThkN2Y4YTIxYmU3ZmUwNmUwZDYzMThhMjYxOC4uNjkz
ZTY1MjMyNDg0MThmZDM2N2Y4ZjAyNzY5YmI2MWRjYzNhM2ZmNSAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0dPYmplY3QvV2ViS2l0RE9NVGVzdE9iai5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0dPYmplY3QvV2Vi
S2l0RE9NVGVzdE9iai5jcHAKQEAgLTMzMSw3ICszMzEsNyBAQCBzdGF0aWMgdm9pZCB3ZWJraXRf
ZG9tX3Rlc3Rfb2JqX2dldF9wcm9wZXJ0eShHT2JqZWN0KiBvYmplY3QsIGd1aW50IHByb3BlcnR5
SWQsCiAgICAgICAgIGJyZWFrOwogICAgIH0KICAgICBjYXNlIFBST1BfUkVGTEVDVEVEX1NUUklO
R19BVFRSOiB7Ci0gICAgICAgIGdfdmFsdWVfdGFrZV9zdHJpbmcodmFsdWUsIGNvbnZlcnRUb1VU
RjhTdHJpbmcoY29yZVNlbGYtPmdldEF0dHJpYnV0ZShXZWJDb3JlOjpIVE1MTmFtZXM6OnJlZmxl
Y3RlZHN0cmluZ2F0dHJBdHRyKSkpOworICAgICAgICBnX3ZhbHVlX3Rha2Vfc3RyaW5nKHZhbHVl
LCBjb252ZXJ0VG9VVEY4U3RyaW5nKGNvcmVTZWxmLT5mYXN0R2V0QXR0cmlidXRlKFdlYkNvcmU6
OkhUTUxOYW1lczo6cmVmbGVjdGVkc3RyaW5nYXR0ckF0dHIpKSk7CiAgICAgICAgIGJyZWFrOwog
ICAgIH0KICAgICBjYXNlIFBST1BfUkVGTEVDVEVEX0lOVEVHUkFMX0FUVFI6IHsKQEAgLTM0Myw3
ICszNDMsNyBAQCBzdGF0aWMgdm9pZCB3ZWJraXRfZG9tX3Rlc3Rfb2JqX2dldF9wcm9wZXJ0eShH
T2JqZWN0KiBvYmplY3QsIGd1aW50IHByb3BlcnR5SWQsCiAgICAgICAgIGJyZWFrOwogICAgIH0K
ICAgICBjYXNlIFBST1BfUkVGTEVDVEVEX0JPT0xFQU5fQVRUUjogewotICAgICAgICBnX3ZhbHVl
X3NldF9ib29sZWFuKHZhbHVlLCBjb3JlU2VsZi0+aGFzQXR0cmlidXRlKFdlYkNvcmU6OkhUTUxO
YW1lczo6cmVmbGVjdGVkYm9vbGVhbmF0dHJBdHRyKSk7CisgICAgICAgIGdfdmFsdWVfc2V0X2Jv
b2xlYW4odmFsdWUsIGNvcmVTZWxmLT5mYXN0SGFzQXR0cmlidXRlKFdlYkNvcmU6OkhUTUxOYW1l
czo6cmVmbGVjdGVkYm9vbGVhbmF0dHJBdHRyKSk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KICAg
ICBjYXNlIFBST1BfUkVGTEVDVEVEX1VSTF9BVFRSOiB7CkBAIC0zNTEsNyArMzUxLDcgQEAgc3Rh
dGljIHZvaWQgd2Via2l0X2RvbV90ZXN0X29ial9nZXRfcHJvcGVydHkoR09iamVjdCogb2JqZWN0
LCBndWludCBwcm9wZXJ0eUlkLAogICAgICAgICBicmVhazsKICAgICB9CiAgICAgY2FzZSBQUk9Q
X1JFRkxFQ1RFRF9TVFJJTkdfQVRUUjogewotICAgICAgICBnX3ZhbHVlX3Rha2Vfc3RyaW5nKHZh
bHVlLCBjb252ZXJ0VG9VVEY4U3RyaW5nKGNvcmVTZWxmLT5nZXRBdHRyaWJ1dGUoV2ViQ29yZTo6
SFRNTE5hbWVzOjpjdXN0b21Db250ZW50U3RyaW5nQXR0ckF0dHIpKSk7CisgICAgICAgIGdfdmFs
dWVfdGFrZV9zdHJpbmcodmFsdWUsIGNvbnZlcnRUb1VURjhTdHJpbmcoY29yZVNlbGYtPmZhc3RH
ZXRBdHRyaWJ1dGUoV2ViQ29yZTo6SFRNTE5hbWVzOjpjdXN0b21Db250ZW50U3RyaW5nQXR0ckF0
dHIpKSk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KICAgICBjYXNlIFBST1BfUkVGTEVDVEVEX0NV
U1RPTV9JTlRFR1JBTF9BVFRSOiB7CkBAIC0zNTksNyArMzU5LDcgQEAgc3RhdGljIHZvaWQgd2Vi
a2l0X2RvbV90ZXN0X29ial9nZXRfcHJvcGVydHkoR09iamVjdCogb2JqZWN0LCBndWludCBwcm9w
ZXJ0eUlkLAogICAgICAgICBicmVhazsKICAgICB9CiAgICAgY2FzZSBQUk9QX1JFRkxFQ1RFRF9D
VVNUT01fQk9PTEVBTl9BVFRSOiB7Ci0gICAgICAgIGdfdmFsdWVfc2V0X2Jvb2xlYW4odmFsdWUs
IGNvcmVTZWxmLT5oYXNBdHRyaWJ1dGUoV2ViQ29yZTo6SFRNTE5hbWVzOjpjdXN0b21Db250ZW50
Qm9vbGVhbkF0dHJBdHRyKSk7CisgICAgICAgIGdfdmFsdWVfc2V0X2Jvb2xlYW4odmFsdWUsIGNv
cmVTZWxmLT5mYXN0SGFzQXR0cmlidXRlKFdlYkNvcmU6OkhUTUxOYW1lczo6Y3VzdG9tQ29udGVu
dEJvb2xlYW5BdHRyQXR0cikpOwogICAgICAgICBicmVhazsKICAgICB9CiAgICAgY2FzZSBQUk9Q
X1JFRkxFQ1RFRF9DVVNUT01fVVJMX0FUVFI6IHsKQEAgLTE2MjMsNyArMTYyMyw3IEBAIHdlYmtp
dF9kb21fdGVzdF9vYmpfZ2V0X3JlZmxlY3RlZF9zdHJpbmdfYXR0cihXZWJLaXRET01UZXN0T2Jq
KiBzZWxmKQogICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKICAgICBn
X3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfRE9NX0lTX1RFU1RfT0JKKHNlbGYpLCAwKTsKICAg
ICBXZWJDb3JlOjpUZXN0T2JqKiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOwotICAgIGdjaGFy
KiByZXN1bHQgPSBjb252ZXJ0VG9VVEY4U3RyaW5nKGl0ZW0tPmdldEF0dHJpYnV0ZShXZWJDb3Jl
OjpIVE1MTmFtZXM6OnJlZmxlY3RlZHN0cmluZ2F0dHJBdHRyKSk7CisgICAgZ2NoYXIqIHJlc3Vs
dCA9IGNvbnZlcnRUb1VURjhTdHJpbmcoaXRlbS0+ZmFzdEdldEF0dHJpYnV0ZShXZWJDb3JlOjpI
VE1MTmFtZXM6OnJlZmxlY3RlZHN0cmluZ2F0dHJBdHRyKSk7CiAgICAgcmV0dXJuIHJlc3VsdDsK
IH0KIApAQCAtMTY4Miw3ICsxNjgyLDcgQEAgd2Via2l0X2RvbV90ZXN0X29ial9nZXRfcmVmbGVj
dGVkX2Jvb2xlYW5fYXR0cihXZWJLaXRET01UZXN0T2JqKiBzZWxmKQogICAgIFdlYkNvcmU6OkpT
TWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKICAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJL
SVRfRE9NX0lTX1RFU1RfT0JKKHNlbGYpLCBGQUxTRSk7CiAgICAgV2ViQ29yZTo6VGVzdE9iaiog
aXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKLSAgICBnYm9vbGVhbiByZXN1bHQgPSBpdGVtLT5o
YXNBdHRyaWJ1dGUoV2ViQ29yZTo6SFRNTE5hbWVzOjpyZWZsZWN0ZWRib29sZWFuYXR0ckF0dHIp
OworICAgIGdib29sZWFuIHJlc3VsdCA9IGl0ZW0tPmZhc3RIYXNBdHRyaWJ1dGUoV2ViQ29yZTo6
SFRNTE5hbWVzOjpyZWZsZWN0ZWRib29sZWFuYXR0ckF0dHIpOwogICAgIHJldHVybiByZXN1bHQ7
CiB9CiAKQEAgLTE3MjIsNyArMTcyMiw3IEBAIHdlYmtpdF9kb21fdGVzdF9vYmpfZ2V0X3JlZmxl
Y3RlZF9zdHJpbmdfYXR0cihXZWJLaXRET01UZXN0T2JqKiBzZWxmKQogICAgIFdlYkNvcmU6OkpT
TWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKICAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJL
SVRfRE9NX0lTX1RFU1RfT0JKKHNlbGYpLCAwKTsKICAgICBXZWJDb3JlOjpUZXN0T2JqKiBpdGVt
ID0gV2ViS2l0Ojpjb3JlKHNlbGYpOwotICAgIGdjaGFyKiByZXN1bHQgPSBjb252ZXJ0VG9VVEY4
U3RyaW5nKGl0ZW0tPmdldEF0dHJpYnV0ZShXZWJDb3JlOjpIVE1MTmFtZXM6OmN1c3RvbUNvbnRl
bnRTdHJpbmdBdHRyQXR0cikpOworICAgIGdjaGFyKiByZXN1bHQgPSBjb252ZXJ0VG9VVEY4U3Ry
aW5nKGl0ZW0tPmZhc3RHZXRBdHRyaWJ1dGUoV2ViQ29yZTo6SFRNTE5hbWVzOjpjdXN0b21Db250
ZW50U3RyaW5nQXR0ckF0dHIpKTsKICAgICByZXR1cm4gcmVzdWx0OwogfQogCkBAIC0xNzYyLDcg
KzE3NjIsNyBAQCB3ZWJraXRfZG9tX3Rlc3Rfb2JqX2dldF9yZWZsZWN0ZWRfY3VzdG9tX2Jvb2xl
YW5fYXR0cihXZWJLaXRET01UZXN0T2JqKiBzZWxmKQogICAgIFdlYkNvcmU6OkpTTWFpblRocmVh
ZE51bGxTdGF0ZSBzdGF0ZTsKICAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfRE9NX0lT
X1RFU1RfT0JKKHNlbGYpLCBGQUxTRSk7CiAgICAgV2ViQ29yZTo6VGVzdE9iaiogaXRlbSA9IFdl
YktpdDo6Y29yZShzZWxmKTsKLSAgICBnYm9vbGVhbiByZXN1bHQgPSBpdGVtLT5oYXNBdHRyaWJ1
dGUoV2ViQ29yZTo6SFRNTE5hbWVzOjpjdXN0b21Db250ZW50Qm9vbGVhbkF0dHJBdHRyKTsKKyAg
ICBnYm9vbGVhbiByZXN1bHQgPSBpdGVtLT5mYXN0SGFzQXR0cmlidXRlKFdlYkNvcmU6OkhUTUxO
YW1lczo6Y3VzdG9tQ29udGVudEJvb2xlYW5BdHRyQXR0cik7CiAgICAgcmV0dXJuIHJlc3VsdDsK
IH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pT
L0pTVGVzdE9iai5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMv
SlNUZXN0T2JqLmNwcAppbmRleCA2MjVmMzQ4YTk2NTQ2YjQ2NmQ3N2RkNjgxMmQwYmNkOTk0YzY0
YmI4Li42YjA1NDhjYjAwMmNjOWJhMzgwYTZiNDMyMWI0N2QxODkwMjMxOTA0IDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0T2JqLmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0T2JqLmNw
cApAQCAtNTM4LDcgKzUzOCw3IEBAIEpTVmFsdWUganNUZXN0T2JqUmVmbGVjdGVkU3RyaW5nQXR0
cihFeGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWUgc2xvdEJhc2UsIFByb3BlcnR5CiAgICAgSlNUZXN0
T2JqKiBjYXN0ZWRUaGlzID0ganNDYXN0PEpTVGVzdE9iaio+KGFzT2JqZWN0KHNsb3RCYXNlKSk7
CiAgICAgVU5VU0VEX1BBUkFNKGV4ZWMpOwogICAgIFRlc3RPYmoqIGltcGwgPSBzdGF0aWNfY2Fz
dDxUZXN0T2JqKj4oY2FzdGVkVGhpcy0+aW1wbCgpKTsKLSAgICBKU1ZhbHVlIHJlc3VsdCA9IGpz
U3RyaW5nV2l0aENhY2hlKGV4ZWMsIGltcGwtPmdldEF0dHJpYnV0ZShXZWJDb3JlOjpIVE1MTmFt
ZXM6OnJlZmxlY3RlZHN0cmluZ2F0dHJBdHRyKSk7CisgICAgSlNWYWx1ZSByZXN1bHQgPSBqc1N0
cmluZ1dpdGhDYWNoZShleGVjLCBpbXBsLT5mYXN0R2V0QXR0cmlidXRlKFdlYkNvcmU6OkhUTUxO
YW1lczo6cmVmbGVjdGVkc3RyaW5nYXR0ckF0dHIpKTsKICAgICByZXR1cm4gcmVzdWx0OwogfQog
CkBAIC01NjgsNyArNTY4LDcgQEAgSlNWYWx1ZSBqc1Rlc3RPYmpSZWZsZWN0ZWRCb29sZWFuQXR0
cihFeGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWUgc2xvdEJhc2UsIFByb3BlcnQKICAgICBKU1Rlc3RP
YmoqIGNhc3RlZFRoaXMgPSBqc0Nhc3Q8SlNUZXN0T2JqKj4oYXNPYmplY3Qoc2xvdEJhc2UpKTsK
ICAgICBVTlVTRURfUEFSQU0oZXhlYyk7CiAgICAgVGVzdE9iaiogaW1wbCA9IHN0YXRpY19jYXN0
PFRlc3RPYmoqPihjYXN0ZWRUaGlzLT5pbXBsKCkpOwotICAgIEpTVmFsdWUgcmVzdWx0ID0ganNC
b29sZWFuKGltcGwtPmhhc0F0dHJpYnV0ZShXZWJDb3JlOjpIVE1MTmFtZXM6OnJlZmxlY3RlZGJv
b2xlYW5hdHRyQXR0cikpOworICAgIEpTVmFsdWUgcmVzdWx0ID0ganNCb29sZWFuKGltcGwtPmZh
c3RIYXNBdHRyaWJ1dGUoV2ViQ29yZTo6SFRNTE5hbWVzOjpyZWZsZWN0ZWRib29sZWFuYXR0ckF0
dHIpKTsKICAgICByZXR1cm4gcmVzdWx0OwogfQogCkBAIC01ODgsNyArNTg4LDcgQEAgSlNWYWx1
ZSBqc1Rlc3RPYmpSZWZsZWN0ZWRTdHJpbmdBdHRyKEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZSBz
bG90QmFzZSwgUHJvcGVydHkKICAgICBKU1Rlc3RPYmoqIGNhc3RlZFRoaXMgPSBqc0Nhc3Q8SlNU
ZXN0T2JqKj4oYXNPYmplY3Qoc2xvdEJhc2UpKTsKICAgICBVTlVTRURfUEFSQU0oZXhlYyk7CiAg
ICAgVGVzdE9iaiogaW1wbCA9IHN0YXRpY19jYXN0PFRlc3RPYmoqPihjYXN0ZWRUaGlzLT5pbXBs
KCkpOwotICAgIEpTVmFsdWUgcmVzdWx0ID0ganNTdHJpbmdXaXRoQ2FjaGUoZXhlYywgaW1wbC0+
Z2V0QXR0cmlidXRlKFdlYkNvcmU6OkhUTUxOYW1lczo6Y3VzdG9tQ29udGVudFN0cmluZ0F0dHJB
dHRyKSk7CisgICAgSlNWYWx1ZSByZXN1bHQgPSBqc1N0cmluZ1dpdGhDYWNoZShleGVjLCBpbXBs
LT5mYXN0R2V0QXR0cmlidXRlKFdlYkNvcmU6OkhUTUxOYW1lczo6Y3VzdG9tQ29udGVudFN0cmlu
Z0F0dHJBdHRyKSk7CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIApAQCAtNjA4LDcgKzYwOCw3IEBA
IEpTVmFsdWUganNUZXN0T2JqUmVmbGVjdGVkQ3VzdG9tQm9vbGVhbkF0dHIoRXhlY1N0YXRlKiBl
eGVjLCBKU1ZhbHVlIHNsb3RCYXNlLCBQCiAgICAgSlNUZXN0T2JqKiBjYXN0ZWRUaGlzID0ganND
YXN0PEpTVGVzdE9iaio+KGFzT2JqZWN0KHNsb3RCYXNlKSk7CiAgICAgVU5VU0VEX1BBUkFNKGV4
ZWMpOwogICAgIFRlc3RPYmoqIGltcGwgPSBzdGF0aWNfY2FzdDxUZXN0T2JqKj4oY2FzdGVkVGhp
cy0+aW1wbCgpKTsKLSAgICBKU1ZhbHVlIHJlc3VsdCA9IGpzQm9vbGVhbihpbXBsLT5oYXNBdHRy
aWJ1dGUoV2ViQ29yZTo6SFRNTE5hbWVzOjpjdXN0b21Db250ZW50Qm9vbGVhbkF0dHJBdHRyKSk7
CisgICAgSlNWYWx1ZSByZXN1bHQgPSBqc0Jvb2xlYW4oaW1wbC0+ZmFzdEhhc0F0dHJpYnV0ZShX
ZWJDb3JlOjpIVE1MTmFtZXM6OmN1c3RvbUNvbnRlbnRCb29sZWFuQXR0ckF0dHIpKTsKICAgICBy
ZXR1cm4gcmVzdWx0OwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9z
Y3JpcHRzL3Rlc3QvT2JqQy9ET01UZXN0T2JqLm1tIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
c2NyaXB0cy90ZXN0L09iakMvRE9NVGVzdE9iai5tbQppbmRleCBlMTRjNjU3MWQ5ZWRhMjYyMzVk
NDhhN2IwOWNhMjM5ZWQzNWQxZWRjLi5lZGNkYmQzMmUwY2M5NjFmNzFkNTIyZDM3MzI4OWFmNTZl
NWFiZjk1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3Qv
T2JqQy9ET01UZXN0T2JqLm1tCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMv
dGVzdC9PYmpDL0RPTVRlc3RPYmoubW0KQEAgLTIzMiw3ICsyMzIsNyBAQCAtICh2b2lkKXNldENy
ZWF0ZTooQk9PTCluZXdDcmVhdGUKIC0gKE5TU3RyaW5nICopcmVmbGVjdGVkU3RyaW5nQXR0cgog
ewogICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKLSAgICByZXR1cm4g
SU1QTC0+Z2V0QXR0cmlidXRlKFdlYkNvcmU6OkhUTUxOYW1lczo6cmVmbGVjdGVkc3RyaW5nYXR0
ckF0dHIpOworICAgIHJldHVybiBJTVBMLT5mYXN0R2V0QXR0cmlidXRlKFdlYkNvcmU6OkhUTUxO
YW1lczo6cmVmbGVjdGVkc3RyaW5nYXR0ckF0dHIpOwogfQogCiAtICh2b2lkKXNldFJlZmxlY3Rl
ZFN0cmluZ0F0dHI6KE5TU3RyaW5nICopbmV3UmVmbGVjdGVkU3RyaW5nQXR0cgpAQCAtMjY4LDcg
KzI2OCw3IEBAIC0gKHZvaWQpc2V0UmVmbGVjdGVkVW5zaWduZWRJbnRlZ3JhbEF0dHI6KHVuc2ln
bmVkKW5ld1JlZmxlY3RlZFVuc2lnbmVkSW50ZWdyYWxBCiAtIChCT09MKXJlZmxlY3RlZEJvb2xl
YW5BdHRyCiB7CiAgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOwotICAg
IHJldHVybiBJTVBMLT5oYXNBdHRyaWJ1dGUoV2ViQ29yZTo6SFRNTE5hbWVzOjpyZWZsZWN0ZWRi
b29sZWFuYXR0ckF0dHIpOworICAgIHJldHVybiBJTVBMLT5mYXN0SGFzQXR0cmlidXRlKFdlYkNv
cmU6OkhUTUxOYW1lczo6cmVmbGVjdGVkYm9vbGVhbmF0dHJBdHRyKTsKIH0KIAogLSAodm9pZClz
ZXRSZWZsZWN0ZWRCb29sZWFuQXR0cjooQk9PTCluZXdSZWZsZWN0ZWRCb29sZWFuQXR0cgpAQCAt
MjkyLDcgKzI5Miw3IEBAIC0gKHZvaWQpc2V0UmVmbGVjdGVkVVJMQXR0cjooTlNTdHJpbmcgKilu
ZXdSZWZsZWN0ZWRVUkxBdHRyCiAtIChOU1N0cmluZyAqKXJlZmxlY3RlZFN0cmluZ0F0dHIKIHsK
ICAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7Ci0gICAgcmV0dXJuIElN
UEwtPmdldEF0dHJpYnV0ZShXZWJDb3JlOjpIVE1MTmFtZXM6OmN1c3RvbUNvbnRlbnRTdHJpbmdB
dHRyQXR0cik7CisgICAgcmV0dXJuIElNUEwtPmZhc3RHZXRBdHRyaWJ1dGUoV2ViQ29yZTo6SFRN
TE5hbWVzOjpjdXN0b21Db250ZW50U3RyaW5nQXR0ckF0dHIpOwogfQogCiAtICh2b2lkKXNldFJl
ZmxlY3RlZFN0cmluZ0F0dHI6KE5TU3RyaW5nICopbmV3UmVmbGVjdGVkU3RyaW5nQXR0cgpAQCAt
MzE2LDcgKzMxNiw3IEBAIC0gKHZvaWQpc2V0UmVmbGVjdGVkQ3VzdG9tSW50ZWdyYWxBdHRyOihp
bnQpbmV3UmVmbGVjdGVkQ3VzdG9tSW50ZWdyYWxBdHRyCiAtIChCT09MKXJlZmxlY3RlZEN1c3Rv
bUJvb2xlYW5BdHRyCiB7CiAgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRl
OwotICAgIHJldHVybiBJTVBMLT5oYXNBdHRyaWJ1dGUoV2ViQ29yZTo6SFRNTE5hbWVzOjpjdXN0
b21Db250ZW50Qm9vbGVhbkF0dHJBdHRyKTsKKyAgICByZXR1cm4gSU1QTC0+ZmFzdEhhc0F0dHJp
YnV0ZShXZWJDb3JlOjpIVE1MTmFtZXM6OmN1c3RvbUNvbnRlbnRCb29sZWFuQXR0ckF0dHIpOwog
fQogCiAtICh2b2lkKXNldFJlZmxlY3RlZEN1c3RvbUJvb2xlYW5BdHRyOihCT09MKW5ld1JlZmxl
Y3RlZEN1c3RvbUJvb2xlYW5BdHRyCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy9zY3JpcHRzL3Rlc3QvVjgvVjhUZXN0T2JqLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L3NjcmlwdHMvdGVzdC9WOC9WOFRlc3RPYmouY3BwCmluZGV4IDBiMzI4OGRlNDQxN2EyZmE1NDNi
N2Y0OGE2NTE4YmVmN2U1NDkwZWYuLmY2MjQwMjdhNDA5NWVlYzhhOTU0YzU3NjAzZTQ0YThkNGUw
ZDNkNWUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9W
OC9WOFRlc3RPYmouY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVz
dC9WOC9WOFRlc3RPYmouY3BwCkBAIC0yNzksNyArMjc5LDcgQEAgc3RhdGljIHY4OjpIYW5kbGU8
djg6OlZhbHVlPiByZWZsZWN0ZWRTdHJpbmdBdHRyQXR0ckdldHRlcih2ODo6TG9jYWw8djg6OlN0
cmluZz4KIHsKICAgICBJTkNfU1RBVFMoIkRPTS5UZXN0T2JqLnJlZmxlY3RlZFN0cmluZ0F0dHIu
X2dldCIpOwogICAgIFRlc3RPYmoqIGltcCA9IFY4VGVzdE9iajo6dG9OYXRpdmUoaW5mby5Ib2xk
ZXIoKSk7Ci0gICAgcmV0dXJuIHY4U3RyaW5nKGltcC0+Z2V0QXR0cmlidXRlKFdlYkNvcmU6OkhU
TUxOYW1lczo6cmVmbGVjdGVkc3RyaW5nYXR0ckF0dHIpLCBpbmZvLkdldElzb2xhdGUoKSk7Cisg
ICAgcmV0dXJuIHY4U3RyaW5nKGltcC0+ZmFzdEdldEF0dHJpYnV0ZShXZWJDb3JlOjpIVE1MTmFt
ZXM6OnJlZmxlY3RlZHN0cmluZ2F0dHJBdHRyKSwgaW5mby5HZXRJc29sYXRlKCkpOwogfQogCiBz
dGF0aWMgdm9pZCByZWZsZWN0ZWRTdHJpbmdBdHRyQXR0clNldHRlcih2ODo6TG9jYWw8djg6OlN0
cmluZz4gbmFtZSwgdjg6OkxvY2FsPHY4OjpWYWx1ZT4gdmFsdWUsIGNvbnN0IHY4OjpBY2Nlc3Nv
ckluZm8mIGluZm8pCkBAIC0zMjcsNyArMzI3LDcgQEAgc3RhdGljIHY4OjpIYW5kbGU8djg6OlZh
bHVlPiByZWZsZWN0ZWRCb29sZWFuQXR0ckF0dHJHZXR0ZXIodjg6OkxvY2FsPHY4OjpTdHJpbmcK
IHsKICAgICBJTkNfU1RBVFMoIkRPTS5UZXN0T2JqLnJlZmxlY3RlZEJvb2xlYW5BdHRyLl9nZXQi
KTsKICAgICBUZXN0T2JqKiBpbXAgPSBWOFRlc3RPYmo6OnRvTmF0aXZlKGluZm8uSG9sZGVyKCkp
OwotICAgIHJldHVybiB2OEJvb2xlYW4oaW1wLT5oYXNBdHRyaWJ1dGUoV2ViQ29yZTo6SFRNTE5h
bWVzOjpyZWZsZWN0ZWRib29sZWFuYXR0ckF0dHIpLCBpbmZvLkdldElzb2xhdGUoKSk7CisgICAg
cmV0dXJuIHY4Qm9vbGVhbihpbXAtPmZhc3RIYXNBdHRyaWJ1dGUoV2ViQ29yZTo6SFRNTE5hbWVz
OjpyZWZsZWN0ZWRib29sZWFuYXR0ckF0dHIpLCBpbmZvLkdldElzb2xhdGUoKSk7CiB9CiAKIHN0
YXRpYyB2b2lkIHJlZmxlY3RlZEJvb2xlYW5BdHRyQXR0clNldHRlcih2ODo6TG9jYWw8djg6OlN0
cmluZz4gbmFtZSwgdjg6OkxvY2FsPHY4OjpWYWx1ZT4gdmFsdWUsIGNvbnN0IHY4OjpBY2Nlc3Nv
ckluZm8mIGluZm8pCkBAIC0zNTksNyArMzU5LDcgQEAgc3RhdGljIHY4OjpIYW5kbGU8djg6OlZh
bHVlPiByZWZsZWN0ZWRTdHJpbmdBdHRyQXR0ckdldHRlcih2ODo6TG9jYWw8djg6OlN0cmluZz4K
IHsKICAgICBJTkNfU1RBVFMoIkRPTS5UZXN0T2JqLnJlZmxlY3RlZFN0cmluZ0F0dHIuX2dldCIp
OwogICAgIFRlc3RPYmoqIGltcCA9IFY4VGVzdE9iajo6dG9OYXRpdmUoaW5mby5Ib2xkZXIoKSk7
Ci0gICAgcmV0dXJuIHY4U3RyaW5nKGltcC0+Z2V0QXR0cmlidXRlKFdlYkNvcmU6OkhUTUxOYW1l
czo6Y3VzdG9tQ29udGVudFN0cmluZ0F0dHJBdHRyKSwgaW5mby5HZXRJc29sYXRlKCkpOworICAg
IHJldHVybiB2OFN0cmluZyhpbXAtPmZhc3RHZXRBdHRyaWJ1dGUoV2ViQ29yZTo6SFRNTE5hbWVz
OjpjdXN0b21Db250ZW50U3RyaW5nQXR0ckF0dHIpLCBpbmZvLkdldElzb2xhdGUoKSk7CiB9CiAK
IHN0YXRpYyB2b2lkIHJlZmxlY3RlZFN0cmluZ0F0dHJBdHRyU2V0dGVyKHY4OjpMb2NhbDx2ODo6
U3RyaW5nPiBuYW1lLCB2ODo6TG9jYWw8djg6OlZhbHVlPiB2YWx1ZSwgY29uc3Qgdjg6OkFjY2Vz
c29ySW5mbyYgaW5mbykKQEAgLTM5MSw3ICszOTEsNyBAQCBzdGF0aWMgdjg6OkhhbmRsZTx2ODo6
VmFsdWU+IHJlZmxlY3RlZEN1c3RvbUJvb2xlYW5BdHRyQXR0ckdldHRlcih2ODo6TG9jYWw8djg6
OgogewogICAgIElOQ19TVEFUUygiRE9NLlRlc3RPYmoucmVmbGVjdGVkQ3VzdG9tQm9vbGVhbkF0
dHIuX2dldCIpOwogICAgIFRlc3RPYmoqIGltcCA9IFY4VGVzdE9iajo6dG9OYXRpdmUoaW5mby5I
b2xkZXIoKSk7Ci0gICAgcmV0dXJuIHY4Qm9vbGVhbihpbXAtPmhhc0F0dHJpYnV0ZShXZWJDb3Jl
OjpIVE1MTmFtZXM6OmN1c3RvbUNvbnRlbnRCb29sZWFuQXR0ckF0dHIpLCBpbmZvLkdldElzb2xh
dGUoKSk7CisgICAgcmV0dXJuIHY4Qm9vbGVhbihpbXAtPmZhc3RIYXNBdHRyaWJ1dGUoV2ViQ29y
ZTo6SFRNTE5hbWVzOjpjdXN0b21Db250ZW50Qm9vbGVhbkF0dHJBdHRyKSwgaW5mby5HZXRJc29s
YXRlKCkpOwogfQogCiBzdGF0aWMgdm9pZCByZWZsZWN0ZWRDdXN0b21Cb29sZWFuQXR0ckF0dHJT
ZXR0ZXIodjg6OkxvY2FsPHY4OjpTdHJpbmc+IG5hbWUsIHY4OjpMb2NhbDx2ODo6VmFsdWU+IHZh
bHVlLCBjb25zdCB2ODo6QWNjZXNzb3JJbmZvJiBpbmZvKQo=
</data>

          </attachment>
      

    </bug>

</bugzilla>