<?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>82888</bug_id>
          
          <creation_ts>2012-04-02 05:11:51 -0700</creation_ts>
          <short_desc>Consider replacing return type of Clipboard::types() from ListHashSet&lt;String&gt; to Vector&lt;String&gt;</short_desc>
          <delta_ts>2013-03-13 15:09:30 -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>HTML Editing</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>REOPENED</bug_status>
          <resolution></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>
          
          <blocked>82878</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Vineet Chaudhary (vineetc)">code.vineet</reporter>
          <assigned_to name="Daniel Cheng">dcheng</assigned_to>
          <cc>abarth</cc>
    
    <cc>andersca</cc>
    
    <cc>beidson</cc>
    
    <cc>benjamin</cc>
    
    <cc>darin</cc>
    
    <cc>dcheng</cc>
    
    <cc>enrica</cc>
    
    <cc>eric</cc>
    
    <cc>esprehn+autocc</cc>
    
    <cc>gavinp</cc>
    
    <cc>gyuyoung.kim</cc>
    
    <cc>haraken</cc>
    
    <cc>japhet</cc>
    
    <cc>mifenton</cc>
    
    <cc>ojan.autocc</cc>
    
    <cc>rakuco</cc>
    
    <cc>rniwa</cc>
    
    <cc>rwlbuis</cc>
    
    <cc>tonikitoo</cc>
    
    <cc>webkit.review.bot</cc>
    
    <cc>yong.li.webkit</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>593372</commentid>
    <comment_count>0</comment_count>
    <who name="Vineet Chaudhary (vineetc)">code.vineet</who>
    <bug_when>2012-04-02 05:11:51 -0700</bug_when>
    <thetext>As part of removing custom bindings of types Array Clipboard.idl also needs to have modified to have sequence&lt;String&gt;.

But according to current implementation of the Clipboard::types() it returns HashSet&lt;String&gt;.
In order to remove the custom bindings it should of type Vector&lt;String&gt;.

Please let me know If you have any suggestions/thoughts on this.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>593420</commentid>
    <comment_count>1</comment_count>
      <attachid>135087</attachid>
    <who name="Vineet Chaudhary (vineetc)">code.vineet</who>
    <bug_when>2012-04-02 06:36:29 -0700</bug_when>
    <thetext>Created attachment 135087
proposed patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>593424</commentid>
    <comment_count>2</comment_count>
      <attachid>135087</attachid>
    <who name="Kentaro Hara">haraken</who>
    <bug_when>2012-04-02 06:40:36 -0700</bug_when>
    <thetext>Comment on attachment 135087
proposed patch

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

&gt; Source/WebCore/ChangeLog:14
&gt; +        * bindings/js/JSClipboardCustom.cpp: Replace data type from HashSet&lt;&gt; to Vector&lt;&gt;.

Why do you think that JSClipboardCustom.cpp had been using HashSet&lt;&gt; instead of Vector&lt;&gt;? If there is any performance concern, we need to confirm it. If no strong reason, let me r+ it.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>593700</commentid>
    <comment_count>3</comment_count>
      <attachid>135158</attachid>
    <who name="Vineet Chaudhary (vineetc)">code.vineet</who>
    <bug_when>2012-04-02 12:43:55 -0700</bug_when>
    <thetext>Created attachment 135158
patch

reattaching patch to get the ews result.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>593716</commentid>
    <comment_count>4</comment_count>
    <who name="Vineet Chaudhary (vineetc)">code.vineet</who>
    <bug_when>2012-04-02 12:52:33 -0700</bug_when>
    <thetext>(In reply to comment #2)
&gt; (From update of attachment 135087 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=135087&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/ChangeLog:14
&gt; &gt; +        * bindings/js/JSClipboardCustom.cpp: Replace data type from HashSet&lt;&gt; to Vector&lt;&gt;.
&gt; 
&gt; Why do you think that JSClipboardCustom.cpp had been using HashSet&lt;&gt; instead of Vector&lt;&gt;? If there is any performance concern, we need to confirm it. If no strong reason, let me r+ it.

I dont think HashSet was introduced (http://trac.webkit.org/changeset/16479/) for the performance concerns here but yes I agree In general HashSet are quite faster than Vector in some cases.
Please let me know I should add some performance test?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>593914</commentid>
    <comment_count>5</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2012-04-02 15:24:28 -0700</bug_when>
    <thetext>&gt; http://trac.webkit.org/changeset/16479/

Please author and reviewer of a patch when discussing it. They are the ones most likely to have insight.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>594147</commentid>
    <comment_count>6</comment_count>
    <who name="Kentaro Hara">haraken</who>
    <bug_when>2012-04-02 19:36:22 -0700</bug_when>
    <thetext>acarlsson, darin: Do you have any concern (in terms of performance or something) to change HashSet&lt;&gt; to Vector&lt;&gt;? We can clean up bindings code by the change.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>594299</commentid>
    <comment_count>7</comment_count>
      <attachid>135158</attachid>
    <who name="Vineet Chaudhary (vineetc)">code.vineet</who>
    <bug_when>2012-04-03 02:01:58 -0700</bug_when>
    <thetext>Comment on attachment 135158
patch

Setting review flag to get comments. May be I have to upload patch again as buildbot was not able to apply patch after review comments.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>595404</commentid>
    <comment_count>8</comment_count>
    <who name="Vineet Chaudhary (vineetc)">code.vineet</who>
    <bug_when>2012-04-04 04:19:42 -0700</bug_when>
    <thetext>Hi Anders Carlsson/Darin 
Can you please provide your feedback on this patch.  Thanks.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>598243</commentid>
    <comment_count>9</comment_count>
    <who name="Vineet Chaudhary (vineetc)">code.vineet</who>
    <bug_when>2012-04-09 05:45:29 -0700</bug_when>
    <thetext>Hi Darin 
Can you please provide your feedback on this patch.
Please let me know if some more inputs required.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>598244</commentid>
    <comment_count>10</comment_count>
    <who name="Kentaro Hara">haraken</who>
    <bug_when>2012-04-09 05:47:33 -0700</bug_when>
    <thetext>vineetc: Pinging in IRC might be another option to catch him in his time zone.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>605629</commentid>
    <comment_count>11</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2012-04-19 09:28:19 -0700</bug_when>
    <thetext>I suggest posting a new patch that applies so the EWS can process it.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>606026</commentid>
    <comment_count>12</comment_count>
      <attachid>135158</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2012-04-19 15:44:51 -0700</bug_when>
    <thetext>Comment on attachment 135158
patch

How do we avoid duplicates in the list?  Or are duplicates OK?  We need a test which shows one or the other.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>633751</commentid>
    <comment_count>13</comment_count>
      <attachid>144017</attachid>
    <who name="Vineet Chaudhary (vineetc)">code.vineet</who>
    <bug_when>2012-05-25 02:36:51 -0700</bug_when>
    <thetext>Created attachment 144017
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>633758</commentid>
    <comment_count>14</comment_count>
    <who name="Vineet Chaudhary (vineetc)">code.vineet</who>
    <bug_when>2012-05-25 02:43:45 -0700</bug_when>
    <thetext>(In reply to comment #12)
&gt; (From update of attachment 135158 [details])
&gt; How do we avoid duplicates in the list?  Or are duplicates OK?  We need a test which shows one or the other.

I checked the code actually types() are readonly to JS and hard-codeded in platform specific files. eg. in ClipboardGtk::types() every time it will return new vector with below values &quot;text/plain&quot;, &quot;Text&quot; and &quot;text&quot; so it shouldn&apos;t contain duplicates.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>702463</commentid>
    <comment_count>15</comment_count>
      <attachid>144017</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2012-08-22 15:44:15 -0700</bug_when>
    <thetext>Comment on attachment 144017
Patch

I think the Mac port could easily end up with duplicates here, which could be confusing.   But I guess we&apos;ll deal with those when they come up.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>702470</commentid>
    <comment_count>16</comment_count>
      <attachid>144017</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-08-22 15:46:34 -0700</bug_when>
    <thetext>Comment on attachment 144017
Patch

Rejecting attachment 144017 from commit-queue.

Failed to run &quot;[&apos;/mnt/git/webkit-commit-queue/Tools/Scripts/webkit-patch&apos;, &apos;--status-host=queues.webkit.org&apos;, &apos;-...&quot; exit_code: 2

Last 500 characters of output:
1 line).
patching file Source/WebCore/platform/qt/ClipboardQt.h
patching file Source/WebCore/platform/win/ClipboardWin.cpp
patching file Source/WebCore/platform/win/ClipboardWin.h
patching file Source/WebCore/platform/wx/ClipboardWx.cpp
Hunk #1 succeeded at 72 (offset 2 lines).
patching file Source/WebCore/platform/wx/ClipboardWx.h

Failed to run &quot;[u&apos;/mnt/git/webkit-commit-queue/Tools/Scripts/svn-apply&apos;, u&apos;--force&apos;, u&apos;--reviewer&apos;, u&apos;Eric Seidel&apos;]&quot; exit_code: 1 cwd: /mnt/git/webkit-commit-queue/

Full output: http://queues.webkit.org/results/13571393</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>702482</commentid>
    <comment_count>17</comment_count>
    <who name="Vineet Chaudhary (vineetc)">code.vineet</who>
    <bug_when>2012-08-22 15:54:59 -0700</bug_when>
    <thetext>(In reply to comment #15)
&gt; (From update of attachment 144017 [details])
&gt; I think the Mac port could easily end up with duplicates here, which could be confusing.   But I guess we&apos;ll deal with those when they come up.

Thanks Eric, I will rebased patch again for review.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>702572</commentid>
    <comment_count>18</comment_count>
      <attachid>160053</attachid>
    <who name="Vineet Chaudhary (vineetc)">code.vineet</who>
    <bug_when>2012-08-22 17:50:30 -0700</bug_when>
    <thetext>Created attachment 160053
updated_patch

Attaching rebased patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>702575</commentid>
    <comment_count>19</comment_count>
      <attachid>160053</attachid>
    <who name="Kentaro Hara">haraken</who>
    <bug_when>2012-08-22 17:53:09 -0700</bug_when>
    <thetext>Comment on attachment 160053
updated_patch

No explicit concerns about this change for a long time in this thread... So it looks OK to land it now.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>702619</commentid>
    <comment_count>20</comment_count>
      <attachid>160053</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-08-22 18:56:32 -0700</bug_when>
    <thetext>Comment on attachment 160053
updated_patch

Clearing flags on attachment: 160053

Committed r126383: &lt;http://trac.webkit.org/changeset/126383&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>702620</commentid>
    <comment_count>21</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-08-22 18:56:37 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>702682</commentid>
    <comment_count>22</comment_count>
    <who name="Kentaro Hara">haraken</who>
    <bug_when>2012-08-22 21:48:53 -0700</bug_when>
    <thetext>Reverted r126383 for reason:

Chromium win build crash

Committed r126390: &lt;http://trac.webkit.org/changeset/126390&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>702683</commentid>
    <comment_count>23</comment_count>
    <who name="Kentaro Hara">haraken</who>
    <bug_when>2012-08-22 21:49:04 -0700</bug_when>
    <thetext>This crashes Chromium/Win build. I rolled out the patch.
http://build.webkit.org/builders/Chromium%20Win%20Release/builds/47706/steps/compile-webkit/logs/stdio

vineetc: Would you take a look?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>702862</commentid>
    <comment_count>24</comment_count>
    <who name="Vineet Chaudhary (vineetc)">code.vineet</who>
    <bug_when>2012-08-23 04:35:35 -0700</bug_when>
    <thetext>(In reply to comment #23)
&gt; This crashes Chromium/Win build. I rolled out the patch.
&gt; http://build.webkit.org/builders/Chromium%20Win%20Release/builds/47706/steps/compile-webkit/logs/stdio
&gt; 
&gt; vineetc: Would you take a look?

Sorry for late reply!! Actually I don&apos;t have WIN machine so I couldn&apos;t check issue, but looking at the build error 

DragDataChromium.cpp(119): error C2664: &apos;bool WTF::Vector&lt;T&gt;::contains&lt;const char[]&gt;(U (&amp;)) const&apos; : cannot convert parameter 1 from &apos;const char []&apos; to &apos;const char (&amp;)[1]&apos;
with
[
    T=WTF::String,
    U=const char []
]
Reason: cannot convert from &apos;const char []&apos; to &apos;const char [1]&apos;
There is no context in which this conversion is possible

Still I couldn&apos;t figure out how come this builds on Linux/Chrome and not Win/Chrome?
I checked WTFString.h and Vector.h but nothing found anything compiler or platform specific code there.

One quick solution could be passing String object than char array
Can this be valid solution? like

&gt; Source/WebCore/platform/chromium/ChromiumDataObject.cpp:142
&gt; -        results.append(mimeTypeFiles);
  +        results.append(String(mimeTypeFiles));</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>702864</commentid>
    <comment_count>25</comment_count>
    <who name="Kentaro Hara">haraken</who>
    <bug_when>2012-08-23 04:38:53 -0700</bug_when>
    <thetext>(In reply to comment #24)
&gt; DragDataChromium.cpp(119): error C2664: &apos;bool WTF::Vector&lt;T&gt;::contains&lt;const char[]&gt;(U (&amp;)) const&apos; : cannot convert parameter 1 from &apos;const char []&apos; to &apos;const char (&amp;)[1]&apos;
&gt; Reason: cannot convert from &apos;const char []&apos; to &apos;const char [1]&apos;
&gt; 
&gt; Still I couldn&apos;t figure out how come this builds on Linux/Chrome and not Win/Chrome?
&gt; I checked WTFString.h and Vector.h but nothing found anything compiler or platform specific code there.

I couldn&apos;t figure out either. Another observation is that HashSet.contains() didn&apos;t cause this problem but Vector.contains() caused this problem.

&gt; One quick solution could be passing String object than char array
&gt; Can this be valid solution? like
&gt; 
&gt; &gt; Source/WebCore/platform/chromium/ChromiumDataObject.cpp:142
&gt; &gt; -        results.append(mimeTypeFiles);
&gt;   +        results.append(String(mimeTypeFiles));

It might fix the error, but we might want to avoid it if possible...</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>703410</commentid>
    <comment_count>26</comment_count>
      <attachid>160053</attachid>
    <who name="Benjamin Poulain">benjamin</who>
    <bug_when>2012-08-23 14:48:48 -0700</bug_when>
    <thetext>Comment on attachment 160053
updated_patch

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

I commented about ASCIILiteral() only for Mac but that applies on the other platforms.

&gt; Source/WebCore/ChangeLog:11
&gt; +        No new tests. Exixting test should pass with this change as no behavoural changes.

Exixting -&gt; Existing

&gt; Source/WebCore/bindings/v8/custom/V8ClipboardCustom.cpp:60
&gt; -    HashSet&lt;String&gt;::const_iterator end = types.end();
&gt; +    Vector&lt;String&gt;::const_iterator end = types.end();
&gt;      int index = 0;
&gt; -    for (HashSet&lt;String&gt;::const_iterator it = types.begin(); it != end; ++it, ++index)
&gt; +    for (Vector&lt;String&gt;::const_iterator it = types.begin(); it != end; ++it, ++index)
&gt;          result-&gt;Set(v8Integer(index, info.GetIsolate()), v8String(*it, info.GetIsolate()));

I have the feeling this could be made much clearer with:
for (size_t i = 0; i &lt; types.size() ++i) {
    ...

&gt; Source/WebCore/platform/mac/ClipboardMac.mm:127
&gt; +        resultTypes.append(&quot;text/plain&quot;);

This should use ASCIILiteral().

&gt; Source/WebCore/platform/mac/ClipboardMac.mm:131
&gt; -        resultTypes.add(&quot;text/uri-list&quot;);
&gt; +        resultTypes.append(&quot;text/uri-list&quot;);

ditto.

&gt; Source/WebCore/platform/mac/ClipboardMac.mm:144
&gt; -            resultTypes.add(&quot;text/uri-list&quot;);
&gt; -            resultTypes.add(&quot;Files&quot;);
&gt; +            resultTypes.append(&quot;text/uri-list&quot;);
&gt; +            resultTypes.append(&quot;Files&quot;);

ditto.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>826569</commentid>
    <comment_count>27</comment_count>
    <who name="Vineet Chaudhary (vineetc)">code.vineet</who>
    <bug_when>2013-02-06 11:06:46 -0800</bug_when>
    <thetext>Reopening as patch was rolled out.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>826796</commentid>
    <comment_count>28</comment_count>
      <attachid>186932</attachid>
    <who name="Vineet Chaudhary (vineetc)">code.vineet</who>
    <bug_when>2013-02-06 15:19:56 -0800</bug_when>
    <thetext>Created attachment 186932
updated_patch

(In reply to comment #26)
&gt; (From update of attachment 160053 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=160053&amp;action=review
&gt; 
&gt; I commented about ASCIILiteral() only for Mac but that applies on the other platforms.

I am trying using ASCIILiteral() for other platforms too,
but haven&apos;t checked for chrome/win build.

&gt; &gt; Source/WebCore/bindings/v8/custom/V8ClipboardCustom.cpp:60
&gt; &gt; -    HashSet&lt;String&gt;::const_iterator end = types.end();
&gt; &gt; +    Vector&lt;String&gt;::const_iterator end = types.end();
&gt; &gt;      int index = 0;
&gt; &gt; -    for (HashSet&lt;String&gt;::const_iterator it = types.begin(); it != end; ++it, ++index)
&gt; &gt; +    for (Vector&lt;String&gt;::const_iterator it = types.begin(); it != end; ++it, ++index)
&gt; &gt;          result-&gt;Set(v8Integer(index, info.GetIsolate()), v8String(*it, info.GetIsolate()));
&gt; 
&gt; I have the feeling this could be made much clearer with:
&gt; for (size_t i = 0; i &lt; types.size() ++i) {
&gt;     ...

Thanks for suggestion..
but after landing this patch anyways these custom bindings will be removed soon.

&gt; 
&gt; &gt; Source/WebCore/platform/mac/ClipboardMac.mm:127
&gt; &gt; +        resultTypes.append(&quot;text/plain&quot;);
&gt; 
&gt; This should use ASCIILiteral().
&gt; 
&gt; &gt; Source/WebCore/platform/mac/ClipboardMac.mm:131
&gt; &gt; -        resultTypes.add(&quot;text/uri-list&quot;);
&gt; &gt; +        resultTypes.append(&quot;text/uri-list&quot;);
&gt; 
&gt; ditto.
&gt; 
&gt; &gt; Source/WebCore/platform/mac/ClipboardMac.mm:144
&gt; &gt; -            resultTypes.add(&quot;text/uri-list&quot;);
&gt; &gt; -            resultTypes.add(&quot;Files&quot;);
&gt; &gt; +            resultTypes.append(&quot;text/uri-list&quot;);
&gt; &gt; +            resultTypes.append(&quot;Files&quot;);
&gt; 
&gt; ditto.
Done.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>826921</commentid>
    <comment_count>29</comment_count>
      <attachid>186932</attachid>
    <who name="Kentaro Hara">haraken</who>
    <bug_when>2013-02-06 17:40:44 -0800</bug_when>
    <thetext>Comment on attachment 186932
updated_patch

LGTM</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>827009</commentid>
    <comment_count>30</comment_count>
      <attachid>186932</attachid>
    <who name="Build Bot">buildbot</who>
    <bug_when>2013-02-06 19:38:26 -0800</bug_when>
    <thetext>Comment on attachment 186932
updated_patch

Attachment 186932 did not pass win-ews (win):
Output: http://queues.webkit.org/results/16416013</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>827675</commentid>
    <comment_count>31</comment_count>
      <attachid>186932</attachid>
    <who name="Vineet Chaudhary (vineetc)">code.vineet</who>
    <bug_when>2013-02-07 10:35:31 -0800</bug_when>
    <thetext>Comment on attachment 186932
updated_patch

I need to watch cr/win build to pass this patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>827718</commentid>
    <comment_count>32</comment_count>
      <attachid>186932</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2013-02-07 11:02:33 -0800</bug_when>
    <thetext>Comment on attachment 186932
updated_patch

Clearing flags on attachment: 186932

Committed r142155: &lt;http://trac.webkit.org/changeset/142155&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>827719</commentid>
    <comment_count>33</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2013-02-07 11:02:42 -0800</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>827855</commentid>
    <comment_count>34</comment_count>
    <who name="Gavin Peters">gavinp</who>
    <bug_when>2013-02-07 13:28:22 -0800</bug_when>
    <thetext>Reverted r142155 for reason:

cr/win build broke.

Committed r142170: &lt;http://trac.webkit.org/changeset/142170&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>827857</commentid>
    <comment_count>35</comment_count>
    <who name="Gavin Peters">gavinp</who>
    <bug_when>2013-02-07 13:28:43 -0800</bug_when>
    <thetext>Sorry, it happened again. See http://build.chromium.org/p/chromium.webkit/builders/Win%20Builder/builds/34703/steps/compile/logs/stdio</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>827875</commentid>
    <comment_count>36</comment_count>
    <who name="Vineet Chaudhary (vineetc)">code.vineet</who>
    <bug_when>2013-02-07 13:55:52 -0800</bug_when>
    <thetext>(In reply to comment #35)
&gt; Sorry, it happened again. See http://build.chromium.org/p/chromium.webkit/builders/Win%20Builder/builds/34703/steps/compile/logs/stdio

No I should be sorry for this!! Unfortunately I don&apos;t have cr/win port to check the issue :(.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>827970</commentid>
    <comment_count>37</comment_count>
    <who name="Daniel Cheng">dcheng</who>
    <bug_when>2013-02-07 16:13:44 -0800</bug_when>
    <thetext>(In reply to comment #36)
&gt; (In reply to comment #35)
&gt; &gt; Sorry, it happened again. See http://build.chromium.org/p/chromium.webkit/builders/Win%20Builder/builds/34703/steps/compile/logs/stdio
&gt; 
&gt; No I should be sorry for this!! Unfortunately I don&apos;t have cr/win port to check the issue :(.

Would using ASCIILiteral() in the call to contains() in DragDataChromium.cpp help? All the contains() calls there are actually just char[] constants anyway, so I think this would be an appropriate use of ASCIILiteral.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>828024</commentid>
    <comment_count>38</comment_count>
    <who name="Vineet Chaudhary (vineetc)">code.vineet</who>
    <bug_when>2013-02-07 17:00:37 -0800</bug_when>
    <thetext>(In reply to comment #37)
&gt; (In reply to comment #36)
&gt; &gt; (In reply to comment #35)
&gt; &gt; &gt; Sorry, it happened again. See http://build.chromium.org/p/chromium.webkit/builders/Win%20Builder/builds/34703/steps/compile/logs/stdio
&gt; &gt; 
&gt; &gt; No I should be sorry for this!! Unfortunately I don&apos;t have cr/win port to check the issue :(.
&gt; 
&gt; Would using ASCIILiteral() in the call to contains() in DragDataChromium.cpp help? All the contains() calls there are actually just char[] constants anyway, so I think this would be an appropriate use of ASCIILiteral.

No using ASCIILiteral() wouldn&apos;t help atleast on linux/cr it gives another error in Vector::find() //find called from contains() because of no overloaded == operator in WTHString.h for ASCIILiteral.

&quot;no known conversion for argument 2 from ‘const WTF::ASCIILiteral’ to ‘const char*’&quot;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>828120</commentid>
    <comment_count>39</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2013-02-07 20:04:11 -0800</bug_when>
    <thetext>The problem comes because Ben Poulain added code to the WTF String class that assumes that char arrays are string literals with lengths that can be determined at compile time, whereas char pointers require a strlen at runtime. The definition of mimeTypeTextHTML is a char array with an undefined length and one that is not a string literal, so it violates this assumption.

A simple fix would be to change this:

extern const char mimeTypeTextHTML[];

in ClipboardMimeTypes.h to this:

extern const char* const mimeTypeTextHTML;

And update the .cpp file to match.

Another fix would be to put the mimeTypeTextHTML value into a local variable of type const char* in the type functions its used in, inside DragDataChromium.cpp.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>828121</commentid>
    <comment_count>40</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2013-02-07 20:04:56 -0800</bug_when>
    <thetext>(In reply to comment #39)
&gt; the type functions

I meant the *two* functions</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>828794</commentid>
    <comment_count>41</comment_count>
      <attachid>187372</attachid>
    <who name="Vineet Chaudhary (vineetc)">code.vineet</who>
    <bug_when>2013-02-08 15:39:47 -0800</bug_when>
    <thetext>Created attachment 187372
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>828807</commentid>
    <comment_count>42</comment_count>
    <who name="Vineet Chaudhary (vineetc)">code.vineet</who>
    <bug_when>2013-02-08 15:56:40 -0800</bug_when>
    <thetext>(In reply to comment #39)
Thanks Darin for suggestions:

&gt; The problem comes because Ben Poulain added code to the WTF String class that assumes that char arrays are string literals with lengths that can be determined at compile time, whereas char pointers require a strlen at runtime. The definition of mimeTypeTextHTML is a char array with an undefined length and one that is not a string literal, so it violates this assumption.
&gt; 
&gt; A simple fix would be to change this:
&gt; 
&gt; extern const char mimeTypeTextHTML[];
&gt; 
&gt; in ClipboardMimeTypes.h to this:
&gt; 
&gt; extern const char* const mimeTypeTextHTML;
&gt; 
&gt; And update the .cpp file to match.

I not sure if this needs to change files in chromium port too.

&gt; Another fix would be to put the mimeTypeTextHTML value into a local variable of type const char* in the type functions its used in, inside DragDataChromium.cpp.

I have attached patch with this approach, It builds for cr-linux.
Asking for help if someone has access to cr-win port needs to verify patch.
I understand commit|fail|rollout is bad path  again :(.

BTW can I build/test local patches on bots? I tried with &quot;webkit-patch cr-win-ews&quot; but it doesn&apos;t worked.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>845294</commentid>
    <comment_count>43</comment_count>
      <attachid>144017</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2013-03-01 10:39:46 -0800</bug_when>
    <thetext>Comment on attachment 144017
Patch

Cleared Eric Seidel&apos;s review+ from obsolete attachment 144017 so that this bug does not appear in http://webkit.org/pending-commit.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>852960</commentid>
    <comment_count>44</comment_count>
    <who name="Daniel Cheng">dcheng</who>
    <bug_when>2013-03-11 18:32:55 -0700</bug_when>
    <thetext>FYI, I noticed a bug in the custom bindings. We&apos;re returning a JS null if the types array is empty; I think removing the custom bindings should fix this issue (but it would be good to confirm). When do you anticipate you&apos;d be able to get this change into the tree?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>852975</commentid>
    <comment_count>45</comment_count>
    <who name="Vineet Chaudhary (vineetc)">code.vineet</who>
    <bug_when>2013-03-11 18:44:46 -0700</bug_when>
    <thetext>(In reply to comment #44)
&gt; FYI, I noticed a bug in the custom bindings. We&apos;re returning a JS null if the types array is empty; I think removing the custom bindings should fix this issue (but it would be good to confirm). When do you anticipate you&apos;d be able to get this change into the tree?

Hi Daniel,
earlier patches for this bugs failed to build on the cr/windows though I have attached probable fix I just wanted to sure if this works on cr/win but I don&apos;t have build for that. 
Could/Can you please take this patch forward.. thanks</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>853819</commentid>
    <comment_count>46</comment_count>
      <attachid>192817</attachid>
    <who name="Daniel Cheng">dcheng</who>
    <bug_when>2013-03-12 15:05:57 -0700</bug_when>
    <thetext>Created attachment 192817
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>853823</commentid>
    <comment_count>47</comment_count>
    <who name="Daniel Cheng">dcheng</who>
    <bug_when>2013-03-12 15:08:34 -0700</bug_when>
    <thetext>Per Vineet&apos;s request, I&apos;ve uploaded a patch that builds on Chrome.

I&apos;ve opted not to alias the constants or change their definition; instead, I merely wrap it in ASCIILiteral(). Unfortunately, using ASCIILiteral results in ambiguous overload resolution for == (since it could convert to either AtomicString or String), so I explicitly coerce it to String() as well.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>854537</commentid>
    <comment_count>48</comment_count>
      <attachid>192817</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2013-03-13 13:12:20 -0700</bug_when>
    <thetext>Comment on attachment 192817
Patch

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

&gt; Source/WebCore/platform/chromium/DragDataChromium.cpp:60
&gt; +    return m_platformDragData-&gt;types().contains(String(ASCIILiteral(mimeTypeTextURIList)))

Does String not have an implicit constructor from ASCIILiteral?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>854544</commentid>
    <comment_count>49</comment_count>
    <who name="Daniel Cheng">dcheng</who>
    <bug_when>2013-03-13 13:15:19 -0700</bug_when>
    <thetext>(In reply to comment #48)
&gt; (From update of attachment 192817 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=192817&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/platform/chromium/DragDataChromium.cpp:60
&gt; &gt; +    return m_platformDragData-&gt;types().contains(String(ASCIILiteral(mimeTypeTextURIList)))
&gt; 
&gt; Does String not have an implicit constructor from ASCIILiteral?

It does. However, AtomicString also has an implicit constructor from ASCIILiteral. This is a problem because that causes overload resolution for operator== (used by Vector&lt;T&gt;::contains) becomes ambiguous as a result.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>854546</commentid>
    <comment_count>50</comment_count>
      <attachid>192817</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2013-03-13 13:16:14 -0700</bug_when>
    <thetext>Comment on attachment 192817
Patch

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

&gt; Source/WebCore/ChangeLog:9
&gt; +        Vector&lt;String&gt; than ListHashSet&lt;String&gt;

Can you help me undestand what&apos;s differnet between these two types? If I call listHashSet.append(&apos;foo&apos;) twice, will I end up wiht one &apos;foo&apos; or two?

&gt; Source/WebCore/ChangeLog:11
&gt; +        No new tests. Existing test should pass with this change as no behavoural changes.

behavioural</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>854568</commentid>
    <comment_count>51</comment_count>
      <attachid>192984</attachid>
    <who name="Daniel Cheng">dcheng</who>
    <bug_when>2013-03-13 13:27:20 -0700</bug_when>
    <thetext>Created attachment 192984
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>854569</commentid>
    <comment_count>52</comment_count>
      <attachid>192817</attachid>
    <who name="Daniel Cheng">dcheng</who>
    <bug_when>2013-03-13 13:27:50 -0700</bug_when>
    <thetext>Comment on attachment 192817
Patch

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

&gt;&gt; Source/WebCore/ChangeLog:9
&gt;&gt; +        Vector&lt;String&gt; than ListHashSet&lt;String&gt;
&gt; 
&gt; Can you help me undestand what&apos;s differnet between these two types? If I call listHashSet.append(&apos;foo&apos;) twice, will I end up wiht one &apos;foo&apos; or two?

You will end up with one &apos;foo&apos;. I don&apos;t think this is likely to be a problem in practice (most platforms populated the types array with a set list of types anyway).
While duplicates would be undesirable, this is not likely to cause problems even if it does occur, since usage in JS is typically an indexOf() check.

&gt;&gt; Source/WebCore/ChangeLog:11
&gt;&gt; +        No new tests. Existing test should pass with this change as no behavoural changes.
&gt; 
&gt; behavioural

Fixed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>854590</commentid>
    <comment_count>53</comment_count>
      <attachid>192817</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2013-03-13 13:47:21 -0700</bug_when>
    <thetext>Comment on attachment 192817
Patch

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

&gt;&gt;&gt; Source/WebCore/ChangeLog:9
&gt;&gt;&gt; +        Vector&lt;String&gt; than ListHashSet&lt;String&gt;
&gt;&gt; 
&gt;&gt; Can you help me undestand what&apos;s differnet between these two types? If I call listHashSet.append(&apos;foo&apos;) twice, will I end up wiht one &apos;foo&apos; or two?
&gt; 
&gt; You will end up with one &apos;foo&apos;. I don&apos;t think this is likely to be a problem in practice (most platforms populated the types array with a set list of types anyway).
&gt; While duplicates would be undesirable, this is not likely to cause problems even if it does occur, since usage in JS is typically an indexOf() check.

To be clear, this is then a web-exposed change, even if a minor one.  Do we have any way to test this, or is it just that code which previously was accidentally ending up with one entry will now end up with two?  I assume we expose an Array to JS, not a dictionary/set.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>854604</commentid>
    <comment_count>54</comment_count>
    <who name="Daniel Cheng">dcheng</who>
    <bug_when>2013-03-13 13:58:33 -0700</bug_when>
    <thetext>(In reply to comment #53)
&gt; (From update of attachment 192817 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=192817&amp;action=review
&gt; 
&gt; &gt;&gt;&gt; Source/WebCore/ChangeLog:9
&gt; &gt;&gt;&gt; +        Vector&lt;String&gt; than ListHashSet&lt;String&gt;
&gt; &gt;&gt; 
&gt; &gt;&gt; Can you help me undestand what&apos;s differnet between these two types? If I call listHashSet.append(&apos;foo&apos;) twice, will I end up wiht one &apos;foo&apos; or two?
&gt; &gt; 
&gt; &gt; You will end up with one &apos;foo&apos;. I don&apos;t think this is likely to be a problem in practice (most platforms populated the types array with a set list of types anyway).
&gt; &gt; While duplicates would be undesirable, this is not likely to cause problems even if it does occur, since usage in JS is typically an indexOf() check.
&gt; 
&gt; To be clear, this is then a web-exposed change, even if a minor one.  Do we have any way to test this,

Not cleanly. How types() gets populated is largely dependent on platform specific-code in Source/WebCore/platform/*/Clipboard*.cpp, so it&apos;d be very hard (if not impossible in the current state) to force duplicate entries in the return value from types().

&gt; or is it just that code which previously was accidentally ending up with one entry will now end up with two? 

Yes.

&gt; I assume we expose an Array to JS, not a dictionary/set.

Yes.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>854617</commentid>
    <comment_count>55</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2013-03-13 14:19:35 -0700</bug_when>
    <thetext>We could make this change w/o changing behavior if we added a step to the bindings layer which uniqued these before returning them.  Or at least ASSERTed they were unique.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>854621</commentid>
    <comment_count>56</comment_count>
    <who name="Daniel Cheng">dcheng</who>
    <bug_when>2013-03-13 14:26:15 -0700</bug_when>
    <thetext>(In reply to comment #55)
&gt; We could make this change w/o changing behavior if we added a step to the bindings layer which uniqued these before returning them.  Or at least ASSERTed they were unique.

We could do that. But the whole point of this patch is to eventually remove the custom bindings. And it will still be just as hard to test then.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>854630</commentid>
    <comment_count>57</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2013-03-13 14:31:26 -0700</bug_when>
    <thetext>(In reply to comment #56)
&gt; (In reply to comment #55)
&gt; &gt; We could make this change w/o changing behavior if we added a step to the bindings layer which uniqued these before returning them.  Or at least ASSERTed they were unique.
&gt; 
&gt; We could do that. But the whole point of this patch is to eventually remove the custom bindings. And it will still be just as hard to test then.

The implementation code does not have to be dictacted by the bindings objects here.  It appears Clipboard is the bindings object as well as the implementation code.  Often in WebKit they are separate.  It appears the implementation code may want to use ListHashSet, but Clipboard might want to use Vector.

We&apos;re just suffering the curse of custom bindings here.  The modern pattern is to have &quot;dom implementation&quot; objects, like CSSStyleRule, which just implement the JS API, and then internally always use whatever non-DOM-api objects we like.  Clipboard ended up as both the DOM API object as well as the platform object, which is really binding our hands here.  It&apos;s trying to serve two masters.  1 the DOM api, and 2 the platform APIs.  We&apos;d rather have:

[auto-generated bindings]
[DOM API object &quot;Clipboard&quot;]
[platform abstraction layer]

Then we don&apos;t care what types the platform abstraction layer uses, and the DOM API c++ object can assert things about what the platform implmentation returns, and change types for returning to the actual bindings layer.

I&apos;m not saying you need to fix this layering trouble.  But that appears to me to be the problem you&apos;re running into here?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>854698</commentid>
    <comment_count>58</comment_count>
      <attachid>192984</attachid>
    <who name="Daniel Cheng">dcheng</who>
    <bug_when>2013-03-13 15:09:30 -0700</bug_when>
    <thetext>Comment on attachment 192984
Patch

Per our discussion, this patch is on hold until someone gets around to separating the DOM and platform layers in clipboard.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>135087</attachid>
            <date>2012-04-02 06:36:29 -0700</date>
            <delta_ts>2012-04-02 12:43:55 -0700</delta_ts>
            <desc>proposed patch</desc>
            <filename>wip_clipboard_001.diff</filename>
            <type>text/plain</type>
            <size>21077</size>
            <attacher name="Vineet Chaudhary (vineetc)">code.vineet</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDExMjg2NCkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDYxIEBACisyMDEyLTA0LTAyICBWaW5lZXQg
Q2hhdWRoYXJ5ICA8cmdmNzQ4QG1vdG9yb2xhLmNvbT4KKworICAgICAgICBDb25zaWRlciByZXBs
YWNpbmcgcmV0dXJuIHR5cGUgb2YgQ2xpcGJvYXJkOjp0eXBlcygpIGZyb20gSGFzaFNldDxTdHJp
bmc+IHRvIFZlY3RvcjxTdHJpbmc+LgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9ODI4ODgKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMh
KS4KKworICAgICAgICBBcyBwYXJ0IG9mIHJlbW92aW5nIGN1c3RvbSBiaW5kaW5ncyBvZiB0eXBl
cyBBcnJheSBDbGlwYm9hcmQuaWRsIGFsc28gbmVlZHMgdG8gaGF2ZSAKKyAgICAgICAgbW9kaWZp
ZWQgdG8gaGF2ZSBzZXF1ZW5jZTxTdHJpbmc+LCBidXQgYWNjb3JkaW5nIHRvIGN1cnJlbnQgaW1w
bGVtZW50YXRpb24gb2YgdGhlIENsaXBib2FyZDo6dHlwZXMoKSAKKyAgICAgICAgaXQgcmV0dXJu
cyBIYXNoU2V0PFN0cmluZz4uIEluIG9yZGVyIHRvIHJlbW92ZSB0aGUgY3VzdG9tIGJpbmRpbmdz
IGl0IHNob3VsZCBvZiB0eXBlIFZlY3RvcjxTdHJpbmc+LgorCisgICAgICAgIE5vIG5ldyB0ZXN0
cy4KKworICAgICAgICAqIGJpbmRpbmdzL2pzL0pTQ2xpcGJvYXJkQ3VzdG9tLmNwcDogUmVwbGFj
ZSBkYXRhIHR5cGUgZnJvbSBIYXNoU2V0PD4gdG8gVmVjdG9yPD4uCisgICAgICAgIChXZWJDb3Jl
OjpKU0NsaXBib2FyZDo6dHlwZXMpOgorICAgICAgICAqIGJpbmRpbmdzL3Y4L2N1c3RvbS9WOENs
aXBib2FyZEN1c3RvbS5jcHA6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6VjhDbGlwYm9hcmQ6
OnR5cGVzQWNjZXNzb3JHZXR0ZXIpOgorICAgICAgICAqIGRvbS9DbGlwYm9hcmQuaDogRGl0dG8u
CisgICAgICAgIChDbGlwYm9hcmQpOgorICAgICAgICAqIHBsYXRmb3JtL2JsYWNrYmVycnkvQ2xp
cGJvYXJkQmxhY2tCZXJyeS5jcHA6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6Q2xpcGJvYXJk
QmxhY2tCZXJyeTo6dHlwZXMpOgorICAgICAgICAqIHBsYXRmb3JtL2JsYWNrYmVycnkvQ2xpcGJv
YXJkQmxhY2tCZXJyeS5oOiBEaXR0by4KKyAgICAgICAgKENsaXBib2FyZEJsYWNrQmVycnkpOgor
ICAgICAgICAqIHBsYXRmb3JtL2Nocm9taXVtL0Nocm9taXVtRGF0YU9iamVjdC5jcHA6IERpdHRv
LgorICAgICAgICAoV2ViQ29yZTo6Q2hyb21pdW1EYXRhT2JqZWN0Ojp0eXBlcyk6CisgICAgICAg
ICogcGxhdGZvcm0vY2hyb21pdW0vQ2hyb21pdW1EYXRhT2JqZWN0Lmg6IERpdHRvLgorICAgICAg
ICAoQ2hyb21pdW1EYXRhT2JqZWN0KToKKyAgICAgICAgKiBwbGF0Zm9ybS9jaHJvbWl1bS9DbGlw
Ym9hcmRDaHJvbWl1bS5jcHA6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6Q2xpcGJvYXJkQ2hy
b21pdW06OnR5cGVzKToKKyAgICAgICAgKiBwbGF0Zm9ybS9jaHJvbWl1bS9DbGlwYm9hcmRDaHJv
bWl1bS5oOiBEaXR0by4KKyAgICAgICAgKENsaXBib2FyZENocm9taXVtKToKKyAgICAgICAgKiBw
bGF0Zm9ybS9lZmwvQ2xpcGJvYXJkRWZsLmNwcDogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpD
bGlwYm9hcmRFZmw6OnR5cGVzKToKKyAgICAgICAgKiBwbGF0Zm9ybS9lZmwvQ2xpcGJvYXJkRWZs
Lmg6IERpdHRvLgorICAgICAgICAoQ2xpcGJvYXJkRWZsKToKKyAgICAgICAgKiBwbGF0Zm9ybS9n
dGsvQ2xpcGJvYXJkR3RrLmNwcDogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpDbGlwYm9hcmRH
dGs6OnR5cGVzKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ndGsvQ2xpcGJvYXJkR3RrLmg6IERpdHRv
LgorICAgICAgICAoQ2xpcGJvYXJkR3RrKToKKyAgICAgICAgKiBwbGF0Zm9ybS9tYWMvQ2xpcGJv
YXJkTWFjLmg6IERpdHRvLgorICAgICAgICAoQ2xpcGJvYXJkTWFjKToKKyAgICAgICAgKiBwbGF0
Zm9ybS9tYWMvQ2xpcGJvYXJkTWFjLm1tOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OmFkZEhU
TUxDbGlwYm9hcmRUeXBlc0ZvckNvY29hVHlwZSk6CisgICAgICAgIChXZWJDb3JlOjpDbGlwYm9h
cmRNYWM6OnR5cGVzKToKKyAgICAgICAgKiBwbGF0Zm9ybS9xdC9DbGlwYm9hcmRRdC5jcHA6IERp
dHRvLgorICAgICAgICAoV2ViQ29yZTo6Q2xpcGJvYXJkUXQ6OnR5cGVzKToKKyAgICAgICAgKiBw
bGF0Zm9ybS9xdC9DbGlwYm9hcmRRdC5oOiBEaXR0by4KKyAgICAgICAgKENsaXBib2FyZFF0KToK
KyAgICAgICAgKiBwbGF0Zm9ybS93aW4vQ2xpcGJvYXJkV2luLmNwcDogRGl0dG8uCisgICAgICAg
IChXZWJDb3JlOjphZGRNaW1lVHlwZXNGb3JGb3JtYXQpOgorICAgICAgICAoV2ViQ29yZTo6Q2xp
cGJvYXJkV2luOjp0eXBlcyk6CisgICAgICAgICogcGxhdGZvcm0vd2luL0NsaXBib2FyZFdpbi5o
OiBEaXR0by4KKyAgICAgICAgKENsaXBib2FyZFdpbik6CisgICAgICAgICogcGxhdGZvcm0vd3gv
Q2xpcGJvYXJkV3guY3BwOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OkNsaXBib2FyZFd4Ojp0
eXBlcyk6CisgICAgICAgICogcGxhdGZvcm0vd3gvQ2xpcGJvYXJkV3guaDogRGl0dG8uCisgICAg
ICAgIChDbGlwYm9hcmRXeCk6CisKIDIwMTItMDMtMzEgIEFsZXhhbmRlciBQYXZsb3YgIDxhcGF2
bG92QGNocm9taXVtLm9yZz4KIAogICAgICAgICBXZWIgSW5zcGVjdG9yOiBJbXBsZW1lbnQgYmFj
a2VuZCBmb3IgZGV2aWNlIG1ldHJpY3MgZW11bGF0aW9uCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy9qcy9KU0NsaXBib2FyZEN1c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvYmluZGluZ3MvanMvSlNDbGlwYm9hcmRDdXN0b20uY3BwCShyZXZpc2lvbiAxMTI4NDEp
CisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0NsaXBib2FyZEN1c3RvbS5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTUyLDEzICs1MiwxMyBAQCBKU1ZhbHVlIEpTQ2xpcGJvYXJkOjp0eXBl
cyhFeGVjU3RhdGUqIGV4CiB7CiAgICAgQ2xpcGJvYXJkKiBjbGlwYm9hcmQgPSBpbXBsKCk7CiAK
LSAgICBIYXNoU2V0PFN0cmluZz4gdHlwZXMgPSBjbGlwYm9hcmQtPnR5cGVzKCk7CisgICAgVmVj
dG9yPFN0cmluZz4gdHlwZXMgPSBjbGlwYm9hcmQtPnR5cGVzKCk7CiAgICAgaWYgKHR5cGVzLmlz
RW1wdHkoKSkKICAgICAgICAgcmV0dXJuIGpzTnVsbCgpOwogCiAgICAgTWFya2VkQXJndW1lbnRC
dWZmZXIgbGlzdDsKLSAgICBIYXNoU2V0PFN0cmluZz46OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IHR5
cGVzLmVuZCgpOwotICAgIGZvciAoSGFzaFNldDxTdHJpbmc+Ojpjb25zdF9pdGVyYXRvciBpdCA9
IHR5cGVzLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkKKyAgICBWZWN0b3I8U3RyaW5nPjo6Y29u
c3RfaXRlcmF0b3IgZW5kID0gdHlwZXMuZW5kKCk7CisgICAgZm9yIChWZWN0b3I8U3RyaW5nPjo6
Y29uc3RfaXRlcmF0b3IgaXQgPSB0eXBlcy5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpCiAgICAg
ICAgIGxpc3QuYXBwZW5kKGpzU3RyaW5nKGV4ZWMsIHN0cmluZ1RvVVN0cmluZygqaXQpKSk7CiAg
ICAgcmV0dXJuIGNvbnN0cnVjdEFycmF5KGV4ZWMsIGdsb2JhbE9iamVjdCgpLCBsaXN0KTsKIH0K
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOENsaXBib2FyZEN1c3Rv
bS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4
Q2xpcGJvYXJkQ3VzdG9tLmNwcAkocmV2aXNpb24gMTEyODQxKQorKysgU291cmNlL1dlYkNvcmUv
YmluZGluZ3MvdjgvY3VzdG9tL1Y4Q2xpcGJvYXJkQ3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtNDksMTQgKzQ5LDE0IEBAIHY4OjpIYW5kbGU8djg6OlZhbHVlPiBWOENsaXBib2FyZDo6dHlw
ZXMKICAgICBJTkNfU1RBVFMoIkRPTS5DbGlwYm9hcmQudHlwZXMoKSIpOwogICAgIENsaXBib2Fy
ZCogY2xpcGJvYXJkID0gVjhDbGlwYm9hcmQ6OnRvTmF0aXZlKGluZm8uSG9sZGVyKCkpOwogCi0g
ICAgSGFzaFNldDxTdHJpbmc+IHR5cGVzID0gY2xpcGJvYXJkLT50eXBlcygpOworICAgIFZlY3Rv
cjxTdHJpbmc+IHR5cGVzID0gY2xpcGJvYXJkLT50eXBlcygpOwogICAgIGlmICh0eXBlcy5pc0Vt
cHR5KCkpCiAgICAgICAgIHJldHVybiB2ODo6TnVsbCgpOwogCiAgICAgdjg6OkxvY2FsPHY4OjpB
cnJheT4gcmVzdWx0ID0gdjg6OkFycmF5OjpOZXcodHlwZXMuc2l6ZSgpKTsKLSAgICBIYXNoU2V0
PFN0cmluZz46OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IHR5cGVzLmVuZCgpOworICAgIFZlY3RvcjxT
dHJpbmc+Ojpjb25zdF9pdGVyYXRvciBlbmQgPSB0eXBlcy5lbmQoKTsKICAgICBpbnQgaW5kZXgg
PSAwOwotICAgIGZvciAoSGFzaFNldDxTdHJpbmc+Ojpjb25zdF9pdGVyYXRvciBpdCA9IHR5cGVz
LmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCwgKytpbmRleCkKKyAgICBmb3IgKFZlY3RvcjxTdHJp
bmc+Ojpjb25zdF9pdGVyYXRvciBpdCA9IHR5cGVzLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCwg
KytpbmRleCkKICAgICAgICAgcmVzdWx0LT5TZXQodjg6OkludGVnZXI6Ok5ldyhpbmRleCksIHY4
U3RyaW5nKCppdCkpOwogCiAgICAgcmV0dXJuIHJlc3VsdDsKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L2RvbS9DbGlwYm9hcmQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9kb20vQ2xpcGJv
YXJkLmgJKHJldmlzaW9uIDExMjg0MSkKKysrIFNvdXJjZS9XZWJDb3JlL2RvbS9DbGlwYm9hcmQu
aAkod29ya2luZyBjb3B5KQpAQCAtNjYsNyArNjYsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAg
ICAgICAgIHZpcnR1YWwgYm9vbCBzZXREYXRhKGNvbnN0IFN0cmluZyYgdHlwZSwgY29uc3QgU3Ry
aW5nJiBkYXRhKSA9IDA7CiAgICAgCiAgICAgICAgIC8vIGV4dGVuc2lvbnMgYmV5b25kIElFJ3Mg
QVBJCi0gICAgICAgIHZpcnR1YWwgSGFzaFNldDxTdHJpbmc+IHR5cGVzKCkgY29uc3QgPSAwOwor
ICAgICAgICB2aXJ0dWFsIFZlY3RvcjxTdHJpbmc+IHR5cGVzKCkgY29uc3QgPSAwOwogICAgICAg
ICB2aXJ0dWFsIFBhc3NSZWZQdHI8RmlsZUxpc3Q+IGZpbGVzKCkgY29uc3QgPSAwOwogCiAgICAg
ICAgIEludFBvaW50IGRyYWdMb2NhdGlvbigpIGNvbnN0IHsgcmV0dXJuIG1fZHJhZ0xvYzsgfQpJ
bmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vYmxhY2tiZXJyeS9DbGlwYm9hcmRCbGFja0Jl
cnJ5LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ibGFja2JlcnJ5
L0NsaXBib2FyZEJsYWNrQmVycnkuY3BwCShyZXZpc2lvbiAxMTI4NDEpCisrKyBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ibGFja2JlcnJ5L0NsaXBib2FyZEJsYWNrQmVycnkuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC03MSwxMyArNzEsMTMgQEAgYm9vbCBDbGlwYm9hcmRCbGFja0JlcnJ5OjpzZXRE
YXRhKGNvbnN0CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLUhhc2hTZXQ8U3RyaW5nPiBDbGlwYm9h
cmRCbGFja0JlcnJ5Ojp0eXBlcygpIGNvbnN0CitWZWN0b3I8U3RyaW5nPiBDbGlwYm9hcmRCbGFj
a0JlcnJ5Ojp0eXBlcygpIGNvbnN0CiB7CiAgICAgLy8gV2UgdXNlIGhhcmRjb2RlZCBsaXN0IGhl
cmUgc2luY2UgdGhlcmUgc2VlbXMgdG8gYmUgbm8gQVBJIHRvIGdldCB0aGUgbGlzdC4KLSAgICBI
YXNoU2V0PFN0cmluZz4gcmV0OwotICAgIHJldC5hZGQoInRleHQvcGxhaW4iKTsKLSAgICByZXQu
YWRkKCJ0ZXh0L2h0bWwiKTsKLSAgICByZXQuYWRkKCJ0ZXh0L3VybCIpOworICAgIFZlY3RvcjxT
dHJpbmc+IHJldDsKKyAgICByZXQuYXBwZW5kKCJ0ZXh0L3BsYWluIik7CisgICAgcmV0LmFwcGVu
ZCgidGV4dC9odG1sIik7CisgICAgcmV0LmFwcGVuZCgidGV4dC91cmwiKTsKICAgICByZXR1cm4g
cmV0OwogfQogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ibGFja2JlcnJ5L0NsaXBi
b2FyZEJsYWNrQmVycnkuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9i
bGFja2JlcnJ5L0NsaXBib2FyZEJsYWNrQmVycnkuaAkocmV2aXNpb24gMTEyODQxKQorKysgU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vYmxhY2tiZXJyeS9DbGlwYm9hcmRCbGFja0JlcnJ5LmgJKHdv
cmtpbmcgY29weSkKQEAgLTM2LDcgKzM2LDcgQEAgcHVibGljOgogICAgIGJvb2wgc2V0RGF0YShj
b25zdCBTdHJpbmcmIHR5cGUsIGNvbnN0IFN0cmluZyYgZGF0YSk7CiAKICAgICAvLyBleHRlbnNp
b25zIGJleW9uZCBJRSdzIEFQSQotICAgIHZpcnR1YWwgSGFzaFNldDxTdHJpbmc+IHR5cGVzKCkg
Y29uc3Q7CisgICAgdmlydHVhbCBWZWN0b3I8U3RyaW5nPiB0eXBlcygpIGNvbnN0OwogICAgIHZp
cnR1YWwgUGFzc1JlZlB0cjxGaWxlTGlzdD4gZmlsZXMoKSBjb25zdDsKICAgICB2aXJ0dWFsIERy
YWdJbWFnZVJlZiBjcmVhdGVEcmFnSW1hZ2UoSW50UG9pbnQmKSBjb25zdDsKICAgICB2aXJ0dWFs
IHZvaWQgZGVjbGFyZUFuZFdyaXRlRHJhZ0ltYWdlKEVsZW1lbnQqLCBjb25zdCBLVVJMJiwgY29u
c3QgU3RyaW5nJiB0aXRsZSwgRnJhbWUqKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2Nocm9taXVtL0Nocm9taXVtRGF0YU9iamVjdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vY2hyb21pdW0vQ2hyb21pdW1EYXRhT2JqZWN0LmNwcAkocmV2aXNpb24g
MTEyODQxKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY2hyb21pdW0vQ2hyb21pdW1EYXRh
T2JqZWN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTIxLDIwICsxMjEsMjAgQEAgdm9pZCBDaHJv
bWl1bURhdGFPYmplY3Q6OmNsZWFyQWxsRXhjZXB0RgogICAgIH0KIH0KIAotSGFzaFNldDxTdHJp
bmc+IENocm9taXVtRGF0YU9iamVjdDo6dHlwZXMoKSBjb25zdAorVmVjdG9yPFN0cmluZz4gQ2hy
b21pdW1EYXRhT2JqZWN0Ojp0eXBlcygpIGNvbnN0CiB7Ci0gICAgSGFzaFNldDxTdHJpbmc+IHJl
c3VsdHM7CisgICAgVmVjdG9yPFN0cmluZz4gcmVzdWx0czsKICAgICBib29sIGNvbnRhaW5zRmls
ZXMgPSBmYWxzZTsKICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1faXRlbUxpc3Quc2l6ZSgp
OyArK2kpIHsKICAgICAgICAgaWYgKG1faXRlbUxpc3RbaV0tPmtpbmQoKSA9PSBEYXRhVHJhbnNm
ZXJJdGVtOjpraW5kU3RyaW5nKQotICAgICAgICAgICAgcmVzdWx0cy5hZGQobV9pdGVtTGlzdFtp
XS0+dHlwZSgpKTsKKyAgICAgICAgICAgIHJlc3VsdHMuYXBwZW5kKG1faXRlbUxpc3RbaV0tPnR5
cGUoKSk7CiAgICAgICAgIGVsc2UgaWYgKG1faXRlbUxpc3RbaV0tPmtpbmQoKSA9PSBEYXRhVHJh
bnNmZXJJdGVtOjpraW5kRmlsZSkKICAgICAgICAgICAgIGNvbnRhaW5zRmlsZXMgPSB0cnVlOwog
ICAgICAgICBlbHNlCiAgICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICB9CiAg
ICAgaWYgKGNvbnRhaW5zRmlsZXMpCi0gICAgICAgIHJlc3VsdHMuYWRkKG1pbWVUeXBlRmlsZXMp
OworICAgICAgICByZXN1bHRzLmFwcGVuZChtaW1lVHlwZUZpbGVzKTsKICAgICByZXR1cm4gcmVz
dWx0czsKIH0KIApJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY2hyb21pdW0vQ2hyb21p
dW1EYXRhT2JqZWN0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY2hy
b21pdW0vQ2hyb21pdW1EYXRhT2JqZWN0LmgJKHJldmlzaW9uIDExMjg0MSkKKysrIFNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2Nocm9taXVtL0Nocm9taXVtRGF0YU9iamVjdC5oCSh3b3JraW5nIGNv
cHkpCkBAIC02OCw3ICs2OCw3IEBAIHB1YmxpYzoKICAgICB2b2lkIGNsZWFyRGF0YShjb25zdCBT
dHJpbmcmIHR5cGUpOwogICAgIHZvaWQgY2xlYXJBbGxFeGNlcHRGaWxlcygpOwogCi0gICAgSGFz
aFNldDxTdHJpbmc+IHR5cGVzKCkgY29uc3Q7CisgICAgVmVjdG9yPFN0cmluZz4gdHlwZXMoKSBj
b25zdDsKICAgICBTdHJpbmcgZ2V0RGF0YShjb25zdCBTdHJpbmcmIHR5cGUpIGNvbnN0OwogICAg
IGJvb2wgc2V0RGF0YShjb25zdCBTdHJpbmcmIHR5cGUsIGNvbnN0IFN0cmluZyYgZGF0YSk7CiAK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2Nocm9taXVtL0NsaXBib2FyZENocm9taXVt
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jaHJvbWl1bS9DbGlw
Ym9hcmRDaHJvbWl1bS5jcHAJKHJldmlzaW9uIDExMjg0MSkKKysrIFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2Nocm9taXVtL0NsaXBib2FyZENocm9taXVtLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MzA1LDEwICszMDUsMTAgQEAgYm9vbCBDbGlwYm9hcmRDaHJvbWl1bTo6c2V0RGF0YShjb25zdCBT
dAogfQogCiAvLyBleHRlbnNpb25zIGJleW9uZCBJRSdzIEFQSQotSGFzaFNldDxTdHJpbmc+IENs
aXBib2FyZENocm9taXVtOjp0eXBlcygpIGNvbnN0CitWZWN0b3I8U3RyaW5nPiBDbGlwYm9hcmRD
aHJvbWl1bTo6dHlwZXMoKSBjb25zdAogewogICAgIGlmIChwb2xpY3koKSAhPSBDbGlwYm9hcmRS
ZWFkYWJsZSAmJiBwb2xpY3koKSAhPSBDbGlwYm9hcmRUeXBlc1JlYWRhYmxlKQotICAgICAgICBy
ZXR1cm4gSGFzaFNldDxTdHJpbmc+KCk7CisgICAgICAgIHJldHVybiBWZWN0b3I8U3RyaW5nPigp
OwogCiAgICAgcmV0dXJuIG1fZGF0YU9iamVjdC0+dHlwZXMoKTsKIH0KSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2Nocm9taXVtL0NsaXBib2FyZENocm9taXVtLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY2hyb21pdW0vQ2xpcGJvYXJkQ2hyb21pdW0uaAko
cmV2aXNpb24gMTEyODQxKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY2hyb21pdW0vQ2xp
cGJvYXJkQ2hyb21pdW0uaAkod29ya2luZyBjb3B5KQpAQCAtNjAsNyArNjAsNyBAQCBuYW1lc3Bh
Y2UgV2ViQ29yZSB7CiAgICAgICAgIGJvb2wgcGxhdGZvcm1DbGlwYm9hcmRDaGFuZ2VkKCkgY29u
c3Q7CiAKICAgICAgICAgLy8gZXh0ZW5zaW9ucyBiZXlvbmQgSUUncyBBUEkKLSAgICAgICAgdmly
dHVhbCBIYXNoU2V0PFN0cmluZz4gdHlwZXMoKSBjb25zdDsKKyAgICAgICAgdmlydHVhbCBWZWN0
b3I8U3RyaW5nPiB0eXBlcygpIGNvbnN0OwogICAgICAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8Rmls
ZUxpc3Q+IGZpbGVzKCkgY29uc3Q7CiAKICAgICAgICAgdm9pZCBzZXREcmFnSW1hZ2UoQ2FjaGVk
SW1hZ2UqLCBjb25zdCBJbnRQb2ludCYpOwpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
ZWZsL0NsaXBib2FyZEVmbC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZWZsL0NsaXBib2FyZEVmbC5jcHAJKHJldmlzaW9uIDExMjg0MSkKKysrIFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2VmbC9DbGlwYm9hcmRFZmwuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03Niwx
MCArNzYsMTAgQEAgYm9vbCBDbGlwYm9hcmRFZmw6OnNldERhdGEoY29uc3QgU3RyaW5nJgogICAg
IHJldHVybiBmYWxzZTsKIH0KIAotSGFzaFNldDxTdHJpbmc+IENsaXBib2FyZEVmbDo6dHlwZXMo
KSBjb25zdAorVmVjdG9yPFN0cmluZz4gQ2xpcGJvYXJkRWZsOjp0eXBlcygpIGNvbnN0CiB7CiAg
ICAgbm90SW1wbGVtZW50ZWQoKTsKLSAgICByZXR1cm4gSGFzaFNldDxTdHJpbmc+KCk7CisgICAg
cmV0dXJuIFZlY3RvcjxTdHJpbmc+KCk7CiB9CiAKIFBhc3NSZWZQdHI8RmlsZUxpc3Q+IENsaXBi
b2FyZEVmbDo6ZmlsZXMoKSBjb25zdApJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZWZs
L0NsaXBib2FyZEVmbC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2Vm
bC9DbGlwYm9hcmRFZmwuaAkocmV2aXNpb24gMTEyODQxKQorKysgU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZWZsL0NsaXBib2FyZEVmbC5oCSh3b3JraW5nIGNvcHkpCkBAIC0zOSw3ICszOSw3IEBA
IHB1YmxpYzoKICAgICBTdHJpbmcgZ2V0RGF0YShjb25zdCBTdHJpbmcmKSBjb25zdDsKICAgICBi
b29sIHNldERhdGEoY29uc3QgU3RyaW5nJiwgY29uc3QgU3RyaW5nJik7CiAKLSAgICBIYXNoU2V0
PFN0cmluZz4gdHlwZXMoKSBjb25zdDsKKyAgICBWZWN0b3I8U3RyaW5nPiB0eXBlcygpIGNvbnN0
OwogICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxGaWxlTGlzdD4gZmlsZXMoKSBjb25zdDsKIAogICAg
IEludFBvaW50IGRyYWdMb2NhdGlvbigpIGNvbnN0OwpJbmRleDogU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3RrL0NsaXBib2FyZEd0ay5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3RrL0NsaXBib2FyZEd0ay5jcHAJKHJldmlzaW9uIDExMjg0MSkKKysrIFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9DbGlwYm9hcmRHdGsuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0xODQsMzEgKzE4NCwzMSBAQCBib29sIENsaXBib2FyZEd0azo6c2V0RGF0YShjb25zdCBTdHJp
bmcmCiAgICAgcmV0dXJuIHN1Y2Nlc3M7CiB9CiAKLUhhc2hTZXQ8U3RyaW5nPiBDbGlwYm9hcmRH
dGs6OnR5cGVzKCkgY29uc3QKK1ZlY3RvcjxTdHJpbmc+IENsaXBib2FyZEd0azo6dHlwZXMoKSBj
b25zdAogewogICAgIGlmIChwb2xpY3koKSAhPSBDbGlwYm9hcmRSZWFkYWJsZSAmJiBwb2xpY3ko
KSAhPSBDbGlwYm9hcmRUeXBlc1JlYWRhYmxlKQotICAgICAgICByZXR1cm4gSGFzaFNldDxTdHJp
bmc+KCk7CisgICAgICAgIHJldHVybiBWZWN0b3I8U3RyaW5nPigpOwogCiAgICAgaWYgKG1fY2xp
cGJvYXJkKQogICAgICAgICBQYXN0ZWJvYXJkSGVscGVyOjpkZWZhdWx0UGFzdGVib2FyZEhlbHBl
cigpLT5nZXRDbGlwYm9hcmRDb250ZW50cyhtX2NsaXBib2FyZCk7CiAKLSAgICBIYXNoU2V0PFN0
cmluZz4gdHlwZXM7CisgICAgVmVjdG9yPFN0cmluZz4gdHlwZXM7CiAgICAgaWYgKG1fZGF0YU9i
amVjdC0+aGFzVGV4dCgpKSB7Ci0gICAgICAgIHR5cGVzLmFkZCgidGV4dC9wbGFpbiIpOwotICAg
ICAgICB0eXBlcy5hZGQoIlRleHQiKTsKLSAgICAgICAgdHlwZXMuYWRkKCJ0ZXh0Iik7CisgICAg
ICAgIHR5cGVzLmFwcGVuZCgidGV4dC9wbGFpbiIpOworICAgICAgICB0eXBlcy5hcHBlbmQoIlRl
eHQiKTsKKyAgICAgICAgdHlwZXMuYXBwZW5kKCJ0ZXh0Iik7CiAgICAgfQogCiAgICAgaWYgKG1f
ZGF0YU9iamVjdC0+aGFzTWFya3VwKCkpCi0gICAgICAgIHR5cGVzLmFkZCgidGV4dC9odG1sIik7
CisgICAgICAgIHR5cGVzLmFwcGVuZCgidGV4dC9odG1sIik7CiAKICAgICBpZiAobV9kYXRhT2Jq
ZWN0LT5oYXNVUklMaXN0KCkpIHsKLSAgICAgICAgdHlwZXMuYWRkKCJ0ZXh0L3VyaS1saXN0Iik7
Ci0gICAgICAgIHR5cGVzLmFkZCgiVVJMIik7CisgICAgICAgIHR5cGVzLmFwcGVuZCgidGV4dC91
cmktbGlzdCIpOworICAgICAgICB0eXBlcy5hcHBlbmQoIlVSTCIpOwogICAgIH0KIAogICAgIGlm
IChtX2RhdGFPYmplY3QtPmhhc0ZpbGVuYW1lcygpKQotICAgICAgICB0eXBlcy5hZGQoIkZpbGVz
Iik7CisgICAgICAgIHR5cGVzLmFwcGVuZCgiRmlsZXMiKTsKIAogICAgIHJldHVybiB0eXBlczsK
IH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9DbGlwYm9hcmRHdGsuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvQ2xpcGJvYXJkR3RrLmgJKHJl
dmlzaW9uIDExMjg0MSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9DbGlwYm9hcmRH
dGsuaAkod29ya2luZyBjb3B5KQpAQCAtNTcsNyArNTcsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7
CiAgICAgICAgIFN0cmluZyBnZXREYXRhKGNvbnN0IFN0cmluZyYpIGNvbnN0OwogICAgICAgICBi
b29sIHNldERhdGEoY29uc3QgU3RyaW5nJiwgY29uc3QgU3RyaW5nJik7CiAKLSAgICAgICAgdmly
dHVhbCBIYXNoU2V0PFN0cmluZz4gdHlwZXMoKSBjb25zdDsKKyAgICAgICAgdmlydHVhbCBWZWN0
b3I8U3RyaW5nPiB0eXBlcygpIGNvbnN0OwogICAgICAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8Rmls
ZUxpc3Q+IGZpbGVzKCkgY29uc3Q7CiAKICAgICAgICAgdm9pZCBzZXREcmFnSW1hZ2UoQ2FjaGVk
SW1hZ2UqLCBjb25zdCBJbnRQb2ludCYpOwpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
bWFjL0NsaXBib2FyZE1hYy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L21hYy9DbGlwYm9hcmRNYWMuaAkocmV2aXNpb24gMTEyODQxKQorKysgU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vbWFjL0NsaXBib2FyZE1hYy5oCSh3b3JraW5nIGNvcHkpCkBAIC01NSw3ICs1NSw3
IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIGJvb2wgaGFzRGF0YSgpOwogICAgIAogICAgIC8vIGV4
dGVuc2lvbnMgYmV5b25kIElFJ3MgQVBJCi0gICAgdmlydHVhbCBIYXNoU2V0PFN0cmluZz4gdHlw
ZXMoKSBjb25zdDsKKyAgICB2aXJ0dWFsIFZlY3RvcjxTdHJpbmc+IHR5cGVzKCkgY29uc3Q7CiAg
ICAgdmlydHVhbCBQYXNzUmVmUHRyPEZpbGVMaXN0PiBmaWxlcygpIGNvbnN0OwogCiAgICAgdm9p
ZCBzZXREcmFnSW1hZ2UoQ2FjaGVkSW1hZ2UqLCBjb25zdCBJbnRQb2ludCYpOwpJbmRleDogU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWFjL0NsaXBib2FyZE1hYy5tbQo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tYWMvQ2xpcGJvYXJkTWFjLm1tCShyZXZpc2lvbiAxMTI4
NDEpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tYWMvQ2xpcGJvYXJkTWFjLm1tCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xMTEsMTUgKzExMSwxNSBAQCBzdGF0aWMgU3RyaW5nIHV0aVR5cGVGcm9t
Q29jb2FUeXBlKGNvbnN0CiAgICAgcmV0dXJuIFN0cmluZygpOwogfQogCi1zdGF0aWMgdm9pZCBh
ZGRIVE1MQ2xpcGJvYXJkVHlwZXNGb3JDb2NvYVR5cGUoSGFzaFNldDxTdHJpbmc+JiByZXN1bHRU
eXBlcywgY29uc3QgU3RyaW5nJiBjb2NvYVR5cGUsIGNvbnN0IFN0cmluZyYgcGFzdGVib2FyZE5h
bWUpCitzdGF0aWMgdm9pZCBhZGRIVE1MQ2xpcGJvYXJkVHlwZXNGb3JDb2NvYVR5cGUoVmVjdG9y
PFN0cmluZz4mIHJlc3VsdFR5cGVzLCBjb25zdCBTdHJpbmcmIGNvY29hVHlwZSwgY29uc3QgU3Ry
aW5nJiBwYXN0ZWJvYXJkTmFtZSkKIHsKICAgICAvLyBVVEkgbWF5IG5vdCBkbyB0aGVzZSByaWdo
dCwgc28gbWFrZSBzdXJlIHdlIGdldCB0aGUgcmlnaHQsIHByZWRpY3RhYmxlIHJlc3VsdAogICAg
IGlmIChjb2NvYVR5cGUgPT0gU3RyaW5nKE5TU3RyaW5nUGJvYXJkVHlwZSkpIHsKLSAgICAgICAg
cmVzdWx0VHlwZXMuYWRkKCJ0ZXh0L3BsYWluIik7CisgICAgICAgIHJlc3VsdFR5cGVzLmFwcGVu
ZCgidGV4dC9wbGFpbiIpOwogICAgICAgICByZXR1cm47CiAgICAgfQogICAgIGlmIChjb2NvYVR5
cGUgPT0gU3RyaW5nKE5TVVJMUGJvYXJkVHlwZSkpIHsKLSAgICAgICAgcmVzdWx0VHlwZXMuYWRk
KCJ0ZXh0L3VyaS1saXN0Iik7CisgICAgICAgIHJlc3VsdFR5cGVzLmFwcGVuZCgidGV4dC91cmkt
bGlzdCIpOwogICAgICAgICByZXR1cm47CiAgICAgfQogICAgIGlmIChjb2NvYVR5cGUgPT0gU3Ry
aW5nKE5TRmlsZW5hbWVzUGJvYXJkVHlwZSkpIHsKQEAgLTEzMSwxOCArMTMxLDE4IEBAIHN0YXRp
YyB2b2lkIGFkZEhUTUxDbGlwYm9hcmRUeXBlc0ZvckNvY28KICAgICAgICAgaWYgKCFmaWxlTGlz
dC5pc0VtcHR5KCkpIHsKICAgICAgICAgICAgIC8vIEl0IGlzIHVua25vd24gaWYgTlNGaWxlbmFt
ZXNQYm9hcmRUeXBlIGFsd2F5cyBpbXBsaWVzIE5TVVJMUGJvYXJkVHlwZSBpbiBDb2NvYSwKICAg
ICAgICAgICAgIC8vIGJ1dCBOU0ZpbGVuYW1lc1Bib2FyZFR5cGUgc2hvdWxkIGltcGx5IGJvdGgg
J3RleHQvdXJpLWxpc3QnIGFuZCAnRmlsZXMnCi0gICAgICAgICAgICByZXN1bHRUeXBlcy5hZGQo
InRleHQvdXJpLWxpc3QiKTsKLSAgICAgICAgICAgIHJlc3VsdFR5cGVzLmFkZCgiRmlsZXMiKTsK
KyAgICAgICAgICAgIHJlc3VsdFR5cGVzLmFwcGVuZCgidGV4dC91cmktbGlzdCIpOworICAgICAg
ICAgICAgcmVzdWx0VHlwZXMuYXBwZW5kKCJGaWxlcyIpOwogICAgICAgICB9CiAgICAgICAgIHJl
dHVybjsKICAgICB9CiAgICAgU3RyaW5nIHV0aVR5cGUgPSB1dGlUeXBlRnJvbUNvY29hVHlwZShj
b2NvYVR5cGUpOwogICAgIGlmICghdXRpVHlwZS5pc0VtcHR5KCkpIHsKLSAgICAgICAgcmVzdWx0
VHlwZXMuYWRkKHV0aVR5cGUpOworICAgICAgICByZXN1bHRUeXBlcy5hcHBlbmQodXRpVHlwZSk7
CiAgICAgICAgIHJldHVybjsKICAgICB9CiAgICAgLy8gTm8gbWFwcGluZywganVzdCBwYXNzIHRo
ZSB3aG9sZSBzdHJpbmcgdGhvdWdoCi0gICAgcmVzdWx0VHlwZXMuYWRkKGNvY29hVHlwZSk7Cisg
ICAgcmVzdWx0VHlwZXMuYXBwZW5kKGNvY29hVHlwZSk7CiB9CiAKIHZvaWQgQ2xpcGJvYXJkTWFj
OjpjbGVhckRhdGEoY29uc3QgU3RyaW5nJiB0eXBlKQpAQCAtMjgwLDEwICsyODAsMTAgQEAgYm9v
bCBDbGlwYm9hcmRNYWM6OnNldERhdGEoY29uc3QgU3RyaW5nCiAgICAgcmV0dXJuIGZhbHNlOwog
fQogCi1IYXNoU2V0PFN0cmluZz4gQ2xpcGJvYXJkTWFjOjp0eXBlcygpIGNvbnN0CitWZWN0b3I8
U3RyaW5nPiBDbGlwYm9hcmRNYWM6OnR5cGVzKCkgY29uc3QKIHsKICAgICBpZiAocG9saWN5KCkg
IT0gQ2xpcGJvYXJkUmVhZGFibGUgJiYgcG9saWN5KCkgIT0gQ2xpcGJvYXJkVHlwZXNSZWFkYWJs
ZSkKLSAgICAgICAgcmV0dXJuIEhhc2hTZXQ8U3RyaW5nPigpOworICAgICAgICByZXR1cm4gVmVj
dG9yPFN0cmluZz4oKTsKIAogICAgIFZlY3RvcjxTdHJpbmc+IHR5cGVzOwogICAgIHBsYXRmb3Jt
U3RyYXRlZ2llcygpLT5wYXN0ZWJvYXJkU3RyYXRlZ3koKS0+Z2V0VHlwZXModHlwZXMsIG1fcGFz
dGVib2FyZE5hbWUpOwpAQCAtMjkxLDkgKzI5MSw5IEBAIEhhc2hTZXQ8U3RyaW5nPiBDbGlwYm9h
cmRNYWM6OnR5cGVzKCkgY28KICAgICAvLyBFbmZvcmNlIGNoYW5nZUNvdW50IG91cnNlbHZlcyBm
b3Igc2VjdXJpdHkuICBXZSBjaGVjayBhZnRlciByZWFkaW5nIGluc3RlYWQgb2YgYmVmb3JlIHRv
IGJlCiAgICAgLy8gc3VyZSBpdCBkb2Vzbid0IGNoYW5nZSBiZXR3ZWVuIG91ciB0ZXN0aW5nIHRo
ZSBjaGFuZ2UgY291bnQgYW5kIGFjY2Vzc2luZyB0aGUgZGF0YS4KICAgICBpZiAobV9jaGFuZ2VD
b3VudCAhPSBwbGF0Zm9ybVN0cmF0ZWdpZXMoKS0+cGFzdGVib2FyZFN0cmF0ZWd5KCktPmNoYW5n
ZUNvdW50KG1fcGFzdGVib2FyZE5hbWUpKQotICAgICAgICByZXR1cm4gSGFzaFNldDxTdHJpbmc+
KCk7CisgICAgICAgIHJldHVybiBWZWN0b3I8U3RyaW5nPigpOwogCi0gICAgSGFzaFNldDxTdHJp
bmc+IHJlc3VsdDsKKyAgICBWZWN0b3I8U3RyaW5nPiByZXN1bHQ7CiAgICAgLy8gRklYTUU6IFRo
aXMgbG9vcCBjb3VsZCBiZSBzcGxpdCBpbnRvIHR3byBzdGFnZXMuIE9uZSB3aGljaCBhZGRzIGFs
bCB0aGUgSFRNTDUgc3BlY2lmaWVkIHR5cGVzCiAgICAgLy8gYW5kIGEgc2Vjb25kIHdoaWNoIGFk
ZHMgYWxsIHRoZSBleHRyYSB0eXBlcyBmcm9tIHRoZSBjb2NvYSBjbGlwYm9hcmQgKHdoaWNoIGlz
IE1hYy1vbmx5IGJlaGF2aW9yKS4KICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHR5cGVzLnNp
emUoKTsgaSsrKSB7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9xdC9DbGlwYm9hcmRR
dC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vcXQvQ2xpcGJvYXJk
UXQuY3BwCShyZXZpc2lvbiAxMTI4NDEpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9xdC9D
bGlwYm9hcmRRdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE4MiwxNiArMTgyLDE2IEBAIGJvb2wg
Q2xpcGJvYXJkUXQ6OnNldERhdGEoY29uc3QgU3RyaW5nJgogfQogCiAvLyBleHRlbnNpb25zIGJl
eW9uZCBJRSdzIEFQSQotSGFzaFNldDxTdHJpbmc+IENsaXBib2FyZFF0Ojp0eXBlcygpIGNvbnN0
CitWZWN0b3I8U3RyaW5nPiBDbGlwYm9hcmRRdDo6dHlwZXMoKSBjb25zdAogewogICAgIGlmIChw
b2xpY3koKSAhPSBDbGlwYm9hcmRSZWFkYWJsZSAmJiBwb2xpY3koKSAhPSBDbGlwYm9hcmRUeXBl
c1JlYWRhYmxlKQotICAgICAgICByZXR1cm4gSGFzaFNldDxTdHJpbmc+KCk7CisgICAgICAgIHJl
dHVybiBWZWN0b3I8U3RyaW5nPigpOwogCiAgICAgQVNTRVJUKG1fcmVhZGFibGVEYXRhKTsKLSAg
ICBIYXNoU2V0PFN0cmluZz4gcmVzdWx0OworICAgIFZlY3RvcjxTdHJpbmc+IHJlc3VsdDsKICAg
ICBRU3RyaW5nTGlzdCBmb3JtYXRzID0gbV9yZWFkYWJsZURhdGEtPmZvcm1hdHMoKTsKICAgICBm
b3IgKGludCBpID0gMDsgaSA8IGZvcm1hdHMuY291bnQoKTsgKytpKQotICAgICAgICByZXN1bHQu
YWRkKGZvcm1hdHMuYXQoaSkpOworICAgICAgICByZXN1bHQuYXBwZW5kKGZvcm1hdHMuYXQoaSkp
OwogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L3F0L0NsaXBib2FyZFF0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
cXQvQ2xpcGJvYXJkUXQuaAkocmV2aXNpb24gMTEyODQxKQorKysgU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vcXQvQ2xpcGJvYXJkUXQuaAkod29ya2luZyBjb3B5KQpAQCAtNTcsNyArNTcsNyBAQCBw
dWJsaWM6CiAgICAgYm9vbCBzZXREYXRhKGNvbnN0IFN0cmluZyYgdHlwZSwgY29uc3QgU3RyaW5n
JiBkYXRhKTsKIAogICAgIC8vIGV4dGVuc2lvbnMgYmV5b25kIElFJ3MgQVBJCi0gICAgdmlydHVh
bCBIYXNoU2V0PFN0cmluZz4gdHlwZXMoKSBjb25zdDsKKyAgICB2aXJ0dWFsIFZlY3RvcjxTdHJp
bmc+IHR5cGVzKCkgY29uc3Q7CiAgICAgdmlydHVhbCBQYXNzUmVmUHRyPEZpbGVMaXN0PiBmaWxl
cygpIGNvbnN0OwogCiAgICAgdm9pZCBzZXREcmFnSW1hZ2UoQ2FjaGVkSW1hZ2UqLCBjb25zdCBJ
bnRQb2ludCYpOwpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vd2luL0NsaXBib2FyZFdp
bi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vd2luL0NsaXBib2Fy
ZFdpbi5jcHAJKHJldmlzaW9uIDExMjg0MSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3dp
bi9DbGlwYm9hcmRXaW4uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00ODQsMjQgKzQ4NCwyNCBAQCBi
b29sIENsaXBib2FyZFdpbjo6c2V0RGF0YShjb25zdCBTdHJpbmcmCiAgICAgcmV0dXJuIGZhbHNl
OwogfQogCi1zdGF0aWMgdm9pZCBhZGRNaW1lVHlwZXNGb3JGb3JtYXQoSGFzaFNldDxTdHJpbmc+
JiByZXN1bHRzLCBjb25zdCBGT1JNQVRFVEMmIGZvcm1hdCkKK3N0YXRpYyB2b2lkIGFkZE1pbWVU
eXBlc0ZvckZvcm1hdChWZWN0b3I8U3RyaW5nPiYgcmVzdWx0cywgY29uc3QgRk9STUFURVRDJiBm
b3JtYXQpCiB7CiAgICAgLy8gVVJMIGFuZCBUZXh0IGFyZSBwcm92aWRlZCBmb3IgY29tcGF0aWJp
bGl0eSB3aXRoIElFJ3MgbW9kZWwKICAgICBpZiAoZm9ybWF0LmNmRm9ybWF0ID09IHVybEZvcm1h
dCgpLT5jZkZvcm1hdCB8fCBmb3JtYXQuY2ZGb3JtYXQgPT0gdXJsV0Zvcm1hdCgpLT5jZkZvcm1h
dCkgewotICAgICAgICByZXN1bHRzLmFkZCgiVVJMIik7Ci0gICAgICAgIHJlc3VsdHMuYWRkKCJ0
ZXh0L3VyaS1saXN0Iik7CisgICAgICAgIHJlc3VsdHMuYXBwZW5kKCJVUkwiKTsKKyAgICAgICAg
cmVzdWx0cy5hcHBlbmQoInRleHQvdXJpLWxpc3QiKTsKICAgICB9CiAKICAgICBpZiAoZm9ybWF0
LmNmRm9ybWF0ID09IHBsYWluVGV4dFdGb3JtYXQoKS0+Y2ZGb3JtYXQgfHwgZm9ybWF0LmNmRm9y
bWF0ID09IHBsYWluVGV4dEZvcm1hdCgpLT5jZkZvcm1hdCkgewotICAgICAgICByZXN1bHRzLmFk
ZCgiVGV4dCIpOwotICAgICAgICByZXN1bHRzLmFkZCgidGV4dC9wbGFpbiIpOworICAgICAgICBy
ZXN1bHRzLmFwcGVuZCgiVGV4dCIpOworICAgICAgICByZXN1bHRzLmFwcGVuZCgidGV4dC9wbGFp
biIpOwogICAgIH0KIH0KIAogLy8gZXh0ZW5zaW9ucyBiZXlvbmQgSUUncyBBUEkKLUhhc2hTZXQ8
U3RyaW5nPiBDbGlwYm9hcmRXaW46OnR5cGVzKCkgY29uc3QKK1ZlY3RvcjxTdHJpbmc+IENsaXBi
b2FyZFdpbjo6dHlwZXMoKSBjb25zdAogeyAKLSAgICBIYXNoU2V0PFN0cmluZz4gcmVzdWx0czsg
CisgICAgVmVjdG9yPFN0cmluZz4gcmVzdWx0czsKICAgICBpZiAocG9saWN5KCkgIT0gQ2xpcGJv
YXJkUmVhZGFibGUgJiYgcG9saWN5KCkgIT0gQ2xpcGJvYXJkVHlwZXNSZWFkYWJsZSkKICAgICAg
ICAgcmV0dXJuIHJlc3VsdHM7CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3dpbi9D
bGlwYm9hcmRXaW4uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS93aW4v
Q2xpcGJvYXJkV2luLmgJKHJldmlzaW9uIDExMjg0MSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL3dpbi9DbGlwYm9hcmRXaW4uaAkod29ya2luZyBjb3B5KQpAQCAtNjQsNyArNjQsNyBAQCBw
dWJsaWM6CiAgICAgYm9vbCBzZXREYXRhKGNvbnN0IFN0cmluZyYgdHlwZSwgY29uc3QgU3RyaW5n
JiBkYXRhKTsKIAogICAgIC8vIGV4dGVuc2lvbnMgYmV5b25kIElFJ3MgQVBJCi0gICAgdmlydHVh
bCBIYXNoU2V0PFN0cmluZz4gdHlwZXMoKSBjb25zdDsKKyAgICB2aXJ0dWFsIFZlY3RvcjxTdHJp
bmc+IHR5cGVzKCkgY29uc3Q7CiAgICAgdmlydHVhbCBQYXNzUmVmUHRyPEZpbGVMaXN0PiBmaWxl
cygpIGNvbnN0OwogCiAgICAgdm9pZCBzZXREcmFnSW1hZ2UoQ2FjaGVkSW1hZ2UqLCBjb25zdCBJ
bnRQb2ludCYpOwpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vd3gvQ2xpcGJvYXJkV3gu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3d4L0NsaXBib2FyZFd4
LmNwcAkocmV2aXNpb24gMTEyODQxKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vd3gvQ2xp
cGJvYXJkV3guY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03MCwxMCArNzAsMTAgQEAgYm9vbCBDbGlw
Ym9hcmRXeDo6c2V0RGF0YShjb25zdCBTdHJpbmcmCiB9CiAKIC8vIGV4dGVuc2lvbnMgYmV5b25k
IElFJ3MgQVBJCi1IYXNoU2V0PFN0cmluZz4gQ2xpcGJvYXJkV3g6OnR5cGVzKCkgY29uc3QgCitW
ZWN0b3I8U3RyaW5nPiBDbGlwYm9hcmRXeDo6dHlwZXMoKSBjb25zdAogewogICAgIG5vdEltcGxl
bWVudGVkKCk7Ci0gICAgSGFzaFNldDxTdHJpbmc+IHJlc3VsdDsKKyAgICBWZWN0b3I8U3RyaW5n
PiByZXN1bHQ7CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIApJbmRleDogU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vd3gvQ2xpcGJvYXJkV3guaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS93eC9DbGlwYm9hcmRXeC5oCShyZXZpc2lvbiAxMTI4NDEpCisrKyBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS93eC9DbGlwYm9hcmRXeC5oCSh3b3JraW5nIGNvcHkpCkBAIC00Niw3ICs0
Niw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgYm9vbCBzZXREYXRhKGNvbnN0IFN0
cmluZyYgdHlwZSwgY29uc3QgU3RyaW5nJiBkYXRhKTsKICAgICAKICAgICAgICAgLy8gZXh0ZW5z
aW9ucyBiZXlvbmQgSUUncyBBUEkKLSAgICAgICAgdmlydHVhbCBIYXNoU2V0PFN0cmluZz4gdHlw
ZXMoKSBjb25zdDsKKyAgICAgICAgdmlydHVhbCBWZWN0b3I8U3RyaW5nPiB0eXBlcygpIGNvbnN0
OwogICAgICAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8RmlsZUxpc3Q+IGZpbGVzKCkgY29uc3Q7CiAg
ICAgCiAgICAgICAgIEludFBvaW50IGRyYWdMb2NhdGlvbigpIGNvbnN0Owo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>135158</attachid>
            <date>2012-04-02 12:43:55 -0700</date>
            <delta_ts>2012-05-25 02:36:51 -0700</delta_ts>
            <desc>patch</desc>
            <filename>wip_clipboard_002.diff</filename>
            <type>text/plain</type>
            <size>21081</size>
            <attacher name="Vineet Chaudhary (vineetc)">code.vineet</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDExMjkxNykKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDYxIEBACisyMDEyLTA0LTAyICBWaW5lZXQg
Q2hhdWRoYXJ5ICA8cmdmNzQ4QG1vdG9yb2xhLmNvbT4KKworICAgICAgICBDb25zaWRlciByZXBs
YWNpbmcgcmV0dXJuIHR5cGUgb2YgQ2xpcGJvYXJkOjp0eXBlcygpIGZyb20gSGFzaFNldDxTdHJp
bmc+IHRvIFZlY3RvcjxTdHJpbmc+LgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9ODI4ODgKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMh
KS4KKworICAgICAgICBBcyBwYXJ0IG9mIHJlbW92aW5nIGN1c3RvbSBiaW5kaW5ncyBvZiB0eXBl
cyBBcnJheSBDbGlwYm9hcmQuaWRsIGFsc28gbmVlZHMgdG8gaGF2ZQorICAgICAgICBtb2RpZmll
ZCB0byBoYXZlIHNlcXVlbmNlPFN0cmluZz4sIGJ1dCBhY2NvcmRpbmcgdG8gY3VycmVudCBpbXBs
ZW1lbnRhdGlvbiBvZiB0aGUgQ2xpcGJvYXJkOjp0eXBlcygpCisgICAgICAgIGl0IHJldHVybnMg
SGFzaFNldDxTdHJpbmc+LiBJbiBvcmRlciB0byByZW1vdmUgdGhlIGN1c3RvbSBiaW5kaW5ncyBp
dCBzaG91bGQgb2YgdHlwZSBWZWN0b3I8U3RyaW5nPi4KKworICAgICAgICBObyBuZXcgdGVzdHMu
CisKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU0NsaXBib2FyZEN1c3RvbS5jcHA6IFJlcGxhY2Ug
ZGF0YSB0eXBlIGZyb20gSGFzaFNldDw+IHRvIFZlY3Rvcjw+LgorICAgICAgICAoV2ViQ29yZTo6
SlNDbGlwYm9hcmQ6OnR5cGVzKToKKyAgICAgICAgKiBiaW5kaW5ncy92OC9jdXN0b20vVjhDbGlw
Ym9hcmRDdXN0b20uY3BwOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OlY4Q2xpcGJvYXJkOjp0
eXBlc0FjY2Vzc29yR2V0dGVyKToKKyAgICAgICAgKiBkb20vQ2xpcGJvYXJkLmg6IERpdHRvLgor
ICAgICAgICAoQ2xpcGJvYXJkKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ibGFja2JlcnJ5L0NsaXBi
b2FyZEJsYWNrQmVycnkuY3BwOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OkNsaXBib2FyZEJs
YWNrQmVycnk6OnR5cGVzKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ibGFja2JlcnJ5L0NsaXBib2Fy
ZEJsYWNrQmVycnkuaDogRGl0dG8uCisgICAgICAgIChDbGlwYm9hcmRCbGFja0JlcnJ5KToKKyAg
ICAgICAgKiBwbGF0Zm9ybS9jaHJvbWl1bS9DaHJvbWl1bURhdGFPYmplY3QuY3BwOiBEaXR0by4K
KyAgICAgICAgKFdlYkNvcmU6OkNocm9taXVtRGF0YU9iamVjdDo6dHlwZXMpOgorICAgICAgICAq
IHBsYXRmb3JtL2Nocm9taXVtL0Nocm9taXVtRGF0YU9iamVjdC5oOiBEaXR0by4KKyAgICAgICAg
KENocm9taXVtRGF0YU9iamVjdCk6CisgICAgICAgICogcGxhdGZvcm0vY2hyb21pdW0vQ2xpcGJv
YXJkQ2hyb21pdW0uY3BwOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OkNsaXBib2FyZENocm9t
aXVtOjp0eXBlcyk6CisgICAgICAgICogcGxhdGZvcm0vY2hyb21pdW0vQ2xpcGJvYXJkQ2hyb21p
dW0uaDogRGl0dG8uCisgICAgICAgIChDbGlwYm9hcmRDaHJvbWl1bSk6CisgICAgICAgICogcGxh
dGZvcm0vZWZsL0NsaXBib2FyZEVmbC5jcHA6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6Q2xp
cGJvYXJkRWZsOjp0eXBlcyk6CisgICAgICAgICogcGxhdGZvcm0vZWZsL0NsaXBib2FyZEVmbC5o
OiBEaXR0by4KKyAgICAgICAgKENsaXBib2FyZEVmbCk6CisgICAgICAgICogcGxhdGZvcm0vZ3Rr
L0NsaXBib2FyZEd0ay5jcHA6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6Q2xpcGJvYXJkR3Rr
Ojp0eXBlcyk6CisgICAgICAgICogcGxhdGZvcm0vZ3RrL0NsaXBib2FyZEd0ay5oOiBEaXR0by4K
KyAgICAgICAgKENsaXBib2FyZEd0ayk6CisgICAgICAgICogcGxhdGZvcm0vbWFjL0NsaXBib2Fy
ZE1hYy5oOiBEaXR0by4KKyAgICAgICAgKENsaXBib2FyZE1hYyk6CisgICAgICAgICogcGxhdGZv
cm0vbWFjL0NsaXBib2FyZE1hYy5tbTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjphZGRIVE1M
Q2xpcGJvYXJkVHlwZXNGb3JDb2NvYVR5cGUpOgorICAgICAgICAoV2ViQ29yZTo6Q2xpcGJvYXJk
TWFjOjp0eXBlcyk6CisgICAgICAgICogcGxhdGZvcm0vcXQvQ2xpcGJvYXJkUXQuY3BwOiBEaXR0
by4KKyAgICAgICAgKFdlYkNvcmU6OkNsaXBib2FyZFF0Ojp0eXBlcyk6CisgICAgICAgICogcGxh
dGZvcm0vcXQvQ2xpcGJvYXJkUXQuaDogRGl0dG8uCisgICAgICAgIChDbGlwYm9hcmRRdCk6Cisg
ICAgICAgICogcGxhdGZvcm0vd2luL0NsaXBib2FyZFdpbi5jcHA6IERpdHRvLgorICAgICAgICAo
V2ViQ29yZTo6YWRkTWltZVR5cGVzRm9yRm9ybWF0KToKKyAgICAgICAgKFdlYkNvcmU6OkNsaXBi
b2FyZFdpbjo6dHlwZXMpOgorICAgICAgICAqIHBsYXRmb3JtL3dpbi9DbGlwYm9hcmRXaW4uaDog
RGl0dG8uCisgICAgICAgIChDbGlwYm9hcmRXaW4pOgorICAgICAgICAqIHBsYXRmb3JtL3d4L0Ns
aXBib2FyZFd4LmNwcDogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpDbGlwYm9hcmRXeDo6dHlw
ZXMpOgorICAgICAgICAqIHBsYXRmb3JtL3d4L0NsaXBib2FyZFd4Lmg6IERpdHRvLgorICAgICAg
ICAoQ2xpcGJvYXJkV3gpOgorCiAyMDEyLTA0LTAyICBBbGV4aXMgTWVuYXJkICA8YWxleGlzLm1l
bmFyZEBvcGVuYm9zc2Eub3JnPgogCiAgICAgICAgIFJlbmFtZSBDU1NQcm9wZXJ0eUxvbmdoYW5k
IGZpbGVzIHRvIFN0eWxlUHJvcGVydHlTaG9ydGhhbmQuCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy9qcy9KU0NsaXBib2FyZEN1c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvYmluZGluZ3MvanMvSlNDbGlwYm9hcmRDdXN0b20uY3BwCShyZXZpc2lvbiAxMTI4NDUp
CisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0NsaXBib2FyZEN1c3RvbS5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTUyLDEzICs1MiwxMyBAQCBKU1ZhbHVlIEpTQ2xpcGJvYXJkOjp0eXBl
cyhFeGVjU3RhdGUqIGV4CiB7CiAgICAgQ2xpcGJvYXJkKiBjbGlwYm9hcmQgPSBpbXBsKCk7CiAK
LSAgICBIYXNoU2V0PFN0cmluZz4gdHlwZXMgPSBjbGlwYm9hcmQtPnR5cGVzKCk7CisgICAgVmVj
dG9yPFN0cmluZz4gdHlwZXMgPSBjbGlwYm9hcmQtPnR5cGVzKCk7CiAgICAgaWYgKHR5cGVzLmlz
RW1wdHkoKSkKICAgICAgICAgcmV0dXJuIGpzTnVsbCgpOwogCiAgICAgTWFya2VkQXJndW1lbnRC
dWZmZXIgbGlzdDsKLSAgICBIYXNoU2V0PFN0cmluZz46OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IHR5
cGVzLmVuZCgpOwotICAgIGZvciAoSGFzaFNldDxTdHJpbmc+Ojpjb25zdF9pdGVyYXRvciBpdCA9
IHR5cGVzLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkKKyAgICBWZWN0b3I8U3RyaW5nPjo6Y29u
c3RfaXRlcmF0b3IgZW5kID0gdHlwZXMuZW5kKCk7CisgICAgZm9yIChWZWN0b3I8U3RyaW5nPjo6
Y29uc3RfaXRlcmF0b3IgaXQgPSB0eXBlcy5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpCiAgICAg
ICAgIGxpc3QuYXBwZW5kKGpzU3RyaW5nKGV4ZWMsIHN0cmluZ1RvVVN0cmluZygqaXQpKSk7CiAg
ICAgcmV0dXJuIGNvbnN0cnVjdEFycmF5KGV4ZWMsIGdsb2JhbE9iamVjdCgpLCBsaXN0KTsKIH0K
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOENsaXBib2FyZEN1c3Rv
bS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4
Q2xpcGJvYXJkQ3VzdG9tLmNwcAkocmV2aXNpb24gMTEyODQ1KQorKysgU291cmNlL1dlYkNvcmUv
YmluZGluZ3MvdjgvY3VzdG9tL1Y4Q2xpcGJvYXJkQ3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtNDksMTQgKzQ5LDE0IEBAIHY4OjpIYW5kbGU8djg6OlZhbHVlPiBWOENsaXBib2FyZDo6dHlw
ZXMKICAgICBJTkNfU1RBVFMoIkRPTS5DbGlwYm9hcmQudHlwZXMoKSIpOwogICAgIENsaXBib2Fy
ZCogY2xpcGJvYXJkID0gVjhDbGlwYm9hcmQ6OnRvTmF0aXZlKGluZm8uSG9sZGVyKCkpOwogCi0g
ICAgSGFzaFNldDxTdHJpbmc+IHR5cGVzID0gY2xpcGJvYXJkLT50eXBlcygpOworICAgIFZlY3Rv
cjxTdHJpbmc+IHR5cGVzID0gY2xpcGJvYXJkLT50eXBlcygpOwogICAgIGlmICh0eXBlcy5pc0Vt
cHR5KCkpCiAgICAgICAgIHJldHVybiB2ODo6TnVsbCgpOwogCiAgICAgdjg6OkxvY2FsPHY4OjpB
cnJheT4gcmVzdWx0ID0gdjg6OkFycmF5OjpOZXcodHlwZXMuc2l6ZSgpKTsKLSAgICBIYXNoU2V0
PFN0cmluZz46OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IHR5cGVzLmVuZCgpOworICAgIFZlY3RvcjxT
dHJpbmc+Ojpjb25zdF9pdGVyYXRvciBlbmQgPSB0eXBlcy5lbmQoKTsKICAgICBpbnQgaW5kZXgg
PSAwOwotICAgIGZvciAoSGFzaFNldDxTdHJpbmc+Ojpjb25zdF9pdGVyYXRvciBpdCA9IHR5cGVz
LmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCwgKytpbmRleCkKKyAgICBmb3IgKFZlY3RvcjxTdHJp
bmc+Ojpjb25zdF9pdGVyYXRvciBpdCA9IHR5cGVzLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCwg
KytpbmRleCkKICAgICAgICAgcmVzdWx0LT5TZXQodjg6OkludGVnZXI6Ok5ldyhpbmRleCksIHY4
U3RyaW5nKCppdCkpOwogCiAgICAgcmV0dXJuIHJlc3VsdDsKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L2RvbS9DbGlwYm9hcmQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9kb20vQ2xpcGJv
YXJkLmgJKHJldmlzaW9uIDExMjg0NSkKKysrIFNvdXJjZS9XZWJDb3JlL2RvbS9DbGlwYm9hcmQu
aAkod29ya2luZyBjb3B5KQpAQCAtNjYsNyArNjYsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAg
ICAgICAgIHZpcnR1YWwgYm9vbCBzZXREYXRhKGNvbnN0IFN0cmluZyYgdHlwZSwgY29uc3QgU3Ry
aW5nJiBkYXRhKSA9IDA7CiAgICAgCiAgICAgICAgIC8vIGV4dGVuc2lvbnMgYmV5b25kIElFJ3Mg
QVBJCi0gICAgICAgIHZpcnR1YWwgSGFzaFNldDxTdHJpbmc+IHR5cGVzKCkgY29uc3QgPSAwOwor
ICAgICAgICB2aXJ0dWFsIFZlY3RvcjxTdHJpbmc+IHR5cGVzKCkgY29uc3QgPSAwOwogICAgICAg
ICB2aXJ0dWFsIFBhc3NSZWZQdHI8RmlsZUxpc3Q+IGZpbGVzKCkgY29uc3QgPSAwOwogCiAgICAg
ICAgIEludFBvaW50IGRyYWdMb2NhdGlvbigpIGNvbnN0IHsgcmV0dXJuIG1fZHJhZ0xvYzsgfQpJ
bmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vYmxhY2tiZXJyeS9DbGlwYm9hcmRCbGFja0Jl
cnJ5LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ibGFja2JlcnJ5
L0NsaXBib2FyZEJsYWNrQmVycnkuY3BwCShyZXZpc2lvbiAxMTI4NDUpCisrKyBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ibGFja2JlcnJ5L0NsaXBib2FyZEJsYWNrQmVycnkuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC03MSwxMyArNzEsMTMgQEAgYm9vbCBDbGlwYm9hcmRCbGFja0JlcnJ5OjpzZXRE
YXRhKGNvbnN0IAogICAgIHJldHVybiB0cnVlOwogfQogCi1IYXNoU2V0PFN0cmluZz4gQ2xpcGJv
YXJkQmxhY2tCZXJyeTo6dHlwZXMoKSBjb25zdAorVmVjdG9yPFN0cmluZz4gQ2xpcGJvYXJkQmxh
Y2tCZXJyeTo6dHlwZXMoKSBjb25zdAogewogICAgIC8vIFdlIHVzZSBoYXJkY29kZWQgbGlzdCBo
ZXJlIHNpbmNlIHRoZXJlIHNlZW1zIHRvIGJlIG5vIEFQSSB0byBnZXQgdGhlIGxpc3QuCi0gICAg
SGFzaFNldDxTdHJpbmc+IHJldDsKLSAgICByZXQuYWRkKCJ0ZXh0L3BsYWluIik7Ci0gICAgcmV0
LmFkZCgidGV4dC9odG1sIik7Ci0gICAgcmV0LmFkZCgidGV4dC91cmwiKTsKKyAgICBWZWN0b3I8
U3RyaW5nPiByZXQ7CisgICAgcmV0LmFwcGVuZCgidGV4dC9wbGFpbiIpOworICAgIHJldC5hcHBl
bmQoInRleHQvaHRtbCIpOworICAgIHJldC5hcHBlbmQoInRleHQvdXJsIik7CiAgICAgcmV0dXJu
IHJldDsKIH0KIApJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vYmxhY2tiZXJyeS9DbGlw
Ym9hcmRCbGFja0JlcnJ5LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
YmxhY2tiZXJyeS9DbGlwYm9hcmRCbGFja0JlcnJ5LmgJKHJldmlzaW9uIDExMjg0NSkKKysrIFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2JsYWNrYmVycnkvQ2xpcGJvYXJkQmxhY2tCZXJyeS5oCSh3
b3JraW5nIGNvcHkpCkBAIC0zNiw3ICszNiw3IEBAIHB1YmxpYzoKICAgICBib29sIHNldERhdGEo
Y29uc3QgU3RyaW5nJiB0eXBlLCBjb25zdCBTdHJpbmcmIGRhdGEpOwogCiAgICAgLy8gZXh0ZW5z
aW9ucyBiZXlvbmQgSUUncyBBUEkKLSAgICB2aXJ0dWFsIEhhc2hTZXQ8U3RyaW5nPiB0eXBlcygp
IGNvbnN0OworICAgIHZpcnR1YWwgVmVjdG9yPFN0cmluZz4gdHlwZXMoKSBjb25zdDsKICAgICB2
aXJ0dWFsIFBhc3NSZWZQdHI8RmlsZUxpc3Q+IGZpbGVzKCkgY29uc3Q7CiAgICAgdmlydHVhbCBE
cmFnSW1hZ2VSZWYgY3JlYXRlRHJhZ0ltYWdlKEludFBvaW50JikgY29uc3Q7CiAgICAgdmlydHVh
bCB2b2lkIGRlY2xhcmVBbmRXcml0ZURyYWdJbWFnZShFbGVtZW50KiwgY29uc3QgS1VSTCYsIGNv
bnN0IFN0cmluZyYgdGl0bGUsIEZyYW1lKik7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9jaHJvbWl1bS9DaHJvbWl1bURhdGFPYmplY3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2Nocm9taXVtL0Nocm9taXVtRGF0YU9iamVjdC5jcHAJKHJldmlzaW9u
IDExMjg0NSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2Nocm9taXVtL0Nocm9taXVtRGF0
YU9iamVjdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEyMSwyMCArMTIxLDIwIEBAIHZvaWQgQ2hy
b21pdW1EYXRhT2JqZWN0OjpjbGVhckFsbEV4Y2VwdEYKICAgICB9CiB9CiAKLUhhc2hTZXQ8U3Ry
aW5nPiBDaHJvbWl1bURhdGFPYmplY3Q6OnR5cGVzKCkgY29uc3QKK1ZlY3RvcjxTdHJpbmc+IENo
cm9taXVtRGF0YU9iamVjdDo6dHlwZXMoKSBjb25zdAogewotICAgIEhhc2hTZXQ8U3RyaW5nPiBy
ZXN1bHRzOworICAgIFZlY3RvcjxTdHJpbmc+IHJlc3VsdHM7CiAgICAgYm9vbCBjb250YWluc0Zp
bGVzID0gZmFsc2U7CiAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtX2l0ZW1MaXN0LnNpemUo
KTsgKytpKSB7CiAgICAgICAgIGlmIChtX2l0ZW1MaXN0W2ldLT5raW5kKCkgPT0gRGF0YVRyYW5z
ZmVySXRlbTo6a2luZFN0cmluZykKLSAgICAgICAgICAgIHJlc3VsdHMuYWRkKG1faXRlbUxpc3Rb
aV0tPnR5cGUoKSk7CisgICAgICAgICAgICByZXN1bHRzLmFwcGVuZChtX2l0ZW1MaXN0W2ldLT50
eXBlKCkpOwogICAgICAgICBlbHNlIGlmIChtX2l0ZW1MaXN0W2ldLT5raW5kKCkgPT0gRGF0YVRy
YW5zZmVySXRlbTo6a2luZEZpbGUpCiAgICAgICAgICAgICBjb250YWluc0ZpbGVzID0gdHJ1ZTsK
ICAgICAgICAgZWxzZQogICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgfQog
ICAgIGlmIChjb250YWluc0ZpbGVzKQotICAgICAgICByZXN1bHRzLmFkZChtaW1lVHlwZUZpbGVz
KTsKKyAgICAgICAgcmVzdWx0cy5hcHBlbmQobWltZVR5cGVGaWxlcyk7CiAgICAgcmV0dXJuIHJl
c3VsdHM7CiB9CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2Nocm9taXVtL0Nocm9t
aXVtRGF0YU9iamVjdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2No
cm9taXVtL0Nocm9taXVtRGF0YU9iamVjdC5oCShyZXZpc2lvbiAxMTI4NDUpCisrKyBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9jaHJvbWl1bS9DaHJvbWl1bURhdGFPYmplY3QuaAkod29ya2luZyBj
b3B5KQpAQCAtNjgsNyArNjgsNyBAQCBwdWJsaWM6CiAgICAgdm9pZCBjbGVhckRhdGEoY29uc3Qg
U3RyaW5nJiB0eXBlKTsKICAgICB2b2lkIGNsZWFyQWxsRXhjZXB0RmlsZXMoKTsKIAotICAgIEhh
c2hTZXQ8U3RyaW5nPiB0eXBlcygpIGNvbnN0OworICAgIFZlY3RvcjxTdHJpbmc+IHR5cGVzKCkg
Y29uc3Q7CiAgICAgU3RyaW5nIGdldERhdGEoY29uc3QgU3RyaW5nJiB0eXBlKSBjb25zdDsKICAg
ICBib29sIHNldERhdGEoY29uc3QgU3RyaW5nJiB0eXBlLCBjb25zdCBTdHJpbmcmIGRhdGEpOwog
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jaHJvbWl1bS9DbGlwYm9hcmRDaHJvbWl1
bS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY2hyb21pdW0vQ2xp
cGJvYXJkQ2hyb21pdW0uY3BwCShyZXZpc2lvbiAxMTI4NDUpCisrKyBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9jaHJvbWl1bS9DbGlwYm9hcmRDaHJvbWl1bS5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTMwNSwxMCArMzA1LDEwIEBAIGJvb2wgQ2xpcGJvYXJkQ2hyb21pdW06OnNldERhdGEoY29uc3Qg
U3QKIH0KIAogLy8gZXh0ZW5zaW9ucyBiZXlvbmQgSUUncyBBUEkKLUhhc2hTZXQ8U3RyaW5nPiBD
bGlwYm9hcmRDaHJvbWl1bTo6dHlwZXMoKSBjb25zdAorVmVjdG9yPFN0cmluZz4gQ2xpcGJvYXJk
Q2hyb21pdW06OnR5cGVzKCkgY29uc3QKIHsKICAgICBpZiAocG9saWN5KCkgIT0gQ2xpcGJvYXJk
UmVhZGFibGUgJiYgcG9saWN5KCkgIT0gQ2xpcGJvYXJkVHlwZXNSZWFkYWJsZSkKLSAgICAgICAg
cmV0dXJuIEhhc2hTZXQ8U3RyaW5nPigpOworICAgICAgICByZXR1cm4gVmVjdG9yPFN0cmluZz4o
KTsKIAogICAgIHJldHVybiBtX2RhdGFPYmplY3QtPnR5cGVzKCk7CiB9CkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9jaHJvbWl1bS9DbGlwYm9hcmRDaHJvbWl1bS5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2Nocm9taXVtL0NsaXBib2FyZENocm9taXVtLmgJ
KHJldmlzaW9uIDExMjg0NSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2Nocm9taXVtL0Ns
aXBib2FyZENocm9taXVtLmgJKHdvcmtpbmcgY29weSkKQEAgLTYwLDcgKzYwLDcgQEAgbmFtZXNw
YWNlIFdlYkNvcmUgewogICAgICAgICBib29sIHBsYXRmb3JtQ2xpcGJvYXJkQ2hhbmdlZCgpIGNv
bnN0OwogCiAgICAgICAgIC8vIGV4dGVuc2lvbnMgYmV5b25kIElFJ3MgQVBJCi0gICAgICAgIHZp
cnR1YWwgSGFzaFNldDxTdHJpbmc+IHR5cGVzKCkgY29uc3Q7CisgICAgICAgIHZpcnR1YWwgVmVj
dG9yPFN0cmluZz4gdHlwZXMoKSBjb25zdDsKICAgICAgICAgdmlydHVhbCBQYXNzUmVmUHRyPEZp
bGVMaXN0PiBmaWxlcygpIGNvbnN0OwogCiAgICAgICAgIHZvaWQgc2V0RHJhZ0ltYWdlKENhY2hl
ZEltYWdlKiwgY29uc3QgSW50UG9pbnQmKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2VmbC9DbGlwYm9hcmRFZmwuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2VmbC9DbGlwYm9hcmRFZmwuY3BwCShyZXZpc2lvbiAxMTI4NDUpCisrKyBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9lZmwvQ2xpcGJvYXJkRWZsLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzYs
MTAgKzc2LDEwIEBAIGJvb2wgQ2xpcGJvYXJkRWZsOjpzZXREYXRhKGNvbnN0IFN0cmluZyYKICAg
ICByZXR1cm4gZmFsc2U7CiB9CiAKLUhhc2hTZXQ8U3RyaW5nPiBDbGlwYm9hcmRFZmw6OnR5cGVz
KCkgY29uc3QKK1ZlY3RvcjxTdHJpbmc+IENsaXBib2FyZEVmbDo6dHlwZXMoKSBjb25zdAogewog
ICAgIG5vdEltcGxlbWVudGVkKCk7Ci0gICAgcmV0dXJuIEhhc2hTZXQ8U3RyaW5nPigpOworICAg
IHJldHVybiBWZWN0b3I8U3RyaW5nPigpOwogfQogCiBQYXNzUmVmUHRyPEZpbGVMaXN0PiBDbGlw
Ym9hcmRFZmw6OmZpbGVzKCkgY29uc3QKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2Vm
bC9DbGlwYm9hcmRFZmwuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9l
ZmwvQ2xpcGJvYXJkRWZsLmgJKHJldmlzaW9uIDExMjg0NSkKKysrIFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2VmbC9DbGlwYm9hcmRFZmwuaAkod29ya2luZyBjb3B5KQpAQCAtMzksNyArMzksNyBA
QCBwdWJsaWM6CiAgICAgU3RyaW5nIGdldERhdGEoY29uc3QgU3RyaW5nJikgY29uc3Q7CiAgICAg
Ym9vbCBzZXREYXRhKGNvbnN0IFN0cmluZyYsIGNvbnN0IFN0cmluZyYpOwogCi0gICAgSGFzaFNl
dDxTdHJpbmc+IHR5cGVzKCkgY29uc3Q7CisgICAgVmVjdG9yPFN0cmluZz4gdHlwZXMoKSBjb25z
dDsKICAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8RmlsZUxpc3Q+IGZpbGVzKCkgY29uc3Q7CiAKICAg
ICBJbnRQb2ludCBkcmFnTG9jYXRpb24oKSBjb25zdDsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2d0ay9DbGlwYm9hcmRHdGsuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2d0ay9DbGlwYm9hcmRHdGsuY3BwCShyZXZpc2lvbiAxMTI4NDUpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvQ2xpcGJvYXJkR3RrLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMTg0LDMxICsxODQsMzEgQEAgYm9vbCBDbGlwYm9hcmRHdGs6OnNldERhdGEoY29uc3QgU3Ry
aW5nJgogICAgIHJldHVybiBzdWNjZXNzOwogfQogCi1IYXNoU2V0PFN0cmluZz4gQ2xpcGJvYXJk
R3RrOjp0eXBlcygpIGNvbnN0CitWZWN0b3I8U3RyaW5nPiBDbGlwYm9hcmRHdGs6OnR5cGVzKCkg
Y29uc3QKIHsKICAgICBpZiAocG9saWN5KCkgIT0gQ2xpcGJvYXJkUmVhZGFibGUgJiYgcG9saWN5
KCkgIT0gQ2xpcGJvYXJkVHlwZXNSZWFkYWJsZSkKLSAgICAgICAgcmV0dXJuIEhhc2hTZXQ8U3Ry
aW5nPigpOworICAgICAgICByZXR1cm4gVmVjdG9yPFN0cmluZz4oKTsKIAogICAgIGlmIChtX2Ns
aXBib2FyZCkKICAgICAgICAgUGFzdGVib2FyZEhlbHBlcjo6ZGVmYXVsdFBhc3RlYm9hcmRIZWxw
ZXIoKS0+Z2V0Q2xpcGJvYXJkQ29udGVudHMobV9jbGlwYm9hcmQpOwogCi0gICAgSGFzaFNldDxT
dHJpbmc+IHR5cGVzOworICAgIFZlY3RvcjxTdHJpbmc+IHR5cGVzOwogICAgIGlmIChtX2RhdGFP
YmplY3QtPmhhc1RleHQoKSkgewotICAgICAgICB0eXBlcy5hZGQoInRleHQvcGxhaW4iKTsKLSAg
ICAgICAgdHlwZXMuYWRkKCJUZXh0Iik7Ci0gICAgICAgIHR5cGVzLmFkZCgidGV4dCIpOworICAg
ICAgICB0eXBlcy5hcHBlbmQoInRleHQvcGxhaW4iKTsKKyAgICAgICAgdHlwZXMuYXBwZW5kKCJU
ZXh0Iik7CisgICAgICAgIHR5cGVzLmFwcGVuZCgidGV4dCIpOwogICAgIH0KIAogICAgIGlmICht
X2RhdGFPYmplY3QtPmhhc01hcmt1cCgpKQotICAgICAgICB0eXBlcy5hZGQoInRleHQvaHRtbCIp
OworICAgICAgICB0eXBlcy5hcHBlbmQoInRleHQvaHRtbCIpOwogCiAgICAgaWYgKG1fZGF0YU9i
amVjdC0+aGFzVVJJTGlzdCgpKSB7Ci0gICAgICAgIHR5cGVzLmFkZCgidGV4dC91cmktbGlzdCIp
OwotICAgICAgICB0eXBlcy5hZGQoIlVSTCIpOworICAgICAgICB0eXBlcy5hcHBlbmQoInRleHQv
dXJpLWxpc3QiKTsKKyAgICAgICAgdHlwZXMuYXBwZW5kKCJVUkwiKTsKICAgICB9CiAKICAgICBp
ZiAobV9kYXRhT2JqZWN0LT5oYXNGaWxlbmFtZXMoKSkKLSAgICAgICAgdHlwZXMuYWRkKCJGaWxl
cyIpOworICAgICAgICB0eXBlcy5hcHBlbmQoIkZpbGVzIik7CiAKICAgICByZXR1cm4gdHlwZXM7
CiB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvQ2xpcGJvYXJkR3RrLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL0NsaXBib2FyZEd0ay5oCShy
ZXZpc2lvbiAxMTI4NDUpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvQ2xpcGJvYXJk
R3RrLmgJKHdvcmtpbmcgY29weSkKQEAgLTU3LDcgKzU3LDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUg
ewogICAgICAgICBTdHJpbmcgZ2V0RGF0YShjb25zdCBTdHJpbmcmKSBjb25zdDsKICAgICAgICAg
Ym9vbCBzZXREYXRhKGNvbnN0IFN0cmluZyYsIGNvbnN0IFN0cmluZyYpOwogCi0gICAgICAgIHZp
cnR1YWwgSGFzaFNldDxTdHJpbmc+IHR5cGVzKCkgY29uc3Q7CisgICAgICAgIHZpcnR1YWwgVmVj
dG9yPFN0cmluZz4gdHlwZXMoKSBjb25zdDsKICAgICAgICAgdmlydHVhbCBQYXNzUmVmUHRyPEZp
bGVMaXN0PiBmaWxlcygpIGNvbnN0OwogCiAgICAgICAgIHZvaWQgc2V0RHJhZ0ltYWdlKENhY2hl
ZEltYWdlKiwgY29uc3QgSW50UG9pbnQmKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L21hYy9DbGlwYm9hcmRNYWMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9tYWMvQ2xpcGJvYXJkTWFjLmgJKHJldmlzaW9uIDExMjg0NSkKKysrIFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL21hYy9DbGlwYm9hcmRNYWMuaAkod29ya2luZyBjb3B5KQpAQCAtNTUsNyArNTUs
NyBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCBib29sIGhhc0RhdGEoKTsKICAgICAKICAgICAvLyBl
eHRlbnNpb25zIGJleW9uZCBJRSdzIEFQSQotICAgIHZpcnR1YWwgSGFzaFNldDxTdHJpbmc+IHR5
cGVzKCkgY29uc3Q7CisgICAgdmlydHVhbCBWZWN0b3I8U3RyaW5nPiB0eXBlcygpIGNvbnN0Owog
ICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxGaWxlTGlzdD4gZmlsZXMoKSBjb25zdDsKIAogICAgIHZv
aWQgc2V0RHJhZ0ltYWdlKENhY2hlZEltYWdlKiwgY29uc3QgSW50UG9pbnQmKTsKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL21hYy9DbGlwYm9hcmRNYWMubW0KPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWFjL0NsaXBib2FyZE1hYy5tbQkocmV2aXNpb24gMTEy
ODQ1KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWFjL0NsaXBib2FyZE1hYy5tbQkod29y
a2luZyBjb3B5KQpAQCAtMTExLDE1ICsxMTEsMTUgQEAgc3RhdGljIFN0cmluZyB1dGlUeXBlRnJv
bUNvY29hVHlwZShjb25zdAogICAgIHJldHVybiBTdHJpbmcoKTsKIH0KIAotc3RhdGljIHZvaWQg
YWRkSFRNTENsaXBib2FyZFR5cGVzRm9yQ29jb2FUeXBlKEhhc2hTZXQ8U3RyaW5nPiYgcmVzdWx0
VHlwZXMsIGNvbnN0IFN0cmluZyYgY29jb2FUeXBlLCBjb25zdCBTdHJpbmcmIHBhc3RlYm9hcmRO
YW1lKQorc3RhdGljIHZvaWQgYWRkSFRNTENsaXBib2FyZFR5cGVzRm9yQ29jb2FUeXBlKFZlY3Rv
cjxTdHJpbmc+JiByZXN1bHRUeXBlcywgY29uc3QgU3RyaW5nJiBjb2NvYVR5cGUsIGNvbnN0IFN0
cmluZyYgcGFzdGVib2FyZE5hbWUpCiB7CiAgICAgLy8gVVRJIG1heSBub3QgZG8gdGhlc2Ugcmln
aHQsIHNvIG1ha2Ugc3VyZSB3ZSBnZXQgdGhlIHJpZ2h0LCBwcmVkaWN0YWJsZSByZXN1bHQKICAg
ICBpZiAoY29jb2FUeXBlID09IFN0cmluZyhOU1N0cmluZ1Bib2FyZFR5cGUpKSB7Ci0gICAgICAg
IHJlc3VsdFR5cGVzLmFkZCgidGV4dC9wbGFpbiIpOworICAgICAgICByZXN1bHRUeXBlcy5hcHBl
bmQoInRleHQvcGxhaW4iKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KICAgICBpZiAoY29jb2FU
eXBlID09IFN0cmluZyhOU1VSTFBib2FyZFR5cGUpKSB7Ci0gICAgICAgIHJlc3VsdFR5cGVzLmFk
ZCgidGV4dC91cmktbGlzdCIpOworICAgICAgICByZXN1bHRUeXBlcy5hcHBlbmQoInRleHQvdXJp
LWxpc3QiKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KICAgICBpZiAoY29jb2FUeXBlID09IFN0
cmluZyhOU0ZpbGVuYW1lc1Bib2FyZFR5cGUpKSB7CkBAIC0xMzEsMTggKzEzMSwxOCBAQCBzdGF0
aWMgdm9pZCBhZGRIVE1MQ2xpcGJvYXJkVHlwZXNGb3JDb2NvCiAgICAgICAgIGlmICghZmlsZUxp
c3QuaXNFbXB0eSgpKSB7CiAgICAgICAgICAgICAvLyBJdCBpcyB1bmtub3duIGlmIE5TRmlsZW5h
bWVzUGJvYXJkVHlwZSBhbHdheXMgaW1wbGllcyBOU1VSTFBib2FyZFR5cGUgaW4gQ29jb2EsCiAg
ICAgICAgICAgICAvLyBidXQgTlNGaWxlbmFtZXNQYm9hcmRUeXBlIHNob3VsZCBpbXBseSBib3Ro
ICd0ZXh0L3VyaS1saXN0JyBhbmQgJ0ZpbGVzJwotICAgICAgICAgICAgcmVzdWx0VHlwZXMuYWRk
KCJ0ZXh0L3VyaS1saXN0Iik7Ci0gICAgICAgICAgICByZXN1bHRUeXBlcy5hZGQoIkZpbGVzIik7
CisgICAgICAgICAgICByZXN1bHRUeXBlcy5hcHBlbmQoInRleHQvdXJpLWxpc3QiKTsKKyAgICAg
ICAgICAgIHJlc3VsdFR5cGVzLmFwcGVuZCgiRmlsZXMiKTsKICAgICAgICAgfQogICAgICAgICBy
ZXR1cm47CiAgICAgfQogICAgIFN0cmluZyB1dGlUeXBlID0gdXRpVHlwZUZyb21Db2NvYVR5cGUo
Y29jb2FUeXBlKTsKICAgICBpZiAoIXV0aVR5cGUuaXNFbXB0eSgpKSB7Ci0gICAgICAgIHJlc3Vs
dFR5cGVzLmFkZCh1dGlUeXBlKTsKKyAgICAgICAgcmVzdWx0VHlwZXMuYXBwZW5kKHV0aVR5cGUp
OwogICAgICAgICByZXR1cm47CiAgICAgfQogICAgIC8vIE5vIG1hcHBpbmcsIGp1c3QgcGFzcyB0
aGUgd2hvbGUgc3RyaW5nIHRob3VnaAotICAgIHJlc3VsdFR5cGVzLmFkZChjb2NvYVR5cGUpOwor
ICAgIHJlc3VsdFR5cGVzLmFwcGVuZChjb2NvYVR5cGUpOwogfQogCiB2b2lkIENsaXBib2FyZE1h
Yzo6Y2xlYXJEYXRhKGNvbnN0IFN0cmluZyYgdHlwZSkKQEAgLTI4MCwxMCArMjgwLDEwIEBAIGJv
b2wgQ2xpcGJvYXJkTWFjOjpzZXREYXRhKGNvbnN0IFN0cmluZyAKICAgICByZXR1cm4gZmFsc2U7
CiB9CiAKLUhhc2hTZXQ8U3RyaW5nPiBDbGlwYm9hcmRNYWM6OnR5cGVzKCkgY29uc3QKK1ZlY3Rv
cjxTdHJpbmc+IENsaXBib2FyZE1hYzo6dHlwZXMoKSBjb25zdAogewogICAgIGlmIChwb2xpY3ko
KSAhPSBDbGlwYm9hcmRSZWFkYWJsZSAmJiBwb2xpY3koKSAhPSBDbGlwYm9hcmRUeXBlc1JlYWRh
YmxlKQotICAgICAgICByZXR1cm4gSGFzaFNldDxTdHJpbmc+KCk7CisgICAgICAgIHJldHVybiBW
ZWN0b3I8U3RyaW5nPigpOwogCiAgICAgVmVjdG9yPFN0cmluZz4gdHlwZXM7CiAgICAgcGxhdGZv
cm1TdHJhdGVnaWVzKCktPnBhc3RlYm9hcmRTdHJhdGVneSgpLT5nZXRUeXBlcyh0eXBlcywgbV9w
YXN0ZWJvYXJkTmFtZSk7CkBAIC0yOTEsOSArMjkxLDkgQEAgSGFzaFNldDxTdHJpbmc+IENsaXBi
b2FyZE1hYzo6dHlwZXMoKSBjbwogICAgIC8vIEVuZm9yY2UgY2hhbmdlQ291bnQgb3Vyc2VsdmVz
IGZvciBzZWN1cml0eS4gIFdlIGNoZWNrIGFmdGVyIHJlYWRpbmcgaW5zdGVhZCBvZiBiZWZvcmUg
dG8gYmUKICAgICAvLyBzdXJlIGl0IGRvZXNuJ3QgY2hhbmdlIGJldHdlZW4gb3VyIHRlc3Rpbmcg
dGhlIGNoYW5nZSBjb3VudCBhbmQgYWNjZXNzaW5nIHRoZSBkYXRhLgogICAgIGlmIChtX2NoYW5n
ZUNvdW50ICE9IHBsYXRmb3JtU3RyYXRlZ2llcygpLT5wYXN0ZWJvYXJkU3RyYXRlZ3koKS0+Y2hh
bmdlQ291bnQobV9wYXN0ZWJvYXJkTmFtZSkpCi0gICAgICAgIHJldHVybiBIYXNoU2V0PFN0cmlu
Zz4oKTsKKyAgICAgICAgcmV0dXJuIFZlY3RvcjxTdHJpbmc+KCk7CiAKLSAgICBIYXNoU2V0PFN0
cmluZz4gcmVzdWx0OworICAgIFZlY3RvcjxTdHJpbmc+IHJlc3VsdDsKICAgICAvLyBGSVhNRTog
VGhpcyBsb29wIGNvdWxkIGJlIHNwbGl0IGludG8gdHdvIHN0YWdlcy4gT25lIHdoaWNoIGFkZHMg
YWxsIHRoZSBIVE1MNSBzcGVjaWZpZWQgdHlwZXMKICAgICAvLyBhbmQgYSBzZWNvbmQgd2hpY2gg
YWRkcyBhbGwgdGhlIGV4dHJhIHR5cGVzIGZyb20gdGhlIGNvY29hIGNsaXBib2FyZCAod2hpY2gg
aXMgTWFjLW9ubHkgYmVoYXZpb3IpLgogICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgdHlwZXMu
c2l6ZSgpOyBpKyspIHsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3F0L0NsaXBib2Fy
ZFF0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9xdC9DbGlwYm9h
cmRRdC5jcHAJKHJldmlzaW9uIDExMjg0NSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3F0
L0NsaXBib2FyZFF0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTgyLDE2ICsxODIsMTYgQEAgYm9v
bCBDbGlwYm9hcmRRdDo6c2V0RGF0YShjb25zdCBTdHJpbmcmIAogfQogCiAvLyBleHRlbnNpb25z
IGJleW9uZCBJRSdzIEFQSQotSGFzaFNldDxTdHJpbmc+IENsaXBib2FyZFF0Ojp0eXBlcygpIGNv
bnN0CitWZWN0b3I8U3RyaW5nPiBDbGlwYm9hcmRRdDo6dHlwZXMoKSBjb25zdAogewogICAgIGlm
IChwb2xpY3koKSAhPSBDbGlwYm9hcmRSZWFkYWJsZSAmJiBwb2xpY3koKSAhPSBDbGlwYm9hcmRU
eXBlc1JlYWRhYmxlKQotICAgICAgICByZXR1cm4gSGFzaFNldDxTdHJpbmc+KCk7CisgICAgICAg
IHJldHVybiBWZWN0b3I8U3RyaW5nPigpOwogCiAgICAgQVNTRVJUKG1fcmVhZGFibGVEYXRhKTsK
LSAgICBIYXNoU2V0PFN0cmluZz4gcmVzdWx0OworICAgIFZlY3RvcjxTdHJpbmc+IHJlc3VsdDsK
ICAgICBRU3RyaW5nTGlzdCBmb3JtYXRzID0gbV9yZWFkYWJsZURhdGEtPmZvcm1hdHMoKTsKICAg
ICBmb3IgKGludCBpID0gMDsgaSA8IGZvcm1hdHMuY291bnQoKTsgKytpKQotICAgICAgICByZXN1
bHQuYWRkKGZvcm1hdHMuYXQoaSkpOworICAgICAgICByZXN1bHQuYXBwZW5kKGZvcm1hdHMuYXQo
aSkpOwogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL3F0L0NsaXBib2FyZFF0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vcXQvQ2xpcGJvYXJkUXQuaAkocmV2aXNpb24gMTEyODQ1KQorKysgU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vcXQvQ2xpcGJvYXJkUXQuaAkod29ya2luZyBjb3B5KQpAQCAtNTcsNyArNTcsNyBA
QCBwdWJsaWM6CiAgICAgYm9vbCBzZXREYXRhKGNvbnN0IFN0cmluZyYgdHlwZSwgY29uc3QgU3Ry
aW5nJiBkYXRhKTsKIAogICAgIC8vIGV4dGVuc2lvbnMgYmV5b25kIElFJ3MgQVBJCi0gICAgdmly
dHVhbCBIYXNoU2V0PFN0cmluZz4gdHlwZXMoKSBjb25zdDsKKyAgICB2aXJ0dWFsIFZlY3RvcjxT
dHJpbmc+IHR5cGVzKCkgY29uc3Q7CiAgICAgdmlydHVhbCBQYXNzUmVmUHRyPEZpbGVMaXN0PiBm
aWxlcygpIGNvbnN0OwogCiAgICAgdm9pZCBzZXREcmFnSW1hZ2UoQ2FjaGVkSW1hZ2UqLCBjb25z
dCBJbnRQb2ludCYpOwpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vd2luL0NsaXBib2Fy
ZFdpbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vd2luL0NsaXBi
b2FyZFdpbi5jcHAJKHJldmlzaW9uIDExMjg0NSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L3dpbi9DbGlwYm9hcmRXaW4uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00ODQsMjQgKzQ4NCwyNCBA
QCBib29sIENsaXBib2FyZFdpbjo6c2V0RGF0YShjb25zdCBTdHJpbmcmCiAgICAgcmV0dXJuIGZh
bHNlOwogfQogCi1zdGF0aWMgdm9pZCBhZGRNaW1lVHlwZXNGb3JGb3JtYXQoSGFzaFNldDxTdHJp
bmc+JiByZXN1bHRzLCBjb25zdCBGT1JNQVRFVEMmIGZvcm1hdCkKK3N0YXRpYyB2b2lkIGFkZE1p
bWVUeXBlc0ZvckZvcm1hdChWZWN0b3I8U3RyaW5nPiYgcmVzdWx0cywgY29uc3QgRk9STUFURVRD
JiBmb3JtYXQpCiB7CiAgICAgLy8gVVJMIGFuZCBUZXh0IGFyZSBwcm92aWRlZCBmb3IgY29tcGF0
aWJpbGl0eSB3aXRoIElFJ3MgbW9kZWwKICAgICBpZiAoZm9ybWF0LmNmRm9ybWF0ID09IHVybEZv
cm1hdCgpLT5jZkZvcm1hdCB8fCBmb3JtYXQuY2ZGb3JtYXQgPT0gdXJsV0Zvcm1hdCgpLT5jZkZv
cm1hdCkgewotICAgICAgICByZXN1bHRzLmFkZCgiVVJMIik7Ci0gICAgICAgIHJlc3VsdHMuYWRk
KCJ0ZXh0L3VyaS1saXN0Iik7CisgICAgICAgIHJlc3VsdHMuYXBwZW5kKCJVUkwiKTsKKyAgICAg
ICAgcmVzdWx0cy5hcHBlbmQoInRleHQvdXJpLWxpc3QiKTsKICAgICB9CiAKICAgICBpZiAoZm9y
bWF0LmNmRm9ybWF0ID09IHBsYWluVGV4dFdGb3JtYXQoKS0+Y2ZGb3JtYXQgfHwgZm9ybWF0LmNm
Rm9ybWF0ID09IHBsYWluVGV4dEZvcm1hdCgpLT5jZkZvcm1hdCkgewotICAgICAgICByZXN1bHRz
LmFkZCgiVGV4dCIpOwotICAgICAgICByZXN1bHRzLmFkZCgidGV4dC9wbGFpbiIpOworICAgICAg
ICByZXN1bHRzLmFwcGVuZCgiVGV4dCIpOworICAgICAgICByZXN1bHRzLmFwcGVuZCgidGV4dC9w
bGFpbiIpOwogICAgIH0KIH0KIAogLy8gZXh0ZW5zaW9ucyBiZXlvbmQgSUUncyBBUEkKLUhhc2hT
ZXQ8U3RyaW5nPiBDbGlwYm9hcmRXaW46OnR5cGVzKCkgY29uc3QKK1ZlY3RvcjxTdHJpbmc+IENs
aXBib2FyZFdpbjo6dHlwZXMoKSBjb25zdAogeyAKLSAgICBIYXNoU2V0PFN0cmluZz4gcmVzdWx0
czsgCisgICAgVmVjdG9yPFN0cmluZz4gcmVzdWx0czsKICAgICBpZiAocG9saWN5KCkgIT0gQ2xp
cGJvYXJkUmVhZGFibGUgJiYgcG9saWN5KCkgIT0gQ2xpcGJvYXJkVHlwZXNSZWFkYWJsZSkKICAg
ICAgICAgcmV0dXJuIHJlc3VsdHM7CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3dp
bi9DbGlwYm9hcmRXaW4uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS93
aW4vQ2xpcGJvYXJkV2luLmgJKHJldmlzaW9uIDExMjg0NSkKKysrIFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL3dpbi9DbGlwYm9hcmRXaW4uaAkod29ya2luZyBjb3B5KQpAQCAtNjQsNyArNjQsNyBA
QCBwdWJsaWM6CiAgICAgYm9vbCBzZXREYXRhKGNvbnN0IFN0cmluZyYgdHlwZSwgY29uc3QgU3Ry
aW5nJiBkYXRhKTsKIAogICAgIC8vIGV4dGVuc2lvbnMgYmV5b25kIElFJ3MgQVBJCi0gICAgdmly
dHVhbCBIYXNoU2V0PFN0cmluZz4gdHlwZXMoKSBjb25zdDsKKyAgICB2aXJ0dWFsIFZlY3RvcjxT
dHJpbmc+IHR5cGVzKCkgY29uc3Q7CiAgICAgdmlydHVhbCBQYXNzUmVmUHRyPEZpbGVMaXN0PiBm
aWxlcygpIGNvbnN0OwogCiAgICAgdm9pZCBzZXREcmFnSW1hZ2UoQ2FjaGVkSW1hZ2UqLCBjb25z
dCBJbnRQb2ludCYpOwpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vd3gvQ2xpcGJvYXJk
V3guY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3d4L0NsaXBib2Fy
ZFd4LmNwcAkocmV2aXNpb24gMTEyODQ1KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vd3gv
Q2xpcGJvYXJkV3guY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03MCwxMCArNzAsMTAgQEAgYm9vbCBD
bGlwYm9hcmRXeDo6c2V0RGF0YShjb25zdCBTdHJpbmcmIAogfQogCiAvLyBleHRlbnNpb25zIGJl
eW9uZCBJRSdzIEFQSQotSGFzaFNldDxTdHJpbmc+IENsaXBib2FyZFd4Ojp0eXBlcygpIGNvbnN0
IAorVmVjdG9yPFN0cmluZz4gQ2xpcGJvYXJkV3g6OnR5cGVzKCkgY29uc3QKIHsKICAgICBub3RJ
bXBsZW1lbnRlZCgpOwotICAgIEhhc2hTZXQ8U3RyaW5nPiByZXN1bHQ7CisgICAgVmVjdG9yPFN0
cmluZz4gcmVzdWx0OwogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL3d4L0NsaXBib2FyZFd4LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vd3gvQ2xpcGJvYXJkV3guaAkocmV2aXNpb24gMTEyODQ1KQorKysgU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vd3gvQ2xpcGJvYXJkV3guaAkod29ya2luZyBjb3B5KQpAQCAtNDYs
NyArNDYsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIGJvb2wgc2V0RGF0YShjb25z
dCBTdHJpbmcmIHR5cGUsIGNvbnN0IFN0cmluZyYgZGF0YSk7CiAgICAgCiAgICAgICAgIC8vIGV4
dGVuc2lvbnMgYmV5b25kIElFJ3MgQVBJCi0gICAgICAgIHZpcnR1YWwgSGFzaFNldDxTdHJpbmc+
IHR5cGVzKCkgY29uc3Q7CisgICAgICAgIHZpcnR1YWwgVmVjdG9yPFN0cmluZz4gdHlwZXMoKSBj
b25zdDsKICAgICAgICAgdmlydHVhbCBQYXNzUmVmUHRyPEZpbGVMaXN0PiBmaWxlcygpIGNvbnN0
OwogICAgIAogICAgICAgICBJbnRQb2ludCBkcmFnTG9jYXRpb24oKSBjb25zdDsK
</data>
<flag name="review"
          id="139749"
          type_id="1"
          status="-"
          setter="eric"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>144017</attachid>
            <date>2012-05-25 02:36:51 -0700</date>
            <delta_ts>2013-03-01 10:39:46 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>clipboard_001.diff</filename>
            <type>text/plain</type>
            <size>21322</size>
            <attacher name="Vineet Chaudhary (vineetc)">code.vineet</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDExODQ5OSkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDYxIEBACisyMDEyLTA1LTI1ICBWaW5lZXQg
Q2hhdWRoYXJ5ICA8dmluZWV0LmNoYXVkaGFyeUBtb3Rvcm9sYS5jb20+CisKKyAgICAgICAgQ29u
c2lkZXIgcmVwbGFjaW5nIHJldHVybiB0eXBlIG9mIENsaXBib2FyZDo6dHlwZXMoKSBmcm9tIEhh
c2hTZXQ8U3RyaW5nPiB0byBWZWN0b3I8U3RyaW5nPi4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTgyODg4CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9C
T0RZIChPT1BTISkuCisKKyAgICAgICAgQXMgcGFydCBvZiByZW1vdmluZyBjdXN0b20gYmluZGlu
Z3Mgb2YgdHlwZXMgQXJyYXkgQ2xpcGJvYXJkLmlkbCBhbHNvIG5lZWRzIHRvIGhhdmUKKyAgICAg
ICAgbW9kaWZpZWQgdG8gaGF2ZSBzZXF1ZW5jZTxTdHJpbmc+LCBidXQgYWNjb3JkaW5nIHRvIGN1
cnJlbnQgaW1wbGVtZW50YXRpb24gb2YgdGhlIENsaXBib2FyZDo6dHlwZXMoKQorICAgICAgICBp
dCByZXR1cm5zIEhhc2hTZXQ8U3RyaW5nPi4gSW4gb3JkZXIgdG8gcmVtb3ZlIHRoZSBjdXN0b20g
YmluZGluZ3MgaXQgc2hvdWxkIG9mIHR5cGUgVmVjdG9yPFN0cmluZz4uCisKKyAgICAgICAgTm8g
bmV3IHRlc3RzLiBFeGl4dGluZyB0ZXN0IHNob3VsZCBwYXNzIHdpdGggdGhpcyBjaGFuZ2UgYXMg
bm8gYmVoYXZvdXJhbCBjaGFuZ2VzLgorCisgICAgICAgICogYmluZGluZ3MvanMvSlNDbGlwYm9h
cmRDdXN0b20uY3BwOiBSZXBsYWNlIGRhdGEgdHlwZSBmcm9tIEhhc2hTZXQ8PiB0byBWZWN0b3I8
Pi4KKyAgICAgICAgKFdlYkNvcmU6OkpTQ2xpcGJvYXJkOjp0eXBlcyk6CisgICAgICAgICogYmlu
ZGluZ3MvdjgvY3VzdG9tL1Y4Q2xpcGJvYXJkQ3VzdG9tLmNwcDogRGl0dG8uCisgICAgICAgIChX
ZWJDb3JlOjpWOENsaXBib2FyZDo6dHlwZXNBY2Nlc3NvckdldHRlcik6CisgICAgICAgICogZG9t
L0NsaXBib2FyZC5oOiBEaXR0by4KKyAgICAgICAgKENsaXBib2FyZCk6CisgICAgICAgICogcGxh
dGZvcm0vYmxhY2tiZXJyeS9DbGlwYm9hcmRCbGFja0JlcnJ5LmNwcDogRGl0dG8uCisgICAgICAg
IChXZWJDb3JlOjpDbGlwYm9hcmRCbGFja0JlcnJ5Ojp0eXBlcyk6CisgICAgICAgICogcGxhdGZv
cm0vYmxhY2tiZXJyeS9DbGlwYm9hcmRCbGFja0JlcnJ5Lmg6IERpdHRvLgorICAgICAgICAoQ2xp
cGJvYXJkQmxhY2tCZXJyeSk6CisgICAgICAgICogcGxhdGZvcm0vY2hyb21pdW0vQ2hyb21pdW1E
YXRhT2JqZWN0LmNwcDogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpDaHJvbWl1bURhdGFPYmpl
Y3Q6OnR5cGVzKToKKyAgICAgICAgKiBwbGF0Zm9ybS9jaHJvbWl1bS9DaHJvbWl1bURhdGFPYmpl
Y3QuaDogRGl0dG8uCisgICAgICAgIChDaHJvbWl1bURhdGFPYmplY3QpOgorICAgICAgICAqIHBs
YXRmb3JtL2Nocm9taXVtL0NsaXBib2FyZENocm9taXVtLmNwcDogRGl0dG8uCisgICAgICAgIChX
ZWJDb3JlOjpDbGlwYm9hcmRDaHJvbWl1bTo6dHlwZXMpOgorICAgICAgICAqIHBsYXRmb3JtL2No
cm9taXVtL0NsaXBib2FyZENocm9taXVtLmg6IERpdHRvLgorICAgICAgICAoQ2xpcGJvYXJkQ2hy
b21pdW0pOgorICAgICAgICAqIHBsYXRmb3JtL2VmbC9DbGlwYm9hcmRFZmwuY3BwOiBEaXR0by4K
KyAgICAgICAgKFdlYkNvcmU6OkNsaXBib2FyZEVmbDo6dHlwZXMpOgorICAgICAgICAqIHBsYXRm
b3JtL2VmbC9DbGlwYm9hcmRFZmwuaDogRGl0dG8uCisgICAgICAgIChDbGlwYm9hcmRFZmwpOgor
ICAgICAgICAqIHBsYXRmb3JtL2d0ay9DbGlwYm9hcmRHdGsuY3BwOiBEaXR0by4KKyAgICAgICAg
KFdlYkNvcmU6OkNsaXBib2FyZEd0azo6dHlwZXMpOgorICAgICAgICAqIHBsYXRmb3JtL2d0ay9D
bGlwYm9hcmRHdGsuaDogRGl0dG8uCisgICAgICAgIChDbGlwYm9hcmRHdGspOgorICAgICAgICAq
IHBsYXRmb3JtL21hYy9DbGlwYm9hcmRNYWMuaDogRGl0dG8uCisgICAgICAgIChDbGlwYm9hcmRN
YWMpOgorICAgICAgICAqIHBsYXRmb3JtL21hYy9DbGlwYm9hcmRNYWMubW06IERpdHRvLgorICAg
ICAgICAoV2ViQ29yZTo6YWRkSFRNTENsaXBib2FyZFR5cGVzRm9yQ29jb2FUeXBlKToKKyAgICAg
ICAgKFdlYkNvcmU6OkNsaXBib2FyZE1hYzo6dHlwZXMpOgorICAgICAgICAqIHBsYXRmb3JtL3F0
L0NsaXBib2FyZFF0LmNwcDogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpDbGlwYm9hcmRRdDo6
dHlwZXMpOgorICAgICAgICAqIHBsYXRmb3JtL3F0L0NsaXBib2FyZFF0Lmg6IERpdHRvLgorICAg
ICAgICAoQ2xpcGJvYXJkUXQpOgorICAgICAgICAqIHBsYXRmb3JtL3dpbi9DbGlwYm9hcmRXaW4u
Y3BwOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OmFkZE1pbWVUeXBlc0ZvckZvcm1hdCk6Cisg
ICAgICAgIChXZWJDb3JlOjpDbGlwYm9hcmRXaW46OnR5cGVzKToKKyAgICAgICAgKiBwbGF0Zm9y
bS93aW4vQ2xpcGJvYXJkV2luLmg6IERpdHRvLgorICAgICAgICAoQ2xpcGJvYXJkV2luKToKKyAg
ICAgICAgKiBwbGF0Zm9ybS93eC9DbGlwYm9hcmRXeC5jcHA6IERpdHRvLgorICAgICAgICAoV2Vi
Q29yZTo6Q2xpcGJvYXJkV3g6OnR5cGVzKToKKyAgICAgICAgKiBwbGF0Zm9ybS93eC9DbGlwYm9h
cmRXeC5oOiBEaXR0by4KKyAgICAgICAgKENsaXBib2FyZFd4KToKKwogMjAxMi0wNS0yNCAgS2lu
dWtvIFlhc3VkYSAgPGtpbnVrb0BjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgW2Nocm9taXVtXSBE
YXRhVHJhbnNmZXJJdGVtLndlYmtpdEdldEFzRW50cnkoKSBzaG91bGRuJ3QgYmUgZXhwb3NlZCB3
aXRob3V0IGZsYWcgeWV0CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0NsaXBi
b2FyZEN1c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMv
SlNDbGlwYm9hcmRDdXN0b20uY3BwCShyZXZpc2lvbiAxMTg0ODQpCisrKyBTb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9qcy9KU0NsaXBib2FyZEN1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTUy
LDEzICs1MiwxMyBAQCBKU1ZhbHVlIEpTQ2xpcGJvYXJkOjp0eXBlcyhFeGVjU3RhdGUqIGV4CiB7
CiAgICAgQ2xpcGJvYXJkKiBjbGlwYm9hcmQgPSBpbXBsKCk7CiAKLSAgICBIYXNoU2V0PFN0cmlu
Zz4gdHlwZXMgPSBjbGlwYm9hcmQtPnR5cGVzKCk7CisgICAgVmVjdG9yPFN0cmluZz4gdHlwZXMg
PSBjbGlwYm9hcmQtPnR5cGVzKCk7CiAgICAgaWYgKHR5cGVzLmlzRW1wdHkoKSkKICAgICAgICAg
cmV0dXJuIGpzTnVsbCgpOwogCiAgICAgTWFya2VkQXJndW1lbnRCdWZmZXIgbGlzdDsKLSAgICBI
YXNoU2V0PFN0cmluZz46OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IHR5cGVzLmVuZCgpOwotICAgIGZv
ciAoSGFzaFNldDxTdHJpbmc+Ojpjb25zdF9pdGVyYXRvciBpdCA9IHR5cGVzLmJlZ2luKCk7IGl0
ICE9IGVuZDsgKytpdCkKKyAgICBWZWN0b3I8U3RyaW5nPjo6Y29uc3RfaXRlcmF0b3IgZW5kID0g
dHlwZXMuZW5kKCk7CisgICAgZm9yIChWZWN0b3I8U3RyaW5nPjo6Y29uc3RfaXRlcmF0b3IgaXQg
PSB0eXBlcy5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpCiAgICAgICAgIGxpc3QuYXBwZW5kKGpz
U3RyaW5nKGV4ZWMsIHN0cmluZ1RvVVN0cmluZygqaXQpKSk7CiAgICAgcmV0dXJuIGNvbnN0cnVj
dEFycmF5KGV4ZWMsIGdsb2JhbE9iamVjdCgpLCBsaXN0KTsKIH0KSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOENsaXBib2FyZEN1c3RvbS5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4Q2xpcGJvYXJkQ3VzdG9tLmNw
cAkocmV2aXNpb24gMTE4NDg0KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9t
L1Y4Q2xpcGJvYXJkQ3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDksMTQgKzQ5LDE0IEBA
IHY4OjpIYW5kbGU8djg6OlZhbHVlPiBWOENsaXBib2FyZDo6dHlwZXMKICAgICBJTkNfU1RBVFMo
IkRPTS5DbGlwYm9hcmQudHlwZXMoKSIpOwogICAgIENsaXBib2FyZCogY2xpcGJvYXJkID0gVjhD
bGlwYm9hcmQ6OnRvTmF0aXZlKGluZm8uSG9sZGVyKCkpOwogCi0gICAgSGFzaFNldDxTdHJpbmc+
IHR5cGVzID0gY2xpcGJvYXJkLT50eXBlcygpOworICAgIFZlY3RvcjxTdHJpbmc+IHR5cGVzID0g
Y2xpcGJvYXJkLT50eXBlcygpOwogICAgIGlmICh0eXBlcy5pc0VtcHR5KCkpCiAgICAgICAgIHJl
dHVybiB2ODo6TnVsbCgpOwogCiAgICAgdjg6OkxvY2FsPHY4OjpBcnJheT4gcmVzdWx0ID0gdjg6
OkFycmF5OjpOZXcodHlwZXMuc2l6ZSgpKTsKLSAgICBIYXNoU2V0PFN0cmluZz46OmNvbnN0X2l0
ZXJhdG9yIGVuZCA9IHR5cGVzLmVuZCgpOworICAgIFZlY3RvcjxTdHJpbmc+Ojpjb25zdF9pdGVy
YXRvciBlbmQgPSB0eXBlcy5lbmQoKTsKICAgICBpbnQgaW5kZXggPSAwOwotICAgIGZvciAoSGFz
aFNldDxTdHJpbmc+Ojpjb25zdF9pdGVyYXRvciBpdCA9IHR5cGVzLmJlZ2luKCk7IGl0ICE9IGVu
ZDsgKytpdCwgKytpbmRleCkKKyAgICBmb3IgKFZlY3RvcjxTdHJpbmc+Ojpjb25zdF9pdGVyYXRv
ciBpdCA9IHR5cGVzLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCwgKytpbmRleCkKICAgICAgICAg
cmVzdWx0LT5TZXQodjg6OkludGVnZXI6Ok5ldyhpbmRleCksIHY4U3RyaW5nKCppdCkpOwogCiAg
ICAgcmV0dXJuIHJlc3VsdDsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2RvbS9DbGlwYm9hcmQuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9kb20vQ2xpcGJvYXJkLmgJKHJldmlzaW9uIDEx
ODQ4NCkKKysrIFNvdXJjZS9XZWJDb3JlL2RvbS9DbGlwYm9hcmQuaAkod29ya2luZyBjb3B5KQpA
QCAtNjYsNyArNjYsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIHZpcnR1YWwgYm9v
bCBzZXREYXRhKGNvbnN0IFN0cmluZyYgdHlwZSwgY29uc3QgU3RyaW5nJiBkYXRhKSA9IDA7CiAg
ICAgCiAgICAgICAgIC8vIGV4dGVuc2lvbnMgYmV5b25kIElFJ3MgQVBJCi0gICAgICAgIHZpcnR1
YWwgSGFzaFNldDxTdHJpbmc+IHR5cGVzKCkgY29uc3QgPSAwOworICAgICAgICB2aXJ0dWFsIFZl
Y3RvcjxTdHJpbmc+IHR5cGVzKCkgY29uc3QgPSAwOwogICAgICAgICB2aXJ0dWFsIFBhc3NSZWZQ
dHI8RmlsZUxpc3Q+IGZpbGVzKCkgY29uc3QgPSAwOwogCiAgICAgICAgIEludFBvaW50IGRyYWdM
b2NhdGlvbigpIGNvbnN0IHsgcmV0dXJuIG1fZHJhZ0xvYzsgfQpJbmRleDogU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vYmxhY2tiZXJyeS9DbGlwYm9hcmRCbGFja0JlcnJ5LmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ibGFja2JlcnJ5L0NsaXBib2FyZEJsYWNrQmVy
cnkuY3BwCShyZXZpc2lvbiAxMTg0ODQpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ibGFj
a2JlcnJ5L0NsaXBib2FyZEJsYWNrQmVycnkuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03OCwxNiAr
NzgsMTYgQEAgYm9vbCBDbGlwYm9hcmRCbGFja0JlcnJ5OjpzZXREYXRhKGNvbnN0CiAgICAgcmV0
dXJuIHRydWU7CiB9CiAKLUhhc2hTZXQ8U3RyaW5nPiBDbGlwYm9hcmRCbGFja0JlcnJ5Ojp0eXBl
cygpIGNvbnN0CitWZWN0b3I8U3RyaW5nPiBDbGlwYm9hcmRCbGFja0JlcnJ5Ojp0eXBlcygpIGNv
bnN0CiB7CiAgICAgaWYgKHBvbGljeSgpICE9IENsaXBib2FyZFJlYWRhYmxlICYmIHBvbGljeSgp
ICE9IENsaXBib2FyZFR5cGVzUmVhZGFibGUpCi0gICAgICAgIHJldHVybiBIYXNoU2V0PFN0cmlu
Zz4oKTsKKyAgICAgICAgcmV0dXJuIFZlY3RvcjxTdHJpbmc+KCk7CiAKICAgICAvLyBXZSB1c2Ug
aGFyZGNvZGVkIGxpc3QgaGVyZSBzaW5jZSB0aGVyZSBzZWVtcyB0byBiZSBubyBBUEkgdG8gZ2V0
IHRoZSBsaXN0LgotICAgIEhhc2hTZXQ8U3RyaW5nPiByZXQ7Ci0gICAgcmV0LmFkZCgidGV4dC9w
bGFpbiIpOwotICAgIHJldC5hZGQoInRleHQvaHRtbCIpOwotICAgIHJldC5hZGQoInRleHQvdXJs
Iik7CisgICAgVmVjdG9yPFN0cmluZz4gcmV0OworICAgIHJldC5hcHBlbmQoInRleHQvcGxhaW4i
KTsKKyAgICByZXQuYXBwZW5kKCJ0ZXh0L2h0bWwiKTsKKyAgICByZXQuYXBwZW5kKCJ0ZXh0L3Vy
bCIpOwogICAgIHJldHVybiByZXQ7CiB9CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2JsYWNrYmVycnkvQ2xpcGJvYXJkQmxhY2tCZXJyeS5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2JsYWNrYmVycnkvQ2xpcGJvYXJkQmxhY2tCZXJyeS5oCShyZXZpc2lv
biAxMTg0ODQpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ibGFja2JlcnJ5L0NsaXBib2Fy
ZEJsYWNrQmVycnkuaAkod29ya2luZyBjb3B5KQpAQCAtMzksNyArMzksNyBAQCBwdWJsaWM6CiAg
ICAgYm9vbCBzZXREYXRhKGNvbnN0IFN0cmluZyYgdHlwZSwgY29uc3QgU3RyaW5nJiBkYXRhKTsK
IAogICAgIC8vIGV4dGVuc2lvbnMgYmV5b25kIElFJ3MgQVBJCi0gICAgdmlydHVhbCBIYXNoU2V0
PFN0cmluZz4gdHlwZXMoKSBjb25zdDsKKyAgICB2aXJ0dWFsIFZlY3RvcjxTdHJpbmc+IHR5cGVz
KCkgY29uc3Q7CiAgICAgdmlydHVhbCBQYXNzUmVmUHRyPEZpbGVMaXN0PiBmaWxlcygpIGNvbnN0
OwogICAgIHZpcnR1YWwgRHJhZ0ltYWdlUmVmIGNyZWF0ZURyYWdJbWFnZShJbnRQb2ludCYpIGNv
bnN0OwogICAgIHZpcnR1YWwgdm9pZCBkZWNsYXJlQW5kV3JpdGVEcmFnSW1hZ2UoRWxlbWVudCos
IGNvbnN0IEtVUkwmLCBjb25zdCBTdHJpbmcmIHRpdGxlLCBGcmFtZSopOwpJbmRleDogU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vY2hyb21pdW0vQ2hyb21pdW1EYXRhT2JqZWN0LmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jaHJvbWl1bS9DaHJvbWl1bURhdGFPYmpl
Y3QuY3BwCShyZXZpc2lvbiAxMTg0ODQpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jaHJv
bWl1bS9DaHJvbWl1bURhdGFPYmplY3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMjEsMjAgKzEy
MSwyMCBAQCB2b2lkIENocm9taXVtRGF0YU9iamVjdDo6Y2xlYXJBbGxFeGNlcHRGCiAgICAgfQog
fQogCi1IYXNoU2V0PFN0cmluZz4gQ2hyb21pdW1EYXRhT2JqZWN0Ojp0eXBlcygpIGNvbnN0CitW
ZWN0b3I8U3RyaW5nPiBDaHJvbWl1bURhdGFPYmplY3Q6OnR5cGVzKCkgY29uc3QKIHsKLSAgICBI
YXNoU2V0PFN0cmluZz4gcmVzdWx0czsKKyAgICBWZWN0b3I8U3RyaW5nPiByZXN1bHRzOwogICAg
IGJvb2wgY29udGFpbnNGaWxlcyA9IGZhbHNlOwogICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwg
bV9pdGVtTGlzdC5zaXplKCk7ICsraSkgewogICAgICAgICBpZiAobV9pdGVtTGlzdFtpXS0+a2lu
ZCgpID09IERhdGFUcmFuc2Zlckl0ZW06OmtpbmRTdHJpbmcpCi0gICAgICAgICAgICByZXN1bHRz
LmFkZChtX2l0ZW1MaXN0W2ldLT50eXBlKCkpOworICAgICAgICAgICAgcmVzdWx0cy5hcHBlbmQo
bV9pdGVtTGlzdFtpXS0+dHlwZSgpKTsKICAgICAgICAgZWxzZSBpZiAobV9pdGVtTGlzdFtpXS0+
a2luZCgpID09IERhdGFUcmFuc2Zlckl0ZW06OmtpbmRGaWxlKQogICAgICAgICAgICAgY29udGFp
bnNGaWxlcyA9IHRydWU7CiAgICAgICAgIGVsc2UKICAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVB
Q0hFRCgpOwogICAgIH0KICAgICBpZiAoY29udGFpbnNGaWxlcykKLSAgICAgICAgcmVzdWx0cy5h
ZGQobWltZVR5cGVGaWxlcyk7CisgICAgICAgIHJlc3VsdHMuYXBwZW5kKG1pbWVUeXBlRmlsZXMp
OwogICAgIHJldHVybiByZXN1bHRzOwogfQogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9jaHJvbWl1bS9DaHJvbWl1bURhdGFPYmplY3QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9jaHJvbWl1bS9DaHJvbWl1bURhdGFPYmplY3QuaAkocmV2aXNpb24gMTE4
NDg0KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY2hyb21pdW0vQ2hyb21pdW1EYXRhT2Jq
ZWN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTY5LDcgKzY5LDcgQEAgcHVibGljOgogICAgIHZvaWQg
Y2xlYXJEYXRhKGNvbnN0IFN0cmluZyYgdHlwZSk7CiAgICAgdm9pZCBjbGVhckFsbEV4Y2VwdEZp
bGVzKCk7CiAKLSAgICBIYXNoU2V0PFN0cmluZz4gdHlwZXMoKSBjb25zdDsKKyAgICBWZWN0b3I8
U3RyaW5nPiB0eXBlcygpIGNvbnN0OwogICAgIFN0cmluZyBnZXREYXRhKGNvbnN0IFN0cmluZyYg
dHlwZSkgY29uc3Q7CiAgICAgYm9vbCBzZXREYXRhKGNvbnN0IFN0cmluZyYgdHlwZSwgY29uc3Qg
U3RyaW5nJiBkYXRhKTsKIApJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY2hyb21pdW0v
Q2xpcGJvYXJkQ2hyb21pdW0uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2Nocm9taXVtL0NsaXBib2FyZENocm9taXVtLmNwcAkocmV2aXNpb24gMTE4NDg0KQorKysg
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY2hyb21pdW0vQ2xpcGJvYXJkQ2hyb21pdW0uY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0yOTUsMTAgKzI5NSwxMCBAQCBib29sIENsaXBib2FyZENocm9taXVt
OjpzZXREYXRhKGNvbnN0IFN0CiB9CiAKIC8vIGV4dGVuc2lvbnMgYmV5b25kIElFJ3MgQVBJCi1I
YXNoU2V0PFN0cmluZz4gQ2xpcGJvYXJkQ2hyb21pdW06OnR5cGVzKCkgY29uc3QKK1ZlY3RvcjxT
dHJpbmc+IENsaXBib2FyZENocm9taXVtOjp0eXBlcygpIGNvbnN0CiB7CiAgICAgaWYgKHBvbGlj
eSgpICE9IENsaXBib2FyZFJlYWRhYmxlICYmIHBvbGljeSgpICE9IENsaXBib2FyZFR5cGVzUmVh
ZGFibGUpCi0gICAgICAgIHJldHVybiBIYXNoU2V0PFN0cmluZz4oKTsKKyAgICAgICAgcmV0dXJu
IFZlY3RvcjxTdHJpbmc+KCk7CiAKICAgICByZXR1cm4gbV9kYXRhT2JqZWN0LT50eXBlcygpOwog
fQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY2hyb21pdW0vQ2xpcGJvYXJkQ2hyb21p
dW0uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jaHJvbWl1bS9DbGlw
Ym9hcmRDaHJvbWl1bS5oCShyZXZpc2lvbiAxMTg0ODQpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9jaHJvbWl1bS9DbGlwYm9hcmRDaHJvbWl1bS5oCSh3b3JraW5nIGNvcHkpCkBAIC04NCw3
ICs4NCw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgYm9vbCBwbGF0Zm9ybUNsaXBi
b2FyZENoYW5nZWQoKSBjb25zdDsKIAogICAgICAgICAvLyBleHRlbnNpb25zIGJleW9uZCBJRSdz
IEFQSQotICAgICAgICB2aXJ0dWFsIEhhc2hTZXQ8U3RyaW5nPiB0eXBlcygpIGNvbnN0OworICAg
ICAgICB2aXJ0dWFsIFZlY3RvcjxTdHJpbmc+IHR5cGVzKCkgY29uc3Q7CiAgICAgICAgIHZpcnR1
YWwgUGFzc1JlZlB0cjxGaWxlTGlzdD4gZmlsZXMoKSBjb25zdDsKIAogICAgICAgICB2b2lkIHNl
dERyYWdJbWFnZShDYWNoZWRJbWFnZSosIGNvbnN0IEludFBvaW50Jik7CkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9lZmwvQ2xpcGJvYXJkRWZsLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9lZmwvQ2xpcGJvYXJkRWZsLmNwcAkocmV2aXNpb24gMTE4NDg0
KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZWZsL0NsaXBib2FyZEVmbC5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTc2LDEwICs3NiwxMCBAQCBib29sIENsaXBib2FyZEVmbDo6c2V0RGF0YShj
b25zdCBTdHJpbmcmCiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi1IYXNoU2V0PFN0cmluZz4gQ2xp
cGJvYXJkRWZsOjp0eXBlcygpIGNvbnN0CitWZWN0b3I8U3RyaW5nPiBDbGlwYm9hcmRFZmw6OnR5
cGVzKCkgY29uc3QKIHsKICAgICBub3RJbXBsZW1lbnRlZCgpOwotICAgIHJldHVybiBIYXNoU2V0
PFN0cmluZz4oKTsKKyAgICByZXR1cm4gVmVjdG9yPFN0cmluZz4oKTsKIH0KIAogUGFzc1JlZlB0
cjxGaWxlTGlzdD4gQ2xpcGJvYXJkRWZsOjpmaWxlcygpIGNvbnN0CkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9lZmwvQ2xpcGJvYXJkRWZsLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZWZsL0NsaXBib2FyZEVmbC5oCShyZXZpc2lvbiAxMTg0ODQpCisrKyBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9lZmwvQ2xpcGJvYXJkRWZsLmgJKHdvcmtpbmcgY29weSkK
QEAgLTM5LDcgKzM5LDcgQEAgcHVibGljOgogICAgIFN0cmluZyBnZXREYXRhKGNvbnN0IFN0cmlu
ZyYpIGNvbnN0OwogICAgIGJvb2wgc2V0RGF0YShjb25zdCBTdHJpbmcmLCBjb25zdCBTdHJpbmcm
KTsKIAotICAgIEhhc2hTZXQ8U3RyaW5nPiB0eXBlcygpIGNvbnN0OworICAgIFZlY3RvcjxTdHJp
bmc+IHR5cGVzKCkgY29uc3Q7CiAgICAgdmlydHVhbCBQYXNzUmVmUHRyPEZpbGVMaXN0PiBmaWxl
cygpIGNvbnN0OwogCiAgICAgSW50UG9pbnQgZHJhZ0xvY2F0aW9uKCkgY29uc3Q7CkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvQ2xpcGJvYXJkR3RrLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvQ2xpcGJvYXJkR3RrLmNwcAkocmV2aXNpb24g
MTE4NDg0KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL0NsaXBib2FyZEd0ay5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTE4NCwzMSArMTg0LDMxIEBAIGJvb2wgQ2xpcGJvYXJkR3RrOjpz
ZXREYXRhKGNvbnN0IFN0cmluZyYKICAgICByZXR1cm4gc3VjY2VzczsKIH0KIAotSGFzaFNldDxT
dHJpbmc+IENsaXBib2FyZEd0azo6dHlwZXMoKSBjb25zdAorVmVjdG9yPFN0cmluZz4gQ2xpcGJv
YXJkR3RrOjp0eXBlcygpIGNvbnN0CiB7CiAgICAgaWYgKHBvbGljeSgpICE9IENsaXBib2FyZFJl
YWRhYmxlICYmIHBvbGljeSgpICE9IENsaXBib2FyZFR5cGVzUmVhZGFibGUpCi0gICAgICAgIHJl
dHVybiBIYXNoU2V0PFN0cmluZz4oKTsKKyAgICAgICAgcmV0dXJuIFZlY3RvcjxTdHJpbmc+KCk7
CiAKICAgICBpZiAobV9jbGlwYm9hcmQpCiAgICAgICAgIFBhc3RlYm9hcmRIZWxwZXI6OmRlZmF1
bHRQYXN0ZWJvYXJkSGVscGVyKCktPmdldENsaXBib2FyZENvbnRlbnRzKG1fY2xpcGJvYXJkKTsK
IAotICAgIEhhc2hTZXQ8U3RyaW5nPiB0eXBlczsKKyAgICBWZWN0b3I8U3RyaW5nPiB0eXBlczsK
ICAgICBpZiAobV9kYXRhT2JqZWN0LT5oYXNUZXh0KCkpIHsKLSAgICAgICAgdHlwZXMuYWRkKCJ0
ZXh0L3BsYWluIik7Ci0gICAgICAgIHR5cGVzLmFkZCgiVGV4dCIpOwotICAgICAgICB0eXBlcy5h
ZGQoInRleHQiKTsKKyAgICAgICAgdHlwZXMuYXBwZW5kKCJ0ZXh0L3BsYWluIik7CisgICAgICAg
IHR5cGVzLmFwcGVuZCgiVGV4dCIpOworICAgICAgICB0eXBlcy5hcHBlbmQoInRleHQiKTsKICAg
ICB9CiAKICAgICBpZiAobV9kYXRhT2JqZWN0LT5oYXNNYXJrdXAoKSkKLSAgICAgICAgdHlwZXMu
YWRkKCJ0ZXh0L2h0bWwiKTsKKyAgICAgICAgdHlwZXMuYXBwZW5kKCJ0ZXh0L2h0bWwiKTsKIAog
ICAgIGlmIChtX2RhdGFPYmplY3QtPmhhc1VSSUxpc3QoKSkgewotICAgICAgICB0eXBlcy5hZGQo
InRleHQvdXJpLWxpc3QiKTsKLSAgICAgICAgdHlwZXMuYWRkKCJVUkwiKTsKKyAgICAgICAgdHlw
ZXMuYXBwZW5kKCJ0ZXh0L3VyaS1saXN0Iik7CisgICAgICAgIHR5cGVzLmFwcGVuZCgiVVJMIik7
CiAgICAgfQogCiAgICAgaWYgKG1fZGF0YU9iamVjdC0+aGFzRmlsZW5hbWVzKCkpCi0gICAgICAg
IHR5cGVzLmFkZCgiRmlsZXMiKTsKKyAgICAgICAgdHlwZXMuYXBwZW5kKCJGaWxlcyIpOwogCiAg
ICAgcmV0dXJuIHR5cGVzOwogfQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL0Ns
aXBib2FyZEd0ay5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9D
bGlwYm9hcmRHdGsuaAkocmV2aXNpb24gMTE4NDg0KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3RrL0NsaXBib2FyZEd0ay5oCSh3b3JraW5nIGNvcHkpCkBAIC01Nyw3ICs1Nyw3IEBAIG5h
bWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgU3RyaW5nIGdldERhdGEoY29uc3QgU3RyaW5nJikg
Y29uc3Q7CiAgICAgICAgIGJvb2wgc2V0RGF0YShjb25zdCBTdHJpbmcmLCBjb25zdCBTdHJpbmcm
KTsKIAotICAgICAgICB2aXJ0dWFsIEhhc2hTZXQ8U3RyaW5nPiB0eXBlcygpIGNvbnN0OworICAg
ICAgICB2aXJ0dWFsIFZlY3RvcjxTdHJpbmc+IHR5cGVzKCkgY29uc3Q7CiAgICAgICAgIHZpcnR1
YWwgUGFzc1JlZlB0cjxGaWxlTGlzdD4gZmlsZXMoKSBjb25zdDsKIAogICAgICAgICB2b2lkIHNl
dERyYWdJbWFnZShDYWNoZWRJbWFnZSosIGNvbnN0IEludFBvaW50Jik7CkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9tYWMvQ2xpcGJvYXJkTWFjLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vbWFjL0NsaXBib2FyZE1hYy5oCShyZXZpc2lvbiAxMTg0ODQpCisr
KyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tYWMvQ2xpcGJvYXJkTWFjLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTYxLDcgKzYxLDcgQEAgcHVibGljOgogICAgIHZpcnR1YWwgYm9vbCBoYXNEYXRhKCk7
CiAgICAgCiAgICAgLy8gZXh0ZW5zaW9ucyBiZXlvbmQgSUUncyBBUEkKLSAgICB2aXJ0dWFsIEhh
c2hTZXQ8U3RyaW5nPiB0eXBlcygpIGNvbnN0OworICAgIHZpcnR1YWwgVmVjdG9yPFN0cmluZz4g
dHlwZXMoKSBjb25zdDsKICAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8RmlsZUxpc3Q+IGZpbGVzKCkg
Y29uc3Q7CiAKICAgICB2b2lkIHNldERyYWdJbWFnZShDYWNoZWRJbWFnZSosIGNvbnN0IEludFBv
aW50Jik7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tYWMvQ2xpcGJvYXJkTWFjLm1t
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21hYy9DbGlwYm9hcmRNYWMu
bW0JKHJldmlzaW9uIDExODQ4NCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21hYy9DbGlw
Ym9hcmRNYWMubW0JKHdvcmtpbmcgY29weSkKQEAgLTExOSwxNSArMTE5LDE1IEBAIHN0YXRpYyBT
dHJpbmcgdXRpVHlwZUZyb21Db2NvYVR5cGUoY29uc3QKICAgICByZXR1cm4gU3RyaW5nKCk7CiB9
CiAKLXN0YXRpYyB2b2lkIGFkZEhUTUxDbGlwYm9hcmRUeXBlc0ZvckNvY29hVHlwZShIYXNoU2V0
PFN0cmluZz4mIHJlc3VsdFR5cGVzLCBjb25zdCBTdHJpbmcmIGNvY29hVHlwZSwgY29uc3QgU3Ry
aW5nJiBwYXN0ZWJvYXJkTmFtZSkKK3N0YXRpYyB2b2lkIGFkZEhUTUxDbGlwYm9hcmRUeXBlc0Zv
ckNvY29hVHlwZShWZWN0b3I8U3RyaW5nPiYgcmVzdWx0VHlwZXMsIGNvbnN0IFN0cmluZyYgY29j
b2FUeXBlLCBjb25zdCBTdHJpbmcmIHBhc3RlYm9hcmROYW1lKQogewogICAgIC8vIFVUSSBtYXkg
bm90IGRvIHRoZXNlIHJpZ2h0LCBzbyBtYWtlIHN1cmUgd2UgZ2V0IHRoZSByaWdodCwgcHJlZGlj
dGFibGUgcmVzdWx0CiAgICAgaWYgKGNvY29hVHlwZSA9PSBTdHJpbmcoTlNTdHJpbmdQYm9hcmRU
eXBlKSkgewotICAgICAgICByZXN1bHRUeXBlcy5hZGQoInRleHQvcGxhaW4iKTsKKyAgICAgICAg
cmVzdWx0VHlwZXMuYXBwZW5kKCJ0ZXh0L3BsYWluIik7CiAgICAgICAgIHJldHVybjsKICAgICB9
CiAgICAgaWYgKGNvY29hVHlwZSA9PSBTdHJpbmcoTlNVUkxQYm9hcmRUeXBlKSkgewotICAgICAg
ICByZXN1bHRUeXBlcy5hZGQoInRleHQvdXJpLWxpc3QiKTsKKyAgICAgICAgcmVzdWx0VHlwZXMu
YXBwZW5kKCJ0ZXh0L3VyaS1saXN0Iik7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAgICAgaWYg
KGNvY29hVHlwZSA9PSBTdHJpbmcoTlNGaWxlbmFtZXNQYm9hcmRUeXBlKSkgewpAQCAtMTM5LDE4
ICsxMzksMTggQEAgc3RhdGljIHZvaWQgYWRkSFRNTENsaXBib2FyZFR5cGVzRm9yQ29jbwogICAg
ICAgICBpZiAoIWZpbGVMaXN0LmlzRW1wdHkoKSkgewogICAgICAgICAgICAgLy8gSXQgaXMgdW5r
bm93biBpZiBOU0ZpbGVuYW1lc1Bib2FyZFR5cGUgYWx3YXlzIGltcGxpZXMgTlNVUkxQYm9hcmRU
eXBlIGluIENvY29hLAogICAgICAgICAgICAgLy8gYnV0IE5TRmlsZW5hbWVzUGJvYXJkVHlwZSBz
aG91bGQgaW1wbHkgYm90aCAndGV4dC91cmktbGlzdCcgYW5kICdGaWxlcycKLSAgICAgICAgICAg
IHJlc3VsdFR5cGVzLmFkZCgidGV4dC91cmktbGlzdCIpOwotICAgICAgICAgICAgcmVzdWx0VHlw
ZXMuYWRkKCJGaWxlcyIpOworICAgICAgICAgICAgcmVzdWx0VHlwZXMuYXBwZW5kKCJ0ZXh0L3Vy
aS1saXN0Iik7CisgICAgICAgICAgICByZXN1bHRUeXBlcy5hcHBlbmQoIkZpbGVzIik7CiAgICAg
ICAgIH0KICAgICAgICAgcmV0dXJuOwogICAgIH0KICAgICBTdHJpbmcgdXRpVHlwZSA9IHV0aVR5
cGVGcm9tQ29jb2FUeXBlKGNvY29hVHlwZSk7CiAgICAgaWYgKCF1dGlUeXBlLmlzRW1wdHkoKSkg
ewotICAgICAgICByZXN1bHRUeXBlcy5hZGQodXRpVHlwZSk7CisgICAgICAgIHJlc3VsdFR5cGVz
LmFwcGVuZCh1dGlUeXBlKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KICAgICAvLyBObyBtYXBw
aW5nLCBqdXN0IHBhc3MgdGhlIHdob2xlIHN0cmluZyB0aG91Z2gKLSAgICByZXN1bHRUeXBlcy5h
ZGQoY29jb2FUeXBlKTsKKyAgICByZXN1bHRUeXBlcy5hcHBlbmQoY29jb2FUeXBlKTsKIH0KIAog
dm9pZCBDbGlwYm9hcmRNYWM6OmNsZWFyRGF0YShjb25zdCBTdHJpbmcmIHR5cGUpCkBAIC0yODEs
MTAgKzI4MSwxMCBAQCBib29sIENsaXBib2FyZE1hYzo6c2V0RGF0YShjb25zdCBTdHJpbmcKICAg
ICByZXR1cm4gZmFsc2U7CiB9CiAKLUhhc2hTZXQ8U3RyaW5nPiBDbGlwYm9hcmRNYWM6OnR5cGVz
KCkgY29uc3QKK1ZlY3RvcjxTdHJpbmc+IENsaXBib2FyZE1hYzo6dHlwZXMoKSBjb25zdAogewog
ICAgIGlmIChwb2xpY3koKSAhPSBDbGlwYm9hcmRSZWFkYWJsZSAmJiBwb2xpY3koKSAhPSBDbGlw
Ym9hcmRUeXBlc1JlYWRhYmxlKQotICAgICAgICByZXR1cm4gSGFzaFNldDxTdHJpbmc+KCk7Cisg
ICAgICAgIHJldHVybiBWZWN0b3I8U3RyaW5nPigpOwogCiAgICAgVmVjdG9yPFN0cmluZz4gdHlw
ZXM7CiAgICAgcGxhdGZvcm1TdHJhdGVnaWVzKCktPnBhc3RlYm9hcmRTdHJhdGVneSgpLT5nZXRU
eXBlcyh0eXBlcywgbV9wYXN0ZWJvYXJkTmFtZSk7CkBAIC0yOTIsOSArMjkyLDkgQEAgSGFzaFNl
dDxTdHJpbmc+IENsaXBib2FyZE1hYzo6dHlwZXMoKSBjbwogICAgIC8vIEVuZm9yY2UgY2hhbmdl
Q291bnQgb3Vyc2VsdmVzIGZvciBzZWN1cml0eS4gIFdlIGNoZWNrIGFmdGVyIHJlYWRpbmcgaW5z
dGVhZCBvZiBiZWZvcmUgdG8gYmUKICAgICAvLyBzdXJlIGl0IGRvZXNuJ3QgY2hhbmdlIGJldHdl
ZW4gb3VyIHRlc3RpbmcgdGhlIGNoYW5nZSBjb3VudCBhbmQgYWNjZXNzaW5nIHRoZSBkYXRhLgog
ICAgIGlmIChtX2NoYW5nZUNvdW50ICE9IHBsYXRmb3JtU3RyYXRlZ2llcygpLT5wYXN0ZWJvYXJk
U3RyYXRlZ3koKS0+Y2hhbmdlQ291bnQobV9wYXN0ZWJvYXJkTmFtZSkpCi0gICAgICAgIHJldHVy
biBIYXNoU2V0PFN0cmluZz4oKTsKKyAgICAgICAgcmV0dXJuIFZlY3RvcjxTdHJpbmc+KCk7CiAK
LSAgICBIYXNoU2V0PFN0cmluZz4gcmVzdWx0OworICAgIFZlY3RvcjxTdHJpbmc+IHJlc3VsdDsK
ICAgICAvLyBGSVhNRTogVGhpcyBsb29wIGNvdWxkIGJlIHNwbGl0IGludG8gdHdvIHN0YWdlcy4g
T25lIHdoaWNoIGFkZHMgYWxsIHRoZSBIVE1MNSBzcGVjaWZpZWQgdHlwZXMKICAgICAvLyBhbmQg
YSBzZWNvbmQgd2hpY2ggYWRkcyBhbGwgdGhlIGV4dHJhIHR5cGVzIGZyb20gdGhlIGNvY29hIGNs
aXBib2FyZCAod2hpY2ggaXMgTWFjLW9ubHkgYmVoYXZpb3IpLgogICAgIGZvciAoc2l6ZV90IGkg
PSAwOyBpIDwgdHlwZXMuc2l6ZSgpOyBpKyspIHsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL3F0L0NsaXBib2FyZFF0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9xdC9DbGlwYm9hcmRRdC5jcHAJKHJldmlzaW9uIDExODQ4NCkKKysrIFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL3F0L0NsaXBib2FyZFF0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTgyLDE2
ICsxODIsMTYgQEAgYm9vbCBDbGlwYm9hcmRRdDo6c2V0RGF0YShjb25zdCBTdHJpbmcmCiB9CiAK
IC8vIGV4dGVuc2lvbnMgYmV5b25kIElFJ3MgQVBJCi1IYXNoU2V0PFN0cmluZz4gQ2xpcGJvYXJk
UXQ6OnR5cGVzKCkgY29uc3QKK1ZlY3RvcjxTdHJpbmc+IENsaXBib2FyZFF0Ojp0eXBlcygpIGNv
bnN0CiB7CiAgICAgaWYgKHBvbGljeSgpICE9IENsaXBib2FyZFJlYWRhYmxlICYmIHBvbGljeSgp
ICE9IENsaXBib2FyZFR5cGVzUmVhZGFibGUpCi0gICAgICAgIHJldHVybiBIYXNoU2V0PFN0cmlu
Zz4oKTsKKyAgICAgICAgcmV0dXJuIFZlY3RvcjxTdHJpbmc+KCk7CiAKICAgICBBU1NFUlQobV9y
ZWFkYWJsZURhdGEpOwotICAgIEhhc2hTZXQ8U3RyaW5nPiByZXN1bHQ7CisgICAgVmVjdG9yPFN0
cmluZz4gcmVzdWx0OwogICAgIFFTdHJpbmdMaXN0IGZvcm1hdHMgPSBtX3JlYWRhYmxlRGF0YS0+
Zm9ybWF0cygpOwogICAgIGZvciAoaW50IGkgPSAwOyBpIDwgZm9ybWF0cy5jb3VudCgpOyArK2kp
Ci0gICAgICAgIHJlc3VsdC5hZGQoZm9ybWF0cy5hdChpKSk7CisgICAgICAgIHJlc3VsdC5hcHBl
bmQoZm9ybWF0cy5hdChpKSk7CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIApJbmRleDogU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vcXQvQ2xpcGJvYXJkUXQuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9xdC9DbGlwYm9hcmRRdC5oCShyZXZpc2lvbiAxMTg0ODQpCisrKyBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9xdC9DbGlwYm9hcmRRdC5oCSh3b3JraW5nIGNvcHkpCkBA
IC01Nyw3ICs1Nyw3IEBAIHB1YmxpYzoKICAgICBib29sIHNldERhdGEoY29uc3QgU3RyaW5nJiB0
eXBlLCBjb25zdCBTdHJpbmcmIGRhdGEpOwogCiAgICAgLy8gZXh0ZW5zaW9ucyBiZXlvbmQgSUUn
cyBBUEkKLSAgICB2aXJ0dWFsIEhhc2hTZXQ8U3RyaW5nPiB0eXBlcygpIGNvbnN0OworICAgIHZp
cnR1YWwgVmVjdG9yPFN0cmluZz4gdHlwZXMoKSBjb25zdDsKICAgICB2aXJ0dWFsIFBhc3NSZWZQ
dHI8RmlsZUxpc3Q+IGZpbGVzKCkgY29uc3Q7CiAKICAgICB2b2lkIHNldERyYWdJbWFnZShDYWNo
ZWRJbWFnZSosIGNvbnN0IEludFBvaW50Jik7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS93aW4vQ2xpcGJvYXJkV2luLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS93aW4vQ2xpcGJvYXJkV2luLmNwcAkocmV2aXNpb24gMTE4NDg0KQorKysgU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vd2luL0NsaXBib2FyZFdpbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ4
NCwyNCArNDg0LDI0IEBAIGJvb2wgQ2xpcGJvYXJkV2luOjpzZXREYXRhKGNvbnN0IFN0cmluZyYK
ICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLXN0YXRpYyB2b2lkIGFkZE1pbWVUeXBlc0ZvckZvcm1h
dChIYXNoU2V0PFN0cmluZz4mIHJlc3VsdHMsIGNvbnN0IEZPUk1BVEVUQyYgZm9ybWF0KQorc3Rh
dGljIHZvaWQgYWRkTWltZVR5cGVzRm9yRm9ybWF0KFZlY3RvcjxTdHJpbmc+JiByZXN1bHRzLCBj
b25zdCBGT1JNQVRFVEMmIGZvcm1hdCkKIHsKICAgICAvLyBVUkwgYW5kIFRleHQgYXJlIHByb3Zp
ZGVkIGZvciBjb21wYXRpYmlsaXR5IHdpdGggSUUncyBtb2RlbAogICAgIGlmIChmb3JtYXQuY2ZG
b3JtYXQgPT0gdXJsRm9ybWF0KCktPmNmRm9ybWF0IHx8IGZvcm1hdC5jZkZvcm1hdCA9PSB1cmxX
Rm9ybWF0KCktPmNmRm9ybWF0KSB7Ci0gICAgICAgIHJlc3VsdHMuYWRkKCJVUkwiKTsKLSAgICAg
ICAgcmVzdWx0cy5hZGQoInRleHQvdXJpLWxpc3QiKTsKKyAgICAgICAgcmVzdWx0cy5hcHBlbmQo
IlVSTCIpOworICAgICAgICByZXN1bHRzLmFwcGVuZCgidGV4dC91cmktbGlzdCIpOwogICAgIH0K
IAogICAgIGlmIChmb3JtYXQuY2ZGb3JtYXQgPT0gcGxhaW5UZXh0V0Zvcm1hdCgpLT5jZkZvcm1h
dCB8fCBmb3JtYXQuY2ZGb3JtYXQgPT0gcGxhaW5UZXh0Rm9ybWF0KCktPmNmRm9ybWF0KSB7Ci0g
ICAgICAgIHJlc3VsdHMuYWRkKCJUZXh0Iik7Ci0gICAgICAgIHJlc3VsdHMuYWRkKCJ0ZXh0L3Bs
YWluIik7CisgICAgICAgIHJlc3VsdHMuYXBwZW5kKCJUZXh0Iik7CisgICAgICAgIHJlc3VsdHMu
YXBwZW5kKCJ0ZXh0L3BsYWluIik7CiAgICAgfQogfQogCiAvLyBleHRlbnNpb25zIGJleW9uZCBJ
RSdzIEFQSQotSGFzaFNldDxTdHJpbmc+IENsaXBib2FyZFdpbjo6dHlwZXMoKSBjb25zdAorVmVj
dG9yPFN0cmluZz4gQ2xpcGJvYXJkV2luOjp0eXBlcygpIGNvbnN0CiB7IAotICAgIEhhc2hTZXQ8
U3RyaW5nPiByZXN1bHRzOyAKKyAgICBWZWN0b3I8U3RyaW5nPiByZXN1bHRzOwogICAgIGlmIChw
b2xpY3koKSAhPSBDbGlwYm9hcmRSZWFkYWJsZSAmJiBwb2xpY3koKSAhPSBDbGlwYm9hcmRUeXBl
c1JlYWRhYmxlKQogICAgICAgICByZXR1cm4gcmVzdWx0czsKIApJbmRleDogU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vd2luL0NsaXBib2FyZFdpbi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL3dpbi9DbGlwYm9hcmRXaW4uaAkocmV2aXNpb24gMTE4NDg0KQorKysgU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vd2luL0NsaXBib2FyZFdpbi5oCSh3b3JraW5nIGNvcHkpCkBA
IC02NCw3ICs2NCw3IEBAIHB1YmxpYzoKICAgICBib29sIHNldERhdGEoY29uc3QgU3RyaW5nJiB0
eXBlLCBjb25zdCBTdHJpbmcmIGRhdGEpOwogCiAgICAgLy8gZXh0ZW5zaW9ucyBiZXlvbmQgSUUn
cyBBUEkKLSAgICB2aXJ0dWFsIEhhc2hTZXQ8U3RyaW5nPiB0eXBlcygpIGNvbnN0OworICAgIHZp
cnR1YWwgVmVjdG9yPFN0cmluZz4gdHlwZXMoKSBjb25zdDsKICAgICB2aXJ0dWFsIFBhc3NSZWZQ
dHI8RmlsZUxpc3Q+IGZpbGVzKCkgY29uc3Q7CiAKICAgICB2b2lkIHNldERyYWdJbWFnZShDYWNo
ZWRJbWFnZSosIGNvbnN0IEludFBvaW50Jik7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS93eC9DbGlwYm9hcmRXeC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vd3gvQ2xpcGJvYXJkV3guY3BwCShyZXZpc2lvbiAxMTg0ODQpCisrKyBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS93eC9DbGlwYm9hcmRXeC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTcwLDEwICs3
MCwxMCBAQCBib29sIENsaXBib2FyZFd4OjpzZXREYXRhKGNvbnN0IFN0cmluZyYKIH0KIAogLy8g
ZXh0ZW5zaW9ucyBiZXlvbmQgSUUncyBBUEkKLUhhc2hTZXQ8U3RyaW5nPiBDbGlwYm9hcmRXeDo6
dHlwZXMoKSBjb25zdCAKK1ZlY3RvcjxTdHJpbmc+IENsaXBib2FyZFd4Ojp0eXBlcygpIGNvbnN0
CiB7CiAgICAgbm90SW1wbGVtZW50ZWQoKTsKLSAgICBIYXNoU2V0PFN0cmluZz4gcmVzdWx0Owor
ICAgIFZlY3RvcjxTdHJpbmc+IHJlc3VsdDsKICAgICByZXR1cm4gcmVzdWx0OwogfQogCkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS93eC9DbGlwYm9hcmRXeC5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3d4L0NsaXBib2FyZFd4LmgJKHJldmlzaW9uIDExODQ4
NCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3d4L0NsaXBib2FyZFd4LmgJKHdvcmtpbmcg
Y29weSkKQEAgLTQ2LDcgKzQ2LDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICBib29s
IHNldERhdGEoY29uc3QgU3RyaW5nJiB0eXBlLCBjb25zdCBTdHJpbmcmIGRhdGEpOwogICAgIAog
ICAgICAgICAvLyBleHRlbnNpb25zIGJleW9uZCBJRSdzIEFQSQotICAgICAgICB2aXJ0dWFsIEhh
c2hTZXQ8U3RyaW5nPiB0eXBlcygpIGNvbnN0OworICAgICAgICB2aXJ0dWFsIFZlY3RvcjxTdHJp
bmc+IHR5cGVzKCkgY29uc3Q7CiAgICAgICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxGaWxlTGlzdD4g
ZmlsZXMoKSBjb25zdDsKICAgICAKICAgICAgICAgSW50UG9pbnQgZHJhZ0xvY2F0aW9uKCkgY29u
c3Q7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>160053</attachid>
            <date>2012-08-22 17:50:30 -0700</date>
            <delta_ts>2013-02-06 15:19:56 -0800</delta_ts>
            <desc>updated_patch</desc>
            <filename>clipboard_002.diff</filename>
            <type>text/plain</type>
            <size>21175</size>
            <attacher name="Vineet Chaudhary (vineetc)">code.vineet</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDEyNjM2OCkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDYwIEBACisyMDEyLTA4LTIyICBWaW5lZXQg
Q2hhdWRoYXJ5ICA8cmdmNzQ4QG1vdG9yb2xhLmNvbT4KKworICAgICAgICBDb25zaWRlciByZXBs
YWNpbmcgcmV0dXJuIHR5cGUgb2YgQ2xpcGJvYXJkOjp0eXBlcygpIGZyb20gSGFzaFNldDxTdHJp
bmc+IHRvIFZlY3RvcjxTdHJpbmc+LgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9ODI4ODgKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMh
KS4KKworICAgICAgICBBcyBwYXJ0IG9mIHJlbW92aW5nIGN1c3RvbSBiaW5kaW5ncyBvZiB0eXBl
cyBBcnJheSBDbGlwYm9hcmQ6OnR5cGVzKCkgbmVlZHMgdG8gcmV0dXJuCisgICAgICAgIFZlY3Rv
cjxTdHJpbmc+IHRoYW4gSGFzaFNldDxTdHJpbmc+CisKKyAgICAgICAgTm8gbmV3IHRlc3RzLiBF
eGl4dGluZyB0ZXN0IHNob3VsZCBwYXNzIHdpdGggdGhpcyBjaGFuZ2UgYXMgbm8gYmVoYXZvdXJh
bCBjaGFuZ2VzLgorCisgICAgICAgICogYmluZGluZ3MvanMvSlNDbGlwYm9hcmRDdXN0b20uY3Bw
OiBSZXBsYWNlIGRhdGEgdHlwZSBmcm9tIEhhc2hTZXQ8PiB0byBWZWN0b3I8Pi4KKyAgICAgICAg
KFdlYkNvcmU6OkpTQ2xpcGJvYXJkOjp0eXBlcyk6CisgICAgICAgICogYmluZGluZ3MvdjgvY3Vz
dG9tL1Y4Q2xpcGJvYXJkQ3VzdG9tLmNwcDogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpWOENs
aXBib2FyZDo6dHlwZXNBY2Nlc3NvckdldHRlcik6CisgICAgICAgICogZG9tL0NsaXBib2FyZC5o
OiBEaXR0by4KKyAgICAgICAgKENsaXBib2FyZCk6CisgICAgICAgICogcGxhdGZvcm0vYmxhY2ti
ZXJyeS9DbGlwYm9hcmRCbGFja0JlcnJ5LmNwcDogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpD
bGlwYm9hcmRCbGFja0JlcnJ5Ojp0eXBlcyk6CisgICAgICAgICogcGxhdGZvcm0vYmxhY2tiZXJy
eS9DbGlwYm9hcmRCbGFja0JlcnJ5Lmg6IERpdHRvLgorICAgICAgICAoQ2xpcGJvYXJkQmxhY2tC
ZXJyeSk6CisgICAgICAgICogcGxhdGZvcm0vY2hyb21pdW0vQ2hyb21pdW1EYXRhT2JqZWN0LmNw
cDogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpDaHJvbWl1bURhdGFPYmplY3Q6OnR5cGVzKToK
KyAgICAgICAgKiBwbGF0Zm9ybS9jaHJvbWl1bS9DaHJvbWl1bURhdGFPYmplY3QuaDogRGl0dG8u
CisgICAgICAgIChDaHJvbWl1bURhdGFPYmplY3QpOgorICAgICAgICAqIHBsYXRmb3JtL2Nocm9t
aXVtL0NsaXBib2FyZENocm9taXVtLmNwcDogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpDbGlw
Ym9hcmRDaHJvbWl1bTo6dHlwZXMpOgorICAgICAgICAqIHBsYXRmb3JtL2Nocm9taXVtL0NsaXBi
b2FyZENocm9taXVtLmg6IERpdHRvLgorICAgICAgICAoQ2xpcGJvYXJkQ2hyb21pdW0pOgorICAg
ICAgICAqIHBsYXRmb3JtL2VmbC9DbGlwYm9hcmRFZmwuY3BwOiBEaXR0by4KKyAgICAgICAgKFdl
YkNvcmU6OkNsaXBib2FyZEVmbDo6dHlwZXMpOgorICAgICAgICAqIHBsYXRmb3JtL2VmbC9DbGlw
Ym9hcmRFZmwuaDogRGl0dG8uCisgICAgICAgIChDbGlwYm9hcmRFZmwpOgorICAgICAgICAqIHBs
YXRmb3JtL2d0ay9DbGlwYm9hcmRHdGsuY3BwOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OkNs
aXBib2FyZEd0azo6dHlwZXMpOgorICAgICAgICAqIHBsYXRmb3JtL2d0ay9DbGlwYm9hcmRHdGsu
aDogRGl0dG8uCisgICAgICAgIChDbGlwYm9hcmRHdGspOgorICAgICAgICAqIHBsYXRmb3JtL21h
Yy9DbGlwYm9hcmRNYWMuaDogRGl0dG8uCisgICAgICAgIChDbGlwYm9hcmRNYWMpOgorICAgICAg
ICAqIHBsYXRmb3JtL21hYy9DbGlwYm9hcmRNYWMubW06IERpdHRvLgorICAgICAgICAoV2ViQ29y
ZTo6YWRkSFRNTENsaXBib2FyZFR5cGVzRm9yQ29jb2FUeXBlKToKKyAgICAgICAgKFdlYkNvcmU6
OkNsaXBib2FyZE1hYzo6dHlwZXMpOgorICAgICAgICAqIHBsYXRmb3JtL3F0L0NsaXBib2FyZFF0
LmNwcDogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpDbGlwYm9hcmRRdDo6dHlwZXMpOgorICAg
ICAgICAqIHBsYXRmb3JtL3F0L0NsaXBib2FyZFF0Lmg6IERpdHRvLgorICAgICAgICAoQ2xpcGJv
YXJkUXQpOgorICAgICAgICAqIHBsYXRmb3JtL3dpbi9DbGlwYm9hcmRXaW4uY3BwOiBEaXR0by4K
KyAgICAgICAgKFdlYkNvcmU6OmFkZE1pbWVUeXBlc0ZvckZvcm1hdCk6CisgICAgICAgIChXZWJD
b3JlOjpDbGlwYm9hcmRXaW46OnR5cGVzKToKKyAgICAgICAgKiBwbGF0Zm9ybS93aW4vQ2xpcGJv
YXJkV2luLmg6IERpdHRvLgorICAgICAgICAoQ2xpcGJvYXJkV2luKToKKyAgICAgICAgKiBwbGF0
Zm9ybS93eC9DbGlwYm9hcmRXeC5jcHA6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6Q2xpcGJv
YXJkV3g6OnR5cGVzKToKKyAgICAgICAgKiBwbGF0Zm9ybS93eC9DbGlwYm9hcmRXeC5oOiBEaXR0
by4KKyAgICAgICAgKENsaXBib2FyZFd4KToKKwogMjAxMi0wOC0yMiAgRGF2aWQgR3JvZ2FuICA8
ZGdyb2dhbkBjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgSW5kZXhlZERCOiByZXZlcnQgaW50IHZl
cnNpb24gd2hlbiB2ZXJzaW9uIGNoYW5nZSB0cmFuc2FjdGlvbiBhYm9ydHMKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTQ2xpcGJvYXJkQ3VzdG9tLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0NsaXBib2FyZEN1c3RvbS5jcHAJKHJldmlz
aW9uIDEyNjM2NykKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTQ2xpcGJvYXJkQ3Vz
dG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTIsMTMgKzUyLDEzIEBAIEpTVmFsdWUgSlNDbGlw
Ym9hcmQ6OnR5cGVzKEV4ZWNTdGF0ZSogZXgKIHsKICAgICBDbGlwYm9hcmQqIGNsaXBib2FyZCA9
IGltcGwoKTsKIAotICAgIEhhc2hTZXQ8U3RyaW5nPiB0eXBlcyA9IGNsaXBib2FyZC0+dHlwZXMo
KTsKKyAgICBWZWN0b3I8U3RyaW5nPiB0eXBlcyA9IGNsaXBib2FyZC0+dHlwZXMoKTsKICAgICBp
ZiAodHlwZXMuaXNFbXB0eSgpKQogICAgICAgICByZXR1cm4ganNOdWxsKCk7CiAKICAgICBNYXJr
ZWRBcmd1bWVudEJ1ZmZlciBsaXN0OwotICAgIEhhc2hTZXQ8U3RyaW5nPjo6Y29uc3RfaXRlcmF0
b3IgZW5kID0gdHlwZXMuZW5kKCk7Ci0gICAgZm9yIChIYXNoU2V0PFN0cmluZz46OmNvbnN0X2l0
ZXJhdG9yIGl0ID0gdHlwZXMuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KQorICAgIFZlY3RvcjxT
dHJpbmc+Ojpjb25zdF9pdGVyYXRvciBlbmQgPSB0eXBlcy5lbmQoKTsKKyAgICBmb3IgKFZlY3Rv
cjxTdHJpbmc+Ojpjb25zdF9pdGVyYXRvciBpdCA9IHR5cGVzLmJlZ2luKCk7IGl0ICE9IGVuZDsg
KytpdCkKICAgICAgICAgbGlzdC5hcHBlbmQoanNTdHJpbmcoZXhlYywgc3RyaW5nVG9VU3RyaW5n
KCppdCkpKTsKICAgICByZXR1cm4gY29uc3RydWN0QXJyYXkoZXhlYywgZ2xvYmFsT2JqZWN0KCks
IGxpc3QpOwogfQpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4Q2xp
cGJvYXJkQ3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92
OC9jdXN0b20vVjhDbGlwYm9hcmRDdXN0b20uY3BwCShyZXZpc2lvbiAxMjYzNjcpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhDbGlwYm9hcmRDdXN0b20uY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC00OSwxNCArNDksMTQgQEAgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IFY4Q2xp
cGJvYXJkOjp0eXBlcwogICAgIElOQ19TVEFUUygiRE9NLkNsaXBib2FyZC50eXBlcygpIik7CiAg
ICAgQ2xpcGJvYXJkKiBjbGlwYm9hcmQgPSBWOENsaXBib2FyZDo6dG9OYXRpdmUoaW5mby5Ib2xk
ZXIoKSk7CiAKLSAgICBIYXNoU2V0PFN0cmluZz4gdHlwZXMgPSBjbGlwYm9hcmQtPnR5cGVzKCk7
CisgICAgVmVjdG9yPFN0cmluZz4gdHlwZXMgPSBjbGlwYm9hcmQtPnR5cGVzKCk7CiAgICAgaWYg
KHR5cGVzLmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuIHY4OjpOdWxsKGluZm8uR2V0SXNvbGF0
ZSgpKTsKIAogICAgIHY4OjpMb2NhbDx2ODo6QXJyYXk+IHJlc3VsdCA9IHY4OjpBcnJheTo6TmV3
KHR5cGVzLnNpemUoKSk7Ci0gICAgSGFzaFNldDxTdHJpbmc+Ojpjb25zdF9pdGVyYXRvciBlbmQg
PSB0eXBlcy5lbmQoKTsKKyAgICBWZWN0b3I8U3RyaW5nPjo6Y29uc3RfaXRlcmF0b3IgZW5kID0g
dHlwZXMuZW5kKCk7CiAgICAgaW50IGluZGV4ID0gMDsKLSAgICBmb3IgKEhhc2hTZXQ8U3RyaW5n
Pjo6Y29uc3RfaXRlcmF0b3IgaXQgPSB0eXBlcy5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQsICsr
aW5kZXgpCisgICAgZm9yIChWZWN0b3I8U3RyaW5nPjo6Y29uc3RfaXRlcmF0b3IgaXQgPSB0eXBl
cy5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQsICsraW5kZXgpCiAgICAgICAgIHJlc3VsdC0+U2V0
KHY4SW50ZWdlcihpbmRleCwgaW5mby5HZXRJc29sYXRlKCkpLCB2OFN0cmluZygqaXQsIGluZm8u
R2V0SXNvbGF0ZSgpKSk7CiAKICAgICByZXR1cm4gcmVzdWx0OwpJbmRleDogU291cmNlL1dlYkNv
cmUvZG9tL0NsaXBib2FyZC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2RvbS9DbGlw
Ym9hcmQuaAkocmV2aXNpb24gMTI2MzY3KQorKysgU291cmNlL1dlYkNvcmUvZG9tL0NsaXBib2Fy
ZC5oCSh3b3JraW5nIGNvcHkpCkBAIC02Niw3ICs2Niw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsK
ICAgICAgICAgdmlydHVhbCBib29sIHNldERhdGEoY29uc3QgU3RyaW5nJiB0eXBlLCBjb25zdCBT
dHJpbmcmIGRhdGEpID0gMDsKICAgICAKICAgICAgICAgLy8gZXh0ZW5zaW9ucyBiZXlvbmQgSUUn
cyBBUEkKLSAgICAgICAgdmlydHVhbCBIYXNoU2V0PFN0cmluZz4gdHlwZXMoKSBjb25zdCA9IDA7
CisgICAgICAgIHZpcnR1YWwgVmVjdG9yPFN0cmluZz4gdHlwZXMoKSBjb25zdCA9IDA7CiAgICAg
ICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxGaWxlTGlzdD4gZmlsZXMoKSBjb25zdCA9IDA7CiAKICAg
ICAgICAgSW50UG9pbnQgZHJhZ0xvY2F0aW9uKCkgY29uc3QgeyByZXR1cm4gbV9kcmFnTG9jOyB9
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ibGFja2JlcnJ5L0NsaXBib2FyZEJsYWNr
QmVycnkuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2JsYWNrYmVy
cnkvQ2xpcGJvYXJkQmxhY2tCZXJyeS5jcHAJKHJldmlzaW9uIDEyNjM2NykKKysrIFNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2JsYWNrYmVycnkvQ2xpcGJvYXJkQmxhY2tCZXJyeS5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTc4LDE2ICs3OCwxNiBAQCBib29sIENsaXBib2FyZEJsYWNrQmVycnk6OnNl
dERhdGEoY29uc3QgCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLUhhc2hTZXQ8U3RyaW5nPiBDbGlw
Ym9hcmRCbGFja0JlcnJ5Ojp0eXBlcygpIGNvbnN0CitWZWN0b3I8U3RyaW5nPiBDbGlwYm9hcmRC
bGFja0JlcnJ5Ojp0eXBlcygpIGNvbnN0CiB7CiAgICAgaWYgKHBvbGljeSgpICE9IENsaXBib2Fy
ZFJlYWRhYmxlICYmIHBvbGljeSgpICE9IENsaXBib2FyZFR5cGVzUmVhZGFibGUpCi0gICAgICAg
IHJldHVybiBIYXNoU2V0PFN0cmluZz4oKTsKKyAgICAgICAgcmV0dXJuIFZlY3RvcjxTdHJpbmc+
KCk7CiAKICAgICAvLyBXZSB1c2UgaGFyZGNvZGVkIGxpc3QgaGVyZSBzaW5jZSB0aGVyZSBzZWVt
cyB0byBiZSBubyBBUEkgdG8gZ2V0IHRoZSBsaXN0LgotICAgIEhhc2hTZXQ8U3RyaW5nPiByZXQ7
Ci0gICAgcmV0LmFkZCgidGV4dC9wbGFpbiIpOwotICAgIHJldC5hZGQoInRleHQvaHRtbCIpOwot
ICAgIHJldC5hZGQoInRleHQvdXJsIik7CisgICAgVmVjdG9yPFN0cmluZz4gcmV0OworICAgIHJl
dC5hcHBlbmQoInRleHQvcGxhaW4iKTsKKyAgICByZXQuYXBwZW5kKCJ0ZXh0L2h0bWwiKTsKKyAg
ICByZXQuYXBwZW5kKCJ0ZXh0L3VybCIpOwogICAgIHJldHVybiByZXQ7CiB9CiAKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2JsYWNrYmVycnkvQ2xpcGJvYXJkQmxhY2tCZXJyeS5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2JsYWNrYmVycnkvQ2xpcGJvYXJk
QmxhY2tCZXJyeS5oCShyZXZpc2lvbiAxMjYzNjcpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ibGFja2JlcnJ5L0NsaXBib2FyZEJsYWNrQmVycnkuaAkod29ya2luZyBjb3B5KQpAQCAtMzks
NyArMzksNyBAQCBwdWJsaWM6CiAgICAgYm9vbCBzZXREYXRhKGNvbnN0IFN0cmluZyYgdHlwZSwg
Y29uc3QgU3RyaW5nJiBkYXRhKTsKIAogICAgIC8vIGV4dGVuc2lvbnMgYmV5b25kIElFJ3MgQVBJ
Ci0gICAgdmlydHVhbCBIYXNoU2V0PFN0cmluZz4gdHlwZXMoKSBjb25zdDsKKyAgICB2aXJ0dWFs
IFZlY3RvcjxTdHJpbmc+IHR5cGVzKCkgY29uc3Q7CiAgICAgdmlydHVhbCBQYXNzUmVmUHRyPEZp
bGVMaXN0PiBmaWxlcygpIGNvbnN0OwogICAgIHZpcnR1YWwgRHJhZ0ltYWdlUmVmIGNyZWF0ZURy
YWdJbWFnZShJbnRQb2ludCYpIGNvbnN0OwogICAgIHZpcnR1YWwgdm9pZCBkZWNsYXJlQW5kV3Jp
dGVEcmFnSW1hZ2UoRWxlbWVudCosIGNvbnN0IEtVUkwmLCBjb25zdCBTdHJpbmcmIHRpdGxlLCBG
cmFtZSopOwpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY2hyb21pdW0vQ2hyb21pdW1E
YXRhT2JqZWN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jaHJv
bWl1bS9DaHJvbWl1bURhdGFPYmplY3QuY3BwCShyZXZpc2lvbiAxMjYzNjcpCisrKyBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9jaHJvbWl1bS9DaHJvbWl1bURhdGFPYmplY3QuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0xMjYsMjAgKzEyNiwyMCBAQCB2b2lkIENocm9taXVtRGF0YU9iamVjdDo6Y2xl
YXJBbGxFeGNlcHRGCiAgICAgfQogfQogCi1IYXNoU2V0PFN0cmluZz4gQ2hyb21pdW1EYXRhT2Jq
ZWN0Ojp0eXBlcygpIGNvbnN0CitWZWN0b3I8U3RyaW5nPiBDaHJvbWl1bURhdGFPYmplY3Q6OnR5
cGVzKCkgY29uc3QKIHsKLSAgICBIYXNoU2V0PFN0cmluZz4gcmVzdWx0czsKKyAgICBWZWN0b3I8
U3RyaW5nPiByZXN1bHRzOwogICAgIGJvb2wgY29udGFpbnNGaWxlcyA9IGZhbHNlOwogICAgIGZv
ciAoc2l6ZV90IGkgPSAwOyBpIDwgbV9pdGVtTGlzdC5zaXplKCk7ICsraSkgewogICAgICAgICBp
ZiAobV9pdGVtTGlzdFtpXS0+a2luZCgpID09IERhdGFUcmFuc2Zlckl0ZW06OmtpbmRTdHJpbmcp
Ci0gICAgICAgICAgICByZXN1bHRzLmFkZChtX2l0ZW1MaXN0W2ldLT50eXBlKCkpOworICAgICAg
ICAgICAgcmVzdWx0cy5hcHBlbmQobV9pdGVtTGlzdFtpXS0+dHlwZSgpKTsKICAgICAgICAgZWxz
ZSBpZiAobV9pdGVtTGlzdFtpXS0+a2luZCgpID09IERhdGFUcmFuc2Zlckl0ZW06OmtpbmRGaWxl
KQogICAgICAgICAgICAgY29udGFpbnNGaWxlcyA9IHRydWU7CiAgICAgICAgIGVsc2UKICAgICAg
ICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgIH0KICAgICBpZiAoY29udGFpbnNGaWxl
cykKLSAgICAgICAgcmVzdWx0cy5hZGQobWltZVR5cGVGaWxlcyk7CisgICAgICAgIHJlc3VsdHMu
YXBwZW5kKG1pbWVUeXBlRmlsZXMpOwogICAgIHJldHVybiByZXN1bHRzOwogfQogCkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jaHJvbWl1bS9DaHJvbWl1bURhdGFPYmplY3QuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jaHJvbWl1bS9DaHJvbWl1bURhdGFP
YmplY3QuaAkocmV2aXNpb24gMTI2MzY3KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY2hy
b21pdW0vQ2hyb21pdW1EYXRhT2JqZWN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTY5LDcgKzY5LDcg
QEAgcHVibGljOgogICAgIHZvaWQgY2xlYXJEYXRhKGNvbnN0IFN0cmluZyYgdHlwZSk7CiAgICAg
dm9pZCBjbGVhckFsbEV4Y2VwdEZpbGVzKCk7CiAKLSAgICBIYXNoU2V0PFN0cmluZz4gdHlwZXMo
KSBjb25zdDsKKyAgICBWZWN0b3I8U3RyaW5nPiB0eXBlcygpIGNvbnN0OwogICAgIFN0cmluZyBn
ZXREYXRhKGNvbnN0IFN0cmluZyYgdHlwZSkgY29uc3Q7CiAgICAgYm9vbCBzZXREYXRhKGNvbnN0
IFN0cmluZyYgdHlwZSwgY29uc3QgU3RyaW5nJiBkYXRhKTsKIApJbmRleDogU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vY2hyb21pdW0vQ2xpcGJvYXJkQ2hyb21pdW0uY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2Nocm9taXVtL0NsaXBib2FyZENocm9taXVtLmNwcAko
cmV2aXNpb24gMTI2MzY3KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY2hyb21pdW0vQ2xp
cGJvYXJkQ2hyb21pdW0uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNzQsMTAgKzI3NCwxMCBAQCBi
b29sIENsaXBib2FyZENocm9taXVtOjpzZXREYXRhKGNvbnN0IFN0CiB9CiAKIC8vIGV4dGVuc2lv
bnMgYmV5b25kIElFJ3MgQVBJCi1IYXNoU2V0PFN0cmluZz4gQ2xpcGJvYXJkQ2hyb21pdW06OnR5
cGVzKCkgY29uc3QKK1ZlY3RvcjxTdHJpbmc+IENsaXBib2FyZENocm9taXVtOjp0eXBlcygpIGNv
bnN0CiB7CiAgICAgaWYgKHBvbGljeSgpICE9IENsaXBib2FyZFJlYWRhYmxlICYmIHBvbGljeSgp
ICE9IENsaXBib2FyZFR5cGVzUmVhZGFibGUpCi0gICAgICAgIHJldHVybiBIYXNoU2V0PFN0cmlu
Zz4oKTsKKyAgICAgICAgcmV0dXJuIFZlY3RvcjxTdHJpbmc+KCk7CiAKICAgICByZXR1cm4gbV9k
YXRhT2JqZWN0LT50eXBlcygpOwogfQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY2hy
b21pdW0vQ2xpcGJvYXJkQ2hyb21pdW0uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9jaHJvbWl1bS9DbGlwYm9hcmRDaHJvbWl1bS5oCShyZXZpc2lvbiAxMjYzNjcpCisr
KyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jaHJvbWl1bS9DbGlwYm9hcmRDaHJvbWl1bS5oCSh3
b3JraW5nIGNvcHkpCkBAIC04NCw3ICs4NCw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAg
ICAgYm9vbCBwbGF0Zm9ybUNsaXBib2FyZENoYW5nZWQoKSBjb25zdDsKIAogICAgICAgICAvLyBl
eHRlbnNpb25zIGJleW9uZCBJRSdzIEFQSQotICAgICAgICB2aXJ0dWFsIEhhc2hTZXQ8U3RyaW5n
PiB0eXBlcygpIGNvbnN0OworICAgICAgICB2aXJ0dWFsIFZlY3RvcjxTdHJpbmc+IHR5cGVzKCkg
Y29uc3Q7CiAgICAgICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxGaWxlTGlzdD4gZmlsZXMoKSBjb25z
dDsKIAogICAgICAgICB2b2lkIHNldERyYWdJbWFnZShDYWNoZWRJbWFnZSosIGNvbnN0IEludFBv
aW50Jik7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9lZmwvQ2xpcGJvYXJkRWZsLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9lZmwvQ2xpcGJvYXJkRWZs
LmNwcAkocmV2aXNpb24gMTI2MzY3KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZWZsL0Ns
aXBib2FyZEVmbC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTc2LDEwICs3NiwxMCBAQCBib29sIENs
aXBib2FyZEVmbDo6c2V0RGF0YShjb25zdCBTdHJpbmcmCiAgICAgcmV0dXJuIGZhbHNlOwogfQog
Ci1IYXNoU2V0PFN0cmluZz4gQ2xpcGJvYXJkRWZsOjp0eXBlcygpIGNvbnN0CitWZWN0b3I8U3Ry
aW5nPiBDbGlwYm9hcmRFZmw6OnR5cGVzKCkgY29uc3QKIHsKICAgICBub3RJbXBsZW1lbnRlZCgp
OwotICAgIHJldHVybiBIYXNoU2V0PFN0cmluZz4oKTsKKyAgICByZXR1cm4gVmVjdG9yPFN0cmlu
Zz4oKTsKIH0KIAogUGFzc1JlZlB0cjxGaWxlTGlzdD4gQ2xpcGJvYXJkRWZsOjpmaWxlcygpIGNv
bnN0CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9lZmwvQ2xpcGJvYXJkRWZsLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZWZsL0NsaXBib2FyZEVmbC5oCShy
ZXZpc2lvbiAxMjYzNjcpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9lZmwvQ2xpcGJvYXJk
RWZsLmgJKHdvcmtpbmcgY29weSkKQEAgLTM5LDcgKzM5LDcgQEAgcHVibGljOgogICAgIFN0cmlu
ZyBnZXREYXRhKGNvbnN0IFN0cmluZyYpIGNvbnN0OwogICAgIGJvb2wgc2V0RGF0YShjb25zdCBT
dHJpbmcmLCBjb25zdCBTdHJpbmcmKTsKIAotICAgIEhhc2hTZXQ8U3RyaW5nPiB0eXBlcygpIGNv
bnN0OworICAgIFZlY3RvcjxTdHJpbmc+IHR5cGVzKCkgY29uc3Q7CiAgICAgdmlydHVhbCBQYXNz
UmVmUHRyPEZpbGVMaXN0PiBmaWxlcygpIGNvbnN0OwogCiAgICAgSW50UG9pbnQgZHJhZ0xvY2F0
aW9uKCkgY29uc3Q7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvQ2xpcGJvYXJk
R3RrLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvQ2xpcGJv
YXJkR3RrLmNwcAkocmV2aXNpb24gMTI2MzY3KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3RrL0NsaXBib2FyZEd0ay5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE4NCwzMSArMTg0LDMxIEBA
IGJvb2wgQ2xpcGJvYXJkR3RrOjpzZXREYXRhKGNvbnN0IFN0cmluZyYKICAgICByZXR1cm4gc3Vj
Y2VzczsKIH0KIAotSGFzaFNldDxTdHJpbmc+IENsaXBib2FyZEd0azo6dHlwZXMoKSBjb25zdAor
VmVjdG9yPFN0cmluZz4gQ2xpcGJvYXJkR3RrOjp0eXBlcygpIGNvbnN0CiB7CiAgICAgaWYgKHBv
bGljeSgpICE9IENsaXBib2FyZFJlYWRhYmxlICYmIHBvbGljeSgpICE9IENsaXBib2FyZFR5cGVz
UmVhZGFibGUpCi0gICAgICAgIHJldHVybiBIYXNoU2V0PFN0cmluZz4oKTsKKyAgICAgICAgcmV0
dXJuIFZlY3RvcjxTdHJpbmc+KCk7CiAKICAgICBpZiAobV9jbGlwYm9hcmQpCiAgICAgICAgIFBh
c3RlYm9hcmRIZWxwZXI6OmRlZmF1bHRQYXN0ZWJvYXJkSGVscGVyKCktPmdldENsaXBib2FyZENv
bnRlbnRzKG1fY2xpcGJvYXJkKTsKIAotICAgIEhhc2hTZXQ8U3RyaW5nPiB0eXBlczsKKyAgICBW
ZWN0b3I8U3RyaW5nPiB0eXBlczsKICAgICBpZiAobV9kYXRhT2JqZWN0LT5oYXNUZXh0KCkpIHsK
LSAgICAgICAgdHlwZXMuYWRkKCJ0ZXh0L3BsYWluIik7Ci0gICAgICAgIHR5cGVzLmFkZCgiVGV4
dCIpOwotICAgICAgICB0eXBlcy5hZGQoInRleHQiKTsKKyAgICAgICAgdHlwZXMuYXBwZW5kKCJ0
ZXh0L3BsYWluIik7CisgICAgICAgIHR5cGVzLmFwcGVuZCgiVGV4dCIpOworICAgICAgICB0eXBl
cy5hcHBlbmQoInRleHQiKTsKICAgICB9CiAKICAgICBpZiAobV9kYXRhT2JqZWN0LT5oYXNNYXJr
dXAoKSkKLSAgICAgICAgdHlwZXMuYWRkKCJ0ZXh0L2h0bWwiKTsKKyAgICAgICAgdHlwZXMuYXBw
ZW5kKCJ0ZXh0L2h0bWwiKTsKIAogICAgIGlmIChtX2RhdGFPYmplY3QtPmhhc1VSSUxpc3QoKSkg
ewotICAgICAgICB0eXBlcy5hZGQoInRleHQvdXJpLWxpc3QiKTsKLSAgICAgICAgdHlwZXMuYWRk
KCJVUkwiKTsKKyAgICAgICAgdHlwZXMuYXBwZW5kKCJ0ZXh0L3VyaS1saXN0Iik7CisgICAgICAg
IHR5cGVzLmFwcGVuZCgiVVJMIik7CiAgICAgfQogCiAgICAgaWYgKG1fZGF0YU9iamVjdC0+aGFz
RmlsZW5hbWVzKCkpCi0gICAgICAgIHR5cGVzLmFkZCgiRmlsZXMiKTsKKyAgICAgICAgdHlwZXMu
YXBwZW5kKCJGaWxlcyIpOwogCiAgICAgcmV0dXJuIHR5cGVzOwogfQpJbmRleDogU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3RrL0NsaXBib2FyZEd0ay5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2d0ay9DbGlwYm9hcmRHdGsuaAkocmV2aXNpb24gMTI2MzY3KQorKysg
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL0NsaXBib2FyZEd0ay5oCSh3b3JraW5nIGNvcHkp
CkBAIC01Nyw3ICs1Nyw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgU3RyaW5nIGdl
dERhdGEoY29uc3QgU3RyaW5nJikgY29uc3Q7CiAgICAgICAgIGJvb2wgc2V0RGF0YShjb25zdCBT
dHJpbmcmLCBjb25zdCBTdHJpbmcmKTsKIAotICAgICAgICB2aXJ0dWFsIEhhc2hTZXQ8U3RyaW5n
PiB0eXBlcygpIGNvbnN0OworICAgICAgICB2aXJ0dWFsIFZlY3RvcjxTdHJpbmc+IHR5cGVzKCkg
Y29uc3Q7CiAgICAgICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxGaWxlTGlzdD4gZmlsZXMoKSBjb25z
dDsKIAogICAgICAgICB2b2lkIHNldERyYWdJbWFnZShDYWNoZWRJbWFnZSosIGNvbnN0IEludFBv
aW50Jik7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tYWMvQ2xpcGJvYXJkTWFjLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWFjL0NsaXBib2FyZE1hYy5o
CShyZXZpc2lvbiAxMjYzNjcpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tYWMvQ2xpcGJv
YXJkTWFjLmgJKHdvcmtpbmcgY29weSkKQEAgLTYyLDcgKzYyLDcgQEAgcHVibGljOgogICAgIHZp
cnR1YWwgYm9vbCBoYXNEYXRhKCk7CiAgICAgCiAgICAgLy8gZXh0ZW5zaW9ucyBiZXlvbmQgSUUn
cyBBUEkKLSAgICB2aXJ0dWFsIEhhc2hTZXQ8U3RyaW5nPiB0eXBlcygpIGNvbnN0OworICAgIHZp
cnR1YWwgVmVjdG9yPFN0cmluZz4gdHlwZXMoKSBjb25zdDsKICAgICB2aXJ0dWFsIFBhc3NSZWZQ
dHI8RmlsZUxpc3Q+IGZpbGVzKCkgY29uc3Q7CiAKICAgICB2b2lkIHNldERyYWdJbWFnZShDYWNo
ZWRJbWFnZSosIGNvbnN0IEludFBvaW50Jik7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9tYWMvQ2xpcGJvYXJkTWFjLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL21hYy9DbGlwYm9hcmRNYWMubW0JKHJldmlzaW9uIDEyNjM2NykKKysrIFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL21hYy9DbGlwYm9hcmRNYWMubW0JKHdvcmtpbmcgY29weSkKQEAgLTEyMCwx
NSArMTIwLDE1IEBAIHN0YXRpYyBTdHJpbmcgdXRpVHlwZUZyb21Db2NvYVR5cGUoY29uc3QKICAg
ICByZXR1cm4gU3RyaW5nKCk7CiB9CiAKLXN0YXRpYyB2b2lkIGFkZEhUTUxDbGlwYm9hcmRUeXBl
c0ZvckNvY29hVHlwZShIYXNoU2V0PFN0cmluZz4mIHJlc3VsdFR5cGVzLCBjb25zdCBTdHJpbmcm
IGNvY29hVHlwZSwgY29uc3QgU3RyaW5nJiBwYXN0ZWJvYXJkTmFtZSkKK3N0YXRpYyB2b2lkIGFk
ZEhUTUxDbGlwYm9hcmRUeXBlc0ZvckNvY29hVHlwZShWZWN0b3I8U3RyaW5nPiYgcmVzdWx0VHlw
ZXMsIGNvbnN0IFN0cmluZyYgY29jb2FUeXBlLCBjb25zdCBTdHJpbmcmIHBhc3RlYm9hcmROYW1l
KQogewogICAgIC8vIFVUSSBtYXkgbm90IGRvIHRoZXNlIHJpZ2h0LCBzbyBtYWtlIHN1cmUgd2Ug
Z2V0IHRoZSByaWdodCwgcHJlZGljdGFibGUgcmVzdWx0CiAgICAgaWYgKGNvY29hVHlwZSA9PSBT
dHJpbmcoTlNTdHJpbmdQYm9hcmRUeXBlKSkgewotICAgICAgICByZXN1bHRUeXBlcy5hZGQoInRl
eHQvcGxhaW4iKTsKKyAgICAgICAgcmVzdWx0VHlwZXMuYXBwZW5kKCJ0ZXh0L3BsYWluIik7CiAg
ICAgICAgIHJldHVybjsKICAgICB9CiAgICAgaWYgKGNvY29hVHlwZSA9PSBTdHJpbmcoTlNVUkxQ
Ym9hcmRUeXBlKSkgewotICAgICAgICByZXN1bHRUeXBlcy5hZGQoInRleHQvdXJpLWxpc3QiKTsK
KyAgICAgICAgcmVzdWx0VHlwZXMuYXBwZW5kKCJ0ZXh0L3VyaS1saXN0Iik7CiAgICAgICAgIHJl
dHVybjsKICAgICB9CiAgICAgaWYgKGNvY29hVHlwZSA9PSBTdHJpbmcoTlNGaWxlbmFtZXNQYm9h
cmRUeXBlKSkgewpAQCAtMTQwLDE4ICsxNDAsMTggQEAgc3RhdGljIHZvaWQgYWRkSFRNTENsaXBi
b2FyZFR5cGVzRm9yQ29jbwogICAgICAgICBpZiAoIWZpbGVMaXN0LmlzRW1wdHkoKSkgewogICAg
ICAgICAgICAgLy8gSXQgaXMgdW5rbm93biBpZiBOU0ZpbGVuYW1lc1Bib2FyZFR5cGUgYWx3YXlz
IGltcGxpZXMgTlNVUkxQYm9hcmRUeXBlIGluIENvY29hLAogICAgICAgICAgICAgLy8gYnV0IE5T
RmlsZW5hbWVzUGJvYXJkVHlwZSBzaG91bGQgaW1wbHkgYm90aCAndGV4dC91cmktbGlzdCcgYW5k
ICdGaWxlcycKLSAgICAgICAgICAgIHJlc3VsdFR5cGVzLmFkZCgidGV4dC91cmktbGlzdCIpOwot
ICAgICAgICAgICAgcmVzdWx0VHlwZXMuYWRkKCJGaWxlcyIpOworICAgICAgICAgICAgcmVzdWx0
VHlwZXMuYXBwZW5kKCJ0ZXh0L3VyaS1saXN0Iik7CisgICAgICAgICAgICByZXN1bHRUeXBlcy5h
cHBlbmQoIkZpbGVzIik7CiAgICAgICAgIH0KICAgICAgICAgcmV0dXJuOwogICAgIH0KICAgICBT
dHJpbmcgdXRpVHlwZSA9IHV0aVR5cGVGcm9tQ29jb2FUeXBlKGNvY29hVHlwZSk7CiAgICAgaWYg
KCF1dGlUeXBlLmlzRW1wdHkoKSkgewotICAgICAgICByZXN1bHRUeXBlcy5hZGQodXRpVHlwZSk7
CisgICAgICAgIHJlc3VsdFR5cGVzLmFwcGVuZCh1dGlUeXBlKTsKICAgICAgICAgcmV0dXJuOwog
ICAgIH0KICAgICAvLyBObyBtYXBwaW5nLCBqdXN0IHBhc3MgdGhlIHdob2xlIHN0cmluZyB0aG91
Z2gKLSAgICByZXN1bHRUeXBlcy5hZGQoY29jb2FUeXBlKTsKKyAgICByZXN1bHRUeXBlcy5hcHBl
bmQoY29jb2FUeXBlKTsKIH0KIAogdm9pZCBDbGlwYm9hcmRNYWM6OmNsZWFyRGF0YShjb25zdCBT
dHJpbmcmIHR5cGUpCkBAIC0yODIsMTAgKzI4MiwxMCBAQCBib29sIENsaXBib2FyZE1hYzo6c2V0
RGF0YShjb25zdCBTdHJpbmcgCiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi1IYXNoU2V0PFN0cmlu
Zz4gQ2xpcGJvYXJkTWFjOjp0eXBlcygpIGNvbnN0CitWZWN0b3I8U3RyaW5nPiBDbGlwYm9hcmRN
YWM6OnR5cGVzKCkgY29uc3QKIHsKICAgICBpZiAocG9saWN5KCkgIT0gQ2xpcGJvYXJkUmVhZGFi
bGUgJiYgcG9saWN5KCkgIT0gQ2xpcGJvYXJkVHlwZXNSZWFkYWJsZSkKLSAgICAgICAgcmV0dXJu
IEhhc2hTZXQ8U3RyaW5nPigpOworICAgICAgICByZXR1cm4gVmVjdG9yPFN0cmluZz4oKTsKIAog
ICAgIFZlY3RvcjxTdHJpbmc+IHR5cGVzOwogICAgIHBsYXRmb3JtU3RyYXRlZ2llcygpLT5wYXN0
ZWJvYXJkU3RyYXRlZ3koKS0+Z2V0VHlwZXModHlwZXMsIG1fcGFzdGVib2FyZE5hbWUpOwpAQCAt
MjkzLDkgKzI5Myw5IEBAIEhhc2hTZXQ8U3RyaW5nPiBDbGlwYm9hcmRNYWM6OnR5cGVzKCkgY28K
ICAgICAvLyBFbmZvcmNlIGNoYW5nZUNvdW50IG91cnNlbHZlcyBmb3Igc2VjdXJpdHkuICBXZSBj
aGVjayBhZnRlciByZWFkaW5nIGluc3RlYWQgb2YgYmVmb3JlIHRvIGJlCiAgICAgLy8gc3VyZSBp
dCBkb2Vzbid0IGNoYW5nZSBiZXR3ZWVuIG91ciB0ZXN0aW5nIHRoZSBjaGFuZ2UgY291bnQgYW5k
IGFjY2Vzc2luZyB0aGUgZGF0YS4KICAgICBpZiAobV9jaGFuZ2VDb3VudCAhPSBwbGF0Zm9ybVN0
cmF0ZWdpZXMoKS0+cGFzdGVib2FyZFN0cmF0ZWd5KCktPmNoYW5nZUNvdW50KG1fcGFzdGVib2Fy
ZE5hbWUpKQotICAgICAgICByZXR1cm4gSGFzaFNldDxTdHJpbmc+KCk7CisgICAgICAgIHJldHVy
biBWZWN0b3I8U3RyaW5nPigpOwogCi0gICAgSGFzaFNldDxTdHJpbmc+IHJlc3VsdDsKKyAgICBW
ZWN0b3I8U3RyaW5nPiByZXN1bHQ7CiAgICAgLy8gRklYTUU6IFRoaXMgbG9vcCBjb3VsZCBiZSBz
cGxpdCBpbnRvIHR3byBzdGFnZXMuIE9uZSB3aGljaCBhZGRzIGFsbCB0aGUgSFRNTDUgc3BlY2lm
aWVkIHR5cGVzCiAgICAgLy8gYW5kIGEgc2Vjb25kIHdoaWNoIGFkZHMgYWxsIHRoZSBleHRyYSB0
eXBlcyBmcm9tIHRoZSBjb2NvYSBjbGlwYm9hcmQgKHdoaWNoIGlzIE1hYy1vbmx5IGJlaGF2aW9y
KS4KICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHR5cGVzLnNpemUoKTsgaSsrKSB7CkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9xdC9DbGlwYm9hcmRRdC5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vcXQvQ2xpcGJvYXJkUXQuY3BwCShyZXZpc2lvbiAx
MjYzNjcpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9xdC9DbGlwYm9hcmRRdC5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTE4MywxNiArMTgzLDE2IEBAIGJvb2wgQ2xpcGJvYXJkUXQ6OnNldERh
dGEoY29uc3QgU3RyaW5nJiAKIH0KIAogLy8gZXh0ZW5zaW9ucyBiZXlvbmQgSUUncyBBUEkKLUhh
c2hTZXQ8U3RyaW5nPiBDbGlwYm9hcmRRdDo6dHlwZXMoKSBjb25zdAorVmVjdG9yPFN0cmluZz4g
Q2xpcGJvYXJkUXQ6OnR5cGVzKCkgY29uc3QKIHsKICAgICBpZiAocG9saWN5KCkgIT0gQ2xpcGJv
YXJkUmVhZGFibGUgJiYgcG9saWN5KCkgIT0gQ2xpcGJvYXJkVHlwZXNSZWFkYWJsZSkKLSAgICAg
ICAgcmV0dXJuIEhhc2hTZXQ8U3RyaW5nPigpOworICAgICAgICByZXR1cm4gVmVjdG9yPFN0cmlu
Zz4oKTsKIAogICAgIEFTU0VSVChtX3JlYWRhYmxlRGF0YSk7Ci0gICAgSGFzaFNldDxTdHJpbmc+
IHJlc3VsdDsKKyAgICBWZWN0b3I8U3RyaW5nPiByZXN1bHQ7CiAgICAgUVN0cmluZ0xpc3QgZm9y
bWF0cyA9IG1fcmVhZGFibGVEYXRhLT5mb3JtYXRzKCk7CiAgICAgZm9yIChpbnQgaSA9IDA7IGkg
PCBmb3JtYXRzLmNvdW50KCk7ICsraSkKLSAgICAgICAgcmVzdWx0LmFkZChmb3JtYXRzLmF0KGkp
KTsKKyAgICAgICAgcmVzdWx0LmFwcGVuZChmb3JtYXRzLmF0KGkpKTsKICAgICByZXR1cm4gcmVz
dWx0OwogfQogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9xdC9DbGlwYm9hcmRRdC5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3F0L0NsaXBib2FyZFF0LmgJ
KHJldmlzaW9uIDEyNjM2NykKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3F0L0NsaXBib2Fy
ZFF0LmgJKHdvcmtpbmcgY29weSkKQEAgLTU3LDcgKzU3LDcgQEAgcHVibGljOgogICAgIGJvb2wg
c2V0RGF0YShjb25zdCBTdHJpbmcmIHR5cGUsIGNvbnN0IFN0cmluZyYgZGF0YSk7CiAKICAgICAv
LyBleHRlbnNpb25zIGJleW9uZCBJRSdzIEFQSQotICAgIHZpcnR1YWwgSGFzaFNldDxTdHJpbmc+
IHR5cGVzKCkgY29uc3Q7CisgICAgdmlydHVhbCBWZWN0b3I8U3RyaW5nPiB0eXBlcygpIGNvbnN0
OwogICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxGaWxlTGlzdD4gZmlsZXMoKSBjb25zdDsKIAogICAg
IHZvaWQgc2V0RHJhZ0ltYWdlKENhY2hlZEltYWdlKiwgY29uc3QgSW50UG9pbnQmKTsKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3dpbi9DbGlwYm9hcmRXaW4uY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3dpbi9DbGlwYm9hcmRXaW4uY3BwCShyZXZpc2lv
biAxMjYzNjcpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS93aW4vQ2xpcGJvYXJkV2luLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtNDg0LDI0ICs0ODQsMjQgQEAgYm9vbCBDbGlwYm9hcmRXaW46
OnNldERhdGEoY29uc3QgU3RyaW5nJgogICAgIHJldHVybiBmYWxzZTsKIH0KIAotc3RhdGljIHZv
aWQgYWRkTWltZVR5cGVzRm9yRm9ybWF0KEhhc2hTZXQ8U3RyaW5nPiYgcmVzdWx0cywgY29uc3Qg
Rk9STUFURVRDJiBmb3JtYXQpCitzdGF0aWMgdm9pZCBhZGRNaW1lVHlwZXNGb3JGb3JtYXQoVmVj
dG9yPFN0cmluZz4mIHJlc3VsdHMsIGNvbnN0IEZPUk1BVEVUQyYgZm9ybWF0KQogewogICAgIC8v
IFVSTCBhbmQgVGV4dCBhcmUgcHJvdmlkZWQgZm9yIGNvbXBhdGliaWxpdHkgd2l0aCBJRSdzIG1v
ZGVsCiAgICAgaWYgKGZvcm1hdC5jZkZvcm1hdCA9PSB1cmxGb3JtYXQoKS0+Y2ZGb3JtYXQgfHwg
Zm9ybWF0LmNmRm9ybWF0ID09IHVybFdGb3JtYXQoKS0+Y2ZGb3JtYXQpIHsKLSAgICAgICAgcmVz
dWx0cy5hZGQoIlVSTCIpOwotICAgICAgICByZXN1bHRzLmFkZCgidGV4dC91cmktbGlzdCIpOwor
ICAgICAgICByZXN1bHRzLmFwcGVuZCgiVVJMIik7CisgICAgICAgIHJlc3VsdHMuYXBwZW5kKCJ0
ZXh0L3VyaS1saXN0Iik7CiAgICAgfQogCiAgICAgaWYgKGZvcm1hdC5jZkZvcm1hdCA9PSBwbGFp
blRleHRXRm9ybWF0KCktPmNmRm9ybWF0IHx8IGZvcm1hdC5jZkZvcm1hdCA9PSBwbGFpblRleHRG
b3JtYXQoKS0+Y2ZGb3JtYXQpIHsKLSAgICAgICAgcmVzdWx0cy5hZGQoIlRleHQiKTsKLSAgICAg
ICAgcmVzdWx0cy5hZGQoInRleHQvcGxhaW4iKTsKKyAgICAgICAgcmVzdWx0cy5hcHBlbmQoIlRl
eHQiKTsKKyAgICAgICAgcmVzdWx0cy5hcHBlbmQoInRleHQvcGxhaW4iKTsKICAgICB9CiB9CiAK
IC8vIGV4dGVuc2lvbnMgYmV5b25kIElFJ3MgQVBJCi1IYXNoU2V0PFN0cmluZz4gQ2xpcGJvYXJk
V2luOjp0eXBlcygpIGNvbnN0CitWZWN0b3I8U3RyaW5nPiBDbGlwYm9hcmRXaW46OnR5cGVzKCkg
Y29uc3QKIHsgCi0gICAgSGFzaFNldDxTdHJpbmc+IHJlc3VsdHM7IAorICAgIFZlY3RvcjxTdHJp
bmc+IHJlc3VsdHM7CiAgICAgaWYgKHBvbGljeSgpICE9IENsaXBib2FyZFJlYWRhYmxlICYmIHBv
bGljeSgpICE9IENsaXBib2FyZFR5cGVzUmVhZGFibGUpCiAgICAgICAgIHJldHVybiByZXN1bHRz
OwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS93aW4vQ2xpcGJvYXJkV2luLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vd2luL0NsaXBib2FyZFdpbi5oCShy
ZXZpc2lvbiAxMjYzNjcpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS93aW4vQ2xpcGJvYXJk
V2luLmgJKHdvcmtpbmcgY29weSkKQEAgLTY0LDcgKzY0LDcgQEAgcHVibGljOgogICAgIGJvb2wg
c2V0RGF0YShjb25zdCBTdHJpbmcmIHR5cGUsIGNvbnN0IFN0cmluZyYgZGF0YSk7CiAKICAgICAv
LyBleHRlbnNpb25zIGJleW9uZCBJRSdzIEFQSQotICAgIHZpcnR1YWwgSGFzaFNldDxTdHJpbmc+
IHR5cGVzKCkgY29uc3Q7CisgICAgdmlydHVhbCBWZWN0b3I8U3RyaW5nPiB0eXBlcygpIGNvbnN0
OwogICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxGaWxlTGlzdD4gZmlsZXMoKSBjb25zdDsKIAogICAg
IHZvaWQgc2V0RHJhZ0ltYWdlKENhY2hlZEltYWdlKiwgY29uc3QgSW50UG9pbnQmKTsKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3d4L0NsaXBib2FyZFd4LmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS93eC9DbGlwYm9hcmRXeC5jcHAJKHJldmlzaW9uIDEy
NjM2NykKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3d4L0NsaXBib2FyZFd4LmNwcAkod29y
a2luZyBjb3B5KQpAQCAtNzIsMTAgKzcyLDEwIEBAIGJvb2wgQ2xpcGJvYXJkV3g6OnNldERhdGEo
Y29uc3QgU3RyaW5nJiAKIH0KIAogLy8gZXh0ZW5zaW9ucyBiZXlvbmQgSUUncyBBUEkKLUhhc2hT
ZXQ8U3RyaW5nPiBDbGlwYm9hcmRXeDo6dHlwZXMoKSBjb25zdCAKK1ZlY3RvcjxTdHJpbmc+IENs
aXBib2FyZFd4Ojp0eXBlcygpIGNvbnN0CiB7CiAgICAgbm90SW1wbGVtZW50ZWQoKTsKLSAgICBI
YXNoU2V0PFN0cmluZz4gcmVzdWx0OworICAgIFZlY3RvcjxTdHJpbmc+IHJlc3VsdDsKICAgICBy
ZXR1cm4gcmVzdWx0OwogfQogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS93eC9DbGlw
Ym9hcmRXeC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3d4L0NsaXBi
b2FyZFd4LmgJKHJldmlzaW9uIDEyNjM2NykKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3d4
L0NsaXBib2FyZFd4LmgJKHdvcmtpbmcgY29weSkKQEAgLTQ2LDcgKzQ2LDcgQEAgbmFtZXNwYWNl
IFdlYkNvcmUgewogICAgICAgICBib29sIHNldERhdGEoY29uc3QgU3RyaW5nJiB0eXBlLCBjb25z
dCBTdHJpbmcmIGRhdGEpOwogICAgIAogICAgICAgICAvLyBleHRlbnNpb25zIGJleW9uZCBJRSdz
IEFQSQotICAgICAgICB2aXJ0dWFsIEhhc2hTZXQ8U3RyaW5nPiB0eXBlcygpIGNvbnN0OworICAg
ICAgICB2aXJ0dWFsIFZlY3RvcjxTdHJpbmc+IHR5cGVzKCkgY29uc3Q7CiAgICAgICAgIHZpcnR1
YWwgUGFzc1JlZlB0cjxGaWxlTGlzdD4gZmlsZXMoKSBjb25zdDsKICAgICAKICAgICAgICAgSW50
UG9pbnQgZHJhZ0xvY2F0aW9uKCkgY29uc3Q7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>186932</attachid>
            <date>2013-02-06 15:19:56 -0800</date>
            <delta_ts>2013-02-08 15:39:47 -0800</delta_ts>
            <desc>updated_patch</desc>
            <filename>clipboard_002.diff</filename>
            <type>text/plain</type>
            <size>20022</size>
            <attacher name="Vineet Chaudhary (vineetc)">code.vineet</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDE0MjA0MCkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDQ3IEBACisyMDEzLTAyLTA2ICAgVmluZWV0
IENoYXVkaGFyeSAgPHJnZjc0OEBtb3Rvcm9sYS5jb20+CisKKyAgICAgICAgQ29uc2lkZXIgcmVw
bGFjaW5nIHJldHVybiB0eXBlIG9mIENsaXBib2FyZDo6dHlwZXMoKSBmcm9tIExpc3RIYXNoU2V0
PFN0cmluZz4gdG8gVmVjdG9yPFN0cmluZz4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTgyODg4CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChP
T1BTISkuCisKKyAgICAgICAgQXMgcGFydCBvZiByZW1vdmluZyBjdXN0b20gYmluZGluZ3Mgb2Yg
dHlwZXMgQXJyYXkgQ2xpcGJvYXJkOjp0eXBlcygpIG5lZWRzIHRvIHJldHVybgorICAgICAgICBW
ZWN0b3I8U3RyaW5nPiB0aGFuIExpc3RIYXNoU2V0PFN0cmluZz4KKworICAgICAgICBObyBuZXcg
dGVzdHMuIEV4aXN0aW5nIHRlc3Qgc2hvdWxkIHBhc3Mgd2l0aCB0aGlzIGNoYW5nZSBhcyBubyBi
ZWhhdm91cmFsIGNoYW5nZXMuCisKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU0NsaXBib2FyZEN1
c3RvbS5jcHA6IFJlcGxhY2UgZGF0YSB0eXBlIGZyb20gTGlzdEhhc2hTZXQ8PiB0byBWZWN0b3I8
Pi4KKyAgICAgICAgKFdlYkNvcmU6OkpTQ2xpcGJvYXJkOjp0eXBlcyk6CisgICAgICAgICogYmlu
ZGluZ3MvdjgvY3VzdG9tL1Y4Q2xpcGJvYXJkQ3VzdG9tLmNwcDogRGl0dG8uCisgICAgICAgIChX
ZWJDb3JlOjpWOENsaXBib2FyZDo6dHlwZXNBY2Nlc3NvckdldHRlcik6IERpdHRvLgorICAgICAg
ICAqIGRvbS9DbGlwYm9hcmQuaDogRGl0dG8uCisgICAgICAgICogcGxhdGZvcm0vYmxhY2tiZXJy
eS9DbGlwYm9hcmRCbGFja0JlcnJ5LmNwcDogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpDbGlw
Ym9hcmRCbGFja0JlcnJ5Ojp0eXBlcyk6CisgICAgICAgICogcGxhdGZvcm0vYmxhY2tiZXJyeS9D
bGlwYm9hcmRCbGFja0JlcnJ5Lmg6IERpdHRvLgorICAgICAgICAqIHBsYXRmb3JtL2Nocm9taXVt
L0Nocm9taXVtRGF0YU9iamVjdC5jcHA6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6Q2hyb21p
dW1EYXRhT2JqZWN0Ojp0eXBlcyk6CisgICAgICAgICogcGxhdGZvcm0vY2hyb21pdW0vQ2hyb21p
dW1EYXRhT2JqZWN0Lmg6IERpdHRvLgorICAgICAgICAqIHBsYXRmb3JtL2Nocm9taXVtL0NsaXBi
b2FyZENocm9taXVtLmNwcDogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpDbGlwYm9hcmRDaHJv
bWl1bTo6dHlwZXMpOgorICAgICAgICAqIHBsYXRmb3JtL2Nocm9taXVtL0NsaXBib2FyZENocm9t
aXVtLmg6IERpdHRvLgorICAgICAgICAqIHBsYXRmb3JtL2VmbC9DbGlwYm9hcmRFZmwuY3BwOiBE
aXR0by4KKyAgICAgICAgKFdlYkNvcmU6OkNsaXBib2FyZEVmbDo6dHlwZXMpOgorICAgICAgICAq
IHBsYXRmb3JtL2VmbC9DbGlwYm9hcmRFZmwuaDogRGl0dG8uCisgICAgICAgICogcGxhdGZvcm0v
Z3RrL0NsaXBib2FyZEd0ay5jcHA6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6Q2xpcGJvYXJk
R3RrOjp0eXBlcyk6CisgICAgICAgICogcGxhdGZvcm0vZ3RrL0NsaXBib2FyZEd0ay5oOiBEaXR0
by4KKyAgICAgICAgKiBwbGF0Zm9ybS9tYWMvQ2xpcGJvYXJkTWFjLmg6IERpdHRvLgorICAgICAg
ICAqIHBsYXRmb3JtL21hYy9DbGlwYm9hcmRNYWMubW06IERpdHRvLgorICAgICAgICAoV2ViQ29y
ZTo6YWRkSFRNTENsaXBib2FyZFR5cGVzRm9yQ29jb2FUeXBlKToKKyAgICAgICAgKFdlYkNvcmU6
OkNsaXBib2FyZE1hYzo6dHlwZXMpOgorICAgICAgICAqIHBsYXRmb3JtL3F0L0NsaXBib2FyZFF0
LmNwcDogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpDbGlwYm9hcmRRdDo6dHlwZXMpOgorICAg
ICAgICAqIHBsYXRmb3JtL3F0L0NsaXBib2FyZFF0Lmg6IERpdHRvLgorICAgICAgICAqIHBsYXRm
b3JtL3dpbi9DbGlwYm9hcmRXaW4uY3BwOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OmFkZE1p
bWVUeXBlc0ZvckZvcm1hdCk6CisgICAgICAgIChXZWJDb3JlOjpDbGlwYm9hcmRXaW46OnR5cGVz
KToKKyAgICAgICAgKiBwbGF0Zm9ybS93aW4vQ2xpcGJvYXJkV2luLmg6IERpdHRvLgorCiAyMDEz
LTAyLTA2ICBNYXJrIExhbSAgPG1hcmsubGFtQGFwcGxlLmNvbT4KIAogICAgICAgICBGaXggYnJv
a2VuIHJlbGVhc2UgYnVpbGRzLCBncmVlbmluZyB0aGUgYm90cy4KSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL2pzL0pTQ2xpcGJvYXJkQ3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0NsaXBib2FyZEN1c3RvbS5jcHAJKHJldmlzaW9uIDE0
MjAxMSkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTQ2xpcGJvYXJkQ3VzdG9tLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtNTEsMTMgKzUxLDEzIEBAIEpTVmFsdWUgSlNDbGlwYm9hcmQ6
OnR5cGVzKEV4ZWNTdGF0ZSogZXgKIHsKICAgICBDbGlwYm9hcmQqIGNsaXBib2FyZCA9IGltcGwo
KTsKIAotICAgIExpc3RIYXNoU2V0PFN0cmluZz4gdHlwZXMgPSBjbGlwYm9hcmQtPnR5cGVzKCk7
CisgICAgVmVjdG9yPFN0cmluZz4gdHlwZXMgPSBjbGlwYm9hcmQtPnR5cGVzKCk7CiAgICAgaWYg
KHR5cGVzLmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuIGpzTnVsbCgpOwogCiAgICAgTWFya2Vk
QXJndW1lbnRCdWZmZXIgbGlzdDsKLSAgICBMaXN0SGFzaFNldDxTdHJpbmc+Ojpjb25zdF9pdGVy
YXRvciBlbmQgPSB0eXBlcy5lbmQoKTsKLSAgICBmb3IgKExpc3RIYXNoU2V0PFN0cmluZz46OmNv
bnN0X2l0ZXJhdG9yIGl0ID0gdHlwZXMuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KQorICAgIFZl
Y3RvcjxTdHJpbmc+Ojpjb25zdF9pdGVyYXRvciBlbmQgPSB0eXBlcy5lbmQoKTsKKyAgICBmb3Ig
KFZlY3RvcjxTdHJpbmc+Ojpjb25zdF9pdGVyYXRvciBpdCA9IHR5cGVzLmJlZ2luKCk7IGl0ICE9
IGVuZDsgKytpdCkKICAgICAgICAgbGlzdC5hcHBlbmQoanNTdHJpbmdXaXRoQ2FjaGUoZXhlYywg
Kml0KSk7CiAgICAgcmV0dXJuIGNvbnN0cnVjdEFycmF5KGV4ZWMsIDAsIGdsb2JhbE9iamVjdCgp
LCBsaXN0KTsKIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOENs
aXBib2FyZEN1c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
djgvY3VzdG9tL1Y4Q2xpcGJvYXJkQ3VzdG9tLmNwcAkocmV2aXNpb24gMTQyMDExKQorKysgU291
cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4Q2xpcGJvYXJkQ3VzdG9tLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtNDcsMTQgKzQ3LDE0IEBAIHY4OjpIYW5kbGU8djg6OlZhbHVlPiBWOENs
aXBib2FyZDo6dHlwZXMKIHsKICAgICBDbGlwYm9hcmQqIGNsaXBib2FyZCA9IFY4Q2xpcGJvYXJk
Ojp0b05hdGl2ZShpbmZvLkhvbGRlcigpKTsKIAotICAgIExpc3RIYXNoU2V0PFN0cmluZz4gdHlw
ZXMgPSBjbGlwYm9hcmQtPnR5cGVzKCk7CisgICAgVmVjdG9yPFN0cmluZz4gdHlwZXMgPSBjbGlw
Ym9hcmQtPnR5cGVzKCk7CiAgICAgaWYgKHR5cGVzLmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJu
IHY4TnVsbChpbmZvLkdldElzb2xhdGUoKSk7CiAKICAgICB2ODo6TG9jYWw8djg6OkFycmF5PiBy
ZXN1bHQgPSB2ODo6QXJyYXk6Ok5ldyh0eXBlcy5zaXplKCkpOwotICAgIExpc3RIYXNoU2V0PFN0
cmluZz46OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IHR5cGVzLmVuZCgpOworICAgIFZlY3RvcjxTdHJp
bmc+Ojpjb25zdF9pdGVyYXRvciBlbmQgPSB0eXBlcy5lbmQoKTsKICAgICBpbnQgaW5kZXggPSAw
OwotICAgIGZvciAoTGlzdEhhc2hTZXQ8U3RyaW5nPjo6Y29uc3RfaXRlcmF0b3IgaXQgPSB0eXBl
cy5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQsICsraW5kZXgpCisgICAgZm9yIChWZWN0b3I8U3Ry
aW5nPjo6Y29uc3RfaXRlcmF0b3IgaXQgPSB0eXBlcy5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQs
ICsraW5kZXgpCiAgICAgICAgIHJlc3VsdC0+U2V0KHY4SW50ZWdlcihpbmRleCwgaW5mby5HZXRJ
c29sYXRlKCkpLCB2OFN0cmluZygqaXQsIGluZm8uR2V0SXNvbGF0ZSgpKSk7CiAKICAgICByZXR1
cm4gcmVzdWx0OwpJbmRleDogU291cmNlL1dlYkNvcmUvZG9tL0NsaXBib2FyZC5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2RvbS9DbGlwYm9hcmQuaAkocmV2aXNpb24gMTQyMDExKQor
KysgU291cmNlL1dlYkNvcmUvZG9tL0NsaXBib2FyZC5oCSh3b3JraW5nIGNvcHkpCkBAIC02Niw3
ICs2Niw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgdmlydHVhbCBib29sIHNldERh
dGEoY29uc3QgU3RyaW5nJiB0eXBlLCBjb25zdCBTdHJpbmcmIGRhdGEpID0gMDsKICAgICAKICAg
ICAgICAgLy8gZXh0ZW5zaW9ucyBiZXlvbmQgSUUncyBBUEkKLSAgICAgICAgdmlydHVhbCBMaXN0
SGFzaFNldDxTdHJpbmc+IHR5cGVzKCkgY29uc3QgPSAwOworICAgICAgICB2aXJ0dWFsIFZlY3Rv
cjxTdHJpbmc+IHR5cGVzKCkgY29uc3QgPSAwOwogICAgICAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8
RmlsZUxpc3Q+IGZpbGVzKCkgY29uc3QgPSAwOwogCiAgICAgICAgIEludFBvaW50IGRyYWdMb2Nh
dGlvbigpIGNvbnN0IHsgcmV0dXJuIG1fZHJhZ0xvYzsgfQpJbmRleDogU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vYmxhY2tiZXJyeS9DbGlwYm9hcmRCbGFja0JlcnJ5LmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ibGFja2JlcnJ5L0NsaXBib2FyZEJsYWNrQmVycnku
Y3BwCShyZXZpc2lvbiAxNDIwMTEpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ibGFja2Jl
cnJ5L0NsaXBib2FyZEJsYWNrQmVycnkuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03OCwxNiArNzgs
MTYgQEAgYm9vbCBDbGlwYm9hcmRCbGFja0JlcnJ5OjpzZXREYXRhKGNvbnN0CiAgICAgcmV0dXJu
IHRydWU7CiB9CiAKLUxpc3RIYXNoU2V0PFN0cmluZz4gQ2xpcGJvYXJkQmxhY2tCZXJyeTo6dHlw
ZXMoKSBjb25zdAorVmVjdG9yPFN0cmluZz4gQ2xpcGJvYXJkQmxhY2tCZXJyeTo6dHlwZXMoKSBj
b25zdAogewogICAgIGlmIChwb2xpY3koKSAhPSBDbGlwYm9hcmRSZWFkYWJsZSAmJiBwb2xpY3ko
KSAhPSBDbGlwYm9hcmRUeXBlc1JlYWRhYmxlKQotICAgICAgICByZXR1cm4gTGlzdEhhc2hTZXQ8
U3RyaW5nPigpOworICAgICAgICByZXR1cm4gVmVjdG9yPFN0cmluZz4oKTsKIAogICAgIC8vIFdl
IHVzZSBoYXJkY29kZWQgbGlzdCBoZXJlIHNpbmNlIHRoZXJlIHNlZW1zIHRvIGJlIG5vIEFQSSB0
byBnZXQgdGhlIGxpc3QuCi0gICAgTGlzdEhhc2hTZXQ8U3RyaW5nPiByZXQ7Ci0gICAgcmV0LmFk
ZCgidGV4dC9wbGFpbiIpOwotICAgIHJldC5hZGQoInRleHQvaHRtbCIpOwotICAgIHJldC5hZGQo
InRleHQvdXJsIik7CisgICAgVmVjdG9yPFN0cmluZz4gcmV0OworICAgIHJldC5hcHBlbmQoQVND
SUlMaXRlcmFsKCJ0ZXh0L3BsYWluIikpOworICAgIHJldC5hcHBlbmQoQVNDSUlMaXRlcmFsKCJ0
ZXh0L2h0bWwiKSk7CisgICAgcmV0LmFwcGVuZChBU0NJSUxpdGVyYWwoInRleHQvdXJsIikpOwog
ICAgIHJldHVybiByZXQ7CiB9CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2JsYWNr
YmVycnkvQ2xpcGJvYXJkQmxhY2tCZXJyeS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2JsYWNrYmVycnkvQ2xpcGJvYXJkQmxhY2tCZXJyeS5oCShyZXZpc2lvbiAxNDIw
MTEpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ibGFja2JlcnJ5L0NsaXBib2FyZEJsYWNr
QmVycnkuaAkod29ya2luZyBjb3B5KQpAQCAtMzksNyArMzksNyBAQCBwdWJsaWM6CiAgICAgYm9v
bCBzZXREYXRhKGNvbnN0IFN0cmluZyYgdHlwZSwgY29uc3QgU3RyaW5nJiBkYXRhKTsKIAogICAg
IC8vIGV4dGVuc2lvbnMgYmV5b25kIElFJ3MgQVBJCi0gICAgdmlydHVhbCBMaXN0SGFzaFNldDxT
dHJpbmc+IHR5cGVzKCkgY29uc3Q7CisgICAgdmlydHVhbCBWZWN0b3I8U3RyaW5nPiB0eXBlcygp
IGNvbnN0OwogICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxGaWxlTGlzdD4gZmlsZXMoKSBjb25zdDsK
ICAgICB2aXJ0dWFsIERyYWdJbWFnZVJlZiBjcmVhdGVEcmFnSW1hZ2UoSW50UG9pbnQmKSBjb25z
dDsKICAgICB2aXJ0dWFsIHZvaWQgZGVjbGFyZUFuZFdyaXRlRHJhZ0ltYWdlKEVsZW1lbnQqLCBj
b25zdCBLVVJMJiwgY29uc3QgU3RyaW5nJiB0aXRsZSwgRnJhbWUqKTsKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2Nocm9taXVtL0Nocm9taXVtRGF0YU9iamVjdC5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY2hyb21pdW0vQ2hyb21pdW1EYXRhT2JqZWN0
LmNwcAkocmV2aXNpb24gMTQyMDExKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY2hyb21p
dW0vQ2hyb21pdW1EYXRhT2JqZWN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTI2LDIwICsxMjYs
MjAgQEAgdm9pZCBDaHJvbWl1bURhdGFPYmplY3Q6OmNsZWFyQWxsRXhjZXB0RgogICAgIH0KIH0K
IAotTGlzdEhhc2hTZXQ8U3RyaW5nPiBDaHJvbWl1bURhdGFPYmplY3Q6OnR5cGVzKCkgY29uc3QK
K1ZlY3RvcjxTdHJpbmc+IENocm9taXVtRGF0YU9iamVjdDo6dHlwZXMoKSBjb25zdAogewotICAg
IExpc3RIYXNoU2V0PFN0cmluZz4gcmVzdWx0czsKKyAgICBWZWN0b3I8U3RyaW5nPiByZXN1bHRz
OwogICAgIGJvb2wgY29udGFpbnNGaWxlcyA9IGZhbHNlOwogICAgIGZvciAoc2l6ZV90IGkgPSAw
OyBpIDwgbV9pdGVtTGlzdC5zaXplKCk7ICsraSkgewogICAgICAgICBpZiAobV9pdGVtTGlzdFtp
XS0+a2luZCgpID09IERhdGFUcmFuc2Zlckl0ZW06OmtpbmRTdHJpbmcpCi0gICAgICAgICAgICBy
ZXN1bHRzLmFkZChtX2l0ZW1MaXN0W2ldLT50eXBlKCkpOworICAgICAgICAgICAgcmVzdWx0cy5h
cHBlbmQobV9pdGVtTGlzdFtpXS0+dHlwZSgpKTsKICAgICAgICAgZWxzZSBpZiAobV9pdGVtTGlz
dFtpXS0+a2luZCgpID09IERhdGFUcmFuc2Zlckl0ZW06OmtpbmRGaWxlKQogICAgICAgICAgICAg
Y29udGFpbnNGaWxlcyA9IHRydWU7CiAgICAgICAgIGVsc2UKICAgICAgICAgICAgIEFTU0VSVF9O
T1RfUkVBQ0hFRCgpOwogICAgIH0KICAgICBpZiAoY29udGFpbnNGaWxlcykKLSAgICAgICAgcmVz
dWx0cy5hZGQobWltZVR5cGVGaWxlcyk7CisgICAgICAgIHJlc3VsdHMuYXBwZW5kKEFTQ0lJTGl0
ZXJhbChtaW1lVHlwZUZpbGVzKSk7CiAgICAgcmV0dXJuIHJlc3VsdHM7CiB9CiAKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2Nocm9taXVtL0Nocm9taXVtRGF0YU9iamVjdC5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2Nocm9taXVtL0Nocm9taXVtRGF0YU9i
amVjdC5oCShyZXZpc2lvbiAxNDIwMTEpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jaHJv
bWl1bS9DaHJvbWl1bURhdGFPYmplY3QuaAkod29ya2luZyBjb3B5KQpAQCAtNjksNyArNjksNyBA
QCBwdWJsaWM6CiAgICAgdm9pZCBjbGVhckRhdGEoY29uc3QgU3RyaW5nJiB0eXBlKTsKICAgICB2
b2lkIGNsZWFyQWxsRXhjZXB0RmlsZXMoKTsKIAotICAgIExpc3RIYXNoU2V0PFN0cmluZz4gdHlw
ZXMoKSBjb25zdDsKKyAgICBWZWN0b3I8U3RyaW5nPiB0eXBlcygpIGNvbnN0OwogICAgIFN0cmlu
ZyBnZXREYXRhKGNvbnN0IFN0cmluZyYgdHlwZSkgY29uc3Q7CiAgICAgYm9vbCBzZXREYXRhKGNv
bnN0IFN0cmluZyYgdHlwZSwgY29uc3QgU3RyaW5nJiBkYXRhKTsKIApJbmRleDogU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vY2hyb21pdW0vQ2xpcGJvYXJkQ2hyb21pdW0uY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2Nocm9taXVtL0NsaXBib2FyZENocm9taXVtLmNw
cAkocmV2aXNpb24gMTQyMDExKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY2hyb21pdW0v
Q2xpcGJvYXJkQ2hyb21pdW0uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNzUsMTAgKzI3NSwxMCBA
QCBib29sIENsaXBib2FyZENocm9taXVtOjpzZXREYXRhKGNvbnN0IFN0CiB9CiAKIC8vIGV4dGVu
c2lvbnMgYmV5b25kIElFJ3MgQVBJCi1MaXN0SGFzaFNldDxTdHJpbmc+IENsaXBib2FyZENocm9t
aXVtOjp0eXBlcygpIGNvbnN0CitWZWN0b3I8U3RyaW5nPiBDbGlwYm9hcmRDaHJvbWl1bTo6dHlw
ZXMoKSBjb25zdAogewogICAgIGlmIChwb2xpY3koKSAhPSBDbGlwYm9hcmRSZWFkYWJsZSAmJiBw
b2xpY3koKSAhPSBDbGlwYm9hcmRUeXBlc1JlYWRhYmxlKQotICAgICAgICByZXR1cm4gTGlzdEhh
c2hTZXQ8U3RyaW5nPigpOworICAgICAgICByZXR1cm4gVmVjdG9yPFN0cmluZz4oKTsKIAogICAg
IHJldHVybiBtX2RhdGFPYmplY3QtPnR5cGVzKCk7CiB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9jaHJvbWl1bS9DbGlwYm9hcmRDaHJvbWl1bS5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2Nocm9taXVtL0NsaXBib2FyZENocm9taXVtLmgJKHJldmlzaW9u
IDE0MjAxMSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2Nocm9taXVtL0NsaXBib2FyZENo
cm9taXVtLmgJKHdvcmtpbmcgY29weSkKQEAgLTg0LDcgKzg0LDcgQEAgbmFtZXNwYWNlIFdlYkNv
cmUgewogICAgICAgICBib29sIHBsYXRmb3JtQ2xpcGJvYXJkQ2hhbmdlZCgpIGNvbnN0OwogCiAg
ICAgICAgIC8vIGV4dGVuc2lvbnMgYmV5b25kIElFJ3MgQVBJCi0gICAgICAgIHZpcnR1YWwgTGlz
dEhhc2hTZXQ8U3RyaW5nPiB0eXBlcygpIGNvbnN0OworICAgICAgICB2aXJ0dWFsIFZlY3RvcjxT
dHJpbmc+IHR5cGVzKCkgY29uc3Q7CiAgICAgICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxGaWxlTGlz
dD4gZmlsZXMoKSBjb25zdDsKIAogICAgICAgICB2b2lkIHNldERyYWdJbWFnZShDYWNoZWRJbWFn
ZSosIGNvbnN0IEludFBvaW50Jik7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9lZmwv
Q2xpcGJvYXJkRWZsLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9l
ZmwvQ2xpcGJvYXJkRWZsLmNwcAkocmV2aXNpb24gMTQyMDExKQorKysgU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZWZsL0NsaXBib2FyZEVmbC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTc2LDEwICs3
NiwxMCBAQCBib29sIENsaXBib2FyZEVmbDo6c2V0RGF0YShjb25zdCBTdHJpbmcmCiAgICAgcmV0
dXJuIGZhbHNlOwogfQogCi1MaXN0SGFzaFNldDxTdHJpbmc+IENsaXBib2FyZEVmbDo6dHlwZXMo
KSBjb25zdAorVmVjdG9yPFN0cmluZz4gQ2xpcGJvYXJkRWZsOjp0eXBlcygpIGNvbnN0CiB7CiAg
ICAgbm90SW1wbGVtZW50ZWQoKTsKLSAgICByZXR1cm4gTGlzdEhhc2hTZXQ8U3RyaW5nPigpOwor
ICAgIHJldHVybiBWZWN0b3I8U3RyaW5nPigpOwogfQogCiBQYXNzUmVmUHRyPEZpbGVMaXN0PiBD
bGlwYm9hcmRFZmw6OmZpbGVzKCkgY29uc3QKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2VmbC9DbGlwYm9hcmRFZmwuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9lZmwvQ2xpcGJvYXJkRWZsLmgJKHJldmlzaW9uIDE0MjAxMSkKKysrIFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2VmbC9DbGlwYm9hcmRFZmwuaAkod29ya2luZyBjb3B5KQpAQCAtMzksNyArMzks
NyBAQCBwdWJsaWM6CiAgICAgU3RyaW5nIGdldERhdGEoY29uc3QgU3RyaW5nJikgY29uc3Q7CiAg
ICAgYm9vbCBzZXREYXRhKGNvbnN0IFN0cmluZyYsIGNvbnN0IFN0cmluZyYpOwogCi0gICAgTGlz
dEhhc2hTZXQ8U3RyaW5nPiB0eXBlcygpIGNvbnN0OworICAgIFZlY3RvcjxTdHJpbmc+IHR5cGVz
KCkgY29uc3Q7CiAgICAgdmlydHVhbCBQYXNzUmVmUHRyPEZpbGVMaXN0PiBmaWxlcygpIGNvbnN0
OwogCiAgICAgSW50UG9pbnQgZHJhZ0xvY2F0aW9uKCkgY29uc3Q7CkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ndGsvQ2xpcGJvYXJkR3RrLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ndGsvQ2xpcGJvYXJkR3RrLmNwcAkocmV2aXNpb24gMTQyMDExKQor
KysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL0NsaXBib2FyZEd0ay5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTE4OCwzMSArMTg4LDMxIEBAIGJvb2wgQ2xpcGJvYXJkR3RrOjpzZXREYXRhKGNv
bnN0IFN0cmluZyYKICAgICByZXR1cm4gc3VjY2VzczsKIH0KIAotTGlzdEhhc2hTZXQ8U3RyaW5n
PiBDbGlwYm9hcmRHdGs6OnR5cGVzKCkgY29uc3QKK1ZlY3RvcjxTdHJpbmc+IENsaXBib2FyZEd0
azo6dHlwZXMoKSBjb25zdAogewogICAgIGlmIChwb2xpY3koKSAhPSBDbGlwYm9hcmRSZWFkYWJs
ZSAmJiBwb2xpY3koKSAhPSBDbGlwYm9hcmRUeXBlc1JlYWRhYmxlKQotICAgICAgICByZXR1cm4g
TGlzdEhhc2hTZXQ8U3RyaW5nPigpOworICAgICAgICByZXR1cm4gVmVjdG9yPFN0cmluZz4oKTsK
IAogICAgIGlmIChtX2NsaXBib2FyZCkKICAgICAgICAgUGFzdGVib2FyZEhlbHBlcjo6ZGVmYXVs
dFBhc3RlYm9hcmRIZWxwZXIoKS0+Z2V0Q2xpcGJvYXJkQ29udGVudHMobV9jbGlwYm9hcmQpOwog
Ci0gICAgTGlzdEhhc2hTZXQ8U3RyaW5nPiB0eXBlczsKKyAgICBWZWN0b3I8U3RyaW5nPiB0eXBl
czsKICAgICBpZiAobV9kYXRhT2JqZWN0LT5oYXNUZXh0KCkpIHsKLSAgICAgICAgdHlwZXMuYWRk
KCJ0ZXh0L3BsYWluIik7Ci0gICAgICAgIHR5cGVzLmFkZCgiVGV4dCIpOwotICAgICAgICB0eXBl
cy5hZGQoInRleHQiKTsKKyAgICAgICAgdHlwZXMuYXBwZW5kKEFTQ0lJTGl0ZXJhbCgidGV4dC9w
bGFpbiIpKTsKKyAgICAgICAgdHlwZXMuYXBwZW5kKEFTQ0lJTGl0ZXJhbCgiVGV4dCIpKTsKKyAg
ICAgICAgdHlwZXMuYXBwZW5kKEFTQ0lJTGl0ZXJhbCgidGV4dCIpKTsKICAgICB9CiAKICAgICBp
ZiAobV9kYXRhT2JqZWN0LT5oYXNNYXJrdXAoKSkKLSAgICAgICAgdHlwZXMuYWRkKCJ0ZXh0L2h0
bWwiKTsKKyAgICAgICAgdHlwZXMuYXBwZW5kKEFTQ0lJTGl0ZXJhbCgidGV4dC9odG1sIikpOwog
CiAgICAgaWYgKG1fZGF0YU9iamVjdC0+aGFzVVJJTGlzdCgpKSB7Ci0gICAgICAgIHR5cGVzLmFk
ZCgidGV4dC91cmktbGlzdCIpOwotICAgICAgICB0eXBlcy5hZGQoIlVSTCIpOworICAgICAgICB0
eXBlcy5hcHBlbmQoQVNDSUlMaXRlcmFsKCJ0ZXh0L3VyaS1saXN0IikpOworICAgICAgICB0eXBl
cy5hcHBlbmQoQVNDSUlMaXRlcmFsKCJVUkwiKSk7CiAgICAgfQogCiAgICAgaWYgKG1fZGF0YU9i
amVjdC0+aGFzRmlsZW5hbWVzKCkpCi0gICAgICAgIHR5cGVzLmFkZCgiRmlsZXMiKTsKKyAgICAg
ICAgdHlwZXMuYXBwZW5kKEFTQ0lJTGl0ZXJhbCgiRmlsZXMiKSk7CiAKICAgICByZXR1cm4gdHlw
ZXM7CiB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvQ2xpcGJvYXJkR3RrLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL0NsaXBib2FyZEd0ay5o
CShyZXZpc2lvbiAxNDIwMTEpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvQ2xpcGJv
YXJkR3RrLmgJKHdvcmtpbmcgY29weSkKQEAgLTU3LDcgKzU3LDcgQEAgbmFtZXNwYWNlIFdlYkNv
cmUgewogICAgICAgICBTdHJpbmcgZ2V0RGF0YShjb25zdCBTdHJpbmcmKSBjb25zdDsKICAgICAg
ICAgYm9vbCBzZXREYXRhKGNvbnN0IFN0cmluZyYsIGNvbnN0IFN0cmluZyYpOwogCi0gICAgICAg
IHZpcnR1YWwgTGlzdEhhc2hTZXQ8U3RyaW5nPiB0eXBlcygpIGNvbnN0OworICAgICAgICB2aXJ0
dWFsIFZlY3RvcjxTdHJpbmc+IHR5cGVzKCkgY29uc3Q7CiAgICAgICAgIHZpcnR1YWwgUGFzc1Jl
ZlB0cjxGaWxlTGlzdD4gZmlsZXMoKSBjb25zdDsKIAogICAgICAgICB2b2lkIHNldERyYWdJbWFn
ZShDYWNoZWRJbWFnZSosIGNvbnN0IEludFBvaW50Jik7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9tYWMvQ2xpcGJvYXJkTWFjLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vbWFjL0NsaXBib2FyZE1hYy5oCShyZXZpc2lvbiAxNDIwMTEpCisrKyBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9tYWMvQ2xpcGJvYXJkTWFjLmgJKHdvcmtpbmcgY29weSkKQEAgLTYy
LDcgKzYyLDcgQEAgcHVibGljOgogICAgIHZpcnR1YWwgYm9vbCBoYXNEYXRhKCk7CiAgICAgCiAg
ICAgLy8gZXh0ZW5zaW9ucyBiZXlvbmQgSUUncyBBUEkKLSAgICB2aXJ0dWFsIExpc3RIYXNoU2V0
PFN0cmluZz4gdHlwZXMoKSBjb25zdDsKKyAgICB2aXJ0dWFsIFZlY3RvcjxTdHJpbmc+IHR5cGVz
KCkgY29uc3Q7CiAgICAgdmlydHVhbCBQYXNzUmVmUHRyPEZpbGVMaXN0PiBmaWxlcygpIGNvbnN0
OwogCiAgICAgdm9pZCBzZXREcmFnSW1hZ2UoQ2FjaGVkSW1hZ2UqLCBjb25zdCBJbnRQb2ludCYp
OwpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWFjL0NsaXBib2FyZE1hYy5tbQo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tYWMvQ2xpcGJvYXJkTWFjLm1tCShy
ZXZpc2lvbiAxNDIwMTEpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tYWMvQ2xpcGJvYXJk
TWFjLm1tCSh3b3JraW5nIGNvcHkpCkBAIC0xMTgsMTUgKzExOCwxNSBAQCBzdGF0aWMgU3RyaW5n
IHV0aVR5cGVGcm9tQ29jb2FUeXBlKGNvbnN0CiAgICAgcmV0dXJuIFN0cmluZygpOwogfQogCi1z
dGF0aWMgdm9pZCBhZGRIVE1MQ2xpcGJvYXJkVHlwZXNGb3JDb2NvYVR5cGUoTGlzdEhhc2hTZXQ8
U3RyaW5nPiYgcmVzdWx0VHlwZXMsIGNvbnN0IFN0cmluZyYgY29jb2FUeXBlLCBjb25zdCBTdHJp
bmcmIHBhc3RlYm9hcmROYW1lKQorc3RhdGljIHZvaWQgYWRkSFRNTENsaXBib2FyZFR5cGVzRm9y
Q29jb2FUeXBlKFZlY3RvcjxTdHJpbmc+JiByZXN1bHRUeXBlcywgY29uc3QgU3RyaW5nJiBjb2Nv
YVR5cGUsIGNvbnN0IFN0cmluZyYgcGFzdGVib2FyZE5hbWUpCiB7CiAgICAgLy8gVVRJIG1heSBu
b3QgZG8gdGhlc2UgcmlnaHQsIHNvIG1ha2Ugc3VyZSB3ZSBnZXQgdGhlIHJpZ2h0LCBwcmVkaWN0
YWJsZSByZXN1bHQKICAgICBpZiAoY29jb2FUeXBlID09IFN0cmluZyhOU1N0cmluZ1Bib2FyZFR5
cGUpKSB7Ci0gICAgICAgIHJlc3VsdFR5cGVzLmFkZCgidGV4dC9wbGFpbiIpOworICAgICAgICBy
ZXN1bHRUeXBlcy5hcHBlbmQoQVNDSUlMaXRlcmFsKCJ0ZXh0L3BsYWluIikpOwogICAgICAgICBy
ZXR1cm47CiAgICAgfQogICAgIGlmIChjb2NvYVR5cGUgPT0gU3RyaW5nKE5TVVJMUGJvYXJkVHlw
ZSkpIHsKLSAgICAgICAgcmVzdWx0VHlwZXMuYWRkKCJ0ZXh0L3VyaS1saXN0Iik7CisgICAgICAg
IHJlc3VsdFR5cGVzLmFwcGVuZChBU0NJSUxpdGVyYWwoInRleHQvdXJpLWxpc3QiKSk7CiAgICAg
ICAgIHJldHVybjsKICAgICB9CiAgICAgaWYgKGNvY29hVHlwZSA9PSBTdHJpbmcoTlNGaWxlbmFt
ZXNQYm9hcmRUeXBlKSkgewpAQCAtMTM4LDE4ICsxMzgsMTggQEAgc3RhdGljIHZvaWQgYWRkSFRN
TENsaXBib2FyZFR5cGVzRm9yQ29jbwogICAgICAgICBpZiAoIWZpbGVMaXN0LmlzRW1wdHkoKSkg
ewogICAgICAgICAgICAgLy8gSXQgaXMgdW5rbm93biBpZiBOU0ZpbGVuYW1lc1Bib2FyZFR5cGUg
YWx3YXlzIGltcGxpZXMgTlNVUkxQYm9hcmRUeXBlIGluIENvY29hLAogICAgICAgICAgICAgLy8g
YnV0IE5TRmlsZW5hbWVzUGJvYXJkVHlwZSBzaG91bGQgaW1wbHkgYm90aCAndGV4dC91cmktbGlz
dCcgYW5kICdGaWxlcycKLSAgICAgICAgICAgIHJlc3VsdFR5cGVzLmFkZCgidGV4dC91cmktbGlz
dCIpOwotICAgICAgICAgICAgcmVzdWx0VHlwZXMuYWRkKCJGaWxlcyIpOworICAgICAgICAgICAg
cmVzdWx0VHlwZXMuYXBwZW5kKEFTQ0lJTGl0ZXJhbCgidGV4dC91cmktbGlzdCIpKTsKKyAgICAg
ICAgICAgIHJlc3VsdFR5cGVzLmFwcGVuZChBU0NJSUxpdGVyYWwoIkZpbGVzIikpOwogICAgICAg
ICB9CiAgICAgICAgIHJldHVybjsKICAgICB9CiAgICAgU3RyaW5nIHV0aVR5cGUgPSB1dGlUeXBl
RnJvbUNvY29hVHlwZShjb2NvYVR5cGUpOwogICAgIGlmICghdXRpVHlwZS5pc0VtcHR5KCkpIHsK
LSAgICAgICAgcmVzdWx0VHlwZXMuYWRkKHV0aVR5cGUpOworICAgICAgICByZXN1bHRUeXBlcy5h
cHBlbmQodXRpVHlwZSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAgICAgLy8gTm8gbWFwcGlu
ZywganVzdCBwYXNzIHRoZSB3aG9sZSBzdHJpbmcgdGhvdWdoCi0gICAgcmVzdWx0VHlwZXMuYWRk
KGNvY29hVHlwZSk7CisgICAgcmVzdWx0VHlwZXMuYXBwZW5kKGNvY29hVHlwZSk7CiB9CiAKIHZv
aWQgQ2xpcGJvYXJkTWFjOjpjbGVhckRhdGEoY29uc3QgU3RyaW5nJiB0eXBlKQpAQCAtMjgwLDEw
ICsyODAsMTAgQEAgYm9vbCBDbGlwYm9hcmRNYWM6OnNldERhdGEoY29uc3QgU3RyaW5nCiAgICAg
cmV0dXJuIGZhbHNlOwogfQogCi1MaXN0SGFzaFNldDxTdHJpbmc+IENsaXBib2FyZE1hYzo6dHlw
ZXMoKSBjb25zdAorVmVjdG9yPFN0cmluZz4gQ2xpcGJvYXJkTWFjOjp0eXBlcygpIGNvbnN0CiB7
CiAgICAgaWYgKHBvbGljeSgpICE9IENsaXBib2FyZFJlYWRhYmxlICYmIHBvbGljeSgpICE9IENs
aXBib2FyZFR5cGVzUmVhZGFibGUpCi0gICAgICAgIHJldHVybiBMaXN0SGFzaFNldDxTdHJpbmc+
KCk7CisgICAgICAgIHJldHVybiBWZWN0b3I8U3RyaW5nPigpOwogCiAgICAgVmVjdG9yPFN0cmlu
Zz4gdHlwZXM7CiAgICAgcGxhdGZvcm1TdHJhdGVnaWVzKCktPnBhc3RlYm9hcmRTdHJhdGVneSgp
LT5nZXRUeXBlcyh0eXBlcywgbV9wYXN0ZWJvYXJkTmFtZSk7CkBAIC0yOTEsOSArMjkxLDkgQEAg
TGlzdEhhc2hTZXQ8U3RyaW5nPiBDbGlwYm9hcmRNYWM6OnR5cGVzKAogICAgIC8vIEVuZm9yY2Ug
Y2hhbmdlQ291bnQgb3Vyc2VsdmVzIGZvciBzZWN1cml0eS4gIFdlIGNoZWNrIGFmdGVyIHJlYWRp
bmcgaW5zdGVhZCBvZiBiZWZvcmUgdG8gYmUKICAgICAvLyBzdXJlIGl0IGRvZXNuJ3QgY2hhbmdl
IGJldHdlZW4gb3VyIHRlc3RpbmcgdGhlIGNoYW5nZSBjb3VudCBhbmQgYWNjZXNzaW5nIHRoZSBk
YXRhLgogICAgIGlmIChtX2NoYW5nZUNvdW50ICE9IHBsYXRmb3JtU3RyYXRlZ2llcygpLT5wYXN0
ZWJvYXJkU3RyYXRlZ3koKS0+Y2hhbmdlQ291bnQobV9wYXN0ZWJvYXJkTmFtZSkpCi0gICAgICAg
IHJldHVybiBMaXN0SGFzaFNldDxTdHJpbmc+KCk7CisgICAgICAgIHJldHVybiBWZWN0b3I8U3Ry
aW5nPigpOwogCi0gICAgTGlzdEhhc2hTZXQ8U3RyaW5nPiByZXN1bHQ7CisgICAgVmVjdG9yPFN0
cmluZz4gcmVzdWx0OwogICAgIC8vIEZJWE1FOiBUaGlzIGxvb3AgY291bGQgYmUgc3BsaXQgaW50
byB0d28gc3RhZ2VzLiBPbmUgd2hpY2ggYWRkcyBhbGwgdGhlIEhUTUw1IHNwZWNpZmllZCB0eXBl
cwogICAgIC8vIGFuZCBhIHNlY29uZCB3aGljaCBhZGRzIGFsbCB0aGUgZXh0cmEgdHlwZXMgZnJv
bSB0aGUgY29jb2EgY2xpcGJvYXJkICh3aGljaCBpcyBNYWMtb25seSBiZWhhdmlvcikuCiAgICAg
Zm9yIChzaXplX3QgaSA9IDA7IGkgPCB0eXBlcy5zaXplKCk7IGkrKykgewpJbmRleDogU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vcXQvQ2xpcGJvYXJkUXQuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL3F0L0NsaXBib2FyZFF0LmNwcAkocmV2aXNpb24gMTQyMDExKQor
KysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vcXQvQ2xpcGJvYXJkUXQuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0xODIsMTYgKzE4MiwxNiBAQCBib29sIENsaXBib2FyZFF0OjpzZXREYXRhKGNvbnN0
IFN0cmluZyYKIH0KIAogLy8gZXh0ZW5zaW9ucyBiZXlvbmQgSUUncyBBUEkKLUxpc3RIYXNoU2V0
PFN0cmluZz4gQ2xpcGJvYXJkUXQ6OnR5cGVzKCkgY29uc3QKK1ZlY3RvcjxTdHJpbmc+IENsaXBi
b2FyZFF0Ojp0eXBlcygpIGNvbnN0CiB7CiAgICAgaWYgKHBvbGljeSgpICE9IENsaXBib2FyZFJl
YWRhYmxlICYmIHBvbGljeSgpICE9IENsaXBib2FyZFR5cGVzUmVhZGFibGUpCi0gICAgICAgIHJl
dHVybiBMaXN0SGFzaFNldDxTdHJpbmc+KCk7CisgICAgICAgIHJldHVybiBWZWN0b3I8U3RyaW5n
PigpOwogCiAgICAgQVNTRVJUKG1fcmVhZGFibGVEYXRhKTsKLSAgICBMaXN0SGFzaFNldDxTdHJp
bmc+IHJlc3VsdDsKKyAgICBWZWN0b3I8U3RyaW5nPiByZXN1bHQ7CiAgICAgUVN0cmluZ0xpc3Qg
Zm9ybWF0cyA9IG1fcmVhZGFibGVEYXRhLT5mb3JtYXRzKCk7CiAgICAgZm9yIChpbnQgaSA9IDA7
IGkgPCBmb3JtYXRzLmNvdW50KCk7ICsraSkKLSAgICAgICAgcmVzdWx0LmFkZChmb3JtYXRzLmF0
KGkpKTsKKyAgICAgICAgcmVzdWx0LmFwcGVuZChmb3JtYXRzLmF0KGkpKTsKICAgICByZXR1cm4g
cmVzdWx0OwogfQogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9xdC9DbGlwYm9hcmRR
dC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3F0L0NsaXBib2FyZFF0
LmgJKHJldmlzaW9uIDE0MjAxMSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3F0L0NsaXBi
b2FyZFF0LmgJKHdvcmtpbmcgY29weSkKQEAgLTU3LDcgKzU3LDcgQEAgcHVibGljOgogICAgIGJv
b2wgc2V0RGF0YShjb25zdCBTdHJpbmcmIHR5cGUsIGNvbnN0IFN0cmluZyYgZGF0YSk7CiAKICAg
ICAvLyBleHRlbnNpb25zIGJleW9uZCBJRSdzIEFQSQotICAgIHZpcnR1YWwgTGlzdEhhc2hTZXQ8
U3RyaW5nPiB0eXBlcygpIGNvbnN0OworICAgIHZpcnR1YWwgVmVjdG9yPFN0cmluZz4gdHlwZXMo
KSBjb25zdDsKICAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8RmlsZUxpc3Q+IGZpbGVzKCkgY29uc3Q7
CiAKICAgICB2b2lkIHNldERyYWdJbWFnZShDYWNoZWRJbWFnZSosIGNvbnN0IEludFBvaW50Jik7
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS93aW4vQ2xpcGJvYXJkV2luLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS93aW4vQ2xpcGJvYXJkV2luLmNwcAko
cmV2aXNpb24gMTQyMDExKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vd2luL0NsaXBib2Fy
ZFdpbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ4NCwyNCArNDg0LDI0IEBAIGJvb2wgQ2xpcGJv
YXJkV2luOjpzZXREYXRhKGNvbnN0IFN0cmluZyYKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLXN0
YXRpYyB2b2lkIGFkZE1pbWVUeXBlc0ZvckZvcm1hdChMaXN0SGFzaFNldDxTdHJpbmc+JiByZXN1
bHRzLCBjb25zdCBGT1JNQVRFVEMmIGZvcm1hdCkKK3N0YXRpYyB2b2lkIGFkZE1pbWVUeXBlc0Zv
ckZvcm1hdChWZWN0b3I8U3RyaW5nPiYgcmVzdWx0cywgY29uc3QgRk9STUFURVRDJiBmb3JtYXQp
CiB7CiAgICAgLy8gVVJMIGFuZCBUZXh0IGFyZSBwcm92aWRlZCBmb3IgY29tcGF0aWJpbGl0eSB3
aXRoIElFJ3MgbW9kZWwKICAgICBpZiAoZm9ybWF0LmNmRm9ybWF0ID09IHVybEZvcm1hdCgpLT5j
ZkZvcm1hdCB8fCBmb3JtYXQuY2ZGb3JtYXQgPT0gdXJsV0Zvcm1hdCgpLT5jZkZvcm1hdCkgewot
ICAgICAgICByZXN1bHRzLmFkZCgiVVJMIik7Ci0gICAgICAgIHJlc3VsdHMuYWRkKCJ0ZXh0L3Vy
aS1saXN0Iik7CisgICAgICAgIHJlc3VsdHMuYXBwZW5kKEFTQ0lJTGl0ZXJhbCgiVVJMIikpOwor
ICAgICAgICByZXN1bHRzLmFwcGVuZChBU0NJSUxpdGVyYWwoInRleHQvdXJpLWxpc3QiKSk7CiAg
ICAgfQogCiAgICAgaWYgKGZvcm1hdC5jZkZvcm1hdCA9PSBwbGFpblRleHRXRm9ybWF0KCktPmNm
Rm9ybWF0IHx8IGZvcm1hdC5jZkZvcm1hdCA9PSBwbGFpblRleHRGb3JtYXQoKS0+Y2ZGb3JtYXQp
IHsKLSAgICAgICAgcmVzdWx0cy5hZGQoIlRleHQiKTsKLSAgICAgICAgcmVzdWx0cy5hZGQoInRl
eHQvcGxhaW4iKTsKKyAgICAgICAgcmVzdWx0cy5hcHBlbmQoQVNDSUlMaXRlcmFsKCJUZXh0Iikp
OworICAgICAgICByZXN1bHRzLmFwcGVuZChBU0NJSUxpdGVyYWwoInRleHQvcGxhaW4iKSk7CiAg
ICAgfQogfQogCiAvLyBleHRlbnNpb25zIGJleW9uZCBJRSdzIEFQSQotTGlzdEhhc2hTZXQ8U3Ry
aW5nPiBDbGlwYm9hcmRXaW46OnR5cGVzKCkgY29uc3QKK1ZlY3RvcjxTdHJpbmc+IENsaXBib2Fy
ZFdpbjo6dHlwZXMoKSBjb25zdAogeyAKLSAgICBMaXN0SGFzaFNldDxTdHJpbmc+IHJlc3VsdHM7
CisgICAgVmVjdG9yPFN0cmluZz4gcmVzdWx0czsKICAgICBpZiAocG9saWN5KCkgIT0gQ2xpcGJv
YXJkUmVhZGFibGUgJiYgcG9saWN5KCkgIT0gQ2xpcGJvYXJkVHlwZXNSZWFkYWJsZSkKICAgICAg
ICAgcmV0dXJuIHJlc3VsdHM7CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3dpbi9D
bGlwYm9hcmRXaW4uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS93aW4v
Q2xpcGJvYXJkV2luLmgJKHJldmlzaW9uIDE0MjAxMSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL3dpbi9DbGlwYm9hcmRXaW4uaAkod29ya2luZyBjb3B5KQpAQCAtNjQsNyArNjQsNyBAQCBw
dWJsaWM6CiAgICAgYm9vbCBzZXREYXRhKGNvbnN0IFN0cmluZyYgdHlwZSwgY29uc3QgU3RyaW5n
JiBkYXRhKTsKIAogICAgIC8vIGV4dGVuc2lvbnMgYmV5b25kIElFJ3MgQVBJCi0gICAgdmlydHVh
bCBMaXN0SGFzaFNldDxTdHJpbmc+IHR5cGVzKCkgY29uc3Q7CisgICAgdmlydHVhbCBWZWN0b3I8
U3RyaW5nPiB0eXBlcygpIGNvbnN0OwogICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxGaWxlTGlzdD4g
ZmlsZXMoKSBjb25zdDsKIAogICAgIHZvaWQgc2V0RHJhZ0ltYWdlKENhY2hlZEltYWdlKiwgY29u
c3QgSW50UG9pbnQmKTsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>187372</attachid>
            <date>2013-02-08 15:39:47 -0800</date>
            <delta_ts>2013-03-12 15:05:39 -0700</delta_ts>
            <desc>patch</desc>
            <filename>clipboard_003.diff</filename>
            <type>text/plain</type>
            <size>23258</size>
            <attacher name="Vineet Chaudhary (vineetc)">code.vineet</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDE0MjMyMSkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDU0IEBACisyMDEzLTAyLTA4ICAgVmluZWV0
IENoYXVkaGFyeSAgPHJnZjc0OEBtb3Rvcm9sYS5jb20+CisKKyAgICAgICAgQ29uc2lkZXIgcmVw
bGFjaW5nIHJldHVybiB0eXBlIG9mIENsaXBib2FyZDo6dHlwZXMoKSBmcm9tIExpc3RIYXNoU2V0
PFN0cmluZz4gdG8gVmVjdG9yPFN0cmluZz4uCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD04Mjg4OAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAo
T09QUyEpLgorCisgICAgICAgIEFzIHBhcnQgb2YgcmVtb3ZpbmcgY3VzdG9tIGJpbmRpbmdzIG9m
IHR5cGVzIEFycmF5IENsaXBib2FyZDo6dHlwZXMoKSBuZWVkcyB0byByZXR1cm4KKyAgICAgICAg
VmVjdG9yPFN0cmluZz4gdGhhbiBMaXN0SGFzaFNldDxTdHJpbmc+CisKKyAgICAgICAgTm8gbmV3
IHRlc3RzLiBFeGlzdGluZyB0ZXN0IHNob3VsZCBwYXNzIHdpdGggdGhpcyBjaGFuZ2UgYXMgbm8g
YmVoYXZvdXJhbCBjaGFuZ2VzLgorCisgICAgICAgICogYmluZGluZ3MvanMvSlNDbGlwYm9hcmRD
dXN0b20uY3BwOgorICAgICAgICAoV2ViQ29yZTo6SlNDbGlwYm9hcmQ6OnR5cGVzKTogUmVwbGFj
ZSBkYXRhIHR5cGUgZnJvbSBMaXN0SGFzaFNldDw+IHRvIFZlY3Rvcjw+LgorICAgICAgICAqIGJp
bmRpbmdzL3Y4L2N1c3RvbS9WOENsaXBib2FyZEN1c3RvbS5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpWOENsaXBib2FyZDo6dHlwZXNBY2Nlc3NvckdldHRlcik6IERpdHRvLgorICAgICAgICAqIGRv
bS9DbGlwYm9hcmQuaDogRGl0dG8uCisgICAgICAgICogcGxhdGZvcm0vYmxhY2tiZXJyeS9DbGlw
Ym9hcmRCbGFja0JlcnJ5LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNsaXBib2FyZEJsYWNrQmVy
cnk6OnR5cGVzKTogRGl0dG8uCisgICAgICAgICogcGxhdGZvcm0vYmxhY2tiZXJyeS9DbGlwYm9h
cmRCbGFja0JlcnJ5Lmg6IERpdHRvLgorICAgICAgICAqIHBsYXRmb3JtL2Nocm9taXVtL0Nocm9t
aXVtRGF0YU9iamVjdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDaHJvbWl1bURhdGFPYmplY3Q6
OnR5cGVzKTogRGl0dG8uCisgICAgICAgICogcGxhdGZvcm0vY2hyb21pdW0vQ2hyb21pdW1EYXRh
T2JqZWN0Lmg6IERpdHRvLgorICAgICAgICAqIHBsYXRmb3JtL2Nocm9taXVtL0NsaXBib2FyZENo
cm9taXVtLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNsaXBib2FyZENocm9taXVtOjp0eXBlcyk6
IERpdHRvLgorICAgICAgICAqIHBsYXRmb3JtL2Nocm9taXVtL0NsaXBib2FyZENocm9taXVtLmg6
IERpdHRvLgorICAgICAgICAqIHBsYXRmb3JtL2Nocm9taXVtL0RyYWdEYXRhQ2hyb21pdW0uY3Bw
OiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OmNvbnRhaW5zSFRNTCk6CisgICAgICAgIChXZWJD
b3JlOjpEcmFnRGF0YTo6Y29udGFpbnNVUkwpOgorICAgICAgICAoV2ViQ29yZTo6RHJhZ0RhdGE6
OmFzVVJMKToKKyAgICAgICAgKFdlYkNvcmU6OkRyYWdEYXRhOjpjb250YWluc1BsYWluVGV4dCk6
CisgICAgICAgIChXZWJDb3JlOjpEcmFnRGF0YTo6Y2FuU21hcnRSZXBsYWNlKToKKyAgICAgICAg
KFdlYkNvcmU6OkRyYWdEYXRhOjphc0ZyYWdtZW50KToKKyAgICAgICAgKiBwbGF0Zm9ybS9lZmwv
Q2xpcGJvYXJkRWZsLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNsaXBib2FyZEVmbDo6dHlwZXMp
OiBEaXR0by4KKyAgICAgICAgKiBwbGF0Zm9ybS9lZmwvQ2xpcGJvYXJkRWZsLmg6IERpdHRvLgor
ICAgICAgICAqIHBsYXRmb3JtL2d0ay9DbGlwYm9hcmRHdGsuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6Q2xpcGJvYXJkR3RrOjp0eXBlcyk6IERpdHRvLgorICAgICAgICAqIHBsYXRmb3JtL2d0ay9D
bGlwYm9hcmRHdGsuaDogRGl0dG8uCisgICAgICAgICogcGxhdGZvcm0vbWFjL0NsaXBib2FyZE1h
Yy5oOiBEaXR0by4KKyAgICAgICAgKiBwbGF0Zm9ybS9tYWMvQ2xpcGJvYXJkTWFjLm1tOgorICAg
ICAgICAoV2ViQ29yZTo6YWRkSFRNTENsaXBib2FyZFR5cGVzRm9yQ29jb2FUeXBlKTogRGl0dG8u
CisgICAgICAgIChXZWJDb3JlOjpDbGlwYm9hcmRNYWM6OnR5cGVzKTogRGl0dG8uCisgICAgICAg
ICogcGxhdGZvcm0vcXQvQ2xpcGJvYXJkUXQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q2xpcGJv
YXJkUXQ6OnR5cGVzKTogRGl0dG8uCisgICAgICAgICogcGxhdGZvcm0vcXQvQ2xpcGJvYXJkUXQu
aDogRGl0dG8uCisgICAgICAgICogcGxhdGZvcm0vd2luL0NsaXBib2FyZFdpbi5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjphZGRNaW1lVHlwZXNGb3JGb3JtYXQpOiBEaXR0by4KKyAgICAgICAgKFdl
YkNvcmU6OkNsaXBib2FyZFdpbjo6dHlwZXMpOiBEaXR0by4KKyAgICAgICAgKiBwbGF0Zm9ybS93
aW4vQ2xpcGJvYXJkV2luLmg6IERpdHRvLgorCiAyMDEzLTAyLTA4ICBDaHJpcyBGbGVpemFjaCAg
PGNmbGVpemFjaEBhcHBsZS5jb20+CiAKICAgICAgICAgUmVmYWN0b3IgcGxhdGZvcm0tc3BlY2lm
aWMgY29kZSBpbiBTcGVlY2hTeW50aGVzaXMKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L2pzL0pTQ2xpcGJvYXJkQ3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy9qcy9KU0NsaXBib2FyZEN1c3RvbS5jcHAJKHJldmlzaW9uIDE0MjE4MCkKKysrIFNv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTQ2xpcGJvYXJkQ3VzdG9tLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtNTEsMTMgKzUxLDEzIEBAIEpTVmFsdWUgSlNDbGlwYm9hcmQ6OnR5cGVzKEV4ZWNT
dGF0ZSogZXgKIHsKICAgICBDbGlwYm9hcmQqIGNsaXBib2FyZCA9IGltcGwoKTsKIAotICAgIExp
c3RIYXNoU2V0PFN0cmluZz4gdHlwZXMgPSBjbGlwYm9hcmQtPnR5cGVzKCk7CisgICAgVmVjdG9y
PFN0cmluZz4gdHlwZXMgPSBjbGlwYm9hcmQtPnR5cGVzKCk7CiAgICAgaWYgKHR5cGVzLmlzRW1w
dHkoKSkKICAgICAgICAgcmV0dXJuIGpzTnVsbCgpOwogCiAgICAgTWFya2VkQXJndW1lbnRCdWZm
ZXIgbGlzdDsKLSAgICBMaXN0SGFzaFNldDxTdHJpbmc+Ojpjb25zdF9pdGVyYXRvciBlbmQgPSB0
eXBlcy5lbmQoKTsKLSAgICBmb3IgKExpc3RIYXNoU2V0PFN0cmluZz46OmNvbnN0X2l0ZXJhdG9y
IGl0ID0gdHlwZXMuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KQorICAgIFZlY3RvcjxTdHJpbmc+
Ojpjb25zdF9pdGVyYXRvciBlbmQgPSB0eXBlcy5lbmQoKTsKKyAgICBmb3IgKFZlY3RvcjxTdHJp
bmc+Ojpjb25zdF9pdGVyYXRvciBpdCA9IHR5cGVzLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkK
ICAgICAgICAgbGlzdC5hcHBlbmQoanNTdHJpbmdXaXRoQ2FjaGUoZXhlYywgKml0KSk7CiAgICAg
cmV0dXJuIGNvbnN0cnVjdEFycmF5KGV4ZWMsIDAsIGdsb2JhbE9iamVjdCgpLCBsaXN0KTsKIH0K
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOENsaXBib2FyZEN1c3Rv
bS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4
Q2xpcGJvYXJkQ3VzdG9tLmNwcAkocmV2aXNpb24gMTQyMTgwKQorKysgU291cmNlL1dlYkNvcmUv
YmluZGluZ3MvdjgvY3VzdG9tL1Y4Q2xpcGJvYXJkQ3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtNDcsMTQgKzQ3LDE0IEBAIHY4OjpIYW5kbGU8djg6OlZhbHVlPiBWOENsaXBib2FyZDo6dHlw
ZXMKIHsKICAgICBDbGlwYm9hcmQqIGNsaXBib2FyZCA9IFY4Q2xpcGJvYXJkOjp0b05hdGl2ZShp
bmZvLkhvbGRlcigpKTsKIAotICAgIExpc3RIYXNoU2V0PFN0cmluZz4gdHlwZXMgPSBjbGlwYm9h
cmQtPnR5cGVzKCk7CisgICAgVmVjdG9yPFN0cmluZz4gdHlwZXMgPSBjbGlwYm9hcmQtPnR5cGVz
KCk7CiAgICAgaWYgKHR5cGVzLmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuIHY4TnVsbChpbmZv
LkdldElzb2xhdGUoKSk7CiAKICAgICB2ODo6TG9jYWw8djg6OkFycmF5PiByZXN1bHQgPSB2ODo6
QXJyYXk6Ok5ldyh0eXBlcy5zaXplKCkpOwotICAgIExpc3RIYXNoU2V0PFN0cmluZz46OmNvbnN0
X2l0ZXJhdG9yIGVuZCA9IHR5cGVzLmVuZCgpOworICAgIFZlY3RvcjxTdHJpbmc+Ojpjb25zdF9p
dGVyYXRvciBlbmQgPSB0eXBlcy5lbmQoKTsKICAgICBpbnQgaW5kZXggPSAwOwotICAgIGZvciAo
TGlzdEhhc2hTZXQ8U3RyaW5nPjo6Y29uc3RfaXRlcmF0b3IgaXQgPSB0eXBlcy5iZWdpbigpOyBp
dCAhPSBlbmQ7ICsraXQsICsraW5kZXgpCisgICAgZm9yIChWZWN0b3I8U3RyaW5nPjo6Y29uc3Rf
aXRlcmF0b3IgaXQgPSB0eXBlcy5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQsICsraW5kZXgpCiAg
ICAgICAgIHJlc3VsdC0+U2V0KHY4SW50ZWdlcihpbmRleCwgaW5mby5HZXRJc29sYXRlKCkpLCB2
OFN0cmluZygqaXQsIGluZm8uR2V0SXNvbGF0ZSgpKSk7CiAKICAgICByZXR1cm4gcmVzdWx0OwpJ
bmRleDogU291cmNlL1dlYkNvcmUvZG9tL0NsaXBib2FyZC5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL2RvbS9DbGlwYm9hcmQuaAkocmV2aXNpb24gMTQyMTgwKQorKysgU291cmNlL1dl
YkNvcmUvZG9tL0NsaXBib2FyZC5oCSh3b3JraW5nIGNvcHkpCkBAIC02Niw3ICs2Niw3IEBAIG5h
bWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgdmlydHVhbCBib29sIHNldERhdGEoY29uc3QgU3Ry
aW5nJiB0eXBlLCBjb25zdCBTdHJpbmcmIGRhdGEpID0gMDsKICAgICAKICAgICAgICAgLy8gZXh0
ZW5zaW9ucyBiZXlvbmQgSUUncyBBUEkKLSAgICAgICAgdmlydHVhbCBMaXN0SGFzaFNldDxTdHJp
bmc+IHR5cGVzKCkgY29uc3QgPSAwOworICAgICAgICB2aXJ0dWFsIFZlY3RvcjxTdHJpbmc+IHR5
cGVzKCkgY29uc3QgPSAwOwogICAgICAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8RmlsZUxpc3Q+IGZp
bGVzKCkgY29uc3QgPSAwOwogCiAgICAgICAgIEludFBvaW50IGRyYWdMb2NhdGlvbigpIGNvbnN0
IHsgcmV0dXJuIG1fZHJhZ0xvYzsgfQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vYmxh
Y2tiZXJyeS9DbGlwYm9hcmRCbGFja0JlcnJ5LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ibGFja2JlcnJ5L0NsaXBib2FyZEJsYWNrQmVycnkuY3BwCShyZXZpc2lv
biAxNDIxODApCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ibGFja2JlcnJ5L0NsaXBib2Fy
ZEJsYWNrQmVycnkuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03OCwxNiArNzgsMTYgQEAgYm9vbCBD
bGlwYm9hcmRCbGFja0JlcnJ5OjpzZXREYXRhKGNvbnN0CiAgICAgcmV0dXJuIHRydWU7CiB9CiAK
LUxpc3RIYXNoU2V0PFN0cmluZz4gQ2xpcGJvYXJkQmxhY2tCZXJyeTo6dHlwZXMoKSBjb25zdAor
VmVjdG9yPFN0cmluZz4gQ2xpcGJvYXJkQmxhY2tCZXJyeTo6dHlwZXMoKSBjb25zdAogewogICAg
IGlmIChwb2xpY3koKSAhPSBDbGlwYm9hcmRSZWFkYWJsZSAmJiBwb2xpY3koKSAhPSBDbGlwYm9h
cmRUeXBlc1JlYWRhYmxlKQotICAgICAgICByZXR1cm4gTGlzdEhhc2hTZXQ8U3RyaW5nPigpOwor
ICAgICAgICByZXR1cm4gVmVjdG9yPFN0cmluZz4oKTsKIAogICAgIC8vIFdlIHVzZSBoYXJkY29k
ZWQgbGlzdCBoZXJlIHNpbmNlIHRoZXJlIHNlZW1zIHRvIGJlIG5vIEFQSSB0byBnZXQgdGhlIGxp
c3QuCi0gICAgTGlzdEhhc2hTZXQ8U3RyaW5nPiByZXQ7Ci0gICAgcmV0LmFkZCgidGV4dC9wbGFp
biIpOwotICAgIHJldC5hZGQoInRleHQvaHRtbCIpOwotICAgIHJldC5hZGQoInRleHQvdXJsIik7
CisgICAgVmVjdG9yPFN0cmluZz4gcmV0OworICAgIHJldC5hcHBlbmQoQVNDSUlMaXRlcmFsKCJ0
ZXh0L3BsYWluIikpOworICAgIHJldC5hcHBlbmQoQVNDSUlMaXRlcmFsKCJ0ZXh0L2h0bWwiKSk7
CisgICAgcmV0LmFwcGVuZChBU0NJSUxpdGVyYWwoInRleHQvdXJsIikpOwogICAgIHJldHVybiBy
ZXQ7CiB9CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2JsYWNrYmVycnkvQ2xpcGJv
YXJkQmxhY2tCZXJyeS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2Js
YWNrYmVycnkvQ2xpcGJvYXJkQmxhY2tCZXJyeS5oCShyZXZpc2lvbiAxNDIxODApCisrKyBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ibGFja2JlcnJ5L0NsaXBib2FyZEJsYWNrQmVycnkuaAkod29y
a2luZyBjb3B5KQpAQCAtMzksNyArMzksNyBAQCBwdWJsaWM6CiAgICAgYm9vbCBzZXREYXRhKGNv
bnN0IFN0cmluZyYgdHlwZSwgY29uc3QgU3RyaW5nJiBkYXRhKTsKIAogICAgIC8vIGV4dGVuc2lv
bnMgYmV5b25kIElFJ3MgQVBJCi0gICAgdmlydHVhbCBMaXN0SGFzaFNldDxTdHJpbmc+IHR5cGVz
KCkgY29uc3Q7CisgICAgdmlydHVhbCBWZWN0b3I8U3RyaW5nPiB0eXBlcygpIGNvbnN0OwogICAg
IHZpcnR1YWwgUGFzc1JlZlB0cjxGaWxlTGlzdD4gZmlsZXMoKSBjb25zdDsKICAgICB2aXJ0dWFs
IERyYWdJbWFnZVJlZiBjcmVhdGVEcmFnSW1hZ2UoSW50UG9pbnQmKSBjb25zdDsKICAgICB2aXJ0
dWFsIHZvaWQgZGVjbGFyZUFuZFdyaXRlRHJhZ0ltYWdlKEVsZW1lbnQqLCBjb25zdCBLVVJMJiwg
Y29uc3QgU3RyaW5nJiB0aXRsZSwgRnJhbWUqKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2Nocm9taXVtL0Nocm9taXVtRGF0YU9iamVjdC5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vY2hyb21pdW0vQ2hyb21pdW1EYXRhT2JqZWN0LmNwcAkocmV2aXNp
b24gMTQyMTgwKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY2hyb21pdW0vQ2hyb21pdW1E
YXRhT2JqZWN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTI2LDIwICsxMjYsMjAgQEAgdm9pZCBD
aHJvbWl1bURhdGFPYmplY3Q6OmNsZWFyQWxsRXhjZXB0RgogICAgIH0KIH0KIAotTGlzdEhhc2hT
ZXQ8U3RyaW5nPiBDaHJvbWl1bURhdGFPYmplY3Q6OnR5cGVzKCkgY29uc3QKK1ZlY3RvcjxTdHJp
bmc+IENocm9taXVtRGF0YU9iamVjdDo6dHlwZXMoKSBjb25zdAogewotICAgIExpc3RIYXNoU2V0
PFN0cmluZz4gcmVzdWx0czsKKyAgICBWZWN0b3I8U3RyaW5nPiByZXN1bHRzOwogICAgIGJvb2wg
Y29udGFpbnNGaWxlcyA9IGZhbHNlOwogICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbV9pdGVt
TGlzdC5zaXplKCk7ICsraSkgewogICAgICAgICBpZiAobV9pdGVtTGlzdFtpXS0+a2luZCgpID09
IERhdGFUcmFuc2Zlckl0ZW06OmtpbmRTdHJpbmcpCi0gICAgICAgICAgICByZXN1bHRzLmFkZCht
X2l0ZW1MaXN0W2ldLT50eXBlKCkpOworICAgICAgICAgICAgcmVzdWx0cy5hcHBlbmQobV9pdGVt
TGlzdFtpXS0+dHlwZSgpKTsKICAgICAgICAgZWxzZSBpZiAobV9pdGVtTGlzdFtpXS0+a2luZCgp
ID09IERhdGFUcmFuc2Zlckl0ZW06OmtpbmRGaWxlKQogICAgICAgICAgICAgY29udGFpbnNGaWxl
cyA9IHRydWU7CiAgICAgICAgIGVsc2UKICAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgp
OwogICAgIH0KICAgICBpZiAoY29udGFpbnNGaWxlcykKLSAgICAgICAgcmVzdWx0cy5hZGQobWlt
ZVR5cGVGaWxlcyk7CisgICAgICAgIHJlc3VsdHMuYXBwZW5kKEFTQ0lJTGl0ZXJhbChtaW1lVHlw
ZUZpbGVzKSk7CiAgICAgcmV0dXJuIHJlc3VsdHM7CiB9CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2Nocm9taXVtL0Nocm9taXVtRGF0YU9iamVjdC5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2Nocm9taXVtL0Nocm9taXVtRGF0YU9iamVjdC5oCShyZXZp
c2lvbiAxNDIxODApCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jaHJvbWl1bS9DaHJvbWl1
bURhdGFPYmplY3QuaAkod29ya2luZyBjb3B5KQpAQCAtNjksNyArNjksNyBAQCBwdWJsaWM6CiAg
ICAgdm9pZCBjbGVhckRhdGEoY29uc3QgU3RyaW5nJiB0eXBlKTsKICAgICB2b2lkIGNsZWFyQWxs
RXhjZXB0RmlsZXMoKTsKIAotICAgIExpc3RIYXNoU2V0PFN0cmluZz4gdHlwZXMoKSBjb25zdDsK
KyAgICBWZWN0b3I8U3RyaW5nPiB0eXBlcygpIGNvbnN0OwogICAgIFN0cmluZyBnZXREYXRhKGNv
bnN0IFN0cmluZyYgdHlwZSkgY29uc3Q7CiAgICAgYm9vbCBzZXREYXRhKGNvbnN0IFN0cmluZyYg
dHlwZSwgY29uc3QgU3RyaW5nJiBkYXRhKTsKIApJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vY2hyb21pdW0vQ2xpcGJvYXJkQ2hyb21pdW0uY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2Nocm9taXVtL0NsaXBib2FyZENocm9taXVtLmNwcAkocmV2aXNpb24g
MTQyMTgwKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY2hyb21pdW0vQ2xpcGJvYXJkQ2hy
b21pdW0uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNzUsMTAgKzI3NSwxMCBAQCBib29sIENsaXBi
b2FyZENocm9taXVtOjpzZXREYXRhKGNvbnN0IFN0CiB9CiAKIC8vIGV4dGVuc2lvbnMgYmV5b25k
IElFJ3MgQVBJCi1MaXN0SGFzaFNldDxTdHJpbmc+IENsaXBib2FyZENocm9taXVtOjp0eXBlcygp
IGNvbnN0CitWZWN0b3I8U3RyaW5nPiBDbGlwYm9hcmRDaHJvbWl1bTo6dHlwZXMoKSBjb25zdAog
ewogICAgIGlmIChwb2xpY3koKSAhPSBDbGlwYm9hcmRSZWFkYWJsZSAmJiBwb2xpY3koKSAhPSBD
bGlwYm9hcmRUeXBlc1JlYWRhYmxlKQotICAgICAgICByZXR1cm4gTGlzdEhhc2hTZXQ8U3RyaW5n
PigpOworICAgICAgICByZXR1cm4gVmVjdG9yPFN0cmluZz4oKTsKIAogICAgIHJldHVybiBtX2Rh
dGFPYmplY3QtPnR5cGVzKCk7CiB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jaHJv
bWl1bS9DbGlwYm9hcmRDaHJvbWl1bS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2Nocm9taXVtL0NsaXBib2FyZENocm9taXVtLmgJKHJldmlzaW9uIDE0MjE4MCkKKysr
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2Nocm9taXVtL0NsaXBib2FyZENocm9taXVtLmgJKHdv
cmtpbmcgY29weSkKQEAgLTg0LDcgKzg0LDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAg
ICBib29sIHBsYXRmb3JtQ2xpcGJvYXJkQ2hhbmdlZCgpIGNvbnN0OwogCiAgICAgICAgIC8vIGV4
dGVuc2lvbnMgYmV5b25kIElFJ3MgQVBJCi0gICAgICAgIHZpcnR1YWwgTGlzdEhhc2hTZXQ8U3Ry
aW5nPiB0eXBlcygpIGNvbnN0OworICAgICAgICB2aXJ0dWFsIFZlY3RvcjxTdHJpbmc+IHR5cGVz
KCkgY29uc3Q7CiAgICAgICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxGaWxlTGlzdD4gZmlsZXMoKSBj
b25zdDsKIAogICAgICAgICB2b2lkIHNldERyYWdJbWFnZShDYWNoZWRJbWFnZSosIGNvbnN0IElu
dFBvaW50Jik7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jaHJvbWl1bS9EcmFnRGF0
YUNocm9taXVtLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jaHJv
bWl1bS9EcmFnRGF0YUNocm9taXVtLmNwcAkocmV2aXNpb24gMTQyMTgwKQorKysgU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vY2hyb21pdW0vRHJhZ0RhdGFDaHJvbWl1bS5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTUyLDE5ICs1MiwyMiBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIHN0YXRpYyBib29s
IGNvbnRhaW5zSFRNTChjb25zdCBDaHJvbWl1bURhdGFPYmplY3QqIGRyb3BEYXRhKQogewotICAg
IHJldHVybiBkcm9wRGF0YS0+dHlwZXMoKS5jb250YWlucyhtaW1lVHlwZVRleHRIVE1MKTsKKyAg
ICBjb25zdCBjaGFyKiB0eXBlVGV4dEhUTUwgPSBtaW1lVHlwZVRleHRIVE1MOworICAgIHJldHVy
biBkcm9wRGF0YS0+dHlwZXMoKS5jb250YWlucyh0eXBlVGV4dEhUTUwpOwogfQogCiBib29sIERy
YWdEYXRhOjpjb250YWluc1VSTChGcmFtZSosIEZpbGVuYW1lQ29udmVyc2lvblBvbGljeSBmaWxl
bmFtZVBvbGljeSkgY29uc3QKIHsKLSAgICByZXR1cm4gbV9wbGF0Zm9ybURyYWdEYXRhLT50eXBl
cygpLmNvbnRhaW5zKG1pbWVUeXBlVGV4dFVSSUxpc3QpCisgICAgY29uc3QgY2hhciogdHlwZVRl
eHRVUklMaXN0ID0gbWltZVR5cGVUZXh0VVJJTGlzdDsKKyAgICByZXR1cm4gbV9wbGF0Zm9ybURy
YWdEYXRhLT50eXBlcygpLmNvbnRhaW5zKHR5cGVUZXh0VVJJTGlzdCkKICAgICAgICAgfHwgKGZp
bGVuYW1lUG9saWN5ID09IENvbnZlcnRGaWxlbmFtZXMgJiYgbV9wbGF0Zm9ybURyYWdEYXRhLT5j
b250YWluc0ZpbGVuYW1lcygpKTsKIH0KIAogU3RyaW5nIERyYWdEYXRhOjphc1VSTChGcmFtZSos
IEZpbGVuYW1lQ29udmVyc2lvblBvbGljeSBmaWxlbmFtZVBvbGljeSwgU3RyaW5nKiB0aXRsZSkg
Y29uc3QKIHsKICAgICBTdHJpbmcgdXJsOwotICAgIGlmIChtX3BsYXRmb3JtRHJhZ0RhdGEtPnR5
cGVzKCkuY29udGFpbnMobWltZVR5cGVUZXh0VVJJTGlzdCkpCisgICAgY29uc3QgY2hhciogdHlw
ZVRleHRVUklMaXN0ID0gbWltZVR5cGVUZXh0VVJJTGlzdDsKKyAgICBpZiAobV9wbGF0Zm9ybURy
YWdEYXRhLT50eXBlcygpLmNvbnRhaW5zKHR5cGVUZXh0VVJJTGlzdCkpCiAgICAgICAgIG1fcGxh
dGZvcm1EcmFnRGF0YS0+dXJsQW5kVGl0bGUodXJsLCB0aXRsZSk7CiAgICAgZWxzZSBpZiAoZmls
ZW5hbWVQb2xpY3kgPT0gQ29udmVydEZpbGVuYW1lcyAmJiBjb250YWluc0ZpbGVzKCkpIHsKICAg
ICAgICAgU3RyaW5nIHBhdGggPSBTdHJpbmcoV2ViS2l0OjpQbGF0Zm9ybTo6Y3VycmVudCgpLT5m
aWxlVXRpbGl0aWVzKCktPmdldEFic29sdXRlUGF0aChtX3BsYXRmb3JtRHJhZ0RhdGEtPmZpbGVu
YW1lcygpWzBdKSk7CkBAIC05Nyw3ICsxMDAsOCBAQCB2b2lkIERyYWdEYXRhOjphc0ZpbGVuYW1l
cyhWZWN0b3I8U3RyaW5nCiAKIGJvb2wgRHJhZ0RhdGE6OmNvbnRhaW5zUGxhaW5UZXh0KCkgY29u
c3QKIHsKLSAgICByZXR1cm4gbV9wbGF0Zm9ybURyYWdEYXRhLT50eXBlcygpLmNvbnRhaW5zKG1p
bWVUeXBlVGV4dFBsYWluKTsKKyAgICBjb25zdCBjaGFyKiB0eXBlVGV4dFBsYWluID0gbWltZVR5
cGVUZXh0UGxhaW47CisgICAgcmV0dXJuIG1fcGxhdGZvcm1EcmFnRGF0YS0+dHlwZXMoKS5jb250
YWlucyh0eXBlVGV4dFBsYWluKTsKIH0KIAogU3RyaW5nIERyYWdEYXRhOjphc1BsYWluVGV4dChG
cmFtZSopIGNvbnN0CkBAIC0xMTcsOCArMTIxLDEwIEBAIGJvb2wgRHJhZ0RhdGE6OmNhblNtYXJ0
UmVwbGFjZSgpIGNvbnN0CiAgICAgLy8gVGhpcyBpcyBhbGxvd2VkIHdoZW5ldmVyIHRoZSBkcmFn
IGRhdGEgY29udGFpbnMgYSAncmFuZ2UnIChpZS4sCiAgICAgLy8gQ2xpcGJvYXJkV2luOjp3cml0
ZVJhbmdlIGlzIGNhbGxlZCkuICBGb3IgZXhhbXBsZSwgZHJhZ2dpbmcgYSBsaW5rCiAgICAgLy8g
c2hvdWxkIG5vdCByZXN1bHQgaW4gYSBzcGFjZSBiZWluZyBhZGRlZC4KLSAgICByZXR1cm4gbV9w
bGF0Zm9ybURyYWdEYXRhLT50eXBlcygpLmNvbnRhaW5zKG1pbWVUeXBlVGV4dFBsYWluKQotICAg
ICAgICAmJiAhbV9wbGF0Zm9ybURyYWdEYXRhLT50eXBlcygpLmNvbnRhaW5zKG1pbWVUeXBlVGV4
dFVSSUxpc3QpOworICAgIGNvbnN0IGNoYXIqIHR5cGVUZXh0UGxhaW4gPSBtaW1lVHlwZVRleHRQ
bGFpbjsKKyAgICBjb25zdCBjaGFyKiB0eXBlVGV4dFVSSUxpc3QgPSBtaW1lVHlwZVRleHRVUklM
aXN0OworICAgIHJldHVybiBtX3BsYXRmb3JtRHJhZ0RhdGEtPnR5cGVzKCkuY29udGFpbnModHlw
ZVRleHRQbGFpbikKKyAgICAgICAgJiYgIW1fcGxhdGZvcm1EcmFnRGF0YS0+dHlwZXMoKS5jb250
YWlucyh0eXBlVGV4dFVSSUxpc3QpOwogfQogCiBib29sIERyYWdEYXRhOjpjb250YWluc0NvbXBh
dGlibGVDb250ZW50KCkgY29uc3QKQEAgLTE1MCw3ICsxNTYsOCBAQCBQYXNzUmVmUHRyPERvY3Vt
ZW50RnJhZ21lbnQ+IERyYWdEYXRhOjphCiAgICAgICAgIC8vICAgIHJldHVybiBmcmFnbWVudDsK
ICAgICB9CiAKLSAgICBpZiAobV9wbGF0Zm9ybURyYWdEYXRhLT50eXBlcygpLmNvbnRhaW5zKG1p
bWVUeXBlVGV4dEhUTUwpKSB7CisgICAgY29uc3QgY2hhciogdHlwZVRleHRIVE1MID0gbWltZVR5
cGVUZXh0SFRNTDsKKyAgICBpZiAobV9wbGF0Zm9ybURyYWdEYXRhLT50eXBlcygpLmNvbnRhaW5z
KHR5cGVUZXh0SFRNTCkpIHsKICAgICAgICAgU3RyaW5nIGh0bWw7CiAgICAgICAgIEtVUkwgYmFz
ZVVSTDsKICAgICAgICAgbV9wbGF0Zm9ybURyYWdEYXRhLT5odG1sQW5kQmFzZVVSTChodG1sLCBi
YXNlVVJMKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2VmbC9DbGlwYm9hcmRFZmwu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2VmbC9DbGlwYm9hcmRF
ZmwuY3BwCShyZXZpc2lvbiAxNDIxODApCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9lZmwv
Q2xpcGJvYXJkRWZsLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzYsMTAgKzc2LDEwIEBAIGJvb2wg
Q2xpcGJvYXJkRWZsOjpzZXREYXRhKGNvbnN0IFN0cmluZyYKICAgICByZXR1cm4gZmFsc2U7CiB9
CiAKLUxpc3RIYXNoU2V0PFN0cmluZz4gQ2xpcGJvYXJkRWZsOjp0eXBlcygpIGNvbnN0CitWZWN0
b3I8U3RyaW5nPiBDbGlwYm9hcmRFZmw6OnR5cGVzKCkgY29uc3QKIHsKICAgICBub3RJbXBsZW1l
bnRlZCgpOwotICAgIHJldHVybiBMaXN0SGFzaFNldDxTdHJpbmc+KCk7CisgICAgcmV0dXJuIFZl
Y3RvcjxTdHJpbmc+KCk7CiB9CiAKIFBhc3NSZWZQdHI8RmlsZUxpc3Q+IENsaXBib2FyZEVmbDo6
ZmlsZXMoKSBjb25zdApJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZWZsL0NsaXBib2Fy
ZEVmbC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2VmbC9DbGlwYm9h
cmRFZmwuaAkocmV2aXNpb24gMTQyMTgwKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZWZs
L0NsaXBib2FyZEVmbC5oCSh3b3JraW5nIGNvcHkpCkBAIC0zOSw3ICszOSw3IEBAIHB1YmxpYzoK
ICAgICBTdHJpbmcgZ2V0RGF0YShjb25zdCBTdHJpbmcmKSBjb25zdDsKICAgICBib29sIHNldERh
dGEoY29uc3QgU3RyaW5nJiwgY29uc3QgU3RyaW5nJik7CiAKLSAgICBMaXN0SGFzaFNldDxTdHJp
bmc+IHR5cGVzKCkgY29uc3Q7CisgICAgVmVjdG9yPFN0cmluZz4gdHlwZXMoKSBjb25zdDsKICAg
ICB2aXJ0dWFsIFBhc3NSZWZQdHI8RmlsZUxpc3Q+IGZpbGVzKCkgY29uc3Q7CiAKICAgICBJbnRQ
b2ludCBkcmFnTG9jYXRpb24oKSBjb25zdDsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2d0ay9DbGlwYm9hcmRHdGsuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2d0ay9DbGlwYm9hcmRHdGsuY3BwCShyZXZpc2lvbiAxNDIxODApCisrKyBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ndGsvQ2xpcGJvYXJkR3RrLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTg4
LDMxICsxODgsMzEgQEAgYm9vbCBDbGlwYm9hcmRHdGs6OnNldERhdGEoY29uc3QgU3RyaW5nJgog
ICAgIHJldHVybiBzdWNjZXNzOwogfQogCi1MaXN0SGFzaFNldDxTdHJpbmc+IENsaXBib2FyZEd0
azo6dHlwZXMoKSBjb25zdAorVmVjdG9yPFN0cmluZz4gQ2xpcGJvYXJkR3RrOjp0eXBlcygpIGNv
bnN0CiB7CiAgICAgaWYgKHBvbGljeSgpICE9IENsaXBib2FyZFJlYWRhYmxlICYmIHBvbGljeSgp
ICE9IENsaXBib2FyZFR5cGVzUmVhZGFibGUpCi0gICAgICAgIHJldHVybiBMaXN0SGFzaFNldDxT
dHJpbmc+KCk7CisgICAgICAgIHJldHVybiBWZWN0b3I8U3RyaW5nPigpOwogCiAgICAgaWYgKG1f
Y2xpcGJvYXJkKQogICAgICAgICBQYXN0ZWJvYXJkSGVscGVyOjpkZWZhdWx0UGFzdGVib2FyZEhl
bHBlcigpLT5nZXRDbGlwYm9hcmRDb250ZW50cyhtX2NsaXBib2FyZCk7CiAKLSAgICBMaXN0SGFz
aFNldDxTdHJpbmc+IHR5cGVzOworICAgIFZlY3RvcjxTdHJpbmc+IHR5cGVzOwogICAgIGlmICht
X2RhdGFPYmplY3QtPmhhc1RleHQoKSkgewotICAgICAgICB0eXBlcy5hZGQoInRleHQvcGxhaW4i
KTsKLSAgICAgICAgdHlwZXMuYWRkKCJUZXh0Iik7Ci0gICAgICAgIHR5cGVzLmFkZCgidGV4dCIp
OworICAgICAgICB0eXBlcy5hcHBlbmQoQVNDSUlMaXRlcmFsKCJ0ZXh0L3BsYWluIikpOworICAg
ICAgICB0eXBlcy5hcHBlbmQoQVNDSUlMaXRlcmFsKCJUZXh0IikpOworICAgICAgICB0eXBlcy5h
cHBlbmQoQVNDSUlMaXRlcmFsKCJ0ZXh0IikpOwogICAgIH0KIAogICAgIGlmIChtX2RhdGFPYmpl
Y3QtPmhhc01hcmt1cCgpKQotICAgICAgICB0eXBlcy5hZGQoInRleHQvaHRtbCIpOworICAgICAg
ICB0eXBlcy5hcHBlbmQoQVNDSUlMaXRlcmFsKCJ0ZXh0L2h0bWwiKSk7CiAKICAgICBpZiAobV9k
YXRhT2JqZWN0LT5oYXNVUklMaXN0KCkpIHsKLSAgICAgICAgdHlwZXMuYWRkKCJ0ZXh0L3VyaS1s
aXN0Iik7Ci0gICAgICAgIHR5cGVzLmFkZCgiVVJMIik7CisgICAgICAgIHR5cGVzLmFwcGVuZChB
U0NJSUxpdGVyYWwoInRleHQvdXJpLWxpc3QiKSk7CisgICAgICAgIHR5cGVzLmFwcGVuZChBU0NJ
SUxpdGVyYWwoIlVSTCIpKTsKICAgICB9CiAKICAgICBpZiAobV9kYXRhT2JqZWN0LT5oYXNGaWxl
bmFtZXMoKSkKLSAgICAgICAgdHlwZXMuYWRkKCJGaWxlcyIpOworICAgICAgICB0eXBlcy5hcHBl
bmQoQVNDSUlMaXRlcmFsKCJGaWxlcyIpKTsKIAogICAgIHJldHVybiB0eXBlczsKIH0KSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9DbGlwYm9hcmRHdGsuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvQ2xpcGJvYXJkR3RrLmgJKHJldmlzaW9uIDE0
MjE4MCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9DbGlwYm9hcmRHdGsuaAkod29y
a2luZyBjb3B5KQpAQCAtNTcsNyArNTcsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAg
IFN0cmluZyBnZXREYXRhKGNvbnN0IFN0cmluZyYpIGNvbnN0OwogICAgICAgICBib29sIHNldERh
dGEoY29uc3QgU3RyaW5nJiwgY29uc3QgU3RyaW5nJik7CiAKLSAgICAgICAgdmlydHVhbCBMaXN0
SGFzaFNldDxTdHJpbmc+IHR5cGVzKCkgY29uc3Q7CisgICAgICAgIHZpcnR1YWwgVmVjdG9yPFN0
cmluZz4gdHlwZXMoKSBjb25zdDsKICAgICAgICAgdmlydHVhbCBQYXNzUmVmUHRyPEZpbGVMaXN0
PiBmaWxlcygpIGNvbnN0OwogCiAgICAgICAgIHZvaWQgc2V0RHJhZ0ltYWdlKENhY2hlZEltYWdl
KiwgY29uc3QgSW50UG9pbnQmKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21hYy9D
bGlwYm9hcmRNYWMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tYWMv
Q2xpcGJvYXJkTWFjLmgJKHJldmlzaW9uIDE0MjE4MCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL21hYy9DbGlwYm9hcmRNYWMuaAkod29ya2luZyBjb3B5KQpAQCAtNjIsNyArNjIsNyBAQCBw
dWJsaWM6CiAgICAgdmlydHVhbCBib29sIGhhc0RhdGEoKTsKICAgICAKICAgICAvLyBleHRlbnNp
b25zIGJleW9uZCBJRSdzIEFQSQotICAgIHZpcnR1YWwgTGlzdEhhc2hTZXQ8U3RyaW5nPiB0eXBl
cygpIGNvbnN0OworICAgIHZpcnR1YWwgVmVjdG9yPFN0cmluZz4gdHlwZXMoKSBjb25zdDsKICAg
ICB2aXJ0dWFsIFBhc3NSZWZQdHI8RmlsZUxpc3Q+IGZpbGVzKCkgY29uc3Q7CiAKICAgICB2b2lk
IHNldERyYWdJbWFnZShDYWNoZWRJbWFnZSosIGNvbnN0IEludFBvaW50Jik7CkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9tYWMvQ2xpcGJvYXJkTWFjLm1tCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL21hYy9DbGlwYm9hcmRNYWMubW0JKHJldmlzaW9uIDE0MjE4
MCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21hYy9DbGlwYm9hcmRNYWMubW0JKHdvcmtp
bmcgY29weSkKQEAgLTExOCwxNSArMTE4LDE1IEBAIHN0YXRpYyBTdHJpbmcgdXRpVHlwZUZyb21D
b2NvYVR5cGUoY29uc3QKICAgICByZXR1cm4gU3RyaW5nKCk7CiB9CiAKLXN0YXRpYyB2b2lkIGFk
ZEhUTUxDbGlwYm9hcmRUeXBlc0ZvckNvY29hVHlwZShMaXN0SGFzaFNldDxTdHJpbmc+JiByZXN1
bHRUeXBlcywgY29uc3QgU3RyaW5nJiBjb2NvYVR5cGUsIGNvbnN0IFN0cmluZyYgcGFzdGVib2Fy
ZE5hbWUpCitzdGF0aWMgdm9pZCBhZGRIVE1MQ2xpcGJvYXJkVHlwZXNGb3JDb2NvYVR5cGUoVmVj
dG9yPFN0cmluZz4mIHJlc3VsdFR5cGVzLCBjb25zdCBTdHJpbmcmIGNvY29hVHlwZSwgY29uc3Qg
U3RyaW5nJiBwYXN0ZWJvYXJkTmFtZSkKIHsKICAgICAvLyBVVEkgbWF5IG5vdCBkbyB0aGVzZSBy
aWdodCwgc28gbWFrZSBzdXJlIHdlIGdldCB0aGUgcmlnaHQsIHByZWRpY3RhYmxlIHJlc3VsdAog
ICAgIGlmIChjb2NvYVR5cGUgPT0gU3RyaW5nKE5TU3RyaW5nUGJvYXJkVHlwZSkpIHsKLSAgICAg
ICAgcmVzdWx0VHlwZXMuYWRkKCJ0ZXh0L3BsYWluIik7CisgICAgICAgIHJlc3VsdFR5cGVzLmFw
cGVuZChBU0NJSUxpdGVyYWwoInRleHQvcGxhaW4iKSk7CiAgICAgICAgIHJldHVybjsKICAgICB9
CiAgICAgaWYgKGNvY29hVHlwZSA9PSBTdHJpbmcoTlNVUkxQYm9hcmRUeXBlKSkgewotICAgICAg
ICByZXN1bHRUeXBlcy5hZGQoInRleHQvdXJpLWxpc3QiKTsKKyAgICAgICAgcmVzdWx0VHlwZXMu
YXBwZW5kKEFTQ0lJTGl0ZXJhbCgidGV4dC91cmktbGlzdCIpKTsKICAgICAgICAgcmV0dXJuOwog
ICAgIH0KICAgICBpZiAoY29jb2FUeXBlID09IFN0cmluZyhOU0ZpbGVuYW1lc1Bib2FyZFR5cGUp
KSB7CkBAIC0xMzgsMTggKzEzOCwxOCBAQCBzdGF0aWMgdm9pZCBhZGRIVE1MQ2xpcGJvYXJkVHlw
ZXNGb3JDb2NvCiAgICAgICAgIGlmICghZmlsZUxpc3QuaXNFbXB0eSgpKSB7CiAgICAgICAgICAg
ICAvLyBJdCBpcyB1bmtub3duIGlmIE5TRmlsZW5hbWVzUGJvYXJkVHlwZSBhbHdheXMgaW1wbGll
cyBOU1VSTFBib2FyZFR5cGUgaW4gQ29jb2EsCiAgICAgICAgICAgICAvLyBidXQgTlNGaWxlbmFt
ZXNQYm9hcmRUeXBlIHNob3VsZCBpbXBseSBib3RoICd0ZXh0L3VyaS1saXN0JyBhbmQgJ0ZpbGVz
JwotICAgICAgICAgICAgcmVzdWx0VHlwZXMuYWRkKCJ0ZXh0L3VyaS1saXN0Iik7Ci0gICAgICAg
ICAgICByZXN1bHRUeXBlcy5hZGQoIkZpbGVzIik7CisgICAgICAgICAgICByZXN1bHRUeXBlcy5h
cHBlbmQoQVNDSUlMaXRlcmFsKCJ0ZXh0L3VyaS1saXN0IikpOworICAgICAgICAgICAgcmVzdWx0
VHlwZXMuYXBwZW5kKEFTQ0lJTGl0ZXJhbCgiRmlsZXMiKSk7CiAgICAgICAgIH0KICAgICAgICAg
cmV0dXJuOwogICAgIH0KICAgICBTdHJpbmcgdXRpVHlwZSA9IHV0aVR5cGVGcm9tQ29jb2FUeXBl
KGNvY29hVHlwZSk7CiAgICAgaWYgKCF1dGlUeXBlLmlzRW1wdHkoKSkgewotICAgICAgICByZXN1
bHRUeXBlcy5hZGQodXRpVHlwZSk7CisgICAgICAgIHJlc3VsdFR5cGVzLmFwcGVuZCh1dGlUeXBl
KTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KICAgICAvLyBObyBtYXBwaW5nLCBqdXN0IHBhc3Mg
dGhlIHdob2xlIHN0cmluZyB0aG91Z2gKLSAgICByZXN1bHRUeXBlcy5hZGQoY29jb2FUeXBlKTsK
KyAgICByZXN1bHRUeXBlcy5hcHBlbmQoY29jb2FUeXBlKTsKIH0KIAogdm9pZCBDbGlwYm9hcmRN
YWM6OmNsZWFyRGF0YShjb25zdCBTdHJpbmcmIHR5cGUpCkBAIC0yODAsMTAgKzI4MCwxMCBAQCBi
b29sIENsaXBib2FyZE1hYzo6c2V0RGF0YShjb25zdCBTdHJpbmcKICAgICByZXR1cm4gZmFsc2U7
CiB9CiAKLUxpc3RIYXNoU2V0PFN0cmluZz4gQ2xpcGJvYXJkTWFjOjp0eXBlcygpIGNvbnN0CitW
ZWN0b3I8U3RyaW5nPiBDbGlwYm9hcmRNYWM6OnR5cGVzKCkgY29uc3QKIHsKICAgICBpZiAocG9s
aWN5KCkgIT0gQ2xpcGJvYXJkUmVhZGFibGUgJiYgcG9saWN5KCkgIT0gQ2xpcGJvYXJkVHlwZXNS
ZWFkYWJsZSkKLSAgICAgICAgcmV0dXJuIExpc3RIYXNoU2V0PFN0cmluZz4oKTsKKyAgICAgICAg
cmV0dXJuIFZlY3RvcjxTdHJpbmc+KCk7CiAKICAgICBWZWN0b3I8U3RyaW5nPiB0eXBlczsKICAg
ICBwbGF0Zm9ybVN0cmF0ZWdpZXMoKS0+cGFzdGVib2FyZFN0cmF0ZWd5KCktPmdldFR5cGVzKHR5
cGVzLCBtX3Bhc3RlYm9hcmROYW1lKTsKQEAgLTI5MSw5ICsyOTEsOSBAQCBMaXN0SGFzaFNldDxT
dHJpbmc+IENsaXBib2FyZE1hYzo6dHlwZXMoCiAgICAgLy8gRW5mb3JjZSBjaGFuZ2VDb3VudCBv
dXJzZWx2ZXMgZm9yIHNlY3VyaXR5LiAgV2UgY2hlY2sgYWZ0ZXIgcmVhZGluZyBpbnN0ZWFkIG9m
IGJlZm9yZSB0byBiZQogICAgIC8vIHN1cmUgaXQgZG9lc24ndCBjaGFuZ2UgYmV0d2VlbiBvdXIg
dGVzdGluZyB0aGUgY2hhbmdlIGNvdW50IGFuZCBhY2Nlc3NpbmcgdGhlIGRhdGEuCiAgICAgaWYg
KG1fY2hhbmdlQ291bnQgIT0gcGxhdGZvcm1TdHJhdGVnaWVzKCktPnBhc3RlYm9hcmRTdHJhdGVn
eSgpLT5jaGFuZ2VDb3VudChtX3Bhc3RlYm9hcmROYW1lKSkKLSAgICAgICAgcmV0dXJuIExpc3RI
YXNoU2V0PFN0cmluZz4oKTsKKyAgICAgICAgcmV0dXJuIFZlY3RvcjxTdHJpbmc+KCk7CiAKLSAg
ICBMaXN0SGFzaFNldDxTdHJpbmc+IHJlc3VsdDsKKyAgICBWZWN0b3I8U3RyaW5nPiByZXN1bHQ7
CiAgICAgLy8gRklYTUU6IFRoaXMgbG9vcCBjb3VsZCBiZSBzcGxpdCBpbnRvIHR3byBzdGFnZXMu
IE9uZSB3aGljaCBhZGRzIGFsbCB0aGUgSFRNTDUgc3BlY2lmaWVkIHR5cGVzCiAgICAgLy8gYW5k
IGEgc2Vjb25kIHdoaWNoIGFkZHMgYWxsIHRoZSBleHRyYSB0eXBlcyBmcm9tIHRoZSBjb2NvYSBj
bGlwYm9hcmQgKHdoaWNoIGlzIE1hYy1vbmx5IGJlaGF2aW9yKS4KICAgICBmb3IgKHNpemVfdCBp
ID0gMDsgaSA8IHR5cGVzLnNpemUoKTsgaSsrKSB7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9xdC9DbGlwYm9hcmRRdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vcXQvQ2xpcGJvYXJkUXQuY3BwCShyZXZpc2lvbiAxNDIxODApCisrKyBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9xdC9DbGlwYm9hcmRRdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE4Miwx
NiArMTgyLDE2IEBAIGJvb2wgQ2xpcGJvYXJkUXQ6OnNldERhdGEoY29uc3QgU3RyaW5nJgogfQog
CiAvLyBleHRlbnNpb25zIGJleW9uZCBJRSdzIEFQSQotTGlzdEhhc2hTZXQ8U3RyaW5nPiBDbGlw
Ym9hcmRRdDo6dHlwZXMoKSBjb25zdAorVmVjdG9yPFN0cmluZz4gQ2xpcGJvYXJkUXQ6OnR5cGVz
KCkgY29uc3QKIHsKICAgICBpZiAocG9saWN5KCkgIT0gQ2xpcGJvYXJkUmVhZGFibGUgJiYgcG9s
aWN5KCkgIT0gQ2xpcGJvYXJkVHlwZXNSZWFkYWJsZSkKLSAgICAgICAgcmV0dXJuIExpc3RIYXNo
U2V0PFN0cmluZz4oKTsKKyAgICAgICAgcmV0dXJuIFZlY3RvcjxTdHJpbmc+KCk7CiAKICAgICBB
U1NFUlQobV9yZWFkYWJsZURhdGEpOwotICAgIExpc3RIYXNoU2V0PFN0cmluZz4gcmVzdWx0Owor
ICAgIFZlY3RvcjxTdHJpbmc+IHJlc3VsdDsKICAgICBRU3RyaW5nTGlzdCBmb3JtYXRzID0gbV9y
ZWFkYWJsZURhdGEtPmZvcm1hdHMoKTsKICAgICBmb3IgKGludCBpID0gMDsgaSA8IGZvcm1hdHMu
Y291bnQoKTsgKytpKQotICAgICAgICByZXN1bHQuYWRkKGZvcm1hdHMuYXQoaSkpOworICAgICAg
ICByZXN1bHQuYXBwZW5kKGZvcm1hdHMuYXQoaSkpOwogICAgIHJldHVybiByZXN1bHQ7CiB9CiAK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3F0L0NsaXBib2FyZFF0LmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vcXQvQ2xpcGJvYXJkUXQuaAkocmV2aXNpb24g
MTQyMTgwKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vcXQvQ2xpcGJvYXJkUXQuaAkod29y
a2luZyBjb3B5KQpAQCAtNTcsNyArNTcsNyBAQCBwdWJsaWM6CiAgICAgYm9vbCBzZXREYXRhKGNv
bnN0IFN0cmluZyYgdHlwZSwgY29uc3QgU3RyaW5nJiBkYXRhKTsKIAogICAgIC8vIGV4dGVuc2lv
bnMgYmV5b25kIElFJ3MgQVBJCi0gICAgdmlydHVhbCBMaXN0SGFzaFNldDxTdHJpbmc+IHR5cGVz
KCkgY29uc3Q7CisgICAgdmlydHVhbCBWZWN0b3I8U3RyaW5nPiB0eXBlcygpIGNvbnN0OwogICAg
IHZpcnR1YWwgUGFzc1JlZlB0cjxGaWxlTGlzdD4gZmlsZXMoKSBjb25zdDsKIAogICAgIHZvaWQg
c2V0RHJhZ0ltYWdlKENhY2hlZEltYWdlKiwgY29uc3QgSW50UG9pbnQmKTsKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL3dpbi9DbGlwYm9hcmRXaW4uY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL3dpbi9DbGlwYm9hcmRXaW4uY3BwCShyZXZpc2lvbiAxNDIx
ODApCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS93aW4vQ2xpcGJvYXJkV2luLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtNDg0LDI0ICs0ODQsMjQgQEAgYm9vbCBDbGlwYm9hcmRXaW46OnNldERh
dGEoY29uc3QgU3RyaW5nJgogICAgIHJldHVybiBmYWxzZTsKIH0KIAotc3RhdGljIHZvaWQgYWRk
TWltZVR5cGVzRm9yRm9ybWF0KExpc3RIYXNoU2V0PFN0cmluZz4mIHJlc3VsdHMsIGNvbnN0IEZP
Uk1BVEVUQyYgZm9ybWF0KQorc3RhdGljIHZvaWQgYWRkTWltZVR5cGVzRm9yRm9ybWF0KFZlY3Rv
cjxTdHJpbmc+JiByZXN1bHRzLCBjb25zdCBGT1JNQVRFVEMmIGZvcm1hdCkKIHsKICAgICAvLyBV
UkwgYW5kIFRleHQgYXJlIHByb3ZpZGVkIGZvciBjb21wYXRpYmlsaXR5IHdpdGggSUUncyBtb2Rl
bAogICAgIGlmIChmb3JtYXQuY2ZGb3JtYXQgPT0gdXJsRm9ybWF0KCktPmNmRm9ybWF0IHx8IGZv
cm1hdC5jZkZvcm1hdCA9PSB1cmxXRm9ybWF0KCktPmNmRm9ybWF0KSB7Ci0gICAgICAgIHJlc3Vs
dHMuYWRkKCJVUkwiKTsKLSAgICAgICAgcmVzdWx0cy5hZGQoInRleHQvdXJpLWxpc3QiKTsKKyAg
ICAgICAgcmVzdWx0cy5hcHBlbmQoQVNDSUlMaXRlcmFsKCJVUkwiKSk7CisgICAgICAgIHJlc3Vs
dHMuYXBwZW5kKEFTQ0lJTGl0ZXJhbCgidGV4dC91cmktbGlzdCIpKTsKICAgICB9CiAKICAgICBp
ZiAoZm9ybWF0LmNmRm9ybWF0ID09IHBsYWluVGV4dFdGb3JtYXQoKS0+Y2ZGb3JtYXQgfHwgZm9y
bWF0LmNmRm9ybWF0ID09IHBsYWluVGV4dEZvcm1hdCgpLT5jZkZvcm1hdCkgewotICAgICAgICBy
ZXN1bHRzLmFkZCgiVGV4dCIpOwotICAgICAgICByZXN1bHRzLmFkZCgidGV4dC9wbGFpbiIpOwor
ICAgICAgICByZXN1bHRzLmFwcGVuZChBU0NJSUxpdGVyYWwoIlRleHQiKSk7CisgICAgICAgIHJl
c3VsdHMuYXBwZW5kKEFTQ0lJTGl0ZXJhbCgidGV4dC9wbGFpbiIpKTsKICAgICB9CiB9CiAKIC8v
IGV4dGVuc2lvbnMgYmV5b25kIElFJ3MgQVBJCi1MaXN0SGFzaFNldDxTdHJpbmc+IENsaXBib2Fy
ZFdpbjo6dHlwZXMoKSBjb25zdAorVmVjdG9yPFN0cmluZz4gQ2xpcGJvYXJkV2luOjp0eXBlcygp
IGNvbnN0CiB7IAotICAgIExpc3RIYXNoU2V0PFN0cmluZz4gcmVzdWx0czsKKyAgICBWZWN0b3I8
U3RyaW5nPiByZXN1bHRzOwogICAgIGlmIChwb2xpY3koKSAhPSBDbGlwYm9hcmRSZWFkYWJsZSAm
JiBwb2xpY3koKSAhPSBDbGlwYm9hcmRUeXBlc1JlYWRhYmxlKQogICAgICAgICByZXR1cm4gcmVz
dWx0czsKIApJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vd2luL0NsaXBib2FyZFdpbi5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3dpbi9DbGlwYm9hcmRXaW4u
aAkocmV2aXNpb24gMTQyMTgwKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vd2luL0NsaXBi
b2FyZFdpbi5oCSh3b3JraW5nIGNvcHkpCkBAIC02NCw3ICs2NCw3IEBAIHB1YmxpYzoKICAgICBi
b29sIHNldERhdGEoY29uc3QgU3RyaW5nJiB0eXBlLCBjb25zdCBTdHJpbmcmIGRhdGEpOwogCiAg
ICAgLy8gZXh0ZW5zaW9ucyBiZXlvbmQgSUUncyBBUEkKLSAgICB2aXJ0dWFsIExpc3RIYXNoU2V0
PFN0cmluZz4gdHlwZXMoKSBjb25zdDsKKyAgICB2aXJ0dWFsIFZlY3RvcjxTdHJpbmc+IHR5cGVz
KCkgY29uc3Q7CiAgICAgdmlydHVhbCBQYXNzUmVmUHRyPEZpbGVMaXN0PiBmaWxlcygpIGNvbnN0
OwogCiAgICAgdm9pZCBzZXREcmFnSW1hZ2UoQ2FjaGVkSW1hZ2UqLCBjb25zdCBJbnRQb2ludCYp
Owo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>192817</attachid>
            <date>2013-03-12 15:05:57 -0700</date>
            <delta_ts>2013-03-13 13:47:21 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-82888-20130312150155.patch</filename>
            <type>text/plain</type>
            <size>24317</size>
            <attacher name="Daniel Cheng">dcheng</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTQ1NTM5CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZjdiOWIxZDU4NDczNjY1
NGE0N2EzYWU5MjA3ODFiY2EzMjJlZGQyNy4uZjc3MGRlYWZkMWYwNzlkMmM1YTMyMzdhOTI0NWI3
NzM4ZjZjNDJkNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQ3IEBACisyMDEzLTAzLTEyICAgVmlu
ZWV0IENoYXVkaGFyeSAgPHJnZjc0OEBtb3Rvcm9sYS5jb20+CisKKyAgICAgICAgQ29uc2lkZXIg
cmVwbGFjaW5nIHJldHVybiB0eXBlIG9mIENsaXBib2FyZDo6dHlwZXMoKSBmcm9tIExpc3RIYXNo
U2V0PFN0cmluZz4gdG8gVmVjdG9yPFN0cmluZz4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTgyODg4CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZ
IChPT1BTISkuCisKKyAgICAgICAgQXMgcGFydCBvZiByZW1vdmluZyBjdXN0b20gYmluZGluZ3Mg
b2YgdHlwZXMgQXJyYXkgQ2xpcGJvYXJkOjp0eXBlcygpIG5lZWRzIHRvIHJldHVybgorICAgICAg
ICBWZWN0b3I8U3RyaW5nPiB0aGFuIExpc3RIYXNoU2V0PFN0cmluZz4KKworICAgICAgICBObyBu
ZXcgdGVzdHMuIEV4aXN0aW5nIHRlc3Qgc2hvdWxkIHBhc3Mgd2l0aCB0aGlzIGNoYW5nZSBhcyBu
byBiZWhhdm91cmFsIGNoYW5nZXMuCisKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU0NsaXBib2Fy
ZEN1c3RvbS5jcHA6IFJlcGxhY2UgZGF0YSB0eXBlIGZyb20gTGlzdEhhc2hTZXQ8PiB0byBWZWN0
b3I8Pi4KKyAgICAgICAgKFdlYkNvcmU6OkpTQ2xpcGJvYXJkOjp0eXBlcyk6CisgICAgICAgICog
YmluZGluZ3MvdjgvY3VzdG9tL1Y4Q2xpcGJvYXJkQ3VzdG9tLmNwcDogRGl0dG8uCisgICAgICAg
IChXZWJDb3JlOjpWOENsaXBib2FyZDo6dHlwZXNBY2Nlc3NvckdldHRlcik6IERpdHRvLgorICAg
ICAgICAqIGRvbS9DbGlwYm9hcmQuaDogRGl0dG8uCisgICAgICAgICogcGxhdGZvcm0vYmxhY2ti
ZXJyeS9DbGlwYm9hcmRCbGFja0JlcnJ5LmNwcDogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpD
bGlwYm9hcmRCbGFja0JlcnJ5Ojp0eXBlcyk6CisgICAgICAgICogcGxhdGZvcm0vYmxhY2tiZXJy
eS9DbGlwYm9hcmRCbGFja0JlcnJ5Lmg6IERpdHRvLgorICAgICAgICAqIHBsYXRmb3JtL2Nocm9t
aXVtL0Nocm9taXVtRGF0YU9iamVjdC5jcHA6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6Q2hy
b21pdW1EYXRhT2JqZWN0Ojp0eXBlcyk6CisgICAgICAgICogcGxhdGZvcm0vY2hyb21pdW0vQ2hy
b21pdW1EYXRhT2JqZWN0Lmg6IERpdHRvLgorICAgICAgICAqIHBsYXRmb3JtL2Nocm9taXVtL0Ns
aXBib2FyZENocm9taXVtLmNwcDogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpDbGlwYm9hcmRD
aHJvbWl1bTo6dHlwZXMpOgorICAgICAgICAqIHBsYXRmb3JtL2Nocm9taXVtL0NsaXBib2FyZENo
cm9taXVtLmg6IERpdHRvLgorICAgICAgICAqIHBsYXRmb3JtL2VmbC9DbGlwYm9hcmRFZmwuY3Bw
OiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OkNsaXBib2FyZEVmbDo6dHlwZXMpOgorICAgICAg
ICAqIHBsYXRmb3JtL2VmbC9DbGlwYm9hcmRFZmwuaDogRGl0dG8uCisgICAgICAgICogcGxhdGZv
cm0vZ3RrL0NsaXBib2FyZEd0ay5jcHA6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6Q2xpcGJv
YXJkR3RrOjp0eXBlcyk6CisgICAgICAgICogcGxhdGZvcm0vZ3RrL0NsaXBib2FyZEd0ay5oOiBE
aXR0by4KKyAgICAgICAgKiBwbGF0Zm9ybS9tYWMvQ2xpcGJvYXJkTWFjLmg6IERpdHRvLgorICAg
ICAgICAqIHBsYXRmb3JtL21hYy9DbGlwYm9hcmRNYWMubW06IERpdHRvLgorICAgICAgICAoV2Vi
Q29yZTo6YWRkSFRNTENsaXBib2FyZFR5cGVzRm9yQ29jb2FUeXBlKToKKyAgICAgICAgKFdlYkNv
cmU6OkNsaXBib2FyZE1hYzo6dHlwZXMpOgorICAgICAgICAqIHBsYXRmb3JtL3F0L0NsaXBib2Fy
ZFF0LmNwcDogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpDbGlwYm9hcmRRdDo6dHlwZXMpOgor
ICAgICAgICAqIHBsYXRmb3JtL3F0L0NsaXBib2FyZFF0Lmg6IERpdHRvLgorICAgICAgICAqIHBs
YXRmb3JtL3dpbi9DbGlwYm9hcmRXaW4uY3BwOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OmFk
ZE1pbWVUeXBlc0ZvckZvcm1hdCk6CisgICAgICAgIChXZWJDb3JlOjpDbGlwYm9hcmRXaW46OnR5
cGVzKToKKyAgICAgICAgKiBwbGF0Zm9ybS93aW4vQ2xpcGJvYXJkV2luLmg6IERpdHRvLgorCiAy
MDEzLTAzLTEyICBWc2V2b2xvZCBWbGFzb3YgIDx2c2V2aWtAY2hyb21pdW0ub3JnPgogCiAgICAg
ICAgIFdlYiBJbnNwZWN0b3I6IFJlc291cmNlU2NyaXB0RmlsZSBkaXZlcmdlZCBzdGF0ZSBzaG91
bGQgYmUgY29ycmVjdGx5IHJlc2V0IGFmdGVyIGRlYnVnZ2VyIHJlc2V0LgpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNDbGlwYm9hcmRDdXN0b20uY3BwIGIvU291cmNl
L1dlYkNvcmUvYmluZGluZ3MvanMvSlNDbGlwYm9hcmRDdXN0b20uY3BwCmluZGV4IGUzNmM2MDMy
ZmViZTYxOWI1MzM3NTNjM2UyYWRmMzM3NTAwZmY3ZWIuLmYzOTIyMTdjOGM0YzkzNzIzOTUzNDQ1
MDU4NGY1ZGRhYTQ3Njc1ZjUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pz
L0pTQ2xpcGJvYXJkQ3VzdG9tLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9K
U0NsaXBib2FyZEN1c3RvbS5jcHAKQEAgLTUxLDEzICs1MSwxMyBAQCBKU1ZhbHVlIEpTQ2xpcGJv
YXJkOjp0eXBlcyhFeGVjU3RhdGUqIGV4ZWMpIGNvbnN0CiB7CiAgICAgQ2xpcGJvYXJkKiBjbGlw
Ym9hcmQgPSBpbXBsKCk7CiAKLSAgICBMaXN0SGFzaFNldDxTdHJpbmc+IHR5cGVzID0gY2xpcGJv
YXJkLT50eXBlcygpOworICAgIFZlY3RvcjxTdHJpbmc+IHR5cGVzID0gY2xpcGJvYXJkLT50eXBl
cygpOwogICAgIGlmICh0eXBlcy5pc0VtcHR5KCkpCiAgICAgICAgIHJldHVybiBqc051bGwoKTsK
IAogICAgIE1hcmtlZEFyZ3VtZW50QnVmZmVyIGxpc3Q7Ci0gICAgTGlzdEhhc2hTZXQ8U3RyaW5n
Pjo6Y29uc3RfaXRlcmF0b3IgZW5kID0gdHlwZXMuZW5kKCk7Ci0gICAgZm9yIChMaXN0SGFzaFNl
dDxTdHJpbmc+Ojpjb25zdF9pdGVyYXRvciBpdCA9IHR5cGVzLmJlZ2luKCk7IGl0ICE9IGVuZDsg
KytpdCkKKyAgICBWZWN0b3I8U3RyaW5nPjo6Y29uc3RfaXRlcmF0b3IgZW5kID0gdHlwZXMuZW5k
KCk7CisgICAgZm9yIChWZWN0b3I8U3RyaW5nPjo6Y29uc3RfaXRlcmF0b3IgaXQgPSB0eXBlcy5i
ZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpCiAgICAgICAgIGxpc3QuYXBwZW5kKGpzU3RyaW5nV2l0
aENhY2hlKGV4ZWMsICppdCkpOwogICAgIHJldHVybiBjb25zdHJ1Y3RBcnJheShleGVjLCAwLCBn
bG9iYWxPYmplY3QoKSwgbGlzdCk7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy92OC9jdXN0b20vVjhDbGlwYm9hcmRDdXN0b20uY3BwIGIvU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3MvdjgvY3VzdG9tL1Y4Q2xpcGJvYXJkQ3VzdG9tLmNwcAppbmRleCA1ZGZhOWIxYzZkMzE0
NjE4MGVjMGJkODJkYTRlMGY2MjhmMWJiM2Y0Li5lNTIyMmQzZDUxNjFhZTI1OTJiMDM2YTFkYzdi
OTRmZGVmMTM0YWI2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0
b20vVjhDbGlwYm9hcmRDdXN0b20uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4
L2N1c3RvbS9WOENsaXBib2FyZEN1c3RvbS5jcHAKQEAgLTQ3LDE0ICs0NywxNCBAQCB2ODo6SGFu
ZGxlPHY4OjpWYWx1ZT4gVjhDbGlwYm9hcmQ6OnR5cGVzQXR0ckdldHRlckN1c3RvbSh2ODo6TG9j
YWw8djg6OlN0cmluZz4gbgogewogICAgIENsaXBib2FyZCogY2xpcGJvYXJkID0gVjhDbGlwYm9h
cmQ6OnRvTmF0aXZlKGluZm8uSG9sZGVyKCkpOwogCi0gICAgTGlzdEhhc2hTZXQ8U3RyaW5nPiB0
eXBlcyA9IGNsaXBib2FyZC0+dHlwZXMoKTsKKyAgICBWZWN0b3I8U3RyaW5nPiB0eXBlcyA9IGNs
aXBib2FyZC0+dHlwZXMoKTsKICAgICBpZiAodHlwZXMuaXNFbXB0eSgpKQogICAgICAgICByZXR1
cm4gdjhOdWxsKGluZm8uR2V0SXNvbGF0ZSgpKTsKIAogICAgIHY4OjpMb2NhbDx2ODo6QXJyYXk+
IHJlc3VsdCA9IHY4OjpBcnJheTo6TmV3KHR5cGVzLnNpemUoKSk7Ci0gICAgTGlzdEhhc2hTZXQ8
U3RyaW5nPjo6Y29uc3RfaXRlcmF0b3IgZW5kID0gdHlwZXMuZW5kKCk7CisgICAgVmVjdG9yPFN0
cmluZz46OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IHR5cGVzLmVuZCgpOwogICAgIGludCBpbmRleCA9
IDA7Ci0gICAgZm9yIChMaXN0SGFzaFNldDxTdHJpbmc+Ojpjb25zdF9pdGVyYXRvciBpdCA9IHR5
cGVzLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCwgKytpbmRleCkKKyAgICBmb3IgKFZlY3RvcjxT
dHJpbmc+Ojpjb25zdF9pdGVyYXRvciBpdCA9IHR5cGVzLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytp
dCwgKytpbmRleCkKICAgICAgICAgcmVzdWx0LT5TZXQodjhJbnRlZ2VyKGluZGV4LCBpbmZvLkdl
dElzb2xhdGUoKSksIHY4U3RyaW5nKCppdCwgaW5mby5HZXRJc29sYXRlKCkpKTsKIAogICAgIHJl
dHVybiByZXN1bHQ7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vQ2xpcGJvYXJkLmgg
Yi9Tb3VyY2UvV2ViQ29yZS9kb20vQ2xpcGJvYXJkLmgKaW5kZXggZDExYjY1MmEyMTlhYjYwYzM1
MzVmZWIwYTEyODBiNWQ3YWNmZjc2Mi4uMjA0Y2IxYTk0YzkwZjc2MWE5MzJiZWIzMGZjNDBjMDgw
NjM2ZDc1YyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZG9tL0NsaXBib2FyZC5oCisrKyBi
L1NvdXJjZS9XZWJDb3JlL2RvbS9DbGlwYm9hcmQuaApAQCAtNjYsNyArNjYsNyBAQCBuYW1lc3Bh
Y2UgV2ViQ29yZSB7CiAgICAgICAgIHZpcnR1YWwgYm9vbCBzZXREYXRhKGNvbnN0IFN0cmluZyYg
dHlwZSwgY29uc3QgU3RyaW5nJiBkYXRhKSA9IDA7CiAgICAgCiAgICAgICAgIC8vIGV4dGVuc2lv
bnMgYmV5b25kIElFJ3MgQVBJCi0gICAgICAgIHZpcnR1YWwgTGlzdEhhc2hTZXQ8U3RyaW5nPiB0
eXBlcygpIGNvbnN0ID0gMDsKKyAgICAgICAgdmlydHVhbCBWZWN0b3I8U3RyaW5nPiB0eXBlcygp
IGNvbnN0ID0gMDsKICAgICAgICAgdmlydHVhbCBQYXNzUmVmUHRyPEZpbGVMaXN0PiBmaWxlcygp
IGNvbnN0ID0gMDsKIAogICAgICAgICBJbnRQb2ludCBkcmFnTG9jYXRpb24oKSBjb25zdCB7IHJl
dHVybiBtX2RyYWdMb2M7IH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2Js
YWNrYmVycnkvQ2xpcGJvYXJkQmxhY2tCZXJyeS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ibGFja2JlcnJ5L0NsaXBib2FyZEJsYWNrQmVycnkuY3BwCmluZGV4IGFkZTIyZWY0N2ViZjEw
NDRlMjBhYTZjOWUyNjY0OWE3ZWYyMDQ1NGQuLjcyNTdmNTIyZGQwMzNiZGYyYmY5OTRiNTY1MjU2
MzE2NjU4NDM4NWIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2JsYWNrYmVy
cnkvQ2xpcGJvYXJkQmxhY2tCZXJyeS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
YmxhY2tiZXJyeS9DbGlwYm9hcmRCbGFja0JlcnJ5LmNwcApAQCAtNzgsMTYgKzc4LDE2IEBAIGJv
b2wgQ2xpcGJvYXJkQmxhY2tCZXJyeTo6c2V0RGF0YShjb25zdCBTdHJpbmcmIHR5cGUsIGNvbnN0
IFN0cmluZyYgdGV4dCkKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotTGlzdEhhc2hTZXQ8U3RyaW5n
PiBDbGlwYm9hcmRCbGFja0JlcnJ5Ojp0eXBlcygpIGNvbnN0CitWZWN0b3I8U3RyaW5nPiBDbGlw
Ym9hcmRCbGFja0JlcnJ5Ojp0eXBlcygpIGNvbnN0CiB7CiAgICAgaWYgKHBvbGljeSgpICE9IENs
aXBib2FyZFJlYWRhYmxlICYmIHBvbGljeSgpICE9IENsaXBib2FyZFR5cGVzUmVhZGFibGUpCi0g
ICAgICAgIHJldHVybiBMaXN0SGFzaFNldDxTdHJpbmc+KCk7CisgICAgICAgIHJldHVybiBWZWN0
b3I8U3RyaW5nPigpOwogCiAgICAgLy8gV2UgdXNlIGhhcmRjb2RlZCBsaXN0IGhlcmUgc2luY2Ug
dGhlcmUgc2VlbXMgdG8gYmUgbm8gQVBJIHRvIGdldCB0aGUgbGlzdC4KLSAgICBMaXN0SGFzaFNl
dDxTdHJpbmc+IHJldDsKLSAgICByZXQuYWRkKCJ0ZXh0L3BsYWluIik7Ci0gICAgcmV0LmFkZCgi
dGV4dC9odG1sIik7Ci0gICAgcmV0LmFkZCgidGV4dC91cmwiKTsKKyAgICBWZWN0b3I8U3RyaW5n
PiByZXQ7CisgICAgcmV0LmFwcGVuZChBU0NJSUxpdGVyYWwoInRleHQvcGxhaW4iKSk7CisgICAg
cmV0LmFwcGVuZChBU0NJSUxpdGVyYWwoInRleHQvaHRtbCIpKTsKKyAgICByZXQuYXBwZW5kKEFT
Q0lJTGl0ZXJhbCgidGV4dC91cmwiKSk7CiAgICAgcmV0dXJuIHJldDsKIH0KIApkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vYmxhY2tiZXJyeS9DbGlwYm9hcmRCbGFja0JlcnJ5
LmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ibGFja2JlcnJ5L0NsaXBib2FyZEJsYWNrQmVy
cnkuaAppbmRleCAzN2RhNTE0YjA3NTE0MGU5MzA3NDAzODZiNzdiNjU4Nzk0Njg2ZDE0Li5jOGQ4
MDk3M2I4NDVlMTE4MzgzYzcyZGY2NjU2NzdiNWYzOGJmNjQxIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ibGFja2JlcnJ5L0NsaXBib2FyZEJsYWNrQmVycnkuaAorKysgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ibGFja2JlcnJ5L0NsaXBib2FyZEJsYWNrQmVycnkuaApA
QCAtMzksNyArMzksNyBAQCBwdWJsaWM6CiAgICAgYm9vbCBzZXREYXRhKGNvbnN0IFN0cmluZyYg
dHlwZSwgY29uc3QgU3RyaW5nJiBkYXRhKTsKIAogICAgIC8vIGV4dGVuc2lvbnMgYmV5b25kIElF
J3MgQVBJCi0gICAgdmlydHVhbCBMaXN0SGFzaFNldDxTdHJpbmc+IHR5cGVzKCkgY29uc3Q7Cisg
ICAgdmlydHVhbCBWZWN0b3I8U3RyaW5nPiB0eXBlcygpIGNvbnN0OwogICAgIHZpcnR1YWwgUGFz
c1JlZlB0cjxGaWxlTGlzdD4gZmlsZXMoKSBjb25zdDsKICAgICB2aXJ0dWFsIERyYWdJbWFnZVJl
ZiBjcmVhdGVEcmFnSW1hZ2UoSW50UG9pbnQmKSBjb25zdDsKICAgICB2aXJ0dWFsIHZvaWQgZGVj
bGFyZUFuZFdyaXRlRHJhZ0ltYWdlKEVsZW1lbnQqLCBjb25zdCBLVVJMJiwgY29uc3QgU3RyaW5n
JiB0aXRsZSwgRnJhbWUqKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2No
cm9taXVtL0Nocm9taXVtRGF0YU9iamVjdC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9j
aHJvbWl1bS9DaHJvbWl1bURhdGFPYmplY3QuY3BwCmluZGV4IDliMTFmMjNmZTNjYjAzNTg5NWJi
ZTdhZmUyZDEyZWZkOGNlNDQ2MjIuLjRiOTViYWMxNGRkNGMxNTkxOWNhOTAxNDIxMjhlMzcxNjhj
ZDA4ZDcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2Nocm9taXVtL0Nocm9t
aXVtRGF0YU9iamVjdC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY2hyb21pdW0v
Q2hyb21pdW1EYXRhT2JqZWN0LmNwcApAQCAtMTI2LDIwICsxMjYsMjAgQEAgdm9pZCBDaHJvbWl1
bURhdGFPYmplY3Q6OmNsZWFyQWxsRXhjZXB0RmlsZXMoKQogICAgIH0KIH0KIAotTGlzdEhhc2hT
ZXQ8U3RyaW5nPiBDaHJvbWl1bURhdGFPYmplY3Q6OnR5cGVzKCkgY29uc3QKK1ZlY3RvcjxTdHJp
bmc+IENocm9taXVtRGF0YU9iamVjdDo6dHlwZXMoKSBjb25zdAogewotICAgIExpc3RIYXNoU2V0
PFN0cmluZz4gcmVzdWx0czsKKyAgICBWZWN0b3I8U3RyaW5nPiByZXN1bHRzOwogICAgIGJvb2wg
Y29udGFpbnNGaWxlcyA9IGZhbHNlOwogICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbV9pdGVt
TGlzdC5zaXplKCk7ICsraSkgewogICAgICAgICBpZiAobV9pdGVtTGlzdFtpXS0+a2luZCgpID09
IERhdGFUcmFuc2Zlckl0ZW06OmtpbmRTdHJpbmcpCi0gICAgICAgICAgICByZXN1bHRzLmFkZCht
X2l0ZW1MaXN0W2ldLT50eXBlKCkpOworICAgICAgICAgICAgcmVzdWx0cy5hcHBlbmQobV9pdGVt
TGlzdFtpXS0+dHlwZSgpKTsKICAgICAgICAgZWxzZSBpZiAobV9pdGVtTGlzdFtpXS0+a2luZCgp
ID09IERhdGFUcmFuc2Zlckl0ZW06OmtpbmRGaWxlKQogICAgICAgICAgICAgY29udGFpbnNGaWxl
cyA9IHRydWU7CiAgICAgICAgIGVsc2UKICAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgp
OwogICAgIH0KICAgICBpZiAoY29udGFpbnNGaWxlcykKLSAgICAgICAgcmVzdWx0cy5hZGQobWlt
ZVR5cGVGaWxlcyk7CisgICAgICAgIHJlc3VsdHMuYXBwZW5kKEFTQ0lJTGl0ZXJhbChtaW1lVHlw
ZUZpbGVzKSk7CiAgICAgcmV0dXJuIHJlc3VsdHM7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2Nocm9taXVtL0Nocm9taXVtRGF0YU9iamVjdC5oIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vY2hyb21pdW0vQ2hyb21pdW1EYXRhT2JqZWN0LmgKaW5kZXggMjU1MWM0
NWRhZTdkYjUyNWM5YjM5MGE0MjdiOWZiMjI0YTcwOTI1MS4uMTIzZmU3N2RhODUyNWIyMDg0NDhl
NDZjZjlmOWFmZDk5ZGRjOTJjMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Y2hyb21pdW0vQ2hyb21pdW1EYXRhT2JqZWN0LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vY2hyb21pdW0vQ2hyb21pdW1EYXRhT2JqZWN0LmgKQEAgLTY5LDcgKzY5LDcgQEAgcHVibGlj
OgogICAgIHZvaWQgY2xlYXJEYXRhKGNvbnN0IFN0cmluZyYgdHlwZSk7CiAgICAgdm9pZCBjbGVh
ckFsbEV4Y2VwdEZpbGVzKCk7CiAKLSAgICBMaXN0SGFzaFNldDxTdHJpbmc+IHR5cGVzKCkgY29u
c3Q7CisgICAgVmVjdG9yPFN0cmluZz4gdHlwZXMoKSBjb25zdDsKICAgICBTdHJpbmcgZ2V0RGF0
YShjb25zdCBTdHJpbmcmIHR5cGUpIGNvbnN0OwogICAgIGJvb2wgc2V0RGF0YShjb25zdCBTdHJp
bmcmIHR5cGUsIGNvbnN0IFN0cmluZyYgZGF0YSk7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2Nocm9taXVtL0NsaXBib2FyZENocm9taXVtLmNwcCBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2Nocm9taXVtL0NsaXBib2FyZENocm9taXVtLmNwcAppbmRleCBmYzM3Mjc4
ZDZiOTIyNzNhZDg5NTIxNTcyZWI1ZDg0ZGJhZTkyMTg5Li5hZTg1YzQ1NzhiMDYzNDRlMjZmMmQz
NzFkZjcwZWUxZjg2ZDk1OGVkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9j
aHJvbWl1bS9DbGlwYm9hcmRDaHJvbWl1bS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vY2hyb21pdW0vQ2xpcGJvYXJkQ2hyb21pdW0uY3BwCkBAIC0yNzUsMTAgKzI3NSwxMCBAQCBi
b29sIENsaXBib2FyZENocm9taXVtOjpzZXREYXRhKGNvbnN0IFN0cmluZyYgdHlwZSwgY29uc3Qg
U3RyaW5nJiBkYXRhKQogfQogCiAvLyBleHRlbnNpb25zIGJleW9uZCBJRSdzIEFQSQotTGlzdEhh
c2hTZXQ8U3RyaW5nPiBDbGlwYm9hcmRDaHJvbWl1bTo6dHlwZXMoKSBjb25zdAorVmVjdG9yPFN0
cmluZz4gQ2xpcGJvYXJkQ2hyb21pdW06OnR5cGVzKCkgY29uc3QKIHsKICAgICBpZiAocG9saWN5
KCkgIT0gQ2xpcGJvYXJkUmVhZGFibGUgJiYgcG9saWN5KCkgIT0gQ2xpcGJvYXJkVHlwZXNSZWFk
YWJsZSkKLSAgICAgICAgcmV0dXJuIExpc3RIYXNoU2V0PFN0cmluZz4oKTsKKyAgICAgICAgcmV0
dXJuIFZlY3RvcjxTdHJpbmc+KCk7CiAKICAgICByZXR1cm4gbV9kYXRhT2JqZWN0LT50eXBlcygp
OwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY2hyb21pdW0vQ2xpcGJv
YXJkQ2hyb21pdW0uaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2Nocm9taXVtL0NsaXBib2Fy
ZENocm9taXVtLmgKaW5kZXggZTQxODM4ZGE5NjRiNGFmMzRmMWQ5NzczYjQwODNlMTQ4Y2U4NzU3
YS4uODQxYWFlNjEzNWMwZjhkMmM0OTRjNWM0ZWJiOGVmMjZiZDQ3MTE3YiAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY2hyb21pdW0vQ2xpcGJvYXJkQ2hyb21pdW0uaAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jaHJvbWl1bS9DbGlwYm9hcmRDaHJvbWl1bS5oCkBA
IC04NCw3ICs4NCw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgYm9vbCBwbGF0Zm9y
bUNsaXBib2FyZENoYW5nZWQoKSBjb25zdDsKIAogICAgICAgICAvLyBleHRlbnNpb25zIGJleW9u
ZCBJRSdzIEFQSQotICAgICAgICB2aXJ0dWFsIExpc3RIYXNoU2V0PFN0cmluZz4gdHlwZXMoKSBj
b25zdDsKKyAgICAgICAgdmlydHVhbCBWZWN0b3I8U3RyaW5nPiB0eXBlcygpIGNvbnN0OwogICAg
ICAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8RmlsZUxpc3Q+IGZpbGVzKCkgY29uc3Q7CiAKICAgICAg
ICAgdm9pZCBzZXREcmFnSW1hZ2UoQ2FjaGVkSW1hZ2UqLCBjb25zdCBJbnRQb2ludCYpOwpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY2hyb21pdW0vRHJhZ0RhdGFDaHJvbWl1
bS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jaHJvbWl1bS9EcmFnRGF0YUNocm9taXVt
LmNwcAppbmRleCBmYmRlNWVkOWEwYTU0ZjMzYzJjZDYxYmRjNTAxNWVlMzhhZDliNTY3Li41NDhh
NzBiMGNmNmRiOGY1YWVjY2M0ZjViNDc4NjhmYzdhOTY5ZmYzIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9jaHJvbWl1bS9EcmFnRGF0YUNocm9taXVtLmNwcAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9jaHJvbWl1bS9EcmFnRGF0YUNocm9taXVtLmNwcApAQCAtNTIs
MTkgKzUyLDE5IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogc3RhdGljIGJvb2wgY29udGFpbnNI
VE1MKGNvbnN0IENocm9taXVtRGF0YU9iamVjdCogZHJvcERhdGEpCiB7Ci0gICAgcmV0dXJuIGRy
b3BEYXRhLT50eXBlcygpLmNvbnRhaW5zKG1pbWVUeXBlVGV4dEhUTUwpOworICAgIHJldHVybiBk
cm9wRGF0YS0+dHlwZXMoKS5jb250YWlucyhTdHJpbmcoQVNDSUlMaXRlcmFsKG1pbWVUeXBlVGV4
dEhUTUwpKSk7CiB9CiAKIGJvb2wgRHJhZ0RhdGE6OmNvbnRhaW5zVVJMKEZyYW1lKiwgRmlsZW5h
bWVDb252ZXJzaW9uUG9saWN5IGZpbGVuYW1lUG9saWN5KSBjb25zdAogewotICAgIHJldHVybiBt
X3BsYXRmb3JtRHJhZ0RhdGEtPnR5cGVzKCkuY29udGFpbnMobWltZVR5cGVUZXh0VVJJTGlzdCkK
KyAgICByZXR1cm4gbV9wbGF0Zm9ybURyYWdEYXRhLT50eXBlcygpLmNvbnRhaW5zKFN0cmluZyhB
U0NJSUxpdGVyYWwobWltZVR5cGVUZXh0VVJJTGlzdCkpKQogICAgICAgICB8fCAoZmlsZW5hbWVQ
b2xpY3kgPT0gQ29udmVydEZpbGVuYW1lcyAmJiBtX3BsYXRmb3JtRHJhZ0RhdGEtPmNvbnRhaW5z
RmlsZW5hbWVzKCkpOwogfQogCiBTdHJpbmcgRHJhZ0RhdGE6OmFzVVJMKEZyYW1lKiwgRmlsZW5h
bWVDb252ZXJzaW9uUG9saWN5IGZpbGVuYW1lUG9saWN5LCBTdHJpbmcqIHRpdGxlKSBjb25zdAog
ewogICAgIFN0cmluZyB1cmw7Ci0gICAgaWYgKG1fcGxhdGZvcm1EcmFnRGF0YS0+dHlwZXMoKS5j
b250YWlucyhtaW1lVHlwZVRleHRVUklMaXN0KSkKKyAgICBpZiAobV9wbGF0Zm9ybURyYWdEYXRh
LT50eXBlcygpLmNvbnRhaW5zKFN0cmluZyhBU0NJSUxpdGVyYWwobWltZVR5cGVUZXh0VVJJTGlz
dCkpKSkKICAgICAgICAgbV9wbGF0Zm9ybURyYWdEYXRhLT51cmxBbmRUaXRsZSh1cmwsIHRpdGxl
KTsKICAgICBlbHNlIGlmIChmaWxlbmFtZVBvbGljeSA9PSBDb252ZXJ0RmlsZW5hbWVzICYmIGNv
bnRhaW5zRmlsZXMoKSkgewogICAgICAgICBTdHJpbmcgcGF0aCA9IFN0cmluZyhXZWJLaXQ6OlBs
YXRmb3JtOjpjdXJyZW50KCktPmZpbGVVdGlsaXRpZXMoKS0+Z2V0QWJzb2x1dGVQYXRoKG1fcGxh
dGZvcm1EcmFnRGF0YS0+ZmlsZW5hbWVzKClbMF0pKTsKQEAgLTk3LDcgKzk3LDcgQEAgdm9pZCBE
cmFnRGF0YTo6YXNGaWxlbmFtZXMoVmVjdG9yPFN0cmluZz4mIHJlc3VsdCkgY29uc3QKIAogYm9v
bCBEcmFnRGF0YTo6Y29udGFpbnNQbGFpblRleHQoKSBjb25zdAogewotICAgIHJldHVybiBtX3Bs
YXRmb3JtRHJhZ0RhdGEtPnR5cGVzKCkuY29udGFpbnMobWltZVR5cGVUZXh0UGxhaW4pOworICAg
IHJldHVybiBtX3BsYXRmb3JtRHJhZ0RhdGEtPnR5cGVzKCkuY29udGFpbnMoU3RyaW5nKEFTQ0lJ
TGl0ZXJhbChtaW1lVHlwZVRleHRQbGFpbikpKTsKIH0KIAogU3RyaW5nIERyYWdEYXRhOjphc1Bs
YWluVGV4dChGcmFtZSopIGNvbnN0CkBAIC0xMTcsOCArMTE3LDggQEAgYm9vbCBEcmFnRGF0YTo6
Y2FuU21hcnRSZXBsYWNlKCkgY29uc3QKICAgICAvLyBUaGlzIGlzIGFsbG93ZWQgd2hlbmV2ZXIg
dGhlIGRyYWcgZGF0YSBjb250YWlucyBhICdyYW5nZScgKGllLiwKICAgICAvLyBDbGlwYm9hcmRX
aW46OndyaXRlUmFuZ2UgaXMgY2FsbGVkKS4gIEZvciBleGFtcGxlLCBkcmFnZ2luZyBhIGxpbmsK
ICAgICAvLyBzaG91bGQgbm90IHJlc3VsdCBpbiBhIHNwYWNlIGJlaW5nIGFkZGVkLgotICAgIHJl
dHVybiBtX3BsYXRmb3JtRHJhZ0RhdGEtPnR5cGVzKCkuY29udGFpbnMobWltZVR5cGVUZXh0UGxh
aW4pCi0gICAgICAgICYmICFtX3BsYXRmb3JtRHJhZ0RhdGEtPnR5cGVzKCkuY29udGFpbnMobWlt
ZVR5cGVUZXh0VVJJTGlzdCk7CisgICAgcmV0dXJuIG1fcGxhdGZvcm1EcmFnRGF0YS0+dHlwZXMo
KS5jb250YWlucyhTdHJpbmcoQVNDSUlMaXRlcmFsKG1pbWVUeXBlVGV4dFBsYWluKSkpCisgICAg
ICAgICYmICFtX3BsYXRmb3JtRHJhZ0RhdGEtPnR5cGVzKCkuY29udGFpbnMoU3RyaW5nKEFTQ0lJ
TGl0ZXJhbChtaW1lVHlwZVRleHRVUklMaXN0KSkpOwogfQogCiBib29sIERyYWdEYXRhOjpjb250
YWluc0NvbXBhdGlibGVDb250ZW50KCkgY29uc3QKQEAgLTE1MCw3ICsxNTAsNyBAQCBQYXNzUmVm
UHRyPERvY3VtZW50RnJhZ21lbnQ+IERyYWdEYXRhOjphc0ZyYWdtZW50KEZyYW1lKiBmcmFtZSwg
UGFzc1JlZlB0cjxSYW5nZQogICAgICAgICAvLyAgICByZXR1cm4gZnJhZ21lbnQ7CiAgICAgfQog
Ci0gICAgaWYgKG1fcGxhdGZvcm1EcmFnRGF0YS0+dHlwZXMoKS5jb250YWlucyhtaW1lVHlwZVRl
eHRIVE1MKSkgeworICAgIGlmIChtX3BsYXRmb3JtRHJhZ0RhdGEtPnR5cGVzKCkuY29udGFpbnMo
U3RyaW5nKEFTQ0lJTGl0ZXJhbChtaW1lVHlwZVRleHRIVE1MKSkpKSB7CiAgICAgICAgIFN0cmlu
ZyBodG1sOwogICAgICAgICBLVVJMIGJhc2VVUkw7CiAgICAgICAgIG1fcGxhdGZvcm1EcmFnRGF0
YS0+aHRtbEFuZEJhc2VVUkwoaHRtbCwgYmFzZVVSTCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9lZmwvQ2xpcGJvYXJkRWZsLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2VmbC9DbGlwYm9hcmRFZmwuY3BwCmluZGV4IGRkNGFjMjBjZmM5YWYxM2IxZmRlNWQyNmRj
NGUyMzBhMGEwYjIxY2UuLjBhNjhkNDA3ZGU5OTA0ZGZlZThkNDhlMTE5Y2ZjMWM5ZjNiYjAyZTcg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2VmbC9DbGlwYm9hcmRFZmwuY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2VmbC9DbGlwYm9hcmRFZmwuY3BwCkBAIC03
NiwxMCArNzYsMTAgQEAgYm9vbCBDbGlwYm9hcmRFZmw6OnNldERhdGEoY29uc3QgU3RyaW5nJiwg
Y29uc3QgU3RyaW5nJikKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLUxpc3RIYXNoU2V0PFN0cmlu
Zz4gQ2xpcGJvYXJkRWZsOjp0eXBlcygpIGNvbnN0CitWZWN0b3I8U3RyaW5nPiBDbGlwYm9hcmRF
Zmw6OnR5cGVzKCkgY29uc3QKIHsKICAgICBub3RJbXBsZW1lbnRlZCgpOwotICAgIHJldHVybiBM
aXN0SGFzaFNldDxTdHJpbmc+KCk7CisgICAgcmV0dXJuIFZlY3RvcjxTdHJpbmc+KCk7CiB9CiAK
IFBhc3NSZWZQdHI8RmlsZUxpc3Q+IENsaXBib2FyZEVmbDo6ZmlsZXMoKSBjb25zdApkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZWZsL0NsaXBib2FyZEVmbC5oIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZWZsL0NsaXBib2FyZEVmbC5oCmluZGV4IDkwNGViNTIxN2I3ZmU3
NGI1ZWQzODQzYTczZDkzZWQxNTRlYTU3YzguLmI3YjMyODdiNWVhM2Q0N2JhMmZhNzRiYWI3NWJm
ZTEwODVkMjMyYzcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2VmbC9DbGlw
Ym9hcmRFZmwuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9lZmwvQ2xpcGJvYXJkRWZs
LmgKQEAgLTM5LDcgKzM5LDcgQEAgcHVibGljOgogICAgIFN0cmluZyBnZXREYXRhKGNvbnN0IFN0
cmluZyYpIGNvbnN0OwogICAgIGJvb2wgc2V0RGF0YShjb25zdCBTdHJpbmcmLCBjb25zdCBTdHJp
bmcmKTsKIAotICAgIExpc3RIYXNoU2V0PFN0cmluZz4gdHlwZXMoKSBjb25zdDsKKyAgICBWZWN0
b3I8U3RyaW5nPiB0eXBlcygpIGNvbnN0OwogICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxGaWxlTGlz
dD4gZmlsZXMoKSBjb25zdDsKIAogICAgIEludFBvaW50IGRyYWdMb2NhdGlvbigpIGNvbnN0Owpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL0NsaXBib2FyZEd0ay5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvQ2xpcGJvYXJkR3RrLmNwcAppbmRleCAyNjNi
NmNmOGYyZWRjNTk5OGYxNWEwMWFlYmM1NzIyZTM1OTY2NDRhLi5kYWQ3ODIzNTc1OWNlZTllMDhm
OTMyMzdmYmM0MGY4YzI3ZGQ1ODk3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ndGsvQ2xpcGJvYXJkR3RrLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsv
Q2xpcGJvYXJkR3RrLmNwcApAQCAtMTg4LDMxICsxODgsMzEgQEAgYm9vbCBDbGlwYm9hcmRHdGs6
OnNldERhdGEoY29uc3QgU3RyaW5nJiB0eXBlU3RyaW5nLCBjb25zdCBTdHJpbmcmIGRhdGEpCiAg
ICAgcmV0dXJuIHN1Y2Nlc3M7CiB9CiAKLUxpc3RIYXNoU2V0PFN0cmluZz4gQ2xpcGJvYXJkR3Rr
Ojp0eXBlcygpIGNvbnN0CitWZWN0b3I8U3RyaW5nPiBDbGlwYm9hcmRHdGs6OnR5cGVzKCkgY29u
c3QKIHsKICAgICBpZiAocG9saWN5KCkgIT0gQ2xpcGJvYXJkUmVhZGFibGUgJiYgcG9saWN5KCkg
IT0gQ2xpcGJvYXJkVHlwZXNSZWFkYWJsZSkKLSAgICAgICAgcmV0dXJuIExpc3RIYXNoU2V0PFN0
cmluZz4oKTsKKyAgICAgICAgcmV0dXJuIFZlY3RvcjxTdHJpbmc+KCk7CiAKICAgICBpZiAobV9j
bGlwYm9hcmQpCiAgICAgICAgIFBhc3RlYm9hcmRIZWxwZXI6OmRlZmF1bHRQYXN0ZWJvYXJkSGVs
cGVyKCktPmdldENsaXBib2FyZENvbnRlbnRzKG1fY2xpcGJvYXJkKTsKIAotICAgIExpc3RIYXNo
U2V0PFN0cmluZz4gdHlwZXM7CisgICAgVmVjdG9yPFN0cmluZz4gdHlwZXM7CiAgICAgaWYgKG1f
ZGF0YU9iamVjdC0+aGFzVGV4dCgpKSB7Ci0gICAgICAgIHR5cGVzLmFkZCgidGV4dC9wbGFpbiIp
OwotICAgICAgICB0eXBlcy5hZGQoIlRleHQiKTsKLSAgICAgICAgdHlwZXMuYWRkKCJ0ZXh0Iik7
CisgICAgICAgIHR5cGVzLmFwcGVuZChBU0NJSUxpdGVyYWwoInRleHQvcGxhaW4iKSk7CisgICAg
ICAgIHR5cGVzLmFwcGVuZChBU0NJSUxpdGVyYWwoIlRleHQiKSk7CisgICAgICAgIHR5cGVzLmFw
cGVuZChBU0NJSUxpdGVyYWwoInRleHQiKSk7CiAgICAgfQogCiAgICAgaWYgKG1fZGF0YU9iamVj
dC0+aGFzTWFya3VwKCkpCi0gICAgICAgIHR5cGVzLmFkZCgidGV4dC9odG1sIik7CisgICAgICAg
IHR5cGVzLmFwcGVuZChBU0NJSUxpdGVyYWwoInRleHQvaHRtbCIpKTsKIAogICAgIGlmIChtX2Rh
dGFPYmplY3QtPmhhc1VSSUxpc3QoKSkgewotICAgICAgICB0eXBlcy5hZGQoInRleHQvdXJpLWxp
c3QiKTsKLSAgICAgICAgdHlwZXMuYWRkKCJVUkwiKTsKKyAgICAgICAgdHlwZXMuYXBwZW5kKEFT
Q0lJTGl0ZXJhbCgidGV4dC91cmktbGlzdCIpKTsKKyAgICAgICAgdHlwZXMuYXBwZW5kKEFTQ0lJ
TGl0ZXJhbCgiVVJMIikpOwogICAgIH0KIAogICAgIGlmIChtX2RhdGFPYmplY3QtPmhhc0ZpbGVu
YW1lcygpKQotICAgICAgICB0eXBlcy5hZGQoIkZpbGVzIik7CisgICAgICAgIHR5cGVzLmFwcGVu
ZChBU0NJSUxpdGVyYWwoIkZpbGVzIikpOwogCiAgICAgcmV0dXJuIHR5cGVzOwogfQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL0NsaXBib2FyZEd0ay5oIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3RrL0NsaXBib2FyZEd0ay5oCmluZGV4IGVlOWQ2M2NlNGYyY2U4
YmMxMTJkMGYyMDkzZWU1ODgzOTMyMjhlMzUuLjdhNjExN2Q3YWY0M2Q4ZTU2NzhhNjNiOTk0ZTgx
MjRiZGFhMmZmMzYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9DbGlw
Ym9hcmRHdGsuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvQ2xpcGJvYXJkR3Rr
LmgKQEAgLTU3LDcgKzU3LDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICBTdHJpbmcg
Z2V0RGF0YShjb25zdCBTdHJpbmcmKSBjb25zdDsKICAgICAgICAgYm9vbCBzZXREYXRhKGNvbnN0
IFN0cmluZyYsIGNvbnN0IFN0cmluZyYpOwogCi0gICAgICAgIHZpcnR1YWwgTGlzdEhhc2hTZXQ8
U3RyaW5nPiB0eXBlcygpIGNvbnN0OworICAgICAgICB2aXJ0dWFsIFZlY3RvcjxTdHJpbmc+IHR5
cGVzKCkgY29uc3Q7CiAgICAgICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxGaWxlTGlzdD4gZmlsZXMo
KSBjb25zdDsKIAogICAgICAgICB2b2lkIHNldERyYWdJbWFnZShDYWNoZWRJbWFnZSosIGNvbnN0
IEludFBvaW50Jik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tYWMvQ2xp
cGJvYXJkTWFjLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tYWMvQ2xpcGJvYXJkTWFjLmgK
aW5kZXggMzA1YTkyZmY5OGIyMWViNWQzYzFiMmJjMDE2NGYzOTFjNzIyODA5Yy4uNzJlNmEzNjNk
MDNkYjBmMDAyNzZhOTQzZjk5NmIwOTY2OTEzYjRhNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vbWFjL0NsaXBib2FyZE1hYy5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL21hYy9DbGlwYm9hcmRNYWMuaApAQCAtNjIsNyArNjIsNyBAQCBwdWJsaWM6CiAgICAgdmly
dHVhbCBib29sIGhhc0RhdGEoKTsKICAgICAKICAgICAvLyBleHRlbnNpb25zIGJleW9uZCBJRSdz
IEFQSQotICAgIHZpcnR1YWwgTGlzdEhhc2hTZXQ8U3RyaW5nPiB0eXBlcygpIGNvbnN0OworICAg
IHZpcnR1YWwgVmVjdG9yPFN0cmluZz4gdHlwZXMoKSBjb25zdDsKICAgICB2aXJ0dWFsIFBhc3NS
ZWZQdHI8RmlsZUxpc3Q+IGZpbGVzKCkgY29uc3Q7CiAKICAgICB2b2lkIHNldERyYWdJbWFnZShD
YWNoZWRJbWFnZSosIGNvbnN0IEludFBvaW50Jik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9tYWMvQ2xpcGJvYXJkTWFjLm1tIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
bWFjL0NsaXBib2FyZE1hYy5tbQppbmRleCBhNWIyOWQ5OWY4MjhkOTg0NWMzYjdmMTdjODdiYTU2
YWFlYmU0MmUxLi42NTFjZTkyMWI0ZjkxNmFiM2M4N2NmZmQzMjdiYmM2MTE5OTk5ZDkzIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tYWMvQ2xpcGJvYXJkTWFjLm1tCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21hYy9DbGlwYm9hcmRNYWMubW0KQEAgLTExOSwxNSAr
MTE5LDE1IEBAIHN0YXRpYyBTdHJpbmcgdXRpVHlwZUZyb21Db2NvYVR5cGUoY29uc3QgU3RyaW5n
JiB0eXBlKQogICAgIHJldHVybiBTdHJpbmcoKTsKIH0KIAotc3RhdGljIHZvaWQgYWRkSFRNTENs
aXBib2FyZFR5cGVzRm9yQ29jb2FUeXBlKExpc3RIYXNoU2V0PFN0cmluZz4mIHJlc3VsdFR5cGVz
LCBjb25zdCBTdHJpbmcmIGNvY29hVHlwZSwgY29uc3QgU3RyaW5nJiBwYXN0ZWJvYXJkTmFtZSkK
K3N0YXRpYyB2b2lkIGFkZEhUTUxDbGlwYm9hcmRUeXBlc0ZvckNvY29hVHlwZShWZWN0b3I8U3Ry
aW5nPiYgcmVzdWx0VHlwZXMsIGNvbnN0IFN0cmluZyYgY29jb2FUeXBlLCBjb25zdCBTdHJpbmcm
IHBhc3RlYm9hcmROYW1lKQogewogICAgIC8vIFVUSSBtYXkgbm90IGRvIHRoZXNlIHJpZ2h0LCBz
byBtYWtlIHN1cmUgd2UgZ2V0IHRoZSByaWdodCwgcHJlZGljdGFibGUgcmVzdWx0CiAgICAgaWYg
KGNvY29hVHlwZSA9PSBTdHJpbmcoTlNTdHJpbmdQYm9hcmRUeXBlKSkgewotICAgICAgICByZXN1
bHRUeXBlcy5hZGQoInRleHQvcGxhaW4iKTsKKyAgICAgICAgcmVzdWx0VHlwZXMuYXBwZW5kKEFT
Q0lJTGl0ZXJhbCgidGV4dC9wbGFpbiIpKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KICAgICBp
ZiAoY29jb2FUeXBlID09IFN0cmluZyhOU1VSTFBib2FyZFR5cGUpKSB7Ci0gICAgICAgIHJlc3Vs
dFR5cGVzLmFkZCgidGV4dC91cmktbGlzdCIpOworICAgICAgICByZXN1bHRUeXBlcy5hcHBlbmQo
QVNDSUlMaXRlcmFsKCJ0ZXh0L3VyaS1saXN0IikpOwogICAgICAgICByZXR1cm47CiAgICAgfQog
ICAgIGlmIChjb2NvYVR5cGUgPT0gU3RyaW5nKE5TRmlsZW5hbWVzUGJvYXJkVHlwZSkpIHsKQEAg
LTEzOSwxOCArMTM5LDE4IEBAIHN0YXRpYyB2b2lkIGFkZEhUTUxDbGlwYm9hcmRUeXBlc0ZvckNv
Y29hVHlwZShMaXN0SGFzaFNldDxTdHJpbmc+JiByZXN1bHRUeXBlcywKICAgICAgICAgaWYgKCFm
aWxlTGlzdC5pc0VtcHR5KCkpIHsKICAgICAgICAgICAgIC8vIEl0IGlzIHVua25vd24gaWYgTlNG
aWxlbmFtZXNQYm9hcmRUeXBlIGFsd2F5cyBpbXBsaWVzIE5TVVJMUGJvYXJkVHlwZSBpbiBDb2Nv
YSwKICAgICAgICAgICAgIC8vIGJ1dCBOU0ZpbGVuYW1lc1Bib2FyZFR5cGUgc2hvdWxkIGltcGx5
IGJvdGggJ3RleHQvdXJpLWxpc3QnIGFuZCAnRmlsZXMnCi0gICAgICAgICAgICByZXN1bHRUeXBl
cy5hZGQoInRleHQvdXJpLWxpc3QiKTsKLSAgICAgICAgICAgIHJlc3VsdFR5cGVzLmFkZCgiRmls
ZXMiKTsKKyAgICAgICAgICAgIHJlc3VsdFR5cGVzLmFwcGVuZChBU0NJSUxpdGVyYWwoInRleHQv
dXJpLWxpc3QiKSk7CisgICAgICAgICAgICByZXN1bHRUeXBlcy5hcHBlbmQoQVNDSUlMaXRlcmFs
KCJGaWxlcyIpKTsKICAgICAgICAgfQogICAgICAgICByZXR1cm47CiAgICAgfQogICAgIFN0cmlu
ZyB1dGlUeXBlID0gdXRpVHlwZUZyb21Db2NvYVR5cGUoY29jb2FUeXBlKTsKICAgICBpZiAoIXV0
aVR5cGUuaXNFbXB0eSgpKSB7Ci0gICAgICAgIHJlc3VsdFR5cGVzLmFkZCh1dGlUeXBlKTsKKyAg
ICAgICAgcmVzdWx0VHlwZXMuYXBwZW5kKHV0aVR5cGUpOwogICAgICAgICByZXR1cm47CiAgICAg
fQogICAgIC8vIE5vIG1hcHBpbmcsIGp1c3QgcGFzcyB0aGUgd2hvbGUgc3RyaW5nIHRob3VnaAot
ICAgIHJlc3VsdFR5cGVzLmFkZChjb2NvYVR5cGUpOworICAgIHJlc3VsdFR5cGVzLmFwcGVuZChj
b2NvYVR5cGUpOwogfQogCiB2b2lkIENsaXBib2FyZE1hYzo6Y2xlYXJEYXRhKGNvbnN0IFN0cmlu
ZyYgdHlwZSkKQEAgLTI4MSwxMCArMjgxLDEwIEBAIGJvb2wgQ2xpcGJvYXJkTWFjOjpzZXREYXRh
KGNvbnN0IFN0cmluZyAmdHlwZSwgY29uc3QgU3RyaW5nICZkYXRhKQogICAgIHJldHVybiBmYWxz
ZTsKIH0KIAotTGlzdEhhc2hTZXQ8U3RyaW5nPiBDbGlwYm9hcmRNYWM6OnR5cGVzKCkgY29uc3QK
K1ZlY3RvcjxTdHJpbmc+IENsaXBib2FyZE1hYzo6dHlwZXMoKSBjb25zdAogewogICAgIGlmIChw
b2xpY3koKSAhPSBDbGlwYm9hcmRSZWFkYWJsZSAmJiBwb2xpY3koKSAhPSBDbGlwYm9hcmRUeXBl
c1JlYWRhYmxlKQotICAgICAgICByZXR1cm4gTGlzdEhhc2hTZXQ8U3RyaW5nPigpOworICAgICAg
ICByZXR1cm4gVmVjdG9yPFN0cmluZz4oKTsKIAogICAgIFZlY3RvcjxTdHJpbmc+IHR5cGVzOwog
ICAgIHBsYXRmb3JtU3RyYXRlZ2llcygpLT5wYXN0ZWJvYXJkU3RyYXRlZ3koKS0+Z2V0VHlwZXMo
dHlwZXMsIG1fcGFzdGVib2FyZE5hbWUpOwpAQCAtMjkyLDkgKzI5Miw5IEBAIExpc3RIYXNoU2V0
PFN0cmluZz4gQ2xpcGJvYXJkTWFjOjp0eXBlcygpIGNvbnN0CiAgICAgLy8gRW5mb3JjZSBjaGFu
Z2VDb3VudCBvdXJzZWx2ZXMgZm9yIHNlY3VyaXR5LiAgV2UgY2hlY2sgYWZ0ZXIgcmVhZGluZyBp
bnN0ZWFkIG9mIGJlZm9yZSB0byBiZQogICAgIC8vIHN1cmUgaXQgZG9lc24ndCBjaGFuZ2UgYmV0
d2VlbiBvdXIgdGVzdGluZyB0aGUgY2hhbmdlIGNvdW50IGFuZCBhY2Nlc3NpbmcgdGhlIGRhdGEu
CiAgICAgaWYgKG1fY2hhbmdlQ291bnQgIT0gcGxhdGZvcm1TdHJhdGVnaWVzKCktPnBhc3RlYm9h
cmRTdHJhdGVneSgpLT5jaGFuZ2VDb3VudChtX3Bhc3RlYm9hcmROYW1lKSkKLSAgICAgICAgcmV0
dXJuIExpc3RIYXNoU2V0PFN0cmluZz4oKTsKKyAgICAgICAgcmV0dXJuIFZlY3RvcjxTdHJpbmc+
KCk7CiAKLSAgICBMaXN0SGFzaFNldDxTdHJpbmc+IHJlc3VsdDsKKyAgICBWZWN0b3I8U3RyaW5n
PiByZXN1bHQ7CiAgICAgLy8gRklYTUU6IFRoaXMgbG9vcCBjb3VsZCBiZSBzcGxpdCBpbnRvIHR3
byBzdGFnZXMuIE9uZSB3aGljaCBhZGRzIGFsbCB0aGUgSFRNTDUgc3BlY2lmaWVkIHR5cGVzCiAg
ICAgLy8gYW5kIGEgc2Vjb25kIHdoaWNoIGFkZHMgYWxsIHRoZSBleHRyYSB0eXBlcyBmcm9tIHRo
ZSBjb2NvYSBjbGlwYm9hcmQgKHdoaWNoIGlzIE1hYy1vbmx5IGJlaGF2aW9yKS4KICAgICBmb3Ig
KHNpemVfdCBpID0gMDsgaSA8IHR5cGVzLnNpemUoKTsgaSsrKSB7CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9xdC9DbGlwYm9hcmRRdC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9xdC9DbGlwYm9hcmRRdC5jcHAKaW5kZXggNzFjOTFjYjQxYjZjZTFkYTkyZjYyM2Zl
NTA5MWQ0YmIwY2M4ZDM3OC4uMzhhZDE1ZjJjNDk0MTQ4NTVmODUyZTAyYWM3YTAxMjNlZWJkMDA4
NyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vcXQvQ2xpcGJvYXJkUXQuY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3F0L0NsaXBib2FyZFF0LmNwcApAQCAtMTgy
LDE2ICsxODIsMTYgQEAgYm9vbCBDbGlwYm9hcmRRdDo6c2V0RGF0YShjb25zdCBTdHJpbmcmIHR5
cGUsIGNvbnN0IFN0cmluZyYgZGF0YSkKIH0KIAogLy8gZXh0ZW5zaW9ucyBiZXlvbmQgSUUncyBB
UEkKLUxpc3RIYXNoU2V0PFN0cmluZz4gQ2xpcGJvYXJkUXQ6OnR5cGVzKCkgY29uc3QKK1ZlY3Rv
cjxTdHJpbmc+IENsaXBib2FyZFF0Ojp0eXBlcygpIGNvbnN0CiB7CiAgICAgaWYgKHBvbGljeSgp
ICE9IENsaXBib2FyZFJlYWRhYmxlICYmIHBvbGljeSgpICE9IENsaXBib2FyZFR5cGVzUmVhZGFi
bGUpCi0gICAgICAgIHJldHVybiBMaXN0SGFzaFNldDxTdHJpbmc+KCk7CisgICAgICAgIHJldHVy
biBWZWN0b3I8U3RyaW5nPigpOwogCiAgICAgQVNTRVJUKG1fcmVhZGFibGVEYXRhKTsKLSAgICBM
aXN0SGFzaFNldDxTdHJpbmc+IHJlc3VsdDsKKyAgICBWZWN0b3I8U3RyaW5nPiByZXN1bHQ7CiAg
ICAgUVN0cmluZ0xpc3QgZm9ybWF0cyA9IG1fcmVhZGFibGVEYXRhLT5mb3JtYXRzKCk7CiAgICAg
Zm9yIChpbnQgaSA9IDA7IGkgPCBmb3JtYXRzLmNvdW50KCk7ICsraSkKLSAgICAgICAgcmVzdWx0
LmFkZChmb3JtYXRzLmF0KGkpKTsKKyAgICAgICAgcmVzdWx0LmFwcGVuZChmb3JtYXRzLmF0KGkp
KTsKICAgICByZXR1cm4gcmVzdWx0OwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9xdC9DbGlwYm9hcmRRdC5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vcXQvQ2xp
cGJvYXJkUXQuaAppbmRleCBiODFjMTQ4ZWExNDAzYzAzMmU5OGNiNjdlZjk2NmQ1ODY5NzFkYjJl
Li40YTk5NTJhYjNlMGMxYjM0ZWRkMjJmOGYyYjcyMjA1N2FjMTAzYTU4IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9xdC9DbGlwYm9hcmRRdC5oCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL3F0L0NsaXBib2FyZFF0LmgKQEAgLTU3LDcgKzU3LDcgQEAgcHVibGljOgog
ICAgIGJvb2wgc2V0RGF0YShjb25zdCBTdHJpbmcmIHR5cGUsIGNvbnN0IFN0cmluZyYgZGF0YSk7
CiAKICAgICAvLyBleHRlbnNpb25zIGJleW9uZCBJRSdzIEFQSQotICAgIHZpcnR1YWwgTGlzdEhh
c2hTZXQ8U3RyaW5nPiB0eXBlcygpIGNvbnN0OworICAgIHZpcnR1YWwgVmVjdG9yPFN0cmluZz4g
dHlwZXMoKSBjb25zdDsKICAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8RmlsZUxpc3Q+IGZpbGVzKCkg
Y29uc3Q7CiAKICAgICB2b2lkIHNldERyYWdJbWFnZShDYWNoZWRJbWFnZSosIGNvbnN0IEludFBv
aW50Jik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS93aW4vQ2xpcGJvYXJk
V2luLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3dpbi9DbGlwYm9hcmRXaW4uY3BwCmlu
ZGV4IGMyZjk5NjQ5Njk5YjY0OWVlZTZhZWNiZWZkY2QyM2VmOTEwMWMyZTMuLjljNjhhMjk4NTk0
MDdjNDQwYzljOGZhN2IwNWJlYjY0MTRhZjkzY2QgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL3dpbi9DbGlwYm9hcmRXaW4uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL3dpbi9DbGlwYm9hcmRXaW4uY3BwCkBAIC00ODQsMjQgKzQ4NCwyNCBAQCBib29sIENsaXBi
b2FyZFdpbjo6c2V0RGF0YShjb25zdCBTdHJpbmcmIHR5cGUsIGNvbnN0IFN0cmluZyYgZGF0YSkK
ICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLXN0YXRpYyB2b2lkIGFkZE1pbWVUeXBlc0ZvckZvcm1h
dChMaXN0SGFzaFNldDxTdHJpbmc+JiByZXN1bHRzLCBjb25zdCBGT1JNQVRFVEMmIGZvcm1hdCkK
K3N0YXRpYyB2b2lkIGFkZE1pbWVUeXBlc0ZvckZvcm1hdChWZWN0b3I8U3RyaW5nPiYgcmVzdWx0
cywgY29uc3QgRk9STUFURVRDJiBmb3JtYXQpCiB7CiAgICAgLy8gVVJMIGFuZCBUZXh0IGFyZSBw
cm92aWRlZCBmb3IgY29tcGF0aWJpbGl0eSB3aXRoIElFJ3MgbW9kZWwKICAgICBpZiAoZm9ybWF0
LmNmRm9ybWF0ID09IHVybEZvcm1hdCgpLT5jZkZvcm1hdCB8fCBmb3JtYXQuY2ZGb3JtYXQgPT0g
dXJsV0Zvcm1hdCgpLT5jZkZvcm1hdCkgewotICAgICAgICByZXN1bHRzLmFkZCgiVVJMIik7Ci0g
ICAgICAgIHJlc3VsdHMuYWRkKCJ0ZXh0L3VyaS1saXN0Iik7CisgICAgICAgIHJlc3VsdHMuYXBw
ZW5kKEFTQ0lJTGl0ZXJhbCgiVVJMIikpOworICAgICAgICByZXN1bHRzLmFwcGVuZChBU0NJSUxp
dGVyYWwoInRleHQvdXJpLWxpc3QiKSk7CiAgICAgfQogCiAgICAgaWYgKGZvcm1hdC5jZkZvcm1h
dCA9PSBwbGFpblRleHRXRm9ybWF0KCktPmNmRm9ybWF0IHx8IGZvcm1hdC5jZkZvcm1hdCA9PSBw
bGFpblRleHRGb3JtYXQoKS0+Y2ZGb3JtYXQpIHsKLSAgICAgICAgcmVzdWx0cy5hZGQoIlRleHQi
KTsKLSAgICAgICAgcmVzdWx0cy5hZGQoInRleHQvcGxhaW4iKTsKKyAgICAgICAgcmVzdWx0cy5h
cHBlbmQoQVNDSUlMaXRlcmFsKCJUZXh0IikpOworICAgICAgICByZXN1bHRzLmFwcGVuZChBU0NJ
SUxpdGVyYWwoInRleHQvcGxhaW4iKSk7CiAgICAgfQogfQogCiAvLyBleHRlbnNpb25zIGJleW9u
ZCBJRSdzIEFQSQotTGlzdEhhc2hTZXQ8U3RyaW5nPiBDbGlwYm9hcmRXaW46OnR5cGVzKCkgY29u
c3QKK1ZlY3RvcjxTdHJpbmc+IENsaXBib2FyZFdpbjo6dHlwZXMoKSBjb25zdAogeyAKLSAgICBM
aXN0SGFzaFNldDxTdHJpbmc+IHJlc3VsdHM7CisgICAgVmVjdG9yPFN0cmluZz4gcmVzdWx0czsK
ICAgICBpZiAocG9saWN5KCkgIT0gQ2xpcGJvYXJkUmVhZGFibGUgJiYgcG9saWN5KCkgIT0gQ2xp
cGJvYXJkVHlwZXNSZWFkYWJsZSkKICAgICAgICAgcmV0dXJuIHJlc3VsdHM7CiAKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3dpbi9DbGlwYm9hcmRXaW4uaCBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL3dpbi9DbGlwYm9hcmRXaW4uaAppbmRleCAxMTRiZDQwOTY5YzhiNjQ2
NTc1NmM0MmVkMzgxODY3OTBmYzg0NDhmLi44ZGIxODYyNzU4ZmFhYWM2ZmYzNjUyZmFhMDY3MjVi
MWU3ZjQ1NDdiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS93aW4vQ2xpcGJv
YXJkV2luLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vd2luL0NsaXBib2FyZFdpbi5o
CkBAIC02NCw3ICs2NCw3IEBAIHB1YmxpYzoKICAgICBib29sIHNldERhdGEoY29uc3QgU3RyaW5n
JiB0eXBlLCBjb25zdCBTdHJpbmcmIGRhdGEpOwogCiAgICAgLy8gZXh0ZW5zaW9ucyBiZXlvbmQg
SUUncyBBUEkKLSAgICB2aXJ0dWFsIExpc3RIYXNoU2V0PFN0cmluZz4gdHlwZXMoKSBjb25zdDsK
KyAgICB2aXJ0dWFsIFZlY3RvcjxTdHJpbmc+IHR5cGVzKCkgY29uc3Q7CiAgICAgdmlydHVhbCBQ
YXNzUmVmUHRyPEZpbGVMaXN0PiBmaWxlcygpIGNvbnN0OwogCiAgICAgdm9pZCBzZXREcmFnSW1h
Z2UoQ2FjaGVkSW1hZ2UqLCBjb25zdCBJbnRQb2ludCYpOwo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>192984</attachid>
            <date>2013-03-13 13:27:20 -0700</date>
            <delta_ts>2013-03-13 15:09:30 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-82888-20130313132318.patch</filename>
            <type>text/plain</type>
            <size>24300</size>
            <attacher name="Daniel Cheng">dcheng</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTQ1NTM5CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZjdiOWIxZDU4NDczNjY1
NGE0N2EzYWU5MjA3ODFiY2EzMjJlZGQyNy4uOTg5YTJlNmEzMzQyNTAxYjJmNTE2MDA3NTQwYWUz
ZWE4ZGUzNWVmNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQ3IEBACisyMDEzLTAzLTEyICAgVmlu
ZWV0IENoYXVkaGFyeSAgPHJnZjc0OEBtb3Rvcm9sYS5jb20+CisKKyAgICAgICAgQ29uc2lkZXIg
cmVwbGFjaW5nIHJldHVybiB0eXBlIG9mIENsaXBib2FyZDo6dHlwZXMoKSBmcm9tIExpc3RIYXNo
U2V0PFN0cmluZz4gdG8gVmVjdG9yPFN0cmluZz4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTgyODg4CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZ
IChPT1BTISkuCisKKyAgICAgICAgQXMgcGFydCBvZiByZW1vdmluZyBjdXN0b20gYmluZGluZ3Mg
b2YgdHlwZXMgQXJyYXkgQ2xpcGJvYXJkOjp0eXBlcygpIG5lZWRzIHRvIHJldHVybgorICAgICAg
ICBWZWN0b3I8U3RyaW5nPiB0aGFuIExpc3RIYXNoU2V0PFN0cmluZz4KKworICAgICAgICBDb3Zl
cmVkIGJ5IGV4aXN0aW5nIHRlc3RzIHNpbmNlIHRoZXJlIGFyZSBubyBiZWhhdmlvdXJhbCBjaGFu
Z2VzLgorCisgICAgICAgICogYmluZGluZ3MvanMvSlNDbGlwYm9hcmRDdXN0b20uY3BwOiBSZXBs
YWNlIGRhdGEgdHlwZSBmcm9tIExpc3RIYXNoU2V0PD4gdG8gVmVjdG9yPD4uCisgICAgICAgIChX
ZWJDb3JlOjpKU0NsaXBib2FyZDo6dHlwZXMpOgorICAgICAgICAqIGJpbmRpbmdzL3Y4L2N1c3Rv
bS9WOENsaXBib2FyZEN1c3RvbS5jcHA6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6VjhDbGlw
Ym9hcmQ6OnR5cGVzQWNjZXNzb3JHZXR0ZXIpOiBEaXR0by4KKyAgICAgICAgKiBkb20vQ2xpcGJv
YXJkLmg6IERpdHRvLgorICAgICAgICAqIHBsYXRmb3JtL2JsYWNrYmVycnkvQ2xpcGJvYXJkQmxh
Y2tCZXJyeS5jcHA6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6Q2xpcGJvYXJkQmxhY2tCZXJy
eTo6dHlwZXMpOgorICAgICAgICAqIHBsYXRmb3JtL2JsYWNrYmVycnkvQ2xpcGJvYXJkQmxhY2tC
ZXJyeS5oOiBEaXR0by4KKyAgICAgICAgKiBwbGF0Zm9ybS9jaHJvbWl1bS9DaHJvbWl1bURhdGFP
YmplY3QuY3BwOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OkNocm9taXVtRGF0YU9iamVjdDo6
dHlwZXMpOgorICAgICAgICAqIHBsYXRmb3JtL2Nocm9taXVtL0Nocm9taXVtRGF0YU9iamVjdC5o
OiBEaXR0by4KKyAgICAgICAgKiBwbGF0Zm9ybS9jaHJvbWl1bS9DbGlwYm9hcmRDaHJvbWl1bS5j
cHA6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6Q2xpcGJvYXJkQ2hyb21pdW06OnR5cGVzKToK
KyAgICAgICAgKiBwbGF0Zm9ybS9jaHJvbWl1bS9DbGlwYm9hcmRDaHJvbWl1bS5oOiBEaXR0by4K
KyAgICAgICAgKiBwbGF0Zm9ybS9lZmwvQ2xpcGJvYXJkRWZsLmNwcDogRGl0dG8uCisgICAgICAg
IChXZWJDb3JlOjpDbGlwYm9hcmRFZmw6OnR5cGVzKToKKyAgICAgICAgKiBwbGF0Zm9ybS9lZmwv
Q2xpcGJvYXJkRWZsLmg6IERpdHRvLgorICAgICAgICAqIHBsYXRmb3JtL2d0ay9DbGlwYm9hcmRH
dGsuY3BwOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OkNsaXBib2FyZEd0azo6dHlwZXMpOgor
ICAgICAgICAqIHBsYXRmb3JtL2d0ay9DbGlwYm9hcmRHdGsuaDogRGl0dG8uCisgICAgICAgICog
cGxhdGZvcm0vbWFjL0NsaXBib2FyZE1hYy5oOiBEaXR0by4KKyAgICAgICAgKiBwbGF0Zm9ybS9t
YWMvQ2xpcGJvYXJkTWFjLm1tOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OmFkZEhUTUxDbGlw
Ym9hcmRUeXBlc0ZvckNvY29hVHlwZSk6CisgICAgICAgIChXZWJDb3JlOjpDbGlwYm9hcmRNYWM6
OnR5cGVzKToKKyAgICAgICAgKiBwbGF0Zm9ybS9xdC9DbGlwYm9hcmRRdC5jcHA6IERpdHRvLgor
ICAgICAgICAoV2ViQ29yZTo6Q2xpcGJvYXJkUXQ6OnR5cGVzKToKKyAgICAgICAgKiBwbGF0Zm9y
bS9xdC9DbGlwYm9hcmRRdC5oOiBEaXR0by4KKyAgICAgICAgKiBwbGF0Zm9ybS93aW4vQ2xpcGJv
YXJkV2luLmNwcDogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjphZGRNaW1lVHlwZXNGb3JGb3Jt
YXQpOgorICAgICAgICAoV2ViQ29yZTo6Q2xpcGJvYXJkV2luOjp0eXBlcyk6CisgICAgICAgICog
cGxhdGZvcm0vd2luL0NsaXBib2FyZFdpbi5oOiBEaXR0by4KKwogMjAxMy0wMy0xMiAgVnNldm9s
b2QgVmxhc292ICA8dnNldmlrQGNocm9taXVtLm9yZz4KIAogICAgICAgICBXZWIgSW5zcGVjdG9y
OiBSZXNvdXJjZVNjcmlwdEZpbGUgZGl2ZXJnZWQgc3RhdGUgc2hvdWxkIGJlIGNvcnJlY3RseSBy
ZXNldCBhZnRlciBkZWJ1Z2dlciByZXNldC4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL2pzL0pTQ2xpcGJvYXJkQ3VzdG9tLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L2pzL0pTQ2xpcGJvYXJkQ3VzdG9tLmNwcAppbmRleCBlMzZjNjAzMmZlYmU2MTliNTMzNzUzYzNl
MmFkZjMzNzUwMGZmN2ViLi5mMzkyMjE3YzhjNGM5MzcyMzk1MzQ0NTA1ODRmNWRkYWE0NzY3NWY1
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0NsaXBib2FyZEN1c3Rv
bS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNDbGlwYm9hcmRDdXN0b20u
Y3BwCkBAIC01MSwxMyArNTEsMTMgQEAgSlNWYWx1ZSBKU0NsaXBib2FyZDo6dHlwZXMoRXhlY1N0
YXRlKiBleGVjKSBjb25zdAogewogICAgIENsaXBib2FyZCogY2xpcGJvYXJkID0gaW1wbCgpOwog
Ci0gICAgTGlzdEhhc2hTZXQ8U3RyaW5nPiB0eXBlcyA9IGNsaXBib2FyZC0+dHlwZXMoKTsKKyAg
ICBWZWN0b3I8U3RyaW5nPiB0eXBlcyA9IGNsaXBib2FyZC0+dHlwZXMoKTsKICAgICBpZiAodHlw
ZXMuaXNFbXB0eSgpKQogICAgICAgICByZXR1cm4ganNOdWxsKCk7CiAKICAgICBNYXJrZWRBcmd1
bWVudEJ1ZmZlciBsaXN0OwotICAgIExpc3RIYXNoU2V0PFN0cmluZz46OmNvbnN0X2l0ZXJhdG9y
IGVuZCA9IHR5cGVzLmVuZCgpOwotICAgIGZvciAoTGlzdEhhc2hTZXQ8U3RyaW5nPjo6Y29uc3Rf
aXRlcmF0b3IgaXQgPSB0eXBlcy5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpCisgICAgVmVjdG9y
PFN0cmluZz46OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IHR5cGVzLmVuZCgpOworICAgIGZvciAoVmVj
dG9yPFN0cmluZz46OmNvbnN0X2l0ZXJhdG9yIGl0ID0gdHlwZXMuYmVnaW4oKTsgaXQgIT0gZW5k
OyArK2l0KQogICAgICAgICBsaXN0LmFwcGVuZChqc1N0cmluZ1dpdGhDYWNoZShleGVjLCAqaXQp
KTsKICAgICByZXR1cm4gY29uc3RydWN0QXJyYXkoZXhlYywgMCwgZ2xvYmFsT2JqZWN0KCksIGxp
c3QpOwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4
Q2xpcGJvYXJkQ3VzdG9tLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9W
OENsaXBib2FyZEN1c3RvbS5jcHAKaW5kZXggNWRmYTliMWM2ZDMxNDYxODBlYzBiZDgyZGE0ZTBm
NjI4ZjFiYjNmNC4uZTUyMjJkM2Q1MTYxYWUyNTkyYjAzNmExZGM3Yjk0ZmRlZjEzNGFiNiAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4Q2xpcGJvYXJkQ3Vz
dG9tLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhDbGlwYm9h
cmRDdXN0b20uY3BwCkBAIC00NywxNCArNDcsMTQgQEAgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IFY4
Q2xpcGJvYXJkOjp0eXBlc0F0dHJHZXR0ZXJDdXN0b20odjg6OkxvY2FsPHY4OjpTdHJpbmc+IG4K
IHsKICAgICBDbGlwYm9hcmQqIGNsaXBib2FyZCA9IFY4Q2xpcGJvYXJkOjp0b05hdGl2ZShpbmZv
LkhvbGRlcigpKTsKIAotICAgIExpc3RIYXNoU2V0PFN0cmluZz4gdHlwZXMgPSBjbGlwYm9hcmQt
PnR5cGVzKCk7CisgICAgVmVjdG9yPFN0cmluZz4gdHlwZXMgPSBjbGlwYm9hcmQtPnR5cGVzKCk7
CiAgICAgaWYgKHR5cGVzLmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuIHY4TnVsbChpbmZvLkdl
dElzb2xhdGUoKSk7CiAKICAgICB2ODo6TG9jYWw8djg6OkFycmF5PiByZXN1bHQgPSB2ODo6QXJy
YXk6Ok5ldyh0eXBlcy5zaXplKCkpOwotICAgIExpc3RIYXNoU2V0PFN0cmluZz46OmNvbnN0X2l0
ZXJhdG9yIGVuZCA9IHR5cGVzLmVuZCgpOworICAgIFZlY3RvcjxTdHJpbmc+Ojpjb25zdF9pdGVy
YXRvciBlbmQgPSB0eXBlcy5lbmQoKTsKICAgICBpbnQgaW5kZXggPSAwOwotICAgIGZvciAoTGlz
dEhhc2hTZXQ8U3RyaW5nPjo6Y29uc3RfaXRlcmF0b3IgaXQgPSB0eXBlcy5iZWdpbigpOyBpdCAh
PSBlbmQ7ICsraXQsICsraW5kZXgpCisgICAgZm9yIChWZWN0b3I8U3RyaW5nPjo6Y29uc3RfaXRl
cmF0b3IgaXQgPSB0eXBlcy5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQsICsraW5kZXgpCiAgICAg
ICAgIHJlc3VsdC0+U2V0KHY4SW50ZWdlcihpbmRleCwgaW5mby5HZXRJc29sYXRlKCkpLCB2OFN0
cmluZygqaXQsIGluZm8uR2V0SXNvbGF0ZSgpKSk7CiAKICAgICByZXR1cm4gcmVzdWx0OwpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9tL0NsaXBib2FyZC5oIGIvU291cmNlL1dlYkNvcmUv
ZG9tL0NsaXBib2FyZC5oCmluZGV4IGQxMWI2NTJhMjE5YWI2MGMzNTM1ZmViMGExMjgwYjVkN2Fj
ZmY3NjIuLjIwNGNiMWE5NGM5MGY3NjFhOTMyYmViMzBmYzQwYzA4MDYzNmQ3NWMgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9DbGlwYm9hcmQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9k
b20vQ2xpcGJvYXJkLmgKQEAgLTY2LDcgKzY2LDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAg
ICAgICB2aXJ0dWFsIGJvb2wgc2V0RGF0YShjb25zdCBTdHJpbmcmIHR5cGUsIGNvbnN0IFN0cmlu
ZyYgZGF0YSkgPSAwOwogICAgIAogICAgICAgICAvLyBleHRlbnNpb25zIGJleW9uZCBJRSdzIEFQ
SQotICAgICAgICB2aXJ0dWFsIExpc3RIYXNoU2V0PFN0cmluZz4gdHlwZXMoKSBjb25zdCA9IDA7
CisgICAgICAgIHZpcnR1YWwgVmVjdG9yPFN0cmluZz4gdHlwZXMoKSBjb25zdCA9IDA7CiAgICAg
ICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxGaWxlTGlzdD4gZmlsZXMoKSBjb25zdCA9IDA7CiAKICAg
ICAgICAgSW50UG9pbnQgZHJhZ0xvY2F0aW9uKCkgY29uc3QgeyByZXR1cm4gbV9kcmFnTG9jOyB9
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ibGFja2JlcnJ5L0NsaXBib2Fy
ZEJsYWNrQmVycnkuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vYmxhY2tiZXJyeS9DbGlw
Ym9hcmRCbGFja0JlcnJ5LmNwcAppbmRleCBhZGUyMmVmNDdlYmYxMDQ0ZTIwYWE2YzllMjY2NDlh
N2VmMjA0NTRkLi43MjU3ZjUyMmRkMDMzYmRmMmJmOTk0YjU2NTI1NjMxNjY1ODQzODViIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ibGFja2JlcnJ5L0NsaXBib2FyZEJsYWNr
QmVycnkuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2JsYWNrYmVycnkvQ2xpcGJv
YXJkQmxhY2tCZXJyeS5jcHAKQEAgLTc4LDE2ICs3OCwxNiBAQCBib29sIENsaXBib2FyZEJsYWNr
QmVycnk6OnNldERhdGEoY29uc3QgU3RyaW5nJiB0eXBlLCBjb25zdCBTdHJpbmcmIHRleHQpCiAg
ICAgcmV0dXJuIHRydWU7CiB9CiAKLUxpc3RIYXNoU2V0PFN0cmluZz4gQ2xpcGJvYXJkQmxhY2tC
ZXJyeTo6dHlwZXMoKSBjb25zdAorVmVjdG9yPFN0cmluZz4gQ2xpcGJvYXJkQmxhY2tCZXJyeTo6
dHlwZXMoKSBjb25zdAogewogICAgIGlmIChwb2xpY3koKSAhPSBDbGlwYm9hcmRSZWFkYWJsZSAm
JiBwb2xpY3koKSAhPSBDbGlwYm9hcmRUeXBlc1JlYWRhYmxlKQotICAgICAgICByZXR1cm4gTGlz
dEhhc2hTZXQ8U3RyaW5nPigpOworICAgICAgICByZXR1cm4gVmVjdG9yPFN0cmluZz4oKTsKIAog
ICAgIC8vIFdlIHVzZSBoYXJkY29kZWQgbGlzdCBoZXJlIHNpbmNlIHRoZXJlIHNlZW1zIHRvIGJl
IG5vIEFQSSB0byBnZXQgdGhlIGxpc3QuCi0gICAgTGlzdEhhc2hTZXQ8U3RyaW5nPiByZXQ7Ci0g
ICAgcmV0LmFkZCgidGV4dC9wbGFpbiIpOwotICAgIHJldC5hZGQoInRleHQvaHRtbCIpOwotICAg
IHJldC5hZGQoInRleHQvdXJsIik7CisgICAgVmVjdG9yPFN0cmluZz4gcmV0OworICAgIHJldC5h
cHBlbmQoQVNDSUlMaXRlcmFsKCJ0ZXh0L3BsYWluIikpOworICAgIHJldC5hcHBlbmQoQVNDSUlM
aXRlcmFsKCJ0ZXh0L2h0bWwiKSk7CisgICAgcmV0LmFwcGVuZChBU0NJSUxpdGVyYWwoInRleHQv
dXJsIikpOwogICAgIHJldHVybiByZXQ7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2JsYWNrYmVycnkvQ2xpcGJvYXJkQmxhY2tCZXJyeS5oIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vYmxhY2tiZXJyeS9DbGlwYm9hcmRCbGFja0JlcnJ5LmgKaW5kZXggMzdkYTUx
NGIwNzUxNDBlOTMwNzQwMzg2Yjc3YjY1ODc5NDY4NmQxNC4uYzhkODA5NzNiODQ1ZTExODM4M2M3
MmRmNjY1Njc3YjVmMzhiZjY0MSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
YmxhY2tiZXJyeS9DbGlwYm9hcmRCbGFja0JlcnJ5LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vYmxhY2tiZXJyeS9DbGlwYm9hcmRCbGFja0JlcnJ5LmgKQEAgLTM5LDcgKzM5LDcgQEAg
cHVibGljOgogICAgIGJvb2wgc2V0RGF0YShjb25zdCBTdHJpbmcmIHR5cGUsIGNvbnN0IFN0cmlu
ZyYgZGF0YSk7CiAKICAgICAvLyBleHRlbnNpb25zIGJleW9uZCBJRSdzIEFQSQotICAgIHZpcnR1
YWwgTGlzdEhhc2hTZXQ8U3RyaW5nPiB0eXBlcygpIGNvbnN0OworICAgIHZpcnR1YWwgVmVjdG9y
PFN0cmluZz4gdHlwZXMoKSBjb25zdDsKICAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8RmlsZUxpc3Q+
IGZpbGVzKCkgY29uc3Q7CiAgICAgdmlydHVhbCBEcmFnSW1hZ2VSZWYgY3JlYXRlRHJhZ0ltYWdl
KEludFBvaW50JikgY29uc3Q7CiAgICAgdmlydHVhbCB2b2lkIGRlY2xhcmVBbmRXcml0ZURyYWdJ
bWFnZShFbGVtZW50KiwgY29uc3QgS1VSTCYsIGNvbnN0IFN0cmluZyYgdGl0bGUsIEZyYW1lKik7
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jaHJvbWl1bS9DaHJvbWl1bURh
dGFPYmplY3QuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY2hyb21pdW0vQ2hyb21pdW1E
YXRhT2JqZWN0LmNwcAppbmRleCA5YjExZjIzZmUzY2IwMzU4OTViYmU3YWZlMmQxMmVmZDhjZTQ0
NjIyLi40Yjk1YmFjMTRkZDRjMTU5MTljYTkwMTQyMTI4ZTM3MTY4Y2QwOGQ3IDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jaHJvbWl1bS9DaHJvbWl1bURhdGFPYmplY3QuY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2Nocm9taXVtL0Nocm9taXVtRGF0YU9iamVj
dC5jcHAKQEAgLTEyNiwyMCArMTI2LDIwIEBAIHZvaWQgQ2hyb21pdW1EYXRhT2JqZWN0OjpjbGVh
ckFsbEV4Y2VwdEZpbGVzKCkKICAgICB9CiB9CiAKLUxpc3RIYXNoU2V0PFN0cmluZz4gQ2hyb21p
dW1EYXRhT2JqZWN0Ojp0eXBlcygpIGNvbnN0CitWZWN0b3I8U3RyaW5nPiBDaHJvbWl1bURhdGFP
YmplY3Q6OnR5cGVzKCkgY29uc3QKIHsKLSAgICBMaXN0SGFzaFNldDxTdHJpbmc+IHJlc3VsdHM7
CisgICAgVmVjdG9yPFN0cmluZz4gcmVzdWx0czsKICAgICBib29sIGNvbnRhaW5zRmlsZXMgPSBm
YWxzZTsKICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1faXRlbUxpc3Quc2l6ZSgpOyArK2kp
IHsKICAgICAgICAgaWYgKG1faXRlbUxpc3RbaV0tPmtpbmQoKSA9PSBEYXRhVHJhbnNmZXJJdGVt
OjpraW5kU3RyaW5nKQotICAgICAgICAgICAgcmVzdWx0cy5hZGQobV9pdGVtTGlzdFtpXS0+dHlw
ZSgpKTsKKyAgICAgICAgICAgIHJlc3VsdHMuYXBwZW5kKG1faXRlbUxpc3RbaV0tPnR5cGUoKSk7
CiAgICAgICAgIGVsc2UgaWYgKG1faXRlbUxpc3RbaV0tPmtpbmQoKSA9PSBEYXRhVHJhbnNmZXJJ
dGVtOjpraW5kRmlsZSkKICAgICAgICAgICAgIGNvbnRhaW5zRmlsZXMgPSB0cnVlOwogICAgICAg
ICBlbHNlCiAgICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICB9CiAgICAgaWYg
KGNvbnRhaW5zRmlsZXMpCi0gICAgICAgIHJlc3VsdHMuYWRkKG1pbWVUeXBlRmlsZXMpOworICAg
ICAgICByZXN1bHRzLmFwcGVuZChBU0NJSUxpdGVyYWwobWltZVR5cGVGaWxlcykpOwogICAgIHJl
dHVybiByZXN1bHRzOwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9j
aHJvbWl1bS9DaHJvbWl1bURhdGFPYmplY3QuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2No
cm9taXVtL0Nocm9taXVtRGF0YU9iamVjdC5oCmluZGV4IDI1NTFjNDVkYWU3ZGI1MjVjOWIzOTBh
NDI3YjlmYjIyNGE3MDkyNTEuLjEyM2ZlNzdkYTg1MjViMjA4NDQ4ZTQ2Y2Y5ZjlhZmQ5OWRkYzky
YzEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2Nocm9taXVtL0Nocm9taXVt
RGF0YU9iamVjdC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2Nocm9taXVtL0Nocm9t
aXVtRGF0YU9iamVjdC5oCkBAIC02OSw3ICs2OSw3IEBAIHB1YmxpYzoKICAgICB2b2lkIGNsZWFy
RGF0YShjb25zdCBTdHJpbmcmIHR5cGUpOwogICAgIHZvaWQgY2xlYXJBbGxFeGNlcHRGaWxlcygp
OwogCi0gICAgTGlzdEhhc2hTZXQ8U3RyaW5nPiB0eXBlcygpIGNvbnN0OworICAgIFZlY3RvcjxT
dHJpbmc+IHR5cGVzKCkgY29uc3Q7CiAgICAgU3RyaW5nIGdldERhdGEoY29uc3QgU3RyaW5nJiB0
eXBlKSBjb25zdDsKICAgICBib29sIHNldERhdGEoY29uc3QgU3RyaW5nJiB0eXBlLCBjb25zdCBT
dHJpbmcmIGRhdGEpOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jaHJv
bWl1bS9DbGlwYm9hcmRDaHJvbWl1bS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jaHJv
bWl1bS9DbGlwYm9hcmRDaHJvbWl1bS5jcHAKaW5kZXggZmMzNzI3OGQ2YjkyMjczYWQ4OTUyMTU3
MmViNWQ4NGRiYWU5MjE4OS4uYWU4NWM0NTc4YjA2MzQ0ZTI2ZjJkMzcxZGY3MGVlMWY4NmQ5NThl
ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY2hyb21pdW0vQ2xpcGJvYXJk
Q2hyb21pdW0uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2Nocm9taXVtL0NsaXBi
b2FyZENocm9taXVtLmNwcApAQCAtMjc1LDEwICsyNzUsMTAgQEAgYm9vbCBDbGlwYm9hcmRDaHJv
bWl1bTo6c2V0RGF0YShjb25zdCBTdHJpbmcmIHR5cGUsIGNvbnN0IFN0cmluZyYgZGF0YSkKIH0K
IAogLy8gZXh0ZW5zaW9ucyBiZXlvbmQgSUUncyBBUEkKLUxpc3RIYXNoU2V0PFN0cmluZz4gQ2xp
cGJvYXJkQ2hyb21pdW06OnR5cGVzKCkgY29uc3QKK1ZlY3RvcjxTdHJpbmc+IENsaXBib2FyZENo
cm9taXVtOjp0eXBlcygpIGNvbnN0CiB7CiAgICAgaWYgKHBvbGljeSgpICE9IENsaXBib2FyZFJl
YWRhYmxlICYmIHBvbGljeSgpICE9IENsaXBib2FyZFR5cGVzUmVhZGFibGUpCi0gICAgICAgIHJl
dHVybiBMaXN0SGFzaFNldDxTdHJpbmc+KCk7CisgICAgICAgIHJldHVybiBWZWN0b3I8U3RyaW5n
PigpOwogCiAgICAgcmV0dXJuIG1fZGF0YU9iamVjdC0+dHlwZXMoKTsKIH0KZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2Nocm9taXVtL0NsaXBib2FyZENocm9taXVtLmggYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jaHJvbWl1bS9DbGlwYm9hcmRDaHJvbWl1bS5oCmluZGV4
IGU0MTgzOGRhOTY0YjRhZjM0ZjFkOTc3M2I0MDgzZTE0OGNlODc1N2EuLjg0MWFhZTYxMzVjMGY4
ZDJjNDk0YzVjNGViYjhlZjI2YmQ0NzExN2IgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2Nocm9taXVtL0NsaXBib2FyZENocm9taXVtLmgKKysrIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vY2hyb21pdW0vQ2xpcGJvYXJkQ2hyb21pdW0uaApAQCAtODQsNyArODQsNyBAQCBu
YW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIGJvb2wgcGxhdGZvcm1DbGlwYm9hcmRDaGFuZ2Vk
KCkgY29uc3Q7CiAKICAgICAgICAgLy8gZXh0ZW5zaW9ucyBiZXlvbmQgSUUncyBBUEkKLSAgICAg
ICAgdmlydHVhbCBMaXN0SGFzaFNldDxTdHJpbmc+IHR5cGVzKCkgY29uc3Q7CisgICAgICAgIHZp
cnR1YWwgVmVjdG9yPFN0cmluZz4gdHlwZXMoKSBjb25zdDsKICAgICAgICAgdmlydHVhbCBQYXNz
UmVmUHRyPEZpbGVMaXN0PiBmaWxlcygpIGNvbnN0OwogCiAgICAgICAgIHZvaWQgc2V0RHJhZ0lt
YWdlKENhY2hlZEltYWdlKiwgY29uc3QgSW50UG9pbnQmKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2Nocm9taXVtL0RyYWdEYXRhQ2hyb21pdW0uY3BwIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vY2hyb21pdW0vRHJhZ0RhdGFDaHJvbWl1bS5jcHAKaW5kZXggZmJkZTVl
ZDlhMGE1NGYzM2MyY2Q2MWJkYzUwMTVlZTM4YWQ5YjU2Ny4uNTQ4YTcwYjBjZjZkYjhmNWFlY2Nj
NGY1YjQ3ODY4ZmM3YTk2OWZmMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Y2hyb21pdW0vRHJhZ0RhdGFDaHJvbWl1bS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vY2hyb21pdW0vRHJhZ0RhdGFDaHJvbWl1bS5jcHAKQEAgLTUyLDE5ICs1MiwxOSBAQCBuYW1l
c3BhY2UgV2ViQ29yZSB7CiAKIHN0YXRpYyBib29sIGNvbnRhaW5zSFRNTChjb25zdCBDaHJvbWl1
bURhdGFPYmplY3QqIGRyb3BEYXRhKQogewotICAgIHJldHVybiBkcm9wRGF0YS0+dHlwZXMoKS5j
b250YWlucyhtaW1lVHlwZVRleHRIVE1MKTsKKyAgICByZXR1cm4gZHJvcERhdGEtPnR5cGVzKCku
Y29udGFpbnMoU3RyaW5nKEFTQ0lJTGl0ZXJhbChtaW1lVHlwZVRleHRIVE1MKSkpOwogfQogCiBi
b29sIERyYWdEYXRhOjpjb250YWluc1VSTChGcmFtZSosIEZpbGVuYW1lQ29udmVyc2lvblBvbGlj
eSBmaWxlbmFtZVBvbGljeSkgY29uc3QKIHsKLSAgICByZXR1cm4gbV9wbGF0Zm9ybURyYWdEYXRh
LT50eXBlcygpLmNvbnRhaW5zKG1pbWVUeXBlVGV4dFVSSUxpc3QpCisgICAgcmV0dXJuIG1fcGxh
dGZvcm1EcmFnRGF0YS0+dHlwZXMoKS5jb250YWlucyhTdHJpbmcoQVNDSUlMaXRlcmFsKG1pbWVU
eXBlVGV4dFVSSUxpc3QpKSkKICAgICAgICAgfHwgKGZpbGVuYW1lUG9saWN5ID09IENvbnZlcnRG
aWxlbmFtZXMgJiYgbV9wbGF0Zm9ybURyYWdEYXRhLT5jb250YWluc0ZpbGVuYW1lcygpKTsKIH0K
IAogU3RyaW5nIERyYWdEYXRhOjphc1VSTChGcmFtZSosIEZpbGVuYW1lQ29udmVyc2lvblBvbGlj
eSBmaWxlbmFtZVBvbGljeSwgU3RyaW5nKiB0aXRsZSkgY29uc3QKIHsKICAgICBTdHJpbmcgdXJs
OwotICAgIGlmIChtX3BsYXRmb3JtRHJhZ0RhdGEtPnR5cGVzKCkuY29udGFpbnMobWltZVR5cGVU
ZXh0VVJJTGlzdCkpCisgICAgaWYgKG1fcGxhdGZvcm1EcmFnRGF0YS0+dHlwZXMoKS5jb250YWlu
cyhTdHJpbmcoQVNDSUlMaXRlcmFsKG1pbWVUeXBlVGV4dFVSSUxpc3QpKSkpCiAgICAgICAgIG1f
cGxhdGZvcm1EcmFnRGF0YS0+dXJsQW5kVGl0bGUodXJsLCB0aXRsZSk7CiAgICAgZWxzZSBpZiAo
ZmlsZW5hbWVQb2xpY3kgPT0gQ29udmVydEZpbGVuYW1lcyAmJiBjb250YWluc0ZpbGVzKCkpIHsK
ICAgICAgICAgU3RyaW5nIHBhdGggPSBTdHJpbmcoV2ViS2l0OjpQbGF0Zm9ybTo6Y3VycmVudCgp
LT5maWxlVXRpbGl0aWVzKCktPmdldEFic29sdXRlUGF0aChtX3BsYXRmb3JtRHJhZ0RhdGEtPmZp
bGVuYW1lcygpWzBdKSk7CkBAIC05Nyw3ICs5Nyw3IEBAIHZvaWQgRHJhZ0RhdGE6OmFzRmlsZW5h
bWVzKFZlY3RvcjxTdHJpbmc+JiByZXN1bHQpIGNvbnN0CiAKIGJvb2wgRHJhZ0RhdGE6OmNvbnRh
aW5zUGxhaW5UZXh0KCkgY29uc3QKIHsKLSAgICByZXR1cm4gbV9wbGF0Zm9ybURyYWdEYXRhLT50
eXBlcygpLmNvbnRhaW5zKG1pbWVUeXBlVGV4dFBsYWluKTsKKyAgICByZXR1cm4gbV9wbGF0Zm9y
bURyYWdEYXRhLT50eXBlcygpLmNvbnRhaW5zKFN0cmluZyhBU0NJSUxpdGVyYWwobWltZVR5cGVU
ZXh0UGxhaW4pKSk7CiB9CiAKIFN0cmluZyBEcmFnRGF0YTo6YXNQbGFpblRleHQoRnJhbWUqKSBj
b25zdApAQCAtMTE3LDggKzExNyw4IEBAIGJvb2wgRHJhZ0RhdGE6OmNhblNtYXJ0UmVwbGFjZSgp
IGNvbnN0CiAgICAgLy8gVGhpcyBpcyBhbGxvd2VkIHdoZW5ldmVyIHRoZSBkcmFnIGRhdGEgY29u
dGFpbnMgYSAncmFuZ2UnIChpZS4sCiAgICAgLy8gQ2xpcGJvYXJkV2luOjp3cml0ZVJhbmdlIGlz
IGNhbGxlZCkuICBGb3IgZXhhbXBsZSwgZHJhZ2dpbmcgYSBsaW5rCiAgICAgLy8gc2hvdWxkIG5v
dCByZXN1bHQgaW4gYSBzcGFjZSBiZWluZyBhZGRlZC4KLSAgICByZXR1cm4gbV9wbGF0Zm9ybURy
YWdEYXRhLT50eXBlcygpLmNvbnRhaW5zKG1pbWVUeXBlVGV4dFBsYWluKQotICAgICAgICAmJiAh
bV9wbGF0Zm9ybURyYWdEYXRhLT50eXBlcygpLmNvbnRhaW5zKG1pbWVUeXBlVGV4dFVSSUxpc3Qp
OworICAgIHJldHVybiBtX3BsYXRmb3JtRHJhZ0RhdGEtPnR5cGVzKCkuY29udGFpbnMoU3RyaW5n
KEFTQ0lJTGl0ZXJhbChtaW1lVHlwZVRleHRQbGFpbikpKQorICAgICAgICAmJiAhbV9wbGF0Zm9y
bURyYWdEYXRhLT50eXBlcygpLmNvbnRhaW5zKFN0cmluZyhBU0NJSUxpdGVyYWwobWltZVR5cGVU
ZXh0VVJJTGlzdCkpKTsKIH0KIAogYm9vbCBEcmFnRGF0YTo6Y29udGFpbnNDb21wYXRpYmxlQ29u
dGVudCgpIGNvbnN0CkBAIC0xNTAsNyArMTUwLDcgQEAgUGFzc1JlZlB0cjxEb2N1bWVudEZyYWdt
ZW50PiBEcmFnRGF0YTo6YXNGcmFnbWVudChGcmFtZSogZnJhbWUsIFBhc3NSZWZQdHI8UmFuZ2UK
ICAgICAgICAgLy8gICAgcmV0dXJuIGZyYWdtZW50OwogICAgIH0KIAotICAgIGlmIChtX3BsYXRm
b3JtRHJhZ0RhdGEtPnR5cGVzKCkuY29udGFpbnMobWltZVR5cGVUZXh0SFRNTCkpIHsKKyAgICBp
ZiAobV9wbGF0Zm9ybURyYWdEYXRhLT50eXBlcygpLmNvbnRhaW5zKFN0cmluZyhBU0NJSUxpdGVy
YWwobWltZVR5cGVUZXh0SFRNTCkpKSkgewogICAgICAgICBTdHJpbmcgaHRtbDsKICAgICAgICAg
S1VSTCBiYXNlVVJMOwogICAgICAgICBtX3BsYXRmb3JtRHJhZ0RhdGEtPmh0bWxBbmRCYXNlVVJM
KGh0bWwsIGJhc2VVUkwpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZWZs
L0NsaXBib2FyZEVmbC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9lZmwvQ2xpcGJvYXJk
RWZsLmNwcAppbmRleCBkZDRhYzIwY2ZjOWFmMTNiMWZkZTVkMjZkYzRlMjMwYTBhMGIyMWNlLi4w
YTY4ZDQwN2RlOTkwNGRmZWU4ZDQ4ZTExOWNmYzFjOWYzYmIwMmU3IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9lZmwvQ2xpcGJvYXJkRWZsLmNwcAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9lZmwvQ2xpcGJvYXJkRWZsLmNwcApAQCAtNzYsMTAgKzc2LDEwIEBAIGJv
b2wgQ2xpcGJvYXJkRWZsOjpzZXREYXRhKGNvbnN0IFN0cmluZyYsIGNvbnN0IFN0cmluZyYpCiAg
ICAgcmV0dXJuIGZhbHNlOwogfQogCi1MaXN0SGFzaFNldDxTdHJpbmc+IENsaXBib2FyZEVmbDo6
dHlwZXMoKSBjb25zdAorVmVjdG9yPFN0cmluZz4gQ2xpcGJvYXJkRWZsOjp0eXBlcygpIGNvbnN0
CiB7CiAgICAgbm90SW1wbGVtZW50ZWQoKTsKLSAgICByZXR1cm4gTGlzdEhhc2hTZXQ8U3RyaW5n
PigpOworICAgIHJldHVybiBWZWN0b3I8U3RyaW5nPigpOwogfQogCiBQYXNzUmVmUHRyPEZpbGVM
aXN0PiBDbGlwYm9hcmRFZmw6OmZpbGVzKCkgY29uc3QKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2VmbC9DbGlwYm9hcmRFZmwuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2VmbC9DbGlwYm9hcmRFZmwuaAppbmRleCA5MDRlYjUyMTdiN2ZlNzRiNWVkMzg0M2E3M2Q5M2Vk
MTU0ZWE1N2M4Li5iN2IzMjg3YjVlYTNkNDdiYTJmYTc0YmFiNzViZmUxMDg1ZDIzMmM3IDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9lZmwvQ2xpcGJvYXJkRWZsLmgKKysrIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZWZsL0NsaXBib2FyZEVmbC5oCkBAIC0zOSw3ICszOSw3
IEBAIHB1YmxpYzoKICAgICBTdHJpbmcgZ2V0RGF0YShjb25zdCBTdHJpbmcmKSBjb25zdDsKICAg
ICBib29sIHNldERhdGEoY29uc3QgU3RyaW5nJiwgY29uc3QgU3RyaW5nJik7CiAKLSAgICBMaXN0
SGFzaFNldDxTdHJpbmc+IHR5cGVzKCkgY29uc3Q7CisgICAgVmVjdG9yPFN0cmluZz4gdHlwZXMo
KSBjb25zdDsKICAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8RmlsZUxpc3Q+IGZpbGVzKCkgY29uc3Q7
CiAKICAgICBJbnRQb2ludCBkcmFnTG9jYXRpb24oKSBjb25zdDsKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9DbGlwYm9hcmRHdGsuY3BwIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3RrL0NsaXBib2FyZEd0ay5jcHAKaW5kZXggMjYzYjZjZjhmMmVkYzU5OThmMTVh
MDFhZWJjNTcyMmUzNTk2NjQ0YS4uZGFkNzgyMzU3NTljZWU5ZTA4ZjkzMjM3ZmJjNDBmOGMyN2Rk
NTg5NyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL0NsaXBib2FyZEd0
ay5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL0NsaXBib2FyZEd0ay5jcHAK
QEAgLTE4OCwzMSArMTg4LDMxIEBAIGJvb2wgQ2xpcGJvYXJkR3RrOjpzZXREYXRhKGNvbnN0IFN0
cmluZyYgdHlwZVN0cmluZywgY29uc3QgU3RyaW5nJiBkYXRhKQogICAgIHJldHVybiBzdWNjZXNz
OwogfQogCi1MaXN0SGFzaFNldDxTdHJpbmc+IENsaXBib2FyZEd0azo6dHlwZXMoKSBjb25zdAor
VmVjdG9yPFN0cmluZz4gQ2xpcGJvYXJkR3RrOjp0eXBlcygpIGNvbnN0CiB7CiAgICAgaWYgKHBv
bGljeSgpICE9IENsaXBib2FyZFJlYWRhYmxlICYmIHBvbGljeSgpICE9IENsaXBib2FyZFR5cGVz
UmVhZGFibGUpCi0gICAgICAgIHJldHVybiBMaXN0SGFzaFNldDxTdHJpbmc+KCk7CisgICAgICAg
IHJldHVybiBWZWN0b3I8U3RyaW5nPigpOwogCiAgICAgaWYgKG1fY2xpcGJvYXJkKQogICAgICAg
ICBQYXN0ZWJvYXJkSGVscGVyOjpkZWZhdWx0UGFzdGVib2FyZEhlbHBlcigpLT5nZXRDbGlwYm9h
cmRDb250ZW50cyhtX2NsaXBib2FyZCk7CiAKLSAgICBMaXN0SGFzaFNldDxTdHJpbmc+IHR5cGVz
OworICAgIFZlY3RvcjxTdHJpbmc+IHR5cGVzOwogICAgIGlmIChtX2RhdGFPYmplY3QtPmhhc1Rl
eHQoKSkgewotICAgICAgICB0eXBlcy5hZGQoInRleHQvcGxhaW4iKTsKLSAgICAgICAgdHlwZXMu
YWRkKCJUZXh0Iik7Ci0gICAgICAgIHR5cGVzLmFkZCgidGV4dCIpOworICAgICAgICB0eXBlcy5h
cHBlbmQoQVNDSUlMaXRlcmFsKCJ0ZXh0L3BsYWluIikpOworICAgICAgICB0eXBlcy5hcHBlbmQo
QVNDSUlMaXRlcmFsKCJUZXh0IikpOworICAgICAgICB0eXBlcy5hcHBlbmQoQVNDSUlMaXRlcmFs
KCJ0ZXh0IikpOwogICAgIH0KIAogICAgIGlmIChtX2RhdGFPYmplY3QtPmhhc01hcmt1cCgpKQot
ICAgICAgICB0eXBlcy5hZGQoInRleHQvaHRtbCIpOworICAgICAgICB0eXBlcy5hcHBlbmQoQVND
SUlMaXRlcmFsKCJ0ZXh0L2h0bWwiKSk7CiAKICAgICBpZiAobV9kYXRhT2JqZWN0LT5oYXNVUklM
aXN0KCkpIHsKLSAgICAgICAgdHlwZXMuYWRkKCJ0ZXh0L3VyaS1saXN0Iik7Ci0gICAgICAgIHR5
cGVzLmFkZCgiVVJMIik7CisgICAgICAgIHR5cGVzLmFwcGVuZChBU0NJSUxpdGVyYWwoInRleHQv
dXJpLWxpc3QiKSk7CisgICAgICAgIHR5cGVzLmFwcGVuZChBU0NJSUxpdGVyYWwoIlVSTCIpKTsK
ICAgICB9CiAKICAgICBpZiAobV9kYXRhT2JqZWN0LT5oYXNGaWxlbmFtZXMoKSkKLSAgICAgICAg
dHlwZXMuYWRkKCJGaWxlcyIpOworICAgICAgICB0eXBlcy5hcHBlbmQoQVNDSUlMaXRlcmFsKCJG
aWxlcyIpKTsKIAogICAgIHJldHVybiB0eXBlczsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2d0ay9DbGlwYm9hcmRHdGsuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2d0ay9DbGlwYm9hcmRHdGsuaAppbmRleCBlZTlkNjNjZTRmMmNlOGJjMTEyZDBmMjA5M2VlNTg4
MzkzMjI4ZTM1Li43YTYxMTdkN2FmNDNkOGU1Njc4YTYzYjk5NGU4MTI0YmRhYTJmZjM2IDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvQ2xpcGJvYXJkR3RrLmgKKysrIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL0NsaXBib2FyZEd0ay5oCkBAIC01Nyw3ICs1Nyw3
IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgU3RyaW5nIGdldERhdGEoY29uc3QgU3Ry
aW5nJikgY29uc3Q7CiAgICAgICAgIGJvb2wgc2V0RGF0YShjb25zdCBTdHJpbmcmLCBjb25zdCBT
dHJpbmcmKTsKIAotICAgICAgICB2aXJ0dWFsIExpc3RIYXNoU2V0PFN0cmluZz4gdHlwZXMoKSBj
b25zdDsKKyAgICAgICAgdmlydHVhbCBWZWN0b3I8U3RyaW5nPiB0eXBlcygpIGNvbnN0OwogICAg
ICAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8RmlsZUxpc3Q+IGZpbGVzKCkgY29uc3Q7CiAKICAgICAg
ICAgdm9pZCBzZXREcmFnSW1hZ2UoQ2FjaGVkSW1hZ2UqLCBjb25zdCBJbnRQb2ludCYpOwpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWFjL0NsaXBib2FyZE1hYy5oIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWFjL0NsaXBib2FyZE1hYy5oCmluZGV4IDMwNWE5MmZmOThi
MjFlYjVkM2MxYjJiYzAxNjRmMzkxYzcyMjgwOWMuLjcyZTZhMzYzZDAzZGIwZjAwMjc2YTk0M2Y5
OTZiMDk2NjkxM2I0YTcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21hYy9D
bGlwYm9hcmRNYWMuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tYWMvQ2xpcGJvYXJk
TWFjLmgKQEAgLTYyLDcgKzYyLDcgQEAgcHVibGljOgogICAgIHZpcnR1YWwgYm9vbCBoYXNEYXRh
KCk7CiAgICAgCiAgICAgLy8gZXh0ZW5zaW9ucyBiZXlvbmQgSUUncyBBUEkKLSAgICB2aXJ0dWFs
IExpc3RIYXNoU2V0PFN0cmluZz4gdHlwZXMoKSBjb25zdDsKKyAgICB2aXJ0dWFsIFZlY3RvcjxT
dHJpbmc+IHR5cGVzKCkgY29uc3Q7CiAgICAgdmlydHVhbCBQYXNzUmVmUHRyPEZpbGVMaXN0PiBm
aWxlcygpIGNvbnN0OwogCiAgICAgdm9pZCBzZXREcmFnSW1hZ2UoQ2FjaGVkSW1hZ2UqLCBjb25z
dCBJbnRQb2ludCYpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWFjL0Ns
aXBib2FyZE1hYy5tbSBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21hYy9DbGlwYm9hcmRNYWMu
bW0KaW5kZXggYTViMjlkOTlmODI4ZDk4NDVjM2I3ZjE3Yzg3YmE1NmFhZWJlNDJlMS4uNjUxY2U5
MjFiNGY5MTZhYjNjODdjZmZkMzI3YmJjNjExOTk5OWQ5MyAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vbWFjL0NsaXBib2FyZE1hYy5tbQorKysgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9tYWMvQ2xpcGJvYXJkTWFjLm1tCkBAIC0xMTksMTUgKzExOSwxNSBAQCBzdGF0aWMg
U3RyaW5nIHV0aVR5cGVGcm9tQ29jb2FUeXBlKGNvbnN0IFN0cmluZyYgdHlwZSkKICAgICByZXR1
cm4gU3RyaW5nKCk7CiB9CiAKLXN0YXRpYyB2b2lkIGFkZEhUTUxDbGlwYm9hcmRUeXBlc0ZvckNv
Y29hVHlwZShMaXN0SGFzaFNldDxTdHJpbmc+JiByZXN1bHRUeXBlcywgY29uc3QgU3RyaW5nJiBj
b2NvYVR5cGUsIGNvbnN0IFN0cmluZyYgcGFzdGVib2FyZE5hbWUpCitzdGF0aWMgdm9pZCBhZGRI
VE1MQ2xpcGJvYXJkVHlwZXNGb3JDb2NvYVR5cGUoVmVjdG9yPFN0cmluZz4mIHJlc3VsdFR5cGVz
LCBjb25zdCBTdHJpbmcmIGNvY29hVHlwZSwgY29uc3QgU3RyaW5nJiBwYXN0ZWJvYXJkTmFtZSkK
IHsKICAgICAvLyBVVEkgbWF5IG5vdCBkbyB0aGVzZSByaWdodCwgc28gbWFrZSBzdXJlIHdlIGdl
dCB0aGUgcmlnaHQsIHByZWRpY3RhYmxlIHJlc3VsdAogICAgIGlmIChjb2NvYVR5cGUgPT0gU3Ry
aW5nKE5TU3RyaW5nUGJvYXJkVHlwZSkpIHsKLSAgICAgICAgcmVzdWx0VHlwZXMuYWRkKCJ0ZXh0
L3BsYWluIik7CisgICAgICAgIHJlc3VsdFR5cGVzLmFwcGVuZChBU0NJSUxpdGVyYWwoInRleHQv
cGxhaW4iKSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAgICAgaWYgKGNvY29hVHlwZSA9PSBT
dHJpbmcoTlNVUkxQYm9hcmRUeXBlKSkgewotICAgICAgICByZXN1bHRUeXBlcy5hZGQoInRleHQv
dXJpLWxpc3QiKTsKKyAgICAgICAgcmVzdWx0VHlwZXMuYXBwZW5kKEFTQ0lJTGl0ZXJhbCgidGV4
dC91cmktbGlzdCIpKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KICAgICBpZiAoY29jb2FUeXBl
ID09IFN0cmluZyhOU0ZpbGVuYW1lc1Bib2FyZFR5cGUpKSB7CkBAIC0xMzksMTggKzEzOSwxOCBA
QCBzdGF0aWMgdm9pZCBhZGRIVE1MQ2xpcGJvYXJkVHlwZXNGb3JDb2NvYVR5cGUoTGlzdEhhc2hT
ZXQ8U3RyaW5nPiYgcmVzdWx0VHlwZXMsCiAgICAgICAgIGlmICghZmlsZUxpc3QuaXNFbXB0eSgp
KSB7CiAgICAgICAgICAgICAvLyBJdCBpcyB1bmtub3duIGlmIE5TRmlsZW5hbWVzUGJvYXJkVHlw
ZSBhbHdheXMgaW1wbGllcyBOU1VSTFBib2FyZFR5cGUgaW4gQ29jb2EsCiAgICAgICAgICAgICAv
LyBidXQgTlNGaWxlbmFtZXNQYm9hcmRUeXBlIHNob3VsZCBpbXBseSBib3RoICd0ZXh0L3VyaS1s
aXN0JyBhbmQgJ0ZpbGVzJwotICAgICAgICAgICAgcmVzdWx0VHlwZXMuYWRkKCJ0ZXh0L3VyaS1s
aXN0Iik7Ci0gICAgICAgICAgICByZXN1bHRUeXBlcy5hZGQoIkZpbGVzIik7CisgICAgICAgICAg
ICByZXN1bHRUeXBlcy5hcHBlbmQoQVNDSUlMaXRlcmFsKCJ0ZXh0L3VyaS1saXN0IikpOworICAg
ICAgICAgICAgcmVzdWx0VHlwZXMuYXBwZW5kKEFTQ0lJTGl0ZXJhbCgiRmlsZXMiKSk7CiAgICAg
ICAgIH0KICAgICAgICAgcmV0dXJuOwogICAgIH0KICAgICBTdHJpbmcgdXRpVHlwZSA9IHV0aVR5
cGVGcm9tQ29jb2FUeXBlKGNvY29hVHlwZSk7CiAgICAgaWYgKCF1dGlUeXBlLmlzRW1wdHkoKSkg
ewotICAgICAgICByZXN1bHRUeXBlcy5hZGQodXRpVHlwZSk7CisgICAgICAgIHJlc3VsdFR5cGVz
LmFwcGVuZCh1dGlUeXBlKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KICAgICAvLyBObyBtYXBw
aW5nLCBqdXN0IHBhc3MgdGhlIHdob2xlIHN0cmluZyB0aG91Z2gKLSAgICByZXN1bHRUeXBlcy5h
ZGQoY29jb2FUeXBlKTsKKyAgICByZXN1bHRUeXBlcy5hcHBlbmQoY29jb2FUeXBlKTsKIH0KIAog
dm9pZCBDbGlwYm9hcmRNYWM6OmNsZWFyRGF0YShjb25zdCBTdHJpbmcmIHR5cGUpCkBAIC0yODEs
MTAgKzI4MSwxMCBAQCBib29sIENsaXBib2FyZE1hYzo6c2V0RGF0YShjb25zdCBTdHJpbmcgJnR5
cGUsIGNvbnN0IFN0cmluZyAmZGF0YSkKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLUxpc3RIYXNo
U2V0PFN0cmluZz4gQ2xpcGJvYXJkTWFjOjp0eXBlcygpIGNvbnN0CitWZWN0b3I8U3RyaW5nPiBD
bGlwYm9hcmRNYWM6OnR5cGVzKCkgY29uc3QKIHsKICAgICBpZiAocG9saWN5KCkgIT0gQ2xpcGJv
YXJkUmVhZGFibGUgJiYgcG9saWN5KCkgIT0gQ2xpcGJvYXJkVHlwZXNSZWFkYWJsZSkKLSAgICAg
ICAgcmV0dXJuIExpc3RIYXNoU2V0PFN0cmluZz4oKTsKKyAgICAgICAgcmV0dXJuIFZlY3RvcjxT
dHJpbmc+KCk7CiAKICAgICBWZWN0b3I8U3RyaW5nPiB0eXBlczsKICAgICBwbGF0Zm9ybVN0cmF0
ZWdpZXMoKS0+cGFzdGVib2FyZFN0cmF0ZWd5KCktPmdldFR5cGVzKHR5cGVzLCBtX3Bhc3RlYm9h
cmROYW1lKTsKQEAgLTI5Miw5ICsyOTIsOSBAQCBMaXN0SGFzaFNldDxTdHJpbmc+IENsaXBib2Fy
ZE1hYzo6dHlwZXMoKSBjb25zdAogICAgIC8vIEVuZm9yY2UgY2hhbmdlQ291bnQgb3Vyc2VsdmVz
IGZvciBzZWN1cml0eS4gIFdlIGNoZWNrIGFmdGVyIHJlYWRpbmcgaW5zdGVhZCBvZiBiZWZvcmUg
dG8gYmUKICAgICAvLyBzdXJlIGl0IGRvZXNuJ3QgY2hhbmdlIGJldHdlZW4gb3VyIHRlc3Rpbmcg
dGhlIGNoYW5nZSBjb3VudCBhbmQgYWNjZXNzaW5nIHRoZSBkYXRhLgogICAgIGlmIChtX2NoYW5n
ZUNvdW50ICE9IHBsYXRmb3JtU3RyYXRlZ2llcygpLT5wYXN0ZWJvYXJkU3RyYXRlZ3koKS0+Y2hh
bmdlQ291bnQobV9wYXN0ZWJvYXJkTmFtZSkpCi0gICAgICAgIHJldHVybiBMaXN0SGFzaFNldDxT
dHJpbmc+KCk7CisgICAgICAgIHJldHVybiBWZWN0b3I8U3RyaW5nPigpOwogCi0gICAgTGlzdEhh
c2hTZXQ8U3RyaW5nPiByZXN1bHQ7CisgICAgVmVjdG9yPFN0cmluZz4gcmVzdWx0OwogICAgIC8v
IEZJWE1FOiBUaGlzIGxvb3AgY291bGQgYmUgc3BsaXQgaW50byB0d28gc3RhZ2VzLiBPbmUgd2hp
Y2ggYWRkcyBhbGwgdGhlIEhUTUw1IHNwZWNpZmllZCB0eXBlcwogICAgIC8vIGFuZCBhIHNlY29u
ZCB3aGljaCBhZGRzIGFsbCB0aGUgZXh0cmEgdHlwZXMgZnJvbSB0aGUgY29jb2EgY2xpcGJvYXJk
ICh3aGljaCBpcyBNYWMtb25seSBiZWhhdmlvcikuCiAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkg
PCB0eXBlcy5zaXplKCk7IGkrKykgewpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vcXQvQ2xpcGJvYXJkUXQuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vcXQvQ2xpcGJv
YXJkUXQuY3BwCmluZGV4IDcxYzkxY2I0MWI2Y2UxZGE5MmY2MjNmZTUwOTFkNGJiMGNjOGQzNzgu
LjM4YWQxNWYyYzQ5NDE0ODU1Zjg1MmUwMmFjN2EwMTIzZWViZDAwODcgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL3F0L0NsaXBib2FyZFF0LmNwcAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9xdC9DbGlwYm9hcmRRdC5jcHAKQEAgLTE4MiwxNiArMTgyLDE2IEBAIGJv
b2wgQ2xpcGJvYXJkUXQ6OnNldERhdGEoY29uc3QgU3RyaW5nJiB0eXBlLCBjb25zdCBTdHJpbmcm
IGRhdGEpCiB9CiAKIC8vIGV4dGVuc2lvbnMgYmV5b25kIElFJ3MgQVBJCi1MaXN0SGFzaFNldDxT
dHJpbmc+IENsaXBib2FyZFF0Ojp0eXBlcygpIGNvbnN0CitWZWN0b3I8U3RyaW5nPiBDbGlwYm9h
cmRRdDo6dHlwZXMoKSBjb25zdAogewogICAgIGlmIChwb2xpY3koKSAhPSBDbGlwYm9hcmRSZWFk
YWJsZSAmJiBwb2xpY3koKSAhPSBDbGlwYm9hcmRUeXBlc1JlYWRhYmxlKQotICAgICAgICByZXR1
cm4gTGlzdEhhc2hTZXQ8U3RyaW5nPigpOworICAgICAgICByZXR1cm4gVmVjdG9yPFN0cmluZz4o
KTsKIAogICAgIEFTU0VSVChtX3JlYWRhYmxlRGF0YSk7Ci0gICAgTGlzdEhhc2hTZXQ8U3RyaW5n
PiByZXN1bHQ7CisgICAgVmVjdG9yPFN0cmluZz4gcmVzdWx0OwogICAgIFFTdHJpbmdMaXN0IGZv
cm1hdHMgPSBtX3JlYWRhYmxlRGF0YS0+Zm9ybWF0cygpOwogICAgIGZvciAoaW50IGkgPSAwOyBp
IDwgZm9ybWF0cy5jb3VudCgpOyArK2kpCi0gICAgICAgIHJlc3VsdC5hZGQoZm9ybWF0cy5hdChp
KSk7CisgICAgICAgIHJlc3VsdC5hcHBlbmQoZm9ybWF0cy5hdChpKSk7CiAgICAgcmV0dXJuIHJl
c3VsdDsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vcXQvQ2xpcGJv
YXJkUXQuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3F0L0NsaXBib2FyZFF0LmgKaW5kZXgg
YjgxYzE0OGVhMTQwM2MwMzJlOThjYjY3ZWY5NjZkNTg2OTcxZGIyZS4uNGE5OTUyYWIzZTBjMWIz
NGVkZDIyZjhmMmI3MjIwNTdhYzEwM2E1OCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vcXQvQ2xpcGJvYXJkUXQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9xdC9D
bGlwYm9hcmRRdC5oCkBAIC01Nyw3ICs1Nyw3IEBAIHB1YmxpYzoKICAgICBib29sIHNldERhdGEo
Y29uc3QgU3RyaW5nJiB0eXBlLCBjb25zdCBTdHJpbmcmIGRhdGEpOwogCiAgICAgLy8gZXh0ZW5z
aW9ucyBiZXlvbmQgSUUncyBBUEkKLSAgICB2aXJ0dWFsIExpc3RIYXNoU2V0PFN0cmluZz4gdHlw
ZXMoKSBjb25zdDsKKyAgICB2aXJ0dWFsIFZlY3RvcjxTdHJpbmc+IHR5cGVzKCkgY29uc3Q7CiAg
ICAgdmlydHVhbCBQYXNzUmVmUHRyPEZpbGVMaXN0PiBmaWxlcygpIGNvbnN0OwogCiAgICAgdm9p
ZCBzZXREcmFnSW1hZ2UoQ2FjaGVkSW1hZ2UqLCBjb25zdCBJbnRQb2ludCYpOwpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vd2luL0NsaXBib2FyZFdpbi5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS93aW4vQ2xpcGJvYXJkV2luLmNwcAppbmRleCBjMmY5OTY0OTY5OWI2
NDllZWU2YWVjYmVmZGNkMjNlZjkxMDFjMmUzLi45YzY4YTI5ODU5NDA3YzQ0MGM5YzhmYTdiMDVi
ZWI2NDE0YWY5M2NkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS93aW4vQ2xp
cGJvYXJkV2luLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS93aW4vQ2xpcGJvYXJk
V2luLmNwcApAQCAtNDg0LDI0ICs0ODQsMjQgQEAgYm9vbCBDbGlwYm9hcmRXaW46OnNldERhdGEo
Y29uc3QgU3RyaW5nJiB0eXBlLCBjb25zdCBTdHJpbmcmIGRhdGEpCiAgICAgcmV0dXJuIGZhbHNl
OwogfQogCi1zdGF0aWMgdm9pZCBhZGRNaW1lVHlwZXNGb3JGb3JtYXQoTGlzdEhhc2hTZXQ8U3Ry
aW5nPiYgcmVzdWx0cywgY29uc3QgRk9STUFURVRDJiBmb3JtYXQpCitzdGF0aWMgdm9pZCBhZGRN
aW1lVHlwZXNGb3JGb3JtYXQoVmVjdG9yPFN0cmluZz4mIHJlc3VsdHMsIGNvbnN0IEZPUk1BVEVU
QyYgZm9ybWF0KQogewogICAgIC8vIFVSTCBhbmQgVGV4dCBhcmUgcHJvdmlkZWQgZm9yIGNvbXBh
dGliaWxpdHkgd2l0aCBJRSdzIG1vZGVsCiAgICAgaWYgKGZvcm1hdC5jZkZvcm1hdCA9PSB1cmxG
b3JtYXQoKS0+Y2ZGb3JtYXQgfHwgZm9ybWF0LmNmRm9ybWF0ID09IHVybFdGb3JtYXQoKS0+Y2ZG
b3JtYXQpIHsKLSAgICAgICAgcmVzdWx0cy5hZGQoIlVSTCIpOwotICAgICAgICByZXN1bHRzLmFk
ZCgidGV4dC91cmktbGlzdCIpOworICAgICAgICByZXN1bHRzLmFwcGVuZChBU0NJSUxpdGVyYWwo
IlVSTCIpKTsKKyAgICAgICAgcmVzdWx0cy5hcHBlbmQoQVNDSUlMaXRlcmFsKCJ0ZXh0L3VyaS1s
aXN0IikpOwogICAgIH0KIAogICAgIGlmIChmb3JtYXQuY2ZGb3JtYXQgPT0gcGxhaW5UZXh0V0Zv
cm1hdCgpLT5jZkZvcm1hdCB8fCBmb3JtYXQuY2ZGb3JtYXQgPT0gcGxhaW5UZXh0Rm9ybWF0KCkt
PmNmRm9ybWF0KSB7Ci0gICAgICAgIHJlc3VsdHMuYWRkKCJUZXh0Iik7Ci0gICAgICAgIHJlc3Vs
dHMuYWRkKCJ0ZXh0L3BsYWluIik7CisgICAgICAgIHJlc3VsdHMuYXBwZW5kKEFTQ0lJTGl0ZXJh
bCgiVGV4dCIpKTsKKyAgICAgICAgcmVzdWx0cy5hcHBlbmQoQVNDSUlMaXRlcmFsKCJ0ZXh0L3Bs
YWluIikpOwogICAgIH0KIH0KIAogLy8gZXh0ZW5zaW9ucyBiZXlvbmQgSUUncyBBUEkKLUxpc3RI
YXNoU2V0PFN0cmluZz4gQ2xpcGJvYXJkV2luOjp0eXBlcygpIGNvbnN0CitWZWN0b3I8U3RyaW5n
PiBDbGlwYm9hcmRXaW46OnR5cGVzKCkgY29uc3QKIHsgCi0gICAgTGlzdEhhc2hTZXQ8U3RyaW5n
PiByZXN1bHRzOworICAgIFZlY3RvcjxTdHJpbmc+IHJlc3VsdHM7CiAgICAgaWYgKHBvbGljeSgp
ICE9IENsaXBib2FyZFJlYWRhYmxlICYmIHBvbGljeSgpICE9IENsaXBib2FyZFR5cGVzUmVhZGFi
bGUpCiAgICAgICAgIHJldHVybiByZXN1bHRzOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS93aW4vQ2xpcGJvYXJkV2luLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS93
aW4vQ2xpcGJvYXJkV2luLmgKaW5kZXggMTE0YmQ0MDk2OWM4YjY0NjU3NTZjNDJlZDM4MTg2Nzkw
ZmM4NDQ4Zi4uOGRiMTg2Mjc1OGZhYWFjNmZmMzY1MmZhYTA2NzI1YjFlN2Y0NTQ3YiAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vd2luL0NsaXBib2FyZFdpbi5oCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL3dpbi9DbGlwYm9hcmRXaW4uaApAQCAtNjQsNyArNjQsNyBA
QCBwdWJsaWM6CiAgICAgYm9vbCBzZXREYXRhKGNvbnN0IFN0cmluZyYgdHlwZSwgY29uc3QgU3Ry
aW5nJiBkYXRhKTsKIAogICAgIC8vIGV4dGVuc2lvbnMgYmV5b25kIElFJ3MgQVBJCi0gICAgdmly
dHVhbCBMaXN0SGFzaFNldDxTdHJpbmc+IHR5cGVzKCkgY29uc3Q7CisgICAgdmlydHVhbCBWZWN0
b3I8U3RyaW5nPiB0eXBlcygpIGNvbnN0OwogICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxGaWxlTGlz
dD4gZmlsZXMoKSBjb25zdDsKIAogICAgIHZvaWQgc2V0RHJhZ0ltYWdlKENhY2hlZEltYWdlKiwg
Y29uc3QgSW50UG9pbnQmKTsK
</data>

          </attachment>
      

    </bug>

</bugzilla>