<?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>82582</bug_id>
          
          <creation_ts>2012-03-29 01:18:21 -0700</creation_ts>
          <short_desc>Move CPP files related to ResourceHandle to WebCore/platform</short_desc>
          <delta_ts>2012-03-30 15:23:31 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>New Bugs</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Adam Barth">abarth</reporter>
          <assigned_to name="Adam Barth">abarth</assigned_to>
          <cc>jamesr</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>590932</commentid>
    <comment_count>0</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2012-03-29 01:18:21 -0700</bug_when>
    <thetext>Move CPP files related to ResourceHandle to WebCore/platform</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>590937</commentid>
    <comment_count>1</comment_count>
      <attachid>134523</attachid>
    <who name="Adam Barth">abarth</who>
    <bug_when>2012-03-29 01:23:25 -0700</bug_when>
    <thetext>Created attachment 134523
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>591291</commentid>
    <comment_count>2</comment_count>
    <who name="James Robinson">jamesr</who>
    <bug_when>2012-03-29 10:37:17 -0700</bug_when>
    <thetext>Doesn&apos;t apply, does this patch depend on some other patch?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>591295</commentid>
    <comment_count>3</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2012-03-29 10:40:45 -0700</bug_when>
    <thetext>I don&apos;t think it does.  Maybe there was a conflict in one of the GYP files.  I&apos;ll makes sure it applies and builds before landing it.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>591298</commentid>
    <comment_count>4</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2012-03-29 10:42:04 -0700</bug_when>
    <thetext>Actually, I think it&apos;s a bug in svn-apply related to moving and modifying files at the same time.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>591304</commentid>
    <comment_count>5</comment_count>
    <who name="James Robinson">jamesr</who>
    <bug_when>2012-03-29 10:46:58 -0700</bug_when>
    <thetext>That is frustrating! Which patch is this over in github?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>591315</commentid>
    <comment_count>6</comment_count>
      <attachid>134523</attachid>
    <who name="James Robinson">jamesr</who>
    <bug_when>2012-03-29 10:56:17 -0700</bug_when>
    <thetext>Comment on attachment 134523
Patch

Looks good. Guessing you probably don&apos;t wanna try to land by commit queue :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>591393</commentid>
    <comment_count>7</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2012-03-29 11:47:53 -0700</bug_when>
    <thetext>&gt; That is frustrating! Which patch is this over in github?

I&apos;m sorry if this is frustrating.  I can cross-link them better.  This one is https://github.com/abarth/webkit/commit/68d9044a8fd46a1533eb6f0d82138764371d0c1d

If you look at this list &lt;https://github.com/abarth/webkit/compare/master...webcore-platform&gt;, the bug titles should line up with the commit names.

Note: These patches aren&apos;t identical to the ones in GitHub.  For example, I&apos;ve figured out a better way to handle WrappedResourceRequest (at least until the last step).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>591526</commentid>
    <comment_count>8</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2012-03-29 13:52:54 -0700</bug_when>
    <thetext>Committed r112572: &lt;http://trac.webkit.org/changeset/112572&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>591796</commentid>
    <comment_count>9</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2012-03-29 18:37:19 -0700</bug_when>
    <thetext>Reverted r112572 for reason:

Does not compile in Windows component build

Committed r112634: &lt;http://trac.webkit.org/changeset/112634&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>592544</commentid>
    <comment_count>10</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2012-03-30 15:23:31 -0700</bug_when>
    <thetext>Committed r112731: &lt;http://trac.webkit.org/changeset/112731&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>134523</attachid>
            <date>2012-03-29 01:23:25 -0700</date>
            <delta_ts>2012-03-29 10:56:17 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-82582-20120329012324.patch</filename>
            <type>text/plain</type>
            <size>107572</size>
            <attacher name="Adam Barth">abarth</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDExMjUwNSkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDI5IEBACisyMDEyLTAzLTI5ICBBZGFtIEJh
