<?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>84232</bug_id>
          
          <creation_ts>2012-04-18 02:20:38 -0700</creation_ts>
          <short_desc>Add PassThis=* to support the callbacks which requires to pass &quot;this&quot; value.</short_desc>
          <delta_ts>2012-04-20 12:09:41 -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>
          
          <blocked>83233</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Vineet Chaudhary (vineetc)">code.vineet</reporter>
          <assigned_to name="Vineet Chaudhary (vineetc)">code.vineet</assigned_to>
          <cc>abarth</cc>
    
    <cc>adamk</cc>
    
    <cc>arv</cc>
    
    <cc>haraken</cc>
    
    <cc>japhet</cc>
    
    <cc>ojan</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>604640</commentid>
    <comment_count>0</comment_count>
    <who name="Vineet Chaudhary (vineetc)">code.vineet</who>
    <bug_when>2012-04-18 02:20:38 -0700</bug_when>
    <thetext>Adding PassThis=XXX to attributes will be useful for the methods/callbacks which requires to pass &quot;this&quot;.
This will help to identify the type(XXX) of &quot;this&quot; value in codegenerator.

This is a preparing patch for fixing 83233.
https://bugs.webkit.org/show_bug.cgi?id=83233#c44</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>604642</commentid>
    <comment_count>1</comment_count>
      <attachid>137660</attachid>
    <who name="Vineet Chaudhary (vineetc)">code.vineet</who>
    <bug_when>2012-04-18 02:26:06 -0700</bug_when>
    <thetext>Created attachment 137660
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>604668</commentid>
    <comment_count>2</comment_count>
      <attachid>137660</attachid>
    <who name="Kentaro Hara">haraken</who>
    <bug_when>2012-04-18 03:38:25 -0700</bug_when>
    <thetext>Comment on attachment 137660
Patch

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

r- due to missing CodeGenerator*.pm. Please include the change of CodeGenerator*.pm.

&gt; Source/WebCore/bindings/scripts/test/TestObj.idl:161
&gt; +        [PassThis=ThisClaas] void methodRequiresThisToPass(in ThisClass param);

Shouldn&apos;t we move this test case to TestCallback.idl, since [PassThis] works for callback interfaces?

Typo: This*Class*</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>604676</commentid>
    <comment_count>3</comment_count>
      <attachid>137669</attachid>
    <who name="Vineet Chaudhary (vineetc)">code.vineet</who>
    <bug_when>2012-04-18 04:21:40 -0700</bug_when>
    <thetext>Created attachment 137669
Patch

Little worried about codegeneration for GObj, Cpp and ObjC bindings.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>604681</commentid>
    <comment_count>4</comment_count>
      <attachid>137669</attachid>
    <who name="Kentaro Hara">haraken</who>
    <bug_when>2012-04-18 04:52:46 -0700</bug_when>
    <thetext>Comment on attachment 137669
Patch

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

Almost looks good.

For GObject/CPP/ObjC, let&apos;s leave it as-is. If it caused a problem when we actually use [PassThis] in some IDL file, let&apos;s add [PassThis] to the Skip() methods in CodeGenerator{GObject,ObjC,CPP}.pm.

&gt; Source/WebCore/ChangeLog:3
&gt; +        Add PassThis=* to support the callbacks which requires to pass &quot;this&quot; value.

Maybe [PassThisToCallback] would be more descriptive. It&apos;s up to you though.

&gt; Source/WebCore/bindings/scripts/CodeGeneratorJS.pm:2693
&gt;                  push(@args, GetNativeType($param-&gt;type) . &quot; &quot; . $param-&gt;name);

Nit: You can use $paramName.

&gt; Source/WebCore/bindings/scripts/test/JS/JSTestCallback.cpp:154
&gt; +    ASSERT(thisClassParam);
&gt; +    if (!thisClassParam)

Writing both ASSERT() and if(!...) sounds strange. (I know you just copied the existing code though.)

- If thisClassParam should be always true, just put ASSERT() and remove if(!...).
- If thisClassParam can be false, just put if(!...) and put ASSERT().

&gt; Source/WebCore/bindings/scripts/test/V8/V8TestCallback.cpp:199
&gt; +    ASSERT(thisClassParam);
&gt; +    if (!thisClassParam)

Ditto.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>604682</commentid>
    <comment_count>5</comment_count>
    <who name="Kentaro Hara">haraken</who>
    <bug_when>2012-04-18 04:54:10 -0700</bug_when>
    <thetext>&gt; - If thisClassParam should be always true, just put ASSERT() and remove if(!...).
&gt; - If thisClassParam can be false, just put if(!...) and put ASSERT().

Correction: If thisClassParam can be false, just put if(!...) and remove ASSERT().</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>604684</commentid>
    <comment_count>6</comment_count>
      <attachid>137671</attachid>
    <who name="Vineet Chaudhary (vineetc)">code.vineet</who>
    <bug_when>2012-04-18 05:19:11 -0700</bug_when>
    <thetext>Created attachment 137671
Updated Patch

&gt; For GObject/CPP/ObjC, let&apos;s leave it as-is. If it caused a problem when we actually use [PassThis] in some IDL file, let&apos;s add [PassThis] to the Skip() methods in CodeGenerator{GObject,ObjC,CPP}.pm.

Currently it doesn&apos;t creates ant problem in any of GObject,ObjC,CPP these bindings so we can leave it as-is.

&gt; Maybe [PassThisToCallback] would be more descriptive. It&apos;s up to you though.

Right..

&gt; &gt; Source/WebCore/bindings/scripts/CodeGeneratorJS.pm:2693
&gt; &gt;                  push(@args, GetNativeType($param-&gt;type) . &quot; &quot; . $param-&gt;name);
&gt; 
&gt; Nit: You can use $paramName.
Done 

&gt; &gt; Source/WebCore/bindings/scripts/test/JS/JSTestCallback.cpp:154
&gt; &gt; +    ASSERT(thisClassParam);

&gt; Writing both ASSERT() and if(!...) sounds strange. (I know you just copied the existing code though.)

Hmm just copied form the v8 mutation custom code.
 
&gt; - If thisClassParam should be always true, just put ASSERT() and remove if(!...).

thisClassParam should be always true. So lets ASSERT(thisClassParam);

Thanks for commnets..:)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>604688</commentid>
    <comment_count>7</comment_count>
      <attachid>137671</attachid>
    <who name="Kentaro Hara">haraken</who>
    <bug_when>2012-04-18 05:27:23 -0700</bug_when>
    <thetext>Comment on attachment 137671
Updated Patch

Thanks for the patch!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>604710</commentid>
    <comment_count>8</comment_count>
      <attachid>137671</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-04-18 06:55:27 -0700</bug_when>
    <thetext>Comment on attachment 137671
Updated Patch

Clearing flags on attachment: 137671

Committed r114502: &lt;http://trac.webkit.org/changeset/114502&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>604711</commentid>
    <comment_count>9</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-04-18 06:55:32 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>604895</commentid>
    <comment_count>10</comment_count>
      <attachid>137671</attachid>
    <who name="Erik Arvidsson">arv</who>
    <bug_when>2012-04-18 11:03:29 -0700</bug_when>
    <thetext>Comment on attachment 137671
Updated Patch

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

