<?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>66352</bug_id>
          
          <creation_ts>2011-08-16 16:59:50 -0700</creation_ts>
          <short_desc>Some AVFoundation source files should be in platform-specific directories</short_desc>
          <delta_ts>2011-08-17 10:57:05 -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>Media</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Jeff Miller">jeffm</reporter>
          <assigned_to name="Jeff Miller">jeffm</assigned_to>
          <cc>aroben</cc>
    
    <cc>eric.carlson</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>451992</commentid>
    <comment_count>0</comment_count>
    <who name="Jeff Miller">jeffm</who>
    <bug_when>2011-08-16 16:59:50 -0700</bug_when>
    <thetext>Currently, all AVFoundation source files are in Source/WebCore/platform/graphics/AVFoundation. The platform-specific files should be moved to Source/WebCore/platform/graphics/mac and Source/WebCore/platform/graphics/win.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>451993</commentid>
    <comment_count>1</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2011-08-16 17:00:35 -0700</bug_when>
    <thetext>&lt;rdar://problem/9965771&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>452211</commentid>
    <comment_count>2</comment_count>
    <who name="Adam Roben (:aroben)">aroben</who>
    <bug_when>2011-08-17 05:24:37 -0700</bug_when>
    <thetext>Or maybe platform/graphics/AVFoundation/{cf,objc} would be better?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>452234</commentid>
    <comment_count>3</comment_count>
    <who name="Jeff Miller">jeffm</who>
    <bug_when>2011-08-17 07:15:57 -0700</bug_when>
    <thetext>(In reply to comment #2)
&gt; Or maybe platform/graphics/AVFoundation/{cf,objc} would be better?

I considered that, but other platform-specific MediaPlayer files (like MediaPlayerPrivateQTKit.mm and MediaPlayerPrivateQuickTimeVisualContext.cpp) are in the /mac and /win directories in platform/graphics already.

But I don&apos;t have a strong opinion about this, although if we were to put them in AVFoundation I think we should stick with AVFoundation/mac and AVFoundation/win, since it matches the well-known naming convention and these really are Mac and Windows-specific.

What do you think?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>452237</commentid>
    <comment_count>4</comment_count>
    <who name="Adam Roben (:aroben)">aroben</who>
    <bug_when>2011-08-17 07:39:02 -0700</bug_when>
    <thetext>Are you going to rename the MediaPlayerPrivateAVFoundationCF/ObjC class to use the Mac/Win convention, too?

It makes sense to me to have these files be in a directory beneath the directory that contains MediaPlayerPrivateAVFoundation.h/cpp. So if that file is in platform/graphics/avfoundation then these files should be in platform/graphics/avfoundation/foo.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>452239</commentid>
    <comment_count>5</comment_count>
    <who name="Jeff Miller">jeffm</who>
    <bug_when>2011-08-17 07:50:15 -0700</bug_when>
    <thetext>(In reply to comment #4)
&gt; Are you going to rename the MediaPlayerPrivateAVFoundationCF/ObjC class to use the Mac/Win convention, too?

Good point. Renaming the files isn&apos;t a big deal, but I&apos;d have to rename the classes as well.

&gt; It makes sense to me to have these files be in a directory beneath the directory that contains MediaPlayerPrivateAVFoundation.h/cpp. So if that file is in platform/graphics/avfoundation then these files should be in platform/graphics/avfoundation/foo.

OK. I will use platform/graphics/AVFoundation/{cf,objc} as you suggested, rather than renaming things further.

Adding Eric to the cc list to see if he has an opinion.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>452260</commentid>
    <comment_count>6</comment_count>
    <who name="Eric Carlson">eric.carlson</who>
    <bug_when>2011-08-17 08:09:44 -0700</bug_when>
    <thetext>I don&apos;t actually think moving or renaming the files is necessary. I definitely don&apos;t&apos; think it makes sense to move them to platform/graphics/{mac, win}, but if you think more structure will be helpful platform/graphics/AVFoundation/{cf,objc} seems the most logical.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>452283</commentid>
    <comment_count>7</comment_count>
    <who name="Jeff Miller">jeffm</who>
    <bug_when>2011-08-17 08:52:44 -0700</bug_when>
    <thetext>Maybe a little context would be helpful.  To address &lt;https://bugs.webkit.org/show_bug.cgi?id=65725&gt;, I plan on adding the Windows-specific files AVFoundationCFSoftLink.h, CoreMediaSoftLink.h, and libdispatchSoftLink.h. Rather than putting these in avfoundation, I thought the increased number of platform-specific files warranted reorganizing avfoundation.

Eric, given that, if you still don&apos;t think reorganizing is necessary, I&apos;ll be glad to close out this bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>452327</commentid>
    <comment_count>8</comment_count>
    <who name="Jeff Miller">jeffm</who>
    <bug_when>2011-08-17 10:21:08 -0700</bug_when>
    <thetext>I talked to Eric offline, and given my last comment he thinks making objc and cf directories is the right thing to do. Patch coming soon.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>452356</commentid>
    <comment_count>9</comment_count>
      <attachid>104193</attachid>
    <who name="Jeff Miller">jeffm</who>
    <bug_when>2011-08-17 10:50:31 -0700</bug_when>
    <thetext>Created attachment 104193
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>452361</commentid>
    <comment_count>10</comment_count>
    <who name="Jeff Miller">jeffm</who>
    <bug_when>2011-08-17 10:57:05 -0700</bug_when>
    <thetext>Committed r93219: &lt;http://trac.webkit.org/changeset/93219&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>104193</attachid>
            <date>2011-08-17 10:50:31 -0700</date>
            <delta_ts>2011-08-17 10:52:55 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-66352-20110817105029.patch</filename>
            <type>text/plain</type>
            <size>205941</size>
            <attacher name="Jeff Miller">jeffm</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDkzMjE2KQorKysgU291cmNlL1dlYkNvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMzkgQEAKKzIwMTEtMDgtMTcgIEplZmYgTWls
bGVyICA8amVmZm1AYXBwbGUuY29tPgorCisgICAgICAgIFNvbWUgQVZGb3VuZGF0aW9uIHNvdXJj
ZSBmaWxlcyBzaG91bGQgYmUgaW4gcGxhdGZvcm0tc3BlY2lmaWMgZGlyZWN0b3JpZXMKKyAgICAg
ICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTY2MzUyCisgICAgICAg
IAorICAgICAgICBNb3ZlZCBwbGF0Zm9ybS9ncmFwaGljcy9hdmZvdW5kYXRpb24vTWVkaWFQbGF5
ZXJQcml2YXRlQVZGb3VuZGF0aW9uQ0YuKiBmaWxlcyB0byBwbGF0Zm9ybS9ncmFwaGljcy9hdmZv
dW5kYXRpb24vY2YsCisgICAgICAgIGFuZCBtb3ZlZCBwbGF0Zm9ybS9ncmFwaGljcy9hdmZvdW5k
YXRpb24vTWVkaWFQbGF5ZXJQcml2YXRlQVZGb3VuZGF0aW9uT2JqQy4qIGZpbGVzIHRvIHBsYXRm
b3JtL2dyYXBoaWNzL2F2Zm91bmRhdGlvbi9vYmpjLy4KKyAgICAgICAgCisgICAgICAgIFdoaWxl
IEkgd2FzIGF0IGl0LCBhZGRlZCBzdm46ZW9sLXN0eWxlIHByb3BlcnR5IHRvIHRoZSBNZWRpYVBs
YXllclByaXZhdGVBVkZvdW5kYXRpb25PYmpDLiogZmlsZXMuCisgICAgICAgIAorICAgICAgICBB
bHNvLCBmb3Igc29tZSByZWFzb24sIFZpc3VhbCBTdHVkaW8gZGVjaWRlZCB0byByZS1zb3J0IGEg
Y291cGxlIGZpbGVzIGluIFxpbnNwZWN0b3JcZnJvbnQtZW5kXCBpbiBXZWJDb3JlLnZjcHJvaiwg
ZXZlbiB0aG91Z2gKKyAgICAgICAgSSBqdXN0IHJlLXNvcnRlZCB0aGUgcHJvamVjdCBpbiByOTMy
MTUuCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgTm8g
bmV3IHRlc3RzOyBubyBmdW5jdGlvbmFsIGNoYW5nZS4KKworICAgICAgICAqIFdlYkNvcmUudmNw
cm9qL1dlYkNvcmUudmNwcm9qOiBNb3ZlZCBwbGF0Zm9ybS9ncmFwaGljcy9hdmZvdW5kYXRpb24v
TWVkaWFQbGF5ZXJQcml2YXRlQVZGb3VuZGF0aW9uQ0YuKiBmaWxlcyB0byBwbGF0Zm9ybS9ncmFw
aGljcy9hdmZvdW5kYXRpb24vY2YuCisKKyAgICAgICAgKiBXZWJDb3JlLnZjcHJvai9XZWJDb3Jl
TWVkaWFRVC52c3Byb3BzOiBBZGRlZCAkKFByb2plY3REaXIpLi5ccGxhdGZvcm1cZ3JhcGhpY3Nc
YXZmb3VuZGF0aW9uXGNmIHRvIGluY2x1ZGUgcGF0aHMuCisKKyAgICAgICAgKiBXZWJDb3JlLnhj
b2RlcHJvai9wcm9qZWN0LnBieHByb2o6IE1vdmVkIHBsYXRmb3JtL2dyYXBoaWNzL2F2Zm91bmRh
dGlvbi9NZWRpYVBsYXllclByaXZhdGVBVkZvdW5kYXRpb25PYmpDLiogZmlsZXMgdG8gcGxhdGZv
cm0vZ3JhcGhpY3MvYXZmb3VuZGF0aW9uL29iamMvLgorCisgICAgICAgICogcGxhdGZvcm0vZ3Jh
cGhpY3MvYXZmb3VuZGF0aW9uL01lZGlhUGxheWVyUHJpdmF0ZUFWRm91bmRhdGlvbkNGLmNwcDog
UmVtb3ZlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9hdmZvdW5kYXRpb24vTWVkaWFQ
bGF5ZXJQcml2YXRlQVZGb3VuZGF0aW9uQ0YuaDogUmVtb3ZlZC4KKyAgICAgICAgKiBwbGF0Zm9y
bS9ncmFwaGljcy9hdmZvdW5kYXRpb24vTWVkaWFQbGF5ZXJQcml2YXRlQVZGb3VuZGF0aW9uT2Jq
Qy5oOiBSZW1vdmVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2F2Zm91bmRhdGlvbi9N
ZWRpYVBsYXllclByaXZhdGVBVkZvdW5kYXRpb25PYmpDLm1tOiBSZW1vdmVkLgorCisgICAgICAg
ICogcGxhdGZvcm0vZ3JhcGhpY3MvYXZmb3VuZGF0aW9uL2NmOiBBZGRlZC4KKyAgICAgICAgKiBw
bGF0Zm9ybS9ncmFwaGljcy9hdmZvdW5kYXRpb24vY2YvTWVkaWFQbGF5ZXJQcml2YXRlQVZGb3Vu
ZGF0aW9uQ0YuY3BwOiBDb3BpZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9hdmZvdW5kYXRpb24vTWVkaWFQbGF5ZXJQcml2YXRlQVZGb3VuZGF0aW9uQ0YuY3BwLgorICAg
ICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2F2Zm91bmRhdGlvbi9jZi9NZWRpYVBsYXllclByaXZh
dGVBVkZvdW5kYXRpb25DRi5oOiBDb3BpZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9hdmZvdW5kYXRpb24vTWVkaWFQbGF5ZXJQcml2YXRlQVZGb3VuZGF0aW9uQ0YuaC4K
KworICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2F2Zm91bmRhdGlvbi9vYmpjOiBBZGRlZC4K
KyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9hdmZvdW5kYXRpb24vb2JqYy9NZWRpYVBsYXll
clByaXZhdGVBVkZvdW5kYXRpb25PYmpDLmg6IENvcGllZCBmcm9tIFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2F2Zm91bmRhdGlvbi9NZWRpYVBsYXllclByaXZhdGVBVkZvdW5kYXRp
b25PYmpDLmguCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvYXZmb3VuZGF0aW9uL29iamMv
TWVkaWFQbGF5ZXJQcml2YXRlQVZGb3VuZGF0aW9uT2JqQy5tbTogQ29waWVkIGZyb20gU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYXZmb3VuZGF0aW9uL01lZGlhUGxheWVyUHJpdmF0
ZUFWRm91bmRhdGlvbk9iakMubW0uCisKIDIwMTEtMDgtMTcgIEtlbmljaGkgSXNoaWJhc2hpICA8
YmFzaGlAY2hyb21pdW0ub3JnPgogCiAgICAgICAgIFtDaHJvbWl1bV0gQ3Jhc2ggaW4gSGFyZmJ1
enpGYWNlOjp+SGFyZmJ1enpGYWNlCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnZjcHJv
ai9XZWJDb3JlLnZjcHJvago9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnZj
cHJvai9XZWJDb3JlLnZjcHJvagkocmV2aXNpb24gOTMyMTUpCisrKyBTb3VyY2UvV2ViQ29yZS9X
ZWJDb3JlLnZjcHJvai9XZWJDb3JlLnZjcHJvagkod29ya2luZyBjb3B5KQpAQCAtMzAzMDMsMTQg
KzMwMzAzLDE4IEBACiAJCQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXHBsYXRmb3JtXGdyYXBoaWNzXGF2
Zm91bmRhdGlvblxNZWRpYVBsYXllclByaXZhdGVBVkZvdW5kYXRpb24uaCIKIAkJCQkJCT4KIAkJ
CQkJPC9GaWxlPgotCQkJCQk8RmlsZQotCQkJCQkJUmVsYXRpdmVQYXRoPSIuLlxwbGF0Zm9ybVxn
cmFwaGljc1xhdmZvdW5kYXRpb25cTWVkaWFQbGF5ZXJQcml2YXRlQVZGb3VuZGF0aW9uQ0YuY3Bw
IgotCQkJCQkJPgotCQkJCQk8L0ZpbGU+Ci0JCQkJCTxGaWxlCi0JCQkJCQlSZWxhdGl2ZVBhdGg9
Ii4uXHBsYXRmb3JtXGdyYXBoaWNzXGF2Zm91bmRhdGlvblxNZWRpYVBsYXllclByaXZhdGVBVkZv
dW5kYXRpb25DRi5oIgorCQkJCQk8RmlsdGVyCisJCQkJCQlOYW1lPSJjZiIKIAkJCQkJCT4KLQkJ
CQkJPC9GaWxlPgorCQkJCQkJPEZpbGUKKwkJCQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXHBsYXRmb3Jt
XGdyYXBoaWNzXGF2Zm91bmRhdGlvblxjZlxNZWRpYVBsYXllclByaXZhdGVBVkZvdW5kYXRpb25D
Ri5jcHAiCisJCQkJCQkJPgorCQkJCQkJPC9GaWxlPgorCQkJCQkJPEZpbGUKKwkJCQkJCQlSZWxh
dGl2ZVBhdGg9Ii4uXHBsYXRmb3JtXGdyYXBoaWNzXGF2Zm91bmRhdGlvblxjZlxNZWRpYVBsYXll
clByaXZhdGVBVkZvdW5kYXRpb25DRi5oIgorCQkJCQkJCT4KKwkJCQkJCTwvRmlsZT4KKwkJCQkJ
PC9GaWx0ZXI+CiAJCQkJPC9GaWx0ZXI+CiAJCQk8L0ZpbHRlcj4KIAkJCTxGaWx0ZXIKQEAgLTY4
OTA1LDExICs2ODkwOSwxMSBAQAogCQkJCQk+CiAJCQkJPC9GaWxlPgogCQkJCTxGaWxlCi0JCQkJ
CVJlbGF0aXZlUGF0aD0iLi5caW5zcGVjdG9yXGZyb250LWVuZFxVZ2xpZnlKU1xKYXZhU2NyaXB0
Rm9ybWF0dGVyLmpzIgorCQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXGluc3BlY3Rvclxmcm9udC1lbmRc
SmF2YVNjcmlwdEZvcm1hdHRlci5qcyIKIAkJCQkJPgogCQkJCTwvRmlsZT4KIAkJCQk8RmlsZQot
CQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXGluc3BlY3Rvclxmcm9udC1lbmRcSmF2YVNjcmlwdEZvcm1h
dHRlci5qcyIKKwkJCQkJUmVsYXRpdmVQYXRoPSIuLlxpbnNwZWN0b3JcZnJvbnQtZW5kXFVnbGlm
eUpTXEphdmFTY3JpcHRGb3JtYXR0ZXIuanMiCiAJCQkJCT4KIAkJCQk8L0ZpbGU+CiAJCQkJPEZp
bGUKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUudmNwcm9qL1dlYkNvcmVNZWRpYVFULnZz
cHJvcHMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvV2ViQ29yZS52Y3Byb2ovV2ViQ29y
ZU1lZGlhUVQudnNwcm9wcwkocmV2aXNpb24gOTMyMTUpCisrKyBTb3VyY2UvV2ViQ29yZS9XZWJD
b3JlLnZjcHJvai9XZWJDb3JlTWVkaWFRVC52c3Byb3BzCSh3b3JraW5nIGNvcHkpCkBAIC02LDcg
KzYsNyBAQAogCT4KIAk8VG9vbAogCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIgotCQlBZGRpdGlv
bmFsSW5jbHVkZURpcmVjdG9yaWVzPSImcXVvdDskKFdlYktpdExpYnJhcmllc0RpcilcaW5jbHVk
ZVxDb3JlQXVkaW8mcXVvdDs7JnF1b3Q7JChXZWJLaXRMaWJyYXJpZXNEaXIpXGluY2x1ZGVcQVZG
b3VuZGF0aW9uJnF1b3Q7OyZxdW90OyQoUHJvamVjdERpcikuLlxwbGF0Zm9ybVxncmFwaGljc1xh
dmZvdW5kYXRpb24mcXVvdDsiCisJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiZxdW90
OyQoV2ViS2l0TGlicmFyaWVzRGlyKVxpbmNsdWRlXENvcmVBdWRpbyZxdW90OzsmcXVvdDskKFdl
YktpdExpYnJhcmllc0RpcilcaW5jbHVkZVxBVkZvdW5kYXRpb24mcXVvdDs7JnF1b3Q7JChQcm9q
ZWN0RGlyKS4uXHBsYXRmb3JtXGdyYXBoaWNzXGF2Zm91bmRhdGlvbiZxdW90OzsmcXVvdDskKFBy
b2plY3REaXIpLi5ccGxhdGZvcm1cZ3JhcGhpY3NcYXZmb3VuZGF0aW9uXGNmJnF1b3Q7IgogCS8+
CiAJPFRvb2wKIAkJTmFtZT0iVkNMaW5rZXJUb29sIgpJbmRleDogU291cmNlL1dlYkNvcmUvV2Vi
Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkocmV2aXNpb24gOTMyMTUpCisr
KyBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHdvcmtp
bmcgY29weSkKQEAgLTg0LDEwICs4NCw4IEBACiAJCTA2RTgxRUVDMEFCNURBOTcwMEM4NzgzNyAv
KiBMb2NhbEN1cnJlbnRHcmFwaGljc0NvbnRleHQubW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwNkU4MUVFQjBBQjVEQTk3MDBDODc4MzcgLyogTG9jYWxD
dXJyZW50R3JhcGhpY3NDb250ZXh0Lm1tICovOyB9OwogCQkwNzA5RkM0RTEwMjVERUUzMDA1OUNE
QkEgLyogQWNjZXNzaWJpbGl0eVNsaWRlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gMDcwOUZDNEQxMDI1REVFMzAwNTlDREJBIC8qIEFjY2Vzc2liaWxp
dHlTbGlkZXIuaCAqLzsgfTsKIAkJMDcyQzhCMTExMzFDNTE4NjAwQTRGQ0U5IC8qIE1lZGlhUGxh
eWVyUHJpdmF0ZUFWRm91bmRhdGlvbi5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSAwNzZGMEQwOTEyQjgxOTI3MDBDMjZBQTQgLyogTWVkaWFQbGF5ZXJQ
cml2YXRlQVZGb3VuZGF0aW9uLmNwcCAqLzsgfTsKLQkJMDcyQzhCMTIxMzFDNTE4QjAwQTRGQ0U5
IC8qIE1lZGlhUGxheWVyUHJpdmF0ZUFWRm91bmRhdGlvbk9iakMubW0gaW4gU291cmNlcyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwNzZGMEQwQzEyQjgxOTI3MDBDMjZBQTQg
LyogTWVkaWFQbGF5ZXJQcml2YXRlQVZGb3VuZGF0aW9uT2JqQy5tbSAqLzsgfTsKIAkJMDczNUVF
NkEwRjQwQzVFNDAwNEEyNjA0IC8qIE1lZGlhUGxheWVyUHJveHkuaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDA3MzVFRTY5MEY0MEM1RTQwMDRBMjYwNCAv
KiBNZWRpYVBsYXllclByb3h5LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0
ZSwgKTsgfTsgfTsKIAkJMDc2RjBEMEUxMkI4MTkyNzAwQzI2QUE0IC8qIE1lZGlhUGxheWVyUHJp
dmF0ZUFWRm91bmRhdGlvbi5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gMDc2RjBEMEExMkI4MTkyNzAwQzI2QUE0IC8qIE1lZGlhUGxheWVyUHJpdmF0ZUFW
Rm91bmRhdGlvbi5oICovOyB9OwotCQkwNzZGMEQwRjEyQjgxOTI3MDBDMjZBQTQgLyogTWVkaWFQ
bGF5ZXJQcml2YXRlQVZGb3VuZGF0aW9uT2JqQy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gMDc2RjBEMEIxMkI4MTkyNzAwQzI2QUE0IC8qIE1lZGlhUGxh
eWVyUHJpdmF0ZUFWRm91bmRhdGlvbk9iakMuaCAqLzsgfTsKIAkJMDdCMDExM0YxMDMyMjQyMjAw
RkJEQzMzIC8qIEFjY2Vzc2liaWxpdHlNZWRpYUNvbnRyb2xzLmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwN0IwMTEzRTEwMzIyNDIyMDBGQkRDMzMgLyog
QWNjZXNzaWJpbGl0eU1lZGlhQ29udHJvbHMuaCAqLzsgfTsKIAkJMDgwNkU1N0ExMjg5MzA0NTAw
N0NFRDMyIC8qIFNWR01hdHJpeC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gMDgwNkU1NzkxMjg5MzA0NTAwN0NFRDMyIC8qIFNWR01hdHJpeC5oICovOyBz
ZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTA4MEU0OTI2MTI1
NUYzQkQwMEVGQ0EyNyAvKiBTVkdUZXh0TGF5b3V0RW5naW5lQmFzZWxpbmUuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDA4MEU0OTIyMTI1NUYzQkQwMEVG
Q0EyNyAvKiBTVkdUZXh0TGF5b3V0RW5naW5lQmFzZWxpbmUuaCAqLzsgfTsKQEAgLTU0OTIsNiAr
NTQ5MCw4IEBACiAJCURENzYzQkIyMDk5MkMyQzkwMDc0MEI4RSAvKiBsaWJ4bWwyLmR5bGliIGlu
IEZyYW1ld29ya3MgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gREQ3NjNCQjEw
OTkyQzJDOTAwNzQwQjhFIC8qIGxpYnhtbDIuZHlsaWIgKi87IH07CiAJCUREN0NERjI1MEEyM0NG
OTgwMDA2OTkyOCAvKiBDU1NVbmtub3duUnVsZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gQTgwRTZDQ0UwQTE5ODlDQTAwN0ZCOEM1IC8qIENTU1Vua25v
d25SdWxlLmggKi87IH07CiAJCURERTYzRUQ1MEI3RDQ1QTgwMDIyNjk5OCAvKiBET01UZXh0RXZl
bnQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDkzM0Ex
NDc1MEI3RDFCQUYwMEE1M0ZGRCAvKiBET01UZXh0RXZlbnQuaCAqLzsgfTsKKwkJREY5QUZENzIx
M0ZDMzFEODAwMTVGRUI3IC8qIE1lZGlhUGxheWVyUHJpdmF0ZUFWRm91bmRhdGlvbk9iakMuaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IERGOUFGRDcwMTNG
QzMxRDgwMDE1RkVCNyAvKiBNZWRpYVBsYXllclByaXZhdGVBVkZvdW5kYXRpb25PYmpDLmggKi87
IH07CisJCURGOUFGRDczMTNGQzMxRDgwMDE1RkVCNyAvKiBNZWRpYVBsYXllclByaXZhdGVBVkZv
dW5kYXRpb25PYmpDLm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gREY5QUZENzExM0ZDMzFEODAwMTVGRUI3IC8qIE1lZGlhUGxheWVyUHJpdmF0ZUFWRm91
bmRhdGlvbk9iakMubW0gKi87IH07CiAJCUUwRkVGMzcyQjE3QzUzRUFDMUMxRkJFRSAvKiBFdmVu
dFNvdXJjZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
RTBGRUYzNzFCMTdDNTNFQUMxQzFGQkVFIC8qIEV2ZW50U291cmNlLmggKi87IH07CiAJCUUwRkVG
MzcyQjI3QzUzRUFDMUMxRkJFRSAvKiBFdmVudFNvdXJjZS5jcHAgaW4gU291cmNlcyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFMEZFRjM3MUIyN0M1M0VBQzFDMUZCRUUgLyog
RXZlbnRTb3VyY2UuY3BwICovOyB9OwogCQlFMEZFRjM3MkIzN0M1M0VBQzFDMUZCRUUgLyogSlNF
dmVudFNvdXJjZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gRTBGRUYzNzFCMzdDNTNFQUMxQzFGQkVFIC8qIEpTRXZlbnRTb3VyY2UuaCAqLzsgfTsKQEAg
LTY1MzEsOCArNjUzMSw2IEBACiAJCTA3MzVFRTY5MEY0MEM1RTQwMDRBMjYwNCAvKiBNZWRpYVBs
YXllclByb3h5LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IE1lZGlhUGxheWVy
UHJveHkuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMDc2RjBEMDkxMkI4MTkyNzAw
QzI2QUE0IC8qIE1lZGlhUGxheWVyUHJpdmF0ZUFWRm91bmRhdGlvbi5jcHAgKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBNZWRpYVBsYXllclByaXZhdGVBVkZvdW5kYXRpb24u
Y3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwNzZGMEQwQTEyQjgxOTI3MDBDMjZB
QTQgLyogTWVkaWFQbGF5ZXJQcml2YXRlQVZGb3VuZGF0aW9uLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgcGF0aCA9IE1lZGlhUGxheWVyUHJpdmF0ZUFWRm91bmRhdGlvbi5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwotCQkwNzZGMEQwQjEyQjgxOTI3MDBDMjZBQTQgLyogTWVkaWFQ
bGF5ZXJQcml2YXRlQVZGb3VuZGF0aW9uT2JqQy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBNZWRpYVBsYXllclByaXZhdGVBVkZvdW5kYXRpb25PYmpDLmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07Ci0JCTA3NkYwRDBDMTJCODE5MjcwMEMyNkFBNCAvKiBNZWRpYVBsYXll
clByaXZhdGVBVkZvdW5kYXRpb25PYmpDLm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2Jq
Y3BwOyBwYXRoID0gTWVkaWFQbGF5ZXJQcml2YXRlQVZGb3VuZGF0aW9uT2JqQy5tbTsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMDc5RjVFNEIwRjNCRUJFQTAwNUUwNzgyIC8qIE1lZGlh
UGxheWVyUHJpdmF0ZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBNZWRpYVBs
YXllclByaXZhdGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMDdBRkU1OTAwRjE0
NDZCRDAwODQxNjE3IC8qIG1lZGlhQ29udHJvbHNRdWlja1RpbWUuY3NzICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4
dC5jc3M7IHBhdGggPSBtZWRpYUNvbnRyb2xzUXVpY2tUaW1lLmNzczsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJMDdCMDExM0UxMDMyMjQyMjAwRkJEQzMzIC8qIEFjY2Vzc2liaWxpdHlN
ZWRpYUNvbnRyb2xzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEFjY2Vzc2li
aWxpdHlNZWRpYUNvbnRyb2xzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0xMjIy
OCw2ICsxMjIyNiw4IEBACiAJCURCMjNDMkNBMEE1MDhEMjkwMDI0ODlFQiAvKiBJbmRlbnRPdXRk
ZW50Q29tbWFuZC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSW5kZW50T3V0
ZGVudENvbW1hbmQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJREQwNUZFMEIwQjhC
QTNDNjAwOUFDREZFIC8qIFdlYkNvcmVPYmpDRXh0cmFzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IHBhdGggPSBXZWJDb3JlT2JqQ0V4dHJhcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQlERDc2M0JCMTA5OTJDMkM5MDA3NDBCOEUgLyogbGlieG1sMi5keWxpYiAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9ICJjb21waWxlZC5tYWNo
LW8uZHlsaWIiOyBuYW1lID0gbGlieG1sMi5keWxpYjsgcGF0aCA9IC91c3IvbGliL2xpYnhtbDIu
ZHlsaWI7IHNvdXJjZVRyZWUgPSAiPGFic29sdXRlPiI7IH07CisJCURGOUFGRDcwMTNGQzMxRDgw
MDE1RkVCNyAvKiBNZWRpYVBsYXllclByaXZhdGVBVkZvdW5kYXRpb25PYmpDLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IE1lZGlhUGxheWVyUHJpdmF0ZUFWRm91bmRhdGlvbk9i
akMuaDsgcGF0aCA9IG9iamMvTWVkaWFQbGF5ZXJQcml2YXRlQVZGb3VuZGF0aW9uT2JqQy5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlERjlBRkQ3MTEzRkMzMUQ4MDAxNUZFQjcgLyog
TWVkaWFQbGF5ZXJQcml2YXRlQVZGb3VuZGF0aW9uT2JqQy5tbSAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuY3BwLm9iamNwcDsgbmFtZSA9IE1lZGlhUGxheWVyUHJpdmF0ZUFWRm91bmRhdGlvbk9iakMu
bW07IHBhdGggPSBvYmpjL01lZGlhUGxheWVyUHJpdmF0ZUFWRm91bmRhdGlvbk9iakMubW07IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUUwRkVGMzcxQjA3QzUzRUFDMUMxRkJFRSAvKiBF
dmVudFNvdXJjZS5pZGwgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0OyBwYXRoID0gRXZlbnRTb3VyY2UuaWRsOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlFMEZFRjM3MUIxN0M1M0VBQzFDMUZCRUUgLyog
RXZlbnRTb3VyY2UuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRXZlbnRTb3Vy
Y2UuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRTBGRUYzNzFCMjdDNTNFQUMxQzFG
QkVFIC8qIEV2ZW50U291cmNlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0
aCA9IEV2ZW50U291cmNlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTEyOTAz
LDEwICsxMjkwMyw5IEBACiAJCTA3NkYwRDA4MTJCODE5MjcwMEMyNkFBNCAvKiBhdmZvdW5kYXRp
b24gKi8gPSB7CiAJCQlpc2EgPSBQQlhHcm91cDsKIAkJCWNoaWxkcmVuID0gKAorCQkJCURGOUFG
RDZGMTNGQzMxQjAwMDE1RkVCNyAvKiBvYmpjICovLAogCQkJCTA3NkYwRDA5MTJCODE5MjcwMEMy
NkFBNCAvKiBNZWRpYVBsYXllclByaXZhdGVBVkZvdW5kYXRpb24uY3BwICovLAogCQkJCTA3NkYw
RDBBMTJCODE5MjcwMEMyNkFBNCAvKiBNZWRpYVBsYXllclByaXZhdGVBVkZvdW5kYXRpb24uaCAq
LywKLQkJCQkwNzZGMEQwQjEyQjgxOTI3MDBDMjZBQTQgLyogTWVkaWFQbGF5ZXJQcml2YXRlQVZG
b3VuZGF0aW9uT2JqQy5oICovLAotCQkJCTA3NkYwRDBDMTJCODE5MjcwMEMyNkFBNCAvKiBNZWRp
YVBsYXllclByaXZhdGVBVkZvdW5kYXRpb25PYmpDLm1tICovLAogCQkJKTsKIAkJCXBhdGggPSBh
dmZvdW5kYXRpb247CiAJCQlzb3VyY2VUcmVlID0gIjxncm91cD4iOwpAQCAtMTkxNzgsNiArMTkx
NzcsMTUgQEAKIAkJCXRhYldpZHRoID0gNDsKIAkJCXVzZXNUYWJzID0gMDsKIAkJfTsKKwkJREY5
QUZENkYxM0ZDMzFCMDAwMTVGRUI3IC8qIG9iamMgKi8gPSB7CisJCQlpc2EgPSBQQlhHcm91cDsK
KwkJCWNoaWxkcmVuID0gKAorCQkJCURGOUFGRDcwMTNGQzMxRDgwMDE1RkVCNyAvKiBNZWRpYVBs
YXllclByaXZhdGVBVkZvdW5kYXRpb25PYmpDLmggKi8sCisJCQkJREY5QUZENzExM0ZDMzFEODAw
MTVGRUI3IC8qIE1lZGlhUGxheWVyUHJpdmF0ZUFWRm91bmRhdGlvbk9iakMubW0gKi8sCisJCQkp
OworCQkJbmFtZSA9IG9iamM7CisJCQlzb3VyY2VUcmVlID0gIjxncm91cD4iOworCQl9OwogCQlF
MUM4QkU0QjBFOEJEMEQxMDA2NENCN0QgLyogVGhyZWFkcyAqLyA9IHsKIAkJCWlzYSA9IFBCWEdy
b3VwOwogCQkJY2hpbGRyZW4gPSAoCkBAIC0yMjM3Myw3ICsyMjM4MSw2IEBACiAJCQkJQThFQTgw
MEUwQTE5NTE2RTAwQThFRjVGIC8qIE1lZGlhTGlzdC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRTQ0
NjEzRTQwQ0Q2ODFBMjAwRkFEQTc1IC8qIE1lZGlhUGxheWVyLmggaW4gSGVhZGVycyAqLywKIAkJ
CQkwNzZGMEQwRTEyQjgxOTI3MDBDMjZBQTQgLyogTWVkaWFQbGF5ZXJQcml2YXRlQVZGb3VuZGF0
aW9uLmggaW4gSGVhZGVycyAqLywKLQkJCQkwNzZGMEQwRjEyQjgxOTI3MDBDMjZBQTQgLyogTWVk
aWFQbGF5ZXJQcml2YXRlQVZGb3VuZGF0aW9uT2JqQy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRTQ0
NjEzRTYwQ0Q2ODFBOTAwRkFEQTc1IC8qIE1lZGlhUGxheWVyUHJpdmF0ZVFUS2l0LmggaW4gSGVh
ZGVycyAqLywKIAkJCQkwNzM1RUU2QTBGNDBDNUU0MDA0QTI2MDQgLyogTWVkaWFQbGF5ZXJQcm94
eS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNEUxOTU5MkEwQTM5REFDQzAwMjIwRkU1IC8qIE1lZGlh
UXVlcnkuaCBpbiBIZWFkZXJzICovLApAQCAtMjMzNzksNiArMjMzODYsNyBAQAogCQkJCUJDQkI4
QUJCMTNGMUFGQjAwMDczNERGMCAvKiBQT0RSZWRCbGFja1RyZWUuaCBpbiBIZWFkZXJzICovLAog
CQkJCUZENkYyNTJEMTNGNUVGMEUwMDY1MTY1RiAvKiBNZWRpYUVsZW1lbnRBdWRpb1NvdXJjZU5v
ZGUuaCBpbiBIZWFkZXJzICovLAogCQkJCUZEMjNBMTI2MTNGNUZBNTkwMEY2NzAwMSAvKiBKU01l
ZGlhRWxlbWVudEF1ZGlvU291cmNlTm9kZS5oIGluIEhlYWRlcnMgKi8sCisJCQkJREY5QUZENzIx
M0ZDMzFEODAwMTVGRUI3IC8qIE1lZGlhUGxheWVyUHJpdmF0ZUFWRm91bmRhdGlvbk9iakMuaCBp
biBIZWFkZXJzICovLAogCQkJKTsKIAkJCXJ1bk9ubHlGb3JEZXBsb3ltZW50UG9zdHByb2Nlc3Np
bmcgPSAwOwogCQl9OwpAQCAtMjUzOTAsNyArMjUzOTgsNiBAQAogCQkJCUE4RUE4MDA5MEExOTUx
NkUwMEE4RUY1RiAvKiBNZWRpYUxpc3QuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJRTQ0NjEzRTMw
Q0Q2ODE5RjAwRkFEQTc1IC8qIE1lZGlhUGxheWVyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTA3
MkM4QjExMTMxQzUxODYwMEE0RkNFOSAvKiBNZWRpYVBsYXllclByaXZhdGVBVkZvdW5kYXRpb24u
Y3BwIGluIFNvdXJjZXMgKi8sCi0JCQkJMDcyQzhCMTIxMzFDNTE4QjAwQTRGQ0U5IC8qIE1lZGlh
UGxheWVyUHJpdmF0ZUFWRm91bmRhdGlvbk9iakMubW0gaW4gU291cmNlcyAqLywKIAkJCQlFNDQ2
MTNFNTBDRDY4MUE2MDBGQURBNzUgLyogTWVkaWFQbGF5ZXJQcml2YXRlUVRLaXQubW0gaW4gU291
cmNlcyAqLywKIAkJCQk0RTE5NTkyOTBBMzlEQUNDMDAyMjBGRTUgLyogTWVkaWFRdWVyeS5jcHAg
aW4gU291cmNlcyAqLywKIAkJCQk0RTE5NTkyQjBBMzlEQUNDMDAyMjBGRTUgLyogTWVkaWFRdWVy
eUV2YWx1YXRvci5jcHAgaW4gU291cmNlcyAqLywKQEAgLTI2MTgyLDYgKzI2MTg5LDcgQEAKIAkJ
CQlGRDZGMjUyQzEzRjVFRjBFMDA2NTE2NUYgLyogTWVkaWFFbGVtZW50QXVkaW9Tb3VyY2VOb2Rl
LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUZEMjNBMTI1MTNGNUZBNTkwMEY2NzAwMSAvKiBKU01l
ZGlhRWxlbWVudEF1ZGlvU291cmNlTm9kZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkxQTE0MTRC
NTEzQTBGMDUwMDAxOTk5NkMgLyogV2ViS2l0Rm9udEZhbWlseU5hbWVzLmNwcCBpbiBTb3VyY2Vz
ICovLAorCQkJCURGOUFGRDczMTNGQzMxRDgwMDE1RkVCNyAvKiBNZWRpYVBsYXllclByaXZhdGVB
VkZvdW5kYXRpb25PYmpDLm1tIGluIFNvdXJjZXMgKi8sCiAJCQkpOwogCQkJcnVuT25seUZvckRl
cGxveW1lbnRQb3N0cHJvY2Vzc2luZyA9IDA7CiAJCX07CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9hdmZvdW5kYXRpb24vTWVkaWFQbGF5ZXJQcml2YXRlQVZGb3VuZGF0
aW9uQ0YuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2F2Zm91bmRhdGlvbi9NZWRpYVBsYXllclByaXZhdGVBVkZvdW5kYXRpb25DRi5jcHAJKHJldmlz
aW9uIDkzMjE1KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYXZmb3VuZGF0
aW9uL01lZGlhUGxheWVyUHJpdmF0ZUFWRm91bmRhdGlvbkNGLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMSwxMjgyICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTEgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBh
cmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
VEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVN
UExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLiAKLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0KLSNpZiBQ
TEFURk9STShXSU4pJiYgRU5BQkxFKFZJREVPKSAKLQotI2lmIFVTRShBVkZPVU5EQVRJT04pCi0K
LSNpbmNsdWRlICJNZWRpYVBsYXllclByaXZhdGVBVkZvdW5kYXRpb25DRi5oIgotCi0jaW5jbHVk
ZSAiQXBwbGljYXRpb25DYWNoZVJlc291cmNlLmgiCi0jaW5jbHVkZSAiRmxvYXRDb252ZXJzaW9u
LmgiCi0jaW5jbHVkZSAiRnJhbWVWaWV3LmgiCi0jaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0Lmgi
Ci0jaW5jbHVkZSAiS1VSTC5oIgotI2luY2x1ZGUgIkxvZ2dpbmcuaCIKLSNpbmNsdWRlICJQbGF0
Zm9ybUNBTGF5ZXIuaCIKLSNpbmNsdWRlICJTb2Z0TGlua2luZy5oIgotI2luY2x1ZGUgIlRpbWVS
YW5nZXMuaCIKLQotI2luY2x1ZGUgPEFWRm91bmRhdGlvbkNGL0FWQ0ZQbGF5ZXJMYXllci5oPgot
I2luY2x1ZGUgPEFWRm91bmRhdGlvbkNGL0FWRm91bmRhdGlvbkNGLmg+Ci0jaW5jbHVkZSA8Q29y
ZU1lZGlhL0NvcmVNZWRpYS5oPgotCi0jaW5jbHVkZSA8ZGVsYXlpbXAuaD4KLSNpbmNsdWRlIDxk
aXNwYXRjaC9kaXNwYXRjaC5oPgotI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+Ci0jaW5jbHVkZSA8
d3RmL1RocmVhZGluZy5oPgotI2luY2x1ZGUgPHd0Zi9VbnVzZWRQYXJhbS5oPgotCi0jaWZkZWYg
REVCVUdfQUxMCi0vLyBGSVhNRTogQVZGb3VuZGF0aW9uQ0YgZG9lc24ndCBjdXJyZW50bHkgZGVs
aXZlciBhIGRlYnVnIHZlcnNpb24uCi0jcHJhZ21hIGNvbW1lbnQobGliLCAiQVZGb3VuZGF0aW9u
Q0YubGliIikKLSNwcmFnbWEgY29tbWVudChsaWIsICJDb3JlTWVkaWFfZGVidWcubGliIikKLSNw
cmFnbWEgY29tbWVudChsaWIsICJsaWJkaXNwYXRjaF9kZWJ1Zy5saWIiKQotCi0vLyBVc2UgdGhl
IHNvZnQgbGluayBtYWNyb3Mgc28gd2UgY2FuIGVhc2lseSB0ZXN0IGZvciB0aGUgZXhpc3RlbmNl
IG9mIHRoZSBkbGxzLgotLy8gRklYTUU6IEFWRm91bmRhdGlvbkNGIGRvZXNuJ3QgY3VycmVudGx5
IGRlbGl2ZXIgYSBkZWJ1ZyB2ZXJzaW9uLgotU09GVF9MSU5LX0xJQlJBUlkoQVZGb3VuZGF0aW9u
Q0YpCi1TT0ZUX0xJTktfREVCVUdfTElCUkFSWShDb3JlTWVkaWEpCi1TT0ZUX0xJTktfREVCVUdf
TElCUkFSWShsaWJkaXNwYXRjaCkKLSNlbHNlCi0jcHJhZ21hIGNvbW1lbnQobGliLCAiQVZGb3Vu
ZGF0aW9uQ0YubGliIikKLSNwcmFnbWEgY29tbWVudChsaWIsICJDb3JlTWVkaWEubGliIikKLSNw
cmFnbWEgY29tbWVudChsaWIsICJsaWJkaXNwYXRjaC5saWIiKQotCi0vLyBVc2UgdGhlIHNvZnQg
bGluayBtYWNyb3Mgc28gd2UgY2FuIGVhc2lseSB0ZXN0IGZvciB0aGUgZXhpc3RlbmNlIG9mIHRo
ZSBkbGxzLgotU09GVF9MSU5LX0xJQlJBUlkoQVZGb3VuZGF0aW9uQ0YpCi1TT0ZUX0xJTktfTElC
UkFSWShDb3JlTWVkaWEpCi1TT0ZUX0xJTktfTElCUkFSWShsaWJkaXNwYXRjaCkKLSNlbmRpZiAv
LyBERUJVR19BTEwKLQotdXNpbmcgbmFtZXNwYWNlIHN0ZDsKLQotbmFtZXNwYWNlIFdlYkNvcmUg
ewotCi1jbGFzcyBMYXllckNsaWVudDsKLQotY2xhc3MgQVZGV3JhcHBlciB7Ci1wdWJsaWM6Ci0g
ICAgQVZGV3JhcHBlcihNZWRpYVBsYXllclByaXZhdGVBVkZvdW5kYXRpb25DRiopOwotICAgIH5B
VkZXcmFwcGVyKCk7Ci0KLSAgICB2b2lkIHNjaGVkdWxlRGlzY29ubmVjdEFuZERlbGV0ZSgpOwot
Ci0gICAgdm9pZCBjcmVhdGVBVkNGVmlkZW9MYXllcigpOwotICAgIHZvaWQgZGVzdHJveVZpZGVv
TGF5ZXIoKTsKLSAgICBQbGF0Zm9ybUxheWVyKiBwbGF0Zm9ybUxheWVyKCk7Ci0KLSAgICBDQUNG
TGF5ZXJSZWYgY2FWaWRlb0xheWVyKCkgeyByZXR1cm4gbV9jYVZpZGVvTGF5ZXIuZ2V0KCk7IH0K
LSAgICBQbGF0Zm9ybUxheWVyKiB2aWRlb0xheWVyV3JhcHBlcigpIHsgcmV0dXJuIG1fdmlkZW9M
YXllcldyYXBwZXIgPyBtX3ZpZGVvTGF5ZXJXcmFwcGVyLT5wbGF0Zm9ybUxheWVyKCkgOiAwOyB9
OwotICAgIHZvaWQgc2V0VmlkZW9MYXllck5lZWRzQ29tbWl0KCk7Ci0gICAgdm9pZCBzZXRWaWRl
b0xheWVySGlkZGVuKGJvb2wpOwotCi0gICAgdm9pZCBjcmVhdGVJbWFnZUdlbmVyYXRvcigpOwot
ICAgIHZvaWQgZGVzdHJveUltYWdlR2VuZXJhdG9yKCk7Ci0gICAgUmV0YWluUHRyPENHSW1hZ2VS
ZWY+IGNyZWF0ZUltYWdlRm9yVGltZUluUmVjdChmbG9hdCwgY29uc3QgSW50UmVjdCYpOwotCi0g
ICAgdm9pZCBjcmVhdGVBc3NldEZvclVSTChjb25zdCBTdHJpbmcmIHVybCk7Ci0gICAgdm9pZCBz
ZXRBc3NldChBVkNGVVJMQXNzZXRSZWYpOwotICAgIAotICAgIHZvaWQgY3JlYXRlUGxheWVyKCk7
Ci0gICAgdm9pZCBjcmVhdGVQbGF5ZXJJdGVtKCk7Ci0gICAgCi0gICAgdm9pZCBjaGVja1BsYXlh
YmlsaXR5KCk7Ci0gICAgdm9pZCBiZWdpbkxvYWRpbmdNZXRhZGF0YSgpOwotICAgIAotICAgIHZv
aWQgc2Vla1RvVGltZShmbG9hdCk7Ci0KLSAgICBzdGF0aWMgdm9pZCBsb2FkTWV0YWRhdGFDb21w
bGV0aW9uQ2FsbGJhY2soQVZDRkFzc2V0UmVmLCB2b2lkKik7Ci0gICAgc3RhdGljIHZvaWQgbG9h
ZFBsYXlhYmxlQ29tcGxldGlvbkNhbGxiYWNrKEFWQ0ZBc3NldFJlZiwgdm9pZCopOwotICAgIHN0
YXRpYyB2b2lkIHBlcmlvZGljVGltZU9ic2VydmVyQ2FsbGJhY2soQVZDRlBsYXllclJlZiwgQ01U
aW1lLCB2b2lkKik7Ci0gICAgc3RhdGljIHZvaWQgc2Vla0NvbXBsZXRlZENhbGxiYWNrKEFWQ0ZQ
bGF5ZXJJdGVtUmVmLCBCb29sZWFuLCB2b2lkKik7Ci0gICAgc3RhdGljIHZvaWQgbm90aWZpY2F0
aW9uQ2FsbGJhY2soQ0ZOb3RpZmljYXRpb25DZW50ZXJSZWYsIHZvaWQqLCBDRlN0cmluZ1JlZiwg
Y29uc3Qgdm9pZCosIENGRGljdGlvbmFyeVJlZik7Ci0KLSAgICBpbmxpbmUgQVZDRlBsYXllckxh
eWVyUmVmIHZpZGVvTGF5ZXIoKSBjb25zdCB7IHJldHVybiAoQVZDRlBsYXllckxheWVyUmVmKW1f
YXZDRlZpZGVvTGF5ZXIuZ2V0KCk7IH0KLSAgICBpbmxpbmUgQVZDRlBsYXllclJlZiBhdlBsYXll
cigpIGNvbnN0IHsgcmV0dXJuIChBVkNGUGxheWVyUmVmKW1fYXZQbGF5ZXIuZ2V0KCk7IH0KLSAg
ICBpbmxpbmUgQVZDRlVSTEFzc2V0UmVmIGF2QXNzZXQoKSBjb25zdCB7IHJldHVybiAoQVZDRlVS
TEFzc2V0UmVmKW1fYXZBc3NldC5nZXQoKTsgfQotICAgIGlubGluZSBBVkNGUGxheWVySXRlbVJl
ZiBhdlBsYXllckl0ZW0oKSBjb25zdCB7IHJldHVybiAoQVZDRlBsYXllckl0ZW1SZWYpbV9hdlBs
YXllckl0ZW0uZ2V0KCk7IH0KLSAgICBpbmxpbmUgQVZDRlBsYXllck9ic2VydmVyUmVmIHRpbWVP
YnNlcnZlcigpIGNvbnN0IHsgcmV0dXJuIChBVkNGUGxheWVyT2JzZXJ2ZXJSZWYpbV90aW1lT2Jz
ZXJ2ZXIuZ2V0KCk7IH0KLSAgICBpbmxpbmUgQVZDRkFzc2V0SW1hZ2VHZW5lcmF0b3JSZWYgaW1h
Z2VHZW5lcmF0b3IoKSBjb25zdCB7IHJldHVybiBtX2ltYWdlR2VuZXJhdG9yLmdldCgpOyB9Ci0g
ICAgaW5saW5lIGRpc3BhdGNoX3F1ZXVlX3QgZGlzcGF0Y2hRdWV1ZSgpIGNvbnN0IHsgcmV0dXJu
IG1fbm90aWZpY2F0aW9uUXVldWU7IH0KLQotcHJpdmF0ZToKLSAgICBpbmxpbmUgdm9pZCogY2Fs
bGJhY2tDb250ZXh0KCkgY29uc3QgeyByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDx2b2lkKj4obV9v
YmplY3RJRCk7IH0KLQotICAgIHN0YXRpYyBNdXRleCYgbWFwTG9jaygpOwotICAgIHN0YXRpYyBI
YXNoTWFwPHVpbnRwdHJfdCwgQVZGV3JhcHBlcio+JiBtYXAoKTsKLSAgICBzdGF0aWMgQVZGV3Jh
cHBlciogYXZmV3JhcHBlckZvckNhbGxiYWNrQ29udGV4dCh2b2lkKik7Ci0gICAgdm9pZCBhZGRU
b01hcCgpOwotICAgIHZvaWQgcmVtb3ZlRnJvbU1hcCgpIGNvbnN0OwotCi0gICAgc3RhdGljIHZv
aWQgZGlzY29ubmVjdEFuZERlbGV0ZUFWRldyYXBwZXIodm9pZCopOwotCi0gICAgc3RhdGljIHVp
bnRwdHJfdCBzX25leHRBVkZXcmFwcGVyT2JqZWN0SUQ7Ci0gICAgdWludHB0cl90IG1fb2JqZWN0
SUQ7Ci0KLSAgICBNZWRpYVBsYXllclByaXZhdGVBVkZvdW5kYXRpb25DRiogbV9vd25lcjsKLQot
ICAgIFJldGFpblB0cjxBVkNGUGxheWVyUmVmPiBtX2F2UGxheWVyOwotICAgIFJldGFpblB0cjxB
VkNGVVJMQXNzZXRSZWY+IG1fYXZBc3NldDsKLSAgICBSZXRhaW5QdHI8QVZDRlBsYXllckl0ZW1S
ZWY+IG1fYXZQbGF5ZXJJdGVtOwotICAgIFJldGFpblB0cjxBVkNGUGxheWVyTGF5ZXJSZWY+IG1f
YXZDRlZpZGVvTGF5ZXI7Ci0gICAgUmV0YWluUHRyPEFWQ0ZQbGF5ZXJPYnNlcnZlclJlZj4gbV90
aW1lT2JzZXJ2ZXI7Ci0gICAgUmV0YWluUHRyPEFWQ0ZBc3NldEltYWdlR2VuZXJhdG9yUmVmPiBt
X2ltYWdlR2VuZXJhdG9yOwotICAgIGRpc3BhdGNoX3F1ZXVlX3QgbV9ub3RpZmljYXRpb25RdWV1
ZTsKLQotICAgIG11dGFibGUgUmV0YWluUHRyPENBQ0ZMYXllclJlZj4gbV9jYVZpZGVvTGF5ZXI7
Ci0gICAgUmVmUHRyPFBsYXRmb3JtQ0FMYXllcj4gbV92aWRlb0xheWVyV3JhcHBlcjsKLQotICAg
IE93blB0cjxMYXllckNsaWVudD4gbV9sYXllckNsaWVudDsKLX07Ci0KLXVpbnRwdHJfdCBBVkZX
cmFwcGVyOjpzX25leHRBVkZXcmFwcGVyT2JqZWN0SUQ7Ci0KLWNsYXNzIExheWVyQ2xpZW50IDog
cHVibGljIFBsYXRmb3JtQ0FMYXllckNsaWVudCB7Ci1wdWJsaWM6Ci0gICAgTGF5ZXJDbGllbnQo
QVZGV3JhcHBlciogcGFyZW50KSA6IG1fcGFyZW50KHBhcmVudCkgeyB9Ci0gICAgdmlydHVhbCB+
TGF5ZXJDbGllbnQoKSB7IG1fcGFyZW50ID0gMDsgfQotCi1wcml2YXRlOgotICAgIHZpcnR1YWwg
dm9pZCBwbGF0Zm9ybUNBTGF5ZXJMYXlvdXRTdWJsYXllcnNPZkxheWVyKFBsYXRmb3JtQ0FMYXll
ciopOwotICAgIHZpcnR1YWwgYm9vbCBwbGF0Zm9ybUNBTGF5ZXJSZXNwb25kc1RvTGF5b3V0Q2hh
bmdlcygpIGNvbnN0IHsgcmV0dXJuIHRydWU7IH0KLQotICAgIHZpcnR1YWwgdm9pZCBwbGF0Zm9y
bUNBTGF5ZXJBbmltYXRpb25TdGFydGVkKENGVGltZUludGVydmFsIGJlZ2luVGltZSkgeyB9Ci0g
ICAgdmlydHVhbCBHcmFwaGljc0xheWVyOjpDb21wb3NpdGluZ0Nvb3JkaW5hdGVzT3JpZW50YXRp
b24gcGxhdGZvcm1DQUxheWVyQ29udGVudHNPcmllbnRhdGlvbigpIGNvbnN0IHsgcmV0dXJuIEdy
YXBoaWNzTGF5ZXI6OkNvbXBvc2l0aW5nQ29vcmRpbmF0ZXNCb3R0b21VcDsgfQotICAgIHZpcnR1
YWwgdm9pZCBwbGF0Zm9ybUNBTGF5ZXJQYWludENvbnRlbnRzKEdyYXBoaWNzQ29udGV4dCYsIGNv
bnN0IEludFJlY3QmIGluQ2xpcCkgeyB9Ci0gICAgdmlydHVhbCBib29sIHBsYXRmb3JtQ0FMYXll
clNob3dEZWJ1Z0JvcmRlcnMoKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQotICAgIHZpcnR1YWwg
Ym9vbCBwbGF0Zm9ybUNBTGF5ZXJTaG93UmVwYWludENvdW50ZXIoKSBjb25zdCB7IHJldHVybiBm
YWxzZTsgfQotICAgIHZpcnR1YWwgaW50IHBsYXRmb3JtQ0FMYXllckluY3JlbWVudFJlcGFpbnRD
b3VudCgpIHsgcmV0dXJuIDA7IH0KLQotICAgIHZpcnR1YWwgYm9vbCBwbGF0Zm9ybUNBTGF5ZXJD
b250ZW50c09wYXF1ZSgpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9Ci0gICAgdmlydHVhbCBib29s
IHBsYXRmb3JtQ0FMYXllckRyYXdzQ29udGVudCgpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9Ci0g
ICAgdmlydHVhbCB2b2lkIHBsYXRmb3JtQ0FMYXllckxheWVyRGlkRGlzcGxheShQbGF0Zm9ybUxh
eWVyKikgeyB9Ci0KLSAgICBBVkZXcmFwcGVyKiBtX3BhcmVudDsKLX07Ci0KLSNpZiAhTE9HX0RJ
U0FCTEVECi1zdGF0aWMgY29uc3QgY2hhciogYm9vbFN0cmluZyhib29sIHZhbCkKLXsKLSAgICBy
ZXR1cm4gdmFsID8gInRydWUiIDogImZhbHNlIjsKLX0KLSNlbmRpZgotCi1zdGF0aWMgQ0ZBcnJh
eVJlZiBjcmVhdGVNZXRhZGF0YUtleU5hbWVzKCkKLXsKLSAgICBzdGF0aWMgY29uc3QgQ0ZTdHJp
bmdSZWYga2V5TmFtZXNbXSA9IHsKLSAgICAgICAgQVZDRkFzc2V0UHJvcGVydHlEdXJhdGlvbiwK
LSAgICAgICAgQVZDRkFzc2V0UHJvcGVydHlOYXR1cmFsU2l6ZSwKLSAgICAgICAgQVZDRkFzc2V0
UHJvcGVydHlQcmVmZXJyZWRUcmFuc2Zvcm0sCi0gICAgICAgIEFWQ0ZBc3NldFByb3BlcnR5UHJl
ZmVycmVkUmF0ZSwKLSAgICAgICAgQVZDRkFzc2V0UHJvcGVydHlQbGF5YWJsZSwKLSAgICAgICAg
QVZDRkFzc2V0UHJvcGVydHlUcmFja3MgCi0gICAgfTsKLSAgICAKLSAgICByZXR1cm4gQ0ZBcnJh
eUNyZWF0ZSgwLCAoY29uc3Qgdm9pZCoqKWtleU5hbWVzLCBzaXplb2Yoa2V5TmFtZXMpIC8gc2l6
ZW9mKGtleU5hbWVzWzBdKSwgJmtDRlR5cGVBcnJheUNhbGxCYWNrcyk7Ci19Ci0KLXN0YXRpYyBD
RkFycmF5UmVmIG1ldGFkYXRhS2V5TmFtZXMoKQotewotICAgIHN0YXRpYyBDRkFycmF5UmVmIGtl
eXMgPSBjcmVhdGVNZXRhZGF0YUtleU5hbWVzKCk7Ci0gICAgcmV0dXJuIGtleXM7Ci19Ci0KLS8v
IEZJWE1FOiBJdCB3b3VsZCBiZSBiZXR0ZXIgaWYgQVZDRlRpbWVkTWV0YWRhdGFHcm91cC5oIGV4
cG9ydGVkIHRoaXMga2V5Lgotc3RhdGljIENGU3RyaW5nUmVmIENNVGltZVJhbmdlU3RhcnRLZXko
KQotewotICAgIERFRklORV9TVEFUSUNfTE9DQUwoQ0ZTdHJpbmdSZWYsIGtleSwgKENGU1RSKCJz
dGFydCIpKSk7Ci0gICAgcmV0dXJuIGtleTsKLX0KLQotLy8gRklYTUU6IEl0IHdvdWxkIGJlIGJl
dHRlciBpZiBBVkNGVGltZWRNZXRhZGF0YUdyb3VwLmggZXhwb3J0ZWQgdGhpcyBrZXkuCi1zdGF0
aWMgQ0ZTdHJpbmdSZWYgQ01UaW1lUmFuZ2VEdXJhdGlvbktleSgpCi17Ci0gICAgREVGSU5FX1NU
QVRJQ19MT0NBTChDRlN0cmluZ1JlZiwga2V5LCAoQ0ZTVFIoImR1cmF0aW9uIikpKTsKLSAgICBy
ZXR1cm4ga2V5OwotfQotCi0vLyBGSVhNRTogSXQgd291bGQgYmUgYmV0dGVyIGlmIEFWQ0YgZXhw
b3J0ZWQgdGhpcyBub3RpZmljYXRpb24gbmFtZS4KLXN0YXRpYyBDRlN0cmluZ1JlZiBDQUNGQ29u
dGV4dE5lZWRzRmx1c2hOb3RpZmljYXRpb24oKQotewotICAgIERFRklORV9TVEFUSUNfTE9DQUwo
Q0ZTdHJpbmdSZWYsIG5hbWUsIChDRlNUUigia0NBQ0ZDb250ZXh0TmVlZHNGbHVzaE5vdGlmaWNh
dGlvbiIpKSk7Ci0gICAgcmV0dXJuIG5hbWU7Ci19Ci0KLS8vIERlZmluZSBBVkNGIG9iamVjdCBh
Y2Nlc3NvcnMgYXMgaW5saW5lIGZ1bmN0aW9ucyBoZXJlIGluc3RlYWQgb2YgaW4gTWVkaWFQbGF5
ZXJQcml2YXRlQVZGb3VuZGF0aW9uQ0Ygc28gd2UgZG9uJ3QgaGF2ZQotLy8gdG8gaW5jbHVkZSB0
aGUgQVZDRiBoZWFkZXJzIGluIE1lZGlhUGxheWVyUHJpdmF0ZUFWRm91bmRhdGlvbkNGLmgKLWlu
bGluZSBBVkNGUGxheWVyTGF5ZXJSZWYgdmlkZW9MYXllcihBVkZXcmFwcGVyKiB3cmFwcGVyKQot
eyAKLSAgICByZXR1cm4gd3JhcHBlciA/IHdyYXBwZXItPnZpZGVvTGF5ZXIoKSA6IDA7IAotfQot
Ci1pbmxpbmUgQVZDRlBsYXllclJlZiBhdlBsYXllcihBVkZXcmFwcGVyKiB3cmFwcGVyKQoteyAK
LSAgICByZXR1cm4gd3JhcHBlciA/IHdyYXBwZXItPmF2UGxheWVyKCkgOiAwOyAKLX0KLQotaW5s
aW5lIEFWQ0ZVUkxBc3NldFJlZiBhdkFzc2V0KEFWRldyYXBwZXIqIHdyYXBwZXIpCi17IAotICAg
IHJldHVybiB3cmFwcGVyID8gd3JhcHBlci0+YXZBc3NldCgpIDogMDsgCi19Ci0KLWlubGluZSBB
VkNGUGxheWVySXRlbVJlZiBhdlBsYXllckl0ZW0oQVZGV3JhcHBlciogd3JhcHBlcikKLXsgCi0g
ICAgcmV0dXJuIHdyYXBwZXIgPyB3cmFwcGVyLT5hdlBsYXllckl0ZW0oKSA6IDA7IAotfQotCi1p
bmxpbmUgQVZDRkFzc2V0SW1hZ2VHZW5lcmF0b3JSZWYgaW1hZ2VHZW5lcmF0b3IoQVZGV3JhcHBl
ciogd3JhcHBlcikKLXsgCi0gICAgcmV0dXJuIHdyYXBwZXIgPyB3cmFwcGVyLT5pbWFnZUdlbmVy
YXRvcigpIDogMDsgCi19Ci0KLVBhc3NPd25QdHI8TWVkaWFQbGF5ZXJQcml2YXRlSW50ZXJmYWNl
PiBNZWRpYVBsYXllclByaXZhdGVBVkZvdW5kYXRpb25DRjo6Y3JlYXRlKE1lZGlhUGxheWVyKiBw
bGF5ZXIpIAoteyAKLSAgICByZXR1cm4gYWRvcHRQdHIobmV3IE1lZGlhUGxheWVyUHJpdmF0ZUFW
Rm91bmRhdGlvbkNGKHBsYXllcikpOwotfQotCi12b2lkIE1lZGlhUGxheWVyUHJpdmF0ZUFWRm91
bmRhdGlvbkNGOjpyZWdpc3Rlck1lZGlhRW5naW5lKE1lZGlhRW5naW5lUmVnaXN0cmFyIHJlZ2lz
dHJhcikKLXsKLSAgICBpZiAoaXNBdmFpbGFibGUoKSkKLSAgICAgICAgcmVnaXN0cmFyKGNyZWF0
ZSwgZ2V0U3VwcG9ydGVkVHlwZXMsIHN1cHBvcnRzVHlwZSwgMCwgMCwgMCk7Ci19Ci0KLU1lZGlh
UGxheWVyUHJpdmF0ZUFWRm91bmRhdGlvbkNGOjpNZWRpYVBsYXllclByaXZhdGVBVkZvdW5kYXRp
b25DRihNZWRpYVBsYXllciogcGxheWVyKQotICAgIDogTWVkaWFQbGF5ZXJQcml2YXRlQVZGb3Vu
ZGF0aW9uKHBsYXllcikKLSAgICAsIG1fYXZmV3JhcHBlcigwKQotICAgICwgbV92aWRlb0ZyYW1l
SGFzRHJhd24oZmFsc2UpCi17Ci0gICAgTE9HKE1lZGlhLCAiTWVkaWFQbGF5ZXJQcml2YXRlQVZG
b3VuZGF0aW9uQ0Y6Ok1lZGlhUGxheWVyUHJpdmF0ZUFWRm91bmRhdGlvbkNGKCVwKSIsIHRoaXMp
OwotfQotCi1NZWRpYVBsYXllclByaXZhdGVBVkZvdW5kYXRpb25DRjo6fk1lZGlhUGxheWVyUHJp
dmF0ZUFWRm91bmRhdGlvbkNGKCkKLXsKLSAgICBMT0coTWVkaWEsICJNZWRpYVBsYXllclByaXZh
dGVBVkZvdW5kYXRpb25DRjo6fk1lZGlhUGxheWVyUHJpdmF0ZUFWRm91bmRhdGlvbkNGKCVwKSIs
IHRoaXMpOwotICAgIGNhbmNlbExvYWQoKTsKLX0KLQotdm9pZCBNZWRpYVBsYXllclByaXZhdGVB
VkZvdW5kYXRpb25DRjo6Y2FuY2VsTG9hZCgpCi17Ci0gICAgTE9HKE1lZGlhLCAiTWVkaWFQbGF5
ZXJQcml2YXRlQVZGb3VuZGF0aW9uQ0Y6OmNhbmNlbExvYWQoJXApIiwgdGhpcyk7Ci0KLSAgICAv
LyBEbyBub3RoaW5nIHdoZW4gb3VyIGNhbmNlbGxhdGlvbiBvZiBwZW5kaW5nIGxvYWRpbmcgY2Fs
bHMgaXRzIGNvbXBsZXRpb24gaGFuZGxlcgotICAgIHNldERlbGF5Q2FsbGJhY2tzKHRydWUpOwot
ICAgIHNldElnbm9yZUxvYWRTdGF0ZUNoYW5nZXModHJ1ZSk7Ci0KLSAgICB0ZWFyRG93blZpZGVv
UmVuZGVyaW5nKCk7Ci0KLSAgICBpZiAobV9hdmZXcmFwcGVyKSB7Ci0gICAgICAgIC8vIFRoZSBB
VkNGIG9iamVjdHMgaGF2ZSB0byBiZSBkZXN0cm95ZWQgb24gdGhlIHNhbWUgZGlzcGF0Y2ggcXVl
dWUgdXNlZCBmb3Igbm90aWZpY2F0aW9ucywgc28gc2NoZWR1bGUgYSBjYWxsIHRvIAotICAgICAg
ICAvLyBkaXNjb25uZWN0QW5kRGVsZXRlQVZGV3JhcHBlciBvbiB0aGF0IHF1ZXVlLiAKLSAgICAg
ICAgbV9hdmZXcmFwcGVyLT5zY2hlZHVsZURpc2Nvbm5lY3RBbmREZWxldGUoKTsKLSAgICAgICAg
bV9hdmZXcmFwcGVyID0gMDsKLSAgICB9Ci0KLSAgICBzZXRJZ25vcmVMb2FkU3RhdGVDaGFuZ2Vz
KGZhbHNlKTsKLSAgICBzZXREZWxheUNhbGxiYWNrcyhmYWxzZSk7Ci19Ci0KLWJvb2wgTWVkaWFQ
bGF5ZXJQcml2YXRlQVZGb3VuZGF0aW9uQ0Y6Omhhc0xheWVyUmVuZGVyZXIoKSBjb25zdAotewot
ICAgIHJldHVybiB2aWRlb0xheWVyKG1fYXZmV3JhcHBlcik7Ci19Ci0KLWJvb2wgTWVkaWFQbGF5
ZXJQcml2YXRlQVZGb3VuZGF0aW9uQ0Y6Omhhc0NvbnRleHRSZW5kZXJlcigpIGNvbnN0Ci17Ci0g
ICAgcmV0dXJuIGltYWdlR2VuZXJhdG9yKG1fYXZmV3JhcHBlcik7Ci19Ci0KLXZvaWQgTWVkaWFQ
bGF5ZXJQcml2YXRlQVZGb3VuZGF0aW9uQ0Y6OmNyZWF0ZUNvbnRleHRWaWRlb1JlbmRlcmVyKCkK
LXsKLSAgICBMT0coTWVkaWEsICJNZWRpYVBsYXllclByaXZhdGVBVkZvdW5kYXRpb25DRjo6Y3Jl
YXRlQ29udGV4dFZpZGVvUmVuZGVyZXIoJXApIiwgdGhpcyk7Ci0KLSAgICBpZiAoaW1hZ2VHZW5l
cmF0b3IobV9hdmZXcmFwcGVyKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYgKG1fYXZmV3Jh
cHBlcikKLSAgICAgICAgbV9hdmZXcmFwcGVyLT5jcmVhdGVJbWFnZUdlbmVyYXRvcigpOwotfQot
Ci12b2lkIE1lZGlhUGxheWVyUHJpdmF0ZUFWRm91bmRhdGlvbkNGOjpkZXN0cm95Q29udGV4dFZp
ZGVvUmVuZGVyZXIoKQotewotICAgIGlmIChtX2F2ZldyYXBwZXIpCi0gICAgICAgIG1fYXZmV3Jh
cHBlci0+ZGVzdHJveUltYWdlR2VuZXJhdG9yKCk7Ci19Ci0KLXZvaWQgTWVkaWFQbGF5ZXJQcml2
YXRlQVZGb3VuZGF0aW9uQ0Y6OmNyZWF0ZVZpZGVvTGF5ZXIoKQotewotICAgIEFTU0VSVChzdXBw
b3J0c0FjY2VsZXJhdGVkUmVuZGVyaW5nKCkpOwotCi0gICAgaWYgKG1fYXZmV3JhcHBlcikKLSAg
ICAgICAgbV9hdmZXcmFwcGVyLT5jcmVhdGVBVkNGVmlkZW9MYXllcigpOwotfQotCi12b2lkIE1l
ZGlhUGxheWVyUHJpdmF0ZUFWRm91bmRhdGlvbkNGOjpkZXN0cm95VmlkZW9MYXllcigpCi17Ci0g
ICAgTE9HKE1lZGlhLCAiTWVkaWFQbGF5ZXJQcml2YXRlQVZGb3VuZGF0aW9uQ0Y6OmRlc3Ryb3lW
aWRlb0xheWVyKCVwKSAtIGRlc3Ryb3lpbmcgJXAiLCB0aGlzLCB2aWRlb0xheWVyKG1fYXZmV3Jh
cHBlcikpOwotICAgIGlmIChtX2F2ZldyYXBwZXIpCi0gICAgICAgIG1fYXZmV3JhcHBlci0+ZGVz
dHJveVZpZGVvTGF5ZXIoKTsKLX0KLQotYm9vbCBNZWRpYVBsYXllclByaXZhdGVBVkZvdW5kYXRp
b25DRjo6aGFzQXZhaWxhYmxlVmlkZW9GcmFtZSgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIChtX3Zp
ZGVvRnJhbWVIYXNEcmF3biB8fCAodmlkZW9MYXllcihtX2F2ZldyYXBwZXIpICYmIEFWQ0ZQbGF5
ZXJMYXllcklzUmVhZHlGb3JEaXNwbGF5KHZpZGVvTGF5ZXIobV9hdmZXcmFwcGVyKSkpKTsKLX0K
LQotdm9pZCBNZWRpYVBsYXllclByaXZhdGVBVkZvdW5kYXRpb25DRjo6Y3JlYXRlQVZQbGF5ZXIo
KQotewotICAgIEFTU0VSVChtX2F2ZldyYXBwZXIpOwotICAgIAotICAgIHNldERlbGF5Q2FsbGJh
Y2tzKHRydWUpOwotICAgIG1fYXZmV3JhcHBlci0+Y3JlYXRlUGxheWVyKCk7Ci0gICAgc2V0RGVs
YXlDYWxsYmFja3MoZmFsc2UpOwotfQotCi12b2lkIE1lZGlhUGxheWVyUHJpdmF0ZUFWRm91bmRh
dGlvbkNGOjpjcmVhdGVBVlBsYXllckl0ZW0oKQotewotICAgIEFTU0VSVChtX2F2ZldyYXBwZXIp
OwotICAgIAotICAgIHNldERlbGF5Q2FsbGJhY2tzKHRydWUpOwotICAgIG1fYXZmV3JhcHBlci0+
Y3JlYXRlUGxheWVySXRlbSgpOwotICAgIHNldERlbGF5Q2FsbGJhY2tzKGZhbHNlKTsKLX0KLQot
dm9pZCBNZWRpYVBsYXllclByaXZhdGVBVkZvdW5kYXRpb25DRjo6Y3JlYXRlQVZBc3NldEZvclVS
TChjb25zdCBTdHJpbmcmIHVybCkKLXsKLSAgICBBU1NFUlQoIW1fYXZmV3JhcHBlcik7Ci0gICAg
Ci0gICAgc2V0RGVsYXlDYWxsYmFja3ModHJ1ZSk7Ci0gICAgbV9hdmZXcmFwcGVyID0gbmV3IEFW
RldyYXBwZXIodGhpcyk7Ci0gICAgbV9hdmZXcmFwcGVyLT5jcmVhdGVBc3NldEZvclVSTCh1cmwp
OwotICAgIHNldERlbGF5Q2FsbGJhY2tzKGZhbHNlKTsKLX0KLQotdm9pZCBNZWRpYVBsYXllclBy
aXZhdGVBVkZvdW5kYXRpb25DRjo6Y2hlY2tQbGF5YWJpbGl0eSgpCi17Ci0gICAgQVNTRVJUKG1f
YXZmV3JhcHBlcik7Ci0gICAgbV9hdmZXcmFwcGVyLT5jaGVja1BsYXlhYmlsaXR5KCk7Ci19Ci0K
LXZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlQVZGb3VuZGF0aW9uQ0Y6OmJlZ2luTG9hZGluZ01ldGFk
YXRhKCkKLXsKLSAgICBBU1NFUlQobV9hdmZXcmFwcGVyKTsKLSAgICBtX2F2ZldyYXBwZXItPmJl
Z2luTG9hZGluZ01ldGFkYXRhKCk7Ci19Ci0KLU1lZGlhUGxheWVyUHJpdmF0ZUFWRm91bmRhdGlv
bjo6SXRlbVN0YXR1cyBNZWRpYVBsYXllclByaXZhdGVBVkZvdW5kYXRpb25DRjo6cGxheWVySXRl
bVN0YXR1cygpIGNvbnN0Ci17Ci0gICAgaWYgKCFhdlBsYXllckl0ZW0obV9hdmZXcmFwcGVyKSkK
LSAgICAgICAgcmV0dXJuIE1lZGlhUGxheWVyUHJpdmF0ZUFWRm91bmRhdGlvbjo6TWVkaWFQbGF5
ZXJBVlBsYXllckl0ZW1TdGF0dXNEb2VzTm90RXhpc3Q7Ci0KLSAgICBBVkNGUGxheWVySXRlbVN0
YXR1cyBzdGF0dXMgPSBBVkNGUGxheWVySXRlbUdldFN0YXR1cyhhdlBsYXllckl0ZW0obV9hdmZX
cmFwcGVyKSwgMCk7Ci0gICAgaWYgKHN0YXR1cyA9PSBBVkNGUGxheWVySXRlbVN0YXR1c1Vua25v
d24pCi0gICAgICAgIHJldHVybiBNZWRpYVBsYXllclByaXZhdGVBVkZvdW5kYXRpb246Ok1lZGlh
UGxheWVyQVZQbGF5ZXJJdGVtU3RhdHVzVW5rbm93bjsKLSAgICBpZiAoc3RhdHVzID09IEFWQ0ZQ
bGF5ZXJJdGVtU3RhdHVzRmFpbGVkKQotICAgICAgICByZXR1cm4gTWVkaWFQbGF5ZXJQcml2YXRl
QVZGb3VuZGF0aW9uOjpNZWRpYVBsYXllckFWUGxheWVySXRlbVN0YXR1c0ZhaWxlZDsKLSAgICBp
ZiAoQVZDRlBsYXllckl0ZW1Jc1BsYXliYWNrTGlrZWx5VG9LZWVwVXAoYXZQbGF5ZXJJdGVtKG1f
YXZmV3JhcHBlcikpKQotICAgICAgICByZXR1cm4gTWVkaWFQbGF5ZXJQcml2YXRlQVZGb3VuZGF0
aW9uOjpNZWRpYVBsYXllckFWUGxheWVySXRlbVN0YXR1c1BsYXliYWNrTGlrZWx5VG9LZWVwVXA7
Ci0gICAgaWYgKEFWQ0ZQbGF5ZXJJdGVtSXNQbGF5YmFja0J1ZmZlckZ1bGwoYXZQbGF5ZXJJdGVt
KG1fYXZmV3JhcHBlcikpKQotICAgICAgICByZXR1cm4gTWVkaWFQbGF5ZXJQcml2YXRlQVZGb3Vu
ZGF0aW9uOjpNZWRpYVBsYXllckFWUGxheWVySXRlbVN0YXR1c1BsYXliYWNrQnVmZmVyRnVsbDsK
LSAgICBpZiAoQVZDRlBsYXllckl0ZW1Jc1BsYXliYWNrQnVmZmVyRW1wdHkoYXZQbGF5ZXJJdGVt
KG1fYXZmV3JhcHBlcikpKQotICAgICAgICByZXR1cm4gTWVkaWFQbGF5ZXJQcml2YXRlQVZGb3Vu
ZGF0aW9uOjpNZWRpYVBsYXllckFWUGxheWVySXRlbVN0YXR1c1BsYXliYWNrQnVmZmVyRW1wdHk7
Ci0gICAgcmV0dXJuIE1lZGlhUGxheWVyUHJpdmF0ZUFWRm91bmRhdGlvbjo6TWVkaWFQbGF5ZXJB
VlBsYXllckl0ZW1TdGF0dXNSZWFkeVRvUGxheTsKLX0KLQotUGxhdGZvcm1NZWRpYSBNZWRpYVBs
YXllclByaXZhdGVBVkZvdW5kYXRpb25DRjo6cGxhdGZvcm1NZWRpYSgpIGNvbnN0Ci17Ci0gICAg
TE9HKE1lZGlhLCAiTWVkaWFQbGF5ZXJQcml2YXRlQVZGb3VuZGF0aW9uQ0Y6OnBsYXRmb3JtTWVk
aWEoJXApIiwgdGhpcyk7Ci0gICAgUGxhdGZvcm1NZWRpYSBwbTsKLSAgICBwbS50eXBlID0gUGxh
dGZvcm1NZWRpYTo6QVZGb3VuZGF0aW9uQ0ZNZWRpYVBsYXllclR5cGU7Ci0gICAgcG0ubWVkaWEu
YXZjZk1lZGlhUGxheWVyID0gKEFWQ0ZQbGF5ZXIqKWF2UGxheWVyKG1fYXZmV3JhcHBlcik7Ci0g
ICAgcmV0dXJuIHBtOwotfQotCi1QbGF0Zm9ybUxheWVyKiBNZWRpYVBsYXllclByaXZhdGVBVkZv
dW5kYXRpb25DRjo6cGxhdGZvcm1MYXllcigpIGNvbnN0Ci17Ci0gICAgaWYgKCFtX2F2ZldyYXBw
ZXIpCi0gICAgICAgIHJldHVybiAwOwotCi0gICAgcmV0dXJuIG1fYXZmV3JhcHBlci0+cGxhdGZv
cm1MYXllcigpOwotfQotCi12b2lkIE1lZGlhUGxheWVyUHJpdmF0ZUFWRm91bmRhdGlvbkNGOjpw
bGF0Zm9ybVNldFZpc2libGUoYm9vbCBpc1Zpc2libGUpCi17Ci0gICAgaWYgKCFtX2F2ZldyYXBw
ZXIpCi0gICAgICAgIHJldHVybjsKLSAgICAKLSAgICAvLyBGSVhNRTogV2UgdXNlIGEgQ0FUcmFu
c2FjdGlvbiBoZXJlIG9uIHRoZSBNYWMsIHdlIG5lZWQgdG8gZmlndXJlIG91dCB3aHkgdGhpcyB3
YXMgZG9uZSB0aGVyZSBhbmQKLSAgICAvLyB3aGV0aGVyIHdlJ3JlIGFmZmVjdGVkIGJ5IHRoZSBz
YW1lIGlzc3VlLgotICAgIHNldERlbGF5Q2FsbGJhY2tzKHRydWUpOwotICAgIG1fYXZmV3JhcHBl
ci0+c2V0VmlkZW9MYXllckhpZGRlbighaXNWaXNpYmxlKTsgICAgCi0gICAgc2V0RGVsYXlDYWxs
YmFja3MoZmFsc2UpOwotfQotCi12b2lkIE1lZGlhUGxheWVyUHJpdmF0ZUFWRm91bmRhdGlvbkNG
OjpwbGF0Zm9ybVBsYXkoKQotewotICAgIExPRyhNZWRpYSwgIk1lZGlhUGxheWVyUHJpdmF0ZUFW
Rm91bmRhdGlvbkNGOjpwbGF5KCVwKSIsIHRoaXMpOwotICAgIGlmICghbWV0YURhdGFBdmFpbGFi
bGUoKSB8fCAhYXZQbGF5ZXIobV9hdmZXcmFwcGVyKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAg
c2V0RGVsYXlDYWxsYmFja3ModHJ1ZSk7Ci0gICAgQVZDRlBsYXllclNldFJhdGUoYXZQbGF5ZXIo
bV9hdmZXcmFwcGVyKSwgcmVxdWVzdGVkUmF0ZSgpKTsKLSAgICBzZXREZWxheUNhbGxiYWNrcyhm
YWxzZSk7Ci19Ci0KLXZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlQVZGb3VuZGF0aW9uQ0Y6OnBsYXRm
b3JtUGF1c2UoKQotewotICAgIExPRyhNZWRpYSwgIk1lZGlhUGxheWVyUHJpdmF0ZUFWRm91bmRh
dGlvbkNGOjpwYXVzZSglcCkiLCB0aGlzKTsKLSAgICBpZiAoIW1ldGFEYXRhQXZhaWxhYmxlKCkg
fHwgIWF2UGxheWVyKG1fYXZmV3JhcHBlcikpCi0gICAgICAgIHJldHVybjsKLQotICAgIHNldERl
bGF5Q2FsbGJhY2tzKHRydWUpOwotICAgIEFWQ0ZQbGF5ZXJTZXRSYXRlKGF2UGxheWVyKG1fYXZm
V3JhcHBlciksIDApOwotICAgIHNldERlbGF5Q2FsbGJhY2tzKGZhbHNlKTsKLX0KLQotdm9pZCBN
ZWRpYVBsYXllclByaXZhdGVBVkZvdW5kYXRpb25DRjo6dXBkYXRlUmF0ZSgpCi17Ci0gICAgTE9H
KE1lZGlhLCAiTWVkaWFQbGF5ZXJQcml2YXRlQVZGb3VuZGF0aW9uQ0Y6OnVwZGF0ZVJhdGUoJXAp
IiwgdGhpcyk7Ci0gICAgaWYgKCFtZXRhRGF0YUF2YWlsYWJsZSgpIHx8ICFhdlBsYXllcihtX2F2
ZldyYXBwZXIpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBzZXREZWxheUNhbGxiYWNrcyh0cnVl
KTsKLSAgICBBVkNGUGxheWVyU2V0UmF0ZShhdlBsYXllcihtX2F2ZldyYXBwZXIpLCByZXF1ZXN0
ZWRSYXRlKCkpOwotICAgIHNldERlbGF5Q2FsbGJhY2tzKGZhbHNlKTsKLX0KLQotZmxvYXQgTWVk
aWFQbGF5ZXJQcml2YXRlQVZGb3VuZGF0aW9uQ0Y6OnBsYXRmb3JtRHVyYXRpb24oKSBjb25zdAot
ewotICAgIGlmICghbWV0YURhdGFBdmFpbGFibGUoKSB8fCAhYXZBc3NldChtX2F2ZldyYXBwZXIp
KQotICAgICAgICByZXR1cm4gMDsKLQotICAgIGZsb2F0IGR1cmF0aW9uOwotICAgIENNVGltZSBj
bUR1cmF0aW9uID0gQVZDRkFzc2V0R2V0RHVyYXRpb24oYXZBc3NldChtX2F2ZldyYXBwZXIpKTsK
LSAgICBpZiAoQ01USU1FX0lTX05VTUVSSUMoY21EdXJhdGlvbikpCi0gICAgICAgIGR1cmF0aW9u
ID0gbmFycm93UHJlY2lzaW9uVG9GbG9hdChDTVRpbWVHZXRTZWNvbmRzKGNtRHVyYXRpb24pKTsK
LSAgICBlbHNlIGlmIChDTVRJTUVfSVNfSU5ERUZJTklURShjbUR1cmF0aW9uKSkKLSAgICAgICAg
ZHVyYXRpb24gPSBudW1lcmljX2xpbWl0czxmbG9hdD46OmluZmluaXR5KCk7Ci0gICAgZWxzZSB7
Ci0gICAgICAgIExPRyhNZWRpYSwgIk1lZGlhUGxheWVyUHJpdmF0ZUFWRk1hYzo6ZHVyYXRpb24o
JXApIC0gaW52YWxpZCBkdXJhdGlvbiwgcmV0dXJuaW5nIDAiLCB0aGlzKTsKLSAgICAgICAgcmV0
dXJuIDA7Ci0gICAgfQotCi0gICAgcmV0dXJuIGR1cmF0aW9uOwotfQotCi1mbG9hdCBNZWRpYVBs
YXllclByaXZhdGVBVkZvdW5kYXRpb25DRjo6Y3VycmVudFRpbWUoKSBjb25zdAotewotICAgIGlm
ICghbWV0YURhdGFBdmFpbGFibGUoKSB8fCAhYXZQbGF5ZXJJdGVtKG1fYXZmV3JhcHBlcikpCi0g
ICAgICAgIHJldHVybiAwOwotCi0gICAgQ01UaW1lIGl0ZW1UaW1lID0gQVZDRlBsYXllckl0ZW1H
ZXRDdXJyZW50VGltZShhdlBsYXllckl0ZW0obV9hdmZXcmFwcGVyKSk7Ci0gICAgaWYgKENNVElN
RV9JU19OVU1FUklDKGl0ZW1UaW1lKSkKLSAgICAgICAgcmV0dXJuIG5hcnJvd1ByZWNpc2lvblRv
RmxvYXQoQ01UaW1lR2V0U2Vjb25kcyhpdGVtVGltZSkpOwotCi0gICAgcmV0dXJuIDA7Ci19Ci0K
LXZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlQVZGb3VuZGF0aW9uQ0Y6OnNlZWtUb1RpbWUoZmxvYXQg
dGltZSkKLXsKLSAgICBpZiAoIW1fYXZmV3JhcHBlcikKLSAgICAgICAgcmV0dXJuOwotICAgIAot
ICAgIC8vIHNlZWtUb1RpbWUgZ2VuZXJhdGVzIHNldmVyYWwgZXZlbnQgY2FsbGJhY2tzLCB1cGRh
dGUgYWZ0ZXJ3YXJkcy4KLSAgICBzZXREZWxheUNhbGxiYWNrcyh0cnVlKTsKLSAgICBtX2F2Zldy
YXBwZXItPnNlZWtUb1RpbWUodGltZSk7Ci0gICAgc2V0RGVsYXlDYWxsYmFja3MoZmFsc2UpOwot
fQotCi12b2lkIE1lZGlhUGxheWVyUHJpdmF0ZUFWRm91bmRhdGlvbkNGOjpzZXRWb2x1bWUoZmxv
YXQgdm9sdW1lKQotewotICAgIGlmICghbWV0YURhdGFBdmFpbGFibGUoKSB8fCAhYXZQbGF5ZXIo
bV9hdmZXcmFwcGVyKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgQVZDRlBsYXllclNldFZvbHVt
ZShhdlBsYXllcihtX2F2ZldyYXBwZXIpLCB2b2x1bWUpOwotfQotCi12b2lkIE1lZGlhUGxheWVy
UHJpdmF0ZUFWRm91bmRhdGlvbkNGOjpzZXRDbG9zZWRDYXB0aW9uc1Zpc2libGUoYm9vbCBjbG9z
ZWRDYXB0aW9uc1Zpc2libGUpCi17Ci0gICAgaWYgKCFtZXRhRGF0YUF2YWlsYWJsZSgpIHx8ICFh
dlBsYXllcihtX2F2ZldyYXBwZXIpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBMT0coTWVkaWEs
ICJNZWRpYVBsYXllclByaXZhdGVBVkZvdW5kYXRpb25DRjo6c2V0Q2xvc2VkQ2FwdGlvbnNWaXNp
YmxlKCVwKSAtIHNldHRpbmcgdG8gJXMiLCB0aGlzLCBib29sU3RyaW5nKGNsb3NlZENhcHRpb25z
VmlzaWJsZSkpOwotICAgIEFWQ0ZQbGF5ZXJTZXRDbG9zZWRDYXB0aW9uRGlzcGxheUVuYWJsZWQo
YXZQbGF5ZXIobV9hdmZXcmFwcGVyKSwgY2xvc2VkQ2FwdGlvbnNWaXNpYmxlKTsKLX0KLQotZmxv
YXQgTWVkaWFQbGF5ZXJQcml2YXRlQVZGb3VuZGF0aW9uQ0Y6OnJhdGUoKSBjb25zdAotewotICAg
IGlmICghbWV0YURhdGFBdmFpbGFibGUoKSB8fCAhYXZQbGF5ZXIobV9hdmZXcmFwcGVyKSkKLSAg
ICAgICAgcmV0dXJuIDA7Ci0KLSAgICBzZXREZWxheUNhbGxiYWNrcyh0cnVlKTsKLSAgICBmbG9h
dCBjdXJyZW50UmF0ZSA9IEFWQ0ZQbGF5ZXJHZXRSYXRlKGF2UGxheWVyKG1fYXZmV3JhcHBlcikp
OwotICAgIHNldERlbGF5Q2FsbGJhY2tzKGZhbHNlKTsKLQotICAgIHJldHVybiBjdXJyZW50UmF0
ZTsKLX0KLQotc3RhdGljIGJvb2wgdGltZVJhbmdlSXNWYWxpZEFuZE5vdEVtcHR5KENNVGltZSBz
dGFydCwgQ01UaW1lIGR1cmF0aW9uKQotewotICAgIC8vIElzIHRoZSByYW5nZSB2YWxpZD8KLSAg
ICBpZiAoIUNNVElNRV9JU19WQUxJRChzdGFydCkgfHwgIUNNVElNRV9JU19WQUxJRChkdXJhdGlv
bikgfHwgZHVyYXRpb24uZXBvY2ggfHwgZHVyYXRpb24udmFsdWUgPCAwKQotICAgICAgICByZXR1
cm4gZmFsc2U7Ci0KLSAgICBpZiAoQ01USU1FX0NPTVBBUkVfSU5MSU5FKGR1cmF0aW9uLCA9PSwg
a0NNVGltZVplcm8pKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICByZXR1cm4gdHJ1ZTsK
LX0KLQotUGFzc1JlZlB0cjxUaW1lUmFuZ2VzPiBNZWRpYVBsYXllclByaXZhdGVBVkZvdW5kYXRp
b25DRjo6cGxhdGZvcm1CdWZmZXJlZFRpbWVSYW5nZXMoKSBjb25zdAotewotICAgIFJlZlB0cjxU
aW1lUmFuZ2VzPiB0aW1lUmFuZ2VzID0gVGltZVJhbmdlczo6Y3JlYXRlKCk7Ci0KLSAgICBpZiAo
IWF2UGxheWVySXRlbShtX2F2ZldyYXBwZXIpKQotICAgICAgICByZXR1cm4gdGltZVJhbmdlcy5y
ZWxlYXNlKCk7Ci0KLSAgICBSZXRhaW5QdHI8Q0ZBcnJheVJlZj4gbG9hZGVkUmFuZ2VzKEFkb3B0
Q0YsIEFWQ0ZQbGF5ZXJJdGVtQ29weUxvYWRlZFRpbWVSYW5nZXMoYXZQbGF5ZXJJdGVtKG1fYXZm
V3JhcHBlcikpKTsKLSAgICBpZiAoIWxvYWRlZFJhbmdlcykKLSAgICAgICAgcmV0dXJuIHRpbWVS
YW5nZXMucmVsZWFzZSgpOwotCi0gICAgQ0ZJbmRleCByYW5nZUNvdW50ID0gQ0ZBcnJheUdldENv
dW50KGxvYWRlZFJhbmdlcy5nZXQoKSk7Ci0gICAgZm9yIChDRkluZGV4IGkgPSAwOyBpIDwgcmFu
Z2VDb3VudDsgaSsrKSB7Ci0gICAgICAgIENGRGljdGlvbmFyeVJlZiByYW5nZSA9IHN0YXRpY19j
YXN0PENGRGljdGlvbmFyeVJlZj4oQ0ZBcnJheUdldFZhbHVlQXRJbmRleChsb2FkZWRSYW5nZXMu
Z2V0KCksIGkpKTsKLSAgICAgICAgQ01UaW1lIHN0YXJ0ID0gQ01UaW1lTWFrZUZyb21EaWN0aW9u
YXJ5KHN0YXRpY19jYXN0PENGRGljdGlvbmFyeVJlZj4oQ0ZEaWN0aW9uYXJ5R2V0VmFsdWUocmFu
Z2UsIENNVGltZVJhbmdlU3RhcnRLZXkoKSkpKTsKLSAgICAgICAgQ01UaW1lIGR1cmF0aW9uID0g
Q01UaW1lTWFrZUZyb21EaWN0aW9uYXJ5KHN0YXRpY19jYXN0PENGRGljdGlvbmFyeVJlZj4oQ0ZE
aWN0aW9uYXJ5R2V0VmFsdWUocmFuZ2UsIENNVGltZVJhbmdlRHVyYXRpb25LZXkoKSkpKTsKLSAg
ICAgICAgCi0gICAgICAgIGlmICh0aW1lUmFuZ2VJc1ZhbGlkQW5kTm90RW1wdHkoc3RhcnQsIGR1
cmF0aW9uKSkgewotICAgICAgICAgICAgZmxvYXQgcmFuZ2VTdGFydCA9IG5hcnJvd1ByZWNpc2lv
blRvRmxvYXQoQ01UaW1lR2V0U2Vjb25kcyhzdGFydCkpOwotICAgICAgICAgICAgZmxvYXQgcmFu
Z2VFbmQgPSBuYXJyb3dQcmVjaXNpb25Ub0Zsb2F0KENNVGltZUdldFNlY29uZHMoQ01UaW1lQWRk
KHN0YXJ0LCBkdXJhdGlvbikpKTsKLSAgICAgICAgICAgIHRpbWVSYW5nZXMtPmFkZChyYW5nZVN0
YXJ0LCByYW5nZUVuZCk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICByZXR1cm4gdGltZVJhbmdl
cy5yZWxlYXNlKCk7Ci19Ci0KLWZsb2F0IE1lZGlhUGxheWVyUHJpdmF0ZUFWRm91bmRhdGlvbkNG
OjpwbGF0Zm9ybU1heFRpbWVTZWVrYWJsZSgpIGNvbnN0Ci17Ci0gICAgaWYgKCFhdlBsYXllckl0
ZW0obV9hdmZXcmFwcGVyKSkKLSAgICAgICAgcmV0dXJuIDA7Ci0KLSAgICBSZXRhaW5QdHI8Q0ZB
cnJheVJlZj4gc2Vla2FibGVSYW5nZXMoQWRvcHRDRiwgQVZDRlBsYXllckl0ZW1Db3B5U2Vla2Fi
bGVUaW1lUmFuZ2VzKGF2UGxheWVySXRlbShtX2F2ZldyYXBwZXIpKSk7Ci0gICAgaWYgKCFzZWVr
YWJsZVJhbmdlcykKLSAgICAgICAgcmV0dXJuIDA7Ci0KLSAgICBmbG9hdCBtYXhUaW1lU2Vla2Fi
bGUgPSAwOwotICAgIENGSW5kZXggcmFuZ2VDb3VudCA9IENGQXJyYXlHZXRDb3VudChzZWVrYWJs
ZVJhbmdlcy5nZXQoKSk7Ci0gICAgZm9yIChDRkluZGV4IGkgPSAwOyBpIDwgcmFuZ2VDb3VudDsg
aSsrKSB7Ci0gICAgICAgIENGRGljdGlvbmFyeVJlZiByYW5nZSA9IHN0YXRpY19jYXN0PENGRGlj
dGlvbmFyeVJlZj4oQ0ZBcnJheUdldFZhbHVlQXRJbmRleChzZWVrYWJsZVJhbmdlcy5nZXQoKSwg
aSkpOwotICAgICAgICBDTVRpbWUgc3RhcnQgPSBDTVRpbWVNYWtlRnJvbURpY3Rpb25hcnkoc3Rh
dGljX2Nhc3Q8Q0ZEaWN0aW9uYXJ5UmVmPihDRkRpY3Rpb25hcnlHZXRWYWx1ZShyYW5nZSwgQ01U
aW1lUmFuZ2VTdGFydEtleSgpKSkpOwotICAgICAgICBDTVRpbWUgZHVyYXRpb24gPSBDTVRpbWVN
YWtlRnJvbURpY3Rpb25hcnkoc3RhdGljX2Nhc3Q8Q0ZEaWN0aW9uYXJ5UmVmPihDRkRpY3Rpb25h
cnlHZXRWYWx1ZShyYW5nZSwgQ01UaW1lUmFuZ2VEdXJhdGlvbktleSgpKSkpOwotICAgICAgICBp
ZiAoIXRpbWVSYW5nZUlzVmFsaWRBbmROb3RFbXB0eShzdGFydCwgZHVyYXRpb24pKQotICAgICAg
ICAgICAgY29udGludWU7Ci0gICAgICAgIAotICAgICAgICBmbG9hdCBlbmRPZlJhbmdlID0gbmFy
cm93UHJlY2lzaW9uVG9GbG9hdChDTVRpbWVHZXRTZWNvbmRzKENNVGltZUFkZChzdGFydCwgZHVy
YXRpb24pKSk7Ci0gICAgICAgIGlmIChtYXhUaW1lU2Vla2FibGUgPCBlbmRPZlJhbmdlKQotICAg
ICAgICAgICAgbWF4VGltZVNlZWthYmxlID0gZW5kT2ZSYW5nZTsKLSAgICB9Ci0KLSAgICByZXR1
cm4gbWF4VGltZVNlZWthYmxlOyAgIAotfQotCi1mbG9hdCBNZWRpYVBsYXllclByaXZhdGVBVkZv
dW5kYXRpb25DRjo6cGxhdGZvcm1NYXhUaW1lTG9hZGVkKCkgY29uc3QKLXsKLSAgICBpZiAoIWF2
UGxheWVySXRlbShtX2F2ZldyYXBwZXIpKQotICAgICAgICByZXR1cm4gMDsKLQotICAgIFJldGFp
blB0cjxDRkFycmF5UmVmPiBsb2FkZWRSYW5nZXMoQWRvcHRDRiwgQVZDRlBsYXllckl0ZW1Db3B5
TG9hZGVkVGltZVJhbmdlcyhhdlBsYXllckl0ZW0obV9hdmZXcmFwcGVyKSkpOwotICAgIGlmICgh
bG9hZGVkUmFuZ2VzKQotICAgICAgICByZXR1cm4gMDsKLQotICAgIGZsb2F0IG1heFRpbWVMb2Fk
ZWQgPSAwOwotICAgIENGSW5kZXggcmFuZ2VDb3VudCA9IENGQXJyYXlHZXRDb3VudChsb2FkZWRS
YW5nZXMuZ2V0KCkpOwotICAgIGZvciAoQ0ZJbmRleCBpID0gMDsgaSA8IHJhbmdlQ291bnQ7IGkr
KykgewotICAgICAgICBDRkRpY3Rpb25hcnlSZWYgcmFuZ2UgPSBzdGF0aWNfY2FzdDxDRkRpY3Rp
b25hcnlSZWY+KENGQXJyYXlHZXRWYWx1ZUF0SW5kZXgobG9hZGVkUmFuZ2VzLmdldCgpLCBpKSk7
Ci0gICAgICAgIENNVGltZSBzdGFydCA9IENNVGltZU1ha2VGcm9tRGljdGlvbmFyeShzdGF0aWNf
Y2FzdDxDRkRpY3Rpb25hcnlSZWY+KENGRGljdGlvbmFyeUdldFZhbHVlKHJhbmdlLCBDTVRpbWVS
YW5nZVN0YXJ0S2V5KCkpKSk7Ci0gICAgICAgIENNVGltZSBkdXJhdGlvbiA9IENNVGltZU1ha2VG
cm9tRGljdGlvbmFyeShzdGF0aWNfY2FzdDxDRkRpY3Rpb25hcnlSZWY+KENGRGljdGlvbmFyeUdl
dFZhbHVlKHJhbmdlLCBDTVRpbWVSYW5nZUR1cmF0aW9uS2V5KCkpKSk7Ci0gICAgICAgIGlmICgh
dGltZVJhbmdlSXNWYWxpZEFuZE5vdEVtcHR5KHN0YXJ0LCBkdXJhdGlvbikpCi0gICAgICAgICAg
ICBjb250aW51ZTsKLSAgICAgICAgCi0gICAgICAgIGZsb2F0IGVuZE9mUmFuZ2UgPSBuYXJyb3dQ
cmVjaXNpb25Ub0Zsb2F0KENNVGltZUdldFNlY29uZHMoQ01UaW1lQWRkKHN0YXJ0LCBkdXJhdGlv
bikpKTsKLSAgICAgICAgaWYgKG1heFRpbWVMb2FkZWQgPCBlbmRPZlJhbmdlKQotICAgICAgICAg
ICAgbWF4VGltZUxvYWRlZCA9IGVuZE9mUmFuZ2U7Ci0gICAgfQotCi0gICAgcmV0dXJuIG1heFRp
bWVMb2FkZWQ7ICAgCi19Ci0KLXVuc2lnbmVkIE1lZGlhUGxheWVyUHJpdmF0ZUFWRm91bmRhdGlv
bkNGOjp0b3RhbEJ5dGVzKCkgY29uc3QKLXsKLSAgICBpZiAoIW1ldGFEYXRhQXZhaWxhYmxlKCkg
fHwgIWF2QXNzZXQobV9hdmZXcmFwcGVyKSkKLSAgICAgICAgcmV0dXJuIDA7Ci0KLSAgICBpbnQ2
NF90IHRvdGFsTWVkaWFTaXplID0gMDsKLSAgICBSZXRhaW5QdHI8Q0ZBcnJheVJlZj4gdHJhY2tz
KEFkb3B0Q0YsIEFWQ0ZBc3NldENvcHlBc3NldFRyYWNrcyhhdkFzc2V0KG1fYXZmV3JhcHBlcikp
KTsKLSAgICBDRkluZGV4IHRyYWNrQ291bnQgPSBDRkFycmF5R2V0Q291bnQodHJhY2tzLmdldCgp
KTsKLSAgICBmb3IgKENGSW5kZXggaSA9IDA7IGkgPCB0cmFja0NvdW50OyBpKyspIHsKLSAgICAg
ICAgQVZDRkFzc2V0VHJhY2tSZWYgYXNzZXRUcmFjayA9IChBVkNGQXNzZXRUcmFja1JlZilDRkFy
cmF5R2V0VmFsdWVBdEluZGV4KHRyYWNrcy5nZXQoKSwgaSk7Ci0gICAgICAgIHRvdGFsTWVkaWFT
aXplICs9IEFWQ0ZBc3NldFRyYWNrR2V0VG90YWxTYW1wbGVEYXRhTGVuZ3RoKGFzc2V0VHJhY2sp
OwotICAgIH0KLQotICAgIC8vIEZJWE1FOiBJdCBkb2Vzbid0IHNlZW0gc2FmZSB0byBjYXN0IGFu
IGludDY0X3QgdG8gdW5zaWduZWQuCi0gICAgcmV0dXJuIHN0YXRpY19jYXN0PHVuc2lnbmVkPih0
b3RhbE1lZGlhU2l6ZSk7Ci19Ci0KLU1lZGlhUGxheWVyUHJpdmF0ZUFWRm91bmRhdGlvbjo6QXNz
ZXRTdGF0dXMgTWVkaWFQbGF5ZXJQcml2YXRlQVZGb3VuZGF0aW9uQ0Y6OmFzc2V0U3RhdHVzKCkg
Y29uc3QKLXsKLSAgICBpZiAoIWF2QXNzZXQobV9hdmZXcmFwcGVyKSkKLSAgICAgICAgcmV0dXJu
IE1lZGlhUGxheWVyQVZBc3NldFN0YXR1c0RvZXNOb3RFeGlzdDsKLQotICAgIC8vIEZpcnN0LCBt
YWtlIHN1cmUgYWxsIG1ldGFkYXRhIHByb3BlcnRpZXMgd2UgcmVseSBvbiBhcmUgbG9hZGVkLgot
ICAgIENGQXJyYXlSZWYga2V5cyA9IG1ldGFkYXRhS2V5TmFtZXMoKTsKLSAgICBDRkluZGV4IGtl
eUNvdW50ID0gQ0ZBcnJheUdldENvdW50KGtleXMpOwotICAgIGZvciAoQ0ZJbmRleCBpID0gMDsg
aSA8IGtleUNvdW50OyBpKyspIHsKLSAgICAgICAgQ0ZTdHJpbmdSZWYga2V5TmFtZSA9IHN0YXRp
Y19jYXN0PENGU3RyaW5nUmVmPihDRkFycmF5R2V0VmFsdWVBdEluZGV4KGtleXMsIGkpKTsKLSAg
ICAgICAgQVZDRlByb3BlcnR5VmFsdWVTdGF0dXMga2V5U3RhdHVzID0gQVZDRkFzc2V0R2V0U3Rh
dHVzT2ZWYWx1ZUZvclByb3BlcnR5KGF2QXNzZXQobV9hdmZXcmFwcGVyKSwga2V5TmFtZSwgMCk7
Ci0gICAgICAgIAotICAgICAgICBpZiAoa2V5U3RhdHVzIDwgQVZDRlByb3BlcnR5VmFsdWVTdGF0
dXNMb2FkZWQpCi0gICAgICAgICAgICByZXR1cm4gTWVkaWFQbGF5ZXJBVkFzc2V0U3RhdHVzTG9h
ZGluZzsKLSAgICAgICAgaWYgKGtleVN0YXR1cyA9PSBBVkNGUHJvcGVydHlWYWx1ZVN0YXR1c0Zh
aWxlZCkKLSAgICAgICAgICAgIHJldHVybiBNZWRpYVBsYXllckFWQXNzZXRTdGF0dXNGYWlsZWQ7
Ci0gICAgICAgIGlmIChrZXlTdGF0dXMgPT0gQVZDRlByb3BlcnR5VmFsdWVTdGF0dXNDYW5jZWxs
ZWQpCi0gICAgICAgICAgICByZXR1cm4gTWVkaWFQbGF5ZXJBVkFzc2V0U3RhdHVzQ2FuY2VsbGVk
OwotICAgIH0KLQotICAgIGlmIChBVkNGQXNzZXRJc1BsYXlhYmxlKGF2QXNzZXQobV9hdmZXcmFw
cGVyKSkpCi0gICAgICAgIHJldHVybiBNZWRpYVBsYXllckFWQXNzZXRTdGF0dXNQbGF5YWJsZTsK
LQotICAgIHJldHVybiBNZWRpYVBsYXllckFWQXNzZXRTdGF0dXNMb2FkZWQ7Ci19Ci0KLXZvaWQg
TWVkaWFQbGF5ZXJQcml2YXRlQVZGb3VuZGF0aW9uQ0Y6OnBhaW50Q3VycmVudEZyYW1lSW5Db250
ZXh0KEdyYXBoaWNzQ29udGV4dCogY29udGV4dCwgY29uc3QgSW50UmVjdCYgcmVjdCkKLXsKLSAg
ICBpZiAoY29udGV4dC0+cGFpbnRpbmdEaXNhYmxlZCgpKQotICAgICAgICByZXR1cm47Ci0KLSAg
ICBpZiAoY3VycmVudFJlbmRlcmluZ01vZGUoKSA9PSBNZWRpYVJlbmRlcmluZ1RvTGF5ZXIgJiYg
IWltYWdlR2VuZXJhdG9yKG1fYXZmV3JhcHBlcikpIHsKLSAgICAgICAgLy8gV2UncmUgYmVpbmcg
dG9sZCB0byByZW5kZXIgaW50byBhIGNvbnRleHQsIGJ1dCB3ZSBhbHJlYWR5IGhhdmUgdGhlCi0g
ICAgICAgIC8vIHZpZGVvIGxheWVyLCB3aGljaCBwcm9iYWJseSBtZWFucyB3ZSd2ZSBiZWVuIGNh
bGxlZCBmcm9tIDxjYW52YXM+LgotICAgICAgICBjcmVhdGVDb250ZXh0VmlkZW9SZW5kZXJlcigp
OwotICAgIH0KLQotICAgIHBhaW50KGNvbnRleHQsIHJlY3QpOwotfQotCi12b2lkIE1lZGlhUGxh
eWVyUHJpdmF0ZUFWRm91bmRhdGlvbkNGOjpwYWludChHcmFwaGljc0NvbnRleHQqIGNvbnRleHQs
IGNvbnN0IEludFJlY3QmIHJlY3QpCi17Ci0gICAgaWYgKGNvbnRleHQtPnBhaW50aW5nRGlzYWJs
ZWQoKSB8fCAhaW1hZ2VHZW5lcmF0b3IobV9hdmZXcmFwcGVyKSkKLSAgICAgICAgcmV0dXJuOwot
Ci0gICAgTE9HKE1lZGlhLCAiTWVkaWFQbGF5ZXJQcml2YXRlQVZGb3VuZGF0aW9uQ0Y6OnBhaW50
KCVwKSIsIHRoaXMpOwotCi0gICAgc2V0RGVsYXlDYWxsYmFja3ModHJ1ZSk7Ci0gICAgUmV0YWlu
UHRyPENHSW1hZ2VSZWY+IGltYWdlID0gbV9hdmZXcmFwcGVyLT5jcmVhdGVJbWFnZUZvclRpbWVJ
blJlY3QoY3VycmVudFRpbWUoKSwgcmVjdCk7Ci0gICAgaWYgKGltYWdlKSB7Ci0gICAgICAgIGNv
bnRleHQtPnNhdmUoKTsKLSAgICAgICAgY29udGV4dC0+dHJhbnNsYXRlKHJlY3QueCgpLCByZWN0
LnkoKSArIHJlY3QuaGVpZ2h0KCkpOwotICAgICAgICBjb250ZXh0LT5zY2FsZShGbG9hdFNpemUo
MS4wZiwgLTEuMGYpKTsKLSAgICAgICAgY29udGV4dC0+c2V0SW1hZ2VJbnRlcnBvbGF0aW9uUXVh
bGl0eShJbnRlcnBvbGF0aW9uTG93KTsKLSAgICAgICAgSW50UmVjdCBwYWludFJlY3QoSW50UG9p
bnQoMCwgMCksIEludFNpemUocmVjdC53aWR0aCgpLCByZWN0LmhlaWdodCgpKSk7Ci0gICAgICAg
IENHQ29udGV4dERyYXdJbWFnZShjb250ZXh0LT5wbGF0Zm9ybUNvbnRleHQoKSwgQ0dSZWN0TWFr
ZSgwLCAwLCBwYWludFJlY3Qud2lkdGgoKSwgcGFpbnRSZWN0LmhlaWdodCgpKSwgaW1hZ2UuZ2V0
KCkpOwotICAgICAgICBjb250ZXh0LT5yZXN0b3JlKCk7Ci0gICAgICAgIGltYWdlID0gMDsKLSAg
ICB9Ci0gICAgc2V0RGVsYXlDYWxsYmFja3MoZmFsc2UpOwotICAgIAotICAgIG1fdmlkZW9GcmFt
ZUhhc0RyYXduID0gdHJ1ZTsKLX0KLQotc3RhdGljIEhhc2hTZXQ8U3RyaW5nPiBtaW1lVHlwZUNh
Y2hlKCkKLXsKLSAgICBERUZJTkVfU1RBVElDX0xPQ0FMKEhhc2hTZXQ8U3RyaW5nPiwgY2FjaGUs
ICgpKTsKLSAgICBzdGF0aWMgYm9vbCB0eXBlTGlzdEluaXRpYWxpemVkID0gZmFsc2U7Ci0KLSAg
ICBpZiAodHlwZUxpc3RJbml0aWFsaXplZCkKLSAgICAgICAgcmV0dXJuIGNhY2hlOwotICAgIHR5
cGVMaXN0SW5pdGlhbGl6ZWQgPSB0cnVlOwotCi0gICAgLy8gTm90IHBvc3NpYmxlIHRvIHF1ZXJ5
IEFWRm91bmRhdGlvbiBmb3Igc3VwcG9ydGVkIE1JTUUgdHlwZXMsIDxyZGFyOi8vcHJvYmxlbS84
NzIxNjkzPiwgc28KLSAgICAvLyBoYXJkIGNvZGUgc29tZSB0eXBlcyBmb3Igbm93LgotICAgIGNh
Y2hlLmFkZCgidmlkZW8vcXVpY2t0aW1lIik7Ci0gICAgY2FjaGUuYWRkKCJ2aWRlby9tcDQiKTsK
LSAgICBjYWNoZS5hZGQoInZpZGVvL21wZWciKTsKLSAgICBjYWNoZS5hZGQoImF1ZGlvLzNncHAi
KTsKLSAgICBjYWNoZS5hZGQoImF1ZGlvL21wMyIpOwotICAgIGNhY2hlLmFkZCgiYXVkaW8vbXA0
Iik7Ci0gICAgY2FjaGUuYWRkKCJhdWRpby9tcDQiKTsKLSAgICBjYWNoZS5hZGQoImF1ZGlvL200
YSIpOwotICAgIGNhY2hlLmFkZCgiYXVkaW8vYWFjIik7Ci0gICAgY2FjaGUuYWRkKCJhdWRpby93
YXYiKTsKLSAgICBjYWNoZS5hZGQoImFwcGxpY2F0aW9uL3ZuZC5hcHBsZS5tcGVndXJsIik7Ci0K
LSAgICByZXR1cm4gY2FjaGU7Ci19IAotCi12b2lkIE1lZGlhUGxheWVyUHJpdmF0ZUFWRm91bmRh
dGlvbkNGOjpnZXRTdXBwb3J0ZWRUeXBlcyhIYXNoU2V0PFN0cmluZz4mIHN1cHBvcnRlZFR5cGVz
KQotewotICAgIHN1cHBvcnRlZFR5cGVzID0gbWltZVR5cGVDYWNoZSgpOwotfSAKLQotTWVkaWFQ
bGF5ZXI6OlN1cHBvcnRzVHlwZSBNZWRpYVBsYXllclByaXZhdGVBVkZvdW5kYXRpb25DRjo6c3Vw
cG9ydHNUeXBlKGNvbnN0IFN0cmluZyYgdHlwZSwgY29uc3QgU3RyaW5nJiBjb2RlY3MpCi17Ci0g
ICAgLy8gT25seSByZXR1cm4gIklzU3VwcG9ydGVkIiBpZiB0aGVyZSBpcyBubyBjb2RlY3MgcGFy
YW1ldGVyIGZvciBub3cgYXMgdGhlcmUgaXMgbm8gd2F5IHRvIGFzayBpZiBpdCBzdXBwb3J0cyBh
bgotICAgIC8vIGV4dGVuZGVkIE1JTUUgdHlwZSB1bnRpbCByZGFyOi8vODcyMTcxNSBpcyBmaXhl
ZC4KLSAgICBpZiAobWltZVR5cGVDYWNoZSgpLmNvbnRhaW5zKHR5cGUpKQotICAgICAgICByZXR1
cm4gY29kZWNzLmlzRW1wdHkoKSA/IE1lZGlhUGxheWVyOjpNYXlCZVN1cHBvcnRlZCA6IE1lZGlh
UGxheWVyOjpJc1N1cHBvcnRlZDsKLQotICAgIHJldHVybiBNZWRpYVBsYXllcjo6SXNOb3RTdXBw
b3J0ZWQ7Ci19Ci0KLQotYm9vbCBNZWRpYVBsYXllclByaXZhdGVBVkZvdW5kYXRpb25DRjo6aXNB
dmFpbGFibGUoKQotewotICAgIHJldHVybiBBVkZvdW5kYXRpb25DRkxpYnJhcnkoKSAmJiBDb3Jl
TWVkaWFMaWJyYXJ5KCkgJiYgbGliZGlzcGF0Y2hMaWJyYXJ5KCk7Ci19Ci0KLWZsb2F0IE1lZGlh
UGxheWVyUHJpdmF0ZUFWRm91bmRhdGlvbkNGOjptZWRpYVRpbWVGb3JUaW1lVmFsdWUoZmxvYXQg
dGltZVZhbHVlKSBjb25zdAotewotICAgIGlmICghbWV0YURhdGFBdmFpbGFibGUoKSkKLSAgICAg
ICAgcmV0dXJuIHRpbWVWYWx1ZTsKLQotICAgIC8vIEZJWE1FIC0gY2FuIG5vdCBpbXBsZW1lbnQg
dW50aWwgcmRhcjovLzg3MjE2NjkgaXMgZml4ZWQuCi0gICAgcmV0dXJuIHRpbWVWYWx1ZTsKLX0K
LQotdm9pZCBNZWRpYVBsYXllclByaXZhdGVBVkZvdW5kYXRpb25DRjo6dHJhY2tzQ2hhbmdlZCgp
Ci17Ci0gICAgaWYgKCFhdkFzc2V0KG1fYXZmV3JhcHBlcikpCi0gICAgICAgIHJldHVybjsKLSAg
ICAKLSAgICAvLyBUaGlzIGlzIGNhbGxlZCB3aGVuZXZlciB0aGUgdHJhY2tzIGNvbGxlY3Rpb24g
Y2hhbmdlcyBzbyBjYWNoZSBoYXNWaWRlbyBhbmQgaGFzQXVkaW8gc2luY2Ugd2UgYXJlCi0gICAg
Ly8gYXNrZWQgYWJvdXQgdGhvc2UgZmFpcmx5IGZyZXF1ZW50bHkuCi0gICAgaWYgKCFhdlBsYXll
ckl0ZW0obV9hdmZXcmFwcGVyKSkgewotICAgICAgICAvLyBXZSBkb24ndCBoYXZlIGEgcGxheWVy
IGl0ZW0geWV0LCBzbyBjaGVjayB3aXRoIHRoZSBhc3NldCBiZWNhdXNlIHNvbWUgYXNzZXRzIHN1
cHBvcnQgaW5zcGVjdGlvbgotICAgICAgICAvLyBwcmlvciB0byBiZWNvbWluZyByZWFkeSB0byBw
bGF5LgotICAgICAgICBSZXRhaW5QdHI8Q0ZBcnJheVJlZj4gdmlzdWFsVHJhY2tzKEFkb3B0Q0Ys
IEFWQ0ZBc3NldENvcHlUcmFja3NXaXRoTWVkaWFDaGFyYWN0ZXJpc3RpYyhhdkFzc2V0KG1fYXZm
V3JhcHBlciksIEFWQ0ZNZWRpYUNoYXJhY3RlcmlzdGljVmlzdWFsKSk7Ci0gICAgICAgIHNldEhh
c1ZpZGVvKENGQXJyYXlHZXRDb3VudCh2aXN1YWxUcmFja3MuZ2V0KCkpKTsKLQotICAgICAgICBS
ZXRhaW5QdHI8Q0ZBcnJheVJlZj4gYXVkaW9UcmFja3MoQWRvcHRDRiwgQVZDRkFzc2V0Q29weVRy
YWNrc1dpdGhNZWRpYUNoYXJhY3RlcmlzdGljKGF2QXNzZXQobV9hdmZXcmFwcGVyKSwgQVZDRk1l
ZGlhQ2hhcmFjdGVyaXN0aWNBdWRpYmxlKSk7Ci0gICAgICAgIHNldEhhc0F1ZGlvKENGQXJyYXlH
ZXRDb3VudChhdWRpb1RyYWNrcy5nZXQoKSkpOwotCi0gICAgICAgIFJldGFpblB0cjxDRkFycmF5
UmVmPiBjYXB0aW9uVHJhY2tzKEFkb3B0Q0YsIEFWQ0ZBc3NldENvcHlUcmFja3NXaXRoTWVkaWFU
eXBlKGF2QXNzZXQobV9hdmZXcmFwcGVyKSwgQVZDRk1lZGlhVHlwZUNsb3NlZENhcHRpb24pKTsK
LSAgICAgICAgc2V0SGFzQXVkaW8oQ0ZBcnJheUdldENvdW50KGNhcHRpb25UcmFja3MuZ2V0KCkp
KTsKLSAgICB9IGVsc2UgewotICAgICAgICBib29sIGhhc1ZpZGVvID0gZmFsc2U7Ci0gICAgICAg
IGJvb2wgaGFzQXVkaW8gPSBmYWxzZTsKLSAgICAgICAgYm9vbCBoYXNDYXB0aW9ucyA9IGZhbHNl
OwotCi0gICAgICAgIFJldGFpblB0cjxDRkFycmF5UmVmPiB0cmFja3MoQWRvcHRDRiwgQVZDRlBs
YXllckl0ZW1Db3B5VHJhY2tzKGF2UGxheWVySXRlbShtX2F2ZldyYXBwZXIpKSk7Ci0KLSAgICAg
ICAgQ0ZJbmRleCB0cmFja0NvdW50ID0gQ0ZBcnJheUdldENvdW50KHRyYWNrcy5nZXQoKSk7Ci0g
ICAgICAgIGZvciAoQ0ZJbmRleCBpID0gMDsgaSA8IHRyYWNrQ291bnQ7IGkrKykgewotICAgICAg
ICAgICAgQVZDRlBsYXllckl0ZW1UcmFja1JlZiB0cmFjayA9IChBVkNGUGxheWVySXRlbVRyYWNr
UmVmKShDRkFycmF5R2V0VmFsdWVBdEluZGV4KHRyYWNrcy5nZXQoKSwgaSkpOwotICAgICAgICAg
ICAgCi0gICAgICAgICAgICBpZiAoQVZDRlBsYXllckl0ZW1UcmFja0lzRW5hYmxlZCh0cmFjaykp
IHsKLSAgICAgICAgICAgICAgICBSZXRhaW5QdHI8QVZDRkFzc2V0VHJhY2tSZWY+IGFzc2V0VHJh
Y2soQWRvcHRDRiwgQVZDRlBsYXllckl0ZW1UcmFja0NvcHlBc3NldFRyYWNrKHRyYWNrKSk7Ci0g
ICAgICAgICAgICAgICAgQ0ZTdHJpbmdSZWYgbWVkaWFUeXBlID0gQVZDRkFzc2V0VHJhY2tHZXRN
ZWRpYVR5cGUoYXNzZXRUcmFjay5nZXQoKSk7Ci0gICAgICAgICAgICAgICAgaWYgKCFtZWRpYVR5
cGUpCi0gICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgICAgIAotICAg
ICAgICAgICAgICAgIGlmIChDRlN0cmluZ0NvbXBhcmUobWVkaWFUeXBlLCBBVkNGTWVkaWFUeXBl
VmlkZW8sIGtDRkNvbXBhcmVDYXNlSW5zZW5zaXRpdmUpID09IGtDRkNvbXBhcmVFcXVhbFRvKQot
ICAgICAgICAgICAgICAgICAgICBoYXNWaWRlbyA9IHRydWU7Ci0gICAgICAgICAgICAgICAgZWxz
ZSBpZiAoQ0ZTdHJpbmdDb21wYXJlKG1lZGlhVHlwZSwgQVZDRk1lZGlhVHlwZUF1ZGlvLCBrQ0ZD
b21wYXJlQ2FzZUluc2Vuc2l0aXZlKSA9PSBrQ0ZDb21wYXJlRXF1YWxUbykKLSAgICAgICAgICAg
ICAgICAgICAgaGFzQXVkaW8gPSB0cnVlOwotICAgICAgICAgICAgICAgIGVsc2UgaWYgKENGU3Ry
aW5nQ29tcGFyZShtZWRpYVR5cGUsIEFWQ0ZNZWRpYVR5cGVDbG9zZWRDYXB0aW9uLCBrQ0ZDb21w
YXJlQ2FzZUluc2Vuc2l0aXZlKSA9PSBrQ0ZDb21wYXJlRXF1YWxUbykKLSAgICAgICAgICAgICAg
ICAgICAgaGFzQ2FwdGlvbnMgPSB0cnVlOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAg
ICAgICAgc2V0SGFzVmlkZW8oaGFzVmlkZW8pOwotICAgICAgICBzZXRIYXNBdWRpbyhoYXNBdWRp
byk7Ci0gICAgICAgIHNldEhhc0Nsb3NlZENhcHRpb25zKGhhc0NhcHRpb25zKTsKLSAgICB9Ci0K
LSAgICBMT0coTWVkaWEsICJNZWRpYVBsYXllclByaXZhdGVBVkZvdW5kYXRpb25DRjp0cmFja3ND
aGFuZ2VkKCVwKSAtIGhhc1ZpZGVvID0gJXMsIGhhc0F1ZGlvID0gJXMsIGhhc0NhcHRpb25zID0g
JXMiLCAKLSAgICAgICAgdGhpcywgYm9vbFN0cmluZyhoYXNWaWRlbygpKSwgYm9vbFN0cmluZyho
YXNBdWRpbygpKSwgYm9vbFN0cmluZyhoYXNDbG9zZWRDYXB0aW9ucygpKSk7Ci0KLSAgICBzaXpl
Q2hhbmdlZCgpOwotfQotCi12b2lkIE1lZGlhUGxheWVyUHJpdmF0ZUFWRm91bmRhdGlvbkNGOjpz
aXplQ2hhbmdlZCgpCi17Ci0gICAgaWYgKCFhdkFzc2V0KG1fYXZmV3JhcHBlcikpCi0gICAgICAg
IHJldHVybjsKLSAgICAKLSAgICAvLyBBVkFzc2V0J3MgJ25hdHVyYWxTaXplJyBwcm9wZXJ0eSBv
bmx5IGNvbnNpZGVycyB0aGUgbW92aWUncyBmaXJzdCB2aWRlbyB0cmFjaywgc28gd2UgbmVlZCB0
byBjb21wdXRlCi0gICAgLy8gdGhlIHVuaW9uIG9mIGFsbCB2aXN1YWwgdHJhY2sgcmVjdHMuCi0g
ICAgQ0dSZWN0IHRyYWNrUmVjdFVuaW9uID0gQ0dSZWN0WmVybzsKLSAgICBSZXRhaW5QdHI8Q0ZB
cnJheVJlZj4gdHJhY2tzKEFkb3B0Q0YsIEFWQ0ZBc3NldENvcHlUcmFja3NXaXRoTWVkaWFUeXBl
KGF2QXNzZXQobV9hdmZXcmFwcGVyKSwgQVZDRk1lZGlhQ2hhcmFjdGVyaXN0aWNWaXN1YWwpKTsK
LSAgICBDRkluZGV4IHRyYWNrQ291bnQgPSBDRkFycmF5R2V0Q291bnQodHJhY2tzLmdldCgpKTsK
LSAgICBmb3IgKENGSW5kZXggaSA9IDA7IGkgPCB0cmFja0NvdW50OyBpKyspIHsKLSAgICAgICAg
QVZDRkFzc2V0VHJhY2tSZWYgYXNzZXRUcmFjayA9IChBVkNGQXNzZXRUcmFja1JlZikoQ0ZBcnJh
eUdldFZhbHVlQXRJbmRleCh0cmFja3MuZ2V0KCksIGkpKTsKLSAgICAgICAgCi0gICAgICAgIENH
U2l6ZSB0cmFja1NpemUgPSBBVkNGQXNzZXRUcmFja0dldE5hdHVyYWxTaXplKGFzc2V0VHJhY2sp
OwotICAgICAgICBDR1JlY3QgdHJhY2tSZWN0ID0gQ0dSZWN0TWFrZSgwLCAwLCB0cmFja1NpemUu
d2lkdGgsIHRyYWNrU2l6ZS5oZWlnaHQpOwotICAgICAgICB0cmFja1JlY3RVbmlvbiA9IENHUmVj
dFVuaW9uKHRyYWNrUmVjdFVuaW9uLCBDR1JlY3RBcHBseUFmZmluZVRyYW5zZm9ybSh0cmFja1Jl
Y3QsIEFWQ0ZBc3NldFRyYWNrR2V0UHJlZmVycmVkVHJhbnNmb3JtKGFzc2V0VHJhY2spKSk7Ci0g
ICAgfQotICAgIC8vIFRoZSBtb3ZpZSBpcyBhbHdheXMgZGlzcGxheWVkIGF0IDAsMCBzbyBtb3Zl
IHRoZSB0cmFjayByZWN0IHRvIHRoZSBvcmlnaW4gYmVmb3JlIHVzaW5nIHdpZHRoIGFuZCBoZWln
aHQuCi0gICAgdHJhY2tSZWN0VW5pb24gPSBDR1JlY3RPZmZzZXQodHJhY2tSZWN0VW5pb24sIHRy
YWNrUmVjdFVuaW9uLm9yaWdpbi54LCB0cmFja1JlY3RVbmlvbi5vcmlnaW4ueSk7Ci0gICAgQ0dT
aXplIG5hdHVyYWxTaXplID0gdHJhY2tSZWN0VW5pb24uc2l6ZTsKLQotICAgIC8vIEFsc28gbG9v
ayBhdCB0aGUgYXNzZXQncyBwcmVmZXJyZWQgdHJhbnNmb3JtIHNvIHdlIGFjY291bnQgZm9yIGEg
bW92aWUgbWF0cml4LgotICAgIENHU2l6ZSBtb3ZpZVNpemUgPSBDR1NpemVBcHBseUFmZmluZVRy
YW5zZm9ybShBVkNGQXNzZXRHZXROYXR1cmFsU2l6ZShhdkFzc2V0KG1fYXZmV3JhcHBlcikpLCBB
VkNGQXNzZXRHZXRQcmVmZXJyZWRUcmFuc2Zvcm0oYXZBc3NldChtX2F2ZldyYXBwZXIpKSk7Ci0g
ICAgaWYgKG1vdmllU2l6ZS53aWR0aCA+IG5hdHVyYWxTaXplLndpZHRoKQotICAgICAgICBuYXR1
cmFsU2l6ZS53aWR0aCA9IG1vdmllU2l6ZS53aWR0aDsKLSAgICBpZiAobW92aWVTaXplLmhlaWdo
dCA+IG5hdHVyYWxTaXplLmhlaWdodCkKLSAgICAgICAgbmF0dXJhbFNpemUuaGVpZ2h0ID0gbW92
aWVTaXplLmhlaWdodDsKLSAgICBzZXROYXR1cmFsU2l6ZShJbnRTaXplKG5hdHVyYWxTaXplKSk7
Ci19Ci0KLXZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlQVZGb3VuZGF0aW9uQ0Y6OmNvbnRlbnRzTmVl
ZHNEaXNwbGF5KCkKLXsKLSAgICBpZiAobV9hdmZXcmFwcGVyKQotICAgICAgICBtX2F2ZldyYXBw
ZXItPnNldFZpZGVvTGF5ZXJOZWVkc0NvbW1pdCgpOwotfQotCi1BVkZXcmFwcGVyOjpBVkZXcmFw
cGVyKE1lZGlhUGxheWVyUHJpdmF0ZUFWRm91bmRhdGlvbkNGKiBvd25lcikKLSAgICA6IG1fb3du
ZXIob3duZXIpCi0gICAgLCBtX29iamVjdElEKHNfbmV4dEFWRldyYXBwZXJPYmplY3RJRCsrKQot
ewotICAgIExPRyhNZWRpYSwgIkFWRldyYXBwZXI6OkFWRldyYXBwZXIoJXApIiwgdGhpcyk7Ci0K
LSAgICBtX25vdGlmaWNhdGlvblF1ZXVlID0gZGlzcGF0Y2hfcXVldWVfY3JlYXRlKCJNZWRpYVBs
YXllclByaXZhdGVBVkZvdW5kYXRpb25DRi5ub3RpZmljYXRpb25RdWV1ZSIsIDApOwotICAgIGFk
ZFRvTWFwKCk7Ci19Ci0KLUFWRldyYXBwZXI6On5BVkZXcmFwcGVyKCkKLXsKLSAgICBMT0coTWVk
aWEsICJBVkZXcmFwcGVyOjp+QVZGV3JhcHBlciglcCAlZCkiLCB0aGlzLCBtX29iamVjdElEKTsK
LQotICAgIGRlc3Ryb3lWaWRlb0xheWVyKCk7Ci0gICAgZGVzdHJveUltYWdlR2VuZXJhdG9yKCk7
Ci0KLSAgICBpZiAobV9ub3RpZmljYXRpb25RdWV1ZSkKLSAgICAgICAgZGlzcGF0Y2hfcmVsZWFz
ZShtX25vdGlmaWNhdGlvblF1ZXVlKTsKLQotICAgIGlmIChhdkFzc2V0KCkpIHsKLSAgICAgICAg
QVZDRkFzc2V0Q2FuY2VsTG9hZGluZyhhdkFzc2V0KCkpOwotICAgICAgICBtX2F2QXNzZXQgPSAw
OwotICAgIH0KLQotICAgIG1fYXZQbGF5ZXJJdGVtID0gMDsKLSAgICBtX3RpbWVPYnNlcnZlciA9
IDA7Ci0gICAgbV9hdlBsYXllciA9IDA7Ci19Ci0KLU11dGV4JiBBVkZXcmFwcGVyOjptYXBMb2Nr
KCkKLXsKLSAgICBzdGF0aWMgTXV0ZXggbWFwTG9jazsKLSAgICByZXR1cm4gbWFwTG9jazsKLX0K
LQotSGFzaE1hcDx1aW50cHRyX3QsIEFWRldyYXBwZXIqPiYgQVZGV3JhcHBlcjo6bWFwKCkKLXsK
LSAgICBzdGF0aWMgSGFzaE1hcDx1aW50cHRyX3QsIEFWRldyYXBwZXIqPiYgbWFwID0gKm5ldyBI
YXNoTWFwPHVpbnRwdHJfdCwgQVZGV3JhcHBlcio+OwotICAgIHJldHVybiBtYXA7Ci19Ci0KLXZv
aWQgQVZGV3JhcHBlcjo6YWRkVG9NYXAoKQotewotICAgIE11dGV4TG9ja2VyIGxvY2tlcihtYXBM
b2NrKCkpOwotICAgIAotICAgIC8vIEhhc2hNYXAgZG9lc24ndCBsaWtlIGEga2V5IG9mIDAsIGFu
ZCBhbHNvIG1ha2Ugc3VyZSB3ZSBhcmVuJ3QKLSAgICAvLyB1c2luZyBhbiBvYmplY3QgSUQgdGhh
dCdzIGFscmVhZHkgaW4gdXNlLgotICAgIHdoaWxlICghbV9vYmplY3RJRCB8fCAobWFwKCkuZmlu
ZChtX29iamVjdElEKSAhPSBtYXAoKS5lbmQoKSkpCi0gICAgICAgIG1fb2JqZWN0SUQgPSBzX25l
eHRBVkZXcmFwcGVyT2JqZWN0SUQrKzsKLSAgICAgICAKLSAgICBMT0coTWVkaWEsICJBVkZXcmFw
cGVyOjphZGRUb01hcCglcCAlZCkiLCB0aGlzLCBtX29iamVjdElEKTsKLQotICAgIG1hcCgpLmFk
ZChtX29iamVjdElELCB0aGlzKTsKLX0KLQotdm9pZCBBVkZXcmFwcGVyOjpyZW1vdmVGcm9tTWFw
KCkgY29uc3QKLXsKLSAgICBMT0coTWVkaWEsICJBVkZXcmFwcGVyOjpyZW1vdmVGcm9tTWFwKCVw
ICVkKSIsIHRoaXMsIG1fb2JqZWN0SUQpOwotCi0gICAgTXV0ZXhMb2NrZXIgbG9ja2VyKG1hcExv
Y2soKSk7Ci0gICAgbWFwKCkucmVtb3ZlKG1fb2JqZWN0SUQpOwotfQotCi1BVkZXcmFwcGVyKiBB
VkZXcmFwcGVyOjphdmZXcmFwcGVyRm9yQ2FsbGJhY2tDb250ZXh0KHZvaWQqIGNvbnRleHQpCi17
Ci0gICAgLy8gQXNzdW1lcyBjYWxsZXIgaGFzIGxvY2tlZCBtYXBMb2NrKCkuCi0gICAgSGFzaE1h
cDx1aW50cHRyX3QsIEFWRldyYXBwZXIqPjo6aXRlcmF0b3IgaXQgPSBtYXAoKS5maW5kKHJlaW50
ZXJwcmV0X2Nhc3Q8dWludHB0cl90Pihjb250ZXh0KSk7Ci0gICAgaWYgKGl0ID09IG1hcCgpLmVu
ZCgpKQotICAgICAgICByZXR1cm4gMDsKLQotICAgIHJldHVybiBpdC0+c2Vjb25kOwotfQotCi12
b2lkIEFWRldyYXBwZXI6OnNjaGVkdWxlRGlzY29ubmVjdEFuZERlbGV0ZSgpCi17Ci0gICAgLy8g
SWdub3JlIGFueSBzdWJzZXF1ZW50IG5vdGlmaWNhdGlvbnMgd2UgbWlnaHQgcmVjZWl2ZSBpbiBu
b3RpZmljYXRpb25DYWxsYmFjaygpLgotICAgIHJlbW92ZUZyb21NYXAoKTsKLQotICAgIGRpc3Bh
dGNoX2FzeW5jX2YoZGlzcGF0Y2hRdWV1ZSgpLCB0aGlzLCBkaXNjb25uZWN0QW5kRGVsZXRlQVZG
V3JhcHBlcik7Ci19Ci0KLXZvaWQgQVZGV3JhcHBlcjo6ZGlzY29ubmVjdEFuZERlbGV0ZUFWRldy
YXBwZXIodm9pZCogY29udGV4dCkKLXsKLSAgICBBVkZXcmFwcGVyKiBhdmZXcmFwcGVyID0gc3Rh
dGljX2Nhc3Q8QVZGV3JhcHBlcio+KGNvbnRleHQpOwotCi0gICAgTE9HKE1lZGlhLCAiQVZGV3Jh
cHBlcjo6ZGlzY29ubmVjdEFuZERlbGV0ZUFWRldyYXBwZXIoJXApIiwgYXZmV3JhcHBlcik7Ci0K
LSAgICBpZiAoYXZmV3JhcHBlci0+YXZQbGF5ZXJJdGVtKCkpIHsKLSAgICAgICAgQ0ZOb3RpZmlj
YXRpb25DZW50ZXJSZWYgY2VudGVyID0gQ0ZOb3RpZmljYXRpb25DZW50ZXJHZXRMb2NhbENlbnRl
cigpOwotICAgICAgICBDRk5vdGlmaWNhdGlvbkNlbnRlclJlbW92ZU9ic2VydmVyKGNlbnRlciwg
YXZmV3JhcHBlci0+Y2FsbGJhY2tDb250ZXh0KCksIEFWQ0ZQbGF5ZXJJdGVtRGlkUGxheVRvRW5k
VGltZU5vdGlmaWNhdGlvbiwgYXZmV3JhcHBlci0+YXZQbGF5ZXJJdGVtKCkpOwotICAgICAgICBD
Rk5vdGlmaWNhdGlvbkNlbnRlclJlbW92ZU9ic2VydmVyKGNlbnRlciwgYXZmV3JhcHBlci0+Y2Fs
bGJhY2tDb250ZXh0KCksIEFWQ0ZQbGF5ZXJJdGVtU3RhdHVzQ2hhbmdlZE5vdGlmaWNhdGlvbiwg
YXZmV3JhcHBlci0+YXZQbGF5ZXJJdGVtKCkpOwotICAgICAgICBDRk5vdGlmaWNhdGlvbkNlbnRl
clJlbW92ZU9ic2VydmVyKGNlbnRlciwgYXZmV3JhcHBlci0+Y2FsbGJhY2tDb250ZXh0KCksIEFW
Q0ZQbGF5ZXJJdGVtVHJhY2tzQ2hhbmdlZE5vdGlmaWNhdGlvbiwgYXZmV3JhcHBlci0+YXZQbGF5
ZXJJdGVtKCkpOwotICAgICAgICBDRk5vdGlmaWNhdGlvbkNlbnRlclJlbW92ZU9ic2VydmVyKGNl
bnRlciwgYXZmV3JhcHBlci0+Y2FsbGJhY2tDb250ZXh0KCksIEFWQ0ZQbGF5ZXJJdGVtU2Vla2Fi
bGVUaW1lUmFuZ2VzQ2hhbmdlZE5vdGlmaWNhdGlvbiwgYXZmV3JhcHBlci0+YXZQbGF5ZXJJdGVt
KCkpOwotICAgICAgICBDRk5vdGlmaWNhdGlvbkNlbnRlclJlbW92ZU9ic2VydmVyKGNlbnRlciwg
YXZmV3JhcHBlci0+Y2FsbGJhY2tDb250ZXh0KCksIEFWQ0ZQbGF5ZXJJdGVtTG9hZGVkVGltZVJh
bmdlc0NoYW5nZWROb3RpZmljYXRpb24sIGF2ZldyYXBwZXItPmF2UGxheWVySXRlbSgpKTsKLSAg
ICAgICAgQ0ZOb3RpZmljYXRpb25DZW50ZXJSZW1vdmVPYnNlcnZlcihjZW50ZXIsIGF2ZldyYXBw
ZXItPmNhbGxiYWNrQ29udGV4dCgpLCBBVkNGUGxheWVySXRlbUlzUGxheWJhY2tMaWtlbHlUb0tl
ZXBVcENoYW5nZWROb3RpZmljYXRpb24sIGF2ZldyYXBwZXItPmF2UGxheWVySXRlbSgpKTsKLSAg
ICAgICAgQ0ZOb3RpZmljYXRpb25DZW50ZXJSZW1vdmVPYnNlcnZlcihjZW50ZXIsIGF2ZldyYXBw
ZXItPmNhbGxiYWNrQ29udGV4dCgpLCBBVkNGUGxheWVySXRlbUlzUGxheWJhY2tCdWZmZXJFbXB0
eUNoYW5nZWROb3RpZmljYXRpb24sIGF2ZldyYXBwZXItPmF2UGxheWVySXRlbSgpKTsKLSAgICAg
ICAgQ0ZOb3RpZmljYXRpb25DZW50ZXJSZW1vdmVPYnNlcnZlcihjZW50ZXIsIGF2ZldyYXBwZXIt
PmNhbGxiYWNrQ29udGV4dCgpLCBBVkNGUGxheWVySXRlbUlzUGxheWJhY2tCdWZmZXJGdWxsQ2hh
bmdlZE5vdGlmaWNhdGlvbiwgYXZmV3JhcHBlci0+YXZQbGF5ZXJJdGVtKCkpOwotICAgICAgICBD
Rk5vdGlmaWNhdGlvbkNlbnRlclJlbW92ZU9ic2VydmVyKGNlbnRlciwgYXZmV3JhcHBlci0+Y2Fs
bGJhY2tDb250ZXh0KCksIENBQ0ZDb250ZXh0TmVlZHNGbHVzaE5vdGlmaWNhdGlvbigpLCAwKTsK
LSAgICB9Ci0KLSAgICBpZiAoYXZmV3JhcHBlci0+YXZQbGF5ZXIoKSkgewotICAgICAgICBpZiAo
YXZmV3JhcHBlci0+dGltZU9ic2VydmVyKCkpCi0gICAgICAgICAgICBBVkNGUGxheWVyUmVtb3Zl
T2JzZXJ2ZXIoYXZmV3JhcHBlci0+YXZQbGF5ZXIoKSwgYXZmV3JhcHBlci0+dGltZU9ic2VydmVy
KCkpOwotCi0gICAgICAgIENGTm90aWZpY2F0aW9uQ2VudGVyUmVtb3ZlT2JzZXJ2ZXIoQ0ZOb3Rp
ZmljYXRpb25DZW50ZXJHZXRMb2NhbENlbnRlcigpLCBhdmZXcmFwcGVyLT5jYWxsYmFja0NvbnRl
eHQoKSwgQVZDRlBsYXllclJhdGVDaGFuZ2VkTm90aWZpY2F0aW9uLCBhdmZXcmFwcGVyLT5hdlBs
YXllcigpKTsKLSAgICB9Ci0KLSAgICBkZWxldGUgYXZmV3JhcHBlcjsKLX0KLQotdm9pZCBBVkZX
cmFwcGVyOjpjcmVhdGVBc3NldEZvclVSTChjb25zdCBTdHJpbmcmIHVybCkKLXsKLSAgICBBU1NF
UlQoIWF2QXNzZXQoKSk7Ci0gICAgCi0gICAgUmV0YWluUHRyPENGVVJMUmVmPiB1cmxSZWYoQWRv
cHRDRiwgS1VSTChQYXJzZWRVUkxTdHJpbmcsIHVybCkuY3JlYXRlQ0ZVUkwoKSk7Ci0gICAgQVZD
RlVSTEFzc2V0UmVmIGFzc2V0UmVmID0gQVZDRlVSTEFzc2V0Q3JlYXRlV2l0aFVSTEFuZE9wdGlv
bnMoa0NGQWxsb2NhdG9yRGVmYXVsdCwgdXJsUmVmLmdldCgpLCAwLCBtX25vdGlmaWNhdGlvblF1
ZXVlKTsKLSAgICBtX2F2QXNzZXQuYWRvcHRDRihhc3NldFJlZik7Ci19Ci0KLXZvaWQgQVZGV3Jh
cHBlcjo6Y3JlYXRlUGxheWVyKCkKLXsKLSAgICBBU1NFUlQoIWF2UGxheWVyKCkgJiYgYXZQbGF5
ZXJJdGVtKCkpOwotCi0gICAgLy8gRklYTUU6IFdlIG5lZWQgYSB3YXkgdG8gY3JlYXRlIGEgQVZQ
bGF5ZXIgd2l0aG91dCBhbiBBVlBsYXllckl0ZW0sIHNlZSA8cmRhcjovL3Byb2JsZW0vOTg3Nzcz
MD4uCi0gICAgQVZDRlBsYXllclJlZiBwbGF5ZXJSZWYgPSBBVkNGUGxheWVyQ3JlYXRlV2l0aFBs
YXllckl0ZW1BbmRPcHRpb25zKGtDRkFsbG9jYXRvckRlZmF1bHQsIGF2UGxheWVySXRlbSgpLCAw
LCBtX25vdGlmaWNhdGlvblF1ZXVlKTsKLSAgICBtX2F2UGxheWVyLmFkb3B0Q0YocGxheWVyUmVm
KTsKLQotICAgIENGTm90aWZpY2F0aW9uQ2VudGVyUmVmIGNlbnRlciA9IENGTm90aWZpY2F0aW9u
Q2VudGVyR2V0TG9jYWxDZW50ZXIoKTsKLSAgICBBU1NFUlQoY2VudGVyKTsKLQotICAgIENGTm90
aWZpY2F0aW9uQ2VudGVyQWRkT2JzZXJ2ZXIoY2VudGVyLCBjYWxsYmFja0NvbnRleHQoKSwgbm90
aWZpY2F0aW9uQ2FsbGJhY2ssIEFWQ0ZQbGF5ZXJSYXRlQ2hhbmdlZE5vdGlmaWNhdGlvbiwgcGxh
eWVyUmVmLCBDRk5vdGlmaWNhdGlvblN1c3BlbnNpb25CZWhhdmlvckRlbGl2ZXJJbW1lZGlhdGVs
eSk7Ci0KLSAgICAvLyBBZGQgYSB0aW1lIG9ic2VydmVyLCBhc2sgdG8gYmUgY2FsbGVkIGluZnJl
cXVlbnRseSBiZWNhdXNlIHdlIGRvbid0IHJlYWxseSB3YW50IHBlcmlvZGljIGNhbGxiYWNrcyBi
dXQKLSAgICAvLyBvdXIgb2JzZXJ2ZXIgd2lsbCBhbHNvIGJlIGNhbGxlZCB3aGVuZXZlciBhIHNl
ZWsgaGFwcGVucy4KLSAgICBjb25zdCBkb3VibGUgdmVyeUxvbmdJbnRlcnZhbCA9IDYwKjYwKjYw
KjI0KjMwOwotICAgIG1fdGltZU9ic2VydmVyLmFkb3B0Q0YoQVZDRlBsYXllckNyZWF0ZVBlcmlv
ZGljVGltZU9ic2VydmVyRm9ySW50ZXJ2YWwocGxheWVyUmVmLCBDTVRpbWVNYWtlKHZlcnlMb25n
SW50ZXJ2YWwsIDEwKSwgbV9ub3RpZmljYXRpb25RdWV1ZSwgJnBlcmlvZGljVGltZU9ic2VydmVy
Q2FsbGJhY2ssIGNhbGxiYWNrQ29udGV4dCgpKSk7Ci19Ci0KLXZvaWQgQVZGV3JhcHBlcjo6Y3Jl
YXRlUGxheWVySXRlbSgpCi17Ci0gICAgQVNTRVJUKCFhdlBsYXllckl0ZW0oKSAmJiBhdkFzc2V0
KCkpOwotCi0gICAgLy8gQ3JlYXRlIHRoZSBwbGF5ZXIgaXRlbSBzbyB3ZSBiZWdpbiBsb2FkaW5n
IG1lZGlhIGRhdGEuCi0gICAgQVZDRlBsYXllckl0ZW1SZWYgaXRlbVJlZiA9IEFWQ0ZQbGF5ZXJJ
dGVtQ3JlYXRlV2l0aEFzc2V0KGtDRkFsbG9jYXRvckRlZmF1bHQsIGF2QXNzZXQoKSwgbV9ub3Rp
ZmljYXRpb25RdWV1ZSk7Ci0gICAgbV9hdlBsYXllckl0ZW0uYWRvcHRDRihpdGVtUmVmKTsKLQot
ICAgIENGTm90aWZpY2F0aW9uQ2VudGVyUmVmIGNlbnRlciA9IENGTm90aWZpY2F0aW9uQ2VudGVy
R2V0TG9jYWxDZW50ZXIoKTsKLSAgICBBU1NFUlQoY2VudGVyKTsKLQotICAgIENGTm90aWZpY2F0
aW9uQ2VudGVyQWRkT2JzZXJ2ZXIoY2VudGVyLCBjYWxsYmFja0NvbnRleHQoKSwgbm90aWZpY2F0
aW9uQ2FsbGJhY2ssIEFWQ0ZQbGF5ZXJJdGVtRGlkUGxheVRvRW5kVGltZU5vdGlmaWNhdGlvbiwg
aXRlbVJlZiwgQ0ZOb3RpZmljYXRpb25TdXNwZW5zaW9uQmVoYXZpb3JEZWxpdmVySW1tZWRpYXRl
bHkpOwotICAgIENGTm90aWZpY2F0aW9uQ2VudGVyQWRkT2JzZXJ2ZXIoY2VudGVyLCBjYWxsYmFj
a0NvbnRleHQoKSwgbm90aWZpY2F0aW9uQ2FsbGJhY2ssIEFWQ0ZQbGF5ZXJJdGVtU3RhdHVzQ2hh
bmdlZE5vdGlmaWNhdGlvbiwgaXRlbVJlZiwgQ0ZOb3RpZmljYXRpb25TdXNwZW5zaW9uQmVoYXZp
b3JEZWxpdmVySW1tZWRpYXRlbHkpOwotICAgIENGTm90aWZpY2F0aW9uQ2VudGVyQWRkT2JzZXJ2
ZXIoY2VudGVyLCBjYWxsYmFja0NvbnRleHQoKSwgbm90aWZpY2F0aW9uQ2FsbGJhY2ssIEFWQ0ZQ
bGF5ZXJJdGVtVHJhY2tzQ2hhbmdlZE5vdGlmaWNhdGlvbiwgaXRlbVJlZiwgQ0ZOb3RpZmljYXRp
b25TdXNwZW5zaW9uQmVoYXZpb3JEZWxpdmVySW1tZWRpYXRlbHkpOwotICAgIENGTm90aWZpY2F0
aW9uQ2VudGVyQWRkT2JzZXJ2ZXIoY2VudGVyLCBjYWxsYmFja0NvbnRleHQoKSwgbm90aWZpY2F0
aW9uQ2FsbGJhY2ssIEFWQ0ZQbGF5ZXJJdGVtU2Vla2FibGVUaW1lUmFuZ2VzQ2hhbmdlZE5vdGlm
aWNhdGlvbiwgaXRlbVJlZiwgQ0ZOb3RpZmljYXRpb25TdXNwZW5zaW9uQmVoYXZpb3JEZWxpdmVy
SW1tZWRpYXRlbHkpOwotICAgIENGTm90aWZpY2F0aW9uQ2VudGVyQWRkT2JzZXJ2ZXIoY2VudGVy
LCBjYWxsYmFja0NvbnRleHQoKSwgbm90aWZpY2F0aW9uQ2FsbGJhY2ssIEFWQ0ZQbGF5ZXJJdGVt
TG9hZGVkVGltZVJhbmdlc0NoYW5nZWROb3RpZmljYXRpb24sIGl0ZW1SZWYsIENGTm90aWZpY2F0
aW9uU3VzcGVuc2lvbkJlaGF2aW9yRGVsaXZlckltbWVkaWF0ZWx5KTsKLSAgICBDRk5vdGlmaWNh
dGlvbkNlbnRlckFkZE9ic2VydmVyKGNlbnRlciwgY2FsbGJhY2tDb250ZXh0KCksIG5vdGlmaWNh
dGlvbkNhbGxiYWNrLCBBVkNGUGxheWVySXRlbUlzUGxheWJhY2tMaWtlbHlUb0tlZXBVcENoYW5n
ZWROb3RpZmljYXRpb24sIGl0ZW1SZWYsIENGTm90aWZpY2F0aW9uU3VzcGVuc2lvbkJlaGF2aW9y
RGVsaXZlckltbWVkaWF0ZWx5KTsKLSAgICBDRk5vdGlmaWNhdGlvbkNlbnRlckFkZE9ic2VydmVy
KGNlbnRlciwgY2FsbGJhY2tDb250ZXh0KCksIG5vdGlmaWNhdGlvbkNhbGxiYWNrLCBBVkNGUGxh
eWVySXRlbUlzUGxheWJhY2tCdWZmZXJFbXB0eUNoYW5nZWROb3RpZmljYXRpb24sIGl0ZW1SZWYs
IENGTm90aWZpY2F0aW9uU3VzcGVuc2lvbkJlaGF2aW9yRGVsaXZlckltbWVkaWF0ZWx5KTsKLSAg
ICBDRk5vdGlmaWNhdGlvbkNlbnRlckFkZE9ic2VydmVyKGNlbnRlciwgY2FsbGJhY2tDb250ZXh0
KCksIG5vdGlmaWNhdGlvbkNhbGxiYWNrLCBBVkNGUGxheWVySXRlbUlzUGxheWJhY2tCdWZmZXJG
dWxsQ2hhbmdlZE5vdGlmaWNhdGlvbiwgaXRlbVJlZiwgQ0ZOb3RpZmljYXRpb25TdXNwZW5zaW9u
QmVoYXZpb3JEZWxpdmVySW1tZWRpYXRlbHkpOwotCi0gICAgQ0ZOb3RpZmljYXRpb25DZW50ZXJB
ZGRPYnNlcnZlcihjZW50ZXIsIGNhbGxiYWNrQ29udGV4dCgpLCBub3RpZmljYXRpb25DYWxsYmFj
aywgQ0FDRkNvbnRleHROZWVkc0ZsdXNoTm90aWZpY2F0aW9uKCksIDAsIENGTm90aWZpY2F0aW9u
U3VzcGVuc2lvbkJlaGF2aW9yRGVsaXZlckltbWVkaWF0ZWx5KTsKLX0KLQotdm9pZCBBVkZXcmFw
cGVyOjpwZXJpb2RpY1RpbWVPYnNlcnZlckNhbGxiYWNrKEFWQ0ZQbGF5ZXJSZWYsIENNVGltZSBj
bVRpbWUsIHZvaWQqIGNvbnRleHQpCi17Ci0gICAgTXV0ZXhMb2NrZXIgbG9ja2VyKG1hcExvY2so
KSk7Ci0gICAgQVZGV3JhcHBlciogc2VsZiA9IGF2ZldyYXBwZXJGb3JDYWxsYmFja0NvbnRleHQo
Y29udGV4dCk7Ci0gICAgaWYgKCFzZWxmKSB7Ci0gICAgICAgIExPRyhNZWRpYSwgIkFWRldyYXBw
ZXI6OnBlcmlvZGljVGltZU9ic2VydmVyQ2FsbGJhY2sgaW52b2tlZCBmb3IgZGVsZXRlZCBBVkZX
cmFwcGVyICVkIiwgcmVpbnRlcnByZXRfY2FzdDx1aW50cHRyX3Q+KGNvbnRleHQpKTsKLSAgICAg
ICAgcmV0dXJuOwotICAgIH0KLQotICAgIGRvdWJsZSB0aW1lID0gc3RkOjptYXgoMC4wLCBDTVRp
bWVHZXRTZWNvbmRzKGNtVGltZSkpOyAvLyBDbGFtcCB0byB6ZXJvLCBuZWdhdGl2ZSB2YWx1ZXMg
YXJlIHNvbWV0aW1lcyByZXBvcnRlZC4KLSAgICBzZWxmLT5tX293bmVyLT5zY2hlZHVsZU1haW5U
aHJlYWROb3RpZmljYXRpb24oTWVkaWFQbGF5ZXJQcml2YXRlQVZGb3VuZGF0aW9uOjpOb3RpZmlj
YXRpb246OlBsYXllclRpbWVDaGFuZ2VkLCB0aW1lKTsKLX0KLQotdm9pZCBBVkZXcmFwcGVyOjpu
b3RpZmljYXRpb25DYWxsYmFjayhDRk5vdGlmaWNhdGlvbkNlbnRlclJlZiwgdm9pZCogb2JzZXJ2
ZXIsIENGU3RyaW5nUmVmIHByb3BlcnR5TmFtZSwgY29uc3Qgdm9pZCogb2JqZWN0LCBDRkRpY3Rp
b25hcnlSZWYpCi17Ci0gICAgTXV0ZXhMb2NrZXIgbG9ja2VyKG1hcExvY2soKSk7Ci0gICAgQVZG
V3JhcHBlciogc2VsZiA9IGF2ZldyYXBwZXJGb3JDYWxsYmFja0NvbnRleHQob2JzZXJ2ZXIpOwot
ICAgIAotICAgIGlmICghc2VsZikgewotICAgICAgICBMT0coTWVkaWEsICJBVkZXcmFwcGVyOjpu
b3RpZmljYXRpb25DYWxsYmFjayBpbnZva2VkIGZvciBkZWxldGVkIEFWRldyYXBwZXIgJWQiLCBy
ZWludGVycHJldF9jYXN0PHVpbnRwdHJfdD4ob2JzZXJ2ZXIpKTsKLSAgICAgICAgcmV0dXJuOwot
ICAgIH0KLQotI2lmICFMT0dfRElTQUJMRUQKLSAgICBjaGFyIG5vdGlmaWNhdGlvbk5hbWVbMjU2
XTsKLSAgICBDRlN0cmluZ0dldENTdHJpbmcocHJvcGVydHlOYW1lLCBub3RpZmljYXRpb25OYW1l
LCBzaXplb2Yobm90aWZpY2F0aW9uTmFtZSksIGtDRlN0cmluZ0VuY29kaW5nQVNDSUkpOwotICAg
IExPRyhNZWRpYSwgIkFWRldyYXBwZXI6Om5vdGlmaWNhdGlvbkNhbGxiYWNrKCVwKSAlcyIsIHNl
bGYsIG5vdGlmaWNhdGlvbk5hbWUpOwotI2VuZGlmCi0KLSAgICBpZiAoQ0ZFcXVhbChwcm9wZXJ0
eU5hbWUsIEFWQ0ZQbGF5ZXJJdGVtRGlkUGxheVRvRW5kVGltZU5vdGlmaWNhdGlvbikpCi0gICAg
ICAgIHNlbGYtPm1fb3duZXItPnNjaGVkdWxlTWFpblRocmVhZE5vdGlmaWNhdGlvbihNZWRpYVBs
YXllclByaXZhdGVBVkZvdW5kYXRpb246Ok5vdGlmaWNhdGlvbjo6SXRlbURpZFBsYXlUb0VuZFRp
bWUpOwotICAgIGVsc2UgaWYgKENGRXF1YWwocHJvcGVydHlOYW1lLCBBVkNGUGxheWVySXRlbVRy
YWNrc0NoYW5nZWROb3RpZmljYXRpb24pKQotICAgICAgICBzZWxmLT5tX293bmVyLT5zY2hlZHVs
ZU1haW5UaHJlYWROb3RpZmljYXRpb24oTWVkaWFQbGF5ZXJQcml2YXRlQVZGb3VuZGF0aW9uOjpO
b3RpZmljYXRpb246Okl0ZW1UcmFja3NDaGFuZ2VkKTsKLSAgICBlbHNlIGlmIChDRkVxdWFsKHBy
b3BlcnR5TmFtZSwgQVZDRlBsYXllckl0ZW1TdGF0dXNDaGFuZ2VkTm90aWZpY2F0aW9uKSkgewot
ICAgICAgICBBVkNGVVJMQXNzZXRSZWYgYXNzZXQgPSBBVkNGUGxheWVySXRlbUdldEFzc2V0KHNl
bGYtPmF2UGxheWVySXRlbSgpKTsKLSAgICAgICAgaWYgKGFzc2V0KQotICAgICAgICAgICAgc2Vs
Zi0+c2V0QXNzZXQoYXNzZXQpOwotICAgICAgICBzZWxmLT5tX293bmVyLT5zY2hlZHVsZU1haW5U
aHJlYWROb3RpZmljYXRpb24oTWVkaWFQbGF5ZXJQcml2YXRlQVZGb3VuZGF0aW9uOjpOb3RpZmlj
YXRpb246Okl0ZW1TdGF0dXNDaGFuZ2VkKTsKLSAgICB9IGVsc2UgaWYgKENGRXF1YWwocHJvcGVy
dHlOYW1lLCBBVkNGUGxheWVySXRlbVNlZWthYmxlVGltZVJhbmdlc0NoYW5nZWROb3RpZmljYXRp
b24pKQotICAgICAgICBzZWxmLT5tX293bmVyLT5zY2hlZHVsZU1haW5UaHJlYWROb3RpZmljYXRp
b24oTWVkaWFQbGF5ZXJQcml2YXRlQVZGb3VuZGF0aW9uOjpOb3RpZmljYXRpb246Okl0ZW1TZWVr
YWJsZVRpbWVSYW5nZXNDaGFuZ2VkKTsKLSAgICBlbHNlIGlmIChDRkVxdWFsKHByb3BlcnR5TmFt
ZSwgQVZDRlBsYXllckl0ZW1Mb2FkZWRUaW1lUmFuZ2VzQ2hhbmdlZE5vdGlmaWNhdGlvbikpCi0g
ICAgICAgIHNlbGYtPm1fb3duZXItPnNjaGVkdWxlTWFpblRocmVhZE5vdGlmaWNhdGlvbihNZWRp
YVBsYXllclByaXZhdGVBVkZvdW5kYXRpb246Ok5vdGlmaWNhdGlvbjo6SXRlbUxvYWRlZFRpbWVS
YW5nZXNDaGFuZ2VkKTsKLSAgICBlbHNlIGlmIChDRkVxdWFsKHByb3BlcnR5TmFtZSwgQVZDRlBs
YXllckl0ZW1QcmVzZW50YXRpb25TaXplQ2hhbmdlZE5vdGlmaWNhdGlvbikpCi0gICAgICAgIHNl
bGYtPm1fb3duZXItPnNjaGVkdWxlTWFpblRocmVhZE5vdGlmaWNhdGlvbihNZWRpYVBsYXllclBy
aXZhdGVBVkZvdW5kYXRpb246Ok5vdGlmaWNhdGlvbjo6SXRlbVByZXNlbnRhdGlvblNpemVDaGFu
Z2VkKTsKLSAgICBlbHNlIGlmIChDRkVxdWFsKHByb3BlcnR5TmFtZSwgQVZDRlBsYXllckl0ZW1J
c1BsYXliYWNrTGlrZWx5VG9LZWVwVXBDaGFuZ2VkTm90aWZpY2F0aW9uKSkKLSAgICAgICAgc2Vs
Zi0+bV9vd25lci0+c2NoZWR1bGVNYWluVGhyZWFkTm90aWZpY2F0aW9uKE1lZGlhUGxheWVyUHJp
dmF0ZUFWRm91bmRhdGlvbjo6Tm90aWZpY2F0aW9uOjpJdGVtSXNQbGF5YmFja0xpa2VseVRvS2Vl
cFVwQ2hhbmdlZCk7Ci0gICAgZWxzZSBpZiAoQ0ZFcXVhbChwcm9wZXJ0eU5hbWUsIEFWQ0ZQbGF5
ZXJJdGVtSXNQbGF5YmFja0J1ZmZlckVtcHR5Q2hhbmdlZE5vdGlmaWNhdGlvbikpCi0gICAgICAg
IHNlbGYtPm1fb3duZXItPnNjaGVkdWxlTWFpblRocmVhZE5vdGlmaWNhdGlvbihNZWRpYVBsYXll
clByaXZhdGVBVkZvdW5kYXRpb246Ok5vdGlmaWNhdGlvbjo6SXRlbUlzUGxheWJhY2tCdWZmZXJF
bXB0eUNoYW5nZWQpOwotICAgIGVsc2UgaWYgKENGRXF1YWwocHJvcGVydHlOYW1lLCBBVkNGUGxh
eWVySXRlbUlzUGxheWJhY2tCdWZmZXJGdWxsQ2hhbmdlZE5vdGlmaWNhdGlvbikpCi0gICAgICAg
IHNlbGYtPm1fb3duZXItPnNjaGVkdWxlTWFpblRocmVhZE5vdGlmaWNhdGlvbihNZWRpYVBsYXll
clByaXZhdGVBVkZvdW5kYXRpb246Ok5vdGlmaWNhdGlvbjo6SXRlbUlzUGxheWJhY2tCdWZmZXJG
dWxsQ2hhbmdlZCk7Ci0gICAgZWxzZSBpZiAoQ0ZFcXVhbChwcm9wZXJ0eU5hbWUsIEFWQ0ZQbGF5
ZXJSYXRlQ2hhbmdlZE5vdGlmaWNhdGlvbikpCi0gICAgICAgIHNlbGYtPm1fb3duZXItPnNjaGVk
dWxlTWFpblRocmVhZE5vdGlmaWNhdGlvbihNZWRpYVBsYXllclByaXZhdGVBVkZvdW5kYXRpb246
Ok5vdGlmaWNhdGlvbjo6UGxheWVyUmF0ZUNoYW5nZWQpOwotICAgIGVsc2UgaWYgKENGRXF1YWwo
cHJvcGVydHlOYW1lLCBDQUNGQ29udGV4dE5lZWRzRmx1c2hOb3RpZmljYXRpb24oKSkpCi0gICAg
ICAgIHNlbGYtPm1fb3duZXItPnNjaGVkdWxlTWFpblRocmVhZE5vdGlmaWNhdGlvbihNZWRpYVBs
YXllclByaXZhdGVBVkZvdW5kYXRpb246Ok5vdGlmaWNhdGlvbjo6Q29udGVudHNOZWVkc0Rpc3Bs
YXkpOwotICAgIGVsc2UKLSAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci19Ci0KLXZvaWQg
QVZGV3JhcHBlcjo6bG9hZFBsYXlhYmxlQ29tcGxldGlvbkNhbGxiYWNrKEFWQ0ZBc3NldFJlZiwg
dm9pZCogY29udGV4dCkKLXsKLSAgICBNdXRleExvY2tlciBsb2NrZXIobWFwTG9jaygpKTsKLSAg
ICBBVkZXcmFwcGVyKiBzZWxmID0gYXZmV3JhcHBlckZvckNhbGxiYWNrQ29udGV4dChjb250ZXh0
KTsKLSAgICBpZiAoIXNlbGYpIHsKLSAgICAgICAgTE9HKE1lZGlhLCAiQVZGV3JhcHBlcjo6bG9h
ZFBsYXlhYmxlQ29tcGxldGlvbkNhbGxiYWNrIGludm9rZWQgZm9yIGRlbGV0ZWQgQVZGV3JhcHBl
ciAlZCIsIHJlaW50ZXJwcmV0X2Nhc3Q8dWludHB0cl90Pihjb250ZXh0KSk7Ci0gICAgICAgIHJl
dHVybjsKLSAgICB9Ci0KLSAgICBMT0coTWVkaWEsICJBVkZXcmFwcGVyOjpsb2FkUGxheWFibGVD
b21wbGV0aW9uQ2FsbGJhY2soJXApIiwgc2VsZik7Ci0gICAgc2VsZi0+bV9vd25lci0+c2NoZWR1
bGVNYWluVGhyZWFkTm90aWZpY2F0aW9uKE1lZGlhUGxheWVyUHJpdmF0ZUFWRm91bmRhdGlvbjo6
Tm90aWZpY2F0aW9uOjpBc3NldFBsYXlhYmlsaXR5S25vd24pOwotfQotCi12b2lkIEFWRldyYXBw
ZXI6OmNoZWNrUGxheWFiaWxpdHkoKQotewotICAgIExPRyhNZWRpYSwgIkFWRldyYXBwZXI6OmNo
ZWNrUGxheWFiaWxpdHkoJXApIiwgdGhpcyk7Ci0KLSAgICBzdGF0aWMgQ0ZBcnJheVJlZiBwcm9w
ZXJ0eUtleU5hbWU7Ci0gICAgaWYgKCFwcm9wZXJ0eUtleU5hbWUpIHsKLSAgICAgICAgc3RhdGlj
IGNvbnN0IENGU3RyaW5nUmVmIGtleU5hbWVzW10gPSB7IAotICAgICAgICAgICAgQVZDRkFzc2V0
UHJvcGVydHlQbGF5YWJsZQotICAgICAgICB9OwotICAgICAgICBwcm9wZXJ0eUtleU5hbWUgPSBD
RkFycmF5Q3JlYXRlKDAsIChjb25zdCB2b2lkKiopa2V5TmFtZXMsIHNpemVvZihrZXlOYW1lcykg
LyBzaXplb2Yoa2V5TmFtZXNbMF0pLCAma0NGVHlwZUFycmF5Q2FsbEJhY2tzKTsKLSAgICB9Ci0K
LSAgICBBVkNGQXNzZXRMb2FkVmFsdWVzQXN5bmNocm9ub3VzbHlGb3JQcm9wZXJ0aWVzKGF2QXNz
ZXQoKSwgcHJvcGVydHlLZXlOYW1lLCBsb2FkUGxheWFibGVDb21wbGV0aW9uQ2FsbGJhY2ssIGNh
bGxiYWNrQ29udGV4dCgpKTsKLX0KLQotdm9pZCBBVkZXcmFwcGVyOjpsb2FkTWV0YWRhdGFDb21w
bGV0aW9uQ2FsbGJhY2soQVZDRkFzc2V0UmVmLCB2b2lkKiBjb250ZXh0KQotewotICAgIE11dGV4
TG9ja2VyIGxvY2tlcihtYXBMb2NrKCkpOwotICAgIEFWRldyYXBwZXIqIHNlbGYgPSBhdmZXcmFw
cGVyRm9yQ2FsbGJhY2tDb250ZXh0KGNvbnRleHQpOwotICAgIGlmICghc2VsZikgewotICAgICAg
ICBMT0coTWVkaWEsICJBVkZXcmFwcGVyOjpsb2FkTWV0YWRhdGFDb21wbGV0aW9uQ2FsbGJhY2sg
aW52b2tlZCBmb3IgZGVsZXRlZCBBVkZXcmFwcGVyICVkIiwgcmVpbnRlcnByZXRfY2FzdDx1aW50
cHRyX3Q+KGNvbnRleHQpKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIExPRyhNZWRp
YSwgIkFWRldyYXBwZXI6OmxvYWRNZXRhZGF0YUNvbXBsZXRpb25DYWxsYmFjayglcCkiLCBzZWxm
KTsKLSAgICBzZWxmLT5tX293bmVyLT5zY2hlZHVsZU1haW5UaHJlYWROb3RpZmljYXRpb24oTWVk
aWFQbGF5ZXJQcml2YXRlQVZGb3VuZGF0aW9uOjpOb3RpZmljYXRpb246OkFzc2V0TWV0YWRhdGFM
b2FkZWQpOwotfQotCi12b2lkIEFWRldyYXBwZXI6OmJlZ2luTG9hZGluZ01ldGFkYXRhKCkKLXsK
LSAgICBBU1NFUlQoYXZBc3NldCgpKTsKLSAgICBMT0coTWVkaWEsICJBVkZXcmFwcGVyOjpiZWdp
bkxvYWRpbmdNZXRhZGF0YSglcCkgLSByZXF1ZXN0aW5nIG1ldGFkYXRhIGxvYWRpbmciLCB0aGlz
KTsKLSAgICBBVkNGQXNzZXRMb2FkVmFsdWVzQXN5bmNocm9ub3VzbHlGb3JQcm9wZXJ0aWVzKGF2
QXNzZXQoKSwgbWV0YWRhdGFLZXlOYW1lcygpLCBsb2FkTWV0YWRhdGFDb21wbGV0aW9uQ2FsbGJh
Y2ssIGNhbGxiYWNrQ29udGV4dCgpKTsKLX0KLQotdm9pZCBBVkZXcmFwcGVyOjpzZWVrQ29tcGxl
dGVkQ2FsbGJhY2soQVZDRlBsYXllckl0ZW1SZWYsIEJvb2xlYW4gZmluaXNoZWQsIHZvaWQqIGNv
bnRleHQpCi17Ci0gICAgTXV0ZXhMb2NrZXIgbG9ja2VyKG1hcExvY2soKSk7Ci0gICAgQVZGV3Jh
cHBlciogc2VsZiA9IGF2ZldyYXBwZXJGb3JDYWxsYmFja0NvbnRleHQoY29udGV4dCk7Ci0gICAg
aWYgKCFzZWxmKSB7Ci0gICAgICAgIExPRyhNZWRpYSwgIkFWRldyYXBwZXI6OnNlZWtDb21wbGV0
ZWRDYWxsYmFjayBpbnZva2VkIGZvciBkZWxldGVkIEFWRldyYXBwZXIgJWQiLCByZWludGVycHJl
dF9jYXN0PHVpbnRwdHJfdD4oY29udGV4dCkpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0g
ICAgTE9HKE1lZGlhLCAiQVZGV3JhcHBlcjo6c2Vla0NvbXBsZXRlZENhbGxiYWNrKCVwKSIsIHNl
bGYpOwotICAgIHNlbGYtPm1fb3duZXItPnNjaGVkdWxlTWFpblRocmVhZE5vdGlmaWNhdGlvbihN
ZWRpYVBsYXllclByaXZhdGVBVkZvdW5kYXRpb246Ok5vdGlmaWNhdGlvbjo6U2Vla0NvbXBsZXRl
ZCwgc3RhdGljX2Nhc3Q8Ym9vbD4oZmluaXNoZWQpKTsKLX0KLQotdm9pZCBBVkZXcmFwcGVyOjpz
ZWVrVG9UaW1lKGZsb2F0IHRpbWUpCi17Ci0gICAgQVNTRVJUKGF2UGxheWVySXRlbSgpKTsKLSAg
ICBBVkNGUGxheWVySXRlbVNlZWtUb1RpbWVXaXRoVG9sZXJhbmNlQW5kQ29tcGxldGlvbkNhbGxi
YWNrKGF2UGxheWVySXRlbSgpLCBDTVRpbWVNYWtlV2l0aFNlY29uZHModGltZSwgNjAwKSwKLSAg
ICAgICAga0NNVGltZVplcm8sIGtDTVRpbWVaZXJvLCAmc2Vla0NvbXBsZXRlZENhbGxiYWNrLCBj
YWxsYmFja0NvbnRleHQoKSk7Ci19Ci0KLXZvaWQgQVZGV3JhcHBlcjo6c2V0QXNzZXQoQVZDRlVS
TEFzc2V0UmVmIGFzc2V0KQotewotICAgIGlmIChhc3NldCA9PSBhdkFzc2V0KCkpCi0gICAgICAg
IHJldHVybjsKLQotICAgIEFWQ0ZBc3NldENhbmNlbExvYWRpbmcoYXZBc3NldCgpKTsKLSAgICBt
X2F2QXNzZXQuYWRvcHRDRihhc3NldCk7Ci19Ci0KLVBsYXRmb3JtTGF5ZXIqIEFWRldyYXBwZXI6
OnBsYXRmb3JtTGF5ZXIoKQotewotICAgIGlmIChtX3ZpZGVvTGF5ZXJXcmFwcGVyKQotICAgICAg
ICByZXR1cm4gbV92aWRlb0xheWVyV3JhcHBlci0+cGxhdGZvcm1MYXllcigpOwotCi0gICAgaWYg
KCF2aWRlb0xheWVyKCkpCi0gICAgICAgIHJldHVybiAwOwotCi0gICAgLy8gQ3JlYXRlIGEgUGxh
dGZvcm1DQUxheWVyIHNvIHdlIGNhbiByZXNpemUgdGhlIHZpZGVvIGxheWVyIHRvIG1hdGNoIHRo
ZSBlbGVtZW50IHNpemUuCi0gICAgbV9sYXllckNsaWVudCA9IGFkb3B0UHRyKG5ldyBMYXllckNs
aWVudCh0aGlzKSk7Ci0gICAgaWYgKCFtX2xheWVyQ2xpZW50KQotICAgICAgICByZXR1cm4gMDsK
LQotICAgIG1fdmlkZW9MYXllcldyYXBwZXIgPSBQbGF0Zm9ybUNBTGF5ZXI6OmNyZWF0ZShQbGF0
Zm9ybUNBTGF5ZXI6OkxheWVyVHlwZUxheWVyLCBtX2xheWVyQ2xpZW50LmdldCgpKTsKLSAgICBp
ZiAoIW1fdmlkZW9MYXllcldyYXBwZXIpCi0gICAgICAgIHJldHVybiAwOwotCi0gICAgQ0FDRkxh
eWVyUmVmIGxheWVyUmVmID0gQVZDRlBsYXllckxheWVyQ29weUNBQ0ZMYXllcihtX2F2Q0ZWaWRl
b0xheWVyLmdldCgpKTsKLSAgICBtX2NhVmlkZW9MYXllci5hZG9wdENGKGxheWVyUmVmKTsKLQot
ICAgIENBQ0ZMYXllckluc2VydFN1YmxheWVyKG1fdmlkZW9MYXllcldyYXBwZXItPnBsYXRmb3Jt
TGF5ZXIoKSwgbV9jYVZpZGVvTGF5ZXIuZ2V0KCksIDApOwotICAgIG1fdmlkZW9MYXllcldyYXBw
ZXItPnNldEFuY2hvclBvaW50KEZsb2F0UG9pbnQzRCgpKTsKLSAgICBtX3ZpZGVvTGF5ZXJXcmFw
cGVyLT5zZXROZWVkc0xheW91dCgpOwotCi0gICAgcmV0dXJuIG1fdmlkZW9MYXllcldyYXBwZXIt
PnBsYXRmb3JtTGF5ZXIoKTsKLX0KLQotdm9pZCBBVkZXcmFwcGVyOjpjcmVhdGVBVkNGVmlkZW9M
YXllcigpCi17Ci0gICAgaWYgKCFhdlBsYXllcigpIHx8IG1fYXZDRlZpZGVvTGF5ZXIpCi0gICAg
ICAgIHJldHVybjsKLQotICAgIC8vIFRoZSBsYXllciB3aWxsIGdldCBob29rZWQgdXAgdmlhIFJl
bmRlckxheWVyQmFja2luZzo6dXBkYXRlR3JhcGhpY3NMYXllckNvbmZpZ3VyYXRpb24oKS4KLSAg
ICBtX2F2Q0ZWaWRlb0xheWVyLmFkb3B0Q0YoQVZDRlBsYXllckxheWVyQ3JlYXRlV2l0aEFWQ0ZQ
bGF5ZXIoa0NGQWxsb2NhdG9yRGVmYXVsdCwgYXZQbGF5ZXIoKSwgbV9ub3RpZmljYXRpb25RdWV1
ZSkpOwotICAgIExPRyhNZWRpYSwgIkFWRldyYXBwZXI6OmNyZWF0ZUFWQ0ZWaWRlb0xheWVyKCVw
KSAtIHJldHVybmluZyAlcCIsIHRoaXMsIHZpZGVvTGF5ZXIoKSk7Ci19Ci0KLXZvaWQgQVZGV3Jh
cHBlcjo6ZGVzdHJveVZpZGVvTGF5ZXIoKQotewotICAgIExPRyhNZWRpYSwgIkFWRldyYXBwZXI6
OmRlc3Ryb3lWaWRlb0xheWVyKCVwKSIsIHRoaXMpOwotICAgIG1fbGF5ZXJDbGllbnQgPSBudWxs
cHRyOwotICAgIG1fY2FWaWRlb0xheWVyID0gMDsKLSAgICBtX3ZpZGVvTGF5ZXJXcmFwcGVyID0g
MDsKLSAgICBpZiAoIW1fYXZDRlZpZGVvTGF5ZXIuZ2V0KCkpCi0gICAgICAgIHJldHVybjsKLQot
ICAgIEFWQ0ZQbGF5ZXJMYXllclNldFBsYXllcigoQVZDRlBsYXllckxheWVyUmVmKW1fYXZDRlZp
ZGVvTGF5ZXIuZ2V0KCksIDApOwotICAgIG1fYXZDRlZpZGVvTGF5ZXIgPSAwOwotfQotCi12b2lk
IEFWRldyYXBwZXI6OnNldFZpZGVvTGF5ZXJOZWVkc0NvbW1pdCgpCi17Ci0gICAgaWYgKG1fdmlk
ZW9MYXllcldyYXBwZXIpCi0gICAgICAgIG1fdmlkZW9MYXllcldyYXBwZXItPnNldE5lZWRzQ29t
bWl0KCk7Ci19Ci0KLXZvaWQgQVZGV3JhcHBlcjo6c2V0VmlkZW9MYXllckhpZGRlbihib29sIHZh
bHVlKQotewotICAgIGlmIChtX3ZpZGVvTGF5ZXJXcmFwcGVyKQotICAgICAgICBtX3ZpZGVvTGF5
ZXJXcmFwcGVyLT5zZXRIaWRkZW4odmFsdWUpOwotfQotCi12b2lkIEFWRldyYXBwZXI6OmNyZWF0
ZUltYWdlR2VuZXJhdG9yKCkKLXsKLSAgICBpZiAoIWF2QXNzZXQoKSB8fCBtX2ltYWdlR2VuZXJh
dG9yKQotICAgICAgICByZXR1cm47Ci0KLSAgICBtX2ltYWdlR2VuZXJhdG9yLmFkb3B0Q0YoQVZD
RkFzc2V0SW1hZ2VHZW5lcmF0b3JDcmVhdGVXaXRoQXNzZXQoa0NGQWxsb2NhdG9yRGVmYXVsdCwg
YXZBc3NldCgpKSk7Ci0KLSAgICBBVkNGQXNzZXRJbWFnZUdlbmVyYXRvclNldEFwZXJ0dXJlTW9k
ZShtX2ltYWdlR2VuZXJhdG9yLmdldCgpLCBBVkNGQXNzZXRJbWFnZUdlbmVyYXRvckFwZXJ0dXJl
TW9kZUNsZWFuQXBlcnR1cmUpOwotICAgIEFWQ0ZBc3NldEltYWdlR2VuZXJhdG9yU2V0UmVxdWVz
dGVkVGltZVRvbGVyYW5jZUJlZm9yZShtX2ltYWdlR2VuZXJhdG9yLmdldCgpLCBrQ01UaW1lWmVy
byk7Ci0gICAgQVZDRkFzc2V0SW1hZ2VHZW5lcmF0b3JTZXRSZXF1ZXN0ZWRUaW1lVG9sZXJhbmNl
QWZ0ZXIobV9pbWFnZUdlbmVyYXRvci5nZXQoKSwga0NNVGltZVplcm8pOwotICAgIEFWQ0ZBc3Nl
dEltYWdlR2VuZXJhdG9yU2V0QXBwbGllc1ByZWZlcnJlZFRyYWNrVHJhbnNmb3JtKG1faW1hZ2VH
ZW5lcmF0b3IuZ2V0KCksIHRydWUpOwotCi0gICAgTE9HKE1lZGlhLCAiQVZGV3JhcHBlcjo6Y3Jl
YXRlSW1hZ2VHZW5lcmF0b3IoJXApIC0gcmV0dXJuaW5nICVwIiwgdGhpcywgbV9pbWFnZUdlbmVy
YXRvci5nZXQoKSk7Ci19Ci0KLXZvaWQgQVZGV3JhcHBlcjo6ZGVzdHJveUltYWdlR2VuZXJhdG9y
KCkKLXsKLSAgICBMT0coTWVkaWEsICJBVkZXcmFwcGVyOjpkZXN0cm95SW1hZ2VHZW5lcmF0b3Io
JXApIiwgdGhpcyk7Ci0gICAgbV9pbWFnZUdlbmVyYXRvciA9IDA7Ci19Ci0KLVJldGFpblB0cjxD
R0ltYWdlUmVmPiBBVkZXcmFwcGVyOjpjcmVhdGVJbWFnZUZvclRpbWVJblJlY3QoZmxvYXQgdGlt
ZSwgY29uc3QgSW50UmVjdCYgcmVjdCkKLXsKLSAgICBpZiAoIW1faW1hZ2VHZW5lcmF0b3IpCi0g
ICAgICAgIHJldHVybiAwOwotCi0jaWYgIUxPR19ESVNBQkxFRAotICAgIGRvdWJsZSBzdGFydCA9
IFdURjo6Y3VycmVudFRpbWUoKTsKLSNlbmRpZgotCi0gICAgQVZDRkFzc2V0SW1hZ2VHZW5lcmF0
b3JTZXRNYXhpbXVtU2l6ZShtX2ltYWdlR2VuZXJhdG9yLmdldCgpLCBDR1NpemUocmVjdC5zaXpl
KCkpKTsKLSAgICBDR0ltYWdlUmVmIGltYWdlID0gQVZDRkFzc2V0SW1hZ2VHZW5lcmF0b3JDb3B5
Q0dJbWFnZUF0VGltZShtX2ltYWdlR2VuZXJhdG9yLmdldCgpLCBDTVRpbWVNYWtlV2l0aFNlY29u
ZHModGltZSwgNjAwKSwgMCwgMCk7Ci0KLSNpZiAhTE9HX0RJU0FCTEVECi0gICAgZG91YmxlIGR1
cmF0aW9uID0gV1RGOjpjdXJyZW50VGltZSgpIC0gc3RhcnQ7Ci0gICAgTE9HKE1lZGlhLCAiQVZG
V3JhcHBlcjo6Y3JlYXRlSW1hZ2VGb3JUaW1lSW5SZWN0KCVwKSAtIGNyZWF0aW5nIGltYWdlIHRv
b2sgJS40ZiIsIHRoaXMsIG5hcnJvd1ByZWNpc2lvblRvRmxvYXQoZHVyYXRpb24pKTsKLSNlbmRp
ZgotCi0gICAgcmV0dXJuIGltYWdlOwotfQotCi12b2lkIExheWVyQ2xpZW50OjpwbGF0Zm9ybUNB
TGF5ZXJMYXlvdXRTdWJsYXllcnNPZkxheWVyKFBsYXRmb3JtQ0FMYXllciogd3JhcHBlckxheWVy
KQotewotICAgIEFTU0VSVChtX3BhcmVudCk7Ci0gICAgQVNTRVJUKG1fcGFyZW50LT52aWRlb0xh
eWVyV3JhcHBlcigpID09IHdyYXBwZXJMYXllci0+cGxhdGZvcm1MYXllcigpKTsKLQotICAgIENH
UmVjdCBib3VuZHMgPSB3cmFwcGVyTGF5ZXItPmJvdW5kcygpOwotICAgIENHUG9pbnQgYW5jaG9y
ID0gQ0FDRkxheWVyR2V0QW5jaG9yUG9pbnQobV9wYXJlbnQtPmNhVmlkZW9MYXllcigpKTsKLSAg
ICBGbG9hdFBvaW50IHBvc2l0aW9uKGJvdW5kcy5zaXplLndpZHRoICogYW5jaG9yLngsIGJvdW5k
cy5zaXplLmhlaWdodCAqIGFuY2hvci55KTsgCi0KLSAgICBDQUNGTGF5ZXJTZXRQb3NpdGlvbiht
X3BhcmVudC0+Y2FWaWRlb0xheWVyKCksIHBvc2l0aW9uKTsKLSAgICBDQUNGTGF5ZXJTZXRCb3Vu
ZHMobV9wYXJlbnQtPmNhVmlkZW9MYXllcigpLCBib3VuZHMpOwotfQotCi19IC8vIG5hbWVzcGFj
ZSBXZWJDb3JlCi0KLSNlbHNlCi0vLyBBVkZvdW5kYXRpb24gc2hvdWxkIGFsd2F5cyBiZSBlbmFi
bGVkIGZvciBBcHBsZSBwcm9kdWN0aW9uIGJ1aWxkcy4KLSNpZiBfX1BST0RVQ1RJT05fXyAmJiAh
VVNFKEFWRk9VTkRBVElPTikKLSNlcnJvciBBVkZvdW5kYXRpb24gaXMgbm90IGVuYWJsZWQhCi0j
ZW5kaWYgLy8gX19QUk9EVUNUSU9OX18gJiYgIVVTRShBVkZPVU5EQVRJT04pCi0jZW5kaWYgLy8g
VVNFKEFWRk9VTkRBVElPTikKLSNlbmRpZiAvLyBQTEFURk9STShXSU4pICYmIEVOQUJMRShWSURF
TykKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2F2Zm91bmRhdGlvbi9N
ZWRpYVBsYXllclByaXZhdGVBVkZvdW5kYXRpb25DRi5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2F2Zm91bmRhdGlvbi9NZWRpYVBsYXllclByaXZhdGVB
VkZvdW5kYXRpb25DRi5oCShyZXZpc2lvbiA5MzIxNSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2F2Zm91bmRhdGlvbi9NZWRpYVBsYXllclByaXZhdGVBVkZvdW5kYXRpb25D
Ri5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDEwOSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChD
KSAyMDExIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
LSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMn
JyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IKLSAqIENP
TlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBC
VVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0g
KiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCi0gKi8KLQotI2lmbmRlZiBN
ZWRpYVBsYXllclByaXZhdGVBVkZvdW5kYXRpb25DRl9oCi0jZGVmaW5lIE1lZGlhUGxheWVyUHJp
dmF0ZUFWRm91bmRhdGlvbkNGX2gKLQotI2lmIFBMQVRGT1JNKFdJTikgJiYgRU5BQkxFKFZJREVP
KSAmJiBVU0UoQVZGT1VOREFUSU9OKQotCi0jaW5jbHVkZSAiTWVkaWFQbGF5ZXJQcml2YXRlQVZG
b3VuZGF0aW9uLmgiCi0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotY2xhc3MgQVZGV3JhcHBlcjsK
LQotY2xhc3MgTWVkaWFQbGF5ZXJQcml2YXRlQVZGb3VuZGF0aW9uQ0YgOiBwdWJsaWMgTWVkaWFQ
bGF5ZXJQcml2YXRlQVZGb3VuZGF0aW9uIHsKLXB1YmxpYzoKLSAgICB2aXJ0dWFsIH5NZWRpYVBs
YXllclByaXZhdGVBVkZvdW5kYXRpb25DRigpOwotCi0gICAgc3RhdGljIHZvaWQgcmVnaXN0ZXJN
ZWRpYUVuZ2luZShNZWRpYUVuZ2luZVJlZ2lzdHJhcik7Ci0KLXByaXZhdGU6Ci0gICAgTWVkaWFQ
bGF5ZXJQcml2YXRlQVZGb3VuZGF0aW9uQ0YoTWVkaWFQbGF5ZXIqKTsKLQotICAgIC8vIEVuZ2lu
ZSBzdXBwb3J0Ci0gICAgc3RhdGljIFBhc3NPd25QdHI8TWVkaWFQbGF5ZXJQcml2YXRlSW50ZXJm
YWNlPiBjcmVhdGUoTWVkaWFQbGF5ZXIqKTsKLSAgICBzdGF0aWMgdm9pZCBnZXRTdXBwb3J0ZWRU
eXBlcyhIYXNoU2V0PFN0cmluZz4mIHR5cGVzKTsKLSAgICBzdGF0aWMgTWVkaWFQbGF5ZXI6OlN1
cHBvcnRzVHlwZSBzdXBwb3J0c1R5cGUoY29uc3QgU3RyaW5nJiB0eXBlLCBjb25zdCBTdHJpbmcm
IGNvZGVjcyk7Ci0gICAgc3RhdGljIGJvb2wgaXNBdmFpbGFibGUoKTsKLQotICAgIHZpcnR1YWwg
dm9pZCBjYW5jZWxMb2FkKCk7Ci0KLSAgICB2aXJ0dWFsIFBsYXRmb3JtTWVkaWEgcGxhdGZvcm1N
ZWRpYSgpIGNvbnN0OwotCi0gICAgdmlydHVhbCB2b2lkIHBsYXRmb3JtU2V0VmlzaWJsZShib29s
KTsKLSAgICB2aXJ0dWFsIHZvaWQgcGxhdGZvcm1QbGF5KCk7Ci0gICAgdmlydHVhbCB2b2lkIHBs
YXRmb3JtUGF1c2UoKTsKLSAgICB2aXJ0dWFsIGZsb2F0IGN1cnJlbnRUaW1lKCkgY29uc3Q7Ci0g
ICAgdmlydHVhbCB2b2lkIHNldFZvbHVtZShmbG9hdCk7Ci0gICAgdmlydHVhbCB2b2lkIHNldENs
b3NlZENhcHRpb25zVmlzaWJsZShib29sKTsKLSAgICB2aXJ0dWFsIHZvaWQgcGFpbnQoR3JhcGhp
Y3NDb250ZXh0KiwgY29uc3QgSW50UmVjdCYpOwotICAgIHZpcnR1YWwgdm9pZCBwYWludEN1cnJl
bnRGcmFtZUluQ29udGV4dChHcmFwaGljc0NvbnRleHQqLCBjb25zdCBJbnRSZWN0Jik7Ci0gICAg
dmlydHVhbCBQbGF0Zm9ybUxheWVyKiBwbGF0Zm9ybUxheWVyKCkgY29uc3Q7Ci0gICAgdmlydHVh
bCBib29sIHN1cHBvcnRzQWNjZWxlcmF0ZWRSZW5kZXJpbmcoKSBjb25zdCB7IHJldHVybiB0cnVl
OyB9Ci0gICAgdmlydHVhbCBmbG9hdCBtZWRpYVRpbWVGb3JUaW1lVmFsdWUoZmxvYXQpIGNvbnN0
OwotCi0gICAgdmlydHVhbCB2b2lkIGNyZWF0ZUFWUGxheWVyKCk7Ci0gICAgdmlydHVhbCB2b2lk
IGNyZWF0ZUFWUGxheWVySXRlbSgpOwotICAgIHZpcnR1YWwgdm9pZCBjcmVhdGVBVkFzc2V0Rm9y
VVJMKGNvbnN0IFN0cmluZyYgdXJsKTsKLSAgICB2aXJ0dWFsIE1lZGlhUGxheWVyUHJpdmF0ZUFW
Rm91bmRhdGlvbjo6SXRlbVN0YXR1cyBwbGF5ZXJJdGVtU3RhdHVzKCkgY29uc3Q7Ci0gICAgdmly
dHVhbCBNZWRpYVBsYXllclByaXZhdGVBVkZvdW5kYXRpb246OkFzc2V0U3RhdHVzIGFzc2V0U3Rh
dHVzKCkgY29uc3Q7Ci0KLSAgICB2aXJ0dWFsIHZvaWQgY2hlY2tQbGF5YWJpbGl0eSgpOwotICAg
IHZpcnR1YWwgdm9pZCB1cGRhdGVSYXRlKCk7Ci0gICAgdmlydHVhbCBmbG9hdCByYXRlKCkgY29u
c3Q7Ci0gICAgdmlydHVhbCB2b2lkIHNlZWtUb1RpbWUoZmxvYXQgdGltZSk7Ci0gICAgdmlydHVh
bCB1bnNpZ25lZCB0b3RhbEJ5dGVzKCkgY29uc3Q7Ci0gICAgdmlydHVhbCBQYXNzUmVmUHRyPFRp
bWVSYW5nZXM+IHBsYXRmb3JtQnVmZmVyZWRUaW1lUmFuZ2VzKCkgY29uc3Q7Ci0gICAgdmlydHVh
bCBmbG9hdCBwbGF0Zm9ybU1heFRpbWVTZWVrYWJsZSgpIGNvbnN0OwotICAgIHZpcnR1YWwgZmxv
YXQgcGxhdGZvcm1EdXJhdGlvbigpIGNvbnN0OwotICAgIHZpcnR1YWwgZmxvYXQgcGxhdGZvcm1N
YXhUaW1lTG9hZGVkKCkgY29uc3Q7Ci0gICAgdmlydHVhbCB2b2lkIGJlZ2luTG9hZGluZ01ldGFk
YXRhKCk7Ci0gICAgdmlydHVhbCB2b2lkIHRyYWNrc0NoYW5nZWQoKTsKLSAgICB2aXJ0dWFsIHZv
aWQgc2l6ZUNoYW5nZWQoKTsKLQotICAgIHZpcnR1YWwgYm9vbCBoYXNBdmFpbGFibGVWaWRlb0Zy
YW1lKCkgY29uc3Q7Ci0KLSAgICB2aXJ0dWFsIHZvaWQgY3JlYXRlQ29udGV4dFZpZGVvUmVuZGVy
ZXIoKTsKLSAgICB2aXJ0dWFsIHZvaWQgZGVzdHJveUNvbnRleHRWaWRlb1JlbmRlcmVyKCk7Ci0K
LSAgICB2aXJ0dWFsIHZvaWQgY3JlYXRlVmlkZW9MYXllcigpOwotICAgIHZpcnR1YWwgdm9pZCBk
ZXN0cm95VmlkZW9MYXllcigpOwotCi0gICAgdmlydHVhbCBib29sIGhhc0NvbnRleHRSZW5kZXJl
cigpIGNvbnN0OwotICAgIHZpcnR1YWwgYm9vbCBoYXNMYXllclJlbmRlcmVyKCkgY29uc3Q7Ci0K
LSAgICB2aXJ0dWFsIHZvaWQgY29udGVudHNOZWVkc0Rpc3BsYXkoKTsKLQotICAgIGZyaWVuZCBj
bGFzcyBBVkZXcmFwcGVyOwotICAgIEFWRldyYXBwZXIqIG1fYXZmV3JhcHBlcjsKLSAgICAKLSAg
ICBib29sIG1fdmlkZW9GcmFtZUhhc0RyYXduOwotfTsKLQotfQotCi0jZW5kaWYgLy8gUExBVEZP
Uk0oV0lOKSAmJiBFTkFCTEUoVklERU8pICYmIFVTRShBVkZPVU5EQVRJT04pCi0jZW5kaWYgLy8g
TWVkaWFQbGF5ZXJQcml2YXRlQVZGb3VuZGF0aW9uQ0ZfaApJbmRleDogU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvYXZmb3VuZGF0aW9uL01lZGlhUGxheWVyUHJpdmF0ZUFWRm91bmRh
dGlvbk9iakMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9hdmZvdW5kYXRpb24vTWVkaWFQbGF5ZXJQcml2YXRlQVZGb3VuZGF0aW9uT2JqQy5oCShyZXZp
c2lvbiA5MzIxNSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2F2Zm91bmRh
dGlvbi9NZWRpYVBsYXllclByaXZhdGVBVkZvdW5kYXRpb25PYmpDLmgJKHdvcmtpbmcgY29weSkK
QEAgLTEsMTM2ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTEgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBh
cmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
VEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVN
UExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLiAKLSAqLwotCi0jaWZuZGVmIE1lZGlhUGxheWVyUHJpdmF0ZUFW
Rm91bmRhdGlvbk9iakNfaAotI2RlZmluZSBNZWRpYVBsYXllclByaXZhdGVBVkZvdW5kYXRpb25P
YmpDX2gKLQotI2lmIEVOQUJMRShWSURFTykgJiYgVVNFKEFWRk9VTkRBVElPTikKLQotI2luY2x1
ZGUgIk1lZGlhUGxheWVyUHJpdmF0ZUFWRm91bmRhdGlvbi5oIgotCi0jaWZkZWYgX19PQkpDX18K
LUBjbGFzcyBBVkFzc2V0OwotQGNsYXNzIEFWUGxheWVyOwotQGNsYXNzIEFWUGxheWVySXRlbTsK
LUBjbGFzcyBBVlBsYXllckxheWVyOwotQGNsYXNzIEFWQXNzZXRJbWFnZUdlbmVyYXRvcjsKLUBj
bGFzcyBXZWJDb3JlQVZGTW92aWVPYnNlcnZlcjsKLSNlbHNlCi1jbGFzcyBBVkFzc2V0OwotY2xh
c3MgQVZQbGF5ZXI7Ci1jbGFzcyBBVlBsYXllckl0ZW07Ci1jbGFzcyBBVlBsYXllckxheWVyOwot
Y2xhc3MgQVZBc3NldEltYWdlR2VuZXJhdG9yOwotY2xhc3MgV2ViQ29yZUFWRk1vdmllT2JzZXJ2
ZXI7Ci10eXBlZGVmIHN0cnVjdCBvYmpjX29iamVjdCAqaWQ7Ci0jZW5kaWYKLQotdHlwZWRlZiBz
dHJ1Y3QgQ0dJbWFnZSAqQ0dJbWFnZVJlZjsKLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1jbGFz
cyBNZWRpYVBsYXllclByaXZhdGVBVkZvdW5kYXRpb25PYmpDIDogcHVibGljIE1lZGlhUGxheWVy
UHJpdmF0ZUFWRm91bmRhdGlvbiB7Ci1wdWJsaWM6Ci0gICAgfk1lZGlhUGxheWVyUHJpdmF0ZUFW
Rm91bmRhdGlvbk9iakMoKTsKLQotICAgIHN0YXRpYyB2b2lkIHJlZ2lzdGVyTWVkaWFFbmdpbmUo
TWVkaWFFbmdpbmVSZWdpc3RyYXIpOwotCi0gICAgdm9pZCBzZXRBc3NldChpZCk7Ci0gICAgdmly
dHVhbCB2b2lkIHRyYWNrc0NoYW5nZWQoKTsKLQotcHJpdmF0ZToKLSAgICBNZWRpYVBsYXllclBy
aXZhdGVBVkZvdW5kYXRpb25PYmpDKE1lZGlhUGxheWVyKik7Ci0KLSAgICAvLyBlbmdpbmUgc3Vw
cG9ydAotICAgIHN0YXRpYyBQYXNzT3duUHRyPE1lZGlhUGxheWVyUHJpdmF0ZUludGVyZmFjZT4g
Y3JlYXRlKE1lZGlhUGxheWVyKik7Ci0gICAgc3RhdGljIHZvaWQgZ2V0U3VwcG9ydGVkVHlwZXMo
SGFzaFNldDxTdHJpbmc+JiB0eXBlcyk7Ci0gICAgc3RhdGljIE1lZGlhUGxheWVyOjpTdXBwb3J0
c1R5cGUgc3VwcG9ydHNUeXBlKGNvbnN0IFN0cmluZyYgdHlwZSwgY29uc3QgU3RyaW5nJiBjb2Rl
Y3MpOwotICAgIHN0YXRpYyBib29sIGlzQXZhaWxhYmxlKCk7Ci0KLSAgICB2aXJ0dWFsIHZvaWQg
Y2FuY2VsTG9hZCgpOwotCi0gICAgdmlydHVhbCBQbGF0Zm9ybU1lZGlhIHBsYXRmb3JtTWVkaWEo
KSBjb25zdDsKLQotICAgIHZpcnR1YWwgdm9pZCBwbGF0Zm9ybVNldFZpc2libGUoYm9vbCk7Ci0g
ICAgdmlydHVhbCB2b2lkIHBsYXRmb3JtUGxheSgpOwotICAgIHZpcnR1YWwgdm9pZCBwbGF0Zm9y
bVBhdXNlKCk7Ci0gICAgdmlydHVhbCBmbG9hdCBjdXJyZW50VGltZSgpIGNvbnN0OwotICAgIHZp
cnR1YWwgdm9pZCBzZXRWb2x1bWUoZmxvYXQpOwotICAgIHZpcnR1YWwgdm9pZCBzZXRDbG9zZWRD
YXB0aW9uc1Zpc2libGUoYm9vbCk7Ci0gICAgdmlydHVhbCB2b2lkIHBhaW50KEdyYXBoaWNzQ29u
dGV4dCosIGNvbnN0IEludFJlY3QmKTsKLSAgICB2aXJ0dWFsIHZvaWQgcGFpbnRDdXJyZW50RnJh
bWVJbkNvbnRleHQoR3JhcGhpY3NDb250ZXh0KiwgY29uc3QgSW50UmVjdCYpOwotICAgIHZpcnR1
YWwgUGxhdGZvcm1MYXllciogcGxhdGZvcm1MYXllcigpIGNvbnN0OwotICAgIHZpcnR1YWwgYm9v
bCBzdXBwb3J0c0FjY2VsZXJhdGVkUmVuZGVyaW5nKCkgY29uc3QgeyByZXR1cm4gdHJ1ZTsgfQot
ICAgIHZpcnR1YWwgZmxvYXQgbWVkaWFUaW1lRm9yVGltZVZhbHVlKGZsb2F0KSBjb25zdDsKLQot
ICAgIHZpcnR1YWwgdm9pZCBjcmVhdGVBVlBsYXllcigpOwotICAgIHZpcnR1YWwgdm9pZCBjcmVh
dGVBVlBsYXllckl0ZW0oKTsKLSAgICB2aXJ0dWFsIHZvaWQgY3JlYXRlQVZBc3NldEZvclVSTChj
b25zdCBTdHJpbmcmIHVybCk7Ci0gICAgdmlydHVhbCBNZWRpYVBsYXllclByaXZhdGVBVkZvdW5k
YXRpb246Okl0ZW1TdGF0dXMgcGxheWVySXRlbVN0YXR1cygpIGNvbnN0OwotICAgIHZpcnR1YWwg
TWVkaWFQbGF5ZXJQcml2YXRlQVZGb3VuZGF0aW9uOjpBc3NldFN0YXR1cyBhc3NldFN0YXR1cygp
IGNvbnN0OwotCi0gICAgdmlydHVhbCB2b2lkIGNoZWNrUGxheWFiaWxpdHkoKTsKLSAgICB2aXJ0
dWFsIHZvaWQgdXBkYXRlUmF0ZSgpOwotICAgIHZpcnR1YWwgZmxvYXQgcmF0ZSgpIGNvbnN0Owot
ICAgIHZpcnR1YWwgdm9pZCBzZWVrVG9UaW1lKGZsb2F0IHRpbWUpOwotICAgIHZpcnR1YWwgdW5z
aWduZWQgdG90YWxCeXRlcygpIGNvbnN0OwotICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxUaW1lUmFu
Z2VzPiBwbGF0Zm9ybUJ1ZmZlcmVkVGltZVJhbmdlcygpIGNvbnN0OwotICAgIHZpcnR1YWwgZmxv
YXQgcGxhdGZvcm1NYXhUaW1lU2Vla2FibGUoKSBjb25zdDsKLSAgICB2aXJ0dWFsIGZsb2F0IHBs
YXRmb3JtRHVyYXRpb24oKSBjb25zdDsKLSAgICB2aXJ0dWFsIGZsb2F0IHBsYXRmb3JtTWF4VGlt
ZUxvYWRlZCgpIGNvbnN0OwotICAgIHZpcnR1YWwgdm9pZCBiZWdpbkxvYWRpbmdNZXRhZGF0YSgp
OwotICAgIHZpcnR1YWwgdm9pZCBzaXplQ2hhbmdlZCgpOwotCi0gICAgdmlydHVhbCBib29sIGhh
c0F2YWlsYWJsZVZpZGVvRnJhbWUoKSBjb25zdDsKLQotICAgIHZpcnR1YWwgdm9pZCBjcmVhdGVD
b250ZXh0VmlkZW9SZW5kZXJlcigpOwotICAgIHZpcnR1YWwgdm9pZCBkZXN0cm95Q29udGV4dFZp
ZGVvUmVuZGVyZXIoKTsKLQotICAgIHZpcnR1YWwgdm9pZCBjcmVhdGVWaWRlb0xheWVyKCk7Ci0g
ICAgdmlydHVhbCB2b2lkIGRlc3Ryb3lWaWRlb0xheWVyKCk7Ci0KLSAgICB2aXJ0dWFsIGJvb2wg
aGFzQ29udGV4dFJlbmRlcmVyKCkgY29uc3Q7Ci0gICAgdmlydHVhbCBib29sIGhhc0xheWVyUmVu
ZGVyZXIoKSBjb25zdDsKLQotICAgIHZpcnR1YWwgYm9vbCBoYXNTaW5nbGVTZWN1cml0eU9yaWdp
bigpIGNvbnN0OwotCi0gICAgUmV0YWluUHRyPENHSW1hZ2VSZWY+IGNyZWF0ZUltYWdlRm9yVGlt
ZUluUmVjdChmbG9hdCwgY29uc3QgSW50UmVjdCYpOwotCi0gICAgTWVkaWFQbGF5ZXIqIG1fcGxh
eWVyOwotICAgIFJldGFpblB0cjxBVkFzc2V0PiBtX2F2QXNzZXQ7Ci0gICAgUmV0YWluUHRyPEFW
UGxheWVyPiBtX2F2UGxheWVyOwotICAgIFJldGFpblB0cjxBVlBsYXllckl0ZW0+IG1fYXZQbGF5
ZXJJdGVtOwotICAgIFJldGFpblB0cjxBVlBsYXllckxheWVyPiBtX3ZpZGVvTGF5ZXI7Ci0gICAg
UmV0YWluUHRyPFdlYkNvcmVBVkZNb3ZpZU9ic2VydmVyPiBtX29iamNPYnNlcnZlcjsKLSAgICBS
ZXRhaW5QdHI8QVZBc3NldEltYWdlR2VuZXJhdG9yPiBtX2ltYWdlR2VuZXJhdG9yOwotICAgIFJl
dGFpblB0cjxpZD4gbV90aW1lT2JzZXJ2ZXI7Ci0gICAgYm9vbCBtX3ZpZGVvRnJhbWVIYXNEcmF3
bjsKLSAgICBib29sIG1faGF2ZUNoZWNrZWRQbGF5YWJpbGl0eTsKLX07Ci0KLX0KLQotI2VuZGlm
Ci0jZW5kaWYKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2F2Zm91bmRh
dGlvbi9NZWRpYVBsYXllclByaXZhdGVBVkZvdW5kYXRpb25PYmpDLm1tCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2F2Zm91bmRhdGlvbi9NZWRpYVBsYXll
clByaXZhdGVBVkZvdW5kYXRpb25PYmpDLm1tCShyZXZpc2lvbiA5MzIxNSkKKysrIFNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2F2Zm91bmRhdGlvbi9NZWRpYVBsYXllclByaXZhdGVB
VkZvdW5kYXRpb25PYmpDLm1tCSh3b3JraW5nIGNvcHkpCkBAIC0xLDkxMSArMCwwIEBACi0vKgot
ICogQ29weXJpZ2h0IChDKSAyMDExIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAq
Ci0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0g
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIENPTVBVVEVS
LCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIs
IElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQg
T0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0g
KiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCi0g
Ki8KLQotI2ltcG9ydCAiY29uZmlnLmgiCi0KLSNpZiBFTkFCTEUoVklERU8pICYmIFVTRShBVkZP
VU5EQVRJT04pCi0KLSNpbXBvcnQgIk1lZGlhUGxheWVyUHJpdmF0ZUFWRm91bmRhdGlvbk9iakMu
aCIKLQotI2ltcG9ydCAiQmxvY2tFeGNlcHRpb25zLmgiCi0jaW1wb3J0ICJGbG9hdENvbnZlcnNp
b24uaCIKLSNpbXBvcnQgIkZyYW1lVmlldy5oIgotI2ltcG9ydCAiRmxvYXRDb252ZXJzaW9uLmgi
Ci0jaW1wb3J0ICJHcmFwaGljc0NvbnRleHQuaCIKLSNpbXBvcnQgIktVUkwuaCIKLSNpbXBvcnQg
IkxvZ2dpbmcuaCIKLSNpbXBvcnQgIlNlY3VyaXR5T3JpZ2luLmgiCi0jaW1wb3J0ICJTb2Z0TGlu
a2luZy5oIgotI2ltcG9ydCAiVGltZVJhbmdlcy5oIgotI2ltcG9ydCAiV2ViQ29yZVN5c3RlbUlu
dGVyZmFjZS5oIgotI2ltcG9ydCA8b2JqYy9vYmpjLXJ1bnRpbWUuaD4KLSNpbXBvcnQgPHd0Zi9V
bnVzZWRQYXJhbS5oPgotCi0jaW1wb3J0IDxDb3JlTWVkaWEvQ29yZU1lZGlhLmg+Ci0jaW1wb3J0
IDxBVkZvdW5kYXRpb24vQVZGb3VuZGF0aW9uLmg+Ci0KLVNPRlRfTElOS19GUkFNRVdPUktfT1BU
SU9OQUwoQVZGb3VuZGF0aW9uKQotU09GVF9MSU5LX0ZSQU1FV09SS19PUFRJT05BTChDb3JlTWVk
aWEpCi0KLVNPRlRfTElOSyhDb3JlTWVkaWEsIENNVGltZUNvbXBhcmUsIGludDMyX3QsIChDTVRp
bWUgdGltZTEsIENNVGltZSB0aW1lMiksICh0aW1lMSwgdGltZTIpKQotU09GVF9MSU5LKENvcmVN
ZWRpYSwgQ01UaW1lTWFrZVdpdGhTZWNvbmRzLCBDTVRpbWUsIChGbG9hdDY0IHNlY29uZHMsIGlu
dDMyX3QgcHJlZmVycmVkVGltZVNjYWxlKSwgKHNlY29uZHMsIHByZWZlcnJlZFRpbWVTY2FsZSkp
Ci1TT0ZUX0xJTksoQ29yZU1lZGlhLCBDTVRpbWVHZXRTZWNvbmRzLCBGbG9hdDY0LCAoQ01UaW1l
IHRpbWUpLCAodGltZSkpCi1TT0ZUX0xJTksoQ29yZU1lZGlhLCBDTVRpbWVSYW5nZUdldEVuZCwg
Q01UaW1lLCAoQ01UaW1lUmFuZ2UgcmFuZ2UpLCAocmFuZ2UpKQotCi1TT0ZUX0xJTktfQ0xBU1Mo
QVZGb3VuZGF0aW9uLCBBVlBsYXllcikKLVNPRlRfTElOS19DTEFTUyhBVkZvdW5kYXRpb24sIEFW
UGxheWVySXRlbSkKLVNPRlRfTElOS19DTEFTUyhBVkZvdW5kYXRpb24sIEFWUGxheWVyTGF5ZXIp
Ci1TT0ZUX0xJTktfQ0xBU1MoQVZGb3VuZGF0aW9uLCBBVlVSTEFzc2V0KQotU09GVF9MSU5LX0NM
QVNTKEFWRm91bmRhdGlvbiwgQVZBc3NldEltYWdlR2VuZXJhdG9yKQotCi1TT0ZUX0xJTktfUE9J
TlRFUihBVkZvdW5kYXRpb24sIEFWTWVkaWFDaGFyYWN0ZXJpc3RpY1Zpc3VhbCwgTlNTdHJpbmcg
KikKLVNPRlRfTElOS19QT0lOVEVSKEFWRm91bmRhdGlvbiwgQVZNZWRpYUNoYXJhY3RlcmlzdGlj
QXVkaWJsZSwgTlNTdHJpbmcgKikKLVNPRlRfTElOS19QT0lOVEVSKEFWRm91bmRhdGlvbiwgQVZN
ZWRpYVR5cGVDbG9zZWRDYXB0aW9uLCBOU1N0cmluZyAqKQotU09GVF9MSU5LX1BPSU5URVIoQVZG
b3VuZGF0aW9uLCBBVk1lZGlhVHlwZVZpZGVvLCBOU1N0cmluZyAqKQotU09GVF9MSU5LX1BPSU5U
RVIoQVZGb3VuZGF0aW9uLCBBVk1lZGlhVHlwZUF1ZGlvLCBOU1N0cmluZyAqKQotU09GVF9MSU5L
X1BPSU5URVIoQVZGb3VuZGF0aW9uLCBBVlBsYXllckl0ZW1EaWRQbGF5VG9FbmRUaW1lTm90aWZp
Y2F0aW9uLCBOU1N0cmluZyAqKQotU09GVF9MSU5LX1BPSU5URVIoQVZGb3VuZGF0aW9uLCBBVkFz
c2V0SW1hZ2VHZW5lcmF0b3JBcGVydHVyZU1vZGVDbGVhbkFwZXJ0dXJlLCBOU1N0cmluZyAqKQot
U09GVF9MSU5LX1BPSU5URVIoQVZGb3VuZGF0aW9uLCBBVlVSTEFzc2V0UmVmZXJlbmNlUmVzdHJp
Y3Rpb25zS2V5LCBOU1N0cmluZyAqKQotCi1TT0ZUX0xJTktfQ09OU1RBTlQoQ29yZU1lZGlhLCBr
Q01UaW1lWmVybywgQ01UaW1lKQotCi0jZGVmaW5lIEFWUGxheWVyIGdldEFWUGxheWVyQ2xhc3Mo
KQotI2RlZmluZSBBVlBsYXllckl0ZW0gZ2V0QVZQbGF5ZXJJdGVtQ2xhc3MoKQotI2RlZmluZSBB
VlBsYXllckxheWVyIGdldEFWUGxheWVyTGF5ZXJDbGFzcygpCi0jZGVmaW5lIEFWVVJMQXNzZXQg
Z2V0QVZVUkxBc3NldENsYXNzKCkKLSNkZWZpbmUgQVZBc3NldEltYWdlR2VuZXJhdG9yIGdldEFW
QXNzZXRJbWFnZUdlbmVyYXRvckNsYXNzKCkKLQotI2RlZmluZSBBVk1lZGlhQ2hhcmFjdGVyaXN0
aWNWaXN1YWwgZ2V0QVZNZWRpYUNoYXJhY3RlcmlzdGljVmlzdWFsKCkKLSNkZWZpbmUgQVZNZWRp
YUNoYXJhY3RlcmlzdGljQXVkaWJsZSBnZXRBVk1lZGlhQ2hhcmFjdGVyaXN0aWNBdWRpYmxlKCkK
LSNkZWZpbmUgQVZNZWRpYVR5cGVDbG9zZWRDYXB0aW9uIGdldEFWTWVkaWFUeXBlQ2xvc2VkQ2Fw
dGlvbigpCi0jZGVmaW5lIEFWTWVkaWFUeXBlVmlkZW8gZ2V0QVZNZWRpYVR5cGVWaWRlbygpCi0j
ZGVmaW5lIEFWTWVkaWFUeXBlQXVkaW8gZ2V0QVZNZWRpYVR5cGVBdWRpbygpCi0jZGVmaW5lIEFW
UGxheWVySXRlbURpZFBsYXlUb0VuZFRpbWVOb3RpZmljYXRpb24gZ2V0QVZQbGF5ZXJJdGVtRGlk
UGxheVRvRW5kVGltZU5vdGlmaWNhdGlvbigpCi0jZGVmaW5lIEFWQXNzZXRJbWFnZUdlbmVyYXRv
ckFwZXJ0dXJlTW9kZUNsZWFuQXBlcnR1cmUgZ2V0QVZBc3NldEltYWdlR2VuZXJhdG9yQXBlcnR1
cmVNb2RlQ2xlYW5BcGVydHVyZSgpCi0jZGVmaW5lIEFWVVJMQXNzZXRSZWZlcmVuY2VSZXN0cmlj
dGlvbnNLZXkgZ2V0QVZVUkxBc3NldFJlZmVyZW5jZVJlc3RyaWN0aW9uc0tleSgpCi0KLSNkZWZp
bmUga0NNVGltZVplcm8gZ2V0a0NNVGltZVplcm8oKQotCi11c2luZyBuYW1lc3BhY2UgV2ViQ29y
ZTsKLXVzaW5nIG5hbWVzcGFjZSBzdGQ7Ci0KLWVudW0gTWVkaWFQbGF5ZXJBVkZvdW5kYXRpb25P
YnNlcnZhdGlvbkNvbnRleHQgewotICAgIE1lZGlhUGxheWVyQVZGb3VuZGF0aW9uT2JzZXJ2YXRp
b25Db250ZXh0UGxheWVySXRlbSwKLSAgICBNZWRpYVBsYXllckFWRm91bmRhdGlvbk9ic2VydmF0
aW9uQ29udGV4dFBsYXllcgotfTsKLQotQGludGVyZmFjZSBXZWJDb3JlQVZGTW92aWVPYnNlcnZl
ciA6IE5TT2JqZWN0Ci17Ci0gICAgTWVkaWFQbGF5ZXJQcml2YXRlQVZGb3VuZGF0aW9uT2JqQyog
bV9jYWxsYmFjazsKLSAgICBpbnQgbV9kZWxheUNhbGxiYWNrczsKLX0KLS0oaWQpaW5pdFdpdGhD
YWxsYmFjazooTWVkaWFQbGF5ZXJQcml2YXRlQVZGb3VuZGF0aW9uT2JqQyopY2FsbGJhY2s7Ci0t
KHZvaWQpZGlzY29ubmVjdDsKLS0odm9pZClwbGF5YWJsZUtub3duOwotLSh2b2lkKW1ldGFkYXRh
TG9hZGVkOwotLSh2b2lkKXRpbWVDaGFuZ2VkOihkb3VibGUpdGltZTsKLS0odm9pZClzZWVrQ29t
cGxldGVkOihCT09MKWZpbmlzaGVkOwotLSh2b2lkKWRpZEVuZDooTlNOb3RpZmljYXRpb24gKilu
b3RpZmljYXRpb247Ci0tKHZvaWQpb2JzZXJ2ZVZhbHVlRm9yS2V5UGF0aDprZXlQYXRoIG9mT2Jq
ZWN0OihpZClvYmplY3QgY2hhbmdlOihOU0RpY3Rpb25hcnkgKiljaGFuZ2UgY29udGV4dDooTWVk
aWFQbGF5ZXJBVkZvdW5kYXRpb25PYnNlcnZhdGlvbkNvbnRleHQpY29udGV4dDsKLUBlbmQKLQot
bmFtZXNwYWNlIFdlYkNvcmUgewotCi1zdGF0aWMgTlNBcnJheSAqYXNzZXRNZXRhZGF0YUtleU5h
bWVzKCk7Ci1zdGF0aWMgTlNBcnJheSAqaXRlbUtWT1Byb3BlcnRpZXMoKTsKLQotI2lmICFMT0df
RElTQUJMRUQKLXN0YXRpYyBjb25zdCBjaGFyICpib29sU3RyaW5nKGJvb2wgdmFsKQotewotICAg
IHJldHVybiB2YWwgPyAidHJ1ZSIgOiAiZmFsc2UiOwotfQotI2VuZGlmCi0KLXN0YXRpYyBjb25z
dCBmbG9hdCBpbnZhbGlkVGltZSA9IC0xLjBmOwotCi1QYXNzT3duUHRyPE1lZGlhUGxheWVyUHJp
dmF0ZUludGVyZmFjZT4gTWVkaWFQbGF5ZXJQcml2YXRlQVZGb3VuZGF0aW9uT2JqQzo6Y3JlYXRl
KE1lZGlhUGxheWVyKiBwbGF5ZXIpCi17IAotICAgIHJldHVybiBhZG9wdFB0cihuZXcgTWVkaWFQ
bGF5ZXJQcml2YXRlQVZGb3VuZGF0aW9uT2JqQyhwbGF5ZXIpKTsKLX0KLQotdm9pZCBNZWRpYVBs
YXllclByaXZhdGVBVkZvdW5kYXRpb25PYmpDOjpyZWdpc3Rlck1lZGlhRW5naW5lKE1lZGlhRW5n
aW5lUmVnaXN0cmFyIHJlZ2lzdHJhcikKLXsKLSAgICBpZiAoaXNBdmFpbGFibGUoKSkKLSAgICAg
ICAgcmVnaXN0cmFyKGNyZWF0ZSwgZ2V0U3VwcG9ydGVkVHlwZXMsIHN1cHBvcnRzVHlwZSwgMCwg
MCwgMCk7Ci19Ci0KLU1lZGlhUGxheWVyUHJpdmF0ZUFWRm91bmRhdGlvbk9iakM6Ok1lZGlhUGxh
eWVyUHJpdmF0ZUFWRm91bmRhdGlvbk9iakMoTWVkaWFQbGF5ZXIqIHBsYXllcikKLSAgICA6IE1l
ZGlhUGxheWVyUHJpdmF0ZUFWRm91bmRhdGlvbihwbGF5ZXIpCi0gICAgLCBtX29iamNPYnNlcnZl
cihBZG9wdE5TLCBbW1dlYkNvcmVBVkZNb3ZpZU9ic2VydmVyIGFsbG9jXSBpbml0V2l0aENhbGxi
YWNrOnRoaXNdKQotICAgICwgbV92aWRlb0ZyYW1lSGFzRHJhd24oZmFsc2UpCi0gICAgLCBtX2hh
dmVDaGVja2VkUGxheWFiaWxpdHkoZmFsc2UpCi17Ci19Ci0KLU1lZGlhUGxheWVyUHJpdmF0ZUFW
Rm91bmRhdGlvbk9iakM6On5NZWRpYVBsYXllclByaXZhdGVBVkZvdW5kYXRpb25PYmpDKCkKLXsK
LSAgICBjYW5jZWxMb2FkKCk7Ci0gICAgW21fb2JqY09ic2VydmVyLmdldCgpIGRpc2Nvbm5lY3Rd
OwotfQotCi12b2lkIE1lZGlhUGxheWVyUHJpdmF0ZUFWRm91bmRhdGlvbk9iakM6OmNhbmNlbExv
YWQoKQotewotICAgIExPRyhNZWRpYSwgIk1lZGlhUGxheWVyUHJpdmF0ZUFWRm91bmRhdGlvbk9i
akM6OmNhbmNlbExvYWQoJXApIiwgdGhpcyk7Ci0gICAgdGVhckRvd25WaWRlb1JlbmRlcmluZygp
OwotCi0gICAgW1tOU05vdGlmaWNhdGlvbkNlbnRlciBkZWZhdWx0Q2VudGVyXSByZW1vdmVPYnNl
cnZlcjptX29iamNPYnNlcnZlci5nZXQoKV07Ci0KLSAgICAvLyBUZWxsIG91ciBvYnNlcnZlciB0
byBkbyBub3RoaW5nIHdoZW4gb3VyIGNhbmNlbGxhdGlvbiBvZiBwZW5kaW5nIGxvYWRpbmcgY2Fs
bHMgaXRzIGNvbXBsZXRpb24gaGFuZGxlci4KLSAgICBzZXRJZ25vcmVMb2FkU3RhdGVDaGFuZ2Vz
KHRydWUpOwotICAgIGlmIChtX2F2QXNzZXQpIHsKLSAgICAgICAgW21fYXZBc3NldC5nZXQoKSBj
YW5jZWxMb2FkaW5nXTsKLSAgICAgICAgbV9hdkFzc2V0ID0gbmlsOwotICAgIH0KLSAgICBpZiAo
bV9hdlBsYXllckl0ZW0pIHsKLSAgICAgICAgZm9yIChOU1N0cmluZyAqa2V5TmFtZSBpbiBpdGVt
S1ZPUHJvcGVydGllcygpKQotICAgICAgICAgICAgW21fYXZQbGF5ZXJJdGVtLmdldCgpIHJlbW92
ZU9ic2VydmVyOm1fb2JqY09ic2VydmVyLmdldCgpIGZvcktleVBhdGg6a2V5TmFtZV07Ci0gICAg
ICAgIAotICAgICAgICBtX2F2UGxheWVySXRlbSA9IG5pbDsKLSAgICB9Ci0gICAgaWYgKG1fYXZQ
bGF5ZXIpIHsKLSAgICAgICAgaWYgKG1fdGltZU9ic2VydmVyKQotICAgICAgICAgICAgW21fYXZQ
bGF5ZXIuZ2V0KCkgcmVtb3ZlVGltZU9ic2VydmVyOm1fdGltZU9ic2VydmVyLmdldCgpXTsKLSAg
ICAgICAgbV90aW1lT2JzZXJ2ZXIgPSBuaWw7Ci0gICAgICAgIFttX2F2UGxheWVyLmdldCgpIHJl
bW92ZU9ic2VydmVyOm1fb2JqY09ic2VydmVyLmdldCgpIGZvcktleVBhdGg6QCJyYXRlIl07Ci0g
ICAgICAgIG1fYXZQbGF5ZXIgPSBuaWw7Ci0gICAgfQotICAgIHNldElnbm9yZUxvYWRTdGF0ZUNo
YW5nZXMoZmFsc2UpOwotfQotCi1ib29sIE1lZGlhUGxheWVyUHJpdmF0ZUFWRm91bmRhdGlvbk9i
akM6Omhhc0xheWVyUmVuZGVyZXIoKSBjb25zdAotewotICAgIHJldHVybiBtX3ZpZGVvTGF5ZXI7
Ci19Ci0KLWJvb2wgTWVkaWFQbGF5ZXJQcml2YXRlQVZGb3VuZGF0aW9uT2JqQzo6aGFzQ29udGV4
dFJlbmRlcmVyKCkgY29uc3QKLXsKLSAgICByZXR1cm4gbV9pbWFnZUdlbmVyYXRvcjsKLX0KLQot
dm9pZCBNZWRpYVBsYXllclByaXZhdGVBVkZvdW5kYXRpb25PYmpDOjpjcmVhdGVDb250ZXh0Vmlk
ZW9SZW5kZXJlcigpCi17Ci0gICAgTE9HKE1lZGlhLCAiTWVkaWFQbGF5ZXJQcml2YXRlQVZGb3Vu
ZGF0aW9uT2JqQzo6Y3JlYXRlQ29udGV4dFZpZGVvUmVuZGVyZXIoJXApIiwgdGhpcyk7Ci0KLSAg
ICBpZiAoIW1fYXZBc3NldCB8fCBtX2ltYWdlR2VuZXJhdG9yKQotICAgICAgICByZXR1cm47Ci0K
LSAgICBtX2ltYWdlR2VuZXJhdG9yID0gW0FWQXNzZXRJbWFnZUdlbmVyYXRvciBhc3NldEltYWdl
R2VuZXJhdG9yV2l0aEFzc2V0Om1fYXZBc3NldC5nZXQoKV07Ci0KLSAgICBbbV9pbWFnZUdlbmVy
YXRvci5nZXQoKSBzZXRBcGVydHVyZU1vZGU6QVZBc3NldEltYWdlR2VuZXJhdG9yQXBlcnR1cmVN
b2RlQ2xlYW5BcGVydHVyZV07Ci0gICAgW21faW1hZ2VHZW5lcmF0b3IuZ2V0KCkgc2V0QXBwbGll
c1ByZWZlcnJlZFRyYWNrVHJhbnNmb3JtOllFU107Ci0gICAgW21faW1hZ2VHZW5lcmF0b3IuZ2V0
KCkgc2V0UmVxdWVzdGVkVGltZVRvbGVyYW5jZUJlZm9yZTprQ01UaW1lWmVyb107Ci0gICAgW21f
aW1hZ2VHZW5lcmF0b3IuZ2V0KCkgc2V0UmVxdWVzdGVkVGltZVRvbGVyYW5jZUFmdGVyOmtDTVRp
bWVaZXJvXTsKLQotICAgIExPRyhNZWRpYSwgIk1lZGlhUGxheWVyUHJpdmF0ZUFWRm91bmRhdGlv
bk9iakM6OmNyZWF0ZUltYWdlR2VuZXJhdG9yKCVwKSAtIHJldHVybmluZyAlcCIsIHRoaXMsIG1f
aW1hZ2VHZW5lcmF0b3IuZ2V0KCkpOwotfQotCi12b2lkIE1lZGlhUGxheWVyUHJpdmF0ZUFWRm91
bmRhdGlvbk9iakM6OmRlc3Ryb3lDb250ZXh0VmlkZW9SZW5kZXJlcigpCi17Ci0gICAgaWYgKCFt
X2ltYWdlR2VuZXJhdG9yKQotICAgICAgICByZXR1cm47Ci0KLSAgICBMT0coTWVkaWEsICJNZWRp
YVBsYXllclByaXZhdGVBVkZvdW5kYXRpb25PYmpDOjpkZXN0cm95Q29udGV4dFZpZGVvUmVuZGVy
ZXIoJXApIC0gZGVzdHJveWluZyAgJXAiLCB0aGlzLCBtX2ltYWdlR2VuZXJhdG9yLmdldCgpKTsK
LQotICAgIG1faW1hZ2VHZW5lcmF0b3IgPSAwOwotfQotCi12b2lkIE1lZGlhUGxheWVyUHJpdmF0
ZUFWRm91bmRhdGlvbk9iakM6OmNyZWF0ZVZpZGVvTGF5ZXIoKQotewotICAgIGlmICghbV9hdlBs
YXllcikKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYgKCFtX3ZpZGVvTGF5ZXIpIHsKLSAgICAg
ICAgbV92aWRlb0xheWVyLmFkb3B0TlMoW1tBVlBsYXllckxheWVyIGFsbG9jXSBpbml0XSk7Ci0g
ICAgICAgIFttX3ZpZGVvTGF5ZXIuZ2V0KCkgc2V0UGxheWVyOm1fYXZQbGF5ZXIuZ2V0KCldOwot
I2lmbmRlZiBOREVCVUcKLSAgICAgICAgW21fdmlkZW9MYXllci5nZXQoKSBzZXROYW1lOkAiVmlk
ZW8gbGF5ZXIiXTsKLSNlbmRpZgotICAgICAgICBMT0coTWVkaWEsICJNZWRpYVBsYXllclByaXZh
dGVBVkZvdW5kYXRpb25PYmpDOjpjcmVhdGVWaWRlb0xheWVyKCVwKSAtIHJldHVybmluZyAlcCIs
IHRoaXMsIG1fdmlkZW9MYXllci5nZXQoKSk7Ci0gICAgfQotfQotCi12b2lkIE1lZGlhUGxheWVy
UHJpdmF0ZUFWRm91bmRhdGlvbk9iakM6OmRlc3Ryb3lWaWRlb0xheWVyKCkKLXsKLSAgICBpZiAo
IW1fdmlkZW9MYXllcikKLSAgICAgICAgcmV0dXJuOwotCi0gICAgTE9HKE1lZGlhLCAiTWVkaWFQ
bGF5ZXJQcml2YXRlQVZGb3VuZGF0aW9uT2JqQzo6ZGVzdHJveVZpZGVvTGF5ZXIoJXApIC0gZGVz
dHJveWluZyIsIHRoaXMsIG1fdmlkZW9MYXllci5nZXQoKSk7Ci0KLSAgICBbbV92aWRlb0xheWVy
LmdldCgpIHNldFBsYXllcjpuaWxdOwotCi0gICAgbV92aWRlb0xheWVyID0gMDsKLX0KLQotYm9v
bCBNZWRpYVBsYXllclByaXZhdGVBVkZvdW5kYXRpb25PYmpDOjpoYXNBdmFpbGFibGVWaWRlb0Zy
YW1lKCkgY29uc3QKLXsKLSAgICByZXR1cm4gKG1fdmlkZW9GcmFtZUhhc0RyYXduIHx8IChtX3Zp
ZGVvTGF5ZXIgJiYgW21fdmlkZW9MYXllci5nZXQoKSBpc1JlYWR5Rm9yRGlzcGxheV0pKTsKLX0K
LQotdm9pZCBNZWRpYVBsYXllclByaXZhdGVBVkZvdW5kYXRpb25PYmpDOjpjcmVhdGVBVkFzc2V0
Rm9yVVJMKGNvbnN0IFN0cmluZyYgdXJsKQotewotICAgIGlmIChtX2F2QXNzZXQpCi0gICAgICAg
IHJldHVybjsKLQotICAgIExPRyhNZWRpYSwgIk1lZGlhUGxheWVyUHJpdmF0ZUFWRm91bmRhdGlv
bk9iakM6OmNyZWF0ZUFWQXNzZXRGb3JVUkwoJXApIiwgdGhpcyk7Ci0KLSAgICBzZXREZWxheUNh
bGxiYWNrcyh0cnVlKTsKLQotICAgIE5TRGljdGlvbmFyeSAqb3B0aW9ucyA9IFtOU0RpY3Rpb25h
cnkgZGljdGlvbmFyeVdpdGhPYmplY3RzQW5kS2V5czoKLSAgICAgICAgICAgICAgICAgICAgICAg
IFtOU051bWJlciBudW1iZXJXaXRoSW50OkFWQXNzZXRSZWZlcmVuY2VSZXN0cmljdGlvbkZvcmJp
ZFJlbW90ZVJlZmVyZW5jZVRvTG9jYWwgfCBBVkFzc2V0UmVmZXJlbmNlUmVzdHJpY3Rpb25Gb3Ji
aWRMb2NhbFJlZmVyZW5jZVRvUmVtb3RlXSwgQVZVUkxBc3NldFJlZmVyZW5jZVJlc3RyaWN0aW9u
c0tleSwgCi0gICAgICAgICAgICAgICAgICAgICAgICBuaWxdOwotICAgIE5TVVJMICpjb2NvYVVS
TCA9IEtVUkwoUGFyc2VkVVJMU3RyaW5nLCB1cmwpOwotICAgIG1fYXZBc3NldC5hZG9wdE5TKFtb
QVZVUkxBc3NldCBhbGxvY10gaW5pdFdpdGhVUkw6Y29jb2FVUkwgb3B0aW9uczpvcHRpb25zXSk7
Ci0KLSAgICBtX2hhdmVDaGVja2VkUGxheWFiaWxpdHkgPSBmYWxzZTsKLQotICAgIHNldERlbGF5
Q2FsbGJhY2tzKGZhbHNlKTsKLX0KLQotdm9pZCBNZWRpYVBsYXllclByaXZhdGVBVkZvdW5kYXRp
b25PYmpDOjpjcmVhdGVBVlBsYXllcigpCi17Ci0gICAgaWYgKG1fYXZQbGF5ZXIpCi0gICAgICAg
IHJldHVybjsKLQotICAgIExPRyhNZWRpYSwgIk1lZGlhUGxheWVyUHJpdmF0ZUFWRm91bmRhdGlv
bk9iakM6OmNyZWF0ZUFWUGxheWVyKCVwKSIsIHRoaXMpOwotCi0gICAgc2V0RGVsYXlDYWxsYmFj
a3ModHJ1ZSk7Ci0KLSAgICBtX2F2UGxheWVyLmFkb3B0TlMoW1tBVlBsYXllciBhbGxvY10gaW5p
dF0pOwotICAgIFttX2F2UGxheWVyLmdldCgpIGFkZE9ic2VydmVyOm1fb2JqY09ic2VydmVyLmdl
dCgpIGZvcktleVBhdGg6QCJyYXRlIiBvcHRpb25zOm5pbCBjb250ZXh0Oih2b2lkICopTWVkaWFQ
bGF5ZXJBVkZvdW5kYXRpb25PYnNlcnZhdGlvbkNvbnRleHRQbGF5ZXJdOwotICAgIAotICAgIC8v
IEFkZCBhIHRpbWUgb2JzZXJ2ZXIsIGFzayB0byBiZSBjYWxsZWQgaW5mcmVxdWVudGx5IGJlY2F1
c2Ugd2UgZG9uJ3QgcmVhbGx5IHdhbnQgcGVyaW9kaWMgY2FsbGJhY2tzIGJ1dAotICAgIC8vIG91
ciBvYnNlcnZlciB3aWxsIGFsc28gYmUgY2FsbGVkIHdoZW5ldmVyIGEgc2VlayBoYXBwZW5zLgot
ICAgIGNvbnN0IGRvdWJsZSB2ZXJ5TG9uZ0ludGVydmFsID0gNjAgKiA2MCAqIDI0ICogMzA7Ci0g
ICAgV2ViQ29yZUFWRk1vdmllT2JzZXJ2ZXIgKm9ic2VydmVyID0gbV9vYmpjT2JzZXJ2ZXIuZ2V0
KCk7Ci0gICAgbV90aW1lT2JzZXJ2ZXIgPSBbbV9hdlBsYXllci5nZXQoKSBhZGRQZXJpb2RpY1Rp
bWVPYnNlcnZlckZvckludGVydmFsOkNNVGltZU1ha2VXaXRoU2Vjb25kcyh2ZXJ5TG9uZ0ludGVy
dmFsLCAxMCkgcXVldWU6bmlsIHVzaW5nQmxvY2s6XihDTVRpbWUgdGltZSl7Ci0gICAgICAgIFtv
YnNlcnZlciB0aW1lQ2hhbmdlZDpDTVRpbWVHZXRTZWNvbmRzKHRpbWUpXTsKLSAgICB9XTsKLQot
ICAgIHNldERlbGF5Q2FsbGJhY2tzKGZhbHNlKTsKLX0KLQotdm9pZCBNZWRpYVBsYXllclByaXZh
dGVBVkZvdW5kYXRpb25PYmpDOjpjcmVhdGVBVlBsYXllckl0ZW0oKQotewotICAgIGlmIChtX2F2
UGxheWVySXRlbSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgTE9HKE1lZGlhLCAiTWVkaWFQbGF5
ZXJQcml2YXRlQVZGb3VuZGF0aW9uT2JqQzo6Y3JlYXRlQVZQbGF5ZXJJdGVtKCVwKSIsIHRoaXMp
OwotCi0gICAgQVNTRVJUKG1fYXZQbGF5ZXIpOwotCi0gICAgc2V0RGVsYXlDYWxsYmFja3ModHJ1
ZSk7Ci0KLSAgICAvLyBDcmVhdGUgdGhlIHBsYXllciBpdGVtIHNvIHdlIGNhbiBsb2FkIG1lZGlh
IGRhdGEuIAotICAgIG1fYXZQbGF5ZXJJdGVtLmFkb3B0TlMoW1tBVlBsYXllckl0ZW0gYWxsb2Nd
IGluaXRXaXRoQXNzZXQ6bV9hdkFzc2V0LmdldCgpXSk7Ci0gICAgCi0gICAgW1tOU05vdGlmaWNh
dGlvbkNlbnRlciBkZWZhdWx0Q2VudGVyXSBhZGRPYnNlcnZlcjptX29iamNPYnNlcnZlci5nZXQo
KSBzZWxlY3RvcjpAc2VsZWN0b3IoZGlkRW5kOikgbmFtZTpBVlBsYXllckl0ZW1EaWRQbGF5VG9F
bmRUaW1lTm90aWZpY2F0aW9uIG9iamVjdDptX2F2UGxheWVySXRlbS5nZXQoKV07Ci0KLSAgICBm
b3IgKE5TU3RyaW5nICprZXlOYW1lIGluIGl0ZW1LVk9Qcm9wZXJ0aWVzKCkpCi0gICAgICAgIFtt
X2F2UGxheWVySXRlbS5nZXQoKSBhZGRPYnNlcnZlcjptX29iamNPYnNlcnZlci5nZXQoKSBmb3JL
ZXlQYXRoOmtleU5hbWUgb3B0aW9uczpuaWwgY29udGV4dDoodm9pZCAqKU1lZGlhUGxheWVyQVZG
b3VuZGF0aW9uT2JzZXJ2YXRpb25Db250ZXh0UGxheWVySXRlbV07Ci0KLSAgICBbbV9hdlBsYXll
ci5nZXQoKSByZXBsYWNlQ3VycmVudEl0ZW1XaXRoUGxheWVySXRlbTptX2F2UGxheWVySXRlbS5n
ZXQoKV07Ci0KLSAgICBzZXREZWxheUNhbGxiYWNrcyhmYWxzZSk7Ci19Ci0KLXZvaWQgTWVkaWFQ
bGF5ZXJQcml2YXRlQVZGb3VuZGF0aW9uT2JqQzo6Y2hlY2tQbGF5YWJpbGl0eSgpCi17Ci0gICAg
aWYgKG1faGF2ZUNoZWNrZWRQbGF5YWJpbGl0eSkKLSAgICAgICAgcmV0dXJuOwotICAgIG1faGF2
ZUNoZWNrZWRQbGF5YWJpbGl0eSA9IHRydWU7Ci0KLSAgICBMT0coTWVkaWEsICJNZWRpYVBsYXll
clByaXZhdGVBVkZvdW5kYXRpb25PYmpDOjpjaGVja1BsYXlhYmlsaXR5KCVwKSIsIHRoaXMpOwot
Ci0gICAgW21fYXZBc3NldC5nZXQoKSBsb2FkVmFsdWVzQXN5bmNocm9ub3VzbHlGb3JLZXlzOltO
U0FycmF5IGFycmF5V2l0aE9iamVjdDpAInBsYXlhYmxlIl0gY29tcGxldGlvbkhhbmRsZXI6XnsK
LSAgICAgICAgW21fb2JqY09ic2VydmVyLmdldCgpIHBsYXlhYmxlS25vd25dOwotICAgIH1dOwot
fQotCi12b2lkIE1lZGlhUGxheWVyUHJpdmF0ZUFWRm91bmRhdGlvbk9iakM6OmJlZ2luTG9hZGlu
Z01ldGFkYXRhKCkKLXsKLSAgICBMT0coTWVkaWEsICJNZWRpYVBsYXllclByaXZhdGVBVkZvdW5k
YXRpb25PYmpDOjpiZWdpbkxvYWRpbmdNZXRhZGF0YSglcCkgLSByZXF1ZXN0aW5nIG1ldGFkYXRh
IGxvYWRpbmciLCB0aGlzKTsKLSAgICBbbV9hdkFzc2V0LmdldCgpIGxvYWRWYWx1ZXNBc3luY2hy
b25vdXNseUZvcktleXM6W2Fzc2V0TWV0YWRhdGFLZXlOYW1lcygpIHJldGFpbl0gY29tcGxldGlv
bkhhbmRsZXI6XnsKLSAgICAgICAgW21fb2JqY09ic2VydmVyLmdldCgpIG1ldGFkYXRhTG9hZGVk
XTsKLSAgICB9XTsKLX0KLQotTWVkaWFQbGF5ZXJQcml2YXRlQVZGb3VuZGF0aW9uOjpJdGVtU3Rh
dHVzIE1lZGlhUGxheWVyUHJpdmF0ZUFWRm91bmRhdGlvbk9iakM6OnBsYXllckl0ZW1TdGF0dXMo
KSBjb25zdAotewotICAgIGlmICghbV9hdlBsYXllckl0ZW0pCi0gICAgICAgIHJldHVybiBNZWRp
YVBsYXllclByaXZhdGVBVkZvdW5kYXRpb246Ok1lZGlhUGxheWVyQVZQbGF5ZXJJdGVtU3RhdHVz
RG9lc05vdEV4aXN0OwotCi0gICAgQVZQbGF5ZXJJdGVtU3RhdHVzIHN0YXR1cyA9IFttX2F2UGxh
eWVySXRlbS5nZXQoKSBzdGF0dXNdOwotICAgIGlmIChzdGF0dXMgPT0gQVZQbGF5ZXJJdGVtU3Rh
dHVzVW5rbm93bikKLSAgICAgICAgcmV0dXJuIE1lZGlhUGxheWVyUHJpdmF0ZUFWRm91bmRhdGlv
bjo6TWVkaWFQbGF5ZXJBVlBsYXllckl0ZW1TdGF0dXNVbmtub3duOwotICAgIGlmIChzdGF0dXMg
PT0gQVZQbGF5ZXJJdGVtU3RhdHVzRmFpbGVkKQotICAgICAgICByZXR1cm4gTWVkaWFQbGF5ZXJQ
cml2YXRlQVZGb3VuZGF0aW9uOjpNZWRpYVBsYXllckFWUGxheWVySXRlbVN0YXR1c0ZhaWxlZDsK
LSAgICBpZiAoW21fYXZQbGF5ZXJJdGVtLmdldCgpIGlzUGxheWJhY2tMaWtlbHlUb0tlZXBVcF0p
Ci0gICAgICAgIHJldHVybiBNZWRpYVBsYXllclByaXZhdGVBVkZvdW5kYXRpb246Ok1lZGlhUGxh
eWVyQVZQbGF5ZXJJdGVtU3RhdHVzUGxheWJhY2tMaWtlbHlUb0tlZXBVcDsKLSAgICBpZiAoW21f
YXZQbGF5ZXJJdGVtLmdldCgpIGlzUGxheWJhY2tCdWZmZXJGdWxsXSkKLSAgICAgICAgcmV0dXJu
IE1lZGlhUGxheWVyUHJpdmF0ZUFWRm91bmRhdGlvbjo6TWVkaWFQbGF5ZXJBVlBsYXllckl0ZW1T
dGF0dXNQbGF5YmFja0J1ZmZlckZ1bGw7Ci0gICAgaWYgKFttX2F2UGxheWVySXRlbS5nZXQoKSBp
c1BsYXliYWNrQnVmZmVyRW1wdHldKQotICAgICAgICByZXR1cm4gTWVkaWFQbGF5ZXJQcml2YXRl
QVZGb3VuZGF0aW9uOjpNZWRpYVBsYXllckFWUGxheWVySXRlbVN0YXR1c1BsYXliYWNrQnVmZmVy
RW1wdHk7Ci0KLSAgICByZXR1cm4gTWVkaWFQbGF5ZXJQcml2YXRlQVZGb3VuZGF0aW9uOjpNZWRp
YVBsYXllckFWUGxheWVySXRlbVN0YXR1c1JlYWR5VG9QbGF5OwotfQotCi1QbGF0Zm9ybU1lZGlh
IE1lZGlhUGxheWVyUHJpdmF0ZUFWRm91bmRhdGlvbk9iakM6OnBsYXRmb3JtTWVkaWEoKSBjb25z
dAotewotICAgIExPRyhNZWRpYSwgIk1lZGlhUGxheWVyUHJpdmF0ZUFWRm91bmRhdGlvbk9iakM6
OnBsYXRmb3JtTWVkaWEoJXApIiwgdGhpcyk7Ci0gICAgUGxhdGZvcm1NZWRpYSBwbTsKLSAgICBw
bS50eXBlID0gUGxhdGZvcm1NZWRpYTo6QVZGb3VuZGF0aW9uTWVkaWFQbGF5ZXJUeXBlOwotICAg
IHBtLm1lZGlhLmF2Zk1lZGlhUGxheWVyID0gbV9hdlBsYXllci5nZXQoKTsKLSAgICByZXR1cm4g
cG07Ci19Ci0KLVBsYXRmb3JtTGF5ZXIqIE1lZGlhUGxheWVyUHJpdmF0ZUFWRm91bmRhdGlvbk9i
akM6OnBsYXRmb3JtTGF5ZXIoKSBjb25zdAotewotICAgIExPRyhNZWRpYSwgIk1lZGlhUGxheWVy
UHJpdmF0ZUFWRm91bmRhdGlvbk9iakM6OnBsYXRmb3JtTGF5ZXIoJXApIiwgdGhpcyk7Ci0gICAg
cmV0dXJuIG1fdmlkZW9MYXllci5nZXQoKTsKLX0KLQotdm9pZCBNZWRpYVBsYXllclByaXZhdGVB
VkZvdW5kYXRpb25PYmpDOjpwbGF0Zm9ybVNldFZpc2libGUoYm9vbCBpc1Zpc2libGUpCi17Ci0g
ICAgW0NBVHJhbnNhY3Rpb24gYmVnaW5dOwotICAgIFtDQVRyYW5zYWN0aW9uIHNldERpc2FibGVB
Y3Rpb25zOllFU107ICAgIAotICAgIGlmIChtX3ZpZGVvTGF5ZXIpCi0gICAgICAgIFttX3ZpZGVv
TGF5ZXIuZ2V0KCkgc2V0SGlkZGVuOiFpc1Zpc2libGVdOwotICAgIFtDQVRyYW5zYWN0aW9uIGNv
bW1pdF07Ci19Ci0gICAgCi12b2lkIE1lZGlhUGxheWVyUHJpdmF0ZUFWRm91bmRhdGlvbk9iakM6
OnBsYXRmb3JtUGxheSgpCi17Ci0gICAgTE9HKE1lZGlhLCAiTWVkaWFQbGF5ZXJQcml2YXRlQVZG
b3VuZGF0aW9uT2JqQzo6cGxhdGZvcm1QbGF5KCVwKSIsIHRoaXMpOwotICAgIGlmICghbWV0YURh
dGFBdmFpbGFibGUoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgc2V0RGVsYXlDYWxsYmFja3Mo
dHJ1ZSk7Ci0gICAgW21fYXZQbGF5ZXIuZ2V0KCkgc2V0UmF0ZTpyZXF1ZXN0ZWRSYXRlKCldOwot
ICAgIHNldERlbGF5Q2FsbGJhY2tzKGZhbHNlKTsKLX0KLQotdm9pZCBNZWRpYVBsYXllclByaXZh
dGVBVkZvdW5kYXRpb25PYmpDOjpwbGF0Zm9ybVBhdXNlKCkKLXsKLSAgICBMT0coTWVkaWEsICJN
ZWRpYVBsYXllclByaXZhdGVBVkZvdW5kYXRpb25PYmpDOjpwbGF0Zm9ybVBhdXNlKCVwKSIsIHRo
aXMpOwotICAgIGlmICghbWV0YURhdGFBdmFpbGFibGUoKSkKLSAgICAgICAgcmV0dXJuOwotCi0g
ICAgc2V0RGVsYXlDYWxsYmFja3ModHJ1ZSk7Ci0gICAgW21fYXZQbGF5ZXIuZ2V0KCkgc2V0UmF0
ZTpuaWxdOwotICAgIHNldERlbGF5Q2FsbGJhY2tzKGZhbHNlKTsKLX0KLQotZmxvYXQgTWVkaWFQ
bGF5ZXJQcml2YXRlQVZGb3VuZGF0aW9uT2JqQzo6cGxhdGZvcm1EdXJhdGlvbigpIGNvbnN0Ci17
Ci0gICAgLy8gRG8gbm90IGFzayB0aGUgYXNzZXQgZm9yIGR1cmF0aW9uIGJlZm9yZSBpdCBoYXMg
YmVlbiBsb2FkZWQgb3IgaXQgd2lsbCBmZXRjaCB0aGUKLSAgICAvLyBhbnN3ZXIgc3luY2hyb25v
dXNseS4KLSAgICBpZiAoIW1fYXZBc3NldCB8fCBhc3NldFN0YXR1cygpIDwgTWVkaWFQbGF5ZXJB
VkFzc2V0U3RhdHVzTG9hZGVkKQotICAgICAgICAgcmV0dXJuIGludmFsaWRUaW1lKCk7Ci0gICAg
Ci0gICAgQ01UaW1lIGNtRHVyYXRpb247Ci0gICAgCi0gICAgLy8gQ2hlY2sgdGhlIEFWSXRlbSBp
ZiB3ZSBoYXZlIG9uZSBhbmQgaXQgaGFzIGxvYWRlZCBkdXJhdGlvbiwgc29tZSBhc3NldHMgbmV2
ZXIgcmVwb3J0IGR1cmF0aW9uLgotICAgIGlmIChtX2F2UGxheWVySXRlbSAmJiBwbGF5ZXJJdGVt
U3RhdHVzKCkgPj0gTWVkaWFQbGF5ZXJBVlBsYXllckl0ZW1TdGF0dXNSZWFkeVRvUGxheSkKLSAg
ICAgICAgY21EdXJhdGlvbiA9IFttX2F2UGxheWVySXRlbS5nZXQoKSBkdXJhdGlvbl07Ci0gICAg
ZWxzZQotICAgICAgICBjbUR1cmF0aW9uPSBbbV9hdkFzc2V0LmdldCgpIGR1cmF0aW9uXTsKLQot
ICAgIGlmIChDTVRJTUVfSVNfTlVNRVJJQyhjbUR1cmF0aW9uKSkKLSAgICAgICAgcmV0dXJuIG5h
cnJvd1ByZWNpc2lvblRvRmxvYXQoQ01UaW1lR2V0U2Vjb25kcyhjbUR1cmF0aW9uKSk7Ci0KLSAg
ICBpZiAoQ01USU1FX0lTX0lOREVGSU5JVEUoY21EdXJhdGlvbikpIHsKLSAgICAgICAgaWYgKCFb
W21fYXZBc3NldC5nZXQoKSB0cmFja3NdIGNvdW50XSkKLSAgICAgICAgICAgIHJldHVybiAwOwot
ICAgICAgICBlbHNlCi0gICAgICAgICAgICByZXR1cm4gbnVtZXJpY19saW1pdHM8ZmxvYXQ+Ojpp
bmZpbml0eSgpOwotICAgIH0KLQotICAgIExPRyhNZWRpYSwgIk1lZGlhUGxheWVyUHJpdmF0ZUFW
Rm91bmRhdGlvbk9iakM6OnBsYXRmb3JtRHVyYXRpb24oJXApIC0gaW52YWxpZCBkdXJhdGlvbiwg
cmV0dXJuaW5nICUuMGYiLCB0aGlzLCBpbnZhbGlkVGltZSgpKTsKLSAgICByZXR1cm4gaW52YWxp
ZFRpbWUoKTsKLX0KLQotZmxvYXQgTWVkaWFQbGF5ZXJQcml2YXRlQVZGb3VuZGF0aW9uT2JqQzo6
Y3VycmVudFRpbWUoKSBjb25zdAotewotICAgIGlmICghbWV0YURhdGFBdmFpbGFibGUoKSB8fCAh
bV9hdlBsYXllckl0ZW0pCi0gICAgICAgIHJldHVybiAwOwotCi0gICAgQ01UaW1lIGl0ZW1UaW1l
ID0gW21fYXZQbGF5ZXJJdGVtLmdldCgpIGN1cnJlbnRUaW1lXTsKLSAgICBpZiAoQ01USU1FX0lT
X05VTUVSSUMoaXRlbVRpbWUpKQotICAgICAgICByZXR1cm4gbmFycm93UHJlY2lzaW9uVG9GbG9h
dChDTVRpbWVHZXRTZWNvbmRzKGl0ZW1UaW1lKSk7Ci0KLSAgICByZXR1cm4gMDsKLX0KLQotdm9p
ZCBNZWRpYVBsYXllclByaXZhdGVBVkZvdW5kYXRpb25PYmpDOjpzZWVrVG9UaW1lKGZsb2F0IHRp
bWUpCi17Ci0gICAgLy8gc2V0Q3VycmVudFRpbWUgZ2VuZXJhdGVzIHNldmVyYWwgZXZlbnQgY2Fs
bGJhY2tzLCB1cGRhdGUgYWZ0ZXJ3YXJkcy4KLSAgICBzZXREZWxheUNhbGxiYWNrcyh0cnVlKTsK
LQotICAgIFdlYkNvcmVBVkZNb3ZpZU9ic2VydmVyICpvYnNlcnZlciA9IG1fb2JqY09ic2VydmVy
LmdldCgpOwotICAgIFttX2F2UGxheWVySXRlbS5nZXQoKSBzZWVrVG9UaW1lOkNNVGltZU1ha2VX
aXRoU2Vjb25kcyh0aW1lLCA2MDApIHRvbGVyYW5jZUJlZm9yZTprQ01UaW1lWmVybyB0b2xlcmFu
Y2VBZnRlcjprQ01UaW1lWmVybyBjb21wbGV0aW9uSGFuZGxlcjpeKEJPT0wgZmluaXNoZWQpIHsK
LSAgICAgICAgW29ic2VydmVyIHNlZWtDb21wbGV0ZWQ6ZmluaXNoZWRdOwotICAgIH1dOwotCi0g
ICAgc2V0RGVsYXlDYWxsYmFja3MoZmFsc2UpOwotfQotCi12b2lkIE1lZGlhUGxheWVyUHJpdmF0
ZUFWRm91bmRhdGlvbk9iakM6OnNldFZvbHVtZShmbG9hdCB2b2x1bWUpCi17Ci0gICAgaWYgKCFt
ZXRhRGF0YUF2YWlsYWJsZSgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBbbV9hdlBsYXllci5n
ZXQoKSBzZXRWb2x1bWU6dm9sdW1lXTsKLX0KLQotdm9pZCBNZWRpYVBsYXllclByaXZhdGVBVkZv
dW5kYXRpb25PYmpDOjpzZXRDbG9zZWRDYXB0aW9uc1Zpc2libGUoYm9vbCBjbG9zZWRDYXB0aW9u
c1Zpc2libGUpCi17Ci0gICAgaWYgKCFtZXRhRGF0YUF2YWlsYWJsZSgpKQotICAgICAgICByZXR1
cm47Ci0KLSAgICBMT0coTWVkaWEsICJNZWRpYVBsYXllclByaXZhdGVBVkZvdW5kYXRpb25PYmpD
OjpzZXRDbG9zZWRDYXB0aW9uc1Zpc2libGUoJXApIC0gc2V0dGluZyB0byAlcyIsIHRoaXMsIGJv
b2xTdHJpbmcoY2xvc2VkQ2FwdGlvbnNWaXNpYmxlKSk7Ci0gICAgW21fYXZQbGF5ZXIuZ2V0KCkg
c2V0Q2xvc2VkQ2FwdGlvbkRpc3BsYXlFbmFibGVkOmNsb3NlZENhcHRpb25zVmlzaWJsZV07Ci19
Ci0KLXZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlQVZGb3VuZGF0aW9uT2JqQzo6dXBkYXRlUmF0ZSgp
Ci17Ci0gICAgc2V0RGVsYXlDYWxsYmFja3ModHJ1ZSk7Ci0gICAgW21fYXZQbGF5ZXIuZ2V0KCkg
c2V0UmF0ZTpyZXF1ZXN0ZWRSYXRlKCldOwotICAgIHNldERlbGF5Q2FsbGJhY2tzKGZhbHNlKTsK
LX0KLQotZmxvYXQgTWVkaWFQbGF5ZXJQcml2YXRlQVZGb3VuZGF0aW9uT2JqQzo6cmF0ZSgpIGNv
bnN0Ci17Ci0gICAgaWYgKCFtZXRhRGF0YUF2YWlsYWJsZSgpKQotICAgICAgICByZXR1cm4gMDsK
LQotICAgIHJldHVybiBbbV9hdlBsYXllci5nZXQoKSByYXRlXTsKLX0KLQotUGFzc1JlZlB0cjxU
aW1lUmFuZ2VzPiBNZWRpYVBsYXllclByaXZhdGVBVkZvdW5kYXRpb25PYmpDOjpwbGF0Zm9ybUJ1
ZmZlcmVkVGltZVJhbmdlcygpIGNvbnN0Ci17Ci0gICAgUmVmUHRyPFRpbWVSYW5nZXM+IHRpbWVS
YW5nZXMgPSBUaW1lUmFuZ2VzOjpjcmVhdGUoKTsKLQotICAgIGlmICghbV9hdlBsYXllckl0ZW0p
Ci0gICAgICAgIHJldHVybiB0aW1lUmFuZ2VzLnJlbGVhc2UoKTsKLQotICAgIE5TQXJyYXkgKmxv
YWRlZFJhbmdlcyA9IFttX2F2UGxheWVySXRlbS5nZXQoKSBsb2FkZWRUaW1lUmFuZ2VzXTsKLSAg
ICBmb3IgKE5TVmFsdWUgKnRoaXNSYW5nZVZhbHVlIGluIGxvYWRlZFJhbmdlcykgewotICAgICAg
ICBDTVRpbWVSYW5nZSB0aW1lUmFuZ2UgPSBbdGhpc1JhbmdlVmFsdWUgQ01UaW1lUmFuZ2VWYWx1
ZV07Ci0gICAgICAgIGlmIChDTVRJTUVSQU5HRV9JU19WQUxJRCh0aW1lUmFuZ2UpICYmICFDTVRJ
TUVSQU5HRV9JU19FTVBUWSh0aW1lUmFuZ2UpKSB7Ci0gICAgICAgICAgICBmbG9hdCByYW5nZVN0
YXJ0ID0gbmFycm93UHJlY2lzaW9uVG9GbG9hdChDTVRpbWVHZXRTZWNvbmRzKHRpbWVSYW5nZS5z
dGFydCkpOwotICAgICAgICAgICAgZmxvYXQgcmFuZ2VFbmQgPSBuYXJyb3dQcmVjaXNpb25Ub0Zs
b2F0KENNVGltZUdldFNlY29uZHMoQ01UaW1lUmFuZ2VHZXRFbmQodGltZVJhbmdlKSkpOwotICAg
ICAgICAgICAgdGltZVJhbmdlcy0+YWRkKHJhbmdlU3RhcnQsIHJhbmdlRW5kKTsKLSAgICAgICAg
fQotICAgIH0KLSAgICByZXR1cm4gdGltZVJhbmdlcy5yZWxlYXNlKCk7Ci19Ci0KLWZsb2F0IE1l
ZGlhUGxheWVyUHJpdmF0ZUFWRm91bmRhdGlvbk9iakM6OnBsYXRmb3JtTWF4VGltZVNlZWthYmxl
KCkgY29uc3QKLXsKLSAgICBOU0FycmF5ICpzZWVrYWJsZVJhbmdlcyA9IFttX2F2UGxheWVySXRl
bS5nZXQoKSBzZWVrYWJsZVRpbWVSYW5nZXNdOwotICAgIGlmICghc2Vla2FibGVSYW5nZXMpCi0g
ICAgICAgIHJldHVybiAwOwotCi0gICAgZmxvYXQgbWF4VGltZVNlZWthYmxlID0gMDsKLSAgICBm
b3IgKE5TVmFsdWUgKnRoaXNSYW5nZVZhbHVlIGluIHNlZWthYmxlUmFuZ2VzKSB7Ci0gICAgICAg
IENNVGltZVJhbmdlIHRpbWVSYW5nZSA9IFt0aGlzUmFuZ2VWYWx1ZSBDTVRpbWVSYW5nZVZhbHVl
XTsKLSAgICAgICAgaWYgKCFDTVRJTUVSQU5HRV9JU19WQUxJRCh0aW1lUmFuZ2UpIHx8IENNVElN
RVJBTkdFX0lTX0VNUFRZKHRpbWVSYW5nZSkpCi0gICAgICAgICAgICBjb250aW51ZTsKLSAgICAg
ICAgCi0gICAgICAgIGZsb2F0IGVuZE9mUmFuZ2UgPSBuYXJyb3dQcmVjaXNpb25Ub0Zsb2F0KENN
VGltZUdldFNlY29uZHMoQ01UaW1lUmFuZ2VHZXRFbmQodGltZVJhbmdlKSkpOwotICAgICAgICBp
ZiAobWF4VGltZVNlZWthYmxlIDwgZW5kT2ZSYW5nZSkKLSAgICAgICAgICAgIG1heFRpbWVTZWVr
YWJsZSA9IGVuZE9mUmFuZ2U7Ci0gICAgfQotICAgIHJldHVybiBtYXhUaW1lU2Vla2FibGU7ICAg
Ci19Ci0KLWZsb2F0IE1lZGlhUGxheWVyUHJpdmF0ZUFWRm91bmRhdGlvbk9iakM6OnBsYXRmb3Jt
TWF4VGltZUxvYWRlZCgpIGNvbnN0Ci17Ci0gICAgTlNBcnJheSAqbG9hZGVkUmFuZ2VzID0gW21f
YXZQbGF5ZXJJdGVtLmdldCgpIGxvYWRlZFRpbWVSYW5nZXNdOwotICAgIGlmICghbG9hZGVkUmFu
Z2VzKQotICAgICAgICByZXR1cm4gMDsKLQotICAgIGZsb2F0IG1heFRpbWVMb2FkZWQgPSAwOwot
ICAgIGZvciAoTlNWYWx1ZSAqdGhpc1JhbmdlVmFsdWUgaW4gbG9hZGVkUmFuZ2VzKSB7Ci0gICAg
ICAgIENNVGltZVJhbmdlIHRpbWVSYW5nZSA9IFt0aGlzUmFuZ2VWYWx1ZSBDTVRpbWVSYW5nZVZh
bHVlXTsKLSAgICAgICAgaWYgKCFDTVRJTUVSQU5HRV9JU19WQUxJRCh0aW1lUmFuZ2UpIHx8IENN
VElNRVJBTkdFX0lTX0VNUFRZKHRpbWVSYW5nZSkpCi0gICAgICAgICAgICBjb250aW51ZTsKLSAg
ICAgICAgCi0gICAgICAgIGZsb2F0IGVuZE9mUmFuZ2UgPSBuYXJyb3dQcmVjaXNpb25Ub0Zsb2F0
KENNVGltZUdldFNlY29uZHMoQ01UaW1lUmFuZ2VHZXRFbmQodGltZVJhbmdlKSkpOwotICAgICAg
ICBpZiAobWF4VGltZUxvYWRlZCA8IGVuZE9mUmFuZ2UpCi0gICAgICAgICAgICBtYXhUaW1lTG9h
ZGVkID0gZW5kT2ZSYW5nZTsKLSAgICB9Ci0KLSAgICByZXR1cm4gbWF4VGltZUxvYWRlZDsgICAK
LX0KLQotdW5zaWduZWQgTWVkaWFQbGF5ZXJQcml2YXRlQVZGb3VuZGF0aW9uT2JqQzo6dG90YWxC
eXRlcygpIGNvbnN0Ci17Ci0gICAgaWYgKCFtZXRhRGF0YUF2YWlsYWJsZSgpKQotICAgICAgICBy
ZXR1cm4gMDsKLQotICAgIGxvbmcgbG9uZyB0b3RhbE1lZGlhU2l6ZSA9IDA7Ci0gICAgTlNBcnJh
eSAqdHJhY2tzID0gW21fYXZBc3NldC5nZXQoKSB0cmFja3NdOwotICAgIGZvciAoQVZBc3NldFRy
YWNrICp0aGlzVHJhY2sgaW4gdHJhY2tzKQotICAgICAgICB0b3RhbE1lZGlhU2l6ZSArPSBbdGhp
c1RyYWNrIHRvdGFsU2FtcGxlRGF0YUxlbmd0aF07Ci0KLSAgICByZXR1cm4gc3RhdGljX2Nhc3Q8
dW5zaWduZWQ+KHRvdGFsTWVkaWFTaXplKTsKLX0KLQotdm9pZCBNZWRpYVBsYXllclByaXZhdGVB
VkZvdW5kYXRpb25PYmpDOjpzZXRBc3NldChpZCBhc3NldCkKLXsKLSAgICBtX2F2QXNzZXQgPSBh
c3NldDsKLX0KLQotTWVkaWFQbGF5ZXJQcml2YXRlQVZGb3VuZGF0aW9uOjpBc3NldFN0YXR1cyBN
ZWRpYVBsYXllclByaXZhdGVBVkZvdW5kYXRpb25PYmpDOjphc3NldFN0YXR1cygpIGNvbnN0Ci17
Ci0gICAgaWYgKCFtX2F2QXNzZXQpCi0gICAgICAgIHJldHVybiBNZWRpYVBsYXllckFWQXNzZXRT
dGF0dXNEb2VzTm90RXhpc3Q7Ci0KLSAgICBmb3IgKE5TU3RyaW5nICprZXlOYW1lIGluIGFzc2V0
TWV0YWRhdGFLZXlOYW1lcygpKSB7Ci0gICAgICAgIEFWS2V5VmFsdWVTdGF0dXMga2V5U3RhdHVz
ID0gW21fYXZBc3NldC5nZXQoKSBzdGF0dXNPZlZhbHVlRm9yS2V5OmtleU5hbWUgZXJyb3I6bmls
XTsKLSAgICAgICAgaWYgKGtleVN0YXR1cyA8IEFWS2V5VmFsdWVTdGF0dXNMb2FkZWQpCi0gICAg
ICAgICAgICByZXR1cm4gTWVkaWFQbGF5ZXJBVkFzc2V0U3RhdHVzTG9hZGluZzsvLyBBdCBsZWFz
dCBvbmUga2V5IGlzIG5vdCBsb2FkZWQgeWV0LgotICAgICAgICAKLSAgICAgICAgaWYgKGtleVN0
YXR1cyA9PSBBVktleVZhbHVlU3RhdHVzRmFpbGVkKQotICAgICAgICAgICAgcmV0dXJuIE1lZGlh
UGxheWVyQVZBc3NldFN0YXR1c0ZhaWxlZDsgLy8gQXQgbGVhc3Qgb25lIGtleSBjb3VsZCBub3Qg
YmUgbG9hZGVkLgotCi0gICAgICAgIGlmIChrZXlTdGF0dXMgPT0gQVZLZXlWYWx1ZVN0YXR1c0Nh
bmNlbGxlZCkKLSAgICAgICAgICAgIHJldHVybiBNZWRpYVBsYXllckFWQXNzZXRTdGF0dXNDYW5j
ZWxsZWQ7IC8vIExvYWRpbmcgb2YgYXQgbGVhc3Qgb25lIGtleSB3YXMgY2FuY2VsbGVkLgotICAg
IH0KLQotICAgIGlmIChbW21fYXZBc3NldC5nZXQoKSB2YWx1ZUZvcktleTpAInBsYXlhYmxlIl0g
Ym9vbFZhbHVlXSkKLSAgICAgICAgcmV0dXJuIE1lZGlhUGxheWVyQVZBc3NldFN0YXR1c1BsYXlh
YmxlOwotCi0gICAgcmV0dXJuIE1lZGlhUGxheWVyQVZBc3NldFN0YXR1c0xvYWRlZDsKLX0KLQot
dm9pZCBNZWRpYVBsYXllclByaXZhdGVBVkZvdW5kYXRpb25PYmpDOjpwYWludEN1cnJlbnRGcmFt
ZUluQ29udGV4dChHcmFwaGljc0NvbnRleHQqIGNvbnRleHQsIGNvbnN0IEludFJlY3QmIHJlY3Qp
Ci17Ci0gICAgaWYgKCFtZXRhRGF0YUF2YWlsYWJsZSgpIHx8IGNvbnRleHQtPnBhaW50aW5nRGlz
YWJsZWQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgcGFpbnQoY29udGV4dCwgcmVjdCk7Ci19
Ci0KLXZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlQVZGb3VuZGF0aW9uT2JqQzo6cGFpbnQoR3JhcGhp
Y3NDb250ZXh0KiBjb250ZXh0LCBjb25zdCBJbnRSZWN0JiByZWN0KQotewotICAgIGlmICghbWV0
YURhdGFBdmFpbGFibGUoKSB8fCBjb250ZXh0LT5wYWludGluZ0Rpc2FibGVkKCkpCi0gICAgICAg
IHJldHVybjsKLQotICAgIHNldERlbGF5Q2FsbGJhY2tzKHRydWUpOwotICAgIEJFR0lOX0JMT0NL
X09CSkNfRVhDRVBUSU9OUzsKLQotICAgIFJldGFpblB0cjxDR0ltYWdlUmVmPiBpbWFnZSA9IGNy
ZWF0ZUltYWdlRm9yVGltZUluUmVjdChjdXJyZW50VGltZSgpLCByZWN0KTsKLSAgICBpZiAoaW1h
Z2UpIHsKLSAgICAgICAgR3JhcGhpY3NDb250ZXh0U3RhdGVTYXZlciBzdGF0ZVNhdmVyKCpjb250
ZXh0KTsKLSAgICAgICAgY29udGV4dC0+dHJhbnNsYXRlKHJlY3QueCgpLCByZWN0LnkoKSArIHJl
Y3QuaGVpZ2h0KCkpOwotICAgICAgICBjb250ZXh0LT5zY2FsZShGbG9hdFNpemUoMS4wZiwgLTEu
MGYpKTsKLSAgICAgICAgY29udGV4dC0+c2V0SW1hZ2VJbnRlcnBvbGF0aW9uUXVhbGl0eShJbnRl
cnBvbGF0aW9uTG93KTsKLSAgICAgICAgSW50UmVjdCBwYWludFJlY3QoSW50UG9pbnQoMCwgMCks
IEludFNpemUocmVjdC53aWR0aCgpLCByZWN0LmhlaWdodCgpKSk7Ci0gICAgICAgIENHQ29udGV4
dERyYXdJbWFnZShjb250ZXh0LT5wbGF0Zm9ybUNvbnRleHQoKSwgQ0dSZWN0TWFrZSgwLCAwLCBw
YWludFJlY3Qud2lkdGgoKSwgcGFpbnRSZWN0LmhlaWdodCgpKSwgaW1hZ2UuZ2V0KCkpOwotICAg
ICAgICBpbWFnZSA9IDA7Ci0gICAgfQotCi0gICAgRU5EX0JMT0NLX09CSkNfRVhDRVBUSU9OUzsK
LSAgICBzZXREZWxheUNhbGxiYWNrcyhmYWxzZSk7Ci0KLSAgICBtX3ZpZGVvRnJhbWVIYXNEcmF3
biA9IHRydWU7Ci19Ci0KLXN0YXRpYyBIYXNoU2V0PFN0cmluZz4gbWltZVR5cGVDYWNoZSgpCi17
Ci0gICAgREVGSU5FX1NUQVRJQ19MT0NBTChIYXNoU2V0PFN0cmluZz4sIGNhY2hlLCAoKSk7Ci0g
ICAgc3RhdGljIGJvb2wgdHlwZUxpc3RJbml0aWFsaXplZCA9IGZhbHNlOwotCi0gICAgaWYgKHR5
cGVMaXN0SW5pdGlhbGl6ZWQpCi0gICAgICAgIHJldHVybiBjYWNoZTsKLSAgICB0eXBlTGlzdElu
aXRpYWxpemVkID0gdHJ1ZTsKLQotICAgIE5TQXJyYXkgKnR5cGVzID0gW0FWVVJMQXNzZXQgYXVk
aW92aXN1YWxNSU1FVHlwZXNdOwotICAgIGZvciAoTlNTdHJpbmcgKm1pbWVUeXBlIGluIHR5cGVz
KQotICAgICAgICBjYWNoZS5hZGQobWltZVR5cGUpOwotCi0gICAgcmV0dXJuIGNhY2hlOwotfSAK
LQotUmV0YWluUHRyPENHSW1hZ2VSZWY+IE1lZGlhUGxheWVyUHJpdmF0ZUFWRm91bmRhdGlvbk9i
akM6OmNyZWF0ZUltYWdlRm9yVGltZUluUmVjdChmbG9hdCB0aW1lLCBjb25zdCBJbnRSZWN0JiBy
ZWN0KQotewotICAgIGlmICghbV9pbWFnZUdlbmVyYXRvcikKLSAgICAgICAgY3JlYXRlQ29udGV4
dFZpZGVvUmVuZGVyZXIoKTsKLSAgICBBU1NFUlQobV9pbWFnZUdlbmVyYXRvcik7Ci0KLSNpZiAh
TE9HX0RJU0FCTEVECi0gICAgZG91YmxlIHN0YXJ0ID0gV1RGOjpjdXJyZW50VGltZSgpOwotI2Vu
ZGlmCi0KLSAgICBbbV9pbWFnZUdlbmVyYXRvci5nZXQoKSBzZXRNYXhpbXVtU2l6ZTpDR1NpemUo
cmVjdC5zaXplKCkpXTsKLSAgICBDR0ltYWdlUmVmIGltYWdlID0gW21faW1hZ2VHZW5lcmF0b3Iu
Z2V0KCkgY29weUNHSW1hZ2VBdFRpbWU6Q01UaW1lTWFrZVdpdGhTZWNvbmRzKHRpbWUsIDYwMCkg
YWN0dWFsVGltZTpuaWwgZXJyb3I6bmlsXTsKLQotI2lmICFMT0dfRElTQUJMRUQKLSAgICBkb3Vi
bGUgZHVyYXRpb24gPSBXVEY6OmN1cnJlbnRUaW1lKCkgLSBzdGFydDsKLSAgICBMT0coTWVkaWEs
ICJNZWRpYVBsYXllclByaXZhdGVBVkZvdW5kYXRpb25PYmpDOjpjcmVhdGVJbWFnZUZvclRpbWVJ
blJlY3QoJXApIC0gY3JlYXRpbmcgaW1hZ2UgdG9vayAlLjRmIiwgdGhpcywgbmFycm93UHJlY2lz
aW9uVG9GbG9hdChkdXJhdGlvbikpOwotI2VuZGlmCi0KLSAgICByZXR1cm4gaW1hZ2U7Ci19Ci0K
LXZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlQVZGb3VuZGF0aW9uT2JqQzo6Z2V0U3VwcG9ydGVkVHlw
ZXMoSGFzaFNldDxTdHJpbmc+JiBzdXBwb3J0ZWRUeXBlcykKLXsKLSAgICBzdXBwb3J0ZWRUeXBl
cyA9IG1pbWVUeXBlQ2FjaGUoKTsKLX0gCi0KLU1lZGlhUGxheWVyOjpTdXBwb3J0c1R5cGUgTWVk
aWFQbGF5ZXJQcml2YXRlQVZGb3VuZGF0aW9uT2JqQzo6c3VwcG9ydHNUeXBlKGNvbnN0IFN0cmlu
ZyYgdHlwZSwgY29uc3QgU3RyaW5nJiBjb2RlY3MpCi17Ci0gICAgaWYgKCFtaW1lVHlwZUNhY2hl
KCkuY29udGFpbnModHlwZSkpCi0gICAgICAgIHJldHVybiBNZWRpYVBsYXllcjo6SXNOb3RTdXBw
b3J0ZWQ7Ci0KLSAgICAvLyBUaGUgc3BlYyBzYXlzOgotICAgIC8vICJJbXBsZW1lbnRvcnMgYXJl
IGVuY291cmFnZWQgdG8gcmV0dXJuICJtYXliZSIgdW5sZXNzIHRoZSB0eXBlIGNhbiBiZSBjb25m
aWRlbnRseSBlc3RhYmxpc2hlZCBhcyBiZWluZyBzdXBwb3J0ZWQgb3Igbm90LiIKLSAgICBpZiAo
Y29kZWNzLmlzRW1wdHkoKSkKLSAgICAgICAgcmV0dXJuIE1lZGlhUGxheWVyOjpNYXlCZVN1cHBv
cnRlZDsKLQotICAgIE5TU3RyaW5nICp0eXBlU3RyaW5nID0gW05TU3RyaW5nIHN0cmluZ1dpdGhG
b3JtYXQ6QCIlQDsgY29kZWNzPVwiJUBcIiIsIChOU1N0cmluZyAqKXR5cGUsIChOU1N0cmluZyAq
KWNvZGVjc107Ci0gICAgcmV0dXJuIFtBVlVSTEFzc2V0IGlzUGxheWFibGVFeHRlbmRlZE1JTUVU
eXBlOnR5cGVTdHJpbmddID8gTWVkaWFQbGF5ZXI6OklzU3VwcG9ydGVkIDogTWVkaWFQbGF5ZXI6
Ok1heUJlU3VwcG9ydGVkOzsKLX0KLQotYm9vbCBNZWRpYVBsYXllclByaXZhdGVBVkZvdW5kYXRp
b25PYmpDOjppc0F2YWlsYWJsZSgpCi17Ci0gICAgcmV0dXJuIEFWRm91bmRhdGlvbkxpYnJhcnko
KSAmJiBDb3JlTWVkaWFMaWJyYXJ5KCk7Ci19Ci0KLWZsb2F0IE1lZGlhUGxheWVyUHJpdmF0ZUFW
Rm91bmRhdGlvbk9iakM6Om1lZGlhVGltZUZvclRpbWVWYWx1ZShmbG9hdCB0aW1lVmFsdWUpIGNv
bnN0Ci17Ci0gICAgaWYgKCFtZXRhRGF0YUF2YWlsYWJsZSgpKQotICAgICAgICByZXR1cm4gdGlt
ZVZhbHVlOwotCi0gICAgLy8gRklYTUUgLSBpbXBvc3NpYmxlIHRvIGltcGxlbWVudCB1bnRpbCBy
ZGFyOi8vODcyMTUxMCBpcyBmaXhlZC4KLSAgICByZXR1cm4gdGltZVZhbHVlOwotfQotCi12b2lk
IE1lZGlhUGxheWVyUHJpdmF0ZUFWRm91bmRhdGlvbk9iakM6OnRyYWNrc0NoYW5nZWQoKQotewot
ICAgIGlmICghbV9hdkFzc2V0KQotICAgICAgICByZXR1cm47Ci0KLSAgICAvLyBUaGlzIGlzIGNh
bGxlZCB3aGVuZXZlciB0aGUgdHJhY2tzIGNvbGxlY3Rpb24gY2hhbmdlcyBzbyBjYWNoZSBoYXNW
aWRlbyBhbmQgaGFzQXVkaW8gc2luY2Ugd2UgYXJlCi0gICAgLy8gYXNrZWQgYWJvdXQgdGhvc2Ug
ZmFpcmx5IGZlcXVlbnRseS4KLSAgICBpZiAoIW1fYXZQbGF5ZXJJdGVtKSB7Ci0gICAgICAgIC8v
IFdlIGRvbid0IGhhdmUgYSBwbGF5ZXIgaXRlbSB5ZXQsIHNvIGNoZWNrIHdpdGggdGhlIGFzc2V0
IGJlY2F1c2Ugc29tZSBhc3NldHMgc3VwcG9ydCBpbnNwZWN0aW9uCi0gICAgICAgIC8vIHByaW9y
IHRvIGJlY29taW5nIHJlYWR5IHRvIHBsYXkuCi0gICAgICAgIHNldEhhc1ZpZGVvKFtbbV9hdkFz
c2V0LmdldCgpIHRyYWNrc1dpdGhNZWRpYUNoYXJhY3RlcmlzdGljOkFWTWVkaWFDaGFyYWN0ZXJp
c3RpY1Zpc3VhbF0gY291bnRdKTsKLSAgICAgICAgc2V0SGFzQXVkaW8oW1ttX2F2QXNzZXQuZ2V0
KCkgdHJhY2tzV2l0aE1lZGlhQ2hhcmFjdGVyaXN0aWM6QVZNZWRpYUNoYXJhY3RlcmlzdGljQXVk
aWJsZV0gY291bnRdKTsKLSAgICAgICAgc2V0SGFzQ2xvc2VkQ2FwdGlvbnMoW1ttX2F2QXNzZXQu
Z2V0KCkgdHJhY2tzV2l0aE1lZGlhVHlwZTpBVk1lZGlhVHlwZUNsb3NlZENhcHRpb25dIGNvdW50
XSk7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgYm9vbCBoYXNWaWRlbyA9IGZhbHNlOwotICAgICAg
ICBib29sIGhhc0F1ZGlvID0gZmFsc2U7Ci0gICAgICAgIGJvb2wgaGFzQ2FwdGlvbnMgPSBmYWxz
ZTsKLSAgICAgICAgTlNBcnJheSAqdHJhY2tzID0gW21fYXZQbGF5ZXJJdGVtLmdldCgpIHRyYWNr
c107Ci0gICAgICAgIGZvciAoQVZQbGF5ZXJJdGVtVHJhY2sgKnRyYWNrIGluIHRyYWNrcykgewot
ICAgICAgICAgICAgaWYgKFt0cmFjayBpc0VuYWJsZWRdKSB7Ci0gICAgICAgICAgICAgICAgQVZB
c3NldFRyYWNrICphc3NldFRyYWNrID0gW3RyYWNrIGFzc2V0VHJhY2tdOwotICAgICAgICAgICAg
ICAgIGlmIChbW2Fzc2V0VHJhY2sgbWVkaWFUeXBlXSBpc0VxdWFsVG9TdHJpbmc6QVZNZWRpYVR5
cGVWaWRlb10pCi0gICAgICAgICAgICAgICAgICAgIGhhc1ZpZGVvID0gdHJ1ZTsKLSAgICAgICAg
ICAgICAgICBlbHNlIGlmIChbW2Fzc2V0VHJhY2sgbWVkaWFUeXBlXSBpc0VxdWFsVG9TdHJpbmc6
QVZNZWRpYVR5cGVBdWRpb10pCi0gICAgICAgICAgICAgICAgICAgIGhhc0F1ZGlvID0gdHJ1ZTsK
LSAgICAgICAgICAgICAgICBlbHNlIGlmIChbW2Fzc2V0VHJhY2sgbWVkaWFUeXBlXSBpc0VxdWFs
VG9TdHJpbmc6QVZNZWRpYVR5cGVDbG9zZWRDYXB0aW9uXSkKLSAgICAgICAgICAgICAgICAgICAg
aGFzQ2FwdGlvbnMgPSB0cnVlOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIHNl
dEhhc1ZpZGVvKGhhc1ZpZGVvKTsKLSAgICAgICAgc2V0SGFzQXVkaW8oaGFzQXVkaW8pOwotICAg
ICAgICBzZXRIYXNDbG9zZWRDYXB0aW9ucyhoYXNDYXB0aW9ucyk7Ci0gICAgfQotCi0gICAgTE9H
KE1lZGlhLCAiV2ViQ29yZUFWRk1vdmllT2JzZXJ2ZXI6dHJhY2tzQ2hhbmdlZCglcCkgLSBoYXNW
aWRlbyA9ICVzLCBoYXNBdWRpbyA9ICVzLCBoYXNDYXB0aW9ucyA9ICVzIiwgCi0gICAgICAgIHRo
aXMsIGJvb2xTdHJpbmcoaGFzVmlkZW8oKSksIGJvb2xTdHJpbmcoaGFzQXVkaW8oKSksIGJvb2xT
dHJpbmcoaGFzQ2xvc2VkQ2FwdGlvbnMoKSkpOwotCi0gICAgc2l6ZUNoYW5nZWQoKTsKLX0KLQot
dm9pZCBNZWRpYVBsYXllclByaXZhdGVBVkZvdW5kYXRpb25PYmpDOjpzaXplQ2hhbmdlZCgpCi17
Ci0gICAgaWYgKCFtX2F2QXNzZXQpCi0gICAgICAgIHJldHVybjsKLQotICAgIE5TQXJyYXkgKnRy
YWNrcyA9IFttX2F2QXNzZXQuZ2V0KCkgdHJhY2tzXTsKLQotICAgIC8vIFNvbWUgYXNzZXRzIGRv
bid0IHJlcG9ydCB0cmFjayBwcm9wZXJ0aWVzIHVudGlsIHRoZXkgYXJlIGNvbXBsZXRlbHkgcmVh
ZHkgdG8gcGxheSwgYnV0IHdlCi0gICAgLy8gd2FudCB0byByZXBvcnQgYSBzaXplIGFzIGVhcmx5
IGFzIHBvc3NpYmxlIHNvIHVzZSBwcmVzZW50YXRpb25TaXplIHdoZW4gYW4gYXNzZXQgaGFzIG5v
IHRyYWNrcy4KLSAgICBpZiAobV9hdlBsYXllckl0ZW0gJiYgIVt0cmFja3MgY291bnRdKSB7Ci0g
ICAgICAgIHNldE5hdHVyYWxTaXplKEludFNpemUoW21fYXZQbGF5ZXJJdGVtLmdldCgpIHByZXNl
bnRhdGlvblNpemVdKSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICAvLyBBVkFzc2V0
J3MgJ25hdHVyYWxTaXplJyBwcm9wZXJ0eSBvbmx5IGNvbnNpZGVycyB0aGUgbW92aWUncyBmaXJz
dCB2aWRlbyB0cmFjaywgc28gd2UgbmVlZCB0byBjb21wdXRlCi0gICAgLy8gdGhlIHVuaW9uIG9m
IGFsbCB2aXN1YWwgdHJhY2sgcmVjdHMuCi0gICAgQ0dSZWN0IHRyYWNrVW5pb25SZWN0ID0gQ0dS
ZWN0WmVybzsKLSAgICBmb3IgKEFWQXNzZXRUcmFjayAqdHJhY2sgaW4gdHJhY2tzKSB7Ci0gICAg
ICAgIENHU2l6ZSB0cmFja1NpemUgPSBbdHJhY2sgbmF0dXJhbFNpemVdOwotICAgICAgICBDR1Jl
Y3QgdHJhY2tSZWN0ID0gQ0dSZWN0TWFrZSgwLCAwLCB0cmFja1NpemUud2lkdGgsIHRyYWNrU2l6
ZS5oZWlnaHQpOwotICAgICAgICB0cmFja1VuaW9uUmVjdCA9IENHUmVjdFVuaW9uKHRyYWNrVW5p
b25SZWN0LCBDR1JlY3RBcHBseUFmZmluZVRyYW5zZm9ybSh0cmFja1JlY3QsIFt0cmFjayBwcmVm
ZXJyZWRUcmFuc2Zvcm1dKSk7Ci0gICAgfQotCi0gICAgLy8gVGhlIG1vdmllIGlzIGFsd2F5cyBk
aXNwbGF5ZWQgYXQgMCwwIHNvIG1vdmUgdGhlIHRyYWNrIHJlY3QgdG8gdGhlIG9yaWdpbiBiZWZv
cmUgdXNpbmcgd2lkdGggYW5kIGhlaWdodC4KLSAgICB0cmFja1VuaW9uUmVjdCA9IENHUmVjdE9m
ZnNldCh0cmFja1VuaW9uUmVjdCwgdHJhY2tVbmlvblJlY3Qub3JpZ2luLngsIHRyYWNrVW5pb25S
ZWN0Lm9yaWdpbi55KTsKLSAgICAKLSAgICAvLyBBbHNvIGxvb2sgYXQgdGhlIGFzc2V0J3MgcHJl
ZmVycmVkIHRyYW5zZm9ybSBzbyB3ZSBhY2NvdW50IGZvciBhIG1vdmllIG1hdHJpeC4KLSAgICBD
R1NpemUgbmF0dXJhbFNpemUgPSBDR1NpemVBcHBseUFmZmluZVRyYW5zZm9ybSh0cmFja1VuaW9u
UmVjdC5zaXplLCBbbV9hdkFzc2V0LmdldCgpIHByZWZlcnJlZFRyYW5zZm9ybV0pOwotCi0gICAg
Ly8gQ2FjaGUgdGhlIG5hdHVyYWwgc2l6ZSAoc2V0TmF0dXJhbFNpemUgd2lsbCBub3RpZnkgdGhl
IHBsYXllciBpZiBpdCBoYXMgY2hhbmdlZCkuCi0gICAgc2V0TmF0dXJhbFNpemUoSW50U2l6ZShu
YXR1cmFsU2l6ZSkpOwotfQotCi1ib29sIE1lZGlhUGxheWVyUHJpdmF0ZUFWRm91bmRhdGlvbk9i
akM6Omhhc1NpbmdsZVNlY3VyaXR5T3JpZ2luKCkgY29uc3QgCi17Ci0gICAgaWYgKCFtX2F2QXNz
ZXQpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAKLSAgICBSZWZQdHI8U2VjdXJpdHlPcmln
aW4+IHJlc29sdmVkT3JpZ2luID0gU2VjdXJpdHlPcmlnaW46OmNyZWF0ZShLVVJMKHdrQVZBc3Nl
dFJlc29sdmVkVVJMKG1fYXZBc3NldC5nZXQoKSkpKTsKLSAgICBSZWZQdHI8U2VjdXJpdHlPcmln
aW4+IHJlcXVlc3RlZE9yaWdpbiA9IFNlY3VyaXR5T3JpZ2luOjpjcmVhdGVGcm9tU3RyaW5nKGFz
c2V0VVJMKCkpOwotICAgIHJldHVybiByZXNvbHZlZE9yaWdpbi0+aXNTYW1lU2NoZW1lSG9zdFBv
cnQocmVxdWVzdGVkT3JpZ2luLmdldCgpKTsKLX0KLQotTlNBcnJheSogYXNzZXRNZXRhZGF0YUtl
eU5hbWVzKCkKLXsKLSAgICBzdGF0aWMgTlNBcnJheSoga2V5czsKLSAgICBpZiAoIWtleXMpIHsK
LSAgICAgICAga2V5cyA9IFtbTlNBcnJheSBhbGxvY10gaW5pdFdpdGhPYmplY3RzOkAiZHVyYXRp
b24iLAotICAgICAgICAgICAgICAgICAgICBAIm5hdHVyYWxTaXplIiwKLSAgICAgICAgICAgICAg
ICAgICAgQCJwcmVmZXJyZWRUcmFuc2Zvcm0iLAotICAgICAgICAgICAgICAgICAgICBAInByZWZl
cnJlZFZvbHVtZSIsCi0gICAgICAgICAgICAgICAgICAgIEAicHJlZmVycmVkUmF0ZSIsCi0gICAg
ICAgICAgICAgICAgICAgIEAicGxheWFibGUiLAotICAgICAgICAgICAgICAgICAgICBAInRyYWNr
cyIsCi0gICAgICAgICAgICAgICAgICAgbmlsXTsKLSAgICB9Ci0gICAgcmV0dXJuIGtleXM7Ci19
Ci0KLU5TQXJyYXkqIGl0ZW1LVk9Qcm9wZXJ0aWVzKCkKLXsKLSAgICBzdGF0aWMgTlNBcnJheSog
a2V5czsKLSAgICBpZiAoIWtleXMpIHsKLSAgICAgICAga2V5cyA9IFtbTlNBcnJheSBhbGxvY10g
aW5pdFdpdGhPYmplY3RzOkAicHJlc2VudGF0aW9uU2l6ZSIsCi0gICAgICAgICAgICAgICAgQCJz
dGF0dXMiLAotICAgICAgICAgICAgICAgIEAiYXNzZXQiLAotICAgICAgICAgICAgICAgIEAidHJh
Y2tzIiwKLSAgICAgICAgICAgICAgICBAInNlZWthYmxlVGltZVJhbmdlcyIsCi0gICAgICAgICAg
ICAgICAgQCJsb2FkZWRUaW1lUmFuZ2VzIiwKLSAgICAgICAgICAgICAgICBAInBsYXliYWNrTGlr
ZWx5VG9LZWVwVXAiLAotICAgICAgICAgICAgICAgIEAicGxheWJhY2tCdWZmZXJGdWxsIiwKLSAg
ICAgICAgICAgICAgICBAInBsYXliYWNrQnVmZmVyRW1wdHkiLAotICAgICAgICAgICAgICAgIEAi
ZHVyYXRpb24iLAotICAgICAgICAgICAgICAgIG5pbF07Ci0gICAgfQotICAgIHJldHVybiBrZXlz
OwotfQotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCi0KLUBpbXBsZW1lbnRhdGlvbiBXZWJDb3Jl
QVZGTW92aWVPYnNlcnZlcgotCi0tIChpZClpbml0V2l0aENhbGxiYWNrOihNZWRpYVBsYXllclBy
aXZhdGVBVkZvdW5kYXRpb25PYmpDKiljYWxsYmFjawotewotICAgIG1fY2FsbGJhY2sgPSBjYWxs
YmFjazsKLSAgICByZXR1cm4gW3N1cGVyIGluaXRdOwotfQotCi0tICh2b2lkKWRpc2Nvbm5lY3QK
LXsKLSAgICBbTlNPYmplY3QgY2FuY2VsUHJldmlvdXNQZXJmb3JtUmVxdWVzdHNXaXRoVGFyZ2V0
OnNlbGZdOwotICAgIG1fY2FsbGJhY2sgPSAwOwotfQotCi0tICh2b2lkKW1ldGFkYXRhTG9hZGVk
Ci17Ci0gICAgaWYgKCFtX2NhbGxiYWNrKQotICAgICAgICByZXR1cm47Ci0KLSAgICBtX2NhbGxi
YWNrLT5zY2hlZHVsZU1haW5UaHJlYWROb3RpZmljYXRpb24oTWVkaWFQbGF5ZXJQcml2YXRlQVZG
b3VuZGF0aW9uOjpOb3RpZmljYXRpb246OkFzc2V0TWV0YWRhdGFMb2FkZWQpOwotfQotCi0tICh2
b2lkKXBsYXlhYmxlS25vd24KLXsKLSAgICBpZiAoIW1fY2FsbGJhY2spCi0gICAgICAgIHJldHVy
bjsKLQotICAgIG1fY2FsbGJhY2stPnNjaGVkdWxlTWFpblRocmVhZE5vdGlmaWNhdGlvbihNZWRp
YVBsYXllclByaXZhdGVBVkZvdW5kYXRpb246Ok5vdGlmaWNhdGlvbjo6QXNzZXRQbGF5YWJpbGl0
eUtub3duKTsKLX0KLQotLSAodm9pZCl0aW1lQ2hhbmdlZDooZG91YmxlKXRpbWUKLXsKLSAgICBp
ZiAoIW1fY2FsbGJhY2spCi0gICAgICAgIHJldHVybjsKLQotICAgIG1fY2FsbGJhY2stPnNjaGVk
dWxlTWFpblRocmVhZE5vdGlmaWNhdGlvbihNZWRpYVBsYXllclByaXZhdGVBVkZvdW5kYXRpb246
Ok5vdGlmaWNhdGlvbjo6UGxheWVyVGltZUNoYW5nZWQsIHRpbWUpOwotfQotCi0tICh2b2lkKXNl
ZWtDb21wbGV0ZWQ6KEJPT0wpZmluaXNoZWQKLXsKLSAgICBpZiAoIW1fY2FsbGJhY2spCi0gICAg
ICAgIHJldHVybjsKLSAgICAKLSAgICBtX2NhbGxiYWNrLT5zY2hlZHVsZU1haW5UaHJlYWROb3Rp
ZmljYXRpb24oTWVkaWFQbGF5ZXJQcml2YXRlQVZGb3VuZGF0aW9uOjpOb3RpZmljYXRpb246OlNl
ZWtDb21wbGV0ZWQsIHN0YXRpY19jYXN0PGJvb2w+KGZpbmlzaGVkKSk7Ci19Ci0KLS0gKHZvaWQp
ZGlkRW5kOihOU05vdGlmaWNhdGlvbiAqKXVudXNlZE5vdGlmaWNhdGlvbgotewotICAgIFVOVVNF
RF9QQVJBTSh1bnVzZWROb3RpZmljYXRpb24pOwotICAgIGlmICghbV9jYWxsYmFjaykKLSAgICAg
ICAgcmV0dXJuOwotICAgIG1fY2FsbGJhY2stPnNjaGVkdWxlTWFpblRocmVhZE5vdGlmaWNhdGlv
bihNZWRpYVBsYXllclByaXZhdGVBVkZvdW5kYXRpb246Ok5vdGlmaWNhdGlvbjo6SXRlbURpZFBs
YXlUb0VuZFRpbWUpOwotfQotCi0tICh2b2lkKW9ic2VydmVWYWx1ZUZvcktleVBhdGg6a2V5UGF0
aCBvZk9iamVjdDooaWQpb2JqZWN0IGNoYW5nZTooTlNEaWN0aW9uYXJ5ICopY2hhbmdlIGNvbnRl
eHQ6KE1lZGlhUGxheWVyQVZGb3VuZGF0aW9uT2JzZXJ2YXRpb25Db250ZXh0KWNvbnRleHQKLXsK
LSAgICBVTlVTRURfUEFSQU0oY2hhbmdlKTsKLQotICAgIExPRyhNZWRpYSwgIldlYkNvcmVBVkZN
b3ZpZU9ic2VydmVyOm9ic2VydmVWYWx1ZUZvcktleVBhdGgoJXApIC0ga2V5UGF0aCA9ICVzIiwg
c2VsZiwgW2tleVBhdGggVVRGOFN0cmluZ10pOwotCi0gICAgaWYgKCFtX2NhbGxiYWNrKQotICAg
ICAgICByZXR1cm47Ci0KLSAgICBpZiAoY29udGV4dCA9PSBNZWRpYVBsYXllckFWRm91bmRhdGlv
bk9ic2VydmF0aW9uQ29udGV4dFBsYXllckl0ZW0pIHsKLSAgICAgICAgLy8gQSB2YWx1ZSBjaGFu
Z2VkIGZvciBhbiBBVlBsYXllckl0ZW0KLSAgICAgICAgaWYgKFtrZXlQYXRoIGlzRXF1YWxUb1N0
cmluZzpAInN0YXR1cyJdKQotICAgICAgICAgICAgbV9jYWxsYmFjay0+c2NoZWR1bGVNYWluVGhy
ZWFkTm90aWZpY2F0aW9uKE1lZGlhUGxheWVyUHJpdmF0ZUFWRm91bmRhdGlvbjo6Tm90aWZpY2F0
aW9uOjpJdGVtU3RhdHVzQ2hhbmdlZCk7Ci0gICAgICAgIGVsc2UgaWYgKFtrZXlQYXRoIGlzRXF1
YWxUb1N0cmluZzpAInBsYXliYWNrTGlrZWx5VG9LZWVwVXAiXSkKLSAgICAgICAgICAgIG1fY2Fs
bGJhY2stPnNjaGVkdWxlTWFpblRocmVhZE5vdGlmaWNhdGlvbihNZWRpYVBsYXllclByaXZhdGVB
VkZvdW5kYXRpb246Ok5vdGlmaWNhdGlvbjo6SXRlbUlzUGxheWJhY2tMaWtlbHlUb0tlZXBVcENo
YW5nZWQpOwotICAgICAgICBlbHNlIGlmIChba2V5UGF0aCBpc0VxdWFsVG9TdHJpbmc6QCJwbGF5
YmFja0J1ZmZlckVtcHR5Il0pCi0gICAgICAgICAgICBtX2NhbGxiYWNrLT5zY2hlZHVsZU1haW5U
aHJlYWROb3RpZmljYXRpb24oTWVkaWFQbGF5ZXJQcml2YXRlQVZGb3VuZGF0aW9uOjpOb3RpZmlj
YXRpb246Okl0ZW1Jc1BsYXliYWNrQnVmZmVyRW1wdHlDaGFuZ2VkKTsKLSAgICAgICAgZWxzZSBp
ZiAoW2tleVBhdGggaXNFcXVhbFRvU3RyaW5nOkAicGxheWJhY2tCdWZmZXJGdWxsIl0pCi0gICAg
ICAgICAgICBtX2NhbGxiYWNrLT5zY2hlZHVsZU1haW5UaHJlYWROb3RpZmljYXRpb24oTWVkaWFQ
bGF5ZXJQcml2YXRlQVZGb3VuZGF0aW9uOjpOb3RpZmljYXRpb246Okl0ZW1Jc1BsYXliYWNrQnVm
ZmVyRnVsbENoYW5nZWQpOwotICAgICAgICBlbHNlIGlmIChba2V5UGF0aCBpc0VxdWFsVG9TdHJp
bmc6QCJhc3NldCJdKQotICAgICAgICAgICAgbV9jYWxsYmFjay0+c2V0QXNzZXQoW29iamVjdCBh
c3NldF0pOwotICAgICAgICBlbHNlIGlmIChba2V5UGF0aCBpc0VxdWFsVG9TdHJpbmc6QCJsb2Fk
ZWRUaW1lUmFuZ2VzIl0pCi0gICAgICAgICAgICBtX2NhbGxiYWNrLT5zY2hlZHVsZU1haW5UaHJl
YWROb3RpZmljYXRpb24oTWVkaWFQbGF5ZXJQcml2YXRlQVZGb3VuZGF0aW9uOjpOb3RpZmljYXRp
b246Okl0ZW1Mb2FkZWRUaW1lUmFuZ2VzQ2hhbmdlZCk7Ci0gICAgICAgIGVsc2UgaWYgKFtrZXlQ
YXRoIGlzRXF1YWxUb1N0cmluZzpAInNlZWthYmxlVGltZVJhbmdlcyJdKQotICAgICAgICAgICAg
bV9jYWxsYmFjay0+c2NoZWR1bGVNYWluVGhyZWFkTm90aWZpY2F0aW9uKE1lZGlhUGxheWVyUHJp
dmF0ZUFWRm91bmRhdGlvbjo6Tm90aWZpY2F0aW9uOjpJdGVtU2Vla2FibGVUaW1lUmFuZ2VzQ2hh
bmdlZCk7Ci0gICAgICAgIGVsc2UgaWYgKFtrZXlQYXRoIGlzRXF1YWxUb1N0cmluZzpAInRyYWNr
cyJdKQotICAgICAgICAgICAgbV9jYWxsYmFjay0+c2NoZWR1bGVNYWluVGhyZWFkTm90aWZpY2F0
aW9uKE1lZGlhUGxheWVyUHJpdmF0ZUFWRm91bmRhdGlvbjo6Tm90aWZpY2F0aW9uOjpJdGVtVHJh
Y2tzQ2hhbmdlZCk7Ci0gICAgICAgIGVsc2UgaWYgKFtrZXlQYXRoIGlzRXF1YWxUb1N0cmluZzpA
InByZXNlbnRhdGlvblNpemUiXSkKLSAgICAgICAgICAgIG1fY2FsbGJhY2stPnNjaGVkdWxlTWFp
blRocmVhZE5vdGlmaWNhdGlvbihNZWRpYVBsYXllclByaXZhdGVBVkZvdW5kYXRpb246Ok5vdGlm
aWNhdGlvbjo6SXRlbVByZXNlbnRhdGlvblNpemVDaGFuZ2VkKTsKLSAgICAgICAgZWxzZSBpZiAo
W2tleVBhdGggaXNFcXVhbFRvU3RyaW5nOkAiZHVyYXRpb24iXSkKLSAgICAgICAgICAgIG1fY2Fs
bGJhY2stPnNjaGVkdWxlTWFpblRocmVhZE5vdGlmaWNhdGlvbihNZWRpYVBsYXllclByaXZhdGVB
VkZvdW5kYXRpb246Ok5vdGlmaWNhdGlvbjo6RHVyYXRpb25DaGFuZ2VkKTsKLQotICAgICAgICBy
ZXR1cm47Ci0gICAgfQotCi0gICAgaWYgKGNvbnRleHQgPT0gTWVkaWFQbGF5ZXJBVkZvdW5kYXRp
b25PYnNlcnZhdGlvbkNvbnRleHRQbGF5ZXIpIHsKLSAgICAgICAgLy8gQSB2YWx1ZSBjaGFuZ2Vk
IGZvciBhbiBBVlBsYXllci4KLSAgICAgICAgaWYgKFtrZXlQYXRoIGlzRXF1YWxUb1N0cmluZzpA
InJhdGUiXSkKLSAgICAgICAgICAgIG1fY2FsbGJhY2stPnNjaGVkdWxlTWFpblRocmVhZE5vdGlm
aWNhdGlvbihNZWRpYVBsYXllclByaXZhdGVBVkZvdW5kYXRpb246Ok5vdGlmaWNhdGlvbjo6UGxh
eWVyUmF0ZUNoYW5nZWQpOwotICAgIH0KLX0KLQotQGVuZAotCi0jZW5kaWYKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2F2Zm91bmRhdGlvbi9jZi9NZWRpYVBsYXllclBy
aXZhdGVBVkZvdW5kYXRpb25DRi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvYXZmb3VuZGF0aW9uL2NmL01lZGlhUGxheWVyUHJpdmF0ZUFWRm91bmRh
dGlvbkNGLmNwcAkocmV2aXNpb24gOTMyMTUpCShmcm9tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2F2Zm91bmRhdGlvbi9NZWRpYVBsYXllclByaXZhdGVBVkZvdW5kYXRpb25DRi5j
cHA6OTMyMTUpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9hdmZvdW5kYXRp
b24vY2YvTWVkaWFQbGF5ZXJQcml2YXRlQVZGb3VuZGF0aW9uQ0YuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0wLDAgKzEsMTI4MiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMSBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAq
IGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVY
RU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKworI2lm
IFBMQVRGT1JNKFdJTikmJiBFTkFCTEUoVklERU8pIAorCisjaWYgVVNFKEFWRk9VTkRBVElPTikK
KworI2luY2x1ZGUgIk1lZGlhUGxheWVyUHJpdmF0ZUFWRm91bmRhdGlvbkNGLmgiCisKKyNpbmNs
dWRlICJBcHBsaWNhdGlvbkNhY2hlUmVzb3VyY2UuaCIKKyNpbmNsdWRlICJGbG9hdENvbnZlcnNp
b24uaCIKKyNpbmNsdWRlICJGcmFtZVZpZXcuaCIKKyNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQu
aCIKKyNpbmNsdWRlICJLVVJMLmgiCisjaW5jbHVkZSAiTG9nZ2luZy5oIgorI2luY2x1ZGUgIlBs
YXRmb3JtQ0FMYXllci5oIgorI2luY2x1ZGUgIlNvZnRMaW5raW5nLmgiCisjaW5jbHVkZSAiVGlt
ZVJhbmdlcy5oIgorCisjaW5jbHVkZSA8QVZGb3VuZGF0aW9uQ0YvQVZDRlBsYXllckxheWVyLmg+
CisjaW5jbHVkZSA8QVZGb3VuZGF0aW9uQ0YvQVZGb3VuZGF0aW9uQ0YuaD4KKyNpbmNsdWRlIDxD
b3JlTWVkaWEvQ29yZU1lZGlhLmg+CisKKyNpbmNsdWRlIDxkZWxheWltcC5oPgorI2luY2x1ZGUg
PGRpc3BhdGNoL2Rpc3BhdGNoLmg+CisjaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KKyNpbmNsdWRl
IDx3dGYvVGhyZWFkaW5nLmg+CisjaW5jbHVkZSA8d3RmL1VudXNlZFBhcmFtLmg+CisKKyNpZmRl
ZiBERUJVR19BTEwKKy8vIEZJWE1FOiBBVkZvdW5kYXRpb25DRiBkb2Vzbid0IGN1cnJlbnRseSBk
ZWxpdmVyIGEgZGVidWcgdmVyc2lvbi4KKyNwcmFnbWEgY29tbWVudChsaWIsICJBVkZvdW5kYXRp
b25DRi5saWIiKQorI3ByYWdtYSBjb21tZW50KGxpYiwgIkNvcmVNZWRpYV9kZWJ1Zy5saWIiKQor
I3ByYWdtYSBjb21tZW50KGxpYiwgImxpYmRpc3BhdGNoX2RlYnVnLmxpYiIpCisKKy8vIFVzZSB0
aGUgc29mdCBsaW5rIG1hY3JvcyBzbyB3ZSBjYW4gZWFzaWx5IHRlc3QgZm9yIHRoZSBleGlzdGVu
Y2Ugb2YgdGhlIGRsbHMuCisvLyBGSVhNRTogQVZGb3VuZGF0aW9uQ0YgZG9lc24ndCBjdXJyZW50
bHkgZGVsaXZlciBhIGRlYnVnIHZlcnNpb24uCitTT0ZUX0xJTktfTElCUkFSWShBVkZvdW5kYXRp
b25DRikKK1NPRlRfTElOS19ERUJVR19MSUJSQVJZKENvcmVNZWRpYSkKK1NPRlRfTElOS19ERUJV
R19MSUJSQVJZKGxpYmRpc3BhdGNoKQorI2Vsc2UKKyNwcmFnbWEgY29tbWVudChsaWIsICJBVkZv
dW5kYXRpb25DRi5saWIiKQorI3ByYWdtYSBjb21tZW50KGxpYiwgIkNvcmVNZWRpYS5saWIiKQor
I3ByYWdtYSBjb21tZW50KGxpYiwgImxpYmRpc3BhdGNoLmxpYiIpCisKKy8vIFVzZSB0aGUgc29m
dCBsaW5rIG1hY3JvcyBzbyB3ZSBjYW4gZWFzaWx5IHRlc3QgZm9yIHRoZSBleGlzdGVuY2Ugb2Yg
dGhlIGRsbHMuCitTT0ZUX0xJTktfTElCUkFSWShBVkZvdW5kYXRpb25DRikKK1NPRlRfTElOS19M
SUJSQVJZKENvcmVNZWRpYSkKK1NPRlRfTElOS19MSUJSQVJZKGxpYmRpc3BhdGNoKQorI2VuZGlm
IC8vIERFQlVHX0FMTAorCit1c2luZyBuYW1lc3BhY2Ugc3RkOworCituYW1lc3BhY2UgV2ViQ29y
ZSB7CisKK2NsYXNzIExheWVyQ2xpZW50OworCitjbGFzcyBBVkZXcmFwcGVyIHsKK3B1YmxpYzoK
KyAgICBBVkZXcmFwcGVyKE1lZGlhUGxheWVyUHJpdmF0ZUFWRm91bmRhdGlvbkNGKik7CisgICAg
fkFWRldyYXBwZXIoKTsKKworICAgIHZvaWQgc2NoZWR1bGVEaXNjb25uZWN0QW5kRGVsZXRlKCk7
CisKKyAgICB2b2lkIGNyZWF0ZUFWQ0ZWaWRlb0xheWVyKCk7CisgICAgdm9pZCBkZXN0cm95Vmlk
ZW9MYXllcigpOworICAgIFBsYXRmb3JtTGF5ZXIqIHBsYXRmb3JtTGF5ZXIoKTsKKworICAgIENB
Q0ZMYXllclJlZiBjYVZpZGVvTGF5ZXIoKSB7IHJldHVybiBtX2NhVmlkZW9MYXllci5nZXQoKTsg
fQorICAgIFBsYXRmb3JtTGF5ZXIqIHZpZGVvTGF5ZXJXcmFwcGVyKCkgeyByZXR1cm4gbV92aWRl
b0xheWVyV3JhcHBlciA/IG1fdmlkZW9MYXllcldyYXBwZXItPnBsYXRmb3JtTGF5ZXIoKSA6IDA7
IH07CisgICAgdm9pZCBzZXRWaWRlb0xheWVyTmVlZHNDb21taXQoKTsKKyAgICB2b2lkIHNldFZp
ZGVvTGF5ZXJIaWRkZW4oYm9vbCk7CisKKyAgICB2b2lkIGNyZWF0ZUltYWdlR2VuZXJhdG9yKCk7
CisgICAgdm9pZCBkZXN0cm95SW1hZ2VHZW5lcmF0b3IoKTsKKyAgICBSZXRhaW5QdHI8Q0dJbWFn
ZVJlZj4gY3JlYXRlSW1hZ2VGb3JUaW1lSW5SZWN0KGZsb2F0LCBjb25zdCBJbnRSZWN0Jik7CisK
KyAgICB2b2lkIGNyZWF0ZUFzc2V0Rm9yVVJMKGNvbnN0IFN0cmluZyYgdXJsKTsKKyAgICB2b2lk
IHNldEFzc2V0KEFWQ0ZVUkxBc3NldFJlZik7CisgICAgCisgICAgdm9pZCBjcmVhdGVQbGF5ZXIo
KTsKKyAgICB2b2lkIGNyZWF0ZVBsYXllckl0ZW0oKTsKKyAgICAKKyAgICB2b2lkIGNoZWNrUGxh
eWFiaWxpdHkoKTsKKyAgICB2b2lkIGJlZ2luTG9hZGluZ01ldGFkYXRhKCk7CisgICAgCisgICAg
dm9pZCBzZWVrVG9UaW1lKGZsb2F0KTsKKworICAgIHN0YXRpYyB2b2lkIGxvYWRNZXRhZGF0YUNv
bXBsZXRpb25DYWxsYmFjayhBVkNGQXNzZXRSZWYsIHZvaWQqKTsKKyAgICBzdGF0aWMgdm9pZCBs
b2FkUGxheWFibGVDb21wbGV0aW9uQ2FsbGJhY2soQVZDRkFzc2V0UmVmLCB2b2lkKik7CisgICAg
c3RhdGljIHZvaWQgcGVyaW9kaWNUaW1lT2JzZXJ2ZXJDYWxsYmFjayhBVkNGUGxheWVyUmVmLCBD
TVRpbWUsIHZvaWQqKTsKKyAgICBzdGF0aWMgdm9pZCBzZWVrQ29tcGxldGVkQ2FsbGJhY2soQVZD
RlBsYXllckl0ZW1SZWYsIEJvb2xlYW4sIHZvaWQqKTsKKyAgICBzdGF0aWMgdm9pZCBub3RpZmlj
YXRpb25DYWxsYmFjayhDRk5vdGlmaWNhdGlvbkNlbnRlclJlZiwgdm9pZCosIENGU3RyaW5nUmVm
LCBjb25zdCB2b2lkKiwgQ0ZEaWN0aW9uYXJ5UmVmKTsKKworICAgIGlubGluZSBBVkNGUGxheWVy
TGF5ZXJSZWYgdmlkZW9MYXllcigpIGNvbnN0IHsgcmV0dXJuIChBVkNGUGxheWVyTGF5ZXJSZWYp
bV9hdkNGVmlkZW9MYXllci5nZXQoKTsgfQorICAgIGlubGluZSBBVkNGUGxheWVyUmVmIGF2UGxh
eWVyKCkgY29uc3QgeyByZXR1cm4gKEFWQ0ZQbGF5ZXJSZWYpbV9hdlBsYXllci5nZXQoKTsgfQor
ICAgIGlubGluZSBBVkNGVVJMQXNzZXRSZWYgYXZBc3NldCgpIGNvbnN0IHsgcmV0dXJuIChBVkNG
VVJMQXNzZXRSZWYpbV9hdkFzc2V0LmdldCgpOyB9CisgICAgaW5saW5lIEFWQ0ZQbGF5ZXJJdGVt
UmVmIGF2UGxheWVySXRlbSgpIGNvbnN0IHsgcmV0dXJuIChBVkNGUGxheWVySXRlbVJlZiltX2F2
UGxheWVySXRlbS5nZXQoKTsgfQorICAgIGlubGluZSBBVkNGUGxheWVyT2JzZXJ2ZXJSZWYgdGlt
ZU9ic2VydmVyKCkgY29uc3QgeyByZXR1cm4gKEFWQ0ZQbGF5ZXJPYnNlcnZlclJlZiltX3RpbWVP
YnNlcnZlci5nZXQoKTsgfQorICAgIGlubGluZSBBVkNGQXNzZXRJbWFnZUdlbmVyYXRvclJlZiBp
bWFnZUdlbmVyYXRvcigpIGNvbnN0IHsgcmV0dXJuIG1faW1hZ2VHZW5lcmF0b3IuZ2V0KCk7IH0K
KyAgICBpbmxpbmUgZGlzcGF0Y2hfcXVldWVfdCBkaXNwYXRjaFF1ZXVlKCkgY29uc3QgeyByZXR1
cm4gbV9ub3RpZmljYXRpb25RdWV1ZTsgfQorCitwcml2YXRlOgorICAgIGlubGluZSB2b2lkKiBj
YWxsYmFja0NvbnRleHQoKSBjb25zdCB7IHJldHVybiByZWludGVycHJldF9jYXN0PHZvaWQqPiht
X29iamVjdElEKTsgfQorCisgICAgc3RhdGljIE11dGV4JiBtYXBMb2NrKCk7CisgICAgc3RhdGlj
IEhhc2hNYXA8dWludHB0cl90LCBBVkZXcmFwcGVyKj4mIG1hcCgpOworICAgIHN0YXRpYyBBVkZX
cmFwcGVyKiBhdmZXcmFwcGVyRm9yQ2FsbGJhY2tDb250ZXh0KHZvaWQqKTsKKyAgICB2b2lkIGFk
ZFRvTWFwKCk7CisgICAgdm9pZCByZW1vdmVGcm9tTWFwKCkgY29uc3Q7CisKKyAgICBzdGF0aWMg
dm9pZCBkaXNjb25uZWN0QW5kRGVsZXRlQVZGV3JhcHBlcih2b2lkKik7CisKKyAgICBzdGF0aWMg
dWludHB0cl90IHNfbmV4dEFWRldyYXBwZXJPYmplY3RJRDsKKyAgICB1aW50cHRyX3QgbV9vYmpl
Y3RJRDsKKworICAgIE1lZGlhUGxheWVyUHJpdmF0ZUFWRm91bmRhdGlvbkNGKiBtX293bmVyOwor
CisgICAgUmV0YWluUHRyPEFWQ0ZQbGF5ZXJSZWY+IG1fYXZQbGF5ZXI7CisgICAgUmV0YWluUHRy
PEFWQ0ZVUkxBc3NldFJlZj4gbV9hdkFzc2V0OworICAgIFJldGFpblB0cjxBVkNGUGxheWVySXRl
bVJlZj4gbV9hdlBsYXllckl0ZW07CisgICAgUmV0YWluUHRyPEFWQ0ZQbGF5ZXJMYXllclJlZj4g
bV9hdkNGVmlkZW9MYXllcjsKKyAgICBSZXRhaW5QdHI8QVZDRlBsYXllck9ic2VydmVyUmVmPiBt
X3RpbWVPYnNlcnZlcjsKKyAgICBSZXRhaW5QdHI8QVZDRkFzc2V0SW1hZ2VHZW5lcmF0b3JSZWY+
IG1faW1hZ2VHZW5lcmF0b3I7CisgICAgZGlzcGF0Y2hfcXVldWVfdCBtX25vdGlmaWNhdGlvblF1
ZXVlOworCisgICAgbXV0YWJsZSBSZXRhaW5QdHI8Q0FDRkxheWVyUmVmPiBtX2NhVmlkZW9MYXll
cjsKKyAgICBSZWZQdHI8UGxhdGZvcm1DQUxheWVyPiBtX3ZpZGVvTGF5ZXJXcmFwcGVyOworCisg
ICAgT3duUHRyPExheWVyQ2xpZW50PiBtX2xheWVyQ2xpZW50OworfTsKKwordWludHB0cl90IEFW
RldyYXBwZXI6OnNfbmV4dEFWRldyYXBwZXJPYmplY3RJRDsKKworY2xhc3MgTGF5ZXJDbGllbnQg
OiBwdWJsaWMgUGxhdGZvcm1DQUxheWVyQ2xpZW50IHsKK3B1YmxpYzoKKyAgICBMYXllckNsaWVu
dChBVkZXcmFwcGVyKiBwYXJlbnQpIDogbV9wYXJlbnQocGFyZW50KSB7IH0KKyAgICB2aXJ0dWFs
IH5MYXllckNsaWVudCgpIHsgbV9wYXJlbnQgPSAwOyB9CisKK3ByaXZhdGU6CisgICAgdmlydHVh
bCB2b2lkIHBsYXRmb3JtQ0FMYXllckxheW91dFN1YmxheWVyc09mTGF5ZXIoUGxhdGZvcm1DQUxh
eWVyKik7CisgICAgdmlydHVhbCBib29sIHBsYXRmb3JtQ0FMYXllclJlc3BvbmRzVG9MYXlvdXRD
aGFuZ2VzKCkgY29uc3QgeyByZXR1cm4gdHJ1ZTsgfQorCisgICAgdmlydHVhbCB2b2lkIHBsYXRm
b3JtQ0FMYXllckFuaW1hdGlvblN0YXJ0ZWQoQ0ZUaW1lSW50ZXJ2YWwgYmVnaW5UaW1lKSB7IH0K
KyAgICB2aXJ0dWFsIEdyYXBoaWNzTGF5ZXI6OkNvbXBvc2l0aW5nQ29vcmRpbmF0ZXNPcmllbnRh
dGlvbiBwbGF0Zm9ybUNBTGF5ZXJDb250ZW50c09yaWVudGF0aW9uKCkgY29uc3QgeyByZXR1cm4g
R3JhcGhpY3NMYXllcjo6Q29tcG9zaXRpbmdDb29yZGluYXRlc0JvdHRvbVVwOyB9CisgICAgdmly
dHVhbCB2b2lkIHBsYXRmb3JtQ0FMYXllclBhaW50Q29udGVudHMoR3JhcGhpY3NDb250ZXh0Jiwg
Y29uc3QgSW50UmVjdCYgaW5DbGlwKSB7IH0KKyAgICB2aXJ0dWFsIGJvb2wgcGxhdGZvcm1DQUxh
eWVyU2hvd0RlYnVnQm9yZGVycygpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CisgICAgdmlydHVh
bCBib29sIHBsYXRmb3JtQ0FMYXllclNob3dSZXBhaW50Q291bnRlcigpIGNvbnN0IHsgcmV0dXJu
IGZhbHNlOyB9CisgICAgdmlydHVhbCBpbnQgcGxhdGZvcm1DQUxheWVySW5jcmVtZW50UmVwYWlu
dENvdW50KCkgeyByZXR1cm4gMDsgfQorCisgICAgdmlydHVhbCBib29sIHBsYXRmb3JtQ0FMYXll
ckNvbnRlbnRzT3BhcXVlKCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KKyAgICB2aXJ0dWFsIGJv
b2wgcGxhdGZvcm1DQUxheWVyRHJhd3NDb250ZW50KCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0K
KyAgICB2aXJ0dWFsIHZvaWQgcGxhdGZvcm1DQUxheWVyTGF5ZXJEaWREaXNwbGF5KFBsYXRmb3Jt
TGF5ZXIqKSB7IH0KKworICAgIEFWRldyYXBwZXIqIG1fcGFyZW50OworfTsKKworI2lmICFMT0df
RElTQUJMRUQKK3N0YXRpYyBjb25zdCBjaGFyKiBib29sU3RyaW5nKGJvb2wgdmFsKQoreworICAg
IHJldHVybiB2YWwgPyAidHJ1ZSIgOiAiZmFsc2UiOworfQorI2VuZGlmCisKK3N0YXRpYyBDRkFy
cmF5UmVmIGNyZWF0ZU1ldGFkYXRhS2V5TmFtZXMoKQoreworICAgIHN0YXRpYyBjb25zdCBDRlN0
cmluZ1JlZiBrZXlOYW1lc1tdID0geworICAgICAgICBBVkNGQXNzZXRQcm9wZXJ0eUR1cmF0aW9u
LAorICAgICAgICBBVkNGQXNzZXRQcm9wZXJ0eU5hdHVyYWxTaXplLAorICAgICAgICBBVkNGQXNz
ZXRQcm9wZXJ0eVByZWZlcnJlZFRyYW5zZm9ybSwKKyAgICAgICAgQVZDRkFzc2V0UHJvcGVydHlQ
cmVmZXJyZWRSYXRlLAorICAgICAgICBBVkNGQXNzZXRQcm9wZXJ0eVBsYXlhYmxlLAorICAgICAg
ICBBVkNGQXNzZXRQcm9wZXJ0eVRyYWNrcyAKKyAgICB9OworICAgIAorICAgIHJldHVybiBDRkFy
cmF5Q3JlYXRlKDAsIChjb25zdCB2b2lkKiopa2V5TmFtZXMsIHNpemVvZihrZXlOYW1lcykgLyBz
aXplb2Yoa2V5TmFtZXNbMF0pLCAma0NGVHlwZUFycmF5Q2FsbEJhY2tzKTsKK30KKworc3RhdGlj
IENGQXJyYXlSZWYgbWV0YWRhdGFLZXlOYW1lcygpCit7CisgICAgc3RhdGljIENGQXJyYXlSZWYg
a2V5cyA9IGNyZWF0ZU1ldGFkYXRhS2V5TmFtZXMoKTsKKyAgICByZXR1cm4ga2V5czsKK30KKwor
Ly8gRklYTUU6IEl0IHdvdWxkIGJlIGJldHRlciBpZiBBVkNGVGltZWRNZXRhZGF0YUdyb3VwLmgg
ZXhwb3J0ZWQgdGhpcyBrZXkuCitzdGF0aWMgQ0ZTdHJpbmdSZWYgQ01UaW1lUmFuZ2VTdGFydEtl
eSgpCit7CisgICAgREVGSU5FX1NUQVRJQ19MT0NBTChDRlN0cmluZ1JlZiwga2V5LCAoQ0ZTVFIo
InN0YXJ0IikpKTsKKyAgICByZXR1cm4ga2V5OworfQorCisvLyBGSVhNRTogSXQgd291bGQgYmUg
YmV0dGVyIGlmIEFWQ0ZUaW1lZE1ldGFkYXRhR3JvdXAuaCBleHBvcnRlZCB0aGlzIGtleS4KK3N0
YXRpYyBDRlN0cmluZ1JlZiBDTVRpbWVSYW5nZUR1cmF0aW9uS2V5KCkKK3sKKyAgICBERUZJTkVf
U1RBVElDX0xPQ0FMKENGU3RyaW5nUmVmLCBrZXksIChDRlNUUigiZHVyYXRpb24iKSkpOworICAg
IHJldHVybiBrZXk7Cit9CisKKy8vIEZJWE1FOiBJdCB3b3VsZCBiZSBiZXR0ZXIgaWYgQVZDRiBl
eHBvcnRlZCB0aGlzIG5vdGlmaWNhdGlvbiBuYW1lLgorc3RhdGljIENGU3RyaW5nUmVmIENBQ0ZD
b250ZXh0TmVlZHNGbHVzaE5vdGlmaWNhdGlvbigpCit7CisgICAgREVGSU5FX1NUQVRJQ19MT0NB
TChDRlN0cmluZ1JlZiwgbmFtZSwgKENGU1RSKCJrQ0FDRkNvbnRleHROZWVkc0ZsdXNoTm90aWZp
Y2F0aW9uIikpKTsKKyAgICByZXR1cm4gbmFtZTsKK30KKworLy8gRGVmaW5lIEFWQ0Ygb2JqZWN0
IGFjY2Vzc29ycyBhcyBpbmxpbmUgZnVuY3Rpb25zIGhlcmUgaW5zdGVhZCBvZiBpbiBNZWRpYVBs
YXllclByaXZhdGVBVkZvdW5kYXRpb25DRiBzbyB3ZSBkb24ndCBoYXZlCisvLyB0byBpbmNsdWRl
IHRoZSBBVkNGIGhlYWRlcnMgaW4gTWVkaWFQbGF5ZXJQcml2YXRlQVZGb3VuZGF0aW9uQ0YuaAor
aW5saW5lIEFWQ0ZQbGF5ZXJMYXllclJlZiB2aWRlb0xheWVyKEFWRldyYXBwZXIqIHdyYXBwZXIp
Cit7IAorICAgIHJldHVybiB3cmFwcGVyID8gd3JhcHBlci0+dmlkZW9MYXllcigpIDogMDsgCit9
CisKK2lubGluZSBBVkNGUGxheWVyUmVmIGF2UGxheWVyKEFWRldyYXBwZXIqIHdyYXBwZXIpCit7
IAorICAgIHJldHVybiB3cmFwcGVyID8gd3JhcHBlci0+YXZQbGF5ZXIoKSA6IDA7IAorfQorCitp
bmxpbmUgQVZDRlVSTEFzc2V0UmVmIGF2QXNzZXQoQVZGV3JhcHBlciogd3JhcHBlcikKK3sgCisg
ICAgcmV0dXJuIHdyYXBwZXIgPyB3cmFwcGVyLT5hdkFzc2V0KCkgOiAwOyAKK30KKworaW5saW5l
IEFWQ0ZQbGF5ZXJJdGVtUmVmIGF2UGxheWVySXRlbShBVkZXcmFwcGVyKiB3cmFwcGVyKQoreyAK
KyAgICByZXR1cm4gd3JhcHBlciA/IHdyYXBwZXItPmF2UGxheWVySXRlbSgpIDogMDsgCit9CisK
K2lubGluZSBBVkNGQXNzZXRJbWFnZUdlbmVyYXRvclJlZiBpbWFnZUdlbmVyYXRvcihBVkZXcmFw
cGVyKiB3cmFwcGVyKQoreyAKKyAgICByZXR1cm4gd3JhcHBlciA/IHdyYXBwZXItPmltYWdlR2Vu
ZXJhdG9yKCkgOiAwOyAKK30KKworUGFzc093blB0cjxNZWRpYVBsYXllclByaXZhdGVJbnRlcmZh
Y2U+IE1lZGlhUGxheWVyUHJpdmF0ZUFWRm91bmRhdGlvbkNGOjpjcmVhdGUoTWVkaWFQbGF5ZXIq
IHBsYXllcikgCit7IAorICAgIHJldHVybiBhZG9wdFB0cihuZXcgTWVkaWFQbGF5ZXJQcml2YXRl
QVZGb3VuZGF0aW9uQ0YocGxheWVyKSk7Cit9CisKK3ZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlQVZG
b3VuZGF0aW9uQ0Y6OnJlZ2lzdGVyTWVkaWFFbmdpbmUoTWVkaWFFbmdpbmVSZWdpc3RyYXIgcmVn
aXN0cmFyKQoreworICAgIGlmIChpc0F2YWlsYWJsZSgpKQorICAgICAgICByZWdpc3RyYXIoY3Jl
YXRlLCBnZXRTdXBwb3J0ZWRUeXBlcywgc3VwcG9ydHNUeXBlLCAwLCAwLCAwKTsKK30KKworTWVk
aWFQbGF5ZXJQcml2YXRlQVZGb3VuZGF0aW9uQ0Y6Ok1lZGlhUGxheWVyUHJpdmF0ZUFWRm91bmRh
dGlvbkNGKE1lZGlhUGxheWVyKiBwbGF5ZXIpCisgICAgOiBNZWRpYVBsYXllclByaXZhdGVBVkZv
dW5kYXRpb24ocGxheWVyKQorICAgICwgbV9hdmZXcmFwcGVyKDApCisgICAgLCBtX3ZpZGVvRnJh
bWVIYXNEcmF3bihmYWxzZSkKK3sKKyAgICBMT0coTWVkaWEsICJNZWRpYVBsYXllclByaXZhdGVB
VkZvdW5kYXRpb25DRjo6TWVkaWFQbGF5ZXJQcml2YXRlQVZGb3VuZGF0aW9uQ0YoJXApIiwgdGhp
cyk7Cit9CisKK01lZGlhUGxheWVyUHJpdmF0ZUFWRm91bmRhdGlvbkNGOjp+TWVkaWFQbGF5ZXJQ
cml2YXRlQVZGb3VuZGF0aW9uQ0YoKQoreworICAgIExPRyhNZWRpYSwgIk1lZGlhUGxheWVyUHJp
dmF0ZUFWRm91bmRhdGlvbkNGOjp+TWVkaWFQbGF5ZXJQcml2YXRlQVZGb3VuZGF0aW9uQ0YoJXAp
IiwgdGhpcyk7CisgICAgY2FuY2VsTG9hZCgpOworfQorCit2b2lkIE1lZGlhUGxheWVyUHJpdmF0
ZUFWRm91bmRhdGlvbkNGOjpjYW5jZWxMb2FkKCkKK3sKKyAgICBMT0coTWVkaWEsICJNZWRpYVBs
YXllclByaXZhdGVBVkZvdW5kYXRpb25DRjo6Y2FuY2VsTG9hZCglcCkiLCB0aGlzKTsKKworICAg
IC8vIERvIG5vdGhpbmcgd2hlbiBvdXIgY2FuY2VsbGF0aW9uIG9mIHBlbmRpbmcgbG9hZGluZyBj
YWxscyBpdHMgY29tcGxldGlvbiBoYW5kbGVyCisgICAgc2V0RGVsYXlDYWxsYmFja3ModHJ1ZSk7
CisgICAgc2V0SWdub3JlTG9hZFN0YXRlQ2hhbmdlcyh0cnVlKTsKKworICAgIHRlYXJEb3duVmlk
ZW9SZW5kZXJpbmcoKTsKKworICAgIGlmIChtX2F2ZldyYXBwZXIpIHsKKyAgICAgICAgLy8gVGhl
IEFWQ0Ygb2JqZWN0cyBoYXZlIHRvIGJlIGRlc3Ryb3llZCBvbiB0aGUgc2FtZSBkaXNwYXRjaCBx
dWV1ZSB1c2VkIGZvciBub3RpZmljYXRpb25zLCBzbyBzY2hlZHVsZSBhIGNhbGwgdG8gCisgICAg
ICAgIC8vIGRpc2Nvbm5lY3RBbmREZWxldGVBVkZXcmFwcGVyIG9uIHRoYXQgcXVldWUuIAorICAg
ICAgICBtX2F2ZldyYXBwZXItPnNjaGVkdWxlRGlzY29ubmVjdEFuZERlbGV0ZSgpOworICAgICAg
ICBtX2F2ZldyYXBwZXIgPSAwOworICAgIH0KKworICAgIHNldElnbm9yZUxvYWRTdGF0ZUNoYW5n
ZXMoZmFsc2UpOworICAgIHNldERlbGF5Q2FsbGJhY2tzKGZhbHNlKTsKK30KKworYm9vbCBNZWRp
YVBsYXllclByaXZhdGVBVkZvdW5kYXRpb25DRjo6aGFzTGF5ZXJSZW5kZXJlcigpIGNvbnN0Cit7
CisgICAgcmV0dXJuIHZpZGVvTGF5ZXIobV9hdmZXcmFwcGVyKTsKK30KKworYm9vbCBNZWRpYVBs
YXllclByaXZhdGVBVkZvdW5kYXRpb25DRjo6aGFzQ29udGV4dFJlbmRlcmVyKCkgY29uc3QKK3sK
KyAgICByZXR1cm4gaW1hZ2VHZW5lcmF0b3IobV9hdmZXcmFwcGVyKTsKK30KKwordm9pZCBNZWRp
YVBsYXllclByaXZhdGVBVkZvdW5kYXRpb25DRjo6Y3JlYXRlQ29udGV4dFZpZGVvUmVuZGVyZXIo
KQoreworICAgIExPRyhNZWRpYSwgIk1lZGlhUGxheWVyUHJpdmF0ZUFWRm91bmRhdGlvbkNGOjpj
cmVhdGVDb250ZXh0VmlkZW9SZW5kZXJlciglcCkiLCB0aGlzKTsKKworICAgIGlmIChpbWFnZUdl
bmVyYXRvcihtX2F2ZldyYXBwZXIpKQorICAgICAgICByZXR1cm47CisKKyAgICBpZiAobV9hdmZX
cmFwcGVyKQorICAgICAgICBtX2F2ZldyYXBwZXItPmNyZWF0ZUltYWdlR2VuZXJhdG9yKCk7Cit9
CisKK3ZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlQVZGb3VuZGF0aW9uQ0Y6OmRlc3Ryb3lDb250ZXh0
VmlkZW9SZW5kZXJlcigpCit7CisgICAgaWYgKG1fYXZmV3JhcHBlcikKKyAgICAgICAgbV9hdmZX
cmFwcGVyLT5kZXN0cm95SW1hZ2VHZW5lcmF0b3IoKTsKK30KKwordm9pZCBNZWRpYVBsYXllclBy
aXZhdGVBVkZvdW5kYXRpb25DRjo6Y3JlYXRlVmlkZW9MYXllcigpCit7CisgICAgQVNTRVJUKHN1
cHBvcnRzQWNjZWxlcmF0ZWRSZW5kZXJpbmcoKSk7CisKKyAgICBpZiAobV9hdmZXcmFwcGVyKQor
ICAgICAgICBtX2F2ZldyYXBwZXItPmNyZWF0ZUFWQ0ZWaWRlb0xheWVyKCk7Cit9CisKK3ZvaWQg
TWVkaWFQbGF5ZXJQcml2YXRlQVZGb3VuZGF0aW9uQ0Y6OmRlc3Ryb3lWaWRlb0xheWVyKCkKK3sK
KyAgICBMT0coTWVkaWEsICJNZWRpYVBsYXllclByaXZhdGVBVkZvdW5kYXRpb25DRjo6ZGVzdHJv
eVZpZGVvTGF5ZXIoJXApIC0gZGVzdHJveWluZyAlcCIsIHRoaXMsIHZpZGVvTGF5ZXIobV9hdmZX
cmFwcGVyKSk7CisgICAgaWYgKG1fYXZmV3JhcHBlcikKKyAgICAgICAgbV9hdmZXcmFwcGVyLT5k
ZXN0cm95VmlkZW9MYXllcigpOworfQorCitib29sIE1lZGlhUGxheWVyUHJpdmF0ZUFWRm91bmRh
dGlvbkNGOjpoYXNBdmFpbGFibGVWaWRlb0ZyYW1lKCkgY29uc3QKK3sKKyAgICByZXR1cm4gKG1f
dmlkZW9GcmFtZUhhc0RyYXduIHx8ICh2aWRlb0xheWVyKG1fYXZmV3JhcHBlcikgJiYgQVZDRlBs
YXllckxheWVySXNSZWFkeUZvckRpc3BsYXkodmlkZW9MYXllcihtX2F2ZldyYXBwZXIpKSkpOwor
fQorCit2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZUFWRm91bmRhdGlvbkNGOjpjcmVhdGVBVlBsYXll
cigpCit7CisgICAgQVNTRVJUKG1fYXZmV3JhcHBlcik7CisgICAgCisgICAgc2V0RGVsYXlDYWxs
YmFja3ModHJ1ZSk7CisgICAgbV9hdmZXcmFwcGVyLT5jcmVhdGVQbGF5ZXIoKTsKKyAgICBzZXRE
ZWxheUNhbGxiYWNrcyhmYWxzZSk7Cit9CisKK3ZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlQVZGb3Vu
ZGF0aW9uQ0Y6OmNyZWF0ZUFWUGxheWVySXRlbSgpCit7CisgICAgQVNTRVJUKG1fYXZmV3JhcHBl
cik7CisgICAgCisgICAgc2V0RGVsYXlDYWxsYmFja3ModHJ1ZSk7CisgICAgbV9hdmZXcmFwcGVy
LT5jcmVhdGVQbGF5ZXJJdGVtKCk7CisgICAgc2V0RGVsYXlDYWxsYmFja3MoZmFsc2UpOworfQor
Cit2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZUFWRm91bmRhdGlvbkNGOjpjcmVhdGVBVkFzc2V0Rm9y
VVJMKGNvbnN0IFN0cmluZyYgdXJsKQoreworICAgIEFTU0VSVCghbV9hdmZXcmFwcGVyKTsKKyAg
ICAKKyAgICBzZXREZWxheUNhbGxiYWNrcyh0cnVlKTsKKyAgICBtX2F2ZldyYXBwZXIgPSBuZXcg
QVZGV3JhcHBlcih0aGlzKTsKKyAgICBtX2F2ZldyYXBwZXItPmNyZWF0ZUFzc2V0Rm9yVVJMKHVy
bCk7CisgICAgc2V0RGVsYXlDYWxsYmFja3MoZmFsc2UpOworfQorCit2b2lkIE1lZGlhUGxheWVy
UHJpdmF0ZUFWRm91bmRhdGlvbkNGOjpjaGVja1BsYXlhYmlsaXR5KCkKK3sKKyAgICBBU1NFUlQo
bV9hdmZXcmFwcGVyKTsKKyAgICBtX2F2ZldyYXBwZXItPmNoZWNrUGxheWFiaWxpdHkoKTsKK30K
Kwordm9pZCBNZWRpYVBsYXllclByaXZhdGVBVkZvdW5kYXRpb25DRjo6YmVnaW5Mb2FkaW5nTWV0
YWRhdGEoKQoreworICAgIEFTU0VSVChtX2F2ZldyYXBwZXIpOworICAgIG1fYXZmV3JhcHBlci0+
YmVnaW5Mb2FkaW5nTWV0YWRhdGEoKTsKK30KKworTWVkaWFQbGF5ZXJQcml2YXRlQVZGb3VuZGF0
aW9uOjpJdGVtU3RhdHVzIE1lZGlhUGxheWVyUHJpdmF0ZUFWRm91bmRhdGlvbkNGOjpwbGF5ZXJJ
dGVtU3RhdHVzKCkgY29uc3QKK3sKKyAgICBpZiAoIWF2UGxheWVySXRlbShtX2F2ZldyYXBwZXIp
KQorICAgICAgICByZXR1cm4gTWVkaWFQbGF5ZXJQcml2YXRlQVZGb3VuZGF0aW9uOjpNZWRpYVBs
YXllckFWUGxheWVySXRlbVN0YXR1c0RvZXNOb3RFeGlzdDsKKworICAgIEFWQ0ZQbGF5ZXJJdGVt
U3RhdHVzIHN0YXR1cyA9IEFWQ0ZQbGF5ZXJJdGVtR2V0U3RhdHVzKGF2UGxheWVySXRlbShtX2F2
ZldyYXBwZXIpLCAwKTsKKyAgICBpZiAoc3RhdHVzID09IEFWQ0ZQbGF5ZXJJdGVtU3RhdHVzVW5r
bm93bikKKyAgICAgICAgcmV0dXJuIE1lZGlhUGxheWVyUHJpdmF0ZUFWRm91bmRhdGlvbjo6TWVk
aWFQbGF5ZXJBVlBsYXllckl0ZW1TdGF0dXNVbmtub3duOworICAgIGlmIChzdGF0dXMgPT0gQVZD
RlBsYXllckl0ZW1TdGF0dXNGYWlsZWQpCisgICAgICAgIHJldHVybiBNZWRpYVBsYXllclByaXZh
dGVBVkZvdW5kYXRpb246Ok1lZGlhUGxheWVyQVZQbGF5ZXJJdGVtU3RhdHVzRmFpbGVkOworICAg
IGlmIChBVkNGUGxheWVySXRlbUlzUGxheWJhY2tMaWtlbHlUb0tlZXBVcChhdlBsYXllckl0ZW0o
bV9hdmZXcmFwcGVyKSkpCisgICAgICAgIHJldHVybiBNZWRpYVBsYXllclByaXZhdGVBVkZvdW5k
YXRpb246Ok1lZGlhUGxheWVyQVZQbGF5ZXJJdGVtU3RhdHVzUGxheWJhY2tMaWtlbHlUb0tlZXBV
cDsKKyAgICBpZiAoQVZDRlBsYXllckl0ZW1Jc1BsYXliYWNrQnVmZmVyRnVsbChhdlBsYXllckl0
ZW0obV9hdmZXcmFwcGVyKSkpCisgICAgICAgIHJldHVybiBNZWRpYVBsYXllclByaXZhdGVBVkZv
dW5kYXRpb246Ok1lZGlhUGxheWVyQVZQbGF5ZXJJdGVtU3RhdHVzUGxheWJhY2tCdWZmZXJGdWxs
OworICAgIGlmIChBVkNGUGxheWVySXRlbUlzUGxheWJhY2tCdWZmZXJFbXB0eShhdlBsYXllckl0
ZW0obV9hdmZXcmFwcGVyKSkpCisgICAgICAgIHJldHVybiBNZWRpYVBsYXllclByaXZhdGVBVkZv
dW5kYXRpb246Ok1lZGlhUGxheWVyQVZQbGF5ZXJJdGVtU3RhdHVzUGxheWJhY2tCdWZmZXJFbXB0
eTsKKyAgICByZXR1cm4gTWVkaWFQbGF5ZXJQcml2YXRlQVZGb3VuZGF0aW9uOjpNZWRpYVBsYXll
ckFWUGxheWVySXRlbVN0YXR1c1JlYWR5VG9QbGF5OworfQorCitQbGF0Zm9ybU1lZGlhIE1lZGlh
UGxheWVyUHJpdmF0ZUFWRm91bmRhdGlvbkNGOjpwbGF0Zm9ybU1lZGlhKCkgY29uc3QKK3sKKyAg
ICBMT0coTWVkaWEsICJNZWRpYVBsYXllclByaXZhdGVBVkZvdW5kYXRpb25DRjo6cGxhdGZvcm1N
ZWRpYSglcCkiLCB0aGlzKTsKKyAgICBQbGF0Zm9ybU1lZGlhIHBtOworICAgIHBtLnR5cGUgPSBQ
bGF0Zm9ybU1lZGlhOjpBVkZvdW5kYXRpb25DRk1lZGlhUGxheWVyVHlwZTsKKyAgICBwbS5tZWRp
YS5hdmNmTWVkaWFQbGF5ZXIgPSAoQVZDRlBsYXllciopYXZQbGF5ZXIobV9hdmZXcmFwcGVyKTsK
KyAgICByZXR1cm4gcG07Cit9CisKK1BsYXRmb3JtTGF5ZXIqIE1lZGlhUGxheWVyUHJpdmF0ZUFW
Rm91bmRhdGlvbkNGOjpwbGF0Zm9ybUxheWVyKCkgY29uc3QKK3sKKyAgICBpZiAoIW1fYXZmV3Jh
cHBlcikKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICByZXR1cm4gbV9hdmZXcmFwcGVyLT5wbGF0
Zm9ybUxheWVyKCk7Cit9CisKK3ZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlQVZGb3VuZGF0aW9uQ0Y6
OnBsYXRmb3JtU2V0VmlzaWJsZShib29sIGlzVmlzaWJsZSkKK3sKKyAgICBpZiAoIW1fYXZmV3Jh
cHBlcikKKyAgICAgICAgcmV0dXJuOworICAgIAorICAgIC8vIEZJWE1FOiBXZSB1c2UgYSBDQVRy
YW5zYWN0aW9uIGhlcmUgb24gdGhlIE1hYywgd2UgbmVlZCB0byBmaWd1cmUgb3V0IHdoeSB0aGlz
IHdhcyBkb25lIHRoZXJlIGFuZAorICAgIC8vIHdoZXRoZXIgd2UncmUgYWZmZWN0ZWQgYnkgdGhl
IHNhbWUgaXNzdWUuCisgICAgc2V0RGVsYXlDYWxsYmFja3ModHJ1ZSk7CisgICAgbV9hdmZXcmFw
cGVyLT5zZXRWaWRlb0xheWVySGlkZGVuKCFpc1Zpc2libGUpOyAgICAKKyAgICBzZXREZWxheUNh
bGxiYWNrcyhmYWxzZSk7Cit9CisKK3ZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlQVZGb3VuZGF0aW9u
Q0Y6OnBsYXRmb3JtUGxheSgpCit7CisgICAgTE9HKE1lZGlhLCAiTWVkaWFQbGF5ZXJQcml2YXRl
QVZGb3VuZGF0aW9uQ0Y6OnBsYXkoJXApIiwgdGhpcyk7CisgICAgaWYgKCFtZXRhRGF0YUF2YWls
YWJsZSgpIHx8ICFhdlBsYXllcihtX2F2ZldyYXBwZXIpKQorICAgICAgICByZXR1cm47CisKKyAg
ICBzZXREZWxheUNhbGxiYWNrcyh0cnVlKTsKKyAgICBBVkNGUGxheWVyU2V0UmF0ZShhdlBsYXll
cihtX2F2ZldyYXBwZXIpLCByZXF1ZXN0ZWRSYXRlKCkpOworICAgIHNldERlbGF5Q2FsbGJhY2tz
KGZhbHNlKTsKK30KKwordm9pZCBNZWRpYVBsYXllclByaXZhdGVBVkZvdW5kYXRpb25DRjo6cGxh
dGZvcm1QYXVzZSgpCit7CisgICAgTE9HKE1lZGlhLCAiTWVkaWFQbGF5ZXJQcml2YXRlQVZGb3Vu
ZGF0aW9uQ0Y6OnBhdXNlKCVwKSIsIHRoaXMpOworICAgIGlmICghbWV0YURhdGFBdmFpbGFibGUo
KSB8fCAhYXZQbGF5ZXIobV9hdmZXcmFwcGVyKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgc2V0
RGVsYXlDYWxsYmFja3ModHJ1ZSk7CisgICAgQVZDRlBsYXllclNldFJhdGUoYXZQbGF5ZXIobV9h
dmZXcmFwcGVyKSwgMCk7CisgICAgc2V0RGVsYXlDYWxsYmFja3MoZmFsc2UpOworfQorCit2b2lk
IE1lZGlhUGxheWVyUHJpdmF0ZUFWRm91bmRhdGlvbkNGOjp1cGRhdGVSYXRlKCkKK3sKKyAgICBM
T0coTWVkaWEsICJNZWRpYVBsYXllclByaXZhdGVBVkZvdW5kYXRpb25DRjo6dXBkYXRlUmF0ZSgl
cCkiLCB0aGlzKTsKKyAgICBpZiAoIW1ldGFEYXRhQXZhaWxhYmxlKCkgfHwgIWF2UGxheWVyKG1f
YXZmV3JhcHBlcikpCisgICAgICAgIHJldHVybjsKKworICAgIHNldERlbGF5Q2FsbGJhY2tzKHRy
dWUpOworICAgIEFWQ0ZQbGF5ZXJTZXRSYXRlKGF2UGxheWVyKG1fYXZmV3JhcHBlciksIHJlcXVl
c3RlZFJhdGUoKSk7CisgICAgc2V0RGVsYXlDYWxsYmFja3MoZmFsc2UpOworfQorCitmbG9hdCBN
ZWRpYVBsYXllclByaXZhdGVBVkZvdW5kYXRpb25DRjo6cGxhdGZvcm1EdXJhdGlvbigpIGNvbnN0
Cit7CisgICAgaWYgKCFtZXRhRGF0YUF2YWlsYWJsZSgpIHx8ICFhdkFzc2V0KG1fYXZmV3JhcHBl
cikpCisgICAgICAgIHJldHVybiAwOworCisgICAgZmxvYXQgZHVyYXRpb247CisgICAgQ01UaW1l
IGNtRHVyYXRpb24gPSBBVkNGQXNzZXRHZXREdXJhdGlvbihhdkFzc2V0KG1fYXZmV3JhcHBlcikp
OworICAgIGlmIChDTVRJTUVfSVNfTlVNRVJJQyhjbUR1cmF0aW9uKSkKKyAgICAgICAgZHVyYXRp
b24gPSBuYXJyb3dQcmVjaXNpb25Ub0Zsb2F0KENNVGltZUdldFNlY29uZHMoY21EdXJhdGlvbikp
OworICAgIGVsc2UgaWYgKENNVElNRV9JU19JTkRFRklOSVRFKGNtRHVyYXRpb24pKQorICAgICAg
ICBkdXJhdGlvbiA9IG51bWVyaWNfbGltaXRzPGZsb2F0Pjo6aW5maW5pdHkoKTsKKyAgICBlbHNl
IHsKKyAgICAgICAgTE9HKE1lZGlhLCAiTWVkaWFQbGF5ZXJQcml2YXRlQVZGTWFjOjpkdXJhdGlv
biglcCkgLSBpbnZhbGlkIGR1cmF0aW9uLCByZXR1cm5pbmcgMCIsIHRoaXMpOworICAgICAgICBy
ZXR1cm4gMDsKKyAgICB9CisKKyAgICByZXR1cm4gZHVyYXRpb247Cit9CisKK2Zsb2F0IE1lZGlh
UGxheWVyUHJpdmF0ZUFWRm91bmRhdGlvbkNGOjpjdXJyZW50VGltZSgpIGNvbnN0Cit7CisgICAg
aWYgKCFtZXRhRGF0YUF2YWlsYWJsZSgpIHx8ICFhdlBsYXllckl0ZW0obV9hdmZXcmFwcGVyKSkK
KyAgICAgICAgcmV0dXJuIDA7CisKKyAgICBDTVRpbWUgaXRlbVRpbWUgPSBBVkNGUGxheWVySXRl
bUdldEN1cnJlbnRUaW1lKGF2UGxheWVySXRlbShtX2F2ZldyYXBwZXIpKTsKKyAgICBpZiAoQ01U
SU1FX0lTX05VTUVSSUMoaXRlbVRpbWUpKQorICAgICAgICByZXR1cm4gbmFycm93UHJlY2lzaW9u
VG9GbG9hdChDTVRpbWVHZXRTZWNvbmRzKGl0ZW1UaW1lKSk7CisKKyAgICByZXR1cm4gMDsKK30K
Kwordm9pZCBNZWRpYVBsYXllclByaXZhdGVBVkZvdW5kYXRpb25DRjo6c2Vla1RvVGltZShmbG9h
dCB0aW1lKQoreworICAgIGlmICghbV9hdmZXcmFwcGVyKQorICAgICAgICByZXR1cm47CisgICAg
CisgICAgLy8gc2Vla1RvVGltZSBnZW5lcmF0ZXMgc2V2ZXJhbCBldmVudCBjYWxsYmFja3MsIHVw
ZGF0ZSBhZnRlcndhcmRzLgorICAgIHNldERlbGF5Q2FsbGJhY2tzKHRydWUpOworICAgIG1fYXZm
V3JhcHBlci0+c2Vla1RvVGltZSh0aW1lKTsKKyAgICBzZXREZWxheUNhbGxiYWNrcyhmYWxzZSk7
Cit9CisKK3ZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlQVZGb3VuZGF0aW9uQ0Y6OnNldFZvbHVtZShm
bG9hdCB2b2x1bWUpCit7CisgICAgaWYgKCFtZXRhRGF0YUF2YWlsYWJsZSgpIHx8ICFhdlBsYXll
cihtX2F2ZldyYXBwZXIpKQorICAgICAgICByZXR1cm47CisKKyAgICBBVkNGUGxheWVyU2V0Vm9s
dW1lKGF2UGxheWVyKG1fYXZmV3JhcHBlciksIHZvbHVtZSk7Cit9CisKK3ZvaWQgTWVkaWFQbGF5
ZXJQcml2YXRlQVZGb3VuZGF0aW9uQ0Y6OnNldENsb3NlZENhcHRpb25zVmlzaWJsZShib29sIGNs
b3NlZENhcHRpb25zVmlzaWJsZSkKK3sKKyAgICBpZiAoIW1ldGFEYXRhQXZhaWxhYmxlKCkgfHwg
IWF2UGxheWVyKG1fYXZmV3JhcHBlcikpCisgICAgICAgIHJldHVybjsKKworICAgIExPRyhNZWRp
YSwgIk1lZGlhUGxheWVyUHJpdmF0ZUFWRm91bmRhdGlvbkNGOjpzZXRDbG9zZWRDYXB0aW9uc1Zp
c2libGUoJXApIC0gc2V0dGluZyB0byAlcyIsIHRoaXMsIGJvb2xTdHJpbmcoY2xvc2VkQ2FwdGlv
bnNWaXNpYmxlKSk7CisgICAgQVZDRlBsYXllclNldENsb3NlZENhcHRpb25EaXNwbGF5RW5hYmxl
ZChhdlBsYXllcihtX2F2ZldyYXBwZXIpLCBjbG9zZWRDYXB0aW9uc1Zpc2libGUpOworfQorCitm
bG9hdCBNZWRpYVBsYXllclByaXZhdGVBVkZvdW5kYXRpb25DRjo6cmF0ZSgpIGNvbnN0Cit7Cisg
ICAgaWYgKCFtZXRhRGF0YUF2YWlsYWJsZSgpIHx8ICFhdlBsYXllcihtX2F2ZldyYXBwZXIpKQor
ICAgICAgICByZXR1cm4gMDsKKworICAgIHNldERlbGF5Q2FsbGJhY2tzKHRydWUpOworICAgIGZs
b2F0IGN1cnJlbnRSYXRlID0gQVZDRlBsYXllckdldFJhdGUoYXZQbGF5ZXIobV9hdmZXcmFwcGVy
KSk7CisgICAgc2V0RGVsYXlDYWxsYmFja3MoZmFsc2UpOworCisgICAgcmV0dXJuIGN1cnJlbnRS
YXRlOworfQorCitzdGF0aWMgYm9vbCB0aW1lUmFuZ2VJc1ZhbGlkQW5kTm90RW1wdHkoQ01UaW1l
IHN0YXJ0LCBDTVRpbWUgZHVyYXRpb24pCit7CisgICAgLy8gSXMgdGhlIHJhbmdlIHZhbGlkPwor
ICAgIGlmICghQ01USU1FX0lTX1ZBTElEKHN0YXJ0KSB8fCAhQ01USU1FX0lTX1ZBTElEKGR1cmF0
aW9uKSB8fCBkdXJhdGlvbi5lcG9jaCB8fCBkdXJhdGlvbi52YWx1ZSA8IDApCisgICAgICAgIHJl
dHVybiBmYWxzZTsKKworICAgIGlmIChDTVRJTUVfQ09NUEFSRV9JTkxJTkUoZHVyYXRpb24sID09
LCBrQ01UaW1lWmVybykpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIHJldHVybiB0cnVl
OworfQorCitQYXNzUmVmUHRyPFRpbWVSYW5nZXM+IE1lZGlhUGxheWVyUHJpdmF0ZUFWRm91bmRh
dGlvbkNGOjpwbGF0Zm9ybUJ1ZmZlcmVkVGltZVJhbmdlcygpIGNvbnN0Cit7CisgICAgUmVmUHRy
PFRpbWVSYW5nZXM+IHRpbWVSYW5nZXMgPSBUaW1lUmFuZ2VzOjpjcmVhdGUoKTsKKworICAgIGlm
ICghYXZQbGF5ZXJJdGVtKG1fYXZmV3JhcHBlcikpCisgICAgICAgIHJldHVybiB0aW1lUmFuZ2Vz
LnJlbGVhc2UoKTsKKworICAgIFJldGFpblB0cjxDRkFycmF5UmVmPiBsb2FkZWRSYW5nZXMoQWRv
cHRDRiwgQVZDRlBsYXllckl0ZW1Db3B5TG9hZGVkVGltZVJhbmdlcyhhdlBsYXllckl0ZW0obV9h
dmZXcmFwcGVyKSkpOworICAgIGlmICghbG9hZGVkUmFuZ2VzKQorICAgICAgICByZXR1cm4gdGlt
ZVJhbmdlcy5yZWxlYXNlKCk7CisKKyAgICBDRkluZGV4IHJhbmdlQ291bnQgPSBDRkFycmF5R2V0
Q291bnQobG9hZGVkUmFuZ2VzLmdldCgpKTsKKyAgICBmb3IgKENGSW5kZXggaSA9IDA7IGkgPCBy
YW5nZUNvdW50OyBpKyspIHsKKyAgICAgICAgQ0ZEaWN0aW9uYXJ5UmVmIHJhbmdlID0gc3RhdGlj
X2Nhc3Q8Q0ZEaWN0aW9uYXJ5UmVmPihDRkFycmF5R2V0VmFsdWVBdEluZGV4KGxvYWRlZFJhbmdl
cy5nZXQoKSwgaSkpOworICAgICAgICBDTVRpbWUgc3RhcnQgPSBDTVRpbWVNYWtlRnJvbURpY3Rp
b25hcnkoc3RhdGljX2Nhc3Q8Q0ZEaWN0aW9uYXJ5UmVmPihDRkRpY3Rpb25hcnlHZXRWYWx1ZShy
YW5nZSwgQ01UaW1lUmFuZ2VTdGFydEtleSgpKSkpOworICAgICAgICBDTVRpbWUgZHVyYXRpb24g
PSBDTVRpbWVNYWtlRnJvbURpY3Rpb25hcnkoc3RhdGljX2Nhc3Q8Q0ZEaWN0aW9uYXJ5UmVmPihD
RkRpY3Rpb25hcnlHZXRWYWx1ZShyYW5nZSwgQ01UaW1lUmFuZ2VEdXJhdGlvbktleSgpKSkpOwor
ICAgICAgICAKKyAgICAgICAgaWYgKHRpbWVSYW5nZUlzVmFsaWRBbmROb3RFbXB0eShzdGFydCwg
ZHVyYXRpb24pKSB7CisgICAgICAgICAgICBmbG9hdCByYW5nZVN0YXJ0ID0gbmFycm93UHJlY2lz
aW9uVG9GbG9hdChDTVRpbWVHZXRTZWNvbmRzKHN0YXJ0KSk7CisgICAgICAgICAgICBmbG9hdCBy
YW5nZUVuZCA9IG5hcnJvd1ByZWNpc2lvblRvRmxvYXQoQ01UaW1lR2V0U2Vjb25kcyhDTVRpbWVB
ZGQoc3RhcnQsIGR1cmF0aW9uKSkpOworICAgICAgICAgICAgdGltZVJhbmdlcy0+YWRkKHJhbmdl
U3RhcnQsIHJhbmdlRW5kKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHJldHVybiB0aW1lUmFu
Z2VzLnJlbGVhc2UoKTsKK30KKworZmxvYXQgTWVkaWFQbGF5ZXJQcml2YXRlQVZGb3VuZGF0aW9u
Q0Y6OnBsYXRmb3JtTWF4VGltZVNlZWthYmxlKCkgY29uc3QKK3sKKyAgICBpZiAoIWF2UGxheWVy
SXRlbShtX2F2ZldyYXBwZXIpKQorICAgICAgICByZXR1cm4gMDsKKworICAgIFJldGFpblB0cjxD
RkFycmF5UmVmPiBzZWVrYWJsZVJhbmdlcyhBZG9wdENGLCBBVkNGUGxheWVySXRlbUNvcHlTZWVr
YWJsZVRpbWVSYW5nZXMoYXZQbGF5ZXJJdGVtKG1fYXZmV3JhcHBlcikpKTsKKyAgICBpZiAoIXNl
ZWthYmxlUmFuZ2VzKQorICAgICAgICByZXR1cm4gMDsKKworICAgIGZsb2F0IG1heFRpbWVTZWVr
YWJsZSA9IDA7CisgICAgQ0ZJbmRleCByYW5nZUNvdW50ID0gQ0ZBcnJheUdldENvdW50KHNlZWth
YmxlUmFuZ2VzLmdldCgpKTsKKyAgICBmb3IgKENGSW5kZXggaSA9IDA7IGkgPCByYW5nZUNvdW50
OyBpKyspIHsKKyAgICAgICAgQ0ZEaWN0aW9uYXJ5UmVmIHJhbmdlID0gc3RhdGljX2Nhc3Q8Q0ZE
aWN0aW9uYXJ5UmVmPihDRkFycmF5R2V0VmFsdWVBdEluZGV4KHNlZWthYmxlUmFuZ2VzLmdldCgp
LCBpKSk7CisgICAgICAgIENNVGltZSBzdGFydCA9IENNVGltZU1ha2VGcm9tRGljdGlvbmFyeShz
dGF0aWNfY2FzdDxDRkRpY3Rpb25hcnlSZWY+KENGRGljdGlvbmFyeUdldFZhbHVlKHJhbmdlLCBD
TVRpbWVSYW5nZVN0YXJ0S2V5KCkpKSk7CisgICAgICAgIENNVGltZSBkdXJhdGlvbiA9IENNVGlt
ZU1ha2VGcm9tRGljdGlvbmFyeShzdGF0aWNfY2FzdDxDRkRpY3Rpb25hcnlSZWY+KENGRGljdGlv
bmFyeUdldFZhbHVlKHJhbmdlLCBDTVRpbWVSYW5nZUR1cmF0aW9uS2V5KCkpKSk7CisgICAgICAg
IGlmICghdGltZVJhbmdlSXNWYWxpZEFuZE5vdEVtcHR5KHN0YXJ0LCBkdXJhdGlvbikpCisgICAg
ICAgICAgICBjb250aW51ZTsKKyAgICAgICAgCisgICAgICAgIGZsb2F0IGVuZE9mUmFuZ2UgPSBu
YXJyb3dQcmVjaXNpb25Ub0Zsb2F0KENNVGltZUdldFNlY29uZHMoQ01UaW1lQWRkKHN0YXJ0LCBk
dXJhdGlvbikpKTsKKyAgICAgICAgaWYgKG1heFRpbWVTZWVrYWJsZSA8IGVuZE9mUmFuZ2UpCisg
ICAgICAgICAgICBtYXhUaW1lU2Vla2FibGUgPSBlbmRPZlJhbmdlOworICAgIH0KKworICAgIHJl
dHVybiBtYXhUaW1lU2Vla2FibGU7ICAgCit9CisKK2Zsb2F0IE1lZGlhUGxheWVyUHJpdmF0ZUFW
Rm91bmRhdGlvbkNGOjpwbGF0Zm9ybU1heFRpbWVMb2FkZWQoKSBjb25zdAoreworICAgIGlmICgh
YXZQbGF5ZXJJdGVtKG1fYXZmV3JhcHBlcikpCisgICAgICAgIHJldHVybiAwOworCisgICAgUmV0
YWluUHRyPENGQXJyYXlSZWY+IGxvYWRlZFJhbmdlcyhBZG9wdENGLCBBVkNGUGxheWVySXRlbUNv
cHlMb2FkZWRUaW1lUmFuZ2VzKGF2UGxheWVySXRlbShtX2F2ZldyYXBwZXIpKSk7CisgICAgaWYg
KCFsb2FkZWRSYW5nZXMpCisgICAgICAgIHJldHVybiAwOworCisgICAgZmxvYXQgbWF4VGltZUxv
YWRlZCA9IDA7CisgICAgQ0ZJbmRleCByYW5nZUNvdW50ID0gQ0ZBcnJheUdldENvdW50KGxvYWRl
ZFJhbmdlcy5nZXQoKSk7CisgICAgZm9yIChDRkluZGV4IGkgPSAwOyBpIDwgcmFuZ2VDb3VudDsg
aSsrKSB7CisgICAgICAgIENGRGljdGlvbmFyeVJlZiByYW5nZSA9IHN0YXRpY19jYXN0PENGRGlj
dGlvbmFyeVJlZj4oQ0ZBcnJheUdldFZhbHVlQXRJbmRleChsb2FkZWRSYW5nZXMuZ2V0KCksIGkp
KTsKKyAgICAgICAgQ01UaW1lIHN0YXJ0ID0gQ01UaW1lTWFrZUZyb21EaWN0aW9uYXJ5KHN0YXRp
Y19jYXN0PENGRGljdGlvbmFyeVJlZj4oQ0ZEaWN0aW9uYXJ5R2V0VmFsdWUocmFuZ2UsIENNVGlt
ZVJhbmdlU3RhcnRLZXkoKSkpKTsKKyAgICAgICAgQ01UaW1lIGR1cmF0aW9uID0gQ01UaW1lTWFr
ZUZyb21EaWN0aW9uYXJ5KHN0YXRpY19jYXN0PENGRGljdGlvbmFyeVJlZj4oQ0ZEaWN0aW9uYXJ5
R2V0VmFsdWUocmFuZ2UsIENNVGltZVJhbmdlRHVyYXRpb25LZXkoKSkpKTsKKyAgICAgICAgaWYg
KCF0aW1lUmFuZ2VJc1ZhbGlkQW5kTm90RW1wdHkoc3RhcnQsIGR1cmF0aW9uKSkKKyAgICAgICAg
ICAgIGNvbnRpbnVlOworICAgICAgICAKKyAgICAgICAgZmxvYXQgZW5kT2ZSYW5nZSA9IG5hcnJv
d1ByZWNpc2lvblRvRmxvYXQoQ01UaW1lR2V0U2Vjb25kcyhDTVRpbWVBZGQoc3RhcnQsIGR1cmF0
aW9uKSkpOworICAgICAgICBpZiAobWF4VGltZUxvYWRlZCA8IGVuZE9mUmFuZ2UpCisgICAgICAg
ICAgICBtYXhUaW1lTG9hZGVkID0gZW5kT2ZSYW5nZTsKKyAgICB9CisKKyAgICByZXR1cm4gbWF4
VGltZUxvYWRlZDsgICAKK30KKwordW5zaWduZWQgTWVkaWFQbGF5ZXJQcml2YXRlQVZGb3VuZGF0
aW9uQ0Y6OnRvdGFsQnl0ZXMoKSBjb25zdAoreworICAgIGlmICghbWV0YURhdGFBdmFpbGFibGUo
KSB8fCAhYXZBc3NldChtX2F2ZldyYXBwZXIpKQorICAgICAgICByZXR1cm4gMDsKKworICAgIGlu
dDY0X3QgdG90YWxNZWRpYVNpemUgPSAwOworICAgIFJldGFpblB0cjxDRkFycmF5UmVmPiB0cmFj
a3MoQWRvcHRDRiwgQVZDRkFzc2V0Q29weUFzc2V0VHJhY2tzKGF2QXNzZXQobV9hdmZXcmFwcGVy
KSkpOworICAgIENGSW5kZXggdHJhY2tDb3VudCA9IENGQXJyYXlHZXRDb3VudCh0cmFja3MuZ2V0
KCkpOworICAgIGZvciAoQ0ZJbmRleCBpID0gMDsgaSA8IHRyYWNrQ291bnQ7IGkrKykgeworICAg
ICAgICBBVkNGQXNzZXRUcmFja1JlZiBhc3NldFRyYWNrID0gKEFWQ0ZBc3NldFRyYWNrUmVmKUNG
QXJyYXlHZXRWYWx1ZUF0SW5kZXgodHJhY2tzLmdldCgpLCBpKTsKKyAgICAgICAgdG90YWxNZWRp
YVNpemUgKz0gQVZDRkFzc2V0VHJhY2tHZXRUb3RhbFNhbXBsZURhdGFMZW5ndGgoYXNzZXRUcmFj
ayk7CisgICAgfQorCisgICAgLy8gRklYTUU6IEl0IGRvZXNuJ3Qgc2VlbSBzYWZlIHRvIGNhc3Qg
YW4gaW50NjRfdCB0byB1bnNpZ25lZC4KKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+
KHRvdGFsTWVkaWFTaXplKTsKK30KKworTWVkaWFQbGF5ZXJQcml2YXRlQVZGb3VuZGF0aW9uOjpB
c3NldFN0YXR1cyBNZWRpYVBsYXllclByaXZhdGVBVkZvdW5kYXRpb25DRjo6YXNzZXRTdGF0dXMo
KSBjb25zdAoreworICAgIGlmICghYXZBc3NldChtX2F2ZldyYXBwZXIpKQorICAgICAgICByZXR1
cm4gTWVkaWFQbGF5ZXJBVkFzc2V0U3RhdHVzRG9lc05vdEV4aXN0OworCisgICAgLy8gRmlyc3Qs
IG1ha2Ugc3VyZSBhbGwgbWV0YWRhdGEgcHJvcGVydGllcyB3ZSByZWx5IG9uIGFyZSBsb2FkZWQu
CisgICAgQ0ZBcnJheVJlZiBrZXlzID0gbWV0YWRhdGFLZXlOYW1lcygpOworICAgIENGSW5kZXgg
a2V5Q291bnQgPSBDRkFycmF5R2V0Q291bnQoa2V5cyk7CisgICAgZm9yIChDRkluZGV4IGkgPSAw
OyBpIDwga2V5Q291bnQ7IGkrKykgeworICAgICAgICBDRlN0cmluZ1JlZiBrZXlOYW1lID0gc3Rh
dGljX2Nhc3Q8Q0ZTdHJpbmdSZWY+KENGQXJyYXlHZXRWYWx1ZUF0SW5kZXgoa2V5cywgaSkpOwor
ICAgICAgICBBVkNGUHJvcGVydHlWYWx1ZVN0YXR1cyBrZXlTdGF0dXMgPSBBVkNGQXNzZXRHZXRT
dGF0dXNPZlZhbHVlRm9yUHJvcGVydHkoYXZBc3NldChtX2F2ZldyYXBwZXIpLCBrZXlOYW1lLCAw
KTsKKyAgICAgICAgCisgICAgICAgIGlmIChrZXlTdGF0dXMgPCBBVkNGUHJvcGVydHlWYWx1ZVN0
YXR1c0xvYWRlZCkKKyAgICAgICAgICAgIHJldHVybiBNZWRpYVBsYXllckFWQXNzZXRTdGF0dXNM
b2FkaW5nOworICAgICAgICBpZiAoa2V5U3RhdHVzID09IEFWQ0ZQcm9wZXJ0eVZhbHVlU3RhdHVz
RmFpbGVkKQorICAgICAgICAgICAgcmV0dXJuIE1lZGlhUGxheWVyQVZBc3NldFN0YXR1c0ZhaWxl
ZDsKKyAgICAgICAgaWYgKGtleVN0YXR1cyA9PSBBVkNGUHJvcGVydHlWYWx1ZVN0YXR1c0NhbmNl
bGxlZCkKKyAgICAgICAgICAgIHJldHVybiBNZWRpYVBsYXllckFWQXNzZXRTdGF0dXNDYW5jZWxs
ZWQ7CisgICAgfQorCisgICAgaWYgKEFWQ0ZBc3NldElzUGxheWFibGUoYXZBc3NldChtX2F2Zldy
YXBwZXIpKSkKKyAgICAgICAgcmV0dXJuIE1lZGlhUGxheWVyQVZBc3NldFN0YXR1c1BsYXlhYmxl
OworCisgICAgcmV0dXJuIE1lZGlhUGxheWVyQVZBc3NldFN0YXR1c0xvYWRlZDsKK30KKwordm9p
ZCBNZWRpYVBsYXllclByaXZhdGVBVkZvdW5kYXRpb25DRjo6cGFpbnRDdXJyZW50RnJhbWVJbkNv
bnRleHQoR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0LCBjb25zdCBJbnRSZWN0JiByZWN0KQorewor
ICAgIGlmIChjb250ZXh0LT5wYWludGluZ0Rpc2FibGVkKCkpCisgICAgICAgIHJldHVybjsKKwor
ICAgIGlmIChjdXJyZW50UmVuZGVyaW5nTW9kZSgpID09IE1lZGlhUmVuZGVyaW5nVG9MYXllciAm
JiAhaW1hZ2VHZW5lcmF0b3IobV9hdmZXcmFwcGVyKSkgeworICAgICAgICAvLyBXZSdyZSBiZWlu
ZyB0b2xkIHRvIHJlbmRlciBpbnRvIGEgY29udGV4dCwgYnV0IHdlIGFscmVhZHkgaGF2ZSB0aGUK
KyAgICAgICAgLy8gdmlkZW8gbGF5ZXIsIHdoaWNoIHByb2JhYmx5IG1lYW5zIHdlJ3ZlIGJlZW4g
Y2FsbGVkIGZyb20gPGNhbnZhcz4uCisgICAgICAgIGNyZWF0ZUNvbnRleHRWaWRlb1JlbmRlcmVy
KCk7CisgICAgfQorCisgICAgcGFpbnQoY29udGV4dCwgcmVjdCk7Cit9CisKK3ZvaWQgTWVkaWFQ
bGF5ZXJQcml2YXRlQVZGb3VuZGF0aW9uQ0Y6OnBhaW50KEdyYXBoaWNzQ29udGV4dCogY29udGV4
dCwgY29uc3QgSW50UmVjdCYgcmVjdCkKK3sKKyAgICBpZiAoY29udGV4dC0+cGFpbnRpbmdEaXNh
YmxlZCgpIHx8ICFpbWFnZUdlbmVyYXRvcihtX2F2ZldyYXBwZXIpKQorICAgICAgICByZXR1cm47
CisKKyAgICBMT0coTWVkaWEsICJNZWRpYVBsYXllclByaXZhdGVBVkZvdW5kYXRpb25DRjo6cGFp
bnQoJXApIiwgdGhpcyk7CisKKyAgICBzZXREZWxheUNhbGxiYWNrcyh0cnVlKTsKKyAgICBSZXRh
aW5QdHI8Q0dJbWFnZVJlZj4gaW1hZ2UgPSBtX2F2ZldyYXBwZXItPmNyZWF0ZUltYWdlRm9yVGlt
ZUluUmVjdChjdXJyZW50VGltZSgpLCByZWN0KTsKKyAgICBpZiAoaW1hZ2UpIHsKKyAgICAgICAg
Y29udGV4dC0+c2F2ZSgpOworICAgICAgICBjb250ZXh0LT50cmFuc2xhdGUocmVjdC54KCksIHJl
Y3QueSgpICsgcmVjdC5oZWlnaHQoKSk7CisgICAgICAgIGNvbnRleHQtPnNjYWxlKEZsb2F0U2l6
ZSgxLjBmLCAtMS4wZikpOworICAgICAgICBjb250ZXh0LT5zZXRJbWFnZUludGVycG9sYXRpb25R
dWFsaXR5KEludGVycG9sYXRpb25Mb3cpOworICAgICAgICBJbnRSZWN0IHBhaW50UmVjdChJbnRQ
b2ludCgwLCAwKSwgSW50U2l6ZShyZWN0LndpZHRoKCksIHJlY3QuaGVpZ2h0KCkpKTsKKyAgICAg
ICAgQ0dDb250ZXh0RHJhd0ltYWdlKGNvbnRleHQtPnBsYXRmb3JtQ29udGV4dCgpLCBDR1JlY3RN
YWtlKDAsIDAsIHBhaW50UmVjdC53aWR0aCgpLCBwYWludFJlY3QuaGVpZ2h0KCkpLCBpbWFnZS5n
ZXQoKSk7CisgICAgICAgIGNvbnRleHQtPnJlc3RvcmUoKTsKKyAgICAgICAgaW1hZ2UgPSAwOwor
ICAgIH0KKyAgICBzZXREZWxheUNhbGxiYWNrcyhmYWxzZSk7CisgICAgCisgICAgbV92aWRlb0Zy
YW1lSGFzRHJhd24gPSB0cnVlOworfQorCitzdGF0aWMgSGFzaFNldDxTdHJpbmc+IG1pbWVUeXBl
Q2FjaGUoKQoreworICAgIERFRklORV9TVEFUSUNfTE9DQUwoSGFzaFNldDxTdHJpbmc+LCBjYWNo
ZSwgKCkpOworICAgIHN0YXRpYyBib29sIHR5cGVMaXN0SW5pdGlhbGl6ZWQgPSBmYWxzZTsKKwor
ICAgIGlmICh0eXBlTGlzdEluaXRpYWxpemVkKQorICAgICAgICByZXR1cm4gY2FjaGU7CisgICAg
dHlwZUxpc3RJbml0aWFsaXplZCA9IHRydWU7CisKKyAgICAvLyBOb3QgcG9zc2libGUgdG8gcXVl
cnkgQVZGb3VuZGF0aW9uIGZvciBzdXBwb3J0ZWQgTUlNRSB0eXBlcywgPHJkYXI6Ly9wcm9ibGVt
Lzg3MjE2OTM+LCBzbworICAgIC8vIGhhcmQgY29kZSBzb21lIHR5cGVzIGZvciBub3cuCisgICAg
Y2FjaGUuYWRkKCJ2aWRlby9xdWlja3RpbWUiKTsKKyAgICBjYWNoZS5hZGQoInZpZGVvL21wNCIp
OworICAgIGNhY2hlLmFkZCgidmlkZW8vbXBlZyIpOworICAgIGNhY2hlLmFkZCgiYXVkaW8vM2dw
cCIpOworICAgIGNhY2hlLmFkZCgiYXVkaW8vbXAzIik7CisgICAgY2FjaGUuYWRkKCJhdWRpby9t
cDQiKTsKKyAgICBjYWNoZS5hZGQoImF1ZGlvL21wNCIpOworICAgIGNhY2hlLmFkZCgiYXVkaW8v
bTRhIik7CisgICAgY2FjaGUuYWRkKCJhdWRpby9hYWMiKTsKKyAgICBjYWNoZS5hZGQoImF1ZGlv
L3dhdiIpOworICAgIGNhY2hlLmFkZCgiYXBwbGljYXRpb24vdm5kLmFwcGxlLm1wZWd1cmwiKTsK
KworICAgIHJldHVybiBjYWNoZTsKK30gCisKK3ZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlQVZGb3Vu
ZGF0aW9uQ0Y6OmdldFN1cHBvcnRlZFR5cGVzKEhhc2hTZXQ8U3RyaW5nPiYgc3VwcG9ydGVkVHlw
ZXMpCit7CisgICAgc3VwcG9ydGVkVHlwZXMgPSBtaW1lVHlwZUNhY2hlKCk7Cit9IAorCitNZWRp
YVBsYXllcjo6U3VwcG9ydHNUeXBlIE1lZGlhUGxheWVyUHJpdmF0ZUFWRm91bmRhdGlvbkNGOjpz
dXBwb3J0c1R5cGUoY29uc3QgU3RyaW5nJiB0eXBlLCBjb25zdCBTdHJpbmcmIGNvZGVjcykKK3sK
KyAgICAvLyBPbmx5IHJldHVybiAiSXNTdXBwb3J0ZWQiIGlmIHRoZXJlIGlzIG5vIGNvZGVjcyBw
YXJhbWV0ZXIgZm9yIG5vdyBhcyB0aGVyZSBpcyBubyB3YXkgdG8gYXNrIGlmIGl0IHN1cHBvcnRz
IGFuCisgICAgLy8gZXh0ZW5kZWQgTUlNRSB0eXBlIHVudGlsIHJkYXI6Ly84NzIxNzE1IGlzIGZp
eGVkLgorICAgIGlmIChtaW1lVHlwZUNhY2hlKCkuY29udGFpbnModHlwZSkpCisgICAgICAgIHJl
dHVybiBjb2RlY3MuaXNFbXB0eSgpID8gTWVkaWFQbGF5ZXI6Ok1heUJlU3VwcG9ydGVkIDogTWVk
aWFQbGF5ZXI6OklzU3VwcG9ydGVkOworCisgICAgcmV0dXJuIE1lZGlhUGxheWVyOjpJc05vdFN1
cHBvcnRlZDsKK30KKworCitib29sIE1lZGlhUGxheWVyUHJpdmF0ZUFWRm91bmRhdGlvbkNGOjpp
c0F2YWlsYWJsZSgpCit7CisgICAgcmV0dXJuIEFWRm91bmRhdGlvbkNGTGlicmFyeSgpICYmIENv
cmVNZWRpYUxpYnJhcnkoKSAmJiBsaWJkaXNwYXRjaExpYnJhcnkoKTsKK30KKworZmxvYXQgTWVk
aWFQbGF5ZXJQcml2YXRlQVZGb3VuZGF0aW9uQ0Y6Om1lZGlhVGltZUZvclRpbWVWYWx1ZShmbG9h
dCB0aW1lVmFsdWUpIGNvbnN0Cit7CisgICAgaWYgKCFtZXRhRGF0YUF2YWlsYWJsZSgpKQorICAg
ICAgICByZXR1cm4gdGltZVZhbHVlOworCisgICAgLy8gRklYTUUgLSBjYW4gbm90IGltcGxlbWVu
dCB1bnRpbCByZGFyOi8vODcyMTY2OSBpcyBmaXhlZC4KKyAgICByZXR1cm4gdGltZVZhbHVlOwor
fQorCit2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZUFWRm91bmRhdGlvbkNGOjp0cmFja3NDaGFuZ2Vk
KCkKK3sKKyAgICBpZiAoIWF2QXNzZXQobV9hdmZXcmFwcGVyKSkKKyAgICAgICAgcmV0dXJuOwor
ICAgIAorICAgIC8vIFRoaXMgaXMgY2FsbGVkIHdoZW5ldmVyIHRoZSB0cmFja3MgY29sbGVjdGlv
biBjaGFuZ2VzIHNvIGNhY2hlIGhhc1ZpZGVvIGFuZCBoYXNBdWRpbyBzaW5jZSB3ZSBhcmUKKyAg
ICAvLyBhc2tlZCBhYm91dCB0aG9zZSBmYWlybHkgZnJlcXVlbnRseS4KKyAgICBpZiAoIWF2UGxh
eWVySXRlbShtX2F2ZldyYXBwZXIpKSB7CisgICAgICAgIC8vIFdlIGRvbid0IGhhdmUgYSBwbGF5
ZXIgaXRlbSB5ZXQsIHNvIGNoZWNrIHdpdGggdGhlIGFzc2V0IGJlY2F1c2Ugc29tZSBhc3NldHMg
c3VwcG9ydCBpbnNwZWN0aW9uCisgICAgICAgIC8vIHByaW9yIHRvIGJlY29taW5nIHJlYWR5IHRv
IHBsYXkuCisgICAgICAgIFJldGFpblB0cjxDRkFycmF5UmVmPiB2aXN1YWxUcmFja3MoQWRvcHRD
RiwgQVZDRkFzc2V0Q29weVRyYWNrc1dpdGhNZWRpYUNoYXJhY3RlcmlzdGljKGF2QXNzZXQobV9h
dmZXcmFwcGVyKSwgQVZDRk1lZGlhQ2hhcmFjdGVyaXN0aWNWaXN1YWwpKTsKKyAgICAgICAgc2V0
SGFzVmlkZW8oQ0ZBcnJheUdldENvdW50KHZpc3VhbFRyYWNrcy5nZXQoKSkpOworCisgICAgICAg
IFJldGFpblB0cjxDRkFycmF5UmVmPiBhdWRpb1RyYWNrcyhBZG9wdENGLCBBVkNGQXNzZXRDb3B5
VHJhY2tzV2l0aE1lZGlhQ2hhcmFjdGVyaXN0aWMoYXZBc3NldChtX2F2ZldyYXBwZXIpLCBBVkNG
TWVkaWFDaGFyYWN0ZXJpc3RpY0F1ZGlibGUpKTsKKyAgICAgICAgc2V0SGFzQXVkaW8oQ0ZBcnJh
eUdldENvdW50KGF1ZGlvVHJhY2tzLmdldCgpKSk7CisKKyAgICAgICAgUmV0YWluUHRyPENGQXJy
YXlSZWY+IGNhcHRpb25UcmFja3MoQWRvcHRDRiwgQVZDRkFzc2V0Q29weVRyYWNrc1dpdGhNZWRp
YVR5cGUoYXZBc3NldChtX2F2ZldyYXBwZXIpLCBBVkNGTWVkaWFUeXBlQ2xvc2VkQ2FwdGlvbikp
OworICAgICAgICBzZXRIYXNBdWRpbyhDRkFycmF5R2V0Q291bnQoY2FwdGlvblRyYWNrcy5nZXQo
KSkpOworICAgIH0gZWxzZSB7CisgICAgICAgIGJvb2wgaGFzVmlkZW8gPSBmYWxzZTsKKyAgICAg
ICAgYm9vbCBoYXNBdWRpbyA9IGZhbHNlOworICAgICAgICBib29sIGhhc0NhcHRpb25zID0gZmFs
c2U7CisKKyAgICAgICAgUmV0YWluUHRyPENGQXJyYXlSZWY+IHRyYWNrcyhBZG9wdENGLCBBVkNG
UGxheWVySXRlbUNvcHlUcmFja3MoYXZQbGF5ZXJJdGVtKG1fYXZmV3JhcHBlcikpKTsKKworICAg
ICAgICBDRkluZGV4IHRyYWNrQ291bnQgPSBDRkFycmF5R2V0Q291bnQodHJhY2tzLmdldCgpKTsK
KyAgICAgICAgZm9yIChDRkluZGV4IGkgPSAwOyBpIDwgdHJhY2tDb3VudDsgaSsrKSB7CisgICAg
ICAgICAgICBBVkNGUGxheWVySXRlbVRyYWNrUmVmIHRyYWNrID0gKEFWQ0ZQbGF5ZXJJdGVtVHJh
Y2tSZWYpKENGQXJyYXlHZXRWYWx1ZUF0SW5kZXgodHJhY2tzLmdldCgpLCBpKSk7CisgICAgICAg
ICAgICAKKyAgICAgICAgICAgIGlmIChBVkNGUGxheWVySXRlbVRyYWNrSXNFbmFibGVkKHRyYWNr
KSkgeworICAgICAgICAgICAgICAgIFJldGFpblB0cjxBVkNGQXNzZXRUcmFja1JlZj4gYXNzZXRU
cmFjayhBZG9wdENGLCBBVkNGUGxheWVySXRlbVRyYWNrQ29weUFzc2V0VHJhY2sodHJhY2spKTsK
KyAgICAgICAgICAgICAgICBDRlN0cmluZ1JlZiBtZWRpYVR5cGUgPSBBVkNGQXNzZXRUcmFja0dl
dE1lZGlhVHlwZShhc3NldFRyYWNrLmdldCgpKTsKKyAgICAgICAgICAgICAgICBpZiAoIW1lZGlh
VHlwZSkKKyAgICAgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICAgICAgCisg
ICAgICAgICAgICAgICAgaWYgKENGU3RyaW5nQ29tcGFyZShtZWRpYVR5cGUsIEFWQ0ZNZWRpYVR5
cGVWaWRlbywga0NGQ29tcGFyZUNhc2VJbnNlbnNpdGl2ZSkgPT0ga0NGQ29tcGFyZUVxdWFsVG8p
CisgICAgICAgICAgICAgICAgICAgIGhhc1ZpZGVvID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICBl
bHNlIGlmIChDRlN0cmluZ0NvbXBhcmUobWVkaWFUeXBlLCBBVkNGTWVkaWFUeXBlQXVkaW8sIGtD
RkNvbXBhcmVDYXNlSW5zZW5zaXRpdmUpID09IGtDRkNvbXBhcmVFcXVhbFRvKQorICAgICAgICAg
ICAgICAgICAgICBoYXNBdWRpbyA9IHRydWU7CisgICAgICAgICAgICAgICAgZWxzZSBpZiAoQ0ZT
dHJpbmdDb21wYXJlKG1lZGlhVHlwZSwgQVZDRk1lZGlhVHlwZUNsb3NlZENhcHRpb24sIGtDRkNv
bXBhcmVDYXNlSW5zZW5zaXRpdmUpID09IGtDRkNvbXBhcmVFcXVhbFRvKQorICAgICAgICAgICAg
ICAgICAgICBoYXNDYXB0aW9ucyA9IHRydWU7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKwor
ICAgICAgICBzZXRIYXNWaWRlbyhoYXNWaWRlbyk7CisgICAgICAgIHNldEhhc0F1ZGlvKGhhc0F1
ZGlvKTsKKyAgICAgICAgc2V0SGFzQ2xvc2VkQ2FwdGlvbnMoaGFzQ2FwdGlvbnMpOworICAgIH0K
KworICAgIExPRyhNZWRpYSwgIk1lZGlhUGxheWVyUHJpdmF0ZUFWRm91bmRhdGlvbkNGOnRyYWNr
c0NoYW5nZWQoJXApIC0gaGFzVmlkZW8gPSAlcywgaGFzQXVkaW8gPSAlcywgaGFzQ2FwdGlvbnMg
PSAlcyIsIAorICAgICAgICB0aGlzLCBib29sU3RyaW5nKGhhc1ZpZGVvKCkpLCBib29sU3RyaW5n
KGhhc0F1ZGlvKCkpLCBib29sU3RyaW5nKGhhc0Nsb3NlZENhcHRpb25zKCkpKTsKKworICAgIHNp
emVDaGFuZ2VkKCk7Cit9CisKK3ZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlQVZGb3VuZGF0aW9uQ0Y6
OnNpemVDaGFuZ2VkKCkKK3sKKyAgICBpZiAoIWF2QXNzZXQobV9hdmZXcmFwcGVyKSkKKyAgICAg
ICAgcmV0dXJuOworICAgIAorICAgIC8vIEFWQXNzZXQncyAnbmF0dXJhbFNpemUnIHByb3BlcnR5
IG9ubHkgY29uc2lkZXJzIHRoZSBtb3ZpZSdzIGZpcnN0IHZpZGVvIHRyYWNrLCBzbyB3ZSBuZWVk
IHRvIGNvbXB1dGUKKyAgICAvLyB0aGUgdW5pb24gb2YgYWxsIHZpc3VhbCB0cmFjayByZWN0cy4K
KyAgICBDR1JlY3QgdHJhY2tSZWN0VW5pb24gPSBDR1JlY3RaZXJvOworICAgIFJldGFpblB0cjxD
RkFycmF5UmVmPiB0cmFja3MoQWRvcHRDRiwgQVZDRkFzc2V0Q29weVRyYWNrc1dpdGhNZWRpYVR5
cGUoYXZBc3NldChtX2F2ZldyYXBwZXIpLCBBVkNGTWVkaWFDaGFyYWN0ZXJpc3RpY1Zpc3VhbCkp
OworICAgIENGSW5kZXggdHJhY2tDb3VudCA9IENGQXJyYXlHZXRDb3VudCh0cmFja3MuZ2V0KCkp
OworICAgIGZvciAoQ0ZJbmRleCBpID0gMDsgaSA8IHRyYWNrQ291bnQ7IGkrKykgeworICAgICAg
ICBBVkNGQXNzZXRUcmFja1JlZiBhc3NldFRyYWNrID0gKEFWQ0ZBc3NldFRyYWNrUmVmKShDRkFy
cmF5R2V0VmFsdWVBdEluZGV4KHRyYWNrcy5nZXQoKSwgaSkpOworICAgICAgICAKKyAgICAgICAg
Q0dTaXplIHRyYWNrU2l6ZSA9IEFWQ0ZBc3NldFRyYWNrR2V0TmF0dXJhbFNpemUoYXNzZXRUcmFj
ayk7CisgICAgICAgIENHUmVjdCB0cmFja1JlY3QgPSBDR1JlY3RNYWtlKDAsIDAsIHRyYWNrU2l6
ZS53aWR0aCwgdHJhY2tTaXplLmhlaWdodCk7CisgICAgICAgIHRyYWNrUmVjdFVuaW9uID0gQ0dS
ZWN0VW5pb24odHJhY2tSZWN0VW5pb24sIENHUmVjdEFwcGx5QWZmaW5lVHJhbnNmb3JtKHRyYWNr
UmVjdCwgQVZDRkFzc2V0VHJhY2tHZXRQcmVmZXJyZWRUcmFuc2Zvcm0oYXNzZXRUcmFjaykpKTsK
KyAgICB9CisgICAgLy8gVGhlIG1vdmllIGlzIGFsd2F5cyBkaXNwbGF5ZWQgYXQgMCwwIHNvIG1v
dmUgdGhlIHRyYWNrIHJlY3QgdG8gdGhlIG9yaWdpbiBiZWZvcmUgdXNpbmcgd2lkdGggYW5kIGhl
aWdodC4KKyAgICB0cmFja1JlY3RVbmlvbiA9IENHUmVjdE9mZnNldCh0cmFja1JlY3RVbmlvbiwg
dHJhY2tSZWN0VW5pb24ub3JpZ2luLngsIHRyYWNrUmVjdFVuaW9uLm9yaWdpbi55KTsKKyAgICBD
R1NpemUgbmF0dXJhbFNpemUgPSB0cmFja1JlY3RVbmlvbi5zaXplOworCisgICAgLy8gQWxzbyBs
b29rIGF0IHRoZSBhc3NldCdzIHByZWZlcnJlZCB0cmFuc2Zvcm0gc28gd2UgYWNjb3VudCBmb3Ig
YSBtb3ZpZSBtYXRyaXguCisgICAgQ0dTaXplIG1vdmllU2l6ZSA9IENHU2l6ZUFwcGx5QWZmaW5l
VHJhbnNmb3JtKEFWQ0ZBc3NldEdldE5hdHVyYWxTaXplKGF2QXNzZXQobV9hdmZXcmFwcGVyKSks
IEFWQ0ZBc3NldEdldFByZWZlcnJlZFRyYW5zZm9ybShhdkFzc2V0KG1fYXZmV3JhcHBlcikpKTsK
KyAgICBpZiAobW92aWVTaXplLndpZHRoID4gbmF0dXJhbFNpemUud2lkdGgpCisgICAgICAgIG5h
dHVyYWxTaXplLndpZHRoID0gbW92aWVTaXplLndpZHRoOworICAgIGlmIChtb3ZpZVNpemUuaGVp
Z2h0ID4gbmF0dXJhbFNpemUuaGVpZ2h0KQorICAgICAgICBuYXR1cmFsU2l6ZS5oZWlnaHQgPSBt
b3ZpZVNpemUuaGVpZ2h0OworICAgIHNldE5hdHVyYWxTaXplKEludFNpemUobmF0dXJhbFNpemUp
KTsKK30KKwordm9pZCBNZWRpYVBsYXllclByaXZhdGVBVkZvdW5kYXRpb25DRjo6Y29udGVudHNO
ZWVkc0Rpc3BsYXkoKQoreworICAgIGlmIChtX2F2ZldyYXBwZXIpCisgICAgICAgIG1fYXZmV3Jh
cHBlci0+c2V0VmlkZW9MYXllck5lZWRzQ29tbWl0KCk7Cit9CisKK0FWRldyYXBwZXI6OkFWRldy
YXBwZXIoTWVkaWFQbGF5ZXJQcml2YXRlQVZGb3VuZGF0aW9uQ0YqIG93bmVyKQorICAgIDogbV9v
d25lcihvd25lcikKKyAgICAsIG1fb2JqZWN0SUQoc19uZXh0QVZGV3JhcHBlck9iamVjdElEKysp
Cit7CisgICAgTE9HKE1lZGlhLCAiQVZGV3JhcHBlcjo6QVZGV3JhcHBlciglcCkiLCB0aGlzKTsK
KworICAgIG1fbm90aWZpY2F0aW9uUXVldWUgPSBkaXNwYXRjaF9xdWV1ZV9jcmVhdGUoIk1lZGlh
UGxheWVyUHJpdmF0ZUFWRm91bmRhdGlvbkNGLm5vdGlmaWNhdGlvblF1ZXVlIiwgMCk7CisgICAg
YWRkVG9NYXAoKTsKK30KKworQVZGV3JhcHBlcjo6fkFWRldyYXBwZXIoKQoreworICAgIExPRyhN
ZWRpYSwgIkFWRldyYXBwZXI6On5BVkZXcmFwcGVyKCVwICVkKSIsIHRoaXMsIG1fb2JqZWN0SUQp
OworCisgICAgZGVzdHJveVZpZGVvTGF5ZXIoKTsKKyAgICBkZXN0cm95SW1hZ2VHZW5lcmF0b3Io
KTsKKworICAgIGlmIChtX25vdGlmaWNhdGlvblF1ZXVlKQorICAgICAgICBkaXNwYXRjaF9yZWxl
YXNlKG1fbm90aWZpY2F0aW9uUXVldWUpOworCisgICAgaWYgKGF2QXNzZXQoKSkgeworICAgICAg
ICBBVkNGQXNzZXRDYW5jZWxMb2FkaW5nKGF2QXNzZXQoKSk7CisgICAgICAgIG1fYXZBc3NldCA9
IDA7CisgICAgfQorCisgICAgbV9hdlBsYXllckl0ZW0gPSAwOworICAgIG1fdGltZU9ic2VydmVy
ID0gMDsKKyAgICBtX2F2UGxheWVyID0gMDsKK30KKworTXV0ZXgmIEFWRldyYXBwZXI6Om1hcExv
Y2soKQoreworICAgIHN0YXRpYyBNdXRleCBtYXBMb2NrOworICAgIHJldHVybiBtYXBMb2NrOwor
fQorCitIYXNoTWFwPHVpbnRwdHJfdCwgQVZGV3JhcHBlcio+JiBBVkZXcmFwcGVyOjptYXAoKQor
eworICAgIHN0YXRpYyBIYXNoTWFwPHVpbnRwdHJfdCwgQVZGV3JhcHBlcio+JiBtYXAgPSAqbmV3
IEhhc2hNYXA8dWludHB0cl90LCBBVkZXcmFwcGVyKj47CisgICAgcmV0dXJuIG1hcDsKK30KKwor
dm9pZCBBVkZXcmFwcGVyOjphZGRUb01hcCgpCit7CisgICAgTXV0ZXhMb2NrZXIgbG9ja2VyKG1h
cExvY2soKSk7CisgICAgCisgICAgLy8gSGFzaE1hcCBkb2Vzbid0IGxpa2UgYSBrZXkgb2YgMCwg
YW5kIGFsc28gbWFrZSBzdXJlIHdlIGFyZW4ndAorICAgIC8vIHVzaW5nIGFuIG9iamVjdCBJRCB0
aGF0J3MgYWxyZWFkeSBpbiB1c2UuCisgICAgd2hpbGUgKCFtX29iamVjdElEIHx8IChtYXAoKS5m
aW5kKG1fb2JqZWN0SUQpICE9IG1hcCgpLmVuZCgpKSkKKyAgICAgICAgbV9vYmplY3RJRCA9IHNf
bmV4dEFWRldyYXBwZXJPYmplY3RJRCsrOworICAgICAgIAorICAgIExPRyhNZWRpYSwgIkFWRldy
YXBwZXI6OmFkZFRvTWFwKCVwICVkKSIsIHRoaXMsIG1fb2JqZWN0SUQpOworCisgICAgbWFwKCku
YWRkKG1fb2JqZWN0SUQsIHRoaXMpOworfQorCit2b2lkIEFWRldyYXBwZXI6OnJlbW92ZUZyb21N
YXAoKSBjb25zdAoreworICAgIExPRyhNZWRpYSwgIkFWRldyYXBwZXI6OnJlbW92ZUZyb21NYXAo
JXAgJWQpIiwgdGhpcywgbV9vYmplY3RJRCk7CisKKyAgICBNdXRleExvY2tlciBsb2NrZXIobWFw
TG9jaygpKTsKKyAgICBtYXAoKS5yZW1vdmUobV9vYmplY3RJRCk7Cit9CisKK0FWRldyYXBwZXIq
IEFWRldyYXBwZXI6OmF2ZldyYXBwZXJGb3JDYWxsYmFja0NvbnRleHQodm9pZCogY29udGV4dCkK
K3sKKyAgICAvLyBBc3N1bWVzIGNhbGxlciBoYXMgbG9ja2VkIG1hcExvY2soKS4KKyAgICBIYXNo
TWFwPHVpbnRwdHJfdCwgQVZGV3JhcHBlcio+OjppdGVyYXRvciBpdCA9IG1hcCgpLmZpbmQocmVp
bnRlcnByZXRfY2FzdDx1aW50cHRyX3Q+KGNvbnRleHQpKTsKKyAgICBpZiAoaXQgPT0gbWFwKCku
ZW5kKCkpCisgICAgICAgIHJldHVybiAwOworCisgICAgcmV0dXJuIGl0LT5zZWNvbmQ7Cit9CisK
K3ZvaWQgQVZGV3JhcHBlcjo6c2NoZWR1bGVEaXNjb25uZWN0QW5kRGVsZXRlKCkKK3sKKyAgICAv
LyBJZ25vcmUgYW55IHN1YnNlcXVlbnQgbm90aWZpY2F0aW9ucyB3ZSBtaWdodCByZWNlaXZlIGlu
IG5vdGlmaWNhdGlvbkNhbGxiYWNrKCkuCisgICAgcmVtb3ZlRnJvbU1hcCgpOworCisgICAgZGlz
cGF0Y2hfYXN5bmNfZihkaXNwYXRjaFF1ZXVlKCksIHRoaXMsIGRpc2Nvbm5lY3RBbmREZWxldGVB
VkZXcmFwcGVyKTsKK30KKwordm9pZCBBVkZXcmFwcGVyOjpkaXNjb25uZWN0QW5kRGVsZXRlQVZG
V3JhcHBlcih2b2lkKiBjb250ZXh0KQoreworICAgIEFWRldyYXBwZXIqIGF2ZldyYXBwZXIgPSBz
dGF0aWNfY2FzdDxBVkZXcmFwcGVyKj4oY29udGV4dCk7CisKKyAgICBMT0coTWVkaWEsICJBVkZX
cmFwcGVyOjpkaXNjb25uZWN0QW5kRGVsZXRlQVZGV3JhcHBlciglcCkiLCBhdmZXcmFwcGVyKTsK
KworICAgIGlmIChhdmZXcmFwcGVyLT5hdlBsYXllckl0ZW0oKSkgeworICAgICAgICBDRk5vdGlm
aWNhdGlvbkNlbnRlclJlZiBjZW50ZXIgPSBDRk5vdGlmaWNhdGlvbkNlbnRlckdldExvY2FsQ2Vu
dGVyKCk7CisgICAgICAgIENGTm90aWZpY2F0aW9uQ2VudGVyUmVtb3ZlT2JzZXJ2ZXIoY2VudGVy
LCBhdmZXcmFwcGVyLT5jYWxsYmFja0NvbnRleHQoKSwgQVZDRlBsYXllckl0ZW1EaWRQbGF5VG9F
bmRUaW1lTm90aWZpY2F0aW9uLCBhdmZXcmFwcGVyLT5hdlBsYXllckl0ZW0oKSk7CisgICAgICAg
IENGTm90aWZpY2F0aW9uQ2VudGVyUmVtb3ZlT2JzZXJ2ZXIoY2VudGVyLCBhdmZXcmFwcGVyLT5j
YWxsYmFja0NvbnRleHQoKSwgQVZDRlBsYXllckl0ZW1TdGF0dXNDaGFuZ2VkTm90aWZpY2F0aW9u
LCBhdmZXcmFwcGVyLT5hdlBsYXllckl0ZW0oKSk7CisgICAgICAgIENGTm90aWZpY2F0aW9uQ2Vu
dGVyUmVtb3ZlT2JzZXJ2ZXIoY2VudGVyLCBhdmZXcmFwcGVyLT5jYWxsYmFja0NvbnRleHQoKSwg
QVZDRlBsYXllckl0ZW1UcmFja3NDaGFuZ2VkTm90aWZpY2F0aW9uLCBhdmZXcmFwcGVyLT5hdlBs
YXllckl0ZW0oKSk7CisgICAgICAgIENGTm90aWZpY2F0aW9uQ2VudGVyUmVtb3ZlT2JzZXJ2ZXIo
Y2VudGVyLCBhdmZXcmFwcGVyLT5jYWxsYmFja0NvbnRleHQoKSwgQVZDRlBsYXllckl0ZW1TZWVr
YWJsZVRpbWVSYW5nZXNDaGFuZ2VkTm90aWZpY2F0aW9uLCBhdmZXcmFwcGVyLT5hdlBsYXllckl0
ZW0oKSk7CisgICAgICAgIENGTm90aWZpY2F0aW9uQ2VudGVyUmVtb3ZlT2JzZXJ2ZXIoY2VudGVy
LCBhdmZXcmFwcGVyLT5jYWxsYmFja0NvbnRleHQoKSwgQVZDRlBsYXllckl0ZW1Mb2FkZWRUaW1l
UmFuZ2VzQ2hhbmdlZE5vdGlmaWNhdGlvbiwgYXZmV3JhcHBlci0+YXZQbGF5ZXJJdGVtKCkpOwor
ICAgICAgICBDRk5vdGlmaWNhdGlvbkNlbnRlclJlbW92ZU9ic2VydmVyKGNlbnRlciwgYXZmV3Jh
cHBlci0+Y2FsbGJhY2tDb250ZXh0KCksIEFWQ0ZQbGF5ZXJJdGVtSXNQbGF5YmFja0xpa2VseVRv
S2VlcFVwQ2hhbmdlZE5vdGlmaWNhdGlvbiwgYXZmV3JhcHBlci0+YXZQbGF5ZXJJdGVtKCkpOwor
ICAgICAgICBDRk5vdGlmaWNhdGlvbkNlbnRlclJlbW92ZU9ic2VydmVyKGNlbnRlciwgYXZmV3Jh
cHBlci0+Y2FsbGJhY2tDb250ZXh0KCksIEFWQ0ZQbGF5ZXJJdGVtSXNQbGF5YmFja0J1ZmZlckVt
cHR5Q2hhbmdlZE5vdGlmaWNhdGlvbiwgYXZmV3JhcHBlci0+YXZQbGF5ZXJJdGVtKCkpOworICAg
ICAgICBDRk5vdGlmaWNhdGlvbkNlbnRlclJlbW92ZU9ic2VydmVyKGNlbnRlciwgYXZmV3JhcHBl
ci0+Y2FsbGJhY2tDb250ZXh0KCksIEFWQ0ZQbGF5ZXJJdGVtSXNQbGF5YmFja0J1ZmZlckZ1bGxD
aGFuZ2VkTm90aWZpY2F0aW9uLCBhdmZXcmFwcGVyLT5hdlBsYXllckl0ZW0oKSk7CisgICAgICAg
IENGTm90aWZpY2F0aW9uQ2VudGVyUmVtb3ZlT2JzZXJ2ZXIoY2VudGVyLCBhdmZXcmFwcGVyLT5j
YWxsYmFja0NvbnRleHQoKSwgQ0FDRkNvbnRleHROZWVkc0ZsdXNoTm90aWZpY2F0aW9uKCksIDAp
OworICAgIH0KKworICAgIGlmIChhdmZXcmFwcGVyLT5hdlBsYXllcigpKSB7CisgICAgICAgIGlm
IChhdmZXcmFwcGVyLT50aW1lT2JzZXJ2ZXIoKSkKKyAgICAgICAgICAgIEFWQ0ZQbGF5ZXJSZW1v
dmVPYnNlcnZlcihhdmZXcmFwcGVyLT5hdlBsYXllcigpLCBhdmZXcmFwcGVyLT50aW1lT2JzZXJ2
ZXIoKSk7CisKKyAgICAgICAgQ0ZOb3RpZmljYXRpb25DZW50ZXJSZW1vdmVPYnNlcnZlcihDRk5v
dGlmaWNhdGlvbkNlbnRlckdldExvY2FsQ2VudGVyKCksIGF2ZldyYXBwZXItPmNhbGxiYWNrQ29u
dGV4dCgpLCBBVkNGUGxheWVyUmF0ZUNoYW5nZWROb3RpZmljYXRpb24sIGF2ZldyYXBwZXItPmF2
UGxheWVyKCkpOworICAgIH0KKworICAgIGRlbGV0ZSBhdmZXcmFwcGVyOworfQorCit2b2lkIEFW
RldyYXBwZXI6OmNyZWF0ZUFzc2V0Rm9yVVJMKGNvbnN0IFN0cmluZyYgdXJsKQoreworICAgIEFT
U0VSVCghYXZBc3NldCgpKTsKKyAgICAKKyAgICBSZXRhaW5QdHI8Q0ZVUkxSZWY+IHVybFJlZihB
ZG9wdENGLCBLVVJMKFBhcnNlZFVSTFN0cmluZywgdXJsKS5jcmVhdGVDRlVSTCgpKTsKKyAgICBB
VkNGVVJMQXNzZXRSZWYgYXNzZXRSZWYgPSBBVkNGVVJMQXNzZXRDcmVhdGVXaXRoVVJMQW5kT3B0
aW9ucyhrQ0ZBbGxvY2F0b3JEZWZhdWx0LCB1cmxSZWYuZ2V0KCksIDAsIG1fbm90aWZpY2F0aW9u
UXVldWUpOworICAgIG1fYXZBc3NldC5hZG9wdENGKGFzc2V0UmVmKTsKK30KKwordm9pZCBBVkZX
cmFwcGVyOjpjcmVhdGVQbGF5ZXIoKQoreworICAgIEFTU0VSVCghYXZQbGF5ZXIoKSAmJiBhdlBs
YXllckl0ZW0oKSk7CisKKyAgICAvLyBGSVhNRTogV2UgbmVlZCBhIHdheSB0byBjcmVhdGUgYSBB
VlBsYXllciB3aXRob3V0IGFuIEFWUGxheWVySXRlbSwgc2VlIDxyZGFyOi8vcHJvYmxlbS85ODc3
NzMwPi4KKyAgICBBVkNGUGxheWVyUmVmIHBsYXllclJlZiA9IEFWQ0ZQbGF5ZXJDcmVhdGVXaXRo
UGxheWVySXRlbUFuZE9wdGlvbnMoa0NGQWxsb2NhdG9yRGVmYXVsdCwgYXZQbGF5ZXJJdGVtKCks
IDAsIG1fbm90aWZpY2F0aW9uUXVldWUpOworICAgIG1fYXZQbGF5ZXIuYWRvcHRDRihwbGF5ZXJS
ZWYpOworCisgICAgQ0ZOb3RpZmljYXRpb25DZW50ZXJSZWYgY2VudGVyID0gQ0ZOb3RpZmljYXRp
b25DZW50ZXJHZXRMb2NhbENlbnRlcigpOworICAgIEFTU0VSVChjZW50ZXIpOworCisgICAgQ0ZO
b3RpZmljYXRpb25DZW50ZXJBZGRPYnNlcnZlcihjZW50ZXIsIGNhbGxiYWNrQ29udGV4dCgpLCBu
b3RpZmljYXRpb25DYWxsYmFjaywgQVZDRlBsYXllclJhdGVDaGFuZ2VkTm90aWZpY2F0aW9uLCBw
bGF5ZXJSZWYsIENGTm90aWZpY2F0aW9uU3VzcGVuc2lvbkJlaGF2aW9yRGVsaXZlckltbWVkaWF0
ZWx5KTsKKworICAgIC8vIEFkZCBhIHRpbWUgb2JzZXJ2ZXIsIGFzayB0byBiZSBjYWxsZWQgaW5m
cmVxdWVudGx5IGJlY2F1c2Ugd2UgZG9uJ3QgcmVhbGx5IHdhbnQgcGVyaW9kaWMgY2FsbGJhY2tz
IGJ1dAorICAgIC8vIG91ciBvYnNlcnZlciB3aWxsIGFsc28gYmUgY2FsbGVkIHdoZW5ldmVyIGEg
c2VlayBoYXBwZW5zLgorICAgIGNvbnN0IGRvdWJsZSB2ZXJ5TG9uZ0ludGVydmFsID0gNjAqNjAq
NjAqMjQqMzA7CisgICAgbV90aW1lT2JzZXJ2ZXIuYWRvcHRDRihBVkNGUGxheWVyQ3JlYXRlUGVy
aW9kaWNUaW1lT2JzZXJ2ZXJGb3JJbnRlcnZhbChwbGF5ZXJSZWYsIENNVGltZU1ha2UodmVyeUxv
bmdJbnRlcnZhbCwgMTApLCBtX25vdGlmaWNhdGlvblF1ZXVlLCAmcGVyaW9kaWNUaW1lT2JzZXJ2
ZXJDYWxsYmFjaywgY2FsbGJhY2tDb250ZXh0KCkpKTsKK30KKwordm9pZCBBVkZXcmFwcGVyOjpj
cmVhdGVQbGF5ZXJJdGVtKCkKK3sKKyAgICBBU1NFUlQoIWF2UGxheWVySXRlbSgpICYmIGF2QXNz
ZXQoKSk7CisKKyAgICAvLyBDcmVhdGUgdGhlIHBsYXllciBpdGVtIHNvIHdlIGJlZ2luIGxvYWRp
bmcgbWVkaWEgZGF0YS4KKyAgICBBVkNGUGxheWVySXRlbVJlZiBpdGVtUmVmID0gQVZDRlBsYXll
ckl0ZW1DcmVhdGVXaXRoQXNzZXQoa0NGQWxsb2NhdG9yRGVmYXVsdCwgYXZBc3NldCgpLCBtX25v
dGlmaWNhdGlvblF1ZXVlKTsKKyAgICBtX2F2UGxheWVySXRlbS5hZG9wdENGKGl0ZW1SZWYpOwor
CisgICAgQ0ZOb3RpZmljYXRpb25DZW50ZXJSZWYgY2VudGVyID0gQ0ZOb3RpZmljYXRpb25DZW50
ZXJHZXRMb2NhbENlbnRlcigpOworICAgIEFTU0VSVChjZW50ZXIpOworCisgICAgQ0ZOb3RpZmlj
YXRpb25DZW50ZXJBZGRPYnNlcnZlcihjZW50ZXIsIGNhbGxiYWNrQ29udGV4dCgpLCBub3RpZmlj
YXRpb25DYWxsYmFjaywgQVZDRlBsYXllckl0ZW1EaWRQbGF5VG9FbmRUaW1lTm90aWZpY2F0aW9u
LCBpdGVtUmVmLCBDRk5vdGlmaWNhdGlvblN1c3BlbnNpb25CZWhhdmlvckRlbGl2ZXJJbW1lZGlh
dGVseSk7CisgICAgQ0ZOb3RpZmljYXRpb25DZW50ZXJBZGRPYnNlcnZlcihjZW50ZXIsIGNhbGxi
YWNrQ29udGV4dCgpLCBub3RpZmljYXRpb25DYWxsYmFjaywgQVZDRlBsYXllckl0ZW1TdGF0dXND
aGFuZ2VkTm90aWZpY2F0aW9uLCBpdGVtUmVmLCBDRk5vdGlmaWNhdGlvblN1c3BlbnNpb25CZWhh
dmlvckRlbGl2ZXJJbW1lZGlhdGVseSk7CisgICAgQ0ZOb3RpZmljYXRpb25DZW50ZXJBZGRPYnNl
cnZlcihjZW50ZXIsIGNhbGxiYWNrQ29udGV4dCgpLCBub3RpZmljYXRpb25DYWxsYmFjaywgQVZD
RlBsYXllckl0ZW1UcmFja3NDaGFuZ2VkTm90aWZpY2F0aW9uLCBpdGVtUmVmLCBDRk5vdGlmaWNh
dGlvblN1c3BlbnNpb25CZWhhdmlvckRlbGl2ZXJJbW1lZGlhdGVseSk7CisgICAgQ0ZOb3RpZmlj
YXRpb25DZW50ZXJBZGRPYnNlcnZlcihjZW50ZXIsIGNhbGxiYWNrQ29udGV4dCgpLCBub3RpZmlj
YXRpb25DYWxsYmFjaywgQVZDRlBsYXllckl0ZW1TZWVrYWJsZVRpbWVSYW5nZXNDaGFuZ2VkTm90
aWZpY2F0aW9uLCBpdGVtUmVmLCBDRk5vdGlmaWNhdGlvblN1c3BlbnNpb25CZWhhdmlvckRlbGl2
ZXJJbW1lZGlhdGVseSk7CisgICAgQ0ZOb3RpZmljYXRpb25DZW50ZXJBZGRPYnNlcnZlcihjZW50
ZXIsIGNhbGxiYWNrQ29udGV4dCgpLCBub3RpZmljYXRpb25DYWxsYmFjaywgQVZDRlBsYXllckl0
ZW1Mb2FkZWRUaW1lUmFuZ2VzQ2hhbmdlZE5vdGlmaWNhdGlvbiwgaXRlbVJlZiwgQ0ZOb3RpZmlj
YXRpb25TdXNwZW5zaW9uQmVoYXZpb3JEZWxpdmVySW1tZWRpYXRlbHkpOworICAgIENGTm90aWZp
Y2F0aW9uQ2VudGVyQWRkT2JzZXJ2ZXIoY2VudGVyLCBjYWxsYmFja0NvbnRleHQoKSwgbm90aWZp
Y2F0aW9uQ2FsbGJhY2ssIEFWQ0ZQbGF5ZXJJdGVtSXNQbGF5YmFja0xpa2VseVRvS2VlcFVwQ2hh
bmdlZE5vdGlmaWNhdGlvbiwgaXRlbVJlZiwgQ0ZOb3RpZmljYXRpb25TdXNwZW5zaW9uQmVoYXZp
b3JEZWxpdmVySW1tZWRpYXRlbHkpOworICAgIENGTm90aWZpY2F0aW9uQ2VudGVyQWRkT2JzZXJ2
ZXIoY2VudGVyLCBjYWxsYmFja0NvbnRleHQoKSwgbm90aWZpY2F0aW9uQ2FsbGJhY2ssIEFWQ0ZQ
bGF5ZXJJdGVtSXNQbGF5YmFja0J1ZmZlckVtcHR5Q2hhbmdlZE5vdGlmaWNhdGlvbiwgaXRlbVJl
ZiwgQ0ZOb3RpZmljYXRpb25TdXNwZW5zaW9uQmVoYXZpb3JEZWxpdmVySW1tZWRpYXRlbHkpOwor
ICAgIENGTm90aWZpY2F0aW9uQ2VudGVyQWRkT2JzZXJ2ZXIoY2VudGVyLCBjYWxsYmFja0NvbnRl
eHQoKSwgbm90aWZpY2F0aW9uQ2FsbGJhY2ssIEFWQ0ZQbGF5ZXJJdGVtSXNQbGF5YmFja0J1ZmZl
ckZ1bGxDaGFuZ2VkTm90aWZpY2F0aW9uLCBpdGVtUmVmLCBDRk5vdGlmaWNhdGlvblN1c3BlbnNp
b25CZWhhdmlvckRlbGl2ZXJJbW1lZGlhdGVseSk7CisKKyAgICBDRk5vdGlmaWNhdGlvbkNlbnRl
ckFkZE9ic2VydmVyKGNlbnRlciwgY2FsbGJhY2tDb250ZXh0KCksIG5vdGlmaWNhdGlvbkNhbGxi
YWNrLCBDQUNGQ29udGV4dE5lZWRzRmx1c2hOb3RpZmljYXRpb24oKSwgMCwgQ0ZOb3RpZmljYXRp
b25TdXNwZW5zaW9uQmVoYXZpb3JEZWxpdmVySW1tZWRpYXRlbHkpOworfQorCit2b2lkIEFWRldy
YXBwZXI6OnBlcmlvZGljVGltZU9ic2VydmVyQ2FsbGJhY2soQVZDRlBsYXllclJlZiwgQ01UaW1l
IGNtVGltZSwgdm9pZCogY29udGV4dCkKK3sKKyAgICBNdXRleExvY2tlciBsb2NrZXIobWFwTG9j
aygpKTsKKyAgICBBVkZXcmFwcGVyKiBzZWxmID0gYXZmV3JhcHBlckZvckNhbGxiYWNrQ29udGV4
dChjb250ZXh0KTsKKyAgICBpZiAoIXNlbGYpIHsKKyAgICAgICAgTE9HKE1lZGlhLCAiQVZGV3Jh
cHBlcjo6cGVyaW9kaWNUaW1lT2JzZXJ2ZXJDYWxsYmFjayBpbnZva2VkIGZvciBkZWxldGVkIEFW
RldyYXBwZXIgJWQiLCByZWludGVycHJldF9jYXN0PHVpbnRwdHJfdD4oY29udGV4dCkpOworICAg
ICAgICByZXR1cm47CisgICAgfQorCisgICAgZG91YmxlIHRpbWUgPSBzdGQ6Om1heCgwLjAsIENN
VGltZUdldFNlY29uZHMoY21UaW1lKSk7IC8vIENsYW1wIHRvIHplcm8sIG5lZ2F0aXZlIHZhbHVl
cyBhcmUgc29tZXRpbWVzIHJlcG9ydGVkLgorICAgIHNlbGYtPm1fb3duZXItPnNjaGVkdWxlTWFp
blRocmVhZE5vdGlmaWNhdGlvbihNZWRpYVBsYXllclByaXZhdGVBVkZvdW5kYXRpb246Ok5vdGlm
aWNhdGlvbjo6UGxheWVyVGltZUNoYW5nZWQsIHRpbWUpOworfQorCit2b2lkIEFWRldyYXBwZXI6
Om5vdGlmaWNhdGlvbkNhbGxiYWNrKENGTm90aWZpY2F0aW9uQ2VudGVyUmVmLCB2b2lkKiBvYnNl
cnZlciwgQ0ZTdHJpbmdSZWYgcHJvcGVydHlOYW1lLCBjb25zdCB2b2lkKiBvYmplY3QsIENGRGlj
dGlvbmFyeVJlZikKK3sKKyAgICBNdXRleExvY2tlciBsb2NrZXIobWFwTG9jaygpKTsKKyAgICBB
VkZXcmFwcGVyKiBzZWxmID0gYXZmV3JhcHBlckZvckNhbGxiYWNrQ29udGV4dChvYnNlcnZlcik7
CisgICAgCisgICAgaWYgKCFzZWxmKSB7CisgICAgICAgIExPRyhNZWRpYSwgIkFWRldyYXBwZXI6
Om5vdGlmaWNhdGlvbkNhbGxiYWNrIGludm9rZWQgZm9yIGRlbGV0ZWQgQVZGV3JhcHBlciAlZCIs
IHJlaW50ZXJwcmV0X2Nhc3Q8dWludHB0cl90PihvYnNlcnZlcikpOworICAgICAgICByZXR1cm47
CisgICAgfQorCisjaWYgIUxPR19ESVNBQkxFRAorICAgIGNoYXIgbm90aWZpY2F0aW9uTmFtZVsy
NTZdOworICAgIENGU3RyaW5nR2V0Q1N0cmluZyhwcm9wZXJ0eU5hbWUsIG5vdGlmaWNhdGlvbk5h
bWUsIHNpemVvZihub3RpZmljYXRpb25OYW1lKSwga0NGU3RyaW5nRW5jb2RpbmdBU0NJSSk7Cisg
ICAgTE9HKE1lZGlhLCAiQVZGV3JhcHBlcjo6bm90aWZpY2F0aW9uQ2FsbGJhY2soJXApICVzIiwg
c2VsZiwgbm90aWZpY2F0aW9uTmFtZSk7CisjZW5kaWYKKworICAgIGlmIChDRkVxdWFsKHByb3Bl
cnR5TmFtZSwgQVZDRlBsYXllckl0ZW1EaWRQbGF5VG9FbmRUaW1lTm90aWZpY2F0aW9uKSkKKyAg
ICAgICAgc2VsZi0+bV9vd25lci0+c2NoZWR1bGVNYWluVGhyZWFkTm90aWZpY2F0aW9uKE1lZGlh
UGxheWVyUHJpdmF0ZUFWRm91bmRhdGlvbjo6Tm90aWZpY2F0aW9uOjpJdGVtRGlkUGxheVRvRW5k
VGltZSk7CisgICAgZWxzZSBpZiAoQ0ZFcXVhbChwcm9wZXJ0eU5hbWUsIEFWQ0ZQbGF5ZXJJdGVt
VHJhY2tzQ2hhbmdlZE5vdGlmaWNhdGlvbikpCisgICAgICAgIHNlbGYtPm1fb3duZXItPnNjaGVk
dWxlTWFpblRocmVhZE5vdGlmaWNhdGlvbihNZWRpYVBsYXllclByaXZhdGVBVkZvdW5kYXRpb246
Ok5vdGlmaWNhdGlvbjo6SXRlbVRyYWNrc0NoYW5nZWQpOworICAgIGVsc2UgaWYgKENGRXF1YWwo
cHJvcGVydHlOYW1lLCBBVkNGUGxheWVySXRlbVN0YXR1c0NoYW5nZWROb3RpZmljYXRpb24pKSB7
CisgICAgICAgIEFWQ0ZVUkxBc3NldFJlZiBhc3NldCA9IEFWQ0ZQbGF5ZXJJdGVtR2V0QXNzZXQo
c2VsZi0+YXZQbGF5ZXJJdGVtKCkpOworICAgICAgICBpZiAoYXNzZXQpCisgICAgICAgICAgICBz
ZWxmLT5zZXRBc3NldChhc3NldCk7CisgICAgICAgIHNlbGYtPm1fb3duZXItPnNjaGVkdWxlTWFp
blRocmVhZE5vdGlmaWNhdGlvbihNZWRpYVBsYXllclByaXZhdGVBVkZvdW5kYXRpb246Ok5vdGlm
aWNhdGlvbjo6SXRlbVN0YXR1c0NoYW5nZWQpOworICAgIH0gZWxzZSBpZiAoQ0ZFcXVhbChwcm9w
ZXJ0eU5hbWUsIEFWQ0ZQbGF5ZXJJdGVtU2Vla2FibGVUaW1lUmFuZ2VzQ2hhbmdlZE5vdGlmaWNh
dGlvbikpCisgICAgICAgIHNlbGYtPm1fb3duZXItPnNjaGVkdWxlTWFpblRocmVhZE5vdGlmaWNh
dGlvbihNZWRpYVBsYXllclByaXZhdGVBVkZvdW5kYXRpb246Ok5vdGlmaWNhdGlvbjo6SXRlbVNl
ZWthYmxlVGltZVJhbmdlc0NoYW5nZWQpOworICAgIGVsc2UgaWYgKENGRXF1YWwocHJvcGVydHlO
YW1lLCBBVkNGUGxheWVySXRlbUxvYWRlZFRpbWVSYW5nZXNDaGFuZ2VkTm90aWZpY2F0aW9uKSkK
KyAgICAgICAgc2VsZi0+bV9vd25lci0+c2NoZWR1bGVNYWluVGhyZWFkTm90aWZpY2F0aW9uKE1l
ZGlhUGxheWVyUHJpdmF0ZUFWRm91bmRhdGlvbjo6Tm90aWZpY2F0aW9uOjpJdGVtTG9hZGVkVGlt
ZVJhbmdlc0NoYW5nZWQpOworICAgIGVsc2UgaWYgKENGRXF1YWwocHJvcGVydHlOYW1lLCBBVkNG
UGxheWVySXRlbVByZXNlbnRhdGlvblNpemVDaGFuZ2VkTm90aWZpY2F0aW9uKSkKKyAgICAgICAg
c2VsZi0+bV9vd25lci0+c2NoZWR1bGVNYWluVGhyZWFkTm90aWZpY2F0aW9uKE1lZGlhUGxheWVy
UHJpdmF0ZUFWRm91bmRhdGlvbjo6Tm90aWZpY2F0aW9uOjpJdGVtUHJlc2VudGF0aW9uU2l6ZUNo
YW5nZWQpOworICAgIGVsc2UgaWYgKENGRXF1YWwocHJvcGVydHlOYW1lLCBBVkNGUGxheWVySXRl
bUlzUGxheWJhY2tMaWtlbHlUb0tlZXBVcENoYW5nZWROb3RpZmljYXRpb24pKQorICAgICAgICBz
ZWxmLT5tX293bmVyLT5zY2hlZHVsZU1haW5UaHJlYWROb3RpZmljYXRpb24oTWVkaWFQbGF5ZXJQ
cml2YXRlQVZGb3VuZGF0aW9uOjpOb3RpZmljYXRpb246Okl0ZW1Jc1BsYXliYWNrTGlrZWx5VG9L
ZWVwVXBDaGFuZ2VkKTsKKyAgICBlbHNlIGlmIChDRkVxdWFsKHByb3BlcnR5TmFtZSwgQVZDRlBs
YXllckl0ZW1Jc1BsYXliYWNrQnVmZmVyRW1wdHlDaGFuZ2VkTm90aWZpY2F0aW9uKSkKKyAgICAg
ICAgc2VsZi0+bV9vd25lci0+c2NoZWR1bGVNYWluVGhyZWFkTm90aWZpY2F0aW9uKE1lZGlhUGxh
eWVyUHJpdmF0ZUFWRm91bmRhdGlvbjo6Tm90aWZpY2F0aW9uOjpJdGVtSXNQbGF5YmFja0J1ZmZl
ckVtcHR5Q2hhbmdlZCk7CisgICAgZWxzZSBpZiAoQ0ZFcXVhbChwcm9wZXJ0eU5hbWUsIEFWQ0ZQ
bGF5ZXJJdGVtSXNQbGF5YmFja0J1ZmZlckZ1bGxDaGFuZ2VkTm90aWZpY2F0aW9uKSkKKyAgICAg
ICAgc2VsZi0+bV9vd25lci0+c2NoZWR1bGVNYWluVGhyZWFkTm90aWZpY2F0aW9uKE1lZGlhUGxh
eWVyUHJpdmF0ZUFWRm91bmRhdGlvbjo6Tm90aWZpY2F0aW9uOjpJdGVtSXNQbGF5YmFja0J1ZmZl
ckZ1bGxDaGFuZ2VkKTsKKyAgICBlbHNlIGlmIChDRkVxdWFsKHByb3BlcnR5TmFtZSwgQVZDRlBs
YXllclJhdGVDaGFuZ2VkTm90aWZpY2F0aW9uKSkKKyAgICAgICAgc2VsZi0+bV9vd25lci0+c2No
ZWR1bGVNYWluVGhyZWFkTm90aWZpY2F0aW9uKE1lZGlhUGxheWVyUHJpdmF0ZUFWRm91bmRhdGlv
bjo6Tm90aWZpY2F0aW9uOjpQbGF5ZXJSYXRlQ2hhbmdlZCk7CisgICAgZWxzZSBpZiAoQ0ZFcXVh
bChwcm9wZXJ0eU5hbWUsIENBQ0ZDb250ZXh0TmVlZHNGbHVzaE5vdGlmaWNhdGlvbigpKSkKKyAg
ICAgICAgc2VsZi0+bV9vd25lci0+c2NoZWR1bGVNYWluVGhyZWFkTm90aWZpY2F0aW9uKE1lZGlh
UGxheWVyUHJpdmF0ZUFWRm91bmRhdGlvbjo6Tm90aWZpY2F0aW9uOjpDb250ZW50c05lZWRzRGlz
cGxheSk7CisgICAgZWxzZQorICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKK30KKwordm9p
ZCBBVkZXcmFwcGVyOjpsb2FkUGxheWFibGVDb21wbGV0aW9uQ2FsbGJhY2soQVZDRkFzc2V0UmVm
LCB2b2lkKiBjb250ZXh0KQoreworICAgIE11dGV4TG9ja2VyIGxvY2tlcihtYXBMb2NrKCkpOwor
ICAgIEFWRldyYXBwZXIqIHNlbGYgPSBhdmZXcmFwcGVyRm9yQ2FsbGJhY2tDb250ZXh0KGNvbnRl
eHQpOworICAgIGlmICghc2VsZikgeworICAgICAgICBMT0coTWVkaWEsICJBVkZXcmFwcGVyOjps
b2FkUGxheWFibGVDb21wbGV0aW9uQ2FsbGJhY2sgaW52b2tlZCBmb3IgZGVsZXRlZCBBVkZXcmFw
cGVyICVkIiwgcmVpbnRlcnByZXRfY2FzdDx1aW50cHRyX3Q+KGNvbnRleHQpKTsKKyAgICAgICAg
cmV0dXJuOworICAgIH0KKworICAgIExPRyhNZWRpYSwgIkFWRldyYXBwZXI6OmxvYWRQbGF5YWJs
ZUNvbXBsZXRpb25DYWxsYmFjayglcCkiLCBzZWxmKTsKKyAgICBzZWxmLT5tX293bmVyLT5zY2hl
ZHVsZU1haW5UaHJlYWROb3RpZmljYXRpb24oTWVkaWFQbGF5ZXJQcml2YXRlQVZGb3VuZGF0aW9u
OjpOb3RpZmljYXRpb246OkFzc2V0UGxheWFiaWxpdHlLbm93bik7Cit9CisKK3ZvaWQgQVZGV3Jh
cHBlcjo6Y2hlY2tQbGF5YWJpbGl0eSgpCit7CisgICAgTE9HKE1lZGlhLCAiQVZGV3JhcHBlcjo6
Y2hlY2tQbGF5YWJpbGl0eSglcCkiLCB0aGlzKTsKKworICAgIHN0YXRpYyBDRkFycmF5UmVmIHBy
b3BlcnR5S2V5TmFtZTsKKyAgICBpZiAoIXByb3BlcnR5S2V5TmFtZSkgeworICAgICAgICBzdGF0
aWMgY29uc3QgQ0ZTdHJpbmdSZWYga2V5TmFtZXNbXSA9IHsgCisgICAgICAgICAgICBBVkNGQXNz
ZXRQcm9wZXJ0eVBsYXlhYmxlCisgICAgICAgIH07CisgICAgICAgIHByb3BlcnR5S2V5TmFtZSA9
IENGQXJyYXlDcmVhdGUoMCwgKGNvbnN0IHZvaWQqKilrZXlOYW1lcywgc2l6ZW9mKGtleU5hbWVz
KSAvIHNpemVvZihrZXlOYW1lc1swXSksICZrQ0ZUeXBlQXJyYXlDYWxsQmFja3MpOworICAgIH0K
KworICAgIEFWQ0ZBc3NldExvYWRWYWx1ZXNBc3luY2hyb25vdXNseUZvclByb3BlcnRpZXMoYXZB
c3NldCgpLCBwcm9wZXJ0eUtleU5hbWUsIGxvYWRQbGF5YWJsZUNvbXBsZXRpb25DYWxsYmFjaywg
Y2FsbGJhY2tDb250ZXh0KCkpOworfQorCit2b2lkIEFWRldyYXBwZXI6OmxvYWRNZXRhZGF0YUNv
bXBsZXRpb25DYWxsYmFjayhBVkNGQXNzZXRSZWYsIHZvaWQqIGNvbnRleHQpCit7CisgICAgTXV0
ZXhMb2NrZXIgbG9ja2VyKG1hcExvY2soKSk7CisgICAgQVZGV3JhcHBlciogc2VsZiA9IGF2Zldy
YXBwZXJGb3JDYWxsYmFja0NvbnRleHQoY29udGV4dCk7CisgICAgaWYgKCFzZWxmKSB7CisgICAg
ICAgIExPRyhNZWRpYSwgIkFWRldyYXBwZXI6OmxvYWRNZXRhZGF0YUNvbXBsZXRpb25DYWxsYmFj
ayBpbnZva2VkIGZvciBkZWxldGVkIEFWRldyYXBwZXIgJWQiLCByZWludGVycHJldF9jYXN0PHVp
bnRwdHJfdD4oY29udGV4dCkpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgTE9HKE1l
ZGlhLCAiQVZGV3JhcHBlcjo6bG9hZE1ldGFkYXRhQ29tcGxldGlvbkNhbGxiYWNrKCVwKSIsIHNl
bGYpOworICAgIHNlbGYtPm1fb3duZXItPnNjaGVkdWxlTWFpblRocmVhZE5vdGlmaWNhdGlvbihN
ZWRpYVBsYXllclByaXZhdGVBVkZvdW5kYXRpb246Ok5vdGlmaWNhdGlvbjo6QXNzZXRNZXRhZGF0
YUxvYWRlZCk7Cit9CisKK3ZvaWQgQVZGV3JhcHBlcjo6YmVnaW5Mb2FkaW5nTWV0YWRhdGEoKQor
eworICAgIEFTU0VSVChhdkFzc2V0KCkpOworICAgIExPRyhNZWRpYSwgIkFWRldyYXBwZXI6OmJl
Z2luTG9hZGluZ01ldGFkYXRhKCVwKSAtIHJlcXVlc3RpbmcgbWV0YWRhdGEgbG9hZGluZyIsIHRo
aXMpOworICAgIEFWQ0ZBc3NldExvYWRWYWx1ZXNBc3luY2hyb25vdXNseUZvclByb3BlcnRpZXMo
YXZBc3NldCgpLCBtZXRhZGF0YUtleU5hbWVzKCksIGxvYWRNZXRhZGF0YUNvbXBsZXRpb25DYWxs
YmFjaywgY2FsbGJhY2tDb250ZXh0KCkpOworfQorCit2b2lkIEFWRldyYXBwZXI6OnNlZWtDb21w
bGV0ZWRDYWxsYmFjayhBVkNGUGxheWVySXRlbVJlZiwgQm9vbGVhbiBmaW5pc2hlZCwgdm9pZCog
Y29udGV4dCkKK3sKKyAgICBNdXRleExvY2tlciBsb2NrZXIobWFwTG9jaygpKTsKKyAgICBBVkZX
cmFwcGVyKiBzZWxmID0gYXZmV3JhcHBlckZvckNhbGxiYWNrQ29udGV4dChjb250ZXh0KTsKKyAg
ICBpZiAoIXNlbGYpIHsKKyAgICAgICAgTE9HKE1lZGlhLCAiQVZGV3JhcHBlcjo6c2Vla0NvbXBs
ZXRlZENhbGxiYWNrIGludm9rZWQgZm9yIGRlbGV0ZWQgQVZGV3JhcHBlciAlZCIsIHJlaW50ZXJw
cmV0X2Nhc3Q8dWludHB0cl90Pihjb250ZXh0KSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisK
KyAgICBMT0coTWVkaWEsICJBVkZXcmFwcGVyOjpzZWVrQ29tcGxldGVkQ2FsbGJhY2soJXApIiwg
c2VsZik7CisgICAgc2VsZi0+bV9vd25lci0+c2NoZWR1bGVNYWluVGhyZWFkTm90aWZpY2F0aW9u
KE1lZGlhUGxheWVyUHJpdmF0ZUFWRm91bmRhdGlvbjo6Tm90aWZpY2F0aW9uOjpTZWVrQ29tcGxl
dGVkLCBzdGF0aWNfY2FzdDxib29sPihmaW5pc2hlZCkpOworfQorCit2b2lkIEFWRldyYXBwZXI6
OnNlZWtUb1RpbWUoZmxvYXQgdGltZSkKK3sKKyAgICBBU1NFUlQoYXZQbGF5ZXJJdGVtKCkpOwor
ICAgIEFWQ0ZQbGF5ZXJJdGVtU2Vla1RvVGltZVdpdGhUb2xlcmFuY2VBbmRDb21wbGV0aW9uQ2Fs
bGJhY2soYXZQbGF5ZXJJdGVtKCksIENNVGltZU1ha2VXaXRoU2Vjb25kcyh0aW1lLCA2MDApLAor
ICAgICAgICBrQ01UaW1lWmVybywga0NNVGltZVplcm8sICZzZWVrQ29tcGxldGVkQ2FsbGJhY2ss
IGNhbGxiYWNrQ29udGV4dCgpKTsKK30KKwordm9pZCBBVkZXcmFwcGVyOjpzZXRBc3NldChBVkNG
VVJMQXNzZXRSZWYgYXNzZXQpCit7CisgICAgaWYgKGFzc2V0ID09IGF2QXNzZXQoKSkKKyAgICAg
ICAgcmV0dXJuOworCisgICAgQVZDRkFzc2V0Q2FuY2VsTG9hZGluZyhhdkFzc2V0KCkpOworICAg
IG1fYXZBc3NldC5hZG9wdENGKGFzc2V0KTsKK30KKworUGxhdGZvcm1MYXllciogQVZGV3JhcHBl
cjo6cGxhdGZvcm1MYXllcigpCit7CisgICAgaWYgKG1fdmlkZW9MYXllcldyYXBwZXIpCisgICAg
ICAgIHJldHVybiBtX3ZpZGVvTGF5ZXJXcmFwcGVyLT5wbGF0Zm9ybUxheWVyKCk7CisKKyAgICBp
ZiAoIXZpZGVvTGF5ZXIoKSkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICAvLyBDcmVhdGUgYSBQ
bGF0Zm9ybUNBTGF5ZXIgc28gd2UgY2FuIHJlc2l6ZSB0aGUgdmlkZW8gbGF5ZXIgdG8gbWF0Y2gg
dGhlIGVsZW1lbnQgc2l6ZS4KKyAgICBtX2xheWVyQ2xpZW50ID0gYWRvcHRQdHIobmV3IExheWVy
Q2xpZW50KHRoaXMpKTsKKyAgICBpZiAoIW1fbGF5ZXJDbGllbnQpCisgICAgICAgIHJldHVybiAw
OworCisgICAgbV92aWRlb0xheWVyV3JhcHBlciA9IFBsYXRmb3JtQ0FMYXllcjo6Y3JlYXRlKFBs
YXRmb3JtQ0FMYXllcjo6TGF5ZXJUeXBlTGF5ZXIsIG1fbGF5ZXJDbGllbnQuZ2V0KCkpOworICAg
IGlmICghbV92aWRlb0xheWVyV3JhcHBlcikKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICBDQUNG
TGF5ZXJSZWYgbGF5ZXJSZWYgPSBBVkNGUGxheWVyTGF5ZXJDb3B5Q0FDRkxheWVyKG1fYXZDRlZp
ZGVvTGF5ZXIuZ2V0KCkpOworICAgIG1fY2FWaWRlb0xheWVyLmFkb3B0Q0YobGF5ZXJSZWYpOwor
CisgICAgQ0FDRkxheWVySW5zZXJ0U3VibGF5ZXIobV92aWRlb0xheWVyV3JhcHBlci0+cGxhdGZv
cm1MYXllcigpLCBtX2NhVmlkZW9MYXllci5nZXQoKSwgMCk7CisgICAgbV92aWRlb0xheWVyV3Jh
cHBlci0+c2V0QW5jaG9yUG9pbnQoRmxvYXRQb2ludDNEKCkpOworICAgIG1fdmlkZW9MYXllcldy
YXBwZXItPnNldE5lZWRzTGF5b3V0KCk7CisKKyAgICByZXR1cm4gbV92aWRlb0xheWVyV3JhcHBl
ci0+cGxhdGZvcm1MYXllcigpOworfQorCit2b2lkIEFWRldyYXBwZXI6OmNyZWF0ZUFWQ0ZWaWRl
b0xheWVyKCkKK3sKKyAgICBpZiAoIWF2UGxheWVyKCkgfHwgbV9hdkNGVmlkZW9MYXllcikKKyAg
ICAgICAgcmV0dXJuOworCisgICAgLy8gVGhlIGxheWVyIHdpbGwgZ2V0IGhvb2tlZCB1cCB2aWEg
UmVuZGVyTGF5ZXJCYWNraW5nOjp1cGRhdGVHcmFwaGljc0xheWVyQ29uZmlndXJhdGlvbigpLgor
ICAgIG1fYXZDRlZpZGVvTGF5ZXIuYWRvcHRDRihBVkNGUGxheWVyTGF5ZXJDcmVhdGVXaXRoQVZD
RlBsYXllcihrQ0ZBbGxvY2F0b3JEZWZhdWx0LCBhdlBsYXllcigpLCBtX25vdGlmaWNhdGlvblF1
ZXVlKSk7CisgICAgTE9HKE1lZGlhLCAiQVZGV3JhcHBlcjo6Y3JlYXRlQVZDRlZpZGVvTGF5ZXIo
JXApIC0gcmV0dXJuaW5nICVwIiwgdGhpcywgdmlkZW9MYXllcigpKTsKK30KKwordm9pZCBBVkZX
cmFwcGVyOjpkZXN0cm95VmlkZW9MYXllcigpCit7CisgICAgTE9HKE1lZGlhLCAiQVZGV3JhcHBl
cjo6ZGVzdHJveVZpZGVvTGF5ZXIoJXApIiwgdGhpcyk7CisgICAgbV9sYXllckNsaWVudCA9IG51
bGxwdHI7CisgICAgbV9jYVZpZGVvTGF5ZXIgPSAwOworICAgIG1fdmlkZW9MYXllcldyYXBwZXIg
PSAwOworICAgIGlmICghbV9hdkNGVmlkZW9MYXllci5nZXQoKSkKKyAgICAgICAgcmV0dXJuOwor
CisgICAgQVZDRlBsYXllckxheWVyU2V0UGxheWVyKChBVkNGUGxheWVyTGF5ZXJSZWYpbV9hdkNG
VmlkZW9MYXllci5nZXQoKSwgMCk7CisgICAgbV9hdkNGVmlkZW9MYXllciA9IDA7Cit9CisKK3Zv
aWQgQVZGV3JhcHBlcjo6c2V0VmlkZW9MYXllck5lZWRzQ29tbWl0KCkKK3sKKyAgICBpZiAobV92
aWRlb0xheWVyV3JhcHBlcikKKyAgICAgICAgbV92aWRlb0xheWVyV3JhcHBlci0+c2V0TmVlZHND
b21taXQoKTsKK30KKwordm9pZCBBVkZXcmFwcGVyOjpzZXRWaWRlb0xheWVySGlkZGVuKGJvb2wg
dmFsdWUpCit7CisgICAgaWYgKG1fdmlkZW9MYXllcldyYXBwZXIpCisgICAgICAgIG1fdmlkZW9M
YXllcldyYXBwZXItPnNldEhpZGRlbih2YWx1ZSk7Cit9CisKK3ZvaWQgQVZGV3JhcHBlcjo6Y3Jl
YXRlSW1hZ2VHZW5lcmF0b3IoKQoreworICAgIGlmICghYXZBc3NldCgpIHx8IG1faW1hZ2VHZW5l
cmF0b3IpCisgICAgICAgIHJldHVybjsKKworICAgIG1faW1hZ2VHZW5lcmF0b3IuYWRvcHRDRihB
VkNGQXNzZXRJbWFnZUdlbmVyYXRvckNyZWF0ZVdpdGhBc3NldChrQ0ZBbGxvY2F0b3JEZWZhdWx0
LCBhdkFzc2V0KCkpKTsKKworICAgIEFWQ0ZBc3NldEltYWdlR2VuZXJhdG9yU2V0QXBlcnR1cmVN
b2RlKG1faW1hZ2VHZW5lcmF0b3IuZ2V0KCksIEFWQ0ZBc3NldEltYWdlR2VuZXJhdG9yQXBlcnR1
cmVNb2RlQ2xlYW5BcGVydHVyZSk7CisgICAgQVZDRkFzc2V0SW1hZ2VHZW5lcmF0b3JTZXRSZXF1
ZXN0ZWRUaW1lVG9sZXJhbmNlQmVmb3JlKG1faW1hZ2VHZW5lcmF0b3IuZ2V0KCksIGtDTVRpbWVa
ZXJvKTsKKyAgICBBVkNGQXNzZXRJbWFnZUdlbmVyYXRvclNldFJlcXVlc3RlZFRpbWVUb2xlcmFu
Y2VBZnRlcihtX2ltYWdlR2VuZXJhdG9yLmdldCgpLCBrQ01UaW1lWmVybyk7CisgICAgQVZDRkFz
c2V0SW1hZ2VHZW5lcmF0b3JTZXRBcHBsaWVzUHJlZmVycmVkVHJhY2tUcmFuc2Zvcm0obV9pbWFn
ZUdlbmVyYXRvci5nZXQoKSwgdHJ1ZSk7CisKKyAgICBMT0coTWVkaWEsICJBVkZXcmFwcGVyOjpj
cmVhdGVJbWFnZUdlbmVyYXRvciglcCkgLSByZXR1cm5pbmcgJXAiLCB0aGlzLCBtX2ltYWdlR2Vu
ZXJhdG9yLmdldCgpKTsKK30KKwordm9pZCBBVkZXcmFwcGVyOjpkZXN0cm95SW1hZ2VHZW5lcmF0
b3IoKQoreworICAgIExPRyhNZWRpYSwgIkFWRldyYXBwZXI6OmRlc3Ryb3lJbWFnZUdlbmVyYXRv
ciglcCkiLCB0aGlzKTsKKyAgICBtX2ltYWdlR2VuZXJhdG9yID0gMDsKK30KKworUmV0YWluUHRy
PENHSW1hZ2VSZWY+IEFWRldyYXBwZXI6OmNyZWF0ZUltYWdlRm9yVGltZUluUmVjdChmbG9hdCB0
aW1lLCBjb25zdCBJbnRSZWN0JiByZWN0KQoreworICAgIGlmICghbV9pbWFnZUdlbmVyYXRvcikK
KyAgICAgICAgcmV0dXJuIDA7CisKKyNpZiAhTE9HX0RJU0FCTEVECisgICAgZG91YmxlIHN0YXJ0
ID0gV1RGOjpjdXJyZW50VGltZSgpOworI2VuZGlmCisKKyAgICBBVkNGQXNzZXRJbWFnZUdlbmVy
YXRvclNldE1heGltdW1TaXplKG1faW1hZ2VHZW5lcmF0b3IuZ2V0KCksIENHU2l6ZShyZWN0LnNp
emUoKSkpOworICAgIENHSW1hZ2VSZWYgaW1hZ2UgPSBBVkNGQXNzZXRJbWFnZUdlbmVyYXRvckNv
cHlDR0ltYWdlQXRUaW1lKG1faW1hZ2VHZW5lcmF0b3IuZ2V0KCksIENNVGltZU1ha2VXaXRoU2Vj
b25kcyh0aW1lLCA2MDApLCAwLCAwKTsKKworI2lmICFMT0dfRElTQUJMRUQKKyAgICBkb3VibGUg
ZHVyYXRpb24gPSBXVEY6OmN1cnJlbnRUaW1lKCkgLSBzdGFydDsKKyAgICBMT0coTWVkaWEsICJB
VkZXcmFwcGVyOjpjcmVhdGVJbWFnZUZvclRpbWVJblJlY3QoJXApIC0gY3JlYXRpbmcgaW1hZ2Ug
dG9vayAlLjRmIiwgdGhpcywgbmFycm93UHJlY2lzaW9uVG9GbG9hdChkdXJhdGlvbikpOworI2Vu
ZGlmCisKKyAgICByZXR1cm4gaW1hZ2U7Cit9CisKK3ZvaWQgTGF5ZXJDbGllbnQ6OnBsYXRmb3Jt
Q0FMYXllckxheW91dFN1YmxheWVyc09mTGF5ZXIoUGxhdGZvcm1DQUxheWVyKiB3cmFwcGVyTGF5
ZXIpCit7CisgICAgQVNTRVJUKG1fcGFyZW50KTsKKyAgICBBU1NFUlQobV9wYXJlbnQtPnZpZGVv
TGF5ZXJXcmFwcGVyKCkgPT0gd3JhcHBlckxheWVyLT5wbGF0Zm9ybUxheWVyKCkpOworCisgICAg
Q0dSZWN0IGJvdW5kcyA9IHdyYXBwZXJMYXllci0+Ym91bmRzKCk7CisgICAgQ0dQb2ludCBhbmNo
b3IgPSBDQUNGTGF5ZXJHZXRBbmNob3JQb2ludChtX3BhcmVudC0+Y2FWaWRlb0xheWVyKCkpOwor
ICAgIEZsb2F0UG9pbnQgcG9zaXRpb24oYm91bmRzLnNpemUud2lkdGggKiBhbmNob3IueCwgYm91
bmRzLnNpemUuaGVpZ2h0ICogYW5jaG9yLnkpOyAKKworICAgIENBQ0ZMYXllclNldFBvc2l0aW9u
KG1fcGFyZW50LT5jYVZpZGVvTGF5ZXIoKSwgcG9zaXRpb24pOworICAgIENBQ0ZMYXllclNldEJv
dW5kcyhtX3BhcmVudC0+Y2FWaWRlb0xheWVyKCksIGJvdW5kcyk7Cit9CisKK30gLy8gbmFtZXNw
YWNlIFdlYkNvcmUKKworI2Vsc2UKKy8vIEFWRm91bmRhdGlvbiBzaG91bGQgYWx3YXlzIGJlIGVu
YWJsZWQgZm9yIEFwcGxlIHByb2R1Y3Rpb24gYnVpbGRzLgorI2lmIF9fUFJPRFVDVElPTl9fICYm
ICFVU0UoQVZGT1VOREFUSU9OKQorI2Vycm9yIEFWRm91bmRhdGlvbiBpcyBub3QgZW5hYmxlZCEK
KyNlbmRpZiAvLyBfX1BST0RVQ1RJT05fXyAmJiAhVVNFKEFWRk9VTkRBVElPTikKKyNlbmRpZiAv
LyBVU0UoQVZGT1VOREFUSU9OKQorI2VuZGlmIC8vIFBMQVRGT1JNKFdJTikgJiYgRU5BQkxFKFZJ
REVPKQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYXZmb3VuZGF0aW9u
L2NmL01lZGlhUGxheWVyUHJpdmF0ZUFWRm91bmRhdGlvbkNGLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYXZmb3VuZGF0aW9uL2NmL01lZGlhUGxheWVy
UHJpdmF0ZUFWRm91bmRhdGlvbkNGLmgJKHJldmlzaW9uIDkzMjE1KQkoZnJvbSBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9hdmZvdW5kYXRpb24vTWVkaWFQbGF5ZXJQcml2YXRlQVZG
b3VuZGF0aW9uQ0YuaDo5MzIxNSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2F2Zm91bmRhdGlvbi9jZi9NZWRpYVBsYXllclByaXZhdGVBVkZvdW5kYXRpb25DRi5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0wLDAgKzEsMTA5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDExIEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5Z
CisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAg
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IKKyAqIENPTlRSSUJVVE9S
UyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAq
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBNZWRpYVBsYXll
clByaXZhdGVBVkZvdW5kYXRpb25DRl9oCisjZGVmaW5lIE1lZGlhUGxheWVyUHJpdmF0ZUFWRm91
bmRhdGlvbkNGX2gKKworI2lmIFBMQVRGT1JNKFdJTikgJiYgRU5BQkxFKFZJREVPKSAmJiBVU0Uo
QVZGT1VOREFUSU9OKQorCisjaW5jbHVkZSAiTWVkaWFQbGF5ZXJQcml2YXRlQVZGb3VuZGF0aW9u
LmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgQVZGV3JhcHBlcjsKKworY2xhc3Mg
TWVkaWFQbGF5ZXJQcml2YXRlQVZGb3VuZGF0aW9uQ0YgOiBwdWJsaWMgTWVkaWFQbGF5ZXJQcml2
YXRlQVZGb3VuZGF0aW9uIHsKK3B1YmxpYzoKKyAgICB2aXJ0dWFsIH5NZWRpYVBsYXllclByaXZh
dGVBVkZvdW5kYXRpb25DRigpOworCisgICAgc3RhdGljIHZvaWQgcmVnaXN0ZXJNZWRpYUVuZ2lu
ZShNZWRpYUVuZ2luZVJlZ2lzdHJhcik7CisKK3ByaXZhdGU6CisgICAgTWVkaWFQbGF5ZXJQcml2
YXRlQVZGb3VuZGF0aW9uQ0YoTWVkaWFQbGF5ZXIqKTsKKworICAgIC8vIEVuZ2luZSBzdXBwb3J0
CisgICAgc3RhdGljIFBhc3NPd25QdHI8TWVkaWFQbGF5ZXJQcml2YXRlSW50ZXJmYWNlPiBjcmVh
dGUoTWVkaWFQbGF5ZXIqKTsKKyAgICBzdGF0aWMgdm9pZCBnZXRTdXBwb3J0ZWRUeXBlcyhIYXNo
U2V0PFN0cmluZz4mIHR5cGVzKTsKKyAgICBzdGF0aWMgTWVkaWFQbGF5ZXI6OlN1cHBvcnRzVHlw
ZSBzdXBwb3J0c1R5cGUoY29uc3QgU3RyaW5nJiB0eXBlLCBjb25zdCBTdHJpbmcmIGNvZGVjcyk7
CisgICAgc3RhdGljIGJvb2wgaXNBdmFpbGFibGUoKTsKKworICAgIHZpcnR1YWwgdm9pZCBjYW5j
ZWxMb2FkKCk7CisKKyAgICB2aXJ0dWFsIFBsYXRmb3JtTWVkaWEgcGxhdGZvcm1NZWRpYSgpIGNv
bnN0OworCisgICAgdmlydHVhbCB2b2lkIHBsYXRmb3JtU2V0VmlzaWJsZShib29sKTsKKyAgICB2
aXJ0dWFsIHZvaWQgcGxhdGZvcm1QbGF5KCk7CisgICAgdmlydHVhbCB2b2lkIHBsYXRmb3JtUGF1
c2UoKTsKKyAgICB2aXJ0dWFsIGZsb2F0IGN1cnJlbnRUaW1lKCkgY29uc3Q7CisgICAgdmlydHVh
bCB2b2lkIHNldFZvbHVtZShmbG9hdCk7CisgICAgdmlydHVhbCB2b2lkIHNldENsb3NlZENhcHRp
b25zVmlzaWJsZShib29sKTsKKyAgICB2aXJ0dWFsIHZvaWQgcGFpbnQoR3JhcGhpY3NDb250ZXh0
KiwgY29uc3QgSW50UmVjdCYpOworICAgIHZpcnR1YWwgdm9pZCBwYWludEN1cnJlbnRGcmFtZUlu
Q29udGV4dChHcmFwaGljc0NvbnRleHQqLCBjb25zdCBJbnRSZWN0Jik7CisgICAgdmlydHVhbCBQ
bGF0Zm9ybUxheWVyKiBwbGF0Zm9ybUxheWVyKCkgY29uc3Q7CisgICAgdmlydHVhbCBib29sIHN1
cHBvcnRzQWNjZWxlcmF0ZWRSZW5kZXJpbmcoKSBjb25zdCB7IHJldHVybiB0cnVlOyB9CisgICAg
dmlydHVhbCBmbG9hdCBtZWRpYVRpbWVGb3JUaW1lVmFsdWUoZmxvYXQpIGNvbnN0OworCisgICAg
dmlydHVhbCB2b2lkIGNyZWF0ZUFWUGxheWVyKCk7CisgICAgdmlydHVhbCB2b2lkIGNyZWF0ZUFW
UGxheWVySXRlbSgpOworICAgIHZpcnR1YWwgdm9pZCBjcmVhdGVBVkFzc2V0Rm9yVVJMKGNvbnN0
IFN0cmluZyYgdXJsKTsKKyAgICB2aXJ0dWFsIE1lZGlhUGxheWVyUHJpdmF0ZUFWRm91bmRhdGlv
bjo6SXRlbVN0YXR1cyBwbGF5ZXJJdGVtU3RhdHVzKCkgY29uc3Q7CisgICAgdmlydHVhbCBNZWRp
YVBsYXllclByaXZhdGVBVkZvdW5kYXRpb246OkFzc2V0U3RhdHVzIGFzc2V0U3RhdHVzKCkgY29u
c3Q7CisKKyAgICB2aXJ0dWFsIHZvaWQgY2hlY2tQbGF5YWJpbGl0eSgpOworICAgIHZpcnR1YWwg
dm9pZCB1cGRhdGVSYXRlKCk7CisgICAgdmlydHVhbCBmbG9hdCByYXRlKCkgY29uc3Q7CisgICAg
dmlydHVhbCB2b2lkIHNlZWtUb1RpbWUoZmxvYXQgdGltZSk7CisgICAgdmlydHVhbCB1bnNpZ25l
ZCB0b3RhbEJ5dGVzKCkgY29uc3Q7CisgICAgdmlydHVhbCBQYXNzUmVmUHRyPFRpbWVSYW5nZXM+
IHBsYXRmb3JtQnVmZmVyZWRUaW1lUmFuZ2VzKCkgY29uc3Q7CisgICAgdmlydHVhbCBmbG9hdCBw
bGF0Zm9ybU1heFRpbWVTZWVrYWJsZSgpIGNvbnN0OworICAgIHZpcnR1YWwgZmxvYXQgcGxhdGZv
cm1EdXJhdGlvbigpIGNvbnN0OworICAgIHZpcnR1YWwgZmxvYXQgcGxhdGZvcm1NYXhUaW1lTG9h
ZGVkKCkgY29uc3Q7CisgICAgdmlydHVhbCB2b2lkIGJlZ2luTG9hZGluZ01ldGFkYXRhKCk7Cisg
ICAgdmlydHVhbCB2b2lkIHRyYWNrc0NoYW5nZWQoKTsKKyAgICB2aXJ0dWFsIHZvaWQgc2l6ZUNo
YW5nZWQoKTsKKworICAgIHZpcnR1YWwgYm9vbCBoYXNBdmFpbGFibGVWaWRlb0ZyYW1lKCkgY29u
c3Q7CisKKyAgICB2aXJ0dWFsIHZvaWQgY3JlYXRlQ29udGV4dFZpZGVvUmVuZGVyZXIoKTsKKyAg
ICB2aXJ0dWFsIHZvaWQgZGVzdHJveUNvbnRleHRWaWRlb1JlbmRlcmVyKCk7CisKKyAgICB2aXJ0
dWFsIHZvaWQgY3JlYXRlVmlkZW9MYXllcigpOworICAgIHZpcnR1YWwgdm9pZCBkZXN0cm95Vmlk
ZW9MYXllcigpOworCisgICAgdmlydHVhbCBib29sIGhhc0NvbnRleHRSZW5kZXJlcigpIGNvbnN0
OworICAgIHZpcnR1YWwgYm9vbCBoYXNMYXllclJlbmRlcmVyKCkgY29uc3Q7CisKKyAgICB2aXJ0
dWFsIHZvaWQgY29udGVudHNOZWVkc0Rpc3BsYXkoKTsKKworICAgIGZyaWVuZCBjbGFzcyBBVkZX
cmFwcGVyOworICAgIEFWRldyYXBwZXIqIG1fYXZmV3JhcHBlcjsKKyAgICAKKyAgICBib29sIG1f
dmlkZW9GcmFtZUhhc0RyYXduOworfTsKKworfQorCisjZW5kaWYgLy8gUExBVEZPUk0oV0lOKSAm
JiBFTkFCTEUoVklERU8pICYmIFVTRShBVkZPVU5EQVRJT04pCisjZW5kaWYgLy8gTWVkaWFQbGF5
ZXJQcml2YXRlQVZGb3VuZGF0aW9uQ0ZfaApJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvYXZmb3VuZGF0aW9uL29iamMvTWVkaWFQbGF5ZXJQcml2YXRlQVZGb3VuZGF0aW9u
T2JqQy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2F2
Zm91bmRhdGlvbi9vYmpjL01lZGlhUGxheWVyUHJpdmF0ZUFWRm91bmRhdGlvbk9iakMuaAkocmV2
aXNpb24gOTMyMTUpCShmcm9tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2F2Zm91
bmRhdGlvbi9NZWRpYVBsYXllclByaXZhdGVBVkZvdW5kYXRpb25PYmpDLmg6OTMyMTUpCisrKyBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9hdmZvdW5kYXRpb24vb2JqYy9NZWRpYVBs
YXllclByaXZhdGVBVkZvdW5kYXRpb25PYmpDLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwx
MzYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisg
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBDT01QVVRFUiwgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQ
Uk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLiAKKyAqLworCisjaWZuZGVmIE1lZGlhUGxheWVyUHJpdmF0ZUFWRm91bmRhdGlvbk9i
akNfaAorI2RlZmluZSBNZWRpYVBsYXllclByaXZhdGVBVkZvdW5kYXRpb25PYmpDX2gKKworI2lm
IEVOQUJMRShWSURFTykgJiYgVVNFKEFWRk9VTkRBVElPTikKKworI2luY2x1ZGUgIk1lZGlhUGxh
eWVyUHJpdmF0ZUFWRm91bmRhdGlvbi5oIgorCisjaWZkZWYgX19PQkpDX18KK0BjbGFzcyBBVkFz
c2V0OworQGNsYXNzIEFWUGxheWVyOworQGNsYXNzIEFWUGxheWVySXRlbTsKK0BjbGFzcyBBVlBs
YXllckxheWVyOworQGNsYXNzIEFWQXNzZXRJbWFnZUdlbmVyYXRvcjsKK0BjbGFzcyBXZWJDb3Jl
QVZGTW92aWVPYnNlcnZlcjsKKyNlbHNlCitjbGFzcyBBVkFzc2V0OworY2xhc3MgQVZQbGF5ZXI7
CitjbGFzcyBBVlBsYXllckl0ZW07CitjbGFzcyBBVlBsYXllckxheWVyOworY2xhc3MgQVZBc3Nl
dEltYWdlR2VuZXJhdG9yOworY2xhc3MgV2ViQ29yZUFWRk1vdmllT2JzZXJ2ZXI7Cit0eXBlZGVm
IHN0cnVjdCBvYmpjX29iamVjdCAqaWQ7CisjZW5kaWYKKwordHlwZWRlZiBzdHJ1Y3QgQ0dJbWFn
ZSAqQ0dJbWFnZVJlZjsKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBNZWRpYVBsYXll
clByaXZhdGVBVkZvdW5kYXRpb25PYmpDIDogcHVibGljIE1lZGlhUGxheWVyUHJpdmF0ZUFWRm91
bmRhdGlvbiB7CitwdWJsaWM6CisgICAgfk1lZGlhUGxheWVyUHJpdmF0ZUFWRm91bmRhdGlvbk9i
akMoKTsKKworICAgIHN0YXRpYyB2b2lkIHJlZ2lzdGVyTWVkaWFFbmdpbmUoTWVkaWFFbmdpbmVS
ZWdpc3RyYXIpOworCisgICAgdm9pZCBzZXRBc3NldChpZCk7CisgICAgdmlydHVhbCB2b2lkIHRy
YWNrc0NoYW5nZWQoKTsKKworcHJpdmF0ZToKKyAgICBNZWRpYVBsYXllclByaXZhdGVBVkZvdW5k
YXRpb25PYmpDKE1lZGlhUGxheWVyKik7CisKKyAgICAvLyBlbmdpbmUgc3VwcG9ydAorICAgIHN0
YXRpYyBQYXNzT3duUHRyPE1lZGlhUGxheWVyUHJpdmF0ZUludGVyZmFjZT4gY3JlYXRlKE1lZGlh
UGxheWVyKik7CisgICAgc3RhdGljIHZvaWQgZ2V0U3VwcG9ydGVkVHlwZXMoSGFzaFNldDxTdHJp
bmc+JiB0eXBlcyk7CisgICAgc3RhdGljIE1lZGlhUGxheWVyOjpTdXBwb3J0c1R5cGUgc3VwcG9y
dHNUeXBlKGNvbnN0IFN0cmluZyYgdHlwZSwgY29uc3QgU3RyaW5nJiBjb2RlY3MpOworICAgIHN0
YXRpYyBib29sIGlzQXZhaWxhYmxlKCk7CisKKyAgICB2aXJ0dWFsIHZvaWQgY2FuY2VsTG9hZCgp
OworCisgICAgdmlydHVhbCBQbGF0Zm9ybU1lZGlhIHBsYXRmb3JtTWVkaWEoKSBjb25zdDsKKwor
ICAgIHZpcnR1YWwgdm9pZCBwbGF0Zm9ybVNldFZpc2libGUoYm9vbCk7CisgICAgdmlydHVhbCB2
b2lkIHBsYXRmb3JtUGxheSgpOworICAgIHZpcnR1YWwgdm9pZCBwbGF0Zm9ybVBhdXNlKCk7Cisg
ICAgdmlydHVhbCBmbG9hdCBjdXJyZW50VGltZSgpIGNvbnN0OworICAgIHZpcnR1YWwgdm9pZCBz
ZXRWb2x1bWUoZmxvYXQpOworICAgIHZpcnR1YWwgdm9pZCBzZXRDbG9zZWRDYXB0aW9uc1Zpc2li
bGUoYm9vbCk7CisgICAgdmlydHVhbCB2b2lkIHBhaW50KEdyYXBoaWNzQ29udGV4dCosIGNvbnN0
IEludFJlY3QmKTsKKyAgICB2aXJ0dWFsIHZvaWQgcGFpbnRDdXJyZW50RnJhbWVJbkNvbnRleHQo
R3JhcGhpY3NDb250ZXh0KiwgY29uc3QgSW50UmVjdCYpOworICAgIHZpcnR1YWwgUGxhdGZvcm1M
YXllciogcGxhdGZvcm1MYXllcigpIGNvbnN0OworICAgIHZpcnR1YWwgYm9vbCBzdXBwb3J0c0Fj
Y2VsZXJhdGVkUmVuZGVyaW5nKCkgY29uc3QgeyByZXR1cm4gdHJ1ZTsgfQorICAgIHZpcnR1YWwg
ZmxvYXQgbWVkaWFUaW1lRm9yVGltZVZhbHVlKGZsb2F0KSBjb25zdDsKKworICAgIHZpcnR1YWwg
dm9pZCBjcmVhdGVBVlBsYXllcigpOworICAgIHZpcnR1YWwgdm9pZCBjcmVhdGVBVlBsYXllckl0
ZW0oKTsKKyAgICB2aXJ0dWFsIHZvaWQgY3JlYXRlQVZBc3NldEZvclVSTChjb25zdCBTdHJpbmcm
IHVybCk7CisgICAgdmlydHVhbCBNZWRpYVBsYXllclByaXZhdGVBVkZvdW5kYXRpb246Okl0ZW1T
dGF0dXMgcGxheWVySXRlbVN0YXR1cygpIGNvbnN0OworICAgIHZpcnR1YWwgTWVkaWFQbGF5ZXJQ
cml2YXRlQVZGb3VuZGF0aW9uOjpBc3NldFN0YXR1cyBhc3NldFN0YXR1cygpIGNvbnN0OworCisg
ICAgdmlydHVhbCB2b2lkIGNoZWNrUGxheWFiaWxpdHkoKTsKKyAgICB2aXJ0dWFsIHZvaWQgdXBk
YXRlUmF0ZSgpOworICAgIHZpcnR1YWwgZmxvYXQgcmF0ZSgpIGNvbnN0OworICAgIHZpcnR1YWwg
dm9pZCBzZWVrVG9UaW1lKGZsb2F0IHRpbWUpOworICAgIHZpcnR1YWwgdW5zaWduZWQgdG90YWxC
eXRlcygpIGNvbnN0OworICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxUaW1lUmFuZ2VzPiBwbGF0Zm9y
bUJ1ZmZlcmVkVGltZVJhbmdlcygpIGNvbnN0OworICAgIHZpcnR1YWwgZmxvYXQgcGxhdGZvcm1N
YXhUaW1lU2Vla2FibGUoKSBjb25zdDsKKyAgICB2aXJ0dWFsIGZsb2F0IHBsYXRmb3JtRHVyYXRp
b24oKSBjb25zdDsKKyAgICB2aXJ0dWFsIGZsb2F0IHBsYXRmb3JtTWF4VGltZUxvYWRlZCgpIGNv
bnN0OworICAgIHZpcnR1YWwgdm9pZCBiZWdpbkxvYWRpbmdNZXRhZGF0YSgpOworICAgIHZpcnR1
YWwgdm9pZCBzaXplQ2hhbmdlZCgpOworCisgICAgdmlydHVhbCBib29sIGhhc0F2YWlsYWJsZVZp
ZGVvRnJhbWUoKSBjb25zdDsKKworICAgIHZpcnR1YWwgdm9pZCBjcmVhdGVDb250ZXh0VmlkZW9S
ZW5kZXJlcigpOworICAgIHZpcnR1YWwgdm9pZCBkZXN0cm95Q29udGV4dFZpZGVvUmVuZGVyZXIo
KTsKKworICAgIHZpcnR1YWwgdm9pZCBjcmVhdGVWaWRlb0xheWVyKCk7CisgICAgdmlydHVhbCB2
b2lkIGRlc3Ryb3lWaWRlb0xheWVyKCk7CisKKyAgICB2aXJ0dWFsIGJvb2wgaGFzQ29udGV4dFJl
bmRlcmVyKCkgY29uc3Q7CisgICAgdmlydHVhbCBib29sIGhhc0xheWVyUmVuZGVyZXIoKSBjb25z
dDsKKworICAgIHZpcnR1YWwgYm9vbCBoYXNTaW5nbGVTZWN1cml0eU9yaWdpbigpIGNvbnN0Owor
CisgICAgUmV0YWluUHRyPENHSW1hZ2VSZWY+IGNyZWF0ZUltYWdlRm9yVGltZUluUmVjdChmbG9h
dCwgY29uc3QgSW50UmVjdCYpOworCisgICAgTWVkaWFQbGF5ZXIqIG1fcGxheWVyOworICAgIFJl
dGFpblB0cjxBVkFzc2V0PiBtX2F2QXNzZXQ7CisgICAgUmV0YWluUHRyPEFWUGxheWVyPiBtX2F2
UGxheWVyOworICAgIFJldGFpblB0cjxBVlBsYXllckl0ZW0+IG1fYXZQbGF5ZXJJdGVtOworICAg
IFJldGFpblB0cjxBVlBsYXllckxheWVyPiBtX3ZpZGVvTGF5ZXI7CisgICAgUmV0YWluUHRyPFdl
YkNvcmVBVkZNb3ZpZU9ic2VydmVyPiBtX29iamNPYnNlcnZlcjsKKyAgICBSZXRhaW5QdHI8QVZB
c3NldEltYWdlR2VuZXJhdG9yPiBtX2ltYWdlR2VuZXJhdG9yOworICAgIFJldGFpblB0cjxpZD4g
bV90aW1lT2JzZXJ2ZXI7CisgICAgYm9vbCBtX3ZpZGVvRnJhbWVIYXNEcmF3bjsKKyAgICBib29s
IG1faGF2ZUNoZWNrZWRQbGF5YWJpbGl0eTsKK307CisKK30KKworI2VuZGlmCisjZW5kaWYKClBy
b3BlcnR5IGNoYW5nZXMgb246IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2F2Zm91
bmRhdGlvbi9vYmpjL01lZGlhUGxheWVyUHJpdmF0ZUFWRm91bmRhdGlvbk9iakMuaApfX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fCkFkZGVkOiBzdm46ZW9sLXN0eWxlCiAgICsgbmF0aXZlCgpJbmRleDogU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvYXZmb3VuZGF0aW9uL29iamMvTWVkaWFQbGF5ZXJQcml2YXRl
QVZGb3VuZGF0aW9uT2JqQy5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9hdmZvdW5kYXRpb24vb2JqYy9NZWRpYVBsYXllclByaXZhdGVBVkZvdW5kYXRp
b25PYmpDLm1tCShyZXZpc2lvbiA5MzIxNSkJKGZyb20gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvYXZmb3VuZGF0aW9uL01lZGlhUGxheWVyUHJpdmF0ZUFWRm91bmRhdGlvbk9iakMu
bW06OTMyMTUpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9hdmZvdW5kYXRp
b24vb2JqYy9NZWRpYVBsYXllclByaXZhdGVBVkZvdW5kYXRpb25PYmpDLm1tCSh3b3JraW5nIGNv
cHkpCkBAIC0wLDAgKzEsOTExIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDExIEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwor
ICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICog
RVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2ltcG9ydCAiY29uZmlnLmgiCisKKyNp
ZiBFTkFCTEUoVklERU8pICYmIFVTRShBVkZPVU5EQVRJT04pCisKKyNpbXBvcnQgIk1lZGlhUGxh
eWVyUHJpdmF0ZUFWRm91bmRhdGlvbk9iakMuaCIKKworI2ltcG9ydCAiQmxvY2tFeGNlcHRpb25z
LmgiCisjaW1wb3J0ICJGbG9hdENvbnZlcnNpb24uaCIKKyNpbXBvcnQgIkZyYW1lVmlldy5oIgor
I2ltcG9ydCAiRmxvYXRDb252ZXJzaW9uLmgiCisjaW1wb3J0ICJHcmFwaGljc0NvbnRleHQuaCIK
KyNpbXBvcnQgIktVUkwuaCIKKyNpbXBvcnQgIkxvZ2dpbmcuaCIKKyNpbXBvcnQgIlNlY3VyaXR5
T3JpZ2luLmgiCisjaW1wb3J0ICJTb2Z0TGlua2luZy5oIgorI2ltcG9ydCAiVGltZVJhbmdlcy5o
IgorI2ltcG9ydCAiV2ViQ29yZVN5c3RlbUludGVyZmFjZS5oIgorI2ltcG9ydCA8b2JqYy9vYmpj
LXJ1bnRpbWUuaD4KKyNpbXBvcnQgPHd0Zi9VbnVzZWRQYXJhbS5oPgorCisjaW1wb3J0IDxDb3Jl
TWVkaWEvQ29yZU1lZGlhLmg+CisjaW1wb3J0IDxBVkZvdW5kYXRpb24vQVZGb3VuZGF0aW9uLmg+
CisKK1NPRlRfTElOS19GUkFNRVdPUktfT1BUSU9OQUwoQVZGb3VuZGF0aW9uKQorU09GVF9MSU5L
X0ZSQU1FV09SS19PUFRJT05BTChDb3JlTWVkaWEpCisKK1NPRlRfTElOSyhDb3JlTWVkaWEsIENN
VGltZUNvbXBhcmUsIGludDMyX3QsIChDTVRpbWUgdGltZTEsIENNVGltZSB0aW1lMiksICh0aW1l
MSwgdGltZTIpKQorU09GVF9MSU5LKENvcmVNZWRpYSwgQ01UaW1lTWFrZVdpdGhTZWNvbmRzLCBD
TVRpbWUsIChGbG9hdDY0IHNlY29uZHMsIGludDMyX3QgcHJlZmVycmVkVGltZVNjYWxlKSwgKHNl
Y29uZHMsIHByZWZlcnJlZFRpbWVTY2FsZSkpCitTT0ZUX0xJTksoQ29yZU1lZGlhLCBDTVRpbWVH
ZXRTZWNvbmRzLCBGbG9hdDY0LCAoQ01UaW1lIHRpbWUpLCAodGltZSkpCitTT0ZUX0xJTksoQ29y
ZU1lZGlhLCBDTVRpbWVSYW5nZUdldEVuZCwgQ01UaW1lLCAoQ01UaW1lUmFuZ2UgcmFuZ2UpLCAo
cmFuZ2UpKQorCitTT0ZUX0xJTktfQ0xBU1MoQVZGb3VuZGF0aW9uLCBBVlBsYXllcikKK1NPRlRf
TElOS19DTEFTUyhBVkZvdW5kYXRpb24sIEFWUGxheWVySXRlbSkKK1NPRlRfTElOS19DTEFTUyhB
VkZvdW5kYXRpb24sIEFWUGxheWVyTGF5ZXIpCitTT0ZUX0xJTktfQ0xBU1MoQVZGb3VuZGF0aW9u
LCBBVlVSTEFzc2V0KQorU09GVF9MSU5LX0NMQVNTKEFWRm91bmRhdGlvbiwgQVZBc3NldEltYWdl
R2VuZXJhdG9yKQorCitTT0ZUX0xJTktfUE9JTlRFUihBVkZvdW5kYXRpb24sIEFWTWVkaWFDaGFy
YWN0ZXJpc3RpY1Zpc3VhbCwgTlNTdHJpbmcgKikKK1NPRlRfTElOS19QT0lOVEVSKEFWRm91bmRh
dGlvbiwgQVZNZWRpYUNoYXJhY3RlcmlzdGljQXVkaWJsZSwgTlNTdHJpbmcgKikKK1NPRlRfTElO
S19QT0lOVEVSKEFWRm91bmRhdGlvbiwgQVZNZWRpYVR5cGVDbG9zZWRDYXB0aW9uLCBOU1N0cmlu
ZyAqKQorU09GVF9MSU5LX1BPSU5URVIoQVZGb3VuZGF0aW9uLCBBVk1lZGlhVHlwZVZpZGVvLCBO
U1N0cmluZyAqKQorU09GVF9MSU5LX1BPSU5URVIoQVZGb3VuZGF0aW9uLCBBVk1lZGlhVHlwZUF1
ZGlvLCBOU1N0cmluZyAqKQorU09GVF9MSU5LX1BPSU5URVIoQVZGb3VuZGF0aW9uLCBBVlBsYXll
ckl0ZW1EaWRQbGF5VG9FbmRUaW1lTm90aWZpY2F0aW9uLCBOU1N0cmluZyAqKQorU09GVF9MSU5L
X1BPSU5URVIoQVZGb3VuZGF0aW9uLCBBVkFzc2V0SW1hZ2VHZW5lcmF0b3JBcGVydHVyZU1vZGVD
bGVhbkFwZXJ0dXJlLCBOU1N0cmluZyAqKQorU09GVF9MSU5LX1BPSU5URVIoQVZGb3VuZGF0aW9u
LCBBVlVSTEFzc2V0UmVmZXJlbmNlUmVzdHJpY3Rpb25zS2V5LCBOU1N0cmluZyAqKQorCitTT0ZU
X0xJTktfQ09OU1RBTlQoQ29yZU1lZGlhLCBrQ01UaW1lWmVybywgQ01UaW1lKQorCisjZGVmaW5l
IEFWUGxheWVyIGdldEFWUGxheWVyQ2xhc3MoKQorI2RlZmluZSBBVlBsYXllckl0ZW0gZ2V0QVZQ
bGF5ZXJJdGVtQ2xhc3MoKQorI2RlZmluZSBBVlBsYXllckxheWVyIGdldEFWUGxheWVyTGF5ZXJD
bGFzcygpCisjZGVmaW5lIEFWVVJMQXNzZXQgZ2V0QVZVUkxBc3NldENsYXNzKCkKKyNkZWZpbmUg
QVZBc3NldEltYWdlR2VuZXJhdG9yIGdldEFWQXNzZXRJbWFnZUdlbmVyYXRvckNsYXNzKCkKKwor
I2RlZmluZSBBVk1lZGlhQ2hhcmFjdGVyaXN0aWNWaXN1YWwgZ2V0QVZNZWRpYUNoYXJhY3Rlcmlz
dGljVmlzdWFsKCkKKyNkZWZpbmUgQVZNZWRpYUNoYXJhY3RlcmlzdGljQXVkaWJsZSBnZXRBVk1l
ZGlhQ2hhcmFjdGVyaXN0aWNBdWRpYmxlKCkKKyNkZWZpbmUgQVZNZWRpYVR5cGVDbG9zZWRDYXB0
aW9uIGdldEFWTWVkaWFUeXBlQ2xvc2VkQ2FwdGlvbigpCisjZGVmaW5lIEFWTWVkaWFUeXBlVmlk
ZW8gZ2V0QVZNZWRpYVR5cGVWaWRlbygpCisjZGVmaW5lIEFWTWVkaWFUeXBlQXVkaW8gZ2V0QVZN
ZWRpYVR5cGVBdWRpbygpCisjZGVmaW5lIEFWUGxheWVySXRlbURpZFBsYXlUb0VuZFRpbWVOb3Rp
ZmljYXRpb24gZ2V0QVZQbGF5ZXJJdGVtRGlkUGxheVRvRW5kVGltZU5vdGlmaWNhdGlvbigpCisj
ZGVmaW5lIEFWQXNzZXRJbWFnZUdlbmVyYXRvckFwZXJ0dXJlTW9kZUNsZWFuQXBlcnR1cmUgZ2V0
QVZBc3NldEltYWdlR2VuZXJhdG9yQXBlcnR1cmVNb2RlQ2xlYW5BcGVydHVyZSgpCisjZGVmaW5l
IEFWVVJMQXNzZXRSZWZlcmVuY2VSZXN0cmljdGlvbnNLZXkgZ2V0QVZVUkxBc3NldFJlZmVyZW5j
ZVJlc3RyaWN0aW9uc0tleSgpCisKKyNkZWZpbmUga0NNVGltZVplcm8gZ2V0a0NNVGltZVplcm8o
KQorCit1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKK3VzaW5nIG5hbWVzcGFjZSBzdGQ7CisKK2Vu
dW0gTWVkaWFQbGF5ZXJBVkZvdW5kYXRpb25PYnNlcnZhdGlvbkNvbnRleHQgeworICAgIE1lZGlh
UGxheWVyQVZGb3VuZGF0aW9uT2JzZXJ2YXRpb25Db250ZXh0UGxheWVySXRlbSwKKyAgICBNZWRp
YVBsYXllckFWRm91bmRhdGlvbk9ic2VydmF0aW9uQ29udGV4dFBsYXllcgorfTsKKworQGludGVy
ZmFjZSBXZWJDb3JlQVZGTW92aWVPYnNlcnZlciA6IE5TT2JqZWN0Cit7CisgICAgTWVkaWFQbGF5
ZXJQcml2YXRlQVZGb3VuZGF0aW9uT2JqQyogbV9jYWxsYmFjazsKKyAgICBpbnQgbV9kZWxheUNh
bGxiYWNrczsKK30KKy0oaWQpaW5pdFdpdGhDYWxsYmFjazooTWVkaWFQbGF5ZXJQcml2YXRlQVZG
b3VuZGF0aW9uT2JqQyopY2FsbGJhY2s7CistKHZvaWQpZGlzY29ubmVjdDsKKy0odm9pZClwbGF5
YWJsZUtub3duOworLSh2b2lkKW1ldGFkYXRhTG9hZGVkOworLSh2b2lkKXRpbWVDaGFuZ2VkOihk
b3VibGUpdGltZTsKKy0odm9pZClzZWVrQ29tcGxldGVkOihCT09MKWZpbmlzaGVkOworLSh2b2lk
KWRpZEVuZDooTlNOb3RpZmljYXRpb24gKilub3RpZmljYXRpb247CistKHZvaWQpb2JzZXJ2ZVZh
bHVlRm9yS2V5UGF0aDprZXlQYXRoIG9mT2JqZWN0OihpZClvYmplY3QgY2hhbmdlOihOU0RpY3Rp
b25hcnkgKiljaGFuZ2UgY29udGV4dDooTWVkaWFQbGF5ZXJBVkZvdW5kYXRpb25PYnNlcnZhdGlv
bkNvbnRleHQpY29udGV4dDsKK0BlbmQKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitzdGF0aWMg
TlNBcnJheSAqYXNzZXRNZXRhZGF0YUtleU5hbWVzKCk7CitzdGF0aWMgTlNBcnJheSAqaXRlbUtW
T1Byb3BlcnRpZXMoKTsKKworI2lmICFMT0dfRElTQUJMRUQKK3N0YXRpYyBjb25zdCBjaGFyICpi
b29sU3RyaW5nKGJvb2wgdmFsKQoreworICAgIHJldHVybiB2YWwgPyAidHJ1ZSIgOiAiZmFsc2Ui
OworfQorI2VuZGlmCisKK3N0YXRpYyBjb25zdCBmbG9hdCBpbnZhbGlkVGltZSA9IC0xLjBmOwor
CitQYXNzT3duUHRyPE1lZGlhUGxheWVyUHJpdmF0ZUludGVyZmFjZT4gTWVkaWFQbGF5ZXJQcml2
YXRlQVZGb3VuZGF0aW9uT2JqQzo6Y3JlYXRlKE1lZGlhUGxheWVyKiBwbGF5ZXIpCit7IAorICAg
IHJldHVybiBhZG9wdFB0cihuZXcgTWVkaWFQbGF5ZXJQcml2YXRlQVZGb3VuZGF0aW9uT2JqQyhw
bGF5ZXIpKTsKK30KKwordm9pZCBNZWRpYVBsYXllclByaXZhdGVBVkZvdW5kYXRpb25PYmpDOjpy
ZWdpc3Rlck1lZGlhRW5naW5lKE1lZGlhRW5naW5lUmVnaXN0cmFyIHJlZ2lzdHJhcikKK3sKKyAg
ICBpZiAoaXNBdmFpbGFibGUoKSkKKyAgICAgICAgcmVnaXN0cmFyKGNyZWF0ZSwgZ2V0U3VwcG9y
dGVkVHlwZXMsIHN1cHBvcnRzVHlwZSwgMCwgMCwgMCk7Cit9CisKK01lZGlhUGxheWVyUHJpdmF0
ZUFWRm91bmRhdGlvbk9iakM6Ok1lZGlhUGxheWVyUHJpdmF0ZUFWRm91bmRhdGlvbk9iakMoTWVk
aWFQbGF5ZXIqIHBsYXllcikKKyAgICA6IE1lZGlhUGxheWVyUHJpdmF0ZUFWRm91bmRhdGlvbihw
bGF5ZXIpCisgICAgLCBtX29iamNPYnNlcnZlcihBZG9wdE5TLCBbW1dlYkNvcmVBVkZNb3ZpZU9i
c2VydmVyIGFsbG9jXSBpbml0V2l0aENhbGxiYWNrOnRoaXNdKQorICAgICwgbV92aWRlb0ZyYW1l
SGFzRHJhd24oZmFsc2UpCisgICAgLCBtX2hhdmVDaGVja2VkUGxheWFiaWxpdHkoZmFsc2UpCit7
Cit9CisKK01lZGlhUGxheWVyUHJpdmF0ZUFWRm91bmRhdGlvbk9iakM6On5NZWRpYVBsYXllclBy
aXZhdGVBVkZvdW5kYXRpb25PYmpDKCkKK3sKKyAgICBjYW5jZWxMb2FkKCk7CisgICAgW21fb2Jq
Y09ic2VydmVyLmdldCgpIGRpc2Nvbm5lY3RdOworfQorCit2b2lkIE1lZGlhUGxheWVyUHJpdmF0
ZUFWRm91bmRhdGlvbk9iakM6OmNhbmNlbExvYWQoKQoreworICAgIExPRyhNZWRpYSwgIk1lZGlh
UGxheWVyUHJpdmF0ZUFWRm91bmRhdGlvbk9iakM6OmNhbmNlbExvYWQoJXApIiwgdGhpcyk7Cisg
ICAgdGVhckRvd25WaWRlb1JlbmRlcmluZygpOworCisgICAgW1tOU05vdGlmaWNhdGlvbkNlbnRl
ciBkZWZhdWx0Q2VudGVyXSByZW1vdmVPYnNlcnZlcjptX29iamNPYnNlcnZlci5nZXQoKV07CisK
KyAgICAvLyBUZWxsIG91ciBvYnNlcnZlciB0byBkbyBub3RoaW5nIHdoZW4gb3VyIGNhbmNlbGxh
dGlvbiBvZiBwZW5kaW5nIGxvYWRpbmcgY2FsbHMgaXRzIGNvbXBsZXRpb24gaGFuZGxlci4KKyAg
ICBzZXRJZ25vcmVMb2FkU3RhdGVDaGFuZ2VzKHRydWUpOworICAgIGlmIChtX2F2QXNzZXQpIHsK
KyAgICAgICAgW21fYXZBc3NldC5nZXQoKSBjYW5jZWxMb2FkaW5nXTsKKyAgICAgICAgbV9hdkFz
c2V0ID0gbmlsOworICAgIH0KKyAgICBpZiAobV9hdlBsYXllckl0ZW0pIHsKKyAgICAgICAgZm9y
IChOU1N0cmluZyAqa2V5TmFtZSBpbiBpdGVtS1ZPUHJvcGVydGllcygpKQorICAgICAgICAgICAg
W21fYXZQbGF5ZXJJdGVtLmdldCgpIHJlbW92ZU9ic2VydmVyOm1fb2JqY09ic2VydmVyLmdldCgp
IGZvcktleVBhdGg6a2V5TmFtZV07CisgICAgICAgIAorICAgICAgICBtX2F2UGxheWVySXRlbSA9
IG5pbDsKKyAgICB9CisgICAgaWYgKG1fYXZQbGF5ZXIpIHsKKyAgICAgICAgaWYgKG1fdGltZU9i
c2VydmVyKQorICAgICAgICAgICAgW21fYXZQbGF5ZXIuZ2V0KCkgcmVtb3ZlVGltZU9ic2VydmVy
Om1fdGltZU9ic2VydmVyLmdldCgpXTsKKyAgICAgICAgbV90aW1lT2JzZXJ2ZXIgPSBuaWw7Cisg
ICAgICAgIFttX2F2UGxheWVyLmdldCgpIHJlbW92ZU9ic2VydmVyOm1fb2JqY09ic2VydmVyLmdl
dCgpIGZvcktleVBhdGg6QCJyYXRlIl07CisgICAgICAgIG1fYXZQbGF5ZXIgPSBuaWw7CisgICAg
fQorICAgIHNldElnbm9yZUxvYWRTdGF0ZUNoYW5nZXMoZmFsc2UpOworfQorCitib29sIE1lZGlh
UGxheWVyUHJpdmF0ZUFWRm91bmRhdGlvbk9iakM6Omhhc0xheWVyUmVuZGVyZXIoKSBjb25zdAor
eworICAgIHJldHVybiBtX3ZpZGVvTGF5ZXI7Cit9CisKK2Jvb2wgTWVkaWFQbGF5ZXJQcml2YXRl
QVZGb3VuZGF0aW9uT2JqQzo6aGFzQ29udGV4dFJlbmRlcmVyKCkgY29uc3QKK3sKKyAgICByZXR1
cm4gbV9pbWFnZUdlbmVyYXRvcjsKK30KKwordm9pZCBNZWRpYVBsYXllclByaXZhdGVBVkZvdW5k
YXRpb25PYmpDOjpjcmVhdGVDb250ZXh0VmlkZW9SZW5kZXJlcigpCit7CisgICAgTE9HKE1lZGlh
LCAiTWVkaWFQbGF5ZXJQcml2YXRlQVZGb3VuZGF0aW9uT2JqQzo6Y3JlYXRlQ29udGV4dFZpZGVv
UmVuZGVyZXIoJXApIiwgdGhpcyk7CisKKyAgICBpZiAoIW1fYXZBc3NldCB8fCBtX2ltYWdlR2Vu
ZXJhdG9yKQorICAgICAgICByZXR1cm47CisKKyAgICBtX2ltYWdlR2VuZXJhdG9yID0gW0FWQXNz
ZXRJbWFnZUdlbmVyYXRvciBhc3NldEltYWdlR2VuZXJhdG9yV2l0aEFzc2V0Om1fYXZBc3NldC5n
ZXQoKV07CisKKyAgICBbbV9pbWFnZUdlbmVyYXRvci5nZXQoKSBzZXRBcGVydHVyZU1vZGU6QVZB
c3NldEltYWdlR2VuZXJhdG9yQXBlcnR1cmVNb2RlQ2xlYW5BcGVydHVyZV07CisgICAgW21faW1h
Z2VHZW5lcmF0b3IuZ2V0KCkgc2V0QXBwbGllc1ByZWZlcnJlZFRyYWNrVHJhbnNmb3JtOllFU107
CisgICAgW21faW1hZ2VHZW5lcmF0b3IuZ2V0KCkgc2V0UmVxdWVzdGVkVGltZVRvbGVyYW5jZUJl
Zm9yZTprQ01UaW1lWmVyb107CisgICAgW21faW1hZ2VHZW5lcmF0b3IuZ2V0KCkgc2V0UmVxdWVz
dGVkVGltZVRvbGVyYW5jZUFmdGVyOmtDTVRpbWVaZXJvXTsKKworICAgIExPRyhNZWRpYSwgIk1l
ZGlhUGxheWVyUHJpdmF0ZUFWRm91bmRhdGlvbk9iakM6OmNyZWF0ZUltYWdlR2VuZXJhdG9yKCVw
KSAtIHJldHVybmluZyAlcCIsIHRoaXMsIG1faW1hZ2VHZW5lcmF0b3IuZ2V0KCkpOworfQorCit2
b2lkIE1lZGlhUGxheWVyUHJpdmF0ZUFWRm91bmRhdGlvbk9iakM6OmRlc3Ryb3lDb250ZXh0Vmlk
ZW9SZW5kZXJlcigpCit7CisgICAgaWYgKCFtX2ltYWdlR2VuZXJhdG9yKQorICAgICAgICByZXR1
cm47CisKKyAgICBMT0coTWVkaWEsICJNZWRpYVBsYXllclByaXZhdGVBVkZvdW5kYXRpb25PYmpD
OjpkZXN0cm95Q29udGV4dFZpZGVvUmVuZGVyZXIoJXApIC0gZGVzdHJveWluZyAgJXAiLCB0aGlz
LCBtX2ltYWdlR2VuZXJhdG9yLmdldCgpKTsKKworICAgIG1faW1hZ2VHZW5lcmF0b3IgPSAwOwor
fQorCit2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZUFWRm91bmRhdGlvbk9iakM6OmNyZWF0ZVZpZGVv
TGF5ZXIoKQoreworICAgIGlmICghbV9hdlBsYXllcikKKyAgICAgICAgcmV0dXJuOworCisgICAg
aWYgKCFtX3ZpZGVvTGF5ZXIpIHsKKyAgICAgICAgbV92aWRlb0xheWVyLmFkb3B0TlMoW1tBVlBs
YXllckxheWVyIGFsbG9jXSBpbml0XSk7CisgICAgICAgIFttX3ZpZGVvTGF5ZXIuZ2V0KCkgc2V0
UGxheWVyOm1fYXZQbGF5ZXIuZ2V0KCldOworI2lmbmRlZiBOREVCVUcKKyAgICAgICAgW21fdmlk
ZW9MYXllci5nZXQoKSBzZXROYW1lOkAiVmlkZW8gbGF5ZXIiXTsKKyNlbmRpZgorICAgICAgICBM
T0coTWVkaWEsICJNZWRpYVBsYXllclByaXZhdGVBVkZvdW5kYXRpb25PYmpDOjpjcmVhdGVWaWRl
b0xheWVyKCVwKSAtIHJldHVybmluZyAlcCIsIHRoaXMsIG1fdmlkZW9MYXllci5nZXQoKSk7Cisg
ICAgfQorfQorCit2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZUFWRm91bmRhdGlvbk9iakM6OmRlc3Ry
b3lWaWRlb0xheWVyKCkKK3sKKyAgICBpZiAoIW1fdmlkZW9MYXllcikKKyAgICAgICAgcmV0dXJu
OworCisgICAgTE9HKE1lZGlhLCAiTWVkaWFQbGF5ZXJQcml2YXRlQVZGb3VuZGF0aW9uT2JqQzo6
ZGVzdHJveVZpZGVvTGF5ZXIoJXApIC0gZGVzdHJveWluZyIsIHRoaXMsIG1fdmlkZW9MYXllci5n
ZXQoKSk7CisKKyAgICBbbV92aWRlb0xheWVyLmdldCgpIHNldFBsYXllcjpuaWxdOworCisgICAg
bV92aWRlb0xheWVyID0gMDsKK30KKworYm9vbCBNZWRpYVBsYXllclByaXZhdGVBVkZvdW5kYXRp
b25PYmpDOjpoYXNBdmFpbGFibGVWaWRlb0ZyYW1lKCkgY29uc3QKK3sKKyAgICByZXR1cm4gKG1f
dmlkZW9GcmFtZUhhc0RyYXduIHx8IChtX3ZpZGVvTGF5ZXIgJiYgW21fdmlkZW9MYXllci5nZXQo
KSBpc1JlYWR5Rm9yRGlzcGxheV0pKTsKK30KKwordm9pZCBNZWRpYVBsYXllclByaXZhdGVBVkZv
dW5kYXRpb25PYmpDOjpjcmVhdGVBVkFzc2V0Rm9yVVJMKGNvbnN0IFN0cmluZyYgdXJsKQorewor
ICAgIGlmIChtX2F2QXNzZXQpCisgICAgICAgIHJldHVybjsKKworICAgIExPRyhNZWRpYSwgIk1l
ZGlhUGxheWVyUHJpdmF0ZUFWRm91bmRhdGlvbk9iakM6OmNyZWF0ZUFWQXNzZXRGb3JVUkwoJXAp
IiwgdGhpcyk7CisKKyAgICBzZXREZWxheUNhbGxiYWNrcyh0cnVlKTsKKworICAgIE5TRGljdGlv
bmFyeSAqb3B0aW9ucyA9IFtOU0RpY3Rpb25hcnkgZGljdGlvbmFyeVdpdGhPYmplY3RzQW5kS2V5
czoKKyAgICAgICAgICAgICAgICAgICAgICAgIFtOU051bWJlciBudW1iZXJXaXRoSW50OkFWQXNz
ZXRSZWZlcmVuY2VSZXN0cmljdGlvbkZvcmJpZFJlbW90ZVJlZmVyZW5jZVRvTG9jYWwgfCBBVkFz
c2V0UmVmZXJlbmNlUmVzdHJpY3Rpb25Gb3JiaWRMb2NhbFJlZmVyZW5jZVRvUmVtb3RlXSwgQVZV
UkxBc3NldFJlZmVyZW5jZVJlc3RyaWN0aW9uc0tleSwgCisgICAgICAgICAgICAgICAgICAgICAg
ICBuaWxdOworICAgIE5TVVJMICpjb2NvYVVSTCA9IEtVUkwoUGFyc2VkVVJMU3RyaW5nLCB1cmwp
OworICAgIG1fYXZBc3NldC5hZG9wdE5TKFtbQVZVUkxBc3NldCBhbGxvY10gaW5pdFdpdGhVUkw6
Y29jb2FVUkwgb3B0aW9uczpvcHRpb25zXSk7CisKKyAgICBtX2hhdmVDaGVja2VkUGxheWFiaWxp
dHkgPSBmYWxzZTsKKworICAgIHNldERlbGF5Q2FsbGJhY2tzKGZhbHNlKTsKK30KKwordm9pZCBN
ZWRpYVBsYXllclByaXZhdGVBVkZvdW5kYXRpb25PYmpDOjpjcmVhdGVBVlBsYXllcigpCit7Cisg
ICAgaWYgKG1fYXZQbGF5ZXIpCisgICAgICAgIHJldHVybjsKKworICAgIExPRyhNZWRpYSwgIk1l
ZGlhUGxheWVyUHJpdmF0ZUFWRm91bmRhdGlvbk9iakM6OmNyZWF0ZUFWUGxheWVyKCVwKSIsIHRo
aXMpOworCisgICAgc2V0RGVsYXlDYWxsYmFja3ModHJ1ZSk7CisKKyAgICBtX2F2UGxheWVyLmFk
b3B0TlMoW1tBVlBsYXllciBhbGxvY10gaW5pdF0pOworICAgIFttX2F2UGxheWVyLmdldCgpIGFk
ZE9ic2VydmVyOm1fb2JqY09ic2VydmVyLmdldCgpIGZvcktleVBhdGg6QCJyYXRlIiBvcHRpb25z
Om5pbCBjb250ZXh0Oih2b2lkICopTWVkaWFQbGF5ZXJBVkZvdW5kYXRpb25PYnNlcnZhdGlvbkNv
bnRleHRQbGF5ZXJdOworICAgIAorICAgIC8vIEFkZCBhIHRpbWUgb2JzZXJ2ZXIsIGFzayB0byBi
ZSBjYWxsZWQgaW5mcmVxdWVudGx5IGJlY2F1c2Ugd2UgZG9uJ3QgcmVhbGx5IHdhbnQgcGVyaW9k
aWMgY2FsbGJhY2tzIGJ1dAorICAgIC8vIG91ciBvYnNlcnZlciB3aWxsIGFsc28gYmUgY2FsbGVk
IHdoZW5ldmVyIGEgc2VlayBoYXBwZW5zLgorICAgIGNvbnN0IGRvdWJsZSB2ZXJ5TG9uZ0ludGVy
dmFsID0gNjAgKiA2MCAqIDI0ICogMzA7CisgICAgV2ViQ29yZUFWRk1vdmllT2JzZXJ2ZXIgKm9i
c2VydmVyID0gbV9vYmpjT2JzZXJ2ZXIuZ2V0KCk7CisgICAgbV90aW1lT2JzZXJ2ZXIgPSBbbV9h
dlBsYXllci5nZXQoKSBhZGRQZXJpb2RpY1RpbWVPYnNlcnZlckZvckludGVydmFsOkNNVGltZU1h
a2VXaXRoU2Vjb25kcyh2ZXJ5TG9uZ0ludGVydmFsLCAxMCkgcXVldWU6bmlsIHVzaW5nQmxvY2s6
XihDTVRpbWUgdGltZSl7CisgICAgICAgIFtvYnNlcnZlciB0aW1lQ2hhbmdlZDpDTVRpbWVHZXRT
ZWNvbmRzKHRpbWUpXTsKKyAgICB9XTsKKworICAgIHNldERlbGF5Q2FsbGJhY2tzKGZhbHNlKTsK
K30KKwordm9pZCBNZWRpYVBsYXllclByaXZhdGVBVkZvdW5kYXRpb25PYmpDOjpjcmVhdGVBVlBs
YXllckl0ZW0oKQoreworICAgIGlmIChtX2F2UGxheWVySXRlbSkKKyAgICAgICAgcmV0dXJuOwor
CisgICAgTE9HKE1lZGlhLCAiTWVkaWFQbGF5ZXJQcml2YXRlQVZGb3VuZGF0aW9uT2JqQzo6Y3Jl
YXRlQVZQbGF5ZXJJdGVtKCVwKSIsIHRoaXMpOworCisgICAgQVNTRVJUKG1fYXZQbGF5ZXIpOwor
CisgICAgc2V0RGVsYXlDYWxsYmFja3ModHJ1ZSk7CisKKyAgICAvLyBDcmVhdGUgdGhlIHBsYXll
ciBpdGVtIHNvIHdlIGNhbiBsb2FkIG1lZGlhIGRhdGEuIAorICAgIG1fYXZQbGF5ZXJJdGVtLmFk
b3B0TlMoW1tBVlBsYXllckl0ZW0gYWxsb2NdIGluaXRXaXRoQXNzZXQ6bV9hdkFzc2V0LmdldCgp
XSk7CisgICAgCisgICAgW1tOU05vdGlmaWNhdGlvbkNlbnRlciBkZWZhdWx0Q2VudGVyXSBhZGRP
YnNlcnZlcjptX29iamNPYnNlcnZlci5nZXQoKSBzZWxlY3RvcjpAc2VsZWN0b3IoZGlkRW5kOikg
bmFtZTpBVlBsYXllckl0ZW1EaWRQbGF5VG9FbmRUaW1lTm90aWZpY2F0aW9uIG9iamVjdDptX2F2
UGxheWVySXRlbS5nZXQoKV07CisKKyAgICBmb3IgKE5TU3RyaW5nICprZXlOYW1lIGluIGl0ZW1L
Vk9Qcm9wZXJ0aWVzKCkpCisgICAgICAgIFttX2F2UGxheWVySXRlbS5nZXQoKSBhZGRPYnNlcnZl
cjptX29iamNPYnNlcnZlci5nZXQoKSBmb3JLZXlQYXRoOmtleU5hbWUgb3B0aW9uczpuaWwgY29u
dGV4dDoodm9pZCAqKU1lZGlhUGxheWVyQVZGb3VuZGF0aW9uT2JzZXJ2YXRpb25Db250ZXh0UGxh
eWVySXRlbV07CisKKyAgICBbbV9hdlBsYXllci5nZXQoKSByZXBsYWNlQ3VycmVudEl0ZW1XaXRo
UGxheWVySXRlbTptX2F2UGxheWVySXRlbS5nZXQoKV07CisKKyAgICBzZXREZWxheUNhbGxiYWNr
cyhmYWxzZSk7Cit9CisKK3ZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlQVZGb3VuZGF0aW9uT2JqQzo6
Y2hlY2tQbGF5YWJpbGl0eSgpCit7CisgICAgaWYgKG1faGF2ZUNoZWNrZWRQbGF5YWJpbGl0eSkK
KyAgICAgICAgcmV0dXJuOworICAgIG1faGF2ZUNoZWNrZWRQbGF5YWJpbGl0eSA9IHRydWU7CisK
KyAgICBMT0coTWVkaWEsICJNZWRpYVBsYXllclByaXZhdGVBVkZvdW5kYXRpb25PYmpDOjpjaGVj
a1BsYXlhYmlsaXR5KCVwKSIsIHRoaXMpOworCisgICAgW21fYXZBc3NldC5nZXQoKSBsb2FkVmFs
dWVzQXN5bmNocm9ub3VzbHlGb3JLZXlzOltOU0FycmF5IGFycmF5V2l0aE9iamVjdDpAInBsYXlh
YmxlIl0gY29tcGxldGlvbkhhbmRsZXI6XnsKKyAgICAgICAgW21fb2JqY09ic2VydmVyLmdldCgp
IHBsYXlhYmxlS25vd25dOworICAgIH1dOworfQorCit2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZUFW
Rm91bmRhdGlvbk9iakM6OmJlZ2luTG9hZGluZ01ldGFkYXRhKCkKK3sKKyAgICBMT0coTWVkaWEs
ICJNZWRpYVBsYXllclByaXZhdGVBVkZvdW5kYXRpb25PYmpDOjpiZWdpbkxvYWRpbmdNZXRhZGF0
YSglcCkgLSByZXF1ZXN0aW5nIG1ldGFkYXRhIGxvYWRpbmciLCB0aGlzKTsKKyAgICBbbV9hdkFz
c2V0LmdldCgpIGxvYWRWYWx1ZXNBc3luY2hyb25vdXNseUZvcktleXM6W2Fzc2V0TWV0YWRhdGFL
ZXlOYW1lcygpIHJldGFpbl0gY29tcGxldGlvbkhhbmRsZXI6XnsKKyAgICAgICAgW21fb2JqY09i
c2VydmVyLmdldCgpIG1ldGFkYXRhTG9hZGVkXTsKKyAgICB9XTsKK30KKworTWVkaWFQbGF5ZXJQ
cml2YXRlQVZGb3VuZGF0aW9uOjpJdGVtU3RhdHVzIE1lZGlhUGxheWVyUHJpdmF0ZUFWRm91bmRh
dGlvbk9iakM6OnBsYXllckl0ZW1TdGF0dXMoKSBjb25zdAoreworICAgIGlmICghbV9hdlBsYXll
ckl0ZW0pCisgICAgICAgIHJldHVybiBNZWRpYVBsYXllclByaXZhdGVBVkZvdW5kYXRpb246Ok1l
ZGlhUGxheWVyQVZQbGF5ZXJJdGVtU3RhdHVzRG9lc05vdEV4aXN0OworCisgICAgQVZQbGF5ZXJJ
dGVtU3RhdHVzIHN0YXR1cyA9IFttX2F2UGxheWVySXRlbS5nZXQoKSBzdGF0dXNdOworICAgIGlm
IChzdGF0dXMgPT0gQVZQbGF5ZXJJdGVtU3RhdHVzVW5rbm93bikKKyAgICAgICAgcmV0dXJuIE1l
ZGlhUGxheWVyUHJpdmF0ZUFWRm91bmRhdGlvbjo6TWVkaWFQbGF5ZXJBVlBsYXllckl0ZW1TdGF0
dXNVbmtub3duOworICAgIGlmIChzdGF0dXMgPT0gQVZQbGF5ZXJJdGVtU3RhdHVzRmFpbGVkKQor
ICAgICAgICByZXR1cm4gTWVkaWFQbGF5ZXJQcml2YXRlQVZGb3VuZGF0aW9uOjpNZWRpYVBsYXll
ckFWUGxheWVySXRlbVN0YXR1c0ZhaWxlZDsKKyAgICBpZiAoW21fYXZQbGF5ZXJJdGVtLmdldCgp
IGlzUGxheWJhY2tMaWtlbHlUb0tlZXBVcF0pCisgICAgICAgIHJldHVybiBNZWRpYVBsYXllclBy
aXZhdGVBVkZvdW5kYXRpb246Ok1lZGlhUGxheWVyQVZQbGF5ZXJJdGVtU3RhdHVzUGxheWJhY2tM
aWtlbHlUb0tlZXBVcDsKKyAgICBpZiAoW21fYXZQbGF5ZXJJdGVtLmdldCgpIGlzUGxheWJhY2tC
dWZmZXJGdWxsXSkKKyAgICAgICAgcmV0dXJuIE1lZGlhUGxheWVyUHJpdmF0ZUFWRm91bmRhdGlv
bjo6TWVkaWFQbGF5ZXJBVlBsYXllckl0ZW1TdGF0dXNQbGF5YmFja0J1ZmZlckZ1bGw7CisgICAg
aWYgKFttX2F2UGxheWVySXRlbS5nZXQoKSBpc1BsYXliYWNrQnVmZmVyRW1wdHldKQorICAgICAg
ICByZXR1cm4gTWVkaWFQbGF5ZXJQcml2YXRlQVZGb3VuZGF0aW9uOjpNZWRpYVBsYXllckFWUGxh
eWVySXRlbVN0YXR1c1BsYXliYWNrQnVmZmVyRW1wdHk7CisKKyAgICByZXR1cm4gTWVkaWFQbGF5
ZXJQcml2YXRlQVZGb3VuZGF0aW9uOjpNZWRpYVBsYXllckFWUGxheWVySXRlbVN0YXR1c1JlYWR5
VG9QbGF5OworfQorCitQbGF0Zm9ybU1lZGlhIE1lZGlhUGxheWVyUHJpdmF0ZUFWRm91bmRhdGlv
bk9iakM6OnBsYXRmb3JtTWVkaWEoKSBjb25zdAoreworICAgIExPRyhNZWRpYSwgIk1lZGlhUGxh
eWVyUHJpdmF0ZUFWRm91bmRhdGlvbk9iakM6OnBsYXRmb3JtTWVkaWEoJXApIiwgdGhpcyk7Cisg
ICAgUGxhdGZvcm1NZWRpYSBwbTsKKyAgICBwbS50eXBlID0gUGxhdGZvcm1NZWRpYTo6QVZGb3Vu
ZGF0aW9uTWVkaWFQbGF5ZXJUeXBlOworICAgIHBtLm1lZGlhLmF2Zk1lZGlhUGxheWVyID0gbV9h
dlBsYXllci5nZXQoKTsKKyAgICByZXR1cm4gcG07Cit9CisKK1BsYXRmb3JtTGF5ZXIqIE1lZGlh
UGxheWVyUHJpdmF0ZUFWRm91bmRhdGlvbk9iakM6OnBsYXRmb3JtTGF5ZXIoKSBjb25zdAorewor
ICAgIExPRyhNZWRpYSwgIk1lZGlhUGxheWVyUHJpdmF0ZUFWRm91bmRhdGlvbk9iakM6OnBsYXRm
b3JtTGF5ZXIoJXApIiwgdGhpcyk7CisgICAgcmV0dXJuIG1fdmlkZW9MYXllci5nZXQoKTsKK30K
Kwordm9pZCBNZWRpYVBsYXllclByaXZhdGVBVkZvdW5kYXRpb25PYmpDOjpwbGF0Zm9ybVNldFZp
c2libGUoYm9vbCBpc1Zpc2libGUpCit7CisgICAgW0NBVHJhbnNhY3Rpb24gYmVnaW5dOworICAg
IFtDQVRyYW5zYWN0aW9uIHNldERpc2FibGVBY3Rpb25zOllFU107ICAgIAorICAgIGlmIChtX3Zp
ZGVvTGF5ZXIpCisgICAgICAgIFttX3ZpZGVvTGF5ZXIuZ2V0KCkgc2V0SGlkZGVuOiFpc1Zpc2li
bGVdOworICAgIFtDQVRyYW5zYWN0aW9uIGNvbW1pdF07Cit9CisgICAgCit2b2lkIE1lZGlhUGxh
eWVyUHJpdmF0ZUFWRm91bmRhdGlvbk9iakM6OnBsYXRmb3JtUGxheSgpCit7CisgICAgTE9HKE1l
ZGlhLCAiTWVkaWFQbGF5ZXJQcml2YXRlQVZGb3VuZGF0aW9uT2JqQzo6cGxhdGZvcm1QbGF5KCVw
KSIsIHRoaXMpOworICAgIGlmICghbWV0YURhdGFBdmFpbGFibGUoKSkKKyAgICAgICAgcmV0dXJu
OworCisgICAgc2V0RGVsYXlDYWxsYmFja3ModHJ1ZSk7CisgICAgW21fYXZQbGF5ZXIuZ2V0KCkg
c2V0UmF0ZTpyZXF1ZXN0ZWRSYXRlKCldOworICAgIHNldERlbGF5Q2FsbGJhY2tzKGZhbHNlKTsK
K30KKwordm9pZCBNZWRpYVBsYXllclByaXZhdGVBVkZvdW5kYXRpb25PYmpDOjpwbGF0Zm9ybVBh
dXNlKCkKK3sKKyAgICBMT0coTWVkaWEsICJNZWRpYVBsYXllclByaXZhdGVBVkZvdW5kYXRpb25P
YmpDOjpwbGF0Zm9ybVBhdXNlKCVwKSIsIHRoaXMpOworICAgIGlmICghbWV0YURhdGFBdmFpbGFi
bGUoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgc2V0RGVsYXlDYWxsYmFja3ModHJ1ZSk7Cisg
ICAgW21fYXZQbGF5ZXIuZ2V0KCkgc2V0UmF0ZTpuaWxdOworICAgIHNldERlbGF5Q2FsbGJhY2tz
KGZhbHNlKTsKK30KKworZmxvYXQgTWVkaWFQbGF5ZXJQcml2YXRlQVZGb3VuZGF0aW9uT2JqQzo6
cGxhdGZvcm1EdXJhdGlvbigpIGNvbnN0Cit7CisgICAgLy8gRG8gbm90IGFzayB0aGUgYXNzZXQg
Zm9yIGR1cmF0aW9uIGJlZm9yZSBpdCBoYXMgYmVlbiBsb2FkZWQgb3IgaXQgd2lsbCBmZXRjaCB0
aGUKKyAgICAvLyBhbnN3ZXIgc3luY2hyb25vdXNseS4KKyAgICBpZiAoIW1fYXZBc3NldCB8fCBh
c3NldFN0YXR1cygpIDwgTWVkaWFQbGF5ZXJBVkFzc2V0U3RhdHVzTG9hZGVkKQorICAgICAgICAg
cmV0dXJuIGludmFsaWRUaW1lKCk7CisgICAgCisgICAgQ01UaW1lIGNtRHVyYXRpb247CisgICAg
CisgICAgLy8gQ2hlY2sgdGhlIEFWSXRlbSBpZiB3ZSBoYXZlIG9uZSBhbmQgaXQgaGFzIGxvYWRl
ZCBkdXJhdGlvbiwgc29tZSBhc3NldHMgbmV2ZXIgcmVwb3J0IGR1cmF0aW9uLgorICAgIGlmICht
X2F2UGxheWVySXRlbSAmJiBwbGF5ZXJJdGVtU3RhdHVzKCkgPj0gTWVkaWFQbGF5ZXJBVlBsYXll
ckl0ZW1TdGF0dXNSZWFkeVRvUGxheSkKKyAgICAgICAgY21EdXJhdGlvbiA9IFttX2F2UGxheWVy
SXRlbS5nZXQoKSBkdXJhdGlvbl07CisgICAgZWxzZQorICAgICAgICBjbUR1cmF0aW9uPSBbbV9h
dkFzc2V0LmdldCgpIGR1cmF0aW9uXTsKKworICAgIGlmIChDTVRJTUVfSVNfTlVNRVJJQyhjbUR1
cmF0aW9uKSkKKyAgICAgICAgcmV0dXJuIG5hcnJvd1ByZWNpc2lvblRvRmxvYXQoQ01UaW1lR2V0
U2Vjb25kcyhjbUR1cmF0aW9uKSk7CisKKyAgICBpZiAoQ01USU1FX0lTX0lOREVGSU5JVEUoY21E
dXJhdGlvbikpIHsKKyAgICAgICAgaWYgKCFbW21fYXZBc3NldC5nZXQoKSB0cmFja3NdIGNvdW50
XSkKKyAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICBlbHNlCisgICAgICAgICAgICByZXR1
cm4gbnVtZXJpY19saW1pdHM8ZmxvYXQ+OjppbmZpbml0eSgpOworICAgIH0KKworICAgIExPRyhN
ZWRpYSwgIk1lZGlhUGxheWVyUHJpdmF0ZUFWRm91bmRhdGlvbk9iakM6OnBsYXRmb3JtRHVyYXRp
b24oJXApIC0gaW52YWxpZCBkdXJhdGlvbiwgcmV0dXJuaW5nICUuMGYiLCB0aGlzLCBpbnZhbGlk
VGltZSgpKTsKKyAgICByZXR1cm4gaW52YWxpZFRpbWUoKTsKK30KKworZmxvYXQgTWVkaWFQbGF5
ZXJQcml2YXRlQVZGb3VuZGF0aW9uT2JqQzo6Y3VycmVudFRpbWUoKSBjb25zdAoreworICAgIGlm
ICghbWV0YURhdGFBdmFpbGFibGUoKSB8fCAhbV9hdlBsYXllckl0ZW0pCisgICAgICAgIHJldHVy
biAwOworCisgICAgQ01UaW1lIGl0ZW1UaW1lID0gW21fYXZQbGF5ZXJJdGVtLmdldCgpIGN1cnJl
bnRUaW1lXTsKKyAgICBpZiAoQ01USU1FX0lTX05VTUVSSUMoaXRlbVRpbWUpKQorICAgICAgICBy
ZXR1cm4gbmFycm93UHJlY2lzaW9uVG9GbG9hdChDTVRpbWVHZXRTZWNvbmRzKGl0ZW1UaW1lKSk7
CisKKyAgICByZXR1cm4gMDsKK30KKwordm9pZCBNZWRpYVBsYXllclByaXZhdGVBVkZvdW5kYXRp
b25PYmpDOjpzZWVrVG9UaW1lKGZsb2F0IHRpbWUpCit7CisgICAgLy8gc2V0Q3VycmVudFRpbWUg
Z2VuZXJhdGVzIHNldmVyYWwgZXZlbnQgY2FsbGJhY2tzLCB1cGRhdGUgYWZ0ZXJ3YXJkcy4KKyAg
ICBzZXREZWxheUNhbGxiYWNrcyh0cnVlKTsKKworICAgIFdlYkNvcmVBVkZNb3ZpZU9ic2VydmVy
ICpvYnNlcnZlciA9IG1fb2JqY09ic2VydmVyLmdldCgpOworICAgIFttX2F2UGxheWVySXRlbS5n
ZXQoKSBzZWVrVG9UaW1lOkNNVGltZU1ha2VXaXRoU2Vjb25kcyh0aW1lLCA2MDApIHRvbGVyYW5j
ZUJlZm9yZTprQ01UaW1lWmVybyB0b2xlcmFuY2VBZnRlcjprQ01UaW1lWmVybyBjb21wbGV0aW9u
SGFuZGxlcjpeKEJPT0wgZmluaXNoZWQpIHsKKyAgICAgICAgW29ic2VydmVyIHNlZWtDb21wbGV0
ZWQ6ZmluaXNoZWRdOworICAgIH1dOworCisgICAgc2V0RGVsYXlDYWxsYmFja3MoZmFsc2UpOwor
fQorCit2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZUFWRm91bmRhdGlvbk9iakM6OnNldFZvbHVtZShm
bG9hdCB2b2x1bWUpCit7CisgICAgaWYgKCFtZXRhRGF0YUF2YWlsYWJsZSgpKQorICAgICAgICBy
ZXR1cm47CisKKyAgICBbbV9hdlBsYXllci5nZXQoKSBzZXRWb2x1bWU6dm9sdW1lXTsKK30KKwor
dm9pZCBNZWRpYVBsYXllclByaXZhdGVBVkZvdW5kYXRpb25PYmpDOjpzZXRDbG9zZWRDYXB0aW9u
c1Zpc2libGUoYm9vbCBjbG9zZWRDYXB0aW9uc1Zpc2libGUpCit7CisgICAgaWYgKCFtZXRhRGF0
YUF2YWlsYWJsZSgpKQorICAgICAgICByZXR1cm47CisKKyAgICBMT0coTWVkaWEsICJNZWRpYVBs
YXllclByaXZhdGVBVkZvdW5kYXRpb25PYmpDOjpzZXRDbG9zZWRDYXB0aW9uc1Zpc2libGUoJXAp
IC0gc2V0dGluZyB0byAlcyIsIHRoaXMsIGJvb2xTdHJpbmcoY2xvc2VkQ2FwdGlvbnNWaXNpYmxl
KSk7CisgICAgW21fYXZQbGF5ZXIuZ2V0KCkgc2V0Q2xvc2VkQ2FwdGlvbkRpc3BsYXlFbmFibGVk
OmNsb3NlZENhcHRpb25zVmlzaWJsZV07Cit9CisKK3ZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlQVZG
b3VuZGF0aW9uT2JqQzo6dXBkYXRlUmF0ZSgpCit7CisgICAgc2V0RGVsYXlDYWxsYmFja3ModHJ1
ZSk7CisgICAgW21fYXZQbGF5ZXIuZ2V0KCkgc2V0UmF0ZTpyZXF1ZXN0ZWRSYXRlKCldOworICAg
IHNldERlbGF5Q2FsbGJhY2tzKGZhbHNlKTsKK30KKworZmxvYXQgTWVkaWFQbGF5ZXJQcml2YXRl
QVZGb3VuZGF0aW9uT2JqQzo6cmF0ZSgpIGNvbnN0Cit7CisgICAgaWYgKCFtZXRhRGF0YUF2YWls
YWJsZSgpKQorICAgICAgICByZXR1cm4gMDsKKworICAgIHJldHVybiBbbV9hdlBsYXllci5nZXQo
KSByYXRlXTsKK30KKworUGFzc1JlZlB0cjxUaW1lUmFuZ2VzPiBNZWRpYVBsYXllclByaXZhdGVB
VkZvdW5kYXRpb25PYmpDOjpwbGF0Zm9ybUJ1ZmZlcmVkVGltZVJhbmdlcygpIGNvbnN0Cit7Cisg
ICAgUmVmUHRyPFRpbWVSYW5nZXM+IHRpbWVSYW5nZXMgPSBUaW1lUmFuZ2VzOjpjcmVhdGUoKTsK
KworICAgIGlmICghbV9hdlBsYXllckl0ZW0pCisgICAgICAgIHJldHVybiB0aW1lUmFuZ2VzLnJl
bGVhc2UoKTsKKworICAgIE5TQXJyYXkgKmxvYWRlZFJhbmdlcyA9IFttX2F2UGxheWVySXRlbS5n
ZXQoKSBsb2FkZWRUaW1lUmFuZ2VzXTsKKyAgICBmb3IgKE5TVmFsdWUgKnRoaXNSYW5nZVZhbHVl
IGluIGxvYWRlZFJhbmdlcykgeworICAgICAgICBDTVRpbWVSYW5nZSB0aW1lUmFuZ2UgPSBbdGhp
c1JhbmdlVmFsdWUgQ01UaW1lUmFuZ2VWYWx1ZV07CisgICAgICAgIGlmIChDTVRJTUVSQU5HRV9J
U19WQUxJRCh0aW1lUmFuZ2UpICYmICFDTVRJTUVSQU5HRV9JU19FTVBUWSh0aW1lUmFuZ2UpKSB7
CisgICAgICAgICAgICBmbG9hdCByYW5nZVN0YXJ0ID0gbmFycm93UHJlY2lzaW9uVG9GbG9hdChD
TVRpbWVHZXRTZWNvbmRzKHRpbWVSYW5nZS5zdGFydCkpOworICAgICAgICAgICAgZmxvYXQgcmFu
Z2VFbmQgPSBuYXJyb3dQcmVjaXNpb25Ub0Zsb2F0KENNVGltZUdldFNlY29uZHMoQ01UaW1lUmFu
Z2VHZXRFbmQodGltZVJhbmdlKSkpOworICAgICAgICAgICAgdGltZVJhbmdlcy0+YWRkKHJhbmdl
U3RhcnQsIHJhbmdlRW5kKTsKKyAgICAgICAgfQorICAgIH0KKyAgICByZXR1cm4gdGltZVJhbmdl
cy5yZWxlYXNlKCk7Cit9CisKK2Zsb2F0IE1lZGlhUGxheWVyUHJpdmF0ZUFWRm91bmRhdGlvbk9i
akM6OnBsYXRmb3JtTWF4VGltZVNlZWthYmxlKCkgY29uc3QKK3sKKyAgICBOU0FycmF5ICpzZWVr
YWJsZVJhbmdlcyA9IFttX2F2UGxheWVySXRlbS5nZXQoKSBzZWVrYWJsZVRpbWVSYW5nZXNdOwor
ICAgIGlmICghc2Vla2FibGVSYW5nZXMpCisgICAgICAgIHJldHVybiAwOworCisgICAgZmxvYXQg
bWF4VGltZVNlZWthYmxlID0gMDsKKyAgICBmb3IgKE5TVmFsdWUgKnRoaXNSYW5nZVZhbHVlIGlu
IHNlZWthYmxlUmFuZ2VzKSB7CisgICAgICAgIENNVGltZVJhbmdlIHRpbWVSYW5nZSA9IFt0aGlz
UmFuZ2VWYWx1ZSBDTVRpbWVSYW5nZVZhbHVlXTsKKyAgICAgICAgaWYgKCFDTVRJTUVSQU5HRV9J
U19WQUxJRCh0aW1lUmFuZ2UpIHx8IENNVElNRVJBTkdFX0lTX0VNUFRZKHRpbWVSYW5nZSkpCisg
ICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgCisgICAgICAgIGZsb2F0IGVuZE9mUmFuZ2Ug
PSBuYXJyb3dQcmVjaXNpb25Ub0Zsb2F0KENNVGltZUdldFNlY29uZHMoQ01UaW1lUmFuZ2VHZXRF
bmQodGltZVJhbmdlKSkpOworICAgICAgICBpZiAobWF4VGltZVNlZWthYmxlIDwgZW5kT2ZSYW5n
ZSkKKyAgICAgICAgICAgIG1heFRpbWVTZWVrYWJsZSA9IGVuZE9mUmFuZ2U7CisgICAgfQorICAg
IHJldHVybiBtYXhUaW1lU2Vla2FibGU7ICAgCit9CisKK2Zsb2F0IE1lZGlhUGxheWVyUHJpdmF0
ZUFWRm91bmRhdGlvbk9iakM6OnBsYXRmb3JtTWF4VGltZUxvYWRlZCgpIGNvbnN0Cit7CisgICAg
TlNBcnJheSAqbG9hZGVkUmFuZ2VzID0gW21fYXZQbGF5ZXJJdGVtLmdldCgpIGxvYWRlZFRpbWVS
YW5nZXNdOworICAgIGlmICghbG9hZGVkUmFuZ2VzKQorICAgICAgICByZXR1cm4gMDsKKworICAg
IGZsb2F0IG1heFRpbWVMb2FkZWQgPSAwOworICAgIGZvciAoTlNWYWx1ZSAqdGhpc1JhbmdlVmFs
dWUgaW4gbG9hZGVkUmFuZ2VzKSB7CisgICAgICAgIENNVGltZVJhbmdlIHRpbWVSYW5nZSA9IFt0
aGlzUmFuZ2VWYWx1ZSBDTVRpbWVSYW5nZVZhbHVlXTsKKyAgICAgICAgaWYgKCFDTVRJTUVSQU5H
RV9JU19WQUxJRCh0aW1lUmFuZ2UpIHx8IENNVElNRVJBTkdFX0lTX0VNUFRZKHRpbWVSYW5nZSkp
CisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgCisgICAgICAgIGZsb2F0IGVuZE9mUmFu
Z2UgPSBuYXJyb3dQcmVjaXNpb25Ub0Zsb2F0KENNVGltZUdldFNlY29uZHMoQ01UaW1lUmFuZ2VH
ZXRFbmQodGltZVJhbmdlKSkpOworICAgICAgICBpZiAobWF4VGltZUxvYWRlZCA8IGVuZE9mUmFu
Z2UpCisgICAgICAgICAgICBtYXhUaW1lTG9hZGVkID0gZW5kT2ZSYW5nZTsKKyAgICB9CisKKyAg
ICByZXR1cm4gbWF4VGltZUxvYWRlZDsgICAKK30KKwordW5zaWduZWQgTWVkaWFQbGF5ZXJQcml2
YXRlQVZGb3VuZGF0aW9uT2JqQzo6dG90YWxCeXRlcygpIGNvbnN0Cit7CisgICAgaWYgKCFtZXRh
RGF0YUF2YWlsYWJsZSgpKQorICAgICAgICByZXR1cm4gMDsKKworICAgIGxvbmcgbG9uZyB0b3Rh
bE1lZGlhU2l6ZSA9IDA7CisgICAgTlNBcnJheSAqdHJhY2tzID0gW21fYXZBc3NldC5nZXQoKSB0
cmFja3NdOworICAgIGZvciAoQVZBc3NldFRyYWNrICp0aGlzVHJhY2sgaW4gdHJhY2tzKQorICAg
ICAgICB0b3RhbE1lZGlhU2l6ZSArPSBbdGhpc1RyYWNrIHRvdGFsU2FtcGxlRGF0YUxlbmd0aF07
CisKKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KHRvdGFsTWVkaWFTaXplKTsKK30K
Kwordm9pZCBNZWRpYVBsYXllclByaXZhdGVBVkZvdW5kYXRpb25PYmpDOjpzZXRBc3NldChpZCBh
c3NldCkKK3sKKyAgICBtX2F2QXNzZXQgPSBhc3NldDsKK30KKworTWVkaWFQbGF5ZXJQcml2YXRl
QVZGb3VuZGF0aW9uOjpBc3NldFN0YXR1cyBNZWRpYVBsYXllclByaXZhdGVBVkZvdW5kYXRpb25P
YmpDOjphc3NldFN0YXR1cygpIGNvbnN0Cit7CisgICAgaWYgKCFtX2F2QXNzZXQpCisgICAgICAg
IHJldHVybiBNZWRpYVBsYXllckFWQXNzZXRTdGF0dXNEb2VzTm90RXhpc3Q7CisKKyAgICBmb3Ig
KE5TU3RyaW5nICprZXlOYW1lIGluIGFzc2V0TWV0YWRhdGFLZXlOYW1lcygpKSB7CisgICAgICAg
IEFWS2V5VmFsdWVTdGF0dXMga2V5U3RhdHVzID0gW21fYXZBc3NldC5nZXQoKSBzdGF0dXNPZlZh
bHVlRm9yS2V5OmtleU5hbWUgZXJyb3I6bmlsXTsKKyAgICAgICAgaWYgKGtleVN0YXR1cyA8IEFW
S2V5VmFsdWVTdGF0dXNMb2FkZWQpCisgICAgICAgICAgICByZXR1cm4gTWVkaWFQbGF5ZXJBVkFz
c2V0U3RhdHVzTG9hZGluZzsvLyBBdCBsZWFzdCBvbmUga2V5IGlzIG5vdCBsb2FkZWQgeWV0Lgor
ICAgICAgICAKKyAgICAgICAgaWYgKGtleVN0YXR1cyA9PSBBVktleVZhbHVlU3RhdHVzRmFpbGVk
KQorICAgICAgICAgICAgcmV0dXJuIE1lZGlhUGxheWVyQVZBc3NldFN0YXR1c0ZhaWxlZDsgLy8g
QXQgbGVhc3Qgb25lIGtleSBjb3VsZCBub3QgYmUgbG9hZGVkLgorCisgICAgICAgIGlmIChrZXlT
dGF0dXMgPT0gQVZLZXlWYWx1ZVN0YXR1c0NhbmNlbGxlZCkKKyAgICAgICAgICAgIHJldHVybiBN
ZWRpYVBsYXllckFWQXNzZXRTdGF0dXNDYW5jZWxsZWQ7IC8vIExvYWRpbmcgb2YgYXQgbGVhc3Qg
b25lIGtleSB3YXMgY2FuY2VsbGVkLgorICAgIH0KKworICAgIGlmIChbW21fYXZBc3NldC5nZXQo
KSB2YWx1ZUZvcktleTpAInBsYXlhYmxlIl0gYm9vbFZhbHVlXSkKKyAgICAgICAgcmV0dXJuIE1l
ZGlhUGxheWVyQVZBc3NldFN0YXR1c1BsYXlhYmxlOworCisgICAgcmV0dXJuIE1lZGlhUGxheWVy
QVZBc3NldFN0YXR1c0xvYWRlZDsKK30KKwordm9pZCBNZWRpYVBsYXllclByaXZhdGVBVkZvdW5k
YXRpb25PYmpDOjpwYWludEN1cnJlbnRGcmFtZUluQ29udGV4dChHcmFwaGljc0NvbnRleHQqIGNv
bnRleHQsIGNvbnN0IEludFJlY3QmIHJlY3QpCit7CisgICAgaWYgKCFtZXRhRGF0YUF2YWlsYWJs
ZSgpIHx8IGNvbnRleHQtPnBhaW50aW5nRGlzYWJsZWQoKSkKKyAgICAgICAgcmV0dXJuOworCisg
ICAgcGFpbnQoY29udGV4dCwgcmVjdCk7Cit9CisKK3ZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlQVZG
b3VuZGF0aW9uT2JqQzo6cGFpbnQoR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0LCBjb25zdCBJbnRS
ZWN0JiByZWN0KQoreworICAgIGlmICghbWV0YURhdGFBdmFpbGFibGUoKSB8fCBjb250ZXh0LT5w
YWludGluZ0Rpc2FibGVkKCkpCisgICAgICAgIHJldHVybjsKKworICAgIHNldERlbGF5Q2FsbGJh
Y2tzKHRydWUpOworICAgIEJFR0lOX0JMT0NLX09CSkNfRVhDRVBUSU9OUzsKKworICAgIFJldGFp
blB0cjxDR0ltYWdlUmVmPiBpbWFnZSA9IGNyZWF0ZUltYWdlRm9yVGltZUluUmVjdChjdXJyZW50
VGltZSgpLCByZWN0KTsKKyAgICBpZiAoaW1hZ2UpIHsKKyAgICAgICAgR3JhcGhpY3NDb250ZXh0
U3RhdGVTYXZlciBzdGF0ZVNhdmVyKCpjb250ZXh0KTsKKyAgICAgICAgY29udGV4dC0+dHJhbnNs
YXRlKHJlY3QueCgpLCByZWN0LnkoKSArIHJlY3QuaGVpZ2h0KCkpOworICAgICAgICBjb250ZXh0
LT5zY2FsZShGbG9hdFNpemUoMS4wZiwgLTEuMGYpKTsKKyAgICAgICAgY29udGV4dC0+c2V0SW1h
Z2VJbnRlcnBvbGF0aW9uUXVhbGl0eShJbnRlcnBvbGF0aW9uTG93KTsKKyAgICAgICAgSW50UmVj
dCBwYWludFJlY3QoSW50UG9pbnQoMCwgMCksIEludFNpemUocmVjdC53aWR0aCgpLCByZWN0Lmhl
aWdodCgpKSk7CisgICAgICAgIENHQ29udGV4dERyYXdJbWFnZShjb250ZXh0LT5wbGF0Zm9ybUNv
bnRleHQoKSwgQ0dSZWN0TWFrZSgwLCAwLCBwYWludFJlY3Qud2lkdGgoKSwgcGFpbnRSZWN0Lmhl
aWdodCgpKSwgaW1hZ2UuZ2V0KCkpOworICAgICAgICBpbWFnZSA9IDA7CisgICAgfQorCisgICAg
RU5EX0JMT0NLX09CSkNfRVhDRVBUSU9OUzsKKyAgICBzZXREZWxheUNhbGxiYWNrcyhmYWxzZSk7
CisKKyAgICBtX3ZpZGVvRnJhbWVIYXNEcmF3biA9IHRydWU7Cit9CisKK3N0YXRpYyBIYXNoU2V0
PFN0cmluZz4gbWltZVR5cGVDYWNoZSgpCit7CisgICAgREVGSU5FX1NUQVRJQ19MT0NBTChIYXNo
U2V0PFN0cmluZz4sIGNhY2hlLCAoKSk7CisgICAgc3RhdGljIGJvb2wgdHlwZUxpc3RJbml0aWFs
aXplZCA9IGZhbHNlOworCisgICAgaWYgKHR5cGVMaXN0SW5pdGlhbGl6ZWQpCisgICAgICAgIHJl
dHVybiBjYWNoZTsKKyAgICB0eXBlTGlzdEluaXRpYWxpemVkID0gdHJ1ZTsKKworICAgIE5TQXJy
YXkgKnR5cGVzID0gW0FWVVJMQXNzZXQgYXVkaW92aXN1YWxNSU1FVHlwZXNdOworICAgIGZvciAo
TlNTdHJpbmcgKm1pbWVUeXBlIGluIHR5cGVzKQorICAgICAgICBjYWNoZS5hZGQobWltZVR5cGUp
OworCisgICAgcmV0dXJuIGNhY2hlOworfSAKKworUmV0YWluUHRyPENHSW1hZ2VSZWY+IE1lZGlh
UGxheWVyUHJpdmF0ZUFWRm91bmRhdGlvbk9iakM6OmNyZWF0ZUltYWdlRm9yVGltZUluUmVjdChm
bG9hdCB0aW1lLCBjb25zdCBJbnRSZWN0JiByZWN0KQoreworICAgIGlmICghbV9pbWFnZUdlbmVy
YXRvcikKKyAgICAgICAgY3JlYXRlQ29udGV4dFZpZGVvUmVuZGVyZXIoKTsKKyAgICBBU1NFUlQo
bV9pbWFnZUdlbmVyYXRvcik7CisKKyNpZiAhTE9HX0RJU0FCTEVECisgICAgZG91YmxlIHN0YXJ0
ID0gV1RGOjpjdXJyZW50VGltZSgpOworI2VuZGlmCisKKyAgICBbbV9pbWFnZUdlbmVyYXRvci5n
ZXQoKSBzZXRNYXhpbXVtU2l6ZTpDR1NpemUocmVjdC5zaXplKCkpXTsKKyAgICBDR0ltYWdlUmVm
IGltYWdlID0gW21faW1hZ2VHZW5lcmF0b3IuZ2V0KCkgY29weUNHSW1hZ2VBdFRpbWU6Q01UaW1l
TWFrZVdpdGhTZWNvbmRzKHRpbWUsIDYwMCkgYWN0dWFsVGltZTpuaWwgZXJyb3I6bmlsXTsKKwor
I2lmICFMT0dfRElTQUJMRUQKKyAgICBkb3VibGUgZHVyYXRpb24gPSBXVEY6OmN1cnJlbnRUaW1l
KCkgLSBzdGFydDsKKyAgICBMT0coTWVkaWEsICJNZWRpYVBsYXllclByaXZhdGVBVkZvdW5kYXRp
b25PYmpDOjpjcmVhdGVJbWFnZUZvclRpbWVJblJlY3QoJXApIC0gY3JlYXRpbmcgaW1hZ2UgdG9v
ayAlLjRmIiwgdGhpcywgbmFycm93UHJlY2lzaW9uVG9GbG9hdChkdXJhdGlvbikpOworI2VuZGlm
CisKKyAgICByZXR1cm4gaW1hZ2U7Cit9CisKK3ZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlQVZGb3Vu
ZGF0aW9uT2JqQzo6Z2V0U3VwcG9ydGVkVHlwZXMoSGFzaFNldDxTdHJpbmc+JiBzdXBwb3J0ZWRU
eXBlcykKK3sKKyAgICBzdXBwb3J0ZWRUeXBlcyA9IG1pbWVUeXBlQ2FjaGUoKTsKK30gCisKK01l
ZGlhUGxheWVyOjpTdXBwb3J0c1R5cGUgTWVkaWFQbGF5ZXJQcml2YXRlQVZGb3VuZGF0aW9uT2Jq
Qzo6c3VwcG9ydHNUeXBlKGNvbnN0IFN0cmluZyYgdHlwZSwgY29uc3QgU3RyaW5nJiBjb2RlY3Mp
Cit7CisgICAgaWYgKCFtaW1lVHlwZUNhY2hlKCkuY29udGFpbnModHlwZSkpCisgICAgICAgIHJl
dHVybiBNZWRpYVBsYXllcjo6SXNOb3RTdXBwb3J0ZWQ7CisKKyAgICAvLyBUaGUgc3BlYyBzYXlz
OgorICAgIC8vICJJbXBsZW1lbnRvcnMgYXJlIGVuY291cmFnZWQgdG8gcmV0dXJuICJtYXliZSIg
dW5sZXNzIHRoZSB0eXBlIGNhbiBiZSBjb25maWRlbnRseSBlc3RhYmxpc2hlZCBhcyBiZWluZyBz
dXBwb3J0ZWQgb3Igbm90LiIKKyAgICBpZiAoY29kZWNzLmlzRW1wdHkoKSkKKyAgICAgICAgcmV0
dXJuIE1lZGlhUGxheWVyOjpNYXlCZVN1cHBvcnRlZDsKKworICAgIE5TU3RyaW5nICp0eXBlU3Ry
aW5nID0gW05TU3RyaW5nIHN0cmluZ1dpdGhGb3JtYXQ6QCIlQDsgY29kZWNzPVwiJUBcIiIsIChO
U1N0cmluZyAqKXR5cGUsIChOU1N0cmluZyAqKWNvZGVjc107CisgICAgcmV0dXJuIFtBVlVSTEFz
c2V0IGlzUGxheWFibGVFeHRlbmRlZE1JTUVUeXBlOnR5cGVTdHJpbmddID8gTWVkaWFQbGF5ZXI6
OklzU3VwcG9ydGVkIDogTWVkaWFQbGF5ZXI6Ok1heUJlU3VwcG9ydGVkOzsKK30KKworYm9vbCBN
ZWRpYVBsYXllclByaXZhdGVBVkZvdW5kYXRpb25PYmpDOjppc0F2YWlsYWJsZSgpCit7CisgICAg
cmV0dXJuIEFWRm91bmRhdGlvbkxpYnJhcnkoKSAmJiBDb3JlTWVkaWFMaWJyYXJ5KCk7Cit9CisK
K2Zsb2F0IE1lZGlhUGxheWVyUHJpdmF0ZUFWRm91bmRhdGlvbk9iakM6Om1lZGlhVGltZUZvclRp
bWVWYWx1ZShmbG9hdCB0aW1lVmFsdWUpIGNvbnN0Cit7CisgICAgaWYgKCFtZXRhRGF0YUF2YWls
YWJsZSgpKQorICAgICAgICByZXR1cm4gdGltZVZhbHVlOworCisgICAgLy8gRklYTUUgLSBpbXBv
c3NpYmxlIHRvIGltcGxlbWVudCB1bnRpbCByZGFyOi8vODcyMTUxMCBpcyBmaXhlZC4KKyAgICBy
ZXR1cm4gdGltZVZhbHVlOworfQorCit2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZUFWRm91bmRhdGlv
bk9iakM6OnRyYWNrc0NoYW5nZWQoKQoreworICAgIGlmICghbV9hdkFzc2V0KQorICAgICAgICBy
ZXR1cm47CisKKyAgICAvLyBUaGlzIGlzIGNhbGxlZCB3aGVuZXZlciB0aGUgdHJhY2tzIGNvbGxl
Y3Rpb24gY2hhbmdlcyBzbyBjYWNoZSBoYXNWaWRlbyBhbmQgaGFzQXVkaW8gc2luY2Ugd2UgYXJl
CisgICAgLy8gYXNrZWQgYWJvdXQgdGhvc2UgZmFpcmx5IGZlcXVlbnRseS4KKyAgICBpZiAoIW1f
YXZQbGF5ZXJJdGVtKSB7CisgICAgICAgIC8vIFdlIGRvbid0IGhhdmUgYSBwbGF5ZXIgaXRlbSB5
ZXQsIHNvIGNoZWNrIHdpdGggdGhlIGFzc2V0IGJlY2F1c2Ugc29tZSBhc3NldHMgc3VwcG9ydCBp
bnNwZWN0aW9uCisgICAgICAgIC8vIHByaW9yIHRvIGJlY29taW5nIHJlYWR5IHRvIHBsYXkuCisg
ICAgICAgIHNldEhhc1ZpZGVvKFtbbV9hdkFzc2V0LmdldCgpIHRyYWNrc1dpdGhNZWRpYUNoYXJh
Y3RlcmlzdGljOkFWTWVkaWFDaGFyYWN0ZXJpc3RpY1Zpc3VhbF0gY291bnRdKTsKKyAgICAgICAg
c2V0SGFzQXVkaW8oW1ttX2F2QXNzZXQuZ2V0KCkgdHJhY2tzV2l0aE1lZGlhQ2hhcmFjdGVyaXN0
aWM6QVZNZWRpYUNoYXJhY3RlcmlzdGljQXVkaWJsZV0gY291bnRdKTsKKyAgICAgICAgc2V0SGFz
Q2xvc2VkQ2FwdGlvbnMoW1ttX2F2QXNzZXQuZ2V0KCkgdHJhY2tzV2l0aE1lZGlhVHlwZTpBVk1l
ZGlhVHlwZUNsb3NlZENhcHRpb25dIGNvdW50XSk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgYm9v
bCBoYXNWaWRlbyA9IGZhbHNlOworICAgICAgICBib29sIGhhc0F1ZGlvID0gZmFsc2U7CisgICAg
ICAgIGJvb2wgaGFzQ2FwdGlvbnMgPSBmYWxzZTsKKyAgICAgICAgTlNBcnJheSAqdHJhY2tzID0g
W21fYXZQbGF5ZXJJdGVtLmdldCgpIHRyYWNrc107CisgICAgICAgIGZvciAoQVZQbGF5ZXJJdGVt
VHJhY2sgKnRyYWNrIGluIHRyYWNrcykgeworICAgICAgICAgICAgaWYgKFt0cmFjayBpc0VuYWJs
ZWRdKSB7CisgICAgICAgICAgICAgICAgQVZBc3NldFRyYWNrICphc3NldFRyYWNrID0gW3RyYWNr
IGFzc2V0VHJhY2tdOworICAgICAgICAgICAgICAgIGlmIChbW2Fzc2V0VHJhY2sgbWVkaWFUeXBl
XSBpc0VxdWFsVG9TdHJpbmc6QVZNZWRpYVR5cGVWaWRlb10pCisgICAgICAgICAgICAgICAgICAg
IGhhc1ZpZGVvID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICBlbHNlIGlmIChbW2Fzc2V0VHJhY2sg
bWVkaWFUeXBlXSBpc0VxdWFsVG9TdHJpbmc6QVZNZWRpYVR5cGVBdWRpb10pCisgICAgICAgICAg
ICAgICAgICAgIGhhc0F1ZGlvID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICBlbHNlIGlmIChbW2Fz
c2V0VHJhY2sgbWVkaWFUeXBlXSBpc0VxdWFsVG9TdHJpbmc6QVZNZWRpYVR5cGVDbG9zZWRDYXB0
aW9uXSkKKyAgICAgICAgICAgICAgICAgICAgaGFzQ2FwdGlvbnMgPSB0cnVlOworICAgICAgICAg
ICAgfQorICAgICAgICB9CisgICAgICAgIHNldEhhc1ZpZGVvKGhhc1ZpZGVvKTsKKyAgICAgICAg
c2V0SGFzQXVkaW8oaGFzQXVkaW8pOworICAgICAgICBzZXRIYXNDbG9zZWRDYXB0aW9ucyhoYXND
YXB0aW9ucyk7CisgICAgfQorCisgICAgTE9HKE1lZGlhLCAiV2ViQ29yZUFWRk1vdmllT2JzZXJ2
ZXI6dHJhY2tzQ2hhbmdlZCglcCkgLSBoYXNWaWRlbyA9ICVzLCBoYXNBdWRpbyA9ICVzLCBoYXND
YXB0aW9ucyA9ICVzIiwgCisgICAgICAgIHRoaXMsIGJvb2xTdHJpbmcoaGFzVmlkZW8oKSksIGJv
b2xTdHJpbmcoaGFzQXVkaW8oKSksIGJvb2xTdHJpbmcoaGFzQ2xvc2VkQ2FwdGlvbnMoKSkpOwor
CisgICAgc2l6ZUNoYW5nZWQoKTsKK30KKwordm9pZCBNZWRpYVBsYXllclByaXZhdGVBVkZvdW5k
YXRpb25PYmpDOjpzaXplQ2hhbmdlZCgpCit7CisgICAgaWYgKCFtX2F2QXNzZXQpCisgICAgICAg
IHJldHVybjsKKworICAgIE5TQXJyYXkgKnRyYWNrcyA9IFttX2F2QXNzZXQuZ2V0KCkgdHJhY2tz
XTsKKworICAgIC8vIFNvbWUgYXNzZXRzIGRvbid0IHJlcG9ydCB0cmFjayBwcm9wZXJ0aWVzIHVu
dGlsIHRoZXkgYXJlIGNvbXBsZXRlbHkgcmVhZHkgdG8gcGxheSwgYnV0IHdlCisgICAgLy8gd2Fu
dCB0byByZXBvcnQgYSBzaXplIGFzIGVhcmx5IGFzIHBvc3NpYmxlIHNvIHVzZSBwcmVzZW50YXRp
b25TaXplIHdoZW4gYW4gYXNzZXQgaGFzIG5vIHRyYWNrcy4KKyAgICBpZiAobV9hdlBsYXllckl0
ZW0gJiYgIVt0cmFja3MgY291bnRdKSB7CisgICAgICAgIHNldE5hdHVyYWxTaXplKEludFNpemUo
W21fYXZQbGF5ZXJJdGVtLmdldCgpIHByZXNlbnRhdGlvblNpemVdKSk7CisgICAgICAgIHJldHVy
bjsKKyAgICB9CisKKyAgICAvLyBBVkFzc2V0J3MgJ25hdHVyYWxTaXplJyBwcm9wZXJ0eSBvbmx5
IGNvbnNpZGVycyB0aGUgbW92aWUncyBmaXJzdCB2aWRlbyB0cmFjaywgc28gd2UgbmVlZCB0byBj
b21wdXRlCisgICAgLy8gdGhlIHVuaW9uIG9mIGFsbCB2aXN1YWwgdHJhY2sgcmVjdHMuCisgICAg
Q0dSZWN0IHRyYWNrVW5pb25SZWN0ID0gQ0dSZWN0WmVybzsKKyAgICBmb3IgKEFWQXNzZXRUcmFj
ayAqdHJhY2sgaW4gdHJhY2tzKSB7CisgICAgICAgIENHU2l6ZSB0cmFja1NpemUgPSBbdHJhY2sg
bmF0dXJhbFNpemVdOworICAgICAgICBDR1JlY3QgdHJhY2tSZWN0ID0gQ0dSZWN0TWFrZSgwLCAw
LCB0cmFja1NpemUud2lkdGgsIHRyYWNrU2l6ZS5oZWlnaHQpOworICAgICAgICB0cmFja1VuaW9u
UmVjdCA9IENHUmVjdFVuaW9uKHRyYWNrVW5pb25SZWN0LCBDR1JlY3RBcHBseUFmZmluZVRyYW5z
Zm9ybSh0cmFja1JlY3QsIFt0cmFjayBwcmVmZXJyZWRUcmFuc2Zvcm1dKSk7CisgICAgfQorCisg
ICAgLy8gVGhlIG1vdmllIGlzIGFsd2F5cyBkaXNwbGF5ZWQgYXQgMCwwIHNvIG1vdmUgdGhlIHRy
YWNrIHJlY3QgdG8gdGhlIG9yaWdpbiBiZWZvcmUgdXNpbmcgd2lkdGggYW5kIGhlaWdodC4KKyAg
ICB0cmFja1VuaW9uUmVjdCA9IENHUmVjdE9mZnNldCh0cmFja1VuaW9uUmVjdCwgdHJhY2tVbmlv
blJlY3Qub3JpZ2luLngsIHRyYWNrVW5pb25SZWN0Lm9yaWdpbi55KTsKKyAgICAKKyAgICAvLyBB
bHNvIGxvb2sgYXQgdGhlIGFzc2V0J3MgcHJlZmVycmVkIHRyYW5zZm9ybSBzbyB3ZSBhY2NvdW50
IGZvciBhIG1vdmllIG1hdHJpeC4KKyAgICBDR1NpemUgbmF0dXJhbFNpemUgPSBDR1NpemVBcHBs
eUFmZmluZVRyYW5zZm9ybSh0cmFja1VuaW9uUmVjdC5zaXplLCBbbV9hdkFzc2V0LmdldCgpIHBy
ZWZlcnJlZFRyYW5zZm9ybV0pOworCisgICAgLy8gQ2FjaGUgdGhlIG5hdHVyYWwgc2l6ZSAoc2V0
TmF0dXJhbFNpemUgd2lsbCBub3RpZnkgdGhlIHBsYXllciBpZiBpdCBoYXMgY2hhbmdlZCkuCisg
ICAgc2V0TmF0dXJhbFNpemUoSW50U2l6ZShuYXR1cmFsU2l6ZSkpOworfQorCitib29sIE1lZGlh
UGxheWVyUHJpdmF0ZUFWRm91bmRhdGlvbk9iakM6Omhhc1NpbmdsZVNlY3VyaXR5T3JpZ2luKCkg
Y29uc3QgCit7CisgICAgaWYgKCFtX2F2QXNzZXQpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAg
ICAKKyAgICBSZWZQdHI8U2VjdXJpdHlPcmlnaW4+IHJlc29sdmVkT3JpZ2luID0gU2VjdXJpdHlP
cmlnaW46OmNyZWF0ZShLVVJMKHdrQVZBc3NldFJlc29sdmVkVVJMKG1fYXZBc3NldC5nZXQoKSkp
KTsKKyAgICBSZWZQdHI8U2VjdXJpdHlPcmlnaW4+IHJlcXVlc3RlZE9yaWdpbiA9IFNlY3VyaXR5
T3JpZ2luOjpjcmVhdGVGcm9tU3RyaW5nKGFzc2V0VVJMKCkpOworICAgIHJldHVybiByZXNvbHZl
ZE9yaWdpbi0+aXNTYW1lU2NoZW1lSG9zdFBvcnQocmVxdWVzdGVkT3JpZ2luLmdldCgpKTsKK30K
KworTlNBcnJheSogYXNzZXRNZXRhZGF0YUtleU5hbWVzKCkKK3sKKyAgICBzdGF0aWMgTlNBcnJh
eSoga2V5czsKKyAgICBpZiAoIWtleXMpIHsKKyAgICAgICAga2V5cyA9IFtbTlNBcnJheSBhbGxv
Y10gaW5pdFdpdGhPYmplY3RzOkAiZHVyYXRpb24iLAorICAgICAgICAgICAgICAgICAgICBAIm5h
dHVyYWxTaXplIiwKKyAgICAgICAgICAgICAgICAgICAgQCJwcmVmZXJyZWRUcmFuc2Zvcm0iLAor
ICAgICAgICAgICAgICAgICAgICBAInByZWZlcnJlZFZvbHVtZSIsCisgICAgICAgICAgICAgICAg
ICAgIEAicHJlZmVycmVkUmF0ZSIsCisgICAgICAgICAgICAgICAgICAgIEAicGxheWFibGUiLAor
ICAgICAgICAgICAgICAgICAgICBAInRyYWNrcyIsCisgICAgICAgICAgICAgICAgICAgbmlsXTsK
KyAgICB9CisgICAgcmV0dXJuIGtleXM7Cit9CisKK05TQXJyYXkqIGl0ZW1LVk9Qcm9wZXJ0aWVz
KCkKK3sKKyAgICBzdGF0aWMgTlNBcnJheSoga2V5czsKKyAgICBpZiAoIWtleXMpIHsKKyAgICAg
ICAga2V5cyA9IFtbTlNBcnJheSBhbGxvY10gaW5pdFdpdGhPYmplY3RzOkAicHJlc2VudGF0aW9u
U2l6ZSIsCisgICAgICAgICAgICAgICAgQCJzdGF0dXMiLAorICAgICAgICAgICAgICAgIEAiYXNz
ZXQiLAorICAgICAgICAgICAgICAgIEAidHJhY2tzIiwKKyAgICAgICAgICAgICAgICBAInNlZWth
YmxlVGltZVJhbmdlcyIsCisgICAgICAgICAgICAgICAgQCJsb2FkZWRUaW1lUmFuZ2VzIiwKKyAg
ICAgICAgICAgICAgICBAInBsYXliYWNrTGlrZWx5VG9LZWVwVXAiLAorICAgICAgICAgICAgICAg
IEAicGxheWJhY2tCdWZmZXJGdWxsIiwKKyAgICAgICAgICAgICAgICBAInBsYXliYWNrQnVmZmVy
RW1wdHkiLAorICAgICAgICAgICAgICAgIEAiZHVyYXRpb24iLAorICAgICAgICAgICAgICAgIG5p
bF07CisgICAgfQorICAgIHJldHVybiBrZXlzOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3Jl
CisKK0BpbXBsZW1lbnRhdGlvbiBXZWJDb3JlQVZGTW92aWVPYnNlcnZlcgorCistIChpZClpbml0
V2l0aENhbGxiYWNrOihNZWRpYVBsYXllclByaXZhdGVBVkZvdW5kYXRpb25PYmpDKiljYWxsYmFj
aworeworICAgIG1fY2FsbGJhY2sgPSBjYWxsYmFjazsKKyAgICByZXR1cm4gW3N1cGVyIGluaXRd
OworfQorCistICh2b2lkKWRpc2Nvbm5lY3QKK3sKKyAgICBbTlNPYmplY3QgY2FuY2VsUHJldmlv
dXNQZXJmb3JtUmVxdWVzdHNXaXRoVGFyZ2V0OnNlbGZdOworICAgIG1fY2FsbGJhY2sgPSAwOwor
fQorCistICh2b2lkKW1ldGFkYXRhTG9hZGVkCit7CisgICAgaWYgKCFtX2NhbGxiYWNrKQorICAg
ICAgICByZXR1cm47CisKKyAgICBtX2NhbGxiYWNrLT5zY2hlZHVsZU1haW5UaHJlYWROb3RpZmlj
YXRpb24oTWVkaWFQbGF5ZXJQcml2YXRlQVZGb3VuZGF0aW9uOjpOb3RpZmljYXRpb246OkFzc2V0
TWV0YWRhdGFMb2FkZWQpOworfQorCistICh2b2lkKXBsYXlhYmxlS25vd24KK3sKKyAgICBpZiAo
IW1fY2FsbGJhY2spCisgICAgICAgIHJldHVybjsKKworICAgIG1fY2FsbGJhY2stPnNjaGVkdWxl
TWFpblRocmVhZE5vdGlmaWNhdGlvbihNZWRpYVBsYXllclByaXZhdGVBVkZvdW5kYXRpb246Ok5v
dGlmaWNhdGlvbjo6QXNzZXRQbGF5YWJpbGl0eUtub3duKTsKK30KKworLSAodm9pZCl0aW1lQ2hh
bmdlZDooZG91YmxlKXRpbWUKK3sKKyAgICBpZiAoIW1fY2FsbGJhY2spCisgICAgICAgIHJldHVy
bjsKKworICAgIG1fY2FsbGJhY2stPnNjaGVkdWxlTWFpblRocmVhZE5vdGlmaWNhdGlvbihNZWRp
YVBsYXllclByaXZhdGVBVkZvdW5kYXRpb246Ok5vdGlmaWNhdGlvbjo6UGxheWVyVGltZUNoYW5n
ZWQsIHRpbWUpOworfQorCistICh2b2lkKXNlZWtDb21wbGV0ZWQ6KEJPT0wpZmluaXNoZWQKK3sK
KyAgICBpZiAoIW1fY2FsbGJhY2spCisgICAgICAgIHJldHVybjsKKyAgICAKKyAgICBtX2NhbGxi
YWNrLT5zY2hlZHVsZU1haW5UaHJlYWROb3RpZmljYXRpb24oTWVkaWFQbGF5ZXJQcml2YXRlQVZG
b3VuZGF0aW9uOjpOb3RpZmljYXRpb246OlNlZWtDb21wbGV0ZWQsIHN0YXRpY19jYXN0PGJvb2w+
KGZpbmlzaGVkKSk7Cit9CisKKy0gKHZvaWQpZGlkRW5kOihOU05vdGlmaWNhdGlvbiAqKXVudXNl
ZE5vdGlmaWNhdGlvbgoreworICAgIFVOVVNFRF9QQVJBTSh1bnVzZWROb3RpZmljYXRpb24pOwor
ICAgIGlmICghbV9jYWxsYmFjaykKKyAgICAgICAgcmV0dXJuOworICAgIG1fY2FsbGJhY2stPnNj
aGVkdWxlTWFpblRocmVhZE5vdGlmaWNhdGlvbihNZWRpYVBsYXllclByaXZhdGVBVkZvdW5kYXRp
b246Ok5vdGlmaWNhdGlvbjo6SXRlbURpZFBsYXlUb0VuZFRpbWUpOworfQorCistICh2b2lkKW9i
c2VydmVWYWx1ZUZvcktleVBhdGg6a2V5UGF0aCBvZk9iamVjdDooaWQpb2JqZWN0IGNoYW5nZToo
TlNEaWN0aW9uYXJ5ICopY2hhbmdlIGNvbnRleHQ6KE1lZGlhUGxheWVyQVZGb3VuZGF0aW9uT2Jz
ZXJ2YXRpb25Db250ZXh0KWNvbnRleHQKK3sKKyAgICBVTlVTRURfUEFSQU0oY2hhbmdlKTsKKwor
ICAgIExPRyhNZWRpYSwgIldlYkNvcmVBVkZNb3ZpZU9ic2VydmVyOm9ic2VydmVWYWx1ZUZvcktl
eVBhdGgoJXApIC0ga2V5UGF0aCA9ICVzIiwgc2VsZiwgW2tleVBhdGggVVRGOFN0cmluZ10pOwor
CisgICAgaWYgKCFtX2NhbGxiYWNrKQorICAgICAgICByZXR1cm47CisKKyAgICBpZiAoY29udGV4
dCA9PSBNZWRpYVBsYXllckFWRm91bmRhdGlvbk9ic2VydmF0aW9uQ29udGV4dFBsYXllckl0ZW0p
IHsKKyAgICAgICAgLy8gQSB2YWx1ZSBjaGFuZ2VkIGZvciBhbiBBVlBsYXllckl0ZW0KKyAgICAg
ICAgaWYgKFtrZXlQYXRoIGlzRXF1YWxUb1N0cmluZzpAInN0YXR1cyJdKQorICAgICAgICAgICAg
bV9jYWxsYmFjay0+c2NoZWR1bGVNYWluVGhyZWFkTm90aWZpY2F0aW9uKE1lZGlhUGxheWVyUHJp
dmF0ZUFWRm91bmRhdGlvbjo6Tm90aWZpY2F0aW9uOjpJdGVtU3RhdHVzQ2hhbmdlZCk7CisgICAg
ICAgIGVsc2UgaWYgKFtrZXlQYXRoIGlzRXF1YWxUb1N0cmluZzpAInBsYXliYWNrTGlrZWx5VG9L
ZWVwVXAiXSkKKyAgICAgICAgICAgIG1fY2FsbGJhY2stPnNjaGVkdWxlTWFpblRocmVhZE5vdGlm
aWNhdGlvbihNZWRpYVBsYXllclByaXZhdGVBVkZvdW5kYXRpb246Ok5vdGlmaWNhdGlvbjo6SXRl
bUlzUGxheWJhY2tMaWtlbHlUb0tlZXBVcENoYW5nZWQpOworICAgICAgICBlbHNlIGlmIChba2V5
UGF0aCBpc0VxdWFsVG9TdHJpbmc6QCJwbGF5YmFja0J1ZmZlckVtcHR5Il0pCisgICAgICAgICAg
ICBtX2NhbGxiYWNrLT5zY2hlZHVsZU1haW5UaHJlYWROb3RpZmljYXRpb24oTWVkaWFQbGF5ZXJQ
cml2YXRlQVZGb3VuZGF0aW9uOjpOb3RpZmljYXRpb246Okl0ZW1Jc1BsYXliYWNrQnVmZmVyRW1w
dHlDaGFuZ2VkKTsKKyAgICAgICAgZWxzZSBpZiAoW2tleVBhdGggaXNFcXVhbFRvU3RyaW5nOkAi
cGxheWJhY2tCdWZmZXJGdWxsIl0pCisgICAgICAgICAgICBtX2NhbGxiYWNrLT5zY2hlZHVsZU1h
aW5UaHJlYWROb3RpZmljYXRpb24oTWVkaWFQbGF5ZXJQcml2YXRlQVZGb3VuZGF0aW9uOjpOb3Rp
ZmljYXRpb246Okl0ZW1Jc1BsYXliYWNrQnVmZmVyRnVsbENoYW5nZWQpOworICAgICAgICBlbHNl
IGlmIChba2V5UGF0aCBpc0VxdWFsVG9TdHJpbmc6QCJhc3NldCJdKQorICAgICAgICAgICAgbV9j
YWxsYmFjay0+c2V0QXNzZXQoW29iamVjdCBhc3NldF0pOworICAgICAgICBlbHNlIGlmIChba2V5
UGF0aCBpc0VxdWFsVG9TdHJpbmc6QCJsb2FkZWRUaW1lUmFuZ2VzIl0pCisgICAgICAgICAgICBt
X2NhbGxiYWNrLT5zY2hlZHVsZU1haW5UaHJlYWROb3RpZmljYXRpb24oTWVkaWFQbGF5ZXJQcml2
YXRlQVZGb3VuZGF0aW9uOjpOb3RpZmljYXRpb246Okl0ZW1Mb2FkZWRUaW1lUmFuZ2VzQ2hhbmdl
ZCk7CisgICAgICAgIGVsc2UgaWYgKFtrZXlQYXRoIGlzRXF1YWxUb1N0cmluZzpAInNlZWthYmxl
VGltZVJhbmdlcyJdKQorICAgICAgICAgICAgbV9jYWxsYmFjay0+c2NoZWR1bGVNYWluVGhyZWFk
Tm90aWZpY2F0aW9uKE1lZGlhUGxheWVyUHJpdmF0ZUFWRm91bmRhdGlvbjo6Tm90aWZpY2F0aW9u
OjpJdGVtU2Vla2FibGVUaW1lUmFuZ2VzQ2hhbmdlZCk7CisgICAgICAgIGVsc2UgaWYgKFtrZXlQ
YXRoIGlzRXF1YWxUb1N0cmluZzpAInRyYWNrcyJdKQorICAgICAgICAgICAgbV9jYWxsYmFjay0+
c2NoZWR1bGVNYWluVGhyZWFkTm90aWZpY2F0aW9uKE1lZGlhUGxheWVyUHJpdmF0ZUFWRm91bmRh
dGlvbjo6Tm90aWZpY2F0aW9uOjpJdGVtVHJhY2tzQ2hhbmdlZCk7CisgICAgICAgIGVsc2UgaWYg
KFtrZXlQYXRoIGlzRXF1YWxUb1N0cmluZzpAInByZXNlbnRhdGlvblNpemUiXSkKKyAgICAgICAg
ICAgIG1fY2FsbGJhY2stPnNjaGVkdWxlTWFpblRocmVhZE5vdGlmaWNhdGlvbihNZWRpYVBsYXll
clByaXZhdGVBVkZvdW5kYXRpb246Ok5vdGlmaWNhdGlvbjo6SXRlbVByZXNlbnRhdGlvblNpemVD
aGFuZ2VkKTsKKyAgICAgICAgZWxzZSBpZiAoW2tleVBhdGggaXNFcXVhbFRvU3RyaW5nOkAiZHVy
YXRpb24iXSkKKyAgICAgICAgICAgIG1fY2FsbGJhY2stPnNjaGVkdWxlTWFpblRocmVhZE5vdGlm
aWNhdGlvbihNZWRpYVBsYXllclByaXZhdGVBVkZvdW5kYXRpb246Ok5vdGlmaWNhdGlvbjo6RHVy
YXRpb25DaGFuZ2VkKTsKKworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgaWYgKGNvbnRl
eHQgPT0gTWVkaWFQbGF5ZXJBVkZvdW5kYXRpb25PYnNlcnZhdGlvbkNvbnRleHRQbGF5ZXIpIHsK
KyAgICAgICAgLy8gQSB2YWx1ZSBjaGFuZ2VkIGZvciBhbiBBVlBsYXllci4KKyAgICAgICAgaWYg
KFtrZXlQYXRoIGlzRXF1YWxUb1N0cmluZzpAInJhdGUiXSkKKyAgICAgICAgICAgIG1fY2FsbGJh
Y2stPnNjaGVkdWxlTWFpblRocmVhZE5vdGlmaWNhdGlvbihNZWRpYVBsYXllclByaXZhdGVBVkZv
dW5kYXRpb246Ok5vdGlmaWNhdGlvbjo6UGxheWVyUmF0ZUNoYW5nZWQpOworICAgIH0KK30KKwor
QGVuZAorCisjZW5kaWYKClByb3BlcnR5IGNoYW5nZXMgb246IFNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2F2Zm91bmRhdGlvbi9vYmpjL01lZGlhUGxheWVyUHJpdmF0ZUFWRm91bmRh
dGlvbk9iakMubW0KX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fXwpBZGRlZDogc3ZuOmVvbC1zdHlsZQogICArIG5hdGl2ZQoK
</data>
<flag name="review"
          id="99950"
          type_id="1"
          status="+"
          setter="eric.carlson"
    />
          </attachment>
      

    </bug>

</bugzilla>