<?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>77605</bug_id>
          
          <creation_ts>2012-02-01 22:41:19 -0800</creation_ts>
          <short_desc>[Clamp] support in binding generator</short_desc>
          <delta_ts>2012-07-30 00:33:13 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>WebCore Misc.</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc>http://dev.w3.org/2006/webapi/WebIDL/#Clamp</bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P3</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Kent Tamura">tkent</reporter>
          <assigned_to name="Vineet Chaudhary (vineetc)">code.vineet</assigned_to>
          <cc>abarth</cc>
    
    <cc>code.vineet</cc>
    
    <cc>haraken</cc>
    
    <cc>japhet</cc>
    
    <cc>jochen</cc>
    
    <cc>ojan</cc>
    
    <cc>toyoshim</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>547662</commentid>
    <comment_count>0</comment_count>
    <who name="Kent Tamura">tkent</who>
    <bug_when>2012-02-01 22:41:19 -0800</bug_when>
    <thetext>We don&apos;t support [Clamp] extended attribute in IDL files.  So we had to implement custom binding code for Bug 66925.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>547664</commentid>
    <comment_count>1</comment_count>
    <who name="Kentaro Hara">haraken</who>
    <bug_when>2012-02-01 22:43:25 -0800</bug_when>
    <thetext>The Web IDL spec: http://dev.w3.org/2006/webapi/WebIDL/#Clamp</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>547666</commentid>
    <comment_count>2</comment_count>
    <who name="Takashi Toyoshima">toyoshim</who>
    <bug_when>2012-02-01 22:44:27 -0800</bug_when>
    <thetext>*** Bug 67463 has been marked as a duplicate of this bug. ***</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>547667</commentid>
    <comment_count>3</comment_count>
    <who name="Kent Tamura">tkent</who>
    <bug_when>2012-02-01 22:46:31 -0800</bug_when>
    <thetext>(In reply to comment #2)
&gt; *** Bug 67463 has been marked as a duplicate of this bug. ***

Oh, I overlooked the existing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>547668</commentid>
    <comment_count>4</comment_count>
    <who name="Takashi Toyoshima">toyoshim</who>
    <bug_when>2012-02-01 22:50:54 -0800</bug_when>
    <thetext>np.
I&apos;m sorry for being lazy for a long time on this issue.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>680306</commentid>
    <comment_count>5</comment_count>
      <attachid>154879</attachid>
    <who name="Vineet Chaudhary (vineetc)">code.vineet</who>
    <bug_when>2012-07-27 01:49:52 -0700</bug_when>
    <thetext>Created attachment 154879
wipPatch

This patch supports the methods with clamp extended attribute.

As per spec says :
The [Clamp] extended attribute MUST take no arguments. The [Clamp] extended attribute MUST NOT appear on a read only attribute, or an attribute,
operation argument or dictionary member that is not of an integer type.
It also MUST NOT be used in conjunction with the [EnforceRange] extended attribute.

This patch is based on the current Implementation for WebSockets.idl in JS/V8WebSocketsCustom.cpp::close().
Supporting [Clamp] we should be able to remove these custom bindings.

Not marking for review as currently not supports other bindings like (CPP,ObjC,GObject).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>680330</commentid>
    <comment_count>6</comment_count>
      <attachid>154879</attachid>
    <who name="Vineet Chaudhary (vineetc)">code.vineet</who>
    <bug_when>2012-07-27 02:15:02 -0700</bug_when>
    <thetext>Comment on attachment 154879
wipPatch

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

&gt; Source/WebCore/bindings/scripts/CodeGeneratorV8.pm:1686
&gt; +                $parameterCheckString .= &quot;    double $parameterName = $nativeValue;\n&quot;;

$parameterCheckString .= &quot; double $parameterName = $nativeValue;\n&quot;; //Should be
$parameterCheckString .= &quot; $parameter-&gt;type $parameterName = $nativeValue;\n&quot;

&gt; Source/WebCore/bindings/scripts/test/JS/JSTestObj.cpp:2357
&gt; +        code = clampTo(code, minValue, maxValue);

In the current JS/V8WebSocketCustom.cpp it again clamps this(code) to integer.
code = clampToInteger(x); //http://trac.webkit.org/browser/trunk/Source/WebCore/bindings/js/JSWebSocketCustom.cpp?rev=115670#L136

Which is confusing as spec says it should be double value. This is clamped to Integer to match declaration 
void close(int code, const String&amp; reason, ExceptionCode&amp;);</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>680336</commentid>
    <comment_count>7</comment_count>
      <attachid>154879</attachid>
    <who name="Kentaro Hara">haraken</who>
    <bug_when>2012-07-27 02:24:28 -0700</bug_when>
    <thetext>Comment on attachment 154879
wipPatch

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

&gt; Source/WebCore/bindings/scripts/test/TestObj.idl:191
&gt; +        void classMethodWithClamp(in [Clamp] long code, in [Clamp] double gode);

Per the spec, I think you cannot use [Clamp] for double.

&gt; Source/WebCore/bindings/scripts/test/JS/JSTestObj.cpp:2360
&gt; +    if (exec-&gt;hadException())
&gt; +        return JSValue::encode(jsUndefined());

This check should be put just after toInt32().

&gt; Source/WebCore/bindings/scripts/test/JS/JSTestObj.cpp:2373
&gt; +    if (exec-&gt;hadException())
&gt; +        return JSValue::encode(jsUndefined());

Ditto.

&gt; Source/WebCore/bindings/scripts/test/V8/V8TestObj.cpp:1731
&gt; +    double code = toInt32(codeValue);

This can throw exception. Please use EXCEPTION_BLOCK().

&gt; Source/WebCore/bindings/scripts/test/V8/V8TestObj.cpp:1737
&gt; +        code = clampTo(code, minValue, maxValue);

- You need to implement clampTo() somewhere. Maybe bindings/generic/GenericBinding.h?

- Let&apos;s move &apos;double maxValue = ...; double minValue = ...;&apos; and &apos;if(isnan(code)) { ... } else { ... }&apos; into clampTo().

- toClampedValue() might be a better name.

&gt; Source/WebCore/bindings/scripts/test/V8/V8TestObj.cpp:1739
&gt; +    if (ec)
&gt; +        return throwError(ec, args.GetIsolate());

Remove this.

&gt; Source/WebCore/bindings/scripts/test/V8/V8TestObj.cpp:1744
&gt; +    double maxValue = static_cast&lt;double&gt;(std::numeric_limits&lt;uint16_t&gt;::max());
&gt; +    double minValue = static_cast&lt;double&gt;(std::numeric_limits&lt;uint16_t&gt;::min());

You need to avoid duplicate declarations of maxValue and minValue. By moving the logic to clampTo(), you can solve the issue.

&gt; Source/WebCore/bindings/scripts/test/V8/V8TestObj.cpp:1750
&gt; +    if (ec)
&gt; +        return throwError(ec, args.GetIsolate());

Remove this.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>680340</commentid>
    <comment_count>8</comment_count>
    <who name="Kentaro Hara">haraken</who>
    <bug_when>2012-07-27 02:27:21 -0700</bug_when>
    <thetext>(&gt; Not marking for review as currently not supports other bindings like (CPP,ObjC,GObject).

For the time being in this patch, I think it is OK to just skip [Clamp] attributes in CPP, ObjC and GObject (as a bunch of attributes are already skipped in CPP, ObjC and GObject).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>680341</commentid>
    <comment_count>9</comment_count>
    <who name="Kentaro Hara">haraken</who>
    <bug_when>2012-07-27 02:29:21 -0700</bug_when>
    <thetext>(In reply to comment #6)
&gt; Which is confusing as spec says it should be double value. This is clamped to Integer to match declaration 
&gt; void close(int code, const String&amp; reason, ExceptionCode&amp;);

Shall we fix it before landing this patch?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>680737</commentid>
    <comment_count>10</comment_count>
      <attachid>154975</attachid>
    <who name="Vineet Chaudhary (vineetc)">code.vineet</who>
    <bug_when>2012-07-27 09:34:22 -0700</bug_when>
    <thetext>Created attachment 154975
Updated Patch

(In reply to comment #7)
&gt; &gt; Source/WebCore/bindings/scripts/test/TestObj.idl:191
&gt; &gt; +        void classMethodWithClamp(in [Clamp] long code, in [Clamp] double gode); 
&gt; Per the spec, I think you cannot use [Clamp] for double.

Yes right because of &quot;not of an integer type&quot;. Thanks.

&gt; &gt; Source/WebCore/bindings/scripts/test/JS/JSTestObj.cpp:2360
&gt; &gt; +    if (exec-&gt;hadException())
&gt; &gt; +        return JSValue::encode(jsUndefined());
&gt; 
&gt; This check should be put just after toInt32().
Done.

&gt; &gt; Source/WebCore/bindings/scripts/test/V8/V8TestObj.cpp:1731
&gt; &gt; +    double code = toInt32(codeValue);
&gt; This can throw exception. Please use EXCEPTION_BLOCK().
Done.

&gt; &gt; Source/WebCore/bindings/scripts/test/V8/V8TestObj.cpp:1739
&gt; &gt; +    if (ec)
&gt; &gt; +        return throwError(ec, args.GetIsolate());
&gt; 
&gt; Remove this.
Done

&gt; &gt; Source/WebCore/bindings/scripts/test/V8/V8TestObj.cpp:1737
&gt; &gt; +        code = clampTo(code, minValue, maxValue);
&gt; 
&gt; - You need to implement clampTo() somewhere. Maybe bindings/generic/GenericBinding.h?
&gt; 
&gt; - Let&apos;s move &apos;double maxValue = ...; double minValue = ...;&apos; and &apos;if(isnan(code)) { ... } else { ... }&apos; into clampTo().
&gt; 
&gt; - toClampedValue() might be a better name.

&gt; &gt; Source/WebCore/bindings/scripts/test/V8/V8TestObj.cpp:1744
&gt; &gt; +    double maxValue = static_cast&lt;double&gt;(std::numeric_limits&lt;uint16_t&gt;::max());
&gt; &gt; +    double minValue = static_cast&lt;double&gt;(std::numeric_limits&lt;uint16_t&gt;::min());
&gt; 
&gt; You need to avoid duplicate declarations of maxValue and minValue. By moving the logic to clampTo(), you can solve the issue.
&gt; 
&gt; &gt; Source/WebCore/bindings/scripts/test/V8/V8TestObj.cpp:1750
&gt; &gt; +    if (ec)
&gt; &gt; +        return throwError(ec, args.GetIsolate());
&gt; 
&gt; Remove this.

In current patch I tried to to simplify this and now there shouldn&apos;t be problem on duplicate declaration.
Still if insist I will move it to GenericBinding.h.

(In reply to comment #9)
&gt; &gt; Which is confusing as spec says it should be double value. This is clamped to Integer to match declaration 
&gt; &gt; void close(int code, const String&amp; reason, ExceptionCode&amp;);
&gt; 
&gt; Shall we fix it before landing this patch?
I checked with specification again I think we need not to modify anything here as clampTo&lt;T&gt;(...) solves the problem
and also matches the spec: http://www.w3.org/TR/WebIDL/#es-unsigned-short (3rd Point)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>681266</commentid>
    <comment_count>11</comment_count>
      <attachid>154975</attachid>
    <who name="Kentaro Hara">haraken</who>
    <bug_when>2012-07-27 17:28:43 -0700</bug_when>
    <thetext>Comment on attachment 154975
Updated Patch

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

&gt; Source/WebCore/bindings/scripts/test/TestObj.idl:191
&gt; +#if defined(TESTING_V8) || defined(TESTING_JS)

This is a solution to skip ObjC, GObject and CPP for TestObj.idl, but this is not a solution to skip them for real IDL files. So instead of adding this defined macro here, please modify CodeGenerator{ObjC,GObject,CPP}.pm so that they can skip generating code for [Clamp] attributes.

&gt; Source/WebCore/bindings/scripts/test/JS/JSTestObj.cpp:2355
&gt; +        objArgsShort = 0.0;

0.0 =&gt; 0

&gt; Source/WebCore/bindings/scripts/test/JS/JSTestObj.cpp:2365
&gt; +        objArgsLong = 0.0;

0.0 =&gt; 0

&gt; Source/WebCore/bindings/scripts/test/V8/V8TestObj.cpp:1732
&gt; +        objArgsShort = 0.0;

You need to declare objArgsShort.

0.0 =&gt; 0

&gt; Source/WebCore/bindings/scripts/test/V8/V8TestObj.cpp:1737
&gt; +        objArgsLong = 0.0;

Ditto.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>681404</commentid>
    <comment_count>12</comment_count>
      <attachid>155127</attachid>
    <who name="Vineet Chaudhary (vineetc)">code.vineet</who>
    <bug_when>2012-07-28 06:36:24 -0700</bug_when>
    <thetext>Created attachment 155127
patch

Updated Patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>681415</commentid>
    <comment_count>13</comment_count>
      <attachid>155127</attachid>
    <who name="Kentaro Hara">haraken</who>
    <bug_when>2012-07-28 07:13:26 -0700</bug_when>
    <thetext>Comment on attachment 155127
patch

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

Looks OK

&gt; Source/WebCore/ChangeLog:14
&gt; +        * bindings/scripts/CodeGeneratorCPP.pm:
&gt; +        (SkipFunction): Skips methods with [Clamp] parameters.

Nit: No update in run-bindings-tests results for CPP? (I am not sure but a couple of lines might be generated even if you skipped it. Please just check it.)

&gt; Source/WebCore/bindings/scripts/test/JS/JSTestObj.cpp:2366
&gt; +    if (isnan(objArgsShortNativeValue))
&gt; +        objArgsShort = 0;
&gt; +    else

Nit: These three lines could be:

    if (!isnan(objArgsShortNativeValue))

&gt; Source/WebCore/bindings/scripts/test/JS/JSTestObj.cpp:2376
&gt; +    if (isnan(objArgsLongNativeValue))
&gt; +        objArgsLong = 0;
&gt; +    else

Ditto.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>681421</commentid>
    <comment_count>14</comment_count>
      <attachid>155131</attachid>
    <who name="Vineet Chaudhary (vineetc)">code.vineet</who>
    <bug_when>2012-07-28 08:05:45 -0700</bug_when>
    <thetext>Created attachment 155131
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>681422</commentid>
    <comment_count>15</comment_count>
    <who name="Vineet Chaudhary (vineetc)">code.vineet</who>
    <bug_when>2012-07-28 08:07:47 -0700</bug_when>
    <thetext>(In reply to comment #13)
&gt; (From update of attachment 155127 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=155127&amp;action=review
&gt; 
&gt; Looks OK
&gt; 
&gt; &gt; Source/WebCore/ChangeLog:14
&gt; &gt; +        * bindings/scripts/CodeGeneratorCPP.pm:
&gt; &gt; +        (SkipFunction): Skips methods with [Clamp] parameters.
&gt; 
&gt; Nit: No update in run-bindings-tests results for CPP? (I am not sure but a couple of lines might be generated even if you skipped it. Please just check it.)

I checked it but as we are Skiping function itself so there should no generated code for these bindings, isn&apos;t it ..</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>681423</commentid>
    <comment_count>16</comment_count>
      <attachid>155127</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-07-28 08:08:23 -0700</bug_when>
    <thetext>Comment on attachment 155127
patch

Cleared Kentaro Hara&apos;s review+ from obsolete attachment 155127 so that this bug does not appear in http://webkit.org/pending-commit.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>681424</commentid>
    <comment_count>17</comment_count>
      <attachid>155131</attachid>
    <who name="Kentaro Hara">haraken</who>
    <bug_when>2012-07-28 08:09:37 -0700</bug_when>
    <thetext>Comment on attachment 155131
patch

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

Thank you very much for the patch!

&gt; Source/WebCore/bindings/scripts/IDLAttributes.txt:28
&gt; +Clamp

Please add the explanation to https://trac.webkit.org/wiki/WebKitIDL</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>681428</commentid>
    <comment_count>18</comment_count>
      <attachid>155131</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-07-28 09:11:58 -0700</bug_when>
    <thetext>Comment on attachment 155131
patch

Clearing flags on attachment: 155131

Committed r123962: &lt;http://trac.webkit.org/changeset/123962&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>681429</commentid>
    <comment_count>19</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-07-28 09:12:04 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>681734</commentid>
    <comment_count>20</comment_count>
    <who name="Vineet Chaudhary (vineetc)">code.vineet</who>
    <bug_when>2012-07-30 00:16:51 -0700</bug_when>
    <thetext>(In reply to comment #17)
&gt; (From update of attachment 155131 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=155131&amp;action=review
&gt; 
&gt; Thank you very much for the patch!
&gt; 
&gt; &gt; Source/WebCore/bindings/scripts/IDLAttributes.txt:28
&gt; &gt; +Clamp
&gt; 
&gt; Please add the explanation to https://trac.webkit.org/wiki/WebKitIDL

I have added explanation to http://trac.webkit.org/wiki/WebKitIDL#Clamp
Could you please review those? Thanks..</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>681745</commentid>
    <comment_count>21</comment_count>
    <who name="Kentaro Hara">haraken</who>
    <bug_when>2012-07-30 00:33:13 -0700</bug_when>
    <thetext>(In reply to comment #20)
&gt; I have added explanation to http://trac.webkit.org/wiki/WebKitIDL#Clamp
&gt; Could you please review those? Thanks..

Great, thanks!</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>154879</attachid>
            <date>2012-07-27 01:49:52 -0700</date>
            <delta_ts>2012-07-27 09:34:22 -0700</delta_ts>
            <desc>wipPatch</desc>
            <filename>clamp_001.diff</filename>
            <type>text/plain</type>
            <size>16857</size>
            <attacher name="Vineet Chaudhary (vineetc)">code.vineet</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDEyMzg1MCkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDQwIEBACisyMDEyLTA3LTI3ICBWaW5lZXQg
Q2hhdWRoYXJ5ICA8cmdmNzQ4QG1vdG9yb2xhLmNvbT4KKworICAgICAgICBbQ2xhbXBdIHN1cHBv
cnQgaW4gYmluZGluZyBnZW5lcmF0b3IKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTc3NjA1CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BT
ISkuCisKKyAgICAgICAgQ3VycmVudGx5IFtDbGFtcF0gZXh0ZW5kZWQgYXR0cmlidXRlIGluIElE
TCBmaWxlcy4KKyAgICAgICAgU3BlYzogaHR0cDovL2Rldi53My5vcmcvMjAwNi93ZWJhcGkvV2Vi
SURMLyNDbGFtcAorCisgICAgICAgIFRlc3RzOiBUZXN0T2JqLmlkbAorCisgICAgICAgICogYmlu
ZGluZ3Mvc2NyaXB0cy9Db2RlR2VuZXJhdG9ySlMucG06IFN1cHBvcnQgW0NsYW1wXSBmb3IgSlNC
aW5kaW5ncy4KKyAgICAgICAgKEdlbmVyYXRlUGFyYW1ldGVyc0NoZWNrKToKKyAgICAgICAgKiBi
aW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0b3JWOC5wbTogU3VwcG9ydCBbQ2xhbXBdIGZvciBW
OEJpbmRpbmdzLgorICAgICAgICAoR2VuZXJhdGVQYXJhbWV0ZXJzQ2hlY2spOgorICAgICAgICAq
IGJpbmRpbmdzL3NjcmlwdHMvSURMQXR0cmlidXRlcy50eHQ6CisgICAgICAgICogYmluZGluZ3Mv
c2NyaXB0cy90ZXN0L0NQUC9XZWJET01UZXN0T2JqLmNwcDoKKyAgICAgICAgKFdlYkRPTVRlc3RP
Ymo6OmNsYXNzTWV0aG9kV2l0aENsYW1wKToKKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rl
c3QvQ1BQL1dlYkRPTVRlc3RPYmouaDoKKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3Qv
R09iamVjdC9XZWJLaXRET01UZXN0T2JqLmNwcDoKKyAgICAgICAgKHdlYmtpdF9kb21fdGVzdF9v
YmpfY2xhc3NfbWV0aG9kX3dpdGhfY2xhbXApOgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMv
dGVzdC9HT2JqZWN0L1dlYktpdERPTVRlc3RPYmouaDoKKyAgICAgICAgKiBiaW5kaW5ncy9zY3Jp
cHRzL3Rlc3QvSlMvSlNUZXN0T2JqLmNwcDoKKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAo
V2ViQ29yZTo6anNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25DbGFzc01ldGhvZFdpdGhDbGFtcCk6
CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE9iai5oOgorICAgICAg
ICAoV2ViQ29yZSk6CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L09iakMvRE9NVGVz
dE9iai5oOgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9PYmpDL0RPTVRlc3RPYmou
bW06CisgICAgICAgICgtW0RPTVRlc3RPYmogY2xhc3NNZXRob2RXaXRoQ2xhbXA6Z29kZTpdKToK
KyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvVGVzdE9iai5pZGw6CisgICAgICAgICog
YmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Y4L1Y4VGVzdE9iai5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpUZXN0T2JqVjhJbnRlcm5hbDo6Y2xhc3NNZXRob2RXaXRoQ2xhbXBDYWxsYmFjayk6CisgICAg
ICAgIChUZXN0T2JqVjhJbnRlcm5hbCk6CisgICAgICAgIChXZWJDb3JlKToKKwogMjAxMi0wNy0y
NyAgVml2ZWsgR2FsYXRhZ2UgIDx2aXZla2dhbGF0YWdlQGdtYWlsLmNvbT4KIAogICAgICAgICBQ
YWdlIG9iamVjdCBzaG91bGQgYXNjZXJ0YWluIEVkaXRvckNsaWVudCB0byBiZSBub24tbnVsbApJ
bmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy9Db2RlR2VuZXJhdG9ySlMucG0K
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy9Db2RlR2VuZXJh
dG9ySlMucG0JKHJldmlzaW9uIDEyMzcxMykKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Nj
cmlwdHMvQ29kZUdlbmVyYXRvckpTLnBtCSh3b3JraW5nIGNvcHkpCkBAIC0yNjA3LDYgKzI2MDcs
MTggQEAgc3ViIEdlbmVyYXRlUGFyYW1ldGVyc0NoZWNrCiAgICAgICAgICAgICAgICAgcHVzaChA
JG91dHB1dEFycmF5LCAiICAgIH1cbiIpOwogICAgICAgICAgICAgICAgIHB1c2goQCRvdXRwdXRB
cnJheSwgIiAgICBSZWZQdHI8JGFyZ1R5cGU+ICRuYW1lID0gJHtjYWxsYmFja0NsYXNzTmFtZX06
OmNyZWF0ZShhc09iamVjdChleGVjLT5hcmd1bWVudCgkYXJnc0luZGV4KSksIGNhc3RlZFRoaXMt
Pmdsb2JhbE9iamVjdCgpKTtcbiIpOwogICAgICAgICAgICAgfQorICAgICAgICB9IGVsc2lmICgk
cGFyYW1ldGVyLT5leHRlbmRlZEF0dHJpYnV0ZXMtPnsiQ2xhbXAifSkgeworICAgICAgICAgICAg
ICAgIHB1c2goQCRvdXRwdXRBcnJheSwgIiAgICBKU1ZhbHVlICR7bmFtZX1WYWx1ZSA9IGV4ZWMt
PmFyZ3VtZW50KCRhcmdzSW5kZXgpO1xuIik7CisgICAgICAgICAgICAgICAgbXkgJG5hdGl2ZVZh
bHVlID0gSlNWYWx1ZVRvTmF0aXZlKCRwYXJhbWV0ZXIsICIke25hbWV9VmFsdWUiKTsKKyAgICAg
ICAgICAgICAgICBwdXNoKEAkb3V0cHV0QXJyYXksICIgICAgJGFyZ1R5cGUgJG5hbWUgPSAkbmF0
aXZlVmFsdWU7XG4iKTsKKyAgICAgICAgICAgICAgICBwdXNoKEAkb3V0cHV0QXJyYXksICIgICAg
ZG91YmxlIG1heFZhbHVlID0gc3RhdGljX2Nhc3Q8ZG91YmxlPihzdGQ6Om51bWVyaWNfbGltaXRz
PHVpbnQxNl90Pjo6bWF4KCkpO1xuIik7CisgICAgICAgICAgICAgICAgcHVzaChAJG91dHB1dEFy
cmF5LCAiICAgIGRvdWJsZSBtaW5WYWx1ZSA9IHN0YXRpY19jYXN0PGRvdWJsZT4oc3RkOjpudW1l
cmljX2xpbWl0czx1aW50MTZfdD46Om1pbigpKTtcblxuIik7CisgICAgICAgICAgICAgICAgcHVz
aChAJG91dHB1dEFycmF5LCAiICAgIGlmIChpc25hbigkbmFtZSkpXG4iKTsKKyAgICAgICAgICAg
ICAgICBwdXNoKEAkb3V0cHV0QXJyYXksICIgICAgICAgICRuYW1lID0gMC4wO1xuIik7CisgICAg
ICAgICAgICAgICAgcHVzaChAJG91dHB1dEFycmF5LCAiICAgIGVsc2VcbiIpOworICAgICAgICAg
ICAgICAgIHB1c2goQCRvdXRwdXRBcnJheSwgIiAgICAgICAgJG5hbWUgPSBjbGFtcFRvKCRuYW1l
LCBtaW5WYWx1ZSwgbWF4VmFsdWUpO1xuXG4iKTsKKyAgICAgICAgICAgICAgICBwdXNoKEAkb3V0
cHV0QXJyYXksICIgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKVxuIik7CisgICAgICAgICAg
ICAgICAgcHVzaChAJG91dHB1dEFycmF5LCAiICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2Rl
KGpzVW5kZWZpbmVkKCkpO1xuXG4iKTsKICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICMg
SWYgdGhlICJTdHJpY3RUeXBlQ2hlY2tpbmciIGV4dGVuZGVkIGF0dHJpYnV0ZSBpcyBwcmVzZW50
LCBhbmQgdGhlIGFyZ3VtZW50J3MgdHlwZSBpcyBhbgogICAgICAgICAgICAgIyBpbnRlcmZhY2Ug
dHlwZSwgdGhlbiBpZiB0aGUgaW5jb21pbmcgdmFsdWUgZG9lcyBub3QgaW1wbGVtZW50IHRoYXQg
aW50ZXJmYWNlLCBhIFR5cGVFcnJvcgpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2Ny
aXB0cy9Db2RlR2VuZXJhdG9yVjgucG0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3Mvc2NyaXB0cy9Db2RlR2VuZXJhdG9yVjgucG0JKHJldmlzaW9uIDEyMzcxMykKKysrIFNv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvQ29kZUdlbmVyYXRvclY4LnBtCSh3b3JraW5n
IGNvcHkpCkBAIC0xNjgwLDYgKzE2ODAsMTkgQEAgc3ViIEdlbmVyYXRlUGFyYW1ldGVyc0NoZWNr
CiAgICAgICAgICAgICAgICAgJHBhcmFtZXRlckNoZWNrU3RyaW5nIC49ICIgICAgICAgIHJldHVy
biB0aHJvd0Vycm9yKFRZUEVfTUlTTUFUQ0hfRVJSLCBhcmdzLkdldElzb2xhdGUoKSk7XG4iOwog
ICAgICAgICAgICAgICAgICRwYXJhbWV0ZXJDaGVja1N0cmluZyAuPSAiICAgIFJlZlB0cjwiIC4g
JHBhcmFtZXRlci0+dHlwZSAuICI+ICRwYXJhbWV0ZXJOYW1lID0gJHtjbGFzc05hbWV9OjpjcmVh
dGUoYXJnc1skcGFyYW1JbmRleF0sIGdldFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKSk7XG4iOwog
ICAgICAgICAgICAgfQorICAgICAgICB9IGVsc2lmICgkcGFyYW1ldGVyLT5leHRlbmRlZEF0dHJp
YnV0ZXMtPnsiQ2xhbXAifSkgeworICAgICAgICAgICAgICAgICRwYXJhbWV0ZXJDaGVja1N0cmlu
ZyAuPSAiICAgIHY4OjpIYW5kbGU8djg6OlZhbHVlPiAke3BhcmFtZXRlck5hbWV9VmFsdWUgPSBh
cmdzWyRwYXJhbUluZGV4XTtcbiI7CisgICAgICAgICAgICAgICAgbXkgJG5hdGl2ZVZhbHVlID0g
SlNWYWx1ZVRvTmF0aXZlKCRwYXJhbWV0ZXIsICIke3BhcmFtZXRlck5hbWV9VmFsdWUiLCAiaW5m
by5HZXRJc29sYXRlKCkiKTsKKyAgICAgICAgICAgICAgICAkcGFyYW1ldGVyQ2hlY2tTdHJpbmcg
Lj0gIiAgICBkb3VibGUgJHBhcmFtZXRlck5hbWUgPSAkbmF0aXZlVmFsdWU7XG4iOworICAgICAg
ICAgICAgICAgICRwYXJhbWV0ZXJDaGVja1N0cmluZyAuPSAiICAgIGRvdWJsZSBtYXhWYWx1ZSA9
IHN0YXRpY19jYXN0PGRvdWJsZT4oc3RkOjpudW1lcmljX2xpbWl0czx1aW50MTZfdD46Om1heCgp
KTtcbiI7CisgICAgICAgICAgICAgICAgJHBhcmFtZXRlckNoZWNrU3RyaW5nIC49ICIgICAgZG91
YmxlIG1pblZhbHVlID0gc3RhdGljX2Nhc3Q8ZG91YmxlPihzdGQ6Om51bWVyaWNfbGltaXRzPHVp
bnQxNl90Pjo6bWluKCkpO1xuIjsKKyAgICAgICAgICAgICAgICAkcGFyYW1ldGVyQ2hlY2tTdHJp
bmcgLj0gIiAgICBpZiAoaXNuYW4oJHBhcmFtZXRlck5hbWUpKVxuIjsKKyAgICAgICAgICAgICAg
ICAkcGFyYW1ldGVyQ2hlY2tTdHJpbmcgLj0gIiAgICAgICAgJHBhcmFtZXRlck5hbWUgPSAwLjA7
XG4iOworICAgICAgICAgICAgICAgICRwYXJhbWV0ZXJDaGVja1N0cmluZyAuPSAiICAgIGVsc2Vc
biI7CisgICAgICAgICAgICAgICAgJHBhcmFtZXRlckNoZWNrU3RyaW5nIC49ICIgICAgICAgICRw
YXJhbWV0ZXJOYW1lID0gY2xhbXBUbygkcGFyYW1ldGVyTmFtZSwgbWluVmFsdWUsIG1heFZhbHVl
KTtcbiI7CisgICAgICAgICAgICAgICAgJHBhcmFtZXRlckNoZWNrU3RyaW5nIC49ICIgICAgaWYg
KGVjKVxuIjsKKyAgICAgICAgICAgICAgICAkcGFyYW1ldGVyQ2hlY2tTdHJpbmcgLj0gIiAgICAg
ICAgcmV0dXJuIHRocm93RXJyb3IoZWMsIGFyZ3MuR2V0SXNvbGF0ZSgpKTtcblxuIjsKKwogICAg
ICAgICB9IGVsc2lmICgkcGFyYW1ldGVyLT50eXBlIGVxICJTZXJpYWxpemVkU2NyaXB0VmFsdWUi
KSB7CiAgICAgICAgICAgICBBZGRUb0ltcGxJbmNsdWRlcygiU2VyaWFsaXplZFNjcmlwdFZhbHVl
LmgiKTsKICAgICAgICAgICAgIG15ICR1c2VUcmFuc2Zlckxpc3QgPSAwOwpJbmRleDogU291cmNl
L1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy9JRExBdHRyaWJ1dGVzLnR4dAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL0lETEF0dHJpYnV0ZXMudHh0CShyZXZp
c2lvbiAxMjM3MTMpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL0lETEF0dHJp
YnV0ZXMudHh0CSh3b3JraW5nIGNvcHkpCkBAIC0yNSw2ICsyNSw3IEBAIENhbGxXaXRoPVNjcmlw
dEV4ZWN1dGlvbkNvbnRleHR8U2NyaXB0U3QKIENhbGxiYWNrCiBDaGVja1NlY3VyaXR5CiBDaGVj
a1NlY3VyaXR5Rm9yTm9kZQorQ2xhbXAKIENvbmRpdGlvbmFsPSoKIENvbnN0cnVjdG9yCiBDb25z
dHJ1Y3RvclBhcmFtZXRlcnM9KgpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0
cy90ZXN0L1Rlc3RPYmouaWRsCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L3NjcmlwdHMvdGVzdC9UZXN0T2JqLmlkbAkocmV2aXNpb24gMTIzNzEzKQorKysgU291cmNlL1dl
YkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Rlc3RPYmouaWRsCSh3b3JraW5nIGNvcHkpCkBA
IC0xODgsNiArMTg4LDggQEAgbW9kdWxlIHRlc3QgewogICAgICAgICBbQ29uZGl0aW9uYWw9Q29u
ZGl0aW9uMV0gc3RhdGljIHZvaWQgb3ZlcmxvYWRlZE1ldGhvZDEoaW4gbG9uZyBhcmcpOwogICAg
ICAgICBbQ29uZGl0aW9uYWw9Q29uZGl0aW9uMV0gc3RhdGljIHZvaWQgb3ZlcmxvYWRlZE1ldGhv
ZDEoaW4gRE9NU3RyaW5nIHR5cGUpOwogCisgICAgICAgIHZvaWQgY2xhc3NNZXRob2RXaXRoQ2xh
bXAoaW4gW0NsYW1wXSBsb25nIGNvZGUsIGluIFtDbGFtcF0gZG91YmxlIGdvZGUpOworCiAjaWYg
ZGVmaW5lZChURVNUSU5HX1Y4KQogICAgICAgICAvLyAnVjhFbmFibGVkQXRSdW50aW1lJyBtZXRo
b2RzIGFuZCBhdHRyaWJ1dGVzLgogICAgICAgICBbVjhFbmFibGVkQXRSdW50aW1lXSB2b2lkIGVu
YWJsZWRBdFJ1bnRpbWVNZXRob2QxKGluIGxvbmcgbG9uZ0FyZyk7CkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvQ1BQL1dlYkRPTVRlc3RPYmouY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9DUFAvV2ViRE9NVGVz
dE9iai5jcHAJKHJldmlzaW9uIDEyMzcxMykKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Nj
cmlwdHMvdGVzdC9DUFAvV2ViRE9NVGVzdE9iai5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTg4Niw2
ICs4ODYsMTQgQEAgdm9pZCBXZWJET01UZXN0T2JqOjpvdmVybG9hZGVkTWV0aG9kMShjbwogCiAj
ZW5kaWYKIAordm9pZCBXZWJET01UZXN0T2JqOjpjbGFzc01ldGhvZFdpdGhDbGFtcChpbnQgY29k
ZSwgZG91YmxlIGdvZGUpCit7CisgICAgaWYgKCFpbXBsKCkpCisgICAgICAgIHJldHVybjsKKwor
ICAgIGltcGwoKS0+Y2xhc3NNZXRob2RXaXRoQ2xhbXAoY29kZSwgZ29kZSk7Cit9CisKIHZvaWQg
V2ViRE9NVGVzdE9iajo6Y29udmVydDEoY29uc3QgV2ViRE9NYSYgKQogewogICAgIGlmICghaW1w
bCgpKQpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0NQUC9XZWJE
T01UZXN0T2JqLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0
cy90ZXN0L0NQUC9XZWJET01UZXN0T2JqLmgJKHJldmlzaW9uIDEyMzcxMykKKysrIFNvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9DUFAvV2ViRE9NVGVzdE9iai5oCSh3b3JraW5n
IGNvcHkpCkBAIC0xODAsNiArMTgwLDcgQEAgcHVibGljOgogI2lmIEVOQUJMRShDb25kaXRpb24x
KQogICAgIHZvaWQgb3ZlcmxvYWRlZE1ldGhvZDEoY29uc3QgV2ViRE9NU3RyaW5nJiB0eXBlKTsK
ICNlbmRpZgorICAgIHZvaWQgY2xhc3NNZXRob2RXaXRoQ2xhbXAoaW50IGNvZGUsIGRvdWJsZSBn
b2RlKTsKICAgICB2b2lkIGNvbnZlcnQxKGNvbnN0IFdlYkRPTWEmICk7CiAgICAgdm9pZCBjb252
ZXJ0Mihjb25zdCBXZWJET01iJiApOwogICAgIHZvaWQgY29udmVydDMoY29uc3QgV2ViRE9NYyYg
KTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9HT2JqZWN0L1dl
YktpdERPTVRlc3RPYmouY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L3NjcmlwdHMvdGVzdC9HT2JqZWN0L1dlYktpdERPTVRlc3RPYmouY3BwCShyZXZpc2lvbiAxMjM3
MTMpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvR09iamVjdC9XZWJL
aXRET01UZXN0T2JqLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTMzMCw2ICsxMzMwLDE1IEBAIHdl
YmtpdF9kb21fdGVzdF9vYmpfb3ZlcmxvYWRlZF9tZXRob2QxKFcKIH0KIAogdm9pZAord2Via2l0
X2RvbV90ZXN0X29ial9jbGFzc19tZXRob2Rfd2l0aF9jbGFtcChXZWJLaXRET01UZXN0T2JqKiBz
ZWxmLCBnbG9uZyBjb2RlLCBnZG91YmxlIGdvZGUpCit7CisgICAgZ19yZXR1cm5faWZfZmFpbChz
ZWxmKTsKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgV2Vi
Q29yZTo6VGVzdE9iaiogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBpdGVtLT5jbGFz
c01ldGhvZFdpdGhDbGFtcChjb2RlLCBnb2RlKTsKK30KKwordm9pZAogd2Via2l0X2RvbV90ZXN0
X29ial9jb252ZXJ0MShXZWJLaXRET01UZXN0T2JqKiBzZWxmLCBXZWJLaXRET01hKiApCiB7CiAg
ICAgZ19yZXR1cm5faWZfZmFpbChzZWxmKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L3NjcmlwdHMvdGVzdC9HT2JqZWN0L1dlYktpdERPTVRlc3RPYmouaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvR09iamVjdC9XZWJLaXRET01UZXN0
T2JqLmgJKHJldmlzaW9uIDEyMzcxMykKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Njcmlw
dHMvdGVzdC9HT2JqZWN0L1dlYktpdERPTVRlc3RPYmouaAkod29ya2luZyBjb3B5KQpAQCAtMzk4
LDYgKzM5OCwxOCBAQCBXRUJLSVRfQVBJIHZvaWQKIHdlYmtpdF9kb21fdGVzdF9vYmpfb3Zlcmxv
YWRlZF9tZXRob2QxKFdlYktpdERPTVRlc3RPYmoqIHNlbGYsIGNvbnN0IGdjaGFyKiB0eXBlKTsK
IAogLyoqCisgKiB3ZWJraXRfZG9tX3Rlc3Rfb2JqX2NsYXNzX21ldGhvZF93aXRoX2NsYW1wOgor
ICogQHNlbGY6IEEgI1dlYktpdERPTVRlc3RPYmoKKyAqIEBjb2RlOiBBICNnbG9uZworICogQGdv
ZGU6IEEgI2dkb3VibGUKKyAqCisgKiBSZXR1cm5zOgorICoKKyoqLworV0VCS0lUX0FQSSB2b2lk
Cit3ZWJraXRfZG9tX3Rlc3Rfb2JqX2NsYXNzX21ldGhvZF93aXRoX2NsYW1wKFdlYktpdERPTVRl
c3RPYmoqIHNlbGYsIGdsb25nIGNvZGUsIGdkb3VibGUgZ29kZSk7CisKKy8qKgogICogd2Via2l0
X2RvbV90ZXN0X29ial9jb252ZXJ0MToKICAqIEBzZWxmOiBBICNXZWJLaXRET01UZXN0T2JqCiAg
KiBAOiBBICNXZWJLaXRET01hCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRz
L3Rlc3QvSlMvSlNUZXN0T2JqLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0T2JqLmNwcAkocmV2aXNpb24gMTIzNzEzKQorKysg
U291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE9iai5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTMwNCw2ICszMDQsNyBAQCBzdGF0aWMgY29uc3QgSGFzaFRhYmxlVmFs
dWUgSlNUZXN0T2JqUHJvCiAgICAgeyAiY29uZGl0aW9uYWxNZXRob2QzIiwgRG9udERlbGV0ZSB8
IEpTQzo6RnVuY3Rpb24sIChpbnRwdHJfdClzdGF0aWNfY2FzdDxOYXRpdmVGdW5jdGlvbj4oanNU
ZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25Db25kaXRpb25hbE1ldGhvZDMpLCAoaW50cHRyX3QpMCwg
Tm9JbnRyaW5zaWMgfSwKICNlbmRpZgogICAgIHsgIm92ZXJsb2FkZWRNZXRob2QiLCBEb250RGVs
ZXRlIHwgSlNDOjpGdW5jdGlvbiwgKGludHB0cl90KXN0YXRpY19jYXN0PE5hdGl2ZUZ1bmN0aW9u
Pihqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk92ZXJsb2FkZWRNZXRob2QpLCAoaW50cHRyX3Qp
MiwgTm9JbnRyaW5zaWMgfSwKKyAgICB7ICJjbGFzc01ldGhvZFdpdGhDbGFtcCIsIERvbnREZWxl
dGUgfCBKU0M6OkZ1bmN0aW9uLCAoaW50cHRyX3Qpc3RhdGljX2Nhc3Q8TmF0aXZlRnVuY3Rpb24+
KGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uQ2xhc3NNZXRob2RXaXRoQ2xhbXApLCAoaW50cHRy
X3QpMiwgTm9JbnRyaW5zaWMgfSwKICAgICB7ICJtZXRob2RXaXRoVW5zaWduZWRMb25nU2VxdWVu
Y2UiLCBEb250RGVsZXRlIHwgSlNDOjpGdW5jdGlvbiwgKGludHB0cl90KXN0YXRpY19jYXN0PE5h
dGl2ZUZ1bmN0aW9uPihqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk1ldGhvZFdpdGhVbnNpZ25l
ZExvbmdTZXF1ZW5jZSksIChpbnRwdHJfdCkxLCBOb0ludHJpbnNpYyB9LAogICAgIHsgInN0cmlu
Z0FycmF5RnVuY3Rpb24iLCBEb250RGVsZXRlIHwgSlNDOjpGdW5jdGlvbiwgKGludHB0cl90KXN0
YXRpY19jYXN0PE5hdGl2ZUZ1bmN0aW9uPihqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvblN0cmlu
Z0FycmF5RnVuY3Rpb24pLCAoaW50cHRyX3QpMSwgTm9JbnRyaW5zaWMgfSwKICAgICB7ICJnZXRT
VkdEb2N1bWVudCIsIERvbnREZWxldGUgfCBKU0M6OkZ1bmN0aW9uLCAoaW50cHRyX3Qpc3RhdGlj
X2Nhc3Q8TmF0aXZlRnVuY3Rpb24+KGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uR2V0U1ZHRG9j
dW1lbnQpLCAoaW50cHRyX3QpMCwgTm9JbnRyaW5zaWMgfSwKQEAgLTIzMzUsNiArMjMzNiw0NiBA
QCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9iakNvCiAKICNlbmRpZgogCitF
bmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uQ2xh
c3NNZXRob2RXaXRoQ2xhbXAoRXhlY1N0YXRlKiBleGVjKQoreworICAgIEpTVmFsdWUgdGhpc1Zh
bHVlID0gZXhlYy0+aG9zdFRoaXNWYWx1ZSgpOworICAgIGlmICghdGhpc1ZhbHVlLmluaGVyaXRz
KCZKU1Rlc3RPYmo6OnNfaW5mbykpCisgICAgICAgIHJldHVybiB0aHJvd1ZNVHlwZUVycm9yKGV4
ZWMpOworICAgIEpTVGVzdE9iaiogY2FzdGVkVGhpcyA9IGpzQ2FzdDxKU1Rlc3RPYmoqPihhc09i
amVjdCh0aGlzVmFsdWUpKTsKKyAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKGNhc3RlZFRo
aXMsICZKU1Rlc3RPYmo6OnNfaW5mbyk7CisgICAgVGVzdE9iaiogaW1wbCA9IHN0YXRpY19jYXN0
PFRlc3RPYmoqPihjYXN0ZWRUaGlzLT5pbXBsKCkpOworICAgIGlmIChleGVjLT5hcmd1bWVudENv
dW50KCkgPCAyKQorICAgICAgICByZXR1cm4gdGhyb3dWTUVycm9yKGV4ZWMsIGNyZWF0ZU5vdEVu
b3VnaEFyZ3VtZW50c0Vycm9yKGV4ZWMpKTsKKyAgICBKU1ZhbHVlIGNvZGVWYWx1ZSA9IGV4ZWMt
PmFyZ3VtZW50KDApOworICAgIGxvbmcgY29kZSA9IGNvZGVWYWx1ZS50b0ludDMyKGV4ZWMpOwor
ICAgIGRvdWJsZSBtYXhWYWx1ZSA9IHN0YXRpY19jYXN0PGRvdWJsZT4oc3RkOjpudW1lcmljX2xp
bWl0czx1aW50MTZfdD46Om1heCgpKTsKKyAgICBkb3VibGUgbWluVmFsdWUgPSBzdGF0aWNfY2Fz
dDxkb3VibGU+KHN0ZDo6bnVtZXJpY19saW1pdHM8dWludDE2X3Q+OjptaW4oKSk7CisKKyAgICBp
ZiAoaXNuYW4oY29kZSkpCisgICAgICAgIGNvZGUgPSAwLjA7CisgICAgZWxzZQorICAgICAgICBj
b2RlID0gY2xhbXBUbyhjb2RlLCBtaW5WYWx1ZSwgbWF4VmFsdWUpOworCisgICAgaWYgKGV4ZWMt
PmhhZEV4Y2VwdGlvbigpKQorICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZp
bmVkKCkpOworCisgICAgSlNWYWx1ZSBnb2RlVmFsdWUgPSBleGVjLT5hcmd1bWVudCgxKTsKKyAg
ICBkb3VibGUgZ29kZSA9IGdvZGVWYWx1ZS50b051bWJlcihleGVjKTsKKyAgICBkb3VibGUgbWF4
VmFsdWUgPSBzdGF0aWNfY2FzdDxkb3VibGU+KHN0ZDo6bnVtZXJpY19saW1pdHM8dWludDE2X3Q+
OjptYXgoKSk7CisgICAgZG91YmxlIG1pblZhbHVlID0gc3RhdGljX2Nhc3Q8ZG91YmxlPihzdGQ6
Om51bWVyaWNfbGltaXRzPHVpbnQxNl90Pjo6bWluKCkpOworCisgICAgaWYgKGlzbmFuKGdvZGUp
KQorICAgICAgICBnb2RlID0gMC4wOworICAgIGVsc2UKKyAgICAgICAgZ29kZSA9IGNsYW1wVG8o
Z29kZSwgbWluVmFsdWUsIG1heFZhbHVlKTsKKworICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24o
KSkKKyAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKKworICAg
IGltcGwtPmNsYXNzTWV0aG9kV2l0aENsYW1wKGNvZGUsIGdvZGUpOworICAgIHJldHVybiBKU1Zh
bHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7Cit9CisKIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NU
X0NBTEwganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25NZXRob2RXaXRoVW5zaWduZWRMb25nU2Vx
dWVuY2UoRXhlY1N0YXRlKiBleGVjKQogewogICAgIEpTVmFsdWUgdGhpc1ZhbHVlID0gZXhlYy0+
aG9zdFRoaXNWYWx1ZSgpOwpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90
ZXN0L0pTL0pTVGVzdE9iai5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RPYmouaAkocmV2aXNpb24gMTIzNzEzKQorKysgU291cmNl
L1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE9iai5oCSh3b3JraW5nIGNv
cHkpCkBAIC0yMDMsNiArMjAzLDcgQEAgSlNDOjpFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxM
IGpzVGVzdAogI2lmIEVOQUJMRShDb25kaXRpb24xKQogSlNDOjpFbmNvZGVkSlNWYWx1ZSBKU0Nf
SE9TVF9DQUxMIGpzVGVzdE9iakNvbnN0cnVjdG9yRnVuY3Rpb25PdmVybG9hZGVkTWV0aG9kMShK
U0M6OkV4ZWNTdGF0ZSopOwogI2VuZGlmCitKU0M6OkVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NB
TEwganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25DbGFzc01ldGhvZFdpdGhDbGFtcChKU0M6OkV4
ZWNTdGF0ZSopOwogSlNDOjpFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9ialBy
b3RvdHlwZUZ1bmN0aW9uTWV0aG9kV2l0aFVuc2lnbmVkTG9uZ1NlcXVlbmNlKEpTQzo6RXhlY1N0
YXRlKik7CiBKU0M6OkVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2JqUHJvdG90
eXBlRnVuY3Rpb25TdHJpbmdBcnJheUZ1bmN0aW9uKEpTQzo6RXhlY1N0YXRlKik7CiBKU0M6OkVu
Y29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25HZXRT
VkdEb2N1bWVudChKU0M6OkV4ZWNTdGF0ZSopOwpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGlu
Z3Mvc2NyaXB0cy90ZXN0L09iakMvRE9NVGVzdE9iai5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9PYmpDL0RPTVRlc3RPYmouaAkocmV2aXNpb24g
MTIzNzEzKQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L09iakMvRE9N
VGVzdE9iai5oCSh3b3JraW5nIGNvcHkpCkBAIC0yMTcsNiArMjE3LDcgQEAgZW51bSB7CiAjaWYg
RU5BQkxFKENvbmRpdGlvbjEpCiAtICh2b2lkKW92ZXJsb2FkZWRNZXRob2QxOihOU1N0cmluZyAq
KXR5cGU7CiAjZW5kaWYKKy0gKHZvaWQpY2xhc3NNZXRob2RXaXRoQ2xhbXA6KGludCljb2RlIGdv
ZGU6KGRvdWJsZSlnb2RlOwogLSAoRE9NU1ZHRG9jdW1lbnQgKilnZXRTVkdEb2N1bWVudDsKIC0g
KHZvaWQpY29udmVydDE6KERPTWEgKik7CiAtICh2b2lkKWNvbnZlcnQyOihET01iICopOwpJbmRl
eDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L09iakMvRE9NVGVzdE9iai5t
bQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvT2Jq
Qy9ET01UZXN0T2JqLm1tCShyZXZpc2lvbiAxMjM3MTMpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9zY3JpcHRzL3Rlc3QvT2JqQy9ET01UZXN0T2JqLm1tCSh3b3JraW5nIGNvcHkpCkBAIC05
ODIsNiArOTgyLDEyIEBAIC0gKHZvaWQpb3ZlcmxvYWRlZE1ldGhvZDE6KE5TU3RyaW5nICopdHkK
IAogI2VuZGlmCiAKKy0gKHZvaWQpY2xhc3NNZXRob2RXaXRoQ2xhbXA6KGludCljb2RlIGdvZGU6
KGRvdWJsZSlnb2RlCit7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRl
OworICAgIElNUEwtPmNsYXNzTWV0aG9kV2l0aENsYW1wKGNvZGUsIGdvZGUpOworfQorCiAtIChE
T01TVkdEb2N1bWVudCAqKWdldFNWR0RvY3VtZW50CiB7CiAgICAgV2ViQ29yZTo6SlNNYWluVGhy
ZWFkTnVsbFN0YXRlIHN0YXRlOwpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0
cy90ZXN0L1Y4L1Y4VGVzdE9iai5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3Mvc2NyaXB0cy90ZXN0L1Y4L1Y4VGVzdE9iai5jcHAJKHJldmlzaW9uIDEyMzcxMykKKysr
IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9WOC9WOFRlc3RPYmouY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0xNzIxLDYgKzE3MjEsMzggQEAgc3RhdGljIHY4OjpIYW5kbGU8djg6
OlZhbHVlPiBvdmVybG9hZGVkTQogCiAjZW5kaWYgLy8gRU5BQkxFKENvbmRpdGlvbjEpCiAKK3N0
YXRpYyB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gY2xhc3NNZXRob2RXaXRoQ2xhbXBDYWxsYmFjayhj
b25zdCB2ODo6QXJndW1lbnRzJiBhcmdzKQoreworICAgIElOQ19TVEFUUygiRE9NLlRlc3RPYmou
Y2xhc3NNZXRob2RXaXRoQ2xhbXAiKTsKKyAgICBpZiAoYXJncy5MZW5ndGgoKSA8IDIpCisgICAg
ICAgIHJldHVybiBWOFByb3h5Ojp0aHJvd05vdEVub3VnaEFyZ3VtZW50c0Vycm9yKGFyZ3MuR2V0
SXNvbGF0ZSgpKTsKKyAgICBUZXN0T2JqKiBpbXAgPSBWOFRlc3RPYmo6OnRvTmF0aXZlKGFyZ3Mu
SG9sZGVyKCkpOworICAgIHY4OjpIYW5kbGU8djg6OlZhbHVlPiBjb2RlVmFsdWUgPSBhcmdzWzBd
OworICAgIGRvdWJsZSBjb2RlID0gdG9JbnQzMihjb2RlVmFsdWUpOworICAgIGRvdWJsZSBtYXhW
YWx1ZSA9IHN0YXRpY19jYXN0PGRvdWJsZT4oc3RkOjpudW1lcmljX2xpbWl0czx1aW50MTZfdD46
Om1heCgpKTsKKyAgICBkb3VibGUgbWluVmFsdWUgPSBzdGF0aWNfY2FzdDxkb3VibGU+KHN0ZDo6
bnVtZXJpY19saW1pdHM8dWludDE2X3Q+OjptaW4oKSk7CisgICAgaWYgKGlzbmFuKGNvZGUpKQor
ICAgICAgICBjb2RlID0gMC4wOworICAgIGVsc2UKKyAgICAgICAgY29kZSA9IGNsYW1wVG8oY29k
ZSwgbWluVmFsdWUsIG1heFZhbHVlKTsKKyAgICBpZiAoZWMpCisgICAgICAgIHJldHVybiB0aHJv
d0Vycm9yKGVjLCBhcmdzLkdldElzb2xhdGUoKSk7CisKKyAgICB2ODo6SGFuZGxlPHY4OjpWYWx1
ZT4gZ29kZVZhbHVlID0gYXJnc1sxXTsKKyAgICBkb3VibGUgZ29kZSA9IHN0YXRpY19jYXN0PGRv
dWJsZT4oZ29kZVZhbHVlLT5OdW1iZXJWYWx1ZSgpKTsKKyAgICBkb3VibGUgbWF4VmFsdWUgPSBz
dGF0aWNfY2FzdDxkb3VibGU+KHN0ZDo6bnVtZXJpY19saW1pdHM8dWludDE2X3Q+OjptYXgoKSk7
CisgICAgZG91YmxlIG1pblZhbHVlID0gc3RhdGljX2Nhc3Q8ZG91YmxlPihzdGQ6Om51bWVyaWNf
bGltaXRzPHVpbnQxNl90Pjo6bWluKCkpOworICAgIGlmIChpc25hbihnb2RlKSkKKyAgICAgICAg
Z29kZSA9IDAuMDsKKyAgICBlbHNlCisgICAgICAgIGdvZGUgPSBjbGFtcFRvKGdvZGUsIG1pblZh
bHVlLCBtYXhWYWx1ZSk7CisgICAgaWYgKGVjKQorICAgICAgICByZXR1cm4gdGhyb3dFcnJvcihl
YywgYXJncy5HZXRJc29sYXRlKCkpOworCisgICAgaW1wLT5jbGFzc01ldGhvZFdpdGhDbGFtcChj
b2RlLCBnb2RlKTsKKyAgICByZXR1cm4gdjg6OkhhbmRsZTx2ODo6VmFsdWU+KCk7Cit9CisKIHN0
YXRpYyB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gZW5hYmxlZEF0UnVudGltZU1ldGhvZDFDYWxsYmFj
ayhjb25zdCB2ODo6QXJndW1lbnRzJiBhcmdzKQogewogICAgIElOQ19TVEFUUygiRE9NLlRlc3RP
YmouZW5hYmxlZEF0UnVudGltZU1ldGhvZDEiKTsKQEAgLTIwNjUsNiArMjA5Nyw3IEBAIHN0YXRp
YyBjb25zdCBCYXRjaGVkQ2FsbGJhY2sgVGVzdE9iakNhbGwKICAgICB7ImNvbmRpdGlvbmFsTWV0
aG9kMyIsIFRlc3RPYmpWOEludGVybmFsOjpjb25kaXRpb25hbE1ldGhvZDNDYWxsYmFja30sCiAj
ZW5kaWYKICAgICB7Im92ZXJsb2FkZWRNZXRob2QiLCBUZXN0T2JqVjhJbnRlcm5hbDo6b3Zlcmxv
YWRlZE1ldGhvZENhbGxiYWNrfSwKKyAgICB7ImNsYXNzTWV0aG9kV2l0aENsYW1wIiwgVGVzdE9i
alY4SW50ZXJuYWw6OmNsYXNzTWV0aG9kV2l0aENsYW1wQ2FsbGJhY2t9LAogICAgIHsic3RyaW5n
QXJyYXlGdW5jdGlvbiIsIFRlc3RPYmpWOEludGVybmFsOjpzdHJpbmdBcnJheUZ1bmN0aW9uQ2Fs
bGJhY2t9LAogICAgIHsiZ2V0U1ZHRG9jdW1lbnQiLCBUZXN0T2JqVjhJbnRlcm5hbDo6Z2V0U1ZH
RG9jdW1lbnRDYWxsYmFja30sCiAgICAgeyJtdXRhYmxlUG9pbnRGdW5jdGlvbiIsIFRlc3RPYmpW
OEludGVybmFsOjptdXRhYmxlUG9pbnRGdW5jdGlvbkNhbGxiYWNrfSwK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>154975</attachid>
            <date>2012-07-27 09:34:22 -0700</date>
            <delta_ts>2012-07-28 06:36:24 -0700</delta_ts>
            <desc>Updated Patch</desc>
            <filename>clamp_003.diff</filename>
            <type>text/plain</type>
            <size>11242</size>
            <attacher name="Vineet Chaudhary (vineetc)">code.vineet</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDEyMzg1MCkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDI4IEBACisyMDEyLTA3LTI3ICBWaW5lZXQg
Q2hhdWRoYXJ5ICA8cmdmNzQ4QG1vdG9yb2xhLmNvbT4KKworICAgICAgICBbQ2xhbXBdIHN1cHBv
cnQgaW4gYmluZGluZyBnZW5lcmF0b3IKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTc3NjA1CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BT
ISkuCisKKyAgICAgICAgQ3VycmVudGx5IFtDbGFtcF0gZXh0ZW5kZWQgYXR0cmlidXRlIGluIElE
TCBmaWxlcy4KKyAgICAgICAgU3BlYzogaHR0cDovL2Rldi53My5vcmcvMjAwNi93ZWJhcGkvV2Vi
SURMLyNDbGFtcAorCisgICAgICAgIFRlc3RzOiBUZXN0T2JqLmlkbAorCisgICAgICAgICogYmlu
ZGluZ3Mvc2NyaXB0cy9Db2RlR2VuZXJhdG9ySlMucG06IFN1cHBvcnQgW0NsYW1wXSBmb3IgSlNC
aW5kaW5ncy4KKyAgICAgICAgKEdlbmVyYXRlUGFyYW1ldGVyc0NoZWNrKToKKyAgICAgICAgKiBi
aW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0b3JWOC5wbTogU3VwcG9ydCBbQ2xhbXBdIGZvciBW
OEJpbmRpbmdzLgorICAgICAgICAoR2VuZXJhdGVQYXJhbWV0ZXJzQ2hlY2spOgorICAgICAgICAq
IGJpbmRpbmdzL3NjcmlwdHMvSURMQXR0cmlidXRlcy50eHQ6IEFkZGVkIFtDbGFtcF0gdG8gYXR0
cmlidXRlcyBsaXN0LgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RP
YmouY3BwOgorICAgICAgICAoV2ViQ29yZTo6anNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25DbGFz
c01ldGhvZFdpdGhDbGFtcCk6CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pT
VGVzdE9iai5oOgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9UZXN0T2JqLmlkbDog
VGVzdC4KKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvVjgvVjhUZXN0T2JqLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OlRlc3RPYmpWOEludGVybmFsOjpjbGFzc01ldGhvZFdpdGhDbGFt
cENhbGxiYWNrKToKKyAgICAgICAgKFRlc3RPYmpWOEludGVybmFsKToKKwogMjAxMi0wNy0yNyAg
Vml2ZWsgR2FsYXRhZ2UgIDx2aXZla2dhbGF0YWdlQGdtYWlsLmNvbT4KIAogICAgICAgICBQYWdl
IG9iamVjdCBzaG91bGQgYXNjZXJ0YWluIEVkaXRvckNsaWVudCB0byBiZSBub24tbnVsbApJbmRl
eDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy9Db2RlR2VuZXJhdG9ySlMucG0KPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy9Db2RlR2VuZXJhdG9y
SlMucG0JKHJldmlzaW9uIDEyMzcxMykKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Njcmlw
dHMvQ29kZUdlbmVyYXRvckpTLnBtCSh3b3JraW5nIGNvcHkpCkBAIC0yNjA3LDYgKzI2MDcsMTYg
QEAgc3ViIEdlbmVyYXRlUGFyYW1ldGVyc0NoZWNrCiAgICAgICAgICAgICAgICAgcHVzaChAJG91
dHB1dEFycmF5LCAiICAgIH1cbiIpOwogICAgICAgICAgICAgICAgIHB1c2goQCRvdXRwdXRBcnJh
eSwgIiAgICBSZWZQdHI8JGFyZ1R5cGU+ICRuYW1lID0gJHtjYWxsYmFja0NsYXNzTmFtZX06OmNy
ZWF0ZShhc09iamVjdChleGVjLT5hcmd1bWVudCgkYXJnc0luZGV4KSksIGNhc3RlZFRoaXMtPmds
b2JhbE9iamVjdCgpKTtcbiIpOwogICAgICAgICAgICAgfQorICAgICAgICB9IGVsc2lmICgkcGFy
YW1ldGVyLT5leHRlbmRlZEF0dHJpYnV0ZXMtPnsiQ2xhbXAifSkgeworICAgICAgICAgICAgICAg
IG15ICRuYXRpdmVWYWx1ZSA9ICIke25hbWV9TmF0aXZlVmFsdWUiOworICAgICAgICAgICAgICAg
IHB1c2goQCRvdXRwdXRBcnJheSwgIiAgICAkYXJnVHlwZSAkbmFtZSA9IDA7XG4iKTsKKyAgICAg
ICAgICAgICAgICBwdXNoKEAkb3V0cHV0QXJyYXksICIgICAgZG91YmxlICRuYXRpdmVWYWx1ZSA9
IGV4ZWMtPmFyZ3VtZW50KCRhcmdzSW5kZXgpLnRvTnVtYmVyKGV4ZWMpO1xuIik7CisgICAgICAg
ICAgICAgICAgcHVzaChAJG91dHB1dEFycmF5LCAiICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24o
KSlcbiIpOworICAgICAgICAgICAgICAgIHB1c2goQCRvdXRwdXRBcnJheSwgIiAgICAgICAgcmV0
dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTtcblxuIik7CisgICAgICAgICAgICAg
ICAgcHVzaChAJG91dHB1dEFycmF5LCAiICAgIGlmIChpc25hbigkbmF0aXZlVmFsdWUpKVxuIik7
CisgICAgICAgICAgICAgICAgcHVzaChAJG91dHB1dEFycmF5LCAiICAgICAgICAkbmFtZSA9IDAu
MDtcbiIpOworICAgICAgICAgICAgICAgIHB1c2goQCRvdXRwdXRBcnJheSwgIiAgICBlbHNlXG4i
KTsKKyAgICAgICAgICAgICAgICBwdXNoKEAkb3V0cHV0QXJyYXksICIgICAgICAgICRuYW1lID0g
Y2xhbXBUbzwkYXJnVHlwZT4oJG5hdGl2ZVZhbHVlKTtcblxuIik7CiAgICAgICAgIH0gZWxzZSB7
CiAgICAgICAgICAgICAjIElmIHRoZSAiU3RyaWN0VHlwZUNoZWNraW5nIiBleHRlbmRlZCBhdHRy
aWJ1dGUgaXMgcHJlc2VudCwgYW5kIHRoZSBhcmd1bWVudCdzIHR5cGUgaXMgYW4KICAgICAgICAg
ICAgICMgaW50ZXJmYWNlIHR5cGUsIHRoZW4gaWYgdGhlIGluY29taW5nIHZhbHVlIGRvZXMgbm90
IGltcGxlbWVudCB0aGF0IGludGVyZmFjZSwgYSBUeXBlRXJyb3IKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL3NjcmlwdHMvQ29kZUdlbmVyYXRvclY4LnBtCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvQ29kZUdlbmVyYXRvclY4LnBtCShyZXZpc2lv
biAxMjM3MTMpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0
b3JWOC5wbQkod29ya2luZyBjb3B5KQpAQCAtMTY4MCw2ICsxNjgwLDE0IEBAIHN1YiBHZW5lcmF0
ZVBhcmFtZXRlcnNDaGVjawogICAgICAgICAgICAgICAgICRwYXJhbWV0ZXJDaGVja1N0cmluZyAu
PSAiICAgICAgICByZXR1cm4gdGhyb3dFcnJvcihUWVBFX01JU01BVENIX0VSUiwgYXJncy5HZXRJ
c29sYXRlKCkpO1xuIjsKICAgICAgICAgICAgICAgICAkcGFyYW1ldGVyQ2hlY2tTdHJpbmcgLj0g
IiAgICBSZWZQdHI8IiAuICRwYXJhbWV0ZXItPnR5cGUgLiAiPiAkcGFyYW1ldGVyTmFtZSA9ICR7
Y2xhc3NOYW1lfTo6Y3JlYXRlKGFyZ3NbJHBhcmFtSW5kZXhdLCBnZXRTY3JpcHRFeGVjdXRpb25D
b250ZXh0KCkpO1xuIjsKICAgICAgICAgICAgIH0KKyAgICAgICAgfSBlbHNpZiAoJHBhcmFtZXRl
ci0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57IkNsYW1wIn0pIHsKKyAgICAgICAgICAgICAgICBteSAk
bmF0aXZlVmFsdWUgPSAiJHtwYXJhbWV0ZXJOYW1lfU5hdGl2ZVZhbHVlIjsKKyAgICAgICAgICAg
ICAgICBteSAkcGFyYW1UeXBlID0gJHBhcmFtZXRlci0+dHlwZTsKKyAgICAgICAgICAgICAgICAk
cGFyYW1ldGVyQ2hlY2tTdHJpbmcgLj0gIiAgICBFWENFUFRJT05fQkxPQ0soZG91YmxlLCAkbmF0
aXZlVmFsdWUsIGFyZ3NbJHBhcmFtSW5kZXhdLT5OdW1iZXJWYWx1ZSgpKTtcbiI7CisgICAgICAg
ICAgICAgICAgJHBhcmFtZXRlckNoZWNrU3RyaW5nIC49ICIgICAgaWYgKGlzbmFuKCRuYXRpdmVW
YWx1ZSkpXG4iOworICAgICAgICAgICAgICAgICRwYXJhbWV0ZXJDaGVja1N0cmluZyAuPSAiICAg
ICAgICAkcGFyYW1ldGVyTmFtZSA9IDAuMDtcbiI7CisgICAgICAgICAgICAgICAgJHBhcmFtZXRl
ckNoZWNrU3RyaW5nIC49ICIgICAgZWxzZVxuIjsKKyAgICAgICAgICAgICAgICAkcGFyYW1ldGVy
Q2hlY2tTdHJpbmcgLj0gIiAgICAgICAgJHBhcmFtZXRlck5hbWUgPSBjbGFtcFRvPCRwYXJhbVR5
cGU+KCRuYXRpdmVWYWx1ZSk7XG4iOwogICAgICAgICB9IGVsc2lmICgkcGFyYW1ldGVyLT50eXBl
IGVxICJTZXJpYWxpemVkU2NyaXB0VmFsdWUiKSB7CiAgICAgICAgICAgICBBZGRUb0ltcGxJbmNs
dWRlcygiU2VyaWFsaXplZFNjcmlwdFZhbHVlLmgiKTsKICAgICAgICAgICAgIG15ICR1c2VUcmFu
c2Zlckxpc3QgPSAwOwpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy9JRExB
dHRyaWJ1dGVzLnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3Jp
cHRzL0lETEF0dHJpYnV0ZXMudHh0CShyZXZpc2lvbiAxMjM3MTMpCisrKyBTb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9zY3JpcHRzL0lETEF0dHJpYnV0ZXMudHh0CSh3b3JraW5nIGNvcHkpCkBAIC0y
NSw2ICsyNSw3IEBAIENhbGxXaXRoPVNjcmlwdEV4ZWN1dGlvbkNvbnRleHR8U2NyaXB0U3QKIENh
bGxiYWNrCiBDaGVja1NlY3VyaXR5CiBDaGVja1NlY3VyaXR5Rm9yTm9kZQorQ2xhbXAKIENvbmRp
dGlvbmFsPSoKIENvbnN0cnVjdG9yCiBDb25zdHJ1Y3RvclBhcmFtZXRlcnM9KgpJbmRleDogU291
cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Rlc3RPYmouaWRsCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9UZXN0T2JqLmlkbAkocmV2
aXNpb24gMTIzNzEzKQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Rl
c3RPYmouaWRsCSh3b3JraW5nIGNvcHkpCkBAIC0xODgsNiArMTg4LDEwIEBAIG1vZHVsZSB0ZXN0
IHsKICAgICAgICAgW0NvbmRpdGlvbmFsPUNvbmRpdGlvbjFdIHN0YXRpYyB2b2lkIG92ZXJsb2Fk
ZWRNZXRob2QxKGluIGxvbmcgYXJnKTsKICAgICAgICAgW0NvbmRpdGlvbmFsPUNvbmRpdGlvbjFd
IHN0YXRpYyB2b2lkIG92ZXJsb2FkZWRNZXRob2QxKGluIERPTVN0cmluZyB0eXBlKTsKIAorI2lm
IGRlZmluZWQoVEVTVElOR19WOCkgfHwgZGVmaW5lZChURVNUSU5HX0pTKQorICAgICAgICB2b2lk
IGNsYXNzTWV0aG9kV2l0aENsYW1wKGluIFtDbGFtcF0gdW5zaWduZWQgc2hvcnQgb2JqQXJnc1No
b3J0LCBpbiBbQ2xhbXBdIHVuc2lnbmVkIGxvbmcgb2JqQXJnc0xvbmcpOworI2VuZGlmCisKICNp
ZiBkZWZpbmVkKFRFU1RJTkdfVjgpCiAgICAgICAgIC8vICdWOEVuYWJsZWRBdFJ1bnRpbWUnIG1l
dGhvZHMgYW5kIGF0dHJpYnV0ZXMuCiAgICAgICAgIFtWOEVuYWJsZWRBdFJ1bnRpbWVdIHZvaWQg
ZW5hYmxlZEF0UnVudGltZU1ldGhvZDEoaW4gbG9uZyBsb25nQXJnKTsKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RPYmouY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RPYmouY3Bw
CShyZXZpc2lvbiAxMjM3MTMpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rl
c3QvSlMvSlNUZXN0T2JqLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzA0LDYgKzMwNCw3IEBAIHN0
YXRpYyBjb25zdCBIYXNoVGFibGVWYWx1ZSBKU1Rlc3RPYmpQcm8KICAgICB7ICJjb25kaXRpb25h
bE1ldGhvZDMiLCBEb250RGVsZXRlIHwgSlNDOjpGdW5jdGlvbiwgKGludHB0cl90KXN0YXRpY19j
YXN0PE5hdGl2ZUZ1bmN0aW9uPihqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbkNvbmRpdGlvbmFs
TWV0aG9kMyksIChpbnRwdHJfdCkwLCBOb0ludHJpbnNpYyB9LAogI2VuZGlmCiAgICAgeyAib3Zl
cmxvYWRlZE1ldGhvZCIsIERvbnREZWxldGUgfCBKU0M6OkZ1bmN0aW9uLCAoaW50cHRyX3Qpc3Rh
dGljX2Nhc3Q8TmF0aXZlRnVuY3Rpb24+KGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uT3Zlcmxv
YWRlZE1ldGhvZCksIChpbnRwdHJfdCkyLCBOb0ludHJpbnNpYyB9LAorICAgIHsgImNsYXNzTWV0
aG9kV2l0aENsYW1wIiwgRG9udERlbGV0ZSB8IEpTQzo6RnVuY3Rpb24sIChpbnRwdHJfdClzdGF0
aWNfY2FzdDxOYXRpdmVGdW5jdGlvbj4oanNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25DbGFzc01l
dGhvZFdpdGhDbGFtcCksIChpbnRwdHJfdCkyLCBOb0ludHJpbnNpYyB9LAogICAgIHsgIm1ldGhv
ZFdpdGhVbnNpZ25lZExvbmdTZXF1ZW5jZSIsIERvbnREZWxldGUgfCBKU0M6OkZ1bmN0aW9uLCAo
aW50cHRyX3Qpc3RhdGljX2Nhc3Q8TmF0aXZlRnVuY3Rpb24+KGpzVGVzdE9ialByb3RvdHlwZUZ1
bmN0aW9uTWV0aG9kV2l0aFVuc2lnbmVkTG9uZ1NlcXVlbmNlKSwgKGludHB0cl90KTEsIE5vSW50
cmluc2ljIH0sCiAgICAgeyAic3RyaW5nQXJyYXlGdW5jdGlvbiIsIERvbnREZWxldGUgfCBKU0M6
OkZ1bmN0aW9uLCAoaW50cHRyX3Qpc3RhdGljX2Nhc3Q8TmF0aXZlRnVuY3Rpb24+KGpzVGVzdE9i
alByb3RvdHlwZUZ1bmN0aW9uU3RyaW5nQXJyYXlGdW5jdGlvbiksIChpbnRwdHJfdCkxLCBOb0lu
dHJpbnNpYyB9LAogICAgIHsgImdldFNWR0RvY3VtZW50IiwgRG9udERlbGV0ZSB8IEpTQzo6RnVu
Y3Rpb24sIChpbnRwdHJfdClzdGF0aWNfY2FzdDxOYXRpdmVGdW5jdGlvbj4oanNUZXN0T2JqUHJv
dG90eXBlRnVuY3Rpb25HZXRTVkdEb2N1bWVudCksIChpbnRwdHJfdCkwLCBOb0ludHJpbnNpYyB9
LApAQCAtMjMzNSw2ICsyMzM2LDQwIEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNU
ZXN0T2JqQ28KIAogI2VuZGlmCiAKK0VuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0
T2JqUHJvdG90eXBlRnVuY3Rpb25DbGFzc01ldGhvZFdpdGhDbGFtcChFeGVjU3RhdGUqIGV4ZWMp
Cit7CisgICAgSlNWYWx1ZSB0aGlzVmFsdWUgPSBleGVjLT5ob3N0VGhpc1ZhbHVlKCk7CisgICAg
aWYgKCF0aGlzVmFsdWUuaW5oZXJpdHMoJkpTVGVzdE9iajo6c19pbmZvKSkKKyAgICAgICAgcmV0
dXJuIHRocm93Vk1UeXBlRXJyb3IoZXhlYyk7CisgICAgSlNUZXN0T2JqKiBjYXN0ZWRUaGlzID0g
anNDYXN0PEpTVGVzdE9iaio+KGFzT2JqZWN0KHRoaXNWYWx1ZSkpOworICAgIEFTU0VSVF9HQ19P
QkpFQ1RfSU5IRVJJVFMoY2FzdGVkVGhpcywgJkpTVGVzdE9iajo6c19pbmZvKTsKKyAgICBUZXN0
T2JqKiBpbXBsID0gc3RhdGljX2Nhc3Q8VGVzdE9iaio+KGNhc3RlZFRoaXMtPmltcGwoKSk7Cisg
ICAgaWYgKGV4ZWMtPmFyZ3VtZW50Q291bnQoKSA8IDIpCisgICAgICAgIHJldHVybiB0aHJvd1ZN
RXJyb3IoZXhlYywgY3JlYXRlTm90RW5vdWdoQXJndW1lbnRzRXJyb3IoZXhlYykpOworICAgIHVu
c2lnbmVkIHNob3J0IG9iakFyZ3NTaG9ydCA9IDA7CisgICAgZG91YmxlIG9iakFyZ3NTaG9ydE5h
dGl2ZVZhbHVlID0gZXhlYy0+YXJndW1lbnQoMCkudG9OdW1iZXIoZXhlYyk7CisgICAgaWYgKGV4
ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5k
ZWZpbmVkKCkpOworCisgICAgaWYgKGlzbmFuKG9iakFyZ3NTaG9ydE5hdGl2ZVZhbHVlKSkKKyAg
ICAgICAgb2JqQXJnc1Nob3J0ID0gMC4wOworICAgIGVsc2UKKyAgICAgICAgb2JqQXJnc1Nob3J0
ID0gY2xhbXBUbzx1bnNpZ25lZCBzaG9ydD4ob2JqQXJnc1Nob3J0TmF0aXZlVmFsdWUpOworCisg
ICAgdW5zaWduZWQgbG9uZyBvYmpBcmdzTG9uZyA9IDA7CisgICAgZG91YmxlIG9iakFyZ3NMb25n
TmF0aXZlVmFsdWUgPSBleGVjLT5hcmd1bWVudCgxKS50b051bWJlcihleGVjKTsKKyAgICBpZiAo
ZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNV
bmRlZmluZWQoKSk7CisKKyAgICBpZiAoaXNuYW4ob2JqQXJnc0xvbmdOYXRpdmVWYWx1ZSkpCisg
ICAgICAgIG9iakFyZ3NMb25nID0gMC4wOworICAgIGVsc2UKKyAgICAgICAgb2JqQXJnc0xvbmcg
PSBjbGFtcFRvPHVuc2lnbmVkIGxvbmc+KG9iakFyZ3NMb25nTmF0aXZlVmFsdWUpOworCisgICAg
aW1wbC0+Y2xhc3NNZXRob2RXaXRoQ2xhbXAob2JqQXJnc1Nob3J0LCBvYmpBcmdzTG9uZyk7Cisg
ICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKK30KKwogRW5jb2RlZEpT
VmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk1ldGhvZFdpdGhV
bnNpZ25lZExvbmdTZXF1ZW5jZShFeGVjU3RhdGUqIGV4ZWMpCiB7CiAgICAgSlNWYWx1ZSB0aGlz
VmFsdWUgPSBleGVjLT5ob3N0VGhpc1ZhbHVlKCk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0T2JqLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE9iai5oCShyZXZpc2lvbiAxMjM3
MTMpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0T2Jq
LmgJKHdvcmtpbmcgY29weSkKQEAgLTIwMyw2ICsyMDMsNyBAQCBKU0M6OkVuY29kZWRKU1ZhbHVl
IEpTQ19IT1NUX0NBTEwganNUZXN0CiAjaWYgRU5BQkxFKENvbmRpdGlvbjEpCiBKU0M6OkVuY29k
ZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2JqQ29uc3RydWN0b3JGdW5jdGlvbk92ZXJs
b2FkZWRNZXRob2QxKEpTQzo6RXhlY1N0YXRlKik7CiAjZW5kaWYKK0pTQzo6RW5jb2RlZEpTVmFs
dWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbkNsYXNzTWV0aG9kV2l0
aENsYW1wKEpTQzo6RXhlY1N0YXRlKik7CiBKU0M6OkVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NB
TEwganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25NZXRob2RXaXRoVW5zaWduZWRMb25nU2VxdWVu
Y2UoSlNDOjpFeGVjU3RhdGUqKTsKIEpTQzo6RW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBq
c1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvblN0cmluZ0FycmF5RnVuY3Rpb24oSlNDOjpFeGVjU3Rh
dGUqKTsKIEpTQzo6RW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcm90b3R5
cGVGdW5jdGlvbkdldFNWR0RvY3VtZW50KEpTQzo6RXhlY1N0YXRlKik7CkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvVjgvVjhUZXN0T2JqLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvVjgvVjhUZXN0T2JqLmNw
cAkocmV2aXNpb24gMTIzNzEzKQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90
ZXN0L1Y4L1Y4VGVzdE9iai5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE3MjEsNiArMTcyMSwyNiBA
QCBzdGF0aWMgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IG92ZXJsb2FkZWRNCiAKICNlbmRpZiAvLyBF
TkFCTEUoQ29uZGl0aW9uMSkKIAorc3RhdGljIHY4OjpIYW5kbGU8djg6OlZhbHVlPiBjbGFzc01l
dGhvZFdpdGhDbGFtcENhbGxiYWNrKGNvbnN0IHY4OjpBcmd1bWVudHMmIGFyZ3MpCit7CisgICAg
SU5DX1NUQVRTKCJET00uVGVzdE9iai5jbGFzc01ldGhvZFdpdGhDbGFtcCIpOworICAgIGlmIChh
cmdzLkxlbmd0aCgpIDwgMikKKyAgICAgICAgcmV0dXJuIFY4UHJveHk6OnRocm93Tm90RW5vdWdo
QXJndW1lbnRzRXJyb3IoYXJncy5HZXRJc29sYXRlKCkpOworICAgIFRlc3RPYmoqIGltcCA9IFY4
VGVzdE9iajo6dG9OYXRpdmUoYXJncy5Ib2xkZXIoKSk7CisgICAgRVhDRVBUSU9OX0JMT0NLKGRv
dWJsZSwgb2JqQXJnc1Nob3J0TmF0aXZlVmFsdWUsIGFyZ3NbMF0tPk51bWJlclZhbHVlKCkpOwor
ICAgIGlmIChpc25hbihvYmpBcmdzU2hvcnROYXRpdmVWYWx1ZSkpCisgICAgICAgIG9iakFyZ3NT
aG9ydCA9IDAuMDsKKyAgICBlbHNlCisgICAgICAgIG9iakFyZ3NTaG9ydCA9IGNsYW1wVG88dW5z
aWduZWQgc2hvcnQ+KG9iakFyZ3NTaG9ydE5hdGl2ZVZhbHVlKTsKKyAgICBFWENFUFRJT05fQkxP
Q0soZG91YmxlLCBvYmpBcmdzTG9uZ05hdGl2ZVZhbHVlLCBhcmdzWzFdLT5OdW1iZXJWYWx1ZSgp
KTsKKyAgICBpZiAoaXNuYW4ob2JqQXJnc0xvbmdOYXRpdmVWYWx1ZSkpCisgICAgICAgIG9iakFy
Z3NMb25nID0gMC4wOworICAgIGVsc2UKKyAgICAgICAgb2JqQXJnc0xvbmcgPSBjbGFtcFRvPHVu
c2lnbmVkIGxvbmc+KG9iakFyZ3NMb25nTmF0aXZlVmFsdWUpOworICAgIGltcC0+Y2xhc3NNZXRo
b2RXaXRoQ2xhbXAob2JqQXJnc1Nob3J0LCBvYmpBcmdzTG9uZyk7CisgICAgcmV0dXJuIHY4OjpI
YW5kbGU8djg6OlZhbHVlPigpOworfQorCiBzdGF0aWMgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IGVu
YWJsZWRBdFJ1bnRpbWVNZXRob2QxQ2FsbGJhY2soY29uc3Qgdjg6OkFyZ3VtZW50cyYgYXJncykK
IHsKICAgICBJTkNfU1RBVFMoIkRPTS5UZXN0T2JqLmVuYWJsZWRBdFJ1bnRpbWVNZXRob2QxIik7
CkBAIC0yMDY1LDYgKzIwODUsNyBAQCBzdGF0aWMgY29uc3QgQmF0Y2hlZENhbGxiYWNrIFRlc3RP
YmpDYWxsCiAgICAgeyJjb25kaXRpb25hbE1ldGhvZDMiLCBUZXN0T2JqVjhJbnRlcm5hbDo6Y29u
ZGl0aW9uYWxNZXRob2QzQ2FsbGJhY2t9LAogI2VuZGlmCiAgICAgeyJvdmVybG9hZGVkTWV0aG9k
IiwgVGVzdE9ialY4SW50ZXJuYWw6Om92ZXJsb2FkZWRNZXRob2RDYWxsYmFja30sCisgICAgeyJj
bGFzc01ldGhvZFdpdGhDbGFtcCIsIFRlc3RPYmpWOEludGVybmFsOjpjbGFzc01ldGhvZFdpdGhD
bGFtcENhbGxiYWNrfSwKICAgICB7InN0cmluZ0FycmF5RnVuY3Rpb24iLCBUZXN0T2JqVjhJbnRl
cm5hbDo6c3RyaW5nQXJyYXlGdW5jdGlvbkNhbGxiYWNrfSwKICAgICB7ImdldFNWR0RvY3VtZW50
IiwgVGVzdE9ialY4SW50ZXJuYWw6OmdldFNWR0RvY3VtZW50Q2FsbGJhY2t9LAogICAgIHsibXV0
YWJsZVBvaW50RnVuY3Rpb24iLCBUZXN0T2JqVjhJbnRlcm5hbDo6bXV0YWJsZVBvaW50RnVuY3Rp
b25DYWxsYmFja30sCg==
</data>
<flag name="review"
          id="164346"
          type_id="1"
          status="-"
          setter="haraken"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>155127</attachid>
            <date>2012-07-28 06:36:24 -0700</date>
            <delta_ts>2012-07-28 08:08:23 -0700</delta_ts>
            <desc>patch</desc>
            <filename>clamp_004.diff</filename>
            <type>text/plain</type>
            <size>13552</size>
            <attacher name="Vineet Chaudhary (vineetc)">code.vineet</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDEyMzk1OSkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDM0IEBACisyMDEyLTA3LTI4ICBWaW5lZXQg
Q2hhdWRoYXJ5ICA8cmdmNzQ4QG1vdG9yb2xhLmNvbT4KKworICAgICAgICBbQ2xhbXBdIHN1cHBv
cnQgaW4gYmluZGluZyBnZW5lcmF0b3IuCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD03NzYwNQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09Q
UyEpLgorCisgICAgICAgIEN1cnJlbnRseSBbQ2xhbXBdIGV4dGVuZGVkIGF0dHJpYnV0ZSBpbiBJ
REwgZmlsZXMuCisgICAgICAgIFNwZWM6IGh0dHA6Ly93d3cudzMub3JnL1RSLzIwMTIvQ1ItV2Vi
SURMLTIwMTIwNDE5LyNDbGFtcAorCisgICAgICAgIFRlc3RzOiBUZXN0T2JqLmlkbAorCisgICAg
ICAgICogYmluZGluZ3Mvc2NyaXB0cy9Db2RlR2VuZXJhdG9yQ1BQLnBtOgorICAgICAgICAoU2tp
cEZ1bmN0aW9uKTogU2tpcHMgbWV0aG9kcyB3aXRoIFtDbGFtcF0gcGFyYW1ldGVycy4KKyAgICAg
ICAgKiBiaW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0b3JHT2JqZWN0LnBtOgorICAgICAgICAo
U2tpcEZ1bmN0aW9uKTogU2tpcHMgbWV0aG9kcyB3aXRoIFtDbGFtcF0gcGFyYW1ldGVycy4KKyAg
ICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0b3JKUy5wbToKKyAgICAgICAgKEdl
bmVyYXRlUGFyYW1ldGVyc0NoZWNrKTogU3VwcG9ydCBbQ2xhbXBdIGZvciBKU0JpbmRpbmdzLgor
ICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvQ29kZUdlbmVyYXRvck9iakMucG06CisgICAgICAg
IChTa2lwRnVuY3Rpb24pOiBTa2lwcyBtZXRob2RzIHdpdGggW0NsYW1wXSBwYXJhbWV0ZXJzLgor
ICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvQ29kZUdlbmVyYXRvclY4LnBtOgorICAgICAgICAo
R2VuZXJhdGVQYXJhbWV0ZXJzQ2hlY2spOiBTdXBwb3J0IFtDbGFtcF0gZm9yIEpTQmluZGluZ3Mu
CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy9JRExBdHRyaWJ1dGVzLnR4dDogQWRkZWQgW0Ns
YW1wXSB0byBhdHRyaWJ1dGVzIGxpc3QuCisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0
L0pTL0pTVGVzdE9iai5jcHA6IFRlc3QuCisgICAgICAgIChXZWJDb3JlOjpqc1Rlc3RPYmpQcm90
b3R5cGVGdW5jdGlvbkNsYXNzTWV0aG9kV2l0aENsYW1wKToKKyAgICAgICAgKiBiaW5kaW5ncy9z
Y3JpcHRzL3Rlc3QvSlMvSlNUZXN0T2JqLmg6CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90
ZXN0L1Rlc3RPYmouaWRsOgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9WOC9WOFRl
c3RPYmouY3BwOgorICAgICAgICAoV2ViQ29yZTo6VGVzdE9ialY4SW50ZXJuYWw6OmNsYXNzTWV0
aG9kV2l0aENsYW1wQ2FsbGJhY2spOgorICAgICAgICAoVGVzdE9ialY4SW50ZXJuYWwpOgorCiAy
MDEyLTA3LTI3ICBTaGVyaWZmIEJvdCAgPHdlYmtpdC5yZXZpZXcuYm90QGdtYWlsLmNvbT4KIAog
ICAgICAgICBVbnJldmlld2VkLCByb2xsaW5nIG91dCByMTIzOTA4LgpJbmRleDogU291cmNlL1dl
YkNvcmUvYmluZGluZ3Mvc2NyaXB0cy9Db2RlR2VuZXJhdG9yQ1BQLnBtCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvQ29kZUdlbmVyYXRvckNQUC5wbQkocmV2
aXNpb24gMTIzOTU4KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy9Db2RlR2Vu
ZXJhdG9yQ1BQLnBtCSh3b3JraW5nIGNvcHkpCkBAIC0yMDYsNiArMjA2LDcgQEAgc3ViIFNraXBG
dW5jdGlvbgogCiAgICAgZm9yZWFjaCBteSAkcGFyYW0gKEB7JGZ1bmN0aW9uLT5wYXJhbWV0ZXJz
fSkgewogICAgICAgICByZXR1cm4gMSBpZiAkY29kZUdlbmVyYXRvci0+R2V0U2VxdWVuY2VUeXBl
KCRwYXJhbS0+dHlwZSk7CisgICAgICAgIHJldHVybiAxIGlmICRwYXJhbS0+ZXh0ZW5kZWRBdHRy
aWJ1dGVzLT57IkNsYW1wIn07CiAgICAgfQogCiAgICAgIyBGSVhNRTogVGhpcyBpcyB0eXBpY2Fs
bHkgdXNlZCB0byBhZGQgc2NyaXB0IGV4ZWN1dGlvbiBzdGF0ZSBhcmd1bWVudHMgdG8gdGhlIG1l
dGhvZC4KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvQ29kZUdlbmVyYXRv
ckdPYmplY3QucG0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0
cy9Db2RlR2VuZXJhdG9yR09iamVjdC5wbQkocmV2aXNpb24gMTIzOTU4KQorKysgU291cmNlL1dl
YkNvcmUvYmluZGluZ3Mvc2NyaXB0cy9Db2RlR2VuZXJhdG9yR09iamVjdC5wbQkod29ya2luZyBj
b3B5KQpAQCAtMjQ3LDYgKzI0Nyw3IEBAIHN1YiBTa2lwRnVuY3Rpb24gewogICAgICMgY29kZSBn
ZW5lcmF0b3IgZG9lc24ndCBrbm93IGhvdyB0byBhdXRvLWdlbmVyYXRlIE1lZGlhUXVlcnlMaXN0
TGlzdGVuZXIgb3Igc2VxdWVuY2U8VD4uCiAgICAgZm9yZWFjaCBteSAkcGFyYW0gKEB7JGZ1bmN0
aW9uLT5wYXJhbWV0ZXJzfSkgewogICAgICAgICBpZiAoJHBhcmFtLT5leHRlbmRlZEF0dHJpYnV0
ZXMtPnsiQ2FsbGJhY2sifSB8fAorICAgICAgICAgICAgJHBhcmFtLT5leHRlbmRlZEF0dHJpYnV0
ZXMtPnsiQ2xhbXAifSB8fAogICAgICAgICAgICAgJHBhcmFtLT50eXBlIGVxICJNZWRpYVF1ZXJ5
TGlzdExpc3RlbmVyIiB8fAogICAgICAgICAgICAgJGNvZGVHZW5lcmF0b3ItPkdldFNlcXVlbmNl
VHlwZSgkcGFyYW0tPnR5cGUpKSB7CiAgICAgICAgICAgICByZXR1cm4gMTsKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvQ29kZUdlbmVyYXRvckpTLnBtCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvQ29kZUdlbmVyYXRvckpTLnBtCShy
ZXZpc2lvbiAxMjM5NTgpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL0NvZGVH
ZW5lcmF0b3JKUy5wbQkod29ya2luZyBjb3B5KQpAQCAtMjYwNyw2ICsyNjA3LDE2IEBAIHN1YiBH
ZW5lcmF0ZVBhcmFtZXRlcnNDaGVjawogICAgICAgICAgICAgICAgIHB1c2goQCRvdXRwdXRBcnJh
eSwgIiAgICB9XG4iKTsKICAgICAgICAgICAgICAgICBwdXNoKEAkb3V0cHV0QXJyYXksICIgICAg
UmVmUHRyPCRhcmdUeXBlPiAkbmFtZSA9ICR7Y2FsbGJhY2tDbGFzc05hbWV9OjpjcmVhdGUoYXNP
YmplY3QoZXhlYy0+YXJndW1lbnQoJGFyZ3NJbmRleCkpLCBjYXN0ZWRUaGlzLT5nbG9iYWxPYmpl
Y3QoKSk7XG4iKTsKICAgICAgICAgICAgIH0KKyAgICAgICAgfSBlbHNpZiAoJHBhcmFtZXRlci0+
ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57IkNsYW1wIn0pIHsKKyAgICAgICAgICAgICAgICBteSAkbmF0
aXZlVmFsdWUgPSAiJHtuYW1lfU5hdGl2ZVZhbHVlIjsKKyAgICAgICAgICAgICAgICBwdXNoKEAk
b3V0cHV0QXJyYXksICIgICAgJGFyZ1R5cGUgJG5hbWUgPSAwO1xuIik7CisgICAgICAgICAgICAg
ICAgcHVzaChAJG91dHB1dEFycmF5LCAiICAgIGRvdWJsZSAkbmF0aXZlVmFsdWUgPSBleGVjLT5h
cmd1bWVudCgkYXJnc0luZGV4KS50b051bWJlcihleGVjKTtcbiIpOworICAgICAgICAgICAgICAg
IHB1c2goQCRvdXRwdXRBcnJheSwgIiAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpXG4iKTsK
KyAgICAgICAgICAgICAgICBwdXNoKEAkb3V0cHV0QXJyYXksICIgICAgICAgIHJldHVybiBKU1Zh
bHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7XG5cbiIpOworICAgICAgICAgICAgICAgIHB1c2go
QCRvdXRwdXRBcnJheSwgIiAgICBpZiAoaXNuYW4oJG5hdGl2ZVZhbHVlKSlcbiIpOworICAgICAg
ICAgICAgICAgIHB1c2goQCRvdXRwdXRBcnJheSwgIiAgICAgICAgJG5hbWUgPSAwO1xuIik7Cisg
ICAgICAgICAgICAgICAgcHVzaChAJG91dHB1dEFycmF5LCAiICAgIGVsc2VcbiIpOworICAgICAg
ICAgICAgICAgIHB1c2goQCRvdXRwdXRBcnJheSwgIiAgICAgICAgJG5hbWUgPSBjbGFtcFRvPCRh
cmdUeXBlPigkbmF0aXZlVmFsdWUpO1xuXG4iKTsKICAgICAgICAgfSBlbHNlIHsKICAgICAgICAg
ICAgICMgSWYgdGhlICJTdHJpY3RUeXBlQ2hlY2tpbmciIGV4dGVuZGVkIGF0dHJpYnV0ZSBpcyBw
cmVzZW50LCBhbmQgdGhlIGFyZ3VtZW50J3MgdHlwZSBpcyBhbgogICAgICAgICAgICAgIyBpbnRl
cmZhY2UgdHlwZSwgdGhlbiBpZiB0aGUgaW5jb21pbmcgdmFsdWUgZG9lcyBub3QgaW1wbGVtZW50
IHRoYXQgaW50ZXJmYWNlLCBhIFR5cGVFcnJvcgpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGlu
Z3Mvc2NyaXB0cy9Db2RlR2VuZXJhdG9yT2JqQy5wbQo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0b3JPYmpDLnBtCShyZXZpc2lvbiAxMjM5
NTgpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0b3JPYmpD
LnBtCSh3b3JraW5nIGNvcHkpCkBAIC00NTcsNiArNDU3LDcgQEAgc3ViIFNraXBGdW5jdGlvbgog
ICAgIGZvcmVhY2ggbXkgJHBhcmFtIChAeyRmdW5jdGlvbi0+cGFyYW1ldGVyc30pIHsKICAgICAg
ICAgcmV0dXJuIDEgaWYgJGNvZGVHZW5lcmF0b3ItPkdldFNlcXVlbmNlVHlwZSgkcGFyYW0tPnR5
cGUpOwogICAgICAgICByZXR1cm4gMSBpZiAkY29kZUdlbmVyYXRvci0+R2V0QXJyYXlUeXBlKCRw
YXJhbS0+dHlwZSk7CisgICAgICAgIHJldHVybiAxIGlmICRwYXJhbS0+ZXh0ZW5kZWRBdHRyaWJ1
dGVzLT57IkNsYW1wIn07CiAgICAgfQogCiAgICAgcmV0dXJuIDA7CkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0b3JWOC5wbQo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0b3JWOC5wbQkocmV2aXNp
b24gMTIzOTU4KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy9Db2RlR2VuZXJh
dG9yVjgucG0JKHdvcmtpbmcgY29weSkKQEAgLTE2ODAsNiArMTY4MCwxNSBAQCBzdWIgR2VuZXJh
dGVQYXJhbWV0ZXJzQ2hlY2sKICAgICAgICAgICAgICAgICAkcGFyYW1ldGVyQ2hlY2tTdHJpbmcg
Lj0gIiAgICAgICAgcmV0dXJuIHRocm93RXJyb3IoVFlQRV9NSVNNQVRDSF9FUlIsIGFyZ3MuR2V0
SXNvbGF0ZSgpKTtcbiI7CiAgICAgICAgICAgICAgICAgJHBhcmFtZXRlckNoZWNrU3RyaW5nIC49
ICIgICAgUmVmUHRyPCIgLiAkcGFyYW1ldGVyLT50eXBlIC4gIj4gJHBhcmFtZXRlck5hbWUgPSAk
e2NsYXNzTmFtZX06OmNyZWF0ZShhcmdzWyRwYXJhbUluZGV4XSwgZ2V0U2NyaXB0RXhlY3V0aW9u
Q29udGV4dCgpKTtcbiI7CiAgICAgICAgICAgICB9CisgICAgICAgIH0gZWxzaWYgKCRwYXJhbWV0
ZXItPmV4dGVuZGVkQXR0cmlidXRlcy0+eyJDbGFtcCJ9KSB7CisgICAgICAgICAgICAgICAgbXkg
JG5hdGl2ZVZhbHVlID0gIiR7cGFyYW1ldGVyTmFtZX1OYXRpdmVWYWx1ZSI7CisgICAgICAgICAg
ICAgICAgbXkgJHBhcmFtVHlwZSA9ICRwYXJhbWV0ZXItPnR5cGU7CisgICAgICAgICAgICAgICAg
JHBhcmFtZXRlckNoZWNrU3RyaW5nIC49ICIgICAgJHBhcmFtVHlwZSAkcGFyYW1ldGVyTmFtZSA9
IDBcbiI7CisgICAgICAgICAgICAgICAgJHBhcmFtZXRlckNoZWNrU3RyaW5nIC49ICIgICAgRVhD
RVBUSU9OX0JMT0NLKGRvdWJsZSwgJG5hdGl2ZVZhbHVlLCBhcmdzWyRwYXJhbUluZGV4XS0+TnVt
YmVyVmFsdWUoKSk7XG4iOworICAgICAgICAgICAgICAgICRwYXJhbWV0ZXJDaGVja1N0cmluZyAu
PSAiICAgIGlmIChpc25hbigkbmF0aXZlVmFsdWUpKVxuIjsKKyAgICAgICAgICAgICAgICAkcGFy
YW1ldGVyQ2hlY2tTdHJpbmcgLj0gIiAgICAgICAgJHBhcmFtZXRlck5hbWUgPSAwO1xuIjsKKyAg
ICAgICAgICAgICAgICAkcGFyYW1ldGVyQ2hlY2tTdHJpbmcgLj0gIiAgICBlbHNlXG4iOworICAg
ICAgICAgICAgICAgICRwYXJhbWV0ZXJDaGVja1N0cmluZyAuPSAiICAgICAgICAkcGFyYW1ldGVy
TmFtZSA9IGNsYW1wVG88JHBhcmFtVHlwZT4oJG5hdGl2ZVZhbHVlKTtcbiI7CiAgICAgICAgIH0g
ZWxzaWYgKCRwYXJhbWV0ZXItPnR5cGUgZXEgIlNlcmlhbGl6ZWRTY3JpcHRWYWx1ZSIpIHsKICAg
ICAgICAgICAgIEFkZFRvSW1wbEluY2x1ZGVzKCJTZXJpYWxpemVkU2NyaXB0VmFsdWUuaCIpOwog
ICAgICAgICAgICAgbXkgJHVzZVRyYW5zZmVyTGlzdCA9IDA7CkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9zY3JpcHRzL0lETEF0dHJpYnV0ZXMudHh0Cj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvSURMQXR0cmlidXRlcy50eHQJKHJldmlzaW9uIDEy
Mzk1OCkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvSURMQXR0cmlidXRlcy50
eHQJKHdvcmtpbmcgY29weSkKQEAgLTI1LDYgKzI1LDcgQEAgQ2FsbFdpdGg9U2NyaXB0RXhlY3V0
aW9uQ29udGV4dHxTY3JpcHRTdAogQ2FsbGJhY2sKIENoZWNrU2VjdXJpdHkKIENoZWNrU2VjdXJp
dHlGb3JOb2RlCitDbGFtcAogQ29uZGl0aW9uYWw9KgogQ29uc3RydWN0b3IKIENvbnN0cnVjdG9y
UGFyYW1ldGVycz0qCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3Qv
VGVzdE9iai5pZGwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0
cy90ZXN0L1Rlc3RPYmouaWRsCShyZXZpc2lvbiAxMjM5NTgpCisrKyBTb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy9zY3JpcHRzL3Rlc3QvVGVzdE9iai5pZGwJKHdvcmtpbmcgY29weSkKQEAgLTE4OSw2
ICsxODksOCBAQCBtb2R1bGUgdGVzdCB7CiAgICAgICAgIFtDb25kaXRpb25hbD1Db25kaXRpb24x
XSBzdGF0aWMgdm9pZCBvdmVybG9hZGVkTWV0aG9kMShpbiBsb25nIGFyZyk7CiAgICAgICAgIFtD
b25kaXRpb25hbD1Db25kaXRpb24xXSBzdGF0aWMgdm9pZCBvdmVybG9hZGVkTWV0aG9kMShpbiBE
T01TdHJpbmcgdHlwZSk7CiAKKyAgICAgICAgdm9pZCBjbGFzc01ldGhvZFdpdGhDbGFtcChpbiBb
Q2xhbXBdIHVuc2lnbmVkIHNob3J0IG9iakFyZ3NTaG9ydCwgaW4gW0NsYW1wXSB1bnNpZ25lZCBs
b25nIG9iakFyZ3NMb25nKTsKKwogI2lmIGRlZmluZWQoVEVTVElOR19WOCkKICAgICAgICAgLy8g
J1Y4RW5hYmxlZEF0UnVudGltZScgbWV0aG9kcyBhbmQgYXR0cmlidXRlcy4KICAgICAgICAgW1Y4
RW5hYmxlZEF0UnVudGltZV0gdm9pZCBlbmFibGVkQXRSdW50aW1lTWV0aG9kMShpbiBsb25nIGxv
bmdBcmcpOwpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pT
VGVzdE9iai5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0
cy90ZXN0L0pTL0pTVGVzdE9iai5jcHAJKHJldmlzaW9uIDEyMzk1OCkKKysrIFNvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RPYmouY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0zMDUsNiArMzA1LDcgQEAgc3RhdGljIGNvbnN0IEhhc2hUYWJsZVZhbHVlIEpTVGVzdE9i
alBybwogICAgIHsgImNvbmRpdGlvbmFsTWV0aG9kMyIsIERvbnREZWxldGUgfCBKU0M6OkZ1bmN0
aW9uLCAoaW50cHRyX3Qpc3RhdGljX2Nhc3Q8TmF0aXZlRnVuY3Rpb24+KGpzVGVzdE9ialByb3Rv
dHlwZUZ1bmN0aW9uQ29uZGl0aW9uYWxNZXRob2QzKSwgKGludHB0cl90KTAsIE5vSW50cmluc2lj
IH0sCiAjZW5kaWYKICAgICB7ICJvdmVybG9hZGVkTWV0aG9kIiwgRG9udERlbGV0ZSB8IEpTQzo6
RnVuY3Rpb24sIChpbnRwdHJfdClzdGF0aWNfY2FzdDxOYXRpdmVGdW5jdGlvbj4oanNUZXN0T2Jq
UHJvdG90eXBlRnVuY3Rpb25PdmVybG9hZGVkTWV0aG9kKSwgKGludHB0cl90KTIsIE5vSW50cmlu
c2ljIH0sCisgICAgeyAiY2xhc3NNZXRob2RXaXRoQ2xhbXAiLCBEb250RGVsZXRlIHwgSlNDOjpG
dW5jdGlvbiwgKGludHB0cl90KXN0YXRpY19jYXN0PE5hdGl2ZUZ1bmN0aW9uPihqc1Rlc3RPYmpQ
cm90b3R5cGVGdW5jdGlvbkNsYXNzTWV0aG9kV2l0aENsYW1wKSwgKGludHB0cl90KTIsIE5vSW50
cmluc2ljIH0sCiAgICAgeyAibWV0aG9kV2l0aFVuc2lnbmVkTG9uZ1NlcXVlbmNlIiwgRG9udERl
bGV0ZSB8IEpTQzo6RnVuY3Rpb24sIChpbnRwdHJfdClzdGF0aWNfY2FzdDxOYXRpdmVGdW5jdGlv
bj4oanNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25NZXRob2RXaXRoVW5zaWduZWRMb25nU2VxdWVu
Y2UpLCAoaW50cHRyX3QpMSwgTm9JbnRyaW5zaWMgfSwKICAgICB7ICJzdHJpbmdBcnJheUZ1bmN0
aW9uIiwgRG9udERlbGV0ZSB8IEpTQzo6RnVuY3Rpb24sIChpbnRwdHJfdClzdGF0aWNfY2FzdDxO
YXRpdmVGdW5jdGlvbj4oanNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25TdHJpbmdBcnJheUZ1bmN0
aW9uKSwgKGludHB0cl90KTEsIE5vSW50cmluc2ljIH0sCiAgICAgeyAiZ2V0U1ZHRG9jdW1lbnQi
LCBEb250RGVsZXRlIHwgSlNDOjpGdW5jdGlvbiwgKGludHB0cl90KXN0YXRpY19jYXN0PE5hdGl2
ZUZ1bmN0aW9uPihqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbkdldFNWR0RvY3VtZW50KSwgKGlu
dHB0cl90KTAsIE5vSW50cmluc2ljIH0sCkBAIC0yMzQ1LDYgKzIzNDYsNDAgQEAgRW5jb2RlZEpT
VmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpDbwogCiAjZW5kaWYKIAorRW5jb2RlZEpTVmFs
dWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbkNsYXNzTWV0aG9kV2l0
aENsYW1wKEV4ZWNTdGF0ZSogZXhlYykKK3sKKyAgICBKU1ZhbHVlIHRoaXNWYWx1ZSA9IGV4ZWMt
Pmhvc3RUaGlzVmFsdWUoKTsKKyAgICBpZiAoIXRoaXNWYWx1ZS5pbmhlcml0cygmSlNUZXN0T2Jq
OjpzX2luZm8pKQorICAgICAgICByZXR1cm4gdGhyb3dWTVR5cGVFcnJvcihleGVjKTsKKyAgICBK
U1Rlc3RPYmoqIGNhc3RlZFRoaXMgPSBqc0Nhc3Q8SlNUZXN0T2JqKj4oYXNPYmplY3QodGhpc1Zh
bHVlKSk7CisgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyhjYXN0ZWRUaGlzLCAmSlNUZXN0
T2JqOjpzX2luZm8pOworICAgIFRlc3RPYmoqIGltcGwgPSBzdGF0aWNfY2FzdDxUZXN0T2JqKj4o
Y2FzdGVkVGhpcy0+aW1wbCgpKTsKKyAgICBpZiAoZXhlYy0+YXJndW1lbnRDb3VudCgpIDwgMikK
KyAgICAgICAgcmV0dXJuIHRocm93Vk1FcnJvcihleGVjLCBjcmVhdGVOb3RFbm91Z2hBcmd1bWVu
dHNFcnJvcihleGVjKSk7CisgICAgdW5zaWduZWQgc2hvcnQgb2JqQXJnc1Nob3J0ID0gMDsKKyAg
ICBkb3VibGUgb2JqQXJnc1Nob3J0TmF0aXZlVmFsdWUgPSBleGVjLT5hcmd1bWVudCgwKS50b051
bWJlcihleGVjKTsKKyAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgICAgIHJldHVy
biBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CisKKyAgICBpZiAoaXNuYW4ob2JqQXJn
c1Nob3J0TmF0aXZlVmFsdWUpKQorICAgICAgICBvYmpBcmdzU2hvcnQgPSAwOworICAgIGVsc2UK
KyAgICAgICAgb2JqQXJnc1Nob3J0ID0gY2xhbXBUbzx1bnNpZ25lZCBzaG9ydD4ob2JqQXJnc1No
b3J0TmF0aXZlVmFsdWUpOworCisgICAgdW5zaWduZWQgbG9uZyBvYmpBcmdzTG9uZyA9IDA7Cisg
ICAgZG91YmxlIG9iakFyZ3NMb25nTmF0aXZlVmFsdWUgPSBleGVjLT5hcmd1bWVudCgxKS50b051
bWJlcihleGVjKTsKKyAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgICAgIHJldHVy
biBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CisKKyAgICBpZiAoaXNuYW4ob2JqQXJn
c0xvbmdOYXRpdmVWYWx1ZSkpCisgICAgICAgIG9iakFyZ3NMb25nID0gMDsKKyAgICBlbHNlCisg
ICAgICAgIG9iakFyZ3NMb25nID0gY2xhbXBUbzx1bnNpZ25lZCBsb25nPihvYmpBcmdzTG9uZ05h
dGl2ZVZhbHVlKTsKKworICAgIGltcGwtPmNsYXNzTWV0aG9kV2l0aENsYW1wKG9iakFyZ3NTaG9y
dCwgb2JqQXJnc0xvbmcpOworICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQo
KSk7Cit9CisKIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2JqUHJvdG90eXBl
RnVuY3Rpb25NZXRob2RXaXRoVW5zaWduZWRMb25nU2VxdWVuY2UoRXhlY1N0YXRlKiBleGVjKQog
ewogICAgIEpTVmFsdWUgdGhpc1ZhbHVlID0gZXhlYy0+aG9zdFRoaXNWYWx1ZSgpOwpJbmRleDog
U291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE9iai5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RP
YmouaAkocmV2aXNpb24gMTIzOTU4KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0
cy90ZXN0L0pTL0pTVGVzdE9iai5oCSh3b3JraW5nIGNvcHkpCkBAIC0yMDMsNiArMjAzLDcgQEAg
SlNDOjpFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdAogI2lmIEVOQUJMRShDb25k
aXRpb24xKQogSlNDOjpFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9iakNvbnN0
cnVjdG9yRnVuY3Rpb25PdmVybG9hZGVkTWV0aG9kMShKU0M6OkV4ZWNTdGF0ZSopOwogI2VuZGlm
CitKU0M6OkVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2JqUHJvdG90eXBlRnVu
Y3Rpb25DbGFzc01ldGhvZFdpdGhDbGFtcChKU0M6OkV4ZWNTdGF0ZSopOwogSlNDOjpFbmNvZGVk
SlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uTWV0aG9kV2l0
aFVuc2lnbmVkTG9uZ1NlcXVlbmNlKEpTQzo6RXhlY1N0YXRlKik7CiBKU0M6OkVuY29kZWRKU1Zh
bHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25TdHJpbmdBcnJheUZ1
bmN0aW9uKEpTQzo6RXhlY1N0YXRlKik7CiBKU0M6OkVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NB
TEwganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25HZXRTVkdEb2N1bWVudChKU0M6OkV4ZWNTdGF0
ZSopOwpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Y4L1Y4VGVz
dE9iai5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90
ZXN0L1Y4L1Y4VGVzdE9iai5jcHAJKHJldmlzaW9uIDEyMzk1OCkKKysrIFNvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9WOC9WOFRlc3RPYmouY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0xNzIyLDYgKzE3MjIsMjggQEAgc3RhdGljIHY4OjpIYW5kbGU8djg6OlZhbHVlPiBvdmVybG9h
ZGVkTQogCiAjZW5kaWYgLy8gRU5BQkxFKENvbmRpdGlvbjEpCiAKK3N0YXRpYyB2ODo6SGFuZGxl
PHY4OjpWYWx1ZT4gY2xhc3NNZXRob2RXaXRoQ2xhbXBDYWxsYmFjayhjb25zdCB2ODo6QXJndW1l
bnRzJiBhcmdzKQoreworICAgIElOQ19TVEFUUygiRE9NLlRlc3RPYmouY2xhc3NNZXRob2RXaXRo
Q2xhbXAiKTsKKyAgICBpZiAoYXJncy5MZW5ndGgoKSA8IDIpCisgICAgICAgIHJldHVybiBWOFBy
b3h5Ojp0aHJvd05vdEVub3VnaEFyZ3VtZW50c0Vycm9yKGFyZ3MuR2V0SXNvbGF0ZSgpKTsKKyAg
ICBUZXN0T2JqKiBpbXAgPSBWOFRlc3RPYmo6OnRvTmF0aXZlKGFyZ3MuSG9sZGVyKCkpOworICAg
IHVuc2lnbmVkIHNob3J0IG9iakFyZ3NTaG9ydCA9IDAKKyAgICBFWENFUFRJT05fQkxPQ0soZG91
YmxlLCBvYmpBcmdzU2hvcnROYXRpdmVWYWx1ZSwgYXJnc1swXS0+TnVtYmVyVmFsdWUoKSk7Cisg
ICAgaWYgKGlzbmFuKG9iakFyZ3NTaG9ydE5hdGl2ZVZhbHVlKSkKKyAgICAgICAgb2JqQXJnc1No
b3J0ID0gMDsKKyAgICBlbHNlCisgICAgICAgIG9iakFyZ3NTaG9ydCA9IGNsYW1wVG88dW5zaWdu
ZWQgc2hvcnQ+KG9iakFyZ3NTaG9ydE5hdGl2ZVZhbHVlKTsKKyAgICB1bnNpZ25lZCBsb25nIG9i
akFyZ3NMb25nID0gMAorICAgIEVYQ0VQVElPTl9CTE9DSyhkb3VibGUsIG9iakFyZ3NMb25nTmF0
aXZlVmFsdWUsIGFyZ3NbMV0tPk51bWJlclZhbHVlKCkpOworICAgIGlmIChpc25hbihvYmpBcmdz
TG9uZ05hdGl2ZVZhbHVlKSkKKyAgICAgICAgb2JqQXJnc0xvbmcgPSAwOworICAgIGVsc2UKKyAg
ICAgICAgb2JqQXJnc0xvbmcgPSBjbGFtcFRvPHVuc2lnbmVkIGxvbmc+KG9iakFyZ3NMb25nTmF0
aXZlVmFsdWUpOworICAgIGltcC0+Y2xhc3NNZXRob2RXaXRoQ2xhbXAob2JqQXJnc1Nob3J0LCBv
YmpBcmdzTG9uZyk7CisgICAgcmV0dXJuIHY4OjpIYW5kbGU8djg6OlZhbHVlPigpOworfQorCiBz
dGF0aWMgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IGVuYWJsZWRBdFJ1bnRpbWVNZXRob2QxQ2FsbGJh
Y2soY29uc3Qgdjg6OkFyZ3VtZW50cyYgYXJncykKIHsKICAgICBJTkNfU1RBVFMoIkRPTS5UZXN0
T2JqLmVuYWJsZWRBdFJ1bnRpbWVNZXRob2QxIik7CkBAIC0yMDY4LDYgKzIwOTAsNyBAQCBzdGF0
aWMgY29uc3QgQmF0Y2hlZENhbGxiYWNrIFRlc3RPYmpDYWxsCiAgICAgeyJjb25kaXRpb25hbE1l
dGhvZDMiLCBUZXN0T2JqVjhJbnRlcm5hbDo6Y29uZGl0aW9uYWxNZXRob2QzQ2FsbGJhY2t9LAog
I2VuZGlmCiAgICAgeyJvdmVybG9hZGVkTWV0aG9kIiwgVGVzdE9ialY4SW50ZXJuYWw6Om92ZXJs
b2FkZWRNZXRob2RDYWxsYmFja30sCisgICAgeyJjbGFzc01ldGhvZFdpdGhDbGFtcCIsIFRlc3RP
YmpWOEludGVybmFsOjpjbGFzc01ldGhvZFdpdGhDbGFtcENhbGxiYWNrfSwKICAgICB7InN0cmlu
Z0FycmF5RnVuY3Rpb24iLCBUZXN0T2JqVjhJbnRlcm5hbDo6c3RyaW5nQXJyYXlGdW5jdGlvbkNh
bGxiYWNrfSwKICAgICB7ImdldFNWR0RvY3VtZW50IiwgVGVzdE9ialY4SW50ZXJuYWw6OmdldFNW
R0RvY3VtZW50Q2FsbGJhY2t9LAogICAgIHsibXV0YWJsZVBvaW50RnVuY3Rpb24iLCBUZXN0T2Jq
VjhJbnRlcm5hbDo6bXV0YWJsZVBvaW50RnVuY3Rpb25DYWxsYmFja30sCg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>155131</attachid>
            <date>2012-07-28 08:05:45 -0700</date>
            <delta_ts>2012-07-28 09:11:58 -0700</delta_ts>
            <desc>patch</desc>
            <filename>clamp_006.diff</filename>
            <type>text/plain</type>
            <size>13179</size>
            <attacher name="Vineet Chaudhary (vineetc)">code.vineet</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDEyMzk2MCkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDM0IEBACisyMDEyLTA3LTI4ICBWaW5lZXQg
Q2hhdWRoYXJ5ICA8cmdmNzQ4QG1vdG9yb2xhLmNvbT4KKworICAgICAgICBbQ2xhbXBdIHN1cHBv
cnQgaW4gYmluZGluZyBnZW5lcmF0b3IuCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD03NzYwNQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09Q
UyEpLgorCisgICAgICAgIEN1cnJlbnRseSBbQ2xhbXBdIGV4dGVuZGVkIGF0dHJpYnV0ZSBpbiBJ
REwgZmlsZXMuCisgICAgICAgIFNwZWM6IGh0dHA6Ly93d3cudzMub3JnL1RSLzIwMTIvQ1ItV2Vi
SURMLTIwMTIwNDE5LyNDbGFtcAorCisgICAgICAgIFRlc3RzOiBUZXN0T2JqLmlkbAorCisgICAg
ICAgICogYmluZGluZ3Mvc2NyaXB0cy9Db2RlR2VuZXJhdG9yQ1BQLnBtOgorICAgICAgICAoU2tp
cEZ1bmN0aW9uKTogU2tpcHMgbWV0aG9kcyB3aXRoIFtDbGFtcF0gcGFyYW1ldGVycy4KKyAgICAg
ICAgKiBiaW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0b3JHT2JqZWN0LnBtOgorICAgICAgICAo
U2tpcEZ1bmN0aW9uKTogU2tpcHMgbWV0aG9kcyB3aXRoIFtDbGFtcF0gcGFyYW1ldGVycy4KKyAg
ICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0b3JKUy5wbToKKyAgICAgICAgKEdl
bmVyYXRlUGFyYW1ldGVyc0NoZWNrKTogU3VwcG9ydCBbQ2xhbXBdIGZvciBKU0JpbmRpbmdzLgor
ICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvQ29kZUdlbmVyYXRvck9iakMucG06CisgICAgICAg
IChTa2lwRnVuY3Rpb24pOiBTa2lwcyBtZXRob2RzIHdpdGggW0NsYW1wXSBwYXJhbWV0ZXJzLgor
ICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvQ29kZUdlbmVyYXRvclY4LnBtOgorICAgICAgICAo
R2VuZXJhdGVQYXJhbWV0ZXJzQ2hlY2spOiBTdXBwb3J0IFtDbGFtcF0gZm9yIFY4QmluZGluZ3Mu
CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy9JRExBdHRyaWJ1dGVzLnR4dDogQWRkZWQgW0Ns
YW1wXSB0byBhdHRyaWJ1dGVzIGxpc3QuCisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0
L0pTL0pTVGVzdE9iai5jcHA6IFRlc3QuCisgICAgICAgIChXZWJDb3JlOjpqc1Rlc3RPYmpQcm90
b3R5cGVGdW5jdGlvbkNsYXNzTWV0aG9kV2l0aENsYW1wKToKKyAgICAgICAgKiBiaW5kaW5ncy9z
Y3JpcHRzL3Rlc3QvSlMvSlNUZXN0T2JqLmg6CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90
ZXN0L1Rlc3RPYmouaWRsOgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9WOC9WOFRl
c3RPYmouY3BwOgorICAgICAgICAoV2ViQ29yZTo6VGVzdE9ialY4SW50ZXJuYWw6OmNsYXNzTWV0
aG9kV2l0aENsYW1wQ2FsbGJhY2spOgorICAgICAgICAoVGVzdE9ialY4SW50ZXJuYWwpOgorCiAy
MDEyLTA3LTI3ICBTaGVyaWZmIEJvdCAgPHdlYmtpdC5yZXZpZXcuYm90QGdtYWlsLmNvbT4KIAog
ICAgICAgICBVbnJldmlld2VkLCByb2xsaW5nIG91dCByMTIzOTA4LgpJbmRleDogU291cmNlL1dl
YkNvcmUvYmluZGluZ3Mvc2NyaXB0cy9Db2RlR2VuZXJhdG9yQ1BQLnBtCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvQ29kZUdlbmVyYXRvckNQUC5wbQkocmV2
aXNpb24gMTIzOTU4KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy9Db2RlR2Vu
ZXJhdG9yQ1BQLnBtCSh3b3JraW5nIGNvcHkpCkBAIC0yMDYsNiArMjA2LDcgQEAgc3ViIFNraXBG
dW5jdGlvbgogCiAgICAgZm9yZWFjaCBteSAkcGFyYW0gKEB7JGZ1bmN0aW9uLT5wYXJhbWV0ZXJz
fSkgewogICAgICAgICByZXR1cm4gMSBpZiAkY29kZUdlbmVyYXRvci0+R2V0U2VxdWVuY2VUeXBl
KCRwYXJhbS0+dHlwZSk7CisgICAgICAgIHJldHVybiAxIGlmICRwYXJhbS0+ZXh0ZW5kZWRBdHRy
aWJ1dGVzLT57IkNsYW1wIn07CiAgICAgfQogCiAgICAgIyBGSVhNRTogVGhpcyBpcyB0eXBpY2Fs
bHkgdXNlZCB0byBhZGQgc2NyaXB0IGV4ZWN1dGlvbiBzdGF0ZSBhcmd1bWVudHMgdG8gdGhlIG1l
dGhvZC4KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvQ29kZUdlbmVyYXRv
ckdPYmplY3QucG0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0
cy9Db2RlR2VuZXJhdG9yR09iamVjdC5wbQkocmV2aXNpb24gMTIzOTU4KQorKysgU291cmNlL1dl
YkNvcmUvYmluZGluZ3Mvc2NyaXB0cy9Db2RlR2VuZXJhdG9yR09iamVjdC5wbQkod29ya2luZyBj
b3B5KQpAQCAtMjQ3LDYgKzI0Nyw3IEBAIHN1YiBTa2lwRnVuY3Rpb24gewogICAgICMgY29kZSBn
ZW5lcmF0b3IgZG9lc24ndCBrbm93IGhvdyB0byBhdXRvLWdlbmVyYXRlIE1lZGlhUXVlcnlMaXN0
TGlzdGVuZXIgb3Igc2VxdWVuY2U8VD4uCiAgICAgZm9yZWFjaCBteSAkcGFyYW0gKEB7JGZ1bmN0
aW9uLT5wYXJhbWV0ZXJzfSkgewogICAgICAgICBpZiAoJHBhcmFtLT5leHRlbmRlZEF0dHJpYnV0
ZXMtPnsiQ2FsbGJhY2sifSB8fAorICAgICAgICAgICAgJHBhcmFtLT5leHRlbmRlZEF0dHJpYnV0
ZXMtPnsiQ2xhbXAifSB8fAogICAgICAgICAgICAgJHBhcmFtLT50eXBlIGVxICJNZWRpYVF1ZXJ5
TGlzdExpc3RlbmVyIiB8fAogICAgICAgICAgICAgJGNvZGVHZW5lcmF0b3ItPkdldFNlcXVlbmNl
VHlwZSgkcGFyYW0tPnR5cGUpKSB7CiAgICAgICAgICAgICByZXR1cm4gMTsKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvQ29kZUdlbmVyYXRvckpTLnBtCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvQ29kZUdlbmVyYXRvckpTLnBtCShy
ZXZpc2lvbiAxMjM5NTgpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL0NvZGVH
ZW5lcmF0b3JKUy5wbQkod29ya2luZyBjb3B5KQpAQCAtMjYwNyw2ICsyNjA3LDE0IEBAIHN1YiBH
ZW5lcmF0ZVBhcmFtZXRlcnNDaGVjawogICAgICAgICAgICAgICAgIHB1c2goQCRvdXRwdXRBcnJh
eSwgIiAgICB9XG4iKTsKICAgICAgICAgICAgICAgICBwdXNoKEAkb3V0cHV0QXJyYXksICIgICAg
UmVmUHRyPCRhcmdUeXBlPiAkbmFtZSA9ICR7Y2FsbGJhY2tDbGFzc05hbWV9OjpjcmVhdGUoYXNP
YmplY3QoZXhlYy0+YXJndW1lbnQoJGFyZ3NJbmRleCkpLCBjYXN0ZWRUaGlzLT5nbG9iYWxPYmpl
Y3QoKSk7XG4iKTsKICAgICAgICAgICAgIH0KKyAgICAgICAgfSBlbHNpZiAoJHBhcmFtZXRlci0+
ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57IkNsYW1wIn0pIHsKKyAgICAgICAgICAgICAgICBteSAkbmF0
aXZlVmFsdWUgPSAiJHtuYW1lfU5hdGl2ZVZhbHVlIjsKKyAgICAgICAgICAgICAgICBwdXNoKEAk
b3V0cHV0QXJyYXksICIgICAgJGFyZ1R5cGUgJG5hbWUgPSAwO1xuIik7CisgICAgICAgICAgICAg
ICAgcHVzaChAJG91dHB1dEFycmF5LCAiICAgIGRvdWJsZSAkbmF0aXZlVmFsdWUgPSBleGVjLT5h
cmd1bWVudCgkYXJnc0luZGV4KS50b051bWJlcihleGVjKTtcbiIpOworICAgICAgICAgICAgICAg
IHB1c2goQCRvdXRwdXRBcnJheSwgIiAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpXG4iKTsK
KyAgICAgICAgICAgICAgICBwdXNoKEAkb3V0cHV0QXJyYXksICIgICAgICAgIHJldHVybiBKU1Zh
bHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7XG5cbiIpOworICAgICAgICAgICAgICAgIHB1c2go
QCRvdXRwdXRBcnJheSwgIiAgICBpZiAoIWlzbmFuKG9iakFyZ3NTaG9ydE5hdGl2ZVZhbHVlKSlc
biIpOworICAgICAgICAgICAgICAgIHB1c2goQCRvdXRwdXRBcnJheSwgIiAgICAgICAgJG5hbWUg
PSBjbGFtcFRvPCRhcmdUeXBlPigkbmF0aXZlVmFsdWUpO1xuXG4iKTsKICAgICAgICAgfSBlbHNl
IHsKICAgICAgICAgICAgICMgSWYgdGhlICJTdHJpY3RUeXBlQ2hlY2tpbmciIGV4dGVuZGVkIGF0
dHJpYnV0ZSBpcyBwcmVzZW50LCBhbmQgdGhlIGFyZ3VtZW50J3MgdHlwZSBpcyBhbgogICAgICAg
ICAgICAgIyBpbnRlcmZhY2UgdHlwZSwgdGhlbiBpZiB0aGUgaW5jb21pbmcgdmFsdWUgZG9lcyBu
b3QgaW1wbGVtZW50IHRoYXQgaW50ZXJmYWNlLCBhIFR5cGVFcnJvcgpJbmRleDogU291cmNlL1dl
YkNvcmUvYmluZGluZ3Mvc2NyaXB0cy9Db2RlR2VuZXJhdG9yT2JqQy5wbQo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0b3JPYmpDLnBtCShy
ZXZpc2lvbiAxMjM5NTgpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL0NvZGVH
ZW5lcmF0b3JPYmpDLnBtCSh3b3JraW5nIGNvcHkpCkBAIC00NTcsNiArNDU3LDcgQEAgc3ViIFNr
aXBGdW5jdGlvbgogICAgIGZvcmVhY2ggbXkgJHBhcmFtIChAeyRmdW5jdGlvbi0+cGFyYW1ldGVy
c30pIHsKICAgICAgICAgcmV0dXJuIDEgaWYgJGNvZGVHZW5lcmF0b3ItPkdldFNlcXVlbmNlVHlw
ZSgkcGFyYW0tPnR5cGUpOwogICAgICAgICByZXR1cm4gMSBpZiAkY29kZUdlbmVyYXRvci0+R2V0
QXJyYXlUeXBlKCRwYXJhbS0+dHlwZSk7CisgICAgICAgIHJldHVybiAxIGlmICRwYXJhbS0+ZXh0
ZW5kZWRBdHRyaWJ1dGVzLT57IkNsYW1wIn07CiAgICAgfQogCiAgICAgcmV0dXJuIDA7CkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0b3JWOC5wbQo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0b3JW
OC5wbQkocmV2aXNpb24gMTIzOTU4KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0
cy9Db2RlR2VuZXJhdG9yVjgucG0JKHdvcmtpbmcgY29weSkKQEAgLTE2ODAsNiArMTY4MCwxMyBA
QCBzdWIgR2VuZXJhdGVQYXJhbWV0ZXJzQ2hlY2sKICAgICAgICAgICAgICAgICAkcGFyYW1ldGVy
Q2hlY2tTdHJpbmcgLj0gIiAgICAgICAgcmV0dXJuIHRocm93RXJyb3IoVFlQRV9NSVNNQVRDSF9F
UlIsIGFyZ3MuR2V0SXNvbGF0ZSgpKTtcbiI7CiAgICAgICAgICAgICAgICAgJHBhcmFtZXRlckNo
ZWNrU3RyaW5nIC49ICIgICAgUmVmUHRyPCIgLiAkcGFyYW1ldGVyLT50eXBlIC4gIj4gJHBhcmFt
ZXRlck5hbWUgPSAke2NsYXNzTmFtZX06OmNyZWF0ZShhcmdzWyRwYXJhbUluZGV4XSwgZ2V0U2Ny
aXB0RXhlY3V0aW9uQ29udGV4dCgpKTtcbiI7CiAgICAgICAgICAgICB9CisgICAgICAgIH0gZWxz
aWYgKCRwYXJhbWV0ZXItPmV4dGVuZGVkQXR0cmlidXRlcy0+eyJDbGFtcCJ9KSB7CisgICAgICAg
ICAgICAgICAgbXkgJG5hdGl2ZVZhbHVlID0gIiR7cGFyYW1ldGVyTmFtZX1OYXRpdmVWYWx1ZSI7
CisgICAgICAgICAgICAgICAgbXkgJHBhcmFtVHlwZSA9ICRwYXJhbWV0ZXItPnR5cGU7CisgICAg
ICAgICAgICAgICAgJHBhcmFtZXRlckNoZWNrU3RyaW5nIC49ICIgICAgJHBhcmFtVHlwZSAkcGFy
YW1ldGVyTmFtZSA9IDBcbiI7CisgICAgICAgICAgICAgICAgJHBhcmFtZXRlckNoZWNrU3RyaW5n
IC49ICIgICAgRVhDRVBUSU9OX0JMT0NLKGRvdWJsZSwgJG5hdGl2ZVZhbHVlLCBhcmdzWyRwYXJh
bUluZGV4XS0+TnVtYmVyVmFsdWUoKSk7XG4iOworICAgICAgICAgICAgICAgICRwYXJhbWV0ZXJD
aGVja1N0cmluZyAuPSAiICAgIGlmICghaXNuYW4oJG5hdGl2ZVZhbHVlKSlcbiI7CisgICAgICAg
ICAgICAgICAgJHBhcmFtZXRlckNoZWNrU3RyaW5nIC49ICIgICAgICAgICRwYXJhbWV0ZXJOYW1l
ID0gY2xhbXBUbzwkcGFyYW1UeXBlPigkbmF0aXZlVmFsdWUpO1xuIjsKICAgICAgICAgfSBlbHNp
ZiAoJHBhcmFtZXRlci0+dHlwZSBlcSAiU2VyaWFsaXplZFNjcmlwdFZhbHVlIikgewogICAgICAg
ICAgICAgQWRkVG9JbXBsSW5jbHVkZXMoIlNlcmlhbGl6ZWRTY3JpcHRWYWx1ZS5oIik7CiAgICAg
ICAgICAgICBteSAkdXNlVHJhbnNmZXJMaXN0ID0gMDsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL3NjcmlwdHMvSURMQXR0cmlidXRlcy50eHQKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvYmluZGluZ3Mvc2NyaXB0cy9JRExBdHRyaWJ1dGVzLnR4dAkocmV2aXNpb24gMTIzOTU4
KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy9JRExBdHRyaWJ1dGVzLnR4dAko
d29ya2luZyBjb3B5KQpAQCAtMjUsNiArMjUsNyBAQCBDYWxsV2l0aD1TY3JpcHRFeGVjdXRpb25D
b250ZXh0fFNjcmlwdFN0CiBDYWxsYmFjawogQ2hlY2tTZWN1cml0eQogQ2hlY2tTZWN1cml0eUZv
ck5vZGUKK0NsYW1wCiBDb25kaXRpb25hbD0qCiBDb25zdHJ1Y3RvcgogQ29uc3RydWN0b3JQYXJh
bWV0ZXJzPSoKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9UZXN0
T2JqLmlkbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rl
c3QvVGVzdE9iai5pZGwJKHJldmlzaW9uIDEyMzk1OCkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL3NjcmlwdHMvdGVzdC9UZXN0T2JqLmlkbAkod29ya2luZyBjb3B5KQpAQCAtMTg5LDYgKzE4
OSw4IEBAIG1vZHVsZSB0ZXN0IHsKICAgICAgICAgW0NvbmRpdGlvbmFsPUNvbmRpdGlvbjFdIHN0
YXRpYyB2b2lkIG92ZXJsb2FkZWRNZXRob2QxKGluIGxvbmcgYXJnKTsKICAgICAgICAgW0NvbmRp
dGlvbmFsPUNvbmRpdGlvbjFdIHN0YXRpYyB2b2lkIG92ZXJsb2FkZWRNZXRob2QxKGluIERPTVN0
cmluZyB0eXBlKTsKIAorICAgICAgICB2b2lkIGNsYXNzTWV0aG9kV2l0aENsYW1wKGluIFtDbGFt
cF0gdW5zaWduZWQgc2hvcnQgb2JqQXJnc1Nob3J0LCBpbiBbQ2xhbXBdIHVuc2lnbmVkIGxvbmcg
b2JqQXJnc0xvbmcpOworCiAjaWYgZGVmaW5lZChURVNUSU5HX1Y4KQogICAgICAgICAvLyAnVjhF
bmFibGVkQXRSdW50aW1lJyBtZXRob2RzIGFuZCBhdHRyaWJ1dGVzLgogICAgICAgICBbVjhFbmFi
bGVkQXRSdW50aW1lXSB2b2lkIGVuYWJsZWRBdFJ1bnRpbWVNZXRob2QxKGluIGxvbmcgbG9uZ0Fy
Zyk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0
T2JqLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rl
c3QvSlMvSlNUZXN0T2JqLmNwcAkocmV2aXNpb24gMTIzOTU4KQorKysgU291cmNlL1dlYkNvcmUv
YmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE9iai5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTMwNSw2ICszMDUsNyBAQCBzdGF0aWMgY29uc3QgSGFzaFRhYmxlVmFsdWUgSlNUZXN0T2JqUHJv
CiAgICAgeyAiY29uZGl0aW9uYWxNZXRob2QzIiwgRG9udERlbGV0ZSB8IEpTQzo6RnVuY3Rpb24s
IChpbnRwdHJfdClzdGF0aWNfY2FzdDxOYXRpdmVGdW5jdGlvbj4oanNUZXN0T2JqUHJvdG90eXBl
RnVuY3Rpb25Db25kaXRpb25hbE1ldGhvZDMpLCAoaW50cHRyX3QpMCwgTm9JbnRyaW5zaWMgfSwK
ICNlbmRpZgogICAgIHsgIm92ZXJsb2FkZWRNZXRob2QiLCBEb250RGVsZXRlIHwgSlNDOjpGdW5j
dGlvbiwgKGludHB0cl90KXN0YXRpY19jYXN0PE5hdGl2ZUZ1bmN0aW9uPihqc1Rlc3RPYmpQcm90
b3R5cGVGdW5jdGlvbk92ZXJsb2FkZWRNZXRob2QpLCAoaW50cHRyX3QpMiwgTm9JbnRyaW5zaWMg
fSwKKyAgICB7ICJjbGFzc01ldGhvZFdpdGhDbGFtcCIsIERvbnREZWxldGUgfCBKU0M6OkZ1bmN0
aW9uLCAoaW50cHRyX3Qpc3RhdGljX2Nhc3Q8TmF0aXZlRnVuY3Rpb24+KGpzVGVzdE9ialByb3Rv
dHlwZUZ1bmN0aW9uQ2xhc3NNZXRob2RXaXRoQ2xhbXApLCAoaW50cHRyX3QpMiwgTm9JbnRyaW5z
aWMgfSwKICAgICB7ICJtZXRob2RXaXRoVW5zaWduZWRMb25nU2VxdWVuY2UiLCBEb250RGVsZXRl
IHwgSlNDOjpGdW5jdGlvbiwgKGludHB0cl90KXN0YXRpY19jYXN0PE5hdGl2ZUZ1bmN0aW9uPihq
c1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk1ldGhvZFdpdGhVbnNpZ25lZExvbmdTZXF1ZW5jZSks
IChpbnRwdHJfdCkxLCBOb0ludHJpbnNpYyB9LAogICAgIHsgInN0cmluZ0FycmF5RnVuY3Rpb24i
LCBEb250RGVsZXRlIHwgSlNDOjpGdW5jdGlvbiwgKGludHB0cl90KXN0YXRpY19jYXN0PE5hdGl2
ZUZ1bmN0aW9uPihqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvblN0cmluZ0FycmF5RnVuY3Rpb24p
LCAoaW50cHRyX3QpMSwgTm9JbnRyaW5zaWMgfSwKICAgICB7ICJnZXRTVkdEb2N1bWVudCIsIERv
bnREZWxldGUgfCBKU0M6OkZ1bmN0aW9uLCAoaW50cHRyX3Qpc3RhdGljX2Nhc3Q8TmF0aXZlRnVu
Y3Rpb24+KGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uR2V0U1ZHRG9jdW1lbnQpLCAoaW50cHRy
X3QpMCwgTm9JbnRyaW5zaWMgfSwKQEAgLTIzNDUsNiArMjM0NiwzNiBAQCBFbmNvZGVkSlNWYWx1
ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9iakNvCiAKICNlbmRpZgogCitFbmNvZGVkSlNWYWx1ZSBK
U0NfSE9TVF9DQUxMIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uQ2xhc3NNZXRob2RXaXRoQ2xh
bXAoRXhlY1N0YXRlKiBleGVjKQoreworICAgIEpTVmFsdWUgdGhpc1ZhbHVlID0gZXhlYy0+aG9z
dFRoaXNWYWx1ZSgpOworICAgIGlmICghdGhpc1ZhbHVlLmluaGVyaXRzKCZKU1Rlc3RPYmo6OnNf
aW5mbykpCisgICAgICAgIHJldHVybiB0aHJvd1ZNVHlwZUVycm9yKGV4ZWMpOworICAgIEpTVGVz
dE9iaiogY2FzdGVkVGhpcyA9IGpzQ2FzdDxKU1Rlc3RPYmoqPihhc09iamVjdCh0aGlzVmFsdWUp
KTsKKyAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKGNhc3RlZFRoaXMsICZKU1Rlc3RPYmo6
OnNfaW5mbyk7CisgICAgVGVzdE9iaiogaW1wbCA9IHN0YXRpY19jYXN0PFRlc3RPYmoqPihjYXN0
ZWRUaGlzLT5pbXBsKCkpOworICAgIGlmIChleGVjLT5hcmd1bWVudENvdW50KCkgPCAyKQorICAg
ICAgICByZXR1cm4gdGhyb3dWTUVycm9yKGV4ZWMsIGNyZWF0ZU5vdEVub3VnaEFyZ3VtZW50c0Vy
cm9yKGV4ZWMpKTsKKyAgICB1bnNpZ25lZCBzaG9ydCBvYmpBcmdzU2hvcnQgPSAwOworICAgIGRv
dWJsZSBvYmpBcmdzU2hvcnROYXRpdmVWYWx1ZSA9IGV4ZWMtPmFyZ3VtZW50KDApLnRvTnVtYmVy
KGV4ZWMpOworICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICAgICAgcmV0dXJuIEpT
VmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKKworICAgIGlmICghaXNuYW4ob2JqQXJnc1No
b3J0TmF0aXZlVmFsdWUpKQorICAgICAgICBvYmpBcmdzU2hvcnQgPSBjbGFtcFRvPHVuc2lnbmVk
IHNob3J0PihvYmpBcmdzU2hvcnROYXRpdmVWYWx1ZSk7CisKKyAgICB1bnNpZ25lZCBsb25nIG9i
akFyZ3NMb25nID0gMDsKKyAgICBkb3VibGUgb2JqQXJnc0xvbmdOYXRpdmVWYWx1ZSA9IGV4ZWMt
PmFyZ3VtZW50KDEpLnRvTnVtYmVyKGV4ZWMpOworICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24o
KSkKKyAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKKworICAg
IGlmICghaXNuYW4ob2JqQXJnc1Nob3J0TmF0aXZlVmFsdWUpKQorICAgICAgICBvYmpBcmdzTG9u
ZyA9IGNsYW1wVG88dW5zaWduZWQgbG9uZz4ob2JqQXJnc0xvbmdOYXRpdmVWYWx1ZSk7CisKKyAg
ICBpbXBsLT5jbGFzc01ldGhvZFdpdGhDbGFtcChvYmpBcmdzU2hvcnQsIG9iakFyZ3NMb25nKTsK
KyAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOworfQorCiBFbmNvZGVk
SlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uTWV0aG9kV2l0
aFVuc2lnbmVkTG9uZ1NlcXVlbmNlKEV4ZWNTdGF0ZSogZXhlYykKIHsKICAgICBKU1ZhbHVlIHRo
aXNWYWx1ZSA9IGV4ZWMtPmhvc3RUaGlzVmFsdWUoKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RPYmouaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0T2JqLmgJKHJldmlzaW9uIDEy
Mzk1OCkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RP
YmouaAkod29ya2luZyBjb3B5KQpAQCAtMjAzLDYgKzIwMyw3IEBAIEpTQzo6RW5jb2RlZEpTVmFs
dWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3QKICNpZiBFTkFCTEUoQ29uZGl0aW9uMSkKIEpTQzo6RW5j
b2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpDb25zdHJ1Y3RvckZ1bmN0aW9uT3Zl
cmxvYWRlZE1ldGhvZDEoSlNDOjpFeGVjU3RhdGUqKTsKICNlbmRpZgorSlNDOjpFbmNvZGVkSlNW
YWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uQ2xhc3NNZXRob2RX
aXRoQ2xhbXAoSlNDOjpFeGVjU3RhdGUqKTsKIEpTQzo6RW5jb2RlZEpTVmFsdWUgSlNDX0hPU1Rf
Q0FMTCBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk1ldGhvZFdpdGhVbnNpZ25lZExvbmdTZXF1
ZW5jZShKU0M6OkV4ZWNTdGF0ZSopOwogSlNDOjpFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxM
IGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uU3RyaW5nQXJyYXlGdW5jdGlvbihKU0M6OkV4ZWNT
dGF0ZSopOwogSlNDOjpFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9ialByb3Rv
dHlwZUZ1bmN0aW9uR2V0U1ZHRG9jdW1lbnQoSlNDOjpFeGVjU3RhdGUqKTsKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9WOC9WOFRlc3RPYmouY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9WOC9WOFRlc3RPYmou
Y3BwCShyZXZpc2lvbiAxMjM5NTgpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRz
L3Rlc3QvVjgvVjhUZXN0T2JqLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTcyMiw2ICsxNzIyLDI0
IEBAIHN0YXRpYyB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gb3ZlcmxvYWRlZE0KIAogI2VuZGlmIC8v
IEVOQUJMRShDb25kaXRpb24xKQogCitzdGF0aWMgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IGNsYXNz
TWV0aG9kV2l0aENsYW1wQ2FsbGJhY2soY29uc3Qgdjg6OkFyZ3VtZW50cyYgYXJncykKK3sKKyAg
ICBJTkNfU1RBVFMoIkRPTS5UZXN0T2JqLmNsYXNzTWV0aG9kV2l0aENsYW1wIik7CisgICAgaWYg
KGFyZ3MuTGVuZ3RoKCkgPCAyKQorICAgICAgICByZXR1cm4gVjhQcm94eTo6dGhyb3dOb3RFbm91
Z2hBcmd1bWVudHNFcnJvcihhcmdzLkdldElzb2xhdGUoKSk7CisgICAgVGVzdE9iaiogaW1wID0g
VjhUZXN0T2JqOjp0b05hdGl2ZShhcmdzLkhvbGRlcigpKTsKKyAgICB1bnNpZ25lZCBzaG9ydCBv
YmpBcmdzU2hvcnQgPSAwCisgICAgRVhDRVBUSU9OX0JMT0NLKGRvdWJsZSwgb2JqQXJnc1Nob3J0
TmF0aXZlVmFsdWUsIGFyZ3NbMF0tPk51bWJlclZhbHVlKCkpOworICAgIGlmICghaXNuYW4ob2Jq
QXJnc1Nob3J0TmF0aXZlVmFsdWUpKQorICAgICAgICBvYmpBcmdzU2hvcnQgPSBjbGFtcFRvPHVu
c2lnbmVkIHNob3J0PihvYmpBcmdzU2hvcnROYXRpdmVWYWx1ZSk7CisgICAgdW5zaWduZWQgbG9u
ZyBvYmpBcmdzTG9uZyA9IDAKKyAgICBFWENFUFRJT05fQkxPQ0soZG91YmxlLCBvYmpBcmdzTG9u
Z05hdGl2ZVZhbHVlLCBhcmdzWzFdLT5OdW1iZXJWYWx1ZSgpKTsKKyAgICBpZiAoIWlzbmFuKG9i
akFyZ3NMb25nTmF0aXZlVmFsdWUpKQorICAgICAgICBvYmpBcmdzTG9uZyA9IGNsYW1wVG88dW5z
aWduZWQgbG9uZz4ob2JqQXJnc0xvbmdOYXRpdmVWYWx1ZSk7CisgICAgaW1wLT5jbGFzc01ldGhv
ZFdpdGhDbGFtcChvYmpBcmdzU2hvcnQsIG9iakFyZ3NMb25nKTsKKyAgICByZXR1cm4gdjg6Okhh
bmRsZTx2ODo6VmFsdWU+KCk7Cit9CisKIHN0YXRpYyB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gZW5h
YmxlZEF0UnVudGltZU1ldGhvZDFDYWxsYmFjayhjb25zdCB2ODo6QXJndW1lbnRzJiBhcmdzKQog
ewogICAgIElOQ19TVEFUUygiRE9NLlRlc3RPYmouZW5hYmxlZEF0UnVudGltZU1ldGhvZDEiKTsK
QEAgLTIwNjgsNiArMjA4Niw3IEBAIHN0YXRpYyBjb25zdCBCYXRjaGVkQ2FsbGJhY2sgVGVzdE9i
akNhbGwKICAgICB7ImNvbmRpdGlvbmFsTWV0aG9kMyIsIFRlc3RPYmpWOEludGVybmFsOjpjb25k
aXRpb25hbE1ldGhvZDNDYWxsYmFja30sCiAjZW5kaWYKICAgICB7Im92ZXJsb2FkZWRNZXRob2Qi
LCBUZXN0T2JqVjhJbnRlcm5hbDo6b3ZlcmxvYWRlZE1ldGhvZENhbGxiYWNrfSwKKyAgICB7ImNs
YXNzTWV0aG9kV2l0aENsYW1wIiwgVGVzdE9ialY4SW50ZXJuYWw6OmNsYXNzTWV0aG9kV2l0aENs
YW1wQ2FsbGJhY2t9LAogICAgIHsic3RyaW5nQXJyYXlGdW5jdGlvbiIsIFRlc3RPYmpWOEludGVy
bmFsOjpzdHJpbmdBcnJheUZ1bmN0aW9uQ2FsbGJhY2t9LAogICAgIHsiZ2V0U1ZHRG9jdW1lbnQi
LCBUZXN0T2JqVjhJbnRlcm5hbDo6Z2V0U1ZHRG9jdW1lbnRDYWxsYmFja30sCiAgICAgeyJtdXRh
YmxlUG9pbnRGdW5jdGlvbiIsIFRlc3RPYmpWOEludGVybmFsOjptdXRhYmxlUG9pbnRGdW5jdGlv
bkNhbGxiYWNrfSwK
</data>

          </attachment>
      

    </bug>

</bugzilla>