<?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>127988</bug_id>
          
          <creation_ts>2014-01-31 02:45:32 -0800</creation_ts>
          <short_desc>Add security-checked casts for all WebCore::CachedResource subclasses</short_desc>
          <delta_ts>2022-02-28 03:43:40 -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>Page Loading</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="David Kilzer (:ddkilzer)">ddkilzer</reporter>
          <assigned_to name="David Kilzer (:ddkilzer)">ddkilzer</assigned_to>
          <cc>ap</cc>
    
    <cc>commit-queue</cc>
    
    <cc>darin</cc>
    
    <cc>japhet</cc>
    
    <cc>kling</cc>
    
    <cc>koivisto</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>974256</commentid>
    <comment_count>0</comment_count>
    <who name="David Kilzer (:ddkilzer)">ddkilzer</who>
    <bug_when>2014-01-31 02:45:32 -0800</bug_when>
    <thetext>Add security-checked casts for all WebCore::CachedResource subclasses.

This is a follow-up to Bug 127967.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>974262</commentid>
    <comment_count>1</comment_count>
      <attachid>222807</attachid>
    <who name="David Kilzer (:ddkilzer)">ddkilzer</who>
    <bug_when>2014-01-31 02:51:51 -0800</bug_when>
    <thetext>Created attachment 222807
Patch v1</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>974334</commentid>
    <comment_count>2</comment_count>
      <attachid>222807</attachid>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2014-01-31 09:49:24 -0800</bug_when>
    <thetext>Comment on attachment 222807
Patch v1

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

&gt; Source/WebCore/loader/cache/CachedResource.h:159
&gt; +    bool isRawResource() const { return type() == MainResource || type() == RawResource; }

