<?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>78076</bug_id>
          
          <creation_ts>2012-02-07 21:26:31 -0800</creation_ts>
          <short_desc>Rename [HasOverridingNameGetter] attribute to [CustomNamedGetter] attribute</short_desc>
          <delta_ts>2012-02-07 21:49:29 -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>WebCore JavaScript</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>
          
          <blocked>77393</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Kentaro Hara">haraken</reporter>
          <assigned_to name="Kentaro Hara">haraken</assigned_to>
          <cc>abarth</cc>
    
    <cc>darin</cc>
    
    <cc>japhet</cc>
    
    <cc>ojan</cc>
    
    <cc>tkent</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>551767</commentid>
    <comment_count>0</comment_count>
    <who name="Kentaro Hara">haraken</who>
    <bug_when>2012-02-07 21:26:31 -0800</bug_when>
    <thetext>We can rename the [HasOverridingNameGetter] attribute to the [CustomNamedGetter] attribute, for naming consistency with [CustomNamedSetter].</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>551769</commentid>
    <comment_count>1</comment_count>
      <attachid>125995</attachid>
    <who name="Kentaro Hara">haraken</who>
    <bug_when>2012-02-07 21:29:48 -0800</bug_when>
    <thetext>Created attachment 125995
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>551770</commentid>
    <comment_count>2</comment_count>
      <attachid>125995</attachid>
    <who name="Adam Barth">abarth</who>
    <bug_when>2012-02-07 21:31:07 -0800</bug_when>
    <thetext>Comment on attachment 125995
Patch

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

&gt; Source/WebCore/bindings/scripts/test/TestOverridingNameGetter.idl:32
&gt; -        HasOverridingNameGetter
&gt; +        CustomNamedGetter

Should we change the name of this test file since it refers to the old attribute name?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>551778</commentid>
    <comment_count>3</comment_count>
      <attachid>125997</attachid>
    <who name="Kentaro Hara">haraken</who>
    <bug_when>2012-02-07 21:41:25 -0800</bug_when>
    <thetext>Created attachment 125997
patch for commit</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>551783</commentid>
    <comment_count>4</comment_count>
    <who name="Kentaro Hara">haraken</who>
    <bug_when>2012-02-07 21:48:05 -0800</bug_when>
    <thetext>Committed r107039: &lt;http://trac.webkit.org/changeset/107039&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>551784</commentid>
    <comment_count>5</comment_count>
      <attachid>125995</attachid>
    <who name="Kentaro Hara">haraken</who>
    <bug_when>2012-02-07 21:49:29 -0800</bug_when>
    <thetext>Comment on attachment 125995
Patch

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

&gt;&gt; Source/WebCore/bindings/scripts/test/TestOverridingNameGetter.idl:32
&gt;&gt; +        CustomNamedGetter
&gt; 
&gt; Should we change the name of this test file since it refers to the old attribute name?

Nice catch. Renamed the file to TestCustomNamedGetter.idl, and committed manually (to avoid style check errors).</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>125995</attachid>
            <date>2012-02-07 21:29:48 -0800</date>
            <delta_ts>2012-02-07 21:49:29 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-78076-20120208142947.patch</filename>
            <type>text/plain</type>
            <size>15840</size>
            <attacher name="Kentaro Hara">haraken</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTA3MDM0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggYjcxNTYzNzQ5MGJhNWUy
YjNjNGEyY2NhNzkxMGIyMDViYWE5OTNhYy4uZDUzYWQ5OThlMmMxN2E1YTdjNjBjNTNhZWMyNmU4
MTIxMzZmMTZjZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSw1ICsxLDMwIEBACiAyMDEyLTAyLTA3ICBLZW50
YXJvIEhhcmEgIDxoYXJha2VuQGNocm9taXVtLm9yZz4KIAorICAgICAgICBSZW5hbWUgW0hhc092
ZXJyaWRpbmdOYW1lR2V0dGVyXSBhdHRyaWJ1dGUgdG8gW0N1c3RvbU5hbWVkR2V0dGVyXSBhdHRy
aWJ1dGUKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTc4
MDc2CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVGhp
cyBwYXRjaCByZW5hbWVzIHRoZSBbSGFzT3ZlcnJpZGluZ05hbWVHZXR0ZXJdIGF0dHJpYnV0ZSB0
byB0aGUKKyAgICAgICAgW0N1c3RvbU5hbWVkR2V0dGVyXSBhdHRyaWJ1dGUsIGZvciBuYW1pbmcg
Y29uc2lzdGVuY3kgd2l0aCBbQ3VzdG9tTmFtZWRTZXR0ZXJdLgorCisgICAgICAgIE5vIHRlc3Rz
LiBObyBjaGFuZ2UgaW4gYmVoYXZpb3IuCisKKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL0Nv
ZGVHZW5lcmF0b3JKUy5wbToKKyAgICAgICAgKEdlbmVyYXRlR2V0T3duUHJvcGVydHlTbG90Qm9k
eSk6CisgICAgICAgIChHZW5lcmF0ZUdldE93blByb3BlcnR5RGVzY3JpcHRvckJvZHkpOgorICAg
ICAgICAoR2VuZXJhdGVIZWFkZXIpOgorICAgICAgICAoR2VuZXJhdGVJbXBsZW1lbnRhdGlvbik6
CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy9Db2RlR2VuZXJhdG9yVjgucG06CisgICAgICAg
IChHZW5lcmF0ZUhlYWRlck5hbWVkQW5kSW5kZXhlZFByb3BlcnR5QWNjZXNzb3JzKToKKyAgICAg
ICAgKEdlbmVyYXRlSW1wbGVtZW50YXRpb25OYW1lZFByb3BlcnR5R2V0dGVyKToKKyAgICAgICAg
KiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvVGVzdE92ZXJyaWRpbmdOYW1lR2V0dGVyLmlkbDoKKyAg
ICAgICAgKiBodG1sL0hUTUxEb2N1bWVudC5pZGw6CisgICAgICAgICogaHRtbC9IVE1MRm9ybUVs
ZW1lbnQuaWRsOgorICAgICAgICAqIGh0bWwvSFRNTEZyYW1lU2V0RWxlbWVudC5pZGw6CisKKzIw
MTItMDItMDcgIEtlbnRhcm8gSGFyYSAgPGhhcmFrZW5AY2hyb21pdW0ub3JnPgorCiAgICAgICAg
IFtHVEtdIElnbm9yZSBbQ3VzdG9tXSBhdHRyaWJ1dGVzIGluIENvZGVHZW5lcmF0b3JHT2JqZWN0
LnBtCiAgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD03ODA1
OQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5l
cmF0b3JKUy5wbSBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvQ29kZUdlbmVyYXRv
ckpTLnBtCmluZGV4IDkzM2UyNDVmODQzZWQ3M2U1MzJmYmJhNDk4MzM1OGYyNDBiMjk2Y2IuLjdk
YjYyNTQ4Y2ViNTljMzJjMTlmODc1NDU0M2MyMzFmZGI5MzNmZjAgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvQ29kZUdlbmVyYXRvckpTLnBtCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvQ29kZUdlbmVyYXRvckpTLnBtCkBAIC00MjksNyAr
NDI5LDcgQEAgc3ViIEdlbmVyYXRlR2V0T3duUHJvcGVydHlTbG90Qm9keQogICAgICAgICB9CiAg
ICAgfTsKIAotICAgIGlmICghJGRhdGFOb2RlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPnsiSGFzT3Zl
cnJpZGluZ05hbWVHZXR0ZXIifSkgeworICAgIGlmICghJGRhdGFOb2RlLT5leHRlbmRlZEF0dHJp
YnV0ZXMtPnsiQ3VzdG9tTmFtZWRHZXR0ZXIifSkgewogICAgICAgICAmJG1hbnVhbExvb2t1cEdl
dHRlckdlbmVyYXRpb24oKTsKICAgICB9CiAKQEAgLTQ1Myw3ICs0NTMsNyBAQCBzdWIgR2VuZXJh
dGVHZXRPd25Qcm9wZXJ0eVNsb3RCb2R5CiAgICAgICAgIHB1c2goQGdldE93blByb3BlcnR5U2xv
dEltcGwsICIgICAgfVxuIik7CiAgICAgfQogCi0gICAgaWYgKCRkYXRhTm9kZS0+ZXh0ZW5kZWRB
dHRyaWJ1dGVzLT57Ik5hbWVkR2V0dGVyIn0gfHwgJGRhdGFOb2RlLT5leHRlbmRlZEF0dHJpYnV0
ZXMtPnsiSGFzT3ZlcnJpZGluZ05hbWVHZXR0ZXIifSkgeworICAgIGlmICgkZGF0YU5vZGUtPmV4
dGVuZGVkQXR0cmlidXRlcy0+eyJOYW1lZEdldHRlciJ9IHx8ICRkYXRhTm9kZS0+ZXh0ZW5kZWRB
dHRyaWJ1dGVzLT57IkN1c3RvbU5hbWVkR2V0dGVyIn0pIHsKICAgICAgICAgcHVzaChAZ2V0T3du
UHJvcGVydHlTbG90SW1wbCwgIiAgICBpZiAoY2FuR2V0SXRlbXNGb3JOYW1lKGV4ZWMsIHN0YXRp
Y19jYXN0PCRpbXBsQ2xhc3NOYW1lKj4odGhpc09iamVjdC0+aW1wbCgpKSwgcHJvcGVydHlOYW1l
KSkge1xuIik7CiAgICAgICAgIHB1c2goQGdldE93blByb3BlcnR5U2xvdEltcGwsICIgICAgICAg
IHNsb3Quc2V0Q3VzdG9tKHRoaXNPYmplY3QsIHRoaXNPYmplY3QtPm5hbWVHZXR0ZXIpO1xuIik7
CiAgICAgICAgIHB1c2goQGdldE93blByb3BlcnR5U2xvdEltcGwsICIgICAgICAgIHJldHVybiB0
cnVlO1xuIik7CkBAIC00NjUsNyArNDY1LDcgQEAgc3ViIEdlbmVyYXRlR2V0T3duUHJvcGVydHlT
bG90Qm9keQogICAgICAgICB9CiAgICAgfQogCi0gICAgaWYgKCRkYXRhTm9kZS0+ZXh0ZW5kZWRB
dHRyaWJ1dGVzLT57Ikhhc092ZXJyaWRpbmdOYW1lR2V0dGVyIn0pIHsKKyAgICBpZiAoJGRhdGFO
b2RlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPnsiQ3VzdG9tTmFtZWRHZXR0ZXIifSkgewogICAgICAg
ICAmJG1hbnVhbExvb2t1cEdldHRlckdlbmVyYXRpb24oKTsKICAgICB9CiAKQEAgLTUyMiwxMSAr
NTIyLDExIEBAIHN1YiBHZW5lcmF0ZUdldE93blByb3BlcnR5RGVzY3JpcHRvckJvZHkKICAgICAg
ICAgICAgIHB1c2goQGdldE93blByb3BlcnR5RGVzY3JpcHRvckltcGwsICIgICAgfVxuIik7CiAg
ICAgICAgIH0KICAgICB9OwotICAgIAotICAgIGlmICghJGRhdGFOb2RlLT5leHRlbmRlZEF0dHJp
YnV0ZXMtPnsiSGFzT3ZlcnJpZGluZ05hbWVHZXR0ZXIifSkgeworCisgICAgaWYgKCEkZGF0YU5v
ZGUtPmV4dGVuZGVkQXR0cmlidXRlcy0+eyJDdXN0b21OYW1lZEdldHRlciJ9KSB7CiAgICAgICAg
ICYkbWFudWFsTG9va3VwR2V0dGVyR2VuZXJhdGlvbigpOwogICAgIH0KLSAgICAKKwogICAgIGlm
ICgkZGF0YU5vZGUtPmV4dGVuZGVkQXR0cmlidXRlcy0+eyJJbmRleGVkR2V0dGVyIn0gfHwgJGRh
dGFOb2RlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPnsiSGFzTnVtZXJpY0luZGV4R2V0dGVyIn0pIHsK
ICAgICAgICAgcHVzaChAZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ySW1wbCwgIiAgICBib29sIG9r
O1xuIik7CiAgICAgICAgIHB1c2goQGdldE93blByb3BlcnR5RGVzY3JpcHRvckltcGwsICIgICAg
dW5zaWduZWQgaW5kZXggPSBwcm9wZXJ0eU5hbWUudG9VSW50MzIob2spO1xuIik7CkBAIC01NTEs
OCArNTUxLDggQEAgc3ViIEdlbmVyYXRlR2V0T3duUHJvcGVydHlEZXNjcmlwdG9yQm9keQogICAg
ICAgICBwdXNoKEBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JJbXBsLCAiICAgICAgICByZXR1cm4g
dHJ1ZTtcbiIpOwogICAgICAgICBwdXNoKEBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JJbXBsLCAi
ICAgIH1cbiIpOwogICAgIH0KLSAgICAKLSAgICBpZiAoJGRhdGFOb2RlLT5leHRlbmRlZEF0dHJp
YnV0ZXMtPnsiTmFtZWRHZXR0ZXIifSB8fCAkZGF0YU5vZGUtPmV4dGVuZGVkQXR0cmlidXRlcy0+
eyJIYXNPdmVycmlkaW5nTmFtZUdldHRlciJ9KSB7CisKKyAgICBpZiAoJGRhdGFOb2RlLT5leHRl
bmRlZEF0dHJpYnV0ZXMtPnsiTmFtZWRHZXR0ZXIifSB8fCAkZGF0YU5vZGUtPmV4dGVuZGVkQXR0
cmlidXRlcy0+eyJDdXN0b21OYW1lZEdldHRlciJ9KSB7CiAgICAgICAgIHB1c2goQGdldE93blBy
b3BlcnR5RGVzY3JpcHRvckltcGwsICIgICAgaWYgKGNhbkdldEl0ZW1zRm9yTmFtZShleGVjLCBz
dGF0aWNfY2FzdDwkaW1wbENsYXNzTmFtZSo+KHRoaXNPYmplY3QtPmltcGwoKSksIHByb3BlcnR5
TmFtZSkpIHtcbiIpOwogICAgICAgICBwdXNoKEBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JJbXBs
LCAiICAgICAgICAke25hbWVzcGFjZU1heWJlfVByb3BlcnR5U2xvdCBzbG90O1xuIik7CiAgICAg
ICAgIHB1c2goQGdldE93blByb3BlcnR5RGVzY3JpcHRvckltcGwsICIgICAgICAgIHNsb3Quc2V0
Q3VzdG9tKHRoaXNPYmplY3QsIG5hbWVHZXR0ZXIpO1xuIik7CkBAIC01NjUsMTYgKzU2NSwxNiBA
QCBzdWIgR2VuZXJhdGVHZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JCb2R5CiAgICAgICAgICAgICAk
aW1wbEluY2x1ZGVzeyJ3dGYvdGV4dC9BdG9taWNTdHJpbmcuaCJ9ID0gMTsKICAgICAgICAgfQog
ICAgIH0KLSAgICAKLSAgICBpZiAoJGRhdGFOb2RlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPnsiSGFz
T3ZlcnJpZGluZ05hbWVHZXR0ZXIifSkgeworCisgICAgaWYgKCRkYXRhTm9kZS0+ZXh0ZW5kZWRB
dHRyaWJ1dGVzLT57IkN1c3RvbU5hbWVkR2V0dGVyIn0pIHsKICAgICAgICAgJiRtYW51YWxMb29r
dXBHZXR0ZXJHZW5lcmF0aW9uKCk7CiAgICAgfQotICAgIAorCiAgICAgaWYgKCRkYXRhTm9kZS0+
ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57IkRlbGVnYXRpbmdHZXRPd25Qcm9wZXJ0eVNsb3QifSkgewog
ICAgICAgICBwdXNoKEBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JJbXBsLCAiICAgIGlmICh0aGlz
T2JqZWN0LT5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JEZWxlZ2F0ZShleGVjLCBwcm9wZXJ0eU5h
bWUsIGRlc2NyaXB0b3IpKVxuIik7CiAgICAgICAgIHB1c2goQGdldE93blByb3BlcnR5RGVzY3Jp
cHRvckltcGwsICIgICAgICAgIHJldHVybiB0cnVlO1xuIik7CiAgICAgfQotICAgIAorCiAgICAg
aWYgKCRoYXNBdHRyaWJ1dGVzKSB7CiAgICAgICAgIGlmICgkaW5saW5lZCkgewogICAgICAgICAg
ICAgZGllICJDYW5ub3QgaW5saW5lIGlmIE5vU3RhdGljVGFibGVzIGlzIHNldC4iIGlmICgkZGF0
YU5vZGUtPmV4dGVuZGVkQXR0cmlidXRlcy0+eyJKU05vU3RhdGljVGFibGVzIn0pOwpAQCAtNzUz
LDIwICs3NTMsMjAgQEAgc3ViIEdlbmVyYXRlSGVhZGVyCiAKICAgICAkaW1wbEluY2x1ZGVzeyIk
e2NsYXNzTmFtZX1DdXN0b20uaCJ9ID0gMSBpZiAhJGRhdGFOb2RlLT5leHRlbmRlZEF0dHJpYnV0
ZXMtPnsiQ3VzdG9tSGVhZGVyIn0gJiYgKCRkYXRhTm9kZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57
IkN1c3RvbVB1dEZ1bmN0aW9uIn0gfHwgJGRhdGFOb2RlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPnsi
RGVsZWdhdGluZ1B1dEZ1bmN0aW9uIn0pOwogCi0gICAgbXkgJGhhc0dldHRlciA9ICRudW1BdHRy
aWJ1dGVzID4gMCAKKyAgICBteSAkaGFzR2V0dGVyID0gJG51bUF0dHJpYnV0ZXMgPiAwCiAgICAg
ICAgICAgICAgICAgIHx8ICEkZGF0YU5vZGUtPmV4dGVuZGVkQXR0cmlidXRlcy0+eyJPbWl0Q29u
c3RydWN0b3IifQogICAgICAgICAgICAgICAgICB8fCAkZGF0YU5vZGUtPmV4dGVuZGVkQXR0cmli
dXRlcy0+eyJJbmRleGVkR2V0dGVyIn0KICAgICAgICAgICAgICAgICAgfHwgJGRhdGFOb2RlLT5l
eHRlbmRlZEF0dHJpYnV0ZXMtPnsiSGFzTnVtZXJpY0luZGV4R2V0dGVyIn0KICAgICAgICAgICAg
ICAgICAgfHwgJGRhdGFOb2RlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPnsiQ3VzdG9tR2V0T3duUHJv
cGVydHlTbG90In0KICAgICAgICAgICAgICAgICAgfHwgJGRhdGFOb2RlLT5leHRlbmRlZEF0dHJp
YnV0ZXMtPnsiRGVsZWdhdGluZ0dldE93blByb3BlcnR5U2xvdCJ9CiAgICAgICAgICAgICAgICAg
IHx8ICRkYXRhTm9kZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57Ik5hbWVkR2V0dGVyIn0KLSAgICAg
ICAgICAgICAgICAgfHwgJGRhdGFOb2RlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPnsiSGFzT3ZlcnJp
ZGluZ05hbWVHZXR0ZXIifTsKKyAgICAgICAgICAgICAgICAgfHwgJGRhdGFOb2RlLT5leHRlbmRl
ZEF0dHJpYnV0ZXMtPnsiQ3VzdG9tTmFtZWRHZXR0ZXIifTsKIAogICAgICMgR2V0dGVycwogICAg
IGlmICgkaGFzR2V0dGVyKSB7CiAgICAgICAgIHB1c2goQGhlYWRlckNvbnRlbnQsICIgICAgc3Rh
dGljIGJvb2wgZ2V0T3duUHJvcGVydHlTbG90KEpTQzo6SlNDZWxsKiwgSlNDOjpFeGVjU3RhdGUq
LCBjb25zdCBKU0M6OklkZW50aWZpZXImIHByb3BlcnR5TmFtZSwgSlNDOjpQcm9wZXJ0eVNsb3Qm
KTtcbiIpOwogICAgICAgICBwdXNoKEBoZWFkZXJDb250ZW50LCAiICAgIHN0YXRpYyBib29sIGdl
dE93blByb3BlcnR5RGVzY3JpcHRvcihKU0M6OkpTT2JqZWN0KiwgSlNDOjpFeGVjU3RhdGUqLCBj
b25zdCBKU0M6OklkZW50aWZpZXImIHByb3BlcnR5TmFtZSwgSlNDOjpQcm9wZXJ0eURlc2NyaXB0
b3ImKTtcbiIpOwotICAgICAgICBwdXNoKEBoZWFkZXJDb250ZW50LCAiICAgIHN0YXRpYyBib29s
IGdldE93blByb3BlcnR5U2xvdEJ5SW5kZXgoSlNDOjpKU0NlbGwqLCBKU0M6OkV4ZWNTdGF0ZSos
IHVuc2lnbmVkIHByb3BlcnR5TmFtZSwgSlNDOjpQcm9wZXJ0eVNsb3QmKTtcbiIpIGlmICgkZGF0
YU5vZGUtPmV4dGVuZGVkQXR0cmlidXRlcy0+eyJJbmRleGVkR2V0dGVyIn0gfHwgJGRhdGFOb2Rl
LT5leHRlbmRlZEF0dHJpYnV0ZXMtPnsiSGFzTnVtZXJpY0luZGV4R2V0dGVyIn0pICYmICEkZGF0
YU5vZGUtPmV4dGVuZGVkQXR0cmlidXRlcy0+eyJIYXNPdmVycmlkaW5nTmFtZUdldHRlciJ9Owor
ICAgICAgICBwdXNoKEBoZWFkZXJDb250ZW50LCAiICAgIHN0YXRpYyBib29sIGdldE93blByb3Bl
cnR5U2xvdEJ5SW5kZXgoSlNDOjpKU0NlbGwqLCBKU0M6OkV4ZWNTdGF0ZSosIHVuc2lnbmVkIHBy
b3BlcnR5TmFtZSwgSlNDOjpQcm9wZXJ0eVNsb3QmKTtcbiIpIGlmICgkZGF0YU5vZGUtPmV4dGVu
ZGVkQXR0cmlidXRlcy0+eyJJbmRleGVkR2V0dGVyIn0gfHwgJGRhdGFOb2RlLT5leHRlbmRlZEF0
dHJpYnV0ZXMtPnsiSGFzTnVtZXJpY0luZGV4R2V0dGVyIn0pICYmICEkZGF0YU5vZGUtPmV4dGVu
ZGVkQXR0cmlidXRlcy0+eyJDdXN0b21OYW1lZEdldHRlciJ9OwogICAgICAgICBwdXNoKEBoZWFk
ZXJDb250ZW50LCAiICAgIGJvb2wgZ2V0T3duUHJvcGVydHlTbG90RGVsZWdhdGUoSlNDOjpFeGVj
U3RhdGUqLCBjb25zdCBKU0M6OklkZW50aWZpZXImLCBKU0M6OlByb3BlcnR5U2xvdCYpO1xuIikg
aWYgJGRhdGFOb2RlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPnsiRGVsZWdhdGluZ0dldE93blByb3Bl
cnR5U2xvdCJ9OwogICAgICAgICBwdXNoKEBoZWFkZXJDb250ZW50LCAiICAgIGJvb2wgZ2V0T3du
UHJvcGVydHlEZXNjcmlwdG9yRGVsZWdhdGUoSlNDOjpFeGVjU3RhdGUqLCBjb25zdCBKU0M6Oklk
ZW50aWZpZXImLCBKU0M6OlByb3BlcnR5RGVzY3JpcHRvciYpO1xuIikgaWYgJGRhdGFOb2RlLT5l
eHRlbmRlZEF0dHJpYnV0ZXMtPnsiRGVsZWdhdGluZ0dldE93blByb3BlcnR5U2xvdCJ9OwogICAg
ICAgICAkc3RydWN0dXJlRmxhZ3N7IkpTQzo6T3ZlcnJpZGVzR2V0T3duUHJvcGVydHlTbG90In0g
PSAxOwpAQCAtOTUxLDEzICs5NTEsMTMgQEAgc3ViIEdlbmVyYXRlSGVhZGVyCiAgICAgICAgIHB1
c2goQGhlYWRlckNvbnRlbnQsICIgICAgSlNDOjpKU1ZhbHVlIGdldEJ5SW5kZXgoSlNDOjpFeGVj
U3RhdGUqLCB1bnNpZ25lZCBpbmRleCk7XG4iKTsKICAgICAgICAgCiAgICAgfQotICAgIAorCiAg
ICAgIyBJbmRleCBzZXR0ZXIKICAgICBpZiAoJGRhdGFOb2RlLT5leHRlbmRlZEF0dHJpYnV0ZXMt
PnsiQ3VzdG9tSW5kZXhlZFNldHRlciJ9KSB7CiAgICAgICAgIHB1c2goQGhlYWRlckNvbnRlbnQs
ICIgICAgdm9pZCBpbmRleFNldHRlcihKU0M6OkV4ZWNTdGF0ZSosIHVuc2lnbmVkIGluZGV4LCBK
U0M6OkpTVmFsdWUpO1xuIik7CiAgICAgfQogICAgICMgTmFtZSBnZXR0ZXIKLSAgICBpZiAoJGRh
dGFOb2RlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPnsiTmFtZWRHZXR0ZXIifSB8fCAkZGF0YU5vZGUt
PmV4dGVuZGVkQXR0cmlidXRlcy0+eyJIYXNPdmVycmlkaW5nTmFtZUdldHRlciJ9KSB7CisgICAg
aWYgKCRkYXRhTm9kZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57Ik5hbWVkR2V0dGVyIn0gfHwgJGRh
dGFOb2RlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPnsiQ3VzdG9tTmFtZWRHZXR0ZXIifSkgewogICAg
ICAgICBwdXNoKEBoZWFkZXJDb250ZW50LCAicHJpdmF0ZTpcbiIpOwogICAgICAgICBwdXNoKEBo
ZWFkZXJDb250ZW50LCAiICAgIHN0YXRpYyBib29sIGNhbkdldEl0ZW1zRm9yTmFtZShKU0M6OkV4
ZWNTdGF0ZSosICRpbXBsQ2xhc3NOYW1lKiwgY29uc3QgSlNDOjpJZGVudGlmaWVyJik7XG4iKTsK
ICAgICAgICAgcHVzaChAaGVhZGVyQ29udGVudCwgIiAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIG5h
bWVHZXR0ZXIoSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkpTVmFsdWUsIGNvbnN0IEpTQzo6SWRlbnRp
ZmllciYpO1xuIik7CkBAIC0xNjIwLDE0ICsxNjIwLDE0IEBAIHN1YiBHZW5lcmF0ZUltcGxlbWVu
dGF0aW9uCiAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAifVxuXG4iKTsKICAgICB9CiAKLSAg
ICBteSAkaGFzR2V0dGVyID0gJG51bUF0dHJpYnV0ZXMgPiAwIAorICAgIG15ICRoYXNHZXR0ZXIg
PSAkbnVtQXR0cmlidXRlcyA+IDAKICAgICAgICAgICAgICAgICAgfHwgISRkYXRhTm9kZS0+ZXh0
ZW5kZWRBdHRyaWJ1dGVzLT57Ik9taXRDb25zdHJ1Y3RvciJ9IAogICAgICAgICAgICAgICAgICB8
fCAkZGF0YU5vZGUtPmV4dGVuZGVkQXR0cmlidXRlcy0+eyJJbmRleGVkR2V0dGVyIn0KICAgICAg
ICAgICAgICAgICAgfHwgJGRhdGFOb2RlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPnsiSGFzTnVtZXJp
Y0luZGV4R2V0dGVyIn0KICAgICAgICAgICAgICAgICAgfHwgJGRhdGFOb2RlLT5leHRlbmRlZEF0
dHJpYnV0ZXMtPnsiRGVsZWdhdGluZ0dldE93blByb3BlcnR5U2xvdCJ9CiAgICAgICAgICAgICAg
ICAgIHx8ICRkYXRhTm9kZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57IkN1c3RvbUdldE93blByb3Bl
cnR5U2xvdCJ9CiAgICAgICAgICAgICAgICAgIHx8ICRkYXRhTm9kZS0+ZXh0ZW5kZWRBdHRyaWJ1
dGVzLT57Ik5hbWVkR2V0dGVyIn0KLSAgICAgICAgICAgICAgICAgfHwgJGRhdGFOb2RlLT5leHRl
bmRlZEF0dHJpYnV0ZXMtPnsiSGFzT3ZlcnJpZGluZ05hbWVHZXR0ZXIifTsKKyAgICAgICAgICAg
ICAgICAgfHwgJGRhdGFOb2RlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPnsiQ3VzdG9tTmFtZWRHZXR0
ZXIifTsKIAogICAgICMgQXR0cmlidXRlcwogICAgIGlmICgkaGFzR2V0dGVyKSB7CkBAIC0xNjQ2
LDggKzE2NDYsOCBAQCBzdWIgR2VuZXJhdGVJbXBsZW1lbnRhdGlvbgogICAgICAgICAgICAgcHVz
aChAaW1wbENvbnRlbnQsICJ9XG5cbiIpOwogICAgICAgICB9CiAKLSAgICAgICAgaWYgKCgkZGF0
YU5vZGUtPmV4dGVuZGVkQXR0cmlidXRlcy0+eyJJbmRleGVkR2V0dGVyIn0gfHwgJGRhdGFOb2Rl
LT5leHRlbmRlZEF0dHJpYnV0ZXMtPnsiSGFzTnVtZXJpY0luZGV4R2V0dGVyIn0pIAotICAgICAg
ICAgICAgICAgICYmICEkZGF0YU5vZGUtPmV4dGVuZGVkQXR0cmlidXRlcy0+eyJIYXNPdmVycmlk
aW5nTmFtZUdldHRlciJ9KSB7CisgICAgICAgIGlmICgoJGRhdGFOb2RlLT5leHRlbmRlZEF0dHJp
YnV0ZXMtPnsiSW5kZXhlZEdldHRlciJ9IHx8ICRkYXRhTm9kZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVz
LT57Ikhhc051bWVyaWNJbmRleEdldHRlciJ9KQorICAgICAgICAgICAgICAgICYmICEkZGF0YU5v
ZGUtPmV4dGVuZGVkQXR0cmlidXRlcy0+eyJDdXN0b21OYW1lZEdldHRlciJ9KSB7CiAgICAgICAg
ICAgICBwdXNoKEBpbXBsQ29udGVudCwgImJvb2wgJHtjbGFzc05hbWV9OjpnZXRPd25Qcm9wZXJ0
eVNsb3RCeUluZGV4KEpTQ2VsbCogY2VsbCwgRXhlY1N0YXRlKiBleGVjLCB1bnNpZ25lZCBwcm9w
ZXJ0eU5hbWUsIFByb3BlcnR5U2xvdCYgc2xvdClcbiIpOwogICAgICAgICAgICAgcHVzaChAaW1w
bENvbnRlbnQsICJ7XG4iKTsKICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgICR7
Y2xhc3NOYW1lfSogdGhpc09iamVjdCA9IGpzQ2FzdDwke2NsYXNzTmFtZX0qPihjZWxsKTtcbiIp
OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy9Db2RlR2VuZXJh
dG9yVjgucG0gYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0b3JW
OC5wbQppbmRleCA5MjhkYWMzMmE0YWYzMmM5MmRkMzhjODVmNTM1OGMzNmI2MWU3MWExLi42MWZi
YjIwYzdiODQ1ODVkYTBjOGNhMGIyYmUzNzYzMGRlMTkyNGI5IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0b3JWOC5wbQorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0b3JWOC5wbQpAQCAtNTY1LDcgKzU2
NSw3IEBAIHN1YiBHZW5lcmF0ZUhlYWRlck5hbWVkQW5kSW5kZXhlZFByb3BlcnR5QWNjZXNzb3Jz
CiAgICAgbXkgJGludGVyZmFjZU5hbWUgPSAkZGF0YU5vZGUtPm5hbWU7CiAgICAgbXkgJGhhc0N1
c3RvbUluZGV4ZWRHZXR0ZXIgPSAkZGF0YU5vZGUtPmV4dGVuZGVkQXR0cmlidXRlcy0+eyJJbmRl
eGVkR2V0dGVyIn0gfHwgJGRhdGFOb2RlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPnsiQ3VzdG9tR2V0
T3duUHJvcGVydHlTbG90In07CiAgICAgbXkgJGhhc0N1c3RvbUluZGV4ZWRTZXR0ZXIgPSAkZGF0
YU5vZGUtPmV4dGVuZGVkQXR0cmlidXRlcy0+eyJDdXN0b21JbmRleGVkU2V0dGVyIn0gJiYgISRk
YXRhTm9kZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57Ikhhc051bWVyaWNJbmRleEdldHRlciJ9Owot
ICAgIG15ICRoYXNDdXN0b21OYW1lZEdldHRlciA9ICRkYXRhTm9kZS0+ZXh0ZW5kZWRBdHRyaWJ1
dGVzLT57Ik5hbWVkR2V0dGVyIn0gfHwgJGRhdGFOb2RlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPnsi
SGFzT3ZlcnJpZGluZ05hbWVHZXR0ZXIifSB8fCAkZGF0YU5vZGUtPmV4dGVuZGVkQXR0cmlidXRl
cy0+eyJDdXN0b21HZXRPd25Qcm9wZXJ0eVNsb3QifTsKKyAgICBteSAkaGFzQ3VzdG9tTmFtZWRH
ZXR0ZXIgPSAkZGF0YU5vZGUtPmV4dGVuZGVkQXR0cmlidXRlcy0+eyJOYW1lZEdldHRlciJ9IHx8
ICRkYXRhTm9kZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57IkN1c3RvbU5hbWVkR2V0dGVyIn0gfHwg
JGRhdGFOb2RlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPnsiQ3VzdG9tR2V0T3duUHJvcGVydHlTbG90
In07CiAgICAgbXkgJGhhc0N1c3RvbU5hbWVkU2V0dGVyID0gJGRhdGFOb2RlLT5leHRlbmRlZEF0
dHJpYnV0ZXMtPnsiRGVsZWdhdGluZ1B1dEZ1bmN0aW9uIn07CiAgICAgbXkgJGhhc0N1c3RvbURl
bGV0ZXJzID0gJGRhdGFOb2RlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPnsiQ3VzdG9tRGVsZXRlUHJv
cGVydHkifTsKICAgICBteSAkaGFzQ3VzdG9tRW51bWVyYXRvciA9ICRkYXRhTm9kZS0+ZXh0ZW5k
ZWRBdHRyaWJ1dGVzLT57IkN1c3RvbUdldFByb3BlcnR5TmFtZXMifTsKQEAgLTIxMzMsMjQgKzIx
MzMsMjQgQEAgc3ViIEdlbmVyYXRlSW1wbGVtZW50YXRpb25OYW1lZFByb3BlcnR5R2V0dGVyCiAg
ICAgbXkgJGRhdGFOb2RlID0gc2hpZnQ7CiAgICAgbXkgJG5hbWVkUHJvcGVydHlHZXR0ZXIgPSBz
aGlmdDsKICAgICBteSAkaW50ZXJmYWNlTmFtZSA9ICRkYXRhTm9kZS0+bmFtZTsKLSAgICBteSAk
aGFzQ3VzdG9tR2V0dGVyID0gJGRhdGFOb2RlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPnsiSGFzT3Zl
cnJpZGluZ05hbWVHZXR0ZXIifSB8fCAkZGF0YU5vZGUtPmV4dGVuZGVkQXR0cmlidXRlcy0+eyJD
dXN0b21HZXRPd25Qcm9wZXJ0eVNsb3QifTsKKyAgICBteSAkaGFzQ3VzdG9tTmFtZWRHZXR0ZXIg
PSAkZGF0YU5vZGUtPmV4dGVuZGVkQXR0cmlidXRlcy0+eyJDdXN0b21OYW1lZEdldHRlciJ9IHx8
ICRkYXRhTm9kZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57IkN1c3RvbUdldE93blByb3BlcnR5U2xv
dCJ9OwogCiAgICAgIyBGSVhNRTogUmVtb3ZlIGhhcmQtY29kZWQgSFRNTE9wdGlvbnNDb2xsZWN0
aW9uIHJlZmVyZW5jZSBieSBjaGFuZ2luZyBIVE1MT3B0aW9uc0NvbGxlY3Rpb24gdG8gbm90IGlu
aGVyaXQKICAgICAjIGZyb20gSFRNTENvbGxlY3Rpb24gcGVyIFczQyBzcGVjIChodHRwOi8vd3d3
LnczLm9yZy9UUi8yMDAzL1JFQy1ET00tTGV2ZWwtMi1IVE1MLTIwMDMwMTA5L2h0bWwuaHRtbCNI
VE1MT3B0aW9uc0NvbGxlY3Rpb24pLgogICAgIGlmICgkaW50ZXJmYWNlTmFtZSBlcSAiSFRNTE9w
dGlvbnNDb2xsZWN0aW9uIikgewogICAgICAgICAkaW50ZXJmYWNlTmFtZSA9ICJIVE1MQ29sbGVj
dGlvbiI7Ci0gICAgICAgICRoYXNDdXN0b21HZXR0ZXIgPSAxOworICAgICAgICAkaGFzQ3VzdG9t
TmFtZWRHZXR0ZXIgPSAxOwogICAgIH0KIAogICAgIGlmICgkaW50ZXJmYWNlTmFtZSBlcSAiSFRN
TEFwcGxldEVsZW1lbnQiIHx8ICRpbnRlcmZhY2VOYW1lIGVxICJIVE1MRW1iZWRFbGVtZW50IiB8
fCAkaW50ZXJmYWNlTmFtZSBlcSAiSFRNTE9iamVjdEVsZW1lbnQiKSB7Ci0gICAgICAgICRoYXND
dXN0b21HZXR0ZXIgPSAxOworICAgICAgICAkaGFzQ3VzdG9tTmFtZWRHZXR0ZXIgPSAxOwogICAg
IH0KIAogICAgIGlmICgkaW50ZXJmYWNlTmFtZSBlcSAiSFRNTERvY3VtZW50IikgewotICAgICAg
ICAkaGFzQ3VzdG9tR2V0dGVyID0gMDsKKyAgICAgICAgJGhhc0N1c3RvbU5hbWVkR2V0dGVyID0g
MDsKICAgICB9CiAKLSAgICBteSAkaGFzR2V0dGVyID0gJGRhdGFOb2RlLT5leHRlbmRlZEF0dHJp
YnV0ZXMtPnsiTmFtZWRHZXR0ZXIifSB8fCAkaGFzQ3VzdG9tR2V0dGVyOworICAgIG15ICRoYXNH
ZXR0ZXIgPSAkZGF0YU5vZGUtPmV4dGVuZGVkQXR0cmlidXRlcy0+eyJOYW1lZEdldHRlciJ9IHx8
ICRoYXNDdXN0b21OYW1lZEdldHRlcjsKICAgICBpZiAoISRoYXNHZXR0ZXIpIHsKICAgICAgICAg
cmV0dXJuOwogICAgIH0KQEAgLTIxNTksNyArMjE1OSw3IEBAIHN1YiBHZW5lcmF0ZUltcGxlbWVu
dGF0aW9uTmFtZWRQcm9wZXJ0eUdldHRlcgogICAgICAgICAkbmFtZWRQcm9wZXJ0eUdldHRlciA9
ICRjb2RlR2VuZXJhdG9yLT5GaW5kU3VwZXJNZXRob2QoJGRhdGFOb2RlLCAibmFtZWRJdGVtIik7
CiAgICAgfQogCi0gICAgaWYgKCRuYW1lZFByb3BlcnR5R2V0dGVyICYmICRuYW1lZFByb3BlcnR5
R2V0dGVyLT50eXBlIG5lICJOb2RlIiAmJiAhJG5hbWVkUHJvcGVydHlHZXR0ZXItPmV4dGVuZGVk
QXR0cmlidXRlcy0+eyJDdXN0b20ifSAmJiAhJGhhc0N1c3RvbUdldHRlcikgeworICAgIGlmICgk
bmFtZWRQcm9wZXJ0eUdldHRlciAmJiAkbmFtZWRQcm9wZXJ0eUdldHRlci0+dHlwZSBuZSAiTm9k
ZSIgJiYgISRuYW1lZFByb3BlcnR5R2V0dGVyLT5leHRlbmRlZEF0dHJpYnV0ZXMtPnsiQ3VzdG9t
In0gJiYgISRoYXNDdXN0b21OYW1lZEdldHRlcikgewogICAgICAgICBBZGRUb0ltcGxJbmNsdWRl
cygiVjhDb2xsZWN0aW9uLmgiKTsKICAgICAgICAgbXkgJHR5cGUgPSAkbmFtZWRQcm9wZXJ0eUdl
dHRlci0+dHlwZTsKICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsIDw8RU5EKTsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9UZXN0T3ZlcnJpZGluZ05h
bWVHZXR0ZXIuaWRsIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Rlc3RP
dmVycmlkaW5nTmFtZUdldHRlci5pZGwKaW5kZXggYTU2ZWE1ZjJlMTc2OTMwZDczYzE2MGRkNTRh
OGZiYTIzNTI0NWI1MS4uZDhiOGUyZjgxMGE4N2IyM2ZhOGVhODVjYTQ1NmMzNjIwYjUzYzA1ZSAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Rlc3RPdmVy
cmlkaW5nTmFtZUdldHRlci5pZGwKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0
cy90ZXN0L1Rlc3RPdmVycmlkaW5nTmFtZUdldHRlci5pZGwKQEAgLTI5LDcgKzI5LDcgQEAKIG1v
ZHVsZSBldmVudHMgewogCiAgICAgaW50ZXJmYWNlIFsKLSAgICAgICAgSGFzT3ZlcnJpZGluZ05h
bWVHZXR0ZXIKKyAgICAgICAgQ3VzdG9tTmFtZWRHZXR0ZXIKICAgICBdIFRlc3RPdmVycmlkaW5n
TmFtZUdldHRlciB7CiAgICAgICAgIHZvaWQgYW5vdGhlckZ1bmN0aW9uKGluIERPTVN0cmluZyBz
dHIpOwogICAgIH07CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxEb2N1bWVu
dC5pZGwgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxEb2N1bWVudC5pZGwKaW5kZXggMjFkMGEy
ZGI2YjE3OTM2NzRlYmI2Zjk2OTkyZTNjMDM0ODExYTRmOS4uZGQwMjBlMmM1OWY3ZDc5ZmJlNDE2
ZGVhYTU4Yjc0OGQ5NTY0MmE4ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1M
RG9jdW1lbnQuaWRsCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTERvY3VtZW50LmlkbApA
QCAtMjEsNyArMjEsNyBAQAogbW9kdWxlIGh0bWwgewogCiAgICAgaW50ZXJmYWNlIFsKLSAgICAg
ICAgSGFzT3ZlcnJpZGluZ05hbWVHZXR0ZXIKKyAgICAgICAgQ3VzdG9tTmFtZWRHZXR0ZXIKICAg
ICBdIEhUTUxEb2N1bWVudCA6IERvY3VtZW50IHsKICAgICAgICAgW0pTQ3VzdG9tLCBWOEN1c3Rv
bV0gdm9pZCBvcGVuKCk7CiAgICAgICAgIHZvaWQgY2xvc2UoKTsKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL2h0bWwvSFRNTEZvcm1FbGVtZW50LmlkbCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwv
SFRNTEZvcm1FbGVtZW50LmlkbAppbmRleCA1MjE0MTZkYWU2MDBhMWJiMTI1NWQ2MzU2NTI3ODc3
OWI2YmMwYjE2Li4yNTM4NmY1ZDk2MWE0ZjNiMWVkMDA5NTAwMjBmYTA5MmZlMDFiODIzIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxGb3JtRWxlbWVudC5pZGwKKysrIGIvU291
cmNlL1dlYkNvcmUvaHRtbC9IVE1MRm9ybUVsZW1lbnQuaWRsCkBAIC0yMiw3ICsyMiw3IEBAIG1v
ZHVsZSBodG1sIHsKIAogICAgIGludGVyZmFjZSBbCiAgICAgICAgIEluZGV4ZWRHZXR0ZXIsCi0g
ICAgICAgIEhhc092ZXJyaWRpbmdOYW1lR2V0dGVyCisgICAgICAgIEN1c3RvbU5hbWVkR2V0dGVy
CiAgICAgXSBIVE1MRm9ybUVsZW1lbnQgOiBIVE1MRWxlbWVudCB7CiAgICAgICAgIHJlYWRvbmx5
IGF0dHJpYnV0ZSBIVE1MQ29sbGVjdGlvbiBlbGVtZW50czsKICAgICAgICAgcmVhZG9ubHkgYXR0
cmlidXRlIGxvbmcgbGVuZ3RoOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1M
RnJhbWVTZXRFbGVtZW50LmlkbCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTEZyYW1lU2V0RWxl
bWVudC5pZGwKaW5kZXggN2FkNDgwMmQzNDIzMzUxOWM4MjJhYjJhZTc4OWQ4MjQwNzAxMDdjOS4u
NTUyODQxMjA4OTliODFjODBhZjhlOTZlNTA0MTdkYjg5ZTk5MTJmOSAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvaHRtbC9IVE1MRnJhbWVTZXRFbGVtZW50LmlkbAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9odG1sL0hUTUxGcmFtZVNldEVsZW1lbnQuaWRsCkBAIC0yMSw3ICsyMSw3IEBACiBtb2R1
bGUgaHRtbCB7CiAKICAgICBpbnRlcmZhY2UgWwotICAgICAgICBIYXNPdmVycmlkaW5nTmFtZUdl
dHRlcgorICAgICAgICBDdXN0b21OYW1lZEdldHRlcgogICAgIF0gSFRNTEZyYW1lU2V0RWxlbWVu
dCA6IEhUTUxFbGVtZW50IHsKICAgICAgICAgYXR0cmlidXRlIFtSZWZsZWN0XSBET01TdHJpbmcg
Y29sczsKICAgICAgICAgYXR0cmlidXRlIFtSZWZsZWN0XSBET01TdHJpbmcgcm93czsK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>125997</attachid>
            <date>2012-02-07 21:41:25 -0800</date>
            <delta_ts>2012-02-07 21:41:25 -0800</delta_ts>
            <desc>patch for commit</desc>
            <filename>bug-78076-20120208144123.patch</filename>
            <type>text/plain</type>
            <size>129758</size>
            <attacher name="Kentaro Hara">haraken</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTA3MDM0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggYjcxNTYzNzQ5MGJhNWUy
YjNjNGEyY2NhNzkxMGIyMDViYWE5OTNhYy4uZDRjNGYxZjM3MjQzM2YxZjlhZTIwZTU4OWZlMmJm
ZjJkYzc3OTA0MSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSw1ICsxLDEzMyBAQAogMjAxMi0wMi0wNyAgS2Vu
dGFybyBIYXJhICA8aGFyYWtlbkBjaHJvbWl1bS5vcmc+CiAKKyAgICAgICAgUmVuYW1lIFtIYXNP
dmVycmlkaW5nTmFtZUdldHRlcl0gYXR0cmlidXRlIHRvIFtDdXN0b21OYW1lZEdldHRlcl0gYXR0
cmlidXRlCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD03
ODA3NgorCisgICAgICAgIFJldmlld2VkIGJ5IEFkYW0gQmFydGguCisKKyAgICAgICAgVGhpcyBw
YXRjaCByZW5hbWVzIHRoZSBbSGFzT3ZlcnJpZGluZ05hbWVHZXR0ZXJdIGF0dHJpYnV0ZSB0byB0
aGUKKyAgICAgICAgW0N1c3RvbU5hbWVkR2V0dGVyXSBhdHRyaWJ1dGUsIGZvciBuYW1pbmcgY29u
c2lzdGVuY3kgd2l0aCBbQ3VzdG9tTmFtZWRTZXR0ZXJdLgorCisgICAgICAgIFRlc3Q6IGJpbmRp
bmdzL3NjcmlwdHMvdGVzdC9UZXN0Q3VzdG9tTmFtZWRHZXR0ZXIuaWRsCisKKyAgICAgICAgKiBi
aW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0b3JKUy5wbToKKyAgICAgICAgKEdlbmVyYXRlR2V0
T3duUHJvcGVydHlTbG90Qm9keSk6CisgICAgICAgIChHZW5lcmF0ZUdldE93blByb3BlcnR5RGVz
Y3JpcHRvckJvZHkpOgorICAgICAgICAoR2VuZXJhdGVIZWFkZXIpOgorICAgICAgICAoR2VuZXJh
dGVJbXBsZW1lbnRhdGlvbik6CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy9Db2RlR2VuZXJh
dG9yVjgucG06CisgICAgICAgIChHZW5lcmF0ZUhlYWRlck5hbWVkQW5kSW5kZXhlZFByb3BlcnR5
QWNjZXNzb3JzKToKKyAgICAgICAgKEdlbmVyYXRlSW1wbGVtZW50YXRpb25OYW1lZFByb3BlcnR5
R2V0dGVyKToKKworICAgICAgICAqIGh0bWwvSFRNTERvY3VtZW50LmlkbDoKKyAgICAgICAgKiBo
dG1sL0hUTUxGb3JtRWxlbWVudC5pZGw6CisgICAgICAgICogaHRtbC9IVE1MRnJhbWVTZXRFbGVt
ZW50LmlkbDoKKworICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9UZXN0Q3VzdG9tTmFt
ZWRHZXR0ZXIuaWRsOiBSZW5hbWVkIGZyb20gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0
cy90ZXN0L1Rlc3RPdmVycmlkaW5nTmFtZUdldHRlci5pZGwuCisKKyAgICAgICAgKiBiaW5kaW5n
cy9zY3JpcHRzL3Rlc3QvQ1BQL1dlYkRPTVRlc3RDdXN0b21OYW1lZEdldHRlci5jcHA6IFVwZGF0
ZWQgcnVuLWJpbmRpbmdzLXRlc3RzIHJlc3VsdHMuCisgICAgICAgIChXZWJET01UZXN0Q3VzdG9t
TmFtZWRHZXR0ZXI6OldlYkRPTVRlc3RDdXN0b21OYW1lZEdldHRlclByaXZhdGU6OldlYkRPTVRl
c3RDdXN0b21OYW1lZEdldHRlclByaXZhdGUpOgorICAgICAgICAoV2ViRE9NVGVzdEN1c3RvbU5h
bWVkR2V0dGVyOjpXZWJET01UZXN0Q3VzdG9tTmFtZWRHZXR0ZXJQcml2YXRlKToKKyAgICAgICAg
KFdlYkRPTVRlc3RDdXN0b21OYW1lZEdldHRlcjo6V2ViRE9NVGVzdEN1c3RvbU5hbWVkR2V0dGVy
KToKKyAgICAgICAgKFdlYkRPTVRlc3RDdXN0b21OYW1lZEdldHRlcjo6b3BlcmF0b3I9KToKKyAg
ICAgICAgKFdlYkRPTVRlc3RDdXN0b21OYW1lZEdldHRlcjo6aW1wbCk6CisgICAgICAgIChXZWJE
T01UZXN0Q3VzdG9tTmFtZWRHZXR0ZXI6On5XZWJET01UZXN0Q3VzdG9tTmFtZWRHZXR0ZXIpOgor
ICAgICAgICAoV2ViRE9NVGVzdEN1c3RvbU5hbWVkR2V0dGVyOjphbm90aGVyRnVuY3Rpb24pOgor
ICAgICAgICAodG9XZWJDb3JlKToKKyAgICAgICAgKHRvV2ViS2l0KToKKyAgICAgICAgKiBiaW5k
aW5ncy9zY3JpcHRzL3Rlc3QvQ1BQL1dlYkRPTVRlc3RDdXN0b21OYW1lZEdldHRlci5oOiBEaXR0
by4KKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoV2ViRE9NVGVzdEN1c3RvbU5hbWVkR2V0
dGVyKToKKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvR09iamVjdC9XZWJLaXRET01U
ZXN0Q3VzdG9tTmFtZWRHZXR0ZXIuY3BwOiBEaXR0by4KKyAgICAgICAgKFdlYktpdCk6CisgICAg
ICAgIChXZWJLaXQ6OmtpdCk6CisgICAgICAgICh3ZWJraXRfZG9tX3Rlc3RfY3VzdG9tX25hbWVk
X2dldHRlcl9hbm90aGVyX2Z1bmN0aW9uKToKKyAgICAgICAgKFdlYktpdDo6Y29yZSk6CisgICAg
ICAgICh3ZWJraXRfZG9tX3Rlc3RfY3VzdG9tX25hbWVkX2dldHRlcl9maW5hbGl6ZSk6CisgICAg
ICAgICh3ZWJraXRfZG9tX3Rlc3RfY3VzdG9tX25hbWVkX2dldHRlcl9zZXRfcHJvcGVydHkpOgor
ICAgICAgICAod2Via2l0X2RvbV90ZXN0X2N1c3RvbV9uYW1lZF9nZXR0ZXJfZ2V0X3Byb3BlcnR5
KToKKyAgICAgICAgKHdlYmtpdF9kb21fdGVzdF9jdXN0b21fbmFtZWRfZ2V0dGVyX2NvbnN0cnVj
dGVkKToKKyAgICAgICAgKHdlYmtpdF9kb21fdGVzdF9jdXN0b21fbmFtZWRfZ2V0dGVyX2NsYXNz
X2luaXQpOgorICAgICAgICAod2Via2l0X2RvbV90ZXN0X2N1c3RvbV9uYW1lZF9nZXR0ZXJfaW5p
dCk6CisgICAgICAgIChXZWJLaXQ6OndyYXBUZXN0Q3VzdG9tTmFtZWRHZXR0ZXIpOgorICAgICAg
ICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9HT2JqZWN0L1dlYktpdERPTVRlc3RDdXN0b21OYW1l
ZEdldHRlci5oOiBEaXR0by4KKyAgICAgICAgKF9XZWJLaXRET01UZXN0Q3VzdG9tTmFtZWRHZXR0
ZXIpOgorICAgICAgICAoX1dlYktpdERPTVRlc3RDdXN0b21OYW1lZEdldHRlckNsYXNzKToKKyAg
ICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvR09iamVjdC9XZWJLaXRET01UZXN0Q3VzdG9t
TmFtZWRHZXR0ZXJQcml2YXRlLmg6IERpdHRvLgorICAgICAgICAoV2ViS2l0KToKKyAgICAgICAg
KiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvR09iamVjdC9XZWJLaXRET01UZXN0T3ZlcnJpZGluZ05h
bWVHZXR0ZXIuaDogRGl0dG8uCisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pT
VGVzdEN1c3RvbU5hbWVkR2V0dGVyLmNwcDogRGl0dG8uCisgICAgICAgIChXZWJDb3JlKToKKyAg
ICAgICAgKFdlYkNvcmU6OkpTVGVzdEN1c3RvbU5hbWVkR2V0dGVyQ29uc3RydWN0b3I6OkpTVGVz
dEN1c3RvbU5hbWVkR2V0dGVyQ29uc3RydWN0b3IpOgorICAgICAgICAoV2ViQ29yZTo6SlNUZXN0
Q3VzdG9tTmFtZWRHZXR0ZXJDb25zdHJ1Y3Rvcjo6ZmluaXNoQ3JlYXRpb24pOgorICAgICAgICAo
V2ViQ29yZTo6SlNUZXN0Q3VzdG9tTmFtZWRHZXR0ZXJDb25zdHJ1Y3Rvcjo6Z2V0T3duUHJvcGVy
dHlTbG90KToKKyAgICAgICAgKFdlYkNvcmU6OkpTVGVzdEN1c3RvbU5hbWVkR2V0dGVyQ29uc3Ry
dWN0b3I6OmdldE93blByb3BlcnR5RGVzY3JpcHRvcik6CisgICAgICAgIChXZWJDb3JlOjpKU1Rl
c3RDdXN0b21OYW1lZEdldHRlclByb3RvdHlwZTo6c2VsZik6CisgICAgICAgIChXZWJDb3JlOjpK
U1Rlc3RDdXN0b21OYW1lZEdldHRlclByb3RvdHlwZTo6Z2V0T3duUHJvcGVydHlTbG90KToKKyAg
ICAgICAgKFdlYkNvcmU6OkpTVGVzdEN1c3RvbU5hbWVkR2V0dGVyUHJvdG90eXBlOjpnZXRPd25Q
cm9wZXJ0eURlc2NyaXB0b3IpOgorICAgICAgICAoV2ViQ29yZTo6SlNUZXN0Q3VzdG9tTmFtZWRH
ZXR0ZXI6OkpTVGVzdEN1c3RvbU5hbWVkR2V0dGVyKToKKyAgICAgICAgKFdlYkNvcmU6OkpTVGVz
dEN1c3RvbU5hbWVkR2V0dGVyOjpmaW5pc2hDcmVhdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpK
U1Rlc3RDdXN0b21OYW1lZEdldHRlcjo6Y3JlYXRlUHJvdG90eXBlKToKKyAgICAgICAgKFdlYkNv
cmU6OkpTVGVzdEN1c3RvbU5hbWVkR2V0dGVyOjpkZXN0cm95KToKKyAgICAgICAgKFdlYkNvcmU6
OkpTVGVzdEN1c3RvbU5hbWVkR2V0dGVyOjpnZXRPd25Qcm9wZXJ0eVNsb3QpOgorICAgICAgICAo
V2ViQ29yZTo6SlNUZXN0Q3VzdG9tTmFtZWRHZXR0ZXI6OmdldE93blByb3BlcnR5RGVzY3JpcHRv
cik6CisgICAgICAgIChXZWJDb3JlOjpqc1Rlc3RDdXN0b21OYW1lZEdldHRlckNvbnN0cnVjdG9y
KToKKyAgICAgICAgKFdlYkNvcmU6OkpTVGVzdEN1c3RvbU5hbWVkR2V0dGVyOjpnZXRDb25zdHJ1
Y3Rvcik6CisgICAgICAgIChXZWJDb3JlOjpqc1Rlc3RDdXN0b21OYW1lZEdldHRlclByb3RvdHlw
ZUZ1bmN0aW9uQW5vdGhlckZ1bmN0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OmlzT2JzZXJ2YWJs
ZSk6CisgICAgICAgIChXZWJDb3JlOjpKU1Rlc3RDdXN0b21OYW1lZEdldHRlck93bmVyOjppc1Jl
YWNoYWJsZUZyb21PcGFxdWVSb290cyk6CisgICAgICAgIChXZWJDb3JlOjpKU1Rlc3RDdXN0b21O
YW1lZEdldHRlck93bmVyOjpmaW5hbGl6ZSk6CisgICAgICAgIChXZWJDb3JlOjp0b0pTKToKKyAg
ICAgICAgKFdlYkNvcmU6OnRvVGVzdEN1c3RvbU5hbWVkR2V0dGVyKToKKyAgICAgICAgKiBiaW5k
aW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0Q3VzdG9tTmFtZWRHZXR0ZXIuaDogRGl0dG8uCisg
ICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKEpTVGVzdEN1c3RvbU5hbWVkR2V0dGVyKToKKyAg
ICAgICAgKFdlYkNvcmU6OkpTVGVzdEN1c3RvbU5hbWVkR2V0dGVyOjpjcmVhdGUpOgorICAgICAg
ICAoV2ViQ29yZTo6SlNUZXN0Q3VzdG9tTmFtZWRHZXR0ZXI6OmNyZWF0ZVN0cnVjdHVyZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpKU1Rlc3RDdXN0b21OYW1lZEdldHRlcjo6aW1wbCk6CisgICAgICAg
IChXZWJDb3JlOjpKU1Rlc3RDdXN0b21OYW1lZEdldHRlcjo6cmVsZWFzZUltcGwpOgorICAgICAg
ICAoV2ViQ29yZTo6SlNUZXN0Q3VzdG9tTmFtZWRHZXR0ZXI6OnJlbGVhc2VJbXBsSWZOb3ROdWxs
KToKKyAgICAgICAgKEpTVGVzdEN1c3RvbU5hbWVkR2V0dGVyT3duZXIpOgorICAgICAgICAoV2Vi
Q29yZTo6d3JhcHBlck93bmVyKToKKyAgICAgICAgKFdlYkNvcmU6OndyYXBwZXJDb250ZXh0KToK
KyAgICAgICAgKEpTVGVzdEN1c3RvbU5hbWVkR2V0dGVyUHJvdG90eXBlKToKKyAgICAgICAgKFdl
YkNvcmU6OkpTVGVzdEN1c3RvbU5hbWVkR2V0dGVyUHJvdG90eXBlOjpjcmVhdGUpOgorICAgICAg
ICAoV2ViQ29yZTo6SlNUZXN0Q3VzdG9tTmFtZWRHZXR0ZXJQcm90b3R5cGU6OmNyZWF0ZVN0cnVj
dHVyZSk6CisgICAgICAgIChXZWJDb3JlOjpKU1Rlc3RDdXN0b21OYW1lZEdldHRlclByb3RvdHlw
ZTo6SlNUZXN0Q3VzdG9tTmFtZWRHZXR0ZXJQcm90b3R5cGUpOgorICAgICAgICAoSlNUZXN0Q3Vz
dG9tTmFtZWRHZXR0ZXJDb25zdHJ1Y3Rvcik6CisgICAgICAgIChXZWJDb3JlOjpKU1Rlc3RDdXN0
b21OYW1lZEdldHRlckNvbnN0cnVjdG9yOjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6SlNU
ZXN0Q3VzdG9tTmFtZWRHZXR0ZXJDb25zdHJ1Y3Rvcjo6Y3JlYXRlU3RydWN0dXJlKToKKyAgICAg
ICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0T3ZlcnJpZGluZ05hbWVHZXR0ZXIu
Y3BwOgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9PYmpDL0RPTVRlc3RDdXN0b21O
YW1lZEdldHRlci5oOiBEaXR0by4KKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvT2Jq
Qy9ET01UZXN0Q3VzdG9tTmFtZWRHZXR0ZXIubW06IERpdHRvLgorICAgICAgICAoLVtET01UZXN0
Q3VzdG9tTmFtZWRHZXR0ZXIgZGVhbGxvY10pOgorICAgICAgICAoLVtET01UZXN0Q3VzdG9tTmFt
ZWRHZXR0ZXIgZmluYWxpemVdKToKKyAgICAgICAgKC1bRE9NVGVzdEN1c3RvbU5hbWVkR2V0dGVy
IGFub3RoZXJGdW5jdGlvbjpdKToKKyAgICAgICAgKGNvcmUpOgorICAgICAgICAoa2l0KToKKyAg
ICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvT2JqQy9ET01UZXN0Q3VzdG9tTmFtZWRHZXR0
ZXJJbnRlcm5hbC5oOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAqIGJpbmRp
bmdzL3NjcmlwdHMvdGVzdC9WOC9WOFRlc3RDdXN0b21OYW1lZEdldHRlci5jcHA6IERpdHRvLgor
ICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChUZXN0Q3VzdG9tTmFtZWRHZXR0ZXJJbnRlcm5h
bCk6CisgICAgICAgIChXZWJDb3JlOjpUZXN0Q3VzdG9tTmFtZWRHZXR0ZXJJbnRlcm5hbDo6Vjhf
VVNFKToKKyAgICAgICAgKFdlYkNvcmU6OlRlc3RDdXN0b21OYW1lZEdldHRlckludGVybmFsOjph
bm90aGVyRnVuY3Rpb25DYWxsYmFjayk6CisgICAgICAgIChXZWJDb3JlOjpDb25maWd1cmVWOFRl
c3RDdXN0b21OYW1lZEdldHRlclRlbXBsYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OlY4VGVzdEN1
c3RvbU5hbWVkR2V0dGVyOjpHZXRSYXdUZW1wbGF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpWOFRl
c3RDdXN0b21OYW1lZEdldHRlcjo6R2V0VGVtcGxhdGUpOgorICAgICAgICAoV2ViQ29yZTo6VjhU
ZXN0Q3VzdG9tTmFtZWRHZXR0ZXI6Okhhc0luc3RhbmNlKToKKyAgICAgICAgKFdlYkNvcmU6OlY4
VGVzdEN1c3RvbU5hbWVkR2V0dGVyOjp3cmFwU2xvdyk6CisgICAgICAgIChXZWJDb3JlOjpWOFRl
c3RDdXN0b21OYW1lZEdldHRlcjo6ZGVyZWZPYmplY3QpOgorICAgICAgICAqIGJpbmRpbmdzL3Nj
cmlwdHMvdGVzdC9WOC9WOFRlc3RDdXN0b21OYW1lZEdldHRlci5oOiBEaXR0by4KKyAgICAgICAg
KFdlYkNvcmUpOgorICAgICAgICAoVjhUZXN0Q3VzdG9tTmFtZWRHZXR0ZXIpOgorICAgICAgICAo
V2ViQ29yZTo6VjhUZXN0Q3VzdG9tTmFtZWRHZXR0ZXI6OnRvTmF0aXZlKToKKyAgICAgICAgKFdl
YkNvcmU6OlY4VGVzdEN1c3RvbU5hbWVkR2V0dGVyOjpleGlzdGluZ1dyYXBwZXIpOgorICAgICAg
ICAoV2ViQ29yZTo6VjhUZXN0Q3VzdG9tTmFtZWRHZXR0ZXI6OndyYXApOgorICAgICAgICAoV2Vi
Q29yZTo6dG9WOCk6CisKKzIwMTItMDItMDcgIEtlbnRhcm8gSGFyYSAgPGhhcmFrZW5AY2hyb21p
dW0ub3JnPgorCiAgICAgICAgIFtHVEtdIElnbm9yZSBbQ3VzdG9tXSBhdHRyaWJ1dGVzIGluIENv
ZGVHZW5lcmF0b3JHT2JqZWN0LnBtCiAgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD03ODA1OQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy9zY3JpcHRzL0NvZGVHZW5lcmF0b3JKUy5wbSBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Nj
cmlwdHMvQ29kZUdlbmVyYXRvckpTLnBtCmluZGV4IDkzM2UyNDVmODQzZWQ3M2U1MzJmYmJhNDk4
MzM1OGYyNDBiMjk2Y2IuLjdkYjYyNTQ4Y2ViNTljMzJjMTlmODc1NDU0M2MyMzFmZGI5MzNmZjAg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvQ29kZUdlbmVyYXRv
ckpTLnBtCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvQ29kZUdlbmVyYXRv
ckpTLnBtCkBAIC00MjksNyArNDI5LDcgQEAgc3ViIEdlbmVyYXRlR2V0T3duUHJvcGVydHlTbG90
Qm9keQogICAgICAgICB9CiAgICAgfTsKIAotICAgIGlmICghJGRhdGFOb2RlLT5leHRlbmRlZEF0
dHJpYnV0ZXMtPnsiSGFzT3ZlcnJpZGluZ05hbWVHZXR0ZXIifSkgeworICAgIGlmICghJGRhdGFO
b2RlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPnsiQ3VzdG9tTmFtZWRHZXR0ZXIifSkgewogICAgICAg
ICAmJG1hbnVhbExvb2t1cEdldHRlckdlbmVyYXRpb24oKTsKICAgICB9CiAKQEAgLTQ1Myw3ICs0
NTMsNyBAQCBzdWIgR2VuZXJhdGVHZXRPd25Qcm9wZXJ0eVNsb3RCb2R5CiAgICAgICAgIHB1c2go
QGdldE93blByb3BlcnR5U2xvdEltcGwsICIgICAgfVxuIik7CiAgICAgfQogCi0gICAgaWYgKCRk
YXRhTm9kZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57Ik5hbWVkR2V0dGVyIn0gfHwgJGRhdGFOb2Rl
LT5leHRlbmRlZEF0dHJpYnV0ZXMtPnsiSGFzT3ZlcnJpZGluZ05hbWVHZXR0ZXIifSkgeworICAg
IGlmICgkZGF0YU5vZGUtPmV4dGVuZGVkQXR0cmlidXRlcy0+eyJOYW1lZEdldHRlciJ9IHx8ICRk
YXRhTm9kZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57IkN1c3RvbU5hbWVkR2V0dGVyIn0pIHsKICAg
ICAgICAgcHVzaChAZ2V0T3duUHJvcGVydHlTbG90SW1wbCwgIiAgICBpZiAoY2FuR2V0SXRlbXNG
b3JOYW1lKGV4ZWMsIHN0YXRpY19jYXN0PCRpbXBsQ2xhc3NOYW1lKj4odGhpc09iamVjdC0+aW1w
bCgpKSwgcHJvcGVydHlOYW1lKSkge1xuIik7CiAgICAgICAgIHB1c2goQGdldE93blByb3BlcnR5
U2xvdEltcGwsICIgICAgICAgIHNsb3Quc2V0Q3VzdG9tKHRoaXNPYmplY3QsIHRoaXNPYmplY3Qt
Pm5hbWVHZXR0ZXIpO1xuIik7CiAgICAgICAgIHB1c2goQGdldE93blByb3BlcnR5U2xvdEltcGws
ICIgICAgICAgIHJldHVybiB0cnVlO1xuIik7CkBAIC00NjUsNyArNDY1LDcgQEAgc3ViIEdlbmVy
YXRlR2V0T3duUHJvcGVydHlTbG90Qm9keQogICAgICAgICB9CiAgICAgfQogCi0gICAgaWYgKCRk
YXRhTm9kZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57Ikhhc092ZXJyaWRpbmdOYW1lR2V0dGVyIn0p
IHsKKyAgICBpZiAoJGRhdGFOb2RlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPnsiQ3VzdG9tTmFtZWRH
ZXR0ZXIifSkgewogICAgICAgICAmJG1hbnVhbExvb2t1cEdldHRlckdlbmVyYXRpb24oKTsKICAg
ICB9CiAKQEAgLTUyMiwxMSArNTIyLDExIEBAIHN1YiBHZW5lcmF0ZUdldE93blByb3BlcnR5RGVz
Y3JpcHRvckJvZHkKICAgICAgICAgICAgIHB1c2goQGdldE93blByb3BlcnR5RGVzY3JpcHRvcklt
cGwsICIgICAgfVxuIik7CiAgICAgICAgIH0KICAgICB9OwotICAgIAotICAgIGlmICghJGRhdGFO
b2RlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPnsiSGFzT3ZlcnJpZGluZ05hbWVHZXR0ZXIifSkgewor
CisgICAgaWYgKCEkZGF0YU5vZGUtPmV4dGVuZGVkQXR0cmlidXRlcy0+eyJDdXN0b21OYW1lZEdl
dHRlciJ9KSB7CiAgICAgICAgICYkbWFudWFsTG9va3VwR2V0dGVyR2VuZXJhdGlvbigpOwogICAg
IH0KLSAgICAKKwogICAgIGlmICgkZGF0YU5vZGUtPmV4dGVuZGVkQXR0cmlidXRlcy0+eyJJbmRl
eGVkR2V0dGVyIn0gfHwgJGRhdGFOb2RlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPnsiSGFzTnVtZXJp
Y0luZGV4R2V0dGVyIn0pIHsKICAgICAgICAgcHVzaChAZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9y
SW1wbCwgIiAgICBib29sIG9rO1xuIik7CiAgICAgICAgIHB1c2goQGdldE93blByb3BlcnR5RGVz
Y3JpcHRvckltcGwsICIgICAgdW5zaWduZWQgaW5kZXggPSBwcm9wZXJ0eU5hbWUudG9VSW50MzIo
b2spO1xuIik7CkBAIC01NTEsOCArNTUxLDggQEAgc3ViIEdlbmVyYXRlR2V0T3duUHJvcGVydHlE
ZXNjcmlwdG9yQm9keQogICAgICAgICBwdXNoKEBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JJbXBs
LCAiICAgICAgICByZXR1cm4gdHJ1ZTtcbiIpOwogICAgICAgICBwdXNoKEBnZXRPd25Qcm9wZXJ0
eURlc2NyaXB0b3JJbXBsLCAiICAgIH1cbiIpOwogICAgIH0KLSAgICAKLSAgICBpZiAoJGRhdGFO
b2RlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPnsiTmFtZWRHZXR0ZXIifSB8fCAkZGF0YU5vZGUtPmV4
dGVuZGVkQXR0cmlidXRlcy0+eyJIYXNPdmVycmlkaW5nTmFtZUdldHRlciJ9KSB7CisKKyAgICBp
ZiAoJGRhdGFOb2RlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPnsiTmFtZWRHZXR0ZXIifSB8fCAkZGF0
YU5vZGUtPmV4dGVuZGVkQXR0cmlidXRlcy0+eyJDdXN0b21OYW1lZEdldHRlciJ9KSB7CiAgICAg
ICAgIHB1c2goQGdldE93blByb3BlcnR5RGVzY3JpcHRvckltcGwsICIgICAgaWYgKGNhbkdldEl0
ZW1zRm9yTmFtZShleGVjLCBzdGF0aWNfY2FzdDwkaW1wbENsYXNzTmFtZSo+KHRoaXNPYmplY3Qt
PmltcGwoKSksIHByb3BlcnR5TmFtZSkpIHtcbiIpOwogICAgICAgICBwdXNoKEBnZXRPd25Qcm9w
ZXJ0eURlc2NyaXB0b3JJbXBsLCAiICAgICAgICAke25hbWVzcGFjZU1heWJlfVByb3BlcnR5U2xv
dCBzbG90O1xuIik7CiAgICAgICAgIHB1c2goQGdldE93blByb3BlcnR5RGVzY3JpcHRvckltcGws
ICIgICAgICAgIHNsb3Quc2V0Q3VzdG9tKHRoaXNPYmplY3QsIG5hbWVHZXR0ZXIpO1xuIik7CkBA
IC01NjUsMTYgKzU2NSwxNiBAQCBzdWIgR2VuZXJhdGVHZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JC
b2R5CiAgICAgICAgICAgICAkaW1wbEluY2x1ZGVzeyJ3dGYvdGV4dC9BdG9taWNTdHJpbmcuaCJ9
ID0gMTsKICAgICAgICAgfQogICAgIH0KLSAgICAKLSAgICBpZiAoJGRhdGFOb2RlLT5leHRlbmRl
ZEF0dHJpYnV0ZXMtPnsiSGFzT3ZlcnJpZGluZ05hbWVHZXR0ZXIifSkgeworCisgICAgaWYgKCRk
YXRhTm9kZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57IkN1c3RvbU5hbWVkR2V0dGVyIn0pIHsKICAg
ICAgICAgJiRtYW51YWxMb29rdXBHZXR0ZXJHZW5lcmF0aW9uKCk7CiAgICAgfQotICAgIAorCiAg
ICAgaWYgKCRkYXRhTm9kZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57IkRlbGVnYXRpbmdHZXRPd25Q
cm9wZXJ0eVNsb3QifSkgewogICAgICAgICBwdXNoKEBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JJ
bXBsLCAiICAgIGlmICh0aGlzT2JqZWN0LT5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JEZWxlZ2F0
ZShleGVjLCBwcm9wZXJ0eU5hbWUsIGRlc2NyaXB0b3IpKVxuIik7CiAgICAgICAgIHB1c2goQGdl
dE93blByb3BlcnR5RGVzY3JpcHRvckltcGwsICIgICAgICAgIHJldHVybiB0cnVlO1xuIik7CiAg
ICAgfQotICAgIAorCiAgICAgaWYgKCRoYXNBdHRyaWJ1dGVzKSB7CiAgICAgICAgIGlmICgkaW5s
aW5lZCkgewogICAgICAgICAgICAgZGllICJDYW5ub3QgaW5saW5lIGlmIE5vU3RhdGljVGFibGVz
IGlzIHNldC4iIGlmICgkZGF0YU5vZGUtPmV4dGVuZGVkQXR0cmlidXRlcy0+eyJKU05vU3RhdGlj
VGFibGVzIn0pOwpAQCAtNzUzLDIwICs3NTMsMjAgQEAgc3ViIEdlbmVyYXRlSGVhZGVyCiAKICAg
ICAkaW1wbEluY2x1ZGVzeyIke2NsYXNzTmFtZX1DdXN0b20uaCJ9ID0gMSBpZiAhJGRhdGFOb2Rl
LT5leHRlbmRlZEF0dHJpYnV0ZXMtPnsiQ3VzdG9tSGVhZGVyIn0gJiYgKCRkYXRhTm9kZS0+ZXh0
ZW5kZWRBdHRyaWJ1dGVzLT57IkN1c3RvbVB1dEZ1bmN0aW9uIn0gfHwgJGRhdGFOb2RlLT5leHRl
bmRlZEF0dHJpYnV0ZXMtPnsiRGVsZWdhdGluZ1B1dEZ1bmN0aW9uIn0pOwogCi0gICAgbXkgJGhh
c0dldHRlciA9ICRudW1BdHRyaWJ1dGVzID4gMCAKKyAgICBteSAkaGFzR2V0dGVyID0gJG51bUF0
dHJpYnV0ZXMgPiAwCiAgICAgICAgICAgICAgICAgIHx8ICEkZGF0YU5vZGUtPmV4dGVuZGVkQXR0
cmlidXRlcy0+eyJPbWl0Q29uc3RydWN0b3IifQogICAgICAgICAgICAgICAgICB8fCAkZGF0YU5v
ZGUtPmV4dGVuZGVkQXR0cmlidXRlcy0+eyJJbmRleGVkR2V0dGVyIn0KICAgICAgICAgICAgICAg
ICAgfHwgJGRhdGFOb2RlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPnsiSGFzTnVtZXJpY0luZGV4R2V0
dGVyIn0KICAgICAgICAgICAgICAgICAgfHwgJGRhdGFOb2RlLT5leHRlbmRlZEF0dHJpYnV0ZXMt
PnsiQ3VzdG9tR2V0T3duUHJvcGVydHlTbG90In0KICAgICAgICAgICAgICAgICAgfHwgJGRhdGFO
b2RlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPnsiRGVsZWdhdGluZ0dldE93blByb3BlcnR5U2xvdCJ9
CiAgICAgICAgICAgICAgICAgIHx8ICRkYXRhTm9kZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57Ik5h
bWVkR2V0dGVyIn0KLSAgICAgICAgICAgICAgICAgfHwgJGRhdGFOb2RlLT5leHRlbmRlZEF0dHJp
YnV0ZXMtPnsiSGFzT3ZlcnJpZGluZ05hbWVHZXR0ZXIifTsKKyAgICAgICAgICAgICAgICAgfHwg
JGRhdGFOb2RlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPnsiQ3VzdG9tTmFtZWRHZXR0ZXIifTsKIAog
ICAgICMgR2V0dGVycwogICAgIGlmICgkaGFzR2V0dGVyKSB7CiAgICAgICAgIHB1c2goQGhlYWRl
ckNvbnRlbnQsICIgICAgc3RhdGljIGJvb2wgZ2V0T3duUHJvcGVydHlTbG90KEpTQzo6SlNDZWxs
KiwgSlNDOjpFeGVjU3RhdGUqLCBjb25zdCBKU0M6OklkZW50aWZpZXImIHByb3BlcnR5TmFtZSwg
SlNDOjpQcm9wZXJ0eVNsb3QmKTtcbiIpOwogICAgICAgICBwdXNoKEBoZWFkZXJDb250ZW50LCAi
ICAgIHN0YXRpYyBib29sIGdldE93blByb3BlcnR5RGVzY3JpcHRvcihKU0M6OkpTT2JqZWN0Kiwg
SlNDOjpFeGVjU3RhdGUqLCBjb25zdCBKU0M6OklkZW50aWZpZXImIHByb3BlcnR5TmFtZSwgSlND
OjpQcm9wZXJ0eURlc2NyaXB0b3ImKTtcbiIpOwotICAgICAgICBwdXNoKEBoZWFkZXJDb250ZW50
LCAiICAgIHN0YXRpYyBib29sIGdldE93blByb3BlcnR5U2xvdEJ5SW5kZXgoSlNDOjpKU0NlbGwq
LCBKU0M6OkV4ZWNTdGF0ZSosIHVuc2lnbmVkIHByb3BlcnR5TmFtZSwgSlNDOjpQcm9wZXJ0eVNs
b3QmKTtcbiIpIGlmICgkZGF0YU5vZGUtPmV4dGVuZGVkQXR0cmlidXRlcy0+eyJJbmRleGVkR2V0
dGVyIn0gfHwgJGRhdGFOb2RlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPnsiSGFzTnVtZXJpY0luZGV4
R2V0dGVyIn0pICYmICEkZGF0YU5vZGUtPmV4dGVuZGVkQXR0cmlidXRlcy0+eyJIYXNPdmVycmlk
aW5nTmFtZUdldHRlciJ9OworICAgICAgICBwdXNoKEBoZWFkZXJDb250ZW50LCAiICAgIHN0YXRp
YyBib29sIGdldE93blByb3BlcnR5U2xvdEJ5SW5kZXgoSlNDOjpKU0NlbGwqLCBKU0M6OkV4ZWNT
dGF0ZSosIHVuc2lnbmVkIHByb3BlcnR5TmFtZSwgSlNDOjpQcm9wZXJ0eVNsb3QmKTtcbiIpIGlm
ICgkZGF0YU5vZGUtPmV4dGVuZGVkQXR0cmlidXRlcy0+eyJJbmRleGVkR2V0dGVyIn0gfHwgJGRh
dGFOb2RlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPnsiSGFzTnVtZXJpY0luZGV4R2V0dGVyIn0pICYm
ICEkZGF0YU5vZGUtPmV4dGVuZGVkQXR0cmlidXRlcy0+eyJDdXN0b21OYW1lZEdldHRlciJ9Owog
ICAgICAgICBwdXNoKEBoZWFkZXJDb250ZW50LCAiICAgIGJvb2wgZ2V0T3duUHJvcGVydHlTbG90
RGVsZWdhdGUoSlNDOjpFeGVjU3RhdGUqLCBjb25zdCBKU0M6OklkZW50aWZpZXImLCBKU0M6OlBy
b3BlcnR5U2xvdCYpO1xuIikgaWYgJGRhdGFOb2RlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPnsiRGVs
ZWdhdGluZ0dldE93blByb3BlcnR5U2xvdCJ9OwogICAgICAgICBwdXNoKEBoZWFkZXJDb250ZW50
LCAiICAgIGJvb2wgZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yRGVsZWdhdGUoSlNDOjpFeGVjU3Rh
dGUqLCBjb25zdCBKU0M6OklkZW50aWZpZXImLCBKU0M6OlByb3BlcnR5RGVzY3JpcHRvciYpO1xu
IikgaWYgJGRhdGFOb2RlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPnsiRGVsZWdhdGluZ0dldE93blBy
b3BlcnR5U2xvdCJ9OwogICAgICAgICAkc3RydWN0dXJlRmxhZ3N7IkpTQzo6T3ZlcnJpZGVzR2V0
T3duUHJvcGVydHlTbG90In0gPSAxOwpAQCAtOTUxLDEzICs5NTEsMTMgQEAgc3ViIEdlbmVyYXRl
SGVhZGVyCiAgICAgICAgIHB1c2goQGhlYWRlckNvbnRlbnQsICIgICAgSlNDOjpKU1ZhbHVlIGdl
dEJ5SW5kZXgoSlNDOjpFeGVjU3RhdGUqLCB1bnNpZ25lZCBpbmRleCk7XG4iKTsKICAgICAgICAg
CiAgICAgfQotICAgIAorCiAgICAgIyBJbmRleCBzZXR0ZXIKICAgICBpZiAoJGRhdGFOb2RlLT5l
eHRlbmRlZEF0dHJpYnV0ZXMtPnsiQ3VzdG9tSW5kZXhlZFNldHRlciJ9KSB7CiAgICAgICAgIHB1
c2goQGhlYWRlckNvbnRlbnQsICIgICAgdm9pZCBpbmRleFNldHRlcihKU0M6OkV4ZWNTdGF0ZSos
IHVuc2lnbmVkIGluZGV4LCBKU0M6OkpTVmFsdWUpO1xuIik7CiAgICAgfQogICAgICMgTmFtZSBn
ZXR0ZXIKLSAgICBpZiAoJGRhdGFOb2RlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPnsiTmFtZWRHZXR0
ZXIifSB8fCAkZGF0YU5vZGUtPmV4dGVuZGVkQXR0cmlidXRlcy0+eyJIYXNPdmVycmlkaW5nTmFt
ZUdldHRlciJ9KSB7CisgICAgaWYgKCRkYXRhTm9kZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57Ik5h
bWVkR2V0dGVyIn0gfHwgJGRhdGFOb2RlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPnsiQ3VzdG9tTmFt
ZWRHZXR0ZXIifSkgewogICAgICAgICBwdXNoKEBoZWFkZXJDb250ZW50LCAicHJpdmF0ZTpcbiIp
OwogICAgICAgICBwdXNoKEBoZWFkZXJDb250ZW50LCAiICAgIHN0YXRpYyBib29sIGNhbkdldEl0
ZW1zRm9yTmFtZShKU0M6OkV4ZWNTdGF0ZSosICRpbXBsQ2xhc3NOYW1lKiwgY29uc3QgSlNDOjpJ
ZGVudGlmaWVyJik7XG4iKTsKICAgICAgICAgcHVzaChAaGVhZGVyQ29udGVudCwgIiAgICBzdGF0
aWMgSlNDOjpKU1ZhbHVlIG5hbWVHZXR0ZXIoSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkpTVmFsdWUs
IGNvbnN0IEpTQzo6SWRlbnRpZmllciYpO1xuIik7CkBAIC0xNjIwLDE0ICsxNjIwLDE0IEBAIHN1
YiBHZW5lcmF0ZUltcGxlbWVudGF0aW9uCiAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAifVxu
XG4iKTsKICAgICB9CiAKLSAgICBteSAkaGFzR2V0dGVyID0gJG51bUF0dHJpYnV0ZXMgPiAwIAor
ICAgIG15ICRoYXNHZXR0ZXIgPSAkbnVtQXR0cmlidXRlcyA+IDAKICAgICAgICAgICAgICAgICAg
fHwgISRkYXRhTm9kZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57Ik9taXRDb25zdHJ1Y3RvciJ9IAog
ICAgICAgICAgICAgICAgICB8fCAkZGF0YU5vZGUtPmV4dGVuZGVkQXR0cmlidXRlcy0+eyJJbmRl
eGVkR2V0dGVyIn0KICAgICAgICAgICAgICAgICAgfHwgJGRhdGFOb2RlLT5leHRlbmRlZEF0dHJp
YnV0ZXMtPnsiSGFzTnVtZXJpY0luZGV4R2V0dGVyIn0KICAgICAgICAgICAgICAgICAgfHwgJGRh
dGFOb2RlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPnsiRGVsZWdhdGluZ0dldE93blByb3BlcnR5U2xv
dCJ9CiAgICAgICAgICAgICAgICAgIHx8ICRkYXRhTm9kZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57
IkN1c3RvbUdldE93blByb3BlcnR5U2xvdCJ9CiAgICAgICAgICAgICAgICAgIHx8ICRkYXRhTm9k
ZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57Ik5hbWVkR2V0dGVyIn0KLSAgICAgICAgICAgICAgICAg
fHwgJGRhdGFOb2RlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPnsiSGFzT3ZlcnJpZGluZ05hbWVHZXR0
ZXIifTsKKyAgICAgICAgICAgICAgICAgfHwgJGRhdGFOb2RlLT5leHRlbmRlZEF0dHJpYnV0ZXMt
PnsiQ3VzdG9tTmFtZWRHZXR0ZXIifTsKIAogICAgICMgQXR0cmlidXRlcwogICAgIGlmICgkaGFz
R2V0dGVyKSB7CkBAIC0xNjQ2LDggKzE2NDYsOCBAQCBzdWIgR2VuZXJhdGVJbXBsZW1lbnRhdGlv
bgogICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICJ9XG5cbiIpOwogICAgICAgICB9CiAK
LSAgICAgICAgaWYgKCgkZGF0YU5vZGUtPmV4dGVuZGVkQXR0cmlidXRlcy0+eyJJbmRleGVkR2V0
dGVyIn0gfHwgJGRhdGFOb2RlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPnsiSGFzTnVtZXJpY0luZGV4
R2V0dGVyIn0pIAotICAgICAgICAgICAgICAgICYmICEkZGF0YU5vZGUtPmV4dGVuZGVkQXR0cmli
dXRlcy0+eyJIYXNPdmVycmlkaW5nTmFtZUdldHRlciJ9KSB7CisgICAgICAgIGlmICgoJGRhdGFO
b2RlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPnsiSW5kZXhlZEdldHRlciJ9IHx8ICRkYXRhTm9kZS0+
ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57Ikhhc051bWVyaWNJbmRleEdldHRlciJ9KQorICAgICAgICAg
ICAgICAgICYmICEkZGF0YU5vZGUtPmV4dGVuZGVkQXR0cmlidXRlcy0+eyJDdXN0b21OYW1lZEdl
dHRlciJ9KSB7CiAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgImJvb2wgJHtjbGFzc05h
bWV9OjpnZXRPd25Qcm9wZXJ0eVNsb3RCeUluZGV4KEpTQ2VsbCogY2VsbCwgRXhlY1N0YXRlKiBl
eGVjLCB1bnNpZ25lZCBwcm9wZXJ0eU5hbWUsIFByb3BlcnR5U2xvdCYgc2xvdClcbiIpOwogICAg
ICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICJ7XG4iKTsKICAgICAgICAgICAgIHB1c2goQGlt
cGxDb250ZW50LCAiICAgICR7Y2xhc3NOYW1lfSogdGhpc09iamVjdCA9IGpzQ2FzdDwke2NsYXNz
TmFtZX0qPihjZWxsKTtcbiIpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
c2NyaXB0cy9Db2RlR2VuZXJhdG9yVjgucG0gYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3Jp
cHRzL0NvZGVHZW5lcmF0b3JWOC5wbQppbmRleCA5MjhkYWMzMmE0YWYzMmM5MmRkMzhjODVmNTM1
OGMzNmI2MWU3MWExLi42MWZiYjIwYzdiODQ1ODVkYTBjOGNhMGIyYmUzNzYzMGRlMTkyNGI5IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0b3JW
OC5wbQorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0b3JW
OC5wbQpAQCAtNTY1LDcgKzU2NSw3IEBAIHN1YiBHZW5lcmF0ZUhlYWRlck5hbWVkQW5kSW5kZXhl
ZFByb3BlcnR5QWNjZXNzb3JzCiAgICAgbXkgJGludGVyZmFjZU5hbWUgPSAkZGF0YU5vZGUtPm5h
bWU7CiAgICAgbXkgJGhhc0N1c3RvbUluZGV4ZWRHZXR0ZXIgPSAkZGF0YU5vZGUtPmV4dGVuZGVk
QXR0cmlidXRlcy0+eyJJbmRleGVkR2V0dGVyIn0gfHwgJGRhdGFOb2RlLT5leHRlbmRlZEF0dHJp
YnV0ZXMtPnsiQ3VzdG9tR2V0T3duUHJvcGVydHlTbG90In07CiAgICAgbXkgJGhhc0N1c3RvbUlu
ZGV4ZWRTZXR0ZXIgPSAkZGF0YU5vZGUtPmV4dGVuZGVkQXR0cmlidXRlcy0+eyJDdXN0b21JbmRl
eGVkU2V0dGVyIn0gJiYgISRkYXRhTm9kZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57Ikhhc051bWVy
aWNJbmRleEdldHRlciJ9OwotICAgIG15ICRoYXNDdXN0b21OYW1lZEdldHRlciA9ICRkYXRhTm9k
ZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57Ik5hbWVkR2V0dGVyIn0gfHwgJGRhdGFOb2RlLT5leHRl
bmRlZEF0dHJpYnV0ZXMtPnsiSGFzT3ZlcnJpZGluZ05hbWVHZXR0ZXIifSB8fCAkZGF0YU5vZGUt
PmV4dGVuZGVkQXR0cmlidXRlcy0+eyJDdXN0b21HZXRPd25Qcm9wZXJ0eVNsb3QifTsKKyAgICBt
eSAkaGFzQ3VzdG9tTmFtZWRHZXR0ZXIgPSAkZGF0YU5vZGUtPmV4dGVuZGVkQXR0cmlidXRlcy0+
eyJOYW1lZEdldHRlciJ9IHx8ICRkYXRhTm9kZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57IkN1c3Rv
bU5hbWVkR2V0dGVyIn0gfHwgJGRhdGFOb2RlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPnsiQ3VzdG9t
R2V0T3duUHJvcGVydHlTbG90In07CiAgICAgbXkgJGhhc0N1c3RvbU5hbWVkU2V0dGVyID0gJGRh
dGFOb2RlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPnsiRGVsZWdhdGluZ1B1dEZ1bmN0aW9uIn07CiAg
ICAgbXkgJGhhc0N1c3RvbURlbGV0ZXJzID0gJGRhdGFOb2RlLT5leHRlbmRlZEF0dHJpYnV0ZXMt
PnsiQ3VzdG9tRGVsZXRlUHJvcGVydHkifTsKICAgICBteSAkaGFzQ3VzdG9tRW51bWVyYXRvciA9
ICRkYXRhTm9kZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57IkN1c3RvbUdldFByb3BlcnR5TmFtZXMi
fTsKQEAgLTIxMzMsMjQgKzIxMzMsMjQgQEAgc3ViIEdlbmVyYXRlSW1wbGVtZW50YXRpb25OYW1l
ZFByb3BlcnR5R2V0dGVyCiAgICAgbXkgJGRhdGFOb2RlID0gc2hpZnQ7CiAgICAgbXkgJG5hbWVk
UHJvcGVydHlHZXR0ZXIgPSBzaGlmdDsKICAgICBteSAkaW50ZXJmYWNlTmFtZSA9ICRkYXRhTm9k
ZS0+bmFtZTsKLSAgICBteSAkaGFzQ3VzdG9tR2V0dGVyID0gJGRhdGFOb2RlLT5leHRlbmRlZEF0
dHJpYnV0ZXMtPnsiSGFzT3ZlcnJpZGluZ05hbWVHZXR0ZXIifSB8fCAkZGF0YU5vZGUtPmV4dGVu
ZGVkQXR0cmlidXRlcy0+eyJDdXN0b21HZXRPd25Qcm9wZXJ0eVNsb3QifTsKKyAgICBteSAkaGFz
Q3VzdG9tTmFtZWRHZXR0ZXIgPSAkZGF0YU5vZGUtPmV4dGVuZGVkQXR0cmlidXRlcy0+eyJDdXN0
b21OYW1lZEdldHRlciJ9IHx8ICRkYXRhTm9kZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57IkN1c3Rv
bUdldE93blByb3BlcnR5U2xvdCJ9OwogCiAgICAgIyBGSVhNRTogUmVtb3ZlIGhhcmQtY29kZWQg
SFRNTE9wdGlvbnNDb2xsZWN0aW9uIHJlZmVyZW5jZSBieSBjaGFuZ2luZyBIVE1MT3B0aW9uc0Nv
bGxlY3Rpb24gdG8gbm90IGluaGVyaXQKICAgICAjIGZyb20gSFRNTENvbGxlY3Rpb24gcGVyIFcz
QyBzcGVjIChodHRwOi8vd3d3LnczLm9yZy9UUi8yMDAzL1JFQy1ET00tTGV2ZWwtMi1IVE1MLTIw
MDMwMTA5L2h0bWwuaHRtbCNIVE1MT3B0aW9uc0NvbGxlY3Rpb24pLgogICAgIGlmICgkaW50ZXJm
YWNlTmFtZSBlcSAiSFRNTE9wdGlvbnNDb2xsZWN0aW9uIikgewogICAgICAgICAkaW50ZXJmYWNl
TmFtZSA9ICJIVE1MQ29sbGVjdGlvbiI7Ci0gICAgICAgICRoYXNDdXN0b21HZXR0ZXIgPSAxOwor
ICAgICAgICAkaGFzQ3VzdG9tTmFtZWRHZXR0ZXIgPSAxOwogICAgIH0KIAogICAgIGlmICgkaW50
ZXJmYWNlTmFtZSBlcSAiSFRNTEFwcGxldEVsZW1lbnQiIHx8ICRpbnRlcmZhY2VOYW1lIGVxICJI
VE1MRW1iZWRFbGVtZW50IiB8fCAkaW50ZXJmYWNlTmFtZSBlcSAiSFRNTE9iamVjdEVsZW1lbnQi
KSB7Ci0gICAgICAgICRoYXNDdXN0b21HZXR0ZXIgPSAxOworICAgICAgICAkaGFzQ3VzdG9tTmFt
ZWRHZXR0ZXIgPSAxOwogICAgIH0KIAogICAgIGlmICgkaW50ZXJmYWNlTmFtZSBlcSAiSFRNTERv
Y3VtZW50IikgewotICAgICAgICAkaGFzQ3VzdG9tR2V0dGVyID0gMDsKKyAgICAgICAgJGhhc0N1
c3RvbU5hbWVkR2V0dGVyID0gMDsKICAgICB9CiAKLSAgICBteSAkaGFzR2V0dGVyID0gJGRhdGFO
b2RlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPnsiTmFtZWRHZXR0ZXIifSB8fCAkaGFzQ3VzdG9tR2V0
dGVyOworICAgIG15ICRoYXNHZXR0ZXIgPSAkZGF0YU5vZGUtPmV4dGVuZGVkQXR0cmlidXRlcy0+
eyJOYW1lZEdldHRlciJ9IHx8ICRoYXNDdXN0b21OYW1lZEdldHRlcjsKICAgICBpZiAoISRoYXNH
ZXR0ZXIpIHsKICAgICAgICAgcmV0dXJuOwogICAgIH0KQEAgLTIxNTksNyArMjE1OSw3IEBAIHN1
YiBHZW5lcmF0ZUltcGxlbWVudGF0aW9uTmFtZWRQcm9wZXJ0eUdldHRlcgogICAgICAgICAkbmFt
ZWRQcm9wZXJ0eUdldHRlciA9ICRjb2RlR2VuZXJhdG9yLT5GaW5kU3VwZXJNZXRob2QoJGRhdGFO
b2RlLCAibmFtZWRJdGVtIik7CiAgICAgfQogCi0gICAgaWYgKCRuYW1lZFByb3BlcnR5R2V0dGVy
ICYmICRuYW1lZFByb3BlcnR5R2V0dGVyLT50eXBlIG5lICJOb2RlIiAmJiAhJG5hbWVkUHJvcGVy
dHlHZXR0ZXItPmV4dGVuZGVkQXR0cmlidXRlcy0+eyJDdXN0b20ifSAmJiAhJGhhc0N1c3RvbUdl
dHRlcikgeworICAgIGlmICgkbmFtZWRQcm9wZXJ0eUdldHRlciAmJiAkbmFtZWRQcm9wZXJ0eUdl
dHRlci0+dHlwZSBuZSAiTm9kZSIgJiYgISRuYW1lZFByb3BlcnR5R2V0dGVyLT5leHRlbmRlZEF0
dHJpYnV0ZXMtPnsiQ3VzdG9tIn0gJiYgISRoYXNDdXN0b21OYW1lZEdldHRlcikgewogICAgICAg
ICBBZGRUb0ltcGxJbmNsdWRlcygiVjhDb2xsZWN0aW9uLmgiKTsKICAgICAgICAgbXkgJHR5cGUg
PSAkbmFtZWRQcm9wZXJ0eUdldHRlci0+dHlwZTsKICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQs
IDw8RU5EKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVz
dC9DUFAvV2ViRE9NVGVzdEN1c3RvbU5hbWVkR2V0dGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL3NjcmlwdHMvdGVzdC9DUFAvV2ViRE9NVGVzdEN1c3RvbU5hbWVkR2V0dGVyLmNwcApu
ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwLi4xNzY5Y2RkNmVlOTJmMTIzNjc0OTlmY2IyNWJkYjYxZDE3MTMyMThhCi0tLSAv
ZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0NQUC9X
ZWJET01UZXN0Q3VzdG9tTmFtZWRHZXR0ZXIuY3BwCkBAIC0wLDAgKzEsOTMgQEAKKy8qCisgKiBU
aGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgV2ViS2l0IG9wZW4gc291cmNlIHByb2plY3QuCisgKiBU
aGlzIGZpbGUgaGFzIGJlZW4gZ2VuZXJhdGVkIGJ5IGdlbmVyYXRlLWJpbmRpbmdzLnBsLiBETyBO
T1QgTU9ESUZZIQorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2Fu
IHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2Yg
dGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBi
eSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0
aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisg
KiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJl
IHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBp
bXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1Ymxp
YyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2Vp
dmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICog
YWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5v
dCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZy
YW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVT
QS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiV2ViRE9NVGVzdEN1c3Rv
bU5hbWVkR2V0dGVyLmgiCisKKyNpbmNsdWRlICJLVVJMLmgiCisjaW5jbHVkZSAiVGVzdEN1c3Rv
bU5hbWVkR2V0dGVyLmgiCisjaW5jbHVkZSAiV2ViRE9NU3RyaW5nLmgiCisjaW5jbHVkZSAiV2Vi
RXhjZXB0aW9uSGFuZGxlci5oIgorI2luY2x1ZGUgInd0Zi90ZXh0L0F0b21pY1N0cmluZy5oIgor
I2luY2x1ZGUgPHd0Zi9HZXRQdHIuaD4KKyNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+CisKK3N0cnVj
dCBXZWJET01UZXN0Q3VzdG9tTmFtZWRHZXR0ZXI6OldlYkRPTVRlc3RDdXN0b21OYW1lZEdldHRl
clByaXZhdGUgeworICAgIFdlYkRPTVRlc3RDdXN0b21OYW1lZEdldHRlclByaXZhdGUoV2ViQ29y
ZTo6VGVzdEN1c3RvbU5hbWVkR2V0dGVyKiBvYmplY3QgPSAwKQorICAgICAgICA6IGltcGwob2Jq
ZWN0KQorICAgIHsKKyAgICB9CisKKyAgICBSZWZQdHI8V2ViQ29yZTo6VGVzdEN1c3RvbU5hbWVk
R2V0dGVyPiBpbXBsOworfTsKKworV2ViRE9NVGVzdEN1c3RvbU5hbWVkR2V0dGVyOjpXZWJET01U
ZXN0Q3VzdG9tTmFtZWRHZXR0ZXIoKQorICAgIDogV2ViRE9NT2JqZWN0KCkKKyAgICAsIG1faW1w
bCgwKQoreworfQorCitXZWJET01UZXN0Q3VzdG9tTmFtZWRHZXR0ZXI6OldlYkRPTVRlc3RDdXN0
b21OYW1lZEdldHRlcihXZWJDb3JlOjpUZXN0Q3VzdG9tTmFtZWRHZXR0ZXIqIGltcGwpCisgICAg
OiBXZWJET01PYmplY3QoKQorICAgICwgbV9pbXBsKG5ldyBXZWJET01UZXN0Q3VzdG9tTmFtZWRH
ZXR0ZXJQcml2YXRlKGltcGwpKQoreworfQorCitXZWJET01UZXN0Q3VzdG9tTmFtZWRHZXR0ZXI6
OldlYkRPTVRlc3RDdXN0b21OYW1lZEdldHRlcihjb25zdCBXZWJET01UZXN0Q3VzdG9tTmFtZWRH
ZXR0ZXImIGNvcHkpCisgICAgOiBXZWJET01PYmplY3QoKQoreworICAgIG1faW1wbCA9IGNvcHku
aW1wbCgpID8gbmV3IFdlYkRPTVRlc3RDdXN0b21OYW1lZEdldHRlclByaXZhdGUoY29weS5pbXBs
KCkpIDogMDsKK30KKworV2ViRE9NVGVzdEN1c3RvbU5hbWVkR2V0dGVyJiBXZWJET01UZXN0Q3Vz
dG9tTmFtZWRHZXR0ZXI6Om9wZXJhdG9yPShjb25zdCBXZWJET01UZXN0Q3VzdG9tTmFtZWRHZXR0
ZXImIGNvcHkpCit7CisgICAgZGVsZXRlIG1faW1wbDsKKyAgICBtX2ltcGwgPSBjb3B5LmltcGwo
KSA/IG5ldyBXZWJET01UZXN0Q3VzdG9tTmFtZWRHZXR0ZXJQcml2YXRlKGNvcHkuaW1wbCgpKSA6
IDA7CisgICAgcmV0dXJuICp0aGlzOworfQorCitXZWJDb3JlOjpUZXN0Q3VzdG9tTmFtZWRHZXR0
ZXIqIFdlYkRPTVRlc3RDdXN0b21OYW1lZEdldHRlcjo6aW1wbCgpIGNvbnN0Cit7CisgICAgcmV0
dXJuIG1faW1wbCA/IFdURjo6Z2V0UHRyKG1faW1wbC0+aW1wbCkgOiAwOworfQorCitXZWJET01U
ZXN0Q3VzdG9tTmFtZWRHZXR0ZXI6On5XZWJET01UZXN0Q3VzdG9tTmFtZWRHZXR0ZXIoKQorewor
ICAgIGRlbGV0ZSBtX2ltcGw7CisgICAgbV9pbXBsID0gMDsKK30KKwordm9pZCBXZWJET01UZXN0
Q3VzdG9tTmFtZWRHZXR0ZXI6OmFub3RoZXJGdW5jdGlvbihjb25zdCBXZWJET01TdHJpbmcmIHN0
cikKK3sKKyAgICBpZiAoIWltcGwoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgaW1wbCgpLT5h
bm90aGVyRnVuY3Rpb24oc3RyKTsKK30KKworV2ViQ29yZTo6VGVzdEN1c3RvbU5hbWVkR2V0dGVy
KiB0b1dlYkNvcmUoY29uc3QgV2ViRE9NVGVzdEN1c3RvbU5hbWVkR2V0dGVyJiB3cmFwcGVyKQor
eworICAgIHJldHVybiB3cmFwcGVyLmltcGwoKTsKK30KKworV2ViRE9NVGVzdEN1c3RvbU5hbWVk
R2V0dGVyIHRvV2ViS2l0KFdlYkNvcmU6OlRlc3RDdXN0b21OYW1lZEdldHRlciogdmFsdWUpCit7
CisgICAgcmV0dXJuIFdlYkRPTVRlc3RDdXN0b21OYW1lZEdldHRlcih2YWx1ZSk7Cit9CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvQ1BQL1dlYkRPTVRl
c3RDdXN0b21OYW1lZEdldHRlci5oIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90
ZXN0L0NQUC9XZWJET01UZXN0Q3VzdG9tTmFtZWRHZXR0ZXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5mMWEyZDY4
YzFkODkxMmY1NzQ3MWNlZjI5ZTZiNTAwYmUwZDcwMzY2Ci0tLSAvZGV2L251bGwKKysrIGIvU291
cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0NQUC9XZWJET01UZXN0Q3VzdG9tTmFt
ZWRHZXR0ZXIuaApAQCAtMCwwICsxLDU0IEBACisvKgorICogQ29weXJpZ2h0IChDKSBSZXNlYXJj
aCBJbiBNb3Rpb24gTGltaXRlZCAyMDEwLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJp
Z2h0IChDKSAyMDA0LCAyMDA1LCAyMDA2LCAyMDA3LCAyMDA4LCAyMDA5IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwNiBTYW11ZWwgV2VpbmlnIDxz
YW0ud2VpbmlnQGdtYWlsLmNvbT4KKyAqIENvcHlyaWdodCAoQykgUmVzZWFyY2ggSW4gTW90aW9u
IExpbWl0ZWQgMjAxMC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIGxpYnJhcnkg
aXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2Rp
ZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwor
ICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsg
ZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikg
YW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGlu
IHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FS
UkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRB
QklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUK
KyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoK
KyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdl
bmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhl
IGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2Fy
ZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICog
Qm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2lmbmRlZiBXZWJET01UZXN0Q3Vz
dG9tTmFtZWRHZXR0ZXJfaAorI2RlZmluZSBXZWJET01UZXN0Q3VzdG9tTmFtZWRHZXR0ZXJfaAor
CisjaW5jbHVkZSA8V2ViRE9NT2JqZWN0Lmg+CisjaW5jbHVkZSA8V2ViRE9NU3RyaW5nLmg+CisK
K25hbWVzcGFjZSBXZWJDb3JlIHsKK2NsYXNzIFRlc3RDdXN0b21OYW1lZEdldHRlcjsKK307CisK
KworY2xhc3MgV2ViRE9NVGVzdEN1c3RvbU5hbWVkR2V0dGVyIDogcHVibGljIFdlYkRPTU9iamVj
dCB7CitwdWJsaWM6CisgICAgV2ViRE9NVGVzdEN1c3RvbU5hbWVkR2V0dGVyKCk7CisgICAgZXhw
bGljaXQgV2ViRE9NVGVzdEN1c3RvbU5hbWVkR2V0dGVyKFdlYkNvcmU6OlRlc3RDdXN0b21OYW1l
ZEdldHRlciopOworICAgIFdlYkRPTVRlc3RDdXN0b21OYW1lZEdldHRlcihjb25zdCBXZWJET01U
ZXN0Q3VzdG9tTmFtZWRHZXR0ZXImKTsKKyAgICBXZWJET01UZXN0Q3VzdG9tTmFtZWRHZXR0ZXIm
IG9wZXJhdG9yPShjb25zdCBXZWJET01UZXN0Q3VzdG9tTmFtZWRHZXR0ZXImKTsKKyAgICB2aXJ0
dWFsIH5XZWJET01UZXN0Q3VzdG9tTmFtZWRHZXR0ZXIoKTsKKworICAgIHZvaWQgYW5vdGhlckZ1
bmN0aW9uKGNvbnN0IFdlYkRPTVN0cmluZyYgc3RyKTsKKworICAgIFdlYkNvcmU6OlRlc3RDdXN0
b21OYW1lZEdldHRlciogaW1wbCgpIGNvbnN0OworCitwcm90ZWN0ZWQ6CisgICAgc3RydWN0IFdl
YkRPTVRlc3RDdXN0b21OYW1lZEdldHRlclByaXZhdGU7CisgICAgV2ViRE9NVGVzdEN1c3RvbU5h
bWVkR2V0dGVyUHJpdmF0ZSogbV9pbXBsOworfTsKKworV2ViQ29yZTo6VGVzdEN1c3RvbU5hbWVk
R2V0dGVyKiB0b1dlYkNvcmUoY29uc3QgV2ViRE9NVGVzdEN1c3RvbU5hbWVkR2V0dGVyJik7CitX
ZWJET01UZXN0Q3VzdG9tTmFtZWRHZXR0ZXIgdG9XZWJLaXQoV2ViQ29yZTo6VGVzdEN1c3RvbU5h
bWVkR2V0dGVyKik7CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGlu
Z3Mvc2NyaXB0cy90ZXN0L0NQUC9XZWJET01UZXN0T3ZlcnJpZGluZ05hbWVHZXR0ZXIuY3BwIGIv
U291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0NQUC9XZWJET01UZXN0T3ZlcnJp
ZGluZ05hbWVHZXR0ZXIuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0NDEwMzMx
YzdlZjMxZTY3NGY1YTMxNGE5MWFmOTk0ODIyYTcxMDVmLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMv
dGVzdC9DUFAvV2ViRE9NVGVzdE92ZXJyaWRpbmdOYW1lR2V0dGVyLmNwcAorKysgL2Rldi9udWxs
CkBAIC0xLDkzICswLDAgQEAKLS8qCi0gKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgV2ViS2l0
IG9wZW4gc291cmNlIHByb2plY3QuCi0gKiBUaGlzIGZpbGUgaGFzIGJlZW4gZ2VuZXJhdGVkIGJ5
IGdlbmVyYXRlLWJpbmRpbmdzLnBsLiBETyBOT1QgTU9ESUZZIQotICoKLSAqIFRoaXMgbGlicmFy
eSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1v
ZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGlj
Ci0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9u
OyBlaXRoZXIKLSAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9u
KSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQg
aW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBX
QVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFO
VEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdO
VQotICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0g
KgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkg
R2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0
aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KLSAqIHRoZSBGcmVlIFNvZnR3
YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCi0g
KiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgi
Ci0jaW5jbHVkZSAiV2ViRE9NVGVzdE92ZXJyaWRpbmdOYW1lR2V0dGVyLmgiCi0KLSNpbmNsdWRl
ICJLVVJMLmgiCi0jaW5jbHVkZSAiVGVzdE92ZXJyaWRpbmdOYW1lR2V0dGVyLmgiCi0jaW5jbHVk
ZSAiV2ViRE9NU3RyaW5nLmgiCi0jaW5jbHVkZSAiV2ViRXhjZXB0aW9uSGFuZGxlci5oIgotI2lu
Y2x1ZGUgInd0Zi90ZXh0L0F0b21pY1N0cmluZy5oIgotI2luY2x1ZGUgPHd0Zi9HZXRQdHIuaD4K
LSNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+Ci0KLXN0cnVjdCBXZWJET01UZXN0T3ZlcnJpZGluZ05h
bWVHZXR0ZXI6OldlYkRPTVRlc3RPdmVycmlkaW5nTmFtZUdldHRlclByaXZhdGUgewotICAgIFdl
YkRPTVRlc3RPdmVycmlkaW5nTmFtZUdldHRlclByaXZhdGUoV2ViQ29yZTo6VGVzdE92ZXJyaWRp
bmdOYW1lR2V0dGVyKiBvYmplY3QgPSAwKQotICAgICAgICA6IGltcGwob2JqZWN0KQotICAgIHsK
LSAgICB9Ci0KLSAgICBSZWZQdHI8V2ViQ29yZTo6VGVzdE92ZXJyaWRpbmdOYW1lR2V0dGVyPiBp
bXBsOwotfTsKLQotV2ViRE9NVGVzdE92ZXJyaWRpbmdOYW1lR2V0dGVyOjpXZWJET01UZXN0T3Zl
cnJpZGluZ05hbWVHZXR0ZXIoKQotICAgIDogV2ViRE9NT2JqZWN0KCkKLSAgICAsIG1faW1wbCgw
KQotewotfQotCi1XZWJET01UZXN0T3ZlcnJpZGluZ05hbWVHZXR0ZXI6OldlYkRPTVRlc3RPdmVy
cmlkaW5nTmFtZUdldHRlcihXZWJDb3JlOjpUZXN0T3ZlcnJpZGluZ05hbWVHZXR0ZXIqIGltcGwp
Ci0gICAgOiBXZWJET01PYmplY3QoKQotICAgICwgbV9pbXBsKG5ldyBXZWJET01UZXN0T3ZlcnJp
ZGluZ05hbWVHZXR0ZXJQcml2YXRlKGltcGwpKQotewotfQotCi1XZWJET01UZXN0T3ZlcnJpZGlu
Z05hbWVHZXR0ZXI6OldlYkRPTVRlc3RPdmVycmlkaW5nTmFtZUdldHRlcihjb25zdCBXZWJET01U
ZXN0T3ZlcnJpZGluZ05hbWVHZXR0ZXImIGNvcHkpCi0gICAgOiBXZWJET01PYmplY3QoKQotewot
ICAgIG1faW1wbCA9IGNvcHkuaW1wbCgpID8gbmV3IFdlYkRPTVRlc3RPdmVycmlkaW5nTmFtZUdl
dHRlclByaXZhdGUoY29weS5pbXBsKCkpIDogMDsKLX0KLQotV2ViRE9NVGVzdE92ZXJyaWRpbmdO
YW1lR2V0dGVyJiBXZWJET01UZXN0T3ZlcnJpZGluZ05hbWVHZXR0ZXI6Om9wZXJhdG9yPShjb25z
dCBXZWJET01UZXN0T3ZlcnJpZGluZ05hbWVHZXR0ZXImIGNvcHkpCi17Ci0gICAgZGVsZXRlIG1f
aW1wbDsKLSAgICBtX2ltcGwgPSBjb3B5LmltcGwoKSA/IG5ldyBXZWJET01UZXN0T3ZlcnJpZGlu
Z05hbWVHZXR0ZXJQcml2YXRlKGNvcHkuaW1wbCgpKSA6IDA7Ci0gICAgcmV0dXJuICp0aGlzOwot
fQotCi1XZWJDb3JlOjpUZXN0T3ZlcnJpZGluZ05hbWVHZXR0ZXIqIFdlYkRPTVRlc3RPdmVycmlk
aW5nTmFtZUdldHRlcjo6aW1wbCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1faW1wbCA/IFdURjo6
Z2V0UHRyKG1faW1wbC0+aW1wbCkgOiAwOwotfQotCi1XZWJET01UZXN0T3ZlcnJpZGluZ05hbWVH
ZXR0ZXI6On5XZWJET01UZXN0T3ZlcnJpZGluZ05hbWVHZXR0ZXIoKQotewotICAgIGRlbGV0ZSBt
X2ltcGw7Ci0gICAgbV9pbXBsID0gMDsKLX0KLQotdm9pZCBXZWJET01UZXN0T3ZlcnJpZGluZ05h
bWVHZXR0ZXI6OmFub3RoZXJGdW5jdGlvbihjb25zdCBXZWJET01TdHJpbmcmIHN0cikKLXsKLSAg
ICBpZiAoIWltcGwoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaW1wbCgpLT5hbm90aGVyRnVu
Y3Rpb24oc3RyKTsKLX0KLQotV2ViQ29yZTo6VGVzdE92ZXJyaWRpbmdOYW1lR2V0dGVyKiB0b1dl
YkNvcmUoY29uc3QgV2ViRE9NVGVzdE92ZXJyaWRpbmdOYW1lR2V0dGVyJiB3cmFwcGVyKQotewot
ICAgIHJldHVybiB3cmFwcGVyLmltcGwoKTsKLX0KLQotV2ViRE9NVGVzdE92ZXJyaWRpbmdOYW1l
R2V0dGVyIHRvV2ViS2l0KFdlYkNvcmU6OlRlc3RPdmVycmlkaW5nTmFtZUdldHRlciogdmFsdWUp
Ci17Ci0gICAgcmV0dXJuIFdlYkRPTVRlc3RPdmVycmlkaW5nTmFtZUdldHRlcih2YWx1ZSk7Ci19
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvQ1BQL1dl
YkRPTVRlc3RPdmVycmlkaW5nTmFtZUdldHRlci5oIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
c2NyaXB0cy90ZXN0L0NQUC9XZWJET01UZXN0T3ZlcnJpZGluZ05hbWVHZXR0ZXIuaApkZWxldGVk
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTZjNjgxZWY3ODVjMTI0ODIwOWIyNzdlZjBmNzkxOTU2
MzZhY2JiZS4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvQ1BQL1dlYkRPTVRlc3RPdmVycmlk
aW5nTmFtZUdldHRlci5oCisrKyAvZGV2L251bGwKQEAgLTEsNTQgKzAsMCBAQAotLyoKLSAqIENv
cHlyaWdodCAoQykgUmVzZWFyY2ggSW4gTW90aW9uIExpbWl0ZWQgMjAxMC4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSwgMjAwNiwgMjAwNywgMjAwOCwg
MjAwOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MDYgU2FtdWVsIFdlaW5pZyA8c2FtLndlaW5pZ0BnbWFpbC5jb20+Ci0gKiBDb3B5cmlnaHQgKEMp
IFJlc2VhcmNoIEluIE1vdGlvbiBMaW1pdGVkIDIwMTAuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0g
KgotICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRl
IGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJh
cnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNv
ZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBv
ciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgbGlicmFy
eSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICog
YnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFu
dHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVS
UE9TRS4gIFNlZSB0aGUgR05VCi0gKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9y
IG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9m
IHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRo
aXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bwot
ICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0
LCBGaWZ0aCBGbG9vciwKLSAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotICovCi0KLSNp
Zm5kZWYgV2ViRE9NVGVzdE92ZXJyaWRpbmdOYW1lR2V0dGVyX2gKLSNkZWZpbmUgV2ViRE9NVGVz
dE92ZXJyaWRpbmdOYW1lR2V0dGVyX2gKLQotI2luY2x1ZGUgPFdlYkRPTU9iamVjdC5oPgotI2lu
Y2x1ZGUgPFdlYkRPTVN0cmluZy5oPgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci1jbGFzcyBUZXN0
T3ZlcnJpZGluZ05hbWVHZXR0ZXI7Ci19OwotCi0KLWNsYXNzIFdlYkRPTVRlc3RPdmVycmlkaW5n
TmFtZUdldHRlciA6IHB1YmxpYyBXZWJET01PYmplY3QgewotcHVibGljOgotICAgIFdlYkRPTVRl
c3RPdmVycmlkaW5nTmFtZUdldHRlcigpOwotICAgIGV4cGxpY2l0IFdlYkRPTVRlc3RPdmVycmlk
aW5nTmFtZUdldHRlcihXZWJDb3JlOjpUZXN0T3ZlcnJpZGluZ05hbWVHZXR0ZXIqKTsKLSAgICBX
ZWJET01UZXN0T3ZlcnJpZGluZ05hbWVHZXR0ZXIoY29uc3QgV2ViRE9NVGVzdE92ZXJyaWRpbmdO
YW1lR2V0dGVyJik7Ci0gICAgV2ViRE9NVGVzdE92ZXJyaWRpbmdOYW1lR2V0dGVyJiBvcGVyYXRv
cj0oY29uc3QgV2ViRE9NVGVzdE92ZXJyaWRpbmdOYW1lR2V0dGVyJik7Ci0gICAgdmlydHVhbCB+
V2ViRE9NVGVzdE92ZXJyaWRpbmdOYW1lR2V0dGVyKCk7Ci0KLSAgICB2b2lkIGFub3RoZXJGdW5j
dGlvbihjb25zdCBXZWJET01TdHJpbmcmIHN0cik7Ci0KLSAgICBXZWJDb3JlOjpUZXN0T3ZlcnJp
ZGluZ05hbWVHZXR0ZXIqIGltcGwoKSBjb25zdDsKLQotcHJvdGVjdGVkOgotICAgIHN0cnVjdCBX
ZWJET01UZXN0T3ZlcnJpZGluZ05hbWVHZXR0ZXJQcml2YXRlOwotICAgIFdlYkRPTVRlc3RPdmVy
cmlkaW5nTmFtZUdldHRlclByaXZhdGUqIG1faW1wbDsKLX07Ci0KLVdlYkNvcmU6OlRlc3RPdmVy
cmlkaW5nTmFtZUdldHRlciogdG9XZWJDb3JlKGNvbnN0IFdlYkRPTVRlc3RPdmVycmlkaW5nTmFt
ZUdldHRlciYpOwotV2ViRE9NVGVzdE92ZXJyaWRpbmdOYW1lR2V0dGVyIHRvV2ViS2l0KFdlYkNv
cmU6OlRlc3RPdmVycmlkaW5nTmFtZUdldHRlciopOwotCi0jZW5kaWYKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9HT2JqZWN0L1dlYktpdERPTVRlc3RD
dXN0b21OYW1lZEdldHRlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rl
c3QvR09iamVjdC9XZWJLaXRET01UZXN0Q3VzdG9tTmFtZWRHZXR0ZXIuY3BwCm5ldyBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAu
LmVhNjQ4ZjU2NDY3MTVhNDg2NmQzZDMwNzg2MzI2ODFjZjE4MWJiMzQKLS0tIC9kZXYvbnVsbAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvR09iamVjdC9XZWJLaXRE
T01UZXN0Q3VzdG9tTmFtZWRHZXR0ZXIuY3BwCkBAIC0wLDAgKzEsMTU5IEBACisvKgorICAgIFRo
aXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBXZWJLaXQgb3BlbiBzb3VyY2UgcHJvamVjdC4KKyAgICBU
aGlzIGZpbGUgaGFzIGJlZW4gZ2VuZXJhdGVkIGJ5IGdlbmVyYXRlLWJpbmRpbmdzLnBsLiBETyBO
T1QgTU9ESUZZIQorCisgICAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4g
cmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2Yg
dGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgICAgTGljZW5zZSBhcyBwdWJsaXNoZWQg
YnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgICAgdmVyc2lvbiAyIG9m
IHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisg
ICAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBi
ZSB1c2VmdWwsCisgICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhl
IGltcGxpZWQgd2FycmFudHkgb2YKKyAgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICAgIExpYnJhcnkgR2VuZXJhbCBQ
dWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICAgWW91IHNob3VsZCBoYXZlIHJl
Y2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQor
ICAgIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJ
ZiBub3QsIHdyaXRlIHRvCisgICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwg
NTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAgICBCb3N0b24sIE1BIDAyMTEwLTEz
MDEsIFVTQS4KKyovCisKKyNpbmNsdWRlIDxnbGliLW9iamVjdC5oPgorI2luY2x1ZGUgImNvbmZp
Zy5oIgorCisjaW5jbHVkZSA8d3RmL0dldFB0ci5oPgorI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4K
KyNpbmNsdWRlICJET01PYmplY3RDYWNoZS5oIgorI2luY2x1ZGUgIkV4Y2VwdGlvbkNvZGUuaCIK
KyNpbmNsdWRlICJKU01haW5UaHJlYWRFeGVjU3RhdGUuaCIKKyNpbmNsdWRlICJUZXN0Q3VzdG9t
TmFtZWRHZXR0ZXIuaCIKKyNpbmNsdWRlICJXZWJLaXRET01CaW5kaW5nLmgiCisjaW5jbHVkZSAi
Z29iamVjdC9Db252ZXJ0VG9VVEY4U3RyaW5nLmgiCisjaW5jbHVkZSAid2Via2l0L1dlYktpdERP
TVRlc3RDdXN0b21OYW1lZEdldHRlci5oIgorI2luY2x1ZGUgIndlYmtpdC9XZWJLaXRET01UZXN0
Q3VzdG9tTmFtZWRHZXR0ZXJQcml2YXRlLmgiCisjaW5jbHVkZSAid2Via2l0ZGVmaW5lcy5oIgor
I2luY2x1ZGUgIndlYmtpdGdsb2JhbHNwcml2YXRlLmgiCisjaW5jbHVkZSAid2Via2l0bWFyc2hh
bC5oIgorCituYW1lc3BhY2UgV2ViS2l0IHsKKyAgICAKK1dlYktpdERPTVRlc3RDdXN0b21OYW1l
ZEdldHRlcioga2l0KFdlYkNvcmU6OlRlc3RDdXN0b21OYW1lZEdldHRlciogb2JqKQoreworICAg
IGdfcmV0dXJuX3ZhbF9pZl9mYWlsKG9iaiwgMCk7CisKKyAgICBpZiAoZ3BvaW50ZXIgcmV0ID0g
RE9NT2JqZWN0Q2FjaGU6OmdldChvYmopKQorICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8V2Vi
S2l0RE9NVGVzdEN1c3RvbU5hbWVkR2V0dGVyKj4ocmV0KTsKKworICAgIHJldHVybiBzdGF0aWNf
Y2FzdDxXZWJLaXRET01UZXN0Q3VzdG9tTmFtZWRHZXR0ZXIqPihET01PYmplY3RDYWNoZTo6cHV0
KG9iaiwgV2ViS2l0Ojp3cmFwVGVzdEN1c3RvbU5hbWVkR2V0dGVyKG9iaikpKTsKK30KKyAgICAK
K30gLy8gbmFtZXNwYWNlIFdlYktpdCAvLworCit2b2lkCit3ZWJraXRfZG9tX3Rlc3RfY3VzdG9t
X25hbWVkX2dldHRlcl9hbm90aGVyX2Z1bmN0aW9uKFdlYktpdERPTVRlc3RDdXN0b21OYW1lZEdl
dHRlciogc2VsZiwgY29uc3QgZ2NoYXIqIHN0cikKK3sKKyAgICBnX3JldHVybl9pZl9mYWlsKHNl
bGYpOworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBXZWJD
b3JlOjpUZXN0Q3VzdG9tTmFtZWRHZXR0ZXIgKiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOwor
ICAgIGdfcmV0dXJuX2lmX2ZhaWwoc3RyKTsKKyAgICBXVEY6OlN0cmluZyBjb252ZXJ0ZWRfc3Ry
ID0gV1RGOjpTdHJpbmc6OmZyb21VVEY4KHN0cik7CisgICAgaXRlbS0+YW5vdGhlckZ1bmN0aW9u
KGNvbnZlcnRlZF9zdHIpOworfQorCisKK0dfREVGSU5FX1RZUEUoV2ViS2l0RE9NVGVzdEN1c3Rv
bU5hbWVkR2V0dGVyLCB3ZWJraXRfZG9tX3Rlc3RfY3VzdG9tX25hbWVkX2dldHRlciwgV0VCS0lU
X1RZUEVfRE9NX09CSkVDVCkKKworbmFtZXNwYWNlIFdlYktpdCB7CisKK1dlYkNvcmU6OlRlc3RD
dXN0b21OYW1lZEdldHRlciogY29yZShXZWJLaXRET01UZXN0Q3VzdG9tTmFtZWRHZXR0ZXIqIHJl
cXVlc3QpCit7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwocmVxdWVzdCwgMCk7CisKKyAgICBX
ZWJDb3JlOjpUZXN0Q3VzdG9tTmFtZWRHZXR0ZXIqIGNvcmVPYmplY3QgPSBzdGF0aWNfY2FzdDxX
ZWJDb3JlOjpUZXN0Q3VzdG9tTmFtZWRHZXR0ZXIqPihXRUJLSVRfRE9NX09CSkVDVChyZXF1ZXN0
KS0+Y29yZU9iamVjdCk7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoY29yZU9iamVjdCwgMCk7
CisKKyAgICByZXR1cm4gY29yZU9iamVjdDsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0Citl
bnVtIHsKKyAgICBQUk9QXzAsCit9OworCisKK3N0YXRpYyB2b2lkIHdlYmtpdF9kb21fdGVzdF9j
dXN0b21fbmFtZWRfZ2V0dGVyX2ZpbmFsaXplKEdPYmplY3QqIG9iamVjdCkKK3sKKyAgICBXZWJL
aXRET01PYmplY3QqIGRvbV9vYmplY3QgPSBXRUJLSVRfRE9NX09CSkVDVChvYmplY3QpOworICAg
IAorICAgIGlmIChkb21fb2JqZWN0LT5jb3JlT2JqZWN0KSB7CisgICAgICAgIFdlYkNvcmU6OlRl
c3RDdXN0b21OYW1lZEdldHRlciogY29yZU9iamVjdCA9IHN0YXRpY19jYXN0PFdlYkNvcmU6OlRl
c3RDdXN0b21OYW1lZEdldHRlciAqPihkb21fb2JqZWN0LT5jb3JlT2JqZWN0KTsKKworICAgICAg
ICBXZWJLaXQ6OkRPTU9iamVjdENhY2hlOjpmb3JnZXQoY29yZU9iamVjdCk7CisgICAgICAgIGNv
cmVPYmplY3QtPmRlcmVmKCk7CisKKyAgICAgICAgZG9tX29iamVjdC0+Y29yZU9iamVjdCA9IE5V
TEw7CisgICAgfQorCisgICAgR19PQkpFQ1RfQ0xBU1Mod2Via2l0X2RvbV90ZXN0X2N1c3RvbV9u
YW1lZF9nZXR0ZXJfcGFyZW50X2NsYXNzKS0+ZmluYWxpemUob2JqZWN0KTsKK30KKworc3RhdGlj
IHZvaWQgd2Via2l0X2RvbV90ZXN0X2N1c3RvbV9uYW1lZF9nZXR0ZXJfc2V0X3Byb3BlcnR5KEdP
YmplY3QqIG9iamVjdCwgZ3VpbnQgcHJvcF9pZCwgY29uc3QgR1ZhbHVlKiB2YWx1ZSwgR1BhcmFt
U3BlYyogcHNwZWMpCit7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRl
OworICAgIHN3aXRjaCAocHJvcF9pZCkgeworICAgIGRlZmF1bHQ6CisgICAgICAgIEdfT0JKRUNU
X1dBUk5fSU5WQUxJRF9QUk9QRVJUWV9JRChvYmplY3QsIHByb3BfaWQsIHBzcGVjKTsKKyAgICAg
ICAgYnJlYWs7CisgICAgfQorfQorCisKK3N0YXRpYyB2b2lkIHdlYmtpdF9kb21fdGVzdF9jdXN0
b21fbmFtZWRfZ2V0dGVyX2dldF9wcm9wZXJ0eShHT2JqZWN0KiBvYmplY3QsIGd1aW50IHByb3Bf
aWQsIEdWYWx1ZSogdmFsdWUsIEdQYXJhbVNwZWMqIHBzcGVjKQoreworICAgIFdlYkNvcmU6OkpT
TWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBzd2l0Y2ggKHByb3BfaWQpIHsKKyAgICBk
ZWZhdWx0OgorICAgICAgICBHX09CSkVDVF9XQVJOX0lOVkFMSURfUFJPUEVSVFlfSUQob2JqZWN0
LCBwcm9wX2lkLCBwc3BlYyk7CisgICAgICAgIGJyZWFrOworICAgIH0KK30KKworCitzdGF0aWMg
dm9pZCB3ZWJraXRfZG9tX3Rlc3RfY3VzdG9tX25hbWVkX2dldHRlcl9jb25zdHJ1Y3RlZChHT2Jq
ZWN0KiBvYmplY3QpCit7CisKKyAgICBpZiAoR19PQkpFQ1RfQ0xBU1Mod2Via2l0X2RvbV90ZXN0
X2N1c3RvbV9uYW1lZF9nZXR0ZXJfcGFyZW50X2NsYXNzKS0+Y29uc3RydWN0ZWQpCisgICAgICAg
IEdfT0JKRUNUX0NMQVNTKHdlYmtpdF9kb21fdGVzdF9jdXN0b21fbmFtZWRfZ2V0dGVyX3BhcmVu
dF9jbGFzcyktPmNvbnN0cnVjdGVkKG9iamVjdCk7Cit9CisKK3N0YXRpYyB2b2lkIHdlYmtpdF9k
b21fdGVzdF9jdXN0b21fbmFtZWRfZ2V0dGVyX2NsYXNzX2luaXQoV2ViS2l0RE9NVGVzdEN1c3Rv
bU5hbWVkR2V0dGVyQ2xhc3MqIHJlcXVlc3RDbGFzcykKK3sKKyAgICBHT2JqZWN0Q2xhc3MgKmdv
YmplY3RDbGFzcyA9IEdfT0JKRUNUX0NMQVNTKHJlcXVlc3RDbGFzcyk7CisgICAgZ29iamVjdENs
YXNzLT5maW5hbGl6ZSA9IHdlYmtpdF9kb21fdGVzdF9jdXN0b21fbmFtZWRfZ2V0dGVyX2ZpbmFs
aXplOworICAgIGdvYmplY3RDbGFzcy0+c2V0X3Byb3BlcnR5ID0gd2Via2l0X2RvbV90ZXN0X2N1
c3RvbV9uYW1lZF9nZXR0ZXJfc2V0X3Byb3BlcnR5OworICAgIGdvYmplY3RDbGFzcy0+Z2V0X3By
b3BlcnR5ID0gd2Via2l0X2RvbV90ZXN0X2N1c3RvbV9uYW1lZF9nZXR0ZXJfZ2V0X3Byb3BlcnR5
OworICAgIGdvYmplY3RDbGFzcy0+Y29uc3RydWN0ZWQgPSB3ZWJraXRfZG9tX3Rlc3RfY3VzdG9t
X25hbWVkX2dldHRlcl9jb25zdHJ1Y3RlZDsKKworCisKK30KKworc3RhdGljIHZvaWQgd2Via2l0
X2RvbV90ZXN0X2N1c3RvbV9uYW1lZF9nZXR0ZXJfaW5pdChXZWJLaXRET01UZXN0Q3VzdG9tTmFt
ZWRHZXR0ZXIqIHJlcXVlc3QpCit7Cit9CisKK25hbWVzcGFjZSBXZWJLaXQgeworV2ViS2l0RE9N
VGVzdEN1c3RvbU5hbWVkR2V0dGVyKiB3cmFwVGVzdEN1c3RvbU5hbWVkR2V0dGVyKFdlYkNvcmU6
OlRlc3RDdXN0b21OYW1lZEdldHRlciogY29yZU9iamVjdCkKK3sKKyAgICBnX3JldHVybl92YWxf
aWZfZmFpbChjb3JlT2JqZWN0LCAwKTsKKworICAgIC8qIFdlIGNhbGwgcmVmKCkgcmF0aGVyIHRo
YW4gdXNpbmcgYSBDKysgc21hcnQgcG9pbnRlciBiZWNhdXNlIHdlIGNhbid0IHN0b3JlIGEgQysr
IG9iamVjdAorICAgICAqIGluIGEgQy1hbGxvY2F0ZWQgR09iamVjdCBzdHJ1Y3R1cmUuICBTZWUg
dGhlIGZpbmFsaXplKCkgY29kZSBmb3IgdGhlCisgICAgICogbWF0Y2hpbmcgZGVyZWYoKS4KKyAg
ICAgKi8KKyAgICBjb3JlT2JqZWN0LT5yZWYoKTsKKworICAgIHJldHVybiAgV0VCS0lUX0RPTV9U
RVNUX0NVU1RPTV9OQU1FRF9HRVRURVIoZ19vYmplY3RfbmV3KFdFQktJVF9UWVBFX0RPTV9URVNU
X0NVU1RPTV9OQU1FRF9HRVRURVIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICJjb3JlLW9iamVjdCIsIGNvcmVPYmplY3QsIE5VTEwpKTsKK30KK30gLy8g
bmFtZXNwYWNlIFdlYktpdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2Ny
aXB0cy90ZXN0L0dPYmplY3QvV2ViS2l0RE9NVGVzdEN1c3RvbU5hbWVkR2V0dGVyLmggYi9Tb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvR09iamVjdC9XZWJLaXRET01UZXN0Q3Vz
dG9tTmFtZWRHZXR0ZXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi45NTZhMjU0YWEzY2NlNjY3NmQwNjM2MDYzMWJk
OGQ5OWJhNzBjZjUwCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
c2NyaXB0cy90ZXN0L0dPYmplY3QvV2ViS2l0RE9NVGVzdEN1c3RvbU5hbWVkR2V0dGVyLmgKQEAg
LTAsMCArMSw2MiBAQAorLyoKKyAgICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgV2ViS2l0IG9w
ZW4gc291cmNlIHByb2plY3QuCisgICAgVGhpcyBmaWxlIGhhcyBiZWVuIGdlbmVyYXRlZCBieSBn
ZW5lcmF0ZS1iaW5kaW5ncy5wbC4gRE8gTk9UIE1PRElGWSEKKworICAgIFRoaXMgbGlicmFyeSBp
cyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAgICBtb2Rp
ZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwor
ICAgIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247
IGVpdGhlcgorICAgIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9u
KSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAgIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBp
biB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgIGJ1dCBXSVRIT1VUIEFOWSBX
QVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICAgTUVSQ0hB
TlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBH
TlUKKyAgICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4K
KworICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5
IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAgICBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2Vl
IHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICAgIHRoZSBGcmVlIFNv
ZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3Is
CisgICAgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisqLworCisjaWZuZGVmIFdlYktpdERP
TVRlc3RDdXN0b21OYW1lZEdldHRlcl9oCisjZGVmaW5lIFdlYktpdERPTVRlc3RDdXN0b21OYW1l
ZEdldHRlcl9oCisKKyNpbmNsdWRlICJ3ZWJraXQvd2Via2l0ZG9tZGVmaW5lcy5oIgorI2luY2x1
ZGUgPGdsaWItb2JqZWN0Lmg+CisjaW5jbHVkZSA8d2Via2l0L3dlYmtpdGRlZmluZXMuaD4KKyNp
bmNsdWRlICJ3ZWJraXQvV2ViS2l0RE9NT2JqZWN0LmgiCisKKworR19CRUdJTl9ERUNMUworI2Rl
ZmluZSBXRUJLSVRfVFlQRV9ET01fVEVTVF9DVVNUT01fTkFNRURfR0VUVEVSICAgICAgICAgICAg
KHdlYmtpdF9kb21fdGVzdF9jdXN0b21fbmFtZWRfZ2V0dGVyX2dldF90eXBlKCkpCisjZGVmaW5l
IFdFQktJVF9ET01fVEVTVF9DVVNUT01fTkFNRURfR0VUVEVSKG9iaikgICAgICAgICAgICAoR19U
WVBFX0NIRUNLX0lOU1RBTkNFX0NBU1QoKG9iaiksIFdFQktJVF9UWVBFX0RPTV9URVNUX0NVU1RP
TV9OQU1FRF9HRVRURVIsIFdlYktpdERPTVRlc3RDdXN0b21OYW1lZEdldHRlcikpCisjZGVmaW5l
IFdFQktJVF9ET01fVEVTVF9DVVNUT01fTkFNRURfR0VUVEVSX0NMQVNTKGtsYXNzKSAgICAoR19U
WVBFX0NIRUNLX0NMQVNTX0NBU1QoKGtsYXNzKSwgIFdFQktJVF9UWVBFX0RPTV9URVNUX0NVU1RP
TV9OQU1FRF9HRVRURVIsIFdlYktpdERPTVRlc3RDdXN0b21OYW1lZEdldHRlckNsYXNzKQorI2Rl
ZmluZSBXRUJLSVRfRE9NX0lTX1RFU1RfQ1VTVE9NX05BTUVEX0dFVFRFUihvYmopICAgICAgICAg
KEdfVFlQRV9DSEVDS19JTlNUQU5DRV9UWVBFKChvYmopLCBXRUJLSVRfVFlQRV9ET01fVEVTVF9D
VVNUT01fTkFNRURfR0VUVEVSKSkKKyNkZWZpbmUgV0VCS0lUX0RPTV9JU19URVNUX0NVU1RPTV9O
QU1FRF9HRVRURVJfQ0xBU1Moa2xhc3MpIChHX1RZUEVfQ0hFQ0tfQ0xBU1NfVFlQRSgoa2xhc3Mp
LCAgV0VCS0lUX1RZUEVfRE9NX1RFU1RfQ1VTVE9NX05BTUVEX0dFVFRFUikpCisjZGVmaW5lIFdF
QktJVF9ET01fVEVTVF9DVVNUT01fTkFNRURfR0VUVEVSX0dFVF9DTEFTUyhvYmopICAoR19UWVBF
X0lOU1RBTkNFX0dFVF9DTEFTUygob2JqKSwgIFdFQktJVF9UWVBFX0RPTV9URVNUX0NVU1RPTV9O
QU1FRF9HRVRURVIsIFdlYktpdERPTVRlc3RDdXN0b21OYW1lZEdldHRlckNsYXNzKSkKKworc3Ry
dWN0IF9XZWJLaXRET01UZXN0Q3VzdG9tTmFtZWRHZXR0ZXIgeworICAgIFdlYktpdERPTU9iamVj
dCBwYXJlbnRfaW5zdGFuY2U7Cit9OworCitzdHJ1Y3QgX1dlYktpdERPTVRlc3RDdXN0b21OYW1l
ZEdldHRlckNsYXNzIHsKKyAgICBXZWJLaXRET01PYmplY3RDbGFzcyBwYXJlbnRfY2xhc3M7Cit9
OworCitXRUJLSVRfQVBJIEdUeXBlCit3ZWJraXRfZG9tX3Rlc3RfY3VzdG9tX25hbWVkX2dldHRl
cl9nZXRfdHlwZSAodm9pZCk7CisKKy8qKgorICogd2Via2l0X2RvbV90ZXN0X2N1c3RvbV9uYW1l
ZF9nZXR0ZXJfYW5vdGhlcl9mdW5jdGlvbjoKKyAqIEBzZWxmOiBBICNXZWJLaXRET01UZXN0Q3Vz
dG9tTmFtZWRHZXR0ZXIKKyAqIEBzdHI6IEEgI2djaGFyCisgKgorICogUmV0dXJuczoKKyAqCisq
Ki8KK1dFQktJVF9BUEkgdm9pZAord2Via2l0X2RvbV90ZXN0X2N1c3RvbV9uYW1lZF9nZXR0ZXJf
YW5vdGhlcl9mdW5jdGlvbihXZWJLaXRET01UZXN0Q3VzdG9tTmFtZWRHZXR0ZXIqIHNlbGYsIGNv
bnN0IGdjaGFyKiBzdHIpOworCitHX0VORF9ERUNMUworCisjZW5kaWYgLyogV2ViS2l0RE9NVGVz
dEN1c3RvbU5hbWVkR2V0dGVyX2ggKi8KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL3NjcmlwdHMvdGVzdC9HT2JqZWN0L1dlYktpdERPTVRlc3RDdXN0b21OYW1lZEdldHRlclBy
aXZhdGUuaCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9HT2JqZWN0L1dl
YktpdERPTVRlc3RDdXN0b21OYW1lZEdldHRlclByaXZhdGUuaApuZXcgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5mZWRkMTRh
ZmMxMjJhZDcwMDYwZmQ0ZTBmNzI0ZWY0NWUxMTVhYWRhCi0tLSAvZGV2L251bGwKKysrIGIvU291
cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0dPYmplY3QvV2ViS2l0RE9NVGVzdEN1
c3RvbU5hbWVkR2V0dGVyUHJpdmF0ZS5oCkBAIC0wLDAgKzEsMzkgQEAKKy8qCisgICAgVGhpcyBm
aWxlIGlzIHBhcnQgb2YgdGhlIFdlYktpdCBvcGVuIHNvdXJjZSBwcm9qZWN0LgorICAgIFRoaXMg
ZmlsZSBoYXMgYmVlbiBnZW5lcmF0ZWQgYnkgZ2VuZXJhdGUtYmluZGluZ3MucGwuIERPIE5PVCBN
T0RJRlkhCisKKyAgICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRp
c3RyaWJ1dGUgaXQgYW5kL29yCisgICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUg
R05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAgICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0
aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAgICB2ZXJzaW9uIDIgb2YgdGhl
IExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgICBU
aGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVz
ZWZ1bCwKKyAgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1w
bGllZCB3YXJyYW50eSBvZgorICAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgICAgTGlicmFyeSBHZW5lcmFsIFB1Ymxp
YyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2
ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgICAg
YWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5v
dCwgd3JpdGUgdG8KKyAgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBG
cmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICAgIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwg
VVNBLgorKi8KKworI2lmbmRlZiBXRUJfS0lUX0RPTV9URVNUX0NVU1RPTV9OQU1FRF9HRVRURVJf
UFJJVkFURV9ICisjZGVmaW5lIFdFQl9LSVRfRE9NX1RFU1RfQ1VTVE9NX05BTUVEX0dFVFRFUl9Q
UklWQVRFX0gKKworI2luY2x1ZGUgPGdsaWItb2JqZWN0Lmg+CisjaW5jbHVkZSA8d2Via2l0L1dl
YktpdERPTU9iamVjdC5oPgorI2luY2x1ZGUgIlRlc3RDdXN0b21OYW1lZEdldHRlci5oIgorbmFt
ZXNwYWNlIFdlYktpdCB7CisgICAgV2ViS2l0RE9NVGVzdEN1c3RvbU5hbWVkR2V0dGVyICoKKyAg
ICB3cmFwVGVzdEN1c3RvbU5hbWVkR2V0dGVyKFdlYkNvcmU6OlRlc3RDdXN0b21OYW1lZEdldHRl
ciAqY29yZU9iamVjdCk7CisKKyAgICBXZWJDb3JlOjpUZXN0Q3VzdG9tTmFtZWRHZXR0ZXIgKgor
ICAgIGNvcmUoV2ViS2l0RE9NVGVzdEN1c3RvbU5hbWVkR2V0dGVyICpyZXF1ZXN0KTsKKworICAg
IFdlYktpdERPTVRlc3RDdXN0b21OYW1lZEdldHRlcioKKyAgICBraXQoV2ViQ29yZTo6VGVzdEN1
c3RvbU5hbWVkR2V0dGVyKiBub2RlKTsKKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CisKKyNlbmRp
ZiAvKiBXRUJfS0lUX0RPTV9URVNUX0NVU1RPTV9OQU1FRF9HRVRURVJfUFJJVkFURV9IICovCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvR09iamVjdC9X
ZWJLaXRET01UZXN0T3ZlcnJpZGluZ05hbWVHZXR0ZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3Mvc2NyaXB0cy90ZXN0L0dPYmplY3QvV2ViS2l0RE9NVGVzdE92ZXJyaWRpbmdOYW1lR2V0
dGVyLmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMmY3NmFlMWJiZGIzMGQxZDgw
NDNhNmRkNmZmMGM1Mjc3MmIzNzc4OS4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvR09iamVj
dC9XZWJLaXRET01UZXN0T3ZlcnJpZGluZ05hbWVHZXR0ZXIuY3BwCisrKyAvZGV2L251bGwKQEAg
LTEsMTU5ICswLDAgQEAKLS8qCi0gICAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIFdlYktpdCBv
cGVuIHNvdXJjZSBwcm9qZWN0LgotICAgIFRoaXMgZmlsZSBoYXMgYmVlbiBnZW5lcmF0ZWQgYnkg
Z2VuZXJhdGUtYmluZGluZ3MucGwuIERPIE5PVCBNT0RJRlkhCi0KLSAgICBUaGlzIGxpYnJhcnkg
aXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gICAgbW9k
aWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMK
LSAgICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9u
OyBlaXRoZXIKLSAgICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlv
bikgYW55IGxhdGVyIHZlcnNpb24uCi0KLSAgICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQg
aW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAgICBidXQgV0lUSE9VVCBBTlkg
V0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICAgIE1FUkNI
QU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUg
R05VCi0gICAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMu
Ci0KLSAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFy
eSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gICAgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNl
ZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KLSAgICB0aGUgRnJlZSBT
b2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29y
LAotICAgIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotKi8KLQotI2luY2x1ZGUgPGdsaWIt
b2JqZWN0Lmg+Ci0jaW5jbHVkZSAiY29uZmlnLmgiCi0KLSNpbmNsdWRlIDx3dGYvR2V0UHRyLmg+
Ci0jaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgotI2luY2x1ZGUgIkRPTU9iamVjdENhY2hlLmgiCi0j
aW5jbHVkZSAiRXhjZXB0aW9uQ29kZS5oIgotI2luY2x1ZGUgIkpTTWFpblRocmVhZEV4ZWNTdGF0
ZS5oIgotI2luY2x1ZGUgIlRlc3RPdmVycmlkaW5nTmFtZUdldHRlci5oIgotI2luY2x1ZGUgIldl
YktpdERPTUJpbmRpbmcuaCIKLSNpbmNsdWRlICJnb2JqZWN0L0NvbnZlcnRUb1VURjhTdHJpbmcu
aCIKLSNpbmNsdWRlICJ3ZWJraXQvV2ViS2l0RE9NVGVzdE92ZXJyaWRpbmdOYW1lR2V0dGVyLmgi
Ci0jaW5jbHVkZSAid2Via2l0L1dlYktpdERPTVRlc3RPdmVycmlkaW5nTmFtZUdldHRlclByaXZh
dGUuaCIKLSNpbmNsdWRlICJ3ZWJraXRkZWZpbmVzLmgiCi0jaW5jbHVkZSAid2Via2l0Z2xvYmFs
c3ByaXZhdGUuaCIKLSNpbmNsdWRlICJ3ZWJraXRtYXJzaGFsLmgiCi0KLW5hbWVzcGFjZSBXZWJL
aXQgewotICAgIAotV2ViS2l0RE9NVGVzdE92ZXJyaWRpbmdOYW1lR2V0dGVyKiBraXQoV2ViQ29y
ZTo6VGVzdE92ZXJyaWRpbmdOYW1lR2V0dGVyKiBvYmopCi17Ci0gICAgZ19yZXR1cm5fdmFsX2lm
X2ZhaWwob2JqLCAwKTsKLQotICAgIGlmIChncG9pbnRlciByZXQgPSBET01PYmplY3RDYWNoZTo6
Z2V0KG9iaikpCi0gICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxXZWJLaXRET01UZXN0T3ZlcnJp
ZGluZ05hbWVHZXR0ZXIqPihyZXQpOwotCi0gICAgcmV0dXJuIHN0YXRpY19jYXN0PFdlYktpdERP
TVRlc3RPdmVycmlkaW5nTmFtZUdldHRlcio+KERPTU9iamVjdENhY2hlOjpwdXQob2JqLCBXZWJL
aXQ6OndyYXBUZXN0T3ZlcnJpZGluZ05hbWVHZXR0ZXIob2JqKSkpOwotfQotICAgIAotfSAvLyBu
YW1lc3BhY2UgV2ViS2l0IC8vCi0KLXZvaWQKLXdlYmtpdF9kb21fdGVzdF9vdmVycmlkaW5nX25h
bWVfZ2V0dGVyX2Fub3RoZXJfZnVuY3Rpb24oV2ViS2l0RE9NVGVzdE92ZXJyaWRpbmdOYW1lR2V0
dGVyKiBzZWxmLCBjb25zdCBnY2hhciogc3RyKQotewotICAgIGdfcmV0dXJuX2lmX2ZhaWwoc2Vs
Zik7Ci0gICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOwotICAgIFdlYkNv
cmU6OlRlc3RPdmVycmlkaW5nTmFtZUdldHRlciAqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7
Ci0gICAgZ19yZXR1cm5faWZfZmFpbChzdHIpOwotICAgIFdURjo6U3RyaW5nIGNvbnZlcnRlZF9z
dHIgPSBXVEY6OlN0cmluZzo6ZnJvbVVURjgoc3RyKTsKLSAgICBpdGVtLT5hbm90aGVyRnVuY3Rp
b24oY29udmVydGVkX3N0cik7Ci19Ci0KLQotR19ERUZJTkVfVFlQRShXZWJLaXRET01UZXN0T3Zl
cnJpZGluZ05hbWVHZXR0ZXIsIHdlYmtpdF9kb21fdGVzdF9vdmVycmlkaW5nX25hbWVfZ2V0dGVy
LCBXRUJLSVRfVFlQRV9ET01fT0JKRUNUKQotCi1uYW1lc3BhY2UgV2ViS2l0IHsKLQotV2ViQ29y
ZTo6VGVzdE92ZXJyaWRpbmdOYW1lR2V0dGVyKiBjb3JlKFdlYktpdERPTVRlc3RPdmVycmlkaW5n
TmFtZUdldHRlciogcmVxdWVzdCkKLXsKLSAgICBnX3JldHVybl92YWxfaWZfZmFpbChyZXF1ZXN0
LCAwKTsKLQotICAgIFdlYkNvcmU6OlRlc3RPdmVycmlkaW5nTmFtZUdldHRlciogY29yZU9iamVj
dCA9IHN0YXRpY19jYXN0PFdlYkNvcmU6OlRlc3RPdmVycmlkaW5nTmFtZUdldHRlcio+KFdFQktJ
VF9ET01fT0JKRUNUKHJlcXVlc3QpLT5jb3JlT2JqZWN0KTsKLSAgICBnX3JldHVybl92YWxfaWZf
ZmFpbChjb3JlT2JqZWN0LCAwKTsKLQotICAgIHJldHVybiBjb3JlT2JqZWN0OwotfQotCi19IC8v
IG5hbWVzcGFjZSBXZWJLaXQKLWVudW0gewotICAgIFBST1BfMCwKLX07Ci0KLQotc3RhdGljIHZv
aWQgd2Via2l0X2RvbV90ZXN0X292ZXJyaWRpbmdfbmFtZV9nZXR0ZXJfZmluYWxpemUoR09iamVj
dCogb2JqZWN0KQotewotICAgIFdlYktpdERPTU9iamVjdCogZG9tX29iamVjdCA9IFdFQktJVF9E
T01fT0JKRUNUKG9iamVjdCk7Ci0gICAgCi0gICAgaWYgKGRvbV9vYmplY3QtPmNvcmVPYmplY3Qp
IHsKLSAgICAgICAgV2ViQ29yZTo6VGVzdE92ZXJyaWRpbmdOYW1lR2V0dGVyKiBjb3JlT2JqZWN0
ID0gc3RhdGljX2Nhc3Q8V2ViQ29yZTo6VGVzdE92ZXJyaWRpbmdOYW1lR2V0dGVyICo+KGRvbV9v
YmplY3QtPmNvcmVPYmplY3QpOwotCi0gICAgICAgIFdlYktpdDo6RE9NT2JqZWN0Q2FjaGU6OmZv
cmdldChjb3JlT2JqZWN0KTsKLSAgICAgICAgY29yZU9iamVjdC0+ZGVyZWYoKTsKLQotICAgICAg
ICBkb21fb2JqZWN0LT5jb3JlT2JqZWN0ID0gTlVMTDsKLSAgICB9Ci0KLSAgICBHX09CSkVDVF9D
TEFTUyh3ZWJraXRfZG9tX3Rlc3Rfb3ZlcnJpZGluZ19uYW1lX2dldHRlcl9wYXJlbnRfY2xhc3Mp
LT5maW5hbGl6ZShvYmplY3QpOwotfQotCi1zdGF0aWMgdm9pZCB3ZWJraXRfZG9tX3Rlc3Rfb3Zl
cnJpZGluZ19uYW1lX2dldHRlcl9zZXRfcHJvcGVydHkoR09iamVjdCogb2JqZWN0LCBndWludCBw
cm9wX2lkLCBjb25zdCBHVmFsdWUqIHZhbHVlLCBHUGFyYW1TcGVjKiBwc3BlYykKLXsKLSAgICBX
ZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7Ci0gICAgc3dpdGNoIChwcm9wX2lk
KSB7Ci0gICAgZGVmYXVsdDoKLSAgICAgICAgR19PQkpFQ1RfV0FSTl9JTlZBTElEX1BST1BFUlRZ
X0lEKG9iamVjdCwgcHJvcF9pZCwgcHNwZWMpOwotICAgICAgICBicmVhazsKLSAgICB9Ci19Ci0K
LQotc3RhdGljIHZvaWQgd2Via2l0X2RvbV90ZXN0X292ZXJyaWRpbmdfbmFtZV9nZXR0ZXJfZ2V0
X3Byb3BlcnR5KEdPYmplY3QqIG9iamVjdCwgZ3VpbnQgcHJvcF9pZCwgR1ZhbHVlKiB2YWx1ZSwg
R1BhcmFtU3BlYyogcHNwZWMpCi17Ci0gICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRl
IHN0YXRlOwotICAgIHN3aXRjaCAocHJvcF9pZCkgewotICAgIGRlZmF1bHQ6Ci0gICAgICAgIEdf
T0JKRUNUX1dBUk5fSU5WQUxJRF9QUk9QRVJUWV9JRChvYmplY3QsIHByb3BfaWQsIHBzcGVjKTsK
LSAgICAgICAgYnJlYWs7Ci0gICAgfQotfQotCi0KLXN0YXRpYyB2b2lkIHdlYmtpdF9kb21fdGVz
dF9vdmVycmlkaW5nX25hbWVfZ2V0dGVyX2NvbnN0cnVjdGVkKEdPYmplY3QqIG9iamVjdCkKLXsK
LQotICAgIGlmIChHX09CSkVDVF9DTEFTUyh3ZWJraXRfZG9tX3Rlc3Rfb3ZlcnJpZGluZ19uYW1l
X2dldHRlcl9wYXJlbnRfY2xhc3MpLT5jb25zdHJ1Y3RlZCkKLSAgICAgICAgR19PQkpFQ1RfQ0xB
U1Mod2Via2l0X2RvbV90ZXN0X292ZXJyaWRpbmdfbmFtZV9nZXR0ZXJfcGFyZW50X2NsYXNzKS0+
Y29uc3RydWN0ZWQob2JqZWN0KTsKLX0KLQotc3RhdGljIHZvaWQgd2Via2l0X2RvbV90ZXN0X292
ZXJyaWRpbmdfbmFtZV9nZXR0ZXJfY2xhc3NfaW5pdChXZWJLaXRET01UZXN0T3ZlcnJpZGluZ05h
bWVHZXR0ZXJDbGFzcyogcmVxdWVzdENsYXNzKQotewotICAgIEdPYmplY3RDbGFzcyAqZ29iamVj
dENsYXNzID0gR19PQkpFQ1RfQ0xBU1MocmVxdWVzdENsYXNzKTsKLSAgICBnb2JqZWN0Q2xhc3Mt
PmZpbmFsaXplID0gd2Via2l0X2RvbV90ZXN0X292ZXJyaWRpbmdfbmFtZV9nZXR0ZXJfZmluYWxp
emU7Ci0gICAgZ29iamVjdENsYXNzLT5zZXRfcHJvcGVydHkgPSB3ZWJraXRfZG9tX3Rlc3Rfb3Zl
cnJpZGluZ19uYW1lX2dldHRlcl9zZXRfcHJvcGVydHk7Ci0gICAgZ29iamVjdENsYXNzLT5nZXRf
cHJvcGVydHkgPSB3ZWJraXRfZG9tX3Rlc3Rfb3ZlcnJpZGluZ19uYW1lX2dldHRlcl9nZXRfcHJv
cGVydHk7Ci0gICAgZ29iamVjdENsYXNzLT5jb25zdHJ1Y3RlZCA9IHdlYmtpdF9kb21fdGVzdF9v
dmVycmlkaW5nX25hbWVfZ2V0dGVyX2NvbnN0cnVjdGVkOwotCi0KLQotfQotCi1zdGF0aWMgdm9p
ZCB3ZWJraXRfZG9tX3Rlc3Rfb3ZlcnJpZGluZ19uYW1lX2dldHRlcl9pbml0KFdlYktpdERPTVRl
c3RPdmVycmlkaW5nTmFtZUdldHRlciogcmVxdWVzdCkKLXsKLX0KLQotbmFtZXNwYWNlIFdlYktp
dCB7Ci1XZWJLaXRET01UZXN0T3ZlcnJpZGluZ05hbWVHZXR0ZXIqIHdyYXBUZXN0T3ZlcnJpZGlu
Z05hbWVHZXR0ZXIoV2ViQ29yZTo6VGVzdE92ZXJyaWRpbmdOYW1lR2V0dGVyKiBjb3JlT2JqZWN0
KQotewotICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKGNvcmVPYmplY3QsIDApOwotCi0gICAgLyog
V2UgY2FsbCByZWYoKSByYXRoZXIgdGhhbiB1c2luZyBhIEMrKyBzbWFydCBwb2ludGVyIGJlY2F1
c2Ugd2UgY2FuJ3Qgc3RvcmUgYSBDKysgb2JqZWN0Ci0gICAgICogaW4gYSBDLWFsbG9jYXRlZCBH
T2JqZWN0IHN0cnVjdHVyZS4gIFNlZSB0aGUgZmluYWxpemUoKSBjb2RlIGZvciB0aGUKLSAgICAg
KiBtYXRjaGluZyBkZXJlZigpLgotICAgICAqLwotICAgIGNvcmVPYmplY3QtPnJlZigpOwotCi0g
ICAgcmV0dXJuICBXRUJLSVRfRE9NX1RFU1RfT1ZFUlJJRElOR19OQU1FX0dFVFRFUihnX29iamVj
dF9uZXcoV0VCS0lUX1RZUEVfRE9NX1RFU1RfT1ZFUlJJRElOR19OQU1FX0dFVFRFUiwKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImNvcmUtb2JqZWN0Iiwg
Y29yZU9iamVjdCwgTlVMTCkpOwotfQotfSAvLyBuYW1lc3BhY2UgV2ViS2l0CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvR09iamVjdC9XZWJLaXRET01U
ZXN0T3ZlcnJpZGluZ05hbWVHZXR0ZXIuaCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Njcmlw
dHMvdGVzdC9HT2JqZWN0L1dlYktpdERPTVRlc3RPdmVycmlkaW5nTmFtZUdldHRlci5oCmRlbGV0
ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3NDM0MzJhNWQ3MTU5ZWEyNzJhNGI5NWU0YTliNWQ0
NmY1ZTBiZjlhLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBh
L1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9HT2JqZWN0L1dlYktpdERPTVRl
c3RPdmVycmlkaW5nTmFtZUdldHRlci5oCisrKyAvZGV2L251bGwKQEAgLTEsNjIgKzAsMCBAQAot
LyoKLSAgICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgV2ViS2l0IG9wZW4gc291cmNlIHByb2pl
Y3QuCi0gICAgVGhpcyBmaWxlIGhhcyBiZWVuIGdlbmVyYXRlZCBieSBnZW5lcmF0ZS1iaW5kaW5n
cy5wbC4gRE8gTk9UIE1PRElGWSEKLQotICAgIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJl
OyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAgICBtb2RpZnkgaXQgdW5kZXIgdGhl
IHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICAgIExpY2Vuc2UgYXMg
cHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICAgIHZl
cnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVy
c2lvbi4KLQotICAgIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0
IGl0IHdpbGwgYmUgdXNlZnVsLAotICAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91
dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAgICBMaWJyYXJ5
IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLQotICAgIFlvdSBzaG91
bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGlj
IExpY2Vuc2UKLSAgICBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJ
TkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bwotICAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRp
b24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCi0gICAgQm9zdG9uLCBN
QSAwMjExMC0xMzAxLCBVU0EuCi0qLwotCi0jaWZuZGVmIFdlYktpdERPTVRlc3RPdmVycmlkaW5n
TmFtZUdldHRlcl9oCi0jZGVmaW5lIFdlYktpdERPTVRlc3RPdmVycmlkaW5nTmFtZUdldHRlcl9o
Ci0KLSNpbmNsdWRlICJ3ZWJraXQvd2Via2l0ZG9tZGVmaW5lcy5oIgotI2luY2x1ZGUgPGdsaWIt
b2JqZWN0Lmg+Ci0jaW5jbHVkZSA8d2Via2l0L3dlYmtpdGRlZmluZXMuaD4KLSNpbmNsdWRlICJ3
ZWJraXQvV2ViS2l0RE9NT2JqZWN0LmgiCi0KLQotR19CRUdJTl9ERUNMUwotI2RlZmluZSBXRUJL
SVRfVFlQRV9ET01fVEVTVF9PVkVSUklESU5HX05BTUVfR0VUVEVSICAgICAgICAgICAgKHdlYmtp
dF9kb21fdGVzdF9vdmVycmlkaW5nX25hbWVfZ2V0dGVyX2dldF90eXBlKCkpCi0jZGVmaW5lIFdF
QktJVF9ET01fVEVTVF9PVkVSUklESU5HX05BTUVfR0VUVEVSKG9iaikgICAgICAgICAgICAoR19U
WVBFX0NIRUNLX0lOU1RBTkNFX0NBU1QoKG9iaiksIFdFQktJVF9UWVBFX0RPTV9URVNUX09WRVJS
SURJTkdfTkFNRV9HRVRURVIsIFdlYktpdERPTVRlc3RPdmVycmlkaW5nTmFtZUdldHRlcikpCi0j
ZGVmaW5lIFdFQktJVF9ET01fVEVTVF9PVkVSUklESU5HX05BTUVfR0VUVEVSX0NMQVNTKGtsYXNz
KSAgICAoR19UWVBFX0NIRUNLX0NMQVNTX0NBU1QoKGtsYXNzKSwgIFdFQktJVF9UWVBFX0RPTV9U
RVNUX09WRVJSSURJTkdfTkFNRV9HRVRURVIsIFdlYktpdERPTVRlc3RPdmVycmlkaW5nTmFtZUdl
dHRlckNsYXNzKQotI2RlZmluZSBXRUJLSVRfRE9NX0lTX1RFU1RfT1ZFUlJJRElOR19OQU1FX0dF
VFRFUihvYmopICAgICAgICAgKEdfVFlQRV9DSEVDS19JTlNUQU5DRV9UWVBFKChvYmopLCBXRUJL
SVRfVFlQRV9ET01fVEVTVF9PVkVSUklESU5HX05BTUVfR0VUVEVSKSkKLSNkZWZpbmUgV0VCS0lU
X0RPTV9JU19URVNUX09WRVJSSURJTkdfTkFNRV9HRVRURVJfQ0xBU1Moa2xhc3MpIChHX1RZUEVf
Q0hFQ0tfQ0xBU1NfVFlQRSgoa2xhc3MpLCAgV0VCS0lUX1RZUEVfRE9NX1RFU1RfT1ZFUlJJRElO
R19OQU1FX0dFVFRFUikpCi0jZGVmaW5lIFdFQktJVF9ET01fVEVTVF9PVkVSUklESU5HX05BTUVf
R0VUVEVSX0dFVF9DTEFTUyhvYmopICAoR19UWVBFX0lOU1RBTkNFX0dFVF9DTEFTUygob2JqKSwg
IFdFQktJVF9UWVBFX0RPTV9URVNUX09WRVJSSURJTkdfTkFNRV9HRVRURVIsIFdlYktpdERPTVRl
c3RPdmVycmlkaW5nTmFtZUdldHRlckNsYXNzKSkKLQotc3RydWN0IF9XZWJLaXRET01UZXN0T3Zl
cnJpZGluZ05hbWVHZXR0ZXIgewotICAgIFdlYktpdERPTU9iamVjdCBwYXJlbnRfaW5zdGFuY2U7
Ci19OwotCi1zdHJ1Y3QgX1dlYktpdERPTVRlc3RPdmVycmlkaW5nTmFtZUdldHRlckNsYXNzIHsK
LSAgICBXZWJLaXRET01PYmplY3RDbGFzcyBwYXJlbnRfY2xhc3M7Ci19OwotCi1XRUJLSVRfQVBJ
IEdUeXBlCi13ZWJraXRfZG9tX3Rlc3Rfb3ZlcnJpZGluZ19uYW1lX2dldHRlcl9nZXRfdHlwZSAo
dm9pZCk7Ci0KLS8qKgotICogd2Via2l0X2RvbV90ZXN0X292ZXJyaWRpbmdfbmFtZV9nZXR0ZXJf
YW5vdGhlcl9mdW5jdGlvbjoKLSAqIEBzZWxmOiBBICNXZWJLaXRET01UZXN0T3ZlcnJpZGluZ05h
bWVHZXR0ZXIKLSAqIEBzdHI6IEEgI2djaGFyCi0gKgotICogUmV0dXJuczoKLSAqCi0qKi8KLVdF
QktJVF9BUEkgdm9pZAotd2Via2l0X2RvbV90ZXN0X292ZXJyaWRpbmdfbmFtZV9nZXR0ZXJfYW5v
dGhlcl9mdW5jdGlvbihXZWJLaXRET01UZXN0T3ZlcnJpZGluZ05hbWVHZXR0ZXIqIHNlbGYsIGNv
bnN0IGdjaGFyKiBzdHIpOwotCi1HX0VORF9ERUNMUwotCi0jZW5kaWYgLyogV2ViS2l0RE9NVGVz
dE92ZXJyaWRpbmdOYW1lR2V0dGVyX2ggKi8KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL3NjcmlwdHMvdGVzdC9HT2JqZWN0L1dlYktpdERPTVRlc3RPdmVycmlkaW5nTmFtZUdl
dHRlclByaXZhdGUuaCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9HT2Jq
ZWN0L1dlYktpdERPTVRlc3RPdmVycmlkaW5nTmFtZUdldHRlclByaXZhdGUuaApkZWxldGVkIGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMTc0ZTNjNjcwNjczMjgwNmQwNDBjMDhmZTU2MDY4YzNjMjM3
MDJjMy4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvR09iamVjdC9XZWJLaXRET01UZXN0T3Zl
cnJpZGluZ05hbWVHZXR0ZXJQcml2YXRlLmgKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBA
Ci0vKgotICAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBXZWJLaXQgb3BlbiBzb3VyY2UgcHJv
amVjdC4KLSAgICBUaGlzIGZpbGUgaGFzIGJlZW4gZ2VuZXJhdGVkIGJ5IGdlbmVyYXRlLWJpbmRp
bmdzLnBsLiBETyBOT1QgTU9ESUZZIQotCi0gICAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdh
cmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICAgIG1vZGlmeSBpdCB1bmRlciB0
aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gICAgTGljZW5zZSBh
cyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gICAg
dmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2
ZXJzaW9uLgotCi0gICAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRo
YXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRo
b3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAgICBNRVJDSEFOVEFCSUxJVFkgb3Ig
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICAgIExpYnJh
cnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotCi0gICAgWW91IHNo
b3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJs
aWMgTGljZW5zZQotICAgIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09Q
WUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCi0gICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRh
dGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKLSAgICBCb3N0b24s
IE1BIDAyMTEwLTEzMDEsIFVTQS4KLSovCi0KLSNpZm5kZWYgV0VCX0tJVF9ET01fVEVTVF9PVkVS
UklESU5HX05BTUVfR0VUVEVSX1BSSVZBVEVfSAotI2RlZmluZSBXRUJfS0lUX0RPTV9URVNUX09W
RVJSSURJTkdfTkFNRV9HRVRURVJfUFJJVkFURV9ICi0KLSNpbmNsdWRlIDxnbGliLW9iamVjdC5o
PgotI2luY2x1ZGUgPHdlYmtpdC9XZWJLaXRET01PYmplY3QuaD4KLSNpbmNsdWRlICJUZXN0T3Zl
cnJpZGluZ05hbWVHZXR0ZXIuaCIKLW5hbWVzcGFjZSBXZWJLaXQgewotICAgIFdlYktpdERPTVRl
c3RPdmVycmlkaW5nTmFtZUdldHRlciAqCi0gICAgd3JhcFRlc3RPdmVycmlkaW5nTmFtZUdldHRl
cihXZWJDb3JlOjpUZXN0T3ZlcnJpZGluZ05hbWVHZXR0ZXIgKmNvcmVPYmplY3QpOwotCi0gICAg
V2ViQ29yZTo6VGVzdE92ZXJyaWRpbmdOYW1lR2V0dGVyICoKLSAgICBjb3JlKFdlYktpdERPTVRl
c3RPdmVycmlkaW5nTmFtZUdldHRlciAqcmVxdWVzdCk7Ci0KLSAgICBXZWJLaXRET01UZXN0T3Zl
cnJpZGluZ05hbWVHZXR0ZXIqCi0gICAga2l0KFdlYkNvcmU6OlRlc3RPdmVycmlkaW5nTmFtZUdl
dHRlciogbm9kZSk7Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYktpdAotCi0jZW5kaWYgLyogV0VCX0tJ
VF9ET01fVEVTVF9PVkVSUklESU5HX05BTUVfR0VUVEVSX1BSSVZBVEVfSCAqLwpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdEN1c3RvbU5h
bWVkR2V0dGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9K
U1Rlc3RDdXN0b21OYW1lZEdldHRlci5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZmRmMGZhMTkyODcyN2FkMWU0
ZjY5OTcyNjgzNWU2NGZhYzYwMmMyNwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RDdXN0b21OYW1lZEdldHRlci5jcHAKQEAg
LTAsMCArMSwyMjAgQEAKKy8qCisgICAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIFdlYktpdCBv
cGVuIHNvdXJjZSBwcm9qZWN0LgorICAgIFRoaXMgZmlsZSBoYXMgYmVlbiBnZW5lcmF0ZWQgYnkg
Z2VuZXJhdGUtYmluZGluZ3MucGwuIERPIE5PVCBNT0RJRlkhCisKKyAgICBUaGlzIGxpYnJhcnkg
aXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgICAgbW9k
aWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMK
KyAgICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9u
OyBlaXRoZXIKKyAgICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlv
bikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQg
aW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgICBidXQgV0lUSE9VVCBBTlkg
V0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgIE1FUkNI
QU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUg
R05VCisgICAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMu
CisKKyAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFy
eSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgICAgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNl
ZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAgICB0aGUgRnJlZSBT
b2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29y
LAorICAgIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorKi8KKworI2luY2x1ZGUgImNvbmZp
Zy5oIgorI2luY2x1ZGUgIkpTVGVzdEN1c3RvbU5hbWVkR2V0dGVyLmgiCisKKyNpbmNsdWRlICJF
eGNlcHRpb25Db2RlLmgiCisjaW5jbHVkZSAiSlNET01CaW5kaW5nLmgiCisjaW5jbHVkZSAiVGVz
dEN1c3RvbU5hbWVkR2V0dGVyLmgiCisjaW5jbHVkZSAid3RmL3RleHQvQXRvbWljU3RyaW5nLmgi
CisjaW5jbHVkZSA8cnVudGltZS9FcnJvci5oPgorI2luY2x1ZGUgPHd0Zi9HZXRQdHIuaD4KKwor
dXNpbmcgbmFtZXNwYWNlIEpTQzsKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitBU1NFUlRfQ0xB
U1NfRklUU19JTl9DRUxMKEpTVGVzdEN1c3RvbU5hbWVkR2V0dGVyKTsKK0FTU0VSVF9IQVNfVFJJ
VklBTF9ERVNUUlVDVE9SKEpTVGVzdEN1c3RvbU5hbWVkR2V0dGVyKTsKKworLyogSGFzaCB0YWJs
ZSAqLworCitzdGF0aWMgY29uc3QgSGFzaFRhYmxlVmFsdWUgSlNUZXN0Q3VzdG9tTmFtZWRHZXR0
ZXJUYWJsZVZhbHVlc1tdID0KK3sKKyAgICB7ICJjb25zdHJ1Y3RvciIsIERvbnRFbnVtIHwgUmVh
ZE9ubHksIChpbnRwdHJfdClzdGF0aWNfY2FzdDxQcm9wZXJ0eVNsb3Q6OkdldFZhbHVlRnVuYz4o
anNUZXN0Q3VzdG9tTmFtZWRHZXR0ZXJDb25zdHJ1Y3RvciksIChpbnRwdHJfdCkwLCBOb0ludHJp
bnNpYyB9LAorICAgIHsgMCwgMCwgMCwgMCwgTm9JbnRyaW5zaWMgfQorfTsKKworc3RhdGljIGNv
bnN0IEhhc2hUYWJsZSBKU1Rlc3RDdXN0b21OYW1lZEdldHRlclRhYmxlID0geyAyLCAxLCBKU1Rl
c3RDdXN0b21OYW1lZEdldHRlclRhYmxlVmFsdWVzLCAwIH07CisvKiBIYXNoIHRhYmxlIGZvciBj
b25zdHJ1Y3RvciAqLworCitzdGF0aWMgY29uc3QgSGFzaFRhYmxlVmFsdWUgSlNUZXN0Q3VzdG9t
TmFtZWRHZXR0ZXJDb25zdHJ1Y3RvclRhYmxlVmFsdWVzW10gPQoreworICAgIHsgMCwgMCwgMCwg
MCwgTm9JbnRyaW5zaWMgfQorfTsKKworc3RhdGljIGNvbnN0IEhhc2hUYWJsZSBKU1Rlc3RDdXN0
b21OYW1lZEdldHRlckNvbnN0cnVjdG9yVGFibGUgPSB7IDEsIDAsIEpTVGVzdEN1c3RvbU5hbWVk
R2V0dGVyQ29uc3RydWN0b3JUYWJsZVZhbHVlcywgMCB9OworQVNTRVJUX0hBU19UUklWSUFMX0RF
U1RSVUNUT1IoSlNUZXN0Q3VzdG9tTmFtZWRHZXR0ZXJDb25zdHJ1Y3Rvcik7CisKK2NvbnN0IENs
YXNzSW5mbyBKU1Rlc3RDdXN0b21OYW1lZEdldHRlckNvbnN0cnVjdG9yOjpzX2luZm8gPSB7ICJU
ZXN0Q3VzdG9tTmFtZWRHZXR0ZXJDb25zdHJ1Y3RvciIsICZCYXNlOjpzX2luZm8sICZKU1Rlc3RD
dXN0b21OYW1lZEdldHRlckNvbnN0cnVjdG9yVGFibGUsIDAsIENSRUFURV9NRVRIT0RfVEFCTEUo
SlNUZXN0Q3VzdG9tTmFtZWRHZXR0ZXJDb25zdHJ1Y3RvcikgfTsKKworSlNUZXN0Q3VzdG9tTmFt
ZWRHZXR0ZXJDb25zdHJ1Y3Rvcjo6SlNUZXN0Q3VzdG9tTmFtZWRHZXR0ZXJDb25zdHJ1Y3RvcihT
dHJ1Y3R1cmUqIHN0cnVjdHVyZSwgSlNET01HbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCkKKyAg
ICA6IERPTUNvbnN0cnVjdG9yT2JqZWN0KHN0cnVjdHVyZSwgZ2xvYmFsT2JqZWN0KQoreworfQor
Cit2b2lkIEpTVGVzdEN1c3RvbU5hbWVkR2V0dGVyQ29uc3RydWN0b3I6OmZpbmlzaENyZWF0aW9u
KEV4ZWNTdGF0ZSogZXhlYywgSlNET01HbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCkKK3sKKyAg
ICBCYXNlOjpmaW5pc2hDcmVhdGlvbihleGVjLT5nbG9iYWxEYXRhKCkpOworICAgIEFTU0VSVChp
bmhlcml0cygmc19pbmZvKSk7CisgICAgcHV0RGlyZWN0KGV4ZWMtPmdsb2JhbERhdGEoKSwgZXhl
Yy0+cHJvcGVydHlOYW1lcygpLnByb3RvdHlwZSwgSlNUZXN0Q3VzdG9tTmFtZWRHZXR0ZXJQcm90
b3R5cGU6OnNlbGYoZXhlYywgZ2xvYmFsT2JqZWN0KSwgRG9udERlbGV0ZSB8IFJlYWRPbmx5KTsK
K30KKworYm9vbCBKU1Rlc3RDdXN0b21OYW1lZEdldHRlckNvbnN0cnVjdG9yOjpnZXRPd25Qcm9w
ZXJ0eVNsb3QoSlNDZWxsKiBjZWxsLCBFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IElkZW50aWZpZXIm
IHByb3BlcnR5TmFtZSwgUHJvcGVydHlTbG90JiBzbG90KQoreworICAgIHJldHVybiBnZXRTdGF0
aWNWYWx1ZVNsb3Q8SlNUZXN0Q3VzdG9tTmFtZWRHZXR0ZXJDb25zdHJ1Y3RvciwgSlNET01XcmFw
cGVyPihleGVjLCAmSlNUZXN0Q3VzdG9tTmFtZWRHZXR0ZXJDb25zdHJ1Y3RvclRhYmxlLCBzdGF0
aWNfY2FzdDxKU1Rlc3RDdXN0b21OYW1lZEdldHRlckNvbnN0cnVjdG9yKj4oY2VsbCksIHByb3Bl
cnR5TmFtZSwgc2xvdCk7Cit9CisKK2Jvb2wgSlNUZXN0Q3VzdG9tTmFtZWRHZXR0ZXJDb25zdHJ1
Y3Rvcjo6Z2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKEpTT2JqZWN0KiBvYmplY3QsIEV4ZWNTdGF0
ZSogZXhlYywgY29uc3QgSWRlbnRpZmllciYgcHJvcGVydHlOYW1lLCBQcm9wZXJ0eURlc2NyaXB0
b3ImIGRlc2NyaXB0b3IpCit7CisgICAgcmV0dXJuIGdldFN0YXRpY1ZhbHVlRGVzY3JpcHRvcjxK
U1Rlc3RDdXN0b21OYW1lZEdldHRlckNvbnN0cnVjdG9yLCBKU0RPTVdyYXBwZXI+KGV4ZWMsICZK
U1Rlc3RDdXN0b21OYW1lZEdldHRlckNvbnN0cnVjdG9yVGFibGUsIHN0YXRpY19jYXN0PEpTVGVz
dEN1c3RvbU5hbWVkR2V0dGVyQ29uc3RydWN0b3IqPihvYmplY3QpLCBwcm9wZXJ0eU5hbWUsIGRl
c2NyaXB0b3IpOworfQorCisvKiBIYXNoIHRhYmxlIGZvciBwcm90b3R5cGUgKi8KKworc3RhdGlj
IGNvbnN0IEhhc2hUYWJsZVZhbHVlIEpTVGVzdEN1c3RvbU5hbWVkR2V0dGVyUHJvdG90eXBlVGFi
bGVWYWx1ZXNbXSA9Cit7CisgICAgeyAiYW5vdGhlckZ1bmN0aW9uIiwgRG9udERlbGV0ZSB8IEpT
Qzo6RnVuY3Rpb24sIChpbnRwdHJfdClzdGF0aWNfY2FzdDxOYXRpdmVGdW5jdGlvbj4oanNUZXN0
Q3VzdG9tTmFtZWRHZXR0ZXJQcm90b3R5cGVGdW5jdGlvbkFub3RoZXJGdW5jdGlvbiksIChpbnRw
dHJfdCkxLCBOb0ludHJpbnNpYyB9LAorICAgIHsgMCwgMCwgMCwgMCwgTm9JbnRyaW5zaWMgfQor
fTsKKworc3RhdGljIGNvbnN0IEhhc2hUYWJsZSBKU1Rlc3RDdXN0b21OYW1lZEdldHRlclByb3Rv
dHlwZVRhYmxlID0geyAyLCAxLCBKU1Rlc3RDdXN0b21OYW1lZEdldHRlclByb3RvdHlwZVRhYmxl
VmFsdWVzLCAwIH07Citjb25zdCBDbGFzc0luZm8gSlNUZXN0Q3VzdG9tTmFtZWRHZXR0ZXJQcm90
b3R5cGU6OnNfaW5mbyA9IHsgIlRlc3RDdXN0b21OYW1lZEdldHRlclByb3RvdHlwZSIsICZCYXNl
OjpzX2luZm8sICZKU1Rlc3RDdXN0b21OYW1lZEdldHRlclByb3RvdHlwZVRhYmxlLCAwLCBDUkVB
VEVfTUVUSE9EX1RBQkxFKEpTVGVzdEN1c3RvbU5hbWVkR2V0dGVyUHJvdG90eXBlKSB9OworCitK
U09iamVjdCogSlNUZXN0Q3VzdG9tTmFtZWRHZXR0ZXJQcm90b3R5cGU6OnNlbGYoRXhlY1N0YXRl
KiBleGVjLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0KQoreworICAgIHJldHVybiBnZXRE
T01Qcm90b3R5cGU8SlNUZXN0Q3VzdG9tTmFtZWRHZXR0ZXI+KGV4ZWMsIGdsb2JhbE9iamVjdCk7
Cit9CisKK2Jvb2wgSlNUZXN0Q3VzdG9tTmFtZWRHZXR0ZXJQcm90b3R5cGU6OmdldE93blByb3Bl
cnR5U2xvdChKU0NlbGwqIGNlbGwsIEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgSWRlbnRpZmllciYg
cHJvcGVydHlOYW1lLCBQcm9wZXJ0eVNsb3QmIHNsb3QpCit7CisgICAgSlNUZXN0Q3VzdG9tTmFt
ZWRHZXR0ZXJQcm90b3R5cGUqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNUZXN0Q3VzdG9tTmFtZWRH
ZXR0ZXJQcm90b3R5cGUqPihjZWxsKTsKKyAgICByZXR1cm4gZ2V0U3RhdGljRnVuY3Rpb25TbG90
PEpTT2JqZWN0PihleGVjLCAmSlNUZXN0Q3VzdG9tTmFtZWRHZXR0ZXJQcm90b3R5cGVUYWJsZSwg
dGhpc09iamVjdCwgcHJvcGVydHlOYW1lLCBzbG90KTsKK30KKworYm9vbCBKU1Rlc3RDdXN0b21O
YW1lZEdldHRlclByb3RvdHlwZTo6Z2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKEpTT2JqZWN0KiBv
YmplY3QsIEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgSWRlbnRpZmllciYgcHJvcGVydHlOYW1lLCBQ
cm9wZXJ0eURlc2NyaXB0b3ImIGRlc2NyaXB0b3IpCit7CisgICAgSlNUZXN0Q3VzdG9tTmFtZWRH
ZXR0ZXJQcm90b3R5cGUqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNUZXN0Q3VzdG9tTmFtZWRHZXR0
ZXJQcm90b3R5cGUqPihvYmplY3QpOworICAgIHJldHVybiBnZXRTdGF0aWNGdW5jdGlvbkRlc2Ny
aXB0b3I8SlNPYmplY3Q+KGV4ZWMsICZKU1Rlc3RDdXN0b21OYW1lZEdldHRlclByb3RvdHlwZVRh
YmxlLCB0aGlzT2JqZWN0LCBwcm9wZXJ0eU5hbWUsIGRlc2NyaXB0b3IpOworfQorCitjb25zdCBD
bGFzc0luZm8gSlNUZXN0Q3VzdG9tTmFtZWRHZXR0ZXI6OnNfaW5mbyA9IHsgIlRlc3RDdXN0b21O
YW1lZEdldHRlciIsICZCYXNlOjpzX2luZm8sICZKU1Rlc3RDdXN0b21OYW1lZEdldHRlclRhYmxl
LCAwICwgQ1JFQVRFX01FVEhPRF9UQUJMRShKU1Rlc3RDdXN0b21OYW1lZEdldHRlcikgfTsKKwor
SlNUZXN0Q3VzdG9tTmFtZWRHZXR0ZXI6OkpTVGVzdEN1c3RvbU5hbWVkR2V0dGVyKFN0cnVjdHVy
ZSogc3RydWN0dXJlLCBKU0RPTUdsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBQYXNzUmVmUHRy
PFRlc3RDdXN0b21OYW1lZEdldHRlcj4gaW1wbCkKKyAgICA6IEpTRE9NV3JhcHBlcihzdHJ1Y3R1
cmUsIGdsb2JhbE9iamVjdCkKKyAgICAsIG1faW1wbChpbXBsLmxlYWtSZWYoKSkKK3sKK30KKwor
dm9pZCBKU1Rlc3RDdXN0b21OYW1lZEdldHRlcjo6ZmluaXNoQ3JlYXRpb24oSlNHbG9iYWxEYXRh
JiBnbG9iYWxEYXRhKQoreworICAgIEJhc2U6OmZpbmlzaENyZWF0aW9uKGdsb2JhbERhdGEpOwor
ICAgIEFTU0VSVChpbmhlcml0cygmc19pbmZvKSk7Cit9CisKK0pTT2JqZWN0KiBKU1Rlc3RDdXN0
b21OYW1lZEdldHRlcjo6Y3JlYXRlUHJvdG90eXBlKEV4ZWNTdGF0ZSogZXhlYywgSlNHbG9iYWxP
YmplY3QqIGdsb2JhbE9iamVjdCkKK3sKKyAgICByZXR1cm4gSlNUZXN0Q3VzdG9tTmFtZWRHZXR0
ZXJQcm90b3R5cGU6OmNyZWF0ZShleGVjLT5nbG9iYWxEYXRhKCksIGdsb2JhbE9iamVjdCwgSlNU
ZXN0Q3VzdG9tTmFtZWRHZXR0ZXJQcm90b3R5cGU6OmNyZWF0ZVN0cnVjdHVyZShnbG9iYWxPYmpl
Y3QtPmdsb2JhbERhdGEoKSwgZ2xvYmFsT2JqZWN0LCBnbG9iYWxPYmplY3QtPm9iamVjdFByb3Rv
dHlwZSgpKSk7Cit9CisKK3ZvaWQgSlNUZXN0Q3VzdG9tTmFtZWRHZXR0ZXI6OmRlc3Ryb3koSlND
OjpKU0NlbGwqIGNlbGwpCit7CisgICAgSlNUZXN0Q3VzdG9tTmFtZWRHZXR0ZXIqIHRoaXNPYmpl
Y3QgPSBqc0Nhc3Q8SlNUZXN0Q3VzdG9tTmFtZWRHZXR0ZXIqPihjZWxsKTsKKyAgICB0aGlzT2Jq
ZWN0LT5yZWxlYXNlSW1wbElmTm90TnVsbCgpOworfQorCitib29sIEpTVGVzdEN1c3RvbU5hbWVk
R2V0dGVyOjpnZXRPd25Qcm9wZXJ0eVNsb3QoSlNDZWxsKiBjZWxsLCBFeGVjU3RhdGUqIGV4ZWMs
IGNvbnN0IElkZW50aWZpZXImIHByb3BlcnR5TmFtZSwgUHJvcGVydHlTbG90JiBzbG90KQorewor
ICAgIEpTVGVzdEN1c3RvbU5hbWVkR2V0dGVyKiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTVGVzdEN1
c3RvbU5hbWVkR2V0dGVyKj4oY2VsbCk7CisgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyh0
aGlzT2JqZWN0LCAmc19pbmZvKTsKKyAgICBpZiAoY2FuR2V0SXRlbXNGb3JOYW1lKGV4ZWMsIHN0
YXRpY19jYXN0PFRlc3RDdXN0b21OYW1lZEdldHRlcio+KHRoaXNPYmplY3QtPmltcGwoKSksIHBy
b3BlcnR5TmFtZSkpIHsKKyAgICAgICAgc2xvdC5zZXRDdXN0b20odGhpc09iamVjdCwgdGhpc09i
amVjdC0+bmFtZUdldHRlcik7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKyAgICByZXR1
cm4gZ2V0U3RhdGljVmFsdWVTbG90PEpTVGVzdEN1c3RvbU5hbWVkR2V0dGVyLCBCYXNlPihleGVj
LCAmSlNUZXN0Q3VzdG9tTmFtZWRHZXR0ZXJUYWJsZSwgdGhpc09iamVjdCwgcHJvcGVydHlOYW1l
LCBzbG90KTsKK30KKworYm9vbCBKU1Rlc3RDdXN0b21OYW1lZEdldHRlcjo6Z2V0T3duUHJvcGVy
dHlEZXNjcmlwdG9yKEpTT2JqZWN0KiBvYmplY3QsIEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgSWRl
bnRpZmllciYgcHJvcGVydHlOYW1lLCBQcm9wZXJ0eURlc2NyaXB0b3ImIGRlc2NyaXB0b3IpCit7
CisgICAgSlNUZXN0Q3VzdG9tTmFtZWRHZXR0ZXIqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNUZXN0
Q3VzdG9tTmFtZWRHZXR0ZXIqPihvYmplY3QpOworICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJ
VFModGhpc09iamVjdCwgJnNfaW5mbyk7CisgICAgaWYgKGNhbkdldEl0ZW1zRm9yTmFtZShleGVj
LCBzdGF0aWNfY2FzdDxUZXN0Q3VzdG9tTmFtZWRHZXR0ZXIqPih0aGlzT2JqZWN0LT5pbXBsKCkp
LCBwcm9wZXJ0eU5hbWUpKSB7CisgICAgICAgIFByb3BlcnR5U2xvdCBzbG90OworICAgICAgICBz
bG90LnNldEN1c3RvbSh0aGlzT2JqZWN0LCBuYW1lR2V0dGVyKTsKKyAgICAgICAgZGVzY3JpcHRv
ci5zZXREZXNjcmlwdG9yKHNsb3QuZ2V0VmFsdWUoZXhlYywgcHJvcGVydHlOYW1lKSwgUmVhZE9u
bHkgfCBEb250RGVsZXRlIHwgRG9udEVudW0pOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9
CisgICAgcmV0dXJuIGdldFN0YXRpY1ZhbHVlRGVzY3JpcHRvcjxKU1Rlc3RDdXN0b21OYW1lZEdl
dHRlciwgQmFzZT4oZXhlYywgJkpTVGVzdEN1c3RvbU5hbWVkR2V0dGVyVGFibGUsIHRoaXNPYmpl
Y3QsIHByb3BlcnR5TmFtZSwgZGVzY3JpcHRvcik7Cit9CisKK0pTVmFsdWUganNUZXN0Q3VzdG9t
TmFtZWRHZXR0ZXJDb25zdHJ1Y3RvcihFeGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWUgc2xvdEJhc2Us
IGNvbnN0IElkZW50aWZpZXImKQoreworICAgIEpTVGVzdEN1c3RvbU5hbWVkR2V0dGVyKiBkb21P
YmplY3QgPSBzdGF0aWNfY2FzdDxKU1Rlc3RDdXN0b21OYW1lZEdldHRlcio+KGFzT2JqZWN0KHNs
b3RCYXNlKSk7CisgICAgcmV0dXJuIEpTVGVzdEN1c3RvbU5hbWVkR2V0dGVyOjpnZXRDb25zdHJ1
Y3RvcihleGVjLCBkb21PYmplY3QtPmdsb2JhbE9iamVjdCgpKTsKK30KKworSlNWYWx1ZSBKU1Rl
c3RDdXN0b21OYW1lZEdldHRlcjo6Z2V0Q29uc3RydWN0b3IoRXhlY1N0YXRlKiBleGVjLCBKU0ds
b2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0KQoreworICAgIHJldHVybiBnZXRET01Db25zdHJ1Y3Rv
cjxKU1Rlc3RDdXN0b21OYW1lZEdldHRlckNvbnN0cnVjdG9yPihleGVjLCBzdGF0aWNfY2FzdDxK
U0RPTUdsb2JhbE9iamVjdCo+KGdsb2JhbE9iamVjdCkpOworfQorCitFbmNvZGVkSlNWYWx1ZSBK
U0NfSE9TVF9DQUxMIGpzVGVzdEN1c3RvbU5hbWVkR2V0dGVyUHJvdG90eXBlRnVuY3Rpb25Bbm90
aGVyRnVuY3Rpb24oRXhlY1N0YXRlKiBleGVjKQoreworICAgIEpTVmFsdWUgdGhpc1ZhbHVlID0g
ZXhlYy0+aG9zdFRoaXNWYWx1ZSgpOworICAgIGlmICghdGhpc1ZhbHVlLmluaGVyaXRzKCZKU1Rl
c3RDdXN0b21OYW1lZEdldHRlcjo6c19pbmZvKSkKKyAgICAgICAgcmV0dXJuIHRocm93Vk1UeXBl
RXJyb3IoZXhlYyk7CisgICAgSlNUZXN0Q3VzdG9tTmFtZWRHZXR0ZXIqIGNhc3RlZFRoaXMgPSBz
dGF0aWNfY2FzdDxKU1Rlc3RDdXN0b21OYW1lZEdldHRlcio+KGFzT2JqZWN0KHRoaXNWYWx1ZSkp
OworICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFMoY2FzdGVkVGhpcywgJkpTVGVzdEN1c3Rv
bU5hbWVkR2V0dGVyOjpzX2luZm8pOworICAgIFRlc3RDdXN0b21OYW1lZEdldHRlciogaW1wbCA9
IHN0YXRpY19jYXN0PFRlc3RDdXN0b21OYW1lZEdldHRlcio+KGNhc3RlZFRoaXMtPmltcGwoKSk7
CisgICAgaWYgKGV4ZWMtPmFyZ3VtZW50Q291bnQoKSA8IDEpCisgICAgICAgIHJldHVybiB0aHJv
d1ZNRXJyb3IoZXhlYywgY3JlYXRlVHlwZUVycm9yKGV4ZWMsICJOb3QgZW5vdWdoIGFyZ3VtZW50
cyIpKTsKKyAgICBjb25zdCBTdHJpbmcmIHN0cih1c3RyaW5nVG9TdHJpbmcoTUFZQkVfTUlTU0lO
R19QQVJBTUVURVIoZXhlYywgMCwgTWlzc2luZ0lzVW5kZWZpbmVkKS5pc0VtcHR5KCkgPyBVU3Ry
aW5nKCkgOiBNQVlCRV9NSVNTSU5HX1BBUkFNRVRFUihleGVjLCAwLCBNaXNzaW5nSXNVbmRlZmlu
ZWQpLnRvU3RyaW5nKGV4ZWMpLT52YWx1ZShleGVjKSkpOworICAgIGlmIChleGVjLT5oYWRFeGNl
cHRpb24oKSkKKyAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsK
KyAgICBpbXBsLT5hbm90aGVyRnVuY3Rpb24oc3RyKTsKKyAgICByZXR1cm4gSlNWYWx1ZTo6ZW5j
b2RlKGpzVW5kZWZpbmVkKCkpOworfQorCitzdGF0aWMgaW5saW5lIGJvb2wgaXNPYnNlcnZhYmxl
KEpTVGVzdEN1c3RvbU5hbWVkR2V0dGVyKiBqc1Rlc3RDdXN0b21OYW1lZEdldHRlcikKK3sKKyAg
ICBpZiAoanNUZXN0Q3VzdG9tTmFtZWRHZXR0ZXItPmhhc0N1c3RvbVByb3BlcnRpZXMoKSkKKyAg
ICAgICAgcmV0dXJuIHRydWU7CisgICAgcmV0dXJuIGZhbHNlOworfQorCitib29sIEpTVGVzdEN1
c3RvbU5hbWVkR2V0dGVyT3duZXI6OmlzUmVhY2hhYmxlRnJvbU9wYXF1ZVJvb3RzKEpTQzo6SGFu
ZGxlPEpTQzo6VW5rbm93bj4gaGFuZGxlLCB2b2lkKiwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit7
CisgICAgSlNUZXN0Q3VzdG9tTmFtZWRHZXR0ZXIqIGpzVGVzdEN1c3RvbU5hbWVkR2V0dGVyID0g
c3RhdGljX2Nhc3Q8SlNUZXN0Q3VzdG9tTmFtZWRHZXR0ZXIqPihoYW5kbGUuZ2V0KCkuYXNDZWxs
KCkpOworICAgIGlmICghaXNPYnNlcnZhYmxlKGpzVGVzdEN1c3RvbU5hbWVkR2V0dGVyKSkKKyAg
ICAgICAgcmV0dXJuIGZhbHNlOworICAgIFVOVVNFRF9QQVJBTSh2aXNpdG9yKTsKKyAgICByZXR1
cm4gZmFsc2U7Cit9CisKK3ZvaWQgSlNUZXN0Q3VzdG9tTmFtZWRHZXR0ZXJPd25lcjo6ZmluYWxp
emUoSlNDOjpIYW5kbGU8SlNDOjpVbmtub3duPiBoYW5kbGUsIHZvaWQqIGNvbnRleHQpCit7Cisg
ICAgSlNUZXN0Q3VzdG9tTmFtZWRHZXR0ZXIqIGpzVGVzdEN1c3RvbU5hbWVkR2V0dGVyID0gc3Rh
dGljX2Nhc3Q8SlNUZXN0Q3VzdG9tTmFtZWRHZXR0ZXIqPihoYW5kbGUuZ2V0KCkuYXNDZWxsKCkp
OworICAgIERPTVdyYXBwZXJXb3JsZCogd29ybGQgPSBzdGF0aWNfY2FzdDxET01XcmFwcGVyV29y
bGQqPihjb250ZXh0KTsKKyAgICB1bmNhY2hlV3JhcHBlcih3b3JsZCwganNUZXN0Q3VzdG9tTmFt
ZWRHZXR0ZXItPmltcGwoKSwganNUZXN0Q3VzdG9tTmFtZWRHZXR0ZXIpOworICAgIGpzVGVzdEN1
c3RvbU5hbWVkR2V0dGVyLT5yZWxlYXNlSW1wbCgpOworfQorCitKU0M6OkpTVmFsdWUgdG9KUyhK
U0M6OkV4ZWNTdGF0ZSogZXhlYywgSlNET01HbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgVGVz
dEN1c3RvbU5hbWVkR2V0dGVyKiBpbXBsKQoreworICAgIHJldHVybiB3cmFwPEpTVGVzdEN1c3Rv
bU5hbWVkR2V0dGVyPihleGVjLCBnbG9iYWxPYmplY3QsIGltcGwpOworfQorCitUZXN0Q3VzdG9t
TmFtZWRHZXR0ZXIqIHRvVGVzdEN1c3RvbU5hbWVkR2V0dGVyKEpTQzo6SlNWYWx1ZSB2YWx1ZSkK
K3sKKyAgICByZXR1cm4gdmFsdWUuaW5oZXJpdHMoJkpTVGVzdEN1c3RvbU5hbWVkR2V0dGVyOjpz
X2luZm8pID8gc3RhdGljX2Nhc3Q8SlNUZXN0Q3VzdG9tTmFtZWRHZXR0ZXIqPihhc09iamVjdCh2
YWx1ZSkpLT5pbXBsKCkgOiAwOworfQorCit9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0Q3VzdG9tTmFtZWRHZXR0ZXIuaCBiL1NvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RDdXN0b21OYW1lZEdldHRl
ci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAuLmY1MzBjOGI1Yzc3NWQxYjliNmExZjdhZGY3NGFmODAxZWRiMjIyZDAK
LS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3Qv
SlMvSlNUZXN0Q3VzdG9tTmFtZWRHZXR0ZXIuaApAQCAtMCwwICsxLDE0OCBAQAorLyoKKyAgICBU
aGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgV2ViS2l0IG9wZW4gc291cmNlIHByb2plY3QuCisgICAg
VGhpcyBmaWxlIGhhcyBiZWVuIGdlbmVyYXRlZCBieSBnZW5lcmF0ZS1iaW5kaW5ncy5wbC4gRE8g
Tk9UIE1PRElGWSEKKworICAgIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2Fu
IHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9m
IHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICAgIExpY2Vuc2UgYXMgcHVibGlzaGVk
IGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICAgIHZlcnNpb24gMiBv
ZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKwor
ICAgIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwg
YmUgdXNlZnVsLAorICAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRo
ZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAgICBMaWJyYXJ5IEdlbmVyYWwg
UHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgIFlvdSBzaG91bGQgaGF2ZSBy
ZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UK
KyAgICBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAg
SWYgbm90LCB3cml0ZSB0bworICAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4s
IDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgICAgQm9zdG9uLCBNQSAwMjExMC0x
MzAxLCBVU0EuCisqLworCisjaWZuZGVmIEpTVGVzdEN1c3RvbU5hbWVkR2V0dGVyX2gKKyNkZWZp
bmUgSlNUZXN0Q3VzdG9tTmFtZWRHZXR0ZXJfaAorCisjaW5jbHVkZSAiSlNET01CaW5kaW5nLmgi
CisjaW5jbHVkZSAiVGVzdEN1c3RvbU5hbWVkR2V0dGVyLmgiCisjaW5jbHVkZSA8cnVudGltZS9K
U0dsb2JhbE9iamVjdC5oPgorI2luY2x1ZGUgPHJ1bnRpbWUvSlNPYmplY3QuaD4KKyNpbmNsdWRl
IDxydW50aW1lL09iamVjdFByb3RvdHlwZS5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2Ns
YXNzIEpTVGVzdEN1c3RvbU5hbWVkR2V0dGVyIDogcHVibGljIEpTRE9NV3JhcHBlciB7CitwdWJs
aWM6CisgICAgdHlwZWRlZiBKU0RPTVdyYXBwZXIgQmFzZTsKKyAgICBzdGF0aWMgSlNUZXN0Q3Vz
dG9tTmFtZWRHZXR0ZXIqIGNyZWF0ZShKU0M6OlN0cnVjdHVyZSogc3RydWN0dXJlLCBKU0RPTUds
b2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBQYXNzUmVmUHRyPFRlc3RDdXN0b21OYW1lZEdldHRl
cj4gaW1wbCkKKyAgICB7CisgICAgICAgIEpTVGVzdEN1c3RvbU5hbWVkR2V0dGVyKiBwdHIgPSBu
ZXcgKE5vdE51bGwsIEpTQzo6YWxsb2NhdGVDZWxsPEpTVGVzdEN1c3RvbU5hbWVkR2V0dGVyPihn
bG9iYWxPYmplY3QtPmdsb2JhbERhdGEoKS5oZWFwKSkgSlNUZXN0Q3VzdG9tTmFtZWRHZXR0ZXIo
c3RydWN0dXJlLCBnbG9iYWxPYmplY3QsIGltcGwpOworICAgICAgICBwdHItPmZpbmlzaENyZWF0
aW9uKGdsb2JhbE9iamVjdC0+Z2xvYmFsRGF0YSgpKTsKKyAgICAgICAgcmV0dXJuIHB0cjsKKyAg
ICB9CisKKyAgICBzdGF0aWMgSlNDOjpKU09iamVjdCogY3JlYXRlUHJvdG90eXBlKEpTQzo6RXhl
Y1N0YXRlKiwgSlNDOjpKU0dsb2JhbE9iamVjdCopOworICAgIHN0YXRpYyBib29sIGdldE93blBy
b3BlcnR5U2xvdChKU0M6OkpTQ2VsbCosIEpTQzo6RXhlY1N0YXRlKiwgY29uc3QgSlNDOjpJZGVu
dGlmaWVyJiBwcm9wZXJ0eU5hbWUsIEpTQzo6UHJvcGVydHlTbG90Jik7CisgICAgc3RhdGljIGJv
b2wgZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKEpTQzo6SlNPYmplY3QqLCBKU0M6OkV4ZWNTdGF0
ZSosIGNvbnN0IEpTQzo6SWRlbnRpZmllciYgcHJvcGVydHlOYW1lLCBKU0M6OlByb3BlcnR5RGVz
Y3JpcHRvciYpOworICAgIHN0YXRpYyB2b2lkIGRlc3Ryb3koSlNDOjpKU0NlbGwqKTsKKyAgICBz
dGF0aWMgY29uc3QgSlNDOjpDbGFzc0luZm8gc19pbmZvOworCisgICAgc3RhdGljIEpTQzo6U3Ry
dWN0dXJlKiBjcmVhdGVTdHJ1Y3R1cmUoSlNDOjpKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIEpT
Qzo6SlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNDOjpKU1ZhbHVlIHByb3RvdHlwZSkK
KyAgICB7CisgICAgICAgIHJldHVybiBKU0M6OlN0cnVjdHVyZTo6Y3JlYXRlKGdsb2JhbERhdGEs
IGdsb2JhbE9iamVjdCwgcHJvdG90eXBlLCBKU0M6OlR5cGVJbmZvKEpTQzo6T2JqZWN0VHlwZSwg
U3RydWN0dXJlRmxhZ3MpLCAmc19pbmZvKTsKKyAgICB9CisKKyAgICBzdGF0aWMgSlNDOjpKU1Zh
bHVlIGdldENvbnN0cnVjdG9yKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpKU0dsb2JhbE9iamVjdCop
OworICAgIFRlc3RDdXN0b21OYW1lZEdldHRlciogaW1wbCgpIGNvbnN0IHsgcmV0dXJuIG1faW1w
bDsgfQorICAgIHZvaWQgcmVsZWFzZUltcGwoKSB7IG1faW1wbC0+ZGVyZWYoKTsgbV9pbXBsID0g
MDsgfQorCisgICAgdm9pZCByZWxlYXNlSW1wbElmTm90TnVsbCgpIHsgaWYgKG1faW1wbCkgeyBt
X2ltcGwtPmRlcmVmKCk7IG1faW1wbCA9IDA7IH0gfQorCitwcml2YXRlOgorICAgIFRlc3RDdXN0
b21OYW1lZEdldHRlciogbV9pbXBsOworcHJvdGVjdGVkOgorICAgIEpTVGVzdEN1c3RvbU5hbWVk
R2V0dGVyKEpTQzo6U3RydWN0dXJlKiwgSlNET01HbG9iYWxPYmplY3QqLCBQYXNzUmVmUHRyPFRl
c3RDdXN0b21OYW1lZEdldHRlcj4pOworICAgIHZvaWQgZmluaXNoQ3JlYXRpb24oSlNDOjpKU0ds
b2JhbERhdGEmKTsKKyAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgU3RydWN0dXJlRmxhZ3MgPSBK
U0M6Ok92ZXJyaWRlc0dldE93blByb3BlcnR5U2xvdCB8IEJhc2U6OlN0cnVjdHVyZUZsYWdzOwor
cHJpdmF0ZToKKyAgICBzdGF0aWMgYm9vbCBjYW5HZXRJdGVtc0Zvck5hbWUoSlNDOjpFeGVjU3Rh
dGUqLCBUZXN0Q3VzdG9tTmFtZWRHZXR0ZXIqLCBjb25zdCBKU0M6OklkZW50aWZpZXImKTsKKyAg
ICBzdGF0aWMgSlNDOjpKU1ZhbHVlIG5hbWVHZXR0ZXIoSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkpT
VmFsdWUsIGNvbnN0IEpTQzo6SWRlbnRpZmllciYpOworfTsKKworY2xhc3MgSlNUZXN0Q3VzdG9t
TmFtZWRHZXR0ZXJPd25lciA6IHB1YmxpYyBKU0M6OldlYWtIYW5kbGVPd25lciB7CisgICAgdmly
dHVhbCBib29sIGlzUmVhY2hhYmxlRnJvbU9wYXF1ZVJvb3RzKEpTQzo6SGFuZGxlPEpTQzo6VW5r
bm93bj4sIHZvaWQqIGNvbnRleHQsIEpTQzo6U2xvdFZpc2l0b3ImKTsKKyAgICB2aXJ0dWFsIHZv
aWQgZmluYWxpemUoSlNDOjpIYW5kbGU8SlNDOjpVbmtub3duPiwgdm9pZCogY29udGV4dCk7Cit9
OworCitpbmxpbmUgSlNDOjpXZWFrSGFuZGxlT3duZXIqIHdyYXBwZXJPd25lcihET01XcmFwcGVy
V29ybGQqLCBUZXN0Q3VzdG9tTmFtZWRHZXR0ZXIqKQoreworICAgIERFRklORV9TVEFUSUNfTE9D
QUwoSlNUZXN0Q3VzdG9tTmFtZWRHZXR0ZXJPd25lciwganNUZXN0Q3VzdG9tTmFtZWRHZXR0ZXJP
d25lciwgKCkpOworICAgIHJldHVybiAmanNUZXN0Q3VzdG9tTmFtZWRHZXR0ZXJPd25lcjsKK30K
KworaW5saW5lIHZvaWQqIHdyYXBwZXJDb250ZXh0KERPTVdyYXBwZXJXb3JsZCogd29ybGQsIFRl
c3RDdXN0b21OYW1lZEdldHRlciopCit7CisgICAgcmV0dXJuIHdvcmxkOworfQorCitKU0M6OkpT
VmFsdWUgdG9KUyhKU0M6OkV4ZWNTdGF0ZSosIEpTRE9NR2xvYmFsT2JqZWN0KiwgVGVzdEN1c3Rv
bU5hbWVkR2V0dGVyKik7CitUZXN0Q3VzdG9tTmFtZWRHZXR0ZXIqIHRvVGVzdEN1c3RvbU5hbWVk
R2V0dGVyKEpTQzo6SlNWYWx1ZSk7CisKK2NsYXNzIEpTVGVzdEN1c3RvbU5hbWVkR2V0dGVyUHJv
dG90eXBlIDogcHVibGljIEpTQzo6SlNOb25GaW5hbE9iamVjdCB7CitwdWJsaWM6CisgICAgdHlw
ZWRlZiBKU0M6OkpTTm9uRmluYWxPYmplY3QgQmFzZTsKKyAgICBzdGF0aWMgSlNDOjpKU09iamVj
dCogc2VsZihKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6SlNHbG9iYWxPYmplY3QqKTsKKyAgICBzdGF0
aWMgSlNUZXN0Q3VzdG9tTmFtZWRHZXR0ZXJQcm90b3R5cGUqIGNyZWF0ZShKU0M6OkpTR2xvYmFs
RGF0YSYgZ2xvYmFsRGF0YSwgSlNDOjpKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU0M6
OlN0cnVjdHVyZSogc3RydWN0dXJlKQorICAgIHsKKyAgICAgICAgSlNUZXN0Q3VzdG9tTmFtZWRH
ZXR0ZXJQcm90b3R5cGUqIHB0ciA9IG5ldyAoTm90TnVsbCwgSlNDOjphbGxvY2F0ZUNlbGw8SlNU
ZXN0Q3VzdG9tTmFtZWRHZXR0ZXJQcm90b3R5cGU+KGdsb2JhbERhdGEuaGVhcCkpIEpTVGVzdEN1
c3RvbU5hbWVkR2V0dGVyUHJvdG90eXBlKGdsb2JhbERhdGEsIGdsb2JhbE9iamVjdCwgc3RydWN0
dXJlKTsKKyAgICAgICAgcHRyLT5maW5pc2hDcmVhdGlvbihnbG9iYWxEYXRhKTsKKyAgICAgICAg
cmV0dXJuIHB0cjsKKyAgICB9CisKKyAgICBzdGF0aWMgY29uc3QgSlNDOjpDbGFzc0luZm8gc19p
bmZvOworICAgIHN0YXRpYyBib29sIGdldE93blByb3BlcnR5U2xvdChKU0M6OkpTQ2VsbCosIEpT
Qzo6RXhlY1N0YXRlKiwgY29uc3QgSlNDOjpJZGVudGlmaWVyJiwgSlNDOjpQcm9wZXJ0eVNsb3Qm
KTsKKyAgICBzdGF0aWMgYm9vbCBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoSlNDOjpKU09iamVj
dCosIEpTQzo6RXhlY1N0YXRlKiwgY29uc3QgSlNDOjpJZGVudGlmaWVyJiwgSlNDOjpQcm9wZXJ0
eURlc2NyaXB0b3ImKTsKKyAgICBzdGF0aWMgSlNDOjpTdHJ1Y3R1cmUqIGNyZWF0ZVN0cnVjdHVy
ZShKU0M6OkpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgSlNDOjpKU0dsb2JhbE9iamVjdCogZ2xv
YmFsT2JqZWN0LCBKU0M6OkpTVmFsdWUgcHJvdG90eXBlKQorICAgIHsKKyAgICAgICAgcmV0dXJu
IEpTQzo6U3RydWN0dXJlOjpjcmVhdGUoZ2xvYmFsRGF0YSwgZ2xvYmFsT2JqZWN0LCBwcm90b3R5
cGUsIEpTQzo6VHlwZUluZm8oSlNDOjpPYmplY3RUeXBlLCBTdHJ1Y3R1cmVGbGFncyksICZzX2lu
Zm8pOworICAgIH0KKworcHJpdmF0ZToKKyAgICBKU1Rlc3RDdXN0b21OYW1lZEdldHRlclByb3Rv
dHlwZShKU0M6OkpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgSlNDOjpKU0dsb2JhbE9iamVjdCos
IEpTQzo6U3RydWN0dXJlKiBzdHJ1Y3R1cmUpIDogSlNDOjpKU05vbkZpbmFsT2JqZWN0KGdsb2Jh
bERhdGEsIHN0cnVjdHVyZSkgeyB9Citwcm90ZWN0ZWQ6CisgICAgc3RhdGljIGNvbnN0IHVuc2ln
bmVkIFN0cnVjdHVyZUZsYWdzID0gSlNDOjpPdmVycmlkZXNHZXRPd25Qcm9wZXJ0eVNsb3QgfCBC
YXNlOjpTdHJ1Y3R1cmVGbGFnczsKK307CisKK2NsYXNzIEpTVGVzdEN1c3RvbU5hbWVkR2V0dGVy
Q29uc3RydWN0b3IgOiBwdWJsaWMgRE9NQ29uc3RydWN0b3JPYmplY3QgeworcHJpdmF0ZToKKyAg
ICBKU1Rlc3RDdXN0b21OYW1lZEdldHRlckNvbnN0cnVjdG9yKEpTQzo6U3RydWN0dXJlKiwgSlNE
T01HbG9iYWxPYmplY3QqKTsKKyAgICB2b2lkIGZpbmlzaENyZWF0aW9uKEpTQzo6RXhlY1N0YXRl
KiwgSlNET01HbG9iYWxPYmplY3QqKTsKKworcHVibGljOgorICAgIHR5cGVkZWYgRE9NQ29uc3Ry
dWN0b3JPYmplY3QgQmFzZTsKKyAgICBzdGF0aWMgSlNUZXN0Q3VzdG9tTmFtZWRHZXR0ZXJDb25z
dHJ1Y3RvciogY3JlYXRlKEpTQzo6RXhlY1N0YXRlKiBleGVjLCBKU0M6OlN0cnVjdHVyZSogc3Ry
dWN0dXJlLCBKU0RPTUdsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0KQorICAgIHsKKyAgICAgICAg
SlNUZXN0Q3VzdG9tTmFtZWRHZXR0ZXJDb25zdHJ1Y3RvciogcHRyID0gbmV3IChOb3ROdWxsLCBK
U0M6OmFsbG9jYXRlQ2VsbDxKU1Rlc3RDdXN0b21OYW1lZEdldHRlckNvbnN0cnVjdG9yPigqZXhl
Yy0+aGVhcCgpKSkgSlNUZXN0Q3VzdG9tTmFtZWRHZXR0ZXJDb25zdHJ1Y3RvcihzdHJ1Y3R1cmUs
IGdsb2JhbE9iamVjdCk7CisgICAgICAgIHB0ci0+ZmluaXNoQ3JlYXRpb24oZXhlYywgZ2xvYmFs
T2JqZWN0KTsKKyAgICAgICAgcmV0dXJuIHB0cjsKKyAgICB9CisKKyAgICBzdGF0aWMgYm9vbCBn
ZXRPd25Qcm9wZXJ0eVNsb3QoSlNDOjpKU0NlbGwqLCBKU0M6OkV4ZWNTdGF0ZSosIGNvbnN0IEpT
Qzo6SWRlbnRpZmllciYsIEpTQzo6UHJvcGVydHlTbG90Jik7CisgICAgc3RhdGljIGJvb2wgZ2V0
T3duUHJvcGVydHlEZXNjcmlwdG9yKEpTQzo6SlNPYmplY3QqLCBKU0M6OkV4ZWNTdGF0ZSosIGNv
bnN0IEpTQzo6SWRlbnRpZmllciYsIEpTQzo6UHJvcGVydHlEZXNjcmlwdG9yJik7CisgICAgc3Rh
dGljIGNvbnN0IEpTQzo6Q2xhc3NJbmZvIHNfaW5mbzsKKyAgICBzdGF0aWMgSlNDOjpTdHJ1Y3R1
cmUqIGNyZWF0ZVN0cnVjdHVyZShKU0M6OkpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgSlNDOjpK
U0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU0M6OkpTVmFsdWUgcHJvdG90eXBlKQorICAg
IHsKKyAgICAgICAgcmV0dXJuIEpTQzo6U3RydWN0dXJlOjpjcmVhdGUoZ2xvYmFsRGF0YSwgZ2xv
YmFsT2JqZWN0LCBwcm90b3R5cGUsIEpTQzo6VHlwZUluZm8oSlNDOjpPYmplY3RUeXBlLCBTdHJ1
Y3R1cmVGbGFncyksICZzX2luZm8pOworICAgIH0KK3Byb3RlY3RlZDoKKyAgICBzdGF0aWMgY29u
c3QgdW5zaWduZWQgU3RydWN0dXJlRmxhZ3MgPSBKU0M6Ok92ZXJyaWRlc0dldE93blByb3BlcnR5
U2xvdCB8IEpTQzo6SW1wbGVtZW50c0hhc0luc3RhbmNlIHwgRE9NQ29uc3RydWN0b3JPYmplY3Q6
OlN0cnVjdHVyZUZsYWdzOworfTsKKworLy8gRnVuY3Rpb25zCisKK0pTQzo6RW5jb2RlZEpTVmFs
dWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RDdXN0b21OYW1lZEdldHRlclByb3RvdHlwZUZ1bmN0aW9u
QW5vdGhlckZ1bmN0aW9uKEpTQzo6RXhlY1N0YXRlKik7CisvLyBBdHRyaWJ1dGVzCisKK0pTQzo6
SlNWYWx1ZSBqc1Rlc3RDdXN0b21OYW1lZEdldHRlckNvbnN0cnVjdG9yKEpTQzo6RXhlY1N0YXRl
KiwgSlNDOjpKU1ZhbHVlLCBjb25zdCBKU0M6OklkZW50aWZpZXImKTsKKworfSAvLyBuYW1lc3Bh
Y2UgV2ViQ29yZQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RPdmVycmlkaW5nTmFtZUdldHRlci5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0T3ZlcnJpZGluZ05hbWVHZXR0
ZXIuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlZThkYjFiODRmMjgzN2RkZDU2
YzViODUwYTdiNmU2ZWMxMmM0YzVlLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rl
c3RPdmVycmlkaW5nTmFtZUdldHRlci5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSwyMjAgKzAsMCBA
QAotLyoKLSAgICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgV2ViS2l0IG9wZW4gc291cmNlIHBy
b2plY3QuCi0gICAgVGhpcyBmaWxlIGhhcyBiZWVuIGdlbmVyYXRlZCBieSBnZW5lcmF0ZS1iaW5k
aW5ncy5wbC4gRE8gTk9UIE1PRElGWSEKLQotICAgIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3
YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAgICBtb2RpZnkgaXQgdW5kZXIg
dGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICAgIExpY2Vuc2Ug
YXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICAg
IHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIg
dmVyc2lvbi4KLQotICAgIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0
aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0
aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gICAgTUVSQ0hBTlRBQklMSVRZIG9y
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAgICBMaWJy
YXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLQotICAgIFlvdSBz
aG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVi
bGljIExpY2Vuc2UKLSAgICBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENP
UFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bwotICAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5k
YXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCi0gICAgQm9zdG9u
LCBNQSAwMjExMC0xMzAxLCBVU0EuCi0qLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVk
ZSAiSlNUZXN0T3ZlcnJpZGluZ05hbWVHZXR0ZXIuaCIKLQotI2luY2x1ZGUgIkV4Y2VwdGlvbkNv
ZGUuaCIKLSNpbmNsdWRlICJKU0RPTUJpbmRpbmcuaCIKLSNpbmNsdWRlICJUZXN0T3ZlcnJpZGlu
Z05hbWVHZXR0ZXIuaCIKLSNpbmNsdWRlICJ3dGYvdGV4dC9BdG9taWNTdHJpbmcuaCIKLSNpbmNs
dWRlIDxydW50aW1lL0Vycm9yLmg+Ci0jaW5jbHVkZSA8d3RmL0dldFB0ci5oPgotCi11c2luZyBu
YW1lc3BhY2UgSlNDOwotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLUFTU0VSVF9DTEFTU19GSVRT
X0lOX0NFTEwoSlNUZXN0T3ZlcnJpZGluZ05hbWVHZXR0ZXIpOwotQVNTRVJUX0hBU19UUklWSUFM
X0RFU1RSVUNUT1IoSlNUZXN0T3ZlcnJpZGluZ05hbWVHZXR0ZXIpOwotCi0vKiBIYXNoIHRhYmxl
ICovCi0KLXN0YXRpYyBjb25zdCBIYXNoVGFibGVWYWx1ZSBKU1Rlc3RPdmVycmlkaW5nTmFtZUdl
dHRlclRhYmxlVmFsdWVzW10gPQotewotICAgIHsgImNvbnN0cnVjdG9yIiwgRG9udEVudW0gfCBS
ZWFkT25seSwgKGludHB0cl90KXN0YXRpY19jYXN0PFByb3BlcnR5U2xvdDo6R2V0VmFsdWVGdW5j
Pihqc1Rlc3RPdmVycmlkaW5nTmFtZUdldHRlckNvbnN0cnVjdG9yKSwgKGludHB0cl90KTAsIE5v
SW50cmluc2ljIH0sCi0gICAgeyAwLCAwLCAwLCAwLCBOb0ludHJpbnNpYyB9Ci19OwotCi1zdGF0
aWMgY29uc3QgSGFzaFRhYmxlIEpTVGVzdE92ZXJyaWRpbmdOYW1lR2V0dGVyVGFibGUgPSB7IDIs
IDEsIEpTVGVzdE92ZXJyaWRpbmdOYW1lR2V0dGVyVGFibGVWYWx1ZXMsIDAgfTsKLS8qIEhhc2gg
dGFibGUgZm9yIGNvbnN0cnVjdG9yICovCi0KLXN0YXRpYyBjb25zdCBIYXNoVGFibGVWYWx1ZSBK
U1Rlc3RPdmVycmlkaW5nTmFtZUdldHRlckNvbnN0cnVjdG9yVGFibGVWYWx1ZXNbXSA9Ci17Ci0g
ICAgeyAwLCAwLCAwLCAwLCBOb0ludHJpbnNpYyB9Ci19OwotCi1zdGF0aWMgY29uc3QgSGFzaFRh
YmxlIEpTVGVzdE92ZXJyaWRpbmdOYW1lR2V0dGVyQ29uc3RydWN0b3JUYWJsZSA9IHsgMSwgMCwg
SlNUZXN0T3ZlcnJpZGluZ05hbWVHZXR0ZXJDb25zdHJ1Y3RvclRhYmxlVmFsdWVzLCAwIH07Ci1B
U1NFUlRfSEFTX1RSSVZJQUxfREVTVFJVQ1RPUihKU1Rlc3RPdmVycmlkaW5nTmFtZUdldHRlckNv
bnN0cnVjdG9yKTsKLQotY29uc3QgQ2xhc3NJbmZvIEpTVGVzdE92ZXJyaWRpbmdOYW1lR2V0dGVy
Q29uc3RydWN0b3I6OnNfaW5mbyA9IHsgIlRlc3RPdmVycmlkaW5nTmFtZUdldHRlckNvbnN0cnVj
dG9yIiwgJkJhc2U6OnNfaW5mbywgJkpTVGVzdE92ZXJyaWRpbmdOYW1lR2V0dGVyQ29uc3RydWN0
b3JUYWJsZSwgMCwgQ1JFQVRFX01FVEhPRF9UQUJMRShKU1Rlc3RPdmVycmlkaW5nTmFtZUdldHRl
ckNvbnN0cnVjdG9yKSB9OwotCi1KU1Rlc3RPdmVycmlkaW5nTmFtZUdldHRlckNvbnN0cnVjdG9y
OjpKU1Rlc3RPdmVycmlkaW5nTmFtZUdldHRlckNvbnN0cnVjdG9yKFN0cnVjdHVyZSogc3RydWN0
dXJlLCBKU0RPTUdsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0KQotICAgIDogRE9NQ29uc3RydWN0
b3JPYmplY3Qoc3RydWN0dXJlLCBnbG9iYWxPYmplY3QpCi17Ci19Ci0KLXZvaWQgSlNUZXN0T3Zl
cnJpZGluZ05hbWVHZXR0ZXJDb25zdHJ1Y3Rvcjo6ZmluaXNoQ3JlYXRpb24oRXhlY1N0YXRlKiBl
eGVjLCBKU0RPTUdsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0KQotewotICAgIEJhc2U6OmZpbmlz
aENyZWF0aW9uKGV4ZWMtPmdsb2JhbERhdGEoKSk7Ci0gICAgQVNTRVJUKGluaGVyaXRzKCZzX2lu
Zm8pKTsKLSAgICBwdXREaXJlY3QoZXhlYy0+Z2xvYmFsRGF0YSgpLCBleGVjLT5wcm9wZXJ0eU5h
bWVzKCkucHJvdG90eXBlLCBKU1Rlc3RPdmVycmlkaW5nTmFtZUdldHRlclByb3RvdHlwZTo6c2Vs
ZihleGVjLCBnbG9iYWxPYmplY3QpLCBEb250RGVsZXRlIHwgUmVhZE9ubHkpOwotfQotCi1ib29s
IEpTVGVzdE92ZXJyaWRpbmdOYW1lR2V0dGVyQ29uc3RydWN0b3I6OmdldE93blByb3BlcnR5U2xv
dChKU0NlbGwqIGNlbGwsIEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgSWRlbnRpZmllciYgcHJvcGVy
dHlOYW1lLCBQcm9wZXJ0eVNsb3QmIHNsb3QpCi17Ci0gICAgcmV0dXJuIGdldFN0YXRpY1ZhbHVl
U2xvdDxKU1Rlc3RPdmVycmlkaW5nTmFtZUdldHRlckNvbnN0cnVjdG9yLCBKU0RPTVdyYXBwZXI+
KGV4ZWMsICZKU1Rlc3RPdmVycmlkaW5nTmFtZUdldHRlckNvbnN0cnVjdG9yVGFibGUsIHN0YXRp
Y19jYXN0PEpTVGVzdE92ZXJyaWRpbmdOYW1lR2V0dGVyQ29uc3RydWN0b3IqPihjZWxsKSwgcHJv
cGVydHlOYW1lLCBzbG90KTsKLX0KLQotYm9vbCBKU1Rlc3RPdmVycmlkaW5nTmFtZUdldHRlckNv
bnN0cnVjdG9yOjpnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoSlNPYmplY3QqIG9iamVjdCwgRXhl
Y1N0YXRlKiBleGVjLCBjb25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0eU5hbWUsIFByb3BlcnR5RGVz
Y3JpcHRvciYgZGVzY3JpcHRvcikKLXsKLSAgICByZXR1cm4gZ2V0U3RhdGljVmFsdWVEZXNjcmlw
dG9yPEpTVGVzdE92ZXJyaWRpbmdOYW1lR2V0dGVyQ29uc3RydWN0b3IsIEpTRE9NV3JhcHBlcj4o
ZXhlYywgJkpTVGVzdE92ZXJyaWRpbmdOYW1lR2V0dGVyQ29uc3RydWN0b3JUYWJsZSwgc3RhdGlj
X2Nhc3Q8SlNUZXN0T3ZlcnJpZGluZ05hbWVHZXR0ZXJDb25zdHJ1Y3Rvcio+KG9iamVjdCksIHBy
b3BlcnR5TmFtZSwgZGVzY3JpcHRvcik7Ci19Ci0KLS8qIEhhc2ggdGFibGUgZm9yIHByb3RvdHlw
ZSAqLwotCi1zdGF0aWMgY29uc3QgSGFzaFRhYmxlVmFsdWUgSlNUZXN0T3ZlcnJpZGluZ05hbWVH
ZXR0ZXJQcm90b3R5cGVUYWJsZVZhbHVlc1tdID0KLXsKLSAgICB7ICJhbm90aGVyRnVuY3Rpb24i
LCBEb250RGVsZXRlIHwgSlNDOjpGdW5jdGlvbiwgKGludHB0cl90KXN0YXRpY19jYXN0PE5hdGl2
ZUZ1bmN0aW9uPihqc1Rlc3RPdmVycmlkaW5nTmFtZUdldHRlclByb3RvdHlwZUZ1bmN0aW9uQW5v
dGhlckZ1bmN0aW9uKSwgKGludHB0cl90KTEsIE5vSW50cmluc2ljIH0sCi0gICAgeyAwLCAwLCAw
LCAwLCBOb0ludHJpbnNpYyB9Ci19OwotCi1zdGF0aWMgY29uc3QgSGFzaFRhYmxlIEpTVGVzdE92
ZXJyaWRpbmdOYW1lR2V0dGVyUHJvdG90eXBlVGFibGUgPSB7IDIsIDEsIEpTVGVzdE92ZXJyaWRp
bmdOYW1lR2V0dGVyUHJvdG90eXBlVGFibGVWYWx1ZXMsIDAgfTsKLWNvbnN0IENsYXNzSW5mbyBK
U1Rlc3RPdmVycmlkaW5nTmFtZUdldHRlclByb3RvdHlwZTo6c19pbmZvID0geyAiVGVzdE92ZXJy
aWRpbmdOYW1lR2V0dGVyUHJvdG90eXBlIiwgJkJhc2U6OnNfaW5mbywgJkpTVGVzdE92ZXJyaWRp
bmdOYW1lR2V0dGVyUHJvdG90eXBlVGFibGUsIDAsIENSRUFURV9NRVRIT0RfVEFCTEUoSlNUZXN0
T3ZlcnJpZGluZ05hbWVHZXR0ZXJQcm90b3R5cGUpIH07Ci0KLUpTT2JqZWN0KiBKU1Rlc3RPdmVy
cmlkaW5nTmFtZUdldHRlclByb3RvdHlwZTo6c2VsZihFeGVjU3RhdGUqIGV4ZWMsIEpTR2xvYmFs
T2JqZWN0KiBnbG9iYWxPYmplY3QpCi17Ci0gICAgcmV0dXJuIGdldERPTVByb3RvdHlwZTxKU1Rl
c3RPdmVycmlkaW5nTmFtZUdldHRlcj4oZXhlYywgZ2xvYmFsT2JqZWN0KTsKLX0KLQotYm9vbCBK
U1Rlc3RPdmVycmlkaW5nTmFtZUdldHRlclByb3RvdHlwZTo6Z2V0T3duUHJvcGVydHlTbG90KEpT
Q2VsbCogY2VsbCwgRXhlY1N0YXRlKiBleGVjLCBjb25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0eU5h
bWUsIFByb3BlcnR5U2xvdCYgc2xvdCkKLXsKLSAgICBKU1Rlc3RPdmVycmlkaW5nTmFtZUdldHRl
clByb3RvdHlwZSogdGhpc09iamVjdCA9IGpzQ2FzdDxKU1Rlc3RPdmVycmlkaW5nTmFtZUdldHRl
clByb3RvdHlwZSo+KGNlbGwpOwotICAgIHJldHVybiBnZXRTdGF0aWNGdW5jdGlvblNsb3Q8SlNP
YmplY3Q+KGV4ZWMsICZKU1Rlc3RPdmVycmlkaW5nTmFtZUdldHRlclByb3RvdHlwZVRhYmxlLCB0
aGlzT2JqZWN0LCBwcm9wZXJ0eU5hbWUsIHNsb3QpOwotfQotCi1ib29sIEpTVGVzdE92ZXJyaWRp
bmdOYW1lR2V0dGVyUHJvdG90eXBlOjpnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoSlNPYmplY3Qq
IG9iamVjdCwgRXhlY1N0YXRlKiBleGVjLCBjb25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0eU5hbWUs
IFByb3BlcnR5RGVzY3JpcHRvciYgZGVzY3JpcHRvcikKLXsKLSAgICBKU1Rlc3RPdmVycmlkaW5n
TmFtZUdldHRlclByb3RvdHlwZSogdGhpc09iamVjdCA9IGpzQ2FzdDxKU1Rlc3RPdmVycmlkaW5n
TmFtZUdldHRlclByb3RvdHlwZSo+KG9iamVjdCk7Ci0gICAgcmV0dXJuIGdldFN0YXRpY0Z1bmN0
aW9uRGVzY3JpcHRvcjxKU09iamVjdD4oZXhlYywgJkpTVGVzdE92ZXJyaWRpbmdOYW1lR2V0dGVy
UHJvdG90eXBlVGFibGUsIHRoaXNPYmplY3QsIHByb3BlcnR5TmFtZSwgZGVzY3JpcHRvcik7Ci19
Ci0KLWNvbnN0IENsYXNzSW5mbyBKU1Rlc3RPdmVycmlkaW5nTmFtZUdldHRlcjo6c19pbmZvID0g
eyAiVGVzdE92ZXJyaWRpbmdOYW1lR2V0dGVyIiwgJkJhc2U6OnNfaW5mbywgJkpTVGVzdE92ZXJy
aWRpbmdOYW1lR2V0dGVyVGFibGUsIDAgLCBDUkVBVEVfTUVUSE9EX1RBQkxFKEpTVGVzdE92ZXJy
aWRpbmdOYW1lR2V0dGVyKSB9OwotCi1KU1Rlc3RPdmVycmlkaW5nTmFtZUdldHRlcjo6SlNUZXN0
T3ZlcnJpZGluZ05hbWVHZXR0ZXIoU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIEpTRE9NR2xvYmFsT2Jq
ZWN0KiBnbG9iYWxPYmplY3QsIFBhc3NSZWZQdHI8VGVzdE92ZXJyaWRpbmdOYW1lR2V0dGVyPiBp
bXBsKQotICAgIDogSlNET01XcmFwcGVyKHN0cnVjdHVyZSwgZ2xvYmFsT2JqZWN0KQotICAgICwg
bV9pbXBsKGltcGwubGVha1JlZigpKQotewotfQotCi12b2lkIEpTVGVzdE92ZXJyaWRpbmdOYW1l
R2V0dGVyOjpmaW5pc2hDcmVhdGlvbihKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEpCi17Ci0gICAg
QmFzZTo6ZmluaXNoQ3JlYXRpb24oZ2xvYmFsRGF0YSk7Ci0gICAgQVNTRVJUKGluaGVyaXRzKCZz
X2luZm8pKTsKLX0KLQotSlNPYmplY3QqIEpTVGVzdE92ZXJyaWRpbmdOYW1lR2V0dGVyOjpjcmVh
dGVQcm90b3R5cGUoRXhlY1N0YXRlKiBleGVjLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0
KQotewotICAgIHJldHVybiBKU1Rlc3RPdmVycmlkaW5nTmFtZUdldHRlclByb3RvdHlwZTo6Y3Jl
YXRlKGV4ZWMtPmdsb2JhbERhdGEoKSwgZ2xvYmFsT2JqZWN0LCBKU1Rlc3RPdmVycmlkaW5nTmFt
ZUdldHRlclByb3RvdHlwZTo6Y3JlYXRlU3RydWN0dXJlKGdsb2JhbE9iamVjdC0+Z2xvYmFsRGF0
YSgpLCBnbG9iYWxPYmplY3QsIGdsb2JhbE9iamVjdC0+b2JqZWN0UHJvdG90eXBlKCkpKTsKLX0K
LQotdm9pZCBKU1Rlc3RPdmVycmlkaW5nTmFtZUdldHRlcjo6ZGVzdHJveShKU0M6OkpTQ2VsbCog
Y2VsbCkKLXsKLSAgICBKU1Rlc3RPdmVycmlkaW5nTmFtZUdldHRlciogdGhpc09iamVjdCA9IGpz
Q2FzdDxKU1Rlc3RPdmVycmlkaW5nTmFtZUdldHRlcio+KGNlbGwpOwotICAgIHRoaXNPYmplY3Qt
PnJlbGVhc2VJbXBsSWZOb3ROdWxsKCk7Ci19Ci0KLWJvb2wgSlNUZXN0T3ZlcnJpZGluZ05hbWVH
ZXR0ZXI6OmdldE93blByb3BlcnR5U2xvdChKU0NlbGwqIGNlbGwsIEV4ZWNTdGF0ZSogZXhlYywg
Y29uc3QgSWRlbnRpZmllciYgcHJvcGVydHlOYW1lLCBQcm9wZXJ0eVNsb3QmIHNsb3QpCi17Ci0g
ICAgSlNUZXN0T3ZlcnJpZGluZ05hbWVHZXR0ZXIqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNUZXN0
T3ZlcnJpZGluZ05hbWVHZXR0ZXIqPihjZWxsKTsKLSAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVS
SVRTKHRoaXNPYmplY3QsICZzX2luZm8pOwotICAgIGlmIChjYW5HZXRJdGVtc0Zvck5hbWUoZXhl
Yywgc3RhdGljX2Nhc3Q8VGVzdE92ZXJyaWRpbmdOYW1lR2V0dGVyKj4odGhpc09iamVjdC0+aW1w
bCgpKSwgcHJvcGVydHlOYW1lKSkgewotICAgICAgICBzbG90LnNldEN1c3RvbSh0aGlzT2JqZWN0
LCB0aGlzT2JqZWN0LT5uYW1lR2V0dGVyKTsKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQot
ICAgIHJldHVybiBnZXRTdGF0aWNWYWx1ZVNsb3Q8SlNUZXN0T3ZlcnJpZGluZ05hbWVHZXR0ZXIs
IEJhc2U+KGV4ZWMsICZKU1Rlc3RPdmVycmlkaW5nTmFtZUdldHRlclRhYmxlLCB0aGlzT2JqZWN0
LCBwcm9wZXJ0eU5hbWUsIHNsb3QpOwotfQotCi1ib29sIEpTVGVzdE92ZXJyaWRpbmdOYW1lR2V0
dGVyOjpnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoSlNPYmplY3QqIG9iamVjdCwgRXhlY1N0YXRl
KiBleGVjLCBjb25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0eU5hbWUsIFByb3BlcnR5RGVzY3JpcHRv
ciYgZGVzY3JpcHRvcikKLXsKLSAgICBKU1Rlc3RPdmVycmlkaW5nTmFtZUdldHRlciogdGhpc09i
amVjdCA9IGpzQ2FzdDxKU1Rlc3RPdmVycmlkaW5nTmFtZUdldHRlcio+KG9iamVjdCk7Ci0gICAg
QVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0LCAmc19pbmZvKTsKLSAgICBpZiAo
Y2FuR2V0SXRlbXNGb3JOYW1lKGV4ZWMsIHN0YXRpY19jYXN0PFRlc3RPdmVycmlkaW5nTmFtZUdl
dHRlcio+KHRoaXNPYmplY3QtPmltcGwoKSksIHByb3BlcnR5TmFtZSkpIHsKLSAgICAgICAgUHJv
cGVydHlTbG90IHNsb3Q7Ci0gICAgICAgIHNsb3Quc2V0Q3VzdG9tKHRoaXNPYmplY3QsIG5hbWVH
ZXR0ZXIpOwotICAgICAgICBkZXNjcmlwdG9yLnNldERlc2NyaXB0b3Ioc2xvdC5nZXRWYWx1ZShl
eGVjLCBwcm9wZXJ0eU5hbWUpLCBSZWFkT25seSB8IERvbnREZWxldGUgfCBEb250RW51bSk7Ci0g
ICAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLSAgICByZXR1cm4gZ2V0U3RhdGljVmFsdWVEZXNj
cmlwdG9yPEpTVGVzdE92ZXJyaWRpbmdOYW1lR2V0dGVyLCBCYXNlPihleGVjLCAmSlNUZXN0T3Zl
cnJpZGluZ05hbWVHZXR0ZXJUYWJsZSwgdGhpc09iamVjdCwgcHJvcGVydHlOYW1lLCBkZXNjcmlw
dG9yKTsKLX0KLQotSlNWYWx1ZSBqc1Rlc3RPdmVycmlkaW5nTmFtZUdldHRlckNvbnN0cnVjdG9y
KEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZSBzbG90QmFzZSwgY29uc3QgSWRlbnRpZmllciYpCi17
Ci0gICAgSlNUZXN0T3ZlcnJpZGluZ05hbWVHZXR0ZXIqIGRvbU9iamVjdCA9IHN0YXRpY19jYXN0
PEpTVGVzdE92ZXJyaWRpbmdOYW1lR2V0dGVyKj4oYXNPYmplY3Qoc2xvdEJhc2UpKTsKLSAgICBy
ZXR1cm4gSlNUZXN0T3ZlcnJpZGluZ05hbWVHZXR0ZXI6OmdldENvbnN0cnVjdG9yKGV4ZWMsIGRv
bU9iamVjdC0+Z2xvYmFsT2JqZWN0KCkpOwotfQotCi1KU1ZhbHVlIEpTVGVzdE92ZXJyaWRpbmdO
YW1lR2V0dGVyOjpnZXRDb25zdHJ1Y3RvcihFeGVjU3RhdGUqIGV4ZWMsIEpTR2xvYmFsT2JqZWN0
KiBnbG9iYWxPYmplY3QpCi17Ci0gICAgcmV0dXJuIGdldERPTUNvbnN0cnVjdG9yPEpTVGVzdE92
ZXJyaWRpbmdOYW1lR2V0dGVyQ29uc3RydWN0b3I+KGV4ZWMsIHN0YXRpY19jYXN0PEpTRE9NR2xv
YmFsT2JqZWN0Kj4oZ2xvYmFsT2JqZWN0KSk7Ci19Ci0KLUVuY29kZWRKU1ZhbHVlIEpTQ19IT1NU
X0NBTEwganNUZXN0T3ZlcnJpZGluZ05hbWVHZXR0ZXJQcm90b3R5cGVGdW5jdGlvbkFub3RoZXJG
dW5jdGlvbihFeGVjU3RhdGUqIGV4ZWMpCi17Ci0gICAgSlNWYWx1ZSB0aGlzVmFsdWUgPSBleGVj
LT5ob3N0VGhpc1ZhbHVlKCk7Ci0gICAgaWYgKCF0aGlzVmFsdWUuaW5oZXJpdHMoJkpTVGVzdE92
ZXJyaWRpbmdOYW1lR2V0dGVyOjpzX2luZm8pKQotICAgICAgICByZXR1cm4gdGhyb3dWTVR5cGVF
cnJvcihleGVjKTsKLSAgICBKU1Rlc3RPdmVycmlkaW5nTmFtZUdldHRlciogY2FzdGVkVGhpcyA9
IHN0YXRpY19jYXN0PEpTVGVzdE92ZXJyaWRpbmdOYW1lR2V0dGVyKj4oYXNPYmplY3QodGhpc1Zh
bHVlKSk7Ci0gICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyhjYXN0ZWRUaGlzLCAmSlNUZXN0
T3ZlcnJpZGluZ05hbWVHZXR0ZXI6OnNfaW5mbyk7Ci0gICAgVGVzdE92ZXJyaWRpbmdOYW1lR2V0
dGVyKiBpbXBsID0gc3RhdGljX2Nhc3Q8VGVzdE92ZXJyaWRpbmdOYW1lR2V0dGVyKj4oY2FzdGVk
VGhpcy0+aW1wbCgpKTsKLSAgICBpZiAoZXhlYy0+YXJndW1lbnRDb3VudCgpIDwgMSkKLSAgICAg
ICAgcmV0dXJuIHRocm93Vk1FcnJvcihleGVjLCBjcmVhdGVUeXBlRXJyb3IoZXhlYywgIk5vdCBl
bm91Z2ggYXJndW1lbnRzIikpOwotICAgIGNvbnN0IFN0cmluZyYgc3RyKHVzdHJpbmdUb1N0cmlu
ZyhNQVlCRV9NSVNTSU5HX1BBUkFNRVRFUihleGVjLCAwLCBNaXNzaW5nSXNVbmRlZmluZWQpLmlz
RW1wdHkoKSA/IFVTdHJpbmcoKSA6IE1BWUJFX01JU1NJTkdfUEFSQU1FVEVSKGV4ZWMsIDAsIE1p
c3NpbmdJc1VuZGVmaW5lZCkudG9TdHJpbmcoZXhlYyktPnZhbHVlKGV4ZWMpKSk7Ci0gICAgaWYg
KGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQotICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpz
VW5kZWZpbmVkKCkpOwotICAgIGltcGwtPmFub3RoZXJGdW5jdGlvbihzdHIpOwotICAgIHJldHVy
biBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgYm9v
bCBpc09ic2VydmFibGUoSlNUZXN0T3ZlcnJpZGluZ05hbWVHZXR0ZXIqIGpzVGVzdE92ZXJyaWRp
bmdOYW1lR2V0dGVyKQotewotICAgIGlmIChqc1Rlc3RPdmVycmlkaW5nTmFtZUdldHRlci0+aGFz
Q3VzdG9tUHJvcGVydGllcygpKQotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICByZXR1cm4gZmFs
c2U7Ci19Ci0KLWJvb2wgSlNUZXN0T3ZlcnJpZGluZ05hbWVHZXR0ZXJPd25lcjo6aXNSZWFjaGFi
bGVGcm9tT3BhcXVlUm9vdHMoSlNDOjpIYW5kbGU8SlNDOjpVbmtub3duPiBoYW5kbGUsIHZvaWQq
LCBTbG90VmlzaXRvciYgdmlzaXRvcikKLXsKLSAgICBKU1Rlc3RPdmVycmlkaW5nTmFtZUdldHRl
cioganNUZXN0T3ZlcnJpZGluZ05hbWVHZXR0ZXIgPSBzdGF0aWNfY2FzdDxKU1Rlc3RPdmVycmlk
aW5nTmFtZUdldHRlcio+KGhhbmRsZS5nZXQoKS5hc0NlbGwoKSk7Ci0gICAgaWYgKCFpc09ic2Vy
dmFibGUoanNUZXN0T3ZlcnJpZGluZ05hbWVHZXR0ZXIpKQotICAgICAgICByZXR1cm4gZmFsc2U7
Ci0gICAgVU5VU0VEX1BBUkFNKHZpc2l0b3IpOwotICAgIHJldHVybiBmYWxzZTsKLX0KLQotdm9p
ZCBKU1Rlc3RPdmVycmlkaW5nTmFtZUdldHRlck93bmVyOjpmaW5hbGl6ZShKU0M6OkhhbmRsZTxK
U0M6OlVua25vd24+IGhhbmRsZSwgdm9pZCogY29udGV4dCkKLXsKLSAgICBKU1Rlc3RPdmVycmlk
aW5nTmFtZUdldHRlcioganNUZXN0T3ZlcnJpZGluZ05hbWVHZXR0ZXIgPSBzdGF0aWNfY2FzdDxK
U1Rlc3RPdmVycmlkaW5nTmFtZUdldHRlcio+KGhhbmRsZS5nZXQoKS5hc0NlbGwoKSk7Ci0gICAg
RE9NV3JhcHBlcldvcmxkKiB3b3JsZCA9IHN0YXRpY19jYXN0PERPTVdyYXBwZXJXb3JsZCo+KGNv
bnRleHQpOwotICAgIHVuY2FjaGVXcmFwcGVyKHdvcmxkLCBqc1Rlc3RPdmVycmlkaW5nTmFtZUdl
dHRlci0+aW1wbCgpLCBqc1Rlc3RPdmVycmlkaW5nTmFtZUdldHRlcik7Ci0gICAganNUZXN0T3Zl
cnJpZGluZ05hbWVHZXR0ZXItPnJlbGVhc2VJbXBsKCk7Ci19Ci0KLUpTQzo6SlNWYWx1ZSB0b0pT
KEpTQzo6RXhlY1N0YXRlKiBleGVjLCBKU0RPTUdsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBU
ZXN0T3ZlcnJpZGluZ05hbWVHZXR0ZXIqIGltcGwpCi17Ci0gICAgcmV0dXJuIHdyYXA8SlNUZXN0
T3ZlcnJpZGluZ05hbWVHZXR0ZXI+KGV4ZWMsIGdsb2JhbE9iamVjdCwgaW1wbCk7Ci19Ci0KLVRl
c3RPdmVycmlkaW5nTmFtZUdldHRlciogdG9UZXN0T3ZlcnJpZGluZ05hbWVHZXR0ZXIoSlNDOjpK
U1ZhbHVlIHZhbHVlKQotewotICAgIHJldHVybiB2YWx1ZS5pbmhlcml0cygmSlNUZXN0T3ZlcnJp
ZGluZ05hbWVHZXR0ZXI6OnNfaW5mbykgPyBzdGF0aWNfY2FzdDxKU1Rlc3RPdmVycmlkaW5nTmFt
ZUdldHRlcio+KGFzT2JqZWN0KHZhbHVlKSktPmltcGwoKSA6IDA7Ci19Ci0KLX0KZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RPdmVycmlk
aW5nTmFtZUdldHRlci5oIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pT
L0pTVGVzdE92ZXJyaWRpbmdOYW1lR2V0dGVyLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDIyMGJmZDMzYzJmYjYyYmU5MWRiZmMzNzk5MzM4MmI3NzNjZmMxYzAuLjAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGlu
Z3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE92ZXJyaWRpbmdOYW1lR2V0dGVyLmgKKysrIC9kZXYv
bnVsbApAQCAtMSwxNDggKzAsMCBAQAotLyoKLSAgICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUg
V2ViS2l0IG9wZW4gc291cmNlIHByb2plY3QuCi0gICAgVGhpcyBmaWxlIGhhcyBiZWVuIGdlbmVy
YXRlZCBieSBnZW5lcmF0ZS1iaW5kaW5ncy5wbC4gRE8gTk9UIE1PRElGWSEKLQotICAgIFRoaXMg
bGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IK
LSAgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFs
IFB1YmxpYwotICAgIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZv
dW5kYXRpb247IGVpdGhlcgotICAgIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlv
dXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLQotICAgIFRoaXMgbGlicmFyeSBpcyBkaXN0
cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICAgIGJ1dCBXSVRI
T1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0g
ICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAg
U2VlIHRoZSBHTlUKLSAgICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUg
ZGV0YWlscy4KLQotICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdO
VSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAgICBhbG9uZyB3aXRoIHRoaXMgbGli
cmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bwotICAgIHRo
ZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlm
dGggRmxvb3IsCi0gICAgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0qLwotCi0jaWZuZGVm
IEpTVGVzdE92ZXJyaWRpbmdOYW1lR2V0dGVyX2gKLSNkZWZpbmUgSlNUZXN0T3ZlcnJpZGluZ05h
bWVHZXR0ZXJfaAotCi0jaW5jbHVkZSAiSlNET01CaW5kaW5nLmgiCi0jaW5jbHVkZSAiVGVzdE92
ZXJyaWRpbmdOYW1lR2V0dGVyLmgiCi0jaW5jbHVkZSA8cnVudGltZS9KU0dsb2JhbE9iamVjdC5o
PgotI2luY2x1ZGUgPHJ1bnRpbWUvSlNPYmplY3QuaD4KLSNpbmNsdWRlIDxydW50aW1lL09iamVj
dFByb3RvdHlwZS5oPgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLWNsYXNzIEpTVGVzdE92ZXJy
aWRpbmdOYW1lR2V0dGVyIDogcHVibGljIEpTRE9NV3JhcHBlciB7Ci1wdWJsaWM6Ci0gICAgdHlw
ZWRlZiBKU0RPTVdyYXBwZXIgQmFzZTsKLSAgICBzdGF0aWMgSlNUZXN0T3ZlcnJpZGluZ05hbWVH
ZXR0ZXIqIGNyZWF0ZShKU0M6OlN0cnVjdHVyZSogc3RydWN0dXJlLCBKU0RPTUdsb2JhbE9iamVj
dCogZ2xvYmFsT2JqZWN0LCBQYXNzUmVmUHRyPFRlc3RPdmVycmlkaW5nTmFtZUdldHRlcj4gaW1w
bCkKLSAgICB7Ci0gICAgICAgIEpTVGVzdE92ZXJyaWRpbmdOYW1lR2V0dGVyKiBwdHIgPSBuZXcg
KE5vdE51bGwsIEpTQzo6YWxsb2NhdGVDZWxsPEpTVGVzdE92ZXJyaWRpbmdOYW1lR2V0dGVyPihn
bG9iYWxPYmplY3QtPmdsb2JhbERhdGEoKS5oZWFwKSkgSlNUZXN0T3ZlcnJpZGluZ05hbWVHZXR0
ZXIoc3RydWN0dXJlLCBnbG9iYWxPYmplY3QsIGltcGwpOwotICAgICAgICBwdHItPmZpbmlzaENy
ZWF0aW9uKGdsb2JhbE9iamVjdC0+Z2xvYmFsRGF0YSgpKTsKLSAgICAgICAgcmV0dXJuIHB0cjsK
LSAgICB9Ci0KLSAgICBzdGF0aWMgSlNDOjpKU09iamVjdCogY3JlYXRlUHJvdG90eXBlKEpTQzo6
RXhlY1N0YXRlKiwgSlNDOjpKU0dsb2JhbE9iamVjdCopOwotICAgIHN0YXRpYyBib29sIGdldE93
blByb3BlcnR5U2xvdChKU0M6OkpTQ2VsbCosIEpTQzo6RXhlY1N0YXRlKiwgY29uc3QgSlNDOjpJ
ZGVudGlmaWVyJiBwcm9wZXJ0eU5hbWUsIEpTQzo6UHJvcGVydHlTbG90Jik7Ci0gICAgc3RhdGlj
IGJvb2wgZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKEpTQzo6SlNPYmplY3QqLCBKU0M6OkV4ZWNT
dGF0ZSosIGNvbnN0IEpTQzo6SWRlbnRpZmllciYgcHJvcGVydHlOYW1lLCBKU0M6OlByb3BlcnR5
RGVzY3JpcHRvciYpOwotICAgIHN0YXRpYyB2b2lkIGRlc3Ryb3koSlNDOjpKU0NlbGwqKTsKLSAg
ICBzdGF0aWMgY29uc3QgSlNDOjpDbGFzc0luZm8gc19pbmZvOwotCi0gICAgc3RhdGljIEpTQzo6
U3RydWN0dXJlKiBjcmVhdGVTdHJ1Y3R1cmUoSlNDOjpKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEs
IEpTQzo6SlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNDOjpKU1ZhbHVlIHByb3RvdHlw
ZSkKLSAgICB7Ci0gICAgICAgIHJldHVybiBKU0M6OlN0cnVjdHVyZTo6Y3JlYXRlKGdsb2JhbERh
dGEsIGdsb2JhbE9iamVjdCwgcHJvdG90eXBlLCBKU0M6OlR5cGVJbmZvKEpTQzo6T2JqZWN0VHlw
ZSwgU3RydWN0dXJlRmxhZ3MpLCAmc19pbmZvKTsKLSAgICB9Ci0KLSAgICBzdGF0aWMgSlNDOjpK
U1ZhbHVlIGdldENvbnN0cnVjdG9yKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpKU0dsb2JhbE9iamVj
dCopOwotICAgIFRlc3RPdmVycmlkaW5nTmFtZUdldHRlciogaW1wbCgpIGNvbnN0IHsgcmV0dXJu
IG1faW1wbDsgfQotICAgIHZvaWQgcmVsZWFzZUltcGwoKSB7IG1faW1wbC0+ZGVyZWYoKTsgbV9p
bXBsID0gMDsgfQotCi0gICAgdm9pZCByZWxlYXNlSW1wbElmTm90TnVsbCgpIHsgaWYgKG1faW1w
bCkgeyBtX2ltcGwtPmRlcmVmKCk7IG1faW1wbCA9IDA7IH0gfQotCi1wcml2YXRlOgotICAgIFRl
c3RPdmVycmlkaW5nTmFtZUdldHRlciogbV9pbXBsOwotcHJvdGVjdGVkOgotICAgIEpTVGVzdE92
ZXJyaWRpbmdOYW1lR2V0dGVyKEpTQzo6U3RydWN0dXJlKiwgSlNET01HbG9iYWxPYmplY3QqLCBQ
YXNzUmVmUHRyPFRlc3RPdmVycmlkaW5nTmFtZUdldHRlcj4pOwotICAgIHZvaWQgZmluaXNoQ3Jl
YXRpb24oSlNDOjpKU0dsb2JhbERhdGEmKTsKLSAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgU3Ry
dWN0dXJlRmxhZ3MgPSBKU0M6Ok92ZXJyaWRlc0dldE93blByb3BlcnR5U2xvdCB8IEJhc2U6OlN0
cnVjdHVyZUZsYWdzOwotcHJpdmF0ZToKLSAgICBzdGF0aWMgYm9vbCBjYW5HZXRJdGVtc0Zvck5h
bWUoSlNDOjpFeGVjU3RhdGUqLCBUZXN0T3ZlcnJpZGluZ05hbWVHZXR0ZXIqLCBjb25zdCBKU0M6
OklkZW50aWZpZXImKTsKLSAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIG5hbWVHZXR0ZXIoSlNDOjpF
eGVjU3RhdGUqLCBKU0M6OkpTVmFsdWUsIGNvbnN0IEpTQzo6SWRlbnRpZmllciYpOwotfTsKLQot
Y2xhc3MgSlNUZXN0T3ZlcnJpZGluZ05hbWVHZXR0ZXJPd25lciA6IHB1YmxpYyBKU0M6OldlYWtI
YW5kbGVPd25lciB7Ci0gICAgdmlydHVhbCBib29sIGlzUmVhY2hhYmxlRnJvbU9wYXF1ZVJvb3Rz
KEpTQzo6SGFuZGxlPEpTQzo6VW5rbm93bj4sIHZvaWQqIGNvbnRleHQsIEpTQzo6U2xvdFZpc2l0
b3ImKTsKLSAgICB2aXJ0dWFsIHZvaWQgZmluYWxpemUoSlNDOjpIYW5kbGU8SlNDOjpVbmtub3du
Piwgdm9pZCogY29udGV4dCk7Ci19OwotCi1pbmxpbmUgSlNDOjpXZWFrSGFuZGxlT3duZXIqIHdy
YXBwZXJPd25lcihET01XcmFwcGVyV29ybGQqLCBUZXN0T3ZlcnJpZGluZ05hbWVHZXR0ZXIqKQot
ewotICAgIERFRklORV9TVEFUSUNfTE9DQUwoSlNUZXN0T3ZlcnJpZGluZ05hbWVHZXR0ZXJPd25l
ciwganNUZXN0T3ZlcnJpZGluZ05hbWVHZXR0ZXJPd25lciwgKCkpOwotICAgIHJldHVybiAmanNU
ZXN0T3ZlcnJpZGluZ05hbWVHZXR0ZXJPd25lcjsKLX0KLQotaW5saW5lIHZvaWQqIHdyYXBwZXJD
b250ZXh0KERPTVdyYXBwZXJXb3JsZCogd29ybGQsIFRlc3RPdmVycmlkaW5nTmFtZUdldHRlciop
Ci17Ci0gICAgcmV0dXJuIHdvcmxkOwotfQotCi1KU0M6OkpTVmFsdWUgdG9KUyhKU0M6OkV4ZWNT
dGF0ZSosIEpTRE9NR2xvYmFsT2JqZWN0KiwgVGVzdE92ZXJyaWRpbmdOYW1lR2V0dGVyKik7Ci1U
ZXN0T3ZlcnJpZGluZ05hbWVHZXR0ZXIqIHRvVGVzdE92ZXJyaWRpbmdOYW1lR2V0dGVyKEpTQzo6
SlNWYWx1ZSk7Ci0KLWNsYXNzIEpTVGVzdE92ZXJyaWRpbmdOYW1lR2V0dGVyUHJvdG90eXBlIDog
cHVibGljIEpTQzo6SlNOb25GaW5hbE9iamVjdCB7Ci1wdWJsaWM6Ci0gICAgdHlwZWRlZiBKU0M6
OkpTTm9uRmluYWxPYmplY3QgQmFzZTsKLSAgICBzdGF0aWMgSlNDOjpKU09iamVjdCogc2VsZihK
U0M6OkV4ZWNTdGF0ZSosIEpTQzo6SlNHbG9iYWxPYmplY3QqKTsKLSAgICBzdGF0aWMgSlNUZXN0
T3ZlcnJpZGluZ05hbWVHZXR0ZXJQcm90b3R5cGUqIGNyZWF0ZShKU0M6OkpTR2xvYmFsRGF0YSYg
Z2xvYmFsRGF0YSwgSlNDOjpKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU0M6OlN0cnVj
dHVyZSogc3RydWN0dXJlKQotICAgIHsKLSAgICAgICAgSlNUZXN0T3ZlcnJpZGluZ05hbWVHZXR0
ZXJQcm90b3R5cGUqIHB0ciA9IG5ldyAoTm90TnVsbCwgSlNDOjphbGxvY2F0ZUNlbGw8SlNUZXN0
T3ZlcnJpZGluZ05hbWVHZXR0ZXJQcm90b3R5cGU+KGdsb2JhbERhdGEuaGVhcCkpIEpTVGVzdE92
ZXJyaWRpbmdOYW1lR2V0dGVyUHJvdG90eXBlKGdsb2JhbERhdGEsIGdsb2JhbE9iamVjdCwgc3Ry
dWN0dXJlKTsKLSAgICAgICAgcHRyLT5maW5pc2hDcmVhdGlvbihnbG9iYWxEYXRhKTsKLSAgICAg
ICAgcmV0dXJuIHB0cjsKLSAgICB9Ci0KLSAgICBzdGF0aWMgY29uc3QgSlNDOjpDbGFzc0luZm8g
c19pbmZvOwotICAgIHN0YXRpYyBib29sIGdldE93blByb3BlcnR5U2xvdChKU0M6OkpTQ2VsbCos
IEpTQzo6RXhlY1N0YXRlKiwgY29uc3QgSlNDOjpJZGVudGlmaWVyJiwgSlNDOjpQcm9wZXJ0eVNs
b3QmKTsKLSAgICBzdGF0aWMgYm9vbCBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoSlNDOjpKU09i
amVjdCosIEpTQzo6RXhlY1N0YXRlKiwgY29uc3QgSlNDOjpJZGVudGlmaWVyJiwgSlNDOjpQcm9w
ZXJ0eURlc2NyaXB0b3ImKTsKLSAgICBzdGF0aWMgSlNDOjpTdHJ1Y3R1cmUqIGNyZWF0ZVN0cnVj
dHVyZShKU0M6OkpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgSlNDOjpKU0dsb2JhbE9iamVjdCog
Z2xvYmFsT2JqZWN0LCBKU0M6OkpTVmFsdWUgcHJvdG90eXBlKQotICAgIHsKLSAgICAgICAgcmV0
dXJuIEpTQzo6U3RydWN0dXJlOjpjcmVhdGUoZ2xvYmFsRGF0YSwgZ2xvYmFsT2JqZWN0LCBwcm90
b3R5cGUsIEpTQzo6VHlwZUluZm8oSlNDOjpPYmplY3RUeXBlLCBTdHJ1Y3R1cmVGbGFncyksICZz
X2luZm8pOwotICAgIH0KLQotcHJpdmF0ZToKLSAgICBKU1Rlc3RPdmVycmlkaW5nTmFtZUdldHRl
clByb3RvdHlwZShKU0M6OkpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgSlNDOjpKU0dsb2JhbE9i
amVjdCosIEpTQzo6U3RydWN0dXJlKiBzdHJ1Y3R1cmUpIDogSlNDOjpKU05vbkZpbmFsT2JqZWN0
KGdsb2JhbERhdGEsIHN0cnVjdHVyZSkgeyB9Ci1wcm90ZWN0ZWQ6Ci0gICAgc3RhdGljIGNvbnN0
IHVuc2lnbmVkIFN0cnVjdHVyZUZsYWdzID0gSlNDOjpPdmVycmlkZXNHZXRPd25Qcm9wZXJ0eVNs
b3QgfCBCYXNlOjpTdHJ1Y3R1cmVGbGFnczsKLX07Ci0KLWNsYXNzIEpTVGVzdE92ZXJyaWRpbmdO
YW1lR2V0dGVyQ29uc3RydWN0b3IgOiBwdWJsaWMgRE9NQ29uc3RydWN0b3JPYmplY3QgewotcHJp
dmF0ZToKLSAgICBKU1Rlc3RPdmVycmlkaW5nTmFtZUdldHRlckNvbnN0cnVjdG9yKEpTQzo6U3Ry
dWN0dXJlKiwgSlNET01HbG9iYWxPYmplY3QqKTsKLSAgICB2b2lkIGZpbmlzaENyZWF0aW9uKEpT
Qzo6RXhlY1N0YXRlKiwgSlNET01HbG9iYWxPYmplY3QqKTsKLQotcHVibGljOgotICAgIHR5cGVk
ZWYgRE9NQ29uc3RydWN0b3JPYmplY3QgQmFzZTsKLSAgICBzdGF0aWMgSlNUZXN0T3ZlcnJpZGlu
Z05hbWVHZXR0ZXJDb25zdHJ1Y3RvciogY3JlYXRlKEpTQzo6RXhlY1N0YXRlKiBleGVjLCBKU0M6
OlN0cnVjdHVyZSogc3RydWN0dXJlLCBKU0RPTUdsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0KQot
ICAgIHsKLSAgICAgICAgSlNUZXN0T3ZlcnJpZGluZ05hbWVHZXR0ZXJDb25zdHJ1Y3RvciogcHRy
ID0gbmV3IChOb3ROdWxsLCBKU0M6OmFsbG9jYXRlQ2VsbDxKU1Rlc3RPdmVycmlkaW5nTmFtZUdl
dHRlckNvbnN0cnVjdG9yPigqZXhlYy0+aGVhcCgpKSkgSlNUZXN0T3ZlcnJpZGluZ05hbWVHZXR0
ZXJDb25zdHJ1Y3RvcihzdHJ1Y3R1cmUsIGdsb2JhbE9iamVjdCk7Ci0gICAgICAgIHB0ci0+Zmlu
aXNoQ3JlYXRpb24oZXhlYywgZ2xvYmFsT2JqZWN0KTsKLSAgICAgICAgcmV0dXJuIHB0cjsKLSAg
ICB9Ci0KLSAgICBzdGF0aWMgYm9vbCBnZXRPd25Qcm9wZXJ0eVNsb3QoSlNDOjpKU0NlbGwqLCBK
U0M6OkV4ZWNTdGF0ZSosIGNvbnN0IEpTQzo6SWRlbnRpZmllciYsIEpTQzo6UHJvcGVydHlTbG90
Jik7Ci0gICAgc3RhdGljIGJvb2wgZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKEpTQzo6SlNPYmpl
Y3QqLCBKU0M6OkV4ZWNTdGF0ZSosIGNvbnN0IEpTQzo6SWRlbnRpZmllciYsIEpTQzo6UHJvcGVy
dHlEZXNjcmlwdG9yJik7Ci0gICAgc3RhdGljIGNvbnN0IEpTQzo6Q2xhc3NJbmZvIHNfaW5mbzsK
LSAgICBzdGF0aWMgSlNDOjpTdHJ1Y3R1cmUqIGNyZWF0ZVN0cnVjdHVyZShKU0M6OkpTR2xvYmFs
RGF0YSYgZ2xvYmFsRGF0YSwgSlNDOjpKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU0M6
OkpTVmFsdWUgcHJvdG90eXBlKQotICAgIHsKLSAgICAgICAgcmV0dXJuIEpTQzo6U3RydWN0dXJl
OjpjcmVhdGUoZ2xvYmFsRGF0YSwgZ2xvYmFsT2JqZWN0LCBwcm90b3R5cGUsIEpTQzo6VHlwZUlu
Zm8oSlNDOjpPYmplY3RUeXBlLCBTdHJ1Y3R1cmVGbGFncyksICZzX2luZm8pOwotICAgIH0KLXBy
b3RlY3RlZDoKLSAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgU3RydWN0dXJlRmxhZ3MgPSBKU0M6
Ok92ZXJyaWRlc0dldE93blByb3BlcnR5U2xvdCB8IEpTQzo6SW1wbGVtZW50c0hhc0luc3RhbmNl
IHwgRE9NQ29uc3RydWN0b3JPYmplY3Q6OlN0cnVjdHVyZUZsYWdzOwotfTsKLQotLy8gRnVuY3Rp
b25zCi0KLUpTQzo6RW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RPdmVycmlkaW5n
TmFtZUdldHRlclByb3RvdHlwZUZ1bmN0aW9uQW5vdGhlckZ1bmN0aW9uKEpTQzo6RXhlY1N0YXRl
Kik7Ci0vLyBBdHRyaWJ1dGVzCi0KLUpTQzo6SlNWYWx1ZSBqc1Rlc3RPdmVycmlkaW5nTmFtZUdl
dHRlckNvbnN0cnVjdG9yKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpKU1ZhbHVlLCBjb25zdCBKU0M6
OklkZW50aWZpZXImKTsKLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQotCi0jZW5kaWYKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9PYmpDL0RPTVRlc3RD
dXN0b21OYW1lZEdldHRlci5oIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0
L09iakMvRE9NVGVzdEN1c3RvbU5hbWVkR2V0dGVyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uY2U3ODFmZDUxYzk3
NmJhZDVlNmI2MjkzNzJiNjY3NmE3ZWU0MDFkNQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9PYmpDL0RPTVRlc3RDdXN0b21OYW1lZEdldHRl
ci5oCkBAIC0wLDAgKzEsMzcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUsIDIw
MDYsIDIwMDcsIDIwMDgsIDIwMDkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICog
Q29weXJpZ2h0IChDKSAyMDA2IFNhbXVlbCBXZWluaWcgPHNhbS53ZWluaWdAZ21haWwuY29tPgor
ICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVU
RVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRF
UiwgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVO
VCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IK
KyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAK
KyAqLworCisjaW1wb3J0IDxXZWJDb3JlL0RPTU9iamVjdC5oPgorCisjaWYgV0VCS0lUX1ZFUlNJ
T05fTUFYX0FMTE9XRUQgPj0gV0VCS0lUX1ZFUlNJT05fTEFURVNUCisKK0BjbGFzcyBOU1N0cmlu
ZzsKKworQGludGVyZmFjZSBET01UZXN0Q3VzdG9tTmFtZWRHZXR0ZXIgOiBET01PYmplY3QKKy0g
KHZvaWQpYW5vdGhlckZ1bmN0aW9uOihOU1N0cmluZyAqKXN0cjsKK0BlbmQKKworI2VuZGlmCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvT2JqQy9ET01U
ZXN0Q3VzdG9tTmFtZWRHZXR0ZXIubW0gYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRz
L3Rlc3QvT2JqQy9ET01UZXN0Q3VzdG9tTmFtZWRHZXR0ZXIubW0KbmV3IGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uODcyMDY2
ZWRkNzZmMjQ2MDkyMzZkYjYzZGVhMzAwNTg4NTI1NmU1MgotLS0gL2Rldi9udWxsCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9PYmpDL0RPTVRlc3RDdXN0b21OYW1l
ZEdldHRlci5tbQpAQCAtMCwwICsxLDk0IEBACisvKgorICogVGhpcyBmaWxlIGlzIHBhcnQgb2Yg
dGhlIFdlYktpdCBvcGVuIHNvdXJjZSBwcm9qZWN0LgorICogVGhpcyBmaWxlIGhhcyBiZWVuIGdl
bmVyYXRlZCBieSBnZW5lcmF0ZS1iaW5kaW5ncy5wbC4gRE8gTk9UIE1PRElGWSEKKyAqCisgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
KyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIENPTVBVVEVSLCBJTkMu
IGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4g
T1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9G
SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKwor
I2ltcG9ydCAiY29uZmlnLmgiCisjaW1wb3J0ICJET01JbnRlcm5hbC5oIgorCisjaW1wb3J0ICJE
T01UZXN0Q3VzdG9tTmFtZWRHZXR0ZXIuaCIKKworI2ltcG9ydCAiRE9NQmxvYkludGVybmFsLmgi
CisjaW1wb3J0ICJET01DU1NSdWxlSW50ZXJuYWwuaCIKKyNpbXBvcnQgIkRPTUNTU1ZhbHVlSW50
ZXJuYWwuaCIKKyNpbXBvcnQgIkRPTUV2ZW50SW50ZXJuYWwuaCIKKyNpbXBvcnQgIkRPTU5vZGVJ
bnRlcm5hbC5oIgorI2ltcG9ydCAiRE9NU3R5bGVTaGVldEludGVybmFsLmgiCisjaW1wb3J0ICJE
T01UZXN0Q3VzdG9tTmFtZWRHZXR0ZXJJbnRlcm5hbC5oIgorI2ltcG9ydCAiRXhjZXB0aW9uSGFu
ZGxlcnMuaCIKKyNpbXBvcnQgIkpTTWFpblRocmVhZEV4ZWNTdGF0ZS5oIgorI2ltcG9ydCAiS1VS
TC5oIgorI2ltcG9ydCAiVGVzdEN1c3RvbU5hbWVkR2V0dGVyLmgiCisjaW1wb3J0ICJUaHJlYWRD
aGVjay5oIgorI2ltcG9ydCAiV2ViQ29yZU9iakNFeHRyYXMuaCIKKyNpbXBvcnQgIldlYlNjcmlw
dE9iamVjdFByaXZhdGUuaCIKKyNpbXBvcnQgPHd0Zi9HZXRQdHIuaD4KKworI2RlZmluZSBJTVBM
IHJlaW50ZXJwcmV0X2Nhc3Q8V2ViQ29yZTo6VGVzdEN1c3RvbU5hbWVkR2V0dGVyKj4oX2ludGVy
bmFsKQorCitAaW1wbGVtZW50YXRpb24gRE9NVGVzdEN1c3RvbU5hbWVkR2V0dGVyCisKKy0gKHZv
aWQpZGVhbGxvYworeworICAgIGlmIChXZWJDb3JlT2JqQ1NjaGVkdWxlRGVhbGxvY2F0ZU9uTWFp
blRocmVhZChbRE9NVGVzdEN1c3RvbU5hbWVkR2V0dGVyIGNsYXNzXSwgc2VsZikpCisgICAgICAg
IHJldHVybjsKKworICAgIGlmIChfaW50ZXJuYWwpCisgICAgICAgIElNUEwtPmRlcmVmKCk7Cisg
ICAgW3N1cGVyIGRlYWxsb2NdOworfQorCistICh2b2lkKWZpbmFsaXplCit7CisgICAgaWYgKF9p
bnRlcm5hbCkKKyAgICAgICAgSU1QTC0+ZGVyZWYoKTsKKyAgICBbc3VwZXIgZmluYWxpemVdOwor
fQorCistICh2b2lkKWFub3RoZXJGdW5jdGlvbjooTlNTdHJpbmcgKilzdHIKK3sKKyAgICBXZWJD
b3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgSU1QTC0+YW5vdGhlckZ1bmN0
aW9uKHN0cik7Cit9CisKK0BlbmQKKworV2ViQ29yZTo6VGVzdEN1c3RvbU5hbWVkR2V0dGVyKiBj
b3JlKERPTVRlc3RDdXN0b21OYW1lZEdldHRlciAqd3JhcHBlcikKK3sKKyAgICByZXR1cm4gd3Jh
cHBlciA/IHJlaW50ZXJwcmV0X2Nhc3Q8V2ViQ29yZTo6VGVzdEN1c3RvbU5hbWVkR2V0dGVyKj4o
d3JhcHBlci0+X2ludGVybmFsKSA6IDA7Cit9CisKK0RPTVRlc3RDdXN0b21OYW1lZEdldHRlciAq
a2l0KFdlYkNvcmU6OlRlc3RDdXN0b21OYW1lZEdldHRlciogdmFsdWUpCit7CisgICAgeyBET01f
QVNTRVJUX01BSU5fVEhSRUFEKCk7IFdlYkNvcmVUaHJlYWRWaW9sYXRpb25DaGVja1JvdW5kT25l
KCk7IH07CisgICAgaWYgKCF2YWx1ZSkKKyAgICAgICAgcmV0dXJuIG5pbDsKKyAgICBpZiAoRE9N
VGVzdEN1c3RvbU5hbWVkR2V0dGVyICp3cmFwcGVyID0gZ2V0RE9NV3JhcHBlcih2YWx1ZSkpCisg
ICAgICAgIHJldHVybiBbW3dyYXBwZXIgcmV0YWluXSBhdXRvcmVsZWFzZV07CisgICAgRE9NVGVz
dEN1c3RvbU5hbWVkR2V0dGVyICp3cmFwcGVyID0gW1tET01UZXN0Q3VzdG9tTmFtZWRHZXR0ZXIg
YWxsb2NdIF9pbml0XTsKKyAgICB3cmFwcGVyLT5faW50ZXJuYWwgPSByZWludGVycHJldF9jYXN0
PERPTU9iamVjdEludGVybmFsKj4odmFsdWUpOworICAgIHZhbHVlLT5yZWYoKTsKKyAgICBhZGRE
T01XcmFwcGVyKHdyYXBwZXIsIHZhbHVlKTsKKyAgICByZXR1cm4gW3dyYXBwZXIgYXV0b3JlbGVh
c2VdOworfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0
L09iakMvRE9NVGVzdEN1c3RvbU5hbWVkR2V0dGVySW50ZXJuYWwuaCBiL1NvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9PYmpDL0RPTVRlc3RDdXN0b21OYW1lZEdldHRlckludGVy
bmFsLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMC4uZTliOTk5NjI4ZDEwMWJiNzY0OGI0YmViODljZjQ3YzE4OWU5ZjUx
ZQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVz
dC9PYmpDL0RPTVRlc3RDdXN0b21OYW1lZEdldHRlckludGVybmFsLmgKQEAgLTAsMCArMSwzOCBA
QAorLyoKKyAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBXZWJLaXQgb3BlbiBzb3VyY2UgcHJv
amVjdC4KKyAqIFRoaXMgZmlsZSBoYXMgYmVlbiBnZW5lcmF0ZWQgYnkgZ2VuZXJhdGUtYmluZGlu
Z3MucGwuIERPIE5PVCBNT0RJRlkhCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAq
IGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVY
RU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbXBvcnQgPFdlYkNvcmUvRE9NVGVzdEN1
c3RvbU5hbWVkR2V0dGVyLmg+CisKKyNpZiBXRUJLSVRfVkVSU0lPTl9NQVhfQUxMT1dFRCA+PSBX
RUJLSVRfVkVSU0lPTl9MQVRFU1QKKworbmFtZXNwYWNlIFdlYkNvcmUgeworICAgIGNsYXNzIFRl
c3RDdXN0b21OYW1lZEdldHRlcjsKK30KKworV2ViQ29yZTo6VGVzdEN1c3RvbU5hbWVkR2V0dGVy
KiBjb3JlKERPTVRlc3RDdXN0b21OYW1lZEdldHRlciAqKTsKK0RPTVRlc3RDdXN0b21OYW1lZEdl
dHRlciAqa2l0KFdlYkNvcmU6OlRlc3RDdXN0b21OYW1lZEdldHRlciopOworCisjZW5kaWYKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9PYmpDL0RPTVRl
c3RPdmVycmlkaW5nTmFtZUdldHRlci5oIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0
cy90ZXN0L09iakMvRE9NVGVzdE92ZXJyaWRpbmdOYW1lR2V0dGVyLmgKZGVsZXRlZCBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDNkN2I0NDc5M2QyOWMzOGQzYjQ1NWJjZDVhZjQwMjY3YWFkYWI1MWEu
LjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dl
YkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L09iakMvRE9NVGVzdE92ZXJyaWRpbmdOYW1lR2V0
dGVyLmgKKysrIC9kZXYvbnVsbApAQCAtMSwzNyArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChD
KSAyMDA0LCAyMDA1LCAyMDA2LCAyMDA3LCAyMDA4LCAyMDA5IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAwNiBTYW11ZWwgV2VpbmlnIDxzYW0ud2Vp
bmlnQGdtYWlsLmNvbT4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1l
dDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQot
ICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZ
LCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQot
ICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4gCi0gKi8KLQotI2ltcG9ydCA8V2ViQ29yZS9ET01PYmplY3QuaD4KLQot
I2lmIFdFQktJVF9WRVJTSU9OX01BWF9BTExPV0VEID49IFdFQktJVF9WRVJTSU9OX0xBVEVTVAot
Ci1AY2xhc3MgTlNTdHJpbmc7Ci0KLUBpbnRlcmZhY2UgRE9NVGVzdE92ZXJyaWRpbmdOYW1lR2V0
dGVyIDogRE9NT2JqZWN0Ci0tICh2b2lkKWFub3RoZXJGdW5jdGlvbjooTlNTdHJpbmcgKilzdHI7
Ci1AZW5kCi0KLSNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2Ny
aXB0cy90ZXN0L09iakMvRE9NVGVzdE92ZXJyaWRpbmdOYW1lR2V0dGVyLm1tIGIvU291cmNlL1dl
YkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L09iakMvRE9NVGVzdE92ZXJyaWRpbmdOYW1lR2V0
dGVyLm1tCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzYTgwMDk3YmY0N2Y5ZTJjZjJh
NzRkMzZkMTc2ODFiNDFjMWNlZTM1Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9PYmpDL0RP
TVRlc3RPdmVycmlkaW5nTmFtZUdldHRlci5tbQorKysgL2Rldi9udWxsCkBAIC0xLDk0ICswLDAg
QEAKLS8qCi0gKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgV2ViS2l0IG9wZW4gc291cmNlIHBy
b2plY3QuCi0gKiBUaGlzIGZpbGUgaGFzIGJlZW4gZ2VuZXJhdGVkIGJ5IGdlbmVyYXRlLWJpbmRp
bmdzLnBsLiBETyBOT1QgTU9ESUZZIQotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0g
KiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBF
WEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKLSAqLwotCi0jaW1wb3J0ICJjb25maWcuaCIKLSNpbXBv
cnQgIkRPTUludGVybmFsLmgiCi0KLSNpbXBvcnQgIkRPTVRlc3RPdmVycmlkaW5nTmFtZUdldHRl
ci5oIgotCi0jaW1wb3J0ICJET01CbG9iSW50ZXJuYWwuaCIKLSNpbXBvcnQgIkRPTUNTU1J1bGVJ
bnRlcm5hbC5oIgotI2ltcG9ydCAiRE9NQ1NTVmFsdWVJbnRlcm5hbC5oIgotI2ltcG9ydCAiRE9N
RXZlbnRJbnRlcm5hbC5oIgotI2ltcG9ydCAiRE9NTm9kZUludGVybmFsLmgiCi0jaW1wb3J0ICJE
T01TdHlsZVNoZWV0SW50ZXJuYWwuaCIKLSNpbXBvcnQgIkRPTVRlc3RPdmVycmlkaW5nTmFtZUdl
dHRlckludGVybmFsLmgiCi0jaW1wb3J0ICJFeGNlcHRpb25IYW5kbGVycy5oIgotI2ltcG9ydCAi
SlNNYWluVGhyZWFkRXhlY1N0YXRlLmgiCi0jaW1wb3J0ICJLVVJMLmgiCi0jaW1wb3J0ICJUZXN0
T3ZlcnJpZGluZ05hbWVHZXR0ZXIuaCIKLSNpbXBvcnQgIlRocmVhZENoZWNrLmgiCi0jaW1wb3J0
ICJXZWJDb3JlT2JqQ0V4dHJhcy5oIgotI2ltcG9ydCAiV2ViU2NyaXB0T2JqZWN0UHJpdmF0ZS5o
IgotI2ltcG9ydCA8d3RmL0dldFB0ci5oPgotCi0jZGVmaW5lIElNUEwgcmVpbnRlcnByZXRfY2Fz
dDxXZWJDb3JlOjpUZXN0T3ZlcnJpZGluZ05hbWVHZXR0ZXIqPihfaW50ZXJuYWwpCi0KLUBpbXBs
ZW1lbnRhdGlvbiBET01UZXN0T3ZlcnJpZGluZ05hbWVHZXR0ZXIKLQotLSAodm9pZClkZWFsbG9j
Ci17Ci0gICAgaWYgKFdlYkNvcmVPYmpDU2NoZWR1bGVEZWFsbG9jYXRlT25NYWluVGhyZWFkKFtE
T01UZXN0T3ZlcnJpZGluZ05hbWVHZXR0ZXIgY2xhc3NdLCBzZWxmKSkKLSAgICAgICAgcmV0dXJu
OwotCi0gICAgaWYgKF9pbnRlcm5hbCkKLSAgICAgICAgSU1QTC0+ZGVyZWYoKTsKLSAgICBbc3Vw
ZXIgZGVhbGxvY107Ci19Ci0KLS0gKHZvaWQpZmluYWxpemUKLXsKLSAgICBpZiAoX2ludGVybmFs
KQotICAgICAgICBJTVBMLT5kZXJlZigpOwotICAgIFtzdXBlciBmaW5hbGl6ZV07Ci19Ci0KLS0g
KHZvaWQpYW5vdGhlckZ1bmN0aW9uOihOU1N0cmluZyAqKXN0cgotewotICAgIFdlYkNvcmU6OkpT
TWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKLSAgICBJTVBMLT5hbm90aGVyRnVuY3Rpb24oc3Ry
KTsKLX0KLQotQGVuZAotCi1XZWJDb3JlOjpUZXN0T3ZlcnJpZGluZ05hbWVHZXR0ZXIqIGNvcmUo
RE9NVGVzdE92ZXJyaWRpbmdOYW1lR2V0dGVyICp3cmFwcGVyKQotewotICAgIHJldHVybiB3cmFw
cGVyID8gcmVpbnRlcnByZXRfY2FzdDxXZWJDb3JlOjpUZXN0T3ZlcnJpZGluZ05hbWVHZXR0ZXIq
Pih3cmFwcGVyLT5faW50ZXJuYWwpIDogMDsKLX0KLQotRE9NVGVzdE92ZXJyaWRpbmdOYW1lR2V0
dGVyICpraXQoV2ViQ29yZTo6VGVzdE92ZXJyaWRpbmdOYW1lR2V0dGVyKiB2YWx1ZSkKLXsKLSAg
ICB7IERPTV9BU1NFUlRfTUFJTl9USFJFQUQoKTsgV2ViQ29yZVRocmVhZFZpb2xhdGlvbkNoZWNr
Um91bmRPbmUoKTsgfTsKLSAgICBpZiAoIXZhbHVlKQotICAgICAgICByZXR1cm4gbmlsOwotICAg
IGlmIChET01UZXN0T3ZlcnJpZGluZ05hbWVHZXR0ZXIgKndyYXBwZXIgPSBnZXRET01XcmFwcGVy
KHZhbHVlKSkKLSAgICAgICAgcmV0dXJuIFtbd3JhcHBlciByZXRhaW5dIGF1dG9yZWxlYXNlXTsK
LSAgICBET01UZXN0T3ZlcnJpZGluZ05hbWVHZXR0ZXIgKndyYXBwZXIgPSBbW0RPTVRlc3RPdmVy
cmlkaW5nTmFtZUdldHRlciBhbGxvY10gX2luaXRdOwotICAgIHdyYXBwZXItPl9pbnRlcm5hbCA9
IHJlaW50ZXJwcmV0X2Nhc3Q8RE9NT2JqZWN0SW50ZXJuYWwqPih2YWx1ZSk7Ci0gICAgdmFsdWUt
PnJlZigpOwotICAgIGFkZERPTVdyYXBwZXIod3JhcHBlciwgdmFsdWUpOwotICAgIHJldHVybiBb
d3JhcHBlciBhdXRvcmVsZWFzZV07Ci19CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9zY3JpcHRzL3Rlc3QvT2JqQy9ET01UZXN0T3ZlcnJpZGluZ05hbWVHZXR0ZXJJbnRlcm5h
bC5oIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L09iakMvRE9NVGVzdE92
ZXJyaWRpbmdOYW1lR2V0dGVySW50ZXJuYWwuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggNTczY2Y2ZjExNmJiYzc3N2QxNzY5OWNlNDcyMzFiMTRiNmE1ZjBlZi4uMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy9zY3JpcHRzL3Rlc3QvT2JqQy9ET01UZXN0T3ZlcnJpZGluZ05hbWVHZXR0ZXJJbnRlcm5hbC5o
CisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotLyoKLSAqIFRoaXMgZmlsZSBpcyBwYXJ0
IG9mIHRoZSBXZWJLaXQgb3BlbiBzb3VyY2UgcHJvamVjdC4KLSAqIFRoaXMgZmlsZSBoYXMgYmVl
biBnZW5lcmF0ZWQgYnkgZ2VuZXJhdGUtYmluZGluZ3MucGwuIERPIE5PVCBNT0RJRlkhCi0gKgot
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwg
SU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJ
TkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9G
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICog
UFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAotICov
Ci0KLSNpbXBvcnQgPFdlYkNvcmUvRE9NVGVzdE92ZXJyaWRpbmdOYW1lR2V0dGVyLmg+Ci0KLSNp
ZiBXRUJLSVRfVkVSU0lPTl9NQVhfQUxMT1dFRCA+PSBXRUJLSVRfVkVSU0lPTl9MQVRFU1QKLQot
bmFtZXNwYWNlIFdlYkNvcmUgewotICAgIGNsYXNzIFRlc3RPdmVycmlkaW5nTmFtZUdldHRlcjsK
LX0KLQotV2ViQ29yZTo6VGVzdE92ZXJyaWRpbmdOYW1lR2V0dGVyKiBjb3JlKERPTVRlc3RPdmVy
cmlkaW5nTmFtZUdldHRlciAqKTsKLURPTVRlc3RPdmVycmlkaW5nTmFtZUdldHRlciAqa2l0KFdl
YkNvcmU6OlRlc3RPdmVycmlkaW5nTmFtZUdldHRlciopOwotCi0jZW5kaWYKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9UZXN0Q3VzdG9tTmFtZWRHZXR0
ZXIuaWRsIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Rlc3RDdXN0b21O
YW1lZEdldHRlci5pZGwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMzI5ZmE1ZDZhZjVkMzYzZDE0MDk2Yjk3MTQ3MDU5
MGU1OWU0MzZmZgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Nj
cmlwdHMvdGVzdC9UZXN0Q3VzdG9tTmFtZWRHZXR0ZXIuaWRsCkBAIC0wLDAgKzEsMzcgQEAKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
dHJBcmcsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICoKKyAq
IDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogMy4gIE5laXRoZXIgdGhlIG5hbWUgb2YgQXBwbGUg
Q29tcHV0ZXIsIEluYy4gKCJBcHBsZSIpIG5vciB0aGUgbmFtZXMgb2YKKyAqICAgICBpdHMgY29u
dHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJp
dmVkCisgKiAgICAgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3Jp
dHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFc3RyQXJnLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhF
IElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVO
VElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVN
RU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFU
QSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQKKyAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKKyAqIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
CisgKi8KKworbW9kdWxlIGV2ZW50cyB7CisKKyAgICBpbnRlcmZhY2UgWworICAgICAgICBDdXN0
b21OYW1lZEdldHRlcgorICAgIF0gVGVzdEN1c3RvbU5hbWVkR2V0dGVyIHsKKyAgICAgICAgdm9p
ZCBhbm90aGVyRnVuY3Rpb24oaW4gRE9NU3RyaW5nIHN0cik7CisgICAgfTsKKworfQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Rlc3RPdmVycmlkaW5n
TmFtZUdldHRlci5pZGwgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvVGVz
dE92ZXJyaWRpbmdOYW1lR2V0dGVyLmlkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
YTU2ZWE1ZjJlMTc2OTMwZDczYzE2MGRkNTRhOGZiYTIzNTI0NWI1MS4uMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9z
Y3JpcHRzL3Rlc3QvVGVzdE92ZXJyaWRpbmdOYW1lR2V0dGVyLmlkbAorKysgL2Rldi9udWxsCkBA
IC0xLDM3ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTEgR29vZ2xlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zdHJBcmcsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0g
KiBhcmUgbWV0OgotICoKLSAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuICBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAotICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICogMy4gIE5laXRoZXIg
dGhlIG5hbWUgb2YgQXBwbGUgQ29tcHV0ZXIsIEluYy4gKCJBcHBsZSIpIG5vciB0aGUgbmFtZXMg
b2YKLSAqICAgICBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJv
bW90ZSBwcm9kdWN0cyBkZXJpdmVkCi0gKiAgICAgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQg
c3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5Z
Ci0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFc3RyQXJnLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKLSAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKLSAqIERJU0NMQUlN
RUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxF
IEZPUiBBTlkKLSAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1Q
TEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCi0gKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7Ci0g
KiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQKLSAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UgT0YKLSAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotbW9kdWxlIGV2ZW50cyB7Ci0KLSAgICBpbnRlcmZh
Y2UgWwotICAgICAgICBIYXNPdmVycmlkaW5nTmFtZUdldHRlcgotICAgIF0gVGVzdE92ZXJyaWRp
bmdOYW1lR2V0dGVyIHsKLSAgICAgICAgdm9pZCBhbm90aGVyRnVuY3Rpb24oaW4gRE9NU3RyaW5n
IHN0cik7Ci0gICAgfTsKLQotfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
c2NyaXB0cy90ZXN0L1Y4L1Y4VGVzdEN1c3RvbU5hbWVkR2V0dGVyLmNwcCBiL1NvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9WOC9WOFRlc3RDdXN0b21OYW1lZEdldHRlci5jcHAK
bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMC4uYmYxYmM0YTQ5NTEyNDViZDY5MjA0YWM3MDU0Yzk1NDczYTkyMjg3YQotLS0g
L2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9WOC9W
OFRlc3RDdXN0b21OYW1lZEdldHRlci5jcHAKQEAgLTAsMCArMSwxMzUgQEAKKy8qCisgICAgVGhp
cyBmaWxlIGlzIHBhcnQgb2YgdGhlIFdlYktpdCBvcGVuIHNvdXJjZSBwcm9qZWN0LgorICAgIFRo
aXMgZmlsZSBoYXMgYmVlbiBnZW5lcmF0ZWQgYnkgZ2VuZXJhdGUtYmluZGluZ3MucGwuIERPIE5P
VCBNT0RJRlkhCisKKyAgICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiBy
ZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0
aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAgICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBi
eSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAgICB2ZXJzaW9uIDIgb2Yg
dGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAg
ICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJl
IHVzZWZ1bCwKKyAgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUg
aW1wbGllZCB3YXJyYW50eSBvZgorICAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgICAgTGlicmFyeSBHZW5lcmFsIFB1
YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgICBZb3Ugc2hvdWxkIGhhdmUgcmVj
ZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisg
ICAgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElm
IG5vdCwgd3JpdGUgdG8KKyAgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1
OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsCisgICAgQm9zdG9uLCBNQSAwMjExMS0xMzA3LCBV
U0EuCisqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiVjhUZXN0Q3VzdG9tTmFt
ZWRHZXR0ZXIuaCIKKworI2luY2x1ZGUgIkV4Y2VwdGlvbkNvZGUuaCIKKyNpbmNsdWRlICJSdW50
aW1lRW5hYmxlZEZlYXR1cmVzLmgiCisjaW5jbHVkZSAiVjhCaW5kaW5nLmgiCisjaW5jbHVkZSAi
VjhCaW5kaW5nTWFjcm9zLmgiCisjaW5jbHVkZSAiVjhCaW5kaW5nU3RhdGUuaCIKKyNpbmNsdWRl
ICJWOERPTVdyYXBwZXIuaCIKKyNpbmNsdWRlICJWOElzb2xhdGVkQ29udGV4dC5oIgorI2luY2x1
ZGUgIlY4UHJveHkuaCIKKyNpbmNsdWRlIDx3dGYvVW51c2VkUGFyYW0uaD4KKworbmFtZXNwYWNl
IFdlYkNvcmUgeworCitXcmFwcGVyVHlwZUluZm8gVjhUZXN0Q3VzdG9tTmFtZWRHZXR0ZXI6Omlu
Zm8gPSB7IFY4VGVzdEN1c3RvbU5hbWVkR2V0dGVyOjpHZXRUZW1wbGF0ZSwgVjhUZXN0Q3VzdG9t
TmFtZWRHZXR0ZXI6OmRlcmVmT2JqZWN0LCAwLCAwIH07CisKK25hbWVzcGFjZSBUZXN0Q3VzdG9t
TmFtZWRHZXR0ZXJJbnRlcm5hbCB7CisKK3RlbXBsYXRlIDx0eXBlbmFtZSBUPiB2b2lkIFY4X1VT
RShUKSB7IH0KKworc3RhdGljIHY4OjpIYW5kbGU8djg6OlZhbHVlPiBhbm90aGVyRnVuY3Rpb25D
YWxsYmFjayhjb25zdCB2ODo6QXJndW1lbnRzJiBhcmdzKQoreworICAgIElOQ19TVEFUUygiRE9N
LlRlc3RDdXN0b21OYW1lZEdldHRlci5hbm90aGVyRnVuY3Rpb24iKTsKKyAgICBpZiAoYXJncy5M
ZW5ndGgoKSA8IDEpCisgICAgICAgIHJldHVybiB0aHJvd0Vycm9yKCJOb3QgZW5vdWdoIGFyZ3Vt
ZW50cyIsIFY4UHJveHk6OlR5cGVFcnJvcik7CisgICAgVGVzdEN1c3RvbU5hbWVkR2V0dGVyKiBp
bXAgPSBWOFRlc3RDdXN0b21OYW1lZEdldHRlcjo6dG9OYXRpdmUoYXJncy5Ib2xkZXIoKSk7Cisg
ICAgU1RSSU5HX1RPX1Y4UEFSQU1FVEVSX0VYQ0VQVElPTl9CTE9DSyhWOFBhcmFtZXRlcjw+LCBz
dHIsIE1BWUJFX01JU1NJTkdfUEFSQU1FVEVSKGFyZ3MsIDAsIE1pc3NpbmdJc1VuZGVmaW5lZCkp
OworICAgIGltcC0+YW5vdGhlckZ1bmN0aW9uKHN0cik7CisgICAgcmV0dXJuIHY4OjpIYW5kbGU8
djg6OlZhbHVlPigpOworfQorCit9IC8vIG5hbWVzcGFjZSBUZXN0Q3VzdG9tTmFtZWRHZXR0ZXJJ
bnRlcm5hbAorCitzdGF0aWMgY29uc3QgQmF0Y2hlZENhbGxiYWNrIFRlc3RDdXN0b21OYW1lZEdl
dHRlckNhbGxiYWNrc1tdID0geworICAgIHsiYW5vdGhlckZ1bmN0aW9uIiwgVGVzdEN1c3RvbU5h
bWVkR2V0dGVySW50ZXJuYWw6OmFub3RoZXJGdW5jdGlvbkNhbGxiYWNrfSwKK307CisKK3N0YXRp
YyB2ODo6UGVyc2lzdGVudDx2ODo6RnVuY3Rpb25UZW1wbGF0ZT4gQ29uZmlndXJlVjhUZXN0Q3Vz
dG9tTmFtZWRHZXR0ZXJUZW1wbGF0ZSh2ODo6UGVyc2lzdGVudDx2ODo6RnVuY3Rpb25UZW1wbGF0
ZT4gZGVzYykKK3sKKyAgICBkZXNjLT5SZWFkT25seVByb3RvdHlwZSgpOworCisgICAgdjg6Okxv
Y2FsPHY4OjpTaWduYXR1cmU+IGRlZmF1bHRTaWduYXR1cmU7CisgICAgZGVmYXVsdFNpZ25hdHVy
ZSA9IGNvbmZpZ3VyZVRlbXBsYXRlKGRlc2MsICJUZXN0Q3VzdG9tTmFtZWRHZXR0ZXIiLCB2ODo6
UGVyc2lzdGVudDx2ODo6RnVuY3Rpb25UZW1wbGF0ZT4oKSwgVjhUZXN0Q3VzdG9tTmFtZWRHZXR0
ZXI6OmludGVybmFsRmllbGRDb3VudCwKKyAgICAgICAgMCwgMCwKKyAgICAgICAgVGVzdEN1c3Rv
bU5hbWVkR2V0dGVyQ2FsbGJhY2tzLCBXVEZfQVJSQVlfTEVOR1RIKFRlc3RDdXN0b21OYW1lZEdl
dHRlckNhbGxiYWNrcykpOworICAgIFVOVVNFRF9QQVJBTShkZWZhdWx0U2lnbmF0dXJlKTsgLy8g
SW4gc29tZSBjYXNlcywgaXQgd2lsbCBub3QgYmUgdXNlZC4KKyAgICB2ODo6TG9jYWw8djg6Ok9i
amVjdFRlbXBsYXRlPiBpbnN0YW5jZSA9IGRlc2MtPkluc3RhbmNlVGVtcGxhdGUoKTsKKyAgICB2
ODo6TG9jYWw8djg6Ok9iamVjdFRlbXBsYXRlPiBwcm90byA9IGRlc2MtPlByb3RvdHlwZVRlbXBs
YXRlKCk7CisgICAgVU5VU0VEX1BBUkFNKGluc3RhbmNlKTsgLy8gSW4gc29tZSBjYXNlcywgaXQg
d2lsbCBub3QgYmUgdXNlZC4KKyAgICBVTlVTRURfUEFSQU0ocHJvdG8pOyAvLyBJbiBzb21lIGNh
c2VzLCBpdCB3aWxsIG5vdCBiZSB1c2VkLgorICAgIAorICAgIGRlc2MtPkluc3RhbmNlVGVtcGxh
dGUoKS0+U2V0TmFtZWRQcm9wZXJ0eUhhbmRsZXIoVjhUZXN0Q3VzdG9tTmFtZWRHZXR0ZXI6Om5h
bWVkUHJvcGVydHlHZXR0ZXIsIDAsIDAsIDAsIDApOworCisgICAgLy8gQ3VzdG9tIHRvU3RyaW5n
IHRlbXBsYXRlCisgICAgZGVzYy0+U2V0KGdldFRvU3RyaW5nTmFtZSgpLCBnZXRUb1N0cmluZ1Rl
bXBsYXRlKCkpOworICAgIHJldHVybiBkZXNjOworfQorCit2ODo6UGVyc2lzdGVudDx2ODo6RnVu
Y3Rpb25UZW1wbGF0ZT4gVjhUZXN0Q3VzdG9tTmFtZWRHZXR0ZXI6OkdldFJhd1RlbXBsYXRlKCkK
K3sKKyAgICBWOEJpbmRpbmdQZXJJc29sYXRlRGF0YSogZGF0YSA9IFY4QmluZGluZ1Blcklzb2xh
dGVEYXRhOjpjdXJyZW50KCk7CisgICAgVjhCaW5kaW5nUGVySXNvbGF0ZURhdGE6OlRlbXBsYXRl
TWFwOjppdGVyYXRvciByZXN1bHQgPSBkYXRhLT5yYXdUZW1wbGF0ZU1hcCgpLmZpbmQoJmluZm8p
OworICAgIGlmIChyZXN1bHQgIT0gZGF0YS0+cmF3VGVtcGxhdGVNYXAoKS5lbmQoKSkKKyAgICAg
ICAgcmV0dXJuIHJlc3VsdC0+c2Vjb25kOworCisgICAgdjg6OkhhbmRsZVNjb3BlIGhhbmRsZVNj
b3BlOworICAgIHY4OjpQZXJzaXN0ZW50PHY4OjpGdW5jdGlvblRlbXBsYXRlPiB0ZW1wbCA9IGNy
ZWF0ZVJhd1RlbXBsYXRlKCk7CisgICAgZGF0YS0+cmF3VGVtcGxhdGVNYXAoKS5hZGQoJmluZm8s
IHRlbXBsKTsKKyAgICByZXR1cm4gdGVtcGw7Cit9CisKK3Y4OjpQZXJzaXN0ZW50PHY4OjpGdW5j
dGlvblRlbXBsYXRlPiBWOFRlc3RDdXN0b21OYW1lZEdldHRlcjo6R2V0VGVtcGxhdGUoKQorewor
ICAgIFY4QmluZGluZ1Blcklzb2xhdGVEYXRhKiBkYXRhID0gVjhCaW5kaW5nUGVySXNvbGF0ZURh
dGE6OmN1cnJlbnQoKTsKKyAgICBWOEJpbmRpbmdQZXJJc29sYXRlRGF0YTo6VGVtcGxhdGVNYXA6
Oml0ZXJhdG9yIHJlc3VsdCA9IGRhdGEtPnRlbXBsYXRlTWFwKCkuZmluZCgmaW5mbyk7CisgICAg
aWYgKHJlc3VsdCAhPSBkYXRhLT50ZW1wbGF0ZU1hcCgpLmVuZCgpKQorICAgICAgICByZXR1cm4g
cmVzdWx0LT5zZWNvbmQ7CisKKyAgICB2ODo6SGFuZGxlU2NvcGUgaGFuZGxlU2NvcGU7CisgICAg
djg6OlBlcnNpc3RlbnQ8djg6OkZ1bmN0aW9uVGVtcGxhdGU+IHRlbXBsID0KKyAgICAgICAgQ29u
ZmlndXJlVjhUZXN0Q3VzdG9tTmFtZWRHZXR0ZXJUZW1wbGF0ZShHZXRSYXdUZW1wbGF0ZSgpKTsK
KyAgICBkYXRhLT50ZW1wbGF0ZU1hcCgpLmFkZCgmaW5mbywgdGVtcGwpOworICAgIHJldHVybiB0
ZW1wbDsKK30KKworYm9vbCBWOFRlc3RDdXN0b21OYW1lZEdldHRlcjo6SGFzSW5zdGFuY2Uodjg6
OkhhbmRsZTx2ODo6VmFsdWU+IHZhbHVlKQoreworICAgIHJldHVybiBHZXRSYXdUZW1wbGF0ZSgp
LT5IYXNJbnN0YW5jZSh2YWx1ZSk7Cit9CisKKwordjg6OkhhbmRsZTx2ODo6T2JqZWN0PiBWOFRl
c3RDdXN0b21OYW1lZEdldHRlcjo6d3JhcFNsb3coVGVzdEN1c3RvbU5hbWVkR2V0dGVyKiBpbXBs
KQoreworICAgIHY4OjpIYW5kbGU8djg6Ok9iamVjdD4gd3JhcHBlcjsKKyAgICBWOFByb3h5KiBw
cm94eSA9IDA7CisgICAgd3JhcHBlciA9IFY4RE9NV3JhcHBlcjo6aW5zdGFudGlhdGVWOE9iamVj
dChwcm94eSwgJmluZm8sIGltcGwpOworICAgIGlmICh3cmFwcGVyLklzRW1wdHkoKSkKKyAgICAg
ICAgcmV0dXJuIHdyYXBwZXI7CisKKyAgICBpbXBsLT5yZWYoKTsKKyAgICB2ODo6UGVyc2lzdGVu
dDx2ODo6T2JqZWN0PiB3cmFwcGVySGFuZGxlID0gdjg6OlBlcnNpc3RlbnQ8djg6Ok9iamVjdD46
Ok5ldyh3cmFwcGVyKTsKKworICAgIGlmICghaGFzRGVwZW5kZW50TGlmZXRpbWUpCisgICAgICAg
IHdyYXBwZXJIYW5kbGUuTWFya0luZGVwZW5kZW50KCk7CisgICAgZ2V0RE9NT2JqZWN0TWFwKCku
c2V0KGltcGwsIHdyYXBwZXJIYW5kbGUpOworICAgIHJldHVybiB3cmFwcGVyOworfQorCit2b2lk
IFY4VGVzdEN1c3RvbU5hbWVkR2V0dGVyOjpkZXJlZk9iamVjdCh2b2lkKiBvYmplY3QpCit7Cisg
ICAgc3RhdGljX2Nhc3Q8VGVzdEN1c3RvbU5hbWVkR2V0dGVyKj4ob2JqZWN0KS0+ZGVyZWYoKTsK
K30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
YmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Y4L1Y4VGVzdEN1c3RvbU5hbWVkR2V0dGVyLmggYi9Tb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvVjgvVjhUZXN0Q3VzdG9tTmFtZWRHZXR0
ZXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwLi4yNjQ3OTFkODRjNTA1N2VjZWQzNjA5YWFlZDMyOWIwZjVkMjI5MTEz
Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0
L1Y4L1Y4VGVzdEN1c3RvbU5hbWVkR2V0dGVyLmgKQEAgLTAsMCArMSw4MCBAQAorLyoKKyAgICBU
aGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgV2ViS2l0IG9wZW4gc291cmNlIHByb2plY3QuCisgICAg
VGhpcyBmaWxlIGhhcyBiZWVuIGdlbmVyYXRlZCBieSBnZW5lcmF0ZS1iaW5kaW5ncy5wbC4gRE8g
Tk9UIE1PRElGWSEKKworICAgIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2Fu
IHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9m
IHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICAgIExpY2Vuc2UgYXMgcHVibGlzaGVk
IGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICAgIHZlcnNpb24gMiBv
ZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKwor
ICAgIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwg
YmUgdXNlZnVsLAorICAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRo
ZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAgICBMaWJyYXJ5IEdlbmVyYWwg
UHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgIFlvdSBzaG91bGQgaGF2ZSBy
ZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UK
KyAgICBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAg
SWYgbm90LCB3cml0ZSB0bworICAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4s
IDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwKKyAgICBCb3N0b24sIE1BIDAyMTExLTEzMDcs
IFVTQS4KKyovCisKKyNpZm5kZWYgVjhUZXN0Q3VzdG9tTmFtZWRHZXR0ZXJfaAorI2RlZmluZSBW
OFRlc3RDdXN0b21OYW1lZEdldHRlcl9oCisKKyNpbmNsdWRlICJUZXN0Q3VzdG9tTmFtZWRHZXR0
ZXIuaCIKKyNpbmNsdWRlICJWOERPTVdyYXBwZXIuaCIKKyNpbmNsdWRlICJXcmFwcGVyVHlwZUlu
Zm8uaCIKKyNpbmNsdWRlIDx2OC5oPgorI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+CisjaW5jbHVk
ZSA8d3RmL3RleHQvU3RyaW5nSGFzaC5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNz
IFY4VGVzdEN1c3RvbU5hbWVkR2V0dGVyIHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgY29uc3QgYm9v
bCBoYXNEZXBlbmRlbnRMaWZldGltZSA9IGZhbHNlOworICAgIHN0YXRpYyBib29sIEhhc0luc3Rh
bmNlKHY4OjpIYW5kbGU8djg6OlZhbHVlPik7CisgICAgc3RhdGljIHY4OjpQZXJzaXN0ZW50PHY4
OjpGdW5jdGlvblRlbXBsYXRlPiBHZXRSYXdUZW1wbGF0ZSgpOworICAgIHN0YXRpYyB2ODo6UGVy
c2lzdGVudDx2ODo6RnVuY3Rpb25UZW1wbGF0ZT4gR2V0VGVtcGxhdGUoKTsKKyAgICBzdGF0aWMg
VGVzdEN1c3RvbU5hbWVkR2V0dGVyKiB0b05hdGl2ZSh2ODo6SGFuZGxlPHY4OjpPYmplY3Q+IG9i
amVjdCkKKyAgICB7CisgICAgICAgIHJldHVybiByZWludGVycHJldF9jYXN0PFRlc3RDdXN0b21O
YW1lZEdldHRlcio+KG9iamVjdC0+R2V0UG9pbnRlckZyb21JbnRlcm5hbEZpZWxkKHY4RE9NV3Jh
cHBlck9iamVjdEluZGV4KSk7CisgICAgfQorICAgIGlubGluZSBzdGF0aWMgdjg6OkhhbmRsZTx2
ODo6T2JqZWN0PiB3cmFwKFRlc3RDdXN0b21OYW1lZEdldHRlciopOworICAgIHN0YXRpYyB2b2lk
IGRlcmVmT2JqZWN0KHZvaWQqKTsKKyAgICBzdGF0aWMgV3JhcHBlclR5cGVJbmZvIGluZm87Cisg
ICAgc3RhdGljIHY4OjpIYW5kbGU8djg6OlZhbHVlPiBuYW1lZFByb3BlcnR5R2V0dGVyKHY4OjpM
b2NhbDx2ODo6U3RyaW5nPiwgY29uc3Qgdjg6OkFjY2Vzc29ySW5mbyYpOworICAgIHN0YXRpYyBj
b25zdCBpbnQgaW50ZXJuYWxGaWVsZENvdW50ID0gdjhEZWZhdWx0V3JhcHBlckludGVybmFsRmll
bGRDb3VudCArIDA7CisgICAgc3RhdGljIHY4OjpIYW5kbGU8djg6Ok9iamVjdD4gZXhpc3RpbmdX
cmFwcGVyKFRlc3RDdXN0b21OYW1lZEdldHRlciopOworCitwcml2YXRlOgorICAgIHN0YXRpYyB2
ODo6SGFuZGxlPHY4OjpPYmplY3Q+IHdyYXBTbG93KFRlc3RDdXN0b21OYW1lZEdldHRlciopOwor
fTsKKworQUxXQVlTX0lOTElORSB2ODo6SGFuZGxlPHY4OjpPYmplY3Q+IFY4VGVzdEN1c3RvbU5h
bWVkR2V0dGVyOjpleGlzdGluZ1dyYXBwZXIoVGVzdEN1c3RvbU5hbWVkR2V0dGVyKiBpbXBsKQor
eworICAgIHJldHVybiBnZXRET01PYmplY3RNYXAoKS5nZXQoaW1wbCk7Cit9CisKK3Y4OjpIYW5k
bGU8djg6Ok9iamVjdD4gVjhUZXN0Q3VzdG9tTmFtZWRHZXR0ZXI6OndyYXAoVGVzdEN1c3RvbU5h
bWVkR2V0dGVyKiBpbXBsKQoreworICAgICAgICB2ODo6SGFuZGxlPHY4OjpPYmplY3Q+IHdyYXBw
ZXIgPSBleGlzdGluZ1dyYXBwZXIoaW1wbCk7CisgICAgICAgIGlmICghd3JhcHBlci5Jc0VtcHR5
KCkpCisgICAgICAgICAgICByZXR1cm4gd3JhcHBlcjsKKyAgICByZXR1cm4gVjhUZXN0Q3VzdG9t
TmFtZWRHZXR0ZXI6OndyYXBTbG93KGltcGwpOworfQorCitpbmxpbmUgdjg6OkhhbmRsZTx2ODo6
VmFsdWU+IHRvVjgoVGVzdEN1c3RvbU5hbWVkR2V0dGVyKiBpbXBsKQoreworICAgIGlmICghaW1w
bCkKKyAgICAgICAgcmV0dXJuIHY4OjpOdWxsKCk7CisgICAgcmV0dXJuIFY4VGVzdEN1c3RvbU5h
bWVkR2V0dGVyOjp3cmFwKGltcGwpOworfQoraW5saW5lIHY4OjpIYW5kbGU8djg6OlZhbHVlPiB0
b1Y4KFBhc3NSZWZQdHI8IFRlc3RDdXN0b21OYW1lZEdldHRlciA+IGltcGwpCit7CisgICAgcmV0
dXJuIHRvVjgoaW1wbC5nZXQoKSk7Cit9CisKK30KKworI2VuZGlmIC8vIFY4VGVzdEN1c3RvbU5h
bWVkR2V0dGVyX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMv
dGVzdC9WOC9WOFRlc3RPdmVycmlkaW5nTmFtZUdldHRlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy9zY3JpcHRzL3Rlc3QvVjgvVjhUZXN0T3ZlcnJpZGluZ05hbWVHZXR0ZXIuY3BwCmRl
bGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxY2E2YTRkZTk4ZTZiNzIyN2QzNTg5YzkzZjYx
MmU2NzFlMTJlYjEyLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0t
LSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9WOC9WOFRlc3RPdmVycmlk
aW5nTmFtZUdldHRlci5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSwxMzUgKzAsMCBAQAotLyoKLSAg
ICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgV2ViS2l0IG9wZW4gc291cmNlIHByb2plY3QuCi0g
ICAgVGhpcyBmaWxlIGhhcyBiZWVuIGdlbmVyYXRlZCBieSBnZW5lcmF0ZS1iaW5kaW5ncy5wbC4g
RE8gTk9UIE1PRElGWSEKLQotICAgIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3Ug
Y2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1z
IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICAgIExpY2Vuc2UgYXMgcHVibGlz
aGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICAgIHZlcnNpb24g
MiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4K
LQotICAgIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdp
bGwgYmUgdXNlZnVsLAotICAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVu
IHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAgICBMaWJyYXJ5IEdlbmVy
YWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLQotICAgIFlvdSBzaG91bGQgaGF2
ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vu
c2UKLSAgICBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElC
LiAgSWYgbm90LCB3cml0ZSB0bwotICAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIElu
Yy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwKLSAgICBCb3N0b24sIE1BIDAyMTExLTEz
MDcsIFVTQS4KLSovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJWOFRlc3RPdmVy
cmlkaW5nTmFtZUdldHRlci5oIgotCi0jaW5jbHVkZSAiRXhjZXB0aW9uQ29kZS5oIgotI2luY2x1
ZGUgIlJ1bnRpbWVFbmFibGVkRmVhdHVyZXMuaCIKLSNpbmNsdWRlICJWOEJpbmRpbmcuaCIKLSNp
bmNsdWRlICJWOEJpbmRpbmdNYWNyb3MuaCIKLSNpbmNsdWRlICJWOEJpbmRpbmdTdGF0ZS5oIgot
I2luY2x1ZGUgIlY4RE9NV3JhcHBlci5oIgotI2luY2x1ZGUgIlY4SXNvbGF0ZWRDb250ZXh0Lmgi
Ci0jaW5jbHVkZSAiVjhQcm94eS5oIgotI2luY2x1ZGUgPHd0Zi9VbnVzZWRQYXJhbS5oPgotCi1u
YW1lc3BhY2UgV2ViQ29yZSB7Ci0KLVdyYXBwZXJUeXBlSW5mbyBWOFRlc3RPdmVycmlkaW5nTmFt
ZUdldHRlcjo6aW5mbyA9IHsgVjhUZXN0T3ZlcnJpZGluZ05hbWVHZXR0ZXI6OkdldFRlbXBsYXRl
LCBWOFRlc3RPdmVycmlkaW5nTmFtZUdldHRlcjo6ZGVyZWZPYmplY3QsIDAsIDAgfTsKLQotbmFt
ZXNwYWNlIFRlc3RPdmVycmlkaW5nTmFtZUdldHRlckludGVybmFsIHsKLQotdGVtcGxhdGUgPHR5
cGVuYW1lIFQ+IHZvaWQgVjhfVVNFKFQpIHsgfQotCi1zdGF0aWMgdjg6OkhhbmRsZTx2ODo6VmFs
dWU+IGFub3RoZXJGdW5jdGlvbkNhbGxiYWNrKGNvbnN0IHY4OjpBcmd1bWVudHMmIGFyZ3MpCi17
Ci0gICAgSU5DX1NUQVRTKCJET00uVGVzdE92ZXJyaWRpbmdOYW1lR2V0dGVyLmFub3RoZXJGdW5j
dGlvbiIpOwotICAgIGlmIChhcmdzLkxlbmd0aCgpIDwgMSkKLSAgICAgICAgcmV0dXJuIHRocm93
RXJyb3IoIk5vdCBlbm91Z2ggYXJndW1lbnRzIiwgVjhQcm94eTo6VHlwZUVycm9yKTsKLSAgICBU
ZXN0T3ZlcnJpZGluZ05hbWVHZXR0ZXIqIGltcCA9IFY4VGVzdE92ZXJyaWRpbmdOYW1lR2V0dGVy
Ojp0b05hdGl2ZShhcmdzLkhvbGRlcigpKTsKLSAgICBTVFJJTkdfVE9fVjhQQVJBTUVURVJfRVhD
RVBUSU9OX0JMT0NLKFY4UGFyYW1ldGVyPD4sIHN0ciwgTUFZQkVfTUlTU0lOR19QQVJBTUVURVIo
YXJncywgMCwgTWlzc2luZ0lzVW5kZWZpbmVkKSk7Ci0gICAgaW1wLT5hbm90aGVyRnVuY3Rpb24o
c3RyKTsKLSAgICByZXR1cm4gdjg6OkhhbmRsZTx2ODo6VmFsdWU+KCk7Ci19Ci0KLX0gLy8gbmFt
ZXNwYWNlIFRlc3RPdmVycmlkaW5nTmFtZUdldHRlckludGVybmFsCi0KLXN0YXRpYyBjb25zdCBC
YXRjaGVkQ2FsbGJhY2sgVGVzdE92ZXJyaWRpbmdOYW1lR2V0dGVyQ2FsbGJhY2tzW10gPSB7Ci0g
ICAgeyJhbm90aGVyRnVuY3Rpb24iLCBUZXN0T3ZlcnJpZGluZ05hbWVHZXR0ZXJJbnRlcm5hbDo6
YW5vdGhlckZ1bmN0aW9uQ2FsbGJhY2t9LAotfTsKLQotc3RhdGljIHY4OjpQZXJzaXN0ZW50PHY4
OjpGdW5jdGlvblRlbXBsYXRlPiBDb25maWd1cmVWOFRlc3RPdmVycmlkaW5nTmFtZUdldHRlclRl
bXBsYXRlKHY4OjpQZXJzaXN0ZW50PHY4OjpGdW5jdGlvblRlbXBsYXRlPiBkZXNjKQotewotICAg
IGRlc2MtPlJlYWRPbmx5UHJvdG90eXBlKCk7Ci0KLSAgICB2ODo6TG9jYWw8djg6OlNpZ25hdHVy
ZT4gZGVmYXVsdFNpZ25hdHVyZTsKLSAgICBkZWZhdWx0U2lnbmF0dXJlID0gY29uZmlndXJlVGVt
cGxhdGUoZGVzYywgIlRlc3RPdmVycmlkaW5nTmFtZUdldHRlciIsIHY4OjpQZXJzaXN0ZW50PHY4
OjpGdW5jdGlvblRlbXBsYXRlPigpLCBWOFRlc3RPdmVycmlkaW5nTmFtZUdldHRlcjo6aW50ZXJu
YWxGaWVsZENvdW50LAotICAgICAgICAwLCAwLAotICAgICAgICBUZXN0T3ZlcnJpZGluZ05hbWVH
ZXR0ZXJDYWxsYmFja3MsIFdURl9BUlJBWV9MRU5HVEgoVGVzdE92ZXJyaWRpbmdOYW1lR2V0dGVy
Q2FsbGJhY2tzKSk7Ci0gICAgVU5VU0VEX1BBUkFNKGRlZmF1bHRTaWduYXR1cmUpOyAvLyBJbiBz
b21lIGNhc2VzLCBpdCB3aWxsIG5vdCBiZSB1c2VkLgotICAgIHY4OjpMb2NhbDx2ODo6T2JqZWN0
VGVtcGxhdGU+IGluc3RhbmNlID0gZGVzYy0+SW5zdGFuY2VUZW1wbGF0ZSgpOwotICAgIHY4OjpM
b2NhbDx2ODo6T2JqZWN0VGVtcGxhdGU+IHByb3RvID0gZGVzYy0+UHJvdG90eXBlVGVtcGxhdGUo
KTsKLSAgICBVTlVTRURfUEFSQU0oaW5zdGFuY2UpOyAvLyBJbiBzb21lIGNhc2VzLCBpdCB3aWxs
IG5vdCBiZSB1c2VkLgotICAgIFVOVVNFRF9QQVJBTShwcm90byk7IC8vIEluIHNvbWUgY2FzZXMs
IGl0IHdpbGwgbm90IGJlIHVzZWQuCi0gICAgCi0gICAgZGVzYy0+SW5zdGFuY2VUZW1wbGF0ZSgp
LT5TZXROYW1lZFByb3BlcnR5SGFuZGxlcihWOFRlc3RPdmVycmlkaW5nTmFtZUdldHRlcjo6bmFt
ZWRQcm9wZXJ0eUdldHRlciwgMCwgMCwgMCwgMCk7Ci0KLSAgICAvLyBDdXN0b20gdG9TdHJpbmcg
dGVtcGxhdGUKLSAgICBkZXNjLT5TZXQoZ2V0VG9TdHJpbmdOYW1lKCksIGdldFRvU3RyaW5nVGVt
cGxhdGUoKSk7Ci0gICAgcmV0dXJuIGRlc2M7Ci19Ci0KLXY4OjpQZXJzaXN0ZW50PHY4OjpGdW5j
dGlvblRlbXBsYXRlPiBWOFRlc3RPdmVycmlkaW5nTmFtZUdldHRlcjo6R2V0UmF3VGVtcGxhdGUo
KQotewotICAgIFY4QmluZGluZ1Blcklzb2xhdGVEYXRhKiBkYXRhID0gVjhCaW5kaW5nUGVySXNv
bGF0ZURhdGE6OmN1cnJlbnQoKTsKLSAgICBWOEJpbmRpbmdQZXJJc29sYXRlRGF0YTo6VGVtcGxh
dGVNYXA6Oml0ZXJhdG9yIHJlc3VsdCA9IGRhdGEtPnJhd1RlbXBsYXRlTWFwKCkuZmluZCgmaW5m
byk7Ci0gICAgaWYgKHJlc3VsdCAhPSBkYXRhLT5yYXdUZW1wbGF0ZU1hcCgpLmVuZCgpKQotICAg
ICAgICByZXR1cm4gcmVzdWx0LT5zZWNvbmQ7Ci0KLSAgICB2ODo6SGFuZGxlU2NvcGUgaGFuZGxl
U2NvcGU7Ci0gICAgdjg6OlBlcnNpc3RlbnQ8djg6OkZ1bmN0aW9uVGVtcGxhdGU+IHRlbXBsID0g
Y3JlYXRlUmF3VGVtcGxhdGUoKTsKLSAgICBkYXRhLT5yYXdUZW1wbGF0ZU1hcCgpLmFkZCgmaW5m
bywgdGVtcGwpOwotICAgIHJldHVybiB0ZW1wbDsKLX0KLQotdjg6OlBlcnNpc3RlbnQ8djg6OkZ1
bmN0aW9uVGVtcGxhdGU+IFY4VGVzdE92ZXJyaWRpbmdOYW1lR2V0dGVyOjpHZXRUZW1wbGF0ZSgp
Ci17Ci0gICAgVjhCaW5kaW5nUGVySXNvbGF0ZURhdGEqIGRhdGEgPSBWOEJpbmRpbmdQZXJJc29s
YXRlRGF0YTo6Y3VycmVudCgpOwotICAgIFY4QmluZGluZ1Blcklzb2xhdGVEYXRhOjpUZW1wbGF0
ZU1hcDo6aXRlcmF0b3IgcmVzdWx0ID0gZGF0YS0+dGVtcGxhdGVNYXAoKS5maW5kKCZpbmZvKTsK
LSAgICBpZiAocmVzdWx0ICE9IGRhdGEtPnRlbXBsYXRlTWFwKCkuZW5kKCkpCi0gICAgICAgIHJl
dHVybiByZXN1bHQtPnNlY29uZDsKLQotICAgIHY4OjpIYW5kbGVTY29wZSBoYW5kbGVTY29wZTsK
LSAgICB2ODo6UGVyc2lzdGVudDx2ODo6RnVuY3Rpb25UZW1wbGF0ZT4gdGVtcGwgPQotICAgICAg
ICBDb25maWd1cmVWOFRlc3RPdmVycmlkaW5nTmFtZUdldHRlclRlbXBsYXRlKEdldFJhd1RlbXBs
YXRlKCkpOwotICAgIGRhdGEtPnRlbXBsYXRlTWFwKCkuYWRkKCZpbmZvLCB0ZW1wbCk7Ci0gICAg
cmV0dXJuIHRlbXBsOwotfQotCi1ib29sIFY4VGVzdE92ZXJyaWRpbmdOYW1lR2V0dGVyOjpIYXNJ
bnN0YW5jZSh2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gdmFsdWUpCi17Ci0gICAgcmV0dXJuIEdldFJh
d1RlbXBsYXRlKCktPkhhc0luc3RhbmNlKHZhbHVlKTsKLX0KLQotCi12ODo6SGFuZGxlPHY4OjpP
YmplY3Q+IFY4VGVzdE92ZXJyaWRpbmdOYW1lR2V0dGVyOjp3cmFwU2xvdyhUZXN0T3ZlcnJpZGlu
Z05hbWVHZXR0ZXIqIGltcGwpCi17Ci0gICAgdjg6OkhhbmRsZTx2ODo6T2JqZWN0PiB3cmFwcGVy
OwotICAgIFY4UHJveHkqIHByb3h5ID0gMDsKLSAgICB3cmFwcGVyID0gVjhET01XcmFwcGVyOjpp
bnN0YW50aWF0ZVY4T2JqZWN0KHByb3h5LCAmaW5mbywgaW1wbCk7Ci0gICAgaWYgKHdyYXBwZXIu
SXNFbXB0eSgpKQotICAgICAgICByZXR1cm4gd3JhcHBlcjsKLQotICAgIGltcGwtPnJlZigpOwot
ICAgIHY4OjpQZXJzaXN0ZW50PHY4OjpPYmplY3Q+IHdyYXBwZXJIYW5kbGUgPSB2ODo6UGVyc2lz
dGVudDx2ODo6T2JqZWN0Pjo6TmV3KHdyYXBwZXIpOwotCi0gICAgaWYgKCFoYXNEZXBlbmRlbnRM
aWZldGltZSkKLSAgICAgICAgd3JhcHBlckhhbmRsZS5NYXJrSW5kZXBlbmRlbnQoKTsKLSAgICBn
ZXRET01PYmplY3RNYXAoKS5zZXQoaW1wbCwgd3JhcHBlckhhbmRsZSk7Ci0gICAgcmV0dXJuIHdy
YXBwZXI7Ci19Ci0KLXZvaWQgVjhUZXN0T3ZlcnJpZGluZ05hbWVHZXR0ZXI6OmRlcmVmT2JqZWN0
KHZvaWQqIG9iamVjdCkKLXsKLSAgICBzdGF0aWNfY2FzdDxUZXN0T3ZlcnJpZGluZ05hbWVHZXR0
ZXIqPihvYmplY3QpLT5kZXJlZigpOwotfQotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvVjgvVjhUZXN0T3Zl
cnJpZGluZ05hbWVHZXR0ZXIuaCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVz
dC9WOC9WOFRlc3RPdmVycmlkaW5nTmFtZUdldHRlci5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCA4YzFiOGUwMjFkOWM1ZTA4NzkzZDBjMTI0MDEwNzg1OWU5ZjFiMGIzLi4wMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL3NjcmlwdHMvdGVzdC9WOC9WOFRlc3RPdmVycmlkaW5nTmFtZUdldHRlci5oCisrKyAv
ZGV2L251bGwKQEAgLTEsODAgKzAsMCBAQAotLyoKLSAgICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0
aGUgV2ViS2l0IG9wZW4gc291cmNlIHByb2plY3QuCi0gICAgVGhpcyBmaWxlIGhhcyBiZWVuIGdl
bmVyYXRlZCBieSBnZW5lcmF0ZS1iaW5kaW5ncy5wbC4gRE8gTk9UIE1PRElGWSEKLQotICAgIFRo
aXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQv
b3IKLSAgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5l
cmFsIFB1YmxpYwotICAgIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJl
IEZvdW5kYXRpb247IGVpdGhlcgotICAgIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0
IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLQotICAgIFRoaXMgbGlicmFyeSBpcyBk
aXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICAgIGJ1dCBX
SVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9m
Ci0gICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NF
LiAgU2VlIHRoZSBHTlUKLSAgICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1v
cmUgZGV0YWlscy4KLQotICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhl
IEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAgICBhbG9uZyB3aXRoIHRoaXMg
bGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bwotICAg
IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1
aXRlIDMzMCwKLSAgICBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQS4KLSovCi0KLSNpZm5kZWYg
VjhUZXN0T3ZlcnJpZGluZ05hbWVHZXR0ZXJfaAotI2RlZmluZSBWOFRlc3RPdmVycmlkaW5nTmFt
ZUdldHRlcl9oCi0KLSNpbmNsdWRlICJUZXN0T3ZlcnJpZGluZ05hbWVHZXR0ZXIuaCIKLSNpbmNs
dWRlICJWOERPTVdyYXBwZXIuaCIKLSNpbmNsdWRlICJXcmFwcGVyVHlwZUluZm8uaCIKLSNpbmNs
dWRlIDx2OC5oPgotI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQv
U3RyaW5nSGFzaC5oPgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLWNsYXNzIFY4VGVzdE92ZXJy
aWRpbmdOYW1lR2V0dGVyIHsKLXB1YmxpYzoKLSAgICBzdGF0aWMgY29uc3QgYm9vbCBoYXNEZXBl
bmRlbnRMaWZldGltZSA9IGZhbHNlOwotICAgIHN0YXRpYyBib29sIEhhc0luc3RhbmNlKHY4OjpI
YW5kbGU8djg6OlZhbHVlPik7Ci0gICAgc3RhdGljIHY4OjpQZXJzaXN0ZW50PHY4OjpGdW5jdGlv
blRlbXBsYXRlPiBHZXRSYXdUZW1wbGF0ZSgpOwotICAgIHN0YXRpYyB2ODo6UGVyc2lzdGVudDx2
ODo6RnVuY3Rpb25UZW1wbGF0ZT4gR2V0VGVtcGxhdGUoKTsKLSAgICBzdGF0aWMgVGVzdE92ZXJy
aWRpbmdOYW1lR2V0dGVyKiB0b05hdGl2ZSh2ODo6SGFuZGxlPHY4OjpPYmplY3Q+IG9iamVjdCkK
LSAgICB7Ci0gICAgICAgIHJldHVybiByZWludGVycHJldF9jYXN0PFRlc3RPdmVycmlkaW5nTmFt
ZUdldHRlcio+KG9iamVjdC0+R2V0UG9pbnRlckZyb21JbnRlcm5hbEZpZWxkKHY4RE9NV3JhcHBl
ck9iamVjdEluZGV4KSk7Ci0gICAgfQotICAgIGlubGluZSBzdGF0aWMgdjg6OkhhbmRsZTx2ODo6
T2JqZWN0PiB3cmFwKFRlc3RPdmVycmlkaW5nTmFtZUdldHRlciopOwotICAgIHN0YXRpYyB2b2lk
IGRlcmVmT2JqZWN0KHZvaWQqKTsKLSAgICBzdGF0aWMgV3JhcHBlclR5cGVJbmZvIGluZm87Ci0g
ICAgc3RhdGljIHY4OjpIYW5kbGU8djg6OlZhbHVlPiBuYW1lZFByb3BlcnR5R2V0dGVyKHY4OjpM
b2NhbDx2ODo6U3RyaW5nPiwgY29uc3Qgdjg6OkFjY2Vzc29ySW5mbyYpOwotICAgIHN0YXRpYyBj
b25zdCBpbnQgaW50ZXJuYWxGaWVsZENvdW50ID0gdjhEZWZhdWx0V3JhcHBlckludGVybmFsRmll
bGRDb3VudCArIDA7Ci0gICAgc3RhdGljIHY4OjpIYW5kbGU8djg6Ok9iamVjdD4gZXhpc3RpbmdX
cmFwcGVyKFRlc3RPdmVycmlkaW5nTmFtZUdldHRlciopOwotCi1wcml2YXRlOgotICAgIHN0YXRp
YyB2ODo6SGFuZGxlPHY4OjpPYmplY3Q+IHdyYXBTbG93KFRlc3RPdmVycmlkaW5nTmFtZUdldHRl
ciopOwotfTsKLQotQUxXQVlTX0lOTElORSB2ODo6SGFuZGxlPHY4OjpPYmplY3Q+IFY4VGVzdE92
ZXJyaWRpbmdOYW1lR2V0dGVyOjpleGlzdGluZ1dyYXBwZXIoVGVzdE92ZXJyaWRpbmdOYW1lR2V0
dGVyKiBpbXBsKQotewotICAgIHJldHVybiBnZXRET01PYmplY3RNYXAoKS5nZXQoaW1wbCk7Ci19
Ci0KLXY4OjpIYW5kbGU8djg6Ok9iamVjdD4gVjhUZXN0T3ZlcnJpZGluZ05hbWVHZXR0ZXI6Ondy
YXAoVGVzdE92ZXJyaWRpbmdOYW1lR2V0dGVyKiBpbXBsKQotewotICAgICAgICB2ODo6SGFuZGxl
PHY4OjpPYmplY3Q+IHdyYXBwZXIgPSBleGlzdGluZ1dyYXBwZXIoaW1wbCk7Ci0gICAgICAgIGlm
ICghd3JhcHBlci5Jc0VtcHR5KCkpCi0gICAgICAgICAgICByZXR1cm4gd3JhcHBlcjsKLSAgICBy
ZXR1cm4gVjhUZXN0T3ZlcnJpZGluZ05hbWVHZXR0ZXI6OndyYXBTbG93KGltcGwpOwotfQotCi1p
bmxpbmUgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IHRvVjgoVGVzdE92ZXJyaWRpbmdOYW1lR2V0dGVy
KiBpbXBsKQotewotICAgIGlmICghaW1wbCkKLSAgICAgICAgcmV0dXJuIHY4OjpOdWxsKCk7Ci0g
ICAgcmV0dXJuIFY4VGVzdE92ZXJyaWRpbmdOYW1lR2V0dGVyOjp3cmFwKGltcGwpOwotfQotaW5s
aW5lIHY4OjpIYW5kbGU8djg6OlZhbHVlPiB0b1Y4KFBhc3NSZWZQdHI8IFRlc3RPdmVycmlkaW5n
TmFtZUdldHRlciA+IGltcGwpCi17Ci0gICAgcmV0dXJuIHRvVjgoaW1wbC5nZXQoKSk7Ci19Ci0K
LX0KLQotI2VuZGlmIC8vIFY4VGVzdE92ZXJyaWRpbmdOYW1lR2V0dGVyX2gKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTERvY3VtZW50LmlkbCBiL1NvdXJjZS9XZWJDb3JlL2h0
bWwvSFRNTERvY3VtZW50LmlkbAppbmRleCAyMWQwYTJkYjZiMTc5MzY3NGViYjZmOTY5OTJlM2Mw
MzQ4MTFhNGY5Li5kZDAyMGUyYzU5ZjdkNzlmYmU0MTZkZWFhNThiNzQ4ZDk1NjQyYThmIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxEb2N1bWVudC5pZGwKKysrIGIvU291cmNl
L1dlYkNvcmUvaHRtbC9IVE1MRG9jdW1lbnQuaWRsCkBAIC0yMSw3ICsyMSw3IEBACiBtb2R1bGUg
aHRtbCB7CiAKICAgICBpbnRlcmZhY2UgWwotICAgICAgICBIYXNPdmVycmlkaW5nTmFtZUdldHRl
cgorICAgICAgICBDdXN0b21OYW1lZEdldHRlcgogICAgIF0gSFRNTERvY3VtZW50IDogRG9jdW1l
bnQgewogICAgICAgICBbSlNDdXN0b20sIFY4Q3VzdG9tXSB2b2lkIG9wZW4oKTsKICAgICAgICAg
dm9pZCBjbG9zZSgpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MRm9ybUVs
ZW1lbnQuaWRsIGIvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MRm9ybUVsZW1lbnQuaWRsCmluZGV4
IDUyMTQxNmRhZTYwMGExYmIxMjU1ZDYzNTY1Mjc4Nzc5YjZiYzBiMTYuLjI1Mzg2ZjVkOTYxYTRm
M2IxZWQwMDk1MDAyMGZhMDkyZmUwMWI4MjMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0
bWwvSFRNTEZvcm1FbGVtZW50LmlkbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxGb3Jt
RWxlbWVudC5pZGwKQEAgLTIyLDcgKzIyLDcgQEAgbW9kdWxlIGh0bWwgewogCiAgICAgaW50ZXJm
YWNlIFsKICAgICAgICAgSW5kZXhlZEdldHRlciwKLSAgICAgICAgSGFzT3ZlcnJpZGluZ05hbWVH
ZXR0ZXIKKyAgICAgICAgQ3VzdG9tTmFtZWRHZXR0ZXIKICAgICBdIEhUTUxGb3JtRWxlbWVudCA6
IEhUTUxFbGVtZW50IHsKICAgICAgICAgcmVhZG9ubHkgYXR0cmlidXRlIEhUTUxDb2xsZWN0aW9u
IGVsZW1lbnRzOwogICAgICAgICByZWFkb25seSBhdHRyaWJ1dGUgbG9uZyBsZW5ndGg7CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxGcmFtZVNldEVsZW1lbnQuaWRsIGIvU291
cmNlL1dlYkNvcmUvaHRtbC9IVE1MRnJhbWVTZXRFbGVtZW50LmlkbAppbmRleCA3YWQ0ODAyZDM0
MjMzNTE5YzgyMmFiMmFlNzg5ZDgyNDA3MDEwN2M5Li41NTI4NDEyMDg5OWI4MWM4MGFmOGU5NmU1
MDQxN2RiODllOTkxMmY5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxGcmFt
ZVNldEVsZW1lbnQuaWRsCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTEZyYW1lU2V0RWxl
bWVudC5pZGwKQEAgLTIxLDcgKzIxLDcgQEAKIG1vZHVsZSBodG1sIHsKIAogICAgIGludGVyZmFj
ZSBbCi0gICAgICAgIEhhc092ZXJyaWRpbmdOYW1lR2V0dGVyCisgICAgICAgIEN1c3RvbU5hbWVk
R2V0dGVyCiAgICAgXSBIVE1MRnJhbWVTZXRFbGVtZW50IDogSFRNTEVsZW1lbnQgewogICAgICAg
ICBhdHRyaWJ1dGUgW1JlZmxlY3RdIERPTVN0cmluZyBjb2xzOwogICAgICAgICBhdHRyaWJ1dGUg
W1JlZmxlY3RdIERPTVN0cmluZyByb3dzOwo=
</data>

          </attachment>
      

    </bug>

</bugzilla>