<?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>131597</bug_id>
          
          <creation_ts>2014-04-13 13:39:26 -0700</creation_ts>
          <short_desc>[QuickLook] Move file system-related code into WebKit</short_desc>
          <delta_ts>2014-04-13 19:58:02 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>New Bugs</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Andy Estes">aestes</reporter>
          <assigned_to name="Andy Estes">aestes</assigned_to>
          <cc>commit-queue</cc>
    
    <cc>japhet</cc>
    
    <cc>mitz</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1000328</commentid>
    <comment_count>0</comment_count>
    <who name="Andy Estes">aestes</who>
    <bug_when>2014-04-13 13:39:26 -0700</bug_when>
    <thetext>[QuickLook] Move file system-related code into WebKit</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1000330</commentid>
    <comment_count>1</comment_count>
      <attachid>229245</attachid>
    <who name="Andy Estes">aestes</who>
    <bug_when>2014-04-13 14:10:46 -0700</bug_when>
    <thetext>Created attachment 229245
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1000356</commentid>
    <comment_count>2</comment_count>
      <attachid>229245</attachid>
    <who name="">mitz</who>
    <bug_when>2014-04-13 18:06:25 -0700</bug_when>
    <thetext>Comment on attachment 229245
Patch

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

&gt; Source/WebCore/ChangeLog:40
&gt; +        (WebCore::createTemporaryFileForQuickLook): Made non-static.

Why does this function need to live in WebCore?

&gt; Source/WebCore/ChangeLog:45
&gt; +        (WebCore::QuickLookHandle::didReceiveDataArray): Removed file system and code and called QuickLookHandleClient::didReceiveDataArray() instead.

“file system and code”?

&gt; Source/WebCore/platform/network/ios/QuickLook.mm:365
&gt; +    std::unique_ptr&lt;QuickLookHandle&gt; quickLookHandle(new QuickLookHandle([handle-&gt;firstRequest().nsURLRequest(DoNotUpdateHTTPBody) URL], connection, nsResponse, delegate));

Strange that we go through an NSURLRequest only to get an NSURL out of a request. Strange, but not new to this patch.

&gt; Source/WebCore/platform/network/ios/QuickLook.mm:451
&gt; +    m_client = nullptr;

Why do we have to do this?

&gt; Source/WebCore/platform/network/ios/QuickLookHandleClient.h:40
&gt; +    virtual void didReceiveDataArray(CFArrayRef) { }
&gt; +    virtual void didReceiveData(CFDataRef) { }

It’s fine, but a little strange to expose the client to these two different ways the data may be coming in.

&gt; Source/WebKit/mac/WebCoreSupport/WebFrameLoaderClient.mm:2423
&gt; +                // We must use the generated URL from m_converter&apos;s NSURLRequest object

There’s no m_converter in the new context of this comment.

&gt; Source/WebKit/mac/WebCoreSupport/WebFrameLoaderClient.mm:2451
&gt; +        void didReceiveDataArray(CFArrayRef dataArray)
&gt; +        {
&gt; +            if (m_fileHandle) {
&gt; +                for (NSData *data in (NSArray *)dataArray)
&gt; +                    [m_fileHandle writeData:data];
&gt; +            }
&gt; +        }
&gt; +
&gt; +        void didReceiveData(CFDataRef data)
&gt; +        {
&gt; +            if (m_fileHandle)
&gt; +                [m_fileHandle writeData:(NSData *)data];
&gt; +        }

Seeing this I definitely think a single client function (didReceiveData) is enough. The QuickLookHandle can call it repeatedly in the data-array case.

&gt; Source/WebKit2/WebProcess/ios/WebResourceLoaderIOS.mm:105
&gt; -    RetainPtr&lt;WKWebResourceQuickLookDelegate&gt; delegate = adoptNS([[WKWebResourceQuickLookDelegate alloc] initWithWebResourceLoader:this]);
&gt; -    m_quickLookHandle = QuickLookHandle::create(resourceLoader(), response.nsURLResponse(), delegate.get());
&gt; +    m_quickLookHandle = QuickLookHandle::create(resourceLoader(), response.nsURLResponse(), [[[WKWebResourceQuickLookDelegate alloc] initWithWebResourceLoader:this] autorelease]);

Not sure why this change was needed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1000357</commentid>
    <comment_count>3</comment_count>
      <attachid>229245</attachid>
    <who name="">mitz</who>
    <bug_when>2014-04-13 18:08:40 -0700</bug_when>
    <thetext>Comment on attachment 229245
Patch

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

&gt;&gt; Source/WebKit/mac/WebCoreSupport/WebFrameLoaderClient.mm:2451
&gt;&gt; +        }
&gt; 
&gt; Seeing this I definitely think a single client function (didReceiveData) is enough. The QuickLookHandle can call it repeatedly in the data-array case.

Alternatively, if we think the array case is the common case, the client function can be the one that takes an array, and QuickLookHandle can make a single-object array in the plain data case.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1000358</commentid>
    <comment_count>4</comment_count>
    <who name="Andy Estes">aestes</who>
    <bug_when>2014-04-13 18:23:05 -0700</bug_when>
    <thetext>Thank you for the review!