This looks ultra confusing.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>974405</commentid>
    <comment_count>3</comment_count>
    <who name="David Kilzer (:ddkilzer)">ddkilzer</who>
    <bug_when>2014-01-31 12:04:46 -0800</bug_when>
    <thetext>(In reply to comment #2)
&gt; (From update of attachment 222807 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=222807&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/loader/cache/CachedResource.h:159
&gt; &gt; +    bool isRawResource() const { return type() == MainResource || type() == RawResource; }
&gt; 
&gt; This looks ultra confusing.

Are you suggesting that a new method name is needed, or something else?

&quot;This looks ultra confusing&quot; is not an actionable comment.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>974408</commentid>
    <comment_count>4</comment_count>
    <who name="David Kilzer (:ddkilzer)">ddkilzer</who>
    <bug_when>2014-01-31 12:09:42 -0800</bug_when>
    <thetext>(In reply to comment #3)
&gt; (In reply to comment #2)
&gt; &gt; (From update of attachment 222807 [details] [details])
&gt; &gt; View in context: https://bugs.webkit.org/attachment.cgi?id=222807&amp;action=review
&gt; &gt; 
&gt; &gt; &gt; Source/WebCore/loader/cache/CachedResource.h:159
&gt; &gt; &gt; +    bool isRawResource() const { return type() == MainResource || type() == RawResource; }
&gt; &gt; 
&gt; &gt; This looks ultra confusing.
&gt; 
&gt; Are you suggesting that a new method name is needed, or something else?
&gt; 
&gt; &quot;This looks ultra confusing&quot; is not an actionable comment.

BTW, this is how the class is currently used.  I can get rid of isRawResource() (or a differently named method) and just use raw type checks everywhere, but I thought it was better to document the behavior more explicitly in code.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>974409</commentid>
    <comment_count>5</comment_count>
      <attachid>222807</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2014-01-31 12:09:46 -0800</bug_when>
    <thetext>Comment on attachment 222807
Patch v1

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

&gt;&gt;&gt; Source/WebCore/loader/cache/CachedResource.h:159
&gt;&gt;&gt; +    bool isRawResource() const { return type() == MainResource || type() == RawResource; }
&gt;&gt; 
&gt;&gt; This looks ultra confusing.
&gt; 
&gt; Are you suggesting that a new method name is needed, or something else?
&gt; 
&gt; &quot;This looks ultra confusing&quot; is not an actionable comment.

I think the way to fix this is to put it in its own paragraph with a comment explaining that CachedMainResource is derived from CachedRawResource.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>974411</commentid>
    <comment_count>6</comment_count>
      <attachid>222807</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2014-01-31 12:13:52 -0800</bug_when>
    <thetext>Comment on attachment 222807
Patch v1

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

&gt; Source/WebCore/loader/cache/CachedRawResource.cpp:42
&gt; +    ASSERT_WITH_SECURITY_IMPLICATION(isRawResource());

I don’t think this assertion is valuable.

We would have a potential security problem if something that is *not* a CachedRawResource returned *true* when asked isRawResource. But this assertion doesn’t check that.

If we have something that *is* a CachedRawResource, but returns *false* from isRawResource, the primary effect is that we will get an assertion when we call toCachedRawResource on it. This additional assertion doesn’t seem to add much, just gives an assertion earlier that we will hit later, and further I don’t think it has a security implication. Making this mistake will cause us to label a safe cast as unsafe, a false positive which is not itself evidence of a security problem.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>974419</commentid>
    <comment_count>7</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2014-01-31 12:31:34 -0800</bug_when>
    <thetext>&gt; Are you suggesting that a new method name is needed, or something else?

I don&apos;t have a suggestion. I still think that this function is harmful - with or without a comment - because one can&apos;t expect a function named isRawResource() to return true for anything but RawResources.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>974426</commentid>
    <comment_count>8</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2014-01-31 12:47:05 -0800</bug_when>
    <thetext>(In reply to comment #7)
&gt; &gt; Are you suggesting that a new method name is needed, or something else?
&gt; 
&gt; I don&apos;t have a suggestion. I still think that this function is harmful - with or without a comment - because one can&apos;t expect a function named isRawResource() to return true for anything but RawResources.

Since CachedMainResource is derived from CachedRawResource, in what sense a CachedMainResource &quot;not a CachedRawResource&quot;?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>974438</commentid>
    <comment_count>9</comment_count>
    <who name="David Kilzer (:ddkilzer)">ddkilzer</who>
    <bug_when>2014-01-31 12:58:16 -0800</bug_when>
    <thetext>(In reply to comment #6)
&gt; (From update of attachment 222807 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=222807&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/loader/cache/CachedRawResource.cpp:42
&gt; &gt; +    ASSERT_WITH_SECURITY_IMPLICATION(isRawResource());
&gt; 
&gt; I don’t think this assertion is valuable.
&gt; 
&gt; We would have a potential security problem if something that is *not* a CachedRawResource returned *true* when asked isRawResource. But this assertion doesn’t check that.
&gt; 
&gt; If we have something that *is* a CachedRawResource, but returns *false* from isRawResource, the primary effect is that we will get an assertion when we call toCachedRawResource on it. This additional assertion doesn’t seem to add much, just gives an assertion earlier that we will hit later, and further I don’t think it has a security implication. Making this mistake will cause us to label a safe cast as unsafe, a false positive which is not itself evidence of a security problem.

Okay, I agree with your statement that this isn&apos;t a security concern.  However, I think it&apos;s best to catch issues as early as possible, so a plain assertion seems appropriate for developers building Debug builds:

+    ASSERT(isRawResource());</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>974448</commentid>
    <comment_count>10</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2014-01-31 13:17:09 -0800</bug_when>
    <thetext>(In reply to comment #8)
&gt; Since CachedMainResource is derived from CachedRawResource, in what sense a CachedMainResource &quot;not a CachedRawResource&quot;?

I don&apos;t think that this statement is accurate. We don&apos;t have a CachedMainResource class in WebKit, and in fact, CachedRawResource is a leaf &quot;final&quot; class.

The root of the confusion is of course that type() is almost the kind of poor man&apos;s RTTI that we use all over the place in WebKit, but not quite. The right solution is to split poor man&apos;s RTTI and how we determine whether a cached raw resource is main resource or XHR. I think that adding gloss over the current situation in the form of isRawResource() function makes it more confusing, not less.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>974512</commentid>
    <comment_count>11</comment_count>
    <who name="David Kilzer (:ddkilzer)">ddkilzer</who>
    <bug_when>2014-01-31 15:38:38 -0800</bug_when>
    <thetext>(In reply to comment #9)
&gt; (In reply to comment #6)
&gt; &gt; (From update of attachment 222807 [details] [details])
&gt; &gt; View in context: https://bugs.webkit.org/attachment.cgi?id=222807&amp;action=review
&gt; &gt; 
&gt; &gt; &gt; Source/WebCore/loader/cache/CachedRawResource.cpp:42
&gt; &gt; &gt; +    ASSERT_WITH_SECURITY_IMPLICATION(isRawResource());
&gt; &gt; 
&gt; &gt; I don’t think this assertion is valuable.
&gt; &gt; 
&gt; &gt; We would have a potential security problem if something that is *not* a CachedRawResource returned *true* when asked isRawResource. But this assertion doesn’t check that.
&gt; &gt; 
&gt; &gt; If we have something that *is* a CachedRawResource, but returns *false* from isRawResource, the primary effect is that we will get an assertion when we call toCachedRawResource on it. This additional assertion doesn’t seem to add much, just gives an assertion earlier that we will hit later, and further I don’t think it has a security implication. Making this mistake will cause us to label a safe cast as unsafe, a false positive which is not itself evidence of a security problem.
&gt; 
&gt; Okay, I agree with your statement that this isn&apos;t a security concern.  However, I think it&apos;s best to catch issues as early as possible, so a plain assertion seems appropriate for developers building Debug builds:
&gt; 
&gt; +    ASSERT(isRawResource());

I take that back.  +[WebCache imageForURL:] pulls a CachedResource from the cache and checks isImage().  If we created a CachedRawResource with a type of CachedResource::ImageResource by accident, we&apos;re going to cast a CachedRawResource* to a CachedImage*, then call CachedImage::hasImage() on the CachedRawResource object.  Boom.

To be fair, incorrect code would have to be written before that would happen, but the idea of the assert is that it would catch the bad code in a debug build, and flag it properly as a potential security issue.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>974523</commentid>
    <comment_count>12</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2014-01-31 16:00:01 -0800</bug_when>
    <thetext>(In reply to comment #11)
&gt; I take that back.  +[WebCache imageForURL:] pulls a CachedResource from the cache and checks isImage().

Then the assertion we need is ASSERT(!isImage());

&gt; To be fair, incorrect code would have to be written before that would happen, but the idea of the assert is that it would catch the bad code in a debug build, and flag it properly as a potential security issue.

But not if we assert the wrong thing.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>974613</commentid>
    <comment_count>13</comment_count>
    <who name="David Kilzer (:ddkilzer)">ddkilzer</who>
    <bug_when>2014-02-01 08:09:45 -0800</bug_when>
    <thetext>(In reply to comment #12)
&gt; (In reply to comment #11)
&gt; &gt; I take that back.  +[WebCache imageForURL:] pulls a CachedResource from the cache and checks isImage().
&gt; 
&gt; Then the assertion we need is ASSERT(!isImage());

Note that InspectorPageAgent::cachedResourceContent() also does additional checking of the CachedResource::Type and may cast to CachedCSSStyleSheet and CachedScript, so it&apos;s more than just CachedImage that could be cast incorrectly.

&gt; &gt; To be fair, incorrect code would have to be written before that would happen, but the idea of the assert is that it would catch the bad code in a debug build, and flag it properly as a potential security issue.
&gt; 
&gt; But not if we assert the wrong thing.

Stepping back, the root of the issue is that the constructor for CachedRawResource takes a CachedResource::Type enum instead of automatically using one for the developer based on the class itself because CachedRawResource is the only class that can represent more than one CachedResource::Type.

Thus, a coding mistake would be easy to make in the future by passing in the wrong type.  My original defense was to assert that the CachedResource::Type passed in was an acceptable value (MainResource or RawResource).

It didn&apos;t make sense to me to check for all the wrong types individually, hence my original code checking for the two acceptable types.  Alexey suggested I change isRawResource() to be more descriptive, so it would now be:

    ASSERT(isMainOrRawResource());

Another way to prevent developers from doing the wrong thing would be to stop letting the developer specify the CachedResource::Type (either through yet another enum, or by subclassing CachedRawResource to CachedMainResource, or by some other mechanism).  I&apos;ll add a FIXME by the assertion when landing.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>974616</commentid>
    <comment_count>14</comment_count>
    <who name="David Kilzer (:ddkilzer)">ddkilzer</who>
    <bug_when>2014-02-01 08:28:31 -0800</bug_when>
    <thetext>Committed r163242: &lt;http://trac.webkit.org/changeset/163242&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>222807</attachid>
            <date>2014-01-31 02:51:51 -0800</date>
            <delta_ts>2022-02-28 03:43:40 -0800</delta_ts>
            <desc>Patch v1</desc>
            <filename>bug-127988-20140131025150.patch</filename>
            <type>text/plain</type>
            <size>15214</size>
            <attacher name="David Kilzer (:ddkilzer)">ddkilzer</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTYzMTU0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZmFiYzdkODIwMDdkMTA4
MDU5ZjMwODNiODFiZTQ4OGEwNTE3Zjc0MC4uODM3ZjJiNTYyODU2ODBjNTUwYThhNjk4N2RkOWU1
ZmZkYzA5NjhmMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDU5IEBACisyMDE0LTAxLTMxICBEYXZp
ZCBLaWx6ZXIgIDxkZGtpbHplckBhcHBsZS5jb20+CisKKyAgICAgICAgQWRkIHNlY3VyaXR5LWNo
ZWNrZWQgY2FzdHMgZm9yIGFsbCBXZWJDb3JlOjpDYWNoZWRSZXNvdXJjZSBzdWJjbGFzc2VzCisg
ICAgICAgIDxodHRwOi8vd2Via2l0Lm9yZy9iLzEyNzk4OD4KKworICAgICAgICBSZXZpZXdlZCBi
eSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIGluc3BlY3Rvci9JbnNwZWN0b3JQYWdlQWdl
bnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yUGFnZUFnZW50OjpjYWNoZWRSZXNv
dXJjZUNvbnRlbnQpOgorICAgICAgICAqIGluc3BlY3Rvci9JbnNwZWN0b3JSZXNvdXJjZUFnZW50
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvclJlc291cmNlQWdlbnQ6OmRpZExvYWRS
ZXNvdXJjZUZyb21NZW1vcnlDYWNoZSk6CisgICAgICAgIC0gU3dpdGNoIGZyb20gc3RhdGljX2Nh
c3Q8PigpIHRvIHNlY3VyaXR5LWNoZWNrZWQgY2FzdC4KKworICAgICAgICAqIGxvYWRlci9jYWNo
ZS9DYWNoZWRDU1NTdHlsZVNoZWV0Lmg6CisgICAgICAgIChXZWJDb3JlOjp0b0NhY2hlZENTU1N0
eWxlU2hlZXQpOiBBZGQuCisgICAgICAgICogbG9hZGVyL2NhY2hlL0NhY2hlZEZvbnQuaDoKKyAg
ICAgICAgKFdlYkNvcmU6OnRvQ2FjaGVkRm9udCk6IEFkZC4KKworICAgICAgICAqIGxvYWRlci9j
YWNoZS9DYWNoZWRJbWFnZS5oOiBNYWtlIENhY2hlZEltYWdlTWFudWFsIGZpbmFsLgorCisgICAg
ICAgICogbG9hZGVyL2NhY2hlL0NhY2hlZFJhd1Jlc291cmNlLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OkNhY2hlZFJhd1Jlc291cmNlOjpDYWNoZWRSYXdSZXNvdXJjZSk6IEFkZCBhc3NlcnQgdGhh
dAorICAgICAgICBvbmx5IE1haW5SZXNvdXJjZSBvciBSYXdSZXNvdXJjZSB0eXBlcyBhcmUgcGFz
c2VkIGluLiAgVGhpcyBpcworICAgICAgICBjb25zaWRlcmVkIGEgc2VjdXJpdHkgaW1wbGljYXRp
b24gYmVjYXVzZSBzZXR0aW5nIHRoZSB3cm9uZyB0eXBlCisgICAgICAgIGNvdWxkIGxlYWQgdXMg
dG8gY2FzdCB0byB0aGUgd3JvbmcgY2xhc3MgZWxzZXdoZXJlLgorICAgICAgICAoV2ViQ29yZTo6
Q2FjaGVkUmF3UmVzb3VyY2U6OnN3aXRjaENsaWVudHNUb1JldmFsaWRhdGVkUmVzb3VyY2UpOgor
ICAgICAgICBTd2l0Y2ggZnJvbSBzdGF0aWNfY2FzdDw+KCkgdG8gdG9DYWNoZWRSYXdSZXNvdXJj
ZSgpLgorCisgICAgICAgICogbG9hZGVyL2NhY2hlL0NhY2hlZFJhd1Jlc291cmNlLmg6CisgICAg
ICAgIChXZWJDb3JlOjp0b0NhY2hlZFJhd1Jlc291cmNlKTogQWRkLgorICAgICAgICAqIGxvYWRl
ci9jYWNoZS9DYWNoZWRSZXNvdXJjZS5oOgorICAgICAgICAoV2ViQ29yZTo6Q2FjaGVkUmVzb3Vy
Y2U6OmlzUmF3UmVzb3VyY2UpOiBBZGQuICBBCisgICAgICAgIENhY2hlZFJhd1Jlc291cmNlIGNv
dWxkIGJlIGVpdGhlciBhIE1haW5SZXNvdXJjZSBvciBhCisgICAgICAgIFJhd1Jlc291cmNlLiAg
Q3VycmVudGx5IG9ubHkgdXNlZCBpbiBhc3NlcnRpb25zLgorCisgICAgICAgICogbG9hZGVyL2Nh
Y2hlL0NhY2hlZFJlc291cmNlTG9hZGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNhY2hlZFJl
c291cmNlTG9hZGVyOjpyZXF1ZXN0Rm9udCk6CisgICAgICAgIChXZWJDb3JlOjpDYWNoZWRSZXNv
dXJjZUxvYWRlcjo6cmVxdWVzdFRleHRUcmFjayk6CisgICAgICAgIChXZWJDb3JlOjpDYWNoZWRS
ZXNvdXJjZUxvYWRlcjo6cmVxdWVzdENTU1N0eWxlU2hlZXQpOgorICAgICAgICAoV2ViQ29yZTo6
Q2FjaGVkUmVzb3VyY2VMb2FkZXI6OnJlcXVlc3RVc2VyQ1NTU3R5bGVTaGVldCk6CisgICAgICAg
IChXZWJDb3JlOjpDYWNoZWRSZXNvdXJjZUxvYWRlcjo6cmVxdWVzdFNjcmlwdCk6CisgICAgICAg
IChXZWJDb3JlOjpDYWNoZWRSZXNvdXJjZUxvYWRlcjo6cmVxdWVzdFhTTFN0eWxlU2hlZXQpOgor
ICAgICAgICAoV2ViQ29yZTo6Q2FjaGVkUmVzb3VyY2VMb2FkZXI6OnJlcXVlc3RTVkdEb2N1bWVu
dCk6CisgICAgICAgIChXZWJDb3JlOjpDYWNoZWRSZXNvdXJjZUxvYWRlcjo6cmVxdWVzdFJhd1Jl
c291cmNlKToKKyAgICAgICAgKFdlYkNvcmU6OkNhY2hlZFJlc291cmNlTG9hZGVyOjpyZXF1ZXN0
TWFpblJlc291cmNlKToKKyAgICAgICAgLSBTd2l0Y2ggZnJvbSBzdGF0aWNfY2FzdDw+KCkgdG8g
c2VjdXJpdHktY2hlY2tlZCBjYXN0LgorCisgICAgICAgICogbG9hZGVyL2NhY2hlL0NhY2hlZFNW
R0RvY3VtZW50Lmg6CisgICAgICAgIChXZWJDb3JlOjp0b0NhY2hlZFNWR0RvY3VtZW50KTogQWRk
LgorICAgICAgICAqIGxvYWRlci9jYWNoZS9DYWNoZWRTY3JpcHQuaDoKKyAgICAgICAgKFdlYkNv
cmU6OnRvQ2FjaGVkU2NyaXB0KTogQWRkLgorICAgICAgICAqIGxvYWRlci9jYWNoZS9DYWNoZWRU
ZXh0VHJhY2suaDoKKyAgICAgICAgKFdlYkNvcmU6OnRvQ2FjaGVkVGV4dFRyYWNrKTogQWRkLgor
ICAgICAgICAqIGxvYWRlci9jYWNoZS9DYWNoZWRYU0xTdHlsZVNoZWV0Lmg6CisgICAgICAgIChX
ZWJDb3JlOjp0b0NhY2hlZFhTTFN0eWxlU2hlZXQpOiBBZGQuCisKIDIwMTQtMDEtMzAgIEplc3Np
ZSBCZXJsaW4gIDxqYmVybGluQGFwcGxlLmNvbT4KIAogICAgICAgICBTcGVjdWxhdGl2ZSBidWls
ZCBmaXguCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yUGFn
ZUFnZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JQYWdlQWdlbnQu
Y3BwCmluZGV4IGUzZDBjYzBiZWMzMDVlMmU1N2E2NTg5NTM1NmI5YWVjNjIxNGM0YzQuLmYyNzkz
MGM3ZDI2ZjQxYWU1M2ExMWE3MjQwODgxNGYwYjg5NTA5YWUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JQYWdlQWdlbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJD
b3JlL2luc3BlY3Rvci9JbnNwZWN0b3JQYWdlQWdlbnQuY3BwCkBAIC0xNzQsMTAgKzE3NCwxMCBA
QCBib29sIEluc3BlY3RvclBhZ2VBZ2VudDo6Y2FjaGVkUmVzb3VyY2VDb250ZW50KENhY2hlZFJl
c291cmNlKiBjYWNoZWRSZXNvdXJjZSwgUwogICAgIGlmIChjYWNoZWRSZXNvdXJjZSkgewogICAg
ICAgICBzd2l0Y2ggKGNhY2hlZFJlc291cmNlLT50eXBlKCkpIHsKICAgICAgICAgY2FzZSBDYWNo
ZWRSZXNvdXJjZTo6Q1NTU3R5bGVTaGVldDoKLSAgICAgICAgICAgICpyZXN1bHQgPSBzdGF0aWNf
Y2FzdDxDYWNoZWRDU1NTdHlsZVNoZWV0Kj4oY2FjaGVkUmVzb3VyY2UpLT5zaGVldFRleHQoZmFs
c2UpOworICAgICAgICAgICAgKnJlc3VsdCA9IHRvQ2FjaGVkQ1NTU3R5bGVTaGVldChjYWNoZWRS
ZXNvdXJjZSktPnNoZWV0VGV4dChmYWxzZSk7CiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAg
ICAgICAgY2FzZSBDYWNoZWRSZXNvdXJjZTo6U2NyaXB0OgotICAgICAgICAgICAgKnJlc3VsdCA9
IHN0YXRpY19jYXN0PENhY2hlZFNjcmlwdCo+KGNhY2hlZFJlc291cmNlKS0+c2NyaXB0KCk7Cisg
ICAgICAgICAgICAqcmVzdWx0ID0gdG9DYWNoZWRTY3JpcHQoY2FjaGVkUmVzb3VyY2UpLT5zY3Jp
cHQoKTsKICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICBjYXNlIENhY2hlZFJlc291
cmNlOjpSYXdSZXNvdXJjZTogewogICAgICAgICAgICAgUmVzb3VyY2VCdWZmZXIqIGJ1ZmZlciA9
IGNhY2hlZFJlc291cmNlLT5yZXNvdXJjZUJ1ZmZlcigpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvclJlc291cmNlQWdlbnQuY3BwIGIvU291cmNlL1dlYkNv
cmUvaW5zcGVjdG9yL0luc3BlY3RvclJlc291cmNlQWdlbnQuY3BwCmluZGV4IDA1MTlmMWE1NmFk
ZDk2YzYyYjU1ZTY5NDE3ZmIyZGQxMzQ5ZTU0YTEuLjY1ZjhkYjFiNTVkODI5YWY3ZWNkZWFjZWEw
ODFlMzJkYWQ1OGExZGQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNw
ZWN0b3JSZXNvdXJjZUFnZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5z
cGVjdG9yUmVzb3VyY2VBZ2VudC5jcHAKQEAgLTMzNCw3ICszMzQsNyBAQCB2b2lkIEluc3BlY3Rv
clJlc291cmNlQWdlbnQ6OmRpZExvYWRSZXNvdXJjZUZyb21NZW1vcnlDYWNoZShEb2N1bWVudExv
YWRlciogbG9hZAogICAgIG1fcmVzb3VyY2VzRGF0YS0+cmVzb3VyY2VDcmVhdGVkKHJlcXVlc3RJ
ZCwgbG9hZGVySWQpOwogICAgIG1fcmVzb3VyY2VzRGF0YS0+YWRkQ2FjaGVkUmVzb3VyY2UocmVx
dWVzdElkLCByZXNvdXJjZSk7CiAgICAgaWYgKHJlc291cmNlLT50eXBlKCkgPT0gQ2FjaGVkUmVz
b3VyY2U6OlJhd1Jlc291cmNlKSB7Ci0gICAgICAgIENhY2hlZFJhd1Jlc291cmNlKiByYXdSZXNv
dXJjZSA9IHN0YXRpY19jYXN0PENhY2hlZFJhd1Jlc291cmNlKj4ocmVzb3VyY2UpOworICAgICAg
ICBDYWNoZWRSYXdSZXNvdXJjZSogcmF3UmVzb3VyY2UgPSB0b0NhY2hlZFJhd1Jlc291cmNlKHJl
c291cmNlKTsKICAgICAgICAgU3RyaW5nIHJhd1JlcXVlc3RJZCA9IElkZW50aWZpZXJzRmFjdG9y
eTo6cmVxdWVzdElkKHJhd1Jlc291cmNlLT5pZGVudGlmaWVyKCkpOwogICAgICAgICBtX3Jlc291
cmNlc0RhdGEtPnJldXNlWEhSUmVwbGF5RGF0YShyZXF1ZXN0SWQsIHJhd1JlcXVlc3RJZCk7CiAg
ICAgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvbG9hZGVyL2NhY2hlL0NhY2hlZENTU1N0
eWxlU2hlZXQuaCBiL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9jYWNoZS9DYWNoZWRDU1NTdHlsZVNo
ZWV0LmgKaW5kZXggMTlhZDYxOTM5NTYyY2YyM2VlNTBmMDI5YjlhMDlkM2NhYWEzNDVjNy4uZjhi
YjBjNjU1ZDc2NmUyMzk0ZDc4NDhhNDQwNGNmYjQxYWE0YzI4MyAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvbG9hZGVyL2NhY2hlL0NhY2hlZENTU1N0eWxlU2hlZXQuaAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9sb2FkZXIvY2FjaGUvQ2FjaGVkQ1NTU3R5bGVTaGVldC5oCkBAIC02Nyw2ICs2Nyw4
IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgUmVmUHRyPFN0eWxlU2hlZXRDb250ZW50
cz4gbV9wYXJzZWRTdHlsZVNoZWV0Q2FjaGU7CiAgICAgfTsKIAorQ0FDSEVEX1JFU09VUkNFX1RZ
UEVfQ0FTVFMoQ2FjaGVkQ1NTU3R5bGVTaGVldCwgQ2FjaGVkUmVzb3VyY2UsIENhY2hlZFJlc291
cmNlOjpDU1NTdHlsZVNoZWV0KQorCiB9CiAKICNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvbG9hZGVyL2NhY2hlL0NhY2hlZEZvbnQuaCBiL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9j
YWNoZS9DYWNoZWRGb250LmgKaW5kZXggZjE5NTgyYjk2ZWVjMGYyOTJiZWUxZWIwYzg4MjY1Y2I5
M2JkYmY0OC4uNzQ0YjYyZDZhZjliYzRmYjRiNGFiNzZlMDVmNDgyNzVjYTUxYjc2NCAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvbG9hZGVyL2NhY2hlL0NhY2hlZEZvbnQuaAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9sb2FkZXIvY2FjaGUvQ2FjaGVkRm9udC5oCkBAIC03OCw2ICs3OCw4IEBAIHBy
aXZhdGU6CiAgICAgZnJpZW5kIGNsYXNzIE1lbW9yeUNhY2hlOwogfTsKIAorQ0FDSEVEX1JFU09V
UkNFX1RZUEVfQ0FTVFMoQ2FjaGVkRm9udCwgQ2FjaGVkUmVzb3VyY2UsIENhY2hlZFJlc291cmNl
OjpGb250UmVzb3VyY2UpCisKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIAogI2VuZGlmIC8vIENh
Y2hlZEZvbnRfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvbG9hZGVyL2NhY2hlL0NhY2hl
ZEltYWdlLmggYi9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvY2FjaGUvQ2FjaGVkSW1hZ2UuaAppbmRl
eCA2ZDVlN2ZkMmEwN2ZkMjM3ZDdmZGY1ZTg3NTI5ZmI0ZDVjODRhNDUxLi5iMGRjOGQwMDQyNWIy
NWI0MWE2MGYzNTdjM2QyYzE5YmVhY2Q2NTU5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9s
b2FkZXIvY2FjaGUvQ2FjaGVkSW1hZ2UuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvY2Fj
aGUvQ2FjaGVkSW1hZ2UuaApAQCAtMTQ5LDcgKzE0OSw3IEBAIHByaXZhdGU6CiAvLyBGSVhNRTog
V2Ugc2hvdWxkIGxvb2sgdG8gaW5jb3Jwb3JhdGUgdGhlIGZ1bmN0aW9uYWxpdHkgb2YgQ2FjaGVk
SW1hZ2VNYW51YWwKIC8vIGludG8gQ2FjaGVkSW1hZ2Ugb3IgZmluZCBhIGJldHRlciBwbGFjZSBm
b3IgdGhpcyBjbGFzcy4KIC8vIEZJWE1FOiBSZW1vdmUgdGhlIFVTRShDRikgb25jZSB3ZSBtYWtl
IE1lbW9yeUNhY2hlOjphZGRJbWFnZVRvQ2FjaGUoKSBwbGF0Zm9ybS1pbmRlcGVuZGVudC4KLWNs
YXNzIENhY2hlZEltYWdlTWFudWFsIDogcHVibGljIENhY2hlZEltYWdlIHsKK2NsYXNzIENhY2hl
ZEltYWdlTWFudWFsIGZpbmFsIDogcHVibGljIENhY2hlZEltYWdlIHsKIHB1YmxpYzoKICAgICBD
YWNoZWRJbWFnZU1hbnVhbChjb25zdCBVUkwmLCBJbWFnZSopOwogICAgIHZvaWQgYWRkRmFrZUNs
aWVudCgpIHsgYWRkQ2xpZW50KG1fZmFrZUNsaWVudC5nZXQoKSk7IH0KZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL2xvYWRlci9jYWNoZS9DYWNoZWRSYXdSZXNvdXJjZS5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9sb2FkZXIvY2FjaGUvQ2FjaGVkUmF3UmVzb3VyY2UuY3BwCmluZGV4IDRkY2RkMWVh
NjJkODA2YTlmZmZmZWNlMWZjNTY1NGI5M2E2YmNjZGMuLmZjNTcyNWY0MDhlMzliOWU5ZmMwYTMz
NDQ5NGU5Y2E2NTk3ZTU1NGEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9jYWNo
ZS9DYWNoZWRSYXdSZXNvdXJjZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvbG9hZGVyL2NhY2hl
L0NhY2hlZFJhd1Jlc291cmNlLmNwcApAQCAtMzksNiArMzksNyBAQCBDYWNoZWRSYXdSZXNvdXJj
ZTo6Q2FjaGVkUmF3UmVzb3VyY2UoUmVzb3VyY2VSZXF1ZXN0JiByZXNvdXJjZVJlcXVlc3QsIFR5
cGUgdHlwZQogICAgIDogQ2FjaGVkUmVzb3VyY2UocmVzb3VyY2VSZXF1ZXN0LCB0eXBlKQogICAg
ICwgbV9pZGVudGlmaWVyKDApCiB7CisgICAgQVNTRVJUX1dJVEhfU0VDVVJJVFlfSU1QTElDQVRJ
T04oaXNSYXdSZXNvdXJjZSgpKTsKIH0KIAogY29uc3QgY2hhciogQ2FjaGVkUmF3UmVzb3VyY2U6
OmNhbGN1bGF0ZUluY3JlbWVudGFsRGF0YUNodW5rKFJlc291cmNlQnVmZmVyKiBkYXRhLCB1bnNp
Z25lZCYgaW5jcmVtZW50YWxEYXRhTGVuZ3RoKQpAQCAtMTgxLDcgKzE4Miw3IEBAIHZvaWQgQ2Fj
aGVkUmF3UmVzb3VyY2U6OnN3aXRjaENsaWVudHNUb1JldmFsaWRhdGVkUmVzb3VyY2UoKQogICAg
IEFTU0VSVChtX2xvYWRlcik7CiAgICAgLy8gSWYgd2UncmUgaW4gdGhlIG1pZGRsZSBvZiBhIHN1
Y2Nlc3NmdWwgcmV2YWxpZGF0aW9uLCByZXNwb25zZVJlY2VpdmVkKCkgaGFzbid0IGJlZW4gY2Fs
bGVkLCBzbyB3ZSBoYXZlbid0IHNldCBtX2lkZW50aWZpZXIuCiAgICAgQVNTRVJUKCFtX2lkZW50
aWZpZXIpOwotICAgIHN0YXRpY19jYXN0PENhY2hlZFJhd1Jlc291cmNlKj4ocmVzb3VyY2VUb1Jl
dmFsaWRhdGUoKSktPm1faWRlbnRpZmllciA9IG1fbG9hZGVyLT5pZGVudGlmaWVyKCk7CisgICAg
dG9DYWNoZWRSYXdSZXNvdXJjZShyZXNvdXJjZVRvUmV2YWxpZGF0ZSgpKS0+bV9pZGVudGlmaWVy
ID0gbV9sb2FkZXItPmlkZW50aWZpZXIoKTsKICAgICBDYWNoZWRSZXNvdXJjZTo6c3dpdGNoQ2xp
ZW50c1RvUmV2YWxpZGF0ZWRSZXNvdXJjZSgpOwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9sb2FkZXIvY2FjaGUvQ2FjaGVkUmF3UmVzb3VyY2UuaCBiL1NvdXJjZS9XZWJDb3JlL2xv
YWRlci9jYWNoZS9DYWNoZWRSYXdSZXNvdXJjZS5oCmluZGV4IDQ4ZTA0ZmZlY2FmYmQzZTcwYTlm
N2UxNTg4NzkxOGNjMTEzNTJlNWEuLjYzZWM3ZTRlYmNiZThjYTYwNGJmYmE4Y2M2NWUxNzQxMTAy
ODNjYzAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9jYWNoZS9DYWNoZWRSYXdS
ZXNvdXJjZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9jYWNoZS9DYWNoZWRSYXdSZXNv
dXJjZS5oCkBAIC04OCw2ICs4OCw4IEBAIHByaXZhdGU6CiAgICAgVmVjdG9yPFJlZGlyZWN0UGFp
cj4gbV9yZWRpcmVjdENoYWluOwogfTsKIAorVFlQRV9DQVNUU19CQVNFKENhY2hlZFJhd1Jlc291
cmNlLCBDYWNoZWRSZXNvdXJjZSwgcmVzb3VyY2UsIHJlc291cmNlLT5pc1Jhd1Jlc291cmNlKCks
IHJlc291cmNlLmlzUmF3UmVzb3VyY2UoKSkKKwogfQogCiAjZW5kaWYgLy8gQ2FjaGVkUmF3UmVz
b3VyY2VfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvbG9hZGVyL2NhY2hlL0NhY2hlZFJl
c291cmNlLmggYi9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvY2FjaGUvQ2FjaGVkUmVzb3VyY2UuaApp
bmRleCBjY2JjN2JhMGMwNzljMTI1NWIzNmQxMDMxOWYwZjFmYTJlYzY4YjQ1Li4zOTYwMGM3MWRl
ZGI5MTNkYjg3Mjc1MzkzN2EyMGIyY2RlMjYzZTMzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9sb2FkZXIvY2FjaGUvQ2FjaGVkUmVzb3VyY2UuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9sb2Fk
ZXIvY2FjaGUvQ2FjaGVkUmVzb3VyY2UuaApAQCAtMTU2LDYgKzE1Niw3IEBAIHB1YmxpYzoKICAg
ICBTdWJyZXNvdXJjZUxvYWRlciogbG9hZGVyKCkgeyByZXR1cm4gbV9sb2FkZXIuZ2V0KCk7IH0K
IAogICAgIGJvb2wgaXNJbWFnZSgpIGNvbnN0IHsgcmV0dXJuIHR5cGUoKSA9PSBJbWFnZVJlc291
cmNlOyB9CisgICAgYm9vbCBpc1Jhd1Jlc291cmNlKCkgY29uc3QgeyByZXR1cm4gdHlwZSgpID09
IE1haW5SZXNvdXJjZSB8fCB0eXBlKCkgPT0gUmF3UmVzb3VyY2U7IH0KICAgICBib29sIGlnbm9y
ZUZvclJlcXVlc3RDb3VudCgpIGNvbnN0CiAgICAgewogICAgICAgICByZXR1cm4gdHlwZSgpID09
IE1haW5SZXNvdXJjZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvbG9hZGVyL2NhY2hlL0Nh
Y2hlZFJlc291cmNlTG9hZGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9jYWNoZS9DYWNo
ZWRSZXNvdXJjZUxvYWRlci5jcHAKaW5kZXggYjY4N2ExMTBkNzVlMjBkZmExYzgzMTg2MDJhNGM3
YTU0NTNlZmJhMy4uNjZiOGEwOThkZTVjZGFhZGI2MTYyMDM1OWI4N2QyNGYyZDIzZTk2ZSAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvbG9hZGVyL2NhY2hlL0NhY2hlZFJlc291cmNlTG9hZGVy
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvY2FjaGUvQ2FjaGVkUmVzb3VyY2VMb2Fk
ZXIuY3BwCkBAIC0xNjUsMTkgKzE2NSwxOSBAQCBDYWNoZWRSZXNvdXJjZUhhbmRsZTxDYWNoZWRJ
bWFnZT4gQ2FjaGVkUmVzb3VyY2VMb2FkZXI6OnJlcXVlc3RJbWFnZShDYWNoZWRSZXNvdQogCiBD
YWNoZWRSZXNvdXJjZUhhbmRsZTxDYWNoZWRGb250PiBDYWNoZWRSZXNvdXJjZUxvYWRlcjo6cmVx
dWVzdEZvbnQoQ2FjaGVkUmVzb3VyY2VSZXF1ZXN0JiByZXF1ZXN0KQogewotICAgIHJldHVybiBz
dGF0aWNfY2FzdDxDYWNoZWRGb250Kj4ocmVxdWVzdFJlc291cmNlKENhY2hlZFJlc291cmNlOjpG
b250UmVzb3VyY2UsIHJlcXVlc3QpLmdldCgpKTsKKyAgICByZXR1cm4gdG9DYWNoZWRGb250KHJl
cXVlc3RSZXNvdXJjZShDYWNoZWRSZXNvdXJjZTo6Rm9udFJlc291cmNlLCByZXF1ZXN0KS5nZXQo
KSk7CiB9CiAKICNpZiBFTkFCTEUoVklERU9fVFJBQ0spCiBDYWNoZWRSZXNvdXJjZUhhbmRsZTxD
YWNoZWRUZXh0VHJhY2s+IENhY2hlZFJlc291cmNlTG9hZGVyOjpyZXF1ZXN0VGV4dFRyYWNrKENh
Y2hlZFJlc291cmNlUmVxdWVzdCYgcmVxdWVzdCkKIHsKLSAgICByZXR1cm4gc3RhdGljX2Nhc3Q8
Q2FjaGVkVGV4dFRyYWNrKj4ocmVxdWVzdFJlc291cmNlKENhY2hlZFJlc291cmNlOjpUZXh0VHJh
Y2tSZXNvdXJjZSwgcmVxdWVzdCkuZ2V0KCkpOworICAgIHJldHVybiB0b0NhY2hlZFRleHRUcmFj
ayhyZXF1ZXN0UmVzb3VyY2UoQ2FjaGVkUmVzb3VyY2U6OlRleHRUcmFja1Jlc291cmNlLCByZXF1
ZXN0KS5nZXQoKSk7CiB9CiAjZW5kaWYKIAogQ2FjaGVkUmVzb3VyY2VIYW5kbGU8Q2FjaGVkQ1NT
U3R5bGVTaGVldD4gQ2FjaGVkUmVzb3VyY2VMb2FkZXI6OnJlcXVlc3RDU1NTdHlsZVNoZWV0KENh
Y2hlZFJlc291cmNlUmVxdWVzdCYgcmVxdWVzdCkKIHsKLSAgICByZXR1cm4gc3RhdGljX2Nhc3Q8
Q2FjaGVkQ1NTU3R5bGVTaGVldCo+KHJlcXVlc3RSZXNvdXJjZShDYWNoZWRSZXNvdXJjZTo6Q1NT
U3R5bGVTaGVldCwgcmVxdWVzdCkuZ2V0KCkpOworICAgIHJldHVybiB0b0NhY2hlZENTU1N0eWxl
U2hlZXQocmVxdWVzdFJlc291cmNlKENhY2hlZFJlc291cmNlOjpDU1NTdHlsZVNoZWV0LCByZXF1
ZXN0KS5nZXQoKSk7CiB9CiAKIENhY2hlZFJlc291cmNlSGFuZGxlPENhY2hlZENTU1N0eWxlU2hl
ZXQ+IENhY2hlZFJlc291cmNlTG9hZGVyOjpyZXF1ZXN0VXNlckNTU1N0eWxlU2hlZXQoQ2FjaGVk
UmVzb3VyY2VSZXF1ZXN0JiByZXF1ZXN0KQpAQCAtMTkwLDcgKzE5MCw3IEBAIENhY2hlZFJlc291
cmNlSGFuZGxlPENhY2hlZENTU1N0eWxlU2hlZXQ+IENhY2hlZFJlc291cmNlTG9hZGVyOjpyZXF1
ZXN0VXNlckNTU1N0CiAKICAgICBpZiAoQ2FjaGVkUmVzb3VyY2UqIGV4aXN0aW5nID0gbWVtb3J5
Q2FjaGUoKS0+cmVzb3VyY2VGb3JSZXF1ZXN0KHJlcXVlc3QucmVzb3VyY2VSZXF1ZXN0KCkpKSB7
CiAgICAgICAgIGlmIChleGlzdGluZy0+dHlwZSgpID09IENhY2hlZFJlc291cmNlOjpDU1NTdHls
ZVNoZWV0KQotICAgICAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PENhY2hlZENTU1N0eWxlU2hl
ZXQqPihleGlzdGluZyk7CisgICAgICAgICAgICByZXR1cm4gdG9DYWNoZWRDU1NTdHlsZVNoZWV0
KGV4aXN0aW5nKTsKICAgICAgICAgbWVtb3J5Q2FjaGUoKS0+cmVtb3ZlKGV4aXN0aW5nKTsKICAg
ICB9CiAgICAgaWYgKHVybC5zdHJpbmcoKSAhPSByZXF1ZXN0LnJlc291cmNlUmVxdWVzdCgpLnVy
bCgpKQpAQCAtMjA4LDIwICsyMDgsMjAgQEAgQ2FjaGVkUmVzb3VyY2VIYW5kbGU8Q2FjaGVkQ1NT
U3R5bGVTaGVldD4gQ2FjaGVkUmVzb3VyY2VMb2FkZXI6OnJlcXVlc3RVc2VyQ1NTU3QKIAogQ2Fj
aGVkUmVzb3VyY2VIYW5kbGU8Q2FjaGVkU2NyaXB0PiBDYWNoZWRSZXNvdXJjZUxvYWRlcjo6cmVx
dWVzdFNjcmlwdChDYWNoZWRSZXNvdXJjZVJlcXVlc3QmIHJlcXVlc3QpCiB7Ci0gICAgcmV0dXJu
IHN0YXRpY19jYXN0PENhY2hlZFNjcmlwdCo+KHJlcXVlc3RSZXNvdXJjZShDYWNoZWRSZXNvdXJj
ZTo6U2NyaXB0LCByZXF1ZXN0KS5nZXQoKSk7CisgICAgcmV0dXJuIHRvQ2FjaGVkU2NyaXB0KHJl
cXVlc3RSZXNvdXJjZShDYWNoZWRSZXNvdXJjZTo6U2NyaXB0LCByZXF1ZXN0KS5nZXQoKSk7CiB9
CiAKICNpZiBFTkFCTEUoWFNMVCkKIENhY2hlZFJlc291cmNlSGFuZGxlPENhY2hlZFhTTFN0eWxl
U2hlZXQ+IENhY2hlZFJlc291cmNlTG9hZGVyOjpyZXF1ZXN0WFNMU3R5bGVTaGVldChDYWNoZWRS
ZXNvdXJjZVJlcXVlc3QmIHJlcXVlc3QpCiB7Ci0gICAgcmV0dXJuIHN0YXRpY19jYXN0PENhY2hl
ZFhTTFN0eWxlU2hlZXQqPihyZXF1ZXN0UmVzb3VyY2UoQ2FjaGVkUmVzb3VyY2U6OlhTTFN0eWxl
U2hlZXQsIHJlcXVlc3QpLmdldCgpKTsKKyAgICByZXR1cm4gdG9DYWNoZWRYU0xTdHlsZVNoZWV0
KHJlcXVlc3RSZXNvdXJjZShDYWNoZWRSZXNvdXJjZTo6WFNMU3R5bGVTaGVldCwgcmVxdWVzdCku
Z2V0KCkpOwogfQogI2VuZGlmCiAKICNpZiBFTkFCTEUoU1ZHKQogQ2FjaGVkUmVzb3VyY2VIYW5k
bGU8Q2FjaGVkU1ZHRG9jdW1lbnQ+IENhY2hlZFJlc291cmNlTG9hZGVyOjpyZXF1ZXN0U1ZHRG9j
dW1lbnQoQ2FjaGVkUmVzb3VyY2VSZXF1ZXN0JiByZXF1ZXN0KQogewotICAgIHJldHVybiBzdGF0
aWNfY2FzdDxDYWNoZWRTVkdEb2N1bWVudCo+KHJlcXVlc3RSZXNvdXJjZShDYWNoZWRSZXNvdXJj
ZTo6U1ZHRG9jdW1lbnRSZXNvdXJjZSwgcmVxdWVzdCkuZ2V0KCkpOworICAgIHJldHVybiB0b0Nh
Y2hlZFNWR0RvY3VtZW50KHJlcXVlc3RSZXNvdXJjZShDYWNoZWRSZXNvdXJjZTo6U1ZHRG9jdW1l
bnRSZXNvdXJjZSwgcmVxdWVzdCkuZ2V0KCkpOwogfQogI2VuZGlmCiAKQEAgLTIzNiwxMiArMjM2
LDEyIEBAIENhY2hlZFJlc291cmNlSGFuZGxlPENhY2hlZFJlc291cmNlPiBDYWNoZWRSZXNvdXJj
ZUxvYWRlcjo6cmVxdWVzdExpbmtSZXNvdXJjZShDCiAKIENhY2hlZFJlc291cmNlSGFuZGxlPENh
Y2hlZFJhd1Jlc291cmNlPiBDYWNoZWRSZXNvdXJjZUxvYWRlcjo6cmVxdWVzdFJhd1Jlc291cmNl
KENhY2hlZFJlc291cmNlUmVxdWVzdCYgcmVxdWVzdCkKIHsKLSAgICByZXR1cm4gc3RhdGljX2Nh
c3Q8Q2FjaGVkUmF3UmVzb3VyY2UqPihyZXF1ZXN0UmVzb3VyY2UoQ2FjaGVkUmVzb3VyY2U6OlJh
d1Jlc291cmNlLCByZXF1ZXN0KS5nZXQoKSk7CisgICAgcmV0dXJuIHRvQ2FjaGVkUmF3UmVzb3Vy
Y2UocmVxdWVzdFJlc291cmNlKENhY2hlZFJlc291cmNlOjpSYXdSZXNvdXJjZSwgcmVxdWVzdCku
Z2V0KCkpOwogfQogCiBDYWNoZWRSZXNvdXJjZUhhbmRsZTxDYWNoZWRSYXdSZXNvdXJjZT4gQ2Fj
aGVkUmVzb3VyY2VMb2FkZXI6OnJlcXVlc3RNYWluUmVzb3VyY2UoQ2FjaGVkUmVzb3VyY2VSZXF1
ZXN0JiByZXF1ZXN0KQogewotICAgIHJldHVybiBzdGF0aWNfY2FzdDxDYWNoZWRSYXdSZXNvdXJj
ZSo+KHJlcXVlc3RSZXNvdXJjZShDYWNoZWRSZXNvdXJjZTo6TWFpblJlc291cmNlLCByZXF1ZXN0
KS5nZXQoKSk7CisgICAgcmV0dXJuIHRvQ2FjaGVkUmF3UmVzb3VyY2UocmVxdWVzdFJlc291cmNl
KENhY2hlZFJlc291cmNlOjpNYWluUmVzb3VyY2UsIHJlcXVlc3QpLmdldCgpKTsKIH0KIAogYm9v
bCBDYWNoZWRSZXNvdXJjZUxvYWRlcjo6Y2hlY2tJbnNlY3VyZUNvbnRlbnQoQ2FjaGVkUmVzb3Vy
Y2U6OlR5cGUgdHlwZSwgY29uc3QgVVJMJiB1cmwpIGNvbnN0CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9sb2FkZXIvY2FjaGUvQ2FjaGVkU1ZHRG9jdW1lbnQuaCBiL1NvdXJjZS9XZWJDb3Jl
L2xvYWRlci9jYWNoZS9DYWNoZWRTVkdEb2N1bWVudC5oCmluZGV4IGQ2YTZmNWQ0ZWRjMDliNTU4
ZDJkNTljMWY3YzQxNjUxZjg3ZmM1ZDIuLjlmNTlmZTZlODkxZDE4NWFiODgyNDBhZTVmMzMxYTc2
NGQ5NWIxMWUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9jYWNoZS9DYWNoZWRT
VkdEb2N1bWVudC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9jYWNoZS9DYWNoZWRTVkdE
b2N1bWVudC5oCkBAIC00OSw2ICs0OSw4IEBAIHByaXZhdGU6CiAgICAgdmlydHVhbCB2b2lkIGZp
bmlzaExvYWRpbmcoUmVzb3VyY2VCdWZmZXIqKSBvdmVycmlkZTsKIH07CiAKK0NBQ0hFRF9SRVNP
VVJDRV9UWVBFX0NBU1RTKENhY2hlZFNWR0RvY3VtZW50LCBDYWNoZWRSZXNvdXJjZSwgQ2FjaGVk
UmVzb3VyY2U6OlNWR0RvY3VtZW50UmVzb3VyY2UpCisKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUK
IAogI2VuZGlmIC8vIFVTRShTVkcpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIv
Y2FjaGUvQ2FjaGVkU2NyaXB0LmggYi9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvY2FjaGUvQ2FjaGVk
U2NyaXB0LmgKaW5kZXggODBiMDczYzJhMmU2MDVkOTc1ZDE2OWFmNjI1NWZiZWYyYmRlMGZjMi4u
ZDQzOGIyNzc0OGY4MWIzNjNiYzgxYjNlMzg0ZDAwYjdiOTQ2OTAyMyAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvbG9hZGVyL2NhY2hlL0NhY2hlZFNjcmlwdC5oCisrKyBiL1NvdXJjZS9XZWJD
b3JlL2xvYWRlci9jYWNoZS9DYWNoZWRTY3JpcHQuaApAQCAtNjEsNiArNjEsOSBAQCBuYW1lc3Bh
Y2UgV2ViQ29yZSB7CiAgICAgICAgIFN0cmluZyBtX3NjcmlwdDsKICAgICAgICAgUmVmUHRyPFRl
eHRSZXNvdXJjZURlY29kZXI+IG1fZGVjb2RlcjsKICAgICB9OworCitDQUNIRURfUkVTT1VSQ0Vf
VFlQRV9DQVNUUyhDYWNoZWRTY3JpcHQsIENhY2hlZFJlc291cmNlLCBDYWNoZWRSZXNvdXJjZTo6
U2NyaXB0KQorCiB9CiAKICNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvbG9hZGVy
L2NhY2hlL0NhY2hlZFRleHRUcmFjay5oIGIvU291cmNlL1dlYkNvcmUvbG9hZGVyL2NhY2hlL0Nh
Y2hlZFRleHRUcmFjay5oCmluZGV4IDBkZjU2ZTJkMzc2NjMwNzJlM2MwOTE0OGI0MGZhZGYxOTgy
NGQ1MzEuLmIzZWVhN2EyZDUzNDUzNDhmN2ZjNjQ2Y2JiNDkxMDU0NjdjNDEwMWIgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9jYWNoZS9DYWNoZWRUZXh0VHJhY2suaAorKysgYi9T
b3VyY2UvV2ViQ29yZS9sb2FkZXIvY2FjaGUvQ2FjaGVkVGV4dFRyYWNrLmgKQEAgLTQ0LDYgKzQ0
LDggQEAgcHJpdmF0ZToKICAgICB2aXJ0dWFsIHZvaWQgZmluaXNoTG9hZGluZyhSZXNvdXJjZUJ1
ZmZlciopIG92ZXJyaWRlOwogfTsKIAorQ0FDSEVEX1JFU09VUkNFX1RZUEVfQ0FTVFMoQ2FjaGVk
VGV4dFRyYWNrLCBDYWNoZWRSZXNvdXJjZSwgQ2FjaGVkUmVzb3VyY2U6OlRleHRUcmFja1Jlc291
cmNlKQorCiB9CiAKICNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvbG9hZGVyL2Nh
Y2hlL0NhY2hlZFhTTFN0eWxlU2hlZXQuaCBiL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9jYWNoZS9D
YWNoZWRYU0xTdHlsZVNoZWV0LmgKaW5kZXggMzA3YmRhNjkxZTVkMWIzZjMwN2UxMWMwOTRiYzZm
OTgzMjM0YWVjNS4uMGNiZmI2NThmMGJhNDQ2ZmY5YzBkMzJlYjRiNWU1YjllZTI0NmUyMSAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvbG9hZGVyL2NhY2hlL0NhY2hlZFhTTFN0eWxlU2hlZXQu
aAorKysgYi9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvY2FjaGUvQ2FjaGVkWFNMU3R5bGVTaGVldC5o
CkBAIC01Nyw2ICs1Nyw4IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgdmlydHVhbCB2
b2lkIGZpbmlzaExvYWRpbmcoUmVzb3VyY2VCdWZmZXIqKSBvdmVycmlkZTsKICAgICB9OwogCitD
QUNIRURfUkVTT1VSQ0VfVFlQRV9DQVNUUyhDYWNoZWRYU0xTdHlsZVNoZWV0LCBDYWNoZWRSZXNv
dXJjZSwgQ2FjaGVkUmVzb3VyY2U6OlhTTFN0eWxlU2hlZXQpCisKICNlbmRpZgogCiB9Cg==
</data>
<flag name="review"
          id="246824"
          type_id="1"
          status="+"
          setter="darin"
    />
          </attachment>
      

    </bug>

</bugzilla>