<?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>36903</bug_id>
          
          <creation_ts>2010-03-31 15:18:44 -0700</creation_ts>
          <short_desc>Implement BlobBuilder internal class for BlobBuilder support as defined in FileWriter</short_desc>
          <delta_ts>2010-06-14 14:41:26 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>WebCore Misc.</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>PC</rep_platform>
          <op_sys>OS X 10.5</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>
          <dependson>39083</dependson>
          <blocked>36568</blocked>
          <everconfirmed>0</everconfirmed>
          <reporter name="Kinuko Yasuda">kinuko</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>dimich</cc>
    
    <cc>ericu</cc>
    
    <cc>fishd</cc>
    
    <cc>jeffschiller</cc>
    
    <cc>jianli</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>206757</commentid>
    <comment_count>0</comment_count>
    <who name="Kinuko Yasuda">kinuko</who>
    <bug_when>2010-03-31 15:18:44 -0700</bug_when>
    <thetext>Split from bug 36568.
Implement c++ BlobBuilder object for BlobBuilder interface support defined in FileWriter spec.
The spec is: http://dev.w3.org/2009/dap/file-system/file-writer.html</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>206811</commentid>
    <comment_count>1</comment_count>
      <attachid>52223</attachid>
    <who name="Kinuko Yasuda">kinuko</who>
    <bug_when>2010-03-31 16:38:44 -0700</bug_when>
    <thetext>Created attachment 52223
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>206824</commentid>
    <comment_count>2</comment_count>
      <attachid>52227</attachid>
    <who name="Kinuko Yasuda">kinuko</who>
    <bug_when>2010-03-31 17:03:26 -0700</bug_when>
    <thetext>Created attachment 52227
Patch (rebased)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>207003</commentid>
    <comment_count>3</comment_count>
      <attachid>52227</attachid>
    <who name="Kent Tamura">tkent</who>
    <bug_when>2010-04-01 00:11:17 -0700</bug_when>
    <thetext>Comment on attachment 52227
Patch (rebased)

