<?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>80696</bug_id>
          
          <creation_ts>2012-03-09 04:33:45 -0800</creation_ts>
          <short_desc>Remove custom bindings for attribute type Array.</short_desc>
          <delta_ts>2012-05-25 15:57:00 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>New Bugs</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>81345</dependson>
    
    <dependson>81705</dependson>
          <blocked>80269</blocked>
    
    <blocked>84929</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Arko Saha">arko</reporter>
          <assigned_to name="Vineet Chaudhary (vineetc)">code.vineet</assigned_to>
          <cc>abarth</cc>
    
    <cc>adamk</cc>
    
    <cc>arv</cc>
    
    <cc>code.vineet</cc>
    
    <cc>dcheng</cc>
    
    <cc>dglazkov</cc>
    
    <cc>eric</cc>
    
    <cc>gustavo</cc>
    
    <cc>haraken</cc>
    
    <cc>japhet</cc>
    
    <cc>levin</cc>
    
    <cc>mitz</cc>
    
    <cc>ojan</cc>
    
    <cc>ossy</cc>
    
    <cc>rniwa</cc>
    
    <cc>sam</cc>
    
    <cc>webkit.review.bot</cc>
    
    <cc>xan.lopez</cc>
    
    <cc>zan</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>574809</commentid>
    <comment_count>0</comment_count>
    <who name="Arko Saha">arko</who>
    <bug_when>2012-03-09 04:33:45 -0800</bug_when>
    <thetext>Whenever we need to do something with Array, we have to write custom bindings. Fix the code generator so that it can handle these Array cases. This issue is came up with bug https://bugs.webkit.org/show_bug.cgi?id=80269.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>574817</commentid>
    <comment_count>1</comment_count>
      <attachid>131028</attachid>
    <who name="Vineet Chaudhary (vineetc)">code.vineet</who>
    <bug_when>2012-03-09 04:48:34 -0800</bug_when>
    <thetext>Created attachment 131028
proposed patch

Uploading primary patch to remove the Custom bindings for Array.
To start with I have tried to remove the custom bindings from Console.idl only. There are few other .idl like ScriptProfileNode, Internals, MessageEvent, Clipboard..
I will update patch if this Approach looks oke.

Please let me know your initial review comments on this.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>574837</commentid>
    <comment_count>2</comment_count>
      <attachid>131028</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-03-09 05:28:33 -0800</bug_when>
    <thetext>Comment on attachment 131028
proposed patch

Attachment 131028 did not pass chromium-ews (chromium-xvfb):
Output: http://queues.webkit.org/results/11894590</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>574862</commentid>
    <comment_count>3</comment_count>
      <attachid>131028</attachid>
    <who name="Gustavo Noronha (kov)">gustavo</who>
    <bug_when>2012-03-09 06:47:45 -0800</bug_when>
    <thetext>Comment on attachment 131028
proposed patch

Attachment 131028 did not pass gtk-ews (gtk):
Output: http://queues.webkit.org/results/11898567</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>574944</commentid>
    <comment_count>4</comment_count>
      <attachid>131028</attachid>
    <who name="Adam Barth">abarth</who>
    <bug_when>2012-03-09 09:24:10 -0800</bug_when>
    <thetext>Comment on attachment 131028
proposed patch

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

&gt; Source/WebCore/bindings/scripts/CodeGeneratorJS.pm:1774
&gt; +                                push(@implContent, &quot;    const Vector&lt;RefPtr&lt;ScriptProfile&gt; &gt; vector = impl-&gt;$implGetterFunctionName();\n\n&quot;);

Why ScriptProfile?  Shouldn&apos;t it depend on the type?  This doesn&apos;t seem right.

Also, is the name &quot;Array&quot; used in the specs?  I thought WebIDL used syntax like DOMString[] that give the type of the array.

&gt; Source/WebCore/page/Console.idl:49
&gt; -        readonly attribute [CustomGetter] Array profiles;
&gt; +        readonly attribute Array profiles;

This change affects JSC and V8 but you&apos;ve only change the CodeGeneratorJS and not CodeGeneratorV8.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>575944</commentid>
    <comment_count>5</comment_count>
    <who name="Vineet Chaudhary (vineetc)">code.vineet</who>
    <bug_when>2012-03-11 22:47:06 -0700</bug_when>
    <thetext>(In reply to comment #4)
Thanks Adam Barh for comments.

&gt; Why ScriptProfile?  Shouldn&apos;t it depend on the type?  This doesn&apos;t seem right.

Can I add ArrayType to get the return types in codegenerator after that for Console.idl it would look like,
     readonly attribute [ArrayType=ScriptProfile] Array profiles;

&gt; Also, is the name &quot;Array&quot; used in the specs?  I thought WebIDL used syntax like DOMString[] that give the type of the array.

According to spec reference http://www.w3.org/TR/WebIDL/#es-array recently syntax for type Array is changed from DOMString[] to Array, So can use name Array.
 
&gt; &gt; Source/WebCore/page/Console.idl:49
&gt; &gt; -        readonly attribute [CustomGetter] Array profiles;
&gt; &gt; +        readonly attribute Array profiles;
&gt; 
&gt; This change affects JSC and V8 but you&apos;ve only change the CodeGeneratorJS and not CodeGeneratorV8.

Yes I need to modify for V8 also need to check for gobject too.
I will updated these once basic implementation for JS works.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>575950</commentid>
    <comment_count>6</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2012-03-11 22:53:45 -0700</bug_when>
    <thetext>&gt; According to spec reference http://www.w3.org/TR/WebIDL/#es-array recently syntax for type Array is changed from DOMString[] to Array, So can use name Array.

Where do you see that?  The link you provided show this as an example:

  readonly attribute unsigned short[] numbers;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>575967</commentid>
    <comment_count>7</comment_count>
    <who name="Vineet Chaudhary (vineetc)">code.vineet</who>
    <bug_when>2012-03-12 00:17:23 -0700</bug_when>
    <thetext>(In reply to comment #6)
&gt; &gt; According to spec reference http://www.w3.org/TR/WebIDL/#es-array recently syntax for type Array is changed from DOMString[] to Array, So can use name Array.
&gt; 
&gt; Where do you see that?  The link you provided show this as an example:
&gt; 
&gt;   readonly attribute unsigned short[] numbers;

Ahh sorry for misunderstanding.
I found the Array type in WebIDL http://www.w3.org/TR/WebIDL/#idl-array

I could not find any example in specs where it uses name Array but still ScriptProfileNode, Internals, MessageEvent, Clipboard all these idls uses name Array so I thought using name Array.

Can you please correct me if I am wrong?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>577142</commentid>
    <comment_count>8</comment_count>
      <attachid>131568</attachid>
    <who name="Vineet Chaudhary (vineetc)">code.vineet</who>
    <bug_when>2012-03-13 00:49:41 -0700</bug_when>
    <thetext>Created attachment 131568
WIP Patch

Changes made to work with V8 too.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>577199</commentid>
    <comment_count>9</comment_count>
      <attachid>131568</attachid>
    <who name="Gustavo Noronha (kov)">gustavo</who>
    <bug_when>2012-03-13 02:58:22 -0700</bug_when>
    <thetext>Comment on attachment 131568
WIP Patch

Attachment 131568 did not pass gtk-ews (gtk):
Output: http://queues.webkit.org/results/11945388</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>578477</commentid>
    <comment_count>10</comment_count>
      <attachid>131568</attachid>
    <who name="Kentaro Hara">haraken</who>
    <bug_when>2012-03-14 09:20:56 -0700</bug_when>
    <thetext>Comment on attachment 131568
WIP Patch

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

&gt; Source/WebCore/ChangeLog:8
&gt; +        No new tests. WIP

Would you please add run-bindings-tests (i.e. WebCore/bindings/scripts/tests/*.idl) so that we can confirm the change that this patch is making?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>578544</commentid>
    <comment_count>11</comment_count>
    <who name="Erik Arvidsson">arv</who>
    <bug_when>2012-03-14 10:37:38 -0700</bug_when>
    <thetext>I find the WebIDL very confusing in this area. For JavaScript bindings we should follow the ECMAScript binding rules (so ignore all the #idl-foo parts). As far as I can tell that means we should use sequence&lt;T&gt; for Arrays. 

http://www.w3.org/TR/WebIDL/#es-sequence

&quot;IDL sequence&lt;T&gt; values are represented by ECMAScript Array values.&quot;

The algorithm to convert an WebIDL sequence to a JS array matches what we want.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>578742</commentid>
    <comment_count>12</comment_count>
      <attachid>131568</attachid>
    <who name="Adam Barth">abarth</who>
    <bug_when>2012-03-14 14:01:20 -0700</bug_when>
    <thetext>Comment on attachment 131568
WIP Patch

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

&gt; Source/WebCore/page/Console.idl:49
&gt; -        readonly attribute [CustomGetter] Array profiles;
&gt; +        readonly attribute [ArrayType=ScriptProfile] Array profiles;

Why not just:

readonly attribute ScriptProfile[] profiles;

?  I think that should match WebIDL syntax better.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>578746</commentid>
    <comment_count>13</comment_count>
    <who name="Erik Arvidsson">arv</who>
    <bug_when>2012-03-14 14:03:00 -0700</bug_when>
    <thetext>(In reply to comment #12)
&gt; (From update of attachment 131568 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=131568&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/page/Console.idl:49
&gt; &gt; -        readonly attribute [CustomGetter] Array profiles;
&gt; &gt; +        readonly attribute [ArrayType=ScriptProfile] Array profiles;
&gt; 
&gt; Why not just:
&gt; 
&gt; readonly attribute ScriptProfile[] profiles;
&gt; 
&gt; ?  I think that should match WebIDL syntax better.

or

readonly attribute sequence&lt;ScriptProfile&gt; profiles;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>578751</commentid>
    <comment_count>14</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2012-03-14 14:07:06 -0700</bug_when>
    <thetext>Looks like the two are slightly different:

http://www.w3.org/TR/WebIDL/#idl-sequence
http://www.w3.org/TR/WebIDL/#idl-array

We should be sure to use the syntax that matches the implementation semantics.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>578759</commentid>
    <comment_count>15</comment_count>
    <who name="Erik Arvidsson">arv</who>
    <bug_when>2012-03-14 14:14:53 -0700</bug_when>
    <thetext>(In reply to comment #14)
&gt; Looks like the two are slightly different:
&gt; 
&gt; http://www.w3.org/TR/WebIDL/#idl-sequence
&gt; http://www.w3.org/TR/WebIDL/#idl-array
&gt; 
&gt; We should be sure to use the syntax that matches the implementation semantics.

Be careful. We want the #es-* for the JS bindings. Not the #idl-*. Based on those our semantics matches sequence&lt;T&gt;.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>579273</commentid>
    <comment_count>16</comment_count>
      <attachid>132017</attachid>
    <who name="Vineet Chaudhary (vineetc)">code.vineet</who>
    <bug_when>2012-03-15 04:31:36 -0700</bug_when>
    <thetext>Created attachment 132017
result of run-bindings-tests

(In reply to comment #10)

&gt; Would you please add run-bindings-tests (i.e. WebCore/bindings/scripts/tests/*.idl) so that we can confirm the change that this patch is making?
Attached result of the run-bindings-tests after adding &quot;readonly attribute [ArrayType=ScriptProfile] Array arrayTypeAttribute&quot; to TestObj.idl</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>579293</commentid>
    <comment_count>17</comment_count>
      <attachid>132024</attachid>
    <who name="Vineet Chaudhary (vineetc)">code.vineet</who>
    <bug_when>2012-03-15 05:16:09 -0700</bug_when>
    <thetext>Created attachment 132024
wip_patch_001

Modified the patch to include results of the run-bindings-tests.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>579344</commentid>
    <comment_count>18</comment_count>
      <attachid>132039</attachid>
    <who name="Vineet Chaudhary (vineetc)">code.vineet</who>
    <bug_when>2012-03-15 07:06:47 -0700</bug_when>
    <thetext>Created attachment 132039
patch_for_review

This patch which fixes the gtk build errors too.
Please let me know your review comments on this. Thanks.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>579686</commentid>
    <comment_count>19</comment_count>
      <attachid>132039</attachid>
    <who name="Adam Barth">abarth</who>
    <bug_when>2012-03-15 13:35:46 -0700</bug_when>
    <thetext>Comment on attachment 132039
patch_for_review

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

&gt; Source/WebCore/bindings/scripts/test/TestObj.idl:48
&gt; +        readonly attribute [ArrayType=ScriptProfile] Array arrayTypeAttribute;

I thought we decided that the proper syntax was Sequence&lt; ScriptProfile&gt; ?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>579687</commentid>
    <comment_count>20</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2012-03-15 13:36:03 -0700</bug_when>
    <thetext>Sequence&lt;ScriptProfile&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>580183</commentid>
    <comment_count>21</comment_count>
    <who name="Vineet Chaudhary (vineetc)">code.vineet</who>
    <bug_when>2012-03-15 23:25:37 -0700</bug_when>
    <thetext>(In reply to comment #20)
&gt; Sequence&lt;ScriptProfile&gt;

ohh sorry Adam Barth..

Is it Sequence&lt;ScriptProfile&gt; or sequence&lt;ScriptProfile&gt; ?

Also in either case we need to modify IDL parser to parse &quot;&lt;&quot; and &quot;&gt;&quot; because currently it looks IDL parser only parse &quot;[&quot; and &quot;]&quot; for attribute types.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>580185</commentid>
    <comment_count>22</comment_count>
    <who name="Kentaro Hara">haraken</who>
    <bug_when>2012-03-15 23:27:14 -0700</bug_when>
    <thetext>(In reply to comment #21)
&gt; Also in either case we need to modify IDL parser to parse &quot;&lt;&quot; and &quot;&gt;&quot; because currently it looks IDL parser only parse &quot;[&quot; and &quot;]&quot; for attribute types.

You can just modify the regular expression in IDLStructure.pm, I think.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>580186</commentid>
    <comment_count>23</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2012-03-15 23:28:05 -0700</bug_when>
    <thetext>&gt; Is it Sequence&lt;ScriptProfile&gt; or sequence&lt;ScriptProfile&gt; ?

You&apos;re right: sequence&lt;T&gt;
http://www.w3.org/TR/WebIDL/#idl-sequence</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>581303</commentid>
    <comment_count>24</comment_count>
      <attachid>132458</attachid>
    <who name="Vineet Chaudhary (vineetc)">code.vineet</who>
    <bug_when>2012-03-17 04:22:11 -0700</bug_when>
    <thetext>Created attachment 132458
patch

using sequence&lt;ScriptProfile&gt; instead of Array.
In this patch it uses same &quot;jsArray&quot; and &quot;V8Array&quot; as IDL sequence&lt;T&gt; values are represented by ECMAScript Array values.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>581308</commentid>
    <comment_count>25</comment_count>
      <attachid>132458</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-03-17 04:48:17 -0700</bug_when>
    <thetext>Comment on attachment 132458
patch

Attachment 132458 did not pass chromium-ews (chromium-xvfb):
Output: http://queues.webkit.org/results/11967819</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>581314</commentid>
    <comment_count>26</comment_count>
      <attachid>132458</attachid>
    <who name="Kentaro Hara">haraken</who>
    <bug_when>2012-03-17 06:38:53 -0700</bug_when>
    <thetext>Comment on attachment 132458
patch

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

&gt; Source/WebCore/bindings/js/JSDOMBinding.h:286
&gt; +        if (vector.isEmpty())
&gt; +            return JSC::jsNull();

Does this mean that if vector contains no items, then null is returned instead of []? Is it correct?

&gt; Source/WebCore/bindings/scripts/CodeGeneratorJS.pm:3008
&gt; +    if ($type eq &quot;sequence&lt;ScriptProfile&gt;&quot;) {
&gt; +        AddToImplIncludes(&quot;&lt;runtime/JSArray.h&gt;&quot;, $conditional);
&gt; +        AddToImplIncludes(&quot;JSScriptProfile.h&quot;, $conditional);
&gt; +        AddToImplIncludes(&quot;ScriptProfile.h&quot;, $conditional);
&gt; +        return &quot;jsArray(exec, $thisValue-&gt;globalObject(), $value)&quot;;
&gt; +    }

Shall we improve this code so that it can support a general array type? In other words, if $type is sequence&lt;X&gt;, then we want to add &lt;runtime/JSArray.h&gt;, JSX.h and X.h.

&gt; Source/WebCore/bindings/scripts/CodeGeneratorV8.pm:3776
&gt; +    if ($type eq &quot;sequence&lt;ScriptProfile&gt;&quot;) {
&gt; +        AddToImplIncludes(&quot;V8ScriptProfile.h&quot;);
&gt; +        AddToImplIncludes(&quot;ScriptProfile.h&quot;);
&gt; +        return &quot;v8Array($value)&quot;;
&gt; +    }

Ditto.

Is V8Array() already defined?

&gt; Source/WebCore/bindings/scripts/test/V8/V8TestObj.cpp:46
&gt; +#include &quot;V8ScriptProfile.h&quot;

Also, #include &quot;V8sequence&lt;ScriptProfile&gt;.h&quot; (appeared below) should be removed from this file.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>581753</commentid>
    <comment_count>27</comment_count>
    <who name="Vineet Chaudhary (vineetc)">code.vineet</who>
    <bug_when>2012-03-19 07:09:12 -0700</bug_when>
    <thetext>(In reply to comment #26)
&gt; &gt; Source/WebCore/bindings/js/JSDOMBinding.h:286
&gt; &gt; +        if (vector.isEmpty())
&gt; &gt; +            return JSC::jsNull();
&gt; 
&gt; Does this mean that if vector contains no items, then null is returned instead of []? Is it correct?
Yes I think it should return jsNull() as custom bindings code also does so. 

&gt; &gt; Source/WebCore/bindings/scripts/CodeGeneratorJS.pm:3008
&gt; &gt; +    if ($type eq &quot;sequence&lt;ScriptProfile&gt;&quot;) {
&gt; &gt; +        AddToImplIncludes(&quot;&lt;runtime/JSArray.h&gt;&quot;, $conditional);
&gt; &gt; +        AddToImplIncludes(&quot;JSScriptProfile.h&quot;, $conditional);
&gt; &gt; +        AddToImplIncludes(&quot;ScriptProfile.h&quot;, $conditional);
&gt; &gt; +        return &quot;jsArray(exec, $thisValue-&gt;globalObject(), $value)&quot;;
&gt; &gt; +    }
&gt; 
&gt; Shall we improve this code so that it can support a general array type? In other words, if $type is sequence&lt;X&gt;, then we want to add &lt;runtime/JSArray.h&gt;, JSX.h and X.h.

Done.
 
&gt; Is V8Array() already defined?

I think that patch misses the V8Binding.h. Now its defined.
 
&gt; &gt; Source/WebCore/bindings/scripts/test/V8/V8TestObj.cpp:46
&gt; &gt; +#include &quot;V8ScriptProfile.h&quot;
&gt; 
&gt; Also, #include &quot;V8sequence&lt;ScriptProfile&gt;.h&quot; (appeared below) should be removed from this file.

Done.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>581754</commentid>
    <comment_count>28</comment_count>
      <attachid>132575</attachid>
    <who name="Vineet Chaudhary (vineetc)">code.vineet</who>
    <bug_when>2012-03-19 07:10:54 -0700</bug_when>
    <thetext>Created attachment 132575
patch

Patch as per above review comments.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>581755</commentid>
    <comment_count>29</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-03-19 07:13:00 -0700</bug_when>
    <thetext>Attachment 132575 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;Source/WebCore/ChangeLog&apos;, u&apos;Source/WebCor...&quot; exit_code: 1
Source/WebCore/bindings/scripts/test/V8/V8TestObj.cpp:234:  Extra space before last semicolon. If this should be an empty statement, use { } instead.  [whitespace/semicolon] [5]
Source/WebCore/bindings/scripts/test/V8/V8TestObj.cpp:1063:  Extra space before )  [whitespace/parens] [2]
Source/WebCore/ChangeLog:4:  Line contains tab character.  [whitespace/tab] [5]
Total errors found: 3 in 9 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>581772</commentid>
    <comment_count>30</comment_count>
    <who name="Vineet Chaudhary (vineetc)">code.vineet</who>
    <bug_when>2012-03-19 07:35:04 -0700</bug_when>
    <thetext>(In reply to comment #29)
&gt; Attachment 132575 [details] did not pass style-queue:
&gt; Source/WebCore/bindings/scripts/test/V8/V8TestObj.cpp:234:  Extra space before last semicolon. If this should be an empty statement, use { } instead.  [whitespace/semicolon] [5]
&gt; Source/WebCore/bindings/scripts/test/V8/V8TestObj.cpp:1063:  Extra space before )  [whitespace/parens] [2]

Patch is failing because I has empty setter function currently. I am working on that planning to fix that in another bug. Is that ok?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>581776</commentid>
    <comment_count>31</comment_count>
      <attachid>132575</attachid>
    <who name="Kentaro Hara">haraken</who>
    <bug_when>2012-03-19 07:37:06 -0700</bug_when>
    <thetext>Comment on attachment 132575
patch

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

&gt; Source/WebCore/bindings/scripts/CodeGeneratorGObject.pm:170
&gt; +    my @attributeType = split(/\W+/, $propType);
&gt; +    if ($attributeType[0] eq &quot;sequence&quot;) {
&gt; +        return 1;
&gt; +    }

I think you want to skip all array types here. Maybe you can add CodeGenerator::GetArrayType($type) to CodeGenerator.pm and use it in all code generators. 

sub GetArrayType {
    my $type = shift;
    return $1 if $type =~ /^sequence&lt;([\w\d_]+)&gt;$/;
    return &quot;&quot;;   
}

&gt; Source/WebCore/bindings/scripts/CodeGeneratorJS.pm:248
&gt; +    my @attributeType = split(/\W+/, $type);

Remove this

&gt; Source/WebCore/bindings/scripts/CodeGeneratorJS.pm:271
&gt; +    } elsif ($attributeType[0] eq &quot;sequence&quot;) {
&gt;      } else {

You can just write

    } elsif (!$codeGenerator-&gt;GetArrayType($type)) {

&gt; Source/WebCore/bindings/scripts/CodeGeneratorJS.pm:2953
&gt; +    my @attributeType = split(/\W+/, $type);
&gt; +    if ($attributeType[0] eq &quot;sequence&quot;) {
&gt; +        return &quot;&quot;;
&gt; +    }

Use GetArrayType($type).

&gt; Source/WebCore/bindings/scripts/CodeGeneratorJS.pm:3015
&gt; +    my @attributeType = split(/\W+/, $type);
&gt; +    if ($attributeType[0] eq &quot;sequence&quot;) {

my $attributeType = $codeGenerator-&gt;GetArrayType($type);
if ($attributeType) {

&gt; Source/WebCore/bindings/scripts/CodeGeneratorV8.pm:929
&gt; +        my @attributeType = split(/\W+/, $returnType);
&gt; +
&gt; +        if ($attributeType[0] eq &quot;sequence&quot;) {

Ditto.

&gt; Source/WebCore/bindings/scripts/CodeGeneratorV8.pm:3572
&gt; +    my @attributeType = split(/\W+/, $type);
&gt; +    if ($attributeType[0] eq &quot;sequence&quot;) {
&gt; +        return &quot;&quot;;
&gt; +    }

Ditto.

&gt; Source/WebCore/bindings/scripts/CodeGeneratorV8.pm:3792
&gt; +    my @attributeType = split(/\W+/, $type);
&gt; +    if ($attributeType[0] eq &quot;sequence&quot;) {
&gt; +        AddToImplIncludes(&quot;V8ScriptProfile.h&quot;);
&gt; +        AddToImplIncludes(&quot;ScriptProfile.h&quot;);
&gt; +        return &quot;v8Array($value)&quot;;
&gt; +    }

Ditto.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>581779</commentid>
    <comment_count>32</comment_count>
    <who name="Kentaro Hara">haraken</who>
    <bug_when>2012-03-19 07:38:36 -0700</bug_when>
    <thetext>(In reply to comment #30)
&gt; (In reply to comment #29)
&gt; &gt; Attachment 132575 [details] [details] did not pass style-queue:
&gt; &gt; Source/WebCore/bindings/scripts/test/V8/V8TestObj.cpp:234:  Extra space before last semicolon. If this should be an empty statement, use { } instead.  [whitespace/semicolon] [5]
&gt; &gt; Source/WebCore/bindings/scripts/test/V8/V8TestObj.cpp:1063:  Extra space before )  [whitespace/parens] [2]
&gt; 
&gt; Patch is failing because I has empty setter function currently. I am working on that planning to fix that in another bug. Is that ok?

OK, auto-generated code is full of style bugs. Maybe you can just ignore it unless it is obvious to fix.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>581785</commentid>
    <comment_count>33</comment_count>
    <who name="Kentaro Hara">haraken</who>
    <bug_when>2012-03-19 07:43:03 -0700</bug_when>
    <thetext>(In reply to comment #27)
&gt; &gt; &gt; Source/WebCore/bindings/js/JSDOMBinding.h:286
&gt; &gt; &gt; +        if (vector.isEmpty())
&gt; &gt; &gt; +            return JSC::jsNull();
&gt; &gt; 
&gt; &gt; Does this mean that if vector contains no items, then null is returned instead of []? Is it correct?
&gt; Yes I think it should return jsNull() as custom bindings code also does so. 

Which custom bindings are you referring to? It seems JSConsoleCustom.cpp has been returning constructArray(exec, globalObject(), list) even for an empty vector, where list is an empty MarkedArgumentBuffer.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>581793</commentid>
    <comment_count>34</comment_count>
    <who name="Vineet Chaudhary (vineetc)">code.vineet</who>
    <bug_when>2012-03-19 07:50:49 -0700</bug_when>
    <thetext>(In reply to comment #33)
&gt; (In reply to comment #27)
&gt; &gt; &gt; &gt; Source/WebCore/bindings/js/JSDOMBinding.h:286
&gt; &gt; &gt; &gt; +        if (vector.isEmpty())
&gt; &gt; &gt; &gt; +            return JSC::jsNull();
&gt; &gt; &gt; 
&gt; &gt; &gt; Does this mean that if vector contains no items, then null is returned instead of []? Is it correct?
&gt; &gt; Yes I think it should return jsNull() as custom bindings code also does so. 
&gt; 
&gt; Which custom bindings are you referring to? It seems JSConsoleCustom.cpp has been returning constructArray(exec, globalObject(), list) even for an empty vector, where list is an empty MarkedArgumentBuffer.

I was refering to Clipboard custom bindings http://trac.webkit.org/browser/trunk/Source/WebCore/bindings/js/JSClipboardCustom.cpp?rev=109182#L57</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>581821</commentid>
    <comment_count>35</comment_count>
    <who name="Daniel Cheng">dcheng</who>
    <bug_when>2012-03-19 08:21:02 -0700</bug_when>
    <thetext>(In reply to comment #34)
&gt; (In reply to comment #33)
&gt; &gt; (In reply to comment #27)
&gt; &gt; &gt; &gt; &gt; Source/WebCore/bindings/js/JSDOMBinding.h:286
&gt; &gt; &gt; &gt; &gt; +        if (vector.isEmpty())
&gt; &gt; &gt; &gt; &gt; +            return JSC::jsNull();
&gt; &gt; &gt; &gt; 
&gt; &gt; &gt; &gt; Does this mean that if vector contains no items, then null is returned instead of []? Is it correct?
&gt; &gt; &gt; Yes I think it should return jsNull() as custom bindings code also does so. 
&gt; &gt; 
&gt; &gt; Which custom bindings are you referring to? It seems JSConsoleCustom.cpp has been returning constructArray(exec, globalObject(), list) even for an empty vector, where list is an empty MarkedArgumentBuffer.
&gt; 
&gt; I was refering to Clipboard custom bindings http://trac.webkit.org/browser/trunk/Source/WebCore/bindings/js/JSClipboardCustom.cpp?rev=109182#L57

I don&apos;t think we want that behavior in Clipboard, since it makes it harder to check if an Array contains a certain value.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>581975</commentid>
    <comment_count>36</comment_count>
      <attachid>132615</attachid>
    <who name="Vineet Chaudhary (vineetc)">code.vineet</who>
    <bug_when>2012-03-19 11:29:29 -0700</bug_when>
    <thetext>Created attachment 132615
updated_patch

Modified patch as per review comments.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>581982</commentid>
    <comment_count>37</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-03-19 11:32:42 -0700</bug_when>
    <thetext>Attachment 132615 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;Source/WebCore/ChangeLog&apos;, u&apos;Source/WebCor...&quot; exit_code: 1
Source/WebCore/bindings/scripts/test/V8/V8TestObj.cpp:234:  Extra space before last semicolon. If this should be an empty statement, use { } instead.  [whitespace/semicolon] [5]
Total errors found: 1 in 10 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>582000</commentid>
    <comment_count>38</comment_count>
      <attachid>132615</attachid>
    <who name="Erik Arvidsson">arv</who>
    <bug_when>2012-03-19 11:45:35 -0700</bug_when>
    <thetext>Comment on attachment 132615
updated_patch

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

&gt; Source/WebCore/bindings/scripts/CodeGeneratorV8.pm:930
&gt; +            AddToImplIncludes(&quot;V8&quot; . $attributeType . &quot;.h&quot;);

Prefer placeholders over string concat

 AddToImplIncludes(&quot;V8${attributeType}.h&quot;);

&gt;&gt; Source/WebCore/bindings/scripts/test/V8/V8TestObj.cpp:234
&gt;&gt; +    sequence&lt;ScriptProfile&gt;* v = ;
&gt; 
&gt; Extra space before last semicolon. If this should be an empty statement, use { } instead.  [whitespace/semicolon] [5]

This is a syntax error. Please fix.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>582538</commentid>
    <comment_count>39</comment_count>
      <attachid>132615</attachid>
    <who name="Kentaro Hara">haraken</who>
    <bug_when>2012-03-19 17:50:56 -0700</bug_when>
    <thetext>Comment on attachment 132615
updated_patch

The patch looks good to me except for arv@&apos;s comments.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>582810</commentid>
    <comment_count>40</comment_count>
      <attachid>132773</attachid>
    <who name="Vineet Chaudhary (vineetc)">code.vineet</who>
    <bug_when>2012-03-20 00:07:38 -0700</bug_when>
    <thetext>Created attachment 132773
updated_patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>582846</commentid>
    <comment_count>41</comment_count>
      <attachid>132773</attachid>
    <who name="Kentaro Hara">haraken</who>
    <bug_when>2012-03-20 01:16:25 -0700</bug_when>
    <thetext>Comment on attachment 132773
updated_patch

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

&gt; Source/WebCore/bindings/js/JSDOMBinding.h:295
&gt; +    Iterable jsValueToNative(JSC::ExecState* exec, JSC::JSValue value)

This should be named toJSArray() for naming consistency.

BTW, what&apos;s the difference between toJSArray() and existing toJSSequence()?

&gt; Source/WebCore/bindings/scripts/CodeGeneratorV8.pm:1112
&gt; +        my @arrayType = split(/\W+/, $nativeType);

Please use GetArrayType()

&gt; Source/WebCore/bindings/scripts/test/JS/JSTestObj.cpp:969
&gt; +    impl-&gt;setSequenceAttr(jsValueToNative(exec, value));

It seems that the argument type is inconsistent with that of V8 generated code. What type is setSequenceAttr() expecting for the first argument?

&gt; Source/WebCore/bindings/scripts/test/V8/V8TestObj.cpp:234
&gt; +    ScriptProfile v = v8ValueToNative(value);

This is wrong. v8ValueToNative() returns Vector.

&gt; Source/WebCore/bindings/v8/V8Binding.h:301
&gt; +    Vector&lt;T&gt; v8ValueToNative(v8::Handle&lt;v8::Value&gt; value)

This should be named toV8Array(), for naming consistency with toInt32(), toFloat(), toWebCoreString(), etc.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>582869</commentid>
    <comment_count>42</comment_count>
      <attachid>132773</attachid>
    <who name="Vineet Chaudhary (vineetc)">code.vineet</who>
    <bug_when>2012-03-20 02:06:18 -0700</bug_when>
    <thetext>Comment on attachment 132773
updated_patch

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

&gt;&gt; Source/WebCore/bindings/js/JSDOMBinding.h:295
&gt;&gt; +    Iterable jsValueToNative(JSC::ExecState* exec, JSC::JSValue value)
&gt; 
&gt; This should be named toJSArray() for naming consistency.
&gt; 
&gt; BTW, what&apos;s the difference between toJSArray() and existing toJSSequence()?

As per the comments toJSSequence() which returns JDObject, Validates that the passed object is a sequence type per section 4.1.13 of the WebIDL spec.
Used in jsUnsignedLongArrayToVector() a simillar function.
Do we need same here?

&gt;&gt; Source/WebCore/bindings/scripts/CodeGeneratorV8.pm:1112
&gt;&gt; +        my @arrayType = split(/\W+/, $nativeType);
&gt; 
&gt; Please use GetArrayType()

Actually I tried GetArrayType() but $nativeType is  sequence&lt;ScriptProfile&gt;*  so GetArrayType() returns &quot;&quot; all the time.

&gt;&gt; Source/WebCore/bindings/scripts/test/JS/JSTestObj.cpp:969
&gt;&gt; +    impl-&gt;setSequenceAttr(jsValueToNative(exec, value));
&gt; 
&gt; It seems that the argument type is inconsistent with that of V8 generated code. What type is setSequenceAttr() expecting for the first argument?

I didn&apos;t got this. setSequenceAttr() first argument should be of type Vector isn&apos;t it? Can you please correct?

&gt;&gt; Source/WebCore/bindings/scripts/test/V8/V8TestObj.cpp:234
&gt;&gt; +    ScriptProfile v = v8ValueToNative(value);
&gt; 
&gt; This is wrong. v8ValueToNative() returns Vector.

Ohh should be Vector&lt;RefPtr&lt;ScriptProfile&gt; &gt; v = toV8Array(value);

&gt;&gt; Source/WebCore/bindings/v8/V8Binding.h:301
&gt;&gt; +    Vector&lt;T&gt; v8ValueToNative(v8::Handle&lt;v8::Value&gt; value)
&gt; 
&gt; This should be named toV8Array(), for naming consistency with toInt32(), toFloat(), toWebCoreString(), etc.

Will do.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>582917</commentid>
    <comment_count>43</comment_count>
      <attachid>132792</attachid>
    <who name="Vineet Chaudhary (vineetc)">code.vineet</who>
    <bug_when>2012-03-20 04:14:42 -0700</bug_when>
    <thetext>Created attachment 132792
another_attempt</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>582944</commentid>
    <comment_count>44</comment_count>
      <attachid>132792</attachid>
    <who name="Kentaro Hara">haraken</who>
    <bug_when>2012-03-20 04:47:40 -0700</bug_when>
    <thetext>Comment on attachment 132792
another_attempt

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

Getting close!

&gt; Source/WebCore/bindings/js/JSDOMBinding.h:296
&gt; +    {

Here, would you add the check that checks if |value| is an array type (just like toV8Array() does)?

&gt; Source/WebCore/bindings/js/JSDOMBinding.h:300
&gt; +            String indexedValue = ustringToString(array-&gt;getIndex(i).toString(exec)-&gt;value(exec));

I am not sure if this code is correct. Where did you copy the code from?

&gt; Source/WebCore/bindings/scripts/CodeGeneratorJS.pm:3012
&gt; +    my $attributeType = $codeGenerator-&gt;GetArrayType($type);

Nit: Let&apos;s use $arrayType instead of $attributeType, for consistency.

&gt; Source/WebCore/bindings/scripts/CodeGeneratorV8.pm:927
&gt; +        my $attributeType = $codeGenerator-&gt;GetArrayType($returnType);

$arrayType

&gt; Source/WebCore/bindings/scripts/CodeGeneratorV8.pm:928
&gt; +

Nit: This empty line is not necessary.

&gt; Source/WebCore/bindings/scripts/CodeGeneratorV8.pm:3790
&gt; +    my $attributeType = $codeGenerator-&gt;GetArrayType($type);

$arrayType

&gt; Source/WebCore/bindings/v8/V8Binding.h:303
&gt; +        v8::Local&lt;v8::Value&gt; v8Value(v8::Local&lt;v8::Value&gt;::New(value));

|v8Value| would not be necessary.

&gt; Source/WebCore/bindings/v8/V8Binding.h:304
&gt; +        if (!v8Value-&gt;IsArray())

You can just write &apos;if (!value-&gt;IsArray())&apos;

&gt; Source/WebCore/bindings/v8/V8Binding.h:308
&gt; +        v8::Local&lt;v8::Array&gt; array = v8::Local&lt;v8::Array&gt;::Cast(v8Value);

You can just write &apos;Cast(value)&apos;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>582964</commentid>
    <comment_count>45</comment_count>
    <who name="Vineet Chaudhary (vineetc)">code.vineet</who>
    <bug_when>2012-03-20 05:05:55 -0700</bug_when>
    <thetext>(In reply to comment #44)
&gt; (From update of attachment 132792 [details])
&gt; 
&gt; Getting close!
Thanks you for quick review. :)
 
&gt; &gt; Source/WebCore/bindings/js/JSDOMBinding.h:296
&gt; &gt; +    {
&gt; Here, would you add the check that checks if |value| is an array type (just like toV8Array() does)?

will do.

&gt; &gt; Source/WebCore/bindings/js/JSDOMBinding.h:300
&gt; &gt; +            String indexedValue = ustringToString(array-&gt;getIndex(i).toString(exec)-&gt;value(exec));
&gt; 
&gt; I am not sure if this code is correct. Where did you copy the code from?

I copied this code from  http://trac.webkit.org/browser/trunk/Source/WebCore/testing/js/JSInternalsCustom.cpp?rev=105698#L59 

Rest all Nits: will do.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>582976</commentid>
    <comment_count>46</comment_count>
    <who name="Kentaro Hara">haraken</who>
    <bug_when>2012-03-20 05:23:51 -0700</bug_when>
    <thetext>(In reply to comment #45)
&gt; &gt; &gt; Source/WebCore/bindings/js/JSDOMBinding.h:300
&gt; &gt; &gt; +            String indexedValue = ustringToString(array-&gt;getIndex(i).toString(exec)-&gt;value(exec));
&gt; &gt; 
&gt; &gt; I am not sure if this code is correct. Where did you copy the code from?
&gt; 
&gt; I copied this code from  http://trac.webkit.org/browser/trunk/Source/WebCore/testing/js/JSInternalsCustom.cpp?rev=105698#L59 

It looks OK. Thanks for the clarification.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>582993</commentid>
    <comment_count>47</comment_count>
      <attachid>132792</attachid>
    <who name="Kentaro Hara">haraken</who>
    <bug_when>2012-03-20 06:01:38 -0700</bug_when>
    <thetext>Comment on attachment 132792
another_attempt

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

&gt; Source/WebCore/bindings/js/JSDOMBinding.h:295
&gt; +    Iterable toJSArray(JSC::ExecState* exec, JSC::JSValue value)

Nit: Sorry for my previous comment, this is not a JS array. Shall we call it toNativeArray()?

&gt; Source/WebCore/bindings/v8/V8Binding.h:301
&gt; +    Vector&lt;T&gt; toV8Array(v8::Handle&lt;v8::Value&gt; value)

toNativeArray()</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>582999</commentid>
    <comment_count>48</comment_count>
    <who name="Vineet Chaudhary (vineetc)">code.vineet</who>
    <bug_when>2012-03-20 06:16:35 -0700</bug_when>
    <thetext>(In reply to comment #47)
&gt; (From update of attachment 132792 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=132792&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/bindings/js/JSDOMBinding.h:295
&gt; &gt; +    Iterable toJSArray(JSC::ExecState* exec, JSC::JSValue value)
&gt; 
&gt; Nit: Sorry for my previous comment, this is not a JS array. Shall we call it toNativeArray()?
&gt; 
&gt; &gt; Source/WebCore/bindings/v8/V8Binding.h:301
&gt; &gt; +    Vector&lt;T&gt; toV8Array(v8::Handle&lt;v8::Value&gt; value)
&gt; 
&gt; toNativeArray()

Oke will do that but should it be toNativeArray() or jsToNativeArray() and v8ToNativeArray()</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>583002</commentid>
    <comment_count>49</comment_count>
    <who name="Kentaro Hara">haraken</who>
    <bug_when>2012-03-20 06:19:15 -0700</bug_when>
    <thetext>(In reply to comment #48)
&gt; (In reply to comment #47)
&gt; Oke will do that but should it be toNativeArray() or jsToNativeArray() and v8ToNativeArray()

Both sound good, but toNativeArray() might be better, for consistency with toInt32(), toWebCoreString() etc.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>583021</commentid>
    <comment_count>50</comment_count>
      <attachid>132817</attachid>
    <who name="Vineet Chaudhary (vineetc)">code.vineet</who>
    <bug_when>2012-03-20 06:46:59 -0700</bug_when>
    <thetext>Created attachment 132817
another_attempt_01

1) Using toNativeArray()
2) Added isJSArray() check.

&gt;|v8Value| would not be necessary.
&gt; Source/WebCore/bindings/v8/V8Binding.h:304
&gt; +        if (!v8Value-&gt;IsArray())
&gt;You can just write &apos;if (!value-&gt;IsArray())&apos;
&gt; Source/WebCore/bindings/v8/V8Binding.h:308
&gt; +        v8::Local&lt;v8::Array&gt; array = v8::Local&lt;v8::Array&gt;::Cast(v8Value);
&gt;You can just write &apos;Cast(value)
I tried this but getting compile errors : like 

Source/WebCore/bindings/v8/V8Binding.h: In function ‘WTF::Vector&lt;T&gt; WebCore::toV8Array(v8::Handle&lt;v8::Value&gt;)’:
Source/WebCore/bindings/v8/V8Binding.h:307:70: error: no matching function for call to ‘v8::Local&lt;v8::Array&gt;::Cast(v8::Handle&lt;v8::Value&gt;&amp;)’
Source/WebCore/bindings/v8/V8Binding.h:307:70: note: candidate is:
Source/WebKit/chromium/v8/include/v8.h:277:45: note: template&lt;class S&gt; static v8::Local v8::Local::Cast(v8::Local&lt;S&gt;) [with S = S, T = v8::Array]

So still using v8::Local&lt;v8::Array&gt;::Cast(v8Value).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>583035</commentid>
    <comment_count>51</comment_count>
      <attachid>132817</attachid>
    <who name="Kentaro Hara">haraken</who>
    <bug_when>2012-03-20 07:10:44 -0700</bug_when>
    <thetext>Comment on attachment 132817
another_attempt_01

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

&gt; Source/WebCore/bindings/js/JSDOMBinding.h:299
&gt; +            throwError(exec, createSyntaxError(exec, &quot;Expected Array&quot;));

This exception won&apos;t be necessary. We should align the behavior between JSC and V8, and should not throw exception unless it is defined in the spec.

&gt; Source/WebCore/bindings/js/JSDOMBinding.h:300
&gt; +            return JSC::jsNull();

Shouldn&apos;t we return an empty Vector?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>583102</commentid>
    <comment_count>52</comment_count>
    <who name="Vineet Chaudhary (vineetc)">code.vineet</who>
    <bug_when>2012-03-20 08:39:36 -0700</bug_when>
    <thetext>(In reply to comment #51)
&gt; (From update of attachment 132817 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=132817&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/bindings/js/JSDOMBinding.h:299
&gt; &gt; +            throwError(exec, createSyntaxError(exec, &quot;Expected Array&quot;));
&gt; 
&gt; This exception won&apos;t be necessary. We should align the behavior between JSC and V8, and should not throw exception unless it is defined in the spec.
&gt; 
&gt; &gt; Source/WebCore/bindings/js/JSDOMBinding.h:300
&gt; &gt; +            return JSC::jsNull();
&gt; 
&gt; Shouldn&apos;t we return an empty Vector?

Currently only Internals.idl has the getters and setters rest all are having readonly attribute. This behaviour matches with http://trac.webkit.org/browser/trunk/Source/WebCore/testing/js/JSInternalsCustom.cpp?rev=105698#L51 .

Also sorry for lack of understanding but I am not sure how to return empty vector for JS. 
Should it be return Iterable&lt;&gt; or something?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>583107</commentid>
    <comment_count>53</comment_count>
    <who name="Kentaro Hara">haraken</who>
    <bug_when>2012-03-20 08:45:41 -0700</bug_when>
    <thetext>(In reply to comment #52)
&gt; &gt; &gt; Source/WebCore/bindings/js/JSDOMBinding.h:299
&gt; &gt; &gt; +            throwError(exec, createSyntaxError(exec, &quot;Expected Array&quot;));
&gt; &gt; 
&gt; &gt; This exception won&apos;t be necessary. We should align the behavior between JSC and V8, and should not throw exception unless it is defined in the spec.

&gt; Currently only Internals.idl has the getters and setters rest all are having readonly attribute. This behaviour matches with http://trac.webkit.org/browser/trunk/Source/WebCore/testing/js/JSInternalsCustom.cpp?rev=105698#L51 .

Aligning the behavior between JSC and V8 for the same attribute is more important. Let&apos;s remove throwError().

&gt; &gt; &gt; Source/WebCore/bindings/js/JSDOMBinding.h:300
&gt; &gt; &gt; +            return JSC::jsNull();
&gt; &gt; 
&gt; &gt; Shouldn&apos;t we return an empty Vector?
&gt; 
&gt; Also sorry for lack of understanding but I am not sure how to return empty vector for JS. 
&gt; Should it be return Iterable&lt;&gt; or something?

By the way, why do you need to use Iterable? Can&apos;t we use Vector&lt;T&gt; (instead of Iterable) in the same way as V8Binding.h? imp-&gt;setSequenceAttr() will return Vector, and thus using Vector&lt;T&gt; in JSDOMBinding.h would make sense.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>583202</commentid>
    <comment_count>54</comment_count>
      <attachid>132850</attachid>
    <who name="Vineet Chaudhary (vineetc)">code.vineet</who>
    <bug_when>2012-03-20 10:31:30 -0700</bug_when>
    <thetext>Created attachment 132850
patch_for_review

Done!!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>583231</commentid>
    <comment_count>55</comment_count>
      <attachid>132850</attachid>
    <who name="Kentaro Hara">haraken</who>
    <bug_when>2012-03-20 10:58:08 -0700</bug_when>
    <thetext>Comment on attachment 132850
patch_for_review

Thank you very much for the patch. I hope that other custom arrays will be replaced with sequence&lt;T&gt; soon. Great work!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>583270</commentid>
    <comment_count>56</comment_count>
    <who name="Vineet Chaudhary (vineetc)">code.vineet</who>
    <bug_when>2012-03-20 11:24:58 -0700</bug_when>
    <thetext>(In reply to comment #55)
&gt; (From update of attachment 132850 [details])
&gt; Thank you very much for the patch. I hope that other custom arrays will be replaced with sequence&lt;T&gt; soon. Great work!

Thanks to you for your kind help.
I have already working fixes to follow soon for other bindings.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>583277</commentid>
    <comment_count>57</comment_count>
      <attachid>132850</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-03-20 11:27:08 -0700</bug_when>
    <thetext>Comment on attachment 132850
patch_for_review

Clearing flags on attachment: 132850

Committed r111416: &lt;http://trac.webkit.org/changeset/111416&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>583279</commentid>
    <comment_count>58</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-03-20 11:27:17 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>583482</commentid>
    <comment_count>59</comment_count>
    <who name="Csaba Osztrogonác">ossy</who>
    <bug_when>2012-03-20 14:52:57 -0700</bug_when>
    <thetext>Reopen, because it broke a test on GTK and on Qt:
--- /home/slave/webkitgtk/gtk-linux-64-release/build/layout-test-results/fast/dom/prototype-inheritance-2-expected.txt 
+++ /home/slave/webkitgtk/gtk-linux-64-release/build/layout-test-results/fast/dom/prototype-inheritance-2-actual.txt 
@@ -3,7 +3,7 @@
 On success, you will see a series of &quot;PASS&quot; messages, followed by &quot;TEST COMPLETE&quot;.
 
 
-PASS Array from inner.document.forms.testForm.0.ownerDocument.defaultView.console.profiles
+FAIL Array from inner.document.forms.testForm.0.ownerDocument.defaultView.console.profiles
 PASS Attr from inner.document.forms.testForm.0.attributes.0
 PASS AttrConstructor from inner.document.forms.testForm.0.attributes.0.constructor
 PASS AttrPrototype from inner.document.forms.testForm.0.attributes.0.__proto__</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>583512</commentid>
    <comment_count>60</comment_count>
    <who name="">mitz</who>
    <bug_when>2012-03-20 15:31:32 -0700</bug_when>
    <thetext>(In reply to comment #59)
&gt; Reopen, because it broke a test on GTK and on Qt:

fast/dom/prototype-inheritance-2.html is also failing in Mac WebKit2. Filed bug 81705.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>588762</commentid>
    <comment_count>61</comment_count>
    <who name="Vineet Chaudhary (vineetc)">code.vineet</who>
    <bug_when>2012-03-27 04:45:47 -0700</bug_when>
    <thetext>(In reply to comment #59)
&gt; Reopen, because it broke a test on GTK and on Qt:
&gt; --- /home/slave/webkitgtk/gtk-linux-64-release/build/layout-test-results/fast/dom/prototype-inheritance-2-expected.txt 
&gt; +++ /home/slave/webkitgtk/gtk-linux-64-release/build/layout-test-results/fast/dom/prototype-inheritance-2-actual.txt 
&gt; @@ -3,7 +3,7 @@
&gt;  On success, you will see a series of &quot;PASS&quot; messages, followed by &quot;TEST COMPLETE&quot;.
&gt; 
&gt; 
&gt; -PASS Array from inner.document.forms.testForm.0.ownerDocument.defaultView.console.profiles
&gt; +FAIL Array from inner.document.forms.testForm.0.ownerDocument.defaultView.console.profiles
&gt;  PASS Attr from inner.document.forms.testForm.0.attributes.0
&gt;  PASS AttrConstructor from inner.document.forms.testForm.0.attributes.0.constructor
&gt;  PASS AttrPrototype from inner.document.forms.testForm.0.attributes.0.__proto__

Can we close this issue as Bug 81705 is fixed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>608767</commentid>
    <comment_count>62</comment_count>
    <who name="Vineet Chaudhary (vineetc)">code.vineet</who>
    <bug_when>2012-04-24 09:43:52 -0700</bug_when>
    <thetext>Hi All,

As per the comments https://bugs.webkit.org/show_bug.cgi?id=84540#c25

&gt;As I commented, it seems wrong to support sequences in attributes:
&gt;http://www.w3.org/TR/WebIDL/#idl-sequence

&gt;&quot;Sequences must not be used as the type of an attribute, constant or exception field.&quot;

So using the sequence&lt;T&gt; for the attributes seems wrong here. I think we have some confusion here between using sequence&lt;T&gt; and Array[].
Experts can you please clarify on this as we have already removed few custom bindings using sequence&lt;T&gt;.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>609067</commentid>
    <comment_count>63</comment_count>
    <who name="Erik Arvidsson">arv</who>
    <bug_when>2012-04-24 14:26:34 -0700</bug_when>
    <thetext>Where are we trying to use sequence as an attribute?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>609075</commentid>
    <comment_count>64</comment_count>
    <who name="Kentaro Hara">haraken</who>
    <bug_when>2012-04-24 14:32:43 -0700</bug_when>
    <thetext>(In reply to comment #63)
&gt; Where are we trying to use sequence as an attribute?

page/Console.idl:        readonly attribute sequence&lt;ScriptProfile&gt; profiles;
testing/Internals.idl:        attribute sequence&lt;String&gt; userPreferredLanguages;

As far as I understand,

- We wanted T[] or sequence&lt;T&gt; for attributes, methods, etc. In this bug, there was a discussion about which syntax we should use.
- We decided to use sequence&lt;T&gt;.
- But we found that sequence&lt;T&gt; is not allowed for attributes in the Web IDL spec.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>609077</commentid>
    <comment_count>65</comment_count>
    <who name="Kentaro Hara">haraken</who>
    <bug_when>2012-04-24 14:33:38 -0700</bug_when>
    <thetext>Reopening the discussion</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>609085</commentid>
    <comment_count>66</comment_count>
    <who name="Erik Arvidsson">arv</who>
    <bug_when>2012-04-24 14:37:52 -0700</bug_when>
    <thetext>I always found sequence&lt;T&gt; and T[] confusing...

The idea behind sequence&lt;T&gt; is that it returns a new Array every time which would cause the following to fail

console.profiles === console.profiles

However, for T[], it requires that the data structure is shared and that changes done in JS are somehow propagated into the DOM and vice versa. Not really what we want.

One way around this might be to use T[] but ensure that the object is frozen. That way there is no need to propagate changes back and forth because no changes are allowed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>609097</commentid>
    <comment_count>67</comment_count>
    <who name="Kentaro Hara">haraken</who>
    <bug_when>2012-04-24 14:50:24 -0700</bug_when>
    <thetext>(In reply to comment #66)
&gt; I always found sequence&lt;T&gt; and T[] confusing...
&gt; 
&gt; The idea behind sequence&lt;T&gt; is that it returns a new Array every time which would cause the following to fail
&gt; 
&gt; console.profiles === console.profiles
&gt; 
&gt; However, for T[], it requires that the data structure is shared and that changes done in JS are somehow propagated into the DOM and vice versa. Not really what we want.
&gt; 
&gt; One way around this might be to use T[] but ensure that the object is frozen. That way there is no need to propagate changes back and forth because no changes are allowed.

Thanks arv! I&apos;d like to confirm my understanding:

- attribute sequence&lt;T&gt; t; should not be allowed in an IDL.
- attribute T[] t; should be allowed in an IDL. It returns a new Array every time.
- T[] method(); should be allowed in an IDL. It will return a shared Array.
- sequence&lt;T&gt; method(); should be allowed in an IDL. It will return a new Array every time.
- void method(T[] t); should be allowed in an IDL. The passed Array will be shared.
- void method(sequence&lt;T&gt; t); should be allowed in an IDL. The passed Array is not shared.

Correct?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>609102</commentid>
    <comment_count>68</comment_count>
    <who name="Erik Arvidsson">arv</who>
    <bug_when>2012-04-24 14:55:45 -0700</bug_when>
    <thetext>I think that is correct except for:

(In reply to comment #67)
&gt; - attribute T[] t; should be allowed in an IDL. It returns a new Array every time.

I think this should return the same shared Array every time.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>609112</commentid>
    <comment_count>69</comment_count>
    <who name="Kentaro Hara">haraken</who>
    <bug_when>2012-04-24 15:02:42 -0700</bug_when>
    <thetext>(In reply to comment #68)
&gt; &gt; - attribute T[] t; should be allowed in an IDL. It returns a new Array every time.
&gt; 
&gt; I think this should return the same shared Array every time.

Makes sense. Then what we need now would be to change

    page/Console.idl:        readonly attribute sequence&lt;ScriptProfile&gt; profiles;
    testing/Internals.idl:        attribute sequence&lt;String&gt; userPreferredLanguages;
    inspector/ScriptProfileNode.idl:        readonly attribute sequence&lt;ScriptProfileNode&gt; children;

to

    page/Console.idl:        readonly attribute ScriptProfile[] profiles;
    testing/Internals.idl:        attribute String[] userPreferredLanguages;
    inspector/ScriptProfileNode.idl:        readonly attribute ScriptProfileNode[] children;

BTW, the only place where we are using sequence&lt;T&gt; is

    dom/WebKitMutationObserver.idl:        sequence&lt;MutationRecord&gt; takeRecords();

Is this expected?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>609132</commentid>
    <comment_count>70</comment_count>
    <who name="Erik Arvidsson">arv</who>
    <bug_when>2012-04-24 15:18:16 -0700</bug_when>
    <thetext>(In reply to comment #69)

&gt; Is this expected?

Sounds right to me.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>609467</commentid>
    <comment_count>71</comment_count>
    <who name="Vineet Chaudhary (vineetc)">code.vineet</who>
    <bug_when>2012-04-24 22:43:02 -0700</bug_when>
    <thetext>(In reply to comment #69)
&gt; (In reply to comment #68)
&gt; &gt; &gt; - attribute T[] t; should be allowed in an IDL. It returns a new Array every time.
&gt; &gt; 
&gt; &gt; I think this should return the same shared Array every time.
&gt; 
&gt; Makes sense. Then what we need now would be to change
&gt; 
&gt;     page/Console.idl:        readonly attribute sequence&lt;ScriptProfile&gt; profiles;
&gt;     testing/Internals.idl:        attribute sequence&lt;String&gt; userPreferredLanguages;
&gt;     inspector/ScriptProfileNode.idl:        readonly attribute sequence&lt;ScriptProfileNode&gt; children;
&gt; 
&gt; to
&gt; 
&gt;     page/Console.idl:        readonly attribute ScriptProfile[] profiles;
&gt;     testing/Internals.idl:        attribute String[] userPreferredLanguages;
&gt;     inspector/ScriptProfileNode.idl:        readonly attribute ScriptProfileNode[] children;
&gt; 
&gt; BTW, the only place where we are using sequence&lt;T&gt; is
&gt; 
&gt;     dom/WebKitMutationObserver.idl:        sequence&lt;MutationRecord&gt; takeRecords();
&gt; 
&gt; Is this expected?

Thanks haraken/arv for clarifying on this. I hope we can use the current code with little modifications for T[].

Should we reopen previous bugs (Console, Internals, ScriptProfileNode) for new implementation or log new one?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>609469</commentid>
    <comment_count>72</comment_count>
    <who name="Kentaro Hara">haraken</who>
    <bug_when>2012-04-24 22:48:53 -0700</bug_when>
    <thetext>It seems that we&apos;ve reached the consensus that we should use T[] for attributes. 

&gt; Thanks haraken/arv for clarifying on this. I hope we can use the current code with little modifications for T[].

I hope so!

&gt; Should we reopen previous bugs (Console, Internals, ScriptProfileNode) for new implementation or log new one?

Both are OK. (But I might prefer creating a new one with a title like &quot;REGRESSION(rXXXXX): sequence&lt;T&gt; in YYYY.idl should be T[]&quot;. Personally I like one patch per one bug.)

Just a clarification: our objective would be to fix CodeGeneratorV8.pm and then make the followings work:

    page/Console.idl:        readonly attribute ScriptProfile[] profiles;
    testing/Internals.idl:        attribute String[] userPreferredLanguages;
    inspector/ScriptProfileNode.idl:        readonly attribute ScriptProfileNode[] children;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>609477</commentid>
    <comment_count>73</comment_count>
    <who name="David Levin">levin</who>
    <bug_when>2012-04-24 23:05:19 -0700</bug_when>
    <thetext>(In reply to comment #72)
&gt; It seems that we&apos;ve reached the consensus that we should use T[] for attributes. 
&gt; 
&gt; &gt; Thanks haraken/arv for clarifying on this. I hope we can use the current code with little modifications for T[].
&gt; 
&gt; I hope so!
&gt; 
&gt; &gt; Should we reopen previous bugs (Console, Internals, ScriptProfileNode) for new implementation or log new one?
&gt; 
&gt; Both are OK. (But I might prefer creating a new one with a title like &quot;REGRESSION(rXXXXX): sequence&lt;T&gt; in YYYY.idl should be T[]&quot;. Personally I like one patch per one bug.)

Agreed. New bugs are generally preferred (because otherwise it gets confusing about what comments apply to the patch in progress).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>609766</commentid>
    <comment_count>74</comment_count>
    <who name="Vineet Chaudhary (vineetc)">code.vineet</who>
    <bug_when>2012-04-25 08:14:05 -0700</bug_when>
    <thetext>(In reply to comment #72)

&gt; Just a clarification: our objective would be to fix CodeGeneratorV8.pm and then make the followings work:

haraken I didn&apos;t got &quot;to fix CodeGeneratorV8.pm&quot;?

I have logged separate bug to address this regression Bug 84863.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>609787</commentid>
    <comment_count>75</comment_count>
    <who name="Kentaro Hara">haraken</who>
    <bug_when>2012-04-25 08:30:50 -0700</bug_when>
    <thetext>(In reply to comment #74)
&gt; &gt; Just a clarification: our objective would be to fix CodeGeneratorV8.pm and then make the followings work:
&gt; 
&gt; haraken I didn&apos;t got &quot;to fix CodeGeneratorV8.pm&quot;?

Sorry, you&apos;re right.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>633950</commentid>
    <comment_count>76</comment_count>
    <who name="Zan Dobersek">zan</who>
    <bug_when>2012-05-25 08:25:10 -0700</bug_when>
    <thetext>Given the patch landed and the regression was fixed in a separate bug, should this bug be closed?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>634384</commentid>
    <comment_count>77</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2012-05-25 15:57:00 -0700</bug_when>
    <thetext>Yes.  One patch per bug.  I suspect we haven&apos;t removed all the custom bindings for Arrays yet, but we can file more bugs about removing more custom bindings.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>131028</attachid>
            <date>2012-03-09 04:48:34 -0800</date>
            <delta_ts>2012-03-13 00:49:41 -0700</delta_ts>
            <desc>proposed patch</desc>
            <filename>test.diff</filename>
            <type>text/plain</type>
            <size>5892</size>
            <attacher name="Vineet Chaudhary (vineetc)">code.vineet</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDExMDI4OCkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDIwIEBACisyMDEyLTAzLTA5ICBWaW5lZXQg
Q2hhdWRoYXJ5ICA8dmluZWV0LmNoYXVkaGFyeUBtb3Rvcm9sYS5jb20+CisKKyAgICAgICAgaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTgwNjk2CisgICAgICAgIFJlbW92
ZSBjdXN0b20gYmluZGluZ3MgZm9yIGF0dHJpYnV0ZSB0eXBlIEFycmF5LgorCisgICAgICAgIFJl
dmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIE5vIG5ldyB0ZXN0cy4KKworICAg
ICAgICAqIGJpbmRpbmdzL2pzL0pTQ29uc29sZUN1c3RvbS5jcHA6CisgICAgICAgIChXZWJDb3Jl
KTogUmVtb3ZlZCBjdXN0b20gY2FsbCBwcm9maWxlcygpLgorICAgICAgICAqIGJpbmRpbmdzL3Nj
cmlwdHMvQ29kZUdlbmVyYXRvci5wbTogQWRkZWQgIkFycmF5IiB0byBwcmltaXRpdmUgdHlwZS4K
KyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0b3JKUy5wbTogCisgICAgICAg
IChHZW5lcmF0ZUltcGxlbWVudGF0aW9uKTogTW9kaWZpZWQgY29kZWdlbmVyYXRvciB0byBnZW5l
cmF0ZSBjb2RlIGZvciBDb25zb2xlLiAKKyAgICAgICAgKE5hdGl2ZVRvSlNWYWx1ZSk6CisgICAg
ICAgICogcGFnZS9Db25zb2xlLmlkbDogUmVtb3ZlZCBbQ3VzdG9tXSBmb3IgcHJvZmlsZXMuCisK
IDIwMTItMDMtMDkgIFpvbHRhbiBIZXJjemVnICA8emhlcmN6ZWdAd2Via2l0Lm9yZz4KIAogICAg
ICAgICBBZGQgU1ZHUmVuZGVyaW5nQ29udGV4dCBhbmQgbW92ZSB0aGVyZSB0aGUgY29udGV4dCBy
ZWxhdGVkIGNvZGUgZnJvbSBTVkdSZW5kZXJTdXBwb3J0CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy9qcy9KU0NvbnNvbGVDdXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL2pzL0pTQ29uc29sZUN1c3RvbS5jcHAJKHJldmlzaW9uIDExMDA1MikKKysr
IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTQ29uc29sZUN1c3RvbS5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTMzLDcgKzMzLDYgQEAKICNpbmNsdWRlICJKU1NjcmlwdFByb2ZpbGUuaCIKICNp
bmNsdWRlICJTY3JpcHRDYWxsU3RhY2suaCIKICNpbmNsdWRlICJTY3JpcHRDYWxsU3RhY2tGYWN0
b3J5LmgiCi0jaW5jbHVkZSAiU2NyaXB0UHJvZmlsZS5oIgogI2luY2x1ZGUgPHJ1bnRpbWUvSlNB
cnJheS5oPgogI2luY2x1ZGUgPHd0Zi9Pd25QdHIuaD4KIApAQCAtNDEsMjAgKzQwLDYgQEAgdXNp
bmcgbmFtZXNwYWNlIEpTQzsKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi10eXBlZGVmIFZlY3Rv
cjxSZWZQdHI8U2NyaXB0UHJvZmlsZT4gPiBQcm9maWxlc0FycmF5OwotCi1KU1ZhbHVlIEpTQ29u
c29sZTo6cHJvZmlsZXMoRXhlY1N0YXRlKiBleGVjKSBjb25zdAotewotICAgIGNvbnN0IFByb2Zp
bGVzQXJyYXkmIHByb2ZpbGVzID0gaW1wbCgpLT5wcm9maWxlcygpOwotICAgIE1hcmtlZEFyZ3Vt
ZW50QnVmZmVyIGxpc3Q7Ci0KLSAgICBQcm9maWxlc0FycmF5Ojpjb25zdF9pdGVyYXRvciBlbmQg
PSBwcm9maWxlcy5lbmQoKTsKLSAgICBmb3IgKFByb2ZpbGVzQXJyYXk6OmNvbnN0X2l0ZXJhdG9y
IGl0ZXIgPSBwcm9maWxlcy5iZWdpbigpOyBpdGVyICE9IGVuZDsgKytpdGVyKQotICAgICAgICBs
aXN0LmFwcGVuZCh0b0pTKGV4ZWMsIGdsb2JhbE9iamVjdCgpLCBpdGVyLT5nZXQoKSkpOwotCi0g
ICAgcmV0dXJuIGNvbnN0cnVjdEFycmF5KGV4ZWMsIGdsb2JhbE9iamVjdCgpLCBsaXN0KTsKLX0K
LQogSlNWYWx1ZSBKU0NvbnNvbGU6OnByb2ZpbGUoRXhlY1N0YXRlKiBleGVjKQogewogICAgIFJl
ZlB0cjxTY3JpcHRDYWxsU3RhY2s+IGNhbGxTdGFjayhjcmVhdGVTY3JpcHRDYWxsU3RhY2soZXhl
YywgMSkpOwpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy9Db2RlR2VuZXJh
dG9yLnBtCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvQ29k
ZUdlbmVyYXRvci5wbQkocmV2aXNpb24gMTEwMDUyKQorKysgU291cmNlL1dlYkNvcmUvYmluZGlu
Z3Mvc2NyaXB0cy9Db2RlR2VuZXJhdG9yLnBtCSh3b3JraW5nIGNvcHkpCkBAIC00OCw3ICs0OCw3
IEBAIG15ICVudW1lcmljVHlwZUhhc2ggPSAoImludCIgPT4gMSwgInNob3IKICAgICAgICAgICAg
ICAgICAgICAgICAgInVuc2lnbmVkIGxvbmciID0+IDEsICJ1bnNpZ25lZCBsb25nIGxvbmciID0+
IDEsCiAgICAgICAgICAgICAgICAgICAgICAgICJmbG9hdCIgPT4gMSwgImRvdWJsZSIgPT4gMSk7
CiAKLW15ICVwcmltaXRpdmVUeXBlSGFzaCA9ICggImJvb2xlYW4iID0+IDEsICJ2b2lkIiA9PiAx
LCAiRGF0ZSIgPT4gMSk7CitteSAlcHJpbWl0aXZlVHlwZUhhc2ggPSAoICJib29sZWFuIiA9PiAx
LCAidm9pZCIgPT4gMSwgIkRhdGUiID0+IDEsICJBcnJheSIgPT4gMSk7CiAKIG15ICVzdHJpbmdU
eXBlSGFzaCA9ICgiRE9NU3RyaW5nIiA9PiAxLCAiQXRvbWljU3RyaW5nIiA9PiAxKTsKIApJbmRl
eDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy9Db2RlR2VuZXJhdG9ySlMucG0KPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy9Db2RlR2VuZXJhdG9y
SlMucG0JKHJldmlzaW9uIDExMDA1MikKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Njcmlw
dHMvQ29kZUdlbmVyYXRvckpTLnBtCSh3b3JraW5nIGNvcHkpCkBAIC0xNzY3LDYgKzE3NjcsMTkg
QEAgc3ViIEdlbmVyYXRlSW1wbGVtZW50YXRpb24KICAgICAgICAgICAgICAgICAgICAgICAgIGlm
ICgkY29kZUdlbmVyYXRvci0+SXNTVkdBbmltYXRlZFR5cGUoJHR5cGUpKSB7CiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgUmVmUHRyPCR0eXBlPiBv
YmogPSAkanNUeXBlO1xuIik7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHVzaChAaW1w
bENvbnRlbnQsICIgICAgSlNWYWx1ZSByZXN1bHQgPSAgdG9KUyhleGVjLCBjYXN0ZWRUaGlzLT5n
bG9iYWxPYmplY3QoKSwgb2JqLmdldCgpKTtcbiIpOworICAgICAgICAgICAgICAgICAgICAgICAg
fSBlbHNpZiAoJHR5cGUgZXEgIkFycmF5IikgeworICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGlmICgkaW1wbENsYXNzTmFtZSBlcSAiQ29uc29sZSIpIHsKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgQWRkVG9JbXBsSW5jbHVkZXMoIkpTU2NyaXB0UHJvZmlsZS5oIiwgJGF0dHJp
YnV0ZS0+c2lnbmF0dXJlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPnsiQ29uZGl0aW9uYWwifSk7Cisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFkZFRvSW1wbEluY2x1ZGVzKCJTY3JpcHRQ
cm9maWxlLmgiLCAkYXR0cmlidXRlLT5zaWduYXR1cmUtPmV4dGVuZGVkQXR0cmlidXRlcy0+eyJD
b25kaXRpb25hbCJ9KTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHVzaChAaW1w
bENvbnRlbnQsICIgICAgY29uc3QgVmVjdG9yPFJlZlB0cjxTY3JpcHRQcm9maWxlPiA+IHZlY3Rv
ciA9IGltcGwtPiRpbXBsR2V0dGVyRnVuY3Rpb25OYW1lKCk7XG5cbiIpOworICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBwdXNoKEBpbXBs
Q29udGVudCwgIiAgICBpZiAodmVjdG9yLmlzRW1wdHkoKSlcbiIpOworICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgICAgICByZXR1cm4ganNOdWxsKCk7
XG5cbiIpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAi
ICAgIE1hcmtlZEFyZ3VtZW50QnVmZmVyIGxpc3Q7XG4iKTsKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHZl
Y3Rvci5zaXplKCk7IGkrKylcbiIpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHB1c2go
QGltcGxDb250ZW50LCAiICAgICAgICBsaXN0LmFwcGVuZCh0b0pTKGV4ZWMsIGNhc3RlZFRoaXMt
Pmdsb2JhbE9iamVjdCgpLCAodmVjdG9yKVtpXS5nZXQoKSkpO1xuXG4iKTsKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICBKU1ZhbHVlIHJlc3VsdCA9
IGNvbnN0cnVjdEFycmF5KGV4ZWMsIGNhc3RlZFRoaXMtPmdsb2JhbE9iamVjdCgpLCBsaXN0KTtc
biIpOworCiAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgIEpTVmFsdWUgcmVzdWx0ID0gJGpz
VHlwZTtcbiIpOwogICAgICAgICAgICAgICAgICAgICAgICAgfQpAQCAtMjc2NCw2ICsyNzc3LDcg
QEAgc3ViIEdldE5hdGl2ZVR5cGVGcm9tU2lnbmF0dXJlCiB9CiAKIG15ICVuYXRpdmVUeXBlID0g
KAorICAgICJBcnJheSIgPT4gIkFycmF5KiIsCiAgICAgIkNvbXBhcmVIb3ciID0+ICJSYW5nZTo6
Q29tcGFyZUhvdyIsCiAgICAgIkRPTVN0cmluZyIgPT4gImNvbnN0IFN0cmluZyYiLAogICAgICMg
RklYTUU6IEFkZCBwcm9wZXIgc3VwcG9ydCBmb3IgVFtdLCBUW10/LCBzZXF1ZW5jZTxUPgpAQCAt
Mjk0OSw2ICsyOTYzLDEwIEBAIHN1YiBOYXRpdmVUb0pTVmFsdWUKICAgICAgICAgcmV0dXJuICJq
c051bWJlcihzdGQ6Om1heCgwLCAiIC4gJHZhbHVlIC4gIikpIjsKICAgICB9CiAKKyAgICBpZiAo
JHR5cGUgZXEgIkFycmF5IikgeworICAgICAgICBBZGRUb0ltcGxJbmNsdWRlcygiPHJ1bnRpbWUv
SlNBcnJheS5oPiIsICRjb25kaXRpb25hbCk7CisgICAgfQorCiAgICAgaWYgKCRjb2RlR2VuZXJh
dG9yLT5Jc1ByaW1pdGl2ZVR5cGUoJHR5cGUpIG9yICR0eXBlIGVxICJET01UaW1lU3RhbXAiKSB7
CiAgICAgICAgIHJldHVybiAianNOdW1iZXIoJHZhbHVlKSI7CiAgICAgfQpJbmRleDogU291cmNl
L1dlYkNvcmUvcGFnZS9Db25zb2xlLmlkbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9w
YWdlL0NvbnNvbGUuaWRsCShyZXZpc2lvbiAxMTAwNTIpCisrKyBTb3VyY2UvV2ViQ29yZS9wYWdl
L0NvbnNvbGUuaWRsCSh3b3JraW5nIGNvcHkpCkBAIC00Niw3ICs0Niw3IEBAIG1vZHVsZSB3aW5k
b3cgewogICAgICAgICBbQ2FsbFdpdGg9U2NyaXB0QXJndW1lbnRzfENhbGxTdGFja10gdm9pZCBt
YXJrVGltZWxpbmUoKTsKIAogI2lmIGRlZmluZWQoRU5BQkxFX0pBVkFTQ1JJUFRfREVCVUdHRVIp
ICYmIEVOQUJMRV9KQVZBU0NSSVBUX0RFQlVHR0VSCi0gICAgICAgIHJlYWRvbmx5IGF0dHJpYnV0
ZSBbQ3VzdG9tR2V0dGVyXSBBcnJheSBwcm9maWxlczsKKyAgICAgICAgcmVhZG9ubHkgYXR0cmli
dXRlIEFycmF5IHByb2ZpbGVzOwogICAgICAgICBbQ3VzdG9tXSB2b2lkIHByb2ZpbGUoaW4gRE9N
U3RyaW5nIHRpdGxlKTsKICAgICAgICAgW0N1c3RvbV0gdm9pZCBwcm9maWxlRW5kKGluIERPTVN0
cmluZyB0aXRsZSk7CiAjZW5kaWYK
</data>
<flag name="review"
          id="134222"
          type_id="1"
          status="-"
          setter="abarth"
    />
    <flag name="commit-queue"
          id="134205"
          type_id="3"
          status="-"
          setter="webkit.review.bot"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>131568</attachid>
            <date>2012-03-13 00:49:41 -0700</date>
            <delta_ts>2012-03-15 07:06:47 -0700</delta_ts>
            <desc>WIP Patch</desc>
            <filename>wip_test_002.diff</filename>
            <type>text/plain</type>
            <size>11054</size>
            <attacher name="Vineet Chaudhary (vineetc)">code.vineet</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDExMDU0MykKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDMwIEBACisyMDEyLTAzLTEzICBWaW5lZXQg
Q2hhdWRoYXJ5ICA8cmdmNzQ4QG1vdG9yb2xhLmNvbT4KKworICAgICAgICBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9ODA2OTYKKyAgICAgICAgUmVtb3ZlIGN1c3RvbSBi
aW5kaW5ncyBmb3IgYXR0cmlidXRlIHR5cGUgQXJyYXkuCisKKyAgICAgICAgUmV2aWV3ZWQgYnkg
Tk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgTm8gbmV3IHRlc3RzLiBXSVAKKworICAgICAgICAq
IGJpbmRpbmdzL2pzL0pTQ29uc29sZUN1c3RvbS5jcHA6IFJlbW92ZWQgY3VzdG9tIGNhbGwgcHJv
ZmlsZXMoKS4KKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU0RPTUJpbmRpbmcuaDogQWRkZWQgdGVt
cGxhdGUganNBcnJheSgpIGltcGxlbWVudGF0aW9uLgorICAgICAgICAoV2ViQ29yZSk6CisgICAg
ICAgIChXZWJDb3JlOjpqc0FycmF5KToKKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL0NvZGVH
ZW5lcmF0b3IucG06IEFkZGVkICJBcnJheSIgdG8gcHJpbWl0aXZlIHR5cGUuCisgICAgICAgICog
YmluZGluZ3Mvc2NyaXB0cy9Db2RlR2VuZXJhdG9ySlMucG06IE1vZGlmaWVkIGNvZGVnZW5lcmF0
b3IgdG8gZ2VuZXJhdGUgY29kZSBmb3IgQ29uc29sZS4KKyAgICAgICAgKE5hdGl2ZVRvSlNWYWx1
ZSk6CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy9Db2RlR2VuZXJhdG9yVjgucG06IE1vZGlm
aWVkIGNvZGVnZW5lcmF0b3IgdG8gZ2VuZXJhdGUgY29kZSBmb3IgQ29uc29sZS4KKyAgICAgICAg
KElzUmVmUHRyVHlwZSk6CisgICAgICAgIChHZXROYXRpdmVUeXBlKToKKyAgICAgICAgKE5hdGl2
ZVRvSlNWYWx1ZSk6CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy9JRExBdHRyaWJ1dGVzLnR4
dDogQWRkZWQgYXR0cmlidXRlIHR5cGUgIkFycmF5VHlwZSIKKyAgICAgICAgKiBiaW5kaW5ncy92
OC9WOEJpbmRpbmcuaDogQWRkZWQgdGVtcGxhdGUgdjhBcnJheSgpIGltcGxlbWVudGF0aW9uLgor
ICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChXZWJDb3JlOjp2OEFycmF5KToKKyAgICAgICAg
KiBiaW5kaW5ncy92OC9jdXN0b20vVjhDb25zb2xlQ3VzdG9tLmNwcDogUmVtb3ZlZCBjdXN0b20g
Y2FsbCBwcm9maWxlcygpLgorICAgICAgICAqIHBhZ2UvQ29uc29sZS5pZGw6IFJlbW92ZWQgW0N1
c3RvbV0gZm9yIHByb2ZpbGVzLgorCiAyMDEyLTAzLTEyICBNYXR0IEZhbGtlbmhhZ2VuICA8ZmFs
a2VuQGNocm9taXVtLm9yZz4KIAogICAgICAgICBTd2l0Y2ggQ2hyb21pdW0gZnJvbSBMb2NhbGVU
b1NjcmlwdE1hcHBpbmdJQ1UuY3BwIHRvIExvY2FsZVRvU2NyaXB0TWFwcGluZ0RlZmF1bHQuY3Bw
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0NvbnNvbGVDdXN0b20uY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTQ29uc29sZUN1c3RvbS5j
cHAJKHJldmlzaW9uIDExMDUzOSkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTQ29u
c29sZUN1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMzLDcgKzMzLDYgQEAKICNpbmNsdWRl
ICJKU1NjcmlwdFByb2ZpbGUuaCIKICNpbmNsdWRlICJTY3JpcHRDYWxsU3RhY2suaCIKICNpbmNs
dWRlICJTY3JpcHRDYWxsU3RhY2tGYWN0b3J5LmgiCi0jaW5jbHVkZSAiU2NyaXB0UHJvZmlsZS5o
IgogI2luY2x1ZGUgPHJ1bnRpbWUvSlNBcnJheS5oPgogI2luY2x1ZGUgPHd0Zi9Pd25QdHIuaD4K
IApAQCAtNDEsMjAgKzQwLDYgQEAgdXNpbmcgbmFtZXNwYWNlIEpTQzsKIAogbmFtZXNwYWNlIFdl
YkNvcmUgewogCi10eXBlZGVmIFZlY3RvcjxSZWZQdHI8U2NyaXB0UHJvZmlsZT4gPiBQcm9maWxl
c0FycmF5OwotCi1KU1ZhbHVlIEpTQ29uc29sZTo6cHJvZmlsZXMoRXhlY1N0YXRlKiBleGVjKSBj
b25zdAotewotICAgIGNvbnN0IFByb2ZpbGVzQXJyYXkmIHByb2ZpbGVzID0gaW1wbCgpLT5wcm9m
aWxlcygpOwotICAgIE1hcmtlZEFyZ3VtZW50QnVmZmVyIGxpc3Q7Ci0KLSAgICBQcm9maWxlc0Fy
cmF5Ojpjb25zdF9pdGVyYXRvciBlbmQgPSBwcm9maWxlcy5lbmQoKTsKLSAgICBmb3IgKFByb2Zp
bGVzQXJyYXk6OmNvbnN0X2l0ZXJhdG9yIGl0ZXIgPSBwcm9maWxlcy5iZWdpbigpOyBpdGVyICE9
IGVuZDsgKytpdGVyKQotICAgICAgICBsaXN0LmFwcGVuZCh0b0pTKGV4ZWMsIGdsb2JhbE9iamVj
dCgpLCBpdGVyLT5nZXQoKSkpOwotCi0gICAgcmV0dXJuIGNvbnN0cnVjdEFycmF5KGV4ZWMsIGds
b2JhbE9iamVjdCgpLCBsaXN0KTsKLX0KLQogSlNWYWx1ZSBKU0NvbnNvbGU6OnByb2ZpbGUoRXhl
Y1N0YXRlKiBleGVjKQogewogICAgIFJlZlB0cjxTY3JpcHRDYWxsU3RhY2s+IGNhbGxTdGFjayhj
cmVhdGVTY3JpcHRDYWxsU3RhY2soZXhlYywgMSkpOwpJbmRleDogU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3MvanMvSlNET01CaW5kaW5nLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3MvanMvSlNET01CaW5kaW5nLmgJKHJldmlzaW9uIDExMDUzOSkKKysrIFNvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL2pzL0pTRE9NQmluZGluZy5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNSw2ICsz
NSw3IEBACiAjaW5jbHVkZSAiU3R5bGVkRWxlbWVudC5oIgogI2luY2x1ZGUgPGhlYXAvV2Vhay5o
PgogI2luY2x1ZGUgPHJ1bnRpbWUvRnVuY3Rpb25Qcm90b3R5cGUuaD4KKyNpbmNsdWRlIDxydW50
aW1lL0pTQXJyYXkuaD4KICNpbmNsdWRlIDxydW50aW1lL0xvb2t1cC5oPgogI2luY2x1ZGUgPHJ1
bnRpbWUvT2JqZWN0UHJvdG90eXBlLmg+CiAjaW5jbHVkZSA8d3RmL0ZvcndhcmQuaD4KQEAgLTI3
OCw2ICsyNzksMTggQEAgZW51bSBQYXJhbWV0ZXJEZWZhdWx0UG9saWN5IHsKICAgICAgICAgcmV0
dXJuIHRvSlMoZXhlYywgZ2xvYmFsT2JqZWN0LCBwdHIuZ2V0KCkpOwogICAgIH0KIAorICAgIHRl
bXBsYXRlPHR5cGVuYW1lIEl0ZXJhYmxlPgorICAgIEpTQzo6SlNWYWx1ZSBqc0FycmF5KEpTQzo6
RXhlY1N0YXRlKiBleGVjLCBKU0RPTUdsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBjb25zdCBJ
dGVyYWJsZSYgdmVjdG9yKQorICAgIHsKKyAgICAgICAgaWYgKHZlY3Rvci5pc0VtcHR5KCkpCisg
ICAgICAgICAgICByZXR1cm4gSlNDOjpqc051bGwoKTsKKyAgICAgICAgSlNDOjpNYXJrZWRBcmd1
bWVudEJ1ZmZlciBsaXN0OworICAgICAgICB0eXBlbmFtZSBJdGVyYWJsZTo6Y29uc3RfaXRlcmF0
b3IgZW5kID0gdmVjdG9yLmVuZCgpOworICAgICAgICBmb3IgKHR5cGVuYW1lIEl0ZXJhYmxlOjpj
b25zdF9pdGVyYXRvciBpdGVyID0gdmVjdG9yLmJlZ2luKCk7IGl0ZXIgIT0gZW5kOyArK2l0ZXIp
CisgICAgICAgICAgICBsaXN0LmFwcGVuZCh0b0pTKGV4ZWMsIGdsb2JhbE9iamVjdCwgV1RGOjpn
ZXRQdHIoKml0ZXIpKSk7CisgICAgICAgIHJldHVybiBKU0M6OmNvbnN0cnVjdEFycmF5KGV4ZWMs
IGxpc3QpOworICAgICB9CisKICAgICAvLyBWYWxpZGF0ZXMgdGhhdCB0aGUgcGFzc2VkIG9iamVj
dCBpcyBhIHNlcXVlbmNlIHR5cGUgcGVyIHNlY3Rpb24gNC4xLjEzIG9mIHRoZSBXZWJJREwgc3Bl
Yy4KICAgICBKU0M6OkpTT2JqZWN0KiB0b0pTU2VxdWVuY2UoSlNDOjpFeGVjU3RhdGUqLCBKU0M6
OkpTVmFsdWUsIHVuc2lnbmVkJik7CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Nj
cmlwdHMvQ29kZUdlbmVyYXRvci5wbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0b3IucG0JKHJldmlzaW9uIDExMDUzOSkKKysrIFNvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvQ29kZUdlbmVyYXRvci5wbQkod29ya2luZyBjb3B5
KQpAQCAtNDgsNyArNDgsNyBAQCBteSAlbnVtZXJpY1R5cGVIYXNoID0gKCJpbnQiID0+IDEsICJz
aG9yCiAgICAgICAgICAgICAgICAgICAgICAgICJ1bnNpZ25lZCBsb25nIiA9PiAxLCAidW5zaWdu
ZWQgbG9uZyBsb25nIiA9PiAxLAogICAgICAgICAgICAgICAgICAgICAgICAiZmxvYXQiID0+IDEs
ICJkb3VibGUiID0+IDEpOwogCi1teSAlcHJpbWl0aXZlVHlwZUhhc2ggPSAoICJib29sZWFuIiA9
PiAxLCAidm9pZCIgPT4gMSwgIkRhdGUiID0+IDEpOworbXkgJXByaW1pdGl2ZVR5cGVIYXNoID0g
KCAiYm9vbGVhbiIgPT4gMSwgInZvaWQiID0+IDEsICJEYXRlIiA9PiAxLCAiQXJyYXkiID0+IDEp
OwogCiBteSAlc3RyaW5nVHlwZUhhc2ggPSAoIkRPTVN0cmluZyIgPT4gMSwgIkF0b21pY1N0cmlu
ZyIgPT4gMSk7CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvQ29kZUdl
bmVyYXRvckpTLnBtCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Njcmlw
dHMvQ29kZUdlbmVyYXRvckpTLnBtCShyZXZpc2lvbiAxMTA1MzkpCisrKyBTb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0b3JKUy5wbQkod29ya2luZyBjb3B5KQpAQCAt
Mjc4MSw2ICsyNzgxLDcgQEAgc3ViIEdldE5hdGl2ZVR5cGVGcm9tU2lnbmF0dXJlCiB9CiAKIG15
ICVuYXRpdmVUeXBlID0gKAorICAgICJBcnJheSIgPT4gIkFycmF5KiIsCiAgICAgIkNvbXBhcmVI
b3ciID0+ICJSYW5nZTo6Q29tcGFyZUhvdyIsCiAgICAgIkRPTVN0cmluZyIgPT4gImNvbnN0IFN0
cmluZyYiLAogICAgICMgRklYTUU6IEFkZCBwcm9wZXIgc3VwcG9ydCBmb3IgVFtdLCBUW10/LCBz
ZXF1ZW5jZTxUPgpAQCAtMjk3Myw2ICsyOTc0LDE2IEBAIHN1YiBOYXRpdmVUb0pTVmFsdWUKICAg
ICAgICAgcmV0dXJuICJqc051bWJlcihzdGQ6Om1heCgwLCAiIC4gJHZhbHVlIC4gIikpIjsKICAg
ICB9CiAKKyAgICBpZiAoJHR5cGUgZXEgIkFycmF5IikgeworICAgICAgICBBZGRUb0ltcGxJbmNs
dWRlcygiPHJ1bnRpbWUvSlNBcnJheS5oPiIsICRjb25kaXRpb25hbCk7CisgICAgICAgIG15ICRh
cnJheVR5cGUgPSAkc2lnbmF0dXJlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPnsiQXJyYXlUeXBlIn07
CisgICAgICAgIGlmICgkYXJyYXlUeXBlIGFuZCAkYXJyYXlUeXBlIG5lICJTY29wZUNoYWluIikg
eworICAgICAgICAgICAgQWRkVG9JbXBsSW5jbHVkZXMoIkpTJGFycmF5VHlwZS5oIiwgJGNvbmRp
dGlvbmFsKTsKKyAgICAgICAgICAgIEFkZFRvSW1wbEluY2x1ZGVzKCIkYXJyYXlUeXBlLmgiLCAk
Y29uZGl0aW9uYWwpOworICAgICAgICB9CisgICAgICAgIHJldHVybiAianNBcnJheShleGVjLCAk
dGhpc1ZhbHVlLT5nbG9iYWxPYmplY3QoKSwgJHZhbHVlKSI7CisgICAgfQorCiAgICAgaWYgKCRj
b2RlR2VuZXJhdG9yLT5Jc1ByaW1pdGl2ZVR5cGUoJHR5cGUpIG9yICR0eXBlIGVxICJET01UaW1l
U3RhbXAiKSB7CiAgICAgICAgIHJldHVybiAianNOdW1iZXIoJHZhbHVlKSI7CiAgICAgfQpJbmRl
eDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy9Db2RlR2VuZXJhdG9yVjgucG0KPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy9Db2RlR2VuZXJhdG9y
VjgucG0JKHJldmlzaW9uIDExMDUzOSkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Njcmlw
dHMvQ29kZUdlbmVyYXRvclY4LnBtCSh3b3JraW5nIGNvcHkpCkBAIC0zMzA1LDYgKzMzMDUsNyBA
QCBzdWIgSXNSZWZQdHJUeXBlCiB7CiAgICAgbXkgJHR5cGUgPSBzaGlmdDsKIAorICAgIHJldHVy
biAwIGlmICR0eXBlIGVxICJBcnJheSI7CiAgICAgcmV0dXJuIDAgaWYgJHR5cGUgZXEgImJvb2xl
YW4iOwogICAgIHJldHVybiAwIGlmICR0eXBlIGVxICJmbG9hdCI7CiAgICAgcmV0dXJuIDAgaWYg
JHR5cGUgZXEgImludCI7CkBAIC0zMzQwLDYgKzMzNDEsNyBAQCBzdWIgR2V0TmF0aXZlVHlwZQog
ICAgICAgICByZXR1cm4gJHR5cGU7CiAgICAgfQogCisgICAgcmV0dXJuICJBcnJheSIgaWYgJHR5
cGUgZXEgIkFycmF5IjsKICAgICByZXR1cm4gIlY4UGFyYW1ldGVyIiBpZiAoJHR5cGUgZXEgIkRP
TVN0cmluZyIgb3IgJHR5cGUgZXEgIkRPTVVzZXJEYXRhIikgYW5kICRpc1BhcmFtZXRlcjsKICAg
ICByZXR1cm4gImludCIgaWYgJHR5cGUgZXEgImludCI7CiAgICAgcmV0dXJuICJpbnQiIGlmICR0
eXBlIGVxICJzaG9ydCIgb3IgJHR5cGUgZXEgInVuc2lnbmVkIHNob3J0IjsKQEAgLTM1ODQsNiAr
MzU4Niw3IEBAIHN1YiBSZXF1aXJlc0N1c3RvbVNpZ25hdHVyZQogCiAjIEZJWE1FOiBTb3J0IHRo
aXMgYXJyYXkuCiBteSAlbm9uX3dyYXBwZXJfdHlwZXMgPSAoCisgICAgJ0FycmF5JyA9PiAxLAog
ICAgICdmbG9hdCcgPT4gMSwKICAgICAnZG91YmxlJyA9PiAxLAogICAgICdpbnQnID0+IDEsCkBA
IC0zNjgxLDYgKzM2ODQsMTUgQEAgc3ViIE5hdGl2ZVRvSlNWYWx1ZQogICAgIHJldHVybiAidjg6
OkludGVnZXI6Ok5ldygkdmFsdWUpIiBpZiAkbmF0aXZlVHlwZSBlcSAiaW50IjsKICAgICByZXR1
cm4gInY4OjpJbnRlZ2VyOjpOZXdGcm9tVW5zaWduZWQoJHZhbHVlKSIgaWYgJG5hdGl2ZVR5cGUg
ZXEgInVuc2lnbmVkIjsKIAorICAgIGlmICgkdHlwZSBlcSAiQXJyYXkiKSB7CisgICAgICAgIG15
ICRhcnJheVR5cGUgPSAkc2lnbmF0dXJlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPnsiQXJyYXlUeXBl
In07CisgICAgICAgIGlmICgkYXJyYXlUeXBlIGFuZCAkYXJyYXlUeXBlIG5lICJTY29wZUNoYWlu
IikgeworICAgICAgICAgICAgQWRkVG9JbXBsSW5jbHVkZXMoIlY4JGFycmF5VHlwZS5oIik7Cisg
ICAgICAgICAgICBBZGRUb0ltcGxJbmNsdWRlcygiJGFycmF5VHlwZS5oIik7CisgICAgICAgIH0K
KyAgICAgICAgcmV0dXJuICJ2OEFycmF5KCR2YWx1ZSkiOworICAgIH0KKwogICAgIHJldHVybiAi
djhEYXRlT3JOdWxsKCR2YWx1ZSkiIGlmICR0eXBlIGVxICJEYXRlIjsKICAgICAjIGxvbmcgbG9u
ZyBhbmQgdW5zaWduZWQgbG9uZyBsb25nIGFyZSBub3QgcmVwcmVzZW50YWJsZSBpbiBFQ01BU2Ny
aXB0LgogICAgIHJldHVybiAidjg6Ok51bWJlcjo6TmV3KHN0YXRpY19jYXN0PGRvdWJsZT4oJHZh
bHVlKSkiIGlmICR0eXBlIGVxICJsb25nIGxvbmciIG9yICR0eXBlIGVxICJ1bnNpZ25lZCBsb25n
IGxvbmciIG9yICR0eXBlIGVxICJET01UaW1lU3RhbXAiOwpJbmRleDogU291cmNlL1dlYkNvcmUv
YmluZGluZ3Mvc2NyaXB0cy9JRExBdHRyaWJ1dGVzLnR4dAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL0lETEF0dHJpYnV0ZXMudHh0CShyZXZpc2lvbiAxMTA1
MzkpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL0lETEF0dHJpYnV0ZXMudHh0
CSh3b3JraW5nIGNvcHkpCkBAIC0xOCw2ICsxOCw3IEBACiAjICAgICAgIGUuZy4gW0FUVFI9SU5E
RVhFRF9EQVRBQkFTRV0sIFtBVFRSPWRlbGV0ZUZ1bmN0aW9uXS4KICMKIAorQXJyYXlUeXBlPSoK
IEFjdGl2ZURPTU9iamVjdAogQ1BQUHVyZUludGVyZmFjZQogQ2FjaGVkQXR0cmlidXRlCkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9WOEJpbmRpbmcuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9WOEJpbmRpbmcuaAkocmV2aXNpb24gMTEwNTM5KQor
KysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvVjhCaW5kaW5nLmgJKHdvcmtpbmcgY29weSkK
QEAgLTI4Niw2ICsyODYsMTkgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICByZXR1cm4g
djhFeHRlcm5hbFN0cmluZyhzdHJpbmcpOwogICAgIH0KIAorICAgIHRlbXBsYXRlPHR5cGVuYW1l
IEl0ZXJhYmxlPgorICAgIHY4OjpIYW5kbGU8djg6OlZhbHVlPiB2OEFycmF5KGNvbnN0IEl0ZXJh
YmxlJiB2ZWN0b3IpCisgICAgeworICAgICAgICBpZiAodmVjdG9yLmlzRW1wdHkoKSkKKyAgICAg
ICAgICAgIHJldHVybiB2ODo6TnVsbCgpOworICAgICAgICB2ODo6TG9jYWw8djg6OkFycmF5PiBy
ZXN1bHQgPSB2ODo6QXJyYXk6Ok5ldyh2ZWN0b3Iuc2l6ZSgpKTsKKyAgICAgICAgaW50IGluZGV4
ID0gMDsKKyAgICAgICAgdHlwZW5hbWUgSXRlcmFibGU6OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IHZl
Y3Rvci5lbmQoKTsKKyAgICAgICAgZm9yICh0eXBlbmFtZSBJdGVyYWJsZTo6Y29uc3RfaXRlcmF0
b3IgaXRlciA9IHZlY3Rvci5iZWdpbigpOyBpdGVyICE9IGVuZDsgKytpdGVyKQorICAgICAgICAg
ICAgcmVzdWx0LT5TZXQodjg6OkludGVnZXI6Ok5ldyhpbmRleCsrKSwgdG9WOChXVEY6OmdldFB0
cigqaXRlcikpKTsKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9CisKICAgICAvLyBFbmFi
bGVzIGNhY2hpbmcgdjggd3JhcHBlcnMgY3JlYXRlZCBmb3IgV1RGOjpTdHJpbmdJbXBsLiAgQ3Vy
cmVudGx5IHRoaXMgY2FjaGUgcmVxdWlyZXMKICAgICAvLyBhbGwgdGhlIGNhbGxzIChib3RoIHRv
IGNvbnZlcnQgV1RGOjpTdHJpbmcgdG8gdjg6OlN0cmluZyBhbmQgdG8gR0MgdGhlIGhhbmRsZSkK
ICAgICAvLyB0byBiZSBwZXJmb3JtZWQgb24gdGhlIG1haW4gdGhyZWFkLgpJbmRleDogU291cmNl
L1dlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4Q29uc29sZUN1c3RvbS5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4Q29uc29sZUN1c3RvbS5j
cHAJKHJldmlzaW9uIDExMDUzOSkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3Rv
bS9WOENvbnNvbGVDdXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNiw3ICszNiw2IEBACiAj
aW5jbHVkZSAiU2NyaXB0QXJndW1lbnRzLmgiCiAjaW5jbHVkZSAiU2NyaXB0Q2FsbFN0YWNrLmgi
CiAjaW5jbHVkZSAiU2NyaXB0Q2FsbFN0YWNrRmFjdG9yeS5oIgotI2luY2x1ZGUgIlNjcmlwdFBy
b2ZpbGUuaCIKICNpbmNsdWRlICJWOEJpbmRpbmcuaCIKICNpbmNsdWRlICJWOEJpbmRpbmdNYWNy
b3MuaCIKICNpbmNsdWRlICJWOE1lbW9yeUluZm8uaCIKQEAgLTQ1LDIzICs0NCw2IEBACiAKIG5h
bWVzcGFjZSBXZWJDb3JlIHsKIAotdHlwZWRlZiBWZWN0b3I8UmVmUHRyPFNjcmlwdFByb2ZpbGU+
ID4gUHJvZmlsZXNBcnJheTsKLQotI2lmIEVOQUJMRShKQVZBU0NSSVBUX0RFQlVHR0VSKQotdjg6
OkhhbmRsZTx2ODo6VmFsdWU+IFY4Q29uc29sZTo6cHJvZmlsZXNBY2Nlc3NvckdldHRlcih2ODo6
TG9jYWw8djg6OlN0cmluZz4gbmFtZSwgY29uc3Qgdjg6OkFjY2Vzc29ySW5mbyYgaW5mbykKLXsK
LSAgICBJTkNfU1RBVFMoIkRPTS5Db25zb2xlLnByb2ZpbGVzQWNjZXNzb3JHZXR0ZXIiKTsKLSAg
ICBDb25zb2xlKiBpbXAgPSBWOENvbnNvbGU6OnRvTmF0aXZlKGluZm8uSG9sZGVyKCkpOwotICAg
IGNvbnN0IFByb2ZpbGVzQXJyYXkmIHByb2ZpbGVzID0gaW1wLT5wcm9maWxlcygpOwotICAgIHY4
OjpIYW5kbGU8djg6OkFycmF5PiByZXN1bHQgPSB2ODo6QXJyYXk6Ok5ldyhwcm9maWxlcy5zaXpl
KCkpOwotICAgIGludCBpbmRleCA9IDA7Ci0gICAgUHJvZmlsZXNBcnJheTo6Y29uc3RfaXRlcmF0
b3IgZW5kID0gcHJvZmlsZXMuZW5kKCk7Ci0gICAgZm9yIChQcm9maWxlc0FycmF5Ojpjb25zdF9p
dGVyYXRvciBpdGVyID0gcHJvZmlsZXMuYmVnaW4oKTsgaXRlciAhPSBlbmQ7ICsraXRlcikKLSAg
ICAgICAgcmVzdWx0LT5TZXQodjg6OkludGVnZXI6Ok5ldyhpbmRleCsrKSwgdG9WOChpdGVyLT5n
ZXQoKSkpOwotICAgIHJldHVybiByZXN1bHQ7Ci19Ci0jZW5kaWYKLQogdjg6OkhhbmRsZTx2ODo6
VmFsdWU+IFY4Q29uc29sZTo6dHJhY2VDYWxsYmFjayhjb25zdCB2ODo6QXJndW1lbnRzJiBhcmdz
KQogewogICAgIElOQ19TVEFUUygiRE9NLkNvbnNvbGUudHJhY2VDYWxsYmFjayIpOwpJbmRleDog
U291cmNlL1dlYkNvcmUvcGFnZS9Db25zb2xlLmlkbAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9wYWdlL0NvbnNvbGUuaWRsCShyZXZpc2lvbiAxMTA1MzkpCisrKyBTb3VyY2UvV2ViQ29y
ZS9wYWdlL0NvbnNvbGUuaWRsCSh3b3JraW5nIGNvcHkpCkBAIC00Niw3ICs0Niw3IEBAIG1vZHVs
ZSB3aW5kb3cgewogICAgICAgICBbQ2FsbFdpdGg9U2NyaXB0QXJndW1lbnRzfENhbGxTdGFja10g
dm9pZCBtYXJrVGltZWxpbmUoKTsKIAogI2lmIGRlZmluZWQoRU5BQkxFX0pBVkFTQ1JJUFRfREVC
VUdHRVIpICYmIEVOQUJMRV9KQVZBU0NSSVBUX0RFQlVHR0VSCi0gICAgICAgIHJlYWRvbmx5IGF0
dHJpYnV0ZSBbQ3VzdG9tR2V0dGVyXSBBcnJheSBwcm9maWxlczsKKyAgICAgICAgcmVhZG9ubHkg
YXR0cmlidXRlIFtBcnJheVR5cGU9U2NyaXB0UHJvZmlsZV0gQXJyYXkgcHJvZmlsZXM7CiAgICAg
ICAgIFtDdXN0b21dIHZvaWQgcHJvZmlsZShpbiBET01TdHJpbmcgdGl0bGUpOwogICAgICAgICBb
Q3VzdG9tXSB2b2lkIHByb2ZpbGVFbmQoaW4gRE9NU3RyaW5nIHRpdGxlKTsKICNlbmRpZgo=
</data>
<flag name="commit-queue"
          id="134942"
          type_id="3"
          status="-"
          setter="gustavo"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="0"
              isprivate="0"
          >
            <attachid>132017</attachid>
            <date>2012-03-15 04:31:36 -0700</date>
            <delta_ts>2012-03-15 05:16:09 -0700</delta_ts>
            <desc>result of run-bindings-tests</desc>
            <filename>test_bindings.txt</filename>
            <type>text/plain</type>
            <size>17968</size>
            <attacher name="Vineet Chaudhary (vineetc)">code.vineet</attacher>
            
              <data encoding="base64">UEFTUzogKEpTKSBKU1Rlc3RDYWxsYmFjay5jcHAKUEFTUzogKEpTKSBKU1Rlc3RDYWxsYmFjay5o
ClBBU1M6IChKUykgSlNUZXN0Q3VzdG9tTmFtZWRHZXR0ZXIuY3BwClBBU1M6IChKUykgSlNUZXN0
Q3VzdG9tTmFtZWRHZXR0ZXIuaApQQVNTOiAoSlMpIEpTVGVzdEFjdGl2ZURPTU9iamVjdC5jcHAK
UEFTUzogKEpTKSBKU1Rlc3RBY3RpdmVET01PYmplY3QuaApQQVNTOiAoSlMpIEpTVGVzdEV2ZW50
Q29uc3RydWN0b3IuY3BwClBBU1M6IChKUykgSlNUZXN0RXZlbnRDb25zdHJ1Y3Rvci5oClBBU1M6
IChKUykgSlNUZXN0RXZlbnRUYXJnZXQuY3BwClBBU1M6IChKUykgSlNUZXN0RXZlbnRUYXJnZXQu
aApQQVNTOiAoSlMpIEpTVGVzdEludGVyZmFjZS5jcHAKUEFTUzogKEpTKSBKU1Rlc3RJbnRlcmZh
Y2UuaApQQVNTOiAoSlMpIEpTVGVzdE1lZGlhUXVlcnlMaXN0TGlzdGVuZXIuY3BwClBBU1M6IChK
UykgSlNUZXN0TWVkaWFRdWVyeUxpc3RMaXN0ZW5lci5oClBBU1M6IChKUykgSlNUZXN0TmFtZWRD
b25zdHJ1Y3Rvci5jcHAKUEFTUzogKEpTKSBKU1Rlc3ROYW1lZENvbnN0cnVjdG9yLmgKRkFJTDog
KEpTKSBKU1Rlc3RPYmouY3BwCi0tLSBXZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9K
U1Rlc3RPYmouY3BwCTIwMTItMDMtMTUgMTY6NTA6NTMuMDAwMDAwMDAwICswNTMwCisrKyAvdmFy
L2ZvbGRlcnMvSDQvSDRaT1BrMVJGR0dCclI1N205VVlYRSsrK1RNLy1UbXAtL3RtcGxVZTRoSi9K
U1Rlc3RPYmouY3BwCTIwMTItMDMtMTUgMTY6NTY6NTMuMDAwMDAwMDAwICswNTMwCkBAIC0yMSwx
MiArMjEsMTQgQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJKU1Rlc3RPYmouaCIK
IAorI2luY2x1ZGUgIkFycmF5LmgiCiAjaW5jbHVkZSAiRGljdGlvbmFyeS5oIgogI2luY2x1ZGUg
IkRvY3VtZW50LmgiCiAjaW5jbHVkZSAiRXhjZXB0aW9uQ29kZS5oIgogI2luY2x1ZGUgIkhUTUxO
YW1lcy5oIgogI2luY2x1ZGUgIklEQkJpbmRpbmdVdGlsaXRpZXMuaCIKICNpbmNsdWRlICJJREJL
ZXkuaCIKKyNpbmNsdWRlICJKU0FycmF5LmgiCiAjaW5jbHVkZSAiSlNET01CaW5kaW5nLmgiCiAj
aW5jbHVkZSAiSlNET01TdHJpbmdMaXN0LmgiCiAjaW5jbHVkZSAiSlNEb2N1bWVudC5oIgpAQCAt
ODYsNiArODgsNyBAQAogICAgIHsgInVuc2lnbmVkTG9uZ0xvbmdBdHRyIiwgRG9udERlbGV0ZSwg
KGludHB0cl90KXN0YXRpY19jYXN0PFByb3BlcnR5U2xvdDo6R2V0VmFsdWVGdW5jPihqc1Rlc3RP
YmpVbnNpZ25lZExvbmdMb25nQXR0ciksIChpbnRwdHJfdClzZXRKU1Rlc3RPYmpVbnNpZ25lZExv
bmdMb25nQXR0ciwgTm9JbnRyaW5zaWMgfSwKICAgICB7ICJzdHJpbmdBdHRyIiwgRG9udERlbGV0
ZSwgKGludHB0cl90KXN0YXRpY19jYXN0PFByb3BlcnR5U2xvdDo6R2V0VmFsdWVGdW5jPihqc1Rl
c3RPYmpTdHJpbmdBdHRyKSwgKGludHB0cl90KXNldEpTVGVzdE9ialN0cmluZ0F0dHIsIE5vSW50
cmluc2ljIH0sCiAgICAgeyAidGVzdE9iakF0dHIiLCBEb250RGVsZXRlLCAoaW50cHRyX3Qpc3Rh
dGljX2Nhc3Q8UHJvcGVydHlTbG90OjpHZXRWYWx1ZUZ1bmM+KGpzVGVzdE9ialRlc3RPYmpBdHRy
KSwgKGludHB0cl90KXNldEpTVGVzdE9ialRlc3RPYmpBdHRyLCBOb0ludHJpbnNpYyB9LAorICAg
IHsgImFycmF5VHlwZUF0dHJpYnV0ZSIsIERvbnREZWxldGUgfCBSZWFkT25seSwgKGludHB0cl90
KXN0YXRpY19jYXN0PFByb3BlcnR5U2xvdDo6R2V0VmFsdWVGdW5jPihqc1Rlc3RPYmpBcnJheVR5
cGVBdHRyaWJ1dGUpLCAoaW50cHRyX3QpMCwgTm9JbnRyaW5zaWMgfSwKICAgICB7ICJYTUxPYmpB
dHRyIiwgRG9udERlbGV0ZSwgKGludHB0cl90KXN0YXRpY19jYXN0PFByb3BlcnR5U2xvdDo6R2V0
VmFsdWVGdW5jPihqc1Rlc3RPYmpYTUxPYmpBdHRyKSwgKGludHB0cl90KXNldEpTVGVzdE9ialhN
TE9iakF0dHIsIE5vSW50cmluc2ljIH0sCiAgICAgeyAiY3JlYXRlIiwgRG9udERlbGV0ZSwgKGlu
dHB0cl90KXN0YXRpY19jYXN0PFByb3BlcnR5U2xvdDo6R2V0VmFsdWVGdW5jPihqc1Rlc3RPYmpD
cmVhdGUpLCAoaW50cHRyX3Qpc2V0SlNUZXN0T2JqQ3JlYXRlLCBOb0ludHJpbnNpYyB9LAogICAg
IHsgInJlZmxlY3RlZFN0cmluZ0F0dHIiLCBEb250RGVsZXRlLCAoaW50cHRyX3Qpc3RhdGljX2Nh
c3Q8UHJvcGVydHlTbG90OjpHZXRWYWx1ZUZ1bmM+KGpzVGVzdE9ialJlZmxlY3RlZFN0cmluZ0F0
dHIpLCAoaW50cHRyX3Qpc2V0SlNUZXN0T2JqUmVmbGVjdGVkU3RyaW5nQXR0ciwgTm9JbnRyaW5z
aWMgfSwKQEAgLTQ2Niw2ICs0NjksMTYgQEAKIH0KIAogCitKU1ZhbHVlIGpzVGVzdE9iakFycmF5
VHlwZUF0dHJpYnV0ZShFeGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWUgc2xvdEJhc2UsIGNvbnN0IElk
ZW50aWZpZXImKQoreworICAgIEpTVGVzdE9iaiogY2FzdGVkVGhpcyA9IHN0YXRpY19jYXN0PEpT
VGVzdE9iaio+KGFzT2JqZWN0KHNsb3RCYXNlKSk7CisgICAgVU5VU0VEX1BBUkFNKGV4ZWMpOwor
ICAgIFRlc3RPYmoqIGltcGwgPSBzdGF0aWNfY2FzdDxUZXN0T2JqKj4oY2FzdGVkVGhpcy0+aW1w
bCgpKTsKKyAgICBKU1ZhbHVlIHJlc3VsdCA9IHRvSlMoZXhlYywgY2FzdGVkVGhpcy0+Z2xvYmFs
T2JqZWN0KCksIFdURjo6Z2V0UHRyKGltcGwtPmFycmF5VHlwZUF0dHJpYnV0ZSgpKSk7CisgICAg
cmV0dXJuIHJlc3VsdDsKK30KKworCiBKU1ZhbHVlIGpzVGVzdE9ialhNTE9iakF0dHIoRXhlY1N0
YXRlKiBleGVjLCBKU1ZhbHVlIHNsb3RCYXNlLCBjb25zdCBJZGVudGlmaWVyJikKIHsKICAgICBK
U1Rlc3RPYmoqIGNhc3RlZFRoaXMgPSBzdGF0aWNfY2FzdDxKU1Rlc3RPYmoqPihhc09iamVjdChz
bG90QmFzZSkpOwoKRkFJTDogKEpTKSBKU1Rlc3RPYmouaAotLS0gV2ViQ29yZS9iaW5kaW5ncy9z
Y3JpcHRzL3Rlc3QvSlMvSlNUZXN0T2JqLmgJMjAxMi0wMy0xNSAxNjo1MDo1My4wMDAwMDAwMDAg
KzA1MzAKKysrIC92YXIvZm9sZGVycy9INC9INFpPUGsxUkZHR0JyUjU3bTlVWVhFKysrVE0vLVRt
cC0vdG1wbFVlNGhKL0pTVGVzdE9iai5oCTIwMTItMDMtMTUgMTY6NTY6NTMuMDAwMDAwMDAwICsw
NTMwCkBAIC0yMzEsNiArMjMxLDcgQEAKIHZvaWQgc2V0SlNUZXN0T2JqU3RyaW5nQXR0cihKU0M6
OkV4ZWNTdGF0ZSosIEpTQzo6SlNPYmplY3QqLCBKU0M6OkpTVmFsdWUpOwogSlNDOjpKU1ZhbHVl
IGpzVGVzdE9ialRlc3RPYmpBdHRyKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpKU1ZhbHVlLCBjb25z
dCBKU0M6OklkZW50aWZpZXImKTsKIHZvaWQgc2V0SlNUZXN0T2JqVGVzdE9iakF0dHIoSlNDOjpF
eGVjU3RhdGUqLCBKU0M6OkpTT2JqZWN0KiwgSlNDOjpKU1ZhbHVlKTsKK0pTQzo6SlNWYWx1ZSBq
c1Rlc3RPYmpBcnJheVR5cGVBdHRyaWJ1dGUoSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkpTVmFsdWUs
IGNvbnN0IEpTQzo6SWRlbnRpZmllciYpOwogSlNDOjpKU1ZhbHVlIGpzVGVzdE9ialhNTE9iakF0
dHIoSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkpTVmFsdWUsIGNvbnN0IEpTQzo6SWRlbnRpZmllciYp
Owogdm9pZCBzZXRKU1Rlc3RPYmpYTUxPYmpBdHRyKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpKU09i
amVjdCosIEpTQzo6SlNWYWx1ZSk7CiBKU0M6OkpTVmFsdWUganNUZXN0T2JqQ3JlYXRlKEpTQzo6
RXhlY1N0YXRlKiwgSlNDOjpKU1ZhbHVlLCBjb25zdCBKU0M6OklkZW50aWZpZXImKTsKClBBU1M6
IChKUykgSlNUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlLmNwcApQQVNTOiAoSlMp
IEpTVGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZS5oClBBU1M6IChKUykgSlNUZXN0
U3VwcGxlbWVudGFsLmNwcApQQVNTOiAoSlMpIEpTVGVzdFN1cHBsZW1lbnRhbC5oClBBU1M6IChK
UykgSlNGbG9hdDY0QXJyYXkuY3BwClBBU1M6IChKUykgSlNGbG9hdDY0QXJyYXkuaApQQVNTOiAo
VjgpIFY4VGVzdENhbGxiYWNrLmNwcApQQVNTOiAoVjgpIFY4VGVzdENhbGxiYWNrLmgKUEFTUzog
KFY4KSBWOFRlc3RDdXN0b21OYW1lZEdldHRlci5jcHAKUEFTUzogKFY4KSBWOFRlc3RDdXN0b21O
YW1lZEdldHRlci5oClBBU1M6IChWOCkgVjhUZXN0QWN0aXZlRE9NT2JqZWN0LmNwcApQQVNTOiAo
VjgpIFY4VGVzdEFjdGl2ZURPTU9iamVjdC5oClBBU1M6IChWOCkgVjhUZXN0RXZlbnRDb25zdHJ1
Y3Rvci5jcHAKUEFTUzogKFY4KSBWOFRlc3RFdmVudENvbnN0cnVjdG9yLmgKUEFTUzogKFY4KSBW
OFRlc3RFdmVudFRhcmdldC5jcHAKUEFTUzogKFY4KSBWOFRlc3RFdmVudFRhcmdldC5oClBBU1M6
IChWOCkgVjhUZXN0SW50ZXJmYWNlLmNwcApQQVNTOiAoVjgpIFY4VGVzdEludGVyZmFjZS5oClBB
U1M6IChWOCkgVjhUZXN0TWVkaWFRdWVyeUxpc3RMaXN0ZW5lci5jcHAKUEFTUzogKFY4KSBWOFRl
c3RNZWRpYVF1ZXJ5TGlzdExpc3RlbmVyLmgKUEFTUzogKFY4KSBWOFRlc3ROYW1lZENvbnN0cnVj
dG9yLmNwcApQQVNTOiAoVjgpIFY4VGVzdE5hbWVkQ29uc3RydWN0b3IuaApGQUlMOiAoVjgpIFY4
VGVzdE9iai5jcHAKLS0tIFdlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Y4L1Y4VGVzdE9i
ai5jcHAJMjAxMi0wMy0xNSAxNjo1MDo0Ni4wMDAwMDAwMDAgKzA1MzAKKysrIC92YXIvZm9sZGVy
cy9INC9INFpPUGsxUkZHR0JyUjU3bTlVWVhFKysrVE0vLVRtcC0vdG1wT3JrMDB6L1Y4VGVzdE9i
ai5jcHAJMjAxMi0wMy0xNSAxNjo1Njo1NC4wMDAwMDAwMDAgKzA1MzAKQEAgLTMzLDYgKzMzLDcg
QEAKICNpbmNsdWRlICJTY3JpcHRDYWxsU3RhY2suaCIKICNpbmNsdWRlICJTY3JpcHRDYWxsU3Rh
Y2tGYWN0b3J5LmgiCiAjaW5jbHVkZSAiU2VyaWFsaXplZFNjcmlwdFZhbHVlLmgiCisjaW5jbHVk
ZSAiVjhBcnJheS5oIgogI2luY2x1ZGUgIlY4QmluZGluZy5oIgogI2luY2x1ZGUgIlY4QmluZGlu
Z01hY3Jvcy5oIgogI2luY2x1ZGUgIlY4QmluZGluZ1N0YXRlLmgiCkBAIC0yMTcsNiArMjE4LDIw
IEBACiAgICAgcmV0dXJuOwogfQogCitzdGF0aWMgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IGFycmF5
VHlwZUF0dHJpYnV0ZUF0dHJHZXR0ZXIodjg6OkxvY2FsPHY4OjpTdHJpbmc+IG5hbWUsIGNvbnN0
IHY4OjpBY2Nlc3NvckluZm8mIGluZm8pCit7CisgICAgSU5DX1NUQVRTKCJET00uVGVzdE9iai5h
cnJheVR5cGVBdHRyaWJ1dGUuX2dldCIpOworICAgIFRlc3RPYmoqIGltcCA9IFY4VGVzdE9iajo6
dG9OYXRpdmUoaW5mby5Ib2xkZXIoKSk7CisgICAgUmVmUHRyPEFycmF5PiByZXN1bHQgPSBpbXAt
PmFycmF5VHlwZUF0dHJpYnV0ZSgpOworICAgIHY4OjpIYW5kbGU8djg6OlZhbHVlPiB3cmFwcGVy
ID0gcmVzdWx0LmdldCgpID8gZ2V0RE9NT2JqZWN0TWFwKCkuZ2V0KHJlc3VsdC5nZXQoKSkgOiB2
ODo6SGFuZGxlPHY4OjpPYmplY3Q+KCk7CisgICAgaWYgKHdyYXBwZXIuSXNFbXB0eSgpKSB7Cisg
ICAgICAgIHdyYXBwZXIgPSB0b1Y4KHJlc3VsdC5nZXQoKSk7CisgICAgICAgIGlmICghd3JhcHBl
ci5Jc0VtcHR5KCkpCisgICAgICAgICAgICBWOERPTVdyYXBwZXI6OnNldE5hbWVkSGlkZGVuUmVm
ZXJlbmNlKGluZm8uSG9sZGVyKCksICJhcnJheVR5cGVBdHRyaWJ1dGUiLCB3cmFwcGVyKTsKKyAg
ICB9CisgICAgcmV0dXJuIHdyYXBwZXI7Cit9CisKIHN0YXRpYyB2ODo6SGFuZGxlPHY4OjpWYWx1
ZT4gWE1MT2JqQXR0ckF0dHJHZXR0ZXIodjg6OkxvY2FsPHY4OjpTdHJpbmc+IG5hbWUsIGNvbnN0
IHY4OjpBY2Nlc3NvckluZm8mIGluZm8pCiB7CiAgICAgSU5DX1NUQVRTKCJET00uVGVzdE9iai5Y
TUxPYmpBdHRyLl9nZXQiKTsKQEAgLTE3NjEsNiArMTc3Niw4IEBACiAgICAgeyJzdHJpbmdBdHRy
IiwgVGVzdE9iakludGVybmFsOjpzdHJpbmdBdHRyQXR0ckdldHRlciwgVGVzdE9iakludGVybmFs
OjpzdHJpbmdBdHRyQXR0clNldHRlciwgMCAvKiBubyBkYXRhICovLCBzdGF0aWNfY2FzdDx2ODo6
QWNjZXNzQ29udHJvbD4odjg6OkRFRkFVTFQpLCBzdGF0aWNfY2FzdDx2ODo6UHJvcGVydHlBdHRy
aWJ1dGU+KHY4OjpOb25lKSwgMCAvKiBvbiBpbnN0YW5jZSAqL30sCiAgICAgLy8gQXR0cmlidXRl
ICd0ZXN0T2JqQXR0cicgKFR5cGU6ICdhdHRyaWJ1dGUnIEV4dEF0dHI6ICcnKQogICAgIHsidGVz
dE9iakF0dHIiLCBUZXN0T2JqSW50ZXJuYWw6OnRlc3RPYmpBdHRyQXR0ckdldHRlciwgVGVzdE9i
akludGVybmFsOjp0ZXN0T2JqQXR0ckF0dHJTZXR0ZXIsIDAgLyogbm8gZGF0YSAqLywgc3RhdGlj
X2Nhc3Q8djg6OkFjY2Vzc0NvbnRyb2w+KHY4OjpERUZBVUxUKSwgc3RhdGljX2Nhc3Q8djg6OlBy
b3BlcnR5QXR0cmlidXRlPih2ODo6Tm9uZSksIDAgLyogb24gaW5zdGFuY2UgKi99LAorICAgIC8v
IEF0dHJpYnV0ZSAnYXJyYXlUeXBlQXR0cmlidXRlJyAoVHlwZTogJ3JlYWRvbmx5IGF0dHJpYnV0
ZScgRXh0QXR0cjogJ0FycmF5VHlwZScpCisgICAgeyJhcnJheVR5cGVBdHRyaWJ1dGUiLCBUZXN0
T2JqSW50ZXJuYWw6OmFycmF5VHlwZUF0dHJpYnV0ZUF0dHJHZXR0ZXIsIDAsIDAgLyogbm8gZGF0
YSAqLywgc3RhdGljX2Nhc3Q8djg6OkFjY2Vzc0NvbnRyb2w+KHY4OjpERUZBVUxUKSwgc3RhdGlj
X2Nhc3Q8djg6OlByb3BlcnR5QXR0cmlidXRlPih2ODo6Tm9uZSksIDAgLyogb24gaW5zdGFuY2Ug
Ki99LAogICAgIC8vIEF0dHJpYnV0ZSAnWE1MT2JqQXR0cicgKFR5cGU6ICdhdHRyaWJ1dGUnIEV4
dEF0dHI6ICcnKQogICAgIHsiWE1MT2JqQXR0ciIsIFRlc3RPYmpJbnRlcm5hbDo6WE1MT2JqQXR0
ckF0dHJHZXR0ZXIsIFRlc3RPYmpJbnRlcm5hbDo6WE1MT2JqQXR0ckF0dHJTZXR0ZXIsIDAgLyog
bm8gZGF0YSAqLywgc3RhdGljX2Nhc3Q8djg6OkFjY2Vzc0NvbnRyb2w+KHY4OjpERUZBVUxUKSwg
c3RhdGljX2Nhc3Q8djg6OlByb3BlcnR5QXR0cmlidXRlPih2ODo6Tm9uZSksIDAgLyogb24gaW5z
dGFuY2UgKi99LAogICAgIC8vIEF0dHJpYnV0ZSAnY3JlYXRlJyAoVHlwZTogJ2F0dHJpYnV0ZScg
RXh0QXR0cjogJycpCgpQQVNTOiAoVjgpIFY4VGVzdE9iai5oClBBU1M6IChWOCkgVjhUZXN0U2Vy
aWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlLmNwcApQQVNTOiAoVjgpIFY4VGVzdFNlcmlhbGl6
ZWRTY3JpcHRWYWx1ZUludGVyZmFjZS5oClBBU1M6IChWOCkgVjhUZXN0U3VwcGxlbWVudGFsLmNw
cApQQVNTOiAoVjgpIFY4VGVzdFN1cHBsZW1lbnRhbC5oClBBU1M6IChWOCkgVjhGbG9hdDY0QXJy
YXkuY3BwClBBU1M6IChWOCkgVjhGbG9hdDY0QXJyYXkuaApQQVNTOiAoT2JqQykgRE9NVGVzdENh
bGxiYWNrLmgKUEFTUzogKE9iakMpIERPTVRlc3RDYWxsYmFjay5tbQpQQVNTOiAoT2JqQykgRE9N
VGVzdENhbGxiYWNrSW50ZXJuYWwuaApQQVNTOiAoT2JqQykgRE9NVGVzdEN1c3RvbU5hbWVkR2V0
dGVyLmgKUEFTUzogKE9iakMpIERPTVRlc3RDdXN0b21OYW1lZEdldHRlci5tbQpQQVNTOiAoT2Jq
QykgRE9NVGVzdEN1c3RvbU5hbWVkR2V0dGVySW50ZXJuYWwuaApQQVNTOiAoT2JqQykgRE9NVGVz
dEFjdGl2ZURPTU9iamVjdC5oClBBU1M6IChPYmpDKSBET01UZXN0QWN0aXZlRE9NT2JqZWN0Lm1t
ClBBU1M6IChPYmpDKSBET01UZXN0QWN0aXZlRE9NT2JqZWN0SW50ZXJuYWwuaApQQVNTOiAoT2Jq
QykgRE9NVGVzdEV2ZW50Q29uc3RydWN0b3IuaApQQVNTOiAoT2JqQykgRE9NVGVzdEV2ZW50Q29u
c3RydWN0b3IubW0KUEFTUzogKE9iakMpIERPTVRlc3RFdmVudENvbnN0cnVjdG9ySW50ZXJuYWwu
aApQQVNTOiAoT2JqQykgRE9NVGVzdEV2ZW50VGFyZ2V0LmgKUEFTUzogKE9iakMpIERPTVRlc3RF
dmVudFRhcmdldC5tbQpQQVNTOiAoT2JqQykgRE9NVGVzdEV2ZW50VGFyZ2V0SW50ZXJuYWwuaApQ
QVNTOiAoT2JqQykgRE9NVGVzdEludGVyZmFjZS5oClBBU1M6IChPYmpDKSBET01UZXN0SW50ZXJm
YWNlLm1tClBBU1M6IChPYmpDKSBET01UZXN0SW50ZXJmYWNlSW50ZXJuYWwuaApQQVNTOiAoT2Jq
QykgRE9NVGVzdE1lZGlhUXVlcnlMaXN0TGlzdGVuZXIuaApQQVNTOiAoT2JqQykgRE9NVGVzdE1l
ZGlhUXVlcnlMaXN0TGlzdGVuZXIubW0KUEFTUzogKE9iakMpIERPTVRlc3RNZWRpYVF1ZXJ5TGlz
dExpc3RlbmVySW50ZXJuYWwuaApQQVNTOiAoT2JqQykgRE9NVGVzdE5hbWVkQ29uc3RydWN0b3Iu
aApQQVNTOiAoT2JqQykgRE9NVGVzdE5hbWVkQ29uc3RydWN0b3IubW0KUEFTUzogKE9iakMpIERP
TVRlc3ROYW1lZENvbnN0cnVjdG9ySW50ZXJuYWwuaApGQUlMOiAoT2JqQykgRE9NVGVzdE9iai5o
Ci0tLSBXZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9PYmpDL0RPTVRlc3RPYmouaAkyMDEy
LTAzLTE1IDE2OjUxOjA5LjAwMDAwMDAwMCArMDUzMAorKysgL3Zhci9mb2xkZXJzL0g0L0g0Wk9Q
azFSRkdHQnJSNTdtOVVZWEUrKytUTS8tVG1wLS90bXBsejRKZU0vRE9NVGVzdE9iai5oCTIwMTIt
MDMtMTUgMTY6NTY6NTYuMDAwMDAwMDAwICswNTMwCkBAIC0yOCw2ICsyOCw3IEBACiAKICNpZiBX
RUJLSVRfVkVSU0lPTl9NQVhfQUxMT1dFRCA+PSBXRUJLSVRfVkVSU0lPTl9MQVRFU1QKIAorQGNs
YXNzIERPTUFycmF5OwogQGNsYXNzIERPTURpY3Rpb25hcnk7CiBAY2xhc3MgRE9NRG9jdW1lbnQ7
CiBAY2xhc3MgRE9NSURCS2V5OwpAQCAtODIsNiArODMsNyBAQAogLSAodm9pZClzZXRTdHJpbmdB
dHRyOihOU1N0cmluZyAqKW5ld1N0cmluZ0F0dHI7CiAtIChET01UZXN0T2JqICopdGVzdE9iakF0
dHI7CiAtICh2b2lkKXNldFRlc3RPYmpBdHRyOihET01UZXN0T2JqICopbmV3VGVzdE9iakF0dHI7
CistIChET01BcnJheSAqKWFycmF5VHlwZUF0dHJpYnV0ZTsKIC0gKERPTVRlc3RPYmogKilYTUxP
YmpBdHRyOwogLSAodm9pZClzZXRYTUxPYmpBdHRyOihET01UZXN0T2JqICopbmV3WE1MT2JqQXR0
cjsKIC0gKEJPT0wpY3JlYXRlOwoKRkFJTDogKE9iakMpIERPTVRlc3RPYmoubW0KLS0tIFdlYkNv
cmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L09iakMvRE9NVGVzdE9iai5tbQkyMDEyLTAzLTE1IDE2
OjUxOjA5LjAwMDAwMDAwMCArMDUzMAorKysgL3Zhci9mb2xkZXJzL0g0L0g0Wk9QazFSRkdHQnJS
NTdtOVVZWEUrKytUTS8tVG1wLS90bXBsejRKZU0vRE9NVGVzdE9iai5tbQkyMDEyLTAzLTE1IDE2
OjU2OjU2LjAwMDAwMDAwMCArMDUzMApAQCAtMjksNiArMjksOCBAQAogCiAjaW1wb3J0ICJET01U
ZXN0T2JqLmgiCiAKKyNpbXBvcnQgIkFycmF5LmgiCisjaW1wb3J0ICJET01BcnJheUludGVybmFs
LmgiCiAjaW1wb3J0ICJET01CbG9iSW50ZXJuYWwuaCIKICNpbXBvcnQgIkRPTUNTU1J1bGVJbnRl
cm5hbC5oIgogI2ltcG9ydCAiRE9NQ1NTVmFsdWVJbnRlcm5hbC5oIgpAQCAtMjAyLDYgKzIwNCwx
MiBAQAogICAgIElNUEwtPnNldFRlc3RPYmpBdHRyKGNvcmUobmV3VGVzdE9iakF0dHIpKTsKIH0K
IAorLSAoRE9NQXJyYXkgKilhcnJheVR5cGVBdHRyaWJ1dGUKK3sKKyAgICBXZWJDb3JlOjpKU01h
aW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgcmV0dXJuIGtpdChXVEY6OmdldFB0cihJTVBM
LT5hcnJheVR5cGVBdHRyaWJ1dGUoKSkpOworfQorCiAtIChET01UZXN0T2JqICopWE1MT2JqQXR0
cgogewogICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKClBBU1M6IChP
YmpDKSBET01UZXN0T2JqSW50ZXJuYWwuaApQQVNTOiAoT2JqQykgRE9NVGVzdFNlcmlhbGl6ZWRT
Y3JpcHRWYWx1ZUludGVyZmFjZS5oClBBU1M6IChPYmpDKSBET01UZXN0U2VyaWFsaXplZFNjcmlw
dFZhbHVlSW50ZXJmYWNlLm1tClBBU1M6IChPYmpDKSBET01UZXN0U2VyaWFsaXplZFNjcmlwdFZh
bHVlSW50ZXJmYWNlSW50ZXJuYWwuaApQQVNTOiAoT2JqQykgRE9NVGVzdFN1cHBsZW1lbnRhbC5j
cHAKUEFTUzogKE9iakMpIERPTVRlc3RTdXBwbGVtZW50YWwuaApQQVNTOiAoT2JqQykgRE9NRmxv
YXQ2NEFycmF5LmgKUEFTUzogKE9iakMpIERPTUZsb2F0NjRBcnJheS5tbQpQQVNTOiAoT2JqQykg
RE9NRmxvYXQ2NEFycmF5SW50ZXJuYWwuaApQQVNTOiAoR09iamVjdCkgV2ViS2l0RE9NVGVzdENh
bGxiYWNrLmNwcApQQVNTOiAoR09iamVjdCkgV2ViS2l0RE9NVGVzdENhbGxiYWNrLmgKUEFTUzog
KEdPYmplY3QpIFdlYktpdERPTVRlc3RDYWxsYmFja1ByaXZhdGUuaApQQVNTOiAoR09iamVjdCkg
V2ViS2l0RE9NVGVzdEN1c3RvbU5hbWVkR2V0dGVyLmNwcApQQVNTOiAoR09iamVjdCkgV2ViS2l0
RE9NVGVzdEN1c3RvbU5hbWVkR2V0dGVyLmgKUEFTUzogKEdPYmplY3QpIFdlYktpdERPTVRlc3RD
dXN0b21OYW1lZEdldHRlclByaXZhdGUuaApQQVNTOiAoR09iamVjdCkgV2ViS2l0RE9NVGVzdEFj
dGl2ZURPTU9iamVjdC5jcHAKUEFTUzogKEdPYmplY3QpIFdlYktpdERPTVRlc3RBY3RpdmVET01P
YmplY3QuaApQQVNTOiAoR09iamVjdCkgV2ViS2l0RE9NVGVzdEFjdGl2ZURPTU9iamVjdFByaXZh
dGUuaApQQVNTOiAoR09iamVjdCkgV2ViS2l0RE9NVGVzdEV2ZW50Q29uc3RydWN0b3IuY3BwClBB
U1M6IChHT2JqZWN0KSBXZWJLaXRET01UZXN0RXZlbnRDb25zdHJ1Y3Rvci5oClBBU1M6IChHT2Jq
ZWN0KSBXZWJLaXRET01UZXN0RXZlbnRDb25zdHJ1Y3RvclByaXZhdGUuaApQQVNTOiAoR09iamVj
dCkgV2ViS2l0RE9NVGVzdEV2ZW50VGFyZ2V0LmNwcApQQVNTOiAoR09iamVjdCkgV2ViS2l0RE9N
VGVzdEV2ZW50VGFyZ2V0LmgKUEFTUzogKEdPYmplY3QpIFdlYktpdERPTVRlc3RFdmVudFRhcmdl
dFByaXZhdGUuaApQQVNTOiAoR09iamVjdCkgV2ViS2l0RE9NVGVzdEludGVyZmFjZS5jcHAKUEFT
UzogKEdPYmplY3QpIFdlYktpdERPTVRlc3RJbnRlcmZhY2UuaApQQVNTOiAoR09iamVjdCkgV2Vi
S2l0RE9NVGVzdEludGVyZmFjZVByaXZhdGUuaApQQVNTOiAoR09iamVjdCkgV2ViS2l0RE9NVGVz
dE1lZGlhUXVlcnlMaXN0TGlzdGVuZXIuY3BwClBBU1M6IChHT2JqZWN0KSBXZWJLaXRET01UZXN0
TWVkaWFRdWVyeUxpc3RMaXN0ZW5lci5oClBBU1M6IChHT2JqZWN0KSBXZWJLaXRET01UZXN0TWVk
aWFRdWVyeUxpc3RMaXN0ZW5lclByaXZhdGUuaApQQVNTOiAoR09iamVjdCkgV2ViS2l0RE9NVGVz
dE5hbWVkQ29uc3RydWN0b3IuY3BwClBBU1M6IChHT2JqZWN0KSBXZWJLaXRET01UZXN0TmFtZWRD
b25zdHJ1Y3Rvci5oClBBU1M6IChHT2JqZWN0KSBXZWJLaXRET01UZXN0TmFtZWRDb25zdHJ1Y3Rv
clByaXZhdGUuaApGQUlMOiAoR09iamVjdCkgV2ViS2l0RE9NVGVzdE9iai5jcHAKLS0tIFdlYkNv
cmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0dPYmplY3QvV2ViS2l0RE9NVGVzdE9iai5jcHAJMjAx
Mi0wMy0xNSAxNjo1MDo1Ny4wMDAwMDAwMDAgKzA1MzAKKysrIC92YXIvZm9sZGVycy9INC9INFpP
UGsxUkZHR0JyUjU3bTlVWVhFKysrVE0vLVRtcC0vdG1wR2hzZm15L1dlYktpdERPTVRlc3RPYmou
Y3BwCTIwMTItMDMtMTUgMTY6NTY6NTcuMDAwMDAwMDAwICswNTMwCkBAIC0yMyw2ICsyMyw3IEBA
CiAKICNpbmNsdWRlIDx3dGYvR2V0UHRyLmg+CiAjaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgorI2lu
Y2x1ZGUgIkFycmF5LmgiCiAjaW5jbHVkZSAiRE9NT2JqZWN0Q2FjaGUuaCIKICNpbmNsdWRlICJE
b2N1bWVudC5oIgogI2luY2x1ZGUgIkV4Y2VwdGlvbkNvZGUuaCIKQEAgLTMzLDYgKzM0LDggQEAK
ICNpbmNsdWRlICJXZWJLaXRET01CaW5kaW5nLmgiCiAjaW5jbHVkZSAiYm9vbC5oIgogI2luY2x1
ZGUgImdvYmplY3QvQ29udmVydFRvVVRGOFN0cmluZy5oIgorI2luY2x1ZGUgIndlYmtpdC9XZWJL
aXRET01BcnJheS5oIgorI2luY2x1ZGUgIndlYmtpdC9XZWJLaXRET01BcnJheVByaXZhdGUuaCIK
ICNpbmNsdWRlICJ3ZWJraXQvV2ViS2l0RE9NRGljdGlvbmFyeS5oIgogI2luY2x1ZGUgIndlYmtp
dC9XZWJLaXRET01EaWN0aW9uYXJ5UHJpdmF0ZS5oIgogI2luY2x1ZGUgIndlYmtpdC9XZWJLaXRE
T01Eb2N1bWVudC5oIgpAQCAtNzc5LDYgKzc4MiwxNyBAQAogICAgIGl0ZW0tPnNldFRlc3RPYmpB
dHRyKGNvbnZlcnRlZF92YWx1ZSk7CiB9CiAKK1dlYktpdERPTUFycmF5Kgord2Via2l0X2RvbV90
ZXN0X29ial9nZXRfYXJyYXlfdHlwZV9hdHRyaWJ1dGUoV2ViS2l0RE9NVGVzdE9iaiogc2VsZikK
K3sKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChzZWxmLCAwKTsKKyAgICBXZWJDb3JlOjpKU01h
aW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgV2ViQ29yZTo6VGVzdE9iaiAqIGl0ZW0gPSBX
ZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgUGFzc1JlZlB0cjxXZWJDb3JlOjpBcnJheT4gZ19yZXMg
PSBXVEY6OmdldFB0cihpdGVtLT5hcnJheVR5cGVBdHRyaWJ1dGUoKSk7CisgICAgV2ViS2l0RE9N
QXJyYXkqIHJlcyA9IFdlYktpdDo6a2l0KGdfcmVzLmdldCgpKTsKKyAgICByZXR1cm4gcmVzOwor
fQorCiBXZWJLaXRET01UZXN0T2JqKgogd2Via2l0X2RvbV90ZXN0X29ial9nZXRfeG1sX29ial9h
dHRyKFdlYktpdERPTVRlc3RPYmoqIHNlbGYpCiB7CkBAIC0xNTM4LDYgKzE1NTIsNyBAQAogICAg
IFBST1BfVU5TSUdORURfTE9OR19MT05HX0FUVFIsCiAgICAgUFJPUF9TVFJJTkdfQVRUUiwKICAg
ICBQUk9QX1RFU1RfT0JKX0FUVFIsCisgICAgUFJPUF9BUlJBWV9UWVBFX0FUVFJJQlVURSwKICAg
ICBQUk9QX1hNTF9PQkpfQVRUUiwKICAgICBQUk9QX0NSRUFURSwKICAgICBQUk9QX1JFRkxFQ1RF
RF9TVFJJTkdfQVRUUiwKQEAgLTE3OTcsNiArMTgxMiwxMiBAQAogICAgICAgICBnX3ZhbHVlX3Nl
dF9vYmplY3QodmFsdWUsIFdlYktpdDo6a2l0KHB0ci5nZXQoKSkpOwogICAgICAgICBicmVhazsK
ICAgICB9CisgICAgY2FzZSBQUk9QX0FSUkFZX1RZUEVfQVRUUklCVVRFOgorICAgIHsKKyAgICAg
ICAgUmVmUHRyPFdlYkNvcmU6OkFycmF5PiBwdHIgPSBjb3JlU2VsZi0+YXJyYXlUeXBlQXR0cmli
dXRlKCk7CisgICAgICAgIGdfdmFsdWVfc2V0X29iamVjdCh2YWx1ZSwgV2ViS2l0OjpraXQocHRy
LmdldCgpKSk7CisgICAgICAgIGJyZWFrOworICAgIH0KICAgICBjYXNlIFBST1BfWE1MX09CSl9B
VFRSOgogICAgIHsKICAgICAgICAgUmVmUHRyPFdlYkNvcmU6OlRlc3RPYmo+IHB0ciA9IGNvcmVT
ZWxmLT54bWxPYmpBdHRyKCk7CkBAIC0yMDg5LDYgKzIxMTAsMTMgQEAKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgV0VCS0lUX1RZUEVf
RE9NX1RFU1RfT0JKLCAvKiBnb2JqZWN0IHR5cGUgKi8KICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgV0VCS0lUX1BBUkFNX1JFQURXUklU
RSkpOwogICAgIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkoZ29iamVjdENsYXNzLAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUFJPUF9BUlJBWV9UWVBFX0FUVFJJ
QlVURSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdfcGFyYW1fc3BlY19v
YmplY3QoImFycmF5LXR5cGUtYXR0cmlidXRlIiwgLyogbmFtZSAqLworICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAidGVzdF9vYmpfYXJy
YXktdHlwZS1hdHRyaWJ1dGUiLCAvKiBzaG9ydCBkZXNjcmlwdGlvbiAqLworICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAicmVhZC1vbmx5
ICBXZWJLaXRET01BcnJheSogVGVzdE9iai5hcnJheS10eXBlLWF0dHJpYnV0ZSIsIC8qIGxvbmdl
ciAtIGNvdWxkIGRvIHdpdGggc29tZSBleHRyYSBkb2Mgc3R1ZmYgaGVyZSAqLworICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXRUJLSVRf
VFlQRV9ET01fQVJSQVksIC8qIGdvYmplY3QgdHlwZSAqLworICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXRUJLSVRfUEFSQU1fUkVBREFC
TEUpKTsKKyAgICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5KGdvYmplY3RDbGFzcywK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBST1BfWE1MX09CSl9BVFRSLAog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ19wYXJhbV9zcGVjX29iamVjdCgi
eG1sLW9iai1hdHRyIiwgLyogbmFtZSAqLwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAidGVzdF9vYmpfeG1sLW9iai1hdHRyIiwgLyog
c2hvcnQgZGVzY3JpcHRpb24gKi8KCkZBSUw6IChHT2JqZWN0KSBXZWJLaXRET01UZXN0T2JqLmgK
LS0tIFdlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0dPYmplY3QvV2ViS2l0RE9NVGVzdE9i
ai5oCTIwMTItMDMtMTUgMTY6NTA6NTcuMDAwMDAwMDAwICswNTMwCisrKyAvdmFyL2ZvbGRlcnMv
SDQvSDRaT1BrMVJGR0dCclI1N205VVlYRSsrK1RNLy1UbXAtL3RtcEdoc2ZteS9XZWJLaXRET01U
ZXN0T2JqLmgJMjAxMi0wMy0xNSAxNjo1Njo1Ny4wMDAwMDAwMDAgKzA1MzAKQEAgLTY3NSw2ICs2
NzUsMTYgQEAKIHdlYmtpdF9kb21fdGVzdF9vYmpfc2V0X3Rlc3Rfb2JqX2F0dHIoV2ViS2l0RE9N
VGVzdE9iaiogc2VsZiwgV2ViS2l0RE9NVGVzdE9iaiogdmFsdWUpOwogCiAvKioKKyAqIHdlYmtp
dF9kb21fdGVzdF9vYmpfZ2V0X2FycmF5X3R5cGVfYXR0cmlidXRlOgorICogQHNlbGY6IEEgI1dl
YktpdERPTVRlc3RPYmoKKyAqCisgKiBSZXR1cm5zOiAodHJhbnNmZXIgbm9uZSk6CisgKgorKiov
CitXRUJLSVRfQVBJIFdlYktpdERPTUFycmF5Kgord2Via2l0X2RvbV90ZXN0X29ial9nZXRfYXJy
YXlfdHlwZV9hdHRyaWJ1dGUoV2ViS2l0RE9NVGVzdE9iaiogc2VsZik7CisKKy8qKgogICogd2Vi
a2l0X2RvbV90ZXN0X29ial9nZXRfeG1sX29ial9hdHRyOgogICogQHNlbGY6IEEgI1dlYktpdERP
TVRlc3RPYmoKICAqCgpQQVNTOiAoR09iamVjdCkgV2ViS2l0RE9NVGVzdE9ialByaXZhdGUuaApQ
QVNTOiAoR09iamVjdCkgV2ViS2l0RE9NVGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFj
ZS5jcHAKUEFTUzogKEdPYmplY3QpIFdlYktpdERPTVRlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJ
bnRlcmZhY2UuaApQQVNTOiAoR09iamVjdCkgV2ViS2l0RE9NVGVzdFNlcmlhbGl6ZWRTY3JpcHRW
YWx1ZUludGVyZmFjZVByaXZhdGUuaApQQVNTOiAoR09iamVjdCkgV2ViS2l0RE9NVGVzdFN1cHBs
ZW1lbnRhbC5jcHAKUEFTUzogKEdPYmplY3QpIFdlYktpdERPTVRlc3RTdXBwbGVtZW50YWwuaApQ
QVNTOiAoR09iamVjdCkgV2ViS2l0RE9NRmxvYXQ2NEFycmF5LmNwcApQQVNTOiAoR09iamVjdCkg
V2ViS2l0RE9NRmxvYXQ2NEFycmF5LmgKUEFTUzogKEdPYmplY3QpIFdlYktpdERPTUZsb2F0NjRB
cnJheVByaXZhdGUuaApQQVNTOiAoQ1BQKSBXZWJET01UZXN0Q2FsbGJhY2suY3BwClBBU1M6IChD
UFApIFdlYkRPTVRlc3RDYWxsYmFjay5oClBBU1M6IChDUFApIFdlYkRPTVRlc3RDdXN0b21OYW1l
ZEdldHRlci5jcHAKUEFTUzogKENQUCkgV2ViRE9NVGVzdEN1c3RvbU5hbWVkR2V0dGVyLmgKUEFT
UzogKENQUCkgV2ViRE9NVGVzdEFjdGl2ZURPTU9iamVjdC5jcHAKUEFTUzogKENQUCkgV2ViRE9N
VGVzdEFjdGl2ZURPTU9iamVjdC5oClBBU1M6IChDUFApIFdlYkRPTVRlc3RFdmVudENvbnN0cnVj
dG9yLmNwcApQQVNTOiAoQ1BQKSBXZWJET01UZXN0RXZlbnRDb25zdHJ1Y3Rvci5oClBBU1M6IChD
UFApIFdlYkRPTVRlc3RFdmVudFRhcmdldC5jcHAKUEFTUzogKENQUCkgV2ViRE9NVGVzdEV2ZW50
VGFyZ2V0LmgKUEFTUzogKENQUCkgV2ViRE9NVGVzdEludGVyZmFjZS5jcHAKUEFTUzogKENQUCkg
V2ViRE9NVGVzdEludGVyZmFjZS5oClBBU1M6IChDUFApIFdlYkRPTVRlc3RNZWRpYVF1ZXJ5TGlz
dExpc3RlbmVyLmNwcApQQVNTOiAoQ1BQKSBXZWJET01UZXN0TWVkaWFRdWVyeUxpc3RMaXN0ZW5l
ci5oClBBU1M6IChDUFApIFdlYkRPTVRlc3ROYW1lZENvbnN0cnVjdG9yLmNwcApQQVNTOiAoQ1BQ
KSBXZWJET01UZXN0TmFtZWRDb25zdHJ1Y3Rvci5oCkZBSUw6IChDUFApIFdlYkRPTVRlc3RPYmou
Y3BwCi0tLSBXZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9DUFAvV2ViRE9NVGVzdE9iai5j
cHAJMjAxMi0wMy0xNSAxNjo1MDozMy4wMDAwMDAwMDAgKzA1MzAKKysrIC92YXIvZm9sZGVycy9I
NC9INFpPUGsxUkZHR0JyUjU3bTlVWVhFKysrVE0vLVRtcC0vdG1wV2RUV1dJL1dlYkRPTVRlc3RP
YmouY3BwCTIwMTItMDMtMTUgMTY6NTY6NTguMDAwMDAwMDAwICswNTMwCkBAIC0yMSw2ICsyMSw3
IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiV2ViRE9NVGVzdE9iai5oIgogCisj
aW5jbHVkZSAiQXJyYXkuaCIKICNpbmNsdWRlICJEaWN0aW9uYXJ5LmgiCiAjaW5jbHVkZSAiRG9j
dW1lbnQuaCIKICNpbmNsdWRlICJIVE1MTmFtZXMuaCIKQEAgLTI5LDYgKzMwLDcgQEAKICNpbmNs
dWRlICJTVkdQb2ludC5oIgogI2luY2x1ZGUgIlNlcmlhbGl6ZWRTY3JpcHRWYWx1ZS5oIgogI2lu
Y2x1ZGUgIlRlc3RPYmouaCIKKyNpbmNsdWRlICJXZWJET01BcnJheS5oIgogI2luY2x1ZGUgIldl
YkRPTURpY3Rpb25hcnkuaCIKICNpbmNsdWRlICJXZWJET01Eb2N1bWVudC5oIgogI2luY2x1ZGUg
IldlYkRPTUlEQktleS5oIgpAQCAtMjMzLDYgKzIzNSwxNCBAQAogICAgIGltcGwoKS0+c2V0VGVz
dE9iakF0dHIodG9XZWJDb3JlKG5ld1Rlc3RPYmpBdHRyKSk7CiB9CiAKK1dlYkRPTUFycmF5IFdl
YkRPTVRlc3RPYmo6OmFycmF5VHlwZUF0dHJpYnV0ZSgpIGNvbnN0Cit7CisgICAgaWYgKCFpbXBs
KCkpCisgICAgICAgIHJldHVybiBXZWJET01BcnJheSgpOworCisgICAgcmV0dXJuIHRvV2ViS2l0
KFdURjo6Z2V0UHRyKGltcGwoKS0+YXJyYXlUeXBlQXR0cmlidXRlKCkpKTsKK30KKwogV2ViRE9N
VGVzdE9iaiBXZWJET01UZXN0T2JqOjpYTUxPYmpBdHRyKCkgY29uc3QKIHsKICAgICBpZiAoIWlt
cGwoKSkKCkZBSUw6IChDUFApIFdlYkRPTVRlc3RPYmouaAotLS0gV2ViQ29yZS9iaW5kaW5ncy9z
Y3JpcHRzL3Rlc3QvQ1BQL1dlYkRPTVRlc3RPYmouaAkyMDEyLTAzLTE1IDE2OjUwOjMzLjAwMDAw
MDAwMCArMDUzMAorKysgL3Zhci9mb2xkZXJzL0g0L0g0Wk9QazFSRkdHQnJSNTdtOVVZWEUrKytU
TS8tVG1wLS90bXBXZFRXV0kvV2ViRE9NVGVzdE9iai5oCTIwMTItMDMtMTUgMTY6NTY6NTguMDAw
MDAwMDAwICswNTMwCkBAIC0zMCw2ICszMCw3IEBACiBjbGFzcyBUZXN0T2JqOwogfTsKIAorY2xh
c3MgV2ViRE9NQXJyYXk7CiBjbGFzcyBXZWJET01EaWN0aW9uYXJ5OwogY2xhc3MgV2ViRE9NRG9j
dW1lbnQ7CiBjbGFzcyBXZWJET01FdmVudExpc3RlbmVyOwpAQCAtODcsNiArODgsNyBAQAogICAg
IHZvaWQgc2V0U3RyaW5nQXR0cihjb25zdCBXZWJET01TdHJpbmcmKTsKICAgICBXZWJET01UZXN0
T2JqIHRlc3RPYmpBdHRyKCkgY29uc3Q7CiAgICAgdm9pZCBzZXRUZXN0T2JqQXR0cihjb25zdCBX
ZWJET01UZXN0T2JqJik7CisgICAgV2ViRE9NQXJyYXkgYXJyYXlUeXBlQXR0cmlidXRlKCkgY29u
c3Q7CiAgICAgV2ViRE9NVGVzdE9iaiBYTUxPYmpBdHRyKCkgY29uc3Q7CiAgICAgdm9pZCBzZXRY
TUxPYmpBdHRyKGNvbnN0IFdlYkRPTVRlc3RPYmomKTsKICAgICBib29sIGNyZWF0ZSgpIGNvbnN0
OwoKUEFTUzogKENQUCkgV2ViRE9NVGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZS5j
cHAKUEFTUzogKENQUCkgV2ViRE9NVGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZS5o
ClBBU1M6IChDUFApIFdlYkRPTVRlc3RTdXBwbGVtZW50YWwuY3BwClBBU1M6IChDUFApIFdlYkRP
TVRlc3RTdXBwbGVtZW50YWwuaApQQVNTOiAoQ1BQKSBXZWJET01GbG9hdDY0QXJyYXkuY3BwClBB
U1M6IChDUFApIFdlYkRPTUZsb2F0NjRBcnJheS5oCgpTb21lIHRlc3RzIEZBSUwhIChUbyB1cGRh
dGUgdGhlIHJlZmVyZW5jZSBmaWxlcywgZXhlY3V0ZSAicnVuLWJpbmRpbmdzLXRlc3RzIC0tcmVz
ZXQtcmVzdWx0cyIpCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>132024</attachid>
            <date>2012-03-15 05:16:09 -0700</date>
            <delta_ts>2012-03-15 07:06:47 -0700</delta_ts>
            <desc>wip_patch_001</desc>
            <filename>wip_002.diff</filename>
            <type>text/plain</type>
            <size>22142</size>
            <attacher name="Vineet Chaudhary (vineetc)">code.vineet</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDExMDgzNSkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDQ2IEBACisyMDEyLTAzLTE1ICBWaW5lZXQg
Q2hhdWRoYXJ5ICA8dmluZWV0LmNoYXVkaGFyeUBtb3Rvcm9sYS5jb20+CisKKyAgICAgICAgaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTgwNjk2CisgICAgICAgIFJlbW92
ZSBjdXN0b20gYmluZGluZ3MgZm9yIGF0dHJpYnV0ZSB0eXBlIEFycmF5LiAKKworICAgICAgICBS
ZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBObyBuZXcgdGVzdHMuCisKKyAg
ICAgICAgKiBiaW5kaW5ncy9qcy9KU0NvbnNvbGVDdXN0b20uY3BwOiBSZW1vdmVkIGN1c3RvbSBj
YWxsIHByb2ZpbGVzKCkuCisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKiBiaW5kaW5ncy9q
cy9KU0RPTUJpbmRpbmcuaDogQWRkZWQgdGVtcGxhdGUganNBcnJheSgpIGltcGxlbWVudGF0aW9u
LgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChXZWJDb3JlOjpqc0FycmF5KToKKyAgICAg
ICAgKiBiaW5kaW5ncy9zY3JpcHRzL0lETEF0dHJpYnV0ZXMudHh0OiBBZGRlZCBhdHRyaWJ1dGUg
dHlwZSAiQXJyYXlUeXBlIgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9DUFAvV2Vi
RE9NVGVzdE9iai5jcHA6IEFkZGVkIGF0dHJpYnV0ZSB0ZXN0IGZvciBBcnJheSB0eXBlLgorICAg
ICAgICAoV2ViRE9NVGVzdE9iajo6YXJyYXlUeXBlQXR0cmlidXRlKToKKyAgICAgICAgKiBiaW5k
aW5ncy9zY3JpcHRzL3Rlc3QvQ1BQL1dlYkRPTVRlc3RPYmouaDogTW9kaWZpZWQgYmluZGluZ3Mg
Y29kZS4KKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvR09iamVjdC9XZWJLaXRET01U
ZXN0T2JqLmNwcDogRGl0dG8KKyAgICAgICAgKHdlYmtpdF9kb21fdGVzdF9vYmpfZ2V0X2FycmF5
X3R5cGVfYXR0cmlidXRlKToKKyAgICAgICAgKHdlYmtpdF9kb21fdGVzdF9vYmpfZ2V0X3Byb3Bl
cnR5KToKKyAgICAgICAgKHdlYmtpdF9kb21fdGVzdF9vYmpfY2xhc3NfaW5pdCk6CisgICAgICAg
ICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0dPYmplY3QvV2ViS2l0RE9NVGVzdE9iai5oOiBEaXR0
bworICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RPYmouY3BwOiBEaXR0
bworICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChXZWJDb3JlOjpqc1Rlc3RPYmpBcnJheVR5
cGVBdHRyaWJ1dGUpOgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RP
YmouaDogRGl0dG8KKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAqIGJpbmRpbmdzL3Njcmlw
dHMvdGVzdC9PYmpDL0RPTVRlc3RPYmouaDogRGl0dG8KKyAgICAgICAgKiBiaW5kaW5ncy9zY3Jp
cHRzL3Rlc3QvT2JqQy9ET01UZXN0T2JqLm1tOiBEaXR0bworICAgICAgICAoLVtET01UZXN0T2Jq
IGFycmF5VHlwZUF0dHJpYnV0ZV0pOgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9U
ZXN0T2JqLmlkbDogQWRkZWQgYXR0cmlidXRlIHRlc3QgZm9yIEFycmF5IHR5cGUuCisgICAgICAg
ICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Y4L1Y4VGVzdE9iai5jcHA6IE1vZGlmaWVkIGJpbmRp
bmdzIGNvZGUuCisgICAgICAgIChXZWJDb3JlOjpUZXN0T2JqSW50ZXJuYWw6OmFycmF5VHlwZUF0
dHJpYnV0ZUF0dHJHZXR0ZXIpOgorICAgICAgICAoVGVzdE9iakludGVybmFsKToKKyAgICAgICAg
KFdlYkNvcmUpOgorICAgICAgICAqIGJpbmRpbmdzL3Y4L1Y4QmluZGluZy5oOiBBZGRlZCB0ZW1w
bGF0ZSB2OEFycmF5KCkgaW1wbGVtZW50YXRpb24uCisgICAgICAgIChXZWJDb3JlKToKKyAgICAg
ICAgKFdlYkNvcmU6OnY4QXJyYXkpOgorICAgICAgICAqIGJpbmRpbmdzL3Y4L2N1c3RvbS9WOENv
bnNvbGVDdXN0b20uY3BwOiBSZW1vdmVkIGN1c3RvbSBjYWxsIHByb2ZpbGVzKCkuCisgICAgICAg
IChXZWJDb3JlKToKKyAgICAgICAgKiBwYWdlL0NvbnNvbGUuaWRsOiBSZW1vdmVkIFtDdXN0b21d
IGZvciBwcm9maWxlcy4KKwogMjAxMi0wMy0xMyAgTmlrb2xhcyBaaW1tZXJtYW5uICA8bnppbW1l
cm1hbm5AcmltLmNvbT4KIAogICAgICAgICBFbmFibGUgYW5pbVZhbCBzdXBwb3J0IGZvciBTVkdM
ZW5ndGhMaXN0CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0NvbnNvbGVDdXN0
b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTQ29uc29s
ZUN1c3RvbS5jcHAJKHJldmlzaW9uIDExMDgyOSkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L2pzL0pTQ29uc29sZUN1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMzLDcgKzMzLDYgQEAK
ICNpbmNsdWRlICJKU1NjcmlwdFByb2ZpbGUuaCIKICNpbmNsdWRlICJTY3JpcHRDYWxsU3RhY2su
aCIKICNpbmNsdWRlICJTY3JpcHRDYWxsU3RhY2tGYWN0b3J5LmgiCi0jaW5jbHVkZSAiU2NyaXB0
UHJvZmlsZS5oIgogI2luY2x1ZGUgPHJ1bnRpbWUvSlNBcnJheS5oPgogI2luY2x1ZGUgPHd0Zi9P
d25QdHIuaD4KIApAQCAtNDEsMjAgKzQwLDYgQEAgdXNpbmcgbmFtZXNwYWNlIEpTQzsKIAogbmFt
ZXNwYWNlIFdlYkNvcmUgewogCi10eXBlZGVmIFZlY3RvcjxSZWZQdHI8U2NyaXB0UHJvZmlsZT4g
PiBQcm9maWxlc0FycmF5OwotCi1KU1ZhbHVlIEpTQ29uc29sZTo6cHJvZmlsZXMoRXhlY1N0YXRl
KiBleGVjKSBjb25zdAotewotICAgIGNvbnN0IFByb2ZpbGVzQXJyYXkmIHByb2ZpbGVzID0gaW1w
bCgpLT5wcm9maWxlcygpOwotICAgIE1hcmtlZEFyZ3VtZW50QnVmZmVyIGxpc3Q7Ci0KLSAgICBQ
cm9maWxlc0FycmF5Ojpjb25zdF9pdGVyYXRvciBlbmQgPSBwcm9maWxlcy5lbmQoKTsKLSAgICBm
b3IgKFByb2ZpbGVzQXJyYXk6OmNvbnN0X2l0ZXJhdG9yIGl0ZXIgPSBwcm9maWxlcy5iZWdpbigp
OyBpdGVyICE9IGVuZDsgKytpdGVyKQotICAgICAgICBsaXN0LmFwcGVuZCh0b0pTKGV4ZWMsIGds
b2JhbE9iamVjdCgpLCBpdGVyLT5nZXQoKSkpOwotCi0gICAgcmV0dXJuIGNvbnN0cnVjdEFycmF5
KGV4ZWMsIGdsb2JhbE9iamVjdCgpLCBsaXN0KTsKLX0KLQogSlNWYWx1ZSBKU0NvbnNvbGU6OnBy
b2ZpbGUoRXhlY1N0YXRlKiBleGVjKQogewogICAgIFJlZlB0cjxTY3JpcHRDYWxsU3RhY2s+IGNh
bGxTdGFjayhjcmVhdGVTY3JpcHRDYWxsU3RhY2soZXhlYywgMSkpOwpJbmRleDogU291cmNlL1dl
YkNvcmUvYmluZGluZ3MvanMvSlNET01CaW5kaW5nLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvYmluZGluZ3MvanMvSlNET01CaW5kaW5nLmgJKHJldmlzaW9uIDExMDgyOSkKKysrIFNv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NQmluZGluZy5oCSh3b3JraW5nIGNvcHkpCkBA
IC0zNSw2ICszNSw3IEBACiAjaW5jbHVkZSAiU3R5bGVkRWxlbWVudC5oIgogI2luY2x1ZGUgPGhl
YXAvV2Vhay5oPgogI2luY2x1ZGUgPHJ1bnRpbWUvRnVuY3Rpb25Qcm90b3R5cGUuaD4KKyNpbmNs
dWRlIDxydW50aW1lL0pTQXJyYXkuaD4KICNpbmNsdWRlIDxydW50aW1lL0xvb2t1cC5oPgogI2lu
Y2x1ZGUgPHJ1bnRpbWUvT2JqZWN0UHJvdG90eXBlLmg+CiAjaW5jbHVkZSA8d3RmL0ZvcndhcmQu
aD4KQEAgLTI3OCw2ICsyNzksMTggQEAgZW51bSBQYXJhbWV0ZXJEZWZhdWx0UG9saWN5IHsKICAg
ICAgICAgcmV0dXJuIHRvSlMoZXhlYywgZ2xvYmFsT2JqZWN0LCBwdHIuZ2V0KCkpOwogICAgIH0K
IAorICAgIHRlbXBsYXRlPHR5cGVuYW1lIEl0ZXJhYmxlPgorICAgIEpTQzo6SlNWYWx1ZSBqc0Fy
cmF5KEpTQzo6RXhlY1N0YXRlKiBleGVjLCBKU0RPTUdsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0
LCBjb25zdCBJdGVyYWJsZSYgdmVjdG9yKQorICAgIHsKKyAgICAgICAgaWYgKHZlY3Rvci5pc0Vt
cHR5KCkpCisgICAgICAgICAgICByZXR1cm4gSlNDOjpqc051bGwoKTsKKyAgICAgICAgSlNDOjpN
YXJrZWRBcmd1bWVudEJ1ZmZlciBsaXN0OworICAgICAgICB0eXBlbmFtZSBJdGVyYWJsZTo6Y29u
c3RfaXRlcmF0b3IgZW5kID0gdmVjdG9yLmVuZCgpOworICAgICAgICBmb3IgKHR5cGVuYW1lIEl0
ZXJhYmxlOjpjb25zdF9pdGVyYXRvciBpdGVyID0gdmVjdG9yLmJlZ2luKCk7IGl0ZXIgIT0gZW5k
OyArK2l0ZXIpCisgICAgICAgICAgICBsaXN0LmFwcGVuZCh0b0pTKGV4ZWMsIGdsb2JhbE9iamVj
dCwgV1RGOjpnZXRQdHIoKml0ZXIpKSk7CisgICAgICAgIHJldHVybiBKU0M6OmNvbnN0cnVjdEFy
cmF5KGV4ZWMsIGxpc3QpOworICAgICB9CisKICAgICAvLyBWYWxpZGF0ZXMgdGhhdCB0aGUgcGFz
c2VkIG9iamVjdCBpcyBhIHNlcXVlbmNlIHR5cGUgcGVyIHNlY3Rpb24gNC4xLjEzIG9mIHRoZSBX
ZWJJREwgc3BlYy4KICAgICBKU0M6OkpTT2JqZWN0KiB0b0pTU2VxdWVuY2UoSlNDOjpFeGVjU3Rh
dGUqLCBKU0M6OkpTVmFsdWUsIHVuc2lnbmVkJik7CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL3NjcmlwdHMvSURMQXR0cmlidXRlcy50eHQKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvYmluZGluZ3Mvc2NyaXB0cy9JRExBdHRyaWJ1dGVzLnR4dAkocmV2aXNpb24gMTEwODM1
KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy9JRExBdHRyaWJ1dGVzLnR4dAko
d29ya2luZyBjb3B5KQpAQCAtMTgsNiArMTgsNyBAQAogIyAgICAgICBlLmcuIFtBVFRSPUlOREVY
RURfREFUQUJBU0VdLCBbQVRUUj1kZWxldGVGdW5jdGlvbl0uCiAjCiAKK0FycmF5VHlwZT0qCiBB
Y3RpdmVET01PYmplY3QKIENQUFB1cmVJbnRlcmZhY2UKIENhY2hlZEF0dHJpYnV0ZQpJbmRleDog
U291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Rlc3RPYmouaWRsCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9UZXN0T2JqLmlkbAko
cmV2aXNpb24gMTEwODM1KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0
L1Rlc3RPYmouaWRsCSh3b3JraW5nIGNvcHkpCkBAIC00NSw2ICs0NSw3IEBAIG1vZHVsZSB0ZXN0
IHsKICAgICAgICAgYXR0cmlidXRlIHVuc2lnbmVkIGxvbmcgbG9uZyAgICAgICB1bnNpZ25lZExv
bmdMb25nQXR0cjsKICAgICAgICAgYXR0cmlidXRlIERPTVN0cmluZyAgICAgICAgICAgICAgICBz
dHJpbmdBdHRyOwogICAgICAgICBhdHRyaWJ1dGUgVGVzdE9iaiAgICAgICAgICAgICAgICAgIHRl
c3RPYmpBdHRyOworICAgICAgICByZWFkb25seSBhdHRyaWJ1dGUgW0FycmF5VHlwZT1TY3JpcHRQ
cm9maWxlXSBBcnJheSBhcnJheVR5cGVBdHRyaWJ1dGU7CiAKICAgICAgICAgSlMsIFY4CiAgICAg
ICAgIC8vIFdLX3VjZmlyc3QsIFdLX2xjZmlyc3QgZXhjZXB0aW9uYWwgY2FzZXMuCkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvQ1BQL1dlYkRPTVRlc3RPYmouY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9DUFAv
V2ViRE9NVGVzdE9iai5jcHAJKHJldmlzaW9uIDExMDgzNSkKKysrIFNvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL3NjcmlwdHMvdGVzdC9DUFAvV2ViRE9NVGVzdE9iai5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTIxLDYgKzIxLDcgQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJXZWJET01U
ZXN0T2JqLmgiCiAKKyNpbmNsdWRlICJBcnJheS5oIgogI2luY2x1ZGUgIkRpY3Rpb25hcnkuaCIK
ICNpbmNsdWRlICJEb2N1bWVudC5oIgogI2luY2x1ZGUgIkhUTUxOYW1lcy5oIgpAQCAtMjksNiAr
MzAsNyBAQAogI2luY2x1ZGUgIlNWR1BvaW50LmgiCiAjaW5jbHVkZSAiU2VyaWFsaXplZFNjcmlw
dFZhbHVlLmgiCiAjaW5jbHVkZSAiVGVzdE9iai5oIgorI2luY2x1ZGUgIldlYkRPTUFycmF5Lmgi
CiAjaW5jbHVkZSAiV2ViRE9NRGljdGlvbmFyeS5oIgogI2luY2x1ZGUgIldlYkRPTURvY3VtZW50
LmgiCiAjaW5jbHVkZSAiV2ViRE9NSURCS2V5LmgiCkBAIC0yMzMsNiArMjM1LDE0IEBAIHZvaWQg
V2ViRE9NVGVzdE9iajo6c2V0VGVzdE9iakF0dHIoY29uc3QKICAgICBpbXBsKCktPnNldFRlc3RP
YmpBdHRyKHRvV2ViQ29yZShuZXdUZXN0T2JqQXR0cikpOwogfQogCitXZWJET01BcnJheSBXZWJE
T01UZXN0T2JqOjphcnJheVR5cGVBdHRyaWJ1dGUoKSBjb25zdAoreworICAgIGlmICghaW1wbCgp
KQorICAgICAgICByZXR1cm4gV2ViRE9NQXJyYXkoKTsKKworICAgIHJldHVybiB0b1dlYktpdChX
VEY6OmdldFB0cihpbXBsKCktPmFycmF5VHlwZUF0dHJpYnV0ZSgpKSk7Cit9CisKIFdlYkRPTVRl
c3RPYmogV2ViRE9NVGVzdE9iajo6WE1MT2JqQXR0cigpIGNvbnN0CiB7CiAgICAgaWYgKCFpbXBs
KCkpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvQ1BQL1dlYkRP
TVRlc3RPYmouaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRz
L3Rlc3QvQ1BQL1dlYkRPTVRlc3RPYmouaAkocmV2aXNpb24gMTEwODM1KQorKysgU291cmNlL1dl
YkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0NQUC9XZWJET01UZXN0T2JqLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTMwLDYgKzMwLDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogY2xhc3MgVGVzdE9i
ajsKIH07CiAKK2NsYXNzIFdlYkRPTUFycmF5OwogY2xhc3MgV2ViRE9NRGljdGlvbmFyeTsKIGNs
YXNzIFdlYkRPTURvY3VtZW50OwogY2xhc3MgV2ViRE9NRXZlbnRMaXN0ZW5lcjsKQEAgLTg3LDYg
Kzg4LDcgQEAgcHVibGljOgogICAgIHZvaWQgc2V0U3RyaW5nQXR0cihjb25zdCBXZWJET01TdHJp
bmcmKTsKICAgICBXZWJET01UZXN0T2JqIHRlc3RPYmpBdHRyKCkgY29uc3Q7CiAgICAgdm9pZCBz
ZXRUZXN0T2JqQXR0cihjb25zdCBXZWJET01UZXN0T2JqJik7CisgICAgV2ViRE9NQXJyYXkgYXJy
YXlUeXBlQXR0cmlidXRlKCkgY29uc3Q7CiAgICAgV2ViRE9NVGVzdE9iaiBYTUxPYmpBdHRyKCkg
Y29uc3Q7CiAgICAgdm9pZCBzZXRYTUxPYmpBdHRyKGNvbnN0IFdlYkRPTVRlc3RPYmomKTsKICAg
ICBib29sIGNyZWF0ZSgpIGNvbnN0OwpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2Ny
aXB0cy90ZXN0L0dPYmplY3QvV2ViS2l0RE9NVGVzdE9iai5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0dPYmplY3QvV2ViS2l0RE9NVGVzdE9i
ai5jcHAJKHJldmlzaW9uIDExMDgzNSkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Njcmlw
dHMvdGVzdC9HT2JqZWN0L1dlYktpdERPTVRlc3RPYmouY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0y
Myw2ICsyMyw3IEBACiAKICNpbmNsdWRlIDx3dGYvR2V0UHRyLmg+CiAjaW5jbHVkZSA8d3RmL1Jl
ZlB0ci5oPgorI2luY2x1ZGUgIkFycmF5LmgiCiAjaW5jbHVkZSAiRE9NT2JqZWN0Q2FjaGUuaCIK
ICNpbmNsdWRlICJEb2N1bWVudC5oIgogI2luY2x1ZGUgIkV4Y2VwdGlvbkNvZGUuaCIKQEAgLTMz
LDYgKzM0LDggQEAKICNpbmNsdWRlICJXZWJLaXRET01CaW5kaW5nLmgiCiAjaW5jbHVkZSAiYm9v
bC5oIgogI2luY2x1ZGUgImdvYmplY3QvQ29udmVydFRvVVRGOFN0cmluZy5oIgorI2luY2x1ZGUg
IndlYmtpdC9XZWJLaXRET01BcnJheS5oIgorI2luY2x1ZGUgIndlYmtpdC9XZWJLaXRET01BcnJh
eVByaXZhdGUuaCIKICNpbmNsdWRlICJ3ZWJraXQvV2ViS2l0RE9NRGljdGlvbmFyeS5oIgogI2lu
Y2x1ZGUgIndlYmtpdC9XZWJLaXRET01EaWN0aW9uYXJ5UHJpdmF0ZS5oIgogI2luY2x1ZGUgIndl
YmtpdC9XZWJLaXRET01Eb2N1bWVudC5oIgpAQCAtNzc5LDYgKzc4MiwxNyBAQCB3ZWJraXRfZG9t
X3Rlc3Rfb2JqX3NldF90ZXN0X29ial9hdHRyKFdlCiAgICAgaXRlbS0+c2V0VGVzdE9iakF0dHIo
Y29udmVydGVkX3ZhbHVlKTsKIH0KIAorV2ViS2l0RE9NQXJyYXkqCit3ZWJraXRfZG9tX3Rlc3Rf
b2JqX2dldF9hcnJheV90eXBlX2F0dHJpYnV0ZShXZWJLaXRET01UZXN0T2JqKiBzZWxmKQorewor
ICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKHNlbGYsIDApOworICAgIFdlYkNvcmU6OkpTTWFpblRo
cmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBXZWJDb3JlOjpUZXN0T2JqICogaXRlbSA9IFdlYktp
dDo6Y29yZShzZWxmKTsKKyAgICBQYXNzUmVmUHRyPFdlYkNvcmU6OkFycmF5PiBnX3JlcyA9IFdU
Rjo6Z2V0UHRyKGl0ZW0tPmFycmF5VHlwZUF0dHJpYnV0ZSgpKTsKKyAgICBXZWJLaXRET01BcnJh
eSogcmVzID0gV2ViS2l0OjpraXQoZ19yZXMuZ2V0KCkpOworICAgIHJldHVybiByZXM7Cit9CisK
IFdlYktpdERPTVRlc3RPYmoqCiB3ZWJraXRfZG9tX3Rlc3Rfb2JqX2dldF94bWxfb2JqX2F0dHIo
V2ViS2l0RE9NVGVzdE9iaiogc2VsZikKIHsKQEAgLTE1MzgsNiArMTU1Miw3IEBAIGVudW0gewog
ICAgIFBST1BfVU5TSUdORURfTE9OR19MT05HX0FUVFIsCiAgICAgUFJPUF9TVFJJTkdfQVRUUiwK
ICAgICBQUk9QX1RFU1RfT0JKX0FUVFIsCisgICAgUFJPUF9BUlJBWV9UWVBFX0FUVFJJQlVURSwK
ICAgICBQUk9QX1hNTF9PQkpfQVRUUiwKICAgICBQUk9QX0NSRUFURSwKICAgICBQUk9QX1JFRkxF
Q1RFRF9TVFJJTkdfQVRUUiwKQEAgLTE3OTcsNiArMTgxMiwxMiBAQCBzdGF0aWMgdm9pZCB3ZWJr
aXRfZG9tX3Rlc3Rfb2JqX2dldF9wcm9wCiAgICAgICAgIGdfdmFsdWVfc2V0X29iamVjdCh2YWx1
ZSwgV2ViS2l0OjpraXQocHRyLmdldCgpKSk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KKyAgICBj
YXNlIFBST1BfQVJSQVlfVFlQRV9BVFRSSUJVVEU6CisgICAgeworICAgICAgICBSZWZQdHI8V2Vi
Q29yZTo6QXJyYXk+IHB0ciA9IGNvcmVTZWxmLT5hcnJheVR5cGVBdHRyaWJ1dGUoKTsKKyAgICAg
ICAgZ192YWx1ZV9zZXRfb2JqZWN0KHZhbHVlLCBXZWJLaXQ6OmtpdChwdHIuZ2V0KCkpKTsKKyAg
ICAgICAgYnJlYWs7CisgICAgfQogICAgIGNhc2UgUFJPUF9YTUxfT0JKX0FUVFI6CiAgICAgewog
ICAgICAgICBSZWZQdHI8V2ViQ29yZTo6VGVzdE9iaj4gcHRyID0gY29yZVNlbGYtPnhtbE9iakF0
dHIoKTsKQEAgLTIwODksNiArMjExMCwxMyBAQCBHX01BWFVJTlQ2NCwgLyogbWluICovCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdF
QktJVF9UWVBFX0RPTV9URVNUX09CSiwgLyogZ29iamVjdCB0eXBlICovCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdFQktJVF9QQVJB
TV9SRUFEV1JJVEUpKTsKICAgICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5KGdvYmpl
Y3RDbGFzcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBST1BfQVJSQVlf
VFlQRV9BVFRSSUJVVEUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnX3Bh
cmFtX3NwZWNfb2JqZWN0KCJhcnJheS10eXBlLWF0dHJpYnV0ZSIsIC8qIG5hbWUgKi8KKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInRl
c3Rfb2JqX2FycmF5LXR5cGUtYXR0cmlidXRlIiwgLyogc2hvcnQgZGVzY3JpcHRpb24gKi8KKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
InJlYWQtb25seSAgV2ViS2l0RE9NQXJyYXkqIFRlc3RPYmouYXJyYXktdHlwZS1hdHRyaWJ1dGUi
LCAvKiBsb25nZXIgLSBjb3VsZCBkbyB3aXRoIHNvbWUgZXh0cmEgZG9jIHN0dWZmIGhlcmUgKi8K
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgV0VCS0lUX1RZUEVfRE9NX0FSUkFZLCAvKiBnb2JqZWN0IHR5cGUgKi8KKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgV0VCS0lUX1BB
UkFNX1JFQURBQkxFKSk7CisgICAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eShnb2Jq
ZWN0Q2xhc3MsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQUk9QX1hNTF9P
QkpfQVRUUiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdfcGFyYW1fc3Bl
Y19vYmplY3QoInhtbC1vYmotYXR0ciIsIC8qIG5hbWUgKi8KICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInRlc3Rfb2JqX3htbC1vYmot
YXR0ciIsIC8qIHNob3J0IGRlc2NyaXB0aW9uICovCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9zY3JpcHRzL3Rlc3QvR09iamVjdC9XZWJLaXRET01UZXN0T2JqLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0dPYmplY3QvV2ViS2l0RE9N
VGVzdE9iai5oCShyZXZpc2lvbiAxMTA4MzUpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9z
Y3JpcHRzL3Rlc3QvR09iamVjdC9XZWJLaXRET01UZXN0T2JqLmgJKHdvcmtpbmcgY29weSkKQEAg
LTY3NSw2ICs2NzUsMTYgQEAgV0VCS0lUX0FQSSB2b2lkCiB3ZWJraXRfZG9tX3Rlc3Rfb2JqX3Nl
dF90ZXN0X29ial9hdHRyKFdlYktpdERPTVRlc3RPYmoqIHNlbGYsIFdlYktpdERPTVRlc3RPYmoq
IHZhbHVlKTsKIAogLyoqCisgKiB3ZWJraXRfZG9tX3Rlc3Rfb2JqX2dldF9hcnJheV90eXBlX2F0
dHJpYnV0ZToKKyAqIEBzZWxmOiBBICNXZWJLaXRET01UZXN0T2JqCisgKgorICogUmV0dXJuczog
KHRyYW5zZmVyIG5vbmUpOgorICoKKyoqLworV0VCS0lUX0FQSSBXZWJLaXRET01BcnJheSoKK3dl
YmtpdF9kb21fdGVzdF9vYmpfZ2V0X2FycmF5X3R5cGVfYXR0cmlidXRlKFdlYktpdERPTVRlc3RP
YmoqIHNlbGYpOworCisvKioKICAqIHdlYmtpdF9kb21fdGVzdF9vYmpfZ2V0X3htbF9vYmpfYXR0
cjoKICAqIEBzZWxmOiBBICNXZWJLaXRET01UZXN0T2JqCiAgKgpJbmRleDogU291cmNlL1dlYkNv
cmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE9iai5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE9iai5jcHAJKHJl
dmlzaW9uIDExMDgzNSkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9K
Uy9KU1Rlc3RPYmouY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMSwxMiArMjEsMTQgQEAKICNpbmNs
dWRlICJjb25maWcuaCIKICNpbmNsdWRlICJKU1Rlc3RPYmouaCIKIAorI2luY2x1ZGUgIkFycmF5
LmgiCiAjaW5jbHVkZSAiRGljdGlvbmFyeS5oIgogI2luY2x1ZGUgIkRvY3VtZW50LmgiCiAjaW5j
bHVkZSAiRXhjZXB0aW9uQ29kZS5oIgogI2luY2x1ZGUgIkhUTUxOYW1lcy5oIgogI2luY2x1ZGUg
IklEQkJpbmRpbmdVdGlsaXRpZXMuaCIKICNpbmNsdWRlICJJREJLZXkuaCIKKyNpbmNsdWRlICJK
U0FycmF5LmgiCiAjaW5jbHVkZSAiSlNET01CaW5kaW5nLmgiCiAjaW5jbHVkZSAiSlNET01TdHJp
bmdMaXN0LmgiCiAjaW5jbHVkZSAiSlNEb2N1bWVudC5oIgpAQCAtODYsNiArODgsNyBAQCBzdGF0
aWMgY29uc3QgSGFzaFRhYmxlVmFsdWUgSlNUZXN0T2JqVGFiCiAgICAgeyAidW5zaWduZWRMb25n
TG9uZ0F0dHIiLCBEb250RGVsZXRlLCAoaW50cHRyX3Qpc3RhdGljX2Nhc3Q8UHJvcGVydHlTbG90
OjpHZXRWYWx1ZUZ1bmM+KGpzVGVzdE9ialVuc2lnbmVkTG9uZ0xvbmdBdHRyKSwgKGludHB0cl90
KXNldEpTVGVzdE9ialVuc2lnbmVkTG9uZ0xvbmdBdHRyLCBOb0ludHJpbnNpYyB9LAogICAgIHsg
InN0cmluZ0F0dHIiLCBEb250RGVsZXRlLCAoaW50cHRyX3Qpc3RhdGljX2Nhc3Q8UHJvcGVydHlT
bG90OjpHZXRWYWx1ZUZ1bmM+KGpzVGVzdE9ialN0cmluZ0F0dHIpLCAoaW50cHRyX3Qpc2V0SlNU
ZXN0T2JqU3RyaW5nQXR0ciwgTm9JbnRyaW5zaWMgfSwKICAgICB7ICJ0ZXN0T2JqQXR0ciIsIERv
bnREZWxldGUsIChpbnRwdHJfdClzdGF0aWNfY2FzdDxQcm9wZXJ0eVNsb3Q6OkdldFZhbHVlRnVu
Yz4oanNUZXN0T2JqVGVzdE9iakF0dHIpLCAoaW50cHRyX3Qpc2V0SlNUZXN0T2JqVGVzdE9iakF0
dHIsIE5vSW50cmluc2ljIH0sCisgICAgeyAiYXJyYXlUeXBlQXR0cmlidXRlIiwgRG9udERlbGV0
ZSB8IFJlYWRPbmx5LCAoaW50cHRyX3Qpc3RhdGljX2Nhc3Q8UHJvcGVydHlTbG90OjpHZXRWYWx1
ZUZ1bmM+KGpzVGVzdE9iakFycmF5VHlwZUF0dHJpYnV0ZSksIChpbnRwdHJfdCkwLCBOb0ludHJp
bnNpYyB9LAogICAgIHsgIlhNTE9iakF0dHIiLCBEb250RGVsZXRlLCAoaW50cHRyX3Qpc3RhdGlj
X2Nhc3Q8UHJvcGVydHlTbG90OjpHZXRWYWx1ZUZ1bmM+KGpzVGVzdE9ialhNTE9iakF0dHIpLCAo
aW50cHRyX3Qpc2V0SlNUZXN0T2JqWE1MT2JqQXR0ciwgTm9JbnRyaW5zaWMgfSwKICAgICB7ICJj
cmVhdGUiLCBEb250RGVsZXRlLCAoaW50cHRyX3Qpc3RhdGljX2Nhc3Q8UHJvcGVydHlTbG90OjpH
ZXRWYWx1ZUZ1bmM+KGpzVGVzdE9iakNyZWF0ZSksIChpbnRwdHJfdClzZXRKU1Rlc3RPYmpDcmVh
dGUsIE5vSW50cmluc2ljIH0sCiAgICAgeyAicmVmbGVjdGVkU3RyaW5nQXR0ciIsIERvbnREZWxl
dGUsIChpbnRwdHJfdClzdGF0aWNfY2FzdDxQcm9wZXJ0eVNsb3Q6OkdldFZhbHVlRnVuYz4oanNU
ZXN0T2JqUmVmbGVjdGVkU3RyaW5nQXR0ciksIChpbnRwdHJfdClzZXRKU1Rlc3RPYmpSZWZsZWN0
ZWRTdHJpbmdBdHRyLCBOb0ludHJpbnNpYyB9LApAQCAtNDY2LDYgKzQ2OSwxNiBAQCBKU1ZhbHVl
IGpzVGVzdE9ialRlc3RPYmpBdHRyKEV4ZWNTdGF0ZSogCiB9CiAKIAorSlNWYWx1ZSBqc1Rlc3RP
YmpBcnJheVR5cGVBdHRyaWJ1dGUoRXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVlIHNsb3RCYXNlLCBj
b25zdCBJZGVudGlmaWVyJikKK3sKKyAgICBKU1Rlc3RPYmoqIGNhc3RlZFRoaXMgPSBzdGF0aWNf
Y2FzdDxKU1Rlc3RPYmoqPihhc09iamVjdChzbG90QmFzZSkpOworICAgIFVOVVNFRF9QQVJBTShl
eGVjKTsKKyAgICBUZXN0T2JqKiBpbXBsID0gc3RhdGljX2Nhc3Q8VGVzdE9iaio+KGNhc3RlZFRo
aXMtPmltcGwoKSk7CisgICAgSlNWYWx1ZSByZXN1bHQgPSB0b0pTKGV4ZWMsIGNhc3RlZFRoaXMt
Pmdsb2JhbE9iamVjdCgpLCBXVEY6OmdldFB0cihpbXBsLT5hcnJheVR5cGVBdHRyaWJ1dGUoKSkp
OworICAgIHJldHVybiByZXN1bHQ7Cit9CisKKwogSlNWYWx1ZSBqc1Rlc3RPYmpYTUxPYmpBdHRy
KEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZSBzbG90QmFzZSwgY29uc3QgSWRlbnRpZmllciYpCiB7
CiAgICAgSlNUZXN0T2JqKiBjYXN0ZWRUaGlzID0gc3RhdGljX2Nhc3Q8SlNUZXN0T2JqKj4oYXNP
YmplY3Qoc2xvdEJhc2UpKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMv
dGVzdC9KUy9KU1Rlc3RPYmouaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0T2JqLmgJKHJldmlzaW9uIDExMDgzNSkKKysrIFNvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RPYmouaAkod29ya2luZyBj
b3B5KQpAQCAtMjMxLDYgKzIzMSw3IEBAIEpTQzo6SlNWYWx1ZSBqc1Rlc3RPYmpTdHJpbmdBdHRy
KEpTQzo6RXgKIHZvaWQgc2V0SlNUZXN0T2JqU3RyaW5nQXR0cihKU0M6OkV4ZWNTdGF0ZSosIEpT
Qzo6SlNPYmplY3QqLCBKU0M6OkpTVmFsdWUpOwogSlNDOjpKU1ZhbHVlIGpzVGVzdE9ialRlc3RP
YmpBdHRyKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpKU1ZhbHVlLCBjb25zdCBKU0M6OklkZW50aWZp
ZXImKTsKIHZvaWQgc2V0SlNUZXN0T2JqVGVzdE9iakF0dHIoSlNDOjpFeGVjU3RhdGUqLCBKU0M6
OkpTT2JqZWN0KiwgSlNDOjpKU1ZhbHVlKTsKK0pTQzo6SlNWYWx1ZSBqc1Rlc3RPYmpBcnJheVR5
cGVBdHRyaWJ1dGUoSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkpTVmFsdWUsIGNvbnN0IEpTQzo6SWRl
bnRpZmllciYpOwogSlNDOjpKU1ZhbHVlIGpzVGVzdE9ialhNTE9iakF0dHIoSlNDOjpFeGVjU3Rh
dGUqLCBKU0M6OkpTVmFsdWUsIGNvbnN0IEpTQzo6SWRlbnRpZmllciYpOwogdm9pZCBzZXRKU1Rl
c3RPYmpYTUxPYmpBdHRyKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpKU09iamVjdCosIEpTQzo6SlNW
YWx1ZSk7CiBKU0M6OkpTVmFsdWUganNUZXN0T2JqQ3JlYXRlKEpTQzo6RXhlY1N0YXRlKiwgSlND
OjpKU1ZhbHVlLCBjb25zdCBKU0M6OklkZW50aWZpZXImKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9PYmpDL0RPTVRlc3RPYmouaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvT2JqQy9ET01UZXN0T2JqLmgJKHJl
dmlzaW9uIDExMDgzNSkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9P
YmpDL0RPTVRlc3RPYmouaAkod29ya2luZyBjb3B5KQpAQCAtMjgsNiArMjgsNyBAQAogCiAjaWYg
V0VCS0lUX1ZFUlNJT05fTUFYX0FMTE9XRUQgPj0gV0VCS0lUX1ZFUlNJT05fTEFURVNUCiAKK0Bj
bGFzcyBET01BcnJheTsKIEBjbGFzcyBET01EaWN0aW9uYXJ5OwogQGNsYXNzIERPTURvY3VtZW50
OwogQGNsYXNzIERPTUlEQktleTsKQEAgLTgyLDYgKzgzLDcgQEAgZW51bSB7CiAtICh2b2lkKXNl
dFN0cmluZ0F0dHI6KE5TU3RyaW5nICopbmV3U3RyaW5nQXR0cjsKIC0gKERPTVRlc3RPYmogKil0
ZXN0T2JqQXR0cjsKIC0gKHZvaWQpc2V0VGVzdE9iakF0dHI6KERPTVRlc3RPYmogKiluZXdUZXN0
T2JqQXR0cjsKKy0gKERPTUFycmF5ICopYXJyYXlUeXBlQXR0cmlidXRlOwogLSAoRE9NVGVzdE9i
aiAqKVhNTE9iakF0dHI7CiAtICh2b2lkKXNldFhNTE9iakF0dHI6KERPTVRlc3RPYmogKiluZXdY
TUxPYmpBdHRyOwogLSAoQk9PTCljcmVhdGU7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy9zY3JpcHRzL3Rlc3QvT2JqQy9ET01UZXN0T2JqLm1tCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9PYmpDL0RPTVRlc3RPYmoubW0JKHJldmlzaW9u
IDExMDgzNSkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9PYmpDL0RP
TVRlc3RPYmoubW0JKHdvcmtpbmcgY29weSkKQEAgLTI5LDYgKzI5LDggQEAKIAogI2ltcG9ydCAi
RE9NVGVzdE9iai5oIgogCisjaW1wb3J0ICJBcnJheS5oIgorI2ltcG9ydCAiRE9NQXJyYXlJbnRl
cm5hbC5oIgogI2ltcG9ydCAiRE9NQmxvYkludGVybmFsLmgiCiAjaW1wb3J0ICJET01DU1NSdWxl
SW50ZXJuYWwuaCIKICNpbXBvcnQgIkRPTUNTU1ZhbHVlSW50ZXJuYWwuaCIKQEAgLTIwMiw2ICsy
MDQsMTIgQEAgLSAodm9pZClzZXRUZXN0T2JqQXR0cjooRE9NVGVzdE9iaiAqKW5ldwogICAgIElN
UEwtPnNldFRlc3RPYmpBdHRyKGNvcmUobmV3VGVzdE9iakF0dHIpKTsKIH0KIAorLSAoRE9NQXJy
YXkgKilhcnJheVR5cGVBdHRyaWJ1dGUKK3sKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxs
U3RhdGUgc3RhdGU7CisgICAgcmV0dXJuIGtpdChXVEY6OmdldFB0cihJTVBMLT5hcnJheVR5cGVB
dHRyaWJ1dGUoKSkpOworfQorCiAtIChET01UZXN0T2JqICopWE1MT2JqQXR0cgogewogICAgIFdl
YkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9WOC9WOFRlc3RPYmouY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9WOC9WOFRlc3RPYmouY3BwCShyZXZp
c2lvbiAxMTA4MzUpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvVjgv
VjhUZXN0T2JqLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzMsNiArMzMsNyBAQAogI2luY2x1ZGUg
IlNjcmlwdENhbGxTdGFjay5oIgogI2luY2x1ZGUgIlNjcmlwdENhbGxTdGFja0ZhY3RvcnkuaCIK
ICNpbmNsdWRlICJTZXJpYWxpemVkU2NyaXB0VmFsdWUuaCIKKyNpbmNsdWRlICJWOEFycmF5Lmgi
CiAjaW5jbHVkZSAiVjhCaW5kaW5nLmgiCiAjaW5jbHVkZSAiVjhCaW5kaW5nTWFjcm9zLmgiCiAj
aW5jbHVkZSAiVjhCaW5kaW5nU3RhdGUuaCIKQEAgLTIxNyw2ICsyMTgsMjAgQEAgc3RhdGljIHZv
aWQgdGVzdE9iakF0dHJBdHRyU2V0dGVyKHY4OjpMbwogICAgIHJldHVybjsKIH0KIAorc3RhdGlj
IHY4OjpIYW5kbGU8djg6OlZhbHVlPiBhcnJheVR5cGVBdHRyaWJ1dGVBdHRyR2V0dGVyKHY4OjpM
b2NhbDx2ODo6U3RyaW5nPiBuYW1lLCBjb25zdCB2ODo6QWNjZXNzb3JJbmZvJiBpbmZvKQorewor
ICAgIElOQ19TVEFUUygiRE9NLlRlc3RPYmouYXJyYXlUeXBlQXR0cmlidXRlLl9nZXQiKTsKKyAg
ICBUZXN0T2JqKiBpbXAgPSBWOFRlc3RPYmo6OnRvTmF0aXZlKGluZm8uSG9sZGVyKCkpOworICAg
IFJlZlB0cjxBcnJheT4gcmVzdWx0ID0gaW1wLT5hcnJheVR5cGVBdHRyaWJ1dGUoKTsKKyAgICB2
ODo6SGFuZGxlPHY4OjpWYWx1ZT4gd3JhcHBlciA9IHJlc3VsdC5nZXQoKSA/IGdldERPTU9iamVj
dE1hcCgpLmdldChyZXN1bHQuZ2V0KCkpIDogdjg6OkhhbmRsZTx2ODo6T2JqZWN0PigpOworICAg
IGlmICh3cmFwcGVyLklzRW1wdHkoKSkgeworICAgICAgICB3cmFwcGVyID0gdG9WOChyZXN1bHQu
Z2V0KCkpOworICAgICAgICBpZiAoIXdyYXBwZXIuSXNFbXB0eSgpKQorICAgICAgICAgICAgVjhE
T01XcmFwcGVyOjpzZXROYW1lZEhpZGRlblJlZmVyZW5jZShpbmZvLkhvbGRlcigpLCAiYXJyYXlU
eXBlQXR0cmlidXRlIiwgd3JhcHBlcik7CisgICAgfQorICAgIHJldHVybiB3cmFwcGVyOworfQor
CiBzdGF0aWMgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IFhNTE9iakF0dHJBdHRyR2V0dGVyKHY4OjpM
b2NhbDx2ODo6U3RyaW5nPiBuYW1lLCBjb25zdCB2ODo6QWNjZXNzb3JJbmZvJiBpbmZvKQogewog
ICAgIElOQ19TVEFUUygiRE9NLlRlc3RPYmouWE1MT2JqQXR0ci5fZ2V0Iik7CkBAIC0xNzYxLDYg
KzE3NzYsOCBAQCBzdGF0aWMgY29uc3QgQmF0Y2hlZEF0dHJpYnV0ZSBUZXN0T2JqQXR0CiAgICAg
eyJzdHJpbmdBdHRyIiwgVGVzdE9iakludGVybmFsOjpzdHJpbmdBdHRyQXR0ckdldHRlciwgVGVz
dE9iakludGVybmFsOjpzdHJpbmdBdHRyQXR0clNldHRlciwgMCAvKiBubyBkYXRhICovLCBzdGF0
aWNfY2FzdDx2ODo6QWNjZXNzQ29udHJvbD4odjg6OkRFRkFVTFQpLCBzdGF0aWNfY2FzdDx2ODo6
UHJvcGVydHlBdHRyaWJ1dGU+KHY4OjpOb25lKSwgMCAvKiBvbiBpbnN0YW5jZSAqL30sCiAgICAg
Ly8gQXR0cmlidXRlICd0ZXN0T2JqQXR0cicgKFR5cGU6ICdhdHRyaWJ1dGUnIEV4dEF0dHI6ICcn
KQogICAgIHsidGVzdE9iakF0dHIiLCBUZXN0T2JqSW50ZXJuYWw6OnRlc3RPYmpBdHRyQXR0ckdl
dHRlciwgVGVzdE9iakludGVybmFsOjp0ZXN0T2JqQXR0ckF0dHJTZXR0ZXIsIDAgLyogbm8gZGF0
YSAqLywgc3RhdGljX2Nhc3Q8djg6OkFjY2Vzc0NvbnRyb2w+KHY4OjpERUZBVUxUKSwgc3RhdGlj
X2Nhc3Q8djg6OlByb3BlcnR5QXR0cmlidXRlPih2ODo6Tm9uZSksIDAgLyogb24gaW5zdGFuY2Ug
Ki99LAorICAgIC8vIEF0dHJpYnV0ZSAnYXJyYXlUeXBlQXR0cmlidXRlJyAoVHlwZTogJ3JlYWRv
bmx5IGF0dHJpYnV0ZScgRXh0QXR0cjogJ0FycmF5VHlwZScpCisgICAgeyJhcnJheVR5cGVBdHRy
aWJ1dGUiLCBUZXN0T2JqSW50ZXJuYWw6OmFycmF5VHlwZUF0dHJpYnV0ZUF0dHJHZXR0ZXIsIDAs
IDAgLyogbm8gZGF0YSAqLywgc3RhdGljX2Nhc3Q8djg6OkFjY2Vzc0NvbnRyb2w+KHY4OjpERUZB
VUxUKSwgc3RhdGljX2Nhc3Q8djg6OlByb3BlcnR5QXR0cmlidXRlPih2ODo6Tm9uZSksIDAgLyog
b24gaW5zdGFuY2UgKi99LAogICAgIC8vIEF0dHJpYnV0ZSAnWE1MT2JqQXR0cicgKFR5cGU6ICdh
dHRyaWJ1dGUnIEV4dEF0dHI6ICcnKQogICAgIHsiWE1MT2JqQXR0ciIsIFRlc3RPYmpJbnRlcm5h
bDo6WE1MT2JqQXR0ckF0dHJHZXR0ZXIsIFRlc3RPYmpJbnRlcm5hbDo6WE1MT2JqQXR0ckF0dHJT
ZXR0ZXIsIDAgLyogbm8gZGF0YSAqLywgc3RhdGljX2Nhc3Q8djg6OkFjY2Vzc0NvbnRyb2w+KHY4
OjpERUZBVUxUKSwgc3RhdGljX2Nhc3Q8djg6OlByb3BlcnR5QXR0cmlidXRlPih2ODo6Tm9uZSks
IDAgLyogb24gaW5zdGFuY2UgKi99LAogICAgIC8vIEF0dHJpYnV0ZSAnY3JlYXRlJyAoVHlwZTog
J2F0dHJpYnV0ZScgRXh0QXR0cjogJycpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92
OC9WOEJpbmRpbmcuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9W
OEJpbmRpbmcuaAkocmV2aXNpb24gMTEwODI5KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
djgvVjhCaW5kaW5nLmgJKHdvcmtpbmcgY29weSkKQEAgLTI4Niw2ICsyODYsMTkgQEAgbmFtZXNw
YWNlIFdlYkNvcmUgewogICAgICAgICByZXR1cm4gdjhFeHRlcm5hbFN0cmluZyhzdHJpbmcpOwog
ICAgIH0KIAorICAgIHRlbXBsYXRlPHR5cGVuYW1lIEl0ZXJhYmxlPgorICAgIHY4OjpIYW5kbGU8
djg6OlZhbHVlPiB2OEFycmF5KGNvbnN0IEl0ZXJhYmxlJiB2ZWN0b3IpCisgICAgeworICAgICAg
ICBpZiAodmVjdG9yLmlzRW1wdHkoKSkKKyAgICAgICAgICAgIHJldHVybiB2ODo6TnVsbCgpOwor
ICAgICAgICB2ODo6TG9jYWw8djg6OkFycmF5PiByZXN1bHQgPSB2ODo6QXJyYXk6Ok5ldyh2ZWN0
b3Iuc2l6ZSgpKTsKKyAgICAgICAgaW50IGluZGV4ID0gMDsKKyAgICAgICAgdHlwZW5hbWUgSXRl
cmFibGU6OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IHZlY3Rvci5lbmQoKTsKKyAgICAgICAgZm9yICh0
eXBlbmFtZSBJdGVyYWJsZTo6Y29uc3RfaXRlcmF0b3IgaXRlciA9IHZlY3Rvci5iZWdpbigpOyBp
dGVyICE9IGVuZDsgKytpdGVyKQorICAgICAgICAgICAgcmVzdWx0LT5TZXQodjg6OkludGVnZXI6
Ok5ldyhpbmRleCsrKSwgdG9WOChXVEY6OmdldFB0cigqaXRlcikpKTsKKyAgICAgICAgcmV0dXJu
IHJlc3VsdDsKKyAgICB9CisKICAgICAvLyBFbmFibGVzIGNhY2hpbmcgdjggd3JhcHBlcnMgY3Jl
YXRlZCBmb3IgV1RGOjpTdHJpbmdJbXBsLiAgQ3VycmVudGx5IHRoaXMgY2FjaGUgcmVxdWlyZXMK
ICAgICAvLyBhbGwgdGhlIGNhbGxzIChib3RoIHRvIGNvbnZlcnQgV1RGOjpTdHJpbmcgdG8gdjg6
OlN0cmluZyBhbmQgdG8gR0MgdGhlIGhhbmRsZSkKICAgICAvLyB0byBiZSBwZXJmb3JtZWQgb24g
dGhlIG1haW4gdGhyZWFkLgpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9t
L1Y4Q29uc29sZUN1c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGlu
Z3MvdjgvY3VzdG9tL1Y4Q29uc29sZUN1c3RvbS5jcHAJKHJldmlzaW9uIDExMDgyOSkKKysrIFNv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOENvbnNvbGVDdXN0b20uY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0zNiw3ICszNiw2IEBACiAjaW5jbHVkZSAiU2NyaXB0QXJndW1lbnRzLmgi
CiAjaW5jbHVkZSAiU2NyaXB0Q2FsbFN0YWNrLmgiCiAjaW5jbHVkZSAiU2NyaXB0Q2FsbFN0YWNr
RmFjdG9yeS5oIgotI2luY2x1ZGUgIlNjcmlwdFByb2ZpbGUuaCIKICNpbmNsdWRlICJWOEJpbmRp
bmcuaCIKICNpbmNsdWRlICJWOEJpbmRpbmdNYWNyb3MuaCIKICNpbmNsdWRlICJWOE1lbW9yeUlu
Zm8uaCIKQEAgLTQ1LDIzICs0NCw2IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotdHlwZWRl
ZiBWZWN0b3I8UmVmUHRyPFNjcmlwdFByb2ZpbGU+ID4gUHJvZmlsZXNBcnJheTsKLQotI2lmIEVO
QUJMRShKQVZBU0NSSVBUX0RFQlVHR0VSKQotdjg6OkhhbmRsZTx2ODo6VmFsdWU+IFY4Q29uc29s
ZTo6cHJvZmlsZXNBY2Nlc3NvckdldHRlcih2ODo6TG9jYWw8djg6OlN0cmluZz4gbmFtZSwgY29u
c3Qgdjg6OkFjY2Vzc29ySW5mbyYgaW5mbykKLXsKLSAgICBJTkNfU1RBVFMoIkRPTS5Db25zb2xl
LnByb2ZpbGVzQWNjZXNzb3JHZXR0ZXIiKTsKLSAgICBDb25zb2xlKiBpbXAgPSBWOENvbnNvbGU6
OnRvTmF0aXZlKGluZm8uSG9sZGVyKCkpOwotICAgIGNvbnN0IFByb2ZpbGVzQXJyYXkmIHByb2Zp
bGVzID0gaW1wLT5wcm9maWxlcygpOwotICAgIHY4OjpIYW5kbGU8djg6OkFycmF5PiByZXN1bHQg
PSB2ODo6QXJyYXk6Ok5ldyhwcm9maWxlcy5zaXplKCkpOwotICAgIGludCBpbmRleCA9IDA7Ci0g
ICAgUHJvZmlsZXNBcnJheTo6Y29uc3RfaXRlcmF0b3IgZW5kID0gcHJvZmlsZXMuZW5kKCk7Ci0g
ICAgZm9yIChQcm9maWxlc0FycmF5Ojpjb25zdF9pdGVyYXRvciBpdGVyID0gcHJvZmlsZXMuYmVn
aW4oKTsgaXRlciAhPSBlbmQ7ICsraXRlcikKLSAgICAgICAgcmVzdWx0LT5TZXQodjg6OkludGVn
ZXI6Ok5ldyhpbmRleCsrKSwgdG9WOChpdGVyLT5nZXQoKSkpOwotICAgIHJldHVybiByZXN1bHQ7
Ci19Ci0jZW5kaWYKLQogdjg6OkhhbmRsZTx2ODo6VmFsdWU+IFY4Q29uc29sZTo6dHJhY2VDYWxs
YmFjayhjb25zdCB2ODo6QXJndW1lbnRzJiBhcmdzKQogewogICAgIElOQ19TVEFUUygiRE9NLkNv
bnNvbGUudHJhY2VDYWxsYmFjayIpOwpJbmRleDogU291cmNlL1dlYkNvcmUvcGFnZS9Db25zb2xl
LmlkbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wYWdlL0NvbnNvbGUuaWRsCShyZXZp
c2lvbiAxMTA4MjkpCisrKyBTb3VyY2UvV2ViQ29yZS9wYWdlL0NvbnNvbGUuaWRsCSh3b3JraW5n
IGNvcHkpCkBAIC00Niw3ICs0Niw3IEBAIG1vZHVsZSB3aW5kb3cgewogICAgICAgICBbQ2FsbFdp
dGg9U2NyaXB0QXJndW1lbnRzfENhbGxTdGFja10gdm9pZCBtYXJrVGltZWxpbmUoKTsKIAogI2lm
IGRlZmluZWQoRU5BQkxFX0pBVkFTQ1JJUFRfREVCVUdHRVIpICYmIEVOQUJMRV9KQVZBU0NSSVBU
X0RFQlVHR0VSCi0gICAgICAgIHJlYWRvbmx5IGF0dHJpYnV0ZSBbQ3VzdG9tR2V0dGVyXSBBcnJh
eSBwcm9maWxlczsKKyAgICAgICAgcmVhZG9ubHkgYXR0cmlidXRlIFtBcnJheVR5cGU9U2NyaXB0
UHJvZmlsZV0gQXJyYXkgcHJvZmlsZXM7CiAgICAgICAgIFtDdXN0b21dIHZvaWQgcHJvZmlsZShp
biBET01TdHJpbmcgdGl0bGUpOwogICAgICAgICBbQ3VzdG9tXSB2b2lkIHByb2ZpbGVFbmQoaW4g
RE9NU3RyaW5nIHRpdGxlKTsKICNlbmRpZgo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>132039</attachid>
            <date>2012-03-15 07:06:47 -0700</date>
            <delta_ts>2012-03-17 04:22:11 -0700</delta_ts>
            <desc>patch_for_review</desc>
            <filename>wip_003.diff</filename>
            <type>text/plain</type>
            <size>21821</size>
            <attacher name="Vineet Chaudhary (vineetc)">code.vineet</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDExMDgzOSkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDUwIEBACisyMDEyLTAzLTE1ICBWaW5lZXQg
Q2hhdWRoYXJ5ICA8dmluZWV0LmNoYXVkaGFyeUBtb3Rvcm9sYS5jb20+CisKKyAgICAgICAgaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTgwNjk2CisgICAgICAgIFJlbW92
ZSBjdXN0b20gYmluZGluZ3MgZm9yIGF0dHJpYnV0ZSB0eXBlIEFycmF5LiAKKworICAgICAgICBS
ZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBObyBuZXcgdGVzdHMuCisKKyAg
ICAgICAgKiBiaW5kaW5ncy9qcy9KU0NvbnNvbGVDdXN0b20uY3BwOiBSZW1vdmVkIGN1c3RvbSBj
YWxsIHByb2ZpbGVzKCkuCisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKiBiaW5kaW5ncy9q
cy9KU0RPTUJpbmRpbmcuaDogQWRkZWQgdGVtcGxhdGUganNBcnJheSgpIGltcGxlbWVudGF0aW9u
LgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChXZWJDb3JlOjpqc0FycmF5KToKKyAgICAg
ICAgKiBiaW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0b3IucG06IEFkZGVkICJBcnJheSIgdG8g
cHJpbWl0aXZlIHR5cGUuCisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy9Db2RlR2VuZXJhdG9y
R09iamVjdC5wbTogTW9kaWZpZWQgY29kZWdlbmVyYXRvciB0byBnZW5lcmF0ZSBjb2RlIGZvciBB
cnJheSB0eXBlLgorICAgICAgICAoU2tpcEF0dHJpYnV0ZSk6CisgICAgICAgICogYmluZGluZ3Mv
c2NyaXB0cy9Db2RlR2VuZXJhdG9ySlMucG06IE1vZGlmaWVkIGNvZGVnZW5lcmF0b3IgdG8gZ2Vu
ZXJhdGUgY29kZSBmb3IgQXJyYXkgdHlwZS4KKyAgICAgICAgKE5hdGl2ZVRvSlNWYWx1ZSk6Cisg
ICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy9Db2RlR2VuZXJhdG9yVjgucG06IE1vZGlmaWVkIGNv
ZGVnZW5lcmF0b3IgdG8gZ2VuZXJhdGUgY29kZSBmb3IgQXJyYXkgdHlwZS4KKyAgICAgICAgKElz
UmVmUHRyVHlwZSk6CisgICAgICAgIChHZXROYXRpdmVUeXBlKToKKyAgICAgICAgKE5hdGl2ZVRv
SlNWYWx1ZSk6CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy9JRExBdHRyaWJ1dGVzLnR4dDog
QWRkZWQgYXR0cmlidXRlIHR5cGUgIkFycmF5VHlwZSIKKyAgICAgICAgKiBiaW5kaW5ncy9zY3Jp
cHRzL3Rlc3QvQ1BQL1dlYkRPTVRlc3RPYmouY3BwOiBBZGRlZCBhdHRyaWJ1dGUgdGVzdCBmb3Ig
QXJyYXkgdHlwZS4KKyAgICAgICAgKFdlYkRPTVRlc3RPYmo6OmFycmF5VHlwZUF0dHJpYnV0ZSk6
CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0NQUC9XZWJET01UZXN0T2JqLmg6IEFk
ZGVkIGF0dHJpYnV0ZSB0ZXN0IGZvciBBcnJheSB0eXBlLgorICAgICAgICAqIGJpbmRpbmdzL3Nj
cmlwdHMvdGVzdC9KUy9KU1Rlc3RPYmouY3BwOiBBZGRlZCBhdHRyaWJ1dGUgdGVzdCBmb3IgQXJy
YXkgdHlwZS4KKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoV2ViQ29yZTo6anNUZXN0T2Jq
QXJyYXlUeXBlQXR0cmlidXRlKToKKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMv
SlNUZXN0T2JqLmg6IEFkZGVkIGF0dHJpYnV0ZSB0ZXN0IGZvciBBcnJheSB0eXBlLgorICAgICAg
ICAoV2ViQ29yZSk6CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L09iakMvRE9NVGVz
dE9iai5oOiBBZGRlZCBhdHRyaWJ1dGUgdGVzdCBmb3IgQXJyYXkgdHlwZS4KKyAgICAgICAgKiBi
aW5kaW5ncy9zY3JpcHRzL3Rlc3QvT2JqQy9ET01UZXN0T2JqLm1tOiBBZGRlZCBhdHRyaWJ1dGUg
dGVzdCBmb3IgQXJyYXkgdHlwZS4KKyAgICAgICAgKC1bRE9NVGVzdE9iaiBhcnJheVR5cGVBdHRy
aWJ1dGVdKToKKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvVGVzdE9iai5pZGw6IEFk
ZGVkIGF0dHJpYnV0ZSB0ZXN0IGZvciBBcnJheSB0eXBlLgorICAgICAgICAqIGJpbmRpbmdzL3Nj
cmlwdHMvdGVzdC9WOC9WOFRlc3RPYmouY3BwOiBBZGRlZCBhdHRyaWJ1dGUgdGVzdCBmb3IgQXJy
YXkgdHlwZS4KKyAgICAgICAgKFdlYkNvcmU6OlRlc3RPYmpJbnRlcm5hbDo6YXJyYXlUeXBlQXR0
cmlidXRlQXR0ckdldHRlcik6CisgICAgICAgIChUZXN0T2JqSW50ZXJuYWwpOgorICAgICAgICAo
V2ViQ29yZSk6CisgICAgICAgICogYmluZGluZ3MvdjgvVjhCaW5kaW5nLmg6IEFkZGVkIHRlbXBs
YXRlIHY4QXJyYXkoKSBpbXBsZW1lbnRhdGlvbi4KKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAg
ICAoV2ViQ29yZTo6djhBcnJheSk6CisgICAgICAgICogYmluZGluZ3MvdjgvY3VzdG9tL1Y4Q29u
c29sZUN1c3RvbS5jcHA6IFJlbW92ZWQgY3VzdG9tIGNhbGwgcHJvZmlsZXMoKS4KKyAgICAgICAg
KFdlYkNvcmUpOgorICAgICAgICAqIHBhZ2UvQ29uc29sZS5pZGw6IFJlbW92ZWQgW0N1c3RvbV0g
Zm9yIHByb2ZpbGVzLgorCiAyMDEyLTAzLTE1ICBOaWtvbGFzIFppbW1lcm1hbm4gIDxuemltbWVy
bWFubkByaW0uY29tPgogCiAgICAgICAgIEVuYWJsZSBhbmltVmFsIHN1cHBvcnQgZm9yIFNWR1Ry
YW5zZm9ybUxpc3QKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTQ29uc29sZUN1
c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNDb25z
b2xlQ3VzdG9tLmNwcAkocmV2aXNpb24gMTEwODM5KQorKysgU291cmNlL1dlYkNvcmUvYmluZGlu
Z3MvanMvSlNDb25zb2xlQ3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzMsNyArMzMsNiBA
QAogI2luY2x1ZGUgIkpTU2NyaXB0UHJvZmlsZS5oIgogI2luY2x1ZGUgIlNjcmlwdENhbGxTdGFj
ay5oIgogI2luY2x1ZGUgIlNjcmlwdENhbGxTdGFja0ZhY3RvcnkuaCIKLSNpbmNsdWRlICJTY3Jp
cHRQcm9maWxlLmgiCiAjaW5jbHVkZSA8cnVudGltZS9KU0FycmF5Lmg+CiAjaW5jbHVkZSA8d3Rm
L093blB0ci5oPgogCkBAIC00MSwyMCArNDAsNiBAQCB1c2luZyBuYW1lc3BhY2UgSlNDOwogCiBu
YW1lc3BhY2UgV2ViQ29yZSB7CiAKLXR5cGVkZWYgVmVjdG9yPFJlZlB0cjxTY3JpcHRQcm9maWxl
PiA+IFByb2ZpbGVzQXJyYXk7Ci0KLUpTVmFsdWUgSlNDb25zb2xlOjpwcm9maWxlcyhFeGVjU3Rh
dGUqIGV4ZWMpIGNvbnN0Ci17Ci0gICAgY29uc3QgUHJvZmlsZXNBcnJheSYgcHJvZmlsZXMgPSBp
bXBsKCktPnByb2ZpbGVzKCk7Ci0gICAgTWFya2VkQXJndW1lbnRCdWZmZXIgbGlzdDsKLQotICAg
IFByb2ZpbGVzQXJyYXk6OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IHByb2ZpbGVzLmVuZCgpOwotICAg
IGZvciAoUHJvZmlsZXNBcnJheTo6Y29uc3RfaXRlcmF0b3IgaXRlciA9IHByb2ZpbGVzLmJlZ2lu
KCk7IGl0ZXIgIT0gZW5kOyArK2l0ZXIpCi0gICAgICAgIGxpc3QuYXBwZW5kKHRvSlMoZXhlYywg
Z2xvYmFsT2JqZWN0KCksIGl0ZXItPmdldCgpKSk7Ci0KLSAgICByZXR1cm4gY29uc3RydWN0QXJy
YXkoZXhlYywgZ2xvYmFsT2JqZWN0KCksIGxpc3QpOwotfQotCiBKU1ZhbHVlIEpTQ29uc29sZTo6
cHJvZmlsZShFeGVjU3RhdGUqIGV4ZWMpCiB7CiAgICAgUmVmUHRyPFNjcmlwdENhbGxTdGFjaz4g
Y2FsbFN0YWNrKGNyZWF0ZVNjcmlwdENhbGxTdGFjayhleGVjLCAxKSk7CkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTUJpbmRpbmcuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTUJpbmRpbmcuaAkocmV2aXNpb24gMTEwODM5KQorKysg
U291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01CaW5kaW5nLmgJKHdvcmtpbmcgY29weSkK
QEAgLTM1LDYgKzM1LDcgQEAKICNpbmNsdWRlICJTdHlsZWRFbGVtZW50LmgiCiAjaW5jbHVkZSA8
aGVhcC9XZWFrLmg+CiAjaW5jbHVkZSA8cnVudGltZS9GdW5jdGlvblByb3RvdHlwZS5oPgorI2lu
Y2x1ZGUgPHJ1bnRpbWUvSlNBcnJheS5oPgogI2luY2x1ZGUgPHJ1bnRpbWUvTG9va3VwLmg+CiAj
aW5jbHVkZSA8cnVudGltZS9PYmplY3RQcm90b3R5cGUuaD4KICNpbmNsdWRlIDx3dGYvRm9yd2Fy
ZC5oPgpAQCAtMjc4LDYgKzI3OSwxOCBAQCBlbnVtIFBhcmFtZXRlckRlZmF1bHRQb2xpY3kgewog
ICAgICAgICByZXR1cm4gdG9KUyhleGVjLCBnbG9iYWxPYmplY3QsIHB0ci5nZXQoKSk7CiAgICAg
fQogCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgSXRlcmFibGU+CisgICAgSlNDOjpKU1ZhbHVlIGpz
QXJyYXkoSlNDOjpFeGVjU3RhdGUqIGV4ZWMsIEpTRE9NR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmpl
Y3QsIGNvbnN0IEl0ZXJhYmxlJiB2ZWN0b3IpCisgICAgeworICAgICAgICBpZiAodmVjdG9yLmlz
RW1wdHkoKSkKKyAgICAgICAgICAgIHJldHVybiBKU0M6OmpzTnVsbCgpOworICAgICAgICBKU0M6
Ok1hcmtlZEFyZ3VtZW50QnVmZmVyIGxpc3Q7CisgICAgICAgIHR5cGVuYW1lIEl0ZXJhYmxlOjpj
b25zdF9pdGVyYXRvciBlbmQgPSB2ZWN0b3IuZW5kKCk7CisgICAgICAgIGZvciAodHlwZW5hbWUg
SXRlcmFibGU6OmNvbnN0X2l0ZXJhdG9yIGl0ZXIgPSB2ZWN0b3IuYmVnaW4oKTsgaXRlciAhPSBl
bmQ7ICsraXRlcikKKyAgICAgICAgICAgIGxpc3QuYXBwZW5kKHRvSlMoZXhlYywgZ2xvYmFsT2Jq
ZWN0LCBXVEY6OmdldFB0cigqaXRlcikpKTsKKyAgICAgICAgcmV0dXJuIEpTQzo6Y29uc3RydWN0
QXJyYXkoZXhlYywgbGlzdCk7CisgICAgIH0KKwogICAgIC8vIFZhbGlkYXRlcyB0aGF0IHRoZSBw
YXNzZWQgb2JqZWN0IGlzIGEgc2VxdWVuY2UgdHlwZSBwZXIgc2VjdGlvbiA0LjEuMTMgb2YgdGhl
IFdlYklETCBzcGVjLgogICAgIEpTQzo6SlNPYmplY3QqIHRvSlNTZXF1ZW5jZShKU0M6OkV4ZWNT
dGF0ZSosIEpTQzo6SlNWYWx1ZSwgdW5zaWduZWQmKTsKIApJbmRleDogU291cmNlL1dlYkNvcmUv
YmluZGluZ3Mvc2NyaXB0cy9Db2RlR2VuZXJhdG9yLnBtCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvQ29kZUdlbmVyYXRvci5wbQkocmV2aXNpb24gMTEwODM5
KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy9Db2RlR2VuZXJhdG9yLnBtCSh3
b3JraW5nIGNvcHkpCkBAIC00OCw3ICs0OCw3IEBAIG15ICVudW1lcmljVHlwZUhhc2ggPSAoImlu
dCIgPT4gMSwgInNob3IKICAgICAgICAgICAgICAgICAgICAgICAgInVuc2lnbmVkIGxvbmciID0+
IDEsICJ1bnNpZ25lZCBsb25nIGxvbmciID0+IDEsCiAgICAgICAgICAgICAgICAgICAgICAgICJm
bG9hdCIgPT4gMSwgImRvdWJsZSIgPT4gMSk7CiAKLW15ICVwcmltaXRpdmVUeXBlSGFzaCA9ICgg
ImJvb2xlYW4iID0+IDEsICJ2b2lkIiA9PiAxLCAiRGF0ZSIgPT4gMSk7CitteSAlcHJpbWl0aXZl
VHlwZUhhc2ggPSAoICJib29sZWFuIiA9PiAxLCAidm9pZCIgPT4gMSwgIkRhdGUiID0+IDEsICJB
cnJheSIgPT4gMSk7CiAKIG15ICVzdHJpbmdUeXBlSGFzaCA9ICgiRE9NU3RyaW5nIiA9PiAxLCAi
QXRvbWljU3RyaW5nIiA9PiAxKTsKIApJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2Ny
aXB0cy9Db2RlR2VuZXJhdG9yR09iamVjdC5wbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0b3JHT2JqZWN0LnBtCShyZXZpc2lvbiAxMTA4
MzkpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0b3JHT2Jq
ZWN0LnBtCSh3b3JraW5nIGNvcHkpCkBAIC0xNTUsNiArMTU1LDcgQEAgc3ViIFNraXBBdHRyaWJ1
dGUgewogCiAgICAgaWYgKCRhdHRyaWJ1dGUtPnNpZ25hdHVyZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVz
LT57IkN1c3RvbSJ9CiAgICAgICAgIHx8ICRhdHRyaWJ1dGUtPnNpZ25hdHVyZS0+ZXh0ZW5kZWRB
dHRyaWJ1dGVzLT57IkN1c3RvbUdldHRlciJ9CisgICAgICAgIHx8ICRhdHRyaWJ1dGUtPnNpZ25h
dHVyZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57IkFycmF5VHlwZSJ9CiAgICAgICAgIHx8ICRhdHRy
aWJ1dGUtPnNpZ25hdHVyZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57IkN1c3RvbVNldHRlciJ9KSB7
CiAgICAgICAgIHJldHVybiAxOwogICAgIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L3NjcmlwdHMvQ29kZUdlbmVyYXRvckpTLnBtCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL3NjcmlwdHMvQ29kZUdlbmVyYXRvckpTLnBtCShyZXZpc2lvbiAxMTA4MzkpCisr
KyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0b3JKUy5wbQkod29y
a2luZyBjb3B5KQpAQCAtMjc4MSw2ICsyNzgxLDcgQEAgc3ViIEdldE5hdGl2ZVR5cGVGcm9tU2ln
bmF0dXJlCiB9CiAKIG15ICVuYXRpdmVUeXBlID0gKAorICAgICJBcnJheSIgPT4gIkFycmF5KiIs
CiAgICAgIkNvbXBhcmVIb3ciID0+ICJSYW5nZTo6Q29tcGFyZUhvdyIsCiAgICAgIkRPTVN0cmlu
ZyIgPT4gImNvbnN0IFN0cmluZyYiLAogICAgICMgRklYTUU6IEFkZCBwcm9wZXIgc3VwcG9ydCBm
b3IgVFtdLCBUW10/LCBzZXF1ZW5jZTxUPgpAQCAtMjk3Myw2ICsyOTc0LDE2IEBAIHN1YiBOYXRp
dmVUb0pTVmFsdWUKICAgICAgICAgcmV0dXJuICJqc051bWJlcihzdGQ6Om1heCgwLCAiIC4gJHZh
bHVlIC4gIikpIjsKICAgICB9CiAKKyAgICBpZiAoJHR5cGUgZXEgIkFycmF5IikgeworICAgICAg
ICBteSAkYXJyYXlUeXBlID0gJHNpZ25hdHVyZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57IkFycmF5
VHlwZSJ9OworICAgICAgICBpZiAoJGFycmF5VHlwZSkgeworICAgICAgICAgICAgQWRkVG9JbXBs
SW5jbHVkZXMoIjxydW50aW1lL0pTQXJyYXkuaD4iLCAkY29uZGl0aW9uYWwpOworICAgICAgICAg
ICAgQWRkVG9JbXBsSW5jbHVkZXMoIkpTJGFycmF5VHlwZS5oIiwgJGNvbmRpdGlvbmFsKTsKKyAg
ICAgICAgICAgIEFkZFRvSW1wbEluY2x1ZGVzKCIkYXJyYXlUeXBlLmgiLCAkY29uZGl0aW9uYWwp
OworICAgICAgICB9CisgICAgICAgIHJldHVybiAianNBcnJheShleGVjLCAkdGhpc1ZhbHVlLT5n
bG9iYWxPYmplY3QoKSwgJHZhbHVlKSI7CisgICAgfQorCiAgICAgaWYgKCRjb2RlR2VuZXJhdG9y
LT5Jc1ByaW1pdGl2ZVR5cGUoJHR5cGUpIG9yICR0eXBlIGVxICJET01UaW1lU3RhbXAiKSB7CiAg
ICAgICAgIHJldHVybiAianNOdW1iZXIoJHZhbHVlKSI7CiAgICAgfQpJbmRleDogU291cmNlL1dl
YkNvcmUvYmluZGluZ3Mvc2NyaXB0cy9Db2RlR2VuZXJhdG9yVjgucG0KPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy9Db2RlR2VuZXJhdG9yVjgucG0JKHJldmlz
aW9uIDExMDgzOSkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvQ29kZUdlbmVy
YXRvclY4LnBtCSh3b3JraW5nIGNvcHkpCkBAIC0zMzA1LDYgKzMzMDUsNyBAQCBzdWIgSXNSZWZQ
dHJUeXBlCiB7CiAgICAgbXkgJHR5cGUgPSBzaGlmdDsKIAorICAgIHJldHVybiAwIGlmICR0eXBl
IGVxICJBcnJheSI7CiAgICAgcmV0dXJuIDAgaWYgJHR5cGUgZXEgImJvb2xlYW4iOwogICAgIHJl
dHVybiAwIGlmICR0eXBlIGVxICJmbG9hdCI7CiAgICAgcmV0dXJuIDAgaWYgJHR5cGUgZXEgImlu
dCI7CkBAIC0zMzQwLDYgKzMzNDEsNyBAQCBzdWIgR2V0TmF0aXZlVHlwZQogICAgICAgICByZXR1
cm4gJHR5cGU7CiAgICAgfQogCisgICAgcmV0dXJuICJBcnJheSIgaWYgJHR5cGUgZXEgIkFycmF5
IjsKICAgICByZXR1cm4gIlY4UGFyYW1ldGVyIiBpZiAoJHR5cGUgZXEgIkRPTVN0cmluZyIgb3Ig
JHR5cGUgZXEgIkRPTVVzZXJEYXRhIikgYW5kICRpc1BhcmFtZXRlcjsKICAgICByZXR1cm4gImlu
dCIgaWYgJHR5cGUgZXEgImludCI7CiAgICAgcmV0dXJuICJpbnQiIGlmICR0eXBlIGVxICJzaG9y
dCIgb3IgJHR5cGUgZXEgInVuc2lnbmVkIHNob3J0IjsKQEAgLTM1ODQsNiArMzU4Niw3IEBAIHN1
YiBSZXF1aXJlc0N1c3RvbVNpZ25hdHVyZQogCiAjIEZJWE1FOiBTb3J0IHRoaXMgYXJyYXkuCiBt
eSAlbm9uX3dyYXBwZXJfdHlwZXMgPSAoCisgICAgJ0FycmF5JyA9PiAxLAogICAgICdmbG9hdCcg
PT4gMSwKICAgICAnZG91YmxlJyA9PiAxLAogICAgICdpbnQnID0+IDEsCkBAIC0zNjgxLDYgKzM2
ODQsMTUgQEAgc3ViIE5hdGl2ZVRvSlNWYWx1ZQogICAgIHJldHVybiAidjg6OkludGVnZXI6Ok5l
dygkdmFsdWUpIiBpZiAkbmF0aXZlVHlwZSBlcSAiaW50IjsKICAgICByZXR1cm4gInY4OjpJbnRl
Z2VyOjpOZXdGcm9tVW5zaWduZWQoJHZhbHVlKSIgaWYgJG5hdGl2ZVR5cGUgZXEgInVuc2lnbmVk
IjsKIAorICAgIGlmICgkdHlwZSBlcSAiQXJyYXkiKSB7CisgICAgICAgIG15ICRhcnJheVR5cGUg
PSAkc2lnbmF0dXJlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPnsiQXJyYXlUeXBlIn07CisgICAgICAg
IGlmICgkYXJyYXlUeXBlIGFuZCAkYXJyYXlUeXBlIG5lICJTY29wZUNoYWluIikgeworICAgICAg
ICAgICAgQWRkVG9JbXBsSW5jbHVkZXMoIlY4JGFycmF5VHlwZS5oIik7CisgICAgICAgICAgICBB
ZGRUb0ltcGxJbmNsdWRlcygiJGFycmF5VHlwZS5oIik7CisgICAgICAgIH0KKyAgICAgICAgcmV0
dXJuICJ2OEFycmF5KCR2YWx1ZSkiOworICAgIH0KKwogICAgIHJldHVybiAidjhEYXRlT3JOdWxs
KCR2YWx1ZSkiIGlmICR0eXBlIGVxICJEYXRlIjsKICAgICAjIGxvbmcgbG9uZyBhbmQgdW5zaWdu
ZWQgbG9uZyBsb25nIGFyZSBub3QgcmVwcmVzZW50YWJsZSBpbiBFQ01BU2NyaXB0LgogICAgIHJl
dHVybiAidjg6Ok51bWJlcjo6TmV3KHN0YXRpY19jYXN0PGRvdWJsZT4oJHZhbHVlKSkiIGlmICR0
eXBlIGVxICJsb25nIGxvbmciIG9yICR0eXBlIGVxICJ1bnNpZ25lZCBsb25nIGxvbmciIG9yICR0
eXBlIGVxICJET01UaW1lU3RhbXAiOwpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2Ny
aXB0cy9JRExBdHRyaWJ1dGVzLnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9zY3JpcHRzL0lETEF0dHJpYnV0ZXMudHh0CShyZXZpc2lvbiAxMTA4MzkpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL0lETEF0dHJpYnV0ZXMudHh0CSh3b3JraW5nIGNv
cHkpCkBAIC0xOCw2ICsxOCw3IEBACiAjICAgICAgIGUuZy4gW0FUVFI9SU5ERVhFRF9EQVRBQkFT
RV0sIFtBVFRSPWRlbGV0ZUZ1bmN0aW9uXS4KICMKIAorQXJyYXlUeXBlPSoKIEFjdGl2ZURPTU9i
amVjdAogQ1BQUHVyZUludGVyZmFjZQogQ2FjaGVkQXR0cmlidXRlCkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvVGVzdE9iai5pZGwKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Rlc3RPYmouaWRsCShyZXZpc2lvbiAx
MTA4MzkpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvVGVzdE9iai5p
ZGwJKHdvcmtpbmcgY29weSkKQEAgLTQ1LDYgKzQ1LDcgQEAgbW9kdWxlIHRlc3QgewogICAgICAg
ICBhdHRyaWJ1dGUgdW5zaWduZWQgbG9uZyBsb25nICAgICAgIHVuc2lnbmVkTG9uZ0xvbmdBdHRy
OwogICAgICAgICBhdHRyaWJ1dGUgRE9NU3RyaW5nICAgICAgICAgICAgICAgIHN0cmluZ0F0dHI7
CiAgICAgICAgIGF0dHJpYnV0ZSBUZXN0T2JqICAgICAgICAgICAgICAgICAgdGVzdE9iakF0dHI7
CisgICAgICAgIHJlYWRvbmx5IGF0dHJpYnV0ZSBbQXJyYXlUeXBlPVNjcmlwdFByb2ZpbGVdIEFy
cmF5IGFycmF5VHlwZUF0dHJpYnV0ZTsKIAogICAgICAgICBKUywgVjgKICAgICAgICAgLy8gV0tf
dWNmaXJzdCwgV0tfbGNmaXJzdCBleGNlcHRpb25hbCBjYXNlcy4KSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9DUFAvV2ViRE9NVGVzdE9iai5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0NQUC9XZWJET01UZXN0
T2JqLmNwcAkocmV2aXNpb24gMTEwODM5KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2Ny
aXB0cy90ZXN0L0NQUC9XZWJET01UZXN0T2JqLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjMzLDYg
KzIzMywxNCBAQCB2b2lkIFdlYkRPTVRlc3RPYmo6OnNldFRlc3RPYmpBdHRyKGNvbnN0CiAgICAg
aW1wbCgpLT5zZXRUZXN0T2JqQXR0cih0b1dlYkNvcmUobmV3VGVzdE9iakF0dHIpKTsKIH0KIAor
QXJyYXkgV2ViRE9NVGVzdE9iajo6YXJyYXlUeXBlQXR0cmlidXRlKCkgY29uc3QKK3sKKyAgICBp
ZiAoIWltcGwoKSkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICByZXR1cm4gaW1wbCgpLT5hcnJh
eVR5cGVBdHRyaWJ1dGUoKTsKK30KKwogV2ViRE9NVGVzdE9iaiBXZWJET01UZXN0T2JqOjpYTUxP
YmpBdHRyKCkgY29uc3QKIHsKICAgICBpZiAoIWltcGwoKSkKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9DUFAvV2ViRE9NVGVzdE9iai5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9DUFAvV2ViRE9NVGVzdE9iai5o
CShyZXZpc2lvbiAxMTA4MzkpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rl
c3QvQ1BQL1dlYkRPTVRlc3RPYmouaAkod29ya2luZyBjb3B5KQpAQCAtODcsNiArODcsNyBAQCBw
dWJsaWM6CiAgICAgdm9pZCBzZXRTdHJpbmdBdHRyKGNvbnN0IFdlYkRPTVN0cmluZyYpOwogICAg
IFdlYkRPTVRlc3RPYmogdGVzdE9iakF0dHIoKSBjb25zdDsKICAgICB2b2lkIHNldFRlc3RPYmpB
dHRyKGNvbnN0IFdlYkRPTVRlc3RPYmomKTsKKyAgICBBcnJheSBhcnJheVR5cGVBdHRyaWJ1dGUo
KSBjb25zdDsKICAgICBXZWJET01UZXN0T2JqIFhNTE9iakF0dHIoKSBjb25zdDsKICAgICB2b2lk
IHNldFhNTE9iakF0dHIoY29uc3QgV2ViRE9NVGVzdE9iaiYpOwogICAgIGJvb2wgY3JlYXRlKCkg
Y29uc3Q7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNU
ZXN0T2JqLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRz
L3Rlc3QvSlMvSlNUZXN0T2JqLmNwcAkocmV2aXNpb24gMTEwODM5KQorKysgU291cmNlL1dlYkNv
cmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE9iai5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTMzLDYgKzMzLDcgQEAKICNpbmNsdWRlICJKU0V2ZW50TGlzdGVuZXIuaCIKICNpbmNsdWRl
ICJKU1NWR0RvY3VtZW50LmgiCiAjaW5jbHVkZSAiSlNTVkdQb2ludC5oIgorI2luY2x1ZGUgIkpT
U2NyaXB0UHJvZmlsZS5oIgogI2luY2x1ZGUgIkpTVGVzdENhbGxiYWNrLmgiCiAjaW5jbHVkZSAi
SlNUZXN0T2JqLmgiCiAjaW5jbHVkZSAiSlNhLmgiCkBAIC00OCwxMCArNDksMTIgQEAKICNpbmNs
dWRlICJTY3JpcHRBcmd1bWVudHMuaCIKICNpbmNsdWRlICJTY3JpcHRDYWxsU3RhY2suaCIKICNp
bmNsdWRlICJTY3JpcHRDYWxsU3RhY2tGYWN0b3J5LmgiCisjaW5jbHVkZSAiU2NyaXB0UHJvZmls
ZS5oIgogI2luY2x1ZGUgIlNlcmlhbGl6ZWRTY3JpcHRWYWx1ZS5oIgogI2luY2x1ZGUgIlRlc3RP
YmouaCIKICNpbmNsdWRlICJib29sLmgiCiAjaW5jbHVkZSA8cnVudGltZS9FcnJvci5oPgorI2lu
Y2x1ZGUgPHJ1bnRpbWUvSlNBcnJheS5oPgogI2luY2x1ZGUgPHJ1bnRpbWUvSlNTdHJpbmcuaD4K
ICNpbmNsdWRlIDx3dGYvR2V0UHRyLmg+CiAKQEAgLTg2LDYgKzg5LDcgQEAgc3RhdGljIGNvbnN0
IEhhc2hUYWJsZVZhbHVlIEpTVGVzdE9ialRhYgogICAgIHsgInVuc2lnbmVkTG9uZ0xvbmdBdHRy
IiwgRG9udERlbGV0ZSwgKGludHB0cl90KXN0YXRpY19jYXN0PFByb3BlcnR5U2xvdDo6R2V0VmFs
dWVGdW5jPihqc1Rlc3RPYmpVbnNpZ25lZExvbmdMb25nQXR0ciksIChpbnRwdHJfdClzZXRKU1Rl
c3RPYmpVbnNpZ25lZExvbmdMb25nQXR0ciwgTm9JbnRyaW5zaWMgfSwKICAgICB7ICJzdHJpbmdB
dHRyIiwgRG9udERlbGV0ZSwgKGludHB0cl90KXN0YXRpY19jYXN0PFByb3BlcnR5U2xvdDo6R2V0
VmFsdWVGdW5jPihqc1Rlc3RPYmpTdHJpbmdBdHRyKSwgKGludHB0cl90KXNldEpTVGVzdE9ialN0
cmluZ0F0dHIsIE5vSW50cmluc2ljIH0sCiAgICAgeyAidGVzdE9iakF0dHIiLCBEb250RGVsZXRl
LCAoaW50cHRyX3Qpc3RhdGljX2Nhc3Q8UHJvcGVydHlTbG90OjpHZXRWYWx1ZUZ1bmM+KGpzVGVz
dE9ialRlc3RPYmpBdHRyKSwgKGludHB0cl90KXNldEpTVGVzdE9ialRlc3RPYmpBdHRyLCBOb0lu
dHJpbnNpYyB9LAorICAgIHsgImFycmF5VHlwZUF0dHJpYnV0ZSIsIERvbnREZWxldGUgfCBSZWFk
T25seSwgKGludHB0cl90KXN0YXRpY19jYXN0PFByb3BlcnR5U2xvdDo6R2V0VmFsdWVGdW5jPihq
c1Rlc3RPYmpBcnJheVR5cGVBdHRyaWJ1dGUpLCAoaW50cHRyX3QpMCwgTm9JbnRyaW5zaWMgfSwK
ICAgICB7ICJYTUxPYmpBdHRyIiwgRG9udERlbGV0ZSwgKGludHB0cl90KXN0YXRpY19jYXN0PFBy
b3BlcnR5U2xvdDo6R2V0VmFsdWVGdW5jPihqc1Rlc3RPYmpYTUxPYmpBdHRyKSwgKGludHB0cl90
KXNldEpTVGVzdE9ialhNTE9iakF0dHIsIE5vSW50cmluc2ljIH0sCiAgICAgeyAiY3JlYXRlIiwg
RG9udERlbGV0ZSwgKGludHB0cl90KXN0YXRpY19jYXN0PFByb3BlcnR5U2xvdDo6R2V0VmFsdWVG
dW5jPihqc1Rlc3RPYmpDcmVhdGUpLCAoaW50cHRyX3Qpc2V0SlNUZXN0T2JqQ3JlYXRlLCBOb0lu
dHJpbnNpYyB9LAogICAgIHsgInJlZmxlY3RlZFN0cmluZ0F0dHIiLCBEb250RGVsZXRlLCAoaW50
cHRyX3Qpc3RhdGljX2Nhc3Q8UHJvcGVydHlTbG90OjpHZXRWYWx1ZUZ1bmM+KGpzVGVzdE9ialJl
ZmxlY3RlZFN0cmluZ0F0dHIpLCAoaW50cHRyX3Qpc2V0SlNUZXN0T2JqUmVmbGVjdGVkU3RyaW5n
QXR0ciwgTm9JbnRyaW5zaWMgfSwKQEAgLTQ2Niw2ICs0NzAsMTYgQEAgSlNWYWx1ZSBqc1Rlc3RP
YmpUZXN0T2JqQXR0cihFeGVjU3RhdGUqIAogfQogCiAKK0pTVmFsdWUganNUZXN0T2JqQXJyYXlU
eXBlQXR0cmlidXRlKEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZSBzbG90QmFzZSwgY29uc3QgSWRl
bnRpZmllciYpCit7CisgICAgSlNUZXN0T2JqKiBjYXN0ZWRUaGlzID0gc3RhdGljX2Nhc3Q8SlNU
ZXN0T2JqKj4oYXNPYmplY3Qoc2xvdEJhc2UpKTsKKyAgICBVTlVTRURfUEFSQU0oZXhlYyk7Cisg
ICAgVGVzdE9iaiogaW1wbCA9IHN0YXRpY19jYXN0PFRlc3RPYmoqPihjYXN0ZWRUaGlzLT5pbXBs
KCkpOworICAgIEpTVmFsdWUgcmVzdWx0ID0ganNBcnJheShleGVjLCBjYXN0ZWRUaGlzLT5nbG9i
YWxPYmplY3QoKSwgaW1wbC0+YXJyYXlUeXBlQXR0cmlidXRlKCkpOworICAgIHJldHVybiByZXN1
bHQ7Cit9CisKKwogSlNWYWx1ZSBqc1Rlc3RPYmpYTUxPYmpBdHRyKEV4ZWNTdGF0ZSogZXhlYywg
SlNWYWx1ZSBzbG90QmFzZSwgY29uc3QgSWRlbnRpZmllciYpCiB7CiAgICAgSlNUZXN0T2JqKiBj
YXN0ZWRUaGlzID0gc3RhdGljX2Nhc3Q8SlNUZXN0T2JqKj4oYXNPYmplY3Qoc2xvdEJhc2UpKTsK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RPYmou
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMv
SlNUZXN0T2JqLmgJKHJldmlzaW9uIDExMDgzOSkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RPYmouaAkod29ya2luZyBjb3B5KQpAQCAtMjMxLDYgKzIz
MSw3IEBAIEpTQzo6SlNWYWx1ZSBqc1Rlc3RPYmpTdHJpbmdBdHRyKEpTQzo6RXgKIHZvaWQgc2V0
SlNUZXN0T2JqU3RyaW5nQXR0cihKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6SlNPYmplY3QqLCBKU0M6
OkpTVmFsdWUpOwogSlNDOjpKU1ZhbHVlIGpzVGVzdE9ialRlc3RPYmpBdHRyKEpTQzo6RXhlY1N0
YXRlKiwgSlNDOjpKU1ZhbHVlLCBjb25zdCBKU0M6OklkZW50aWZpZXImKTsKIHZvaWQgc2V0SlNU
ZXN0T2JqVGVzdE9iakF0dHIoSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkpTT2JqZWN0KiwgSlNDOjpK
U1ZhbHVlKTsKK0pTQzo6SlNWYWx1ZSBqc1Rlc3RPYmpBcnJheVR5cGVBdHRyaWJ1dGUoSlNDOjpF
eGVjU3RhdGUqLCBKU0M6OkpTVmFsdWUsIGNvbnN0IEpTQzo6SWRlbnRpZmllciYpOwogSlNDOjpK
U1ZhbHVlIGpzVGVzdE9ialhNTE9iakF0dHIoSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkpTVmFsdWUs
IGNvbnN0IEpTQzo6SWRlbnRpZmllciYpOwogdm9pZCBzZXRKU1Rlc3RPYmpYTUxPYmpBdHRyKEpT
Qzo6RXhlY1N0YXRlKiwgSlNDOjpKU09iamVjdCosIEpTQzo6SlNWYWx1ZSk7CiBKU0M6OkpTVmFs
dWUganNUZXN0T2JqQ3JlYXRlKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpKU1ZhbHVlLCBjb25zdCBK
U0M6OklkZW50aWZpZXImKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMv
dGVzdC9PYmpDL0RPTVRlc3RPYmouaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9zY3JpcHRzL3Rlc3QvT2JqQy9ET01UZXN0T2JqLmgJKHJldmlzaW9uIDExMDgzOSkKKysr
IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9PYmpDL0RPTVRlc3RPYmouaAko
d29ya2luZyBjb3B5KQpAQCAtODIsNiArODIsNyBAQCBlbnVtIHsKIC0gKHZvaWQpc2V0U3RyaW5n
QXR0cjooTlNTdHJpbmcgKiluZXdTdHJpbmdBdHRyOwogLSAoRE9NVGVzdE9iaiAqKXRlc3RPYmpB
dHRyOwogLSAodm9pZClzZXRUZXN0T2JqQXR0cjooRE9NVGVzdE9iaiAqKW5ld1Rlc3RPYmpBdHRy
OworLSAoQXJyYXkpYXJyYXlUeXBlQXR0cmlidXRlOwogLSAoRE9NVGVzdE9iaiAqKVhNTE9iakF0
dHI7CiAtICh2b2lkKXNldFhNTE9iakF0dHI6KERPTVRlc3RPYmogKiluZXdYTUxPYmpBdHRyOwog
LSAoQk9PTCljcmVhdGU7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rl
c3QvT2JqQy9ET01UZXN0T2JqLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL3NjcmlwdHMvdGVzdC9PYmpDL0RPTVRlc3RPYmoubW0JKHJldmlzaW9uIDExMDgzOSkKKysr
IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9PYmpDL0RPTVRlc3RPYmoubW0J
KHdvcmtpbmcgY29weSkKQEAgLTIwMiw2ICsyMDIsMTIgQEAgLSAodm9pZClzZXRUZXN0T2JqQXR0
cjooRE9NVGVzdE9iaiAqKW5ldwogICAgIElNUEwtPnNldFRlc3RPYmpBdHRyKGNvcmUobmV3VGVz
dE9iakF0dHIpKTsKIH0KIAorLSAoQXJyYXkpYXJyYXlUeXBlQXR0cmlidXRlCit7CisgICAgV2Vi
Q29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIHJldHVybiBJTVBMLT5hcnJh
eVR5cGVBdHRyaWJ1dGUoKTsKK30KKwogLSAoRE9NVGVzdE9iaiAqKVhNTE9iakF0dHIKIHsKICAg
ICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvVjgvVjhUZXN0T2JqLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvVjgvVjhUZXN0T2JqLmNwcAko
cmV2aXNpb24gMTEwODM5KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0
L1Y4L1Y4VGVzdE9iai5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMyLDYgKzMyLDcgQEAKICNpbmNs
dWRlICJTY3JpcHRBcmd1bWVudHMuaCIKICNpbmNsdWRlICJTY3JpcHRDYWxsU3RhY2suaCIKICNp
bmNsdWRlICJTY3JpcHRDYWxsU3RhY2tGYWN0b3J5LmgiCisjaW5jbHVkZSAiU2NyaXB0UHJvZmls
ZS5oIgogI2luY2x1ZGUgIlNlcmlhbGl6ZWRTY3JpcHRWYWx1ZS5oIgogI2luY2x1ZGUgIlY4Qmlu
ZGluZy5oIgogI2luY2x1ZGUgIlY4QmluZGluZ01hY3Jvcy5oIgpAQCAtNDIsNiArNDMsNyBAQAog
I2luY2x1ZGUgIlY4UHJveHkuaCIKICNpbmNsdWRlICJWOFNWR0RvY3VtZW50LmgiCiAjaW5jbHVk
ZSAiVjhTVkdQb2ludC5oIgorI2luY2x1ZGUgIlY4U2NyaXB0UHJvZmlsZS5oIgogI2luY2x1ZGUg
IlY4VGVzdENhbGxiYWNrLmgiCiAjaW5jbHVkZSAiVjhhLmgiCiAjaW5jbHVkZSAiVjhhbnkuaCIK
QEAgLTIxNyw2ICsyMTksMTMgQEAgc3RhdGljIHZvaWQgdGVzdE9iakF0dHJBdHRyU2V0dGVyKHY4
OjpMbwogICAgIHJldHVybjsKIH0KIAorc3RhdGljIHY4OjpIYW5kbGU8djg6OlZhbHVlPiBhcnJh
eVR5cGVBdHRyaWJ1dGVBdHRyR2V0dGVyKHY4OjpMb2NhbDx2ODo6U3RyaW5nPiBuYW1lLCBjb25z
dCB2ODo6QWNjZXNzb3JJbmZvJiBpbmZvKQoreworICAgIElOQ19TVEFUUygiRE9NLlRlc3RPYmou
YXJyYXlUeXBlQXR0cmlidXRlLl9nZXQiKTsKKyAgICBUZXN0T2JqKiBpbXAgPSBWOFRlc3RPYmo6
OnRvTmF0aXZlKGluZm8uSG9sZGVyKCkpOworICAgIHJldHVybiB2OEFycmF5KGltcC0+YXJyYXlU
eXBlQXR0cmlidXRlKCkpOworfQorCiBzdGF0aWMgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IFhNTE9i
akF0dHJBdHRyR2V0dGVyKHY4OjpMb2NhbDx2ODo6U3RyaW5nPiBuYW1lLCBjb25zdCB2ODo6QWNj
ZXNzb3JJbmZvJiBpbmZvKQogewogICAgIElOQ19TVEFUUygiRE9NLlRlc3RPYmouWE1MT2JqQXR0
ci5fZ2V0Iik7CkBAIC0xNzYxLDYgKzE3NzAsOCBAQCBzdGF0aWMgY29uc3QgQmF0Y2hlZEF0dHJp
YnV0ZSBUZXN0T2JqQXR0CiAgICAgeyJzdHJpbmdBdHRyIiwgVGVzdE9iakludGVybmFsOjpzdHJp
bmdBdHRyQXR0ckdldHRlciwgVGVzdE9iakludGVybmFsOjpzdHJpbmdBdHRyQXR0clNldHRlciwg
MCAvKiBubyBkYXRhICovLCBzdGF0aWNfY2FzdDx2ODo6QWNjZXNzQ29udHJvbD4odjg6OkRFRkFV
TFQpLCBzdGF0aWNfY2FzdDx2ODo6UHJvcGVydHlBdHRyaWJ1dGU+KHY4OjpOb25lKSwgMCAvKiBv
biBpbnN0YW5jZSAqL30sCiAgICAgLy8gQXR0cmlidXRlICd0ZXN0T2JqQXR0cicgKFR5cGU6ICdh
dHRyaWJ1dGUnIEV4dEF0dHI6ICcnKQogICAgIHsidGVzdE9iakF0dHIiLCBUZXN0T2JqSW50ZXJu
YWw6OnRlc3RPYmpBdHRyQXR0ckdldHRlciwgVGVzdE9iakludGVybmFsOjp0ZXN0T2JqQXR0ckF0
dHJTZXR0ZXIsIDAgLyogbm8gZGF0YSAqLywgc3RhdGljX2Nhc3Q8djg6OkFjY2Vzc0NvbnRyb2w+
KHY4OjpERUZBVUxUKSwgc3RhdGljX2Nhc3Q8djg6OlByb3BlcnR5QXR0cmlidXRlPih2ODo6Tm9u
ZSksIDAgLyogb24gaW5zdGFuY2UgKi99LAorICAgIC8vIEF0dHJpYnV0ZSAnYXJyYXlUeXBlQXR0
cmlidXRlJyAoVHlwZTogJ3JlYWRvbmx5IGF0dHJpYnV0ZScgRXh0QXR0cjogJ0FycmF5VHlwZScp
CisgICAgeyJhcnJheVR5cGVBdHRyaWJ1dGUiLCBUZXN0T2JqSW50ZXJuYWw6OmFycmF5VHlwZUF0
dHJpYnV0ZUF0dHJHZXR0ZXIsIDAsIDAgLyogbm8gZGF0YSAqLywgc3RhdGljX2Nhc3Q8djg6OkFj
Y2Vzc0NvbnRyb2w+KHY4OjpERUZBVUxUKSwgc3RhdGljX2Nhc3Q8djg6OlByb3BlcnR5QXR0cmli
dXRlPih2ODo6Tm9uZSksIDAgLyogb24gaW5zdGFuY2UgKi99LAogICAgIC8vIEF0dHJpYnV0ZSAn
WE1MT2JqQXR0cicgKFR5cGU6ICdhdHRyaWJ1dGUnIEV4dEF0dHI6ICcnKQogICAgIHsiWE1MT2Jq
QXR0ciIsIFRlc3RPYmpJbnRlcm5hbDo6WE1MT2JqQXR0ckF0dHJHZXR0ZXIsIFRlc3RPYmpJbnRl
cm5hbDo6WE1MT2JqQXR0ckF0dHJTZXR0ZXIsIDAgLyogbm8gZGF0YSAqLywgc3RhdGljX2Nhc3Q8
djg6OkFjY2Vzc0NvbnRyb2w+KHY4OjpERUZBVUxUKSwgc3RhdGljX2Nhc3Q8djg6OlByb3BlcnR5
QXR0cmlidXRlPih2ODo6Tm9uZSksIDAgLyogb24gaW5zdGFuY2UgKi99LAogICAgIC8vIEF0dHJp
YnV0ZSAnY3JlYXRlJyAoVHlwZTogJ2F0dHJpYnV0ZScgRXh0QXR0cjogJycpCkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy92OC9WOEJpbmRpbmcuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy92OC9WOEJpbmRpbmcuaAkocmV2aXNpb24gMTEwODM5KQorKysgU291
cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvVjhCaW5kaW5nLmgJKHdvcmtpbmcgY29weSkKQEAgLTI4
Niw2ICsyODYsMTkgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICByZXR1cm4gdjhFeHRl
cm5hbFN0cmluZyhzdHJpbmcpOwogICAgIH0KIAorICAgIHRlbXBsYXRlPHR5cGVuYW1lIEl0ZXJh
YmxlPgorICAgIHY4OjpIYW5kbGU8djg6OlZhbHVlPiB2OEFycmF5KGNvbnN0IEl0ZXJhYmxlJiB2
ZWN0b3IpCisgICAgeworICAgICAgICBpZiAodmVjdG9yLmlzRW1wdHkoKSkKKyAgICAgICAgICAg
IHJldHVybiB2ODo6TnVsbCgpOworICAgICAgICB2ODo6TG9jYWw8djg6OkFycmF5PiByZXN1bHQg
PSB2ODo6QXJyYXk6Ok5ldyh2ZWN0b3Iuc2l6ZSgpKTsKKyAgICAgICAgaW50IGluZGV4ID0gMDsK
KyAgICAgICAgdHlwZW5hbWUgSXRlcmFibGU6OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IHZlY3Rvci5l
bmQoKTsKKyAgICAgICAgZm9yICh0eXBlbmFtZSBJdGVyYWJsZTo6Y29uc3RfaXRlcmF0b3IgaXRl
ciA9IHZlY3Rvci5iZWdpbigpOyBpdGVyICE9IGVuZDsgKytpdGVyKQorICAgICAgICAgICAgcmVz
dWx0LT5TZXQodjg6OkludGVnZXI6Ok5ldyhpbmRleCsrKSwgdG9WOChXVEY6OmdldFB0cigqaXRl
cikpKTsKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9CisKICAgICAvLyBFbmFibGVzIGNh
Y2hpbmcgdjggd3JhcHBlcnMgY3JlYXRlZCBmb3IgV1RGOjpTdHJpbmdJbXBsLiAgQ3VycmVudGx5
IHRoaXMgY2FjaGUgcmVxdWlyZXMKICAgICAvLyBhbGwgdGhlIGNhbGxzIChib3RoIHRvIGNvbnZl
cnQgV1RGOjpTdHJpbmcgdG8gdjg6OlN0cmluZyBhbmQgdG8gR0MgdGhlIGhhbmRsZSkKICAgICAv
LyB0byBiZSBwZXJmb3JtZWQgb24gdGhlIG1haW4gdGhyZWFkLgpJbmRleDogU291cmNlL1dlYkNv
cmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4Q29uc29sZUN1c3RvbS5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4Q29uc29sZUN1c3RvbS5jcHAJKHJl
dmlzaW9uIDExMDgzOSkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOENv
bnNvbGVDdXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNiw3ICszNiw2IEBACiAjaW5jbHVk
ZSAiU2NyaXB0QXJndW1lbnRzLmgiCiAjaW5jbHVkZSAiU2NyaXB0Q2FsbFN0YWNrLmgiCiAjaW5j
bHVkZSAiU2NyaXB0Q2FsbFN0YWNrRmFjdG9yeS5oIgotI2luY2x1ZGUgIlNjcmlwdFByb2ZpbGUu
aCIKICNpbmNsdWRlICJWOEJpbmRpbmcuaCIKICNpbmNsdWRlICJWOEJpbmRpbmdNYWNyb3MuaCIK
ICNpbmNsdWRlICJWOE1lbW9yeUluZm8uaCIKQEAgLTQ1LDIzICs0NCw2IEBACiAKIG5hbWVzcGFj
ZSBXZWJDb3JlIHsKIAotdHlwZWRlZiBWZWN0b3I8UmVmUHRyPFNjcmlwdFByb2ZpbGU+ID4gUHJv
ZmlsZXNBcnJheTsKLQotI2lmIEVOQUJMRShKQVZBU0NSSVBUX0RFQlVHR0VSKQotdjg6OkhhbmRs
ZTx2ODo6VmFsdWU+IFY4Q29uc29sZTo6cHJvZmlsZXNBY2Nlc3NvckdldHRlcih2ODo6TG9jYWw8
djg6OlN0cmluZz4gbmFtZSwgY29uc3Qgdjg6OkFjY2Vzc29ySW5mbyYgaW5mbykKLXsKLSAgICBJ
TkNfU1RBVFMoIkRPTS5Db25zb2xlLnByb2ZpbGVzQWNjZXNzb3JHZXR0ZXIiKTsKLSAgICBDb25z
b2xlKiBpbXAgPSBWOENvbnNvbGU6OnRvTmF0aXZlKGluZm8uSG9sZGVyKCkpOwotICAgIGNvbnN0
IFByb2ZpbGVzQXJyYXkmIHByb2ZpbGVzID0gaW1wLT5wcm9maWxlcygpOwotICAgIHY4OjpIYW5k
bGU8djg6OkFycmF5PiByZXN1bHQgPSB2ODo6QXJyYXk6Ok5ldyhwcm9maWxlcy5zaXplKCkpOwot
ICAgIGludCBpbmRleCA9IDA7Ci0gICAgUHJvZmlsZXNBcnJheTo6Y29uc3RfaXRlcmF0b3IgZW5k
ID0gcHJvZmlsZXMuZW5kKCk7Ci0gICAgZm9yIChQcm9maWxlc0FycmF5Ojpjb25zdF9pdGVyYXRv
ciBpdGVyID0gcHJvZmlsZXMuYmVnaW4oKTsgaXRlciAhPSBlbmQ7ICsraXRlcikKLSAgICAgICAg
cmVzdWx0LT5TZXQodjg6OkludGVnZXI6Ok5ldyhpbmRleCsrKSwgdG9WOChpdGVyLT5nZXQoKSkp
OwotICAgIHJldHVybiByZXN1bHQ7Ci19Ci0jZW5kaWYKLQogdjg6OkhhbmRsZTx2ODo6VmFsdWU+
IFY4Q29uc29sZTo6dHJhY2VDYWxsYmFjayhjb25zdCB2ODo6QXJndW1lbnRzJiBhcmdzKQogewog
ICAgIElOQ19TVEFUUygiRE9NLkNvbnNvbGUudHJhY2VDYWxsYmFjayIpOwpJbmRleDogU291cmNl
L1dlYkNvcmUvcGFnZS9Db25zb2xlLmlkbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9w
YWdlL0NvbnNvbGUuaWRsCShyZXZpc2lvbiAxMTA4MzkpCisrKyBTb3VyY2UvV2ViQ29yZS9wYWdl
L0NvbnNvbGUuaWRsCSh3b3JraW5nIGNvcHkpCkBAIC00Niw3ICs0Niw3IEBAIG1vZHVsZSB3aW5k
b3cgewogICAgICAgICBbQ2FsbFdpdGg9U2NyaXB0QXJndW1lbnRzfENhbGxTdGFja10gdm9pZCBt
YXJrVGltZWxpbmUoKTsKIAogI2lmIGRlZmluZWQoRU5BQkxFX0pBVkFTQ1JJUFRfREVCVUdHRVIp
ICYmIEVOQUJMRV9KQVZBU0NSSVBUX0RFQlVHR0VSCi0gICAgICAgIHJlYWRvbmx5IGF0dHJpYnV0
ZSBbQ3VzdG9tR2V0dGVyXSBBcnJheSBwcm9maWxlczsKKyAgICAgICAgcmVhZG9ubHkgYXR0cmli
dXRlIFtBcnJheVR5cGU9U2NyaXB0UHJvZmlsZV0gQXJyYXkgcHJvZmlsZXM7CiAgICAgICAgIFtD
dXN0b21dIHZvaWQgcHJvZmlsZShpbiBET01TdHJpbmcgdGl0bGUpOwogICAgICAgICBbQ3VzdG9t
XSB2b2lkIHByb2ZpbGVFbmQoaW4gRE9NU3RyaW5nIHRpdGxlKTsKICNlbmRpZgo=
</data>
<flag name="review"
          id="135559"
          type_id="1"
          status="-"
          setter="abarth"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>132458</attachid>
            <date>2012-03-17 04:22:11 -0700</date>
            <delta_ts>2012-03-19 07:10:54 -0700</delta_ts>
            <desc>patch</desc>
            <filename>wip_003.diff</filename>
            <type>text/plain</type>
            <size>14637</size>
            <attacher name="Vineet Chaudhary (vineetc)">code.vineet</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDExMTExOCkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDM1IEBACisyMDEyLTAzLTE3ICBWaW5lZXQg
Q2hhdWRoYXJ5ICA8dmluZWV0LmNoYXVkaGFyeUBtb3Rvcm9sYS5jb20+CisKKyAgICAgICAgaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTgwNjk2CisgICAgICAgIFJlbW92
ZSBjdXN0b20gYmluZGluZ3MgZm9yIGF0dHJpYnV0ZSB0eXBlIEFycmF5LiAKKworICAgICAgICBS
ZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBObyBuZXcgdGVzdHMuCisKKyAg
ICAgICAgKiBiaW5kaW5ncy9qcy9KU0NvbnNvbGVDdXN0b20uY3BwOiBSZW1vdmVkIGN1c3RvbSBj
YWxsIHByb2ZpbGVzKCkuCisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKiBiaW5kaW5ncy9q
cy9KU0RPTUJpbmRpbmcuaDogQWRkZWQgdGVtcGxhdGUganNBcnJheSgpIGltcGxlbWVudGF0aW9u
LgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChXZWJDb3JlOjpqc0FycmF5KToKKyAgICAg
ICAgKiBiaW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0b3JHT2JqZWN0LnBtOiBNb2RpZmllZCBj
b2RlZ2VuZXJhdG9yIHRvIGdlbmVyYXRlIGNvZGUgZm9yIHNlcXVlbmNlLgorICAgICAgICAoU2tp
cEF0dHJpYnV0ZSk6CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy9Db2RlR2VuZXJhdG9ySlMu
cG06IE1vZGlmaWVkIGNvZGVnZW5lcmF0b3IgdG8gZ2VuZXJhdGUgY29kZSBmb3Igc2VxdWVuY2Uu
CisgICAgICAgIChOYXRpdmVUb0pTVmFsdWUpOgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMv
Q29kZUdlbmVyYXRvclY4LnBtOiBNb2RpZmllZCBjb2RlZ2VuZXJhdG9yIHRvIGdlbmVyYXRlIGNv
ZGUgZm9yIHNlcXVlbmNlLgorICAgICAgICAoTmF0aXZlVG9KU1ZhbHVlKToKKyAgICAgICAgKiBi
aW5kaW5ncy9zY3JpcHRzL3Rlc3QvR09iamVjdC9XZWJLaXRET01UZXN0T2JqLmNwcDoKKyAgICAg
ICAgKHdlYmtpdF9kb21fdGVzdF9vYmpfZ2V0X3Byb3BlcnR5KToKKyAgICAgICAgKHdlYmtpdF9k
b21fdGVzdF9vYmpfY2xhc3NfaW5pdCk6CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0
L0dPYmplY3QvV2ViS2l0RE9NVGVzdE9iai5oOgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMv
dGVzdC9KUy9KU1Rlc3RPYmouY3BwOgorICAgICAgICAoV2ViQ29yZTo6anNUZXN0T2JqU2VxdWVu
Y2VBdHRyKToKKyAgICAgICAgKFdlYkNvcmU6OmpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uTWV0
aG9kUmV0dXJuaW5nU2VxdWVuY2UpOgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9W
OC9WOFRlc3RPYmouY3BwOgorICAgICAgICAoV2ViQ29yZTo6VGVzdE9iakludGVybmFsOjpzZXF1
ZW5jZUF0dHJBdHRyR2V0dGVyKToKKyAgICAgICAgKFdlYkNvcmU6OlRlc3RPYmpJbnRlcm5hbDo6
bWV0aG9kUmV0dXJuaW5nU2VxdWVuY2VDYWxsYmFjayk6CisgICAgICAgICogcGFnZS9Db25zb2xl
LmlkbDogUmVtb3ZlZCBbQ3VzdG9tXSBmb3IgcHJvZmlsZXMuCisKIDIwMTItMDItMDcgIFJvYmVy
dCBIb2dhbiAgPHJvYmVydEB3ZWJraXQub3JnPgogCiAgICAgICAgIENTUyAyLjEgZmFpbHVyZTog
Zml4ZWQtdGFibGUtbGF5b3V0LTAxMyBhbmQgZml4ZWQtdGFibGUtbGF5b3V0LTAxNSBmYWlsCklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0NvbnNvbGVDdXN0b20uY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTQ29uc29sZUN1c3RvbS5jcHAJ
KHJldmlzaW9uIDExMTExNCkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTQ29uc29s
ZUN1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMwLDMxICszMCwxNCBAQAogI2luY2x1ZGUg
IkpTQ29uc29sZS5oIgogCiAjaW5jbHVkZSAiQ29uc29sZS5oIgotI2luY2x1ZGUgIkpTU2NyaXB0
UHJvZmlsZS5oIgogI2luY2x1ZGUgIlNjcmlwdENhbGxTdGFjay5oIgogI2luY2x1ZGUgIlNjcmlw
dENhbGxTdGFja0ZhY3RvcnkuaCIKLSNpbmNsdWRlICJTY3JpcHRQcm9maWxlLmgiCi0jaW5jbHVk
ZSA8cnVudGltZS9KU0FycmF5Lmg+CiAjaW5jbHVkZSA8d3RmL093blB0ci5oPgogCiB1c2luZyBu
YW1lc3BhY2UgSlNDOwogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLXR5cGVkZWYgVmVjdG9yPFJl
ZlB0cjxTY3JpcHRQcm9maWxlPiA+IFByb2ZpbGVzQXJyYXk7Ci0KLUpTVmFsdWUgSlNDb25zb2xl
Ojpwcm9maWxlcyhFeGVjU3RhdGUqIGV4ZWMpIGNvbnN0Ci17Ci0gICAgY29uc3QgUHJvZmlsZXNB
cnJheSYgcHJvZmlsZXMgPSBpbXBsKCktPnByb2ZpbGVzKCk7Ci0gICAgTWFya2VkQXJndW1lbnRC
dWZmZXIgbGlzdDsKLQotICAgIFByb2ZpbGVzQXJyYXk6OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IHBy
b2ZpbGVzLmVuZCgpOwotICAgIGZvciAoUHJvZmlsZXNBcnJheTo6Y29uc3RfaXRlcmF0b3IgaXRl
ciA9IHByb2ZpbGVzLmJlZ2luKCk7IGl0ZXIgIT0gZW5kOyArK2l0ZXIpCi0gICAgICAgIGxpc3Qu
YXBwZW5kKHRvSlMoZXhlYywgZ2xvYmFsT2JqZWN0KCksIGl0ZXItPmdldCgpKSk7Ci0KLSAgICBy
ZXR1cm4gY29uc3RydWN0QXJyYXkoZXhlYywgZ2xvYmFsT2JqZWN0KCksIGxpc3QpOwotfQotCiBK
U1ZhbHVlIEpTQ29uc29sZTo6cHJvZmlsZShFeGVjU3RhdGUqIGV4ZWMpCiB7CiAgICAgUmVmUHRy
PFNjcmlwdENhbGxTdGFjaz4gY2FsbFN0YWNrKGNyZWF0ZVNjcmlwdENhbGxTdGFjayhleGVjLCAx
KSk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTUJpbmRpbmcuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTUJpbmRpbmcuaAkocmV2
aXNpb24gMTExMTE0KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01CaW5kaW5n
LmgJKHdvcmtpbmcgY29weSkKQEAgLTM1LDYgKzM1LDcgQEAKICNpbmNsdWRlICJTdHlsZWRFbGVt
ZW50LmgiCiAjaW5jbHVkZSA8aGVhcC9XZWFrLmg+CiAjaW5jbHVkZSA8cnVudGltZS9GdW5jdGlv
blByb3RvdHlwZS5oPgorI2luY2x1ZGUgPHJ1bnRpbWUvSlNBcnJheS5oPgogI2luY2x1ZGUgPHJ1
bnRpbWUvTG9va3VwLmg+CiAjaW5jbHVkZSA8cnVudGltZS9PYmplY3RQcm90b3R5cGUuaD4KICNp
bmNsdWRlIDx3dGYvRm9yd2FyZC5oPgpAQCAtMjc4LDYgKzI3OSwyMSBAQCBlbnVtIFBhcmFtZXRl
ckRlZmF1bHRQb2xpY3kgewogICAgICAgICByZXR1cm4gdG9KUyhleGVjLCBnbG9iYWxPYmplY3Qs
IHB0ci5nZXQoKSk7CiAgICAgfQogCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgSXRlcmFibGU+Cisg
ICAgSlNDOjpKU1ZhbHVlIGpzQXJyYXkoSlNDOjpFeGVjU3RhdGUqIGV4ZWMsIEpTRE9NR2xvYmFs
T2JqZWN0KiBnbG9iYWxPYmplY3QsIGNvbnN0IEl0ZXJhYmxlJiB2ZWN0b3IpCisgICAgeworICAg
ICAgICBpZiAodmVjdG9yLmlzRW1wdHkoKSkKKyAgICAgICAgICAgIHJldHVybiBKU0M6OmpzTnVs
bCgpOworCisgICAgICAgIEpTQzo6TWFya2VkQXJndW1lbnRCdWZmZXIgbGlzdDsKKyAgICAgICAg
dHlwZW5hbWUgSXRlcmFibGU6OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IHZlY3Rvci5lbmQoKTsKKwor
ICAgICAgICBmb3IgKHR5cGVuYW1lIEl0ZXJhYmxlOjpjb25zdF9pdGVyYXRvciBpdGVyID0gdmVj
dG9yLmJlZ2luKCk7IGl0ZXIgIT0gZW5kOyArK2l0ZXIpCisgICAgICAgICAgICBsaXN0LmFwcGVu
ZCh0b0pTKGV4ZWMsIGdsb2JhbE9iamVjdCwgV1RGOjpnZXRQdHIoKml0ZXIpKSk7CisKKyAgICAg
ICAgcmV0dXJuIEpTQzo6Y29uc3RydWN0QXJyYXkoZXhlYywgbGlzdCk7CisgICAgfQorCiAgICAg
Ly8gVmFsaWRhdGVzIHRoYXQgdGhlIHBhc3NlZCBvYmplY3QgaXMgYSBzZXF1ZW5jZSB0eXBlIHBl
ciBzZWN0aW9uIDQuMS4xMyBvZiB0aGUgV2ViSURMIHNwZWMuCiAgICAgSlNDOjpKU09iamVjdCog
dG9KU1NlcXVlbmNlKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpKU1ZhbHVlLCB1bnNpZ25lZCYpOwog
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0b3JHT2Jq
ZWN0LnBtCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvQ29k
ZUdlbmVyYXRvckdPYmplY3QucG0JKHJldmlzaW9uIDExMTExNCkKKysrIFNvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL3NjcmlwdHMvQ29kZUdlbmVyYXRvckdPYmplY3QucG0JKHdvcmtpbmcgY29weSkK
QEAgLTE2NCw2ICsxNjQsMTAgQEAgc3ViIFNraXBBdHRyaWJ1dGUgewogICAgICAgICByZXR1cm4g
MTsKICAgICB9CiAKKyAgICBpZiAoJHByb3BUeXBlIGVxICJzZXF1ZW5jZTxTY3JpcHRQcm9maWxl
PiIpIHsKKyAgICAgICAgcmV0dXJuIDE7CisgICAgfQorCiAgICAgIyBUaGlzIGlzIGZvciBET01X
aW5kb3cuaWRsIGxvY2F0aW9uIGF0dHJpYnV0ZQogICAgIGlmICgkYXR0cmlidXRlLT5zaWduYXR1
cmUtPm5hbWUgZXEgImxvY2F0aW9uIikgewogICAgICAgICByZXR1cm4gMTsKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvQ29kZUdlbmVyYXRvckpTLnBtCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvQ29kZUdlbmVyYXRvckpTLnBtCShy
ZXZpc2lvbiAxMTExMTQpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL0NvZGVH
ZW5lcmF0b3JKUy5wbQkod29ya2luZyBjb3B5KQpAQCAtMzAwMCw2ICszMDAwLDEzIEBAIHN1YiBO
YXRpdmVUb0pTVmFsdWUKICAgICAgICAgQWRkVG9JbXBsSW5jbHVkZXMoIlN0eWxlUHJvcGVydHlT
ZXQuaCIsICRjb25kaXRpb25hbCk7CiAgICAgfQogCisgICAgaWYgKCR0eXBlIGVxICJzZXF1ZW5j
ZTxTY3JpcHRQcm9maWxlPiIpIHsKKyAgICAgICAgQWRkVG9JbXBsSW5jbHVkZXMoIjxydW50aW1l
L0pTQXJyYXkuaD4iLCAkY29uZGl0aW9uYWwpOworICAgICAgICBBZGRUb0ltcGxJbmNsdWRlcygi
SlNTY3JpcHRQcm9maWxlLmgiLCAkY29uZGl0aW9uYWwpOworICAgICAgICBBZGRUb0ltcGxJbmNs
dWRlcygiU2NyaXB0UHJvZmlsZS5oIiwgJGNvbmRpdGlvbmFsKTsKKyAgICAgICAgcmV0dXJuICJq
c0FycmF5KGV4ZWMsICR0aGlzVmFsdWUtPmdsb2JhbE9iamVjdCgpLCAkdmFsdWUpIjsKKyAgICB9
CisKICAgICBpZiAoJHR5cGUgZXEgIk5vZGVMaXN0IikgewogICAgICAgICBBZGRUb0ltcGxJbmNs
dWRlcygiTmFtZU5vZGVMaXN0LmgiLCAkY29uZGl0aW9uYWwpOwogICAgIH0KSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvQ29kZUdlbmVyYXRvclY4LnBtCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvQ29kZUdlbmVyYXRvclY4LnBtCShy
ZXZpc2lvbiAxMTExMTQpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL0NvZGVH
ZW5lcmF0b3JWOC5wbQkod29ya2luZyBjb3B5KQpAQCAtMzc2OSw2ICszNzY5LDEyIEBAIHN1YiBO
YXRpdmVUb0pTVmFsdWUKIAogICAgIEFkZEluY2x1ZGVzRm9yVHlwZSgkdHlwZSk7CiAKKyAgICBp
ZiAoJHR5cGUgZXEgInNlcXVlbmNlPFNjcmlwdFByb2ZpbGU+IikgeworICAgICAgICBBZGRUb0lt
cGxJbmNsdWRlcygiVjhTY3JpcHRQcm9maWxlLmgiKTsKKyAgICAgICAgQWRkVG9JbXBsSW5jbHVk
ZXMoIlNjcmlwdFByb2ZpbGUuaCIpOworICAgICAgICByZXR1cm4gInY4QXJyYXkoJHZhbHVlKSI7
CisgICAgfQorCiAgICAgIyBzcGVjaWFsIGNhc2UgZm9yIG5vbi1ET00gbm9kZSBpbnRlcmZhY2Vz
CiAgICAgaWYgKElzRE9NTm9kZVR5cGUoJHR5cGUpKSB7CiAgICAgICAgIHJldHVybiAidG9WOCgk
e3ZhbHVlfSIgLiAoJHNpZ25hdHVyZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57IlJldHVybk5ld09i
amVjdCJ9ID8gIiwgdHJ1ZSkiIDogIikiKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L3NjcmlwdHMvdGVzdC9HT2JqZWN0L1dlYktpdERPTVRlc3RPYmouY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9HT2JqZWN0L1dlYktpdERPTVRl
c3RPYmouY3BwCShyZXZpc2lvbiAxMTExMTQpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9z
Y3JpcHRzL3Rlc3QvR09iamVjdC9XZWJLaXRET01UZXN0T2JqLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtODEwLDMyICs4MTAsNiBAQCB3ZWJraXRfZG9tX3Rlc3Rfb2JqX3NldF90ZXN0X29ial9hdHRy
KFdlCiAgICAgaXRlbS0+c2V0VGVzdE9iakF0dHIoY29udmVydGVkX3ZhbHVlKTsKIH0KIAotV2Vi
S2l0RE9Nc2VxdWVuY2U8U2NyaXB0UHJvZmlsZT4qCi13ZWJraXRfZG9tX3Rlc3Rfb2JqX2dldF9z
ZXF1ZW5jZV9hdHRyKFdlYktpdERPTVRlc3RPYmoqIHNlbGYpCi17Ci0gICAgZ19yZXR1cm5fdmFs
X2lmX2ZhaWwoc2VsZiwgMCk7Ci0gICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0
YXRlOwotICAgIFdlYkNvcmU6OlRlc3RPYmogKiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOwot
ICAgIFBhc3NSZWZQdHI8V2ViQ29yZTo6c2VxdWVuY2U8U2NyaXB0UHJvZmlsZT4+IGdfcmVzID0g
V1RGOjpnZXRQdHIoaXRlbS0+c2VxdWVuY2VBdHRyKCkpOwotICAgIFdlYktpdERPTXNlcXVlbmNl
PFNjcmlwdFByb2ZpbGU+KiByZXMgPSBXZWJLaXQ6OmtpdChnX3Jlcy5nZXQoKSk7Ci0gICAgcmV0
dXJuIHJlczsKLX0KLQotdm9pZAotd2Via2l0X2RvbV90ZXN0X29ial9zZXRfc2VxdWVuY2VfYXR0
cihXZWJLaXRET01UZXN0T2JqKiBzZWxmLCBXZWJLaXRET01zZXF1ZW5jZTxTY3JpcHRQcm9maWxl
PiogdmFsdWUpCi17Ci0gICAgZ19yZXR1cm5faWZfZmFpbChzZWxmKTsKLSAgICBXZWJDb3JlOjpK
U01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7Ci0gICAgV2ViQ29yZTo6VGVzdE9iaiAqIGl0ZW0g
PSBXZWJLaXQ6OmNvcmUoc2VsZik7Ci0gICAgZ19yZXR1cm5faWZfZmFpbCh2YWx1ZSk7Ci0gICAg
V2ViQ29yZTo6c2VxdWVuY2U8U2NyaXB0UHJvZmlsZT4gKiBjb252ZXJ0ZWRfdmFsdWUgPSBOVUxM
OwotICAgIGlmICh2YWx1ZSAhPSBOVUxMKSB7Ci0gICAgICAgIGNvbnZlcnRlZF92YWx1ZSA9IFdl
YktpdDo6Y29yZSh2YWx1ZSk7Ci0gICAgICAgIGdfcmV0dXJuX2lmX2ZhaWwoY29udmVydGVkX3Zh
bHVlKTsKLSAgICB9Ci0gICAgaXRlbS0+c2V0U2VxdWVuY2VBdHRyKGNvbnZlcnRlZF92YWx1ZSk7
Ci19Ci0KIFdlYktpdERPTVRlc3RPYmoqCiB3ZWJraXRfZG9tX3Rlc3Rfb2JqX2dldF94bWxfb2Jq
X2F0dHIoV2ViS2l0RE9NVGVzdE9iaiogc2VsZikKIHsKQEAgLTE1OTUsNyArMTU2OSw2IEBAIGVu
dW0gewogICAgIFBST1BfVU5TSUdORURfTE9OR19MT05HX0FUVFIsCiAgICAgUFJPUF9TVFJJTkdf
QVRUUiwKICAgICBQUk9QX1RFU1RfT0JKX0FUVFIsCi0gICAgUFJPUF9TRVFVRU5DRV9BVFRSLAog
ICAgIFBST1BfWE1MX09CSl9BVFRSLAogICAgIFBST1BfQ1JFQVRFLAogICAgIFBST1BfUkVGTEVD
VEVEX1NUUklOR19BVFRSLApAQCAtMTg1NSwxMiArMTgyOCw2IEBAIHN0YXRpYyB2b2lkIHdlYmtp
dF9kb21fdGVzdF9vYmpfZ2V0X3Byb3AKICAgICAgICAgZ192YWx1ZV9zZXRfb2JqZWN0KHZhbHVl
LCBXZWJLaXQ6OmtpdChwdHIuZ2V0KCkpKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQotICAgIGNh
c2UgUFJPUF9TRVFVRU5DRV9BVFRSOgotICAgIHsKLSAgICAgICAgUmVmUHRyPFdlYkNvcmU6OnNl
cXVlbmNlPFNjcmlwdFByb2ZpbGU+PiBwdHIgPSBjb3JlU2VsZi0+c2VxdWVuY2VBdHRyKCk7Ci0g
ICAgICAgIGdfdmFsdWVfc2V0X29iamVjdCh2YWx1ZSwgV2ViS2l0OjpraXQocHRyLmdldCgpKSk7
Ci0gICAgICAgIGJyZWFrOwotICAgIH0KICAgICBjYXNlIFBST1BfWE1MX09CSl9BVFRSOgogICAg
IHsKICAgICAgICAgUmVmUHRyPFdlYkNvcmU6OlRlc3RPYmo+IHB0ciA9IGNvcmVTZWxmLT54bWxP
YmpBdHRyKCk7CkBAIC0yMTUzLDEzICsyMTIwLDYgQEAgR19NQVhVSU5UNjQsIC8qIG1pbiAqLwog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBXRUJLSVRfVFlQRV9ET01fVEVTVF9PQkosIC8qIGdvYmplY3QgdHlwZSAqLwogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXRUJLSVRf
UEFSQU1fUkVBRFdSSVRFKSk7CiAgICAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eShn
b2JqZWN0Q2xhc3MsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQUk9QX1NF
UVVFTkNFX0FUVFIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnX3BhcmFt
X3NwZWNfb2JqZWN0KCJzZXF1ZW5jZS1hdHRyIiwgLyogbmFtZSAqLwotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAidGVzdF9vYmpfc2Vx
dWVuY2UtYXR0ciIsIC8qIHNob3J0IGRlc2NyaXB0aW9uICovCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJyZWFkLXdyaXRlICBXZWJL
aXRET01zZXF1ZW5jZTxTY3JpcHRQcm9maWxlPiogVGVzdE9iai5zZXF1ZW5jZS1hdHRyIiwgLyog
bG9uZ2VyIC0gY291bGQgZG8gd2l0aCBzb21lIGV4dHJhIGRvYyBzdHVmZiBoZXJlICovCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdF
QktJVF9UWVBFX0RPTV9TRVFVRU5DRTxTQ1JJUFRfUFJPRklMRT4sIC8qIGdvYmplY3QgdHlwZSAq
LwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBXRUJLSVRfUEFSQU1fUkVBRFdSSVRFKSk7Ci0gICAgZ19vYmplY3RfY2xhc3NfaW5zdGFs
bF9wcm9wZXJ0eShnb2JqZWN0Q2xhc3MsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBQUk9QX1hNTF9PQkpfQVRUUiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGdfcGFyYW1fc3BlY19vYmplY3QoInhtbC1vYmotYXR0ciIsIC8qIG5hbWUgKi8KICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInRl
c3Rfb2JqX3htbC1vYmotYXR0ciIsIC8qIHNob3J0IGRlc2NyaXB0aW9uICovCkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvR09iamVjdC9XZWJLaXRET01UZXN0T2Jq
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0dP
YmplY3QvV2ViS2l0RE9NVGVzdE9iai5oCShyZXZpc2lvbiAxMTExMTQpCisrKyBTb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvR09iamVjdC9XZWJLaXRET01UZXN0T2JqLmgJKHdv
cmtpbmcgY29weSkKQEAgLTY5NywyNyArNjk3LDYgQEAgV0VCS0lUX0FQSSB2b2lkCiB3ZWJraXRf
ZG9tX3Rlc3Rfb2JqX3NldF90ZXN0X29ial9hdHRyKFdlYktpdERPTVRlc3RPYmoqIHNlbGYsIFdl
YktpdERPTVRlc3RPYmoqIHZhbHVlKTsKIAogLyoqCi0gKiB3ZWJraXRfZG9tX3Rlc3Rfb2JqX2dl
dF9zZXF1ZW5jZV9hdHRyOgotICogQHNlbGY6IEEgI1dlYktpdERPTVRlc3RPYmoKLSAqCi0gKiBS
ZXR1cm5zOiAodHJhbnNmZXIgbm9uZSk6Ci0gKgotKiovCi1XRUJLSVRfQVBJIFdlYktpdERPTXNl
cXVlbmNlPFNjcmlwdFByb2ZpbGU+Kgotd2Via2l0X2RvbV90ZXN0X29ial9nZXRfc2VxdWVuY2Vf
YXR0cihXZWJLaXRET01UZXN0T2JqKiBzZWxmKTsKLQotLyoqCi0gKiB3ZWJraXRfZG9tX3Rlc3Rf
b2JqX3NldF9zZXF1ZW5jZV9hdHRyOgotICogQHNlbGY6IEEgI1dlYktpdERPTVRlc3RPYmoKLSAq
IEB2YWx1ZTogQSAjV2ViS2l0RE9Nc2VxdWVuY2U8U2NyaXB0UHJvZmlsZT4KLSAqCi0gKiBSZXR1
cm5zOiAodHJhbnNmZXIgbm9uZSk6Ci0gKgotKiovCi1XRUJLSVRfQVBJIHZvaWQKLXdlYmtpdF9k
b21fdGVzdF9vYmpfc2V0X3NlcXVlbmNlX2F0dHIoV2ViS2l0RE9NVGVzdE9iaiogc2VsZiwgV2Vi
S2l0RE9Nc2VxdWVuY2U8U2NyaXB0UHJvZmlsZT4qIHZhbHVlKTsKLQotLyoqCiAgKiB3ZWJraXRf
ZG9tX3Rlc3Rfb2JqX2dldF94bWxfb2JqX2F0dHI6CiAgKiBAc2VsZjogQSAjV2ViS2l0RE9NVGVz
dE9iagogICoKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9K
U1Rlc3RPYmouY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Njcmlw
dHMvdGVzdC9KUy9KU1Rlc3RPYmouY3BwCShyZXZpc2lvbiAxMTExMTQpCisrKyBTb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0T2JqLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMzMsNiArMzMsNyBAQAogI2luY2x1ZGUgIkpTRXZlbnRMaXN0ZW5lci5oIgogI2luY2x1
ZGUgIkpTU1ZHRG9jdW1lbnQuaCIKICNpbmNsdWRlICJKU1NWR1BvaW50LmgiCisjaW5jbHVkZSAi
SlNTY3JpcHRQcm9maWxlLmgiCiAjaW5jbHVkZSAiSlNUZXN0Q2FsbGJhY2suaCIKICNpbmNsdWRl
ICJKU1Rlc3RPYmouaCIKICNpbmNsdWRlICJKU2EuaCIKQEAgLTUwLDExICs1MSwxMyBAQAogI2lu
Y2x1ZGUgIlNjcmlwdEFyZ3VtZW50cy5oIgogI2luY2x1ZGUgIlNjcmlwdENhbGxTdGFjay5oIgog
I2luY2x1ZGUgIlNjcmlwdENhbGxTdGFja0ZhY3RvcnkuaCIKKyNpbmNsdWRlICJTY3JpcHRQcm9m
aWxlLmgiCiAjaW5jbHVkZSAiU2VyaWFsaXplZFNjcmlwdFZhbHVlLmgiCiAjaW5jbHVkZSAiVGVz
dE9iai5oIgogI2luY2x1ZGUgImJvb2wuaCIKICNpbmNsdWRlICJzZXF1ZW5jZTxTY3JpcHRQcm9m
aWxlPi5oIgogI2luY2x1ZGUgPHJ1bnRpbWUvRXJyb3IuaD4KKyNpbmNsdWRlIDxydW50aW1lL0pT
QXJyYXkuaD4KICNpbmNsdWRlIDxydW50aW1lL0pTU3RyaW5nLmg+CiAjaW5jbHVkZSA8d3RmL0dl
dFB0ci5oPgogCkBAIC00NzcsNyArNDgwLDcgQEAgSlNWYWx1ZSBqc1Rlc3RPYmpTZXF1ZW5jZUF0
dHIoRXhlY1N0YXRlKgogICAgIEpTVGVzdE9iaiogY2FzdGVkVGhpcyA9IHN0YXRpY19jYXN0PEpT
VGVzdE9iaio+KGFzT2JqZWN0KHNsb3RCYXNlKSk7CiAgICAgVU5VU0VEX1BBUkFNKGV4ZWMpOwog
ICAgIFRlc3RPYmoqIGltcGwgPSBzdGF0aWNfY2FzdDxUZXN0T2JqKj4oY2FzdGVkVGhpcy0+aW1w
bCgpKTsKLSAgICBKU1ZhbHVlIHJlc3VsdCA9IHRvSlMoZXhlYywgY2FzdGVkVGhpcy0+Z2xvYmFs
T2JqZWN0KCksIFdURjo6Z2V0UHRyKGltcGwtPnNlcXVlbmNlQXR0cigpKSk7CisgICAgSlNWYWx1
ZSByZXN1bHQgPSBqc0FycmF5KGV4ZWMsIGNhc3RlZFRoaXMtPmdsb2JhbE9iamVjdCgpLCBpbXBs
LT5zZXF1ZW5jZUF0dHIoKSk7CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIApAQCAtMTQyMyw3ICsx
NDI2LDcgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcgogICAgIGlm
IChleGVjLT5oYWRFeGNlcHRpb24oKSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShq
c1VuZGVmaW5lZCgpKTsKIAotICAgIEpTQzo6SlNWYWx1ZSByZXN1bHQgPSB0b0pTKGV4ZWMsIGNh
c3RlZFRoaXMtPmdsb2JhbE9iamVjdCgpLCBXVEY6OmdldFB0cihpbXBsLT5tZXRob2RSZXR1cm5p
bmdTZXF1ZW5jZShpbnRBcmcpKSk7CisgICAgSlNDOjpKU1ZhbHVlIHJlc3VsdCA9IGpzQXJyYXko
ZXhlYywgY2FzdGVkVGhpcy0+Z2xvYmFsT2JqZWN0KCksIGltcGwtPm1ldGhvZFJldHVybmluZ1Nl
cXVlbmNlKGludEFyZykpOwogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUocmVzdWx0KTsKIH0K
IApJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Y4L1Y4VGVzdE9i
ai5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0
L1Y4L1Y4VGVzdE9iai5jcHAJKHJldmlzaW9uIDExMTExNCkKKysrIFNvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL3NjcmlwdHMvdGVzdC9WOC9WOFRlc3RPYmouY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0z
Miw2ICszMiw3IEBACiAjaW5jbHVkZSAiU2NyaXB0QXJndW1lbnRzLmgiCiAjaW5jbHVkZSAiU2Ny
aXB0Q2FsbFN0YWNrLmgiCiAjaW5jbHVkZSAiU2NyaXB0Q2FsbFN0YWNrRmFjdG9yeS5oIgorI2lu
Y2x1ZGUgIlNjcmlwdFByb2ZpbGUuaCIKICNpbmNsdWRlICJTZXJpYWxpemVkU2NyaXB0VmFsdWUu
aCIKICNpbmNsdWRlICJWOEJpbmRpbmcuaCIKICNpbmNsdWRlICJWOEJpbmRpbmdNYWNyb3MuaCIK
QEAgLTQyLDYgKzQzLDcgQEAKICNpbmNsdWRlICJWOFByb3h5LmgiCiAjaW5jbHVkZSAiVjhTVkdE
b2N1bWVudC5oIgogI2luY2x1ZGUgIlY4U1ZHUG9pbnQuaCIKKyNpbmNsdWRlICJWOFNjcmlwdFBy
b2ZpbGUuaCIKICNpbmNsdWRlICJWOFRlc3RDYWxsYmFjay5oIgogI2luY2x1ZGUgIlY4YS5oIgog
I2luY2x1ZGUgIlY4YW55LmgiCkBAIC0yMjMsNyArMjI1LDcgQEAgc3RhdGljIHY4OjpIYW5kbGU8
djg6OlZhbHVlPiBzZXF1ZW5jZUF0dAogewogICAgIElOQ19TVEFUUygiRE9NLlRlc3RPYmouc2Vx
dWVuY2VBdHRyLl9nZXQiKTsKICAgICBUZXN0T2JqKiBpbXAgPSBWOFRlc3RPYmo6OnRvTmF0aXZl
KGluZm8uSG9sZGVyKCkpOwotICAgIHJldHVybiB0b1Y4KGltcC0+c2VxdWVuY2VBdHRyKCkpOwor
ICAgIHJldHVybiB2OEFycmF5KGltcC0+c2VxdWVuY2VBdHRyKCkpOwogfQogCiBzdGF0aWMgdm9p
ZCBzZXF1ZW5jZUF0dHJBdHRyU2V0dGVyKHY4OjpMb2NhbDx2ODo6U3RyaW5nPiBuYW1lLCB2ODo6
TG9jYWw8djg6OlZhbHVlPiB2YWx1ZSwgY29uc3Qgdjg6OkFjY2Vzc29ySW5mbyYgaW5mbykKQEAg
LTEwNzEsNyArMTA3Myw3IEBAIHN0YXRpYyB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gbWV0aG9kUmV0
dXIKICAgICAgICAgcmV0dXJuIHRocm93RXJyb3IoIk5vdCBlbm91Z2ggYXJndW1lbnRzIiwgVjhQ
cm94eTo6VHlwZUVycm9yKTsKICAgICBUZXN0T2JqKiBpbXAgPSBWOFRlc3RPYmo6OnRvTmF0aXZl
KGFyZ3MuSG9sZGVyKCkpOwogICAgIEVYQ0VQVElPTl9CTE9DSyhpbnQsIGludEFyZywgdG9JbnQz
MihNQVlCRV9NSVNTSU5HX1BBUkFNRVRFUihhcmdzLCAwLCBEZWZhdWx0SXNVbmRlZmluZWQpKSk7
Ci0gICAgcmV0dXJuIHRvVjgoaW1wLT5tZXRob2RSZXR1cm5pbmdTZXF1ZW5jZShpbnRBcmcpKTsK
KyAgICByZXR1cm4gdjhBcnJheShpbXAtPm1ldGhvZFJldHVybmluZ1NlcXVlbmNlKGludEFyZykp
OwogfQogCiBzdGF0aWMgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IG1ldGhvZFRoYXRSZXF1aXJlc0Fs
bEFyZ3NBbmRUaHJvd3NDYWxsYmFjayhjb25zdCB2ODo6QXJndW1lbnRzJiBhcmdzKQpJbmRleDog
U291cmNlL1dlYkNvcmUvcGFnZS9Db25zb2xlLmlkbAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9wYWdlL0NvbnNvbGUuaWRsCShyZXZpc2lvbiAxMTExMTQpCisrKyBTb3VyY2UvV2ViQ29y
ZS9wYWdlL0NvbnNvbGUuaWRsCSh3b3JraW5nIGNvcHkpCkBAIC00Niw3ICs0Niw3IEBAIG1vZHVs
ZSB3aW5kb3cgewogICAgICAgICBbQ2FsbFdpdGg9U2NyaXB0QXJndW1lbnRzfENhbGxTdGFja10g
dm9pZCBtYXJrVGltZWxpbmUoKTsKIAogI2lmIGRlZmluZWQoRU5BQkxFX0pBVkFTQ1JJUFRfREVC
VUdHRVIpICYmIEVOQUJMRV9KQVZBU0NSSVBUX0RFQlVHR0VSCi0gICAgICAgIHJlYWRvbmx5IGF0
dHJpYnV0ZSBbQ3VzdG9tR2V0dGVyXSBBcnJheSBwcm9maWxlczsKKyAgICAgICAgcmVhZG9ubHkg
YXR0cmlidXRlIHNlcXVlbmNlPFNjcmlwdFByb2ZpbGU+IHByb2ZpbGVzOwogICAgICAgICBbQ3Vz
dG9tXSB2b2lkIHByb2ZpbGUoaW4gRE9NU3RyaW5nIHRpdGxlKTsKICAgICAgICAgW0N1c3RvbV0g
dm9pZCBwcm9maWxlRW5kKGluIERPTVN0cmluZyB0aXRsZSk7CiAjZW5kaWYK
</data>
<flag name="review"
          id="136112"
          type_id="1"
          status="-"
          setter="haraken"
    />
    <flag name="commit-queue"
          id="136113"
          type_id="3"
          status="-"
          setter="webkit.review.bot"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>132575</attachid>
            <date>2012-03-19 07:10:54 -0700</date>
            <delta_ts>2012-03-19 11:29:29 -0700</delta_ts>
            <desc>patch</desc>
            <filename>wip_003.diff</filename>
            <type>text/plain</type>
            <size>22465</size>
            <attacher name="Vineet Chaudhary (vineetc)">code.vineet</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDExMTE1MykKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDQ5IEBACisyMDEyLTAzLTE5ICBWaW5lZXQg
Q2hhdWRoYXJ5ICA8dmluZWV0LmNoYXVkaGFyeUBtb3Rvcm9sYS5jb20+CisKKyAgICAgICAgaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTgwNjk2CisgICAgICAgIFJlbW92
ZSBjdXN0b20gYmluZGluZ3MgZm9yCWF0dHJpYnV0ZSB0eXBlIEFycmF5LiAKKworICAgICAgICBS
ZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBObyBuZXcgdGVzdHMuCisKKyAg
ICAgICAgKiBiaW5kaW5ncy9qcy9KU0NvbnNvbGVDdXN0b20uY3BwOiBSZW1vdmVkIGN1c3RvbSBm
dW5jdGlvbi4KKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAqIGJpbmRpbmdzL2pzL0pTRE9N
QmluZGluZy5oOiBBZGRlZCB0ZW1wbGF0ZSBqc0FycmF5LgorICAgICAgICAoV2ViQ29yZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpqc0FycmF5KToKKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL0Nv
ZGVHZW5lcmF0b3JHT2JqZWN0LnBtOiBNb2RpZmllZCBjb2RlZ2VuZXJhdG9ycyB0byBnZW5lcmF0
ZSBhcHByb3ByaWF0ZSBjb2RlLgorICAgICAgICAoU2tpcEF0dHJpYnV0ZSk6CisgICAgICAgICog
YmluZGluZ3Mvc2NyaXB0cy9Db2RlR2VuZXJhdG9ySlMucG06IERpdHRvLgorICAgICAgICAoQWRk
SW5jbHVkZXNGb3JUeXBlKToKKyAgICAgICAgKEpTVmFsdWVUb05hdGl2ZSk6CisgICAgICAgIChO
YXRpdmVUb0pTVmFsdWUpOgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvQ29kZUdlbmVyYXRv
clY4LnBtOiBEaXR0by4KKyAgICAgICAgKEdlbmVyYXRlTm9ybWFsQXR0ckdldHRlcik6CisgICAg
ICAgIChKU1ZhbHVlVG9OYXRpdmUpOgorICAgICAgICAoTmF0aXZlVG9KU1ZhbHVlKToKKyAgICAg
ICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvR09iamVjdC9XZWJLaXRET01UZXN0T2JqLmNwcDog
VXBkYXRlZCByZXN1bHRzIGZyb20gcnVubmluZyBiaW5kaW5nIHRlc3RzLgorICAgICAgICAod2Vi
a2l0X2RvbV90ZXN0X29ial9nZXRfcHJvcGVydHkpOgorICAgICAgICAod2Via2l0X2RvbV90ZXN0
X29ial9jbGFzc19pbml0KToKKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvR09iamVj
dC9XZWJLaXRET01UZXN0T2JqLmg6IERpdHRvLgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMv
dGVzdC9KUy9KU1Rlc3RPYmouY3BwOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OmpzVGVzdE9i
alNlcXVlbmNlQXR0cik6CisgICAgICAgIChXZWJDb3JlOjpzZXRKU1Rlc3RPYmpTZXF1ZW5jZUF0
dHIpOgorICAgICAgICAoV2ViQ29yZTo6anNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25NZXRob2RX
aXRoU2VxdWVuY2VBcmcpOgorICAgICAgICAoV2ViQ29yZTo6anNUZXN0T2JqUHJvdG90eXBlRnVu
Y3Rpb25NZXRob2RSZXR1cm5pbmdTZXF1ZW5jZSk6CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0
cy90ZXN0L1Y4L1Y4VGVzdE9iai5jcHA6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6VGVzdE9i
akludGVybmFsOjpzZXF1ZW5jZUF0dHJBdHRyR2V0dGVyKToKKyAgICAgICAgKFdlYkNvcmU6OlRl
c3RPYmpJbnRlcm5hbDo6c2VxdWVuY2VBdHRyQXR0clNldHRlcik6CisgICAgICAgIChXZWJDb3Jl
OjpUZXN0T2JqSW50ZXJuYWw6Om1ldGhvZFdpdGhTZXF1ZW5jZUFyZ0NhbGxiYWNrKToKKyAgICAg
ICAgKFdlYkNvcmU6OlRlc3RPYmpJbnRlcm5hbDo6bWV0aG9kUmV0dXJuaW5nU2VxdWVuY2VDYWxs
YmFjayk6CisgICAgICAgICogYmluZGluZ3MvdjgvVjhCaW5kaW5nLmg6IEFkZGVkIHRlbXBsYXRl
IHY4QXJyYXkuCisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKFdlYkNvcmU6OnY4QXJyYXkp
OgorICAgICAgICAqIGJpbmRpbmdzL3Y4L2N1c3RvbS9WOENvbnNvbGVDdXN0b20uY3BwOiBSZW1v
dmVkIGN1c3RvbSBmdW5jdGlvbi4KKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAqIHBhZ2Uv
Q29uc29sZS5pZGw6IFJlcGxhY2VkIGF0dHJpYnV0ZSB0eXBlIEFycmF5IHRvIHNlcXVlbmNlPFNy
aXB0UHJvZmlsZT4gdG8gcmVtb3ZlCisgICAgICAgIGN1c3RvbSBiaW5kaW5ncy4KKwogMjAxMi0w
My0xOCAgRGFuYSBKYW5zZW5zICA8ZGFuYWtqQGNocm9taXVtLm9yZz4KIAogICAgICAgICBbY2hy
b21pdW1dIERvbid0IG9jY2x1ZGUgb24gbWFpbi10aHJlYWQgYmVoaW5kIGxheWVycy9zdXJmYWNl
cyB3aXRoIGltcGwtdGhyZWFkIGFuaW1hdGlvbnMKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL2pzL0pTQ29uc29sZUN1c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
YmluZGluZ3MvanMvSlNDb25zb2xlQ3VzdG9tLmNwcAkocmV2aXNpb24gMTExMTUzKQorKysgU291
cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNDb25zb2xlQ3VzdG9tLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMzAsMzEgKzMwLDE0IEBACiAjaW5jbHVkZSAiSlNDb25zb2xlLmgiCiAKICNpbmNsdWRl
ICJDb25zb2xlLmgiCi0jaW5jbHVkZSAiSlNTY3JpcHRQcm9maWxlLmgiCiAjaW5jbHVkZSAiU2Ny
aXB0Q2FsbFN0YWNrLmgiCiAjaW5jbHVkZSAiU2NyaXB0Q2FsbFN0YWNrRmFjdG9yeS5oIgotI2lu
Y2x1ZGUgIlNjcmlwdFByb2ZpbGUuaCIKLSNpbmNsdWRlIDxydW50aW1lL0pTQXJyYXkuaD4KICNp
bmNsdWRlIDx3dGYvT3duUHRyLmg+CiAKIHVzaW5nIG5hbWVzcGFjZSBKU0M7CiAKIG5hbWVzcGFj
ZSBXZWJDb3JlIHsKIAotdHlwZWRlZiBWZWN0b3I8UmVmUHRyPFNjcmlwdFByb2ZpbGU+ID4gUHJv
ZmlsZXNBcnJheTsKLQotSlNWYWx1ZSBKU0NvbnNvbGU6OnByb2ZpbGVzKEV4ZWNTdGF0ZSogZXhl
YykgY29uc3QKLXsKLSAgICBjb25zdCBQcm9maWxlc0FycmF5JiBwcm9maWxlcyA9IGltcGwoKS0+
cHJvZmlsZXMoKTsKLSAgICBNYXJrZWRBcmd1bWVudEJ1ZmZlciBsaXN0OwotCi0gICAgUHJvZmls
ZXNBcnJheTo6Y29uc3RfaXRlcmF0b3IgZW5kID0gcHJvZmlsZXMuZW5kKCk7Ci0gICAgZm9yIChQ
cm9maWxlc0FycmF5Ojpjb25zdF9pdGVyYXRvciBpdGVyID0gcHJvZmlsZXMuYmVnaW4oKTsgaXRl
ciAhPSBlbmQ7ICsraXRlcikKLSAgICAgICAgbGlzdC5hcHBlbmQodG9KUyhleGVjLCBnbG9iYWxP
YmplY3QoKSwgaXRlci0+Z2V0KCkpKTsKLQotICAgIHJldHVybiBjb25zdHJ1Y3RBcnJheShleGVj
LCBnbG9iYWxPYmplY3QoKSwgbGlzdCk7Ci19Ci0KIEpTVmFsdWUgSlNDb25zb2xlOjpwcm9maWxl
KEV4ZWNTdGF0ZSogZXhlYykKIHsKICAgICBSZWZQdHI8U2NyaXB0Q2FsbFN0YWNrPiBjYWxsU3Rh
Y2soY3JlYXRlU2NyaXB0Q2FsbFN0YWNrKGV4ZWMsIDEpKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL2pzL0pTRE9NQmluZGluZy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL2pzL0pTRE9NQmluZGluZy5oCShyZXZpc2lvbiAxMTExNTMpCisrKyBTb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTUJpbmRpbmcuaAkod29ya2luZyBjb3B5KQpAQCAtMzUs
NiArMzUsNyBAQAogI2luY2x1ZGUgIlN0eWxlZEVsZW1lbnQuaCIKICNpbmNsdWRlIDxoZWFwL1dl
YWsuaD4KICNpbmNsdWRlIDxydW50aW1lL0Z1bmN0aW9uUHJvdG90eXBlLmg+CisjaW5jbHVkZSA8
cnVudGltZS9KU0FycmF5Lmg+CiAjaW5jbHVkZSA8cnVudGltZS9Mb29rdXAuaD4KICNpbmNsdWRl
IDxydW50aW1lL09iamVjdFByb3RvdHlwZS5oPgogI2luY2x1ZGUgPHd0Zi9Gb3J3YXJkLmg+CkBA
IC0yNzgsNiArMjc5LDIxIEBAIGVudW0gUGFyYW1ldGVyRGVmYXVsdFBvbGljeSB7CiAgICAgICAg
IHJldHVybiB0b0pTKGV4ZWMsIGdsb2JhbE9iamVjdCwgcHRyLmdldCgpKTsKICAgICB9CiAKKyAg
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBJdGVyYWJsZT4KKyAgICBKU0M6OkpTVmFsdWUganNBcnJheShK
U0M6OkV4ZWNTdGF0ZSogZXhlYywgSlNET01HbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgY29u
c3QgSXRlcmFibGUmIHZlY3RvcikKKyAgICB7CisgICAgICAgIGlmICh2ZWN0b3IuaXNFbXB0eSgp
KQorICAgICAgICAgICAgcmV0dXJuIEpTQzo6anNOdWxsKCk7CisKKyAgICAgICAgSlNDOjpNYXJr
ZWRBcmd1bWVudEJ1ZmZlciBsaXN0OworICAgICAgICB0eXBlbmFtZSBJdGVyYWJsZTo6Y29uc3Rf
aXRlcmF0b3IgZW5kID0gdmVjdG9yLmVuZCgpOworCisgICAgICAgIGZvciAodHlwZW5hbWUgSXRl
cmFibGU6OmNvbnN0X2l0ZXJhdG9yIGl0ZXIgPSB2ZWN0b3IuYmVnaW4oKTsgaXRlciAhPSBlbmQ7
ICsraXRlcikKKyAgICAgICAgICAgIGxpc3QuYXBwZW5kKHRvSlMoZXhlYywgZ2xvYmFsT2JqZWN0
LCBXVEY6OmdldFB0cigqaXRlcikpKTsKKworICAgICAgICByZXR1cm4gSlNDOjpjb25zdHJ1Y3RB
cnJheShleGVjLCBsaXN0KTsKKyAgICB9CisKICAgICAvLyBWYWxpZGF0ZXMgdGhhdCB0aGUgcGFz
c2VkIG9iamVjdCBpcyBhIHNlcXVlbmNlIHR5cGUgcGVyIHNlY3Rpb24gNC4xLjEzIG9mIHRoZSBX
ZWJJREwgc3BlYy4KICAgICBKU0M6OkpTT2JqZWN0KiB0b0pTU2VxdWVuY2UoSlNDOjpFeGVjU3Rh
dGUqLCBKU0M6OkpTVmFsdWUsIHVuc2lnbmVkJik7CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL3NjcmlwdHMvQ29kZUdlbmVyYXRvckdPYmplY3QucG0KPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy9Db2RlR2VuZXJhdG9yR09iamVjdC5wbQkocmV2
aXNpb24gMTExMTUzKQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy9Db2RlR2Vu
ZXJhdG9yR09iamVjdC5wbQkod29ya2luZyBjb3B5KQpAQCAtMTY0LDYgKzE2NCwxMSBAQCBzdWIg
U2tpcEF0dHJpYnV0ZSB7CiAgICAgICAgIHJldHVybiAxOwogICAgIH0KIAorICAgIG15IEBhdHRy
aWJ1dGVUeXBlID0gc3BsaXQoL1xXKy8sICRwcm9wVHlwZSk7CisgICAgaWYgKCRhdHRyaWJ1dGVU
eXBlWzBdIGVxICJzZXF1ZW5jZSIpIHsKKyAgICAgICAgcmV0dXJuIDE7CisgICAgfQorCiAgICAg
IyBUaGlzIGlzIGZvciBET01XaW5kb3cuaWRsIGxvY2F0aW9uIGF0dHJpYnV0ZQogICAgIGlmICgk
YXR0cmlidXRlLT5zaWduYXR1cmUtPm5hbWUgZXEgImxvY2F0aW9uIikgewogICAgICAgICByZXR1
cm4gMTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvQ29kZUdlbmVyYXRv
ckpTLnBtCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvQ29k
ZUdlbmVyYXRvckpTLnBtCShyZXZpc2lvbiAxMTExNTMpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0b3JKUy5wbQkod29ya2luZyBjb3B5KQpAQCAtMjQ1LDYg
KzI0NSw3IEBAIHN1YiBBZGRJbmNsdWRlc0ZvclR5cGUKICAgICBteSAkdHlwZSA9IHNoaWZ0Owog
ICAgIG15ICRpc0NhbGxiYWNrID0gc2hpZnQ7CiAgICAgbXkgJGluY2x1ZGVzUmVmID0gc2hpZnQ7
CisgICAgbXkgQGF0dHJpYnV0ZVR5cGUgPSBzcGxpdCgvXFcrLywgJHR5cGUpOwogCiAgICAgIyBX
aGVuIHdlJ3JlIGZpbmlzaGVkIHdpdGggdGhlIG9uZS1maWxlLXBlci1jbGFzcwogICAgICMgcmVv
cmdhbml6YXRpb24sIHdlIHdvbid0IG5lZWQgdGhlc2Ugc3BlY2lhbCBjYXNlcy4KQEAgLTI2Niw2
ICsyNjcsNyBAQCBzdWIgQWRkSW5jbHVkZXNGb3JUeXBlCiAgICAgICAgICRpbmNsdWRlc1JlZi0+
eyJKUyR7dHlwZX0uaCJ9ID0gMTsKICAgICB9IGVsc2lmIChJc1R5cGVkQXJyYXlUeXBlKCR0eXBl
KSkgewogICAgICAgICAkaW5jbHVkZXNSZWYtPnsiPHd0Zi8ke3R5cGV9Lmg+In0gPSAxOworICAg
IH0gZWxzaWYgKCRhdHRyaWJ1dGVUeXBlWzBdIGVxICJzZXF1ZW5jZSIpIHsKICAgICB9IGVsc2Ug
ewogICAgICAgICAjIGRlZmF1bHQsIGluY2x1ZGUgdGhlIHNhbWUgbmFtZWQgZmlsZQogICAgICAg
ICAkaW5jbHVkZXNSZWYtPnsiJHt0eXBlfS5oIn0gPSAxOwpAQCAtMjk0NSw2ICsyOTQ3LDExIEBA
IHN1YiBKU1ZhbHVlVG9OYXRpdmUKICAgICBBZGRUb0ltcGxJbmNsdWRlcygiSlNDdXN0b21Wb2lk
Q2FsbGJhY2suaCIsICRjb25kaXRpb25hbCkgaWYgJHR5cGUgZXEgIlZvaWRDYWxsYmFjayI7CiAg
ICAgQWRkVG9JbXBsSW5jbHVkZXMoIkV2ZW50LmgiLCAkY29uZGl0aW9uYWwpIGlmICR0eXBlIGVx
ICJFdmVudCI7CiAKKyAgICBteSBAYXR0cmlidXRlVHlwZSA9IHNwbGl0KC9cVysvLCAkdHlwZSk7
CisgICAgaWYgKCRhdHRyaWJ1dGVUeXBlWzBdIGVxICJzZXF1ZW5jZSIpIHsKKyAgICAgICAgcmV0
dXJuICIiOworICAgIH0KKwogICAgICMgRGVmYXVsdCwgYXNzdW1lIGF1dG9nZW5lcmF0ZWQgdHlw
ZSBjb252ZXJzaW9uIHJvdXRpbmVzCiAgICAgQWRkVG9JbXBsSW5jbHVkZXMoIkpTJHR5cGUuaCIs
ICRjb25kaXRpb25hbCk7CiAgICAgcmV0dXJuICJ0byR0eXBlKCR2YWx1ZSkiOwpAQCAtMzAwNCw2
ICszMDExLDE0IEBAIHN1YiBOYXRpdmVUb0pTVmFsdWUKICAgICAgICAgQWRkVG9JbXBsSW5jbHVk
ZXMoIk5hbWVOb2RlTGlzdC5oIiwgJGNvbmRpdGlvbmFsKTsKICAgICB9CiAKKyAgICBteSBAYXR0
cmlidXRlVHlwZSA9IHNwbGl0KC9cVysvLCAkdHlwZSk7CisgICAgaWYgKCRhdHRyaWJ1dGVUeXBl
WzBdIGVxICJzZXF1ZW5jZSIpIHsKKyAgICAgICAgQWRkVG9JbXBsSW5jbHVkZXMoIjxydW50aW1l
L0pTQXJyYXkuaD4iLCAkY29uZGl0aW9uYWwpOworICAgICAgICBBZGRUb0ltcGxJbmNsdWRlcygi
SlMiIC4gJGF0dHJpYnV0ZVR5cGVbMV0gLiAiLmgiLCAkY29uZGl0aW9uYWwpOworICAgICAgICBB
ZGRUb0ltcGxJbmNsdWRlcygkYXR0cmlidXRlVHlwZVsxXSAuICIuaCIsICRjb25kaXRpb25hbCk7
CisgICAgICAgIHJldHVybiAianNBcnJheShleGVjLCAkdGhpc1ZhbHVlLT5nbG9iYWxPYmplY3Qo
KSwgJHZhbHVlKSI7CisgICAgfQorCiAgICAgaWYgKCR0eXBlIGVxICJET01PYmplY3QiKSB7CiAg
ICAgICAgIGlmICgkaW1wbENsYXNzTmFtZSBlcSAiRG9jdW1lbnQiKSB7CiAgICAgICAgICAgICBB
ZGRUb0ltcGxJbmNsdWRlcygiSlNDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQuaCIsICRjb25kaXRp
b25hbCk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0
b3JWOC5wbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL0Nv
ZGVHZW5lcmF0b3JWOC5wbQkocmV2aXNpb24gMTExMTUzKQorKysgU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3Mvc2NyaXB0cy9Db2RlR2VuZXJhdG9yVjgucG0JKHdvcmtpbmcgY29weSkKQEAgLTkyMyw2
ICs5MjMsMTggQEAgRU5ECiAgICAgaWYgKCFJc05vZGVTdWJUeXBlKCRkYXRhTm9kZSkgJiYgJGF0
dHJOYW1lIG5lICJzZWxmIiAmJiAoSXNXcmFwcGVyVHlwZSgkcmV0dXJuVHlwZSkgJiYgKCRhdHRy
aWJ1dGUtPnR5cGUgPX4gL15yZWFkb25seS8gfHwgJGF0dHJpYnV0ZS0+c2lnbmF0dXJlLT5leHRl
bmRlZEF0dHJpYnV0ZXMtPnsiUmVwbGFjZWFibGUifSkKICAgICAgICAgJiYgJHJldHVyblR5cGUg
bmUgIkV2ZW50VGFyZ2V0IiAmJiAkcmV0dXJuVHlwZSBuZSAiU2VyaWFsaXplZFNjcmlwdFZhbHVl
IiAmJiAkcmV0dXJuVHlwZSBuZSAiRE9NV2luZG93IiAKICAgICAgICAgJiYgJHJldHVyblR5cGUg
IX4gL1NWRy8gJiYgJHJldHVyblR5cGUgIX4gL0hUTUwvICYmICFJc0RPTU5vZGVUeXBlKCRyZXR1
cm5UeXBlKSkpIHsKKworICAgICAgICBteSBAYXR0cmlidXRlVHlwZSA9IHNwbGl0KC9cVysvLCAk
cmV0dXJuVHlwZSk7CisKKyAgICAgICAgaWYgKCRhdHRyaWJ1dGVUeXBlWzBdIGVxICJzZXF1ZW5j
ZSIpIHsKKyAgICAgICAgICAgIEFkZFRvSW1wbEluY2x1ZGVzKCJWOCIgLiAkYXR0cmlidXRlVHlw
ZVsxXSAuICIuaCIpOworICAgICAgICAgICAgQWRkVG9JbXBsSW5jbHVkZXMoJGF0dHJpYnV0ZVR5
cGVbMV0gLiAiLmgiKTsKKyAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50RGVjbHMsICIgICAg
Y29uc3QgVmVjdG9yPFJlZlB0cjwkYXR0cmlidXRlVHlwZVsxXT4gPiB2ZWN0b3IgPSAke2dldHRl
clN0cmluZ307XG4iKTsKKyAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50RGVjbHMsICIgICAg
cmV0dXJuIHY4QXJyYXkodmVjdG9yKTtcbiIpOworICAgICAgICAgICAgcHVzaChAaW1wbENvbnRl
bnREZWNscywgIn1cblxuIik7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKwogICAg
ICAgICBBZGRJbmNsdWRlc0ZvclR5cGUoJHJldHVyblR5cGUpOwogICAgICAgICAjIENoZWNrIGZv
ciBhIHdyYXBwZXIgaW4gdGhlIHdyYXBwZXIgY2FjaGUuIElmIHRoZXJlIGlzIG9uZSwgd2Uga25v
dyB0aGF0IGEgaGlkZGVuIHJlZmVyZW5jZSBoYXMgYWxyZWFkeQogICAgICAgICAjIGJlZW4gY3Jl
YXRlZC4gSWYgd2UgZG9uJ3QgZmluZCBhIHdyYXBwZXIsIHdlIGNyZWF0ZSBib3RoIGEgd3JhcHBl
ciBhbmQgYSBoaWRkZW4gcmVmZXJlbmNlLgpAQCAtMzU1NCw2ICszNTY2LDExIEBAIHN1YiBKU1Zh
bHVlVG9OYXRpdmUKICAgICAgICAgcmV0dXJuICJWOERPTVdyYXBwZXI6OmdldFhQYXRoTlNSZXNv
bHZlcigkdmFsdWUpIjsKICAgICB9CiAKKyAgICBteSBAYXR0cmlidXRlVHlwZSA9IHNwbGl0KC9c
VysvLCAkdHlwZSk7CisgICAgaWYgKCRhdHRyaWJ1dGVUeXBlWzBdIGVxICJzZXF1ZW5jZSIpIHsK
KyAgICAgICAgcmV0dXJuICIiOworICAgIH0KKwogICAgIEFkZEluY2x1ZGVzRm9yVHlwZSgkdHlw
ZSk7CiAKICAgICBpZiAoSXNET01Ob2RlVHlwZSgkdHlwZSkpIHsKQEAgLTM3NjcsNiArMzc4NCwx
MyBAQCBzdWIgTmF0aXZlVG9KU1ZhbHVlCiAgICAgICAgIHJldHVybiAidjhTdHJpbmcoJHZhbHVl
KSI7CiAgICAgfQogCisgICAgbXkgQGF0dHJpYnV0ZVR5cGUgPSBzcGxpdCgvXFcrLywgJHR5cGUp
OworICAgIGlmICgkYXR0cmlidXRlVHlwZVswXSBlcSAic2VxdWVuY2UiKSB7CisgICAgICAgIEFk
ZFRvSW1wbEluY2x1ZGVzKCJWOFNjcmlwdFByb2ZpbGUuaCIpOworICAgICAgICBBZGRUb0ltcGxJ
bmNsdWRlcygiU2NyaXB0UHJvZmlsZS5oIik7CisgICAgICAgIHJldHVybiAidjhBcnJheSgkdmFs
dWUpIjsKKyAgICB9CisKICAgICBBZGRJbmNsdWRlc0ZvclR5cGUoJHR5cGUpOwogCiAgICAgIyBz
cGVjaWFsIGNhc2UgZm9yIG5vbi1ET00gbm9kZSBpbnRlcmZhY2VzCkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvR09iamVjdC9XZWJLaXRET01UZXN0T2JqLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvR09iamVj
dC9XZWJLaXRET01UZXN0T2JqLmNwcAkocmV2aXNpb24gMTExMTUzKQorKysgU291cmNlL1dlYkNv
cmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0dPYmplY3QvV2ViS2l0RE9NVGVzdE9iai5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTgxMCwzMiArODEwLDYgQEAgd2Via2l0X2RvbV90ZXN0X29ial9zZXRf
dGVzdF9vYmpfYXR0cihXZQogICAgIGl0ZW0tPnNldFRlc3RPYmpBdHRyKGNvbnZlcnRlZF92YWx1
ZSk7CiB9CiAKLVdlYktpdERPTXNlcXVlbmNlPFNjcmlwdFByb2ZpbGU+Kgotd2Via2l0X2RvbV90
ZXN0X29ial9nZXRfc2VxdWVuY2VfYXR0cihXZWJLaXRET01UZXN0T2JqKiBzZWxmKQotewotICAg
IGdfcmV0dXJuX3ZhbF9pZl9mYWlsKHNlbGYsIDApOwotICAgIFdlYkNvcmU6OkpTTWFpblRocmVh
ZE51bGxTdGF0ZSBzdGF0ZTsKLSAgICBXZWJDb3JlOjpUZXN0T2JqICogaXRlbSA9IFdlYktpdDo6
Y29yZShzZWxmKTsKLSAgICBQYXNzUmVmUHRyPFdlYkNvcmU6OnNlcXVlbmNlPFNjcmlwdFByb2Zp
bGU+PiBnX3JlcyA9IFdURjo6Z2V0UHRyKGl0ZW0tPnNlcXVlbmNlQXR0cigpKTsKLSAgICBXZWJL
aXRET01zZXF1ZW5jZTxTY3JpcHRQcm9maWxlPiogcmVzID0gV2ViS2l0OjpraXQoZ19yZXMuZ2V0
KCkpOwotICAgIHJldHVybiByZXM7Ci19Ci0KLXZvaWQKLXdlYmtpdF9kb21fdGVzdF9vYmpfc2V0
X3NlcXVlbmNlX2F0dHIoV2ViS2l0RE9NVGVzdE9iaiogc2VsZiwgV2ViS2l0RE9Nc2VxdWVuY2U8
U2NyaXB0UHJvZmlsZT4qIHZhbHVlKQotewotICAgIGdfcmV0dXJuX2lmX2ZhaWwoc2VsZik7Ci0g
ICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOwotICAgIFdlYkNvcmU6OlRl
c3RPYmogKiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOwotICAgIGdfcmV0dXJuX2lmX2ZhaWwo
dmFsdWUpOwotICAgIFdlYkNvcmU6OnNlcXVlbmNlPFNjcmlwdFByb2ZpbGU+ICogY29udmVydGVk
X3ZhbHVlID0gTlVMTDsKLSAgICBpZiAodmFsdWUgIT0gTlVMTCkgewotICAgICAgICBjb252ZXJ0
ZWRfdmFsdWUgPSBXZWJLaXQ6OmNvcmUodmFsdWUpOwotICAgICAgICBnX3JldHVybl9pZl9mYWls
KGNvbnZlcnRlZF92YWx1ZSk7Ci0gICAgfQotICAgIGl0ZW0tPnNldFNlcXVlbmNlQXR0cihjb252
ZXJ0ZWRfdmFsdWUpOwotfQotCiBXZWJLaXRET01UZXN0T2JqKgogd2Via2l0X2RvbV90ZXN0X29i
al9nZXRfeG1sX29ial9hdHRyKFdlYktpdERPTVRlc3RPYmoqIHNlbGYpCiB7CkBAIC0xNTk1LDcg
KzE1NjksNiBAQCBlbnVtIHsKICAgICBQUk9QX1VOU0lHTkVEX0xPTkdfTE9OR19BVFRSLAogICAg
IFBST1BfU1RSSU5HX0FUVFIsCiAgICAgUFJPUF9URVNUX09CSl9BVFRSLAotICAgIFBST1BfU0VR
VUVOQ0VfQVRUUiwKICAgICBQUk9QX1hNTF9PQkpfQVRUUiwKICAgICBQUk9QX0NSRUFURSwKICAg
ICBQUk9QX1JFRkxFQ1RFRF9TVFJJTkdfQVRUUiwKQEAgLTE4NTUsMTIgKzE4MjgsNiBAQCBzdGF0
aWMgdm9pZCB3ZWJraXRfZG9tX3Rlc3Rfb2JqX2dldF9wcm9wCiAgICAgICAgIGdfdmFsdWVfc2V0
X29iamVjdCh2YWx1ZSwgV2ViS2l0OjpraXQocHRyLmdldCgpKSk7CiAgICAgICAgIGJyZWFrOwog
ICAgIH0KLSAgICBjYXNlIFBST1BfU0VRVUVOQ0VfQVRUUjoKLSAgICB7Ci0gICAgICAgIFJlZlB0
cjxXZWJDb3JlOjpzZXF1ZW5jZTxTY3JpcHRQcm9maWxlPj4gcHRyID0gY29yZVNlbGYtPnNlcXVl
bmNlQXR0cigpOwotICAgICAgICBnX3ZhbHVlX3NldF9vYmplY3QodmFsdWUsIFdlYktpdDo6a2l0
KHB0ci5nZXQoKSkpOwotICAgICAgICBicmVhazsKLSAgICB9CiAgICAgY2FzZSBQUk9QX1hNTF9P
QkpfQVRUUjoKICAgICB7CiAgICAgICAgIFJlZlB0cjxXZWJDb3JlOjpUZXN0T2JqPiBwdHIgPSBj
b3JlU2VsZi0+eG1sT2JqQXR0cigpOwpAQCAtMjE1MywxMyArMjEyMCw2IEBAIEdfTUFYVUlOVDY0
LCAvKiBtaW4gKi8KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgV0VCS0lUX1RZUEVfRE9NX1RFU1RfT0JKLCAvKiBnb2JqZWN0IHR5cGUg
Ki8KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgV0VCS0lUX1BBUkFNX1JFQURXUklURSkpOwogICAgIGdfb2JqZWN0X2NsYXNzX2luc3Rh
bGxfcHJvcGVydHkoZ29iamVjdENsYXNzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgUFJPUF9TRVFVRU5DRV9BVFRSLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgZ19wYXJhbV9zcGVjX29iamVjdCgic2VxdWVuY2UtYXR0ciIsIC8qIG5hbWUgKi8KLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
InRlc3Rfb2JqX3NlcXVlbmNlLWF0dHIiLCAvKiBzaG9ydCBkZXNjcmlwdGlvbiAqLwotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAicmVh
ZC13cml0ZSAgV2ViS2l0RE9Nc2VxdWVuY2U8U2NyaXB0UHJvZmlsZT4qIFRlc3RPYmouc2VxdWVu
Y2UtYXR0ciIsIC8qIGxvbmdlciAtIGNvdWxkIGRvIHdpdGggc29tZSBleHRyYSBkb2Mgc3R1ZmYg
aGVyZSAqLwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBXRUJLSVRfVFlQRV9ET01fU0VRVUVOQ0U8U0NSSVBUX1BST0ZJTEU+LCAvKiBn
b2JqZWN0IHR5cGUgKi8KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgV0VCS0lUX1BBUkFNX1JFQURXUklURSkpOwotICAgIGdfb2JqZWN0
X2NsYXNzX2luc3RhbGxfcHJvcGVydHkoZ29iamVjdENsYXNzLAogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgUFJPUF9YTUxfT0JKX0FUVFIsCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBnX3BhcmFtX3NwZWNfb2JqZWN0KCJ4bWwtb2JqLWF0dHIiLCAvKiBu
YW1lICovCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICJ0ZXN0X29ial94bWwtb2JqLWF0dHIiLCAvKiBzaG9ydCBkZXNjcmlwdGlvbiAq
LwpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0dPYmplY3QvV2Vi
S2l0RE9NVGVzdE9iai5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Nj
cmlwdHMvdGVzdC9HT2JqZWN0L1dlYktpdERPTVRlc3RPYmouaAkocmV2aXNpb24gMTExMTUzKQor
KysgU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0dPYmplY3QvV2ViS2l0RE9N
VGVzdE9iai5oCSh3b3JraW5nIGNvcHkpCkBAIC02OTcsMjcgKzY5Nyw2IEBAIFdFQktJVF9BUEkg
dm9pZAogd2Via2l0X2RvbV90ZXN0X29ial9zZXRfdGVzdF9vYmpfYXR0cihXZWJLaXRET01UZXN0
T2JqKiBzZWxmLCBXZWJLaXRET01UZXN0T2JqKiB2YWx1ZSk7CiAKIC8qKgotICogd2Via2l0X2Rv
bV90ZXN0X29ial9nZXRfc2VxdWVuY2VfYXR0cjoKLSAqIEBzZWxmOiBBICNXZWJLaXRET01UZXN0
T2JqCi0gKgotICogUmV0dXJuczogKHRyYW5zZmVyIG5vbmUpOgotICoKLSoqLwotV0VCS0lUX0FQ
SSBXZWJLaXRET01zZXF1ZW5jZTxTY3JpcHRQcm9maWxlPioKLXdlYmtpdF9kb21fdGVzdF9vYmpf
Z2V0X3NlcXVlbmNlX2F0dHIoV2ViS2l0RE9NVGVzdE9iaiogc2VsZik7Ci0KLS8qKgotICogd2Vi
a2l0X2RvbV90ZXN0X29ial9zZXRfc2VxdWVuY2VfYXR0cjoKLSAqIEBzZWxmOiBBICNXZWJLaXRE
T01UZXN0T2JqCi0gKiBAdmFsdWU6IEEgI1dlYktpdERPTXNlcXVlbmNlPFNjcmlwdFByb2ZpbGU+
Ci0gKgotICogUmV0dXJuczogKHRyYW5zZmVyIG5vbmUpOgotICoKLSoqLwotV0VCS0lUX0FQSSB2
b2lkCi13ZWJraXRfZG9tX3Rlc3Rfb2JqX3NldF9zZXF1ZW5jZV9hdHRyKFdlYktpdERPTVRlc3RP
YmoqIHNlbGYsIFdlYktpdERPTXNlcXVlbmNlPFNjcmlwdFByb2ZpbGU+KiB2YWx1ZSk7Ci0KLS8q
KgogICogd2Via2l0X2RvbV90ZXN0X29ial9nZXRfeG1sX29ial9hdHRyOgogICogQHNlbGY6IEEg
I1dlYktpdERPTVRlc3RPYmoKICAqCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3Jp
cHRzL3Rlc3QvSlMvSlNUZXN0T2JqLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0T2JqLmNwcAkocmV2aXNpb24gMTExMTUzKQor
KysgU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE9iai5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTMzLDYgKzMzLDcgQEAKICNpbmNsdWRlICJKU0V2ZW50TGlzdGVu
ZXIuaCIKICNpbmNsdWRlICJKU1NWR0RvY3VtZW50LmgiCiAjaW5jbHVkZSAiSlNTVkdQb2ludC5o
IgorI2luY2x1ZGUgIkpTU2NyaXB0UHJvZmlsZS5oIgogI2luY2x1ZGUgIkpTVGVzdENhbGxiYWNr
LmgiCiAjaW5jbHVkZSAiSlNUZXN0T2JqLmgiCiAjaW5jbHVkZSAiSlNhLmgiCkBAIC00MiwxOSAr
NDMsMTggQEAKICNpbmNsdWRlICJKU2QuaCIKICNpbmNsdWRlICJKU2UuaCIKICNpbmNsdWRlICJK
U2ludC5oIgotI2luY2x1ZGUgIkpTc2VxdWVuY2UuaCIKLSNpbmNsdWRlICJKU3NlcXVlbmNlPFNj
cmlwdFByb2ZpbGU+LmgiCiAjaW5jbHVkZSAiS1VSTC5oIgogI2luY2x1ZGUgIlNWR0RvY3VtZW50
LmgiCiAjaW5jbHVkZSAiU1ZHU3RhdGljUHJvcGVydHlUZWFyT2ZmLmgiCiAjaW5jbHVkZSAiU2Ny
aXB0QXJndW1lbnRzLmgiCiAjaW5jbHVkZSAiU2NyaXB0Q2FsbFN0YWNrLmgiCiAjaW5jbHVkZSAi
U2NyaXB0Q2FsbFN0YWNrRmFjdG9yeS5oIgorI2luY2x1ZGUgIlNjcmlwdFByb2ZpbGUuaCIKICNp
bmNsdWRlICJTZXJpYWxpemVkU2NyaXB0VmFsdWUuaCIKICNpbmNsdWRlICJUZXN0T2JqLmgiCiAj
aW5jbHVkZSAiYm9vbC5oIgotI2luY2x1ZGUgInNlcXVlbmNlPFNjcmlwdFByb2ZpbGU+LmgiCiAj
aW5jbHVkZSA8cnVudGltZS9FcnJvci5oPgorI2luY2x1ZGUgPHJ1bnRpbWUvSlNBcnJheS5oPgog
I2luY2x1ZGUgPHJ1bnRpbWUvSlNTdHJpbmcuaD4KICNpbmNsdWRlIDx3dGYvR2V0UHRyLmg+CiAK
QEAgLTQ3Nyw3ICs0NzcsNyBAQCBKU1ZhbHVlIGpzVGVzdE9ialNlcXVlbmNlQXR0cihFeGVjU3Rh
dGUqCiAgICAgSlNUZXN0T2JqKiBjYXN0ZWRUaGlzID0gc3RhdGljX2Nhc3Q8SlNUZXN0T2JqKj4o
YXNPYmplY3Qoc2xvdEJhc2UpKTsKICAgICBVTlVTRURfUEFSQU0oZXhlYyk7CiAgICAgVGVzdE9i
aiogaW1wbCA9IHN0YXRpY19jYXN0PFRlc3RPYmoqPihjYXN0ZWRUaGlzLT5pbXBsKCkpOwotICAg
IEpTVmFsdWUgcmVzdWx0ID0gdG9KUyhleGVjLCBjYXN0ZWRUaGlzLT5nbG9iYWxPYmplY3QoKSwg
V1RGOjpnZXRQdHIoaW1wbC0+c2VxdWVuY2VBdHRyKCkpKTsKKyAgICBKU1ZhbHVlIHJlc3VsdCA9
IGpzQXJyYXkoZXhlYywgY2FzdGVkVGhpcy0+Z2xvYmFsT2JqZWN0KCksIGltcGwtPnNlcXVlbmNl
QXR0cigpKTsKICAgICByZXR1cm4gcmVzdWx0OwogfQogCkBAIC05NjUsNyArOTY1LDcgQEAgdm9p
ZCBzZXRKU1Rlc3RPYmpTZXF1ZW5jZUF0dHIoRXhlY1N0YXRlKgogewogICAgIEpTVGVzdE9iaiog
Y2FzdGVkVGhpcyA9IHN0YXRpY19jYXN0PEpTVGVzdE9iaio+KHRoaXNPYmplY3QpOwogICAgIFRl
c3RPYmoqIGltcGwgPSBzdGF0aWNfY2FzdDxUZXN0T2JqKj4oY2FzdGVkVGhpcy0+aW1wbCgpKTsK
LSAgICBpbXBsLT5zZXRTZXF1ZW5jZUF0dHIodG9zZXF1ZW5jZTxTY3JpcHRQcm9maWxlPih2YWx1
ZSkpOworICAgIGltcGwtPnNldFNlcXVlbmNlQXR0cigpOwogfQogCiAKQEAgLTE0MDIsNyArMTQw
Miw3IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2JqUHIKICAgICBUZXN0
T2JqKiBpbXBsID0gc3RhdGljX2Nhc3Q8VGVzdE9iaio+KGNhc3RlZFRoaXMtPmltcGwoKSk7CiAg
ICAgaWYgKGV4ZWMtPmFyZ3VtZW50Q291bnQoKSA8IDEpCiAgICAgICAgIHJldHVybiB0aHJvd1ZN
RXJyb3IoZXhlYywgY3JlYXRlVHlwZUVycm9yKGV4ZWMsICJOb3QgZW5vdWdoIGFyZ3VtZW50cyIp
KTsKLSAgICBzZXF1ZW5jZSogKHRvc2VxdWVuY2UoTUFZQkVfTUlTU0lOR19QQVJBTUVURVIoZXhl
YywgMCwgRGVmYXVsdElzVW5kZWZpbmVkKSkpOworICAgIHNlcXVlbmNlKiAoKTsKICAgICBpZiAo
ZXhlYy0+aGFkRXhjZXB0aW9uKCkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNV
bmRlZmluZWQoKSk7CiAgICAgaW1wbC0+bWV0aG9kV2l0aFNlcXVlbmNlQXJnKCk7CkBAIC0xNDIz
LDcgKzE0MjMsNyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9ialByCiAg
ICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5j
b2RlKGpzVW5kZWZpbmVkKCkpOwogCi0gICAgSlNDOjpKU1ZhbHVlIHJlc3VsdCA9IHRvSlMoZXhl
YywgY2FzdGVkVGhpcy0+Z2xvYmFsT2JqZWN0KCksIFdURjo6Z2V0UHRyKGltcGwtPm1ldGhvZFJl
dHVybmluZ1NlcXVlbmNlKGludEFyZykpKTsKKyAgICBKU0M6OkpTVmFsdWUgcmVzdWx0ID0ganNB
cnJheShleGVjLCBjYXN0ZWRUaGlzLT5nbG9iYWxPYmplY3QoKSwgaW1wbC0+bWV0aG9kUmV0dXJu
aW5nU2VxdWVuY2UoaW50QXJnKSk7CiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShyZXN1bHQp
OwogfQogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvVjgvVjhU
ZXN0T2JqLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRz
L3Rlc3QvVjgvVjhUZXN0T2JqLmNwcAkocmV2aXNpb24gMTExMTUzKQorKysgU291cmNlL1dlYkNv
cmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Y4L1Y4VGVzdE9iai5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTMyLDYgKzMyLDcgQEAKICNpbmNsdWRlICJTY3JpcHRBcmd1bWVudHMuaCIKICNpbmNsdWRl
ICJTY3JpcHRDYWxsU3RhY2suaCIKICNpbmNsdWRlICJTY3JpcHRDYWxsU3RhY2tGYWN0b3J5Lmgi
CisjaW5jbHVkZSAiU2NyaXB0UHJvZmlsZS5oIgogI2luY2x1ZGUgIlNlcmlhbGl6ZWRTY3JpcHRW
YWx1ZS5oIgogI2luY2x1ZGUgIlY4QmluZGluZy5oIgogI2luY2x1ZGUgIlY4QmluZGluZ01hY3Jv
cy5oIgpAQCAtNDIsNiArNDMsNyBAQAogI2luY2x1ZGUgIlY4UHJveHkuaCIKICNpbmNsdWRlICJW
OFNWR0RvY3VtZW50LmgiCiAjaW5jbHVkZSAiVjhTVkdQb2ludC5oIgorI2luY2x1ZGUgIlY4U2Ny
aXB0UHJvZmlsZS5oIgogI2luY2x1ZGUgIlY4VGVzdENhbGxiYWNrLmgiCiAjaW5jbHVkZSAiVjhh
LmgiCiAjaW5jbHVkZSAiVjhhbnkuaCIKQEAgLTUyLDcgKzU0LDYgQEAKICNpbmNsdWRlICJWOGUu
aCIKICNpbmNsdWRlICJWOGludC5oIgogI2luY2x1ZGUgIlY4c2VxdWVuY2UuaCIKLSNpbmNsdWRl
ICJWOHNlcXVlbmNlPFNjcmlwdFByb2ZpbGU+LmgiCiAjaW5jbHVkZSA8d3RmL0dldFB0ci5oPgog
I2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+CiAjaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgpAQCAt
MjIzLDE0ICsyMjQsMTQgQEAgc3RhdGljIHY4OjpIYW5kbGU8djg6OlZhbHVlPiBzZXF1ZW5jZUF0
dAogewogICAgIElOQ19TVEFUUygiRE9NLlRlc3RPYmouc2VxdWVuY2VBdHRyLl9nZXQiKTsKICAg
ICBUZXN0T2JqKiBpbXAgPSBWOFRlc3RPYmo6OnRvTmF0aXZlKGluZm8uSG9sZGVyKCkpOwotICAg
IHJldHVybiB0b1Y4KGltcC0+c2VxdWVuY2VBdHRyKCkpOworICAgIHJldHVybiB2OEFycmF5KGlt
cC0+c2VxdWVuY2VBdHRyKCkpOwogfQogCiBzdGF0aWMgdm9pZCBzZXF1ZW5jZUF0dHJBdHRyU2V0
dGVyKHY4OjpMb2NhbDx2ODo6U3RyaW5nPiBuYW1lLCB2ODo6TG9jYWw8djg6OlZhbHVlPiB2YWx1
ZSwgY29uc3Qgdjg6OkFjY2Vzc29ySW5mbyYgaW5mbykKIHsKICAgICBJTkNfU1RBVFMoIkRPTS5U
ZXN0T2JqLnNlcXVlbmNlQXR0ci5fc2V0Iik7CiAgICAgVGVzdE9iaiogaW1wID0gVjhUZXN0T2Jq
Ojp0b05hdGl2ZShpbmZvLkhvbGRlcigpKTsKLSAgICBzZXF1ZW5jZTxTY3JpcHRQcm9maWxlPiog
diA9IFY4c2VxdWVuY2U8U2NyaXB0UHJvZmlsZT46Okhhc0luc3RhbmNlKHZhbHVlKSA/IFY4c2Vx
dWVuY2U8U2NyaXB0UHJvZmlsZT46OnRvTmF0aXZlKHY4OjpIYW5kbGU8djg6Ok9iamVjdD46OkNh
c3QodmFsdWUpKSA6IDA7CisgICAgc2VxdWVuY2U8U2NyaXB0UHJvZmlsZT4qIHYgPSA7CiAgICAg
aW1wLT5zZXRTZXF1ZW5jZUF0dHIoV1RGOjpnZXRQdHIodikpOwogICAgIHJldHVybjsKIH0KQEAg
LTEwNTksNyArMTA2MCw3IEBAIHN0YXRpYyB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gbWV0aG9kV2l0
aFMKICAgICBpZiAoYXJncy5MZW5ndGgoKSA8IDEpCiAgICAgICAgIHJldHVybiB0aHJvd0Vycm9y
KCJOb3QgZW5vdWdoIGFyZ3VtZW50cyIsIFY4UHJveHk6OlR5cGVFcnJvcik7CiAgICAgVGVzdE9i
aiogaW1wID0gVjhUZXN0T2JqOjp0b05hdGl2ZShhcmdzLkhvbGRlcigpKTsKLSAgICBFWENFUFRJ
T05fQkxPQ0soc2VxdWVuY2UqLCAsIFY4c2VxdWVuY2U6Okhhc0luc3RhbmNlKE1BWUJFX01JU1NJ
TkdfUEFSQU1FVEVSKGFyZ3MsIDAsIERlZmF1bHRJc1VuZGVmaW5lZCkpID8gVjhzZXF1ZW5jZTo6
dG9OYXRpdmUodjg6OkhhbmRsZTx2ODo6T2JqZWN0Pjo6Q2FzdChNQVlCRV9NSVNTSU5HX1BBUkFN
RVRFUihhcmdzLCAwLCBEZWZhdWx0SXNVbmRlZmluZWQpKSkgOiAwKTsKKyAgICBFWENFUFRJT05f
QkxPQ0soc2VxdWVuY2UqLCAsICk7CiAgICAgaW1wLT5tZXRob2RXaXRoU2VxdWVuY2VBcmcoKTsK
ICAgICByZXR1cm4gdjg6OkhhbmRsZTx2ODo6VmFsdWU+KCk7CiB9CkBAIC0xMDcxLDcgKzEwNzIs
NyBAQCBzdGF0aWMgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IG1ldGhvZFJldHVyCiAgICAgICAgIHJl
dHVybiB0aHJvd0Vycm9yKCJOb3QgZW5vdWdoIGFyZ3VtZW50cyIsIFY4UHJveHk6OlR5cGVFcnJv
cik7CiAgICAgVGVzdE9iaiogaW1wID0gVjhUZXN0T2JqOjp0b05hdGl2ZShhcmdzLkhvbGRlcigp
KTsKICAgICBFWENFUFRJT05fQkxPQ0soaW50LCBpbnRBcmcsIHRvSW50MzIoTUFZQkVfTUlTU0lO
R19QQVJBTUVURVIoYXJncywgMCwgRGVmYXVsdElzVW5kZWZpbmVkKSkpOwotICAgIHJldHVybiB0
b1Y4KGltcC0+bWV0aG9kUmV0dXJuaW5nU2VxdWVuY2UoaW50QXJnKSk7CisgICAgcmV0dXJuIHY4
QXJyYXkoaW1wLT5tZXRob2RSZXR1cm5pbmdTZXF1ZW5jZShpbnRBcmcpKTsKIH0KIAogc3RhdGlj
IHY4OjpIYW5kbGU8djg6OlZhbHVlPiBtZXRob2RUaGF0UmVxdWlyZXNBbGxBcmdzQW5kVGhyb3dz
Q2FsbGJhY2soY29uc3Qgdjg6OkFyZ3VtZW50cyYgYXJncykKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL3Y4L1Y4QmluZGluZy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL3Y4L1Y4QmluZGluZy5oCShyZXZpc2lvbiAxMTExNTMpCisrKyBTb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy92OC9WOEJpbmRpbmcuaAkod29ya2luZyBjb3B5KQpAQCAtMjg2LDYgKzI4Niwx
OSBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIHJldHVybiB2OEV4dGVybmFsU3RyaW5n
KHN0cmluZyk7CiAgICAgfQogCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgSXRlcmFibGU+CisgICAg
djg6OkhhbmRsZTx2ODo6VmFsdWU+IHY4QXJyYXkoY29uc3QgSXRlcmFibGUmIHZlY3RvcikKKyAg
ICB7CisgICAgICAgIGlmICh2ZWN0b3IuaXNFbXB0eSgpKQorICAgICAgICAgICAgcmV0dXJuIHY4
OjpOdWxsKCk7CisgICAgICAgIHY4OjpMb2NhbDx2ODo6QXJyYXk+IHJlc3VsdCA9IHY4OjpBcnJh
eTo6TmV3KHZlY3Rvci5zaXplKCkpOworICAgICAgICBpbnQgaW5kZXggPSAwOworICAgICAgICB0
eXBlbmFtZSBJdGVyYWJsZTo6Y29uc3RfaXRlcmF0b3IgZW5kID0gdmVjdG9yLmVuZCgpOworICAg
ICAgICBmb3IgKHR5cGVuYW1lIEl0ZXJhYmxlOjpjb25zdF9pdGVyYXRvciBpdGVyID0gdmVjdG9y
LmJlZ2luKCk7IGl0ZXIgIT0gZW5kOyArK2l0ZXIpCisgICAgICAgICAgICByZXN1bHQtPlNldCh2
ODo6SW50ZWdlcjo6TmV3KGluZGV4KyspLCB0b1Y4KFdURjo6Z2V0UHRyKCppdGVyKSkpOworICAg
ICAgICByZXR1cm4gcmVzdWx0OworICAgIH0KKwogICAgIC8vIEVuYWJsZXMgY2FjaGluZyB2OCB3
cmFwcGVycyBjcmVhdGVkIGZvciBXVEY6OlN0cmluZ0ltcGwuICBDdXJyZW50bHkgdGhpcyBjYWNo
ZSByZXF1aXJlcwogICAgIC8vIGFsbCB0aGUgY2FsbHMgKGJvdGggdG8gY29udmVydCBXVEY6OlN0
cmluZyB0byB2ODo6U3RyaW5nIGFuZCB0byBHQyB0aGUgaGFuZGxlKQogICAgIC8vIHRvIGJlIHBl
cmZvcm1lZCBvbiB0aGUgbWFpbiB0aHJlYWQuCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy92OC9jdXN0b20vVjhDb25zb2xlQ3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhDb25zb2xlQ3VzdG9tLmNwcAkocmV2aXNpb24gMTEx
MTUzKQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4Q29uc29sZUN1c3Rv
bS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM2LDMyICszNiwxMyBAQAogI2luY2x1ZGUgIlNjcmlw
dEFyZ3VtZW50cy5oIgogI2luY2x1ZGUgIlNjcmlwdENhbGxTdGFjay5oIgogI2luY2x1ZGUgIlNj
cmlwdENhbGxTdGFja0ZhY3RvcnkuaCIKLSNpbmNsdWRlICJTY3JpcHRQcm9maWxlLmgiCiAjaW5j
bHVkZSAiVjhCaW5kaW5nLmgiCiAjaW5jbHVkZSAiVjhCaW5kaW5nTWFjcm9zLmgiCiAjaW5jbHVk
ZSAiVjhNZW1vcnlJbmZvLmgiCiAjaW5jbHVkZSAiVjhQcm94eS5oIgotI2luY2x1ZGUgIlY4U2Ny
aXB0UHJvZmlsZS5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLXR5cGVkZWYgVmVjdG9yPFJl
ZlB0cjxTY3JpcHRQcm9maWxlPiA+IFByb2ZpbGVzQXJyYXk7Ci0KLSNpZiBFTkFCTEUoSkFWQVND
UklQVF9ERUJVR0dFUikKLXY4OjpIYW5kbGU8djg6OlZhbHVlPiBWOENvbnNvbGU6OnByb2ZpbGVz
QWNjZXNzb3JHZXR0ZXIodjg6OkxvY2FsPHY4OjpTdHJpbmc+IG5hbWUsIGNvbnN0IHY4OjpBY2Nl
c3NvckluZm8mIGluZm8pCi17Ci0gICAgSU5DX1NUQVRTKCJET00uQ29uc29sZS5wcm9maWxlc0Fj
Y2Vzc29yR2V0dGVyIik7Ci0gICAgQ29uc29sZSogaW1wID0gVjhDb25zb2xlOjp0b05hdGl2ZShp
bmZvLkhvbGRlcigpKTsKLSAgICBjb25zdCBQcm9maWxlc0FycmF5JiBwcm9maWxlcyA9IGltcC0+
cHJvZmlsZXMoKTsKLSAgICB2ODo6SGFuZGxlPHY4OjpBcnJheT4gcmVzdWx0ID0gdjg6OkFycmF5
OjpOZXcocHJvZmlsZXMuc2l6ZSgpKTsKLSAgICBpbnQgaW5kZXggPSAwOwotICAgIFByb2ZpbGVz
QXJyYXk6OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IHByb2ZpbGVzLmVuZCgpOwotICAgIGZvciAoUHJv
ZmlsZXNBcnJheTo6Y29uc3RfaXRlcmF0b3IgaXRlciA9IHByb2ZpbGVzLmJlZ2luKCk7IGl0ZXIg
IT0gZW5kOyArK2l0ZXIpCi0gICAgICAgIHJlc3VsdC0+U2V0KHY4OjpJbnRlZ2VyOjpOZXcoaW5k
ZXgrKyksIHRvVjgoaXRlci0+Z2V0KCkpKTsKLSAgICByZXR1cm4gcmVzdWx0OwotfQotI2VuZGlm
Ci0KIHY4OjpIYW5kbGU8djg6OlZhbHVlPiBWOENvbnNvbGU6OnRyYWNlQ2FsbGJhY2soY29uc3Qg
djg6OkFyZ3VtZW50cyYgYXJncykKIHsKICAgICBJTkNfU1RBVFMoIkRPTS5Db25zb2xlLnRyYWNl
Q2FsbGJhY2siKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BhZ2UvQ29uc29sZS5pZGwKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGFnZS9Db25zb2xlLmlkbAkocmV2aXNpb24gMTExMTUz
KQorKysgU291cmNlL1dlYkNvcmUvcGFnZS9Db25zb2xlLmlkbAkod29ya2luZyBjb3B5KQpAQCAt
NDYsNyArNDYsNyBAQCBtb2R1bGUgd2luZG93IHsKICAgICAgICAgW0NhbGxXaXRoPVNjcmlwdEFy
Z3VtZW50c3xDYWxsU3RhY2tdIHZvaWQgbWFya1RpbWVsaW5lKCk7CiAKICNpZiBkZWZpbmVkKEVO
QUJMRV9KQVZBU0NSSVBUX0RFQlVHR0VSKSAmJiBFTkFCTEVfSkFWQVNDUklQVF9ERUJVR0dFUgot
ICAgICAgICByZWFkb25seSBhdHRyaWJ1dGUgW0N1c3RvbUdldHRlcl0gQXJyYXkgcHJvZmlsZXM7
CisgICAgICAgIHJlYWRvbmx5IGF0dHJpYnV0ZSBzZXF1ZW5jZTxTY3JpcHRQcm9maWxlPiBwcm9m
aWxlczsKICAgICAgICAgW0N1c3RvbV0gdm9pZCBwcm9maWxlKGluIERPTVN0cmluZyB0aXRsZSk7
CiAgICAgICAgIFtDdXN0b21dIHZvaWQgcHJvZmlsZUVuZChpbiBET01TdHJpbmcgdGl0bGUpOwog
I2VuZGlmCg==
</data>
<flag name="review"
          id="136255"
          type_id="1"
          status="-"
          setter="haraken"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>132615</attachid>
            <date>2012-03-19 11:29:29 -0700</date>
            <delta_ts>2012-03-20 00:09:09 -0700</delta_ts>
            <desc>updated_patch</desc>
            <filename>wip_003.diff</filename>
            <type>text/plain</type>
            <size>21606</size>
            <attacher name="Vineet Chaudhary (vineetc)">code.vineet</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDExMTIwNikKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDQ5IEBACisyMDEyLTAzLTE5ICBWaW5lZXQg
Q2hhdWRoYXJ5ICA8dmluZWV0LmNoYXVkaGFyeUBtb3Rvcm9sYS5jb20+CisKKyAgICAgICAgaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTgwNjk2IAorICAgICAgICBSZW1v
dmUgY3VzdG9tIGJpbmRpbmdzIGZvciBhdHRyaWJ1dGUgdHlwZSBBcnJheS4KKworICAgICAgICBS
ZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBObyBuZXcgdGVzdHMuCisKKyAg
ICAgICAgKiBiaW5kaW5ncy9qcy9KU0NvbnNvbGVDdXN0b20uY3BwOiBSZW1vdmVkIGN1c3RvbSBm
dW5jdGlvbi4KKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAqIGJpbmRpbmdzL2pzL0pTRE9N
QmluZGluZy5oOiBBZGRlZCB0ZW1wbGF0ZSBqc0FycmF5LgorICAgICAgICAoV2ViQ29yZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpqc0FycmF5KToKKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL0Nv
ZGVHZW5lcmF0b3IucG06IE1vZGlmaWVkIGNvZGVnZW5lcmF0b3JzIHRvIGdlbmVyYXRlIGFwcHJv
cHJpYXRlIGNvZGUuCisgICAgICAgIChHZXRBcnJheVR5cGUpOiBBZGRlZCBHZXRBcnJheVR5cGUg
dG8gZ2V0IHJldHVybiB0eXBlIG9mIGF0dHJpYnV0ZSBpbnRlcmZhY2UuCisgICAgICAgICogYmlu
ZGluZ3Mvc2NyaXB0cy9Db2RlR2VuZXJhdG9yR09iamVjdC5wbTogRGl0dG8uCisgICAgICAgIChT
a2lwQXR0cmlidXRlKToKKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0b3JK
Uy5wbTogRGl0dG8uCisgICAgICAgIChBZGRJbmNsdWRlc0ZvclR5cGUpOgorICAgICAgICAoSlNW
YWx1ZVRvTmF0aXZlKToKKyAgICAgICAgKE5hdGl2ZVRvSlNWYWx1ZSk6CisgICAgICAgICogYmlu
ZGluZ3Mvc2NyaXB0cy9Db2RlR2VuZXJhdG9yVjgucG06IERpdHRvLgorICAgICAgICAoR2VuZXJh
dGVOb3JtYWxBdHRyR2V0dGVyKToKKyAgICAgICAgKEpTVmFsdWVUb05hdGl2ZSk6CisgICAgICAg
IChOYXRpdmVUb0pTVmFsdWUpOgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9HT2Jq
ZWN0L1dlYktpdERPTVRlc3RPYmouY3BwOiBVcGRhdGVkIHJlc3VsdHMgZnJvbSBydW5uaW5nIGJp
bmRpbmcgdGVzdHMuCisgICAgICAgICh3ZWJraXRfZG9tX3Rlc3Rfb2JqX2dldF9wcm9wZXJ0eSk6
CisgICAgICAgICh3ZWJraXRfZG9tX3Rlc3Rfb2JqX2NsYXNzX2luaXQpOgorICAgICAgICAqIGJp
bmRpbmdzL3NjcmlwdHMvdGVzdC9HT2JqZWN0L1dlYktpdERPTVRlc3RPYmouaDogVXBkYXRlZCBy
ZXN1bHRzIGZyb20gcnVubmluZyBiaW5kaW5nIHRlc3RzLgorICAgICAgICAqIGJpbmRpbmdzL3Nj
cmlwdHMvdGVzdC9KUy9KU1Rlc3RPYmouY3BwOiBVcGRhdGVkIHJlc3VsdHMgZnJvbSBydW5uaW5n
IGJpbmRpbmcgdGVzdHMuCisgICAgICAgIChXZWJDb3JlOjpqc1Rlc3RPYmpTZXF1ZW5jZUF0dHIp
OgorICAgICAgICAoV2ViQ29yZTo6c2V0SlNUZXN0T2JqU2VxdWVuY2VBdHRyKToKKyAgICAgICAg
KFdlYkNvcmU6OmpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uTWV0aG9kUmV0dXJuaW5nU2VxdWVu
Y2UpOgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9WOC9WOFRlc3RPYmouY3BwOiBV
cGRhdGVkIHJlc3VsdHMgZnJvbSBydW5uaW5nIGJpbmRpbmcgdGVzdHMuCisgICAgICAgIChXZWJD
b3JlOjpUZXN0T2JqSW50ZXJuYWw6OnNlcXVlbmNlQXR0ckF0dHJHZXR0ZXIpOgorICAgICAgICAo
V2ViQ29yZTo6VGVzdE9iakludGVybmFsOjpzZXF1ZW5jZUF0dHJBdHRyU2V0dGVyKToKKyAgICAg
ICAgKFdlYkNvcmU6OlRlc3RPYmpJbnRlcm5hbDo6bWV0aG9kUmV0dXJuaW5nU2VxdWVuY2VDYWxs
YmFjayk6CisgICAgICAgICogYmluZGluZ3MvdjgvVjhCaW5kaW5nLmg6IEFkZGVkIHRlbXBsYXRl
IHY4QXJyYXkuCisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKFdlYkNvcmU6OnY4QXJyYXkp
OgorICAgICAgICAqIGJpbmRpbmdzL3Y4L2N1c3RvbS9WOENvbnNvbGVDdXN0b20uY3BwOiBSZW1v
dmVkIGN1c3RvbSBmdW5jdGlvbi4KKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAqIHBhZ2Uv
Q29uc29sZS5pZGw6IFJlcGxhY2VkIGF0dHJpYnV0ZSB0eXBlIEFycmF5IHRvIHNlcXVlbmNlPFNy
aXB0UHJvZmlsZT4gdG8gcmVtb3ZlCisgICAgICAgICAgY3VzdG9tIGJpbmRpbmdzLgorCiAyMDEy
LTAzLTE5ICBNaWtlIExhd3RoZXIgIDxtaWtlbGF3dGhlckBjaHJvbWl1bS5vcmc+CiAKICAgICAg
ICAgQ1NTMyBjYWxjOiBtYWtlIG1hc2sgaW1hZ2VzIHdvcmsgd2l0aCBtaXhlZCBwZXJjZW50L2Fi
c29sdXRlCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0NvbnNvbGVDdXN0b20u
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTQ29uc29sZUN1
c3RvbS5jcHAJKHJldmlzaW9uIDExMTE1MykKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pz
L0pTQ29uc29sZUN1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMwLDMxICszMCwxNCBAQAog
I2luY2x1ZGUgIkpTQ29uc29sZS5oIgogCiAjaW5jbHVkZSAiQ29uc29sZS5oIgotI2luY2x1ZGUg
IkpTU2NyaXB0UHJvZmlsZS5oIgogI2luY2x1ZGUgIlNjcmlwdENhbGxTdGFjay5oIgogI2luY2x1
ZGUgIlNjcmlwdENhbGxTdGFja0ZhY3RvcnkuaCIKLSNpbmNsdWRlICJTY3JpcHRQcm9maWxlLmgi
Ci0jaW5jbHVkZSA8cnVudGltZS9KU0FycmF5Lmg+CiAjaW5jbHVkZSA8d3RmL093blB0ci5oPgog
CiB1c2luZyBuYW1lc3BhY2UgSlNDOwogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLXR5cGVkZWYg
VmVjdG9yPFJlZlB0cjxTY3JpcHRQcm9maWxlPiA+IFByb2ZpbGVzQXJyYXk7Ci0KLUpTVmFsdWUg
SlNDb25zb2xlOjpwcm9maWxlcyhFeGVjU3RhdGUqIGV4ZWMpIGNvbnN0Ci17Ci0gICAgY29uc3Qg
UHJvZmlsZXNBcnJheSYgcHJvZmlsZXMgPSBpbXBsKCktPnByb2ZpbGVzKCk7Ci0gICAgTWFya2Vk
QXJndW1lbnRCdWZmZXIgbGlzdDsKLQotICAgIFByb2ZpbGVzQXJyYXk6OmNvbnN0X2l0ZXJhdG9y
IGVuZCA9IHByb2ZpbGVzLmVuZCgpOwotICAgIGZvciAoUHJvZmlsZXNBcnJheTo6Y29uc3RfaXRl
cmF0b3IgaXRlciA9IHByb2ZpbGVzLmJlZ2luKCk7IGl0ZXIgIT0gZW5kOyArK2l0ZXIpCi0gICAg
ICAgIGxpc3QuYXBwZW5kKHRvSlMoZXhlYywgZ2xvYmFsT2JqZWN0KCksIGl0ZXItPmdldCgpKSk7
Ci0KLSAgICByZXR1cm4gY29uc3RydWN0QXJyYXkoZXhlYywgZ2xvYmFsT2JqZWN0KCksIGxpc3Qp
OwotfQotCiBKU1ZhbHVlIEpTQ29uc29sZTo6cHJvZmlsZShFeGVjU3RhdGUqIGV4ZWMpCiB7CiAg
ICAgUmVmUHRyPFNjcmlwdENhbGxTdGFjaz4gY2FsbFN0YWNrKGNyZWF0ZVNjcmlwdENhbGxTdGFj
ayhleGVjLCAxKSk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTUJpbmRp
bmcuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTUJpbmRp
bmcuaAkocmV2aXNpb24gMTExMTUzKQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNE
T01CaW5kaW5nLmgJKHdvcmtpbmcgY29weSkKQEAgLTM1LDYgKzM1LDcgQEAKICNpbmNsdWRlICJT
dHlsZWRFbGVtZW50LmgiCiAjaW5jbHVkZSA8aGVhcC9XZWFrLmg+CiAjaW5jbHVkZSA8cnVudGlt
ZS9GdW5jdGlvblByb3RvdHlwZS5oPgorI2luY2x1ZGUgPHJ1bnRpbWUvSlNBcnJheS5oPgogI2lu
Y2x1ZGUgPHJ1bnRpbWUvTG9va3VwLmg+CiAjaW5jbHVkZSA8cnVudGltZS9PYmplY3RQcm90b3R5
cGUuaD4KICNpbmNsdWRlIDx3dGYvRm9yd2FyZC5oPgpAQCAtMjc4LDYgKzI3OSwxOCBAQCBlbnVt
IFBhcmFtZXRlckRlZmF1bHRQb2xpY3kgewogICAgICAgICByZXR1cm4gdG9KUyhleGVjLCBnbG9i
YWxPYmplY3QsIHB0ci5nZXQoKSk7CiAgICAgfQogCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgSXRl
cmFibGU+CisgICAgSlNDOjpKU1ZhbHVlIGpzQXJyYXkoSlNDOjpFeGVjU3RhdGUqIGV4ZWMsIEpT
RE9NR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIGNvbnN0IEl0ZXJhYmxlJiB2ZWN0b3IpCisg
ICAgeworICAgICAgICBKU0M6Ok1hcmtlZEFyZ3VtZW50QnVmZmVyIGxpc3Q7CisgICAgICAgIHR5
cGVuYW1lIEl0ZXJhYmxlOjpjb25zdF9pdGVyYXRvciBlbmQgPSB2ZWN0b3IuZW5kKCk7CisKKyAg
ICAgICAgZm9yICh0eXBlbmFtZSBJdGVyYWJsZTo6Y29uc3RfaXRlcmF0b3IgaXRlciA9IHZlY3Rv
ci5iZWdpbigpOyBpdGVyICE9IGVuZDsgKytpdGVyKQorICAgICAgICAgICAgbGlzdC5hcHBlbmQo
dG9KUyhleGVjLCBnbG9iYWxPYmplY3QsIFdURjo6Z2V0UHRyKCppdGVyKSkpOworCisgICAgICAg
IHJldHVybiBKU0M6OmNvbnN0cnVjdEFycmF5KGV4ZWMsIGxpc3QpOworICAgIH0KKwogICAgIC8v
IFZhbGlkYXRlcyB0aGF0IHRoZSBwYXNzZWQgb2JqZWN0IGlzIGEgc2VxdWVuY2UgdHlwZSBwZXIg
c2VjdGlvbiA0LjEuMTMgb2YgdGhlIFdlYklETCBzcGVjLgogICAgIEpTQzo6SlNPYmplY3QqIHRv
SlNTZXF1ZW5jZShKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6SlNWYWx1ZSwgdW5zaWduZWQmKTsKIApJ
bmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy9Db2RlR2VuZXJhdG9yLnBtCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvQ29kZUdlbmVyYXRv
ci5wbQkocmV2aXNpb24gMTExMTUzKQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0
cy9Db2RlR2VuZXJhdG9yLnBtCSh3b3JraW5nIGNvcHkpCkBAIC00NDUsNiArNDQ1LDE1IEBAIHN1
YiBJc1NWR0FuaW1hdGVkVHlwZQogICAgIHJldHVybiAwOwogfQogCitzdWIgR2V0QXJyYXlUeXBl
Cit7CisgICAgbXkgJG9iamVjdCA9IHNoaWZ0OworICAgIG15ICR0eXBlID0gc2hpZnQ7CisKKyAg
ICByZXR1cm4gJDEgaWYgJHR5cGUgPX4gL15zZXF1ZW5jZTwoW1x3XGRfXSspPiQvOworICAgIHJl
dHVybiAiIjsKK30KKwogIyBVcHBlcmNhc2UgdGhlIGZpcnN0IGxldHRlciB3aGlsZSByZXNwZWN0
aW5nIFdlYktpdCBzdHlsZSBndWlkZWxpbmVzLgogIyBFLmcuLCB4bWxFbmNvZGluZyBiZWNvbWVz
IFhNTEVuY29kaW5nLCBidXQgeG1sbGxhbmcgYmVjb21lcyBYbWxsYW5nLgogc3ViIFdLX3VjZmly
c3QKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvQ29kZUdlbmVyYXRvckdP
YmplY3QucG0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy9D
b2RlR2VuZXJhdG9yR09iamVjdC5wbQkocmV2aXNpb24gMTExMTUzKQorKysgU291cmNlL1dlYkNv
cmUvYmluZGluZ3Mvc2NyaXB0cy9Db2RlR2VuZXJhdG9yR09iamVjdC5wbQkod29ya2luZyBjb3B5
KQpAQCAtMTY0LDYgKzE2NCwxMCBAQCBzdWIgU2tpcEF0dHJpYnV0ZSB7CiAgICAgICAgIHJldHVy
biAxOwogICAgIH0KIAorICAgIGlmICgkY29kZUdlbmVyYXRvci0+R2V0QXJyYXlUeXBlKCRwcm9w
VHlwZSkpIHsKKyAgICAgICAgcmV0dXJuIDE7CisgICAgfQorCiAgICAgIyBUaGlzIGlzIGZvciBE
T01XaW5kb3cuaWRsIGxvY2F0aW9uIGF0dHJpYnV0ZQogICAgIGlmICgkYXR0cmlidXRlLT5zaWdu
YXR1cmUtPm5hbWUgZXEgImxvY2F0aW9uIikgewogICAgICAgICByZXR1cm4gMTsKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvQ29kZUdlbmVyYXRvckpTLnBtCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvQ29kZUdlbmVyYXRvckpTLnBt
CShyZXZpc2lvbiAxMTExNTMpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL0Nv
ZGVHZW5lcmF0b3JKUy5wbQkod29ya2luZyBjb3B5KQpAQCAtMjY2LDYgKzI2Niw3IEBAIHN1YiBB
ZGRJbmNsdWRlc0ZvclR5cGUKICAgICAgICAgJGluY2x1ZGVzUmVmLT57IkpTJHt0eXBlfS5oIn0g
PSAxOwogICAgIH0gZWxzaWYgKElzVHlwZWRBcnJheVR5cGUoJHR5cGUpKSB7CiAgICAgICAgICRp
bmNsdWRlc1JlZi0+eyI8d3RmLyR7dHlwZX0uaD4ifSA9IDE7CisgICAgfSBlbHNpZiAoJGNvZGVH
ZW5lcmF0b3ItPkdldEFycmF5VHlwZSgkdHlwZSkpIHsKICAgICB9IGVsc2UgewogICAgICAgICAj
IGRlZmF1bHQsIGluY2x1ZGUgdGhlIHNhbWUgbmFtZWQgZmlsZQogICAgICAgICAkaW5jbHVkZXNS
ZWYtPnsiJHt0eXBlfS5oIn0gPSAxOwpAQCAtMjk0NSw2ICsyOTQ2LDEwIEBAIHN1YiBKU1ZhbHVl
VG9OYXRpdmUKICAgICBBZGRUb0ltcGxJbmNsdWRlcygiSlNDdXN0b21Wb2lkQ2FsbGJhY2suaCIs
ICRjb25kaXRpb25hbCkgaWYgJHR5cGUgZXEgIlZvaWRDYWxsYmFjayI7CiAgICAgQWRkVG9JbXBs
SW5jbHVkZXMoIkV2ZW50LmgiLCAkY29uZGl0aW9uYWwpIGlmICR0eXBlIGVxICJFdmVudCI7CiAK
KyAgICBpZiAoJGNvZGVHZW5lcmF0b3ItPkdldEFycmF5VHlwZSgkdHlwZSkpIHsKKyAgICAgICAg
cmV0dXJuICIiOworICAgIH0KKwogICAgICMgRGVmYXVsdCwgYXNzdW1lIGF1dG9nZW5lcmF0ZWQg
dHlwZSBjb252ZXJzaW9uIHJvdXRpbmVzCiAgICAgQWRkVG9JbXBsSW5jbHVkZXMoIkpTJHR5cGUu
aCIsICRjb25kaXRpb25hbCk7CiAgICAgcmV0dXJuICJ0byR0eXBlKCR2YWx1ZSkiOwpAQCAtMzAw
NCw2ICszMDA5LDE0IEBAIHN1YiBOYXRpdmVUb0pTVmFsdWUKICAgICAgICAgQWRkVG9JbXBsSW5j
bHVkZXMoIk5hbWVOb2RlTGlzdC5oIiwgJGNvbmRpdGlvbmFsKTsKICAgICB9CiAKKyAgICBteSAk
YXR0cmlidXRlVHlwZSA9ICRjb2RlR2VuZXJhdG9yLT5HZXRBcnJheVR5cGUoJHR5cGUpOworICAg
IGlmICgkYXR0cmlidXRlVHlwZSkgeworICAgICAgICBBZGRUb0ltcGxJbmNsdWRlcygiPHJ1bnRp
bWUvSlNBcnJheS5oPiIsICRjb25kaXRpb25hbCk7CisgICAgICAgIEFkZFRvSW1wbEluY2x1ZGVz
KCJKUyIgLiAkYXR0cmlidXRlVHlwZSAuICIuaCIsICRjb25kaXRpb25hbCk7CisgICAgICAgIEFk
ZFRvSW1wbEluY2x1ZGVzKCRhdHRyaWJ1dGVUeXBlIC4gIi5oIiwgJGNvbmRpdGlvbmFsKTsKKyAg
ICAgICAgcmV0dXJuICJqc0FycmF5KGV4ZWMsICR0aGlzVmFsdWUtPmdsb2JhbE9iamVjdCgpLCAk
dmFsdWUpIjsKKyAgICB9CisKICAgICBpZiAoJHR5cGUgZXEgIkRPTU9iamVjdCIpIHsKICAgICAg
ICAgaWYgKCRpbXBsQ2xhc3NOYW1lIGVxICJEb2N1bWVudCIpIHsKICAgICAgICAgICAgIEFkZFRv
SW1wbEluY2x1ZGVzKCJKU0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRC5oIiwgJGNvbmRpdGlvbmFs
KTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvQ29kZUdlbmVyYXRvclY4
LnBtCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvQ29kZUdl
bmVyYXRvclY4LnBtCShyZXZpc2lvbiAxMTExNTMpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy9zY3JpcHRzL0NvZGVHZW5lcmF0b3JWOC5wbQkod29ya2luZyBjb3B5KQpAQCAtOTIzLDYgKzky
MywxOCBAQCBFTkQKICAgICBpZiAoIUlzTm9kZVN1YlR5cGUoJGRhdGFOb2RlKSAmJiAkYXR0ck5h
bWUgbmUgInNlbGYiICYmIChJc1dyYXBwZXJUeXBlKCRyZXR1cm5UeXBlKSAmJiAoJGF0dHJpYnV0
ZS0+dHlwZSA9fiAvXnJlYWRvbmx5LyB8fCAkYXR0cmlidXRlLT5zaWduYXR1cmUtPmV4dGVuZGVk
QXR0cmlidXRlcy0+eyJSZXBsYWNlYWJsZSJ9KQogICAgICAgICAmJiAkcmV0dXJuVHlwZSBuZSAi
RXZlbnRUYXJnZXQiICYmICRyZXR1cm5UeXBlIG5lICJTZXJpYWxpemVkU2NyaXB0VmFsdWUiICYm
ICRyZXR1cm5UeXBlIG5lICJET01XaW5kb3ciIAogICAgICAgICAmJiAkcmV0dXJuVHlwZSAhfiAv
U1ZHLyAmJiAkcmV0dXJuVHlwZSAhfiAvSFRNTC8gJiYgIUlzRE9NTm9kZVR5cGUoJHJldHVyblR5
cGUpKSkgeworCisgICAgICAgIG15ICRhdHRyaWJ1dGVUeXBlID0gJGNvZGVHZW5lcmF0b3ItPkdl
dEFycmF5VHlwZSgkcmV0dXJuVHlwZSk7CisKKyAgICAgICAgaWYgKCRhdHRyaWJ1dGVUeXBlKSB7
CisgICAgICAgICAgICBBZGRUb0ltcGxJbmNsdWRlcygiVjgiIC4gJGF0dHJpYnV0ZVR5cGUgLiAi
LmgiKTsKKyAgICAgICAgICAgIEFkZFRvSW1wbEluY2x1ZGVzKCRhdHRyaWJ1dGVUeXBlIC4gIi5o
Iik7CisgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudERlY2xzLCAiICAgIGNvbnN0IFZlY3Rv
cjxSZWZQdHI8JGF0dHJpYnV0ZVR5cGU+ID4gdmVjdG9yID0gJHtnZXR0ZXJTdHJpbmd9O1xuIik7
CisgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudERlY2xzLCAiICAgIHJldHVybiB2OEFycmF5
KHZlY3Rvcik7XG4iKTsKKyAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50RGVjbHMsICJ9XG5c
biIpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisKICAgICAgICAgQWRkSW5jbHVk
ZXNGb3JUeXBlKCRyZXR1cm5UeXBlKTsKICAgICAgICAgIyBDaGVjayBmb3IgYSB3cmFwcGVyIGlu
IHRoZSB3cmFwcGVyIGNhY2hlLiBJZiB0aGVyZSBpcyBvbmUsIHdlIGtub3cgdGhhdCBhIGhpZGRl
biByZWZlcmVuY2UgaGFzIGFscmVhZHkKICAgICAgICAgIyBiZWVuIGNyZWF0ZWQuIElmIHdlIGRv
bid0IGZpbmQgYSB3cmFwcGVyLCB3ZSBjcmVhdGUgYm90aCBhIHdyYXBwZXIgYW5kIGEgaGlkZGVu
IHJlZmVyZW5jZS4KQEAgLTM1NTQsNiArMzU2NiwxMCBAQCBzdWIgSlNWYWx1ZVRvTmF0aXZlCiAg
ICAgICAgIHJldHVybiAiVjhET01XcmFwcGVyOjpnZXRYUGF0aE5TUmVzb2x2ZXIoJHZhbHVlKSI7
CiAgICAgfQogCisgICAgaWYgKCRjb2RlR2VuZXJhdG9yLT5HZXRBcnJheVR5cGUoJHR5cGUpKSB7
CisgICAgICAgIHJldHVybiAiIjsKKyAgICB9CisKICAgICBBZGRJbmNsdWRlc0ZvclR5cGUoJHR5
cGUpOwogCiAgICAgaWYgKElzRE9NTm9kZVR5cGUoJHR5cGUpKSB7CkBAIC0zNzY3LDYgKzM3ODMs
MTMgQEAgc3ViIE5hdGl2ZVRvSlNWYWx1ZQogICAgICAgICByZXR1cm4gInY4U3RyaW5nKCR2YWx1
ZSkiOwogICAgIH0KIAorICAgIG15ICRhdHRyaWJ1dGVUeXBlID0gJGNvZGVHZW5lcmF0b3ItPkdl
dEFycmF5VHlwZSgkdHlwZSk7CisgICAgaWYgKCRhdHRyaWJ1dGVUeXBlKSB7CisgICAgICAgIEFk
ZFRvSW1wbEluY2x1ZGVzKCJWOCIgLiAkYXR0cmlidXRlVHlwZSAuICIuaCIpOworICAgICAgICBB
ZGRUb0ltcGxJbmNsdWRlcygkYXR0cmlidXRlVHlwZSAuICIuaCIpOworICAgICAgICByZXR1cm4g
InY4QXJyYXkoJHZhbHVlKSI7CisgICAgfQorCiAgICAgQWRkSW5jbHVkZXNGb3JUeXBlKCR0eXBl
KTsKIAogICAgICMgc3BlY2lhbCBjYXNlIGZvciBub24tRE9NIG5vZGUgaW50ZXJmYWNlcwpJbmRl
eDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0dPYmplY3QvV2ViS2l0RE9N
VGVzdE9iai5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0
cy90ZXN0L0dPYmplY3QvV2ViS2l0RE9NVGVzdE9iai5jcHAJKHJldmlzaW9uIDExMTE1MykKKysr
IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9HT2JqZWN0L1dlYktpdERPTVRl
c3RPYmouY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04MTAsMzIgKzgxMCw2IEBAIHdlYmtpdF9kb21f
dGVzdF9vYmpfc2V0X3Rlc3Rfb2JqX2F0dHIoV2UKICAgICBpdGVtLT5zZXRUZXN0T2JqQXR0cihj
b252ZXJ0ZWRfdmFsdWUpOwogfQogCi1XZWJLaXRET01zZXF1ZW5jZTxTY3JpcHRQcm9maWxlPioK
LXdlYmtpdF9kb21fdGVzdF9vYmpfZ2V0X3NlcXVlbmNlX2F0dHIoV2ViS2l0RE9NVGVzdE9iaiog
c2VsZikKLXsKLSAgICBnX3JldHVybl92YWxfaWZfZmFpbChzZWxmLCAwKTsKLSAgICBXZWJDb3Jl
OjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7Ci0gICAgV2ViQ29yZTo6VGVzdE9iaiAqIGl0
ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7Ci0gICAgUGFzc1JlZlB0cjxXZWJDb3JlOjpzZXF1ZW5j
ZTxTY3JpcHRQcm9maWxlPj4gZ19yZXMgPSBXVEY6OmdldFB0cihpdGVtLT5zZXF1ZW5jZUF0dHIo
KSk7Ci0gICAgV2ViS2l0RE9Nc2VxdWVuY2U8U2NyaXB0UHJvZmlsZT4qIHJlcyA9IFdlYktpdDo6
a2l0KGdfcmVzLmdldCgpKTsKLSAgICByZXR1cm4gcmVzOwotfQotCi12b2lkCi13ZWJraXRfZG9t
X3Rlc3Rfb2JqX3NldF9zZXF1ZW5jZV9hdHRyKFdlYktpdERPTVRlc3RPYmoqIHNlbGYsIFdlYktp
dERPTXNlcXVlbmNlPFNjcmlwdFByb2ZpbGU+KiB2YWx1ZSkKLXsKLSAgICBnX3JldHVybl9pZl9m
YWlsKHNlbGYpOwotICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKLSAg
ICBXZWJDb3JlOjpUZXN0T2JqICogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKLSAgICBnX3Jl
dHVybl9pZl9mYWlsKHZhbHVlKTsKLSAgICBXZWJDb3JlOjpzZXF1ZW5jZTxTY3JpcHRQcm9maWxl
PiAqIGNvbnZlcnRlZF92YWx1ZSA9IE5VTEw7Ci0gICAgaWYgKHZhbHVlICE9IE5VTEwpIHsKLSAg
ICAgICAgY29udmVydGVkX3ZhbHVlID0gV2ViS2l0Ojpjb3JlKHZhbHVlKTsKLSAgICAgICAgZ19y
ZXR1cm5faWZfZmFpbChjb252ZXJ0ZWRfdmFsdWUpOwotICAgIH0KLSAgICBpdGVtLT5zZXRTZXF1
ZW5jZUF0dHIoY29udmVydGVkX3ZhbHVlKTsKLX0KLQogV2ViS2l0RE9NVGVzdE9iaioKIHdlYmtp
dF9kb21fdGVzdF9vYmpfZ2V0X3htbF9vYmpfYXR0cihXZWJLaXRET01UZXN0T2JqKiBzZWxmKQog
ewpAQCAtMTU5NSw3ICsxNTY5LDYgQEAgZW51bSB7CiAgICAgUFJPUF9VTlNJR05FRF9MT05HX0xP
TkdfQVRUUiwKICAgICBQUk9QX1NUUklOR19BVFRSLAogICAgIFBST1BfVEVTVF9PQkpfQVRUUiwK
LSAgICBQUk9QX1NFUVVFTkNFX0FUVFIsCiAgICAgUFJPUF9YTUxfT0JKX0FUVFIsCiAgICAgUFJP
UF9DUkVBVEUsCiAgICAgUFJPUF9SRUZMRUNURURfU1RSSU5HX0FUVFIsCkBAIC0xODU1LDEyICsx
ODI4LDYgQEAgc3RhdGljIHZvaWQgd2Via2l0X2RvbV90ZXN0X29ial9nZXRfcHJvcAogICAgICAg
ICBnX3ZhbHVlX3NldF9vYmplY3QodmFsdWUsIFdlYktpdDo6a2l0KHB0ci5nZXQoKSkpOwogICAg
ICAgICBicmVhazsKICAgICB9Ci0gICAgY2FzZSBQUk9QX1NFUVVFTkNFX0FUVFI6Ci0gICAgewot
ICAgICAgICBSZWZQdHI8V2ViQ29yZTo6c2VxdWVuY2U8U2NyaXB0UHJvZmlsZT4+IHB0ciA9IGNv
cmVTZWxmLT5zZXF1ZW5jZUF0dHIoKTsKLSAgICAgICAgZ192YWx1ZV9zZXRfb2JqZWN0KHZhbHVl
LCBXZWJLaXQ6OmtpdChwdHIuZ2V0KCkpKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgfQogICAgIGNh
c2UgUFJPUF9YTUxfT0JKX0FUVFI6CiAgICAgewogICAgICAgICBSZWZQdHI8V2ViQ29yZTo6VGVz
dE9iaj4gcHRyID0gY29yZVNlbGYtPnhtbE9iakF0dHIoKTsKQEAgLTIxNTMsMTMgKzIxMjAsNiBA
QCBHX01BWFVJTlQ2NCwgLyogbWluICovCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdFQktJVF9UWVBFX0RPTV9URVNUX09CSiwgLyog
Z29iamVjdCB0eXBlICovCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIFdFQktJVF9QQVJBTV9SRUFEV1JJVEUpKTsKICAgICBnX29iamVj
dF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5KGdvYmplY3RDbGFzcywKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIFBST1BfU0VRVUVOQ0VfQVRUUiwKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGdfcGFyYW1fc3BlY19vYmplY3QoInNlcXVlbmNlLWF0dHIiLCAv
KiBuYW1lICovCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICJ0ZXN0X29ial9zZXF1ZW5jZS1hdHRyIiwgLyogc2hvcnQgZGVzY3JpcHRp
b24gKi8KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgInJlYWQtd3JpdGUgIFdlYktpdERPTXNlcXVlbmNlPFNjcmlwdFByb2ZpbGU+KiBU
ZXN0T2JqLnNlcXVlbmNlLWF0dHIiLCAvKiBsb25nZXIgLSBjb3VsZCBkbyB3aXRoIHNvbWUgZXh0
cmEgZG9jIHN0dWZmIGhlcmUgKi8KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgV0VCS0lUX1RZUEVfRE9NX1NFUVVFTkNFPFNDUklQVF9Q
Uk9GSUxFPiwgLyogZ29iamVjdCB0eXBlICovCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdFQktJVF9QQVJBTV9SRUFEV1JJVEUpKTsK
LSAgICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5KGdvYmplY3RDbGFzcywKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBST1BfWE1MX09CSl9BVFRSLAogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ19wYXJhbV9zcGVjX29iamVjdCgieG1sLW9i
ai1hdHRyIiwgLyogbmFtZSAqLwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAidGVzdF9vYmpfeG1sLW9iai1hdHRyIiwgLyogc2hvcnQg
ZGVzY3JpcHRpb24gKi8KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVz
dC9HT2JqZWN0L1dlYktpdERPTVRlc3RPYmouaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvR09iamVjdC9XZWJLaXRET01UZXN0T2JqLmgJKHJldmlz
aW9uIDExMTE1MykKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9HT2Jq
ZWN0L1dlYktpdERPTVRlc3RPYmouaAkod29ya2luZyBjb3B5KQpAQCAtNjk3LDI3ICs2OTcsNiBA
QCBXRUJLSVRfQVBJIHZvaWQKIHdlYmtpdF9kb21fdGVzdF9vYmpfc2V0X3Rlc3Rfb2JqX2F0dHIo
V2ViS2l0RE9NVGVzdE9iaiogc2VsZiwgV2ViS2l0RE9NVGVzdE9iaiogdmFsdWUpOwogCiAvKioK
LSAqIHdlYmtpdF9kb21fdGVzdF9vYmpfZ2V0X3NlcXVlbmNlX2F0dHI6Ci0gKiBAc2VsZjogQSAj
V2ViS2l0RE9NVGVzdE9iagotICoKLSAqIFJldHVybnM6ICh0cmFuc2ZlciBub25lKToKLSAqCi0q
Ki8KLVdFQktJVF9BUEkgV2ViS2l0RE9Nc2VxdWVuY2U8U2NyaXB0UHJvZmlsZT4qCi13ZWJraXRf
ZG9tX3Rlc3Rfb2JqX2dldF9zZXF1ZW5jZV9hdHRyKFdlYktpdERPTVRlc3RPYmoqIHNlbGYpOwot
Ci0vKioKLSAqIHdlYmtpdF9kb21fdGVzdF9vYmpfc2V0X3NlcXVlbmNlX2F0dHI6Ci0gKiBAc2Vs
ZjogQSAjV2ViS2l0RE9NVGVzdE9iagotICogQHZhbHVlOiBBICNXZWJLaXRET01zZXF1ZW5jZTxT
Y3JpcHRQcm9maWxlPgotICoKLSAqIFJldHVybnM6ICh0cmFuc2ZlciBub25lKToKLSAqCi0qKi8K
LVdFQktJVF9BUEkgdm9pZAotd2Via2l0X2RvbV90ZXN0X29ial9zZXRfc2VxdWVuY2VfYXR0cihX
ZWJLaXRET01UZXN0T2JqKiBzZWxmLCBXZWJLaXRET01zZXF1ZW5jZTxTY3JpcHRQcm9maWxlPiog
dmFsdWUpOwotCi0vKioKICAqIHdlYmtpdF9kb21fdGVzdF9vYmpfZ2V0X3htbF9vYmpfYXR0cjoK
ICAqIEBzZWxmOiBBICNXZWJLaXRET01UZXN0T2JqCiAgKgpJbmRleDogU291cmNlL1dlYkNvcmUv
YmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE9iai5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE9iai5jcHAJKHJldmlz
aW9uIDExMTE1MykKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9K
U1Rlc3RPYmouY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMyw2ICszMyw3IEBACiAjaW5jbHVkZSAi
SlNFdmVudExpc3RlbmVyLmgiCiAjaW5jbHVkZSAiSlNTVkdEb2N1bWVudC5oIgogI2luY2x1ZGUg
IkpTU1ZHUG9pbnQuaCIKKyNpbmNsdWRlICJKU1NjcmlwdFByb2ZpbGUuaCIKICNpbmNsdWRlICJK
U1Rlc3RDYWxsYmFjay5oIgogI2luY2x1ZGUgIkpTVGVzdE9iai5oIgogI2luY2x1ZGUgIkpTYS5o
IgpAQCAtNDMsMTggKzQ0LDE4IEBACiAjaW5jbHVkZSAiSlNlLmgiCiAjaW5jbHVkZSAiSlNpbnQu
aCIKICNpbmNsdWRlICJKU3NlcXVlbmNlLmgiCi0jaW5jbHVkZSAiSlNzZXF1ZW5jZTxTY3JpcHRQ
cm9maWxlPi5oIgogI2luY2x1ZGUgIktVUkwuaCIKICNpbmNsdWRlICJTVkdEb2N1bWVudC5oIgog
I2luY2x1ZGUgIlNWR1N0YXRpY1Byb3BlcnR5VGVhck9mZi5oIgogI2luY2x1ZGUgIlNjcmlwdEFy
Z3VtZW50cy5oIgogI2luY2x1ZGUgIlNjcmlwdENhbGxTdGFjay5oIgogI2luY2x1ZGUgIlNjcmlw
dENhbGxTdGFja0ZhY3RvcnkuaCIKKyNpbmNsdWRlICJTY3JpcHRQcm9maWxlLmgiCiAjaW5jbHVk
ZSAiU2VyaWFsaXplZFNjcmlwdFZhbHVlLmgiCiAjaW5jbHVkZSAiVGVzdE9iai5oIgogI2luY2x1
ZGUgImJvb2wuaCIKLSNpbmNsdWRlICJzZXF1ZW5jZTxTY3JpcHRQcm9maWxlPi5oIgogI2luY2x1
ZGUgPHJ1bnRpbWUvRXJyb3IuaD4KKyNpbmNsdWRlIDxydW50aW1lL0pTQXJyYXkuaD4KICNpbmNs
dWRlIDxydW50aW1lL0pTU3RyaW5nLmg+CiAjaW5jbHVkZSA8d3RmL0dldFB0ci5oPgogCkBAIC00
NzcsNyArNDc4LDcgQEAgSlNWYWx1ZSBqc1Rlc3RPYmpTZXF1ZW5jZUF0dHIoRXhlY1N0YXRlKgog
ICAgIEpTVGVzdE9iaiogY2FzdGVkVGhpcyA9IHN0YXRpY19jYXN0PEpTVGVzdE9iaio+KGFzT2Jq
ZWN0KHNsb3RCYXNlKSk7CiAgICAgVU5VU0VEX1BBUkFNKGV4ZWMpOwogICAgIFRlc3RPYmoqIGlt
cGwgPSBzdGF0aWNfY2FzdDxUZXN0T2JqKj4oY2FzdGVkVGhpcy0+aW1wbCgpKTsKLSAgICBKU1Zh
bHVlIHJlc3VsdCA9IHRvSlMoZXhlYywgY2FzdGVkVGhpcy0+Z2xvYmFsT2JqZWN0KCksIFdURjo6
Z2V0UHRyKGltcGwtPnNlcXVlbmNlQXR0cigpKSk7CisgICAgSlNWYWx1ZSByZXN1bHQgPSBqc0Fy
cmF5KGV4ZWMsIGNhc3RlZFRoaXMtPmdsb2JhbE9iamVjdCgpLCBpbXBsLT5zZXF1ZW5jZUF0dHIo
KSk7CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIApAQCAtOTY1LDcgKzk2Niw3IEBAIHZvaWQgc2V0
SlNUZXN0T2JqU2VxdWVuY2VBdHRyKEV4ZWNTdGF0ZSoKIHsKICAgICBKU1Rlc3RPYmoqIGNhc3Rl
ZFRoaXMgPSBzdGF0aWNfY2FzdDxKU1Rlc3RPYmoqPih0aGlzT2JqZWN0KTsKICAgICBUZXN0T2Jq
KiBpbXBsID0gc3RhdGljX2Nhc3Q8VGVzdE9iaio+KGNhc3RlZFRoaXMtPmltcGwoKSk7Ci0gICAg
aW1wbC0+c2V0U2VxdWVuY2VBdHRyKHRvc2VxdWVuY2U8U2NyaXB0UHJvZmlsZT4odmFsdWUpKTsK
KyAgICBpbXBsLT5zZXRTZXF1ZW5jZUF0dHIoKTsKIH0KIAogCkBAIC0xNDIzLDcgKzE0MjQsNyBA
QCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9ialByCiAgICAgaWYgKGV4ZWMt
PmhhZEV4Y2VwdGlvbigpKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZp
bmVkKCkpOwogCi0gICAgSlNDOjpKU1ZhbHVlIHJlc3VsdCA9IHRvSlMoZXhlYywgY2FzdGVkVGhp
cy0+Z2xvYmFsT2JqZWN0KCksIFdURjo6Z2V0UHRyKGltcGwtPm1ldGhvZFJldHVybmluZ1NlcXVl
bmNlKGludEFyZykpKTsKKyAgICBKU0M6OkpTVmFsdWUgcmVzdWx0ID0ganNBcnJheShleGVjLCBj
YXN0ZWRUaGlzLT5nbG9iYWxPYmplY3QoKSwgaW1wbC0+bWV0aG9kUmV0dXJuaW5nU2VxdWVuY2Uo
aW50QXJnKSk7CiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShyZXN1bHQpOwogfQogCkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvVjgvVjhUZXN0T2JqLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvVjgvVjhU
ZXN0T2JqLmNwcAkocmV2aXNpb24gMTExMTUzKQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
c2NyaXB0cy90ZXN0L1Y4L1Y4VGVzdE9iai5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMyLDYgKzMy
LDcgQEAKICNpbmNsdWRlICJTY3JpcHRBcmd1bWVudHMuaCIKICNpbmNsdWRlICJTY3JpcHRDYWxs
U3RhY2suaCIKICNpbmNsdWRlICJTY3JpcHRDYWxsU3RhY2tGYWN0b3J5LmgiCisjaW5jbHVkZSAi
U2NyaXB0UHJvZmlsZS5oIgogI2luY2x1ZGUgIlNlcmlhbGl6ZWRTY3JpcHRWYWx1ZS5oIgogI2lu
Y2x1ZGUgIlY4QmluZGluZy5oIgogI2luY2x1ZGUgIlY4QmluZGluZ01hY3Jvcy5oIgpAQCAtNDIs
NiArNDMsNyBAQAogI2luY2x1ZGUgIlY4UHJveHkuaCIKICNpbmNsdWRlICJWOFNWR0RvY3VtZW50
LmgiCiAjaW5jbHVkZSAiVjhTVkdQb2ludC5oIgorI2luY2x1ZGUgIlY4U2NyaXB0UHJvZmlsZS5o
IgogI2luY2x1ZGUgIlY4VGVzdENhbGxiYWNrLmgiCiAjaW5jbHVkZSAiVjhhLmgiCiAjaW5jbHVk
ZSAiVjhhbnkuaCIKQEAgLTUyLDcgKzU0LDYgQEAKICNpbmNsdWRlICJWOGUuaCIKICNpbmNsdWRl
ICJWOGludC5oIgogI2luY2x1ZGUgIlY4c2VxdWVuY2UuaCIKLSNpbmNsdWRlICJWOHNlcXVlbmNl
PFNjcmlwdFByb2ZpbGU+LmgiCiAjaW5jbHVkZSA8d3RmL0dldFB0ci5oPgogI2luY2x1ZGUgPHd0
Zi9SZWZDb3VudGVkLmg+CiAjaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgpAQCAtMjIzLDE0ICsyMjQs
MTQgQEAgc3RhdGljIHY4OjpIYW5kbGU8djg6OlZhbHVlPiBzZXF1ZW5jZUF0dAogewogICAgIElO
Q19TVEFUUygiRE9NLlRlc3RPYmouc2VxdWVuY2VBdHRyLl9nZXQiKTsKICAgICBUZXN0T2JqKiBp
bXAgPSBWOFRlc3RPYmo6OnRvTmF0aXZlKGluZm8uSG9sZGVyKCkpOwotICAgIHJldHVybiB0b1Y4
KGltcC0+c2VxdWVuY2VBdHRyKCkpOworICAgIHJldHVybiB2OEFycmF5KGltcC0+c2VxdWVuY2VB
dHRyKCkpOwogfQogCiBzdGF0aWMgdm9pZCBzZXF1ZW5jZUF0dHJBdHRyU2V0dGVyKHY4OjpMb2Nh
bDx2ODo6U3RyaW5nPiBuYW1lLCB2ODo6TG9jYWw8djg6OlZhbHVlPiB2YWx1ZSwgY29uc3Qgdjg6
OkFjY2Vzc29ySW5mbyYgaW5mbykKIHsKICAgICBJTkNfU1RBVFMoIkRPTS5UZXN0T2JqLnNlcXVl
bmNlQXR0ci5fc2V0Iik7CiAgICAgVGVzdE9iaiogaW1wID0gVjhUZXN0T2JqOjp0b05hdGl2ZShp
bmZvLkhvbGRlcigpKTsKLSAgICBzZXF1ZW5jZTxTY3JpcHRQcm9maWxlPiogdiA9IFY4c2VxdWVu
Y2U8U2NyaXB0UHJvZmlsZT46Okhhc0luc3RhbmNlKHZhbHVlKSA/IFY4c2VxdWVuY2U8U2NyaXB0
UHJvZmlsZT46OnRvTmF0aXZlKHY4OjpIYW5kbGU8djg6Ok9iamVjdD46OkNhc3QodmFsdWUpKSA6
IDA7CisgICAgc2VxdWVuY2U8U2NyaXB0UHJvZmlsZT4qIHYgPSA7CiAgICAgaW1wLT5zZXRTZXF1
ZW5jZUF0dHIoV1RGOjpnZXRQdHIodikpOwogICAgIHJldHVybjsKIH0KQEAgLTEwNzEsNyArMTA3
Miw3IEBAIHN0YXRpYyB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gbWV0aG9kUmV0dXIKICAgICAgICAg
cmV0dXJuIHRocm93RXJyb3IoIk5vdCBlbm91Z2ggYXJndW1lbnRzIiwgVjhQcm94eTo6VHlwZUVy
cm9yKTsKICAgICBUZXN0T2JqKiBpbXAgPSBWOFRlc3RPYmo6OnRvTmF0aXZlKGFyZ3MuSG9sZGVy
KCkpOwogICAgIEVYQ0VQVElPTl9CTE9DSyhpbnQsIGludEFyZywgdG9JbnQzMihNQVlCRV9NSVNT
SU5HX1BBUkFNRVRFUihhcmdzLCAwLCBEZWZhdWx0SXNVbmRlZmluZWQpKSk7Ci0gICAgcmV0dXJu
IHRvVjgoaW1wLT5tZXRob2RSZXR1cm5pbmdTZXF1ZW5jZShpbnRBcmcpKTsKKyAgICByZXR1cm4g
djhBcnJheShpbXAtPm1ldGhvZFJldHVybmluZ1NlcXVlbmNlKGludEFyZykpOwogfQogCiBzdGF0
aWMgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IG1ldGhvZFRoYXRSZXF1aXJlc0FsbEFyZ3NBbmRUaHJv
d3NDYWxsYmFjayhjb25zdCB2ODo6QXJndW1lbnRzJiBhcmdzKQpJbmRleDogU291cmNlL1dlYkNv
cmUvYmluZGluZ3MvdjgvVjhCaW5kaW5nLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
YmluZGluZ3MvdjgvVjhCaW5kaW5nLmgJKHJldmlzaW9uIDExMTE1MykKKysrIFNvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL3Y4L1Y4QmluZGluZy5oCSh3b3JraW5nIGNvcHkpCkBAIC0yODYsNiArMjg2
LDE3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgcmV0dXJuIHY4RXh0ZXJuYWxTdHJp
bmcoc3RyaW5nKTsKICAgICB9CiAKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBJdGVyYWJsZT4KKyAg
ICB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gdjhBcnJheShjb25zdCBJdGVyYWJsZSYgdmVjdG9yKQor
ICAgIHsKKyAgICAgICAgdjg6OkxvY2FsPHY4OjpBcnJheT4gcmVzdWx0ID0gdjg6OkFycmF5OjpO
ZXcodmVjdG9yLnNpemUoKSk7CisgICAgICAgIGludCBpbmRleCA9IDA7CisgICAgICAgIHR5cGVu
YW1lIEl0ZXJhYmxlOjpjb25zdF9pdGVyYXRvciBlbmQgPSB2ZWN0b3IuZW5kKCk7CisgICAgICAg
IGZvciAodHlwZW5hbWUgSXRlcmFibGU6OmNvbnN0X2l0ZXJhdG9yIGl0ZXIgPSB2ZWN0b3IuYmVn
aW4oKTsgaXRlciAhPSBlbmQ7ICsraXRlcikKKyAgICAgICAgICAgIHJlc3VsdC0+U2V0KHY4OjpJ
bnRlZ2VyOjpOZXcoaW5kZXgrKyksIHRvVjgoV1RGOjpnZXRQdHIoKml0ZXIpKSk7CisgICAgICAg
IHJldHVybiByZXN1bHQ7CisgICAgfQorCiAgICAgLy8gRW5hYmxlcyBjYWNoaW5nIHY4IHdyYXBw
ZXJzIGNyZWF0ZWQgZm9yIFdURjo6U3RyaW5nSW1wbC4gIEN1cnJlbnRseSB0aGlzIGNhY2hlIHJl
cXVpcmVzCiAgICAgLy8gYWxsIHRoZSBjYWxscyAoYm90aCB0byBjb252ZXJ0IFdURjo6U3RyaW5n
IHRvIHY4OjpTdHJpbmcgYW5kIHRvIEdDIHRoZSBoYW5kbGUpCiAgICAgLy8gdG8gYmUgcGVyZm9y
bWVkIG9uIHRoZSBtYWluIHRocmVhZC4KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4
L2N1c3RvbS9WOENvbnNvbGVDdXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL3Y4L2N1c3RvbS9WOENvbnNvbGVDdXN0b20uY3BwCShyZXZpc2lvbiAxMTExNTMp
CisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhDb25zb2xlQ3VzdG9tLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMzYsMzIgKzM2LDEzIEBACiAjaW5jbHVkZSAiU2NyaXB0QXJn
dW1lbnRzLmgiCiAjaW5jbHVkZSAiU2NyaXB0Q2FsbFN0YWNrLmgiCiAjaW5jbHVkZSAiU2NyaXB0
Q2FsbFN0YWNrRmFjdG9yeS5oIgotI2luY2x1ZGUgIlNjcmlwdFByb2ZpbGUuaCIKICNpbmNsdWRl
ICJWOEJpbmRpbmcuaCIKICNpbmNsdWRlICJWOEJpbmRpbmdNYWNyb3MuaCIKICNpbmNsdWRlICJW
OE1lbW9yeUluZm8uaCIKICNpbmNsdWRlICJWOFByb3h5LmgiCi0jaW5jbHVkZSAiVjhTY3JpcHRQ
cm9maWxlLmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotdHlwZWRlZiBWZWN0b3I8UmVmUHRy
PFNjcmlwdFByb2ZpbGU+ID4gUHJvZmlsZXNBcnJheTsKLQotI2lmIEVOQUJMRShKQVZBU0NSSVBU
X0RFQlVHR0VSKQotdjg6OkhhbmRsZTx2ODo6VmFsdWU+IFY4Q29uc29sZTo6cHJvZmlsZXNBY2Nl
c3NvckdldHRlcih2ODo6TG9jYWw8djg6OlN0cmluZz4gbmFtZSwgY29uc3Qgdjg6OkFjY2Vzc29y
SW5mbyYgaW5mbykKLXsKLSAgICBJTkNfU1RBVFMoIkRPTS5Db25zb2xlLnByb2ZpbGVzQWNjZXNz
b3JHZXR0ZXIiKTsKLSAgICBDb25zb2xlKiBpbXAgPSBWOENvbnNvbGU6OnRvTmF0aXZlKGluZm8u
SG9sZGVyKCkpOwotICAgIGNvbnN0IFByb2ZpbGVzQXJyYXkmIHByb2ZpbGVzID0gaW1wLT5wcm9m
aWxlcygpOwotICAgIHY4OjpIYW5kbGU8djg6OkFycmF5PiByZXN1bHQgPSB2ODo6QXJyYXk6Ok5l
dyhwcm9maWxlcy5zaXplKCkpOwotICAgIGludCBpbmRleCA9IDA7Ci0gICAgUHJvZmlsZXNBcnJh
eTo6Y29uc3RfaXRlcmF0b3IgZW5kID0gcHJvZmlsZXMuZW5kKCk7Ci0gICAgZm9yIChQcm9maWxl
c0FycmF5Ojpjb25zdF9pdGVyYXRvciBpdGVyID0gcHJvZmlsZXMuYmVnaW4oKTsgaXRlciAhPSBl
bmQ7ICsraXRlcikKLSAgICAgICAgcmVzdWx0LT5TZXQodjg6OkludGVnZXI6Ok5ldyhpbmRleCsr
KSwgdG9WOChpdGVyLT5nZXQoKSkpOwotICAgIHJldHVybiByZXN1bHQ7Ci19Ci0jZW5kaWYKLQog
djg6OkhhbmRsZTx2ODo6VmFsdWU+IFY4Q29uc29sZTo6dHJhY2VDYWxsYmFjayhjb25zdCB2ODo6
QXJndW1lbnRzJiBhcmdzKQogewogICAgIElOQ19TVEFUUygiRE9NLkNvbnNvbGUudHJhY2VDYWxs
YmFjayIpOwpJbmRleDogU291cmNlL1dlYkNvcmUvcGFnZS9Db25zb2xlLmlkbAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9wYWdlL0NvbnNvbGUuaWRsCShyZXZpc2lvbiAxMTExNTMpCisr
KyBTb3VyY2UvV2ViQ29yZS9wYWdlL0NvbnNvbGUuaWRsCSh3b3JraW5nIGNvcHkpCkBAIC00Niw3
ICs0Niw3IEBAIG1vZHVsZSB3aW5kb3cgewogICAgICAgICBbQ2FsbFdpdGg9U2NyaXB0QXJndW1l
bnRzfENhbGxTdGFja10gdm9pZCBtYXJrVGltZWxpbmUoKTsKIAogI2lmIGRlZmluZWQoRU5BQkxF
X0pBVkFTQ1JJUFRfREVCVUdHRVIpICYmIEVOQUJMRV9KQVZBU0NSSVBUX0RFQlVHR0VSCi0gICAg
ICAgIHJlYWRvbmx5IGF0dHJpYnV0ZSBbQ3VzdG9tR2V0dGVyXSBBcnJheSBwcm9maWxlczsKKyAg
ICAgICAgcmVhZG9ubHkgYXR0cmlidXRlIHNlcXVlbmNlPFNjcmlwdFByb2ZpbGU+IHByb2ZpbGVz
OwogICAgICAgICBbQ3VzdG9tXSB2b2lkIHByb2ZpbGUoaW4gRE9NU3RyaW5nIHRpdGxlKTsKICAg
ICAgICAgW0N1c3RvbV0gdm9pZCBwcm9maWxlRW5kKGluIERPTVN0cmluZyB0aXRsZSk7CiAjZW5k
aWYK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>132773</attachid>
            <date>2012-03-20 00:07:38 -0700</date>
            <delta_ts>2012-03-20 04:14:42 -0700</delta_ts>
            <desc>updated_patch</desc>
            <filename>wip_005.diff</filename>
            <type>text/plain</type>
            <size>23444</size>
            <attacher name="Vineet Chaudhary (vineetc)">code.vineet</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDExMTM2NykKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDUyIEBACisyMDEyLTAzLTIwICBWaW5lZXQg
Q2hhdWRoYXJ5ICA8dmluZWV0LmNoYXVkaGFyeUBtb3Rvcm9sYS5jb20+CisKKyAgICAgICAgaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTgwNjk2CisgICAgICAgIFJlbW92
ZSBjdXN0b20gYmluZGluZ3MgZm9yIGF0dHJpYnV0ZSB0eXBlIEFycmF5LiAKKworICAgICAgICBS
ZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBObyBuZXcgdGVzdHMuCisKKyAg
ICAgICAgKiBiaW5kaW5ncy9qcy9KU0NvbnNvbGVDdXN0b20uY3BwOiBSZW1vdmVkIGN1c3RvbSBm
dW5jdGlvbi4KKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAqIGJpbmRpbmdzL2pzL0pTRE9N
QmluZGluZy5oOiBBZGRlZCB0ZW1wbGF0ZSBqc0FycmF5LgorICAgICAgICAoV2ViQ29yZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpqc0FycmF5KToKKyAgICAgICAgKFdlYkNvcmU6OmpzVmFsdWVUb05h
dGl2ZSk6CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy9Db2RlR2VuZXJhdG9yLnBtOiBNb2Rp
ZmllZCBjb2RlZ2VuZXJhdG9ycyB0byBnZW5lcmF0ZSBhcHByb3ByaWF0ZSBjb2RlLgorICAgICAg
ICAoR2V0QXJyYXlUeXBlKTogQWRkZWQgR2V0QXJyYXlUeXBlIHRvIGdldCByZXR1cm4gdHlwZSBv
ZiBhdHRyaWJ1dGUgaW50ZXJmYWNlLgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvQ29kZUdl
bmVyYXRvckdPYmplY3QucG06IERpdHRvLgorICAgICAgICAoU2tpcEF0dHJpYnV0ZSk6CisgICAg
ICAgICogYmluZGluZ3Mvc2NyaXB0cy9Db2RlR2VuZXJhdG9ySlMucG06IERpdHRvLgorICAgICAg
ICAoQWRkSW5jbHVkZXNGb3JUeXBlKToKKyAgICAgICAgKEpTVmFsdWVUb05hdGl2ZSk6CisgICAg
ICAgIChOYXRpdmVUb0pTVmFsdWUpOgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvQ29kZUdl
bmVyYXRvclY4LnBtOiBEaXR0by4KKyAgICAgICAgKEdlbmVyYXRlTm9ybWFsQXR0ckdldHRlcik6
CisgICAgICAgIChHZW5lcmF0ZU5vcm1hbEF0dHJTZXR0ZXIpOgorICAgICAgICAoSlNWYWx1ZVRv
TmF0aXZlKToKKyAgICAgICAgKE5hdGl2ZVRvSlNWYWx1ZSk6CisgICAgICAgICogYmluZGluZ3Mv
c2NyaXB0cy90ZXN0L0dPYmplY3QvV2ViS2l0RE9NVGVzdE9iai5jcHA6IFVwZGF0ZWQgcmVzdWx0
cyBmcm9tIHJ1bm5pbmcgYmluZGluZyB0ZXN0cy4KKyAgICAgICAgKHdlYmtpdF9kb21fdGVzdF9v
YmpfZ2V0X3Byb3BlcnR5KToKKyAgICAgICAgKHdlYmtpdF9kb21fdGVzdF9vYmpfY2xhc3NfaW5p
dCk6CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0dPYmplY3QvV2ViS2l0RE9NVGVz
dE9iai5oOiBEaXR0by4KKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0
T2JqLmNwcDogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpqc1Rlc3RPYmpTZXF1ZW5jZUF0dHIp
OgorICAgICAgICAoV2ViQ29yZTo6c2V0SlNUZXN0T2JqU2VxdWVuY2VBdHRyKToKKyAgICAgICAg
KFdlYkNvcmU6OmpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uTWV0aG9kUmV0dXJuaW5nU2VxdWVu
Y2UpOgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9WOC9WOFRlc3RPYmouY3BwOiBE
aXR0by4KKyAgICAgICAgKFdlYkNvcmU6OlRlc3RPYmpJbnRlcm5hbDo6c2VxdWVuY2VBdHRyQXR0
ckdldHRlcik6CisgICAgICAgIChXZWJDb3JlOjpUZXN0T2JqSW50ZXJuYWw6OnNlcXVlbmNlQXR0
ckF0dHJTZXR0ZXIpOgorICAgICAgICAoV2ViQ29yZTo6VGVzdE9iakludGVybmFsOjptZXRob2RS
ZXR1cm5pbmdTZXF1ZW5jZUNhbGxiYWNrKToKKyAgICAgICAgKiBiaW5kaW5ncy92OC9WOEJpbmRp
bmcuaDogQWRkZWQgdGVtcGxhdGUgdjhBcnJheS4KKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAg
ICAoV2ViQ29yZTo6djhBcnJheSk6CisgICAgICAgIChXZWJDb3JlOjp2OFZhbHVlVG9OYXRpdmUp
OgorICAgICAgICAqIGJpbmRpbmdzL3Y4L2N1c3RvbS9WOENvbnNvbGVDdXN0b20uY3BwOiBSZW1v
dmVkIGN1c3RvbSBmdW5jdGlvbi4KKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAqIHBhZ2Uv
Q29uc29sZS5pZGw6IFJlcGxhY2VkIGF0dHJpYnV0ZSB0eXBlIEFycmF5IHRvIHNlcXVlbmNlPFNy
aXB0UHJvZmlsZT4gdG8gcmVtb3ZlCisgICAgICAgICAgY3VzdG9tIGJpbmRpbmdzLgorCiAyMDEy
LTAzLTE5ICBCZW5qYW1pbiBQb3VsYWluICA8YnBvdWxhaW5AYXBwbGUuY29tPgogCiAgICAgICAg
IEJ1aWxkIGZpeCBmb3IgRGVidWcgYnVpbGQgYWZ0ZXIgcjExMTM1OApJbmRleDogU291cmNlL1dl
YkNvcmUvYmluZGluZ3MvanMvSlNDb25zb2xlQ3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0NvbnNvbGVDdXN0b20uY3BwCShyZXZpc2lvbiAxMTEx
NTMpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0NvbnNvbGVDdXN0b20uY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0zMCwzMSArMzAsMTQgQEAKICNpbmNsdWRlICJKU0NvbnNvbGUuaCIK
IAogI2luY2x1ZGUgIkNvbnNvbGUuaCIKLSNpbmNsdWRlICJKU1NjcmlwdFByb2ZpbGUuaCIKICNp
bmNsdWRlICJTY3JpcHRDYWxsU3RhY2suaCIKICNpbmNsdWRlICJTY3JpcHRDYWxsU3RhY2tGYWN0
b3J5LmgiCi0jaW5jbHVkZSAiU2NyaXB0UHJvZmlsZS5oIgotI2luY2x1ZGUgPHJ1bnRpbWUvSlNB
cnJheS5oPgogI2luY2x1ZGUgPHd0Zi9Pd25QdHIuaD4KIAogdXNpbmcgbmFtZXNwYWNlIEpTQzsK
IAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi10eXBlZGVmIFZlY3RvcjxSZWZQdHI8U2NyaXB0UHJv
ZmlsZT4gPiBQcm9maWxlc0FycmF5OwotCi1KU1ZhbHVlIEpTQ29uc29sZTo6cHJvZmlsZXMoRXhl
Y1N0YXRlKiBleGVjKSBjb25zdAotewotICAgIGNvbnN0IFByb2ZpbGVzQXJyYXkmIHByb2ZpbGVz
ID0gaW1wbCgpLT5wcm9maWxlcygpOwotICAgIE1hcmtlZEFyZ3VtZW50QnVmZmVyIGxpc3Q7Ci0K
LSAgICBQcm9maWxlc0FycmF5Ojpjb25zdF9pdGVyYXRvciBlbmQgPSBwcm9maWxlcy5lbmQoKTsK
LSAgICBmb3IgKFByb2ZpbGVzQXJyYXk6OmNvbnN0X2l0ZXJhdG9yIGl0ZXIgPSBwcm9maWxlcy5i
ZWdpbigpOyBpdGVyICE9IGVuZDsgKytpdGVyKQotICAgICAgICBsaXN0LmFwcGVuZCh0b0pTKGV4
ZWMsIGdsb2JhbE9iamVjdCgpLCBpdGVyLT5nZXQoKSkpOwotCi0gICAgcmV0dXJuIGNvbnN0cnVj
dEFycmF5KGV4ZWMsIGdsb2JhbE9iamVjdCgpLCBsaXN0KTsKLX0KLQogSlNWYWx1ZSBKU0NvbnNv
bGU6OnByb2ZpbGUoRXhlY1N0YXRlKiBleGVjKQogewogICAgIFJlZlB0cjxTY3JpcHRDYWxsU3Rh
Y2s+IGNhbGxTdGFjayhjcmVhdGVTY3JpcHRDYWxsU3RhY2soZXhlYywgMSkpOwpJbmRleDogU291
cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01CaW5kaW5nLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01CaW5kaW5nLmgJKHJldmlzaW9uIDExMTE1MykK
KysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NQmluZGluZy5oCSh3b3JraW5nIGNv
cHkpCkBAIC0zNSw2ICszNSw3IEBACiAjaW5jbHVkZSAiU3R5bGVkRWxlbWVudC5oIgogI2luY2x1
ZGUgPGhlYXAvV2Vhay5oPgogI2luY2x1ZGUgPHJ1bnRpbWUvRnVuY3Rpb25Qcm90b3R5cGUuaD4K
KyNpbmNsdWRlIDxydW50aW1lL0pTQXJyYXkuaD4KICNpbmNsdWRlIDxydW50aW1lL0xvb2t1cC5o
PgogI2luY2x1ZGUgPHJ1bnRpbWUvT2JqZWN0UHJvdG90eXBlLmg+CiAjaW5jbHVkZSA8d3RmL0Zv
cndhcmQuaD4KQEAgLTI3OCw2ICsyNzksMzAgQEAgZW51bSBQYXJhbWV0ZXJEZWZhdWx0UG9saWN5
IHsKICAgICAgICAgcmV0dXJuIHRvSlMoZXhlYywgZ2xvYmFsT2JqZWN0LCBwdHIuZ2V0KCkpOwog
ICAgIH0KIAorICAgIHRlbXBsYXRlPHR5cGVuYW1lIEl0ZXJhYmxlPgorICAgIEpTQzo6SlNWYWx1
ZSBqc0FycmF5KEpTQzo6RXhlY1N0YXRlKiBleGVjLCBKU0RPTUdsb2JhbE9iamVjdCogZ2xvYmFs
T2JqZWN0LCBjb25zdCBJdGVyYWJsZSYgdmVjdG9yKQorICAgIHsKKyAgICAgICAgSlNDOjpNYXJr
ZWRBcmd1bWVudEJ1ZmZlciBsaXN0OworICAgICAgICB0eXBlbmFtZSBJdGVyYWJsZTo6Y29uc3Rf
aXRlcmF0b3IgZW5kID0gdmVjdG9yLmVuZCgpOworCisgICAgICAgIGZvciAodHlwZW5hbWUgSXRl
cmFibGU6OmNvbnN0X2l0ZXJhdG9yIGl0ZXIgPSB2ZWN0b3IuYmVnaW4oKTsgaXRlciAhPSBlbmQ7
ICsraXRlcikKKyAgICAgICAgICAgIGxpc3QuYXBwZW5kKHRvSlMoZXhlYywgZ2xvYmFsT2JqZWN0
LCBXVEY6OmdldFB0cigqaXRlcikpKTsKKworICAgICAgICByZXR1cm4gSlNDOjpjb25zdHJ1Y3RB
cnJheShleGVjLCBsaXN0KTsKKyAgICB9CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBJdGVyYWJs
ZT4KKyAgICBJdGVyYWJsZSBqc1ZhbHVlVG9OYXRpdmUoSlNDOjpFeGVjU3RhdGUqIGV4ZWMsIEpT
Qzo6SlNWYWx1ZSB2YWx1ZSkKKyAgICB7CisgICAgICAgIEl0ZXJhYmxlIHJlc3VsdDsKKyAgICAg
ICAgSlNDOjpKU0FycmF5KiBhcnJheSA9IGFzQXJyYXkodmFsdWUpOworICAgICAgICBmb3IgKHVu
c2lnbmVkIGkgPSAwOyBpIDwgYXJyYXktPmxlbmd0aCgpOyArK2kpIHsKKyAgICAgICAgICAgIFN0
cmluZyBpbmRleGVkVmFsdWUgPSB1c3RyaW5nVG9TdHJpbmcoYXJyYXktPmdldEluZGV4KGkpLnRv
U3RyaW5nKGV4ZWMpLT52YWx1ZShleGVjKSk7CisgICAgICAgICAgICByZXN1bHQuYXBwZW5kKGlu
ZGV4ZWRWYWx1ZSk7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9CisK
ICAgICAvLyBWYWxpZGF0ZXMgdGhhdCB0aGUgcGFzc2VkIG9iamVjdCBpcyBhIHNlcXVlbmNlIHR5
cGUgcGVyIHNlY3Rpb24gNC4xLjEzIG9mIHRoZSBXZWJJREwgc3BlYy4KICAgICBKU0M6OkpTT2Jq
ZWN0KiB0b0pTU2VxdWVuY2UoSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkpTVmFsdWUsIHVuc2lnbmVk
Jik7CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvQ29kZUdlbmVyYXRv
ci5wbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL0NvZGVH
ZW5lcmF0b3IucG0JKHJldmlzaW9uIDExMTE1MykKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L3NjcmlwdHMvQ29kZUdlbmVyYXRvci5wbQkod29ya2luZyBjb3B5KQpAQCAtNDQ1LDYgKzQ0NSwx
NSBAQCBzdWIgSXNTVkdBbmltYXRlZFR5cGUKICAgICByZXR1cm4gMDsKIH0KIAorc3ViIEdldEFy
cmF5VHlwZQoreworICAgIG15ICRvYmplY3QgPSBzaGlmdDsKKyAgICBteSAkdHlwZSA9IHNoaWZ0
OworCisgICAgcmV0dXJuICQxIGlmICR0eXBlID1+IC9ec2VxdWVuY2U8KFtcd1xkX10rKT4kLzsK
KyAgICByZXR1cm4gIiI7Cit9CisKICMgVXBwZXJjYXNlIHRoZSBmaXJzdCBsZXR0ZXIgd2hpbGUg
cmVzcGVjdGluZyBXZWJLaXQgc3R5bGUgZ3VpZGVsaW5lcy4KICMgRS5nLiwgeG1sRW5jb2Rpbmcg
YmVjb21lcyBYTUxFbmNvZGluZywgYnV0IHhtbGxsYW5nIGJlY29tZXMgWG1sbGFuZy4KIHN1YiBX
S191Y2ZpcnN0CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5l
cmF0b3JHT2JqZWN0LnBtCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Nj
cmlwdHMvQ29kZUdlbmVyYXRvckdPYmplY3QucG0JKHJldmlzaW9uIDExMTE1MykKKysrIFNvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvQ29kZUdlbmVyYXRvckdPYmplY3QucG0JKHdvcmtp
bmcgY29weSkKQEAgLTE2NCw2ICsxNjQsMTAgQEAgc3ViIFNraXBBdHRyaWJ1dGUgewogICAgICAg
ICByZXR1cm4gMTsKICAgICB9CiAKKyAgICBpZiAoJGNvZGVHZW5lcmF0b3ItPkdldEFycmF5VHlw
ZSgkcHJvcFR5cGUpKSB7CisgICAgICAgIHJldHVybiAxOworICAgIH0KKwogICAgICMgVGhpcyBp
cyBmb3IgRE9NV2luZG93LmlkbCBsb2NhdGlvbiBhdHRyaWJ1dGUKICAgICBpZiAoJGF0dHJpYnV0
ZS0+c2lnbmF0dXJlLT5uYW1lIGVxICJsb2NhdGlvbiIpIHsKICAgICAgICAgcmV0dXJuIDE7Cklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0b3JKUy5wbQo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0
b3JKUy5wbQkocmV2aXNpb24gMTExMTUzKQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2Ny
aXB0cy9Db2RlR2VuZXJhdG9ySlMucG0JKHdvcmtpbmcgY29weSkKQEAgLTI2Niw2ICsyNjYsNyBA
QCBzdWIgQWRkSW5jbHVkZXNGb3JUeXBlCiAgICAgICAgICRpbmNsdWRlc1JlZi0+eyJKUyR7dHlw
ZX0uaCJ9ID0gMTsKICAgICB9IGVsc2lmIChJc1R5cGVkQXJyYXlUeXBlKCR0eXBlKSkgewogICAg
ICAgICAkaW5jbHVkZXNSZWYtPnsiPHd0Zi8ke3R5cGV9Lmg+In0gPSAxOworICAgIH0gZWxzaWYg
KCRjb2RlR2VuZXJhdG9yLT5HZXRBcnJheVR5cGUoJHR5cGUpKSB7CiAgICAgfSBlbHNlIHsKICAg
ICAgICAgIyBkZWZhdWx0LCBpbmNsdWRlIHRoZSBzYW1lIG5hbWVkIGZpbGUKICAgICAgICAgJGlu
Y2x1ZGVzUmVmLT57IiR7dHlwZX0uaCJ9ID0gMTsKQEAgLTI5NDUsNiArMjk0NiwxMCBAQCBzdWIg
SlNWYWx1ZVRvTmF0aXZlCiAgICAgQWRkVG9JbXBsSW5jbHVkZXMoIkpTQ3VzdG9tVm9pZENhbGxi
YWNrLmgiLCAkY29uZGl0aW9uYWwpIGlmICR0eXBlIGVxICJWb2lkQ2FsbGJhY2siOwogICAgIEFk
ZFRvSW1wbEluY2x1ZGVzKCJFdmVudC5oIiwgJGNvbmRpdGlvbmFsKSBpZiAkdHlwZSBlcSAiRXZl
bnQiOwogCisgICAgaWYgKCRjb2RlR2VuZXJhdG9yLT5HZXRBcnJheVR5cGUoJHR5cGUpKSB7Cisg
ICAgICAgIHJldHVybiAianNWYWx1ZVRvTmF0aXZlKGV4ZWMsICR2YWx1ZSkiOworICAgIH0KKwog
ICAgICMgRGVmYXVsdCwgYXNzdW1lIGF1dG9nZW5lcmF0ZWQgdHlwZSBjb252ZXJzaW9uIHJvdXRp
bmVzCiAgICAgQWRkVG9JbXBsSW5jbHVkZXMoIkpTJHR5cGUuaCIsICRjb25kaXRpb25hbCk7CiAg
ICAgcmV0dXJuICJ0byR0eXBlKCR2YWx1ZSkiOwpAQCAtMzAwNCw2ICszMDA5LDE0IEBAIHN1YiBO
YXRpdmVUb0pTVmFsdWUKICAgICAgICAgQWRkVG9JbXBsSW5jbHVkZXMoIk5hbWVOb2RlTGlzdC5o
IiwgJGNvbmRpdGlvbmFsKTsKICAgICB9CiAKKyAgICBteSAkYXR0cmlidXRlVHlwZSA9ICRjb2Rl
R2VuZXJhdG9yLT5HZXRBcnJheVR5cGUoJHR5cGUpOworICAgIGlmICgkYXR0cmlidXRlVHlwZSkg
eworICAgICAgICBBZGRUb0ltcGxJbmNsdWRlcygiPHJ1bnRpbWUvSlNBcnJheS5oPiIsICRjb25k
aXRpb25hbCk7CisgICAgICAgIEFkZFRvSW1wbEluY2x1ZGVzKCJKUyRhdHRyaWJ1dGVUeXBlLmgi
LCAkY29uZGl0aW9uYWwpOworICAgICAgICBBZGRUb0ltcGxJbmNsdWRlcygiJGF0dHJpYnV0ZVR5
cGUuaCIsICRjb25kaXRpb25hbCk7CisgICAgICAgIHJldHVybiAianNBcnJheShleGVjLCAkdGhp
c1ZhbHVlLT5nbG9iYWxPYmplY3QoKSwgJHZhbHVlKSI7CisgICAgfQorCiAgICAgaWYgKCR0eXBl
IGVxICJET01PYmplY3QiKSB7CiAgICAgICAgIGlmICgkaW1wbENsYXNzTmFtZSBlcSAiRG9jdW1l
bnQiKSB7CiAgICAgICAgICAgICBBZGRUb0ltcGxJbmNsdWRlcygiSlNDYW52YXNSZW5kZXJpbmdD
b250ZXh0MkQuaCIsICRjb25kaXRpb25hbCk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy9zY3JpcHRzL0NvZGVHZW5lcmF0b3JWOC5wbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0b3JWOC5wbQkocmV2aXNpb24gMTExMTUzKQor
KysgU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy9Db2RlR2VuZXJhdG9yVjgucG0JKHdv
cmtpbmcgY29weSkKQEAgLTkyMyw2ICs5MjMsMTggQEAgRU5ECiAgICAgaWYgKCFJc05vZGVTdWJU
eXBlKCRkYXRhTm9kZSkgJiYgJGF0dHJOYW1lIG5lICJzZWxmIiAmJiAoSXNXcmFwcGVyVHlwZSgk
cmV0dXJuVHlwZSkgJiYgKCRhdHRyaWJ1dGUtPnR5cGUgPX4gL15yZWFkb25seS8gfHwgJGF0dHJp
YnV0ZS0+c2lnbmF0dXJlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPnsiUmVwbGFjZWFibGUifSkKICAg
ICAgICAgJiYgJHJldHVyblR5cGUgbmUgIkV2ZW50VGFyZ2V0IiAmJiAkcmV0dXJuVHlwZSBuZSAi
U2VyaWFsaXplZFNjcmlwdFZhbHVlIiAmJiAkcmV0dXJuVHlwZSBuZSAiRE9NV2luZG93IiAKICAg
ICAgICAgJiYgJHJldHVyblR5cGUgIX4gL1NWRy8gJiYgJHJldHVyblR5cGUgIX4gL0hUTUwvICYm
ICFJc0RPTU5vZGVUeXBlKCRyZXR1cm5UeXBlKSkpIHsKKworICAgICAgICBteSAkYXR0cmlidXRl
VHlwZSA9ICRjb2RlR2VuZXJhdG9yLT5HZXRBcnJheVR5cGUoJHJldHVyblR5cGUpOworCisgICAg
ICAgIGlmICgkYXR0cmlidXRlVHlwZSkgeworICAgICAgICAgICAgQWRkVG9JbXBsSW5jbHVkZXMo
IlY4JGF0dHJpYnV0ZVR5cGUuaCIpOworICAgICAgICAgICAgQWRkVG9JbXBsSW5jbHVkZXMoIiRh
dHRyaWJ1dGVUeXBlLmgiKTsKKyAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50RGVjbHMsICIg
ICAgY29uc3QgVmVjdG9yPFJlZlB0cjwkYXR0cmlidXRlVHlwZT4gPiB2ZWN0b3IgPSAke2dldHRl
clN0cmluZ307XG4iKTsKKyAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50RGVjbHMsICIgICAg
cmV0dXJuIHY4QXJyYXkodmVjdG9yKTtcbiIpOworICAgICAgICAgICAgcHVzaChAaW1wbENvbnRl
bnREZWNscywgIn1cblxuIik7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKwogICAg
ICAgICBBZGRJbmNsdWRlc0ZvclR5cGUoJHJldHVyblR5cGUpOwogICAgICAgICAjIENoZWNrIGZv
ciBhIHdyYXBwZXIgaW4gdGhlIHdyYXBwZXIgY2FjaGUuIElmIHRoZXJlIGlzIG9uZSwgd2Uga25v
dyB0aGF0IGEgaGlkZGVuIHJlZmVyZW5jZSBoYXMgYWxyZWFkeQogICAgICAgICAjIGJlZW4gY3Jl
YXRlZC4gSWYgd2UgZG9uJ3QgZmluZCBhIHdyYXBwZXIsIHdlIGNyZWF0ZSBib3RoIGEgd3JhcHBl
ciBhbmQgYSBoaWRkZW4gcmVmZXJlbmNlLgpAQCAtMTA5NywxMCArMTEwOSwxNCBAQCBFTkQKICAg
ICAgICAgfQogICAgIH0gZWxzZSB7CiAgICAgICAgIG15ICR2YWx1ZSA9IEpTVmFsdWVUb05hdGl2
ZSgkYXR0cmlidXRlLT5zaWduYXR1cmUsICJ2YWx1ZSIpOworICAgICAgICBteSBAYXJyYXlUeXBl
ID0gc3BsaXQoL1xXKy8sICRuYXRpdmVUeXBlKTsKKwogICAgICAgICBpZiAoJG5hdGl2ZVR5cGUg
PX4gL15WOFBhcmFtZXRlci8pIHsKLSAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudERlY2xzLCAi
ICAgICIgLiBDb252ZXJ0VG9WOFBhcmFtZXRlcigkYXR0cmlidXRlLT5zaWduYXR1cmUsICRuYXRp
dmVUeXBlLCAidiIsICR2YWx1ZSwgIlZPSUQiKSAuICJcbiIpOworICAgICAgICAgICAgcHVzaChA
aW1wbENvbnRlbnREZWNscywgIiAgICAiIC4gQ29udmVydFRvVjhQYXJhbWV0ZXIoJGF0dHJpYnV0
ZS0+c2lnbmF0dXJlLCAkbmF0aXZlVHlwZSwgInYiLCAkdmFsdWUsICJWT0lEIikgLiAiXG4iKTsK
KyAgICAgICAgfSBlbHNpZiAoJGFycmF5VHlwZVswXSBlcSAic2VxdWVuY2UiKSB7CisgICAgICAg
ICAgICBwdXNoKEBpbXBsQ29udGVudERlY2xzLCAiICAgICRhcnJheVR5cGVbMV0gdiA9ICR2YWx1
ZTtcbiIpOwogICAgICAgICB9IGVsc2UgewotICAgICAgICAgIHB1c2goQGltcGxDb250ZW50RGVj
bHMsICIgICAgJG5hdGl2ZVR5cGUgdiA9ICR2YWx1ZTtcbiIpOworICAgICAgICAgICAgcHVzaChA
aW1wbENvbnRlbnREZWNscywgIiAgICAkbmF0aXZlVHlwZSB2ID0gJHZhbHVlO1xuIik7CiAgICAg
ICAgIH0KICAgICB9CiAKQEAgLTM1NTQsNiArMzU3MCwxMCBAQCBzdWIgSlNWYWx1ZVRvTmF0aXZl
CiAgICAgICAgIHJldHVybiAiVjhET01XcmFwcGVyOjpnZXRYUGF0aE5TUmVzb2x2ZXIoJHZhbHVl
KSI7CiAgICAgfQogCisgICAgaWYgKCRjb2RlR2VuZXJhdG9yLT5HZXRBcnJheVR5cGUoJHR5cGUp
KSB7CisgICAgICAgIHJldHVybiAidjhWYWx1ZVRvTmF0aXZlKCR2YWx1ZSkiOworICAgIH0KKwog
ICAgIEFkZEluY2x1ZGVzRm9yVHlwZSgkdHlwZSk7CiAKICAgICBpZiAoSXNET01Ob2RlVHlwZSgk
dHlwZSkpIHsKQEAgLTM3NjcsNiArMzc4NywxMyBAQCBzdWIgTmF0aXZlVG9KU1ZhbHVlCiAgICAg
ICAgIHJldHVybiAidjhTdHJpbmcoJHZhbHVlKSI7CiAgICAgfQogCisgICAgbXkgJGF0dHJpYnV0
ZVR5cGUgPSAkY29kZUdlbmVyYXRvci0+R2V0QXJyYXlUeXBlKCR0eXBlKTsKKyAgICBpZiAoJGF0
dHJpYnV0ZVR5cGUpIHsKKyAgICAgICAgQWRkVG9JbXBsSW5jbHVkZXMoIlY4JGF0dHJpYnV0ZVR5
cGUuaCIpOworICAgICAgICBBZGRUb0ltcGxJbmNsdWRlcygiJGF0dHJpYnV0ZVR5cGUuaCIpOwor
ICAgICAgICByZXR1cm4gInY4QXJyYXkoJHZhbHVlKSI7CisgICAgfQorCiAgICAgQWRkSW5jbHVk
ZXNGb3JUeXBlKCR0eXBlKTsKIAogICAgICMgc3BlY2lhbCBjYXNlIGZvciBub24tRE9NIG5vZGUg
aW50ZXJmYWNlcwpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0dP
YmplY3QvV2ViS2l0RE9NVGVzdE9iai5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
YmluZGluZ3Mvc2NyaXB0cy90ZXN0L0dPYmplY3QvV2ViS2l0RE9NVGVzdE9iai5jcHAJKHJldmlz
aW9uIDExMTE1MykKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9HT2Jq
ZWN0L1dlYktpdERPTVRlc3RPYmouY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04MTAsMzIgKzgxMCw2
IEBAIHdlYmtpdF9kb21fdGVzdF9vYmpfc2V0X3Rlc3Rfb2JqX2F0dHIoV2UKICAgICBpdGVtLT5z
ZXRUZXN0T2JqQXR0cihjb252ZXJ0ZWRfdmFsdWUpOwogfQogCi1XZWJLaXRET01zZXF1ZW5jZTxT
Y3JpcHRQcm9maWxlPioKLXdlYmtpdF9kb21fdGVzdF9vYmpfZ2V0X3NlcXVlbmNlX2F0dHIoV2Vi
S2l0RE9NVGVzdE9iaiogc2VsZikKLXsKLSAgICBnX3JldHVybl92YWxfaWZfZmFpbChzZWxmLCAw
KTsKLSAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7Ci0gICAgV2ViQ29y
ZTo6VGVzdE9iaiAqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7Ci0gICAgUGFzc1JlZlB0cjxX
ZWJDb3JlOjpzZXF1ZW5jZTxTY3JpcHRQcm9maWxlPj4gZ19yZXMgPSBXVEY6OmdldFB0cihpdGVt
LT5zZXF1ZW5jZUF0dHIoKSk7Ci0gICAgV2ViS2l0RE9Nc2VxdWVuY2U8U2NyaXB0UHJvZmlsZT4q
IHJlcyA9IFdlYktpdDo6a2l0KGdfcmVzLmdldCgpKTsKLSAgICByZXR1cm4gcmVzOwotfQotCi12
b2lkCi13ZWJraXRfZG9tX3Rlc3Rfb2JqX3NldF9zZXF1ZW5jZV9hdHRyKFdlYktpdERPTVRlc3RP
YmoqIHNlbGYsIFdlYktpdERPTXNlcXVlbmNlPFNjcmlwdFByb2ZpbGU+KiB2YWx1ZSkKLXsKLSAg
ICBnX3JldHVybl9pZl9mYWlsKHNlbGYpOwotICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxT
dGF0ZSBzdGF0ZTsKLSAgICBXZWJDb3JlOjpUZXN0T2JqICogaXRlbSA9IFdlYktpdDo6Y29yZShz
ZWxmKTsKLSAgICBnX3JldHVybl9pZl9mYWlsKHZhbHVlKTsKLSAgICBXZWJDb3JlOjpzZXF1ZW5j
ZTxTY3JpcHRQcm9maWxlPiAqIGNvbnZlcnRlZF92YWx1ZSA9IE5VTEw7Ci0gICAgaWYgKHZhbHVl
ICE9IE5VTEwpIHsKLSAgICAgICAgY29udmVydGVkX3ZhbHVlID0gV2ViS2l0Ojpjb3JlKHZhbHVl
KTsKLSAgICAgICAgZ19yZXR1cm5faWZfZmFpbChjb252ZXJ0ZWRfdmFsdWUpOwotICAgIH0KLSAg
ICBpdGVtLT5zZXRTZXF1ZW5jZUF0dHIoY29udmVydGVkX3ZhbHVlKTsKLX0KLQogV2ViS2l0RE9N
VGVzdE9iaioKIHdlYmtpdF9kb21fdGVzdF9vYmpfZ2V0X3htbF9vYmpfYXR0cihXZWJLaXRET01U
ZXN0T2JqKiBzZWxmKQogewpAQCAtMTU5NSw3ICsxNTY5LDYgQEAgZW51bSB7CiAgICAgUFJPUF9V
TlNJR05FRF9MT05HX0xPTkdfQVRUUiwKICAgICBQUk9QX1NUUklOR19BVFRSLAogICAgIFBST1Bf
VEVTVF9PQkpfQVRUUiwKLSAgICBQUk9QX1NFUVVFTkNFX0FUVFIsCiAgICAgUFJPUF9YTUxfT0JK
X0FUVFIsCiAgICAgUFJPUF9DUkVBVEUsCiAgICAgUFJPUF9SRUZMRUNURURfU1RSSU5HX0FUVFIs
CkBAIC0xODU1LDEyICsxODI4LDYgQEAgc3RhdGljIHZvaWQgd2Via2l0X2RvbV90ZXN0X29ial9n
ZXRfcHJvcAogICAgICAgICBnX3ZhbHVlX3NldF9vYmplY3QodmFsdWUsIFdlYktpdDo6a2l0KHB0
ci5nZXQoKSkpOwogICAgICAgICBicmVhazsKICAgICB9Ci0gICAgY2FzZSBQUk9QX1NFUVVFTkNF
X0FUVFI6Ci0gICAgewotICAgICAgICBSZWZQdHI8V2ViQ29yZTo6c2VxdWVuY2U8U2NyaXB0UHJv
ZmlsZT4+IHB0ciA9IGNvcmVTZWxmLT5zZXF1ZW5jZUF0dHIoKTsKLSAgICAgICAgZ192YWx1ZV9z
ZXRfb2JqZWN0KHZhbHVlLCBXZWJLaXQ6OmtpdChwdHIuZ2V0KCkpKTsKLSAgICAgICAgYnJlYWs7
Ci0gICAgfQogICAgIGNhc2UgUFJPUF9YTUxfT0JKX0FUVFI6CiAgICAgewogICAgICAgICBSZWZQ
dHI8V2ViQ29yZTo6VGVzdE9iaj4gcHRyID0gY29yZVNlbGYtPnhtbE9iakF0dHIoKTsKQEAgLTIx
NTMsMTMgKzIxMjAsNiBAQCBHX01BWFVJTlQ2NCwgLyogbWluICovCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdFQktJVF9UWVBFX0RP
TV9URVNUX09CSiwgLyogZ29iamVjdCB0eXBlICovCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdFQktJVF9QQVJBTV9SRUFEV1JJVEUp
KTsKICAgICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5KGdvYmplY3RDbGFzcywKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBST1BfU0VRVUVOQ0VfQVRUUiwKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdfcGFyYW1fc3BlY19vYmplY3QoInNl
cXVlbmNlLWF0dHIiLCAvKiBuYW1lICovCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ0ZXN0X29ial9zZXF1ZW5jZS1hdHRyIiwgLyog
c2hvcnQgZGVzY3JpcHRpb24gKi8KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgInJlYWQtd3JpdGUgIFdlYktpdERPTXNlcXVlbmNlPFNj
cmlwdFByb2ZpbGU+KiBUZXN0T2JqLnNlcXVlbmNlLWF0dHIiLCAvKiBsb25nZXIgLSBjb3VsZCBk
byB3aXRoIHNvbWUgZXh0cmEgZG9jIHN0dWZmIGhlcmUgKi8KLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgV0VCS0lUX1RZUEVfRE9NX1NF
UVVFTkNFPFNDUklQVF9QUk9GSUxFPiwgLyogZ29iamVjdCB0eXBlICovCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdFQktJVF9QQVJB
TV9SRUFEV1JJVEUpKTsKLSAgICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5KGdvYmpl
Y3RDbGFzcywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBST1BfWE1MX09C
Sl9BVFRSLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ19wYXJhbV9zcGVj
X29iamVjdCgieG1sLW9iai1hdHRyIiwgLyogbmFtZSAqLwogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAidGVzdF9vYmpfeG1sLW9iai1h
dHRyIiwgLyogc2hvcnQgZGVzY3JpcHRpb24gKi8KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL3NjcmlwdHMvdGVzdC9HT2JqZWN0L1dlYktpdERPTVRlc3RPYmouaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvR09iamVjdC9XZWJLaXRET01U
ZXN0T2JqLmgJKHJldmlzaW9uIDExMTE1MykKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Nj
cmlwdHMvdGVzdC9HT2JqZWN0L1dlYktpdERPTVRlc3RPYmouaAkod29ya2luZyBjb3B5KQpAQCAt
Njk3LDI3ICs2OTcsNiBAQCBXRUJLSVRfQVBJIHZvaWQKIHdlYmtpdF9kb21fdGVzdF9vYmpfc2V0
X3Rlc3Rfb2JqX2F0dHIoV2ViS2l0RE9NVGVzdE9iaiogc2VsZiwgV2ViS2l0RE9NVGVzdE9iaiog
dmFsdWUpOwogCiAvKioKLSAqIHdlYmtpdF9kb21fdGVzdF9vYmpfZ2V0X3NlcXVlbmNlX2F0dHI6
Ci0gKiBAc2VsZjogQSAjV2ViS2l0RE9NVGVzdE9iagotICoKLSAqIFJldHVybnM6ICh0cmFuc2Zl
ciBub25lKToKLSAqCi0qKi8KLVdFQktJVF9BUEkgV2ViS2l0RE9Nc2VxdWVuY2U8U2NyaXB0UHJv
ZmlsZT4qCi13ZWJraXRfZG9tX3Rlc3Rfb2JqX2dldF9zZXF1ZW5jZV9hdHRyKFdlYktpdERPTVRl
c3RPYmoqIHNlbGYpOwotCi0vKioKLSAqIHdlYmtpdF9kb21fdGVzdF9vYmpfc2V0X3NlcXVlbmNl
X2F0dHI6Ci0gKiBAc2VsZjogQSAjV2ViS2l0RE9NVGVzdE9iagotICogQHZhbHVlOiBBICNXZWJL
aXRET01zZXF1ZW5jZTxTY3JpcHRQcm9maWxlPgotICoKLSAqIFJldHVybnM6ICh0cmFuc2ZlciBu
b25lKToKLSAqCi0qKi8KLVdFQktJVF9BUEkgdm9pZAotd2Via2l0X2RvbV90ZXN0X29ial9zZXRf
c2VxdWVuY2VfYXR0cihXZWJLaXRET01UZXN0T2JqKiBzZWxmLCBXZWJLaXRET01zZXF1ZW5jZTxT
Y3JpcHRQcm9maWxlPiogdmFsdWUpOwotCi0vKioKICAqIHdlYmtpdF9kb21fdGVzdF9vYmpfZ2V0
X3htbF9vYmpfYXR0cjoKICAqIEBzZWxmOiBBICNXZWJLaXRET01UZXN0T2JqCiAgKgpJbmRleDog
U291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE9iai5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVz
dE9iai5jcHAJKHJldmlzaW9uIDExMTE1MykKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Nj
cmlwdHMvdGVzdC9KUy9KU1Rlc3RPYmouY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMyw2ICszMyw3
IEBACiAjaW5jbHVkZSAiSlNFdmVudExpc3RlbmVyLmgiCiAjaW5jbHVkZSAiSlNTVkdEb2N1bWVu
dC5oIgogI2luY2x1ZGUgIkpTU1ZHUG9pbnQuaCIKKyNpbmNsdWRlICJKU1NjcmlwdFByb2ZpbGUu
aCIKICNpbmNsdWRlICJKU1Rlc3RDYWxsYmFjay5oIgogI2luY2x1ZGUgIkpTVGVzdE9iai5oIgog
I2luY2x1ZGUgIkpTYS5oIgpAQCAtNDMsMTggKzQ0LDE4IEBACiAjaW5jbHVkZSAiSlNlLmgiCiAj
aW5jbHVkZSAiSlNpbnQuaCIKICNpbmNsdWRlICJKU3NlcXVlbmNlLmgiCi0jaW5jbHVkZSAiSlNz
ZXF1ZW5jZTxTY3JpcHRQcm9maWxlPi5oIgogI2luY2x1ZGUgIktVUkwuaCIKICNpbmNsdWRlICJT
VkdEb2N1bWVudC5oIgogI2luY2x1ZGUgIlNWR1N0YXRpY1Byb3BlcnR5VGVhck9mZi5oIgogI2lu
Y2x1ZGUgIlNjcmlwdEFyZ3VtZW50cy5oIgogI2luY2x1ZGUgIlNjcmlwdENhbGxTdGFjay5oIgog
I2luY2x1ZGUgIlNjcmlwdENhbGxTdGFja0ZhY3RvcnkuaCIKKyNpbmNsdWRlICJTY3JpcHRQcm9m
aWxlLmgiCiAjaW5jbHVkZSAiU2VyaWFsaXplZFNjcmlwdFZhbHVlLmgiCiAjaW5jbHVkZSAiVGVz
dE9iai5oIgogI2luY2x1ZGUgImJvb2wuaCIKLSNpbmNsdWRlICJzZXF1ZW5jZTxTY3JpcHRQcm9m
aWxlPi5oIgogI2luY2x1ZGUgPHJ1bnRpbWUvRXJyb3IuaD4KKyNpbmNsdWRlIDxydW50aW1lL0pT
QXJyYXkuaD4KICNpbmNsdWRlIDxydW50aW1lL0pTU3RyaW5nLmg+CiAjaW5jbHVkZSA8d3RmL0dl
dFB0ci5oPgogCkBAIC00NzcsNyArNDc4LDcgQEAgSlNWYWx1ZSBqc1Rlc3RPYmpTZXF1ZW5jZUF0
dHIoRXhlY1N0YXRlKgogICAgIEpTVGVzdE9iaiogY2FzdGVkVGhpcyA9IHN0YXRpY19jYXN0PEpT
VGVzdE9iaio+KGFzT2JqZWN0KHNsb3RCYXNlKSk7CiAgICAgVU5VU0VEX1BBUkFNKGV4ZWMpOwog
ICAgIFRlc3RPYmoqIGltcGwgPSBzdGF0aWNfY2FzdDxUZXN0T2JqKj4oY2FzdGVkVGhpcy0+aW1w
bCgpKTsKLSAgICBKU1ZhbHVlIHJlc3VsdCA9IHRvSlMoZXhlYywgY2FzdGVkVGhpcy0+Z2xvYmFs
T2JqZWN0KCksIFdURjo6Z2V0UHRyKGltcGwtPnNlcXVlbmNlQXR0cigpKSk7CisgICAgSlNWYWx1
ZSByZXN1bHQgPSBqc0FycmF5KGV4ZWMsIGNhc3RlZFRoaXMtPmdsb2JhbE9iamVjdCgpLCBpbXBs
LT5zZXF1ZW5jZUF0dHIoKSk7CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIApAQCAtOTY1LDcgKzk2
Niw3IEBAIHZvaWQgc2V0SlNUZXN0T2JqU2VxdWVuY2VBdHRyKEV4ZWNTdGF0ZSoKIHsKICAgICBK
U1Rlc3RPYmoqIGNhc3RlZFRoaXMgPSBzdGF0aWNfY2FzdDxKU1Rlc3RPYmoqPih0aGlzT2JqZWN0
KTsKICAgICBUZXN0T2JqKiBpbXBsID0gc3RhdGljX2Nhc3Q8VGVzdE9iaio+KGNhc3RlZFRoaXMt
PmltcGwoKSk7Ci0gICAgaW1wbC0+c2V0U2VxdWVuY2VBdHRyKHRvc2VxdWVuY2U8U2NyaXB0UHJv
ZmlsZT4odmFsdWUpKTsKKyAgICBpbXBsLT5zZXRTZXF1ZW5jZUF0dHIoanNWYWx1ZVRvTmF0aXZl
KGV4ZWMsIHZhbHVlKSk7CiB9CiAKIApAQCAtMTQyMyw3ICsxNDI0LDcgQEAgRW5jb2RlZEpTVmFs
dWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcgogICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24o
KSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKIAotICAg
IEpTQzo6SlNWYWx1ZSByZXN1bHQgPSB0b0pTKGV4ZWMsIGNhc3RlZFRoaXMtPmdsb2JhbE9iamVj
dCgpLCBXVEY6OmdldFB0cihpbXBsLT5tZXRob2RSZXR1cm5pbmdTZXF1ZW5jZShpbnRBcmcpKSk7
CisgICAgSlNDOjpKU1ZhbHVlIHJlc3VsdCA9IGpzQXJyYXkoZXhlYywgY2FzdGVkVGhpcy0+Z2xv
YmFsT2JqZWN0KCksIGltcGwtPm1ldGhvZFJldHVybmluZ1NlcXVlbmNlKGludEFyZykpOwogICAg
IHJldHVybiBKU1ZhbHVlOjplbmNvZGUocmVzdWx0KTsKIH0KIApJbmRleDogU291cmNlL1dlYkNv
cmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Y4L1Y4VGVzdE9iai5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Y4L1Y4VGVzdE9iai5jcHAJKHJl
dmlzaW9uIDExMTE1MykKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9W
OC9WOFRlc3RPYmouY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMiw2ICszMiw3IEBACiAjaW5jbHVk
ZSAiU2NyaXB0QXJndW1lbnRzLmgiCiAjaW5jbHVkZSAiU2NyaXB0Q2FsbFN0YWNrLmgiCiAjaW5j
bHVkZSAiU2NyaXB0Q2FsbFN0YWNrRmFjdG9yeS5oIgorI2luY2x1ZGUgIlNjcmlwdFByb2ZpbGUu
aCIKICNpbmNsdWRlICJTZXJpYWxpemVkU2NyaXB0VmFsdWUuaCIKICNpbmNsdWRlICJWOEJpbmRp
bmcuaCIKICNpbmNsdWRlICJWOEJpbmRpbmdNYWNyb3MuaCIKQEAgLTQyLDYgKzQzLDcgQEAKICNp
bmNsdWRlICJWOFByb3h5LmgiCiAjaW5jbHVkZSAiVjhTVkdEb2N1bWVudC5oIgogI2luY2x1ZGUg
IlY4U1ZHUG9pbnQuaCIKKyNpbmNsdWRlICJWOFNjcmlwdFByb2ZpbGUuaCIKICNpbmNsdWRlICJW
OFRlc3RDYWxsYmFjay5oIgogI2luY2x1ZGUgIlY4YS5oIgogI2luY2x1ZGUgIlY4YW55LmgiCkBA
IC01Miw3ICs1NCw2IEBACiAjaW5jbHVkZSAiVjhlLmgiCiAjaW5jbHVkZSAiVjhpbnQuaCIKICNp
bmNsdWRlICJWOHNlcXVlbmNlLmgiCi0jaW5jbHVkZSAiVjhzZXF1ZW5jZTxTY3JpcHRQcm9maWxl
Pi5oIgogI2luY2x1ZGUgPHd0Zi9HZXRQdHIuaD4KICNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5o
PgogI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KQEAgLTIyMywxNCArMjI0LDE0IEBAIHN0YXRpYyB2
ODo6SGFuZGxlPHY4OjpWYWx1ZT4gc2VxdWVuY2VBdHQKIHsKICAgICBJTkNfU1RBVFMoIkRPTS5U
ZXN0T2JqLnNlcXVlbmNlQXR0ci5fZ2V0Iik7CiAgICAgVGVzdE9iaiogaW1wID0gVjhUZXN0T2Jq
Ojp0b05hdGl2ZShpbmZvLkhvbGRlcigpKTsKLSAgICByZXR1cm4gdG9WOChpbXAtPnNlcXVlbmNl
QXR0cigpKTsKKyAgICByZXR1cm4gdjhBcnJheShpbXAtPnNlcXVlbmNlQXR0cigpKTsKIH0KIAog
c3RhdGljIHZvaWQgc2VxdWVuY2VBdHRyQXR0clNldHRlcih2ODo6TG9jYWw8djg6OlN0cmluZz4g
bmFtZSwgdjg6OkxvY2FsPHY4OjpWYWx1ZT4gdmFsdWUsIGNvbnN0IHY4OjpBY2Nlc3NvckluZm8m
IGluZm8pCiB7CiAgICAgSU5DX1NUQVRTKCJET00uVGVzdE9iai5zZXF1ZW5jZUF0dHIuX3NldCIp
OwogICAgIFRlc3RPYmoqIGltcCA9IFY4VGVzdE9iajo6dG9OYXRpdmUoaW5mby5Ib2xkZXIoKSk7
Ci0gICAgc2VxdWVuY2U8U2NyaXB0UHJvZmlsZT4qIHYgPSBWOHNlcXVlbmNlPFNjcmlwdFByb2Zp
bGU+OjpIYXNJbnN0YW5jZSh2YWx1ZSkgPyBWOHNlcXVlbmNlPFNjcmlwdFByb2ZpbGU+Ojp0b05h
dGl2ZSh2ODo6SGFuZGxlPHY4OjpPYmplY3Q+OjpDYXN0KHZhbHVlKSkgOiAwOworICAgIFNjcmlw
dFByb2ZpbGUgdiA9IHY4VmFsdWVUb05hdGl2ZSh2YWx1ZSk7CiAgICAgaW1wLT5zZXRTZXF1ZW5j
ZUF0dHIoV1RGOjpnZXRQdHIodikpOwogICAgIHJldHVybjsKIH0KQEAgLTEwNzEsNyArMTA3Miw3
IEBAIHN0YXRpYyB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gbWV0aG9kUmV0dXIKICAgICAgICAgcmV0
dXJuIHRocm93RXJyb3IoIk5vdCBlbm91Z2ggYXJndW1lbnRzIiwgVjhQcm94eTo6VHlwZUVycm9y
KTsKICAgICBUZXN0T2JqKiBpbXAgPSBWOFRlc3RPYmo6OnRvTmF0aXZlKGFyZ3MuSG9sZGVyKCkp
OwogICAgIEVYQ0VQVElPTl9CTE9DSyhpbnQsIGludEFyZywgdG9JbnQzMihNQVlCRV9NSVNTSU5H
X1BBUkFNRVRFUihhcmdzLCAwLCBEZWZhdWx0SXNVbmRlZmluZWQpKSk7Ci0gICAgcmV0dXJuIHRv
VjgoaW1wLT5tZXRob2RSZXR1cm5pbmdTZXF1ZW5jZShpbnRBcmcpKTsKKyAgICByZXR1cm4gdjhB
cnJheShpbXAtPm1ldGhvZFJldHVybmluZ1NlcXVlbmNlKGludEFyZykpOwogfQogCiBzdGF0aWMg
djg6OkhhbmRsZTx2ODo6VmFsdWU+IG1ldGhvZFRoYXRSZXF1aXJlc0FsbEFyZ3NBbmRUaHJvd3ND
YWxsYmFjayhjb25zdCB2ODo6QXJndW1lbnRzJiBhcmdzKQpJbmRleDogU291cmNlL1dlYkNvcmUv
YmluZGluZ3MvdjgvVjhCaW5kaW5nLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3MvdjgvVjhCaW5kaW5nLmgJKHJldmlzaW9uIDExMTE1MykKKysrIFNvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL3Y4L1Y4QmluZGluZy5oCSh3b3JraW5nIGNvcHkpCkBAIC0yODYsNiArMjg2LDM1
IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgcmV0dXJuIHY4RXh0ZXJuYWxTdHJpbmco
c3RyaW5nKTsKICAgICB9CiAKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBJdGVyYWJsZT4KKyAgICB2
ODo6SGFuZGxlPHY4OjpWYWx1ZT4gdjhBcnJheShjb25zdCBJdGVyYWJsZSYgdmVjdG9yKQorICAg
IHsKKyAgICAgICAgdjg6OkxvY2FsPHY4OjpBcnJheT4gcmVzdWx0ID0gdjg6OkFycmF5OjpOZXco
dmVjdG9yLnNpemUoKSk7CisgICAgICAgIGludCBpbmRleCA9IDA7CisgICAgICAgIHR5cGVuYW1l
IEl0ZXJhYmxlOjpjb25zdF9pdGVyYXRvciBlbmQgPSB2ZWN0b3IuZW5kKCk7CisgICAgICAgIGZv
ciAodHlwZW5hbWUgSXRlcmFibGU6OmNvbnN0X2l0ZXJhdG9yIGl0ZXIgPSB2ZWN0b3IuYmVnaW4o
KTsgaXRlciAhPSBlbmQ7ICsraXRlcikKKyAgICAgICAgICAgIHJlc3VsdC0+U2V0KHY4OjpJbnRl
Z2VyOjpOZXcoaW5kZXgrKyksIHRvVjgoV1RGOjpnZXRQdHIoKml0ZXIpKSk7CisgICAgICAgIHJl
dHVybiByZXN1bHQ7CisgICAgfQorCisgICAgdGVtcGxhdGUgPGNsYXNzIFQ+CisgICAgVmVjdG9y
PFQ+IHY4VmFsdWVUb05hdGl2ZSh2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gdmFsdWUpCisgICAgewor
ICAgICAgICB2ODo6TG9jYWw8djg6OlZhbHVlPiB2OFZhbHVlKHY4OjpMb2NhbDx2ODo6VmFsdWU+
OjpOZXcodmFsdWUpKTsKKyAgICAgICAgaWYgKCF2OFZhbHVlLT5Jc0FycmF5KCkpCisgICAgICAg
ICAgICByZXR1cm4gVmVjdG9yPFQ+KCk7CisKKyAgICAgICAgVmVjdG9yPFQ+IHJlc3VsdDsKKyAg
ICAgICAgdjg6OkxvY2FsPHY4OjpBcnJheT4gYXJyYXkgPSB2ODo6TG9jYWw8djg6OkFycmF5Pjo6
Q2FzdCh2OFZhbHVlKTsKKyAgICAgICAgc2l6ZV90IGxlbmd0aCA9IGFycmF5LT5MZW5ndGgoKTsK
KworICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGxlbmd0aDsgKytpKSB7CisgICAgICAg
ICAgICBTdHJpbmcgaW5kZXhlZFZhbHVlID0gdjhTdHJpbmdUb1dlYkNvcmVTdHJpbmcoYXJyYXkt
PkdldChpKSk7CisgICAgICAgICAgICByZXN1bHQuYXBwZW5kKGluZGV4ZWRWYWx1ZSk7CisgICAg
ICAgIH0KKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9CisKICAgICAvLyBFbmFibGVzIGNh
Y2hpbmcgdjggd3JhcHBlcnMgY3JlYXRlZCBmb3IgV1RGOjpTdHJpbmdJbXBsLiAgQ3VycmVudGx5
IHRoaXMgY2FjaGUgcmVxdWlyZXMKICAgICAvLyBhbGwgdGhlIGNhbGxzIChib3RoIHRvIGNvbnZl
cnQgV1RGOjpTdHJpbmcgdG8gdjg6OlN0cmluZyBhbmQgdG8gR0MgdGhlIGhhbmRsZSkKICAgICAv
LyB0byBiZSBwZXJmb3JtZWQgb24gdGhlIG1haW4gdGhyZWFkLgpJbmRleDogU291cmNlL1dlYkNv
cmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4Q29uc29sZUN1c3RvbS5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4Q29uc29sZUN1c3RvbS5jcHAJKHJl
dmlzaW9uIDExMTE1MykKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOENv
bnNvbGVDdXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNiwzMiArMzYsMTMgQEAKICNpbmNs
dWRlICJTY3JpcHRBcmd1bWVudHMuaCIKICNpbmNsdWRlICJTY3JpcHRDYWxsU3RhY2suaCIKICNp
bmNsdWRlICJTY3JpcHRDYWxsU3RhY2tGYWN0b3J5LmgiCi0jaW5jbHVkZSAiU2NyaXB0UHJvZmls
ZS5oIgogI2luY2x1ZGUgIlY4QmluZGluZy5oIgogI2luY2x1ZGUgIlY4QmluZGluZ01hY3Jvcy5o
IgogI2luY2x1ZGUgIlY4TWVtb3J5SW5mby5oIgogI2luY2x1ZGUgIlY4UHJveHkuaCIKLSNpbmNs
dWRlICJWOFNjcmlwdFByb2ZpbGUuaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi10eXBlZGVm
IFZlY3RvcjxSZWZQdHI8U2NyaXB0UHJvZmlsZT4gPiBQcm9maWxlc0FycmF5OwotCi0jaWYgRU5B
QkxFKEpBVkFTQ1JJUFRfREVCVUdHRVIpCi12ODo6SGFuZGxlPHY4OjpWYWx1ZT4gVjhDb25zb2xl
Ojpwcm9maWxlc0FjY2Vzc29yR2V0dGVyKHY4OjpMb2NhbDx2ODo6U3RyaW5nPiBuYW1lLCBjb25z
dCB2ODo6QWNjZXNzb3JJbmZvJiBpbmZvKQotewotICAgIElOQ19TVEFUUygiRE9NLkNvbnNvbGUu
cHJvZmlsZXNBY2Nlc3NvckdldHRlciIpOwotICAgIENvbnNvbGUqIGltcCA9IFY4Q29uc29sZTo6
dG9OYXRpdmUoaW5mby5Ib2xkZXIoKSk7Ci0gICAgY29uc3QgUHJvZmlsZXNBcnJheSYgcHJvZmls
ZXMgPSBpbXAtPnByb2ZpbGVzKCk7Ci0gICAgdjg6OkhhbmRsZTx2ODo6QXJyYXk+IHJlc3VsdCA9
IHY4OjpBcnJheTo6TmV3KHByb2ZpbGVzLnNpemUoKSk7Ci0gICAgaW50IGluZGV4ID0gMDsKLSAg
ICBQcm9maWxlc0FycmF5Ojpjb25zdF9pdGVyYXRvciBlbmQgPSBwcm9maWxlcy5lbmQoKTsKLSAg
ICBmb3IgKFByb2ZpbGVzQXJyYXk6OmNvbnN0X2l0ZXJhdG9yIGl0ZXIgPSBwcm9maWxlcy5iZWdp
bigpOyBpdGVyICE9IGVuZDsgKytpdGVyKQotICAgICAgICByZXN1bHQtPlNldCh2ODo6SW50ZWdl
cjo6TmV3KGluZGV4KyspLCB0b1Y4KGl0ZXItPmdldCgpKSk7Ci0gICAgcmV0dXJuIHJlc3VsdDsK
LX0KLSNlbmRpZgotCiB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gVjhDb25zb2xlOjp0cmFjZUNhbGxi
YWNrKGNvbnN0IHY4OjpBcmd1bWVudHMmIGFyZ3MpCiB7CiAgICAgSU5DX1NUQVRTKCJET00uQ29u
c29sZS50cmFjZUNhbGxiYWNrIik7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wYWdlL0NvbnNvbGUu
aWRsCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BhZ2UvQ29uc29sZS5pZGwJKHJldmlz
aW9uIDExMTE1MykKKysrIFNvdXJjZS9XZWJDb3JlL3BhZ2UvQ29uc29sZS5pZGwJKHdvcmtpbmcg
Y29weSkKQEAgLTQ2LDcgKzQ2LDcgQEAgbW9kdWxlIHdpbmRvdyB7CiAgICAgICAgIFtDYWxsV2l0
aD1TY3JpcHRBcmd1bWVudHN8Q2FsbFN0YWNrXSB2b2lkIG1hcmtUaW1lbGluZSgpOwogCiAjaWYg
ZGVmaW5lZChFTkFCTEVfSkFWQVNDUklQVF9ERUJVR0dFUikgJiYgRU5BQkxFX0pBVkFTQ1JJUFRf
REVCVUdHRVIKLSAgICAgICAgcmVhZG9ubHkgYXR0cmlidXRlIFtDdXN0b21HZXR0ZXJdIEFycmF5
IHByb2ZpbGVzOworICAgICAgICByZWFkb25seSBhdHRyaWJ1dGUgc2VxdWVuY2U8U2NyaXB0UHJv
ZmlsZT4gcHJvZmlsZXM7CiAgICAgICAgIFtDdXN0b21dIHZvaWQgcHJvZmlsZShpbiBET01TdHJp
bmcgdGl0bGUpOwogICAgICAgICBbQ3VzdG9tXSB2b2lkIHByb2ZpbGVFbmQoaW4gRE9NU3RyaW5n
IHRpdGxlKTsKICNlbmRpZgo=
</data>
<flag name="review"
          id="136523"
          type_id="1"
          status="-"
          setter="haraken"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>132792</attachid>
            <date>2012-03-20 04:14:42 -0700</date>
            <delta_ts>2012-03-20 06:46:59 -0700</delta_ts>
            <desc>another_attempt</desc>
            <filename>wip_005.diff</filename>
            <type>text/plain</type>
            <size>23885</size>
            <attacher name="Vineet Chaudhary (vineetc)">code.vineet</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDExMTM3OCkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDUyIEBACisyMDEyLTAzLTIwICBWaW5lZXQg
Q2hhdWRoYXJ5ICA8cmdmNzQ4QG1vdG9yb2xhLmNvbT4KKworICAgICAgICBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9ODA2OTYKKyAgICAgICAgUmVtb3ZlIGN1c3RvbSBi
aW5kaW5ncyBmb3IgYXR0cmlidXRlIHR5cGUgQXJyYXkuCisKKyAgICAgICAgUmV2aWV3ZWQgYnkg
Tk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgTm8gbmV3IHRlc3RzLgorCisgICAgICAgICogYmlu
ZGluZ3MvanMvSlNDb25zb2xlQ3VzdG9tLmNwcDogUmVtb3ZlZCBjdXN0b20gZnVuY3Rpb24uCisg
ICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU0RPTUJpbmRpbmcuaDog
QWRkZWQgdGVtcGxhdGUganNBcnJheSBhbmQgdG9KU0FycmF5LgorICAgICAgICAoV2ViQ29yZSk6
CisgICAgICAgIChXZWJDb3JlOjpqc0FycmF5KToKKyAgICAgICAgKFdlYkNvcmU6OnRvSlNBcnJh
eSk6CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy9Db2RlR2VuZXJhdG9yLnBtOiBNb2RpZmll
ZCBjb2RlZ2VuZXJhdG9ycyB0byBnZW5lcmF0ZSBhcHByb3ByaWF0ZSBjb2RlLgorICAgICAgICAo
R2V0QXJyYXlUeXBlKTogQWRkZWQgR2V0QXJyYXlUeXBlIHRvIGdldCByZXR1cm4gdHlwZSBvZiBh
dHRyaWJ1dGUgaW50ZXJmYWNlLgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvQ29kZUdlbmVy
YXRvckdPYmplY3QucG06IE1vZGlmaWVkIGNvZGVnZW5lcmF0b3JzIHRvIGdlbmVyYXRlIGFwcHJv
cHJpYXRlIGNvZGUuCisgICAgICAgIChTa2lwQXR0cmlidXRlKToKKyAgICAgICAgKiBiaW5kaW5n
cy9zY3JpcHRzL0NvZGVHZW5lcmF0b3JKUy5wbTogTW9kaWZpZWQgY29kZWdlbmVyYXRvcnMgdG8g
Z2VuZXJhdGUgYXBwcm9wcmlhdGUgY29kZS4KKyAgICAgICAgKEFkZEluY2x1ZGVzRm9yVHlwZSk6
CisgICAgICAgIChKU1ZhbHVlVG9OYXRpdmUpOgorICAgICAgICAoTmF0aXZlVG9KU1ZhbHVlKToK
KyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0b3JWOC5wbTogTW9kaWZpZWQg
Y29kZWdlbmVyYXRvcnMgdG8gZ2VuZXJhdGUgYXBwcm9wcmlhdGUgY29kZS4KKyAgICAgICAgKEdl
bmVyYXRlTm9ybWFsQXR0ckdldHRlcik6CisgICAgICAgIChHZW5lcmF0ZU5vcm1hbEF0dHJTZXR0
ZXIpOgorICAgICAgICAoSlNWYWx1ZVRvTmF0aXZlKToKKyAgICAgICAgKE5hdGl2ZVRvSlNWYWx1
ZSk6CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0dPYmplY3QvV2ViS2l0RE9NVGVz
dE9iai5jcHA6IFVwZGF0ZWQgcmVzdWx0cyBmcm9tIHJ1bm5pbmcgYmluZGluZyB0ZXN0cy4KKyAg
ICAgICAgKHdlYmtpdF9kb21fdGVzdF9vYmpfZ2V0X3Byb3BlcnR5KToKKyAgICAgICAgKHdlYmtp
dF9kb21fdGVzdF9vYmpfY2xhc3NfaW5pdCk6CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90
ZXN0L0dPYmplY3QvV2ViS2l0RE9NVGVzdE9iai5oOiBEaXR0by4KKyAgICAgICAgKiBiaW5kaW5n
cy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0T2JqLmNwcDogRGl0dG8uCisgICAgICAgIChXZWJDb3Jl
Ojpqc1Rlc3RPYmpTZXF1ZW5jZUF0dHIpOgorICAgICAgICAoV2ViQ29yZTo6c2V0SlNUZXN0T2Jq
U2VxdWVuY2VBdHRyKToKKyAgICAgICAgKFdlYkNvcmU6OmpzVGVzdE9ialByb3RvdHlwZUZ1bmN0
aW9uTWV0aG9kUmV0dXJuaW5nU2VxdWVuY2UpOgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMv
dGVzdC9WOC9WOFRlc3RPYmouY3BwOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OlRlc3RPYmpJ
bnRlcm5hbDo6c2VxdWVuY2VBdHRyQXR0ckdldHRlcik6CisgICAgICAgIChXZWJDb3JlOjpUZXN0
T2JqSW50ZXJuYWw6OnNlcXVlbmNlQXR0ckF0dHJTZXR0ZXIpOgorICAgICAgICAoV2ViQ29yZTo6
VGVzdE9iakludGVybmFsOjptZXRob2RSZXR1cm5pbmdTZXF1ZW5jZUNhbGxiYWNrKToKKyAgICAg
ICAgKiBiaW5kaW5ncy92OC9WOEJpbmRpbmcuaDogQWRkZWQgdGVtcGxhdGUgdjhBcnJheSBhbmQg
dG9WOEFycmF5LgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChXZWJDb3JlOjp2OEFycmF5
KToKKyAgICAgICAgKFdlYkNvcmU6OnRvVjhBcnJheSk6CisgICAgICAgICogYmluZGluZ3Mvdjgv
Y3VzdG9tL1Y4Q29uc29sZUN1c3RvbS5jcHA6IFJlbW92ZWQgY3VzdG9tIGZ1bmN0aW9uLgorICAg
ICAgICAoV2ViQ29yZSk6CisgICAgICAgICogcGFnZS9Db25zb2xlLmlkbDogUmVwbGFjZWQgYXR0
cmlidXRlIHR5cGUgQXJyYXkgdG8gc2VxdWVuY2U8U3JpcHRQcm9maWxlPiB0byByZW1vdmUKKyAg
ICAgICAgICBjdXN0b20gYmluZGluZ3MuCisKIDIwMTItMDMtMjAgIE1paG5lYSBPdmlkZW5pZSAg
PG1paG5lYUBhZG9iZS5jb20+CiAKICAgICAgICAgW0NTU1JlZ2lvbnNdSW1wbGVtZW50IE5hbWVk
Rmxvdzo6Z2V0UmVnaW9uc0J5Q29udGVudE5vZGUKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL2pzL0pTQ29uc29sZUN1c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
YmluZGluZ3MvanMvSlNDb25zb2xlQ3VzdG9tLmNwcAkocmV2aXNpb24gMTExMTUzKQorKysgU291
cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNDb25zb2xlQ3VzdG9tLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMzAsMzEgKzMwLDE0IEBACiAjaW5jbHVkZSAiSlNDb25zb2xlLmgiCiAKICNpbmNsdWRl
ICJDb25zb2xlLmgiCi0jaW5jbHVkZSAiSlNTY3JpcHRQcm9maWxlLmgiCiAjaW5jbHVkZSAiU2Ny
aXB0Q2FsbFN0YWNrLmgiCiAjaW5jbHVkZSAiU2NyaXB0Q2FsbFN0YWNrRmFjdG9yeS5oIgotI2lu
Y2x1ZGUgIlNjcmlwdFByb2ZpbGUuaCIKLSNpbmNsdWRlIDxydW50aW1lL0pTQXJyYXkuaD4KICNp
bmNsdWRlIDx3dGYvT3duUHRyLmg+CiAKIHVzaW5nIG5hbWVzcGFjZSBKU0M7CiAKIG5hbWVzcGFj
ZSBXZWJDb3JlIHsKIAotdHlwZWRlZiBWZWN0b3I8UmVmUHRyPFNjcmlwdFByb2ZpbGU+ID4gUHJv
ZmlsZXNBcnJheTsKLQotSlNWYWx1ZSBKU0NvbnNvbGU6OnByb2ZpbGVzKEV4ZWNTdGF0ZSogZXhl
YykgY29uc3QKLXsKLSAgICBjb25zdCBQcm9maWxlc0FycmF5JiBwcm9maWxlcyA9IGltcGwoKS0+
cHJvZmlsZXMoKTsKLSAgICBNYXJrZWRBcmd1bWVudEJ1ZmZlciBsaXN0OwotCi0gICAgUHJvZmls
ZXNBcnJheTo6Y29uc3RfaXRlcmF0b3IgZW5kID0gcHJvZmlsZXMuZW5kKCk7Ci0gICAgZm9yIChQ
cm9maWxlc0FycmF5Ojpjb25zdF9pdGVyYXRvciBpdGVyID0gcHJvZmlsZXMuYmVnaW4oKTsgaXRl
ciAhPSBlbmQ7ICsraXRlcikKLSAgICAgICAgbGlzdC5hcHBlbmQodG9KUyhleGVjLCBnbG9iYWxP
YmplY3QoKSwgaXRlci0+Z2V0KCkpKTsKLQotICAgIHJldHVybiBjb25zdHJ1Y3RBcnJheShleGVj
LCBnbG9iYWxPYmplY3QoKSwgbGlzdCk7Ci19Ci0KIEpTVmFsdWUgSlNDb25zb2xlOjpwcm9maWxl
KEV4ZWNTdGF0ZSogZXhlYykKIHsKICAgICBSZWZQdHI8U2NyaXB0Q2FsbFN0YWNrPiBjYWxsU3Rh
Y2soY3JlYXRlU2NyaXB0Q2FsbFN0YWNrKGV4ZWMsIDEpKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL2pzL0pTRE9NQmluZGluZy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL2pzL0pTRE9NQmluZGluZy5oCShyZXZpc2lvbiAxMTExNTMpCisrKyBTb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTUJpbmRpbmcuaAkod29ya2luZyBjb3B5KQpAQCAtMzUs
NiArMzUsNyBAQAogI2luY2x1ZGUgIlN0eWxlZEVsZW1lbnQuaCIKICNpbmNsdWRlIDxoZWFwL1dl
YWsuaD4KICNpbmNsdWRlIDxydW50aW1lL0Z1bmN0aW9uUHJvdG90eXBlLmg+CisjaW5jbHVkZSA8
cnVudGltZS9KU0FycmF5Lmg+CiAjaW5jbHVkZSA8cnVudGltZS9Mb29rdXAuaD4KICNpbmNsdWRl
IDxydW50aW1lL09iamVjdFByb3RvdHlwZS5oPgogI2luY2x1ZGUgPHd0Zi9Gb3J3YXJkLmg+CkBA
IC0yNzgsNiArMjc5LDMwIEBAIGVudW0gUGFyYW1ldGVyRGVmYXVsdFBvbGljeSB7CiAgICAgICAg
IHJldHVybiB0b0pTKGV4ZWMsIGdsb2JhbE9iamVjdCwgcHRyLmdldCgpKTsKICAgICB9CiAKKyAg
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBJdGVyYWJsZT4KKyAgICBKU0M6OkpTVmFsdWUganNBcnJheShK
U0M6OkV4ZWNTdGF0ZSogZXhlYywgSlNET01HbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgY29u
c3QgSXRlcmFibGUmIHZlY3RvcikKKyAgICB7CisgICAgICAgIEpTQzo6TWFya2VkQXJndW1lbnRC
dWZmZXIgbGlzdDsKKyAgICAgICAgdHlwZW5hbWUgSXRlcmFibGU6OmNvbnN0X2l0ZXJhdG9yIGVu
ZCA9IHZlY3Rvci5lbmQoKTsKKworICAgICAgICBmb3IgKHR5cGVuYW1lIEl0ZXJhYmxlOjpjb25z
dF9pdGVyYXRvciBpdGVyID0gdmVjdG9yLmJlZ2luKCk7IGl0ZXIgIT0gZW5kOyArK2l0ZXIpCisg
ICAgICAgICAgICBsaXN0LmFwcGVuZCh0b0pTKGV4ZWMsIGdsb2JhbE9iamVjdCwgV1RGOjpnZXRQ
dHIoKml0ZXIpKSk7CisKKyAgICAgICAgcmV0dXJuIEpTQzo6Y29uc3RydWN0QXJyYXkoZXhlYywg
bGlzdCk7CisgICAgfQorCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgSXRlcmFibGU+CisgICAgSXRl
cmFibGUgdG9KU0FycmF5KEpTQzo6RXhlY1N0YXRlKiBleGVjLCBKU0M6OkpTVmFsdWUgdmFsdWUp
CisgICAgeworICAgICAgICBJdGVyYWJsZSByZXN1bHQ7CisgICAgICAgIEpTQzo6SlNBcnJheSog
YXJyYXkgPSBhc0FycmF5KHZhbHVlKTsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8
IGFycmF5LT5sZW5ndGgoKTsgKytpKSB7CisgICAgICAgICAgICBTdHJpbmcgaW5kZXhlZFZhbHVl
ID0gdXN0cmluZ1RvU3RyaW5nKGFycmF5LT5nZXRJbmRleChpKS50b1N0cmluZyhleGVjKS0+dmFs
dWUoZXhlYykpOworICAgICAgICAgICAgcmVzdWx0LmFwcGVuZChpbmRleGVkVmFsdWUpOworICAg
ICAgICB9CisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfQorCiAgICAgLy8gVmFsaWRhdGVz
IHRoYXQgdGhlIHBhc3NlZCBvYmplY3QgaXMgYSBzZXF1ZW5jZSB0eXBlIHBlciBzZWN0aW9uIDQu
MS4xMyBvZiB0aGUgV2ViSURMIHNwZWMuCiAgICAgSlNDOjpKU09iamVjdCogdG9KU1NlcXVlbmNl
KEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpKU1ZhbHVlLCB1bnNpZ25lZCYpOwogCkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0b3IucG0KPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy9Db2RlR2VuZXJhdG9yLnBtCShyZXZp
c2lvbiAxMTExNTMpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5l
cmF0b3IucG0JKHdvcmtpbmcgY29weSkKQEAgLTQ0NSw2ICs0NDUsMTUgQEAgc3ViIElzU1ZHQW5p
bWF0ZWRUeXBlCiAgICAgcmV0dXJuIDA7CiB9CiAKK3N1YiBHZXRBcnJheVR5cGUKK3sKKyAgICBt
eSAkb2JqZWN0ID0gc2hpZnQ7CisgICAgbXkgJHR5cGUgPSBzaGlmdDsKKworICAgIHJldHVybiAk
MSBpZiAkdHlwZSA9fiAvXnNlcXVlbmNlPChbXHdcZF9dKyk+LiovOworICAgIHJldHVybiAiIjsK
K30KKwogIyBVcHBlcmNhc2UgdGhlIGZpcnN0IGxldHRlciB3aGlsZSByZXNwZWN0aW5nIFdlYktp
dCBzdHlsZSBndWlkZWxpbmVzLgogIyBFLmcuLCB4bWxFbmNvZGluZyBiZWNvbWVzIFhNTEVuY29k
aW5nLCBidXQgeG1sbGxhbmcgYmVjb21lcyBYbWxsYW5nLgogc3ViIFdLX3VjZmlyc3QKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvQ29kZUdlbmVyYXRvckdPYmplY3QucG0K
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy9Db2RlR2VuZXJh
dG9yR09iamVjdC5wbQkocmV2aXNpb24gMTExMTUzKQorKysgU291cmNlL1dlYkNvcmUvYmluZGlu
Z3Mvc2NyaXB0cy9Db2RlR2VuZXJhdG9yR09iamVjdC5wbQkod29ya2luZyBjb3B5KQpAQCAtMTY0
LDYgKzE2NCwxMCBAQCBzdWIgU2tpcEF0dHJpYnV0ZSB7CiAgICAgICAgIHJldHVybiAxOwogICAg
IH0KIAorICAgIGlmICgkY29kZUdlbmVyYXRvci0+R2V0QXJyYXlUeXBlKCRwcm9wVHlwZSkpIHsK
KyAgICAgICAgcmV0dXJuIDE7CisgICAgfQorCiAgICAgIyBUaGlzIGlzIGZvciBET01XaW5kb3cu
aWRsIGxvY2F0aW9uIGF0dHJpYnV0ZQogICAgIGlmICgkYXR0cmlidXRlLT5zaWduYXR1cmUtPm5h
bWUgZXEgImxvY2F0aW9uIikgewogICAgICAgICByZXR1cm4gMTsKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL3NjcmlwdHMvQ29kZUdlbmVyYXRvckpTLnBtCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvQ29kZUdlbmVyYXRvckpTLnBtCShyZXZpc2lv
biAxMTExNTMpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0
b3JKUy5wbQkod29ya2luZyBjb3B5KQpAQCAtMjY2LDYgKzI2Niw3IEBAIHN1YiBBZGRJbmNsdWRl
c0ZvclR5cGUKICAgICAgICAgJGluY2x1ZGVzUmVmLT57IkpTJHt0eXBlfS5oIn0gPSAxOwogICAg
IH0gZWxzaWYgKElzVHlwZWRBcnJheVR5cGUoJHR5cGUpKSB7CiAgICAgICAgICRpbmNsdWRlc1Jl
Zi0+eyI8d3RmLyR7dHlwZX0uaD4ifSA9IDE7CisgICAgfSBlbHNpZiAoJGNvZGVHZW5lcmF0b3It
PkdldEFycmF5VHlwZSgkdHlwZSkpIHsKICAgICB9IGVsc2UgewogICAgICAgICAjIGRlZmF1bHQs
IGluY2x1ZGUgdGhlIHNhbWUgbmFtZWQgZmlsZQogICAgICAgICAkaW5jbHVkZXNSZWYtPnsiJHt0
eXBlfS5oIn0gPSAxOwpAQCAtMjk0NSw2ICsyOTQ2LDEwIEBAIHN1YiBKU1ZhbHVlVG9OYXRpdmUK
ICAgICBBZGRUb0ltcGxJbmNsdWRlcygiSlNDdXN0b21Wb2lkQ2FsbGJhY2suaCIsICRjb25kaXRp
b25hbCkgaWYgJHR5cGUgZXEgIlZvaWRDYWxsYmFjayI7CiAgICAgQWRkVG9JbXBsSW5jbHVkZXMo
IkV2ZW50LmgiLCAkY29uZGl0aW9uYWwpIGlmICR0eXBlIGVxICJFdmVudCI7CiAKKyAgICBpZiAo
JGNvZGVHZW5lcmF0b3ItPkdldEFycmF5VHlwZSgkdHlwZSkpIHsKKyAgICAgICAgcmV0dXJuICJ0
b0pTQXJyYXkoZXhlYywgJHZhbHVlKSI7CisgICAgfQorCiAgICAgIyBEZWZhdWx0LCBhc3N1bWUg
YXV0b2dlbmVyYXRlZCB0eXBlIGNvbnZlcnNpb24gcm91dGluZXMKICAgICBBZGRUb0ltcGxJbmNs
dWRlcygiSlMkdHlwZS5oIiwgJGNvbmRpdGlvbmFsKTsKICAgICByZXR1cm4gInRvJHR5cGUoJHZh
bHVlKSI7CkBAIC0zMDA0LDYgKzMwMDksMTQgQEAgc3ViIE5hdGl2ZVRvSlNWYWx1ZQogICAgICAg
ICBBZGRUb0ltcGxJbmNsdWRlcygiTmFtZU5vZGVMaXN0LmgiLCAkY29uZGl0aW9uYWwpOwogICAg
IH0KIAorICAgIG15ICRhdHRyaWJ1dGVUeXBlID0gJGNvZGVHZW5lcmF0b3ItPkdldEFycmF5VHlw
ZSgkdHlwZSk7CisgICAgaWYgKCRhdHRyaWJ1dGVUeXBlKSB7CisgICAgICAgIEFkZFRvSW1wbElu
Y2x1ZGVzKCI8cnVudGltZS9KU0FycmF5Lmg+IiwgJGNvbmRpdGlvbmFsKTsKKyAgICAgICAgQWRk
VG9JbXBsSW5jbHVkZXMoIkpTJGF0dHJpYnV0ZVR5cGUuaCIsICRjb25kaXRpb25hbCk7CisgICAg
ICAgIEFkZFRvSW1wbEluY2x1ZGVzKCIkYXR0cmlidXRlVHlwZS5oIiwgJGNvbmRpdGlvbmFsKTsK
KyAgICAgICAgcmV0dXJuICJqc0FycmF5KGV4ZWMsICR0aGlzVmFsdWUtPmdsb2JhbE9iamVjdCgp
LCAkdmFsdWUpIjsKKyAgICB9CisKICAgICBpZiAoJHR5cGUgZXEgIkRPTU9iamVjdCIpIHsKICAg
ICAgICAgaWYgKCRpbXBsQ2xhc3NOYW1lIGVxICJEb2N1bWVudCIpIHsKICAgICAgICAgICAgIEFk
ZFRvSW1wbEluY2x1ZGVzKCJKU0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRC5oIiwgJGNvbmRpdGlv
bmFsKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvQ29kZUdlbmVyYXRv
clY4LnBtCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvQ29k
ZUdlbmVyYXRvclY4LnBtCShyZXZpc2lvbiAxMTExNTMpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0b3JWOC5wbQkod29ya2luZyBjb3B5KQpAQCAtOTIzLDYg
KzkyMywxOCBAQCBFTkQKICAgICBpZiAoIUlzTm9kZVN1YlR5cGUoJGRhdGFOb2RlKSAmJiAkYXR0
ck5hbWUgbmUgInNlbGYiICYmIChJc1dyYXBwZXJUeXBlKCRyZXR1cm5UeXBlKSAmJiAoJGF0dHJp
YnV0ZS0+dHlwZSA9fiAvXnJlYWRvbmx5LyB8fCAkYXR0cmlidXRlLT5zaWduYXR1cmUtPmV4dGVu
ZGVkQXR0cmlidXRlcy0+eyJSZXBsYWNlYWJsZSJ9KQogICAgICAgICAmJiAkcmV0dXJuVHlwZSBu
ZSAiRXZlbnRUYXJnZXQiICYmICRyZXR1cm5UeXBlIG5lICJTZXJpYWxpemVkU2NyaXB0VmFsdWUi
ICYmICRyZXR1cm5UeXBlIG5lICJET01XaW5kb3ciIAogICAgICAgICAmJiAkcmV0dXJuVHlwZSAh
fiAvU1ZHLyAmJiAkcmV0dXJuVHlwZSAhfiAvSFRNTC8gJiYgIUlzRE9NTm9kZVR5cGUoJHJldHVy
blR5cGUpKSkgeworCisgICAgICAgIG15ICRhdHRyaWJ1dGVUeXBlID0gJGNvZGVHZW5lcmF0b3It
PkdldEFycmF5VHlwZSgkcmV0dXJuVHlwZSk7CisKKyAgICAgICAgaWYgKCRhdHRyaWJ1dGVUeXBl
KSB7CisgICAgICAgICAgICBBZGRUb0ltcGxJbmNsdWRlcygiVjgkYXR0cmlidXRlVHlwZS5oIik7
CisgICAgICAgICAgICBBZGRUb0ltcGxJbmNsdWRlcygiJGF0dHJpYnV0ZVR5cGUuaCIpOworICAg
ICAgICAgICAgcHVzaChAaW1wbENvbnRlbnREZWNscywgIiAgICBjb25zdCBWZWN0b3I8UmVmUHRy
PCRhdHRyaWJ1dGVUeXBlPiA+IHZlY3RvciA9ICR7Z2V0dGVyU3RyaW5nfTtcbiIpOworICAgICAg
ICAgICAgcHVzaChAaW1wbENvbnRlbnREZWNscywgIiAgICByZXR1cm4gdjhBcnJheSh2ZWN0b3Ip
O1xuIik7CisgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudERlY2xzLCAifVxuXG4iKTsKKyAg
ICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCiAgICAgICAgIEFkZEluY2x1ZGVzRm9yVHlw
ZSgkcmV0dXJuVHlwZSk7CiAgICAgICAgICMgQ2hlY2sgZm9yIGEgd3JhcHBlciBpbiB0aGUgd3Jh
cHBlciBjYWNoZS4gSWYgdGhlcmUgaXMgb25lLCB3ZSBrbm93IHRoYXQgYSBoaWRkZW4gcmVmZXJl
bmNlIGhhcyBhbHJlYWR5CiAgICAgICAgICMgYmVlbiBjcmVhdGVkLiBJZiB3ZSBkb24ndCBmaW5k
IGEgd3JhcHBlciwgd2UgY3JlYXRlIGJvdGggYSB3cmFwcGVyIGFuZCBhIGhpZGRlbiByZWZlcmVu
Y2UuCkBAIC0xMDk3LDE2ICsxMTA5LDIwIEBAIEVORAogICAgICAgICB9CiAgICAgfSBlbHNlIHsK
ICAgICAgICAgbXkgJHZhbHVlID0gSlNWYWx1ZVRvTmF0aXZlKCRhdHRyaWJ1dGUtPnNpZ25hdHVy
ZSwgInZhbHVlIik7CisgICAgICAgIG15ICRhcnJheVR5cGUgPSAkY29kZUdlbmVyYXRvci0+R2V0
QXJyYXlUeXBlKCRuYXRpdmVUeXBlKTsKKwogICAgICAgICBpZiAoJG5hdGl2ZVR5cGUgPX4gL15W
OFBhcmFtZXRlci8pIHsKLSAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudERlY2xzLCAiICAgICIg
LiBDb252ZXJ0VG9WOFBhcmFtZXRlcigkYXR0cmlidXRlLT5zaWduYXR1cmUsICRuYXRpdmVUeXBl
LCAidiIsICR2YWx1ZSwgIlZPSUQiKSAuICJcbiIpOworICAgICAgICAgICAgcHVzaChAaW1wbENv
bnRlbnREZWNscywgIiAgICAiIC4gQ29udmVydFRvVjhQYXJhbWV0ZXIoJGF0dHJpYnV0ZS0+c2ln
bmF0dXJlLCAkbmF0aXZlVHlwZSwgInYiLCAkdmFsdWUsICJWT0lEIikgLiAiXG4iKTsKKyAgICAg
ICAgfSBlbHNpZiAoJGFycmF5VHlwZSkgeworICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnRE
ZWNscywgIiAgICBWZWN0b3I8JGFycmF5VHlwZT4gdiA9ICR2YWx1ZTtcbiIpOwogICAgICAgICB9
IGVsc2UgewotICAgICAgICAgIHB1c2goQGltcGxDb250ZW50RGVjbHMsICIgICAgJG5hdGl2ZVR5
cGUgdiA9ICR2YWx1ZTtcbiIpOworICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnREZWNscywg
IiAgICAkbmF0aXZlVHlwZSB2ID0gJHZhbHVlO1xuIik7CiAgICAgICAgIH0KICAgICB9CiAKICAg
ICBteSAkcmVzdWx0ID0gInYiOwogICAgIG15ICRyZXR1cm5UeXBlID0gR2V0VHlwZUZyb21TaWdu
YXR1cmUoJGF0dHJpYnV0ZS0+c2lnbmF0dXJlKTsKLSAgICBpZiAoSXNSZWZQdHJUeXBlKCRyZXR1
cm5UeXBlKSkgeworICAgIGlmIChJc1JlZlB0clR5cGUoJHJldHVyblR5cGUpICYmICEkY29kZUdl
bmVyYXRvci0+R2V0QXJyYXlUeXBlKCRyZXR1cm5UeXBlKSkgewogICAgICAgICAkcmVzdWx0ID0g
IldURjo6Z2V0UHRyKCIgLiAkcmVzdWx0IC4gIikiOwogICAgIH0KIApAQCAtMzU1NCw2ICszNTcw
LDEwIEBAIHN1YiBKU1ZhbHVlVG9OYXRpdmUKICAgICAgICAgcmV0dXJuICJWOERPTVdyYXBwZXI6
OmdldFhQYXRoTlNSZXNvbHZlcigkdmFsdWUpIjsKICAgICB9CiAKKyAgICBpZiAoJGNvZGVHZW5l
cmF0b3ItPkdldEFycmF5VHlwZSgkdHlwZSkpIHsKKyAgICAgICAgcmV0dXJuICJ0b1Y4QXJyYXko
JHZhbHVlKSI7CisgICAgfQorCiAgICAgQWRkSW5jbHVkZXNGb3JUeXBlKCR0eXBlKTsKIAogICAg
IGlmIChJc0RPTU5vZGVUeXBlKCR0eXBlKSkgewpAQCAtMzc2Nyw2ICszNzg3LDEzIEBAIHN1YiBO
YXRpdmVUb0pTVmFsdWUKICAgICAgICAgcmV0dXJuICJ2OFN0cmluZygkdmFsdWUpIjsKICAgICB9
CiAKKyAgICBteSAkYXR0cmlidXRlVHlwZSA9ICRjb2RlR2VuZXJhdG9yLT5HZXRBcnJheVR5cGUo
JHR5cGUpOworICAgIGlmICgkYXR0cmlidXRlVHlwZSkgeworICAgICAgICBBZGRUb0ltcGxJbmNs
dWRlcygiVjgkYXR0cmlidXRlVHlwZS5oIik7CisgICAgICAgIEFkZFRvSW1wbEluY2x1ZGVzKCIk
YXR0cmlidXRlVHlwZS5oIik7CisgICAgICAgIHJldHVybiAidjhBcnJheSgkdmFsdWUpIjsKKyAg
ICB9CisKICAgICBBZGRJbmNsdWRlc0ZvclR5cGUoJHR5cGUpOwogCiAgICAgIyBzcGVjaWFsIGNh
c2UgZm9yIG5vbi1ET00gbm9kZSBpbnRlcmZhY2VzCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9zY3JpcHRzL3Rlc3QvR09iamVjdC9XZWJLaXRET01UZXN0T2JqLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvR09iamVjdC9XZWJLaXRE
T01UZXN0T2JqLmNwcAkocmV2aXNpb24gMTExMTUzKQorKysgU291cmNlL1dlYkNvcmUvYmluZGlu
Z3Mvc2NyaXB0cy90ZXN0L0dPYmplY3QvV2ViS2l0RE9NVGVzdE9iai5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTgxMCwzMiArODEwLDYgQEAgd2Via2l0X2RvbV90ZXN0X29ial9zZXRfdGVzdF9vYmpf
YXR0cihXZQogICAgIGl0ZW0tPnNldFRlc3RPYmpBdHRyKGNvbnZlcnRlZF92YWx1ZSk7CiB9CiAK
LVdlYktpdERPTXNlcXVlbmNlPFNjcmlwdFByb2ZpbGU+Kgotd2Via2l0X2RvbV90ZXN0X29ial9n
ZXRfc2VxdWVuY2VfYXR0cihXZWJLaXRET01UZXN0T2JqKiBzZWxmKQotewotICAgIGdfcmV0dXJu
X3ZhbF9pZl9mYWlsKHNlbGYsIDApOwotICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0
ZSBzdGF0ZTsKLSAgICBXZWJDb3JlOjpUZXN0T2JqICogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxm
KTsKLSAgICBQYXNzUmVmUHRyPFdlYkNvcmU6OnNlcXVlbmNlPFNjcmlwdFByb2ZpbGU+PiBnX3Jl
cyA9IFdURjo6Z2V0UHRyKGl0ZW0tPnNlcXVlbmNlQXR0cigpKTsKLSAgICBXZWJLaXRET01zZXF1
ZW5jZTxTY3JpcHRQcm9maWxlPiogcmVzID0gV2ViS2l0OjpraXQoZ19yZXMuZ2V0KCkpOwotICAg
IHJldHVybiByZXM7Ci19Ci0KLXZvaWQKLXdlYmtpdF9kb21fdGVzdF9vYmpfc2V0X3NlcXVlbmNl
X2F0dHIoV2ViS2l0RE9NVGVzdE9iaiogc2VsZiwgV2ViS2l0RE9Nc2VxdWVuY2U8U2NyaXB0UHJv
ZmlsZT4qIHZhbHVlKQotewotICAgIGdfcmV0dXJuX2lmX2ZhaWwoc2VsZik7Ci0gICAgV2ViQ29y
ZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOwotICAgIFdlYkNvcmU6OlRlc3RPYmogKiBp
dGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOwotICAgIGdfcmV0dXJuX2lmX2ZhaWwodmFsdWUpOwot
ICAgIFdlYkNvcmU6OnNlcXVlbmNlPFNjcmlwdFByb2ZpbGU+ICogY29udmVydGVkX3ZhbHVlID0g
TlVMTDsKLSAgICBpZiAodmFsdWUgIT0gTlVMTCkgewotICAgICAgICBjb252ZXJ0ZWRfdmFsdWUg
PSBXZWJLaXQ6OmNvcmUodmFsdWUpOwotICAgICAgICBnX3JldHVybl9pZl9mYWlsKGNvbnZlcnRl
ZF92YWx1ZSk7Ci0gICAgfQotICAgIGl0ZW0tPnNldFNlcXVlbmNlQXR0cihjb252ZXJ0ZWRfdmFs
dWUpOwotfQotCiBXZWJLaXRET01UZXN0T2JqKgogd2Via2l0X2RvbV90ZXN0X29ial9nZXRfeG1s
X29ial9hdHRyKFdlYktpdERPTVRlc3RPYmoqIHNlbGYpCiB7CkBAIC0xNTk1LDcgKzE1NjksNiBA
QCBlbnVtIHsKICAgICBQUk9QX1VOU0lHTkVEX0xPTkdfTE9OR19BVFRSLAogICAgIFBST1BfU1RS
SU5HX0FUVFIsCiAgICAgUFJPUF9URVNUX09CSl9BVFRSLAotICAgIFBST1BfU0VRVUVOQ0VfQVRU
UiwKICAgICBQUk9QX1hNTF9PQkpfQVRUUiwKICAgICBQUk9QX0NSRUFURSwKICAgICBQUk9QX1JF
RkxFQ1RFRF9TVFJJTkdfQVRUUiwKQEAgLTE4NTUsMTIgKzE4MjgsNiBAQCBzdGF0aWMgdm9pZCB3
ZWJraXRfZG9tX3Rlc3Rfb2JqX2dldF9wcm9wCiAgICAgICAgIGdfdmFsdWVfc2V0X29iamVjdCh2
YWx1ZSwgV2ViS2l0OjpraXQocHRyLmdldCgpKSk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KLSAg
ICBjYXNlIFBST1BfU0VRVUVOQ0VfQVRUUjoKLSAgICB7Ci0gICAgICAgIFJlZlB0cjxXZWJDb3Jl
OjpzZXF1ZW5jZTxTY3JpcHRQcm9maWxlPj4gcHRyID0gY29yZVNlbGYtPnNlcXVlbmNlQXR0cigp
OwotICAgICAgICBnX3ZhbHVlX3NldF9vYmplY3QodmFsdWUsIFdlYktpdDo6a2l0KHB0ci5nZXQo
KSkpOwotICAgICAgICBicmVhazsKLSAgICB9CiAgICAgY2FzZSBQUk9QX1hNTF9PQkpfQVRUUjoK
ICAgICB7CiAgICAgICAgIFJlZlB0cjxXZWJDb3JlOjpUZXN0T2JqPiBwdHIgPSBjb3JlU2VsZi0+
eG1sT2JqQXR0cigpOwpAQCAtMjE1MywxMyArMjEyMCw2IEBAIEdfTUFYVUlOVDY0LCAvKiBtaW4g
Ki8KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgV0VCS0lUX1RZUEVfRE9NX1RFU1RfT0JKLCAvKiBnb2JqZWN0IHR5cGUgKi8KICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgV0VC
S0lUX1BBUkFNX1JFQURXUklURSkpOwogICAgIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVy
dHkoZ29iamVjdENsYXNzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUFJP
UF9TRVFVRU5DRV9BVFRSLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ19w
YXJhbV9zcGVjX29iamVjdCgic2VxdWVuY2UtYXR0ciIsIC8qIG5hbWUgKi8KLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInRlc3Rfb2Jq
X3NlcXVlbmNlLWF0dHIiLCAvKiBzaG9ydCBkZXNjcmlwdGlvbiAqLwotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAicmVhZC13cml0ZSAg
V2ViS2l0RE9Nc2VxdWVuY2U8U2NyaXB0UHJvZmlsZT4qIFRlc3RPYmouc2VxdWVuY2UtYXR0ciIs
IC8qIGxvbmdlciAtIGNvdWxkIGRvIHdpdGggc29tZSBleHRyYSBkb2Mgc3R1ZmYgaGVyZSAqLwot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBXRUJLSVRfVFlQRV9ET01fU0VRVUVOQ0U8U0NSSVBUX1BST0ZJTEU+LCAvKiBnb2JqZWN0IHR5
cGUgKi8KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgV0VCS0lUX1BBUkFNX1JFQURXUklURSkpOwotICAgIGdfb2JqZWN0X2NsYXNzX2lu
c3RhbGxfcHJvcGVydHkoZ29iamVjdENsYXNzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgUFJPUF9YTUxfT0JKX0FUVFIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBnX3BhcmFtX3NwZWNfb2JqZWN0KCJ4bWwtb2JqLWF0dHIiLCAvKiBuYW1lICovCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICJ0ZXN0X29ial94bWwtb2JqLWF0dHIiLCAvKiBzaG9ydCBkZXNjcmlwdGlvbiAqLwpJbmRleDog
U291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0dPYmplY3QvV2ViS2l0RE9NVGVz
dE9iai5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVz
dC9HT2JqZWN0L1dlYktpdERPTVRlc3RPYmouaAkocmV2aXNpb24gMTExMTUzKQorKysgU291cmNl
L1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0dPYmplY3QvV2ViS2l0RE9NVGVzdE9iai5o
CSh3b3JraW5nIGNvcHkpCkBAIC02OTcsMjcgKzY5Nyw2IEBAIFdFQktJVF9BUEkgdm9pZAogd2Vi
a2l0X2RvbV90ZXN0X29ial9zZXRfdGVzdF9vYmpfYXR0cihXZWJLaXRET01UZXN0T2JqKiBzZWxm
LCBXZWJLaXRET01UZXN0T2JqKiB2YWx1ZSk7CiAKIC8qKgotICogd2Via2l0X2RvbV90ZXN0X29i
al9nZXRfc2VxdWVuY2VfYXR0cjoKLSAqIEBzZWxmOiBBICNXZWJLaXRET01UZXN0T2JqCi0gKgot
ICogUmV0dXJuczogKHRyYW5zZmVyIG5vbmUpOgotICoKLSoqLwotV0VCS0lUX0FQSSBXZWJLaXRE
T01zZXF1ZW5jZTxTY3JpcHRQcm9maWxlPioKLXdlYmtpdF9kb21fdGVzdF9vYmpfZ2V0X3NlcXVl
bmNlX2F0dHIoV2ViS2l0RE9NVGVzdE9iaiogc2VsZik7Ci0KLS8qKgotICogd2Via2l0X2RvbV90
ZXN0X29ial9zZXRfc2VxdWVuY2VfYXR0cjoKLSAqIEBzZWxmOiBBICNXZWJLaXRET01UZXN0T2Jq
Ci0gKiBAdmFsdWU6IEEgI1dlYktpdERPTXNlcXVlbmNlPFNjcmlwdFByb2ZpbGU+Ci0gKgotICog
UmV0dXJuczogKHRyYW5zZmVyIG5vbmUpOgotICoKLSoqLwotV0VCS0lUX0FQSSB2b2lkCi13ZWJr
aXRfZG9tX3Rlc3Rfb2JqX3NldF9zZXF1ZW5jZV9hdHRyKFdlYktpdERPTVRlc3RPYmoqIHNlbGYs
IFdlYktpdERPTXNlcXVlbmNlPFNjcmlwdFByb2ZpbGU+KiB2YWx1ZSk7Ci0KLS8qKgogICogd2Vi
a2l0X2RvbV90ZXN0X29ial9nZXRfeG1sX29ial9hdHRyOgogICogQHNlbGY6IEEgI1dlYktpdERP
TVRlc3RPYmoKICAqCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3Qv
SlMvSlNUZXN0T2JqLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9z
Y3JpcHRzL3Rlc3QvSlMvSlNUZXN0T2JqLmNwcAkocmV2aXNpb24gMTExMTUzKQorKysgU291cmNl
L1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE9iai5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTMzLDYgKzMzLDcgQEAKICNpbmNsdWRlICJKU0V2ZW50TGlzdGVuZXIuaCIKICNp
bmNsdWRlICJKU1NWR0RvY3VtZW50LmgiCiAjaW5jbHVkZSAiSlNTVkdQb2ludC5oIgorI2luY2x1
ZGUgIkpTU2NyaXB0UHJvZmlsZS5oIgogI2luY2x1ZGUgIkpTVGVzdENhbGxiYWNrLmgiCiAjaW5j
bHVkZSAiSlNUZXN0T2JqLmgiCiAjaW5jbHVkZSAiSlNhLmgiCkBAIC00MywxOCArNDQsMTggQEAK
ICNpbmNsdWRlICJKU2UuaCIKICNpbmNsdWRlICJKU2ludC5oIgogI2luY2x1ZGUgIkpTc2VxdWVu
Y2UuaCIKLSNpbmNsdWRlICJKU3NlcXVlbmNlPFNjcmlwdFByb2ZpbGU+LmgiCiAjaW5jbHVkZSAi
S1VSTC5oIgogI2luY2x1ZGUgIlNWR0RvY3VtZW50LmgiCiAjaW5jbHVkZSAiU1ZHU3RhdGljUHJv
cGVydHlUZWFyT2ZmLmgiCiAjaW5jbHVkZSAiU2NyaXB0QXJndW1lbnRzLmgiCiAjaW5jbHVkZSAi
U2NyaXB0Q2FsbFN0YWNrLmgiCiAjaW5jbHVkZSAiU2NyaXB0Q2FsbFN0YWNrRmFjdG9yeS5oIgor
I2luY2x1ZGUgIlNjcmlwdFByb2ZpbGUuaCIKICNpbmNsdWRlICJTZXJpYWxpemVkU2NyaXB0VmFs
dWUuaCIKICNpbmNsdWRlICJUZXN0T2JqLmgiCiAjaW5jbHVkZSAiYm9vbC5oIgotI2luY2x1ZGUg
InNlcXVlbmNlPFNjcmlwdFByb2ZpbGU+LmgiCiAjaW5jbHVkZSA8cnVudGltZS9FcnJvci5oPgor
I2luY2x1ZGUgPHJ1bnRpbWUvSlNBcnJheS5oPgogI2luY2x1ZGUgPHJ1bnRpbWUvSlNTdHJpbmcu
aD4KICNpbmNsdWRlIDx3dGYvR2V0UHRyLmg+CiAKQEAgLTQ3Nyw3ICs0NzgsNyBAQCBKU1ZhbHVl
IGpzVGVzdE9ialNlcXVlbmNlQXR0cihFeGVjU3RhdGUqCiAgICAgSlNUZXN0T2JqKiBjYXN0ZWRU
aGlzID0gc3RhdGljX2Nhc3Q8SlNUZXN0T2JqKj4oYXNPYmplY3Qoc2xvdEJhc2UpKTsKICAgICBV
TlVTRURfUEFSQU0oZXhlYyk7CiAgICAgVGVzdE9iaiogaW1wbCA9IHN0YXRpY19jYXN0PFRlc3RP
YmoqPihjYXN0ZWRUaGlzLT5pbXBsKCkpOwotICAgIEpTVmFsdWUgcmVzdWx0ID0gdG9KUyhleGVj
LCBjYXN0ZWRUaGlzLT5nbG9iYWxPYmplY3QoKSwgV1RGOjpnZXRQdHIoaW1wbC0+c2VxdWVuY2VB
dHRyKCkpKTsKKyAgICBKU1ZhbHVlIHJlc3VsdCA9IGpzQXJyYXkoZXhlYywgY2FzdGVkVGhpcy0+
Z2xvYmFsT2JqZWN0KCksIGltcGwtPnNlcXVlbmNlQXR0cigpKTsKICAgICByZXR1cm4gcmVzdWx0
OwogfQogCkBAIC05NjUsNyArOTY2LDcgQEAgdm9pZCBzZXRKU1Rlc3RPYmpTZXF1ZW5jZUF0dHIo
RXhlY1N0YXRlKgogewogICAgIEpTVGVzdE9iaiogY2FzdGVkVGhpcyA9IHN0YXRpY19jYXN0PEpT
VGVzdE9iaio+KHRoaXNPYmplY3QpOwogICAgIFRlc3RPYmoqIGltcGwgPSBzdGF0aWNfY2FzdDxU
ZXN0T2JqKj4oY2FzdGVkVGhpcy0+aW1wbCgpKTsKLSAgICBpbXBsLT5zZXRTZXF1ZW5jZUF0dHIo
dG9zZXF1ZW5jZTxTY3JpcHRQcm9maWxlPih2YWx1ZSkpOworICAgIGltcGwtPnNldFNlcXVlbmNl
QXR0cih0b0pTQXJyYXkoZXhlYywgdmFsdWUpKTsKIH0KIAogCkBAIC0xNDIzLDcgKzE0MjQsNyBA
QCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9ialByCiAgICAgaWYgKGV4ZWMt
PmhhZEV4Y2VwdGlvbigpKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZp
bmVkKCkpOwogCi0gICAgSlNDOjpKU1ZhbHVlIHJlc3VsdCA9IHRvSlMoZXhlYywgY2FzdGVkVGhp
cy0+Z2xvYmFsT2JqZWN0KCksIFdURjo6Z2V0UHRyKGltcGwtPm1ldGhvZFJldHVybmluZ1NlcXVl
bmNlKGludEFyZykpKTsKKyAgICBKU0M6OkpTVmFsdWUgcmVzdWx0ID0ganNBcnJheShleGVjLCBj
YXN0ZWRUaGlzLT5nbG9iYWxPYmplY3QoKSwgaW1wbC0+bWV0aG9kUmV0dXJuaW5nU2VxdWVuY2Uo
aW50QXJnKSk7CiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShyZXN1bHQpOwogfQogCkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvVjgvVjhUZXN0T2JqLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvVjgvVjhU
ZXN0T2JqLmNwcAkocmV2aXNpb24gMTExMTUzKQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
c2NyaXB0cy90ZXN0L1Y4L1Y4VGVzdE9iai5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMyLDYgKzMy
LDcgQEAKICNpbmNsdWRlICJTY3JpcHRBcmd1bWVudHMuaCIKICNpbmNsdWRlICJTY3JpcHRDYWxs
U3RhY2suaCIKICNpbmNsdWRlICJTY3JpcHRDYWxsU3RhY2tGYWN0b3J5LmgiCisjaW5jbHVkZSAi
U2NyaXB0UHJvZmlsZS5oIgogI2luY2x1ZGUgIlNlcmlhbGl6ZWRTY3JpcHRWYWx1ZS5oIgogI2lu
Y2x1ZGUgIlY4QmluZGluZy5oIgogI2luY2x1ZGUgIlY4QmluZGluZ01hY3Jvcy5oIgpAQCAtNDIs
NiArNDMsNyBAQAogI2luY2x1ZGUgIlY4UHJveHkuaCIKICNpbmNsdWRlICJWOFNWR0RvY3VtZW50
LmgiCiAjaW5jbHVkZSAiVjhTVkdQb2ludC5oIgorI2luY2x1ZGUgIlY4U2NyaXB0UHJvZmlsZS5o
IgogI2luY2x1ZGUgIlY4VGVzdENhbGxiYWNrLmgiCiAjaW5jbHVkZSAiVjhhLmgiCiAjaW5jbHVk
ZSAiVjhhbnkuaCIKQEAgLTUyLDcgKzU0LDYgQEAKICNpbmNsdWRlICJWOGUuaCIKICNpbmNsdWRl
ICJWOGludC5oIgogI2luY2x1ZGUgIlY4c2VxdWVuY2UuaCIKLSNpbmNsdWRlICJWOHNlcXVlbmNl
PFNjcmlwdFByb2ZpbGU+LmgiCiAjaW5jbHVkZSA8d3RmL0dldFB0ci5oPgogI2luY2x1ZGUgPHd0
Zi9SZWZDb3VudGVkLmg+CiAjaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgpAQCAtMjIzLDE1ICsyMjQs
MTUgQEAgc3RhdGljIHY4OjpIYW5kbGU8djg6OlZhbHVlPiBzZXF1ZW5jZUF0dAogewogICAgIElO
Q19TVEFUUygiRE9NLlRlc3RPYmouc2VxdWVuY2VBdHRyLl9nZXQiKTsKICAgICBUZXN0T2JqKiBp
bXAgPSBWOFRlc3RPYmo6OnRvTmF0aXZlKGluZm8uSG9sZGVyKCkpOwotICAgIHJldHVybiB0b1Y4
KGltcC0+c2VxdWVuY2VBdHRyKCkpOworICAgIHJldHVybiB2OEFycmF5KGltcC0+c2VxdWVuY2VB
dHRyKCkpOwogfQogCiBzdGF0aWMgdm9pZCBzZXF1ZW5jZUF0dHJBdHRyU2V0dGVyKHY4OjpMb2Nh
bDx2ODo6U3RyaW5nPiBuYW1lLCB2ODo6TG9jYWw8djg6OlZhbHVlPiB2YWx1ZSwgY29uc3Qgdjg6
OkFjY2Vzc29ySW5mbyYgaW5mbykKIHsKICAgICBJTkNfU1RBVFMoIkRPTS5UZXN0T2JqLnNlcXVl
bmNlQXR0ci5fc2V0Iik7CiAgICAgVGVzdE9iaiogaW1wID0gVjhUZXN0T2JqOjp0b05hdGl2ZShp
bmZvLkhvbGRlcigpKTsKLSAgICBzZXF1ZW5jZTxTY3JpcHRQcm9maWxlPiogdiA9IFY4c2VxdWVu
Y2U8U2NyaXB0UHJvZmlsZT46Okhhc0luc3RhbmNlKHZhbHVlKSA/IFY4c2VxdWVuY2U8U2NyaXB0
UHJvZmlsZT46OnRvTmF0aXZlKHY4OjpIYW5kbGU8djg6Ok9iamVjdD46OkNhc3QodmFsdWUpKSA6
IDA7Ci0gICAgaW1wLT5zZXRTZXF1ZW5jZUF0dHIoV1RGOjpnZXRQdHIodikpOworICAgIFZlY3Rv
cjxTY3JpcHRQcm9maWxlPiB2ID0gdG9WOEFycmF5KHZhbHVlKTsKKyAgICBpbXAtPnNldFNlcXVl
bmNlQXR0cih2KTsKICAgICByZXR1cm47CiB9CiAKQEAgLTEwNzEsNyArMTA3Miw3IEBAIHN0YXRp
YyB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gbWV0aG9kUmV0dXIKICAgICAgICAgcmV0dXJuIHRocm93
RXJyb3IoIk5vdCBlbm91Z2ggYXJndW1lbnRzIiwgVjhQcm94eTo6VHlwZUVycm9yKTsKICAgICBU
ZXN0T2JqKiBpbXAgPSBWOFRlc3RPYmo6OnRvTmF0aXZlKGFyZ3MuSG9sZGVyKCkpOwogICAgIEVY
Q0VQVElPTl9CTE9DSyhpbnQsIGludEFyZywgdG9JbnQzMihNQVlCRV9NSVNTSU5HX1BBUkFNRVRF
UihhcmdzLCAwLCBEZWZhdWx0SXNVbmRlZmluZWQpKSk7Ci0gICAgcmV0dXJuIHRvVjgoaW1wLT5t
ZXRob2RSZXR1cm5pbmdTZXF1ZW5jZShpbnRBcmcpKTsKKyAgICByZXR1cm4gdjhBcnJheShpbXAt
Pm1ldGhvZFJldHVybmluZ1NlcXVlbmNlKGludEFyZykpOwogfQogCiBzdGF0aWMgdjg6OkhhbmRs
ZTx2ODo6VmFsdWU+IG1ldGhvZFRoYXRSZXF1aXJlc0FsbEFyZ3NBbmRUaHJvd3NDYWxsYmFjayhj
b25zdCB2ODo6QXJndW1lbnRzJiBhcmdzKQpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
djgvVjhCaW5kaW5nLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvdjgv
VjhCaW5kaW5nLmgJKHJldmlzaW9uIDExMTE1MykKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L3Y4L1Y4QmluZGluZy5oCSh3b3JraW5nIGNvcHkpCkBAIC0yODYsNiArMjg2LDM1IEBAIG5hbWVz
cGFjZSBXZWJDb3JlIHsKICAgICAgICAgcmV0dXJuIHY4RXh0ZXJuYWxTdHJpbmcoc3RyaW5nKTsK
ICAgICB9CiAKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBJdGVyYWJsZT4KKyAgICB2ODo6SGFuZGxl
PHY4OjpWYWx1ZT4gdjhBcnJheShjb25zdCBJdGVyYWJsZSYgdmVjdG9yKQorICAgIHsKKyAgICAg
ICAgdjg6OkxvY2FsPHY4OjpBcnJheT4gcmVzdWx0ID0gdjg6OkFycmF5OjpOZXcodmVjdG9yLnNp
emUoKSk7CisgICAgICAgIGludCBpbmRleCA9IDA7CisgICAgICAgIHR5cGVuYW1lIEl0ZXJhYmxl
Ojpjb25zdF9pdGVyYXRvciBlbmQgPSB2ZWN0b3IuZW5kKCk7CisgICAgICAgIGZvciAodHlwZW5h
bWUgSXRlcmFibGU6OmNvbnN0X2l0ZXJhdG9yIGl0ZXIgPSB2ZWN0b3IuYmVnaW4oKTsgaXRlciAh
PSBlbmQ7ICsraXRlcikKKyAgICAgICAgICAgIHJlc3VsdC0+U2V0KHY4OjpJbnRlZ2VyOjpOZXco
aW5kZXgrKyksIHRvVjgoV1RGOjpnZXRQdHIoKml0ZXIpKSk7CisgICAgICAgIHJldHVybiByZXN1
bHQ7CisgICAgfQorCisgICAgdGVtcGxhdGUgPGNsYXNzIFQ+CisgICAgVmVjdG9yPFQ+IHRvVjhB
cnJheSh2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gdmFsdWUpCisgICAgeworICAgICAgICB2ODo6TG9j
YWw8djg6OlZhbHVlPiB2OFZhbHVlKHY4OjpMb2NhbDx2ODo6VmFsdWU+OjpOZXcodmFsdWUpKTsK
KyAgICAgICAgaWYgKCF2OFZhbHVlLT5Jc0FycmF5KCkpCisgICAgICAgICAgICByZXR1cm4gVmVj
dG9yPFQ+KCk7CisKKyAgICAgICAgVmVjdG9yPFQ+IHJlc3VsdDsKKyAgICAgICAgdjg6OkxvY2Fs
PHY4OjpBcnJheT4gYXJyYXkgPSB2ODo6TG9jYWw8djg6OkFycmF5Pjo6Q2FzdCh2OFZhbHVlKTsK
KyAgICAgICAgc2l6ZV90IGxlbmd0aCA9IGFycmF5LT5MZW5ndGgoKTsKKworICAgICAgICBmb3Ig
KHNpemVfdCBpID0gMDsgaSA8IGxlbmd0aDsgKytpKSB7CisgICAgICAgICAgICBTdHJpbmcgaW5k
ZXhlZFZhbHVlID0gdjhTdHJpbmdUb1dlYkNvcmVTdHJpbmcoYXJyYXktPkdldChpKSk7CisgICAg
ICAgICAgICByZXN1bHQuYXBwZW5kKGluZGV4ZWRWYWx1ZSk7CisgICAgICAgIH0KKyAgICAgICAg
cmV0dXJuIHJlc3VsdDsKKyAgICB9CisKICAgICAvLyBFbmFibGVzIGNhY2hpbmcgdjggd3JhcHBl
cnMgY3JlYXRlZCBmb3IgV1RGOjpTdHJpbmdJbXBsLiAgQ3VycmVudGx5IHRoaXMgY2FjaGUgcmVx
dWlyZXMKICAgICAvLyBhbGwgdGhlIGNhbGxzIChib3RoIHRvIGNvbnZlcnQgV1RGOjpTdHJpbmcg
dG8gdjg6OlN0cmluZyBhbmQgdG8gR0MgdGhlIGhhbmRsZSkKICAgICAvLyB0byBiZSBwZXJmb3Jt
ZWQgb24gdGhlIG1haW4gdGhyZWFkLgpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvdjgv
Y3VzdG9tL1Y4Q29uc29sZUN1c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
YmluZGluZ3MvdjgvY3VzdG9tL1Y4Q29uc29sZUN1c3RvbS5jcHAJKHJldmlzaW9uIDExMTE1MykK
KysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOENvbnNvbGVDdXN0b20uY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0zNiwzMiArMzYsMTMgQEAKICNpbmNsdWRlICJTY3JpcHRBcmd1
bWVudHMuaCIKICNpbmNsdWRlICJTY3JpcHRDYWxsU3RhY2suaCIKICNpbmNsdWRlICJTY3JpcHRD
YWxsU3RhY2tGYWN0b3J5LmgiCi0jaW5jbHVkZSAiU2NyaXB0UHJvZmlsZS5oIgogI2luY2x1ZGUg
IlY4QmluZGluZy5oIgogI2luY2x1ZGUgIlY4QmluZGluZ01hY3Jvcy5oIgogI2luY2x1ZGUgIlY4
TWVtb3J5SW5mby5oIgogI2luY2x1ZGUgIlY4UHJveHkuaCIKLSNpbmNsdWRlICJWOFNjcmlwdFBy
b2ZpbGUuaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi10eXBlZGVmIFZlY3RvcjxSZWZQdHI8
U2NyaXB0UHJvZmlsZT4gPiBQcm9maWxlc0FycmF5OwotCi0jaWYgRU5BQkxFKEpBVkFTQ1JJUFRf
REVCVUdHRVIpCi12ODo6SGFuZGxlPHY4OjpWYWx1ZT4gVjhDb25zb2xlOjpwcm9maWxlc0FjY2Vz
c29yR2V0dGVyKHY4OjpMb2NhbDx2ODo6U3RyaW5nPiBuYW1lLCBjb25zdCB2ODo6QWNjZXNzb3JJ
bmZvJiBpbmZvKQotewotICAgIElOQ19TVEFUUygiRE9NLkNvbnNvbGUucHJvZmlsZXNBY2Nlc3Nv
ckdldHRlciIpOwotICAgIENvbnNvbGUqIGltcCA9IFY4Q29uc29sZTo6dG9OYXRpdmUoaW5mby5I
b2xkZXIoKSk7Ci0gICAgY29uc3QgUHJvZmlsZXNBcnJheSYgcHJvZmlsZXMgPSBpbXAtPnByb2Zp
bGVzKCk7Ci0gICAgdjg6OkhhbmRsZTx2ODo6QXJyYXk+IHJlc3VsdCA9IHY4OjpBcnJheTo6TmV3
KHByb2ZpbGVzLnNpemUoKSk7Ci0gICAgaW50IGluZGV4ID0gMDsKLSAgICBQcm9maWxlc0FycmF5
Ojpjb25zdF9pdGVyYXRvciBlbmQgPSBwcm9maWxlcy5lbmQoKTsKLSAgICBmb3IgKFByb2ZpbGVz
QXJyYXk6OmNvbnN0X2l0ZXJhdG9yIGl0ZXIgPSBwcm9maWxlcy5iZWdpbigpOyBpdGVyICE9IGVu
ZDsgKytpdGVyKQotICAgICAgICByZXN1bHQtPlNldCh2ODo6SW50ZWdlcjo6TmV3KGluZGV4Kysp
LCB0b1Y4KGl0ZXItPmdldCgpKSk7Ci0gICAgcmV0dXJuIHJlc3VsdDsKLX0KLSNlbmRpZgotCiB2
ODo6SGFuZGxlPHY4OjpWYWx1ZT4gVjhDb25zb2xlOjp0cmFjZUNhbGxiYWNrKGNvbnN0IHY4OjpB
cmd1bWVudHMmIGFyZ3MpCiB7CiAgICAgSU5DX1NUQVRTKCJET00uQ29uc29sZS50cmFjZUNhbGxi
YWNrIik7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wYWdlL0NvbnNvbGUuaWRsCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL3BhZ2UvQ29uc29sZS5pZGwJKHJldmlzaW9uIDExMTE1MykKKysr
IFNvdXJjZS9XZWJDb3JlL3BhZ2UvQ29uc29sZS5pZGwJKHdvcmtpbmcgY29weSkKQEAgLTQ2LDcg
KzQ2LDcgQEAgbW9kdWxlIHdpbmRvdyB7CiAgICAgICAgIFtDYWxsV2l0aD1TY3JpcHRBcmd1bWVu
dHN8Q2FsbFN0YWNrXSB2b2lkIG1hcmtUaW1lbGluZSgpOwogCiAjaWYgZGVmaW5lZChFTkFCTEVf
SkFWQVNDUklQVF9ERUJVR0dFUikgJiYgRU5BQkxFX0pBVkFTQ1JJUFRfREVCVUdHRVIKLSAgICAg
ICAgcmVhZG9ubHkgYXR0cmlidXRlIFtDdXN0b21HZXR0ZXJdIEFycmF5IHByb2ZpbGVzOworICAg
ICAgICByZWFkb25seSBhdHRyaWJ1dGUgc2VxdWVuY2U8U2NyaXB0UHJvZmlsZT4gcHJvZmlsZXM7
CiAgICAgICAgIFtDdXN0b21dIHZvaWQgcHJvZmlsZShpbiBET01TdHJpbmcgdGl0bGUpOwogICAg
ICAgICBbQ3VzdG9tXSB2b2lkIHByb2ZpbGVFbmQoaW4gRE9NU3RyaW5nIHRpdGxlKTsKICNlbmRp
Zgo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>132817</attachid>
            <date>2012-03-20 06:46:59 -0700</date>
            <delta_ts>2012-03-20 10:31:30 -0700</delta_ts>
            <desc>another_attempt_01</desc>
            <filename>wip_006.diff</filename>
            <type>text/plain</type>
            <size>24098</size>
            <attacher name="Vineet Chaudhary (vineetc)">code.vineet</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDExMTM4OCkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDUxIEBACisyMDEyLTAzLTIwICBWaW5lZXQg
Q2hhdWRoYXJ5ICA8cmdmNzQ4QG1vdG9yb2xhLmNvbT4KKworICAgICAgICBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9ODA2OTYKKyAgICAgICAgUmVtb3ZlIGN1c3RvbSBi
aW5kaW5ncyBmb3IgYXR0cmlidXRlIHR5cGUgQXJyYXkuCisKKyAgICAgICAgUmV2aWV3ZWQgYnkg
Tk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgTm8gbmV3IHRlc3RzLgorCisgICAgICAgICogYmlu
ZGluZ3MvanMvSlNDb25zb2xlQ3VzdG9tLmNwcDogUmVtb3ZlZCBjdXN0b20gZnVuY3Rpb24uCisg
ICAgICAgICogYmluZGluZ3MvanMvSlNET01CaW5kaW5nLmg6IEFkZGVkIHRlbXBsYXRlIGpzQXJy
YXkgYW5kIHRvTmF0aXZlQXJyYXkuLgorICAgICAgICAoV2ViQ29yZTo6dG9KUyk6CisgICAgICAg
IChXZWJDb3JlKToKKyAgICAgICAgKFdlYkNvcmU6OmpzQXJyYXkpOgorICAgICAgICAoV2ViQ29y
ZTo6dG9OYXRpdmVBcnJheSk6CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy9Db2RlR2VuZXJh
dG9yLnBtOiBNb2RpZmllZCBjb2RlZ2VuZXJhdG9ycyB0byBnZW5lcmF0ZSBhcHByb3ByaWF0ZSBj
b2RlLgorICAgICAgICAoR2V0QXJyYXlUeXBlKTogQWRkZWQgR2V0QXJyYXlUeXBlIHRvIGdldCBy
ZXR1cm4gdHlwZSBvZiBhdHRyaWJ1dGUgaW50ZXJmYWNlLgorICAgICAgICAqIGJpbmRpbmdzL3Nj
cmlwdHMvQ29kZUdlbmVyYXRvckdPYmplY3QucG06IE1vZGlmaWVkIGNvZGVnZW5lcmF0b3JzIHRv
IGdlbmVyYXRlIGFwcHJvcHJpYXRlIGNvZGUuCisgICAgICAgIChTa2lwQXR0cmlidXRlKToKKyAg
ICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0b3JKUy5wbTogTW9kaWZpZWQgY29k
ZWdlbmVyYXRvcnMgdG8gZ2VuZXJhdGUgYXBwcm9wcmlhdGUgY29kZS4KKyAgICAgICAgKEFkZElu
Y2x1ZGVzRm9yVHlwZSk6CisgICAgICAgIChKU1ZhbHVlVG9OYXRpdmUpOgorICAgICAgICAoTmF0
aXZlVG9KU1ZhbHVlKToKKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0b3JW
OC5wbTogTW9kaWZpZWQgY29kZWdlbmVyYXRvcnMgdG8gZ2VuZXJhdGUgYXBwcm9wcmlhdGUgY29k
ZS4KKyAgICAgICAgKEdlbmVyYXRlTm9ybWFsQXR0ckdldHRlcik6CisgICAgICAgIChHZW5lcmF0
ZU5vcm1hbEF0dHJTZXR0ZXIpOgorICAgICAgICAoSlNWYWx1ZVRvTmF0aXZlKToKKyAgICAgICAg
KE5hdGl2ZVRvSlNWYWx1ZSk6CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0dPYmpl
Y3QvV2ViS2l0RE9NVGVzdE9iai5jcHA6IFVwZGF0ZWQgcmVzdWx0cyBmcm9tIHJ1bm5pbmcgYmlu
ZGluZyB0ZXN0cy4KKyAgICAgICAgKHdlYmtpdF9kb21fdGVzdF9vYmpfZ2V0X3Byb3BlcnR5KToK
KyAgICAgICAgKHdlYmtpdF9kb21fdGVzdF9vYmpfY2xhc3NfaW5pdCk6CisgICAgICAgICogYmlu
ZGluZ3Mvc2NyaXB0cy90ZXN0L0dPYmplY3QvV2ViS2l0RE9NVGVzdE9iai5oOiBEaXR0by4KKyAg
ICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0T2JqLmNwcDogRGl0dG8uCisg
ICAgICAgIChXZWJDb3JlOjpqc1Rlc3RPYmpTZXF1ZW5jZUF0dHIpOgorICAgICAgICAoV2ViQ29y
ZTo6c2V0SlNUZXN0T2JqU2VxdWVuY2VBdHRyKToKKyAgICAgICAgKFdlYkNvcmU6OmpzVGVzdE9i
alByb3RvdHlwZUZ1bmN0aW9uTWV0aG9kUmV0dXJuaW5nU2VxdWVuY2UpOgorICAgICAgICAqIGJp
bmRpbmdzL3NjcmlwdHMvdGVzdC9WOC9WOFRlc3RPYmouY3BwOiBEaXR0by4KKyAgICAgICAgKFdl
YkNvcmU6OlRlc3RPYmpJbnRlcm5hbDo6c2VxdWVuY2VBdHRyQXR0ckdldHRlcik6CisgICAgICAg
IChXZWJDb3JlOjpUZXN0T2JqSW50ZXJuYWw6OnNlcXVlbmNlQXR0ckF0dHJTZXR0ZXIpOgorICAg
ICAgICAoV2ViQ29yZTo6VGVzdE9iakludGVybmFsOjptZXRob2RSZXR1cm5pbmdTZXF1ZW5jZUNh
bGxiYWNrKToKKyAgICAgICAgKiBiaW5kaW5ncy92OC9WOEJpbmRpbmcuaDogQWRkZWQgdGVtcGxh
dGUgdjhBcnJheSBhbmQgdG9OYXRpdmVBcnJheS4KKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAg
ICAoV2ViQ29yZTo6djhBcnJheSk6CisgICAgICAgIChXZWJDb3JlOjp0b05hdGl2ZUFycmF5KToK
KyAgICAgICAgKiBiaW5kaW5ncy92OC9jdXN0b20vVjhDb25zb2xlQ3VzdG9tLmNwcDogUmVtb3Zl
ZCBjdXN0b20gZnVuY3Rpb24uCisgICAgICAgICogcGFnZS9Db25zb2xlLmlkbDogUmVwbGFjZWQg
YXR0cmlidXRlIHR5cGUgQXJyYXkgdG8gc2VxdWVuY2U8U3JpcHRQcm9maWxlPiB0byByZW1vdmUK
KyAgICAgICAgY3VzdG9tIGJpbmRpbmdzLgorCiAyMDEyLTAzLTIwICBQYXZlbCBGZWxkbWFuICA8
cGZlbGRtYW5AY2hyb21pdW0ub3JnPgogCiAgICAgICAgIFdlYiBJbnNwZWN0b3I6IHRyZWF0IFVp
bnQqIGV4dGVybmFsIGFycmF5cyBhcyBhcnJheXMgaW4gY29uc29sZS4KSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL2pzL0pTQ29uc29sZUN1c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNDb25zb2xlQ3VzdG9tLmNwcAkocmV2aXNpb24gMTEx
MTYwKQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNDb25zb2xlQ3VzdG9tLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMzAsMzEgKzMwLDE0IEBACiAjaW5jbHVkZSAiSlNDb25zb2xlLmgi
CiAKICNpbmNsdWRlICJDb25zb2xlLmgiCi0jaW5jbHVkZSAiSlNTY3JpcHRQcm9maWxlLmgiCiAj
aW5jbHVkZSAiU2NyaXB0Q2FsbFN0YWNrLmgiCiAjaW5jbHVkZSAiU2NyaXB0Q2FsbFN0YWNrRmFj
dG9yeS5oIgotI2luY2x1ZGUgIlNjcmlwdFByb2ZpbGUuaCIKLSNpbmNsdWRlIDxydW50aW1lL0pT
QXJyYXkuaD4KICNpbmNsdWRlIDx3dGYvT3duUHRyLmg+CiAKIHVzaW5nIG5hbWVzcGFjZSBKU0M7
CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotdHlwZWRlZiBWZWN0b3I8UmVmUHRyPFNjcmlwdFBy
b2ZpbGU+ID4gUHJvZmlsZXNBcnJheTsKLQotSlNWYWx1ZSBKU0NvbnNvbGU6OnByb2ZpbGVzKEV4
ZWNTdGF0ZSogZXhlYykgY29uc3QKLXsKLSAgICBjb25zdCBQcm9maWxlc0FycmF5JiBwcm9maWxl
cyA9IGltcGwoKS0+cHJvZmlsZXMoKTsKLSAgICBNYXJrZWRBcmd1bWVudEJ1ZmZlciBsaXN0Owot
Ci0gICAgUHJvZmlsZXNBcnJheTo6Y29uc3RfaXRlcmF0b3IgZW5kID0gcHJvZmlsZXMuZW5kKCk7
Ci0gICAgZm9yIChQcm9maWxlc0FycmF5Ojpjb25zdF9pdGVyYXRvciBpdGVyID0gcHJvZmlsZXMu
YmVnaW4oKTsgaXRlciAhPSBlbmQ7ICsraXRlcikKLSAgICAgICAgbGlzdC5hcHBlbmQodG9KUyhl
eGVjLCBnbG9iYWxPYmplY3QoKSwgaXRlci0+Z2V0KCkpKTsKLQotICAgIHJldHVybiBjb25zdHJ1
Y3RBcnJheShleGVjLCBnbG9iYWxPYmplY3QoKSwgbGlzdCk7Ci19Ci0KIEpTVmFsdWUgSlNDb25z
b2xlOjpwcm9maWxlKEV4ZWNTdGF0ZSogZXhlYykKIHsKICAgICBSZWZQdHI8U2NyaXB0Q2FsbFN0
YWNrPiBjYWxsU3RhY2soY3JlYXRlU2NyaXB0Q2FsbFN0YWNrKGV4ZWMsIDEpKTsKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NQmluZGluZy5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NQmluZGluZy5oCShyZXZpc2lvbiAxMTExNjAp
CisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTUJpbmRpbmcuaAkod29ya2luZyBj
b3B5KQpAQCAtMzQsNyArMzQsOSBAQAogI2luY2x1ZGUgIlN0eWxlUHJvcGVydHlTZXQuaCIKICNp
bmNsdWRlICJTdHlsZWRFbGVtZW50LmgiCiAjaW5jbHVkZSA8aGVhcC9XZWFrLmg+CisjaW5jbHVk
ZSA8cnVudGltZS9FcnJvci5oPgogI2luY2x1ZGUgPHJ1bnRpbWUvRnVuY3Rpb25Qcm90b3R5cGUu
aD4KKyNpbmNsdWRlIDxydW50aW1lL0pTQXJyYXkuaD4KICNpbmNsdWRlIDxydW50aW1lL0xvb2t1
cC5oPgogI2luY2x1ZGUgPHJ1bnRpbWUvT2JqZWN0UHJvdG90eXBlLmg+CiAjaW5jbHVkZSA8d3Rm
L0ZvcndhcmQuaD4KQEAgLTI3OCw2ICsyODAsMzUgQEAgZW51bSBQYXJhbWV0ZXJEZWZhdWx0UG9s
aWN5IHsKICAgICAgICAgcmV0dXJuIHRvSlMoZXhlYywgZ2xvYmFsT2JqZWN0LCBwdHIuZ2V0KCkp
OwogICAgIH0KIAorICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBJdGVyYWJsZT4KKyAgICBKU0M6OkpT
VmFsdWUganNBcnJheShKU0M6OkV4ZWNTdGF0ZSogZXhlYywgSlNET01HbG9iYWxPYmplY3QqIGds
b2JhbE9iamVjdCwgY29uc3QgSXRlcmFibGUmIGl0ZXJhdG9yKQorICAgIHsKKyAgICAgICAgSlND
OjpNYXJrZWRBcmd1bWVudEJ1ZmZlciBsaXN0OworICAgICAgICB0eXBlbmFtZSBJdGVyYWJsZTo6
Y29uc3RfaXRlcmF0b3IgZW5kID0gaXRlcmF0b3IuZW5kKCk7CisKKyAgICAgICAgZm9yICh0eXBl
bmFtZSBJdGVyYWJsZTo6Y29uc3RfaXRlcmF0b3IgaXRlciA9IGl0ZXJhdG9yLmJlZ2luKCk7IGl0
ZXIgIT0gZW5kOyArK2l0ZXIpCisgICAgICAgICAgICBsaXN0LmFwcGVuZCh0b0pTKGV4ZWMsIGds
b2JhbE9iamVjdCwgV1RGOjpnZXRQdHIoKml0ZXIpKSk7CisKKyAgICAgICAgcmV0dXJuIEpTQzo6
Y29uc3RydWN0QXJyYXkoZXhlYywgbGlzdCk7CisgICAgfQorCisgICAgdGVtcGxhdGUgPHR5cGVu
YW1lIEl0ZXJhYmxlPgorICAgIEl0ZXJhYmxlIHRvTmF0aXZlQXJyYXkoSlNDOjpFeGVjU3RhdGUq
IGV4ZWMsIEpTQzo6SlNWYWx1ZSB2YWx1ZSkKKyAgICB7CisgICAgICAgIGlmICghaXNKU0FycmF5
KHZhbHVlKSkgeworICAgICAgICAgICAgdGhyb3dFcnJvcihleGVjLCBjcmVhdGVTeW50YXhFcnJv
cihleGVjLCAiRXhwZWN0ZWQgQXJyYXkiKSk7CisgICAgICAgICAgICByZXR1cm4gSlNDOjpqc051
bGwoKTsKKyAgICAgICAgfQorCisgICAgICAgIEl0ZXJhYmxlIHJlc3VsdDsKKyAgICAgICAgSlND
OjpKU0FycmF5KiBhcnJheSA9IGFzQXJyYXkodmFsdWUpOworICAgICAgICBmb3IgKHVuc2lnbmVk
IGkgPSAwOyBpIDwgYXJyYXktPmxlbmd0aCgpOyArK2kpIHsKKyAgICAgICAgICAgIFN0cmluZyBp
bmRleGVkVmFsdWUgPSB1c3RyaW5nVG9TdHJpbmcoYXJyYXktPmdldEluZGV4KGkpLnRvU3RyaW5n
KGV4ZWMpLT52YWx1ZShleGVjKSk7CisgICAgICAgICAgICByZXN1bHQuYXBwZW5kKGluZGV4ZWRW
YWx1ZSk7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9CisKICAgICAv
LyBWYWxpZGF0ZXMgdGhhdCB0aGUgcGFzc2VkIG9iamVjdCBpcyBhIHNlcXVlbmNlIHR5cGUgcGVy
IHNlY3Rpb24gNC4xLjEzIG9mIHRoZSBXZWJJREwgc3BlYy4KICAgICBKU0M6OkpTT2JqZWN0KiB0
b0pTU2VxdWVuY2UoSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkpTVmFsdWUsIHVuc2lnbmVkJik7CiAK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvQ29kZUdlbmVyYXRvci5wbQo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0
b3IucG0JKHJldmlzaW9uIDExMTE2MCkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Njcmlw
dHMvQ29kZUdlbmVyYXRvci5wbQkod29ya2luZyBjb3B5KQpAQCAtNDQ1LDYgKzQ0NSwxNSBAQCBz
dWIgSXNTVkdBbmltYXRlZFR5cGUKICAgICByZXR1cm4gMDsKIH0KIAorc3ViIEdldEFycmF5VHlw
ZQoreworICAgIG15ICRvYmplY3QgPSBzaGlmdDsKKyAgICBteSAkdHlwZSA9IHNoaWZ0OworCisg
ICAgcmV0dXJuICQxIGlmICR0eXBlID1+IC9ec2VxdWVuY2U8KFtcd1xkX10rKT4uKi87CisgICAg
cmV0dXJuICIiOworfQorCiAjIFVwcGVyY2FzZSB0aGUgZmlyc3QgbGV0dGVyIHdoaWxlIHJlc3Bl
Y3RpbmcgV2ViS2l0IHN0eWxlIGd1aWRlbGluZXMuCiAjIEUuZy4sIHhtbEVuY29kaW5nIGJlY29t
ZXMgWE1MRW5jb2RpbmcsIGJ1dCB4bWxsbGFuZyBiZWNvbWVzIFhtbGxhbmcuCiBzdWIgV0tfdWNm
aXJzdApJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy9Db2RlR2VuZXJhdG9y
R09iamVjdC5wbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRz
L0NvZGVHZW5lcmF0b3JHT2JqZWN0LnBtCShyZXZpc2lvbiAxMTExNjApCisrKyBTb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0b3JHT2JqZWN0LnBtCSh3b3JraW5nIGNv
cHkpCkBAIC0xNjQsNiArMTY0LDEwIEBAIHN1YiBTa2lwQXR0cmlidXRlIHsKICAgICAgICAgcmV0
dXJuIDE7CiAgICAgfQogCisgICAgaWYgKCRjb2RlR2VuZXJhdG9yLT5HZXRBcnJheVR5cGUoJHBy
b3BUeXBlKSkgeworICAgICAgICByZXR1cm4gMTsKKyAgICB9CisKICAgICAjIFRoaXMgaXMgZm9y
IERPTVdpbmRvdy5pZGwgbG9jYXRpb24gYXR0cmlidXRlCiAgICAgaWYgKCRhdHRyaWJ1dGUtPnNp
Z25hdHVyZS0+bmFtZSBlcSAibG9jYXRpb24iKSB7CiAgICAgICAgIHJldHVybiAxOwpJbmRleDog
U291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy9Db2RlR2VuZXJhdG9ySlMucG0KPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy9Db2RlR2VuZXJhdG9ySlMu
cG0JKHJldmlzaW9uIDExMTE2MCkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMv
Q29kZUdlbmVyYXRvckpTLnBtCSh3b3JraW5nIGNvcHkpCkBAIC0yNjYsNiArMjY2LDcgQEAgc3Vi
IEFkZEluY2x1ZGVzRm9yVHlwZQogICAgICAgICAkaW5jbHVkZXNSZWYtPnsiSlMke3R5cGV9Lmgi
fSA9IDE7CiAgICAgfSBlbHNpZiAoSXNUeXBlZEFycmF5VHlwZSgkdHlwZSkpIHsKICAgICAgICAg
JGluY2x1ZGVzUmVmLT57Ijx3dGYvJHt0eXBlfS5oPiJ9ID0gMTsKKyAgICB9IGVsc2lmICgkY29k
ZUdlbmVyYXRvci0+R2V0QXJyYXlUeXBlKCR0eXBlKSkgewogICAgIH0gZWxzZSB7CiAgICAgICAg
ICMgZGVmYXVsdCwgaW5jbHVkZSB0aGUgc2FtZSBuYW1lZCBmaWxlCiAgICAgICAgICRpbmNsdWRl
c1JlZi0+eyIke3R5cGV9LmgifSA9IDE7CkBAIC0yOTQ1LDYgKzI5NDYsMTAgQEAgc3ViIEpTVmFs
dWVUb05hdGl2ZQogICAgIEFkZFRvSW1wbEluY2x1ZGVzKCJKU0N1c3RvbVZvaWRDYWxsYmFjay5o
IiwgJGNvbmRpdGlvbmFsKSBpZiAkdHlwZSBlcSAiVm9pZENhbGxiYWNrIjsKICAgICBBZGRUb0lt
cGxJbmNsdWRlcygiRXZlbnQuaCIsICRjb25kaXRpb25hbCkgaWYgJHR5cGUgZXEgIkV2ZW50IjsK
IAorICAgIGlmICgkY29kZUdlbmVyYXRvci0+R2V0QXJyYXlUeXBlKCR0eXBlKSkgeworICAgICAg
ICByZXR1cm4gInRvTmF0aXZlQXJyYXkoZXhlYywgJHZhbHVlKSI7CisgICAgfQorCiAgICAgIyBE
ZWZhdWx0LCBhc3N1bWUgYXV0b2dlbmVyYXRlZCB0eXBlIGNvbnZlcnNpb24gcm91dGluZXMKICAg
ICBBZGRUb0ltcGxJbmNsdWRlcygiSlMkdHlwZS5oIiwgJGNvbmRpdGlvbmFsKTsKICAgICByZXR1
cm4gInRvJHR5cGUoJHZhbHVlKSI7CkBAIC0zMDA0LDYgKzMwMDksMTQgQEAgc3ViIE5hdGl2ZVRv
SlNWYWx1ZQogICAgICAgICBBZGRUb0ltcGxJbmNsdWRlcygiTmFtZU5vZGVMaXN0LmgiLCAkY29u
ZGl0aW9uYWwpOwogICAgIH0KIAorICAgIG15ICRhcnJheVR5cGUgPSAkY29kZUdlbmVyYXRvci0+
R2V0QXJyYXlUeXBlKCR0eXBlKTsKKyAgICBpZiAoJGFycmF5VHlwZSkgeworICAgICAgICBBZGRU
b0ltcGxJbmNsdWRlcygiPHJ1bnRpbWUvSlNBcnJheS5oPiIsICRjb25kaXRpb25hbCk7CisgICAg
ICAgIEFkZFRvSW1wbEluY2x1ZGVzKCJKUyRhcnJheVR5cGUuaCIsICRjb25kaXRpb25hbCk7Cisg
ICAgICAgIEFkZFRvSW1wbEluY2x1ZGVzKCIkYXJyYXlUeXBlLmgiLCAkY29uZGl0aW9uYWwpOwor
ICAgICAgICByZXR1cm4gImpzQXJyYXkoZXhlYywgJHRoaXNWYWx1ZS0+Z2xvYmFsT2JqZWN0KCks
ICR2YWx1ZSkiOworICAgIH0KKwogICAgIGlmICgkdHlwZSBlcSAiRE9NT2JqZWN0IikgewogICAg
ICAgICBpZiAoJGltcGxDbGFzc05hbWUgZXEgIkRvY3VtZW50IikgewogICAgICAgICAgICAgQWRk
VG9JbXBsSW5jbHVkZXMoIkpTQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJELmgiLCAkY29uZGl0aW9u
YWwpOwpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy9Db2RlR2VuZXJhdG9y
VjgucG0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy9Db2Rl
R2VuZXJhdG9yVjgucG0JKHJldmlzaW9uIDExMTE2MCkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL3NjcmlwdHMvQ29kZUdlbmVyYXRvclY4LnBtCSh3b3JraW5nIGNvcHkpCkBAIC05MjMsNiAr
OTIzLDE3IEBAIEVORAogICAgIGlmICghSXNOb2RlU3ViVHlwZSgkZGF0YU5vZGUpICYmICRhdHRy
TmFtZSBuZSAic2VsZiIgJiYgKElzV3JhcHBlclR5cGUoJHJldHVyblR5cGUpICYmICgkYXR0cmli
dXRlLT50eXBlID1+IC9ecmVhZG9ubHkvIHx8ICRhdHRyaWJ1dGUtPnNpZ25hdHVyZS0+ZXh0ZW5k
ZWRBdHRyaWJ1dGVzLT57IlJlcGxhY2VhYmxlIn0pCiAgICAgICAgICYmICRyZXR1cm5UeXBlIG5l
ICJFdmVudFRhcmdldCIgJiYgJHJldHVyblR5cGUgbmUgIlNlcmlhbGl6ZWRTY3JpcHRWYWx1ZSIg
JiYgJHJldHVyblR5cGUgbmUgIkRPTVdpbmRvdyIgCiAgICAgICAgICYmICRyZXR1cm5UeXBlICF+
IC9TVkcvICYmICRyZXR1cm5UeXBlICF+IC9IVE1MLyAmJiAhSXNET01Ob2RlVHlwZSgkcmV0dXJu
VHlwZSkpKSB7CisKKyAgICAgICAgbXkgJGFycmF5VHlwZSA9ICRjb2RlR2VuZXJhdG9yLT5HZXRB
cnJheVR5cGUoJHJldHVyblR5cGUpOworICAgICAgICBpZiAoJGFycmF5VHlwZSkgeworICAgICAg
ICAgICAgQWRkVG9JbXBsSW5jbHVkZXMoIlY4JGFycmF5VHlwZS5oIik7CisgICAgICAgICAgICBB
ZGRUb0ltcGxJbmNsdWRlcygiJGFycmF5VHlwZS5oIik7CisgICAgICAgICAgICBwdXNoKEBpbXBs
Q29udGVudERlY2xzLCAiICAgIGNvbnN0IFZlY3RvcjxSZWZQdHI8JGFycmF5VHlwZT4gPiB2ZWN0
b3IgPSAke2dldHRlclN0cmluZ307XG4iKTsKKyAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50
RGVjbHMsICIgICAgcmV0dXJuIHY4QXJyYXkodmVjdG9yKTtcbiIpOworICAgICAgICAgICAgcHVz
aChAaW1wbENvbnRlbnREZWNscywgIn1cblxuIik7CisgICAgICAgICAgICByZXR1cm47CisgICAg
ICAgIH0KKwogICAgICAgICBBZGRJbmNsdWRlc0ZvclR5cGUoJHJldHVyblR5cGUpOwogICAgICAg
ICAjIENoZWNrIGZvciBhIHdyYXBwZXIgaW4gdGhlIHdyYXBwZXIgY2FjaGUuIElmIHRoZXJlIGlz
IG9uZSwgd2Uga25vdyB0aGF0IGEgaGlkZGVuIHJlZmVyZW5jZSBoYXMgYWxyZWFkeQogICAgICAg
ICAjIGJlZW4gY3JlYXRlZC4gSWYgd2UgZG9uJ3QgZmluZCBhIHdyYXBwZXIsIHdlIGNyZWF0ZSBi
b3RoIGEgd3JhcHBlciBhbmQgYSBoaWRkZW4gcmVmZXJlbmNlLgpAQCAtMTA5NywxNiArMTEwOCwy
MCBAQCBFTkQKICAgICAgICAgfQogICAgIH0gZWxzZSB7CiAgICAgICAgIG15ICR2YWx1ZSA9IEpT
VmFsdWVUb05hdGl2ZSgkYXR0cmlidXRlLT5zaWduYXR1cmUsICJ2YWx1ZSIpOworICAgICAgICBt
eSAkYXJyYXlUeXBlID0gJGNvZGVHZW5lcmF0b3ItPkdldEFycmF5VHlwZSgkbmF0aXZlVHlwZSk7
CisKICAgICAgICAgaWYgKCRuYXRpdmVUeXBlID1+IC9eVjhQYXJhbWV0ZXIvKSB7Ci0gICAgICAg
ICAgcHVzaChAaW1wbENvbnRlbnREZWNscywgIiAgICAiIC4gQ29udmVydFRvVjhQYXJhbWV0ZXIo
JGF0dHJpYnV0ZS0+c2lnbmF0dXJlLCAkbmF0aXZlVHlwZSwgInYiLCAkdmFsdWUsICJWT0lEIikg
LiAiXG4iKTsKKyAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50RGVjbHMsICIgICAgIiAuIENv
bnZlcnRUb1Y4UGFyYW1ldGVyKCRhdHRyaWJ1dGUtPnNpZ25hdHVyZSwgJG5hdGl2ZVR5cGUsICJ2
IiwgJHZhbHVlLCAiVk9JRCIpIC4gIlxuIik7CisgICAgICAgIH0gZWxzaWYgKCRhcnJheVR5cGUp
IHsKKyAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50RGVjbHMsICIgICAgVmVjdG9yPCRhcnJh
eVR5cGU+IHYgPSAkdmFsdWU7XG4iKTsKICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICBwdXNo
KEBpbXBsQ29udGVudERlY2xzLCAiICAgICRuYXRpdmVUeXBlIHYgPSAkdmFsdWU7XG4iKTsKKyAg
ICAgICAgICAgIHB1c2goQGltcGxDb250ZW50RGVjbHMsICIgICAgJG5hdGl2ZVR5cGUgdiA9ICR2
YWx1ZTtcbiIpOwogICAgICAgICB9CiAgICAgfQogCiAgICAgbXkgJHJlc3VsdCA9ICJ2IjsKICAg
ICBteSAkcmV0dXJuVHlwZSA9IEdldFR5cGVGcm9tU2lnbmF0dXJlKCRhdHRyaWJ1dGUtPnNpZ25h
dHVyZSk7Ci0gICAgaWYgKElzUmVmUHRyVHlwZSgkcmV0dXJuVHlwZSkpIHsKKyAgICBpZiAoSXNS
ZWZQdHJUeXBlKCRyZXR1cm5UeXBlKSAmJiAhJGNvZGVHZW5lcmF0b3ItPkdldEFycmF5VHlwZSgk
cmV0dXJuVHlwZSkpIHsKICAgICAgICAgJHJlc3VsdCA9ICJXVEY6OmdldFB0cigiIC4gJHJlc3Vs
dCAuICIpIjsKICAgICB9CiAKQEAgLTM1NTQsNiArMzU2OSwxMCBAQCBzdWIgSlNWYWx1ZVRvTmF0
aXZlCiAgICAgICAgIHJldHVybiAiVjhET01XcmFwcGVyOjpnZXRYUGF0aE5TUmVzb2x2ZXIoJHZh
bHVlKSI7CiAgICAgfQogCisgICAgaWYgKCRjb2RlR2VuZXJhdG9yLT5HZXRBcnJheVR5cGUoJHR5
cGUpKSB7CisgICAgICAgIHJldHVybiAidG9OYXRpdmVBcnJheSgkdmFsdWUpIjsKKyAgICB9CisK
ICAgICBBZGRJbmNsdWRlc0ZvclR5cGUoJHR5cGUpOwogCiAgICAgaWYgKElzRE9NTm9kZVR5cGUo
JHR5cGUpKSB7CkBAIC0zNzY3LDYgKzM3ODYsMTMgQEAgc3ViIE5hdGl2ZVRvSlNWYWx1ZQogICAg
ICAgICByZXR1cm4gInY4U3RyaW5nKCR2YWx1ZSkiOwogICAgIH0KIAorICAgIG15ICRhcnJheVR5
cGUgPSAkY29kZUdlbmVyYXRvci0+R2V0QXJyYXlUeXBlKCR0eXBlKTsKKyAgICBpZiAoJGFycmF5
VHlwZSkgeworICAgICAgICBBZGRUb0ltcGxJbmNsdWRlcygiVjgkYXJyYXlUeXBlLmgiKTsKKyAg
ICAgICAgQWRkVG9JbXBsSW5jbHVkZXMoIiRhcnJheVR5cGUuaCIpOworICAgICAgICByZXR1cm4g
InY4QXJyYXkoJHZhbHVlKSI7CisgICAgfQorCiAgICAgQWRkSW5jbHVkZXNGb3JUeXBlKCR0eXBl
KTsKIAogICAgICMgc3BlY2lhbCBjYXNlIGZvciBub24tRE9NIG5vZGUgaW50ZXJmYWNlcwpJbmRl
eDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0dPYmplY3QvV2ViS2l0RE9N
VGVzdE9iai5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0
cy90ZXN0L0dPYmplY3QvV2ViS2l0RE9NVGVzdE9iai5jcHAJKHJldmlzaW9uIDExMTE2MCkKKysr
IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9HT2JqZWN0L1dlYktpdERPTVRl
c3RPYmouY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04MTAsMzIgKzgxMCw2IEBAIHdlYmtpdF9kb21f
dGVzdF9vYmpfc2V0X3Rlc3Rfb2JqX2F0dHIoV2UKICAgICBpdGVtLT5zZXRUZXN0T2JqQXR0cihj
b252ZXJ0ZWRfdmFsdWUpOwogfQogCi1XZWJLaXRET01zZXF1ZW5jZTxTY3JpcHRQcm9maWxlPioK
LXdlYmtpdF9kb21fdGVzdF9vYmpfZ2V0X3NlcXVlbmNlX2F0dHIoV2ViS2l0RE9NVGVzdE9iaiog
c2VsZikKLXsKLSAgICBnX3JldHVybl92YWxfaWZfZmFpbChzZWxmLCAwKTsKLSAgICBXZWJDb3Jl
OjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7Ci0gICAgV2ViQ29yZTo6VGVzdE9iaiAqIGl0
ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7Ci0gICAgUGFzc1JlZlB0cjxXZWJDb3JlOjpzZXF1ZW5j
ZTxTY3JpcHRQcm9maWxlPj4gZ19yZXMgPSBXVEY6OmdldFB0cihpdGVtLT5zZXF1ZW5jZUF0dHIo
KSk7Ci0gICAgV2ViS2l0RE9Nc2VxdWVuY2U8U2NyaXB0UHJvZmlsZT4qIHJlcyA9IFdlYktpdDo6
a2l0KGdfcmVzLmdldCgpKTsKLSAgICByZXR1cm4gcmVzOwotfQotCi12b2lkCi13ZWJraXRfZG9t
X3Rlc3Rfb2JqX3NldF9zZXF1ZW5jZV9hdHRyKFdlYktpdERPTVRlc3RPYmoqIHNlbGYsIFdlYktp
dERPTXNlcXVlbmNlPFNjcmlwdFByb2ZpbGU+KiB2YWx1ZSkKLXsKLSAgICBnX3JldHVybl9pZl9m
YWlsKHNlbGYpOwotICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKLSAg
ICBXZWJDb3JlOjpUZXN0T2JqICogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKLSAgICBnX3Jl
dHVybl9pZl9mYWlsKHZhbHVlKTsKLSAgICBXZWJDb3JlOjpzZXF1ZW5jZTxTY3JpcHRQcm9maWxl
PiAqIGNvbnZlcnRlZF92YWx1ZSA9IE5VTEw7Ci0gICAgaWYgKHZhbHVlICE9IE5VTEwpIHsKLSAg
ICAgICAgY29udmVydGVkX3ZhbHVlID0gV2ViS2l0Ojpjb3JlKHZhbHVlKTsKLSAgICAgICAgZ19y
ZXR1cm5faWZfZmFpbChjb252ZXJ0ZWRfdmFsdWUpOwotICAgIH0KLSAgICBpdGVtLT5zZXRTZXF1
ZW5jZUF0dHIoY29udmVydGVkX3ZhbHVlKTsKLX0KLQogV2ViS2l0RE9NVGVzdE9iaioKIHdlYmtp
dF9kb21fdGVzdF9vYmpfZ2V0X3htbF9vYmpfYXR0cihXZWJLaXRET01UZXN0T2JqKiBzZWxmKQog
ewpAQCAtMTU5NSw3ICsxNTY5LDYgQEAgZW51bSB7CiAgICAgUFJPUF9VTlNJR05FRF9MT05HX0xP
TkdfQVRUUiwKICAgICBQUk9QX1NUUklOR19BVFRSLAogICAgIFBST1BfVEVTVF9PQkpfQVRUUiwK
LSAgICBQUk9QX1NFUVVFTkNFX0FUVFIsCiAgICAgUFJPUF9YTUxfT0JKX0FUVFIsCiAgICAgUFJP
UF9DUkVBVEUsCiAgICAgUFJPUF9SRUZMRUNURURfU1RSSU5HX0FUVFIsCkBAIC0xODU1LDEyICsx
ODI4LDYgQEAgc3RhdGljIHZvaWQgd2Via2l0X2RvbV90ZXN0X29ial9nZXRfcHJvcAogICAgICAg
ICBnX3ZhbHVlX3NldF9vYmplY3QodmFsdWUsIFdlYktpdDo6a2l0KHB0ci5nZXQoKSkpOwogICAg
ICAgICBicmVhazsKICAgICB9Ci0gICAgY2FzZSBQUk9QX1NFUVVFTkNFX0FUVFI6Ci0gICAgewot
ICAgICAgICBSZWZQdHI8V2ViQ29yZTo6c2VxdWVuY2U8U2NyaXB0UHJvZmlsZT4+IHB0ciA9IGNv
cmVTZWxmLT5zZXF1ZW5jZUF0dHIoKTsKLSAgICAgICAgZ192YWx1ZV9zZXRfb2JqZWN0KHZhbHVl
LCBXZWJLaXQ6OmtpdChwdHIuZ2V0KCkpKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgfQogICAgIGNh
c2UgUFJPUF9YTUxfT0JKX0FUVFI6CiAgICAgewogICAgICAgICBSZWZQdHI8V2ViQ29yZTo6VGVz
dE9iaj4gcHRyID0gY29yZVNlbGYtPnhtbE9iakF0dHIoKTsKQEAgLTIxNTMsMTMgKzIxMjAsNiBA
QCBHX01BWFVJTlQ2NCwgLyogbWluICovCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdFQktJVF9UWVBFX0RPTV9URVNUX09CSiwgLyog
Z29iamVjdCB0eXBlICovCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIFdFQktJVF9QQVJBTV9SRUFEV1JJVEUpKTsKICAgICBnX29iamVj
dF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5KGdvYmplY3RDbGFzcywKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIFBST1BfU0VRVUVOQ0VfQVRUUiwKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGdfcGFyYW1fc3BlY19vYmplY3QoInNlcXVlbmNlLWF0dHIiLCAv
KiBuYW1lICovCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICJ0ZXN0X29ial9zZXF1ZW5jZS1hdHRyIiwgLyogc2hvcnQgZGVzY3JpcHRp
b24gKi8KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgInJlYWQtd3JpdGUgIFdlYktpdERPTXNlcXVlbmNlPFNjcmlwdFByb2ZpbGU+KiBU
ZXN0T2JqLnNlcXVlbmNlLWF0dHIiLCAvKiBsb25nZXIgLSBjb3VsZCBkbyB3aXRoIHNvbWUgZXh0
cmEgZG9jIHN0dWZmIGhlcmUgKi8KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgV0VCS0lUX1RZUEVfRE9NX1NFUVVFTkNFPFNDUklQVF9Q
Uk9GSUxFPiwgLyogZ29iamVjdCB0eXBlICovCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdFQktJVF9QQVJBTV9SRUFEV1JJVEUpKTsK
LSAgICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5KGdvYmplY3RDbGFzcywKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBST1BfWE1MX09CSl9BVFRSLAogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ19wYXJhbV9zcGVjX29iamVjdCgieG1sLW9i
ai1hdHRyIiwgLyogbmFtZSAqLwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAidGVzdF9vYmpfeG1sLW9iai1hdHRyIiwgLyogc2hvcnQg
ZGVzY3JpcHRpb24gKi8KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVz
dC9HT2JqZWN0L1dlYktpdERPTVRlc3RPYmouaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvR09iamVjdC9XZWJLaXRET01UZXN0T2JqLmgJKHJldmlz
aW9uIDExMTE2MCkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9HT2Jq
ZWN0L1dlYktpdERPTVRlc3RPYmouaAkod29ya2luZyBjb3B5KQpAQCAtNjk3LDI3ICs2OTcsNiBA
QCBXRUJLSVRfQVBJIHZvaWQKIHdlYmtpdF9kb21fdGVzdF9vYmpfc2V0X3Rlc3Rfb2JqX2F0dHIo
V2ViS2l0RE9NVGVzdE9iaiogc2VsZiwgV2ViS2l0RE9NVGVzdE9iaiogdmFsdWUpOwogCiAvKioK
LSAqIHdlYmtpdF9kb21fdGVzdF9vYmpfZ2V0X3NlcXVlbmNlX2F0dHI6Ci0gKiBAc2VsZjogQSAj
V2ViS2l0RE9NVGVzdE9iagotICoKLSAqIFJldHVybnM6ICh0cmFuc2ZlciBub25lKToKLSAqCi0q
Ki8KLVdFQktJVF9BUEkgV2ViS2l0RE9Nc2VxdWVuY2U8U2NyaXB0UHJvZmlsZT4qCi13ZWJraXRf
ZG9tX3Rlc3Rfb2JqX2dldF9zZXF1ZW5jZV9hdHRyKFdlYktpdERPTVRlc3RPYmoqIHNlbGYpOwot
Ci0vKioKLSAqIHdlYmtpdF9kb21fdGVzdF9vYmpfc2V0X3NlcXVlbmNlX2F0dHI6Ci0gKiBAc2Vs
ZjogQSAjV2ViS2l0RE9NVGVzdE9iagotICogQHZhbHVlOiBBICNXZWJLaXRET01zZXF1ZW5jZTxT
Y3JpcHRQcm9maWxlPgotICoKLSAqIFJldHVybnM6ICh0cmFuc2ZlciBub25lKToKLSAqCi0qKi8K
LVdFQktJVF9BUEkgdm9pZAotd2Via2l0X2RvbV90ZXN0X29ial9zZXRfc2VxdWVuY2VfYXR0cihX
ZWJLaXRET01UZXN0T2JqKiBzZWxmLCBXZWJLaXRET01zZXF1ZW5jZTxTY3JpcHRQcm9maWxlPiog
dmFsdWUpOwotCi0vKioKICAqIHdlYmtpdF9kb21fdGVzdF9vYmpfZ2V0X3htbF9vYmpfYXR0cjoK
ICAqIEBzZWxmOiBBICNXZWJLaXRET01UZXN0T2JqCiAgKgpJbmRleDogU291cmNlL1dlYkNvcmUv
YmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE9iai5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE9iai5jcHAJKHJldmlz
aW9uIDExMTE2MCkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9K
U1Rlc3RPYmouY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMyw2ICszMyw3IEBACiAjaW5jbHVkZSAi
SlNFdmVudExpc3RlbmVyLmgiCiAjaW5jbHVkZSAiSlNTVkdEb2N1bWVudC5oIgogI2luY2x1ZGUg
IkpTU1ZHUG9pbnQuaCIKKyNpbmNsdWRlICJKU1NjcmlwdFByb2ZpbGUuaCIKICNpbmNsdWRlICJK
U1Rlc3RDYWxsYmFjay5oIgogI2luY2x1ZGUgIkpTVGVzdE9iai5oIgogI2luY2x1ZGUgIkpTYS5o
IgpAQCAtNDMsMTggKzQ0LDE4IEBACiAjaW5jbHVkZSAiSlNlLmgiCiAjaW5jbHVkZSAiSlNpbnQu
aCIKICNpbmNsdWRlICJKU3NlcXVlbmNlLmgiCi0jaW5jbHVkZSAiSlNzZXF1ZW5jZTxTY3JpcHRQ
cm9maWxlPi5oIgogI2luY2x1ZGUgIktVUkwuaCIKICNpbmNsdWRlICJTVkdEb2N1bWVudC5oIgog
I2luY2x1ZGUgIlNWR1N0YXRpY1Byb3BlcnR5VGVhck9mZi5oIgogI2luY2x1ZGUgIlNjcmlwdEFy
Z3VtZW50cy5oIgogI2luY2x1ZGUgIlNjcmlwdENhbGxTdGFjay5oIgogI2luY2x1ZGUgIlNjcmlw
dENhbGxTdGFja0ZhY3RvcnkuaCIKKyNpbmNsdWRlICJTY3JpcHRQcm9maWxlLmgiCiAjaW5jbHVk
ZSAiU2VyaWFsaXplZFNjcmlwdFZhbHVlLmgiCiAjaW5jbHVkZSAiVGVzdE9iai5oIgogI2luY2x1
ZGUgImJvb2wuaCIKLSNpbmNsdWRlICJzZXF1ZW5jZTxTY3JpcHRQcm9maWxlPi5oIgogI2luY2x1
ZGUgPHJ1bnRpbWUvRXJyb3IuaD4KKyNpbmNsdWRlIDxydW50aW1lL0pTQXJyYXkuaD4KICNpbmNs
dWRlIDxydW50aW1lL0pTU3RyaW5nLmg+CiAjaW5jbHVkZSA8d3RmL0dldFB0ci5oPgogCkBAIC00
NzcsNyArNDc4LDcgQEAgSlNWYWx1ZSBqc1Rlc3RPYmpTZXF1ZW5jZUF0dHIoRXhlY1N0YXRlKgog
ICAgIEpTVGVzdE9iaiogY2FzdGVkVGhpcyA9IHN0YXRpY19jYXN0PEpTVGVzdE9iaio+KGFzT2Jq
ZWN0KHNsb3RCYXNlKSk7CiAgICAgVU5VU0VEX1BBUkFNKGV4ZWMpOwogICAgIFRlc3RPYmoqIGlt
cGwgPSBzdGF0aWNfY2FzdDxUZXN0T2JqKj4oY2FzdGVkVGhpcy0+aW1wbCgpKTsKLSAgICBKU1Zh
bHVlIHJlc3VsdCA9IHRvSlMoZXhlYywgY2FzdGVkVGhpcy0+Z2xvYmFsT2JqZWN0KCksIFdURjo6
Z2V0UHRyKGltcGwtPnNlcXVlbmNlQXR0cigpKSk7CisgICAgSlNWYWx1ZSByZXN1bHQgPSBqc0Fy
cmF5KGV4ZWMsIGNhc3RlZFRoaXMtPmdsb2JhbE9iamVjdCgpLCBpbXBsLT5zZXF1ZW5jZUF0dHIo
KSk7CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIApAQCAtOTY1LDcgKzk2Niw3IEBAIHZvaWQgc2V0
SlNUZXN0T2JqU2VxdWVuY2VBdHRyKEV4ZWNTdGF0ZSoKIHsKICAgICBKU1Rlc3RPYmoqIGNhc3Rl
ZFRoaXMgPSBzdGF0aWNfY2FzdDxKU1Rlc3RPYmoqPih0aGlzT2JqZWN0KTsKICAgICBUZXN0T2Jq
KiBpbXBsID0gc3RhdGljX2Nhc3Q8VGVzdE9iaio+KGNhc3RlZFRoaXMtPmltcGwoKSk7Ci0gICAg
aW1wbC0+c2V0U2VxdWVuY2VBdHRyKHRvc2VxdWVuY2U8U2NyaXB0UHJvZmlsZT4odmFsdWUpKTsK
KyAgICBpbXBsLT5zZXRTZXF1ZW5jZUF0dHIodG9OYXRpdmVBcnJheShleGVjLCB2YWx1ZSkpOwog
fQogCiAKQEAgLTE0MjMsNyArMTQyNCw3IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwg
anNUZXN0T2JqUHIKICAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCiAgICAgICAgIHJldHVy
biBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiAKLSAgICBKU0M6OkpTVmFsdWUgcmVz
dWx0ID0gdG9KUyhleGVjLCBjYXN0ZWRUaGlzLT5nbG9iYWxPYmplY3QoKSwgV1RGOjpnZXRQdHIo
aW1wbC0+bWV0aG9kUmV0dXJuaW5nU2VxdWVuY2UoaW50QXJnKSkpOworICAgIEpTQzo6SlNWYWx1
ZSByZXN1bHQgPSBqc0FycmF5KGV4ZWMsIGNhc3RlZFRoaXMtPmdsb2JhbE9iamVjdCgpLCBpbXBs
LT5tZXRob2RSZXR1cm5pbmdTZXF1ZW5jZShpbnRBcmcpKTsKICAgICByZXR1cm4gSlNWYWx1ZTo6
ZW5jb2RlKHJlc3VsdCk7CiB9CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Njcmlw
dHMvdGVzdC9WOC9WOFRlc3RPYmouY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL3NjcmlwdHMvdGVzdC9WOC9WOFRlc3RPYmouY3BwCShyZXZpc2lvbiAxMTExNjApCisr
KyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvVjgvVjhUZXN0T2JqLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMzIsNiArMzIsNyBAQAogI2luY2x1ZGUgIlNjcmlwdEFyZ3VtZW50
cy5oIgogI2luY2x1ZGUgIlNjcmlwdENhbGxTdGFjay5oIgogI2luY2x1ZGUgIlNjcmlwdENhbGxT
dGFja0ZhY3RvcnkuaCIKKyNpbmNsdWRlICJTY3JpcHRQcm9maWxlLmgiCiAjaW5jbHVkZSAiU2Vy
aWFsaXplZFNjcmlwdFZhbHVlLmgiCiAjaW5jbHVkZSAiVjhCaW5kaW5nLmgiCiAjaW5jbHVkZSAi
VjhCaW5kaW5nTWFjcm9zLmgiCkBAIC00Miw2ICs0Myw3IEBACiAjaW5jbHVkZSAiVjhQcm94eS5o
IgogI2luY2x1ZGUgIlY4U1ZHRG9jdW1lbnQuaCIKICNpbmNsdWRlICJWOFNWR1BvaW50LmgiCisj
aW5jbHVkZSAiVjhTY3JpcHRQcm9maWxlLmgiCiAjaW5jbHVkZSAiVjhUZXN0Q2FsbGJhY2suaCIK
ICNpbmNsdWRlICJWOGEuaCIKICNpbmNsdWRlICJWOGFueS5oIgpAQCAtNTIsNyArNTQsNiBAQAog
I2luY2x1ZGUgIlY4ZS5oIgogI2luY2x1ZGUgIlY4aW50LmgiCiAjaW5jbHVkZSAiVjhzZXF1ZW5j
ZS5oIgotI2luY2x1ZGUgIlY4c2VxdWVuY2U8U2NyaXB0UHJvZmlsZT4uaCIKICNpbmNsdWRlIDx3
dGYvR2V0UHRyLmg+CiAjaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4KICNpbmNsdWRlIDx3dGYv
UmVmUHRyLmg+CkBAIC0yMjMsMTUgKzIyNCwxNSBAQCBzdGF0aWMgdjg6OkhhbmRsZTx2ODo6VmFs
dWU+IHNlcXVlbmNlQXR0CiB7CiAgICAgSU5DX1NUQVRTKCJET00uVGVzdE9iai5zZXF1ZW5jZUF0
dHIuX2dldCIpOwogICAgIFRlc3RPYmoqIGltcCA9IFY4VGVzdE9iajo6dG9OYXRpdmUoaW5mby5I
b2xkZXIoKSk7Ci0gICAgcmV0dXJuIHRvVjgoaW1wLT5zZXF1ZW5jZUF0dHIoKSk7CisgICAgcmV0
dXJuIHY4QXJyYXkoaW1wLT5zZXF1ZW5jZUF0dHIoKSk7CiB9CiAKIHN0YXRpYyB2b2lkIHNlcXVl
bmNlQXR0ckF0dHJTZXR0ZXIodjg6OkxvY2FsPHY4OjpTdHJpbmc+IG5hbWUsIHY4OjpMb2NhbDx2
ODo6VmFsdWU+IHZhbHVlLCBjb25zdCB2ODo6QWNjZXNzb3JJbmZvJiBpbmZvKQogewogICAgIElO
Q19TVEFUUygiRE9NLlRlc3RPYmouc2VxdWVuY2VBdHRyLl9zZXQiKTsKICAgICBUZXN0T2JqKiBp
bXAgPSBWOFRlc3RPYmo6OnRvTmF0aXZlKGluZm8uSG9sZGVyKCkpOwotICAgIHNlcXVlbmNlPFNj
cmlwdFByb2ZpbGU+KiB2ID0gVjhzZXF1ZW5jZTxTY3JpcHRQcm9maWxlPjo6SGFzSW5zdGFuY2Uo
dmFsdWUpID8gVjhzZXF1ZW5jZTxTY3JpcHRQcm9maWxlPjo6dG9OYXRpdmUodjg6OkhhbmRsZTx2
ODo6T2JqZWN0Pjo6Q2FzdCh2YWx1ZSkpIDogMDsKLSAgICBpbXAtPnNldFNlcXVlbmNlQXR0cihX
VEY6OmdldFB0cih2KSk7CisgICAgVmVjdG9yPFNjcmlwdFByb2ZpbGU+IHYgPSB0b05hdGl2ZUFy
cmF5KHZhbHVlKTsKKyAgICBpbXAtPnNldFNlcXVlbmNlQXR0cih2KTsKICAgICByZXR1cm47CiB9
CiAKQEAgLTEwNzEsNyArMTA3Miw3IEBAIHN0YXRpYyB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gbWV0
aG9kUmV0dXIKICAgICAgICAgcmV0dXJuIHRocm93RXJyb3IoIk5vdCBlbm91Z2ggYXJndW1lbnRz
IiwgVjhQcm94eTo6VHlwZUVycm9yKTsKICAgICBUZXN0T2JqKiBpbXAgPSBWOFRlc3RPYmo6OnRv
TmF0aXZlKGFyZ3MuSG9sZGVyKCkpOwogICAgIEVYQ0VQVElPTl9CTE9DSyhpbnQsIGludEFyZywg
dG9JbnQzMihNQVlCRV9NSVNTSU5HX1BBUkFNRVRFUihhcmdzLCAwLCBEZWZhdWx0SXNVbmRlZmlu
ZWQpKSk7Ci0gICAgcmV0dXJuIHRvVjgoaW1wLT5tZXRob2RSZXR1cm5pbmdTZXF1ZW5jZShpbnRB
cmcpKTsKKyAgICByZXR1cm4gdjhBcnJheShpbXAtPm1ldGhvZFJldHVybmluZ1NlcXVlbmNlKGlu
dEFyZykpOwogfQogCiBzdGF0aWMgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IG1ldGhvZFRoYXRSZXF1
aXJlc0FsbEFyZ3NBbmRUaHJvd3NDYWxsYmFjayhjb25zdCB2ODo6QXJndW1lbnRzJiBhcmdzKQpJ
bmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvVjhCaW5kaW5nLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvVjhCaW5kaW5nLmgJKHJldmlzaW9uIDExMTE2
MCkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4QmluZGluZy5oCSh3b3JraW5nIGNv
cHkpCkBAIC0yODYsNiArMjg2LDM2IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgcmV0
dXJuIHY4RXh0ZXJuYWxTdHJpbmcoc3RyaW5nKTsKICAgICB9CiAKKyAgICB0ZW1wbGF0ZTx0eXBl
bmFtZSBJdGVyYWJsZT4KKyAgICB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gdjhBcnJheShjb25zdCBJ
dGVyYWJsZSYgaXRlcmF0b3IpCisgICAgeworICAgICAgICB2ODo6TG9jYWw8djg6OkFycmF5PiBy
ZXN1bHQgPSB2ODo6QXJyYXk6Ok5ldyhpdGVyYXRvci5zaXplKCkpOworICAgICAgICBpbnQgaW5k
ZXggPSAwOworICAgICAgICB0eXBlbmFtZSBJdGVyYWJsZTo6Y29uc3RfaXRlcmF0b3IgZW5kID0g
aXRlcmF0b3IuZW5kKCk7CisgICAgICAgIGZvciAodHlwZW5hbWUgSXRlcmFibGU6OmNvbnN0X2l0
ZXJhdG9yIGl0ZXIgPSBpdGVyYXRvci5iZWdpbigpOyBpdGVyICE9IGVuZDsgKytpdGVyKQorICAg
ICAgICAgICAgcmVzdWx0LT5TZXQodjg6OkludGVnZXI6Ok5ldyhpbmRleCsrKSwgdG9WOChXVEY6
OmdldFB0cigqaXRlcikpKTsKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9CisKKyAgICB0
ZW1wbGF0ZSA8Y2xhc3MgVD4KKyAgICBWZWN0b3I8VD4gdG9OYXRpdmVBcnJheSh2ODo6SGFuZGxl
PHY4OjpWYWx1ZT4gdmFsdWUpCisgICAgeworICAgICAgICBpZiAoIXZhbHVlLT5Jc0FycmF5KCkp
CisgICAgICAgICAgICByZXR1cm4gVmVjdG9yPFQ+KCk7CisKKyAgICAgICAgdjg6OkxvY2FsPHY4
OjpWYWx1ZT4gdjhWYWx1ZSh2ODo6TG9jYWw8djg6OlZhbHVlPjo6TmV3KHZhbHVlKSk7CisKKyAg
ICAgICAgVmVjdG9yPFQ+IHJlc3VsdDsKKyAgICAgICAgdjg6OkxvY2FsPHY4OjpBcnJheT4gYXJy
YXkgPSB2ODo6TG9jYWw8djg6OkFycmF5Pjo6Q2FzdCh2OFZhbHVlKTsKKyAgICAgICAgc2l6ZV90
IGxlbmd0aCA9IGFycmF5LT5MZW5ndGgoKTsKKworICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsg
aSA8IGxlbmd0aDsgKytpKSB7CisgICAgICAgICAgICBTdHJpbmcgaW5kZXhlZFZhbHVlID0gdjhT
dHJpbmdUb1dlYkNvcmVTdHJpbmcoYXJyYXktPkdldChpKSk7CisgICAgICAgICAgICByZXN1bHQu
YXBwZW5kKGluZGV4ZWRWYWx1ZSk7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHJlc3VsdDsK
KyAgICB9CisKICAgICAvLyBFbmFibGVzIGNhY2hpbmcgdjggd3JhcHBlcnMgY3JlYXRlZCBmb3Ig
V1RGOjpTdHJpbmdJbXBsLiAgQ3VycmVudGx5IHRoaXMgY2FjaGUgcmVxdWlyZXMKICAgICAvLyBh
bGwgdGhlIGNhbGxzIChib3RoIHRvIGNvbnZlcnQgV1RGOjpTdHJpbmcgdG8gdjg6OlN0cmluZyBh
bmQgdG8gR0MgdGhlIGhhbmRsZSkKICAgICAvLyB0byBiZSBwZXJmb3JtZWQgb24gdGhlIG1haW4g
dGhyZWFkLgpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4Q29uc29s
ZUN1c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvY3Vz
dG9tL1Y4Q29uc29sZUN1c3RvbS5jcHAJKHJldmlzaW9uIDExMTE2MCkKKysrIFNvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOENvbnNvbGVDdXN0b20uY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0zNiwzMiArMzYsMTMgQEAKICNpbmNsdWRlICJTY3JpcHRBcmd1bWVudHMuaCIKICNpbmNs
dWRlICJTY3JpcHRDYWxsU3RhY2suaCIKICNpbmNsdWRlICJTY3JpcHRDYWxsU3RhY2tGYWN0b3J5
LmgiCi0jaW5jbHVkZSAiU2NyaXB0UHJvZmlsZS5oIgogI2luY2x1ZGUgIlY4QmluZGluZy5oIgog
I2luY2x1ZGUgIlY4QmluZGluZ01hY3Jvcy5oIgogI2luY2x1ZGUgIlY4TWVtb3J5SW5mby5oIgog
I2luY2x1ZGUgIlY4UHJveHkuaCIKLSNpbmNsdWRlICJWOFNjcmlwdFByb2ZpbGUuaCIKIAogbmFt
ZXNwYWNlIFdlYkNvcmUgewogCi10eXBlZGVmIFZlY3RvcjxSZWZQdHI8U2NyaXB0UHJvZmlsZT4g
PiBQcm9maWxlc0FycmF5OwotCi0jaWYgRU5BQkxFKEpBVkFTQ1JJUFRfREVCVUdHRVIpCi12ODo6
SGFuZGxlPHY4OjpWYWx1ZT4gVjhDb25zb2xlOjpwcm9maWxlc0FjY2Vzc29yR2V0dGVyKHY4OjpM
b2NhbDx2ODo6U3RyaW5nPiBuYW1lLCBjb25zdCB2ODo6QWNjZXNzb3JJbmZvJiBpbmZvKQotewot
ICAgIElOQ19TVEFUUygiRE9NLkNvbnNvbGUucHJvZmlsZXNBY2Nlc3NvckdldHRlciIpOwotICAg
IENvbnNvbGUqIGltcCA9IFY4Q29uc29sZTo6dG9OYXRpdmUoaW5mby5Ib2xkZXIoKSk7Ci0gICAg
Y29uc3QgUHJvZmlsZXNBcnJheSYgcHJvZmlsZXMgPSBpbXAtPnByb2ZpbGVzKCk7Ci0gICAgdjg6
OkhhbmRsZTx2ODo6QXJyYXk+IHJlc3VsdCA9IHY4OjpBcnJheTo6TmV3KHByb2ZpbGVzLnNpemUo
KSk7Ci0gICAgaW50IGluZGV4ID0gMDsKLSAgICBQcm9maWxlc0FycmF5Ojpjb25zdF9pdGVyYXRv
ciBlbmQgPSBwcm9maWxlcy5lbmQoKTsKLSAgICBmb3IgKFByb2ZpbGVzQXJyYXk6OmNvbnN0X2l0
ZXJhdG9yIGl0ZXIgPSBwcm9maWxlcy5iZWdpbigpOyBpdGVyICE9IGVuZDsgKytpdGVyKQotICAg
ICAgICByZXN1bHQtPlNldCh2ODo6SW50ZWdlcjo6TmV3KGluZGV4KyspLCB0b1Y4KGl0ZXItPmdl
dCgpKSk7Ci0gICAgcmV0dXJuIHJlc3VsdDsKLX0KLSNlbmRpZgotCiB2ODo6SGFuZGxlPHY4OjpW
YWx1ZT4gVjhDb25zb2xlOjp0cmFjZUNhbGxiYWNrKGNvbnN0IHY4OjpBcmd1bWVudHMmIGFyZ3Mp
CiB7CiAgICAgSU5DX1NUQVRTKCJET00uQ29uc29sZS50cmFjZUNhbGxiYWNrIik7CkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9wYWdlL0NvbnNvbGUuaWRsCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL3BhZ2UvQ29uc29sZS5pZGwJKHJldmlzaW9uIDExMTE2MCkKKysrIFNvdXJjZS9XZWJDb3Jl
L3BhZ2UvQ29uc29sZS5pZGwJKHdvcmtpbmcgY29weSkKQEAgLTQ2LDcgKzQ2LDcgQEAgbW9kdWxl
IHdpbmRvdyB7CiAgICAgICAgIFtDYWxsV2l0aD1TY3JpcHRBcmd1bWVudHN8Q2FsbFN0YWNrXSB2
b2lkIG1hcmtUaW1lbGluZSgpOwogCiAjaWYgZGVmaW5lZChFTkFCTEVfSkFWQVNDUklQVF9ERUJV
R0dFUikgJiYgRU5BQkxFX0pBVkFTQ1JJUFRfREVCVUdHRVIKLSAgICAgICAgcmVhZG9ubHkgYXR0
cmlidXRlIFtDdXN0b21HZXR0ZXJdIEFycmF5IHByb2ZpbGVzOworICAgICAgICByZWFkb25seSBh
dHRyaWJ1dGUgc2VxdWVuY2U8U2NyaXB0UHJvZmlsZT4gcHJvZmlsZXM7CiAgICAgICAgIFtDdXN0
b21dIHZvaWQgcHJvZmlsZShpbiBET01TdHJpbmcgdGl0bGUpOwogICAgICAgICBbQ3VzdG9tXSB2
b2lkIHByb2ZpbGVFbmQoaW4gRE9NU3RyaW5nIHRpdGxlKTsKICNlbmRpZgo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>132850</attachid>
            <date>2012-03-20 10:31:30 -0700</date>
            <delta_ts>2012-03-20 11:27:08 -0700</delta_ts>
            <desc>patch_for_review</desc>
            <filename>land_me.diff</filename>
            <type>text/plain</type>
            <size>23948</size>
            <attacher name="Vineet Chaudhary (vineetc)">code.vineet</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDExMTQwNSkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDUyIEBACisyMDEyLTAzLTIwICBWaW5lZXQg
Q2hhdWRoYXJ5ICA8cmdmNzQ4QG1vdG9yb2xhLmNvbT4KKworICAgICAgICBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9ODA2OTYKKyAgICAgICAgUmVtb3ZlIGN1c3RvbSBi
aW5kaW5ncyBmb3IgYXR0cmlidXRlIHR5cGUgQXJyYXkuCisKKyAgICAgICAgUmV2aWV3ZWQgYnkg
Tk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgTm8gbmV3IHRlc3RzLgorCisgICAgICAgICogYmlu
ZGluZ3MvanMvSlNDb25zb2xlQ3VzdG9tLmNwcDogUmVtb3ZlZCBjdXN0b20gZnVuY3Rpb24uCisg
ICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU0RPTUJpbmRpbmcuaDog
QWRkZWQgdGVtcGxhdGUganNBcnJheSBhbmQgdG9OYXRpdmVBcnJheS4KKyAgICAgICAgKFdlYkNv
cmUpOgorICAgICAgICAoV2ViQ29yZTo6anNBcnJheSk6CisgICAgICAgIChXZWJDb3JlOjp0b05h
dGl2ZUFycmF5KToKKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0b3IucG06
IE1vZGlmaWVkIGNvZGVnZW5lcmF0b3JzIHRvIGdlbmVyYXRlIGFwcHJvcHJpYXRlIGNvZGUuCisg
ICAgICAgIChHZXRBcnJheVR5cGUpOiBBZGRlZCBHZXRBcnJheVR5cGUgdG8gZ2V0IHJldHVybiB0
eXBlIG9mIGF0dHJpYnV0ZSBpbnRlcmZhY2UuCisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy9D
b2RlR2VuZXJhdG9yR09iamVjdC5wbTogTW9kaWZpZWQgY29kZWdlbmVyYXRvcnMgdG8gZ2VuZXJh
dGUgYXBwcm9wcmlhdGUgY29kZS4KKyAgICAgICAgKFNraXBBdHRyaWJ1dGUpOgorICAgICAgICAq
IGJpbmRpbmdzL3NjcmlwdHMvQ29kZUdlbmVyYXRvckpTLnBtOiBNb2RpZmllZCBjb2RlZ2VuZXJh
dG9ycyB0byBnZW5lcmF0ZSBhcHByb3ByaWF0ZSBjb2RlLgorICAgICAgICAoQWRkSW5jbHVkZXNG
b3JUeXBlKToKKyAgICAgICAgKEpTVmFsdWVUb05hdGl2ZSk6CisgICAgICAgIChOYXRpdmVUb0pT
VmFsdWUpOgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvQ29kZUdlbmVyYXRvclY4LnBtOiBN
b2RpZmllZCBjb2RlZ2VuZXJhdG9ycyB0byBnZW5lcmF0ZSBhcHByb3ByaWF0ZSBjb2RlLgorICAg
ICAgICAoR2VuZXJhdGVOb3JtYWxBdHRyR2V0dGVyKToKKyAgICAgICAgKEdlbmVyYXRlTm9ybWFs
QXR0clNldHRlcik6CisgICAgICAgIChKU1ZhbHVlVG9OYXRpdmUpOgorICAgICAgICAoTmF0aXZl
VG9KU1ZhbHVlKToKKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvR09iamVjdC9XZWJL
aXRET01UZXN0T2JqLmNwcDogVXBkYXRlZCByZXN1bHRzIGZyb20gcnVubmluZyBiaW5kaW5nIHRl
c3RzLgorICAgICAgICAod2Via2l0X2RvbV90ZXN0X29ial9nZXRfcHJvcGVydHkpOgorICAgICAg
ICAod2Via2l0X2RvbV90ZXN0X29ial9jbGFzc19pbml0KToKKyAgICAgICAgKiBiaW5kaW5ncy9z
Y3JpcHRzL3Rlc3QvR09iamVjdC9XZWJLaXRET01UZXN0T2JqLmg6IERpdHRvLgorICAgICAgICAq
IGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RPYmouY3BwOiBEaXR0by4KKyAgICAgICAg
KFdlYkNvcmU6OmpzVGVzdE9ialNlcXVlbmNlQXR0cik6CisgICAgICAgIChXZWJDb3JlOjpzZXRK
U1Rlc3RPYmpTZXF1ZW5jZUF0dHIpOgorICAgICAgICAoV2ViQ29yZTo6anNUZXN0T2JqUHJvdG90
eXBlRnVuY3Rpb25NZXRob2RSZXR1cm5pbmdTZXF1ZW5jZSk6CisgICAgICAgICogYmluZGluZ3Mv
c2NyaXB0cy90ZXN0L1Y4L1Y4VGVzdE9iai5jcHA6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6
VGVzdE9iakludGVybmFsOjpzZXF1ZW5jZUF0dHJBdHRyR2V0dGVyKToKKyAgICAgICAgKFdlYkNv
cmU6OlRlc3RPYmpJbnRlcm5hbDo6c2VxdWVuY2VBdHRyQXR0clNldHRlcik6CisgICAgICAgIChX
ZWJDb3JlOjpUZXN0T2JqSW50ZXJuYWw6Om1ldGhvZFJldHVybmluZ1NlcXVlbmNlQ2FsbGJhY2sp
OgorICAgICAgICAqIGJpbmRpbmdzL3Y4L1Y4QmluZGluZy5oOiBBZGRlZCB0ZW1wbGF0ZSB2OEFy
cmF5IGFuZCB0b05hdGl2ZUFycmF5LgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChXZWJD
b3JlOjp2OEFycmF5KToKKyAgICAgICAgKFdlYkNvcmU6OnRvTmF0aXZlQXJyYXkpOgorICAgICAg
ICAqIGJpbmRpbmdzL3Y4L2N1c3RvbS9WOENvbnNvbGVDdXN0b20uY3BwOiBSZW1vdmVkIGN1c3Rv
bSBmdW5jdGlvbi4KKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAqIHBhZ2UvQ29uc29sZS5p
ZGw6IFJlcGxhY2VkIGF0dHJpYnV0ZSB0eXBlIEFycmF5IHRvIHNlcXVlbmNlPFNyaXB0UHJvZmls
ZT4gdG8gcmVtb3ZlCisgICAgICAgICAgY3VzdG9tIGJpbmRpbmdzLgorCiAyMDEyLTAzLTIwICBH
eXV5b3VuZyBLaW0gIDxneXV5b3VuZy5raW1Ac2Ftc3VuZy5jb20+CiAKICAgICAgICAgQ29udmVy
dCBoYXNTcGVsbGluZ01hcmtlciB0byB1c2UgSW50ZXJuYWxzIGludGVyZmFjZS4KSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTQ29uc29sZUN1c3RvbS5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNDb25zb2xlQ3VzdG9tLmNwcAkocmV2aXNp
b24gMTExMTUzKQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNDb25zb2xlQ3VzdG9t
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzAsMzEgKzMwLDE0IEBACiAjaW5jbHVkZSAiSlNDb25z
b2xlLmgiCiAKICNpbmNsdWRlICJDb25zb2xlLmgiCi0jaW5jbHVkZSAiSlNTY3JpcHRQcm9maWxl
LmgiCiAjaW5jbHVkZSAiU2NyaXB0Q2FsbFN0YWNrLmgiCiAjaW5jbHVkZSAiU2NyaXB0Q2FsbFN0
YWNrRmFjdG9yeS5oIgotI2luY2x1ZGUgIlNjcmlwdFByb2ZpbGUuaCIKLSNpbmNsdWRlIDxydW50
aW1lL0pTQXJyYXkuaD4KICNpbmNsdWRlIDx3dGYvT3duUHRyLmg+CiAKIHVzaW5nIG5hbWVzcGFj
ZSBKU0M7CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotdHlwZWRlZiBWZWN0b3I8UmVmUHRyPFNj
cmlwdFByb2ZpbGU+ID4gUHJvZmlsZXNBcnJheTsKLQotSlNWYWx1ZSBKU0NvbnNvbGU6OnByb2Zp
bGVzKEV4ZWNTdGF0ZSogZXhlYykgY29uc3QKLXsKLSAgICBjb25zdCBQcm9maWxlc0FycmF5JiBw
cm9maWxlcyA9IGltcGwoKS0+cHJvZmlsZXMoKTsKLSAgICBNYXJrZWRBcmd1bWVudEJ1ZmZlciBs
aXN0OwotCi0gICAgUHJvZmlsZXNBcnJheTo6Y29uc3RfaXRlcmF0b3IgZW5kID0gcHJvZmlsZXMu
ZW5kKCk7Ci0gICAgZm9yIChQcm9maWxlc0FycmF5Ojpjb25zdF9pdGVyYXRvciBpdGVyID0gcHJv
ZmlsZXMuYmVnaW4oKTsgaXRlciAhPSBlbmQ7ICsraXRlcikKLSAgICAgICAgbGlzdC5hcHBlbmQo
dG9KUyhleGVjLCBnbG9iYWxPYmplY3QoKSwgaXRlci0+Z2V0KCkpKTsKLQotICAgIHJldHVybiBj
b25zdHJ1Y3RBcnJheShleGVjLCBnbG9iYWxPYmplY3QoKSwgbGlzdCk7Ci19Ci0KIEpTVmFsdWUg
SlNDb25zb2xlOjpwcm9maWxlKEV4ZWNTdGF0ZSogZXhlYykKIHsKICAgICBSZWZQdHI8U2NyaXB0
Q2FsbFN0YWNrPiBjYWxsU3RhY2soY3JlYXRlU2NyaXB0Q2FsbFN0YWNrKGV4ZWMsIDEpKTsKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NQmluZGluZy5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NQmluZGluZy5oCShyZXZpc2lvbiAx
MTExNTMpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTUJpbmRpbmcuaAkod29y
a2luZyBjb3B5KQpAQCAtMzUsNiArMzUsNyBAQAogI2luY2x1ZGUgIlN0eWxlZEVsZW1lbnQuaCIK
ICNpbmNsdWRlIDxoZWFwL1dlYWsuaD4KICNpbmNsdWRlIDxydW50aW1lL0Z1bmN0aW9uUHJvdG90
eXBlLmg+CisjaW5jbHVkZSA8cnVudGltZS9KU0FycmF5Lmg+CiAjaW5jbHVkZSA8cnVudGltZS9M
b29rdXAuaD4KICNpbmNsdWRlIDxydW50aW1lL09iamVjdFByb3RvdHlwZS5oPgogI2luY2x1ZGUg
PHd0Zi9Gb3J3YXJkLmg+CkBAIC0yNzgsNiArMjc5LDM0IEBAIGVudW0gUGFyYW1ldGVyRGVmYXVs
dFBvbGljeSB7CiAgICAgICAgIHJldHVybiB0b0pTKGV4ZWMsIGdsb2JhbE9iamVjdCwgcHRyLmdl
dCgpKTsKICAgICB9CiAKKyAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgSXRlcmFibGU+CisgICAgSlND
OjpKU1ZhbHVlIGpzQXJyYXkoSlNDOjpFeGVjU3RhdGUqIGV4ZWMsIEpTRE9NR2xvYmFsT2JqZWN0
KiBnbG9iYWxPYmplY3QsIGNvbnN0IEl0ZXJhYmxlJiBpdGVyYXRvcikKKyAgICB7CisgICAgICAg
IEpTQzo6TWFya2VkQXJndW1lbnRCdWZmZXIgbGlzdDsKKyAgICAgICAgdHlwZW5hbWUgSXRlcmFi
bGU6OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IGl0ZXJhdG9yLmVuZCgpOworCisgICAgICAgIGZvciAo
dHlwZW5hbWUgSXRlcmFibGU6OmNvbnN0X2l0ZXJhdG9yIGl0ZXIgPSBpdGVyYXRvci5iZWdpbigp
OyBpdGVyICE9IGVuZDsgKytpdGVyKQorICAgICAgICAgICAgbGlzdC5hcHBlbmQodG9KUyhleGVj
LCBnbG9iYWxPYmplY3QsIFdURjo6Z2V0UHRyKCppdGVyKSkpOworCisgICAgICAgIHJldHVybiBK
U0M6OmNvbnN0cnVjdEFycmF5KGV4ZWMsIGxpc3QpOworICAgIH0KKworICAgIHRlbXBsYXRlIDxj
bGFzcyBUPgorICAgIFZlY3RvcjxUPiB0b05hdGl2ZUFycmF5KEpTQzo6RXhlY1N0YXRlKiBleGVj
LCBKU0M6OkpTVmFsdWUgdmFsdWUpCisgICAgeworICAgICAgICBpZiAoIWlzSlNBcnJheSh2YWx1
ZSkpCisgICAgICAgICAgICByZXR1cm4gVmVjdG9yPFQ+KCk7CisKKyAgICAgICAgVmVjdG9yPFQ+
IHJlc3VsdDsKKyAgICAgICAgSlNDOjpKU0FycmF5KiBhcnJheSA9IGFzQXJyYXkodmFsdWUpOwor
CisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBhcnJheS0+bGVuZ3RoKCk7ICsraSkg
eworICAgICAgICAgICAgU3RyaW5nIGluZGV4ZWRWYWx1ZSA9IHVzdHJpbmdUb1N0cmluZyhhcnJh
eS0+Z2V0SW5kZXgoaSkudG9TdHJpbmcoZXhlYyktPnZhbHVlKGV4ZWMpKTsKKyAgICAgICAgICAg
IHJlc3VsdC5hcHBlbmQoaW5kZXhlZFZhbHVlKTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4g
cmVzdWx0OworICAgIH0KKwogICAgIC8vIFZhbGlkYXRlcyB0aGF0IHRoZSBwYXNzZWQgb2JqZWN0
IGlzIGEgc2VxdWVuY2UgdHlwZSBwZXIgc2VjdGlvbiA0LjEuMTMgb2YgdGhlIFdlYklETCBzcGVj
LgogICAgIEpTQzo6SlNPYmplY3QqIHRvSlNTZXF1ZW5jZShKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6
SlNWYWx1ZSwgdW5zaWduZWQmKTsKIApJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2Ny
aXB0cy9Db2RlR2VuZXJhdG9yLnBtCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL3NjcmlwdHMvQ29kZUdlbmVyYXRvci5wbQkocmV2aXNpb24gMTExMTUzKQorKysgU291cmNl
L1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy9Db2RlR2VuZXJhdG9yLnBtCSh3b3JraW5nIGNvcHkp
CkBAIC00NDUsNiArNDQ1LDE1IEBAIHN1YiBJc1NWR0FuaW1hdGVkVHlwZQogICAgIHJldHVybiAw
OwogfQogCitzdWIgR2V0QXJyYXlUeXBlCit7CisgICAgbXkgJG9iamVjdCA9IHNoaWZ0OworICAg
IG15ICR0eXBlID0gc2hpZnQ7CisKKyAgICByZXR1cm4gJDEgaWYgJHR5cGUgPX4gL15zZXF1ZW5j
ZTwoW1x3XGRfXSspPi4qLzsKKyAgICByZXR1cm4gIiI7Cit9CisKICMgVXBwZXJjYXNlIHRoZSBm
aXJzdCBsZXR0ZXIgd2hpbGUgcmVzcGVjdGluZyBXZWJLaXQgc3R5bGUgZ3VpZGVsaW5lcy4KICMg
RS5nLiwgeG1sRW5jb2RpbmcgYmVjb21lcyBYTUxFbmNvZGluZywgYnV0IHhtbGxsYW5nIGJlY29t
ZXMgWG1sbGFuZy4KIHN1YiBXS191Y2ZpcnN0CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy9zY3JpcHRzL0NvZGVHZW5lcmF0b3JHT2JqZWN0LnBtCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvQ29kZUdlbmVyYXRvckdPYmplY3QucG0JKHJldmlzaW9u
IDExMTE1MykKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvQ29kZUdlbmVyYXRv
ckdPYmplY3QucG0JKHdvcmtpbmcgY29weSkKQEAgLTE2NCw2ICsxNjQsMTAgQEAgc3ViIFNraXBB
dHRyaWJ1dGUgewogICAgICAgICByZXR1cm4gMTsKICAgICB9CiAKKyAgICBpZiAoJGNvZGVHZW5l
cmF0b3ItPkdldEFycmF5VHlwZSgkcHJvcFR5cGUpKSB7CisgICAgICAgIHJldHVybiAxOworICAg
IH0KKwogICAgICMgVGhpcyBpcyBmb3IgRE9NV2luZG93LmlkbCBsb2NhdGlvbiBhdHRyaWJ1dGUK
ICAgICBpZiAoJGF0dHJpYnV0ZS0+c2lnbmF0dXJlLT5uYW1lIGVxICJsb2NhdGlvbiIpIHsKICAg
ICAgICAgcmV0dXJuIDE7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL0Nv
ZGVHZW5lcmF0b3JKUy5wbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9z
Y3JpcHRzL0NvZGVHZW5lcmF0b3JKUy5wbQkocmV2aXNpb24gMTExMTUzKQorKysgU291cmNlL1dl
YkNvcmUvYmluZGluZ3Mvc2NyaXB0cy9Db2RlR2VuZXJhdG9ySlMucG0JKHdvcmtpbmcgY29weSkK
QEAgLTI2Niw2ICsyNjYsNyBAQCBzdWIgQWRkSW5jbHVkZXNGb3JUeXBlCiAgICAgICAgICRpbmNs
dWRlc1JlZi0+eyJKUyR7dHlwZX0uaCJ9ID0gMTsKICAgICB9IGVsc2lmIChJc1R5cGVkQXJyYXlU
eXBlKCR0eXBlKSkgewogICAgICAgICAkaW5jbHVkZXNSZWYtPnsiPHd0Zi8ke3R5cGV9Lmg+In0g
PSAxOworICAgIH0gZWxzaWYgKCRjb2RlR2VuZXJhdG9yLT5HZXRBcnJheVR5cGUoJHR5cGUpKSB7
CiAgICAgfSBlbHNlIHsKICAgICAgICAgIyBkZWZhdWx0LCBpbmNsdWRlIHRoZSBzYW1lIG5hbWVk
IGZpbGUKICAgICAgICAgJGluY2x1ZGVzUmVmLT57IiR7dHlwZX0uaCJ9ID0gMTsKQEAgLTI5NDUs
NiArMjk0NiwxMCBAQCBzdWIgSlNWYWx1ZVRvTmF0aXZlCiAgICAgQWRkVG9JbXBsSW5jbHVkZXMo
IkpTQ3VzdG9tVm9pZENhbGxiYWNrLmgiLCAkY29uZGl0aW9uYWwpIGlmICR0eXBlIGVxICJWb2lk
Q2FsbGJhY2siOwogICAgIEFkZFRvSW1wbEluY2x1ZGVzKCJFdmVudC5oIiwgJGNvbmRpdGlvbmFs
KSBpZiAkdHlwZSBlcSAiRXZlbnQiOwogCisgICAgaWYgKCRjb2RlR2VuZXJhdG9yLT5HZXRBcnJh
eVR5cGUoJHR5cGUpKSB7CisgICAgICAgIHJldHVybiAidG9OYXRpdmVBcnJheShleGVjLCAkdmFs
dWUpIjsKKyAgICB9CisKICAgICAjIERlZmF1bHQsIGFzc3VtZSBhdXRvZ2VuZXJhdGVkIHR5cGUg
Y29udmVyc2lvbiByb3V0aW5lcwogICAgIEFkZFRvSW1wbEluY2x1ZGVzKCJKUyR0eXBlLmgiLCAk
Y29uZGl0aW9uYWwpOwogICAgIHJldHVybiAidG8kdHlwZSgkdmFsdWUpIjsKQEAgLTMwMDQsNiAr
MzAwOSwxNCBAQCBzdWIgTmF0aXZlVG9KU1ZhbHVlCiAgICAgICAgIEFkZFRvSW1wbEluY2x1ZGVz
KCJOYW1lTm9kZUxpc3QuaCIsICRjb25kaXRpb25hbCk7CiAgICAgfQogCisgICAgbXkgJGFycmF5
VHlwZSA9ICRjb2RlR2VuZXJhdG9yLT5HZXRBcnJheVR5cGUoJHR5cGUpOworICAgIGlmICgkYXJy
YXlUeXBlKSB7CisgICAgICAgIEFkZFRvSW1wbEluY2x1ZGVzKCI8cnVudGltZS9KU0FycmF5Lmg+
IiwgJGNvbmRpdGlvbmFsKTsKKyAgICAgICAgQWRkVG9JbXBsSW5jbHVkZXMoIkpTJGFycmF5VHlw
ZS5oIiwgJGNvbmRpdGlvbmFsKTsKKyAgICAgICAgQWRkVG9JbXBsSW5jbHVkZXMoIiRhcnJheVR5
cGUuaCIsICRjb25kaXRpb25hbCk7CisgICAgICAgIHJldHVybiAianNBcnJheShleGVjLCAkdGhp
c1ZhbHVlLT5nbG9iYWxPYmplY3QoKSwgJHZhbHVlKSI7CisgICAgfQorCiAgICAgaWYgKCR0eXBl
IGVxICJET01PYmplY3QiKSB7CiAgICAgICAgIGlmICgkaW1wbENsYXNzTmFtZSBlcSAiRG9jdW1l
bnQiKSB7CiAgICAgICAgICAgICBBZGRUb0ltcGxJbmNsdWRlcygiSlNDYW52YXNSZW5kZXJpbmdD
b250ZXh0MkQuaCIsICRjb25kaXRpb25hbCk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy9zY3JpcHRzL0NvZGVHZW5lcmF0b3JWOC5wbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0b3JWOC5wbQkocmV2aXNpb24gMTExMTUzKQor
KysgU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy9Db2RlR2VuZXJhdG9yVjgucG0JKHdv
cmtpbmcgY29weSkKQEAgLTkyMyw2ICs5MjMsMTcgQEAgRU5ECiAgICAgaWYgKCFJc05vZGVTdWJU
eXBlKCRkYXRhTm9kZSkgJiYgJGF0dHJOYW1lIG5lICJzZWxmIiAmJiAoSXNXcmFwcGVyVHlwZSgk
cmV0dXJuVHlwZSkgJiYgKCRhdHRyaWJ1dGUtPnR5cGUgPX4gL15yZWFkb25seS8gfHwgJGF0dHJp
YnV0ZS0+c2lnbmF0dXJlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPnsiUmVwbGFjZWFibGUifSkKICAg
ICAgICAgJiYgJHJldHVyblR5cGUgbmUgIkV2ZW50VGFyZ2V0IiAmJiAkcmV0dXJuVHlwZSBuZSAi
U2VyaWFsaXplZFNjcmlwdFZhbHVlIiAmJiAkcmV0dXJuVHlwZSBuZSAiRE9NV2luZG93IiAKICAg
ICAgICAgJiYgJHJldHVyblR5cGUgIX4gL1NWRy8gJiYgJHJldHVyblR5cGUgIX4gL0hUTUwvICYm
ICFJc0RPTU5vZGVUeXBlKCRyZXR1cm5UeXBlKSkpIHsKKworICAgICAgICBteSAkYXJyYXlUeXBl
ID0gJGNvZGVHZW5lcmF0b3ItPkdldEFycmF5VHlwZSgkcmV0dXJuVHlwZSk7CisgICAgICAgIGlm
ICgkYXJyYXlUeXBlKSB7CisgICAgICAgICAgICBBZGRUb0ltcGxJbmNsdWRlcygiVjgkYXJyYXlU
eXBlLmgiKTsKKyAgICAgICAgICAgIEFkZFRvSW1wbEluY2x1ZGVzKCIkYXJyYXlUeXBlLmgiKTsK
KyAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50RGVjbHMsICIgICAgY29uc3QgVmVjdG9yPFJl
ZlB0cjwkYXJyYXlUeXBlPiA+IHZlY3RvciA9ICR7Z2V0dGVyU3RyaW5nfTtcbiIpOworICAgICAg
ICAgICAgcHVzaChAaW1wbENvbnRlbnREZWNscywgIiAgICByZXR1cm4gdjhBcnJheSh2ZWN0b3Ip
O1xuIik7CisgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudERlY2xzLCAifVxuXG4iKTsKKyAg
ICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCiAgICAgICAgIEFkZEluY2x1ZGVzRm9yVHlw
ZSgkcmV0dXJuVHlwZSk7CiAgICAgICAgICMgQ2hlY2sgZm9yIGEgd3JhcHBlciBpbiB0aGUgd3Jh
cHBlciBjYWNoZS4gSWYgdGhlcmUgaXMgb25lLCB3ZSBrbm93IHRoYXQgYSBoaWRkZW4gcmVmZXJl
bmNlIGhhcyBhbHJlYWR5CiAgICAgICAgICMgYmVlbiBjcmVhdGVkLiBJZiB3ZSBkb24ndCBmaW5k
IGEgd3JhcHBlciwgd2UgY3JlYXRlIGJvdGggYSB3cmFwcGVyIGFuZCBhIGhpZGRlbiByZWZlcmVu
Y2UuCkBAIC0xMDk3LDE2ICsxMTA4LDIwIEBAIEVORAogICAgICAgICB9CiAgICAgfSBlbHNlIHsK
ICAgICAgICAgbXkgJHZhbHVlID0gSlNWYWx1ZVRvTmF0aXZlKCRhdHRyaWJ1dGUtPnNpZ25hdHVy
ZSwgInZhbHVlIik7CisgICAgICAgIG15ICRhcnJheVR5cGUgPSAkY29kZUdlbmVyYXRvci0+R2V0
QXJyYXlUeXBlKCRuYXRpdmVUeXBlKTsKKwogICAgICAgICBpZiAoJG5hdGl2ZVR5cGUgPX4gL15W
OFBhcmFtZXRlci8pIHsKLSAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudERlY2xzLCAiICAgICIg
LiBDb252ZXJ0VG9WOFBhcmFtZXRlcigkYXR0cmlidXRlLT5zaWduYXR1cmUsICRuYXRpdmVUeXBl
LCAidiIsICR2YWx1ZSwgIlZPSUQiKSAuICJcbiIpOworICAgICAgICAgICAgcHVzaChAaW1wbENv
bnRlbnREZWNscywgIiAgICAiIC4gQ29udmVydFRvVjhQYXJhbWV0ZXIoJGF0dHJpYnV0ZS0+c2ln
bmF0dXJlLCAkbmF0aXZlVHlwZSwgInYiLCAkdmFsdWUsICJWT0lEIikgLiAiXG4iKTsKKyAgICAg
ICAgfSBlbHNpZiAoJGFycmF5VHlwZSkgeworICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnRE
ZWNscywgIiAgICBWZWN0b3I8JGFycmF5VHlwZT4gdiA9ICR2YWx1ZTtcbiIpOwogICAgICAgICB9
IGVsc2UgewotICAgICAgICAgIHB1c2goQGltcGxDb250ZW50RGVjbHMsICIgICAgJG5hdGl2ZVR5
cGUgdiA9ICR2YWx1ZTtcbiIpOworICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnREZWNscywg
IiAgICAkbmF0aXZlVHlwZSB2ID0gJHZhbHVlO1xuIik7CiAgICAgICAgIH0KICAgICB9CiAKICAg
ICBteSAkcmVzdWx0ID0gInYiOwogICAgIG15ICRyZXR1cm5UeXBlID0gR2V0VHlwZUZyb21TaWdu
YXR1cmUoJGF0dHJpYnV0ZS0+c2lnbmF0dXJlKTsKLSAgICBpZiAoSXNSZWZQdHJUeXBlKCRyZXR1
cm5UeXBlKSkgeworICAgIGlmIChJc1JlZlB0clR5cGUoJHJldHVyblR5cGUpICYmICEkY29kZUdl
bmVyYXRvci0+R2V0QXJyYXlUeXBlKCRyZXR1cm5UeXBlKSkgewogICAgICAgICAkcmVzdWx0ID0g
IldURjo6Z2V0UHRyKCIgLiAkcmVzdWx0IC4gIikiOwogICAgIH0KIApAQCAtMzU1NCw2ICszNTY5
LDEwIEBAIHN1YiBKU1ZhbHVlVG9OYXRpdmUKICAgICAgICAgcmV0dXJuICJWOERPTVdyYXBwZXI6
OmdldFhQYXRoTlNSZXNvbHZlcigkdmFsdWUpIjsKICAgICB9CiAKKyAgICBpZiAoJGNvZGVHZW5l
cmF0b3ItPkdldEFycmF5VHlwZSgkdHlwZSkpIHsKKyAgICAgICAgcmV0dXJuICJ0b05hdGl2ZUFy
cmF5KCR2YWx1ZSkiOworICAgIH0KKwogICAgIEFkZEluY2x1ZGVzRm9yVHlwZSgkdHlwZSk7CiAK
ICAgICBpZiAoSXNET01Ob2RlVHlwZSgkdHlwZSkpIHsKQEAgLTM3NjcsNiArMzc4NiwxMyBAQCBz
dWIgTmF0aXZlVG9KU1ZhbHVlCiAgICAgICAgIHJldHVybiAidjhTdHJpbmcoJHZhbHVlKSI7CiAg
ICAgfQogCisgICAgbXkgJGFycmF5VHlwZSA9ICRjb2RlR2VuZXJhdG9yLT5HZXRBcnJheVR5cGUo
JHR5cGUpOworICAgIGlmICgkYXJyYXlUeXBlKSB7CisgICAgICAgIEFkZFRvSW1wbEluY2x1ZGVz
KCJWOCRhcnJheVR5cGUuaCIpOworICAgICAgICBBZGRUb0ltcGxJbmNsdWRlcygiJGFycmF5VHlw
ZS5oIik7CisgICAgICAgIHJldHVybiAidjhBcnJheSgkdmFsdWUpIjsKKyAgICB9CisKICAgICBB
ZGRJbmNsdWRlc0ZvclR5cGUoJHR5cGUpOwogCiAgICAgIyBzcGVjaWFsIGNhc2UgZm9yIG5vbi1E
T00gbm9kZSBpbnRlcmZhY2VzCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRz
L3Rlc3QvR09iamVjdC9XZWJLaXRET01UZXN0T2JqLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvR09iamVjdC9XZWJLaXRET01UZXN0T2JqLmNw
cAkocmV2aXNpb24gMTExMTUzKQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90
ZXN0L0dPYmplY3QvV2ViS2l0RE9NVGVzdE9iai5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTgxMCwz
MiArODEwLDYgQEAgd2Via2l0X2RvbV90ZXN0X29ial9zZXRfdGVzdF9vYmpfYXR0cihXZQogICAg
IGl0ZW0tPnNldFRlc3RPYmpBdHRyKGNvbnZlcnRlZF92YWx1ZSk7CiB9CiAKLVdlYktpdERPTXNl
cXVlbmNlPFNjcmlwdFByb2ZpbGU+Kgotd2Via2l0X2RvbV90ZXN0X29ial9nZXRfc2VxdWVuY2Vf
YXR0cihXZWJLaXRET01UZXN0T2JqKiBzZWxmKQotewotICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWls
KHNlbGYsIDApOwotICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKLSAg
ICBXZWJDb3JlOjpUZXN0T2JqICogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKLSAgICBQYXNz
UmVmUHRyPFdlYkNvcmU6OnNlcXVlbmNlPFNjcmlwdFByb2ZpbGU+PiBnX3JlcyA9IFdURjo6Z2V0
UHRyKGl0ZW0tPnNlcXVlbmNlQXR0cigpKTsKLSAgICBXZWJLaXRET01zZXF1ZW5jZTxTY3JpcHRQ
cm9maWxlPiogcmVzID0gV2ViS2l0OjpraXQoZ19yZXMuZ2V0KCkpOwotICAgIHJldHVybiByZXM7
Ci19Ci0KLXZvaWQKLXdlYmtpdF9kb21fdGVzdF9vYmpfc2V0X3NlcXVlbmNlX2F0dHIoV2ViS2l0
RE9NVGVzdE9iaiogc2VsZiwgV2ViS2l0RE9Nc2VxdWVuY2U8U2NyaXB0UHJvZmlsZT4qIHZhbHVl
KQotewotICAgIGdfcmV0dXJuX2lmX2ZhaWwoc2VsZik7Ci0gICAgV2ViQ29yZTo6SlNNYWluVGhy
ZWFkTnVsbFN0YXRlIHN0YXRlOwotICAgIFdlYkNvcmU6OlRlc3RPYmogKiBpdGVtID0gV2ViS2l0
Ojpjb3JlKHNlbGYpOwotICAgIGdfcmV0dXJuX2lmX2ZhaWwodmFsdWUpOwotICAgIFdlYkNvcmU6
OnNlcXVlbmNlPFNjcmlwdFByb2ZpbGU+ICogY29udmVydGVkX3ZhbHVlID0gTlVMTDsKLSAgICBp
ZiAodmFsdWUgIT0gTlVMTCkgewotICAgICAgICBjb252ZXJ0ZWRfdmFsdWUgPSBXZWJLaXQ6OmNv
cmUodmFsdWUpOwotICAgICAgICBnX3JldHVybl9pZl9mYWlsKGNvbnZlcnRlZF92YWx1ZSk7Ci0g
ICAgfQotICAgIGl0ZW0tPnNldFNlcXVlbmNlQXR0cihjb252ZXJ0ZWRfdmFsdWUpOwotfQotCiBX
ZWJLaXRET01UZXN0T2JqKgogd2Via2l0X2RvbV90ZXN0X29ial9nZXRfeG1sX29ial9hdHRyKFdl
YktpdERPTVRlc3RPYmoqIHNlbGYpCiB7CkBAIC0xNTk1LDcgKzE1NjksNiBAQCBlbnVtIHsKICAg
ICBQUk9QX1VOU0lHTkVEX0xPTkdfTE9OR19BVFRSLAogICAgIFBST1BfU1RSSU5HX0FUVFIsCiAg
ICAgUFJPUF9URVNUX09CSl9BVFRSLAotICAgIFBST1BfU0VRVUVOQ0VfQVRUUiwKICAgICBQUk9Q
X1hNTF9PQkpfQVRUUiwKICAgICBQUk9QX0NSRUFURSwKICAgICBQUk9QX1JFRkxFQ1RFRF9TVFJJ
TkdfQVRUUiwKQEAgLTE4NTUsMTIgKzE4MjgsNiBAQCBzdGF0aWMgdm9pZCB3ZWJraXRfZG9tX3Rl
c3Rfb2JqX2dldF9wcm9wCiAgICAgICAgIGdfdmFsdWVfc2V0X29iamVjdCh2YWx1ZSwgV2ViS2l0
OjpraXQocHRyLmdldCgpKSk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KLSAgICBjYXNlIFBST1Bf
U0VRVUVOQ0VfQVRUUjoKLSAgICB7Ci0gICAgICAgIFJlZlB0cjxXZWJDb3JlOjpzZXF1ZW5jZTxT
Y3JpcHRQcm9maWxlPj4gcHRyID0gY29yZVNlbGYtPnNlcXVlbmNlQXR0cigpOwotICAgICAgICBn
X3ZhbHVlX3NldF9vYmplY3QodmFsdWUsIFdlYktpdDo6a2l0KHB0ci5nZXQoKSkpOwotICAgICAg
ICBicmVhazsKLSAgICB9CiAgICAgY2FzZSBQUk9QX1hNTF9PQkpfQVRUUjoKICAgICB7CiAgICAg
ICAgIFJlZlB0cjxXZWJDb3JlOjpUZXN0T2JqPiBwdHIgPSBjb3JlU2VsZi0+eG1sT2JqQXR0cigp
OwpAQCAtMjE1MywxMyArMjEyMCw2IEBAIEdfTUFYVUlOVDY0LCAvKiBtaW4gKi8KICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgV0VCS0lU
X1RZUEVfRE9NX1RFU1RfT0JKLCAvKiBnb2JqZWN0IHR5cGUgKi8KICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgV0VCS0lUX1BBUkFNX1JF
QURXUklURSkpOwogICAgIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkoZ29iamVjdENs
YXNzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUFJPUF9TRVFVRU5DRV9B
VFRSLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ19wYXJhbV9zcGVjX29i
amVjdCgic2VxdWVuY2UtYXR0ciIsIC8qIG5hbWUgKi8KLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInRlc3Rfb2JqX3NlcXVlbmNlLWF0
dHIiLCAvKiBzaG9ydCBkZXNjcmlwdGlvbiAqLwotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAicmVhZC13cml0ZSAgV2ViS2l0RE9Nc2Vx
dWVuY2U8U2NyaXB0UHJvZmlsZT4qIFRlc3RPYmouc2VxdWVuY2UtYXR0ciIsIC8qIGxvbmdlciAt
IGNvdWxkIGRvIHdpdGggc29tZSBleHRyYSBkb2Mgc3R1ZmYgaGVyZSAqLwotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXRUJLSVRfVFlQ
RV9ET01fU0VRVUVOQ0U8U0NSSVBUX1BST0ZJTEU+LCAvKiBnb2JqZWN0IHR5cGUgKi8KLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgV0VC
S0lUX1BBUkFNX1JFQURXUklURSkpOwotICAgIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVy
dHkoZ29iamVjdENsYXNzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUFJP
UF9YTUxfT0JKX0FUVFIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnX3Bh
cmFtX3NwZWNfb2JqZWN0KCJ4bWwtb2JqLWF0dHIiLCAvKiBuYW1lICovCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ0ZXN0X29ial94
bWwtb2JqLWF0dHIiLCAvKiBzaG9ydCBkZXNjcmlwdGlvbiAqLwpJbmRleDogU291cmNlL1dlYkNv
cmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0dPYmplY3QvV2ViS2l0RE9NVGVzdE9iai5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9HT2JqZWN0L1dl
YktpdERPTVRlc3RPYmouaAkocmV2aXNpb24gMTExMTUzKQorKysgU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3Mvc2NyaXB0cy90ZXN0L0dPYmplY3QvV2ViS2l0RE9NVGVzdE9iai5oCSh3b3JraW5nIGNv
cHkpCkBAIC02OTcsMjcgKzY5Nyw2IEBAIFdFQktJVF9BUEkgdm9pZAogd2Via2l0X2RvbV90ZXN0
X29ial9zZXRfdGVzdF9vYmpfYXR0cihXZWJLaXRET01UZXN0T2JqKiBzZWxmLCBXZWJLaXRET01U
ZXN0T2JqKiB2YWx1ZSk7CiAKIC8qKgotICogd2Via2l0X2RvbV90ZXN0X29ial9nZXRfc2VxdWVu
Y2VfYXR0cjoKLSAqIEBzZWxmOiBBICNXZWJLaXRET01UZXN0T2JqCi0gKgotICogUmV0dXJuczog
KHRyYW5zZmVyIG5vbmUpOgotICoKLSoqLwotV0VCS0lUX0FQSSBXZWJLaXRET01zZXF1ZW5jZTxT
Y3JpcHRQcm9maWxlPioKLXdlYmtpdF9kb21fdGVzdF9vYmpfZ2V0X3NlcXVlbmNlX2F0dHIoV2Vi
S2l0RE9NVGVzdE9iaiogc2VsZik7Ci0KLS8qKgotICogd2Via2l0X2RvbV90ZXN0X29ial9zZXRf
c2VxdWVuY2VfYXR0cjoKLSAqIEBzZWxmOiBBICNXZWJLaXRET01UZXN0T2JqCi0gKiBAdmFsdWU6
IEEgI1dlYktpdERPTXNlcXVlbmNlPFNjcmlwdFByb2ZpbGU+Ci0gKgotICogUmV0dXJuczogKHRy
YW5zZmVyIG5vbmUpOgotICoKLSoqLwotV0VCS0lUX0FQSSB2b2lkCi13ZWJraXRfZG9tX3Rlc3Rf
b2JqX3NldF9zZXF1ZW5jZV9hdHRyKFdlYktpdERPTVRlc3RPYmoqIHNlbGYsIFdlYktpdERPTXNl
cXVlbmNlPFNjcmlwdFByb2ZpbGU+KiB2YWx1ZSk7Ci0KLS8qKgogICogd2Via2l0X2RvbV90ZXN0
X29ial9nZXRfeG1sX29ial9hdHRyOgogICogQHNlbGY6IEEgI1dlYktpdERPTVRlc3RPYmoKICAq
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0T2Jq
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3Qv
SlMvSlNUZXN0T2JqLmNwcAkocmV2aXNpb24gMTExMTUzKQorKysgU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE9iai5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMz
LDYgKzMzLDcgQEAKICNpbmNsdWRlICJKU0V2ZW50TGlzdGVuZXIuaCIKICNpbmNsdWRlICJKU1NW
R0RvY3VtZW50LmgiCiAjaW5jbHVkZSAiSlNTVkdQb2ludC5oIgorI2luY2x1ZGUgIkpTU2NyaXB0
UHJvZmlsZS5oIgogI2luY2x1ZGUgIkpTVGVzdENhbGxiYWNrLmgiCiAjaW5jbHVkZSAiSlNUZXN0
T2JqLmgiCiAjaW5jbHVkZSAiSlNhLmgiCkBAIC00MywxOCArNDQsMTggQEAKICNpbmNsdWRlICJK
U2UuaCIKICNpbmNsdWRlICJKU2ludC5oIgogI2luY2x1ZGUgIkpTc2VxdWVuY2UuaCIKLSNpbmNs
dWRlICJKU3NlcXVlbmNlPFNjcmlwdFByb2ZpbGU+LmgiCiAjaW5jbHVkZSAiS1VSTC5oIgogI2lu
Y2x1ZGUgIlNWR0RvY3VtZW50LmgiCiAjaW5jbHVkZSAiU1ZHU3RhdGljUHJvcGVydHlUZWFyT2Zm
LmgiCiAjaW5jbHVkZSAiU2NyaXB0QXJndW1lbnRzLmgiCiAjaW5jbHVkZSAiU2NyaXB0Q2FsbFN0
YWNrLmgiCiAjaW5jbHVkZSAiU2NyaXB0Q2FsbFN0YWNrRmFjdG9yeS5oIgorI2luY2x1ZGUgIlNj
cmlwdFByb2ZpbGUuaCIKICNpbmNsdWRlICJTZXJpYWxpemVkU2NyaXB0VmFsdWUuaCIKICNpbmNs
dWRlICJUZXN0T2JqLmgiCiAjaW5jbHVkZSAiYm9vbC5oIgotI2luY2x1ZGUgInNlcXVlbmNlPFNj
cmlwdFByb2ZpbGU+LmgiCiAjaW5jbHVkZSA8cnVudGltZS9FcnJvci5oPgorI2luY2x1ZGUgPHJ1
bnRpbWUvSlNBcnJheS5oPgogI2luY2x1ZGUgPHJ1bnRpbWUvSlNTdHJpbmcuaD4KICNpbmNsdWRl
IDx3dGYvR2V0UHRyLmg+CiAKQEAgLTQ3Nyw3ICs0NzgsNyBAQCBKU1ZhbHVlIGpzVGVzdE9ialNl
cXVlbmNlQXR0cihFeGVjU3RhdGUqCiAgICAgSlNUZXN0T2JqKiBjYXN0ZWRUaGlzID0gc3RhdGlj
X2Nhc3Q8SlNUZXN0T2JqKj4oYXNPYmplY3Qoc2xvdEJhc2UpKTsKICAgICBVTlVTRURfUEFSQU0o
ZXhlYyk7CiAgICAgVGVzdE9iaiogaW1wbCA9IHN0YXRpY19jYXN0PFRlc3RPYmoqPihjYXN0ZWRU
aGlzLT5pbXBsKCkpOwotICAgIEpTVmFsdWUgcmVzdWx0ID0gdG9KUyhleGVjLCBjYXN0ZWRUaGlz
LT5nbG9iYWxPYmplY3QoKSwgV1RGOjpnZXRQdHIoaW1wbC0+c2VxdWVuY2VBdHRyKCkpKTsKKyAg
ICBKU1ZhbHVlIHJlc3VsdCA9IGpzQXJyYXkoZXhlYywgY2FzdGVkVGhpcy0+Z2xvYmFsT2JqZWN0
KCksIGltcGwtPnNlcXVlbmNlQXR0cigpKTsKICAgICByZXR1cm4gcmVzdWx0OwogfQogCkBAIC05
NjUsNyArOTY2LDcgQEAgdm9pZCBzZXRKU1Rlc3RPYmpTZXF1ZW5jZUF0dHIoRXhlY1N0YXRlKgog
ewogICAgIEpTVGVzdE9iaiogY2FzdGVkVGhpcyA9IHN0YXRpY19jYXN0PEpTVGVzdE9iaio+KHRo
aXNPYmplY3QpOwogICAgIFRlc3RPYmoqIGltcGwgPSBzdGF0aWNfY2FzdDxUZXN0T2JqKj4oY2Fz
dGVkVGhpcy0+aW1wbCgpKTsKLSAgICBpbXBsLT5zZXRTZXF1ZW5jZUF0dHIodG9zZXF1ZW5jZTxT
Y3JpcHRQcm9maWxlPih2YWx1ZSkpOworICAgIGltcGwtPnNldFNlcXVlbmNlQXR0cih0b05hdGl2
ZUFycmF5KGV4ZWMsIHZhbHVlKSk7CiB9CiAKIApAQCAtMTQyMyw3ICsxNDI0LDcgQEAgRW5jb2Rl
ZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcgogICAgIGlmIChleGVjLT5oYWRFeGNl
cHRpb24oKSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsK
IAotICAgIEpTQzo6SlNWYWx1ZSByZXN1bHQgPSB0b0pTKGV4ZWMsIGNhc3RlZFRoaXMtPmdsb2Jh
bE9iamVjdCgpLCBXVEY6OmdldFB0cihpbXBsLT5tZXRob2RSZXR1cm5pbmdTZXF1ZW5jZShpbnRB
cmcpKSk7CisgICAgSlNDOjpKU1ZhbHVlIHJlc3VsdCA9IGpzQXJyYXkoZXhlYywgY2FzdGVkVGhp
cy0+Z2xvYmFsT2JqZWN0KCksIGltcGwtPm1ldGhvZFJldHVybmluZ1NlcXVlbmNlKGludEFyZykp
OwogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUocmVzdWx0KTsKIH0KIApJbmRleDogU291cmNl
L1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Y4L1Y4VGVzdE9iai5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Y4L1Y4VGVzdE9iai5j
cHAJKHJldmlzaW9uIDExMTE1MykKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMv
dGVzdC9WOC9WOFRlc3RPYmouY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMiw2ICszMiw3IEBACiAj
aW5jbHVkZSAiU2NyaXB0QXJndW1lbnRzLmgiCiAjaW5jbHVkZSAiU2NyaXB0Q2FsbFN0YWNrLmgi
CiAjaW5jbHVkZSAiU2NyaXB0Q2FsbFN0YWNrRmFjdG9yeS5oIgorI2luY2x1ZGUgIlNjcmlwdFBy
b2ZpbGUuaCIKICNpbmNsdWRlICJTZXJpYWxpemVkU2NyaXB0VmFsdWUuaCIKICNpbmNsdWRlICJW
OEJpbmRpbmcuaCIKICNpbmNsdWRlICJWOEJpbmRpbmdNYWNyb3MuaCIKQEAgLTQyLDYgKzQzLDcg
QEAKICNpbmNsdWRlICJWOFByb3h5LmgiCiAjaW5jbHVkZSAiVjhTVkdEb2N1bWVudC5oIgogI2lu
Y2x1ZGUgIlY4U1ZHUG9pbnQuaCIKKyNpbmNsdWRlICJWOFNjcmlwdFByb2ZpbGUuaCIKICNpbmNs
dWRlICJWOFRlc3RDYWxsYmFjay5oIgogI2luY2x1ZGUgIlY4YS5oIgogI2luY2x1ZGUgIlY4YW55
LmgiCkBAIC01Miw3ICs1NCw2IEBACiAjaW5jbHVkZSAiVjhlLmgiCiAjaW5jbHVkZSAiVjhpbnQu
aCIKICNpbmNsdWRlICJWOHNlcXVlbmNlLmgiCi0jaW5jbHVkZSAiVjhzZXF1ZW5jZTxTY3JpcHRQ
cm9maWxlPi5oIgogI2luY2x1ZGUgPHd0Zi9HZXRQdHIuaD4KICNpbmNsdWRlIDx3dGYvUmVmQ291
bnRlZC5oPgogI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KQEAgLTIyMywxNSArMjI0LDE1IEBAIHN0
YXRpYyB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gc2VxdWVuY2VBdHQKIHsKICAgICBJTkNfU1RBVFMo
IkRPTS5UZXN0T2JqLnNlcXVlbmNlQXR0ci5fZ2V0Iik7CiAgICAgVGVzdE9iaiogaW1wID0gVjhU
ZXN0T2JqOjp0b05hdGl2ZShpbmZvLkhvbGRlcigpKTsKLSAgICByZXR1cm4gdG9WOChpbXAtPnNl
cXVlbmNlQXR0cigpKTsKKyAgICByZXR1cm4gdjhBcnJheShpbXAtPnNlcXVlbmNlQXR0cigpKTsK
IH0KIAogc3RhdGljIHZvaWQgc2VxdWVuY2VBdHRyQXR0clNldHRlcih2ODo6TG9jYWw8djg6OlN0
cmluZz4gbmFtZSwgdjg6OkxvY2FsPHY4OjpWYWx1ZT4gdmFsdWUsIGNvbnN0IHY4OjpBY2Nlc3Nv
ckluZm8mIGluZm8pCiB7CiAgICAgSU5DX1NUQVRTKCJET00uVGVzdE9iai5zZXF1ZW5jZUF0dHIu
X3NldCIpOwogICAgIFRlc3RPYmoqIGltcCA9IFY4VGVzdE9iajo6dG9OYXRpdmUoaW5mby5Ib2xk
ZXIoKSk7Ci0gICAgc2VxdWVuY2U8U2NyaXB0UHJvZmlsZT4qIHYgPSBWOHNlcXVlbmNlPFNjcmlw
dFByb2ZpbGU+OjpIYXNJbnN0YW5jZSh2YWx1ZSkgPyBWOHNlcXVlbmNlPFNjcmlwdFByb2ZpbGU+
Ojp0b05hdGl2ZSh2ODo6SGFuZGxlPHY4OjpPYmplY3Q+OjpDYXN0KHZhbHVlKSkgOiAwOwotICAg
IGltcC0+c2V0U2VxdWVuY2VBdHRyKFdURjo6Z2V0UHRyKHYpKTsKKyAgICBWZWN0b3I8U2NyaXB0
UHJvZmlsZT4gdiA9IHRvTmF0aXZlQXJyYXkodmFsdWUpOworICAgIGltcC0+c2V0U2VxdWVuY2VB
dHRyKHYpOwogICAgIHJldHVybjsKIH0KIApAQCAtMTA3MSw3ICsxMDcyLDcgQEAgc3RhdGljIHY4
OjpIYW5kbGU8djg6OlZhbHVlPiBtZXRob2RSZXR1cgogICAgICAgICByZXR1cm4gdGhyb3dFcnJv
cigiTm90IGVub3VnaCBhcmd1bWVudHMiLCBWOFByb3h5OjpUeXBlRXJyb3IpOwogICAgIFRlc3RP
YmoqIGltcCA9IFY4VGVzdE9iajo6dG9OYXRpdmUoYXJncy5Ib2xkZXIoKSk7CiAgICAgRVhDRVBU
SU9OX0JMT0NLKGludCwgaW50QXJnLCB0b0ludDMyKE1BWUJFX01JU1NJTkdfUEFSQU1FVEVSKGFy
Z3MsIDAsIERlZmF1bHRJc1VuZGVmaW5lZCkpKTsKLSAgICByZXR1cm4gdG9WOChpbXAtPm1ldGhv
ZFJldHVybmluZ1NlcXVlbmNlKGludEFyZykpOworICAgIHJldHVybiB2OEFycmF5KGltcC0+bWV0
aG9kUmV0dXJuaW5nU2VxdWVuY2UoaW50QXJnKSk7CiB9CiAKIHN0YXRpYyB2ODo6SGFuZGxlPHY4
OjpWYWx1ZT4gbWV0aG9kVGhhdFJlcXVpcmVzQWxsQXJnc0FuZFRocm93c0NhbGxiYWNrKGNvbnN0
IHY4OjpBcmd1bWVudHMmIGFyZ3MpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9W
OEJpbmRpbmcuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9WOEJp
bmRpbmcuaAkocmV2aXNpb24gMTExMTUzKQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvdjgv
VjhCaW5kaW5nLmgJKHdvcmtpbmcgY29weSkKQEAgLTI4Niw2ICsyODYsMzUgQEAgbmFtZXNwYWNl
IFdlYkNvcmUgewogICAgICAgICByZXR1cm4gdjhFeHRlcm5hbFN0cmluZyhzdHJpbmcpOwogICAg
IH0KIAorICAgIHRlbXBsYXRlPHR5cGVuYW1lIEl0ZXJhYmxlPgorICAgIHY4OjpIYW5kbGU8djg6
OlZhbHVlPiB2OEFycmF5KGNvbnN0IEl0ZXJhYmxlJiBpdGVyYXRvcikKKyAgICB7CisgICAgICAg
IHY4OjpMb2NhbDx2ODo6QXJyYXk+IHJlc3VsdCA9IHY4OjpBcnJheTo6TmV3KGl0ZXJhdG9yLnNp
emUoKSk7CisgICAgICAgIGludCBpbmRleCA9IDA7CisgICAgICAgIHR5cGVuYW1lIEl0ZXJhYmxl
Ojpjb25zdF9pdGVyYXRvciBlbmQgPSBpdGVyYXRvci5lbmQoKTsKKyAgICAgICAgZm9yICh0eXBl
bmFtZSBJdGVyYWJsZTo6Y29uc3RfaXRlcmF0b3IgaXRlciA9IGl0ZXJhdG9yLmJlZ2luKCk7IGl0
ZXIgIT0gZW5kOyArK2l0ZXIpCisgICAgICAgICAgICByZXN1bHQtPlNldCh2ODo6SW50ZWdlcjo6
TmV3KGluZGV4KyspLCB0b1Y4KFdURjo6Z2V0UHRyKCppdGVyKSkpOworICAgICAgICByZXR1cm4g
cmVzdWx0OworICAgIH0KKworICAgIHRlbXBsYXRlIDxjbGFzcyBUPgorICAgIFZlY3RvcjxUPiB0
b05hdGl2ZUFycmF5KHY4OjpIYW5kbGU8djg6OlZhbHVlPiB2YWx1ZSkKKyAgICB7CisgICAgICAg
IGlmICghdmFsdWUtPklzQXJyYXkoKSkKKyAgICAgICAgICAgIHJldHVybiBWZWN0b3I8VD4oKTsK
KworICAgICAgICBWZWN0b3I8VD4gcmVzdWx0OworICAgICAgICB2ODo6TG9jYWw8djg6OlZhbHVl
PiB2OFZhbHVlKHY4OjpMb2NhbDx2ODo6VmFsdWU+OjpOZXcodmFsdWUpKTsKKyAgICAgICAgdjg6
OkxvY2FsPHY4OjpBcnJheT4gYXJyYXkgPSB2ODo6TG9jYWw8djg6OkFycmF5Pjo6Q2FzdCh2OFZh
bHVlKTsKKyAgICAgICAgc2l6ZV90IGxlbmd0aCA9IGFycmF5LT5MZW5ndGgoKTsKKworICAgICAg
ICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGxlbmd0aDsgKytpKSB7CisgICAgICAgICAgICBTdHJp
bmcgaW5kZXhlZFZhbHVlID0gdjhTdHJpbmdUb1dlYkNvcmVTdHJpbmcoYXJyYXktPkdldChpKSk7
CisgICAgICAgICAgICByZXN1bHQuYXBwZW5kKGluZGV4ZWRWYWx1ZSk7CisgICAgICAgIH0KKyAg
ICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9CisKICAgICAvLyBFbmFibGVzIGNhY2hpbmcgdjgg
d3JhcHBlcnMgY3JlYXRlZCBmb3IgV1RGOjpTdHJpbmdJbXBsLiAgQ3VycmVudGx5IHRoaXMgY2Fj
aGUgcmVxdWlyZXMKICAgICAvLyBhbGwgdGhlIGNhbGxzIChib3RoIHRvIGNvbnZlcnQgV1RGOjpT
dHJpbmcgdG8gdjg6OlN0cmluZyBhbmQgdG8gR0MgdGhlIGhhbmRsZSkKICAgICAvLyB0byBiZSBw
ZXJmb3JtZWQgb24gdGhlIG1haW4gdGhyZWFkLgpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGlu
Z3MvdjgvY3VzdG9tL1Y4Q29uc29sZUN1c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4Q29uc29sZUN1c3RvbS5jcHAJKHJldmlzaW9uIDEx
MTE1MykKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOENvbnNvbGVDdXN0
b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNiwzMiArMzYsMTMgQEAKICNpbmNsdWRlICJTY3Jp
cHRBcmd1bWVudHMuaCIKICNpbmNsdWRlICJTY3JpcHRDYWxsU3RhY2suaCIKICNpbmNsdWRlICJT
Y3JpcHRDYWxsU3RhY2tGYWN0b3J5LmgiCi0jaW5jbHVkZSAiU2NyaXB0UHJvZmlsZS5oIgogI2lu
Y2x1ZGUgIlY4QmluZGluZy5oIgogI2luY2x1ZGUgIlY4QmluZGluZ01hY3Jvcy5oIgogI2luY2x1
ZGUgIlY4TWVtb3J5SW5mby5oIgogI2luY2x1ZGUgIlY4UHJveHkuaCIKLSNpbmNsdWRlICJWOFNj
cmlwdFByb2ZpbGUuaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi10eXBlZGVmIFZlY3RvcjxS
ZWZQdHI8U2NyaXB0UHJvZmlsZT4gPiBQcm9maWxlc0FycmF5OwotCi0jaWYgRU5BQkxFKEpBVkFT
Q1JJUFRfREVCVUdHRVIpCi12ODo6SGFuZGxlPHY4OjpWYWx1ZT4gVjhDb25zb2xlOjpwcm9maWxl
c0FjY2Vzc29yR2V0dGVyKHY4OjpMb2NhbDx2ODo6U3RyaW5nPiBuYW1lLCBjb25zdCB2ODo6QWNj
ZXNzb3JJbmZvJiBpbmZvKQotewotICAgIElOQ19TVEFUUygiRE9NLkNvbnNvbGUucHJvZmlsZXNB
Y2Nlc3NvckdldHRlciIpOwotICAgIENvbnNvbGUqIGltcCA9IFY4Q29uc29sZTo6dG9OYXRpdmUo
aW5mby5Ib2xkZXIoKSk7Ci0gICAgY29uc3QgUHJvZmlsZXNBcnJheSYgcHJvZmlsZXMgPSBpbXAt
PnByb2ZpbGVzKCk7Ci0gICAgdjg6OkhhbmRsZTx2ODo6QXJyYXk+IHJlc3VsdCA9IHY4OjpBcnJh
eTo6TmV3KHByb2ZpbGVzLnNpemUoKSk7Ci0gICAgaW50IGluZGV4ID0gMDsKLSAgICBQcm9maWxl
c0FycmF5Ojpjb25zdF9pdGVyYXRvciBlbmQgPSBwcm9maWxlcy5lbmQoKTsKLSAgICBmb3IgKFBy
b2ZpbGVzQXJyYXk6OmNvbnN0X2l0ZXJhdG9yIGl0ZXIgPSBwcm9maWxlcy5iZWdpbigpOyBpdGVy
ICE9IGVuZDsgKytpdGVyKQotICAgICAgICByZXN1bHQtPlNldCh2ODo6SW50ZWdlcjo6TmV3KGlu
ZGV4KyspLCB0b1Y4KGl0ZXItPmdldCgpKSk7Ci0gICAgcmV0dXJuIHJlc3VsdDsKLX0KLSNlbmRp
ZgotCiB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gVjhDb25zb2xlOjp0cmFjZUNhbGxiYWNrKGNvbnN0
IHY4OjpBcmd1bWVudHMmIGFyZ3MpCiB7CiAgICAgSU5DX1NUQVRTKCJET00uQ29uc29sZS50cmFj
ZUNhbGxiYWNrIik7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wYWdlL0NvbnNvbGUuaWRsCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BhZ2UvQ29uc29sZS5pZGwJKHJldmlzaW9uIDExMTE1
MykKKysrIFNvdXJjZS9XZWJDb3JlL3BhZ2UvQ29uc29sZS5pZGwJKHdvcmtpbmcgY29weSkKQEAg
LTQ2LDcgKzQ2LDcgQEAgbW9kdWxlIHdpbmRvdyB7CiAgICAgICAgIFtDYWxsV2l0aD1TY3JpcHRB
cmd1bWVudHN8Q2FsbFN0YWNrXSB2b2lkIG1hcmtUaW1lbGluZSgpOwogCiAjaWYgZGVmaW5lZChF
TkFCTEVfSkFWQVNDUklQVF9ERUJVR0dFUikgJiYgRU5BQkxFX0pBVkFTQ1JJUFRfREVCVUdHRVIK
LSAgICAgICAgcmVhZG9ubHkgYXR0cmlidXRlIFtDdXN0b21HZXR0ZXJdIEFycmF5IHByb2ZpbGVz
OworICAgICAgICByZWFkb25seSBhdHRyaWJ1dGUgc2VxdWVuY2U8U2NyaXB0UHJvZmlsZT4gcHJv
ZmlsZXM7CiAgICAgICAgIFtDdXN0b21dIHZvaWQgcHJvZmlsZShpbiBET01TdHJpbmcgdGl0bGUp
OwogICAgICAgICBbQ3VzdG9tXSB2b2lkIHByb2ZpbGVFbmQoaW4gRE9NU3RyaW5nIHRpdGxlKTsK
ICNlbmRpZgo=
</data>

          </attachment>
      

    </bug>

</bugzilla>