<?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>191647</bug_id>
          
          <creation_ts>2018-11-14 12:40:48 -0800</creation_ts>
          <short_desc>[Curl] Add API for CertificateInfo.</short_desc>
          <delta_ts>2018-11-19 18:03:38 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>Platform</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>
          
          <blocked>187679</blocked>
    
    <blocked>191646</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>fujii</cc>
    
    <cc>webkit-bug-importer</cc>
    
    <cc>youennf</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1478578</commentid>
    <comment_count>0</comment_count>
    <who name="Basuke Suzuki">basuke</who>
    <bug_when>2018-11-14 12:40:48 -0800</bug_when>
    <thetext>It will be used by Server Trust Evaluation UI.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1479794</commentid>
    <comment_count>1</comment_count>
      <attachid>355170</attachid>
    <who name="Basuke Suzuki">basuke</who>
    <bug_when>2018-11-16 18:36:51 -0800</bug_when>
    <thetext>Created attachment 355170
PATCH</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1479836</commentid>
    <comment_count>2</comment_count>
      <attachid>355170</attachid>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2018-11-16 20:27:47 -0800</bug_when>
    <thetext>Comment on attachment 355170
PATCH

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

&gt; Source/WebKit/Shared/API/c/curl/WKCertificateInfoCurl.cpp:46
&gt; +        auto data = reinterpret_cast&lt;WKDataRef&gt;(WKArrayGetItemAtIndex(certificateChainRef, i));