cnRoICA8YWJhcnRoQHdlYmtpdC5vcmc+CisKKyAgICAgICAgTW92ZSBDUFAgZmlsZXMgcmVsYXRl
ZCB0byBSZXNvdXJjZUhhbmRsZSB0byBXZWJDb3JlL3BsYXRmb3JtCisgICAgICAgIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD04MjU4MgorCisgICAgICAgIFJldmlld2Vk
IGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFRoaXMgcGF0Y2ggbW92ZXMgYSBudW1iZXIg
b2YgZmlsZXMgdGhhdCBpbXBsZW1lbnQgcGFydHMgb2YgdGhlIHBsYXRmb3JtCisgICAgICAgIHBv
cnRpb24gb2YgdGhlIENocm9taXVtIFdlYktpdCBBUEkgZnJvbSB0aGUgV2ViS2l0IGxheWVyIHRv
CisgICAgICAgIFdlYkNvcmUvcGxhdGZvcm0uIFRoZXNlIGZpbGVzIGFyZSBpbiB0aGUgZGVwZW5k
ZW5jeSBjb25lIG9mCisgICAgICAgIFJlc291cmNlSGFuZGxlIGFuZCBoYXZlIG5vIGRlcGVuZGVu
Y2llcyBvbiBhbnl0aGluZyBvdXRzaWRlCisgICAgICAgIFdlYkNvcmUvcGxhdGZvcm0uCisKKyAg
ICAgICAgKiBXZWJDb3JlLmd5cC9XZWJDb3JlLmd5cDoKKyAgICAgICAgKiBXZWJDb3JlLmd5cGk6
CisgICAgICAgICogcGxhdGZvcm0vY2hyb21pdW0vc3VwcG9ydDogQWRkZWQuCisgICAgICAgICog
cGxhdGZvcm0vY2hyb21pdW0vc3VwcG9ydC9XZWJEYXRhLmNwcDogQ29waWVkIGZyb20gU291cmNl
L1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViRGF0YS5jcHAuCisgICAgICAgICogcGxhdGZvcm0vY2hy
b21pdW0vc3VwcG9ydC9XZWJIVFRQQm9keS5jcHA6IENvcGllZCBmcm9tIFNvdXJjZS9XZWJLaXQv
Y2hyb21pdW0vc3JjL1dlYkhUVFBCb2R5LmNwcC4KKyAgICAgICAgKiBwbGF0Zm9ybS9jaHJvbWl1
bS9zdXBwb3J0L1dlYkhUVFBMb2FkSW5mby5jcHA6IENvcGllZCBmcm9tIFNvdXJjZS9XZWJLaXQv
Y2hyb21pdW0vc3JjL1dlYkhUVFBMb2FkSW5mby5jcHAuCisgICAgICAgICogcGxhdGZvcm0vY2hy
b21pdW0vc3VwcG9ydC9XZWJVUkwuY3BwOiBDb3BpZWQgZnJvbSBTb3VyY2UvV2ViS2l0L2Nocm9t
aXVtL3NyYy9XZWJVUkwuY3BwLgorICAgICAgICAqIHBsYXRmb3JtL2Nocm9taXVtL3N1cHBvcnQv
V2ViVVJMRXJyb3IuY3BwOiBDb3BpZWQgZnJvbSBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9X
ZWJVUkxFcnJvci5jcHAuCisgICAgICAgICogcGxhdGZvcm0vY2hyb21pdW0vc3VwcG9ydC9XZWJV
UkxSZXF1ZXN0LmNwcDogQ29waWVkIGZyb20gU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2Vi
VVJMUmVxdWVzdC5jcHAuCisgICAgICAgICogcGxhdGZvcm0vY2hyb21pdW0vc3VwcG9ydC9XZWJV
UkxSZXF1ZXN0UHJpdmF0ZS5oOiBDb3BpZWQgZnJvbSBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Ny
Yy9XZWJVUkxSZXF1ZXN0UHJpdmF0ZS5oLgorICAgICAgICAqIHBsYXRmb3JtL2Nocm9taXVtL3N1
cHBvcnQvV2ViVVJMUmVzcG9uc2UuY3BwOiBDb3BpZWQgZnJvbSBTb3VyY2UvV2ViS2l0L2Nocm9t
aXVtL3NyYy9XZWJVUkxSZXNwb25zZS5jcHAuCisgICAgICAgICogcGxhdGZvcm0vY2hyb21pdW0v
c3VwcG9ydC9XZWJVUkxSZXNwb25zZVByaXZhdGUuaDogQ29waWVkIGZyb20gU291cmNlL1dlYktp
dC9jaHJvbWl1bS9zcmMvV2ViVVJMUmVzcG9uc2VQcml2YXRlLmguCisKIDIwMTItMDMtMjkgIFNo
ZXJpZmYgQm90ICA8d2Via2l0LnJldmlldy5ib3RAZ21haWwuY29tPgogCiAgICAgICAgIFVucmV2
aWV3ZWQsIHJvbGxpbmcgb3V0IHIxMTI1MDAuCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9XZWJDb3Jl
Lmd5cGkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBpCShyZXZpc2lv
biAxMTI1MDUpCisrKyBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkJKHdvcmtpbmcgY29weSkK
QEAgLTMyNzEsNiArMzI3MSwxNSBAQAogICAgICAgICAgICAgJ3BsYXRmb3JtL2Nocm9taXVtL1Ro
ZW1lQ2hyb21pdW1NYWMubW0nLAogICAgICAgICAgICAgJ3BsYXRmb3JtL2Nocm9taXVtL1RyYWNl
RXZlbnQuaCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vY2hyb21pdW0vV2lkZ2V0Q2hyb21pdW0u
Y3BwJywKKyAgICAgICAgICAgICdwbGF0Zm9ybS9jaHJvbWl1bS9zdXBwb3J0L1dlYkRhdGEuY3Bw
JywKKyAgICAgICAgICAgICdwbGF0Zm9ybS9jaHJvbWl1bS9zdXBwb3J0L1dlYkhUVFBCb2R5LmNw
cCcsCisgICAgICAgICAgICAncGxhdGZvcm0vY2hyb21pdW0vc3VwcG9ydC9XZWJIVFRQTG9hZElu
Zm8uY3BwJywKKyAgICAgICAgICAgICdwbGF0Zm9ybS9jaHJvbWl1bS9zdXBwb3J0L1dlYlVSTC5j
cHAnLAorICAgICAgICAgICAgJ3BsYXRmb3JtL2Nocm9taXVtL3N1cHBvcnQvV2ViVVJMRXJyb3Iu
Y3BwJywKKyAgICAgICAgICAgICdwbGF0Zm9ybS9jaHJvbWl1bS9zdXBwb3J0L1dlYlVSTFJlcXVl
c3QuY3BwJywKKyAgICAgICAgICAgICdwbGF0Zm9ybS9jaHJvbWl1bS9zdXBwb3J0L1dlYlVSTFJl
cXVlc3RQcml2YXRlLmgnLAorICAgICAgICAgICAgJ3BsYXRmb3JtL2Nocm9taXVtL3N1cHBvcnQv
V2ViVVJMUmVzcG9uc2UuY3BwJywKKyAgICAgICAgICAgICdwbGF0Zm9ybS9jaHJvbWl1bS9zdXBw
b3J0L1dlYlVSTFJlc3BvbnNlUHJpdmF0ZS5oJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9jb2Nv
YS9LZXlFdmVudENvY29hLmgnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL2NvY29hL0tleUV2ZW50
Q29jb2EubW0nLAogICAgICAgICAgICAgJ3BsYXRmb3JtL2VmbC9DbGlwYm9hcmRFZmwuY3BwJywK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lwL1dlYkNvcmUuZ3lwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lwL1dlYkNvcmUuZ3lwCShyZXZpc2lvbiAxMTI1
MDUpCisrKyBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cC9XZWJDb3JlLmd5cAkod29ya2luZyBj
b3B5KQpAQCAtMTAyLDYgKzEwMiw3IEBACiAgICAgICAnLi4vcGxhdGZvcm0vYXVkaW8nLAogICAg
ICAgJy4uL3BsYXRmb3JtL2F1ZGlvL2Nocm9taXVtJywKICAgICAgICcuLi9wbGF0Zm9ybS9jaHJv
bWl1bScsCisgICAgICAnLi4vcGxhdGZvcm0vY2hyb21pdW0vc3VwcG9ydCcsCiAgICAgICAnLi4v
cGxhdGZvcm0vZ3JhcGhpY3MnLAogICAgICAgJy4uL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVt
JywKICAgICAgICcuLi9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzJywKQEAgLTE0MzAsNiArMTQz
MSwxMCBAQAogICAgICAgJ3R5cGUnOiAnc3RhdGljX2xpYnJhcnknLAogICAgICAgJ2RlcGVuZGVu
Y2llcyc6IFsKICAgICAgICAgJ3dlYmNvcmVfcHJlcmVxdWlzaXRlcycsCisgICAgICAgICcuLi8u
Li9QbGF0Zm9ybS9QbGF0Zm9ybS5neXAvUGxhdGZvcm0uZ3lwOndlYmtpdF9wbGF0Zm9ybScsCisg
ICAgICBdLAorICAgICAgJ2RlZmluZXMnOiBbCisgICAgICAgICdXRUJLSVRfSU1QTEVNRU5UQVRJ
T049MScsCiAgICAgICBdLAogICAgICAgIyBUaGlzIGlzIG5lZWRlZCBmb3IgbWFjIGJlY2F1c2Ug
b2Ygd2Via2l0X3N5c3RlbV9pbnRlcmZhY2UuIEl0J2QgYmUgbmljZQogICAgICAgIyBpZiB0aGlz
IGhhcmQgZGVwZW5kZW5jeSBjb3VsZCBiZSBzcGxpdCBvZmYgdGhlIHJlc3QuCkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9jaHJvbWl1bS9zdXBwb3J0L1dlYkRhdGEuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2Nocm9taXVtL3N1cHBvcnQvV2ViRGF0YS5j
cHAJKHJldmlzaW9uIDExMjUwNSkJKGZyb20gU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2Vi
RGF0YS5jcHA6MTEyNTA1KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY2hyb21pdW0vc3Vw
cG9ydC9XZWJEYXRhLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDEwMyBAQAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAwOSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICog
CisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKyAqIG1ldDoKKyAqIAorICogICAgICog
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyAqIGluIHRoZSBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqIGRp
c3RyaWJ1dGlvbi4KKyAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9y
IHRoZSBuYW1lcyBvZiBpdHMKKyAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNl
IG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisgKiB0aGlzIHNvZnR3YXJlIHdpdGhv
dXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICogCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JT
CisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorICogT1dORVIg
T1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7
IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICog
VEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNs
dWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJwbGF0Zm9ybS9XZWJEYXRhLmgiCisKKyNpbmNsdWRl
ICJTaGFyZWRCdWZmZXIuaCIKKwordXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CisKK25hbWVzcGFj
ZSBXZWJLaXQgeworCitjbGFzcyBXZWJEYXRhUHJpdmF0ZSA6IHB1YmxpYyBTaGFyZWRCdWZmZXIg
eworfTsKKwordm9pZCBXZWJEYXRhOjpyZXNldCgpCit7CisgICAgaWYgKG1fcHJpdmF0ZSkgewor
ICAgICAgICBtX3ByaXZhdGUtPmRlcmVmKCk7CisgICAgICAgIG1fcHJpdmF0ZSA9IDA7CisgICAg
fQorfQorCit2b2lkIFdlYkRhdGE6OmFzc2lnbihjb25zdCBXZWJEYXRhJiBvdGhlcikKK3sKKyAg
ICBXZWJEYXRhUHJpdmF0ZSogcCA9IGNvbnN0X2Nhc3Q8V2ViRGF0YVByaXZhdGUqPihvdGhlci5t
X3ByaXZhdGUpOworICAgIGlmIChwKQorICAgICAgICBwLT5yZWYoKTsKKyAgICBhc3NpZ24ocCk7
Cit9CisKK3ZvaWQgV2ViRGF0YTo6YXNzaWduKGNvbnN0IGNoYXIqIGRhdGEsIHNpemVfdCBzaXpl
KQoreworICAgIGFzc2lnbihzdGF0aWNfY2FzdDxXZWJEYXRhUHJpdmF0ZSo+KAorICAgICAgICBT
aGFyZWRCdWZmZXI6OmNyZWF0ZShkYXRhLCBzaXplKS5sZWFrUmVmKCkpKTsKK30KKworc2l6ZV90
IFdlYkRhdGE6OnNpemUoKSBjb25zdAoreworICAgIGlmICghbV9wcml2YXRlKQorICAgICAgICBy
ZXR1cm4gMDsKKyAgICByZXR1cm4gY29uc3RfY2FzdDxXZWJEYXRhUHJpdmF0ZSo+KG1fcHJpdmF0
ZSktPnNpemUoKTsKK30KKworY29uc3QgY2hhciogV2ViRGF0YTo6ZGF0YSgpIGNvbnN0Cit7Cisg
ICAgaWYgKCFtX3ByaXZhdGUpCisgICAgICAgIHJldHVybiAwOworICAgIHJldHVybiBjb25zdF9j
YXN0PFdlYkRhdGFQcml2YXRlKj4obV9wcml2YXRlKS0+ZGF0YSgpOworfQorCitXZWJEYXRhOjpX
ZWJEYXRhKGNvbnN0IFBhc3NSZWZQdHI8U2hhcmVkQnVmZmVyPiYgYnVmZmVyKQorICAgIDogbV9w
cml2YXRlKHN0YXRpY19jYXN0PFdlYkRhdGFQcml2YXRlKj4oYnVmZmVyLmxlYWtSZWYoKSkpCit7
Cit9CisKK1dlYkRhdGEmIFdlYkRhdGE6Om9wZXJhdG9yPShjb25zdCBQYXNzUmVmUHRyPFNoYXJl
ZEJ1ZmZlcj4mIGJ1ZmZlcikKK3sKKyAgICBhc3NpZ24oc3RhdGljX2Nhc3Q8V2ViRGF0YVByaXZh
dGUqPihidWZmZXIubGVha1JlZigpKSk7CisgICAgcmV0dXJuICp0aGlzOworfQorCitXZWJEYXRh
OjpvcGVyYXRvciBQYXNzUmVmUHRyPFNoYXJlZEJ1ZmZlcj4oKSBjb25zdAoreworICAgIHJldHVy
biBQYXNzUmVmUHRyPFNoYXJlZEJ1ZmZlcj4oY29uc3RfY2FzdDxXZWJEYXRhUHJpdmF0ZSo+KG1f
cHJpdmF0ZSkpOworfQorCit2b2lkIFdlYkRhdGE6OmFzc2lnbihXZWJEYXRhUHJpdmF0ZSogcCkK
K3sKKyAgICAvLyBwIGlzIGFscmVhZHkgcmVmJ2QgZm9yIHVzIGJ5IHRoZSBjYWxsZXIKKyAgICBp
ZiAobV9wcml2YXRlKQorICAgICAgICBtX3ByaXZhdGUtPmRlcmVmKCk7CisgICAgbV9wcml2YXRl
ID0gcDsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9jaHJvbWl1bS9zdXBwb3J0L1dlYkRhdGEuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2Nocm9taXVtL3N1cHBvcnQvV2ViRGF0YS5jcHAJKHJldmlzaW9u
IDApCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jaHJvbWl1bS9zdXBwb3J0L1dlYkRhdGEu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yOSw3ICsyOSw3IEBACiAgKi8KIAogI2luY2x1ZGUgImNv
bmZpZy5oIgotI2luY2x1ZGUgInBsYXRmb3JtL1dlYkRhdGEuaCIKKyNpbmNsdWRlIDxwdWJsaWMv
V2ViRGF0YS5oPgogCiAjaW5jbHVkZSAiU2hhcmVkQnVmZmVyLmgiCiAKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2Nocm9taXVtL3N1cHBvcnQvV2ViSFRUUEJvZHkuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2Nocm9taXVtL3N1cHBvcnQvV2ViSFRUUEJv
ZHkuY3BwCShyZXZpc2lvbiAxMTI1MDUpCShmcm9tIFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3Jj
L1dlYkhUVFBCb2R5LmNwcDoxMTI1MDUpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jaHJv
bWl1bS9zdXBwb3J0L1dlYkhUVFBCb2R5LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDE5
NCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQorICogbWV0OgorICoK
KyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiBjb3B5cmlnaHQgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisgKiBp
biB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlCisgKiBkaXN0cmlidXRpb24uCisgKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2ds
ZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisgKiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQg
dG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorICogdGhpcyBzb2Z0
d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09O
VFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIg
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAor
ICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBP
RiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqIERBVEEsIE9S
IFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWQorICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICov
CisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJwbGF0Zm9ybS9XZWJIVFRQQm9keS5o
IgorCisjaW5jbHVkZSAiRm9ybURhdGEuaCIKKwordXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CisK
K25hbWVzcGFjZSBXZWJLaXQgeworCitjbGFzcyBXZWJIVFRQQm9keVByaXZhdGUgOiBwdWJsaWMg
Rm9ybURhdGEgeworfTsKKwordm9pZCBXZWJIVFRQQm9keTo6aW5pdGlhbGl6ZSgpCit7CisgICAg
YXNzaWduKHN0YXRpY19jYXN0PFdlYkhUVFBCb2R5UHJpdmF0ZSo+KEZvcm1EYXRhOjpjcmVhdGUo
KS5sZWFrUmVmKCkpKTsKK30KKwordm9pZCBXZWJIVFRQQm9keTo6cmVzZXQoKQoreworICAgIGFz
c2lnbigwKTsKK30KKwordm9pZCBXZWJIVFRQQm9keTo6YXNzaWduKGNvbnN0IFdlYkhUVFBCb2R5
JiBvdGhlcikKK3sKKyAgICBXZWJIVFRQQm9keVByaXZhdGUqIHAgPSBjb25zdF9jYXN0PFdlYkhU
VFBCb2R5UHJpdmF0ZSo+KG90aGVyLm1fcHJpdmF0ZSk7CisgICAgaWYgKHApCisgICAgICAgIHAt
PnJlZigpOworICAgIGFzc2lnbihwKTsKK30KKworc2l6ZV90IFdlYkhUVFBCb2R5OjplbGVtZW50
Q291bnQoKSBjb25zdAoreworICAgIEFTU0VSVCghaXNOdWxsKCkpOworICAgIHJldHVybiBtX3By
aXZhdGUtPmVsZW1lbnRzKCkuc2l6ZSgpOworfQorCitib29sIFdlYkhUVFBCb2R5OjplbGVtZW50
QXQoc2l6ZV90IGluZGV4LCBFbGVtZW50JiByZXN1bHQpIGNvbnN0Cit7CisgICAgQVNTRVJUKCFp
c051bGwoKSk7CisKKyAgICBpZiAoaW5kZXggPj0gbV9wcml2YXRlLT5lbGVtZW50cygpLnNpemUo
KSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgY29uc3QgRm9ybURhdGFFbGVtZW50JiBl
bGVtZW50ID0gbV9wcml2YXRlLT5lbGVtZW50cygpW2luZGV4XTsKKworICAgIHJlc3VsdC5kYXRh
LnJlc2V0KCk7CisgICAgcmVzdWx0LmZpbGVQYXRoLnJlc2V0KCk7CisgICAgcmVzdWx0LmZpbGVT
dGFydCA9IDA7CisgICAgcmVzdWx0LmZpbGVMZW5ndGggPSAwOworICAgIHJlc3VsdC5tb2RpZmlj
YXRpb25UaW1lID0gMC4wOworICAgIHJlc3VsdC5ibG9iVVJMID0gS1VSTCgpOworCisgICAgc3dp
dGNoIChlbGVtZW50Lm1fdHlwZSkgeworICAgIGNhc2UgRm9ybURhdGFFbGVtZW50OjpkYXRhOgor
ICAgICAgICByZXN1bHQudHlwZSA9IEVsZW1lbnQ6OlR5cGVEYXRhOworICAgICAgICByZXN1bHQu
ZGF0YS5hc3NpZ24oZWxlbWVudC5tX2RhdGEuZGF0YSgpLCBlbGVtZW50Lm1fZGF0YS5zaXplKCkp
OworICAgICAgICBicmVhazsKKyAgICBjYXNlIEZvcm1EYXRhRWxlbWVudDo6ZW5jb2RlZEZpbGU6
CisgICAgICAgIHJlc3VsdC50eXBlID0gRWxlbWVudDo6VHlwZUZpbGU7CisgICAgICAgIHJlc3Vs
dC5maWxlUGF0aCA9IGVsZW1lbnQubV9maWxlbmFtZTsKKyNpZiBFTkFCTEUoQkxPQikKKyAgICAg
ICAgcmVzdWx0LmZpbGVTdGFydCA9IGVsZW1lbnQubV9maWxlU3RhcnQ7CisgICAgICAgIHJlc3Vs
dC5maWxlTGVuZ3RoID0gZWxlbWVudC5tX2ZpbGVMZW5ndGg7CisgICAgICAgIHJlc3VsdC5tb2Rp
ZmljYXRpb25UaW1lID0gZWxlbWVudC5tX2V4cGVjdGVkRmlsZU1vZGlmaWNhdGlvblRpbWU7Cisj
ZW5kaWYKKyAgICAgICAgYnJlYWs7CisjaWYgRU5BQkxFKEJMT0IpCisgICAgY2FzZSBGb3JtRGF0
YUVsZW1lbnQ6OmVuY29kZWRCbG9iOgorICAgICAgICByZXN1bHQudHlwZSA9IEVsZW1lbnQ6OlR5
cGVCbG9iOworICAgICAgICByZXN1bHQuYmxvYlVSTCA9IGVsZW1lbnQubV9ibG9iVVJMOworICAg
ICAgICBicmVhazsKKyNlbmRpZgorICAgIGRlZmF1bHQ6CisgICAgICAgIEFTU0VSVF9OT1RfUkVB
Q0hFRCgpOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgcmV0dXJuIHRydWU7
Cit9CisKK3ZvaWQgV2ViSFRUUEJvZHk6OmFwcGVuZERhdGEoY29uc3QgV2ViRGF0YSYgZGF0YSkK
K3sKKyAgICBlbnN1cmVNdXRhYmxlKCk7CisgICAgLy8gRklYTUU6IEZvcm1EYXRhRWxlbWVudDo6
bV9kYXRhIHNob3VsZCBiZSBhIFNoYXJlZEJ1ZmZlcjxjaGFyPi4gIFRoZW4gd2UKKyAgICAvLyBj
b3VsZCBhdm9pZCB0aGlzIGJ1ZmZlciBjb3B5LgorICAgIG1fcHJpdmF0ZS0+YXBwZW5kRGF0YShk
YXRhLmRhdGEoKSwgZGF0YS5zaXplKCkpOworfQorCit2b2lkIFdlYkhUVFBCb2R5OjphcHBlbmRG
aWxlKGNvbnN0IFdlYlN0cmluZyYgZmlsZVBhdGgpCit7CisgICAgZW5zdXJlTXV0YWJsZSgpOwor
ICAgIG1fcHJpdmF0ZS0+YXBwZW5kRmlsZShmaWxlUGF0aCk7Cit9CisKK3ZvaWQgV2ViSFRUUEJv
ZHk6OmFwcGVuZEZpbGVSYW5nZShjb25zdCBXZWJTdHJpbmcmIGZpbGVQYXRoLCBsb25nIGxvbmcg
ZmlsZVN0YXJ0LCBsb25nIGxvbmcgZmlsZUxlbmd0aCwgZG91YmxlIG1vZGlmaWNhdGlvblRpbWUp
Cit7CisjaWYgRU5BQkxFKEJMT0IpCisgICAgZW5zdXJlTXV0YWJsZSgpOworICAgIG1fcHJpdmF0
ZS0+YXBwZW5kRmlsZVJhbmdlKGZpbGVQYXRoLCBmaWxlU3RhcnQsIGZpbGVMZW5ndGgsIG1vZGlm
aWNhdGlvblRpbWUpOworI2VuZGlmCit9CisKK3ZvaWQgV2ViSFRUUEJvZHk6OmFwcGVuZEJsb2Io
Y29uc3QgV2ViVVJMJiBibG9iVVJMKQoreworI2lmIEVOQUJMRShCTE9CKQorICAgIGVuc3VyZU11
dGFibGUoKTsKKyAgICBtX3ByaXZhdGUtPmFwcGVuZEJsb2IoYmxvYlVSTCk7CisjZW5kaWYKK30K
KworbG9uZyBsb25nIFdlYkhUVFBCb2R5OjppZGVudGlmaWVyKCkgY29uc3QKK3sKKyAgICBBU1NF
UlQoIWlzTnVsbCgpKTsKKyAgICByZXR1cm4gbV9wcml2YXRlLT5pZGVudGlmaWVyKCk7Cit9CisK
K3ZvaWQgV2ViSFRUUEJvZHk6OnNldElkZW50aWZpZXIobG9uZyBsb25nIGlkZW50aWZpZXIpCit7
CisgICAgZW5zdXJlTXV0YWJsZSgpOworICAgIHJldHVybiBtX3ByaXZhdGUtPnNldElkZW50aWZp
ZXIoaWRlbnRpZmllcik7Cit9CisKK2Jvb2wgV2ViSFRUUEJvZHk6OmNvbnRhaW5zUGFzc3dvcmRE
YXRhKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9wcml2YXRlLT5jb250YWluc1Bhc3N3b3JkRGF0
YSgpOworfQorCit2b2lkIFdlYkhUVFBCb2R5OjpzZXRDb250YWluc1Bhc3N3b3JkRGF0YShib29s
IGNvbnRhaW5zUGFzc3dvcmREYXRhKQoreworICAgIG1fcHJpdmF0ZS0+c2V0Q29udGFpbnNQYXNz
d29yZERhdGEoY29udGFpbnNQYXNzd29yZERhdGEpOworfQorCitXZWJIVFRQQm9keTo6V2ViSFRU
UEJvZHkoY29uc3QgUGFzc1JlZlB0cjxGb3JtRGF0YT4mIGRhdGEpCisgICAgOiBtX3ByaXZhdGUo
c3RhdGljX2Nhc3Q8V2ViSFRUUEJvZHlQcml2YXRlKj4oZGF0YS5sZWFrUmVmKCkpKQoreworfQor
CitXZWJIVFRQQm9keSYgV2ViSFRUUEJvZHk6Om9wZXJhdG9yPShjb25zdCBQYXNzUmVmUHRyPEZv
cm1EYXRhPiYgZGF0YSkKK3sKKyAgICBhc3NpZ24oc3RhdGljX2Nhc3Q8V2ViSFRUUEJvZHlQcml2
YXRlKj4oZGF0YS5sZWFrUmVmKCkpKTsKKyAgICByZXR1cm4gKnRoaXM7Cit9CisKK1dlYkhUVFBC
b2R5OjpvcGVyYXRvciBQYXNzUmVmUHRyPEZvcm1EYXRhPigpIGNvbnN0Cit7CisgICAgcmV0dXJu
IG1fcHJpdmF0ZTsKK30KKwordm9pZCBXZWJIVFRQQm9keTo6YXNzaWduKFdlYkhUVFBCb2R5UHJp
dmF0ZSogcCkKK3sKKyAgICAvLyBwIGlzIGFscmVhZHkgcmVmJ2QgZm9yIHVzIGJ5IHRoZSBjYWxs
ZXIKKyAgICBpZiAobV9wcml2YXRlKQorICAgICAgICBtX3ByaXZhdGUtPmRlcmVmKCk7CisgICAg
bV9wcml2YXRlID0gcDsKK30KKwordm9pZCBXZWJIVFRQQm9keTo6ZW5zdXJlTXV0YWJsZSgpCit7
CisgICAgQVNTRVJUKCFpc051bGwoKSk7CisgICAgaWYgKCFtX3ByaXZhdGUtPmhhc09uZVJlZigp
KQorICAgICAgICBhc3NpZ24oc3RhdGljX2Nhc3Q8V2ViSFRUUEJvZHlQcml2YXRlKj4obV9wcml2
YXRlLT5jb3B5KCkubGVha1JlZigpKSk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdApJbmRl
eDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY2hyb21pdW0vc3VwcG9ydC9XZWJIVFRQQm9keS5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY2hyb21pdW0vc3VwcG9y
dC9XZWJIVFRQQm9keS5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9jaHJvbWl1bS9zdXBwb3J0L1dlYkhUVFBCb2R5LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjks
NyArMjksNyBAQAogICovCiAKICNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJwbGF0Zm9y
bS9XZWJIVFRQQm9keS5oIgorI2luY2x1ZGUgPHB1YmxpYy9XZWJIVFRQQm9keS5oPgogCiAjaW5j
bHVkZSAiRm9ybURhdGEuaCIKIApJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY2hyb21p
dW0vc3VwcG9ydC9XZWJIVFRQTG9hZEluZm8uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2Nocm9taXVtL3N1cHBvcnQvV2ViSFRUUExvYWRJbmZvLmNwcAkocmV2aXNp
b24gMTEyNTA1KQkoZnJvbSBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJIVFRQTG9hZElu
Zm8uY3BwOjExMjUwNSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2Nocm9taXVtL3N1cHBv
cnQvV2ViSFRUUExvYWRJbmZvLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDE0NyBAQAor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAxMCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQorICogbWV0OgorICoKKyAqICAg
ICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisgKiBpbiB0aGUg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisg
KiBkaXN0cmlidXRpb24uCisgKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMu
IG5vciB0aGUgbmFtZXMgb2YgaXRzCisgKiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5k
b3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorICogdGhpcyBzb2Z0d2FyZSB3
aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVU
T1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorICogT1dO
RVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQor
ICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNp
bmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJwbGF0Zm9ybS9XZWJIVFRQTG9hZEluZm8uaCIK
KworI2luY2x1ZGUgIlJlc291cmNlTG9hZEluZm8uaCIKKyNpbmNsdWRlICJSZXNvdXJjZVJlc3Bv
bnNlLmgiCisjaW5jbHVkZSAicGxhdGZvcm0vV2ViSFRUUEhlYWRlclZpc2l0b3IuaCIKKyNpbmNs
dWRlICJwbGF0Zm9ybS9XZWJTdHJpbmcuaCIKKwordXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CisK
K25hbWVzcGFjZSBXZWJLaXQgeworCit2b2lkIFdlYkhUVFBMb2FkSW5mbzo6aW5pdGlhbGl6ZSgp
Cit7CisgICAgbV9wcml2YXRlID0gYWRvcHRSZWYobmV3IFJlc291cmNlTG9hZEluZm8oKSk7Cit9
CisKK3ZvaWQgV2ViSFRUUExvYWRJbmZvOjpyZXNldCgpCit7CisgICAgbV9wcml2YXRlLnJlc2V0
KCk7Cit9CisKK3ZvaWQgV2ViSFRUUExvYWRJbmZvOjphc3NpZ24oY29uc3QgV2ViSFRUUExvYWRJ
bmZvJiByKQoreworICAgIG1fcHJpdmF0ZSA9IHIubV9wcml2YXRlOworfQorCitXZWJIVFRQTG9h
ZEluZm86OldlYkhUVFBMb2FkSW5mbyhXVEY6OlBhc3NSZWZQdHI8V2ViQ29yZTo6UmVzb3VyY2VM
b2FkSW5mbz4gdmFsdWUpCit7CisgICAgbV9wcml2YXRlID0gdmFsdWU7Cit9CisKK1dlYkhUVFBM
b2FkSW5mbzo6b3BlcmF0b3IgV1RGOjpQYXNzUmVmUHRyPFdlYkNvcmU6OlJlc291cmNlTG9hZElu
Zm8+KCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9wcml2YXRlLmdldCgpOworfQorCitpbnQgV2Vi
SFRUUExvYWRJbmZvOjpodHRwU3RhdHVzQ29kZSgpIGNvbnN0Cit7CisgICAgQVNTRVJUKCFtX3By
aXZhdGUuaXNOdWxsKCkpOworICAgIHJldHVybiBtX3ByaXZhdGUtPmh0dHBTdGF0dXNDb2RlOwor
fQorCit2b2lkIFdlYkhUVFBMb2FkSW5mbzo6c2V0SFRUUFN0YXR1c0NvZGUoaW50IHN0YXR1c0Nv
ZGUpCit7CisgICAgQVNTRVJUKCFtX3ByaXZhdGUuaXNOdWxsKCkpOworICAgIG1fcHJpdmF0ZS0+
aHR0cFN0YXR1c0NvZGUgPSBzdGF0dXNDb2RlOworfQorCitXZWJTdHJpbmcgV2ViSFRUUExvYWRJ
bmZvOjpodHRwU3RhdHVzVGV4dCgpIGNvbnN0Cit7CisgICAgQVNTRVJUKCFtX3ByaXZhdGUuaXNO
dWxsKCkpOworICAgIHJldHVybiBtX3ByaXZhdGUtPmh0dHBTdGF0dXNUZXh0OworfQorCit2b2lk
IFdlYkhUVFBMb2FkSW5mbzo6c2V0SFRUUFN0YXR1c1RleHQoY29uc3QgV2ViU3RyaW5nJiBzdGF0
dXNUZXh0KQoreworICAgIEFTU0VSVCghbV9wcml2YXRlLmlzTnVsbCgpKTsKKyAgICBtX3ByaXZh
dGUtPmh0dHBTdGF0dXNUZXh0ID0gc3RhdHVzVGV4dDsKK30KKworbG9uZyBsb25nIFdlYkhUVFBM
b2FkSW5mbzo6ZW5jb2RlZERhdGFMZW5ndGgoKSBjb25zdAoreworICAgIEFTU0VSVCghbV9wcml2
YXRlLmlzTnVsbCgpKTsKKyAgICByZXR1cm4gbV9wcml2YXRlLT5lbmNvZGVkRGF0YUxlbmd0aDsK
K30KKwordm9pZCBXZWJIVFRQTG9hZEluZm86OnNldEVuY29kZWREYXRhTGVuZ3RoKGxvbmcgbG9u
ZyBlbmNvZGVkRGF0YUxlbmd0aCkKK3sKKyAgICBBU1NFUlQoIW1fcHJpdmF0ZS5pc051bGwoKSk7
CisgICAgbV9wcml2YXRlLT5lbmNvZGVkRGF0YUxlbmd0aCA9IGVuY29kZWREYXRhTGVuZ3RoOwor
fQorCitzdGF0aWMgdm9pZCBhZGRIZWFkZXIoSFRUUEhlYWRlck1hcCogbWFwLCBjb25zdCBXZWJT
dHJpbmcmIG5hbWUsIGNvbnN0IFdlYlN0cmluZyYgdmFsdWUpCit7CisgICAgcGFpcjxIVFRQSGVh
ZGVyTWFwOjppdGVyYXRvciwgYm9vbD4gcmVzdWx0ID0gbWFwLT5hZGQobmFtZSwgdmFsdWUpOwor
ICAgIGlmICghcmVzdWx0LnNlY29uZCkKKyAgICAgICAgcmVzdWx0LmZpcnN0LT5zZWNvbmQgKz0g
IiwgIiArIFN0cmluZyh2YWx1ZSk7Cit9CisKK3ZvaWQgV2ViSFRUUExvYWRJbmZvOjphZGRSZXF1
ZXN0SGVhZGVyKGNvbnN0IFdlYlN0cmluZyYgbmFtZSwgY29uc3QgV2ViU3RyaW5nJiB2YWx1ZSkK
K3sKKyAgICBBU1NFUlQoIW1fcHJpdmF0ZS5pc051bGwoKSk7CisgICAgYWRkSGVhZGVyKCZtX3By
aXZhdGUtPnJlcXVlc3RIZWFkZXJzLCBuYW1lLCB2YWx1ZSk7Cit9CisKK3ZvaWQgV2ViSFRUUExv
YWRJbmZvOjphZGRSZXNwb25zZUhlYWRlcihjb25zdCBXZWJTdHJpbmcmIG5hbWUsIGNvbnN0IFdl
YlN0cmluZyYgdmFsdWUpCit7CisgICAgQVNTRVJUKCFtX3ByaXZhdGUuaXNOdWxsKCkpOworICAg
IGFkZEhlYWRlcigmbV9wcml2YXRlLT5yZXNwb25zZUhlYWRlcnMsIG5hbWUsIHZhbHVlKTsKK30K
KworV2ViU3RyaW5nIFdlYkhUVFBMb2FkSW5mbzo6cmVxdWVzdEhlYWRlcnNUZXh0KCkgY29uc3QK
K3sKKyAgICBBU1NFUlQoIW1fcHJpdmF0ZS5pc051bGwoKSk7CisgICAgcmV0dXJuIG1fcHJpdmF0
ZS0+cmVxdWVzdEhlYWRlcnNUZXh0OworfQorCit2b2lkIFdlYkhUVFBMb2FkSW5mbzo6c2V0UmVx
dWVzdEhlYWRlcnNUZXh0KGNvbnN0IFdlYlN0cmluZyYgaGVhZGVyc1RleHQpCit7CisgICAgQVNT
RVJUKCFtX3ByaXZhdGUuaXNOdWxsKCkpOworICAgIG1fcHJpdmF0ZS0+cmVxdWVzdEhlYWRlcnNU
ZXh0ID0gaGVhZGVyc1RleHQ7Cit9CisKK1dlYlN0cmluZyBXZWJIVFRQTG9hZEluZm86OnJlc3Bv
bnNlSGVhZGVyc1RleHQoKSBjb25zdAoreworICAgIEFTU0VSVCghbV9wcml2YXRlLmlzTnVsbCgp
KTsKKyAgICByZXR1cm4gbV9wcml2YXRlLT5yZXNwb25zZUhlYWRlcnNUZXh0OworfQorCit2b2lk
IFdlYkhUVFBMb2FkSW5mbzo6c2V0UmVzcG9uc2VIZWFkZXJzVGV4dChjb25zdCBXZWJTdHJpbmcm
IGhlYWRlcnNUZXh0KQoreworICAgIEFTU0VSVCghbV9wcml2YXRlLmlzTnVsbCgpKTsKKyAgICBt
X3ByaXZhdGUtPnJlc3BvbnNlSGVhZGVyc1RleHQgPSBoZWFkZXJzVGV4dDsKK30KKworfSAvLyBu
YW1lc3BhY2UgV2ViS2l0CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jaHJvbWl1bS9z
dXBwb3J0L1dlYkhUVFBMb2FkSW5mby5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vY2hyb21pdW0vc3VwcG9ydC9XZWJIVFRQTG9hZEluZm8uY3BwCShyZXZpc2lvbiAw
KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY2hyb21pdW0vc3VwcG9ydC9XZWJIVFRQTG9h
ZEluZm8uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yOSwxMiArMjksMTIgQEAKICAqLwogCiAjaW5j
bHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAicGxhdGZvcm0vV2ViSFRUUExvYWRJbmZvLmgiCisj
aW5jbHVkZSA8cHVibGljL1dlYkhUVFBMb2FkSW5mby5oPgogCiAjaW5jbHVkZSAiUmVzb3VyY2VM
b2FkSW5mby5oIgogI2luY2x1ZGUgIlJlc291cmNlUmVzcG9uc2UuaCIKLSNpbmNsdWRlICJwbGF0
Zm9ybS9XZWJIVFRQSGVhZGVyVmlzaXRvci5oIgotI2luY2x1ZGUgInBsYXRmb3JtL1dlYlN0cmlu
Zy5oIgorI2luY2x1ZGUgPHB1YmxpYy9XZWJIVFRQSGVhZGVyVmlzaXRvci5oPgorI2luY2x1ZGUg
PHB1YmxpYy9XZWJTdHJpbmcuaD4KIAogdXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CiAKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2Nocm9taXVtL3N1cHBvcnQvV2ViVVJMLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jaHJvbWl1bS9zdXBwb3J0L1dlYlVS
TC5jcHAJKHJldmlzaW9uIDExMjUwNSkJKGZyb20gU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMv
V2ViVVJMLmNwcDoxMTI1MDUpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jaHJvbWl1bS9z
dXBwb3J0L1dlYlVSTC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw1OCBAQAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAwOSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICog
CisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKyAqIG1ldDoKKyAqIAorICogICAgICog
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyAqIGluIHRoZSBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqIGRp
c3RyaWJ1dGlvbi4KKyAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9y
IHRoZSBuYW1lcyBvZiBpdHMKKyAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNl
IG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisgKiB0aGlzIHNvZnR3YXJlIHdpdGhv
dXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICogCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JT
CisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorICogT1dORVIg
T1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7
IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICog
VEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNs
dWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJwbGF0Zm9ybS9XZWJVUkwuaCIKKworI2luY2x1ZGUg
IktVUkwuaCIKKworbmFtZXNwYWNlIFdlYktpdCB7CisKK1dlYlVSTDo6V2ViVVJMKGNvbnN0IFdl
YkNvcmU6OktVUkwmIHVybCkKKyAgICA6IG1fc3BlYyh1cmwudXRmOFN0cmluZygpKQorICAgICwg
bV9wYXJzZWQodXJsLnBhcnNlZCgpKQorICAgICwgbV9pc1ZhbGlkKHVybC5pc1ZhbGlkKCkpCit7
Cit9CisKK1dlYlVSTCYgV2ViVVJMOjpvcGVyYXRvcj0oY29uc3QgV2ViQ29yZTo6S1VSTCYgdXJs
KQoreworICAgIG1fc3BlYyA9IHVybC51dGY4U3RyaW5nKCk7CisgICAgbV9wYXJzZWQgPSB1cmwu
cGFyc2VkKCk7CisgICAgbV9pc1ZhbGlkID0gdXJsLmlzVmFsaWQoKTsKKyAgICByZXR1cm4gKnRo
aXM7Cit9CisKK1dlYlVSTDo6b3BlcmF0b3IgV2ViQ29yZTo6S1VSTCgpIGNvbnN0Cit7CisgICAg
cmV0dXJuIFdlYkNvcmU6OktVUkwobV9zcGVjLCBtX3BhcnNlZCwgbV9pc1ZhbGlkKTsKK30KKwor
fSAvLyBuYW1lc3BhY2UgV2ViS2l0CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jaHJv
bWl1bS9zdXBwb3J0L1dlYlVSTC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vY2hyb21pdW0vc3VwcG9ydC9XZWJVUkwuY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vY2hyb21pdW0vc3VwcG9ydC9XZWJVUkwuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0yOSw3ICsyOSw3IEBACiAgKi8KIAogI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1
ZGUgInBsYXRmb3JtL1dlYlVSTC5oIgorI2luY2x1ZGUgPHB1YmxpYy9XZWJVUkwuaD4KIAogI2lu
Y2x1ZGUgIktVUkwuaCIKIApJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY2hyb21pdW0v
c3VwcG9ydC9XZWJVUkxFcnJvci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vY2hyb21pdW0vc3VwcG9ydC9XZWJVUkxFcnJvci5jcHAJKHJldmlzaW9uIDExMjUwNSkJ
KGZyb20gU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViVVJMRXJyb3IuY3BwOjExMjUwNSkK
KysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2Nocm9taXVtL3N1cHBvcnQvV2ViVVJMRXJyb3Iu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNzIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMDkgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucyBhcmUKKyAqIG1ldDoKKyAqCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
ICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZQorICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogZGlzdHJpYnV0aW9uLgorICog
ICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0
cworICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9k
dWN0cyBkZXJpdmVkIGZyb20KKyAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlv
ciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQg
QU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAq
IExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElO
IE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lB
TCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VAorICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisj
aW5jbHVkZSAicGxhdGZvcm0vV2ViVVJMRXJyb3IuaCIKKworI2luY2x1ZGUgIktVUkwuaCIKKyNp
bmNsdWRlICJSZXNvdXJjZUVycm9yLmgiCisjaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgor
Cit1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKKworbmFtZXNwYWNlIFdlYktpdCB7CisKK1dlYlVS
TEVycm9yOjpXZWJVUkxFcnJvcihjb25zdCBSZXNvdXJjZUVycm9yJiBlcnJvcikKK3sKKyAgICAq
dGhpcyA9IGVycm9yOworfQorCitXZWJVUkxFcnJvciYgV2ViVVJMRXJyb3I6Om9wZXJhdG9yPShj
b25zdCBSZXNvdXJjZUVycm9yJiBlcnJvcikKK3sKKyAgICBpZiAoZXJyb3IuaXNOdWxsKCkpCisg
ICAgICAgICp0aGlzID0gV2ViVVJMRXJyb3IoKTsKKyAgICBlbHNlIHsKKyAgICAgICAgZG9tYWlu
ID0gZXJyb3IuZG9tYWluKCk7CisgICAgICAgIHJlYXNvbiA9IGVycm9yLmVycm9yQ29kZSgpOwor
ICAgICAgICB1bnJlYWNoYWJsZVVSTCA9IEtVUkwoUGFyc2VkVVJMU3RyaW5nLCBlcnJvci5mYWls
aW5nVVJMKCkpOworICAgICAgICBpc0NhbmNlbGxhdGlvbiA9IGVycm9yLmlzQ2FuY2VsbGF0aW9u
KCk7CisgICAgfQorICAgIHJldHVybiAqdGhpczsKK30KKworV2ViVVJMRXJyb3I6Om9wZXJhdG9y
IFJlc291cmNlRXJyb3IoKSBjb25zdAoreworICAgIGlmICghcmVhc29uKQorICAgICAgICByZXR1
cm4gUmVzb3VyY2VFcnJvcigpOworICAgIENTdHJpbmcgc3BlYyA9IHVucmVhY2hhYmxlVVJMLnNw
ZWMoKTsKKyAgICBSZXNvdXJjZUVycm9yIHJlc291cmNlRXJyb3IgPSBSZXNvdXJjZUVycm9yKGRv
bWFpbiwgcmVhc29uLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgU3RyaW5nOjpmcm9tVVRGOChzcGVjLmRhdGEoKSwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNwZWMubGVuZ3RoKCkpLCBTdHJpbmcoKSk7Cisg
ICAgcmVzb3VyY2VFcnJvci5zZXRJc0NhbmNlbGxhdGlvbihpc0NhbmNlbGxhdGlvbik7CisgICAg
cmV0dXJuIHJlc291cmNlRXJyb3I7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdApJbmRleDog
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY2hyb21pdW0vc3VwcG9ydC9XZWJVUkxFcnJvci5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY2hyb21pdW0vc3VwcG9ydC9X
ZWJVUkxFcnJvci5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9j
aHJvbWl1bS9zdXBwb3J0L1dlYlVSTEVycm9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjksNyAr
MjksNyBAQAogICovCiAKICNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJwbGF0Zm9ybS9X
ZWJVUkxFcnJvci5oIgorI2luY2x1ZGUgPHB1YmxpYy9XZWJVUkxFcnJvci5oPgogCiAjaW5jbHVk
ZSAiS1VSTC5oIgogI2luY2x1ZGUgIlJlc291cmNlRXJyb3IuaCIKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2Nocm9taXVtL3N1cHBvcnQvV2ViVVJMUmVxdWVzdC5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY2hyb21pdW0vc3VwcG9ydC9XZWJVUkxSZXF1
ZXN0LmNwcAkocmV2aXNpb24gMTEyNTA1KQkoZnJvbSBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Ny
Yy9XZWJVUkxSZXF1ZXN0LmNwcDoxMTI1MDUpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9j
aHJvbWl1bS9zdXBwb3J0L1dlYlVSTFJlcXVlc3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAg
KzEsMzQ3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA5IEdvb2dsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisgKiBtZXQ6
CisgKgorICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIK
KyAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUKKyAqIGRpc3RyaWJ1dGlvbi4KKyAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2Yg
R29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUg
dXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisgKiB0aGlz
IHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoK
KyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFO
RCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAqIEEgUEFSVElD
VUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJ
R0hUCisgKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFBST0NVUkVN
RU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorICogREFU
QSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
CisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgInBsYXRmb3JtL1dlYlVSTFJl
cXVlc3QuaCIKKworI2luY2x1ZGUgIlJlc291cmNlUmVxdWVzdC5oIgorCisjaW5jbHVkZSAicGxh
dGZvcm0vV2ViSFRUUEJvZHkuaCIKKyNpbmNsdWRlICJwbGF0Zm9ybS9XZWJIVFRQSGVhZGVyVmlz
aXRvci5oIgorI2luY2x1ZGUgInBsYXRmb3JtL1dlYlVSTC5oIgorI2luY2x1ZGUgIldlYlVSTFJl
cXVlc3RQcml2YXRlLmgiCisKK3VzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOworCituYW1lc3BhY2Ug
V2ViS2l0IHsKKworbmFtZXNwYWNlIHsKKworY2xhc3MgRXh0cmFEYXRhQ29udGFpbmVyIDogcHVi
bGljIFJlc291cmNlUmVxdWVzdDo6RXh0cmFEYXRhIHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgUGFz
c1JlZlB0cjxFeHRyYURhdGFDb250YWluZXI+IGNyZWF0ZShXZWJVUkxSZXF1ZXN0OjpFeHRyYURh
dGEqIGV4dHJhRGF0YSkgeyByZXR1cm4gYWRvcHRSZWYobmV3IEV4dHJhRGF0YUNvbnRhaW5lcihl
eHRyYURhdGEpKTsgfQorCisgICAgdmlydHVhbCB+RXh0cmFEYXRhQ29udGFpbmVyKCkgeyB9CisK
KyAgICBXZWJVUkxSZXF1ZXN0OjpFeHRyYURhdGEqIGV4dHJhRGF0YSgpIGNvbnN0IHsgcmV0dXJu
IG1fZXh0cmFEYXRhLmdldCgpOyB9CisKK3ByaXZhdGU6CisgICAgZXhwbGljaXQgRXh0cmFEYXRh
Q29udGFpbmVyKFdlYlVSTFJlcXVlc3Q6OkV4dHJhRGF0YSogZXh0cmFEYXRhKQorICAgICAgICA6
IG1fZXh0cmFEYXRhKGFkb3B0UHRyKGV4dHJhRGF0YSkpCisgICAgeworICAgIH0KKworICAgIE93
blB0cjxXZWJVUkxSZXF1ZXN0OjpFeHRyYURhdGE+IG1fZXh0cmFEYXRhOworfTsKKworfSAvLyBu
YW1lc3BhY2UKKworLy8gVGhlIHN0YW5kYXJkIGltcGxlbWVudGF0aW9uIG9mIFdlYlVSTFJlcXVl
c3RQcml2YXRlLCB3aGljaCBtYWludGFpbnMKKy8vIG93bmVyc2hpcCBvZiBhIFJlc291cmNlUmVx
dWVzdCBpbnN0YW5jZS4KK2NsYXNzIFdlYlVSTFJlcXVlc3RQcml2YXRlSW1wbCA6IHB1YmxpYyBX
ZWJVUkxSZXF1ZXN0UHJpdmF0ZSB7CitwdWJsaWM6CisgICAgV2ViVVJMUmVxdWVzdFByaXZhdGVJ
bXBsKCkKKyAgICB7CisgICAgICAgIG1fcmVzb3VyY2VSZXF1ZXN0ID0gJm1fcmVzb3VyY2VSZXF1
ZXN0QWxsb2NhdGlvbjsKKyAgICB9CisKKyAgICBXZWJVUkxSZXF1ZXN0UHJpdmF0ZUltcGwoY29u
c3QgV2ViVVJMUmVxdWVzdFByaXZhdGUqIHApCisgICAgICAgIDogbV9yZXNvdXJjZVJlcXVlc3RB
bGxvY2F0aW9uKCpwLT5tX3Jlc291cmNlUmVxdWVzdCkKKyAgICB7CisgICAgICAgIG1fcmVzb3Vy
Y2VSZXF1ZXN0ID0gJm1fcmVzb3VyY2VSZXF1ZXN0QWxsb2NhdGlvbjsKKyAgICAgICAgbV9hbGxv
d1N0b3JlZENyZWRlbnRpYWxzID0gcC0+bV9hbGxvd1N0b3JlZENyZWRlbnRpYWxzOworICAgIH0K
KworICAgIHZpcnR1YWwgdm9pZCBkaXNwb3NlKCkgeyBkZWxldGUgdGhpczsgfQorCitwcml2YXRl
OgorICAgIHZpcnR1YWwgfldlYlVSTFJlcXVlc3RQcml2YXRlSW1wbCgpIHsgfQorCisgICAgUmVz
b3VyY2VSZXF1ZXN0IG1fcmVzb3VyY2VSZXF1ZXN0QWxsb2NhdGlvbjsKK307CisKK3ZvaWQgV2Vi
VVJMUmVxdWVzdDo6aW5pdGlhbGl6ZSgpCit7CisgICAgYXNzaWduKG5ldyBXZWJVUkxSZXF1ZXN0
UHJpdmF0ZUltcGwoKSk7Cit9CisKK3ZvaWQgV2ViVVJMUmVxdWVzdDo6cmVzZXQoKQoreworICAg
IGFzc2lnbigwKTsKK30KKwordm9pZCBXZWJVUkxSZXF1ZXN0Ojphc3NpZ24oY29uc3QgV2ViVVJM
UmVxdWVzdCYgcikKK3sKKyAgICBpZiAoJnIgIT0gdGhpcykKKyAgICAgICAgYXNzaWduKHIubV9w
cml2YXRlID8gbmV3IFdlYlVSTFJlcXVlc3RQcml2YXRlSW1wbChyLm1fcHJpdmF0ZSkgOiAwKTsK
K30KKworYm9vbCBXZWJVUkxSZXF1ZXN0Ojppc051bGwoKSBjb25zdAoreworICAgIHJldHVybiAh
bV9wcml2YXRlIHx8IG1fcHJpdmF0ZS0+bV9yZXNvdXJjZVJlcXVlc3QtPmlzTnVsbCgpOworfQor
CitXZWJVUkwgV2ViVVJMUmVxdWVzdDo6dXJsKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9wcml2
YXRlLT5tX3Jlc291cmNlUmVxdWVzdC0+dXJsKCk7Cit9CisKK3ZvaWQgV2ViVVJMUmVxdWVzdDo6
c2V0VVJMKGNvbnN0IFdlYlVSTCYgdXJsKQoreworICAgIG1fcHJpdmF0ZS0+bV9yZXNvdXJjZVJl
cXVlc3QtPnNldFVSTCh1cmwpOworfQorCitXZWJVUkwgV2ViVVJMUmVxdWVzdDo6Zmlyc3RQYXJ0
eUZvckNvb2tpZXMoKSBjb25zdAoreworICAgIHJldHVybiBtX3ByaXZhdGUtPm1fcmVzb3VyY2VS
ZXF1ZXN0LT5maXJzdFBhcnR5Rm9yQ29va2llcygpOworfQorCit2b2lkIFdlYlVSTFJlcXVlc3Q6
OnNldEZpcnN0UGFydHlGb3JDb29raWVzKGNvbnN0IFdlYlVSTCYgZmlyc3RQYXJ0eUZvckNvb2tp
ZXMpCit7CisgICAgbV9wcml2YXRlLT5tX3Jlc291cmNlUmVxdWVzdC0+c2V0Rmlyc3RQYXJ0eUZv
ckNvb2tpZXMoZmlyc3RQYXJ0eUZvckNvb2tpZXMpOworfQorCitib29sIFdlYlVSTFJlcXVlc3Q6
OmFsbG93Q29va2llcygpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fcHJpdmF0ZS0+bV9yZXNvdXJj
ZVJlcXVlc3QtPmFsbG93Q29va2llcygpOworfQorCit2b2lkIFdlYlVSTFJlcXVlc3Q6OnNldEFs
bG93Q29va2llcyhib29sIGFsbG93Q29va2llcykKK3sKKyAgICBtX3ByaXZhdGUtPm1fcmVzb3Vy
Y2VSZXF1ZXN0LT5zZXRBbGxvd0Nvb2tpZXMoYWxsb3dDb29raWVzKTsKK30KKworYm9vbCBXZWJV
UkxSZXF1ZXN0OjphbGxvd1N0b3JlZENyZWRlbnRpYWxzKCkgY29uc3QKK3sKKyAgICByZXR1cm4g
bV9wcml2YXRlLT5tX2FsbG93U3RvcmVkQ3JlZGVudGlhbHM7Cit9CisKK3ZvaWQgV2ViVVJMUmVx
dWVzdDo6c2V0QWxsb3dTdG9yZWRDcmVkZW50aWFscyhib29sIGFsbG93U3RvcmVkQ3JlZGVudGlh
bHMpCit7CisgICAgbV9wcml2YXRlLT5tX2FsbG93U3RvcmVkQ3JlZGVudGlhbHMgPSBhbGxvd1N0
b3JlZENyZWRlbnRpYWxzOworfQorCitXZWJVUkxSZXF1ZXN0OjpDYWNoZVBvbGljeSBXZWJVUkxS
ZXF1ZXN0OjpjYWNoZVBvbGljeSgpIGNvbnN0Cit7CisgICAgcmV0dXJuIHN0YXRpY19jYXN0PFdl
YlVSTFJlcXVlc3Q6OkNhY2hlUG9saWN5PigKKyAgICAgICAgbV9wcml2YXRlLT5tX3Jlc291cmNl
UmVxdWVzdC0+Y2FjaGVQb2xpY3koKSk7Cit9CisKK3ZvaWQgV2ViVVJMUmVxdWVzdDo6c2V0Q2Fj
aGVQb2xpY3koQ2FjaGVQb2xpY3kgY2FjaGVQb2xpY3kpCit7CisgICAgbV9wcml2YXRlLT5tX3Jl
c291cmNlUmVxdWVzdC0+c2V0Q2FjaGVQb2xpY3koCisgICAgICAgIHN0YXRpY19jYXN0PFJlc291
cmNlUmVxdWVzdENhY2hlUG9saWN5PihjYWNoZVBvbGljeSkpOworfQorCitXZWJTdHJpbmcgV2Vi
VVJMUmVxdWVzdDo6aHR0cE1ldGhvZCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fcHJpdmF0ZS0+
bV9yZXNvdXJjZVJlcXVlc3QtPmh0dHBNZXRob2QoKTsKK30KKwordm9pZCBXZWJVUkxSZXF1ZXN0
OjpzZXRIVFRQTWV0aG9kKGNvbnN0IFdlYlN0cmluZyYgaHR0cE1ldGhvZCkKK3sKKyAgICBtX3By
aXZhdGUtPm1fcmVzb3VyY2VSZXF1ZXN0LT5zZXRIVFRQTWV0aG9kKGh0dHBNZXRob2QpOworfQor
CitXZWJTdHJpbmcgV2ViVVJMUmVxdWVzdDo6aHR0cEhlYWRlckZpZWxkKGNvbnN0IFdlYlN0cmlu
ZyYgbmFtZSkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9wcml2YXRlLT5tX3Jlc291cmNlUmVxdWVz
dC0+aHR0cEhlYWRlckZpZWxkKG5hbWUpOworfQorCit2b2lkIFdlYlVSTFJlcXVlc3Q6OnNldEhU
VFBIZWFkZXJGaWVsZChjb25zdCBXZWJTdHJpbmcmIG5hbWUsIGNvbnN0IFdlYlN0cmluZyYgdmFs
dWUpCit7CisgICAgbV9wcml2YXRlLT5tX3Jlc291cmNlUmVxdWVzdC0+c2V0SFRUUEhlYWRlckZp
ZWxkKG5hbWUsIHZhbHVlKTsKK30KKwordm9pZCBXZWJVUkxSZXF1ZXN0OjphZGRIVFRQSGVhZGVy
RmllbGQoY29uc3QgV2ViU3RyaW5nJiBuYW1lLCBjb25zdCBXZWJTdHJpbmcmIHZhbHVlKQorewor
ICAgIG1fcHJpdmF0ZS0+bV9yZXNvdXJjZVJlcXVlc3QtPmFkZEhUVFBIZWFkZXJGaWVsZChuYW1l
LCB2YWx1ZSk7Cit9CisKK3ZvaWQgV2ViVVJMUmVxdWVzdDo6Y2xlYXJIVFRQSGVhZGVyRmllbGQo
Y29uc3QgV2ViU3RyaW5nJiBuYW1lKQoreworICAgIC8vIEZJWE1FOiBBZGQgYSBjbGVhckhUVFBI
ZWFkZXJGaWVsZCBtZXRob2QgdG8gUmVzb3VyY2VSZXF1ZXN0LgorICAgIGNvbnN0IEhUVFBIZWFk
ZXJNYXAmIG1hcCA9IG1fcHJpdmF0ZS0+bV9yZXNvdXJjZVJlcXVlc3QtPmh0dHBIZWFkZXJGaWVs
ZHMoKTsKKyAgICBjb25zdF9jYXN0PEhUVFBIZWFkZXJNYXAqPigmbWFwKS0+cmVtb3ZlKG5hbWUp
OworfQorCit2b2lkIFdlYlVSTFJlcXVlc3Q6OnZpc2l0SFRUUEhlYWRlckZpZWxkcyhXZWJIVFRQ
SGVhZGVyVmlzaXRvciogdmlzaXRvcikgY29uc3QKK3sKKyAgICBjb25zdCBIVFRQSGVhZGVyTWFw
JiBtYXAgPSBtX3ByaXZhdGUtPm1fcmVzb3VyY2VSZXF1ZXN0LT5odHRwSGVhZGVyRmllbGRzKCk7
CisgICAgZm9yIChIVFRQSGVhZGVyTWFwOjpjb25zdF9pdGVyYXRvciBpdCA9IG1hcC5iZWdpbigp
OyBpdCAhPSBtYXAuZW5kKCk7ICsraXQpCisgICAgICAgIHZpc2l0b3ItPnZpc2l0SGVhZGVyKGl0
LT5maXJzdCwgaXQtPnNlY29uZCk7Cit9CisKK1dlYkhUVFBCb2R5IFdlYlVSTFJlcXVlc3Q6Omh0
dHBCb2R5KCkgY29uc3QKK3sKKyAgICByZXR1cm4gV2ViSFRUUEJvZHkobV9wcml2YXRlLT5tX3Jl
c291cmNlUmVxdWVzdC0+aHR0cEJvZHkoKSk7Cit9CisKK3ZvaWQgV2ViVVJMUmVxdWVzdDo6c2V0
SFRUUEJvZHkoY29uc3QgV2ViSFRUUEJvZHkmIGh0dHBCb2R5KQoreworICAgIG1fcHJpdmF0ZS0+
bV9yZXNvdXJjZVJlcXVlc3QtPnNldEhUVFBCb2R5KGh0dHBCb2R5KTsKK30KKworYm9vbCBXZWJV
UkxSZXF1ZXN0OjpyZXBvcnRVcGxvYWRQcm9ncmVzcygpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1f
cHJpdmF0ZS0+bV9yZXNvdXJjZVJlcXVlc3QtPnJlcG9ydFVwbG9hZFByb2dyZXNzKCk7Cit9CisK
K3ZvaWQgV2ViVVJMUmVxdWVzdDo6c2V0UmVwb3J0VXBsb2FkUHJvZ3Jlc3MoYm9vbCByZXBvcnRV
cGxvYWRQcm9ncmVzcykKK3sKKyAgICBtX3ByaXZhdGUtPm1fcmVzb3VyY2VSZXF1ZXN0LT5zZXRS
ZXBvcnRVcGxvYWRQcm9ncmVzcyhyZXBvcnRVcGxvYWRQcm9ncmVzcyk7Cit9CisKK2Jvb2wgV2Vi
VVJMUmVxdWVzdDo6cmVwb3J0TG9hZFRpbWluZygpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fcHJp
dmF0ZS0+bV9yZXNvdXJjZVJlcXVlc3QtPnJlcG9ydExvYWRUaW1pbmcoKTsKK30KKwordm9pZCBX
ZWJVUkxSZXF1ZXN0OjpzZXRSZXBvcnRSYXdIZWFkZXJzKGJvb2wgcmVwb3J0UmF3SGVhZGVycykK
K3sKKyAgICBtX3ByaXZhdGUtPm1fcmVzb3VyY2VSZXF1ZXN0LT5zZXRSZXBvcnRSYXdIZWFkZXJz
KHJlcG9ydFJhd0hlYWRlcnMpOworfQorCitib29sIFdlYlVSTFJlcXVlc3Q6OnJlcG9ydFJhd0hl
YWRlcnMoKSBjb25zdAoreworICAgIHJldHVybiBtX3ByaXZhdGUtPm1fcmVzb3VyY2VSZXF1ZXN0
LT5yZXBvcnRSYXdIZWFkZXJzKCk7Cit9CisKK3ZvaWQgV2ViVVJMUmVxdWVzdDo6c2V0UmVwb3J0
TG9hZFRpbWluZyhib29sIHJlcG9ydExvYWRUaW1pbmcpCit7CisgICAgbV9wcml2YXRlLT5tX3Jl
c291cmNlUmVxdWVzdC0+c2V0UmVwb3J0TG9hZFRpbWluZyhyZXBvcnRMb2FkVGltaW5nKTsKK30K
KworV2ViVVJMUmVxdWVzdDo6VGFyZ2V0VHlwZSBXZWJVUkxSZXF1ZXN0Ojp0YXJnZXRUeXBlKCkg
Y29uc3QKK3sKKyAgICAvLyBGSVhNRTogVGVtcG9yYXJ5IHNwZWNpYWwgY2FzZSB1bnRpbCBkb3du
c3RyZWFtIGNocm9taXVtLm9yZyBrbm93cyBvZiB0aGUgbmV3IFRhcmdldFR5cGVzLgorICAgIFRh
cmdldFR5cGUgdGFyZ2V0VHlwZSA9IHN0YXRpY19jYXN0PFRhcmdldFR5cGU+KG1fcHJpdmF0ZS0+
bV9yZXNvdXJjZVJlcXVlc3QtPnRhcmdldFR5cGUoKSk7CisgICAgaWYgKHRhcmdldFR5cGUgPT0g
VGFyZ2V0SXNUZXh0VHJhY2sgfHwgdGFyZ2V0VHlwZSA9PSBUYXJnZXRJc1Vuc3BlY2lmaWVkKQor
ICAgICAgICByZXR1cm4gVGFyZ2V0SXNTdWJyZXNvdXJjZTsKKyAgICByZXR1cm4gdGFyZ2V0VHlw
ZTsKK30KKworYm9vbCBXZWJVUkxSZXF1ZXN0OjpoYXNVc2VyR2VzdHVyZSgpIGNvbnN0Cit7Cisg
ICAgcmV0dXJuIG1fcHJpdmF0ZS0+bV9yZXNvdXJjZVJlcXVlc3QtPmhhc1VzZXJHZXN0dXJlKCk7
Cit9CisKK3ZvaWQgV2ViVVJMUmVxdWVzdDo6c2V0SGFzVXNlckdlc3R1cmUoYm9vbCBoYXNVc2Vy
R2VzdHVyZSkKK3sKKyAgICBtX3ByaXZhdGUtPm1fcmVzb3VyY2VSZXF1ZXN0LT5zZXRIYXNVc2Vy
R2VzdHVyZShoYXNVc2VyR2VzdHVyZSk7Cit9CisKK3ZvaWQgV2ViVVJMUmVxdWVzdDo6c2V0VGFy
Z2V0VHlwZShUYXJnZXRUeXBlIHRhcmdldFR5cGUpCit7CisgICAgbV9wcml2YXRlLT5tX3Jlc291
cmNlUmVxdWVzdC0+c2V0VGFyZ2V0VHlwZSgKKyAgICAgICAgc3RhdGljX2Nhc3Q8UmVzb3VyY2VS
ZXF1ZXN0OjpUYXJnZXRUeXBlPih0YXJnZXRUeXBlKSk7Cit9CisKK2ludCBXZWJVUkxSZXF1ZXN0
OjpyZXF1ZXN0b3JJRCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fcHJpdmF0ZS0+bV9yZXNvdXJj
ZVJlcXVlc3QtPnJlcXVlc3RvcklEKCk7Cit9CisKK3ZvaWQgV2ViVVJMUmVxdWVzdDo6c2V0UmVx
dWVzdG9ySUQoaW50IHJlcXVlc3RvcklEKQoreworICAgIG1fcHJpdmF0ZS0+bV9yZXNvdXJjZVJl
cXVlc3QtPnNldFJlcXVlc3RvcklEKHJlcXVlc3RvcklEKTsKK30KKworaW50IFdlYlVSTFJlcXVl
c3Q6OnJlcXVlc3RvclByb2Nlc3NJRCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fcHJpdmF0ZS0+
bV9yZXNvdXJjZVJlcXVlc3QtPnJlcXVlc3RvclByb2Nlc3NJRCgpOworfQorCit2b2lkIFdlYlVS
TFJlcXVlc3Q6OnNldFJlcXVlc3RvclByb2Nlc3NJRChpbnQgcmVxdWVzdG9yUHJvY2Vzc0lEKQor
eworICAgIG1fcHJpdmF0ZS0+bV9yZXNvdXJjZVJlcXVlc3QtPnNldFJlcXVlc3RvclByb2Nlc3NJ
RChyZXF1ZXN0b3JQcm9jZXNzSUQpOworfQorCitpbnQgV2ViVVJMUmVxdWVzdDo6YXBwQ2FjaGVI
b3N0SUQoKSBjb25zdAoreworICAgIHJldHVybiBtX3ByaXZhdGUtPm1fcmVzb3VyY2VSZXF1ZXN0
LT5hcHBDYWNoZUhvc3RJRCgpOworfQorCit2b2lkIFdlYlVSTFJlcXVlc3Q6OnNldEFwcENhY2hl
SG9zdElEKGludCBhcHBDYWNoZUhvc3RJRCkKK3sKKyAgICBtX3ByaXZhdGUtPm1fcmVzb3VyY2VS
ZXF1ZXN0LT5zZXRBcHBDYWNoZUhvc3RJRChhcHBDYWNoZUhvc3RJRCk7Cit9CisKK2Jvb2wgV2Vi
VVJMUmVxdWVzdDo6ZG93bmxvYWRUb0ZpbGUoKSBjb25zdAoreworICAgIHJldHVybiBtX3ByaXZh
dGUtPm1fcmVzb3VyY2VSZXF1ZXN0LT5kb3dubG9hZFRvRmlsZSgpOworfQorCit2b2lkIFdlYlVS
TFJlcXVlc3Q6OnNldERvd25sb2FkVG9GaWxlKGJvb2wgZG93bmxvYWRUb0ZpbGUpCit7CisgICAg
bV9wcml2YXRlLT5tX3Jlc291cmNlUmVxdWVzdC0+c2V0RG93bmxvYWRUb0ZpbGUoZG93bmxvYWRU
b0ZpbGUpOworfQorCitXZWJVUkxSZXF1ZXN0OjpFeHRyYURhdGEqIFdlYlVSTFJlcXVlc3Q6OmV4
dHJhRGF0YSgpIGNvbnN0Cit7CisgICAgUmVmUHRyPFJlc291cmNlUmVxdWVzdDo6RXh0cmFEYXRh
PiBkYXRhID0gbV9wcml2YXRlLT5tX3Jlc291cmNlUmVxdWVzdC0+ZXh0cmFEYXRhKCk7CisgICAg
aWYgKCFkYXRhKQorICAgICAgICByZXR1cm4gMDsKKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8RXh0
cmFEYXRhQ29udGFpbmVyKj4oZGF0YS5nZXQoKSktPmV4dHJhRGF0YSgpOworfQorCit2b2lkIFdl
YlVSTFJlcXVlc3Q6OnNldEV4dHJhRGF0YShXZWJVUkxSZXF1ZXN0OjpFeHRyYURhdGEqIGV4dHJh
RGF0YSkKK3sKKyAgICBtX3ByaXZhdGUtPm1fcmVzb3VyY2VSZXF1ZXN0LT5zZXRFeHRyYURhdGEo
RXh0cmFEYXRhQ29udGFpbmVyOjpjcmVhdGUoZXh0cmFEYXRhKSk7Cit9CisKK1Jlc291cmNlUmVx
dWVzdCYgV2ViVVJMUmVxdWVzdDo6dG9NdXRhYmxlUmVzb3VyY2VSZXF1ZXN0KCkKK3sKKyAgICBB
U1NFUlQobV9wcml2YXRlKTsKKyAgICBBU1NFUlQobV9wcml2YXRlLT5tX3Jlc291cmNlUmVxdWVz
dCk7CisKKyAgICByZXR1cm4gKm1fcHJpdmF0ZS0+bV9yZXNvdXJjZVJlcXVlc3Q7Cit9CisKK2Nv
bnN0IFJlc291cmNlUmVxdWVzdCYgV2ViVVJMUmVxdWVzdDo6dG9SZXNvdXJjZVJlcXVlc3QoKSBj
b25zdAoreworICAgIEFTU0VSVChtX3ByaXZhdGUpOworICAgIEFTU0VSVChtX3ByaXZhdGUtPm1f
cmVzb3VyY2VSZXF1ZXN0KTsKKworICAgIHJldHVybiAqbV9wcml2YXRlLT5tX3Jlc291cmNlUmVx
dWVzdDsKK30KKwordm9pZCBXZWJVUkxSZXF1ZXN0Ojphc3NpZ24oV2ViVVJMUmVxdWVzdFByaXZh
dGUqIHApCit7CisgICAgLy8gU3ViY2xhc3NlcyBtYXkgY2FsbCB0aGlzIGRpcmVjdGx5IHNvIGEg
c2VsZi1hc3NpZ25tZW50IGNoZWNrIGlzIG5lZWRlZAorICAgIC8vIGhlcmUgYXMgd2VsbCBhcyBp
biB0aGUgcHVibGljIGFzc2lnbiBtZXRob2QuCisgICAgaWYgKG1fcHJpdmF0ZSA9PSBwKQorICAg
ICAgICByZXR1cm47CisgICAgaWYgKG1fcHJpdmF0ZSkKKyAgICAgICAgbV9wcml2YXRlLT5kaXNw
b3NlKCk7CisgICAgbV9wcml2YXRlID0gcDsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0Cklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jaHJvbWl1bS9zdXBwb3J0L1dlYlVSTFJlcXVl
c3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2Nocm9taXVtL3N1
cHBvcnQvV2ViVVJMUmVxdWVzdC5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9jaHJvbWl1bS9zdXBwb3J0L1dlYlVSTFJlcXVlc3QuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0yOSwxNCArMjksMTMgQEAKICAqLwogCiAjaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVk
ZSAicGxhdGZvcm0vV2ViVVJMUmVxdWVzdC5oIgorI2luY2x1ZGUgPHB1YmxpYy9XZWJVUkxSZXF1
ZXN0Lmg+CiAKICNpbmNsdWRlICJSZXNvdXJjZVJlcXVlc3QuaCIKLQotI2luY2x1ZGUgInBsYXRm
b3JtL1dlYkhUVFBCb2R5LmgiCi0jaW5jbHVkZSAicGxhdGZvcm0vV2ViSFRUUEhlYWRlclZpc2l0
b3IuaCIKLSNpbmNsdWRlICJwbGF0Zm9ybS9XZWJVUkwuaCIKICNpbmNsdWRlICJXZWJVUkxSZXF1
ZXN0UHJpdmF0ZS5oIgorI2luY2x1ZGUgPHB1YmxpYy9XZWJIVFRQQm9keS5oPgorI2luY2x1ZGUg
PHB1YmxpYy9XZWJIVFRQSGVhZGVyVmlzaXRvci5oPgorI2luY2x1ZGUgPHB1YmxpYy9XZWJVUkwu
aD4KIAogdXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2Nocm9taXVtL3N1cHBvcnQvV2ViVVJMUmVxdWVzdFByaXZhdGUuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jaHJvbWl1bS9zdXBwb3J0L1dlYlVSTFJlcXVl
c3RQcml2YXRlLmgJKHJldmlzaW9uIDExMjUwNSkJKGZyb20gU291cmNlL1dlYktpdC9jaHJvbWl1
bS9zcmMvV2ViVVJMUmVxdWVzdFByaXZhdGUuaDoxMTI1MDUpCisrKyBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9jaHJvbWl1bS9zdXBwb3J0L1dlYlVSTFJlcXVlc3RQcml2YXRlLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTAsMCArMSw1MyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOSBHb29nbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
IGFyZQorICogbWV0OgorICoKKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgICAgKiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiBj
b3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyCisgKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiBkaXN0cmlidXRpb24uCisgKiAgICAgKiBOZWl0aGVy
IHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisgKiBjb250cmli
dXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQg
ZnJvbQorICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVy
bWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklH
SFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywg
VEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
CisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hB
TEwgVEhFIENPUFlSSUdIVAorICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlks
IE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVE
IFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisg
KiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgV2ViVVJMUmVxdWVzdFByaXZhdGVfaAorI2Rl
ZmluZSBXZWJVUkxSZXF1ZXN0UHJpdmF0ZV9oCisKK25hbWVzcGFjZSBXZWJDb3JlIHsgY2xhc3Mg
UmVzb3VyY2VSZXF1ZXN0OyB9CisKK25hbWVzcGFjZSBXZWJLaXQgeworCitjbGFzcyBXZWJVUkxS
ZXF1ZXN0UHJpdmF0ZSB7CitwdWJsaWM6CisgICAgV2ViVVJMUmVxdWVzdFByaXZhdGUoKQorICAg
ICAgICA6IG1fcmVzb3VyY2VSZXF1ZXN0KDApCisgICAgICAgICwgbV9hbGxvd1N0b3JlZENyZWRl
bnRpYWxzKHRydWUpIHsgfQorCisgICAgLy8gQ2FsbGVkIGJ5IFdlYlVSTFJlcXVlc3Qgd2hlbiBp
dCBubyBsb25nZXIgbmVlZHMgdGhpcyBvYmplY3QuCisgICAgdmlydHVhbCB2b2lkIGRpc3Bvc2Uo
KSA9IDA7CisKKyAgICBXZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3QqIG1fcmVzb3VyY2VSZXF1ZXN0
OworICAgIGJvb2wgbV9hbGxvd1N0b3JlZENyZWRlbnRpYWxzOworfTsKKworfSAvLyBuYW1lc3Bh
Y2UgV2ViS2l0CisKKyNlbmRpZgpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY2hyb21p
dW0vc3VwcG9ydC9XZWJVUkxSZXNwb25zZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vY2hyb21pdW0vc3VwcG9ydC9XZWJVUkxSZXNwb25zZS5jcHAJKHJldmlzaW9u
IDExMjUwNSkJKGZyb20gU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViVVJMUmVzcG9uc2Uu
Y3BwOjExMjUwNSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2Nocm9taXVtL3N1cHBvcnQv
V2ViVVJMUmVzcG9uc2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNDQ3IEBACisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDA5IEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisgKiBtZXQ6CisgKgorICogICAgICog
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyAqIGluIHRoZSBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqIGRp
c3RyaWJ1dGlvbi4KKyAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9y
IHRoZSBuYW1lcyBvZiBpdHMKKyAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNl
IG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisgKiB0aGlzIHNvZnR3YXJlIHdpdGhv
dXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMK
KyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisgKiBPV05FUiBP
UiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBU
SEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1
ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgInBsYXRmb3JtL1dlYlVSTFJlc3BvbnNlLmgiCisKKyNp
bmNsdWRlICJSZXNvdXJjZVJlc3BvbnNlLmgiCisjaW5jbHVkZSAiUmVzb3VyY2VMb2FkVGltaW5n
LmgiCisKKyNpbmNsdWRlICJwbGF0Zm9ybS9XZWJIVFRQSGVhZGVyVmlzaXRvci5oIgorI2luY2x1
ZGUgInBsYXRmb3JtL1dlYkhUVFBMb2FkSW5mby5oIgorI2luY2x1ZGUgInBsYXRmb3JtL1dlYlN0
cmluZy5oIgorI2luY2x1ZGUgInBsYXRmb3JtL1dlYlVSTC5oIgorI2luY2x1ZGUgInBsYXRmb3Jt
L1dlYlVSTExvYWRUaW1pbmcuaCIKKyNpbmNsdWRlICJXZWJVUkxSZXNwb25zZVByaXZhdGUuaCIK
KworI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KKwordXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CisK
K25hbWVzcGFjZSBXZWJLaXQgeworCituYW1lc3BhY2UgeworCitjbGFzcyBFeHRyYURhdGFDb250
YWluZXIgOiBwdWJsaWMgUmVzb3VyY2VSZXNwb25zZTo6RXh0cmFEYXRhIHsKK3B1YmxpYzoKKyAg
ICBzdGF0aWMgUGFzc1JlZlB0cjxFeHRyYURhdGFDb250YWluZXI+IGNyZWF0ZShXZWJVUkxSZXNw
b25zZTo6RXh0cmFEYXRhKiBleHRyYURhdGEpIHsgcmV0dXJuIGFkb3B0UmVmKG5ldyBFeHRyYURh
dGFDb250YWluZXIoZXh0cmFEYXRhKSk7IH0KKworICAgIHZpcnR1YWwgfkV4dHJhRGF0YUNvbnRh
aW5lcigpIHsgfQorCisgICAgV2ViVVJMUmVzcG9uc2U6OkV4dHJhRGF0YSogZXh0cmFEYXRhKCkg
Y29uc3QgeyByZXR1cm4gbV9leHRyYURhdGEuZ2V0KCk7IH0KKworcHJpdmF0ZToKKyAgICBleHBs
aWNpdCBFeHRyYURhdGFDb250YWluZXIoV2ViVVJMUmVzcG9uc2U6OkV4dHJhRGF0YSogZXh0cmFE
YXRhKQorICAgICAgICA6IG1fZXh0cmFEYXRhKGFkb3B0UHRyKGV4dHJhRGF0YSkpCisgICAgewor
ICAgIH0KKworICAgIE93blB0cjxXZWJVUkxSZXNwb25zZTo6RXh0cmFEYXRhPiBtX2V4dHJhRGF0
YTsKK307CisKK30gLy8gbmFtZXNwYWNlCisKKy8vIFRoZSBzdGFuZGFyZCBpbXBsZW1lbnRhdGlv
biBvZiBXZWJVUkxSZXNwb25zZVByaXZhdGUsIHdoaWNoIG1haW50YWlucworLy8gb3duZXJzaGlw
IG9mIGEgUmVzb3VyY2VSZXNwb25zZSBpbnN0YW5jZS4KK2NsYXNzIFdlYlVSTFJlc3BvbnNlUHJp
dmF0ZUltcGwgOiBwdWJsaWMgV2ViVVJMUmVzcG9uc2VQcml2YXRlIHsKK3B1YmxpYzoKKyAgICBX
ZWJVUkxSZXNwb25zZVByaXZhdGVJbXBsKCkKKyAgICB7CisgICAgICAgIG1fcmVzb3VyY2VSZXNw
b25zZSA9ICZtX3Jlc291cmNlUmVzcG9uc2VBbGxvY2F0aW9uOworICAgIH0KKworICAgIFdlYlVS
TFJlc3BvbnNlUHJpdmF0ZUltcGwoY29uc3QgV2ViVVJMUmVzcG9uc2VQcml2YXRlKiBwKQorICAg
ICAgICA6IG1fcmVzb3VyY2VSZXNwb25zZUFsbG9jYXRpb24oKnAtPm1fcmVzb3VyY2VSZXNwb25z
ZSkKKyAgICB7CisgICAgICAgIG1fcmVzb3VyY2VSZXNwb25zZSA9ICZtX3Jlc291cmNlUmVzcG9u
c2VBbGxvY2F0aW9uOworICAgIH0KKworICAgIHZpcnR1YWwgdm9pZCBkaXNwb3NlKCkgeyBkZWxl
dGUgdGhpczsgfQorCitwcml2YXRlOgorICAgIHZpcnR1YWwgfldlYlVSTFJlc3BvbnNlUHJpdmF0
ZUltcGwoKSB7IH0KKworICAgIFJlc291cmNlUmVzcG9uc2UgbV9yZXNvdXJjZVJlc3BvbnNlQWxs
b2NhdGlvbjsKK307CisKK3ZvaWQgV2ViVVJMUmVzcG9uc2U6OmluaXRpYWxpemUoKQoreworICAg
IGFzc2lnbihuZXcgV2ViVVJMUmVzcG9uc2VQcml2YXRlSW1wbCgpKTsKK30KKwordm9pZCBXZWJV
UkxSZXNwb25zZTo6cmVzZXQoKQoreworICAgIGFzc2lnbigwKTsKK30KKwordm9pZCBXZWJVUkxS
ZXNwb25zZTo6YXNzaWduKGNvbnN0IFdlYlVSTFJlc3BvbnNlJiByKQoreworICAgIGlmICgmciAh
PSB0aGlzKQorICAgICAgICBhc3NpZ24oci5tX3ByaXZhdGUgPyBuZXcgV2ViVVJMUmVzcG9uc2VQ
cml2YXRlSW1wbChyLm1fcHJpdmF0ZSkgOiAwKTsKK30KKworYm9vbCBXZWJVUkxSZXNwb25zZTo6
aXNOdWxsKCkgY29uc3QKK3sKKyAgICByZXR1cm4gIW1fcHJpdmF0ZSB8fCBtX3ByaXZhdGUtPm1f
cmVzb3VyY2VSZXNwb25zZS0+aXNOdWxsKCk7Cit9CisKK1dlYlVSTCBXZWJVUkxSZXNwb25zZTo6
dXJsKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9wcml2YXRlLT5tX3Jlc291cmNlUmVzcG9uc2Ut
PnVybCgpOworfQorCit2b2lkIFdlYlVSTFJlc3BvbnNlOjpzZXRVUkwoY29uc3QgV2ViVVJMJiB1
cmwpCit7CisgICAgbV9wcml2YXRlLT5tX3Jlc291cmNlUmVzcG9uc2UtPnNldFVSTCh1cmwpOwor
fQorCit1bnNpZ25lZCBXZWJVUkxSZXNwb25zZTo6Y29ubmVjdGlvbklEKCkgY29uc3QKK3sKKyAg
ICByZXR1cm4gbV9wcml2YXRlLT5tX3Jlc291cmNlUmVzcG9uc2UtPmNvbm5lY3Rpb25JRCgpOwor
fQorCit2b2lkIFdlYlVSTFJlc3BvbnNlOjpzZXRDb25uZWN0aW9uSUQodW5zaWduZWQgY29ubmVj
dGlvbklEKQoreworICAgIG1fcHJpdmF0ZS0+bV9yZXNvdXJjZVJlc3BvbnNlLT5zZXRDb25uZWN0
aW9uSUQoY29ubmVjdGlvbklEKTsKK30KKworYm9vbCBXZWJVUkxSZXNwb25zZTo6Y29ubmVjdGlv
blJldXNlZCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fcHJpdmF0ZS0+bV9yZXNvdXJjZVJlc3Bv
bnNlLT5jb25uZWN0aW9uUmV1c2VkKCk7Cit9CisKK3ZvaWQgV2ViVVJMUmVzcG9uc2U6OnNldENv
bm5lY3Rpb25SZXVzZWQoYm9vbCBjb25uZWN0aW9uUmV1c2VkKQoreworICAgIG1fcHJpdmF0ZS0+
bV9yZXNvdXJjZVJlc3BvbnNlLT5zZXRDb25uZWN0aW9uUmV1c2VkKGNvbm5lY3Rpb25SZXVzZWQp
OworfQorCitXZWJVUkxMb2FkVGltaW5nIFdlYlVSTFJlc3BvbnNlOjpsb2FkVGltaW5nKCkKK3sK
KyAgICByZXR1cm4gV2ViVVJMTG9hZFRpbWluZyhtX3ByaXZhdGUtPm1fcmVzb3VyY2VSZXNwb25z
ZS0+cmVzb3VyY2VMb2FkVGltaW5nKCkpOworfQorCit2b2lkIFdlYlVSTFJlc3BvbnNlOjpzZXRM
b2FkVGltaW5nKGNvbnN0IFdlYlVSTExvYWRUaW1pbmcmIHRpbWluZykKK3sKKyAgICBSZWZQdHI8
UmVzb3VyY2VMb2FkVGltaW5nPiBsb2FkVGltaW5nID0gUGFzc1JlZlB0cjxSZXNvdXJjZUxvYWRU
aW1pbmc+KHRpbWluZyk7CisgICAgbV9wcml2YXRlLT5tX3Jlc291cmNlUmVzcG9uc2UtPnNldFJl
c291cmNlTG9hZFRpbWluZyhsb2FkVGltaW5nLnJlbGVhc2UoKSk7Cit9CisKK1dlYkhUVFBMb2Fk
SW5mbyBXZWJVUkxSZXNwb25zZTo6aHR0cExvYWRJbmZvKCkKK3sKKyAgICByZXR1cm4gV2ViSFRU
UExvYWRJbmZvKG1fcHJpdmF0ZS0+bV9yZXNvdXJjZVJlc3BvbnNlLT5yZXNvdXJjZUxvYWRJbmZv
KCkpOworfQorCit2b2lkIFdlYlVSTFJlc3BvbnNlOjpzZXRIVFRQTG9hZEluZm8oY29uc3QgV2Vi
SFRUUExvYWRJbmZvJiB2YWx1ZSkKK3sKKyAgICBtX3ByaXZhdGUtPm1fcmVzb3VyY2VSZXNwb25z
ZS0+c2V0UmVzb3VyY2VMb2FkSW5mbyh2YWx1ZSk7Cit9CisKK2RvdWJsZSBXZWJVUkxSZXNwb25z
ZTo6cmVzcG9uc2VUaW1lKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9wcml2YXRlLT5tX3Jlc291
cmNlUmVzcG9uc2UtPnJlc3BvbnNlVGltZSgpOworfQorCit2b2lkIFdlYlVSTFJlc3BvbnNlOjpz
ZXRSZXNwb25zZVRpbWUoZG91YmxlIHJlc3BvbnNlVGltZSkKK3sKKyAgICBtX3ByaXZhdGUtPm1f
cmVzb3VyY2VSZXNwb25zZS0+c2V0UmVzcG9uc2VUaW1lKHJlc3BvbnNlVGltZSk7Cit9CisKK1dl
YlN0cmluZyBXZWJVUkxSZXNwb25zZTo6bWltZVR5cGUoKSBjb25zdAoreworICAgIHJldHVybiBt
X3ByaXZhdGUtPm1fcmVzb3VyY2VSZXNwb25zZS0+bWltZVR5cGUoKTsKK30KKwordm9pZCBXZWJV
UkxSZXNwb25zZTo6c2V0TUlNRVR5cGUoY29uc3QgV2ViU3RyaW5nJiBtaW1lVHlwZSkKK3sKKyAg
ICBtX3ByaXZhdGUtPm1fcmVzb3VyY2VSZXNwb25zZS0+c2V0TWltZVR5cGUobWltZVR5cGUpOwor
fQorCitsb25nIGxvbmcgV2ViVVJMUmVzcG9uc2U6OmV4cGVjdGVkQ29udGVudExlbmd0aCgpIGNv
bnN0Cit7CisgICAgcmV0dXJuIG1fcHJpdmF0ZS0+bV9yZXNvdXJjZVJlc3BvbnNlLT5leHBlY3Rl
ZENvbnRlbnRMZW5ndGgoKTsKK30KKwordm9pZCBXZWJVUkxSZXNwb25zZTo6c2V0RXhwZWN0ZWRD
b250ZW50TGVuZ3RoKGxvbmcgbG9uZyBleHBlY3RlZENvbnRlbnRMZW5ndGgpCit7CisgICAgbV9w
cml2YXRlLT5tX3Jlc291cmNlUmVzcG9uc2UtPnNldEV4cGVjdGVkQ29udGVudExlbmd0aChleHBl
Y3RlZENvbnRlbnRMZW5ndGgpOworfQorCitXZWJTdHJpbmcgV2ViVVJMUmVzcG9uc2U6OnRleHRF
bmNvZGluZ05hbWUoKSBjb25zdAoreworICAgIHJldHVybiBtX3ByaXZhdGUtPm1fcmVzb3VyY2VS
ZXNwb25zZS0+dGV4dEVuY29kaW5nTmFtZSgpOworfQorCit2b2lkIFdlYlVSTFJlc3BvbnNlOjpz
ZXRUZXh0RW5jb2RpbmdOYW1lKGNvbnN0IFdlYlN0cmluZyYgdGV4dEVuY29kaW5nTmFtZSkKK3sK
KyAgICBtX3ByaXZhdGUtPm1fcmVzb3VyY2VSZXNwb25zZS0+c2V0VGV4dEVuY29kaW5nTmFtZSh0
ZXh0RW5jb2RpbmdOYW1lKTsKK30KKworV2ViU3RyaW5nIFdlYlVSTFJlc3BvbnNlOjpzdWdnZXN0
ZWRGaWxlTmFtZSgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fcHJpdmF0ZS0+bV9yZXNvdXJjZVJl
c3BvbnNlLT5zdWdnZXN0ZWRGaWxlbmFtZSgpOworfQorCit2b2lkIFdlYlVSTFJlc3BvbnNlOjpz
ZXRTdWdnZXN0ZWRGaWxlTmFtZShjb25zdCBXZWJTdHJpbmcmIHN1Z2dlc3RlZEZpbGVOYW1lKQor
eworICAgIG1fcHJpdmF0ZS0+bV9yZXNvdXJjZVJlc3BvbnNlLT5zZXRTdWdnZXN0ZWRGaWxlbmFt
ZShzdWdnZXN0ZWRGaWxlTmFtZSk7Cit9CisKK2ludCBXZWJVUkxSZXNwb25zZTo6aHR0cFN0YXR1
c0NvZGUoKSBjb25zdAoreworICAgIHJldHVybiBtX3ByaXZhdGUtPm1fcmVzb3VyY2VSZXNwb25z
ZS0+aHR0cFN0YXR1c0NvZGUoKTsKK30KKwordm9pZCBXZWJVUkxSZXNwb25zZTo6c2V0SFRUUFN0
YXR1c0NvZGUoaW50IGh0dHBTdGF0dXNDb2RlKQoreworICAgIG1fcHJpdmF0ZS0+bV9yZXNvdXJj
ZVJlc3BvbnNlLT5zZXRIVFRQU3RhdHVzQ29kZShodHRwU3RhdHVzQ29kZSk7Cit9CisKK1dlYlN0
cmluZyBXZWJVUkxSZXNwb25zZTo6aHR0cFN0YXR1c1RleHQoKSBjb25zdAoreworICAgIHJldHVy
biBtX3ByaXZhdGUtPm1fcmVzb3VyY2VSZXNwb25zZS0+aHR0cFN0YXR1c1RleHQoKTsKK30KKwor
dm9pZCBXZWJVUkxSZXNwb25zZTo6c2V0SFRUUFN0YXR1c1RleHQoY29uc3QgV2ViU3RyaW5nJiBo
dHRwU3RhdHVzVGV4dCkKK3sKKyAgICBtX3ByaXZhdGUtPm1fcmVzb3VyY2VSZXNwb25zZS0+c2V0
SFRUUFN0YXR1c1RleHQoaHR0cFN0YXR1c1RleHQpOworfQorCitXZWJTdHJpbmcgV2ViVVJMUmVz
cG9uc2U6Omh0dHBIZWFkZXJGaWVsZChjb25zdCBXZWJTdHJpbmcmIG5hbWUpIGNvbnN0Cit7Cisg
ICAgcmV0dXJuIG1fcHJpdmF0ZS0+bV9yZXNvdXJjZVJlc3BvbnNlLT5odHRwSGVhZGVyRmllbGQo
bmFtZSk7Cit9CisKK3ZvaWQgV2ViVVJMUmVzcG9uc2U6OnNldEhUVFBIZWFkZXJGaWVsZChjb25z
dCBXZWJTdHJpbmcmIG5hbWUsIGNvbnN0IFdlYlN0cmluZyYgdmFsdWUpCit7CisgICAgbV9wcml2
YXRlLT5tX3Jlc291cmNlUmVzcG9uc2UtPnNldEhUVFBIZWFkZXJGaWVsZChuYW1lLCB2YWx1ZSk7
Cit9CisKK3ZvaWQgV2ViVVJMUmVzcG9uc2U6OmFkZEhUVFBIZWFkZXJGaWVsZChjb25zdCBXZWJT
dHJpbmcmIG5hbWUsIGNvbnN0IFdlYlN0cmluZyYgdmFsdWUpCit7CisgICAgaWYgKG5hbWUuaXNO
dWxsKCkgfHwgdmFsdWUuaXNOdWxsKCkpCisgICAgICAgIHJldHVybjsKKyAgICAvLyBGSVhNRTog
QWRkIGFuIGFkZEhUVFBIZWFkZXJGaWVsZCBtZXRob2QgdG8gUmVzb3VyY2VSZXNwb25zZS4KKyAg
ICBjb25zdCBIVFRQSGVhZGVyTWFwJiBtYXAgPSBtX3ByaXZhdGUtPm1fcmVzb3VyY2VSZXNwb25z
ZS0+aHR0cEhlYWRlckZpZWxkcygpOworICAgIFN0cmluZyB2YWx1ZVN0cih2YWx1ZSk7CisgICAg
cGFpcjxIVFRQSGVhZGVyTWFwOjppdGVyYXRvciwgYm9vbD4gcmVzdWx0ID0KKyAgICAgICAgY29u
c3RfY2FzdDxIVFRQSGVhZGVyTWFwKj4oJm1hcCktPmFkZChuYW1lLCB2YWx1ZVN0cik7CisgICAg
aWYgKCFyZXN1bHQuc2Vjb25kKQorICAgICAgICByZXN1bHQuZmlyc3QtPnNlY29uZCArPSAiLCAi
ICsgdmFsdWVTdHI7Cit9CisKK3ZvaWQgV2ViVVJMUmVzcG9uc2U6OmNsZWFySFRUUEhlYWRlckZp
ZWxkKGNvbnN0IFdlYlN0cmluZyYgbmFtZSkKK3sKKyAgICAvLyBGSVhNRTogQWRkIGEgY2xlYXJI
VFRQSGVhZGVyRmllbGQgbWV0aG9kIHRvIFJlc291cmNlUmVzcG9uc2UuCisgICAgY29uc3QgSFRU
UEhlYWRlck1hcCYgbWFwID0gbV9wcml2YXRlLT5tX3Jlc291cmNlUmVzcG9uc2UtPmh0dHBIZWFk
ZXJGaWVsZHMoKTsKKyAgICBjb25zdF9jYXN0PEhUVFBIZWFkZXJNYXAqPigmbWFwKS0+cmVtb3Zl
KG5hbWUpOworfQorCit2b2lkIFdlYlVSTFJlc3BvbnNlOjp2aXNpdEhUVFBIZWFkZXJGaWVsZHMo
V2ViSFRUUEhlYWRlclZpc2l0b3IqIHZpc2l0b3IpIGNvbnN0Cit7CisgICAgY29uc3QgSFRUUEhl
YWRlck1hcCYgbWFwID0gbV9wcml2YXRlLT5tX3Jlc291cmNlUmVzcG9uc2UtPmh0dHBIZWFkZXJG
aWVsZHMoKTsKKyAgICBmb3IgKEhUVFBIZWFkZXJNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbWFw
LmJlZ2luKCk7IGl0ICE9IG1hcC5lbmQoKTsgKytpdCkKKyAgICAgICAgdmlzaXRvci0+dmlzaXRI
ZWFkZXIoaXQtPmZpcnN0LCBpdC0+c2Vjb25kKTsKK30KKworZG91YmxlIFdlYlVSTFJlc3BvbnNl
OjpsYXN0TW9kaWZpZWREYXRlKCkgY29uc3QKK3sKKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8ZG91
YmxlPihtX3ByaXZhdGUtPm1fcmVzb3VyY2VSZXNwb25zZS0+bGFzdE1vZGlmaWVkRGF0ZSgpKTsK
K30KKwordm9pZCBXZWJVUkxSZXNwb25zZTo6c2V0TGFzdE1vZGlmaWVkRGF0ZShkb3VibGUgbGFz
dE1vZGlmaWVkRGF0ZSkKK3sKKyAgICBtX3ByaXZhdGUtPm1fcmVzb3VyY2VSZXNwb25zZS0+c2V0
TGFzdE1vZGlmaWVkRGF0ZShzdGF0aWNfY2FzdDx0aW1lX3Q+KGxhc3RNb2RpZmllZERhdGUpKTsK
K30KKworbG9uZyBsb25nIFdlYlVSTFJlc3BvbnNlOjphcHBDYWNoZUlEKCkgY29uc3QKK3sKKyAg
ICByZXR1cm4gbV9wcml2YXRlLT5tX3Jlc291cmNlUmVzcG9uc2UtPmFwcENhY2hlSUQoKTsKK30K
Kwordm9pZCBXZWJVUkxSZXNwb25zZTo6c2V0QXBwQ2FjaGVJRChsb25nIGxvbmcgYXBwQ2FjaGVJ
RCkKK3sKKyAgICBtX3ByaXZhdGUtPm1fcmVzb3VyY2VSZXNwb25zZS0+c2V0QXBwQ2FjaGVJRChh
cHBDYWNoZUlEKTsKK30KKworV2ViVVJMIFdlYlVSTFJlc3BvbnNlOjphcHBDYWNoZU1hbmlmZXN0
VVJMKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9wcml2YXRlLT5tX3Jlc291cmNlUmVzcG9uc2Ut
PmFwcENhY2hlTWFuaWZlc3RVUkwoKTsKK30KKwordm9pZCBXZWJVUkxSZXNwb25zZTo6c2V0QXBw
Q2FjaGVNYW5pZmVzdFVSTChjb25zdCBXZWJVUkwmIHVybCkKK3sKKyAgICBtX3ByaXZhdGUtPm1f
cmVzb3VyY2VSZXNwb25zZS0+c2V0QXBwQ2FjaGVNYW5pZmVzdFVSTCh1cmwpOworfQorCitXZWJD
U3RyaW5nIFdlYlVSTFJlc3BvbnNlOjpzZWN1cml0eUluZm8oKSBjb25zdAoreworICAgIC8vIEZJ
WE1FOiBnZXRTZWN1cml0eUluZm8gaXMgbWlzbmFtZWQuCisgICAgcmV0dXJuIG1fcHJpdmF0ZS0+
bV9yZXNvdXJjZVJlc3BvbnNlLT5nZXRTZWN1cml0eUluZm8oKTsKK30KKwordm9pZCBXZWJVUkxS
ZXNwb25zZTo6c2V0U2VjdXJpdHlJbmZvKGNvbnN0IFdlYkNTdHJpbmcmIHNlY3VyaXR5SW5mbykK
K3sKKyAgICBtX3ByaXZhdGUtPm1fcmVzb3VyY2VSZXNwb25zZS0+c2V0U2VjdXJpdHlJbmZvKHNl
Y3VyaXR5SW5mbyk7Cit9CisKK1Jlc291cmNlUmVzcG9uc2UmIFdlYlVSTFJlc3BvbnNlOjp0b011
dGFibGVSZXNvdXJjZVJlc3BvbnNlKCkKK3sKKyAgICBBU1NFUlQobV9wcml2YXRlKTsKKyAgICBB
U1NFUlQobV9wcml2YXRlLT5tX3Jlc291cmNlUmVzcG9uc2UpOworCisgICAgcmV0dXJuICptX3By
aXZhdGUtPm1fcmVzb3VyY2VSZXNwb25zZTsKK30KKworY29uc3QgUmVzb3VyY2VSZXNwb25zZSYg
V2ViVVJMUmVzcG9uc2U6OnRvUmVzb3VyY2VSZXNwb25zZSgpIGNvbnN0Cit7CisgICAgQVNTRVJU
KG1fcHJpdmF0ZSk7CisgICAgQVNTRVJUKG1fcHJpdmF0ZS0+bV9yZXNvdXJjZVJlc3BvbnNlKTsK
KworICAgIHJldHVybiAqbV9wcml2YXRlLT5tX3Jlc291cmNlUmVzcG9uc2U7Cit9CisKK2Jvb2wg
V2ViVVJMUmVzcG9uc2U6Ondhc0NhY2hlZCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fcHJpdmF0
ZS0+bV9yZXNvdXJjZVJlc3BvbnNlLT53YXNDYWNoZWQoKTsKK30KKwordm9pZCBXZWJVUkxSZXNw
b25zZTo6c2V0V2FzQ2FjaGVkKGJvb2wgdmFsdWUpCit7CisgICAgbV9wcml2YXRlLT5tX3Jlc291
cmNlUmVzcG9uc2UtPnNldFdhc0NhY2hlZCh2YWx1ZSk7Cit9CisKK2Jvb2wgV2ViVVJMUmVzcG9u
c2U6Ondhc0ZldGNoZWRWaWFTUERZKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9wcml2YXRlLT5t
X3Jlc291cmNlUmVzcG9uc2UtPndhc0ZldGNoZWRWaWFTUERZKCk7Cit9CisKK3ZvaWQgV2ViVVJM
UmVzcG9uc2U6OnNldFdhc0ZldGNoZWRWaWFTUERZKGJvb2wgdmFsdWUpCit7CisgICAgbV9wcml2
YXRlLT5tX3Jlc291cmNlUmVzcG9uc2UtPnNldFdhc0ZldGNoZWRWaWFTUERZKHZhbHVlKTsKK30K
KworYm9vbCBXZWJVUkxSZXNwb25zZTo6d2FzTnBuTmVnb3RpYXRlZCgpIGNvbnN0Cit7CisgICAg
cmV0dXJuIG1fcHJpdmF0ZS0+bV9yZXNvdXJjZVJlc3BvbnNlLT53YXNOcG5OZWdvdGlhdGVkKCk7
Cit9CisKK3ZvaWQgV2ViVVJMUmVzcG9uc2U6OnNldFdhc05wbk5lZ290aWF0ZWQoYm9vbCB2YWx1
ZSkKK3sKKyAgICBtX3ByaXZhdGUtPm1fcmVzb3VyY2VSZXNwb25zZS0+c2V0V2FzTnBuTmVnb3Rp
YXRlZCh2YWx1ZSk7Cit9CisKK2Jvb2wgV2ViVVJMUmVzcG9uc2U6Ondhc0FsdGVybmF0ZVByb3Rv
Y29sQXZhaWxhYmxlKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9wcml2YXRlLT5tX3Jlc291cmNl
UmVzcG9uc2UtPndhc0FsdGVybmF0ZVByb3RvY29sQXZhaWxhYmxlKCk7Cit9CisKK3ZvaWQgV2Vi
VVJMUmVzcG9uc2U6OnNldFdhc0FsdGVybmF0ZVByb3RvY29sQXZhaWxhYmxlKGJvb2wgdmFsdWUp
Cit7CisgICAgbV9wcml2YXRlLT5tX3Jlc291cmNlUmVzcG9uc2UtPnNldFdhc0FsdGVybmF0ZVBy
b3RvY29sQXZhaWxhYmxlKHZhbHVlKTsKK30KKworYm9vbCBXZWJVUkxSZXNwb25zZTo6d2FzRmV0
Y2hlZFZpYVByb3h5KCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9wcml2YXRlLT5tX3Jlc291cmNl
UmVzcG9uc2UtPndhc0ZldGNoZWRWaWFQcm94eSgpOworfQorCit2b2lkIFdlYlVSTFJlc3BvbnNl
OjpzZXRXYXNGZXRjaGVkVmlhUHJveHkoYm9vbCB2YWx1ZSkKK3sKKyAgICBtX3ByaXZhdGUtPm1f
cmVzb3VyY2VSZXNwb25zZS0+c2V0V2FzRmV0Y2hlZFZpYVByb3h5KHZhbHVlKTsKK30KKworYm9v
bCBXZWJVUkxSZXNwb25zZTo6aXNNdWx0aXBhcnRQYXlsb2FkKCkgY29uc3QKK3sKKyAgICByZXR1
cm4gbV9wcml2YXRlLT5tX3Jlc291cmNlUmVzcG9uc2UtPmlzTXVsdGlwYXJ0UGF5bG9hZCgpOwor
fQorCit2b2lkIFdlYlVSTFJlc3BvbnNlOjpzZXRJc011bHRpcGFydFBheWxvYWQoYm9vbCB2YWx1
ZSkKK3sKKyAgICBtX3ByaXZhdGUtPm1fcmVzb3VyY2VSZXNwb25zZS0+c2V0SXNNdWx0aXBhcnRQ
YXlsb2FkKHZhbHVlKTsKK30KKworV2ViU3RyaW5nIFdlYlVSTFJlc3BvbnNlOjpkb3dubG9hZEZp
bGVQYXRoKCkgY29uc3QKK3sKKyAgICBjb25zdCBGaWxlKiBkb3dubG9hZGVkRmlsZSA9IG1fcHJp
dmF0ZS0+bV9yZXNvdXJjZVJlc3BvbnNlLT5kb3dubG9hZGVkRmlsZSgpOworICAgIGlmIChkb3du
bG9hZGVkRmlsZSkKKyAgICAgICAgcmV0dXJuIGRvd25sb2FkZWRGaWxlLT5wYXRoKCk7CisgICAg
cmV0dXJuIFdlYlN0cmluZygpOworfQorCit2b2lkIFdlYlVSTFJlc3BvbnNlOjpzZXREb3dubG9h
ZEZpbGVQYXRoKGNvbnN0IFdlYlN0cmluZyYgZG93bmxvYWRGaWxlUGF0aCkKK3sKKyAgICBtX3By
aXZhdGUtPm1fcmVzb3VyY2VSZXNwb25zZS0+c2V0RG93bmxvYWRlZEZpbGUoZG93bmxvYWRGaWxl
UGF0aC5pc0VtcHR5KCkgPyAwIDogRmlsZTo6Y3JlYXRlKGRvd25sb2FkRmlsZVBhdGgpKTsKK30K
KworV2ViU3RyaW5nIFdlYlVSTFJlc3BvbnNlOjpyZW1vdGVJUEFkZHJlc3MoKSBjb25zdAorewor
ICAgIHJldHVybiBtX3ByaXZhdGUtPm1fcmVzb3VyY2VSZXNwb25zZS0+cmVtb3RlSVBBZGRyZXNz
KCk7Cit9CisKK3ZvaWQgV2ViVVJMUmVzcG9uc2U6OnNldFJlbW90ZUlQQWRkcmVzcyhjb25zdCBX
ZWJTdHJpbmcmIHJlbW90ZUlQQWRkcmVzcykKK3sKKyAgICBtX3ByaXZhdGUtPm1fcmVzb3VyY2VS
ZXNwb25zZS0+c2V0UmVtb3RlSVBBZGRyZXNzKHJlbW90ZUlQQWRkcmVzcyk7Cit9CisKK3Vuc2ln
bmVkIHNob3J0IFdlYlVSTFJlc3BvbnNlOjpyZW1vdGVQb3J0KCkgY29uc3QKK3sKKyAgICByZXR1
cm4gbV9wcml2YXRlLT5tX3Jlc291cmNlUmVzcG9uc2UtPnJlbW90ZVBvcnQoKTsKK30KKwordm9p
ZCBXZWJVUkxSZXNwb25zZTo6c2V0UmVtb3RlUG9ydCh1bnNpZ25lZCBzaG9ydCByZW1vdGVQb3J0
KQoreworICAgIG1fcHJpdmF0ZS0+bV9yZXNvdXJjZVJlc3BvbnNlLT5zZXRSZW1vdGVQb3J0KHJl
bW90ZVBvcnQpOworfQorCitXZWJVUkxSZXNwb25zZTo6RXh0cmFEYXRhKiBXZWJVUkxSZXNwb25z
ZTo6ZXh0cmFEYXRhKCkgY29uc3QKK3sKKyAgICBSZWZQdHI8UmVzb3VyY2VSZXNwb25zZTo6RXh0
cmFEYXRhPiBkYXRhID0gbV9wcml2YXRlLT5tX3Jlc291cmNlUmVzcG9uc2UtPmV4dHJhRGF0YSgp
OworICAgIGlmICghZGF0YSkKKyAgICAgICAgcmV0dXJuIDA7CisgICAgcmV0dXJuIHN0YXRpY19j
YXN0PEV4dHJhRGF0YUNvbnRhaW5lcio+KGRhdGEuZ2V0KCkpLT5leHRyYURhdGEoKTsKK30KKwor
dm9pZCBXZWJVUkxSZXNwb25zZTo6c2V0RXh0cmFEYXRhKFdlYlVSTFJlc3BvbnNlOjpFeHRyYURh
dGEqIGV4dHJhRGF0YSkKK3sKKyAgICBtX3ByaXZhdGUtPm1fcmVzb3VyY2VSZXNwb25zZS0+c2V0
RXh0cmFEYXRhKEV4dHJhRGF0YUNvbnRhaW5lcjo6Y3JlYXRlKGV4dHJhRGF0YSkpOworfQorCit2
b2lkIFdlYlVSTFJlc3BvbnNlOjphc3NpZ24oV2ViVVJMUmVzcG9uc2VQcml2YXRlKiBwKQorewor
ICAgIC8vIFN1YmNsYXNzZXMgbWF5IGNhbGwgdGhpcyBkaXJlY3RseSBzbyBhIHNlbGYtYXNzaWdu
bWVudCBjaGVjayBpcyBuZWVkZWQKKyAgICAvLyBoZXJlIGFzIHdlbGwgYXMgaW4gdGhlIHB1Ymxp
YyBhc3NpZ24gbWV0aG9kLgorICAgIGlmIChtX3ByaXZhdGUgPT0gcCkKKyAgICAgICAgcmV0dXJu
OworICAgIGlmIChtX3ByaXZhdGUpCisgICAgICAgIG1fcHJpdmF0ZS0+ZGlzcG9zZSgpOworICAg
IG1fcHJpdmF0ZSA9IHA7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdApJbmRleDogU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vY2hyb21pdW0vc3VwcG9ydC9XZWJVUkxSZXNwb25zZS5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY2hyb21pdW0vc3VwcG9ydC9XZWJV
UkxSZXNwb25zZS5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9j
aHJvbWl1bS9zdXBwb3J0L1dlYlVSTFJlc3BvbnNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjks
MTggKzI5LDE2IEBACiAgKi8KIAogI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgInBsYXRm
b3JtL1dlYlVSTFJlc3BvbnNlLmgiCisjaW5jbHVkZSA8cHVibGljL1dlYlVSTFJlc3BvbnNlLmg+
CiAKLSNpbmNsdWRlICJSZXNvdXJjZVJlc3BvbnNlLmgiCiAjaW5jbHVkZSAiUmVzb3VyY2VMb2Fk
VGltaW5nLmgiCi0KLSNpbmNsdWRlICJwbGF0Zm9ybS9XZWJIVFRQSGVhZGVyVmlzaXRvci5oIgot
I2luY2x1ZGUgInBsYXRmb3JtL1dlYkhUVFBMb2FkSW5mby5oIgotI2luY2x1ZGUgInBsYXRmb3Jt
L1dlYlN0cmluZy5oIgotI2luY2x1ZGUgInBsYXRmb3JtL1dlYlVSTC5oIgotI2luY2x1ZGUgInBs
YXRmb3JtL1dlYlVSTExvYWRUaW1pbmcuaCIKKyNpbmNsdWRlICJSZXNvdXJjZVJlc3BvbnNlLmgi
CiAjaW5jbHVkZSAiV2ViVVJMUmVzcG9uc2VQcml2YXRlLmgiCi0KKyNpbmNsdWRlIDxwdWJsaWMv
V2ViSFRUUEhlYWRlclZpc2l0b3IuaD4KKyNpbmNsdWRlIDxwdWJsaWMvV2ViSFRUUExvYWRJbmZv
Lmg+CisjaW5jbHVkZSA8cHVibGljL1dlYlN0cmluZy5oPgorI2luY2x1ZGUgPHB1YmxpYy9XZWJV
UkwuaD4KKyNpbmNsdWRlIDxwdWJsaWMvV2ViVVJMTG9hZFRpbWluZy5oPgogI2luY2x1ZGUgPHd0
Zi9SZWZQdHIuaD4KIAogdXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9jaHJvbWl1bS9zdXBwb3J0L1dlYlVSTFJlc3BvbnNlUHJpdmF0ZS5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2Nocm9taXVtL3N1cHBvcnQvV2Vi
VVJMUmVzcG9uc2VQcml2YXRlLmgJKHJldmlzaW9uIDExMjUwNSkJKGZyb20gU291cmNlL1dlYktp
dC9jaHJvbWl1bS9zcmMvV2ViVVJMUmVzcG9uc2VQcml2YXRlLmg6MTEyNTA1KQorKysgU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vY2hyb21pdW0vc3VwcG9ydC9XZWJVUkxSZXNwb25zZVByaXZhdGUu
aAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDUyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAy
MDA5IEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMgYXJlCisgKiBtZXQ6CisgKgorICogICAgICogUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAq
ICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUKKyAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqIGRpc3RyaWJ1dGlvbi4KKyAqICAg
ICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMK
KyAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVj
dHMgZGVyaXZlZCBmcm9tCisgKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Ig
d3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
VEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFO
WSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBM
SU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBO
TyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisgKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUws
IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QK
KyAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBXZWJVUkxSZXNwb25zZVBy
aXZhdGVfaAorI2RlZmluZSBXZWJVUkxSZXNwb25zZVByaXZhdGVfaAorCisjaW5jbHVkZSAicGxh
dGZvcm0vV2ViU3RyaW5nLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsgY2xhc3MgUmVzb3VyY2VS
ZXNwb25zZTsgfQorCituYW1lc3BhY2UgV2ViS2l0IHsKKworY2xhc3MgV2ViVVJMUmVzcG9uc2VQ
cml2YXRlIHsKK3B1YmxpYzoKKyAgICBXZWJVUkxSZXNwb25zZVByaXZhdGUoKSA6IG1fcmVzb3Vy
Y2VSZXNwb25zZSgwKSB7IH0KKworICAgIC8vIENhbGxlZCBieSBXZWJVUkxSZXNwb25zZSB3aGVu
IGl0IG5vIGxvbmdlciBuZWVkcyB0aGlzIG9iamVjdC4KKyAgICB2aXJ0dWFsIHZvaWQgZGlzcG9z
ZSgpID0gMDsKKworICAgIFdlYkNvcmU6OlJlc291cmNlUmVzcG9uc2UqIG1fcmVzb3VyY2VSZXNw
b25zZTsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdAorCisjZW5kaWYKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2Nocm9taXVtL3N1cHBvcnQvV2ViVVJMUmVzcG9uc2VQcml2YXRl
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY2hyb21pdW0vc3VwcG9y
dC9XZWJVUkxSZXNwb25zZVByaXZhdGUuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2Nocm9taXVtL3N1cHBvcnQvV2ViVVJMUmVzcG9uc2VQcml2YXRlLmgJKHdvcmtp
bmcgY29weSkKQEAgLTMxLDcgKzMxLDcgQEAKICNpZm5kZWYgV2ViVVJMUmVzcG9uc2VQcml2YXRl
X2gKICNkZWZpbmUgV2ViVVJMUmVzcG9uc2VQcml2YXRlX2gKIAotI2luY2x1ZGUgInBsYXRmb3Jt
L1dlYlN0cmluZy5oIgorI2luY2x1ZGUgPHB1YmxpYy9XZWJTdHJpbmcuaD4KIAogbmFtZXNwYWNl
IFdlYkNvcmUgeyBjbGFzcyBSZXNvdXJjZVJlc3BvbnNlOyB9CiAKSW5kZXg6IFNvdXJjZS9XZWJL
aXQvY2hyb21pdW0vQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvY2hyb21p
dW0vQ2hhbmdlTG9nCShyZXZpc2lvbiAxMTI1MDUpCisrKyBTb3VyY2UvV2ViS2l0L2Nocm9taXVt
L0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDIxIEBACisyMDEyLTAzLTI5ICBB
ZGFtIEJhcnRoICA8YWJhcnRoQHdlYmtpdC5vcmc+CisKKyAgICAgICAgTW92ZSBDUFAgZmlsZXMg
cmVsYXRlZCB0byBSZXNvdXJjZUhhbmRsZSB0byBXZWJDb3JlL3BsYXRmb3JtCisgICAgICAgIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD04MjU4MgorCisgICAgICAgIFJl
dmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogV2ViS2l0Lmd5cDoKKyAgICAg
ICAgKiBzcmMvV2ViRGF0YS5jcHA6IFJlbW92ZWQuCisgICAgICAgICogc3JjL1dlYkhUVFBCb2R5
LmNwcDogUmVtb3ZlZC4KKyAgICAgICAgKiBzcmMvV2ViSFRUUExvYWRJbmZvLmNwcDogUmVtb3Zl
ZC4KKyAgICAgICAgKiBzcmMvV2ViVVJMLmNwcDogUmVtb3ZlZC4KKyAgICAgICAgKiBzcmMvV2Vi
VVJMRXJyb3IuY3BwOiBSZW1vdmVkLgorICAgICAgICAqIHNyYy9XZWJVUkxSZXF1ZXN0LmNwcDog
UmVtb3ZlZC4KKyAgICAgICAgKiBzcmMvV2ViVVJMUmVxdWVzdFByaXZhdGUuaDogUmVtb3ZlZC4K
KyAgICAgICAgKiBzcmMvV2ViVVJMUmVzcG9uc2UuY3BwOiBSZW1vdmVkLgorICAgICAgICAqIHNy
Yy9XZWJVUkxSZXNwb25zZVByaXZhdGUuaDogUmVtb3ZlZC4KKwogMjAxMi0wMy0yOCAgQWRhbSBC
YXJ0aCAgPGFiYXJ0aEB3ZWJraXQub3JnPgogCiAgICAgICAgIFtDaHJvbWl1bV0gTW92ZSBBUElz
IHJlbGF0ZWQgdG8gUmVzb3VyY2VIYW5kbGUgaW50byBQbGF0Zm9ybQpJbmRleDogU291cmNlL1dl
YktpdC9jaHJvbWl1bS9XZWJLaXQuZ3lwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvY2hy
b21pdW0vV2ViS2l0Lmd5cAkocmV2aXNpb24gMTEyNTA1KQorKysgU291cmNlL1dlYktpdC9jaHJv
bWl1bS9XZWJLaXQuZ3lwCSh3b3JraW5nIGNvcHkpCkBAIC01MjUsNyArNTI1LDYgQEAKICAgICAg
ICAgICAgICAgICAnc3JjL1dlYkRPTU1vdXNlRXZlbnQuY3BwJywKICAgICAgICAgICAgICAgICAn
c3JjL1dlYkRPTU11dGF0aW9uRXZlbnQuY3BwJywKICAgICAgICAgICAgICAgICAnc3JjL1dlYkRP
TVN0cmluZ0xpc3QuY3BwJywKLSAgICAgICAgICAgICAgICAnc3JjL1dlYkRhdGEuY3BwJywKICAg
ICAgICAgICAgICAgICAnc3JjL1dlYkRhdGFiYXNlLmNwcCcsCiAgICAgICAgICAgICAgICAgJ3Ny
Yy9XZWJEYXRhU291cmNlSW1wbC5jcHAnLAogICAgICAgICAgICAgICAgICdzcmMvV2ViRGF0YVNv
dXJjZUltcGwuaCcsCkBAIC01NjYsOCArNTY1LDYgQEAKICAgICAgICAgICAgICAgICAnc3JjL1dl
YkdseXBoQ2FjaGUuY3BwJywKICAgICAgICAgICAgICAgICAnc3JjL1dlYkdyYXBoaWNzQ29udGV4
dDNELmNwcCcsCiAgICAgICAgICAgICAgICAgJ3NyYy9XZWJIaXN0b3J5SXRlbS5jcHAnLAotICAg
ICAgICAgICAgICAgICdzcmMvV2ViSFRUUEJvZHkuY3BwJywKLSAgICAgICAgICAgICAgICAnc3Jj
L1dlYkhUVFBMb2FkSW5mby5jcHAnLAogICAgICAgICAgICAgICAgICdzcmMvV2ViSUNFQ2FuZGlk
YXRlRGVzY3JpcHRvci5jcHAnLAogICAgICAgICAgICAgICAgICdzcmMvV2ViSUNFT3B0aW9ucy5j
cHAnLAogICAgICAgICAgICAgICAgICdzcmMvV2ViSWNvbkxvYWRpbmdDb21wbGV0aW9uSW1wbC5j
cHAnLApAQCAtNjc3LDEzICs2NzQsNyBAQAogICAgICAgICAgICAgICAgICdzcmMvV2ViU3RvcmFn
ZVF1b3RhQ2FsbGJhY2tzSW1wbC5oJywKICAgICAgICAgICAgICAgICAnc3JjL1dlYlRleHRSdW4u
Y3BwJywKICAgICAgICAgICAgICAgICAnc3JjL1dlYlRocmVhZFNhZmVEYXRhLmNwcCcsCi0gICAg
ICAgICAgICAgICAgJ3NyYy9XZWJVUkwuY3BwJywKICAgICAgICAgICAgICAgICAnc3JjL1dlYlVS
TExvYWRUaW1pbmcuY3BwJywKLSAgICAgICAgICAgICAgICAnc3JjL1dlYlVSTFJlcXVlc3QuY3Bw
JywKLSAgICAgICAgICAgICAgICAnc3JjL1dlYlVSTFJlcXVlc3RQcml2YXRlLmgnLAotICAgICAg
ICAgICAgICAgICdzcmMvV2ViVVJMUmVzcG9uc2UuY3BwJywKLSAgICAgICAgICAgICAgICAnc3Jj
L1dlYlVSTFJlc3BvbnNlUHJpdmF0ZS5oJywKLSAgICAgICAgICAgICAgICAnc3JjL1dlYlVSTEVy
cm9yLmNwcCcsCiAgICAgICAgICAgICAgICAgJ3NyYy9XZWJTY29wZWRVc2VyR2VzdHVyZS5jcHAn
LAogICAgICAgICAgICAgICAgICdzcmMvV2ViVXNlck1lZGlhUmVxdWVzdC5jcHAnLAogICAgICAg
ICAgICAgICAgICdzcmMvV2ViVmlld0ltcGwuY3BwJywKSW5kZXg6IFNvdXJjZS9XZWJLaXQvY2hy
b21pdW0vc3JjL1dlYkRhdGEuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvY2hyb21p
dW0vc3JjL1dlYkRhdGEuY3BwCShyZXZpc2lvbiAxMTI1MDUpCisrKyBTb3VyY2UvV2ViS2l0L2No
cm9taXVtL3NyYy9XZWJEYXRhLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSwxMDMgKzAsMCBAQAot
LyoKLSAqIENvcHlyaWdodCAoQykgMjAwOSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgotICogCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKLSAqIG1ldDoKLSAqIAotICog
ICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKLSAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKLSAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKLSAqIGluIHRo
ZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUK
LSAqIGRpc3RyaWJ1dGlvbi4KLSAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIElu
Yy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKLSAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBl
bmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCi0gKiB0aGlzIHNvZnR3YXJl
IHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotICogCi0gKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJ
QlVUT1JTCi0gKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVAotICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCi0gKiBBIFBBUlRJQ1VMQVIgUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAotICog
T1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsCi0gKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCi0gKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKLSAqIERBVEEsIE9SIFBS
T0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WQotICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkg
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0K
LSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJwbGF0Zm9ybS9XZWJEYXRhLmgiCi0KLSNp
bmNsdWRlICJTaGFyZWRCdWZmZXIuaCIKLQotdXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7Ci0KLW5h
bWVzcGFjZSBXZWJLaXQgewotCi1jbGFzcyBXZWJEYXRhUHJpdmF0ZSA6IHB1YmxpYyBTaGFyZWRC
dWZmZXIgewotfTsKLQotdm9pZCBXZWJEYXRhOjpyZXNldCgpCi17Ci0gICAgaWYgKG1fcHJpdmF0
ZSkgewotICAgICAgICBtX3ByaXZhdGUtPmRlcmVmKCk7Ci0gICAgICAgIG1fcHJpdmF0ZSA9IDA7
Ci0gICAgfQotfQotCi12b2lkIFdlYkRhdGE6OmFzc2lnbihjb25zdCBXZWJEYXRhJiBvdGhlcikK
LXsKLSAgICBXZWJEYXRhUHJpdmF0ZSogcCA9IGNvbnN0X2Nhc3Q8V2ViRGF0YVByaXZhdGUqPihv
dGhlci5tX3ByaXZhdGUpOwotICAgIGlmIChwKQotICAgICAgICBwLT5yZWYoKTsKLSAgICBhc3Np
Z24ocCk7Ci19Ci0KLXZvaWQgV2ViRGF0YTo6YXNzaWduKGNvbnN0IGNoYXIqIGRhdGEsIHNpemVf
dCBzaXplKQotewotICAgIGFzc2lnbihzdGF0aWNfY2FzdDxXZWJEYXRhUHJpdmF0ZSo+KAotICAg
ICAgICBTaGFyZWRCdWZmZXI6OmNyZWF0ZShkYXRhLCBzaXplKS5sZWFrUmVmKCkpKTsKLX0KLQot
c2l6ZV90IFdlYkRhdGE6OnNpemUoKSBjb25zdAotewotICAgIGlmICghbV9wcml2YXRlKQotICAg
ICAgICByZXR1cm4gMDsKLSAgICByZXR1cm4gY29uc3RfY2FzdDxXZWJEYXRhUHJpdmF0ZSo+KG1f
cHJpdmF0ZSktPnNpemUoKTsKLX0KLQotY29uc3QgY2hhciogV2ViRGF0YTo6ZGF0YSgpIGNvbnN0
Ci17Ci0gICAgaWYgKCFtX3ByaXZhdGUpCi0gICAgICAgIHJldHVybiAwOwotICAgIHJldHVybiBj
b25zdF9jYXN0PFdlYkRhdGFQcml2YXRlKj4obV9wcml2YXRlKS0+ZGF0YSgpOwotfQotCi1XZWJE
YXRhOjpXZWJEYXRhKGNvbnN0IFBhc3NSZWZQdHI8U2hhcmVkQnVmZmVyPiYgYnVmZmVyKQotICAg
IDogbV9wcml2YXRlKHN0YXRpY19jYXN0PFdlYkRhdGFQcml2YXRlKj4oYnVmZmVyLmxlYWtSZWYo
KSkpCi17Ci19Ci0KLVdlYkRhdGEmIFdlYkRhdGE6Om9wZXJhdG9yPShjb25zdCBQYXNzUmVmUHRy
PFNoYXJlZEJ1ZmZlcj4mIGJ1ZmZlcikKLXsKLSAgICBhc3NpZ24oc3RhdGljX2Nhc3Q8V2ViRGF0
YVByaXZhdGUqPihidWZmZXIubGVha1JlZigpKSk7Ci0gICAgcmV0dXJuICp0aGlzOwotfQotCi1X
ZWJEYXRhOjpvcGVyYXRvciBQYXNzUmVmUHRyPFNoYXJlZEJ1ZmZlcj4oKSBjb25zdAotewotICAg
IHJldHVybiBQYXNzUmVmUHRyPFNoYXJlZEJ1ZmZlcj4oY29uc3RfY2FzdDxXZWJEYXRhUHJpdmF0
ZSo+KG1fcHJpdmF0ZSkpOwotfQotCi12b2lkIFdlYkRhdGE6OmFzc2lnbihXZWJEYXRhUHJpdmF0
ZSogcCkKLXsKLSAgICAvLyBwIGlzIGFscmVhZHkgcmVmJ2QgZm9yIHVzIGJ5IHRoZSBjYWxsZXIK
LSAgICBpZiAobV9wcml2YXRlKQotICAgICAgICBtX3ByaXZhdGUtPmRlcmVmKCk7Ci0gICAgbV9w
cml2YXRlID0gcDsKLX0KLQotfSAvLyBuYW1lc3BhY2UgV2ViS2l0CkluZGV4OiBTb3VyY2UvV2Vi
S2l0L2Nocm9taXVtL3NyYy9XZWJIVFRQQm9keS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YktpdC9jaHJvbWl1bS9zcmMvV2ViSFRUUEJvZHkuY3BwCShyZXZpc2lvbiAxMTI1MDUpCisrKyBT
b3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJIVFRQQm9keS5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTEsMTk0ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDkgR29vZ2xlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUK
LSAqIG1ldDoKLSAqCi0gKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogICAgICogUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQotICogY29weXJp
Z2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lcgotICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZQotICogZGlzdHJpYnV0aW9uLgotICogICAgICogTmVpdGhlciB0aGUg
bmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cwotICogY29udHJpYnV0b3Jz
IG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20K
LSAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Np
b24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhP
TERFUlMgQU5EIENPTlRSSUJVVE9SUwotICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKLSAqIExJTUlURUQgVE8sIFRIRSBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgotICog
QSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRI
RSBDT1BZUklHSFQKLSAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAotICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAotICogTElNSVRFRCBUTywg
UFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
Ci0gKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkKLSAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAicGxhdGZvcm0v
V2ViSFRUUEJvZHkuaCIKLQotI2luY2x1ZGUgIkZvcm1EYXRhLmgiCi0KLXVzaW5nIG5hbWVzcGFj
ZSBXZWJDb3JlOwotCi1uYW1lc3BhY2UgV2ViS2l0IHsKLQotY2xhc3MgV2ViSFRUUEJvZHlQcml2
YXRlIDogcHVibGljIEZvcm1EYXRhIHsKLX07Ci0KLXZvaWQgV2ViSFRUUEJvZHk6OmluaXRpYWxp
emUoKQotewotICAgIGFzc2lnbihzdGF0aWNfY2FzdDxXZWJIVFRQQm9keVByaXZhdGUqPihGb3Jt
RGF0YTo6Y3JlYXRlKCkubGVha1JlZigpKSk7Ci19Ci0KLXZvaWQgV2ViSFRUUEJvZHk6OnJlc2V0
KCkKLXsKLSAgICBhc3NpZ24oMCk7Ci19Ci0KLXZvaWQgV2ViSFRUUEJvZHk6OmFzc2lnbihjb25z
dCBXZWJIVFRQQm9keSYgb3RoZXIpCi17Ci0gICAgV2ViSFRUUEJvZHlQcml2YXRlKiBwID0gY29u
c3RfY2FzdDxXZWJIVFRQQm9keVByaXZhdGUqPihvdGhlci5tX3ByaXZhdGUpOwotICAgIGlmIChw
KQotICAgICAgICBwLT5yZWYoKTsKLSAgICBhc3NpZ24ocCk7Ci19Ci0KLXNpemVfdCBXZWJIVFRQ
Qm9keTo6ZWxlbWVudENvdW50KCkgY29uc3QKLXsKLSAgICBBU1NFUlQoIWlzTnVsbCgpKTsKLSAg
ICByZXR1cm4gbV9wcml2YXRlLT5lbGVtZW50cygpLnNpemUoKTsKLX0KLQotYm9vbCBXZWJIVFRQ
Qm9keTo6ZWxlbWVudEF0KHNpemVfdCBpbmRleCwgRWxlbWVudCYgcmVzdWx0KSBjb25zdAotewot
ICAgIEFTU0VSVCghaXNOdWxsKCkpOwotCi0gICAgaWYgKGluZGV4ID49IG1fcHJpdmF0ZS0+ZWxl
bWVudHMoKS5zaXplKCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIGNvbnN0IEZvcm1E
YXRhRWxlbWVudCYgZWxlbWVudCA9IG1fcHJpdmF0ZS0+ZWxlbWVudHMoKVtpbmRleF07Ci0KLSAg
ICByZXN1bHQuZGF0YS5yZXNldCgpOwotICAgIHJlc3VsdC5maWxlUGF0aC5yZXNldCgpOwotICAg
IHJlc3VsdC5maWxlU3RhcnQgPSAwOwotICAgIHJlc3VsdC5maWxlTGVuZ3RoID0gMDsKLSAgICBy
ZXN1bHQubW9kaWZpY2F0aW9uVGltZSA9IDAuMDsKLSAgICByZXN1bHQuYmxvYlVSTCA9IEtVUkwo
KTsKLQotICAgIHN3aXRjaCAoZWxlbWVudC5tX3R5cGUpIHsKLSAgICBjYXNlIEZvcm1EYXRhRWxl
bWVudDo6ZGF0YToKLSAgICAgICAgcmVzdWx0LnR5cGUgPSBFbGVtZW50OjpUeXBlRGF0YTsKLSAg
ICAgICAgcmVzdWx0LmRhdGEuYXNzaWduKGVsZW1lbnQubV9kYXRhLmRhdGEoKSwgZWxlbWVudC5t
X2RhdGEuc2l6ZSgpKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBGb3JtRGF0YUVsZW1lbnQ6
OmVuY29kZWRGaWxlOgotICAgICAgICByZXN1bHQudHlwZSA9IEVsZW1lbnQ6OlR5cGVGaWxlOwot
ICAgICAgICByZXN1bHQuZmlsZVBhdGggPSBlbGVtZW50Lm1fZmlsZW5hbWU7Ci0jaWYgRU5BQkxF
KEJMT0IpCi0gICAgICAgIHJlc3VsdC5maWxlU3RhcnQgPSBlbGVtZW50Lm1fZmlsZVN0YXJ0Owot
ICAgICAgICByZXN1bHQuZmlsZUxlbmd0aCA9IGVsZW1lbnQubV9maWxlTGVuZ3RoOwotICAgICAg
ICByZXN1bHQubW9kaWZpY2F0aW9uVGltZSA9IGVsZW1lbnQubV9leHBlY3RlZEZpbGVNb2RpZmlj
YXRpb25UaW1lOwotI2VuZGlmCi0gICAgICAgIGJyZWFrOwotI2lmIEVOQUJMRShCTE9CKQotICAg
IGNhc2UgRm9ybURhdGFFbGVtZW50OjplbmNvZGVkQmxvYjoKLSAgICAgICAgcmVzdWx0LnR5cGUg
PSBFbGVtZW50OjpUeXBlQmxvYjsKLSAgICAgICAgcmVzdWx0LmJsb2JVUkwgPSBlbGVtZW50Lm1f
YmxvYlVSTDsKLSAgICAgICAgYnJlYWs7Ci0jZW5kaWYKLSAgICBkZWZhdWx0OgotICAgICAgICBB
U1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAg
IHJldHVybiB0cnVlOwotfQotCi12b2lkIFdlYkhUVFBCb2R5OjphcHBlbmREYXRhKGNvbnN0IFdl
YkRhdGEmIGRhdGEpCi17Ci0gICAgZW5zdXJlTXV0YWJsZSgpOwotICAgIC8vIEZJWE1FOiBGb3Jt
RGF0YUVsZW1lbnQ6Om1fZGF0YSBzaG91bGQgYmUgYSBTaGFyZWRCdWZmZXI8Y2hhcj4uICBUaGVu
IHdlCi0gICAgLy8gY291bGQgYXZvaWQgdGhpcyBidWZmZXIgY29weS4KLSAgICBtX3ByaXZhdGUt
PmFwcGVuZERhdGEoZGF0YS5kYXRhKCksIGRhdGEuc2l6ZSgpKTsKLX0KLQotdm9pZCBXZWJIVFRQ
Qm9keTo6YXBwZW5kRmlsZShjb25zdCBXZWJTdHJpbmcmIGZpbGVQYXRoKQotewotICAgIGVuc3Vy
ZU11dGFibGUoKTsKLSAgICBtX3ByaXZhdGUtPmFwcGVuZEZpbGUoZmlsZVBhdGgpOwotfQotCi12
b2lkIFdlYkhUVFBCb2R5OjphcHBlbmRGaWxlUmFuZ2UoY29uc3QgV2ViU3RyaW5nJiBmaWxlUGF0
aCwgbG9uZyBsb25nIGZpbGVTdGFydCwgbG9uZyBsb25nIGZpbGVMZW5ndGgsIGRvdWJsZSBtb2Rp
ZmljYXRpb25UaW1lKQotewotI2lmIEVOQUJMRShCTE9CKQotICAgIGVuc3VyZU11dGFibGUoKTsK
LSAgICBtX3ByaXZhdGUtPmFwcGVuZEZpbGVSYW5nZShmaWxlUGF0aCwgZmlsZVN0YXJ0LCBmaWxl
TGVuZ3RoLCBtb2RpZmljYXRpb25UaW1lKTsKLSNlbmRpZgotfQotCi12b2lkIFdlYkhUVFBCb2R5
OjphcHBlbmRCbG9iKGNvbnN0IFdlYlVSTCYgYmxvYlVSTCkKLXsKLSNpZiBFTkFCTEUoQkxPQikK
LSAgICBlbnN1cmVNdXRhYmxlKCk7Ci0gICAgbV9wcml2YXRlLT5hcHBlbmRCbG9iKGJsb2JVUkwp
OwotI2VuZGlmCi19Ci0KLWxvbmcgbG9uZyBXZWJIVFRQQm9keTo6aWRlbnRpZmllcigpIGNvbnN0
Ci17Ci0gICAgQVNTRVJUKCFpc051bGwoKSk7Ci0gICAgcmV0dXJuIG1fcHJpdmF0ZS0+aWRlbnRp
ZmllcigpOwotfQotCi12b2lkIFdlYkhUVFBCb2R5OjpzZXRJZGVudGlmaWVyKGxvbmcgbG9uZyBp
ZGVudGlmaWVyKQotewotICAgIGVuc3VyZU11dGFibGUoKTsKLSAgICByZXR1cm4gbV9wcml2YXRl
LT5zZXRJZGVudGlmaWVyKGlkZW50aWZpZXIpOwotfQotCi1ib29sIFdlYkhUVFBCb2R5Ojpjb250
YWluc1Bhc3N3b3JkRGF0YSgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1fcHJpdmF0ZS0+Y29udGFp
bnNQYXNzd29yZERhdGEoKTsKLX0KLQotdm9pZCBXZWJIVFRQQm9keTo6c2V0Q29udGFpbnNQYXNz
d29yZERhdGEoYm9vbCBjb250YWluc1Bhc3N3b3JkRGF0YSkKLXsKLSAgICBtX3ByaXZhdGUtPnNl
dENvbnRhaW5zUGFzc3dvcmREYXRhKGNvbnRhaW5zUGFzc3dvcmREYXRhKTsKLX0KLQotV2ViSFRU
UEJvZHk6OldlYkhUVFBCb2R5KGNvbnN0IFBhc3NSZWZQdHI8Rm9ybURhdGE+JiBkYXRhKQotICAg
IDogbV9wcml2YXRlKHN0YXRpY19jYXN0PFdlYkhUVFBCb2R5UHJpdmF0ZSo+KGRhdGEubGVha1Jl
ZigpKSkKLXsKLX0KLQotV2ViSFRUUEJvZHkmIFdlYkhUVFBCb2R5OjpvcGVyYXRvcj0oY29uc3Qg
UGFzc1JlZlB0cjxGb3JtRGF0YT4mIGRhdGEpCi17Ci0gICAgYXNzaWduKHN0YXRpY19jYXN0PFdl
YkhUVFBCb2R5UHJpdmF0ZSo+KGRhdGEubGVha1JlZigpKSk7Ci0gICAgcmV0dXJuICp0aGlzOwot
fQotCi1XZWJIVFRQQm9keTo6b3BlcmF0b3IgUGFzc1JlZlB0cjxGb3JtRGF0YT4oKSBjb25zdAot
ewotICAgIHJldHVybiBtX3ByaXZhdGU7Ci19Ci0KLXZvaWQgV2ViSFRUUEJvZHk6OmFzc2lnbihX
ZWJIVFRQQm9keVByaXZhdGUqIHApCi17Ci0gICAgLy8gcCBpcyBhbHJlYWR5IHJlZidkIGZvciB1
cyBieSB0aGUgY2FsbGVyCi0gICAgaWYgKG1fcHJpdmF0ZSkKLSAgICAgICAgbV9wcml2YXRlLT5k
ZXJlZigpOwotICAgIG1fcHJpdmF0ZSA9IHA7Ci19Ci0KLXZvaWQgV2ViSFRUUEJvZHk6OmVuc3Vy
ZU11dGFibGUoKQotewotICAgIEFTU0VSVCghaXNOdWxsKCkpOwotICAgIGlmICghbV9wcml2YXRl
LT5oYXNPbmVSZWYoKSkKLSAgICAgICAgYXNzaWduKHN0YXRpY19jYXN0PFdlYkhUVFBCb2R5UHJp
dmF0ZSo+KG1fcHJpdmF0ZS0+Y29weSgpLmxlYWtSZWYoKSkpOwotfQotCi19IC8vIG5hbWVzcGFj
ZSBXZWJLaXQKSW5kZXg6IFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYkhUVFBMb2FkSW5m
by5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViSFRUUExv
YWRJbmZvLmNwcAkocmV2aXNpb24gMTEyNTA1KQorKysgU291cmNlL1dlYktpdC9jaHJvbWl1bS9z
cmMvV2ViSFRUUExvYWRJbmZvLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSwxNDcgKzAsMCBAQAot
LyoKLSAqIENvcHlyaWdodCAoQykgMjAxMCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQotICogbWV0OgotICoKLSAqICAg
ICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0Ci0gKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCi0gKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCi0gKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCi0gKiBpbiB0aGUg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCi0g
KiBkaXN0cmlidXRpb24uCi0gKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMu
IG5vciB0aGUgbmFtZXMgb2YgaXRzCi0gKiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5k
b3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQotICogdGhpcyBzb2Z0d2FyZSB3
aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLSAqCi0gKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVU
T1JTCi0gKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVAotICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCi0gKiBBIFBBUlRJQ1VMQVIgUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAotICogT1dO
RVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsCi0gKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UCi0gKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKLSAqIERBVEEsIE9SIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQot
ICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNp
bmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJwbGF0Zm9ybS9XZWJIVFRQTG9hZEluZm8uaCIK
LQotI2luY2x1ZGUgIlJlc291cmNlTG9hZEluZm8uaCIKLSNpbmNsdWRlICJSZXNvdXJjZVJlc3Bv
bnNlLmgiCi0jaW5jbHVkZSAicGxhdGZvcm0vV2ViSFRUUEhlYWRlclZpc2l0b3IuaCIKLSNpbmNs
dWRlICJwbGF0Zm9ybS9XZWJTdHJpbmcuaCIKLQotdXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7Ci0K
LW5hbWVzcGFjZSBXZWJLaXQgewotCi12b2lkIFdlYkhUVFBMb2FkSW5mbzo6aW5pdGlhbGl6ZSgp
Ci17Ci0gICAgbV9wcml2YXRlID0gYWRvcHRSZWYobmV3IFJlc291cmNlTG9hZEluZm8oKSk7Ci19
Ci0KLXZvaWQgV2ViSFRUUExvYWRJbmZvOjpyZXNldCgpCi17Ci0gICAgbV9wcml2YXRlLnJlc2V0
KCk7Ci19Ci0KLXZvaWQgV2ViSFRUUExvYWRJbmZvOjphc3NpZ24oY29uc3QgV2ViSFRUUExvYWRJ
bmZvJiByKQotewotICAgIG1fcHJpdmF0ZSA9IHIubV9wcml2YXRlOwotfQotCi1XZWJIVFRQTG9h
ZEluZm86OldlYkhUVFBMb2FkSW5mbyhXVEY6OlBhc3NSZWZQdHI8V2ViQ29yZTo6UmVzb3VyY2VM
b2FkSW5mbz4gdmFsdWUpCi17Ci0gICAgbV9wcml2YXRlID0gdmFsdWU7Ci19Ci0KLVdlYkhUVFBM
b2FkSW5mbzo6b3BlcmF0b3IgV1RGOjpQYXNzUmVmUHRyPFdlYkNvcmU6OlJlc291cmNlTG9hZElu
Zm8+KCkgY29uc3QKLXsKLSAgICByZXR1cm4gbV9wcml2YXRlLmdldCgpOwotfQotCi1pbnQgV2Vi
SFRUUExvYWRJbmZvOjpodHRwU3RhdHVzQ29kZSgpIGNvbnN0Ci17Ci0gICAgQVNTRVJUKCFtX3By
aXZhdGUuaXNOdWxsKCkpOwotICAgIHJldHVybiBtX3ByaXZhdGUtPmh0dHBTdGF0dXNDb2RlOwot
fQotCi12b2lkIFdlYkhUVFBMb2FkSW5mbzo6c2V0SFRUUFN0YXR1c0NvZGUoaW50IHN0YXR1c0Nv
ZGUpCi17Ci0gICAgQVNTRVJUKCFtX3ByaXZhdGUuaXNOdWxsKCkpOwotICAgIG1fcHJpdmF0ZS0+
aHR0cFN0YXR1c0NvZGUgPSBzdGF0dXNDb2RlOwotfQotCi1XZWJTdHJpbmcgV2ViSFRUUExvYWRJ
bmZvOjpodHRwU3RhdHVzVGV4dCgpIGNvbnN0Ci17Ci0gICAgQVNTRVJUKCFtX3ByaXZhdGUuaXNO
dWxsKCkpOwotICAgIHJldHVybiBtX3ByaXZhdGUtPmh0dHBTdGF0dXNUZXh0OwotfQotCi12b2lk
IFdlYkhUVFBMb2FkSW5mbzo6c2V0SFRUUFN0YXR1c1RleHQoY29uc3QgV2ViU3RyaW5nJiBzdGF0
dXNUZXh0KQotewotICAgIEFTU0VSVCghbV9wcml2YXRlLmlzTnVsbCgpKTsKLSAgICBtX3ByaXZh
dGUtPmh0dHBTdGF0dXNUZXh0ID0gc3RhdHVzVGV4dDsKLX0KLQotbG9uZyBsb25nIFdlYkhUVFBM
b2FkSW5mbzo6ZW5jb2RlZERhdGFMZW5ndGgoKSBjb25zdAotewotICAgIEFTU0VSVCghbV9wcml2
YXRlLmlzTnVsbCgpKTsKLSAgICByZXR1cm4gbV9wcml2YXRlLT5lbmNvZGVkRGF0YUxlbmd0aDsK
LX0KLQotdm9pZCBXZWJIVFRQTG9hZEluZm86OnNldEVuY29kZWREYXRhTGVuZ3RoKGxvbmcgbG9u
ZyBlbmNvZGVkRGF0YUxlbmd0aCkKLXsKLSAgICBBU1NFUlQoIW1fcHJpdmF0ZS5pc051bGwoKSk7
Ci0gICAgbV9wcml2YXRlLT5lbmNvZGVkRGF0YUxlbmd0aCA9IGVuY29kZWREYXRhTGVuZ3RoOwot
fQotCi1zdGF0aWMgdm9pZCBhZGRIZWFkZXIoSFRUUEhlYWRlck1hcCogbWFwLCBjb25zdCBXZWJT
dHJpbmcmIG5hbWUsIGNvbnN0IFdlYlN0cmluZyYgdmFsdWUpCi17Ci0gICAgcGFpcjxIVFRQSGVh
ZGVyTWFwOjppdGVyYXRvciwgYm9vbD4gcmVzdWx0ID0gbWFwLT5hZGQobmFtZSwgdmFsdWUpOwot
ICAgIGlmICghcmVzdWx0LnNlY29uZCkKLSAgICAgICAgcmVzdWx0LmZpcnN0LT5zZWNvbmQgKz0g
IiwgIiArIFN0cmluZyh2YWx1ZSk7Ci19Ci0KLXZvaWQgV2ViSFRUUExvYWRJbmZvOjphZGRSZXF1
ZXN0SGVhZGVyKGNvbnN0IFdlYlN0cmluZyYgbmFtZSwgY29uc3QgV2ViU3RyaW5nJiB2YWx1ZSkK
LXsKLSAgICBBU1NFUlQoIW1fcHJpdmF0ZS5pc051bGwoKSk7Ci0gICAgYWRkSGVhZGVyKCZtX3By
aXZhdGUtPnJlcXVlc3RIZWFkZXJzLCBuYW1lLCB2YWx1ZSk7Ci19Ci0KLXZvaWQgV2ViSFRUUExv
YWRJbmZvOjphZGRSZXNwb25zZUhlYWRlcihjb25zdCBXZWJTdHJpbmcmIG5hbWUsIGNvbnN0IFdl
YlN0cmluZyYgdmFsdWUpCi17Ci0gICAgQVNTRVJUKCFtX3ByaXZhdGUuaXNOdWxsKCkpOwotICAg
IGFkZEhlYWRlcigmbV9wcml2YXRlLT5yZXNwb25zZUhlYWRlcnMsIG5hbWUsIHZhbHVlKTsKLX0K
LQotV2ViU3RyaW5nIFdlYkhUVFBMb2FkSW5mbzo6cmVxdWVzdEhlYWRlcnNUZXh0KCkgY29uc3QK
LXsKLSAgICBBU1NFUlQoIW1fcHJpdmF0ZS5pc051bGwoKSk7Ci0gICAgcmV0dXJuIG1fcHJpdmF0
ZS0+cmVxdWVzdEhlYWRlcnNUZXh0OwotfQotCi12b2lkIFdlYkhUVFBMb2FkSW5mbzo6c2V0UmVx
dWVzdEhlYWRlcnNUZXh0KGNvbnN0IFdlYlN0cmluZyYgaGVhZGVyc1RleHQpCi17Ci0gICAgQVNT
RVJUKCFtX3ByaXZhdGUuaXNOdWxsKCkpOwotICAgIG1fcHJpdmF0ZS0+cmVxdWVzdEhlYWRlcnNU
ZXh0ID0gaGVhZGVyc1RleHQ7Ci19Ci0KLVdlYlN0cmluZyBXZWJIVFRQTG9hZEluZm86OnJlc3Bv
bnNlSGVhZGVyc1RleHQoKSBjb25zdAotewotICAgIEFTU0VSVCghbV9wcml2YXRlLmlzTnVsbCgp
KTsKLSAgICByZXR1cm4gbV9wcml2YXRlLT5yZXNwb25zZUhlYWRlcnNUZXh0OwotfQotCi12b2lk
IFdlYkhUVFBMb2FkSW5mbzo6c2V0UmVzcG9uc2VIZWFkZXJzVGV4dChjb25zdCBXZWJTdHJpbmcm
IGhlYWRlcnNUZXh0KQotewotICAgIEFTU0VSVCghbV9wcml2YXRlLmlzTnVsbCgpKTsKLSAgICBt
X3ByaXZhdGUtPnJlc3BvbnNlSGVhZGVyc1RleHQgPSBoZWFkZXJzVGV4dDsKLX0KLQotfSAvLyBu
YW1lc3BhY2UgV2ViS2l0CkluZGV4OiBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJVUkwu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYlVSTC5jcHAJ
KHJldmlzaW9uIDExMjUwNSkKKysrIFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYlVSTC5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNTggKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykg
MjAwOSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogCi0gKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
LSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucyBhcmUKLSAqIG1ldDoKLSAqIAotICogICAgICogUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
LSAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUKLSAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKLSAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLSAqIGRpc3RyaWJ1dGlvbi4KLSAq
ICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBp
dHMKLSAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJv
ZHVjdHMgZGVyaXZlZCBmcm9tCi0gKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJp
b3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotICogCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCi0gKiAiQVMgSVMiIEFO
RCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAot
ICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SCi0gKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
SU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAotICogT1dORVIgT1IgQ09OVFJJQlVUT1JT
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0gKiBTUEVD
SUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UCi0gKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwKLSAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQotICogVEhFT1JZIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICog
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIK
LSNpbmNsdWRlICJwbGF0Zm9ybS9XZWJVUkwuaCIKLQotI2luY2x1ZGUgIktVUkwuaCIKLQotbmFt
ZXNwYWNlIFdlYktpdCB7Ci0KLVdlYlVSTDo6V2ViVVJMKGNvbnN0IFdlYkNvcmU6OktVUkwmIHVy
bCkKLSAgICA6IG1fc3BlYyh1cmwudXRmOFN0cmluZygpKQotICAgICwgbV9wYXJzZWQodXJsLnBh
cnNlZCgpKQotICAgICwgbV9pc1ZhbGlkKHVybC5pc1ZhbGlkKCkpCi17Ci19Ci0KLVdlYlVSTCYg
V2ViVVJMOjpvcGVyYXRvcj0oY29uc3QgV2ViQ29yZTo6S1VSTCYgdXJsKQotewotICAgIG1fc3Bl
YyA9IHVybC51dGY4U3RyaW5nKCk7Ci0gICAgbV9wYXJzZWQgPSB1cmwucGFyc2VkKCk7Ci0gICAg
bV9pc1ZhbGlkID0gdXJsLmlzVmFsaWQoKTsKLSAgICByZXR1cm4gKnRoaXM7Ci19Ci0KLVdlYlVS
TDo6b3BlcmF0b3IgV2ViQ29yZTo6S1VSTCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIFdlYkNvcmU6
OktVUkwobV9zcGVjLCBtX3BhcnNlZCwgbV9pc1ZhbGlkKTsKLX0KLQotfSAvLyBuYW1lc3BhY2Ug
V2ViS2l0CkluZGV4OiBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJVUkxFcnJvci5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViVVJMRXJyb3IuY3Bw
CShyZXZpc2lvbiAxMTI1MDUpCisrKyBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJVUkxF
cnJvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNzIgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdo
dCAoQykgMjAwOSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zIGFyZQotICogbWV0OgotICoKLSAqICAgICAqIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCi0gKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlCi0gKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCi0gKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCi0gKiBkaXN0cmlidXRpb24u
Ci0gKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMg
b2YgaXRzCi0gKiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3Rl
IHByb2R1Y3RzIGRlcml2ZWQgZnJvbQotICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmlj
IHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCi0gKiAiQVMgSVMi
IEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VAotICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SCi0gKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAotICogT1dORVIgT1IgQ09OVFJJQlVU
T1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0gKiBT
UEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UCi0gKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKLSAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNT
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQotICogVEhFT1JZIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAot
ICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0Yg
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpbmNsdWRlICJjb25maWcu
aCIKLSNpbmNsdWRlICJwbGF0Zm9ybS9XZWJVUkxFcnJvci5oIgotCi0jaW5jbHVkZSAiS1VSTC5o
IgotI2luY2x1ZGUgIlJlc291cmNlRXJyb3IuaCIKLSNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5n
Lmg+Ci0KLXVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwotCi1uYW1lc3BhY2UgV2ViS2l0IHsKLQot
V2ViVVJMRXJyb3I6OldlYlVSTEVycm9yKGNvbnN0IFJlc291cmNlRXJyb3ImIGVycm9yKQotewot
ICAgICp0aGlzID0gZXJyb3I7Ci19Ci0KLVdlYlVSTEVycm9yJiBXZWJVUkxFcnJvcjo6b3BlcmF0
b3I9KGNvbnN0IFJlc291cmNlRXJyb3ImIGVycm9yKQotewotICAgIGlmIChlcnJvci5pc051bGwo
KSkKLSAgICAgICAgKnRoaXMgPSBXZWJVUkxFcnJvcigpOwotICAgIGVsc2UgewotICAgICAgICBk
b21haW4gPSBlcnJvci5kb21haW4oKTsKLSAgICAgICAgcmVhc29uID0gZXJyb3IuZXJyb3JDb2Rl
KCk7Ci0gICAgICAgIHVucmVhY2hhYmxlVVJMID0gS1VSTChQYXJzZWRVUkxTdHJpbmcsIGVycm9y
LmZhaWxpbmdVUkwoKSk7Ci0gICAgICAgIGlzQ2FuY2VsbGF0aW9uID0gZXJyb3IuaXNDYW5jZWxs
YXRpb24oKTsKLSAgICB9Ci0gICAgcmV0dXJuICp0aGlzOwotfQotCi1XZWJVUkxFcnJvcjo6b3Bl
cmF0b3IgUmVzb3VyY2VFcnJvcigpIGNvbnN0Ci17Ci0gICAgaWYgKCFyZWFzb24pCi0gICAgICAg
IHJldHVybiBSZXNvdXJjZUVycm9yKCk7Ci0gICAgQ1N0cmluZyBzcGVjID0gdW5yZWFjaGFibGVV
Ukwuc3BlYygpOwotICAgIFJlc291cmNlRXJyb3IgcmVzb3VyY2VFcnJvciA9IFJlc291cmNlRXJy
b3IoZG9tYWluLCByZWFzb24sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBTdHJpbmc6OmZyb21VVEY4KHNwZWMuZGF0YSgpLAotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3BlYy5sZW5ndGgoKSksIFN0cmluZygp
KTsKLSAgICByZXNvdXJjZUVycm9yLnNldElzQ2FuY2VsbGF0aW9uKGlzQ2FuY2VsbGF0aW9uKTsK
LSAgICByZXR1cm4gcmVzb3VyY2VFcnJvcjsKLX0KLQotfSAvLyBuYW1lc3BhY2UgV2ViS2l0Cklu
ZGV4OiBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJVUkxSZXF1ZXN0LmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJVUkxSZXF1ZXN0LmNwcAkocmV2
aXNpb24gMTEyNTA1KQorKysgU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViVVJMUmVxdWVz
dC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsMzQ3ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMDkgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucyBhcmUKLSAqIG1ldDoKLSAqCi0gKiAgICAgKiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgotICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZQotICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgotICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQotICogZGlzdHJpYnV0aW9uLgot
ICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9m
IGl0cwotICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBw
cm9kdWN0cyBkZXJpdmVkIGZyb20KLSAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBw
cmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUwotICogIkFTIElTIiBB
TkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QK
LSAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUgotICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
IElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKLSAqIE9XTkVSIE9SIENPTlRSSUJVVE9S
UyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAotICogU1BF
Q0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVAotICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsCi0gKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKLSAqIFRIRU9SWSBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAq
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgi
Ci0jaW5jbHVkZSAicGxhdGZvcm0vV2ViVVJMUmVxdWVzdC5oIgotCi0jaW5jbHVkZSAiUmVzb3Vy
Y2VSZXF1ZXN0LmgiCi0KLSNpbmNsdWRlICJwbGF0Zm9ybS9XZWJIVFRQQm9keS5oIgotI2luY2x1
ZGUgInBsYXRmb3JtL1dlYkhUVFBIZWFkZXJWaXNpdG9yLmgiCi0jaW5jbHVkZSAicGxhdGZvcm0v
V2ViVVJMLmgiCi0jaW5jbHVkZSAiV2ViVVJMUmVxdWVzdFByaXZhdGUuaCIKLQotdXNpbmcgbmFt
ZXNwYWNlIFdlYkNvcmU7Ci0KLW5hbWVzcGFjZSBXZWJLaXQgewotCi1uYW1lc3BhY2UgewotCi1j
bGFzcyBFeHRyYURhdGFDb250YWluZXIgOiBwdWJsaWMgUmVzb3VyY2VSZXF1ZXN0OjpFeHRyYURh
dGEgewotcHVibGljOgotICAgIHN0YXRpYyBQYXNzUmVmUHRyPEV4dHJhRGF0YUNvbnRhaW5lcj4g
Y3JlYXRlKFdlYlVSTFJlcXVlc3Q6OkV4dHJhRGF0YSogZXh0cmFEYXRhKSB7IHJldHVybiBhZG9w
dFJlZihuZXcgRXh0cmFEYXRhQ29udGFpbmVyKGV4dHJhRGF0YSkpOyB9Ci0KLSAgICB2aXJ0dWFs
IH5FeHRyYURhdGFDb250YWluZXIoKSB7IH0KLQotICAgIFdlYlVSTFJlcXVlc3Q6OkV4dHJhRGF0
YSogZXh0cmFEYXRhKCkgY29uc3QgeyByZXR1cm4gbV9leHRyYURhdGEuZ2V0KCk7IH0KLQotcHJp
dmF0ZToKLSAgICBleHBsaWNpdCBFeHRyYURhdGFDb250YWluZXIoV2ViVVJMUmVxdWVzdDo6RXh0
cmFEYXRhKiBleHRyYURhdGEpCi0gICAgICAgIDogbV9leHRyYURhdGEoYWRvcHRQdHIoZXh0cmFE
YXRhKSkKLSAgICB7Ci0gICAgfQotCi0gICAgT3duUHRyPFdlYlVSTFJlcXVlc3Q6OkV4dHJhRGF0
YT4gbV9leHRyYURhdGE7Ci19OwotCi19IC8vIG5hbWVzcGFjZQotCi0vLyBUaGUgc3RhbmRhcmQg
aW1wbGVtZW50YXRpb24gb2YgV2ViVVJMUmVxdWVzdFByaXZhdGUsIHdoaWNoIG1haW50YWlucwot
Ly8gb3duZXJzaGlwIG9mIGEgUmVzb3VyY2VSZXF1ZXN0IGluc3RhbmNlLgotY2xhc3MgV2ViVVJM
UmVxdWVzdFByaXZhdGVJbXBsIDogcHVibGljIFdlYlVSTFJlcXVlc3RQcml2YXRlIHsKLXB1Ymxp
YzoKLSAgICBXZWJVUkxSZXF1ZXN0UHJpdmF0ZUltcGwoKQotICAgIHsKLSAgICAgICAgbV9yZXNv
dXJjZVJlcXVlc3QgPSAmbV9yZXNvdXJjZVJlcXVlc3RBbGxvY2F0aW9uOwotICAgIH0KLQotICAg
IFdlYlVSTFJlcXVlc3RQcml2YXRlSW1wbChjb25zdCBXZWJVUkxSZXF1ZXN0UHJpdmF0ZSogcCkK
LSAgICAgICAgOiBtX3Jlc291cmNlUmVxdWVzdEFsbG9jYXRpb24oKnAtPm1fcmVzb3VyY2VSZXF1
ZXN0KQotICAgIHsKLSAgICAgICAgbV9yZXNvdXJjZVJlcXVlc3QgPSAmbV9yZXNvdXJjZVJlcXVl
c3RBbGxvY2F0aW9uOwotICAgICAgICBtX2FsbG93U3RvcmVkQ3JlZGVudGlhbHMgPSBwLT5tX2Fs
bG93U3RvcmVkQ3JlZGVudGlhbHM7Ci0gICAgfQotCi0gICAgdmlydHVhbCB2b2lkIGRpc3Bvc2Uo
KSB7IGRlbGV0ZSB0aGlzOyB9Ci0KLXByaXZhdGU6Ci0gICAgdmlydHVhbCB+V2ViVVJMUmVxdWVz
dFByaXZhdGVJbXBsKCkgeyB9Ci0KLSAgICBSZXNvdXJjZVJlcXVlc3QgbV9yZXNvdXJjZVJlcXVl
c3RBbGxvY2F0aW9uOwotfTsKLQotdm9pZCBXZWJVUkxSZXF1ZXN0Ojppbml0aWFsaXplKCkKLXsK
LSAgICBhc3NpZ24obmV3IFdlYlVSTFJlcXVlc3RQcml2YXRlSW1wbCgpKTsKLX0KLQotdm9pZCBX
ZWJVUkxSZXF1ZXN0OjpyZXNldCgpCi17Ci0gICAgYXNzaWduKDApOwotfQotCi12b2lkIFdlYlVS
TFJlcXVlc3Q6OmFzc2lnbihjb25zdCBXZWJVUkxSZXF1ZXN0JiByKQotewotICAgIGlmICgmciAh
PSB0aGlzKQotICAgICAgICBhc3NpZ24oci5tX3ByaXZhdGUgPyBuZXcgV2ViVVJMUmVxdWVzdFBy
aXZhdGVJbXBsKHIubV9wcml2YXRlKSA6IDApOwotfQotCi1ib29sIFdlYlVSTFJlcXVlc3Q6Omlz
TnVsbCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuICFtX3ByaXZhdGUgfHwgbV9wcml2YXRlLT5tX3Jl
c291cmNlUmVxdWVzdC0+aXNOdWxsKCk7Ci19Ci0KLVdlYlVSTCBXZWJVUkxSZXF1ZXN0Ojp1cmwo
KSBjb25zdAotewotICAgIHJldHVybiBtX3ByaXZhdGUtPm1fcmVzb3VyY2VSZXF1ZXN0LT51cmwo
KTsKLX0KLQotdm9pZCBXZWJVUkxSZXF1ZXN0OjpzZXRVUkwoY29uc3QgV2ViVVJMJiB1cmwpCi17
Ci0gICAgbV9wcml2YXRlLT5tX3Jlc291cmNlUmVxdWVzdC0+c2V0VVJMKHVybCk7Ci19Ci0KLVdl
YlVSTCBXZWJVUkxSZXF1ZXN0OjpmaXJzdFBhcnR5Rm9yQ29va2llcygpIGNvbnN0Ci17Ci0gICAg
cmV0dXJuIG1fcHJpdmF0ZS0+bV9yZXNvdXJjZVJlcXVlc3QtPmZpcnN0UGFydHlGb3JDb29raWVz
KCk7Ci19Ci0KLXZvaWQgV2ViVVJMUmVxdWVzdDo6c2V0Rmlyc3RQYXJ0eUZvckNvb2tpZXMoY29u
c3QgV2ViVVJMJiBmaXJzdFBhcnR5Rm9yQ29va2llcykKLXsKLSAgICBtX3ByaXZhdGUtPm1fcmVz
b3VyY2VSZXF1ZXN0LT5zZXRGaXJzdFBhcnR5Rm9yQ29va2llcyhmaXJzdFBhcnR5Rm9yQ29va2ll
cyk7Ci19Ci0KLWJvb2wgV2ViVVJMUmVxdWVzdDo6YWxsb3dDb29raWVzKCkgY29uc3QKLXsKLSAg
ICByZXR1cm4gbV9wcml2YXRlLT5tX3Jlc291cmNlUmVxdWVzdC0+YWxsb3dDb29raWVzKCk7Ci19
Ci0KLXZvaWQgV2ViVVJMUmVxdWVzdDo6c2V0QWxsb3dDb29raWVzKGJvb2wgYWxsb3dDb29raWVz
KQotewotICAgIG1fcHJpdmF0ZS0+bV9yZXNvdXJjZVJlcXVlc3QtPnNldEFsbG93Q29va2llcyhh
bGxvd0Nvb2tpZXMpOwotfQotCi1ib29sIFdlYlVSTFJlcXVlc3Q6OmFsbG93U3RvcmVkQ3JlZGVu
dGlhbHMoKSBjb25zdAotewotICAgIHJldHVybiBtX3ByaXZhdGUtPm1fYWxsb3dTdG9yZWRDcmVk
ZW50aWFsczsKLX0KLQotdm9pZCBXZWJVUkxSZXF1ZXN0OjpzZXRBbGxvd1N0b3JlZENyZWRlbnRp
YWxzKGJvb2wgYWxsb3dTdG9yZWRDcmVkZW50aWFscykKLXsKLSAgICBtX3ByaXZhdGUtPm1fYWxs
b3dTdG9yZWRDcmVkZW50aWFscyA9IGFsbG93U3RvcmVkQ3JlZGVudGlhbHM7Ci19Ci0KLVdlYlVS
TFJlcXVlc3Q6OkNhY2hlUG9saWN5IFdlYlVSTFJlcXVlc3Q6OmNhY2hlUG9saWN5KCkgY29uc3QK
LXsKLSAgICByZXR1cm4gc3RhdGljX2Nhc3Q8V2ViVVJMUmVxdWVzdDo6Q2FjaGVQb2xpY3k+KAot
ICAgICAgICBtX3ByaXZhdGUtPm1fcmVzb3VyY2VSZXF1ZXN0LT5jYWNoZVBvbGljeSgpKTsKLX0K
LQotdm9pZCBXZWJVUkxSZXF1ZXN0OjpzZXRDYWNoZVBvbGljeShDYWNoZVBvbGljeSBjYWNoZVBv
bGljeSkKLXsKLSAgICBtX3ByaXZhdGUtPm1fcmVzb3VyY2VSZXF1ZXN0LT5zZXRDYWNoZVBvbGlj
eSgKLSAgICAgICAgc3RhdGljX2Nhc3Q8UmVzb3VyY2VSZXF1ZXN0Q2FjaGVQb2xpY3k+KGNhY2hl
UG9saWN5KSk7Ci19Ci0KLVdlYlN0cmluZyBXZWJVUkxSZXF1ZXN0OjpodHRwTWV0aG9kKCkgY29u
c3QKLXsKLSAgICByZXR1cm4gbV9wcml2YXRlLT5tX3Jlc291cmNlUmVxdWVzdC0+aHR0cE1ldGhv
ZCgpOwotfQotCi12b2lkIFdlYlVSTFJlcXVlc3Q6OnNldEhUVFBNZXRob2QoY29uc3QgV2ViU3Ry
aW5nJiBodHRwTWV0aG9kKQotewotICAgIG1fcHJpdmF0ZS0+bV9yZXNvdXJjZVJlcXVlc3QtPnNl
dEhUVFBNZXRob2QoaHR0cE1ldGhvZCk7Ci19Ci0KLVdlYlN0cmluZyBXZWJVUkxSZXF1ZXN0Ojpo
dHRwSGVhZGVyRmllbGQoY29uc3QgV2ViU3RyaW5nJiBuYW1lKSBjb25zdAotewotICAgIHJldHVy
biBtX3ByaXZhdGUtPm1fcmVzb3VyY2VSZXF1ZXN0LT5odHRwSGVhZGVyRmllbGQobmFtZSk7Ci19
Ci0KLXZvaWQgV2ViVVJMUmVxdWVzdDo6c2V0SFRUUEhlYWRlckZpZWxkKGNvbnN0IFdlYlN0cmlu
ZyYgbmFtZSwgY29uc3QgV2ViU3RyaW5nJiB2YWx1ZSkKLXsKLSAgICBtX3ByaXZhdGUtPm1fcmVz
b3VyY2VSZXF1ZXN0LT5zZXRIVFRQSGVhZGVyRmllbGQobmFtZSwgdmFsdWUpOwotfQotCi12b2lk
IFdlYlVSTFJlcXVlc3Q6OmFkZEhUVFBIZWFkZXJGaWVsZChjb25zdCBXZWJTdHJpbmcmIG5hbWUs
IGNvbnN0IFdlYlN0cmluZyYgdmFsdWUpCi17Ci0gICAgbV9wcml2YXRlLT5tX3Jlc291cmNlUmVx
dWVzdC0+YWRkSFRUUEhlYWRlckZpZWxkKG5hbWUsIHZhbHVlKTsKLX0KLQotdm9pZCBXZWJVUkxS
ZXF1ZXN0OjpjbGVhckhUVFBIZWFkZXJGaWVsZChjb25zdCBXZWJTdHJpbmcmIG5hbWUpCi17Ci0g
ICAgLy8gRklYTUU6IEFkZCBhIGNsZWFySFRUUEhlYWRlckZpZWxkIG1ldGhvZCB0byBSZXNvdXJj
ZVJlcXVlc3QuCi0gICAgY29uc3QgSFRUUEhlYWRlck1hcCYgbWFwID0gbV9wcml2YXRlLT5tX3Jl
c291cmNlUmVxdWVzdC0+aHR0cEhlYWRlckZpZWxkcygpOwotICAgIGNvbnN0X2Nhc3Q8SFRUUEhl
YWRlck1hcCo+KCZtYXApLT5yZW1vdmUobmFtZSk7Ci19Ci0KLXZvaWQgV2ViVVJMUmVxdWVzdDo6
dmlzaXRIVFRQSGVhZGVyRmllbGRzKFdlYkhUVFBIZWFkZXJWaXNpdG9yKiB2aXNpdG9yKSBjb25z
dAotewotICAgIGNvbnN0IEhUVFBIZWFkZXJNYXAmIG1hcCA9IG1fcHJpdmF0ZS0+bV9yZXNvdXJj
ZVJlcXVlc3QtPmh0dHBIZWFkZXJGaWVsZHMoKTsKLSAgICBmb3IgKEhUVFBIZWFkZXJNYXA6OmNv
bnN0X2l0ZXJhdG9yIGl0ID0gbWFwLmJlZ2luKCk7IGl0ICE9IG1hcC5lbmQoKTsgKytpdCkKLSAg
ICAgICAgdmlzaXRvci0+dmlzaXRIZWFkZXIoaXQtPmZpcnN0LCBpdC0+c2Vjb25kKTsKLX0KLQot
V2ViSFRUUEJvZHkgV2ViVVJMUmVxdWVzdDo6aHR0cEJvZHkoKSBjb25zdAotewotICAgIHJldHVy
biBXZWJIVFRQQm9keShtX3ByaXZhdGUtPm1fcmVzb3VyY2VSZXF1ZXN0LT5odHRwQm9keSgpKTsK
LX0KLQotdm9pZCBXZWJVUkxSZXF1ZXN0OjpzZXRIVFRQQm9keShjb25zdCBXZWJIVFRQQm9keSYg
aHR0cEJvZHkpCi17Ci0gICAgbV9wcml2YXRlLT5tX3Jlc291cmNlUmVxdWVzdC0+c2V0SFRUUEJv
ZHkoaHR0cEJvZHkpOwotfQotCi1ib29sIFdlYlVSTFJlcXVlc3Q6OnJlcG9ydFVwbG9hZFByb2dy
ZXNzKCkgY29uc3QKLXsKLSAgICByZXR1cm4gbV9wcml2YXRlLT5tX3Jlc291cmNlUmVxdWVzdC0+
cmVwb3J0VXBsb2FkUHJvZ3Jlc3MoKTsKLX0KLQotdm9pZCBXZWJVUkxSZXF1ZXN0OjpzZXRSZXBv
cnRVcGxvYWRQcm9ncmVzcyhib29sIHJlcG9ydFVwbG9hZFByb2dyZXNzKQotewotICAgIG1fcHJp
dmF0ZS0+bV9yZXNvdXJjZVJlcXVlc3QtPnNldFJlcG9ydFVwbG9hZFByb2dyZXNzKHJlcG9ydFVw
bG9hZFByb2dyZXNzKTsKLX0KLQotYm9vbCBXZWJVUkxSZXF1ZXN0OjpyZXBvcnRMb2FkVGltaW5n
KCkgY29uc3QKLXsKLSAgICByZXR1cm4gbV9wcml2YXRlLT5tX3Jlc291cmNlUmVxdWVzdC0+cmVw
b3J0TG9hZFRpbWluZygpOwotfQotCi12b2lkIFdlYlVSTFJlcXVlc3Q6OnNldFJlcG9ydFJhd0hl
YWRlcnMoYm9vbCByZXBvcnRSYXdIZWFkZXJzKQotewotICAgIG1fcHJpdmF0ZS0+bV9yZXNvdXJj
ZVJlcXVlc3QtPnNldFJlcG9ydFJhd0hlYWRlcnMocmVwb3J0UmF3SGVhZGVycyk7Ci19Ci0KLWJv
b2wgV2ViVVJMUmVxdWVzdDo6cmVwb3J0UmF3SGVhZGVycygpIGNvbnN0Ci17Ci0gICAgcmV0dXJu
IG1fcHJpdmF0ZS0+bV9yZXNvdXJjZVJlcXVlc3QtPnJlcG9ydFJhd0hlYWRlcnMoKTsKLX0KLQot
dm9pZCBXZWJVUkxSZXF1ZXN0OjpzZXRSZXBvcnRMb2FkVGltaW5nKGJvb2wgcmVwb3J0TG9hZFRp
bWluZykKLXsKLSAgICBtX3ByaXZhdGUtPm1fcmVzb3VyY2VSZXF1ZXN0LT5zZXRSZXBvcnRMb2Fk
VGltaW5nKHJlcG9ydExvYWRUaW1pbmcpOwotfQotCi1XZWJVUkxSZXF1ZXN0OjpUYXJnZXRUeXBl
IFdlYlVSTFJlcXVlc3Q6OnRhcmdldFR5cGUoKSBjb25zdAotewotICAgIC8vIEZJWE1FOiBUZW1w
b3Jhcnkgc3BlY2lhbCBjYXNlIHVudGlsIGRvd25zdHJlYW0gY2hyb21pdW0ub3JnIGtub3dzIG9m
IHRoZSBuZXcgVGFyZ2V0VHlwZXMuCi0gICAgVGFyZ2V0VHlwZSB0YXJnZXRUeXBlID0gc3RhdGlj
X2Nhc3Q8VGFyZ2V0VHlwZT4obV9wcml2YXRlLT5tX3Jlc291cmNlUmVxdWVzdC0+dGFyZ2V0VHlw
ZSgpKTsKLSAgICBpZiAodGFyZ2V0VHlwZSA9PSBUYXJnZXRJc1RleHRUcmFjayB8fCB0YXJnZXRU
eXBlID09IFRhcmdldElzVW5zcGVjaWZpZWQpCi0gICAgICAgIHJldHVybiBUYXJnZXRJc1N1YnJl
c291cmNlOwotICAgIHJldHVybiB0YXJnZXRUeXBlOwotfQotCi1ib29sIFdlYlVSTFJlcXVlc3Q6
Omhhc1VzZXJHZXN0dXJlKCkgY29uc3QKLXsKLSAgICByZXR1cm4gbV9wcml2YXRlLT5tX3Jlc291
cmNlUmVxdWVzdC0+aGFzVXNlckdlc3R1cmUoKTsKLX0KLQotdm9pZCBXZWJVUkxSZXF1ZXN0Ojpz
ZXRIYXNVc2VyR2VzdHVyZShib29sIGhhc1VzZXJHZXN0dXJlKQotewotICAgIG1fcHJpdmF0ZS0+
bV9yZXNvdXJjZVJlcXVlc3QtPnNldEhhc1VzZXJHZXN0dXJlKGhhc1VzZXJHZXN0dXJlKTsKLX0K
LQotdm9pZCBXZWJVUkxSZXF1ZXN0OjpzZXRUYXJnZXRUeXBlKFRhcmdldFR5cGUgdGFyZ2V0VHlw
ZSkKLXsKLSAgICBtX3ByaXZhdGUtPm1fcmVzb3VyY2VSZXF1ZXN0LT5zZXRUYXJnZXRUeXBlKAot
ICAgICAgICBzdGF0aWNfY2FzdDxSZXNvdXJjZVJlcXVlc3Q6OlRhcmdldFR5cGU+KHRhcmdldFR5
cGUpKTsKLX0KLQotaW50IFdlYlVSTFJlcXVlc3Q6OnJlcXVlc3RvcklEKCkgY29uc3QKLXsKLSAg
ICByZXR1cm4gbV9wcml2YXRlLT5tX3Jlc291cmNlUmVxdWVzdC0+cmVxdWVzdG9ySUQoKTsKLX0K
LQotdm9pZCBXZWJVUkxSZXF1ZXN0OjpzZXRSZXF1ZXN0b3JJRChpbnQgcmVxdWVzdG9ySUQpCi17
Ci0gICAgbV9wcml2YXRlLT5tX3Jlc291cmNlUmVxdWVzdC0+c2V0UmVxdWVzdG9ySUQocmVxdWVz
dG9ySUQpOwotfQotCi1pbnQgV2ViVVJMUmVxdWVzdDo6cmVxdWVzdG9yUHJvY2Vzc0lEKCkgY29u
c3QKLXsKLSAgICByZXR1cm4gbV9wcml2YXRlLT5tX3Jlc291cmNlUmVxdWVzdC0+cmVxdWVzdG9y
UHJvY2Vzc0lEKCk7Ci19Ci0KLXZvaWQgV2ViVVJMUmVxdWVzdDo6c2V0UmVxdWVzdG9yUHJvY2Vz
c0lEKGludCByZXF1ZXN0b3JQcm9jZXNzSUQpCi17Ci0gICAgbV9wcml2YXRlLT5tX3Jlc291cmNl
UmVxdWVzdC0+c2V0UmVxdWVzdG9yUHJvY2Vzc0lEKHJlcXVlc3RvclByb2Nlc3NJRCk7Ci19Ci0K
LWludCBXZWJVUkxSZXF1ZXN0OjphcHBDYWNoZUhvc3RJRCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJu
IG1fcHJpdmF0ZS0+bV9yZXNvdXJjZVJlcXVlc3QtPmFwcENhY2hlSG9zdElEKCk7Ci19Ci0KLXZv
aWQgV2ViVVJMUmVxdWVzdDo6c2V0QXBwQ2FjaGVIb3N0SUQoaW50IGFwcENhY2hlSG9zdElEKQot
ewotICAgIG1fcHJpdmF0ZS0+bV9yZXNvdXJjZVJlcXVlc3QtPnNldEFwcENhY2hlSG9zdElEKGFw
cENhY2hlSG9zdElEKTsKLX0KLQotYm9vbCBXZWJVUkxSZXF1ZXN0Ojpkb3dubG9hZFRvRmlsZSgp
IGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1fcHJpdmF0ZS0+bV9yZXNvdXJjZVJlcXVlc3QtPmRvd25s
b2FkVG9GaWxlKCk7Ci19Ci0KLXZvaWQgV2ViVVJMUmVxdWVzdDo6c2V0RG93bmxvYWRUb0ZpbGUo
Ym9vbCBkb3dubG9hZFRvRmlsZSkKLXsKLSAgICBtX3ByaXZhdGUtPm1fcmVzb3VyY2VSZXF1ZXN0
LT5zZXREb3dubG9hZFRvRmlsZShkb3dubG9hZFRvRmlsZSk7Ci19Ci0KLVdlYlVSTFJlcXVlc3Q6
OkV4dHJhRGF0YSogV2ViVVJMUmVxdWVzdDo6ZXh0cmFEYXRhKCkgY29uc3QKLXsKLSAgICBSZWZQ
dHI8UmVzb3VyY2VSZXF1ZXN0OjpFeHRyYURhdGE+IGRhdGEgPSBtX3ByaXZhdGUtPm1fcmVzb3Vy
Y2VSZXF1ZXN0LT5leHRyYURhdGEoKTsKLSAgICBpZiAoIWRhdGEpCi0gICAgICAgIHJldHVybiAw
OwotICAgIHJldHVybiBzdGF0aWNfY2FzdDxFeHRyYURhdGFDb250YWluZXIqPihkYXRhLmdldCgp
KS0+ZXh0cmFEYXRhKCk7Ci19Ci0KLXZvaWQgV2ViVVJMUmVxdWVzdDo6c2V0RXh0cmFEYXRhKFdl
YlVSTFJlcXVlc3Q6OkV4dHJhRGF0YSogZXh0cmFEYXRhKQotewotICAgIG1fcHJpdmF0ZS0+bV9y
ZXNvdXJjZVJlcXVlc3QtPnNldEV4dHJhRGF0YShFeHRyYURhdGFDb250YWluZXI6OmNyZWF0ZShl
eHRyYURhdGEpKTsKLX0KLQotUmVzb3VyY2VSZXF1ZXN0JiBXZWJVUkxSZXF1ZXN0Ojp0b011dGFi
bGVSZXNvdXJjZVJlcXVlc3QoKQotewotICAgIEFTU0VSVChtX3ByaXZhdGUpOwotICAgIEFTU0VS
VChtX3ByaXZhdGUtPm1fcmVzb3VyY2VSZXF1ZXN0KTsKLQotICAgIHJldHVybiAqbV9wcml2YXRl
LT5tX3Jlc291cmNlUmVxdWVzdDsKLX0KLQotY29uc3QgUmVzb3VyY2VSZXF1ZXN0JiBXZWJVUkxS
ZXF1ZXN0Ojp0b1Jlc291cmNlUmVxdWVzdCgpIGNvbnN0Ci17Ci0gICAgQVNTRVJUKG1fcHJpdmF0
ZSk7Ci0gICAgQVNTRVJUKG1fcHJpdmF0ZS0+bV9yZXNvdXJjZVJlcXVlc3QpOwotCi0gICAgcmV0
dXJuICptX3ByaXZhdGUtPm1fcmVzb3VyY2VSZXF1ZXN0OwotfQotCi12b2lkIFdlYlVSTFJlcXVl
c3Q6OmFzc2lnbihXZWJVUkxSZXF1ZXN0UHJpdmF0ZSogcCkKLXsKLSAgICAvLyBTdWJjbGFzc2Vz
IG1heSBjYWxsIHRoaXMgZGlyZWN0bHkgc28gYSBzZWxmLWFzc2lnbm1lbnQgY2hlY2sgaXMgbmVl
ZGVkCi0gICAgLy8gaGVyZSBhcyB3ZWxsIGFzIGluIHRoZSBwdWJsaWMgYXNzaWduIG1ldGhvZC4K
LSAgICBpZiAobV9wcml2YXRlID09IHApCi0gICAgICAgIHJldHVybjsKLSAgICBpZiAobV9wcml2
YXRlKQotICAgICAgICBtX3ByaXZhdGUtPmRpc3Bvc2UoKTsKLSAgICBtX3ByaXZhdGUgPSBwOwot
fQotCi19IC8vIG5hbWVzcGFjZSBXZWJLaXQKSW5kZXg6IFNvdXJjZS9XZWJLaXQvY2hyb21pdW0v
c3JjL1dlYlVSTFJlcXVlc3RQcml2YXRlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9j
aHJvbWl1bS9zcmMvV2ViVVJMUmVxdWVzdFByaXZhdGUuaAkocmV2aXNpb24gMTEyNTA1KQorKysg
U291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViVVJMUmVxdWVzdFByaXZhdGUuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMSw1MyArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDA5IEdvb2ds
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMgYXJlCi0gKiBtZXQ6Ci0gKgotICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqICAgICAqIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKLSAq
IGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIKLSAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLSAqIGRpc3RyaWJ1dGlvbi4KLSAqICAgICAqIE5laXRo
ZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKLSAqIGNvbnRy
aWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZl
ZCBmcm9tCi0gKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBw
ZXJtaXNzaW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlS
SUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKLSAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCi0gKiBMSU1JVEVEIFRP
LCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IKLSAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBT
SEFMTCBUSEUgQ09QWVJJR0hUCi0gKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLSAqIFNQRUNJQUwsIEVYRU1QTEFS
WSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKLSAqIExJTUlU
RUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLAotICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCi0gKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UK
LSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2lmbmRlZiBXZWJVUkxSZXF1ZXN0UHJpdmF0ZV9oCi0j
ZGVmaW5lIFdlYlVSTFJlcXVlc3RQcml2YXRlX2gKLQotbmFtZXNwYWNlIFdlYkNvcmUgeyBjbGFz
cyBSZXNvdXJjZVJlcXVlc3Q7IH0KLQotbmFtZXNwYWNlIFdlYktpdCB7Ci0KLWNsYXNzIFdlYlVS
TFJlcXVlc3RQcml2YXRlIHsKLXB1YmxpYzoKLSAgICBXZWJVUkxSZXF1ZXN0UHJpdmF0ZSgpCi0g
ICAgICAgIDogbV9yZXNvdXJjZVJlcXVlc3QoMCkKLSAgICAgICAgLCBtX2FsbG93U3RvcmVkQ3Jl
ZGVudGlhbHModHJ1ZSkgeyB9Ci0KLSAgICAvLyBDYWxsZWQgYnkgV2ViVVJMUmVxdWVzdCB3aGVu
IGl0IG5vIGxvbmdlciBuZWVkcyB0aGlzIG9iamVjdC4KLSAgICB2aXJ0dWFsIHZvaWQgZGlzcG9z
ZSgpID0gMDsKLQotICAgIFdlYkNvcmU6OlJlc291cmNlUmVxdWVzdCogbV9yZXNvdXJjZVJlcXVl
c3Q7Ci0gICAgYm9vbCBtX2FsbG93U3RvcmVkQ3JlZGVudGlhbHM7Ci19OwotCi19IC8vIG5hbWVz
cGFjZSBXZWJLaXQKLQotI2VuZGlmCkluZGV4OiBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9X
ZWJVUkxSZXNwb25zZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9jaHJvbWl1bS9z
cmMvV2ViVVJMUmVzcG9uc2UuY3BwCShyZXZpc2lvbiAxMTI1MDUpCisrKyBTb3VyY2UvV2ViS2l0
L2Nocm9taXVtL3NyYy9XZWJVUkxSZXNwb25zZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNDQ3
ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDkgR29vZ2xlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKLSAqIG1ldDoK
LSAqCi0gKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAotICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogICAgICogUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQotICogY29weXJpZ2h0IG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgot
ICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZQotICogZGlzdHJpYnV0aW9uLgotICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBH
b29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cwotICogY29udHJpYnV0b3JzIG1heSBiZSB1
c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KLSAqIHRoaXMg
c29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0gKgot
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5E
IENPTlRSSUJVVE9SUwotICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKLSAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgotICogQSBQQVJUSUNV
TEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklH
SFQKLSAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLAotICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAotICogTElNSVRFRCBUTywgUFJPQ1VSRU1F
TlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCi0gKiBEQVRB
LCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkKLSAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
LSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAicGxhdGZvcm0vV2ViVVJMUmVz
cG9uc2UuaCIKLQotI2luY2x1ZGUgIlJlc291cmNlUmVzcG9uc2UuaCIKLSNpbmNsdWRlICJSZXNv
dXJjZUxvYWRUaW1pbmcuaCIKLQotI2luY2x1ZGUgInBsYXRmb3JtL1dlYkhUVFBIZWFkZXJWaXNp
dG9yLmgiCi0jaW5jbHVkZSAicGxhdGZvcm0vV2ViSFRUUExvYWRJbmZvLmgiCi0jaW5jbHVkZSAi
cGxhdGZvcm0vV2ViU3RyaW5nLmgiCi0jaW5jbHVkZSAicGxhdGZvcm0vV2ViVVJMLmgiCi0jaW5j
bHVkZSAicGxhdGZvcm0vV2ViVVJMTG9hZFRpbWluZy5oIgotI2luY2x1ZGUgIldlYlVSTFJlc3Bv
bnNlUHJpdmF0ZS5oIgotCi0jaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgotCi11c2luZyBuYW1lc3Bh
Y2UgV2ViQ29yZTsKLQotbmFtZXNwYWNlIFdlYktpdCB7Ci0KLW5hbWVzcGFjZSB7Ci0KLWNsYXNz
IEV4dHJhRGF0YUNvbnRhaW5lciA6IHB1YmxpYyBSZXNvdXJjZVJlc3BvbnNlOjpFeHRyYURhdGEg
ewotcHVibGljOgotICAgIHN0YXRpYyBQYXNzUmVmUHRyPEV4dHJhRGF0YUNvbnRhaW5lcj4gY3Jl
YXRlKFdlYlVSTFJlc3BvbnNlOjpFeHRyYURhdGEqIGV4dHJhRGF0YSkgeyByZXR1cm4gYWRvcHRS
ZWYobmV3IEV4dHJhRGF0YUNvbnRhaW5lcihleHRyYURhdGEpKTsgfQotCi0gICAgdmlydHVhbCB+
RXh0cmFEYXRhQ29udGFpbmVyKCkgeyB9Ci0KLSAgICBXZWJVUkxSZXNwb25zZTo6RXh0cmFEYXRh
KiBleHRyYURhdGEoKSBjb25zdCB7IHJldHVybiBtX2V4dHJhRGF0YS5nZXQoKTsgfQotCi1wcml2
YXRlOgotICAgIGV4cGxpY2l0IEV4dHJhRGF0YUNvbnRhaW5lcihXZWJVUkxSZXNwb25zZTo6RXh0
cmFEYXRhKiBleHRyYURhdGEpCi0gICAgICAgIDogbV9leHRyYURhdGEoYWRvcHRQdHIoZXh0cmFE
YXRhKSkKLSAgICB7Ci0gICAgfQotCi0gICAgT3duUHRyPFdlYlVSTFJlc3BvbnNlOjpFeHRyYURh
dGE+IG1fZXh0cmFEYXRhOwotfTsKLQotfSAvLyBuYW1lc3BhY2UKLQotLy8gVGhlIHN0YW5kYXJk
IGltcGxlbWVudGF0aW9uIG9mIFdlYlVSTFJlc3BvbnNlUHJpdmF0ZSwgd2hpY2ggbWFpbnRhaW5z
Ci0vLyBvd25lcnNoaXAgb2YgYSBSZXNvdXJjZVJlc3BvbnNlIGluc3RhbmNlLgotY2xhc3MgV2Vi
VVJMUmVzcG9uc2VQcml2YXRlSW1wbCA6IHB1YmxpYyBXZWJVUkxSZXNwb25zZVByaXZhdGUgewot
cHVibGljOgotICAgIFdlYlVSTFJlc3BvbnNlUHJpdmF0ZUltcGwoKQotICAgIHsKLSAgICAgICAg
bV9yZXNvdXJjZVJlc3BvbnNlID0gJm1fcmVzb3VyY2VSZXNwb25zZUFsbG9jYXRpb247Ci0gICAg
fQotCi0gICAgV2ViVVJMUmVzcG9uc2VQcml2YXRlSW1wbChjb25zdCBXZWJVUkxSZXNwb25zZVBy
aXZhdGUqIHApCi0gICAgICAgIDogbV9yZXNvdXJjZVJlc3BvbnNlQWxsb2NhdGlvbigqcC0+bV9y
ZXNvdXJjZVJlc3BvbnNlKQotICAgIHsKLSAgICAgICAgbV9yZXNvdXJjZVJlc3BvbnNlID0gJm1f
cmVzb3VyY2VSZXNwb25zZUFsbG9jYXRpb247Ci0gICAgfQotCi0gICAgdmlydHVhbCB2b2lkIGRp
c3Bvc2UoKSB7IGRlbGV0ZSB0aGlzOyB9Ci0KLXByaXZhdGU6Ci0gICAgdmlydHVhbCB+V2ViVVJM
UmVzcG9uc2VQcml2YXRlSW1wbCgpIHsgfQotCi0gICAgUmVzb3VyY2VSZXNwb25zZSBtX3Jlc291
cmNlUmVzcG9uc2VBbGxvY2F0aW9uOwotfTsKLQotdm9pZCBXZWJVUkxSZXNwb25zZTo6aW5pdGlh
bGl6ZSgpCi17Ci0gICAgYXNzaWduKG5ldyBXZWJVUkxSZXNwb25zZVByaXZhdGVJbXBsKCkpOwot
fQotCi12b2lkIFdlYlVSTFJlc3BvbnNlOjpyZXNldCgpCi17Ci0gICAgYXNzaWduKDApOwotfQot
Ci12b2lkIFdlYlVSTFJlc3BvbnNlOjphc3NpZ24oY29uc3QgV2ViVVJMUmVzcG9uc2UmIHIpCi17
Ci0gICAgaWYgKCZyICE9IHRoaXMpCi0gICAgICAgIGFzc2lnbihyLm1fcHJpdmF0ZSA/IG5ldyBX
ZWJVUkxSZXNwb25zZVByaXZhdGVJbXBsKHIubV9wcml2YXRlKSA6IDApOwotfQotCi1ib29sIFdl
YlVSTFJlc3BvbnNlOjppc051bGwoKSBjb25zdAotewotICAgIHJldHVybiAhbV9wcml2YXRlIHx8
IG1fcHJpdmF0ZS0+bV9yZXNvdXJjZVJlc3BvbnNlLT5pc051bGwoKTsKLX0KLQotV2ViVVJMIFdl
YlVSTFJlc3BvbnNlOjp1cmwoKSBjb25zdAotewotICAgIHJldHVybiBtX3ByaXZhdGUtPm1fcmVz
b3VyY2VSZXNwb25zZS0+dXJsKCk7Ci19Ci0KLXZvaWQgV2ViVVJMUmVzcG9uc2U6OnNldFVSTChj
b25zdCBXZWJVUkwmIHVybCkKLXsKLSAgICBtX3ByaXZhdGUtPm1fcmVzb3VyY2VSZXNwb25zZS0+
c2V0VVJMKHVybCk7Ci19Ci0KLXVuc2lnbmVkIFdlYlVSTFJlc3BvbnNlOjpjb25uZWN0aW9uSUQo
KSBjb25zdAotewotICAgIHJldHVybiBtX3ByaXZhdGUtPm1fcmVzb3VyY2VSZXNwb25zZS0+Y29u
bmVjdGlvbklEKCk7Ci19Ci0KLXZvaWQgV2ViVVJMUmVzcG9uc2U6OnNldENvbm5lY3Rpb25JRCh1
bnNpZ25lZCBjb25uZWN0aW9uSUQpCi17Ci0gICAgbV9wcml2YXRlLT5tX3Jlc291cmNlUmVzcG9u
c2UtPnNldENvbm5lY3Rpb25JRChjb25uZWN0aW9uSUQpOwotfQotCi1ib29sIFdlYlVSTFJlc3Bv
bnNlOjpjb25uZWN0aW9uUmV1c2VkKCkgY29uc3QKLXsKLSAgICByZXR1cm4gbV9wcml2YXRlLT5t
X3Jlc291cmNlUmVzcG9uc2UtPmNvbm5lY3Rpb25SZXVzZWQoKTsKLX0KLQotdm9pZCBXZWJVUkxS
ZXNwb25zZTo6c2V0Q29ubmVjdGlvblJldXNlZChib29sIGNvbm5lY3Rpb25SZXVzZWQpCi17Ci0g
ICAgbV9wcml2YXRlLT5tX3Jlc291cmNlUmVzcG9uc2UtPnNldENvbm5lY3Rpb25SZXVzZWQoY29u
bmVjdGlvblJldXNlZCk7Ci19Ci0KLVdlYlVSTExvYWRUaW1pbmcgV2ViVVJMUmVzcG9uc2U6Omxv
YWRUaW1pbmcoKQotewotICAgIHJldHVybiBXZWJVUkxMb2FkVGltaW5nKG1fcHJpdmF0ZS0+bV9y
ZXNvdXJjZVJlc3BvbnNlLT5yZXNvdXJjZUxvYWRUaW1pbmcoKSk7Ci19Ci0KLXZvaWQgV2ViVVJM
UmVzcG9uc2U6OnNldExvYWRUaW1pbmcoY29uc3QgV2ViVVJMTG9hZFRpbWluZyYgdGltaW5nKQot
ewotICAgIFJlZlB0cjxSZXNvdXJjZUxvYWRUaW1pbmc+IGxvYWRUaW1pbmcgPSBQYXNzUmVmUHRy
PFJlc291cmNlTG9hZFRpbWluZz4odGltaW5nKTsKLSAgICBtX3ByaXZhdGUtPm1fcmVzb3VyY2VS
ZXNwb25zZS0+c2V0UmVzb3VyY2VMb2FkVGltaW5nKGxvYWRUaW1pbmcucmVsZWFzZSgpKTsKLX0K
LQotV2ViSFRUUExvYWRJbmZvIFdlYlVSTFJlc3BvbnNlOjpodHRwTG9hZEluZm8oKQotewotICAg
IHJldHVybiBXZWJIVFRQTG9hZEluZm8obV9wcml2YXRlLT5tX3Jlc291cmNlUmVzcG9uc2UtPnJl
c291cmNlTG9hZEluZm8oKSk7Ci19Ci0KLXZvaWQgV2ViVVJMUmVzcG9uc2U6OnNldEhUVFBMb2Fk
SW5mbyhjb25zdCBXZWJIVFRQTG9hZEluZm8mIHZhbHVlKQotewotICAgIG1fcHJpdmF0ZS0+bV9y
ZXNvdXJjZVJlc3BvbnNlLT5zZXRSZXNvdXJjZUxvYWRJbmZvKHZhbHVlKTsKLX0KLQotZG91Ymxl
IFdlYlVSTFJlc3BvbnNlOjpyZXNwb25zZVRpbWUoKSBjb25zdAotewotICAgIHJldHVybiBtX3By
aXZhdGUtPm1fcmVzb3VyY2VSZXNwb25zZS0+cmVzcG9uc2VUaW1lKCk7Ci19Ci0KLXZvaWQgV2Vi
VVJMUmVzcG9uc2U6OnNldFJlc3BvbnNlVGltZShkb3VibGUgcmVzcG9uc2VUaW1lKQotewotICAg
IG1fcHJpdmF0ZS0+bV9yZXNvdXJjZVJlc3BvbnNlLT5zZXRSZXNwb25zZVRpbWUocmVzcG9uc2VU
aW1lKTsKLX0KLQotV2ViU3RyaW5nIFdlYlVSTFJlc3BvbnNlOjptaW1lVHlwZSgpIGNvbnN0Ci17
Ci0gICAgcmV0dXJuIG1fcHJpdmF0ZS0+bV9yZXNvdXJjZVJlc3BvbnNlLT5taW1lVHlwZSgpOwot
fQotCi12b2lkIFdlYlVSTFJlc3BvbnNlOjpzZXRNSU1FVHlwZShjb25zdCBXZWJTdHJpbmcmIG1p
bWVUeXBlKQotewotICAgIG1fcHJpdmF0ZS0+bV9yZXNvdXJjZVJlc3BvbnNlLT5zZXRNaW1lVHlw
ZShtaW1lVHlwZSk7Ci19Ci0KLWxvbmcgbG9uZyBXZWJVUkxSZXNwb25zZTo6ZXhwZWN0ZWRDb250
ZW50TGVuZ3RoKCkgY29uc3QKLXsKLSAgICByZXR1cm4gbV9wcml2YXRlLT5tX3Jlc291cmNlUmVz
cG9uc2UtPmV4cGVjdGVkQ29udGVudExlbmd0aCgpOwotfQotCi12b2lkIFdlYlVSTFJlc3BvbnNl
OjpzZXRFeHBlY3RlZENvbnRlbnRMZW5ndGgobG9uZyBsb25nIGV4cGVjdGVkQ29udGVudExlbmd0
aCkKLXsKLSAgICBtX3ByaXZhdGUtPm1fcmVzb3VyY2VSZXNwb25zZS0+c2V0RXhwZWN0ZWRDb250
ZW50TGVuZ3RoKGV4cGVjdGVkQ29udGVudExlbmd0aCk7Ci19Ci0KLVdlYlN0cmluZyBXZWJVUkxS
ZXNwb25zZTo6dGV4dEVuY29kaW5nTmFtZSgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1fcHJpdmF0
ZS0+bV9yZXNvdXJjZVJlc3BvbnNlLT50ZXh0RW5jb2RpbmdOYW1lKCk7Ci19Ci0KLXZvaWQgV2Vi
VVJMUmVzcG9uc2U6OnNldFRleHRFbmNvZGluZ05hbWUoY29uc3QgV2ViU3RyaW5nJiB0ZXh0RW5j
b2RpbmdOYW1lKQotewotICAgIG1fcHJpdmF0ZS0+bV9yZXNvdXJjZVJlc3BvbnNlLT5zZXRUZXh0
RW5jb2RpbmdOYW1lKHRleHRFbmNvZGluZ05hbWUpOwotfQotCi1XZWJTdHJpbmcgV2ViVVJMUmVz
cG9uc2U6OnN1Z2dlc3RlZEZpbGVOYW1lKCkgY29uc3QKLXsKLSAgICByZXR1cm4gbV9wcml2YXRl
LT5tX3Jlc291cmNlUmVzcG9uc2UtPnN1Z2dlc3RlZEZpbGVuYW1lKCk7Ci19Ci0KLXZvaWQgV2Vi
VVJMUmVzcG9uc2U6OnNldFN1Z2dlc3RlZEZpbGVOYW1lKGNvbnN0IFdlYlN0cmluZyYgc3VnZ2Vz
dGVkRmlsZU5hbWUpCi17Ci0gICAgbV9wcml2YXRlLT5tX3Jlc291cmNlUmVzcG9uc2UtPnNldFN1
Z2dlc3RlZEZpbGVuYW1lKHN1Z2dlc3RlZEZpbGVOYW1lKTsKLX0KLQotaW50IFdlYlVSTFJlc3Bv
bnNlOjpodHRwU3RhdHVzQ29kZSgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1fcHJpdmF0ZS0+bV9y
ZXNvdXJjZVJlc3BvbnNlLT5odHRwU3RhdHVzQ29kZSgpOwotfQotCi12b2lkIFdlYlVSTFJlc3Bv
bnNlOjpzZXRIVFRQU3RhdHVzQ29kZShpbnQgaHR0cFN0YXR1c0NvZGUpCi17Ci0gICAgbV9wcml2
YXRlLT5tX3Jlc291cmNlUmVzcG9uc2UtPnNldEhUVFBTdGF0dXNDb2RlKGh0dHBTdGF0dXNDb2Rl
KTsKLX0KLQotV2ViU3RyaW5nIFdlYlVSTFJlc3BvbnNlOjpodHRwU3RhdHVzVGV4dCgpIGNvbnN0
Ci17Ci0gICAgcmV0dXJuIG1fcHJpdmF0ZS0+bV9yZXNvdXJjZVJlc3BvbnNlLT5odHRwU3RhdHVz
VGV4dCgpOwotfQotCi12b2lkIFdlYlVSTFJlc3BvbnNlOjpzZXRIVFRQU3RhdHVzVGV4dChjb25z
dCBXZWJTdHJpbmcmIGh0dHBTdGF0dXNUZXh0KQotewotICAgIG1fcHJpdmF0ZS0+bV9yZXNvdXJj
ZVJlc3BvbnNlLT5zZXRIVFRQU3RhdHVzVGV4dChodHRwU3RhdHVzVGV4dCk7Ci19Ci0KLVdlYlN0
cmluZyBXZWJVUkxSZXNwb25zZTo6aHR0cEhlYWRlckZpZWxkKGNvbnN0IFdlYlN0cmluZyYgbmFt
ZSkgY29uc3QKLXsKLSAgICByZXR1cm4gbV9wcml2YXRlLT5tX3Jlc291cmNlUmVzcG9uc2UtPmh0
dHBIZWFkZXJGaWVsZChuYW1lKTsKLX0KLQotdm9pZCBXZWJVUkxSZXNwb25zZTo6c2V0SFRUUEhl
YWRlckZpZWxkKGNvbnN0IFdlYlN0cmluZyYgbmFtZSwgY29uc3QgV2ViU3RyaW5nJiB2YWx1ZSkK
LXsKLSAgICBtX3ByaXZhdGUtPm1fcmVzb3VyY2VSZXNwb25zZS0+c2V0SFRUUEhlYWRlckZpZWxk
KG5hbWUsIHZhbHVlKTsKLX0KLQotdm9pZCBXZWJVUkxSZXNwb25zZTo6YWRkSFRUUEhlYWRlckZp
ZWxkKGNvbnN0IFdlYlN0cmluZyYgbmFtZSwgY29uc3QgV2ViU3RyaW5nJiB2YWx1ZSkKLXsKLSAg
ICBpZiAobmFtZS5pc051bGwoKSB8fCB2YWx1ZS5pc051bGwoKSkKLSAgICAgICAgcmV0dXJuOwot
ICAgIC8vIEZJWE1FOiBBZGQgYW4gYWRkSFRUUEhlYWRlckZpZWxkIG1ldGhvZCB0byBSZXNvdXJj
ZVJlc3BvbnNlLgotICAgIGNvbnN0IEhUVFBIZWFkZXJNYXAmIG1hcCA9IG1fcHJpdmF0ZS0+bV9y
ZXNvdXJjZVJlc3BvbnNlLT5odHRwSGVhZGVyRmllbGRzKCk7Ci0gICAgU3RyaW5nIHZhbHVlU3Ry
KHZhbHVlKTsKLSAgICBwYWlyPEhUVFBIZWFkZXJNYXA6Oml0ZXJhdG9yLCBib29sPiByZXN1bHQg
PQotICAgICAgICBjb25zdF9jYXN0PEhUVFBIZWFkZXJNYXAqPigmbWFwKS0+YWRkKG5hbWUsIHZh
bHVlU3RyKTsKLSAgICBpZiAoIXJlc3VsdC5zZWNvbmQpCi0gICAgICAgIHJlc3VsdC5maXJzdC0+
c2Vjb25kICs9ICIsICIgKyB2YWx1ZVN0cjsKLX0KLQotdm9pZCBXZWJVUkxSZXNwb25zZTo6Y2xl
YXJIVFRQSGVhZGVyRmllbGQoY29uc3QgV2ViU3RyaW5nJiBuYW1lKQotewotICAgIC8vIEZJWE1F
OiBBZGQgYSBjbGVhckhUVFBIZWFkZXJGaWVsZCBtZXRob2QgdG8gUmVzb3VyY2VSZXNwb25zZS4K
LSAgICBjb25zdCBIVFRQSGVhZGVyTWFwJiBtYXAgPSBtX3ByaXZhdGUtPm1fcmVzb3VyY2VSZXNw
b25zZS0+aHR0cEhlYWRlckZpZWxkcygpOwotICAgIGNvbnN0X2Nhc3Q8SFRUUEhlYWRlck1hcCo+
KCZtYXApLT5yZW1vdmUobmFtZSk7Ci19Ci0KLXZvaWQgV2ViVVJMUmVzcG9uc2U6OnZpc2l0SFRU
UEhlYWRlckZpZWxkcyhXZWJIVFRQSGVhZGVyVmlzaXRvciogdmlzaXRvcikgY29uc3QKLXsKLSAg
ICBjb25zdCBIVFRQSGVhZGVyTWFwJiBtYXAgPSBtX3ByaXZhdGUtPm1fcmVzb3VyY2VSZXNwb25z
ZS0+aHR0cEhlYWRlckZpZWxkcygpOwotICAgIGZvciAoSFRUUEhlYWRlck1hcDo6Y29uc3RfaXRl
cmF0b3IgaXQgPSBtYXAuYmVnaW4oKTsgaXQgIT0gbWFwLmVuZCgpOyArK2l0KQotICAgICAgICB2
aXNpdG9yLT52aXNpdEhlYWRlcihpdC0+Zmlyc3QsIGl0LT5zZWNvbmQpOwotfQotCi1kb3VibGUg
V2ViVVJMUmVzcG9uc2U6Omxhc3RNb2RpZmllZERhdGUoKSBjb25zdAotewotICAgIHJldHVybiBz
dGF0aWNfY2FzdDxkb3VibGU+KG1fcHJpdmF0ZS0+bV9yZXNvdXJjZVJlc3BvbnNlLT5sYXN0TW9k
aWZpZWREYXRlKCkpOwotfQotCi12b2lkIFdlYlVSTFJlc3BvbnNlOjpzZXRMYXN0TW9kaWZpZWRE
YXRlKGRvdWJsZSBsYXN0TW9kaWZpZWREYXRlKQotewotICAgIG1fcHJpdmF0ZS0+bV9yZXNvdXJj
ZVJlc3BvbnNlLT5zZXRMYXN0TW9kaWZpZWREYXRlKHN0YXRpY19jYXN0PHRpbWVfdD4obGFzdE1v
ZGlmaWVkRGF0ZSkpOwotfQotCi1sb25nIGxvbmcgV2ViVVJMUmVzcG9uc2U6OmFwcENhY2hlSUQo
KSBjb25zdAotewotICAgIHJldHVybiBtX3ByaXZhdGUtPm1fcmVzb3VyY2VSZXNwb25zZS0+YXBw
Q2FjaGVJRCgpOwotfQotCi12b2lkIFdlYlVSTFJlc3BvbnNlOjpzZXRBcHBDYWNoZUlEKGxvbmcg
bG9uZyBhcHBDYWNoZUlEKQotewotICAgIG1fcHJpdmF0ZS0+bV9yZXNvdXJjZVJlc3BvbnNlLT5z
ZXRBcHBDYWNoZUlEKGFwcENhY2hlSUQpOwotfQotCi1XZWJVUkwgV2ViVVJMUmVzcG9uc2U6OmFw
cENhY2hlTWFuaWZlc3RVUkwoKSBjb25zdAotewotICAgIHJldHVybiBtX3ByaXZhdGUtPm1fcmVz
b3VyY2VSZXNwb25zZS0+YXBwQ2FjaGVNYW5pZmVzdFVSTCgpOwotfQotCi12b2lkIFdlYlVSTFJl
c3BvbnNlOjpzZXRBcHBDYWNoZU1hbmlmZXN0VVJMKGNvbnN0IFdlYlVSTCYgdXJsKQotewotICAg
IG1fcHJpdmF0ZS0+bV9yZXNvdXJjZVJlc3BvbnNlLT5zZXRBcHBDYWNoZU1hbmlmZXN0VVJMKHVy
bCk7Ci19Ci0KLVdlYkNTdHJpbmcgV2ViVVJMUmVzcG9uc2U6OnNlY3VyaXR5SW5mbygpIGNvbnN0
Ci17Ci0gICAgLy8gRklYTUU6IGdldFNlY3VyaXR5SW5mbyBpcyBtaXNuYW1lZC4KLSAgICByZXR1
cm4gbV9wcml2YXRlLT5tX3Jlc291cmNlUmVzcG9uc2UtPmdldFNlY3VyaXR5SW5mbygpOwotfQot
Ci12b2lkIFdlYlVSTFJlc3BvbnNlOjpzZXRTZWN1cml0eUluZm8oY29uc3QgV2ViQ1N0cmluZyYg
c2VjdXJpdHlJbmZvKQotewotICAgIG1fcHJpdmF0ZS0+bV9yZXNvdXJjZVJlc3BvbnNlLT5zZXRT
ZWN1cml0eUluZm8oc2VjdXJpdHlJbmZvKTsKLX0KLQotUmVzb3VyY2VSZXNwb25zZSYgV2ViVVJM
UmVzcG9uc2U6OnRvTXV0YWJsZVJlc291cmNlUmVzcG9uc2UoKQotewotICAgIEFTU0VSVChtX3By
aXZhdGUpOwotICAgIEFTU0VSVChtX3ByaXZhdGUtPm1fcmVzb3VyY2VSZXNwb25zZSk7Ci0KLSAg
ICByZXR1cm4gKm1fcHJpdmF0ZS0+bV9yZXNvdXJjZVJlc3BvbnNlOwotfQotCi1jb25zdCBSZXNv
dXJjZVJlc3BvbnNlJiBXZWJVUkxSZXNwb25zZTo6dG9SZXNvdXJjZVJlc3BvbnNlKCkgY29uc3QK
LXsKLSAgICBBU1NFUlQobV9wcml2YXRlKTsKLSAgICBBU1NFUlQobV9wcml2YXRlLT5tX3Jlc291
cmNlUmVzcG9uc2UpOwotCi0gICAgcmV0dXJuICptX3ByaXZhdGUtPm1fcmVzb3VyY2VSZXNwb25z
ZTsKLX0KLQotYm9vbCBXZWJVUkxSZXNwb25zZTo6d2FzQ2FjaGVkKCkgY29uc3QKLXsKLSAgICBy
ZXR1cm4gbV9wcml2YXRlLT5tX3Jlc291cmNlUmVzcG9uc2UtPndhc0NhY2hlZCgpOwotfQotCi12
b2lkIFdlYlVSTFJlc3BvbnNlOjpzZXRXYXNDYWNoZWQoYm9vbCB2YWx1ZSkKLXsKLSAgICBtX3By
aXZhdGUtPm1fcmVzb3VyY2VSZXNwb25zZS0+c2V0V2FzQ2FjaGVkKHZhbHVlKTsKLX0KLQotYm9v
bCBXZWJVUkxSZXNwb25zZTo6d2FzRmV0Y2hlZFZpYVNQRFkoKSBjb25zdAotewotICAgIHJldHVy
biBtX3ByaXZhdGUtPm1fcmVzb3VyY2VSZXNwb25zZS0+d2FzRmV0Y2hlZFZpYVNQRFkoKTsKLX0K
LQotdm9pZCBXZWJVUkxSZXNwb25zZTo6c2V0V2FzRmV0Y2hlZFZpYVNQRFkoYm9vbCB2YWx1ZSkK
LXsKLSAgICBtX3ByaXZhdGUtPm1fcmVzb3VyY2VSZXNwb25zZS0+c2V0V2FzRmV0Y2hlZFZpYVNQ
RFkodmFsdWUpOwotfQotCi1ib29sIFdlYlVSTFJlc3BvbnNlOjp3YXNOcG5OZWdvdGlhdGVkKCkg
Y29uc3QKLXsKLSAgICByZXR1cm4gbV9wcml2YXRlLT5tX3Jlc291cmNlUmVzcG9uc2UtPndhc05w
bk5lZ290aWF0ZWQoKTsKLX0KLQotdm9pZCBXZWJVUkxSZXNwb25zZTo6c2V0V2FzTnBuTmVnb3Rp
YXRlZChib29sIHZhbHVlKQotewotICAgIG1fcHJpdmF0ZS0+bV9yZXNvdXJjZVJlc3BvbnNlLT5z
ZXRXYXNOcG5OZWdvdGlhdGVkKHZhbHVlKTsKLX0KLQotYm9vbCBXZWJVUkxSZXNwb25zZTo6d2Fz
QWx0ZXJuYXRlUHJvdG9jb2xBdmFpbGFibGUoKSBjb25zdAotewotICAgIHJldHVybiBtX3ByaXZh
dGUtPm1fcmVzb3VyY2VSZXNwb25zZS0+d2FzQWx0ZXJuYXRlUHJvdG9jb2xBdmFpbGFibGUoKTsK
LX0KLQotdm9pZCBXZWJVUkxSZXNwb25zZTo6c2V0V2FzQWx0ZXJuYXRlUHJvdG9jb2xBdmFpbGFi
bGUoYm9vbCB2YWx1ZSkKLXsKLSAgICBtX3ByaXZhdGUtPm1fcmVzb3VyY2VSZXNwb25zZS0+c2V0
V2FzQWx0ZXJuYXRlUHJvdG9jb2xBdmFpbGFibGUodmFsdWUpOwotfQotCi1ib29sIFdlYlVSTFJl
c3BvbnNlOjp3YXNGZXRjaGVkVmlhUHJveHkoKSBjb25zdAotewotICAgIHJldHVybiBtX3ByaXZh
dGUtPm1fcmVzb3VyY2VSZXNwb25zZS0+d2FzRmV0Y2hlZFZpYVByb3h5KCk7Ci19Ci0KLXZvaWQg
V2ViVVJMUmVzcG9uc2U6OnNldFdhc0ZldGNoZWRWaWFQcm94eShib29sIHZhbHVlKQotewotICAg
IG1fcHJpdmF0ZS0+bV9yZXNvdXJjZVJlc3BvbnNlLT5zZXRXYXNGZXRjaGVkVmlhUHJveHkodmFs
dWUpOwotfQotCi1ib29sIFdlYlVSTFJlc3BvbnNlOjppc011bHRpcGFydFBheWxvYWQoKSBjb25z
dAotewotICAgIHJldHVybiBtX3ByaXZhdGUtPm1fcmVzb3VyY2VSZXNwb25zZS0+aXNNdWx0aXBh
cnRQYXlsb2FkKCk7Ci19Ci0KLXZvaWQgV2ViVVJMUmVzcG9uc2U6OnNldElzTXVsdGlwYXJ0UGF5
bG9hZChib29sIHZhbHVlKQotewotICAgIG1fcHJpdmF0ZS0+bV9yZXNvdXJjZVJlc3BvbnNlLT5z
ZXRJc011bHRpcGFydFBheWxvYWQodmFsdWUpOwotfQotCi1XZWJTdHJpbmcgV2ViVVJMUmVzcG9u
c2U6OmRvd25sb2FkRmlsZVBhdGgoKSBjb25zdAotewotICAgIGNvbnN0IEZpbGUqIGRvd25sb2Fk
ZWRGaWxlID0gbV9wcml2YXRlLT5tX3Jlc291cmNlUmVzcG9uc2UtPmRvd25sb2FkZWRGaWxlKCk7
Ci0gICAgaWYgKGRvd25sb2FkZWRGaWxlKQotICAgICAgICByZXR1cm4gZG93bmxvYWRlZEZpbGUt
PnBhdGgoKTsKLSAgICByZXR1cm4gV2ViU3RyaW5nKCk7Ci19Ci0KLXZvaWQgV2ViVVJMUmVzcG9u
c2U6OnNldERvd25sb2FkRmlsZVBhdGgoY29uc3QgV2ViU3RyaW5nJiBkb3dubG9hZEZpbGVQYXRo
KQotewotICAgIG1fcHJpdmF0ZS0+bV9yZXNvdXJjZVJlc3BvbnNlLT5zZXREb3dubG9hZGVkRmls
ZShkb3dubG9hZEZpbGVQYXRoLmlzRW1wdHkoKSA/IDAgOiBGaWxlOjpjcmVhdGUoZG93bmxvYWRG
aWxlUGF0aCkpOwotfQotCi1XZWJTdHJpbmcgV2ViVVJMUmVzcG9uc2U6OnJlbW90ZUlQQWRkcmVz
cygpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1fcHJpdmF0ZS0+bV9yZXNvdXJjZVJlc3BvbnNlLT5y
ZW1vdGVJUEFkZHJlc3MoKTsKLX0KLQotdm9pZCBXZWJVUkxSZXNwb25zZTo6c2V0UmVtb3RlSVBB
ZGRyZXNzKGNvbnN0IFdlYlN0cmluZyYgcmVtb3RlSVBBZGRyZXNzKQotewotICAgIG1fcHJpdmF0
ZS0+bV9yZXNvdXJjZVJlc3BvbnNlLT5zZXRSZW1vdGVJUEFkZHJlc3MocmVtb3RlSVBBZGRyZXNz
KTsKLX0KLQotdW5zaWduZWQgc2hvcnQgV2ViVVJMUmVzcG9uc2U6OnJlbW90ZVBvcnQoKSBjb25z
dAotewotICAgIHJldHVybiBtX3ByaXZhdGUtPm1fcmVzb3VyY2VSZXNwb25zZS0+cmVtb3RlUG9y
dCgpOwotfQotCi12b2lkIFdlYlVSTFJlc3BvbnNlOjpzZXRSZW1vdGVQb3J0KHVuc2lnbmVkIHNo
b3J0IHJlbW90ZVBvcnQpCi17Ci0gICAgbV9wcml2YXRlLT5tX3Jlc291cmNlUmVzcG9uc2UtPnNl
dFJlbW90ZVBvcnQocmVtb3RlUG9ydCk7Ci19Ci0KLVdlYlVSTFJlc3BvbnNlOjpFeHRyYURhdGEq
IFdlYlVSTFJlc3BvbnNlOjpleHRyYURhdGEoKSBjb25zdAotewotICAgIFJlZlB0cjxSZXNvdXJj
ZVJlc3BvbnNlOjpFeHRyYURhdGE+IGRhdGEgPSBtX3ByaXZhdGUtPm1fcmVzb3VyY2VSZXNwb25z
ZS0+ZXh0cmFEYXRhKCk7Ci0gICAgaWYgKCFkYXRhKQotICAgICAgICByZXR1cm4gMDsKLSAgICBy
ZXR1cm4gc3RhdGljX2Nhc3Q8RXh0cmFEYXRhQ29udGFpbmVyKj4oZGF0YS5nZXQoKSktPmV4dHJh
RGF0YSgpOwotfQotCi12b2lkIFdlYlVSTFJlc3BvbnNlOjpzZXRFeHRyYURhdGEoV2ViVVJMUmVz
cG9uc2U6OkV4dHJhRGF0YSogZXh0cmFEYXRhKQotewotICAgIG1fcHJpdmF0ZS0+bV9yZXNvdXJj
ZVJlc3BvbnNlLT5zZXRFeHRyYURhdGEoRXh0cmFEYXRhQ29udGFpbmVyOjpjcmVhdGUoZXh0cmFE
YXRhKSk7Ci19Ci0KLXZvaWQgV2ViVVJMUmVzcG9uc2U6OmFzc2lnbihXZWJVUkxSZXNwb25zZVBy
aXZhdGUqIHApCi17Ci0gICAgLy8gU3ViY2xhc3NlcyBtYXkgY2FsbCB0aGlzIGRpcmVjdGx5IHNv
IGEgc2VsZi1hc3NpZ25tZW50IGNoZWNrIGlzIG5lZWRlZAotICAgIC8vIGhlcmUgYXMgd2VsbCBh
cyBpbiB0aGUgcHVibGljIGFzc2lnbiBtZXRob2QuCi0gICAgaWYgKG1fcHJpdmF0ZSA9PSBwKQot
ICAgICAgICByZXR1cm47Ci0gICAgaWYgKG1fcHJpdmF0ZSkKLSAgICAgICAgbV9wcml2YXRlLT5k
aXNwb3NlKCk7Ci0gICAgbV9wcml2YXRlID0gcDsKLX0KLQotfSAvLyBuYW1lc3BhY2UgV2ViS2l0
CkluZGV4OiBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJVUkxSZXNwb25zZVByaXZhdGUu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJVUkxSZXNwb25z
ZVByaXZhdGUuaAkocmV2aXNpb24gMTEyNTA1KQorKysgU291cmNlL1dlYktpdC9jaHJvbWl1bS9z
cmMvV2ViVVJMUmVzcG9uc2VQcml2YXRlLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNTIgKzAsMCBA
QAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwOSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQotICogbWV0OgotICoKLSAq
ICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0Ci0gKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCi0gKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCi0gKiBpbiB0
aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
Ci0gKiBkaXN0cmlidXRpb24uCi0gKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJ
bmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCi0gKiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8g
ZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQotICogdGhpcyBzb2Z0d2Fy
ZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLSAqCi0gKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJ
QlVUT1JTCi0gKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVAotICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCi0gKiBBIFBBUlRJQ1VMQVIgUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAotICog
T1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsCi0gKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCi0gKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKLSAqIERBVEEsIE9SIFBS
T0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WQotICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkg
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0K
LSNpZm5kZWYgV2ViVVJMUmVzcG9uc2VQcml2YXRlX2gKLSNkZWZpbmUgV2ViVVJMUmVzcG9uc2VQ
cml2YXRlX2gKLQotI2luY2x1ZGUgInBsYXRmb3JtL1dlYlN0cmluZy5oIgotCi1uYW1lc3BhY2Ug
V2ViQ29yZSB7IGNsYXNzIFJlc291cmNlUmVzcG9uc2U7IH0KLQotbmFtZXNwYWNlIFdlYktpdCB7
Ci0KLWNsYXNzIFdlYlVSTFJlc3BvbnNlUHJpdmF0ZSB7Ci1wdWJsaWM6Ci0gICAgV2ViVVJMUmVz
cG9uc2VQcml2YXRlKCkgOiBtX3Jlc291cmNlUmVzcG9uc2UoMCkgeyB9Ci0KLSAgICAvLyBDYWxs
ZWQgYnkgV2ViVVJMUmVzcG9uc2Ugd2hlbiBpdCBubyBsb25nZXIgbmVlZHMgdGhpcyBvYmplY3Qu
Ci0gICAgdmlydHVhbCB2b2lkIGRpc3Bvc2UoKSA9IDA7Ci0KLSAgICBXZWJDb3JlOjpSZXNvdXJj
ZVJlc3BvbnNlKiBtX3Jlc291cmNlUmVzcG9uc2U7Ci19OwotCi19IC8vIG5hbWVzcGFjZSBXZWJL
aXQKLQotI2VuZGlmCg==
</data>
<flag name="review"
          id="138801"
          type_id="1"
          status="+"
          setter="jamesr"
    />
          </attachment>
      

    </bug>

</bugzilla>