&gt; Source/WebCore/bindings/scripts/CodeGeneratorJS.pm:2694
&gt; +                if ($thisType and $thisType eq $param-&gt;type) {

I feel like we tend to prefer &amp;&amp; over and

&gt; Source/WebCore/bindings/scripts/CodeGeneratorJS.pm:2727
&gt; +                    next if $param-&gt;type ne $thisType;

This does not feel correct. We should either say that we pass this as first or last argument. With this code I cannot create a callback like this

[PassThisToCallBack=Node] void myCallback(Node one, Node two, Node three);</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>605409</commentid>
    <comment_count>11</comment_count>
    <who name="Vineet Chaudhary (vineetc)">code.vineet</who>
    <bug_when>2012-04-18 23:55:29 -0700</bug_when>
    <thetext>(In reply to comment #10)
&gt; &gt; Source/WebCore/bindings/scripts/CodeGeneratorJS.pm:2727
&gt; &gt; +                    next if $param-&gt;type ne $thisType;
&gt; 
&gt; This does not feel correct. We should either say that we pass this as first or last argument. With this code I cannot create a callback like this
&gt; 
&gt; [PassThisToCallBack=Node] void myCallback(Node one, Node two, Node three);

As of now there is only callback(I think) which require to pass this as argument ie MutationObserver(mo).

Currently &quot;this&quot; param could not be the first parameter as per the spec http://dvcs.w3.org/hg/domcore/raw-file/tip/Overview.html#mutation-observers 
 &quot;Invoke mo&apos;s callback with queue as first argument, and mo (itself) as second argument and callback this value.&quot;

IMO passing this as last argument makes sence but then this argunets order should be captured in the spec too may be like
 &quot;Invoke XXX&apos;s callback with &apos;callback this value&apos; as last argument.&quot;

Ohterwise someone might try various combinations with arguments. What do you think?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>605740</commentid>
    <comment_count>12</comment_count>
    <who name="Erik Arvidsson">arv</who>
    <bug_when>2012-04-19 11:32:38 -0700</bug_when>
    <thetext>(In reply to comment #11)
&gt; Currently &quot;this&quot; param could not be the first parameter as per the spec http://dvcs.w3.org/hg/domcore/raw-file/tip/Overview.html#mutation-observers 
&gt;  &quot;Invoke mo&apos;s callback with queue as first argument, and mo (itself) as second argument and callback this value.&quot;

Maybe I&apos;m missing something but the PassThisToCallBack is not part of WebIDL. It is just a way for us to describe how to pass this into the callback function. For example,

[PassThisToCallback=T] void handleEvent();

needs to generate a function that looks something like:

bool V8TestCallback::handleEvent(T* thisParam)

which is then called with the this object. In the case of MutationObserverCallback we need to add one more param to handleEvent to forward the this object.

http://code.google.com/p/chromium/source/search?q=handleEvent+MutationCallback&amp;origq=handleEvent+MutationCallback&amp;btnG=Search+Trunk</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>606487</commentid>
    <comment_count>13</comment_count>
      <attachid>138066</attachid>
    <who name="Vineet Chaudhary (vineetc)">code.vineet</who>
    <bug_when>2012-04-20 04:25:58 -0700</bug_when>
    <thetext>Created attachment 138066
raw_patch_not_to_ews

(In reply to comment #12)
&gt; (In reply to comment #11)
&gt; &gt; Currently &quot;this&quot; param could not be the first parameter as per the spec http://dvcs.w3.org/hg/domcore/raw-file/tip/Overview.html#mutation-observers 
&gt; &gt;  &quot;Invoke mo&apos;s callback with queue as first argument, and mo (itself) as second argument and callback this value.&quot;
&gt; 
&gt; Maybe I&apos;m missing something but the PassThisToCallBack is not part of WebIDL. It is just a way for us to describe how to pass this into the callback function. For example,
&gt; 
&gt; [PassThisToCallback=T] void handleEvent();
&gt; 
&gt; needs to generate a function that looks something like:
&gt; 
&gt; bool V8TestCallback::handleEvent(T* thisParam)
&gt; 
&gt; which is then called with the this object. In the case of MutationObserverCallback we need to add one more param to handleEvent to forward the this object.
&gt; 
&gt; http://code.google.com/p/chromium/source/search?q=handleEvent+MutationCallback&amp;origq=handleEvent+MutationCallback&amp;btnG=Search+Trunk

I have prepared raw patch just to clear my understanding. Patch creates  bool V8TestCallback::handleEvent(T* thisParam) for [PassThisToCallback=T] void handleEvent(); 
Is this did you meant for? Please correct me if my understanding wrong.

I am afraid if this is correct way because when I proceed further and added one more param to handleEvent() to forward the this object for MutationObserverCallback, but I messed up with codegenerator*.pm. Specifically for V8Bindigs I need to repeat of almost every line of code. I can share patch if you want to have a look.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>606488</commentid>
    <comment_count>14</comment_count>
    <who name="Vineet Chaudhary (vineetc)">code.vineet</who>
    <bug_when>2012-04-20 04:26:45 -0700</bug_when>
    <thetext>IMO we should always consider last param as thisParam if extendedAttribute is PassThisToCallBack like:

[PassThisToCallBack] void myCallback(Node one, Node two, Node this) which generates

void myCallback(Node* one, Node* two, Node* this)

This way we don&apos;t require to paas thisType with PassThisToCallBack. This will simplify codegenerator code and solve all other concerns.

FOR MutationObserver code will look like:

[PassThisToCallback] boolean handleEvent(in sequence&lt;MutationRecord&gt; mutations, in WebKitMutationObserver observer);  //which generates

boolean handleEvent(MutationRecordArray* mutations, WebKitMutationObserver* observer); //which ever is the last parm consider as this if PassThisToCallback.

Please let me know if you have any suggestion/objections on this approach.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>606758</commentid>
    <comment_count>15</comment_count>
    <who name="Erik Arvidsson">arv</who>
    <bug_when>2012-04-20 11:50:38 -0700</bug_when>
    <thetext>Lets back up a bit. Callbacks are used for WebCore to call a user defined JavaScript function. The IDL defines what parameters are passed as real arguments. The IDL does not define what [[This]] should be, it is done in prose.

In cases where the js callback object is a function we want to call the js function using the [PassThisToCallback=T] as the [[This]] implicit argument. If the callback is a non function object we use the object itself as the [[This]]. A few examples:

var element = ...

var object = {
  handleEvent: function(e) {
    assert(this === object);
  }
};

function f(e) {
  assert(element === this)
}

element.addEventListener(&apos;click&apos;, f);
element.addEventListener(&apos;click&apos;, object);

And the IDL for this is here: http://www.w3.org/TR/2012/WD-dom-20120405/#interface-eventtarget

interface EventTarget {
  void addEventListener(DOMString type, EventListener? callback, optional boolean capture = false);
  ...
};

callback interface EventListener {
  void handleEvent(Event event);
};


The event target is a bit special since we have custom code to get the currentTarget out of the event and use that as [[This]]

 I would like us to manually pass in [[This]] from C++ in the cases where we have [PassThisToCallback].</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>606789</commentid>
    <comment_count>16</comment_count>
    <who name="Erik Arvidsson">arv</who>
    <bug_when>2012-04-20 12:09:41 -0700</bug_when>
    <thetext>To sum up: 

If [PassThisToCallback] is present the first argument passed needs to be the this pointer</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>137660</attachid>
            <date>2012-04-18 02:26:06 -0700</date>
            <delta_ts>2012-04-18 04:21:40 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>wip_pass_this.diff</filename>
            <type>text/plain</type>
            <size>15155</size>
            <attacher name="Vineet Chaudhary (vineetc)">code.vineet</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDExNDQ5NSkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDM3IEBACisyMDEyLTA0LTE4ICBWaW5lZXQg
Q2hhdWRoYXJ5ICA8cmdmNzQ4QG1vdG9yb2xhLmNvbT4KKworICAgICAgICBBZGQgUGFzc1RoaXM9
KiB0byBzdXBwb3J0IHRoZSBtZXRob2RzL2NhbGxiYWNrcyB3aGljaCByZXF1aXJlcyB0byBwYXNz
ICJ0aGlzIiB2YWx1ZS4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTg0MjMyCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAg
ICAgICAgQWRkaW5nIFBhc3NUaGlzPVhYWCB0byBhdHRyaWJ1dGVzIHdpbGwgYmUgdXNlZnVsIGZv
ciB0aGUgbWV0aG9kcy9jYWxsYmFja3Mgd2hpY2ggcmVxdWlyZXMgdG8gcGFzcyAidGhpcyIuCisg
ICAgICAgIFRoaXMgd2lsbCBoZWxwIHRvIGlkZW50aWZ5IHRoZSB0eXBlKFhYWCkgb2YgInRoaXMi
IHZhbHVlIGluIGNvZGVnZW5lcmF0b3IuCisKKyAgICAgICAgVGVzdHM6IFRlc3RPYmouaWRsCisK
KyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL0lETEF0dHJpYnV0ZXMudHh0OiBBZGRlZCBQYXNz
VGhpcz0qCisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0NQUC9XZWJET01UZXN0T2Jq
LmNwcDoKKyAgICAgICAgKFdlYkRPTVRlc3RPYmo6Om1ldGhvZFJlcXVpcmVzVGhpc1RvUGFzcyk6
CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0NQUC9XZWJET01UZXN0T2JqLmg6Cisg
ICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0dPYmplY3QvV2ViS2l0RE9NVGVzdE9iai5j
cHA6CisgICAgICAgICh3ZWJraXRfZG9tX3Rlc3Rfb2JqX2NvbmRpdGlvbmFsX21ldGhvZDMpOgor
ICAgICAgICAod2Via2l0X2RvbV90ZXN0X29ial9tZXRob2RfcmVxdWlyZXNfdGhpc190b19wYXNz
KToKKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvR09iamVjdC9XZWJLaXRET01UZXN0
T2JqLmg6CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE9iai5jcHA6
CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKFdlYkNvcmU6OmpzVGVzdE9ialByb3RvdHlw
ZUZ1bmN0aW9uTWV0aG9kUmVxdWlyZXNUaGlzVG9QYXNzKToKKyAgICAgICAgKiBiaW5kaW5ncy9z
Y3JpcHRzL3Rlc3QvSlMvSlNUZXN0T2JqLmg6CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAg
KiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvT2JqQy9ET01UZXN0T2JqLmg6CisgICAgICAgICogYmlu
ZGluZ3Mvc2NyaXB0cy90ZXN0L09iakMvRE9NVGVzdE9iai5tbToKKyAgICAgICAgKC1bRE9NVGVz
dE9iaiBtZXRob2RSZXF1aXJlc1RoaXNUb1Bhc3M6XSk6CisgICAgICAgICogYmluZGluZ3Mvc2Ny
aXB0cy90ZXN0L1Rlc3RPYmouaWRsOgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9W
OC9WOFRlc3RPYmouY3BwOgorICAgICAgICAoV2ViQ29yZTo6VGVzdE9ialY4SW50ZXJuYWw6Om1l
dGhvZFJlcXVpcmVzVGhpc1RvUGFzc0NhbGxiYWNrKToKKyAgICAgICAgKFRlc3RPYmpWOEludGVy
bmFsKToKKyAgICAgICAgKFdlYkNvcmU6OkNvbmZpZ3VyZVY4VGVzdE9ialRlbXBsYXRlKToKKwog
MjAxMi0wNC0xNyAgUGF2ZWwgRmVsZG1hbiAgPHBmZWxkbWFuQGNocm9taXVtLm9yZz4KIAogICAg
ICAgICBXZWIgSW5zcGVjdG9yOiBkb2N1bWVudC5vcGVuIHJlbW92ZXMgdGhlIGRvY3VtZW50RWxl
bWVudCwgYnV0IGRvZXMgbm90IGNsZWFyIHRoZSBlbGVtZW50cyBwYW5lbC4KSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvSURMQXR0cmlidXRlcy50eHQKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy9JRExBdHRyaWJ1dGVzLnR4dAkocmV2
aXNpb24gMTE0MzYwKQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy9JRExBdHRy
aWJ1dGVzLnR4dAkod29ya2luZyBjb3B5KQpAQCAtOTEsNiArOTEsNyBAQCBPYmpDUG9seW1vcnBo
aWMKIE9iakNQcm90b2NvbAogT21pdENvbnN0cnVjdG9yCiBPcHRpb25hbD18RGVmYXVsdElzTnVs
bFN0cmluZ3xEZWZhdWx0SXNVbmRlZmluZWQKK1Bhc3NUaGlzPSoKIFJlZmxlY3Q9KgogUmVwbGFj
ZWFibGUKIFJlcGxhY2VhYmxlQ29uc3RydWN0b3IKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL3NjcmlwdHMvdGVzdC9UZXN0T2JqLmlkbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvVGVzdE9iai5pZGwJKHJldmlzaW9uIDExNDM2MCkKKysr
IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9UZXN0T2JqLmlkbAkod29ya2lu
ZyBjb3B5KQpAQCAtMTU3LDYgKzE1Nyw5IEBAIG1vZHVsZSB0ZXN0IHsKIAogICAgICAgICBbQ29u
ZGl0aW9uYWw9Q29uZGl0aW9uMV0gY29uc3QgdW5zaWduZWQgc2hvcnQgQ09ORElUSU9OQUxfQ09O
U1QgPSAwOwogCisgICAgICAgIC8vICdQYXNzVGhpcycgZXh0ZW5kZWQgYXR0cmlidXRlCisgICAg
ICAgIFtQYXNzVGhpcz1UaGlzQ2xhYXNdIHZvaWQgbWV0aG9kUmVxdWlyZXNUaGlzVG9QYXNzKGlu
IFRoaXNDbGFzcyBwYXJhbSk7CisKICNpZiBkZWZpbmVkKFRFU1RJTkdfVjgpIHx8IGRlZmluZWQo
VEVTVElOR19KUykKICAgICAgICAgcmVhZG9ubHkgYXR0cmlidXRlIFtDYWNoZWRBdHRyaWJ1dGVd
IGFueSBjYWNoZWRBdHRyaWJ1dGUxOwogICAgICAgICByZWFkb25seSBhdHRyaWJ1dGUgW0NhY2hl
ZEF0dHJpYnV0ZV0gYW55IGNhY2hlZEF0dHJpYnV0ZTI7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy9zY3JpcHRzL3Rlc3QvQ1BQL1dlYkRPTVRlc3RPYmouY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9DUFAvV2ViRE9NVGVzdE9iai5j
cHAJKHJldmlzaW9uIDExNDM2MCkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMv
dGVzdC9DUFAvV2ViRE9NVGVzdE9iai5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI5LDExICsyOSwx
MyBAQAogI2luY2x1ZGUgIlNWR1BvaW50LmgiCiAjaW5jbHVkZSAiU2VyaWFsaXplZFNjcmlwdFZh
bHVlLmgiCiAjaW5jbHVkZSAiVGVzdE9iai5oIgorI2luY2x1ZGUgIlRoaXNDbGFzcy5oIgogI2lu
Y2x1ZGUgIldlYkRPTURpY3Rpb25hcnkuaCIKICNpbmNsdWRlICJXZWJET01Eb2N1bWVudC5oIgog
I2luY2x1ZGUgIldlYkRPTUlEQktleS5oIgogI2luY2x1ZGUgIldlYkRPTVNWR1BvaW50LmgiCiAj
aW5jbHVkZSAiV2ViRE9NU3RyaW5nLmgiCisjaW5jbHVkZSAiV2ViRE9NVGhpc0NsYXNzLmgiCiAj
aW5jbHVkZSAiV2ViRE9NYS5oIgogI2luY2x1ZGUgIldlYkRPTWIuaCIKICNpbmNsdWRlICJXZWJE
T01ib29sLmgiCkBAIC04MzgsNiArODQwLDE0IEBAIHZvaWQgV2ViRE9NVGVzdE9iajo6Y29uZGl0
aW9uYWxNZXRob2QzKCkKIAogI2VuZGlmCiAKK3ZvaWQgV2ViRE9NVGVzdE9iajo6bWV0aG9kUmVx
dWlyZXNUaGlzVG9QYXNzKGNvbnN0IFdlYkRPTVRoaXNDbGFzcyYgcGFyYW0pCit7CisgICAgaWYg
KCFpbXBsKCkpCisgICAgICAgIHJldHVybjsKKworICAgIGltcGwoKS0+bWV0aG9kUmVxdWlyZXNU
aGlzVG9QYXNzKHRvV2ViQ29yZShwYXJhbSkpOworfQorCiB2b2lkIFdlYkRPTVRlc3RPYmo6OmNs
YXNzTWV0aG9kKCkKIHsKICAgICBpZiAoIWltcGwoKSkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL3NjcmlwdHMvdGVzdC9DUFAvV2ViRE9NVGVzdE9iai5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9DUFAvV2ViRE9NVGVzdE9iai5oCShy
ZXZpc2lvbiAxMTQzNjApCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3Qv
Q1BQL1dlYkRPTVRlc3RPYmouaAkod29ya2luZyBjb3B5KQpAQCAtMzcsNiArMzcsNyBAQCBjbGFz
cyBXZWJET01JREJLZXk7CiBjbGFzcyBXZWJET01TVkdQb2ludDsKIGNsYXNzIFdlYkRPTVN0cmlu
ZzsKIGNsYXNzIFdlYkRPTVRlc3RPYmo7CitjbGFzcyBXZWJET01UaGlzQ2xhc3M7CiBjbGFzcyBX
ZWJET01hOwogY2xhc3MgV2ViRE9NYjsKIGNsYXNzIFdlYkRPTWJvb2w7CkBAIC0xNzEsNiArMTcy
LDcgQEAgcHVibGljOgogI2lmIEVOQUJMRShDb25kaXRpb24xKSB8fCBFTkFCTEUoQ29uZGl0aW9u
MikKICAgICB2b2lkIGNvbmRpdGlvbmFsTWV0aG9kMygpOwogI2VuZGlmCisgICAgdm9pZCBtZXRo
b2RSZXF1aXJlc1RoaXNUb1Bhc3MoY29uc3QgV2ViRE9NVGhpc0NsYXNzJiBwYXJhbSk7CiAgICAg
dm9pZCBjbGFzc01ldGhvZCgpOwogICAgIGludCBjbGFzc01ldGhvZFdpdGhPcHRpb25hbChpbnQg
YXJnKTsKICNpZiBFTkFCTEUoQ29uZGl0aW9uMSkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL3NjcmlwdHMvdGVzdC9HT2JqZWN0L1dlYktpdERPTVRlc3RPYmouY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9HT2JqZWN0L1dlYktpdERP
TVRlc3RPYmouY3BwCShyZXZpc2lvbiAxMTQzNjApCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy9zY3JpcHRzL3Rlc3QvR09iamVjdC9XZWJLaXRET01UZXN0T2JqLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtNDIsNiArNDIsOCBAQAogI2luY2x1ZGUgIndlYmtpdC9XZWJLaXRET01TZXJpYWxpemVk
U2NyaXB0VmFsdWUuaCIKICNpbmNsdWRlICJ3ZWJraXQvV2ViS2l0RE9NU2VyaWFsaXplZFNjcmlw
dFZhbHVlUHJpdmF0ZS5oIgogI2luY2x1ZGUgIndlYmtpdC9XZWJLaXRET01UZXN0T2JqUHJpdmF0
ZS5oIgorI2luY2x1ZGUgIndlYmtpdC9XZWJLaXRET01UaGlzQ2xhc3MuaCIKKyNpbmNsdWRlICJ3
ZWJraXQvV2ViS2l0RE9NVGhpc0NsYXNzUHJpdmF0ZS5oIgogI2luY2x1ZGUgIndlYmtpdC9XZWJL
aXRET01hLmgiCiAjaW5jbHVkZSAid2Via2l0L1dlYktpdERPTWFQcml2YXRlLmgiCiAjaW5jbHVk
ZSAid2Via2l0L1dlYktpdERPTWIuaCIKQEAgLTEyNTMsNiArMTI1NSwyMSBAQCB3ZWJraXRfZG9t
X3Rlc3Rfb2JqX2NvbmRpdGlvbmFsX21ldGhvZDMoCiB9CiAKIHZvaWQKK3dlYmtpdF9kb21fdGVz
dF9vYmpfbWV0aG9kX3JlcXVpcmVzX3RoaXNfdG9fcGFzcyhXZWJLaXRET01UZXN0T2JqKiBzZWxm
LCBXZWJLaXRET01UaGlzQ2xhc3MqIHBhcmFtKQoreworICAgIGdfcmV0dXJuX2lmX2ZhaWwoc2Vs
Zik7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIFdlYkNv
cmU6OlRlc3RPYmoqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgZ19yZXR1cm5faWZf
ZmFpbChwYXJhbSk7CisgICAgV2ViQ29yZTo6VGhpc0NsYXNzKiBjb252ZXJ0ZWRQYXJhbSA9IDA7
CisgICAgaWYgKHBhcmFtKSB7CisgICAgICAgIGNvbnZlcnRlZFBhcmFtID0gV2ViS2l0Ojpjb3Jl
KHBhcmFtKTsKKyAgICAgICAgZ19yZXR1cm5faWZfZmFpbChjb252ZXJ0ZWRQYXJhbSk7CisgICAg
fQorICAgIGl0ZW0tPm1ldGhvZFJlcXVpcmVzVGhpc1RvUGFzcyhjb252ZXJ0ZWRQYXJhbSk7Cit9
CisKK3ZvaWQKIHdlYmtpdF9kb21fdGVzdF9vYmpfY2xhc3NfbWV0aG9kKFdlYktpdERPTVRlc3RP
YmoqIHNlbGYpCiB7CiAgICAgZ19yZXR1cm5faWZfZmFpbChzZWxmKTsKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9HT2JqZWN0L1dlYktpdERPTVRlc3RPYmouaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvR09iamVj
dC9XZWJLaXRET01UZXN0T2JqLmgJKHJldmlzaW9uIDExNDM2MCkKKysrIFNvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9HT2JqZWN0L1dlYktpdERPTVRlc3RPYmouaAkod29ya2lu
ZyBjb3B5KQpAQCAtMzU1LDYgKzM1NSwxNyBAQCBXRUJLSVRfQVBJIHZvaWQKIHdlYmtpdF9kb21f
dGVzdF9vYmpfY29uZGl0aW9uYWxfbWV0aG9kMyhXZWJLaXRET01UZXN0T2JqKiBzZWxmKTsKIAog
LyoqCisgKiB3ZWJraXRfZG9tX3Rlc3Rfb2JqX21ldGhvZF9yZXF1aXJlc190aGlzX3RvX3Bhc3M6
CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NVGVzdE9iagorICogQHBhcmFtOiBBICNXZWJLaXRET01U
aGlzQ2xhc3MKKyAqCisgKiBSZXR1cm5zOgorICoKKyoqLworV0VCS0lUX0FQSSB2b2lkCit3ZWJr
aXRfZG9tX3Rlc3Rfb2JqX21ldGhvZF9yZXF1aXJlc190aGlzX3RvX3Bhc3MoV2ViS2l0RE9NVGVz
dE9iaiogc2VsZiwgV2ViS2l0RE9NVGhpc0NsYXNzKiBwYXJhbSk7CisKKy8qKgogICogd2Via2l0
X2RvbV90ZXN0X29ial9jbGFzc19tZXRob2Q6CiAgKiBAc2VsZjogQSAjV2ViS2l0RE9NVGVzdE9i
agogICoKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rl
c3RPYmouY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMv
dGVzdC9KUy9KU1Rlc3RPYmouY3BwCShyZXZpc2lvbiAxMTQzNjApCisrKyBTb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0T2JqLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMzYsNiArMzYsNyBAQAogI2luY2x1ZGUgIkpTU2NyaXB0UHJvZmlsZS5oIgogI2luY2x1ZGUg
IkpTVGVzdENhbGxiYWNrLmgiCiAjaW5jbHVkZSAiSlNUZXN0T2JqLmgiCisjaW5jbHVkZSAiSlNU
aGlzQ2xhc3MuaCIKICNpbmNsdWRlICJKU2EuaCIKICNpbmNsdWRlICJKU2IuaCIKICNpbmNsdWRl
ICJKU2Jvb2wuaCIKQEAgLTMwMSw2ICszMDIsNyBAQCBzdGF0aWMgY29uc3QgSGFzaFRhYmxlVmFs
dWUgSlNUZXN0T2JqUHJvCiAjaWYgRU5BQkxFKENvbmRpdGlvbjEpIHx8IEVOQUJMRShDb25kaXRp
b24yKQogICAgIHsgImNvbmRpdGlvbmFsTWV0aG9kMyIsIERvbnREZWxldGUgfCBKU0M6OkZ1bmN0
aW9uLCAoaW50cHRyX3Qpc3RhdGljX2Nhc3Q8TmF0aXZlRnVuY3Rpb24+KGpzVGVzdE9ialByb3Rv
dHlwZUZ1bmN0aW9uQ29uZGl0aW9uYWxNZXRob2QzKSwgKGludHB0cl90KTAsIE5vSW50cmluc2lj
IH0sCiAjZW5kaWYKKyAgICB7ICJtZXRob2RSZXF1aXJlc1RoaXNUb1Bhc3MiLCBEb250RGVsZXRl
IHwgSlNDOjpGdW5jdGlvbiwgKGludHB0cl90KXN0YXRpY19jYXN0PE5hdGl2ZUZ1bmN0aW9uPihq
c1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk1ldGhvZFJlcXVpcmVzVGhpc1RvUGFzcyksIChpbnRw
dHJfdCkxLCBOb0ludHJpbnNpYyB9LAogICAgIHsgIm92ZXJsb2FkZWRNZXRob2QiLCBEb250RGVs
ZXRlIHwgSlNDOjpGdW5jdGlvbiwgKGludHB0cl90KXN0YXRpY19jYXN0PE5hdGl2ZUZ1bmN0aW9u
Pihqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk92ZXJsb2FkZWRNZXRob2QpLCAoaW50cHRyX3Qp
MiwgTm9JbnRyaW5zaWMgfSwKICAgICB7ICJtZXRob2RXaXRoVW5zaWduZWRMb25nQXJyYXkiLCBE
b250RGVsZXRlIHwgSlNDOjpGdW5jdGlvbiwgKGludHB0cl90KXN0YXRpY19jYXN0PE5hdGl2ZUZ1
bmN0aW9uPihqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk1ldGhvZFdpdGhVbnNpZ25lZExvbmdB
cnJheSksIChpbnRwdHJfdCkxLCBOb0ludHJpbnNpYyB9LAogICAgIHsgImdldFNWR0RvY3VtZW50
IiwgRG9udERlbGV0ZSB8IEpTQzo6RnVuY3Rpb24sIChpbnRwdHJfdClzdGF0aWNfY2FzdDxOYXRp
dmVGdW5jdGlvbj4oanNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25HZXRTVkdEb2N1bWVudCksIChp
bnRwdHJfdCkwLCBOb0ludHJpbnNpYyB9LApAQCAtMTk4OCw2ICsxOTkwLDIzIEBAIEVuY29kZWRK
U1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2JqUHIKIAogI2VuZGlmCiAKK0VuY29kZWRKU1Zh
bHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25NZXRob2RSZXF1aXJl
c1RoaXNUb1Bhc3MoRXhlY1N0YXRlKiBleGVjKQoreworICAgIEpTVmFsdWUgdGhpc1ZhbHVlID0g
ZXhlYy0+aG9zdFRoaXNWYWx1ZSgpOworICAgIGlmICghdGhpc1ZhbHVlLmluaGVyaXRzKCZKU1Rl
c3RPYmo6OnNfaW5mbykpCisgICAgICAgIHJldHVybiB0aHJvd1ZNVHlwZUVycm9yKGV4ZWMpOwor
ICAgIEpTVGVzdE9iaiogY2FzdGVkVGhpcyA9IGpzQ2FzdDxKU1Rlc3RPYmoqPihhc09iamVjdCh0
aGlzVmFsdWUpKTsKKyAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKGNhc3RlZFRoaXMsICZK
U1Rlc3RPYmo6OnNfaW5mbyk7CisgICAgVGVzdE9iaiogaW1wbCA9IHN0YXRpY19jYXN0PFRlc3RP
YmoqPihjYXN0ZWRUaGlzLT5pbXBsKCkpOworICAgIGlmIChleGVjLT5hcmd1bWVudENvdW50KCkg
PCAxKQorICAgICAgICByZXR1cm4gdGhyb3dWTUVycm9yKGV4ZWMsIGNyZWF0ZVR5cGVFcnJvcihl
eGVjLCAiTm90IGVub3VnaCBhcmd1bWVudHMiKSk7CisgICAgVGhpc0NsYXNzKiBwYXJhbSh0b1Ro
aXNDbGFzcyhNQVlCRV9NSVNTSU5HX1BBUkFNRVRFUihleGVjLCAwLCBEZWZhdWx0SXNVbmRlZmlu
ZWQpKSk7CisgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgICAgICByZXR1cm4gSlNW
YWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOworICAgIGltcGwtPm1ldGhvZFJlcXVpcmVzVGhp
c1RvUGFzcyhwYXJhbSk7CisgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgp
KTsKK30KKwogc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2JqUHJv
dG90eXBlRnVuY3Rpb25PdmVybG9hZGVkTWV0aG9kMShFeGVjU3RhdGUqIGV4ZWMpCiB7CiAgICAg
SlNWYWx1ZSB0aGlzVmFsdWUgPSBleGVjLT5ob3N0VGhpc1ZhbHVlKCk7CkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0T2JqLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE9iai5oCShy
ZXZpc2lvbiAxMTQzNjApCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3Qv
SlMvSlNUZXN0T2JqLmgJKHdvcmtpbmcgY29weSkKQEAgLTE5Niw2ICsxOTYsNyBAQCBKU0M6OkVu
Y29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0CiAjaWYgRU5BQkxFKENvbmRpdGlvbjEp
IHx8IEVOQUJMRShDb25kaXRpb24yKQogSlNDOjpFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxM
IGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uQ29uZGl0aW9uYWxNZXRob2QzKEpTQzo6RXhlY1N0
YXRlKik7CiAjZW5kaWYKK0pTQzo6RW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RP
YmpQcm90b3R5cGVGdW5jdGlvbk1ldGhvZFJlcXVpcmVzVGhpc1RvUGFzcyhKU0M6OkV4ZWNTdGF0
ZSopOwogSlNDOjpFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9ialByb3RvdHlw
ZUZ1bmN0aW9uT3ZlcmxvYWRlZE1ldGhvZChKU0M6OkV4ZWNTdGF0ZSopOwogSlNDOjpFbmNvZGVk
SlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9iakNvbnN0cnVjdG9yRnVuY3Rpb25DbGFzc01l
dGhvZChKU0M6OkV4ZWNTdGF0ZSopOwogSlNDOjpFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxM
IGpzVGVzdE9iakNvbnN0cnVjdG9yRnVuY3Rpb25DbGFzc01ldGhvZFdpdGhPcHRpb25hbChKU0M6
OkV4ZWNTdGF0ZSopOwpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0
L09iakMvRE9NVGVzdE9iai5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L3NjcmlwdHMvdGVzdC9PYmpDL0RPTVRlc3RPYmouaAkocmV2aXNpb24gMTE0MzYwKQorKysgU291
cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L09iakMvRE9NVGVzdE9iai5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0zNyw2ICszNyw3IEBACiBAY2xhc3MgRE9NVGVzdE9iamVjdEFDb25zdHJ1
Y3RvcjsKIEBjbGFzcyBET01UZXN0T2JqZWN0QkNvbnN0cnVjdG9yOwogQGNsYXNzIERPTVRlc3RP
YmplY3RDQ29uc3RydWN0b3I7CitAY2xhc3MgRE9NVGhpc0NsYXNzOwogQGNsYXNzIERPTWE7CiBA
Y2xhc3MgRE9NYjsKIEBjbGFzcyBET01ib29sOwpAQCAtMjA4LDYgKzIwOSw3IEBAIGVudW0gewog
I2lmIEVOQUJMRShDb25kaXRpb24xKSB8fCBFTkFCTEUoQ29uZGl0aW9uMikKIC0gKHZvaWQpY29u
ZGl0aW9uYWxNZXRob2QzOwogI2VuZGlmCistICh2b2lkKW1ldGhvZFJlcXVpcmVzVGhpc1RvUGFz
czooRE9NVGhpc0NsYXNzICopcGFyYW07CiAtICh2b2lkKWNsYXNzTWV0aG9kOwogLSAoaW50KWNs
YXNzTWV0aG9kV2l0aE9wdGlvbmFsOihpbnQpYXJnOwogLSAodm9pZCljbGFzc01ldGhvZDI6KGlu
dClhcmc7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvT2JqQy9E
T01UZXN0T2JqLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Njcmlw
dHMvdGVzdC9PYmpDL0RPTVRlc3RPYmoubW0JKHJldmlzaW9uIDExNDM2MCkKKysrIFNvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9PYmpDL0RPTVRlc3RPYmoubW0JKHdvcmtpbmcg
Y29weSkKQEAgLTQ0LDYgKzQ0LDcgQEAKICNpbXBvcnQgIkRPTVRlc3RPYmplY3RBQ29uc3RydWN0
b3JJbnRlcm5hbC5oIgogI2ltcG9ydCAiRE9NVGVzdE9iamVjdEJDb25zdHJ1Y3RvckludGVybmFs
LmgiCiAjaW1wb3J0ICJET01UZXN0T2JqZWN0Q0NvbnN0cnVjdG9ySW50ZXJuYWwuaCIKKyNpbXBv
cnQgIkRPTVRoaXNDbGFzc0ludGVybmFsLmgiCiAjaW1wb3J0ICJET01hSW50ZXJuYWwuaCIKICNp
bXBvcnQgIkRPTWJJbnRlcm5hbC5oIgogI2ltcG9ydCAiRE9NYm9vbEludGVybmFsLmgiCkBAIC02
Niw2ICs2Nyw3IEBACiAjaW1wb3J0ICJUZXN0T2JqZWN0QUNvbnN0cnVjdG9yLmgiCiAjaW1wb3J0
ICJUZXN0T2JqZWN0QkNvbnN0cnVjdG9yLmgiCiAjaW1wb3J0ICJUZXN0T2JqZWN0Q0NvbnN0cnVj
dG9yLmgiCisjaW1wb3J0ICJUaGlzQ2xhc3MuaCIKICNpbXBvcnQgIlRocmVhZENoZWNrLmgiCiAj
aW1wb3J0ICJXZWJDb3JlT2JqQ0V4dHJhcy5oIgogI2ltcG9ydCAiV2ViU2NyaXB0T2JqZWN0UHJp
dmF0ZS5oIgpAQCAtOTMyLDYgKzkzNCwxMiBAQCAtICh2b2lkKWNvbmRpdGlvbmFsTWV0aG9kMwog
CiAjZW5kaWYKIAorLSAodm9pZCltZXRob2RSZXF1aXJlc1RoaXNUb1Bhc3M6KERPTVRoaXNDbGFz
cyAqKXBhcmFtCit7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOwor
ICAgIElNUEwtPm1ldGhvZFJlcXVpcmVzVGhpc1RvUGFzcyhjb3JlKHBhcmFtKSk7Cit9CisKIC0g
KHZvaWQpY2xhc3NNZXRob2QKIHsKICAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUg
c3RhdGU7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvVjgvVjhU
ZXN0T2JqLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRz
L3Rlc3QvVjgvVjhUZXN0T2JqLmNwcAkocmV2aXNpb24gMTE0MzYwKQorKysgU291cmNlL1dlYkNv
cmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Y4L1Y4VGVzdE9iai5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTQ1LDYgKzQ1LDcgQEAKICNpbmNsdWRlICJWOFNWR1BvaW50LmgiCiAjaW5jbHVkZSAiVjhT
Y3JpcHRQcm9maWxlLmgiCiAjaW5jbHVkZSAiVjhUZXN0Q2FsbGJhY2suaCIKKyNpbmNsdWRlICJW
OFRoaXNDbGFzcy5oIgogI2luY2x1ZGUgIlY4YS5oIgogI2luY2x1ZGUgIlY4YW55LmgiCiAjaW5j
bHVkZSAiVjhiLmgiCkBAIC0xNDg5LDYgKzE0OTAsMTcgQEAgc3RhdGljIHY4OjpIYW5kbGU8djg6
OlZhbHVlPiBjb25kaXRpb25hbAogCiAjZW5kaWYgLy8gRU5BQkxFKENvbmRpdGlvbjEpIHx8IEVO
QUJMRShDb25kaXRpb24yKQogCitzdGF0aWMgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IG1ldGhvZFJl
cXVpcmVzVGhpc1RvUGFzc0NhbGxiYWNrKGNvbnN0IHY4OjpBcmd1bWVudHMmIGFyZ3MpCit7Cisg
ICAgSU5DX1NUQVRTKCJET00uVGVzdE9iai5tZXRob2RSZXF1aXJlc1RoaXNUb1Bhc3MiKTsKKyAg
ICBpZiAoYXJncy5MZW5ndGgoKSA8IDEpCisgICAgICAgIHJldHVybiB0aHJvd0Vycm9yKCJOb3Qg
ZW5vdWdoIGFyZ3VtZW50cyIsIFY4UHJveHk6OlR5cGVFcnJvcik7CisgICAgVGVzdE9iaiogaW1w
ID0gVjhUZXN0T2JqOjp0b05hdGl2ZShhcmdzLkhvbGRlcigpKTsKKyAgICBFWENFUFRJT05fQkxP
Q0soVGhpc0NsYXNzKiwgcGFyYW0sIFY4VGhpc0NsYXNzOjpIYXNJbnN0YW5jZShNQVlCRV9NSVNT
SU5HX1BBUkFNRVRFUihhcmdzLCAwLCBEZWZhdWx0SXNVbmRlZmluZWQpKSA/IFY4VGhpc0NsYXNz
Ojp0b05hdGl2ZSh2ODo6SGFuZGxlPHY4OjpPYmplY3Q+OjpDYXN0KE1BWUJFX01JU1NJTkdfUEFS
QU1FVEVSKGFyZ3MsIDAsIERlZmF1bHRJc1VuZGVmaW5lZCkpKSA6IDApOworICAgIGltcC0+bWV0
aG9kUmVxdWlyZXNUaGlzVG9QYXNzKHBhcmFtKTsKKyAgICByZXR1cm4gdjg6OkhhbmRsZTx2ODo6
VmFsdWU+KCk7Cit9CisKIHN0YXRpYyB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gb3ZlcmxvYWRlZE1l
dGhvZDFDYWxsYmFjayhjb25zdCB2ODo6QXJndW1lbnRzJiBhcmdzKQogewogICAgIElOQ19TVEFU
UygiRE9NLlRlc3RPYmoub3ZlcmxvYWRlZE1ldGhvZDEiKTsKQEAgLTIwNzksNiArMjA5MSwxMiBA
QCBzdGF0aWMgdjg6OlBlcnNpc3RlbnQ8djg6OkZ1bmN0aW9uVGVtcGxhCiAgICAgdjg6OkhhbmRs
ZTx2ODo6RnVuY3Rpb25UZW1wbGF0ZT4gbWV0aG9kVGhhdFJlcXVpcmVzQWxsQXJnc0FuZFRocm93
c0FyZ3ZbbWV0aG9kVGhhdFJlcXVpcmVzQWxsQXJnc0FuZFRocm93c0FyZ2NdID0geyB2ODo6SGFu
ZGxlPHY4OjpGdW5jdGlvblRlbXBsYXRlPigpLCBWOFRlc3RPYmo6OkdldFJhd1RlbXBsYXRlKCkg
fTsKICAgICB2ODo6SGFuZGxlPHY4OjpTaWduYXR1cmU+IG1ldGhvZFRoYXRSZXF1aXJlc0FsbEFy
Z3NBbmRUaHJvd3NTaWduYXR1cmUgPSB2ODo6U2lnbmF0dXJlOjpOZXcoZGVzYywgbWV0aG9kVGhh
dFJlcXVpcmVzQWxsQXJnc0FuZFRocm93c0FyZ2MsIG1ldGhvZFRoYXRSZXF1aXJlc0FsbEFyZ3NB
bmRUaHJvd3NBcmd2KTsKICAgICBwcm90by0+U2V0KHY4OjpTdHJpbmc6Ok5ldygibWV0aG9kVGhh
dFJlcXVpcmVzQWxsQXJnc0FuZFRocm93cyIpLCB2ODo6RnVuY3Rpb25UZW1wbGF0ZTo6TmV3KFRl
c3RPYmpWOEludGVybmFsOjptZXRob2RUaGF0UmVxdWlyZXNBbGxBcmdzQW5kVGhyb3dzQ2FsbGJh
Y2ssIHY4OjpIYW5kbGU8djg6OlZhbHVlPigpLCBtZXRob2RUaGF0UmVxdWlyZXNBbGxBcmdzQW5k
VGhyb3dzU2lnbmF0dXJlKSk7CisKKyAgICAvLyBDdXN0b20gU2lnbmF0dXJlICdtZXRob2RSZXF1
aXJlc1RoaXNUb1Bhc3MnCisgICAgY29uc3QgaW50IG1ldGhvZFJlcXVpcmVzVGhpc1RvUGFzc0Fy
Z2MgPSAxOworICAgIHY4OjpIYW5kbGU8djg6OkZ1bmN0aW9uVGVtcGxhdGU+IG1ldGhvZFJlcXVp
cmVzVGhpc1RvUGFzc0FyZ3ZbbWV0aG9kUmVxdWlyZXNUaGlzVG9QYXNzQXJnY10gPSB7IFY4VGhp
c0NsYXNzOjpHZXRSYXdUZW1wbGF0ZSgpIH07CisgICAgdjg6OkhhbmRsZTx2ODo6U2lnbmF0dXJl
PiBtZXRob2RSZXF1aXJlc1RoaXNUb1Bhc3NTaWduYXR1cmUgPSB2ODo6U2lnbmF0dXJlOjpOZXco
ZGVzYywgbWV0aG9kUmVxdWlyZXNUaGlzVG9QYXNzQXJnYywgbWV0aG9kUmVxdWlyZXNUaGlzVG9Q
YXNzQXJndik7CisgICAgcHJvdG8tPlNldCh2ODo6U3RyaW5nOjpOZXcoIm1ldGhvZFJlcXVpcmVz
VGhpc1RvUGFzcyIpLCB2ODo6RnVuY3Rpb25UZW1wbGF0ZTo6TmV3KFRlc3RPYmpWOEludGVybmFs
OjptZXRob2RSZXF1aXJlc1RoaXNUb1Bhc3NDYWxsYmFjaywgdjg6OkhhbmRsZTx2ODo6VmFsdWU+
KCksIG1ldGhvZFJlcXVpcmVzVGhpc1RvUGFzc1NpZ25hdHVyZSkpOwogICAgIGRlc2MtPlNldCh2
ODo6U3RyaW5nOjpOZXcoImNsYXNzTWV0aG9kIiksIHY4OjpGdW5jdGlvblRlbXBsYXRlOjpOZXco
VGVzdE9ialY4SW50ZXJuYWw6OmNsYXNzTWV0aG9kQ2FsbGJhY2ssIHY4OjpIYW5kbGU8djg6OlZh
bHVlPigpLCB2ODo6TG9jYWw8djg6OlNpZ25hdHVyZT4oKSkpOwogICAgIGRlc2MtPlNldCh2ODo6
U3RyaW5nOjpOZXcoImNsYXNzTWV0aG9kV2l0aE9wdGlvbmFsIiksIHY4OjpGdW5jdGlvblRlbXBs
YXRlOjpOZXcoVGVzdE9ialY4SW50ZXJuYWw6OmNsYXNzTWV0aG9kV2l0aE9wdGlvbmFsQ2FsbGJh
Y2ssIHY4OjpIYW5kbGU8djg6OlZhbHVlPigpLCB2ODo6TG9jYWw8djg6OlNpZ25hdHVyZT4oKSkp
OwogICAgIGRlc2MtPlNldCh2ODo6U3RyaW5nOjpOZXcoImNsYXNzTWV0aG9kMiIpLCB2ODo6RnVu
Y3Rpb25UZW1wbGF0ZTo6TmV3KFY4VGVzdE9iajo6Y2xhc3NNZXRob2QyQ2FsbGJhY2ssIHY4OjpI
YW5kbGU8djg6OlZhbHVlPigpLCB2ODo6TG9jYWw8djg6OlNpZ25hdHVyZT4oKSkpOwo=
</data>
<flag name="review"
          id="142782"
          type_id="1"
          status="-"
          setter="haraken"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>137669</attachid>
            <date>2012-04-18 04:21:40 -0700</date>
            <delta_ts>2012-04-18 05:19:11 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>wip_pass_this.diff</filename>
            <type>text/plain</type>
            <size>21098</size>
            <attacher name="Vineet Chaudhary (vineetc)">code.vineet</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDExNDQ5OCkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDQ3IEBACisyMDEyLTA0LTE4ICBWaW5lZXQg
Q2hhdWRoYXJ5ICA8cmdmNzQ4QG1vdG9yb2xhLmNvbT4KKworICAgICAgICBBZGQgUGFzc1RoaXM9
KiB0byBzdXBwb3J0IHRoZSBjYWxsYmFja3Mgd2hpY2ggcmVxdWlyZXMgdG8gcGFzcyAidGhpcyIg
dmFsdWUuCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD04
NDIzMgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEFk
ZGluZyBQYXNzVGhpcz1YWFggdG8gYXR0cmlidXRlcyB3aWxsIGJlIHVzZWZ1bCBmb3IgdGhlIGNh
bGxiYWNrcyB3aGljaCByZXF1aXJlcyB0byBwYXNzICJ0aGlzIi4KKyAgICAgICAgVGhpcyB3aWxs
IGhlbHAgdG8gaWRlbnRpZnkgdGhlIHR5cGUoWFhYKSBvZiAidGhpcyIgdmFsdWUgaW4gY29kZWdl
bmVyYXRvci4KKworICAgICAgICBUZXN0czogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Rlc3RDYWxs
YmFjay5pZGwKKworICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvQ29kZUdlbmVyYXRvckpTLnBt
OgorICAgICAgICAoR2VuZXJhdGVDYWxsYmFja0ltcGxlbWVudGF0aW9uKTogTW9kaWZpZWQgY29k
ZWdlbmVyYXRvciB0byBzdXBwb3J0IFtQYXNzVGhpc10KKyAgICAgICAgKiBiaW5kaW5ncy9zY3Jp
cHRzL0NvZGVHZW5lcmF0b3JWOC5wbToKKyAgICAgICAgKEdlbmVyYXRlQ2FsbGJhY2tJbXBsZW1l
bnRhdGlvbik6IERpdHRvLgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvSURMQXR0cmlidXRl
cy50eHQ6IEFkZGVkIFBhc3NUaGlzPSoKKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3Qv
Q1BQL1dlYkRPTVRlc3RDYWxsYmFjay5jcHA6IE1vZG9maWVkIHJlc3VsdHMgZnJvbSBydW4tYmlu
ZGluZ3MtdGVzdHMuCisgICAgICAgIChXZWJET01UZXN0Q2FsbGJhY2s6OmNhbGxiYWNrV2l0aEJv
b2xlYW4pOgorICAgICAgICAoV2ViRE9NVGVzdENhbGxiYWNrOjpjYWxsYmFja1JlcXVpcmVzVGhp
c1RvUGFzcyk6CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0NQUC9XZWJET01UZXN0
Q2FsbGJhY2suaDogRGl0dG8uCisgICAgICAgIChXZWJET01UZXN0Q2FsbGJhY2spOgorICAgICAg
ICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9HT2JqZWN0L1dlYktpdERPTVRlc3RDYWxsYmFjay5j
cHA6IERpdHRvLgorICAgICAgICAod2Via2l0X2RvbV90ZXN0X2NhbGxiYWNrX2NhbGxiYWNrX3dp
dGhfYm9vbGVhbik6CisgICAgICAgICh3ZWJraXRfZG9tX3Rlc3RfY2FsbGJhY2tfY2FsbGJhY2tf
cmVxdWlyZXNfdGhpc190b19wYXNzKToKKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3Qv
R09iamVjdC9XZWJLaXRET01UZXN0Q2FsbGJhY2suaDogRGl0dG8uCisgICAgICAgICogYmluZGlu
Z3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdENhbGxiYWNrLmNwcDogRGl0dG8uCisgICAgICAgIChX
ZWJDb3JlOjpKU1Rlc3RDYWxsYmFjazo6Y2FsbGJhY2tXaXRoQm9vbGVhbik6CisgICAgICAgIChX
ZWJDb3JlKToKKyAgICAgICAgKFdlYkNvcmU6OkpTVGVzdENhbGxiYWNrOjpjYWxsYmFja1JlcXVp
cmVzVGhpc1RvUGFzcyk6CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVz
dENhbGxiYWNrLmg6IERpdHRvLgorICAgICAgICAoSlNUZXN0Q2FsbGJhY2spOgorICAgICAgICAq
IGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9PYmpDL0RPTVRlc3RDYWxsYmFjay5oOiBEaXR0by4KKyAg
ICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvT2JqQy9ET01UZXN0Q2FsbGJhY2subW06IERp
dHRvLgorICAgICAgICAoLVtET01UZXN0Q2FsbGJhY2sgY2FsbGJhY2tXaXRoQm9vbGVhbjpdKToK
KyAgICAgICAgKC1bRE9NVGVzdENhbGxiYWNrIGNhbGxiYWNrUmVxdWlyZXNUaGlzVG9QYXNzOnRo
aXNDbGFzc1BhcmFtOl0pOgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9UZXN0Q2Fs
bGJhY2suaWRsOiBEaXR0by4KKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvVjgvVjhU
ZXN0Q2FsbGJhY2suY3BwOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OlY4VGVzdENhbGxiYWNr
OjpjYWxsYmFja1dpdGhCb29sZWFuKToKKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoV2Vi
Q29yZTo6VjhUZXN0Q2FsbGJhY2s6OmNhbGxiYWNrUmVxdWlyZXNUaGlzVG9QYXNzKToKKyAgICAg
ICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvVjgvVjhUZXN0Q2FsbGJhY2suaDogRGl0dG8uCisg
ICAgICAgIChWOFRlc3RDYWxsYmFjayk6CisKIDIwMTItMDQtMTggIEphc29uIExpdSAgPGphc29u
LmxpdUB0b3JjaG1vYmlsZS5jb20uY24+CiAKICAgICAgICAgW0JsYWNrQmVycnldIEhUVFAgR0VU
IGhlYWRlciBoYXMgYSAiQ29va2llIiB3aGVuIHJlZnJlc2hpbmcgYSBwYWdlIGFmdGVyIGNvb2tp
ZXMgaGF2ZSBiZWVuIGNsZWFyZWQuCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3Jp
cHRzL0NvZGVHZW5lcmF0b3JKUy5wbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0b3JKUy5wbQkocmV2aXNpb24gMTE0MzYwKQorKysgU291
cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy9Db2RlR2VuZXJhdG9ySlMucG0JKHdvcmtpbmcg
Y29weSkKQEAgLTI2ODUsMTQgKzI2ODUsMjYgQEAgc3ViIEdlbmVyYXRlQ2FsbGJhY2tJbXBsZW1l
bnRhdGlvbgogICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICJcbiIgLiBHZXROYXRpdmVU
eXBlKCRmdW5jdGlvbi0+c2lnbmF0dXJlLT50eXBlKSAuICIgJHtjbGFzc05hbWV9OjoiIC4gJGZ1
bmN0aW9uLT5zaWduYXR1cmUtPm5hbWUgLiAiKCIpOwogCiAgICAgICAgICAgICBteSBAYXJncyA9
ICgpOworICAgICAgICAgICAgbXkgQGFyZ3NDaGVjayA9ICgpOworICAgICAgICAgICAgbXkgJHRo
aXNUeXBlID0gJGZ1bmN0aW9uLT5zaWduYXR1cmUtPmV4dGVuZGVkQXR0cmlidXRlcy0+eyJQYXNz
VGhpcyJ9OwogICAgICAgICAgICAgZm9yZWFjaCBteSAkcGFyYW0gKEBwYXJhbXMpIHsKKyAgICAg
ICAgICAgICAgICBteSAkcGFyYW1OYW1lID0gJHBhcmFtLT5uYW1lOwogICAgICAgICAgICAgICAg
IEFkZEluY2x1ZGVzRm9yVHlwZUluSW1wbCgkcGFyYW0tPnR5cGUsIDEpOwogICAgICAgICAgICAg
ICAgIHB1c2goQGFyZ3MsIEdldE5hdGl2ZVR5cGUoJHBhcmFtLT50eXBlKSAuICIgIiAuICRwYXJh
bS0+bmFtZSk7CisgICAgICAgICAgICAgICAgaWYgKCR0aGlzVHlwZSBhbmQgJHRoaXNUeXBlIGVx
ICRwYXJhbS0+dHlwZSkgeworICAgICAgICAgICAgICAgICAgICBwdXNoKEBhcmdzQ2hlY2ssIDw8
RU5EKTsKKyAgICBBU1NFUlQoJHtwYXJhbU5hbWV9KTsKKyAgICBpZiAoISR7cGFyYW1OYW1lfSkK
KyAgICAgICAgcmV0dXJuIHRydWU7CisKK0VORAorICAgICAgICAgICAgICAgIH0KICAgICAgICAg
ICAgIH0KICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCBqb2luKCIsICIsIEBhcmdzKSk7
CiAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIilcbiIpOwogCiAgICAgICAgICAgICBw
dXNoKEBpbXBsQ29udGVudCwgIntcbiIpOworICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQs
IEBhcmdzQ2hlY2spIGlmIEBhcmdzQ2hlY2s7CiAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVu
dCwgIiAgICBpZiAoIWNhbkludm9rZUNhbGxiYWNrKCkpXG4iKTsKICAgICAgICAgICAgIHB1c2go
QGltcGxDb250ZW50LCAiICAgICAgICByZXR1cm4gdHJ1ZTtcblxuIik7CiAgICAgICAgICAgICBw
dXNoKEBpbXBsQ29udGVudCwgIiAgICBSZWZQdHI8JGNsYXNzTmFtZT4gcHJvdGVjdCh0aGlzKTtc
blxuIik7CkBAIC0yNzEyLDcgKzI3MjQsMjAgQEAgc3ViIEdlbmVyYXRlQ2FsbGJhY2tJbXBsZW1l
bnRhdGlvbgogICAgICAgICAgICAgfQogCiAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwg
IlxuICAgIGJvb2wgcmFpc2VkRXhjZXB0aW9uID0gZmFsc2U7XG4iKTsKLSAgICAgICAgICAgIHB1
c2goQGltcGxDb250ZW50LCAiICAgIG1fZGF0YS0+aW52b2tlQ2FsbGJhY2soYXJncywgJnJhaXNl
ZEV4Y2VwdGlvbik7XG4iKTsKKyAgICAgICAgICAgIGlmICgkdGhpc1R5cGUpIHsKKyAgICAgICAg
ICAgICAgICBmb3JlYWNoIG15ICRwYXJhbSAoQHBhcmFtcykgeworICAgICAgICAgICAgICAgICAg
ICBuZXh0IGlmICRwYXJhbS0+dHlwZSBuZSAkdGhpc1R5cGU7CisgICAgICAgICAgICAgICAgICAg
IG15ICRwYXJhbU5hbWUgPSAkcGFyYW0tPm5hbWU7CisgICAgICAgICAgICAgICAgICAgIHB1c2go
QGltcGxDb250ZW50LCA8PEVORCk7CisgICAgSlNWYWx1ZSBqcyR7cGFyYW1OYW1lfSA9IHRvSlMo
ZXhlYywgbV9kYXRhLT5nbG9iYWxPYmplY3QoKSwgJHtwYXJhbU5hbWV9KTsKKyAgICBtX2RhdGEt
Pmludm9rZUNhbGxiYWNrKGpzJHtwYXJhbU5hbWV9LCBhcmdzLCAmcmFpc2VkRXhjZXB0aW9uKTsK
KworRU5ECisgICAgICAgICAgICAgICAgICAgIGxhc3Q7CisgICAgICAgICAgICAgICAgfQorICAg
ICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAg
ICBtX2RhdGEtPmludm9rZUNhbGxiYWNrKGFyZ3MsICZyYWlzZWRFeGNlcHRpb24pO1xuIik7Cisg
ICAgICAgICAgICB9CiAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICByZXR1cm4g
IXJhaXNlZEV4Y2VwdGlvbjtcbiIpOwogICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICJ9
XG4iKTsKICAgICAgICAgfQpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy9D
b2RlR2VuZXJhdG9yVjgucG0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
c2NyaXB0cy9Db2RlR2VuZXJhdG9yVjgucG0JKHJldmlzaW9uIDExNDM2MCkKKysrIFNvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvQ29kZUdlbmVyYXRvclY4LnBtCSh3b3JraW5nIGNvcHkp
CkBAIC0zMDMxLDE0ICszMDMxLDI2IEBAIEVORAogICAgICAgICAgICAgcHVzaChAaW1wbENvbnRl
bnQsICJcbiIgLiBHZXROYXRpdmVUeXBlRm9yQ2FsbGJhY2tzKCRmdW5jdGlvbi0+c2lnbmF0dXJl
LT50eXBlKSAuICIgJHtjbGFzc05hbWV9OjoiIC4gJGZ1bmN0aW9uLT5zaWduYXR1cmUtPm5hbWUg
LiAiKCIpOwogCiAgICAgICAgICAgICBteSBAYXJncyA9ICgpOworICAgICAgICAgICAgbXkgQGFy
Z3NDaGVjayA9ICgpOworICAgICAgICAgICAgbXkgJHRoaXNUeXBlID0gJGZ1bmN0aW9uLT5zaWdu
YXR1cmUtPmV4dGVuZGVkQXR0cmlidXRlcy0+eyJQYXNzVGhpcyJ9OwogICAgICAgICAgICAgZm9y
ZWFjaCBteSAkcGFyYW0gKEBwYXJhbXMpIHsKKyAgICAgICAgICAgICAgICBteSAkcGFyYW1OYW1l
ID0gJHBhcmFtLT5uYW1lOwogICAgICAgICAgICAgICAgIEFkZEluY2x1ZGVzRm9yVHlwZSgkcGFy
YW0tPnR5cGUpOwogICAgICAgICAgICAgICAgIHB1c2goQGFyZ3MsIEdldE5hdGl2ZVR5cGVGb3JD
YWxsYmFja3MoJHBhcmFtLT50eXBlKSAuICIgIiAuICRwYXJhbS0+bmFtZSk7CisgICAgICAgICAg
ICAgICAgaWYgKCR0aGlzVHlwZSBhbmQgJHRoaXNUeXBlIGVxICRwYXJhbS0+dHlwZSkgeworICAg
ICAgICAgICAgICAgICAgICBwdXNoKEBhcmdzQ2hlY2ssIDw8RU5EKTsKKyAgICBBU1NFUlQoJHtw
YXJhbU5hbWV9KTsKKyAgICBpZiAoISR7cGFyYW1OYW1lfSkKKyAgICAgICAgcmV0dXJuIHRydWU7
CisKK0VORAorICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KICAgICAgICAgICAgIHB1
c2goQGltcGxDb250ZW50LCBqb2luKCIsICIsIEBhcmdzKSk7CiAKICAgICAgICAgICAgIHB1c2go
QGltcGxDb250ZW50LCAiKVxuIik7CiAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIntc
biIpOworICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsIEBhcmdzQ2hlY2spIGlmIEBhcmdz
Q2hlY2s7CiAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICBpZiAoIWNhbkludm9r
ZUNhbGxiYWNrKCkpXG4iKTsKICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgICAg
ICByZXR1cm4gdHJ1ZTtcblxuIik7CiAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAg
ICB2ODo6SGFuZGxlU2NvcGUgaGFuZGxlU2NvcGU7XG5cbiIpOwpAQCAtMzA2Nyw3ICszMDc5LDE2
IEBAIEVORAogICAgICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiXG4gICAgdjg6Okhh
bmRsZTx2ODo6VmFsdWU+ICphcmd2ID0gMDtcblxuIik7CiAgICAgICAgICAgICB9CiAgICAgICAg
ICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICBib29sIGNhbGxiYWNrUmV0dXJuVmFsdWUgPSBm
YWxzZTtcbiIpOwotICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgcmV0dXJuICFp
bnZva2VDYWxsYmFjayhtX2NhbGxiYWNrLCAiIC4gc2NhbGFyKEBwYXJhbXMpIC4gIiwgYXJndiwg
Y2FsbGJhY2tSZXR1cm5WYWx1ZSwgc2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpKTtcbiIpOworICAg
ICAgICAgICAgaWYgKCR0aGlzVHlwZSkgeworICAgICAgICAgICAgICAgIGZvcmVhY2ggbXkgJHBh
cmFtIChAcGFyYW1zKSB7CisgICAgICAgICAgICAgICAgICAgIG5leHQgaWYgJHBhcmFtLT50eXBl
IG5lICR0aGlzVHlwZTsKKyAgICAgICAgICAgICAgICAgICAgbXkgJHBhcmFtTmFtZSA9ICRwYXJh
bS0+bmFtZTsKKyAgICAgICAgICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgcmV0
dXJuICFpbnZva2VDYWxsYmFjayhtX2NhbGxiYWNrLCB2ODo6SGFuZGxlPHY4OjpPYmplY3Q+OjpD
YXN0KCR7cGFyYW1OYW1lfUhhbmRsZSksICIgLiBzY2FsYXIoQHBhcmFtcykgLiAiLCBhcmd2LCBj
YWxsYmFja1JldHVyblZhbHVlLCBzY3JpcHRFeGVjdXRpb25Db250ZXh0KCkpO1xuIik7CisgICAg
ICAgICAgICAgICAgICAgIGxhc3Q7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfSBl
bHNlIHsKKyAgICAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICByZXR1cm4gIWlu
dm9rZUNhbGxiYWNrKG1fY2FsbGJhY2ssICIgLiBzY2FsYXIoQHBhcmFtcykgLiAiLCBhcmd2LCBj
YWxsYmFja1JldHVyblZhbHVlLCBzY3JpcHRFeGVjdXRpb25Db250ZXh0KCkpO1xuIik7CisgICAg
ICAgICAgICB9CiAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIn1cbiIpOwogICAgICAg
ICB9CiAgICAgfQpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy9JRExBdHRy
aWJ1dGVzLnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRz
L0lETEF0dHJpYnV0ZXMudHh0CShyZXZpc2lvbiAxMTQzNjApCisrKyBTb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy9zY3JpcHRzL0lETEF0dHJpYnV0ZXMudHh0CSh3b3JraW5nIGNvcHkpCkBAIC05MSw2
ICs5MSw3IEBAIE9iakNQb2x5bW9ycGhpYwogT2JqQ1Byb3RvY29sCiBPbWl0Q29uc3RydWN0b3IK
IE9wdGlvbmFsPXxEZWZhdWx0SXNOdWxsU3RyaW5nfERlZmF1bHRJc1VuZGVmaW5lZAorUGFzc1Ro
aXM9KgogUmVmbGVjdD0qCiBSZXBsYWNlYWJsZQogUmVwbGFjZWFibGVDb25zdHJ1Y3RvcgpJbmRl
eDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Rlc3RDYWxsYmFjay5pZGwK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Rlc3RD
YWxsYmFjay5pZGwJKHJldmlzaW9uIDExNDM2MCkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L3NjcmlwdHMvdGVzdC9UZXN0Q2FsbGJhY2suaWRsCSh3b3JraW5nIGNvcHkpCkBAIC00MCw1ICs0
MCw2IEBAIG1vZHVsZSB0ZXN0IHsKICAgICAgIFtDdXN0b21dIGxvbmcgY3VzdG9tQ2FsbGJhY2so
aW4gQ2xhc3M1IGNsYXNzNVBhcmFtLCBpbiBDbGFzczYgY2xhc3M2UGFyYW0pOwogICAgICAgYm9v
bGVhbiBjYWxsYmFja1dpdGhTdHJpbmdMaXN0KGluIERPTVN0cmluZ0xpc3QgbGlzdFBhcmFtKTsK
ICAgICAgIGJvb2xlYW4gY2FsbGJhY2tXaXRoQm9vbGVhbihpbiBib29sZWFuIGJvb2xQYXJhbSk7
CisgICAgICBbUGFzc1RoaXM9VGhpc0NsYXNzXSBib29sZWFuIGNhbGxiYWNrUmVxdWlyZXNUaGlz
VG9QYXNzKGluIENsYXNzOCBjbGFzczhQYXJhbSwgaW4gVGhpc0NsYXNzIHRoaXNDbGFzc1BhcmFt
KTsKICAgICB9OwogfQpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0
L0NQUC9XZWJET01UZXN0Q2FsbGJhY2suY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9DUFAvV2ViRE9NVGVzdENhbGxiYWNrLmNwcAkocmV2aXNp
b24gMTE0MzYwKQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0NQUC9X
ZWJET01UZXN0Q2FsbGJhY2suY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNywxNCArMjcsMTggQEAK
ICNpbmNsdWRlICJDbGFzczEuaCIKICNpbmNsdWRlICJDbGFzczIuaCIKICNpbmNsdWRlICJDbGFz
czMuaCIKKyNpbmNsdWRlICJDbGFzczguaCIKICNpbmNsdWRlICJET01TdHJpbmdMaXN0LmgiCiAj
aW5jbHVkZSAiS1VSTC5oIgogI2luY2x1ZGUgIlRlc3RDYWxsYmFjay5oIgorI2luY2x1ZGUgIlRo
aXNDbGFzcy5oIgogI2luY2x1ZGUgIldlYkRPTUNsYXNzMS5oIgogI2luY2x1ZGUgIldlYkRPTUNs
YXNzMi5oIgogI2luY2x1ZGUgIldlYkRPTUNsYXNzMy5oIgorI2luY2x1ZGUgIldlYkRPTUNsYXNz
OC5oIgogI2luY2x1ZGUgIldlYkRPTURPTVN0cmluZ0xpc3QuaCIKICNpbmNsdWRlICJXZWJET01T
dHJpbmcuaCIKKyNpbmNsdWRlICJXZWJET01UaGlzQ2xhc3MuaCIKICNpbmNsdWRlICJXZWJFeGNl
cHRpb25IYW5kbGVyLmgiCiAjaW5jbHVkZSAid3RmL3RleHQvQXRvbWljU3RyaW5nLmgiCiAjaW5j
bHVkZSA8d3RmL0dldFB0ci5oPgpAQCAtMTMzLDYgKzEzNywxNCBAQCBib29sIFdlYkRPTVRlc3RD
YWxsYmFjazo6Y2FsbGJhY2tXaXRoQm9vCiAgICAgcmV0dXJuIGltcGwoKS0+Y2FsbGJhY2tXaXRo
Qm9vbGVhbihib29sUGFyYW0pOwogfQogCitib29sIFdlYkRPTVRlc3RDYWxsYmFjazo6Y2FsbGJh
Y2tSZXF1aXJlc1RoaXNUb1Bhc3MoY29uc3QgV2ViRE9NQ2xhc3M4JiBjbGFzczhQYXJhbSwgY29u
c3QgV2ViRE9NVGhpc0NsYXNzJiB0aGlzQ2xhc3NQYXJhbSkKK3sKKyAgICBpZiAoIWltcGwoKSkK
KyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgcmV0dXJuIGltcGwoKS0+Y2FsbGJhY2tSZXF1
aXJlc1RoaXNUb1Bhc3ModG9XZWJDb3JlKGNsYXNzOFBhcmFtKSwgdG9XZWJDb3JlKHRoaXNDbGFz
c1BhcmFtKSk7Cit9CisKIFdlYkNvcmU6OlRlc3RDYWxsYmFjayogdG9XZWJDb3JlKGNvbnN0IFdl
YkRPTVRlc3RDYWxsYmFjayYgd3JhcHBlcikKIHsKICAgICByZXR1cm4gd3JhcHBlci5pbXBsKCk7
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvQ1BQL1dlYkRPTVRl
c3RDYWxsYmFjay5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Njcmlw
dHMvdGVzdC9DUFAvV2ViRE9NVGVzdENhbGxiYWNrLmgJKHJldmlzaW9uIDExNDM2MCkKKysrIFNv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9DUFAvV2ViRE9NVGVzdENhbGxiYWNr
LmgJKHdvcmtpbmcgY29weSkKQEAgLTM1LDcgKzM1LDkgQEAgY2xhc3MgVGVzdENhbGxiYWNrOwog
Y2xhc3MgV2ViRE9NQ2xhc3MxOwogY2xhc3MgV2ViRE9NQ2xhc3MyOwogY2xhc3MgV2ViRE9NQ2xh
c3MzOworY2xhc3MgV2ViRE9NQ2xhc3M4OwogY2xhc3MgV2ViRE9NRE9NU3RyaW5nTGlzdDsKK2Ns
YXNzIFdlYkRPTVRoaXNDbGFzczsKIAogY2xhc3MgV2ViRE9NVGVzdENhbGxiYWNrIDogcHVibGlj
IFdlYkRPTU9iamVjdCB7CiBwdWJsaWM6CkBAIC01MSw2ICs1Myw3IEBAIHB1YmxpYzoKICAgICBp
bnQgY2FsbGJhY2tXaXRoTm9uQm9vbFJldHVyblR5cGUoY29uc3QgV2ViRE9NQ2xhc3MzJiBjbGFz
czNQYXJhbSk7CiAgICAgYm9vbCBjYWxsYmFja1dpdGhTdHJpbmdMaXN0KGNvbnN0IFdlYkRPTURP
TVN0cmluZ0xpc3QmIGxpc3RQYXJhbSk7CiAgICAgYm9vbCBjYWxsYmFja1dpdGhCb29sZWFuKGJv
b2wgYm9vbFBhcmFtKTsKKyAgICBib29sIGNhbGxiYWNrUmVxdWlyZXNUaGlzVG9QYXNzKGNvbnN0
IFdlYkRPTUNsYXNzOCYgY2xhc3M4UGFyYW0sIGNvbnN0IFdlYkRPTVRoaXNDbGFzcyYgdGhpc0Ns
YXNzUGFyYW0pOwogCiAgICAgV2ViQ29yZTo6VGVzdENhbGxiYWNrKiBpbXBsKCkgY29uc3Q7CiAK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9HT2JqZWN0L1dlYktp
dERPTVRlc3RDYWxsYmFjay5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGlu
Z3Mvc2NyaXB0cy90ZXN0L0dPYmplY3QvV2ViS2l0RE9NVGVzdENhbGxiYWNrLmNwcAkocmV2aXNp
b24gMTE0MzYwKQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0dPYmpl
Y3QvV2ViS2l0RE9NVGVzdENhbGxiYWNrLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzUsOSArMzUs
MTMgQEAKICNpbmNsdWRlICJ3ZWJraXQvV2ViS2l0RE9NQ2xhc3MyUHJpdmF0ZS5oIgogI2luY2x1
ZGUgIndlYmtpdC9XZWJLaXRET01DbGFzczMuaCIKICNpbmNsdWRlICJ3ZWJraXQvV2ViS2l0RE9N
Q2xhc3MzUHJpdmF0ZS5oIgorI2luY2x1ZGUgIndlYmtpdC9XZWJLaXRET01DbGFzczguaCIKKyNp
bmNsdWRlICJ3ZWJraXQvV2ViS2l0RE9NQ2xhc3M4UHJpdmF0ZS5oIgogI2luY2x1ZGUgIndlYmtp
dC9XZWJLaXRET01ET01TdHJpbmdMaXN0LmgiCiAjaW5jbHVkZSAid2Via2l0L1dlYktpdERPTURP
TVN0cmluZ0xpc3RQcml2YXRlLmgiCiAjaW5jbHVkZSAid2Via2l0L1dlYktpdERPTVRlc3RDYWxs
YmFja1ByaXZhdGUuaCIKKyNpbmNsdWRlICJ3ZWJraXQvV2ViS2l0RE9NVGhpc0NsYXNzLmgiCisj
aW5jbHVkZSAid2Via2l0L1dlYktpdERPTVRoaXNDbGFzc1ByaXZhdGUuaCIKICNpbmNsdWRlICJ3
ZWJraXRkZWZpbmVzLmgiCiAjaW5jbHVkZSAid2Via2l0Z2xvYmFsc3ByaXZhdGUuaCIKICNpbmNs
dWRlICJ3ZWJraXRtYXJzaGFsLmgiCkBAIC0yNjMsNiArMjY3LDMzIEBAIHdlYmtpdF9kb21fdGVz
dF9jYWxsYmFja19jYWxsYmFja193aXRoX2IKICAgICByZXR1cm4gcmVzdWx0OwogI2Vsc2UKICAg
ICBXRUJLSVRfV0FSTl9GRUFUVVJFX05PVF9QUkVTRU5UKCJTUUwgRGF0YWJhc2UiKQorICAgIHJl
dHVybiBzdGF0aWNfY2FzdDxnYm9vbGVhbj4oMCk7CisjZW5kaWYgLyogRU5BQkxFKFNRTF9EQVRB
QkFTRSkgKi8KK30KKworZ2Jvb2xlYW4KK3dlYmtpdF9kb21fdGVzdF9jYWxsYmFja19jYWxsYmFj
a19yZXF1aXJlc190aGlzX3RvX3Bhc3MoV2ViS2l0RE9NVGVzdENhbGxiYWNrKiBzZWxmLCBXZWJL
aXRET01DbGFzczgqIGNsYXNzOFBhcmFtLCBXZWJLaXRET01UaGlzQ2xhc3MqIHRoaXNDbGFzc1Bh
cmFtKQoreworI2lmIEVOQUJMRShTUUxfREFUQUJBU0UpCisgICAgZ19yZXR1cm5fdmFsX2lmX2Zh
aWwoc2VsZiwgMCk7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOwor
ICAgIFdlYkNvcmU6OlRlc3RDYWxsYmFjayogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAg
ICBnX3JldHVybl92YWxfaWZfZmFpbChjbGFzczhQYXJhbSwgMCk7CisgICAgZ19yZXR1cm5fdmFs
X2lmX2ZhaWwodGhpc0NsYXNzUGFyYW0sIDApOworICAgIFdlYkNvcmU6OkNsYXNzOCogY29udmVy
dGVkQ2xhc3M4UGFyYW0gPSAwOworICAgIGlmIChjbGFzczhQYXJhbSkgeworICAgICAgICBjb252
ZXJ0ZWRDbGFzczhQYXJhbSA9IFdlYktpdDo6Y29yZShjbGFzczhQYXJhbSk7CisgICAgICAgIGdf
cmV0dXJuX3ZhbF9pZl9mYWlsKGNvbnZlcnRlZENsYXNzOFBhcmFtLCAwKTsKKyAgICB9CisgICAg
V2ViQ29yZTo6VGhpc0NsYXNzKiBjb252ZXJ0ZWRUaGlzQ2xhc3NQYXJhbSA9IDA7CisgICAgaWYg
KHRoaXNDbGFzc1BhcmFtKSB7CisgICAgICAgIGNvbnZlcnRlZFRoaXNDbGFzc1BhcmFtID0gV2Vi
S2l0Ojpjb3JlKHRoaXNDbGFzc1BhcmFtKTsKKyAgICAgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwo
Y29udmVydGVkVGhpc0NsYXNzUGFyYW0sIDApOworICAgIH0KKyAgICBnYm9vbGVhbiByZXN1bHQg
PSBpdGVtLT5jYWxsYmFja1JlcXVpcmVzVGhpc1RvUGFzcyhjb252ZXJ0ZWRDbGFzczhQYXJhbSwg
Y29udmVydGVkVGhpc0NsYXNzUGFyYW0pOworICAgIHJldHVybiByZXN1bHQ7CisjZWxzZQorICAg
IFdFQktJVF9XQVJOX0ZFQVRVUkVfTk9UX1BSRVNFTlQoIlNRTCBEYXRhYmFzZSIpCiAgICAgcmV0
dXJuIHN0YXRpY19jYXN0PGdib29sZWFuPigwKTsKICNlbmRpZiAvKiBFTkFCTEUoU1FMX0RBVEFC
QVNFKSAqLwogfQpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0dP
YmplY3QvV2ViS2l0RE9NVGVzdENhbGxiYWNrLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0dPYmplY3QvV2ViS2l0RE9NVGVzdENhbGxiYWNrLmgJ
KHJldmlzaW9uIDExNDM2MCkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVz
dC9HT2JqZWN0L1dlYktpdERPTVRlc3RDYWxsYmFjay5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMTEs
NiArMTExLDE4IEBAIHdlYmtpdF9kb21fdGVzdF9jYWxsYmFja19jYWxsYmFja193aXRoX3MKIFdF
QktJVF9BUEkgZ2Jvb2xlYW4KIHdlYmtpdF9kb21fdGVzdF9jYWxsYmFja19jYWxsYmFja193aXRo
X2Jvb2xlYW4oV2ViS2l0RE9NVGVzdENhbGxiYWNrKiBzZWxmLCBnYm9vbGVhbiBib29sUGFyYW0p
OwogCisvKioKKyAqIHdlYmtpdF9kb21fdGVzdF9jYWxsYmFja19jYWxsYmFja19yZXF1aXJlc190
aGlzX3RvX3Bhc3M6CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NVGVzdENhbGxiYWNrCisgKiBAY2xh
c3M4UGFyYW06IEEgI1dlYktpdERPTUNsYXNzOAorICogQHRoaXNDbGFzc1BhcmFtOiBBICNXZWJL
aXRET01UaGlzQ2xhc3MKKyAqCisgKiBSZXR1cm5zOgorICoKKyoqLworV0VCS0lUX0FQSSBnYm9v
bGVhbgord2Via2l0X2RvbV90ZXN0X2NhbGxiYWNrX2NhbGxiYWNrX3JlcXVpcmVzX3RoaXNfdG9f
cGFzcyhXZWJLaXRET01UZXN0Q2FsbGJhY2sqIHNlbGYsIFdlYktpdERPTUNsYXNzOCogY2xhc3M4
UGFyYW0sIFdlYktpdERPTVRoaXNDbGFzcyogdGhpc0NsYXNzUGFyYW0pOworCiBHX0VORF9ERUNM
UwogCiAjZW5kaWYgLyogV2ViS2l0RE9NVGVzdENhbGxiYWNrX2ggKi8KSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RDYWxsYmFjay5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdENh
bGxiYWNrLmNwcAkocmV2aXNpb24gMTE0MzYwKQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
c2NyaXB0cy90ZXN0L0pTL0pTVGVzdENhbGxiYWNrLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjYs
NyArMjYsOSBAQAogCiAjaW5jbHVkZSAiSlNDbGFzczEuaCIKICNpbmNsdWRlICJKU0NsYXNzMi5o
IgorI2luY2x1ZGUgIkpTQ2xhc3M4LmgiCiAjaW5jbHVkZSAiSlNET01TdHJpbmdMaXN0LmgiCisj
aW5jbHVkZSAiSlNUaGlzQ2xhc3MuaCIKICNpbmNsdWRlICJTY3JpcHRFeGVjdXRpb25Db250ZXh0
LmgiCiAjaW5jbHVkZSA8cnVudGltZS9KU0xvY2suaD4KIApAQCAtMTQ2LDYgKzE0OCwzMSBAQCBi
b29sIEpTVGVzdENhbGxiYWNrOjpjYWxsYmFja1dpdGhCb29sZWFuCiAgICAgcmV0dXJuICFyYWlz
ZWRFeGNlcHRpb247CiB9CiAKK2Jvb2wgSlNUZXN0Q2FsbGJhY2s6OmNhbGxiYWNrUmVxdWlyZXNU
aGlzVG9QYXNzKENsYXNzOCogY2xhc3M4UGFyYW0sIFRoaXNDbGFzcyogdGhpc0NsYXNzUGFyYW0p
Cit7CisgICAgQVNTRVJUKHRoaXNDbGFzc1BhcmFtKTsKKyAgICBpZiAoIXRoaXNDbGFzc1BhcmFt
KQorICAgICAgICByZXR1cm4gdHJ1ZTsKKworICAgIGlmICghY2FuSW52b2tlQ2FsbGJhY2soKSkK
KyAgICAgICAgcmV0dXJuIHRydWU7CisKKyAgICBSZWZQdHI8SlNUZXN0Q2FsbGJhY2s+IHByb3Rl
Y3QodGhpcyk7CisKKyAgICBKU0xvY2sgbG9jayhTaWxlbmNlQXNzZXJ0aW9uc09ubHkpOworCisg
ICAgRXhlY1N0YXRlKiBleGVjID0gbV9kYXRhLT5nbG9iYWxPYmplY3QoKS0+Z2xvYmFsRXhlYygp
OworICAgIE1hcmtlZEFyZ3VtZW50QnVmZmVyIGFyZ3M7CisgICAgYXJncy5hcHBlbmQodG9KUyhl
eGVjLCBtX2RhdGEtPmdsb2JhbE9iamVjdCgpLCBjbGFzczhQYXJhbSkpOworICAgIGFyZ3MuYXBw
ZW5kKHRvSlMoZXhlYywgbV9kYXRhLT5nbG9iYWxPYmplY3QoKSwgdGhpc0NsYXNzUGFyYW0pKTsK
KworICAgIGJvb2wgcmFpc2VkRXhjZXB0aW9uID0gZmFsc2U7CisgICAgSlNWYWx1ZSBqc3RoaXND
bGFzc1BhcmFtID0gdG9KUyhleGVjLCBtX2RhdGEtPmdsb2JhbE9iamVjdCgpLCB0aGlzQ2xhc3NQ
YXJhbSk7CisgICAgbV9kYXRhLT5pbnZva2VDYWxsYmFjayhqc3RoaXNDbGFzc1BhcmFtLCBhcmdz
LCAmcmFpc2VkRXhjZXB0aW9uKTsKKworICAgIHJldHVybiAhcmFpc2VkRXhjZXB0aW9uOworfQor
CiB9CiAKICNlbmRpZiAvLyBFTkFCTEUoU1FMX0RBVEFCQVNFKQpJbmRleDogU291cmNlL1dlYkNv
cmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdENhbGxiYWNrLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdENhbGxiYWNr
LmgJKHJldmlzaW9uIDExNDM2MCkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMv
dGVzdC9KUy9KU1Rlc3RDYWxsYmFjay5oCSh3b3JraW5nIGNvcHkpCkBAIC00Nyw2ICs0Nyw3IEBA
IHB1YmxpYzoKICAgICB2aXJ0dWFsIGludCBjdXN0b21DYWxsYmFjayhDbGFzczUqIGNsYXNzNVBh
cmFtLCBDbGFzczYqIGNsYXNzNlBhcmFtKTsKICAgICB2aXJ0dWFsIGJvb2wgY2FsbGJhY2tXaXRo
U3RyaW5nTGlzdChET01TdHJpbmdMaXN0KiBsaXN0UGFyYW0pOwogICAgIHZpcnR1YWwgYm9vbCBj
YWxsYmFja1dpdGhCb29sZWFuKGJvb2wgYm9vbFBhcmFtKTsKKyAgICB2aXJ0dWFsIGJvb2wgY2Fs
bGJhY2tSZXF1aXJlc1RoaXNUb1Bhc3MoQ2xhc3M4KiBjbGFzczhQYXJhbSwgVGhpc0NsYXNzKiB0
aGlzQ2xhc3NQYXJhbSk7CiAKIHByaXZhdGU6CiAgICAgSlNUZXN0Q2FsbGJhY2soSlNDOjpKU09i
amVjdCogY2FsbGJhY2ssIEpTRE9NR2xvYmFsT2JqZWN0Kik7CkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvT2JqQy9ET01UZXN0Q2FsbGJhY2suaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvT2JqQy9ET01UZXN0Q2Fs
bGJhY2suaAkocmV2aXNpb24gMTE0MzYwKQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2Ny
aXB0cy90ZXN0L09iakMvRE9NVGVzdENhbGxiYWNrLmgJKHdvcmtpbmcgY29weSkKQEAgLTMzLDcg
KzMzLDkgQEAKIEBjbGFzcyBET01DbGFzczM7CiBAY2xhc3MgRE9NQ2xhc3M1OwogQGNsYXNzIERP
TUNsYXNzNjsKK0BjbGFzcyBET01DbGFzczg7CiBAY2xhc3MgRE9NRE9NU3RyaW5nTGlzdDsKK0Bj
bGFzcyBET01UaGlzQ2xhc3M7CiBAY2xhc3MgTlNTdHJpbmc7CiAKIEBpbnRlcmZhY2UgRE9NVGVz
dENhbGxiYWNrIDogRE9NT2JqZWN0CkBAIC00NCw2ICs0Niw3IEBACiAtIChpbnQpY3VzdG9tQ2Fs
bGJhY2s6KERPTUNsYXNzNSAqKWNsYXNzNVBhcmFtIGNsYXNzNlBhcmFtOihET01DbGFzczYgKilj
bGFzczZQYXJhbTsKIC0gKEJPT0wpY2FsbGJhY2tXaXRoU3RyaW5nTGlzdDooRE9NRE9NU3RyaW5n
TGlzdCAqKWxpc3RQYXJhbTsKIC0gKEJPT0wpY2FsbGJhY2tXaXRoQm9vbGVhbjooQk9PTClib29s
UGFyYW07CistIChCT09MKWNhbGxiYWNrUmVxdWlyZXNUaGlzVG9QYXNzOihET01DbGFzczggKilj
bGFzczhQYXJhbSB0aGlzQ2xhc3NQYXJhbTooRE9NVGhpc0NsYXNzICopdGhpc0NsYXNzUGFyYW07
CiBAZW5kCiAKICNlbmRpZgpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90
ZXN0L09iakMvRE9NVGVzdENhbGxiYWNrLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9PYmpDL0RPTVRlc3RDYWxsYmFjay5tbQkocmV2aXNpb24g
MTE0MzYwKQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L09iakMvRE9N
VGVzdENhbGxiYWNrLm1tCSh3b3JraW5nIGNvcHkpCkBAIC0zNyw2ICszNyw3IEBACiAjaW1wb3J0
ICJDbGFzczMuaCIKICNpbXBvcnQgIkNsYXNzNS5oIgogI2ltcG9ydCAiQ2xhc3M2LmgiCisjaW1w
b3J0ICJDbGFzczguaCIKICNpbXBvcnQgIkRPTUJsb2JJbnRlcm5hbC5oIgogI2ltcG9ydCAiRE9N
Q1NTUnVsZUludGVybmFsLmgiCiAjaW1wb3J0ICJET01DU1NWYWx1ZUludGVybmFsLmgiCkBAIC00
NSwxNiArNDYsMTkgQEAKICNpbXBvcnQgIkRPTUNsYXNzM0ludGVybmFsLmgiCiAjaW1wb3J0ICJE
T01DbGFzczVJbnRlcm5hbC5oIgogI2ltcG9ydCAiRE9NQ2xhc3M2SW50ZXJuYWwuaCIKKyNpbXBv
cnQgIkRPTUNsYXNzOEludGVybmFsLmgiCiAjaW1wb3J0ICJET01ET01TdHJpbmdMaXN0SW50ZXJu
YWwuaCIKICNpbXBvcnQgIkRPTUV2ZW50SW50ZXJuYWwuaCIKICNpbXBvcnQgIkRPTU5vZGVJbnRl
cm5hbC5oIgogI2ltcG9ydCAiRE9NU3RyaW5nTGlzdC5oIgogI2ltcG9ydCAiRE9NU3R5bGVTaGVl
dEludGVybmFsLmgiCiAjaW1wb3J0ICJET01UZXN0Q2FsbGJhY2tJbnRlcm5hbC5oIgorI2ltcG9y
dCAiRE9NVGhpc0NsYXNzSW50ZXJuYWwuaCIKICNpbXBvcnQgIkV4Y2VwdGlvbkhhbmRsZXJzLmgi
CiAjaW1wb3J0ICJKU01haW5UaHJlYWRFeGVjU3RhdGUuaCIKICNpbXBvcnQgIktVUkwuaCIKICNp
bXBvcnQgIlRlc3RDYWxsYmFjay5oIgorI2ltcG9ydCAiVGhpc0NsYXNzLmgiCiAjaW1wb3J0ICJU
aHJlYWRDaGVjay5oIgogI2ltcG9ydCAiV2ViQ29yZU9iakNFeHRyYXMuaCIKICNpbXBvcnQgIldl
YlNjcmlwdE9iamVjdFByaXZhdGUuaCIKQEAgLTEyMyw2ICsxMjcsMTIgQEAgLSAoQk9PTCljYWxs
YmFja1dpdGhCb29sZWFuOihCT09MKWJvb2xQYQogICAgIHJldHVybiBJTVBMLT5jYWxsYmFja1dp
dGhCb29sZWFuKGJvb2xQYXJhbSk7CiB9CiAKKy0gKEJPT0wpY2FsbGJhY2tSZXF1aXJlc1RoaXNU
b1Bhc3M6KERPTUNsYXNzOCAqKWNsYXNzOFBhcmFtIHRoaXNDbGFzc1BhcmFtOihET01UaGlzQ2xh
c3MgKil0aGlzQ2xhc3NQYXJhbQoreworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0
ZSBzdGF0ZTsKKyAgICByZXR1cm4gSU1QTC0+Y2FsbGJhY2tSZXF1aXJlc1RoaXNUb1Bhc3MoY29y
ZShjbGFzczhQYXJhbSksIGNvcmUodGhpc0NsYXNzUGFyYW0pKTsKK30KKwogQGVuZAogCiBXZWJD
b3JlOjpUZXN0Q2FsbGJhY2sqIGNvcmUoRE9NVGVzdENhbGxiYWNrICp3cmFwcGVyKQpJbmRleDog
U291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Y4L1Y4VGVzdENhbGxiYWNrLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvVjgv
VjhUZXN0Q2FsbGJhY2suY3BwCShyZXZpc2lvbiAxMTQzNjApCisrKyBTb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy9zY3JpcHRzL3Rlc3QvVjgvVjhUZXN0Q2FsbGJhY2suY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0yNyw5ICsyNywxMSBAQAogI2luY2x1ZGUgIlY4QmluZGluZy5oIgogI2luY2x1ZGUgIlY4
Q2xhc3MxLmgiCiAjaW5jbHVkZSAiVjhDbGFzczIuaCIKKyNpbmNsdWRlICJWOENsYXNzOC5oIgog
I2luY2x1ZGUgIlY4Q3VzdG9tVm9pZENhbGxiYWNrLmgiCiAjaW5jbHVkZSAiVjhET01TdHJpbmdM
aXN0LmgiCiAjaW5jbHVkZSAiVjhQcm94eS5oIgorI2luY2x1ZGUgIlY4VGhpc0NsYXNzLmgiCiAj
aW5jbHVkZSA8d3RmL0dldFB0ci5oPgogI2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+CiAjaW5j
bHVkZSA8d3RmL1JlZlB0ci5oPgpAQCAtMTkxLDYgKzE5Myw0NSBAQCBib29sIFY4VGVzdENhbGxi
YWNrOjpjYWxsYmFja1dpdGhCb29sZWFuCiAgICAgcmV0dXJuICFpbnZva2VDYWxsYmFjayhtX2Nh
bGxiYWNrLCAxLCBhcmd2LCBjYWxsYmFja1JldHVyblZhbHVlLCBzY3JpcHRFeGVjdXRpb25Db250
ZXh0KCkpOwogfQogCitib29sIFY4VGVzdENhbGxiYWNrOjpjYWxsYmFja1JlcXVpcmVzVGhpc1Rv
UGFzcyhDbGFzczgqIGNsYXNzOFBhcmFtLCBUaGlzQ2xhc3MqIHRoaXNDbGFzc1BhcmFtKQorewor
ICAgIEFTU0VSVCh0aGlzQ2xhc3NQYXJhbSk7CisgICAgaWYgKCF0aGlzQ2xhc3NQYXJhbSkKKyAg
ICAgICAgcmV0dXJuIHRydWU7CisKKyAgICBpZiAoIWNhbkludm9rZUNhbGxiYWNrKCkpCisgICAg
ICAgIHJldHVybiB0cnVlOworCisgICAgdjg6OkhhbmRsZVNjb3BlIGhhbmRsZVNjb3BlOworCisg
ICAgdjg6OkhhbmRsZTx2ODo6Q29udGV4dD4gdjhDb250ZXh0ID0gdG9WOENvbnRleHQoc2NyaXB0
RXhlY3V0aW9uQ29udGV4dCgpLCBtX3dvcmxkQ29udGV4dCk7CisgICAgaWYgKHY4Q29udGV4dC5J
c0VtcHR5KCkpCisgICAgICAgIHJldHVybiB0cnVlOworCisgICAgdjg6OkNvbnRleHQ6OlNjb3Bl
IHNjb3BlKHY4Q29udGV4dCk7CisKKyAgICB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gY2xhc3M4UGFy
YW1IYW5kbGUgPSB0b1Y4KGNsYXNzOFBhcmFtKTsKKyAgICBpZiAoY2xhc3M4UGFyYW1IYW5kbGUu
SXNFbXB0eSgpKSB7CisgICAgICAgIGlmICghaXNTY3JpcHRDb250cm9sbGVyVGVybWluYXRpbmco
KSkKKyAgICAgICAgICAgIENSQVNIKCk7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKyAg
ICB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gdGhpc0NsYXNzUGFyYW1IYW5kbGUgPSB0b1Y4KHRoaXND
bGFzc1BhcmFtKTsKKyAgICBpZiAodGhpc0NsYXNzUGFyYW1IYW5kbGUuSXNFbXB0eSgpKSB7Cisg
ICAgICAgIGlmICghaXNTY3JpcHRDb250cm9sbGVyVGVybWluYXRpbmcoKSkKKyAgICAgICAgICAg
IENSQVNIKCk7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKworICAgIHY4OjpIYW5kbGU8
djg6OlZhbHVlPiBhcmd2W10gPSB7CisgICAgICAgIGNsYXNzOFBhcmFtSGFuZGxlLAorICAgICAg
ICB0aGlzQ2xhc3NQYXJhbUhhbmRsZQorICAgIH07CisKKyAgICBib29sIGNhbGxiYWNrUmV0dXJu
VmFsdWUgPSBmYWxzZTsKKyAgICByZXR1cm4gIWludm9rZUNhbGxiYWNrKG1fY2FsbGJhY2ssIHY4
OjpIYW5kbGU8djg6Ok9iamVjdD46OkNhc3QodGhpc0NsYXNzUGFyYW1IYW5kbGUpLCAyLCBhcmd2
LCBjYWxsYmFja1JldHVyblZhbHVlLCBzY3JpcHRFeGVjdXRpb25Db250ZXh0KCkpOworfQorCiB9
IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKICNlbmRpZiAvLyBFTkFCTEUoU1FMX0RBVEFCQVNFKQpJ
bmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Y4L1Y4VGVzdENhbGxi
YWNrLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0
L1Y4L1Y4VGVzdENhbGxiYWNrLmgJKHJldmlzaW9uIDExNDM2MCkKKysrIFNvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9WOC9WOFRlc3RDYWxsYmFjay5oCSh3b3JraW5nIGNvcHkp
CkBAIC01Miw2ICs1Miw3IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIGludCBjdXN0b21DYWxsYmFj
ayhDbGFzczUqIGNsYXNzNVBhcmFtLCBDbGFzczYqIGNsYXNzNlBhcmFtKTsKICAgICB2aXJ0dWFs
IGJvb2wgY2FsbGJhY2tXaXRoU3RyaW5nTGlzdChSZWZQdHI8RE9NU3RyaW5nTGlzdD4gbGlzdFBh
cmFtKTsKICAgICB2aXJ0dWFsIGJvb2wgY2FsbGJhY2tXaXRoQm9vbGVhbihib29sIGJvb2xQYXJh
bSk7CisgICAgdmlydHVhbCBib29sIGNhbGxiYWNrUmVxdWlyZXNUaGlzVG9QYXNzKENsYXNzOCog
Y2xhc3M4UGFyYW0sIFRoaXNDbGFzcyogdGhpc0NsYXNzUGFyYW0pOwogCiBwcml2YXRlOgogICAg
IFY4VGVzdENhbGxiYWNrKHY4OjpMb2NhbDx2ODo6T2JqZWN0PiwgU2NyaXB0RXhlY3V0aW9uQ29u
dGV4dCopOwo=
</data>
<flag name="review"
          id="142796"
          type_id="1"
          status="-"
          setter="haraken"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>137671</attachid>
            <date>2012-04-18 05:19:11 -0700</date>
            <delta_ts>2012-04-18 11:03:29 -0700</delta_ts>
            <desc>Updated Patch</desc>
            <filename>wip_pass_this.diff</filename>
            <type>text/plain</type>
            <size>21179</size>
            <attacher name="Vineet Chaudhary (vineetc)">code.vineet</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDExNDQ5OCkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDQ3IEBACisyMDEyLTA0LTE4ICBWaW5lZXQg
Q2hhdWRoYXJ5ICA8cmdmNzQ4QG1vdG9yb2xhLmNvbT4KKworICAgICAgICBBZGQgUGFzc1RoaXM9
KiB0byBzdXBwb3J0IHRoZSBjYWxsYmFja3Mgd2hpY2ggcmVxdWlyZXMgdG8gcGFzcyAidGhpcyIg
dmFsdWUuCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD04
NDIzMgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEFk
ZGluZyBQYXNzVGhpc1RvQ2FsbGJhY2s9WFhYIHRvIGF0dHJpYnV0ZXMgd2lsbCBiZSB1c2VmdWwg
Zm9yIHRoZSBjYWxsYmFja3Mgd2hpY2ggcmVxdWlyZXMgdG8gcGFzcyAidGhpcyIuCisgICAgICAg
IFRoaXMgd2lsbCBoZWxwIHRvIGlkZW50aWZ5IHRoZSB0eXBlKFhYWCkgb2YgInRoaXMiIHZhbHVl
IGluIGNvZGVnZW5lcmF0b3IuCisKKyAgICAgICAgVGVzdHM6IGJpbmRpbmdzL3NjcmlwdHMvdGVz
dC9UZXN0Q2FsbGJhY2suaWRsCisKKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5l
cmF0b3JKUy5wbTogCisgICAgICAgIChHZW5lcmF0ZUNhbGxiYWNrSW1wbGVtZW50YXRpb24pOiBN
b2RpZmllZCBjb2RlZ2VuZXJhdG9yIHRvIHN1cHBvcnQgW1Bhc3NUaGlzVG9DYWxsYmFja10KKyAg
ICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0b3JWOC5wbToKKyAgICAgICAgKEdl
bmVyYXRlQ2FsbGJhY2tJbXBsZW1lbnRhdGlvbik6IERpdHRvLgorICAgICAgICAqIGJpbmRpbmdz
L3NjcmlwdHMvSURMQXR0cmlidXRlcy50eHQ6IEFkZGVkIFBhc3NUaGlzVG9DYWxsYmFjaz0qCisg
ICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0NQUC9XZWJET01UZXN0Q2FsbGJhY2suY3Bw
OiBNb2RvZmllZCByZXN1bHRzIGZyb20gcnVuLWJpbmRpbmdzLXRlc3RzLgorICAgICAgICAoV2Vi
RE9NVGVzdENhbGxiYWNrOjpjYWxsYmFja1dpdGhCb29sZWFuKToKKyAgICAgICAgKFdlYkRPTVRl
c3RDYWxsYmFjazo6Y2FsbGJhY2tSZXF1aXJlc1RoaXNUb1Bhc3MpOgorICAgICAgICAqIGJpbmRp
bmdzL3NjcmlwdHMvdGVzdC9DUFAvV2ViRE9NVGVzdENhbGxiYWNrLmg6IERpdHRvLgorICAgICAg
ICAoV2ViRE9NVGVzdENhbGxiYWNrKToKKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3Qv
R09iamVjdC9XZWJLaXRET01UZXN0Q2FsbGJhY2suY3BwOiBEaXR0by4KKyAgICAgICAgKHdlYmtp
dF9kb21fdGVzdF9jYWxsYmFja19jYWxsYmFja193aXRoX2Jvb2xlYW4pOgorICAgICAgICAod2Vi
a2l0X2RvbV90ZXN0X2NhbGxiYWNrX2NhbGxiYWNrX3JlcXVpcmVzX3RoaXNfdG9fcGFzcyk6Cisg
ICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0dPYmplY3QvV2ViS2l0RE9NVGVzdENhbGxi
YWNrLmg6IERpdHRvLgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RD
YWxsYmFjay5jcHA6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6SlNUZXN0Q2FsbGJhY2s6OmNh
bGxiYWNrV2l0aEJvb2xlYW4pOgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChXZWJDb3Jl
OjpKU1Rlc3RDYWxsYmFjazo6Y2FsbGJhY2tSZXF1aXJlc1RoaXNUb1Bhc3MpOgorICAgICAgICAq
IGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RDYWxsYmFjay5oOiBEaXR0by4KKyAgICAg
ICAgKEpTVGVzdENhbGxiYWNrKToKKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvT2Jq
Qy9ET01UZXN0Q2FsbGJhY2suaDogRGl0dG8uCisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90
ZXN0L09iakMvRE9NVGVzdENhbGxiYWNrLm1tOiBEaXR0by4KKyAgICAgICAgKC1bRE9NVGVzdENh
bGxiYWNrIGNhbGxiYWNrV2l0aEJvb2xlYW46XSk6CisgICAgICAgICgtW0RPTVRlc3RDYWxsYmFj
ayBjYWxsYmFja1JlcXVpcmVzVGhpc1RvUGFzczp0aGlzQ2xhc3NQYXJhbTpdKToKKyAgICAgICAg
KiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvVGVzdENhbGxiYWNrLmlkbDogQWRkZWQgdGVzdCB0byB2
ZXJpZnkgZ2VuZXJhdGVkIGNvZGUuCisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Y4
L1Y4VGVzdENhbGxiYWNrLmNwcDogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpWOFRlc3RDYWxs
YmFjazo6Y2FsbGJhY2tXaXRoQm9vbGVhbik6CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAg
KFdlYkNvcmU6OlY4VGVzdENhbGxiYWNrOjpjYWxsYmFja1JlcXVpcmVzVGhpc1RvUGFzcyk6Cisg
ICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Y4L1Y4VGVzdENhbGxiYWNrLmg6IERpdHRv
LgorICAgICAgICAoVjhUZXN0Q2FsbGJhY2spOgorCiAyMDEyLTA0LTE4ICBKYXNvbiBMaXUgIDxq
YXNvbi5saXVAdG9yY2htb2JpbGUuY29tLmNuPgogCiAgICAgICAgIFtCbGFja0JlcnJ5XSBIVFRQ
IEdFVCBoZWFkZXIgaGFzIGEgIkNvb2tpZSIgd2hlbiByZWZyZXNoaW5nIGEgcGFnZSBhZnRlciBj
b29raWVzIGhhdmUgYmVlbiBjbGVhcmVkLgpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
c2NyaXB0cy9Db2RlR2VuZXJhdG9ySlMucG0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
YmluZGluZ3Mvc2NyaXB0cy9Db2RlR2VuZXJhdG9ySlMucG0JKHJldmlzaW9uIDExNDM2MCkKKysr
IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvQ29kZUdlbmVyYXRvckpTLnBtCSh3b3Jr
aW5nIGNvcHkpCkBAIC0yNjg1LDE0ICsyNjg1LDI0IEBAIHN1YiBHZW5lcmF0ZUNhbGxiYWNrSW1w
bGVtZW50YXRpb24KICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiXG4iIC4gR2V0TmF0
aXZlVHlwZSgkZnVuY3Rpb24tPnNpZ25hdHVyZS0+dHlwZSkgLiAiICR7Y2xhc3NOYW1lfTo6IiAu
ICRmdW5jdGlvbi0+c2lnbmF0dXJlLT5uYW1lIC4gIigiKTsKIAogICAgICAgICAgICAgbXkgQGFy
Z3MgPSAoKTsKKyAgICAgICAgICAgIG15IEBhcmdzQ2hlY2sgPSAoKTsKKyAgICAgICAgICAgIG15
ICR0aGlzVHlwZSA9ICRmdW5jdGlvbi0+c2lnbmF0dXJlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPnsi
UGFzc1RoaXNUb0NhbGxiYWNrIn07CiAgICAgICAgICAgICBmb3JlYWNoIG15ICRwYXJhbSAoQHBh
cmFtcykgeworICAgICAgICAgICAgICAgIG15ICRwYXJhbU5hbWUgPSAkcGFyYW0tPm5hbWU7CiAg
ICAgICAgICAgICAgICAgQWRkSW5jbHVkZXNGb3JUeXBlSW5JbXBsKCRwYXJhbS0+dHlwZSwgMSk7
Ci0gICAgICAgICAgICAgICAgcHVzaChAYXJncywgR2V0TmF0aXZlVHlwZSgkcGFyYW0tPnR5cGUp
IC4gIiAiIC4gJHBhcmFtLT5uYW1lKTsKKyAgICAgICAgICAgICAgICBwdXNoKEBhcmdzLCBHZXRO
YXRpdmVUeXBlKCRwYXJhbS0+dHlwZSkgLiAiICIgLiAkcGFyYW1OYW1lKTsKKyAgICAgICAgICAg
ICAgICBpZiAoJHRoaXNUeXBlIGFuZCAkdGhpc1R5cGUgZXEgJHBhcmFtLT50eXBlKSB7CisgICAg
ICAgICAgICAgICAgICAgIHB1c2goQGFyZ3NDaGVjaywgPDxFTkQpOworICAgIEFTU0VSVCgke3Bh
cmFtTmFtZX0pOworCitFTkQKKyAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9CiAgICAg
ICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgam9pbigiLCAiLCBAYXJncykpOwogICAgICAgICAg
ICAgcHVzaChAaW1wbENvbnRlbnQsICIpXG4iKTsKIAogICAgICAgICAgICAgcHVzaChAaW1wbENv
bnRlbnQsICJ7XG4iKTsKKyAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCBAYXJnc0NoZWNr
KSBpZiBAYXJnc0NoZWNrOwogICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgaWYg
KCFjYW5JbnZva2VDYWxsYmFjaygpKVxuIik7CiAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVu
dCwgIiAgICAgICAgcmV0dXJuIHRydWU7XG5cbiIpOwogICAgICAgICAgICAgcHVzaChAaW1wbENv
bnRlbnQsICIgICAgUmVmUHRyPCRjbGFzc05hbWU+IHByb3RlY3QodGhpcyk7XG5cbiIpOwpAQCAt
MjcxMiw3ICsyNzIyLDIwIEBAIHN1YiBHZW5lcmF0ZUNhbGxiYWNrSW1wbGVtZW50YXRpb24KICAg
ICAgICAgICAgIH0KIAogICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICJcbiAgICBib29s
IHJhaXNlZEV4Y2VwdGlvbiA9IGZhbHNlO1xuIik7Ci0gICAgICAgICAgICBwdXNoKEBpbXBsQ29u
dGVudCwgIiAgICBtX2RhdGEtPmludm9rZUNhbGxiYWNrKGFyZ3MsICZyYWlzZWRFeGNlcHRpb24p
O1xuIik7CisgICAgICAgICAgICBpZiAoJHRoaXNUeXBlKSB7CisgICAgICAgICAgICAgICAgZm9y
ZWFjaCBteSAkcGFyYW0gKEBwYXJhbXMpIHsKKyAgICAgICAgICAgICAgICAgICAgbmV4dCBpZiAk
cGFyYW0tPnR5cGUgbmUgJHRoaXNUeXBlOworICAgICAgICAgICAgICAgICAgICBteSAkcGFyYW1O
YW1lID0gJHBhcmFtLT5uYW1lOworICAgICAgICAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVu
dCwgPDxFTkQpOworICAgIEpTVmFsdWUganMke3BhcmFtTmFtZX0gPSB0b0pTKGV4ZWMsIG1fZGF0
YS0+Z2xvYmFsT2JqZWN0KCksICR7cGFyYW1OYW1lfSk7CisgICAgbV9kYXRhLT5pbnZva2VDYWxs
YmFjayhqcyR7cGFyYW1OYW1lfSwgYXJncywgJnJhaXNlZEV4Y2VwdGlvbik7CisKK0VORAorICAg
ICAgICAgICAgICAgICAgICBsYXN0OworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0g
ZWxzZSB7CisgICAgICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgbV9kYXRhLT5p
bnZva2VDYWxsYmFjayhhcmdzLCAmcmFpc2VkRXhjZXB0aW9uKTtcbiIpOworICAgICAgICAgICAg
fQogICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgcmV0dXJuICFyYWlzZWRFeGNl
cHRpb247XG4iKTsKICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAifVxuIik7CiAgICAg
ICAgIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvQ29kZUdlbmVyYXRv
clY4LnBtCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvQ29k
ZUdlbmVyYXRvclY4LnBtCShyZXZpc2lvbiAxMTQzNjApCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0b3JWOC5wbQkod29ya2luZyBjb3B5KQpAQCAtMzAzMSwx
NCArMzAzMSwyNCBAQCBFTkQKICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiXG4iIC4g
R2V0TmF0aXZlVHlwZUZvckNhbGxiYWNrcygkZnVuY3Rpb24tPnNpZ25hdHVyZS0+dHlwZSkgLiAi
ICR7Y2xhc3NOYW1lfTo6IiAuICRmdW5jdGlvbi0+c2lnbmF0dXJlLT5uYW1lIC4gIigiKTsKIAog
ICAgICAgICAgICAgbXkgQGFyZ3MgPSAoKTsKKyAgICAgICAgICAgIG15IEBhcmdzQ2hlY2sgPSAo
KTsKKyAgICAgICAgICAgIG15ICR0aGlzVHlwZSA9ICRmdW5jdGlvbi0+c2lnbmF0dXJlLT5leHRl
bmRlZEF0dHJpYnV0ZXMtPnsiUGFzc1RoaXNUb0NhbGxiYWNrIn07CiAgICAgICAgICAgICBmb3Jl
YWNoIG15ICRwYXJhbSAoQHBhcmFtcykgeworICAgICAgICAgICAgICAgIG15ICRwYXJhbU5hbWUg
PSAkcGFyYW0tPm5hbWU7CiAgICAgICAgICAgICAgICAgQWRkSW5jbHVkZXNGb3JUeXBlKCRwYXJh
bS0+dHlwZSk7Ci0gICAgICAgICAgICAgICAgcHVzaChAYXJncywgR2V0TmF0aXZlVHlwZUZvckNh
bGxiYWNrcygkcGFyYW0tPnR5cGUpIC4gIiAiIC4gJHBhcmFtLT5uYW1lKTsKKyAgICAgICAgICAg
ICAgICBwdXNoKEBhcmdzLCBHZXROYXRpdmVUeXBlRm9yQ2FsbGJhY2tzKCRwYXJhbS0+dHlwZSkg
LiAiICIgLiAkcGFyYW1OYW1lKTsKKyAgICAgICAgICAgICAgICBpZiAoJHRoaXNUeXBlIGFuZCAk
dGhpc1R5cGUgZXEgJHBhcmFtLT50eXBlKSB7CisgICAgICAgICAgICAgICAgICAgIHB1c2goQGFy
Z3NDaGVjaywgPDxFTkQpOworICAgIEFTU0VSVCgke3BhcmFtTmFtZX0pOworCitFTkQKKyAgICAg
ICAgICAgICAgICB9CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVu
dCwgam9pbigiLCAiLCBAYXJncykpOwogCiAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwg
IilcbiIpOwogICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICJ7XG4iKTsKKyAgICAgICAg
ICAgIHB1c2goQGltcGxDb250ZW50LCBAYXJnc0NoZWNrKSBpZiBAYXJnc0NoZWNrOwogICAgICAg
ICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgaWYgKCFjYW5JbnZva2VDYWxsYmFjaygpKVxu
Iik7CiAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICAgICAgcmV0dXJuIHRydWU7
XG5cbiIpOwogICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgdjg6OkhhbmRsZVNj
b3BlIGhhbmRsZVNjb3BlO1xuXG4iKTsKQEAgLTMwNjcsNyArMzA3NywxNiBAQCBFTkQKICAgICAg
ICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIlxuICAgIHY4OjpIYW5kbGU8djg6OlZhbHVl
PiAqYXJndiA9IDA7XG5cbiIpOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgcHVzaChAaW1w
bENvbnRlbnQsICIgICAgYm9vbCBjYWxsYmFja1JldHVyblZhbHVlID0gZmFsc2U7XG4iKTsKLSAg
ICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgIHJldHVybiAhaW52b2tlQ2FsbGJhY2so
bV9jYWxsYmFjaywgIiAuIHNjYWxhcihAcGFyYW1zKSAuICIsIGFyZ3YsIGNhbGxiYWNrUmV0dXJu
VmFsdWUsIHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKSk7XG4iKTsKKyAgICAgICAgICAgIGlmICgk
dGhpc1R5cGUpIHsKKyAgICAgICAgICAgICAgICBmb3JlYWNoIG15ICRwYXJhbSAoQHBhcmFtcykg
eworICAgICAgICAgICAgICAgICAgICBuZXh0IGlmICRwYXJhbS0+dHlwZSBuZSAkdGhpc1R5cGU7
CisgICAgICAgICAgICAgICAgICAgIG15ICRwYXJhbU5hbWUgPSAkcGFyYW0tPm5hbWU7CisgICAg
ICAgICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgIHJldHVybiAhaW52b2tlQ2Fs
bGJhY2sobV9jYWxsYmFjaywgdjg6OkhhbmRsZTx2ODo6T2JqZWN0Pjo6Q2FzdCgke3BhcmFtTmFt
ZX1IYW5kbGUpLCAiIC4gc2NhbGFyKEBwYXJhbXMpIC4gIiwgYXJndiwgY2FsbGJhY2tSZXR1cm5W
YWx1ZSwgc2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpKTtcbiIpOworICAgICAgICAgICAgICAgICAg
ICBsYXN0OworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAg
ICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgcmV0dXJuICFpbnZva2VDYWxsYmFjayht
X2NhbGxiYWNrLCAiIC4gc2NhbGFyKEBwYXJhbXMpIC4gIiwgYXJndiwgY2FsbGJhY2tSZXR1cm5W
YWx1ZSwgc2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpKTtcbiIpOworICAgICAgICAgICAgfQogICAg
ICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICJ9XG4iKTsKICAgICAgICAgfQogICAgIH0KSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvSURMQXR0cmlidXRlcy50eHQKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy9JRExBdHRyaWJ1dGVz
LnR4dAkocmV2aXNpb24gMTE0MzYwKQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0
cy9JRExBdHRyaWJ1dGVzLnR4dAkod29ya2luZyBjb3B5KQpAQCAtOTEsNiArOTEsNyBAQCBPYmpD
UG9seW1vcnBoaWMKIE9iakNQcm90b2NvbAogT21pdENvbnN0cnVjdG9yCiBPcHRpb25hbD18RGVm
YXVsdElzTnVsbFN0cmluZ3xEZWZhdWx0SXNVbmRlZmluZWQKK1Bhc3NUaGlzVG9DYWxsYmFjaz0q
CiBSZWZsZWN0PSoKIFJlcGxhY2VhYmxlCiBSZXBsYWNlYWJsZUNvbnN0cnVjdG9yCkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvVGVzdENhbGxiYWNrLmlkbAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvVGVzdENhbGxi
YWNrLmlkbAkocmV2aXNpb24gMTE0MzYwKQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2Ny
aXB0cy90ZXN0L1Rlc3RDYWxsYmFjay5pZGwJKHdvcmtpbmcgY29weSkKQEAgLTQwLDUgKzQwLDYg
QEAgbW9kdWxlIHRlc3QgewogICAgICAgW0N1c3RvbV0gbG9uZyBjdXN0b21DYWxsYmFjayhpbiBD
bGFzczUgY2xhc3M1UGFyYW0sIGluIENsYXNzNiBjbGFzczZQYXJhbSk7CiAgICAgICBib29sZWFu
IGNhbGxiYWNrV2l0aFN0cmluZ0xpc3QoaW4gRE9NU3RyaW5nTGlzdCBsaXN0UGFyYW0pOwogICAg
ICAgYm9vbGVhbiBjYWxsYmFja1dpdGhCb29sZWFuKGluIGJvb2xlYW4gYm9vbFBhcmFtKTsKKyAg
ICAgIFtQYXNzVGhpc1RvQ2FsbGJhY2s9VGhpc0NsYXNzXSBib29sZWFuIGNhbGxiYWNrUmVxdWly
ZXNUaGlzVG9QYXNzKGluIENsYXNzOCBjbGFzczhQYXJhbSwgaW4gVGhpc0NsYXNzIHRoaXNDbGFz
c1BhcmFtKTsKICAgICB9OwogfQpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0
cy90ZXN0L0NQUC9XZWJET01UZXN0Q2FsbGJhY2suY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9DUFAvV2ViRE9NVGVzdENhbGxiYWNrLmNwcAko
cmV2aXNpb24gMTE0MzYwKQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0
L0NQUC9XZWJET01UZXN0Q2FsbGJhY2suY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNywxNCArMjcs
MTggQEAKICNpbmNsdWRlICJDbGFzczEuaCIKICNpbmNsdWRlICJDbGFzczIuaCIKICNpbmNsdWRl
ICJDbGFzczMuaCIKKyNpbmNsdWRlICJDbGFzczguaCIKICNpbmNsdWRlICJET01TdHJpbmdMaXN0
LmgiCiAjaW5jbHVkZSAiS1VSTC5oIgogI2luY2x1ZGUgIlRlc3RDYWxsYmFjay5oIgorI2luY2x1
ZGUgIlRoaXNDbGFzcy5oIgogI2luY2x1ZGUgIldlYkRPTUNsYXNzMS5oIgogI2luY2x1ZGUgIldl
YkRPTUNsYXNzMi5oIgogI2luY2x1ZGUgIldlYkRPTUNsYXNzMy5oIgorI2luY2x1ZGUgIldlYkRP
TUNsYXNzOC5oIgogI2luY2x1ZGUgIldlYkRPTURPTVN0cmluZ0xpc3QuaCIKICNpbmNsdWRlICJX
ZWJET01TdHJpbmcuaCIKKyNpbmNsdWRlICJXZWJET01UaGlzQ2xhc3MuaCIKICNpbmNsdWRlICJX
ZWJFeGNlcHRpb25IYW5kbGVyLmgiCiAjaW5jbHVkZSAid3RmL3RleHQvQXRvbWljU3RyaW5nLmgi
CiAjaW5jbHVkZSA8d3RmL0dldFB0ci5oPgpAQCAtMTMzLDYgKzEzNywxNCBAQCBib29sIFdlYkRP
TVRlc3RDYWxsYmFjazo6Y2FsbGJhY2tXaXRoQm9vCiAgICAgcmV0dXJuIGltcGwoKS0+Y2FsbGJh
Y2tXaXRoQm9vbGVhbihib29sUGFyYW0pOwogfQogCitib29sIFdlYkRPTVRlc3RDYWxsYmFjazo6
Y2FsbGJhY2tSZXF1aXJlc1RoaXNUb1Bhc3MoY29uc3QgV2ViRE9NQ2xhc3M4JiBjbGFzczhQYXJh
bSwgY29uc3QgV2ViRE9NVGhpc0NsYXNzJiB0aGlzQ2xhc3NQYXJhbSkKK3sKKyAgICBpZiAoIWlt
cGwoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgcmV0dXJuIGltcGwoKS0+Y2FsbGJh
Y2tSZXF1aXJlc1RoaXNUb1Bhc3ModG9XZWJDb3JlKGNsYXNzOFBhcmFtKSwgdG9XZWJDb3JlKHRo
aXNDbGFzc1BhcmFtKSk7Cit9CisKIFdlYkNvcmU6OlRlc3RDYWxsYmFjayogdG9XZWJDb3JlKGNv
bnN0IFdlYkRPTVRlc3RDYWxsYmFjayYgd3JhcHBlcikKIHsKICAgICByZXR1cm4gd3JhcHBlci5p
bXBsKCk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvQ1BQL1dl
YkRPTVRlc3RDYWxsYmFjay5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L3NjcmlwdHMvdGVzdC9DUFAvV2ViRE9NVGVzdENhbGxiYWNrLmgJKHJldmlzaW9uIDExNDM2MCkK
KysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9DUFAvV2ViRE9NVGVzdENh
bGxiYWNrLmgJKHdvcmtpbmcgY29weSkKQEAgLTM1LDcgKzM1LDkgQEAgY2xhc3MgVGVzdENhbGxi
YWNrOwogY2xhc3MgV2ViRE9NQ2xhc3MxOwogY2xhc3MgV2ViRE9NQ2xhc3MyOwogY2xhc3MgV2Vi
RE9NQ2xhc3MzOworY2xhc3MgV2ViRE9NQ2xhc3M4OwogY2xhc3MgV2ViRE9NRE9NU3RyaW5nTGlz
dDsKK2NsYXNzIFdlYkRPTVRoaXNDbGFzczsKIAogY2xhc3MgV2ViRE9NVGVzdENhbGxiYWNrIDog
cHVibGljIFdlYkRPTU9iamVjdCB7CiBwdWJsaWM6CkBAIC01MSw2ICs1Myw3IEBAIHB1YmxpYzoK
ICAgICBpbnQgY2FsbGJhY2tXaXRoTm9uQm9vbFJldHVyblR5cGUoY29uc3QgV2ViRE9NQ2xhc3Mz
JiBjbGFzczNQYXJhbSk7CiAgICAgYm9vbCBjYWxsYmFja1dpdGhTdHJpbmdMaXN0KGNvbnN0IFdl
YkRPTURPTVN0cmluZ0xpc3QmIGxpc3RQYXJhbSk7CiAgICAgYm9vbCBjYWxsYmFja1dpdGhCb29s
ZWFuKGJvb2wgYm9vbFBhcmFtKTsKKyAgICBib29sIGNhbGxiYWNrUmVxdWlyZXNUaGlzVG9QYXNz
KGNvbnN0IFdlYkRPTUNsYXNzOCYgY2xhc3M4UGFyYW0sIGNvbnN0IFdlYkRPTVRoaXNDbGFzcyYg
dGhpc0NsYXNzUGFyYW0pOwogCiAgICAgV2ViQ29yZTo6VGVzdENhbGxiYWNrKiBpbXBsKCkgY29u
c3Q7CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9HT2JqZWN0
L1dlYktpdERPTVRlc3RDYWxsYmFjay5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
YmluZGluZ3Mvc2NyaXB0cy90ZXN0L0dPYmplY3QvV2ViS2l0RE9NVGVzdENhbGxiYWNrLmNwcAko
cmV2aXNpb24gMTE0MzYwKQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0
L0dPYmplY3QvV2ViS2l0RE9NVGVzdENhbGxiYWNrLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzUs
OSArMzUsMTMgQEAKICNpbmNsdWRlICJ3ZWJraXQvV2ViS2l0RE9NQ2xhc3MyUHJpdmF0ZS5oIgog
I2luY2x1ZGUgIndlYmtpdC9XZWJLaXRET01DbGFzczMuaCIKICNpbmNsdWRlICJ3ZWJraXQvV2Vi
S2l0RE9NQ2xhc3MzUHJpdmF0ZS5oIgorI2luY2x1ZGUgIndlYmtpdC9XZWJLaXRET01DbGFzczgu
aCIKKyNpbmNsdWRlICJ3ZWJraXQvV2ViS2l0RE9NQ2xhc3M4UHJpdmF0ZS5oIgogI2luY2x1ZGUg
IndlYmtpdC9XZWJLaXRET01ET01TdHJpbmdMaXN0LmgiCiAjaW5jbHVkZSAid2Via2l0L1dlYktp
dERPTURPTVN0cmluZ0xpc3RQcml2YXRlLmgiCiAjaW5jbHVkZSAid2Via2l0L1dlYktpdERPTVRl
c3RDYWxsYmFja1ByaXZhdGUuaCIKKyNpbmNsdWRlICJ3ZWJraXQvV2ViS2l0RE9NVGhpc0NsYXNz
LmgiCisjaW5jbHVkZSAid2Via2l0L1dlYktpdERPTVRoaXNDbGFzc1ByaXZhdGUuaCIKICNpbmNs
dWRlICJ3ZWJraXRkZWZpbmVzLmgiCiAjaW5jbHVkZSAid2Via2l0Z2xvYmFsc3ByaXZhdGUuaCIK
ICNpbmNsdWRlICJ3ZWJraXRtYXJzaGFsLmgiCkBAIC0yNjMsNiArMjY3LDMzIEBAIHdlYmtpdF9k
b21fdGVzdF9jYWxsYmFja19jYWxsYmFja193aXRoX2IKICAgICByZXR1cm4gcmVzdWx0OwogI2Vs
c2UKICAgICBXRUJLSVRfV0FSTl9GRUFUVVJFX05PVF9QUkVTRU5UKCJTUUwgRGF0YWJhc2UiKQor
ICAgIHJldHVybiBzdGF0aWNfY2FzdDxnYm9vbGVhbj4oMCk7CisjZW5kaWYgLyogRU5BQkxFKFNR
TF9EQVRBQkFTRSkgKi8KK30KKworZ2Jvb2xlYW4KK3dlYmtpdF9kb21fdGVzdF9jYWxsYmFja19j
YWxsYmFja19yZXF1aXJlc190aGlzX3RvX3Bhc3MoV2ViS2l0RE9NVGVzdENhbGxiYWNrKiBzZWxm
LCBXZWJLaXRET01DbGFzczgqIGNsYXNzOFBhcmFtLCBXZWJLaXRET01UaGlzQ2xhc3MqIHRoaXND
bGFzc1BhcmFtKQoreworI2lmIEVOQUJMRShTUUxfREFUQUJBU0UpCisgICAgZ19yZXR1cm5fdmFs
X2lmX2ZhaWwoc2VsZiwgMCk7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0
YXRlOworICAgIFdlYkNvcmU6OlRlc3RDYWxsYmFjayogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxm
KTsKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChjbGFzczhQYXJhbSwgMCk7CisgICAgZ19yZXR1
cm5fdmFsX2lmX2ZhaWwodGhpc0NsYXNzUGFyYW0sIDApOworICAgIFdlYkNvcmU6OkNsYXNzOCog
Y29udmVydGVkQ2xhc3M4UGFyYW0gPSAwOworICAgIGlmIChjbGFzczhQYXJhbSkgeworICAgICAg
ICBjb252ZXJ0ZWRDbGFzczhQYXJhbSA9IFdlYktpdDo6Y29yZShjbGFzczhQYXJhbSk7CisgICAg
ICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKGNvbnZlcnRlZENsYXNzOFBhcmFtLCAwKTsKKyAgICB9
CisgICAgV2ViQ29yZTo6VGhpc0NsYXNzKiBjb252ZXJ0ZWRUaGlzQ2xhc3NQYXJhbSA9IDA7Cisg
ICAgaWYgKHRoaXNDbGFzc1BhcmFtKSB7CisgICAgICAgIGNvbnZlcnRlZFRoaXNDbGFzc1BhcmFt
ID0gV2ViS2l0Ojpjb3JlKHRoaXNDbGFzc1BhcmFtKTsKKyAgICAgICAgZ19yZXR1cm5fdmFsX2lm
X2ZhaWwoY29udmVydGVkVGhpc0NsYXNzUGFyYW0sIDApOworICAgIH0KKyAgICBnYm9vbGVhbiBy
ZXN1bHQgPSBpdGVtLT5jYWxsYmFja1JlcXVpcmVzVGhpc1RvUGFzcyhjb252ZXJ0ZWRDbGFzczhQ
YXJhbSwgY29udmVydGVkVGhpc0NsYXNzUGFyYW0pOworICAgIHJldHVybiByZXN1bHQ7CisjZWxz
ZQorICAgIFdFQktJVF9XQVJOX0ZFQVRVUkVfTk9UX1BSRVNFTlQoIlNRTCBEYXRhYmFzZSIpCiAg
ICAgcmV0dXJuIHN0YXRpY19jYXN0PGdib29sZWFuPigwKTsKICNlbmRpZiAvKiBFTkFCTEUoU1FM
X0RBVEFCQVNFKSAqLwogfQpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90
ZXN0L0dPYmplY3QvV2ViS2l0RE9NVGVzdENhbGxiYWNrLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0dPYmplY3QvV2ViS2l0RE9NVGVzdENhbGxi
YWNrLmgJKHJldmlzaW9uIDExNDM2MCkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Njcmlw
dHMvdGVzdC9HT2JqZWN0L1dlYktpdERPTVRlc3RDYWxsYmFjay5oCSh3b3JraW5nIGNvcHkpCkBA
IC0xMTEsNiArMTExLDE4IEBAIHdlYmtpdF9kb21fdGVzdF9jYWxsYmFja19jYWxsYmFja193aXRo
X3MKIFdFQktJVF9BUEkgZ2Jvb2xlYW4KIHdlYmtpdF9kb21fdGVzdF9jYWxsYmFja19jYWxsYmFj
a193aXRoX2Jvb2xlYW4oV2ViS2l0RE9NVGVzdENhbGxiYWNrKiBzZWxmLCBnYm9vbGVhbiBib29s
UGFyYW0pOwogCisvKioKKyAqIHdlYmtpdF9kb21fdGVzdF9jYWxsYmFja19jYWxsYmFja19yZXF1
aXJlc190aGlzX3RvX3Bhc3M6CisgKiBAc2VsZjogQSAjV2ViS2l0RE9NVGVzdENhbGxiYWNrCisg
KiBAY2xhc3M4UGFyYW06IEEgI1dlYktpdERPTUNsYXNzOAorICogQHRoaXNDbGFzc1BhcmFtOiBB
ICNXZWJLaXRET01UaGlzQ2xhc3MKKyAqCisgKiBSZXR1cm5zOgorICoKKyoqLworV0VCS0lUX0FQ
SSBnYm9vbGVhbgord2Via2l0X2RvbV90ZXN0X2NhbGxiYWNrX2NhbGxiYWNrX3JlcXVpcmVzX3Ro
aXNfdG9fcGFzcyhXZWJLaXRET01UZXN0Q2FsbGJhY2sqIHNlbGYsIFdlYktpdERPTUNsYXNzOCog
Y2xhc3M4UGFyYW0sIFdlYktpdERPTVRoaXNDbGFzcyogdGhpc0NsYXNzUGFyYW0pOworCiBHX0VO
RF9ERUNMUwogCiAjZW5kaWYgLyogV2ViS2l0RE9NVGVzdENhbGxiYWNrX2ggKi8KSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RDYWxsYmFjay5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pT
VGVzdENhbGxiYWNrLmNwcAkocmV2aXNpb24gMTE0MzYwKQorKysgU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdENhbGxiYWNrLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMjYsNyArMjYsOSBAQAogCiAjaW5jbHVkZSAiSlNDbGFzczEuaCIKICNpbmNsdWRlICJKU0Ns
YXNzMi5oIgorI2luY2x1ZGUgIkpTQ2xhc3M4LmgiCiAjaW5jbHVkZSAiSlNET01TdHJpbmdMaXN0
LmgiCisjaW5jbHVkZSAiSlNUaGlzQ2xhc3MuaCIKICNpbmNsdWRlICJTY3JpcHRFeGVjdXRpb25D
b250ZXh0LmgiCiAjaW5jbHVkZSA8cnVudGltZS9KU0xvY2suaD4KIApAQCAtMTQ2LDYgKzE0OCwy
OSBAQCBib29sIEpTVGVzdENhbGxiYWNrOjpjYWxsYmFja1dpdGhCb29sZWFuCiAgICAgcmV0dXJu
ICFyYWlzZWRFeGNlcHRpb247CiB9CiAKK2Jvb2wgSlNUZXN0Q2FsbGJhY2s6OmNhbGxiYWNrUmVx
dWlyZXNUaGlzVG9QYXNzKENsYXNzOCogY2xhc3M4UGFyYW0sIFRoaXNDbGFzcyogdGhpc0NsYXNz
UGFyYW0pCit7CisgICAgQVNTRVJUKHRoaXNDbGFzc1BhcmFtKTsKKworICAgIGlmICghY2FuSW52
b2tlQ2FsbGJhY2soKSkKKyAgICAgICAgcmV0dXJuIHRydWU7CisKKyAgICBSZWZQdHI8SlNUZXN0
Q2FsbGJhY2s+IHByb3RlY3QodGhpcyk7CisKKyAgICBKU0xvY2sgbG9jayhTaWxlbmNlQXNzZXJ0
aW9uc09ubHkpOworCisgICAgRXhlY1N0YXRlKiBleGVjID0gbV9kYXRhLT5nbG9iYWxPYmplY3Qo
KS0+Z2xvYmFsRXhlYygpOworICAgIE1hcmtlZEFyZ3VtZW50QnVmZmVyIGFyZ3M7CisgICAgYXJn
cy5hcHBlbmQodG9KUyhleGVjLCBtX2RhdGEtPmdsb2JhbE9iamVjdCgpLCBjbGFzczhQYXJhbSkp
OworICAgIGFyZ3MuYXBwZW5kKHRvSlMoZXhlYywgbV9kYXRhLT5nbG9iYWxPYmplY3QoKSwgdGhp
c0NsYXNzUGFyYW0pKTsKKworICAgIGJvb2wgcmFpc2VkRXhjZXB0aW9uID0gZmFsc2U7CisgICAg
SlNWYWx1ZSBqc3RoaXNDbGFzc1BhcmFtID0gdG9KUyhleGVjLCBtX2RhdGEtPmdsb2JhbE9iamVj
dCgpLCB0aGlzQ2xhc3NQYXJhbSk7CisgICAgbV9kYXRhLT5pbnZva2VDYWxsYmFjayhqc3RoaXND
bGFzc1BhcmFtLCBhcmdzLCAmcmFpc2VkRXhjZXB0aW9uKTsKKworICAgIHJldHVybiAhcmFpc2Vk
RXhjZXB0aW9uOworfQorCiB9CiAKICNlbmRpZiAvLyBFTkFCTEUoU1FMX0RBVEFCQVNFKQpJbmRl
eDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdENhbGxiYWNr
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pT
L0pTVGVzdENhbGxiYWNrLmgJKHJldmlzaW9uIDExNDM2MCkKKysrIFNvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RDYWxsYmFjay5oCSh3b3JraW5nIGNvcHkpCkBA
IC00Nyw2ICs0Nyw3IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIGludCBjdXN0b21DYWxsYmFjayhD
bGFzczUqIGNsYXNzNVBhcmFtLCBDbGFzczYqIGNsYXNzNlBhcmFtKTsKICAgICB2aXJ0dWFsIGJv
b2wgY2FsbGJhY2tXaXRoU3RyaW5nTGlzdChET01TdHJpbmdMaXN0KiBsaXN0UGFyYW0pOwogICAg
IHZpcnR1YWwgYm9vbCBjYWxsYmFja1dpdGhCb29sZWFuKGJvb2wgYm9vbFBhcmFtKTsKKyAgICB2
aXJ0dWFsIGJvb2wgY2FsbGJhY2tSZXF1aXJlc1RoaXNUb1Bhc3MoQ2xhc3M4KiBjbGFzczhQYXJh
bSwgVGhpc0NsYXNzKiB0aGlzQ2xhc3NQYXJhbSk7CiAKIHByaXZhdGU6CiAgICAgSlNUZXN0Q2Fs
bGJhY2soSlNDOjpKU09iamVjdCogY2FsbGJhY2ssIEpTRE9NR2xvYmFsT2JqZWN0Kik7CkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvT2JqQy9ET01UZXN0Q2FsbGJh
Y2suaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3Qv
T2JqQy9ET01UZXN0Q2FsbGJhY2suaAkocmV2aXNpb24gMTE0MzYwKQorKysgU291cmNlL1dlYkNv
cmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L09iakMvRE9NVGVzdENhbGxiYWNrLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTMzLDcgKzMzLDkgQEAKIEBjbGFzcyBET01DbGFzczM7CiBAY2xhc3MgRE9NQ2xh
c3M1OwogQGNsYXNzIERPTUNsYXNzNjsKK0BjbGFzcyBET01DbGFzczg7CiBAY2xhc3MgRE9NRE9N
U3RyaW5nTGlzdDsKK0BjbGFzcyBET01UaGlzQ2xhc3M7CiBAY2xhc3MgTlNTdHJpbmc7CiAKIEBp
bnRlcmZhY2UgRE9NVGVzdENhbGxiYWNrIDogRE9NT2JqZWN0CkBAIC00NCw2ICs0Niw3IEBACiAt
IChpbnQpY3VzdG9tQ2FsbGJhY2s6KERPTUNsYXNzNSAqKWNsYXNzNVBhcmFtIGNsYXNzNlBhcmFt
OihET01DbGFzczYgKiljbGFzczZQYXJhbTsKIC0gKEJPT0wpY2FsbGJhY2tXaXRoU3RyaW5nTGlz
dDooRE9NRE9NU3RyaW5nTGlzdCAqKWxpc3RQYXJhbTsKIC0gKEJPT0wpY2FsbGJhY2tXaXRoQm9v
bGVhbjooQk9PTClib29sUGFyYW07CistIChCT09MKWNhbGxiYWNrUmVxdWlyZXNUaGlzVG9QYXNz
OihET01DbGFzczggKiljbGFzczhQYXJhbSB0aGlzQ2xhc3NQYXJhbTooRE9NVGhpc0NsYXNzICop
dGhpc0NsYXNzUGFyYW07CiBAZW5kCiAKICNlbmRpZgpJbmRleDogU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3Mvc2NyaXB0cy90ZXN0L09iakMvRE9NVGVzdENhbGxiYWNrLm1tCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9PYmpDL0RPTVRlc3RDYWxsYmFj
ay5tbQkocmV2aXNpb24gMTE0MzYwKQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0
cy90ZXN0L09iakMvRE9NVGVzdENhbGxiYWNrLm1tCSh3b3JraW5nIGNvcHkpCkBAIC0zNyw2ICsz
Nyw3IEBACiAjaW1wb3J0ICJDbGFzczMuaCIKICNpbXBvcnQgIkNsYXNzNS5oIgogI2ltcG9ydCAi
Q2xhc3M2LmgiCisjaW1wb3J0ICJDbGFzczguaCIKICNpbXBvcnQgIkRPTUJsb2JJbnRlcm5hbC5o
IgogI2ltcG9ydCAiRE9NQ1NTUnVsZUludGVybmFsLmgiCiAjaW1wb3J0ICJET01DU1NWYWx1ZUlu
dGVybmFsLmgiCkBAIC00NSwxNiArNDYsMTkgQEAKICNpbXBvcnQgIkRPTUNsYXNzM0ludGVybmFs
LmgiCiAjaW1wb3J0ICJET01DbGFzczVJbnRlcm5hbC5oIgogI2ltcG9ydCAiRE9NQ2xhc3M2SW50
ZXJuYWwuaCIKKyNpbXBvcnQgIkRPTUNsYXNzOEludGVybmFsLmgiCiAjaW1wb3J0ICJET01ET01T
dHJpbmdMaXN0SW50ZXJuYWwuaCIKICNpbXBvcnQgIkRPTUV2ZW50SW50ZXJuYWwuaCIKICNpbXBv
cnQgIkRPTU5vZGVJbnRlcm5hbC5oIgogI2ltcG9ydCAiRE9NU3RyaW5nTGlzdC5oIgogI2ltcG9y
dCAiRE9NU3R5bGVTaGVldEludGVybmFsLmgiCiAjaW1wb3J0ICJET01UZXN0Q2FsbGJhY2tJbnRl
cm5hbC5oIgorI2ltcG9ydCAiRE9NVGhpc0NsYXNzSW50ZXJuYWwuaCIKICNpbXBvcnQgIkV4Y2Vw
dGlvbkhhbmRsZXJzLmgiCiAjaW1wb3J0ICJKU01haW5UaHJlYWRFeGVjU3RhdGUuaCIKICNpbXBv
cnQgIktVUkwuaCIKICNpbXBvcnQgIlRlc3RDYWxsYmFjay5oIgorI2ltcG9ydCAiVGhpc0NsYXNz
LmgiCiAjaW1wb3J0ICJUaHJlYWRDaGVjay5oIgogI2ltcG9ydCAiV2ViQ29yZU9iakNFeHRyYXMu
aCIKICNpbXBvcnQgIldlYlNjcmlwdE9iamVjdFByaXZhdGUuaCIKQEAgLTEyMyw2ICsxMjcsMTIg
QEAgLSAoQk9PTCljYWxsYmFja1dpdGhCb29sZWFuOihCT09MKWJvb2xQYQogICAgIHJldHVybiBJ
TVBMLT5jYWxsYmFja1dpdGhCb29sZWFuKGJvb2xQYXJhbSk7CiB9CiAKKy0gKEJPT0wpY2FsbGJh
Y2tSZXF1aXJlc1RoaXNUb1Bhc3M6KERPTUNsYXNzOCAqKWNsYXNzOFBhcmFtIHRoaXNDbGFzc1Bh
cmFtOihET01UaGlzQ2xhc3MgKil0aGlzQ2xhc3NQYXJhbQoreworICAgIFdlYkNvcmU6OkpTTWFp
blRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICByZXR1cm4gSU1QTC0+Y2FsbGJhY2tSZXF1aXJl
c1RoaXNUb1Bhc3MoY29yZShjbGFzczhQYXJhbSksIGNvcmUodGhpc0NsYXNzUGFyYW0pKTsKK30K
KwogQGVuZAogCiBXZWJDb3JlOjpUZXN0Q2FsbGJhY2sqIGNvcmUoRE9NVGVzdENhbGxiYWNrICp3
cmFwcGVyKQpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Y4L1Y4
VGVzdENhbGxiYWNrLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9z
Y3JpcHRzL3Rlc3QvVjgvVjhUZXN0Q2FsbGJhY2suY3BwCShyZXZpc2lvbiAxMTQzNjApCisrKyBT
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvVjgvVjhUZXN0Q2FsbGJhY2suY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0yNyw5ICsyNywxMSBAQAogI2luY2x1ZGUgIlY4QmluZGluZy5o
IgogI2luY2x1ZGUgIlY4Q2xhc3MxLmgiCiAjaW5jbHVkZSAiVjhDbGFzczIuaCIKKyNpbmNsdWRl
ICJWOENsYXNzOC5oIgogI2luY2x1ZGUgIlY4Q3VzdG9tVm9pZENhbGxiYWNrLmgiCiAjaW5jbHVk
ZSAiVjhET01TdHJpbmdMaXN0LmgiCiAjaW5jbHVkZSAiVjhQcm94eS5oIgorI2luY2x1ZGUgIlY4
VGhpc0NsYXNzLmgiCiAjaW5jbHVkZSA8d3RmL0dldFB0ci5oPgogI2luY2x1ZGUgPHd0Zi9SZWZD
b3VudGVkLmg+CiAjaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgpAQCAtMTkxLDYgKzE5Myw0MyBAQCBi
b29sIFY4VGVzdENhbGxiYWNrOjpjYWxsYmFja1dpdGhCb29sZWFuCiAgICAgcmV0dXJuICFpbnZv
a2VDYWxsYmFjayhtX2NhbGxiYWNrLCAxLCBhcmd2LCBjYWxsYmFja1JldHVyblZhbHVlLCBzY3Jp
cHRFeGVjdXRpb25Db250ZXh0KCkpOwogfQogCitib29sIFY4VGVzdENhbGxiYWNrOjpjYWxsYmFj
a1JlcXVpcmVzVGhpc1RvUGFzcyhDbGFzczgqIGNsYXNzOFBhcmFtLCBUaGlzQ2xhc3MqIHRoaXND
bGFzc1BhcmFtKQoreworICAgIEFTU0VSVCh0aGlzQ2xhc3NQYXJhbSk7CisKKyAgICBpZiAoIWNh
bkludm9rZUNhbGxiYWNrKCkpCisgICAgICAgIHJldHVybiB0cnVlOworCisgICAgdjg6OkhhbmRs
ZVNjb3BlIGhhbmRsZVNjb3BlOworCisgICAgdjg6OkhhbmRsZTx2ODo6Q29udGV4dD4gdjhDb250
ZXh0ID0gdG9WOENvbnRleHQoc2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpLCBtX3dvcmxkQ29udGV4
dCk7CisgICAgaWYgKHY4Q29udGV4dC5Jc0VtcHR5KCkpCisgICAgICAgIHJldHVybiB0cnVlOwor
CisgICAgdjg6OkNvbnRleHQ6OlNjb3BlIHNjb3BlKHY4Q29udGV4dCk7CisKKyAgICB2ODo6SGFu
ZGxlPHY4OjpWYWx1ZT4gY2xhc3M4UGFyYW1IYW5kbGUgPSB0b1Y4KGNsYXNzOFBhcmFtKTsKKyAg
ICBpZiAoY2xhc3M4UGFyYW1IYW5kbGUuSXNFbXB0eSgpKSB7CisgICAgICAgIGlmICghaXNTY3Jp
cHRDb250cm9sbGVyVGVybWluYXRpbmcoKSkKKyAgICAgICAgICAgIENSQVNIKCk7CisgICAgICAg
IHJldHVybiB0cnVlOworICAgIH0KKyAgICB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gdGhpc0NsYXNz
UGFyYW1IYW5kbGUgPSB0b1Y4KHRoaXNDbGFzc1BhcmFtKTsKKyAgICBpZiAodGhpc0NsYXNzUGFy
YW1IYW5kbGUuSXNFbXB0eSgpKSB7CisgICAgICAgIGlmICghaXNTY3JpcHRDb250cm9sbGVyVGVy
bWluYXRpbmcoKSkKKyAgICAgICAgICAgIENSQVNIKCk7CisgICAgICAgIHJldHVybiB0cnVlOwor
ICAgIH0KKworICAgIHY4OjpIYW5kbGU8djg6OlZhbHVlPiBhcmd2W10gPSB7CisgICAgICAgIGNs
YXNzOFBhcmFtSGFuZGxlLAorICAgICAgICB0aGlzQ2xhc3NQYXJhbUhhbmRsZQorICAgIH07CisK
KyAgICBib29sIGNhbGxiYWNrUmV0dXJuVmFsdWUgPSBmYWxzZTsKKyAgICByZXR1cm4gIWludm9r
ZUNhbGxiYWNrKG1fY2FsbGJhY2ssIHY4OjpIYW5kbGU8djg6Ok9iamVjdD46OkNhc3QodGhpc0Ns
YXNzUGFyYW1IYW5kbGUpLCAyLCBhcmd2LCBjYWxsYmFja1JldHVyblZhbHVlLCBzY3JpcHRFeGVj
dXRpb25Db250ZXh0KCkpOworfQorCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKICNlbmRpZiAv
LyBFTkFCTEUoU1FMX0RBVEFCQVNFKQpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2Ny
aXB0cy90ZXN0L1Y4L1Y4VGVzdENhbGxiYWNrLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Y4L1Y4VGVzdENhbGxiYWNrLmgJKHJldmlzaW9uIDEx
NDM2MCkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9WOC9WOFRlc3RD
YWxsYmFjay5oCSh3b3JraW5nIGNvcHkpCkBAIC01Miw2ICs1Miw3IEBAIHB1YmxpYzoKICAgICB2
aXJ0dWFsIGludCBjdXN0b21DYWxsYmFjayhDbGFzczUqIGNsYXNzNVBhcmFtLCBDbGFzczYqIGNs
YXNzNlBhcmFtKTsKICAgICB2aXJ0dWFsIGJvb2wgY2FsbGJhY2tXaXRoU3RyaW5nTGlzdChSZWZQ
dHI8RE9NU3RyaW5nTGlzdD4gbGlzdFBhcmFtKTsKICAgICB2aXJ0dWFsIGJvb2wgY2FsbGJhY2tX
aXRoQm9vbGVhbihib29sIGJvb2xQYXJhbSk7CisgICAgdmlydHVhbCBib29sIGNhbGxiYWNrUmVx
dWlyZXNUaGlzVG9QYXNzKENsYXNzOCogY2xhc3M4UGFyYW0sIFRoaXNDbGFzcyogdGhpc0NsYXNz
UGFyYW0pOwogCiBwcml2YXRlOgogICAgIFY4VGVzdENhbGxiYWNrKHY4OjpMb2NhbDx2ODo6T2Jq
ZWN0PiwgU2NyaXB0RXhlY3V0aW9uQ29udGV4dCopOwo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>138066</attachid>
            <date>2012-04-20 04:25:58 -0700</date>
            <delta_ts>2012-04-20 04:25:58 -0700</delta_ts>
            <desc>raw_patch_not_to_ews</desc>
            <filename>raw.patch</filename>
            <type>text/plain</type>
            <size>6426</size>
            <attacher name="Vineet Chaudhary (vineetc)">code.vineet</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvQ29kZUdlbmVyYXRvckpTLnBt
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvQ29kZUdlbmVy
YXRvckpTLnBtCShyZXZpc2lvbiAxMTQ3MTgpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9z
Y3JpcHRzL0NvZGVHZW5lcmF0b3JKUy5wbQkod29ya2luZyBjb3B5KQpAQCAtMjYwOSw2ICsyNjA5
LDEwIEBAIHN1YiBHZW5lcmF0ZUNhbGxiYWNrSGVhZGVyCiAgICAgICAgICAgICBmb3JlYWNoIG15
ICRwYXJhbSAoQHBhcmFtcykgewogICAgICAgICAgICAgICAgIHB1c2goQGFyZ3MsIEdldE5hdGl2
ZVR5cGUoJHBhcmFtLT50eXBlKSAuICIgIiAuICRwYXJhbS0+bmFtZSk7CiAgICAgICAgICAgICB9
CisgICAgICAgICAgICBteSAkdGhpc1R5cGUgPSAkZnVuY3Rpb24tPnNpZ25hdHVyZS0+ZXh0ZW5k
ZWRBdHRyaWJ1dGVzLT57IlBhc3NUaGlzVG9DYWxsYmFjayJ9OworICAgICAgICAgICAgaWYgKCR0
aGlzVHlwZSkgeworICAgICAgICAgICAgICAgIHB1c2goQGFyZ3MsIEdldE5hdGl2ZVR5cGUoJHRo
aXNUeXBlKSAuICIgIiAuICJ0aGlzUGFyYW0iKTsKKyAgICAgICAgICAgIH0KICAgICAgICAgICAg
IHB1c2goQGhlYWRlckNvbnRlbnQsIGpvaW4oIiwgIiwgQGFyZ3MpKTsKIAogICAgICAgICAgICAg
cHVzaChAaGVhZGVyQ29udGVudCwgIik7XG4iKTsKQEAgLTI2ODUsMTggKzI2ODksMjIgQEAgc3Vi
IEdlbmVyYXRlQ2FsbGJhY2tJbXBsZW1lbnRhdGlvbgogICAgICAgICAgICAgcHVzaChAaW1wbENv
bnRlbnQsICJcbiIgLiBHZXROYXRpdmVUeXBlKCRmdW5jdGlvbi0+c2lnbmF0dXJlLT50eXBlKSAu
ICIgJHtjbGFzc05hbWV9OjoiIC4gJGZ1bmN0aW9uLT5zaWduYXR1cmUtPm5hbWUgLiAiKCIpOwog
CiAgICAgICAgICAgICBteSBAYXJncyA9ICgpOwotICAgICAgICAgICAgbXkgQGFyZ3NDaGVjayA9
ICgpOwotICAgICAgICAgICAgbXkgJHRoaXNUeXBlID0gJGZ1bmN0aW9uLT5zaWduYXR1cmUtPmV4
dGVuZGVkQXR0cmlidXRlcy0+eyJQYXNzVGhpc1RvQ2FsbGJhY2sifTsKICAgICAgICAgICAgIGZv
cmVhY2ggbXkgJHBhcmFtIChAcGFyYW1zKSB7CiAgICAgICAgICAgICAgICAgbXkgJHBhcmFtTmFt
ZSA9ICRwYXJhbS0+bmFtZTsKICAgICAgICAgICAgICAgICBBZGRJbmNsdWRlc0ZvclR5cGVJbklt
cGwoJHBhcmFtLT50eXBlLCAxKTsKICAgICAgICAgICAgICAgICBwdXNoKEBhcmdzLCBHZXROYXRp
dmVUeXBlKCRwYXJhbS0+dHlwZSkgLiAiICIgLiAkcGFyYW1OYW1lKTsKLSAgICAgICAgICAgICAg
ICBpZiAoJHRoaXNUeXBlIGFuZCAkdGhpc1R5cGUgZXEgJHBhcmFtLT50eXBlKSB7Ci0gICAgICAg
ICAgICAgICAgICAgIHB1c2goQGFyZ3NDaGVjaywgPDxFTkQpOworICAgICAgICAgICAgfQorCisg
ICAgICAgICAgICBteSBAYXJnc0NoZWNrID0gKCk7CisgICAgICAgICAgICBteSAkdGhpc1R5cGUg
PSAkZnVuY3Rpb24tPnNpZ25hdHVyZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57IlBhc3NUaGlzVG9D
YWxsYmFjayJ9OworICAgICAgICAgICAgaWYgKCR0aGlzVHlwZSkgeworICAgICAgICAgICAgICAg
IG15ICRwYXJhbU5hbWUgPSAidGhpc1BhcmFtIjsKKyAgICAgICAgICAgICAgICBBZGRJbmNsdWRl
c0ZvclR5cGVJbkltcGwoJHRoaXNUeXBlLCAxKTsKKyAgICAgICAgICAgICAgICBwdXNoKEBhcmdz
LCBHZXROYXRpdmVUeXBlKCR0aGlzVHlwZSkgLiAiICIgLiAkcGFyYW1OYW1lKTsKKyAgICAgICAg
ICAgICAgICBwdXNoKEBhcmdzQ2hlY2ssIDw8RU5EKTsKICAgICBBU1NFUlQoJHtwYXJhbU5hbWV9
KTsKIAogRU5ECi0gICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQogICAgICAgICAgICAg
cHVzaChAaW1wbENvbnRlbnQsIGpvaW4oIiwgIiwgQGFyZ3MpKTsKICAgICAgICAgICAgIHB1c2go
QGltcGxDb250ZW50LCAiKVxuIik7CkBAIC0yNzIzLDE2ICsyNzMxLDEyIEBAIEVORAogCiAgICAg
ICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIlxuICAgIGJvb2wgcmFpc2VkRXhjZXB0aW9uID0g
ZmFsc2U7XG4iKTsKICAgICAgICAgICAgIGlmICgkdGhpc1R5cGUpIHsKLSAgICAgICAgICAgICAg
ICBmb3JlYWNoIG15ICRwYXJhbSAoQHBhcmFtcykgewotICAgICAgICAgICAgICAgICAgICBuZXh0
IGlmICRwYXJhbS0+dHlwZSBuZSAkdGhpc1R5cGU7Ci0gICAgICAgICAgICAgICAgICAgIG15ICRw
YXJhbU5hbWUgPSAkcGFyYW0tPm5hbWU7Ci0gICAgICAgICAgICAgICAgICAgIHB1c2goQGltcGxD
b250ZW50LCA8PEVORCk7CisgICAgICAgICAgICAgICAgbXkgJHBhcmFtTmFtZSA9ICJ0aGlzUGFy
YW0iOworICAgICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCA8PEVORCk7CiAgICAgSlNW
YWx1ZSBqcyR7cGFyYW1OYW1lfSA9IHRvSlMoZXhlYywgbV9kYXRhLT5nbG9iYWxPYmplY3QoKSwg
JHtwYXJhbU5hbWV9KTsKICAgICBtX2RhdGEtPmludm9rZUNhbGxiYWNrKGpzJHtwYXJhbU5hbWV9
LCBhcmdzLCAmcmFpc2VkRXhjZXB0aW9uKTsKIAogRU5ECi0gICAgICAgICAgICAgICAgICAgIGxh
c3Q7Ci0gICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAg
ICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICBtX2RhdGEtPmludm9rZUNhbGxiYWNrKGFyZ3Ms
ICZyYWlzZWRFeGNlcHRpb24pO1xuIik7CiAgICAgICAgICAgICB9CkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0b3JWOC5wbQo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0b3JWOC5wbQkocmV2aXNp
b24gMTE0NzE4KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy9Db2RlR2VuZXJh
dG9yVjgucG0JKHdvcmtpbmcgY29weSkKQEAgLTI5NjEsNiArMjk2MSwxMCBAQCBFTkQKICAgICAg
ICAgICAgIGZvcmVhY2ggbXkgJHBhcmFtIChAcGFyYW1zKSB7CiAgICAgICAgICAgICAgICAgcHVz
aChAYXJncywgR2V0TmF0aXZlVHlwZUZvckNhbGxiYWNrcygkcGFyYW0tPnR5cGUpIC4gIiAiIC4g
JHBhcmFtLT5uYW1lKTsKICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIG15ICR0aGlzVHlwZSA9
ICRmdW5jdGlvbi0+c2lnbmF0dXJlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPnsiUGFzc1RoaXNUb0Nh
bGxiYWNrIn07CisgICAgICAgICAgICBpZiAoJHRoaXNUeXBlKSB7CisgICAgICAgICAgICAgICAg
cHVzaChAYXJncywgR2V0TmF0aXZlVHlwZUZvckNhbGxiYWNrcygkdGhpc1R5cGUpIC4gIiAiIC4g
InRoaXNQYXJhbSIpOworICAgICAgICAgICAgfQogICAgICAgICAgICAgcHVzaChAaGVhZGVyQ29u
dGVudCwgam9pbigiLCAiLCBAYXJncykpOwogICAgICAgICAgICAgcHVzaChAaGVhZGVyQ29udGVu
dCwgIik7XG4iKTsKICAgICAgICAgfQpAQCAtMzAzMSwxOCArMzAzNSwyMSBAQCBFTkQKICAgICAg
ICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiXG4iIC4gR2V0TmF0aXZlVHlwZUZvckNhbGxiYWNr
cygkZnVuY3Rpb24tPnNpZ25hdHVyZS0+dHlwZSkgLiAiICR7Y2xhc3NOYW1lfTo6IiAuICRmdW5j
dGlvbi0+c2lnbmF0dXJlLT5uYW1lIC4gIigiKTsKIAogICAgICAgICAgICAgbXkgQGFyZ3MgPSAo
KTsKLSAgICAgICAgICAgIG15IEBhcmdzQ2hlY2sgPSAoKTsKLSAgICAgICAgICAgIG15ICR0aGlz
VHlwZSA9ICRmdW5jdGlvbi0+c2lnbmF0dXJlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPnsiUGFzc1Ro
aXNUb0NhbGxiYWNrIn07CiAgICAgICAgICAgICBmb3JlYWNoIG15ICRwYXJhbSAoQHBhcmFtcykg
ewogICAgICAgICAgICAgICAgIG15ICRwYXJhbU5hbWUgPSAkcGFyYW0tPm5hbWU7CiAgICAgICAg
ICAgICAgICAgQWRkSW5jbHVkZXNGb3JUeXBlKCRwYXJhbS0+dHlwZSk7CiAgICAgICAgICAgICAg
ICAgcHVzaChAYXJncywgR2V0TmF0aXZlVHlwZUZvckNhbGxiYWNrcygkcGFyYW0tPnR5cGUpIC4g
IiAiIC4gJHBhcmFtTmFtZSk7Ci0gICAgICAgICAgICAgICAgaWYgKCR0aGlzVHlwZSBhbmQgJHRo
aXNUeXBlIGVxICRwYXJhbS0+dHlwZSkgewotICAgICAgICAgICAgICAgICAgICBwdXNoKEBhcmdz
Q2hlY2ssIDw8RU5EKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIG15IEBhcmdzQ2hlY2sg
PSAoKTsKKyAgICAgICAgICAgIG15ICR0aGlzVHlwZSA9ICRmdW5jdGlvbi0+c2lnbmF0dXJlLT5l
eHRlbmRlZEF0dHJpYnV0ZXMtPnsiUGFzc1RoaXNUb0NhbGxiYWNrIn07CisgICAgICAgICAgICBp
ZiAoJHRoaXNUeXBlKSB7CisgICAgICAgICAgICAgICAgbXkgJHBhcmFtTmFtZSA9ICJ0aGlzUGFy
YW0iOworICAgICAgICAgICAgICAgIEFkZEluY2x1ZGVzRm9yVHlwZSgkdGhpc1R5cGUpOworICAg
ICAgICAgICAgICAgIHB1c2goQGFyZ3MsIEdldE5hdGl2ZVR5cGVGb3JDYWxsYmFja3MoJHRoaXNU
eXBlKSAuICIgIiAuICRwYXJhbU5hbWUpOworICAgICAgICAgICAgICAgIHB1c2goQGFyZ3NDaGVj
aywgPDxFTkQpOwogICAgIEFTU0VSVCgke3BhcmFtTmFtZX0pOwogCiBFTkQKLSAgICAgICAgICAg
ICAgICB9CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgam9p
bigiLCAiLCBAYXJncykpOwogCkBAIC0zMDc4LDEyICszMDg1LDggQEAgRU5ECiAgICAgICAgICAg
ICB9CiAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICBib29sIGNhbGxiYWNrUmV0
dXJuVmFsdWUgPSBmYWxzZTtcbiIpOwogICAgICAgICAgICAgaWYgKCR0aGlzVHlwZSkgewotICAg
ICAgICAgICAgICAgIGZvcmVhY2ggbXkgJHBhcmFtIChAcGFyYW1zKSB7Ci0gICAgICAgICAgICAg
ICAgICAgIG5leHQgaWYgJHBhcmFtLT50eXBlIG5lICR0aGlzVHlwZTsKLSAgICAgICAgICAgICAg
ICAgICAgbXkgJHBhcmFtTmFtZSA9ICRwYXJhbS0+bmFtZTsKLSAgICAgICAgICAgICAgICAgICAg
cHVzaChAaW1wbENvbnRlbnQsICIgICAgcmV0dXJuICFpbnZva2VDYWxsYmFjayhtX2NhbGxiYWNr
LCB2ODo6SGFuZGxlPHY4OjpPYmplY3Q+OjpDYXN0KCR7cGFyYW1OYW1lfUhhbmRsZSksICIgLiBz
Y2FsYXIoQHBhcmFtcykgLiAiLCBhcmd2LCBjYWxsYmFja1JldHVyblZhbHVlLCBzY3JpcHRFeGVj
dXRpb25Db250ZXh0KCkpO1xuIik7Ci0gICAgICAgICAgICAgICAgICAgIGxhc3Q7Ci0gICAgICAg
ICAgICAgICAgfQorICAgICAgICAgICAgICAgIG15ICRwYXJhbU5hbWUgPSAidGhpc1BhcmFtIjsK
KyAgICAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICByZXR1cm4gIWludm9rZUNh
bGxiYWNrKG1fY2FsbGJhY2ssIHY4OjpIYW5kbGU8djg6Ok9iamVjdD46OkNhc3QoJHtwYXJhbU5h
bWV9KSwgIiAuIHNjYWxhcihAcGFyYW1zKSAuICIsIGFyZ3YsIGNhbGxiYWNrUmV0dXJuVmFsdWUs
IHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKSk7XG4iKTsKICAgICAgICAgICAgIH0gZWxzZSB7CiAg
ICAgICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgcmV0dXJuICFpbnZva2VDYWxs
YmFjayhtX2NhbGxiYWNrLCAiIC4gc2NhbGFyKEBwYXJhbXMpIC4gIiwgYXJndiwgY2FsbGJhY2tS
ZXR1cm5WYWx1ZSwgc2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpKTtcbiIpOwogICAgICAgICAgICAg
fQpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Rlc3RDYWxsYmFj
ay5pZGwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0
L1Rlc3RDYWxsYmFjay5pZGwJKHJldmlzaW9uIDExNDcxOCkKKysrIFNvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL3NjcmlwdHMvdGVzdC9UZXN0Q2FsbGJhY2suaWRsCSh3b3JraW5nIGNvcHkpCkBAIC00
MSw1ICs0MSw2IEBAIG1vZHVsZSB0ZXN0IHsKICAgICAgIGJvb2xlYW4gY2FsbGJhY2tXaXRoU3Ry
aW5nTGlzdChpbiBET01TdHJpbmdMaXN0IGxpc3RQYXJhbSk7CiAgICAgICBib29sZWFuIGNhbGxi
YWNrV2l0aEJvb2xlYW4oaW4gYm9vbGVhbiBib29sUGFyYW0pOwogICAgICAgW1Bhc3NUaGlzVG9D
YWxsYmFjaz1UaGlzQ2xhc3NdIGJvb2xlYW4gY2FsbGJhY2tSZXF1aXJlc1RoaXNUb1Bhc3MoaW4g
Q2xhc3M4IGNsYXNzOFBhcmFtLCBpbiBUaGlzQ2xhc3MgdGhpc0NsYXNzUGFyYW0pOworICAgICAg
W1Bhc3NUaGlzVG9DYWxsYmFjaz1Ob2RlXSBib29sZWFuIGNhbGxiYWNrUmVxdWlyZXNUaGlzVG9Q
YXNzKGluIE5vZGUgb25lLCBpbiBOb2RlIHR3byk7CiAgICAgfTsKIH0K
</data>

          </attachment>
      

    </bug>

</bugzilla>