(In reply to comment #2)
&gt; (From update of attachment 229245 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=229245&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/ChangeLog:40
&gt; &gt; +        (WebCore::createTemporaryFileForQuickLook): Made non-static.
&gt; 
&gt; Why does this function need to live in WebCore?

In a future patch I&apos;ll need to call it from WebKit2.

&gt; 
&gt; &gt; Source/WebCore/ChangeLog:45
&gt; &gt; +        (WebCore::QuickLookHandle::didReceiveDataArray): Removed file system and code and called QuickLookHandleClient::didReceiveDataArray() instead.
&gt; 
&gt; “file system and code”?

Whoops, copy/paste fail. Each should read &quot;Removed file system code and called ...&quot;.

&gt; 
&gt; &gt; Source/WebCore/platform/network/ios/QuickLook.mm:451
&gt; &gt; +    m_client = nullptr;
&gt; 
&gt; Why do we have to do this?

Totally unnecessary in the destructor. Not sure why I typed that.

&gt; 
&gt; &gt; Source/WebKit2/WebProcess/ios/WebResourceLoaderIOS.mm:105
&gt; &gt; -    RetainPtr&lt;WKWebResourceQuickLookDelegate&gt; delegate = adoptNS([[WKWebResourceQuickLookDelegate alloc] initWithWebResourceLoader:this]);
&gt; &gt; -    m_quickLookHandle = QuickLookHandle::create(resourceLoader(), response.nsURLResponse(), delegate.get());
&gt; &gt; +    m_quickLookHandle = QuickLookHandle::create(resourceLoader(), response.nsURLResponse(), [[[WKWebResourceQuickLookDelegate alloc] initWithWebResourceLoader:this] autorelease]);
&gt; 
&gt; Not sure why this change was needed.

It wasn&apos;t. I just prefer removing the local variable in this case. I don&apos;t feel strongly about it.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1000359</commentid>
    <comment_count>5</comment_count>
    <who name="Andy Estes">aestes</who>
    <bug_when>2014-04-13 18:23:46 -0700</bug_when>
    <thetext>(In reply to comment #3)
&gt; (From update of attachment 229245 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=229245&amp;action=review
&gt; 
&gt; &gt;&gt; Source/WebKit/mac/WebCoreSupport/WebFrameLoaderClient.mm:2451
&gt; &gt;&gt; +        }
&gt; &gt; 
&gt; &gt; Seeing this I definitely think a single client function (didReceiveData) is enough. The QuickLookHandle can call it repeatedly in the data-array case.
&gt; 
&gt; Alternatively, if we think the array case is the common case, the client function can be the one that takes an array, and QuickLookHandle can make a single-object array in the plain data case.

I believe it is the common case. I&apos;ll make the change you suggest before landing. Thanks!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1000367</commentid>
    <comment_count>6</comment_count>
    <who name="Andy Estes">aestes</who>
    <bug_when>2014-04-13 19:50:30 -0700</bug_when>
    <thetext>(In reply to comment #2)
&gt; (From update of attachment 229245 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=229245&amp;action=review
&gt; 
&gt; &gt; Source/WebKit/mac/WebCoreSupport/WebFrameLoaderClient.mm:2423
&gt; &gt; +                // We must use the generated URL from m_converter&apos;s NSURLRequest object
&gt; 
&gt; There’s no m_converter in the new context of this comment.

I changed the comment to read:

// previewRequestURL should match the URL removed from -[WebDataSource dealloc].</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1000368</commentid>
    <comment_count>7</comment_count>
    <who name="Andy Estes">aestes</who>
    <bug_when>2014-04-13 19:58:02 -0700</bug_when>
    <thetext>Committed r167207: &lt;http://trac.webkit.org/changeset/167207&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>229245</attachid>
            <date>2014-04-13 14:10:46 -0700</date>
            <delta_ts>2014-04-13 18:08:39 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-131597-20140413141025.patch</filename>
            <type>text/plain</type>
            <size>36123</size>
            <attacher name="Andy Estes">aestes</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTY3MjAyCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMjc4MjY3Nzc1NDBjZDk4
MGY3NTNlYzE2NjNlNGI0ZjBkYWNiNjU2Yi4uYTVjNzk4YWQ0MzRmNzdmMDVlNjEzMTdlOGE0NmNk
M2Q3ODMwYTU0MyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDYxIEBACisyMDE0LTA0LTEzICBBbmR5
IEVzdGVzICA8YWVzdGVzQGFwcGxlLmNvbT4KKworICAgICAgICBbUXVpY2tMb29rXSBNb3ZlIGZp
bGUgc3lzdGVtLXJlbGF0ZWQgY29kZSBpbnRvIFdlYktpdAorICAgICAgICBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTMxNTk3CisKKyAgICAgICAgUmV2aWV3ZWQgYnkg
Tk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgUXVpY2tMb29rSGFuZGxlIHNob3VsZCBub3QgYmUg
cmVzcG9uc2libGUgZm9yIHNhdmluZyBhIGNvcHkgb2YgdGhlCisgICAgICAgIG9yaWdpbmFsIGRv
Y3VtZW50IHRvIGRpc2sgYXMgaXQgbWlnaHQgYmUgcnVubmluZyBpbiBhIHByb2Nlc3MgdGhhdAor
ICAgICAgICBlaXRoZXIgY2FuJ3Qgd3JpdGUgdG8gZGlzayBvciBjYW4gb25seSB3cml0ZSBpbnRv
IGEgc2FuZGJveGVkCisgICAgICAgIGNvbnRhaW5lci4gVG8gYWNjb3VudCBmb3IgdGhpcywgd2Ug
bmVlZCB0byBzZXBhcmF0ZSB0aGUgY29uY2VybiBvZgorICAgICAgICBxdWljayBsb29rIGNvbnZl
cnNpb24gZnJvbSB0aGF0IG9mIG9yaWdpbmFsIGRvY3VtZW50IHNhdmluZyBzbyB0aGF0CisgICAg
ICAgIGVhY2ggYWN0aXZpdHkgY2FuIHJ1biBpbiB0aGUgYXBwcm9wcmlhdGUgcHJvY2Vzcy4KKwor
ICAgICAgICBDcmVhdGVkIGEgbmV3IGludGVyZmFjZSBiZXR3ZWVuIFdlYkNvcmUgYW5kIFdlYktp
dCBieSBhZGRpbmcgYSBjbGllbnQKKyAgICAgICAgKFF1aWNrTG9va0hhbmRsZUNsaWVudCkgdG8g
UXVpY2tMb29rSGFuZGxlIHdoaWNoIGlzIG5vdGlmaWVkIG9mIGluY29taW5nCisgICAgICAgIGJ5
dGVzLiBBIG5ldyBmdW5jdGlvbiBvbiBGcmFtZUxvYWRlckNsaWVudCB0ZWxscyBXZWJLaXQgd2hl
biBhIG5ldworICAgICAgICBRdWlja0xvb2tIYW5kbGUgaXMgY3JlYXRlZCwgZ2l2aW5nIFdlYktp
dCB0aGUgb3Bwb3J0dW5pdHkgdG8gcmVnaXN0ZXIgYQorICAgICAgICBoYW5kbGUgY2xpZW50LiBN
b3ZlZCB0aGUgZXhpc3RpbmcgZmlsZSBzeXN0ZW0tcmVsYXRlZCBjb2RlIGFzIHdlbGwgYXMKKyAg
ICAgICAgY29kZSBvbmx5IG5lZWRlZCBieSBXZWJLaXQxIGluIFF1aWNrTG9va0hhbmRsZSBpbnRv
IGEgbmV3IFdlYktpdDEKKyAgICAgICAgUXVpY2tMb29rSGFuZGxlQ2xpZW50IHN1YmNsYXNzLgor
CisgICAgICAgICogV2ViQ29yZS5leHAuaW46CisgICAgICAgICogV2ViQ29yZS54Y29kZXByb2ov
cHJvamVjdC5wYnhwcm9qOiBNYWRlIFF1aWNrTG9va0hhbmRsZUNsaWVudC5oIFByaXZhdGUuCisg
ICAgICAgICogbG9hZGVyL0ZyYW1lTG9hZGVyQ2xpZW50Lmg6CisgICAgICAgIChXZWJDb3JlOjpG
cmFtZUxvYWRlckNsaWVudDo6ZGlkQ3JlYXRlUXVpY2tMb29rSGFuZGxlKTogQWRkZWQuCisgICAg
ICAgICogbG9hZGVyL1Jlc291cmNlTG9hZGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlc291
cmNlTG9hZGVyOjpkaWRDcmVhdGVRdWlja0xvb2tIYW5kbGUpOiBDYWxsZWQgRnJhbWVMb2FkZXJD
bGllbnQ6OmRpZENyZWF0ZVF1aWNrTG9va0hhbmRsZSgpLgorICAgICAgICAqIGxvYWRlci9SZXNv
dXJjZUxvYWRlci5oOgorICAgICAgICAqIHBsYXRmb3JtL25ldHdvcmsvUmVzb3VyY2VIYW5kbGUu
aDogTWFkZSBtX3F1aWNrTG9vayBhIHVuaXF1ZV9wdHIuCisgICAgICAgIChXZWJDb3JlOjpSZXNv
dXJjZUhhbmRsZTo6c2V0UXVpY2tMb29rSGFuZGxlKTogQ2hhbmdlZCB0byB0YWtlIGEgdW5pcXVl
X3B0ci4KKyAgICAgICAgKiBwbGF0Zm9ybS9uZXR3b3JrL1Jlc291cmNlSGFuZGxlQ2xpZW50Lmg6
CisgICAgICAgIChXZWJDb3JlOjpSZXNvdXJjZUhhbmRsZUNsaWVudDo6ZGlkQ3JlYXRlUXVpY2tM
b29rSGFuZGxlKTogQWRkZWQuCisgICAgICAgICogcGxhdGZvcm0vbmV0d29yay9pb3MvUXVpY2tM
b29rLmg6IEFkZGVkIG1fY2xpZW50LCBnYXZlIG1fY29udmVydGVyIGEgc3Ryb25nZXIgdHlwZSwg
YW5kIG1hZGUgbV9uc1Jlc3BvbnNlIGEgUmV0YWluUHRyLgorICAgICAgICAoV2ViQ29yZTo6UXVp
Y2tMb29rSGFuZGxlOjpzZXRDbGllbnQpOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlF1aWNr
TG9va0hhbmRsZTo6Zmlyc3RSZXF1ZXN0VVJMKTogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpR
dWlja0xvb2tIYW5kbGU6OmNvbnZlcnRlcik6IEFkZGVkLgorICAgICAgICAqIHBsYXRmb3JtL25l
dHdvcmsvaW9zL1F1aWNrTG9vay5tbToKKyAgICAgICAgKFdlYkNvcmU6OnJlZ2lzdGVyUUxQcmV2
aWV3Q29udmVydGVySWZOZWVkZWQpOgorICAgICAgICAoV2ViQ29yZTo6Y3JlYXRlVGVtcG9yYXJ5
RmlsZUZvclF1aWNrTG9vayk6IE1hZGUgbm9uLXN0YXRpYy4KKyAgICAgICAgKFdlYkNvcmU6OmVt
cHR5Q2xpZW50KTogUmV0dXJuZWQgYSBzaGFyZWQgZW1wdHkgUXVpY2tMb29rSGFuZGxlQ2xpZW50
LgorICAgICAgICAoV2ViQ29yZTo6UXVpY2tMb29rSGFuZGxlOjpRdWlja0xvb2tIYW5kbGUpOiBS
ZW1vdmVkIGZpbGUgc3lzdGVtIGFuZCBXZWJLaXQxLW9ubHkgY29kZS4KKyAgICAgICAgKFdlYkNv
cmU6OlF1aWNrTG9va0hhbmRsZTo6Y3JlYXRlKTogQ2hhbmdlZCB0byByZXR1cm4gYSB1bmlxdWVf
cHRyLgorICAgICAgICAoV2ViQ29yZTo6UXVpY2tMb29rSGFuZGxlOjpuc1Jlc3BvbnNlKToKKyAg
ICAgICAgKFdlYkNvcmU6OlF1aWNrTG9va0hhbmRsZTo6ZGlkUmVjZWl2ZURhdGFBcnJheSk6IFJl
bW92ZWQgZmlsZSBzeXN0ZW0gYW5kIGNvZGUgYW5kIGNhbGxlZCBRdWlja0xvb2tIYW5kbGVDbGll
bnQ6OmRpZFJlY2VpdmVEYXRhQXJyYXkoKSBpbnN0ZWFkLgorICAgICAgICAoV2ViQ29yZTo6UXVp
Y2tMb29rSGFuZGxlOjpkaWRSZWNlaXZlRGF0YSk6IFJlbW92ZWQgZmlsZSBzeXN0ZW0gYW5kIGNv
ZGUgYW5kIGNhbGxlZCBRdWlja0xvb2tIYW5kbGVDbGllbnQ6OmRpZFJlY2VpdmVEYXRhKCkgaW5z
dGVhZC4KKyAgICAgICAgKFdlYkNvcmU6OlF1aWNrTG9va0hhbmRsZTo6ZGlkRmluaXNoTG9hZGlu
Zyk6IFJlbW92ZWQgZmlsZSBzeXN0ZW0gYW5kIGNvZGUgYW5kIGNhbGxlZCBRdWlja0xvb2tIYW5k
bGVDbGllbnQ6OmRpZEZpbmlzaExvYWRpbmcoKSBpbnN0ZWFkLgorICAgICAgICAoV2ViQ29yZTo6
UXVpY2tMb29rSGFuZGxlOjpkaWRGYWlsKTogUmVtb3ZlZCBmaWxlIHN5c3RlbSBhbmQgV2ViS2l0
MS1vbmx5IGNvZGUgYW5kIGNhbGxlZCBRdWlja0xvb2tIYW5kbGVDbGllbnQ6OmRpZEZhaWwoKSBp
bnN0ZWFkLgorICAgICAgICAoV2ViQ29yZTo6UXVpY2tMb29rSGFuZGxlOjp+UXVpY2tMb29rSGFu
ZGxlKTogUmVtb3ZlZCBmaWxlIHN5c3RlbSBhbmQgV2ViS2l0MS1vbmx5IGNvZGUuIENsZWFyZWQg
b3VyIHJlZmVyZW5jZSB0byBtX2NsaWVudC4KKyAgICAgICAgKFdlYkNvcmU6OlF1aWNrTG9va0hh
bmRsZTo6cHJldmlld0ZpbGVOYW1lKTogUmV0cmlldmVkIGZyb20gbV9jb252ZXJ0ZXIuCisgICAg
ICAgIChXZWJDb3JlOjpRdWlja0xvb2tIYW5kbGU6OnByZXZpZXdSZXF1ZXN0VVJMKTogRGl0dG8u
CisgICAgICAgICogcGxhdGZvcm0vbmV0d29yay9pb3MvUXVpY2tMb29rSGFuZGxlQ2xpZW50Lmg6
IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6UXVpY2tMb29rSGFuZGxlQ2xpZW50Ojp+UXVpY2tM
b29rSGFuZGxlQ2xpZW50KToKKyAgICAgICAgKFdlYkNvcmU6OlF1aWNrTG9va0hhbmRsZUNsaWVu
dDo6ZGlkUmVjZWl2ZURhdGFBcnJheSk6CisgICAgICAgIChXZWJDb3JlOjpRdWlja0xvb2tIYW5k
bGVDbGllbnQ6OmRpZFJlY2VpdmVEYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OlF1aWNrTG9va0hh
bmRsZUNsaWVudDo6ZGlkRmluaXNoTG9hZGluZyk6CisgICAgICAgIChXZWJDb3JlOjpRdWlja0xv
b2tIYW5kbGVDbGllbnQ6OmRpZEZhaWwpOgorCiAyMDE0LTA0LTEwICBQcmF0aWsgU29sYW5raSAg
PHBzb2xhbmtpQGFwcGxlLmNvbT4KIAogICAgICAgICBNb3ZlIGVhcmx5IHJldHVybiBvdXQgb2Yg
ZGlzcGF0Y2hfYXN5bmMoKSBibG9jayBzbyB3ZSBjYW4gcmV0dXJuIGZyb20gd2lsbFNlbmRSZXF1
ZXN0IHF1aWNrbHkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvbWFjL0NoYW5nZUxvZyBiL1Nv
dXJjZS9XZWJLaXQvbWFjL0NoYW5nZUxvZwppbmRleCA4NTI5ZWQ1ODEwY2RhYjhhNDhmNzdjYzRk
NDMzNzdiOTljNWI2YTk3Li5kNjliNDgxMDM0ZjY0NjU1NmM4Yzc0NjAxNzVlYjM0ZDlmYzk5OTg0
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L21hYy9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dl
YktpdC9tYWMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTYgQEAKKzIwMTQtMDQtMTMgIEFuZHkgRXN0
ZXMgIDxhZXN0ZXNAYXBwbGUuY29tPgorCisgICAgICAgIFtRdWlja0xvb2tdIE1vdmUgZmlsZSBz
eXN0ZW0tcmVsYXRlZCBjb2RlIGludG8gV2ViS2l0CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMzE1OTcKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JP
RFkgKE9PUFMhKS4KKworICAgICAgICBNb3ZlZCBmaWxlIHN5c3RlbSBhbmQgV2ViS2l0MS1vbmx5
IGNvZGUgZnJvbSBRdWlja0xvb2tIYW5kbGUgaW50byBhIG5ldworICAgICAgICBRdWlja0xvb2tI
YW5kbGVDbGllbnQgc3ViY2xhc3MuCisKKyAgICAgICAgKiBXZWJDb3JlU3VwcG9ydC9XZWJGcmFt
ZUxvYWRlckNsaWVudC5oOgorICAgICAgICAqIFdlYkNvcmVTdXBwb3J0L1dlYkZyYW1lTG9hZGVy
Q2xpZW50Lm1tOgorCiAyMDE0LTA0LTA5ICBBbGV4ZXkgUHJvc2t1cnlha292ICA8YXBAYXBwbGUu
Y29tPgogCiAgICAgICAgIEVsaW1pbmF0ZSBEcmFnU2Vzc2lvbiBzdHJ1Y3R1cmUKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZwpp
bmRleCBlYmM1YzdkZmYxNzBhMWY5NjBiOTViNjg1OTA1NTVkYmJmN2M5MTQ4Li42YjRiZWFmOWFl
M2M4NGVmYWUzZmNhNTFhOTI1M2Y5Y2E4MjlmNWVjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
Mi9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCkBAIC0xLDUgKzEsMTYg
QEAKIDIwMTQtMDQtMTMgIEFuZHkgRXN0ZXMgIDxhZXN0ZXNAYXBwbGUuY29tPgogCisgICAgICAg
IFtRdWlja0xvb2tdIE1vdmUgZmlsZSBzeXN0ZW0tcmVsYXRlZCBjb2RlIGludG8gV2ViS2l0Cisg
ICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMzE1OTcKKwor
ICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIFdlYlByb2Nl
c3MvTmV0d29yay9XZWJSZXNvdXJjZUxvYWRlci5oOiBNYWRlIG1fcXVpY2tMb29rSGFuZGxlIGEg
dW5pcXVlX3B0ci4KKyAgICAgICAgKiBXZWJQcm9jZXNzL2lvcy9XZWJSZXNvdXJjZUxvYWRlcklP
Uy5tbToKKyAgICAgICAgKFdlYktpdDo6V2ViUmVzb3VyY2VMb2FkZXI6OnNldFVwUXVpY2tMb29r
SGFuZGxlSWZOZWVkZWQpOgorCisyMDE0LTA0LTEzICBBbmR5IEVzdGVzICA8YWVzdGVzQGFwcGxl
LmNvbT4KKwogICAgICAgICBSRUdSRVNTSU9OIChyMTY3MTY0KTogLVtXS05TVVJMU2Vzc2lvbkxv
Y2FsIF9nZXRDb29raWVIZWFkZXJzRm9yVGFzazpjb21wbGV0aW9uSGFuZGxlcjpdIF9ibG9ja19p
bnZva2UgY2FuIGFjY2VzcyBhIGRlYWxsb2NhdGVkIGNvbXBsZXRpb25IYW5kbGVyCiAgICAgICAg
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMzE1OTUKIApkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5leHAuaW4gYi9Tb3VyY2UvV2ViQ29yZS9XZWJD
b3JlLmV4cC5pbgppbmRleCBmMzg5NGNlOTI5NTQ2NTljYjVmMDkxNjhiMTRjOTVkMzhlYzQ0ZjAx
Li5kZmMxZjAwODE1NGQ1ODQ5NTgzODk5OTJkNGI5MTMyMjJkMTY3NTcwIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9XZWJDb3JlLmV4cC5pbgorKysgYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3Jl
LmV4cC5pbgpAQCAtMzIxOCw5ICszMjE4LDEzIEBAIF93a0lzUHVibGljU3VmZml4CiAjaWYgVVNF
KFFVSUNLX0xPT0spCiBfX1pON1dlYkNvcmUyN3FsUHJldmlld0NvbnZlcnRlclVUSUZvclVSTEVQ
NU5TVVJMCiBfX1pON1dlYkNvcmUzMHJlbW92ZVFMUHJldmlld0NvbnZlcnRlckZvclVSTEVQNU5T
VVJMCitfX1pON1dlYkNvcmUzMWNyZWF0ZVRlbXBvcmFyeUZpbGVGb3JRdWlja0xvb2tFUDhOU1N0
cmluZwogX19aTjdXZWJDb3JlMzJxbFByZXZpZXdDb252ZXJ0ZXJGaWxlTmFtZUZvclVSTEVQNU5T
VVJMCiBfX1pON1dlYkNvcmUzM1FMUHJldmlld0dldFN1cHBvcnRlZE1JTUVUeXBlc1NldEV2CiBf
X1pON1dlYkNvcmUzNHJlZ2lzdGVyUUxQcmV2aWV3Q29udmVydGVySWZOZWVkZWRFUDVOU1VSTFA4
TlNTdHJpbmdQNk5TRGF0YQorX19aTjdXZWJDb3JlMzVhZGRRTFByZXZpZXdDb252ZXJ0ZXJXaXRo
RmlsZUZvclVSTEVQNU5TVVJMUDExb2JqY19vYmplY3RQOE5TU3RyaW5nCitfX1pOSzdXZWJDb3Jl
MTVRdWlja0xvb2tIYW5kbGUxNXByZXZpZXdGaWxlTmFtZUV2CitfX1pOSzdXZWJDb3JlMTVRdWlj
a0xvb2tIYW5kbGUxN3ByZXZpZXdSZXF1ZXN0VVJMRXYKICNlbmRpZgogCiAjaWYgRU5BQkxFKFJF
TU9URV9JTlNQRUNUT1IpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2Rl
cHJvai9wcm9qZWN0LnBieHByb2ogYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9w
cm9qZWN0LnBieHByb2oKaW5kZXggNWViMDEyNmE2MTE1Y2NhYzY2MDdhNjhhYmVkNDQ3ZWM0YTI5
OTI0NS4uYTNmY2RjYWRiYzEwYjViN2JlYTkxMGVhMWYwYjMwMjY1MzYzMTQ1OCAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCisrKyBi
L1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagpAQCAtMzYw
Nyw2ICszNjA3LDcgQEAKIAkJQTEwNEYyNDQxNEM3MUY3QTAwOUUyQzIzIC8qIENhY2hlZFNWR0Rv
Y3VtZW50LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBB
MTA0RjI0MjE0QzcxRjdBMDA5RTJDMjMgLyogQ2FjaGVkU1ZHRG9jdW1lbnQuaCAqLzsgc2V0dGlu
Z3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQlBMTBCQjU4NTE0ODRFM0E3
MDBCMkU4N0EgLyogUmVuZGVyU1ZHUmVjdC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gQTEwQkI1ODMxNDg0RTNBNzAwQjJFODdBIC8qIFJlbmRlclNWR1Jl
Y3QuaCAqLzsgfTsKIAkJQTEwQkI1OEIxNDg0RTNCMzAwQjJFODdBIC8qIFJlbmRlclNWR1NoYXBl
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBMTBCQjU4
OTE0ODRFM0IzMDBCMkU4N0EgLyogUmVuZGVyU1ZHU2hhcGUuaCAqLzsgfTsKKwkJQTEwREJGNDcx
OEY5MjMxNzAwMEQ3MEM2IC8qIFF1aWNrTG9va0hhbmRsZUNsaWVudC5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTEwREJGNDYxOEY5MjMxNzAwMEQ3MEM2
IC8qIFF1aWNrTG9va0hhbmRsZUNsaWVudC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0g
KFByaXZhdGUsICk7IH07IH07CiAJCUExMERDNzZBMTQ3NDdCQUIwMDVFMjQ3MSAvKiBTdHlsZUdy
aWREYXRhLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IEExMERDNzY4MTQ3NDdCQUIwMDVFMjQ3MSAvKiBTdHlsZUdyaWREYXRhLmNwcCAqLzsgfTsKIAkJ
QTEwREM3NkIxNDc0N0JBQjAwNUUyNDcxIC8qIFN0eWxlR3JpZERhdGEuaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEExMERDNzY5MTQ3NDdCQUIwMDVFMjQ3
MSAvKiBTdHlsZUdyaWREYXRhLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0
ZSwgKTsgfTsgfTsKIAkJQTExMERCOUIxNEY1REY3NzAwQTAzQjkzIC8qIFN0eWxlR3JpZEl0ZW1E
YXRhLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBMTEw
REI5QTE0RjVERjc3MDBBMDNCOTMgLyogU3R5bGVHcmlkSXRlbURhdGEuaCAqLzsgc2V0dGluZ3Mg
PSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwpAQCAtMTA2NjcsNiArMTA2NjgsNyBA
QAogCQlBMTBCQjU4MzE0ODRFM0E3MDBCMkU4N0EgLyogUmVuZGVyU1ZHUmVjdC5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBSZW5kZXJTVkdSZWN0Lmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCUExMEJCNTg4MTQ4NEUzQjMwMEIyRTg3QSAvKiBSZW5kZXJTVkdTaGFw
ZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBSZW5kZXJTVkdTaGFw
ZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUExMEJCNTg5MTQ4NEUzQjMwMEIy
RTg3QSAvKiBSZW5kZXJTVkdTaGFwZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBSZW5kZXJTVkdTaGFwZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlBMTBEQkY0
NjE4RjkyMzE3MDAwRDcwQzYgLyogUXVpY2tMb29rSGFuZGxlQ2xpZW50LmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFF1aWNrTG9va0hhbmRsZUNsaWVudC5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQlBMTBEQzc2ODE0NzQ3QkFCMDA1RTI0NzEgLyogU3R5bGVHcmlk
RGF0YS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBTdHlsZUdyaWRE
YXRhLmNwcDsgcGF0aCA9IHN0eWxlL1N0eWxlR3JpZERhdGEuY3BwOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQlBMTBEQzc2OTE0NzQ3QkFCMDA1RTI0NzEgLyogU3R5bGVHcmlkRGF0YS5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBTdHlsZUdyaWREYXRhLmg7IHBhdGgg
PSBzdHlsZS9TdHlsZUdyaWREYXRhLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUEx
MTBEQjlBMTRGNURGNzcwMEEwM0I5MyAvKiBTdHlsZUdyaWRJdGVtRGF0YS5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IG5hbWUgPSBTdHlsZUdyaWRJdGVtRGF0YS5oOyBwYXRoID0gc3R5bGUv
U3R5bGVHcmlkSXRlbURhdGEuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTE1NDgy
LDYgKzE1NDg0LDcgQEAKIAkJCQk0NDNGMDQyNjBFNzVDOEZCMDA3RTU0MDcgLyogTmV0d29ya1N0
YXRlTm90aWZpZXJJT1MubW0gKi8sCiAJCQkJNDQyQUY3QTcxMDJDRERFQTAwOEZENEQzIC8qIFF1
aWNrTG9vay5oICovLAogCQkJCTQ0MkFGN0E4MTAyQ0RERUEwMDhGRDREMyAvKiBRdWlja0xvb2su
bW0gKi8sCisJCQkJQTEwREJGNDYxOEY5MjMxNzAwMEQ3MEM2IC8qIFF1aWNrTG9va0hhbmRsZUNs
aWVudC5oICovLAogCQkJCTdFNDI4Q0U0MTNFMzQwN0YwMDNCNjYxQyAvKiBSZXNvdXJjZUhhbmRs
ZUlPUy5tbSAqLywKIAkJCQk0NEEyMERCODBGODQxNjZDMDBCM0UxRkUgLyogV2ViQ29yZVVSTFJl
c3BvbnNlSU9TLmggKi8sCiAJCQkJNDQ0RDRFMjEwRjcwOEIyRTAwMzE1OEUwIC8qIFdlYkNvcmVV
UkxSZXNwb25zZUlPUy5tbSAqLywKQEAgLTI1ODA3LDYgKzI1ODEwLDcgQEAKIAkJCQlCMjIyN0E1
NDBEMDBCRjIyMDA3MUI3ODIgLyogU1ZHUGFpbnQuaCBpbiBIZWFkZXJzICovLAogCQkJCUIyMjI3
QTU3MEQwMEJGMjIwMDcxQjc4MiAvKiBTVkdQYXJzZXJVdGlsaXRpZXMuaCBpbiBIZWFkZXJzICov
LAogCQkJCTJEM0EwRTM2MTNBN0Q3NjEwMEU4NUFGMCAvKiBTVkdQYXJzaW5nRXJyb3IuaCBpbiBI
ZWFkZXJzICovLAorCQkJCUExMERCRjQ3MThGOTIzMTcwMDBENzBDNiAvKiBRdWlja0xvb2tIYW5k
bGVDbGllbnQuaCBpbiBIZWFkZXJzICovLAogCQkJCTg0QzY3ODREMTIxNDgxNDcwMEE5MjkwMiAv
KiBTVkdQYXRoQmxlbmRlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJODQ3NkM5RUIxMURGNkEyOTAw
NTU1QjAyIC8qIFNWR1BhdGhCdWlsZGVyLmggaW4gSGVhZGVycyAqLywKIAkJCQk4NDE5RDJBNzEy
MEQ5MkQwMDAxNDFGOEYgLyogU1ZHUGF0aEJ5dGVTdHJlYW0uaCBpbiBIZWFkZXJzICovLApkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvbG9hZGVyL0ZyYW1lTG9hZGVyQ2xpZW50LmggYi9Tb3Vy
Y2UvV2ViQ29yZS9sb2FkZXIvRnJhbWVMb2FkZXJDbGllbnQuaAppbmRleCBjZTJiMWM3MTlkNDhi
YzNiMDU5NjEwM2E5ODZiNzNmZDI5ZTczYWJlLi44MmVjY2U5YTMxY2I0ZTY0NmI3NmY5ZDI3YTll
Mzk3MzNjMjY1ZjFiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvRnJhbWVMb2Fk
ZXJDbGllbnQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvRnJhbWVMb2FkZXJDbGllbnQu
aApAQCAtOTcsNiArOTcsMTAgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgIGNsYXNzIFN1YnN0
aXR1dGVEYXRhOwogICAgIGNsYXNzIFdpZGdldDsKIAorI2lmIFVTRShRVUlDS19MT09LKQorICAg
IGNsYXNzIFF1aWNrTG9va0hhbmRsZTsKKyNlbmRpZgorCiAgICAgdHlwZWRlZiBzdGQ6OmZ1bmN0
aW9uPHZvaWQgKFBvbGljeUFjdGlvbik+IEZyYW1lUG9saWN5RnVuY3Rpb247CiAKICAgICBjbGFz
cyBGcmFtZUxvYWRlckNsaWVudCB7CkBAIC0zMzQsNiArMzM4LDEwIEBAIG5hbWVzcGFjZSBXZWJD
b3JlIHsKIAogICAgICAgICAvLyBGSVhNRSAoYnVnIDExNjIzMyk6IFdlIG5lZWQgdG8gZ2V0IHJp
ZCBvZiBFbXB0eUZyYW1lTG9hZGVyQ2xpZW50IGNvbXBsZXRlbHksIHRoZW4gdGhpcyB3aWxsIG5v
IGxvbmdlciBiZSBuZWVkZWQuCiAgICAgICAgIHZpcnR1YWwgYm9vbCBpc0VtcHR5RnJhbWVMb2Fk
ZXJDbGllbnQoKSB7IHJldHVybiBmYWxzZTsgfQorCisjaWYgVVNFKFFVSUNLX0xPT0spCisgICAg
ICAgIHZpcnR1YWwgdm9pZCBkaWRDcmVhdGVRdWlja0xvb2tIYW5kbGUoUXVpY2tMb29rSGFuZGxl
JikgeyB9CisjZW5kaWYKICAgICB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvUmVzb3VyY2VMb2FkZXIuY3BwIGIvU291cmNlL1dl
YkNvcmUvbG9hZGVyL1Jlc291cmNlTG9hZGVyLmNwcAppbmRleCA3ZmMyOWEzY2M2ZGY2M2I1ODc4
MzJjNzYzMDAxZmUxMGUwMDZmMzNjLi4yYTgzM2NlNTcxMmU4Y2JmMzU1NTFiNmE0NmYwNWQ4Yzc5
MTg4ZDdlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvUmVzb3VyY2VMb2FkZXIu
Y3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9SZXNvdXJjZUxvYWRlci5jcHAKQEAgLTYw
Niw0ICs2MDYsMTEgQEAgdm9pZCBSZXNvdXJjZUxvYWRlcjo6dW5zY2hlZHVsZShTY2hlZHVsZVBh
aXImIHBhaXIpCiAKICNlbmRpZgogCisjaWYgVVNFKFFVSUNLX0xPT0spCit2b2lkIFJlc291cmNl
TG9hZGVyOjpkaWRDcmVhdGVRdWlja0xvb2tIYW5kbGUoUXVpY2tMb29rSGFuZGxlJiBoYW5kbGUp
Cit7CisgICAgZnJhbWVMb2FkZXIoKS0+Y2xpZW50KCkuZGlkQ3JlYXRlUXVpY2tMb29rSGFuZGxl
KGhhbmRsZSk7Cit9CisjZW5kaWYKKwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvbG9h
ZGVyL1Jlc291cmNlTG9hZGVyLmggYi9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvUmVzb3VyY2VMb2Fk
ZXIuaAppbmRleCA4ZmI4ZGE5ZjcxMjNmNDg3ZWY5NzhiYjYzOWFkN2EwMWI4NzljNGFiLi4yZDQx
ZmE1OGMyMTIzNjVmZGVjM2UzYTYzZTNiYTc1NGQwYWU4NDAxIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9sb2FkZXIvUmVzb3VyY2VMb2FkZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9sb2Fk
ZXIvUmVzb3VyY2VMb2FkZXIuaApAQCAtNDksNiArNDksMTAgQEAgY2xhc3MgRnJhbWVMb2FkZXI7
CiBjbGFzcyBVUkw7CiBjbGFzcyBSZXNvdXJjZUJ1ZmZlcjsKIAorI2lmIFVTRShRVUlDS19MT09L
KQorY2xhc3MgUXVpY2tMb29rSGFuZGxlOworI2VuZGlmCisKIGNsYXNzIFJlc291cmNlTG9hZGVy
IDogcHVibGljIFJlZkNvdW50ZWQ8UmVzb3VyY2VMb2FkZXI+LCBwcm90ZWN0ZWQgUmVzb3VyY2VI
YW5kbGVDbGllbnQgewogcHVibGljOgogICAgIHZpcnR1YWwgflJlc291cmNlTG9hZGVyKCk7CkBA
IC0xNDYsNiArMTUwLDEwIEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIE5TQ2FjaGVkVVJMUmVzcG9u
c2UqIHdpbGxDYWNoZVJlc3BvbnNlKFJlc291cmNlSGFuZGxlKiwgTlNDYWNoZWRVUkxSZXNwb25z
ZSopIG92ZXJyaWRlOwogI2VuZGlmCiAKKyNpZiBVU0UoUVVJQ0tfTE9PSykKKyAgICB2aXJ0dWFs
IHZvaWQgZGlkQ3JlYXRlUXVpY2tMb29rSGFuZGxlKFF1aWNrTG9va0hhbmRsZSYpIG92ZXJyaWRl
OworI2VuZGlmCisKICAgICBjb25zdCBVUkwmIHVybCgpIGNvbnN0IHsgcmV0dXJuIG1fcmVxdWVz
dC51cmwoKTsgfQogICAgIFJlc291cmNlSGFuZGxlKiBoYW5kbGUoKSBjb25zdCB7IHJldHVybiBt
X2hhbmRsZS5nZXQoKTsgfQogICAgIGJvb2wgc2hvdWxkU2VuZFJlc291cmNlTG9hZENhbGxiYWNr
cygpIGNvbnN0IHsgcmV0dXJuIG1fb3B0aW9ucy5zZW5kTG9hZENhbGxiYWNrcyA9PSBTZW5kQ2Fs
bGJhY2tzOyB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL1Jl
c291cmNlSGFuZGxlLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL1Jlc291cmNl
SGFuZGxlLmgKaW5kZXggOGI3MzAzNTQwYWJhMmQxZGY0N2ZhMmQwMjBiNDczNDhlMGZlYzQ0MS4u
NjI0NjgyYzg4ZTk0OGU5MjVjYTcwZmM1NjYwYjYzNzczZmU3ZThkOCAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9SZXNvdXJjZUhhbmRsZS5oCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvUmVzb3VyY2VIYW5kbGUuaApAQCAtMTUwLDcgKzE1
MCw3IEBAIHB1YmxpYzoKIAogI2lmIFVTRShRVUlDS19MT09LKQogICAgIFF1aWNrTG9va0hhbmRs
ZSogcXVpY2tMb29rSGFuZGxlKCkgeyByZXR1cm4gbV9xdWlja0xvb2suZ2V0KCk7IH0KLSAgICB2
b2lkIHNldFF1aWNrTG9va0hhbmRsZShQYXNzT3duUHRyPFF1aWNrTG9va0hhbmRsZT4gaGFuZGxl
KSB7IG1fcXVpY2tMb29rID0gaGFuZGxlOyB9CisgICAgdm9pZCBzZXRRdWlja0xvb2tIYW5kbGUo
c3RkOjp1bmlxdWVfcHRyPFF1aWNrTG9va0hhbmRsZT4gaGFuZGxlKSB7IG1fcXVpY2tMb29rID0g
c3RkOjptb3ZlKGhhbmRsZSk7IH0KICNlbmRpZgogCiAjaWYgUExBVEZPUk0oV0lOKSAmJiBVU0Uo
Q1VSTCkKQEAgLTI5Miw3ICsyOTIsNyBAQCBwcml2YXRlOgogICAgIE93blB0cjxSZXNvdXJjZUhh
bmRsZUludGVybmFsPiBkOwogCiAjaWYgVVNFKFFVSUNLX0xPT0spCi0gICAgT3duUHRyPFF1aWNr
TG9va0hhbmRsZT4gbV9xdWlja0xvb2s7CisgICAgc3RkOjp1bmlxdWVfcHRyPFF1aWNrTG9va0hh
bmRsZT4gbV9xdWlja0xvb2s7CiAjZW5kaWYKIH07CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL25ldHdvcmsvUmVzb3VyY2VIYW5kbGVDbGllbnQuaCBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL25ldHdvcmsvUmVzb3VyY2VIYW5kbGVDbGllbnQuaAppbmRleCBlYWE2NTk5
MzExYjQ3NzUzZGZlNDcwNTQxOWFmZGM2ZjljYzk2MzE0Li4zYWUwODhmMjdiY2ZhMzUyMmU2ZGM2
OGMwZjIyOWY0MzdmMTJjNDk5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9u
ZXR3b3JrL1Jlc291cmNlSGFuZGxlQ2xpZW50LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vbmV0d29yay9SZXNvdXJjZUhhbmRsZUNsaWVudC5oCkBAIC01MCw2ICs1MCwxMCBAQCBuYW1l
c3BhY2UgV2ViQ29yZSB7CiAgICAgY2xhc3MgUmVzb3VyY2VSZXNwb25zZTsKICAgICBjbGFzcyBT
aGFyZWRCdWZmZXI7CiAKKyNpZiBVU0UoUVVJQ0tfTE9PSykKKyAgICBjbGFzcyBRdWlja0xvb2tI
YW5kbGU7CisjZW5kaWYKKwogICAgIGVudW0gQ2FjaGVTdG9yYWdlUG9saWN5IHsKICAgICAgICAg
U3RvcmFnZUFsbG93ZWQsCiAgICAgICAgIFN0b3JhZ2VBbGxvd2VkSW5NZW1vcnlPbmx5LApAQCAt
MTI0LDYgKzEyOCw5IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgdmlydHVhbCBOU0Nh
Y2hlZFVSTFJlc3BvbnNlICp3aWxsQ2FjaGVSZXNwb25zZShSZXNvdXJjZUhhbmRsZSosIE5TQ2Fj
aGVkVVJMUmVzcG9uc2UgKnJlc3BvbnNlKSB7IHJldHVybiByZXNwb25zZTsgfQogI2VuZGlmCiAK
KyNpZiBVU0UoUVVJQ0tfTE9PSykKKyAgICAgICAgdmlydHVhbCB2b2lkIGRpZENyZWF0ZVF1aWNr
TG9va0hhbmRsZShRdWlja0xvb2tIYW5kbGUmKSB7IH0KKyNlbmRpZgogICAgIH07CiAKIH0KZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvaW9zL1F1aWNrTG9vay5o
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9pb3MvUXVpY2tMb29rLmgKaW5kZXgg
MWMzYzQ3M2VlMzYwYmY5ZDUwZGJlMzVkOTFiNTlkYzAyZmI0MDZjNi4uNmJiZDE0MjJkOThkMGIx
MTAxMzE3ODg5NDYzMTA5ZmJlOGRhNTA3MyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vbmV0d29yay9pb3MvUXVpY2tMb29rLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vbmV0d29yay9pb3MvUXVpY2tMb29rLmgKQEAgLTI4LDI5ICsyOCwyMSBAQAogCiAjaWYgVVNF
KFFVSUNLX0xPT0spCiAKKyNpbXBvcnQgIlF1aWNrTG9va0hhbmRsZUNsaWVudC5oIgogI2ltcG9y
dCAiUmVzb3VyY2VSZXF1ZXN0LmgiCiAjaW1wb3J0IDxvYmpjL29iamMtcnVudGltZS5oPgogI2lt
cG9ydCA8d3RmL1Bhc3NPd25QdHIuaD4KLQotI2lmZGVmIF9fT0JKQ19fCi1AY2xhc3MgTlNEYXRh
OwotQGNsYXNzIE5TRGljdGlvbmFyeTsKLUBjbGFzcyBOU0ZpbGVIYW5kbGU7Ci1AY2xhc3MgTlNT
ZXQ7Ci1AY2xhc3MgTlNTdHJpbmc7Ci1AY2xhc3MgTlNVUkw7Ci1AY2xhc3MgTlNVUkxDb25uZWN0
aW9uOwotQGNsYXNzIE5TVVJMUmVzcG9uc2U7Ci0jZWxzZQotY2xhc3MgTlNEYXRhOwotY2xhc3Mg
TlNEaWN0aW9uYXJ5OwotY2xhc3MgTlNGaWxlSGFuZGxlOwotY2xhc3MgTlNTZXQ7Ci1jbGFzcyBO
U1N0cmluZzsKLWNsYXNzIE5TVVJMOwotY2xhc3MgTlNVUkxDb25uZWN0aW9uOwotY2xhc3MgTlNV
UkxSZXNwb25zZTsKLSNlbmRpZgorI2ltcG9ydCA8d3RmL1JlZlB0ci5oPgorCitPQkpDX0NMQVNT
IE5TRGF0YTsKK09CSkNfQ0xBU1MgTlNEaWN0aW9uYXJ5OworT0JKQ19DTEFTUyBOU0ZpbGVIYW5k
bGU7CitPQkpDX0NMQVNTIE5TU2V0OworT0JKQ19DTEFTUyBOU1N0cmluZzsKK09CSkNfQ0xBU1Mg
TlNVUkw7CitPQkpDX0NMQVNTIE5TVVJMQ29ubmVjdGlvbjsKK09CSkNfQ0xBU1MgTlNVUkxSZXNw
b25zZTsKK09CSkNfQ0xBU1MgUUxQcmV2aWV3Q29udmVydGVyOwogCiAjaWYgVVNFKENGTkVUV09S
SykKIHR5cGVkZWYgc3RydWN0IF9DRlVSTFJlc3BvbnNlKiBDRlVSTFJlc3BvbnNlUmVmOwpAQCAt
NTksNiArNTEsNyBAQCB0eXBlZGVmIHN0cnVjdCBfQ0ZVUkxDb25uZWN0aW9uKiBDRlVSTENvbm5l
Y3Rpb25SZWY7CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAorY2xhc3MgUXVpY2tMb29rSGFuZGxl
Q2xpZW50OwogY2xhc3MgUmVzb3VyY2VIYW5kbGU7CiBjbGFzcyBSZXNvdXJjZUxvYWRlcjsKIGNs
YXNzIFN5bmNocm9ub3VzUmVzb3VyY2VIYW5kbGVDRlVSTENvbm5lY3Rpb25EZWxlZ2F0ZTsKQEAg
LTg0LDE1ICs3NywxNiBAQCBjb25zdCBVUkwgc2FmZVFMVVJMRm9yRG9jdW1lbnRVUkxBbmRSZXNv
dXJjZVVSTChjb25zdCBVUkwmIGRvY3VtZW50VVJMLCBjb25zdCBTdAogCiBjb25zdCBjaGFyKiBR
TFByZXZpZXdQcm90b2NvbCgpOwogCitOU1N0cmluZyAqY3JlYXRlVGVtcG9yYXJ5RmlsZUZvclF1
aWNrTG9vayhOU1N0cmluZyAqZmlsZU5hbWUpOwogCiBjbGFzcyBRdWlja0xvb2tIYW5kbGUgewog
ICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKFF1aWNrTG9va0hhbmRsZSk7CiBwdWJsaWM6Ci0gICAg
c3RhdGljIFBhc3NPd25QdHI8UXVpY2tMb29rSGFuZGxlPiBjcmVhdGUoUmVzb3VyY2VIYW5kbGUq
LCBOU1VSTENvbm5lY3Rpb24gKiwgTlNVUkxSZXNwb25zZSAqLCBpZCBkZWxlZ2F0ZSk7CisgICAg
c3RhdGljIHN0ZDo6dW5pcXVlX3B0cjxRdWlja0xvb2tIYW5kbGU+IGNyZWF0ZShSZXNvdXJjZUhh
bmRsZSosIE5TVVJMQ29ubmVjdGlvbiAqLCBOU1VSTFJlc3BvbnNlICosIGlkIGRlbGVnYXRlKTsK
ICNpZiBVU0UoQ0ZORVRXT1JLKQotICAgIHN0YXRpYyBQYXNzT3duUHRyPFF1aWNrTG9va0hhbmRs
ZT4gY3JlYXRlKFJlc291cmNlSGFuZGxlKiwgU3luY2hyb25vdXNSZXNvdXJjZUhhbmRsZUNGVVJM
Q29ubmVjdGlvbkRlbGVnYXRlKiwgQ0ZVUkxSZXNwb25zZVJlZik7CisgICAgc3RhdGljIHN0ZDo6
dW5pcXVlX3B0cjxRdWlja0xvb2tIYW5kbGU+IGNyZWF0ZShSZXNvdXJjZUhhbmRsZSosIFN5bmNo
cm9ub3VzUmVzb3VyY2VIYW5kbGVDRlVSTENvbm5lY3Rpb25EZWxlZ2F0ZSosIENGVVJMUmVzcG9u
c2VSZWYpOwogI2VuZGlmCi0gICAgc3RhdGljIFBhc3NPd25QdHI8UXVpY2tMb29rSGFuZGxlPiBj
cmVhdGUoUmVzb3VyY2VMb2FkZXIqLCBOU1VSTFJlc3BvbnNlICosIGlkIGRlbGVnYXRlKTsKKyAg
ICBzdGF0aWMgc3RkOjp1bmlxdWVfcHRyPFF1aWNrTG9va0hhbmRsZT4gY3JlYXRlKFJlc291cmNl
TG9hZGVyKiwgTlNVUkxSZXNwb25zZSAqLCBpZCBkZWxlZ2F0ZSk7CiAgICAgflF1aWNrTG9va0hh
bmRsZSgpOwogCiAgICAgYm9vbCBkaWRSZWNlaXZlRGF0YUFycmF5KENGQXJyYXlSZWYpOwpAQCAt
MTA1LDE1ICs5OSwyMyBAQCBwdWJsaWM6CiAgICAgQ0ZVUkxSZXNwb25zZVJlZiBjZlJlc3BvbnNl
KCk7CiAjZW5kaWYKIAorICAgIHZvaWQgc2V0Q2xpZW50KFBhc3NSZWZQdHI8UXVpY2tMb29rSGFu
ZGxlQ2xpZW50PiBjbGllbnQpIHsgbV9jbGllbnQgPSBjbGllbnQ7IH0KKworICAgIE5TU3RyaW5n
ICpwcmV2aWV3RmlsZU5hbWUoKSBjb25zdDsKKyAgICBOU1VSTCAqZmlyc3RSZXF1ZXN0VVJMKCkg
Y29uc3QgeyByZXR1cm4gbV9maXJzdFJlcXVlc3RVUkwuZ2V0KCk7IH0KKyAgICBOU1VSTCAqcHJl
dmlld1JlcXVlc3RVUkwoKSBjb25zdDsKKyAgICBRTFByZXZpZXdDb252ZXJ0ZXIgKmNvbnZlcnRl
cigpIGNvbnN0IHsgcmV0dXJuIG1fY29udmVydGVyLmdldCgpOyB9CisKIHByaXZhdGU6CiAgICAg
UXVpY2tMb29rSGFuZGxlKE5TVVJMICosIE5TVVJMQ29ubmVjdGlvbiAqLCBOU1VSTFJlc3BvbnNl
ICosIGlkIGRlbGVnYXRlKTsKIAogICAgIFJldGFpblB0cjxOU1VSTD4gbV9maXJzdFJlcXVlc3RV
Ukw7Ci0gICAgUmV0YWluUHRyPGlkPiBtX2NvbnZlcnRlcjsKKyAgICBSZXRhaW5QdHI8UUxQcmV2
aWV3Q29udmVydGVyPiBtX2NvbnZlcnRlcjsKICAgICBSZXRhaW5QdHI8aWQ+IG1fZGVsZWdhdGU7
CiAgICAgYm9vbCBtX2ZpbmlzaGVkTG9hZGluZ0RhdGFJbnRvQ29udmVydGVyOwogICAgIFJldGFp
blB0cjxOU0ZpbGVIYW5kbGUgKj4gbV9xdWlja2xvb2tGaWxlSGFuZGxlOwotICAgIE5TVVJMUmVz
cG9uc2UgKm1fbnNSZXNwb25zZTsKKyAgICBSZXRhaW5QdHI8TlNVUkxSZXNwb25zZT4gbV9uc1Jl
c3BvbnNlOworICAgIFJlZlB0cjxRdWlja0xvb2tIYW5kbGVDbGllbnQ+IG1fY2xpZW50OwogfTsK
IAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vbmV0d29yay9pb3MvUXVpY2tMb29rLm1tIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
bmV0d29yay9pb3MvUXVpY2tMb29rLm1tCmluZGV4IGYxYzMwZjgxY2Q4NmNhNDZjOWQwZjJkNTc4
NDlhYTQzMmI2NmJiMDIuLjcwOWY4ZGIxMWE5YTNlZGY2ZmU3ZTQ3OTFmZjQ3ZTU3ODBkZTZmNGUg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvaW9zL1F1aWNrTG9v
ay5tbQorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2lvcy9RdWlja0xvb2su
bW0KQEAgLTE5NSw3ICsxOTUsNyBAQCBQYXNzT3duUHRyPFJlc291cmNlUmVxdWVzdD4gV2ViQ29y
ZTo6cmVnaXN0ZXJRTFByZXZpZXdDb252ZXJ0ZXJJZk5lZWRlZChOU1VSTCAqdQogICAgICAgICBS
ZXRhaW5QdHI8TlNTdHJpbmc+IHV0aSA9IGFkb3B0TlMoV2ViQ29yZTo6UUxUeXBlQ29weVVUSUZv
clVSTEFuZE1pbWVUeXBlKHVybCwgdXBkYXRlZE1JTUVUeXBlLmdldCgpKSk7CiAKICAgICAgICAg
UmV0YWluUHRyPGlkPiBjb252ZXJ0ZXIgPSBhZG9wdE5TKFtbUUxQcmV2aWV3Q29udmVydGVyQ2xh
c3MoKSBhbGxvY10gaW5pdFdpdGhEYXRhOmRhdGEgbmFtZTpuaWwgdXRpOnV0aS5nZXQoKSBvcHRp
b25zOm5pbF0pOwotICAgICAgICBOU1VSTFJlcXVlc3QgKnJlcXVlc3QgPSBbY29udmVydGVyLmdl
dCgpIHByZXZpZXdSZXF1ZXN0XTsKKyAgICAgICAgTlNVUkxSZXF1ZXN0ICpyZXF1ZXN0ID0gW2Nv
bnZlcnRlciBwcmV2aWV3UmVxdWVzdF07CiAKICAgICAgICAgLy8gV2UgdXNlIFtyZXF1ZXN0IFVS
TF0gaGVyZSBpbnN0ZWFkIG9mIHVybCBzaW5jZSBpdCB3aWxsIGJlCiAgICAgICAgIC8vIHRoZSBV
UkwgdGhhdCB0aGUgV2ViRGF0YVNvdXJjZSB3aWxsIHNlZSBkdXJpbmcgLWRlYWxsb2MuCkBAIC0z
MjEsNyArMzIxLDcgQEAgQGVuZAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLXN0YXRpYyBOU1N0
cmluZyAqY3JlYXRlVGVtcG9yYXJ5RmlsZUZvclF1aWNrTG9vayhOU1N0cmluZyAqZmlsZU5hbWUp
CitOU1N0cmluZyAqY3JlYXRlVGVtcG9yYXJ5RmlsZUZvclF1aWNrTG9vayhOU1N0cmluZyAqZmls
ZU5hbWUpCiB7CiAgICAgTlNTdHJpbmcgKmRvd25sb2FkRGlyZWN0b3J5ID0gY3JlYXRlVGVtcG9y
YXJ5RGlyZWN0b3J5KEAiUXVpY2tMb29rQ29udGVudCIpOwogICAgIGlmICghZG93bmxvYWREaXJl
Y3RvcnkpCkBAIC0zMzksNTIgKzMzOSw0NiBAQCBzdGF0aWMgTlNTdHJpbmcgKmNyZWF0ZVRlbXBv
cmFyeUZpbGVGb3JRdWlja0xvb2soTlNTdHJpbmcgKmZpbGVOYW1lKQogICAgIHJldHVybiBzdWNj
ZXNzID8gdW5pcXVlQ29udGVudFBhdGggOiBuaWw7CiB9CiAKK3N0YXRpYyBpbmxpbmUgUXVpY2tM
b29rSGFuZGxlQ2xpZW50KiBlbXB0eUNsaWVudCgpCit7CisgICAgc3RhdGljIE5ldmVyRGVzdHJv
eWVkPFF1aWNrTG9va0hhbmRsZUNsaWVudD4gZW1wdHlDbGllbnQ7CisgICAgcmV0dXJuICZlbXB0
eUNsaWVudC5nZXQoKTsKK30KIAogUXVpY2tMb29rSGFuZGxlOjpRdWlja0xvb2tIYW5kbGUoTlNV
UkwgKmZpcnN0UmVxdWVzdFVSTCwgTlNVUkxDb25uZWN0aW9uICpjb25uZWN0aW9uLCBOU1VSTFJl
c3BvbnNlICpuc1Jlc3BvbnNlLCBpZCBkZWxlZ2F0ZSkKICAgICA6IG1fZmlyc3RSZXF1ZXN0VVJM
KGZpcnN0UmVxdWVzdFVSTCkKICAgICAsIG1fY29udmVydGVyKGFkb3B0TlMoW1tRTFByZXZpZXdD
b252ZXJ0ZXJDbGFzcygpIGFsbG9jXSBpbml0V2l0aENvbm5lY3Rpb246Y29ubmVjdGlvbiBkZWxl
Z2F0ZTpkZWxlZ2F0ZSByZXNwb25zZTpuc1Jlc3BvbnNlIG9wdGlvbnM6bmlsXSkpCi0gICAgLCBt
X2RlbGVnYXRlKGFkb3B0TlMoW2RlbGVnYXRlIHJldGFpbl0pKQorICAgICwgbV9kZWxlZ2F0ZShk
ZWxlZ2F0ZSkKICAgICAsIG1fZmluaXNoZWRMb2FkaW5nRGF0YUludG9Db252ZXJ0ZXIoZmFsc2Up
Ci0gICAgLCBtX25zUmVzcG9uc2UoW21fY29udmVydGVyLmdldCgpIHByZXZpZXdSZXNwb25zZV0p
CisgICAgLCBtX25zUmVzcG9uc2UoW21fY29udmVydGVyIHByZXZpZXdSZXNwb25zZV0pCisgICAg
LCBtX2NsaWVudChlbXB0eUNsaWVudCgpKQogewotICAgIE5TVVJMICpwcmV2aWV3UmVxdWVzdFVS
TCA9IFtbbV9jb252ZXJ0ZXIuZ2V0KCkgcHJldmlld1JlcXVlc3RdIFVSTF07Ci0gICAgaWYgKCFh
cHBsaWNhdGlvbklzTW9iaWxlU2FmYXJpKCkpIHsKLSAgICAgICAgLy8gVGhpcyBrZWVwcyB0aGUg
UUxQcmV2aWV3Q29udmVydGVyIGFsaXZlIHRvIHNlcnZlIGFueSBzdWJyZXNvdXJjZSByZXF1ZXN0
cy4KLSAgICAgICAgLy8gSXQgaXMgcmVtb3ZlZCBieSAtW1dlYkRhdGFTb3VyY2UgZGVhbGxvY10u
Ci0gICAgICAgIGFkZFFMUHJldmlld0NvbnZlcnRlcldpdGhGaWxlRm9yVVJMKHByZXZpZXdSZXF1
ZXN0VVJMLCBtX2NvbnZlcnRlci5nZXQoKSwgbmlsKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0K
LQotICAgIC8vIFF1aWNrTG9vayBjb25zdW1lcyB0aGUgaW5jb21pbmcgZGF0YSwgd2UgbmVlZCB0
byBzdG9yZSBpdCBzbyB0aGF0IGl0IGNhbiBiZSBvcGVuZWQgaW4gdGhlIGhhbmRsaW5nIGFwcGxp
Y2F0aW9uLgotICAgIE5TU3RyaW5nICpxdWlja2xvb2tDb250ZW50UGF0aCA9IGNyZWF0ZVRlbXBv
cmFyeUZpbGVGb3JRdWlja0xvb2soW21fY29udmVydGVyLmdldCgpIHByZXZpZXdGaWxlTmFtZV0p
OwotICAgIExPRyhOZXR3b3JrLCAiUXVpY2tMb29rSGFuZGxlOjpRdWlja0xvb2tIYW5kbGUoKSAt
IHF1aWNrbG9va0NvbnRlbnRQYXRoOiAlcyIsIFtxdWlja2xvb2tDb250ZW50UGF0aCBVVEY4U3Ry
aW5nXSk7Ci0KLSAgICBpZiAocXVpY2tsb29rQ29udGVudFBhdGgpIHsKLSAgICAgICAgbV9xdWlj
a2xvb2tGaWxlSGFuZGxlID0gYWRvcHROUyhbW05TRmlsZUhhbmRsZSBmaWxlSGFuZGxlRm9yV3Jp
dGluZ0F0UGF0aDpxdWlja2xvb2tDb250ZW50UGF0aF0gcmV0YWluXSk7Ci0gICAgICAgIC8vIFdl
IG11c3QgdXNlIHRoZSBnZW5lcmF0ZWQgVVJMIGZyb20gbV9jb252ZXJ0ZXIncyBOU1VSTFJlcXVl
c3Qgb2JqZWN0Ci0gICAgICAgIC8vIHNvIHRoYXQgaXQgbWF0Y2hlcyB0aGUgVVJMIHJlbW92ZWQg
ZnJvbSAtW1dlYkRhdGFTb3VyY2UgZGVhbGxvY10uCi0gICAgICAgIGFkZFFMUHJldmlld0NvbnZl
cnRlcldpdGhGaWxlRm9yVVJMKHByZXZpZXdSZXF1ZXN0VVJMLCBtX2NvbnZlcnRlci5nZXQoKSwg
cXVpY2tsb29rQ29udGVudFBhdGgpOwotICAgIH0KKyAgICBMT0coTmV0d29yaywgIlF1aWNrTG9v
a0hhbmRsZTo6UXVpY2tMb29rSGFuZGxlKCkgLSBwcmV2aWV3RmlsZU5hbWU6ICVzIiwgW21fY29u
dmVydGVyIHByZXZpZXdGaWxlTmFtZV0pOwogfQogCi1QYXNzT3duUHRyPFF1aWNrTG9va0hhbmRs
ZT4gUXVpY2tMb29rSGFuZGxlOjpjcmVhdGUoUmVzb3VyY2VIYW5kbGUqIGhhbmRsZSwgTlNVUkxD
b25uZWN0aW9uICpjb25uZWN0aW9uLCBOU1VSTFJlc3BvbnNlICpuc1Jlc3BvbnNlLCBpZCBkZWxl
Z2F0ZSkKK3N0ZDo6dW5pcXVlX3B0cjxRdWlja0xvb2tIYW5kbGU+IFF1aWNrTG9va0hhbmRsZTo6
Y3JlYXRlKFJlc291cmNlSGFuZGxlKiBoYW5kbGUsIE5TVVJMQ29ubmVjdGlvbiAqY29ubmVjdGlv
biwgTlNVUkxSZXNwb25zZSAqbnNSZXNwb25zZSwgaWQgZGVsZWdhdGUpCiB7Ci0gICAgaWYgKGhh
bmRsZS0+Zmlyc3RSZXF1ZXN0KCkuaXNNYWluUmVzb3VyY2VSZXF1ZXN0KCkgJiYgW1dlYkNvcmU6
OlFMUHJldmlld0dldFN1cHBvcnRlZE1JTUVUeXBlc1NldCgpIGNvbnRhaW5zT2JqZWN0Oltuc1Jl
c3BvbnNlIE1JTUVUeXBlXV0pCi0gICAgICAgIHJldHVybiBhZG9wdFB0cihuZXcgUXVpY2tMb29r
SGFuZGxlKFtoYW5kbGUtPmZpcnN0UmVxdWVzdCgpLm5zVVJMUmVxdWVzdChEb05vdFVwZGF0ZUhU
VFBCb2R5KSBVUkxdLCBjb25uZWN0aW9uLCBuc1Jlc3BvbnNlLCBkZWxlZ2F0ZSkpOworICAgIEFT
U0VSVF9BUkcoaGFuZGxlLCBoYW5kbGUpOworICAgIGlmICghaGFuZGxlLT5maXJzdFJlcXVlc3Qo
KS5pc01haW5SZXNvdXJjZVJlcXVlc3QoKSB8fCAhW1dlYkNvcmU6OlFMUHJldmlld0dldFN1cHBv
cnRlZE1JTUVUeXBlc1NldCgpIGNvbnRhaW5zT2JqZWN0Oltuc1Jlc3BvbnNlIE1JTUVUeXBlXV0p
CisgICAgICAgIHJldHVybiBudWxscHRyOwogCi0gICAgcmV0dXJuIG51bGxwdHI7CisgICAgc3Rk
Ojp1bmlxdWVfcHRyPFF1aWNrTG9va0hhbmRsZT4gcXVpY2tMb29rSGFuZGxlKG5ldyBRdWlja0xv
b2tIYW5kbGUoW2hhbmRsZS0+Zmlyc3RSZXF1ZXN0KCkubnNVUkxSZXF1ZXN0KERvTm90VXBkYXRl
SFRUUEJvZHkpIFVSTF0sIGNvbm5lY3Rpb24sIG5zUmVzcG9uc2UsIGRlbGVnYXRlKSk7CisgICAg
aGFuZGxlLT5jbGllbnQoKS0+ZGlkQ3JlYXRlUXVpY2tMb29rSGFuZGxlKCpxdWlja0xvb2tIYW5k
bGUpOworICAgIHJldHVybiBzdGQ6Om1vdmUocXVpY2tMb29rSGFuZGxlKTsKIH0KIAogI2lmIFVT
RShDRk5FVFdPUkspCi1QYXNzT3duUHRyPFF1aWNrTG9va0hhbmRsZT4gUXVpY2tMb29rSGFuZGxl
OjpjcmVhdGUoUmVzb3VyY2VIYW5kbGUqIGhhbmRsZSwgU3luY2hyb25vdXNSZXNvdXJjZUhhbmRs
ZUNGVVJMQ29ubmVjdGlvbkRlbGVnYXRlKiBjb25uZWN0aW9uRGVsZWdhdGUsIENGVVJMUmVzcG9u
c2VSZWYgY2ZSZXNwb25zZSkKK3N0ZDo6dW5pcXVlX3B0cjxRdWlja0xvb2tIYW5kbGU+IFF1aWNr
TG9va0hhbmRsZTo6Y3JlYXRlKFJlc291cmNlSGFuZGxlKiBoYW5kbGUsIFN5bmNocm9ub3VzUmVz
b3VyY2VIYW5kbGVDRlVSTENvbm5lY3Rpb25EZWxlZ2F0ZSogY29ubmVjdGlvbkRlbGVnYXRlLCBD
RlVSTFJlc3BvbnNlUmVmIGNmUmVzcG9uc2UpCiB7Ci0gICAgaWYgKGhhbmRsZS0+Zmlyc3RSZXF1
ZXN0KCkuaXNNYWluUmVzb3VyY2VSZXF1ZXN0KCkgJiYgW1dlYkNvcmU6OlFMUHJldmlld0dldFN1
cHBvcnRlZE1JTUVUeXBlc1NldCgpIGNvbnRhaW5zT2JqZWN0OihOU1N0cmluZyAqKUNGVVJMUmVz
cG9uc2VHZXRNSU1FVHlwZShjZlJlc3BvbnNlKV0pIHsKLSAgICAgICAgTlNVUkxSZXNwb25zZSAq
bnNSZXNwb25zZSA9IFtOU1VSTFJlc3BvbnNlIF9yZXNwb25zZVdpdGhDRlVSTFJlc3BvbnNlOmNm
UmVzcG9uc2VdOwotICAgICAgICBXZWJRdWlja0xvb2tIYW5kbGVBc0RlbGVnYXRlICpkZWxlZ2F0
ZSA9IFtbW1dlYlF1aWNrTG9va0hhbmRsZUFzRGVsZWdhdGUgYWxsb2NdIGluaXRXaXRoQ29ubmVj
dGlvbkRlbGVnYXRlOmNvbm5lY3Rpb25EZWxlZ2F0ZV0gYXV0b3JlbGVhc2VdOwotICAgICAgICBy
ZXR1cm4gYWRvcHRQdHIobmV3IFF1aWNrTG9va0hhbmRsZShbaGFuZGxlLT5maXJzdFJlcXVlc3Qo
KS5uc1VSTFJlcXVlc3QoRG9Ob3RVcGRhdGVIVFRQQm9keSkgVVJMXSwgbmlsLCBuc1Jlc3BvbnNl
LCBkZWxlZ2F0ZSkpOwotICAgIH0KKyAgICBBU1NFUlRfQVJHKGhhbmRsZSwgaGFuZGxlKTsKKyAg
ICBpZiAoIWhhbmRsZS0+Zmlyc3RSZXF1ZXN0KCkuaXNNYWluUmVzb3VyY2VSZXF1ZXN0KCkgfHwg
IVtXZWJDb3JlOjpRTFByZXZpZXdHZXRTdXBwb3J0ZWRNSU1FVHlwZXNTZXQoKSBjb250YWluc09i
amVjdDooTlNTdHJpbmcgKilDRlVSTFJlc3BvbnNlR2V0TUlNRVR5cGUoY2ZSZXNwb25zZSldKQor
ICAgICAgICByZXR1cm4gbnVsbHB0cjsKIAotICAgIHJldHVybiBudWxscHRyOworICAgIE5TVVJM
UmVzcG9uc2UgKm5zUmVzcG9uc2UgPSBbTlNVUkxSZXNwb25zZSBfcmVzcG9uc2VXaXRoQ0ZVUkxS
ZXNwb25zZTpjZlJlc3BvbnNlXTsKKyAgICBXZWJRdWlja0xvb2tIYW5kbGVBc0RlbGVnYXRlICpk
ZWxlZ2F0ZSA9IFtbW1dlYlF1aWNrTG9va0hhbmRsZUFzRGVsZWdhdGUgYWxsb2NdIGluaXRXaXRo
Q29ubmVjdGlvbkRlbGVnYXRlOmNvbm5lY3Rpb25EZWxlZ2F0ZV0gYXV0b3JlbGVhc2VdOworICAg
IHN0ZDo6dW5pcXVlX3B0cjxRdWlja0xvb2tIYW5kbGU+IHF1aWNrTG9va0hhbmRsZShuZXcgUXVp
Y2tMb29rSGFuZGxlKFtoYW5kbGUtPmZpcnN0UmVxdWVzdCgpLm5zVVJMUmVxdWVzdChEb05vdFVw
ZGF0ZUhUVFBCb2R5KSBVUkxdLCBuaWwsIG5zUmVzcG9uc2UsIGRlbGVnYXRlKSk7CisgICAgaGFu
ZGxlLT5jbGllbnQoKS0+ZGlkQ3JlYXRlUXVpY2tMb29rSGFuZGxlKCpxdWlja0xvb2tIYW5kbGUp
OworICAgIHJldHVybiBzdGQ6Om1vdmUocXVpY2tMb29rSGFuZGxlKTsKIH0KIAogQ0ZVUkxSZXNw
b25zZVJlZiBRdWlja0xvb2tIYW5kbGU6OmNmUmVzcG9uc2UoKQpAQCAtMzkzLDQ2ICszODcsNDEg
QEAgQ0ZVUkxSZXNwb25zZVJlZiBRdWlja0xvb2tIYW5kbGU6OmNmUmVzcG9uc2UoKQogfQogI2Vu
ZGlmCiAKLVBhc3NPd25QdHI8UXVpY2tMb29rSGFuZGxlPiBRdWlja0xvb2tIYW5kbGU6OmNyZWF0
ZShSZXNvdXJjZUxvYWRlciogbG9hZGVyLCBOU1VSTFJlc3BvbnNlICpyZXNwb25zZSwgaWQgZGVs
ZWdhdGUpCitzdGQ6OnVuaXF1ZV9wdHI8UXVpY2tMb29rSGFuZGxlPiBRdWlja0xvb2tIYW5kbGU6
OmNyZWF0ZShSZXNvdXJjZUxvYWRlciogbG9hZGVyLCBOU1VSTFJlc3BvbnNlICpyZXNwb25zZSwg
aWQgZGVsZWdhdGUpCiB7Ci0gICAgaWYgKGxvYWRlci0+cmVxdWVzdCgpLmlzTWFpblJlc291cmNl
UmVxdWVzdCgpICYmIFtXZWJDb3JlOjpRTFByZXZpZXdHZXRTdXBwb3J0ZWRNSU1FVHlwZXNTZXQo
KSBjb250YWluc09iamVjdDpbcmVzcG9uc2UgTUlNRVR5cGVdXSkKLSAgICAgICAgcmV0dXJuIGFk
b3B0UHRyKG5ldyBRdWlja0xvb2tIYW5kbGUoW2xvYWRlci0+b3JpZ2luYWxSZXF1ZXN0KCkubnNV
UkxSZXF1ZXN0KERvTm90VXBkYXRlSFRUUEJvZHkpIFVSTF0sIG5pbCwgcmVzcG9uc2UsIGRlbGVn
YXRlKSk7CisgICAgQVNTRVJUX0FSRyhsb2FkZXIsIGxvYWRlcik7CisgICAgaWYgKCFsb2FkZXIt
PnJlcXVlc3QoKS5pc01haW5SZXNvdXJjZVJlcXVlc3QoKSB8fCAhW1dlYkNvcmU6OlFMUHJldmll
d0dldFN1cHBvcnRlZE1JTUVUeXBlc1NldCgpIGNvbnRhaW5zT2JqZWN0OltyZXNwb25zZSBNSU1F
VHlwZV1dKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKIAotICAgIHJldHVybiBudWxscHRyOwor
ICAgIHN0ZDo6dW5pcXVlX3B0cjxRdWlja0xvb2tIYW5kbGU+IHF1aWNrTG9va0hhbmRsZShuZXcg
UXVpY2tMb29rSGFuZGxlKFtsb2FkZXItPm9yaWdpbmFsUmVxdWVzdCgpLm5zVVJMUmVxdWVzdChE
b05vdFVwZGF0ZUhUVFBCb2R5KSBVUkxdLCBuaWwsIHJlc3BvbnNlLCBkZWxlZ2F0ZSkpOworICAg
IGxvYWRlci0+ZGlkQ3JlYXRlUXVpY2tMb29rSGFuZGxlKCpxdWlja0xvb2tIYW5kbGUpOworICAg
IHJldHVybiBzdGQ6Om1vdmUocXVpY2tMb29rSGFuZGxlKTsKIH0KIAogTlNVUkxSZXNwb25zZSAq
UXVpY2tMb29rSGFuZGxlOjpuc1Jlc3BvbnNlKCkKIHsKLSAgICByZXR1cm4gbV9uc1Jlc3BvbnNl
OworICAgIHJldHVybiBtX25zUmVzcG9uc2UuZ2V0KCk7CiB9CiAKIGJvb2wgUXVpY2tMb29rSGFu
ZGxlOjpkaWRSZWNlaXZlRGF0YUFycmF5KENGQXJyYXlSZWYgY2ZEYXRhQXJyYXkpCiB7Ci0gICAg
TlNBcnJheSAqIGNvbnN0IGRhdGFBcnJheSA9IChOU0FycmF5ICopY2ZEYXRhQXJyYXk7Ci0KICAg
ICBpZiAobV9maW5pc2hlZExvYWRpbmdEYXRhSW50b0NvbnZlcnRlcikKICAgICAgICAgcmV0dXJu
IGZhbHNlOwogCiAgICAgTE9HKE5ldHdvcmssICJRdWlja0xvb2tIYW5kbGU6OmRpZFJlY2VpdmVE
YXRhQXJyYXkoKSIpOwotICAgIFttX2NvbnZlcnRlci5nZXQoKSBhcHBlbmREYXRhQXJyYXk6ZGF0
YUFycmF5XTsKLSAgICBpZiAobV9xdWlja2xvb2tGaWxlSGFuZGxlKSB7Ci0gICAgICAgIGZvciAo
TlNEYXRhICpkYXRhIGluIGRhdGFBcnJheSkKLSAgICAgICAgICAgIFttX3F1aWNrbG9va0ZpbGVI
YW5kbGUuZ2V0KCkgd3JpdGVEYXRhOmRhdGFdOwotICAgIH0KKyAgICBbbV9jb252ZXJ0ZXIgYXBw
ZW5kRGF0YUFycmF5OihOU0FycmF5ICopY2ZEYXRhQXJyYXldOworICAgIG1fY2xpZW50LT5kaWRS
ZWNlaXZlRGF0YUFycmF5KGNmRGF0YUFycmF5KTsKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAogYm9v
bCBRdWlja0xvb2tIYW5kbGU6OmRpZFJlY2VpdmVEYXRhKENGRGF0YVJlZiBjZkRhdGEpCiB7Ci0g
ICAgTlNEYXRhICogY29uc3QgZGF0YSA9IChOU0RhdGEgKiljZkRhdGE7Ci0KICAgICBpZiAobV9m
aW5pc2hlZExvYWRpbmdEYXRhSW50b0NvbnZlcnRlcikKICAgICAgICAgcmV0dXJuIGZhbHNlOwog
CiAgICAgTE9HKE5ldHdvcmssICJRdWlja0xvb2tIYW5kbGU6OmRpZFJlY2VpdmVEYXRhKCkiKTsK
LSAgICBbbV9jb252ZXJ0ZXIuZ2V0KCkgYXBwZW5kRGF0YTpkYXRhXTsKLSAgICBpZiAobV9xdWlj
a2xvb2tGaWxlSGFuZGxlKQotICAgICAgICBbbV9xdWlja2xvb2tGaWxlSGFuZGxlLmdldCgpIHdy
aXRlRGF0YTpkYXRhXTsKKyAgICBbbV9jb252ZXJ0ZXIgYXBwZW5kRGF0YTooTlNEYXRhICopY2ZE
YXRhXTsKKyAgICBtX2NsaWVudC0+ZGlkUmVjZWl2ZURhdGEoY2ZEYXRhKTsKICAgICByZXR1cm4g
dHJ1ZTsKIH0KIApAQCAtNDQzLDMyICs0MzIsMzYgQEAgYm9vbCBRdWlja0xvb2tIYW5kbGU6OmRp
ZEZpbmlzaExvYWRpbmcoKQogCiAgICAgTE9HKE5ldHdvcmssICJRdWlja0xvb2tIYW5kbGU6OmRp
ZEZpbmlzaExvYWRpbmcoKSIpOwogICAgIG1fZmluaXNoZWRMb2FkaW5nRGF0YUludG9Db252ZXJ0
ZXIgPSBZRVM7Ci0gICAgW21fY29udmVydGVyLmdldCgpIGZpbmlzaGVkQXBwZW5kaW5nRGF0YV07
Ci0gICAgaWYgKG1fcXVpY2tsb29rRmlsZUhhbmRsZSkKLSAgICAgICAgW21fcXVpY2tsb29rRmls
ZUhhbmRsZS5nZXQoKSBjbG9zZUZpbGVdOworICAgIFttX2NvbnZlcnRlciBmaW5pc2hlZEFwcGVu
ZGluZ0RhdGFdOworICAgIG1fY2xpZW50LT5kaWRGaW5pc2hMb2FkaW5nKCk7CiAgICAgcmV0dXJu
IHRydWU7CiB9CiAKIHZvaWQgUXVpY2tMb29rSGFuZGxlOjpkaWRGYWlsKCkKIHsKICAgICBMT0co
TmV0d29yaywgIlF1aWNrTG9va0hhbmRsZTo6ZGlkRmFpbCgpIik7Ci0gICAgbV9xdWlja2xvb2tG
aWxlSGFuZGxlID0gbnVsbHB0cjsKLSAgICAvLyByZW1vdmVRTFByZXZpZXdDb252ZXJ0ZXJGb3JV
UkwgZGVsZXRlcyB0aGUgdGVtcG9yYXJ5IGZpbGUgY3JlYXRlZC4KLSAgICByZW1vdmVRTFByZXZp
ZXdDb252ZXJ0ZXJGb3JVUkwobV9maXJzdFJlcXVlc3RVUkwuZ2V0KCkpOwotICAgIFttX2NvbnZl
cnRlci5nZXQoKSBmaW5pc2hDb252ZXJ0aW5nXTsKKyAgICBtX2NsaWVudC0+ZGlkRmFpbCgpOwor
ICAgIFttX2NvbnZlcnRlciBmaW5pc2hDb252ZXJ0aW5nXTsKICAgICBtX2NvbnZlcnRlciA9IG51
bGxwdHI7CiB9CiAKIFF1aWNrTG9va0hhbmRsZTo6flF1aWNrTG9va0hhbmRsZSgpCiB7CiAgICAg
TE9HKE5ldHdvcmssICJRdWlja0xvb2tIYW5kbGU6On5RdWlja0xvb2tIYW5kbGUoKSIpOwotICAg
IGlmIChtX3F1aWNrbG9va0ZpbGVIYW5kbGUpIHsKLSAgICAgICAgbV9xdWlja2xvb2tGaWxlSGFu
ZGxlID0gbnVsbHB0cjsKLSAgICAgICAgcmVtb3ZlUUxQcmV2aWV3Q29udmVydGVyRm9yVVJMKG1f
Zmlyc3RSZXF1ZXN0VVJMLmdldCgpKTsKLSAgICB9CisgICAgbV9jbGllbnQgPSBudWxscHRyOwog
ICAgIG1fY29udmVydGVyID0gbnVsbHB0cjsKIAotICAgIFttX2RlbGVnYXRlLmdldCgpIGNsZWFy
SGFuZGxlXTsKKyAgICBbbV9kZWxlZ2F0ZSBjbGVhckhhbmRsZV07Cit9CisKK05TU3RyaW5nICpR
dWlja0xvb2tIYW5kbGU6OnByZXZpZXdGaWxlTmFtZSgpIGNvbnN0Cit7CisgICAgcmV0dXJuIFtt
X2NvbnZlcnRlciBwcmV2aWV3RmlsZU5hbWVdOworfQorCitOU1VSTCAqUXVpY2tMb29rSGFuZGxl
OjpwcmV2aWV3UmVxdWVzdFVSTCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIFtbbV9jb252ZXJ0ZXIg
cHJldmlld1JlcXVlc3RdIFVSTF07CiB9CiAKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL25ldHdvcmsvaW9zL1F1aWNrTG9va0hhbmRsZUNsaWVudC5oIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vbmV0d29yay9pb3MvUXVpY2tMb29rSGFuZGxlQ2xpZW50LmgKbmV3IGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMC4uZmI4YTMyZGUyZDdiNmVkNWU3ODg3MmQ5NWVlMzRkOGVhOGIxOGMzMQotLS0gL2Rldi9u
dWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvaW9zL1F1aWNrTG9va0hh
bmRsZUNsaWVudC5oCkBAIC0wLDAgKzEsNDkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFT
IElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVU
T1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNT
CisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YK
KyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIFF1aWNr
TG9va0hhbmRsZUNsaWVudF9oCisjZGVmaW5lIFF1aWNrTG9va0hhbmRsZUNsaWVudF9oCisKKyNp
ZiBVU0UoUVVJQ0tfTE9PSykKKworI2luY2x1ZGUgPENvcmVGb3VuZGF0aW9uL0NvcmVGb3VuZGF0
aW9uLmg+CisjaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUg
eworCitjbGFzcyBRdWlja0xvb2tIYW5kbGVDbGllbnQgOiBwdWJsaWMgUmVmQ291bnRlZDxRdWlj
a0xvb2tIYW5kbGVDbGllbnQ+IHsKK3B1YmxpYzoKKyAgICB2aXJ0dWFsIH5RdWlja0xvb2tIYW5k
bGVDbGllbnQoKSB7IH0KKyAgICB2aXJ0dWFsIHZvaWQgZGlkUmVjZWl2ZURhdGFBcnJheShDRkFy
cmF5UmVmKSB7IH0KKyAgICB2aXJ0dWFsIHZvaWQgZGlkUmVjZWl2ZURhdGEoQ0ZEYXRhUmVmKSB7
IH0KKyAgICB2aXJ0dWFsIHZvaWQgZGlkRmluaXNoTG9hZGluZygpIHsgfQorICAgIHZpcnR1YWwg
dm9pZCBkaWRGYWlsKCkgeyB9Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRp
ZiAvLyBVU0UoUVVJQ0tfTE9PSykKKworI2VuZGlmIC8vIFF1aWNrTG9va0hhbmRsZUNsaWVudF9o
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L21hYy9XZWJDb3JlU3VwcG9ydC9XZWJGcmFtZUxv
YWRlckNsaWVudC5oIGIvU291cmNlL1dlYktpdC9tYWMvV2ViQ29yZVN1cHBvcnQvV2ViRnJhbWVM
b2FkZXJDbGllbnQuaAppbmRleCA0MmYyZTlhNzIzMmMyZTUyNzAzM2Y0YmQwODFhZmUxYWFkMDU2
NTBkLi5mNjM2YjQxM2ZmNzMyNjk4OTMwNTU2Njg5MmVhM2IyZTc1NTRhYmIyIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViS2l0L21hYy9XZWJDb3JlU3VwcG9ydC9XZWJGcmFtZUxvYWRlckNsaWVudC5o
CisrKyBiL1NvdXJjZS9XZWJLaXQvbWFjL1dlYkNvcmVTdXBwb3J0L1dlYkZyYW1lTG9hZGVyQ2xp
ZW50LmgKQEAgLTIzOCw2ICsyMzgsMTAgQEAgcHJpdmF0ZToKIAogICAgIHZpcnR1YWwgYm9vbCBz
aG91bGRQYWludEJyb2tlbkltYWdlKGNvbnN0IFdlYkNvcmU6OlVSTCYpIGNvbnN0OwogCisjaWYg
VVNFKFFVSUNLX0xPT0spCisgICAgdmlydHVhbCB2b2lkIGRpZENyZWF0ZVF1aWNrTG9va0hhbmRs
ZShXZWJDb3JlOjpRdWlja0xvb2tIYW5kbGUmKSBvdmVycmlkZTsKKyNlbmRpZgorCiAgICAgUmV0
YWluUHRyPFdlYkZyYW1lPiBtX3dlYkZyYW1lOwogCiAgICAgUmV0YWluUHRyPFdlYkZyYW1lUG9s
aWN5TGlzdGVuZXI+IG1fcG9saWN5TGlzdGVuZXI7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0
L21hYy9XZWJDb3JlU3VwcG9ydC9XZWJGcmFtZUxvYWRlckNsaWVudC5tbSBiL1NvdXJjZS9XZWJL
aXQvbWFjL1dlYkNvcmVTdXBwb3J0L1dlYkZyYW1lTG9hZGVyQ2xpZW50Lm1tCmluZGV4IDA3OTA2
OGY1ODBjN2JkYjlkZjAwYTZiYWMyMjNiYmY1MWI4ZTVkMmMuLjlmMjk2OWJiMDk2YjU0NTgzNGRh
MDEyYmM4ZTNhN2M4YWU5Zjc4ZmUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvbWFjL1dlYkNv
cmVTdXBwb3J0L1dlYkZyYW1lTG9hZGVyQ2xpZW50Lm1tCisrKyBiL1NvdXJjZS9XZWJLaXQvbWFj
L1dlYkNvcmVTdXBwb3J0L1dlYkZyYW1lTG9hZGVyQ2xpZW50Lm1tCkBAIC0xNTIsNiArMTUyLDEz
IEBACiAjaW1wb3J0ICJXZWJVSUtpdERlbGVnYXRlLmgiCiAjZW5kaWYKIAorI2lmIFVTRShRVUlD
S19MT09LKQorI2ltcG9ydCA8Rm91bmRhdGlvbi9OU0ZpbGVNYW5hZ2VyX05TVVJMRXh0cmFzLmg+
CisjaW1wb3J0IDxXZWJDb3JlL0ZpbGVTeXN0ZW1JT1MuaD4KKyNpbXBvcnQgPFdlYkNvcmUvUXVp
Y2tMb29rLmg+CisjaW1wb3J0IDxXZWJDb3JlL1J1bnRpbWVBcHBsaWNhdGlvbkNoZWNrc0lPUy5o
PgorI2VuZGlmCisKIHVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwogdXNpbmcgbmFtZXNwYWNlIEhU
TUxOYW1lczsKIApAQCAtMjM5Miw2ICsyMzk5LDczIEBAIGJvb2wgV2ViRnJhbWVMb2FkZXJDbGll
bnQ6OnNob3VsZExvYWRNZWRpYUVsZW1lbnRVUkwoY29uc3QgVVJMJiB1cmwpIGNvbnN0CiB9CiAj
ZW5kaWYKIAorI2lmIFVTRShRVUlDS19MT09LKQordm9pZCBXZWJGcmFtZUxvYWRlckNsaWVudDo6
ZGlkQ3JlYXRlUXVpY2tMb29rSGFuZGxlKFdlYkNvcmU6OlF1aWNrTG9va0hhbmRsZSYgaGFuZGxl
KQoreworICAgIGNsYXNzIFF1aWNrTG9va0RvY3VtZW50V3JpdGVyIDogcHVibGljIFdlYkNvcmU6
OlF1aWNrTG9va0hhbmRsZUNsaWVudCB7CisgICAgcHVibGljOgorICAgICAgICBleHBsaWNpdCBR
dWlja0xvb2tEb2N1bWVudFdyaXRlcihjb25zdCBXZWJDb3JlOjpRdWlja0xvb2tIYW5kbGUmIGhh
bmRsZSkKKyAgICAgICAgICAgIDogbV9maXJzdFJlcXVlc3RVUkwoaGFuZGxlLmZpcnN0UmVxdWVz
dFVSTCgpKQorICAgICAgICB7CisgICAgICAgICAgICBOU1VSTCAqcHJldmlld1JlcXVlc3RVUkwg
PSBoYW5kbGUucHJldmlld1JlcXVlc3RVUkwoKTsKKyAgICAgICAgICAgIGlmICghYXBwbGljYXRp
b25Jc01vYmlsZVNhZmFyaSgpKSB7CisgICAgICAgICAgICAgICAgLy8gVGhpcyBrZWVwcyB0aGUg
UUxQcmV2aWV3Q29udmVydGVyIGFsaXZlIHRvIHNlcnZlIGFueSBzdWJyZXNvdXJjZSByZXF1ZXN0
cy4KKyAgICAgICAgICAgICAgICAvLyBJdCBpcyByZW1vdmVkIGJ5IC1bV2ViRGF0YVNvdXJjZSBk
ZWFsbG9jXS4KKyAgICAgICAgICAgICAgICBhZGRRTFByZXZpZXdDb252ZXJ0ZXJXaXRoRmlsZUZv
clVSTChwcmV2aWV3UmVxdWVzdFVSTCwgaGFuZGxlLmNvbnZlcnRlcigpLCBuaWwpOworICAgICAg
ICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgLy8gUXVpY2tM
b29rIGNvbnN1bWVzIHRoZSBpbmNvbWluZyBkYXRhLCB3ZSBuZWVkIHRvIHN0b3JlIGl0IHNvIHRo
YXQgaXQgY2FuIGJlIG9wZW5lZCBpbiB0aGUgaGFuZGxpbmcgYXBwbGljYXRpb24uCisgICAgICAg
ICAgICBOU1N0cmluZyAqcXVpY2tsb29rQ29udGVudFBhdGggPSBjcmVhdGVUZW1wb3JhcnlGaWxl
Rm9yUXVpY2tMb29rKGhhbmRsZS5wcmV2aWV3RmlsZU5hbWUoKSk7CisKKyAgICAgICAgICAgIGlm
IChxdWlja2xvb2tDb250ZW50UGF0aCkgeworICAgICAgICAgICAgICAgIG1fZmlsZUhhbmRsZSA9
IFtOU0ZpbGVIYW5kbGUgZmlsZUhhbmRsZUZvcldyaXRpbmdBdFBhdGg6cXVpY2tsb29rQ29udGVu
dFBhdGhdOworICAgICAgICAgICAgICAgIC8vIFdlIG11c3QgdXNlIHRoZSBnZW5lcmF0ZWQgVVJM
IGZyb20gbV9jb252ZXJ0ZXIncyBOU1VSTFJlcXVlc3Qgb2JqZWN0CisgICAgICAgICAgICAgICAg
Ly8gc28gdGhhdCBpdCBtYXRjaGVzIHRoZSBVUkwgcmVtb3ZlZCBmcm9tIC1bV2ViRGF0YVNvdXJj
ZSBkZWFsbG9jXS4KKyAgICAgICAgICAgICAgICBhZGRRTFByZXZpZXdDb252ZXJ0ZXJXaXRoRmls
ZUZvclVSTChwcmV2aWV3UmVxdWVzdFVSTCwgaGFuZGxlLmNvbnZlcnRlcigpLCBxdWlja2xvb2tD
b250ZW50UGF0aCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICB2aXJ0dWFs
IH5RdWlja0xvb2tEb2N1bWVudFdyaXRlcigpCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmICht
X2ZpbGVIYW5kbGUpCisgICAgICAgICAgICAgICAgcmVtb3ZlUUxQcmV2aWV3Q29udmVydGVyRm9y
VVJMKG1fZmlyc3RSZXF1ZXN0VVJMLmdldCgpKTsKKyAgICAgICAgfQorCisgICAgcHJpdmF0ZToK
KyAgICAgICAgUmV0YWluUHRyPE5TRmlsZUhhbmRsZT4gbV9maWxlSGFuZGxlOworICAgICAgICBS
ZXRhaW5QdHI8TlNVUkw+IG1fZmlyc3RSZXF1ZXN0VVJMOworCisgICAgICAgIHZvaWQgZGlkUmVj
ZWl2ZURhdGFBcnJheShDRkFycmF5UmVmIGRhdGFBcnJheSkKKyAgICAgICAgeworICAgICAgICAg
ICAgaWYgKG1fZmlsZUhhbmRsZSkgeworICAgICAgICAgICAgICAgIGZvciAoTlNEYXRhICpkYXRh
IGluIChOU0FycmF5ICopZGF0YUFycmF5KQorICAgICAgICAgICAgICAgICAgICBbbV9maWxlSGFu
ZGxlIHdyaXRlRGF0YTpkYXRhXTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAg
IHZvaWQgZGlkUmVjZWl2ZURhdGEoQ0ZEYXRhUmVmIGRhdGEpCisgICAgICAgIHsKKyAgICAgICAg
ICAgIGlmIChtX2ZpbGVIYW5kbGUpCisgICAgICAgICAgICAgICAgW21fZmlsZUhhbmRsZSB3cml0
ZURhdGE6KE5TRGF0YSAqKWRhdGFdOworICAgICAgICB9CisKKyAgICAgICAgdm9pZCBkaWRGaW5p
c2hMb2FkaW5nKCkKKyAgICAgICAgeworICAgICAgICAgICAgW21fZmlsZUhhbmRsZSBjbG9zZUZp
bGVdOworICAgICAgICB9CisKKyAgICAgICAgdm9pZCBkaWRGYWlsKCkKKyAgICAgICAgeworICAg
ICAgICAgICAgbV9maWxlSGFuZGxlID0gbmlsOworICAgICAgICAgICAgLy8gcmVtb3ZlUUxQcmV2
aWV3Q29udmVydGVyRm9yVVJMIGRlbGV0ZXMgdGhlIHRlbXBvcmFyeSBmaWxlIGNyZWF0ZWQuCisg
ICAgICAgICAgICByZW1vdmVRTFByZXZpZXdDb252ZXJ0ZXJGb3JVUkwobV9maXJzdFJlcXVlc3RV
UkwuZ2V0KCkpOworICAgICAgICB9CisgICAgfTsKKyAgICBoYW5kbGUuc2V0Q2xpZW50KGFkb3B0
UmVmKG5ldyBRdWlja0xvb2tEb2N1bWVudFdyaXRlcihoYW5kbGUpKSk7Cit9CisjZW5kaWYKKwog
QGltcGxlbWVudGF0aW9uIFdlYkZyYW1lUG9saWN5TGlzdGVuZXIKIAogKyAodm9pZClpbml0aWFs
aXplCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL05ldHdvcmsvV2ViUmVz
b3VyY2VMb2FkZXIuaCBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvTmV0d29yay9XZWJSZXNv
dXJjZUxvYWRlci5oCmluZGV4IDI1MmVlZmRkMTFiY2NiOTZkMDJmOTE1YzRlNjE0Mjk5MzYwMDc3
MDUuLjc1Mjk1NGMwMGRhMGQxYTUzMGIxMzY4NzhhOGRhMjJlZDYxNjIzNmEgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvTmV0d29yay9XZWJSZXNvdXJjZUxvYWRlci5oCisr
KyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvTmV0d29yay9XZWJSZXNvdXJjZUxvYWRlci5o
CkBAIC05NSw3ICs5NSw3IEBAIHByaXZhdGU6CiAjaWYgVVNFKFFVSUNLX0xPT0spCiAgICAgdm9p
ZCBzZXRVcFF1aWNrTG9va0hhbmRsZUlmTmVlZGVkKGNvbnN0IFdlYkNvcmU6OlJlc291cmNlUmVz
cG9uc2UmKTsKIAotICAgIE93blB0cjxXZWJDb3JlOjpRdWlja0xvb2tIYW5kbGU+IG1fcXVpY2tM
b29rSGFuZGxlOworICAgIHN0ZDo6dW5pcXVlX3B0cjxXZWJDb3JlOjpRdWlja0xvb2tIYW5kbGU+
IG1fcXVpY2tMb29rSGFuZGxlOwogI2VuZGlmCiAKICAgICBSZWZQdHI8V2ViQ29yZTo6UmVzb3Vy
Y2VMb2FkZXI+IG1fY29yZUxvYWRlcjsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlBy
b2Nlc3MvaW9zL1dlYlJlc291cmNlTG9hZGVySU9TLm1tIGIvU291cmNlL1dlYktpdDIvV2ViUHJv
Y2Vzcy9pb3MvV2ViUmVzb3VyY2VMb2FkZXJJT1MubW0KaW5kZXggNTFhZDU3MjUyNzliZDY1MWFm
OGM0YWE0YjMxMDZiOGQxMDU2ODJlOS4uZGQ1MDY4YjY4YzhhMzUyZTBjM2RkNGMyMjVkNWVlMzE5
MGMwNDhlYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9pb3MvV2ViUmVz
b3VyY2VMb2FkZXJJT1MubW0KKysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9pb3MvV2Vi
UmVzb3VyY2VMb2FkZXJJT1MubW0KQEAgLTEwMiw4ICsxMDIsNyBAQCBuYW1lc3BhY2UgV2ViS2l0
IHsKIAogdm9pZCBXZWJSZXNvdXJjZUxvYWRlcjo6c2V0VXBRdWlja0xvb2tIYW5kbGVJZk5lZWRl
ZChjb25zdCBSZXNvdXJjZVJlc3BvbnNlJiByZXNwb25zZSkKIHsKLSAgICBSZXRhaW5QdHI8V0tX
ZWJSZXNvdXJjZVF1aWNrTG9va0RlbGVnYXRlPiBkZWxlZ2F0ZSA9IGFkb3B0TlMoW1tXS1dlYlJl
c291cmNlUXVpY2tMb29rRGVsZWdhdGUgYWxsb2NdIGluaXRXaXRoV2ViUmVzb3VyY2VMb2FkZXI6
dGhpc10pOwotICAgIG1fcXVpY2tMb29rSGFuZGxlID0gUXVpY2tMb29rSGFuZGxlOjpjcmVhdGUo
cmVzb3VyY2VMb2FkZXIoKSwgcmVzcG9uc2UubnNVUkxSZXNwb25zZSgpLCBkZWxlZ2F0ZS5nZXQo
KSk7CisgICAgbV9xdWlja0xvb2tIYW5kbGUgPSBRdWlja0xvb2tIYW5kbGU6OmNyZWF0ZShyZXNv
dXJjZUxvYWRlcigpLCByZXNwb25zZS5uc1VSTFJlc3BvbnNlKCksIFtbW1dLV2ViUmVzb3VyY2VR
dWlja0xvb2tEZWxlZ2F0ZSBhbGxvY10gaW5pdFdpdGhXZWJSZXNvdXJjZUxvYWRlcjp0aGlzXSBh
dXRvcmVsZWFzZV0pOwogfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJLaXQK
</data>
<flag name="review"
          id="253612"
          type_id="1"
          status="+"
          setter="mitz"
    />
          </attachment>
      

    </bug>

</bugzilla>