I&apos;m not sure you want to make an API that takes PEM encoded certificates as WKDataRefs.  I think of PEM encoded certificates as strings that need to be parsed into data.  Does libcurl have a way to just give the raw certificate data to it, or does it only take PEM encoded data?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1479849</commentid>
    <comment_count>3</comment_count>
    <who name="Basuke Suzuki">basuke</who>
    <bug_when>2018-11-16 21:03:34 -0800</bug_when>
    <thetext>(In reply to Alex Christensen from comment #2)
&gt; Comment on attachment 355170 [details]
&gt; PATCH
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=355170&amp;action=review
&gt; 
&gt; &gt; Source/WebKit/Shared/API/c/curl/WKCertificateInfoCurl.cpp:46
&gt; &gt; +        auto data = reinterpret_cast&lt;WKDataRef&gt;(WKArrayGetItemAtIndex(certificateChainRef, i));
&gt; 
&gt; I&apos;m not sure you want to make an API that takes PEM encoded certificates as
&gt; WKDataRefs.  I think of PEM encoded certificates as strings that need to be
&gt; parsed into data.  Does libcurl have a way to just give the raw certificate
&gt; data to it, or does it only take PEM encoded data?

curl doesn&apos;t have any support for PEM contents. We have to use OpenSSL to decode information from them. Also it can be DER format (binary) or PEM format (TEXT w/ separator and base64 contents). In that sense, it should be treated as opaque data.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1479867</commentid>
    <comment_count>4</comment_count>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2018-11-16 22:42:06 -0800</bug_when>
    <thetext>Would you want to use the same API for DER or PEM Certificates?  Could you add a test with a DER certificate?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1479868</commentid>
    <comment_count>5</comment_count>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2018-11-16 22:44:05 -0800</bug_when>
    <thetext>Would you want to be able to compare certificates of different encodings and find them to be equal?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1479880</commentid>
    <comment_count>6</comment_count>
    <who name="Basuke Suzuki">basuke</who>
    <bug_when>2018-11-16 23:40:35 -0800</bug_when>
    <thetext>(In reply to Alex Christensen from comment #4)
&gt; Would you want to use the same API for DER or PEM Certificates?  Could you
&gt; add a test with a DER certificate?

(In reply to Alex Christensen from comment #5)
&gt; Would you want to be able to compare certificates of different encodings and
&gt; find them to be equal?

This patch is for CertificateInfo which is just a container for certificates and it doesn&apos;t care what it hold inside. The requested tests will be handled by verifier tests, which will be included in https://bugs.webkit.org/show_bug.cgi?id=187679 ([Curl] Add allowSpecificHTTPSCertificateForHost support.)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1479881</commentid>
    <comment_count>7</comment_count>
    <who name="Basuke Suzuki">basuke</who>
    <bug_when>2018-11-16 23:46:17 -0800</bug_when>
    <thetext>Sorry, this is wrong. The openssl api only allows PEM format. DER must be converted to PEM. There&apos;s no encoding mix-up here. Only PEM.

But even if it is a PEM format, which is consisted by printable ascii characters, the contents is just base64 encoded binary with header and footer. There&apos;s no text parsing to get information from this chunk of data. I think treating this as a Data is better than String.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1479920</commentid>
    <comment_count>8</comment_count>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2018-11-17 07:39:02 -0800</bug_when>
    <thetext>There *is* parsing, but it&apos;s probably between libcurl and openssl to do so.  The network uses certificate bytes from finding and decoding the base64 info.  It&apos;s true that the string here can only be ASCII, but it is a string that needs to be parsed by something before it can be used on the network.  I&apos;m ok with it being a data instead of a string because it&apos;s always ascii, but I want that to be an informed choice.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1479951</commentid>
    <comment_count>9</comment_count>
    <who name="Basuke Suzuki">basuke</who>
    <bug_when>2018-11-17 13:32:26 -0800</bug_when>
    <thetext>(In reply to Alex Christensen from comment #8)
&gt; There *is* parsing, but it&apos;s probably between libcurl and openssl to do so. 

I meant the word “parsing” as text processing, such as JSON parsing. Because certificate is in a binary shape, I want to use the term “decoding”. Anyway, those are completely task of OpenSSL’s task, neither libcurl nor WebKit curl layer care about its content detail so that there are no parsing or decoding. If an app want to display those information, that is the task of the app to fetch information using OpenSSL api. That’s why I want to treat it as opaque. That’s the reason I think WKDataRef is appropriate for this API.

&gt; The network uses certificate bytes from finding and decoding the base64
&gt; info.  It&apos;s true that the string here can only be ASCII, but it is a string
&gt; that needs to be parsed by something before it can be used on the network. 
&gt; I&apos;m ok with it being a data instead of a string because it&apos;s always ascii,
&gt; but I want that to be an informed choice.

I am not clear what you request me. What should I show you ?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1480338</commentid>
    <comment_count>10</comment_count>
      <attachid>355170</attachid>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2018-11-19 17:35:59 -0800</bug_when>
    <thetext>Comment on attachment 355170
PATCH

r=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1480349</commentid>
    <comment_count>11</comment_count>
      <attachid>355170</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2018-11-19 18:02:42 -0800</bug_when>
    <thetext>Comment on attachment 355170
PATCH

Clearing flags on attachment: 355170

Committed r238387: &lt;https://trac.webkit.org/changeset/238387&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1480350</commentid>
    <comment_count>12</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2018-11-19 18:02:44 -0800</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1480351</commentid>
    <comment_count>13</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2018-11-19 18:03:38 -0800</bug_when>
    <thetext>&lt;rdar://problem/46176215&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>355170</attachid>
            <date>2018-11-16 18:36:51 -0800</date>
            <delta_ts>2018-11-19 18:02:42 -0800</delta_ts>
            <desc>PATCH</desc>
            <filename>191647.diff</filename>
            <type>text/plain</type>
            <size>19256</size>
            <attacher name="Basuke Suzuki">basuke</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCAyNjJlOTc5ODMzNi4uMTE2ZGQ4ODlhY2UgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSwyMSBAQAorMjAxOC0xMS0xNiAgQmFzdWtlIFN1enVraSAgPGJhc3VrZS5zdXp1a2lAc29u
eS5jb20+CisKKyAgICAgICAgW0N1cmxdIEFkZCBBUEkgZm9yIENlcnRpZmljYXRlSW5mby4KKyAg
ICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE5MTY0NworCisg
ICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIE1pbm9yIGNoYW5n
ZXMgZm9yIFdlYktpdCBBUEkuCisKKyAgICAgICAgVGVzdHM6IFRlc3RXZWJLaXRBUEkvVGVzdHMv
V2ViS2l0L2N1cmwvQ2VydGlmaWNhdGVzLmNwcAorCisgICAgICAgICogcGxhdGZvcm0vbmV0d29y
ay9jdXJsL0NlcnRpZmljYXRlSW5mby5oOgorICAgICAgICAqIHBsYXRmb3JtL25ldHdvcmsvY3Vy
bC9DZXJ0aWZpY2F0ZUluZm9DdXJsLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNlcnRpZmljYXRl
SW5mbzo6Q2VydGlmaWNhdGVJbmZvKToKKyAgICAgICAgKFdlYkNvcmU6OkNlcnRpZmljYXRlSW5m
bzo6bWFrZUNlcnRpZmljYXRlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9uZXR3b3JrL2N1cmwvQ3Vy
bFNTTFZlcmlmaWVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkJJT0hvbGRlcjo6YXNDZXJ0aWZp
Y2F0ZSk6CisKIDIwMTgtMTEtMTQgIFRpbW90aHkgSGF0Y2hlciAgPHRpbW90aHlAYXBwbGUuY29t
PgogCiAgICAgICAgIFVwZGF0ZSBwcmVmZXJzLWNvbG9yLXNjaGVtZSBtZWRpYSBxdWVyeSBtYXRj
aGluZyBiYXNlZCBvbiBHaXRIdWIgaXNzdWUgIzMyNzguCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9uZXR3b3JrL2N1cmwvQ2VydGlmaWNhdGVJbmZvLmggYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9uZXR3b3JrL2N1cmwvQ2VydGlmaWNhdGVJbmZvLmgKaW5kZXggMjc0Yzhm
NWUwMDQuLmY1ODgwZmYxMzBkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9u
ZXR3b3JrL2N1cmwvQ2VydGlmaWNhdGVJbmZvLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vbmV0d29yay9jdXJsL0NlcnRpZmljYXRlSW5mby5oCkBAIC0zNCw5ICszNCwxMCBAQCBuYW1l
c3BhY2UgV2ViQ29yZSB7CiBjbGFzcyBDZXJ0aWZpY2F0ZUluZm8gOiBwdWJsaWMgQ2VydGlmaWNh
dGVJbmZvQmFzZSB7CiBwdWJsaWM6CiAgICAgdXNpbmcgQ2VydGlmaWNhdGUgPSBWZWN0b3I8dWlu
dDhfdD47CisgICAgdXNpbmcgQ2VydGlmaWNhdGVDaGFpbiA9IFZlY3RvcjxDZXJ0aWZpY2F0ZT47
CiAKICAgICBDZXJ0aWZpY2F0ZUluZm8oKSA9IGRlZmF1bHQ7Ci0gICAgV0VCQ09SRV9FWFBPUlQg
Q2VydGlmaWNhdGVJbmZvKGludCB2ZXJpZmljYXRpb25FcnJvciwgVmVjdG9yPENlcnRpZmljYXRl
PiYmKTsKKyAgICBXRUJDT1JFX0VYUE9SVCBDZXJ0aWZpY2F0ZUluZm8oaW50IHZlcmlmaWNhdGlv
bkVycm9yLCBDZXJ0aWZpY2F0ZUNoYWluJiYpOwogCiAgICAgV0VCQ09SRV9FWFBPUlQgQ2VydGlm
aWNhdGVJbmZvIGlzb2xhdGVkQ29weSgpIGNvbnN0OwogCkBAIC00OSwxMSArNTAsMTEgQEAgcHVi
bGljOgogCiAgICAgYm9vbCBpc0VtcHR5KCkgY29uc3QgeyByZXR1cm4gbV9jZXJ0aWZpY2F0ZUNo
YWluLmlzRW1wdHkoKTsgfQogCi0gICAgc3RhdGljIENlcnRpZmljYXRlIG1ha2VDZXJ0aWZpY2F0
ZShjb25zdCBjaGFyKiwgc2l6ZV90KTsKKyAgICBzdGF0aWMgQ2VydGlmaWNhdGUgbWFrZUNlcnRp
ZmljYXRlKGNvbnN0IHVpbnQ4X3QqLCBzaXplX3QpOwogCiBwcml2YXRlOgogICAgIGludCBtX3Zl
cmlmaWNhdGlvbkVycm9yIHsgMCB9OwotICAgIFZlY3RvcjxDZXJ0aWZpY2F0ZT4gbV9jZXJ0aWZp
Y2F0ZUNoYWluOworICAgIENlcnRpZmljYXRlQ2hhaW4gbV9jZXJ0aWZpY2F0ZUNoYWluOwogfTsK
IAogaW5saW5lIGJvb2wgb3BlcmF0b3I9PShjb25zdCBDZXJ0aWZpY2F0ZUluZm8mIGEsIGNvbnN0
IENlcnRpZmljYXRlSW5mbyYgYikKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L25ldHdvcmsvY3VybC9DZXJ0aWZpY2F0ZUluZm9DdXJsLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL25ldHdvcmsvY3VybC9DZXJ0aWZpY2F0ZUluZm9DdXJsLmNwcAppbmRleCBkYzY4OWY3
MjE1Zi4uMGE1MzM5ZjVjNTUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25l
dHdvcmsvY3VybC9DZXJ0aWZpY2F0ZUluZm9DdXJsLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9uZXR3b3JrL2N1cmwvQ2VydGlmaWNhdGVJbmZvQ3VybC5jcHAKQEAgLTMyLDcgKzMy
LDcgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1DZXJ0aWZpY2F0ZUluZm86OkNlcnRpZmlj
YXRlSW5mbyhpbnQgdmVyaWZpY2F0aW9uRXJyb3IsIFZlY3RvcjxDZXJ0aWZpY2F0ZT4mJiBjZXJ0
aWZpY2F0ZUNoYWluKQorQ2VydGlmaWNhdGVJbmZvOjpDZXJ0aWZpY2F0ZUluZm8oaW50IHZlcmlm
aWNhdGlvbkVycm9yLCBDZXJ0aWZpY2F0ZUNoYWluJiYgY2VydGlmaWNhdGVDaGFpbikKICAgICA6
IG1fdmVyaWZpY2F0aW9uRXJyb3IodmVyaWZpY2F0aW9uRXJyb3IpCiAgICAgLCBtX2NlcnRpZmlj
YXRlQ2hhaW4oV1RGTW92ZShjZXJ0aWZpY2F0ZUNoYWluKSkKIHsKQEAgLTQzLDcgKzQzLDcgQEAg
Q2VydGlmaWNhdGVJbmZvIENlcnRpZmljYXRlSW5mbzo6aXNvbGF0ZWRDb3B5KCkgY29uc3QKICAg
ICByZXR1cm4geyBtX3ZlcmlmaWNhdGlvbkVycm9yLCBjcm9zc1RocmVhZENvcHkobV9jZXJ0aWZp
Y2F0ZUNoYWluKSB9OwogfQogCi1DZXJ0aWZpY2F0ZUluZm86OkNlcnRpZmljYXRlIENlcnRpZmlj
YXRlSW5mbzo6bWFrZUNlcnRpZmljYXRlKGNvbnN0IGNoYXIqIGJ1ZmZlciwgc2l6ZV90IHNpemUp
CitDZXJ0aWZpY2F0ZUluZm86OkNlcnRpZmljYXRlIENlcnRpZmljYXRlSW5mbzo6bWFrZUNlcnRp
ZmljYXRlKGNvbnN0IHVpbnQ4X3QqIGJ1ZmZlciwgc2l6ZV90IHNpemUpCiB7CiAgICAgQ2VydGlm
aWNhdGUgY2VydGlmaWNhdGU7CiAgICAgY2VydGlmaWNhdGUuYXBwZW5kKGJ1ZmZlciwgc2l6ZSk7
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2N1cmwvQ3VybFNT
TFZlcmlmaWVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY3VybC9DdXJs
U1NMVmVyaWZpZXIuY3BwCmluZGV4IDkyMmQ2ZmY1NGIwLi4zNjkwNzBkZmNhNiAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9jdXJsL0N1cmxTU0xWZXJpZmllci5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9jdXJsL0N1cmxTU0xWZXJp
Zmllci5jcHAKQEAgLTExNyw3ICsxMTcsNyBAQCBwdWJsaWM6CiAgICAgYm9vbCB3cml0ZShYNTA5
KiBkYXRhKSB7IHJldHVybiBQRU1fd3JpdGVfYmlvX1g1MDkobV9iaW8sIGRhdGEpOyB9CiAgICAg
Q2VydGlmaWNhdGVJbmZvOjpDZXJ0aWZpY2F0ZSBhc0NlcnRpZmljYXRlKCkKICAgICB7Ci0gICAg
ICAgIGNoYXIqIGRhdGE7CisgICAgICAgIHVpbnQ4X3QqIGRhdGE7CiAgICAgICAgIGxvbmcgbGVu
Z3RoID0gQklPX2dldF9tZW1fZGF0YShtX2JpbywgJmRhdGEpOwogICAgICAgICBpZiAobGVuZ3Ro
IDwgMCkKICAgICAgICAgICAgIHJldHVybiBDZXJ0aWZpY2F0ZUluZm86OkNlcnRpZmljYXRlKCk7
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvQ2hh
bmdlTG9nCmluZGV4IGFhZTRhNjA3ZTMzLi45MmYzNDY5ZDQyZCAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYktpdC9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdC9DaGFuZ2VMb2cKQEAgLTEsMyAr
MSwyNSBAQAorMjAxOC0xMS0xNiAgQmFzdWtlIFN1enVraSAgPGJhc3VrZS5zdXp1a2lAc29ueS5j
b20+CisKKyAgICAgICAgW0N1cmxdIEFkZCBBUEkgZm9yIENlcnRpZmljYXRlSW5mby4KKyAgICAg
ICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE5MTY0NworCisgICAg
ICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEFkZGVkIEFQSSBmb3Ig
Q2VydGlmaWNhdGVJbmZvIHRvIGNyZWF0ZSwgZmV0Y2ggY29udGVudHMuCisKKyAgICAgICAgVGVz
dHM6IFRlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0L2N1cmwvQ2VydGlmaWNhdGVzLmNwcAorCisg
ICAgICAgICogUGxhdGZvcm1XaW4uY21ha2U6CisgICAgICAgICogU2hhcmVkL0FQSS9jL2N1cmwv
V0tDZXJ0aWZpY2F0ZUluZm9DdXJsLmNwcDogQWRkZWQuCisgICAgICAgIChXS0NlcnRpZmljYXRl
SW5mb0NyZWF0ZVdpdGhDZXJ0ZmljYXRlQ2hhaW4pOgorICAgICAgICAoV0tDZXJ0aWZpY2F0ZUlu
Zm9HZXRWZXJpZmljYXRpb25FcnJvcik6CisgICAgICAgIChXS0NlcnRpZmljYXRlSW5mb0dldENl
cnRpZmljYXRlQ2hhaW5TaXplKToKKyAgICAgICAgKFdLQ2VydGlmaWNhdGVJbmZvQ29weUNlcnRp
ZmljYXRlQXRJbmRleCk6CisgICAgICAgICogU2hhcmVkL0FQSS9jL2N1cmwvV0tDZXJ0aWZpY2F0
ZUluZm9DdXJsLmg6IENvcGllZCBmcm9tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsv
Y3VybC9DZXJ0aWZpY2F0ZUluZm9DdXJsLmNwcC4KKyAgICAgICAgKiBTaGFyZWQvY3VybC9XZWJD
b3JlQXJndW1lbnRDb2RlcnNDdXJsLmNwcDoKKyAgICAgICAgKElQQzo6QXJndW1lbnRDb2RlcjxD
ZXJ0aWZpY2F0ZUluZm8+OjplbmNvZGUpOgorICAgICAgICAoSVBDOjpBcmd1bWVudENvZGVyPENl
cnRpZmljYXRlSW5mbz46OmRlY29kZSk6CisKIDIwMTgtMTEtMTQgIEpvc2VwaCBQZWNvcmFybyAg
PHBlY29yYXJvQGFwcGxlLmNvbT4KIAogICAgICAgICBVbnJldmlld2VkIGF0dGVtcHRlZCB3aW5j
YWlybyBidWlsZCBmaXggYWZ0ZXIgMjM4MTkyLgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9Q
bGF0Zm9ybVdpbi5jbWFrZSBiL1NvdXJjZS9XZWJLaXQvUGxhdGZvcm1XaW4uY21ha2UKaW5kZXgg
MDA1NDk4NjFlZTcuLmEwMzg4NDljNmI2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1BsYXRm
b3JtV2luLmNtYWtlCisrKyBiL1NvdXJjZS9XZWJLaXQvUGxhdGZvcm1XaW4uY21ha2UKQEAgLTE5
LDYgKzE5LDggQEAgbGlzdChBUFBFTkQgV2ViS2l0X1NPVVJDRVMKICAgICBQbGF0Zm9ybS93aW4v
TW9kdWxlV2luLmNwcAogICAgIFBsYXRmb3JtL3dpbi9TaGFyZWRNZW1vcnlXaW4uY3BwCiAKKyAg
ICBTaGFyZWQvQVBJL2MvY3VybC9XS0NlcnRpZmljYXRlSW5mb0N1cmwuY3BwCisKICAgICBTaGFy
ZWQvUGx1Z2lucy9OZXRzY2FwZS9OZXRzY2FwZVBsdWdpbk1vZHVsZU5vbmUuY3BwCiAKICAgICBT
aGFyZWQvd2luL0NoaWxkUHJvY2Vzc01haW5XaW4uY3BwCkBAIC0yMDIsMTIgKzIwNCwxOSBAQCBz
ZXQoV2ViS2l0X0ZPUldBUkRJTkdfSEVBREVSU19ESVJFQ1RPUklFUwogICAgIFVJUHJvY2Vzcy9B
UEkvQwogICAgIFVJUHJvY2Vzcy9BUEkvY3BwCiAKLSAgICBVSVByb2Nlc3MvQVBJL0MvY3VybAog
ICAgIFVJUHJvY2Vzcy9BUEkvQy93aW4KIAogICAgIFdlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUv
QVBJL2MKICkKIAoraWYgKCR7V1RGX1BMQVRGT1JNX1dJTl9DQUlST30pCisgICAgbGlzdChBUFBF
TkQgV2ViS2l0X0ZPUldBUkRJTkdfSEVBREVSU19ESVJFQ1RPUklFUworICAgICAgICBTaGFyZWQv
QVBJL2MvY3VybAorCisgICAgICAgIFVJUHJvY2Vzcy9BUEkvQy9jdXJsCisgICAgKQorZW5kaWYg
KCkKKwogV0VCS0lUX01BS0VfRk9SV0FSRElOR19IRUFERVJTKFdlYktpdAogICAgIERJUkVDVE9S
SUVTICR7V2ViS2l0X0ZPUldBUkRJTkdfSEVBREVSU19ESVJFQ1RPUklFU30KICAgICBGTEFUVEVO
RUQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvU2hhcmVkL0FQSS9jL2N1cmwvV0tDZXJ0aWZp
Y2F0ZUluZm9DdXJsLmNwcCBiL1NvdXJjZS9XZWJLaXQvU2hhcmVkL0FQSS9jL2N1cmwvV0tDZXJ0
aWZpY2F0ZUluZm9DdXJsLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAw
MC4uNzdmMDJmZjJiYWYKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9B
UEkvYy9jdXJsL1dLQ2VydGlmaWNhdGVJbmZvQ3VybC5jcHAKQEAgLTAsMCArMSw3MyBAQAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAxOCBTb255IEludGVyYWN0aXZlIEVudGVydGFpbm1lbnQgSW5j
LgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhF
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJF
TUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiV0tDZXJ0aWZpY2F0
ZUluZm9DdXJsLmgiCisKKyNpbmNsdWRlICJBUElEYXRhLmgiCisjaW5jbHVkZSAiV0tBUElDYXN0
LmgiCisjaW5jbHVkZSAiV0tBcnJheS5oIgorI2luY2x1ZGUgIldLRGF0YS5oIgorI2luY2x1ZGUg
IldlYkNlcnRpZmljYXRlSW5mby5oIgorCisjaW5jbHVkZSA8V2ViQ29yZS9DZXJ0aWZpY2F0ZUlu
Zm8uaD4KKwordXNpbmcgbmFtZXNwYWNlIFdlYktpdDsKKwordXNpbmcgQ2VydGlmaWNhdGUgPSBW
ZWN0b3I8dWludDhfdD47Cit1c2luZyBDZXJ0aWZpY2F0ZUNoYWluID0gVmVjdG9yPENlcnRpZmlj
YXRlPjsKKworV0tDZXJ0aWZpY2F0ZUluZm9SZWYgV0tDZXJ0aWZpY2F0ZUluZm9DcmVhdGVXaXRo
Q2VydGZpY2F0ZUNoYWluKFdLQXJyYXlSZWYgY2VydGlmaWNhdGVDaGFpblJlZikKK3sKKyAgICBD
ZXJ0aWZpY2F0ZUNoYWluIGNlcnRpZmljYXRlQ2hhaW47CisgICAgZm9yIChpbnQgaSA9IDAsIGNv
dW50ID0gV0tBcnJheUdldFNpemUoY2VydGlmaWNhdGVDaGFpblJlZik7IGkgPCBjb3VudDsgaSsr
KSB7CisgICAgICAgIGF1dG8gZGF0YSA9IHJlaW50ZXJwcmV0X2Nhc3Q8V0tEYXRhUmVmPihXS0Fy
cmF5R2V0SXRlbUF0SW5kZXgoY2VydGlmaWNhdGVDaGFpblJlZiwgaSkpOworICAgICAgICBhdXRv
IGNlcnRpZmljYXRlID0gV2ViQ29yZTo6Q2VydGlmaWNhdGVJbmZvOjptYWtlQ2VydGlmaWNhdGUo
V0tEYXRhR2V0Qnl0ZXMoZGF0YSksIFdLRGF0YUdldFNpemUoZGF0YSkpOworICAgICAgICBjZXJ0
aWZpY2F0ZUNoYWluLmFwcGVuZChXVEZNb3ZlKGNlcnRpZmljYXRlKSk7CisgICAgfQorCisgICAg
V2ViQ29yZTo6Q2VydGlmaWNhdGVJbmZvIGNlcnRpZmljYXRlSW5mbyB7IDAsIFdURk1vdmUoY2Vy
dGlmaWNhdGVDaGFpbikgfTsKKyAgICBSZWZQdHI8V2ViS2l0OjpXZWJDZXJ0aWZpY2F0ZUluZm8+
IGNlcnRpZmljYXRlSW5mb1JlZiA9IFdlYktpdDo6V2ViQ2VydGlmaWNhdGVJbmZvOjpjcmVhdGUo
Y2VydGlmaWNhdGVJbmZvKTsKKyAgICByZXR1cm4gV2ViS2l0Ojp0b0FQSShjZXJ0aWZpY2F0ZUlu
Zm9SZWYubGVha1JlZigpKTsKK30KKworaW50IFdLQ2VydGlmaWNhdGVJbmZvR2V0VmVyaWZpY2F0
aW9uRXJyb3IoV0tDZXJ0aWZpY2F0ZUluZm9SZWYgY2VydGlmaWNhdGVJbmZvUmVmKQoreworICAg
IHJldHVybiB0b0ltcGwoY2VydGlmaWNhdGVJbmZvUmVmKS0+Y2VydGlmaWNhdGVJbmZvKCkudmVy
aWZpY2F0aW9uRXJyb3IoKTsKK30KKworc2l6ZV90IFdLQ2VydGlmaWNhdGVJbmZvR2V0Q2VydGlm
aWNhdGVDaGFpblNpemUoV0tDZXJ0aWZpY2F0ZUluZm9SZWYgY2VydGlmaWNhdGVJbmZvUmVmKQor
eworICAgIHJldHVybiB0b0ltcGwoY2VydGlmaWNhdGVJbmZvUmVmKS0+Y2VydGlmaWNhdGVJbmZv
KCkuY2VydGlmaWNhdGVDaGFpbigpLnNpemUoKTsKK30KKworV0tEYXRhUmVmIFdLQ2VydGlmaWNh
dGVJbmZvQ29weUNlcnRpZmljYXRlQXRJbmRleChXS0NlcnRpZmljYXRlSW5mb1JlZiBjZXJ0aWZp
Y2F0ZUluZm9SZWYsIHNpemVfdCBpbmRleCkKK3sKKyAgICBpZiAodG9JbXBsKGNlcnRpZmljYXRl
SW5mb1JlZiktPmNlcnRpZmljYXRlSW5mbygpLmNlcnRpZmljYXRlQ2hhaW4oKS5zaXplKCkgPD0g
aW5kZXgpCisgICAgICAgIHJldHVybiBXZWJLaXQ6OnRvQVBJKCZBUEk6OkRhdGE6OmNyZWF0ZShu
dWxscHRyLCAwKS5sZWFrUmVmKCkpOworCisgICAgY29uc3QgYXV0byYgY2VydGlmaWNhdGUgPSB0
b0ltcGwoY2VydGlmaWNhdGVJbmZvUmVmKS0+Y2VydGlmaWNhdGVJbmZvKCkuY2VydGlmaWNhdGVD
aGFpbigpLmF0KGluZGV4KTsKKyAgICByZXR1cm4gV2ViS2l0Ojp0b0FQSSgmQVBJOjpEYXRhOjpj
cmVhdGUocmVpbnRlcnByZXRfY2FzdDxjb25zdCB1bnNpZ25lZCBjaGFyKj4oY2VydGlmaWNhdGUu
ZGF0YSgpKSwgY2VydGlmaWNhdGUuc2l6ZSgpKS5sZWFrUmVmKCkpOworfQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYktpdC9TaGFyZWQvQVBJL2MvY3VybC9XS0NlcnRpZmljYXRlSW5mb0N1cmwuaCBi
L1NvdXJjZS9XZWJLaXQvU2hhcmVkL0FQSS9jL2N1cmwvV0tDZXJ0aWZpY2F0ZUluZm9DdXJsLmgK
bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLjU0MjQwYzUwZTMzCi0tLSAv
ZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdC9TaGFyZWQvQVBJL2MvY3VybC9XS0NlcnRpZmlj
YXRlSW5mb0N1cmwuaApAQCAtMCwwICsxLDQyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE4
IFNvbnkgSW50ZXJhY3RpdmUgRW50ZXJ0YWlubWVudCBJbmMuCisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JT
IGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05U
UklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVT
SU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkg
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEg
b25jZQorCisjaW5jbHVkZSA8V2ViS2l0L1dLQmFzZS5oPgorCisjaWZkZWYgX19jcGx1c3BsdXMK
K2V4dGVybiAiQyIgeworI2VuZGlmCisKK1dLX0VYUE9SVCBXS0NlcnRpZmljYXRlSW5mb1JlZiBX
S0NlcnRpZmljYXRlSW5mb0NyZWF0ZVdpdGhDZXJ0ZmljYXRlQ2hhaW4oV0tBcnJheVJlZik7CisK
K1dLX0VYUE9SVCBpbnQgV0tDZXJ0aWZpY2F0ZUluZm9HZXRWZXJpZmljYXRpb25FcnJvcihXS0Nl
cnRpZmljYXRlSW5mb1JlZik7CitXS19FWFBPUlQgc2l6ZV90IFdLQ2VydGlmaWNhdGVJbmZvR2V0
Q2VydGlmaWNhdGVDaGFpblNpemUoV0tDZXJ0aWZpY2F0ZUluZm9SZWYpOworV0tfRVhQT1JUIFdL
RGF0YVJlZiBXS0NlcnRpZmljYXRlSW5mb0NvcHlDZXJ0aWZpY2F0ZUF0SW5kZXgoV0tDZXJ0aWZp
Y2F0ZUluZm9SZWYsIHNpemVfdCk7CisKKyNpZmRlZiBfX2NwbHVzcGx1cworfQorI2VuZGlmCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9jdXJsL1dlYkNvcmVBcmd1bWVudENvZGVy
c0N1cmwuY3BwIGIvU291cmNlL1dlYktpdC9TaGFyZWQvY3VybC9XZWJDb3JlQXJndW1lbnRDb2Rl
cnNDdXJsLmNwcAppbmRleCA5ODRhYWYzMDdkZC4uODllNzllYjA2NTQgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJLaXQvU2hhcmVkL2N1cmwvV2ViQ29yZUFyZ3VtZW50Q29kZXJzQ3VybC5jcHAKKysr
IGIvU291cmNlL1dlYktpdC9TaGFyZWQvY3VybC9XZWJDb3JlQXJndW1lbnRDb2RlcnNDdXJsLmNw
cApAQCAtNDgsMTIgKzQ4LDM2IEBAIGJvb2wgQXJndW1lbnRDb2RlcjxSZXNvdXJjZVJlcXVlc3Q+
OjpkZWNvZGVQbGF0Zm9ybURhdGEoRGVjb2RlciYgZGVjb2RlciwgUmVzb3VyCiAgICAgcmV0dXJu
IHJlc291cmNlUmVxdWVzdC5kZWNvZGVXaXRoUGxhdGZvcm1EYXRhKGRlY29kZXIpOwogfQogCi12
b2lkIEFyZ3VtZW50Q29kZXI8Q2VydGlmaWNhdGVJbmZvPjo6ZW5jb2RlKEVuY29kZXImLCBjb25z
dCBDZXJ0aWZpY2F0ZUluZm8mKQordm9pZCBBcmd1bWVudENvZGVyPENlcnRpZmljYXRlSW5mbz46
OmVuY29kZShFbmNvZGVyJiBlbmNvZGVyLCBjb25zdCBDZXJ0aWZpY2F0ZUluZm8mIGNlcnRpZmlj
YXRlSW5mbykKIHsKKyAgICBlbmNvZGVyIDw8IGNlcnRpZmljYXRlSW5mby52ZXJpZmljYXRpb25F
cnJvcigpOworICAgIGVuY29kZXIgPDwgY2VydGlmaWNhdGVJbmZvLmNlcnRpZmljYXRlQ2hhaW4o
KS5zaXplKCk7CisKKyAgICBmb3IgKGF1dG8gY2VydGlmaWNhdGUgOiBjZXJ0aWZpY2F0ZUluZm8u
Y2VydGlmaWNhdGVDaGFpbigpKQorICAgICAgICBlbmNvZGVyIDw8IGNlcnRpZmljYXRlOwogfQog
Ci1ib29sIEFyZ3VtZW50Q29kZXI8Q2VydGlmaWNhdGVJbmZvPjo6ZGVjb2RlKERlY29kZXImLCBD
ZXJ0aWZpY2F0ZUluZm8mKQorYm9vbCBBcmd1bWVudENvZGVyPENlcnRpZmljYXRlSW5mbz46OmRl
Y29kZShEZWNvZGVyJiBkZWNvZGVyLCBDZXJ0aWZpY2F0ZUluZm8mIGNlcnRpZmljYXRlSW5mbykK
IHsKKyAgICBpbnQgdmVyaWZpY2F0aW9uRXJyb3I7CisgICAgaWYgKCFkZWNvZGVyLmRlY29kZSh2
ZXJpZmljYXRpb25FcnJvcikpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIHNpemVfdCBj
ZXJ0aWZpY2F0ZUNoYWluU2l6ZTsKKyAgICBpZiAoIWRlY29kZXIuZGVjb2RlKGNlcnRpZmljYXRl
Q2hhaW5TaXplKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgQ2VydGlmaWNhdGVJbmZv
OjpDZXJ0aWZpY2F0ZUNoYWluIGNlcnRpZmljYXRlQ2hhaW47CisgICAgZm9yIChzaXplX3QgaSA9
IDA7IGkgPCBjZXJ0aWZpY2F0ZUNoYWluU2l6ZTsgaSsrKSB7CisgICAgICAgIENlcnRpZmljYXRl
SW5mbzo6Q2VydGlmaWNhdGUgY2VydGlmaWNhdGU7CisgICAgICAgIGlmICghZGVjb2Rlci5kZWNv
ZGUoY2VydGlmaWNhdGUpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgICAgIGNl
cnRpZmljYXRlQ2hhaW4uYXBwZW5kKGNlcnRpZmljYXRlKTsKKyAgICB9CisKKyAgICBjZXJ0aWZp
Y2F0ZUluZm8gPSBDZXJ0aWZpY2F0ZUluZm8geyB2ZXJpZmljYXRpb25FcnJvciwgV1RGTW92ZShj
ZXJ0aWZpY2F0ZUNoYWluKSB9OworCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKZGlmZiAtLWdpdCBh
L1Rvb2xzL0NoYW5nZUxvZyBiL1Rvb2xzL0NoYW5nZUxvZwppbmRleCA4YzUzNWM3ZmY2My4uMmVi
MzhiOGI4ZWIgMTAwNjQ0Ci0tLSBhL1Rvb2xzL0NoYW5nZUxvZworKysgYi9Ub29scy9DaGFuZ2VM
b2cKQEAgLTEsMyArMSwxOCBAQAorMjAxOC0xMS0xNiAgQmFzdWtlIFN1enVraSAgPGJhc3VrZS5z
dXp1a2lAc29ueS5jb20+CisKKyAgICAgICAgW0N1cmxdIEFkZCBBUEkgZm9yIENlcnRpZmljYXRl
SW5mby4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE5
MTY0NworCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEFk
ZGVkIHRlc3QgZm9yIG5ldyBXS0NlcnRpZmljYXRlSW5mbyBBUEkuCisKKyAgICAgICAgKiBUZXN0
V2ViS2l0QVBJL1BsYXRmb3JtV2luLmNtYWtlOgorICAgICAgICAqIFRlc3RXZWJLaXRBUEkvVGVz
dHMvV2ViS2l0L2N1cmwvQ2VydGlmaWNhdGVzLmNwcDogQWRkZWQuCisgICAgICAgIChUZXN0V2Vi
S2l0QVBJOjpDdXJsOjptYWtlQ2VydGlmaWNhdGVJbmZvKToKKyAgICAgICAgKFRlc3RXZWJLaXRB
UEk6OkN1cmw6OmlzU2FtZVBFTSk6CisgICAgICAgIChUZXN0V2ViS2l0QVBJOjpDdXJsOjpURVNU
KToKKwogMjAxOC0xMS0xNCAgQWxleCBDaHJpc3RlbnNlbiAgPGFjaHJpc3RlbnNlbkB3ZWJraXQu
b3JnPgogCiAgICAgICAgIEFkZCBTUEkgdG8gc2hvdyBhIHNhZmUgYnJvd3Npbmcgd2FybmluZwpk
aWZmIC0tZ2l0IGEvVG9vbHMvVGVzdFdlYktpdEFQSS9QbGF0Zm9ybVdpbi5jbWFrZSBiL1Rvb2xz
L1Rlc3RXZWJLaXRBUEkvUGxhdGZvcm1XaW4uY21ha2UKaW5kZXggMzY1MGU0MDY0NWEuLjliYWNj
MjEzNmE1IDEwMDY0NAotLS0gYS9Ub29scy9UZXN0V2ViS2l0QVBJL1BsYXRmb3JtV2luLmNtYWtl
CisrKyBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvUGxhdGZvcm1XaW4uY21ha2UKQEAgLTE4OSw2ICsx
ODksMTIgQEAgaWYgKEVOQUJMRV9XRUJLSVQpCiAgICAgICAgICR7VEVTVFdFQktJVEFQSV9ESVJ9
L3dpbi9VdGlsaXRpZXNXaW4uY3BwCiAgICAgKQogCisgICAgaWYgKCR7V1RGX1BMQVRGT1JNX1dJ
Tl9DQUlST30pCisgICAgICAgIGxpc3QoQVBQRU5EIHRlc3Rfd2Via2l0X2FwaV9TT1VSQ0VTCisg
ICAgICAgICAgICAke1RFU1RXRUJLSVRBUElfRElSfS9UZXN0cy9XZWJLaXQvY3VybC9DZXJ0aWZp
Y2F0ZXMuY3BwCisgICAgICAgICkKKyAgICBlbmRpZiAoKQorCiAgICAgYWRkX2xpYnJhcnkoVGVz
dFdlYktpdExpYiBTSEFSRUQKICAgICAgICAgJHtURVNUV0VCS0lUQVBJX0RJUn0vd2luL21haW4u
Y3BwCiAgICAgICAgICR7dGVzdF93ZWJraXRfYXBpX1NPVVJDRVN9CmRpZmYgLS1naXQgYS9Ub29s
cy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdC9jdXJsL0NlcnRpZmljYXRlcy5jcHAgYi9Ub29s
cy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdC9jdXJsL0NlcnRpZmljYXRlcy5jcHAKbmV3IGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLmM3ODUxMzA0MjhjCi0tLSAvZGV2L251
bGwKKysrIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXQvY3VybC9DZXJ0aWZpY2F0
ZXMuY3BwCkBAIC0wLDAgKzEsMTAzIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE4IFNvbnkg
SW50ZXJhY3RpdmUgRW50ZXJ0YWlubWVudCBJbmMuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMg
SVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRP
UlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MK
KyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgor
ICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25m
aWcuaCIKKworI2lmIFVTRShDVVJMKQorCisjaW5jbHVkZSAiV1RGU3RyaW5nVXRpbGl0aWVzLmgi
CisjaW5jbHVkZSA8V2ViS2l0L1dLQ2VydGlmaWNhdGVJbmZvLmg+CisjaW5jbHVkZSA8V2ViS2l0
L1dLQ2VydGlmaWNhdGVJbmZvQ3VybC5oPgorI2luY2x1ZGUgPFdlYktpdC9XS1JldGFpblB0ci5o
PgorI2luY2x1ZGUgPFdlYktpdC9XS1NoYXJlZEFQSUNhc3QuaD4KKwordXNpbmcgbmFtZXNwYWNl
IFdlYkNvcmU7CisKK25hbWVzcGFjZSBUZXN0V2ViS2l0QVBJIHsKKworbmFtZXNwYWNlIEN1cmwg
eworCitzdGF0aWMgY29uc3QgY2hhciogUEVNMSA9CisgICAgIi0tLS0tQkVHSU4gQ0VSVElGSUNB
VEUtLS0tLVxuIgorICAgICJNSUlCc2pDQ0FWeWdBd0lCQWdJSkFMTzVxZEFGN2xkSE1BMEdDU3FH
U0liM0RRRUJDd1VBTURNeEN6QUpCZ05WXG4iCisgICAgIkJBWVRBbFZUTVJNd0VRWURWUVFJREFw
RFlXeHBabTl5Ym1saE1ROHdEUVlEVlFRS0RBWlhaV0pMYVhRd0hoY05cbiIKKyAgICAiTVRneE1U
RTJNREV3TURNNFdoY05Namd3T0RFMU1ERXdNRE00V2pBek1Rc3dDUVlEVlFRR0V3SlZVekVUTUJF
R1xuIgorICAgICJBMVVFQ0F3S1EyRnNhV1p2Y201cFlURVBNQTBHQTFVRUNnd0dWMlZpUzJsME1G
d3dEUVlKS29aSWh2Y05BUUVCXG4iCisgICAgIkJRQURTd0F3U0FKQkFPZm9xN0JzcFhha1oxRUZF
SWt3K1BxY1gwS2tpY2hUMERLLzZnaHhkYmNTNVRER25VT01cbiIKKyAgICAicmZZaG5JL3Z6S01j
cnZPWG1xeVlSR2o3Rnd0aFdrWDlGZk1DQXdFQUFhTlRNRkV3SFFZRFZSME9CQllFRkFyWFxuIgor
ICAgICJqS0lUTHltMjRtNkl3WXY2RjVHZzV5dzNNQjhHQTFVZEl3UVlNQmFBRkFyWGpLSVRMeW0y
NG02SXdZdjZGNUdnXG4iCisgICAgIjV5dzNNQThHQTFVZEV3RUIvd1FGTUFNQkFmOHdEUVlKS29a
SWh2Y05BUUVMQlFBRFFRQzhwTzk3Yk5tZU1iMFBcbiIKKyAgICAibStZdmM3ZUk2VnUyZVhwTlVJ
VVNISG43ZitIajU4NFplRzdnTWdDZUpxbEVlRnM5ek0zdVFNaG40K05kN3BEYVxuIgorICAgICJH
ZEdkY096QVxuIgorICAgICItLS0tLUVORCBDRVJUSUZJQ0FURS0tLS0tXG4iOworCitzdGF0aWMg
Y29uc3QgY2hhciogUEVNMiA9CisgICAgIi0tLS0tQkVHSU4gQ0VSVElGSUNBVEUtLS0tLVxuIgor
ICAgICJNSUlCVkRDQi93SUpBUEFUYU1iNVJMb2ZNQTBHQ1NxR1NJYjNEUUVCQ3dVQU1ETXhDekFK
QmdOVkJBWVRBbFZUXG4iCisgICAgIk1STXdFUVlEVlFRSURBcERZV3hwWm05eWJtbGhNUTh3RFFZ
RFZRUUtEQVpYWldKTGFYUXdIaGNOTVRneE1URTJcbiIKKyAgICAiTURFd05EQXhXaGNOTWpneE1U
RXpNREV3TkRBeFdqQXdNUXN3Q1FZRFZRUUdFd0pLVURFT01Bd0dBMVVFQ0F3RlxuIgorICAgICJW
RzlyZVc4eEVUQVBCZ05WQkFvTUNGZGxZa3RwZEVwUU1Gd3dEUVlKS29aSWh2Y05BUUVCQlFBRFN3
QXdTQUpCXG4iCisgICAgIkFLOVNZSzhmZXdsRkFGVTlFTW5FNnpRU05scVZNaGFLaWF4QkZLOHFk
b0s1aUZkRWZmQys0bWF5MXNkU3VqTnJcbiIKKyAgICAibTR1T0dCcGdUTWNqZURXam9ySXRNTUVD
QXdFQUFUQU5CZ2txaGtpRzl3MEJBUXNGQUFOQkFDc1k0RDhpZUR2SlxuIgorICAgICJnZFRwYnpn
QXFGMFl5TkdiV0FXUTc1RUxWaFpTM1JKZ3dWNWpUZSt3Yzd6QjEyQkl5emV4b0h6emxXcHFVNlk1
XG4iCisgICAgImlBMjhYY2VxUVIwPVxuIgorICAgICItLS0tLUVORCBDRVJUSUZJQ0FURS0tLS0t
XG4iOworCitzdGF0aWMgYXV0byBtYWtlQ2VydGlmaWNhdGVJbmZvKHN0ZDo6dmVjdG9yPGNvbnN0
IGNoYXIqPiBwZW1zKQoreworICAgIGF1dG8gY2VydGlmaWNhdGVDaGFpbiA9IGFkb3B0V0soV0tN
dXRhYmxlQXJyYXlDcmVhdGUoKSk7CisKKyAgICBmb3IgKGF1dG8gcGVtIDogcGVtcykgeworICAg
ICAgICBhdXRvIGRhdGEgPSBhZG9wdFdLKFdLRGF0YUNyZWF0ZShyZWludGVycHJldF9jYXN0PGNv
bnN0IHVpbnQ4X3QqPihwZW0pLCBzdGQ6OnN0cmxlbihwZW0pKSk7CisgICAgICAgIFdLQXJyYXlB
cHBlbmRJdGVtKGNlcnRpZmljYXRlQ2hhaW4uZ2V0KCksIGRhdGEuZ2V0KCkpOworICAgIH0KKwor
ICAgIHJldHVybiBXS0NlcnRpZmljYXRlSW5mb0NyZWF0ZVdpdGhDZXJ0ZmljYXRlQ2hhaW4oY2Vy
dGlmaWNhdGVDaGFpbi5nZXQoKSk7Cit9CisKK3N0YXRpYyBib29sIGlzU2FtZVBFTShXS0RhdGFS
ZWYgZGF0YSwgY29uc3QgY2hhciogcGVtKQoreworICAgIHNpemVfdCBzaXplID0gc3RkOjpzdHJs
ZW4ocGVtKTsKKyAgICBpZiAoc2l6ZSAhPSBXS0RhdGFHZXRTaXplKGRhdGEpKQorICAgICAgICBy
ZXR1cm4gZmFsc2U7CisKKyAgICByZXR1cm4gIXN0ZDo6bWVtY21wKFdLRGF0YUdldEJ5dGVzKGRh
dGEpLCBwZW0sIHNpemUpOworfQorCitURVNUKEN1cmwsIENlcnRpZmljYXRlQVBJKQoreworICAg
IGF1dG8gY2VydGlmaWNhdGVJbmZvID0gYWRvcHRXSyhtYWtlQ2VydGlmaWNhdGVJbmZvKHsgUEVN
MSwgUEVNMiB9KSk7CisKKyAgICBhdXRvIHNpemUgPSBXS0NlcnRpZmljYXRlSW5mb0dldENlcnRp
ZmljYXRlQ2hhaW5TaXplKGNlcnRpZmljYXRlSW5mby5nZXQoKSk7CisgICAgQVNTRVJUX0VRKHNp
emUsIDIpOworICAgIEFTU0VSVF9UUlVFKGlzU2FtZVBFTShXS0NlcnRpZmljYXRlSW5mb0NvcHlD
ZXJ0aWZpY2F0ZUF0SW5kZXgoY2VydGlmaWNhdGVJbmZvLmdldCgpLCAwKSwgUEVNMSkpOworICAg
IEFTU0VSVF9UUlVFKGlzU2FtZVBFTShXS0NlcnRpZmljYXRlSW5mb0NvcHlDZXJ0aWZpY2F0ZUF0
SW5kZXgoY2VydGlmaWNhdGVJbmZvLmdldCgpLCAxKSwgUEVNMikpOworfQorCit9CisKK30gLy8g
bmFtZXNwYWNlIFRlc3RXZWJLaXRBUEkKKworI2VuZGlmIC8vIFVTRShDVVJMKQo=
</data>

          </attachment>
      

    </bug>

</bugzilla>