<?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>175148</bug_id>
          
          <creation_ts>2017-08-03 12:54:59 -0700</creation_ts>
          <short_desc>[Curl] Extract a features to manage HTTP communication from ResourceHandle</short_desc>
          <delta_ts>2017-09-29 14:20:20 -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>WebCore Misc.</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>177496</dependson>
          <blocked>21242</blocked>
    
    <blocked>173964</blocked>
    
    <blocked>175149</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Basuke Suzuki">basuke</reporter>
          <assigned_to name="Basuke Suzuki">basuke</assigned_to>
          <cc>achristensen</cc>
    
    <cc>basuke</cc>
    
    <cc>bfulgham</cc>
    
    <cc>commit-queue</cc>
    
    <cc>don.olmstead</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1334894</commentid>
    <comment_count>0</comment_count>
    <who name="Basuke Suzuki">basuke</who>
    <bug_when>2017-08-03 12:54:59 -0700</bug_when>
    <thetext>To make the ResourceHandle manageable, move actual HTTP communication tasks into new class which is sub class of CurlHandle.

In the long run, the new class will help to serve NetworkLoadTask for WebKit.

CurlHandle should keep as is because it will be used from other purpose such as WebSocket. That&apos;s why the new class is sub class of CurlHandle.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1334900</commentid>
    <comment_count>1</comment_count>
    <who name="Basuke Suzuki">basuke</who>
    <bug_when>2017-08-03 13:04:04 -0700</bug_when>
    <thetext>This class must has following features:
- ref counted (to have different life span with ResourceHandle)
- thread safe (to manage background callback and make ResourceHandle work only on main thread)
- can manage curl callbacks internally (to make ResourceHandle simple)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1352811</commentid>
    <comment_count>2</comment_count>
    <who name="Basuke Suzuki">basuke</who>
    <bug_when>2017-09-26 13:35:53 -0700</bug_when>
    <thetext>*** Bug 177497 has been marked as a duplicate of this bug. ***</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1352821</commentid>
    <comment_count>3</comment_count>
      <attachid>321863</attachid>
    <who name="Basuke Suzuki">basuke</who>
    <bug_when>2017-09-26 13:49:57 -0700</bug_when>
    <thetext>Created attachment 321863
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1352829</commentid>
    <comment_count>4</comment_count>
      <attachid>321866</attachid>
    <who name="Basuke Suzuki">basuke</who>
    <bug_when>2017-09-26 14:09:46 -0700</bug_when>
    <thetext>Created attachment 321866
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1354694</commentid>
    <comment_count>5</comment_count>
      <attachid>321866</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2017-09-29 14:19:36 -0700</bug_when>
    <thetext>Comment on attachment 321866
patch

Clearing flags on attachment: 321866

Committed r222665: &lt;http://trac.webkit.org/changeset/222665&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1354695</commentid>
    <comment_count>6</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2017-09-29 14:19:37 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1354696</commentid>
    <comment_count>7</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2017-09-29 14:20:20 -0700</bug_when>
    <thetext>&lt;rdar://problem/34747397&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>321863</attachid>
            <date>2017-09-26 13:49:57 -0700</date>
            <delta_ts>2017-09-26 14:09:46 -0700</delta_ts>
            <desc>patch</desc>
            <filename>175148-1.diff</filename>
            <type>text/plain</type>
            <size>68510</size>
            <attacher name="Basuke Suzuki">basuke</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCA1MzRhODhlMGQ0MC4uNmM4MDRkNGEwOWEgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSwxMjkgQEAKKzIwMTctMDktMjYgIEJhc3VrZSBTdXp1a2kgIDxCYXN1a2UuU3V6dWtpQHNv
bnkuY29tPgorCisgICAgICAgIFtDdXJsXSBJbnRyb2R1Y2UgQ3VybFJlcXVlc3QgdG8gaGFuZGxl
IGNvbXBsZXRlIHByb2Nlc3Mgb2YgSFRUUCByZXF1ZXN0CisgICAgICAgIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNzc0OTcKKworICAgICAgICBSZXZpZXdlZCBieSBO
T0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIHBsYXRmb3JtL0N1cmwuY21ha2U6CisgICAgICAg
ICogcGxhdGZvcm0vbmV0d29yay9jdXJsL0N1cmxSZXF1ZXN0LmNwcDogQWRkZWQuCisgICAgICAg
IChXZWJDb3JlOjpDdXJsUmVxdWVzdDo6Q3VybFJlcXVlc3QpOgorICAgICAgICAoV2ViQ29yZTo6
Q3VybFJlcXVlc3Q6OnNldFVzZXJQYXNzKToKKyAgICAgICAgKFdlYkNvcmU6OkN1cmxSZXF1ZXN0
OjpzdGFydCk6CisgICAgICAgIChXZWJDb3JlOjpDdXJsUmVxdWVzdDo6c3RhcnRXaXRoSm9iTWFu
YWdlcik6CisgICAgICAgIChXZWJDb3JlOjpDdXJsUmVxdWVzdDo6Y2FuY2VsKToKKyAgICAgICAg
KFdlYkNvcmU6OkN1cmxSZXF1ZXN0OjpzdXNwZW5kKToKKyAgICAgICAgKFdlYkNvcmU6OkN1cmxS
ZXF1ZXN0OjpyZXN1bWUpOgorICAgICAgICAoV2ViQ29yZTo6Q3VybFJlcXVlc3Q6OmNhbGxEZWxl
Z2F0ZSk6CisgICAgICAgIChXZWJDb3JlOjpDdXJsUmVxdWVzdDo6c2V0dXBUcmFuc2Zlcik6Cisg
ICAgICAgIChXZWJDb3JlOjpDdXJsUmVxdWVzdDo6d2lsbFNldHVwU3NsQ3R4KToKKyAgICAgICAg
KFdlYkNvcmU6OkN1cmxSZXF1ZXN0Ojp3aWxsU2VuZERhdGEpOgorICAgICAgICAoV2ViQ29yZTo6
Q3VybFJlcXVlc3Q6OmRpZFJlY2VpdmVIZWFkZXIpOgorICAgICAgICAoV2ViQ29yZTo6Q3VybFJl
cXVlc3Q6OmRpZFJlY2VpdmVEYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OkN1cmxSZXF1ZXN0Ojpk
aWRDb21wbGV0ZVRyYW5zZmVyKToKKyAgICAgICAgKFdlYkNvcmU6OkN1cmxSZXF1ZXN0OjpkaWRD
YW5jZWxUcmFuc2Zlcik6CisgICAgICAgIChXZWJDb3JlOjpDdXJsUmVxdWVzdDo6cmVzb2x2ZUJs
b2JSZWZlcmVuY2VzKToKKyAgICAgICAgKFdlYkNvcmU6OkN1cmxSZXF1ZXN0OjpzZXR1cFBVVCk6
CisgICAgICAgIChXZWJDb3JlOjpDdXJsUmVxdWVzdDo6c2V0dXBQT1NUKToKKyAgICAgICAgKFdl
YkNvcmU6OkN1cmxSZXF1ZXN0OjpzZXR1cEZvcm1EYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OkN1
cmxSZXF1ZXN0OjppbnZva2VEaWRSZWNlaXZlUmVzcG9uc2VGb3JGaWxlKToKKyAgICAgICAgKFdl
YkNvcmU6OkN1cmxSZXF1ZXN0OjppbnZva2VEaWRSZWNlaXZlUmVzcG9uc2UpOgorICAgICAgICAo
V2ViQ29yZTo6Q3VybFJlcXVlc3Q6OnNldFBhdXNlZCk6CisgICAgICAgIChXZWJDb3JlOjpDdXJs
UmVxdWVzdDo6d2lsbFNldHVwU3NsQ3R4Q2FsbGJhY2spOgorICAgICAgICAoV2ViQ29yZTo6Q3Vy
bFJlcXVlc3Q6OndpbGxTZW5kRGF0YUNhbGxiYWNrKToKKyAgICAgICAgKFdlYkNvcmU6OkN1cmxS
ZXF1ZXN0OjpkaWRSZWNlaXZlSGVhZGVyQ2FsbGJhY2spOgorICAgICAgICAoV2ViQ29yZTo6Q3Vy
bFJlcXVlc3Q6OmRpZFJlY2VpdmVEYXRhQ2FsbGJhY2spOgorICAgICAgICAqIHBsYXRmb3JtL25l
dHdvcmsvY3VybC9DdXJsUmVxdWVzdC5oOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkN1cmxS
ZXF1ZXN0Ojp+Q3VybFJlcXVlc3QpOgorICAgICAgICAoV2ViQ29yZTo6Q3VybFJlcXVlc3Q6OnNl
dERlbGVnYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkN1cmxSZXF1ZXN0Ojppc1N5bmNSZXF1ZXN0
KToKKyAgICAgICAgKFdlYkNvcmU6OkN1cmxSZXF1ZXN0OjpnZXROZXR3b3JrTG9hZE1ldHJpY3Mp
OgorICAgICAgICAqIHBsYXRmb3JtL25ldHdvcmsvY3VybC9DdXJsUmVxdWVzdERlbGVnYXRlLmg6
IEFkZGVkLgorICAgICAgICAqIHBsYXRmb3JtL25ldHdvcmsvY3VybC9SZXNvdXJjZUhhbmRsZUN1
cmwuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVzb3VyY2VIYW5kbGU6OmNhbmNlbCk6CisgICAg
ICAgIChXZWJDb3JlOjpSZXNvdXJjZUhhbmRsZTo6cGxhdGZvcm1TZXREZWZlcnNMb2FkaW5nKToK
KyAgICAgICAgKFdlYkNvcmU6OlJlc291cmNlSGFuZGxlOjpkaWRSZWNlaXZlQXV0aGVudGljYXRp
b25DaGFsbGVuZ2UpOgorICAgICAgICAoV2ViQ29yZTo6UmVzb3VyY2VIYW5kbGU6OnJlY2VpdmVk
Q3JlZGVudGlhbCk6CisgICAgICAgIChXZWJDb3JlOjpSZXNvdXJjZUhhbmRsZTo6cmVjZWl2ZWRS
ZXF1ZXN0VG9Db250aW51ZVdpdGhvdXRDcmVkZW50aWFsKToKKyAgICAgICAgKFdlYkNvcmU6OlJl
c291cmNlSGFuZGxlOjpyZWNlaXZlZENhbmNlbGxhdGlvbik6CisgICAgICAgICogcGxhdGZvcm0v
bmV0d29yay9jdXJsL1Jlc291cmNlSGFuZGxlQ3VybERlbGVnYXRlLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OlJlc291cmNlSGFuZGxlQ3VybERlbGVnYXRlOjpSZXNvdXJjZUhhbmRsZUN1cmxEZWxl
Z2F0ZSk6CisgICAgICAgIChXZWJDb3JlOjpSZXNvdXJjZUhhbmRsZUN1cmxEZWxlZ2F0ZTo6flJl
c291cmNlSGFuZGxlQ3VybERlbGVnYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OlJlc291cmNlSGFu
ZGxlQ3VybERlbGVnYXRlOjpzdGFydCk6CisgICAgICAgIChXZWJDb3JlOjpSZXNvdXJjZUhhbmRs
ZUN1cmxEZWxlZ2F0ZTo6Y2FuY2VsKToKKyAgICAgICAgKFdlYkNvcmU6OlJlc291cmNlSGFuZGxl
Q3VybERlbGVnYXRlOjpzZXREZWZlcnNMb2FkaW5nKToKKyAgICAgICAgKFdlYkNvcmU6OlJlc291
cmNlSGFuZGxlQ3VybERlbGVnYXRlOjpzZXRBdXRoZW50aWNhdGlvbik6CisgICAgICAgIChXZWJD
b3JlOjpSZXNvdXJjZUhhbmRsZUN1cmxEZWxlZ2F0ZTo6ZGlzcGF0Y2hTeW5jaHJvbm91c0pvYik6
CisgICAgICAgIChXZWJDb3JlOjpSZXNvdXJjZUhhbmRsZUN1cmxEZWxlZ2F0ZTo6Y3JlYXRlQ3Vy
bFJlcXVlc3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVzb3VyY2VIYW5kbGVDdXJsRGVsZWdhdGU6
OmNhbmNlbGxlZE9yQ2xpZW50bGVzcyk6CisgICAgICAgIChXZWJDb3JlOjpSZXNvdXJjZUhhbmRs
ZUN1cmxEZWxlZ2F0ZTo6Y3VybERpZFJlY2VpdmVSZXNwb25zZSk6CisgICAgICAgIChXZWJDb3Jl
OjpSZXNvdXJjZUhhbmRsZUN1cmxEZWxlZ2F0ZTo6Y3VybERpZFJlY2VpdmVCdWZmZXIpOgorICAg
ICAgICAoV2ViQ29yZTo6UmVzb3VyY2VIYW5kbGVDdXJsRGVsZWdhdGU6OmN1cmxEaWRDb21wbGV0
ZSk6CisgICAgICAgIChXZWJDb3JlOjpSZXNvdXJjZUhhbmRsZUN1cmxEZWxlZ2F0ZTo6Y3VybERp
ZEZhaWxXaXRoRXJyb3IpOgorICAgICAgICAoV2ViQ29yZTo6UmVzb3VyY2VIYW5kbGVDdXJsRGVs
ZWdhdGU6OnJlc3BvbnNlKToKKyAgICAgICAgKFdlYkNvcmU6OlJlc291cmNlSGFuZGxlQ3VybERl
bGVnYXRlOjpnZXRDcmVkZW50aWFsKToKKyAgICAgICAgKFdlYkNvcmU6OlJlc291cmNlSGFuZGxl
Q3VybERlbGVnYXRlOjpyZXRhaW4pOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6UmVzb3Vy
Y2VIYW5kbGVDdXJsRGVsZWdhdGU6OnJlbGVhc2UpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29y
ZTo6UmVzb3VyY2VIYW5kbGVDdXJsRGVsZWdhdGU6OnNldHVwVHJhbnNmZXIpOiBEZWxldGVkLgor
ICAgICAgICAoV2ViQ29yZTo6UmVzb3VyY2VIYW5kbGVDdXJsRGVsZWdhdGU6OmRpZENvbXBsZXRl
VHJhbnNmZXIpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6UmVzb3VyY2VIYW5kbGVDdXJs
RGVsZWdhdGU6OmRpZENhbmNlbFRyYW5zZmVyKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6
OlJlc291cmNlSGFuZGxlQ3VybERlbGVnYXRlOjpzZXR1cEF1dGhlbnRpY2F0aW9uKTogRGVsZXRl
ZC4KKyAgICAgICAgKFdlYkNvcmU6OlJlc291cmNlSGFuZGxlQ3VybERlbGVnYXRlOjpkaWRSZWNl
aXZlQWxsSGVhZGVycyk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpSZXNvdXJjZUhhbmRs
ZUN1cmxEZWxlZ2F0ZTo6ZGlkUmVjZWl2ZUNvbnRlbnREYXRhKTogRGVsZXRlZC4KKyAgICAgICAg
KFdlYkNvcmU6OlJlc291cmNlSGFuZGxlQ3VybERlbGVnYXRlOjpoYW5kbGVMb2NhbFJlY2VpdmVS
ZXNwb25zZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpSZXNvdXJjZUhhbmRsZUN1cmxE
ZWxlZ2F0ZTo6cHJlcGFyZVNlbmREYXRhKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlJl
c291cmNlSGFuZGxlQ3VybERlbGVnYXRlOjpkaWRGaW5pc2gpOiBEZWxldGVkLgorICAgICAgICAo
V2ViQ29yZTo6UmVzb3VyY2VIYW5kbGVDdXJsRGVsZWdhdGU6OmRpZEZhaWwpOiBEZWxldGVkLgor
ICAgICAgICAoV2ViQ29yZTo6UmVzb3VyY2VIYW5kbGVDdXJsRGVsZWdhdGU6OnNldHVwUE9TVCk6
IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpSZXNvdXJjZUhhbmRsZUN1cmxEZWxlZ2F0ZTo6
c2V0dXBQVVQpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6UmVzb3VyY2VIYW5kbGVDdXJs
RGVsZWdhdGU6OmdldEZvcm1FbGVtZW50c0NvdW50KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNv
cmU6OlJlc291cmNlSGFuZGxlQ3VybERlbGVnYXRlOjpzZXR1cEZvcm1EYXRhKTogRGVsZXRlZC4K
KyAgICAgICAgKFdlYkNvcmU6OlJlc291cmNlSGFuZGxlQ3VybERlbGVnYXRlOjphcHBseUF1dGhl
bnRpY2F0aW9uKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlJlc291cmNlSGFuZGxlQ3Vy
bERlbGVnYXRlOjpnZXROZXR3b3JrTG9hZE1ldHJpY3MpOiBEZWxldGVkLgorICAgICAgICAoV2Vi
Q29yZTo6UmVzb3VyY2VIYW5kbGVDdXJsRGVsZWdhdGU6OndpbGxTZXR1cFNzbEN0eCk6IERlbGV0
ZWQuCisgICAgICAgIChXZWJDb3JlOjpSZXNvdXJjZUhhbmRsZUN1cmxEZWxlZ2F0ZTo6ZGlkUmVj
ZWl2ZUhlYWRlcik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpSZXNvdXJjZUhhbmRsZUN1
cmxEZWxlZ2F0ZTo6ZGlkUmVjZWl2ZURhdGEpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6
UmVzb3VyY2VIYW5kbGVDdXJsRGVsZWdhdGU6OndpbGxTZW5kRGF0YSk6IERlbGV0ZWQuCisgICAg
ICAgIChXZWJDb3JlOjpSZXNvdXJjZUhhbmRsZUN1cmxEZWxlZ2F0ZTo6d2lsbFNldHVwU3NsQ3R4
Q2FsbGJhY2spOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6UmVzb3VyY2VIYW5kbGVDdXJs
RGVsZWdhdGU6OmRpZFJlY2VpdmVIZWFkZXJDYWxsYmFjayk6IERlbGV0ZWQuCisgICAgICAgIChX
ZWJDb3JlOjpSZXNvdXJjZUhhbmRsZUN1cmxEZWxlZ2F0ZTo6ZGlkUmVjZWl2ZURhdGFDYWxsYmFj
ayk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpSZXNvdXJjZUhhbmRsZUN1cmxEZWxlZ2F0
ZTo6d2lsbFNlbmREYXRhQ2FsbGJhY2spOiBEZWxldGVkLgorICAgICAgICAqIHBsYXRmb3JtL25l
dHdvcmsvY3VybC9SZXNvdXJjZUhhbmRsZUN1cmxEZWxlZ2F0ZS5oOgorCiAyMDE3LTA5LTI2ICBC
YXN1a2UgU3V6dWtpICA8QmFzdWtlLlN1enVraUBzb255LmNvbT4KIAogICAgICAgICBbQ3VybF0g
Q2hhbmdlIG1lbWJlciB2YXJpYWJsZSBvZiBDdXJsSGFuZGxlIHRvIHVzZSBzdGQ6OnVuaXF1ZV9w
dHIKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL0N1cmwuY21ha2UgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9DdXJsLmNtYWtlCmluZGV4IDBmMjM2YjFkYjUyLi43YTgzMmVk
ZjRmNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vQ3VybC5jbWFrZQorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9DdXJsLmNtYWtlCkBAIC0xMSw2ICsxMSw3IEBAIGxp
c3QoQVBQRU5EIFdlYkNvcmVfU09VUkNFUwogICAgIHBsYXRmb3JtL25ldHdvcmsvY3VybC9DdXJs
Q29udGV4dC5jcHAKICAgICBwbGF0Zm9ybS9uZXR3b3JrL2N1cmwvQ3VybERvd25sb2FkLmNwcAog
ICAgIHBsYXRmb3JtL25ldHdvcmsvY3VybC9DdXJsSm9iTWFuYWdlci5jcHAKKyAgICBwbGF0Zm9y
bS9uZXR3b3JrL2N1cmwvQ3VybFJlcXVlc3QuY3BwCiAgICAgcGxhdGZvcm0vbmV0d29yay9jdXJs
L0N1cmxTU0xIYW5kbGUuY3BwCiAgICAgcGxhdGZvcm0vbmV0d29yay9jdXJsL0N1cmxTU0xWZXJp
Zmllci5jcHAKICAgICBwbGF0Zm9ybS9uZXR3b3JrL2N1cmwvRE5TQ3VybC5jcHAKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY3VybC9DdXJsUmVxdWVzdC5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2N1cmwvQ3VybFJlcXVlc3QuY3BwCm5l
dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi5hZDQyNWYwYjFjMwotLS0gL2Rl
di9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY3VybC9DdXJsUmVx
dWVzdC5jcHAKQEAgLTAsMCArMSw1MzcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTcgU29u
eSBJbnRlcmFjdGl2ZSBFbnRlcnRhaW5tZW50IEluYy4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqIAorICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBg
QVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklC
VVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5F
U1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJj
b25maWcuaCIKKyNpbmNsdWRlICJDdXJsUmVxdWVzdC5oIgorCisjaWYgVVNFKENVUkwpCisKKyNp
bmNsdWRlICJDdXJsUmVxdWVzdERlbGVnYXRlLmgiCisjaW5jbHVkZSAiTUlNRVR5cGVSZWdpc3Ry
eS5oIgorI2luY2x1ZGUgIlJlc291cmNlRXJyb3IuaCIKKyNpbmNsdWRlICJTaGFyZWRCdWZmZXIu
aCIKKyNpbmNsdWRlIDx3dGYvTWFpblRocmVhZC5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisK
K0N1cmxSZXF1ZXN0OjpDdXJsUmVxdWVzdChjb25zdCBSZXNvdXJjZVJlcXVlc3QmcmVxdWVzdCwg
Q3VybFJlcXVlc3REZWxlZ2F0ZSogZGVsZWdhdGUsIGJvb2wgc2hvdWxkU3VzcGVuZCkKKyAgICA6
IG1fcmVxdWVzdChyZXF1ZXN0Lmlzb2xhdGVkQ29weSgpKQorICAgICwgbV9zaG91bGRTdXNwZW5k
KHNob3VsZFN1c3BlbmQpCit7CisgICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKKworICAgIHNl
dERlbGVnYXRlKGRlbGVnYXRlKTsKKyAgICByZXNvbHZlQmxvYlJlZmVyZW5jZXMobV9yZXF1ZXN0
KTsKK30KKwordm9pZCBDdXJsUmVxdWVzdDo6c2V0VXNlclBhc3MoY29uc3QgU3RyaW5nJiB1c2Vy
LCBjb25zdCBTdHJpbmcmIHBhc3N3b3JkKQoreworICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7
CisKKyAgICBtX3VzZXIgPSB1c2VyLmlzb2xhdGVkQ29weSgpOworICAgIG1fcGFzc3dvcmQgPSB1
c2VyLmlzb2xhdGVkQ29weSgpOworfQorCit2b2lkIEN1cmxSZXF1ZXN0OjpzdGFydChib29sIGlz
U3luY1JlcXVlc3QpCit7CisgICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKKworICAgIG1faXNT
eW5jUmVxdWVzdCA9IGlzU3luY1JlcXVlc3Q7CisKKyAgICBhdXRvIHVybCA9IG1fcmVxdWVzdC51
cmwoKS5pc29sYXRlZENvcHkoKTsKKworICAgIGlmICghbV9pc1N5bmNSZXF1ZXN0KSB7CisgICAg
ICAgIC8vIEZvciBhc3luY2hyb25vdXMsIHVzZSBDdXJsSm9iTWFuYWdlci4gQ3VybCBwcm9jZXNz
ZXMgcnVucyBvbiBzdWIgdGhyZWFkLgorICAgICAgICBpZiAodXJsLmlzTG9jYWxGaWxlKCkpCisg
ICAgICAgICAgICBpbnZva2VEaWRSZWNlaXZlUmVzcG9uc2VGb3JGaWxlKHVybCk7CisKKyAgICAg
ICAgc3RhcnRXaXRoSm9iTWFuYWdlcigpOworICAgIH0gZWxzZSB7CisgICAgICAgIC8vIEZvciBz
eW5jaHJvbm91cywgZG9lcyBub3QgdXNlIEN1cmxKb2JNYW5hZ2VyLiBDdXJsIHByb2Nlc3NlcyBy
dW5zIG9uIG1haW4gdGhyZWFkLgorICAgICAgICAvLyBjdXJsX2Vhc3lfcGVyZm9ybSBibG9ja3Mg
dW50aWwgdGhlIHRyYW5zZmVyIGlzIGZpbmlzaGVkLgorICAgICAgICByZXRhaW4oKTsKKyAgICAg
ICAgaWYgKHVybC5pc0xvY2FsRmlsZSgpKQorICAgICAgICAgICAgaW52b2tlRGlkUmVjZWl2ZVJl
c3BvbnNlRm9yRmlsZSh1cmwpOworCisgICAgICAgIHNldHVwVHJhbnNmZXIoKTsKKyAgICAgICAg
Q1VSTGNvZGUgcmVzdWx0Q29kZSA9IG1fY3VybEhhbmRsZS0+cGVyZm9ybSgpOworICAgICAgICBk
aWRDb21wbGV0ZVRyYW5zZmVyKHJlc3VsdENvZGUpOworICAgICAgICByZWxlYXNlKCk7CisgICAg
fQorfQorCit2b2lkIEN1cmxSZXF1ZXN0OjpzdGFydFdpdGhKb2JNYW5hZ2VyKCkKK3sKKyAgICBB
U1NFUlQoaXNNYWluVGhyZWFkKCkpOworCisgICAgQ3VybEpvYk1hbmFnZXI6OnNpbmdsZXRvbigp
LmFkZCh0aGlzKTsKK30KKwordm9pZCBDdXJsUmVxdWVzdDo6Y2FuY2VsKCkKK3sKKyAgICBBU1NF
UlQoaXNNYWluVGhyZWFkKCkpOworCisgICAgaWYgKG1fY2FuY2VsbGVkKQorICAgICAgICByZXR1
cm47CisKKyAgICBtX2NhbmNlbGxlZCA9IHRydWU7CisKKyAgICBpZiAoIW1faXNTeW5jUmVxdWVz
dCkKKyAgICAgICAgQ3VybEpvYk1hbmFnZXI6OnNpbmdsZXRvbigpLmNhbmNlbCh0aGlzKTsKKwor
ICAgIHNldFBhdXNlZChmYWxzZSk7Cit9CisKK3ZvaWQgQ3VybFJlcXVlc3Q6OnN1c3BlbmQoKQor
eworICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7CisKKyAgICBzZXRQYXVzZWQodHJ1ZSk7Cit9
CisKK3ZvaWQgQ3VybFJlcXVlc3Q6OnJlc3VtZSgpCit7CisgICAgQVNTRVJUKGlzTWFpblRocmVh
ZCgpKTsKKworICAgIHNldFBhdXNlZChmYWxzZSk7Cit9CisKKy8qIGB0aGlzYCBpcyBwcm90ZWN0
ZWQgaW5zaWRlIHRoaXMgbWV0aG9kLiAqLwordm9pZCBDdXJsUmVxdWVzdDo6Y2FsbERlbGVnYXRl
KFdURjo6RnVuY3Rpb248dm9pZChDdXJsUmVxdWVzdERlbGVnYXRlKik+IHRhc2spCit7CisgICAg
aWYgKGlzTWFpblRocmVhZCgpKSB7CisgICAgICAgIGlmIChDdXJsUmVxdWVzdERlbGVnYXRlKiBk
ZWxlZ2F0ZSA9IG1fZGVsZWdhdGUpCisgICAgICAgICAgICB0YXNrKGRlbGVnYXRlKTsKKyAgICB9
IGVsc2UgeworICAgICAgICBjYWxsT25NYWluVGhyZWFkKFtwcm90ZWN0ZWRUaGlzID0gbWFrZVJl
ZigqdGhpcyksIHRhc2sgPSBXVEZNb3ZlKHRhc2spXSgpIG11dGFibGUgeworICAgICAgICAgICAg
aWYgKEN1cmxSZXF1ZXN0RGVsZWdhdGUqIGRlbGVnYXRlID0gcHJvdGVjdGVkVGhpcy0+bV9kZWxl
Z2F0ZSkKKyAgICAgICAgICAgICAgICB0YXNrKGRlbGVnYXRlKTsKKyAgICAgICAgfSk7CisgICAg
fQorfQorCitDVVJMKiBDdXJsUmVxdWVzdDo6c2V0dXBUcmFuc2ZlcigpCit7CisgICAgYXV0byYg
c3NsSGFuZGxlID0gQ3VybENvbnRleHQ6OnNpbmdsZXRvbigpLnNzbEhhbmRsZSgpOworCisgICAg
bV9jdXJsSGFuZGxlID0gc3RkOjptYWtlX3VuaXF1ZTxDdXJsSGFuZGxlPigpOworCisgICAgbV9j
dXJsSGFuZGxlLT5pbml0aWFsaXplKCk7CisgICAgbV9jdXJsSGFuZGxlLT5zZXRVcmwobV9yZXF1
ZXN0LnVybCgpKTsKKyAgICBtX2N1cmxIYW5kbGUtPmFwcGVuZFJlcXVlc3RIZWFkZXJzKG1fcmVx
dWVzdC5odHRwSGVhZGVyRmllbGRzKCkpOworCisgICAgYXV0byBtZXRob2QgPSBtX3JlcXVlc3Qu
aHR0cE1ldGhvZCgpOworICAgIGlmIChtZXRob2QgPT0gIkdFVCIpCisgICAgICAgIG1fY3VybEhh
bmRsZS0+ZW5hYmxlSHR0cEdldFJlcXVlc3QoKTsKKyAgICBlbHNlIGlmIChtZXRob2QgPT0gIlBP
U1QiKQorICAgICAgICBzZXR1cFBPU1QobV9yZXF1ZXN0KTsKKyAgICBlbHNlIGlmIChtZXRob2Qg
PT0gIlBVVCIpCisgICAgICAgIHNldHVwUFVUKG1fcmVxdWVzdCk7CisgICAgZWxzZSBpZiAobWV0
aG9kID09ICJIRUFEIikKKyAgICAgICAgbV9jdXJsSGFuZGxlLT5lbmFibGVIdHRwSGVhZFJlcXVl
c3QoKTsKKyAgICBlbHNlIHsKKyAgICAgICAgbV9jdXJsSGFuZGxlLT5zZXRIdHRwQ3VzdG9tUmVx
dWVzdChtZXRob2QpOworICAgICAgICBzZXR1cFBVVChtX3JlcXVlc3QpOworICAgIH0KKworICAg
IGlmICghbV91c2VyLmlzRW1wdHkoKSB8fCAhbV9wYXNzd29yZC5pc0VtcHR5KCkpIHsKKyAgICAg
ICAgbV9jdXJsSGFuZGxlLT5lbmFibGVIdHRwQXV0aGVudGljYXRpb24oQ1VSTEFVVEhfQU5ZKTsK
KyAgICAgICAgbV9jdXJsSGFuZGxlLT5zZXRIdHRwQXV0aFVzZXJQYXNzKG1fdXNlci5sYXRpbjEo
KS5kYXRhKCksIG1fcGFzc3dvcmQubGF0aW4xKCkuZGF0YSgpKTsKKyAgICB9CisKKyAgICBtX2N1
cmxIYW5kbGUtPnNldEhlYWRlckNhbGxiYWNrRnVuY3Rpb24oZGlkUmVjZWl2ZUhlYWRlckNhbGxi
YWNrLCB0aGlzKTsKKyAgICBtX2N1cmxIYW5kbGUtPnNldFdyaXRlQ2FsbGJhY2tGdW5jdGlvbihk
aWRSZWNlaXZlRGF0YUNhbGxiYWNrLCB0aGlzKTsKKworICAgIG1fY3VybEhhbmRsZS0+ZW5hYmxl
U2hhcmVIYW5kbGUoKTsKKyAgICBtX2N1cmxIYW5kbGUtPmVuYWJsZUFsbG93ZWRQcm90b2NvbHMo
KTsKKyAgICBtX2N1cmxIYW5kbGUtPmVuYWJsZUFjY2VwdEVuY29kaW5nKCk7CisgICAgbV9jdXJs
SGFuZGxlLT5lbmFibGVUaW1lb3V0KCk7CisKKyAgICBtX2N1cmxIYW5kbGUtPmVuYWJsZUF1dG9S
ZWZlcmVyKCk7CisgICAgbV9jdXJsSGFuZGxlLT5lbmFibGVGb2xsb3dMb2NhdGlvbigpOworICAg
IG1fY3VybEhhbmRsZS0+ZW5hYmxlUHJveHlJZkV4aXN0cygpOworICAgIG1fY3VybEhhbmRsZS0+
ZW5hYmxlQ29va2llSmFySWZFeGlzdHMoKTsKKworICAgIG1fY3VybEhhbmRsZS0+c2V0U3NsVmVy
aWZ5UGVlcihDdXJsSGFuZGxlOjpWZXJpZnlQZWVyOjpFbmFibGUpOworICAgIG1fY3VybEhhbmRs
ZS0+c2V0U3NsVmVyaWZ5SG9zdChDdXJsSGFuZGxlOjpWZXJpZnlIb3N0OjpTdHJpY3ROYW1lQ2hl
Y2spOworCisgICAgYXV0byBzc2xDbGllbnRDZXJ0aWZpY2F0ZSA9IHNzbEhhbmRsZS5nZXRTU0xD
bGllbnRDZXJ0aWZpY2F0ZShtX3JlcXVlc3QudXJsKCkuaG9zdCgpKTsKKyAgICBpZiAoc3NsQ2xp
ZW50Q2VydGlmaWNhdGUpIHsKKyAgICAgICAgbV9jdXJsSGFuZGxlLT5zZXRTc2xDZXJ0KHNzbENs
aWVudENlcnRpZmljYXRlLT5maXJzdC51dGY4KCkuZGF0YSgpKTsKKyAgICAgICAgbV9jdXJsSGFu
ZGxlLT5zZXRTc2xDZXJ0VHlwZSgiUDEyIik7CisgICAgICAgIG1fY3VybEhhbmRsZS0+c2V0U3Ns
S2V5UGFzc3dvcmQoc3NsQ2xpZW50Q2VydGlmaWNhdGUtPnNlY29uZC51dGY4KCkuZGF0YSgpKTsK
KyAgICB9CisKKyAgICBpZiAoc3NsSGFuZGxlLnNob3VsZElnbm9yZVNTTEVycm9ycygpKQorICAg
ICAgICBtX2N1cmxIYW5kbGUtPnNldFNzbFZlcmlmeVBlZXIoQ3VybEhhbmRsZTo6VmVyaWZ5UGVl
cjo6RGlzYWJsZSk7CisgICAgZWxzZQorICAgICAgICBtX2N1cmxIYW5kbGUtPnNldFNzbEN0eENh
bGxiYWNrRnVuY3Rpb24od2lsbFNldHVwU3NsQ3R4Q2FsbGJhY2ssIHRoaXMpOworCisgICAgbV9j
dXJsSGFuZGxlLT5zZXRDQUNlcnRQYXRoKHNzbEhhbmRsZS5nZXRDQUNlcnRQYXRoKCkpOworCisg
ICAgaWYgKG1fc2hvdWxkU3VzcGVuZCkKKyAgICAgICAgc3VzcGVuZCgpOworCisjaWZuZGVmIE5E
RUJVRworICAgIG1fY3VybEhhbmRsZS0+ZW5hYmxlVmVyYm9zZUlmVXNlZCgpOworICAgIG1fY3Vy
bEhhbmRsZS0+ZW5hYmxlU3RkRXJySWZVc2VkKCk7CisjZW5kaWYKKworICAgIHJldHVybiBtX2N1
cmxIYW5kbGUtPmhhbmRsZSgpOworfQorCitDVVJMY29kZSBDdXJsUmVxdWVzdDo6d2lsbFNldHVw
U3NsQ3R4KHZvaWQqIHNzbEN0eCkKK3sKKyAgICBtX3NzbFZlcmlmaWVyLnNldEN1cmxIYW5kbGUo
bV9jdXJsSGFuZGxlLmdldCgpKTsKKyAgICBtX3NzbFZlcmlmaWVyLnNldEhvc3ROYW1lKG1fcmVx
dWVzdC51cmwoKS5ob3N0KCkpOworICAgIG1fc3NsVmVyaWZpZXIuc2V0U3NsQ3R4KHNzbEN0eCk7
CisKKyAgICByZXR1cm4gQ1VSTEVfT0s7Cit9CisKKy8vIFRoaXMgaXMgY2FsbGVkIHRvIG9idGFp
biBIVFRQIFBPU1Qgb3IgUFVUIGRhdGEuCisvLyBJdGVyYXRlIHRocm91Z2ggRm9ybURhdGEgZWxl
bWVudHMgYW5kIHVwbG9hZCBmaWxlcy4KKy8vIENhcmVmdWxseSByZXNwZWN0IHRoZSBnaXZlbiBi
dWZmZXIgc2l6ZSBhbmQgZmlsbCB0aGUgcmVzdCBvZiB0aGUgZGF0YSBhdCB0aGUgbmV4dCBjYWxs
cy4KKworc2l6ZV90IEN1cmxSZXF1ZXN0Ojp3aWxsU2VuZERhdGEoY2hhciogcHRyLCBzaXplX3Qg
YmxvY2tTaXplLCBzaXplX3QgbnVtYmVyT2ZCbG9ja3MpCit7CisgICAgaWYgKG1fY2FuY2VsbGVk
KQorICAgICAgICByZXR1cm4gQ1VSTF9SRUFERlVOQ19BQk9SVDsKKworICAgIGlmICghYmxvY2tT
aXplIHx8ICFudW1iZXJPZkJsb2NrcykKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICBpZiAoIW1f
Zm9ybURhdGFTdHJlYW0gfHwgIW1fZm9ybURhdGFTdHJlYW0tPmhhc01vcmVFbGVtZW50cygpKQor
ICAgICAgICByZXR1cm4gMDsKKworICAgIGF1dG8gc2VuZEJ5dGVzID0gbV9mb3JtRGF0YVN0cmVh
bS0+cmVhZChwdHIsIGJsb2NrU2l6ZSwgbnVtYmVyT2ZCbG9ja3MpOworICAgIGlmICghc2VuZEJ5
dGVzKSB7CisgICAgICAgIC8vIFNvbWV0aGluZyB3ZW50IHdyb25nIHNvIGVycm9yIHRoZSBqb2Iu
CisgICAgICAgIHJldHVybiBDVVJMX1JFQURGVU5DX0FCT1JUOworICAgIH0KKworICAgIHJldHVy
biBzZW5kQnl0ZXM7Cit9CisKKy8vIFRoaXMgaXMgYmVpbmcgY2FsbGVkIGZvciBlYWNoIEhUVFAg
aGVhZGVyIGluIHRoZSByZXNwb25zZS4gVGhpcyBpbmNsdWRlcyAnXHJcbicKKy8vIGZvciB0aGUg
bGFzdCBsaW5lIG9mIHRoZSBoZWFkZXIuCisKK3NpemVfdCBDdXJsUmVxdWVzdDo6ZGlkUmVjZWl2
ZUhlYWRlcihTdHJpbmcmJiBoZWFkZXIpCit7CisgICAgc3RhdGljIGNvbnN0IGF1dG8gZW1wdHlM
aW5lQ1JMRiA9ICJcclxuIjsKKyAgICBzdGF0aWMgY29uc3QgYXV0byBlbXB0eUxpbmVMRiA9ICJc
biI7CisKKyAgICBpZiAobV9jYW5jZWxsZWQpCisgICAgICAgIHJldHVybiAwOworCisgICAgYXV0
byByZWNlaXZlQnl0ZXMgPSBzdGF0aWNfY2FzdDxzaXplX3Q+KGhlYWRlci5sZW5ndGgoKSk7CisK
KyAgICAvLyBUaGUgSFRUUCBzdGFuZGFyZCByZXF1aXJlcyB0byB1c2UgXHJcbiBidXQgZm9yIGNv
bXBhdGliaWxpdHkgaXQgcmVjb21tZW5kcyB0byBhY2NlcHQgYWxzbyBcbi4KKyAgICBpZiAoKGhl
YWRlciAhPSBlbXB0eUxpbmVDUkxGKSAmJiAoaGVhZGVyICE9IGVtcHR5TGluZUxGKSkgeworICAg
ICAgICBtX3Jlc3BvbnNlLmhlYWRlcnMuYXBwZW5kKFdURk1vdmUoaGVhZGVyKSk7CisgICAgICAg
IHJldHVybiByZWNlaXZlQnl0ZXM7CisgICAgfQorCisgICAgbG9uZyBzdGF0dXNDb2RlID0gMDsK
KyAgICBpZiAoYXV0byBjb2RlID0gbV9jdXJsSGFuZGxlLT5nZXRSZXNwb25zZUNvZGUoKSkKKyAg
ICAgICAgc3RhdHVzQ29kZSA9ICpjb2RlOworCisgICAgbG9uZyBodHRwQ29ubmVjdENvZGUgPSAw
OworICAgIGlmIChhdXRvIGNvZGUgPSBtX2N1cmxIYW5kbGUtPmdldEh0dHBDb25uZWN0Q29kZSgp
KQorICAgICAgICBodHRwQ29ubmVjdENvZGUgPSAqY29kZTsKKworICAgIGlmICgoMTAwIDw9IHN0
YXR1c0NvZGUpICYmIChzdGF0dXNDb2RlIDwgMjAwKSkgeworICAgICAgICAvLyBKdXN0IHJldHVy
biB3aGVuIHJlY2VpdmluZyBodHRwIGluZm8sIGUuZy4gSFRUUC8xLjEgMTAwIENvbnRpbnVlLgor
ICAgICAgICAvLyBJZiBub3QsIHRoZSByZXF1ZXN0IG1pZ2h0IGJlIGNhbmNlbGxlZCwgYmVjYXVz
ZSB0aGUgTUlNRSB0eXBlIHdpbGwgYmUgZW1wdHkgZm9yIHRoaXMgcmVzcG9uc2UuCisgICAgICAg
IG1fcmVzcG9uc2UgPSBDdXJsUmVzcG9uc2UgeyB9OworICAgICAgICByZXR1cm4gcmVjZWl2ZUJ5
dGVzOworICAgIH0KKworICAgIGlmICghc3RhdHVzQ29kZSAmJiAoaHR0cENvbm5lY3RDb2RlID09
IDIwMCkpIHsKKyAgICAgICAgLy8gQ29tZXMgaGVyZSB3aGVuIHJlY2VpdmluZyAyMDAgQ29ubmVj
dGlvbiBFc3RhYmxpc2hlZC4gSnVzdCByZXR1cm4uCisgICAgICAgIG1fcmVzcG9uc2UgPSBDdXJs
UmVzcG9uc2UgeyB9OworICAgICAgICByZXR1cm4gcmVjZWl2ZUJ5dGVzOworICAgIH0KKworICAg
IC8vIElmIHRoZSBGT0xMT1dMT0NBVElPTiBvcHRpb24gaXMgZW5hYmxlZCBmb3IgdGhlIGN1cmwg
aGFuZGxlIHRoZW4KKyAgICAvLyBjdXJsIHdpbGwgZm9sbG93IHRoZSByZWRpcmVjdGlvbnMgaW50
ZXJuYWxseS4gVGh1cyB0aGlzIGhlYWRlciBjYWxsYmFjaworICAgIC8vIHdpbGwgYmUgY2FsbGVk
IG1vcmUgdGhhbiBvbmUgdGltZSB3aXRoIHRoZSBsaW5lIHN0YXJ0aW5nICJIVFRQIiBmb3Igb25l
IGpvYi4KKworICAgIG1fcmVzcG9uc2UudXJsID0gbV9jdXJsSGFuZGxlLT5nZXRFZmZlY3RpdmVV
UkwoKTsKKyAgICBtX3Jlc3BvbnNlLnN0YXR1c0NvZGUgPSBzdGF0dXNDb2RlOworCisgICAgaWYg
KGF1dG8gbGVuZ3RoID0gbV9jdXJsSGFuZGxlLT5nZXRDb250ZW50TGVuZ3RoKCkpCisgICAgICAg
IG1fcmVzcG9uc2UuZXhwZWN0ZWRDb250ZW50TGVuZ3RoID0gKmxlbmd0aDsKKworICAgIGlmIChh
dXRvIHBvcnQgPSBtX2N1cmxIYW5kbGUtPmdldFByaW1hcnlQb3J0KCkpCisgICAgICAgIG1fcmVz
cG9uc2UuY29ubmVjdFBvcnQgPSAqcG9ydDsKKworICAgIGlmIChhdXRvIGF1dGggPSBtX2N1cmxI
YW5kbGUtPmdldEh0dHBBdXRoQXZhaWwoKSkKKyAgICAgICAgbV9yZXNwb25zZS5hdmFpbGFibGVI
dHRwQXV0aCA9ICphdXRoOworCisgICAgaWYgKGF1dG8gbWV0cmljcyA9IG1fY3VybEhhbmRsZS0+
Z2V0TmV0d29ya0xvYWRNZXRyaWNzKCkpCisgICAgICAgIG1fbmV0d29ya0xvYWRNZXRyaWNzID0g
Km1ldHJpY3M7CisKKyAgICBpbnZva2VEaWRSZWNlaXZlUmVzcG9uc2UoKTsKKworICAgIHJldHVy
biByZWNlaXZlQnl0ZXM7Cit9CisKKy8vIGNhbGxlZCB3aXRoIGRhdGEgYWZ0ZXIgYWxsIGhlYWRl
cnMgaGF2ZSBiZWVuIHByb2Nlc3NlZCB2aWEgaGVhZGVyQ2FsbGJhY2sKKworc2l6ZV90IEN1cmxS
ZXF1ZXN0OjpkaWRSZWNlaXZlRGF0YShSZWY8U2hhcmVkQnVmZmVyPiYmIGJ1ZmZlcikKK3sKKyAg
ICBpZiAobV9jYW5jZWxsZWQpCisgICAgICAgIHJldHVybiAwOworCisgICAgYXV0byByZWNlaXZl
Qnl0ZXMgPSBidWZmZXItPnNpemUoKTsKKworICAgIC8vIHRoaXMgc2hvdWxkbid0IGJlIG5lY2Vz
c2FyeSBidXQgYXBwYXJlbnRseSBpcy4gQ1VSTCB3cml0ZXMgdGhlIGRhdGEKKyAgICAvLyBvZiBo
dG1sIHBhZ2UgZXZlbiBpZiBpdCBpcyBhIHJlZGlyZWN0IHRoYXQgd2FzIGhhbmRsZWQgaW50ZXJu
YWxseQorICAgIC8vIGNhbiBiZSBvYnNlcnZlZCBlLmcuIG9uIGdtYWlsLmNvbQorICAgIGF1dG8g
c3RhdHVzQ29kZSA9IG1fY3VybEhhbmRsZS0+Z2V0UmVzcG9uc2VDb2RlKCk7CisgICAgaWYgKHN0
YXR1c0NvZGUgJiYgKDMwMCA8PSAqc3RhdHVzQ29kZSkgJiYgKCpzdGF0dXNDb2RlIDwgNDAwKSkK
KyAgICAgICAgcmV0dXJuIHJlY2VpdmVCeXRlczsKKworICAgIGlmIChyZWNlaXZlQnl0ZXMpIHsK
KyAgICAgICAgY2FsbERlbGVnYXRlKFt0aGlzLCBidWZmZXIgPSBXVEZNb3ZlKGJ1ZmZlcildKEN1
cmxSZXF1ZXN0RGVsZWdhdGUqIGRlbGVnYXRlKSBtdXRhYmxlIHsKKyAgICAgICAgICAgIGlmIChk
ZWxlZ2F0ZSkKKyAgICAgICAgICAgICAgICBkZWxlZ2F0ZS0+Y3VybERpZFJlY2VpdmVCdWZmZXIo
V1RGTW92ZShidWZmZXIpKTsKKyAgICAgICAgfSk7CisgICAgfQorCisgICAgcmV0dXJuIHJlY2Vp
dmVCeXRlczsKK30KKwordm9pZCBDdXJsUmVxdWVzdDo6ZGlkQ29tcGxldGVUcmFuc2ZlcihDVVJM
Y29kZSByZXN1bHQpCit7CisgICAgaWYgKG1fY2FuY2VsbGVkKSB7CisgICAgICAgIG1fY3VybEhh
bmRsZSA9IG51bGxwdHI7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZiAocmVzdWx0
ID09IENVUkxFX09LKSB7CisgICAgICAgIGlmIChhdXRvIG1ldHJpY3MgPSBtX2N1cmxIYW5kbGUt
PmdldE5ldHdvcmtMb2FkTWV0cmljcygpKQorICAgICAgICAgICAgbV9uZXR3b3JrTG9hZE1ldHJp
Y3MgPSAqbWV0cmljczsKKworICAgICAgICBjYWxsRGVsZWdhdGUoW3RoaXNdKEN1cmxSZXF1ZXN0
RGVsZWdhdGUqIGRlbGVnYXRlKSB7CisgICAgICAgICAgICBpZiAoZGVsZWdhdGUpCisgICAgICAg
ICAgICAgICAgZGVsZWdhdGUtPmN1cmxEaWRDb21wbGV0ZSgpOworICAgICAgICB9KTsKKyAgICB9
IGVsc2UgeworICAgICAgICBhdXRvIHJlc291cmNlRXJyb3IgPSBSZXNvdXJjZUVycm9yOjpodHRw
RXJyb3IocmVzdWx0LCBtX3JlcXVlc3QudXJsKCkpOworICAgICAgICBpZiAobV9zc2xWZXJpZmll
ci5zc2xFcnJvcnMoKSkKKyAgICAgICAgICAgIHJlc291cmNlRXJyb3Iuc2V0U3NsRXJyb3JzKG1f
c3NsVmVyaWZpZXIuc3NsRXJyb3JzKCkpOworCisgICAgICAgIGNhbGxEZWxlZ2F0ZShbdGhpcywg
ZXJyb3IgPSByZXNvdXJjZUVycm9yLmlzb2xhdGVkQ29weSgpXShDdXJsUmVxdWVzdERlbGVnYXRl
KiBkZWxlZ2F0ZSkgeworICAgICAgICAgICAgaWYgKGRlbGVnYXRlKQorICAgICAgICAgICAgICAg
IGRlbGVnYXRlLT5jdXJsRGlkRmFpbFdpdGhFcnJvcihlcnJvcik7CisgICAgICAgIH0pOworICAg
IH0KKworICAgIG1fZm9ybURhdGFTdHJlYW0gPSBudWxscHRyOworICAgIG1fY3VybEhhbmRsZSA9
IG51bGxwdHI7Cit9CisKK3ZvaWQgQ3VybFJlcXVlc3Q6OmRpZENhbmNlbFRyYW5zZmVyKCkKK3sK
KyAgICBtX2Zvcm1EYXRhU3RyZWFtID0gbnVsbHB0cjsKKyAgICBtX2N1cmxIYW5kbGUgPSBudWxs
cHRyOworfQorCit2b2lkIEN1cmxSZXF1ZXN0OjpyZXNvbHZlQmxvYlJlZmVyZW5jZXMoUmVzb3Vy
Y2VSZXF1ZXN0JiByZXF1ZXN0KQoreworICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7CisKKyAg
ICBSZWZQdHI8Rm9ybURhdGE+IGZvcm1EYXRhID0gcmVxdWVzdC5odHRwQm9keSgpOworICAgIGlm
ICghZm9ybURhdGEpCisgICAgICAgIHJldHVybjsKKworICAgIC8vIFJlc29sdmUgdGhlIGJsb2Ig
ZWxlbWVudHMgc28gdGhlIGZvcm1EYXRhIGNhbiBjb3JyZWN0bHkgcmVwb3J0IGl0J3Mgc2l6ZS4K
KyAgICBmb3JtRGF0YSA9IGZvcm1EYXRhLT5yZXNvbHZlQmxvYlJlZmVyZW5jZXMoKTsKKyAgICBy
ZXF1ZXN0LnNldEhUVFBCb2R5KFdURk1vdmUoZm9ybURhdGEpKTsKK30KKwordm9pZCBDdXJsUmVx
dWVzdDo6c2V0dXBQVVQoUmVzb3VyY2VSZXF1ZXN0JiByZXF1ZXN0KQoreworICAgIG1fY3VybEhh
bmRsZS0+ZW5hYmxlSHR0cFB1dFJlcXVlc3QoKTsKKworICAgIC8vIERpc2FibGUgdGhlIEV4cGVj
dDogMTAwIGNvbnRpbnVlIGhlYWRlcgorICAgIG1fY3VybEhhbmRsZS0+cmVtb3ZlUmVxdWVzdEhl
YWRlcigiRXhwZWN0Iik7CisKKyAgICBhdXRvIG51bUVsZW1lbnRzID0gcmVxdWVzdC5odHRwQm9k
eSgpLT5lbGVtZW50cygpLnNpemUoKTsKKyAgICBpZiAoIW51bUVsZW1lbnRzKQorICAgICAgICBy
ZXR1cm47CisKKyAgICBzZXR1cEZvcm1EYXRhKHJlcXVlc3QsIGZhbHNlKTsKK30KKwordm9pZCBD
dXJsUmVxdWVzdDo6c2V0dXBQT1NUKFJlc291cmNlUmVxdWVzdCYgcmVxdWVzdCkKK3sKKyAgICBt
X2N1cmxIYW5kbGUtPmVuYWJsZUh0dHBQb3N0UmVxdWVzdCgpOworCisgICAgYXV0byBudW1FbGVt
ZW50cyA9IHJlcXVlc3QuaHR0cEJvZHkoKS0+ZWxlbWVudHMoKS5zaXplKCk7CisgICAgaWYgKCFu
dW1FbGVtZW50cykKKyAgICAgICAgcmV0dXJuOworCisgICAgLy8gRG8gbm90IHN0cmVhbSBmb3Ig
c2ltcGxlIFBPU1QgZGF0YQorICAgIGlmIChudW1FbGVtZW50cyA9PSAxKSB7CisgICAgICAgIG1f
cG9zdEJ1ZmZlciA9IHJlcXVlc3QuaHR0cEJvZHkoKS0+ZmxhdHRlbigpOworICAgICAgICBpZiAo
bV9wb3N0QnVmZmVyLnNpemUoKSkKKyAgICAgICAgICAgIG1fY3VybEhhbmRsZS0+c2V0UG9zdEZp
ZWxkcyhtX3Bvc3RCdWZmZXIuZGF0YSgpLCBtX3Bvc3RCdWZmZXIuc2l6ZSgpKTsKKyAgICB9IGVs
c2UKKyAgICAgICAgc2V0dXBGb3JtRGF0YShyZXF1ZXN0LCB0cnVlKTsKK30KKwordm9pZCBDdXJs
UmVxdWVzdDo6c2V0dXBGb3JtRGF0YShSZXNvdXJjZVJlcXVlc3QmIHJlcXVlc3QsIGJvb2wgaXNQ
b3N0UmVxdWVzdCkKK3sKKyAgICBzdGF0aWMgYXV0byBtYXhDdXJsT2ZmVCA9IEN1cmxIYW5kbGU6
Om1heEN1cmxPZmZUKCk7CisKKyAgICAvLyBPYnRhaW4gdGhlIHRvdGFsIHNpemUgb2YgdGhlIGZv
cm0gZGF0YQorICAgIGN1cmxfb2ZmX3Qgc2l6ZSA9IDA7CisgICAgYm9vbCBjaHVua2VkVHJhbnNm
ZXIgPSBmYWxzZTsKKyAgICBhdXRvIGVsZW1lbnRzID0gcmVxdWVzdC5odHRwQm9keSgpLT5lbGVt
ZW50cygpOworCisgICAgZm9yIChhdXRvIGVsZW1lbnQgOiBlbGVtZW50cykgeworICAgICAgICBp
ZiAoZWxlbWVudC5tX3R5cGUgPT0gRm9ybURhdGFFbGVtZW50OjpUeXBlOjpFbmNvZGVkRmlsZSkg
eworICAgICAgICAgICAgbG9uZyBsb25nIGZpbGVTaXplUmVzdWx0OworICAgICAgICAgICAgaWYg
KGdldEZpbGVTaXplKGVsZW1lbnQubV9maWxlbmFtZSwgZmlsZVNpemVSZXN1bHQpKSB7CisgICAg
ICAgICAgICAgICAgaWYgKGZpbGVTaXplUmVzdWx0ID4gbWF4Q3VybE9mZlQpIHsKKyAgICAgICAg
ICAgICAgICAgICAgLy8gRmlsZSBzaXplIGlzIHRvbyBiaWcgZm9yIHNwZWNpZnlpbmcgaXQgdG8g
Y1VSTAorICAgICAgICAgICAgICAgICAgICBjaHVua2VkVHJhbnNmZXIgPSB0cnVlOworICAgICAg
ICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAg
c2l6ZSArPSBmaWxlU2l6ZVJlc3VsdDsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAg
ICAgICAgY2h1bmtlZFRyYW5zZmVyID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgICAgIH0KKyAgICAgICAgfSBlbHNlCisgICAgICAgICAgICBzaXplICs9IGVsZW1lbnQu
bV9kYXRhLnNpemUoKTsKKyAgICB9CisKKyAgICAvLyBjVVJMIGd1ZXNzZXMgdGhhdCB3ZSB3YW50
IGNodW5rZWQgZW5jb2RpbmcgYXMgbG9uZyBhcyB3ZSBzcGVjaWZ5IHRoZSBoZWFkZXIKKyAgICBp
ZiAoY2h1bmtlZFRyYW5zZmVyKQorICAgICAgICBtX2N1cmxIYW5kbGUtPmFwcGVuZFJlcXVlc3RI
ZWFkZXIoIlRyYW5zZmVyLUVuY29kaW5nOiBjaHVua2VkIik7CisgICAgZWxzZSB7CisgICAgICAg
IGlmIChpc1Bvc3RSZXF1ZXN0KQorICAgICAgICAgICAgbV9jdXJsSGFuZGxlLT5zZXRQb3N0Rmll
bGRMYXJnZShzaXplKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgbV9jdXJsSGFuZGxlLT5z
ZXRJbkZpbGVTaXplTGFyZ2Uoc2l6ZSk7CisgICAgfQorCisgICAgbV9mb3JtRGF0YVN0cmVhbSA9
IHN0ZDo6bWFrZV91bmlxdWU8Rm9ybURhdGFTdHJlYW0+KCk7CisgICAgbV9mb3JtRGF0YVN0cmVh
bS0+c2V0SFRUUEJvZHkocmVxdWVzdC5odHRwQm9keSgpKTsKKworICAgIG1fY3VybEhhbmRsZS0+
c2V0UmVhZENhbGxiYWNrRnVuY3Rpb24od2lsbFNlbmREYXRhQ2FsbGJhY2ssIHRoaXMpOworfQor
Cit2b2lkIEN1cmxSZXF1ZXN0OjppbnZva2VEaWRSZWNlaXZlUmVzcG9uc2VGb3JGaWxlKFVSTCYg
dXJsKQoreworICAgIC8vIFNpbmNlIHRoZSBjb2RlIGluIGRpZFJlY2VpdmVIZWFkZXIoKSB3aWxs
IG5vdCBoYXZlIHJ1biBmb3IgbG9jYWwgZmlsZXMKKyAgICAvLyB0aGUgY29kZSB0byBzZXQgdGhl
IFVSTCBhbmQgZmlyZSBkaWRSZWNlaXZlUmVzcG9uc2UgaXMgbmV2ZXIgcnVuLAorICAgIC8vIHdo
aWNoIG1lYW5zIHRoZSBSZXNvdXJjZUxvYWRlcidzIHJlc3BvbnNlIGRvZXMgbm90IGNvbnRhaW4g
dGhlIFVSTC4KKyAgICAvLyBSdW4gdGhlIGNvZGUgaGVyZSBmb3IgbG9jYWwgZmlsZXMgdG8gcmVz
b2x2ZSB0aGUgaXNzdWUuCisKKyAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOworICAgIEFTU0VS
VCh1cmwuaXNMb2NhbEZpbGUoKSk7CisKKyAgICBtX3Jlc3BvbnNlLnVybCA9IHVybDsKKyAgICBt
X3Jlc3BvbnNlLnN0YXR1c0NvZGUgPSAyMDA7CisKKyAgICAvLyBEZXRlcm1pbmUgdGhlIE1JTUUg
dHlwZSBiYXNlZCBvbiB0aGUgcGF0aC4KKyAgICBtX3Jlc3BvbnNlLmhlYWRlcnMuYXBwZW5kKFN0
cmluZygiQ29udGVudC1UeXBlOiAiICsgTUlNRVR5cGVSZWdpc3RyeTo6Z2V0TUlNRVR5cGVGb3JQ
YXRoKG1fcmVzcG9uc2UudXJsKSkpOworCisgICAgaWYgKCFtX2lzU3luY1JlcXVlc3QpIHsKKyAg
ICAgICAgLy8gRGlkUmVjZWl2ZVJlc3BvbnNlIG11c3Qgbm90IGJlIGNhbGxlZCBpbW1lZGlhdGVs
eQorICAgICAgICBDdXJsSm9iTWFuYWdlcjo6c2luZ2xldG9uKCkuY2FsbE9uSm9iVGhyZWFkKFtw
cm90ZWN0ZWRUaGlzID0gbWFrZVJlZigqdGhpcyldKCkgeworICAgICAgICAgICAgcHJvdGVjdGVk
VGhpcy0+aW52b2tlRGlkUmVjZWl2ZVJlc3BvbnNlKCk7CisgICAgICAgIH0pOworICAgIH0gZWxz
ZQorICAgICAgICBpbnZva2VEaWRSZWNlaXZlUmVzcG9uc2UoKTsKK30KKwordm9pZCBDdXJsUmVx
dWVzdDo6aW52b2tlRGlkUmVjZWl2ZVJlc3BvbnNlKCkKK3sKKyAgICBjYWxsRGVsZWdhdGUoW3Ro
aXMsIHJlc3BvbnNlID0gbV9yZXNwb25zZS5pc29sYXRlZENvcHkoKV0oQ3VybFJlcXVlc3REZWxl
Z2F0ZSogZGVsZWdhdGUpIHsKKyAgICAgICAgaWYgKGRlbGVnYXRlKQorICAgICAgICAgICAgZGVs
ZWdhdGUtPmN1cmxEaWRSZWNlaXZlUmVzcG9uc2UocmVzcG9uc2UpOworICAgIH0pOworfQorCit2
b2lkIEN1cmxSZXF1ZXN0OjpzZXRQYXVzZWQoYm9vbCBwYXVzZWQpCit7CisgICAgaWYgKG1fY2Fu
Y2VsbGVkKQorICAgICAgICByZXR1cm47CisKKyAgICBpZiAocGF1c2VkID09IG1faXNQYXVzZWQp
CisgICAgICAgIHJldHVybjsKKworICAgIG1faXNQYXVzZWQgPSBwYXVzZWQ7CisKKyAgICBpZiAo
IW1fY3VybEhhbmRsZSkKKyAgICAgICAgcmV0dXJuOworCisgICAgaWYgKCFtX2lzU3luY1JlcXVl
c3QgJiYgaXNNYWluVGhyZWFkKCkpIHsKKyAgICAgICAgQ3VybEpvYk1hbmFnZXI6OnNpbmdsZXRv
bigpLmNhbGxPbkpvYlRocmVhZChbcHJvdGVjdGVkVGhpcyA9IG1ha2VSZWYoKnRoaXMpLCBwYXVz
ZWQgPSBtX2lzUGF1c2VkXSgpIHsKKyAgICAgICAgICAgIGlmIChwcm90ZWN0ZWRUaGlzLT5tX2Nh
bmNlbGxlZCkKKyAgICAgICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAgICAgIGF1dG8gZXJy
b3IgPSBwcm90ZWN0ZWRUaGlzLT5tX2N1cmxIYW5kbGUtPnBhdXNlKHBhdXNlZCA/IENVUkxQQVVT
RV9BTEwgOiBDVVJMUEFVU0VfQ09OVCk7CisgICAgICAgICAgICBpZiAoKGVycm9yICE9IENVUkxF
X09LKSAmJiAhcGF1c2VkKSB7CisgICAgICAgICAgICAgICAgLy8gUmVzdGFydGluZyB0aGUgaGFu
ZGxlIGhhcyBmYWlsZWQgc28ganVzdCBjYW5jZWwgaXQuCisgICAgICAgICAgICAgICAgcHJvdGVj
dGVkVGhpcy0+Y2FuY2VsKCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0pOworICAgIH0gZWxz
ZSB7CisgICAgICAgIGF1dG8gZXJyb3IgPSBtX2N1cmxIYW5kbGUtPnBhdXNlKG1faXNQYXVzZWQg
PyBDVVJMUEFVU0VfQUxMIDogQ1VSTFBBVVNFX0NPTlQpOworICAgICAgICBpZiAoKGVycm9yICE9
IENVUkxFX09LKSAmJiAhbV9pc1BhdXNlZCkKKyAgICAgICAgICAgIGNhbmNlbCgpOworICAgIH0K
K30KKworQ1VSTGNvZGUgQ3VybFJlcXVlc3Q6OndpbGxTZXR1cFNzbEN0eENhbGxiYWNrKENVUkwq
LCB2b2lkKiBzc2xDdHgsIHZvaWQqIHVzZXJEYXRhKQoreworICAgIHJldHVybiBzdGF0aWNfY2Fz
dDxDdXJsUmVxdWVzdCo+KHVzZXJEYXRhKS0+d2lsbFNldHVwU3NsQ3R4KHNzbEN0eCk7Cit9CisK
K3NpemVfdCBDdXJsUmVxdWVzdDo6d2lsbFNlbmREYXRhQ2FsbGJhY2soY2hhciogcHRyLCBzaXpl
X3QgYmxvY2tTaXplLCBzaXplX3QgbnVtYmVyT2ZCbG9ja3MsIHZvaWQqIHVzZXJEYXRhKQorewor
ICAgIHJldHVybiBzdGF0aWNfY2FzdDxDdXJsUmVxdWVzdCo+KHVzZXJEYXRhKS0+d2lsbFNlbmRE
YXRhKHB0ciwgYmxvY2tTaXplLCBudW1iZXJPZkJsb2Nrcyk7Cit9CisKK3NpemVfdCBDdXJsUmVx
dWVzdDo6ZGlkUmVjZWl2ZUhlYWRlckNhbGxiYWNrKGNoYXIqIHB0ciwgc2l6ZV90IGJsb2NrU2l6
ZSwgc2l6ZV90IG51bWJlck9mQmxvY2tzLCB2b2lkKiB1c2VyRGF0YSkKK3sKKyAgICByZXR1cm4g
c3RhdGljX2Nhc3Q8Q3VybFJlcXVlc3QqPih1c2VyRGF0YSktPmRpZFJlY2VpdmVIZWFkZXIoU3Ry
aW5nKHB0ciwgYmxvY2tTaXplICogbnVtYmVyT2ZCbG9ja3MpKTsKK30KKworc2l6ZV90IEN1cmxS
ZXF1ZXN0OjpkaWRSZWNlaXZlRGF0YUNhbGxiYWNrKGNoYXIqIHB0ciwgc2l6ZV90IGJsb2NrU2l6
ZSwgc2l6ZV90IG51bWJlck9mQmxvY2tzLCB2b2lkKiB1c2VyRGF0YSkKK3sKKyAgICByZXR1cm4g
c3RhdGljX2Nhc3Q8Q3VybFJlcXVlc3QqPih1c2VyRGF0YSktPmRpZFJlY2VpdmVEYXRhKFNoYXJl
ZEJ1ZmZlcjo6Y3JlYXRlKHB0ciwgYmxvY2tTaXplICogbnVtYmVyT2ZCbG9ja3MpKTsKK30KKwor
fQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsv
Y3VybC9DdXJsUmVxdWVzdC5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9jdXJs
L0N1cmxSZXF1ZXN0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLmU4
YTljMzY3YzQzCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0
d29yay9jdXJsL0N1cmxSZXF1ZXN0LmgKQEAgLTAsMCArMSwxMTkgQEAKKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMTcgU29ueSBJbnRlcmFjdGl2ZSBFbnRlcnRhaW5tZW50IEluYy4KKyAqCisgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
KyAqIAorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMg
Q09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
CisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisg
KiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJP
RklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQor
ICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICov
CisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSAiQ3VybEpvYk1hbmFnZXIuaCIKKyNpbmNsdWRl
ICJDdXJsUmVzcG9uc2UuaCIKKyNpbmNsdWRlICJDdXJsU1NMVmVyaWZpZXIuaCIKKyNpbmNsdWRl
ICJGb3JtRGF0YVN0cmVhbUN1cmwuaCIKKyNpbmNsdWRlICJOZXR3b3JrTG9hZE1ldHJpY3MuaCIK
KyNpbmNsdWRlICJSZXNvdXJjZVJlcXVlc3QuaCIKKyNpbmNsdWRlIDx3dGYvTm9uY29weWFibGUu
aD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBDdXJsUmVxdWVzdERlbGVnYXRlOwor
Y2xhc3MgUmVzb3VyY2VFcnJvcjsKK2NsYXNzIFNoYXJlZEJ1ZmZlcjsKKworY2xhc3MgQ3VybFJl
cXVlc3QgOiBwdWJsaWMgVGhyZWFkU2FmZVJlZkNvdW50ZWQ8Q3VybFJlcXVlc3Q+LCBwdWJsaWMg
Q3VybEpvYkNsaWVudCB7CisgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoQ3VybFJlcXVlc3QpOwor
CitwdWJsaWM6CisgICAgQ3VybFJlcXVlc3QoY29uc3QgUmVzb3VyY2VSZXF1ZXN0JiwgQ3VybFJl
cXVlc3REZWxlZ2F0ZSogPSBudWxscHRyLCBib29sIHNob3VsZFN1c3BlbmQgPSBmYWxzZSk7Cisg
ICAgdmlydHVhbCB+Q3VybFJlcXVlc3QoKSB7IH0KKworICAgIHZvaWQgc2V0RGVsZWdhdGUoQ3Vy
bFJlcXVlc3REZWxlZ2F0ZSogZGVsZWdhdGUpIHsgbV9kZWxlZ2F0ZSA9IGRlbGVnYXRlOyAgfQor
ICAgIHZvaWQgc2V0VXNlclBhc3MoY29uc3QgU3RyaW5nJiwgY29uc3QgU3RyaW5nJik7CisKKyAg
ICB2b2lkIHN0YXJ0KGJvb2wgaXNTeW5jUmVxdWVzdCA9IGZhbHNlKTsKKyAgICB2b2lkIGNhbmNl
bCgpOworICAgIHZvaWQgc3VzcGVuZCgpOworICAgIHZvaWQgcmVzdW1lKCk7CisKKyAgICBib29s
IGlzU3luY1JlcXVlc3QoKSB7IHJldHVybiBtX2lzU3luY1JlcXVlc3Q7IH0KKworICAgIE5ldHdv
cmtMb2FkTWV0cmljcyBnZXROZXR3b3JrTG9hZE1ldHJpY3MoKSB7IHJldHVybiBtX25ldHdvcmtM
b2FkTWV0cmljcy5pc29sYXRlZENvcHkoKTsgfQorCitwcml2YXRlOgorICAgIHZvaWQgcmV0YWlu
KCkgb3ZlcnJpZGUgeyByZWYoKTsgfQorICAgIHZvaWQgcmVsZWFzZSgpIG92ZXJyaWRlIHsgZGVy
ZWYoKTsgfQorICAgIENVUkwqIGhhbmRsZSgpIG92ZXJyaWRlIHsgcmV0dXJuIG1fY3VybEhhbmRs
ZSA/IG1fY3VybEhhbmRsZS0+aGFuZGxlKCkgOiBudWxscHRyOyB9CisKKyAgICB2b2lkIHN0YXJ0
V2l0aEpvYk1hbmFnZXIoKTsKKworICAgIHZvaWQgY2FsbERlbGVnYXRlKFdURjo6RnVuY3Rpb248
dm9pZChDdXJsUmVxdWVzdERlbGVnYXRlKik+KTsKKworICAgIC8vIFRyYW5zZmVyIHByb2Nlc3Np
bmcgb2YgUmVxdWVzdCBib2R5LCBSZXNwb25zZSBoZWFkZXIvYm9keQorICAgIC8vIENhbGxlZCBi
eSB3b3JrZXIgdGhyZWFkIGluIGNhc2Ugb2YgYXN5bmMsIG1haW4gdGhyZWFkIGluIGNhc2Ugb2Yg
c3luYy4KKyAgICBDVVJMKiBzZXR1cFRyYW5zZmVyKCkgb3ZlcnJpZGU7CisgICAgQ1VSTGNvZGUg
d2lsbFNldHVwU3NsQ3R4KHZvaWQqKTsKKyAgICBzaXplX3Qgd2lsbFNlbmREYXRhKGNoYXIqLCBz
aXplX3QsIHNpemVfdCk7CisgICAgc2l6ZV90IGRpZFJlY2VpdmVIZWFkZXIoU3RyaW5nJiYpOwor
ICAgIHNpemVfdCBkaWRSZWNlaXZlRGF0YShSZWY8U2hhcmVkQnVmZmVyPiYmKTsKKyAgICB2b2lk
IGRpZENvbXBsZXRlVHJhbnNmZXIoQ1VSTGNvZGUpIG92ZXJyaWRlOworICAgIHZvaWQgZGlkQ2Fu
Y2VsVHJhbnNmZXIoKSBvdmVycmlkZTsKKworICAgIC8vIEZvciBQT1NUIGFuZCBQVVQgbWV0aG9k
IAorICAgIHZvaWQgcmVzb2x2ZUJsb2JSZWZlcmVuY2VzKFJlc291cmNlUmVxdWVzdCYpOworICAg
IHZvaWQgc2V0dXBQT1NUKFJlc291cmNlUmVxdWVzdCYpOworICAgIHZvaWQgc2V0dXBQVVQoUmVz
b3VyY2VSZXF1ZXN0Jik7CisgICAgdm9pZCBzZXR1cEZvcm1EYXRhKFJlc291cmNlUmVxdWVzdCYs
IGJvb2wpOworCisgICAgLy8gUHJvY2Vzc2luZyBmb3IgRGlkUmVzb3VyY2VSZXNwb25zZQorICAg
IHZvaWQgaW52b2tlRGlkUmVjZWl2ZVJlc3BvbnNlRm9yRmlsZShVUkwmKTsKKyAgICB2b2lkIGlu
dm9rZURpZFJlY2VpdmVSZXNwb25zZSgpOworICAgIHZvaWQgc2V0UGF1c2VkKGJvb2wpOworCisg
ICAgLy8gQ2FsbGJhY2sgZnVuY3Rpb25zIGZvciBjdXJsCisgICAgc3RhdGljIENVUkxjb2RlIHdp
bGxTZXR1cFNzbEN0eENhbGxiYWNrKENVUkwqLCB2b2lkKiwgdm9pZCopOworICAgIHN0YXRpYyBz
aXplX3Qgd2lsbFNlbmREYXRhQ2FsbGJhY2soY2hhciosIHNpemVfdCwgc2l6ZV90LCB2b2lkKik7
CisgICAgc3RhdGljIHNpemVfdCBkaWRSZWNlaXZlSGVhZGVyQ2FsbGJhY2soY2hhciosIHNpemVf
dCwgc2l6ZV90LCB2b2lkKik7CisgICAgc3RhdGljIHNpemVfdCBkaWRSZWNlaXZlRGF0YUNhbGxi
YWNrKGNoYXIqLCBzaXplX3QsIHNpemVfdCwgdm9pZCopOworCisKKyAgICBzdGQ6OmF0b21pYzxD
dXJsUmVxdWVzdERlbGVnYXRlKj4gbV9kZWxlZ2F0ZSB7IH07CisgICAgYm9vbCBtX2lzU3luY1Jl
cXVlc3QgeyBmYWxzZSB9OworICAgIGJvb2wgbV9jYW5jZWxsZWQgeyBmYWxzZSB9OworCisgICAg
Ly8gVXNlZCBieSB3b3JrZXIgdGhyZWFkIGluIGNhc2Ugb2YgYXN5bmMsIGFuZCBtYWluIHRocmVh
ZCBpbiBjYXNlIG9mIHN5bmMuCisgICAgUmVzb3VyY2VSZXF1ZXN0IG1fcmVxdWVzdDsKKyAgICBT
dHJpbmcgbV91c2VyOworICAgIFN0cmluZyBtX3Bhc3N3b3JkOworICAgIGJvb2wgbV9zaG91bGRT
dXNwZW5kIHsgZmFsc2UgfTsKKworICAgIHN0ZDo6dW5pcXVlX3B0cjxDdXJsSGFuZGxlPiBtX2N1
cmxIYW5kbGU7CisgICAgc3RkOjp1bmlxdWVfcHRyPEZvcm1EYXRhU3RyZWFtPiBtX2Zvcm1EYXRh
U3RyZWFtOworICAgIFZlY3RvcjxjaGFyPiBtX3Bvc3RCdWZmZXI7CisgICAgQ3VybFNTTFZlcmlm
aWVyIG1fc3NsVmVyaWZpZXI7CisgICAgQ3VybFJlc3BvbnNlIG1fcmVzcG9uc2U7CisKKyAgICBi
b29sIG1faXNQYXVzZWQgeyBmYWxzZSB9OworCisgICAgTmV0d29ya0xvYWRNZXRyaWNzIG1fbmV0
d29ya0xvYWRNZXRyaWNzOworfTsKKworfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vbmV0d29yay9jdXJsL0N1cmxSZXF1ZXN0RGVsZWdhdGUuaCBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL25ldHdvcmsvY3VybC9DdXJsUmVxdWVzdERlbGVnYXRlLmgKbmV3IGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLjFiMDFlNmNiYTIwCi0tLSAvZGV2L251bGwKKysr
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9jdXJsL0N1cmxSZXF1ZXN0RGVsZWdh
dGUuaApAQCAtMCwwICsxLDQ0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE3IFNvbnkgSW50
ZXJhY3RpdmUgRW50ZXJ0YWlubWVudCBJbmMuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAKKyAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElT
JycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JT
CisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisg
KiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQg
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAq
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKwor
I2luY2x1ZGUgPHd0Zi9SZWYuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBDdXJs
UmVzcG9uc2U7CitjbGFzcyBSZXNvdXJjZUVycm9yOworY2xhc3MgU2hhcmVkQnVmZmVyOworCitj
bGFzcyBDdXJsUmVxdWVzdERlbGVnYXRlIHsKK3B1YmxpYzoKKyAgICB2aXJ0dWFsIHZvaWQgY3Vy
bERpZFJlY2VpdmVSZXNwb25zZShjb25zdCBDdXJsUmVzcG9uc2UmKSA9IDA7CisgICAgdmlydHVh
bCB2b2lkIGN1cmxEaWRSZWNlaXZlQnVmZmVyKFJlZjxTaGFyZWRCdWZmZXI+JiYpID0gMDsKKyAg
ICB2aXJ0dWFsIHZvaWQgY3VybERpZENvbXBsZXRlKCkgPSAwOworICAgIHZpcnR1YWwgdm9pZCBj
dXJsRGlkRmFpbFdpdGhFcnJvcihjb25zdCBSZXNvdXJjZUVycm9yJikgPSAwOworfTsKKworfQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9jdXJsL1Jlc291cmNl
SGFuZGxlQ3VybC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2N1cmwvUmVz
b3VyY2VIYW5kbGVDdXJsLmNwcAppbmRleCBmZWVlZWMzM2ZhMS4uNzgyNTY0NmU1ZDkgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY3VybC9SZXNvdXJjZUhhbmRs
ZUN1cmwuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY3VybC9SZXNv
dXJjZUhhbmRsZUN1cmwuY3BwCkBAIC0zMiwxOSArMzIsMTIgQEAKIAogI2lmIFVTRShDVVJMKQog
Ci0jaW5jbHVkZSAiQ2FjaGVkUmVzb3VyY2VMb2FkZXIuaCIKICNpbmNsdWRlICJDcmVkZW50aWFs
U3RvcmFnZS5oIgotI2luY2x1ZGUgIkN1cmxDYWNoZU1hbmFnZXIuaCIKICNpbmNsdWRlICJDdXJs
Q29udGV4dC5oIgotI2luY2x1ZGUgIkN1cmxKb2JNYW5hZ2VyLmgiCi0jaW5jbHVkZSAiQ3VybFNT
TEhhbmRsZS5oIgogI2luY2x1ZGUgIkZpbGVTeXN0ZW0uaCIKICNpbmNsdWRlICJMb2dnaW5nLmgi
Ci0jaW5jbHVkZSAiTUlNRVR5cGVSZWdpc3RyeS5oIgotI2luY2x1ZGUgIk5ldHdvcmtpbmdDb250
ZXh0LmgiCiAjaW5jbHVkZSAiUmVzb3VyY2VIYW5kbGVJbnRlcm5hbC5oIgogI2luY2x1ZGUgIlN5
bmNocm9ub3VzTG9hZGVyQ2xpZW50LmgiCi0jaW5jbHVkZSA8d3RmL3RleHQvQmFzZTY0Lmg+CiAK
IG5hbWVzcGFjZSBXZWJDb3JlIHsKIApAQCAtNzgsNyArNzEsOCBAQCBib29sIFJlc291cmNlSGFu
ZGxlOjpzdGFydCgpCiAKIHZvaWQgUmVzb3VyY2VIYW5kbGU6OmNhbmNlbCgpCiB7Ci0gICAgZC0+
bV9kZWxlZ2F0ZS0+Y2FuY2VsKCk7CisgICAgaWYgKGQtPm1fZGVsZWdhdGUpCisgICAgICAgIGQt
Pm1fZGVsZWdhdGUtPmNhbmNlbCgpOwogfQogCiAjaWYgT1MoV0lORE9XUykKQEAgLTExNCw3ICsx
MDgsOCBAQCB2b2lkIFJlc291cmNlSGFuZGxlOjpwbGF0Zm9ybVNldERlZmVyc0xvYWRpbmcoYm9v
bCBkZWZlcnMpCiB7CiAgICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKIAotICAgIGQtPm1fZGVs
ZWdhdGUtPnNldERlZmVyc0xvYWRpbmcoZGVmZXJzKTsKKyAgICBpZiAoZC0+bV9kZWxlZ2F0ZSkK
KyAgICAgICAgZC0+bV9kZWxlZ2F0ZS0+c2V0RGVmZXJzTG9hZGluZyhkZWZlcnMpOwogfQogCiBi
b29sIFJlc291cmNlSGFuZGxlOjpzaG91bGRVc2VDcmVkZW50aWFsU3RvcmFnZSgpCkBAIC0xMzYs
NyArMTMxLDggQEAgdm9pZCBSZXNvdXJjZUhhbmRsZTo6ZGlkUmVjZWl2ZUF1dGhlbnRpY2F0aW9u
Q2hhbGxlbmdlKGNvbnN0IEF1dGhlbnRpY2F0aW9uQ2hhbGwKICAgICAgICAgICAgIHVybFRvU3Rv
cmUgPSBjaGFsbGVuZ2UuZmFpbHVyZVJlc3BvbnNlKCkudXJsKCk7CiAgICAgICAgIENyZWRlbnRp
YWxTdG9yYWdlOjpkZWZhdWx0Q3JlZGVudGlhbFN0b3JhZ2UoKS5zZXQocGFydGl0aW9uLCBjcmVk
ZW50aWFsLCBjaGFsbGVuZ2UucHJvdGVjdGlvblNwYWNlKCksIHVybFRvU3RvcmUpOwogICAgICAg
ICAKLSAgICAgICAgZC0+bV9kZWxlZ2F0ZS0+c2V0QXV0aGVudGljYXRpb24oY3JlZGVudGlhbC51
c2VyKCksIGNyZWRlbnRpYWwucGFzc3dvcmQoKSk7CisgICAgICAgIGlmIChkLT5tX2RlbGVnYXRl
KQorICAgICAgICAgICAgZC0+bV9kZWxlZ2F0ZS0+c2V0QXV0aGVudGljYXRpb24oY3JlZGVudGlh
bC51c2VyKCksIGNyZWRlbnRpYWwucGFzc3dvcmQoKSk7CiAKICAgICAgICAgZC0+bV91c2VyID0g
U3RyaW5nKCk7CiAgICAgICAgIGQtPm1fcGFzcyA9IFN0cmluZygpOwpAQCAtMTYxLDE2ICsxNTcs
MTkgQEAgdm9pZCBSZXNvdXJjZUhhbmRsZTo6ZGlkUmVjZWl2ZUF1dGhlbnRpY2F0aW9uQ2hhbGxl
bmdlKGNvbnN0IEF1dGhlbnRpY2F0aW9uQ2hhbGwKICAgICAgICAgICAgICAgICAgICAgQ3JlZGVu
dGlhbFN0b3JhZ2U6OmRlZmF1bHRDcmVkZW50aWFsU3RvcmFnZSgpLnNldChwYXJ0aXRpb24sIGNy
ZWRlbnRpYWwsIGNoYWxsZW5nZS5wcm90ZWN0aW9uU3BhY2UoKSwgY2hhbGxlbmdlLmZhaWx1cmVS
ZXNwb25zZSgpLnVybCgpKTsKICAgICAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgICAgICBk
LT5tX2RlbGVnYXRlLT5zZXRBdXRoZW50aWNhdGlvbihjcmVkZW50aWFsLnVzZXIoKSwgY3JlZGVu
dGlhbC5wYXNzd29yZCgpKTsKKyAgICAgICAgICAgICAgICBpZiAoZC0+bV9kZWxlZ2F0ZSkKKyAg
ICAgICAgICAgICAgICAgICAgZC0+bV9kZWxlZ2F0ZS0+c2V0QXV0aGVudGljYXRpb24oY3JlZGVu
dGlhbC51c2VyKCksIGNyZWRlbnRpYWwucGFzc3dvcmQoKSk7CiAgICAgICAgICAgICAgICAgcmV0
dXJuOwogICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgfQogCiAgICAgZC0+bV9jdXJyZW50
V2ViQ2hhbGxlbmdlID0gY2hhbGxlbmdlOwotICAgIAotICAgIGlmIChjbGllbnQoKSkKKworICAg
IGlmIChjbGllbnQoKSkgeworICAgICAgICBhdXRvIHByb3RlY3RlZFRoaXMgPSBtYWtlUmVmKCp0
aGlzKTsKICAgICAgICAgY2xpZW50KCktPmRpZFJlY2VpdmVBdXRoZW50aWNhdGlvbkNoYWxsZW5n
ZSh0aGlzLCBkLT5tX2N1cnJlbnRXZWJDaGFsbGVuZ2UpOworICAgIH0KIH0KIAogdm9pZCBSZXNv
dXJjZUhhbmRsZTo6cmVjZWl2ZWRDcmVkZW50aWFsKGNvbnN0IEF1dGhlbnRpY2F0aW9uQ2hhbGxl
bmdlJiBjaGFsbGVuZ2UsIGNvbnN0IENyZWRlbnRpYWwmIGNyZWRlbnRpYWwpCkBAIC0xOTQsNyAr
MTkzLDkgQEAgdm9pZCBSZXNvdXJjZUhhbmRsZTo6cmVjZWl2ZWRDcmVkZW50aWFsKGNvbnN0IEF1
dGhlbnRpY2F0aW9uQ2hhbGxlbmdlJiBjaGFsbGVuZ2UKICAgICAgICAgfQogICAgIH0KIAotICAg
IGQtPm1fZGVsZWdhdGUtPnNldEF1dGhlbnRpY2F0aW9uKGNyZWRlbnRpYWwudXNlcigpLCBjcmVk
ZW50aWFsLnBhc3N3b3JkKCkpOworICAgIGlmIChkLT5tX2RlbGVnYXRlKQorICAgICAgICBkLT5t
X2RlbGVnYXRlLT5zZXRBdXRoZW50aWNhdGlvbihjcmVkZW50aWFsLnVzZXIoKSwgY3JlZGVudGlh
bC5wYXNzd29yZCgpKTsKKwogICAgIGNsZWFyQXV0aGVudGljYXRpb24oKTsKIH0KIApAQCAtMjA1
LDcgKzIwNiw5IEBAIHZvaWQgUmVzb3VyY2VIYW5kbGU6OnJlY2VpdmVkUmVxdWVzdFRvQ29udGlu
dWVXaXRob3V0Q3JlZGVudGlhbChjb25zdCBBdXRoZW50aWNhCiAgICAgaWYgKGNoYWxsZW5nZSAh
PSBkLT5tX2N1cnJlbnRXZWJDaGFsbGVuZ2UpCiAgICAgICAgIHJldHVybjsKIAotICAgIGQtPm1f
ZGVsZWdhdGUtPnNldEF1dGhlbnRpY2F0aW9uKCIiLCAiIik7CisgICAgaWYgKGQtPm1fZGVsZWdh
dGUpCisgICAgICAgIGQtPm1fZGVsZWdhdGUtPnNldEF1dGhlbnRpY2F0aW9uKCIiLCAiIik7CisK
ICAgICBjbGVhckF1dGhlbnRpY2F0aW9uKCk7CiB9CiAKQEAgLTIxNiw4ICsyMTksMTAgQEAgdm9p
ZCBSZXNvdXJjZUhhbmRsZTo6cmVjZWl2ZWRDYW5jZWxsYXRpb24oY29uc3QgQXV0aGVudGljYXRp
b25DaGFsbGVuZ2UmIGNoYWxsZW4KICAgICBpZiAoY2hhbGxlbmdlICE9IGQtPm1fY3VycmVudFdl
YkNoYWxsZW5nZSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgaWYgKGNsaWVudCgpKQorICAgIGlm
IChjbGllbnQoKSkgeworICAgICAgICBhdXRvIHByb3RlY3RlZFRoaXMgPSBtYWtlUmVmKCp0aGlz
KTsKICAgICAgICAgY2xpZW50KCktPnJlY2VpdmVkQ2FuY2VsbGF0aW9uKHRoaXMsIGNoYWxsZW5n
ZSk7CisgICAgfQogfQogCiB2b2lkIFJlc291cmNlSGFuZGxlOjpyZWNlaXZlZFJlcXVlc3RUb1Bl
cmZvcm1EZWZhdWx0SGFuZGxpbmcoY29uc3QgQXV0aGVudGljYXRpb25DaGFsbGVuZ2UmKQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9jdXJsL1Jlc291cmNlSGFu
ZGxlQ3VybERlbGVnYXRlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY3Vy
bC9SZXNvdXJjZUhhbmRsZUN1cmxEZWxlZ2F0ZS5jcHAKaW5kZXggMGYwMjBiMjBlZDkuLjIwYjZk
NGI1YzIzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2N1cmwv
UmVzb3VyY2VIYW5kbGVDdXJsRGVsZWdhdGUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL25ldHdvcmsvY3VybC9SZXNvdXJjZUhhbmRsZUN1cmxEZWxlZ2F0ZS5jcHAKQEAgLTMyLDE3
ICszMiwxNSBAQAogCiAjaWYgVVNFKENVUkwpCiAKKyNpbmNsdWRlICJBdXRoZW50aWNhdGlvbkNo
YWxsZW5nZS5oIgogI2luY2x1ZGUgIkNyZWRlbnRpYWxTdG9yYWdlLmgiCiAjaW5jbHVkZSAiQ3Vy
bENhY2hlTWFuYWdlci5oIgorI2luY2x1ZGUgIkN1cmxSZXF1ZXN0LmgiCiAjaW5jbHVkZSAiSFRU
UFBhcnNlcnMuaCIKLSNpbmNsdWRlICJNSU1FVHlwZVJlZ2lzdHJ5LmgiCiAjaW5jbHVkZSAiTXVs
dGlwYXJ0SGFuZGxlLmgiCi0jaW5jbHVkZSAiUmVzb3VyY2VIYW5kbGUuaCIKICNpbmNsdWRlICJS
ZXNvdXJjZUhhbmRsZUludGVybmFsLmgiCiAjaW5jbHVkZSAiU2hhcmVkQnVmZmVyLmgiCiAjaW5j
bHVkZSAiVGV4dEVuY29kaW5nLmgiCi0jaW5jbHVkZSAiVVJMLmgiCi0jaW5jbHVkZSA8d3RmL01h
aW5UaHJlYWQuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9CYXNlNjQuaD4KIAogbmFtZXNwYWNlIFdl
YkNvcmUgewpAQCAtNTAsMzIgKzQ4LDIwIEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIFJlc291cmNl
SGFuZGxlQ3VybERlbGVnYXRlOjpSZXNvdXJjZUhhbmRsZUN1cmxEZWxlZ2F0ZShSZXNvdXJjZUhh
bmRsZSogaGFuZGxlKQogICAgIDogbV9oYW5kbGUoaGFuZGxlKQogICAgICwgbV9maXJzdFJlcXVl
c3QoaGFuZGxlLT5maXJzdFJlcXVlc3QoKS5pc29sYXRlZENvcHkoKSkKLSAgICAsIG1fY3VzdG9t
SFRUUEhlYWRlckZpZWxkcyhtX2ZpcnN0UmVxdWVzdC5odHRwSGVhZGVyRmllbGRzKCkuaXNvbGF0
ZWRDb3B5KCkpCisgICAgLCBtX2N1cnJlbnRSZXF1ZXN0KGhhbmRsZS0+Zmlyc3RSZXF1ZXN0KCku
aXNvbGF0ZWRDb3B5KCkpCiAgICAgLCBtX3Nob3VsZFVzZUNyZWRlbnRpYWxTdG9yYWdlKGhhbmRs
ZS0+c2hvdWxkVXNlQ3JlZGVudGlhbFN0b3JhZ2UoKSkKICAgICAsIG1fdXNlcihoYW5kbGUtPmdl
dEludGVybmFsKCktPm1fdXNlci5pc29sYXRlZENvcHkoKSkKICAgICAsIG1fcGFzcyhoYW5kbGUt
PmdldEludGVybmFsKCktPm1fcGFzcy5pc29sYXRlZENvcHkoKSkKICAgICAsIG1faW5pdGlhbENy
ZWRlbnRpYWwoaGFuZGxlLT5nZXRJbnRlcm5hbCgpLT5tX2luaXRpYWxDcmVkZW50aWFsKQogICAg
ICwgbV9kZWZlcnNMb2FkaW5nKGhhbmRsZS0+Z2V0SW50ZXJuYWwoKS0+bV9kZWZlcnNMb2FkaW5n
KQogewotICAgIGNvbnN0IFVSTCYgdXJsID0gbV9maXJzdFJlcXVlc3QudXJsKCk7CiAKLSAgICBp
ZiAobV9jdXN0b21IVFRQSGVhZGVyRmllbGRzLnNpemUoKSkgewotICAgICAgICBhdXRvJiBjYWNo
ZSA9IEN1cmxDYWNoZU1hbmFnZXI6OmdldEluc3RhbmNlKCk7Ci0gICAgICAgIGJvb2wgaGFzQ2Fj
aGVIZWFkZXJzID0gbV9jdXN0b21IVFRQSGVhZGVyRmllbGRzLmNvbnRhaW5zKEhUVFBIZWFkZXJO
YW1lOjpJZk1vZGlmaWVkU2luY2UpIHx8IG1fY3VzdG9tSFRUUEhlYWRlckZpZWxkcy5jb250YWlu
cyhIVFRQSGVhZGVyTmFtZTo6SWZOb25lTWF0Y2gpOwotICAgICAgICBpZiAoIWhhc0NhY2hlSGVh
ZGVycyAmJiBjYWNoZS5pc0NhY2hlZCh1cmwpKSB7Ci0gICAgICAgICAgICBjYWNoZS5hZGRDYWNo
ZUVudHJ5Q2xpZW50KHVybCwgbV9oYW5kbGUpOwotICAgICAgICAgICAgLy8gYXBwZW5kIGFkZGl0
aW9uYWwgY2FjaGUgaW5mb3JtYXRpb24KLSAgICAgICAgICAgIGZvciAoYXV0byBlbnRyeSA6IGNh
Y2hlLnJlcXVlc3RIZWFkZXJzKHVybCkpCi0gICAgICAgICAgICAgICAgbV9jdXN0b21IVFRQSGVh
ZGVyRmllbGRzLnNldChlbnRyeS5rZXksIGVudHJ5LnZhbHVlKTsKLSAgICAgICAgICAgIG1fYWRk
ZWRDYWNoZVZhbGlkYXRpb25IZWFkZXJzID0gdHJ1ZTsKLSAgICAgICAgfQotICAgIH0KLQotICAg
IHNldHVwQXV0aGVudGljYXRpb24oKTsKIH0KIAogUmVzb3VyY2VIYW5kbGVDdXJsRGVsZWdhdGU6
On5SZXNvdXJjZUhhbmRsZUN1cmxEZWxlZ2F0ZSgpCiB7CisgICAgaWYgKG1fY3VybFJlcXVlc3Qp
CisgICAgICAgIG1fY3VybFJlcXVlc3QtPnNldERlbGVnYXRlKG51bGxwdHIpOwogfQogCiBib29s
IFJlc291cmNlSGFuZGxlQ3VybERlbGVnYXRlOjpoYXNIYW5kbGUoKSBjb25zdApAQCAtODgsNzYg
Kzc0LDY2IEBAIHZvaWQgUmVzb3VyY2VIYW5kbGVDdXJsRGVsZWdhdGU6OnJlbGVhc2VIYW5kbGUo
KQogICAgIG1faGFuZGxlID0gbnVsbHB0cjsKIH0KIAotdm9pZCBSZXNvdXJjZUhhbmRsZUN1cmxE
ZWxlZ2F0ZTo6c3RhcnQoYm9vbCBpc1N5bmNSZXF1ZXN0KQorYm9vbCBSZXNvdXJjZUhhbmRsZUN1
cmxEZWxlZ2F0ZTo6c3RhcnQoKQogewotICAgIG1faXNTeW5jUmVxdWVzdCA9IGlzU3luY1JlcXVl
c3Q7CisgICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKIAotICAgIGlmICghbV9pc1N5bmNSZXF1
ZXN0KSB7Ci0gICAgICAgIC8vIEZvciBhc3luY2hyb25vdXMsIHVzZSBDdXJsSm9iTWFuYWdlci4g
Q3VybCBwcm9jZXNzZXMgcnVucyBvbiBzdWIgdGhyZWFkLgotICAgICAgICBDdXJsSm9iTWFuYWdl
cjo6c2luZ2xldG9uKCkuYWRkKHRoaXMpOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIC8vIEZvciBz
eW5jaHJvbm91cywgZG9lcyBub3QgdXNlIEN1cmxKb2JNYW5hZ2VyLiBDdXJsIHByb2Nlc3NlcyBy
dW5zIG9uIG1haW4gdGhyZWFkLgotICAgICAgICByZXRhaW4oKTsKLSAgICAgICAgc2V0dXBUcmFu
c2ZlcigpOwotCi0gICAgICAgIC8vIGN1cmxfZWFzeV9wZXJmb3JtIGJsb2NrcyB1bnRpbCB0aGUg
dHJhbnNmZXIgaXMgZmluaXNoZWQuCi0gICAgICAgIENVUkxjb2RlIHJlc3VsdENvZGUgPSBtX2N1
cmxIYW5kbGUtPnBlcmZvcm0oKTsKLSAgICAgICAgZGlkQ29tcGxldGVUcmFuc2ZlcihyZXN1bHRD
b2RlKTsKLSAgICAgICAgcmVsZWFzZSgpOwotICAgIH0KKyAgICBhdXRvIGNyZWRlbnRpYWwgPSBn
ZXRDcmVkZW50aWFsKG1fY3VycmVudFJlcXVlc3QsIGZhbHNlKTsKKworICAgIG1fY3VybFJlcXVl
c3QgPSBjcmVhdGVDdXJsUmVxdWVzdChtX2N1cnJlbnRSZXF1ZXN0KTsKKyAgICBtX2N1cmxSZXF1
ZXN0LT5zZXRVc2VyUGFzcyhjcmVkZW50aWFsLmZpcnN0LCBjcmVkZW50aWFsLnNlY29uZCk7Cisg
ICAgbV9jdXJsUmVxdWVzdC0+c3RhcnQoKTsKKworICAgIHJldHVybiB0cnVlOwogfQogCiB2b2lk
IFJlc291cmNlSGFuZGxlQ3VybERlbGVnYXRlOjpjYW5jZWwoKQogeworICAgIEFTU0VSVChpc01h
aW5UaHJlYWQoKSk7CisKICAgICByZWxlYXNlSGFuZGxlKCk7CiAKLSAgICBpZiAoIW1faXNTeW5j
UmVxdWVzdCkKLSAgICAgICAgQ3VybEpvYk1hbmFnZXI6OnNpbmdsZXRvbigpLmNhbmNlbCh0aGlz
KTsKKyAgICBpZiAoIW1fY3VybFJlcXVlc3QpCisgICAgICAgIG1fY3VybFJlcXVlc3QtPmNhbmNl
bCgpOwogfQogCiB2b2lkIFJlc291cmNlSGFuZGxlQ3VybERlbGVnYXRlOjpzZXREZWZlcnNMb2Fk
aW5nKGJvb2wgZGVmZXJzKQogeworICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7CisKICAgICBp
ZiAoZGVmZXJzID09IG1fZGVmZXJzTG9hZGluZykKICAgICAgICAgcmV0dXJuOwogCiAgICAgbV9k
ZWZlcnNMb2FkaW5nID0gZGVmZXJzOwogCi0gICAgYXV0byBhY3Rpb24gPSBbcHJvdGVjdGVkVGhp
cyA9IG1ha2VSZWYoKnRoaXMpXSgpIHsKLSAgICAgICAgaWYgKCFwcm90ZWN0ZWRUaGlzLT5tX2N1
cmxIYW5kbGUpCi0gICAgICAgICAgICByZXR1cm47Ci0KLSAgICAgICAgaWYgKHByb3RlY3RlZFRo
aXMtPm1fZGVmZXJzTG9hZGluZykgewotICAgICAgICAgICAgQ1VSTGNvZGUgZXJyb3IgPSBwcm90
ZWN0ZWRUaGlzLT5tX2N1cmxIYW5kbGUtPnBhdXNlKENVUkxQQVVTRV9BTEwpOwotICAgICAgICAg
ICAgLy8gSWYgd2UgY291bGQgbm90IGRlZmVyIHRoZSBoYW5kbGUsIHNvIGRvbid0IGRvIGl0Lgot
ICAgICAgICAgICAgaWYgKGVycm9yICE9IENVUkxFX09LKQotICAgICAgICAgICAgICAgIHJldHVy
bjsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIENVUkxjb2RlIGVycm9yID0gcHJvdGVj
dGVkVGhpcy0+bV9jdXJsSGFuZGxlLT5wYXVzZShDVVJMUEFVU0VfQ09OVCk7Ci0gICAgICAgICAg
ICBpZiAoZXJyb3IgIT0gQ1VSTEVfT0spIHsKLSAgICAgICAgICAgICAgICAvLyBSZXN0YXJ0aW5n
IHRoZSBoYW5kbGUgaGFzIGZhaWxlZCBzbyBqdXN0IGNhbmNlbCBpdC4KLSAgICAgICAgICAgICAg
ICBwcm90ZWN0ZWRUaGlzLT5tX2hhbmRsZS0+Y2FuY2VsKCk7Ci0gICAgICAgICAgICB9Ci0gICAg
ICAgIH0KLSAgICB9OworICAgIGlmICghbV9jdXJsUmVxdWVzdCkKKyAgICAgICAgcmV0dXJuOwog
Ci0gICAgQ3VybEpvYk1hbmFnZXI6OnNpbmdsZXRvbigpLmNhbGxPbkpvYlRocmVhZChXVEZNb3Zl
KGFjdGlvbikpOworICAgIGlmIChtX2RlZmVyc0xvYWRpbmcpCisgICAgICAgIG1fY3VybFJlcXVl
c3QtPnN1c3BlbmQoKTsKKyAgICBlbHNlCisgICAgICAgIG1fY3VybFJlcXVlc3QtPnJlc3VtZSgp
OwogfQogCi12b2lkIFJlc291cmNlSGFuZGxlQ3VybERlbGVnYXRlOjpzZXRBdXRoZW50aWNhdGlv
bihjb25zdCBTdHJpbmcmIHVzZXIsIGNvbnN0IFN0cmluZyYgcGFzcykKK3ZvaWQgUmVzb3VyY2VI
YW5kbGVDdXJsRGVsZWdhdGU6OnNldEF1dGhlbnRpY2F0aW9uKGNvbnN0IFN0cmluZyYgdXNlciwg
Y29uc3QgU3RyaW5nJiBwYXNzd29yZCkKIHsKLSAgICBhdXRvIGFjdGlvbiA9IFtwcm90ZWN0ZWRU
aGlzID0gbWFrZVJlZigqdGhpcyksIHVzZXIgPSB1c2VyLmlzb2xhdGVkQ29weSgpLCBwYXNzID0g
cGFzcy5pc29sYXRlZENvcHkoKV0oKSB7Ci0gICAgICAgIHByb3RlY3RlZFRoaXMtPm1fdXNlciA9
IHVzZXI7Ci0gICAgICAgIHByb3RlY3RlZFRoaXMtPm1fcGFzcyA9IHBhc3M7Ci0gICAgICAgIGlm
IChwcm90ZWN0ZWRUaGlzLT5tX2N1cmxIYW5kbGUpCi0gICAgICAgICAgICBwcm90ZWN0ZWRUaGlz
LT5tX2N1cmxIYW5kbGUtPnNldEh0dHBBdXRoVXNlclBhc3ModXNlciwgcGFzcyk7Ci0gICAgfTsK
LQotICAgIEN1cmxKb2JNYW5hZ2VyOjpzaW5nbGV0b24oKS5jYWxsT25Kb2JUaHJlYWQoV1RGTW92
ZShhY3Rpb24pKTsKKyAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOworCisgICAgaWYgKCFtX2N1
cmxSZXF1ZXN0KQorICAgICAgICByZXR1cm47CisKKyAgICBib29sIGlzU3luY1JlcXVlc3QgPSBt
X2N1cmxSZXF1ZXN0LT5pc1N5bmNSZXF1ZXN0KCk7CisgICAgbV9jdXJsUmVxdWVzdC0+Y2FuY2Vs
KCk7CisgICAgbV9jdXJsUmVxdWVzdC0+c2V0RGVsZWdhdGUobnVsbHB0cik7CisKKyAgICBtX2N1
cmxSZXF1ZXN0ID0gY3JlYXRlQ3VybFJlcXVlc3QobV9jdXJyZW50UmVxdWVzdCk7CisgICAgbV9j
dXJsUmVxdWVzdC0+c2V0VXNlclBhc3ModXNlciwgcGFzc3dvcmQpOworICAgIG1fY3VybFJlcXVl
c3QtPnN0YXJ0KGlzU3luY1JlcXVlc3QpOwogfQogCiB2b2lkIFJlc291cmNlSGFuZGxlQ3VybERl
bGVnYXRlOjpkaXNwYXRjaFN5bmNocm9ub3VzSm9iKCkKIHsKLSAgICBpZiAobV9maXJzdFJlcXVl
c3QudXJsKCkucHJvdG9jb2xJc0RhdGEoKSkgeworICAgIGlmIChtX2N1cnJlbnRSZXF1ZXN0LnVy
bCgpLnByb3RvY29sSXNEYXRhKCkpIHsKICAgICAgICAgaGFuZGxlRGF0YVVSTCgpOwogICAgICAg
ICByZXR1cm47CiAgICAgfQpAQCAtMTY3LDE2MiArMTQzLDU3IEBAIHZvaWQgUmVzb3VyY2VIYW5k
bGVDdXJsRGVsZWdhdGU6OmRpc3BhdGNoU3luY2hyb25vdXNKb2IoKQogICAgIC8vIGFuZCB3ZSB3
b3VsZCBhc3NlcnQgc28gZm9yY2UgZGVmZXJzTG9hZGluZyB0byBiZSBmYWxzZS4KICAgICBtX2Rl
ZmVyc0xvYWRpbmcgPSBmYWxzZTsKIAotICAgIHN0YXJ0KHRydWUpOworICAgIG1fY3VybFJlcXVl
c3QgPSBjcmVhdGVDdXJsUmVxdWVzdChtX2N1cnJlbnRSZXF1ZXN0KTsKKyAgICBtX2N1cmxSZXF1
ZXN0LT5zdGFydCh0cnVlKTsKIH0KIAotdm9pZCBSZXNvdXJjZUhhbmRsZUN1cmxEZWxlZ2F0ZTo6
cmV0YWluKCkKK1JlZlB0cjxDdXJsUmVxdWVzdD4gUmVzb3VyY2VIYW5kbGVDdXJsRGVsZWdhdGU6
OmNyZWF0ZUN1cmxSZXF1ZXN0KFJlc291cmNlUmVxdWVzdCYgcmVxdWVzdCkKIHsKLSAgICByZWYo
KTsKLX0KLQotdm9pZCBSZXNvdXJjZUhhbmRsZUN1cmxEZWxlZ2F0ZTo6cmVsZWFzZSgpCi17Ci0g
ICAgZGVyZWYoKTsKLX0KLQotQ1VSTCogUmVzb3VyY2VIYW5kbGVDdXJsRGVsZWdhdGU6OnNldHVw
VHJhbnNmZXIoKQotewotICAgIG1fY3VybEhhbmRsZSA9IHN0ZDo6bWFrZV91bmlxdWU8Q3VybEhh
bmRsZT4oKTsKLSAgICBtX2N1cmxIYW5kbGUtPmluaXRpYWxpemUoKTsKLQotICAgIGlmIChtX2Rl
ZmVyc0xvYWRpbmcpIHsKLSAgICAgICAgQ1VSTGNvZGUgZXJyb3IgPSBtX2N1cmxIYW5kbGUtPnBh
dXNlKENVUkxQQVVTRV9BTEwpOwotICAgICAgICAvLyBJZiB3ZSBkaWQgbm90IHBhdXNlIHRoZSBo
YW5kbGUsIHdlIHdvdWxkIEFTU0VSVCBpbiB0aGUKLSAgICAgICAgLy8gaGVhZGVyIGNhbGxiYWNr
LiBTbyBqdXN0IGFzc2VydCBoZXJlLgotICAgICAgICBBU1NFUlRfVU5VU0VEKGVycm9yLCBlcnJv
ciA9PSBDVVJMRV9PSyk7Ci0gICAgfQotCi0jaWZuZGVmIE5ERUJVRwotICAgIG1fY3VybEhhbmRs
ZS0+ZW5hYmxlVmVyYm9zZUlmVXNlZCgpOwotICAgIG1fY3VybEhhbmRsZS0+ZW5hYmxlU3RkRXJy
SWZVc2VkKCk7Ci0jZW5kaWYKKyAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOwogCi0gICAgYXV0
byYgc3NsSGFuZGxlID0gQ3VybENvbnRleHQ6OnNpbmdsZXRvbigpLnNzbEhhbmRsZSgpOwotCi0g
ICAgbV9jdXJsSGFuZGxlLT5zZXRTc2xWZXJpZnlQZWVyKEN1cmxIYW5kbGU6OlZlcmlmeVBlZXI6
OkVuYWJsZSk7Ci0gICAgbV9jdXJsSGFuZGxlLT5zZXRTc2xWZXJpZnlIb3N0KEN1cmxIYW5kbGU6
OlZlcmlmeUhvc3Q6OlN0cmljdE5hbWVDaGVjayk7Ci0gICAgbV9jdXJsSGFuZGxlLT5zZXRXcml0
ZUNhbGxiYWNrRnVuY3Rpb24oZGlkUmVjZWl2ZURhdGFDYWxsYmFjaywgdGhpcyk7Ci0gICAgbV9j
dXJsSGFuZGxlLT5zZXRIZWFkZXJDYWxsYmFja0Z1bmN0aW9uKGRpZFJlY2VpdmVIZWFkZXJDYWxs
YmFjaywgdGhpcyk7Ci0gICAgbV9jdXJsSGFuZGxlLT5lbmFibGVBdXRvUmVmZXJlcigpOwotICAg
IG1fY3VybEhhbmRsZS0+ZW5hYmxlRm9sbG93TG9jYXRpb24oKTsKLSAgICBtX2N1cmxIYW5kbGUt
PmVuYWJsZUh0dHBBdXRoZW50aWNhdGlvbihDVVJMQVVUSF9BTlkpOwotICAgIG1fY3VybEhhbmRs
ZS0+ZW5hYmxlU2hhcmVIYW5kbGUoKTsKLSAgICBtX2N1cmxIYW5kbGUtPmVuYWJsZVRpbWVvdXQo
KTsKLSAgICBtX2N1cmxIYW5kbGUtPmVuYWJsZUFsbG93ZWRQcm90b2NvbHMoKTsKLQotICAgIGF1
dG8gc3NsQ2xpZW50Q2VydGlmaWNhdGUgPSBzc2xIYW5kbGUuZ2V0U1NMQ2xpZW50Q2VydGlmaWNh
dGUobV9maXJzdFJlcXVlc3QudXJsKCkuaG9zdCgpKTsKLSAgICBpZiAoc3NsQ2xpZW50Q2VydGlm
aWNhdGUpIHsKLSAgICAgICAgbV9jdXJsSGFuZGxlLT5zZXRTc2xDZXJ0KHNzbENsaWVudENlcnRp
ZmljYXRlLT5maXJzdC51dGY4KCkuZGF0YSgpKTsKLSAgICAgICAgbV9jdXJsSGFuZGxlLT5zZXRT
c2xDZXJ0VHlwZSgiUDEyIik7Ci0gICAgICAgIG1fY3VybEhhbmRsZS0+c2V0U3NsS2V5UGFzc3dv
cmQoc3NsQ2xpZW50Q2VydGlmaWNhdGUtPnNlY29uZC51dGY4KCkuZGF0YSgpKTsKLSAgICB9Cisg
ICAgLy8gQ3VybENhY2hlIDogYXBwZW5kIGFkZGl0aW9uYWwgY2FjaGUgaW5mb3JtYXRpb24KKyAg
ICBtX2FkZGVkQ2FjaGVWYWxpZGF0aW9uSGVhZGVycyA9IGZhbHNlOwogCi0gICAgaWYgKHNzbEhh
bmRsZS5zaG91bGRJZ25vcmVTU0xFcnJvcnMoKSkKLSAgICAgICAgbV9jdXJsSGFuZGxlLT5zZXRT
c2xWZXJpZnlQZWVyKEN1cmxIYW5kbGU6OlZlcmlmeVBlZXI6OkRpc2FibGUpOwotICAgIGVsc2UK
LSAgICAgICAgbV9jdXJsSGFuZGxlLT5zZXRTc2xDdHhDYWxsYmFja0Z1bmN0aW9uKHdpbGxTZXR1
cFNzbEN0eENhbGxiYWNrLCB0aGlzKTsKLQotICAgIG1fY3VybEhhbmRsZS0+c2V0Q0FDZXJ0UGF0
aChzc2xIYW5kbGUuZ2V0Q0FDZXJ0UGF0aCgpKTsKLQotICAgIG1fY3VybEhhbmRsZS0+ZW5hYmxl
QWNjZXB0RW5jb2RpbmcoKTsKLSAgICBtX2N1cmxIYW5kbGUtPnNldFVybChtX2ZpcnN0UmVxdWVz
dC51cmwoKSk7Ci0gICAgbV9jdXJsSGFuZGxlLT5lbmFibGVDb29raWVKYXJJZkV4aXN0cygpOwot
Ci0gICAgaWYgKG1fY3VzdG9tSFRUUEhlYWRlckZpZWxkcy5zaXplKCkpCi0gICAgICAgIG1fY3Vy
bEhhbmRsZS0+YXBwZW5kUmVxdWVzdEhlYWRlcnMobV9jdXN0b21IVFRQSGVhZGVyRmllbGRzKTsK
LQotICAgIFN0cmluZyBtZXRob2QgPSBtX2ZpcnN0UmVxdWVzdC5odHRwTWV0aG9kKCk7Ci0gICAg
aWYgKCJHRVQiID09IG1ldGhvZCkKLSAgICAgICAgbV9jdXJsSGFuZGxlLT5lbmFibGVIdHRwR2V0
UmVxdWVzdCgpOwotICAgIGVsc2UgaWYgKCJQT1NUIiA9PSBtZXRob2QpCi0gICAgICAgIHNldHVw
UE9TVCgpOwotICAgIGVsc2UgaWYgKCJQVVQiID09IG1ldGhvZCkKLSAgICAgICAgc2V0dXBQVVQo
KTsKLSAgICBlbHNlIGlmICgiSEVBRCIgPT0gbWV0aG9kKQotICAgICAgICBtX2N1cmxIYW5kbGUt
PmVuYWJsZUh0dHBIZWFkUmVxdWVzdCgpOwotICAgIGVsc2UgewotICAgICAgICBtX2N1cmxIYW5k
bGUtPnNldEh0dHBDdXN0b21SZXF1ZXN0KG1ldGhvZCk7Ci0gICAgICAgIHNldHVwUFVUKCk7Ci0g
ICAgfQotCi0gICAgYXBwbHlBdXRoZW50aWNhdGlvbigpOworICAgIGJvb2wgaGFzQ2FjaGVIZWFk
ZXJzID0gcmVxdWVzdC5odHRwSGVhZGVyRmllbGRzKCkuY29udGFpbnMoSFRUUEhlYWRlck5hbWU6
OklmTW9kaWZpZWRTaW5jZSkgfHwgcmVxdWVzdC5odHRwSGVhZGVyRmllbGRzKCkuY29udGFpbnMo
SFRUUEhlYWRlck5hbWU6OklmTm9uZU1hdGNoKTsKKyAgICBpZiAoIWhhc0NhY2hlSGVhZGVycykg
eworICAgICAgICBhdXRvJiBjYWNoZSA9IEN1cmxDYWNoZU1hbmFnZXI6OmdldEluc3RhbmNlKCk7
CisgICAgICAgIFVSTCBjYWNoZVVybCA9IHJlcXVlc3QudXJsKCk7CisgICAgICAgIGNhY2hlVXJs
LnJlbW92ZUZyYWdtZW50SWRlbnRpZmllcigpOwogCi0gICAgbV9jdXJsSGFuZGxlLT5lbmFibGVQ
cm94eUlmRXhpc3RzKCk7CisgICAgICAgIGlmIChjYWNoZS5pc0NhY2hlZChjYWNoZVVybCkpIHsK
KyAgICAgICAgICAgIGNhY2hlLmFkZENhY2hlRW50cnlDbGllbnQoY2FjaGVVcmwsIG1faGFuZGxl
KTsKIAotICAgIHJldHVybiBtX2N1cmxIYW5kbGUtPmhhbmRsZSgpOwotfQorICAgICAgICAgICAg
Zm9yIChhdXRvIGVudHJ5IDogY2FjaGUucmVxdWVzdEhlYWRlcnMoY2FjaGVVcmwpKQorICAgICAg
ICAgICAgICAgIHJlcXVlc3QuYWRkSFRUUEhlYWRlckZpZWxkKGVudHJ5LmtleSwgZW50cnkudmFs
dWUpOwogCi12b2lkIFJlc291cmNlSGFuZGxlQ3VybERlbGVnYXRlOjpkaWRDb21wbGV0ZVRyYW5z
ZmVyKENVUkxjb2RlIHJlc3VsdCkKLXsKLSAgICBpZiAocmVzdWx0ID09IENVUkxFX09LKSB7Ci0g
ICAgICAgIE5ldHdvcmtMb2FkTWV0cmljcyBuZXR3b3JrTG9hZE1ldHJpY3MgPSBnZXROZXR3b3Jr
TG9hZE1ldHJpY3MoKTsKLQotICAgICAgICBpZiAoaXNNYWluVGhyZWFkKCkpCi0gICAgICAgICAg
ICBkaWRGaW5pc2gobmV0d29ya0xvYWRNZXRyaWNzKTsKLSAgICAgICAgZWxzZSB7Ci0gICAgICAg
ICAgICBjYWxsT25NYWluVGhyZWFkKFtwcm90ZWN0ZWRUaGlzID0gbWFrZVJlZigqdGhpcyksIG1l
dHJpY3MgPSBuZXR3b3JrTG9hZE1ldHJpY3MuaXNvbGF0ZWRDb3B5KCldIHsKLSAgICAgICAgICAg
ICAgICBpZiAoIXByb3RlY3RlZFRoaXMtPm1faGFuZGxlKQotICAgICAgICAgICAgICAgICAgICBy
ZXR1cm47Ci0gICAgICAgICAgICAgICAgcHJvdGVjdGVkVGhpcy0+ZGlkRmluaXNoKG1ldHJpY3Mp
OwotICAgICAgICAgICAgfSk7Ci0gICAgICAgIH0KLSAgICB9IGVsc2UgewotICAgICAgICBSZXNv
dXJjZUVycm9yIHJlc291cmNlRXJyb3IgPSBSZXNvdXJjZUVycm9yOjpodHRwRXJyb3IocmVzdWx0
LCBtX2ZpcnN0UmVxdWVzdC51cmwoKSk7Ci0gICAgICAgIGlmIChtX3NzbFZlcmlmaWVyLnNzbEVy
cm9ycygpKQotICAgICAgICAgICAgcmVzb3VyY2VFcnJvci5zZXRTc2xFcnJvcnMobV9zc2xWZXJp
Zmllci5zc2xFcnJvcnMoKSk7Ci0KLSAgICAgICAgaWYgKGlzTWFpblRocmVhZCgpKQotICAgICAg
ICAgICAgZGlkRmFpbChyZXNvdXJjZUVycm9yKTsKLSAgICAgICAgZWxzZSB7Ci0gICAgICAgICAg
ICBjYWxsT25NYWluVGhyZWFkKFtwcm90ZWN0ZWRUaGlzID0gbWFrZVJlZigqdGhpcyksIGVycm9y
ID0gcmVzb3VyY2VFcnJvci5pc29sYXRlZENvcHkoKV0gewotICAgICAgICAgICAgICAgIGlmICgh
cHJvdGVjdGVkVGhpcy0+bV9oYW5kbGUpCi0gICAgICAgICAgICAgICAgICAgIHJldHVybjsKLSAg
ICAgICAgICAgICAgICBwcm90ZWN0ZWRUaGlzLT5kaWRGYWlsKGVycm9yKTsKLSAgICAgICAgICAg
IH0pOworICAgICAgICAgICAgbV9hZGRlZENhY2hlVmFsaWRhdGlvbkhlYWRlcnMgPSB0cnVlOwog
ICAgICAgICB9CiAgICAgfQogCi0gICAgbV9mb3JtRGF0YVN0cmVhbSA9IG51bGxwdHI7Ci0gICAg
bV9jdXJsSGFuZGxlID0gbnVsbHB0cjsKKyAgICByZXR1cm4gYWRvcHRSZWYobmV3IEN1cmxSZXF1
ZXN0KHJlcXVlc3QsIHRoaXMsIG1fZGVmZXJzTG9hZGluZykpOwogfQogCi12b2lkIFJlc291cmNl
SGFuZGxlQ3VybERlbGVnYXRlOjpkaWRDYW5jZWxUcmFuc2ZlcigpCitib29sIFJlc291cmNlSGFu
ZGxlQ3VybERlbGVnYXRlOjpjYW5jZWxsZWRPckNsaWVudGxlc3MoKQogewotICAgIG1fZm9ybURh
dGFTdHJlYW0gPSBudWxscHRyOwotICAgIG1fY3VybEhhbmRsZSA9IG51bGxwdHI7Ci19Ci0KLVJl
c291cmNlUmVzcG9uc2UmIFJlc291cmNlSGFuZGxlQ3VybERlbGVnYXRlOjpyZXNwb25zZSgpCi17
Ci0gICAgcmV0dXJuIG1faGFuZGxlLT5nZXRJbnRlcm5hbCgpLT5tX3Jlc3BvbnNlOwotfQotCi12
b2lkIFJlc291cmNlSGFuZGxlQ3VybERlbGVnYXRlOjpzZXR1cEF1dGhlbnRpY2F0aW9uKCkKLXsK
LSAgICAvLyBtX3VzZXIvbV9wYXNzIGFyZSBjcmVkZW50aWFscyBnaXZlbiBtYW51YWxseSwgZm9y
IGluc3RhbmNlLCBieSB0aGUgYXJndW1lbnRzIHBhc3NlZCB0byBYTUxIdHRwUmVxdWVzdC5vcGVu
KCkuCi0gICAgU3RyaW5nIHBhcnRpdGlvbiA9IG1fZmlyc3RSZXF1ZXN0LmNhY2hlUGFydGl0aW9u
KCk7CisgICAgaWYgKCFtX2hhbmRsZSkKKyAgICAgICAgcmV0dXJuIHRydWU7CiAKLSAgICBpZiAo
bV9zaG91bGRVc2VDcmVkZW50aWFsU3RvcmFnZSkgewotICAgICAgICBpZiAobV91c2VyLmlzRW1w
dHkoKSAmJiBtX3Bhc3MuaXNFbXB0eSgpKSB7Ci0gICAgICAgICAgICAvLyA8cmRhcjovL3Byb2Js
ZW0vNzE3NDA1MD4gLSBGb3IgVVJMcyB0aGF0IG1hdGNoIHRoZSBwYXRocyBvZiB0aG9zZSBwcmV2
aW91c2x5IGNoYWxsZW5nZWQgZm9yIEhUVFAgQmFzaWMgYXV0aGVudGljYXRpb24sIAotICAgICAg
ICAgICAgLy8gdHJ5IGFuZCByZXVzZSB0aGUgY3JlZGVudGlhbCBwcmVlbXB0aXZlbHksIGFzIGFs
bG93ZWQgYnkgUkZDIDI2MTcuCi0gICAgICAgICAgICBtX2luaXRpYWxDcmVkZW50aWFsID0gQ3Jl
ZGVudGlhbFN0b3JhZ2U6OmRlZmF1bHRDcmVkZW50aWFsU3RvcmFnZSgpLmdldChwYXJ0aXRpb24s
IG1fZmlyc3RSZXF1ZXN0LnVybCgpKTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIC8v
IElmIHRoZXJlIGlzIGFscmVhZHkgYSBwcm90ZWN0aW9uIHNwYWNlIGtub3duIGZvciB0aGUgVVJM
LCB1cGRhdGUgc3RvcmVkIGNyZWRlbnRpYWxzCi0gICAgICAgICAgICAvLyBiZWZvcmUgc2VuZGlu
ZyBhIHJlcXVlc3QuIFRoaXMgbWFrZXMgaXQgcG9zc2libGUgdG8gaW1wbGVtZW50IGxvZ291dCBi
eSBzZW5kaW5nIGFuCi0gICAgICAgICAgICAvLyBYTUxIdHRwUmVxdWVzdCB3aXRoIGtub3duIGlu
Y29ycmVjdCBjcmVkZW50aWFscywgYW5kIGFib3J0aW5nIGl0IGltbWVkaWF0ZWx5IChzbyB0aGF0
Ci0gICAgICAgICAgICAvLyBhbiBhdXRoZW50aWNhdGlvbiBkaWFsb2cgZG9lc24ndCBwb3AgdXAp
LgotICAgICAgICAgICAgQ3JlZGVudGlhbFN0b3JhZ2U6OmRlZmF1bHRDcmVkZW50aWFsU3RvcmFn
ZSgpLnNldChwYXJ0aXRpb24sIENyZWRlbnRpYWwobV91c2VyLCBtX3Bhc3MsIENyZWRlbnRpYWxQ
ZXJzaXN0ZW5jZU5vbmUpLCBtX2ZpcnN0UmVxdWVzdC51cmwoKSk7Ci0gICAgICAgIH0KLSAgICB9
CisgICAgcmV0dXJuICFtX2hhbmRsZS0+Y2xpZW50KCk7CiB9CiAKLXZvaWQgUmVzb3VyY2VIYW5k
bGVDdXJsRGVsZWdhdGU6OmRpZFJlY2VpdmVBbGxIZWFkZXJzKGNvbnN0IEN1cmxSZXNwb25zZSYg
cmVjZWl2ZWRSZXNwb25zZSkKK3ZvaWQgUmVzb3VyY2VIYW5kbGVDdXJsRGVsZWdhdGU6OmN1cmxE
aWRSZWNlaXZlUmVzcG9uc2UoY29uc3QgQ3VybFJlc3BvbnNlJiByZWNlaXZlZFJlc3BvbnNlKQog
ewogICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7CisgICAgQVNTRVJUKCFtX2RlZmVyc0xvYWRp
bmcpOworCisgICAgaWYgKGNhbmNlbGxlZE9yQ2xpZW50bGVzcygpKQorICAgICAgICByZXR1cm47
CiAKICAgICBtX2hhbmRsZS0+Z2V0SW50ZXJuYWwoKS0+bV9yZXNwb25zZSA9IFJlc291cmNlUmVz
cG9uc2UocmVjZWl2ZWRSZXNwb25zZSk7CiAKKyAgICBpZiAobV9jdXJsUmVxdWVzdCkKKyAgICAg
ICAgbV9oYW5kbGUtPmdldEludGVybmFsKCktPm1fcmVzcG9uc2Uuc2V0RGVwcmVjYXRlZE5ldHdv
cmtMb2FkTWV0cmljcyhtX2N1cmxSZXF1ZXN0LT5nZXROZXR3b3JrTG9hZE1ldHJpY3MoKSk7CisK
ICAgICBpZiAocmVzcG9uc2UoKS5pc011bHRpcGFydCgpKSB7CiAgICAgICAgIFN0cmluZyBib3Vu
ZGFyeTsKICAgICAgICAgYm9vbCBwYXJzZWQgPSBNdWx0aXBhcnRIYW5kbGU6OmV4dHJhY3RCb3Vu
ZGFyeShyZXNwb25zZSgpLmh0dHBIZWFkZXJGaWVsZChIVFRQSGVhZGVyTmFtZTo6Q29udGVudFR5
cGUpLCBib3VuZGFyeSk7CkBAIC0zNDYsMzYgKzIxNywzOSBAQCB2b2lkIFJlc291cmNlSGFuZGxl
Q3VybERlbGVnYXRlOjpkaWRSZWNlaXZlQWxsSGVhZGVycyhjb25zdCBDdXJsUmVzcG9uc2UmIHJl
Y2VpdgogCiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KLSAgICB9IGVsc2UgaWYgKHJl
c3BvbnNlKCkuaXNVbmF1dGhvcml6ZWQoKSkgeworICAgIH0KKworICAgIGlmIChyZXNwb25zZSgp
LmlzVW5hdXRob3JpemVkKCkpIHsKICAgICAgICAgQXV0aGVudGljYXRpb25DaGFsbGVuZ2UgY2hh
bGxlbmdlKHJlY2VpdmVkUmVzcG9uc2UsIG1fYXV0aEZhaWx1cmVDb3VudCwgcmVzcG9uc2UoKSwg
bV9oYW5kbGUpOwogICAgICAgICBtX2hhbmRsZS0+ZGlkUmVjZWl2ZUF1dGhlbnRpY2F0aW9uQ2hh
bGxlbmdlKGNoYWxsZW5nZSk7CiAgICAgICAgIG1fYXV0aEZhaWx1cmVDb3VudCsrOwogICAgICAg
ICByZXR1cm47CiAgICAgfQogCi0gICAgbV9kaWROb3RpZnlSZXNwb25zZSA9IHRydWU7Ci0KICAg
ICBpZiAobV9oYW5kbGUtPmNsaWVudCgpKSB7CiAgICAgICAgIGlmIChyZXNwb25zZSgpLmlzTm90
TW9kaWZpZWQoKSkgewotICAgICAgICAgICAgY29uc3QgU3RyaW5nJiB1cmwgPSBtX2ZpcnN0UmVx
dWVzdC51cmwoKS5zdHJpbmcoKTsKLSAgICAgICAgICAgIGlmIChDdXJsQ2FjaGVNYW5hZ2VyOjpn
ZXRJbnN0YW5jZSgpLmdldENhY2hlZFJlc3BvbnNlKHVybCwgcmVzcG9uc2UoKSkpIHsKKyAgICAg
ICAgICAgIFVSTCBjYWNoZVVybCA9IG1fY3VycmVudFJlcXVlc3QudXJsKCk7CisgICAgICAgICAg
ICBjYWNoZVVybC5yZW1vdmVGcmFnbWVudElkZW50aWZpZXIoKTsKKworICAgICAgICAgICAgaWYg
KEN1cmxDYWNoZU1hbmFnZXI6OmdldEluc3RhbmNlKCkuZ2V0Q2FjaGVkUmVzcG9uc2UoY2FjaGVV
cmwsIHJlc3BvbnNlKCkpKSB7CiAgICAgICAgICAgICAgICAgaWYgKG1fYWRkZWRDYWNoZVZhbGlk
YXRpb25IZWFkZXJzKSB7CiAgICAgICAgICAgICAgICAgICAgIHJlc3BvbnNlKCkuc2V0SFRUUFN0
YXR1c0NvZGUoMjAwKTsKICAgICAgICAgICAgICAgICAgICAgcmVzcG9uc2UoKS5zZXRIVFRQU3Rh
dHVzVGV4dCgiT0siKTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9CiAgICAgICAg
IH0KKwogICAgICAgICBDdXJsQ2FjaGVNYW5hZ2VyOjpnZXRJbnN0YW5jZSgpLmRpZFJlY2VpdmVS
ZXNwb25zZSgqbV9oYW5kbGUsIHJlc3BvbnNlKCkpOwogICAgICAgICBtX2hhbmRsZS0+Y2xpZW50
KCktPmRpZFJlY2VpdmVSZXNwb25zZShtX2hhbmRsZSwgUmVzb3VyY2VSZXNwb25zZShyZXNwb25z
ZSgpKSk7CiAgICAgfQogfQogCi12b2lkIFJlc291cmNlSGFuZGxlQ3VybERlbGVnYXRlOjpkaWRS
ZWNlaXZlQ29udGVudERhdGEoUmVmPFNoYXJlZEJ1ZmZlcj4mJiBidWZmZXIpCit2b2lkIFJlc291
cmNlSGFuZGxlQ3VybERlbGVnYXRlOjpjdXJsRGlkUmVjZWl2ZUJ1ZmZlcihSZWY8U2hhcmVkQnVm
ZmVyPiYmIGJ1ZmZlcikKIHsKICAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOwogCi0gICAgaWYg
KCFtX2RpZE5vdGlmeVJlc3BvbnNlKQotICAgICAgICBoYW5kbGVMb2NhbFJlY2VpdmVSZXNwb25z
ZSgpOworICAgIGlmIChjYW5jZWxsZWRPckNsaWVudGxlc3MoKSkKKyAgICAgICAgcmV0dXJuOwog
CiAgICAgaWYgKG1fbXVsdGlwYXJ0SGFuZGxlKQogICAgICAgICBtX211bHRpcGFydEhhbmRsZS0+
Y29udGVudFJlY2VpdmVkKGJ1ZmZlci0+ZGF0YSgpLCBidWZmZXItPnNpemUoKSk7CkBAIC0zODUs
NjQgKzI1OSwxNSBAQCB2b2lkIFJlc291cmNlSGFuZGxlQ3VybERlbGVnYXRlOjpkaWRSZWNlaXZl
Q29udGVudERhdGEoUmVmPFNoYXJlZEJ1ZmZlcj4mJiBidWZmZQogICAgIH0KIH0KIAotdm9pZCBS
ZXNvdXJjZUhhbmRsZUN1cmxEZWxlZ2F0ZTo6aGFuZGxlTG9jYWxSZWNlaXZlUmVzcG9uc2UoKQot
ewotICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7Ci0KLSAgICAvLyBzaW5jZSB0aGUgY29kZSBp
biBoZWFkZXJDYWxsYmFjayB3aWxsIG5vdCBoYXZlIHJ1biBmb3IgbG9jYWwgZmlsZXMKLSAgICAv
LyB0aGUgY29kZSB0byBzZXQgdGhlIFVSTCBhbmQgZmlyZSBkaWRSZWNlaXZlUmVzcG9uc2UgaXMg
bmV2ZXIgcnVuLAotICAgIC8vIHdoaWNoIG1lYW5zIHRoZSBSZXNvdXJjZUxvYWRlcidzIHJlc3Bv
bnNlIGRvZXMgbm90IGNvbnRhaW4gdGhlIFVSTC4KLSAgICAvLyBSdW4gdGhlIGNvZGUgaGVyZSBm
b3IgbG9jYWwgZmlsZXMgdG8gcmVzb2x2ZSB0aGUgaXNzdWUuCi0gICAgLy8gVE9ETzogU2VlIGlm
IHRoZXJlIGlzIGEgYmV0dGVyIGFwcHJvYWNoIGZvciBoYW5kbGluZyB0aGlzLgotICAgIFVSTCB1
cmwgPSBtX2N1cmxIYW5kbGUtPmdldEVmZmVjdGl2ZVVSTCgpOwotICAgIEFTU0VSVCh1cmwuaXNW
YWxpZCgpKTsKLSAgICByZXNwb25zZSgpLnNldFVSTCh1cmwpOwotCi0gICAgLy8gRGV0ZXJtaW5l
IHRoZSBNSU1FIHR5cGUgYmFzZWQgb24gdGhlIHBhdGguCi0gICAgcmVzcG9uc2UoKS5zZXRNaW1l
VHlwZShNSU1FVHlwZVJlZ2lzdHJ5OjpnZXRNSU1FVHlwZUZvclBhdGgodXJsKSk7Ci0KLSAgICBt
X2RpZE5vdGlmeVJlc3BvbnNlID0gdHJ1ZTsKLQotICAgIGlmIChtX2hhbmRsZS0+Y2xpZW50KCkp
Ci0gICAgICAgIG1faGFuZGxlLT5jbGllbnQoKS0+ZGlkUmVjZWl2ZVJlc3BvbnNlKG1faGFuZGxl
LCBSZXNvdXJjZVJlc3BvbnNlKHJlc3BvbnNlKCkpKTsKLX0KLQotdm9pZCBSZXNvdXJjZUhhbmRs
ZUN1cmxEZWxlZ2F0ZTo6cHJlcGFyZVNlbmREYXRhKGNoYXIqIGJ1ZmZlciwgc2l6ZV90IGJsb2Nr
U2l6ZSwgc2l6ZV90IG51bWJlck9mQmxvY2tzKQordm9pZCBSZXNvdXJjZUhhbmRsZUN1cmxEZWxl
Z2F0ZTo6Y3VybERpZENvbXBsZXRlKCkKIHsKICAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOwot
ICAgIEFTU0VSVCghbV9zZW5kQnl0ZXMpOwotCi0gICAgc3RkOjp1bmlxdWVfbG9jazxMb2NrPiBs
b2NrKG1fd29ya2VyVGhyZWFkTXV0ZXgpOwotCi0gICAgaWYgKCFtX2Zvcm1EYXRhU3RyZWFtIHx8
ICFtX2Zvcm1EYXRhU3RyZWFtLT5oYXNNb3JlRWxlbWVudHMoKSkgewotICAgICAgICBtX3dvcmtl
clRocmVhZENvbmRpdGlvblZhcmlhYmxlLm5vdGlmeU9uZSgpOwotICAgICAgICByZXR1cm47Ci0g
ICAgfQogCi0gICAgc2l6ZV90IHNpemUgPSBtX2Zvcm1EYXRhU3RyZWFtLT5yZWFkKGJ1ZmZlciwg
YmxvY2tTaXplLCBudW1iZXJPZkJsb2Nrcyk7Ci0gICAgaWYgKCFzaXplKSB7Ci0gICAgICAgIC8v
IFNvbWV0aGluZyB3ZW50IHdyb25nIHNvIGNhbmNlbCB0aGUgam9iLgotICAgICAgICBtX2hhbmRs
ZS0+Y2FuY2VsKCk7Ci0gICAgICAgIG1fd29ya2VyVGhyZWFkQ29uZGl0aW9uVmFyaWFibGUubm90
aWZ5T25lKCk7CisgICAgaWYgKGNhbmNlbGxlZE9yQ2xpZW50bGVzcygpKQogICAgICAgICByZXR1
cm47Ci0gICAgfQotCi0gICAgbV9zZW5kQnl0ZXMgPSBzaXplOwotICAgIG1fd29ya2VyVGhyZWFk
Q29uZGl0aW9uVmFyaWFibGUubm90aWZ5T25lKCk7Ci19CiAKLXZvaWQgUmVzb3VyY2VIYW5kbGVD
dXJsRGVsZWdhdGU6OmRpZEZpbmlzaChOZXR3b3JrTG9hZE1ldHJpY3MgbmV0d29ya0xvYWRNZXRy
aWNzKQotewotICAgIHJlc3BvbnNlKCkuc2V0RGVwcmVjYXRlZE5ldHdvcmtMb2FkTWV0cmljcyhu
ZXR3b3JrTG9hZE1ldHJpY3MpOwotCi0gICAgaWYgKCFtX2hhbmRsZSkKLSAgICAgICAgcmV0dXJu
OwotCi0gICAgaWYgKCFtX2RpZE5vdGlmeVJlc3BvbnNlKSB7Ci0gICAgICAgIGhhbmRsZUxvY2Fs
UmVjZWl2ZVJlc3BvbnNlKCk7Ci0gICAgICAgIGlmICghbV9oYW5kbGUpCi0gICAgICAgICAgICBy
ZXR1cm47Ci0gICAgfQorICAgIGlmIChtX2N1cmxSZXF1ZXN0KQorICAgICAgICBtX2hhbmRsZS0+
Z2V0SW50ZXJuYWwoKS0+bV9yZXNwb25zZS5zZXREZXByZWNhdGVkTmV0d29ya0xvYWRNZXRyaWNz
KG1fY3VybFJlcXVlc3QtPmdldE5ldHdvcmtMb2FkTWV0cmljcygpKTsKIAogICAgIGlmIChtX211
bHRpcGFydEhhbmRsZSkKICAgICAgICAgbV9tdWx0aXBhcnRIYW5kbGUtPmNvbnRlbnRFbmRlZCgp
OwpAQCAtNDUzLDE1ICsyNzgsMjAgQEAgdm9pZCBSZXNvdXJjZUhhbmRsZUN1cmxEZWxlZ2F0ZTo6
ZGlkRmluaXNoKE5ldHdvcmtMb2FkTWV0cmljcyBuZXR3b3JrTG9hZE1ldHJpY3MKICAgICB9CiB9
CiAKLXZvaWQgUmVzb3VyY2VIYW5kbGVDdXJsRGVsZWdhdGU6OmRpZEZhaWwoY29uc3QgUmVzb3Vy
Y2VFcnJvciYgcmVzb3VyY2VFcnJvcikKK3ZvaWQgUmVzb3VyY2VIYW5kbGVDdXJsRGVsZWdhdGU6
OmN1cmxEaWRGYWlsV2l0aEVycm9yKGNvbnN0IFJlc291cmNlRXJyb3ImIHJlc291cmNlRXJyb3Ip
CiB7Ci0gICAgaWYgKCFtX2hhbmRsZSkKKyAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOworCisg
ICAgaWYgKGNhbmNlbGxlZE9yQ2xpZW50bGVzcygpKQogICAgICAgICByZXR1cm47CiAKLSAgICBp
ZiAobV9oYW5kbGUtPmNsaWVudCgpKSB7Ci0gICAgICAgIEN1cmxDYWNoZU1hbmFnZXI6OmdldElu
c3RhbmNlKCkuZGlkRmFpbCgqbV9oYW5kbGUpOwotICAgICAgICBtX2hhbmRsZS0+Y2xpZW50KCkt
PmRpZEZhaWwobV9oYW5kbGUsIHJlc291cmNlRXJyb3IpOwotICAgIH0KKyAgICBDdXJsQ2FjaGVN
YW5hZ2VyOjpnZXRJbnN0YW5jZSgpLmRpZEZhaWwoKm1faGFuZGxlKTsKKyAgICBtX2hhbmRsZS0+
Y2xpZW50KCktPmRpZEZhaWwobV9oYW5kbGUsIHJlc291cmNlRXJyb3IpOworfQorCitSZXNvdXJj
ZVJlc3BvbnNlJiBSZXNvdXJjZUhhbmRsZUN1cmxEZWxlZ2F0ZTo6cmVzcG9uc2UoKQoreworICAg
IHJldHVybiBtX2hhbmRsZS0+Z2V0SW50ZXJuYWwoKS0+bV9yZXNwb25zZTsKIH0KIAogdm9pZCBS
ZXNvdXJjZUhhbmRsZUN1cmxEZWxlZ2F0ZTo6aGFuZGxlRGF0YVVSTCgpCkBAIC01MjYsMzA1ICsz
NTYsMzcgQEAgdm9pZCBSZXNvdXJjZUhhbmRsZUN1cmxEZWxlZ2F0ZTo6aGFuZGxlRGF0YVVSTCgp
CiAgICAgICAgIG1faGFuZGxlLT5jbGllbnQoKS0+ZGlkRmluaXNoTG9hZGluZyhtX2hhbmRsZSk7
CiB9CiAKLXZvaWQgUmVzb3VyY2VIYW5kbGVDdXJsRGVsZWdhdGU6OnNldHVwUE9TVCgpCitzdGQ6
OnBhaXI8U3RyaW5nLCBTdHJpbmc+IFJlc291cmNlSGFuZGxlQ3VybERlbGVnYXRlOjpnZXRDcmVk
ZW50aWFsKFJlc291cmNlUmVxdWVzdCYgcmVxdWVzdCwgYm9vbCByZWRpcmVjdCkKIHsKLSAgICBt
X2N1cmxIYW5kbGUtPmVuYWJsZUh0dHBQb3N0UmVxdWVzdCgpOwotCi0gICAgc2l6ZV90IG51bUVs
ZW1lbnRzID0gZ2V0Rm9ybUVsZW1lbnRzQ291bnQoKTsKLSAgICBpZiAoIW51bUVsZW1lbnRzKQot
ICAgICAgICByZXR1cm47Ci0KLSAgICAvLyBEbyBub3Qgc3RyZWFtIGZvciBzaW1wbGUgUE9TVCBk
YXRhCi0gICAgaWYgKG51bUVsZW1lbnRzID09IDEpIHsKLSAgICAgICAgbV9wb3N0Qnl0ZXMgPSBt
X2ZpcnN0UmVxdWVzdC5odHRwQm9keSgpLT5mbGF0dGVuKCk7Ci0gICAgICAgIGlmIChtX3Bvc3RC
eXRlcy5zaXplKCkpCi0gICAgICAgICAgICBtX2N1cmxIYW5kbGUtPnNldFBvc3RGaWVsZHMobV9w
b3N0Qnl0ZXMuZGF0YSgpLCBtX3Bvc3RCeXRlcy5zaXplKCkpOwotICAgICAgICByZXR1cm47Ci0g
ICAgfQotCi0gICAgc2V0dXBGb3JtRGF0YSh0cnVlKTsKLX0KLQotdm9pZCBSZXNvdXJjZUhhbmRs
ZUN1cmxEZWxlZ2F0ZTo6c2V0dXBQVVQoKQotewotICAgIG1fY3VybEhhbmRsZS0+ZW5hYmxlSHR0
cFB1dFJlcXVlc3QoKTsKLQotICAgIC8vIERpc2FibGUgdGhlIEV4cGVjdDogMTAwIGNvbnRpbnVl
IGhlYWRlcgotICAgIG1fY3VybEhhbmRsZS0+cmVtb3ZlUmVxdWVzdEhlYWRlcigiRXhwZWN0Iik7
Ci0KLSAgICBzaXplX3QgbnVtRWxlbWVudHMgPSBnZXRGb3JtRWxlbWVudHNDb3VudCgpOwotICAg
IGlmICghbnVtRWxlbWVudHMpCi0gICAgICAgIHJldHVybjsKLQotICAgIHNldHVwRm9ybURhdGEo
ZmFsc2UpOwotfQotCi1zaXplX3QgUmVzb3VyY2VIYW5kbGVDdXJsRGVsZWdhdGU6OmdldEZvcm1F
bGVtZW50c0NvdW50KCkKLXsKLSAgICBSZWZQdHI8Rm9ybURhdGE+IGZvcm1EYXRhID0gbV9maXJz
dFJlcXVlc3QuaHR0cEJvZHkoKTsKLSAgICBpZiAoIWZvcm1EYXRhKQotICAgICAgICByZXR1cm4g
MDsKLQotICAgIC8vIFJlc29sdmUgdGhlIGJsb2IgZWxlbWVudHMgc28gdGhlIGZvcm1EYXRhIGNh
biBjb3JyZWN0bHkgcmVwb3J0IGl0J3Mgc2l6ZS4KLSAgICBmb3JtRGF0YSA9IGZvcm1EYXRhLT5y
ZXNvbHZlQmxvYlJlZmVyZW5jZXMoKTsKLSAgICBzaXplX3Qgc2l6ZSA9IGZvcm1EYXRhLT5lbGVt
ZW50cygpLnNpemUoKTsKLSAgICBtX2ZpcnN0UmVxdWVzdC5zZXRIVFRQQm9keShXVEZNb3ZlKGZv
cm1EYXRhKSk7Ci0gICAgcmV0dXJuIHNpemU7Ci19Ci0KLXZvaWQgUmVzb3VyY2VIYW5kbGVDdXJs
RGVsZWdhdGU6OnNldHVwRm9ybURhdGEoYm9vbCBpc1Bvc3RSZXF1ZXN0KQotewotICAgIFZlY3Rv
cjxGb3JtRGF0YUVsZW1lbnQ+IGVsZW1lbnRzID0gbV9maXJzdFJlcXVlc3QuaHR0cEJvZHkoKS0+
ZWxlbWVudHMoKTsKLSAgICBzaXplX3QgbnVtRWxlbWVudHMgPSBlbGVtZW50cy5zaXplKCk7Ci0K
LSAgICBzdGF0aWMgY29uc3QgbG9uZyBsb25nIG1heEN1cmxPZmZUID0gbV9jdXJsSGFuZGxlLT5t
YXhDdXJsT2ZmVCgpOwotCi0gICAgLy8gT2J0YWluIHRoZSB0b3RhbCBzaXplIG9mIHRoZSBmb3Jt
IGRhdGEKLSAgICBjdXJsX29mZl90IHNpemUgPSAwOwotICAgIGJvb2wgY2h1bmtlZFRyYW5zZmVy
ID0gZmFsc2U7Ci0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBudW1FbGVtZW50czsgaSsrKSB7
Ci0gICAgICAgIEZvcm1EYXRhRWxlbWVudCBlbGVtZW50ID0gZWxlbWVudHNbaV07Ci0gICAgICAg
IGlmIChlbGVtZW50Lm1fdHlwZSA9PSBGb3JtRGF0YUVsZW1lbnQ6OlR5cGU6OkVuY29kZWRGaWxl
KSB7Ci0gICAgICAgICAgICBsb25nIGxvbmcgZmlsZVNpemVSZXN1bHQ7Ci0gICAgICAgICAgICBp
ZiAoZ2V0RmlsZVNpemUoZWxlbWVudC5tX2ZpbGVuYW1lLCBmaWxlU2l6ZVJlc3VsdCkpIHsKLSAg
ICAgICAgICAgICAgICBpZiAoZmlsZVNpemVSZXN1bHQgPiBtYXhDdXJsT2ZmVCkgewotICAgICAg
ICAgICAgICAgICAgICAvLyBGaWxlIHNpemUgaXMgdG9vIGJpZyBmb3Igc3BlY2lmeWluZyBpdCB0
byBjVVJMCi0gICAgICAgICAgICAgICAgICAgIGNodW5rZWRUcmFuc2ZlciA9IHRydWU7Ci0gICAg
ICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAg
ICBzaXplICs9IGZpbGVTaXplUmVzdWx0OwotICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAg
ICAgICAgICBjaHVua2VkVHJhbnNmZXIgPSB0cnVlOwotICAgICAgICAgICAgICAgIGJyZWFrOwot
ICAgICAgICAgICAgfQotICAgICAgICB9IGVsc2UKLSAgICAgICAgICAgIHNpemUgKz0gZWxlbWVu
dHNbaV0ubV9kYXRhLnNpemUoKTsKLSAgICB9CisgICAgLy8gbV91c2VyL21fcGFzcyBhcmUgY3Jl
ZGVudGlhbHMgZ2l2ZW4gbWFudWFsbHksIGZvciBpbnN0YW5jZSwgYnkgdGhlIGFyZ3VtZW50cyBw
YXNzZWQgdG8gWE1MSHR0cFJlcXVlc3Qub3BlbigpLgorICAgIFN0cmluZyBwYXJ0aXRpb24gPSBy
ZXF1ZXN0LmNhY2hlUGFydGl0aW9uKCk7CiAKLSAgICAvLyBjVVJMIGd1ZXNzZXMgdGhhdCB3ZSB3
YW50IGNodW5rZWQgZW5jb2RpbmcgYXMgbG9uZyBhcyB3ZSBzcGVjaWZ5IHRoZSBoZWFkZXIKLSAg
ICBpZiAoY2h1bmtlZFRyYW5zZmVyKQotICAgICAgICBtX2N1cmxIYW5kbGUtPmFwcGVuZFJlcXVl
c3RIZWFkZXIoIlRyYW5zZmVyLUVuY29kaW5nOiBjaHVua2VkIik7Ci0gICAgZWxzZSB7Ci0gICAg
ICAgIGlmIChpc1Bvc3RSZXF1ZXN0KQotICAgICAgICAgICAgbV9jdXJsSGFuZGxlLT5zZXRQb3N0
RmllbGRMYXJnZShzaXplKTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgbV9jdXJsSGFuZGxl
LT5zZXRJbkZpbGVTaXplTGFyZ2Uoc2l6ZSk7CisgICAgaWYgKG1fc2hvdWxkVXNlQ3JlZGVudGlh
bFN0b3JhZ2UpIHsKKyAgICAgICAgaWYgKG1fdXNlci5pc0VtcHR5KCkgJiYgbV9wYXNzLmlzRW1w
dHkoKSkgeworICAgICAgICAgICAgLy8gPHJkYXI6Ly9wcm9ibGVtLzcxNzQwNTA+IC0gRm9yIFVS
THMgdGhhdCBtYXRjaCB0aGUgcGF0aHMgb2YgdGhvc2UgcHJldmlvdXNseSBjaGFsbGVuZ2VkIGZv
ciBIVFRQIEJhc2ljIGF1dGhlbnRpY2F0aW9uLCAKKyAgICAgICAgICAgIC8vIHRyeSBhbmQgcmV1
c2UgdGhlIGNyZWRlbnRpYWwgcHJlZW1wdGl2ZWx5LCBhcyBhbGxvd2VkIGJ5IFJGQyAyNjE3Lgor
ICAgICAgICAgICAgbV9pbml0aWFsQ3JlZGVudGlhbCA9IENyZWRlbnRpYWxTdG9yYWdlOjpkZWZh
dWx0Q3JlZGVudGlhbFN0b3JhZ2UoKS5nZXQocGFydGl0aW9uLCByZXF1ZXN0LnVybCgpKTsKKyAg
ICAgICAgfSBlbHNlIGlmICghcmVkaXJlY3QpIHsKKyAgICAgICAgICAgIC8vIElmIHRoZXJlIGlz
IGFscmVhZHkgYSBwcm90ZWN0aW9uIHNwYWNlIGtub3duIGZvciB0aGUgVVJMLCB1cGRhdGUgc3Rv
cmVkIGNyZWRlbnRpYWxzCisgICAgICAgICAgICAvLyBiZWZvcmUgc2VuZGluZyBhIHJlcXVlc3Qu
IFRoaXMgbWFrZXMgaXQgcG9zc2libGUgdG8gaW1wbGVtZW50IGxvZ291dCBieSBzZW5kaW5nIGFu
CisgICAgICAgICAgICAvLyBYTUxIdHRwUmVxdWVzdCB3aXRoIGtub3duIGluY29ycmVjdCBjcmVk
ZW50aWFscywgYW5kIGFib3J0aW5nIGl0IGltbWVkaWF0ZWx5IChzbyB0aGF0CisgICAgICAgICAg
ICAvLyBhbiBhdXRoZW50aWNhdGlvbiBkaWFsb2cgZG9lc24ndCBwb3AgdXApLgorICAgICAgICAg
ICAgQ3JlZGVudGlhbFN0b3JhZ2U6OmRlZmF1bHRDcmVkZW50aWFsU3RvcmFnZSgpLnNldChwYXJ0
aXRpb24sIENyZWRlbnRpYWwobV91c2VyLCBtX3Bhc3MsIENyZWRlbnRpYWxQZXJzaXN0ZW5jZU5v
bmUpLCByZXF1ZXN0LnVybCgpKTsKKyAgICAgICAgfQogICAgIH0KIAotICAgIG1fZm9ybURhdGFT
dHJlYW0gPSBzdGQ6Om1ha2VfdW5pcXVlPEZvcm1EYXRhU3RyZWFtPigpOwotICAgIG1fZm9ybURh
dGFTdHJlYW0tPnNldEhUVFBCb2R5KG1fZmlyc3RSZXF1ZXN0Lmh0dHBCb2R5KCkpOwotCi0gICAg
bV9jdXJsSGFuZGxlLT5zZXRSZWFkQ2FsbGJhY2tGdW5jdGlvbih3aWxsU2VuZERhdGFDYWxsYmFj
aywgdGhpcyk7Ci19Ci0KLXZvaWQgUmVzb3VyY2VIYW5kbGVDdXJsRGVsZWdhdGU6OmFwcGx5QXV0
aGVudGljYXRpb24oKQotewogICAgIFN0cmluZyB1c2VyID0gbV91c2VyOwogICAgIFN0cmluZyBw
YXNzd29yZCA9IG1fcGFzczsKIAogICAgIGlmICghbV9pbml0aWFsQ3JlZGVudGlhbC5pc0VtcHR5
KCkpIHsKICAgICAgICAgdXNlciA9IG1faW5pdGlhbENyZWRlbnRpYWwudXNlcigpOwogICAgICAg
ICBwYXNzd29yZCA9IG1faW5pdGlhbENyZWRlbnRpYWwucGFzc3dvcmQoKTsKLSAgICAgICAgbV9j
dXJsSGFuZGxlLT5lbmFibGVIdHRwQXV0aGVudGljYXRpb24oQ1VSTEFVVEhfQkFTSUMpOwogICAg
IH0KIAotICAgIC8vIEl0IHNlZW1zIHdlIG5lZWQgdG8gc2V0IENVUkxPUFRfVVNFUlBXRCBldmVu
IGlmIHVzZXJuYW1lIGFuZCBwYXNzd29yZCBpcyBlbXB0eS4KLSAgICAvLyBPdGhlcndpc2UgY1VS
TCB3aWxsIG5vdCBhdXRvbWF0aWNhbGx5IGNvbnRpbnVlIHdpdGggYSBuZXcgcmVxdWVzdCBhZnRl
ciBhIDQwMSByZXNwb25zZS4KLQotICAgIC8vIGN1cmwgQ1VSTE9QVF9VU0VSUFdEIGV4cGVjdHMg
dXNlcm5hbWU6cGFzc3dvcmQKLSAgICBtX2N1cmxIYW5kbGUtPnNldEh0dHBBdXRoVXNlclBhc3Mo
dXNlciwgcGFzc3dvcmQpOwotfQotCi1OZXR3b3JrTG9hZE1ldHJpY3MgUmVzb3VyY2VIYW5kbGVD
dXJsRGVsZWdhdGU6OmdldE5ldHdvcmtMb2FkTWV0cmljcygpCi17Ci0gICAgTmV0d29ya0xvYWRN
ZXRyaWNzIG5ldHdvcmtMb2FkTWV0cmljczsKLSAgICBpZiAoYXV0byBtZXRyaWNzID0gbV9jdXJs
SGFuZGxlLT5nZXROZXR3b3JrTG9hZE1ldHJpY3MoKSkKLSAgICAgICAgbmV0d29ya0xvYWRNZXRy
aWNzID0gKm1ldHJpY3M7Ci0KLSAgICByZXR1cm4gbmV0d29ya0xvYWRNZXRyaWNzOwotfQorICAg
IGlmICh1c2VyLmlzRW1wdHkoKSAmJiBwYXNzd29yZC5pc0VtcHR5KCkpCisgICAgICAgIHJldHVy
biBzdGQ6OnBhaXI8U3RyaW5nLCBTdHJpbmc+KCIiLCAiIik7CiAKLUNVUkxjb2RlIFJlc291cmNl
SGFuZGxlQ3VybERlbGVnYXRlOjp3aWxsU2V0dXBTc2xDdHgodm9pZCogc3NsQ3R4KQotewotICAg
IG1fc3NsVmVyaWZpZXIuc2V0Q3VybEhhbmRsZShtX2N1cmxIYW5kbGUuZ2V0KCkpOwotICAgIG1f
c3NsVmVyaWZpZXIuc2V0SG9zdE5hbWUobV9maXJzdFJlcXVlc3QudXJsKCkuaG9zdCgpKTsKLSAg
ICBtX3NzbFZlcmlmaWVyLnNldFNzbEN0eChzc2xDdHgpOwotCi0gICAgcmV0dXJuIENVUkxFX09L
OwotfQotCi0vKgotKiBUaGlzIGlzIGJlaW5nIGNhbGxlZCBmb3IgZWFjaCBIVFRQIGhlYWRlciBp
biB0aGUgcmVzcG9uc2UuIFRoaXMgaW5jbHVkZXMgJ1xyXG4nCi0qIGZvciB0aGUgbGFzdCBsaW5l
IG9mIHRoZSBoZWFkZXIuCi0qCi0qIFdlIHdpbGwgYWRkIGVhY2ggSFRUUCBIZWFkZXIgdG8gdGhl
IFJlc291cmNlUmVzcG9uc2UgYW5kIG9uIHRoZSB0ZXJtaW5hdGlvbgotKiBvZiB0aGUgaGVhZGVy
IChcclxuKSB3ZSB3aWxsIHBhcnNlIENvbnRlbnQtVHlwZSBhbmQgQ29udGVudC1EaXNwb3NpdGlv
biBhbmQKLSogdXBkYXRlIHRoZSBSZXNvdXJjZVJlc3BvbnNlIGFuZCB0aGVuIHNlbmQgaXQgYXdh
eS4KLSoKLSovCi1zaXplX3QgUmVzb3VyY2VIYW5kbGVDdXJsRGVsZWdhdGU6OmRpZFJlY2VpdmVI
ZWFkZXIoU3RyaW5nJiYgaGVhZGVyKQotewotICAgIHN0YXRpYyBjb25zdCBhdXRvIGVtcHR5TGlu
ZUNSTEYgPSAiXHJcbiI7Ci0gICAgc3RhdGljIGNvbnN0IGF1dG8gZW1wdHlMaW5lTEYgPSAiXG4i
OwotCi0gICAgaWYgKCFtX2hhbmRsZSkKLSAgICAgICAgcmV0dXJuIDA7Ci0KLSAgICBpZiAobV9k
ZWZlcnNMb2FkaW5nKQotICAgICAgICByZXR1cm4gMDsKLQotICAgIHNpemVfdCByZWNlaXZlQnl0
ZXMgPSBoZWFkZXIubGVuZ3RoKCk7Ci0KLSAgICAvLyBUaGUgSFRUUCBzdGFuZGFyZCByZXF1aXJl
cyB0byB1c2UgXHJcbiBidXQgZm9yIGNvbXBhdGliaWxpdHkgaXQgcmVjb21tZW5kcyB0byBhY2Nl
cHQgYWxzbyBcbi4KLSAgICAvLyBXZSB3aWxsIGFkZCB0aGUgY3VycmVudCBoZWFkZXIgdG8gdGhl
IEN1cmxSZXNwb25zZS5oZWFkZXJzCi0gICAgaWYgKChoZWFkZXIgIT0gZW1wdHlMaW5lQ1JMRikg
JiYgKGhlYWRlciAhPSBlbXB0eUxpbmVMRikpIHsKLSAgICAgICAgbV9yZXNwb25zZS5oZWFkZXJz
LmFwcGVuZChXVEZNb3ZlKGhlYWRlcikpOwotICAgICAgICByZXR1cm4gcmVjZWl2ZUJ5dGVzOwot
ICAgIH0KLQotICAgIC8vIFdlIGNhbiBmaW5pc2ggYW5kIHNlbmQgdGhlIFJlc291cmNlUmVzcG9u
c2UKLSAgICBsb25nIHN0YXR1c0NvZGUgPSAwOwotICAgIGlmIChhdXRvIGNvZGUgPSBtX2N1cmxI
YW5kbGUtPmdldFJlc3BvbnNlQ29kZSgpKQotICAgICAgICBzdGF0dXNDb2RlID0gKmNvZGU7Ci0K
LSAgICBsb25nIGh0dHBDb25uZWN0Q29kZSA9IDA7Ci0gICAgaWYgKGF1dG8gY29kZSA9IG1fY3Vy
bEhhbmRsZS0+Z2V0SHR0cENvbm5lY3RDb2RlKCkpCi0gICAgICAgIGh0dHBDb25uZWN0Q29kZSA9
ICpjb2RlOwotCi0gICAgaWYgKCgxMDAgPD0gc3RhdHVzQ29kZSkgJiYgKHN0YXR1c0NvZGUgPCAy
MDApKSB7Ci0gICAgICAgIC8vIEp1c3QgcmV0dXJuIHdoZW4gcmVjZWl2aW5nIGh0dHAgaW5mbywg
ZS5nLiBIVFRQLzEuMSAxMDAgQ29udGludWUuCi0gICAgICAgIC8vIElmIG5vdCwgdGhlIHJlcXVl
c3QgbWlnaHQgYmUgY2FuY2VsbGVkLCBiZWNhdXNlIHRoZSBNSU1FIHR5cGUgd2lsbCBiZSBlbXB0
eSBmb3IgdGhpcyByZXNwb25zZS4KLSAgICAgICAgbV9yZXNwb25zZSA9IEN1cmxSZXNwb25zZSgp
OwotICAgICAgICByZXR1cm4gcmVjZWl2ZUJ5dGVzOwotICAgIH0KLQotICAgIGlmICghc3RhdHVz
Q29kZSAmJiAoaHR0cENvbm5lY3RDb2RlID09IDIwMCkpIHsKLSAgICAgICAgLy8gQ29tZXMgaGVy
ZSB3aGVuIHJlY2VpdmluZyAyMDAgQ29ubmVjdGlvbiBFc3RhYmxpc2hlZC4gSnVzdCByZXR1cm4u
Ci0gICAgICAgIG1fcmVzcG9uc2UgPSBDdXJsUmVzcG9uc2UoKTsKLSAgICAgICAgcmV0dXJuIHJl
Y2VpdmVCeXRlczsKLSAgICB9Ci0KLSAgICAvLyBJZiB0aGUgRk9MTE9XTE9DQVRJT04gb3B0aW9u
IGlzIGVuYWJsZWQgZm9yIHRoZSBjdXJsIGhhbmRsZSB0aGVuCi0gICAgLy8gY3VybCB3aWxsIGZv
bGxvdyB0aGUgcmVkaXJlY3Rpb25zIGludGVybmFsbHkuIFRodXMgdGhpcyBoZWFkZXIgY2FsbGJh
Y2sKLSAgICAvLyB3aWxsIGJlIGNhbGxlZCBtb3JlIHRoYW4gb25lIHRpbWUgd2l0aCB0aGUgbGlu
ZSBzdGFydGluZyAiSFRUUCIgZm9yIG9uZSBqb2IuCi0KLSAgICBtX3Jlc3BvbnNlLnVybCA9IG1f
Y3VybEhhbmRsZS0+Z2V0RWZmZWN0aXZlVVJMKCk7Ci0gICAgbV9yZXNwb25zZS5zdGF0dXNDb2Rl
ID0gc3RhdHVzQ29kZTsKLQotICAgIGlmIChhdXRvIGxlbmd0aCA9IG1fY3VybEhhbmRsZS0+Z2V0
Q29udGVudExlbmd0aCgpKQotICAgICAgICBtX3Jlc3BvbnNlLmV4cGVjdGVkQ29udGVudExlbmd0
aCA9ICpsZW5ndGg7Ci0KLSAgICBpZiAoYXV0byBwb3J0ID0gbV9jdXJsSGFuZGxlLT5nZXRQcmlt
YXJ5UG9ydCgpKQotICAgICAgICBtX3Jlc3BvbnNlLmNvbm5lY3RQb3J0ID0gKnBvcnQ7Ci0KLSAg
ICBpZiAoYXV0byBhdXRoID0gbV9jdXJsSGFuZGxlLT5nZXRIdHRwQXV0aEF2YWlsKCkpCi0gICAg
ICAgIG1fcmVzcG9uc2UuYXZhaWxhYmxlSHR0cEF1dGggPSAqYXV0aDsKLQotICAgIGlmIChpc01h
aW5UaHJlYWQoKSkKLSAgICAgICAgZGlkUmVjZWl2ZUFsbEhlYWRlcnMobV9yZXNwb25zZSk7Ci0g
ICAgZWxzZSB7Ci0gICAgICAgIGNhbGxPbk1haW5UaHJlYWQoW3Byb3RlY3RlZFRoaXMgPSBtYWtl
UmVmKCp0aGlzKSwgcmVzcG9uc2UgPSBtX3Jlc3BvbnNlLmlzb2xhdGVkQ29weSgpXSB7Ci0gICAg
ICAgICAgICBpZiAoIXByb3RlY3RlZFRoaXMtPm1faGFuZGxlKQotICAgICAgICAgICAgICAgIHJl
dHVybjsKLSAgICAgICAgICAgIHByb3RlY3RlZFRoaXMtPmRpZFJlY2VpdmVBbGxIZWFkZXJzKHJl
c3BvbnNlKTsKLSAgICAgICAgfSk7Ci0gICAgfQotCi0gICAgcmV0dXJuIHJlY2VpdmVCeXRlczsK
LX0KLQotLy8gY2FsbGVkIHdpdGggZGF0YSBhZnRlciBhbGwgaGVhZGVycyBoYXZlIGJlZW4gcHJv
Y2Vzc2VkIHZpYSBoZWFkZXJDYWxsYmFjawotc2l6ZV90IFJlc291cmNlSGFuZGxlQ3VybERlbGVn
YXRlOjpkaWRSZWNlaXZlRGF0YShSZWY8U2hhcmVkQnVmZmVyPiYmIGJ1ZmZlcikKLXsKLSAgICBp
ZiAoIW1faGFuZGxlKQotICAgICAgICByZXR1cm4gMDsKLQotICAgIGlmIChtX2RlZmVyc0xvYWRp
bmcpCi0gICAgICAgIHJldHVybiAwOwotCi0gICAgc2l6ZV90IHJlY2VpdmVCeXRlcyA9IGJ1ZmZl
ci0+c2l6ZSgpOwotCi0gICAgLy8gdGhpcyBzaG91bGRuJ3QgYmUgbmVjZXNzYXJ5IGJ1dCBhcHBh
cmVudGx5IGlzLiBDVVJMIHdyaXRlcyB0aGUgZGF0YQotICAgIC8vIG9mIGh0bWwgcGFnZSBldmVu
IGlmIGl0IGlzIGEgcmVkaXJlY3QgdGhhdCB3YXMgaGFuZGxlZCBpbnRlcm5hbGx5Ci0gICAgLy8g
Y2FuIGJlIG9ic2VydmVkIGUuZy4gb24gZ21haWwuY29tCi0gICAgaWYgKGF1dG8gaHR0cENvZGUg
PSBtX2N1cmxIYW5kbGUtPmdldFJlc3BvbnNlQ29kZSgpKSB7Ci0gICAgICAgIGlmICgqaHR0cENv
ZGUgPj0gMzAwICYmICpodHRwQ29kZSA8IDQwMCkKLSAgICAgICAgICAgIHJldHVybiByZWNlaXZl
Qnl0ZXM7Ci0gICAgfQotCi0gICAgaWYgKHJlY2VpdmVCeXRlcykgewotICAgICAgICBpZiAoaXNN
YWluVGhyZWFkKCkpCi0gICAgICAgICAgICBkaWRSZWNlaXZlQ29udGVudERhdGEoV1RGTW92ZShi
dWZmZXIpKTsKLSAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICBjYWxsT25NYWluVGhyZWFkKFtw
cm90ZWN0ZWRUaGlzID0gbWFrZVJlZigqdGhpcyksIGJ1ZiA9IFdURk1vdmUoYnVmZmVyKV0oKSBt
dXRhYmxlIHsKLSAgICAgICAgICAgICAgICBpZiAoIXByb3RlY3RlZFRoaXMtPm1faGFuZGxlKQot
ICAgICAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICAgICAgcHJvdGVjdGVkVGhp
cy0+ZGlkUmVjZWl2ZUNvbnRlbnREYXRhKFdURk1vdmUoYnVmKSk7Ci0gICAgICAgICAgICB9KTsK
LSAgICAgICAgfQotICAgIH0KLQotICAgIHJldHVybiByZWNlaXZlQnl0ZXM7Ci19Ci0KLS8qIFRo
aXMgaXMgY2FsbGVkIHRvIG9idGFpbiBIVFRQIFBPU1Qgb3IgUFVUIGRhdGEuCi1JdGVyYXRlIHRo
cm91Z2ggRm9ybURhdGEgZWxlbWVudHMgYW5kIHVwbG9hZCBmaWxlcy4KLUNhcmVmdWxseSByZXNw
ZWN0IHRoZSBnaXZlbiBidWZmZXIgYmxvY2tTaXplIGFuZCBmaWxsIHRoZSByZXN0IG9mIHRoZSBk
YXRhIGF0IHRoZSBuZXh0IGNhbGxzLgotKi8KLXNpemVfdCBSZXNvdXJjZUhhbmRsZUN1cmxEZWxl
Z2F0ZTo6d2lsbFNlbmREYXRhKGNoYXIqIGJ1ZmZlciwgc2l6ZV90IGJsb2NrU2l6ZSwgc2l6ZV90
IG51bWJlck9mQmxvY2tzKQotewotICAgIEFTU0VSVCghaXNNYWluVGhyZWFkKCkpOwotCi0gICAg
aWYgKCFtX2hhbmRsZSkKLSAgICAgICAgcmV0dXJuIDA7Ci0KLSAgICBpZiAobV9kZWZlcnNMb2Fk
aW5nKQotICAgICAgICByZXR1cm4gMDsKLQotICAgIGlmICghYmxvY2tTaXplIHx8ICFudW1iZXJP
ZkJsb2NrcykKLSAgICAgICAgcmV0dXJuIDA7Ci0KLSAgICB7Ci0gICAgICAgIHN0ZDo6dW5pcXVl
X2xvY2s8TG9jaz4gbG9jayhtX3dvcmtlclRocmVhZE11dGV4KTsKLQotICAgICAgICBtX3NlbmRC
eXRlcyA9IDA7Ci0KLSAgICAgICAgaWYgKGlzTWFpblRocmVhZCgpKQotICAgICAgICAgICAgcHJl
cGFyZVNlbmREYXRhKGJ1ZmZlciwgYmxvY2tTaXplLCBudW1iZXJPZkJsb2Nrcyk7Ci0gICAgICAg
IGVsc2UgewotICAgICAgICAgICAgY2FsbE9uTWFpblRocmVhZChbcHJvdGVjdGVkVGhpcyA9IG1h
a2VSZWYoKnRoaXMpLCBidWZmZXIsIGJsb2NrU2l6ZSwgbnVtYmVyT2ZCbG9ja3NdIHsKLSAgICAg
ICAgICAgICAgICBpZiAoIXByb3RlY3RlZFRoaXMtPm1faGFuZGxlKQotICAgICAgICAgICAgICAg
ICAgICByZXR1cm47Ci0gICAgICAgICAgICAgICAgcHJvdGVjdGVkVGhpcy0+cHJlcGFyZVNlbmRE
YXRhKGJ1ZmZlciwgYmxvY2tTaXplLCBudW1iZXJPZkJsb2Nrcyk7Ci0gICAgICAgICAgICB9KTsK
LQotICAgICAgICAgICAgbV93b3JrZXJUaHJlYWRDb25kaXRpb25WYXJpYWJsZS53YWl0KGxvY2ss
IFt0aGlzXSB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIG1fc2VuZEJ5dGVzOwotICAgICAgICAg
ICAgfSk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICByZXR1cm4gbV9zZW5kQnl0ZXM7Ci19Ci0K
LUNVUkxjb2RlIFJlc291cmNlSGFuZGxlQ3VybERlbGVnYXRlOjp3aWxsU2V0dXBTc2xDdHhDYWxs
YmFjayhDVVJMKiwgdm9pZCogc3NsQ3R4LCB2b2lkKiB1c2VyRGF0YSkKLXsKLSAgICByZXR1cm4g
c3RhdGljX2Nhc3Q8UmVzb3VyY2VIYW5kbGVDdXJsRGVsZWdhdGUqPih1c2VyRGF0YSktPndpbGxT
ZXR1cFNzbEN0eChzc2xDdHgpOwotfQotCi1zaXplX3QgUmVzb3VyY2VIYW5kbGVDdXJsRGVsZWdh
dGU6OmRpZFJlY2VpdmVIZWFkZXJDYWxsYmFjayhjaGFyKiBwdHIsIHNpemVfdCBibG9ja1NpemUs
IHNpemVfdCBudW1iZXJPZkJsb2Nrcywgdm9pZCogZGF0YSkKLXsKLSAgICByZXR1cm4gc3RhdGlj
X2Nhc3Q8UmVzb3VyY2VIYW5kbGVDdXJsRGVsZWdhdGUqPihjb25zdF9jYXN0PHZvaWQqPihkYXRh
KSktPmRpZFJlY2VpdmVIZWFkZXIoU3RyaW5nKHN0YXRpY19jYXN0PGNvbnN0IGNoYXIqPihwdHIp
LCBibG9ja1NpemUgKiBudW1iZXJPZkJsb2NrcykpOwotfQotCi1zaXplX3QgUmVzb3VyY2VIYW5k
bGVDdXJsRGVsZWdhdGU6OmRpZFJlY2VpdmVEYXRhQ2FsbGJhY2soY2hhciogcHRyLCBzaXplX3Qg
YmxvY2tTaXplLCBzaXplX3QgbnVtYmVyT2ZCbG9ja3MsIHZvaWQqIGRhdGEpCi17Ci0gICAgcmV0
dXJuIHN0YXRpY19jYXN0PFJlc291cmNlSGFuZGxlQ3VybERlbGVnYXRlKj4oY29uc3RfY2FzdDx2
b2lkKj4oZGF0YSkpLT5kaWRSZWNlaXZlRGF0YShTaGFyZWRCdWZmZXI6OmNyZWF0ZShwdHIsIGJs
b2NrU2l6ZSAqIG51bWJlck9mQmxvY2tzKSk7Ci19Ci0KLXNpemVfdCBSZXNvdXJjZUhhbmRsZUN1
cmxEZWxlZ2F0ZTo6d2lsbFNlbmREYXRhQ2FsbGJhY2soY2hhciogcHRyLCBzaXplX3QgYmxvY2tT
aXplLCBzaXplX3QgbnVtYmVyT2ZCbG9ja3MsIHZvaWQqIGRhdGEpCi17Ci0gICAgcmV0dXJuIHN0
YXRpY19jYXN0PFJlc291cmNlSGFuZGxlQ3VybERlbGVnYXRlKj4oY29uc3RfY2FzdDx2b2lkKj4o
ZGF0YSkpLT53aWxsU2VuZERhdGEocHRyLCBibG9ja1NpemUsIG51bWJlck9mQmxvY2tzKTsKKyAg
ICByZXR1cm4gc3RkOjpwYWlyPFN0cmluZywgU3RyaW5nPih1c2VyLCBwYXNzd29yZCk7CiB9CiAK
IH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL25ldHdvcmsvY3VybC9SZXNvdXJjZUhhbmRsZUN1cmxEZWxlZ2F0ZS5oIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vbmV0d29yay9jdXJsL1Jlc291cmNlSGFuZGxlQ3VybERlbGVnYXRlLmgK
aW5kZXggOTU1ZDFmNTQ2NGYuLmMyNTI1OTA3MWVkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9uZXR3b3JrL2N1cmwvUmVzb3VyY2VIYW5kbGVDdXJsRGVsZWdhdGUuaAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2N1cmwvUmVzb3VyY2VIYW5kbGVDdXJs
RGVsZWdhdGUuaApAQCAtMjksMjQgKzI5LDE3IEBACiAjaWYgVVNFKENVUkwpCiAKICNpbmNsdWRl
ICJDcmVkZW50aWFsLmgiCi0jaW5jbHVkZSAiQ3VybEpvYk1hbmFnZXIuaCIKLSNpbmNsdWRlICJD
dXJsUmVzcG9uc2UuaCIKLSNpbmNsdWRlICJDdXJsU1NMVmVyaWZpZXIuaCIKLSNpbmNsdWRlICJG
b3JtRGF0YVN0cmVhbUN1cmwuaCIKKyNpbmNsdWRlICJDdXJsUmVxdWVzdERlbGVnYXRlLmgiCiAj
aW5jbHVkZSAiUmVzb3VyY2VSZXF1ZXN0LmgiCi0jaW5jbHVkZSAiUmVzb3VyY2VSZXNwb25zZS5o
IgotI2luY2x1ZGUgPHd0Zi9Db25kaXRpb24uaD4KLSNpbmNsdWRlIDx3dGYvVGhyZWFkU2FmZVJl
ZkNvdW50ZWQuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCitjbGFzcyBDdXJsUmVxdWVzdDsK
IGNsYXNzIE11bHRpcGFydEhhbmRsZTsKLWNsYXNzIFByb3RlY3Rpb25TcGFjZTsKLWNsYXNzIFJl
c291cmNlRXJyb3I7CiBjbGFzcyBSZXNvdXJjZUhhbmRsZTsKLWNsYXNzIFNoYXJlZEJ1ZmZlcjsK
K2NsYXNzIFJlc291cmNlUmVzcG9uc2U7CiAKLWNsYXNzIFJlc291cmNlSGFuZGxlQ3VybERlbGVn
YXRlIGZpbmFsIDogcHVibGljIFRocmVhZFNhZmVSZWZDb3VudGVkPFJlc291cmNlSGFuZGxlQ3Vy
bERlbGVnYXRlPiwgcHVibGljIEN1cmxKb2JDbGllbnQgeworY2xhc3MgUmVzb3VyY2VIYW5kbGVD
dXJsRGVsZWdhdGUgZmluYWwgOiBwdWJsaWMgVGhyZWFkU2FmZVJlZkNvdW50ZWQ8UmVzb3VyY2VI
YW5kbGVDdXJsRGVsZWdhdGU+LCBwdWJsaWMgQ3VybFJlcXVlc3REZWxlZ2F0ZSB7CiBwdWJsaWM6
CiAgICAgUmVzb3VyY2VIYW5kbGVDdXJsRGVsZWdhdGUoUmVzb3VyY2VIYW5kbGUqKTsKICAgICB+
UmVzb3VyY2VIYW5kbGVDdXJsRGVsZWdhdGUoKTsKQEAgLTU0LDcgKzQ3LDcgQEAgcHVibGljOgog
ICAgIGJvb2wgaGFzSGFuZGxlKCkgY29uc3Q7CiAgICAgdm9pZCByZWxlYXNlSGFuZGxlKCk7CiAK
LSAgICBib29sIHN0YXJ0KCkgeyBzdGFydChmYWxzZSk7IHJldHVybiB0cnVlOyB9CisgICAgYm9v
bCBzdGFydCgpOwogICAgIHZvaWQgY2FuY2VsKCk7CiAKICAgICB2b2lkIHNldERlZmVyc0xvYWRp
bmcoYm9vbCk7CkBAIC02Myw3MyArNTYsMzUgQEAgcHVibGljOgogICAgIHZvaWQgZGlzcGF0Y2hT
eW5jaHJvbm91c0pvYigpOwogCiBwcml2YXRlOgotICAgIHZvaWQgcmV0YWluKCkgb3ZlcnJpZGU7
Ci0gICAgdm9pZCByZWxlYXNlKCkgb3ZlcnJpZGU7Ci0KLSAgICBDVVJMKiBoYW5kbGUoKSBvdmVy
cmlkZSB7IHJldHVybiBtX2N1cmxIYW5kbGUgPyBtX2N1cmxIYW5kbGUtPmhhbmRsZSgpIDogbnVs
bHB0cjsgfQotICAgIENVUkwqIHNldHVwVHJhbnNmZXIoKSBvdmVycmlkZTsKLSAgICB2b2lkIGRp
ZENvbXBsZXRlVHJhbnNmZXIoQ1VSTGNvZGUpIG92ZXJyaWRlOwotICAgIHZvaWQgZGlkQ2FuY2Vs
VHJhbnNmZXIoKSBvdmVycmlkZTsKLQogICAgIC8vIENhbGxlZCBmcm9tIG1haW4gdGhyZWFkLgog
ICAgIFJlc291cmNlUmVzcG9uc2UmIHJlc3BvbnNlKCk7CiAKLSAgICB2b2lkIHN0YXJ0KGJvb2wg
aXNTeW5jUmVxdWVzdCk7Ci0KLSAgICB2b2lkIHNldHVwQXV0aGVudGljYXRpb24oKTsKKyAgICBz
dGQ6OnBhaXI8U3RyaW5nLCBTdHJpbmc+IGdldENyZWRlbnRpYWwoUmVzb3VyY2VSZXF1ZXN0Jiwg
Ym9vbCk7CiAKLSAgICB2b2lkIGRpZFJlY2VpdmVBbGxIZWFkZXJzKGNvbnN0IEN1cmxSZXNwb25z
ZSYpOwotICAgIHZvaWQgZGlkUmVjZWl2ZUNvbnRlbnREYXRhKFJlZjxTaGFyZWRCdWZmZXI+JiYp
OwotICAgIHZvaWQgaGFuZGxlTG9jYWxSZWNlaXZlUmVzcG9uc2UoKTsKLSAgICB2b2lkIHByZXBh
cmVTZW5kRGF0YShjaGFyKiwgc2l6ZV90IGJsb2NrU2l6ZSwgc2l6ZV90IG51bWJlck9mQmxvY2tz
KTsKKyAgICBib29sIGNhbmNlbGxlZE9yQ2xpZW50bGVzcygpOwogCi0gICAgdm9pZCBkaWRGaW5p
c2goTmV0d29ya0xvYWRNZXRyaWNzKTsKLSAgICB2b2lkIGRpZEZhaWwoY29uc3QgUmVzb3VyY2VF
cnJvciYpOworICAgIFJlZlB0cjxDdXJsUmVxdWVzdD4gY3JlYXRlQ3VybFJlcXVlc3QoUmVzb3Vy
Y2VSZXF1ZXN0Jik7CisgICAgdm9pZCBjdXJsRGlkUmVjZWl2ZVJlc3BvbnNlKGNvbnN0IEN1cmxS
ZXNwb25zZSYpIG92ZXJyaWRlOworICAgIHZvaWQgY3VybERpZFJlY2VpdmVCdWZmZXIoUmVmPFNo
YXJlZEJ1ZmZlcj4mJikgb3ZlcnJpZGU7CisgICAgdm9pZCBjdXJsRGlkQ29tcGxldGUoKSBvdmVy
cmlkZTsKKyAgICB2b2lkIGN1cmxEaWRGYWlsV2l0aEVycm9yKGNvbnN0IFJlc291cmNlRXJyb3Im
KSBvdmVycmlkZTsKIAogICAgIHZvaWQgaGFuZGxlRGF0YVVSTCgpOwogCi0gICAgLy8gQ2FsbGVk
IGZyb20gd29ya2VyIHRocmVhZC4KLSAgICB2b2lkIHNldHVwUE9TVCgpOwotICAgIHZvaWQgc2V0
dXBQVVQoKTsKLSAgICBzaXplX3QgZ2V0Rm9ybUVsZW1lbnRzQ291bnQoKTsKLSAgICB2b2lkIHNl
dHVwRm9ybURhdGEoYm9vbCk7Ci0gICAgdm9pZCBhcHBseUF1dGhlbnRpY2F0aW9uKCk7Ci0gICAg
TmV0d29ya0xvYWRNZXRyaWNzIGdldE5ldHdvcmtMb2FkTWV0cmljcygpOwotCi0gICAgQ1VSTGNv
ZGUgd2lsbFNldHVwU3NsQ3R4KHZvaWQqKTsKLSAgICBzaXplX3QgZGlkUmVjZWl2ZUhlYWRlcihT
dHJpbmcmJik7Ci0gICAgc2l6ZV90IGRpZFJlY2VpdmVEYXRhKFJlZjxTaGFyZWRCdWZmZXI+JiYp
OwotICAgIHNpemVfdCB3aWxsU2VuZERhdGEoY2hhciosIHNpemVfdCBibG9ja1NpemUsIHNpemVf
dCBudW1iZXJPZkJsb2Nrcyk7Ci0KLSAgICBzdGF0aWMgQ1VSTGNvZGUgd2lsbFNldHVwU3NsQ3R4
Q2FsbGJhY2soQ1VSTCosIHZvaWQqLCB2b2lkKik7Ci0gICAgc3RhdGljIHNpemVfdCBkaWRSZWNl
aXZlSGVhZGVyQ2FsbGJhY2soY2hhciosIHNpemVfdCBibG9ja1NpemUsIHNpemVfdCBudW1iZXJP
ZkJsb2Nrcywgdm9pZCopOwotICAgIHN0YXRpYyBzaXplX3QgZGlkUmVjZWl2ZURhdGFDYWxsYmFj
ayhjaGFyKiwgc2l6ZV90IGJsb2NrU2l6ZSwgc2l6ZV90IG51bWJlck9mQmxvY2tzLCB2b2lkKik7
Ci0gICAgc3RhdGljIHNpemVfdCB3aWxsU2VuZERhdGFDYWxsYmFjayhjaGFyKiwgc2l6ZV90IGJs
b2NrU2l6ZSwgc2l6ZV90IG51bWJlck9mQmxvY2tzLCB2b2lkKik7Ci0KICAgICAvLyBVc2VkIGJ5
IG1haW4gdGhyZWFkLgogICAgIFJlc291cmNlSGFuZGxlKiBtX2hhbmRsZTsKLSAgICBzdGQ6OnVu
aXF1ZV9wdHI8Rm9ybURhdGFTdHJlYW0+IG1fZm9ybURhdGFTdHJlYW07CiAgICAgc3RkOjp1bmlx
dWVfcHRyPE11bHRpcGFydEhhbmRsZT4gbV9tdWx0aXBhcnRIYW5kbGU7Ci0gICAgdW5zaWduZWQg
c2hvcnQgbV9hdXRoRmFpbHVyZUNvdW50IHsgMCB9OworICAgIHVuc2lnbmVkIG1fYXV0aEZhaWx1
cmVDb3VudCB7IDAgfTsKICAgICAvLyBVc2VkIGJ5IHdvcmtlciB0aHJlYWQuCiAgICAgUmVzb3Vy
Y2VSZXF1ZXN0IG1fZmlyc3RSZXF1ZXN0OwotICAgIEhUVFBIZWFkZXJNYXAgbV9jdXN0b21IVFRQ
SGVhZGVyRmllbGRzOworICAgIFJlc291cmNlUmVxdWVzdCBtX2N1cnJlbnRSZXF1ZXN0OwogICAg
IGJvb2wgbV9zaG91bGRVc2VDcmVkZW50aWFsU3RvcmFnZTsKICAgICBTdHJpbmcgbV91c2VyOwog
ICAgIFN0cmluZyBtX3Bhc3M7CiAgICAgQ3JlZGVudGlhbCBtX2luaXRpYWxDcmVkZW50aWFsOwog
ICAgIGJvb2wgbV9kZWZlcnNMb2FkaW5nOwogICAgIGJvb2wgbV9hZGRlZENhY2hlVmFsaWRhdGlv
bkhlYWRlcnMgeyBmYWxzZSB9OwotICAgIFZlY3RvcjxjaGFyPiBtX3Bvc3RCeXRlczsKLSAgICBz
dGQ6OnVuaXF1ZV9wdHI8Q3VybEhhbmRsZT4gbV9jdXJsSGFuZGxlOwotICAgIEN1cmxTU0xWZXJp
ZmllciBtX3NzbFZlcmlmaWVyOwotICAgIEN1cmxSZXNwb25zZSBtX3Jlc3BvbnNlOwotICAgIGJv
b2wgbV9kaWROb3RpZnlSZXNwb25zZSB7IGZhbHNlIH07Ci0gICAgLy8gVXNlZCBieSBib3RoIHRo
cmVhZHMuCi0gICAgYm9vbCBtX2lzU3luY1JlcXVlc3QgeyBmYWxzZSB9OwotICAgIENvbmRpdGlv
biBtX3dvcmtlclRocmVhZENvbmRpdGlvblZhcmlhYmxlOwotICAgIExvY2sgbV93b3JrZXJUaHJl
YWRNdXRleDsKLSAgICBzaXplX3QgbV9zZW5kQnl0ZXMgeyAwIH07CisgICAgUmVmUHRyPEN1cmxS
ZXF1ZXN0PiBtX2N1cmxSZXF1ZXN0OwogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>321866</attachid>
            <date>2017-09-26 14:09:46 -0700</date>
            <delta_ts>2017-09-29 14:19:36 -0700</delta_ts>
            <desc>patch</desc>
            <filename>175148-1.diff</filename>
            <type>text/plain</type>
            <size>68577</size>
            <attacher name="Basuke Suzuki">basuke</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCBlMWU5NjM3NjdlZC4uM2M2NzI5NGY5NTMgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKQEAgLTEs
NSArMSw5NyBAQAogMjAxNy0wOS0yNiAgQmFzdWtlIFN1enVraSAgPEJhc3VrZS5TdXp1a2lAc29u
eS5jb20+CiAKKyAgICAgICAgW0N1cmxdIEV4dHJhY3QgYSBmZWF0dXJlcyB0byBtYW5hZ2UgSFRU
UCBjb21tdW5pY2F0aW9uIGZyb20gUmVzb3VyY2VIYW5kbGUKKyAgICAgICAgaHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE3NTE0OAorCisgICAgICAgIFJldmlld2VkIGJ5
IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogcGxhdGZvcm0vQ3VybC5jbWFrZToKKyAgICAg
ICAgKiBwbGF0Zm9ybS9uZXR3b3JrL2N1cmwvQ3VybFJlcXVlc3QuY3BwOiBBZGRlZC4KKyAgICAg
ICAgKFdlYkNvcmU6OkN1cmxSZXF1ZXN0OjpDdXJsUmVxdWVzdCk6CisgICAgICAgIChXZWJDb3Jl
OjpDdXJsUmVxdWVzdDo6c2V0VXNlclBhc3MpOgorICAgICAgICAoV2ViQ29yZTo6Q3VybFJlcXVl
c3Q6OnN0YXJ0KToKKyAgICAgICAgKFdlYkNvcmU6OkN1cmxSZXF1ZXN0OjpzdGFydFdpdGhKb2JN
YW5hZ2VyKToKKyAgICAgICAgKFdlYkNvcmU6OkN1cmxSZXF1ZXN0OjpjYW5jZWwpOgorICAgICAg
ICAoV2ViQ29yZTo6Q3VybFJlcXVlc3Q6OnN1c3BlbmQpOgorICAgICAgICAoV2ViQ29yZTo6Q3Vy
bFJlcXVlc3Q6OnJlc3VtZSk6CisgICAgICAgIChXZWJDb3JlOjpDdXJsUmVxdWVzdDo6Y2FsbERl
bGVnYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkN1cmxSZXF1ZXN0OjpzZXR1cFRyYW5zZmVyKToK
KyAgICAgICAgKFdlYkNvcmU6OkN1cmxSZXF1ZXN0Ojp3aWxsU2V0dXBTc2xDdHgpOgorICAgICAg
ICAoV2ViQ29yZTo6Q3VybFJlcXVlc3Q6OndpbGxTZW5kRGF0YSk6CisgICAgICAgIChXZWJDb3Jl
OjpDdXJsUmVxdWVzdDo6ZGlkUmVjZWl2ZUhlYWRlcik6CisgICAgICAgIChXZWJDb3JlOjpDdXJs
UmVxdWVzdDo6ZGlkUmVjZWl2ZURhdGEpOgorICAgICAgICAoV2ViQ29yZTo6Q3VybFJlcXVlc3Q6
OmRpZENvbXBsZXRlVHJhbnNmZXIpOgorICAgICAgICAoV2ViQ29yZTo6Q3VybFJlcXVlc3Q6OmRp
ZENhbmNlbFRyYW5zZmVyKToKKyAgICAgICAgKFdlYkNvcmU6OkN1cmxSZXF1ZXN0OjpyZXNvbHZl
QmxvYlJlZmVyZW5jZXMpOgorICAgICAgICAoV2ViQ29yZTo6Q3VybFJlcXVlc3Q6OnNldHVwUFVU
KToKKyAgICAgICAgKFdlYkNvcmU6OkN1cmxSZXF1ZXN0OjpzZXR1cFBPU1QpOgorICAgICAgICAo
V2ViQ29yZTo6Q3VybFJlcXVlc3Q6OnNldHVwRm9ybURhdGEpOgorICAgICAgICAoV2ViQ29yZTo6
Q3VybFJlcXVlc3Q6Omludm9rZURpZFJlY2VpdmVSZXNwb25zZUZvckZpbGUpOgorICAgICAgICAo
V2ViQ29yZTo6Q3VybFJlcXVlc3Q6Omludm9rZURpZFJlY2VpdmVSZXNwb25zZSk6CisgICAgICAg
IChXZWJDb3JlOjpDdXJsUmVxdWVzdDo6c2V0UGF1c2VkKToKKyAgICAgICAgKFdlYkNvcmU6OkN1
cmxSZXF1ZXN0Ojp3aWxsU2V0dXBTc2xDdHhDYWxsYmFjayk6CisgICAgICAgIChXZWJDb3JlOjpD
dXJsUmVxdWVzdDo6d2lsbFNlbmREYXRhQ2FsbGJhY2spOgorICAgICAgICAoV2ViQ29yZTo6Q3Vy
bFJlcXVlc3Q6OmRpZFJlY2VpdmVIZWFkZXJDYWxsYmFjayk6CisgICAgICAgIChXZWJDb3JlOjpD
dXJsUmVxdWVzdDo6ZGlkUmVjZWl2ZURhdGFDYWxsYmFjayk6CisgICAgICAgICogcGxhdGZvcm0v
bmV0d29yay9jdXJsL0N1cmxSZXF1ZXN0Lmg6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6Q3Vy
bFJlcXVlc3Q6On5DdXJsUmVxdWVzdCk6CisgICAgICAgIChXZWJDb3JlOjpDdXJsUmVxdWVzdDo6
c2V0RGVsZWdhdGUpOgorICAgICAgICAoV2ViQ29yZTo6Q3VybFJlcXVlc3Q6OmlzU3luY1JlcXVl
c3QpOgorICAgICAgICAoV2ViQ29yZTo6Q3VybFJlcXVlc3Q6OmdldE5ldHdvcmtMb2FkTWV0cmlj
cyk6CisgICAgICAgICogcGxhdGZvcm0vbmV0d29yay9jdXJsL0N1cmxSZXF1ZXN0RGVsZWdhdGUu
aDogQWRkZWQuCisgICAgICAgICogcGxhdGZvcm0vbmV0d29yay9jdXJsL1Jlc291cmNlSGFuZGxl
Q3VybC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZXNvdXJjZUhhbmRsZTo6Y2FuY2VsKToKKyAg
ICAgICAgKFdlYkNvcmU6OlJlc291cmNlSGFuZGxlOjpwbGF0Zm9ybVNldERlZmVyc0xvYWRpbmcp
OgorICAgICAgICAoV2ViQ29yZTo6UmVzb3VyY2VIYW5kbGU6OmRpZFJlY2VpdmVBdXRoZW50aWNh
dGlvbkNoYWxsZW5nZSk6CisgICAgICAgIChXZWJDb3JlOjpSZXNvdXJjZUhhbmRsZTo6cmVjZWl2
ZWRDcmVkZW50aWFsKToKKyAgICAgICAgKFdlYkNvcmU6OlJlc291cmNlSGFuZGxlOjpyZWNlaXZl
ZFJlcXVlc3RUb0NvbnRpbnVlV2l0aG91dENyZWRlbnRpYWwpOgorICAgICAgICAoV2ViQ29yZTo6
UmVzb3VyY2VIYW5kbGU6OnJlY2VpdmVkQ2FuY2VsbGF0aW9uKToKKyAgICAgICAgKiBwbGF0Zm9y
bS9uZXR3b3JrL2N1cmwvUmVzb3VyY2VIYW5kbGVDdXJsRGVsZWdhdGUuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6UmVzb3VyY2VIYW5kbGVDdXJsRGVsZWdhdGU6OlJlc291cmNlSGFuZGxlQ3VybERl
bGVnYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OlJlc291cmNlSGFuZGxlQ3VybERlbGVnYXRlOjp+
UmVzb3VyY2VIYW5kbGVDdXJsRGVsZWdhdGUpOgorICAgICAgICAoV2ViQ29yZTo6UmVzb3VyY2VI
YW5kbGVDdXJsRGVsZWdhdGU6OnN0YXJ0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlc291cmNlSGFu
ZGxlQ3VybERlbGVnYXRlOjpjYW5jZWwpOgorICAgICAgICAoV2ViQ29yZTo6UmVzb3VyY2VIYW5k
bGVDdXJsRGVsZWdhdGU6OnNldERlZmVyc0xvYWRpbmcpOgorICAgICAgICAoV2ViQ29yZTo6UmVz
b3VyY2VIYW5kbGVDdXJsRGVsZWdhdGU6OnNldEF1dGhlbnRpY2F0aW9uKToKKyAgICAgICAgKFdl
YkNvcmU6OlJlc291cmNlSGFuZGxlQ3VybERlbGVnYXRlOjpkaXNwYXRjaFN5bmNocm9ub3VzSm9i
KToKKyAgICAgICAgKFdlYkNvcmU6OlJlc291cmNlSGFuZGxlQ3VybERlbGVnYXRlOjpjcmVhdGVD
dXJsUmVxdWVzdCk6CisgICAgICAgIChXZWJDb3JlOjpSZXNvdXJjZUhhbmRsZUN1cmxEZWxlZ2F0
ZTo6Y2FuY2VsbGVkT3JDbGllbnRsZXNzKToKKyAgICAgICAgKFdlYkNvcmU6OlJlc291cmNlSGFu
ZGxlQ3VybERlbGVnYXRlOjpjdXJsRGlkUmVjZWl2ZVJlc3BvbnNlKToKKyAgICAgICAgKFdlYkNv
cmU6OlJlc291cmNlSGFuZGxlQ3VybERlbGVnYXRlOjpjdXJsRGlkUmVjZWl2ZUJ1ZmZlcik6Cisg
ICAgICAgIChXZWJDb3JlOjpSZXNvdXJjZUhhbmRsZUN1cmxEZWxlZ2F0ZTo6Y3VybERpZENvbXBs
ZXRlKToKKyAgICAgICAgKFdlYkNvcmU6OlJlc291cmNlSGFuZGxlQ3VybERlbGVnYXRlOjpjdXJs
RGlkRmFpbFdpdGhFcnJvcik6CisgICAgICAgIChXZWJDb3JlOjpSZXNvdXJjZUhhbmRsZUN1cmxE
ZWxlZ2F0ZTo6cmVzcG9uc2UpOgorICAgICAgICAoV2ViQ29yZTo6UmVzb3VyY2VIYW5kbGVDdXJs
RGVsZWdhdGU6OmdldENyZWRlbnRpYWwpOgorICAgICAgICAoV2ViQ29yZTo6UmVzb3VyY2VIYW5k
bGVDdXJsRGVsZWdhdGU6OnJldGFpbik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpSZXNv
dXJjZUhhbmRsZUN1cmxEZWxlZ2F0ZTo6cmVsZWFzZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJD
b3JlOjpSZXNvdXJjZUhhbmRsZUN1cmxEZWxlZ2F0ZTo6c2V0dXBUcmFuc2Zlcik6IERlbGV0ZWQu
CisgICAgICAgIChXZWJDb3JlOjpSZXNvdXJjZUhhbmRsZUN1cmxEZWxlZ2F0ZTo6ZGlkQ29tcGxl
dGVUcmFuc2Zlcik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpSZXNvdXJjZUhhbmRsZUN1
cmxEZWxlZ2F0ZTo6ZGlkQ2FuY2VsVHJhbnNmZXIpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29y
ZTo6UmVzb3VyY2VIYW5kbGVDdXJsRGVsZWdhdGU6OnNldHVwQXV0aGVudGljYXRpb24pOiBEZWxl
dGVkLgorICAgICAgICAoV2ViQ29yZTo6UmVzb3VyY2VIYW5kbGVDdXJsRGVsZWdhdGU6OmRpZFJl
Y2VpdmVBbGxIZWFkZXJzKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlJlc291cmNlSGFu
ZGxlQ3VybERlbGVnYXRlOjpkaWRSZWNlaXZlQ29udGVudERhdGEpOiBEZWxldGVkLgorICAgICAg
ICAoV2ViQ29yZTo6UmVzb3VyY2VIYW5kbGVDdXJsRGVsZWdhdGU6OmhhbmRsZUxvY2FsUmVjZWl2
ZVJlc3BvbnNlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlJlc291cmNlSGFuZGxlQ3Vy
bERlbGVnYXRlOjpwcmVwYXJlU2VuZERhdGEpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6
UmVzb3VyY2VIYW5kbGVDdXJsRGVsZWdhdGU6OmRpZEZpbmlzaCk6IERlbGV0ZWQuCisgICAgICAg
IChXZWJDb3JlOjpSZXNvdXJjZUhhbmRsZUN1cmxEZWxlZ2F0ZTo6ZGlkRmFpbCk6IERlbGV0ZWQu
CisgICAgICAgIChXZWJDb3JlOjpSZXNvdXJjZUhhbmRsZUN1cmxEZWxlZ2F0ZTo6c2V0dXBQT1NU
KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlJlc291cmNlSGFuZGxlQ3VybERlbGVnYXRl
OjpzZXR1cFBVVCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpSZXNvdXJjZUhhbmRsZUN1
cmxEZWxlZ2F0ZTo6Z2V0Rm9ybUVsZW1lbnRzQ291bnQpOiBEZWxldGVkLgorICAgICAgICAoV2Vi
Q29yZTo6UmVzb3VyY2VIYW5kbGVDdXJsRGVsZWdhdGU6OnNldHVwRm9ybURhdGEpOiBEZWxldGVk
LgorICAgICAgICAoV2ViQ29yZTo6UmVzb3VyY2VIYW5kbGVDdXJsRGVsZWdhdGU6OmFwcGx5QXV0
aGVudGljYXRpb24pOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6UmVzb3VyY2VIYW5kbGVD
dXJsRGVsZWdhdGU6OmdldE5ldHdvcmtMb2FkTWV0cmljcyk6IERlbGV0ZWQuCisgICAgICAgIChX
ZWJDb3JlOjpSZXNvdXJjZUhhbmRsZUN1cmxEZWxlZ2F0ZTo6d2lsbFNldHVwU3NsQ3R4KTogRGVs
ZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlJlc291cmNlSGFuZGxlQ3VybERlbGVnYXRlOjpkaWRS
ZWNlaXZlSGVhZGVyKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlJlc291cmNlSGFuZGxl
Q3VybERlbGVnYXRlOjpkaWRSZWNlaXZlRGF0YSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3Jl
OjpSZXNvdXJjZUhhbmRsZUN1cmxEZWxlZ2F0ZTo6d2lsbFNlbmREYXRhKTogRGVsZXRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OlJlc291cmNlSGFuZGxlQ3VybERlbGVnYXRlOjp3aWxsU2V0dXBTc2xD
dHhDYWxsYmFjayk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpSZXNvdXJjZUhhbmRsZUN1
cmxEZWxlZ2F0ZTo6ZGlkUmVjZWl2ZUhlYWRlckNhbGxiYWNrKTogRGVsZXRlZC4KKyAgICAgICAg
KFdlYkNvcmU6OlJlc291cmNlSGFuZGxlQ3VybERlbGVnYXRlOjpkaWRSZWNlaXZlRGF0YUNhbGxi
YWNrKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlJlc291cmNlSGFuZGxlQ3VybERlbGVn
YXRlOjp3aWxsU2VuZERhdGFDYWxsYmFjayk6IERlbGV0ZWQuCisgICAgICAgICogcGxhdGZvcm0v
bmV0d29yay9jdXJsL1Jlc291cmNlSGFuZGxlQ3VybERlbGVnYXRlLmg6CisKKzIwMTctMDktMjYg
IEJhc3VrZSBTdXp1a2kgIDxCYXN1a2UuU3V6dWtpQHNvbnkuY29tPgorCiAgICAgICAgIFtDdXJs
XSBJbnRyb2R1Y2UgQ3VybFJlc3BvbnNlIHRvIGhvbGQgcmVzcG9uc2UgaW5mb3JtYXRpb24gYW1v
bmcgdGhyZWFkcy4KICAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTE3NzQ5NgogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9DdXJsLmNt
YWtlIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vQ3VybC5jbWFrZQppbmRleCAwZjIzNmIxZGI1
Mi4uN2E4MzJlZGY0ZjYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL0N1cmwu
Y21ha2UKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vQ3VybC5jbWFrZQpAQCAtMTEsNiAr
MTEsNyBAQCBsaXN0KEFQUEVORCBXZWJDb3JlX1NPVVJDRVMKICAgICBwbGF0Zm9ybS9uZXR3b3Jr
L2N1cmwvQ3VybENvbnRleHQuY3BwCiAgICAgcGxhdGZvcm0vbmV0d29yay9jdXJsL0N1cmxEb3du
bG9hZC5jcHAKICAgICBwbGF0Zm9ybS9uZXR3b3JrL2N1cmwvQ3VybEpvYk1hbmFnZXIuY3BwCisg
ICAgcGxhdGZvcm0vbmV0d29yay9jdXJsL0N1cmxSZXF1ZXN0LmNwcAogICAgIHBsYXRmb3JtL25l
dHdvcmsvY3VybC9DdXJsU1NMSGFuZGxlLmNwcAogICAgIHBsYXRmb3JtL25ldHdvcmsvY3VybC9D
dXJsU1NMVmVyaWZpZXIuY3BwCiAgICAgcGxhdGZvcm0vbmV0d29yay9jdXJsL0ROU0N1cmwuY3Bw
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2N1cmwvQ3VybFJl
cXVlc3QuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9jdXJsL0N1cmxSZXF1
ZXN0LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uYWQ0MjVmMGIx
YzMKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2N1
cmwvQ3VybFJlcXVlc3QuY3BwCkBAIC0wLDAgKzEsNTM3IEBACisvKgorICogQ29weXJpZ2h0IChD
KSAyMDE3IFNvbnkgSW50ZXJhY3RpdmUgRW50ZXJ0YWlubWVudCBJbmMuCisgKgorICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAK
KyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRS
SUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJ
VFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7
IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisj
aW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiQ3VybFJlcXVlc3QuaCIKKworI2lmIFVTRShD
VVJMKQorCisjaW5jbHVkZSAiQ3VybFJlcXVlc3REZWxlZ2F0ZS5oIgorI2luY2x1ZGUgIk1JTUVU
eXBlUmVnaXN0cnkuaCIKKyNpbmNsdWRlICJSZXNvdXJjZUVycm9yLmgiCisjaW5jbHVkZSAiU2hh
cmVkQnVmZmVyLmgiCisjaW5jbHVkZSA8d3RmL01haW5UaHJlYWQuaD4KKworbmFtZXNwYWNlIFdl
YkNvcmUgeworCitDdXJsUmVxdWVzdDo6Q3VybFJlcXVlc3QoY29uc3QgUmVzb3VyY2VSZXF1ZXN0
JnJlcXVlc3QsIEN1cmxSZXF1ZXN0RGVsZWdhdGUqIGRlbGVnYXRlLCBib29sIHNob3VsZFN1c3Bl
bmQpCisgICAgOiBtX3JlcXVlc3QocmVxdWVzdC5pc29sYXRlZENvcHkoKSkKKyAgICAsIG1fc2hv
dWxkU3VzcGVuZChzaG91bGRTdXNwZW5kKQoreworICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7
CisKKyAgICBzZXREZWxlZ2F0ZShkZWxlZ2F0ZSk7CisgICAgcmVzb2x2ZUJsb2JSZWZlcmVuY2Vz
KG1fcmVxdWVzdCk7Cit9CisKK3ZvaWQgQ3VybFJlcXVlc3Q6OnNldFVzZXJQYXNzKGNvbnN0IFN0
cmluZyYgdXNlciwgY29uc3QgU3RyaW5nJiBwYXNzd29yZCkKK3sKKyAgICBBU1NFUlQoaXNNYWlu
VGhyZWFkKCkpOworCisgICAgbV91c2VyID0gdXNlci5pc29sYXRlZENvcHkoKTsKKyAgICBtX3Bh
c3N3b3JkID0gdXNlci5pc29sYXRlZENvcHkoKTsKK30KKwordm9pZCBDdXJsUmVxdWVzdDo6c3Rh
cnQoYm9vbCBpc1N5bmNSZXF1ZXN0KQoreworICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7CisK
KyAgICBtX2lzU3luY1JlcXVlc3QgPSBpc1N5bmNSZXF1ZXN0OworCisgICAgYXV0byB1cmwgPSBt
X3JlcXVlc3QudXJsKCkuaXNvbGF0ZWRDb3B5KCk7CisKKyAgICBpZiAoIW1faXNTeW5jUmVxdWVz
dCkgeworICAgICAgICAvLyBGb3IgYXN5bmNocm9ub3VzLCB1c2UgQ3VybEpvYk1hbmFnZXIuIEN1
cmwgcHJvY2Vzc2VzIHJ1bnMgb24gc3ViIHRocmVhZC4KKyAgICAgICAgaWYgKHVybC5pc0xvY2Fs
RmlsZSgpKQorICAgICAgICAgICAgaW52b2tlRGlkUmVjZWl2ZVJlc3BvbnNlRm9yRmlsZSh1cmwp
OworCisgICAgICAgIHN0YXJ0V2l0aEpvYk1hbmFnZXIoKTsKKyAgICB9IGVsc2UgeworICAgICAg
ICAvLyBGb3Igc3luY2hyb25vdXMsIGRvZXMgbm90IHVzZSBDdXJsSm9iTWFuYWdlci4gQ3VybCBw
cm9jZXNzZXMgcnVucyBvbiBtYWluIHRocmVhZC4KKyAgICAgICAgLy8gY3VybF9lYXN5X3BlcmZv
cm0gYmxvY2tzIHVudGlsIHRoZSB0cmFuc2ZlciBpcyBmaW5pc2hlZC4KKyAgICAgICAgcmV0YWlu
KCk7CisgICAgICAgIGlmICh1cmwuaXNMb2NhbEZpbGUoKSkKKyAgICAgICAgICAgIGludm9rZURp
ZFJlY2VpdmVSZXNwb25zZUZvckZpbGUodXJsKTsKKworICAgICAgICBzZXR1cFRyYW5zZmVyKCk7
CisgICAgICAgIENVUkxjb2RlIHJlc3VsdENvZGUgPSBtX2N1cmxIYW5kbGUtPnBlcmZvcm0oKTsK
KyAgICAgICAgZGlkQ29tcGxldGVUcmFuc2ZlcihyZXN1bHRDb2RlKTsKKyAgICAgICAgcmVsZWFz
ZSgpOworICAgIH0KK30KKwordm9pZCBDdXJsUmVxdWVzdDo6c3RhcnRXaXRoSm9iTWFuYWdlcigp
Cit7CisgICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKKworICAgIEN1cmxKb2JNYW5hZ2VyOjpz
aW5nbGV0b24oKS5hZGQodGhpcyk7Cit9CisKK3ZvaWQgQ3VybFJlcXVlc3Q6OmNhbmNlbCgpCit7
CisgICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKKworICAgIGlmIChtX2NhbmNlbGxlZCkKKyAg
ICAgICAgcmV0dXJuOworCisgICAgbV9jYW5jZWxsZWQgPSB0cnVlOworCisgICAgaWYgKCFtX2lz
U3luY1JlcXVlc3QpCisgICAgICAgIEN1cmxKb2JNYW5hZ2VyOjpzaW5nbGV0b24oKS5jYW5jZWwo
dGhpcyk7CisKKyAgICBzZXRQYXVzZWQoZmFsc2UpOworfQorCit2b2lkIEN1cmxSZXF1ZXN0Ojpz
dXNwZW5kKCkKK3sKKyAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOworCisgICAgc2V0UGF1c2Vk
KHRydWUpOworfQorCit2b2lkIEN1cmxSZXF1ZXN0OjpyZXN1bWUoKQoreworICAgIEFTU0VSVChp
c01haW5UaHJlYWQoKSk7CisKKyAgICBzZXRQYXVzZWQoZmFsc2UpOworfQorCisvKiBgdGhpc2Ag
aXMgcHJvdGVjdGVkIGluc2lkZSB0aGlzIG1ldGhvZC4gKi8KK3ZvaWQgQ3VybFJlcXVlc3Q6OmNh
bGxEZWxlZ2F0ZShXVEY6OkZ1bmN0aW9uPHZvaWQoQ3VybFJlcXVlc3REZWxlZ2F0ZSopPiB0YXNr
KQoreworICAgIGlmIChpc01haW5UaHJlYWQoKSkgeworICAgICAgICBpZiAoQ3VybFJlcXVlc3RE
ZWxlZ2F0ZSogZGVsZWdhdGUgPSBtX2RlbGVnYXRlKQorICAgICAgICAgICAgdGFzayhkZWxlZ2F0
ZSk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgY2FsbE9uTWFpblRocmVhZChbcHJvdGVjdGVkVGhp
cyA9IG1ha2VSZWYoKnRoaXMpLCB0YXNrID0gV1RGTW92ZSh0YXNrKV0oKSBtdXRhYmxlIHsKKyAg
ICAgICAgICAgIGlmIChDdXJsUmVxdWVzdERlbGVnYXRlKiBkZWxlZ2F0ZSA9IHByb3RlY3RlZFRo
aXMtPm1fZGVsZWdhdGUpCisgICAgICAgICAgICAgICAgdGFzayhkZWxlZ2F0ZSk7CisgICAgICAg
IH0pOworICAgIH0KK30KKworQ1VSTCogQ3VybFJlcXVlc3Q6OnNldHVwVHJhbnNmZXIoKQorewor
ICAgIGF1dG8mIHNzbEhhbmRsZSA9IEN1cmxDb250ZXh0OjpzaW5nbGV0b24oKS5zc2xIYW5kbGUo
KTsKKworICAgIG1fY3VybEhhbmRsZSA9IHN0ZDo6bWFrZV91bmlxdWU8Q3VybEhhbmRsZT4oKTsK
KworICAgIG1fY3VybEhhbmRsZS0+aW5pdGlhbGl6ZSgpOworICAgIG1fY3VybEhhbmRsZS0+c2V0
VXJsKG1fcmVxdWVzdC51cmwoKSk7CisgICAgbV9jdXJsSGFuZGxlLT5hcHBlbmRSZXF1ZXN0SGVh
ZGVycyhtX3JlcXVlc3QuaHR0cEhlYWRlckZpZWxkcygpKTsKKworICAgIGF1dG8gbWV0aG9kID0g
bV9yZXF1ZXN0Lmh0dHBNZXRob2QoKTsKKyAgICBpZiAobWV0aG9kID09ICJHRVQiKQorICAgICAg
ICBtX2N1cmxIYW5kbGUtPmVuYWJsZUh0dHBHZXRSZXF1ZXN0KCk7CisgICAgZWxzZSBpZiAobWV0
aG9kID09ICJQT1NUIikKKyAgICAgICAgc2V0dXBQT1NUKG1fcmVxdWVzdCk7CisgICAgZWxzZSBp
ZiAobWV0aG9kID09ICJQVVQiKQorICAgICAgICBzZXR1cFBVVChtX3JlcXVlc3QpOworICAgIGVs
c2UgaWYgKG1ldGhvZCA9PSAiSEVBRCIpCisgICAgICAgIG1fY3VybEhhbmRsZS0+ZW5hYmxlSHR0
cEhlYWRSZXF1ZXN0KCk7CisgICAgZWxzZSB7CisgICAgICAgIG1fY3VybEhhbmRsZS0+c2V0SHR0
cEN1c3RvbVJlcXVlc3QobWV0aG9kKTsKKyAgICAgICAgc2V0dXBQVVQobV9yZXF1ZXN0KTsKKyAg
ICB9CisKKyAgICBpZiAoIW1fdXNlci5pc0VtcHR5KCkgfHwgIW1fcGFzc3dvcmQuaXNFbXB0eSgp
KSB7CisgICAgICAgIG1fY3VybEhhbmRsZS0+ZW5hYmxlSHR0cEF1dGhlbnRpY2F0aW9uKENVUkxB
VVRIX0FOWSk7CisgICAgICAgIG1fY3VybEhhbmRsZS0+c2V0SHR0cEF1dGhVc2VyUGFzcyhtX3Vz
ZXIubGF0aW4xKCkuZGF0YSgpLCBtX3Bhc3N3b3JkLmxhdGluMSgpLmRhdGEoKSk7CisgICAgfQor
CisgICAgbV9jdXJsSGFuZGxlLT5zZXRIZWFkZXJDYWxsYmFja0Z1bmN0aW9uKGRpZFJlY2VpdmVI
ZWFkZXJDYWxsYmFjaywgdGhpcyk7CisgICAgbV9jdXJsSGFuZGxlLT5zZXRXcml0ZUNhbGxiYWNr
RnVuY3Rpb24oZGlkUmVjZWl2ZURhdGFDYWxsYmFjaywgdGhpcyk7CisKKyAgICBtX2N1cmxIYW5k
bGUtPmVuYWJsZVNoYXJlSGFuZGxlKCk7CisgICAgbV9jdXJsSGFuZGxlLT5lbmFibGVBbGxvd2Vk
UHJvdG9jb2xzKCk7CisgICAgbV9jdXJsSGFuZGxlLT5lbmFibGVBY2NlcHRFbmNvZGluZygpOwor
ICAgIG1fY3VybEhhbmRsZS0+ZW5hYmxlVGltZW91dCgpOworCisgICAgbV9jdXJsSGFuZGxlLT5l
bmFibGVBdXRvUmVmZXJlcigpOworICAgIG1fY3VybEhhbmRsZS0+ZW5hYmxlRm9sbG93TG9jYXRp
b24oKTsKKyAgICBtX2N1cmxIYW5kbGUtPmVuYWJsZVByb3h5SWZFeGlzdHMoKTsKKyAgICBtX2N1
cmxIYW5kbGUtPmVuYWJsZUNvb2tpZUphcklmRXhpc3RzKCk7CisKKyAgICBtX2N1cmxIYW5kbGUt
PnNldFNzbFZlcmlmeVBlZXIoQ3VybEhhbmRsZTo6VmVyaWZ5UGVlcjo6RW5hYmxlKTsKKyAgICBt
X2N1cmxIYW5kbGUtPnNldFNzbFZlcmlmeUhvc3QoQ3VybEhhbmRsZTo6VmVyaWZ5SG9zdDo6U3Ry
aWN0TmFtZUNoZWNrKTsKKworICAgIGF1dG8gc3NsQ2xpZW50Q2VydGlmaWNhdGUgPSBzc2xIYW5k
bGUuZ2V0U1NMQ2xpZW50Q2VydGlmaWNhdGUobV9yZXF1ZXN0LnVybCgpLmhvc3QoKSk7CisgICAg
aWYgKHNzbENsaWVudENlcnRpZmljYXRlKSB7CisgICAgICAgIG1fY3VybEhhbmRsZS0+c2V0U3Ns
Q2VydChzc2xDbGllbnRDZXJ0aWZpY2F0ZS0+Zmlyc3QudXRmOCgpLmRhdGEoKSk7CisgICAgICAg
IG1fY3VybEhhbmRsZS0+c2V0U3NsQ2VydFR5cGUoIlAxMiIpOworICAgICAgICBtX2N1cmxIYW5k
bGUtPnNldFNzbEtleVBhc3N3b3JkKHNzbENsaWVudENlcnRpZmljYXRlLT5zZWNvbmQudXRmOCgp
LmRhdGEoKSk7CisgICAgfQorCisgICAgaWYgKHNzbEhhbmRsZS5zaG91bGRJZ25vcmVTU0xFcnJv
cnMoKSkKKyAgICAgICAgbV9jdXJsSGFuZGxlLT5zZXRTc2xWZXJpZnlQZWVyKEN1cmxIYW5kbGU6
OlZlcmlmeVBlZXI6OkRpc2FibGUpOworICAgIGVsc2UKKyAgICAgICAgbV9jdXJsSGFuZGxlLT5z
ZXRTc2xDdHhDYWxsYmFja0Z1bmN0aW9uKHdpbGxTZXR1cFNzbEN0eENhbGxiYWNrLCB0aGlzKTsK
KworICAgIG1fY3VybEhhbmRsZS0+c2V0Q0FDZXJ0UGF0aChzc2xIYW5kbGUuZ2V0Q0FDZXJ0UGF0
aCgpKTsKKworICAgIGlmIChtX3Nob3VsZFN1c3BlbmQpCisgICAgICAgIHN1c3BlbmQoKTsKKwor
I2lmbmRlZiBOREVCVUcKKyAgICBtX2N1cmxIYW5kbGUtPmVuYWJsZVZlcmJvc2VJZlVzZWQoKTsK
KyAgICBtX2N1cmxIYW5kbGUtPmVuYWJsZVN0ZEVycklmVXNlZCgpOworI2VuZGlmCisKKyAgICBy
ZXR1cm4gbV9jdXJsSGFuZGxlLT5oYW5kbGUoKTsKK30KKworQ1VSTGNvZGUgQ3VybFJlcXVlc3Q6
OndpbGxTZXR1cFNzbEN0eCh2b2lkKiBzc2xDdHgpCit7CisgICAgbV9zc2xWZXJpZmllci5zZXRD
dXJsSGFuZGxlKG1fY3VybEhhbmRsZS5nZXQoKSk7CisgICAgbV9zc2xWZXJpZmllci5zZXRIb3N0
TmFtZShtX3JlcXVlc3QudXJsKCkuaG9zdCgpKTsKKyAgICBtX3NzbFZlcmlmaWVyLnNldFNzbEN0
eChzc2xDdHgpOworCisgICAgcmV0dXJuIENVUkxFX09LOworfQorCisvLyBUaGlzIGlzIGNhbGxl
ZCB0byBvYnRhaW4gSFRUUCBQT1NUIG9yIFBVVCBkYXRhLgorLy8gSXRlcmF0ZSB0aHJvdWdoIEZv
cm1EYXRhIGVsZW1lbnRzIGFuZCB1cGxvYWQgZmlsZXMuCisvLyBDYXJlZnVsbHkgcmVzcGVjdCB0
aGUgZ2l2ZW4gYnVmZmVyIHNpemUgYW5kIGZpbGwgdGhlIHJlc3Qgb2YgdGhlIGRhdGEgYXQgdGhl
IG5leHQgY2FsbHMuCisKK3NpemVfdCBDdXJsUmVxdWVzdDo6d2lsbFNlbmREYXRhKGNoYXIqIHB0
ciwgc2l6ZV90IGJsb2NrU2l6ZSwgc2l6ZV90IG51bWJlck9mQmxvY2tzKQoreworICAgIGlmICht
X2NhbmNlbGxlZCkKKyAgICAgICAgcmV0dXJuIENVUkxfUkVBREZVTkNfQUJPUlQ7CisKKyAgICBp
ZiAoIWJsb2NrU2l6ZSB8fCAhbnVtYmVyT2ZCbG9ja3MpCisgICAgICAgIHJldHVybiAwOworCisg
ICAgaWYgKCFtX2Zvcm1EYXRhU3RyZWFtIHx8ICFtX2Zvcm1EYXRhU3RyZWFtLT5oYXNNb3JlRWxl
bWVudHMoKSkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICBhdXRvIHNlbmRCeXRlcyA9IG1fZm9y
bURhdGFTdHJlYW0tPnJlYWQocHRyLCBibG9ja1NpemUsIG51bWJlck9mQmxvY2tzKTsKKyAgICBp
ZiAoIXNlbmRCeXRlcykgeworICAgICAgICAvLyBTb21ldGhpbmcgd2VudCB3cm9uZyBzbyBlcnJv
ciB0aGUgam9iLgorICAgICAgICByZXR1cm4gQ1VSTF9SRUFERlVOQ19BQk9SVDsKKyAgICB9CisK
KyAgICByZXR1cm4gc2VuZEJ5dGVzOworfQorCisvLyBUaGlzIGlzIGJlaW5nIGNhbGxlZCBmb3Ig
ZWFjaCBIVFRQIGhlYWRlciBpbiB0aGUgcmVzcG9uc2UuIFRoaXMgaW5jbHVkZXMgJ1xyXG4nCisv
LyBmb3IgdGhlIGxhc3QgbGluZSBvZiB0aGUgaGVhZGVyLgorCitzaXplX3QgQ3VybFJlcXVlc3Q6
OmRpZFJlY2VpdmVIZWFkZXIoU3RyaW5nJiYgaGVhZGVyKQoreworICAgIHN0YXRpYyBjb25zdCBh
dXRvIGVtcHR5TGluZUNSTEYgPSAiXHJcbiI7CisgICAgc3RhdGljIGNvbnN0IGF1dG8gZW1wdHlM
aW5lTEYgPSAiXG4iOworCisgICAgaWYgKG1fY2FuY2VsbGVkKQorICAgICAgICByZXR1cm4gMDsK
KworICAgIGF1dG8gcmVjZWl2ZUJ5dGVzID0gc3RhdGljX2Nhc3Q8c2l6ZV90PihoZWFkZXIubGVu
Z3RoKCkpOworCisgICAgLy8gVGhlIEhUVFAgc3RhbmRhcmQgcmVxdWlyZXMgdG8gdXNlIFxyXG4g
YnV0IGZvciBjb21wYXRpYmlsaXR5IGl0IHJlY29tbWVuZHMgdG8gYWNjZXB0IGFsc28gXG4uCisg
ICAgaWYgKChoZWFkZXIgIT0gZW1wdHlMaW5lQ1JMRikgJiYgKGhlYWRlciAhPSBlbXB0eUxpbmVM
RikpIHsKKyAgICAgICAgbV9yZXNwb25zZS5oZWFkZXJzLmFwcGVuZChXVEZNb3ZlKGhlYWRlcikp
OworICAgICAgICByZXR1cm4gcmVjZWl2ZUJ5dGVzOworICAgIH0KKworICAgIGxvbmcgc3RhdHVz
Q29kZSA9IDA7CisgICAgaWYgKGF1dG8gY29kZSA9IG1fY3VybEhhbmRsZS0+Z2V0UmVzcG9uc2VD
b2RlKCkpCisgICAgICAgIHN0YXR1c0NvZGUgPSAqY29kZTsKKworICAgIGxvbmcgaHR0cENvbm5l
Y3RDb2RlID0gMDsKKyAgICBpZiAoYXV0byBjb2RlID0gbV9jdXJsSGFuZGxlLT5nZXRIdHRwQ29u
bmVjdENvZGUoKSkKKyAgICAgICAgaHR0cENvbm5lY3RDb2RlID0gKmNvZGU7CisKKyAgICBpZiAo
KDEwMCA8PSBzdGF0dXNDb2RlKSAmJiAoc3RhdHVzQ29kZSA8IDIwMCkpIHsKKyAgICAgICAgLy8g
SnVzdCByZXR1cm4gd2hlbiByZWNlaXZpbmcgaHR0cCBpbmZvLCBlLmcuIEhUVFAvMS4xIDEwMCBD
b250aW51ZS4KKyAgICAgICAgLy8gSWYgbm90LCB0aGUgcmVxdWVzdCBtaWdodCBiZSBjYW5jZWxs
ZWQsIGJlY2F1c2UgdGhlIE1JTUUgdHlwZSB3aWxsIGJlIGVtcHR5IGZvciB0aGlzIHJlc3BvbnNl
LgorICAgICAgICBtX3Jlc3BvbnNlID0gQ3VybFJlc3BvbnNlIHsgfTsKKyAgICAgICAgcmV0dXJu
IHJlY2VpdmVCeXRlczsKKyAgICB9CisKKyAgICBpZiAoIXN0YXR1c0NvZGUgJiYgKGh0dHBDb25u
ZWN0Q29kZSA9PSAyMDApKSB7CisgICAgICAgIC8vIENvbWVzIGhlcmUgd2hlbiByZWNlaXZpbmcg
MjAwIENvbm5lY3Rpb24gRXN0YWJsaXNoZWQuIEp1c3QgcmV0dXJuLgorICAgICAgICBtX3Jlc3Bv
bnNlID0gQ3VybFJlc3BvbnNlIHsgfTsKKyAgICAgICAgcmV0dXJuIHJlY2VpdmVCeXRlczsKKyAg
ICB9CisKKyAgICAvLyBJZiB0aGUgRk9MTE9XTE9DQVRJT04gb3B0aW9uIGlzIGVuYWJsZWQgZm9y
IHRoZSBjdXJsIGhhbmRsZSB0aGVuCisgICAgLy8gY3VybCB3aWxsIGZvbGxvdyB0aGUgcmVkaXJl
Y3Rpb25zIGludGVybmFsbHkuIFRodXMgdGhpcyBoZWFkZXIgY2FsbGJhY2sKKyAgICAvLyB3aWxs
IGJlIGNhbGxlZCBtb3JlIHRoYW4gb25lIHRpbWUgd2l0aCB0aGUgbGluZSBzdGFydGluZyAiSFRU
UCIgZm9yIG9uZSBqb2IuCisKKyAgICBtX3Jlc3BvbnNlLnVybCA9IG1fY3VybEhhbmRsZS0+Z2V0
RWZmZWN0aXZlVVJMKCk7CisgICAgbV9yZXNwb25zZS5zdGF0dXNDb2RlID0gc3RhdHVzQ29kZTsK
KworICAgIGlmIChhdXRvIGxlbmd0aCA9IG1fY3VybEhhbmRsZS0+Z2V0Q29udGVudExlbmd0aCgp
KQorICAgICAgICBtX3Jlc3BvbnNlLmV4cGVjdGVkQ29udGVudExlbmd0aCA9ICpsZW5ndGg7CisK
KyAgICBpZiAoYXV0byBwb3J0ID0gbV9jdXJsSGFuZGxlLT5nZXRQcmltYXJ5UG9ydCgpKQorICAg
ICAgICBtX3Jlc3BvbnNlLmNvbm5lY3RQb3J0ID0gKnBvcnQ7CisKKyAgICBpZiAoYXV0byBhdXRo
ID0gbV9jdXJsSGFuZGxlLT5nZXRIdHRwQXV0aEF2YWlsKCkpCisgICAgICAgIG1fcmVzcG9uc2Uu
YXZhaWxhYmxlSHR0cEF1dGggPSAqYXV0aDsKKworICAgIGlmIChhdXRvIG1ldHJpY3MgPSBtX2N1
cmxIYW5kbGUtPmdldE5ldHdvcmtMb2FkTWV0cmljcygpKQorICAgICAgICBtX25ldHdvcmtMb2Fk
TWV0cmljcyA9ICptZXRyaWNzOworCisgICAgaW52b2tlRGlkUmVjZWl2ZVJlc3BvbnNlKCk7CisK
KyAgICByZXR1cm4gcmVjZWl2ZUJ5dGVzOworfQorCisvLyBjYWxsZWQgd2l0aCBkYXRhIGFmdGVy
IGFsbCBoZWFkZXJzIGhhdmUgYmVlbiBwcm9jZXNzZWQgdmlhIGhlYWRlckNhbGxiYWNrCisKK3Np
emVfdCBDdXJsUmVxdWVzdDo6ZGlkUmVjZWl2ZURhdGEoUmVmPFNoYXJlZEJ1ZmZlcj4mJiBidWZm
ZXIpCit7CisgICAgaWYgKG1fY2FuY2VsbGVkKQorICAgICAgICByZXR1cm4gMDsKKworICAgIGF1
dG8gcmVjZWl2ZUJ5dGVzID0gYnVmZmVyLT5zaXplKCk7CisKKyAgICAvLyB0aGlzIHNob3VsZG4n
dCBiZSBuZWNlc3NhcnkgYnV0IGFwcGFyZW50bHkgaXMuIENVUkwgd3JpdGVzIHRoZSBkYXRhCisg
ICAgLy8gb2YgaHRtbCBwYWdlIGV2ZW4gaWYgaXQgaXMgYSByZWRpcmVjdCB0aGF0IHdhcyBoYW5k
bGVkIGludGVybmFsbHkKKyAgICAvLyBjYW4gYmUgb2JzZXJ2ZWQgZS5nLiBvbiBnbWFpbC5jb20K
KyAgICBhdXRvIHN0YXR1c0NvZGUgPSBtX2N1cmxIYW5kbGUtPmdldFJlc3BvbnNlQ29kZSgpOwor
ICAgIGlmIChzdGF0dXNDb2RlICYmICgzMDAgPD0gKnN0YXR1c0NvZGUpICYmICgqc3RhdHVzQ29k
ZSA8IDQwMCkpCisgICAgICAgIHJldHVybiByZWNlaXZlQnl0ZXM7CisKKyAgICBpZiAocmVjZWl2
ZUJ5dGVzKSB7CisgICAgICAgIGNhbGxEZWxlZ2F0ZShbdGhpcywgYnVmZmVyID0gV1RGTW92ZShi
dWZmZXIpXShDdXJsUmVxdWVzdERlbGVnYXRlKiBkZWxlZ2F0ZSkgbXV0YWJsZSB7CisgICAgICAg
ICAgICBpZiAoZGVsZWdhdGUpCisgICAgICAgICAgICAgICAgZGVsZWdhdGUtPmN1cmxEaWRSZWNl
aXZlQnVmZmVyKFdURk1vdmUoYnVmZmVyKSk7CisgICAgICAgIH0pOworICAgIH0KKworICAgIHJl
dHVybiByZWNlaXZlQnl0ZXM7Cit9CisKK3ZvaWQgQ3VybFJlcXVlc3Q6OmRpZENvbXBsZXRlVHJh
bnNmZXIoQ1VSTGNvZGUgcmVzdWx0KQoreworICAgIGlmIChtX2NhbmNlbGxlZCkgeworICAgICAg
ICBtX2N1cmxIYW5kbGUgPSBudWxscHRyOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAg
aWYgKHJlc3VsdCA9PSBDVVJMRV9PSykgeworICAgICAgICBpZiAoYXV0byBtZXRyaWNzID0gbV9j
dXJsSGFuZGxlLT5nZXROZXR3b3JrTG9hZE1ldHJpY3MoKSkKKyAgICAgICAgICAgIG1fbmV0d29y
a0xvYWRNZXRyaWNzID0gKm1ldHJpY3M7CisKKyAgICAgICAgY2FsbERlbGVnYXRlKFt0aGlzXShD
dXJsUmVxdWVzdERlbGVnYXRlKiBkZWxlZ2F0ZSkgeworICAgICAgICAgICAgaWYgKGRlbGVnYXRl
KQorICAgICAgICAgICAgICAgIGRlbGVnYXRlLT5jdXJsRGlkQ29tcGxldGUoKTsKKyAgICAgICAg
fSk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgYXV0byByZXNvdXJjZUVycm9yID0gUmVzb3VyY2VF
cnJvcjo6aHR0cEVycm9yKHJlc3VsdCwgbV9yZXF1ZXN0LnVybCgpKTsKKyAgICAgICAgaWYgKG1f
c3NsVmVyaWZpZXIuc3NsRXJyb3JzKCkpCisgICAgICAgICAgICByZXNvdXJjZUVycm9yLnNldFNz
bEVycm9ycyhtX3NzbFZlcmlmaWVyLnNzbEVycm9ycygpKTsKKworICAgICAgICBjYWxsRGVsZWdh
dGUoW3RoaXMsIGVycm9yID0gcmVzb3VyY2VFcnJvci5pc29sYXRlZENvcHkoKV0oQ3VybFJlcXVl
c3REZWxlZ2F0ZSogZGVsZWdhdGUpIHsKKyAgICAgICAgICAgIGlmIChkZWxlZ2F0ZSkKKyAgICAg
ICAgICAgICAgICBkZWxlZ2F0ZS0+Y3VybERpZEZhaWxXaXRoRXJyb3IoZXJyb3IpOworICAgICAg
ICB9KTsKKyAgICB9CisKKyAgICBtX2Zvcm1EYXRhU3RyZWFtID0gbnVsbHB0cjsKKyAgICBtX2N1
cmxIYW5kbGUgPSBudWxscHRyOworfQorCit2b2lkIEN1cmxSZXF1ZXN0OjpkaWRDYW5jZWxUcmFu
c2ZlcigpCit7CisgICAgbV9mb3JtRGF0YVN0cmVhbSA9IG51bGxwdHI7CisgICAgbV9jdXJsSGFu
ZGxlID0gbnVsbHB0cjsKK30KKwordm9pZCBDdXJsUmVxdWVzdDo6cmVzb2x2ZUJsb2JSZWZlcmVu
Y2VzKFJlc291cmNlUmVxdWVzdCYgcmVxdWVzdCkKK3sKKyAgICBBU1NFUlQoaXNNYWluVGhyZWFk
KCkpOworCisgICAgUmVmUHRyPEZvcm1EYXRhPiBmb3JtRGF0YSA9IHJlcXVlc3QuaHR0cEJvZHko
KTsKKyAgICBpZiAoIWZvcm1EYXRhKQorICAgICAgICByZXR1cm47CisKKyAgICAvLyBSZXNvbHZl
IHRoZSBibG9iIGVsZW1lbnRzIHNvIHRoZSBmb3JtRGF0YSBjYW4gY29ycmVjdGx5IHJlcG9ydCBp
dCdzIHNpemUuCisgICAgZm9ybURhdGEgPSBmb3JtRGF0YS0+cmVzb2x2ZUJsb2JSZWZlcmVuY2Vz
KCk7CisgICAgcmVxdWVzdC5zZXRIVFRQQm9keShXVEZNb3ZlKGZvcm1EYXRhKSk7Cit9CisKK3Zv
aWQgQ3VybFJlcXVlc3Q6OnNldHVwUFVUKFJlc291cmNlUmVxdWVzdCYgcmVxdWVzdCkKK3sKKyAg
ICBtX2N1cmxIYW5kbGUtPmVuYWJsZUh0dHBQdXRSZXF1ZXN0KCk7CisKKyAgICAvLyBEaXNhYmxl
IHRoZSBFeHBlY3Q6IDEwMCBjb250aW51ZSBoZWFkZXIKKyAgICBtX2N1cmxIYW5kbGUtPnJlbW92
ZVJlcXVlc3RIZWFkZXIoIkV4cGVjdCIpOworCisgICAgYXV0byBudW1FbGVtZW50cyA9IHJlcXVl
c3QuaHR0cEJvZHkoKS0+ZWxlbWVudHMoKS5zaXplKCk7CisgICAgaWYgKCFudW1FbGVtZW50cykK
KyAgICAgICAgcmV0dXJuOworCisgICAgc2V0dXBGb3JtRGF0YShyZXF1ZXN0LCBmYWxzZSk7Cit9
CisKK3ZvaWQgQ3VybFJlcXVlc3Q6OnNldHVwUE9TVChSZXNvdXJjZVJlcXVlc3QmIHJlcXVlc3Qp
Cit7CisgICAgbV9jdXJsSGFuZGxlLT5lbmFibGVIdHRwUG9zdFJlcXVlc3QoKTsKKworICAgIGF1
dG8gbnVtRWxlbWVudHMgPSByZXF1ZXN0Lmh0dHBCb2R5KCktPmVsZW1lbnRzKCkuc2l6ZSgpOwor
ICAgIGlmICghbnVtRWxlbWVudHMpCisgICAgICAgIHJldHVybjsKKworICAgIC8vIERvIG5vdCBz
dHJlYW0gZm9yIHNpbXBsZSBQT1NUIGRhdGEKKyAgICBpZiAobnVtRWxlbWVudHMgPT0gMSkgewor
ICAgICAgICBtX3Bvc3RCdWZmZXIgPSByZXF1ZXN0Lmh0dHBCb2R5KCktPmZsYXR0ZW4oKTsKKyAg
ICAgICAgaWYgKG1fcG9zdEJ1ZmZlci5zaXplKCkpCisgICAgICAgICAgICBtX2N1cmxIYW5kbGUt
PnNldFBvc3RGaWVsZHMobV9wb3N0QnVmZmVyLmRhdGEoKSwgbV9wb3N0QnVmZmVyLnNpemUoKSk7
CisgICAgfSBlbHNlCisgICAgICAgIHNldHVwRm9ybURhdGEocmVxdWVzdCwgdHJ1ZSk7Cit9CisK
K3ZvaWQgQ3VybFJlcXVlc3Q6OnNldHVwRm9ybURhdGEoUmVzb3VyY2VSZXF1ZXN0JiByZXF1ZXN0
LCBib29sIGlzUG9zdFJlcXVlc3QpCit7CisgICAgc3RhdGljIGF1dG8gbWF4Q3VybE9mZlQgPSBD
dXJsSGFuZGxlOjptYXhDdXJsT2ZmVCgpOworCisgICAgLy8gT2J0YWluIHRoZSB0b3RhbCBzaXpl
IG9mIHRoZSBmb3JtIGRhdGEKKyAgICBjdXJsX29mZl90IHNpemUgPSAwOworICAgIGJvb2wgY2h1
bmtlZFRyYW5zZmVyID0gZmFsc2U7CisgICAgYXV0byBlbGVtZW50cyA9IHJlcXVlc3QuaHR0cEJv
ZHkoKS0+ZWxlbWVudHMoKTsKKworICAgIGZvciAoYXV0byBlbGVtZW50IDogZWxlbWVudHMpIHsK
KyAgICAgICAgaWYgKGVsZW1lbnQubV90eXBlID09IEZvcm1EYXRhRWxlbWVudDo6VHlwZTo6RW5j
b2RlZEZpbGUpIHsKKyAgICAgICAgICAgIGxvbmcgbG9uZyBmaWxlU2l6ZVJlc3VsdDsKKyAgICAg
ICAgICAgIGlmIChnZXRGaWxlU2l6ZShlbGVtZW50Lm1fZmlsZW5hbWUsIGZpbGVTaXplUmVzdWx0
KSkgeworICAgICAgICAgICAgICAgIGlmIChmaWxlU2l6ZVJlc3VsdCA+IG1heEN1cmxPZmZUKSB7
CisgICAgICAgICAgICAgICAgICAgIC8vIEZpbGUgc2l6ZSBpcyB0b28gYmlnIGZvciBzcGVjaWZ5
aW5nIGl0IHRvIGNVUkwKKyAgICAgICAgICAgICAgICAgICAgY2h1bmtlZFRyYW5zZmVyID0gdHJ1
ZTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgfQorICAgICAg
ICAgICAgICAgIHNpemUgKz0gZmlsZVNpemVSZXN1bHQ7CisgICAgICAgICAgICB9IGVsc2Ugewor
ICAgICAgICAgICAgICAgIGNodW5rZWRUcmFuc2ZlciA9IHRydWU7CisgICAgICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgc2l6ZSAr
PSBlbGVtZW50Lm1fZGF0YS5zaXplKCk7CisgICAgfQorCisgICAgLy8gY1VSTCBndWVzc2VzIHRo
YXQgd2Ugd2FudCBjaHVua2VkIGVuY29kaW5nIGFzIGxvbmcgYXMgd2Ugc3BlY2lmeSB0aGUgaGVh
ZGVyCisgICAgaWYgKGNodW5rZWRUcmFuc2ZlcikKKyAgICAgICAgbV9jdXJsSGFuZGxlLT5hcHBl
bmRSZXF1ZXN0SGVhZGVyKCJUcmFuc2Zlci1FbmNvZGluZzogY2h1bmtlZCIpOworICAgIGVsc2Ug
eworICAgICAgICBpZiAoaXNQb3N0UmVxdWVzdCkKKyAgICAgICAgICAgIG1fY3VybEhhbmRsZS0+
c2V0UG9zdEZpZWxkTGFyZ2Uoc2l6ZSk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIG1fY3Vy
bEhhbmRsZS0+c2V0SW5GaWxlU2l6ZUxhcmdlKHNpemUpOworICAgIH0KKworICAgIG1fZm9ybURh
dGFTdHJlYW0gPSBzdGQ6Om1ha2VfdW5pcXVlPEZvcm1EYXRhU3RyZWFtPigpOworICAgIG1fZm9y
bURhdGFTdHJlYW0tPnNldEhUVFBCb2R5KHJlcXVlc3QuaHR0cEJvZHkoKSk7CisKKyAgICBtX2N1
cmxIYW5kbGUtPnNldFJlYWRDYWxsYmFja0Z1bmN0aW9uKHdpbGxTZW5kRGF0YUNhbGxiYWNrLCB0
aGlzKTsKK30KKwordm9pZCBDdXJsUmVxdWVzdDo6aW52b2tlRGlkUmVjZWl2ZVJlc3BvbnNlRm9y
RmlsZShVUkwmIHVybCkKK3sKKyAgICAvLyBTaW5jZSB0aGUgY29kZSBpbiBkaWRSZWNlaXZlSGVh
ZGVyKCkgd2lsbCBub3QgaGF2ZSBydW4gZm9yIGxvY2FsIGZpbGVzCisgICAgLy8gdGhlIGNvZGUg
dG8gc2V0IHRoZSBVUkwgYW5kIGZpcmUgZGlkUmVjZWl2ZVJlc3BvbnNlIGlzIG5ldmVyIHJ1biwK
KyAgICAvLyB3aGljaCBtZWFucyB0aGUgUmVzb3VyY2VMb2FkZXIncyByZXNwb25zZSBkb2VzIG5v
dCBjb250YWluIHRoZSBVUkwuCisgICAgLy8gUnVuIHRoZSBjb2RlIGhlcmUgZm9yIGxvY2FsIGZp
bGVzIHRvIHJlc29sdmUgdGhlIGlzc3VlLgorCisgICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsK
KyAgICBBU1NFUlQodXJsLmlzTG9jYWxGaWxlKCkpOworCisgICAgbV9yZXNwb25zZS51cmwgPSB1
cmw7CisgICAgbV9yZXNwb25zZS5zdGF0dXNDb2RlID0gMjAwOworCisgICAgLy8gRGV0ZXJtaW5l
IHRoZSBNSU1FIHR5cGUgYmFzZWQgb24gdGhlIHBhdGguCisgICAgbV9yZXNwb25zZS5oZWFkZXJz
LmFwcGVuZChTdHJpbmcoIkNvbnRlbnQtVHlwZTogIiArIE1JTUVUeXBlUmVnaXN0cnk6OmdldE1J
TUVUeXBlRm9yUGF0aChtX3Jlc3BvbnNlLnVybCkpKTsKKworICAgIGlmICghbV9pc1N5bmNSZXF1
ZXN0KSB7CisgICAgICAgIC8vIERpZFJlY2VpdmVSZXNwb25zZSBtdXN0IG5vdCBiZSBjYWxsZWQg
aW1tZWRpYXRlbHkKKyAgICAgICAgQ3VybEpvYk1hbmFnZXI6OnNpbmdsZXRvbigpLmNhbGxPbkpv
YlRocmVhZChbcHJvdGVjdGVkVGhpcyA9IG1ha2VSZWYoKnRoaXMpXSgpIHsKKyAgICAgICAgICAg
IHByb3RlY3RlZFRoaXMtPmludm9rZURpZFJlY2VpdmVSZXNwb25zZSgpOworICAgICAgICB9KTsK
KyAgICB9IGVsc2UKKyAgICAgICAgaW52b2tlRGlkUmVjZWl2ZVJlc3BvbnNlKCk7Cit9CisKK3Zv
aWQgQ3VybFJlcXVlc3Q6Omludm9rZURpZFJlY2VpdmVSZXNwb25zZSgpCit7CisgICAgY2FsbERl
bGVnYXRlKFt0aGlzLCByZXNwb25zZSA9IG1fcmVzcG9uc2UuaXNvbGF0ZWRDb3B5KCldKEN1cmxS
ZXF1ZXN0RGVsZWdhdGUqIGRlbGVnYXRlKSB7CisgICAgICAgIGlmIChkZWxlZ2F0ZSkKKyAgICAg
ICAgICAgIGRlbGVnYXRlLT5jdXJsRGlkUmVjZWl2ZVJlc3BvbnNlKHJlc3BvbnNlKTsKKyAgICB9
KTsKK30KKwordm9pZCBDdXJsUmVxdWVzdDo6c2V0UGF1c2VkKGJvb2wgcGF1c2VkKQoreworICAg
IGlmIChtX2NhbmNlbGxlZCkKKyAgICAgICAgcmV0dXJuOworCisgICAgaWYgKHBhdXNlZCA9PSBt
X2lzUGF1c2VkKQorICAgICAgICByZXR1cm47CisKKyAgICBtX2lzUGF1c2VkID0gcGF1c2VkOwor
CisgICAgaWYgKCFtX2N1cmxIYW5kbGUpCisgICAgICAgIHJldHVybjsKKworICAgIGlmICghbV9p
c1N5bmNSZXF1ZXN0ICYmIGlzTWFpblRocmVhZCgpKSB7CisgICAgICAgIEN1cmxKb2JNYW5hZ2Vy
OjpzaW5nbGV0b24oKS5jYWxsT25Kb2JUaHJlYWQoW3Byb3RlY3RlZFRoaXMgPSBtYWtlUmVmKCp0
aGlzKSwgcGF1c2VkID0gbV9pc1BhdXNlZF0oKSB7CisgICAgICAgICAgICBpZiAocHJvdGVjdGVk
VGhpcy0+bV9jYW5jZWxsZWQpCisgICAgICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgICAg
ICBhdXRvIGVycm9yID0gcHJvdGVjdGVkVGhpcy0+bV9jdXJsSGFuZGxlLT5wYXVzZShwYXVzZWQg
PyBDVVJMUEFVU0VfQUxMIDogQ1VSTFBBVVNFX0NPTlQpOworICAgICAgICAgICAgaWYgKChlcnJv
ciAhPSBDVVJMRV9PSykgJiYgIXBhdXNlZCkgeworICAgICAgICAgICAgICAgIC8vIFJlc3RhcnRp
bmcgdGhlIGhhbmRsZSBoYXMgZmFpbGVkIHNvIGp1c3QgY2FuY2VsIGl0LgorICAgICAgICAgICAg
ICAgIHByb3RlY3RlZFRoaXMtPmNhbmNlbCgpOworICAgICAgICAgICAgfQorICAgICAgICB9KTsK
KyAgICB9IGVsc2UgeworICAgICAgICBhdXRvIGVycm9yID0gbV9jdXJsSGFuZGxlLT5wYXVzZSht
X2lzUGF1c2VkID8gQ1VSTFBBVVNFX0FMTCA6IENVUkxQQVVTRV9DT05UKTsKKyAgICAgICAgaWYg
KChlcnJvciAhPSBDVVJMRV9PSykgJiYgIW1faXNQYXVzZWQpCisgICAgICAgICAgICBjYW5jZWwo
KTsKKyAgICB9Cit9CisKK0NVUkxjb2RlIEN1cmxSZXF1ZXN0Ojp3aWxsU2V0dXBTc2xDdHhDYWxs
YmFjayhDVVJMKiwgdm9pZCogc3NsQ3R4LCB2b2lkKiB1c2VyRGF0YSkKK3sKKyAgICByZXR1cm4g
c3RhdGljX2Nhc3Q8Q3VybFJlcXVlc3QqPih1c2VyRGF0YSktPndpbGxTZXR1cFNzbEN0eChzc2xD
dHgpOworfQorCitzaXplX3QgQ3VybFJlcXVlc3Q6OndpbGxTZW5kRGF0YUNhbGxiYWNrKGNoYXIq
IHB0ciwgc2l6ZV90IGJsb2NrU2l6ZSwgc2l6ZV90IG51bWJlck9mQmxvY2tzLCB2b2lkKiB1c2Vy
RGF0YSkKK3sKKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8Q3VybFJlcXVlc3QqPih1c2VyRGF0YSkt
PndpbGxTZW5kRGF0YShwdHIsIGJsb2NrU2l6ZSwgbnVtYmVyT2ZCbG9ja3MpOworfQorCitzaXpl
X3QgQ3VybFJlcXVlc3Q6OmRpZFJlY2VpdmVIZWFkZXJDYWxsYmFjayhjaGFyKiBwdHIsIHNpemVf
dCBibG9ja1NpemUsIHNpemVfdCBudW1iZXJPZkJsb2Nrcywgdm9pZCogdXNlckRhdGEpCit7Cisg
ICAgcmV0dXJuIHN0YXRpY19jYXN0PEN1cmxSZXF1ZXN0Kj4odXNlckRhdGEpLT5kaWRSZWNlaXZl
SGVhZGVyKFN0cmluZyhwdHIsIGJsb2NrU2l6ZSAqIG51bWJlck9mQmxvY2tzKSk7Cit9CisKK3Np
emVfdCBDdXJsUmVxdWVzdDo6ZGlkUmVjZWl2ZURhdGFDYWxsYmFjayhjaGFyKiBwdHIsIHNpemVf
dCBibG9ja1NpemUsIHNpemVfdCBudW1iZXJPZkJsb2Nrcywgdm9pZCogdXNlckRhdGEpCit7Cisg
ICAgcmV0dXJuIHN0YXRpY19jYXN0PEN1cmxSZXF1ZXN0Kj4odXNlckRhdGEpLT5kaWRSZWNlaXZl
RGF0YShTaGFyZWRCdWZmZXI6OmNyZWF0ZShwdHIsIGJsb2NrU2l6ZSAqIG51bWJlck9mQmxvY2tz
KSk7Cit9CisKK30KKworI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9uZXR3b3JrL2N1cmwvQ3VybFJlcXVlc3QuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25l
dHdvcmsvY3VybC9DdXJsUmVxdWVzdC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw
MDAwMDAwLi5lOGE5YzM2N2M0MwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL25ldHdvcmsvY3VybC9DdXJsUmVxdWVzdC5oCkBAIC0wLDAgKzEsMTE5IEBACisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDE3IFNvbnkgSW50ZXJhY3RpdmUgRW50ZXJ0YWlubWVudCBJbmMu
CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCisgKiAKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhF
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJF
TUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgIkN1cmxKb2JNYW5hZ2VyLmgi
CisjaW5jbHVkZSAiQ3VybFJlc3BvbnNlLmgiCisjaW5jbHVkZSAiQ3VybFNTTFZlcmlmaWVyLmgi
CisjaW5jbHVkZSAiRm9ybURhdGFTdHJlYW1DdXJsLmgiCisjaW5jbHVkZSAiTmV0d29ya0xvYWRN
ZXRyaWNzLmgiCisjaW5jbHVkZSAiUmVzb3VyY2VSZXF1ZXN0LmgiCisjaW5jbHVkZSA8d3RmL05v
bmNvcHlhYmxlLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgQ3VybFJlcXVlc3RE
ZWxlZ2F0ZTsKK2NsYXNzIFJlc291cmNlRXJyb3I7CitjbGFzcyBTaGFyZWRCdWZmZXI7CisKK2Ns
YXNzIEN1cmxSZXF1ZXN0IDogcHVibGljIFRocmVhZFNhZmVSZWZDb3VudGVkPEN1cmxSZXF1ZXN0
PiwgcHVibGljIEN1cmxKb2JDbGllbnQgeworICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKEN1cmxS
ZXF1ZXN0KTsKKworcHVibGljOgorICAgIEN1cmxSZXF1ZXN0KGNvbnN0IFJlc291cmNlUmVxdWVz
dCYsIEN1cmxSZXF1ZXN0RGVsZWdhdGUqID0gbnVsbHB0ciwgYm9vbCBzaG91bGRTdXNwZW5kID0g
ZmFsc2UpOworICAgIHZpcnR1YWwgfkN1cmxSZXF1ZXN0KCkgeyB9CisKKyAgICB2b2lkIHNldERl
bGVnYXRlKEN1cmxSZXF1ZXN0RGVsZWdhdGUqIGRlbGVnYXRlKSB7IG1fZGVsZWdhdGUgPSBkZWxl
Z2F0ZTsgIH0KKyAgICB2b2lkIHNldFVzZXJQYXNzKGNvbnN0IFN0cmluZyYsIGNvbnN0IFN0cmlu
ZyYpOworCisgICAgdm9pZCBzdGFydChib29sIGlzU3luY1JlcXVlc3QgPSBmYWxzZSk7CisgICAg
dm9pZCBjYW5jZWwoKTsKKyAgICB2b2lkIHN1c3BlbmQoKTsKKyAgICB2b2lkIHJlc3VtZSgpOwor
CisgICAgYm9vbCBpc1N5bmNSZXF1ZXN0KCkgeyByZXR1cm4gbV9pc1N5bmNSZXF1ZXN0OyB9CisK
KyAgICBOZXR3b3JrTG9hZE1ldHJpY3MgZ2V0TmV0d29ya0xvYWRNZXRyaWNzKCkgeyByZXR1cm4g
bV9uZXR3b3JrTG9hZE1ldHJpY3MuaXNvbGF0ZWRDb3B5KCk7IH0KKworcHJpdmF0ZToKKyAgICB2
b2lkIHJldGFpbigpIG92ZXJyaWRlIHsgcmVmKCk7IH0KKyAgICB2b2lkIHJlbGVhc2UoKSBvdmVy
cmlkZSB7IGRlcmVmKCk7IH0KKyAgICBDVVJMKiBoYW5kbGUoKSBvdmVycmlkZSB7IHJldHVybiBt
X2N1cmxIYW5kbGUgPyBtX2N1cmxIYW5kbGUtPmhhbmRsZSgpIDogbnVsbHB0cjsgfQorCisgICAg
dm9pZCBzdGFydFdpdGhKb2JNYW5hZ2VyKCk7CisKKyAgICB2b2lkIGNhbGxEZWxlZ2F0ZShXVEY6
OkZ1bmN0aW9uPHZvaWQoQ3VybFJlcXVlc3REZWxlZ2F0ZSopPik7CisKKyAgICAvLyBUcmFuc2Zl
ciBwcm9jZXNzaW5nIG9mIFJlcXVlc3QgYm9keSwgUmVzcG9uc2UgaGVhZGVyL2JvZHkKKyAgICAv
LyBDYWxsZWQgYnkgd29ya2VyIHRocmVhZCBpbiBjYXNlIG9mIGFzeW5jLCBtYWluIHRocmVhZCBp
biBjYXNlIG9mIHN5bmMuCisgICAgQ1VSTCogc2V0dXBUcmFuc2ZlcigpIG92ZXJyaWRlOworICAg
IENVUkxjb2RlIHdpbGxTZXR1cFNzbEN0eCh2b2lkKik7CisgICAgc2l6ZV90IHdpbGxTZW5kRGF0
YShjaGFyKiwgc2l6ZV90LCBzaXplX3QpOworICAgIHNpemVfdCBkaWRSZWNlaXZlSGVhZGVyKFN0
cmluZyYmKTsKKyAgICBzaXplX3QgZGlkUmVjZWl2ZURhdGEoUmVmPFNoYXJlZEJ1ZmZlcj4mJik7
CisgICAgdm9pZCBkaWRDb21wbGV0ZVRyYW5zZmVyKENVUkxjb2RlKSBvdmVycmlkZTsKKyAgICB2
b2lkIGRpZENhbmNlbFRyYW5zZmVyKCkgb3ZlcnJpZGU7CisKKyAgICAvLyBGb3IgUE9TVCBhbmQg
UFVUIG1ldGhvZCAKKyAgICB2b2lkIHJlc29sdmVCbG9iUmVmZXJlbmNlcyhSZXNvdXJjZVJlcXVl
c3QmKTsKKyAgICB2b2lkIHNldHVwUE9TVChSZXNvdXJjZVJlcXVlc3QmKTsKKyAgICB2b2lkIHNl
dHVwUFVUKFJlc291cmNlUmVxdWVzdCYpOworICAgIHZvaWQgc2V0dXBGb3JtRGF0YShSZXNvdXJj
ZVJlcXVlc3QmLCBib29sKTsKKworICAgIC8vIFByb2Nlc3NpbmcgZm9yIERpZFJlc291cmNlUmVz
cG9uc2UKKyAgICB2b2lkIGludm9rZURpZFJlY2VpdmVSZXNwb25zZUZvckZpbGUoVVJMJik7Cisg
ICAgdm9pZCBpbnZva2VEaWRSZWNlaXZlUmVzcG9uc2UoKTsKKyAgICB2b2lkIHNldFBhdXNlZChi
b29sKTsKKworICAgIC8vIENhbGxiYWNrIGZ1bmN0aW9ucyBmb3IgY3VybAorICAgIHN0YXRpYyBD
VVJMY29kZSB3aWxsU2V0dXBTc2xDdHhDYWxsYmFjayhDVVJMKiwgdm9pZCosIHZvaWQqKTsKKyAg
ICBzdGF0aWMgc2l6ZV90IHdpbGxTZW5kRGF0YUNhbGxiYWNrKGNoYXIqLCBzaXplX3QsIHNpemVf
dCwgdm9pZCopOworICAgIHN0YXRpYyBzaXplX3QgZGlkUmVjZWl2ZUhlYWRlckNhbGxiYWNrKGNo
YXIqLCBzaXplX3QsIHNpemVfdCwgdm9pZCopOworICAgIHN0YXRpYyBzaXplX3QgZGlkUmVjZWl2
ZURhdGFDYWxsYmFjayhjaGFyKiwgc2l6ZV90LCBzaXplX3QsIHZvaWQqKTsKKworCisgICAgc3Rk
OjphdG9taWM8Q3VybFJlcXVlc3REZWxlZ2F0ZSo+IG1fZGVsZWdhdGUgeyB9OworICAgIGJvb2wg
bV9pc1N5bmNSZXF1ZXN0IHsgZmFsc2UgfTsKKyAgICBib29sIG1fY2FuY2VsbGVkIHsgZmFsc2Ug
fTsKKworICAgIC8vIFVzZWQgYnkgd29ya2VyIHRocmVhZCBpbiBjYXNlIG9mIGFzeW5jLCBhbmQg
bWFpbiB0aHJlYWQgaW4gY2FzZSBvZiBzeW5jLgorICAgIFJlc291cmNlUmVxdWVzdCBtX3JlcXVl
c3Q7CisgICAgU3RyaW5nIG1fdXNlcjsKKyAgICBTdHJpbmcgbV9wYXNzd29yZDsKKyAgICBib29s
IG1fc2hvdWxkU3VzcGVuZCB7IGZhbHNlIH07CisKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8Q3VybEhh
bmRsZT4gbV9jdXJsSGFuZGxlOworICAgIHN0ZDo6dW5pcXVlX3B0cjxGb3JtRGF0YVN0cmVhbT4g
bV9mb3JtRGF0YVN0cmVhbTsKKyAgICBWZWN0b3I8Y2hhcj4gbV9wb3N0QnVmZmVyOworICAgIEN1
cmxTU0xWZXJpZmllciBtX3NzbFZlcmlmaWVyOworICAgIEN1cmxSZXNwb25zZSBtX3Jlc3BvbnNl
OworCisgICAgYm9vbCBtX2lzUGF1c2VkIHsgZmFsc2UgfTsKKworICAgIE5ldHdvcmtMb2FkTWV0
cmljcyBtX25ldHdvcmtMb2FkTWV0cmljczsKK307CisKK30KZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY3VybC9DdXJsUmVxdWVzdERlbGVnYXRlLmggYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2N1cmwvQ3VybFJlcXVlc3REZWxlZ2F0ZS5oCm5l
dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi4xYjAxZTZjYmEyMAotLS0gL2Rl
di9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY3VybC9DdXJsUmVx
dWVzdERlbGVnYXRlLmgKQEAgLTAsMCArMSw0NCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAx
NyBTb255IEludGVyYWN0aXZlIEVudGVydGFpbm1lbnQgSW5jLgorICoKKyAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogCisgKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRP
UlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENP
TlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBC
VVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdt
YSBvbmNlCisKKyNpbmNsdWRlIDx3dGYvUmVmLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKwor
Y2xhc3MgQ3VybFJlc3BvbnNlOworY2xhc3MgUmVzb3VyY2VFcnJvcjsKK2NsYXNzIFNoYXJlZEJ1
ZmZlcjsKKworY2xhc3MgQ3VybFJlcXVlc3REZWxlZ2F0ZSB7CitwdWJsaWM6CisgICAgdmlydHVh
bCB2b2lkIGN1cmxEaWRSZWNlaXZlUmVzcG9uc2UoY29uc3QgQ3VybFJlc3BvbnNlJikgPSAwOwor
ICAgIHZpcnR1YWwgdm9pZCBjdXJsRGlkUmVjZWl2ZUJ1ZmZlcihSZWY8U2hhcmVkQnVmZmVyPiYm
KSA9IDA7CisgICAgdmlydHVhbCB2b2lkIGN1cmxEaWRDb21wbGV0ZSgpID0gMDsKKyAgICB2aXJ0
dWFsIHZvaWQgY3VybERpZEZhaWxXaXRoRXJyb3IoY29uc3QgUmVzb3VyY2VFcnJvciYpID0gMDsK
K307CisKK30KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY3Vy
bC9SZXNvdXJjZUhhbmRsZUN1cmwuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29y
ay9jdXJsL1Jlc291cmNlSGFuZGxlQ3VybC5jcHAKaW5kZXggZmVlZWVjMzNmYTEuLjc4MjU2NDZl
NWQ5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2N1cmwvUmVz
b3VyY2VIYW5kbGVDdXJsLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3Jr
L2N1cmwvUmVzb3VyY2VIYW5kbGVDdXJsLmNwcApAQCAtMzIsMTkgKzMyLDEyIEBACiAKICNpZiBV
U0UoQ1VSTCkKIAotI2luY2x1ZGUgIkNhY2hlZFJlc291cmNlTG9hZGVyLmgiCiAjaW5jbHVkZSAi
Q3JlZGVudGlhbFN0b3JhZ2UuaCIKLSNpbmNsdWRlICJDdXJsQ2FjaGVNYW5hZ2VyLmgiCiAjaW5j
bHVkZSAiQ3VybENvbnRleHQuaCIKLSNpbmNsdWRlICJDdXJsSm9iTWFuYWdlci5oIgotI2luY2x1
ZGUgIkN1cmxTU0xIYW5kbGUuaCIKICNpbmNsdWRlICJGaWxlU3lzdGVtLmgiCiAjaW5jbHVkZSAi
TG9nZ2luZy5oIgotI2luY2x1ZGUgIk1JTUVUeXBlUmVnaXN0cnkuaCIKLSNpbmNsdWRlICJOZXR3
b3JraW5nQ29udGV4dC5oIgogI2luY2x1ZGUgIlJlc291cmNlSGFuZGxlSW50ZXJuYWwuaCIKICNp
bmNsdWRlICJTeW5jaHJvbm91c0xvYWRlckNsaWVudC5oIgotI2luY2x1ZGUgPHd0Zi90ZXh0L0Jh
c2U2NC5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKQEAgLTc4LDcgKzcxLDggQEAgYm9vbCBS
ZXNvdXJjZUhhbmRsZTo6c3RhcnQoKQogCiB2b2lkIFJlc291cmNlSGFuZGxlOjpjYW5jZWwoKQog
ewotICAgIGQtPm1fZGVsZWdhdGUtPmNhbmNlbCgpOworICAgIGlmIChkLT5tX2RlbGVnYXRlKQor
ICAgICAgICBkLT5tX2RlbGVnYXRlLT5jYW5jZWwoKTsKIH0KIAogI2lmIE9TKFdJTkRPV1MpCkBA
IC0xMTQsNyArMTA4LDggQEAgdm9pZCBSZXNvdXJjZUhhbmRsZTo6cGxhdGZvcm1TZXREZWZlcnNM
b2FkaW5nKGJvb2wgZGVmZXJzKQogewogICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7CiAKLSAg
ICBkLT5tX2RlbGVnYXRlLT5zZXREZWZlcnNMb2FkaW5nKGRlZmVycyk7CisgICAgaWYgKGQtPm1f
ZGVsZWdhdGUpCisgICAgICAgIGQtPm1fZGVsZWdhdGUtPnNldERlZmVyc0xvYWRpbmcoZGVmZXJz
KTsKIH0KIAogYm9vbCBSZXNvdXJjZUhhbmRsZTo6c2hvdWxkVXNlQ3JlZGVudGlhbFN0b3JhZ2Uo
KQpAQCAtMTM2LDcgKzEzMSw4IEBAIHZvaWQgUmVzb3VyY2VIYW5kbGU6OmRpZFJlY2VpdmVBdXRo
ZW50aWNhdGlvbkNoYWxsZW5nZShjb25zdCBBdXRoZW50aWNhdGlvbkNoYWxsCiAgICAgICAgICAg
ICB1cmxUb1N0b3JlID0gY2hhbGxlbmdlLmZhaWx1cmVSZXNwb25zZSgpLnVybCgpOwogICAgICAg
ICBDcmVkZW50aWFsU3RvcmFnZTo6ZGVmYXVsdENyZWRlbnRpYWxTdG9yYWdlKCkuc2V0KHBhcnRp
dGlvbiwgY3JlZGVudGlhbCwgY2hhbGxlbmdlLnByb3RlY3Rpb25TcGFjZSgpLCB1cmxUb1N0b3Jl
KTsKICAgICAgICAgCi0gICAgICAgIGQtPm1fZGVsZWdhdGUtPnNldEF1dGhlbnRpY2F0aW9uKGNy
ZWRlbnRpYWwudXNlcigpLCBjcmVkZW50aWFsLnBhc3N3b3JkKCkpOworICAgICAgICBpZiAoZC0+
bV9kZWxlZ2F0ZSkKKyAgICAgICAgICAgIGQtPm1fZGVsZWdhdGUtPnNldEF1dGhlbnRpY2F0aW9u
KGNyZWRlbnRpYWwudXNlcigpLCBjcmVkZW50aWFsLnBhc3N3b3JkKCkpOwogCiAgICAgICAgIGQt
Pm1fdXNlciA9IFN0cmluZygpOwogICAgICAgICBkLT5tX3Bhc3MgPSBTdHJpbmcoKTsKQEAgLTE2
MSwxNiArMTU3LDE5IEBAIHZvaWQgUmVzb3VyY2VIYW5kbGU6OmRpZFJlY2VpdmVBdXRoZW50aWNh
dGlvbkNoYWxsZW5nZShjb25zdCBBdXRoZW50aWNhdGlvbkNoYWxsCiAgICAgICAgICAgICAgICAg
ICAgIENyZWRlbnRpYWxTdG9yYWdlOjpkZWZhdWx0Q3JlZGVudGlhbFN0b3JhZ2UoKS5zZXQocGFy
dGl0aW9uLCBjcmVkZW50aWFsLCBjaGFsbGVuZ2UucHJvdGVjdGlvblNwYWNlKCksIGNoYWxsZW5n
ZS5mYWlsdXJlUmVzcG9uc2UoKS51cmwoKSk7CiAgICAgICAgICAgICAgICAgfQogCi0gICAgICAg
ICAgICAgICAgZC0+bV9kZWxlZ2F0ZS0+c2V0QXV0aGVudGljYXRpb24oY3JlZGVudGlhbC51c2Vy
KCksIGNyZWRlbnRpYWwucGFzc3dvcmQoKSk7CisgICAgICAgICAgICAgICAgaWYgKGQtPm1fZGVs
ZWdhdGUpCisgICAgICAgICAgICAgICAgICAgIGQtPm1fZGVsZWdhdGUtPnNldEF1dGhlbnRpY2F0
aW9uKGNyZWRlbnRpYWwudXNlcigpLCBjcmVkZW50aWFsLnBhc3N3b3JkKCkpOwogICAgICAgICAg
ICAgICAgIHJldHVybjsKICAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgIH0KIAogICAgIGQt
Pm1fY3VycmVudFdlYkNoYWxsZW5nZSA9IGNoYWxsZW5nZTsKLSAgICAKLSAgICBpZiAoY2xpZW50
KCkpCisKKyAgICBpZiAoY2xpZW50KCkpIHsKKyAgICAgICAgYXV0byBwcm90ZWN0ZWRUaGlzID0g
bWFrZVJlZigqdGhpcyk7CiAgICAgICAgIGNsaWVudCgpLT5kaWRSZWNlaXZlQXV0aGVudGljYXRp
b25DaGFsbGVuZ2UodGhpcywgZC0+bV9jdXJyZW50V2ViQ2hhbGxlbmdlKTsKKyAgICB9CiB9CiAK
IHZvaWQgUmVzb3VyY2VIYW5kbGU6OnJlY2VpdmVkQ3JlZGVudGlhbChjb25zdCBBdXRoZW50aWNh
dGlvbkNoYWxsZW5nZSYgY2hhbGxlbmdlLCBjb25zdCBDcmVkZW50aWFsJiBjcmVkZW50aWFsKQpA
QCAtMTk0LDcgKzE5Myw5IEBAIHZvaWQgUmVzb3VyY2VIYW5kbGU6OnJlY2VpdmVkQ3JlZGVudGlh
bChjb25zdCBBdXRoZW50aWNhdGlvbkNoYWxsZW5nZSYgY2hhbGxlbmdlCiAgICAgICAgIH0KICAg
ICB9CiAKLSAgICBkLT5tX2RlbGVnYXRlLT5zZXRBdXRoZW50aWNhdGlvbihjcmVkZW50aWFsLnVz
ZXIoKSwgY3JlZGVudGlhbC5wYXNzd29yZCgpKTsKKyAgICBpZiAoZC0+bV9kZWxlZ2F0ZSkKKyAg
ICAgICAgZC0+bV9kZWxlZ2F0ZS0+c2V0QXV0aGVudGljYXRpb24oY3JlZGVudGlhbC51c2VyKCks
IGNyZWRlbnRpYWwucGFzc3dvcmQoKSk7CisKICAgICBjbGVhckF1dGhlbnRpY2F0aW9uKCk7CiB9
CiAKQEAgLTIwNSw3ICsyMDYsOSBAQCB2b2lkIFJlc291cmNlSGFuZGxlOjpyZWNlaXZlZFJlcXVl
c3RUb0NvbnRpbnVlV2l0aG91dENyZWRlbnRpYWwoY29uc3QgQXV0aGVudGljYQogICAgIGlmIChj
aGFsbGVuZ2UgIT0gZC0+bV9jdXJyZW50V2ViQ2hhbGxlbmdlKQogICAgICAgICByZXR1cm47CiAK
LSAgICBkLT5tX2RlbGVnYXRlLT5zZXRBdXRoZW50aWNhdGlvbigiIiwgIiIpOworICAgIGlmIChk
LT5tX2RlbGVnYXRlKQorICAgICAgICBkLT5tX2RlbGVnYXRlLT5zZXRBdXRoZW50aWNhdGlvbigi
IiwgIiIpOworCiAgICAgY2xlYXJBdXRoZW50aWNhdGlvbigpOwogfQogCkBAIC0yMTYsOCArMjE5
LDEwIEBAIHZvaWQgUmVzb3VyY2VIYW5kbGU6OnJlY2VpdmVkQ2FuY2VsbGF0aW9uKGNvbnN0IEF1
dGhlbnRpY2F0aW9uQ2hhbGxlbmdlJiBjaGFsbGVuCiAgICAgaWYgKGNoYWxsZW5nZSAhPSBkLT5t
X2N1cnJlbnRXZWJDaGFsbGVuZ2UpCiAgICAgICAgIHJldHVybjsKIAotICAgIGlmIChjbGllbnQo
KSkKKyAgICBpZiAoY2xpZW50KCkpIHsKKyAgICAgICAgYXV0byBwcm90ZWN0ZWRUaGlzID0gbWFr
ZVJlZigqdGhpcyk7CiAgICAgICAgIGNsaWVudCgpLT5yZWNlaXZlZENhbmNlbGxhdGlvbih0aGlz
LCBjaGFsbGVuZ2UpOworICAgIH0KIH0KIAogdm9pZCBSZXNvdXJjZUhhbmRsZTo6cmVjZWl2ZWRS
ZXF1ZXN0VG9QZXJmb3JtRGVmYXVsdEhhbmRsaW5nKGNvbnN0IEF1dGhlbnRpY2F0aW9uQ2hhbGxl
bmdlJikKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY3VybC9S
ZXNvdXJjZUhhbmRsZUN1cmxEZWxlZ2F0ZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9u
ZXR3b3JrL2N1cmwvUmVzb3VyY2VIYW5kbGVDdXJsRGVsZWdhdGUuY3BwCmluZGV4IDBmMDIwYjIw
ZWQ5Li4yMGI2ZDRiNWMyMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0
d29yay9jdXJsL1Jlc291cmNlSGFuZGxlQ3VybERlbGVnYXRlLmNwcAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9uZXR3b3JrL2N1cmwvUmVzb3VyY2VIYW5kbGVDdXJsRGVsZWdhdGUuY3Bw
CkBAIC0zMiwxNyArMzIsMTUgQEAKIAogI2lmIFVTRShDVVJMKQogCisjaW5jbHVkZSAiQXV0aGVu
dGljYXRpb25DaGFsbGVuZ2UuaCIKICNpbmNsdWRlICJDcmVkZW50aWFsU3RvcmFnZS5oIgogI2lu
Y2x1ZGUgIkN1cmxDYWNoZU1hbmFnZXIuaCIKKyNpbmNsdWRlICJDdXJsUmVxdWVzdC5oIgogI2lu
Y2x1ZGUgIkhUVFBQYXJzZXJzLmgiCi0jaW5jbHVkZSAiTUlNRVR5cGVSZWdpc3RyeS5oIgogI2lu
Y2x1ZGUgIk11bHRpcGFydEhhbmRsZS5oIgotI2luY2x1ZGUgIlJlc291cmNlSGFuZGxlLmgiCiAj
aW5jbHVkZSAiUmVzb3VyY2VIYW5kbGVJbnRlcm5hbC5oIgogI2luY2x1ZGUgIlNoYXJlZEJ1ZmZl
ci5oIgogI2luY2x1ZGUgIlRleHRFbmNvZGluZy5oIgotI2luY2x1ZGUgIlVSTC5oIgotI2luY2x1
ZGUgPHd0Zi9NYWluVGhyZWFkLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvQmFzZTY0Lmg+CiAKIG5h
bWVzcGFjZSBXZWJDb3JlIHsKQEAgLTUwLDMyICs0OCwyMCBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7
CiBSZXNvdXJjZUhhbmRsZUN1cmxEZWxlZ2F0ZTo6UmVzb3VyY2VIYW5kbGVDdXJsRGVsZWdhdGUo
UmVzb3VyY2VIYW5kbGUqIGhhbmRsZSkKICAgICA6IG1faGFuZGxlKGhhbmRsZSkKICAgICAsIG1f
Zmlyc3RSZXF1ZXN0KGhhbmRsZS0+Zmlyc3RSZXF1ZXN0KCkuaXNvbGF0ZWRDb3B5KCkpCi0gICAg
LCBtX2N1c3RvbUhUVFBIZWFkZXJGaWVsZHMobV9maXJzdFJlcXVlc3QuaHR0cEhlYWRlckZpZWxk
cygpLmlzb2xhdGVkQ29weSgpKQorICAgICwgbV9jdXJyZW50UmVxdWVzdChoYW5kbGUtPmZpcnN0
UmVxdWVzdCgpLmlzb2xhdGVkQ29weSgpKQogICAgICwgbV9zaG91bGRVc2VDcmVkZW50aWFsU3Rv
cmFnZShoYW5kbGUtPnNob3VsZFVzZUNyZWRlbnRpYWxTdG9yYWdlKCkpCiAgICAgLCBtX3VzZXIo
aGFuZGxlLT5nZXRJbnRlcm5hbCgpLT5tX3VzZXIuaXNvbGF0ZWRDb3B5KCkpCiAgICAgLCBtX3Bh
c3MoaGFuZGxlLT5nZXRJbnRlcm5hbCgpLT5tX3Bhc3MuaXNvbGF0ZWRDb3B5KCkpCiAgICAgLCBt
X2luaXRpYWxDcmVkZW50aWFsKGhhbmRsZS0+Z2V0SW50ZXJuYWwoKS0+bV9pbml0aWFsQ3JlZGVu
dGlhbCkKICAgICAsIG1fZGVmZXJzTG9hZGluZyhoYW5kbGUtPmdldEludGVybmFsKCktPm1fZGVm
ZXJzTG9hZGluZykKIHsKLSAgICBjb25zdCBVUkwmIHVybCA9IG1fZmlyc3RSZXF1ZXN0LnVybCgp
OwogCi0gICAgaWYgKG1fY3VzdG9tSFRUUEhlYWRlckZpZWxkcy5zaXplKCkpIHsKLSAgICAgICAg
YXV0byYgY2FjaGUgPSBDdXJsQ2FjaGVNYW5hZ2VyOjpnZXRJbnN0YW5jZSgpOwotICAgICAgICBi
b29sIGhhc0NhY2hlSGVhZGVycyA9IG1fY3VzdG9tSFRUUEhlYWRlckZpZWxkcy5jb250YWlucyhI
VFRQSGVhZGVyTmFtZTo6SWZNb2RpZmllZFNpbmNlKSB8fCBtX2N1c3RvbUhUVFBIZWFkZXJGaWVs
ZHMuY29udGFpbnMoSFRUUEhlYWRlck5hbWU6OklmTm9uZU1hdGNoKTsKLSAgICAgICAgaWYgKCFo
YXNDYWNoZUhlYWRlcnMgJiYgY2FjaGUuaXNDYWNoZWQodXJsKSkgewotICAgICAgICAgICAgY2Fj
aGUuYWRkQ2FjaGVFbnRyeUNsaWVudCh1cmwsIG1faGFuZGxlKTsKLSAgICAgICAgICAgIC8vIGFw
cGVuZCBhZGRpdGlvbmFsIGNhY2hlIGluZm9ybWF0aW9uCi0gICAgICAgICAgICBmb3IgKGF1dG8g
ZW50cnkgOiBjYWNoZS5yZXF1ZXN0SGVhZGVycyh1cmwpKQotICAgICAgICAgICAgICAgIG1fY3Vz
dG9tSFRUUEhlYWRlckZpZWxkcy5zZXQoZW50cnkua2V5LCBlbnRyeS52YWx1ZSk7Ci0gICAgICAg
ICAgICBtX2FkZGVkQ2FjaGVWYWxpZGF0aW9uSGVhZGVycyA9IHRydWU7Ci0gICAgICAgIH0KLSAg
ICB9Ci0KLSAgICBzZXR1cEF1dGhlbnRpY2F0aW9uKCk7CiB9CiAKIFJlc291cmNlSGFuZGxlQ3Vy
bERlbGVnYXRlOjp+UmVzb3VyY2VIYW5kbGVDdXJsRGVsZWdhdGUoKQogeworICAgIGlmIChtX2N1
cmxSZXF1ZXN0KQorICAgICAgICBtX2N1cmxSZXF1ZXN0LT5zZXREZWxlZ2F0ZShudWxscHRyKTsK
IH0KIAogYm9vbCBSZXNvdXJjZUhhbmRsZUN1cmxEZWxlZ2F0ZTo6aGFzSGFuZGxlKCkgY29uc3QK
QEAgLTg4LDc2ICs3NCw2NiBAQCB2b2lkIFJlc291cmNlSGFuZGxlQ3VybERlbGVnYXRlOjpyZWxl
YXNlSGFuZGxlKCkKICAgICBtX2hhbmRsZSA9IG51bGxwdHI7CiB9CiAKLXZvaWQgUmVzb3VyY2VI
YW5kbGVDdXJsRGVsZWdhdGU6OnN0YXJ0KGJvb2wgaXNTeW5jUmVxdWVzdCkKK2Jvb2wgUmVzb3Vy
Y2VIYW5kbGVDdXJsRGVsZWdhdGU6OnN0YXJ0KCkKIHsKLSAgICBtX2lzU3luY1JlcXVlc3QgPSBp
c1N5bmNSZXF1ZXN0OworICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7CiAKLSAgICBpZiAoIW1f
aXNTeW5jUmVxdWVzdCkgewotICAgICAgICAvLyBGb3IgYXN5bmNocm9ub3VzLCB1c2UgQ3VybEpv
Yk1hbmFnZXIuIEN1cmwgcHJvY2Vzc2VzIHJ1bnMgb24gc3ViIHRocmVhZC4KLSAgICAgICAgQ3Vy
bEpvYk1hbmFnZXI6OnNpbmdsZXRvbigpLmFkZCh0aGlzKTsKLSAgICB9IGVsc2UgewotICAgICAg
ICAvLyBGb3Igc3luY2hyb25vdXMsIGRvZXMgbm90IHVzZSBDdXJsSm9iTWFuYWdlci4gQ3VybCBw
cm9jZXNzZXMgcnVucyBvbiBtYWluIHRocmVhZC4KLSAgICAgICAgcmV0YWluKCk7Ci0gICAgICAg
IHNldHVwVHJhbnNmZXIoKTsKLQotICAgICAgICAvLyBjdXJsX2Vhc3lfcGVyZm9ybSBibG9ja3Mg
dW50aWwgdGhlIHRyYW5zZmVyIGlzIGZpbmlzaGVkLgotICAgICAgICBDVVJMY29kZSByZXN1bHRD
b2RlID0gbV9jdXJsSGFuZGxlLT5wZXJmb3JtKCk7Ci0gICAgICAgIGRpZENvbXBsZXRlVHJhbnNm
ZXIocmVzdWx0Q29kZSk7Ci0gICAgICAgIHJlbGVhc2UoKTsKLSAgICB9CisgICAgYXV0byBjcmVk
ZW50aWFsID0gZ2V0Q3JlZGVudGlhbChtX2N1cnJlbnRSZXF1ZXN0LCBmYWxzZSk7CisKKyAgICBt
X2N1cmxSZXF1ZXN0ID0gY3JlYXRlQ3VybFJlcXVlc3QobV9jdXJyZW50UmVxdWVzdCk7CisgICAg
bV9jdXJsUmVxdWVzdC0+c2V0VXNlclBhc3MoY3JlZGVudGlhbC5maXJzdCwgY3JlZGVudGlhbC5z
ZWNvbmQpOworICAgIG1fY3VybFJlcXVlc3QtPnN0YXJ0KCk7CisKKyAgICByZXR1cm4gdHJ1ZTsK
IH0KIAogdm9pZCBSZXNvdXJjZUhhbmRsZUN1cmxEZWxlZ2F0ZTo6Y2FuY2VsKCkKIHsKKyAgICBB
U1NFUlQoaXNNYWluVGhyZWFkKCkpOworCiAgICAgcmVsZWFzZUhhbmRsZSgpOwogCi0gICAgaWYg
KCFtX2lzU3luY1JlcXVlc3QpCi0gICAgICAgIEN1cmxKb2JNYW5hZ2VyOjpzaW5nbGV0b24oKS5j
YW5jZWwodGhpcyk7CisgICAgaWYgKCFtX2N1cmxSZXF1ZXN0KQorICAgICAgICBtX2N1cmxSZXF1
ZXN0LT5jYW5jZWwoKTsKIH0KIAogdm9pZCBSZXNvdXJjZUhhbmRsZUN1cmxEZWxlZ2F0ZTo6c2V0
RGVmZXJzTG9hZGluZyhib29sIGRlZmVycykKIHsKKyAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkp
OworCiAgICAgaWYgKGRlZmVycyA9PSBtX2RlZmVyc0xvYWRpbmcpCiAgICAgICAgIHJldHVybjsK
IAogICAgIG1fZGVmZXJzTG9hZGluZyA9IGRlZmVyczsKIAotICAgIGF1dG8gYWN0aW9uID0gW3By
b3RlY3RlZFRoaXMgPSBtYWtlUmVmKCp0aGlzKV0oKSB7Ci0gICAgICAgIGlmICghcHJvdGVjdGVk
VGhpcy0+bV9jdXJsSGFuZGxlKQotICAgICAgICAgICAgcmV0dXJuOwotCi0gICAgICAgIGlmIChw
cm90ZWN0ZWRUaGlzLT5tX2RlZmVyc0xvYWRpbmcpIHsKLSAgICAgICAgICAgIENVUkxjb2RlIGVy
cm9yID0gcHJvdGVjdGVkVGhpcy0+bV9jdXJsSGFuZGxlLT5wYXVzZShDVVJMUEFVU0VfQUxMKTsK
LSAgICAgICAgICAgIC8vIElmIHdlIGNvdWxkIG5vdCBkZWZlciB0aGUgaGFuZGxlLCBzbyBkb24n
dCBkbyBpdC4KLSAgICAgICAgICAgIGlmIChlcnJvciAhPSBDVVJMRV9PSykKLSAgICAgICAgICAg
ICAgICByZXR1cm47Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBDVVJMY29kZSBlcnJv
ciA9IHByb3RlY3RlZFRoaXMtPm1fY3VybEhhbmRsZS0+cGF1c2UoQ1VSTFBBVVNFX0NPTlQpOwot
ICAgICAgICAgICAgaWYgKGVycm9yICE9IENVUkxFX09LKSB7Ci0gICAgICAgICAgICAgICAgLy8g
UmVzdGFydGluZyB0aGUgaGFuZGxlIGhhcyBmYWlsZWQgc28ganVzdCBjYW5jZWwgaXQuCi0gICAg
ICAgICAgICAgICAgcHJvdGVjdGVkVGhpcy0+bV9oYW5kbGUtPmNhbmNlbCgpOwotICAgICAgICAg
ICAgfQotICAgICAgICB9Ci0gICAgfTsKKyAgICBpZiAoIW1fY3VybFJlcXVlc3QpCisgICAgICAg
IHJldHVybjsKIAotICAgIEN1cmxKb2JNYW5hZ2VyOjpzaW5nbGV0b24oKS5jYWxsT25Kb2JUaHJl
YWQoV1RGTW92ZShhY3Rpb24pKTsKKyAgICBpZiAobV9kZWZlcnNMb2FkaW5nKQorICAgICAgICBt
X2N1cmxSZXF1ZXN0LT5zdXNwZW5kKCk7CisgICAgZWxzZQorICAgICAgICBtX2N1cmxSZXF1ZXN0
LT5yZXN1bWUoKTsKIH0KIAotdm9pZCBSZXNvdXJjZUhhbmRsZUN1cmxEZWxlZ2F0ZTo6c2V0QXV0
aGVudGljYXRpb24oY29uc3QgU3RyaW5nJiB1c2VyLCBjb25zdCBTdHJpbmcmIHBhc3MpCit2b2lk
IFJlc291cmNlSGFuZGxlQ3VybERlbGVnYXRlOjpzZXRBdXRoZW50aWNhdGlvbihjb25zdCBTdHJp
bmcmIHVzZXIsIGNvbnN0IFN0cmluZyYgcGFzc3dvcmQpCiB7Ci0gICAgYXV0byBhY3Rpb24gPSBb
cHJvdGVjdGVkVGhpcyA9IG1ha2VSZWYoKnRoaXMpLCB1c2VyID0gdXNlci5pc29sYXRlZENvcHko
KSwgcGFzcyA9IHBhc3MuaXNvbGF0ZWRDb3B5KCldKCkgewotICAgICAgICBwcm90ZWN0ZWRUaGlz
LT5tX3VzZXIgPSB1c2VyOwotICAgICAgICBwcm90ZWN0ZWRUaGlzLT5tX3Bhc3MgPSBwYXNzOwot
ICAgICAgICBpZiAocHJvdGVjdGVkVGhpcy0+bV9jdXJsSGFuZGxlKQotICAgICAgICAgICAgcHJv
dGVjdGVkVGhpcy0+bV9jdXJsSGFuZGxlLT5zZXRIdHRwQXV0aFVzZXJQYXNzKHVzZXIsIHBhc3Mp
OwotICAgIH07Ci0KLSAgICBDdXJsSm9iTWFuYWdlcjo6c2luZ2xldG9uKCkuY2FsbE9uSm9iVGhy
ZWFkKFdURk1vdmUoYWN0aW9uKSk7CisgICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKKworICAg
IGlmICghbV9jdXJsUmVxdWVzdCkKKyAgICAgICAgcmV0dXJuOworCisgICAgYm9vbCBpc1N5bmNS
ZXF1ZXN0ID0gbV9jdXJsUmVxdWVzdC0+aXNTeW5jUmVxdWVzdCgpOworICAgIG1fY3VybFJlcXVl
c3QtPmNhbmNlbCgpOworICAgIG1fY3VybFJlcXVlc3QtPnNldERlbGVnYXRlKG51bGxwdHIpOwor
CisgICAgbV9jdXJsUmVxdWVzdCA9IGNyZWF0ZUN1cmxSZXF1ZXN0KG1fY3VycmVudFJlcXVlc3Qp
OworICAgIG1fY3VybFJlcXVlc3QtPnNldFVzZXJQYXNzKHVzZXIsIHBhc3N3b3JkKTsKKyAgICBt
X2N1cmxSZXF1ZXN0LT5zdGFydChpc1N5bmNSZXF1ZXN0KTsKIH0KIAogdm9pZCBSZXNvdXJjZUhh
bmRsZUN1cmxEZWxlZ2F0ZTo6ZGlzcGF0Y2hTeW5jaHJvbm91c0pvYigpCiB7Ci0gICAgaWYgKG1f
Zmlyc3RSZXF1ZXN0LnVybCgpLnByb3RvY29sSXNEYXRhKCkpIHsKKyAgICBpZiAobV9jdXJyZW50
UmVxdWVzdC51cmwoKS5wcm90b2NvbElzRGF0YSgpKSB7CiAgICAgICAgIGhhbmRsZURhdGFVUkwo
KTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KQEAgLTE2NywxNjIgKzE0Myw1NyBAQCB2b2lkIFJl
c291cmNlSGFuZGxlQ3VybERlbGVnYXRlOjpkaXNwYXRjaFN5bmNocm9ub3VzSm9iKCkKICAgICAv
LyBhbmQgd2Ugd291bGQgYXNzZXJ0IHNvIGZvcmNlIGRlZmVyc0xvYWRpbmcgdG8gYmUgZmFsc2Uu
CiAgICAgbV9kZWZlcnNMb2FkaW5nID0gZmFsc2U7CiAKLSAgICBzdGFydCh0cnVlKTsKKyAgICBt
X2N1cmxSZXF1ZXN0ID0gY3JlYXRlQ3VybFJlcXVlc3QobV9jdXJyZW50UmVxdWVzdCk7CisgICAg
bV9jdXJsUmVxdWVzdC0+c3RhcnQodHJ1ZSk7CiB9CiAKLXZvaWQgUmVzb3VyY2VIYW5kbGVDdXJs
RGVsZWdhdGU6OnJldGFpbigpCitSZWZQdHI8Q3VybFJlcXVlc3Q+IFJlc291cmNlSGFuZGxlQ3Vy
bERlbGVnYXRlOjpjcmVhdGVDdXJsUmVxdWVzdChSZXNvdXJjZVJlcXVlc3QmIHJlcXVlc3QpCiB7
Ci0gICAgcmVmKCk7Ci19Ci0KLXZvaWQgUmVzb3VyY2VIYW5kbGVDdXJsRGVsZWdhdGU6OnJlbGVh
c2UoKQotewotICAgIGRlcmVmKCk7Ci19Ci0KLUNVUkwqIFJlc291cmNlSGFuZGxlQ3VybERlbGVn
YXRlOjpzZXR1cFRyYW5zZmVyKCkKLXsKLSAgICBtX2N1cmxIYW5kbGUgPSBzdGQ6Om1ha2VfdW5p
cXVlPEN1cmxIYW5kbGU+KCk7Ci0gICAgbV9jdXJsSGFuZGxlLT5pbml0aWFsaXplKCk7Ci0KLSAg
ICBpZiAobV9kZWZlcnNMb2FkaW5nKSB7Ci0gICAgICAgIENVUkxjb2RlIGVycm9yID0gbV9jdXJs
SGFuZGxlLT5wYXVzZShDVVJMUEFVU0VfQUxMKTsKLSAgICAgICAgLy8gSWYgd2UgZGlkIG5vdCBw
YXVzZSB0aGUgaGFuZGxlLCB3ZSB3b3VsZCBBU1NFUlQgaW4gdGhlCi0gICAgICAgIC8vIGhlYWRl
ciBjYWxsYmFjay4gU28ganVzdCBhc3NlcnQgaGVyZS4KLSAgICAgICAgQVNTRVJUX1VOVVNFRChl
cnJvciwgZXJyb3IgPT0gQ1VSTEVfT0spOwotICAgIH0KLQotI2lmbmRlZiBOREVCVUcKLSAgICBt
X2N1cmxIYW5kbGUtPmVuYWJsZVZlcmJvc2VJZlVzZWQoKTsKLSAgICBtX2N1cmxIYW5kbGUtPmVu
YWJsZVN0ZEVycklmVXNlZCgpOwotI2VuZGlmCisgICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsK
IAotICAgIGF1dG8mIHNzbEhhbmRsZSA9IEN1cmxDb250ZXh0OjpzaW5nbGV0b24oKS5zc2xIYW5k
bGUoKTsKLQotICAgIG1fY3VybEhhbmRsZS0+c2V0U3NsVmVyaWZ5UGVlcihDdXJsSGFuZGxlOjpW
ZXJpZnlQZWVyOjpFbmFibGUpOwotICAgIG1fY3VybEhhbmRsZS0+c2V0U3NsVmVyaWZ5SG9zdChD
dXJsSGFuZGxlOjpWZXJpZnlIb3N0OjpTdHJpY3ROYW1lQ2hlY2spOwotICAgIG1fY3VybEhhbmRs
ZS0+c2V0V3JpdGVDYWxsYmFja0Z1bmN0aW9uKGRpZFJlY2VpdmVEYXRhQ2FsbGJhY2ssIHRoaXMp
OwotICAgIG1fY3VybEhhbmRsZS0+c2V0SGVhZGVyQ2FsbGJhY2tGdW5jdGlvbihkaWRSZWNlaXZl
SGVhZGVyQ2FsbGJhY2ssIHRoaXMpOwotICAgIG1fY3VybEhhbmRsZS0+ZW5hYmxlQXV0b1JlZmVy
ZXIoKTsKLSAgICBtX2N1cmxIYW5kbGUtPmVuYWJsZUZvbGxvd0xvY2F0aW9uKCk7Ci0gICAgbV9j
dXJsSGFuZGxlLT5lbmFibGVIdHRwQXV0aGVudGljYXRpb24oQ1VSTEFVVEhfQU5ZKTsKLSAgICBt
X2N1cmxIYW5kbGUtPmVuYWJsZVNoYXJlSGFuZGxlKCk7Ci0gICAgbV9jdXJsSGFuZGxlLT5lbmFi
bGVUaW1lb3V0KCk7Ci0gICAgbV9jdXJsSGFuZGxlLT5lbmFibGVBbGxvd2VkUHJvdG9jb2xzKCk7
Ci0KLSAgICBhdXRvIHNzbENsaWVudENlcnRpZmljYXRlID0gc3NsSGFuZGxlLmdldFNTTENsaWVu
dENlcnRpZmljYXRlKG1fZmlyc3RSZXF1ZXN0LnVybCgpLmhvc3QoKSk7Ci0gICAgaWYgKHNzbENs
aWVudENlcnRpZmljYXRlKSB7Ci0gICAgICAgIG1fY3VybEhhbmRsZS0+c2V0U3NsQ2VydChzc2xD
bGllbnRDZXJ0aWZpY2F0ZS0+Zmlyc3QudXRmOCgpLmRhdGEoKSk7Ci0gICAgICAgIG1fY3VybEhh
bmRsZS0+c2V0U3NsQ2VydFR5cGUoIlAxMiIpOwotICAgICAgICBtX2N1cmxIYW5kbGUtPnNldFNz
bEtleVBhc3N3b3JkKHNzbENsaWVudENlcnRpZmljYXRlLT5zZWNvbmQudXRmOCgpLmRhdGEoKSk7
Ci0gICAgfQorICAgIC8vIEN1cmxDYWNoZSA6IGFwcGVuZCBhZGRpdGlvbmFsIGNhY2hlIGluZm9y
bWF0aW9uCisgICAgbV9hZGRlZENhY2hlVmFsaWRhdGlvbkhlYWRlcnMgPSBmYWxzZTsKIAotICAg
IGlmIChzc2xIYW5kbGUuc2hvdWxkSWdub3JlU1NMRXJyb3JzKCkpCi0gICAgICAgIG1fY3VybEhh
bmRsZS0+c2V0U3NsVmVyaWZ5UGVlcihDdXJsSGFuZGxlOjpWZXJpZnlQZWVyOjpEaXNhYmxlKTsK
LSAgICBlbHNlCi0gICAgICAgIG1fY3VybEhhbmRsZS0+c2V0U3NsQ3R4Q2FsbGJhY2tGdW5jdGlv
bih3aWxsU2V0dXBTc2xDdHhDYWxsYmFjaywgdGhpcyk7Ci0KLSAgICBtX2N1cmxIYW5kbGUtPnNl
dENBQ2VydFBhdGgoc3NsSGFuZGxlLmdldENBQ2VydFBhdGgoKSk7Ci0KLSAgICBtX2N1cmxIYW5k
bGUtPmVuYWJsZUFjY2VwdEVuY29kaW5nKCk7Ci0gICAgbV9jdXJsSGFuZGxlLT5zZXRVcmwobV9m
aXJzdFJlcXVlc3QudXJsKCkpOwotICAgIG1fY3VybEhhbmRsZS0+ZW5hYmxlQ29va2llSmFySWZF
eGlzdHMoKTsKLQotICAgIGlmIChtX2N1c3RvbUhUVFBIZWFkZXJGaWVsZHMuc2l6ZSgpKQotICAg
ICAgICBtX2N1cmxIYW5kbGUtPmFwcGVuZFJlcXVlc3RIZWFkZXJzKG1fY3VzdG9tSFRUUEhlYWRl
ckZpZWxkcyk7Ci0KLSAgICBTdHJpbmcgbWV0aG9kID0gbV9maXJzdFJlcXVlc3QuaHR0cE1ldGhv
ZCgpOwotICAgIGlmICgiR0VUIiA9PSBtZXRob2QpCi0gICAgICAgIG1fY3VybEhhbmRsZS0+ZW5h
YmxlSHR0cEdldFJlcXVlc3QoKTsKLSAgICBlbHNlIGlmICgiUE9TVCIgPT0gbWV0aG9kKQotICAg
ICAgICBzZXR1cFBPU1QoKTsKLSAgICBlbHNlIGlmICgiUFVUIiA9PSBtZXRob2QpCi0gICAgICAg
IHNldHVwUFVUKCk7Ci0gICAgZWxzZSBpZiAoIkhFQUQiID09IG1ldGhvZCkKLSAgICAgICAgbV9j
dXJsSGFuZGxlLT5lbmFibGVIdHRwSGVhZFJlcXVlc3QoKTsKLSAgICBlbHNlIHsKLSAgICAgICAg
bV9jdXJsSGFuZGxlLT5zZXRIdHRwQ3VzdG9tUmVxdWVzdChtZXRob2QpOwotICAgICAgICBzZXR1
cFBVVCgpOwotICAgIH0KLQotICAgIGFwcGx5QXV0aGVudGljYXRpb24oKTsKKyAgICBib29sIGhh
c0NhY2hlSGVhZGVycyA9IHJlcXVlc3QuaHR0cEhlYWRlckZpZWxkcygpLmNvbnRhaW5zKEhUVFBI
ZWFkZXJOYW1lOjpJZk1vZGlmaWVkU2luY2UpIHx8IHJlcXVlc3QuaHR0cEhlYWRlckZpZWxkcygp
LmNvbnRhaW5zKEhUVFBIZWFkZXJOYW1lOjpJZk5vbmVNYXRjaCk7CisgICAgaWYgKCFoYXNDYWNo
ZUhlYWRlcnMpIHsKKyAgICAgICAgYXV0byYgY2FjaGUgPSBDdXJsQ2FjaGVNYW5hZ2VyOjpnZXRJ
bnN0YW5jZSgpOworICAgICAgICBVUkwgY2FjaGVVcmwgPSByZXF1ZXN0LnVybCgpOworICAgICAg
ICBjYWNoZVVybC5yZW1vdmVGcmFnbWVudElkZW50aWZpZXIoKTsKIAotICAgIG1fY3VybEhhbmRs
ZS0+ZW5hYmxlUHJveHlJZkV4aXN0cygpOworICAgICAgICBpZiAoY2FjaGUuaXNDYWNoZWQoY2Fj
aGVVcmwpKSB7CisgICAgICAgICAgICBjYWNoZS5hZGRDYWNoZUVudHJ5Q2xpZW50KGNhY2hlVXJs
LCBtX2hhbmRsZSk7CiAKLSAgICByZXR1cm4gbV9jdXJsSGFuZGxlLT5oYW5kbGUoKTsKLX0KKyAg
ICAgICAgICAgIGZvciAoYXV0byBlbnRyeSA6IGNhY2hlLnJlcXVlc3RIZWFkZXJzKGNhY2hlVXJs
KSkKKyAgICAgICAgICAgICAgICByZXF1ZXN0LmFkZEhUVFBIZWFkZXJGaWVsZChlbnRyeS5rZXks
IGVudHJ5LnZhbHVlKTsKIAotdm9pZCBSZXNvdXJjZUhhbmRsZUN1cmxEZWxlZ2F0ZTo6ZGlkQ29t
cGxldGVUcmFuc2ZlcihDVVJMY29kZSByZXN1bHQpCi17Ci0gICAgaWYgKHJlc3VsdCA9PSBDVVJM
RV9PSykgewotICAgICAgICBOZXR3b3JrTG9hZE1ldHJpY3MgbmV0d29ya0xvYWRNZXRyaWNzID0g
Z2V0TmV0d29ya0xvYWRNZXRyaWNzKCk7Ci0KLSAgICAgICAgaWYgKGlzTWFpblRocmVhZCgpKQot
ICAgICAgICAgICAgZGlkRmluaXNoKG5ldHdvcmtMb2FkTWV0cmljcyk7Ci0gICAgICAgIGVsc2Ug
ewotICAgICAgICAgICAgY2FsbE9uTWFpblRocmVhZChbcHJvdGVjdGVkVGhpcyA9IG1ha2VSZWYo
KnRoaXMpLCBtZXRyaWNzID0gbmV0d29ya0xvYWRNZXRyaWNzLmlzb2xhdGVkQ29weSgpXSB7Ci0g
ICAgICAgICAgICAgICAgaWYgKCFwcm90ZWN0ZWRUaGlzLT5tX2hhbmRsZSkKLSAgICAgICAgICAg
ICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgICAgIHByb3RlY3RlZFRoaXMtPmRpZEZpbmlz
aChtZXRyaWNzKTsKLSAgICAgICAgICAgIH0pOwotICAgICAgICB9Ci0gICAgfSBlbHNlIHsKLSAg
ICAgICAgUmVzb3VyY2VFcnJvciByZXNvdXJjZUVycm9yID0gUmVzb3VyY2VFcnJvcjo6aHR0cEVy
cm9yKHJlc3VsdCwgbV9maXJzdFJlcXVlc3QudXJsKCkpOwotICAgICAgICBpZiAobV9zc2xWZXJp
Zmllci5zc2xFcnJvcnMoKSkKLSAgICAgICAgICAgIHJlc291cmNlRXJyb3Iuc2V0U3NsRXJyb3Jz
KG1fc3NsVmVyaWZpZXIuc3NsRXJyb3JzKCkpOwotCi0gICAgICAgIGlmIChpc01haW5UaHJlYWQo
KSkKLSAgICAgICAgICAgIGRpZEZhaWwocmVzb3VyY2VFcnJvcik7Ci0gICAgICAgIGVsc2Ugewot
ICAgICAgICAgICAgY2FsbE9uTWFpblRocmVhZChbcHJvdGVjdGVkVGhpcyA9IG1ha2VSZWYoKnRo
aXMpLCBlcnJvciA9IHJlc291cmNlRXJyb3IuaXNvbGF0ZWRDb3B5KCldIHsKLSAgICAgICAgICAg
ICAgICBpZiAoIXByb3RlY3RlZFRoaXMtPm1faGFuZGxlKQotICAgICAgICAgICAgICAgICAgICBy
ZXR1cm47Ci0gICAgICAgICAgICAgICAgcHJvdGVjdGVkVGhpcy0+ZGlkRmFpbChlcnJvcik7Ci0g
ICAgICAgICAgICB9KTsKKyAgICAgICAgICAgIG1fYWRkZWRDYWNoZVZhbGlkYXRpb25IZWFkZXJz
ID0gdHJ1ZTsKICAgICAgICAgfQogICAgIH0KIAotICAgIG1fZm9ybURhdGFTdHJlYW0gPSBudWxs
cHRyOwotICAgIG1fY3VybEhhbmRsZSA9IG51bGxwdHI7CisgICAgcmV0dXJuIGFkb3B0UmVmKG5l
dyBDdXJsUmVxdWVzdChyZXF1ZXN0LCB0aGlzLCBtX2RlZmVyc0xvYWRpbmcpKTsKIH0KIAotdm9p
ZCBSZXNvdXJjZUhhbmRsZUN1cmxEZWxlZ2F0ZTo6ZGlkQ2FuY2VsVHJhbnNmZXIoKQorYm9vbCBS
ZXNvdXJjZUhhbmRsZUN1cmxEZWxlZ2F0ZTo6Y2FuY2VsbGVkT3JDbGllbnRsZXNzKCkKIHsKLSAg
ICBtX2Zvcm1EYXRhU3RyZWFtID0gbnVsbHB0cjsKLSAgICBtX2N1cmxIYW5kbGUgPSBudWxscHRy
OwotfQotCi1SZXNvdXJjZVJlc3BvbnNlJiBSZXNvdXJjZUhhbmRsZUN1cmxEZWxlZ2F0ZTo6cmVz
cG9uc2UoKQotewotICAgIHJldHVybiBtX2hhbmRsZS0+Z2V0SW50ZXJuYWwoKS0+bV9yZXNwb25z
ZTsKLX0KLQotdm9pZCBSZXNvdXJjZUhhbmRsZUN1cmxEZWxlZ2F0ZTo6c2V0dXBBdXRoZW50aWNh
dGlvbigpCi17Ci0gICAgLy8gbV91c2VyL21fcGFzcyBhcmUgY3JlZGVudGlhbHMgZ2l2ZW4gbWFu
dWFsbHksIGZvciBpbnN0YW5jZSwgYnkgdGhlIGFyZ3VtZW50cyBwYXNzZWQgdG8gWE1MSHR0cFJl
cXVlc3Qub3BlbigpLgotICAgIFN0cmluZyBwYXJ0aXRpb24gPSBtX2ZpcnN0UmVxdWVzdC5jYWNo
ZVBhcnRpdGlvbigpOworICAgIGlmICghbV9oYW5kbGUpCisgICAgICAgIHJldHVybiB0cnVlOwog
Ci0gICAgaWYgKG1fc2hvdWxkVXNlQ3JlZGVudGlhbFN0b3JhZ2UpIHsKLSAgICAgICAgaWYgKG1f
dXNlci5pc0VtcHR5KCkgJiYgbV9wYXNzLmlzRW1wdHkoKSkgewotICAgICAgICAgICAgLy8gPHJk
YXI6Ly9wcm9ibGVtLzcxNzQwNTA+IC0gRm9yIFVSTHMgdGhhdCBtYXRjaCB0aGUgcGF0aHMgb2Yg
dGhvc2UgcHJldmlvdXNseSBjaGFsbGVuZ2VkIGZvciBIVFRQIEJhc2ljIGF1dGhlbnRpY2F0aW9u
LCAKLSAgICAgICAgICAgIC8vIHRyeSBhbmQgcmV1c2UgdGhlIGNyZWRlbnRpYWwgcHJlZW1wdGl2
ZWx5LCBhcyBhbGxvd2VkIGJ5IFJGQyAyNjE3LgotICAgICAgICAgICAgbV9pbml0aWFsQ3JlZGVu
dGlhbCA9IENyZWRlbnRpYWxTdG9yYWdlOjpkZWZhdWx0Q3JlZGVudGlhbFN0b3JhZ2UoKS5nZXQo
cGFydGl0aW9uLCBtX2ZpcnN0UmVxdWVzdC51cmwoKSk7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAg
ICAgICAgICAvLyBJZiB0aGVyZSBpcyBhbHJlYWR5IGEgcHJvdGVjdGlvbiBzcGFjZSBrbm93biBm
b3IgdGhlIFVSTCwgdXBkYXRlIHN0b3JlZCBjcmVkZW50aWFscwotICAgICAgICAgICAgLy8gYmVm
b3JlIHNlbmRpbmcgYSByZXF1ZXN0LiBUaGlzIG1ha2VzIGl0IHBvc3NpYmxlIHRvIGltcGxlbWVu
dCBsb2dvdXQgYnkgc2VuZGluZyBhbgotICAgICAgICAgICAgLy8gWE1MSHR0cFJlcXVlc3Qgd2l0
aCBrbm93biBpbmNvcnJlY3QgY3JlZGVudGlhbHMsIGFuZCBhYm9ydGluZyBpdCBpbW1lZGlhdGVs
eSAoc28gdGhhdAotICAgICAgICAgICAgLy8gYW4gYXV0aGVudGljYXRpb24gZGlhbG9nIGRvZXNu
J3QgcG9wIHVwKS4KLSAgICAgICAgICAgIENyZWRlbnRpYWxTdG9yYWdlOjpkZWZhdWx0Q3JlZGVu
dGlhbFN0b3JhZ2UoKS5zZXQocGFydGl0aW9uLCBDcmVkZW50aWFsKG1fdXNlciwgbV9wYXNzLCBD
cmVkZW50aWFsUGVyc2lzdGVuY2VOb25lKSwgbV9maXJzdFJlcXVlc3QudXJsKCkpOwotICAgICAg
ICB9Ci0gICAgfQorICAgIHJldHVybiAhbV9oYW5kbGUtPmNsaWVudCgpOwogfQogCi12b2lkIFJl
c291cmNlSGFuZGxlQ3VybERlbGVnYXRlOjpkaWRSZWNlaXZlQWxsSGVhZGVycyhjb25zdCBDdXJs
UmVzcG9uc2UmIHJlY2VpdmVkUmVzcG9uc2UpCit2b2lkIFJlc291cmNlSGFuZGxlQ3VybERlbGVn
YXRlOjpjdXJsRGlkUmVjZWl2ZVJlc3BvbnNlKGNvbnN0IEN1cmxSZXNwb25zZSYgcmVjZWl2ZWRS
ZXNwb25zZSkKIHsKICAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOworICAgIEFTU0VSVCghbV9k
ZWZlcnNMb2FkaW5nKTsKKworICAgIGlmIChjYW5jZWxsZWRPckNsaWVudGxlc3MoKSkKKyAgICAg
ICAgcmV0dXJuOwogCiAgICAgbV9oYW5kbGUtPmdldEludGVybmFsKCktPm1fcmVzcG9uc2UgPSBS
ZXNvdXJjZVJlc3BvbnNlKHJlY2VpdmVkUmVzcG9uc2UpOwogCisgICAgaWYgKG1fY3VybFJlcXVl
c3QpCisgICAgICAgIG1faGFuZGxlLT5nZXRJbnRlcm5hbCgpLT5tX3Jlc3BvbnNlLnNldERlcHJl
Y2F0ZWROZXR3b3JrTG9hZE1ldHJpY3MobV9jdXJsUmVxdWVzdC0+Z2V0TmV0d29ya0xvYWRNZXRy
aWNzKCkpOworCiAgICAgaWYgKHJlc3BvbnNlKCkuaXNNdWx0aXBhcnQoKSkgewogICAgICAgICBT
dHJpbmcgYm91bmRhcnk7CiAgICAgICAgIGJvb2wgcGFyc2VkID0gTXVsdGlwYXJ0SGFuZGxlOjpl
eHRyYWN0Qm91bmRhcnkocmVzcG9uc2UoKS5odHRwSGVhZGVyRmllbGQoSFRUUEhlYWRlck5hbWU6
OkNvbnRlbnRUeXBlKSwgYm91bmRhcnkpOwpAQCAtMzQ2LDM2ICsyMTcsMzkgQEAgdm9pZCBSZXNv
dXJjZUhhbmRsZUN1cmxEZWxlZ2F0ZTo6ZGlkUmVjZWl2ZUFsbEhlYWRlcnMoY29uc3QgQ3VybFJl
c3BvbnNlJiByZWNlaXYKIAogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9Ci0gICAgfSBl
bHNlIGlmIChyZXNwb25zZSgpLmlzVW5hdXRob3JpemVkKCkpIHsKKyAgICB9CisKKyAgICBpZiAo
cmVzcG9uc2UoKS5pc1VuYXV0aG9yaXplZCgpKSB7CiAgICAgICAgIEF1dGhlbnRpY2F0aW9uQ2hh
bGxlbmdlIGNoYWxsZW5nZShyZWNlaXZlZFJlc3BvbnNlLCBtX2F1dGhGYWlsdXJlQ291bnQsIHJl
c3BvbnNlKCksIG1faGFuZGxlKTsKICAgICAgICAgbV9oYW5kbGUtPmRpZFJlY2VpdmVBdXRoZW50
aWNhdGlvbkNoYWxsZW5nZShjaGFsbGVuZ2UpOwogICAgICAgICBtX2F1dGhGYWlsdXJlQ291bnQr
KzsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIG1fZGlkTm90aWZ5UmVzcG9uc2UgPSB0
cnVlOwotCiAgICAgaWYgKG1faGFuZGxlLT5jbGllbnQoKSkgewogICAgICAgICBpZiAocmVzcG9u
c2UoKS5pc05vdE1vZGlmaWVkKCkpIHsKLSAgICAgICAgICAgIGNvbnN0IFN0cmluZyYgdXJsID0g
bV9maXJzdFJlcXVlc3QudXJsKCkuc3RyaW5nKCk7Ci0gICAgICAgICAgICBpZiAoQ3VybENhY2hl
TWFuYWdlcjo6Z2V0SW5zdGFuY2UoKS5nZXRDYWNoZWRSZXNwb25zZSh1cmwsIHJlc3BvbnNlKCkp
KSB7CisgICAgICAgICAgICBVUkwgY2FjaGVVcmwgPSBtX2N1cnJlbnRSZXF1ZXN0LnVybCgpOwor
ICAgICAgICAgICAgY2FjaGVVcmwucmVtb3ZlRnJhZ21lbnRJZGVudGlmaWVyKCk7CisKKyAgICAg
ICAgICAgIGlmIChDdXJsQ2FjaGVNYW5hZ2VyOjpnZXRJbnN0YW5jZSgpLmdldENhY2hlZFJlc3Bv
bnNlKGNhY2hlVXJsLCByZXNwb25zZSgpKSkgewogICAgICAgICAgICAgICAgIGlmIChtX2FkZGVk
Q2FjaGVWYWxpZGF0aW9uSGVhZGVycykgewogICAgICAgICAgICAgICAgICAgICByZXNwb25zZSgp
LnNldEhUVFBTdGF0dXNDb2RlKDIwMCk7CiAgICAgICAgICAgICAgICAgICAgIHJlc3BvbnNlKCku
c2V0SFRUUFN0YXR1c1RleHQoIk9LIik7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAg
fQogICAgICAgICB9CisKICAgICAgICAgQ3VybENhY2hlTWFuYWdlcjo6Z2V0SW5zdGFuY2UoKS5k
aWRSZWNlaXZlUmVzcG9uc2UoKm1faGFuZGxlLCByZXNwb25zZSgpKTsKICAgICAgICAgbV9oYW5k
bGUtPmNsaWVudCgpLT5kaWRSZWNlaXZlUmVzcG9uc2UobV9oYW5kbGUsIFJlc291cmNlUmVzcG9u
c2UocmVzcG9uc2UoKSkpOwogICAgIH0KIH0KIAotdm9pZCBSZXNvdXJjZUhhbmRsZUN1cmxEZWxl
Z2F0ZTo6ZGlkUmVjZWl2ZUNvbnRlbnREYXRhKFJlZjxTaGFyZWRCdWZmZXI+JiYgYnVmZmVyKQor
dm9pZCBSZXNvdXJjZUhhbmRsZUN1cmxEZWxlZ2F0ZTo6Y3VybERpZFJlY2VpdmVCdWZmZXIoUmVm
PFNoYXJlZEJ1ZmZlcj4mJiBidWZmZXIpCiB7CiAgICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsK
IAotICAgIGlmICghbV9kaWROb3RpZnlSZXNwb25zZSkKLSAgICAgICAgaGFuZGxlTG9jYWxSZWNl
aXZlUmVzcG9uc2UoKTsKKyAgICBpZiAoY2FuY2VsbGVkT3JDbGllbnRsZXNzKCkpCisgICAgICAg
IHJldHVybjsKIAogICAgIGlmIChtX211bHRpcGFydEhhbmRsZSkKICAgICAgICAgbV9tdWx0aXBh
cnRIYW5kbGUtPmNvbnRlbnRSZWNlaXZlZChidWZmZXItPmRhdGEoKSwgYnVmZmVyLT5zaXplKCkp
OwpAQCAtMzg1LDY0ICsyNTksMTUgQEAgdm9pZCBSZXNvdXJjZUhhbmRsZUN1cmxEZWxlZ2F0ZTo6
ZGlkUmVjZWl2ZUNvbnRlbnREYXRhKFJlZjxTaGFyZWRCdWZmZXI+JiYgYnVmZmUKICAgICB9CiB9
CiAKLXZvaWQgUmVzb3VyY2VIYW5kbGVDdXJsRGVsZWdhdGU6OmhhbmRsZUxvY2FsUmVjZWl2ZVJl
c3BvbnNlKCkKLXsKLSAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOwotCi0gICAgLy8gc2luY2Ug
dGhlIGNvZGUgaW4gaGVhZGVyQ2FsbGJhY2sgd2lsbCBub3QgaGF2ZSBydW4gZm9yIGxvY2FsIGZp
bGVzCi0gICAgLy8gdGhlIGNvZGUgdG8gc2V0IHRoZSBVUkwgYW5kIGZpcmUgZGlkUmVjZWl2ZVJl
c3BvbnNlIGlzIG5ldmVyIHJ1biwKLSAgICAvLyB3aGljaCBtZWFucyB0aGUgUmVzb3VyY2VMb2Fk
ZXIncyByZXNwb25zZSBkb2VzIG5vdCBjb250YWluIHRoZSBVUkwuCi0gICAgLy8gUnVuIHRoZSBj
b2RlIGhlcmUgZm9yIGxvY2FsIGZpbGVzIHRvIHJlc29sdmUgdGhlIGlzc3VlLgotICAgIC8vIFRP
RE86IFNlZSBpZiB0aGVyZSBpcyBhIGJldHRlciBhcHByb2FjaCBmb3IgaGFuZGxpbmcgdGhpcy4K
LSAgICBVUkwgdXJsID0gbV9jdXJsSGFuZGxlLT5nZXRFZmZlY3RpdmVVUkwoKTsKLSAgICBBU1NF
UlQodXJsLmlzVmFsaWQoKSk7Ci0gICAgcmVzcG9uc2UoKS5zZXRVUkwodXJsKTsKLQotICAgIC8v
IERldGVybWluZSB0aGUgTUlNRSB0eXBlIGJhc2VkIG9uIHRoZSBwYXRoLgotICAgIHJlc3BvbnNl
KCkuc2V0TWltZVR5cGUoTUlNRVR5cGVSZWdpc3RyeTo6Z2V0TUlNRVR5cGVGb3JQYXRoKHVybCkp
OwotCi0gICAgbV9kaWROb3RpZnlSZXNwb25zZSA9IHRydWU7Ci0KLSAgICBpZiAobV9oYW5kbGUt
PmNsaWVudCgpKQotICAgICAgICBtX2hhbmRsZS0+Y2xpZW50KCktPmRpZFJlY2VpdmVSZXNwb25z
ZShtX2hhbmRsZSwgUmVzb3VyY2VSZXNwb25zZShyZXNwb25zZSgpKSk7Ci19Ci0KLXZvaWQgUmVz
b3VyY2VIYW5kbGVDdXJsRGVsZWdhdGU6OnByZXBhcmVTZW5kRGF0YShjaGFyKiBidWZmZXIsIHNp
emVfdCBibG9ja1NpemUsIHNpemVfdCBudW1iZXJPZkJsb2NrcykKK3ZvaWQgUmVzb3VyY2VIYW5k
bGVDdXJsRGVsZWdhdGU6OmN1cmxEaWRDb21wbGV0ZSgpCiB7CiAgICAgQVNTRVJUKGlzTWFpblRo
cmVhZCgpKTsKLSAgICBBU1NFUlQoIW1fc2VuZEJ5dGVzKTsKLQotICAgIHN0ZDo6dW5pcXVlX2xv
Y2s8TG9jaz4gbG9jayhtX3dvcmtlclRocmVhZE11dGV4KTsKLQotICAgIGlmICghbV9mb3JtRGF0
YVN0cmVhbSB8fCAhbV9mb3JtRGF0YVN0cmVhbS0+aGFzTW9yZUVsZW1lbnRzKCkpIHsKLSAgICAg
ICAgbV93b3JrZXJUaHJlYWRDb25kaXRpb25WYXJpYWJsZS5ub3RpZnlPbmUoKTsKLSAgICAgICAg
cmV0dXJuOwotICAgIH0KIAotICAgIHNpemVfdCBzaXplID0gbV9mb3JtRGF0YVN0cmVhbS0+cmVh
ZChidWZmZXIsIGJsb2NrU2l6ZSwgbnVtYmVyT2ZCbG9ja3MpOwotICAgIGlmICghc2l6ZSkgewot
ICAgICAgICAvLyBTb21ldGhpbmcgd2VudCB3cm9uZyBzbyBjYW5jZWwgdGhlIGpvYi4KLSAgICAg
ICAgbV9oYW5kbGUtPmNhbmNlbCgpOwotICAgICAgICBtX3dvcmtlclRocmVhZENvbmRpdGlvblZh
cmlhYmxlLm5vdGlmeU9uZSgpOworICAgIGlmIChjYW5jZWxsZWRPckNsaWVudGxlc3MoKSkKICAg
ICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIG1fc2VuZEJ5dGVzID0gc2l6ZTsKLSAgICBtX3dv
cmtlclRocmVhZENvbmRpdGlvblZhcmlhYmxlLm5vdGlmeU9uZSgpOwotfQogCi12b2lkIFJlc291
cmNlSGFuZGxlQ3VybERlbGVnYXRlOjpkaWRGaW5pc2goTmV0d29ya0xvYWRNZXRyaWNzIG5ldHdv
cmtMb2FkTWV0cmljcykKLXsKLSAgICByZXNwb25zZSgpLnNldERlcHJlY2F0ZWROZXR3b3JrTG9h
ZE1ldHJpY3MobmV0d29ya0xvYWRNZXRyaWNzKTsKLQotICAgIGlmICghbV9oYW5kbGUpCi0gICAg
ICAgIHJldHVybjsKLQotICAgIGlmICghbV9kaWROb3RpZnlSZXNwb25zZSkgewotICAgICAgICBo
YW5kbGVMb2NhbFJlY2VpdmVSZXNwb25zZSgpOwotICAgICAgICBpZiAoIW1faGFuZGxlKQotICAg
ICAgICAgICAgcmV0dXJuOwotICAgIH0KKyAgICBpZiAobV9jdXJsUmVxdWVzdCkKKyAgICAgICAg
bV9oYW5kbGUtPmdldEludGVybmFsKCktPm1fcmVzcG9uc2Uuc2V0RGVwcmVjYXRlZE5ldHdvcmtM
b2FkTWV0cmljcyhtX2N1cmxSZXF1ZXN0LT5nZXROZXR3b3JrTG9hZE1ldHJpY3MoKSk7CiAKICAg
ICBpZiAobV9tdWx0aXBhcnRIYW5kbGUpCiAgICAgICAgIG1fbXVsdGlwYXJ0SGFuZGxlLT5jb250
ZW50RW5kZWQoKTsKQEAgLTQ1MywxNSArMjc4LDIwIEBAIHZvaWQgUmVzb3VyY2VIYW5kbGVDdXJs
RGVsZWdhdGU6OmRpZEZpbmlzaChOZXR3b3JrTG9hZE1ldHJpY3MgbmV0d29ya0xvYWRNZXRyaWNz
CiAgICAgfQogfQogCi12b2lkIFJlc291cmNlSGFuZGxlQ3VybERlbGVnYXRlOjpkaWRGYWlsKGNv
bnN0IFJlc291cmNlRXJyb3ImIHJlc291cmNlRXJyb3IpCit2b2lkIFJlc291cmNlSGFuZGxlQ3Vy
bERlbGVnYXRlOjpjdXJsRGlkRmFpbFdpdGhFcnJvcihjb25zdCBSZXNvdXJjZUVycm9yJiByZXNv
dXJjZUVycm9yKQogewotICAgIGlmICghbV9oYW5kbGUpCisgICAgQVNTRVJUKGlzTWFpblRocmVh
ZCgpKTsKKworICAgIGlmIChjYW5jZWxsZWRPckNsaWVudGxlc3MoKSkKICAgICAgICAgcmV0dXJu
OwogCi0gICAgaWYgKG1faGFuZGxlLT5jbGllbnQoKSkgewotICAgICAgICBDdXJsQ2FjaGVNYW5h
Z2VyOjpnZXRJbnN0YW5jZSgpLmRpZEZhaWwoKm1faGFuZGxlKTsKLSAgICAgICAgbV9oYW5kbGUt
PmNsaWVudCgpLT5kaWRGYWlsKG1faGFuZGxlLCByZXNvdXJjZUVycm9yKTsKLSAgICB9CisgICAg
Q3VybENhY2hlTWFuYWdlcjo6Z2V0SW5zdGFuY2UoKS5kaWRGYWlsKCptX2hhbmRsZSk7CisgICAg
bV9oYW5kbGUtPmNsaWVudCgpLT5kaWRGYWlsKG1faGFuZGxlLCByZXNvdXJjZUVycm9yKTsKK30K
KworUmVzb3VyY2VSZXNwb25zZSYgUmVzb3VyY2VIYW5kbGVDdXJsRGVsZWdhdGU6OnJlc3BvbnNl
KCkKK3sKKyAgICByZXR1cm4gbV9oYW5kbGUtPmdldEludGVybmFsKCktPm1fcmVzcG9uc2U7CiB9
CiAKIHZvaWQgUmVzb3VyY2VIYW5kbGVDdXJsRGVsZWdhdGU6OmhhbmRsZURhdGFVUkwoKQpAQCAt
NTI2LDMwNSArMzU2LDM3IEBAIHZvaWQgUmVzb3VyY2VIYW5kbGVDdXJsRGVsZWdhdGU6OmhhbmRs
ZURhdGFVUkwoKQogICAgICAgICBtX2hhbmRsZS0+Y2xpZW50KCktPmRpZEZpbmlzaExvYWRpbmco
bV9oYW5kbGUpOwogfQogCi12b2lkIFJlc291cmNlSGFuZGxlQ3VybERlbGVnYXRlOjpzZXR1cFBP
U1QoKQorc3RkOjpwYWlyPFN0cmluZywgU3RyaW5nPiBSZXNvdXJjZUhhbmRsZUN1cmxEZWxlZ2F0
ZTo6Z2V0Q3JlZGVudGlhbChSZXNvdXJjZVJlcXVlc3QmIHJlcXVlc3QsIGJvb2wgcmVkaXJlY3Qp
CiB7Ci0gICAgbV9jdXJsSGFuZGxlLT5lbmFibGVIdHRwUG9zdFJlcXVlc3QoKTsKLQotICAgIHNp
emVfdCBudW1FbGVtZW50cyA9IGdldEZvcm1FbGVtZW50c0NvdW50KCk7Ci0gICAgaWYgKCFudW1F
bGVtZW50cykKLSAgICAgICAgcmV0dXJuOwotCi0gICAgLy8gRG8gbm90IHN0cmVhbSBmb3Igc2lt
cGxlIFBPU1QgZGF0YQotICAgIGlmIChudW1FbGVtZW50cyA9PSAxKSB7Ci0gICAgICAgIG1fcG9z
dEJ5dGVzID0gbV9maXJzdFJlcXVlc3QuaHR0cEJvZHkoKS0+ZmxhdHRlbigpOwotICAgICAgICBp
ZiAobV9wb3N0Qnl0ZXMuc2l6ZSgpKQotICAgICAgICAgICAgbV9jdXJsSGFuZGxlLT5zZXRQb3N0
RmllbGRzKG1fcG9zdEJ5dGVzLmRhdGEoKSwgbV9wb3N0Qnl0ZXMuc2l6ZSgpKTsKLSAgICAgICAg
cmV0dXJuOwotICAgIH0KLQotICAgIHNldHVwRm9ybURhdGEodHJ1ZSk7Ci19Ci0KLXZvaWQgUmVz
b3VyY2VIYW5kbGVDdXJsRGVsZWdhdGU6OnNldHVwUFVUKCkKLXsKLSAgICBtX2N1cmxIYW5kbGUt
PmVuYWJsZUh0dHBQdXRSZXF1ZXN0KCk7Ci0KLSAgICAvLyBEaXNhYmxlIHRoZSBFeHBlY3Q6IDEw
MCBjb250aW51ZSBoZWFkZXIKLSAgICBtX2N1cmxIYW5kbGUtPnJlbW92ZVJlcXVlc3RIZWFkZXIo
IkV4cGVjdCIpOwotCi0gICAgc2l6ZV90IG51bUVsZW1lbnRzID0gZ2V0Rm9ybUVsZW1lbnRzQ291
bnQoKTsKLSAgICBpZiAoIW51bUVsZW1lbnRzKQotICAgICAgICByZXR1cm47Ci0KLSAgICBzZXR1
cEZvcm1EYXRhKGZhbHNlKTsKLX0KLQotc2l6ZV90IFJlc291cmNlSGFuZGxlQ3VybERlbGVnYXRl
OjpnZXRGb3JtRWxlbWVudHNDb3VudCgpCi17Ci0gICAgUmVmUHRyPEZvcm1EYXRhPiBmb3JtRGF0
YSA9IG1fZmlyc3RSZXF1ZXN0Lmh0dHBCb2R5KCk7Ci0gICAgaWYgKCFmb3JtRGF0YSkKLSAgICAg
ICAgcmV0dXJuIDA7Ci0KLSAgICAvLyBSZXNvbHZlIHRoZSBibG9iIGVsZW1lbnRzIHNvIHRoZSBm
b3JtRGF0YSBjYW4gY29ycmVjdGx5IHJlcG9ydCBpdCdzIHNpemUuCi0gICAgZm9ybURhdGEgPSBm
b3JtRGF0YS0+cmVzb2x2ZUJsb2JSZWZlcmVuY2VzKCk7Ci0gICAgc2l6ZV90IHNpemUgPSBmb3Jt
RGF0YS0+ZWxlbWVudHMoKS5zaXplKCk7Ci0gICAgbV9maXJzdFJlcXVlc3Quc2V0SFRUUEJvZHko
V1RGTW92ZShmb3JtRGF0YSkpOwotICAgIHJldHVybiBzaXplOwotfQotCi12b2lkIFJlc291cmNl
SGFuZGxlQ3VybERlbGVnYXRlOjpzZXR1cEZvcm1EYXRhKGJvb2wgaXNQb3N0UmVxdWVzdCkKLXsK
LSAgICBWZWN0b3I8Rm9ybURhdGFFbGVtZW50PiBlbGVtZW50cyA9IG1fZmlyc3RSZXF1ZXN0Lmh0
dHBCb2R5KCktPmVsZW1lbnRzKCk7Ci0gICAgc2l6ZV90IG51bUVsZW1lbnRzID0gZWxlbWVudHMu
c2l6ZSgpOwotCi0gICAgc3RhdGljIGNvbnN0IGxvbmcgbG9uZyBtYXhDdXJsT2ZmVCA9IG1fY3Vy
bEhhbmRsZS0+bWF4Q3VybE9mZlQoKTsKLQotICAgIC8vIE9idGFpbiB0aGUgdG90YWwgc2l6ZSBv
ZiB0aGUgZm9ybSBkYXRhCi0gICAgY3VybF9vZmZfdCBzaXplID0gMDsKLSAgICBib29sIGNodW5r
ZWRUcmFuc2ZlciA9IGZhbHNlOwotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbnVtRWxlbWVu
dHM7IGkrKykgewotICAgICAgICBGb3JtRGF0YUVsZW1lbnQgZWxlbWVudCA9IGVsZW1lbnRzW2ld
OwotICAgICAgICBpZiAoZWxlbWVudC5tX3R5cGUgPT0gRm9ybURhdGFFbGVtZW50OjpUeXBlOjpF
bmNvZGVkRmlsZSkgewotICAgICAgICAgICAgbG9uZyBsb25nIGZpbGVTaXplUmVzdWx0OwotICAg
ICAgICAgICAgaWYgKGdldEZpbGVTaXplKGVsZW1lbnQubV9maWxlbmFtZSwgZmlsZVNpemVSZXN1
bHQpKSB7Ci0gICAgICAgICAgICAgICAgaWYgKGZpbGVTaXplUmVzdWx0ID4gbWF4Q3VybE9mZlQp
IHsKLSAgICAgICAgICAgICAgICAgICAgLy8gRmlsZSBzaXplIGlzIHRvbyBiaWcgZm9yIHNwZWNp
ZnlpbmcgaXQgdG8gY1VSTAotICAgICAgICAgICAgICAgICAgICBjaHVua2VkVHJhbnNmZXIgPSB0
cnVlOwotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICB9Ci0gICAg
ICAgICAgICAgICAgc2l6ZSArPSBmaWxlU2l6ZVJlc3VsdDsKLSAgICAgICAgICAgIH0gZWxzZSB7
Ci0gICAgICAgICAgICAgICAgY2h1bmtlZFRyYW5zZmVyID0gdHJ1ZTsKLSAgICAgICAgICAgICAg
ICBicmVhazsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICBzaXpl
ICs9IGVsZW1lbnRzW2ldLm1fZGF0YS5zaXplKCk7Ci0gICAgfQorICAgIC8vIG1fdXNlci9tX3Bh
c3MgYXJlIGNyZWRlbnRpYWxzIGdpdmVuIG1hbnVhbGx5LCBmb3IgaW5zdGFuY2UsIGJ5IHRoZSBh
cmd1bWVudHMgcGFzc2VkIHRvIFhNTEh0dHBSZXF1ZXN0Lm9wZW4oKS4KKyAgICBTdHJpbmcgcGFy
dGl0aW9uID0gcmVxdWVzdC5jYWNoZVBhcnRpdGlvbigpOwogCi0gICAgLy8gY1VSTCBndWVzc2Vz
IHRoYXQgd2Ugd2FudCBjaHVua2VkIGVuY29kaW5nIGFzIGxvbmcgYXMgd2Ugc3BlY2lmeSB0aGUg
aGVhZGVyCi0gICAgaWYgKGNodW5rZWRUcmFuc2ZlcikKLSAgICAgICAgbV9jdXJsSGFuZGxlLT5h
cHBlbmRSZXF1ZXN0SGVhZGVyKCJUcmFuc2Zlci1FbmNvZGluZzogY2h1bmtlZCIpOwotICAgIGVs
c2UgewotICAgICAgICBpZiAoaXNQb3N0UmVxdWVzdCkKLSAgICAgICAgICAgIG1fY3VybEhhbmRs
ZS0+c2V0UG9zdEZpZWxkTGFyZ2Uoc2l6ZSk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIG1f
Y3VybEhhbmRsZS0+c2V0SW5GaWxlU2l6ZUxhcmdlKHNpemUpOworICAgIGlmIChtX3Nob3VsZFVz
ZUNyZWRlbnRpYWxTdG9yYWdlKSB7CisgICAgICAgIGlmIChtX3VzZXIuaXNFbXB0eSgpICYmIG1f
cGFzcy5pc0VtcHR5KCkpIHsKKyAgICAgICAgICAgIC8vIDxyZGFyOi8vcHJvYmxlbS83MTc0MDUw
PiAtIEZvciBVUkxzIHRoYXQgbWF0Y2ggdGhlIHBhdGhzIG9mIHRob3NlIHByZXZpb3VzbHkgY2hh
bGxlbmdlZCBmb3IgSFRUUCBCYXNpYyBhdXRoZW50aWNhdGlvbiwgCisgICAgICAgICAgICAvLyB0
cnkgYW5kIHJldXNlIHRoZSBjcmVkZW50aWFsIHByZWVtcHRpdmVseSwgYXMgYWxsb3dlZCBieSBS
RkMgMjYxNy4KKyAgICAgICAgICAgIG1faW5pdGlhbENyZWRlbnRpYWwgPSBDcmVkZW50aWFsU3Rv
cmFnZTo6ZGVmYXVsdENyZWRlbnRpYWxTdG9yYWdlKCkuZ2V0KHBhcnRpdGlvbiwgcmVxdWVzdC51
cmwoKSk7CisgICAgICAgIH0gZWxzZSBpZiAoIXJlZGlyZWN0KSB7CisgICAgICAgICAgICAvLyBJ
ZiB0aGVyZSBpcyBhbHJlYWR5IGEgcHJvdGVjdGlvbiBzcGFjZSBrbm93biBmb3IgdGhlIFVSTCwg
dXBkYXRlIHN0b3JlZCBjcmVkZW50aWFscworICAgICAgICAgICAgLy8gYmVmb3JlIHNlbmRpbmcg
YSByZXF1ZXN0LiBUaGlzIG1ha2VzIGl0IHBvc3NpYmxlIHRvIGltcGxlbWVudCBsb2dvdXQgYnkg
c2VuZGluZyBhbgorICAgICAgICAgICAgLy8gWE1MSHR0cFJlcXVlc3Qgd2l0aCBrbm93biBpbmNv
cnJlY3QgY3JlZGVudGlhbHMsIGFuZCBhYm9ydGluZyBpdCBpbW1lZGlhdGVseSAoc28gdGhhdAor
ICAgICAgICAgICAgLy8gYW4gYXV0aGVudGljYXRpb24gZGlhbG9nIGRvZXNuJ3QgcG9wIHVwKS4K
KyAgICAgICAgICAgIENyZWRlbnRpYWxTdG9yYWdlOjpkZWZhdWx0Q3JlZGVudGlhbFN0b3JhZ2Uo
KS5zZXQocGFydGl0aW9uLCBDcmVkZW50aWFsKG1fdXNlciwgbV9wYXNzLCBDcmVkZW50aWFsUGVy
c2lzdGVuY2VOb25lKSwgcmVxdWVzdC51cmwoKSk7CisgICAgICAgIH0KICAgICB9CiAKLSAgICBt
X2Zvcm1EYXRhU3RyZWFtID0gc3RkOjptYWtlX3VuaXF1ZTxGb3JtRGF0YVN0cmVhbT4oKTsKLSAg
ICBtX2Zvcm1EYXRhU3RyZWFtLT5zZXRIVFRQQm9keShtX2ZpcnN0UmVxdWVzdC5odHRwQm9keSgp
KTsKLQotICAgIG1fY3VybEhhbmRsZS0+c2V0UmVhZENhbGxiYWNrRnVuY3Rpb24od2lsbFNlbmRE
YXRhQ2FsbGJhY2ssIHRoaXMpOwotfQotCi12b2lkIFJlc291cmNlSGFuZGxlQ3VybERlbGVnYXRl
OjphcHBseUF1dGhlbnRpY2F0aW9uKCkKLXsKICAgICBTdHJpbmcgdXNlciA9IG1fdXNlcjsKICAg
ICBTdHJpbmcgcGFzc3dvcmQgPSBtX3Bhc3M7CiAKICAgICBpZiAoIW1faW5pdGlhbENyZWRlbnRp
YWwuaXNFbXB0eSgpKSB7CiAgICAgICAgIHVzZXIgPSBtX2luaXRpYWxDcmVkZW50aWFsLnVzZXIo
KTsKICAgICAgICAgcGFzc3dvcmQgPSBtX2luaXRpYWxDcmVkZW50aWFsLnBhc3N3b3JkKCk7Ci0g
ICAgICAgIG1fY3VybEhhbmRsZS0+ZW5hYmxlSHR0cEF1dGhlbnRpY2F0aW9uKENVUkxBVVRIX0JB
U0lDKTsKICAgICB9CiAKLSAgICAvLyBJdCBzZWVtcyB3ZSBuZWVkIHRvIHNldCBDVVJMT1BUX1VT
RVJQV0QgZXZlbiBpZiB1c2VybmFtZSBhbmQgcGFzc3dvcmQgaXMgZW1wdHkuCi0gICAgLy8gT3Ro
ZXJ3aXNlIGNVUkwgd2lsbCBub3QgYXV0b21hdGljYWxseSBjb250aW51ZSB3aXRoIGEgbmV3IHJl
cXVlc3QgYWZ0ZXIgYSA0MDEgcmVzcG9uc2UuCi0KLSAgICAvLyBjdXJsIENVUkxPUFRfVVNFUlBX
RCBleHBlY3RzIHVzZXJuYW1lOnBhc3N3b3JkCi0gICAgbV9jdXJsSGFuZGxlLT5zZXRIdHRwQXV0
aFVzZXJQYXNzKHVzZXIsIHBhc3N3b3JkKTsKLX0KLQotTmV0d29ya0xvYWRNZXRyaWNzIFJlc291
cmNlSGFuZGxlQ3VybERlbGVnYXRlOjpnZXROZXR3b3JrTG9hZE1ldHJpY3MoKQotewotICAgIE5l
dHdvcmtMb2FkTWV0cmljcyBuZXR3b3JrTG9hZE1ldHJpY3M7Ci0gICAgaWYgKGF1dG8gbWV0cmlj
cyA9IG1fY3VybEhhbmRsZS0+Z2V0TmV0d29ya0xvYWRNZXRyaWNzKCkpCi0gICAgICAgIG5ldHdv
cmtMb2FkTWV0cmljcyA9ICptZXRyaWNzOwotCi0gICAgcmV0dXJuIG5ldHdvcmtMb2FkTWV0cmlj
czsKLX0KKyAgICBpZiAodXNlci5pc0VtcHR5KCkgJiYgcGFzc3dvcmQuaXNFbXB0eSgpKQorICAg
ICAgICByZXR1cm4gc3RkOjpwYWlyPFN0cmluZywgU3RyaW5nPigiIiwgIiIpOwogCi1DVVJMY29k
ZSBSZXNvdXJjZUhhbmRsZUN1cmxEZWxlZ2F0ZTo6d2lsbFNldHVwU3NsQ3R4KHZvaWQqIHNzbEN0
eCkKLXsKLSAgICBtX3NzbFZlcmlmaWVyLnNldEN1cmxIYW5kbGUobV9jdXJsSGFuZGxlLmdldCgp
KTsKLSAgICBtX3NzbFZlcmlmaWVyLnNldEhvc3ROYW1lKG1fZmlyc3RSZXF1ZXN0LnVybCgpLmhv
c3QoKSk7Ci0gICAgbV9zc2xWZXJpZmllci5zZXRTc2xDdHgoc3NsQ3R4KTsKLQotICAgIHJldHVy
biBDVVJMRV9PSzsKLX0KLQotLyoKLSogVGhpcyBpcyBiZWluZyBjYWxsZWQgZm9yIGVhY2ggSFRU
UCBoZWFkZXIgaW4gdGhlIHJlc3BvbnNlLiBUaGlzIGluY2x1ZGVzICdcclxuJwotKiBmb3IgdGhl
IGxhc3QgbGluZSBvZiB0aGUgaGVhZGVyLgotKgotKiBXZSB3aWxsIGFkZCBlYWNoIEhUVFAgSGVh
ZGVyIHRvIHRoZSBSZXNvdXJjZVJlc3BvbnNlIGFuZCBvbiB0aGUgdGVybWluYXRpb24KLSogb2Yg
dGhlIGhlYWRlciAoXHJcbikgd2Ugd2lsbCBwYXJzZSBDb250ZW50LVR5cGUgYW5kIENvbnRlbnQt
RGlzcG9zaXRpb24gYW5kCi0qIHVwZGF0ZSB0aGUgUmVzb3VyY2VSZXNwb25zZSBhbmQgdGhlbiBz
ZW5kIGl0IGF3YXkuCi0qCi0qLwotc2l6ZV90IFJlc291cmNlSGFuZGxlQ3VybERlbGVnYXRlOjpk
aWRSZWNlaXZlSGVhZGVyKFN0cmluZyYmIGhlYWRlcikKLXsKLSAgICBzdGF0aWMgY29uc3QgYXV0
byBlbXB0eUxpbmVDUkxGID0gIlxyXG4iOwotICAgIHN0YXRpYyBjb25zdCBhdXRvIGVtcHR5TGlu
ZUxGID0gIlxuIjsKLQotICAgIGlmICghbV9oYW5kbGUpCi0gICAgICAgIHJldHVybiAwOwotCi0g
ICAgaWYgKG1fZGVmZXJzTG9hZGluZykKLSAgICAgICAgcmV0dXJuIDA7Ci0KLSAgICBzaXplX3Qg
cmVjZWl2ZUJ5dGVzID0gaGVhZGVyLmxlbmd0aCgpOwotCi0gICAgLy8gVGhlIEhUVFAgc3RhbmRh
cmQgcmVxdWlyZXMgdG8gdXNlIFxyXG4gYnV0IGZvciBjb21wYXRpYmlsaXR5IGl0IHJlY29tbWVu
ZHMgdG8gYWNjZXB0IGFsc28gXG4uCi0gICAgLy8gV2Ugd2lsbCBhZGQgdGhlIGN1cnJlbnQgaGVh
ZGVyIHRvIHRoZSBDdXJsUmVzcG9uc2UuaGVhZGVycwotICAgIGlmICgoaGVhZGVyICE9IGVtcHR5
TGluZUNSTEYpICYmIChoZWFkZXIgIT0gZW1wdHlMaW5lTEYpKSB7Ci0gICAgICAgIG1fcmVzcG9u
c2UuaGVhZGVycy5hcHBlbmQoV1RGTW92ZShoZWFkZXIpKTsKLSAgICAgICAgcmV0dXJuIHJlY2Vp
dmVCeXRlczsKLSAgICB9Ci0KLSAgICAvLyBXZSBjYW4gZmluaXNoIGFuZCBzZW5kIHRoZSBSZXNv
dXJjZVJlc3BvbnNlCi0gICAgbG9uZyBzdGF0dXNDb2RlID0gMDsKLSAgICBpZiAoYXV0byBjb2Rl
ID0gbV9jdXJsSGFuZGxlLT5nZXRSZXNwb25zZUNvZGUoKSkKLSAgICAgICAgc3RhdHVzQ29kZSA9
ICpjb2RlOwotCi0gICAgbG9uZyBodHRwQ29ubmVjdENvZGUgPSAwOwotICAgIGlmIChhdXRvIGNv
ZGUgPSBtX2N1cmxIYW5kbGUtPmdldEh0dHBDb25uZWN0Q29kZSgpKQotICAgICAgICBodHRwQ29u
bmVjdENvZGUgPSAqY29kZTsKLQotICAgIGlmICgoMTAwIDw9IHN0YXR1c0NvZGUpICYmIChzdGF0
dXNDb2RlIDwgMjAwKSkgewotICAgICAgICAvLyBKdXN0IHJldHVybiB3aGVuIHJlY2VpdmluZyBo
dHRwIGluZm8sIGUuZy4gSFRUUC8xLjEgMTAwIENvbnRpbnVlLgotICAgICAgICAvLyBJZiBub3Qs
IHRoZSByZXF1ZXN0IG1pZ2h0IGJlIGNhbmNlbGxlZCwgYmVjYXVzZSB0aGUgTUlNRSB0eXBlIHdp
bGwgYmUgZW1wdHkgZm9yIHRoaXMgcmVzcG9uc2UuCi0gICAgICAgIG1fcmVzcG9uc2UgPSBDdXJs
UmVzcG9uc2UoKTsKLSAgICAgICAgcmV0dXJuIHJlY2VpdmVCeXRlczsKLSAgICB9Ci0KLSAgICBp
ZiAoIXN0YXR1c0NvZGUgJiYgKGh0dHBDb25uZWN0Q29kZSA9PSAyMDApKSB7Ci0gICAgICAgIC8v
IENvbWVzIGhlcmUgd2hlbiByZWNlaXZpbmcgMjAwIENvbm5lY3Rpb24gRXN0YWJsaXNoZWQuIEp1
c3QgcmV0dXJuLgotICAgICAgICBtX3Jlc3BvbnNlID0gQ3VybFJlc3BvbnNlKCk7Ci0gICAgICAg
IHJldHVybiByZWNlaXZlQnl0ZXM7Ci0gICAgfQotCi0gICAgLy8gSWYgdGhlIEZPTExPV0xPQ0FU
SU9OIG9wdGlvbiBpcyBlbmFibGVkIGZvciB0aGUgY3VybCBoYW5kbGUgdGhlbgotICAgIC8vIGN1
cmwgd2lsbCBmb2xsb3cgdGhlIHJlZGlyZWN0aW9ucyBpbnRlcm5hbGx5LiBUaHVzIHRoaXMgaGVh
ZGVyIGNhbGxiYWNrCi0gICAgLy8gd2lsbCBiZSBjYWxsZWQgbW9yZSB0aGFuIG9uZSB0aW1lIHdp
dGggdGhlIGxpbmUgc3RhcnRpbmcgIkhUVFAiIGZvciBvbmUgam9iLgotCi0gICAgbV9yZXNwb25z
ZS51cmwgPSBtX2N1cmxIYW5kbGUtPmdldEVmZmVjdGl2ZVVSTCgpOwotICAgIG1fcmVzcG9uc2Uu
c3RhdHVzQ29kZSA9IHN0YXR1c0NvZGU7Ci0KLSAgICBpZiAoYXV0byBsZW5ndGggPSBtX2N1cmxI
YW5kbGUtPmdldENvbnRlbnRMZW5ndGgoKSkKLSAgICAgICAgbV9yZXNwb25zZS5leHBlY3RlZENv
bnRlbnRMZW5ndGggPSAqbGVuZ3RoOwotCi0gICAgaWYgKGF1dG8gcG9ydCA9IG1fY3VybEhhbmRs
ZS0+Z2V0UHJpbWFyeVBvcnQoKSkKLSAgICAgICAgbV9yZXNwb25zZS5jb25uZWN0UG9ydCA9ICpw
b3J0OwotCi0gICAgaWYgKGF1dG8gYXV0aCA9IG1fY3VybEhhbmRsZS0+Z2V0SHR0cEF1dGhBdmFp
bCgpKQotICAgICAgICBtX3Jlc3BvbnNlLmF2YWlsYWJsZUh0dHBBdXRoID0gKmF1dGg7Ci0KLSAg
ICBpZiAoaXNNYWluVGhyZWFkKCkpCi0gICAgICAgIGRpZFJlY2VpdmVBbGxIZWFkZXJzKG1fcmVz
cG9uc2UpOwotICAgIGVsc2UgewotICAgICAgICBjYWxsT25NYWluVGhyZWFkKFtwcm90ZWN0ZWRU
aGlzID0gbWFrZVJlZigqdGhpcyksIHJlc3BvbnNlID0gbV9yZXNwb25zZS5pc29sYXRlZENvcHko
KV0gewotICAgICAgICAgICAgaWYgKCFwcm90ZWN0ZWRUaGlzLT5tX2hhbmRsZSkKLSAgICAgICAg
ICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICBwcm90ZWN0ZWRUaGlzLT5kaWRSZWNlaXZlQWxs
SGVhZGVycyhyZXNwb25zZSk7Ci0gICAgICAgIH0pOwotICAgIH0KLQotICAgIHJldHVybiByZWNl
aXZlQnl0ZXM7Ci19Ci0KLS8vIGNhbGxlZCB3aXRoIGRhdGEgYWZ0ZXIgYWxsIGhlYWRlcnMgaGF2
ZSBiZWVuIHByb2Nlc3NlZCB2aWEgaGVhZGVyQ2FsbGJhY2sKLXNpemVfdCBSZXNvdXJjZUhhbmRs
ZUN1cmxEZWxlZ2F0ZTo6ZGlkUmVjZWl2ZURhdGEoUmVmPFNoYXJlZEJ1ZmZlcj4mJiBidWZmZXIp
Ci17Ci0gICAgaWYgKCFtX2hhbmRsZSkKLSAgICAgICAgcmV0dXJuIDA7Ci0KLSAgICBpZiAobV9k
ZWZlcnNMb2FkaW5nKQotICAgICAgICByZXR1cm4gMDsKLQotICAgIHNpemVfdCByZWNlaXZlQnl0
ZXMgPSBidWZmZXItPnNpemUoKTsKLQotICAgIC8vIHRoaXMgc2hvdWxkbid0IGJlIG5lY2Vzc2Fy
eSBidXQgYXBwYXJlbnRseSBpcy4gQ1VSTCB3cml0ZXMgdGhlIGRhdGEKLSAgICAvLyBvZiBodG1s
IHBhZ2UgZXZlbiBpZiBpdCBpcyBhIHJlZGlyZWN0IHRoYXQgd2FzIGhhbmRsZWQgaW50ZXJuYWxs
eQotICAgIC8vIGNhbiBiZSBvYnNlcnZlZCBlLmcuIG9uIGdtYWlsLmNvbQotICAgIGlmIChhdXRv
IGh0dHBDb2RlID0gbV9jdXJsSGFuZGxlLT5nZXRSZXNwb25zZUNvZGUoKSkgewotICAgICAgICBp
ZiAoKmh0dHBDb2RlID49IDMwMCAmJiAqaHR0cENvZGUgPCA0MDApCi0gICAgICAgICAgICByZXR1
cm4gcmVjZWl2ZUJ5dGVzOwotICAgIH0KLQotICAgIGlmIChyZWNlaXZlQnl0ZXMpIHsKLSAgICAg
ICAgaWYgKGlzTWFpblRocmVhZCgpKQotICAgICAgICAgICAgZGlkUmVjZWl2ZUNvbnRlbnREYXRh
KFdURk1vdmUoYnVmZmVyKSk7Ci0gICAgICAgIGVsc2UgewotICAgICAgICAgICAgY2FsbE9uTWFp
blRocmVhZChbcHJvdGVjdGVkVGhpcyA9IG1ha2VSZWYoKnRoaXMpLCBidWYgPSBXVEZNb3ZlKGJ1
ZmZlcildKCkgbXV0YWJsZSB7Ci0gICAgICAgICAgICAgICAgaWYgKCFwcm90ZWN0ZWRUaGlzLT5t
X2hhbmRsZSkKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgICAgIHBy
b3RlY3RlZFRoaXMtPmRpZFJlY2VpdmVDb250ZW50RGF0YShXVEZNb3ZlKGJ1ZikpOwotICAgICAg
ICAgICAgfSk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICByZXR1cm4gcmVjZWl2ZUJ5dGVzOwot
fQotCi0vKiBUaGlzIGlzIGNhbGxlZCB0byBvYnRhaW4gSFRUUCBQT1NUIG9yIFBVVCBkYXRhLgot
SXRlcmF0ZSB0aHJvdWdoIEZvcm1EYXRhIGVsZW1lbnRzIGFuZCB1cGxvYWQgZmlsZXMuCi1DYXJl
ZnVsbHkgcmVzcGVjdCB0aGUgZ2l2ZW4gYnVmZmVyIGJsb2NrU2l6ZSBhbmQgZmlsbCB0aGUgcmVz
dCBvZiB0aGUgZGF0YSBhdCB0aGUgbmV4dCBjYWxscy4KLSovCi1zaXplX3QgUmVzb3VyY2VIYW5k
bGVDdXJsRGVsZWdhdGU6OndpbGxTZW5kRGF0YShjaGFyKiBidWZmZXIsIHNpemVfdCBibG9ja1Np
emUsIHNpemVfdCBudW1iZXJPZkJsb2NrcykKLXsKLSAgICBBU1NFUlQoIWlzTWFpblRocmVhZCgp
KTsKLQotICAgIGlmICghbV9oYW5kbGUpCi0gICAgICAgIHJldHVybiAwOwotCi0gICAgaWYgKG1f
ZGVmZXJzTG9hZGluZykKLSAgICAgICAgcmV0dXJuIDA7Ci0KLSAgICBpZiAoIWJsb2NrU2l6ZSB8
fCAhbnVtYmVyT2ZCbG9ja3MpCi0gICAgICAgIHJldHVybiAwOwotCi0gICAgewotICAgICAgICBz
dGQ6OnVuaXF1ZV9sb2NrPExvY2s+IGxvY2sobV93b3JrZXJUaHJlYWRNdXRleCk7Ci0KLSAgICAg
ICAgbV9zZW5kQnl0ZXMgPSAwOwotCi0gICAgICAgIGlmIChpc01haW5UaHJlYWQoKSkKLSAgICAg
ICAgICAgIHByZXBhcmVTZW5kRGF0YShidWZmZXIsIGJsb2NrU2l6ZSwgbnVtYmVyT2ZCbG9ja3Mp
OwotICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgIGNhbGxPbk1haW5UaHJlYWQoW3Byb3RlY3Rl
ZFRoaXMgPSBtYWtlUmVmKCp0aGlzKSwgYnVmZmVyLCBibG9ja1NpemUsIG51bWJlck9mQmxvY2tz
XSB7Ci0gICAgICAgICAgICAgICAgaWYgKCFwcm90ZWN0ZWRUaGlzLT5tX2hhbmRsZSkKLSAgICAg
ICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgICAgIHByb3RlY3RlZFRoaXMtPnBy
ZXBhcmVTZW5kRGF0YShidWZmZXIsIGJsb2NrU2l6ZSwgbnVtYmVyT2ZCbG9ja3MpOwotICAgICAg
ICAgICAgfSk7Ci0KLSAgICAgICAgICAgIG1fd29ya2VyVGhyZWFkQ29uZGl0aW9uVmFyaWFibGUu
d2FpdChsb2NrLCBbdGhpc10gewotICAgICAgICAgICAgICAgIHJldHVybiBtX3NlbmRCeXRlczsK
LSAgICAgICAgICAgIH0pOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgcmV0dXJuIG1fc2VuZEJ5
dGVzOwotfQotCi1DVVJMY29kZSBSZXNvdXJjZUhhbmRsZUN1cmxEZWxlZ2F0ZTo6d2lsbFNldHVw
U3NsQ3R4Q2FsbGJhY2soQ1VSTCosIHZvaWQqIHNzbEN0eCwgdm9pZCogdXNlckRhdGEpCi17Ci0g
ICAgcmV0dXJuIHN0YXRpY19jYXN0PFJlc291cmNlSGFuZGxlQ3VybERlbGVnYXRlKj4odXNlckRh
dGEpLT53aWxsU2V0dXBTc2xDdHgoc3NsQ3R4KTsKLX0KLQotc2l6ZV90IFJlc291cmNlSGFuZGxl
Q3VybERlbGVnYXRlOjpkaWRSZWNlaXZlSGVhZGVyQ2FsbGJhY2soY2hhciogcHRyLCBzaXplX3Qg
YmxvY2tTaXplLCBzaXplX3QgbnVtYmVyT2ZCbG9ja3MsIHZvaWQqIGRhdGEpCi17Ci0gICAgcmV0
dXJuIHN0YXRpY19jYXN0PFJlc291cmNlSGFuZGxlQ3VybERlbGVnYXRlKj4oY29uc3RfY2FzdDx2
b2lkKj4oZGF0YSkpLT5kaWRSZWNlaXZlSGVhZGVyKFN0cmluZyhzdGF0aWNfY2FzdDxjb25zdCBj
aGFyKj4ocHRyKSwgYmxvY2tTaXplICogbnVtYmVyT2ZCbG9ja3MpKTsKLX0KLQotc2l6ZV90IFJl
c291cmNlSGFuZGxlQ3VybERlbGVnYXRlOjpkaWRSZWNlaXZlRGF0YUNhbGxiYWNrKGNoYXIqIHB0
ciwgc2l6ZV90IGJsb2NrU2l6ZSwgc2l6ZV90IG51bWJlck9mQmxvY2tzLCB2b2lkKiBkYXRhKQot
ewotICAgIHJldHVybiBzdGF0aWNfY2FzdDxSZXNvdXJjZUhhbmRsZUN1cmxEZWxlZ2F0ZSo+KGNv
bnN0X2Nhc3Q8dm9pZCo+KGRhdGEpKS0+ZGlkUmVjZWl2ZURhdGEoU2hhcmVkQnVmZmVyOjpjcmVh
dGUocHRyLCBibG9ja1NpemUgKiBudW1iZXJPZkJsb2NrcykpOwotfQotCi1zaXplX3QgUmVzb3Vy
Y2VIYW5kbGVDdXJsRGVsZWdhdGU6OndpbGxTZW5kRGF0YUNhbGxiYWNrKGNoYXIqIHB0ciwgc2l6
ZV90IGJsb2NrU2l6ZSwgc2l6ZV90IG51bWJlck9mQmxvY2tzLCB2b2lkKiBkYXRhKQotewotICAg
IHJldHVybiBzdGF0aWNfY2FzdDxSZXNvdXJjZUhhbmRsZUN1cmxEZWxlZ2F0ZSo+KGNvbnN0X2Nh
c3Q8dm9pZCo+KGRhdGEpKS0+d2lsbFNlbmREYXRhKHB0ciwgYmxvY2tTaXplLCBudW1iZXJPZkJs
b2Nrcyk7CisgICAgcmV0dXJuIHN0ZDo6cGFpcjxTdHJpbmcsIFN0cmluZz4odXNlciwgcGFzc3dv
cmQpOwogfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9uZXR3b3JrL2N1cmwvUmVzb3VyY2VIYW5kbGVDdXJsRGVsZWdhdGUuaCBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY3VybC9SZXNvdXJjZUhhbmRsZUN1cmxE
ZWxlZ2F0ZS5oCmluZGV4IDk1NWQxZjU0NjRmLi5jMjUyNTkwNzFlZCAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9jdXJsL1Jlc291cmNlSGFuZGxlQ3VybERlbGVn
YXRlLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9jdXJsL1Jlc291cmNl
SGFuZGxlQ3VybERlbGVnYXRlLmgKQEAgLTI5LDI0ICsyOSwxNyBAQAogI2lmIFVTRShDVVJMKQog
CiAjaW5jbHVkZSAiQ3JlZGVudGlhbC5oIgotI2luY2x1ZGUgIkN1cmxKb2JNYW5hZ2VyLmgiCi0j
aW5jbHVkZSAiQ3VybFJlc3BvbnNlLmgiCi0jaW5jbHVkZSAiQ3VybFNTTFZlcmlmaWVyLmgiCi0j
aW5jbHVkZSAiRm9ybURhdGFTdHJlYW1DdXJsLmgiCisjaW5jbHVkZSAiQ3VybFJlcXVlc3REZWxl
Z2F0ZS5oIgogI2luY2x1ZGUgIlJlc291cmNlUmVxdWVzdC5oIgotI2luY2x1ZGUgIlJlc291cmNl
UmVzcG9uc2UuaCIKLSNpbmNsdWRlIDx3dGYvQ29uZGl0aW9uLmg+Ci0jaW5jbHVkZSA8d3RmL1Ro
cmVhZFNhZmVSZWZDb3VudGVkLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAorY2xhc3MgQ3Vy
bFJlcXVlc3Q7CiBjbGFzcyBNdWx0aXBhcnRIYW5kbGU7Ci1jbGFzcyBQcm90ZWN0aW9uU3BhY2U7
Ci1jbGFzcyBSZXNvdXJjZUVycm9yOwogY2xhc3MgUmVzb3VyY2VIYW5kbGU7Ci1jbGFzcyBTaGFy
ZWRCdWZmZXI7CitjbGFzcyBSZXNvdXJjZVJlc3BvbnNlOwogCi1jbGFzcyBSZXNvdXJjZUhhbmRs
ZUN1cmxEZWxlZ2F0ZSBmaW5hbCA6IHB1YmxpYyBUaHJlYWRTYWZlUmVmQ291bnRlZDxSZXNvdXJj
ZUhhbmRsZUN1cmxEZWxlZ2F0ZT4sIHB1YmxpYyBDdXJsSm9iQ2xpZW50IHsKK2NsYXNzIFJlc291
cmNlSGFuZGxlQ3VybERlbGVnYXRlIGZpbmFsIDogcHVibGljIFRocmVhZFNhZmVSZWZDb3VudGVk
PFJlc291cmNlSGFuZGxlQ3VybERlbGVnYXRlPiwgcHVibGljIEN1cmxSZXF1ZXN0RGVsZWdhdGUg
ewogcHVibGljOgogICAgIFJlc291cmNlSGFuZGxlQ3VybERlbGVnYXRlKFJlc291cmNlSGFuZGxl
Kik7CiAgICAgflJlc291cmNlSGFuZGxlQ3VybERlbGVnYXRlKCk7CkBAIC01NCw3ICs0Nyw3IEBA
IHB1YmxpYzoKICAgICBib29sIGhhc0hhbmRsZSgpIGNvbnN0OwogICAgIHZvaWQgcmVsZWFzZUhh
bmRsZSgpOwogCi0gICAgYm9vbCBzdGFydCgpIHsgc3RhcnQoZmFsc2UpOyByZXR1cm4gdHJ1ZTsg
fQorICAgIGJvb2wgc3RhcnQoKTsKICAgICB2b2lkIGNhbmNlbCgpOwogCiAgICAgdm9pZCBzZXRE
ZWZlcnNMb2FkaW5nKGJvb2wpOwpAQCAtNjMsNzMgKzU2LDM1IEBAIHB1YmxpYzoKICAgICB2b2lk
IGRpc3BhdGNoU3luY2hyb25vdXNKb2IoKTsKIAogcHJpdmF0ZToKLSAgICB2b2lkIHJldGFpbigp
IG92ZXJyaWRlOwotICAgIHZvaWQgcmVsZWFzZSgpIG92ZXJyaWRlOwotCi0gICAgQ1VSTCogaGFu
ZGxlKCkgb3ZlcnJpZGUgeyByZXR1cm4gbV9jdXJsSGFuZGxlID8gbV9jdXJsSGFuZGxlLT5oYW5k
bGUoKSA6IG51bGxwdHI7IH0KLSAgICBDVVJMKiBzZXR1cFRyYW5zZmVyKCkgb3ZlcnJpZGU7Ci0g
ICAgdm9pZCBkaWRDb21wbGV0ZVRyYW5zZmVyKENVUkxjb2RlKSBvdmVycmlkZTsKLSAgICB2b2lk
IGRpZENhbmNlbFRyYW5zZmVyKCkgb3ZlcnJpZGU7Ci0KICAgICAvLyBDYWxsZWQgZnJvbSBtYWlu
IHRocmVhZC4KICAgICBSZXNvdXJjZVJlc3BvbnNlJiByZXNwb25zZSgpOwogCi0gICAgdm9pZCBz
dGFydChib29sIGlzU3luY1JlcXVlc3QpOwotCi0gICAgdm9pZCBzZXR1cEF1dGhlbnRpY2F0aW9u
KCk7CisgICAgc3RkOjpwYWlyPFN0cmluZywgU3RyaW5nPiBnZXRDcmVkZW50aWFsKFJlc291cmNl
UmVxdWVzdCYsIGJvb2wpOwogCi0gICAgdm9pZCBkaWRSZWNlaXZlQWxsSGVhZGVycyhjb25zdCBD
dXJsUmVzcG9uc2UmKTsKLSAgICB2b2lkIGRpZFJlY2VpdmVDb250ZW50RGF0YShSZWY8U2hhcmVk
QnVmZmVyPiYmKTsKLSAgICB2b2lkIGhhbmRsZUxvY2FsUmVjZWl2ZVJlc3BvbnNlKCk7Ci0gICAg
dm9pZCBwcmVwYXJlU2VuZERhdGEoY2hhciosIHNpemVfdCBibG9ja1NpemUsIHNpemVfdCBudW1i
ZXJPZkJsb2Nrcyk7CisgICAgYm9vbCBjYW5jZWxsZWRPckNsaWVudGxlc3MoKTsKIAotICAgIHZv
aWQgZGlkRmluaXNoKE5ldHdvcmtMb2FkTWV0cmljcyk7Ci0gICAgdm9pZCBkaWRGYWlsKGNvbnN0
IFJlc291cmNlRXJyb3ImKTsKKyAgICBSZWZQdHI8Q3VybFJlcXVlc3Q+IGNyZWF0ZUN1cmxSZXF1
ZXN0KFJlc291cmNlUmVxdWVzdCYpOworICAgIHZvaWQgY3VybERpZFJlY2VpdmVSZXNwb25zZShj
b25zdCBDdXJsUmVzcG9uc2UmKSBvdmVycmlkZTsKKyAgICB2b2lkIGN1cmxEaWRSZWNlaXZlQnVm
ZmVyKFJlZjxTaGFyZWRCdWZmZXI+JiYpIG92ZXJyaWRlOworICAgIHZvaWQgY3VybERpZENvbXBs
ZXRlKCkgb3ZlcnJpZGU7CisgICAgdm9pZCBjdXJsRGlkRmFpbFdpdGhFcnJvcihjb25zdCBSZXNv
dXJjZUVycm9yJikgb3ZlcnJpZGU7CiAKICAgICB2b2lkIGhhbmRsZURhdGFVUkwoKTsKIAotICAg
IC8vIENhbGxlZCBmcm9tIHdvcmtlciB0aHJlYWQuCi0gICAgdm9pZCBzZXR1cFBPU1QoKTsKLSAg
ICB2b2lkIHNldHVwUFVUKCk7Ci0gICAgc2l6ZV90IGdldEZvcm1FbGVtZW50c0NvdW50KCk7Ci0g
ICAgdm9pZCBzZXR1cEZvcm1EYXRhKGJvb2wpOwotICAgIHZvaWQgYXBwbHlBdXRoZW50aWNhdGlv
bigpOwotICAgIE5ldHdvcmtMb2FkTWV0cmljcyBnZXROZXR3b3JrTG9hZE1ldHJpY3MoKTsKLQot
ICAgIENVUkxjb2RlIHdpbGxTZXR1cFNzbEN0eCh2b2lkKik7Ci0gICAgc2l6ZV90IGRpZFJlY2Vp
dmVIZWFkZXIoU3RyaW5nJiYpOwotICAgIHNpemVfdCBkaWRSZWNlaXZlRGF0YShSZWY8U2hhcmVk
QnVmZmVyPiYmKTsKLSAgICBzaXplX3Qgd2lsbFNlbmREYXRhKGNoYXIqLCBzaXplX3QgYmxvY2tT
aXplLCBzaXplX3QgbnVtYmVyT2ZCbG9ja3MpOwotCi0gICAgc3RhdGljIENVUkxjb2RlIHdpbGxT
ZXR1cFNzbEN0eENhbGxiYWNrKENVUkwqLCB2b2lkKiwgdm9pZCopOwotICAgIHN0YXRpYyBzaXpl
X3QgZGlkUmVjZWl2ZUhlYWRlckNhbGxiYWNrKGNoYXIqLCBzaXplX3QgYmxvY2tTaXplLCBzaXpl
X3QgbnVtYmVyT2ZCbG9ja3MsIHZvaWQqKTsKLSAgICBzdGF0aWMgc2l6ZV90IGRpZFJlY2VpdmVE
YXRhQ2FsbGJhY2soY2hhciosIHNpemVfdCBibG9ja1NpemUsIHNpemVfdCBudW1iZXJPZkJsb2Nr
cywgdm9pZCopOwotICAgIHN0YXRpYyBzaXplX3Qgd2lsbFNlbmREYXRhQ2FsbGJhY2soY2hhcios
IHNpemVfdCBibG9ja1NpemUsIHNpemVfdCBudW1iZXJPZkJsb2Nrcywgdm9pZCopOwotCiAgICAg
Ly8gVXNlZCBieSBtYWluIHRocmVhZC4KICAgICBSZXNvdXJjZUhhbmRsZSogbV9oYW5kbGU7Ci0g
ICAgc3RkOjp1bmlxdWVfcHRyPEZvcm1EYXRhU3RyZWFtPiBtX2Zvcm1EYXRhU3RyZWFtOwogICAg
IHN0ZDo6dW5pcXVlX3B0cjxNdWx0aXBhcnRIYW5kbGU+IG1fbXVsdGlwYXJ0SGFuZGxlOwotICAg
IHVuc2lnbmVkIHNob3J0IG1fYXV0aEZhaWx1cmVDb3VudCB7IDAgfTsKKyAgICB1bnNpZ25lZCBt
X2F1dGhGYWlsdXJlQ291bnQgeyAwIH07CiAgICAgLy8gVXNlZCBieSB3b3JrZXIgdGhyZWFkLgog
ICAgIFJlc291cmNlUmVxdWVzdCBtX2ZpcnN0UmVxdWVzdDsKLSAgICBIVFRQSGVhZGVyTWFwIG1f
Y3VzdG9tSFRUUEhlYWRlckZpZWxkczsKKyAgICBSZXNvdXJjZVJlcXVlc3QgbV9jdXJyZW50UmVx
dWVzdDsKICAgICBib29sIG1fc2hvdWxkVXNlQ3JlZGVudGlhbFN0b3JhZ2U7CiAgICAgU3RyaW5n
IG1fdXNlcjsKICAgICBTdHJpbmcgbV9wYXNzOwogICAgIENyZWRlbnRpYWwgbV9pbml0aWFsQ3Jl
ZGVudGlhbDsKICAgICBib29sIG1fZGVmZXJzTG9hZGluZzsKICAgICBib29sIG1fYWRkZWRDYWNo
ZVZhbGlkYXRpb25IZWFkZXJzIHsgZmFsc2UgfTsKLSAgICBWZWN0b3I8Y2hhcj4gbV9wb3N0Qnl0
ZXM7Ci0gICAgc3RkOjp1bmlxdWVfcHRyPEN1cmxIYW5kbGU+IG1fY3VybEhhbmRsZTsKLSAgICBD
dXJsU1NMVmVyaWZpZXIgbV9zc2xWZXJpZmllcjsKLSAgICBDdXJsUmVzcG9uc2UgbV9yZXNwb25z
ZTsKLSAgICBib29sIG1fZGlkTm90aWZ5UmVzcG9uc2UgeyBmYWxzZSB9OwotICAgIC8vIFVzZWQg
YnkgYm90aCB0aHJlYWRzLgotICAgIGJvb2wgbV9pc1N5bmNSZXF1ZXN0IHsgZmFsc2UgfTsKLSAg
ICBDb25kaXRpb24gbV93b3JrZXJUaHJlYWRDb25kaXRpb25WYXJpYWJsZTsKLSAgICBMb2NrIG1f
d29ya2VyVGhyZWFkTXV0ZXg7Ci0gICAgc2l6ZV90IG1fc2VuZEJ5dGVzIHsgMCB9OworICAgIFJl
ZlB0cjxDdXJsUmVxdWVzdD4gbV9jdXJsUmVxdWVzdDsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdl
YkNvcmUK
</data>

          </attachment>
      

    </bug>

</bugzilla>