&gt; diff --git a/WebCore/html/BlobBuilder.cpp b/WebCore/html/BlobBuilder.cpp
&gt; new file mode 100644
&gt; index 0000000..c076180
&gt; --- /dev/null
&gt; +++ b/WebCore/html/BlobBuilder.cpp
&gt; +typedef HashMap&lt;String, BlobBuilder::EndingsType, CaseFoldingHash&gt; EndingsTypeMap;
&gt; +static const EndingsTypeMap* createEndingsTypeMap()
&gt; +{
&gt; +    EndingsTypeMap* map = new EndingsTypeMap;
&gt; +    map-&gt;add(&quot;transparent&quot;, BlobBuilder::ENDING_TRANSPARENT);
&gt; +    map-&gt;add(&quot;native&quot;, BlobBuilder::ENDING_NATIVE);
&gt; +    map-&gt;add(&quot;lf&quot;, BlobBuilder::ENDING_LF);
&gt; +    map-&gt;add(&quot;cr&quot;, BlobBuilder::ENDING_CR);
&gt; +    map-&gt;add(&quot;crlf&quot;, BlobBuilder::ENDING_CRLF);

Are all the &quot;endings&quot; strings fixed?  If so, we had better use AtomicString instead of String.
AtomicString is faster in comparing instances.


&gt; +String BlobBuilder::endings() const
&gt; +{
&gt; +    switch (m_endings) {
&gt; +    case ENDING_TRANSPARENT: return &quot;transparent&quot;;
&gt; +    case ENDING_NATIVE: return &quot;native&quot;;
&gt; +    case ENDING_LF: return &quot;lf&quot;;
&gt; +    case ENDING_CR: return &quot;cr&quot;;
&gt; +    case ENDING_CRLF: return &quot;crlf&quot;;
&gt; +    }
&gt; +    ASSERT_NOT_REACHED();
&gt; +    return &quot;transparent&quot;;

ditto.  AtomicString is better.

&gt; diff --git a/WebCore/html/ByteStore.h b/WebCore/html/ByteStore.h
&gt; new file mode 100644
&gt; index 0000000..c1a99cf
&gt; --- /dev/null
&gt; +++ b/WebCore/html/ByteStore.h
&gt; +    // Reads the data into |out| at most |maxLength| bytes.
&gt; +    int64_t read(char* out, size_t offset, size_t maxLength) const;
&gt; +
&gt; +    // Appends raw data |in|.  Returns false if the data could not be added.
&gt; +    bool append(const char* in, size_t length);

WebKit doesn&apos;t have |parameter| notation.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>207581</commentid>
    <comment_count>4</comment_count>
      <attachid>52227</attachid>
    <who name="Dmitry Titov">dimich</who>
    <bug_when>2010-04-01 18:29:50 -0700</bug_when>
    <thetext>Comment on attachment 52227
Patch (rebased)

General comment: it seems you are taking the path of converting the parts appended by append() method to ByteStore immediately and synchronously on append(). This will have 2 undesired effects:

1. Converting strings happen right away, while the result may not even be used at the end.

2. When you will need to implement append(FileBlob) you will need to fetch the file data immediately, because it can come between 2 append(String) calls

3. When someone appends an bunch of Strings and then changes Blob.endings, those strings will have to be re-appended, which is multiple work. I&apos;m not sure how it will even work with the FileBlobs in the mix.

It seems the Blob should simply contain a list of all appended items, and delay the actual conversions to the end usage point. this way, perhaps you will never even need ByteStore object - indeed, the Blob could just implement read(...) method by walking the list and converting/filling the provided buffer in &apos;on demand&apos; fashion.

I mentioned in the webkit-dev discussion and still think that introducing ByteStore will eventually make Blob.append(FileBlob) a read-file-right-now operation... And if we don&apos;t read/combine anything until absolutely necessary, we shouldn&apos;t have to need ByteStore, at least in this explicit form.

r- because strings can not be converted/merged right in the append(String) method, due to reasons above.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>207964</commentid>
    <comment_count>5</comment_count>
    <who name="Kinuko Yasuda">kinuko</who>
    <bug_when>2010-04-02 11:42:42 -0700</bug_when>
    <thetext>(In reply to comment #4)
&gt; (From update of attachment 52227 [details])
&gt; General comment: it seems you are taking the path of converting the parts
&gt; appended by append() method to ByteStore immediately and synchronously on
&gt; append(). This will have 2 undesired effects:

For append(Blob) I was/am going to put them into a list and wasn&apos;t going to read them immediately, but I was missing the point that BlobBuilder.endings may be changed after Strings are added.

In the spec there&apos;s a notion that BlobBuilder.append(string) may throw encoding exceptions, so I had assumed append(string) does some conversion right away.  (Actually I think we can drop this part as we now do not have encoding parameters in BlobBuilder.)

It makes me wonder when we should really convert the strings;
1. BlobBuilder.append, 2. BlobBuilder.getBlob or 3. when we read Blob.
1. is not efficient as you suggested, but I think we will want some raw data at 2., because Blob.size and Blob.slice seem to be byte-based methods/operations.  Does this sound correct?

I&apos;m attaching a new patch that do not convert Strings into ByteStore at append() but at getBlob() timing.  This time I&apos;m including changes in Blob too to give more overview.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>207967</commentid>
    <comment_count>6</comment_count>
      <attachid>52429</attachid>
    <who name="Kinuko Yasuda">kinuko</who>
    <bug_when>2010-04-02 11:43:13 -0700</bug_when>
    <thetext>Created attachment 52429
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>211115</commentid>
    <comment_count>7</comment_count>
    <who name="Dmitry Titov">dimich</who>
    <bug_when>2010-04-09 23:53:42 -0700</bug_when>
    <thetext>It is much better now. Thanks for iterating on it! I don&apos;t think it can go in in this form, but added code definitely added some clarity.

A few points:

It seems converting strings at getBlob time is just fine indeed, for the reasons you mentioned. Obviously, we&apos;ll not want to do the same for file fragments but it&apos;s not in this patch.

Looking at the patch, I think we can make what you have as CombinedBlob to be the only type of the blob... A Blob. It would be always a list of BlobItems. A BlobItem would be an abstract class, with implementations like FileBlobItem, StringBlobItem, ByteArrayBlobItem.When File derives from the Blob, such Blob would only have 1 FielBlobitem in the list... StringBlobItem would be the one constructed from string and stored in a mutable list of BlobBuilder. Once BlobBuilder::getBlob() (it probably should be createBlob()) is called, the new list created, with FileBlobItems just copied, and StringBlobItems replaced with ByteArrayBlobItems, with encoding and current endings attached.

BTW, why do we need to make all Blobs (or BlobItems, if we&apos;ll have them) ThreadSafeShared? I suspect it&apos;s because of the FileThread? It would be unfortunate, since it would slow down cases when FileThread is not in the picture (building a blob and sending it via XHR does not require thread safety).

Also, and it may be a bigger issue, it is unclear to me what is the story about BlobBuilder and FormData. They feel almost identical objects. It seems we might want to have one of those &apos;lists of blobs builders&apos;.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>218128</commentid>
    <comment_count>8</comment_count>
    <who name="Kinuko Yasuda">kinuko</who>
    <bug_when>2010-04-27 18:43:18 -0700</bug_when>
    <thetext>Thanks for your comments.  Let me update with the current status.

(In reply to comment #7)
&gt; Looking at the patch, I think we can make what you have as CombinedBlob to be
&gt; the only type of the blob... A Blob. It would be always a list of BlobItems. A
&gt; BlobItem would be an abstract class, with implementations like FileBlobItem,
&gt; StringBlobItem, ByteArrayBlobItem.When File derives from the Blob, such Blob
&gt; would only have 1 FielBlobitem in the list... StringBlobItem would be the one
&gt; constructed from string and stored in a mutable list of BlobBuilder. Once
&gt; BlobBuilder::getBlob() (it probably should be createBlob()) is called, the new
&gt; list created, with FileBlobItems just copied, and StringBlobItems replaced with
&gt; ByteArrayBlobItems, with encoding and current endings attached.

I&apos;ve started to make those changes with an attempt to refactor BlobBuilder and FormData.

In my local tree I&apos;m trying / have tried to:
- move most of Blob implementation into BlobItems and make Blob a simple collection of BlobItems.
- File would be a special Blob that contains only one FileBlobItem.
- BlobBuilder would be a very lightweight class as well.
- refactor FormDataList::Item and FormDataElement as a wrapper of BlobItem.  This makes appending Blobs to FormData much simpler (it can just pass a list of BlobItems).  For now I&apos;m trying to make them keep the same interface as before to avoid refactoring in platform-dependent code.

The changes are still rough but I want to get some feedbacks in a design aspect before I go too far.
How do they sound to you?

Fyi my current patch is uploaded at:
http://codereview.chromium.org/1769002

&gt; BTW, why do we need to make all Blobs (or BlobItems, if we&apos;ll have them)
&gt; ThreadSafeShared? I suspect it&apos;s because of the FileThread?

No, we won&apos;t need it to be ThreadSafeShared.
When I wrote the initial patch I wasn&apos;t very sure but in the current design it&apos;ll be ok without making it ThreadSafeShared (at least for FileReader/Writer usage).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>235872</commentid>
    <comment_count>9</comment_count>
      <attachid>58260</attachid>
    <who name="Kinuko Yasuda">kinuko</who>
    <bug_when>2010-06-09 10:51:45 -0700</bug_when>
    <thetext>Created attachment 58260
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>235874</commentid>
    <comment_count>10</comment_count>
    <who name="Kinuko Yasuda">kinuko</who>
    <bug_when>2010-06-09 10:54:55 -0700</bug_when>
    <thetext>Uploaded a new patch for BlobBuilder based on BlobItem.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>236028</commentid>
    <comment_count>11</comment_count>
      <attachid>58260</attachid>
    <who name="Jian Li">jianli</who>
    <bug_when>2010-06-09 14:59:18 -0700</bug_when>
    <thetext>Comment on attachment 58260
Patch

WebCore/html/Blob.h:74
 +      Blob(const String&amp; type, const BlobItemList&amp; items);
&apos;items&apos; can be omitted.

WebCore/html/Blob.cpp:94
 +      return Blob::create(contentType, items);
// FIXME: Pass content type when we add it to slice&apos;s arguments.
return Blob::create(String(), items);

WebCore/html/BlobBuilder.cpp:39
 +  #include &quot;StringHash.h&quot;
Is this include needed?

WebCore/html/BlobBuilder.cpp:41
 +  #include &lt;wtf/HashMap.h&gt;
Is this include needed?

WebCore/html/BlobBuilder.cpp:81
 +      if (!blob)
Probably it is simpler to say:
    if (blob)
        for (...)
            ...
    return true;

WebCore/html/BlobBuilder.h:37
 +  #include &quot;ExceptionCode.h&quot;
Including ExceptionCode.h is not needed.

WebCore/html/BlobBuilder.h:51
 +      bool appendString(const WebCore::String&amp; text, const WebCore::String&amp; ending, ExceptionCode&amp; ec);
The namespace WebCore is not necessary.

WebCore/html/BlobBuilder.h:54
 +      PassRefPtr&lt;Blob&gt; getBlob(const WebCore::String&amp; contentType) const;
ditto.

WebCore/platform/BlobItem.cpp:135
 +  #else
How about CR in mac?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>236552</commentid>
    <comment_count>12</comment_count>
      <attachid>58416</attachid>
    <who name="Kinuko Yasuda">kinuko</who>
    <bug_when>2010-06-10 15:02:50 -0700</bug_when>
    <thetext>Created attachment 58416
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>236557</commentid>
    <comment_count>13</comment_count>
    <who name="Kinuko Yasuda">kinuko</who>
    <bug_when>2010-06-10 15:10:06 -0700</bug_when>
    <thetext>(In reply to comment #11)
&gt; (From update of attachment 58260 [details])
&gt; WebCore/html/Blob.h:74
&gt;  +      Blob(const String&amp; type, const BlobItemList&amp; items);
&gt; &apos;items&apos; can be omitted.

Done.

&gt; WebCore/html/Blob.cpp:94
&gt;  +      return Blob::create(contentType, items);
&gt; // FIXME: Pass content type when we add it to slice&apos;s arguments.
&gt; return Blob::create(String(), items);

Done.  Accordingly changed the Blob::create&apos;s first param const String&amp; -&gt; const String (its implementation is just a RefPtr).

&gt; WebCore/html/BlobBuilder.cpp:39
&gt;  +  #include &quot;StringHash.h&quot;
&gt;  +  #include &lt;wtf/HashMap.h&gt;

Removed both includes.

&gt; WebCore/html/BlobBuilder.cpp:81
&gt;  +      if (!blob)
&gt; Probably it is simpler to say:
&gt;     if (blob)
&gt;         for (...)
&gt;             ...
&gt;     return true;

Fixed.

&gt; WebCore/html/BlobBuilder.h:37
&gt;  +  #include &quot;ExceptionCode.h&quot;
&gt; Including ExceptionCode.h is not needed.

Fixed.

&gt; WebCore/html/BlobBuilder.h:51
&gt;  +      bool appendString(const WebCore::String&amp; text, const WebCore::String&amp; ending, ExceptionCode&amp; ec);
&gt; The namespace WebCore is not necessary.

Fixed.

&gt;  +      PassRefPtr&lt;Blob&gt; getBlob(const WebCore::String&amp; contentType) const;
&gt; ditto.

Fixed.

&gt; WebCore/platform/BlobItem.cpp:135
&gt;  +  #else
&gt; How about CR in mac?

Is older Mac supported by WebKit?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>237101</commentid>
    <comment_count>14</comment_count>
      <attachid>58416</attachid>
    <who name="Jian Li">jianli</who>
    <bug_when>2010-06-11 15:56:28 -0700</bug_when>
    <thetext>Comment on attachment 58416
Patch

Some more comments.

WebCore/html/Blob.h:44
 +      static PassRefPtr&lt;Blob&gt; create(const String type, const BlobItemList&amp; items)
&quot;const String&quot; in create() is inconsistent with &quot;const String&amp;&quot; in Blob().

WebCore/html/Blob.h:73
 +      Blob() { }
Is this needed?

WebCore/html/BlobBuilder.h:40
 +  #include &lt;wtf/Vector.h&gt;
This seems not to be needed.

WebCore/html/BlobBuilder.h:57
 +      BlobBuilder();
We do not really need this default constructor.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>237114</commentid>
    <comment_count>15</comment_count>
      <attachid>58523</attachid>
    <who name="Kinuko Yasuda">kinuko</who>
    <bug_when>2010-06-11 16:19:35 -0700</bug_when>
    <thetext>Created attachment 58523
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>237128</commentid>
    <comment_count>16</comment_count>
    <who name="Kinuko Yasuda">kinuko</who>
    <bug_when>2010-06-11 16:35:44 -0700</bug_when>
    <thetext>(In reply to comment #14)
&gt; (From update of attachment 58416 [details])
&gt; Some more comments.
&gt; 
&gt; WebCore/html/Blob.h:44
&gt;  +      static PassRefPtr&lt;Blob&gt; create(const String type, const BlobItemList&amp; items)
&gt; &quot;const String&quot; in create() is inconsistent with &quot;const String&amp;&quot; in Blob().

Fixed.

&gt; WebCore/html/Blob.h:73
&gt;  +      Blob() { }
&gt; WebCore/html/BlobBuilder.h:40
&gt;  +  #include &lt;wtf/Vector.h&gt;
&gt; WebCore/html/BlobBuilder.h:57
&gt;  +      BlobBuilder();

Removed them.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>237161</commentid>
    <comment_count>17</comment_count>
      <attachid>58523</attachid>
    <who name="Jian Li">jianli</who>
    <bug_when>2010-06-11 17:13:20 -0700</bug_when>
    <thetext>Comment on attachment 58523
Patch

r=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>238051</commentid>
    <comment_count>18</comment_count>
    <who name="Kinuko Yasuda">kinuko</who>
    <bug_when>2010-06-14 14:41:26 -0700</bug_when>
    <thetext>Committed r61149: &lt;http://trac.webkit.org/changeset/61149&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>52223</attachid>
            <date>2010-03-31 16:38:44 -0700</date>
            <delta_ts>2010-03-31 17:03:23 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-36903-20100331163843.patch</filename>
            <type>text/plain</type>
            <size>21186</size>
            <attacher name="Kinuko Yasuda">kinuko</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYkNvcmUvQ2hhbmdlTG9nIGIvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXgg
MjNmMmJmMy4uNjhiZDI1NyAxMDA2NDQKLS0tIGEvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvV2Vi
Q29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSw0MyBAQAorMjAxMC0wMy0zMSAgS2ludWtvIFlhc3Vk
YSAgPGtpbnVrb0BjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChP
T1BTISkuCisKKyAgICAgICAgSW1wbGVtZW50IGludGVybmFsIEJsb2JCdWlsZGVyIGNsYXNzIGZv
ciBCbG9iQnVpbGRlciBpbnRlcmZhY2UKKyAgICAgICAgc3VwcG9ydCBhcyBkZWZpbmVkIGluIEZp
bGVXcml0ZXIuCisgICAgICAgIFRoZSBwYXRjaCBhbHNvIGFkZHMgYSBoZWxwZXIgY2xhc3MgZm9y
IGl0LCBjYWxsZWQgQnl0ZVN0b3JlLgorICAgICAgICBTb21lIG1ldGhvZHMgYXJlIGp1c3QgcGxh
Y2UgaG9sZGVycyBhbmQgbm90IGltcGxlbWVudGVkIHlldC4KKyAgICAgICAgRmlsZVdyaXRlciBz
cGVjOiBodHRwOi8vZGV2LnczLm9yZy8yMDA5L2RhcC9maWxlLXN5c3RlbS9maWxlLXdyaXRlci5o
dG1sCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0zNjkw
MworCisgICAgICAgIE5vIG5ldyB0ZXN0cyB5ZXQuICBJIHdpbGwgYWRkIHRlc3RzIHdoZW4gSSBh
ZGQganNjIGJpbmRpbmdzIGZvciBpdC4KKworICAgICAgICAqIEdOVW1ha2VmaWxlLmFtOgorICAg
ICAgICAqIFdlYkNvcmUuZ3lwaToKKyAgICAgICAgKiBXZWJDb3JlLnBybzoKKyAgICAgICAgKiBX
ZWJDb3JlLnZjcHJvai9XZWJDb3JlLnZjcHJvajoKKyAgICAgICAgKiBXZWJDb3JlLnhjb2RlcHJv
ai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICogaHRtbC9CbG9iQnVpbGRlci5jcHA6IEFkZGVk
LgorICAgICAgICAoV2ViQ29yZTo6QmxvYkJ1aWxkZXI6OkJsb2JCdWlsZGVyKToKKyAgICAgICAg
KFdlYkNvcmU6OkJsb2JCdWlsZGVyOjp+QmxvYkJ1aWxkZXIpOgorICAgICAgICAoV2ViQ29yZTo6
QmxvYkJ1aWxkZXI6OmFwcGVuZFN0cmluZyk6CisgICAgICAgIChXZWJDb3JlOjpCbG9iQnVpbGRl
cjo6YXBwZW5kQmxvYik6CisgICAgICAgIChXZWJDb3JlOjpCbG9iQnVpbGRlcjo6Z2V0QmxvYik6
CisgICAgICAgIChXZWJDb3JlOjpjcmVhdGVFbmRpbmdzVHlwZU1hcCk6CisgICAgICAgIChXZWJD
b3JlOjpCbG9iQnVpbGRlcjo6c2V0RW5kaW5ncyk6CisgICAgICAgIChXZWJDb3JlOjpCbG9iQnVp
bGRlcjo6ZW5kaW5ncyk6CisgICAgICAgICogaHRtbC9CbG9iQnVpbGRlci5oOiBBZGRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OkJsb2JCdWlsZGVyOjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6
QmxvYkJ1aWxkZXI6Oik6CisgICAgICAgICogaHRtbC9CeXRlU3RvcmUuY3BwOiBBZGRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OkJ5dGVTdG9yZTo6Qnl0ZVN0b3JlKToKKyAgICAgICAgKFdlYkNvcmU6
OkJ5dGVTdG9yZTo6fkJ5dGVTdG9yZSk6CisgICAgICAgIChXZWJDb3JlOjpCeXRlU3RvcmU6OmFw
cGVuZCk6CisgICAgICAgIChXZWJDb3JlOjpCeXRlU3RvcmU6OnJlYWQpOgorICAgICAgICAqIGh0
bWwvQnl0ZVN0b3JlLmg6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6Qnl0ZVN0b3JlOjpjcmVh
dGUpOgorICAgICAgICAoV2ViQ29yZTo6Qnl0ZVN0b3JlOjpzaXplKToKKyAgICAgICAgKFdlYkNv
cmU6OkJ5dGVTdG9yZTo6ZW1wdHkpOgorCiAyMDEwLTAzLTMxICBEYXJpbiBBZGxlciAgPGRhcmlu
QGFwcGxlLmNvbT4KIAogICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJUaGVtZUNocm9taXVtV2lu
Lmg6IEZpeCBpbmNvbnNpc3RlbnQgbGluZSBlbmRpbmdzLgpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9H
TlVtYWtlZmlsZS5hbSBiL1dlYkNvcmUvR05VbWFrZWZpbGUuYW0KaW5kZXggMTlhOTE3Ni4uOTgy
OTg4NyAxMDA2NDQKLS0tIGEvV2ViQ29yZS9HTlVtYWtlZmlsZS5hbQorKysgYi9XZWJDb3JlL0dO
VW1ha2VmaWxlLmFtCkBAIC05OTAsNiArOTkwLDEwIEBAIHdlYmNvcmVfc291cmNlcyArPSBcCiAJ
V2ViQ29yZS9oaXN0b3J5L1BhZ2VDYWNoZS5oIFwKIAlXZWJDb3JlL2h0bWwvQmxvYi5jcHAgXAog
CVdlYkNvcmUvaHRtbC9CbG9iLmggXAorCVdlYkNvcmUvaHRtbC9CbG9iQnVpbGRlci5jcHAgXAor
CVdlYkNvcmUvaHRtbC9CbG9iQnVpbGRlci5oIFwKKwlXZWJDb3JlL2h0bWwvQnl0ZVN0b3JlLmNw
cCBcCisJV2ViQ29yZS9odG1sL0J5dGVTdG9yZS5oIFwKIAlXZWJDb3JlL2h0bWwvY2FudmFzL0Nh
bnZhc0NvbnRleHRBdHRyaWJ1dGVzLmggXAogCVdlYkNvcmUvaHRtbC9jYW52YXMvQ2FudmFzR3Jh
ZGllbnQuY3BwIFwKIAlXZWJDb3JlL2h0bWwvY2FudmFzL0NhbnZhc0dyYWRpZW50LmggXApkaWZm
IC0tZ2l0IGEvV2ViQ29yZS9XZWJDb3JlLmd5cGkgYi9XZWJDb3JlL1dlYkNvcmUuZ3lwaQppbmRl
eCAyMDM4MGQwLi5mMTFhZTI4IDEwMDY0NAotLS0gYS9XZWJDb3JlL1dlYkNvcmUuZ3lwaQorKysg
Yi9XZWJDb3JlL1dlYkNvcmUuZ3lwaQpAQCAtMTM1NSw2ICsxMzU1LDEwIEBACiAgICAgICAgICAg
ICAnaGlzdG9yeS9QYWdlQ2FjaGUuaCcsCiAgICAgICAgICAgICAnaHRtbC9CbG9iLmNwcCcsCiAg
ICAgICAgICAgICAnaHRtbC9CbG9iLmgnLAorICAgICAgICAgICAgJ2h0bWwvQmxvYkJ1aWxkZXIu
Y3BwJywKKyAgICAgICAgICAgICdodG1sL0Jsb2JCdWlsZGVyLmgnLAorICAgICAgICAgICAgJ2h0
bWwvQnl0ZVN0b3JlLmNwcCcsCisgICAgICAgICAgICAnaHRtbC9CeXRlU3RvcmUuaCcsCiAgICAg
ICAgICAgICAnaHRtbC9jYW52YXMvV2ViR0xBcnJheS5jcHAnLAogICAgICAgICAgICAgJ2h0bWwv
Y2FudmFzL1dlYkdMQXJyYXkuaCcsCiAgICAgICAgICAgICAnaHRtbC9jYW52YXMvV2ViR0xBcnJh
eUJ1ZmZlci5jcHAnLApkaWZmIC0tZ2l0IGEvV2ViQ29yZS9XZWJDb3JlLnBybyBiL1dlYkNvcmUv
V2ViQ29yZS5wcm8KaW5kZXggYzIxMzdmNi4uZWE5MDg4YiAxMDA2NDQKLS0tIGEvV2ViQ29yZS9X
ZWJDb3JlLnBybworKysgYi9XZWJDb3JlL1dlYkNvcmUucHJvCkBAIC01OTgsNiArNTk4LDggQEAg
U09VUkNFUyArPSBcCiAgICAgaGlzdG9yeS9xdC9IaXN0b3J5SXRlbVF0LmNwcCBcCiAgICAgaGlz
dG9yeS9QYWdlQ2FjaGUuY3BwIFwKICAgICBodG1sL0Jsb2IuY3BwIFwKKyAgICBodG1sL0Jsb2JC
dWlsZGVyLmNwcCBcCisgICAgaHRtbC9CeXRlU3RvcmUuY3BwIFwKICAgICBodG1sL2NhbnZhcy9D
YW52YXNHcmFkaWVudC5jcHAgXAogICAgIGh0bWwvY2FudmFzL0NhbnZhc1BhdHRlcm4uY3BwIFwK
ICAgICBodG1sL2NhbnZhcy9DYW52YXNQaXhlbEFycmF5LmNwcCBcCkBAIC0xMzAzLDYgKzEzMDUs
OCBAQCBIRUFERVJTICs9IFwKICAgICBoaXN0b3J5L0hpc3RvcnlJdGVtLmggXAogICAgIGhpc3Rv
cnkvUGFnZUNhY2hlLmggXAogICAgIGh0bWwvQmxvYi5oIFwKKyAgICBodG1sL0Jsb2JCdWlsZGVy
LmggXAorICAgIGh0bWwvQnl0ZVN0b3JlLmggXAogICAgIGh0bWwvY2FudmFzL0NhbnZhc0dyYWRp
ZW50LmggXAogICAgIGh0bWwvY2FudmFzL0NhbnZhc1BhdHRlcm4uaCBcCiAgICAgaHRtbC9jYW52
YXMvQ2FudmFzUGl4ZWxBcnJheS5oIFwKZGlmZiAtLWdpdCBhL1dlYkNvcmUvV2ViQ29yZS52Y3By
b2ovV2ViQ29yZS52Y3Byb2ogYi9XZWJDb3JlL1dlYkNvcmUudmNwcm9qL1dlYkNvcmUudmNwcm9q
CmluZGV4IDE2YTdkZmIuLmI2NmNiZjAgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvV2ViQ29yZS52Y3By
b2ovV2ViQ29yZS52Y3Byb2oKKysrIGIvV2ViQ29yZS9XZWJDb3JlLnZjcHJvai9XZWJDb3JlLnZj
cHJvagpAQCAtMzAwODksNiArMzAwODksMjIgQEAKIAkJCQk+DQogCQkJPC9GaWxlPg0KIAkJCTxG
aWxlDQorCQkJCVJlbGF0aXZlUGF0aD0iLi5caHRtbFxCbG9iQnVpbGRlci5jcHAiDQorCQkJCT4N
CisJCQk8L0ZpbGU+DQorCQkJPEZpbGUNCisJCQkJUmVsYXRpdmVQYXRoPSIuLlxodG1sXEJsb2JC
dWlsZGVyLmgiDQorCQkJCT4NCisJCQk8L0ZpbGU+DQorCQkJPEZpbGUNCisJCQkJUmVsYXRpdmVQ
YXRoPSIuLlxodG1sXEJ5dGVTdG9yZS5jcHAiDQorCQkJCT4NCisJCQk8L0ZpbGU+DQorCQkJPEZp
bGUNCisJCQkJUmVsYXRpdmVQYXRoPSIuLlxodG1sXEJ5dGVTdG9yZS5oIg0KKwkJCQk+DQorCQkJ
PC9GaWxlPg0KKwkJCTxGaWxlDQogCQkJCVJlbGF0aXZlUGF0aD0iLi5caHRtbFxjYW52YXNcQ2Fu
dmFzR3JhZGllbnQuY3BwIg0KIAkJCQk+DQogCQkJPC9GaWxlPg0KZGlmZiAtLWdpdCBhL1dlYkNv
cmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qIGIvV2ViQ29yZS9XZWJDb3JlLnhj
b2RlcHJvai9wcm9qZWN0LnBieHByb2oKaW5kZXggNWE4YzkzMC4uNzBlNzc1YSAxMDA2NDQKLS0t
IGEvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKKysrIGIvV2ViQ29y
ZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKQEAgLTIyMDUsNiArMjIwNSwxMCBA
QAogCQk4NUY3NEUwQTBBQThERjhDMDAwREMyODQgLyogRE9NQ1NTVW5rbm93blJ1bGUuaCBpbiBD
b3B5IEdlbmVyYXRlZCBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDg1MDMyREQ1MEFBOEM5QkUwMDdEM0I3RCAvKiBET01DU1NVbmtub3duUnVsZS5oICovOyB9Owog
CQk4NUZGMzE1QTBBQUZCRkNCMDAzNzRGMzggLyogRE9NS2V5Ym9hcmRFdmVudC5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gODVGRjMxNTgwQUFGQkZDQjAw
Mzc0RjM4IC8qIERPTUtleWJvYXJkRXZlbnQuaCAqLzsgfTsKIAkJODVGRjMxNUIwQUFGQkZDQjAw
Mzc0RjM4IC8qIERPTUtleWJvYXJkRXZlbnQubW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSA4NUZGMzE1OTBBQUZCRkNCMDAzNzRGMzggLyogRE9NS2V5Ym9h
cmRFdmVudC5tbSAqLzsgfTsKKwkJODk4QkVEMjAxMTYxOEQzODAwQTZFQTA2IC8qIEJsb2JCdWls
ZGVyLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDg5
OEJFRDFGMTE2MThEMzgwMEE2RUEwNiAvKiBCbG9iQnVpbGRlci5jcHAgKi87IH07CisJCTg5OEJF
RDIyMTE2MThENDIwMEE2RUEwNiAvKiBCbG9iQnVpbGRlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gODk4QkVEMjExMTYxOEQ0MjAwQTZFQTA2IC8qIEJs
b2JCdWlsZGVyLmggKi87IH07CisJCTg5OEJFRDI0MTE2MThENEIwMEE2RUEwNiAvKiBCeXRlU3Rv
cmUuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gODk4
QkVEMjMxMTYxOEQ0QjAwQTZFQTA2IC8qIEJ5dGVTdG9yZS5jcHAgKi87IH07CisJCTg5OEJFRDI2
MTE2MThENTYwMEE2RUEwNiAvKiBCeXRlU3RvcmUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDg5OEJFRDI1MTE2MThENTYwMEE2RUEwNiAvKiBCeXRlU3Rv
cmUuaCAqLzsgfTsKIAkJOTMwMkIwQkQwRDc5RjgyOTAwQzdFRTgzIC8qIFBhZ2VHcm91cC5jcHAg
aW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5MzAyQjBCQzBE
NzlGODI5MDBDN0VFODMgLyogUGFnZUdyb3VwLmNwcCAqLzsgfTsKIAkJOTMwMkIwQkYwRDc5Rjgy
QzAwQzdFRTgzIC8qIFBhZ2VHcm91cC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gOTMwMkIwQkUwRDc5RjgyQzAwQzdFRTgzIC8qIFBhZ2VHcm91cC5oICov
OyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTkzMDVCMjRE
MDk4RjFCNkIwMEMyODg1NSAvKiBUaW1lci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gOTMwNUIyNEMwOThGMUI2QjAwQzI4ODU1IC8qIFRpbWVyLmggKi87
IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKQEAgLTc2NDMsNiAr
NzY0NywxMCBAQAogCQk4NUY1NkE3OTBBOThDRTM3MDBBREI2MEEgLyogRE9NUHJvY2Vzc2luZ0lu
c3RydWN0aW9uLm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IERP
TVByb2Nlc3NpbmdJbnN0cnVjdGlvbi5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
ODVGRjMxNTgwQUFGQkZDQjAwMzc0RjM4IC8qIERPTUtleWJvYXJkRXZlbnQuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IERPTUtleWJvYXJkRXZlbnQuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJODVGRjMxNTkwQUFGQkZDQjAwMzc0RjM4IC8qIERPTUtleWJvYXJk
RXZlbnQubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0gRE9NS2V5
Ym9hcmRFdmVudC5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJODk4QkVEMUYxMTYx
OEQzODAwQTZFQTA2IC8qIEJsb2JCdWlsZGVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3Bw
LmNwcDsgcGF0aCA9IEJsb2JCdWlsZGVyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
KwkJODk4QkVEMjExMTYxOEQ0MjAwQTZFQTA2IC8qIEJsb2JCdWlsZGVyLmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEJsb2JCdWlsZGVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CisJCTg5OEJFRDIzMTE2MThENEIwMEE2RUEwNiAvKiBCeXRlU3RvcmUuY3BwICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gQnl0ZVN0b3JlLmNwcDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKKwkJODk4QkVEMjUxMTYxOEQ1NjAwQTZFQTA2IC8qIEJ5dGVTdG9y
ZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBCeXRlU3RvcmUuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJOTMwMkIwQkMwRDc5RjgyOTAwQzdFRTgzIC8qIFBhZ2VH
cm91cC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBQYWdlR3JvdXAu
Y3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk5MzAyQjBCRTBENzlGODJDMDBDN0VF
ODMgLyogUGFnZUdyb3VwLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFBhZ2VH
cm91cC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk5MzA1QjI0QzA5OEYxQjZCMDBD
Mjg4NTUgLyogVGltZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gVGltZXIu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTEyOTIwLDYgKzEyOTI4LDEwIEBACiAJ
CTkzRUVDMUVDMDlDMjg3NzcwMEM1MTVEMSAvKiBodG1sICovID0gewogCQkJaXNhID0gUEJYR3Jv
dXA7CiAJCQljaGlsZHJlbiA9ICgKKwkJCQk4OThCRUQyNTExNjE4RDU2MDBBNkVBMDYgLyogQnl0
ZVN0b3JlLmggKi8sCisJCQkJODk4QkVEMjMxMTYxOEQ0QjAwQTZFQTA2IC8qIEJ5dGVTdG9yZS5j
cHAgKi8sCisJCQkJODk4QkVEMjExMTYxOEQ0MjAwQTZFQTA2IC8qIEJsb2JCdWlsZGVyLmggKi8s
CisJCQkJODk4QkVEMUYxMTYxOEQzODAwQTZFQTA2IC8qIEJsb2JCdWlsZGVyLmNwcCAqLywKIAkJ
CQlBNDNCRjU5NjExNDkyOTBBMDBDNjQzQ0EgLyogSFRNTFByb2dyZXNzRWxlbWVudC5jcHAgKi8s
CiAJCQkJQTQzQkY1OTcxMTQ5MjkwQTAwQzY0M0NBIC8qIEhUTUxQcm9ncmVzc0VsZW1lbnQuaCAq
LywKIAkJCQk0OTQ4NEZBRTEwMkNGMDFFMDAxODdERDMgLyogY2FudmFzICovLApAQCAtMTg3NjEs
NiArMTg3NzMsOCBAQAogCQkJCUU0Nzc4QjgwMTE1QTU4MUEwMEI1RDM3MiAvKiBKU0N1c3RvbUV2
ZW50LmggaW4gSGVhZGVycyAqLywKIAkJCQlFMUUxQkYwMDExNUZGNkZCMDA2RjUyQ0EgLyogV2lu
ZG93c0tleWJvYXJkQ29kZXMuaCBpbiBIZWFkZXJzICovLAogCQkJCTg0OTlBNTE1MTE1RkIzMzAw
MEY1NjZFMyAvKiBSZW5kZXJTVkdSZXNvdXJjZU1hcmtlci5oIGluIEhlYWRlcnMgKi8sCisJCQkJ
ODk4QkVEMjIxMTYxOEQ0MjAwQTZFQTA2IC8qIEJsb2JCdWlsZGVyLmggaW4gSGVhZGVycyAqLywK
KwkJCQk4OThCRUQyNjExNjE4RDU2MDBBNkVBMDYgLyogQnl0ZVN0b3JlLmggaW4gSGVhZGVycyAq
LywKIAkJCSk7CiAJCQlydW5Pbmx5Rm9yRGVwbG95bWVudFBvc3Rwcm9jZXNzaW5nID0gMDsKIAkJ
fTsKQEAgLTIwOTc0LDYgKzIwOTg4LDggQEAKIAkJCQk2MkNEMzI1OTExNTdFNTdDMDA2M0IwQTcg
LyogQ3VzdG9tRXZlbnQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJRTQ3NzhCN0YxMTVBNTgxQTAw
QjVEMzcyIC8qIEpTQ3VzdG9tRXZlbnQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJODQ5OUE1MTQx
MTVGQjMzMDAwRjU2NkUzIC8qIFJlbmRlclNWR1Jlc291cmNlTWFya2VyLmNwcCBpbiBTb3VyY2Vz
ICovLAorCQkJCTg5OEJFRDIwMTE2MThEMzgwMEE2RUEwNiAvKiBCbG9iQnVpbGRlci5jcHAgaW4g
U291cmNlcyAqLywKKwkJCQk4OThCRUQyNDExNjE4RDRCMDBBNkVBMDYgLyogQnl0ZVN0b3JlLmNw
cCBpbiBTb3VyY2VzICovLAogCQkJKTsKIAkJCXJ1bk9ubHlGb3JEZXBsb3ltZW50UG9zdHByb2Nl
c3NpbmcgPSAwOwogCQl9OwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9odG1sL0Jsb2JCdWlsZGVyLmNw
cCBiL1dlYkNvcmUvaHRtbC9CbG9iQnVpbGRlci5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMDAwMDAwMC4uYzA3NjE4MAotLS0gL2Rldi9udWxsCisrKyBiL1dlYkNvcmUvaHRtbC9CbG9i
QnVpbGRlci5jcHAKQEAgLTAsMCArMSwxMDQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAg
R29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucyBhcmUKKyAqIG1ldDoKKyAqCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICAg
ICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZQorICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lcgorICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogZGlzdHJpYnV0aW9uLgorICogICAgICog
TmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworICog
Y29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBk
ZXJpdmVkIGZyb20KKyAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0
dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUg
Q09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlU
RUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVW
RU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhF
TVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorICog
TElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVk
ZSAiQmxvYkJ1aWxkZXIuaCIKKworI2luY2x1ZGUgIkJsb2IuaCIKKyNpbmNsdWRlICJCeXRlU3Rv
cmUuaCIKKyNpbmNsdWRlICJOb3RJbXBsZW1lbnRlZC5oIgorI2luY2x1ZGUgIlN0cmluZ0hhc2gu
aCIKKyNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcu
aD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitCbG9iQnVpbGRlcjo6QmxvYkJ1aWxkZXIoKQor
ICAgIDogbV9ieXRlU3RvcmUoQnl0ZVN0b3JlOjpjcmVhdGUoKSkKKyAgICAsIG1fZW5kaW5ncyhF
TkRJTkdfVFJBTlNQQVJFTlQpCit7Cit9CisKK0Jsb2JCdWlsZGVyOjp+QmxvYkJ1aWxkZXIoKQor
eworfQorCitib29sIEJsb2JCdWlsZGVyOjphcHBlbmRTdHJpbmcoY29uc3QgU3RyaW5nJiB0ZXh0
LCBFeGNlcHRpb25Db2RlJikKK3sKKyAgICAvLyBGSVhNRSBoYW5kbGUgZW5kaW5ncyBjb252ZXJz
aW9uLgorICAgIHJldHVybiBtX2J5dGVTdG9yZS0+YXBwZW5kKHRleHQudXRmOCgpLmRhdGEoKSwg
dGV4dC51dGY4KCkubGVuZ3RoKCkpOworfQorCitib29sIEJsb2JCdWlsZGVyOjphcHBlbmRCbG9i
KFBhc3NSZWZQdHI8QmxvYj4pCit7CisgICAgLy8gRklYTUUKKyAgICBub3RJbXBsZW1lbnRlZCgp
OworICAgIHJldHVybiBmYWxzZTsKK30KKworUGFzc1JlZlB0cjxCbG9iPiBCbG9iQnVpbGRlcjo6
Z2V0QmxvYigpIGNvbnN0Cit7CisgICAgLy8gRklYTUUKKyAgICBub3RJbXBsZW1lbnRlZCgpOwor
ICAgIHJldHVybiAwOworfQorCit0eXBlZGVmIEhhc2hNYXA8U3RyaW5nLCBCbG9iQnVpbGRlcjo6
RW5kaW5nc1R5cGUsIENhc2VGb2xkaW5nSGFzaD4gRW5kaW5nc1R5cGVNYXA7CitzdGF0aWMgY29u
c3QgRW5kaW5nc1R5cGVNYXAqIGNyZWF0ZUVuZGluZ3NUeXBlTWFwKCkKK3sKKyAgICBFbmRpbmdz
VHlwZU1hcCogbWFwID0gbmV3IEVuZGluZ3NUeXBlTWFwOworICAgIG1hcC0+YWRkKCJ0cmFuc3Bh
cmVudCIsIEJsb2JCdWlsZGVyOjpFTkRJTkdfVFJBTlNQQVJFTlQpOworICAgIG1hcC0+YWRkKCJu
YXRpdmUiLCBCbG9iQnVpbGRlcjo6RU5ESU5HX05BVElWRSk7CisgICAgbWFwLT5hZGQoImxmIiwg
QmxvYkJ1aWxkZXI6OkVORElOR19MRik7CisgICAgbWFwLT5hZGQoImNyIiwgQmxvYkJ1aWxkZXI6
OkVORElOR19DUik7CisgICAgbWFwLT5hZGQoImNybGYiLCBCbG9iQnVpbGRlcjo6RU5ESU5HX0NS
TEYpOworICAgIHJldHVybiBtYXA7Cit9CisKK3ZvaWQgQmxvYkJ1aWxkZXI6OnNldEVuZGluZ3Mo
Y29uc3QgU3RyaW5nJiB0eXBlKQoreworICAgIHN0YXRpYyBjb25zdCBFbmRpbmdzVHlwZU1hcCog
dHlwZU1hcCA9IGNyZWF0ZUVuZGluZ3NUeXBlTWFwKCk7CisgICAgbV9lbmRpbmdzID0gdHlwZS5p
c051bGwoKSA/IEVORElOR19UUkFOU1BBUkVOVCA6IHR5cGVNYXAtPmdldCh0eXBlKTsKK30KKwor
U3RyaW5nIEJsb2JCdWlsZGVyOjplbmRpbmdzKCkgY29uc3QKK3sKKyAgICBzd2l0Y2ggKG1fZW5k
aW5ncykgeworICAgIGNhc2UgRU5ESU5HX1RSQU5TUEFSRU5UOiByZXR1cm4gInRyYW5zcGFyZW50
IjsKKyAgICBjYXNlIEVORElOR19OQVRJVkU6IHJldHVybiAibmF0aXZlIjsKKyAgICBjYXNlIEVO
RElOR19MRjogcmV0dXJuICJsZiI7CisgICAgY2FzZSBFTkRJTkdfQ1I6IHJldHVybiAiY3IiOwor
ICAgIGNhc2UgRU5ESU5HX0NSTEY6IHJldHVybiAiY3JsZiI7CisgICAgfQorICAgIEFTU0VSVF9O
T1RfUkVBQ0hFRCgpOworICAgIHJldHVybiAidHJhbnNwYXJlbnQiOworfQorCit9IC8vIG5hbWVz
cGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9XZWJDb3JlL2h0bWwvQmxvYkJ1aWxkZXIuaCBiL1dl
YkNvcmUvaHRtbC9CbG9iQnVpbGRlci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw
MDAuLmExNTFkNzYKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJDb3JlL2h0bWwvQmxvYkJ1aWxkZXIu
aApAQCAtMCwwICsxLDc4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEwIEdvb2dsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJl
CisgKiBtZXQ6CisgKgorICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAgICAqIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqIGNvcHly
aWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIKKyAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUKKyAqIGRpc3RyaWJ1dGlvbi4KKyAqICAgICAqIE5laXRoZXIgdGhl
IG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAqIGNvbnRyaWJ1dG9y
cyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9t
CisgKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNz
aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBI
T0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUg
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAq
IEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBU
SEUgQ09QWVJJR0hUCisgKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1Ig
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8s
IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LAorICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBCbG9iQnVpbGRlcl9oCisjZGVmaW5lIEJsb2JCdWls
ZGVyX2gKKworI2luY2x1ZGUgIkV4Y2VwdGlvbkNvZGUuaCIKKyNpbmNsdWRlICJQbGF0Zm9ybVN0
cmluZy5oIgorI2luY2x1ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+CisjaW5jbHVkZSA8d3RmL1JlZkNv
dW50ZWQuaD4KKyNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsK
KworY2xhc3MgQmxvYjsKK2NsYXNzIEJ5dGVTdG9yZTsKK2NsYXNzIEJsb2JCdWlsZGVyIDogcHVi
bGljIFJlZkNvdW50ZWQ8QmxvYkJ1aWxkZXI+IHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgUGFzc1Jl
ZlB0cjxCbG9iQnVpbGRlcj4gY3JlYXRlKCkgeyByZXR1cm4gYWRvcHRSZWYobmV3IEJsb2JCdWls
ZGVyKCkpOyB9CisgICAgdmlydHVhbCB+QmxvYkJ1aWxkZXIoKTsKKworICAgIC8vIEFwcGVuZHMg
c3RyaW5nLiAgUmV0dXJucyBmYWxzZSBpZiB0aGUgZGF0YSBjb3VsZCBub3QgYmUgYWRkZWQuCisg
ICAgYm9vbCBhcHBlbmRTdHJpbmcoY29uc3QgU3RyaW5nJiB0ZXh0LCBFeGNlcHRpb25Db2RlJik7
CisKKyAgICAvLyBBcHBlbmRzIGJsb2IuICBSZXR1cm5zIGZhbHNlIGlmIHRoZSBkYXRhIGNvdWxk
IG5vdCBiZSBhZGRlZC4KKyAgICBib29sIGFwcGVuZEJsb2IoUGFzc1JlZlB0cjxCbG9iPiBibG9i
KTsKKworICAgIFBhc3NSZWZQdHI8QmxvYj4gZ2V0QmxvYigpIGNvbnN0OworCisgICAgZW51bSBF
bmRpbmdzVHlwZSB7CisgICAgICAgIEVORElOR19UUkFOU1BBUkVOVCA9IDAsCisgICAgICAgIEVO
RElOR19OQVRJVkUsCisgICAgICAgIEVORElOR19MRiwKKyAgICAgICAgRU5ESU5HX0NSLAorICAg
ICAgICBFTkRJTkdfQ1JMRiwKKyAgICB9OworICAgIHZvaWQgc2V0RW5kaW5ncyhjb25zdCBTdHJp
bmcmKTsKKyAgICBTdHJpbmcgZW5kaW5ncygpIGNvbnN0OworICAgIHN0YXRpYyBjb25zdCBjaGFy
KiBnZXRFbmRpbmdDaGFycyhFbmRpbmdzVHlwZSk7CisKK3ByaXZhdGU6CisgICAgQmxvYkJ1aWxk
ZXIoKTsKKworICAgIFJlZlB0cjxCeXRlU3RvcmU+IG1fYnl0ZVN0b3JlOworCisgICAgRW5kaW5n
c1R5cGUgbV9lbmRpbmdzOworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYg
Ly8gQmxvYkJ1aWxkZXJfaApkaWZmIC0tZ2l0IGEvV2ViQ29yZS9odG1sL0J5dGVTdG9yZS5jcHAg
Yi9XZWJDb3JlL2h0bWwvQnl0ZVN0b3JlLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw
MDAwMDAwLi4xM2IwZmJiCi0tLSAvZGV2L251bGwKKysrIGIvV2ViQ29yZS9odG1sL0J5dGVTdG9y
ZS5jcHAKQEAgLTAsMCArMSw4MiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMCBHb29nbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
IGFyZQorICogbWV0OgorICoKKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgICAgKiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiBj
b3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyCisgKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiBkaXN0cmlidXRpb24uCisgKiAgICAgKiBOZWl0aGVy
IHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisgKiBjb250cmli
dXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQg
ZnJvbQorICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVy
bWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklH
SFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywg
VEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
CisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hB
TEwgVEhFIENPUFlSSUdIVAorICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlks
IE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVE
IFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisg
KiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKworI2luY2x1ZGUgIkJ5
dGVTdG9yZS5oIgorCisjaW5jbHVkZSA8bGltaXRzPgorCisjaW5jbHVkZSA8d3RmL0Zhc3RNYWxs
b2MuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitCeXRlU3RvcmU6OkJ5dGVTdG9yZSgpCisg
ICAgOiBtX2J1ZmZlcigwKQorICAgICwgbV9idWZmZXJTaXplKDApCit7Cit9CisKK0J5dGVTdG9y
ZTo6fkJ5dGVTdG9yZSgpCit7CisgICAgZmFzdEZyZWUobV9idWZmZXIpOworfQorCitib29sIEJ5
dGVTdG9yZTo6YXBwZW5kKGNvbnN0IGNoYXIqIGluLCBzaXplX3QgbGVuZ3RoKQoreworICAgIE11
dGV4TG9ja2VyIGxvY2sobV9sb2NrKTsKKyAgICBjaGFyKiBuZXdCdWZmZXIgPSAwOworICAgIHNp
emVfdCBuZXdTaXplID0gbV9idWZmZXJTaXplICsgbGVuZ3RoOworICAgIGlmICh0cnlGYXN0TWFs
bG9jKG5ld1NpemUpLmdldFZhbHVlKG5ld0J1ZmZlcikpIHsKKyAgICAgICAgaWYgKG1fYnVmZmVy
KQorICAgICAgICAgICAgbWVtY3B5KG5ld0J1ZmZlciwgbV9idWZmZXIsIG1fYnVmZmVyU2l6ZSk7
CisgICAgICAgIG1lbWNweShuZXdCdWZmZXIgKyBtX2J1ZmZlclNpemUsIGluLCBsZW5ndGgpOwor
ICAgICAgICBmYXN0RnJlZShtX2J1ZmZlcik7CisgICAgICAgIG1fYnVmZmVyID0gbmV3QnVmZmVy
OworICAgICAgICBtX2J1ZmZlclNpemUgKz0gbGVuZ3RoOworICAgICAgICByZXR1cm4gdHJ1ZTsK
KyAgICB9CisgICAgcmV0dXJuIGZhbHNlOworfQorCitpbnQ2NF90IEJ5dGVTdG9yZTo6cmVhZChj
aGFyKiBvdXQsIHNpemVfdCBvZmZzZXQsIHNpemVfdCBtYXhMZW5ndGgpIGNvbnN0Cit7CisgICAg
aWYgKCFtYXhMZW5ndGgpCisgICAgICAgIHJldHVybiAwOworICAgIE11dGV4TG9ja2VyIGxvY2so
bV9sb2NrKTsKKyAgICBpZiAob2Zmc2V0ID49IG1fYnVmZmVyU2l6ZSkKKyAgICAgICAgcmV0dXJu
IDA7CisgICAgaWYgKG9mZnNldCArIG1heExlbmd0aCA+IG1fYnVmZmVyU2l6ZSkKKyAgICAgICAg
bWF4TGVuZ3RoID0gbV9idWZmZXJTaXplIC0gb2Zmc2V0OworICAgIG1lbWNweShvdXQsICZtX2J1
ZmZlcltvZmZzZXRdLCBtYXhMZW5ndGgpOworICAgIHJldHVybiBtYXhMZW5ndGg7Cit9CisKK30g
Ly8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1dlYkNvcmUvaHRtbC9CeXRlU3RvcmUu
aCBiL1dlYkNvcmUvaHRtbC9CeXRlU3RvcmUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw
MDAwMDAwLi5jMWE5OWNmCi0tLSAvZGV2L251bGwKKysrIGIvV2ViQ29yZS9odG1sL0J5dGVTdG9y
ZS5oCkBAIC0wLDAgKzEsNjMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgR29vZ2xlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBh
cmUKKyAqIG1ldDoKKyAqCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICAgICogUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogY29w
eXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lcgorICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZQorICogZGlzdHJpYnV0aW9uLgorICogICAgICogTmVpdGhlciB0
aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworICogY29udHJpYnV0
b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZy
b20KKyAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1p
c3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hU
IEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRI
RSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgor
ICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxM
IFRIRSBDT1BZUklHSFQKKyAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBP
UiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBU
TywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICog
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIEJ5dGVTdG9yZV9oCisjZGVmaW5lIEJ5dGVTdG9y
ZV9oCisKKyNpbmNsdWRlIDx3dGYvUGFzc1JlZlB0ci5oPgorI2luY2x1ZGUgPHd0Zi9UaHJlYWRp
bmcuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBCeXRlU3RvcmUgOiBwdWJsaWMg
VGhyZWFkU2FmZVNoYXJlZDxCeXRlU3RvcmU+IHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgUGFzc1Jl
ZlB0cjxCeXRlU3RvcmU+IGNyZWF0ZSgpIHsgcmV0dXJuIGFkb3B0UmVmKG5ldyBCeXRlU3RvcmUo
KSk7IH0KKyAgICB2aXJ0dWFsIH5CeXRlU3RvcmUoKTsKKworICAgIGludDY0X3Qgc2l6ZSgpIGNv
bnN0IHsgcmV0dXJuIG1fYnVmZmVyU2l6ZTsgfQorICAgIGJvb2wgZW1wdHkoKSBjb25zdCB7IHJl
dHVybiAhc2l6ZSgpOyB9CisKKyAgICAvLyBSZWFkcyB0aGUgZGF0YSBpbnRvIHxvdXR8IGF0IG1v
c3QgfG1heExlbmd0aHwgYnl0ZXMuCisgICAgaW50NjRfdCByZWFkKGNoYXIqIG91dCwgc2l6ZV90
IG9mZnNldCwgc2l6ZV90IG1heExlbmd0aCkgY29uc3Q7CisKKyAgICAvLyBBcHBlbmRzIHJhdyBk
YXRhIHxpbnwuICBSZXR1cm5zIGZhbHNlIGlmIHRoZSBkYXRhIGNvdWxkIG5vdCBiZSBhZGRlZC4K
KyAgICBib29sIGFwcGVuZChjb25zdCBjaGFyKiBpbiwgc2l6ZV90IGxlbmd0aCk7CisKK3ByaXZh
dGU6CisgICAgQnl0ZVN0b3JlKCk7CisKKyAgICBjaGFyKiBtX2J1ZmZlcjsKKyAgICBzaXplX3Qg
bV9idWZmZXJTaXplOworICAgIG11dGFibGUgTXV0ZXggbV9sb2NrOworfTsKKworfSAvLyBuYW1l
c3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gQnl0ZVN0b3JlX2gK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>52227</attachid>
            <date>2010-03-31 17:03:26 -0700</date>
            <delta_ts>2010-04-02 11:43:09 -0700</delta_ts>
            <desc>Patch (rebased)</desc>
            <filename>bug-36903-20100331170325.patch</filename>
            <type>text/plain</type>
            <size>21125</size>
            <attacher name="Kinuko Yasuda">kinuko</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYkNvcmUvQ2hhbmdlTG9nIGIvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXgg
ZjM3ZTZmMy4uZjRmNjEwYiAxMDA2NDQKLS0tIGEvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvV2Vi
Q29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSw0MyBAQAorMjAxMC0wMy0zMSAgS2ludWtvIFlhc3Vk
YSAgPGtpbnVrb0BjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChP
T1BTISkuCisKKyAgICAgICAgSW1wbGVtZW50IGludGVybmFsIEJsb2JCdWlsZGVyIGNsYXNzIGZv
ciBCbG9iQnVpbGRlciBpbnRlcmZhY2UKKyAgICAgICAgc3VwcG9ydCBhcyBkZWZpbmVkIGluIEZp
bGVXcml0ZXIuCisgICAgICAgIFRoZSBwYXRjaCBhbHNvIGFkZHMgYSBoZWxwZXIgY2xhc3MgZm9y
IGl0LCBjYWxsZWQgQnl0ZVN0b3JlLgorICAgICAgICBTb21lIG1ldGhvZHMgYXJlIGp1c3QgcGxh
Y2UgaG9sZGVycyBhbmQgbm90IGltcGxlbWVudGVkIHlldC4KKyAgICAgICAgRmlsZVdyaXRlciBz
cGVjOiBodHRwOi8vZGV2LnczLm9yZy8yMDA5L2RhcC9maWxlLXN5c3RlbS9maWxlLXdyaXRlci5o
dG1sCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0zNjkw
MworCisgICAgICAgIE5vIG5ldyB0ZXN0cyB5ZXQuICBJIHdpbGwgYWRkIHRlc3RzIHdoZW4gSSBh
ZGQganNjIGJpbmRpbmdzIGZvciBpdC4KKworICAgICAgICAqIEdOVW1ha2VmaWxlLmFtOgorICAg
ICAgICAqIFdlYkNvcmUuZ3lwaToKKyAgICAgICAgKiBXZWJDb3JlLnBybzoKKyAgICAgICAgKiBX
ZWJDb3JlLnZjcHJvai9XZWJDb3JlLnZjcHJvajoKKyAgICAgICAgKiBXZWJDb3JlLnhjb2RlcHJv
ai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICogaHRtbC9CbG9iQnVpbGRlci5jcHA6IEFkZGVk
LgorICAgICAgICAoV2ViQ29yZTo6QmxvYkJ1aWxkZXI6OkJsb2JCdWlsZGVyKToKKyAgICAgICAg
KFdlYkNvcmU6OkJsb2JCdWlsZGVyOjp+QmxvYkJ1aWxkZXIpOgorICAgICAgICAoV2ViQ29yZTo6
QmxvYkJ1aWxkZXI6OmFwcGVuZFN0cmluZyk6CisgICAgICAgIChXZWJDb3JlOjpCbG9iQnVpbGRl
cjo6YXBwZW5kQmxvYik6CisgICAgICAgIChXZWJDb3JlOjpCbG9iQnVpbGRlcjo6Z2V0QmxvYik6
CisgICAgICAgIChXZWJDb3JlOjpjcmVhdGVFbmRpbmdzVHlwZU1hcCk6CisgICAgICAgIChXZWJD
b3JlOjpCbG9iQnVpbGRlcjo6c2V0RW5kaW5ncyk6CisgICAgICAgIChXZWJDb3JlOjpCbG9iQnVp
bGRlcjo6ZW5kaW5ncyk6CisgICAgICAgICogaHRtbC9CbG9iQnVpbGRlci5oOiBBZGRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OkJsb2JCdWlsZGVyOjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6
QmxvYkJ1aWxkZXI6Oik6CisgICAgICAgICogaHRtbC9CeXRlU3RvcmUuY3BwOiBBZGRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OkJ5dGVTdG9yZTo6Qnl0ZVN0b3JlKToKKyAgICAgICAgKFdlYkNvcmU6
OkJ5dGVTdG9yZTo6fkJ5dGVTdG9yZSk6CisgICAgICAgIChXZWJDb3JlOjpCeXRlU3RvcmU6OmFw
cGVuZCk6CisgICAgICAgIChXZWJDb3JlOjpCeXRlU3RvcmU6OnJlYWQpOgorICAgICAgICAqIGh0
bWwvQnl0ZVN0b3JlLmg6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6Qnl0ZVN0b3JlOjpjcmVh
dGUpOgorICAgICAgICAoV2ViQ29yZTo6Qnl0ZVN0b3JlOjpzaXplKToKKyAgICAgICAgKFdlYkNv
cmU6OkJ5dGVTdG9yZTo6ZW1wdHkpOgorCiAyMDEwLTAzLTMxICBaaGVueWFvIE1vICA8em1vQGdv
b2dsZS5jb20+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgRGFyaW4gRmlzaGVyLgpkaWZmIC0tZ2l0
IGEvV2ViQ29yZS9HTlVtYWtlZmlsZS5hbSBiL1dlYkNvcmUvR05VbWFrZWZpbGUuYW0KaW5kZXgg
Yjc3MTg2Mi4uNTlmNzEyZCAxMDA2NDQKLS0tIGEvV2ViQ29yZS9HTlVtYWtlZmlsZS5hbQorKysg
Yi9XZWJDb3JlL0dOVW1ha2VmaWxlLmFtCkBAIC05OTAsNiArOTkwLDEwIEBAIHdlYmNvcmVfc291
cmNlcyArPSBcCiAJV2ViQ29yZS9oaXN0b3J5L1BhZ2VDYWNoZS5oIFwKIAlXZWJDb3JlL2h0bWwv
QmxvYi5jcHAgXAogCVdlYkNvcmUvaHRtbC9CbG9iLmggXAorCVdlYkNvcmUvaHRtbC9CbG9iQnVp
bGRlci5jcHAgXAorCVdlYkNvcmUvaHRtbC9CbG9iQnVpbGRlci5oIFwKKwlXZWJDb3JlL2h0bWwv
Qnl0ZVN0b3JlLmNwcCBcCisJV2ViQ29yZS9odG1sL0J5dGVTdG9yZS5oIFwKIAlXZWJDb3JlL2h0
bWwvY2FudmFzL0NhbnZhc0NvbnRleHRBdHRyaWJ1dGVzLmggXAogCVdlYkNvcmUvaHRtbC9jYW52
YXMvQ2FudmFzR3JhZGllbnQuY3BwIFwKIAlXZWJDb3JlL2h0bWwvY2FudmFzL0NhbnZhc0dyYWRp
ZW50LmggXApkaWZmIC0tZ2l0IGEvV2ViQ29yZS9XZWJDb3JlLmd5cGkgYi9XZWJDb3JlL1dlYkNv
cmUuZ3lwaQppbmRleCAyMTRjN2YwLi42YTA5N2EwIDEwMDY0NAotLS0gYS9XZWJDb3JlL1dlYkNv
cmUuZ3lwaQorKysgYi9XZWJDb3JlL1dlYkNvcmUuZ3lwaQpAQCAtMTM1NSw2ICsxMzU1LDEwIEBA
CiAgICAgICAgICAgICAnaGlzdG9yeS9QYWdlQ2FjaGUuaCcsCiAgICAgICAgICAgICAnaHRtbC9C
bG9iLmNwcCcsCiAgICAgICAgICAgICAnaHRtbC9CbG9iLmgnLAorICAgICAgICAgICAgJ2h0bWwv
QmxvYkJ1aWxkZXIuY3BwJywKKyAgICAgICAgICAgICdodG1sL0Jsb2JCdWlsZGVyLmgnLAorICAg
ICAgICAgICAgJ2h0bWwvQnl0ZVN0b3JlLmNwcCcsCisgICAgICAgICAgICAnaHRtbC9CeXRlU3Rv
cmUuaCcsCiAgICAgICAgICAgICAnaHRtbC9jYW52YXMvV2ViR0xBcnJheS5jcHAnLAogICAgICAg
ICAgICAgJ2h0bWwvY2FudmFzL1dlYkdMQXJyYXkuaCcsCiAgICAgICAgICAgICAnaHRtbC9jYW52
YXMvV2ViR0xBcnJheUJ1ZmZlci5jcHAnLApkaWZmIC0tZ2l0IGEvV2ViQ29yZS9XZWJDb3JlLnBy
byBiL1dlYkNvcmUvV2ViQ29yZS5wcm8KaW5kZXggNzMwMzM3MC4uNDIzNjVmZSAxMDA2NDQKLS0t
IGEvV2ViQ29yZS9XZWJDb3JlLnBybworKysgYi9XZWJDb3JlL1dlYkNvcmUucHJvCkBAIC01OTgs
NiArNTk4LDggQEAgU09VUkNFUyArPSBcCiAgICAgaGlzdG9yeS9xdC9IaXN0b3J5SXRlbVF0LmNw
cCBcCiAgICAgaGlzdG9yeS9QYWdlQ2FjaGUuY3BwIFwKICAgICBodG1sL0Jsb2IuY3BwIFwKKyAg
ICBodG1sL0Jsb2JCdWlsZGVyLmNwcCBcCisgICAgaHRtbC9CeXRlU3RvcmUuY3BwIFwKICAgICBo
dG1sL2NhbnZhcy9DYW52YXNHcmFkaWVudC5jcHAgXAogICAgIGh0bWwvY2FudmFzL0NhbnZhc1Bh
dHRlcm4uY3BwIFwKICAgICBodG1sL2NhbnZhcy9DYW52YXNQaXhlbEFycmF5LmNwcCBcCkBAIC0x
MzA0LDYgKzEzMDYsOCBAQCBIRUFERVJTICs9IFwKICAgICBoaXN0b3J5L0hpc3RvcnlJdGVtLmgg
XAogICAgIGhpc3RvcnkvUGFnZUNhY2hlLmggXAogICAgIGh0bWwvQmxvYi5oIFwKKyAgICBodG1s
L0Jsb2JCdWlsZGVyLmggXAorICAgIGh0bWwvQnl0ZVN0b3JlLmggXAogICAgIGh0bWwvY2FudmFz
L0NhbnZhc0dyYWRpZW50LmggXAogICAgIGh0bWwvY2FudmFzL0NhbnZhc1BhdHRlcm4uaCBcCiAg
ICAgaHRtbC9jYW52YXMvQ2FudmFzUGl4ZWxBcnJheS5oIFwKZGlmZiAtLWdpdCBhL1dlYkNvcmUv
V2ViQ29yZS52Y3Byb2ovV2ViQ29yZS52Y3Byb2ogYi9XZWJDb3JlL1dlYkNvcmUudmNwcm9qL1dl
YkNvcmUudmNwcm9qCmluZGV4IDdmODk4NjguLjBjNWFlZGMgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUv
V2ViQ29yZS52Y3Byb2ovV2ViQ29yZS52Y3Byb2oKKysrIGIvV2ViQ29yZS9XZWJDb3JlLnZjcHJv
ai9XZWJDb3JlLnZjcHJvagpAQCAtMzAwOTcsNiArMzAwOTcsMjIgQEAKIAkJCQk+DQogCQkJPC9G
aWxlPg0KIAkJCTxGaWxlDQorCQkJCVJlbGF0aXZlUGF0aD0iLi5caHRtbFxCbG9iQnVpbGRlci5j
cHAiDQorCQkJCT4NCisJCQk8L0ZpbGU+DQorCQkJPEZpbGUNCisJCQkJUmVsYXRpdmVQYXRoPSIu
LlxodG1sXEJsb2JCdWlsZGVyLmgiDQorCQkJCT4NCisJCQk8L0ZpbGU+DQorCQkJPEZpbGUNCisJ
CQkJUmVsYXRpdmVQYXRoPSIuLlxodG1sXEJ5dGVTdG9yZS5jcHAiDQorCQkJCT4NCisJCQk8L0Zp
bGU+DQorCQkJPEZpbGUNCisJCQkJUmVsYXRpdmVQYXRoPSIuLlxodG1sXEJ5dGVTdG9yZS5oIg0K
KwkJCQk+DQorCQkJPC9GaWxlPg0KKwkJCTxGaWxlDQogCQkJCVJlbGF0aXZlUGF0aD0iLi5caHRt
bFxjYW52YXNcQ2FudmFzR3JhZGllbnQuY3BwIg0KIAkJCQk+DQogCQkJPC9GaWxlPg0KZGlmZiAt
LWdpdCBhL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qIGIvV2ViQ29y
ZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKaW5kZXggNDQ5MTBmYy4uNzg5OWJj
YyAxMDA2NDQKLS0tIGEvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oK
KysrIGIvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKQEAgLTIyMDcs
NiArMjIwNywxMCBAQAogCQk4NUY3NEUwQTBBQThERjhDMDAwREMyODQgLyogRE9NQ1NTVW5rbm93
blJ1bGUuaCBpbiBDb3B5IEdlbmVyYXRlZCBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDg1MDMyREQ1MEFBOEM5QkUwMDdEM0I3RCAvKiBET01DU1NVbmtub3duUnVs
ZS5oICovOyB9OwogCQk4NUZGMzE1QTBBQUZCRkNCMDAzNzRGMzggLyogRE9NS2V5Ym9hcmRFdmVu
dC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gODVGRjMx
NTgwQUFGQkZDQjAwMzc0RjM4IC8qIERPTUtleWJvYXJkRXZlbnQuaCAqLzsgfTsKIAkJODVGRjMx
NUIwQUFGQkZDQjAwMzc0RjM4IC8qIERPTUtleWJvYXJkRXZlbnQubW0gaW4gU291cmNlcyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA4NUZGMzE1OTBBQUZCRkNCMDAzNzRGMzgg
LyogRE9NS2V5Ym9hcmRFdmVudC5tbSAqLzsgfTsKKwkJODlFNDhFREExMTY0MTlENTAwMDVCNzk1
IC8qIEJsb2JCdWlsZGVyLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDg5RTQ4RUQ2MTE2NDE5RDUwMDA1Qjc5NSAvKiBCbG9iQnVpbGRlci5jcHAgKi87
IH07CisJCTg5RTQ4RURCMTE2NDE5RDUwMDA1Qjc5NSAvKiBCbG9iQnVpbGRlci5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gODlFNDhFRDcxMTY0MTlENTAw
MDVCNzk1IC8qIEJsb2JCdWlsZGVyLmggKi87IH07CisJCTg5RTQ4RURDMTE2NDE5RDUwMDA1Qjc5
NSAvKiBCeXRlU3RvcmUuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gODlFNDhFRDgxMTY0MTlENTAwMDVCNzk1IC8qIEJ5dGVTdG9yZS5jcHAgKi87IH07
CisJCTg5RTQ4RUREMTE2NDE5RDUwMDA1Qjc5NSAvKiBCeXRlU3RvcmUuaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDg5RTQ4RUQ5MTE2NDE5RDUwMDA1Qjc5
NSAvKiBCeXRlU3RvcmUuaCAqLzsgfTsKIAkJOTMwMkIwQkQwRDc5RjgyOTAwQzdFRTgzIC8qIFBh
Z2VHcm91cC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSA5MzAyQjBCQzBENzlGODI5MDBDN0VFODMgLyogUGFnZUdyb3VwLmNwcCAqLzsgfTsKIAkJOTMw
MkIwQkYwRDc5RjgyQzAwQzdFRTgzIC8qIFBhZ2VHcm91cC5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOTMwMkIwQkUwRDc5RjgyQzAwQzdFRTgzIC8qIFBh
Z2VHcm91cC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07
CiAJCTkzMDVCMjREMDk4RjFCNkIwMEMyODg1NSAvKiBUaW1lci5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOTMwNUIyNEMwOThGMUI2QjAwQzI4ODU1IC8q
IFRpbWVyLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsK
QEAgLTc2NDcsNiArNzY1MSwxMCBAQAogCQk4NUY1NkE3OTBBOThDRTM3MDBBREI2MEEgLyogRE9N
UHJvY2Vzc2luZ0luc3RydWN0aW9uLm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNw
cDsgcGF0aCA9IERPTVByb2Nlc3NpbmdJbnN0cnVjdGlvbi5tbTsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJODVGRjMxNTgwQUFGQkZDQjAwMzc0RjM4IC8qIERPTUtleWJvYXJkRXZlbnQu
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IERPTUtleWJvYXJkRXZlbnQuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJODVGRjMxNTkwQUFGQkZDQjAwMzc0RjM4IC8q
IERPTUtleWJvYXJkRXZlbnQubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBw
YXRoID0gRE9NS2V5Ym9hcmRFdmVudC5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJ
ODlFNDhFRDYxMTY0MTlENTAwMDVCNzk1IC8qIEJsb2JCdWlsZGVyLmNwcCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEJsb2JCdWlsZGVyLmNwcDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKKwkJODlFNDhFRDcxMTY0MTlENTAwMDVCNzk1IC8qIEJsb2JCdWlsZGVyLmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEJsb2JCdWlsZGVyLmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CisJCTg5RTQ4RUQ4MTE2NDE5RDUwMDA1Qjc5NSAvKiBCeXRlU3Rv
cmUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gQnl0ZVN0b3JlLmNw
cDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJODlFNDhFRDkxMTY0MTlENTAwMDVCNzk1
IC8qIEJ5dGVTdG9yZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBCeXRlU3Rv
cmUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJOTMwMkIwQkMwRDc5RjgyOTAwQzdF
RTgzIC8qIFBhZ2VHcm91cC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGgg
PSBQYWdlR3JvdXAuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk5MzAyQjBCRTBE
NzlGODJDMDBDN0VFODMgLyogUGFnZUdyb3VwLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
cGF0aCA9IFBhZ2VHcm91cC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk5MzA1QjI0
QzA5OEYxQjZCMDBDMjg4NTUgLyogVGltZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBw
YXRoID0gVGltZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTEyOTI0LDYgKzEy
OTMyLDEwIEBACiAJCTkzRUVDMUVDMDlDMjg3NzcwMEM1MTVEMSAvKiBodG1sICovID0gewogCQkJ
aXNhID0gUEJYR3JvdXA7CiAJCQljaGlsZHJlbiA9ICgKKwkJCQk4OUU0OEVENjExNjQxOUQ1MDAw
NUI3OTUgLyogQmxvYkJ1aWxkZXIuY3BwICovLAorCQkJCTg5RTQ4RUQ3MTE2NDE5RDUwMDA1Qjc5
NSAvKiBCbG9iQnVpbGRlci5oICovLAorCQkJCTg5RTQ4RUQ4MTE2NDE5RDUwMDA1Qjc5NSAvKiBC
eXRlU3RvcmUuY3BwICovLAorCQkJCTg5RTQ4RUQ5MTE2NDE5RDUwMDA1Qjc5NSAvKiBCeXRlU3Rv
cmUuaCAqLywKIAkJCQlBNDNCRjU5NjExNDkyOTBBMDBDNjQzQ0EgLyogSFRNTFByb2dyZXNzRWxl
bWVudC5jcHAgKi8sCiAJCQkJQTQzQkY1OTcxMTQ5MjkwQTAwQzY0M0NBIC8qIEhUTUxQcm9ncmVz
c0VsZW1lbnQuaCAqLywKIAkJCQk0OTQ4NEZBRTEwMkNGMDFFMDAxODdERDMgLyogY2FudmFzICov
LApAQCAtMTg3NjgsNiArMTg3ODAsOCBAQAogCQkJCUUxRTFCRjAwMTE1RkY2RkIwMDZGNTJDQSAv
KiBXaW5kb3dzS2V5Ym9hcmRDb2Rlcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJODQ5OUE1MTUxMTVG
QjMzMDAwRjU2NkUzIC8qIFJlbmRlclNWR1Jlc291cmNlTWFya2VyLmggaW4gSGVhZGVycyAqLywK
IAkJCQkyRTNCQkYwODExNjJEQTExMDBCOTQwOUEgLyogVVVJRC5oIGluIEhlYWRlcnMgKi8sCisJ
CQkJODlFNDhFREIxMTY0MTlENTAwMDVCNzk1IC8qIEJsb2JCdWlsZGVyLmggaW4gSGVhZGVycyAq
LywKKwkJCQk4OUU0OEVERDExNjQxOUQ1MDAwNUI3OTUgLyogQnl0ZVN0b3JlLmggaW4gSGVhZGVy
cyAqLywKIAkJCSk7CiAJCQlydW5Pbmx5Rm9yRGVwbG95bWVudFBvc3Rwcm9jZXNzaW5nID0gMDsK
IAkJfTsKQEAgLTIwOTgyLDYgKzIwOTk2LDggQEAKIAkJCQlFNDc3OEI3RjExNUE1ODFBMDBCNUQz
NzIgLyogSlNDdXN0b21FdmVudC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk4NDk5QTUxNDExNUZC
MzMwMDBGNTY2RTMgLyogUmVuZGVyU1ZHUmVzb3VyY2VNYXJrZXIuY3BwIGluIFNvdXJjZXMgKi8s
CiAJCQkJMkUzQkJGMDcxMTYyREExMTAwQjk0MDlBIC8qIFVVSUQuY3BwIGluIFNvdXJjZXMgKi8s
CisJCQkJODlFNDhFREExMTY0MTlENTAwMDVCNzk1IC8qIEJsb2JCdWlsZGVyLmNwcCBpbiBTb3Vy
Y2VzICovLAorCQkJCTg5RTQ4RURDMTE2NDE5RDUwMDA1Qjc5NSAvKiBCeXRlU3RvcmUuY3BwIGlu
IFNvdXJjZXMgKi8sCiAJCQkpOwogCQkJcnVuT25seUZvckRlcGxveW1lbnRQb3N0cHJvY2Vzc2lu
ZyA9IDA7CiAJCX07CmRpZmYgLS1naXQgYS9XZWJDb3JlL2h0bWwvQmxvYkJ1aWxkZXIuY3BwIGIv
V2ViQ29yZS9odG1sL0Jsb2JCdWlsZGVyLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw
MDAwMDAwLi5jMDc2MTgwCi0tLSAvZGV2L251bGwKKysrIGIvV2ViQ29yZS9odG1sL0Jsb2JCdWls
ZGVyLmNwcApAQCAtMCwwICsxLDEwNCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMCBHb29n
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zIGFyZQorICogbWV0OgorICoKKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgICAgKiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisg
KiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyCisgKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiBkaXN0cmlidXRpb24uCisgKiAgICAgKiBOZWl0
aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisgKiBjb250
cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2
ZWQgZnJvbQorICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4g
cGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZ
UklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBU
TywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQg
U0hBTEwgVEhFIENPUFlSSUdIVAorICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1J
VEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
CisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJC
bG9iQnVpbGRlci5oIgorCisjaW5jbHVkZSAiQmxvYi5oIgorI2luY2x1ZGUgIkJ5dGVTdG9yZS5o
IgorI2luY2x1ZGUgIk5vdEltcGxlbWVudGVkLmgiCisjaW5jbHVkZSAiU3RyaW5nSGFzaC5oIgor
I2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgor
CituYW1lc3BhY2UgV2ViQ29yZSB7CisKK0Jsb2JCdWlsZGVyOjpCbG9iQnVpbGRlcigpCisgICAg
OiBtX2J5dGVTdG9yZShCeXRlU3RvcmU6OmNyZWF0ZSgpKQorICAgICwgbV9lbmRpbmdzKEVORElO
R19UUkFOU1BBUkVOVCkKK3sKK30KKworQmxvYkJ1aWxkZXI6On5CbG9iQnVpbGRlcigpCit7Cit9
CisKK2Jvb2wgQmxvYkJ1aWxkZXI6OmFwcGVuZFN0cmluZyhjb25zdCBTdHJpbmcmIHRleHQsIEV4
Y2VwdGlvbkNvZGUmKQoreworICAgIC8vIEZJWE1FIGhhbmRsZSBlbmRpbmdzIGNvbnZlcnNpb24u
CisgICAgcmV0dXJuIG1fYnl0ZVN0b3JlLT5hcHBlbmQodGV4dC51dGY4KCkuZGF0YSgpLCB0ZXh0
LnV0ZjgoKS5sZW5ndGgoKSk7Cit9CisKK2Jvb2wgQmxvYkJ1aWxkZXI6OmFwcGVuZEJsb2IoUGFz
c1JlZlB0cjxCbG9iPikKK3sKKyAgICAvLyBGSVhNRQorICAgIG5vdEltcGxlbWVudGVkKCk7Cisg
ICAgcmV0dXJuIGZhbHNlOworfQorCitQYXNzUmVmUHRyPEJsb2I+IEJsb2JCdWlsZGVyOjpnZXRC
bG9iKCkgY29uc3QKK3sKKyAgICAvLyBGSVhNRQorICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAg
cmV0dXJuIDA7Cit9CisKK3R5cGVkZWYgSGFzaE1hcDxTdHJpbmcsIEJsb2JCdWlsZGVyOjpFbmRp
bmdzVHlwZSwgQ2FzZUZvbGRpbmdIYXNoPiBFbmRpbmdzVHlwZU1hcDsKK3N0YXRpYyBjb25zdCBF
bmRpbmdzVHlwZU1hcCogY3JlYXRlRW5kaW5nc1R5cGVNYXAoKQoreworICAgIEVuZGluZ3NUeXBl
TWFwKiBtYXAgPSBuZXcgRW5kaW5nc1R5cGVNYXA7CisgICAgbWFwLT5hZGQoInRyYW5zcGFyZW50
IiwgQmxvYkJ1aWxkZXI6OkVORElOR19UUkFOU1BBUkVOVCk7CisgICAgbWFwLT5hZGQoIm5hdGl2
ZSIsIEJsb2JCdWlsZGVyOjpFTkRJTkdfTkFUSVZFKTsKKyAgICBtYXAtPmFkZCgibGYiLCBCbG9i
QnVpbGRlcjo6RU5ESU5HX0xGKTsKKyAgICBtYXAtPmFkZCgiY3IiLCBCbG9iQnVpbGRlcjo6RU5E
SU5HX0NSKTsKKyAgICBtYXAtPmFkZCgiY3JsZiIsIEJsb2JCdWlsZGVyOjpFTkRJTkdfQ1JMRik7
CisgICAgcmV0dXJuIG1hcDsKK30KKwordm9pZCBCbG9iQnVpbGRlcjo6c2V0RW5kaW5ncyhjb25z
dCBTdHJpbmcmIHR5cGUpCit7CisgICAgc3RhdGljIGNvbnN0IEVuZGluZ3NUeXBlTWFwKiB0eXBl
TWFwID0gY3JlYXRlRW5kaW5nc1R5cGVNYXAoKTsKKyAgICBtX2VuZGluZ3MgPSB0eXBlLmlzTnVs
bCgpID8gRU5ESU5HX1RSQU5TUEFSRU5UIDogdHlwZU1hcC0+Z2V0KHR5cGUpOworfQorCitTdHJp
bmcgQmxvYkJ1aWxkZXI6OmVuZGluZ3MoKSBjb25zdAoreworICAgIHN3aXRjaCAobV9lbmRpbmdz
KSB7CisgICAgY2FzZSBFTkRJTkdfVFJBTlNQQVJFTlQ6IHJldHVybiAidHJhbnNwYXJlbnQiOwor
ICAgIGNhc2UgRU5ESU5HX05BVElWRTogcmV0dXJuICJuYXRpdmUiOworICAgIGNhc2UgRU5ESU5H
X0xGOiByZXR1cm4gImxmIjsKKyAgICBjYXNlIEVORElOR19DUjogcmV0dXJuICJjciI7CisgICAg
Y2FzZSBFTkRJTkdfQ1JMRjogcmV0dXJuICJjcmxmIjsKKyAgICB9CisgICAgQVNTRVJUX05PVF9S
RUFDSEVEKCk7CisgICAgcmV0dXJuICJ0cmFuc3BhcmVudCI7Cit9CisKK30gLy8gbmFtZXNwYWNl
IFdlYkNvcmUKZGlmZiAtLWdpdCBhL1dlYkNvcmUvaHRtbC9CbG9iQnVpbGRlci5oIGIvV2ViQ29y
ZS9odG1sL0Jsb2JCdWlsZGVyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4u
YTE1MWQ3NgotLS0gL2Rldi9udWxsCisrKyBiL1dlYkNvcmUvaHRtbC9CbG9iQnVpbGRlci5oCkBA
IC0wLDAgKzEsNzggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgR29vZ2xlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKyAq
IG1ldDoKKyAqCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICAgICogUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogY29weXJpZ2h0
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lcgorICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZQorICogZGlzdHJpYnV0aW9uLgorICogICAgICogTmVpdGhlciB0aGUgbmFt
ZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworICogY29udHJpYnV0b3JzIG1h
eSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyAq
IHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24u
CisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERF
UlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorICogQSBQ
QVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBD
T1BZUklHSFQKKyAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgUFJP
Q1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisg
KiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KKyAqLworCisjaWZuZGVmIEJsb2JCdWlsZGVyX2gKKyNkZWZpbmUgQmxvYkJ1aWxkZXJf
aAorCisjaW5jbHVkZSAiRXhjZXB0aW9uQ29kZS5oIgorI2luY2x1ZGUgIlBsYXRmb3JtU3RyaW5n
LmgiCisjaW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIuaD4KKyNpbmNsdWRlIDx3dGYvUmVmQ291bnRl
ZC5oPgorI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitj
bGFzcyBCbG9iOworY2xhc3MgQnl0ZVN0b3JlOworY2xhc3MgQmxvYkJ1aWxkZXIgOiBwdWJsaWMg
UmVmQ291bnRlZDxCbG9iQnVpbGRlcj4geworcHVibGljOgorICAgIHN0YXRpYyBQYXNzUmVmUHRy
PEJsb2JCdWlsZGVyPiBjcmVhdGUoKSB7IHJldHVybiBhZG9wdFJlZihuZXcgQmxvYkJ1aWxkZXIo
KSk7IH0KKyAgICB2aXJ0dWFsIH5CbG9iQnVpbGRlcigpOworCisgICAgLy8gQXBwZW5kcyBzdHJp
bmcuICBSZXR1cm5zIGZhbHNlIGlmIHRoZSBkYXRhIGNvdWxkIG5vdCBiZSBhZGRlZC4KKyAgICBi
b29sIGFwcGVuZFN0cmluZyhjb25zdCBTdHJpbmcmIHRleHQsIEV4Y2VwdGlvbkNvZGUmKTsKKwor
ICAgIC8vIEFwcGVuZHMgYmxvYi4gIFJldHVybnMgZmFsc2UgaWYgdGhlIGRhdGEgY291bGQgbm90
IGJlIGFkZGVkLgorICAgIGJvb2wgYXBwZW5kQmxvYihQYXNzUmVmUHRyPEJsb2I+IGJsb2IpOwor
CisgICAgUGFzc1JlZlB0cjxCbG9iPiBnZXRCbG9iKCkgY29uc3Q7CisKKyAgICBlbnVtIEVuZGlu
Z3NUeXBlIHsKKyAgICAgICAgRU5ESU5HX1RSQU5TUEFSRU5UID0gMCwKKyAgICAgICAgRU5ESU5H
X05BVElWRSwKKyAgICAgICAgRU5ESU5HX0xGLAorICAgICAgICBFTkRJTkdfQ1IsCisgICAgICAg
IEVORElOR19DUkxGLAorICAgIH07CisgICAgdm9pZCBzZXRFbmRpbmdzKGNvbnN0IFN0cmluZyYp
OworICAgIFN0cmluZyBlbmRpbmdzKCkgY29uc3Q7CisgICAgc3RhdGljIGNvbnN0IGNoYXIqIGdl
dEVuZGluZ0NoYXJzKEVuZGluZ3NUeXBlKTsKKworcHJpdmF0ZToKKyAgICBCbG9iQnVpbGRlcigp
OworCisgICAgUmVmUHRyPEJ5dGVTdG9yZT4gbV9ieXRlU3RvcmU7CisKKyAgICBFbmRpbmdzVHlw
ZSBtX2VuZGluZ3M7Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBC
bG9iQnVpbGRlcl9oCmRpZmYgLS1naXQgYS9XZWJDb3JlL2h0bWwvQnl0ZVN0b3JlLmNwcCBiL1dl
YkNvcmUvaHRtbC9CeXRlU3RvcmUuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw
MDAuLjEzYjBmYmIKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJDb3JlL2h0bWwvQnl0ZVN0b3JlLmNw
cApAQCAtMCwwICsxLDgyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEwIEdvb2dsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJl
CisgKiBtZXQ6CisgKgorICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAgICAqIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqIGNvcHly
aWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIKKyAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUKKyAqIGRpc3RyaWJ1dGlvbi4KKyAqICAgICAqIE5laXRoZXIgdGhl
IG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAqIGNvbnRyaWJ1dG9y
cyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9t
CisgKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNz
aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBI
T0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUg
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAq
IEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBU
SEUgQ09QWVJJR0hUCisgKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1Ig
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8s
IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LAorICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorCisjaW5jbHVkZSAiQnl0ZVN0
b3JlLmgiCisKKyNpbmNsdWRlIDxsaW1pdHM+CisKKyNpbmNsdWRlIDx3dGYvRmFzdE1hbGxvYy5o
PgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK0J5dGVTdG9yZTo6Qnl0ZVN0b3JlKCkKKyAgICA6
IG1fYnVmZmVyKDApCisgICAgLCBtX2J1ZmZlclNpemUoMCkKK3sKK30KKworQnl0ZVN0b3JlOjp+
Qnl0ZVN0b3JlKCkKK3sKKyAgICBmYXN0RnJlZShtX2J1ZmZlcik7Cit9CisKK2Jvb2wgQnl0ZVN0
b3JlOjphcHBlbmQoY29uc3QgY2hhciogaW4sIHNpemVfdCBsZW5ndGgpCit7CisgICAgTXV0ZXhM
b2NrZXIgbG9jayhtX2xvY2spOworICAgIGNoYXIqIG5ld0J1ZmZlciA9IDA7CisgICAgc2l6ZV90
IG5ld1NpemUgPSBtX2J1ZmZlclNpemUgKyBsZW5ndGg7CisgICAgaWYgKHRyeUZhc3RNYWxsb2Mo
bmV3U2l6ZSkuZ2V0VmFsdWUobmV3QnVmZmVyKSkgeworICAgICAgICBpZiAobV9idWZmZXIpCisg
ICAgICAgICAgICBtZW1jcHkobmV3QnVmZmVyLCBtX2J1ZmZlciwgbV9idWZmZXJTaXplKTsKKyAg
ICAgICAgbWVtY3B5KG5ld0J1ZmZlciArIG1fYnVmZmVyU2l6ZSwgaW4sIGxlbmd0aCk7CisgICAg
ICAgIGZhc3RGcmVlKG1fYnVmZmVyKTsKKyAgICAgICAgbV9idWZmZXIgPSBuZXdCdWZmZXI7Cisg
ICAgICAgIG1fYnVmZmVyU2l6ZSArPSBsZW5ndGg7CisgICAgICAgIHJldHVybiB0cnVlOworICAg
IH0KKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK2ludDY0X3QgQnl0ZVN0b3JlOjpyZWFkKGNoYXIq
IG91dCwgc2l6ZV90IG9mZnNldCwgc2l6ZV90IG1heExlbmd0aCkgY29uc3QKK3sKKyAgICBpZiAo
IW1heExlbmd0aCkKKyAgICAgICAgcmV0dXJuIDA7CisgICAgTXV0ZXhMb2NrZXIgbG9jayhtX2xv
Y2spOworICAgIGlmIChvZmZzZXQgPj0gbV9idWZmZXJTaXplKQorICAgICAgICByZXR1cm4gMDsK
KyAgICBpZiAob2Zmc2V0ICsgbWF4TGVuZ3RoID4gbV9idWZmZXJTaXplKQorICAgICAgICBtYXhM
ZW5ndGggPSBtX2J1ZmZlclNpemUgLSBvZmZzZXQ7CisgICAgbWVtY3B5KG91dCwgJm1fYnVmZmVy
W29mZnNldF0sIG1heExlbmd0aCk7CisgICAgcmV0dXJuIG1heExlbmd0aDsKK30KKworfSAvLyBu
YW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9odG1sL0J5dGVTdG9yZS5oIGIv
V2ViQ29yZS9odG1sL0J5dGVTdG9yZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw
MDAuLmMxYTk5Y2YKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJDb3JlL2h0bWwvQnl0ZVN0b3JlLmgK
QEAgLTAsMCArMSw2MyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMCBHb29nbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQor
ICogbWV0OgorICoKKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgICAgKiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiBjb3B5cmln
aHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyCisgKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlCisgKiBkaXN0cmlidXRpb24uCisgKiAgICAgKiBOZWl0aGVyIHRoZSBu
YW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisgKiBjb250cmlidXRvcnMg
bWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQor
ICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lv
bi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9M
REVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisgKiBB
IFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhF
IENPUFlSSUdIVAorICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQ
Uk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwK
KyAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgorICovCisKKyNpZm5kZWYgQnl0ZVN0b3JlX2gKKyNkZWZpbmUgQnl0ZVN0b3JlX2gK
KworI2luY2x1ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+CisjaW5jbHVkZSA8d3RmL1RocmVhZGluZy5o
PgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIEJ5dGVTdG9yZSA6IHB1YmxpYyBUaHJl
YWRTYWZlU2hhcmVkPEJ5dGVTdG9yZT4geworcHVibGljOgorICAgIHN0YXRpYyBQYXNzUmVmUHRy
PEJ5dGVTdG9yZT4gY3JlYXRlKCkgeyByZXR1cm4gYWRvcHRSZWYobmV3IEJ5dGVTdG9yZSgpKTsg
fQorICAgIHZpcnR1YWwgfkJ5dGVTdG9yZSgpOworCisgICAgaW50NjRfdCBzaXplKCkgY29uc3Qg
eyByZXR1cm4gbV9idWZmZXJTaXplOyB9CisgICAgYm9vbCBlbXB0eSgpIGNvbnN0IHsgcmV0dXJu
ICFzaXplKCk7IH0KKworICAgIC8vIFJlYWRzIHRoZSBkYXRhIGludG8gfG91dHwgYXQgbW9zdCB8
bWF4TGVuZ3RofCBieXRlcy4KKyAgICBpbnQ2NF90IHJlYWQoY2hhciogb3V0LCBzaXplX3Qgb2Zm
c2V0LCBzaXplX3QgbWF4TGVuZ3RoKSBjb25zdDsKKworICAgIC8vIEFwcGVuZHMgcmF3IGRhdGEg
fGlufC4gIFJldHVybnMgZmFsc2UgaWYgdGhlIGRhdGEgY291bGQgbm90IGJlIGFkZGVkLgorICAg
IGJvb2wgYXBwZW5kKGNvbnN0IGNoYXIqIGluLCBzaXplX3QgbGVuZ3RoKTsKKworcHJpdmF0ZToK
KyAgICBCeXRlU3RvcmUoKTsKKworICAgIGNoYXIqIG1fYnVmZmVyOworICAgIHNpemVfdCBtX2J1
ZmZlclNpemU7CisgICAgbXV0YWJsZSBNdXRleCBtX2xvY2s7Cit9OworCit9IC8vIG5hbWVzcGFj
ZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBCeXRlU3RvcmVfaAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>52429</attachid>
            <date>2010-04-02 11:43:13 -0700</date>
            <delta_ts>2010-06-09 10:51:40 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-36903-20100402114312.patch</filename>
            <type>text/plain</type>
            <size>33590</size>
            <attacher name="Kinuko Yasuda">kinuko</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYkNvcmUvQW5kcm9pZC5tayBiL1dlYkNvcmUvQW5kcm9pZC5tawppbmRl
eCBhMTcwMWM1Li4yMGJiN2Q5IDEwMDY0NAotLS0gYS9XZWJDb3JlL0FuZHJvaWQubWsKKysrIGIv
V2ViQ29yZS9BbmRyb2lkLm1rCkBAIC0yMzgsNiArMjM4LDcgQEAgTE9DQUxfU1JDX0ZJTEVTIDo9
ICQoTE9DQUxfU1JDX0ZJTEVTKSBcCiAJaGlzdG9yeS9hbmRyb2lkL0hpc3RvcnlJdGVtQW5kcm9p
ZC5jcHAgXAogCVwKIAlodG1sL0Jsb2IuY3BwIFwKKwlodG1sL0Jsb2JCdWlsZGVyLmNwcCBcCiAJ
aHRtbC9Db2xsZWN0aW9uQ2FjaGUuY3BwIFwKIAlodG1sL0RPTUZvcm1EYXRhLmNwcCBcCiAJaHRt
bC9GaWxlLmNwcCBcCmRpZmYgLS1naXQgYS9XZWJDb3JlL0NoYW5nZUxvZyBiL1dlYkNvcmUvQ2hh
bmdlTG9nCmluZGV4IDk5MzZjNTMuLjRiOGM2ZGIgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvQ2hhbmdl
TG9nCisrKyBiL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsODMgQEAKKzIwMTAtMDQtMDIg
IEtpbnVrbyBZYXN1ZGEgIDxraW51a29AY2hyb21pdW0ub3JnPgorCisgICAgICAgIFJldmlld2Vk
IGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEltcGxlbWVudCBCbG9iQnVpbGRlciBpbnRl
cm5hbCBjbGFzcyBmb3IgQmxvYkJ1aWxkZXIgc3VwcG9ydCBhcyBkZWZpbmVkIGluIEZpbGVXcml0
ZXIKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTM2OTAz
CisKKyAgICAgICAgTm8gbmV3IHRlc3RzOyB0aGV5IHdpbGwgYmUgYWRkZWQgd2hlbiB3ZSBhZGQg
anNjIGJpbmRpbmdzLgorCisgICAgICAgICogQW5kcm9pZC5tazoKKyAgICAgICAgKiBHTlVtYWtl
ZmlsZS5hbToKKyAgICAgICAgKiBXZWJDb3JlLmd5cGk6CisgICAgICAgICogV2ViQ29yZS5wcm86
CisgICAgICAgICogV2ViQ29yZS52Y3Byb2ovV2ViQ29yZS52Y3Byb2o6CisgICAgICAgICogV2Vi
Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAgICAqIGh0bWwvQmxvYi5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpCbG9iOjpjbGFtcFNsaWNlUmFuZ2UpOgorICAgICAgICAoV2Vi
Q29yZTo6RmlsZUJsb2I6OkZpbGVCbG9iKToKKyAgICAgICAgKFdlYkNvcmU6OkZpbGVCbG9iOjpz
aXplKToKKyAgICAgICAgKFdlYkNvcmU6OkZpbGVCbG9iOjpyZWFkKToKKyAgICAgICAgKFdlYkNv
cmU6OkZpbGVCbG9iOjpzbGljZSk6CisgICAgICAgIChXZWJDb3JlOjpEYXRhQmxvYjo6RGF0YUJs
b2IpOgorICAgICAgICAoV2ViQ29yZTo6RGF0YUJsb2I6OnJlYWQpOgorICAgICAgICAoV2ViQ29y
ZTo6RGF0YUJsb2I6OnNsaWNlKToKKyAgICAgICAgKFdlYkNvcmU6OkNvbWJpbmVkQmxvYjo6Q29t
YmluZWRCbG9iKToKKyAgICAgICAgKFdlYkNvcmU6OkNvbWJpbmVkQmxvYjo6YXBwZW5kQmxvYik6
CisgICAgICAgIChXZWJDb3JlOjpDb21iaW5lZEJsb2I6OnNsaWNlKToKKyAgICAgICAgKFdlYkNv
cmU6OkNvbWJpbmVkQmxvYjo6cmVhZCk6CisgICAgICAgICogaHRtbC9CbG9iLmg6CisgICAgICAg
IChXZWJDb3JlOjpCbG9iOjppc1VzaW5nRmlsZSk6CisgICAgICAgIChXZWJDb3JlOjpCbG9iOjpp
c0NvbWJpbmVkKToKKyAgICAgICAgKFdlYkNvcmU6OkJsb2I6OnRvRmlsZUJsb2IpOgorICAgICAg
ICAoV2ViQ29yZTo6QmxvYjo6dG9Db21iaW5lZEJsb2IpOgorICAgICAgICAoV2ViQ29yZTo6Qmxv
Yjo6c3RhcnQpOgorICAgICAgICAoV2ViQ29yZTo6QmxvYjo6bGVuZ3RoKToKKyAgICAgICAgKFdl
YkNvcmU6OkJsb2I6Om1vZGlmaWNhdGlvblRpbWUpOgorICAgICAgICAoV2ViQ29yZTo6RmlsZUJs
b2I6OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpGaWxlQmxvYjo6aXNVc2luZ0ZpbGUpOgor
ICAgICAgICAoV2ViQ29yZTo6RmlsZUJsb2I6OnRvRmlsZUJsb2IpOgorICAgICAgICAoV2ViQ29y
ZTo6RmlsZUJsb2I6OnN0YXJ0KToKKyAgICAgICAgKFdlYkNvcmU6OkZpbGVCbG9iOjpsZW5ndGgp
OgorICAgICAgICAoV2ViQ29yZTo6RmlsZUJsb2I6Om1vZGlmaWNhdGlvblRpbWUpOgorICAgICAg
ICAoV2ViQ29yZTo6RGF0YUJsb2I6OkJ5dGVTdG9yZTo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNv
cmU6OkRhdGFCbG9iOjpCeXRlU3RvcmU6OnNpemUpOgorICAgICAgICAoV2ViQ29yZTo6RGF0YUJs
b2I6OkJ5dGVTdG9yZTo6ZGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpEYXRhQmxvYjo6Qnl0ZVN0
b3JlOjpCeXRlU3RvcmUpOgorICAgICAgICAoV2ViQ29yZTo6RGF0YUJsb2I6OmNyZWF0ZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpEYXRhQmxvYjo6c2l6ZSk6CisgICAgICAgIChXZWJDb3JlOjpEYXRh
QmxvYjo6c3RhcnQpOgorICAgICAgICAoV2ViQ29yZTo6RGF0YUJsb2I6Omxlbmd0aCk6CisgICAg
ICAgIChXZWJDb3JlOjpDb21iaW5lZEJsb2I6OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpD
b21iaW5lZEJsb2I6OnNpemUpOgorICAgICAgICAoV2ViQ29yZTo6Q29tYmluZWRCbG9iOjppc0Nv
bWJpbmVkKToKKyAgICAgICAgKFdlYkNvcmU6OkNvbWJpbmVkQmxvYjo6dG9Db21iaW5lZEJsb2Ip
OgorICAgICAgICAoV2ViQ29yZTo6Q29tYmluZWRCbG9iOjpsZW5ndGgpOgorICAgICAgICAqIGh0
bWwvQmxvYkJ1aWxkZXIuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkJsb2JCdWlsZGVy
OjpCbG9iRGF0YVdyYXBwZXI6OkJsb2JEYXRhV3JhcHBlcik6CisgICAgICAgIChXZWJDb3JlOjpC
bG9iQnVpbGRlcjo6QmxvYkJ1aWxkZXIpOgorICAgICAgICAoV2ViQ29yZTo6QmxvYkJ1aWxkZXI6
On5CbG9iQnVpbGRlcik6CisgICAgICAgIChXZWJDb3JlOjpCbG9iQnVpbGRlcjo6YXBwZW5kU3Ry
aW5nKToKKyAgICAgICAgKFdlYkNvcmU6OkJsb2JCdWlsZGVyOjphcHBlbmRCbG9iKToKKyAgICAg
ICAgKFdlYkNvcmU6OkJsb2JCdWlsZGVyOjpnZXRCbG9iKToKKyAgICAgICAgKFdlYkNvcmU6OkJs
b2JCdWlsZGVyOjpzZXRFbmRpbmdzKToKKyAgICAgICAgKFdlYkNvcmU6OmNyZWF0ZUVuZGluZ1R5
cGVUb1N0cmluZ01hcCk6CisgICAgICAgIChXZWJDb3JlOjpCbG9iQnVpbGRlcjo6ZW5kaW5ncyk6
CisgICAgICAgIChXZWJDb3JlOjpCbG9iQnVpbGRlcjo6QmxvYkRhdGFXcmFwcGVyOjpnZXRCbG9i
KToKKyAgICAgICAgKiBodG1sL0Jsb2JCdWlsZGVyLmg6IEFkZGVkLgorICAgICAgICAoV2ViQ29y
ZTo6QmxvYkJ1aWxkZXI6OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpCbG9iQnVpbGRlcjo6
KToKKyAgICAgICAgKiBodG1sL0RPTUZvcm1EYXRhLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkRP
TUZvcm1EYXRhOjphcHBlbmQpOgorICAgICAgICAqIGh0bWwvRmlsZS5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpGaWxlOjpGaWxlKToKKyAgICAgICAgKiBodG1sL0ZpbGUuaDoKKyAgICAgICAgKiBw
bGF0Zm9ybS9uZXR3b3JrL0Zvcm1EYXRhLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZvcm1EYXRh
OjphcHBlbmRET01Gb3JtRGF0YSk6CisgICAgICAgICogcGxhdGZvcm0vbmV0d29yay9Gb3JtRGF0
YS5oOgorICAgICAgICAqIHhtbC9YTUxIdHRwUmVxdWVzdC5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpYTUxIdHRwUmVxdWVzdDo6c2VuZCk6CisKIDIwMTAtMDQtMDEgIFZpdGFseSBSZXBlc2hrbyAg
PHZpdGFseXJAY2hyb21pdW0ub3JnPgogCiAgICAgICAgIFJldmlld2VkIGJ5IERhcmluIEZpc2hl
ci4KZGlmZiAtLWdpdCBhL1dlYkNvcmUvR05VbWFrZWZpbGUuYW0gYi9XZWJDb3JlL0dOVW1ha2Vm
aWxlLmFtCmluZGV4IGI3NzE4NjIuLmQzYTJhMTMgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvR05VbWFr
ZWZpbGUuYW0KKysrIGIvV2ViQ29yZS9HTlVtYWtlZmlsZS5hbQpAQCAtOTkwLDYgKzk5MCw4IEBA
IHdlYmNvcmVfc291cmNlcyArPSBcCiAJV2ViQ29yZS9oaXN0b3J5L1BhZ2VDYWNoZS5oIFwKIAlX
ZWJDb3JlL2h0bWwvQmxvYi5jcHAgXAogCVdlYkNvcmUvaHRtbC9CbG9iLmggXAorCVdlYkNvcmUv
aHRtbC9CbG9iQnVpbGRlci5jcHAgXAorCVdlYkNvcmUvaHRtbC9CbG9iQnVpbGRlci5oIFwKIAlX
ZWJDb3JlL2h0bWwvY2FudmFzL0NhbnZhc0NvbnRleHRBdHRyaWJ1dGVzLmggXAogCVdlYkNvcmUv
aHRtbC9jYW52YXMvQ2FudmFzR3JhZGllbnQuY3BwIFwKIAlXZWJDb3JlL2h0bWwvY2FudmFzL0Nh
bnZhc0dyYWRpZW50LmggXApkaWZmIC0tZ2l0IGEvV2ViQ29yZS9XZWJDb3JlLmd5cGkgYi9XZWJD
b3JlL1dlYkNvcmUuZ3lwaQppbmRleCAyMTRjN2YwLi5kY2FlY2YyIDEwMDY0NAotLS0gYS9XZWJD
b3JlL1dlYkNvcmUuZ3lwaQorKysgYi9XZWJDb3JlL1dlYkNvcmUuZ3lwaQpAQCAtMTM1NSw2ICsx
MzU1LDggQEAKICAgICAgICAgICAgICdoaXN0b3J5L1BhZ2VDYWNoZS5oJywKICAgICAgICAgICAg
ICdodG1sL0Jsb2IuY3BwJywKICAgICAgICAgICAgICdodG1sL0Jsb2IuaCcsCisgICAgICAgICAg
ICAnaHRtbC9CbG9iQnVpbGRlci5jcHAnLAorICAgICAgICAgICAgJ2h0bWwvQmxvYkJ1aWxkZXIu
aCcsCiAgICAgICAgICAgICAnaHRtbC9jYW52YXMvV2ViR0xBcnJheS5jcHAnLAogICAgICAgICAg
ICAgJ2h0bWwvY2FudmFzL1dlYkdMQXJyYXkuaCcsCiAgICAgICAgICAgICAnaHRtbC9jYW52YXMv
V2ViR0xBcnJheUJ1ZmZlci5jcHAnLApkaWZmIC0tZ2l0IGEvV2ViQ29yZS9XZWJDb3JlLnBybyBi
L1dlYkNvcmUvV2ViQ29yZS5wcm8KaW5kZXggNzMwMzM3MC4uY2IyNmVlYyAxMDA2NDQKLS0tIGEv
V2ViQ29yZS9XZWJDb3JlLnBybworKysgYi9XZWJDb3JlL1dlYkNvcmUucHJvCkBAIC01OTgsNiAr
NTk4LDcgQEAgU09VUkNFUyArPSBcCiAgICAgaGlzdG9yeS9xdC9IaXN0b3J5SXRlbVF0LmNwcCBc
CiAgICAgaGlzdG9yeS9QYWdlQ2FjaGUuY3BwIFwKICAgICBodG1sL0Jsb2IuY3BwIFwKKyAgICBo
dG1sL0Jsb2JCdWlsZGVyLmNwcCBcCiAgICAgaHRtbC9jYW52YXMvQ2FudmFzR3JhZGllbnQuY3Bw
IFwKICAgICBodG1sL2NhbnZhcy9DYW52YXNQYXR0ZXJuLmNwcCBcCiAgICAgaHRtbC9jYW52YXMv
Q2FudmFzUGl4ZWxBcnJheS5jcHAgXApAQCAtMTMwNCw2ICsxMzA1LDcgQEAgSEVBREVSUyArPSBc
CiAgICAgaGlzdG9yeS9IaXN0b3J5SXRlbS5oIFwKICAgICBoaXN0b3J5L1BhZ2VDYWNoZS5oIFwK
ICAgICBodG1sL0Jsb2IuaCBcCisgICAgaHRtbC9CbG9iQnVpbGRlci5oIFwKICAgICBodG1sL2Nh
bnZhcy9DYW52YXNHcmFkaWVudC5oIFwKICAgICBodG1sL2NhbnZhcy9DYW52YXNQYXR0ZXJuLmgg
XAogICAgIGh0bWwvY2FudmFzL0NhbnZhc1BpeGVsQXJyYXkuaCBcCmRpZmYgLS1naXQgYS9XZWJD
b3JlL1dlYkNvcmUudmNwcm9qL1dlYkNvcmUudmNwcm9qIGIvV2ViQ29yZS9XZWJDb3JlLnZjcHJv
ai9XZWJDb3JlLnZjcHJvagppbmRleCA3Zjg5ODY4Li5iM2E1NWU2IDEwMDY0NAotLS0gYS9XZWJD
b3JlL1dlYkNvcmUudmNwcm9qL1dlYkNvcmUudmNwcm9qCisrKyBiL1dlYkNvcmUvV2ViQ29yZS52
Y3Byb2ovV2ViQ29yZS52Y3Byb2oKQEAgLTMwMDk3LDYgKzMwMDk3LDE0IEBACiAJCQkJPg0KIAkJ
CTwvRmlsZT4NCiAJCQk8RmlsZQ0KKwkJCQlSZWxhdGl2ZVBhdGg9Ii4uXGh0bWxcQmxvYkJ1aWxk
ZXIuY3BwIg0KKwkJCQk+DQorCQkJPC9GaWxlPg0KKwkJCTxGaWxlDQorCQkJCVJlbGF0aXZlUGF0
aD0iLi5caHRtbFxCbG9iQnVpbGRlci5oIg0KKwkJCQk+DQorCQkJPC9GaWxlPg0KKwkJCTxGaWxl
DQogCQkJCVJlbGF0aXZlUGF0aD0iLi5caHRtbFxjYW52YXNcQ2FudmFzR3JhZGllbnQuY3BwIg0K
IAkJCQk+DQogCQkJPC9GaWxlPg0KZGlmZiAtLWdpdCBhL1dlYkNvcmUvV2ViQ29yZS54Y29kZXBy
b2ovcHJvamVjdC5wYnhwcm9qIGIvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBi
eHByb2oKaW5kZXggNDQ5MTBmYy4uOGI0NjQzZCAxMDA2NDQKLS0tIGEvV2ViQ29yZS9XZWJDb3Jl
Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKKysrIGIvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJv
ai9wcm9qZWN0LnBieHByb2oKQEAgLTIyMDcsNiArMjIwNyw4IEBACiAJCTg1Rjc0RTBBMEFBOERG
OEMwMDBEQzI4NCAvKiBET01DU1NVbmtub3duUnVsZS5oIGluIENvcHkgR2VuZXJhdGVkIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gODUwMzJERDUwQUE4QzlCRTAw
N0QzQjdEIC8qIERPTUNTU1Vua25vd25SdWxlLmggKi87IH07CiAJCTg1RkYzMTVBMEFBRkJGQ0Iw
MDM3NEYzOCAvKiBET01LZXlib2FyZEV2ZW50LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSA4NUZGMzE1ODBBQUZCRkNCMDAzNzRGMzggLyogRE9NS2V5Ym9h
cmRFdmVudC5oICovOyB9OwogCQk4NUZGMzE1QjBBQUZCRkNCMDAzNzRGMzggLyogRE9NS2V5Ym9h
cmRFdmVudC5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDg1RkYzMTU5MEFBRkJGQ0IwMDM3NEYzOCAvKiBET01LZXlib2FyZEV2ZW50Lm1tICovOyB9Owor
CQk4OThCRUQyMDExNjE4RDM4MDBBNkVBMDYgLyogQmxvYkJ1aWxkZXIuY3BwIGluIFNvdXJjZXMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gODk4QkVEMUYxMTYxOEQzODAwQTZF
QTA2IC8qIEJsb2JCdWlsZGVyLmNwcCAqLzsgfTsKKwkJODk4QkVEMjIxMTYxOEQ0MjAwQTZFQTA2
IC8qIEJsb2JCdWlsZGVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSA4OThCRUQyMTExNjE4RDQyMDBBNkVBMDYgLyogQmxvYkJ1aWxkZXIuaCAqLzsgfTsK
IAkJOTMwMkIwQkQwRDc5RjgyOTAwQzdFRTgzIC8qIFBhZ2VHcm91cC5jcHAgaW4gU291cmNlcyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5MzAyQjBCQzBENzlGODI5MDBDN0VF
ODMgLyogUGFnZUdyb3VwLmNwcCAqLzsgfTsKIAkJOTMwMkIwQkYwRDc5RjgyQzAwQzdFRTgzIC8q
IFBhZ2VHcm91cC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gOTMwMkIwQkUwRDc5RjgyQzAwQzdFRTgzIC8qIFBhZ2VHcm91cC5oICovOyBzZXR0aW5ncyA9
IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTkzMDVCMjREMDk4RjFCNkIwMEMy
ODg1NSAvKiBUaW1lci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gOTMwNUIyNEMwOThGMUI2QjAwQzI4ODU1IC8qIFRpbWVyLmggKi87IHNldHRpbmdzID0g
e0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKQEAgLTc2NDcsNiArNzY0OSw4IEBACiAJ
CTg1RjU2QTc5MEE5OENFMzcwMEFEQjYwQSAvKiBET01Qcm9jZXNzaW5nSW5zdHJ1Y3Rpb24ubW0g
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0gRE9NUHJvY2Vzc2luZ0lu
c3RydWN0aW9uLm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk4NUZGMzE1ODBBQUZC
RkNCMDAzNzRGMzggLyogRE9NS2V5Ym9hcmRFdmVudC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gRE9NS2V5Ym9hcmRFdmVudC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQk4NUZGMzE1OTBBQUZCRkNCMDAzNzRGMzggLyogRE9NS2V5Ym9hcmRFdmVudC5tbSAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBET01LZXlib2FyZEV2ZW50Lm1t
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk4OThCRUQxRjExNjE4RDM4MDBBNkVBMDYg
LyogQmxvYkJ1aWxkZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0g
QmxvYkJ1aWxkZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk4OThCRUQyMTEx
NjE4RDQyMDBBNkVBMDYgLyogQmxvYkJ1aWxkZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gQmxvYkJ1aWxkZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJOTMw
MkIwQkMwRDc5RjgyOTAwQzdFRTgzIC8qIFBhZ2VHcm91cC5jcHAgKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmNwcC5jcHA7IHBhdGggPSBQYWdlR3JvdXAuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQk5MzAyQjBCRTBENzlGODJDMDBDN0VFODMgLyogUGFnZUdyb3VwLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFBhZ2VHcm91cC5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQk5MzA1QjI0QzA5OEYxQjZCMDBDMjg4NTUgLyogVGltZXIuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gVGltZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKQEAgLTEyOTI0LDYgKzEyOTI4LDggQEAKIAkJOTNFRUMxRUMwOUMyODc3NzAwQzUxNUQxIC8q
IGh0bWwgKi8gPSB7CiAJCQlpc2EgPSBQQlhHcm91cDsKIAkJCWNoaWxkcmVuID0gKAorCQkJCTg5
OEJFRDIxMTE2MThENDIwMEE2RUEwNiAvKiBCbG9iQnVpbGRlci5oICovLAorCQkJCTg5OEJFRDFG
MTE2MThEMzgwMEE2RUEwNiAvKiBCbG9iQnVpbGRlci5jcHAgKi8sCiAJCQkJQTQzQkY1OTYxMTQ5
MjkwQTAwQzY0M0NBIC8qIEhUTUxQcm9ncmVzc0VsZW1lbnQuY3BwICovLAogCQkJCUE0M0JGNTk3
MTE0OTI5MEEwMEM2NDNDQSAvKiBIVE1MUHJvZ3Jlc3NFbGVtZW50LmggKi8sCiAJCQkJNDk0ODRG
QUUxMDJDRjAxRTAwMTg3REQzIC8qIGNhbnZhcyAqLywKQEAgLTE4NzY4LDYgKzE4Nzc0LDcgQEAK
IAkJCQlFMUUxQkYwMDExNUZGNkZCMDA2RjUyQ0EgLyogV2luZG93c0tleWJvYXJkQ29kZXMuaCBp
biBIZWFkZXJzICovLAogCQkJCTg0OTlBNTE1MTE1RkIzMzAwMEY1NjZFMyAvKiBSZW5kZXJTVkdS
ZXNvdXJjZU1hcmtlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMkUzQkJGMDgxMTYyREExMTAwQjk0
MDlBIC8qIFVVSUQuaCBpbiBIZWFkZXJzICovLAorCQkJCTg5OEJFRDIyMTE2MThENDIwMEE2RUEw
NiAvKiBCbG9iQnVpbGRlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkpOwogCQkJcnVuT25seUZvckRl
cGxveW1lbnRQb3N0cHJvY2Vzc2luZyA9IDA7CiAJCX07CkBAIC0yMDk4Miw2ICsyMDk4OSw3IEBA
CiAJCQkJRTQ3NzhCN0YxMTVBNTgxQTAwQjVEMzcyIC8qIEpTQ3VzdG9tRXZlbnQuY3BwIGluIFNv
dXJjZXMgKi8sCiAJCQkJODQ5OUE1MTQxMTVGQjMzMDAwRjU2NkUzIC8qIFJlbmRlclNWR1Jlc291
cmNlTWFya2VyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTJFM0JCRjA3MTE2MkRBMTEwMEI5NDA5
QSAvKiBVVUlELmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTg5OEJFRDIwMTE2MThEMzgwMEE2RUEw
NiAvKiBCbG9iQnVpbGRlci5jcHAgaW4gU291cmNlcyAqLywKIAkJCSk7CiAJCQlydW5Pbmx5Rm9y
RGVwbG95bWVudFBvc3Rwcm9jZXNzaW5nID0gMDsKIAkJfTsKZGlmZiAtLWdpdCBhL1dlYkNvcmUv
aHRtbC9CbG9iLmNwcCBiL1dlYkNvcmUvaHRtbC9CbG9iLmNwcAppbmRleCA4M2JiZGMwLi5mZjhj
NjE5IDEwMDY0NAotLS0gYS9XZWJDb3JlL2h0bWwvQmxvYi5jcHAKKysrIGIvV2ViQ29yZS9odG1s
L0Jsb2IuY3BwCkBAIC0yOSw2ICsyOSw3IEBACiAgKi8KIAogI2luY2x1ZGUgImNvbmZpZy5oIgor
CiAjaW5jbHVkZSAiQmxvYi5oIgogCiAjaW5jbHVkZSAiRmlsZVN5c3RlbS5oIgpAQCAtMzgsOSAr
MzksMjggQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogI2lmIEVOQUJMRShCTE9CX1NMSUNFKQogY29u
c3QgaW50IEJsb2I6OnRvRW5kT2ZGaWxlID0gLTE7CiBjb25zdCBkb3VibGUgQmxvYjo6ZG9Ob3RD
aGVja0ZpbGVDaGFuZ2UgPSAwOworCit2b2lkIEJsb2I6OmNsYW1wU2xpY2VSYW5nZShsb25nIGxv
bmcmIHN0YXJ0LCBsb25nIGxvbmcmIGxlbmd0aCwgbG9uZyBsb25nIHNuYXBzaG90U3RhcnQsIGxv
bmcgbG9uZyBzbmFwc2hvdEVuZCkKK3sKKyAgICBzdGFydCArPSBzbmFwc2hvdFN0YXJ0OworCisg
ICAgLy8gQ2xhbXAgdGhlIHJhbmdlIGlmIGl0IGV4Y2VlZHMgdGhlIHNpemUgbGltaXQuCisgICAg
aWYgKHN0YXJ0ID4gc25hcHNob3RFbmQpIHsKKyAgICAgICAgc3RhcnQgPSAwOworICAgICAgICBs
ZW5ndGggPSAwOworICAgIH0gZWxzZSBpZiAoc3RhcnQgKyBsZW5ndGggPiBzbmFwc2hvdEVuZCkK
KyAgICAgICAgbGVuZ3RoID0gc25hcHNob3RFbmQgLSBzdGFydDsKKworICAgIGlmIChzdGFydCA8
IDApCisgICAgICAgIHN0YXJ0ID0gMDsKKyAgICBpZiAobGVuZ3RoIDwgMCkKKyAgICAgICAgbGVu
Z3RoID0gMDsKK30KICNlbmRpZgogCi1CbG9iOjpCbG9iKGNvbnN0IFN0cmluZyYgcGF0aCkKKy8v
IEZpbGVCbG9iIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK0ZpbGVCbG9iOjpGaWxlQmxvYihjb25zdCBTdHJpbmcm
IHBhdGgpCiAgICAgOiBtX3BhdGgocGF0aCkKICNpZiBFTkFCTEUoQkxPQl9TTElDRSkKICAgICAs
IG1fc3RhcnQoMCkKQEAgLTUzLDcgKzczLDcgQEAgQmxvYjo6QmxvYihjb25zdCBTdHJpbmcmIHBh
dGgpCiB9CiAKICNpZiBFTkFCTEUoQkxPQl9TTElDRSkKLUJsb2I6OkJsb2IoY29uc3QgU3RyaW5n
JiBwYXRoLCBsb25nIGxvbmcgc3RhcnQsIGxvbmcgbG9uZyBsZW5ndGgsIGxvbmcgbG9uZyBzbmFw
c2hvdFNpemUsIGRvdWJsZSBzbmFwc2hvdE1vZGlmaWNhdGlvblRpbWUpCitGaWxlQmxvYjo6Rmls
ZUJsb2IoY29uc3QgU3RyaW5nJiBwYXRoLCBsb25nIGxvbmcgc3RhcnQsIGxvbmcgbG9uZyBsZW5n
dGgsIGxvbmcgbG9uZyBzbmFwc2hvdFNpemUsIGRvdWJsZSBzbmFwc2hvdE1vZGlmaWNhdGlvblRp
bWUpCiAgICAgOiBtX3BhdGgocGF0aCkKICAgICAsIG1fc3RhcnQoc3RhcnQpCiAgICAgLCBtX2xl
bmd0aChsZW5ndGgpCkBAIC02MSwxMSArODEsMTIgQEAgQmxvYjo6QmxvYihjb25zdCBTdHJpbmcm
IHBhdGgsIGxvbmcgbG9uZyBzdGFydCwgbG9uZyBsb25nIGxlbmd0aCwgbG9uZyBsb25nIHNuYXAK
ICAgICAsIG1fc25hcHNob3RTaXplKHNuYXBzaG90U2l6ZSkKICAgICAsIG1fc25hcHNob3RNb2Rp
ZmljYXRpb25UaW1lKHNuYXBzaG90TW9kaWZpY2F0aW9uVGltZSkKIHsKLSAgICBBU1NFUlQoc3Rh
cnQgPj0gMCAmJiBsZW5ndGggPj0gMCAmJiBzdGFydCArIGxlbmd0aCA8PSBzbmFwc2hvdFNpemUg
JiYgc25hcHNob3RNb2RpZmljYXRpb25UaW1lKTsKKyAgICAvLyBzbmFwc2hvdE1vZGlmaWNhdGlv
blRpbWUgY2FuIGJlIDAgd2hlbiB0aGUgZmlsZSBpcyBhbHJlYWR5IHJlbW92ZWQuCisgICAgQVNT
RVJUKHN0YXJ0ID49IDAgJiYgbGVuZ3RoID49IDAgJiYgc3RhcnQgKyBsZW5ndGggPD0gc25hcHNo
b3RTaXplKTsKIH0KICNlbmRpZgogCi11bnNpZ25lZCBsb25nIGxvbmcgQmxvYjo6c2l6ZSgpIGNv
bnN0Cit1bnNpZ25lZCBsb25nIGxvbmcgRmlsZUJsb2I6OnNpemUoKSBjb25zdAogewogICAgIC8v
IEZJWE1FOiBKYXZhU2NyaXB0IGNhbm5vdCByZXByZXNlbnQgc2l6ZXMgYXMgbGFyZ2UgYXMgdW5z
aWduZWQgbG9uZyBsb25nLCB3ZSBuZWVkIHRvCiAgICAgLy8gY29tZSB1cCB3aXRoIGFuIGV4Y2Vw
dGlvbiB0byB0aHJvdyBpZiBmaWxlIHNpemUgaXMgbm90IHJlcHJlc2V0YWJsZS4KQEAgLTc5LDgg
KzEwMCwxNiBAQCB1bnNpZ25lZCBsb25nIGxvbmcgQmxvYjo6c2l6ZSgpIGNvbnN0CiAgICAgcmV0
dXJuIHN0YXRpY19jYXN0PHVuc2lnbmVkIGxvbmcgbG9uZz4oc2l6ZSk7CiB9CiAKK2xvbmcgbG9u
ZyBGaWxlQmxvYjo6cmVhZChjaGFyKiwgbG9uZyBsb25nKSBjb25zdAoreworICAgIC8vIEZJWE1F
CisgICAgLy8gaGFuZGxlID0gb3BlbkZpbGUobV9wYXRoLCBPcGVuRm9yUmVhZCk7CisgICAgLy8g
cmV0dXJuIHJlYWRGcm9tRmlsZShoYW5kbGUsIGRhdGEsIGxlbmd0aCk7CisgICAgcmV0dXJuIC0x
OworfQorCiAjaWYgRU5BQkxFKEJMT0JfU0xJQ0UpCi1QYXNzUmVmUHRyPEJsb2I+IEJsb2I6OnNs
aWNlKGxvbmcgbG9uZyBzdGFydCwgbG9uZyBsb25nIGxlbmd0aCkgY29uc3QKK1Bhc3NSZWZQdHI8
QmxvYj4gRmlsZUJsb2I6OnNsaWNlKGxvbmcgbG9uZyBzdGFydCwgbG9uZyBsb25nIGxlbmd0aCkg
Y29uc3QKIHsKICAgICAvLyBXaGVuIHdlIHNsaWNlIGEgZmlsZSBmb3IgdGhlIGZpcnN0IHRpbWUs
IHdlIG9idGFpbiBhIHNuYXBzaG90IG9mIHRoZSBmaWxlIGJ5IGNhcHR1cmluZyBpdHMgY3VycmVu
dCBzaXplIGFuZCBtb2RpZmljYXRpb24gdGltZS4KICAgICAvLyBUaGUgbW9kaWZpY2F0aW9uIHRp
bWUgd2lsbCBiZSB1c2VkIHRvIHZlcmlmeSBpZiB0aGUgZmlsZSBoYXMgYmVlbiBjaGFuZ2VkIG9y
IG5vdCwgd2hlbiB0aGUgdW5kZXJseWluZyBkYXRhIGFyZSBhY2Nlc3NlZC4KQEAgLTk5LDIwICsx
MjgsMTA2IEBAIFBhc3NSZWZQdHI8QmxvYj4gQmxvYjo6c2xpY2UobG9uZyBsb25nIHN0YXJ0LCBs
b25nIGxvbmcgbGVuZ3RoKSBjb25zdAogICAgICAgICAgICAgc25hcHNob3RNb2RpZmljYXRpb25U
aW1lID0gbW9kaWZpY2F0aW9uVGltZTsKICAgICB9CiAKLSAgICAvLyBDbGFtcCB0aGUgcmFuZ2Ug
aWYgaXQgZXhjZWVkcyB0aGUgc2l6ZSBsaW1pdC4KKyAgICBjbGFtcFNsaWNlUmFuZ2Uoc3RhcnQs
IGxlbmd0aCwgbV9zdGFydCwgc25hcHNob3RTaXplKTsKKworICAgIHJldHVybiBhZG9wdFJlZihu
ZXcgRmlsZUJsb2IobV9wYXRoLCBzdGFydCwgbGVuZ3RoLCBzbmFwc2hvdFNpemUsIHNuYXBzaG90
TW9kaWZpY2F0aW9uVGltZSkpOworfQorI2VuZGlmCisKKy8vIERhdGFCbG9iIC0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
CisKK0RhdGFCbG9iOjpEYXRhQmxvYihQYXNzUmVmUHRyPEJ5dGVTdG9yZT4gZGF0YSkKKyAgICA6
IG1fZGF0YShkYXRhKQorICAgICwgbV9zdGFydCgwKQorICAgICwgbV9sZW5ndGgobV9kYXRhLT5z
aXplKCkpCit7Cit9CisKKyNpZiBFTkFCTEUoQkxPQl9TTElDRSkKK0RhdGFCbG9iOjpEYXRhQmxv
YihQYXNzUmVmUHRyPEJ5dGVTdG9yZT4gZGF0YSwgbG9uZyBsb25nIHN0YXJ0LCBsb25nIGxvbmcg
bGVuZ3RoKQorICAgIDogbV9kYXRhKGRhdGEpCisgICAgLCBtX3N0YXJ0KHN0YXRpY19jYXN0PHNp
emVfdD4oc3RhcnQpKQorICAgICwgbV9sZW5ndGgoc3RhdGljX2Nhc3Q8c2l6ZV90PihsZW5ndGgp
KQoreworICAgIEFTU0VSVChzdGFydCA+PSAwICYmIGxlbmd0aCA+PSAwICYmIG1fc3RhcnQgKyBt
X2xlbmd0aCA8PSBtX2RhdGEtPnNpemUoKSk7Cit9CisjZW5kaWYKKworbG9uZyBsb25nIERhdGFC
bG9iOjpyZWFkKGNoYXIqIG91dCwgbG9uZyBsb25nIG1heExlbmd0aCkgY29uc3QKK3sKKyAgICBp
ZiAoIW1heExlbmd0aCkKKyAgICAgICAgcmV0dXJuIDA7CisgICAgaWYgKG1heExlbmd0aCA+IGxl
bmd0aCgpKQorICAgICAgICBtYXhMZW5ndGggPSBsZW5ndGgoKTsKKyAgICBtZW1jcHkob3V0LCBt
X2RhdGEtPmRhdGEoKSArIG1fc3RhcnQsIHN0YXRpY19jYXN0PHNpemVfdD4obWF4TGVuZ3RoKSk7
CisgICAgcmV0dXJuIG1heExlbmd0aDsKK30KKworUGFzc1JlZlB0cjxCbG9iPiBEYXRhQmxvYjo6
c2xpY2UobG9uZyBsb25nIHN0YXJ0LCBsb25nIGxvbmcgbGVuZ3RoKSBjb25zdAoreworICAgIGNs
YW1wU2xpY2VSYW5nZShzdGFydCwgbGVuZ3RoLCBtX3N0YXJ0LCBtX3N0YXJ0ICsgbV9sZW5ndGgp
OworICAgIHJldHVybiBhZG9wdFJlZihzdGF0aWNfY2FzdDxCbG9iKj4obmV3IERhdGFCbG9iKG1f
ZGF0YSwgc3RhcnQsIGxlbmd0aCkpKTsKK30KKworLy8gQ29tYmluZWRCbG9iIC0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKwor
Q29tYmluZWRCbG9iOjpDb21iaW5lZEJsb2IoKQorICAgIDogbV90b3RhbFNpemUoMCkKK3sKK30K
KworI2lmIEVOQUJMRShCTE9CX1NMSUNFKQorQ29tYmluZWRCbG9iOjpDb21iaW5lZEJsb2IoY29u
c3QgVmVjdG9yPFJlZlB0cjxCbG9iPiA+JiBibG9iTGlzdCwgbG9uZyBsb25nIHN0YXJ0LCBsb25n
IGxvbmcgbGVuZ3RoKQorICAgIDogbV90b3RhbFNpemUoMCkKK3sKKyAgICB1bnNpZ25lZCBsb25n
IGxvbmcgb2Zmc2V0ID0gc3RhcnQ7CiAgICAgaWYgKHN0YXJ0IDwgMCkKLSAgICAgICAgc3RhcnQg
PSAwOworICAgICAgICBvZmZzZXQgPSAwOwogICAgIGlmIChsZW5ndGggPCAwKQotICAgICAgICBs
ZW5ndGggPSAwOworICAgICAgICByZXR1cm47CisgICAgc2l6ZV90IGkgPSAwOworICAgIGZvciAo
OyBpIDwgYmxvYkxpc3Quc2l6ZSgpICYmIG9mZnNldCA+PSBibG9iTGlzdFtpXS0+c2l6ZSgpOyAr
K2kpCisgICAgICAgIG9mZnNldCAtPSBibG9iTGlzdFtpXS0+c2l6ZSgpOworICAgIGZvciAoOyBs
ZW5ndGggPiAwICYmIGkgPCBibG9iTGlzdC5zaXplKCk7ICsraSkgeworICAgICAgICBhcHBlbmRC
bG9iKGJsb2JMaXN0W2ldLT5zbGljZShvZmZzZXQsIGxlbmd0aCkpOworICAgICAgICBsZW5ndGgg
LT0gbV9ibG9iTGlzdC5sYXN0KCktPnNpemUoKTsKKyAgICAgICAgaWYgKG9mZnNldCA+IDApCisg
ICAgICAgICAgICBvZmZzZXQgPSAwOworICAgIH0KK30KKyNlbmRpZgogCi0gICAgaWYgKHN0YXJ0
ID4gc25hcHNob3RTaXplKSB7Ci0gICAgICAgIHN0YXJ0ID0gMDsKLSAgICAgICAgbGVuZ3RoID0g
MDsKLSAgICB9IGVsc2UgaWYgKHN0YXJ0ICsgbGVuZ3RoID4gc25hcHNob3RTaXplKQotICAgICAg
ICBsZW5ndGggPSBzbmFwc2hvdFNpemUgLSBzdGFydDsKK3ZvaWQgQ29tYmluZWRCbG9iOjphcHBl
bmRCbG9iKFBhc3NSZWZQdHI8QmxvYj4gYmxvYikKK3sKKyAgICBpZiAoIWJsb2IgfHwgIWJsb2It
PnNpemUoKSkKKyAgICAgICAgcmV0dXJuOworICAgIGlmIChibG9iLT5pc0NvbWJpbmVkKCkpIHsK
KyAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBibG9iLT50b0NvbWJpbmVkQmxvYigpLT5t
X2Jsb2JMaXN0LnNpemUoKTsgKytpKQorICAgICAgICAgICAgYXBwZW5kQmxvYihibG9iLT50b0Nv
bWJpbmVkQmxvYigpLT5tX2Jsb2JMaXN0W2ldKTsKKyAgICB9IGVsc2UgeworICAgICAgICBtX3Rv
dGFsU2l6ZSArPSBibG9iLT5zaXplKCk7CisgICAgICAgIG1fYmxvYkxpc3QuYXBwZW5kKGJsb2Ip
OworICAgIH0KK30KIAotICAgIHJldHVybiBhZG9wdFJlZihuZXcgQmxvYihtX3BhdGgsIG1fc3Rh
cnQgKyBzdGFydCwgbGVuZ3RoLCBzbmFwc2hvdFNpemUsIHNuYXBzaG90TW9kaWZpY2F0aW9uVGlt
ZSkpOworUGFzc1JlZlB0cjxCbG9iPiBDb21iaW5lZEJsb2I6OnNsaWNlKGxvbmcgbG9uZyBzdGFy
dCwgbG9uZyBsb25nIGxlbmd0aCkgY29uc3QKK3sKKyAgICBjbGFtcFNsaWNlUmFuZ2Uoc3RhcnQs
IGxlbmd0aCwgMCwgbV90b3RhbFNpemUpOworICAgIHJldHVybiBzdGF0aWNfY2FzdDxCbG9iKj4o
bmV3IENvbWJpbmVkQmxvYihtX2Jsb2JMaXN0LCBzdGFydCwgbGVuZ3RoKSk7Cit9CisKK2xvbmcg
bG9uZyBDb21iaW5lZEJsb2I6OnJlYWQoY2hhciogb3V0LCBsb25nIGxvbmcgbWF4TGVuZ3RoKSBj
b25zdAoreworICAgIGlmIChtYXhMZW5ndGggPiBtX3RvdGFsU2l6ZSkKKyAgICAgICAgbWF4TGVu
Z3RoID0gc3RhdGljX2Nhc3Q8c2l6ZV90PihtX3RvdGFsU2l6ZSk7CisgICAgbG9uZyBsb25nIHRv
dGFsU2l6ZSA9IDA7CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtX2Jsb2JMaXN0LnNpemUo
KTsgKytpKSB7CisgICAgICAgIGxvbmcgbG9uZyBzaXplID0gbV9ibG9iTGlzdC5hdChpKS0+c2l6
ZSgpOworICAgICAgICBpZiAodG90YWxTaXplICsgc2l6ZSA+IG1heExlbmd0aCkKKyAgICAgICAg
ICAgIHNpemUgPSBtYXhMZW5ndGggLSB0b3RhbFNpemU7CisgICAgICAgIHRvdGFsU2l6ZSArPSBt
X2Jsb2JMaXN0LmF0KGkpLT5yZWFkKG91dCArIHRvdGFsU2l6ZSwgc2l6ZSk7CisgICAgfQorICAg
IHJldHVybiB0b3RhbFNpemU7CiB9Ci0jZW5kaWYKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpk
aWZmIC0tZ2l0IGEvV2ViQ29yZS9odG1sL0Jsb2IuaCBiL1dlYkNvcmUvaHRtbC9CbG9iLmgKaW5k
ZXggNjEwODQyZS4uNThjM2IxMCAxMDA2NDQKLS0tIGEvV2ViQ29yZS9odG1sL0Jsb2IuaAorKysg
Yi9XZWJDb3JlL2h0bWwvQmxvYi5oCkBAIC0zMSw1MiArMzEsODMgQEAKICNpZm5kZWYgQmxvYl9o
CiAjZGVmaW5lIEJsb2JfaAogCi0jaW5jbHVkZSAiRXhjZXB0aW9uQ29kZS5oIgogI2luY2x1ZGUg
IlBsYXRmb3JtU3RyaW5nLmgiCiAjaW5jbHVkZSA8dGltZS5oPgogI2luY2x1ZGUgPHd0Zi9QYXNz
UmVmUHRyLmg+CiAjaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4KKyNpbmNsdWRlIDx3dGYvVGhy
ZWFkaW5nLmg+CisjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7
CiAKLWNsYXNzIEJsb2IgOiBwdWJsaWMgUmVmQ291bnRlZDxCbG9iPiB7CitjbGFzcyBGaWxlQmxv
YjsKK2NsYXNzIERhdGFCbG9iOworY2xhc3MgQ29tYmluZWRCbG9iOworCitjbGFzcyBCbG9iIDog
cHVibGljIFRocmVhZFNhZmVTaGFyZWQ8QmxvYj4gewogcHVibGljOgogI2lmIEVOQUJMRShCTE9C
X1NMSUNFKQogICAgIHN0YXRpYyBjb25zdCBpbnQgdG9FbmRPZkZpbGU7CiAgICAgc3RhdGljIGNv
bnN0IGRvdWJsZSBkb05vdENoZWNrRmlsZUNoYW5nZTsKICNlbmRpZgogCi0gICAgc3RhdGljIFBh
c3NSZWZQdHI8QmxvYj4gY3JlYXRlKGNvbnN0IFN0cmluZyYgcGF0aCkKLSAgICB7Ci0gICAgICAg
IHJldHVybiBhZG9wdFJlZihuZXcgQmxvYihwYXRoKSk7Ci0gICAgfQotCiAgICAgdmlydHVhbCB+
QmxvYigpIHsgfQorICAgIHZpcnR1YWwgdW5zaWduZWQgbG9uZyBsb25nIHNpemUoKSBjb25zdCA9
IDA7CisgICAgdmlydHVhbCBsb25nIGxvbmcgcmVhZChjaGFyKiBvdXQsIGxvbmcgbG9uZyBtYXhM
ZW5ndGgpIGNvbnN0ID0gMDsKKworICAgIHZpcnR1YWwgYm9vbCBpc1VzaW5nRmlsZSgpIGNvbnN0
IHsgcmV0dXJuIGZhbHNlOyB9CisgICAgdmlydHVhbCBib29sIGlzQ29tYmluZWQoKSBjb25zdCB7
IHJldHVybiBmYWxzZTsgfQorCisgICAgdmlydHVhbCBGaWxlQmxvYiogdG9GaWxlQmxvYigpIHsg
cmV0dXJuIDA7IH0KKyAgICB2aXJ0dWFsIENvbWJpbmVkQmxvYiogdG9Db21iaW5lZEJsb2IoKSB7
IHJldHVybiAwOyB9CiAKICNpZiBFTkFCTEUoQkxPQl9TTElDRSkKLSAgICBQYXNzUmVmUHRyPEJs
b2I+IHNsaWNlKGxvbmcgbG9uZyBzdGFydCwgbG9uZyBsb25nIGxlbmd0aCkgY29uc3Q7CisgICAg
dmlydHVhbCBQYXNzUmVmUHRyPEJsb2I+IHNsaWNlKGxvbmcgbG9uZyBzdGFydCwgbG9uZyBsb25n
IGxlbmd0aCkgY29uc3QgPSAwOworICAgIHZpcnR1YWwgbG9uZyBsb25nIHN0YXJ0KCkgY29uc3Qg
eyByZXR1cm4gMDsgfQorICAgIHZpcnR1YWwgbG9uZyBsb25nIGxlbmd0aCgpIGNvbnN0IHsgcmV0
dXJuIHNpemUoKTsgfQorICAgIHZpcnR1YWwgZG91YmxlIG1vZGlmaWNhdGlvblRpbWUoKSBjb25z
dCB7IHJldHVybiBkb05vdENoZWNrRmlsZUNoYW5nZTsgfQogI2VuZGlmCiAKK3Byb3RlY3RlZDoK
KyNpZiBFTkFCTEUoQkxPQl9TTElDRSkKKyAgICBzdGF0aWMgdm9pZCBjbGFtcFNsaWNlUmFuZ2Uo
bG9uZyBsb25nJiBzdGFydCwgbG9uZyBsb25nJiBsZW5ndGgsIGxvbmcgbG9uZyBzbmFwc2hvdFN0
YXJ0LCBsb25nIGxvbmcgc25hcHNob3RFbmQpOworI2VuZGlmCit9OworCisvLyBGaWxlQmxvYiAt
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLQorCitjbGFzcyBGaWxlQmxvYiA6IHB1YmxpYyBCbG9iIHsKK3B1YmxpYzoKKyAg
ICBzdGF0aWMgUGFzc1JlZlB0cjxCbG9iPiBjcmVhdGUoY29uc3QgU3RyaW5nJiBwYXRoKQorICAg
IHsKKyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKHN0YXRpY19jYXN0PEJsb2IqPihuZXcgRmlsZUJs
b2IocGF0aCkpKTsKKyAgICB9CisKICAgICBjb25zdCBTdHJpbmcmIHBhdGgoKSBjb25zdCB7IHJl
dHVybiBtX3BhdGg7IH0KLSAgICB1bnNpZ25lZCBsb25nIGxvbmcgc2l6ZSgpIGNvbnN0OworCisg
ICAgdmlydHVhbCB1bnNpZ25lZCBsb25nIGxvbmcgc2l6ZSgpIGNvbnN0OworICAgIHZpcnR1YWwg
bG9uZyBsb25nIHJlYWQoY2hhciogb3V0LCBsb25nIGxvbmcgbWF4TGVuZ3RoKSBjb25zdDsKKwor
ICAgIHZpcnR1YWwgYm9vbCBpc1VzaW5nRmlsZSgpIGNvbnN0IHsgcmV0dXJuIHRydWU7IH0KKyAg
ICB2aXJ0dWFsIEZpbGVCbG9iKiB0b0ZpbGVCbG9iKCkgeyByZXR1cm4gdGhpczsgfQorCiAjaWYg
RU5BQkxFKEJMT0JfU0xJQ0UpCi0gICAgbG9uZyBsb25nIHN0YXJ0KCkgY29uc3QgeyByZXR1cm4g
bV9zdGFydDsgfQotICAgIGxvbmcgbG9uZyBsZW5ndGgoKSBjb25zdCB7IHJldHVybiBtX2xlbmd0
aDsgfQotICAgIGRvdWJsZSBtb2RpZmljYXRpb25UaW1lKCkgY29uc3QgeyByZXR1cm4gbV9zbmFw
c2hvdE1vZGlmaWNhdGlvblRpbWU7IH0KKyAgICB2aXJ0dWFsIGxvbmcgbG9uZyBzdGFydCgpIGNv
bnN0IHsgcmV0dXJuIG1fc3RhcnQ7IH0KKyAgICB2aXJ0dWFsIGxvbmcgbG9uZyBsZW5ndGgoKSBj
b25zdCB7IHJldHVybiBtX2xlbmd0aDsgfQorICAgIHZpcnR1YWwgZG91YmxlIG1vZGlmaWNhdGlv
blRpbWUoKSBjb25zdCB7IHJldHVybiBtX3NuYXBzaG90TW9kaWZpY2F0aW9uVGltZTsgfQogI2Vu
ZGlmCiAKIHByb3RlY3RlZDoKLSAgICBCbG9iKGNvbnN0IFN0cmluZyYgcGF0aCk7CisgICAgRmls
ZUJsb2IoY29uc3QgU3RyaW5nJiBwYXRoKTsKIAogcHJpdmF0ZToKICNpZiBFTkFCTEUoQkxPQl9T
TElDRSkKLSAgICBCbG9iKGNvbnN0IFN0cmluZyYgcGF0aCwgbG9uZyBsb25nIHN0YXJ0LCBsb25n
IGxvbmcgbGVuZ3RoLCBsb25nIGxvbmcgc25hcHNob3RTaXplLCBkb3VibGUgc25hcHNob3RNb2Rp
ZmljYXRpb25UaW1lKTsKLSNlbmRpZgorICAgIEZpbGVCbG9iKGNvbnN0IFN0cmluZyYgcGF0aCwg
bG9uZyBsb25nIHN0YXJ0LCBsb25nIGxvbmcgbGVuZ3RoLCBsb25nIGxvbmcgc25hcHNob3RTaXpl
LCBkb3VibGUgc25hcHNob3RNb2RpZmljYXRpb25UaW1lKTsKKyAgICB2aXJ0dWFsIFBhc3NSZWZQ
dHI8QmxvYj4gc2xpY2UobG9uZyBsb25nIHN0YXJ0LCBsb25nIGxvbmcgbGVuZ3RoKSBjb25zdDsK
IAotICAgIC8vIFRoZSB1bmRlcmx5aW5nIHBhdGggb2YgdGhlIGZpbGUtYmFzZWQgYmxvYi4gCisg
ICAgLy8gVGhlIHVuZGVybHlpbmcgcGF0aCBvZiB0aGUgZmlsZS1iYXNlZCBibG9iLgogICAgIFN0
cmluZyBtX3BhdGg7CiAKLSNpZiBFTkFCTEUoQkxPQl9TTElDRSkKICAgICAvLyBUaGUgc3RhcnRp
bmcgcG9zaXRpb24gb2YgdGhlIGZpbGUtYmFzZWQgYmxvYi4KICAgICBsb25nIGxvbmcgbV9zdGFy
dDsKIApAQCAtOTQsNiArMTI1LDc3IEBAIHByaXZhdGU6CiAjZW5kaWYKIH07CiAKKy8vIERhdGFC
bG9iIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tCisKK2NsYXNzIERhdGFCbG9iIDogcHVibGljIEJsb2IgeworcHVibGlj
OgorICAgIGNsYXNzIEJ5dGVTdG9yZSA6IHB1YmxpYyBSZWZDb3VudGVkPEJ5dGVTdG9yZT4gewor
ICAgIHB1YmxpYzoKKyAgICAgICAgc3RhdGljIFBhc3NSZWZQdHI8Qnl0ZVN0b3JlPiBjcmVhdGUo
c2l6ZV90IHNpemUpIHsgcmV0dXJuIGFkb3B0UmVmKG5ldyBCeXRlU3RvcmUoc2l6ZSkpOyB9Cisg
ICAgICAgIHNpemVfdCBzaXplKCkgY29uc3QgeyByZXR1cm4gbV9kYXRhLnNpemUoKTsgfQorICAg
ICAgICBjaGFyKiBkYXRhKCkgeyByZXR1cm4gbV9kYXRhLmRhdGEoKTsgfQorICAgIHByaXZhdGU6
CisgICAgICAgIEJ5dGVTdG9yZShzaXplX3Qgc2l6ZSkgOiBtX2RhdGEoc2l6ZSkgeyB9CisgICAg
ICAgIFZlY3RvcjxjaGFyPiBtX2RhdGE7CisgICAgfTsKKworICAgIHN0YXRpYyBQYXNzUmVmUHRy
PEJsb2I+IGNyZWF0ZShQYXNzUmVmUHRyPEJ5dGVTdG9yZT4gZGF0YSkKKyAgICB7CisgICAgICAg
IHJldHVybiBhZG9wdFJlZihzdGF0aWNfY2FzdDxCbG9iKj4obmV3IERhdGFCbG9iKGRhdGEpKSk7
CisgICAgfQorCisgICAgdmlydHVhbCB1bnNpZ25lZCBsb25nIGxvbmcgc2l6ZSgpIGNvbnN0IHsg
cmV0dXJuIG1fbGVuZ3RoOyB9CisgICAgdmlydHVhbCBsb25nIGxvbmcgcmVhZChjaGFyKiBvdXQs
IGxvbmcgbG9uZyBtYXhMZW5ndGgpIGNvbnN0OworCisjaWYgRU5BQkxFKEJMT0JfU0xJQ0UpCisg
ICAgdmlydHVhbCBsb25nIGxvbmcgc3RhcnQoKSBjb25zdCB7IHJldHVybiBtX3N0YXJ0OyB9Cisg
ICAgdmlydHVhbCBsb25nIGxvbmcgbGVuZ3RoKCkgY29uc3QgeyByZXR1cm4gbV9sZW5ndGg7IH0K
KyAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8QmxvYj4gc2xpY2UobG9uZyBsb25nIHN0YXJ0LCBsb25n
IGxvbmcgbGVuZ3RoKSBjb25zdDsKKyNlbmRpZgorCitwcml2YXRlOgorICAgIERhdGFCbG9iKFBh
c3NSZWZQdHI8Qnl0ZVN0b3JlPik7CisjaWYgRU5BQkxFKEJMT0JfU0xJQ0UpCisgICAgRGF0YUJs
b2IoUGFzc1JlZlB0cjxCeXRlU3RvcmU+LCBsb25nIGxvbmcgc3RhcnQsIGxvbmcgbG9uZyBsZW5n
dGgpOworI2VuZGlmCisKKyAgICBSZWZQdHI8Qnl0ZVN0b3JlPiBtX2RhdGE7CisgICAgY29uc3Qg
c2l6ZV90IG1fc3RhcnQ7CisgICAgY29uc3Qgc2l6ZV90IG1fbGVuZ3RoOworfTsKKworLy8gQ29t
YmluZWRCbG9iIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0KKworY2xhc3MgQ29tYmluZWRCbG9iIDogcHVibGljIEJsb2Igewor
cHVibGljOgorICAgIHN0YXRpYyBQYXNzUmVmUHRyPEJsb2I+IGNyZWF0ZSgpCisgICAgeworICAg
ICAgICByZXR1cm4gYWRvcHRSZWYoc3RhdGljX2Nhc3Q8QmxvYio+KG5ldyBDb21iaW5lZEJsb2Io
KSkpOworICAgIH0KKworICAgIHZpcnR1YWwgdW5zaWduZWQgbG9uZyBsb25nIHNpemUoKSBjb25z
dCB7IHJldHVybiBtX3RvdGFsU2l6ZTsgfQorICAgIHZpcnR1YWwgbG9uZyBsb25nIHJlYWQoY2hh
ciogb3V0LCBsb25nIGxvbmcgbWF4TGVuZ3RoKSBjb25zdDsKKworICAgIHZpcnR1YWwgYm9vbCBp
c0NvbWJpbmVkKCkgY29uc3QgeyByZXR1cm4gdHJ1ZTsgfQorICAgIHZpcnR1YWwgQ29tYmluZWRC
bG9iKiB0b0NvbWJpbmVkQmxvYigpIHsgcmV0dXJuIHRoaXM7IH0KKworICAgIHZvaWQgYXBwZW5k
QmxvYihQYXNzUmVmUHRyPEJsb2I+IGJsb2IpOworCisjaWYgRU5BQkxFKEJMT0JfU0xJQ0UpCisg
ICAgdmlydHVhbCBsb25nIGxvbmcgbGVuZ3RoKCkgY29uc3QgeyByZXR1cm4gbV90b3RhbFNpemU7
IH0KKyAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8QmxvYj4gc2xpY2UobG9uZyBsb25nIHN0YXJ0LCBs
b25nIGxvbmcgbGVuZ3RoKSBjb25zdDsKKyNlbmRpZgorCitwcml2YXRlOgorICAgIENvbWJpbmVk
QmxvYigpOworI2lmIEVOQUJMRShCTE9CX1NMSUNFKQorICAgIENvbWJpbmVkQmxvYihjb25zdCBW
ZWN0b3I8UmVmUHRyPEJsb2I+ID4mIGJsb2JMaXN0LCBsb25nIGxvbmcgc3RhcnQsIGxvbmcgbG9u
ZyBsZW5ndGgpOworI2VuZGlmCisKKyAgICBWZWN0b3I8UmVmUHRyPEJsb2I+ID4gbV9ibG9iTGlz
dDsKKyAgICBsb25nIGxvbmcgbV90b3RhbFNpemU7Cit9OworCiB9IC8vIG5hbWVzcGFjZSBXZWJD
b3JlCiAKICNlbmRpZiAvLyBCbG9iX2gKZGlmZiAtLWdpdCBhL1dlYkNvcmUvaHRtbC9CbG9iQnVp
bGRlci5jcHAgYi9XZWJDb3JlL2h0bWwvQmxvYkJ1aWxkZXIuY3BwCm5ldyBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDAwMDAwMDAuLmE2MWMzY2YKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJDb3JlL2h0
bWwvQmxvYkJ1aWxkZXIuY3BwCkBAIC0wLDAgKzEsMTQyIEBACisvKgorICogQ29weXJpZ2h0IChD
KSAyMDEwIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMgYXJlCisgKiBtZXQ6CisgKgorICogICAgICogUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
KyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqIGRpc3RyaWJ1dGlvbi4KKyAq
ICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBp
dHMKKyAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJv
ZHVjdHMgZGVyaXZlZCBmcm9tCisgKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJp
b3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5E
IEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisg
KiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJ
TiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisgKiBPV05FUiBPUiBDT05UUklCVVRPUlMg
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJ
QUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QKKyAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgor
I2luY2x1ZGUgIkJsb2JCdWlsZGVyLmgiCisKKyNpbmNsdWRlICJBdG9taWNTdHJpbmcuaCIKKyNp
bmNsdWRlICJCbG9iLmgiCisjaW5jbHVkZSAiU3RyaW5nSGFzaC5oIgorI2luY2x1ZGUgPHd0Zi9I
YXNoTWFwLmg+CisjaW5jbHVkZSA8d3RmL1N0ZExpYkV4dHJhcy5oPgorI2luY2x1ZGUgPHd0Zi90
ZXh0L0NTdHJpbmcuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBCbG9iQnVpbGRl
cjo6QmxvYkRhdGFXcmFwcGVyIHsKK3B1YmxpYzoKKyAgICBCbG9iRGF0YVdyYXBwZXIoUGFzc1Jl
ZlB0cjxCbG9iPiBibG9iKSA6IG1fYmxvYihibG9iKSB7IH0KKyAgICBCbG9iRGF0YVdyYXBwZXIo
U3RyaW5nIHRleHQpIDogbV90ZXh0KHRleHQpIHsgfQorICAgIFBhc3NSZWZQdHI8QmxvYj4gZ2V0
QmxvYihFbmRpbmdzVHlwZSBlbmRpbmdzKSBjb25zdDsKK3ByaXZhdGU6CisgICAgUmVmUHRyPEJs
b2I+IG1fYmxvYjsKKyAgICBTdHJpbmcgbV90ZXh0OworfTsKKworQmxvYkJ1aWxkZXI6OkJsb2JC
dWlsZGVyKCkKKyAgICA6IG1fZW5kaW5ncyhFbmRpbmdUcmFuc3BhcmVudCkKK3sKK30KKworQmxv
YkJ1aWxkZXI6On5CbG9iQnVpbGRlcigpCit7Cit9CisKK2Jvb2wgQmxvYkJ1aWxkZXI6OmFwcGVu
ZFN0cmluZyhjb25zdCBTdHJpbmcmIHRleHQsIEV4Y2VwdGlvbkNvZGUmKQoreworICAgIG1fYmxv
YkRhdGFMaXN0LmFwcGVuZChCbG9iRGF0YVdyYXBwZXIodGV4dCkpOworICAgIHJldHVybiB0cnVl
OworfQorCitib29sIEJsb2JCdWlsZGVyOjphcHBlbmRCbG9iKFBhc3NSZWZQdHI8QmxvYj4gYmxv
YikKK3sKKyAgICBpZiAoIWJsb2IgfHwgIWJsb2ItPnNpemUoKSkKKyAgICAgICAgcmV0dXJuIHRy
dWU7CisgICAgbV9ibG9iRGF0YUxpc3QuYXBwZW5kKEJsb2JEYXRhV3JhcHBlcihibG9iKSk7Cisg
ICAgcmV0dXJuIHRydWU7Cit9CisKK1Bhc3NSZWZQdHI8QmxvYj4gQmxvYkJ1aWxkZXI6OmdldEJs
b2IoKSBjb25zdAoreworICAgIGlmIChtX2Jsb2JEYXRhTGlzdC5zaXplKCkgPT0gMSkKKyAgICAg
ICAgcmV0dXJuIG1fYmxvYkRhdGFMaXN0Lmxhc3QoKS5nZXRCbG9iKG1fZW5kaW5ncyk7CisKKyAg
ICBSZWZQdHI8QmxvYj4gYmxvYiA9IENvbWJpbmVkQmxvYjo6Y3JlYXRlKCk7CisgICAgZm9yIChz
aXplX3QgaSA9IDA7IGkgPCBtX2Jsb2JEYXRhTGlzdC5zaXplKCk7ICsraSkKKyAgICAgICAgYmxv
Yi0+dG9Db21iaW5lZEJsb2IoKS0+YXBwZW5kQmxvYihtX2Jsb2JEYXRhTGlzdFtpXS5nZXRCbG9i
KG1fZW5kaW5ncykpOworICAgIHJldHVybiBibG9iLnJlbGVhc2UoKTsKK30KKwordm9pZCBCbG9i
QnVpbGRlcjo6c2V0RW5kaW5ncyhjb25zdCBBdG9taWNTdHJpbmcmIHR5cGUpCit7CisgICAgREVG
SU5FX1NUQVRJQ19MT0NBTChBdG9taWNTdHJpbmcsIHRyYW5zcGFyZW50LCAoInRyYW5zcGFyZW50
IikpOworICAgIERFRklORV9TVEFUSUNfTE9DQUwoQXRvbWljU3RyaW5nLCBuYXRpdmUsICgibmF0
aXZlIikpOworICAgIERFRklORV9TVEFUSUNfTE9DQUwoQXRvbWljU3RyaW5nLCBsZiwgKCJsZiIp
KTsKKyAgICBERUZJTkVfU1RBVElDX0xPQ0FMKEF0b21pY1N0cmluZywgY3IsICgiY3IiKSk7Cisg
ICAgREVGSU5FX1NUQVRJQ19MT0NBTChBdG9taWNTdHJpbmcsIGNybGYsICgiY3JsZiIpKTsKKwor
ICAgIGlmICh0eXBlID09IHRyYW5zcGFyZW50KQorICAgICAgICBtX2VuZGluZ3MgPSBFbmRpbmdU
cmFuc3BhcmVudDsKKyAgICBlbHNlIGlmICh0eXBlID09IG5hdGl2ZSkKKyAgICAgICAgbV9lbmRp
bmdzID0gRW5kaW5nTmF0aXZlOworICAgIGVsc2UgaWYgKHR5cGUgPT0gbGYpCisgICAgICAgIG1f
ZW5kaW5ncyA9IEVuZGluZ0xGOworICAgIGVsc2UgaWYgKHR5cGUgPT0gY3IpCisgICAgICAgIG1f
ZW5kaW5ncyA9IEVuZGluZ0NSOworICAgIGVsc2UgaWYgKHR5cGUgPT0gY3JsZikKKyAgICAgICAg
bV9lbmRpbmdzID0gRW5kaW5nQ1JMRjsKKyAgICBlbHNlIHsKKyAgICAgICAgLy8gRklYTUUgV2Fy
biB3aGVuIGludmFsaWQgZW5kaW5ncyB0eXBlIGlzIHBhc3NlZC4KKyAgICAgICAgbV9lbmRpbmdz
ID0gRW5kaW5nVHJhbnNwYXJlbnQ7CisgICAgfQorfQorCitzdGF0aWMgY29uc3QgQXRvbWljU3Ry
aW5nKiBjcmVhdGVFbmRpbmdUeXBlVG9TdHJpbmdNYXAoKQoreworICAgIEF0b21pY1N0cmluZyog
dHlwZXMgPSBuZXcgQXRvbWljU3RyaW5nW0Jsb2JCdWlsZGVyOjpudW1iZXJPZkVuZGluZ1R5cGVz
XTsKKyAgICB0eXBlc1tCbG9iQnVpbGRlcjo6RW5kaW5nVHJhbnNwYXJlbnRdID0gInRyYW5zcGFy
ZW50IjsKKyAgICB0eXBlc1tCbG9iQnVpbGRlcjo6RW5kaW5nTmF0aXZlXSA9ICJuYXRpdmUiOwor
ICAgIHR5cGVzW0Jsb2JCdWlsZGVyOjpFbmRpbmdMRl0gPSAibGYiOworICAgIHR5cGVzW0Jsb2JC
dWlsZGVyOjpFbmRpbmdDUl0gPSAiY3IiOworICAgIHR5cGVzW0Jsb2JCdWlsZGVyOjpFbmRpbmdD
UkxGXSA9ICJjcmxmIjsKKyAgICByZXR1cm4gdHlwZXM7Cit9CisKK2NvbnN0IEF0b21pY1N0cmlu
ZyYgQmxvYkJ1aWxkZXI6OmVuZGluZ3MoKSBjb25zdAoreworICAgIHN0YXRpYyBjb25zdCBBdG9t
aWNTdHJpbmcqIHR5cGVzTWFwID0gY3JlYXRlRW5kaW5nVHlwZVRvU3RyaW5nTWFwKCk7CisgICAg
cmV0dXJuIHR5cGVzTWFwW21fZW5kaW5nc107Cit9CisKK1Bhc3NSZWZQdHI8QmxvYj4gQmxvYkJ1
aWxkZXI6OkJsb2JEYXRhV3JhcHBlcjo6Z2V0QmxvYihFbmRpbmdzVHlwZSkgY29uc3QKK3sKKyAg
ICB0eXBlZGVmIERhdGFCbG9iOjpCeXRlU3RvcmUgQnl0ZVN0b3JlOworCisgICAgaWYgKG1fdGV4
dC5pc051bGwoKSkKKyAgICAgICAgcmV0dXJuIG1fYmxvYjsKKworICAgIC8vIEZJWE1FOiBjb252
ZXJ0IHRoZSBlbmRpbmdzLgorICAgIENTdHJpbmcgZnJvbSA9IG1fdGV4dC51dGY4KCk7CisgICAg
UmVmUHRyPEJ5dGVTdG9yZT4gYnl0ZVN0b3JlID0gQnl0ZVN0b3JlOjpjcmVhdGUoZnJvbS5sZW5n
dGgoKSk7CisgICAgbWVtY3B5KGJ5dGVTdG9yZS0+ZGF0YSgpLCBmcm9tLmRhdGEoKSwgZnJvbS5s
ZW5ndGgoKSk7CisgICAgcmV0dXJuIERhdGFCbG9iOjpjcmVhdGUoYnl0ZVN0b3JlLnJlbGVhc2Uo
KSk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1dlYkNvcmUvaHRt
bC9CbG9iQnVpbGRlci5oIGIvV2ViQ29yZS9odG1sL0Jsb2JCdWlsZGVyLmgKbmV3IGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmE2OWRiZAotLS0gL2Rldi9udWxsCisrKyBiL1dlYkNv
cmUvaHRtbC9CbG9iQnVpbGRlci5oCkBAIC0wLDAgKzEsNzYgQEAKKy8qCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTAgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucyBhcmUKKyAqIG1ldDoKKyAqCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZQorICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogZGlzdHJpYnV0aW9uLgor
ICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9m
IGl0cworICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBw
cm9kdWN0cyBkZXJpdmVkIGZyb20KKyAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBw
cmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBB
TkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QK
KyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
IElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqIE9XTkVSIE9SIENPTlRSSUJVVE9S
UyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICogU1BF
Q0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVAorICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAq
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIEJsb2JCdWlsZGVy
X2gKKyNkZWZpbmUgQmxvYkJ1aWxkZXJfaAorCisjaW5jbHVkZSAiRXhjZXB0aW9uQ29kZS5oIgor
I2luY2x1ZGUgIlBsYXRmb3JtU3RyaW5nLmgiCisjaW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIuaD4K
KyNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgorI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KKwor
bmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBBdG9taWNTdHJpbmc7CitjbGFzcyBCbG9iOwor
CitjbGFzcyBCbG9iQnVpbGRlciA6IHB1YmxpYyBSZWZDb3VudGVkPEJsb2JCdWlsZGVyPiB7Citw
dWJsaWM6CisgICAgc3RhdGljIFBhc3NSZWZQdHI8QmxvYkJ1aWxkZXI+IGNyZWF0ZSgpIHsgcmV0
dXJuIGFkb3B0UmVmKG5ldyBCbG9iQnVpbGRlcigpKTsgfQorICAgIHZpcnR1YWwgfkJsb2JCdWls
ZGVyKCk7CisKKyAgICBib29sIGFwcGVuZFN0cmluZyhjb25zdCBTdHJpbmcmIHRleHQsIEV4Y2Vw
dGlvbkNvZGUmKTsKKyAgICBib29sIGFwcGVuZEJsb2IoUGFzc1JlZlB0cjxCbG9iPiBibG9iKTsK
KworICAgIFBhc3NSZWZQdHI8QmxvYj4gZ2V0QmxvYigpIGNvbnN0OworCisgICAgZW51bSBFbmRp
bmdzVHlwZSB7CisgICAgICAgRW5kaW5nVHJhbnNwYXJlbnQgPSAwLAorICAgICAgIEVuZGluZ05h
dGl2ZSwKKyAgICAgICBFbmRpbmdMRiwKKyAgICAgICBFbmRpbmdDUiwKKyAgICAgICBFbmRpbmdD
UkxGLAorICAgIH07CisgICAgc3RhdGljIGNvbnN0IGludCBudW1iZXJPZkVuZGluZ1R5cGVzID0g
RW5kaW5nQ1JMRiArIDE7CisgICAgdm9pZCBzZXRFbmRpbmdzKGNvbnN0IEF0b21pY1N0cmluZyYp
OworICAgIGNvbnN0IEF0b21pY1N0cmluZyYgZW5kaW5ncygpIGNvbnN0OworCitwcml2YXRlOgor
ICAgIEJsb2JCdWlsZGVyKCk7CisKKyAgICBjbGFzcyBCbG9iRGF0YVdyYXBwZXI7CisgICAgVmVj
dG9yPEJsb2JEYXRhV3JhcHBlcj4gbV9ibG9iRGF0YUxpc3Q7CisgICAgRW5kaW5nc1R5cGUgbV9l
bmRpbmdzOworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gQmxvYkJ1
aWxkZXJfaApkaWZmIC0tZ2l0IGEvV2ViQ29yZS9odG1sL0RPTUZvcm1EYXRhLmNwcCBiL1dlYkNv
cmUvaHRtbC9ET01Gb3JtRGF0YS5jcHAKaW5kZXggMTQ0MWU4Yi4uNjE1N2UxZCAxMDA2NDQKLS0t
IGEvV2ViQ29yZS9odG1sL0RPTUZvcm1EYXRhLmNwcAorKysgYi9XZWJDb3JlL2h0bWwvRE9NRm9y
bURhdGEuY3BwCkBAIC01MSw4ICs1MSw4IEBAIHZvaWQgRE9NRm9ybURhdGE6OmFwcGVuZChjb25z
dCBTdHJpbmcmIG5hbWUsIGNvbnN0IFN0cmluZyYgdmFsdWUpCiB2b2lkIERPTUZvcm1EYXRhOjph
cHBlbmQoY29uc3QgU3RyaW5nJiBuYW1lLCBCbG9iKiBibG9iKQogewogICAgIC8vIEZJWE1FOiBO
ZWVkIHRvIHN1cHBvcnQgc2xpY2VkIGZpbGUgd2hlbiBCbG9iLnNsaWNlIHN1cHBvcnQgaXMgbGFu
ZGVkLgotICAgIGlmICghbmFtZS5pc0VtcHR5KCkgJiYgIWJsb2ItPnBhdGgoKS5pc0VtcHR5KCkp
IHsKLSAgICAgICAgUmVmUHRyPEZpbGU+IGZpbGUgPSBzdGF0aWNfY2FzdDxGaWxlKj4oYmxvYik7
CisgICAgaWYgKCFuYW1lLmlzRW1wdHkoKSAmJiBibG9iLT5pc1VzaW5nRmlsZSgpICYmICFibG9i
LT50b0ZpbGVCbG9iKCktPnBhdGgoKS5pc0VtcHR5KCkpIHsKKyAgICAgICAgUmVmUHRyPEZpbGU+
IGZpbGUgPSBzdGF0aWNfY2FzdDxGaWxlKj4oYmxvYi0+dG9GaWxlQmxvYigpKTsKICAgICAgICAg
YXBwZW5kRmlsZShuYW1lLCBmaWxlLnJlbGVhc2UoKSk7CiAgICAgfQogfQpkaWZmIC0tZ2l0IGEv
V2ViQ29yZS9odG1sL0ZpbGUuY3BwIGIvV2ViQ29yZS9odG1sL0ZpbGUuY3BwCmluZGV4IDk3ZmRj
NDUuLmVkZDMyNTggMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvaHRtbC9GaWxlLmNwcAorKysgYi9XZWJD
b3JlL2h0bWwvRmlsZS5jcHAKQEAgLTMyLDcgKzMyLDcgQEAKIG5hbWVzcGFjZSBXZWJDb3JlIHsK
IAogRmlsZTo6RmlsZShjb25zdCBTdHJpbmcmIHBhdGgpCi0gICAgOiBCbG9iKHBhdGgpCisgICAg
OiBGaWxlQmxvYihwYXRoKQogICAgICwgbV9uYW1lKHBhdGhHZXRGaWxlTmFtZShwYXRoKSkKIHsK
ICAgICAvLyBXZSBkb24ndCB1c2UgTUlNRVR5cGVSZWdpc3RyeTo6Z2V0TUlNRVR5cGVGb3JQYXRo
KCkgYmVjYXVzZSBpdCByZXR1cm5zICJhcHBsaWNhdGlvbi9vY3RldC1zdHJlYW0iIHVwb24gZmFp
bHVyZS4KZGlmZiAtLWdpdCBhL1dlYkNvcmUvaHRtbC9GaWxlLmggYi9XZWJDb3JlL2h0bWwvRmls
ZS5oCmluZGV4IGRkYTQ4MmEuLjcxYTMxZDEgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvaHRtbC9GaWxl
LmgKKysrIGIvV2ViQ29yZS9odG1sL0ZpbGUuaApAQCAtMzIsNyArMzIsNyBAQAogCiBuYW1lc3Bh
Y2UgV2ViQ29yZSB7CiAKLWNsYXNzIEZpbGUgOiBwdWJsaWMgQmxvYiB7CitjbGFzcyBGaWxlIDog
cHVibGljIEZpbGVCbG9iIHsKIHB1YmxpYzoKICAgICBzdGF0aWMgUGFzc1JlZlB0cjxGaWxlPiBj
cmVhdGUoY29uc3QgU3RyaW5nJiBwYXRoKQogICAgIHsKZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGxh
dGZvcm0vbmV0d29yay9Gb3JtRGF0YS5jcHAgYi9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvRm9y
bURhdGEuY3BwCmluZGV4IDZhNDg3MzYuLjI4OGFjYWIgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvcGxh
dGZvcm0vbmV0d29yay9Gb3JtRGF0YS5jcHAKKysrIGIvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3Jr
L0Zvcm1EYXRhLmNwcApAQCAtMTg3LDcgKzE4Nyw5IEBAIHZvaWQgRm9ybURhdGE6OmFwcGVuZERP
TUZvcm1EYXRhKGNvbnN0IERPTUZvcm1EYXRhJiBkb21Gb3JtRGF0YSwgYm9vbCBpc011bHRpUGFy
CiAgICAgICAgICAgICBib29sIHNob3VsZEdlbmVyYXRlRmlsZSA9IGZhbHNlOwogICAgICAgICAg
ICAgLy8gSWYgdGhlIGN1cnJlbnQgdHlwZSBpcyBGSUxFLCB0aGVuIHdlIGFsc28gbmVlZCB0byBp
bmNsdWRlIHRoZSBmaWxlbmFtZQogICAgICAgICAgICAgaWYgKHZhbHVlLmZpbGUoKSkgewotICAg
ICAgICAgICAgICAgIGNvbnN0IFN0cmluZyYgcGF0aCA9IHZhbHVlLmZpbGUoKS0+cGF0aCgpOwor
ICAgICAgICAgICAgICAgIC8vIEZJWE1FIG5lZWQgdG8gc3luYyB3aXRoIGh0dHA6Ly93ZWJraXQu
b3JnL2IvMzY2NzgKKyAgICAgICAgICAgICAgICBBU1NFUlQodmFsdWUuZmlsZSgpLT5pc1VzaW5n
RmlsZSgpKTsKKyAgICAgICAgICAgICAgICBjb25zdCBTdHJpbmcmIHBhdGggPSB2YWx1ZS5maWxl
KCktPnRvRmlsZUJsb2IoKS0+cGF0aCgpOwogICAgICAgICAgICAgICAgIFN0cmluZyBmaWxlTmFt
ZSA9IHZhbHVlLmZpbGUoKS0+ZmlsZU5hbWUoKTsKIAogICAgICAgICAgICAgICAgIC8vIExldCB0
aGUgYXBwbGljYXRpb24gc3BlY2lmeSBhIGZpbGVuYW1lIGlmIGl0J3MgZ29pbmcgdG8gZ2VuZXJh
dGUgYSByZXBsYWNlbWVudCBmaWxlIGZvciB0aGUgdXBsb2FkLgpkaWZmIC0tZ2l0IGEvV2ViQ29y
ZS9wbGF0Zm9ybS9uZXR3b3JrL0Zvcm1EYXRhLmggYi9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsv
Rm9ybURhdGEuaAppbmRleCBmODlkYWQ3Li4xNTJiZDJjIDEwMDY0NAotLS0gYS9XZWJDb3JlL3Bs
YXRmb3JtL25ldHdvcmsvRm9ybURhdGEuaAorKysgYi9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsv
Rm9ybURhdGEuaApAQCAtMjYsNiArMjYsNyBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKK2Ns
YXNzIEJsb2I7CiBjbGFzcyBDaHJvbWVDbGllbnQ7CiBjbGFzcyBET01Gb3JtRGF0YTsKIGNsYXNz
IERvY3VtZW50OwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS94bWwvWE1MSHR0cFJlcXVlc3QuY3BwIGIv
V2ViQ29yZS94bWwvWE1MSHR0cFJlcXVlc3QuY3BwCmluZGV4IGM2NzY3MDcuLmQzZjQzM2IgMTAw
NjQ0Ci0tLSBhL1dlYkNvcmUveG1sL1hNTEh0dHBSZXF1ZXN0LmNwcAorKysgYi9XZWJDb3JlL3ht
bC9YTUxIdHRwUmVxdWVzdC5jcHAKQEAgLTQ0NywxNCArNDQ3LDE1IEBAIHZvaWQgWE1MSHR0cFJl
cXVlc3Q6OnNlbmQoQmxvYiogYm9keSwgRXhjZXB0aW9uQ29kZSYgZWMpCiAgICAgaWYgKCFpbml0
U2VuZChlYykpCiAgICAgICAgIHJldHVybjsKIAotICAgIGlmIChtX21ldGhvZCAhPSAiR0VUIiAm
JiBtX21ldGhvZCAhPSAiSEVBRCIgJiYgbV91cmwucHJvdG9jb2xJbkhUVFBGYW1pbHkoKSkgewor
ICAgIC8vIEZJWE1FOiBoYW5kbGUgbm9uLWZpbGUgYmxvYnMgdG9vLgorICAgIGlmIChtX21ldGhv
ZCAhPSAiR0VUIiAmJiBtX21ldGhvZCAhPSAiSEVBRCIgJiYgbV91cmwucHJvdG9jb2xJbkhUVFBG
YW1pbHkoKSAmJiBib2R5LT5pc1VzaW5nRmlsZSgpKSB7CiAgICAgICAgIC8vIEZJWE1FOiBTaG91
bGQgd2Ugc2V0IGEgQ29udGVudC1UeXBlIGlmIG9uZSBpcyBub3Qgc2V0LgogICAgICAgICAvLyBG
SVhNRTogYWRkIHN1cHBvcnQgZm9yIHVwbG9hZGluZyBidW5kbGVzLgogICAgICAgICBtX3JlcXVl
c3RFbnRpdHlCb2R5ID0gRm9ybURhdGE6OmNyZWF0ZSgpOwogI2lmIEVOQUJMRShCTE9CX1NMSUNF
KQotICAgICAgICBtX3JlcXVlc3RFbnRpdHlCb2R5LT5hcHBlbmRGaWxlUmFuZ2UoYm9keS0+cGF0
aCgpLCBib2R5LT5zdGFydCgpLCBib2R5LT5sZW5ndGgoKSwgYm9keS0+bW9kaWZpY2F0aW9uVGlt
ZSgpKTsKKyAgICAgICAgbV9yZXF1ZXN0RW50aXR5Qm9keS0+YXBwZW5kRmlsZVJhbmdlKGJvZHkt
PnRvRmlsZUJsb2IoKS0+cGF0aCgpLCBib2R5LT5zdGFydCgpLCBib2R5LT5sZW5ndGgoKSwgYm9k
eS0+bW9kaWZpY2F0aW9uVGltZSgpKTsKICNlbHNlCi0gICAgICAgIG1fcmVxdWVzdEVudGl0eUJv
ZHktPmFwcGVuZEZpbGUoYm9keS0+cGF0aCgpLCBmYWxzZSk7CisgICAgICAgIG1fcmVxdWVzdEVu
dGl0eUJvZHktPmFwcGVuZEZpbGUoYm9keS0+dG9GaWxlQmxvYigpLT5wYXRoKCksIGZhbHNlKTsK
ICNlbmRpZgogICAgIH0KIAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>58260</attachid>
            <date>2010-06-09 10:51:45 -0700</date>
            <delta_ts>2010-06-10 15:02:44 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-36903-20100609105144.patch</filename>
            <type>text/plain</type>
            <size>18076</size>
            <attacher name="Kinuko Yasuda">kinuko</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYkNvcmUvQ01ha2VMaXN0cy50eHQgYi9XZWJDb3JlL0NNYWtlTGlzdHMu
dHh0CmluZGV4IDE0M2FiZmQ0OTQ4MDYxNDI2OGQ4ZjNkZTgyOTk2ZjRjYmQ4MjIyMTAuLjQyNjYz
Y2I2N2E2NDdhNmM2YjY3Yzg1NGY1ZTQwYzAzNTk1NDYwNDAgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUv
Q01ha2VMaXN0cy50eHQKKysrIGIvV2ViQ29yZS9DTWFrZUxpc3RzLnR4dApAQCAtODkzLDYgKzg5
Myw3IEBAIFNFVChXZWJDb3JlX1NPVVJDRVMKICAgICBoaXN0b3J5L1BhZ2VDYWNoZS5jcHAKIAog
ICAgIGh0bWwvQmxvYi5jcHAKKyAgICBodG1sL0Jsb2JCdWlsZGVyLmNwcAogICAgIGh0bWwvQ29s
bGVjdGlvbkNhY2hlLmNwcAogICAgIGh0bWwvRE9NRGF0YUdyaWREYXRhU291cmNlLmNwcAogICAg
IGh0bWwvRE9NRm9ybURhdGEuY3BwCmRpZmYgLS1naXQgYS9XZWJDb3JlL0NoYW5nZUxvZyBiL1dl
YkNvcmUvQ2hhbmdlTG9nCmluZGV4IDMwNDc4ZWFmYzZiZjk4NmRlYmIwODc2ODM0NGVhYTBkYjJl
ZjIwN2MuLjdlZDExZWQ0YzFkNDc2ZjIyMzNkNzBkMTYwOWYwZjdjNTlmZjcxZDkgMTAwNjQ0Ci0t
LSBhL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEs
MjYgQEAKKzIwMTAtMDYtMDggIEtpbnVrbyBZYXN1ZGEgIDxraW51a29AY2hyb21pdW0ub3JnPgor
CisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEltcGxlbWVu
dCBCbG9iQnVpbGRlciBpbnRlcm5hbCBjbGFzcyBmb3IgQmxvYkJ1aWxkZXIgc3VwcG9ydCBhcyBk
ZWZpbmVkIGluIEZpbGVXcml0ZXIKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTM2OTAzCisKKyAgICAgICAgTm8gbmV3IHRlc3RzOyB0aGV5IHdpbGwgYmUg
YWRkZWQgd2hlbiB3ZSBhZGQganNjIGJpbmRpbmdzLgorCisgICAgICAgICogQ01ha2VMaXN0cy50
eHQ6CisgICAgICAgICogR05VbWFrZWZpbGUuYW06CisgICAgICAgICogV2ViQ29yZS5neXBpOgor
ICAgICAgICAqIFdlYkNvcmUucHJvOgorICAgICAgICAqIFdlYkNvcmUudmNwcm9qL1dlYkNvcmUu
dmNwcm9qOgorICAgICAgICAqIFdlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAg
ICAgICAgKiBodG1sL0Jsb2JCdWlsZGVyLmNwcDogQWRkZWQuCisgICAgICAgICogaHRtbC9CbG9i
QnVpbGRlci5oOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkJsb2JCdWlsZGVyOjpjcmVhdGUp
OgorICAgICAgICAqIHBsYXRmb3JtL0Jsb2JJdGVtLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlN0
cmluZ0Jsb2JJdGVtOjpjb252ZXJ0VG9DU3RyaW5nKTogQWRkZWQgRW5kaW5nTmF0aXZlIHN1cHBv
cnQuCisgICAgICAgICogcGxhdGZvcm0vQmxvYkl0ZW0uaDogQWRkZWQgRW5kaW5nTmF0aXZlIGxp
bmUtZW5kaW5nIHR5cGUuCisgICAgICAgIChXZWJDb3JlOjopOgorCiAyMDEwLTA2LTA4ICBWYW5n
ZWxpcyBLb2trZXZpcyAgPHZhbmdlbGlzQGNocm9taXVtLm9yZz4KIAogICAgICAgICBSZXZpZXdl
ZCBieSBEaW1pdHJpIEdsYXprb3YuCmRpZmYgLS1naXQgYS9XZWJDb3JlL0dOVW1ha2VmaWxlLmFt
IGIvV2ViQ29yZS9HTlVtYWtlZmlsZS5hbQppbmRleCA4OGMwMWFhZmQxNzBkMTVjMTM2Yzk1NDNl
ZDU2YzBkZWIzYmZiN2I3Li40OTY2ODkxZjc3NGVlZWU4ZjExNjU3ZTA3MTM0MGY5NmEyNjg4OWFl
IDEwMDY0NAotLS0gYS9XZWJDb3JlL0dOVW1ha2VmaWxlLmFtCisrKyBiL1dlYkNvcmUvR05VbWFr
ZWZpbGUuYW0KQEAgLTEwMzksNiArMTAzOSw4IEBAIHdlYmNvcmVfc291cmNlcyArPSBcCiAJV2Vi
Q29yZS9oaXN0b3J5L1BhZ2VDYWNoZS5oIFwKIAlXZWJDb3JlL2h0bWwvQmxvYi5jcHAgXAogCVdl
YkNvcmUvaHRtbC9CbG9iLmggXAorCVdlYkNvcmUvaHRtbC9CbG9iQnVpbGRlci5jcHAgXAorCVdl
YkNvcmUvaHRtbC9CbG9iQnVpbGRlci5oIFwKIAlXZWJDb3JlL2h0bWwvY2FudmFzL0NhbnZhc0Nv
bnRleHRBdHRyaWJ1dGVzLmggXAogCVdlYkNvcmUvaHRtbC9jYW52YXMvQ2FudmFzR3JhZGllbnQu
Y3BwIFwKIAlXZWJDb3JlL2h0bWwvY2FudmFzL0NhbnZhc0dyYWRpZW50LmggXApkaWZmIC0tZ2l0
IGEvV2ViQ29yZS9XZWJDb3JlLmd5cGkgYi9XZWJDb3JlL1dlYkNvcmUuZ3lwaQppbmRleCAyYjNi
Y2VlM2Q2NzBlN2EzMjI2ZWQyNWVmOTcxYzFiYjZiOGZlYjVlLi44ZjVhMzM2ZWVjMTE3ODRiNjBi
YTRlZWUxNTUyOTJmZDI4N2U1ODdjIDEwMDY0NAotLS0gYS9XZWJDb3JlL1dlYkNvcmUuZ3lwaQor
KysgYi9XZWJDb3JlL1dlYkNvcmUuZ3lwaQpAQCAtMTM4NCw2ICsxMzg0LDggQEAKICAgICAgICAg
ICAgICdoaXN0b3J5L1BhZ2VDYWNoZS5oJywKICAgICAgICAgICAgICdodG1sL0Jsb2IuY3BwJywK
ICAgICAgICAgICAgICdodG1sL0Jsb2IuaCcsCisgICAgICAgICAgICAnaHRtbC9CbG9iQnVpbGRl
ci5jcHAnLAorICAgICAgICAgICAgJ2h0bWwvQmxvYkJ1aWxkZXIuaCcsCiAgICAgICAgICAgICAn
aHRtbC9jYW52YXMvQXJyYXlCdWZmZXJWaWV3LmNwcCcsCiAgICAgICAgICAgICAnaHRtbC9jYW52
YXMvQXJyYXlCdWZmZXJWaWV3LmgnLAogICAgICAgICAgICAgJ2h0bWwvY2FudmFzL0FycmF5QnVm
ZmVyLmNwcCcsCmRpZmYgLS1naXQgYS9XZWJDb3JlL1dlYkNvcmUucHJvIGIvV2ViQ29yZS9XZWJD
b3JlLnBybwppbmRleCBhMzI1ZmQwZGE4M2QyMDMzZTY0MjBjZThjMzRhNWMxZjE3YmIzMzliLi5m
NGVlZmVkZjc5ZGQxMGVlZjEyN2FiZTY1MjcyMzkzOGNiYzNlNTM3IDEwMDY0NAotLS0gYS9XZWJD
b3JlL1dlYkNvcmUucHJvCisrKyBiL1dlYkNvcmUvV2ViQ29yZS5wcm8KQEAgLTU5MCw2ICs1OTAs
NyBAQCBTT1VSQ0VTICs9IFwKICAgICBoaXN0b3J5L3F0L0hpc3RvcnlJdGVtUXQuY3BwIFwKICAg
ICBoaXN0b3J5L1BhZ2VDYWNoZS5jcHAgXAogICAgIGh0bWwvQmxvYi5jcHAgXAorICAgIGh0bWwv
QmxvYkJ1aWxkZXIuY3BwIFwKICAgICBodG1sL2NhbnZhcy9DYW52YXNHcmFkaWVudC5jcHAgXAog
ICAgIGh0bWwvY2FudmFzL0NhbnZhc1BhdHRlcm4uY3BwIFwKICAgICBodG1sL2NhbnZhcy9DYW52
YXNQaXhlbEFycmF5LmNwcCBcCkBAIC0xMzIyLDYgKzEzMjMsNyBAQCBIRUFERVJTICs9IFwKICAg
ICBoaXN0b3J5L0hpc3RvcnlJdGVtLmggXAogICAgIGhpc3RvcnkvUGFnZUNhY2hlLmggXAogICAg
IGh0bWwvQmxvYi5oIFwKKyAgICBodG1sL0Jsb2JCdWlsZGVyLmggXAogICAgIGh0bWwvY2FudmFz
L0NhbnZhc0dyYWRpZW50LmggXAogICAgIGh0bWwvY2FudmFzL0NhbnZhc1BhdHRlcm4uaCBcCiAg
ICAgaHRtbC9jYW52YXMvQ2FudmFzUGl4ZWxBcnJheS5oIFwKZGlmZiAtLWdpdCBhL1dlYkNvcmUv
V2ViQ29yZS52Y3Byb2ovV2ViQ29yZS52Y3Byb2ogYi9XZWJDb3JlL1dlYkNvcmUudmNwcm9qL1dl
YkNvcmUudmNwcm9qCmluZGV4IDNhMjFiMjI2YTZhZWNiYjQ5YzE2ZTFkMDAxNGQ0ZjM0MzUzNjAx
YzkuLjY5NjZkNDhlMzk4M2IwZTg5Y2E1NjRjZDY1YjkyN2Q2ZDdmYjMzMTYgMTAwNjQ0Ci0tLSBh
L1dlYkNvcmUvV2ViQ29yZS52Y3Byb2ovV2ViQ29yZS52Y3Byb2oKKysrIGIvV2ViQ29yZS9XZWJD
b3JlLnZjcHJvai9XZWJDb3JlLnZjcHJvagpAQCAtMzA4MjUsNiArMzA4MjUsMTQgQEAKIAkJCQk+
DQogCQkJPC9GaWxlPg0KIAkJCTxGaWxlDQorCQkJCVJlbGF0aXZlUGF0aD0iLi5caHRtbFxCbG9i
QnVpbGRlci5jcHAiDQorCQkJCT4NCisJCQk8L0ZpbGU+DQorCQkJPEZpbGUNCisJCQkJUmVsYXRp
dmVQYXRoPSIuLlxodG1sXEJsb2JCdWlsZGVyLmgiDQorCQkJCT4NCisJCQk8L0ZpbGU+DQorCQkJ
PEZpbGUNCiAJCQkJUmVsYXRpdmVQYXRoPSIuLlxodG1sXGNhbnZhc1xDYW52YXNHcmFkaWVudC5j
cHAiDQogCQkJCT4NCiAJCQk8L0ZpbGU+DQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9XZWJDb3JlLnhj
b2RlcHJvai9wcm9qZWN0LnBieHByb2ogYi9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2pl
Y3QucGJ4cHJvagppbmRleCBmZTVjZmJkMTFmNGNjZDg5OTNmMDM3ODE5NmJjMjI4OGM1OTQzYjk1
Li4wNjMzYzEwODE5YmQ2NjEyNjMwZjQzZjY1MzQ3ZTAzYTg3ZTgyOTA4IDEwMDY0NAotLS0gYS9X
ZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagorKysgYi9XZWJDb3JlL1dl
YkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagpAQCAtMjI4MSw2ICsyMjgxLDggQEAKIAkJ
ODk1MjUzREYxMTZDNEYwNjAwQ0FCRjAwIC8qIEZpbGVUaHJlYWRUYXNrLmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA4OTUyNTNERTExNkM0RjA2MDBDQUJG
MDAgLyogRmlsZVRocmVhZFRhc2suaCAqLzsgfTsKIAkJODk4OEUxMEUxMUEzNTA4QjAwREI3MzJF
IC8qIEJsb2JJdGVtLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDg5ODhFMTBDMTFBMzUwOEIwMERCNzMyRSAvKiBCbG9iSXRlbS5jcHAgKi87IH07CiAJ
CTg5ODhFMTBGMTFBMzUwOEIwMERCNzMyRSAvKiBCbG9iSXRlbS5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gODk4OEUxMEQxMUEzNTA4QjAwREI3MzJFIC8q
IEJsb2JJdGVtLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsg
fTsKKwkJODlCRUQ1RUIxMUJFMTFDRTAwNDQ4NDkyIC8qIEJsb2JCdWlsZGVyLmNwcCBpbiBTb3Vy
Y2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDg5QkVENUU5MTFCRTExQ0Uw
MDQ0ODQ5MiAvKiBCbG9iQnVpbGRlci5jcHAgKi87IH07CisJCTg5QkVENUVDMTFCRTExQ0UwMDQ0
ODQ5MiAvKiBCbG9iQnVpbGRlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gODlCRUQ1RUExMUJFMTFDRTAwNDQ4NDkyIC8qIEJsb2JCdWlsZGVyLmggKi87
IH07CiAJCThGQUM3NzREMTE5ODcyQ0IwMDE1QUU5NCAvKiBKU01haW5UaHJlYWRFeGVjU3RhdGUu
Y3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOEY5MzRE
ODQxMTg5RjFFRTAwNTA4RDVEIC8qIEpTTWFpblRocmVhZEV4ZWNTdGF0ZS5jcHAgKi87IH07CiAJ
CTkzMDJCMEJEMEQ3OUY4MjkwMEM3RUU4MyAvKiBQYWdlR3JvdXAuY3BwIGluIFNvdXJjZXMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOTMwMkIwQkMwRDc5RjgyOTAwQzdFRTgz
IC8qIFBhZ2VHcm91cC5jcHAgKi87IH07CiAJCTkzMDJCMEJGMEQ3OUY4MkMwMEM3RUU4MyAvKiBQ
YWdlR3JvdXAuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDkzMDJCMEJFMEQ3OUY4MkMwMEM3RUU4MyAvKiBQYWdlR3JvdXAuaCAqLzsgc2V0dGluZ3MgPSB7
QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwpAQCAtNzg5Miw2ICs3ODk0LDggQEAKIAkJ
ODk1MjUzREUxMTZDNEYwNjAwQ0FCRjAwIC8qIEZpbGVUaHJlYWRUYXNrLmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEZpbGVUaHJlYWRUYXNrLmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCTg5ODhFMTBDMTFBMzUwOEIwMERCNzMyRSAvKiBCbG9iSXRlbS5jcHAgKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBCbG9iSXRlbS5jcHA7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCTg5ODhFMTBEMTFBMzUwOEIwMERCNzMyRSAvKiBCbG9iSXRl
bS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBCbG9iSXRlbS5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OworCQk4OUJFRDVFOTExQkUxMUNFMDA0NDg0OTIgLyogQmxvYkJ1
aWxkZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gQmxvYkJ1aWxk
ZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk4OUJFRDVFQTExQkUxMUNFMDA0
NDg0OTIgLyogQmxvYkJ1aWxkZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0g
QmxvYkJ1aWxkZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJOEY5MzREODMxMTg5
RjFFRTAwNTA4RDVEIC8qIEpTTWFpblRocmVhZEV4ZWNTdGF0ZS5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBKU01haW5UaHJlYWRFeGVjU3RhdGUuaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJOEY5MzREODQxMTg5RjFFRTAwNTA4RDVEIC8qIEpTTWFpblRocmVhZEV4
ZWNTdGF0ZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBKU01haW5U
aHJlYWRFeGVjU3RhdGUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk5MzAyQjBC
QzBENzlGODI5MDBDN0VFODMgLyogUGFnZUdyb3VwLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Y3BwLmNwcDsgcGF0aCA9IFBhZ2VHcm91cC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CkBAIC0xMzM3Nyw2ICsxMzM4MSw4IEBACiAJCQkJMkVBRkFGMEIxMEUyQUYyRDAwN0VEM0Q2IC8q
IEJsb2IuY3BwICovLAogCQkJCTJFQUZBRjBDMTBFMkFGMkQwMDdFRDNENiAvKiBCbG9iLmggKi8s
CiAJCQkJMkVBRkFGMEQxMEUyQUYyRDAwN0VEM0Q2IC8qIEJsb2IuaWRsICovLAorCQkJCTg5QkVE
NUU5MTFCRTExQ0UwMDQ0ODQ5MiAvKiBCbG9iQnVpbGRlci5jcHAgKi8sCisJCQkJODlCRUQ1RUEx
MUJFMTFDRTAwNDQ4NDkyIC8qIEJsb2JCdWlsZGVyLmggKi8sCiAJCQkJNDk0ODRGQUUxMDJDRjAx
RTAwMTg3REQzIC8qIGNhbnZhcyAqLywKIAkJCQk5M0M0NDFFRDBGODEzQTFBMDBDMUE2MzQgLyog
Q29sbGVjdGlvbkNhY2hlLmNwcCAqLywKIAkJCQk5M0M0NDFFRTBGODEzQTFBMDBDMUE2MzQgLyog
Q29sbGVjdGlvbkNhY2hlLmggKi8sCkBAIC0xOTQzNCw2ICsxOTQ0MCw3IEBACiAJCQkJODYyNDNE
MDExMUJDMzFGNzAwQ0MwMDZBIC8qIEpTQXJyYXlCdWZmZXJWaWV3SGVscGVyLmggaW4gSGVhZGVy
cyAqLywKIAkJCQlBN0JCRTI2NzExQUZCM0YyMDAwNUVBMDMgLyogSlNIVE1MTWV0ZXJFbGVtZW50
LmggaW4gSGVhZGVycyAqLywKIAkJCQlCNkIwNTQwQTExQjY4RjEwMDAyNTY0QzUgLyogSURCT2Jq
ZWN0U3RvcmVJbXBsLmggaW4gSGVhZGVycyAqLywKKwkJCQk4OUJFRDVFQzExQkUxMUNFMDA0NDg0
OTIgLyogQmxvYkJ1aWxkZXIuaCBpbiBIZWFkZXJzICovLAogCQkJKTsKIAkJCXJ1bk9ubHlGb3JE
ZXBsb3ltZW50UG9zdHByb2Nlc3NpbmcgPSAwOwogCQl9OwpAQCAtMjE3MzUsNiArMjE3NDIsNyBA
QAogCQkJCTlGRkUzRUE1MTFCNUE0MzkwMDM3ODc0RSAvKiBKU01lbW9yeUluZm8uY3BwIGluIFNv
dXJjZXMgKi8sCiAJCQkJQTdCQkUyNjYxMUFGQjNGMjAwMDVFQTAzIC8qIEpTSFRNTE1ldGVyRWxl
bWVudC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlCNkIwNTQwOTExQjY4RjEwMDAyNTY0QzUgLyog
SURCT2JqZWN0U3RvcmVJbXBsLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTg5QkVENUVCMTFCRTEx
Q0UwMDQ0ODQ5MiAvKiBCbG9iQnVpbGRlci5jcHAgaW4gU291cmNlcyAqLywKIAkJCSk7CiAJCQly
dW5Pbmx5Rm9yRGVwbG95bWVudFBvc3Rwcm9jZXNzaW5nID0gMDsKIAkJfTsKZGlmZiAtLWdpdCBh
L1dlYkNvcmUvaHRtbC9CbG9iLmNwcCBiL1dlYkNvcmUvaHRtbC9CbG9iLmNwcAppbmRleCAwNTQ2
ZjFjM2MwODgyZGEyMjA4YTllNmEwYTc2MmRiNDM1OWJlZTRhLi4yNzE1MDY0MDgxOGYyMDdiNzQy
YzE1MDIzN2YwZWZiN2NlNjkwZmEzIDEwMDY0NAotLS0gYS9XZWJDb3JlL2h0bWwvQmxvYi5jcHAK
KysrIGIvV2ViQ29yZS9odG1sL0Jsb2IuY3BwCkBAIC0zNiwxMCArMzYsMTcgQEAKIAogbmFtZXNw
YWNlIFdlYkNvcmUgewogCitCbG9iOjpCbG9iKGNvbnN0IFN0cmluZyYgdHlwZSwgY29uc3QgQmxv
Ykl0ZW1MaXN0JiBpdGVtcykKKyAgICA6IG1fdHlwZSh0eXBlKQoreworICAgIGZvciAoc2l6ZV90
IGkgPSAwOyBpIDwgaXRlbXMuc2l6ZSgpOyArK2kpCisgICAgICAgIG1faXRlbXMuYXBwZW5kKGl0
ZW1zW2ldKTsKK30KKwogQmxvYjo6QmxvYihjb25zdCBTdHJpbmcmIHBhdGgpCiB7CiAgICAgLy8g
Tm90ZTogdGhpcyBkb2Vzbid0IGluaXRpYWxpemUgdGhlIHR5cGUgdW5saWtlIEZpbGUocGF0aCku
Ci0gICAgYXBwZW5kKEZpbGVCbG9iSXRlbTo6Y3JlYXRlKHBhdGgpKTsKKyAgICBtX2l0ZW1zLmFw
cGVuZChGaWxlQmxvYkl0ZW06OmNyZWF0ZShwYXRoKSk7CiB9CiAKIHVuc2lnbmVkIGxvbmcgbG9u
ZyBCbG9iOjpzaXplKCkgY29uc3QKQEAgLTU4LDExICs2NSw2IEBAIGNvbnN0IFN0cmluZyYgQmxv
Yjo6cGF0aCgpIGNvbnN0CiAgICAgcmV0dXJuIG1faXRlbXNbMF0tPnRvRmlsZUJsb2JJdGVtKCkt
PnBhdGgoKTsKIH0KIAotdm9pZCBCbG9iOjphcHBlbmQoUGFzc1JlZlB0cjxCbG9iSXRlbT4gaXRl
bSkKLXsKLSAgICBtX2l0ZW1zLmFwcGVuZChpdGVtKTsKLX0KLQogI2lmIEVOQUJMRShCTE9CX1NM
SUNFKQogUGFzc1JlZlB0cjxCbG9iPiBCbG9iOjpzbGljZShsb25nIGxvbmcgc3RhcnQsIGxvbmcg
bG9uZyBsZW5ndGgpIGNvbnN0CiB7CkBAIC04MCwxNSArODIsMTYgQEAgUGFzc1JlZlB0cjxCbG9i
PiBCbG9iOjpzbGljZShsb25nIGxvbmcgc3RhcnQsIGxvbmcgbG9uZyBsZW5ndGgpIGNvbnN0CiAg
ICAgICAgIGxlbmd0aCA9IHRvdGFsU2l6ZSAtIHN0YXJ0OwogCiAgICAgc2l6ZV90IGkgPSAwOwot
ICAgIFJlZlB0cjxCbG9iPiBibG9iID0gQmxvYjo6Y3JlYXRlKCk7CisgICAgQmxvYkl0ZW1MaXN0
IGl0ZW1zOwogICAgIGZvciAoOyBpIDwgbV9pdGVtcy5zaXplKCkgJiYgc3RhdGljX2Nhc3Q8dW5z
aWduZWQgbG9uZyBsb25nPihzdGFydCkgPj0gbV9pdGVtc1tpXS0+c2l6ZSgpOyArK2kpCiAgICAg
ICAgIHN0YXJ0IC09IG1faXRlbXNbaV0tPnNpemUoKTsKICAgICBmb3IgKDsgbGVuZ3RoID4gMCAm
JiBpIDwgbV9pdGVtcy5zaXplKCk7ICsraSkgewotICAgICAgICBibG9iLT5tX2l0ZW1zLmFwcGVu
ZChtX2l0ZW1zW2ldLT5zbGljZShzdGFydCwgbGVuZ3RoKSk7Ci0gICAgICAgIGxlbmd0aCAtPSBi
bG9iLT5tX2l0ZW1zLmxhc3QoKS0+c2l6ZSgpOworICAgICAgICBpdGVtcy5hcHBlbmQobV9pdGVt
c1tpXS0+c2xpY2Uoc3RhcnQsIGxlbmd0aCkpOworICAgICAgICBsZW5ndGggLT0gaXRlbXMubGFz
dCgpLT5zaXplKCk7CiAgICAgICAgIHN0YXJ0ID0gMDsKICAgICB9Ci0gICAgcmV0dXJuIGJsb2Iu
cmVsZWFzZSgpOworICAgIFN0cmluZyBjb250ZW50VHlwZTsgLy8gRklYTUU6IFJlcGxhY2UgdGhp
cyB3aXRoIHNsaWNlJ3MgYXJndW1lbnQgb25jZSB3ZSBpbXBsZW1lbnQgdGhlIG5ldyBpbnRlcmZh
Y2UuCisgICAgcmV0dXJuIEJsb2I6OmNyZWF0ZShjb250ZW50VHlwZSwgaXRlbXMpOwogfQogI2Vu
ZGlmIC8vIEVOQUJMRShCTE9CX1NMSUNFKQogCmRpZmYgLS1naXQgYS9XZWJDb3JlL2h0bWwvQmxv
Yi5oIGIvV2ViQ29yZS9odG1sL0Jsb2IuaAppbmRleCAzOTE3N2I1MWVlOWQwNzg2ODNmMjAyYTY1
MWRmNTgyMzhmMjc0OTU3Li5jODhlZWQ0M2E5ZmIwYzNjZTkxY2IzNjFjM2U1NjNkNGI1ZTNjYzE5
IDEwMDY0NAotLS0gYS9XZWJDb3JlL2h0bWwvQmxvYi5oCisrKyBiL1dlYkNvcmUvaHRtbC9CbG9i
LmgKQEAgLTQxLDkgKzQxLDkgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiBjbGFzcyBCbG9iIDog
cHVibGljIFJlZkNvdW50ZWQ8QmxvYj4gewogcHVibGljOgotICAgIHN0YXRpYyBQYXNzUmVmUHRy
PEJsb2I+IGNyZWF0ZSgpCisgICAgc3RhdGljIFBhc3NSZWZQdHI8QmxvYj4gY3JlYXRlKGNvbnN0
IFN0cmluZyYgdHlwZSwgY29uc3QgQmxvYkl0ZW1MaXN0JiBpdGVtcykKICAgICB7Ci0gICAgICAg
IHJldHVybiBhZG9wdFJlZihuZXcgQmxvYigpKTsKKyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5l
dyBCbG9iKHR5cGUsIGl0ZW1zKSk7CiAgICAgfQogCiAgICAgLy8gRklYTUU6IERlcHJlY2F0ZWQg
bWV0aG9kLiAgVGhpcyBpcyBjYWxsZWQgb25seSBmcm9tCkBAIC02Myw3ICs2Myw2IEBAIHB1Ymxp
YzoKICAgICAvLyBGSVhNRTogRGVwcmVjYXRlZCBtZXRob2QuCiAgICAgY29uc3QgU3RyaW5nJiBw
YXRoKCkgY29uc3Q7CiAKLSAgICB2b2lkIGFwcGVuZChQYXNzUmVmUHRyPEJsb2JJdGVtPik7CiAg
ICAgY29uc3QgQmxvYkl0ZW1MaXN0JiBpdGVtcygpIGNvbnN0IHsgcmV0dXJuIG1faXRlbXM7IH0K
IAogI2lmIEVOQUJMRShCTE9CX1NMSUNFKQpAQCAtNzIsNiArNzEsNyBAQCBwdWJsaWM6CiAKIHBy
b3RlY3RlZDoKICAgICBCbG9iKCkgeyB9CisgICAgQmxvYihjb25zdCBTdHJpbmcmIHR5cGUsIGNv
bnN0IEJsb2JJdGVtTGlzdCYgaXRlbXMpOwogCiAgICAgLy8gRklYTUU6IERlcHJlY2F0ZWQgY29u
c3RydWN0b3IuICBTZWUgYWxzbyB0aGUgY29tbWVudCBmb3IgQmxvYjo6Y3JlYXRlKHBhdGgpLgog
ICAgIEJsb2IoY29uc3QgU3RyaW5nJiBwYXRoKTsKZGlmZiAtLWdpdCBhL1dlYkNvcmUvaHRtbC9C
bG9iQnVpbGRlci5jcHAgYi9XZWJDb3JlL2h0bWwvQmxvYkJ1aWxkZXIuY3BwCm5ldyBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAu
LjIyNDY0ZTM4YzdjNDQ3ZGE4YTNjY2YwMGFhOWU0NmI1NWYzYTZhNzcKLS0tIC9kZXYvbnVsbAor
KysgYi9XZWJDb3JlL2h0bWwvQmxvYkJ1aWxkZXIuY3BwCkBAIC0wLDAgKzEsOTUgQEAKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTAgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
CisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKyAqIG1ldDoKKyAqCisgKiAgICAgKiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorICogaW4gdGhlIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogZGlz
dHJpYnV0aW9uLgorICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3Ig
dGhlIG5hbWVzIG9mIGl0cworICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ug
b3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyAqIHRoaXMgc29mdHdhcmUgd2l0aG91
dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUwor
ICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqIE9XTkVSIE9S
IENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLAorICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBP
UiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRI
RU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVk
ZSAiY29uZmlnLmgiCisKKyNpZiBFTkFCTEUoRklMRV9XUklURVIpCisKKyNpbmNsdWRlICJCbG9i
QnVpbGRlci5oIgorCisjaW5jbHVkZSAiQXRvbWljU3RyaW5nLmgiCisjaW5jbHVkZSAiQmxvYi5o
IgorI2luY2x1ZGUgIlN0cmluZ0hhc2guaCIKKyNpbmNsdWRlICJUZXh0RW5jb2RpbmcuaCIKKyNp
bmNsdWRlIDx3dGYvSGFzaE1hcC5oPgorI2luY2x1ZGUgPHd0Zi9TdGRMaWJFeHRyYXMuaD4KKyNp
bmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworc3Rh
dGljIGJvb2wgZ2V0TGluZUVuZGluZ1R5cGVGcm9tU3RyaW5nKGNvbnN0IEF0b21pY1N0cmluZyYg
dHlwZVN0cmluZywgTGluZUVuZGluZyYgZW5kaW5nVHlwZSkKK3sKKyAgICBERUZJTkVfU1RBVElD
X0xPQ0FMKEF0b21pY1N0cmluZywgdHJhbnNwYXJlbnQsICgidHJhbnNwYXJlbnQiKSk7CisgICAg
REVGSU5FX1NUQVRJQ19MT0NBTChBdG9taWNTdHJpbmcsIG5hdGl2ZSwgKCJuYXRpdmUiKSk7CisK
KyAgICBpZiAodHlwZVN0cmluZy5pc0VtcHR5KCkgfHwgdHlwZVN0cmluZyA9PSB0cmFuc3BhcmVu
dCkgeworICAgICAgICBlbmRpbmdUeXBlID0gRW5kaW5nVHJhbnNwYXJlbnQ7CisgICAgICAgIHJl
dHVybiB0cnVlOworICAgIH0KKyAgICBpZiAodHlwZVN0cmluZyA9PSBuYXRpdmUpIHsKKyAgICAg
ICAgZW5kaW5nVHlwZSA9IEVuZGluZ05hdGl2ZTsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAg
fQorICAgIHJldHVybiBmYWxzZTsKK30KKworQmxvYkJ1aWxkZXI6OkJsb2JCdWlsZGVyKCkKK3sK
K30KKworYm9vbCBCbG9iQnVpbGRlcjo6YXBwZW5kU3RyaW5nKGNvbnN0IFN0cmluZyYgdGV4dCwg
Y29uc3QgU3RyaW5nJiB0eXBlLCBFeGNlcHRpb25Db2RlJiBlYykKK3sKKyAgICBlYyA9IDA7Cisg
ICAgTGluZUVuZGluZyBlbmRpbmdUeXBlOworICAgIGlmICghZ2V0TGluZUVuZGluZ1R5cGVGcm9t
U3RyaW5nKHR5cGUsIGVuZGluZ1R5cGUpKSB7CisgICAgICAgIGVjID0gU1lOVEFYX0VSUjsKKyAg
ICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKyAgICBtX2l0ZW1zLmFwcGVuZChTdHJpbmdCbG9i
SXRlbTo6Y3JlYXRlKHRleHQsIGVuZGluZ1R5cGUsIFVURjhFbmNvZGluZygpKSk7CisgICAgcmV0
dXJuIHRydWU7Cit9CisKK2Jvb2wgQmxvYkJ1aWxkZXI6OmFwcGVuZEJsb2IoUGFzc1JlZlB0cjxC
bG9iPiBibG9iKQoreworICAgIGlmICghYmxvYikKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAg
Zm9yIChzaXplX3QgaSA9IDA7IGkgPCBibG9iLT5pdGVtcygpLnNpemUoKTsgKytpKQorICAgICAg
ICBtX2l0ZW1zLmFwcGVuZChibG9iLT5pdGVtcygpW2ldKTsKKyAgICByZXR1cm4gdHJ1ZTsKK30K
KworUGFzc1JlZlB0cjxCbG9iPiBCbG9iQnVpbGRlcjo6Z2V0QmxvYihjb25zdCBTdHJpbmcmIGNv
bnRlbnRUeXBlKSBjb25zdAoreworICAgIHJldHVybiBCbG9iOjpjcmVhdGUoY29udGVudFR5cGUs
IG1faXRlbXMpOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBFTkFC
TEUoRklMRV9XUklURVIpCmRpZmYgLS1naXQgYS9XZWJDb3JlL2h0bWwvQmxvYkJ1aWxkZXIuaCBi
L1dlYkNvcmUvaHRtbC9CbG9iQnVpbGRlci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjE0YjFjOTZmM2FlOGRiMzI3
ODYwYWYwM2QwNGY2MjM0M2YyNmQ4NDAKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJDb3JlL2h0bWwv
QmxvYkJ1aWxkZXIuaApAQCAtMCwwICsxLDY2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEw
IEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMgYXJlCisgKiBtZXQ6CisgKgorICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAg
ICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUKKyAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIKKyAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqIGRpc3RyaWJ1dGlvbi4KKyAqICAgICAq
IE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAq
IGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMg
ZGVyaXZlZCBmcm9tCisgKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3Jp
dHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhF
IENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1J
VEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBF
VkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisgKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVY
RU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyAq
IExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBCbG9iQnVpbGRlcl9oCisjZGVm
aW5lIEJsb2JCdWlsZGVyX2gKKworI2lmIEVOQUJMRShGSUxFX1dSSVRFUikKKworI2luY2x1ZGUg
IkJsb2JJdGVtLmgiCisjaW5jbHVkZSAiRXhjZXB0aW9uQ29kZS5oIgorI2luY2x1ZGUgIlBsYXRm
b3JtU3RyaW5nLmgiCisjaW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIuaD4KKyNpbmNsdWRlIDx3dGYv
UmVmQ291bnRlZC5oPgorI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KKworbmFtZXNwYWNlIFdlYkNv
cmUgeworCitjbGFzcyBCbG9iOworCitjbGFzcyBCbG9iQnVpbGRlciA6IHB1YmxpYyBSZWZDb3Vu
dGVkPEJsb2JCdWlsZGVyPiB7CitwdWJsaWM6CisgICAgc3RhdGljIFBhc3NSZWZQdHI8QmxvYkJ1
aWxkZXI+IGNyZWF0ZSgpIHsgcmV0dXJuIGFkb3B0UmVmKG5ldyBCbG9iQnVpbGRlcigpKTsgfQor
CisgICAgYm9vbCBhcHBlbmRTdHJpbmcoY29uc3QgV2ViQ29yZTo6U3RyaW5nJiB0ZXh0LCBjb25z
dCBXZWJDb3JlOjpTdHJpbmcmIGVuZGluZywgRXhjZXB0aW9uQ29kZSYgZWMpOworICAgIGJvb2wg
YXBwZW5kQmxvYihQYXNzUmVmUHRyPEJsb2I+IGJsb2IpOworCisgICAgUGFzc1JlZlB0cjxCbG9i
PiBnZXRCbG9iKGNvbnN0IFdlYkNvcmU6OlN0cmluZyYgY29udGVudFR5cGUpIGNvbnN0OworCitw
cml2YXRlOgorICAgIEJsb2JCdWlsZGVyKCk7CisgICAgQmxvYkl0ZW1MaXN0IG1faXRlbXM7Cit9
OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKworI2VuZGlmIC8vIEVOQUJMRShGSUxFX1dS
SVRFUikKKworI2VuZGlmIC8vIEJsb2JCdWlsZGVyX2gKZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGxh
dGZvcm0vQmxvYkl0ZW0uY3BwIGIvV2ViQ29yZS9wbGF0Zm9ybS9CbG9iSXRlbS5jcHAKaW5kZXgg
OTQ5ZTdmODViYzcxMWJiOWQ3YjMzNTcyYWVhNDE1ZmQ2NDBlY2JhOC4uNGVhNmEzNzVhZmMxZmNh
NDZjZTQxNjYxMzYzNGYzYWZjM2ZmZjE3OSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9wbGF0Zm9ybS9C
bG9iSXRlbS5jcHAKKysrIGIvV2ViQ29yZS9wbGF0Zm9ybS9CbG9iSXRlbS5jcHAKQEAgLTEyOSw2
ICsxMjksMTQgQEAgQ1N0cmluZyBTdHJpbmdCbG9iSXRlbTo6Y29udmVydFRvQ1N0cmluZyhjb25z
dCBTdHJpbmcmIHRleHQsIExpbmVFbmRpbmcgZW5kaW5nLAogICAgIGlmIChlbmRpbmcgPT0gRW5k
aW5nVHJhbnNwYXJlbnQpCiAgICAgICAgIHJldHVybiByZXN1bHQ7CiAKKyAgICBpZiAoZW5kaW5n
ID09IEVuZGluZ05hdGl2ZSkgeworI2lmIE9TKFdJTkRPV1MpCisgICAgICAgIGVuZGluZyA9IEVu
ZGluZ0NSTEY7CisjZWxzZQorICAgICAgICBlbmRpbmcgPSBFbmRpbmdMRjsKKyNlbmRpZgorICAg
IH0KKwogICAgIGNvbnN0IGNoYXIqIGVuZGluZ0NoYXJzID0gKGVuZGluZyA9PSBFbmRpbmdDUkxG
KSA/ICJcclxuIiA6ICgoZW5kaW5nID09IEVuZGluZ0NSKSA/ICJcciIgOiAiXG4iKTsKIAogICAg
IGludCBlbmRpbmdMZW5ndGggPSAoZW5kaW5nID09IEVuZGluZ0NSTEYpID8gMiA6IDE7CmRpZmYg
LS1naXQgYS9XZWJDb3JlL3BsYXRmb3JtL0Jsb2JJdGVtLmggYi9XZWJDb3JlL3BsYXRmb3JtL0Js
b2JJdGVtLmgKaW5kZXggZjJlZTU2YjA4MTc5NjQzYThkNzllMmI4Nzk3MmM4ZDFlZmRkMDI4Yi4u
MWQzNGM1OTRmMDM0ZjAzZDUzNzgzMWQ1MWEzYWY4MjhlNDQ2N2VhMSAxMDA2NDQKLS0tIGEvV2Vi
Q29yZS9wbGF0Zm9ybS9CbG9iSXRlbS5oCisrKyBiL1dlYkNvcmUvcGxhdGZvcm0vQmxvYkl0ZW0u
aApAQCAtNDQsNiArNDQsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAvLyBTdHJpbmcgZW5kaW5n
IHR5cGVzLgogZW51bSBMaW5lRW5kaW5nIHsKICAgICBFbmRpbmdUcmFuc3BhcmVudCA9IDAsCisg
ICAgRW5kaW5nTmF0aXZlLAogICAgIEVuZGluZ0xGLAogICAgIEVuZGluZ0NSLAogICAgIEVuZGlu
Z0NSTEYsCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>58416</attachid>
            <date>2010-06-10 15:02:50 -0700</date>
            <delta_ts>2010-06-11 16:19:29 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-36903-20100610150249.patch</filename>
            <type>text/plain</type>
            <size>17891</size>
            <attacher name="Kinuko Yasuda">kinuko</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYkNvcmUvQ01ha2VMaXN0cy50eHQgYi9XZWJDb3JlL0NNYWtlTGlzdHMu
dHh0CmluZGV4IDc5ZmRmNTgwMTllZGE1MDkwN2NjOTJiZGQzNjE2MGQwY2M0NGM0YzcuLmNjNTQ4
ZGNlYmU0MjExYWY0ZDgwNTgyNmVhNDQwMjVhNzg5YzlkMTYgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUv
Q01ha2VMaXN0cy50eHQKKysrIGIvV2ViQ29yZS9DTWFrZUxpc3RzLnR4dApAQCAtODk0LDYgKzg5
NCw3IEBAIFNFVChXZWJDb3JlX1NPVVJDRVMKICAgICBoaXN0b3J5L1BhZ2VDYWNoZS5jcHAKIAog
ICAgIGh0bWwvQmxvYi5jcHAKKyAgICBodG1sL0Jsb2JCdWlsZGVyLmNwcAogICAgIGh0bWwvQ29s
bGVjdGlvbkNhY2hlLmNwcAogICAgIGh0bWwvRE9NRGF0YUdyaWREYXRhU291cmNlLmNwcAogICAg
IGh0bWwvRE9NRm9ybURhdGEuY3BwCmRpZmYgLS1naXQgYS9XZWJDb3JlL0NoYW5nZUxvZyBiL1dl
YkNvcmUvQ2hhbmdlTG9nCmluZGV4IDRjZGM3M2ViNWIxYjZiODk3ZDUxMWVlNzMyZWVlYjZlMDRk
OTQyOWUuLjVkZDc4Y2IzNzRlY2ZhZTllZjc5NWUzMmQ4ZGQzMjY3ZDAwYmU5YjMgMTAwNjQ0Ci0t
LSBhL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEs
MjYgQEAKKzIwMTAtMDYtMDggIEtpbnVrbyBZYXN1ZGEgIDxraW51a29AY2hyb21pdW0ub3JnPgor
CisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEltcGxlbWVu
dCBCbG9iQnVpbGRlciBpbnRlcm5hbCBjbGFzcyBmb3IgQmxvYkJ1aWxkZXIgc3VwcG9ydCBhcyBk
ZWZpbmVkIGluIEZpbGVXcml0ZXIKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTM2OTAzCisKKyAgICAgICAgTm8gbmV3IHRlc3RzOyB0aGV5IHdpbGwgYmUg
YWRkZWQgd2hlbiB3ZSBhZGQganNjIGJpbmRpbmdzLgorCisgICAgICAgICogQ01ha2VMaXN0cy50
eHQ6CisgICAgICAgICogR05VbWFrZWZpbGUuYW06CisgICAgICAgICogV2ViQ29yZS5neXBpOgor
ICAgICAgICAqIFdlYkNvcmUucHJvOgorICAgICAgICAqIFdlYkNvcmUudmNwcm9qL1dlYkNvcmUu
dmNwcm9qOgorICAgICAgICAqIFdlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAg
ICAgICAgKiBodG1sL0Jsb2JCdWlsZGVyLmNwcDogQWRkZWQuCisgICAgICAgICogaHRtbC9CbG9i
QnVpbGRlci5oOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkJsb2JCdWlsZGVyOjpjcmVhdGUp
OgorICAgICAgICAqIHBsYXRmb3JtL0Jsb2JJdGVtLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlN0
cmluZ0Jsb2JJdGVtOjpjb252ZXJ0VG9DU3RyaW5nKTogQWRkZWQgRW5kaW5nTmF0aXZlIHN1cHBv
cnQuCisgICAgICAgICogcGxhdGZvcm0vQmxvYkl0ZW0uaDogQWRkZWQgRW5kaW5nTmF0aXZlIGxp
bmUtZW5kaW5nIHR5cGUuCisgICAgICAgIChXZWJDb3JlOjopOgorCiAyMDEwLTA2LTEwICBFcmlj
IFNlaWRlbCAgPGVyaWNAd2Via2l0Lm9yZz4KIAogICAgICAgICBSZXZpZXdlZCBieSBBZGFtIEJh
cnRoLgpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9HTlVtYWtlZmlsZS5hbSBiL1dlYkNvcmUvR05VbWFr
ZWZpbGUuYW0KaW5kZXggZDZmYmY0ZWM2ODhhOTU0NWIwNmNkOTEwMmU2OGUzNDkyYzA4MDNjOS4u
ZGUzODhlMjI3MmFhN2U3MGIxMWJjNzU5YWFmY2QwM2Q4MDUzZjZmZCAxMDA2NDQKLS0tIGEvV2Vi
Q29yZS9HTlVtYWtlZmlsZS5hbQorKysgYi9XZWJDb3JlL0dOVW1ha2VmaWxlLmFtCkBAIC0xMDQz
LDYgKzEwNDMsOCBAQCB3ZWJjb3JlX3NvdXJjZXMgKz0gXAogCVdlYkNvcmUvaGlzdG9yeS9QYWdl
Q2FjaGUuaCBcCiAJV2ViQ29yZS9odG1sL0Jsb2IuY3BwIFwKIAlXZWJDb3JlL2h0bWwvQmxvYi5o
IFwKKwlXZWJDb3JlL2h0bWwvQmxvYkJ1aWxkZXIuY3BwIFwKKwlXZWJDb3JlL2h0bWwvQmxvYkJ1
aWxkZXIuaCBcCiAJV2ViQ29yZS9odG1sL2NhbnZhcy9DYW52YXNDb250ZXh0QXR0cmlidXRlcy5o
IFwKIAlXZWJDb3JlL2h0bWwvY2FudmFzL0NhbnZhc0dyYWRpZW50LmNwcCBcCiAJV2ViQ29yZS9o
dG1sL2NhbnZhcy9DYW52YXNHcmFkaWVudC5oIFwKZGlmZiAtLWdpdCBhL1dlYkNvcmUvV2ViQ29y
ZS5neXBpIGIvV2ViQ29yZS9XZWJDb3JlLmd5cGkKaW5kZXggNzEwZDdkOGM3YjFkMWY4NjU4ZjYz
YThhOGQyNGEyNmVhMjY3M2Q4ZS4uYmVkMDJkNWI2YzA0NWUzYWI2NmNlMWZmZWI5YjdiNjI5ZDk2
MGM2YyAxMDA2NDQKLS0tIGEvV2ViQ29yZS9XZWJDb3JlLmd5cGkKKysrIGIvV2ViQ29yZS9XZWJD
b3JlLmd5cGkKQEAgLTEzODgsNiArMTM4OCw4IEBACiAgICAgICAgICAgICAnaGlzdG9yeS9QYWdl
Q2FjaGUuaCcsCiAgICAgICAgICAgICAnaHRtbC9CbG9iLmNwcCcsCiAgICAgICAgICAgICAnaHRt
bC9CbG9iLmgnLAorICAgICAgICAgICAgJ2h0bWwvQmxvYkJ1aWxkZXIuY3BwJywKKyAgICAgICAg
ICAgICdodG1sL0Jsb2JCdWlsZGVyLmgnLAogICAgICAgICAgICAgJ2h0bWwvY2FudmFzL0FycmF5
QnVmZmVyVmlldy5jcHAnLAogICAgICAgICAgICAgJ2h0bWwvY2FudmFzL0FycmF5QnVmZmVyVmll
dy5oJywKICAgICAgICAgICAgICdodG1sL2NhbnZhcy9BcnJheUJ1ZmZlci5jcHAnLApkaWZmIC0t
Z2l0IGEvV2ViQ29yZS9XZWJDb3JlLnBybyBiL1dlYkNvcmUvV2ViQ29yZS5wcm8KaW5kZXggNTkz
YjBjM2JkOWNmMjc1YzEwOTFkMmJmNjUwZTQyNDczNmYyNDFmMy4uZDdiNjFkMjMzMGY3NDViNzdh
ZjYyMWFkOGYyYzYzZjc0Njc3ODAwYSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9XZWJDb3JlLnBybwor
KysgYi9XZWJDb3JlL1dlYkNvcmUucHJvCkBAIC01OTEsNiArNTkxLDcgQEAgU09VUkNFUyArPSBc
CiAgICAgaGlzdG9yeS9xdC9IaXN0b3J5SXRlbVF0LmNwcCBcCiAgICAgaGlzdG9yeS9QYWdlQ2Fj
aGUuY3BwIFwKICAgICBodG1sL0Jsb2IuY3BwIFwKKyAgICBodG1sL0Jsb2JCdWlsZGVyLmNwcCBc
CiAgICAgaHRtbC9jYW52YXMvQ2FudmFzR3JhZGllbnQuY3BwIFwKICAgICBodG1sL2NhbnZhcy9D
YW52YXNQYXR0ZXJuLmNwcCBcCiAgICAgaHRtbC9jYW52YXMvQ2FudmFzUGl4ZWxBcnJheS5jcHAg
XApAQCAtMTMyNiw2ICsxMzI3LDcgQEAgSEVBREVSUyArPSBcCiAgICAgaGlzdG9yeS9IaXN0b3J5
SXRlbS5oIFwKICAgICBoaXN0b3J5L1BhZ2VDYWNoZS5oIFwKICAgICBodG1sL0Jsb2IuaCBcCisg
ICAgaHRtbC9CbG9iQnVpbGRlci5oIFwKICAgICBodG1sL2NhbnZhcy9DYW52YXNHcmFkaWVudC5o
IFwKICAgICBodG1sL2NhbnZhcy9DYW52YXNQYXR0ZXJuLmggXAogICAgIGh0bWwvY2FudmFzL0Nh
bnZhc1BpeGVsQXJyYXkuaCBcCmRpZmYgLS1naXQgYS9XZWJDb3JlL1dlYkNvcmUudmNwcm9qL1dl
YkNvcmUudmNwcm9qIGIvV2ViQ29yZS9XZWJDb3JlLnZjcHJvai9XZWJDb3JlLnZjcHJvagppbmRl
eCAwNTdhOThjOTMzMzYwZTBkZGUzNmM2MjZhZDRhMjg2YWZkYTBmOTdmLi45OGM2MmU4MWVjNmFj
NGZjYzY4NGIwOTQ2MzhmYjg0YzQ4N2Y4MTk2IDEwMDY0NAotLS0gYS9XZWJDb3JlL1dlYkNvcmUu
dmNwcm9qL1dlYkNvcmUudmNwcm9qCisrKyBiL1dlYkNvcmUvV2ViQ29yZS52Y3Byb2ovV2ViQ29y
ZS52Y3Byb2oKQEAgLTMwODQ1LDYgKzMwODQ1LDE0IEBACiAJCQkJPg0KIAkJCTwvRmlsZT4NCiAJ
CQk8RmlsZQ0KKwkJCQlSZWxhdGl2ZVBhdGg9Ii4uXGh0bWxcQmxvYkJ1aWxkZXIuY3BwIg0KKwkJ
CQk+DQorCQkJPC9GaWxlPg0KKwkJCTxGaWxlDQorCQkJCVJlbGF0aXZlUGF0aD0iLi5caHRtbFxC
bG9iQnVpbGRlci5oIg0KKwkJCQk+DQorCQkJPC9GaWxlPg0KKwkJCTxGaWxlDQogCQkJCVJlbGF0
aXZlUGF0aD0iLi5caHRtbFxjYW52YXNcQ2FudmFzR3JhZGllbnQuY3BwIg0KIAkJCQk+DQogCQkJ
PC9GaWxlPg0KZGlmZiAtLWdpdCBhL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5w
Ynhwcm9qIGIvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKaW5kZXgg
YTFkZDQ5YWUyODMxOWY1MzRkYmFiNGViZjRlZDQ3MDU1ZDE1NmJhOS4uNWY4ZjkxODdhNzRiZDhj
YmQzNzhmODkwODM3YmM1MGYwMjg3ZmU1MiAxMDA2NDQKLS0tIGEvV2ViQ29yZS9XZWJDb3JlLnhj
b2RlcHJvai9wcm9qZWN0LnBieHByb2oKKysrIGIvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9w
cm9qZWN0LnBieHByb2oKQEAgLTIyODMsNiArMjI4Myw4IEBACiAJCTg5NTI1M0RGMTE2QzRGMDYw
MENBQkYwMCAvKiBGaWxlVGhyZWFkVGFzay5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gODk1MjUzREUxMTZDNEYwNjAwQ0FCRjAwIC8qIEZpbGVUaHJlYWRU
YXNrLmggKi87IH07CiAJCTg5ODhFMTBFMTFBMzUwOEIwMERCNzMyRSAvKiBCbG9iSXRlbS5jcHAg
aW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA4OTg4RTEwQzEx
QTM1MDhCMDBEQjczMkUgLyogQmxvYkl0ZW0uY3BwICovOyB9OwogCQk4OTg4RTEwRjExQTM1MDhC
MDBEQjczMkUgLyogQmxvYkl0ZW0uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDg5ODhFMTBEMTFBMzUwOEIwMERCNzMyRSAvKiBCbG9iSXRlbS5oICovOyBz
ZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCTg5QkVENUVCMTFC
RTExQ0UwMDQ0ODQ5MiAvKiBCbG9iQnVpbGRlci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA4OUJFRDVFOTExQkUxMUNFMDA0NDg0OTIgLyogQmxvYkJ1
aWxkZXIuY3BwICovOyB9OworCQk4OUJFRDVFQzExQkUxMUNFMDA0NDg0OTIgLyogQmxvYkJ1aWxk
ZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDg5QkVE
NUVBMTFCRTExQ0UwMDQ0ODQ5MiAvKiBCbG9iQnVpbGRlci5oICovOyB9OwogCQk4RkFDNzc0RDEx
OTg3MkNCMDAxNUFFOTQgLyogSlNNYWluVGhyZWFkRXhlY1N0YXRlLmNwcCBpbiBTb3VyY2VzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDhGOTM0RDg0MTE4OUYxRUUwMDUwOEQ1
RCAvKiBKU01haW5UaHJlYWRFeGVjU3RhdGUuY3BwICovOyB9OwogCQk5MzAyQjBCRDBENzlGODI5
MDBDN0VFODMgLyogUGFnZUdyb3VwLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDkzMDJCMEJDMEQ3OUY4MjkwMEM3RUU4MyAvKiBQYWdlR3JvdXAuY3Bw
ICovOyB9OwogCQk5MzAyQjBCRjBENzlGODJDMDBDN0VFODMgLyogUGFnZUdyb3VwLmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5MzAyQjBCRTBENzlGODJD
MDBDN0VFODMgLyogUGFnZUdyb3VwLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJp
dmF0ZSwgKTsgfTsgfTsKQEAgLTc5MDEsNiArNzkwMyw4IEBACiAJCTg5NTI1M0RFMTE2QzRGMDYw
MENBQkYwMCAvKiBGaWxlVGhyZWFkVGFzay5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBh
dGggPSBGaWxlVGhyZWFkVGFzay5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk4OTg4
RTEwQzExQTM1MDhCMDBEQjczMkUgLyogQmxvYkl0ZW0uY3BwICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jcHAuY3BwOyBwYXRoID0gQmxvYkl0ZW0uY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQk4OTg4RTEwRDExQTM1MDhCMDBEQjczMkUgLyogQmxvYkl0ZW0uaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBwYXRoID0gQmxvYkl0ZW0uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKKwkJODlCRUQ1RTkxMUJFMTFDRTAwNDQ4NDkyIC8qIEJsb2JCdWlsZGVyLmNwcCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEJsb2JCdWlsZGVyLmNwcDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKKwkJODlCRUQ1RUExMUJFMTFDRTAwNDQ4NDkyIC8qIEJsb2JCdWls
ZGVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEJsb2JCdWlsZGVyLmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCThGOTM0RDgzMTE4OUYxRUUwMDUwOEQ1RCAvKiBK
U01haW5UaHJlYWRFeGVjU3RhdGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0g
SlNNYWluVGhyZWFkRXhlY1N0YXRlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCThG
OTM0RDg0MTE4OUYxRUUwMDUwOEQ1RCAvKiBKU01haW5UaHJlYWRFeGVjU3RhdGUuY3BwICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSlNNYWluVGhyZWFkRXhlY1N0YXRlLmNw
cDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJOTMwMkIwQkMwRDc5RjgyOTAwQzdFRTgz
IC8qIFBhZ2VHcm91cC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBQ
YWdlR3JvdXAuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMTMzOTMsNiArMTMz
OTcsOCBAQAogCQkJCTJFQUZBRjBCMTBFMkFGMkQwMDdFRDNENiAvKiBCbG9iLmNwcCAqLywKIAkJ
CQkyRUFGQUYwQzEwRTJBRjJEMDA3RUQzRDYgLyogQmxvYi5oICovLAogCQkJCTJFQUZBRjBEMTBF
MkFGMkQwMDdFRDNENiAvKiBCbG9iLmlkbCAqLywKKwkJCQk4OUJFRDVFOTExQkUxMUNFMDA0NDg0
OTIgLyogQmxvYkJ1aWxkZXIuY3BwICovLAorCQkJCTg5QkVENUVBMTFCRTExQ0UwMDQ0ODQ5MiAv
KiBCbG9iQnVpbGRlci5oICovLAogCQkJCTQ5NDg0RkFFMTAyQ0YwMUUwMDE4N0REMyAvKiBjYW52
YXMgKi8sCiAJCQkJOTNDNDQxRUQwRjgxM0ExQTAwQzFBNjM0IC8qIENvbGxlY3Rpb25DYWNoZS5j
cHAgKi8sCiAJCQkJOTNDNDQxRUUwRjgxM0ExQTAwQzFBNjM0IC8qIENvbGxlY3Rpb25DYWNoZS5o
ICovLApAQCAtMTk0NTksNiArMTk0NjUsNyBAQAogCQkJCTRGMTUzNEUwMTFCNTMzMDIwMDIxRkQ4
NiAvKiBFZGl0aW5nQmVoYXZpb3JUeXBlcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRjk4RkZGNDUx
MUEyNjc2MjAwRjU0OEU4IC8qIENTU09NVXRpbHMuaCBpbiBIZWFkZXJzICovLAogCQkJCTk3NkU4
OTYxMTFDMENBM0EwMEVBOUNBOSAvKiBIVE1MNUVudGl0eVBhcnNlci5oIGluIEhlYWRlcnMgKi8s
CisJCQkJODlCRUQ1RUMxMUJFMTFDRTAwNDQ4NDkyIC8qIEJsb2JCdWlsZGVyLmggaW4gSGVhZGVy
cyAqLywKIAkJCSk7CiAJCQlydW5Pbmx5Rm9yRGVwbG95bWVudFBvc3Rwcm9jZXNzaW5nID0gMDsK
IAkJfTsKQEAgLTIxNzYzLDYgKzIxNzcwLDcgQEAKIAkJCQlCNkIwNTQwOTExQjY4RjEwMDAyNTY0
QzUgLyogSURCT2JqZWN0U3RvcmVJbXBsLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUY5OEZGRjQ0
MTFBMjY3NjIwMEY1NDhFOCAvKiBDU1NPTVV0aWxzLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTk3
NkU4OTYwMTFDMENBM0EwMEVBOUNBOSAvKiBIVE1MNUVudGl0eVBhcnNlci5jcHAgaW4gU291cmNl
cyAqLywKKwkJCQk4OUJFRDVFQjExQkUxMUNFMDA0NDg0OTIgLyogQmxvYkJ1aWxkZXIuY3BwIGlu
IFNvdXJjZXMgKi8sCiAJCQkpOwogCQkJcnVuT25seUZvckRlcGxveW1lbnRQb3N0cHJvY2Vzc2lu
ZyA9IDA7CiAJCX07CmRpZmYgLS1naXQgYS9XZWJDb3JlL2h0bWwvQmxvYi5jcHAgYi9XZWJDb3Jl
L2h0bWwvQmxvYi5jcHAKaW5kZXggMDU0NmYxYzNjMDg4MmRhMjIwOGE5ZTZhMGE3NjJkYjQzNTli
ZWU0YS4uNmQyNWQ4ZGEwNjBkOWU1NWMwNjgwODk4ZTI1MWYyMmEyOTE4ZjdjNCAxMDA2NDQKLS0t
IGEvV2ViQ29yZS9odG1sL0Jsb2IuY3BwCisrKyBiL1dlYkNvcmUvaHRtbC9CbG9iLmNwcApAQCAt
MzYsMTAgKzM2LDE3IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAorQmxvYjo6QmxvYihjb25z
dCBTdHJpbmcmIHR5cGUsIGNvbnN0IEJsb2JJdGVtTGlzdCYgaXRlbXMpCisgICAgOiBtX3R5cGUo
dHlwZSkKK3sKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGl0ZW1zLnNpemUoKTsgKytpKQor
ICAgICAgICBtX2l0ZW1zLmFwcGVuZChpdGVtc1tpXSk7Cit9CisKIEJsb2I6OkJsb2IoY29uc3Qg
U3RyaW5nJiBwYXRoKQogewogICAgIC8vIE5vdGU6IHRoaXMgZG9lc24ndCBpbml0aWFsaXplIHRo
ZSB0eXBlIHVubGlrZSBGaWxlKHBhdGgpLgotICAgIGFwcGVuZChGaWxlQmxvYkl0ZW06OmNyZWF0
ZShwYXRoKSk7CisgICAgbV9pdGVtcy5hcHBlbmQoRmlsZUJsb2JJdGVtOjpjcmVhdGUocGF0aCkp
OwogfQogCiB1bnNpZ25lZCBsb25nIGxvbmcgQmxvYjo6c2l6ZSgpIGNvbnN0CkBAIC01OCwxMSAr
NjUsNiBAQCBjb25zdCBTdHJpbmcmIEJsb2I6OnBhdGgoKSBjb25zdAogICAgIHJldHVybiBtX2l0
ZW1zWzBdLT50b0ZpbGVCbG9iSXRlbSgpLT5wYXRoKCk7CiB9CiAKLXZvaWQgQmxvYjo6YXBwZW5k
KFBhc3NSZWZQdHI8QmxvYkl0ZW0+IGl0ZW0pCi17Ci0gICAgbV9pdGVtcy5hcHBlbmQoaXRlbSk7
Ci19Ci0KICNpZiBFTkFCTEUoQkxPQl9TTElDRSkKIFBhc3NSZWZQdHI8QmxvYj4gQmxvYjo6c2xp
Y2UobG9uZyBsb25nIHN0YXJ0LCBsb25nIGxvbmcgbGVuZ3RoKSBjb25zdAogewpAQCAtODAsMTUg
KzgyLDE2IEBAIFBhc3NSZWZQdHI8QmxvYj4gQmxvYjo6c2xpY2UobG9uZyBsb25nIHN0YXJ0LCBs
b25nIGxvbmcgbGVuZ3RoKSBjb25zdAogICAgICAgICBsZW5ndGggPSB0b3RhbFNpemUgLSBzdGFy
dDsKIAogICAgIHNpemVfdCBpID0gMDsKLSAgICBSZWZQdHI8QmxvYj4gYmxvYiA9IEJsb2I6OmNy
ZWF0ZSgpOworICAgIEJsb2JJdGVtTGlzdCBpdGVtczsKICAgICBmb3IgKDsgaSA8IG1faXRlbXMu
c2l6ZSgpICYmIHN0YXRpY19jYXN0PHVuc2lnbmVkIGxvbmcgbG9uZz4oc3RhcnQpID49IG1faXRl
bXNbaV0tPnNpemUoKTsgKytpKQogICAgICAgICBzdGFydCAtPSBtX2l0ZW1zW2ldLT5zaXplKCk7
CiAgICAgZm9yICg7IGxlbmd0aCA+IDAgJiYgaSA8IG1faXRlbXMuc2l6ZSgpOyArK2kpIHsKLSAg
ICAgICAgYmxvYi0+bV9pdGVtcy5hcHBlbmQobV9pdGVtc1tpXS0+c2xpY2Uoc3RhcnQsIGxlbmd0
aCkpOwotICAgICAgICBsZW5ndGggLT0gYmxvYi0+bV9pdGVtcy5sYXN0KCktPnNpemUoKTsKKyAg
ICAgICAgaXRlbXMuYXBwZW5kKG1faXRlbXNbaV0tPnNsaWNlKHN0YXJ0LCBsZW5ndGgpKTsKKyAg
ICAgICAgbGVuZ3RoIC09IGl0ZW1zLmxhc3QoKS0+c2l6ZSgpOwogICAgICAgICBzdGFydCA9IDA7
CiAgICAgfQotICAgIHJldHVybiBibG9iLnJlbGVhc2UoKTsKKyAgICAvLyBGSVhNRTogUGFzcyBj
b250ZW50IHR5cGUgd2hlbiB3ZSBhZGQgaXQgdG8gc2xpY2UncyBhcmd1bWVudHMuCisgICAgcmV0
dXJuIEJsb2I6OmNyZWF0ZShTdHJpbmcoKSwgaXRlbXMpOwogfQogI2VuZGlmIC8vIEVOQUJMRShC
TE9CX1NMSUNFKQogCmRpZmYgLS1naXQgYS9XZWJDb3JlL2h0bWwvQmxvYi5oIGIvV2ViQ29yZS9o
dG1sL0Jsb2IuaAppbmRleCAzOTE3N2I1MWVlOWQwNzg2ODNmMjAyYTY1MWRmNTgyMzhmMjc0OTU3
Li4yY2E5ZTgyNWUyODFjYjY5YTUxMTBhNGZkZGVlMDNmNzY4YThkZWVjIDEwMDY0NAotLS0gYS9X
ZWJDb3JlL2h0bWwvQmxvYi5oCisrKyBiL1dlYkNvcmUvaHRtbC9CbG9iLmgKQEAgLTQxLDkgKzQx
LDkgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiBjbGFzcyBCbG9iIDogcHVibGljIFJlZkNvdW50
ZWQ8QmxvYj4gewogcHVibGljOgotICAgIHN0YXRpYyBQYXNzUmVmUHRyPEJsb2I+IGNyZWF0ZSgp
CisgICAgc3RhdGljIFBhc3NSZWZQdHI8QmxvYj4gY3JlYXRlKGNvbnN0IFN0cmluZyB0eXBlLCBj
b25zdCBCbG9iSXRlbUxpc3QmIGl0ZW1zKQogICAgIHsKLSAgICAgICAgcmV0dXJuIGFkb3B0UmVm
KG5ldyBCbG9iKCkpOworICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IEJsb2IodHlwZSwgaXRl
bXMpKTsKICAgICB9CiAKICAgICAvLyBGSVhNRTogRGVwcmVjYXRlZCBtZXRob2QuICBUaGlzIGlz
IGNhbGxlZCBvbmx5IGZyb20KQEAgLTYzLDcgKzYzLDYgQEAgcHVibGljOgogICAgIC8vIEZJWE1F
OiBEZXByZWNhdGVkIG1ldGhvZC4KICAgICBjb25zdCBTdHJpbmcmIHBhdGgoKSBjb25zdDsKIAot
ICAgIHZvaWQgYXBwZW5kKFBhc3NSZWZQdHI8QmxvYkl0ZW0+KTsKICAgICBjb25zdCBCbG9iSXRl
bUxpc3QmIGl0ZW1zKCkgY29uc3QgeyByZXR1cm4gbV9pdGVtczsgfQogCiAjaWYgRU5BQkxFKEJM
T0JfU0xJQ0UpCkBAIC03Miw2ICs3MSw3IEBAIHB1YmxpYzoKIAogcHJvdGVjdGVkOgogICAgIEJs
b2IoKSB7IH0KKyAgICBCbG9iKGNvbnN0IFN0cmluZyYgdHlwZSwgY29uc3QgQmxvYkl0ZW1MaXN0
Jik7CiAKICAgICAvLyBGSVhNRTogRGVwcmVjYXRlZCBjb25zdHJ1Y3Rvci4gIFNlZSBhbHNvIHRo
ZSBjb21tZW50IGZvciBCbG9iOjpjcmVhdGUocGF0aCkuCiAgICAgQmxvYihjb25zdCBTdHJpbmcm
IHBhdGgpOwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9odG1sL0Jsb2JCdWlsZGVyLmNwcCBiL1dlYkNv
cmUvaHRtbC9CbG9iQnVpbGRlci5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNTQ4YWQ0OGViYjRkZDRmM2M5ZGFj
Zjg0NjQ1Mjc4MWMzY2RlYzM4ZgotLS0gL2Rldi9udWxsCisrKyBiL1dlYkNvcmUvaHRtbC9CbG9i
QnVpbGRlci5jcHAKQEAgLTAsMCArMSw5MyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMCBH
b29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zIGFyZQorICogbWV0OgorICoKKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgICAg
KiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
CisgKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyCisgKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiBkaXN0cmlidXRpb24uCisgKiAgICAgKiBO
ZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisgKiBj
b250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRl
cml2ZWQgZnJvbQorICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0
ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBD
T1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRF
RCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZF
TlQgU0hBTEwgVEhFIENPUFlSSUdIVAorICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVN
UExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisgKiBM
SU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKworI2lmIEVO
QUJMRShGSUxFX1dSSVRFUikKKworI2luY2x1ZGUgIkJsb2JCdWlsZGVyLmgiCisKKyNpbmNsdWRl
ICJBdG9taWNTdHJpbmcuaCIKKyNpbmNsdWRlICJCbG9iLmgiCisjaW5jbHVkZSAiVGV4dEVuY29k
aW5nLmgiCisjaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgorCituYW1lc3BhY2UgV2ViQ29y
ZSB7CisKK3N0YXRpYyBib29sIGdldExpbmVFbmRpbmdUeXBlRnJvbVN0cmluZyhjb25zdCBBdG9t
aWNTdHJpbmcmIHR5cGVTdHJpbmcsIExpbmVFbmRpbmcmIGVuZGluZ1R5cGUpCit7CisgICAgREVG
SU5FX1NUQVRJQ19MT0NBTChBdG9taWNTdHJpbmcsIHRyYW5zcGFyZW50LCAoInRyYW5zcGFyZW50
IikpOworICAgIERFRklORV9TVEFUSUNfTE9DQUwoQXRvbWljU3RyaW5nLCBuYXRpdmUsICgibmF0
aXZlIikpOworCisgICAgaWYgKHR5cGVTdHJpbmcuaXNFbXB0eSgpIHx8IHR5cGVTdHJpbmcgPT0g
dHJhbnNwYXJlbnQpIHsKKyAgICAgICAgZW5kaW5nVHlwZSA9IEVuZGluZ1RyYW5zcGFyZW50Owor
ICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisgICAgaWYgKHR5cGVTdHJpbmcgPT0gbmF0aXZl
KSB7CisgICAgICAgIGVuZGluZ1R5cGUgPSBFbmRpbmdOYXRpdmU7CisgICAgICAgIHJldHVybiB0
cnVlOworICAgIH0KKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK0Jsb2JCdWlsZGVyOjpCbG9iQnVp
bGRlcigpCit7Cit9CisKK2Jvb2wgQmxvYkJ1aWxkZXI6OmFwcGVuZFN0cmluZyhjb25zdCBTdHJp
bmcmIHRleHQsIGNvbnN0IFN0cmluZyYgdHlwZSwgRXhjZXB0aW9uQ29kZSYgZWMpCit7CisgICAg
ZWMgPSAwOworICAgIExpbmVFbmRpbmcgZW5kaW5nVHlwZTsKKyAgICBpZiAoIWdldExpbmVFbmRp
bmdUeXBlRnJvbVN0cmluZyh0eXBlLCBlbmRpbmdUeXBlKSkgeworICAgICAgICBlYyA9IFNZTlRB
WF9FUlI7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisgICAgbV9pdGVtcy5hcHBlbmQo
U3RyaW5nQmxvYkl0ZW06OmNyZWF0ZSh0ZXh0LCBlbmRpbmdUeXBlLCBVVEY4RW5jb2RpbmcoKSkp
OworICAgIHJldHVybiB0cnVlOworfQorCitib29sIEJsb2JCdWlsZGVyOjphcHBlbmRCbG9iKFBh
c3NSZWZQdHI8QmxvYj4gYmxvYikKK3sKKyAgICBpZiAoYmxvYikgeworICAgICAgICBmb3IgKHNp
emVfdCBpID0gMDsgaSA8IGJsb2ItPml0ZW1zKCkuc2l6ZSgpOyArK2kpCisgICAgICAgICAgICBt
X2l0ZW1zLmFwcGVuZChibG9iLT5pdGVtcygpW2ldKTsKKyAgICAgICAgcmV0dXJuIHRydWU7Cisg
ICAgfQorICAgIHJldHVybiBmYWxzZTsKK30KKworUGFzc1JlZlB0cjxCbG9iPiBCbG9iQnVpbGRl
cjo6Z2V0QmxvYihjb25zdCBTdHJpbmcmIGNvbnRlbnRUeXBlKSBjb25zdAoreworICAgIHJldHVy
biBCbG9iOjpjcmVhdGUoY29udGVudFR5cGUsIG1faXRlbXMpOworfQorCit9IC8vIG5hbWVzcGFj
ZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBFTkFCTEUoRklMRV9XUklURVIpCmRpZmYgLS1naXQgYS9X
ZWJDb3JlL2h0bWwvQmxvYkJ1aWxkZXIuaCBiL1dlYkNvcmUvaHRtbC9CbG9iQnVpbGRlci5oCm5l
dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAuLjdhZWQ2MzNhYTJiMTJkZDU5ZWUyMTNkYjEwNDA0NGU5ODMxNWFlODMKLS0tIC9k
ZXYvbnVsbAorKysgYi9XZWJDb3JlL2h0bWwvQmxvYkJ1aWxkZXIuaApAQCAtMCwwICsxLDY2IEBA
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDEwIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisgKiBtZXQ6CisgKgorICog
ICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyAqIGluIHRo
ZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUK
KyAqIGRpc3RyaWJ1dGlvbi4KKyAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIElu
Yy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBl
bmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisgKiB0aGlzIHNvZnR3YXJl
IHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklC
VVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisgKiBP
V05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJP
RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
CisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKwor
I2lmbmRlZiBCbG9iQnVpbGRlcl9oCisjZGVmaW5lIEJsb2JCdWlsZGVyX2gKKworI2lmIEVOQUJM
RShGSUxFX1dSSVRFUikKKworI2luY2x1ZGUgIkJsb2JJdGVtLmgiCisjaW5jbHVkZSAiUGxhdGZv
cm1TdHJpbmcuaCIKKyNpbmNsdWRlIDx3dGYvUGFzc1JlZlB0ci5oPgorI2luY2x1ZGUgPHd0Zi9S
ZWZDb3VudGVkLmg+CisjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgorCituYW1lc3BhY2UgV2ViQ29y
ZSB7CisKK2NsYXNzIEV4Y2VwdGlvbkNvZGU7CitjbGFzcyBCbG9iOworCitjbGFzcyBCbG9iQnVp
bGRlciA6IHB1YmxpYyBSZWZDb3VudGVkPEJsb2JCdWlsZGVyPiB7CitwdWJsaWM6CisgICAgc3Rh
dGljIFBhc3NSZWZQdHI8QmxvYkJ1aWxkZXI+IGNyZWF0ZSgpIHsgcmV0dXJuIGFkb3B0UmVmKG5l
dyBCbG9iQnVpbGRlcigpKTsgfQorCisgICAgYm9vbCBhcHBlbmRTdHJpbmcoY29uc3QgU3RyaW5n
JiB0ZXh0LCBjb25zdCBTdHJpbmcmIGVuZGluZywgRXhjZXB0aW9uQ29kZSYpOworICAgIGJvb2wg
YXBwZW5kQmxvYihQYXNzUmVmUHRyPEJsb2I+KTsKKworICAgIFBhc3NSZWZQdHI8QmxvYj4gZ2V0
QmxvYihjb25zdCBTdHJpbmcmIGNvbnRlbnRUeXBlKSBjb25zdDsKKworcHJpdmF0ZToKKyAgICBC
bG9iQnVpbGRlcigpOworICAgIEJsb2JJdGVtTGlzdCBtX2l0ZW1zOworfTsKKworfSAvLyBuYW1l
c3BhY2UgV2ViQ29yZQorCisKKyNlbmRpZiAvLyBFTkFCTEUoRklMRV9XUklURVIpCisKKyNlbmRp
ZiAvLyBCbG9iQnVpbGRlcl9oCmRpZmYgLS1naXQgYS9XZWJDb3JlL3BsYXRmb3JtL0Jsb2JJdGVt
LmNwcCBiL1dlYkNvcmUvcGxhdGZvcm0vQmxvYkl0ZW0uY3BwCmluZGV4IDk0OWU3Zjg1YmM3MTFi
YjlkN2IzMzU3MmFlYTQxNWZkNjQwZWNiYTguLjRlYTZhMzc1YWZjMWZjYTQ2Y2U0MTY2MTM2MzRm
M2FmYzNmZmYxNzkgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvcGxhdGZvcm0vQmxvYkl0ZW0uY3BwCisr
KyBiL1dlYkNvcmUvcGxhdGZvcm0vQmxvYkl0ZW0uY3BwCkBAIC0xMjksNiArMTI5LDE0IEBAIENT
dHJpbmcgU3RyaW5nQmxvYkl0ZW06OmNvbnZlcnRUb0NTdHJpbmcoY29uc3QgU3RyaW5nJiB0ZXh0
LCBMaW5lRW5kaW5nIGVuZGluZywKICAgICBpZiAoZW5kaW5nID09IEVuZGluZ1RyYW5zcGFyZW50
KQogICAgICAgICByZXR1cm4gcmVzdWx0OwogCisgICAgaWYgKGVuZGluZyA9PSBFbmRpbmdOYXRp
dmUpIHsKKyNpZiBPUyhXSU5ET1dTKQorICAgICAgICBlbmRpbmcgPSBFbmRpbmdDUkxGOworI2Vs
c2UKKyAgICAgICAgZW5kaW5nID0gRW5kaW5nTEY7CisjZW5kaWYKKyAgICB9CisKICAgICBjb25z
dCBjaGFyKiBlbmRpbmdDaGFycyA9IChlbmRpbmcgPT0gRW5kaW5nQ1JMRikgPyAiXHJcbiIgOiAo
KGVuZGluZyA9PSBFbmRpbmdDUikgPyAiXHIiIDogIlxuIik7CiAKICAgICBpbnQgZW5kaW5nTGVu
Z3RoID0gKGVuZGluZyA9PSBFbmRpbmdDUkxGKSA/IDIgOiAxOwpkaWZmIC0tZ2l0IGEvV2ViQ29y
ZS9wbGF0Zm9ybS9CbG9iSXRlbS5oIGIvV2ViQ29yZS9wbGF0Zm9ybS9CbG9iSXRlbS5oCmluZGV4
IGYyZWU1NmIwODE3OTY0M2E4ZDc5ZTJiODc5NzJjOGQxZWZkZDAyOGIuLjFkMzRjNTk0ZjAzNGYw
M2Q1Mzc4MzFkNTFhM2FmODI4ZTQ0NjdlYTEgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvcGxhdGZvcm0v
QmxvYkl0ZW0uaAorKysgYi9XZWJDb3JlL3BsYXRmb3JtL0Jsb2JJdGVtLmgKQEAgLTQ0LDYgKzQ0
LDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogLy8gU3RyaW5nIGVuZGluZyB0eXBlcy4KIGVudW0g
TGluZUVuZGluZyB7CiAgICAgRW5kaW5nVHJhbnNwYXJlbnQgPSAwLAorICAgIEVuZGluZ05hdGl2
ZSwKICAgICBFbmRpbmdMRiwKICAgICBFbmRpbmdDUiwKICAgICBFbmRpbmdDUkxGLAo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>58523</attachid>
            <date>2010-06-11 16:19:35 -0700</date>
            <delta_ts>2010-06-11 17:13:19 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-36903-20100611161933.patch</filename>
            <type>text/plain</type>
            <size>18075</size>
            <attacher name="Kinuko Yasuda">kinuko</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYkNvcmUvQ01ha2VMaXN0cy50eHQgYi9XZWJDb3JlL0NNYWtlTGlzdHMu
dHh0CmluZGV4IDFiM2NkM2ZhYWQwN2I4ZTBiNWUwZTg3NDdmZTIwYzg1Y2Q1ZmYxZTkuLjhiMmYy
NmE4YWE1ZGZhNzRjZjczM2EwNGJmZGQxMmVhNTEyYmZhZmMgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUv
Q01ha2VMaXN0cy50eHQKKysrIGIvV2ViQ29yZS9DTWFrZUxpc3RzLnR4dApAQCAtODk1LDYgKzg5
NSw3IEBAIFNFVChXZWJDb3JlX1NPVVJDRVMKIAogICAgIGh0bWwvQXN5bmNJbWFnZVJlc2l6ZXIu
Y3BwCiAgICAgaHRtbC9CbG9iLmNwcAorICAgIGh0bWwvQmxvYkJ1aWxkZXIuY3BwCiAgICAgaHRt
bC9Db2xsZWN0aW9uQ2FjaGUuY3BwCiAgICAgaHRtbC9ET01EYXRhR3JpZERhdGFTb3VyY2UuY3Bw
CiAgICAgaHRtbC9ET01Gb3JtRGF0YS5jcHAKZGlmZiAtLWdpdCBhL1dlYkNvcmUvQ2hhbmdlTG9n
IGIvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMWRjOGU1N2MyYmY0M2M1NzI1OTRmZTg5M2VlZjI1
NWI3ZTgyZjMzZS4uM2RiYWYwODcyOWU0MjY4NzQ2YjYxMDEyZTExZGJjNmJjMzZlZGFmOCAxMDA2
NDQKLS0tIGEvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvV2ViQ29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSwyNiBAQAorMjAxMC0wNi0wOCAgS2ludWtvIFlhc3VkYSAgPGtpbnVrb0BjaHJvbWl1bS5v
cmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgSW1w
bGVtZW50IEJsb2JCdWlsZGVyIGludGVybmFsIGNsYXNzIGZvciBCbG9iQnVpbGRlciBzdXBwb3J0
IGFzIGRlZmluZWQgaW4gRmlsZVdyaXRlcgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9MzY5MDMKKworICAgICAgICBObyBuZXcgdGVzdHM7IHRoZXkgd2ls
bCBiZSBhZGRlZCB3aGVuIHdlIGFkZCBqc2MgYmluZGluZ3MuCisKKyAgICAgICAgKiBDTWFrZUxp
c3RzLnR4dDoKKyAgICAgICAgKiBHTlVtYWtlZmlsZS5hbToKKyAgICAgICAgKiBXZWJDb3JlLmd5
cGk6CisgICAgICAgICogV2ViQ29yZS5wcm86CisgICAgICAgICogV2ViQ29yZS52Y3Byb2ovV2Vi
Q29yZS52Y3Byb2o6CisgICAgICAgICogV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9q
OgorICAgICAgICAqIGh0bWwvQmxvYkJ1aWxkZXIuY3BwOiBBZGRlZC4KKyAgICAgICAgKiBodG1s
L0Jsb2JCdWlsZGVyLmg6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6QmxvYkJ1aWxkZXI6OmNy
ZWF0ZSk6CisgICAgICAgICogcGxhdGZvcm0vQmxvYkl0ZW0uY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6U3RyaW5nQmxvYkl0ZW06OmNvbnZlcnRUb0NTdHJpbmcpOiBBZGRlZCBFbmRpbmdOYXRpdmUg
c3VwcG9ydC4KKyAgICAgICAgKiBwbGF0Zm9ybS9CbG9iSXRlbS5oOiBBZGRlZCBFbmRpbmdOYXRp
dmUgbGluZS1lbmRpbmcgdHlwZS4KKyAgICAgICAgKFdlYkNvcmU6Oik6CisKIDIwMTAtMDYtMTEg
IFRvbnkgR2VudGlsY29yZSAgPHRvbnlnQGNocm9taXVtLm9yZz4KIAogICAgICAgICBSZXZpZXdl
ZCBieSBFcmljIFNlaWRlbC4KZGlmZiAtLWdpdCBhL1dlYkNvcmUvR05VbWFrZWZpbGUuYW0gYi9X
ZWJDb3JlL0dOVW1ha2VmaWxlLmFtCmluZGV4IDZkZjBhMWUyN2E1YTE5MTJlYjNmZjUxNmNhMTRj
ZjhmMjUyYjk4YTkuLjY1MjQ4MjM5NTU5OWQ4YmNlMWE2YjkzNzFmYjQ4YmEzNTgyYjI3MDQgMTAw
NjQ0Ci0tLSBhL1dlYkNvcmUvR05VbWFrZWZpbGUuYW0KKysrIGIvV2ViQ29yZS9HTlVtYWtlZmls
ZS5hbQpAQCAtMTA0NSw2ICsxMDQ1LDggQEAgd2ViY29yZV9zb3VyY2VzICs9IFwKIAlXZWJDb3Jl
L2h0bWwvQXN5bmNJbWFnZVJlc2l6ZXIuaCBcCiAJV2ViQ29yZS9odG1sL0Jsb2IuY3BwIFwKIAlX
ZWJDb3JlL2h0bWwvQmxvYi5oIFwKKwlXZWJDb3JlL2h0bWwvQmxvYkJ1aWxkZXIuY3BwIFwKKwlX
ZWJDb3JlL2h0bWwvQmxvYkJ1aWxkZXIuaCBcCiAJV2ViQ29yZS9odG1sL2NhbnZhcy9DYW52YXND
b250ZXh0QXR0cmlidXRlcy5oIFwKIAlXZWJDb3JlL2h0bWwvY2FudmFzL0NhbnZhc0dyYWRpZW50
LmNwcCBcCiAJV2ViQ29yZS9odG1sL2NhbnZhcy9DYW52YXNHcmFkaWVudC5oIFwKZGlmZiAtLWdp
dCBhL1dlYkNvcmUvV2ViQ29yZS5neXBpIGIvV2ViQ29yZS9XZWJDb3JlLmd5cGkKaW5kZXggNzc3
Y2M2ODA5OTVjZWYyMWNmMjRkNWE5NGFiNTg3YjFmYWQ5YmU5Zi4uNWZjMjJmMWRlMTJkODUwYTQw
NDhlMWQ4YzhkMmE1M2YzMjIxMmFhNSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9XZWJDb3JlLmd5cGkK
KysrIGIvV2ViQ29yZS9XZWJDb3JlLmd5cGkKQEAgLTEzOTAsNiArMTM5MCw4IEBACiAgICAgICAg
ICAgICAnaHRtbC9Bc3luY0ltYWdlUmVzaXplci5oJywKICAgICAgICAgICAgICdodG1sL0Jsb2Iu
Y3BwJywKICAgICAgICAgICAgICdodG1sL0Jsb2IuaCcsCisgICAgICAgICAgICAnaHRtbC9CbG9i
QnVpbGRlci5jcHAnLAorICAgICAgICAgICAgJ2h0bWwvQmxvYkJ1aWxkZXIuaCcsCiAgICAgICAg
ICAgICAnaHRtbC9jYW52YXMvQXJyYXlCdWZmZXJWaWV3LmNwcCcsCiAgICAgICAgICAgICAnaHRt
bC9jYW52YXMvQXJyYXlCdWZmZXJWaWV3LmgnLAogICAgICAgICAgICAgJ2h0bWwvY2FudmFzL0Fy
cmF5QnVmZmVyLmNwcCcsCmRpZmYgLS1naXQgYS9XZWJDb3JlL1dlYkNvcmUucHJvIGIvV2ViQ29y
ZS9XZWJDb3JlLnBybwppbmRleCBkM2EyYWRkMmRiOThlODc1NzczYzM2NTFhMTJmYzhmM2VhMTQ5
Nzk2Li5jMzA4OGZlYzhhYmE1NGM0YzlhNjc2N2YyMjk0NGEyMDExZDc5MWQzIDEwMDY0NAotLS0g
YS9XZWJDb3JlL1dlYkNvcmUucHJvCisrKyBiL1dlYkNvcmUvV2ViQ29yZS5wcm8KQEAgLTU5Miw2
ICs1OTIsNyBAQCBTT1VSQ0VTICs9IFwKICAgICBoaXN0b3J5L1BhZ2VDYWNoZS5jcHAgXAogICAg
IGh0bWwvQXN5bmNJbWFnZVJlc2l6ZXIuY3BwIFwKICAgICBodG1sL0Jsb2IuY3BwIFwKKyAgICBo
dG1sL0Jsb2JCdWlsZGVyLmNwcCBcCiAgICAgaHRtbC9jYW52YXMvQ2FudmFzR3JhZGllbnQuY3Bw
IFwKICAgICBodG1sL2NhbnZhcy9DYW52YXNQYXR0ZXJuLmNwcCBcCiAgICAgaHRtbC9jYW52YXMv
Q2FudmFzUGl4ZWxBcnJheS5jcHAgXApAQCAtMTMzMCw2ICsxMzMxLDcgQEAgSEVBREVSUyArPSBc
CiAgICAgaGlzdG9yeS9QYWdlQ2FjaGUuaCBcCiAgICAgaHRtbC9Bc3luY0ltYWdlUmVzaXplci5o
IFwKICAgICBodG1sL0Jsb2IuaCBcCisgICAgaHRtbC9CbG9iQnVpbGRlci5oIFwKICAgICBodG1s
L2NhbnZhcy9DYW52YXNHcmFkaWVudC5oIFwKICAgICBodG1sL2NhbnZhcy9DYW52YXNQYXR0ZXJu
LmggXAogICAgIGh0bWwvY2FudmFzL0NhbnZhc1BpeGVsQXJyYXkuaCBcCmRpZmYgLS1naXQgYS9X
ZWJDb3JlL1dlYkNvcmUudmNwcm9qL1dlYkNvcmUudmNwcm9qIGIvV2ViQ29yZS9XZWJDb3JlLnZj
cHJvai9XZWJDb3JlLnZjcHJvagppbmRleCAwY2Y1MjQwNTZhZDdhZDc3MmE1YWIyNDBjNDFlYTEz
OWZiOGFlNzhkLi5lZWRhNTU3ZGI5MGQ0MWFjNTNjZmZkYTc4ZDg2ODdmODBlNGNmNWM0IDEwMDY0
NAotLS0gYS9XZWJDb3JlL1dlYkNvcmUudmNwcm9qL1dlYkNvcmUudmNwcm9qCisrKyBiL1dlYkNv
cmUvV2ViQ29yZS52Y3Byb2ovV2ViQ29yZS52Y3Byb2oKQEAgLTMwODYxLDYgKzMwODYxLDE0IEBA
CiAJCQkJPg0KIAkJCTwvRmlsZT4NCiAJCQk8RmlsZQ0KKwkJCQlSZWxhdGl2ZVBhdGg9Ii4uXGh0
bWxcQmxvYkJ1aWxkZXIuY3BwIg0KKwkJCQk+DQorCQkJPC9GaWxlPg0KKwkJCTxGaWxlDQorCQkJ
CVJlbGF0aXZlUGF0aD0iLi5caHRtbFxCbG9iQnVpbGRlci5oIg0KKwkJCQk+DQorCQkJPC9GaWxl
Pg0KKwkJCTxGaWxlDQogCQkJCVJlbGF0aXZlUGF0aD0iLi5caHRtbFxjYW52YXNcQ2FudmFzR3Jh
ZGllbnQuY3BwIg0KIAkJCQk+DQogCQkJPC9GaWxlPg0KZGlmZiAtLWdpdCBhL1dlYkNvcmUvV2Vi
Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qIGIvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJv
ai9wcm9qZWN0LnBieHByb2oKaW5kZXggZDcwZDk2YTM4YjBkOTQzODBjYmQyNzA0ZGNiMzM0Yjgz
MWM2NTE2Zi4uOGY4NTUzZWYwNzQ3YjMyZjJkZGRiNzdmZjY2NTc3NDc2MzljNTAxNSAxMDA2NDQK
LS0tIGEvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKKysrIGIvV2Vi
Q29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKQEAgLTIyODMsNiArMjI4Myw4
IEBACiAJCTg5NTI1M0RGMTE2QzRGMDYwMENBQkYwMCAvKiBGaWxlVGhyZWFkVGFzay5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gODk1MjUzREUxMTZDNEYw
NjAwQ0FCRjAwIC8qIEZpbGVUaHJlYWRUYXNrLmggKi87IH07CiAJCTg5ODhFMTBFMTFBMzUwOEIw
MERCNzMyRSAvKiBCbG9iSXRlbS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSA4OTg4RTEwQzExQTM1MDhCMDBEQjczMkUgLyogQmxvYkl0ZW0uY3BwICov
OyB9OwogCQk4OTg4RTEwRjExQTM1MDhCMDBEQjczMkUgLyogQmxvYkl0ZW0uaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDg5ODhFMTBEMTFBMzUwOEIwMERC
NzMyRSAvKiBCbG9iSXRlbS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUs
ICk7IH07IH07CisJCTg5QkVENUVCMTFCRTExQ0UwMDQ0ODQ5MiAvKiBCbG9iQnVpbGRlci5jcHAg
aW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA4OUJFRDVFOTEx
QkUxMUNFMDA0NDg0OTIgLyogQmxvYkJ1aWxkZXIuY3BwICovOyB9OworCQk4OUJFRDVFQzExQkUx
MUNFMDA0NDg0OTIgLyogQmxvYkJ1aWxkZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDg5QkVENUVBMTFCRTExQ0UwMDQ0ODQ5MiAvKiBCbG9iQnVpbGRl
ci5oICovOyB9OwogCQk4RkFDNzc0RDExOTg3MkNCMDAxNUFFOTQgLyogSlNNYWluVGhyZWFkRXhl
Y1N0YXRlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDhGOTM0RDg0MTE4OUYxRUUwMDUwOEQ1RCAvKiBKU01haW5UaHJlYWRFeGVjU3RhdGUuY3BwICov
OyB9OwogCQk5MzAyQjBCRDBENzlGODI5MDBDN0VFODMgLyogUGFnZUdyb3VwLmNwcCBpbiBTb3Vy
Y2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDkzMDJCMEJDMEQ3OUY4Mjkw
MEM3RUU4MyAvKiBQYWdlR3JvdXAuY3BwICovOyB9OwogCQk5MzAyQjBCRjBENzlGODJDMDBDN0VF
ODMgLyogUGFnZUdyb3VwLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSA5MzAyQjBCRTBENzlGODJDMDBDN0VFODMgLyogUGFnZUdyb3VwLmggKi87IHNldHRp
bmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKQEAgLTc5MDcsNiArNzkwOSw4
IEBACiAJCTg5NTI1M0RFMTE2QzRGMDYwMENBQkYwMCAvKiBGaWxlVGhyZWFkVGFzay5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBGaWxlVGhyZWFkVGFzay5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQk4OTg4RTEwQzExQTM1MDhCMDBEQjczMkUgLyogQmxvYkl0ZW0u
Y3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gQmxvYkl0ZW0uY3BwOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk4OTg4RTEwRDExQTM1MDhCMDBEQjczMkUgLyog
QmxvYkl0ZW0uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQmxvYkl0ZW0uaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJODlCRUQ1RTkxMUJFMTFDRTAwNDQ4NDkyIC8q
IEJsb2JCdWlsZGVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEJs
b2JCdWlsZGVyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJODlCRUQ1RUExMUJF
MTFDRTAwNDQ4NDkyIC8qIEJsb2JCdWlsZGVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
cGF0aCA9IEJsb2JCdWlsZGVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCThGOTM0
RDgzMTE4OUYxRUUwMDUwOEQ1RCAvKiBKU01haW5UaHJlYWRFeGVjU3RhdGUuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSlNNYWluVGhyZWFkRXhlY1N0YXRlLmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCThGOTM0RDg0MTE4OUYxRUUwMDUwOEQ1RCAvKiBKU01haW5U
aHJlYWRFeGVjU3RhdGUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0g
SlNNYWluVGhyZWFkRXhlY1N0YXRlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
OTMwMkIwQkMwRDc5RjgyOTAwQzdFRTgzIC8qIFBhZ2VHcm91cC5jcHAgKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBQYWdlR3JvdXAuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwpAQCAtMTM0MDgsNiArMTM0MTIsOCBAQAogCQkJCTJFQUZBRjBCMTBFMkFGMkQwMDdF
RDNENiAvKiBCbG9iLmNwcCAqLywKIAkJCQkyRUFGQUYwQzEwRTJBRjJEMDA3RUQzRDYgLyogQmxv
Yi5oICovLAogCQkJCTJFQUZBRjBEMTBFMkFGMkQwMDdFRDNENiAvKiBCbG9iLmlkbCAqLywKKwkJ
CQk4OUJFRDVFOTExQkUxMUNFMDA0NDg0OTIgLyogQmxvYkJ1aWxkZXIuY3BwICovLAorCQkJCTg5
QkVENUVBMTFCRTExQ0UwMDQ0ODQ5MiAvKiBCbG9iQnVpbGRlci5oICovLAogCQkJCTkzQzQ0MUVE
MEY4MTNBMUEwMEMxQTYzNCAvKiBDb2xsZWN0aW9uQ2FjaGUuY3BwICovLAogCQkJCTkzQzQ0MUVF
MEY4MTNBMUEwMEMxQTYzNCAvKiBDb2xsZWN0aW9uQ2FjaGUuaCAqLywKIAkJCQk5M0M0NDFGRjBG
ODEzQUUxMDBDMUE2MzQgLyogQ29sbGVjdGlvblR5cGUuaCAqLywKQEAgLTE2OTUzLDYgKzE2OTU5
LDcgQEAKIAkJCQlCQzVFQjkyMDBFODIwNDA4MDBCMjU5NjUgLyogQmluZGluZ1VSSS5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJQTg5OTQzMjgwQjQyMzM4ODAwRDdDODAyIC8qIEJpdG1hcEltYWdlLmgg
aW4gSGVhZGVycyAqLywKIAkJCQkyRUFGQUYwRjEwRTJBRjJEMDA3RUQzRDYgLyogQmxvYi5oIGlu
IEhlYWRlcnMgKi8sCisJCQkJODlCRUQ1RUMxMUJFMTFDRTAwNDQ4NDkyIC8qIEJsb2JCdWlsZGVy
LmggaW4gSGVhZGVycyAqLywKIAkJCQk4OTg4RTEwRjExQTM1MDhCMDBEQjczMkUgLyogQmxvYkl0
ZW0uaCBpbiBIZWFkZXJzICovLAogCQkJCTkzRjE5OUJFMDgyNDVFNTkwMDFFOUFCQyAvKiBCbG9j
a0V4Y2VwdGlvbnMuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDNUVCNUUxMEU4MUJFODcwMEIyNTk2
NSAvKiBCb3JkZXJEYXRhLmggaW4gSGVhZGVycyAqLywKQEAgLTE5Nzk1LDYgKzE5ODAyLDcgQEAK
IAkJCQlCQzVFQjkxRjBFODIwNDA4MDBCMjU5NjUgLyogQmluZGluZ1VSSS5jcHAgaW4gU291cmNl
cyAqLywKIAkJCQlBODk5NDMyOTBCNDIzMzg4MDBEN0M4MDIgLyogQml0bWFwSW1hZ2UuY3BwIGlu
IFNvdXJjZXMgKi8sCiAJCQkJMkVBRkFGMEUxMEUyQUYyRDAwN0VEM0Q2IC8qIEJsb2IuY3BwIGlu
IFNvdXJjZXMgKi8sCisJCQkJODlCRUQ1RUIxMUJFMTFDRTAwNDQ4NDkyIC8qIEJsb2JCdWlsZGVy
LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTg5ODhFMTBFMTFBMzUwOEIwMERCNzMyRSAvKiBCbG9i
SXRlbS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk5M0YxOUFFMTA4MjQ1RTU5MDAxRTlBQkMgLyog
QmxvY2tFeGNlcHRpb25zLm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJQkNFQTQ4NTQwOTdEOTMwMjAw
OTRDOUU0IC8qIGJyZWFrX2xpbmVzLmNwcCBpbiBTb3VyY2VzICovLApkaWZmIC0tZ2l0IGEvV2Vi
Q29yZS9odG1sL0Jsb2IuY3BwIGIvV2ViQ29yZS9odG1sL0Jsb2IuY3BwCmluZGV4IDA1NDZmMWMz
YzA4ODJkYTIyMDhhOWU2YTBhNzYyZGI0MzU5YmVlNGEuLjZkMjVkOGRhMDYwZDllNTVjMDY4MDg5
OGUyNTFmMjJhMjkxOGY3YzQgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvaHRtbC9CbG9iLmNwcAorKysg
Yi9XZWJDb3JlL2h0bWwvQmxvYi5jcHAKQEAgLTM2LDEwICszNiwxNyBAQAogCiBuYW1lc3BhY2Ug
V2ViQ29yZSB7CiAKK0Jsb2I6OkJsb2IoY29uc3QgU3RyaW5nJiB0eXBlLCBjb25zdCBCbG9iSXRl
bUxpc3QmIGl0ZW1zKQorICAgIDogbV90eXBlKHR5cGUpCit7CisgICAgZm9yIChzaXplX3QgaSA9
IDA7IGkgPCBpdGVtcy5zaXplKCk7ICsraSkKKyAgICAgICAgbV9pdGVtcy5hcHBlbmQoaXRlbXNb
aV0pOworfQorCiBCbG9iOjpCbG9iKGNvbnN0IFN0cmluZyYgcGF0aCkKIHsKICAgICAvLyBOb3Rl
OiB0aGlzIGRvZXNuJ3QgaW5pdGlhbGl6ZSB0aGUgdHlwZSB1bmxpa2UgRmlsZShwYXRoKS4KLSAg
ICBhcHBlbmQoRmlsZUJsb2JJdGVtOjpjcmVhdGUocGF0aCkpOworICAgIG1faXRlbXMuYXBwZW5k
KEZpbGVCbG9iSXRlbTo6Y3JlYXRlKHBhdGgpKTsKIH0KIAogdW5zaWduZWQgbG9uZyBsb25nIEJs
b2I6OnNpemUoKSBjb25zdApAQCAtNTgsMTEgKzY1LDYgQEAgY29uc3QgU3RyaW5nJiBCbG9iOjpw
YXRoKCkgY29uc3QKICAgICByZXR1cm4gbV9pdGVtc1swXS0+dG9GaWxlQmxvYkl0ZW0oKS0+cGF0
aCgpOwogfQogCi12b2lkIEJsb2I6OmFwcGVuZChQYXNzUmVmUHRyPEJsb2JJdGVtPiBpdGVtKQot
ewotICAgIG1faXRlbXMuYXBwZW5kKGl0ZW0pOwotfQotCiAjaWYgRU5BQkxFKEJMT0JfU0xJQ0Up
CiBQYXNzUmVmUHRyPEJsb2I+IEJsb2I6OnNsaWNlKGxvbmcgbG9uZyBzdGFydCwgbG9uZyBsb25n
IGxlbmd0aCkgY29uc3QKIHsKQEAgLTgwLDE1ICs4MiwxNiBAQCBQYXNzUmVmUHRyPEJsb2I+IEJs
b2I6OnNsaWNlKGxvbmcgbG9uZyBzdGFydCwgbG9uZyBsb25nIGxlbmd0aCkgY29uc3QKICAgICAg
ICAgbGVuZ3RoID0gdG90YWxTaXplIC0gc3RhcnQ7CiAKICAgICBzaXplX3QgaSA9IDA7Ci0gICAg
UmVmUHRyPEJsb2I+IGJsb2IgPSBCbG9iOjpjcmVhdGUoKTsKKyAgICBCbG9iSXRlbUxpc3QgaXRl
bXM7CiAgICAgZm9yICg7IGkgPCBtX2l0ZW1zLnNpemUoKSAmJiBzdGF0aWNfY2FzdDx1bnNpZ25l
ZCBsb25nIGxvbmc+KHN0YXJ0KSA+PSBtX2l0ZW1zW2ldLT5zaXplKCk7ICsraSkKICAgICAgICAg
c3RhcnQgLT0gbV9pdGVtc1tpXS0+c2l6ZSgpOwogICAgIGZvciAoOyBsZW5ndGggPiAwICYmIGkg
PCBtX2l0ZW1zLnNpemUoKTsgKytpKSB7Ci0gICAgICAgIGJsb2ItPm1faXRlbXMuYXBwZW5kKG1f
aXRlbXNbaV0tPnNsaWNlKHN0YXJ0LCBsZW5ndGgpKTsKLSAgICAgICAgbGVuZ3RoIC09IGJsb2It
Pm1faXRlbXMubGFzdCgpLT5zaXplKCk7CisgICAgICAgIGl0ZW1zLmFwcGVuZChtX2l0ZW1zW2ld
LT5zbGljZShzdGFydCwgbGVuZ3RoKSk7CisgICAgICAgIGxlbmd0aCAtPSBpdGVtcy5sYXN0KCkt
PnNpemUoKTsKICAgICAgICAgc3RhcnQgPSAwOwogICAgIH0KLSAgICByZXR1cm4gYmxvYi5yZWxl
YXNlKCk7CisgICAgLy8gRklYTUU6IFBhc3MgY29udGVudCB0eXBlIHdoZW4gd2UgYWRkIGl0IHRv
IHNsaWNlJ3MgYXJndW1lbnRzLgorICAgIHJldHVybiBCbG9iOjpjcmVhdGUoU3RyaW5nKCksIGl0
ZW1zKTsKIH0KICNlbmRpZiAvLyBFTkFCTEUoQkxPQl9TTElDRSkKIApkaWZmIC0tZ2l0IGEvV2Vi
Q29yZS9odG1sL0Jsb2IuaCBiL1dlYkNvcmUvaHRtbC9CbG9iLmgKaW5kZXggMzkxNzdiNTFlZTlk
MDc4NjgzZjIwMmE2NTFkZjU4MjM4ZjI3NDk1Ny4uYWNhNjBlZmI4NzVlOTY4YTI0MzBkMTM5NTE5
MjRkN2JjMDUxMzdlMSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9odG1sL0Jsb2IuaAorKysgYi9XZWJD
b3JlL2h0bWwvQmxvYi5oCkBAIC00MSw5ICs0MSw5IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAog
Y2xhc3MgQmxvYiA6IHB1YmxpYyBSZWZDb3VudGVkPEJsb2I+IHsKIHB1YmxpYzoKLSAgICBzdGF0
aWMgUGFzc1JlZlB0cjxCbG9iPiBjcmVhdGUoKQorICAgIHN0YXRpYyBQYXNzUmVmUHRyPEJsb2I+
IGNyZWF0ZShjb25zdCBTdHJpbmcmIHR5cGUsIGNvbnN0IEJsb2JJdGVtTGlzdCYgaXRlbXMpCiAg
ICAgewotICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IEJsb2IoKSk7CisgICAgICAgIHJldHVy
biBhZG9wdFJlZihuZXcgQmxvYih0eXBlLCBpdGVtcykpOwogICAgIH0KIAogICAgIC8vIEZJWE1F
OiBEZXByZWNhdGVkIG1ldGhvZC4gIFRoaXMgaXMgY2FsbGVkIG9ubHkgZnJvbQpAQCAtNjMsNyAr
NjMsNiBAQCBwdWJsaWM6CiAgICAgLy8gRklYTUU6IERlcHJlY2F0ZWQgbWV0aG9kLgogICAgIGNv
bnN0IFN0cmluZyYgcGF0aCgpIGNvbnN0OwogCi0gICAgdm9pZCBhcHBlbmQoUGFzc1JlZlB0cjxC
bG9iSXRlbT4pOwogICAgIGNvbnN0IEJsb2JJdGVtTGlzdCYgaXRlbXMoKSBjb25zdCB7IHJldHVy
biBtX2l0ZW1zOyB9CiAKICNpZiBFTkFCTEUoQkxPQl9TTElDRSkKQEAgLTcxLDcgKzcwLDcgQEAg
cHVibGljOgogI2VuZGlmCiAKIHByb3RlY3RlZDoKLSAgICBCbG9iKCkgeyB9CisgICAgQmxvYihj
b25zdCBTdHJpbmcmIHR5cGUsIGNvbnN0IEJsb2JJdGVtTGlzdCYpOwogCiAgICAgLy8gRklYTUU6
IERlcHJlY2F0ZWQgY29uc3RydWN0b3IuICBTZWUgYWxzbyB0aGUgY29tbWVudCBmb3IgQmxvYjo6
Y3JlYXRlKHBhdGgpLgogICAgIEJsb2IoY29uc3QgU3RyaW5nJiBwYXRoKTsKZGlmZiAtLWdpdCBh
L1dlYkNvcmUvaHRtbC9CbG9iQnVpbGRlci5jcHAgYi9XZWJDb3JlL2h0bWwvQmxvYkJ1aWxkZXIu
Y3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAuLjA4MDA1NzNiZmY4ZTM2OTI2ZjNlYTJlMzRlMDAyM2FhN2M0NDU3NWEK
LS0tIC9kZXYvbnVsbAorKysgYi9XZWJDb3JlL2h0bWwvQmxvYkJ1aWxkZXIuY3BwCkBAIC0wLDAg
KzEsODkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgR29vZ2xlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKyAqIG1ldDoK
KyAqCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICAgICogUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogY29weXJpZ2h0IG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgor
ICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZQorICogZGlzdHJpYnV0aW9uLgorICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBH
b29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworICogY29udHJpYnV0b3JzIG1heSBiZSB1
c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyAqIHRoaXMg
c29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgor
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5E
IENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorICogQSBQQVJUSUNV
TEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklH
SFQKKyAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgUFJPQ1VSRU1F
TlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRB
LCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
KyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisKKyNpZiBFTkFCTEUoRklMRV9XUklURVIpCisK
KyNpbmNsdWRlICJCbG9iQnVpbGRlci5oIgorCisjaW5jbHVkZSAiQXRvbWljU3RyaW5nLmgiCisj
aW5jbHVkZSAiQmxvYi5oIgorI2luY2x1ZGUgIlRleHRFbmNvZGluZy5oIgorI2luY2x1ZGUgPHd0
Zi90ZXh0L0NTdHJpbmcuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitzdGF0aWMgYm9vbCBn
ZXRMaW5lRW5kaW5nVHlwZUZyb21TdHJpbmcoY29uc3QgQXRvbWljU3RyaW5nJiB0eXBlU3RyaW5n
LCBMaW5lRW5kaW5nJiBlbmRpbmdUeXBlKQoreworICAgIERFRklORV9TVEFUSUNfTE9DQUwoQXRv
bWljU3RyaW5nLCB0cmFuc3BhcmVudCwgKCJ0cmFuc3BhcmVudCIpKTsKKyAgICBERUZJTkVfU1RB
VElDX0xPQ0FMKEF0b21pY1N0cmluZywgbmF0aXZlLCAoIm5hdGl2ZSIpKTsKKworICAgIGlmICh0
eXBlU3RyaW5nLmlzRW1wdHkoKSB8fCB0eXBlU3RyaW5nID09IHRyYW5zcGFyZW50KSB7CisgICAg
ICAgIGVuZGluZ1R5cGUgPSBFbmRpbmdUcmFuc3BhcmVudDsKKyAgICAgICAgcmV0dXJuIHRydWU7
CisgICAgfQorICAgIGlmICh0eXBlU3RyaW5nID09IG5hdGl2ZSkgeworICAgICAgICBlbmRpbmdU
eXBlID0gRW5kaW5nTmF0aXZlOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisgICAgcmV0
dXJuIGZhbHNlOworfQorCitib29sIEJsb2JCdWlsZGVyOjphcHBlbmRTdHJpbmcoY29uc3QgU3Ry
aW5nJiB0ZXh0LCBjb25zdCBTdHJpbmcmIHR5cGUsIEV4Y2VwdGlvbkNvZGUmIGVjKQoreworICAg
IGVjID0gMDsKKyAgICBMaW5lRW5kaW5nIGVuZGluZ1R5cGU7CisgICAgaWYgKCFnZXRMaW5lRW5k
aW5nVHlwZUZyb21TdHJpbmcodHlwZSwgZW5kaW5nVHlwZSkpIHsKKyAgICAgICAgZWMgPSBTWU5U
QVhfRVJSOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorICAgIG1faXRlbXMuYXBwZW5k
KFN0cmluZ0Jsb2JJdGVtOjpjcmVhdGUodGV4dCwgZW5kaW5nVHlwZSwgVVRGOEVuY29kaW5nKCkp
KTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBCbG9iQnVpbGRlcjo6YXBwZW5kQmxvYihQ
YXNzUmVmUHRyPEJsb2I+IGJsb2IpCit7CisgICAgaWYgKGJsb2IpIHsKKyAgICAgICAgZm9yIChz
aXplX3QgaSA9IDA7IGkgPCBibG9iLT5pdGVtcygpLnNpemUoKTsgKytpKQorICAgICAgICAgICAg
bV9pdGVtcy5hcHBlbmQoYmxvYi0+aXRlbXMoKVtpXSk7CisgICAgICAgIHJldHVybiB0cnVlOwor
ICAgIH0KKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK1Bhc3NSZWZQdHI8QmxvYj4gQmxvYkJ1aWxk
ZXI6OmdldEJsb2IoY29uc3QgU3RyaW5nJiBjb250ZW50VHlwZSkgY29uc3QKK3sKKyAgICByZXR1
cm4gQmxvYjo6Y3JlYXRlKGNvbnRlbnRUeXBlLCBtX2l0ZW1zKTsKK30KKworfSAvLyBuYW1lc3Bh
Y2UgV2ViQ29yZQorCisjZW5kaWYgLy8gRU5BQkxFKEZJTEVfV1JJVEVSKQpkaWZmIC0tZ2l0IGEv
V2ViQ29yZS9odG1sL0Jsb2JCdWlsZGVyLmggYi9XZWJDb3JlL2h0bWwvQmxvYkJ1aWxkZXIuaApu
ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwLi42NzFhNTVlNjhlMGU3MjJmN2E2OTk1MjcwY2U3ZDAzNjVkOWFlOGMwCi0tLSAv
ZGV2L251bGwKKysrIGIvV2ViQ29yZS9odG1sL0Jsb2JCdWlsZGVyLmgKQEAgLTAsMCArMSw2NCBA
QAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQorICogbWV0OgorICoKKyAq
ICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisgKiBpbiB0
aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
CisgKiBkaXN0cmlidXRpb24uCisgKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJ
bmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisgKiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8g
ZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorICogdGhpcyBzb2Z0d2Fy
ZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJ
QlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorICog
T1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqIERBVEEsIE9SIFBS
T0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WQorICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkg
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisK
KyNpZm5kZWYgQmxvYkJ1aWxkZXJfaAorI2RlZmluZSBCbG9iQnVpbGRlcl9oCisKKyNpZiBFTkFC
TEUoRklMRV9XUklURVIpCisKKyNpbmNsdWRlICJCbG9iSXRlbS5oIgorI2luY2x1ZGUgIlBsYXRm
b3JtU3RyaW5nLmgiCisjaW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIuaD4KKyNpbmNsdWRlIDx3dGYv
UmVmQ291bnRlZC5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIEV4Y2VwdGlvbkNv
ZGU7CitjbGFzcyBCbG9iOworCitjbGFzcyBCbG9iQnVpbGRlciA6IHB1YmxpYyBSZWZDb3VudGVk
PEJsb2JCdWlsZGVyPiB7CitwdWJsaWM6CisgICAgc3RhdGljIFBhc3NSZWZQdHI8QmxvYkJ1aWxk
ZXI+IGNyZWF0ZSgpIHsgcmV0dXJuIGFkb3B0UmVmKG5ldyBCbG9iQnVpbGRlcigpKTsgfQorCisg
ICAgYm9vbCBhcHBlbmRTdHJpbmcoY29uc3QgU3RyaW5nJiB0ZXh0LCBjb25zdCBTdHJpbmcmIGVu
ZGluZywgRXhjZXB0aW9uQ29kZSYpOworICAgIGJvb2wgYXBwZW5kQmxvYihQYXNzUmVmUHRyPEJs
b2I+KTsKKworICAgIFBhc3NSZWZQdHI8QmxvYj4gZ2V0QmxvYihjb25zdCBTdHJpbmcmIGNvbnRl
bnRUeXBlKSBjb25zdDsKKworcHJpdmF0ZToKKyAgICBCbG9iSXRlbUxpc3QgbV9pdGVtczsKK307
CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworCisjZW5kaWYgLy8gRU5BQkxFKEZJTEVfV1JJ
VEVSKQorCisjZW5kaWYgLy8gQmxvYkJ1aWxkZXJfaApkaWZmIC0tZ2l0IGEvV2ViQ29yZS9wbGF0
Zm9ybS9CbG9iSXRlbS5jcHAgYi9XZWJDb3JlL3BsYXRmb3JtL0Jsb2JJdGVtLmNwcAppbmRleCA5
NDllN2Y4NWJjNzExYmI5ZDdiMzM1NzJhZWE0MTVmZDY0MGVjYmE4Li40ZWE2YTM3NWFmYzFmY2E0
NmNlNDE2NjEzNjM0ZjNhZmMzZmZmMTc5IDEwMDY0NAotLS0gYS9XZWJDb3JlL3BsYXRmb3JtL0Js
b2JJdGVtLmNwcAorKysgYi9XZWJDb3JlL3BsYXRmb3JtL0Jsb2JJdGVtLmNwcApAQCAtMTI5LDYg
KzEyOSwxNCBAQCBDU3RyaW5nIFN0cmluZ0Jsb2JJdGVtOjpjb252ZXJ0VG9DU3RyaW5nKGNvbnN0
IFN0cmluZyYgdGV4dCwgTGluZUVuZGluZyBlbmRpbmcsCiAgICAgaWYgKGVuZGluZyA9PSBFbmRp
bmdUcmFuc3BhcmVudCkKICAgICAgICAgcmV0dXJuIHJlc3VsdDsKIAorICAgIGlmIChlbmRpbmcg
PT0gRW5kaW5nTmF0aXZlKSB7CisjaWYgT1MoV0lORE9XUykKKyAgICAgICAgZW5kaW5nID0gRW5k
aW5nQ1JMRjsKKyNlbHNlCisgICAgICAgIGVuZGluZyA9IEVuZGluZ0xGOworI2VuZGlmCisgICAg
fQorCiAgICAgY29uc3QgY2hhciogZW5kaW5nQ2hhcnMgPSAoZW5kaW5nID09IEVuZGluZ0NSTEYp
ID8gIlxyXG4iIDogKChlbmRpbmcgPT0gRW5kaW5nQ1IpID8gIlxyIiA6ICJcbiIpOwogCiAgICAg
aW50IGVuZGluZ0xlbmd0aCA9IChlbmRpbmcgPT0gRW5kaW5nQ1JMRikgPyAyIDogMTsKZGlmZiAt
LWdpdCBhL1dlYkNvcmUvcGxhdGZvcm0vQmxvYkl0ZW0uaCBiL1dlYkNvcmUvcGxhdGZvcm0vQmxv
Ykl0ZW0uaAppbmRleCBmMmVlNTZiMDgxNzk2NDNhOGQ3OWUyYjg3OTcyYzhkMWVmZGQwMjhiLi4x
ZDM0YzU5NGYwMzRmMDNkNTM3ODMxZDUxYTNhZjgyOGU0NDY3ZWExIDEwMDY0NAotLS0gYS9XZWJD
b3JlL3BsYXRmb3JtL0Jsb2JJdGVtLmgKKysrIGIvV2ViQ29yZS9wbGF0Zm9ybS9CbG9iSXRlbS5o
CkBAIC00NCw2ICs0NCw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIC8vIFN0cmluZyBlbmRpbmcg
dHlwZXMuCiBlbnVtIExpbmVFbmRpbmcgewogICAgIEVuZGluZ1RyYW5zcGFyZW50ID0gMCwKKyAg
ICBFbmRpbmdOYXRpdmUsCiAgICAgRW5kaW5nTEYsCiAgICAgRW5kaW5nQ1IsCiAgICAgRW5kaW5n
Q1JMRiwK
</data>
<flag name="review"
          id="44844"
          type_id="1"
          status="+"
          setter="jianli"
    />
          </attachment>
      

    </bug>

</bugzilla>