<?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>41177</bug_id>
          
          <creation_ts>2010-06-24 14:25:22 -0700</creation_ts>
          <short_desc>References for movable objects</short_desc>
          <delta_ts>2013-10-02 12:27:38 -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>JavaScriptCore</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>REOPENED</bug_status>
          <resolution></resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>43496</dependson>
    
    <dependson>43619</dependson>
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Nathan Lawrence">nlawrence</reporter>
          <assigned_to name="Nathan Lawrence">nlawrence</assigned_to>
          <cc>abarth</cc>
    
    <cc>abecsi</cc>
    
    <cc>commit-queue</cc>
    
    <cc>eric</cc>
    
    <cc>ggaren</cc>
    
    <cc>gustavo</cc>
    
    <cc>kent.hansen</cc>
    
    <cc>nlawrence</cc>
    
    <cc>ossy</cc>
    
    <cc>slewis</cc>
    
    <cc>webkit.review.bot</cc>
    
    <cc>xan.lopez</cc>
    
    <cc>zherczeg</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>242663</commentid>
    <comment_count>0</comment_count>
      <attachid>59702</attachid>
    <who name="Nathan Lawrence">nlawrence</who>
    <bug_when>2010-06-24 14:25:22 -0700</bug_when>
    <thetext>Created attachment 59702
Patch

If MarkStack::append takes a reference, we can update most of the pointers from a single location, making movable objects simpler.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>242670</commentid>
    <comment_count>1</comment_count>
    <who name="Mark Rowe (bdash)">mrowe</who>
    <bug_when>2010-06-24 14:34:20 -0700</bug_when>
    <thetext>Is there more to this change than the ChangeLog entry?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>242702</commentid>
    <comment_count>2</comment_count>
      <attachid>59702</attachid>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2010-06-24 15:54:35 -0700</bug_when>
    <thetext>Comment on attachment 59702
Patch

More patch please :).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>243789</commentid>
    <comment_count>3</comment_count>
      <attachid>59914</attachid>
    <who name="Nathan Lawrence">nlawrence</who>
    <bug_when>2010-06-28 11:39:41 -0700</bug_when>
    <thetext>Created attachment 59914
Patch (now with code!)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>243793</commentid>
    <comment_count>4</comment_count>
      <attachid>59916</attachid>
    <who name="Nathan Lawrence">nlawrence</who>
    <bug_when>2010-06-28 11:44:11 -0700</bug_when>
    <thetext>Created attachment 59916
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>243794</commentid>
    <comment_count>5</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-06-28 11:44:28 -0700</bug_when>
    <thetext>Attachment 59914 did not pass style-queue:

Failed to run &quot;[&apos;WebKitTools/Scripts/check-webkit-style&apos;, &apos;--no-squash&apos;]&quot; exit_code: 1
JavaScriptCore/runtime/Collector.cpp:762:  Declaration has space between type name and * in JSCell *cell  [whitespace/declaration] [3]
Total errors found: 1 in 17 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>243796</commentid>
    <comment_count>6</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-06-28 11:45:42 -0700</bug_when>
    <thetext>Attachment 59916 did not pass style-queue:

Failed to run &quot;[&apos;WebKitTools/Scripts/check-webkit-style&apos;, &apos;--no-squash&apos;]&quot; exit_code: 1
JavaScriptCore/runtime/Collector.cpp:762:  Declaration has space between type name and * in JSCell *cell  [whitespace/declaration] [3]
Total errors found: 1 in 17 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>243800</commentid>
    <comment_count>7</comment_count>
    <who name="Early Warning System Bot">webkit-ews</who>
    <bug_when>2010-06-28 11:52:37 -0700</bug_when>
    <thetext>Attachment 59914 did not build on qt:
Build output: http://webkit-commit-queue.appspot.com/results/3304932</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>243810</commentid>
    <comment_count>8</comment_count>
    <who name="Early Warning System Bot">webkit-ews</who>
    <bug_when>2010-06-28 12:15:17 -0700</bug_when>
    <thetext>Attachment 59916 did not build on qt:
Build output: http://webkit-commit-queue.appspot.com/results/3324983</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>243816</commentid>
    <comment_count>9</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-06-28 12:25:48 -0700</bug_when>
    <thetext>Attachment 59914 did not build on gtk:
Build output: http://webkit-commit-queue.appspot.com/results/3292967</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>243830</commentid>
    <comment_count>10</comment_count>
      <attachid>59916</attachid>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2010-06-28 12:49:43 -0700</bug_when>
    <thetext>Comment on attachment 59916
Patch

Angry builders :(.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>243984</commentid>
    <comment_count>11</comment_count>
      <attachid>59961</attachid>
    <who name="Nathan Lawrence">nlawrence</who>
    <bug_when>2010-06-28 17:08:58 -0700</bug_when>
    <thetext>Created attachment 59961
Patch

Should fix problems with 32 bit version.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>243999</commentid>
    <comment_count>12</comment_count>
    <who name="Early Warning System Bot">webkit-ews</who>
    <bug_when>2010-06-28 17:33:20 -0700</bug_when>
    <thetext>Attachment 59961 did not build on qt:
Build output: http://webkit-commit-queue.appspot.com/results/3283905</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>244025</commentid>
    <comment_count>13</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-06-28 18:25:43 -0700</bug_when>
    <thetext>Attachment 59961 did not build on gtk:
Build output: http://webkit-commit-queue.appspot.com/results/3361009</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>244052</commentid>
    <comment_count>14</comment_count>
      <attachid>59979</attachid>
    <who name="Nathan Lawrence">nlawrence</who>
    <bug_when>2010-06-28 20:07:15 -0700</bug_when>
    <thetext>Created attachment 59979
Patch (no, really it should compile this time...)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>257727</commentid>
    <comment_count>15</comment_count>
      <attachid>62960</attachid>
    <who name="Nathan Lawrence">nlawrence</who>
    <bug_when>2010-07-29 09:30:07 -0700</bug_when>
    <thetext>Created attachment 62960
Patch

Fixes how we mark NativeErrorConstructor</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>257760</commentid>
    <comment_count>16</comment_count>
    <who name="Kent Hansen">kent.hansen</who>
    <bug_when>2010-07-29 10:49:10 -0700</bug_when>
    <thetext>What&apos;s the further plan with this? Compacting GC?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>257761</commentid>
    <comment_count>17</comment_count>
      <attachid>62960</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2010-07-29 10:51:20 -0700</bug_when>
    <thetext>Comment on attachment 62960
Patch

&gt; +        * bytecode/CodeBlock.cpp:
&gt; +        (JSC::CodeBlock::markAggregate):
&gt; +        * runtime/Collector.cpp:
&gt; +        (JSC::Heap::markConservatively):
&gt; +        * runtime/JSCell.h:
&gt; +        (JSC::JSValue::asCell):
&gt; +        (JSC::MarkStack::append):
&gt; +        (JSC::MarkStack::appendInternal):
&gt; +        * runtime/JSGlobalObject.cpp:
&gt; +        (JSC::markIfNeeded):
&gt; +        * runtime/JSONObject.cpp:
&gt; +        (JSC::Stringifier::Holder::object):
&gt; +        * runtime/JSObject.h:
&gt; +        (JSC::JSObject::prototype):
&gt; +        * runtime/JSStaticScopeObject.cpp:
&gt; +        (JSC::JSStaticScopeObject::markChildren):
&gt; +        * runtime/JSValue.h:
&gt; +        (JSC::JSValue::):
&gt; +        (JSC::JSValue::JSValue):
&gt; +        (JSC::JSValue::asCell):
&gt; +        * runtime/MarkStack.h:
&gt; +        * runtime/NativeErrorConstructor.cpp:
&gt; +        (JSC::NativeErrorConstructor::createStructure):
&gt; +        (JSC::NativeErrorConstructor::markChildren):
&gt; +        * runtime/NativeErrorConstructor.h:
&gt; +        * runtime/Structure.h:
&gt; +        (JSC::Structure::storedPrototype):

If you&apos;re not going to write function by function comments, which is OK, I suggest you remove stray bogus function names that prepare-ChangeLog puts in. For example &quot;(JSC::JSValue::)&quot;. I personally prefer to include function by function comments. A useful way to think through your patch one extra time while writing a brief explanation of each change.

&gt; -                markStack.append(reinterpret_cast&lt;JSCell*&gt;(xAsBits));
&gt; +                JSCell* cell = reinterpret_cast&lt;JSCell*&gt;(xAsBits);
&gt; +                markStack.append(cell);

It&apos;s unclear why this is OK. Normally we need to call append on references in place, not temporary copies on the stack. I think a comment here is needed to explain why it&apos;s OK to do it this way here.

&gt; +        friend class CollectorHeap;

Adding friends is OK, but always unfortunate. If there is a way to avoid it, that would be better.

&gt; +        /* References in C++ are not covariant, so we fudge around it with
&gt; +         * this nonsense.
&gt; +         */

A couple thoughts about this comment:

    1) We use C-style &quot;//&quot; comments rather than &quot;/*&quot; comments in almost all cases. You should here.

    2) While it&apos;s fine to use an informal tone &quot;fudge around it with this nonsense&quot; is probably too vague for some readers. If you say something clearer then you have a chance to explain why this code is a good idea. For example, here is something helpful, but probably a bit too long: &quot;That rule prevents writing a pointer of a base class type into a more-specifically typed pointer. But here, the only changes we will make would be to update the pointer to a moved copy of the same object, so there is no danger of changing the type. We use a typecast to bypass the normal rule.&quot; Calling the idiom &quot;nonsense&quot; will create unnecessary fear, uncertainty, and doubt for in future readers of the code.

&gt; +    ALWAYS_INLINE void MarkStack::append(Register&amp; reg)

Please don&apos;t use a non-word abbreviation when there&apos;s a word available. I guess you&apos;re avoiding &quot;register&quot; because it&apos;s a C++ keyword? Is there another word you can use here?

&gt; -static inline void markIfNeeded(MarkStack&amp; markStack, JSValue v)
&gt; +template&lt;typename T&gt;
&gt; +static void markIfNeeded(MarkStack&amp; markStack, T*&amp; v)

I think this would read better on a single line rather than two lines.

&gt; -static inline void markIfNeeded(MarkStack&amp; markStack, const RefPtr&lt;Structure&gt;&amp; s)
&gt; +static void markIfNeeded(MarkStack&amp; markStack, RefPtr&lt;Structure&gt;&amp; s)

Why did you remove the inline keyword here? Per-function comments in the change log are a great place to explain decisions like this one.

&gt; +        template&lt;typename T&gt;
&gt; +        ALWAYS_INLINE void append(T*&amp; cell);
&gt; +        ALWAYS_INLINE void append(JSValue&amp;);
&gt; +        ALWAYS_INLINE void append(Register&amp;);

Here the function template declaration would be much easier to read if it was on one line rather than two!

&gt; +void NativeErrorConstructor::markChildren(MarkStack&amp; markStack)
&gt; +{
&gt; +    InternalFunction::markChildren(markStack);
&gt; +    // HACKY_FIX:
&gt; +    // The prototype pointer here needs to be updated
&gt; +    //
&gt; +    // Not sure if there&apos;s a better solution
&gt; +    markStack.append(m_errorStructure-&gt;storedPrototype());
&gt; +}

I don&apos;t think &quot;HACKY_FIX&quot; here is appropriate. If you think there&apos;s something wrong here, you need to say what. This code looks just fine to me, so there must be something specific about it that seems wrong to you. You should say what it is and why it&apos;s wrong in as specific a manner as possible to give later programmers a chance.

&gt;      private:
&gt;          virtual ConstructType getConstructData(ConstructData&amp;);
&gt;          virtual CallType getCallData(CallData&amp;);
&gt;  
&gt; +        virtual void markChildren(MarkStack&amp;);
&gt; +
&gt;          virtual const ClassInfo* classInfo() const { return &amp;info; }
&gt;  
&gt;          RefPtr&lt;Structure&gt; m_errorStructure;
&gt; +
&gt; +    protected:
&gt; +        static const unsigned StructureFlags = InternalFunction::StructureFlags | OverridesMarkChildren;

Normally we would put a protected member like this above the private members, unless there&apos;s a good reason not to.

&gt; +        JSValue const &amp;storedPrototype() const { return m_prototype; }
&gt; +        JSValue &amp;storedPrototype() { return m_prototype; }

The &quot;&amp;&quot; characters should be next to the type name and const, not the member name.

This is really close to a review+, but I&apos;ll say review- so you can fix one or more of the things I mentioned above.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>257848</commentid>
    <comment_count>18</comment_count>
      <attachid>62985</attachid>
    <who name="Nathan Lawrence">nlawrence</who>
    <bug_when>2010-07-29 13:47:21 -0700</bug_when>
    <thetext>Created attachment 62985
Patch

Added in Darin&apos;s suggestions except changing reg to register.  At least within the jit code, reg seems to be the accepted variable name for registers.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>257865</commentid>
    <comment_count>19</comment_count>
      <attachid>62985</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2010-07-29 14:01:01 -0700</bug_when>
    <thetext>Comment on attachment 62985
Patch

&gt; -                markStack.append(reinterpret_cast&lt;JSCell*&gt;(xAsBits));
&gt; +                // While markStack.append normally takes a reference to update,
&gt; +                // we don&apos;t actually want the heap to be updated since we don&apos;t
&gt; +                // know for sure that it&apos;s actually a pointer.  In the future
&gt; +                // this will be replaced by some appendRoot function for this
&gt; +                // specific case.
&gt; +                JSCell* cell = reinterpret_cast&lt;JSCell*&gt;(xAsBits);
&gt; +                markStack.append(cell);

Thanks. I find this comment really helpful. We normally use one space after periods, not two.

&gt; +        // In this case, we need to be able to change the pointer, and although we know
&gt; +        // it to be safe, C++ doesn&apos;t, requiring us to use templated functions that
&gt; +        // pass a casted version to an internal function.

It&apos;s too bad you didn&apos;t give the reason we know it to be safe. Otherwise excellent!

&gt; +    ALWAYS_INLINE void MarkStack::append(Register&amp; reg)

Hi, Reg! I guess it&apos;s short for Reginald ;-)

&gt;  #include &quot;JSValue.h&quot;
&gt; +#include &quot;Register.h&quot;
&gt;  #include &lt;wtf/Noncopyable.h&gt;

Why are you adding an include of Register.h to MarkStack.h? I don&apos;t see anything in this patch that requires that.

r=me

Please see if you can land this without adding that Register.h include.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>258998</commentid>
    <comment_count>20</comment_count>
      <attachid>63240</attachid>
    <who name="Nathan Lawrence">nlawrence</who>
    <bug_when>2010-08-02 11:18:17 -0700</bug_when>
    <thetext>Created attachment 63240
Patch

Added Darin&apos;s suggestions + remembered to add the necessary change to JavaScriptGlue.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>259021</commentid>
    <comment_count>21</comment_count>
      <attachid>63240</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2010-08-02 11:52:05 -0700</bug_when>
    <thetext>Comment on attachment 63240
Patch

&gt; +            struct {
&gt; +                int32_t tag;
&gt; +                JSCell* m_ptr;
&gt; +            } asPtr;

&gt; +            struct {
&gt; +                JSCell* m_ptr;
&gt; +                int32_t tag;
&gt; +            } asPtr;

Naming the pointer m_ptr instead of ptr or pointer seems to violate the prevailing style here.

&gt; +        Removed unneeded marking.  We need to remove this marking in order to have
&gt; +        MarkStack::append take references for updating movable objects.
&gt; +        https://bugs.webkit.org/show_bug.cgi?id=41177

This answers why we need to remove the marking, but doesn&apos;t say why the marking is unneeded.

&gt;  void JSValueWrapper::JSObjectMark(void *data)
&gt;  {
&gt; -    JSValueWrapper* ptr = (JSValueWrapper*)data;
&gt; -    if (ptr)
&gt; -    {
&gt; -        // This results in recursive marking but will be otherwise safe and correct.
&gt; -        // We claim the array vptr is 0 because we don&apos;t have access to it here, and
&gt; -        // claiming 0 is functionally harmless -- it merely means that we can&apos;t
&gt; -        // devirtualise marking of arrays when recursing from this point.
&gt; -        MarkStack markStack(0);
&gt; -        markStack.append(ptr-&gt;fValue.get());
&gt; -        markStack.drain();
&gt; -    }
&gt;  }

It&apos;s a little strange to leave this function around with an argument, but not doing any work. I think the comment about why marking is unneeded could probably go here in the code rather than just in the change log.

review- because I think m_ptr is not the right way to name that</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>259034</commentid>
    <comment_count>22</comment_count>
      <attachid>63245</attachid>
    <who name="Nathan Lawrence">nlawrence</who>
    <bug_when>2010-08-02 12:14:16 -0700</bug_when>
    <thetext>Created attachment 63245
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>260082</commentid>
    <comment_count>23</comment_count>
      <attachid>63245</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2010-08-04 10:18:52 -0700</bug_when>
    <thetext>Comment on attachment 63245
Patch

Clearing flags on attachment: 63245

Committed r64655: &lt;http://trac.webkit.org/changeset/64655&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>260084</commentid>
    <comment_count>24</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2010-08-04 10:18:58 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>260098</commentid>
    <comment_count>25</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-08-04 10:45:30 -0700</bug_when>
    <thetext>http://trac.webkit.org/changeset/64655 might have broken Qt Linux Release</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>260457</commentid>
    <comment_count>26</comment_count>
    <who name="Csaba Osztrogonác">ossy</who>
    <bug_when>2010-08-05 00:56:35 -0700</bug_when>
    <thetext>Reopened, because it was rolled out by http://trac.webkit.org/changeset/64684</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>260478</commentid>
    <comment_count>27</comment_count>
    <who name="Csaba Osztrogonác">ossy</who>
    <bug_when>2010-08-05 02:22:03 -0700</bug_when>
    <thetext>On Qt I reproduced the crash:

$WebKitTools/Scripts/run-webkit-tests --debug fast/js/sputnik/Conformance --exit-after-n-failures 1

...
fast/js/sputnik/Conformance/09_Type_Conversion/9.2_ToBoolean/S9.2_A4_T1.html -&gt; crashed

Exiting early after 1 failures. 593 tests run.

$ gdb WebKitBuild/Debug/bin/DumpRenderTree core

(gdb) bt
#0  0xf5afe6c2 in JSC::JSValue::tag (this=0x8) at ../../../JavaScriptCore/runtime/JSValue.h:584
#1  0xf5aff881 in JSC::JSValue::operator bool (this=0x8) at ../../../JavaScriptCore/runtime/JSValue.h:523
#2  0xf5eca527 in JSC::MarkStack::append (this=0x81940a8, value=@0x8) at ../../../JavaScriptCore/runtime/JSCell.h:361
#3  0xf6ad7387 in JSC::NativeErrorConstructor::markChildren (this=0xe92ff980, markStack=@0x81940a8) at ../../../JavaScriptCore/runtime/NativeErrorConstructor.cpp:80
#4  0xf6a879e4 in JSC::MarkStack::markChildren (this=0x81940a8, cell=0xe92ff980) at ../../../JavaScriptCore/runtime/JSArray.h:230
#5  0xf6a87d08 in JSC::MarkStack::drain (this=0x81940a8) at ../../../JavaScriptCore/runtime/JSArray.h:272
#6  0xf6a8022d in JSC::Heap::markConservatively (this=0x8193fb4, markStack=@0x81940a8, start=0xffffb76c, end=0xffffe000) at ../../../JavaScriptCore/runtime/Collector.cpp:701
#7  0xf6a804f4 in JSC::Heap::markCurrentThreadConservativelyInternal (this=0x8193fb4, markStack=@0x81940a8) at ../../../JavaScriptCore/runtime/Collector.cpp:712
#8  0xf6a8052b in JSC::Heap::markCurrentThreadConservatively (this=0x8193fb4, markStack=@0x81940a8) at ../../../JavaScriptCore/runtime/Collector.cpp:734
#9  0xf6a8054c in JSC::Heap::markStackObjectsConservatively (this=0x8193fb4, markStack=@0x81940a8) at ../../../JavaScriptCore/runtime/Collector.cpp:886
#10 0xf6a806a5 in JSC::Heap::markRoots (this=0x8193fb4) at ../../../JavaScriptCore/runtime/Collector.cpp:1026
#11 0xf6a8119f in JSC::Heap::reset (this=0x8193fb4) at ../../../JavaScriptCore/runtime/Collector.cpp:1163
#12 0xf6a814a6 in JSC::Heap::allocate (this=0x8193fb4, s=32) at ../../../JavaScriptCore/runtime/Collector.cpp:337
#13 0xf5b1b47f in JSC::JSCell::operator new (size=32, globalData=0x8193258) at ../../../JavaScriptCore/runtime/JSCell.h:171
#14 0xf5b1c8d7 in JSC::jsString (globalData=0x8193258, s=@0xffffbf00) at ../../../JavaScriptCore/runtime/JSString.h:513
#15 0xf5b1c939 in JSC::jsString (exec=0x82256b4, s=@0xffffbf00) at ../../../JavaScriptCore/runtime/JSString.h:552
#16 0xf6ad7de2 in NativeErrorPrototype (this=0xe92ffa00, exec=0x82256b4, globalObject=0xe92fc580, structure={m_ptr = 0xffffb9b8}, nameAndMessage=@0xffffbf00, constructor=0xe92ff980)
    at ../../../JavaScriptCore/runtime/NativeErrorPrototype.cpp:38
#17 0xf6ad7738 in NativeErrorConstructor (this=0xe92ff980, exec=0x82256b4, globalObject=0xe92fc580, structure={m_ptr = 0xffffbef8}, prototypeStructure={m_ptr = 0xffffbefc}, nameAndMessage=@0xffffbf00)
    at ../../../JavaScriptCore/runtime/NativeErrorConstructor.cpp:38
#18 0xf6ab9e52 in JSC::JSGlobalObject::reset (this=0xe92fc580, prototype={u = {asEncodedJSValue = -4677712576, asDouble = -nan(0xffffee92fc540), asBits = {payload = -382745280, tag = -2}, asPtr = {ptr = 0xe92fc540, tag = -2}}})
    at ../../../JavaScriptCore/runtime/JSGlobalObject.cpp:266
#19 0xf6abcd21 in JSC::JSGlobalObject::init (this=0xe92fc580, thisValue=0xe9280000) at ../../../JavaScriptCore/runtime/JSGlobalObject.cpp:149
#20 0xf5eca8fb in JSGlobalObject (this=0xe92fc580, structure={m_ptr = 0xffffc118}, data=0x8225660, thisValue=0xe9280000) at ../../../JavaScriptCore/runtime/JSGlobalObject.h:186
#21 0xf5eca9fe in JSDOMGlobalObject (this=0xe92fc580, structure={m_ptr = 0xffffc1b0}, data=0x8225660, thisValue=0xe9280000) at ../../../WebCore/bindings/js/JSDOMGlobalObject.cpp:46
#22 0xf5ed20cf in JSDOMWindowBase (this=0xe92fc580, structure={m_ptr = 0xffffc208}, window={m_ptr = 0xffffc204}, shell=0xe9280000) at ../../../WebCore/bindings/js/JSDOMWindowBase.cpp:56
#23 0xf5ca4a0a in JSDOMWindow (this=0xe92fc580, structure={m_ptr = 0xffffc284}, impl={m_ptr = 0xffffc28c}, shell=0xe9280000) at generated/JSDOMWindow.cpp:958
#24 0xf5edc9cd in WebCore::JSDOMWindowShell::setWindow (this=0xe9280000, domWindow={m_ptr = 0xffffc300}) at ../../../WebCore/bindings/js/JSDOMWindowShell.cpp:67
#25 0xf5f1bbbd in WebCore::ScriptController::clearWindowShell (this=0x8167970, goingIntoPageCache=false) at ../../../WebCore/bindings/js/ScriptController.cpp:204
#26 0xf63dd50a in WebCore::FrameLoader::clear (this=0x81676e0, clearWindowProperties=true, clearScriptObjects=true, clearFrameView=true) at ../../../WebCore/loader/FrameLoader.cpp:644
#27 0xf63cf9c6 in WebCore::DocumentWriter::begin (this=0x81677cc, url=@0x8167848, dispatch=false, origin=0x0) at ../../../WebCore/loader/DocumentWriter.cpp:125
#28 0xf63dcfa3 in WebCore::FrameLoader::receivedFirstData (this=0x81676e0) at ../../../WebCore/loader/FrameLoader.cpp:674
#29 0xf63dd396 in WebCore::FrameLoader::willSetEncoding (this=0x81676e0) at ../../../WebCore/loader/FrameLoader.cpp:1144
#30 0xf63ce995 in WebCore::DocumentWriter::setEncoding (this=0x81677cc, name=@0x816403c, userChosen=false) at ../../../WebCore/loader/DocumentWriter.cpp:236
#31 0xf675622f in WebCore::FrameLoaderClientQt::committedLoad (this=0x8163fe8, loader=0x81e56f0,
    data=0x82d7fa0 &quot;&lt;html&gt;\n&lt;head&gt;\n&lt;meta charset=&apos;utf-8&apos;&gt;\n&lt;style&gt;\n.pass {\n    font-weight: bold;\n    color: green;\n}\n.fail {\n    font-weight: bold;\n    color: red;\n}\n&lt;/style&gt;\n\n&lt;script&gt;\nif (window.layoutTestController)\n   &quot;..., length=2147) at ../../../WebKit/qt/WebCoreSupport/FrameLoaderClientQt.cpp:797
#32 0xf63d88d4 in WebCore::FrameLoader::committedLoad (this=0x81676e0, loader=0x81e56f0,
    data=0x82d7fa0 &quot;&lt;html&gt;\n&lt;head&gt;\n&lt;meta charset=&apos;utf-8&apos;&gt;\n&lt;style&gt;\n.pass {\n    font-weight: bold;\n    color: green;\n}\n.fail {\n    font-weight: bold;\n    color: red;\n}\n&lt;/style&gt;\n\n&lt;script&gt;\nif (window.layoutTestController)\n   &quot;..., length=2147) at ../../../WebCore/loader/FrameLoader.cpp:2761
#33 0xf63c70e5 in WebCore::DocumentLoader::commitLoad (this=0x81e56f0,
    data=0x82d7fa0 &quot;&lt;html&gt;\n&lt;head&gt;\n&lt;meta charset=&apos;utf-8&apos;&gt;\n&lt;style&gt;\n.pass {\n    font-weight: bold;\n    color: green;\n}\n.fail {\n    font-weight: bold;\n    color: red;\n}\n&lt;/style&gt;\n\n&lt;script&gt;\nif (window.layoutTestController)\n   &quot;..., length=2147) at ../../../WebCore/loader/DocumentLoader.cpp:280
#34 0xf63c7174 in WebCore::DocumentLoader::receivedData (this=0x81e56f0,
    data=0x82d7fa0 &quot;&lt;html&gt;\n&lt;head&gt;\n&lt;meta charset=&apos;utf-8&apos;&gt;\n&lt;style&gt;\n.pass {\n    font-weight: bold;\n    color: green;\n}\n.fail {\n    font-weight: bold;\n    color: red;\n}\n&lt;/style&gt;\n\n&lt;script&gt;\nif (window.layoutTestController)\n   &quot;..., length=2147) at ../../../WebCore/loader/DocumentLoader.cpp:292
#35 0xf63db49d in WebCore::FrameLoader::receivedData (this=0x81676e0,
    data=0x82d7fa0 &quot;&lt;html&gt;\n&lt;head&gt;\n&lt;meta charset=&apos;utf-8&apos;&gt;\n&lt;style&gt;\n.pass {\n    font-weight: bold;\n    color: green;\n}\n.fail {\n    font-weight: bold;\n    color: red;\n}\n&lt;/style&gt;\n\n&lt;script&gt;\nif (window.layoutTestController)\n   &quot;..., length=2147) at ../../../WebCore/loader/FrameLoader.cpp:1563
#36 0xf6409a08 in WebCore::MainResourceLoader::addData (this=0x83cccf0,
    data=0x82d7fa0 &quot;&lt;html&gt;\n&lt;head&gt;\n&lt;meta charset=&apos;utf-8&apos;&gt;\n&lt;style&gt;\n.pass {\n    font-weight: bold;\n    color: green;\n}\n.fail {\n    font-weight: bold;\n    color: red;\n}\n&lt;/style&gt;\n\n&lt;script&gt;\nif (window.layoutTestController)\n   &quot;..., length=2147, allAtOnce=false) at ../../../WebCore/loader/MainResourceLoader.cpp:149
#37 0xf64182f6 in WebCore::ResourceLoader::didReceiveData (this=0x83cccf0,
    data=0x82d7fa0 &quot;&lt;html&gt;\n&lt;head&gt;\n&lt;meta charset=&apos;utf-8&apos;&gt;\n&lt;style&gt;\n.pass {\n    font-weight: bold;\n    color: green;\n}\n.fail {\n    font-weight: bold;\n    color: red;\n}\n&lt;/style&gt;\n\n&lt;script&gt;\nif (window.layoutTestController)\n   &quot;..., length=2147, lengthReceived=2147, allAtOnce=false) at ../../../WebCore/loader/ResourceLoader.cpp:260
#38 0xf6408bcf in WebCore::MainResourceLoader::didReceiveData (this=0x83cccf0,
    data=0x82d7fa0 &quot;&lt;html&gt;\n&lt;head&gt;\n&lt;meta charset=&apos;utf-8&apos;&gt;\n&lt;style&gt;\n.pass {\n    font-weight: bold;\n    color: green;\n}\n.fail {\n    font-weight: bold;\n    color: red;\n}\n&lt;/style&gt;\n\n&lt;script&gt;\nif (window.layoutTestController)\n   &quot;..., length=2147, lengthReceived=2147, allAtOnce=false) at ../../../WebCore/loader/MainResourceLoader.cpp:420
#39 0xf64177fa in WebCore::ResourceLoader::didReceiveData (this=0x83cccf0,
    data=0x82d7fa0 &quot;&lt;html&gt;\n&lt;head&gt;\n&lt;meta charset=&apos;utf-8&apos;&gt;\n&lt;style&gt;\n.pass {\n    font-weight: bold;\n    color: green;\n}\n.fail {\n    font-weight: bold;\n    color: red;\n}\n&lt;/style&gt;\n\n&lt;script&gt;\nif (window.layoutTestController)\n   &quot;..., length=2147, lengthReceived=2147) at ../../../WebCore/loader/ResourceLoader.cpp:431
#40 0xf67183b9 in WebCore::QNetworkReplyHandler::forwardData (this=0x81c7b00) at ../../../WebCore/platform/network/qt/QNetworkReplyHandler.cpp:407
---Type &lt;return&gt; to continue, or q &lt;return&gt; to quit---
#41 0xf671a49d in WebCore::QNetworkReplyHandler::qt_metacall (this=0x81c7b00, _c=QMetaObject::InvokeMetaMethod, _id=3, _a=0x833d310) at ./moc_QNetworkReplyHandler.cpp:86
#42 0xf3d27435 in QMetaObject::metacall (object=0xe9259000, cl=QMetaObject::InvokeMetaMethod, idx=7, argv=0x833d310) at kernel/qmetaobject.cpp:237
#43 0xf3d31a36 in QMetaCallEvent::placeMetaCall (this=0x82781c0, object=0x81c7b00) at kernel/qobject.cpp:561
#44 0xf3d32fc3 in QObject::event (this=0x81c7b00, e=0x82781c0) at kernel/qobject.cpp:1240
#45 0xf3f930dc in QApplicationPrivate::notify_helper (this=0x811e990, receiver=0x81c7b00, e=0x82781c0) at kernel/qapplication.cpp:4300
#46 0xf3f99b22 in QApplication::notify (this=0xffffcfa4, receiver=0x81c7b00, e=0x82781c0) at kernel/qapplication.cpp:3704
#47 0xf3d21feb in QCoreApplication::notifyInternal (this=0xffffcfa4, receiver=0x81c7b00, event=0x82781c0) at kernel/qcoreapplication.cpp:704
#48 0xf3d22f4f in QCoreApplicationPrivate::sendPostedEvents (receiver=0x0, event_type=0, data=0x813c2e0) at ../../include/QtCore/../../src/corelib/kernel/qcoreapplication.h:215
#49 0xf3d230fd in QCoreApplication::sendPostedEvents (receiver=0x0, event_type=0) at kernel/qcoreapplication.cpp:1238
#50 0xf3d4ec5f in postEventSourceDispatch (s=0x8120e50) at ../../include/QtCore/../../src/corelib/kernel/qcoreapplication.h:220
#51 0xf321f1d8 in g_main_context_dispatch () from /usr/lib/libglib-2.0.so.0
#52 0xf3222873 in ?? () from /usr/lib/libglib-2.0.so.0
#53 0x08145d80 in ?? ()
#54 0x00000000 in ?? ()</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>260538</commentid>
    <comment_count>28</comment_count>
    <who name="Zoltan Herczeg">zherczeg</who>
    <bug_when>2010-08-05 05:32:15 -0700</bug_when>
    <thetext>We found two issues with this patch, but not sure how to fix them:

Issue 1) AlignedMemoryAllocator.h

WTF::Bitmap&lt;bitmapSize&gt; m_bitmap; is not cleared at the constructor, thus its initialization value is a memory garbage. Sometimes all bits are set to 1, and AlignedMemoryAllocator&lt;blockSize&gt;::allocate() fails, since m_bitmap.isFull() is true.

I can easly fix this with a m_bitmap.clearAll(), but I am not sure it is good to have a class without a default constructor. I feel the best would be the following constructor:

WTF::Bitmap::Bitmap(bool needsInitialization = true) {
    if (needsInitialization)
        clearAll();
}

We could still keep the performance advantage of uninitialized WTF::Bitmaps in some cases (not sure there are such cases), but we could not forget the initialization otherwise.

Issue 2) NativeErrorConstructor.cpp constructor

NativeErrorConstructor is a JSCell, which also allocates another JSCell in its constructor:

NativeErrorPrototype* prototype = new (exec) NativeErrorPrototype(...);

At this point, the virtual pointer (vptr) of NativeErrorConstructor is copied to the cell buffer, but the object itself is NOT initialized at this point. If the &quot;new NativeErrorPrototype&quot; calls the garbage collector (it is possible, since it allocates a new cell), the NativeErrorConstructor::markChildren called for an uninitialized NativeErrorConstructor, which leads to a segmentation fault.

There are several possible solutions for this bug, like checking m_errorStructure in markChildren (setting it to NULL before &quot;new NativeErrorPrototype&quot;) or passing the &quot;new NativeErrorPrototype&quot; to the constructor as an argument.

I want to fix these bugs myself, but I would like to hear your opinion before I submit patches.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>260542</commentid>
    <comment_count>29</comment_count>
    <who name="Zoltan Herczeg">zherczeg</who>
    <bug_when>2010-08-05 05:41:07 -0700</bug_when>
    <thetext>(In reply to comment #28)
&gt; We found two issues with this patch, but not sure how to fix them:

Ok, not the patch itself. This patch can trigger other, hidden bugs.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>260642</commentid>
    <comment_count>30</comment_count>
      <attachid>62985</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2010-08-05 08:57:04 -0700</bug_when>
    <thetext>Comment on attachment 62985
Patch

Cleared Darin Adler&apos;s review+ from obsolete attachment 62985 so that this bug does not appear in http://webkit.org/pending-commit.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>260645</commentid>
    <comment_count>31</comment_count>
    <who name="Nathan Lawrence">nlawrence</who>
    <bug_when>2010-08-05 09:00:28 -0700</bug_when>
    <thetext>(In reply to comment #28)
&gt; We found two issues with this patch, but not sure how to fix them:
&gt; 
&gt; Issue 1) AlignedMemoryAllocator.h

Great catch here.  I definitely agree that it should be in the constructor.

&gt; Issue 2) NativeErrorConstructor.cpp constructor

Both options are good.  We could also put m_errorStructure with the construction of the NativeErrorPrototype object in the initializer list since there doesn&apos;t seem to be a reason why the puts need to happen before m_errorStructure is initialized.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>262113</commentid>
    <comment_count>32</comment_count>
    <who name="Zoltan Herczeg">zherczeg</who>
    <bug_when>2010-08-09 05:41:57 -0700</bug_when>
    <thetext>I suggest that m_errorStructure should be set to 0 before &quot;new (exec) NativeErrorPrototype&quot; and this could be tested in markChildren. This could be part of the patch above, since markChildren has not yet implemented.

A constructor -&gt; create change would require far more changes, but I could do that if you think that is better.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>59702</attachid>
            <date>2010-06-24 14:25:22 -0700</date>
            <delta_ts>2010-06-28 11:39:41 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>references.patch</filename>
            <type>text/plain</type>
            <size>1655</size>
            <attacher name="Nathan Lawrence">nlawrence</attacher>
            
              <data encoding="base64">SW5kZXg6IEphdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDYxNzgzKQorKysgSmF2YVNjcmlwdENvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsNDEgQEAKKzIwMTAtMDYtMjQgIE5hdGhhbiBM
YXdyZW5jZSAgPG5sYXdyZW5jZUBhcHBsZS5jb20+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9C
T0RZIChPT1BTISkuCisKKyAgICAgICAgUmVmYWN0b3JpbmcgTWFya1N0YWNrOjphcHBlbmQgdG8g
dGFrZSBhIHJlZmVyZW5jZS4gIFRoaXMgaXMgaW4KKyAgICAgICAgcHJlcGFyYXRpb24gZm9yIG1v
dmFibGUgb2JqZWN0cyB3aGVuIHdlIHdpbGwgbmVlZCB0byB1cGRhdGUgcG9pbnRlcnMuCisKKyAg
ICAgICAgVGhpcyBzaG91bGQgbm90IGhhdmUgcGVyZm9ybWFuY2UgaW1wbGljYXRpb25zLgorCisg
ICAgICAgICogaW50ZXJwcmV0ZXIvUmVnaXN0ZXIuaDoKKyAgICAgICAgKEpTQzo6UmVnaXN0ZXI6
OmpzVmFsdWUpOgorICAgICAgICAqIHJ1bnRpbWUvQ29sbGVjdG9yLmNwcDoKKyAgICAgICAgKEpT
Qzo6SGVhcDo6bWFya0NvbnNlcnZhdGl2ZWx5KToKKyAgICAgICAgKiBydW50aW1lL0pTQXJyYXku
aDoKKyAgICAgICAgKEpTQzo6TWFya1N0YWNrOjpkcmFpbik6CisgICAgICAgICogcnVudGltZS9K
U0NlbGwuaDoKKyAgICAgICAgKEpTQzo6SlNDZWxsOjppc01vdmVkKToKKyAgICAgICAgKEpTQzo6
SlNWYWx1ZTo6YXNDZWxsKToKKyAgICAgICAgKEpTQzo6TWFya1N0YWNrOjphcHBlbmRJbnRlcm5h
bCk6CisgICAgICAgIChKU0M6Ok1hcmtTdGFjazo6YXBwZW5kKToKKyAgICAgICAgKEpTQzo6TWFy
a1N0YWNrOjphcHBlbmRWYWx1ZXMpOgorICAgICAgICAoSlNDOjpKU1ZhbHVlOjppc01vdmVkKToK
KyAgICAgICAgKiBydW50aW1lL0pTR2xvYmFsT2JqZWN0LmNwcDoKKyAgICAgICAgKEpTQzo6bWFy
a0lmTmVlZGVkKToKKyAgICAgICAgKiBydW50aW1lL0pTT05PYmplY3QuY3BwOgorICAgICAgICAo
SlNDOjpTdHJpbmdpZmllcjo6SG9sZGVyOjpvYmplY3QpOgorICAgICAgICAqIHJ1bnRpbWUvSlNP
YmplY3QuaDoKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OnByb3RvdHlwZSk6CisgICAgICAgICog
cnVudGltZS9KU1ZhbHVlLmg6CisgICAgICAgIChKU0M6OkpTVmFsdWU6OmRlY29kZSk6CisgICAg
ICAgICogcnVudGltZS9NYXJrU3RhY2suaDoKKyAgICAgICAgKiBydW50aW1lL05hdGl2ZUVycm9y
Q29uc3RydWN0b3IuY3BwOgorICAgICAgICAoSlNDOjpOYXRpdmVFcnJvckNvbnN0cnVjdG9yOjpt
YXJrQ2hpbGRyZW4pOgorICAgICAgICAoSlNDOjpOYXRpdmVFcnJvckNvbnN0cnVjdG9yOjptYXJr
Q2hpbGRyZW5EaXJlY3QpOgorICAgICAgICAqIHJ1bnRpbWUvTmF0aXZlRXJyb3JDb25zdHJ1Y3Rv
ci5oOgorICAgICAgICAqIHJ1bnRpbWUvU3RydWN0dXJlLmg6CisgICAgICAgIChKU0M6OlN0cnVj
dHVyZTo6c3RvcmVkUHJvdG90eXBlKToKKwogIDIwMTAtMDYtMjEgIE5hdGhhbiBMYXdyZW5jZSAg
PG5sYXdyZW5jZUBhcHBsZS5jb20+CiAKICAgICAgICAgIFJldmlld2VkIGJ5IEdlb2ZmIEdhcmVu
Lgo=
</data>
<flag name="review"
          id="46710"
          type_id="1"
          status="-"
          setter="ggaren"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>59914</attachid>
            <date>2010-06-28 11:39:41 -0700</date>
            <delta_ts>2010-06-28 11:44:11 -0700</delta_ts>
            <desc>Patch (now with code!)</desc>
            <filename>references.patch</filename>
            <type>text/plain</type>
            <size>16610</size>
            <attacher name="Nathan Lawrence">nlawrence</attacher>
            
              <data encoding="base64">SW5kZXg6IEphdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDYyMDE4KQorKysgSmF2YVNjcmlwdENvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsNDEgQEAKKzIwMTAtMDYtMjggIE5hdGhhbiBM
YXdyZW5jZSAgPG5sYXdyZW5jZUBhcHBsZS5jb20+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9C
T0RZIChPT1BTISkuCisKKyAgICAgICAgUmVmYWN0b3JpbmcgTWFya1N0YWNrOjphcHBlbmQgdG8g
dGFrZSBhIHJlZmVyZW5jZS4gIFRoaXMgaXMgaW4KKyAgICAgICAgcHJlcGFyYXRpb24gZm9yIG1v
dmFibGUgb2JqZWN0cyB3aGVuIHdlIHdpbGwgbmVlZCB0byB1cGRhdGUgcG9pbnRlcnMuCisgICAg
ICAgIGh0dHA6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTQxMTc3CisKKyAgICAg
ICAgKiBieXRlY29kZS9Db2RlQmxvY2suY3BwOgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6Om1h
cmtBZ2dyZWdhdGUpOgorICAgICAgICAqIHJ1bnRpbWUvQ29sbGVjdG9yLmNwcDoKKyAgICAgICAg
KEpTQzo6SGVhcDo6bWFya0NvbnNlcnZhdGl2ZWx5KToKKyAgICAgICAgKiBydW50aW1lL0pTQXJy
YXkuaDoKKyAgICAgICAgKEpTQzo6TWFya1N0YWNrOjpkcmFpbik6CisgICAgICAgICogcnVudGlt
ZS9KU0NlbGwuaDoKKyAgICAgICAgKEpTQzo6SlNDZWxsOjppc01vdmVkKToKKyAgICAgICAgKEpT
Qzo6SlNWYWx1ZTo6YXNDZWxsKToKKyAgICAgICAgKEpTQzo6TWFya1N0YWNrOjphcHBlbmRJbnRl
cm5hbCk6CisgICAgICAgIChKU0M6Ok1hcmtTdGFjazo6YXBwZW5kKToKKyAgICAgICAgKEpTQzo6
TWFya1N0YWNrOjphcHBlbmRWYWx1ZXMpOgorICAgICAgICAoSlNDOjpKU1ZhbHVlOjppc01vdmVk
KToKKyAgICAgICAgKiBydW50aW1lL0pTR2xvYmFsT2JqZWN0LmNwcDoKKyAgICAgICAgKEpTQzo6
bWFya0lmTmVlZGVkKToKKyAgICAgICAgKiBydW50aW1lL0pTT05PYmplY3QuY3BwOgorICAgICAg
ICAoSlNDOjpTdHJpbmdpZmllcjo6SG9sZGVyOjpvYmplY3QpOgorICAgICAgICAqIHJ1bnRpbWUv
SlNPYmplY3QuaDoKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OnByb3RvdHlwZSk6CisgICAgICAg
ICogcnVudGltZS9KU1N0YXRpY1Njb3BlT2JqZWN0LmNwcDoKKyAgICAgICAgKEpTQzo6SlNTdGF0
aWNTY29wZU9iamVjdDo6bWFya0NoaWxkcmVuKToKKyAgICAgICAgKiBydW50aW1lL0pTVmFsdWUu
aDoKKyAgICAgICAgKiBydW50aW1lL01hcmtTdGFjay5oOgorICAgICAgICAqIHJ1bnRpbWUvTmF0
aXZlRXJyb3JDb25zdHJ1Y3Rvci5jcHA6CisgICAgICAgIChKU0M6Ok5hdGl2ZUVycm9yQ29uc3Ry
dWN0b3I6Om1hcmtDaGlsZHJlbik6CisgICAgICAgIChKU0M6Ok5hdGl2ZUVycm9yQ29uc3RydWN0
b3I6Om1hcmtDaGlsZHJlbkRpcmVjdCk6CisgICAgICAgICogcnVudGltZS9OYXRpdmVFcnJvckNv
bnN0cnVjdG9yLmg6CisgICAgICAgICogcnVudGltZS9TdHJ1Y3R1cmUuaDoKKyAgICAgICAgKEpT
Qzo6U3RydWN0dXJlOjpzdG9yZWRQcm90b3R5cGUpOgorCiAyMDEwLTA2LTI4ICBMdWNhcyBEZSBN
YXJjaGkgIDxsdWNhcy5kZW1hcmNoaUBwcm9mdXNpb24ubW9iaT4KIAogICAgICAgICBVbnJldmll
d2VkIGJ1aWxkIGZpeC4KSW5kZXg6IEphdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmNwcAko
cmV2aXNpb24gNjIwMTUpCisrKyBKYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0xNTEyLDcgKzE1MTIsNyBAQCB2b2lkIENvZGVCbG9jazo6cmVm
U3RydWN0dXJlcyhJbnN0cnVjdGlvCiB2b2lkIENvZGVCbG9jazo6bWFya0FnZ3JlZ2F0ZShNYXJr
U3RhY2smIG1hcmtTdGFjaykKIHsKICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1fY29uc3Rh
bnRSZWdpc3RlcnMuc2l6ZSgpOyArK2kpCi0gICAgICAgIG1hcmtTdGFjay5hcHBlbmQobV9jb25z
dGFudFJlZ2lzdGVyc1tpXS5qc1ZhbHVlKCkpOworICAgICAgICBtYXJrU3RhY2suYXBwZW5kKG1f
Y29uc3RhbnRSZWdpc3RlcnNbaV0pOwogICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbV9mdW5j
dGlvbkV4cHJzLnNpemUoKTsgKytpKQogICAgICAgICBtX2Z1bmN0aW9uRXhwcnNbaV0tPm1hcmtB
Z2dyZWdhdGUobWFya1N0YWNrKTsKICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1fZnVuY3Rp
b25EZWNscy5zaXplKCk7ICsraSkKSW5kZXg6IEphdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ29sbGVj
dG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NvbGxlY3Rvci5j
cHAJKHJldmlzaW9uIDYyMDE1KQorKysgSmF2YVNjcmlwdENvcmUvcnVudGltZS9Db2xsZWN0b3Iu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC03NTksNyArNzU5LDggQEAgdm9pZCBIZWFwOjptYXJrQ29u
c2VydmF0aXZlbHkoTWFya1N0YWNrJgogICAgICAgICAgICAgZm9yIChzaXplX3QgYmxvY2sgPSAw
OyBibG9jayA8IHVzZWRCbG9ja3M7IGJsb2NrKyspIHsKICAgICAgICAgICAgICAgICBpZiAoYmxv
Y2tzW2Jsb2NrXSAhPSBibG9ja0FkZHIpCiAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwot
ICAgICAgICAgICAgICAgIG1hcmtTdGFjay5hcHBlbmQocmVpbnRlcnByZXRfY2FzdDxKU0NlbGwq
Pih4QXNCaXRzKSk7CisgICAgICAgICAgICAgICAgSlNDZWxsICpjZWxsID0gcmVpbnRlcnByZXRf
Y2FzdDxKU0NlbGwqPih4QXNCaXRzKTsKKyAgICAgICAgICAgICAgICBtYXJrU3RhY2suYXBwZW5k
KGNlbGwpOwogICAgICAgICAgICAgICAgIG1hcmtTdGFjay5kcmFpbigpOwogICAgICAgICAgICAg
fQogICAgICAgICB9CkluZGV4OiBKYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQXJyYXkuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBKYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQXJyYXkuaAkocmV2aXNpb24gNjIw
MTUpCisrKyBKYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQXJyYXkuaAkod29ya2luZyBjb3B5KQpA
QCAtMTkzLDggKzE5Myw3IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICAgICAgICAgIEpTVmFs
dWUgdmFsdWUgPSAqY3VycmVudC5tX3ZhbHVlczsKICAgICAgICAgICAgICAgICBjdXJyZW50Lm1f
dmFsdWVzKys7CiAKLSAgICAgICAgICAgICAgICBKU0NlbGwqIGNlbGw7Ci0gICAgICAgICAgICAg
ICAgaWYgKCF2YWx1ZSB8fCAhdmFsdWUuaXNDZWxsKCkgfHwgSGVhcDo6aXNDZWxsTWFya2VkKGNl
bGwgPSB2YWx1ZS5hc0NlbGwoKSkpIHsKKyAgICAgICAgICAgICAgICBpZiAoIXZhbHVlIHx8ICF2
YWx1ZS5pc0NlbGwoKSB8fCBIZWFwOjppc0NlbGxNYXJrZWQodmFsdWUuYXNDZWxsKCkpKSB7CiAg
ICAgICAgICAgICAgICAgICAgIGlmIChjdXJyZW50Lm1fdmFsdWVzID09IGVuZCkgewogICAgICAg
ICAgICAgICAgICAgICAgICAgbV9tYXJrU2V0cy5yZW1vdmVMYXN0KCk7CiAgICAgICAgICAgICAg
ICAgICAgICAgICBjb250aW51ZTsKQEAgLTIwMiw2ICsyMDEsNyBAQCBuYW1lc3BhY2UgSlNDIHsK
ICAgICAgICAgICAgICAgICAgICAgZ290byBmaW5kTmV4dFVubWFya2VkTnVsbFZhbHVlOwogICAg
ICAgICAgICAgICAgIH0KIAorICAgICAgICAgICAgICAgIEpTQ2VsbComIGNlbGwgPSB2YWx1ZS5h
c0NlbGwoKTsKICAgICAgICAgICAgICAgICBIZWFwOjptYXJrQ2VsbChjZWxsKTsKICAgICAgICAg
ICAgICAgICBpZiAoY2VsbC0+c3RydWN0dXJlKCktPnR5cGVJbmZvKCkudHlwZSgpIDwgQ29tcG91
bmRUeXBlKSB7CiAgICAgICAgICAgICAgICAgICAgIGlmIChjdXJyZW50Lm1fdmFsdWVzID09IGVu
ZCkgewpJbmRleDogSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0NlbGwuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBKYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQ2VsbC5oCShyZXZpc2lvbiA2MjAxNSkKKysrIEph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNDZWxsLmgJKHdvcmtpbmcgY29weSkKQEAgLTk3LDYgKzk3
LDggQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHZvaWQqIG9wZXJhdG9yIG5ldyhzaXplX3Qs
IHZvaWQqIHBsYWNlbWVudE5ld0Rlc3RpbmF0aW9uKSB7IHJldHVybiBwbGFjZW1lbnROZXdEZXN0
aW5hdGlvbjsgfQogCiAgICAgICAgIHZpcnR1YWwgdm9pZCBtYXJrQ2hpbGRyZW4oTWFya1N0YWNr
Jik7CisKKyAgICAgICAgdmlydHVhbCBib29sIGlzTW92ZWQoKSBjb25zdCB7IHJldHVybiBmYWxz
ZTsgfQogI2lmIEVOQUJMRShKU0NfWk9NQklFUykKICAgICAgICAgdmlydHVhbCBib29sIGlzWm9t
YmllKCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KICNlbmRpZgpAQCAtMjM3LDcgKzIzOSwxMyBA
QCBuYW1lc3BhY2UgSlNDIHsKICAgICB9CiAKICNpZiAhVVNFKEpTVkFMVUUzMl82NCkKLSAgICBB
TFdBWVNfSU5MSU5FIEpTQ2VsbCogSlNWYWx1ZTo6YXNDZWxsKCkgY29uc3QKKyAgICBBTFdBWVNf
SU5MSU5FIEpTQ2VsbComIEpTVmFsdWU6OmFzQ2VsbCgpCisgICAgeworICAgICAgICBBU1NFUlQo
aXNDZWxsKCkpOworICAgICAgICByZXR1cm4gbV9wdHI7CisgICAgfQorCisgICAgQUxXQVlTX0lO
TElORSBKU0NlbGwqIGNvbnN0JiBKU1ZhbHVlOjphc0NlbGwoKSBjb25zdAogICAgIHsKICAgICAg
ICAgQVNTRVJUKGlzQ2VsbCgpKTsKICAgICAgICAgcmV0dXJuIG1fcHRyOwpAQCAtMzI5LDIyICsz
MzcsNTIgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHJldHVybiBpc0NlbGwoKSA/IGFzQ2Vs
bCgpLT50b1RoaXNPYmplY3QoZXhlYykgOiB0b1RoaXNPYmplY3RTbG93Q2FzZShleGVjKTsKICAg
ICB9CiAKLSAgICBBTFdBWVNfSU5MSU5FIHZvaWQgTWFya1N0YWNrOjphcHBlbmQoSlNDZWxsKiBj
ZWxsKQorICAgIGlubGluZSB2b2lkIE1hcmtTdGFjazo6YXBwZW5kSW50ZXJuYWwoSlNDZWxsKiYg
Y2VsbCkKICAgICB7CiAgICAgICAgIEFTU0VSVCghbV9pc0NoZWNraW5nRm9yRGVmYXVsdE1hcmtW
aW9sYXRpb24pOwogICAgICAgICBBU1NFUlQoY2VsbCk7Ci0gICAgICAgIGlmIChIZWFwOjppc0Nl
bGxNYXJrZWQoY2VsbCkpCi0gICAgICAgICAgICByZXR1cm47CisgICAgICAgIGJvb2wgbWFya2Vk
ID0gSGVhcDo6aXNDZWxsTWFya2VkKGNlbGwpOwogICAgICAgICBIZWFwOjptYXJrQ2VsbChjZWxs
KTsKKyAgICAgICAgaWYgKG1hcmtlZCkKKyAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgaWYg
KGNlbGwtPnN0cnVjdHVyZSgpLT50eXBlSW5mbygpLnR5cGUoKSA+PSBDb21wb3VuZFR5cGUpCiAg
ICAgICAgICAgICBtX3ZhbHVlcy5hcHBlbmQoY2VsbCk7CiAgICAgfQogCi0gICAgQUxXQVlTX0lO
TElORSB2b2lkIE1hcmtTdGFjazo6YXBwZW5kKEpTVmFsdWUgdmFsdWUpCisgICAgdGVtcGxhdGU8
dHlwZW5hbWUgVD4KKyAgICBBTFdBWVNfSU5MSU5FIHZvaWQgTWFya1N0YWNrOjphcHBlbmQoVCom
IGNlbGwpCisgICAgeworICAgICAgICAvKiBSZWZlcmVuY2VzIGluIEMrKyBhcmUgbm90IGNvdmFy
aWFudCwgc28gd2UgZnVkZ2UgYXJvdW5kIGl0IHdpdGgKKyAgICAgICAgICogdGhpcyBub25zZW5z
ZS4KKyAgICAgICAgICovCisgICAgICAgIEpTQ2VsbComIHB0ciA9ICpyZWludGVycHJldF9jYXN0
PEpTQ2VsbCoqPigmY2VsbCk7CisgICAgICAgIGFwcGVuZEludGVybmFsKHB0cik7CisgICAgfQor
CisgICAgQUxXQVlTX0lOTElORSB2b2lkIE1hcmtTdGFjazo6YXBwZW5kKEpTVmFsdWUmIHZhbHVl
KQogICAgIHsKICAgICAgICAgQVNTRVJUKHZhbHVlKTsKICAgICAgICAgaWYgKHZhbHVlLmlzQ2Vs
bCgpKQotICAgICAgICAgICAgYXBwZW5kKHZhbHVlLmFzQ2VsbCgpKTsKKyAgICAgICAgICAgIGFw
cGVuZEludGVybmFsKHZhbHVlLmFzQ2VsbCgpKTsKKyAgICB9CisKKyAgICBBTFdBWVNfSU5MSU5F
IHZvaWQgTWFya1N0YWNrOjphcHBlbmQoUmVnaXN0ZXImIHJlZykKKyAgICB7CisgICAgICAgIEpT
VmFsdWUgdmFsdWUgPSByZWcuanNWYWx1ZSgpOworICAgICAgICBhcHBlbmQodmFsdWUpOworICAg
ICAgICByZWcgPSB2YWx1ZTsKKyAgICB9CisKKyAgICBBTFdBWVNfSU5MSU5FIHZvaWQgTWFya1N0
YWNrOjphcHBlbmRWYWx1ZXMoUmVnaXN0ZXIqIHZhbHVlcywgc2l6ZV90IGNvdW50LCBNYXJrU2V0
UHJvcGVydGllcyBwcm9wZXJ0aWVzKQorICAgIHsKKyAgICAgICAgYXBwZW5kVmFsdWVzKHJlaW50
ZXJwcmV0X2Nhc3Q8SlNWYWx1ZSo+KHZhbHVlcyksIGNvdW50LCBwcm9wZXJ0aWVzKTsKKyAgICB9
CisKKyAgICBBTFdBWVNfSU5MSU5FIHZvaWQgTWFya1N0YWNrOjphcHBlbmRWYWx1ZXMoSlNWYWx1
ZSogdmFsdWVzLCBzaXplX3QgY291bnQsIE1hcmtTZXRQcm9wZXJ0aWVzKQorICAgIHsKKyAgICAg
ICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBjb3VudDsgKytpKQorICAgICAgICAgICAgaWYgKHZh
bHVlc1tpXSkKKyAgICAgICAgICAgICAgICBhcHBlbmQodmFsdWVzW2ldKTsKICAgICB9CiAKICAg
ICBpbmxpbmUgSGVhcCogSGVhcDo6aGVhcChKU1ZhbHVlIHYpCkBAIC0zNTksNiArMzk3LDExIEBA
IG5hbWVzcGFjZSBKU0MgewogICAgICAgICByZXR1cm4gY2VsbEJsb2NrKGMpLT5oZWFwOwogICAg
IH0KICAgICAKKyAgICBpbmxpbmUgYm9vbCBKU1ZhbHVlOjppc01vdmVkKCkgY29uc3QKKyAgICB7
CisgICAgICAgIHJldHVybiBpc0NlbGwoKSAmJiBhc0NlbGwoKSAmJiBhc0NlbGwoKS0+aXNNb3Zl
ZCgpOworICAgIH0KKwogI2lmIEVOQUJMRShKU0NfWk9NQklFUykKICAgICBpbmxpbmUgYm9vbCBK
U1ZhbHVlOjppc1pvbWJpZSgpIGNvbnN0CiAgICAgewpJbmRleDogSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9KU0dsb2JhbE9iamVjdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9KU0dsb2JhbE9iamVjdC5jcHAJKHJldmlzaW9uIDYyMDE1KQorKysgSmF2YVNjcmlwdENv
cmUvcnVudGltZS9KU0dsb2JhbE9iamVjdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTgwLDEzICs4
MCwxNSBAQCBzdGF0aWMgY29uc3QgaW50IGluaXRpYWxUaWNrQ291bnRUaHJlc2hvCiAvLyBQcmVm
ZXJyZWQgbnVtYmVyIG9mIG1pbGxpc2Vjb25kcyBiZXR3ZWVuIGVhY2ggdGltZW91dCBjaGVjawog
c3RhdGljIGNvbnN0IGludCBwcmVmZXJyZWRTY3JpcHRDaGVja1RpbWVJbnRlcnZhbCA9IDEwMDA7
CiAKLXN0YXRpYyBpbmxpbmUgdm9pZCBtYXJrSWZOZWVkZWQoTWFya1N0YWNrJiBtYXJrU3RhY2ss
IEpTVmFsdWUgdikKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+CitzdGF0aWMgdm9pZCBtYXJrSWZOZWVk
ZWQoTWFya1N0YWNrJiBtYXJrU3RhY2ssIFQmIHYpCiB7CiAgICAgaWYgKHYpCiAgICAgICAgIG1h
cmtTdGFjay5hcHBlbmQodik7CiB9CiAKLXN0YXRpYyBpbmxpbmUgdm9pZCBtYXJrSWZOZWVkZWQo
TWFya1N0YWNrJiBtYXJrU3RhY2ssIGNvbnN0IFJlZlB0cjxTdHJ1Y3R1cmU+JiBzKQordGVtcGxh
dGU8Pgorc3RhdGljIHZvaWQgbWFya0lmTmVlZGVkPD4oTWFya1N0YWNrJiBtYXJrU3RhY2ssIFJl
ZlB0cjxTdHJ1Y3R1cmU+JiBzKQogewogICAgIGlmIChzKQogICAgICAgICBtYXJrSWZOZWVkZWQo
bWFya1N0YWNrLCBzLT5zdG9yZWRQcm90b3R5cGUoKSk7CkluZGV4OiBKYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0pTT05PYmplY3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEphdmFTY3JpcHRDb3JlL3J1bnRp
bWUvSlNPTk9iamVjdC5jcHAJKHJldmlzaW9uIDYyMDE1KQorKysgSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9KU09OT2JqZWN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtODIsMTIgKzgyLDEzIEBAIHBy
aXZhdGU6CiAgICAgcHVibGljOgogICAgICAgICBIb2xkZXIoSlNPYmplY3QqKTsKIAotICAgICAg
ICBKU09iamVjdCogb2JqZWN0KCkgY29uc3QgeyByZXR1cm4gbV9vYmplY3Q7IH0KKyAgICAgICAg
SlNPYmplY3QqJiBvYmplY3QoKSB7IHJldHVybiBtX29iamVjdDsgfQorICAgICAgICBKU09iamVj
dCogY29uc3QmIG9iamVjdCgpIGNvbnN0IHsgcmV0dXJuIG1fb2JqZWN0OyB9CiAKICAgICAgICAg
Ym9vbCBhcHBlbmROZXh0UHJvcGVydHkoU3RyaW5naWZpZXImLCBTdHJpbmdCdWlsZGVyJik7CiAK
ICAgICBwcml2YXRlOgotICAgICAgICBKU09iamVjdCogY29uc3QgbV9vYmplY3Q7CisgICAgICAg
IEpTT2JqZWN0KiBtX29iamVjdDsKICAgICAgICAgY29uc3QgYm9vbCBtX2lzQXJyYXk7CiAgICAg
ICAgIGJvb2wgbV9pc0pTQXJyYXk7CiAgICAgICAgIHVuc2lnbmVkIG1faW5kZXg7CkluZGV4OiBK
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTT2JqZWN0LmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gSmF2YVNjcmlw
dENvcmUvcnVudGltZS9KU09iamVjdC5oCShyZXZpc2lvbiA2MjAxNSkKKysrIEphdmFTY3JpcHRD
b3JlL3J1bnRpbWUvSlNPYmplY3QuaAkod29ya2luZyBjb3B5KQpAQCAtODYsNyArODYsNyBAQCBu
YW1lc3BhY2UgSlNDIHsKICAgICAgICAgLy8gaW4gdGhlIGNsYXNzIGFzIGl0IHJlc3VsdHMgaW4g
dGhlIHZ0YWJsZSBiZWluZyBnZW5lcmF0ZWQgYXMgYSB3ZWFrIHN5bWJvbAogICAgICAgICB2aXJ0
dWFsIH5KU09iamVjdCgpOwogCi0gICAgICAgIEpTVmFsdWUgcHJvdG90eXBlKCkgY29uc3Q7Cisg
ICAgICAgIEpTVmFsdWUmIHByb3RvdHlwZSgpIGNvbnN0OwogICAgICAgICB2b2lkIHNldFByb3Rv
dHlwZShKU1ZhbHVlIHByb3RvdHlwZSk7CiAgICAgICAgIGJvb2wgc2V0UHJvdG90eXBlV2l0aEN5
Y2xlQ2hlY2soSlNWYWx1ZSBwcm90b3R5cGUpOwogICAgICAgICAKQEAgLTMxMSw3ICszMTEsNyBA
QCBpbmxpbmUgSlNPYmplY3Q6On5KU09iamVjdCgpCiAgICAgbV9zdHJ1Y3R1cmUtPmRlcmVmKCk7
CiB9CiAKLWlubGluZSBKU1ZhbHVlIEpTT2JqZWN0Ojpwcm90b3R5cGUoKSBjb25zdAoraW5saW5l
IEpTVmFsdWUmIEpTT2JqZWN0Ojpwcm90b3R5cGUoKSBjb25zdAogewogICAgIHJldHVybiBtX3N0
cnVjdHVyZS0+c3RvcmVkUHJvdG90eXBlKCk7CiB9CkluZGV4OiBKYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0pTU3RhdGljU2NvcGVPYmplY3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEphdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvSlNTdGF0aWNTY29wZU9iamVjdC5jcHAJKHJldmlzaW9uIDYyMDE1KQorKysgSmF2
YVNjcmlwdENvcmUvcnVudGltZS9KU1N0YXRpY1Njb3BlT2JqZWN0LmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMzQsNyArMzQsNyBAQCBBU1NFUlRfQ0xBU1NfRklUU19JTl9DRUxMKEpTU3RhdGljU2Nv
cGVPCiB2b2lkIEpTU3RhdGljU2NvcGVPYmplY3Q6Om1hcmtDaGlsZHJlbihNYXJrU3RhY2smIG1h
cmtTdGFjaykKIHsKICAgICBKU1ZhcmlhYmxlT2JqZWN0OjptYXJrQ2hpbGRyZW4obWFya1N0YWNr
KTsKLSAgICBtYXJrU3RhY2suYXBwZW5kKGQoKS0+cmVnaXN0ZXJTdG9yZS5qc1ZhbHVlKCkpOwor
ICAgIG1hcmtTdGFjay5hcHBlbmQoZCgpLT5yZWdpc3RlclN0b3JlKTsKIH0KIAogSlNPYmplY3Qq
IEpTU3RhdGljU2NvcGVPYmplY3Q6OnRvVGhpc09iamVjdChFeGVjU3RhdGUqIGV4ZWMpIGNvbnN0
CkluZGV4OiBKYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTVmFsdWUuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBK
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTVmFsdWUuaAkocmV2aXNpb24gNjIwMTUpCisrKyBKYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0pTVmFsdWUuaAkod29ya2luZyBjb3B5KQpAQCAtMTY3LDYgKzE2
Nyw3IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICB1aW50MzJfdCB0b1VJbnQzMihFeGVjU3Rh
dGUqKSBjb25zdDsKICAgICAgICAgdWludDMyX3QgdG9VSW50MzIoRXhlY1N0YXRlKiwgYm9vbCYg
b2spIGNvbnN0OwogCisgICAgICAgIGJvb2wgaXNNb3ZlZCgpIGNvbnN0OwogI2lmIEVOQUJMRShK
U0NfWk9NQklFUykKICAgICAgICAgYm9vbCBpc1pvbWJpZSgpIGNvbnN0OwogI2VuZGlmCkBAIC0x
OTgsNyArMTk5LDggQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIEpTVmFsdWUgZ2V0SlNOdW1i
ZXIoKTsgLy8gSlNWYWx1ZSgpIGlmIHRoaXMgaXMgbm90IGEgSlNOdW1iZXIgb3IgbnVtYmVyIG9i
amVjdAogCiAgICAgICAgIGJvb2wgaXNDZWxsKCkgY29uc3Q7Ci0gICAgICAgIEpTQ2VsbCogYXND
ZWxsKCkgY29uc3Q7CisgICAgICAgIEpTQ2VsbComIGFzQ2VsbCgpOworICAgICAgICBKU0NlbGwq
IGNvbnN0JiBhc0NlbGwoKSBjb25zdDsKICAgICAgICAgYm9vbCBpc1ZhbGlkQ2FsbGVlKCk7CiAK
ICNpZm5kZWYgTkRFQlVHCkluZGV4OiBKYXZhU2NyaXB0Q29yZS9ydW50aW1lL01hcmtTdGFjay5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIEphdmFTY3JpcHRDb3JlL3J1bnRpbWUvTWFya1N0YWNrLmgJKHJldmlz
aW9uIDYyMDE1KQorKysgSmF2YVNjcmlwdENvcmUvcnVudGltZS9NYXJrU3RhY2suaAkod29ya2lu
ZyBjb3B5KQpAQCAtMjcsNiArMjcsNyBAQAogI2RlZmluZSBNYXJrU3RhY2tfaAogCiAjaW5jbHVk
ZSAiSlNWYWx1ZS5oIgorI2luY2x1ZGUgIlJlZ2lzdGVyLmgiCiAjaW5jbHVkZSA8d3RmL05vbmNv
cHlhYmxlLmg+CiAKIG5hbWVzcGFjZSBKU0MgewpAQCAtNDYsOCArNDcsMTAgQEAgbmFtZXNwYWNl
IEpTQyB7CiAgICAgICAgIHsKICAgICAgICAgfQogCi0gICAgICAgIEFMV0FZU19JTkxJTkUgdm9p
ZCBhcHBlbmQoSlNWYWx1ZSk7Ci0gICAgICAgIHZvaWQgYXBwZW5kKEpTQ2VsbCopOworICAgICAg
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPgorICAgICAgICBBTFdBWVNfSU5MSU5FIHZvaWQgYXBwZW5k
KFQqJiBjZWxsKTsKKyAgICAgICAgQUxXQVlTX0lOTElORSB2b2lkIGFwcGVuZChKU1ZhbHVlJik7
CisgICAgICAgIEFMV0FZU19JTkxJTkUgdm9pZCBhcHBlbmQoUmVnaXN0ZXImKTsKICAgICAgICAg
CiAgICAgICAgIEFMV0FZU19JTkxJTkUgdm9pZCBhcHBlbmRWYWx1ZXMoUmVnaXN0ZXIqIHZhbHVl
cywgc2l6ZV90IGNvdW50LCBNYXJrU2V0UHJvcGVydGllcyBwcm9wZXJ0aWVzID0gTm9OdWxsVmFs
dWVzKQogICAgICAgICB7CkBAIC03MCw2ICs3Myw4IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAg
ICB9CiAKICAgICBwcml2YXRlOgorICAgICAgICB2b2lkIGFwcGVuZEludGVybmFsKEpTQ2VsbCom
KTsKKwogICAgICAgICB2b2lkIG1hcmtDaGlsZHJlbihKU0NlbGwqKTsKIAogICAgICAgICBzdHJ1
Y3QgTWFya1NldCB7CkluZGV4OiBKYXZhU2NyaXB0Q29yZS9ydW50aW1lL05hdGl2ZUVycm9yQ29u
c3RydWN0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEphdmFTY3JpcHRDb3JlL3J1bnRpbWUvTmF0aXZl
RXJyb3JDb25zdHJ1Y3Rvci5jcHAJKHJldmlzaW9uIDYyMDE1KQorKysgSmF2YVNjcmlwdENvcmUv
cnVudGltZS9OYXRpdmVFcnJvckNvbnN0cnVjdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjgs
NCArNjgsMjUgQEAgQ2FsbFR5cGUgTmF0aXZlRXJyb3JDb25zdHJ1Y3Rvcjo6Z2V0Q2FsbAogICAg
IHJldHVybiBDYWxsVHlwZUhvc3Q7CiB9CiAKK3ZvaWQgTmF0aXZlRXJyb3JDb25zdHJ1Y3Rvcjo6
bWFya0NoaWxkcmVuKE1hcmtTdGFjayYgbWFya1N0YWNrKQoreworI2lmbmRlZiBOREVCVUcKKyAg
ICBib29sIHdhc0NoZWNraW5nRm9yRGVmYXVsdE1hcmtWaW9sYXRpb24gPSBtYXJrU3RhY2subV9p
c0NoZWNraW5nRm9yRGVmYXVsdE1hcmtWaW9sYXRpb247CisgICAgbWFya1N0YWNrLm1faXNDaGVj
a2luZ0ZvckRlZmF1bHRNYXJrVmlvbGF0aW9uID0gZmFsc2U7CisjZW5kaWYKKworICAgIG1hcmtD
aGlsZHJlbkRpcmVjdChtYXJrU3RhY2spOworCisjaWZuZGVmIE5ERUJVRworICAgIG1hcmtTdGFj
ay5tX2lzQ2hlY2tpbmdGb3JEZWZhdWx0TWFya1Zpb2xhdGlvbiA9IHdhc0NoZWNraW5nRm9yRGVm
YXVsdE1hcmtWaW9sYXRpb247CisjZW5kaWYKK30KKworQUxXQVlTX0lOTElORSB2b2lkIE5hdGl2
ZUVycm9yQ29uc3RydWN0b3I6Om1hcmtDaGlsZHJlbkRpcmVjdChNYXJrU3RhY2smIG1hcmtTdGFj
aykKK3sKKyAgICBJbnRlcm5hbEZ1bmN0aW9uOjptYXJrQ2hpbGRyZW4obWFya1N0YWNrKTsKKwor
ICAgIG1hcmtTdGFjay5hcHBlbmQobV9lcnJvclN0cnVjdHVyZS0+c3RvcmVkUHJvdG90eXBlKCkp
OworfQorCiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IEphdmFTY3JpcHRDb3JlL3J1bnRpbWUv
TmF0aXZlRXJyb3JDb25zdHJ1Y3Rvci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEphdmFTY3JpcHRDb3JlL3J1
bnRpbWUvTmF0aXZlRXJyb3JDb25zdHJ1Y3Rvci5oCShyZXZpc2lvbiA2MjAxNSkKKysrIEphdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvTmF0aXZlRXJyb3JDb25zdHJ1Y3Rvci5oCSh3b3JraW5nIGNvcHkp
CkBAIC00MSw2ICs0MSw5IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICB2aXJ0dWFsIENvbnN0
cnVjdFR5cGUgZ2V0Q29uc3RydWN0RGF0YShDb25zdHJ1Y3REYXRhJik7CiAgICAgICAgIHZpcnR1
YWwgQ2FsbFR5cGUgZ2V0Q2FsbERhdGEoQ2FsbERhdGEmKTsKIAorICAgICAgICB2aXJ0dWFsIHZv
aWQgbWFya0NoaWxkcmVuKE1hcmtTdGFjayYpOworICAgICAgICBBTFdBWVNfSU5MSU5FIHZvaWQg
bWFya0NoaWxkcmVuRGlyZWN0KE1hcmtTdGFjayYpOworCiAgICAgICAgIHZpcnR1YWwgY29uc3Qg
Q2xhc3NJbmZvKiBjbGFzc0luZm8oKSBjb25zdCB7IHJldHVybiAmaW5mbzsgfQogCiAgICAgICAg
IFJlZlB0cjxTdHJ1Y3R1cmU+IG1fZXJyb3JTdHJ1Y3R1cmU7CkluZGV4OiBKYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL1N0cnVjdHVyZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEphdmFTY3JpcHRDb3JlL3J1bnRp
bWUvU3RydWN0dXJlLmgJKHJldmlzaW9uIDYyMDE1KQorKysgSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9TdHJ1Y3R1cmUuaAkod29ya2luZyBjb3B5KQpAQCAtOTQsNyArOTQsOCBAQCBuYW1lc3BhY2Ug
SlNDIHsKIAogICAgICAgICBjb25zdCBUeXBlSW5mbyYgdHlwZUluZm8oKSBjb25zdCB7IHJldHVy
biBtX3R5cGVJbmZvOyB9CiAKLSAgICAgICAgSlNWYWx1ZSBzdG9yZWRQcm90b3R5cGUoKSBjb25z
dCB7IHJldHVybiBtX3Byb3RvdHlwZTsgfQorICAgICAgICBKU1ZhbHVlIGNvbnN0ICZzdG9yZWRQ
cm90b3R5cGUoKSBjb25zdCB7IHJldHVybiBtX3Byb3RvdHlwZTsgfQorICAgICAgICBKU1ZhbHVl
ICZzdG9yZWRQcm90b3R5cGUoKSB7IHJldHVybiBtX3Byb3RvdHlwZTsgfQogICAgICAgICBKU1Zh
bHVlIHByb3RvdHlwZUZvckxvb2t1cChFeGVjU3RhdGUqKSBjb25zdDsKICAgICAgICAgU3RydWN0
dXJlQ2hhaW4qIHByb3RvdHlwZUNoYWluKEV4ZWNTdGF0ZSopIGNvbnN0OwogCkluZGV4OiBKYXZh
U2NyaXB0R2x1ZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gSmF2YVNjcmlwdEdsdWUvQ2hhbmdl
TG9nCShyZXZpc2lvbiA2MjAxOCkKKysrIEphdmFTY3JpcHRHbHVlL0NoYW5nZUxvZwkod29ya2lu
ZyBjb3B5KQpAQCAtMSwzICsxLDE4IEBACisyMDEwLTA2LTI4ICBOYXRoYW4gTGF3cmVuY2UgIDxu
bGF3cmVuY2VAYXBwbGUuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEp
LgorCisgICAgICAgIEZpeGVkIEphdmFTY3JpcHRHbHVlIHRvIHJ1biB0ZXN0anNnbHVlIHVuZGVy
IGRlYnVnIGFuZCByZW1vdmVkCisgICAgICAgIHVubmVlZGVkIG1hcmtpbmcuICBXZSBuZWVkIHRv
IHJlbW92ZSB0aGlzIG1hcmtpbmcgaW4gb3JkZXIgdG8gaGF2ZQorICAgICAgICBNYXJrU3RhY2s6
OmFwcGVuZCB0YWtlIHJlZmVyZW5jZXMgZm9yIHVwZGF0aW5nIG1vdmFibGUgb2JqZWN0cy4KKyAg
ICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTQxMTc3CisKKyAg
ICAgICAgKiBKU1J1bi5jcHA6CisgICAgICAgIChKU1J1bjo6SlNSdW4pOgorICAgICAgICAqIEpT
UnVuLmg6CisgICAgICAgICogSlNWYWx1ZVdyYXBwZXIuY3BwOgorICAgICAgICAoSlNWYWx1ZVdy
YXBwZXI6OkpTT2JqZWN0TWFyayk6CisKIDIwMTAtMDYtMDIgIEdhdmluIEJhcnJhY2xvdWdoICA8
YmFycmFjbG91Z2hAYXBwbGUuY29tPgogCiAgICAgICAgIFJldmlld2VkIGJ5IE9saXZlciBIdW50
LgpJbmRleDogSmF2YVNjcmlwdEdsdWUvSlNSdW4uY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEphdmFTY3Jp
cHRHbHVlL0pTUnVuLmNwcAkocmV2aXNpb24gNjIwMTUpCisrKyBKYXZhU2NyaXB0R2x1ZS9KU1J1
bi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ5LDcgKzQ5LDggQEAgSlNSdW46OkpTUnVuKENGU3Ry
aW5nUmVmIHNvdXJjZSwgSlNGbGFncwogICAgIDogICBKU0Jhc2Uoa0pTUnVuVHlwZUlEKSwKICAg
ICAgICAgZlNvdXJjZShDRlN0cmluZ1RvVVN0cmluZyhzb3VyY2UpKSwKICAgICAgICAgZkdsb2Jh
bE9iamVjdChuZXcgKCZnZXRUaHJlYWRHbG9iYWxFeGVjU3RhdGUoKS0+Z2xvYmFsRGF0YSgpKSBK
U0dsdWVHbG9iYWxPYmplY3QoSlNHbHVlR2xvYmFsT2JqZWN0OjpjcmVhdGVTdHJ1Y3R1cmUoanNO
dWxsKCkpLCBpbkZsYWdzKSksCi0gICAgICAgIGZGbGFncyhpbkZsYWdzKQorICAgICAgICBmRmxh
Z3MoaW5GbGFncyksCisgICAgICAgIGxvY2soU2lsZW5jZUFzc2VydGlvbnNPbmx5KQogewogfQog
CkluZGV4OiBKYXZhU2NyaXB0R2x1ZS9KU1J1bi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEphdmFTY3JpcHRH
bHVlL0pTUnVuLmgJKHJldmlzaW9uIDYyMDE1KQorKysgSmF2YVNjcmlwdEdsdWUvSlNSdW4uaAko
d29ya2luZyBjb3B5KQpAQCAtNjksNiArNjksNyBAQCBjbGFzcyBKU1J1biA6IHB1YmxpYyBKU0Jh
c2UgewogICAgICAgICBVU3RyaW5nIGZTb3VyY2U7CiAgICAgICAgIFByb3RlY3RlZFB0cjxKU0ds
b2JhbE9iamVjdD4gZkdsb2JhbE9iamVjdDsKICAgICAgICAgSlNGbGFncyBmRmxhZ3M7CisgICAg
ICAgIEpTTG9jayBsb2NrOwogfTsKIAogI2VuZGlmCkluZGV4OiBKYXZhU2NyaXB0R2x1ZS9KU1Zh
bHVlV3JhcHBlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gSmF2YVNjcmlwdEdsdWUvSlNWYWx1ZVdyYXBw
ZXIuY3BwCShyZXZpc2lvbiA2MjAxNSkKKysrIEphdmFTY3JpcHRHbHVlL0pTVmFsdWVXcmFwcGVy
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTk0LDE1ICsxOTQsNCBAQCBDRlR5cGVSZWYgSlNWYWx1
ZVdyYXBwZXI6OkpTT2JqZWN0Q29weUNGCiAKIHZvaWQgSlNWYWx1ZVdyYXBwZXI6OkpTT2JqZWN0
TWFyayh2b2lkICpkYXRhKQogewotICAgIEpTVmFsdWVXcmFwcGVyKiBwdHIgPSAoSlNWYWx1ZVdy
YXBwZXIqKWRhdGE7Ci0gICAgaWYgKHB0cikKLSAgICB7Ci0gICAgICAgIC8vIFRoaXMgcmVzdWx0
cyBpbiByZWN1cnNpdmUgbWFya2luZyBidXQgd2lsbCBiZSBvdGhlcndpc2Ugc2FmZSBhbmQgY29y
cmVjdC4KLSAgICAgICAgLy8gV2UgY2xhaW0gdGhlIGFycmF5IHZwdHIgaXMgMCBiZWNhdXNlIHdl
IGRvbid0IGhhdmUgYWNjZXNzIHRvIGl0IGhlcmUsIGFuZAotICAgICAgICAvLyBjbGFpbWluZyAw
IGlzIGZ1bmN0aW9uYWxseSBoYXJtbGVzcyAtLSBpdCBtZXJlbHkgbWVhbnMgdGhhdCB3ZSBjYW4n
dAotICAgICAgICAvLyBkZXZpcnR1YWxpc2UgbWFya2luZyBvZiBhcnJheXMgd2hlbiByZWN1cnNp
bmcgZnJvbSB0aGlzIHBvaW50LgotICAgICAgICBNYXJrU3RhY2sgbWFya1N0YWNrKDApOwotICAg
ICAgICBtYXJrU3RhY2suYXBwZW5kKHB0ci0+ZlZhbHVlLmdldCgpKTsKLSAgICAgICAgbWFya1N0
YWNrLmRyYWluKCk7Ci0gICAgfQogfQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>59916</attachid>
            <date>2010-06-28 11:44:11 -0700</date>
            <delta_ts>2010-06-28 17:08:58 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>references.patch</filename>
            <type>text/plain</type>
            <size>16184</size>
            <attacher name="Nathan Lawrence">nlawrence</attacher>
            
              <data encoding="base64">SW5kZXg6IEphdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDYyMDE4KQorKysgSmF2YVNjcmlwdENvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsNDEgQEAKKzIwMTAtMDYtMjggIE5hdGhhbiBM
YXdyZW5jZSAgPG5sYXdyZW5jZUBhcHBsZS5jb20+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9C
T0RZIChPT1BTISkuCisKKyAgICAgICAgUmVmYWN0b3JpbmcgTWFya1N0YWNrOjphcHBlbmQgdG8g
dGFrZSBhIHJlZmVyZW5jZS4gIFRoaXMgaXMgaW4KKyAgICAgICAgcHJlcGFyYXRpb24gZm9yIG1v
dmFibGUgb2JqZWN0cyB3aGVuIHdlIHdpbGwgbmVlZCB0byB1cGRhdGUgcG9pbnRlcnMuCisgICAg
ICAgIGh0dHA6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTQxMTc3CisKKyAgICAg
ICAgKiBieXRlY29kZS9Db2RlQmxvY2suY3BwOgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6Om1h
cmtBZ2dyZWdhdGUpOgorICAgICAgICAqIHJ1bnRpbWUvQ29sbGVjdG9yLmNwcDoKKyAgICAgICAg
KEpTQzo6SGVhcDo6bWFya0NvbnNlcnZhdGl2ZWx5KToKKyAgICAgICAgKiBydW50aW1lL0pTQXJy
YXkuaDoKKyAgICAgICAgKEpTQzo6TWFya1N0YWNrOjpkcmFpbik6CisgICAgICAgICogcnVudGlt
ZS9KU0NlbGwuaDoKKyAgICAgICAgKEpTQzo6SlNDZWxsOjppc01vdmVkKToKKyAgICAgICAgKEpT
Qzo6SlNWYWx1ZTo6YXNDZWxsKToKKyAgICAgICAgKEpTQzo6TWFya1N0YWNrOjphcHBlbmRJbnRl
cm5hbCk6CisgICAgICAgIChKU0M6Ok1hcmtTdGFjazo6YXBwZW5kKToKKyAgICAgICAgKEpTQzo6
TWFya1N0YWNrOjphcHBlbmRWYWx1ZXMpOgorICAgICAgICAoSlNDOjpKU1ZhbHVlOjppc01vdmVk
KToKKyAgICAgICAgKiBydW50aW1lL0pTR2xvYmFsT2JqZWN0LmNwcDoKKyAgICAgICAgKEpTQzo6
bWFya0lmTmVlZGVkKToKKyAgICAgICAgKiBydW50aW1lL0pTT05PYmplY3QuY3BwOgorICAgICAg
ICAoSlNDOjpTdHJpbmdpZmllcjo6SG9sZGVyOjpvYmplY3QpOgorICAgICAgICAqIHJ1bnRpbWUv
SlNPYmplY3QuaDoKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OnByb3RvdHlwZSk6CisgICAgICAg
ICogcnVudGltZS9KU1N0YXRpY1Njb3BlT2JqZWN0LmNwcDoKKyAgICAgICAgKEpTQzo6SlNTdGF0
aWNTY29wZU9iamVjdDo6bWFya0NoaWxkcmVuKToKKyAgICAgICAgKiBydW50aW1lL0pTVmFsdWUu
aDoKKyAgICAgICAgKiBydW50aW1lL01hcmtTdGFjay5oOgorICAgICAgICAqIHJ1bnRpbWUvTmF0
aXZlRXJyb3JDb25zdHJ1Y3Rvci5jcHA6CisgICAgICAgIChKU0M6Ok5hdGl2ZUVycm9yQ29uc3Ry
dWN0b3I6Om1hcmtDaGlsZHJlbik6CisgICAgICAgIChKU0M6Ok5hdGl2ZUVycm9yQ29uc3RydWN0
b3I6Om1hcmtDaGlsZHJlbkRpcmVjdCk6CisgICAgICAgICogcnVudGltZS9OYXRpdmVFcnJvckNv
bnN0cnVjdG9yLmg6CisgICAgICAgICogcnVudGltZS9TdHJ1Y3R1cmUuaDoKKyAgICAgICAgKEpT
Qzo6U3RydWN0dXJlOjpzdG9yZWRQcm90b3R5cGUpOgorCiAyMDEwLTA2LTI4ICBMdWNhcyBEZSBN
YXJjaGkgIDxsdWNhcy5kZW1hcmNoaUBwcm9mdXNpb24ubW9iaT4KIAogICAgICAgICBVbnJldmll
d2VkIGJ1aWxkIGZpeC4KSW5kZXg6IEphdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmNwcAko
cmV2aXNpb24gNjIwMTUpCisrKyBKYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0xNTEyLDcgKzE1MTIsNyBAQCB2b2lkIENvZGVCbG9jazo6cmVm
U3RydWN0dXJlcyhJbnN0cnVjdGlvCiB2b2lkIENvZGVCbG9jazo6bWFya0FnZ3JlZ2F0ZShNYXJr
U3RhY2smIG1hcmtTdGFjaykKIHsKICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1fY29uc3Rh
bnRSZWdpc3RlcnMuc2l6ZSgpOyArK2kpCi0gICAgICAgIG1hcmtTdGFjay5hcHBlbmQobV9jb25z
dGFudFJlZ2lzdGVyc1tpXS5qc1ZhbHVlKCkpOworICAgICAgICBtYXJrU3RhY2suYXBwZW5kKG1f
Y29uc3RhbnRSZWdpc3RlcnNbaV0pOwogICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbV9mdW5j
dGlvbkV4cHJzLnNpemUoKTsgKytpKQogICAgICAgICBtX2Z1bmN0aW9uRXhwcnNbaV0tPm1hcmtB
Z2dyZWdhdGUobWFya1N0YWNrKTsKICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1fZnVuY3Rp
b25EZWNscy5zaXplKCk7ICsraSkKSW5kZXg6IEphdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ29sbGVj
dG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NvbGxlY3Rvci5j
cHAJKHJldmlzaW9uIDYyMDE1KQorKysgSmF2YVNjcmlwdENvcmUvcnVudGltZS9Db2xsZWN0b3Iu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC03NTksNyArNzU5LDggQEAgdm9pZCBIZWFwOjptYXJrQ29u
c2VydmF0aXZlbHkoTWFya1N0YWNrJgogICAgICAgICAgICAgZm9yIChzaXplX3QgYmxvY2sgPSAw
OyBibG9jayA8IHVzZWRCbG9ja3M7IGJsb2NrKyspIHsKICAgICAgICAgICAgICAgICBpZiAoYmxv
Y2tzW2Jsb2NrXSAhPSBibG9ja0FkZHIpCiAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwot
ICAgICAgICAgICAgICAgIG1hcmtTdGFjay5hcHBlbmQocmVpbnRlcnByZXRfY2FzdDxKU0NlbGwq
Pih4QXNCaXRzKSk7CisgICAgICAgICAgICAgICAgSlNDZWxsICpjZWxsID0gcmVpbnRlcnByZXRf
Y2FzdDxKU0NlbGwqPih4QXNCaXRzKTsKKyAgICAgICAgICAgICAgICBtYXJrU3RhY2suYXBwZW5k
KGNlbGwpOwogICAgICAgICAgICAgICAgIG1hcmtTdGFjay5kcmFpbigpOwogICAgICAgICAgICAg
fQogICAgICAgICB9CkluZGV4OiBKYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQXJyYXkuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBKYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQXJyYXkuaAkocmV2aXNpb24gNjIw
MTUpCisrKyBKYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQXJyYXkuaAkod29ya2luZyBjb3B5KQpA
QCAtMTkzLDggKzE5Myw3IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICAgICAgICAgIEpTVmFs
dWUgdmFsdWUgPSAqY3VycmVudC5tX3ZhbHVlczsKICAgICAgICAgICAgICAgICBjdXJyZW50Lm1f
dmFsdWVzKys7CiAKLSAgICAgICAgICAgICAgICBKU0NlbGwqIGNlbGw7Ci0gICAgICAgICAgICAg
ICAgaWYgKCF2YWx1ZSB8fCAhdmFsdWUuaXNDZWxsKCkgfHwgSGVhcDo6aXNDZWxsTWFya2VkKGNl
bGwgPSB2YWx1ZS5hc0NlbGwoKSkpIHsKKyAgICAgICAgICAgICAgICBpZiAoIXZhbHVlIHx8ICF2
YWx1ZS5pc0NlbGwoKSB8fCBIZWFwOjppc0NlbGxNYXJrZWQodmFsdWUuYXNDZWxsKCkpKSB7CiAg
ICAgICAgICAgICAgICAgICAgIGlmIChjdXJyZW50Lm1fdmFsdWVzID09IGVuZCkgewogICAgICAg
ICAgICAgICAgICAgICAgICAgbV9tYXJrU2V0cy5yZW1vdmVMYXN0KCk7CiAgICAgICAgICAgICAg
ICAgICAgICAgICBjb250aW51ZTsKQEAgLTIwMiw2ICsyMDEsNyBAQCBuYW1lc3BhY2UgSlNDIHsK
ICAgICAgICAgICAgICAgICAgICAgZ290byBmaW5kTmV4dFVubWFya2VkTnVsbFZhbHVlOwogICAg
ICAgICAgICAgICAgIH0KIAorICAgICAgICAgICAgICAgIEpTQ2VsbComIGNlbGwgPSB2YWx1ZS5h
c0NlbGwoKTsKICAgICAgICAgICAgICAgICBIZWFwOjptYXJrQ2VsbChjZWxsKTsKICAgICAgICAg
ICAgICAgICBpZiAoY2VsbC0+c3RydWN0dXJlKCktPnR5cGVJbmZvKCkudHlwZSgpIDwgQ29tcG91
bmRUeXBlKSB7CiAgICAgICAgICAgICAgICAgICAgIGlmIChjdXJyZW50Lm1fdmFsdWVzID09IGVu
ZCkgewpJbmRleDogSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0NlbGwuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBKYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQ2VsbC5oCShyZXZpc2lvbiA2MjAxNSkKKysrIEph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNDZWxsLmgJKHdvcmtpbmcgY29weSkKQEAgLTk3LDYgKzk3
LDggQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHZvaWQqIG9wZXJhdG9yIG5ldyhzaXplX3Qs
IHZvaWQqIHBsYWNlbWVudE5ld0Rlc3RpbmF0aW9uKSB7IHJldHVybiBwbGFjZW1lbnROZXdEZXN0
aW5hdGlvbjsgfQogCiAgICAgICAgIHZpcnR1YWwgdm9pZCBtYXJrQ2hpbGRyZW4oTWFya1N0YWNr
Jik7CisKKyAgICAgICAgdmlydHVhbCBib29sIGlzTW92ZWQoKSBjb25zdCB7IHJldHVybiBmYWxz
ZTsgfQogI2lmIEVOQUJMRShKU0NfWk9NQklFUykKICAgICAgICAgdmlydHVhbCBib29sIGlzWm9t
YmllKCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KICNlbmRpZgpAQCAtMjM3LDcgKzIzOSwxMyBA
QCBuYW1lc3BhY2UgSlNDIHsKICAgICB9CiAKICNpZiAhVVNFKEpTVkFMVUUzMl82NCkKLSAgICBB
TFdBWVNfSU5MSU5FIEpTQ2VsbCogSlNWYWx1ZTo6YXNDZWxsKCkgY29uc3QKKyAgICBBTFdBWVNf
SU5MSU5FIEpTQ2VsbComIEpTVmFsdWU6OmFzQ2VsbCgpCisgICAgeworICAgICAgICBBU1NFUlQo
aXNDZWxsKCkpOworICAgICAgICByZXR1cm4gbV9wdHI7CisgICAgfQorCisgICAgQUxXQVlTX0lO
TElORSBKU0NlbGwqIGNvbnN0JiBKU1ZhbHVlOjphc0NlbGwoKSBjb25zdAogICAgIHsKICAgICAg
ICAgQVNTRVJUKGlzQ2VsbCgpKTsKICAgICAgICAgcmV0dXJuIG1fcHRyOwpAQCAtMzI5LDIyICsz
MzcsNDAgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHJldHVybiBpc0NlbGwoKSA/IGFzQ2Vs
bCgpLT50b1RoaXNPYmplY3QoZXhlYykgOiB0b1RoaXNPYmplY3RTbG93Q2FzZShleGVjKTsKICAg
ICB9CiAKLSAgICBBTFdBWVNfSU5MSU5FIHZvaWQgTWFya1N0YWNrOjphcHBlbmQoSlNDZWxsKiBj
ZWxsKQorICAgIGlubGluZSB2b2lkIE1hcmtTdGFjazo6YXBwZW5kSW50ZXJuYWwoSlNDZWxsKiYg
Y2VsbCkKICAgICB7CiAgICAgICAgIEFTU0VSVCghbV9pc0NoZWNraW5nRm9yRGVmYXVsdE1hcmtW
aW9sYXRpb24pOwogICAgICAgICBBU1NFUlQoY2VsbCk7Ci0gICAgICAgIGlmIChIZWFwOjppc0Nl
bGxNYXJrZWQoY2VsbCkpCi0gICAgICAgICAgICByZXR1cm47CisgICAgICAgIGJvb2wgbWFya2Vk
ID0gSGVhcDo6aXNDZWxsTWFya2VkKGNlbGwpOwogICAgICAgICBIZWFwOjptYXJrQ2VsbChjZWxs
KTsKKyAgICAgICAgaWYgKG1hcmtlZCkKKyAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgaWYg
KGNlbGwtPnN0cnVjdHVyZSgpLT50eXBlSW5mbygpLnR5cGUoKSA+PSBDb21wb3VuZFR5cGUpCiAg
ICAgICAgICAgICBtX3ZhbHVlcy5hcHBlbmQoY2VsbCk7CiAgICAgfQogCi0gICAgQUxXQVlTX0lO
TElORSB2b2lkIE1hcmtTdGFjazo6YXBwZW5kKEpTVmFsdWUgdmFsdWUpCisgICAgdGVtcGxhdGU8
dHlwZW5hbWUgVD4KKyAgICBBTFdBWVNfSU5MSU5FIHZvaWQgTWFya1N0YWNrOjphcHBlbmQoVCom
IGNlbGwpCisgICAgeworICAgICAgICAvKiBSZWZlcmVuY2VzIGluIEMrKyBhcmUgbm90IGNvdmFy
aWFudCwgc28gd2UgZnVkZ2UgYXJvdW5kIGl0IHdpdGgKKyAgICAgICAgICogdGhpcyBub25zZW5z
ZS4KKyAgICAgICAgICovCisgICAgICAgIEpTQ2VsbComIHB0ciA9ICpyZWludGVycHJldF9jYXN0
PEpTQ2VsbCoqPigmY2VsbCk7CisgICAgICAgIGFwcGVuZEludGVybmFsKHB0cik7CisgICAgfQor
CisgICAgQUxXQVlTX0lOTElORSB2b2lkIE1hcmtTdGFjazo6YXBwZW5kKEpTVmFsdWUmIHZhbHVl
KQogICAgIHsKICAgICAgICAgQVNTRVJUKHZhbHVlKTsKICAgICAgICAgaWYgKHZhbHVlLmlzQ2Vs
bCgpKQotICAgICAgICAgICAgYXBwZW5kKHZhbHVlLmFzQ2VsbCgpKTsKKyAgICAgICAgICAgIGFw
cGVuZEludGVybmFsKHZhbHVlLmFzQ2VsbCgpKTsKKyAgICB9CisKKyAgICBBTFdBWVNfSU5MSU5F
IHZvaWQgTWFya1N0YWNrOjphcHBlbmQoUmVnaXN0ZXImIHJlZykKKyAgICB7CisgICAgICAgIEpT
VmFsdWUgdmFsdWUgPSByZWcuanNWYWx1ZSgpOworICAgICAgICBhcHBlbmQodmFsdWUpOworICAg
ICAgICByZWcgPSB2YWx1ZTsKICAgICB9CiAKICAgICBpbmxpbmUgSGVhcCogSGVhcDo6aGVhcChK
U1ZhbHVlIHYpCkBAIC0zNTksNiArMzg1LDExIEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICBy
ZXR1cm4gY2VsbEJsb2NrKGMpLT5oZWFwOwogICAgIH0KICAgICAKKyAgICBpbmxpbmUgYm9vbCBK
U1ZhbHVlOjppc01vdmVkKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBpc0NlbGwoKSAm
JiBhc0NlbGwoKSAmJiBhc0NlbGwoKS0+aXNNb3ZlZCgpOworICAgIH0KKwogI2lmIEVOQUJMRShK
U0NfWk9NQklFUykKICAgICBpbmxpbmUgYm9vbCBKU1ZhbHVlOjppc1pvbWJpZSgpIGNvbnN0CiAg
ICAgewpJbmRleDogSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2JhbE9iamVjdC5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2JhbE9iamVjdC5jcHAJKHJl
dmlzaW9uIDYyMDE1KQorKysgSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2JhbE9iamVjdC5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTgwLDEzICs4MCwxNSBAQCBzdGF0aWMgY29uc3QgaW50IGlu
aXRpYWxUaWNrQ291bnRUaHJlc2hvCiAvLyBQcmVmZXJyZWQgbnVtYmVyIG9mIG1pbGxpc2Vjb25k
cyBiZXR3ZWVuIGVhY2ggdGltZW91dCBjaGVjawogc3RhdGljIGNvbnN0IGludCBwcmVmZXJyZWRT
Y3JpcHRDaGVja1RpbWVJbnRlcnZhbCA9IDEwMDA7CiAKLXN0YXRpYyBpbmxpbmUgdm9pZCBtYXJr
SWZOZWVkZWQoTWFya1N0YWNrJiBtYXJrU3RhY2ssIEpTVmFsdWUgdikKK3RlbXBsYXRlPHR5cGVu
YW1lIFQ+CitzdGF0aWMgdm9pZCBtYXJrSWZOZWVkZWQoTWFya1N0YWNrJiBtYXJrU3RhY2ssIFQm
IHYpCiB7CiAgICAgaWYgKHYpCiAgICAgICAgIG1hcmtTdGFjay5hcHBlbmQodik7CiB9CiAKLXN0
YXRpYyBpbmxpbmUgdm9pZCBtYXJrSWZOZWVkZWQoTWFya1N0YWNrJiBtYXJrU3RhY2ssIGNvbnN0
IFJlZlB0cjxTdHJ1Y3R1cmU+JiBzKQordGVtcGxhdGU8Pgorc3RhdGljIHZvaWQgbWFya0lmTmVl
ZGVkPD4oTWFya1N0YWNrJiBtYXJrU3RhY2ssIFJlZlB0cjxTdHJ1Y3R1cmU+JiBzKQogewogICAg
IGlmIChzKQogICAgICAgICBtYXJrSWZOZWVkZWQobWFya1N0YWNrLCBzLT5zdG9yZWRQcm90b3R5
cGUoKSk7CkluZGV4OiBKYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTT05PYmplY3QuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIEphdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNPTk9iamVjdC5jcHAJKHJldmlzaW9u
IDYyMDE1KQorKysgSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU09OT2JqZWN0LmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtODIsMTIgKzgyLDEzIEBAIHByaXZhdGU6CiAgICAgcHVibGljOgogICAgICAg
ICBIb2xkZXIoSlNPYmplY3QqKTsKIAotICAgICAgICBKU09iamVjdCogb2JqZWN0KCkgY29uc3Qg
eyByZXR1cm4gbV9vYmplY3Q7IH0KKyAgICAgICAgSlNPYmplY3QqJiBvYmplY3QoKSB7IHJldHVy
biBtX29iamVjdDsgfQorICAgICAgICBKU09iamVjdCogY29uc3QmIG9iamVjdCgpIGNvbnN0IHsg
cmV0dXJuIG1fb2JqZWN0OyB9CiAKICAgICAgICAgYm9vbCBhcHBlbmROZXh0UHJvcGVydHkoU3Ry
aW5naWZpZXImLCBTdHJpbmdCdWlsZGVyJik7CiAKICAgICBwcml2YXRlOgotICAgICAgICBKU09i
amVjdCogY29uc3QgbV9vYmplY3Q7CisgICAgICAgIEpTT2JqZWN0KiBtX29iamVjdDsKICAgICAg
ICAgY29uc3QgYm9vbCBtX2lzQXJyYXk7CiAgICAgICAgIGJvb2wgbV9pc0pTQXJyYXk7CiAgICAg
ICAgIHVuc2lnbmVkIG1faW5kZXg7CkluZGV4OiBKYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTT2Jq
ZWN0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU09iamVjdC5oCShy
ZXZpc2lvbiA2MjAxNSkKKysrIEphdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNPYmplY3QuaAkod29y
a2luZyBjb3B5KQpAQCAtODYsNyArODYsNyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgLy8g
aW4gdGhlIGNsYXNzIGFzIGl0IHJlc3VsdHMgaW4gdGhlIHZ0YWJsZSBiZWluZyBnZW5lcmF0ZWQg
YXMgYSB3ZWFrIHN5bWJvbAogICAgICAgICB2aXJ0dWFsIH5KU09iamVjdCgpOwogCi0gICAgICAg
IEpTVmFsdWUgcHJvdG90eXBlKCkgY29uc3Q7CisgICAgICAgIEpTVmFsdWUmIHByb3RvdHlwZSgp
IGNvbnN0OwogICAgICAgICB2b2lkIHNldFByb3RvdHlwZShKU1ZhbHVlIHByb3RvdHlwZSk7CiAg
ICAgICAgIGJvb2wgc2V0UHJvdG90eXBlV2l0aEN5Y2xlQ2hlY2soSlNWYWx1ZSBwcm90b3R5cGUp
OwogICAgICAgICAKQEAgLTMxMSw3ICszMTEsNyBAQCBpbmxpbmUgSlNPYmplY3Q6On5KU09iamVj
dCgpCiAgICAgbV9zdHJ1Y3R1cmUtPmRlcmVmKCk7CiB9CiAKLWlubGluZSBKU1ZhbHVlIEpTT2Jq
ZWN0Ojpwcm90b3R5cGUoKSBjb25zdAoraW5saW5lIEpTVmFsdWUmIEpTT2JqZWN0Ojpwcm90b3R5
cGUoKSBjb25zdAogewogICAgIHJldHVybiBtX3N0cnVjdHVyZS0+c3RvcmVkUHJvdG90eXBlKCk7
CiB9CkluZGV4OiBKYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTU3RhdGljU2NvcGVPYmplY3QuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIEphdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNTdGF0aWNTY29wZU9iamVj
dC5jcHAJKHJldmlzaW9uIDYyMDE1KQorKysgSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1N0YXRp
Y1Njb3BlT2JqZWN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzQsNyArMzQsNyBAQCBBU1NFUlRf
Q0xBU1NfRklUU19JTl9DRUxMKEpTU3RhdGljU2NvcGVPCiB2b2lkIEpTU3RhdGljU2NvcGVPYmpl
Y3Q6Om1hcmtDaGlsZHJlbihNYXJrU3RhY2smIG1hcmtTdGFjaykKIHsKICAgICBKU1ZhcmlhYmxl
T2JqZWN0OjptYXJrQ2hpbGRyZW4obWFya1N0YWNrKTsKLSAgICBtYXJrU3RhY2suYXBwZW5kKGQo
KS0+cmVnaXN0ZXJTdG9yZS5qc1ZhbHVlKCkpOworICAgIG1hcmtTdGFjay5hcHBlbmQoZCgpLT5y
ZWdpc3RlclN0b3JlKTsKIH0KIAogSlNPYmplY3QqIEpTU3RhdGljU2NvcGVPYmplY3Q6OnRvVGhp
c09iamVjdChFeGVjU3RhdGUqIGV4ZWMpIGNvbnN0CkluZGV4OiBKYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0pTVmFsdWUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTVmFs
dWUuaAkocmV2aXNpb24gNjIwMTUpCisrKyBKYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTVmFsdWUu
aAkod29ya2luZyBjb3B5KQpAQCAtMTY3LDYgKzE2Nyw3IEBAIG5hbWVzcGFjZSBKU0MgewogICAg
ICAgICB1aW50MzJfdCB0b1VJbnQzMihFeGVjU3RhdGUqKSBjb25zdDsKICAgICAgICAgdWludDMy
X3QgdG9VSW50MzIoRXhlY1N0YXRlKiwgYm9vbCYgb2spIGNvbnN0OwogCisgICAgICAgIGJvb2wg
aXNNb3ZlZCgpIGNvbnN0OwogI2lmIEVOQUJMRShKU0NfWk9NQklFUykKICAgICAgICAgYm9vbCBp
c1pvbWJpZSgpIGNvbnN0OwogI2VuZGlmCkBAIC0xOTgsNyArMTk5LDggQEAgbmFtZXNwYWNlIEpT
QyB7CiAgICAgICAgIEpTVmFsdWUgZ2V0SlNOdW1iZXIoKTsgLy8gSlNWYWx1ZSgpIGlmIHRoaXMg
aXMgbm90IGEgSlNOdW1iZXIgb3IgbnVtYmVyIG9iamVjdAogCiAgICAgICAgIGJvb2wgaXNDZWxs
KCkgY29uc3Q7Ci0gICAgICAgIEpTQ2VsbCogYXNDZWxsKCkgY29uc3Q7CisgICAgICAgIEpTQ2Vs
bComIGFzQ2VsbCgpOworICAgICAgICBKU0NlbGwqIGNvbnN0JiBhc0NlbGwoKSBjb25zdDsKICAg
ICAgICAgYm9vbCBpc1ZhbGlkQ2FsbGVlKCk7CiAKICNpZm5kZWYgTkRFQlVHCkluZGV4OiBKYXZh
U2NyaXB0Q29yZS9ydW50aW1lL01hcmtTdGFjay5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEphdmFTY3JpcHRD
b3JlL3J1bnRpbWUvTWFya1N0YWNrLmgJKHJldmlzaW9uIDYyMDE1KQorKysgSmF2YVNjcmlwdENv
cmUvcnVudGltZS9NYXJrU3RhY2suaAkod29ya2luZyBjb3B5KQpAQCAtMjcsNiArMjcsNyBAQAog
I2RlZmluZSBNYXJrU3RhY2tfaAogCiAjaW5jbHVkZSAiSlNWYWx1ZS5oIgorI2luY2x1ZGUgIlJl
Z2lzdGVyLmgiCiAjaW5jbHVkZSA8d3RmL05vbmNvcHlhYmxlLmg+CiAKIG5hbWVzcGFjZSBKU0Mg
ewpAQCAtNDYsOCArNDcsMTAgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHsKICAgICAgICAg
fQogCi0gICAgICAgIEFMV0FZU19JTkxJTkUgdm9pZCBhcHBlbmQoSlNWYWx1ZSk7Ci0gICAgICAg
IHZvaWQgYXBwZW5kKEpTQ2VsbCopOworICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPgorICAg
ICAgICBBTFdBWVNfSU5MSU5FIHZvaWQgYXBwZW5kKFQqJiBjZWxsKTsKKyAgICAgICAgQUxXQVlT
X0lOTElORSB2b2lkIGFwcGVuZChKU1ZhbHVlJik7CisgICAgICAgIEFMV0FZU19JTkxJTkUgdm9p
ZCBhcHBlbmQoUmVnaXN0ZXImKTsKICAgICAgICAgCiAgICAgICAgIEFMV0FZU19JTkxJTkUgdm9p
ZCBhcHBlbmRWYWx1ZXMoUmVnaXN0ZXIqIHZhbHVlcywgc2l6ZV90IGNvdW50LCBNYXJrU2V0UHJv
cGVydGllcyBwcm9wZXJ0aWVzID0gTm9OdWxsVmFsdWVzKQogICAgICAgICB7CkBAIC03MCw2ICs3
Myw4IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICB9CiAKICAgICBwcml2YXRlOgorICAgICAg
ICB2b2lkIGFwcGVuZEludGVybmFsKEpTQ2VsbComKTsKKwogICAgICAgICB2b2lkIG1hcmtDaGls
ZHJlbihKU0NlbGwqKTsKIAogICAgICAgICBzdHJ1Y3QgTWFya1NldCB7CkluZGV4OiBKYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL05hdGl2ZUVycm9yQ29uc3RydWN0b3IuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IEphdmFTY3JpcHRDb3JlL3J1bnRpbWUvTmF0aXZlRXJyb3JDb25zdHJ1Y3Rvci5jcHAJKHJldmlz
aW9uIDYyMDE1KQorKysgSmF2YVNjcmlwdENvcmUvcnVudGltZS9OYXRpdmVFcnJvckNvbnN0cnVj
dG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjgsNCArNjgsMjUgQEAgQ2FsbFR5cGUgTmF0aXZl
RXJyb3JDb25zdHJ1Y3Rvcjo6Z2V0Q2FsbAogICAgIHJldHVybiBDYWxsVHlwZUhvc3Q7CiB9CiAK
K3ZvaWQgTmF0aXZlRXJyb3JDb25zdHJ1Y3Rvcjo6bWFya0NoaWxkcmVuKE1hcmtTdGFjayYgbWFy
a1N0YWNrKQoreworI2lmbmRlZiBOREVCVUcKKyAgICBib29sIHdhc0NoZWNraW5nRm9yRGVmYXVs
dE1hcmtWaW9sYXRpb24gPSBtYXJrU3RhY2subV9pc0NoZWNraW5nRm9yRGVmYXVsdE1hcmtWaW9s
YXRpb247CisgICAgbWFya1N0YWNrLm1faXNDaGVja2luZ0ZvckRlZmF1bHRNYXJrVmlvbGF0aW9u
ID0gZmFsc2U7CisjZW5kaWYKKworICAgIG1hcmtDaGlsZHJlbkRpcmVjdChtYXJrU3RhY2spOwor
CisjaWZuZGVmIE5ERUJVRworICAgIG1hcmtTdGFjay5tX2lzQ2hlY2tpbmdGb3JEZWZhdWx0TWFy
a1Zpb2xhdGlvbiA9IHdhc0NoZWNraW5nRm9yRGVmYXVsdE1hcmtWaW9sYXRpb247CisjZW5kaWYK
K30KKworQUxXQVlTX0lOTElORSB2b2lkIE5hdGl2ZUVycm9yQ29uc3RydWN0b3I6Om1hcmtDaGls
ZHJlbkRpcmVjdChNYXJrU3RhY2smIG1hcmtTdGFjaykKK3sKKyAgICBJbnRlcm5hbEZ1bmN0aW9u
OjptYXJrQ2hpbGRyZW4obWFya1N0YWNrKTsKKworICAgIG1hcmtTdGFjay5hcHBlbmQobV9lcnJv
clN0cnVjdHVyZS0+c3RvcmVkUHJvdG90eXBlKCkpOworfQorCiB9IC8vIG5hbWVzcGFjZSBKU0MK
SW5kZXg6IEphdmFTY3JpcHRDb3JlL3J1bnRpbWUvTmF0aXZlRXJyb3JDb25zdHJ1Y3Rvci5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIEphdmFTY3JpcHRDb3JlL3J1bnRpbWUvTmF0aXZlRXJyb3JDb25zdHJ1Y3Rv
ci5oCShyZXZpc2lvbiA2MjAxNSkKKysrIEphdmFTY3JpcHRDb3JlL3J1bnRpbWUvTmF0aXZlRXJy
b3JDb25zdHJ1Y3Rvci5oCSh3b3JraW5nIGNvcHkpCkBAIC00MSw2ICs0MSw5IEBAIG5hbWVzcGFj
ZSBKU0MgewogICAgICAgICB2aXJ0dWFsIENvbnN0cnVjdFR5cGUgZ2V0Q29uc3RydWN0RGF0YShD
b25zdHJ1Y3REYXRhJik7CiAgICAgICAgIHZpcnR1YWwgQ2FsbFR5cGUgZ2V0Q2FsbERhdGEoQ2Fs
bERhdGEmKTsKIAorICAgICAgICB2aXJ0dWFsIHZvaWQgbWFya0NoaWxkcmVuKE1hcmtTdGFjayYp
OworICAgICAgICBBTFdBWVNfSU5MSU5FIHZvaWQgbWFya0NoaWxkcmVuRGlyZWN0KE1hcmtTdGFj
ayYpOworCiAgICAgICAgIHZpcnR1YWwgY29uc3QgQ2xhc3NJbmZvKiBjbGFzc0luZm8oKSBjb25z
dCB7IHJldHVybiAmaW5mbzsgfQogCiAgICAgICAgIFJlZlB0cjxTdHJ1Y3R1cmU+IG1fZXJyb3JT
dHJ1Y3R1cmU7CkluZGV4OiBKYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cnVjdHVyZS5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIEphdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RydWN0dXJlLmgJKHJldmlzaW9uIDYy
MDE1KQorKysgSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJ1Y3R1cmUuaAkod29ya2luZyBjb3B5
KQpAQCAtOTQsNyArOTQsOCBAQCBuYW1lc3BhY2UgSlNDIHsKIAogICAgICAgICBjb25zdCBUeXBl
SW5mbyYgdHlwZUluZm8oKSBjb25zdCB7IHJldHVybiBtX3R5cGVJbmZvOyB9CiAKLSAgICAgICAg
SlNWYWx1ZSBzdG9yZWRQcm90b3R5cGUoKSBjb25zdCB7IHJldHVybiBtX3Byb3RvdHlwZTsgfQor
ICAgICAgICBKU1ZhbHVlIGNvbnN0ICZzdG9yZWRQcm90b3R5cGUoKSBjb25zdCB7IHJldHVybiBt
X3Byb3RvdHlwZTsgfQorICAgICAgICBKU1ZhbHVlICZzdG9yZWRQcm90b3R5cGUoKSB7IHJldHVy
biBtX3Byb3RvdHlwZTsgfQogICAgICAgICBKU1ZhbHVlIHByb3RvdHlwZUZvckxvb2t1cChFeGVj
U3RhdGUqKSBjb25zdDsKICAgICAgICAgU3RydWN0dXJlQ2hhaW4qIHByb3RvdHlwZUNoYWluKEV4
ZWNTdGF0ZSopIGNvbnN0OwogCkluZGV4OiBKYXZhU2NyaXB0R2x1ZS9DaGFuZ2VMb2cKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gSmF2YVNjcmlwdEdsdWUvQ2hhbmdlTG9nCShyZXZpc2lvbiA2MjAxOCkKKysrIEph
dmFTY3JpcHRHbHVlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE4IEBACisy
MDEwLTA2LTI4ICBOYXRoYW4gTGF3cmVuY2UgIDxubGF3cmVuY2VAYXBwbGUuY29tPgorCisgICAg
ICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEZpeGVkIEphdmFTY3Jp
cHRHbHVlIHRvIHJ1biB0ZXN0anNnbHVlIHVuZGVyIGRlYnVnIGFuZCByZW1vdmVkCisgICAgICAg
IHVubmVlZGVkIG1hcmtpbmcuICBXZSBuZWVkIHRvIHJlbW92ZSB0aGlzIG1hcmtpbmcgaW4gb3Jk
ZXIgdG8gaGF2ZQorICAgICAgICBNYXJrU3RhY2s6OmFwcGVuZCB0YWtlIHJlZmVyZW5jZXMgZm9y
IHVwZGF0aW5nIG1vdmFibGUgb2JqZWN0cy4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTQxMTc3CisKKyAgICAgICAgKiBKU1J1bi5jcHA6CisgICAgICAg
IChKU1J1bjo6SlNSdW4pOgorICAgICAgICAqIEpTUnVuLmg6CisgICAgICAgICogSlNWYWx1ZVdy
YXBwZXIuY3BwOgorICAgICAgICAoSlNWYWx1ZVdyYXBwZXI6OkpTT2JqZWN0TWFyayk6CisKIDIw
MTAtMDYtMDIgIEdhdmluIEJhcnJhY2xvdWdoICA8YmFycmFjbG91Z2hAYXBwbGUuY29tPgogCiAg
ICAgICAgIFJldmlld2VkIGJ5IE9saXZlciBIdW50LgpJbmRleDogSmF2YVNjcmlwdEdsdWUvSlNS
dW4uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIEphdmFTY3JpcHRHbHVlL0pTUnVuLmNwcAkocmV2aXNpb24g
NjIwMTUpCisrKyBKYXZhU2NyaXB0R2x1ZS9KU1J1bi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ5
LDcgKzQ5LDggQEAgSlNSdW46OkpTUnVuKENGU3RyaW5nUmVmIHNvdXJjZSwgSlNGbGFncwogICAg
IDogICBKU0Jhc2Uoa0pTUnVuVHlwZUlEKSwKICAgICAgICAgZlNvdXJjZShDRlN0cmluZ1RvVVN0
cmluZyhzb3VyY2UpKSwKICAgICAgICAgZkdsb2JhbE9iamVjdChuZXcgKCZnZXRUaHJlYWRHbG9i
YWxFeGVjU3RhdGUoKS0+Z2xvYmFsRGF0YSgpKSBKU0dsdWVHbG9iYWxPYmplY3QoSlNHbHVlR2xv
YmFsT2JqZWN0OjpjcmVhdGVTdHJ1Y3R1cmUoanNOdWxsKCkpLCBpbkZsYWdzKSksCi0gICAgICAg
IGZGbGFncyhpbkZsYWdzKQorICAgICAgICBmRmxhZ3MoaW5GbGFncyksCisgICAgICAgIGxvY2so
U2lsZW5jZUFzc2VydGlvbnNPbmx5KQogewogfQogCkluZGV4OiBKYXZhU2NyaXB0R2x1ZS9KU1J1
bi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIEphdmFTY3JpcHRHbHVlL0pTUnVuLmgJKHJldmlzaW9uIDYyMDE1
KQorKysgSmF2YVNjcmlwdEdsdWUvSlNSdW4uaAkod29ya2luZyBjb3B5KQpAQCAtNjksNiArNjks
NyBAQCBjbGFzcyBKU1J1biA6IHB1YmxpYyBKU0Jhc2UgewogICAgICAgICBVU3RyaW5nIGZTb3Vy
Y2U7CiAgICAgICAgIFByb3RlY3RlZFB0cjxKU0dsb2JhbE9iamVjdD4gZkdsb2JhbE9iamVjdDsK
ICAgICAgICAgSlNGbGFncyBmRmxhZ3M7CisgICAgICAgIEpTTG9jayBsb2NrOwogfTsKIAogI2Vu
ZGlmCkluZGV4OiBKYXZhU2NyaXB0R2x1ZS9KU1ZhbHVlV3JhcHBlci5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gSmF2YVNjcmlwdEdsdWUvSlNWYWx1ZVdyYXBwZXIuY3BwCShyZXZpc2lvbiA2MjAxNSkKKysr
IEphdmFTY3JpcHRHbHVlL0pTVmFsdWVXcmFwcGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTk0
LDE1ICsxOTQsNCBAQCBDRlR5cGVSZWYgSlNWYWx1ZVdyYXBwZXI6OkpTT2JqZWN0Q29weUNGCiAK
IHZvaWQgSlNWYWx1ZVdyYXBwZXI6OkpTT2JqZWN0TWFyayh2b2lkICpkYXRhKQogewotICAgIEpT
VmFsdWVXcmFwcGVyKiBwdHIgPSAoSlNWYWx1ZVdyYXBwZXIqKWRhdGE7Ci0gICAgaWYgKHB0cikK
LSAgICB7Ci0gICAgICAgIC8vIFRoaXMgcmVzdWx0cyBpbiByZWN1cnNpdmUgbWFya2luZyBidXQg
d2lsbCBiZSBvdGhlcndpc2Ugc2FmZSBhbmQgY29ycmVjdC4KLSAgICAgICAgLy8gV2UgY2xhaW0g
dGhlIGFycmF5IHZwdHIgaXMgMCBiZWNhdXNlIHdlIGRvbid0IGhhdmUgYWNjZXNzIHRvIGl0IGhl
cmUsIGFuZAotICAgICAgICAvLyBjbGFpbWluZyAwIGlzIGZ1bmN0aW9uYWxseSBoYXJtbGVzcyAt
LSBpdCBtZXJlbHkgbWVhbnMgdGhhdCB3ZSBjYW4ndAotICAgICAgICAvLyBkZXZpcnR1YWxpc2Ug
bWFya2luZyBvZiBhcnJheXMgd2hlbiByZWN1cnNpbmcgZnJvbSB0aGlzIHBvaW50LgotICAgICAg
ICBNYXJrU3RhY2sgbWFya1N0YWNrKDApOwotICAgICAgICBtYXJrU3RhY2suYXBwZW5kKHB0ci0+
ZlZhbHVlLmdldCgpKTsKLSAgICAgICAgbWFya1N0YWNrLmRyYWluKCk7Ci0gICAgfQogfQo=
</data>
<flag name="review"
          id="47084"
          type_id="1"
          status="-"
          setter="ggaren"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>59961</attachid>
            <date>2010-06-28 17:08:58 -0700</date>
            <delta_ts>2010-06-28 20:07:15 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>references.patch</filename>
            <type>text/plain</type>
            <size>17602</size>
            <attacher name="Nathan Lawrence">nlawrence</attacher>
            
              <data encoding="base64">SW5kZXg6IEphdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDYyMDE4KQorKysgSmF2YVNjcmlwdENvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsNDEgQEAKKzIwMTAtMDYtMjggIE5hdGhhbiBM
YXdyZW5jZSAgPG5sYXdyZW5jZUBhcHBsZS5jb20+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9C
T0RZIChPT1BTISkuCisKKyAgICAgICAgUmVmYWN0b3JpbmcgTWFya1N0YWNrOjphcHBlbmQgdG8g
dGFrZSBhIHJlZmVyZW5jZS4gIFRoaXMgaXMgaW4KKyAgICAgICAgcHJlcGFyYXRpb24gZm9yIG1v
dmFibGUgb2JqZWN0cyB3aGVuIHdlIHdpbGwgbmVlZCB0byB1cGRhdGUgcG9pbnRlcnMuCisgICAg
ICAgIGh0dHA6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTQxMTc3CisKKyAgICAg
ICAgKiBieXRlY29kZS9Db2RlQmxvY2suY3BwOgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6Om1h
cmtBZ2dyZWdhdGUpOgorICAgICAgICAqIHJ1bnRpbWUvQ29sbGVjdG9yLmNwcDoKKyAgICAgICAg
KEpTQzo6SGVhcDo6bWFya0NvbnNlcnZhdGl2ZWx5KToKKyAgICAgICAgKiBydW50aW1lL0pTQXJy
YXkuaDoKKyAgICAgICAgKEpTQzo6TWFya1N0YWNrOjpkcmFpbik6CisgICAgICAgICogcnVudGlt
ZS9KU0NlbGwuaDoKKyAgICAgICAgKEpTQzo6SlNDZWxsOjppc01vdmVkKToKKyAgICAgICAgKEpT
Qzo6SlNWYWx1ZTo6YXNDZWxsKToKKyAgICAgICAgKEpTQzo6TWFya1N0YWNrOjphcHBlbmRJbnRl
cm5hbCk6CisgICAgICAgIChKU0M6Ok1hcmtTdGFjazo6YXBwZW5kKToKKyAgICAgICAgKEpTQzo6
TWFya1N0YWNrOjphcHBlbmRWYWx1ZXMpOgorICAgICAgICAoSlNDOjpKU1ZhbHVlOjppc01vdmVk
KToKKyAgICAgICAgKiBydW50aW1lL0pTR2xvYmFsT2JqZWN0LmNwcDoKKyAgICAgICAgKEpTQzo6
bWFya0lmTmVlZGVkKToKKyAgICAgICAgKiBydW50aW1lL0pTT05PYmplY3QuY3BwOgorICAgICAg
ICAoSlNDOjpTdHJpbmdpZmllcjo6SG9sZGVyOjpvYmplY3QpOgorICAgICAgICAqIHJ1bnRpbWUv
SlNPYmplY3QuaDoKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OnByb3RvdHlwZSk6CisgICAgICAg
ICogcnVudGltZS9KU1N0YXRpY1Njb3BlT2JqZWN0LmNwcDoKKyAgICAgICAgKEpTQzo6SlNTdGF0
aWNTY29wZU9iamVjdDo6bWFya0NoaWxkcmVuKToKKyAgICAgICAgKiBydW50aW1lL0pTVmFsdWUu
aDoKKyAgICAgICAgKiBydW50aW1lL01hcmtTdGFjay5oOgorICAgICAgICAqIHJ1bnRpbWUvTmF0
aXZlRXJyb3JDb25zdHJ1Y3Rvci5jcHA6CisgICAgICAgIChKU0M6Ok5hdGl2ZUVycm9yQ29uc3Ry
dWN0b3I6Om1hcmtDaGlsZHJlbik6CisgICAgICAgIChKU0M6Ok5hdGl2ZUVycm9yQ29uc3RydWN0
b3I6Om1hcmtDaGlsZHJlbkRpcmVjdCk6CisgICAgICAgICogcnVudGltZS9OYXRpdmVFcnJvckNv
bnN0cnVjdG9yLmg6CisgICAgICAgICogcnVudGltZS9TdHJ1Y3R1cmUuaDoKKyAgICAgICAgKEpT
Qzo6U3RydWN0dXJlOjpzdG9yZWRQcm90b3R5cGUpOgorCiAyMDEwLTA2LTI4ICBMdWNhcyBEZSBN
YXJjaGkgIDxsdWNhcy5kZW1hcmNoaUBwcm9mdXNpb24ubW9iaT4KIAogICAgICAgICBVbnJldmll
d2VkIGJ1aWxkIGZpeC4KSW5kZXg6IEphdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmNwcAko
cmV2aXNpb24gNjIwMTUpCisrKyBKYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0xNTEyLDcgKzE1MTIsNyBAQCB2b2lkIENvZGVCbG9jazo6cmVm
U3RydWN0dXJlcyhJbnN0cnVjdGlvCiB2b2lkIENvZGVCbG9jazo6bWFya0FnZ3JlZ2F0ZShNYXJr
U3RhY2smIG1hcmtTdGFjaykKIHsKICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1fY29uc3Rh
bnRSZWdpc3RlcnMuc2l6ZSgpOyArK2kpCi0gICAgICAgIG1hcmtTdGFjay5hcHBlbmQobV9jb25z
dGFudFJlZ2lzdGVyc1tpXS5qc1ZhbHVlKCkpOworICAgICAgICBtYXJrU3RhY2suYXBwZW5kKG1f
Y29uc3RhbnRSZWdpc3RlcnNbaV0pOwogICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbV9mdW5j
dGlvbkV4cHJzLnNpemUoKTsgKytpKQogICAgICAgICBtX2Z1bmN0aW9uRXhwcnNbaV0tPm1hcmtB
Z2dyZWdhdGUobWFya1N0YWNrKTsKICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1fZnVuY3Rp
b25EZWNscy5zaXplKCk7ICsraSkKSW5kZXg6IEphdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ29sbGVj
dG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NvbGxlY3Rvci5j
cHAJKHJldmlzaW9uIDYyMDE1KQorKysgSmF2YVNjcmlwdENvcmUvcnVudGltZS9Db2xsZWN0b3Iu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC03NTksNyArNzU5LDggQEAgdm9pZCBIZWFwOjptYXJrQ29u
c2VydmF0aXZlbHkoTWFya1N0YWNrJgogICAgICAgICAgICAgZm9yIChzaXplX3QgYmxvY2sgPSAw
OyBibG9jayA8IHVzZWRCbG9ja3M7IGJsb2NrKyspIHsKICAgICAgICAgICAgICAgICBpZiAoYmxv
Y2tzW2Jsb2NrXSAhPSBibG9ja0FkZHIpCiAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwot
ICAgICAgICAgICAgICAgIG1hcmtTdGFjay5hcHBlbmQocmVpbnRlcnByZXRfY2FzdDxKU0NlbGwq
Pih4QXNCaXRzKSk7CisgICAgICAgICAgICAgICAgSlNDZWxsKiBjZWxsID0gcmVpbnRlcnByZXRf
Y2FzdDxKU0NlbGwqPih4QXNCaXRzKTsKKyAgICAgICAgICAgICAgICBtYXJrU3RhY2suYXBwZW5k
KGNlbGwpOwogICAgICAgICAgICAgICAgIG1hcmtTdGFjay5kcmFpbigpOwogICAgICAgICAgICAg
fQogICAgICAgICB9CkluZGV4OiBKYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQXJyYXkuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBKYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQXJyYXkuaAkocmV2aXNpb24gNjIw
MTUpCisrKyBKYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQXJyYXkuaAkod29ya2luZyBjb3B5KQpA
QCAtMTkzLDggKzE5Myw3IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICAgICAgICAgIEpTVmFs
dWUgdmFsdWUgPSAqY3VycmVudC5tX3ZhbHVlczsKICAgICAgICAgICAgICAgICBjdXJyZW50Lm1f
dmFsdWVzKys7CiAKLSAgICAgICAgICAgICAgICBKU0NlbGwqIGNlbGw7Ci0gICAgICAgICAgICAg
ICAgaWYgKCF2YWx1ZSB8fCAhdmFsdWUuaXNDZWxsKCkgfHwgSGVhcDo6aXNDZWxsTWFya2VkKGNl
bGwgPSB2YWx1ZS5hc0NlbGwoKSkpIHsKKyAgICAgICAgICAgICAgICBpZiAoIXZhbHVlIHx8ICF2
YWx1ZS5pc0NlbGwoKSB8fCBIZWFwOjppc0NlbGxNYXJrZWQodmFsdWUuYXNDZWxsKCkpKSB7CiAg
ICAgICAgICAgICAgICAgICAgIGlmIChjdXJyZW50Lm1fdmFsdWVzID09IGVuZCkgewogICAgICAg
ICAgICAgICAgICAgICAgICAgbV9tYXJrU2V0cy5yZW1vdmVMYXN0KCk7CiAgICAgICAgICAgICAg
ICAgICAgICAgICBjb250aW51ZTsKQEAgLTIwMiw2ICsyMDEsNyBAQCBuYW1lc3BhY2UgSlNDIHsK
ICAgICAgICAgICAgICAgICAgICAgZ290byBmaW5kTmV4dFVubWFya2VkTnVsbFZhbHVlOwogICAg
ICAgICAgICAgICAgIH0KIAorICAgICAgICAgICAgICAgIEpTQ2VsbComIGNlbGwgPSB2YWx1ZS5h
c0NlbGwoKTsKICAgICAgICAgICAgICAgICBIZWFwOjptYXJrQ2VsbChjZWxsKTsKICAgICAgICAg
ICAgICAgICBpZiAoY2VsbC0+c3RydWN0dXJlKCktPnR5cGVJbmZvKCkudHlwZSgpIDwgQ29tcG91
bmRUeXBlKSB7CiAgICAgICAgICAgICAgICAgICAgIGlmIChjdXJyZW50Lm1fdmFsdWVzID09IGVu
ZCkgewpJbmRleDogSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0NlbGwuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBKYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQ2VsbC5oCShyZXZpc2lvbiA2MjAxNSkKKysrIEph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNDZWxsLmgJKHdvcmtpbmcgY29weSkKQEAgLTk3LDYgKzk3
LDggQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHZvaWQqIG9wZXJhdG9yIG5ldyhzaXplX3Qs
IHZvaWQqIHBsYWNlbWVudE5ld0Rlc3RpbmF0aW9uKSB7IHJldHVybiBwbGFjZW1lbnROZXdEZXN0
aW5hdGlvbjsgfQogCiAgICAgICAgIHZpcnR1YWwgdm9pZCBtYXJrQ2hpbGRyZW4oTWFya1N0YWNr
Jik7CisKKyAgICAgICAgdmlydHVhbCBib29sIGlzTW92ZWQoKSBjb25zdCB7IHJldHVybiBmYWxz
ZTsgfQogI2lmIEVOQUJMRShKU0NfWk9NQklFUykKICAgICAgICAgdmlydHVhbCBib29sIGlzWm9t
YmllKCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KICNlbmRpZgpAQCAtMjM3LDcgKzIzOSwxMyBA
QCBuYW1lc3BhY2UgSlNDIHsKICAgICB9CiAKICNpZiAhVVNFKEpTVkFMVUUzMl82NCkKLSAgICBB
TFdBWVNfSU5MSU5FIEpTQ2VsbCogSlNWYWx1ZTo6YXNDZWxsKCkgY29uc3QKKyAgICBBTFdBWVNf
SU5MSU5FIEpTQ2VsbComIEpTVmFsdWU6OmFzQ2VsbCgpCisgICAgeworICAgICAgICBBU1NFUlQo
aXNDZWxsKCkpOworICAgICAgICByZXR1cm4gbV9wdHI7CisgICAgfQorCisgICAgQUxXQVlTX0lO
TElORSBKU0NlbGwqIGNvbnN0JiBKU1ZhbHVlOjphc0NlbGwoKSBjb25zdAogICAgIHsKICAgICAg
ICAgQVNTRVJUKGlzQ2VsbCgpKTsKICAgICAgICAgcmV0dXJuIG1fcHRyOwpAQCAtMzI5LDcgKzMz
Nyw3IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICByZXR1cm4gaXNDZWxsKCkgPyBhc0NlbGwo
KS0+dG9UaGlzT2JqZWN0KGV4ZWMpIDogdG9UaGlzT2JqZWN0U2xvd0Nhc2UoZXhlYyk7CiAgICAg
fQogCi0gICAgQUxXQVlTX0lOTElORSB2b2lkIE1hcmtTdGFjazo6YXBwZW5kKEpTQ2VsbCogY2Vs
bCkKKyAgICBpbmxpbmUgdm9pZCBNYXJrU3RhY2s6OmFwcGVuZEludGVybmFsKEpTQ2VsbComIGNl
bGwpCiAgICAgewogICAgICAgICBBU1NFUlQoIW1faXNDaGVja2luZ0ZvckRlZmF1bHRNYXJrVmlv
bGF0aW9uKTsKICAgICAgICAgQVNTRVJUKGNlbGwpOwpAQCAtMzQwLDExICszNDgsMjggQEAgbmFt
ZXNwYWNlIEpTQyB7CiAgICAgICAgICAgICBtX3ZhbHVlcy5hcHBlbmQoY2VsbCk7CiAgICAgfQog
Ci0gICAgQUxXQVlTX0lOTElORSB2b2lkIE1hcmtTdGFjazo6YXBwZW5kKEpTVmFsdWUgdmFsdWUp
CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4KKyAgICBBTFdBWVNfSU5MSU5FIHZvaWQgTWFya1N0
YWNrOjphcHBlbmQoVComIGNlbGwpCisgICAgeworICAgICAgICAvKiBSZWZlcmVuY2VzIGluIEMr
KyBhcmUgbm90IGNvdmFyaWFudCwgc28gd2UgZnVkZ2UgYXJvdW5kIGl0IHdpdGgKKyAgICAgICAg
ICogdGhpcyBub25zZW5zZS4KKyAgICAgICAgICovCisgICAgICAgIEpTQ2VsbComIHB0ciA9ICpy
ZWludGVycHJldF9jYXN0PEpTQ2VsbCoqPigmY2VsbCk7CisgICAgICAgIGFwcGVuZEludGVybmFs
KHB0cik7CisgICAgfQorCisgICAgQUxXQVlTX0lOTElORSB2b2lkIE1hcmtTdGFjazo6YXBwZW5k
KEpTVmFsdWUmIHZhbHVlKQogICAgIHsKICAgICAgICAgQVNTRVJUKHZhbHVlKTsKICAgICAgICAg
aWYgKHZhbHVlLmlzQ2VsbCgpKQotICAgICAgICAgICAgYXBwZW5kKHZhbHVlLmFzQ2VsbCgpKTsK
KyAgICAgICAgICAgIGFwcGVuZEludGVybmFsKHZhbHVlLmFzQ2VsbCgpKTsKKyAgICB9CisKKyAg
ICBBTFdBWVNfSU5MSU5FIHZvaWQgTWFya1N0YWNrOjphcHBlbmQoUmVnaXN0ZXImIHJlZykKKyAg
ICB7CisgICAgICAgIEpTVmFsdWUgdmFsdWUgPSByZWcuanNWYWx1ZSgpOworICAgICAgICBhcHBl
bmQodmFsdWUpOworICAgICAgICByZWcgPSB2YWx1ZTsKICAgICB9CiAKICAgICBpbmxpbmUgSGVh
cCogSGVhcDo6aGVhcChKU1ZhbHVlIHYpCkBAIC0zNTksNiArMzg0LDExIEBAIG5hbWVzcGFjZSBK
U0MgewogICAgICAgICByZXR1cm4gY2VsbEJsb2NrKGMpLT5oZWFwOwogICAgIH0KICAgICAKKyAg
ICBpbmxpbmUgYm9vbCBKU1ZhbHVlOjppc01vdmVkKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJl
dHVybiBpc0NlbGwoKSAmJiBhc0NlbGwoKSAmJiBhc0NlbGwoKS0+aXNNb3ZlZCgpOworICAgIH0K
KwogI2lmIEVOQUJMRShKU0NfWk9NQklFUykKICAgICBpbmxpbmUgYm9vbCBKU1ZhbHVlOjppc1pv
bWJpZSgpIGNvbnN0CiAgICAgewpJbmRleDogSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2Jh
bE9iamVjdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2Jh
bE9iamVjdC5jcHAJKHJldmlzaW9uIDYyMDE1KQorKysgSmF2YVNjcmlwdENvcmUvcnVudGltZS9K
U0dsb2JhbE9iamVjdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTgwLDEzICs4MCwxNSBAQCBzdGF0
aWMgY29uc3QgaW50IGluaXRpYWxUaWNrQ291bnRUaHJlc2hvCiAvLyBQcmVmZXJyZWQgbnVtYmVy
IG9mIG1pbGxpc2Vjb25kcyBiZXR3ZWVuIGVhY2ggdGltZW91dCBjaGVjawogc3RhdGljIGNvbnN0
IGludCBwcmVmZXJyZWRTY3JpcHRDaGVja1RpbWVJbnRlcnZhbCA9IDEwMDA7CiAKLXN0YXRpYyBp
bmxpbmUgdm9pZCBtYXJrSWZOZWVkZWQoTWFya1N0YWNrJiBtYXJrU3RhY2ssIEpTVmFsdWUgdikK
K3RlbXBsYXRlPHR5cGVuYW1lIFQ+CitzdGF0aWMgdm9pZCBtYXJrSWZOZWVkZWQoTWFya1N0YWNr
JiBtYXJrU3RhY2ssIFQmIHYpCiB7CiAgICAgaWYgKHYpCiAgICAgICAgIG1hcmtTdGFjay5hcHBl
bmQodik7CiB9CiAKLXN0YXRpYyBpbmxpbmUgdm9pZCBtYXJrSWZOZWVkZWQoTWFya1N0YWNrJiBt
YXJrU3RhY2ssIGNvbnN0IFJlZlB0cjxTdHJ1Y3R1cmU+JiBzKQordGVtcGxhdGU8Pgorc3RhdGlj
IHZvaWQgbWFya0lmTmVlZGVkPD4oTWFya1N0YWNrJiBtYXJrU3RhY2ssIFJlZlB0cjxTdHJ1Y3R1
cmU+JiBzKQogewogICAgIGlmIChzKQogICAgICAgICBtYXJrSWZOZWVkZWQobWFya1N0YWNrLCBz
LT5zdG9yZWRQcm90b3R5cGUoKSk7CkluZGV4OiBKYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTT05P
YmplY3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIEphdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNPTk9iamVj
dC5jcHAJKHJldmlzaW9uIDYyMDE1KQorKysgSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU09OT2Jq
ZWN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtODIsMTIgKzgyLDEzIEBAIHByaXZhdGU6CiAgICAg
cHVibGljOgogICAgICAgICBIb2xkZXIoSlNPYmplY3QqKTsKIAotICAgICAgICBKU09iamVjdCog
b2JqZWN0KCkgY29uc3QgeyByZXR1cm4gbV9vYmplY3Q7IH0KKyAgICAgICAgSlNPYmplY3QqJiBv
YmplY3QoKSB7IHJldHVybiBtX29iamVjdDsgfQorICAgICAgICBKU09iamVjdCogY29uc3QmIG9i
amVjdCgpIGNvbnN0IHsgcmV0dXJuIG1fb2JqZWN0OyB9CiAKICAgICAgICAgYm9vbCBhcHBlbmRO
ZXh0UHJvcGVydHkoU3RyaW5naWZpZXImLCBTdHJpbmdCdWlsZGVyJik7CiAKICAgICBwcml2YXRl
OgotICAgICAgICBKU09iamVjdCogY29uc3QgbV9vYmplY3Q7CisgICAgICAgIEpTT2JqZWN0KiBt
X29iamVjdDsKICAgICAgICAgY29uc3QgYm9vbCBtX2lzQXJyYXk7CiAgICAgICAgIGJvb2wgbV9p
c0pTQXJyYXk7CiAgICAgICAgIHVuc2lnbmVkIG1faW5kZXg7CkluZGV4OiBKYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0pTT2JqZWN0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9KU09iamVjdC5oCShyZXZpc2lvbiA2MjAxNSkKKysrIEphdmFTY3JpcHRDb3JlL3J1bnRpbWUv
SlNPYmplY3QuaAkod29ya2luZyBjb3B5KQpAQCAtODYsNyArODYsNyBAQCBuYW1lc3BhY2UgSlND
IHsKICAgICAgICAgLy8gaW4gdGhlIGNsYXNzIGFzIGl0IHJlc3VsdHMgaW4gdGhlIHZ0YWJsZSBi
ZWluZyBnZW5lcmF0ZWQgYXMgYSB3ZWFrIHN5bWJvbAogICAgICAgICB2aXJ0dWFsIH5KU09iamVj
dCgpOwogCi0gICAgICAgIEpTVmFsdWUgcHJvdG90eXBlKCkgY29uc3Q7CisgICAgICAgIEpTVmFs
dWUmIHByb3RvdHlwZSgpIGNvbnN0OwogICAgICAgICB2b2lkIHNldFByb3RvdHlwZShKU1ZhbHVl
IHByb3RvdHlwZSk7CiAgICAgICAgIGJvb2wgc2V0UHJvdG90eXBlV2l0aEN5Y2xlQ2hlY2soSlNW
YWx1ZSBwcm90b3R5cGUpOwogICAgICAgICAKQEAgLTMxMSw3ICszMTEsNyBAQCBpbmxpbmUgSlNP
YmplY3Q6On5KU09iamVjdCgpCiAgICAgbV9zdHJ1Y3R1cmUtPmRlcmVmKCk7CiB9CiAKLWlubGlu
ZSBKU1ZhbHVlIEpTT2JqZWN0Ojpwcm90b3R5cGUoKSBjb25zdAoraW5saW5lIEpTVmFsdWUmIEpT
T2JqZWN0Ojpwcm90b3R5cGUoKSBjb25zdAogewogICAgIHJldHVybiBtX3N0cnVjdHVyZS0+c3Rv
cmVkUHJvdG90eXBlKCk7CiB9CkluZGV4OiBKYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTU3RhdGlj
U2NvcGVPYmplY3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEphdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNT
dGF0aWNTY29wZU9iamVjdC5jcHAJKHJldmlzaW9uIDYyMDE1KQorKysgSmF2YVNjcmlwdENvcmUv
cnVudGltZS9KU1N0YXRpY1Njb3BlT2JqZWN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzQsNyAr
MzQsNyBAQCBBU1NFUlRfQ0xBU1NfRklUU19JTl9DRUxMKEpTU3RhdGljU2NvcGVPCiB2b2lkIEpT
U3RhdGljU2NvcGVPYmplY3Q6Om1hcmtDaGlsZHJlbihNYXJrU3RhY2smIG1hcmtTdGFjaykKIHsK
ICAgICBKU1ZhcmlhYmxlT2JqZWN0OjptYXJrQ2hpbGRyZW4obWFya1N0YWNrKTsKLSAgICBtYXJr
U3RhY2suYXBwZW5kKGQoKS0+cmVnaXN0ZXJTdG9yZS5qc1ZhbHVlKCkpOworICAgIG1hcmtTdGFj
ay5hcHBlbmQoZCgpLT5yZWdpc3RlclN0b3JlKTsKIH0KIAogSlNPYmplY3QqIEpTU3RhdGljU2Nv
cGVPYmplY3Q6OnRvVGhpc09iamVjdChFeGVjU3RhdGUqIGV4ZWMpIGNvbnN0CkluZGV4OiBKYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0pTVmFsdWUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0pTVmFsdWUuaAkocmV2aXNpb24gNjIwMTUpCisrKyBKYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0pTVmFsdWUuaAkod29ya2luZyBjb3B5KQpAQCAtMTY3LDYgKzE2Nyw3IEBAIG5hbWVz
cGFjZSBKU0MgewogICAgICAgICB1aW50MzJfdCB0b1VJbnQzMihFeGVjU3RhdGUqKSBjb25zdDsK
ICAgICAgICAgdWludDMyX3QgdG9VSW50MzIoRXhlY1N0YXRlKiwgYm9vbCYgb2spIGNvbnN0Owog
CisgICAgICAgIGJvb2wgaXNNb3ZlZCgpIGNvbnN0OwogI2lmIEVOQUJMRShKU0NfWk9NQklFUykK
ICAgICAgICAgYm9vbCBpc1pvbWJpZSgpIGNvbnN0OwogI2VuZGlmCkBAIC0xOTgsNyArMTk5LDgg
QEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIEpTVmFsdWUgZ2V0SlNOdW1iZXIoKTsgLy8gSlNW
YWx1ZSgpIGlmIHRoaXMgaXMgbm90IGEgSlNOdW1iZXIgb3IgbnVtYmVyIG9iamVjdAogCiAgICAg
ICAgIGJvb2wgaXNDZWxsKCkgY29uc3Q7Ci0gICAgICAgIEpTQ2VsbCogYXNDZWxsKCkgY29uc3Q7
CisgICAgICAgIEpTQ2VsbComIGFzQ2VsbCgpOworICAgICAgICBKU0NlbGwqIGNvbnN0JiBhc0Nl
bGwoKSBjb25zdDsKICAgICAgICAgYm9vbCBpc1ZhbGlkQ2FsbGVlKCk7CiAKICNpZm5kZWYgTkRF
QlVHCkBAIC0yMzksMTEgKzI0MSwxOSBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgICAgICAg
ICBpbnQzMl90IHRhZzsKICAgICAgICAgICAgICAgICBpbnQzMl90IHBheWxvYWQ7CiAgICAgICAg
ICAgICB9IGFzQml0czsKKyAgICAgICAgICAgIHN0cnVjdCB7CisgICAgICAgICAgICAgICAgaW50
MzJfdCB0YWc7CisgICAgICAgICAgICAgICAgSlNDZWxsKiBtX3B0cjsKKyAgICAgICAgICAgIH0g
YXNQdHI7CiAjZWxzZQogICAgICAgICAgICAgc3RydWN0IHsKICAgICAgICAgICAgICAgICBpbnQz
Ml90IHBheWxvYWQ7CiAgICAgICAgICAgICAgICAgaW50MzJfdCB0YWc7CiAgICAgICAgICAgICB9
IGFzQml0czsKKyAgICAgICAgICAgIHN0cnVjdCB7CisgICAgICAgICAgICAgICAgSlNDZWxsKiBt
X3B0cjsKKyAgICAgICAgICAgICAgICBpbnQzMl90IHRhZzsKKyAgICAgICAgICAgIH0gYXNQdHI7
CiAjZW5kaWYKICAgICAgICAgfSB1OwogI2Vsc2UgLy8gVVNFKEpTVkFMVUUzMl82NCkKQEAgLTQ5
MCw3ICs1MDAsNyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgICAgIHUuYXNCaXRzLnRhZyA9
IENlbGxUYWc7CiAgICAgICAgIGVsc2UKICAgICAgICAgICAgIHUuYXNCaXRzLnRhZyA9IEVtcHR5
VmFsdWVUYWc7Ci0gICAgICAgIHUuYXNCaXRzLnBheWxvYWQgPSByZWludGVycHJldF9jYXN0PGlu
dDMyX3Q+KHB0cik7CisgICAgICAgIHUuYXNQdHIubV9wdHIgPSBwdHI7CiAjaWYgRU5BQkxFKEpT
Q19aT01CSUVTKQogICAgICAgICBBU1NFUlQoIWlzWm9tYmllKCkpOwogI2VuZGlmCkBAIC01MDIs
NyArNTEyLDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgICAgICB1LmFzQml0cy50YWcgPSBD
ZWxsVGFnOwogICAgICAgICBlbHNlCiAgICAgICAgICAgICB1LmFzQml0cy50YWcgPSBFbXB0eVZh
bHVlVGFnOwotICAgICAgICB1LmFzQml0cy5wYXlsb2FkID0gcmVpbnRlcnByZXRfY2FzdDxpbnQz
Ml90Pihjb25zdF9jYXN0PEpTQ2VsbCo+KHB0cikpOworICAgICAgICB1LmFzUHRyLm1fcHRyID0g
Y29uc3RfY2FzdDxKU0NlbGwqPihwdHIpOwogI2lmIEVOQUJMRShKU0NfWk9NQklFUykKICAgICAg
ICAgQVNTRVJUKCFpc1pvbWJpZSgpKTsKICNlbmRpZgpAQCAtNTk3LDEwICs2MDcsMTYgQEAgbmFt
ZXNwYWNlIEpTQyB7CiAgICAgICAgIHJldHVybiB1LmFzRG91YmxlOwogICAgIH0KICAgICAKLSAg
ICBBTFdBWVNfSU5MSU5FIEpTQ2VsbCogSlNWYWx1ZTo6YXNDZWxsKCkgY29uc3QKKyAgICBBTFdB
WVNfSU5MSU5FIEpTQ2VsbCogY29uc3QmIEpTVmFsdWU6OmFzQ2VsbCgpIGNvbnN0CisgICAgewor
ICAgICAgICBBU1NFUlQoaXNDZWxsKCkpOworICAgICAgICByZXR1cm4gdS5hc1B0ci5tX3B0cjsK
KyAgICB9CisKKyAgICBBTFdBWVNfSU5MSU5FIEpTQ2VsbComIEpTVmFsdWU6OmFzQ2VsbCgpCiAg
ICAgewogICAgICAgICBBU1NFUlQoaXNDZWxsKCkpOwotICAgICAgICByZXR1cm4gcmVpbnRlcnBy
ZXRfY2FzdDxKU0NlbGwqPih1LmFzQml0cy5wYXlsb2FkKTsKKyAgICAgICAgcmV0dXJuIHUuYXNQ
dHIubV9wdHI7CiAgICAgfQogCiAgICAgQUxXQVlTX0lOTElORSBKU1ZhbHVlOjpKU1ZhbHVlKEVu
Y29kZUFzRG91YmxlVGFnLCBFeGVjU3RhdGUqLCBkb3VibGUgZCkKSW5kZXg6IEphdmFTY3JpcHRD
b3JlL3J1bnRpbWUvTWFya1N0YWNrLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9NYXJrU3RhY2suaAkocmV2aXNpb24gNjIwMTUpCisrKyBKYXZhU2NyaXB0Q29yZS9ydW50
aW1lL01hcmtTdGFjay5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNyw2ICsyNyw3IEBACiAjZGVmaW5l
IE1hcmtTdGFja19oCiAKICNpbmNsdWRlICJKU1ZhbHVlLmgiCisjaW5jbHVkZSAiUmVnaXN0ZXIu
aCIKICNpbmNsdWRlIDx3dGYvTm9uY29weWFibGUuaD4KIAogbmFtZXNwYWNlIEpTQyB7CkBAIC00
Niw4ICs0NywxMCBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgewogICAgICAgICB9CiAKLSAg
ICAgICAgQUxXQVlTX0lOTElORSB2b2lkIGFwcGVuZChKU1ZhbHVlKTsKLSAgICAgICAgdm9pZCBh
cHBlbmQoSlNDZWxsKik7CisgICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+CisgICAgICAgIEFM
V0FZU19JTkxJTkUgdm9pZCBhcHBlbmQoVComIGNlbGwpOworICAgICAgICBBTFdBWVNfSU5MSU5F
IHZvaWQgYXBwZW5kKEpTVmFsdWUmKTsKKyAgICAgICAgQUxXQVlTX0lOTElORSB2b2lkIGFwcGVu
ZChSZWdpc3RlciYpOwogICAgICAgICAKICAgICAgICAgQUxXQVlTX0lOTElORSB2b2lkIGFwcGVu
ZFZhbHVlcyhSZWdpc3RlciogdmFsdWVzLCBzaXplX3QgY291bnQsIE1hcmtTZXRQcm9wZXJ0aWVz
IHByb3BlcnRpZXMgPSBOb051bGxWYWx1ZXMpCiAgICAgICAgIHsKQEAgLTcwLDYgKzczLDggQEAg
bmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIH0KIAogICAgIHByaXZhdGU6CisgICAgICAgIHZvaWQg
YXBwZW5kSW50ZXJuYWwoSlNDZWxsKiYpOworCiAgICAgICAgIHZvaWQgbWFya0NoaWxkcmVuKEpT
Q2VsbCopOwogCiAgICAgICAgIHN0cnVjdCBNYXJrU2V0IHsKSW5kZXg6IEphdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvTmF0aXZlRXJyb3JDb25zdHJ1Y3Rvci5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gSmF2YVNj
cmlwdENvcmUvcnVudGltZS9OYXRpdmVFcnJvckNvbnN0cnVjdG9yLmNwcAkocmV2aXNpb24gNjIw
MTUpCisrKyBKYXZhU2NyaXB0Q29yZS9ydW50aW1lL05hdGl2ZUVycm9yQ29uc3RydWN0b3IuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC02OCw0ICs2OCwyNSBAQCBDYWxsVHlwZSBOYXRpdmVFcnJvckNv
bnN0cnVjdG9yOjpnZXRDYWxsCiAgICAgcmV0dXJuIENhbGxUeXBlSG9zdDsKIH0KIAordm9pZCBO
YXRpdmVFcnJvckNvbnN0cnVjdG9yOjptYXJrQ2hpbGRyZW4oTWFya1N0YWNrJiBtYXJrU3RhY2sp
Cit7CisjaWZuZGVmIE5ERUJVRworICAgIGJvb2wgd2FzQ2hlY2tpbmdGb3JEZWZhdWx0TWFya1Zp
b2xhdGlvbiA9IG1hcmtTdGFjay5tX2lzQ2hlY2tpbmdGb3JEZWZhdWx0TWFya1Zpb2xhdGlvbjsK
KyAgICBtYXJrU3RhY2subV9pc0NoZWNraW5nRm9yRGVmYXVsdE1hcmtWaW9sYXRpb24gPSBmYWxz
ZTsKKyNlbmRpZgorCisgICAgbWFya0NoaWxkcmVuRGlyZWN0KG1hcmtTdGFjayk7CisKKyNpZm5k
ZWYgTkRFQlVHCisgICAgbWFya1N0YWNrLm1faXNDaGVja2luZ0ZvckRlZmF1bHRNYXJrVmlvbGF0
aW9uID0gd2FzQ2hlY2tpbmdGb3JEZWZhdWx0TWFya1Zpb2xhdGlvbjsKKyNlbmRpZgorfQorCitB
TFdBWVNfSU5MSU5FIHZvaWQgTmF0aXZlRXJyb3JDb25zdHJ1Y3Rvcjo6bWFya0NoaWxkcmVuRGly
ZWN0KE1hcmtTdGFjayYgbWFya1N0YWNrKQoreworICAgIEludGVybmFsRnVuY3Rpb246Om1hcmtD
aGlsZHJlbihtYXJrU3RhY2spOworCisgICAgbWFya1N0YWNrLmFwcGVuZChtX2Vycm9yU3RydWN0
dXJlLT5zdG9yZWRQcm90b3R5cGUoKSk7Cit9CisKIH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDog
SmF2YVNjcmlwdENvcmUvcnVudGltZS9OYXRpdmVFcnJvckNvbnN0cnVjdG9yLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gSmF2YVNjcmlwdENvcmUvcnVudGltZS9OYXRpdmVFcnJvckNvbnN0cnVjdG9yLmgJKHJl
dmlzaW9uIDYyMDE1KQorKysgSmF2YVNjcmlwdENvcmUvcnVudGltZS9OYXRpdmVFcnJvckNvbnN0
cnVjdG9yLmgJKHdvcmtpbmcgY29weSkKQEAgLTQxLDYgKzQxLDkgQEAgbmFtZXNwYWNlIEpTQyB7
CiAgICAgICAgIHZpcnR1YWwgQ29uc3RydWN0VHlwZSBnZXRDb25zdHJ1Y3REYXRhKENvbnN0cnVj
dERhdGEmKTsKICAgICAgICAgdmlydHVhbCBDYWxsVHlwZSBnZXRDYWxsRGF0YShDYWxsRGF0YSYp
OwogCisgICAgICAgIHZpcnR1YWwgdm9pZCBtYXJrQ2hpbGRyZW4oTWFya1N0YWNrJik7CisgICAg
ICAgIEFMV0FZU19JTkxJTkUgdm9pZCBtYXJrQ2hpbGRyZW5EaXJlY3QoTWFya1N0YWNrJik7CisK
ICAgICAgICAgdmlydHVhbCBjb25zdCBDbGFzc0luZm8qIGNsYXNzSW5mbygpIGNvbnN0IHsgcmV0
dXJuICZpbmZvOyB9CiAKICAgICAgICAgUmVmUHRyPFN0cnVjdHVyZT4gbV9lcnJvclN0cnVjdHVy
ZTsKSW5kZXg6IEphdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RydWN0dXJlLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJ1Y3R1cmUuaAkocmV2aXNpb24gNjIwMTUpCisr
KyBKYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cnVjdHVyZS5oCSh3b3JraW5nIGNvcHkpCkBAIC05
NCw3ICs5NCw4IEBAIG5hbWVzcGFjZSBKU0MgewogCiAgICAgICAgIGNvbnN0IFR5cGVJbmZvJiB0
eXBlSW5mbygpIGNvbnN0IHsgcmV0dXJuIG1fdHlwZUluZm87IH0KIAotICAgICAgICBKU1ZhbHVl
IHN0b3JlZFByb3RvdHlwZSgpIGNvbnN0IHsgcmV0dXJuIG1fcHJvdG90eXBlOyB9CisgICAgICAg
IEpTVmFsdWUgY29uc3QgJnN0b3JlZFByb3RvdHlwZSgpIGNvbnN0IHsgcmV0dXJuIG1fcHJvdG90
eXBlOyB9CisgICAgICAgIEpTVmFsdWUgJnN0b3JlZFByb3RvdHlwZSgpIHsgcmV0dXJuIG1fcHJv
dG90eXBlOyB9CiAgICAgICAgIEpTVmFsdWUgcHJvdG90eXBlRm9yTG9va3VwKEV4ZWNTdGF0ZSop
IGNvbnN0OwogICAgICAgICBTdHJ1Y3R1cmVDaGFpbiogcHJvdG90eXBlQ2hhaW4oRXhlY1N0YXRl
KikgY29uc3Q7CiAKSW5kZXg6IEphdmFTY3JpcHRHbHVlL0NoYW5nZUxvZwo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBKYXZhU2NyaXB0R2x1ZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDYyMDE4KQorKysgSmF2YVNjcmlw
dEdsdWUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTggQEAKKzIwMTAtMDYt
MjggIE5hdGhhbiBMYXdyZW5jZSAgPG5sYXdyZW5jZUBhcHBsZS5jb20+CisKKyAgICAgICAgUmV2
aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgRml4ZWQgSmF2YVNjcmlwdEdsdWUg
dG8gcnVuIHRlc3Rqc2dsdWUgdW5kZXIgZGVidWcgYW5kIHJlbW92ZWQKKyAgICAgICAgdW5uZWVk
ZWQgbWFya2luZy4gIFdlIG5lZWQgdG8gcmVtb3ZlIHRoaXMgbWFya2luZyBpbiBvcmRlciB0byBo
YXZlCisgICAgICAgIE1hcmtTdGFjazo6YXBwZW5kIHRha2UgcmVmZXJlbmNlcyBmb3IgdXBkYXRp
bmcgbW92YWJsZSBvYmplY3RzLgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9NDExNzcKKworICAgICAgICAqIEpTUnVuLmNwcDoKKyAgICAgICAgKEpTUnVu
OjpKU1J1bik6CisgICAgICAgICogSlNSdW4uaDoKKyAgICAgICAgKiBKU1ZhbHVlV3JhcHBlci5j
cHA6CisgICAgICAgIChKU1ZhbHVlV3JhcHBlcjo6SlNPYmplY3RNYXJrKToKKwogMjAxMC0wNi0w
MiAgR2F2aW4gQmFycmFjbG91Z2ggIDxiYXJyYWNsb3VnaEBhcHBsZS5jb20+CiAKICAgICAgICAg
UmV2aWV3ZWQgYnkgT2xpdmVyIEh1bnQuCkluZGV4OiBKYXZhU2NyaXB0R2x1ZS9KU1J1bi5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gSmF2YVNjcmlwdEdsdWUvSlNSdW4uY3BwCShyZXZpc2lvbiA2MjAxNSkK
KysrIEphdmFTY3JpcHRHbHVlL0pTUnVuLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDksNyArNDks
OCBAQCBKU1J1bjo6SlNSdW4oQ0ZTdHJpbmdSZWYgc291cmNlLCBKU0ZsYWdzCiAgICAgOiAgIEpT
QmFzZShrSlNSdW5UeXBlSUQpLAogICAgICAgICBmU291cmNlKENGU3RyaW5nVG9VU3RyaW5nKHNv
dXJjZSkpLAogICAgICAgICBmR2xvYmFsT2JqZWN0KG5ldyAoJmdldFRocmVhZEdsb2JhbEV4ZWNT
dGF0ZSgpLT5nbG9iYWxEYXRhKCkpIEpTR2x1ZUdsb2JhbE9iamVjdChKU0dsdWVHbG9iYWxPYmpl
Y3Q6OmNyZWF0ZVN0cnVjdHVyZShqc051bGwoKSksIGluRmxhZ3MpKSwKLSAgICAgICAgZkZsYWdz
KGluRmxhZ3MpCisgICAgICAgIGZGbGFncyhpbkZsYWdzKSwKKyAgICAgICAgbG9jayhTaWxlbmNl
QXNzZXJ0aW9uc09ubHkpCiB7CiB9CiAKSW5kZXg6IEphdmFTY3JpcHRHbHVlL0pTUnVuLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gSmF2YVNjcmlwdEdsdWUvSlNSdW4uaAkocmV2aXNpb24gNjIwMTUpCisrKyBK
YXZhU2NyaXB0R2x1ZS9KU1J1bi5oCSh3b3JraW5nIGNvcHkpCkBAIC02OSw2ICs2OSw3IEBAIGNs
YXNzIEpTUnVuIDogcHVibGljIEpTQmFzZSB7CiAgICAgICAgIFVTdHJpbmcgZlNvdXJjZTsKICAg
ICAgICAgUHJvdGVjdGVkUHRyPEpTR2xvYmFsT2JqZWN0PiBmR2xvYmFsT2JqZWN0OwogICAgICAg
ICBKU0ZsYWdzIGZGbGFnczsKKyAgICAgICAgSlNMb2NrIGxvY2s7CiB9OwogCiAjZW5kaWYKSW5k
ZXg6IEphdmFTY3JpcHRHbHVlL0pTVmFsdWVXcmFwcGVyLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZh
U2NyaXB0R2x1ZS9KU1ZhbHVlV3JhcHBlci5jcHAJKHJldmlzaW9uIDYyMDE1KQorKysgSmF2YVNj
cmlwdEdsdWUvSlNWYWx1ZVdyYXBwZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xOTQsMTUgKzE5
NCw0IEBAIENGVHlwZVJlZiBKU1ZhbHVlV3JhcHBlcjo6SlNPYmplY3RDb3B5Q0YKIAogdm9pZCBK
U1ZhbHVlV3JhcHBlcjo6SlNPYmplY3RNYXJrKHZvaWQgKmRhdGEpCiB7Ci0gICAgSlNWYWx1ZVdy
YXBwZXIqIHB0ciA9IChKU1ZhbHVlV3JhcHBlciopZGF0YTsKLSAgICBpZiAocHRyKQotICAgIHsK
LSAgICAgICAgLy8gVGhpcyByZXN1bHRzIGluIHJlY3Vyc2l2ZSBtYXJraW5nIGJ1dCB3aWxsIGJl
IG90aGVyd2lzZSBzYWZlIGFuZCBjb3JyZWN0LgotICAgICAgICAvLyBXZSBjbGFpbSB0aGUgYXJy
YXkgdnB0ciBpcyAwIGJlY2F1c2Ugd2UgZG9uJ3QgaGF2ZSBhY2Nlc3MgdG8gaXQgaGVyZSwgYW5k
Ci0gICAgICAgIC8vIGNsYWltaW5nIDAgaXMgZnVuY3Rpb25hbGx5IGhhcm1sZXNzIC0tIGl0IG1l
cmVseSBtZWFucyB0aGF0IHdlIGNhbid0Ci0gICAgICAgIC8vIGRldmlydHVhbGlzZSBtYXJraW5n
IG9mIGFycmF5cyB3aGVuIHJlY3Vyc2luZyBmcm9tIHRoaXMgcG9pbnQuCi0gICAgICAgIE1hcmtT
dGFjayBtYXJrU3RhY2soMCk7Ci0gICAgICAgIG1hcmtTdGFjay5hcHBlbmQocHRyLT5mVmFsdWUu
Z2V0KCkpOwotICAgICAgICBtYXJrU3RhY2suZHJhaW4oKTsKLSAgICB9CiB9Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>59979</attachid>
            <date>2010-06-28 20:07:15 -0700</date>
            <delta_ts>2010-07-29 09:30:07 -0700</delta_ts>
            <desc>Patch (no, really it should compile this time...)</desc>
            <filename>references.patch</filename>
            <type>text/plain</type>
            <size>17699</size>
            <attacher name="Nathan Lawrence">nlawrence</attacher>
            
              <data encoding="base64">SW5kZXg6IEphdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDYyMDE4KQorKysgSmF2YVNjcmlwdENvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsNDEgQEAKKzIwMTAtMDYtMjggIE5hdGhhbiBM
YXdyZW5jZSAgPG5sYXdyZW5jZUBhcHBsZS5jb20+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9C
T0RZIChPT1BTISkuCisKKyAgICAgICAgUmVmYWN0b3JpbmcgTWFya1N0YWNrOjphcHBlbmQgdG8g
dGFrZSBhIHJlZmVyZW5jZS4gIFRoaXMgaXMgaW4KKyAgICAgICAgcHJlcGFyYXRpb24gZm9yIG1v
dmFibGUgb2JqZWN0cyB3aGVuIHdlIHdpbGwgbmVlZCB0byB1cGRhdGUgcG9pbnRlcnMuCisgICAg
ICAgIGh0dHA6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTQxMTc3CisKKyAgICAg
ICAgKiBieXRlY29kZS9Db2RlQmxvY2suY3BwOgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6Om1h
cmtBZ2dyZWdhdGUpOgorICAgICAgICAqIHJ1bnRpbWUvQ29sbGVjdG9yLmNwcDoKKyAgICAgICAg
KEpTQzo6SGVhcDo6bWFya0NvbnNlcnZhdGl2ZWx5KToKKyAgICAgICAgKiBydW50aW1lL0pTQXJy
YXkuaDoKKyAgICAgICAgKEpTQzo6TWFya1N0YWNrOjpkcmFpbik6CisgICAgICAgICogcnVudGlt
ZS9KU0NlbGwuaDoKKyAgICAgICAgKEpTQzo6SlNDZWxsOjppc01vdmVkKToKKyAgICAgICAgKEpT
Qzo6SlNWYWx1ZTo6YXNDZWxsKToKKyAgICAgICAgKEpTQzo6TWFya1N0YWNrOjphcHBlbmRJbnRl
cm5hbCk6CisgICAgICAgIChKU0M6Ok1hcmtTdGFjazo6YXBwZW5kKToKKyAgICAgICAgKEpTQzo6
TWFya1N0YWNrOjphcHBlbmRWYWx1ZXMpOgorICAgICAgICAoSlNDOjpKU1ZhbHVlOjppc01vdmVk
KToKKyAgICAgICAgKiBydW50aW1lL0pTR2xvYmFsT2JqZWN0LmNwcDoKKyAgICAgICAgKEpTQzo6
bWFya0lmTmVlZGVkKToKKyAgICAgICAgKiBydW50aW1lL0pTT05PYmplY3QuY3BwOgorICAgICAg
ICAoSlNDOjpTdHJpbmdpZmllcjo6SG9sZGVyOjpvYmplY3QpOgorICAgICAgICAqIHJ1bnRpbWUv
SlNPYmplY3QuaDoKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OnByb3RvdHlwZSk6CisgICAgICAg
ICogcnVudGltZS9KU1N0YXRpY1Njb3BlT2JqZWN0LmNwcDoKKyAgICAgICAgKEpTQzo6SlNTdGF0
aWNTY29wZU9iamVjdDo6bWFya0NoaWxkcmVuKToKKyAgICAgICAgKiBydW50aW1lL0pTVmFsdWUu
aDoKKyAgICAgICAgKiBydW50aW1lL01hcmtTdGFjay5oOgorICAgICAgICAqIHJ1bnRpbWUvTmF0
aXZlRXJyb3JDb25zdHJ1Y3Rvci5jcHA6CisgICAgICAgIChKU0M6Ok5hdGl2ZUVycm9yQ29uc3Ry
dWN0b3I6Om1hcmtDaGlsZHJlbik6CisgICAgICAgIChKU0M6Ok5hdGl2ZUVycm9yQ29uc3RydWN0
b3I6Om1hcmtDaGlsZHJlbkRpcmVjdCk6CisgICAgICAgICogcnVudGltZS9OYXRpdmVFcnJvckNv
bnN0cnVjdG9yLmg6CisgICAgICAgICogcnVudGltZS9TdHJ1Y3R1cmUuaDoKKyAgICAgICAgKEpT
Qzo6U3RydWN0dXJlOjpzdG9yZWRQcm90b3R5cGUpOgorCiAyMDEwLTA2LTI4ICBMdWNhcyBEZSBN
YXJjaGkgIDxsdWNhcy5kZW1hcmNoaUBwcm9mdXNpb24ubW9iaT4KIAogICAgICAgICBVbnJldmll
d2VkIGJ1aWxkIGZpeC4KSW5kZXg6IEphdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmNwcAko
cmV2aXNpb24gNjIwMTUpCisrKyBKYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0xNTEyLDcgKzE1MTIsNyBAQCB2b2lkIENvZGVCbG9jazo6cmVm
U3RydWN0dXJlcyhJbnN0cnVjdGlvCiB2b2lkIENvZGVCbG9jazo6bWFya0FnZ3JlZ2F0ZShNYXJr
U3RhY2smIG1hcmtTdGFjaykKIHsKICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1fY29uc3Rh
bnRSZWdpc3RlcnMuc2l6ZSgpOyArK2kpCi0gICAgICAgIG1hcmtTdGFjay5hcHBlbmQobV9jb25z
dGFudFJlZ2lzdGVyc1tpXS5qc1ZhbHVlKCkpOworICAgICAgICBtYXJrU3RhY2suYXBwZW5kKG1f
Y29uc3RhbnRSZWdpc3RlcnNbaV0pOwogICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbV9mdW5j
dGlvbkV4cHJzLnNpemUoKTsgKytpKQogICAgICAgICBtX2Z1bmN0aW9uRXhwcnNbaV0tPm1hcmtB
Z2dyZWdhdGUobWFya1N0YWNrKTsKICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1fZnVuY3Rp
b25EZWNscy5zaXplKCk7ICsraSkKSW5kZXg6IEphdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ29sbGVj
dG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NvbGxlY3Rvci5j
cHAJKHJldmlzaW9uIDYyMDE1KQorKysgSmF2YVNjcmlwdENvcmUvcnVudGltZS9Db2xsZWN0b3Iu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC03NTksNyArNzU5LDggQEAgdm9pZCBIZWFwOjptYXJrQ29u
c2VydmF0aXZlbHkoTWFya1N0YWNrJgogICAgICAgICAgICAgZm9yIChzaXplX3QgYmxvY2sgPSAw
OyBibG9jayA8IHVzZWRCbG9ja3M7IGJsb2NrKyspIHsKICAgICAgICAgICAgICAgICBpZiAoYmxv
Y2tzW2Jsb2NrXSAhPSBibG9ja0FkZHIpCiAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwot
ICAgICAgICAgICAgICAgIG1hcmtTdGFjay5hcHBlbmQocmVpbnRlcnByZXRfY2FzdDxKU0NlbGwq
Pih4QXNCaXRzKSk7CisgICAgICAgICAgICAgICAgSlNDZWxsKiBjZWxsID0gcmVpbnRlcnByZXRf
Y2FzdDxKU0NlbGwqPih4QXNCaXRzKTsKKyAgICAgICAgICAgICAgICBtYXJrU3RhY2suYXBwZW5k
KGNlbGwpOwogICAgICAgICAgICAgICAgIG1hcmtTdGFjay5kcmFpbigpOwogICAgICAgICAgICAg
fQogICAgICAgICB9CkluZGV4OiBKYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQXJyYXkuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBKYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQXJyYXkuaAkocmV2aXNpb24gNjIw
MTUpCisrKyBKYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQXJyYXkuaAkod29ya2luZyBjb3B5KQpA
QCAtMTkzLDggKzE5Myw3IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICAgICAgICAgIEpTVmFs
dWUgdmFsdWUgPSAqY3VycmVudC5tX3ZhbHVlczsKICAgICAgICAgICAgICAgICBjdXJyZW50Lm1f
dmFsdWVzKys7CiAKLSAgICAgICAgICAgICAgICBKU0NlbGwqIGNlbGw7Ci0gICAgICAgICAgICAg
ICAgaWYgKCF2YWx1ZSB8fCAhdmFsdWUuaXNDZWxsKCkgfHwgSGVhcDo6aXNDZWxsTWFya2VkKGNl
bGwgPSB2YWx1ZS5hc0NlbGwoKSkpIHsKKyAgICAgICAgICAgICAgICBpZiAoIXZhbHVlIHx8ICF2
YWx1ZS5pc0NlbGwoKSB8fCBIZWFwOjppc0NlbGxNYXJrZWQodmFsdWUuYXNDZWxsKCkpKSB7CiAg
ICAgICAgICAgICAgICAgICAgIGlmIChjdXJyZW50Lm1fdmFsdWVzID09IGVuZCkgewogICAgICAg
ICAgICAgICAgICAgICAgICAgbV9tYXJrU2V0cy5yZW1vdmVMYXN0KCk7CiAgICAgICAgICAgICAg
ICAgICAgICAgICBjb250aW51ZTsKQEAgLTIwMiw2ICsyMDEsNyBAQCBuYW1lc3BhY2UgSlNDIHsK
ICAgICAgICAgICAgICAgICAgICAgZ290byBmaW5kTmV4dFVubWFya2VkTnVsbFZhbHVlOwogICAg
ICAgICAgICAgICAgIH0KIAorICAgICAgICAgICAgICAgIEpTQ2VsbComIGNlbGwgPSB2YWx1ZS5h
c0NlbGwoKTsKICAgICAgICAgICAgICAgICBIZWFwOjptYXJrQ2VsbChjZWxsKTsKICAgICAgICAg
ICAgICAgICBpZiAoY2VsbC0+c3RydWN0dXJlKCktPnR5cGVJbmZvKCkudHlwZSgpIDwgQ29tcG91
bmRUeXBlKSB7CiAgICAgICAgICAgICAgICAgICAgIGlmIChjdXJyZW50Lm1fdmFsdWVzID09IGVu
ZCkgewpJbmRleDogSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0NlbGwuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBKYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQ2VsbC5oCShyZXZpc2lvbiA2MjAxNSkKKysrIEph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNDZWxsLmgJKHdvcmtpbmcgY29weSkKQEAgLTk3LDYgKzk3
LDggQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHZvaWQqIG9wZXJhdG9yIG5ldyhzaXplX3Qs
IHZvaWQqIHBsYWNlbWVudE5ld0Rlc3RpbmF0aW9uKSB7IHJldHVybiBwbGFjZW1lbnROZXdEZXN0
aW5hdGlvbjsgfQogCiAgICAgICAgIHZpcnR1YWwgdm9pZCBtYXJrQ2hpbGRyZW4oTWFya1N0YWNr
Jik7CisKKyAgICAgICAgdmlydHVhbCBib29sIGlzTW92ZWQoKSBjb25zdCB7IHJldHVybiBmYWxz
ZTsgfQogI2lmIEVOQUJMRShKU0NfWk9NQklFUykKICAgICAgICAgdmlydHVhbCBib29sIGlzWm9t
YmllKCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KICNlbmRpZgpAQCAtMjM3LDcgKzIzOSwxMyBA
QCBuYW1lc3BhY2UgSlNDIHsKICAgICB9CiAKICNpZiAhVVNFKEpTVkFMVUUzMl82NCkKLSAgICBB
TFdBWVNfSU5MSU5FIEpTQ2VsbCogSlNWYWx1ZTo6YXNDZWxsKCkgY29uc3QKKyAgICBBTFdBWVNf
SU5MSU5FIEpTQ2VsbComIEpTVmFsdWU6OmFzQ2VsbCgpCisgICAgeworICAgICAgICBBU1NFUlQo
aXNDZWxsKCkpOworICAgICAgICByZXR1cm4gbV9wdHI7CisgICAgfQorCisgICAgQUxXQVlTX0lO
TElORSBKU0NlbGwqIGNvbnN0JiBKU1ZhbHVlOjphc0NlbGwoKSBjb25zdAogICAgIHsKICAgICAg
ICAgQVNTRVJUKGlzQ2VsbCgpKTsKICAgICAgICAgcmV0dXJuIG1fcHRyOwpAQCAtMzI5LDcgKzMz
Nyw3IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICByZXR1cm4gaXNDZWxsKCkgPyBhc0NlbGwo
KS0+dG9UaGlzT2JqZWN0KGV4ZWMpIDogdG9UaGlzT2JqZWN0U2xvd0Nhc2UoZXhlYyk7CiAgICAg
fQogCi0gICAgQUxXQVlTX0lOTElORSB2b2lkIE1hcmtTdGFjazo6YXBwZW5kKEpTQ2VsbCogY2Vs
bCkKKyAgICBpbmxpbmUgdm9pZCBNYXJrU3RhY2s6OmFwcGVuZEludGVybmFsKEpTQ2VsbComIGNl
bGwpCiAgICAgewogICAgICAgICBBU1NFUlQoIW1faXNDaGVja2luZ0ZvckRlZmF1bHRNYXJrVmlv
bGF0aW9uKTsKICAgICAgICAgQVNTRVJUKGNlbGwpOwpAQCAtMzQwLDExICszNDgsMjggQEAgbmFt
ZXNwYWNlIEpTQyB7CiAgICAgICAgICAgICBtX3ZhbHVlcy5hcHBlbmQoY2VsbCk7CiAgICAgfQog
Ci0gICAgQUxXQVlTX0lOTElORSB2b2lkIE1hcmtTdGFjazo6YXBwZW5kKEpTVmFsdWUgdmFsdWUp
CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4KKyAgICBBTFdBWVNfSU5MSU5FIHZvaWQgTWFya1N0
YWNrOjphcHBlbmQoVComIGNlbGwpCisgICAgeworICAgICAgICAvKiBSZWZlcmVuY2VzIGluIEMr
KyBhcmUgbm90IGNvdmFyaWFudCwgc28gd2UgZnVkZ2UgYXJvdW5kIGl0IHdpdGgKKyAgICAgICAg
ICogdGhpcyBub25zZW5zZS4KKyAgICAgICAgICovCisgICAgICAgIEpTQ2VsbComIHB0ciA9ICpy
ZWludGVycHJldF9jYXN0PEpTQ2VsbCoqPigmY2VsbCk7CisgICAgICAgIGFwcGVuZEludGVybmFs
KHB0cik7CisgICAgfQorCisgICAgQUxXQVlTX0lOTElORSB2b2lkIE1hcmtTdGFjazo6YXBwZW5k
KEpTVmFsdWUmIHZhbHVlKQogICAgIHsKICAgICAgICAgQVNTRVJUKHZhbHVlKTsKICAgICAgICAg
aWYgKHZhbHVlLmlzQ2VsbCgpKQotICAgICAgICAgICAgYXBwZW5kKHZhbHVlLmFzQ2VsbCgpKTsK
KyAgICAgICAgICAgIGFwcGVuZEludGVybmFsKHZhbHVlLmFzQ2VsbCgpKTsKKyAgICB9CisKKyAg
ICBBTFdBWVNfSU5MSU5FIHZvaWQgTWFya1N0YWNrOjphcHBlbmQoUmVnaXN0ZXImIHJlZykKKyAg
ICB7CisgICAgICAgIEpTVmFsdWUgdmFsdWUgPSByZWcuanNWYWx1ZSgpOworICAgICAgICBhcHBl
bmQodmFsdWUpOworICAgICAgICByZWcgPSB2YWx1ZTsKICAgICB9CiAKICAgICBpbmxpbmUgSGVh
cCogSGVhcDo6aGVhcChKU1ZhbHVlIHYpCkBAIC0zNTksNiArMzg0LDExIEBAIG5hbWVzcGFjZSBK
U0MgewogICAgICAgICByZXR1cm4gY2VsbEJsb2NrKGMpLT5oZWFwOwogICAgIH0KICAgICAKKyAg
ICBpbmxpbmUgYm9vbCBKU1ZhbHVlOjppc01vdmVkKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJl
dHVybiBpc0NlbGwoKSAmJiBhc0NlbGwoKSAmJiBhc0NlbGwoKS0+aXNNb3ZlZCgpOworICAgIH0K
KwogI2lmIEVOQUJMRShKU0NfWk9NQklFUykKICAgICBpbmxpbmUgYm9vbCBKU1ZhbHVlOjppc1pv
bWJpZSgpIGNvbnN0CiAgICAgewpJbmRleDogSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2Jh
bE9iamVjdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2Jh
bE9iamVjdC5jcHAJKHJldmlzaW9uIDYyMDE1KQorKysgSmF2YVNjcmlwdENvcmUvcnVudGltZS9K
U0dsb2JhbE9iamVjdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTgwLDEzICs4MCwyMCBAQCBzdGF0
aWMgY29uc3QgaW50IGluaXRpYWxUaWNrQ291bnRUaHJlc2hvCiAvLyBQcmVmZXJyZWQgbnVtYmVy
IG9mIG1pbGxpc2Vjb25kcyBiZXR3ZWVuIGVhY2ggdGltZW91dCBjaGVjawogc3RhdGljIGNvbnN0
IGludCBwcmVmZXJyZWRTY3JpcHRDaGVja1RpbWVJbnRlcnZhbCA9IDEwMDA7CiAKLXN0YXRpYyBp
bmxpbmUgdm9pZCBtYXJrSWZOZWVkZWQoTWFya1N0YWNrJiBtYXJrU3RhY2ssIEpTVmFsdWUgdikK
K3RlbXBsYXRlPHR5cGVuYW1lIFQ+CitzdGF0aWMgdm9pZCBtYXJrSWZOZWVkZWQoTWFya1N0YWNr
JiBtYXJrU3RhY2ssIFQqJiB2KQogewogICAgIGlmICh2KQogICAgICAgICBtYXJrU3RhY2suYXBw
ZW5kKHYpOwogfQogCi1zdGF0aWMgaW5saW5lIHZvaWQgbWFya0lmTmVlZGVkKE1hcmtTdGFjayYg
bWFya1N0YWNrLCBjb25zdCBSZWZQdHI8U3RydWN0dXJlPiYgcykKK3N0YXRpYyB2b2lkIG1hcmtJ
Zk5lZWRlZChNYXJrU3RhY2smIG1hcmtTdGFjaywgSlNWYWx1ZSYgdikKK3sKKyAgICBpZiAodikK
KyAgICAgICAgbWFya1N0YWNrLmFwcGVuZCh2KTsKK30KKworc3RhdGljIHZvaWQgbWFya0lmTmVl
ZGVkKE1hcmtTdGFjayYgbWFya1N0YWNrLCBSZWZQdHI8U3RydWN0dXJlPiYgcykKIHsKICAgICBp
ZiAocykKICAgICAgICAgbWFya0lmTmVlZGVkKG1hcmtTdGFjaywgcy0+c3RvcmVkUHJvdG90eXBl
KCkpOwpJbmRleDogSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU09OT2JqZWN0LmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBKYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTT05PYmplY3QuY3BwCShyZXZpc2lvbiA2
MjAxNSkKKysrIEphdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNPTk9iamVjdC5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTgyLDEyICs4MiwxMyBAQCBwcml2YXRlOgogICAgIHB1YmxpYzoKICAgICAgICAg
SG9sZGVyKEpTT2JqZWN0Kik7CiAKLSAgICAgICAgSlNPYmplY3QqIG9iamVjdCgpIGNvbnN0IHsg
cmV0dXJuIG1fb2JqZWN0OyB9CisgICAgICAgIEpTT2JqZWN0KiYgb2JqZWN0KCkgeyByZXR1cm4g
bV9vYmplY3Q7IH0KKyAgICAgICAgSlNPYmplY3QqIGNvbnN0JiBvYmplY3QoKSBjb25zdCB7IHJl
dHVybiBtX29iamVjdDsgfQogCiAgICAgICAgIGJvb2wgYXBwZW5kTmV4dFByb3BlcnR5KFN0cmlu
Z2lmaWVyJiwgU3RyaW5nQnVpbGRlciYpOwogCiAgICAgcHJpdmF0ZToKLSAgICAgICAgSlNPYmpl
Y3QqIGNvbnN0IG1fb2JqZWN0OworICAgICAgICBKU09iamVjdCogbV9vYmplY3Q7CiAgICAgICAg
IGNvbnN0IGJvb2wgbV9pc0FycmF5OwogICAgICAgICBib29sIG1faXNKU0FycmF5OwogICAgICAg
ICB1bnNpZ25lZCBtX2luZGV4OwpJbmRleDogSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU09iamVj
dC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIEphdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNPYmplY3QuaAkocmV2
aXNpb24gNjIwMTUpCisrKyBKYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTT2JqZWN0LmgJKHdvcmtp
bmcgY29weSkKQEAgLTg2LDcgKzg2LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIC8vIGlu
IHRoZSBjbGFzcyBhcyBpdCByZXN1bHRzIGluIHRoZSB2dGFibGUgYmVpbmcgZ2VuZXJhdGVkIGFz
IGEgd2VhayBzeW1ib2wKICAgICAgICAgdmlydHVhbCB+SlNPYmplY3QoKTsKIAotICAgICAgICBK
U1ZhbHVlIHByb3RvdHlwZSgpIGNvbnN0OworICAgICAgICBKU1ZhbHVlJiBwcm90b3R5cGUoKSBj
b25zdDsKICAgICAgICAgdm9pZCBzZXRQcm90b3R5cGUoSlNWYWx1ZSBwcm90b3R5cGUpOwogICAg
ICAgICBib29sIHNldFByb3RvdHlwZVdpdGhDeWNsZUNoZWNrKEpTVmFsdWUgcHJvdG90eXBlKTsK
ICAgICAgICAgCkBAIC0zMTEsNyArMzExLDcgQEAgaW5saW5lIEpTT2JqZWN0Ojp+SlNPYmplY3Qo
KQogICAgIG1fc3RydWN0dXJlLT5kZXJlZigpOwogfQogCi1pbmxpbmUgSlNWYWx1ZSBKU09iamVj
dDo6cHJvdG90eXBlKCkgY29uc3QKK2lubGluZSBKU1ZhbHVlJiBKU09iamVjdDo6cHJvdG90eXBl
KCkgY29uc3QKIHsKICAgICByZXR1cm4gbV9zdHJ1Y3R1cmUtPnN0b3JlZFByb3RvdHlwZSgpOwog
fQpJbmRleDogSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1N0YXRpY1Njb3BlT2JqZWN0LmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTU3RhdGljU2NvcGVPYmplY3Qu
Y3BwCShyZXZpc2lvbiA2MjAxNSkKKysrIEphdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNTdGF0aWNT
Y29wZU9iamVjdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM0LDcgKzM0LDcgQEAgQVNTRVJUX0NM
QVNTX0ZJVFNfSU5fQ0VMTChKU1N0YXRpY1Njb3BlTwogdm9pZCBKU1N0YXRpY1Njb3BlT2JqZWN0
OjptYXJrQ2hpbGRyZW4oTWFya1N0YWNrJiBtYXJrU3RhY2spCiB7CiAgICAgSlNWYXJpYWJsZU9i
amVjdDo6bWFya0NoaWxkcmVuKG1hcmtTdGFjayk7Ci0gICAgbWFya1N0YWNrLmFwcGVuZChkKCkt
PnJlZ2lzdGVyU3RvcmUuanNWYWx1ZSgpKTsKKyAgICBtYXJrU3RhY2suYXBwZW5kKGQoKS0+cmVn
aXN0ZXJTdG9yZSk7CiB9CiAKIEpTT2JqZWN0KiBKU1N0YXRpY1Njb3BlT2JqZWN0Ojp0b1RoaXNP
YmplY3QoRXhlY1N0YXRlKiBleGVjKSBjb25zdApJbmRleDogSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9KU1ZhbHVlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1ZhbHVl
LmgJKHJldmlzaW9uIDYyMDE1KQorKysgSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1ZhbHVlLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTE2Nyw2ICsxNjcsNyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAg
ICAgdWludDMyX3QgdG9VSW50MzIoRXhlY1N0YXRlKikgY29uc3Q7CiAgICAgICAgIHVpbnQzMl90
IHRvVUludDMyKEV4ZWNTdGF0ZSosIGJvb2wmIG9rKSBjb25zdDsKIAorICAgICAgICBib29sIGlz
TW92ZWQoKSBjb25zdDsKICNpZiBFTkFCTEUoSlNDX1pPTUJJRVMpCiAgICAgICAgIGJvb2wgaXNa
b21iaWUoKSBjb25zdDsKICNlbmRpZgpAQCAtMTk4LDcgKzE5OSw4IEBAIG5hbWVzcGFjZSBKU0Mg
ewogICAgICAgICBKU1ZhbHVlIGdldEpTTnVtYmVyKCk7IC8vIEpTVmFsdWUoKSBpZiB0aGlzIGlz
IG5vdCBhIEpTTnVtYmVyIG9yIG51bWJlciBvYmplY3QKIAogICAgICAgICBib29sIGlzQ2VsbCgp
IGNvbnN0OwotICAgICAgICBKU0NlbGwqIGFzQ2VsbCgpIGNvbnN0OworICAgICAgICBKU0NlbGwq
JiBhc0NlbGwoKTsKKyAgICAgICAgSlNDZWxsKiBjb25zdCYgYXNDZWxsKCkgY29uc3Q7CiAgICAg
ICAgIGJvb2wgaXNWYWxpZENhbGxlZSgpOwogCiAjaWZuZGVmIE5ERUJVRwpAQCAtMjM5LDExICsy
NDEsMTkgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgICAgICAgICAgaW50MzJfdCB0YWc7CiAg
ICAgICAgICAgICAgICAgaW50MzJfdCBwYXlsb2FkOwogICAgICAgICAgICAgfSBhc0JpdHM7Cisg
ICAgICAgICAgICBzdHJ1Y3QgeworICAgICAgICAgICAgICAgIGludDMyX3QgdGFnOworICAgICAg
ICAgICAgICAgIEpTQ2VsbCogbV9wdHI7CisgICAgICAgICAgICB9IGFzUHRyOwogI2Vsc2UKICAg
ICAgICAgICAgIHN0cnVjdCB7CiAgICAgICAgICAgICAgICAgaW50MzJfdCBwYXlsb2FkOwogICAg
ICAgICAgICAgICAgIGludDMyX3QgdGFnOwogICAgICAgICAgICAgfSBhc0JpdHM7CisgICAgICAg
ICAgICBzdHJ1Y3QgeworICAgICAgICAgICAgICAgIEpTQ2VsbCogbV9wdHI7CisgICAgICAgICAg
ICAgICAgaW50MzJfdCB0YWc7CisgICAgICAgICAgICB9IGFzUHRyOwogI2VuZGlmCiAgICAgICAg
IH0gdTsKICNlbHNlIC8vIFVTRShKU1ZBTFVFMzJfNjQpCkBAIC00OTAsNyArNTAwLDcgQEAgbmFt
ZXNwYWNlIEpTQyB7CiAgICAgICAgICAgICB1LmFzQml0cy50YWcgPSBDZWxsVGFnOwogICAgICAg
ICBlbHNlCiAgICAgICAgICAgICB1LmFzQml0cy50YWcgPSBFbXB0eVZhbHVlVGFnOwotICAgICAg
ICB1LmFzQml0cy5wYXlsb2FkID0gcmVpbnRlcnByZXRfY2FzdDxpbnQzMl90PihwdHIpOworICAg
ICAgICB1LmFzUHRyLm1fcHRyID0gcHRyOwogI2lmIEVOQUJMRShKU0NfWk9NQklFUykKICAgICAg
ICAgQVNTRVJUKCFpc1pvbWJpZSgpKTsKICNlbmRpZgpAQCAtNTAyLDcgKzUxMiw3IEBAIG5hbWVz
cGFjZSBKU0MgewogICAgICAgICAgICAgdS5hc0JpdHMudGFnID0gQ2VsbFRhZzsKICAgICAgICAg
ZWxzZQogICAgICAgICAgICAgdS5hc0JpdHMudGFnID0gRW1wdHlWYWx1ZVRhZzsKLSAgICAgICAg
dS5hc0JpdHMucGF5bG9hZCA9IHJlaW50ZXJwcmV0X2Nhc3Q8aW50MzJfdD4oY29uc3RfY2FzdDxK
U0NlbGwqPihwdHIpKTsKKyAgICAgICAgdS5hc1B0ci5tX3B0ciA9IGNvbnN0X2Nhc3Q8SlNDZWxs
Kj4ocHRyKTsKICNpZiBFTkFCTEUoSlNDX1pPTUJJRVMpCiAgICAgICAgIEFTU0VSVCghaXNab21i
aWUoKSk7CiAjZW5kaWYKQEAgLTU5NywxMCArNjA3LDE2IEBAIG5hbWVzcGFjZSBKU0MgewogICAg
ICAgICByZXR1cm4gdS5hc0RvdWJsZTsKICAgICB9CiAgICAgCi0gICAgQUxXQVlTX0lOTElORSBK
U0NlbGwqIEpTVmFsdWU6OmFzQ2VsbCgpIGNvbnN0CisgICAgQUxXQVlTX0lOTElORSBKU0NlbGwq
IGNvbnN0JiBKU1ZhbHVlOjphc0NlbGwoKSBjb25zdAorICAgIHsKKyAgICAgICAgQVNTRVJUKGlz
Q2VsbCgpKTsKKyAgICAgICAgcmV0dXJuIHUuYXNQdHIubV9wdHI7CisgICAgfQorCisgICAgQUxX
QVlTX0lOTElORSBKU0NlbGwqJiBKU1ZhbHVlOjphc0NlbGwoKQogICAgIHsKICAgICAgICAgQVNT
RVJUKGlzQ2VsbCgpKTsKLSAgICAgICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8SlNDZWxsKj4o
dS5hc0JpdHMucGF5bG9hZCk7CisgICAgICAgIHJldHVybiB1LmFzUHRyLm1fcHRyOwogICAgIH0K
IAogICAgIEFMV0FZU19JTkxJTkUgSlNWYWx1ZTo6SlNWYWx1ZShFbmNvZGVBc0RvdWJsZVRhZywg
RXhlY1N0YXRlKiwgZG91YmxlIGQpCkluZGV4OiBKYXZhU2NyaXB0Q29yZS9ydW50aW1lL01hcmtT
dGFjay5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIEphdmFTY3JpcHRDb3JlL3J1bnRpbWUvTWFya1N0YWNrLmgJ
KHJldmlzaW9uIDYyMDE1KQorKysgSmF2YVNjcmlwdENvcmUvcnVudGltZS9NYXJrU3RhY2suaAko
d29ya2luZyBjb3B5KQpAQCAtMjcsNiArMjcsNyBAQAogI2RlZmluZSBNYXJrU3RhY2tfaAogCiAj
aW5jbHVkZSAiSlNWYWx1ZS5oIgorI2luY2x1ZGUgIlJlZ2lzdGVyLmgiCiAjaW5jbHVkZSA8d3Rm
L05vbmNvcHlhYmxlLmg+CiAKIG5hbWVzcGFjZSBKU0MgewpAQCAtNDYsOCArNDcsMTAgQEAgbmFt
ZXNwYWNlIEpTQyB7CiAgICAgICAgIHsKICAgICAgICAgfQogCi0gICAgICAgIEFMV0FZU19JTkxJ
TkUgdm9pZCBhcHBlbmQoSlNWYWx1ZSk7Ci0gICAgICAgIHZvaWQgYXBwZW5kKEpTQ2VsbCopOwor
ICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPgorICAgICAgICBBTFdBWVNfSU5MSU5FIHZvaWQg
YXBwZW5kKFQqJiBjZWxsKTsKKyAgICAgICAgQUxXQVlTX0lOTElORSB2b2lkIGFwcGVuZChKU1Zh
bHVlJik7CisgICAgICAgIEFMV0FZU19JTkxJTkUgdm9pZCBhcHBlbmQoUmVnaXN0ZXImKTsKICAg
ICAgICAgCiAgICAgICAgIEFMV0FZU19JTkxJTkUgdm9pZCBhcHBlbmRWYWx1ZXMoUmVnaXN0ZXIq
IHZhbHVlcywgc2l6ZV90IGNvdW50LCBNYXJrU2V0UHJvcGVydGllcyBwcm9wZXJ0aWVzID0gTm9O
dWxsVmFsdWVzKQogICAgICAgICB7CkBAIC03MCw2ICs3Myw4IEBAIG5hbWVzcGFjZSBKU0Mgewog
ICAgICAgICB9CiAKICAgICBwcml2YXRlOgorICAgICAgICB2b2lkIGFwcGVuZEludGVybmFsKEpT
Q2VsbComKTsKKwogICAgICAgICB2b2lkIG1hcmtDaGlsZHJlbihKU0NlbGwqKTsKIAogICAgICAg
ICBzdHJ1Y3QgTWFya1NldCB7CkluZGV4OiBKYXZhU2NyaXB0Q29yZS9ydW50aW1lL05hdGl2ZUVy
cm9yQ29uc3RydWN0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEphdmFTY3JpcHRDb3JlL3J1bnRpbWUv
TmF0aXZlRXJyb3JDb25zdHJ1Y3Rvci5jcHAJKHJldmlzaW9uIDYyMDE1KQorKysgSmF2YVNjcmlw
dENvcmUvcnVudGltZS9OYXRpdmVFcnJvckNvbnN0cnVjdG9yLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtNjgsNCArNjgsMjUgQEAgQ2FsbFR5cGUgTmF0aXZlRXJyb3JDb25zdHJ1Y3Rvcjo6Z2V0Q2Fs
bAogICAgIHJldHVybiBDYWxsVHlwZUhvc3Q7CiB9CiAKK3ZvaWQgTmF0aXZlRXJyb3JDb25zdHJ1
Y3Rvcjo6bWFya0NoaWxkcmVuKE1hcmtTdGFjayYgbWFya1N0YWNrKQoreworI2lmbmRlZiBOREVC
VUcKKyAgICBib29sIHdhc0NoZWNraW5nRm9yRGVmYXVsdE1hcmtWaW9sYXRpb24gPSBtYXJrU3Rh
Y2subV9pc0NoZWNraW5nRm9yRGVmYXVsdE1hcmtWaW9sYXRpb247CisgICAgbWFya1N0YWNrLm1f
aXNDaGVja2luZ0ZvckRlZmF1bHRNYXJrVmlvbGF0aW9uID0gZmFsc2U7CisjZW5kaWYKKworICAg
IG1hcmtDaGlsZHJlbkRpcmVjdChtYXJrU3RhY2spOworCisjaWZuZGVmIE5ERUJVRworICAgIG1h
cmtTdGFjay5tX2lzQ2hlY2tpbmdGb3JEZWZhdWx0TWFya1Zpb2xhdGlvbiA9IHdhc0NoZWNraW5n
Rm9yRGVmYXVsdE1hcmtWaW9sYXRpb247CisjZW5kaWYKK30KKworQUxXQVlTX0lOTElORSB2b2lk
IE5hdGl2ZUVycm9yQ29uc3RydWN0b3I6Om1hcmtDaGlsZHJlbkRpcmVjdChNYXJrU3RhY2smIG1h
cmtTdGFjaykKK3sKKyAgICBJbnRlcm5hbEZ1bmN0aW9uOjptYXJrQ2hpbGRyZW4obWFya1N0YWNr
KTsKKworICAgIG1hcmtTdGFjay5hcHBlbmQobV9lcnJvclN0cnVjdHVyZS0+c3RvcmVkUHJvdG90
eXBlKCkpOworfQorCiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IEphdmFTY3JpcHRDb3JlL3J1
bnRpbWUvTmF0aXZlRXJyb3JDb25zdHJ1Y3Rvci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEphdmFTY3JpcHRD
b3JlL3J1bnRpbWUvTmF0aXZlRXJyb3JDb25zdHJ1Y3Rvci5oCShyZXZpc2lvbiA2MjAxNSkKKysr
IEphdmFTY3JpcHRDb3JlL3J1bnRpbWUvTmF0aXZlRXJyb3JDb25zdHJ1Y3Rvci5oCSh3b3JraW5n
IGNvcHkpCkBAIC00MSw2ICs0MSw5IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICB2aXJ0dWFs
IENvbnN0cnVjdFR5cGUgZ2V0Q29uc3RydWN0RGF0YShDb25zdHJ1Y3REYXRhJik7CiAgICAgICAg
IHZpcnR1YWwgQ2FsbFR5cGUgZ2V0Q2FsbERhdGEoQ2FsbERhdGEmKTsKIAorICAgICAgICB2aXJ0
dWFsIHZvaWQgbWFya0NoaWxkcmVuKE1hcmtTdGFjayYpOworICAgICAgICBBTFdBWVNfSU5MSU5F
IHZvaWQgbWFya0NoaWxkcmVuRGlyZWN0KE1hcmtTdGFjayYpOworCiAgICAgICAgIHZpcnR1YWwg
Y29uc3QgQ2xhc3NJbmZvKiBjbGFzc0luZm8oKSBjb25zdCB7IHJldHVybiAmaW5mbzsgfQogCiAg
ICAgICAgIFJlZlB0cjxTdHJ1Y3R1cmU+IG1fZXJyb3JTdHJ1Y3R1cmU7CkluZGV4OiBKYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL1N0cnVjdHVyZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEphdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvU3RydWN0dXJlLmgJKHJldmlzaW9uIDYyMDE1KQorKysgSmF2YVNjcmlwdENvcmUv
cnVudGltZS9TdHJ1Y3R1cmUuaAkod29ya2luZyBjb3B5KQpAQCAtOTQsNyArOTQsOCBAQCBuYW1l
c3BhY2UgSlNDIHsKIAogICAgICAgICBjb25zdCBUeXBlSW5mbyYgdHlwZUluZm8oKSBjb25zdCB7
IHJldHVybiBtX3R5cGVJbmZvOyB9CiAKLSAgICAgICAgSlNWYWx1ZSBzdG9yZWRQcm90b3R5cGUo
KSBjb25zdCB7IHJldHVybiBtX3Byb3RvdHlwZTsgfQorICAgICAgICBKU1ZhbHVlIGNvbnN0ICZz
dG9yZWRQcm90b3R5cGUoKSBjb25zdCB7IHJldHVybiBtX3Byb3RvdHlwZTsgfQorICAgICAgICBK
U1ZhbHVlICZzdG9yZWRQcm90b3R5cGUoKSB7IHJldHVybiBtX3Byb3RvdHlwZTsgfQogICAgICAg
ICBKU1ZhbHVlIHByb3RvdHlwZUZvckxvb2t1cChFeGVjU3RhdGUqKSBjb25zdDsKICAgICAgICAg
U3RydWN0dXJlQ2hhaW4qIHByb3RvdHlwZUNoYWluKEV4ZWNTdGF0ZSopIGNvbnN0OwogCkluZGV4
OiBKYXZhU2NyaXB0R2x1ZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gSmF2YVNjcmlwdEdsdWUv
Q2hhbmdlTG9nCShyZXZpc2lvbiA2MjAxOCkKKysrIEphdmFTY3JpcHRHbHVlL0NoYW5nZUxvZwko
d29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE4IEBACisyMDEwLTA2LTI4ICBOYXRoYW4gTGF3cmVu
Y2UgIDxubGF3cmVuY2VAYXBwbGUuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAo
T09QUyEpLgorCisgICAgICAgIEZpeGVkIEphdmFTY3JpcHRHbHVlIHRvIHJ1biB0ZXN0anNnbHVl
IHVuZGVyIGRlYnVnIGFuZCByZW1vdmVkCisgICAgICAgIHVubmVlZGVkIG1hcmtpbmcuICBXZSBu
ZWVkIHRvIHJlbW92ZSB0aGlzIG1hcmtpbmcgaW4gb3JkZXIgdG8gaGF2ZQorICAgICAgICBNYXJr
U3RhY2s6OmFwcGVuZCB0YWtlIHJlZmVyZW5jZXMgZm9yIHVwZGF0aW5nIG1vdmFibGUgb2JqZWN0
cy4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTQxMTc3
CisKKyAgICAgICAgKiBKU1J1bi5jcHA6CisgICAgICAgIChKU1J1bjo6SlNSdW4pOgorICAgICAg
ICAqIEpTUnVuLmg6CisgICAgICAgICogSlNWYWx1ZVdyYXBwZXIuY3BwOgorICAgICAgICAoSlNW
YWx1ZVdyYXBwZXI6OkpTT2JqZWN0TWFyayk6CisKIDIwMTAtMDYtMDIgIEdhdmluIEJhcnJhY2xv
dWdoICA8YmFycmFjbG91Z2hAYXBwbGUuY29tPgogCiAgICAgICAgIFJldmlld2VkIGJ5IE9saXZl
ciBIdW50LgpJbmRleDogSmF2YVNjcmlwdEdsdWUvSlNSdW4uY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEph
dmFTY3JpcHRHbHVlL0pTUnVuLmNwcAkocmV2aXNpb24gNjIwMTUpCisrKyBKYXZhU2NyaXB0R2x1
ZS9KU1J1bi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ5LDcgKzQ5LDggQEAgSlNSdW46OkpTUnVu
KENGU3RyaW5nUmVmIHNvdXJjZSwgSlNGbGFncwogICAgIDogICBKU0Jhc2Uoa0pTUnVuVHlwZUlE
KSwKICAgICAgICAgZlNvdXJjZShDRlN0cmluZ1RvVVN0cmluZyhzb3VyY2UpKSwKICAgICAgICAg
Zkdsb2JhbE9iamVjdChuZXcgKCZnZXRUaHJlYWRHbG9iYWxFeGVjU3RhdGUoKS0+Z2xvYmFsRGF0
YSgpKSBKU0dsdWVHbG9iYWxPYmplY3QoSlNHbHVlR2xvYmFsT2JqZWN0OjpjcmVhdGVTdHJ1Y3R1
cmUoanNOdWxsKCkpLCBpbkZsYWdzKSksCi0gICAgICAgIGZGbGFncyhpbkZsYWdzKQorICAgICAg
ICBmRmxhZ3MoaW5GbGFncyksCisgICAgICAgIGxvY2soU2lsZW5jZUFzc2VydGlvbnNPbmx5KQog
ewogfQogCkluZGV4OiBKYXZhU2NyaXB0R2x1ZS9KU1J1bi5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEphdmFT
Y3JpcHRHbHVlL0pTUnVuLmgJKHJldmlzaW9uIDYyMDE1KQorKysgSmF2YVNjcmlwdEdsdWUvSlNS
dW4uaAkod29ya2luZyBjb3B5KQpAQCAtNjksNiArNjksNyBAQCBjbGFzcyBKU1J1biA6IHB1Ymxp
YyBKU0Jhc2UgewogICAgICAgICBVU3RyaW5nIGZTb3VyY2U7CiAgICAgICAgIFByb3RlY3RlZFB0
cjxKU0dsb2JhbE9iamVjdD4gZkdsb2JhbE9iamVjdDsKICAgICAgICAgSlNGbGFncyBmRmxhZ3M7
CisgICAgICAgIEpTTG9jayBsb2NrOwogfTsKIAogI2VuZGlmCkluZGV4OiBKYXZhU2NyaXB0R2x1
ZS9KU1ZhbHVlV3JhcHBlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gSmF2YVNjcmlwdEdsdWUvSlNWYWx1
ZVdyYXBwZXIuY3BwCShyZXZpc2lvbiA2MjAxNSkKKysrIEphdmFTY3JpcHRHbHVlL0pTVmFsdWVX
cmFwcGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTk0LDE1ICsxOTQsNCBAQCBDRlR5cGVSZWYg
SlNWYWx1ZVdyYXBwZXI6OkpTT2JqZWN0Q29weUNGCiAKIHZvaWQgSlNWYWx1ZVdyYXBwZXI6OkpT
T2JqZWN0TWFyayh2b2lkICpkYXRhKQogewotICAgIEpTVmFsdWVXcmFwcGVyKiBwdHIgPSAoSlNW
YWx1ZVdyYXBwZXIqKWRhdGE7Ci0gICAgaWYgKHB0cikKLSAgICB7Ci0gICAgICAgIC8vIFRoaXMg
cmVzdWx0cyBpbiByZWN1cnNpdmUgbWFya2luZyBidXQgd2lsbCBiZSBvdGhlcndpc2Ugc2FmZSBh
bmQgY29ycmVjdC4KLSAgICAgICAgLy8gV2UgY2xhaW0gdGhlIGFycmF5IHZwdHIgaXMgMCBiZWNh
dXNlIHdlIGRvbid0IGhhdmUgYWNjZXNzIHRvIGl0IGhlcmUsIGFuZAotICAgICAgICAvLyBjbGFp
bWluZyAwIGlzIGZ1bmN0aW9uYWxseSBoYXJtbGVzcyAtLSBpdCBtZXJlbHkgbWVhbnMgdGhhdCB3
ZSBjYW4ndAotICAgICAgICAvLyBkZXZpcnR1YWxpc2UgbWFya2luZyBvZiBhcnJheXMgd2hlbiBy
ZWN1cnNpbmcgZnJvbSB0aGlzIHBvaW50LgotICAgICAgICBNYXJrU3RhY2sgbWFya1N0YWNrKDAp
OwotICAgICAgICBtYXJrU3RhY2suYXBwZW5kKHB0ci0+ZlZhbHVlLmdldCgpKTsKLSAgICAgICAg
bWFya1N0YWNrLmRyYWluKCk7Ci0gICAgfQogfQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>62960</attachid>
            <date>2010-07-29 09:30:07 -0700</date>
            <delta_ts>2010-07-29 13:47:21 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>references.patch</filename>
            <type>text/plain</type>
            <size>14174</size>
            <attacher name="Nathan Lawrence">nlawrence</attacher>
            
              <data encoding="base64">SW5kZXg6IEphdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDY0MjExKQorKysgSmF2YVNjcmlwdENvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMzkgQEAKKzIwMTAtMDctMjggIE5hdGhhbiBM
YXdyZW5jZSAgPG5sYXdyZW5jZUBhcHBsZS5jb20+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9C
T0RZIChPT1BTISkuCisKKyAgICAgICAgUmVmYWN0b3JpbmcgTWFya1N0YWNrOjphcHBlbmQgdG8g
dGFrZSBhIHJlZmVyZW5jZS4gIFRoaXMgaXMgaW4KKyAgICAgICAgcHJlcGFyYXRpb24gZm9yIG1v
dmFibGUgb2JqZWN0cyB3aGVuIHdlIHdpbGwgbmVlZCB0byB1cGRhdGUgcG9pbnRlcnMuCisgICAg
ICAgIGh0dHA6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTQxMTc3CisKKyAgICAg
ICAgKiBieXRlY29kZS9Db2RlQmxvY2suY3BwOgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6Om1h
cmtBZ2dyZWdhdGUpOgorICAgICAgICAqIHJ1bnRpbWUvQ29sbGVjdG9yLmNwcDoKKyAgICAgICAg
KEpTQzo6SGVhcDo6bWFya0NvbnNlcnZhdGl2ZWx5KToKKyAgICAgICAgKiBydW50aW1lL0pTQ2Vs
bC5oOgorICAgICAgICAoSlNDOjpKU1ZhbHVlOjphc0NlbGwpOgorICAgICAgICAoSlNDOjpNYXJr
U3RhY2s6OmFwcGVuZCk6CisgICAgICAgIChKU0M6Ok1hcmtTdGFjazo6YXBwZW5kSW50ZXJuYWwp
OgorICAgICAgICAqIHJ1bnRpbWUvSlNHbG9iYWxPYmplY3QuY3BwOgorICAgICAgICAoSlNDOjpt
YXJrSWZOZWVkZWQpOgorICAgICAgICAqIHJ1bnRpbWUvSlNPTk9iamVjdC5jcHA6CisgICAgICAg
IChKU0M6OlN0cmluZ2lmaWVyOjpIb2xkZXI6Om9iamVjdCk6CisgICAgICAgICogcnVudGltZS9K
U09iamVjdC5oOgorICAgICAgICAoSlNDOjpKU09iamVjdDo6cHJvdG90eXBlKToKKyAgICAgICAg
KiBydW50aW1lL0pTU3RhdGljU2NvcGVPYmplY3QuY3BwOgorICAgICAgICAoSlNDOjpKU1N0YXRp
Y1Njb3BlT2JqZWN0OjptYXJrQ2hpbGRyZW4pOgorICAgICAgICAqIHJ1bnRpbWUvSlNWYWx1ZS5o
OgorICAgICAgICAoSlNDOjpKU1ZhbHVlOjopOgorICAgICAgICAoSlNDOjpKU1ZhbHVlOjpKU1Zh
bHVlKToKKyAgICAgICAgKEpTQzo6SlNWYWx1ZTo6YXNDZWxsKToKKyAgICAgICAgKiBydW50aW1l
L01hcmtTdGFjay5oOgorICAgICAgICAqIHJ1bnRpbWUvTmF0aXZlRXJyb3JDb25zdHJ1Y3Rvci5j
cHA6CisgICAgICAgIChKU0M6Ok5hdGl2ZUVycm9yQ29uc3RydWN0b3I6OmNyZWF0ZVN0cnVjdHVy
ZSk6CisgICAgICAgIChKU0M6Ok5hdGl2ZUVycm9yQ29uc3RydWN0b3I6Om1hcmtDaGlsZHJlbik6
CisgICAgICAgICogcnVudGltZS9OYXRpdmVFcnJvckNvbnN0cnVjdG9yLmg6CisgICAgICAgICog
cnVudGltZS9TdHJ1Y3R1cmUuaDoKKyAgICAgICAgKEpTQzo6U3RydWN0dXJlOjpzdG9yZWRQcm90
b3R5cGUpOgorCiAyMDEwLTA3LTI3ICBLaW51a28gWWFzdWRhICA8a2ludWtvQGNocm9taXVtLm9y
Zz4KIAogICAgICAgICBSZXZpZXdlZCBieSBPamFuIFZhZmFpLgpJbmRleDogSmF2YVNjcmlwdENv
cmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0Q29yZS9i
eXRlY29kZS9Db2RlQmxvY2suY3BwCShyZXZpc2lvbiA2NDIxMSkKKysrIEphdmFTY3JpcHRDb3Jl
L2J5dGVjb2RlL0NvZGVCbG9jay5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE1MTMsNyArMTUxMyw3
IEBAIHZvaWQgQ29kZUJsb2NrOjpyZWZTdHJ1Y3R1cmVzKEluc3RydWN0aW8KIHZvaWQgQ29kZUJs
b2NrOjptYXJrQWdncmVnYXRlKE1hcmtTdGFjayYgbWFya1N0YWNrKQogewogICAgIGZvciAoc2l6
ZV90IGkgPSAwOyBpIDwgbV9jb25zdGFudFJlZ2lzdGVycy5zaXplKCk7ICsraSkKLSAgICAgICAg
bWFya1N0YWNrLmFwcGVuZChtX2NvbnN0YW50UmVnaXN0ZXJzW2ldLmpzVmFsdWUoKSk7CisgICAg
ICAgIG1hcmtTdGFjay5hcHBlbmQobV9jb25zdGFudFJlZ2lzdGVyc1tpXSk7CiAgICAgZm9yIChz
aXplX3QgaSA9IDA7IGkgPCBtX2Z1bmN0aW9uRXhwcnMuc2l6ZSgpOyArK2kpCiAgICAgICAgIG1f
ZnVuY3Rpb25FeHByc1tpXS0+bWFya0FnZ3JlZ2F0ZShtYXJrU3RhY2spOwogICAgIGZvciAoc2l6
ZV90IGkgPSAwOyBpIDwgbV9mdW5jdGlvbkRlY2xzLnNpemUoKTsgKytpKQpJbmRleDogSmF2YVNj
cmlwdENvcmUvcnVudGltZS9Db2xsZWN0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEphdmFTY3JpcHRD
b3JlL3J1bnRpbWUvQ29sbGVjdG9yLmNwcAkocmV2aXNpb24gNjQyMTEpCisrKyBKYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0NvbGxlY3Rvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTc1OSw3ICs3NTks
OCBAQCB2b2lkIEhlYXA6Om1hcmtDb25zZXJ2YXRpdmVseShNYXJrU3RhY2smCiAgICAgICAgICAg
ICBmb3IgKHNpemVfdCBibG9jayA9IDA7IGJsb2NrIDwgdXNlZEJsb2NrczsgYmxvY2srKykgewog
ICAgICAgICAgICAgICAgIGlmIChibG9ja3NbYmxvY2tdICE9IGJsb2NrQWRkcikKICAgICAgICAg
ICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICAgICAgbWFya1N0YWNrLmFwcGVuZChy
ZWludGVycHJldF9jYXN0PEpTQ2VsbCo+KHhBc0JpdHMpKTsKKyAgICAgICAgICAgICAgICBKU0Nl
bGwqIGNlbGwgPSByZWludGVycHJldF9jYXN0PEpTQ2VsbCo+KHhBc0JpdHMpOworICAgICAgICAg
ICAgICAgIG1hcmtTdGFjay5hcHBlbmQoY2VsbCk7CiAgICAgICAgICAgICAgICAgbWFya1N0YWNr
LmRyYWluKCk7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KSW5kZXg6IEphdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvSlNDZWxsLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gSmF2YVNjcmlwdENvcmUvcnVudGltZS9K
U0NlbGwuaAkocmV2aXNpb24gNjQyMTEpCisrKyBKYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQ2Vs
bC5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNSw2ICszNSw3IEBACiBuYW1lc3BhY2UgSlNDIHsKIAog
ICAgIGNsYXNzIEpTQ2VsbCA6IHB1YmxpYyBOb25jb3B5YWJsZUN1c3RvbUFsbG9jYXRlZCB7Cisg
ICAgICAgIGZyaWVuZCBjbGFzcyBDb2xsZWN0b3JIZWFwOwogICAgICAgICBmcmllbmQgY2xhc3Mg
R2V0dGVyU2V0dGVyOwogICAgICAgICBmcmllbmQgY2xhc3MgSGVhcDsKICAgICAgICAgZnJpZW5k
IGNsYXNzIEpJVDsKQEAgLTk3LDYgKzk4LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHZv
aWQqIG9wZXJhdG9yIG5ldyhzaXplX3QsIHZvaWQqIHBsYWNlbWVudE5ld0Rlc3RpbmF0aW9uKSB7
IHJldHVybiBwbGFjZW1lbnROZXdEZXN0aW5hdGlvbjsgfQogCiAgICAgICAgIHZpcnR1YWwgdm9p
ZCBtYXJrQ2hpbGRyZW4oTWFya1N0YWNrJik7CisKICNpZiBFTkFCTEUoSlNDX1pPTUJJRVMpCiAg
ICAgICAgIHZpcnR1YWwgYm9vbCBpc1pvbWJpZSgpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CiAj
ZW5kaWYKQEAgLTIzNyw3ICsyMzksMTMgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgfQogCiAjaWYg
IVVTRShKU1ZBTFVFMzJfNjQpCi0gICAgQUxXQVlTX0lOTElORSBKU0NlbGwqIEpTVmFsdWU6OmFz
Q2VsbCgpIGNvbnN0CisgICAgQUxXQVlTX0lOTElORSBKU0NlbGwqJiBKU1ZhbHVlOjphc0NlbGwo
KQorICAgIHsKKyAgICAgICAgQVNTRVJUKGlzQ2VsbCgpKTsKKyAgICAgICAgcmV0dXJuIG1fcHRy
OworICAgIH0KKworICAgIEFMV0FZU19JTkxJTkUgSlNDZWxsKiBjb25zdCYgSlNWYWx1ZTo6YXND
ZWxsKCkgY29uc3QKICAgICB7CiAgICAgICAgIEFTU0VSVChpc0NlbGwoKSk7CiAgICAgICAgIHJl
dHVybiBtX3B0cjsKQEAgLTMyOSwyNCArMzM3LDQyIEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAg
ICByZXR1cm4gaXNDZWxsKCkgPyBhc0NlbGwoKS0+dG9UaGlzT2JqZWN0KGV4ZWMpIDogdG9UaGlz
T2JqZWN0U2xvd0Nhc2UoZXhlYyk7CiAgICAgfQogCi0gICAgQUxXQVlTX0lOTElORSB2b2lkIE1h
cmtTdGFjazo6YXBwZW5kKEpTQ2VsbCogY2VsbCkKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPgor
ICAgIEFMV0FZU19JTkxJTkUgdm9pZCBNYXJrU3RhY2s6OmFwcGVuZChUKiYgY2VsbCkKKyAgICB7
CisgICAgICAgIC8qIFJlZmVyZW5jZXMgaW4gQysrIGFyZSBub3QgY292YXJpYW50LCBzbyB3ZSBm
dWRnZSBhcm91bmQgaXQgd2l0aAorICAgICAgICAgKiB0aGlzIG5vbnNlbnNlLgorICAgICAgICAg
Ki8KKyAgICAgICAgSlNDZWxsKiYgcHRyID0gKnJlaW50ZXJwcmV0X2Nhc3Q8SlNDZWxsKio+KCZj
ZWxsKTsKKyAgICAgICAgYXBwZW5kSW50ZXJuYWwocHRyKTsKKyAgICB9CisKKyAgICBBTFdBWVNf
SU5MSU5FIHZvaWQgTWFya1N0YWNrOjphcHBlbmQoSlNWYWx1ZSYgdmFsdWUpCisgICAgeworICAg
ICAgICBBU1NFUlQodmFsdWUpOworICAgICAgICBpZiAodmFsdWUuaXNDZWxsKCkpCisgICAgICAg
ICAgICBhcHBlbmRJbnRlcm5hbCh2YWx1ZS5hc0NlbGwoKSk7CisgICAgfQorCisgICAgQUxXQVlT
X0lOTElORSB2b2lkIE1hcmtTdGFjazo6YXBwZW5kKFJlZ2lzdGVyJiByZWcpCisgICAgeworICAg
ICAgICBKU1ZhbHVlIHZhbHVlID0gcmVnLmpzVmFsdWUoKTsKKyAgICAgICAgYXBwZW5kKHZhbHVl
KTsKKyAgICAgICAgcmVnID0gdmFsdWU7CisgICAgfQorCisgICAgaW5saW5lIHZvaWQgTWFya1N0
YWNrOjphcHBlbmRJbnRlcm5hbChKU0NlbGwqJiBjZWxsKQogICAgIHsKICAgICAgICAgQVNTRVJU
KCFtX2lzQ2hlY2tpbmdGb3JEZWZhdWx0TWFya1Zpb2xhdGlvbik7CiAgICAgICAgIEFTU0VSVChj
ZWxsKTsKICAgICAgICAgaWYgKEhlYXA6OmlzQ2VsbE1hcmtlZChjZWxsKSkKICAgICAgICAgICAg
IHJldHVybjsKKwogICAgICAgICBIZWFwOjptYXJrQ2VsbChjZWxsKTsKICAgICAgICAgaWYgKGNl
bGwtPnN0cnVjdHVyZSgpLT50eXBlSW5mbygpLnR5cGUoKSA+PSBDb21wb3VuZFR5cGUpCiAgICAg
ICAgICAgICBtX3ZhbHVlcy5hcHBlbmQoY2VsbCk7CiAgICAgfQogCi0gICAgQUxXQVlTX0lOTElO
RSB2b2lkIE1hcmtTdGFjazo6YXBwZW5kKEpTVmFsdWUgdmFsdWUpCi0gICAgewotICAgICAgICBB
U1NFUlQodmFsdWUpOwotICAgICAgICBpZiAodmFsdWUuaXNDZWxsKCkpCi0gICAgICAgICAgICBh
cHBlbmQodmFsdWUuYXNDZWxsKCkpOwotICAgIH0KLQogICAgIGlubGluZSBIZWFwKiBIZWFwOjpo
ZWFwKEpTVmFsdWUgdikKICAgICB7CiAgICAgICAgIGlmICghdi5pc0NlbGwoKSkKSW5kZXg6IEph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxPYmplY3QuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxPYmplY3QuY3BwCShyZXZpc2lvbiA2NDIxMSkK
KysrIEphdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxPYmplY3QuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC04MCwxNiArODAsMTcgQEAgc3RhdGljIGNvbnN0IGludCBpbml0aWFsVGlja0NvdW50
VGhyZXNobwogLy8gUHJlZmVycmVkIG51bWJlciBvZiBtaWxsaXNlY29uZHMgYmV0d2VlbiBlYWNo
IHRpbWVvdXQgY2hlY2sKIHN0YXRpYyBjb25zdCBpbnQgcHJlZmVycmVkU2NyaXB0Q2hlY2tUaW1l
SW50ZXJ2YWwgPSAxMDAwOwogCi1zdGF0aWMgaW5saW5lIHZvaWQgbWFya0lmTmVlZGVkKE1hcmtT
dGFjayYgbWFya1N0YWNrLCBKU1ZhbHVlIHYpCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPgorc3RhdGlj
IHZvaWQgbWFya0lmTmVlZGVkKE1hcmtTdGFjayYgbWFya1N0YWNrLCBUKiYgdikKIHsKICAgICBp
ZiAodikKICAgICAgICAgbWFya1N0YWNrLmFwcGVuZCh2KTsKIH0KIAotc3RhdGljIGlubGluZSB2
b2lkIG1hcmtJZk5lZWRlZChNYXJrU3RhY2smIG1hcmtTdGFjaywgY29uc3QgUmVmUHRyPFN0cnVj
dHVyZT4mIHMpCitzdGF0aWMgdm9pZCBtYXJrSWZOZWVkZWQoTWFya1N0YWNrJiBtYXJrU3RhY2ss
IFJlZlB0cjxTdHJ1Y3R1cmU+JiBzKQogewogICAgIGlmIChzKQotICAgICAgICBtYXJrSWZOZWVk
ZWQobWFya1N0YWNrLCBzLT5zdG9yZWRQcm90b3R5cGUoKSk7CisgICAgICAgIG1hcmtTdGFjay5h
cHBlbmQocy0+c3RvcmVkUHJvdG90eXBlKCkpOwogfQogCiBKU0dsb2JhbE9iamVjdDo6fkpTR2xv
YmFsT2JqZWN0KCkKSW5kZXg6IEphdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNPTk9iamVjdC5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU09OT2JqZWN0LmNwcAkocmV2
aXNpb24gNjQyMTEpCisrKyBKYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTT05PYmplY3QuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC04MiwxMiArODIsMTMgQEAgcHJpdmF0ZToKICAgICBwdWJsaWM6CiAg
ICAgICAgIEhvbGRlcihKU09iamVjdCopOwogCi0gICAgICAgIEpTT2JqZWN0KiBvYmplY3QoKSBj
b25zdCB7IHJldHVybiBtX29iamVjdDsgfQorICAgICAgICBKU09iamVjdComIG9iamVjdCgpIHsg
cmV0dXJuIG1fb2JqZWN0OyB9CisgICAgICAgIEpTT2JqZWN0KiBjb25zdCYgb2JqZWN0KCkgY29u
c3QgeyByZXR1cm4gbV9vYmplY3Q7IH0KIAogICAgICAgICBib29sIGFwcGVuZE5leHRQcm9wZXJ0
eShTdHJpbmdpZmllciYsIFN0cmluZ0J1aWxkZXImKTsKIAogICAgIHByaXZhdGU6Ci0gICAgICAg
IEpTT2JqZWN0KiBjb25zdCBtX29iamVjdDsKKyAgICAgICAgSlNPYmplY3QqIG1fb2JqZWN0Owog
ICAgICAgICBjb25zdCBib29sIG1faXNBcnJheTsKICAgICAgICAgYm9vbCBtX2lzSlNBcnJheTsK
ICAgICAgICAgdW5zaWduZWQgbV9pbmRleDsKSW5kZXg6IEphdmFTY3JpcHRDb3JlL3J1bnRpbWUv
SlNPYmplY3QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTT2JqZWN0
LmgJKHJldmlzaW9uIDY0MjExKQorKysgSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU09iamVjdC5o
CSh3b3JraW5nIGNvcHkpCkBAIC04Niw3ICs4Niw4IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAg
ICAvLyBpbiB0aGUgY2xhc3MgYXMgaXQgcmVzdWx0cyBpbiB0aGUgdnRhYmxlIGJlaW5nIGdlbmVy
YXRlZCBhcyBhIHdlYWsgc3ltYm9sCiAgICAgICAgIHZpcnR1YWwgfkpTT2JqZWN0KCk7CiAKLSAg
ICAgICAgSlNWYWx1ZSBwcm90b3R5cGUoKSBjb25zdDsKKyAgICAgICAgSlNWYWx1ZSYgcHJvdG90
eXBlKCk7CisgICAgICAgIGNvbnN0IEpTVmFsdWUmIHByb3RvdHlwZSgpIGNvbnN0OwogICAgICAg
ICB2b2lkIHNldFByb3RvdHlwZShKU1ZhbHVlIHByb3RvdHlwZSk7CiAgICAgICAgIGJvb2wgc2V0
UHJvdG90eXBlV2l0aEN5Y2xlQ2hlY2soSlNWYWx1ZSBwcm90b3R5cGUpOwogICAgICAgICAKQEAg
LTMxMiw3ICszMTMsMTIgQEAgaW5saW5lIEpTT2JqZWN0Ojp+SlNPYmplY3QoKQogICAgIG1fc3Ry
dWN0dXJlLT5kZXJlZigpOwogfQogCi1pbmxpbmUgSlNWYWx1ZSBKU09iamVjdDo6cHJvdG90eXBl
KCkgY29uc3QKK2lubGluZSBKU1ZhbHVlJiBKU09iamVjdDo6cHJvdG90eXBlKCkKK3sKKyAgICBy
ZXR1cm4gbV9zdHJ1Y3R1cmUtPnN0b3JlZFByb3RvdHlwZSgpOworfQorCitpbmxpbmUgY29uc3Qg
SlNWYWx1ZSYgSlNPYmplY3Q6OnByb3RvdHlwZSgpIGNvbnN0CiB7CiAgICAgcmV0dXJuIG1fc3Ry
dWN0dXJlLT5zdG9yZWRQcm90b3R5cGUoKTsKIH0KSW5kZXg6IEphdmFTY3JpcHRDb3JlL3J1bnRp
bWUvSlNTdGF0aWNTY29wZU9iamVjdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gSmF2YVNjcmlwdENvcmUv
cnVudGltZS9KU1N0YXRpY1Njb3BlT2JqZWN0LmNwcAkocmV2aXNpb24gNjQyMTEpCisrKyBKYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0pTU3RhdGljU2NvcGVPYmplY3QuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0zNCw3ICszNCw3IEBAIEFTU0VSVF9DTEFTU19GSVRTX0lOX0NFTEwoSlNTdGF0aWNTY29w
ZU8KIHZvaWQgSlNTdGF0aWNTY29wZU9iamVjdDo6bWFya0NoaWxkcmVuKE1hcmtTdGFjayYgbWFy
a1N0YWNrKQogewogICAgIEpTVmFyaWFibGVPYmplY3Q6Om1hcmtDaGlsZHJlbihtYXJrU3RhY2sp
OwotICAgIG1hcmtTdGFjay5hcHBlbmQoZCgpLT5yZWdpc3RlclN0b3JlLmpzVmFsdWUoKSk7Cisg
ICAgbWFya1N0YWNrLmFwcGVuZChkKCktPnJlZ2lzdGVyU3RvcmUpOwogfQogCiBKU09iamVjdCog
SlNTdGF0aWNTY29wZU9iamVjdDo6dG9UaGlzT2JqZWN0KEV4ZWNTdGF0ZSogZXhlYykgY29uc3QK
SW5kZXg6IEphdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNWYWx1ZS5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNWYWx1ZS5oCShyZXZpc2lvbiA2NDIxMSkKKysrIEphdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvSlNWYWx1ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xOTksNyArMTk5
LDggQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIEpTVmFsdWUgZ2V0SlNOdW1iZXIoKTsgLy8g
SlNWYWx1ZSgpIGlmIHRoaXMgaXMgbm90IGEgSlNOdW1iZXIgb3IgbnVtYmVyIG9iamVjdAogCiAg
ICAgICAgIGJvb2wgaXNDZWxsKCkgY29uc3Q7Ci0gICAgICAgIEpTQ2VsbCogYXNDZWxsKCkgY29u
c3Q7CisgICAgICAgIEpTQ2VsbComIGFzQ2VsbCgpOworICAgICAgICBKU0NlbGwqIGNvbnN0JiBh
c0NlbGwoKSBjb25zdDsKICAgICAgICAgYm9vbCBpc1ZhbGlkQ2FsbGVlKCk7CiAKICNpZm5kZWYg
TkRFQlVHCkBAIC0yNDAsMTEgKzI0MSwxOSBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgICAg
ICAgICBpbnQzMl90IHRhZzsKICAgICAgICAgICAgICAgICBpbnQzMl90IHBheWxvYWQ7CiAgICAg
ICAgICAgICB9IGFzQml0czsKKyAgICAgICAgICAgIHN0cnVjdCB7CisgICAgICAgICAgICAgICAg
aW50MzJfdCB0YWc7CisgICAgICAgICAgICAgICAgSlNDZWxsKiBtX3B0cjsKKyAgICAgICAgICAg
IH0gYXNQdHI7CiAjZWxzZQogICAgICAgICAgICAgc3RydWN0IHsKICAgICAgICAgICAgICAgICBp
bnQzMl90IHBheWxvYWQ7CiAgICAgICAgICAgICAgICAgaW50MzJfdCB0YWc7CiAgICAgICAgICAg
ICB9IGFzQml0czsKKyAgICAgICAgICAgIHN0cnVjdCB7CisgICAgICAgICAgICAgICAgSlNDZWxs
KiBtX3B0cjsKKyAgICAgICAgICAgICAgICBpbnQzMl90IHRhZzsKKyAgICAgICAgICAgIH0gYXNQ
dHI7CiAjZW5kaWYKICAgICAgICAgfSB1OwogI2Vsc2UgLy8gVVNFKEpTVkFMVUUzMl82NCkKQEAg
LTQ5MSw3ICs1MDAsNyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgICAgIHUuYXNCaXRzLnRh
ZyA9IENlbGxUYWc7CiAgICAgICAgIGVsc2UKICAgICAgICAgICAgIHUuYXNCaXRzLnRhZyA9IEVt
cHR5VmFsdWVUYWc7Ci0gICAgICAgIHUuYXNCaXRzLnBheWxvYWQgPSByZWludGVycHJldF9jYXN0
PGludDMyX3Q+KHB0cik7CisgICAgICAgIHUuYXNQdHIubV9wdHIgPSBwdHI7CiAjaWYgRU5BQkxF
KEpTQ19aT01CSUVTKQogICAgICAgICBBU1NFUlQoIWlzWm9tYmllKCkpOwogI2VuZGlmCkBAIC01
MDMsNyArNTEyLDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgICAgICB1LmFzQml0cy50YWcg
PSBDZWxsVGFnOwogICAgICAgICBlbHNlCiAgICAgICAgICAgICB1LmFzQml0cy50YWcgPSBFbXB0
eVZhbHVlVGFnOwotICAgICAgICB1LmFzQml0cy5wYXlsb2FkID0gcmVpbnRlcnByZXRfY2FzdDxp
bnQzMl90Pihjb25zdF9jYXN0PEpTQ2VsbCo+KHB0cikpOworICAgICAgICB1LmFzUHRyLm1fcHRy
ID0gY29uc3RfY2FzdDxKU0NlbGwqPihwdHIpOwogI2lmIEVOQUJMRShKU0NfWk9NQklFUykKICAg
ICAgICAgQVNTRVJUKCFpc1pvbWJpZSgpKTsKICNlbmRpZgpAQCAtNTk4LDEwICs2MDcsMTYgQEAg
bmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHJldHVybiB1LmFzRG91YmxlOwogICAgIH0KICAgICAK
LSAgICBBTFdBWVNfSU5MSU5FIEpTQ2VsbCogSlNWYWx1ZTo6YXNDZWxsKCkgY29uc3QKKyAgICBB
TFdBWVNfSU5MSU5FIEpTQ2VsbCogY29uc3QmIEpTVmFsdWU6OmFzQ2VsbCgpIGNvbnN0CisgICAg
eworICAgICAgICBBU1NFUlQoaXNDZWxsKCkpOworICAgICAgICByZXR1cm4gdS5hc1B0ci5tX3B0
cjsKKyAgICB9CisKKyAgICBBTFdBWVNfSU5MSU5FIEpTQ2VsbComIEpTVmFsdWU6OmFzQ2VsbCgp
CiAgICAgewogICAgICAgICBBU1NFUlQoaXNDZWxsKCkpOwotICAgICAgICByZXR1cm4gcmVpbnRl
cnByZXRfY2FzdDxKU0NlbGwqPih1LmFzQml0cy5wYXlsb2FkKTsKKyAgICAgICAgcmV0dXJuIHUu
YXNQdHIubV9wdHI7CiAgICAgfQogCiAgICAgQUxXQVlTX0lOTElORSBKU1ZhbHVlOjpKU1ZhbHVl
KEVuY29kZUFzRG91YmxlVGFnLCBFeGVjU3RhdGUqLCBkb3VibGUgZCkKSW5kZXg6IEphdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvTWFya1N0YWNrLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gSmF2YVNjcmlwdENvcmUv
cnVudGltZS9NYXJrU3RhY2suaAkocmV2aXNpb24gNjQyMTEpCisrKyBKYXZhU2NyaXB0Q29yZS9y
dW50aW1lL01hcmtTdGFjay5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNyw2ICsyNyw3IEBACiAjZGVm
aW5lIE1hcmtTdGFja19oCiAKICNpbmNsdWRlICJKU1ZhbHVlLmgiCisjaW5jbHVkZSAiUmVnaXN0
ZXIuaCIKICNpbmNsdWRlIDx3dGYvTm9uY29weWFibGUuaD4KIAogbmFtZXNwYWNlIEpTQyB7CkBA
IC00Niw4ICs0NywxMCBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgewogICAgICAgICB9CiAK
LSAgICAgICAgQUxXQVlTX0lOTElORSB2b2lkIGFwcGVuZChKU1ZhbHVlKTsKLSAgICAgICAgdm9p
ZCBhcHBlbmQoSlNDZWxsKik7CisgICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+CisgICAgICAg
IEFMV0FZU19JTkxJTkUgdm9pZCBhcHBlbmQoVComIGNlbGwpOworICAgICAgICBBTFdBWVNfSU5M
SU5FIHZvaWQgYXBwZW5kKEpTVmFsdWUmKTsKKyAgICAgICAgQUxXQVlTX0lOTElORSB2b2lkIGFw
cGVuZChSZWdpc3RlciYpOwogICAgICAgICAKICAgICAgICAgQUxXQVlTX0lOTElORSB2b2lkIGFw
cGVuZFZhbHVlcyhSZWdpc3RlciogdmFsdWVzLCBzaXplX3QgY291bnQsIE1hcmtTZXRQcm9wZXJ0
aWVzIHByb3BlcnRpZXMgPSBOb051bGxWYWx1ZXMpCiAgICAgICAgIHsKQEAgLTcwLDYgKzczLDgg
QEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIH0KIAogICAgIHByaXZhdGU6CisgICAgICAgIHZv
aWQgYXBwZW5kSW50ZXJuYWwoSlNDZWxsKiYpOworCiAgICAgICAgIHZvaWQgbWFya0NoaWxkcmVu
KEpTQ2VsbCopOwogCiAgICAgICAgIHN0cnVjdCBNYXJrU2V0IHsKSW5kZXg6IEphdmFTY3JpcHRD
b3JlL3J1bnRpbWUvTmF0aXZlRXJyb3JDb25zdHJ1Y3Rvci5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gSmF2
YVNjcmlwdENvcmUvcnVudGltZS9OYXRpdmVFcnJvckNvbnN0cnVjdG9yLmNwcAkocmV2aXNpb24g
NjQyMTEpCisrKyBKYXZhU2NyaXB0Q29yZS9ydW50aW1lL05hdGl2ZUVycm9yQ29uc3RydWN0b3Iu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC02OCw0ICs2OCwxOSBAQCBDYWxsVHlwZSBOYXRpdmVFcnJv
ckNvbnN0cnVjdG9yOjpnZXRDYWxsCiAgICAgcmV0dXJuIENhbGxUeXBlSG9zdDsKIH0KIAorUGFz
c1JlZlB0cjxTdHJ1Y3R1cmU+IE5hdGl2ZUVycm9yQ29uc3RydWN0b3I6OmNyZWF0ZVN0cnVjdHVy
ZShKU09iamVjdCogcHJvdG90eXBlKQoreworICAgIHJldHVybiBTdHJ1Y3R1cmU6OmNyZWF0ZShw
cm90b3R5cGUsIFR5cGVJbmZvKE9iamVjdFR5cGUsIFN0cnVjdHVyZUZsYWdzKSwgQW5vbnltb3Vz
U2xvdENvdW50KTsKK30KKwordm9pZCBOYXRpdmVFcnJvckNvbnN0cnVjdG9yOjptYXJrQ2hpbGRy
ZW4oTWFya1N0YWNrJiBtYXJrU3RhY2spCit7CisgICAgSW50ZXJuYWxGdW5jdGlvbjo6bWFya0No
aWxkcmVuKG1hcmtTdGFjayk7CisgICAgLy8gSEFDS1lfRklYOgorICAgIC8vIFRoZSBwcm90b3R5
cGUgcG9pbnRlciBoZXJlIG5lZWRzIHRvIGJlIHVwZGF0ZWQKKyAgICAvLworICAgIC8vIE5vdCBz
dXJlIGlmIHRoZXJlJ3MgYSBiZXR0ZXIgc29sdXRpb24KKyAgICBtYXJrU3RhY2suYXBwZW5kKG1f
ZXJyb3JTdHJ1Y3R1cmUtPnN0b3JlZFByb3RvdHlwZSgpKTsKK30KKwogfSAvLyBuYW1lc3BhY2Ug
SlNDCkluZGV4OiBKYXZhU2NyaXB0Q29yZS9ydW50aW1lL05hdGl2ZUVycm9yQ29uc3RydWN0b3Iu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0Q29yZS9ydW50aW1lL05hdGl2ZUVycm9yQ29uc3Ry
dWN0b3IuaAkocmV2aXNpb24gNjQyMTEpCisrKyBKYXZhU2NyaXB0Q29yZS9ydW50aW1lL05hdGl2
ZUVycm9yQ29uc3RydWN0b3IuaAkod29ya2luZyBjb3B5KQpAQCAtMzYsMTQgKzM2LDIwIEBAIG5h
bWVzcGFjZSBKU0MgewogICAgICAgICBzdGF0aWMgY29uc3QgQ2xhc3NJbmZvIGluZm87CiAKICAg
ICAgICAgU3RydWN0dXJlKiBlcnJvclN0cnVjdHVyZSgpIHsgcmV0dXJuIG1fZXJyb3JTdHJ1Y3R1
cmUuZ2V0KCk7IH0KKyAgICAgICAgc3RhdGljIFBhc3NSZWZQdHI8U3RydWN0dXJlPiBjcmVhdGVT
dHJ1Y3R1cmUoSlNPYmplY3QqIHByb3RvdHlwZSk7CiAKICAgICBwcml2YXRlOgogICAgICAgICB2
aXJ0dWFsIENvbnN0cnVjdFR5cGUgZ2V0Q29uc3RydWN0RGF0YShDb25zdHJ1Y3REYXRhJik7CiAg
ICAgICAgIHZpcnR1YWwgQ2FsbFR5cGUgZ2V0Q2FsbERhdGEoQ2FsbERhdGEmKTsKIAorICAgICAg
ICB2aXJ0dWFsIHZvaWQgbWFya0NoaWxkcmVuKE1hcmtTdGFjayYpOworCiAgICAgICAgIHZpcnR1
YWwgY29uc3QgQ2xhc3NJbmZvKiBjbGFzc0luZm8oKSBjb25zdCB7IHJldHVybiAmaW5mbzsgfQog
CiAgICAgICAgIFJlZlB0cjxTdHJ1Y3R1cmU+IG1fZXJyb3JTdHJ1Y3R1cmU7CisKKyAgICBwcm90
ZWN0ZWQ6CisgICAgICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBTdHJ1Y3R1cmVGbGFncyA9IElu
dGVybmFsRnVuY3Rpb246OlN0cnVjdHVyZUZsYWdzIHwgT3ZlcnJpZGVzTWFya0NoaWxkcmVuOwog
ICAgIH07CiAKIH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9TdHJ1Y3R1cmUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cnVj
dHVyZS5oCShyZXZpc2lvbiA2NDIxMSkKKysrIEphdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RydWN0
dXJlLmgJKHdvcmtpbmcgY29weSkKQEAgLTk0LDcgKzk0LDggQEAgbmFtZXNwYWNlIEpTQyB7CiAK
ICAgICAgICAgY29uc3QgVHlwZUluZm8mIHR5cGVJbmZvKCkgY29uc3QgeyByZXR1cm4gbV90eXBl
SW5mbzsgfQogCi0gICAgICAgIEpTVmFsdWUgc3RvcmVkUHJvdG90eXBlKCkgY29uc3QgeyByZXR1
cm4gbV9wcm90b3R5cGU7IH0KKyAgICAgICAgSlNWYWx1ZSBjb25zdCAmc3RvcmVkUHJvdG90eXBl
KCkgY29uc3QgeyByZXR1cm4gbV9wcm90b3R5cGU7IH0KKyAgICAgICAgSlNWYWx1ZSAmc3RvcmVk
UHJvdG90eXBlKCkgeyByZXR1cm4gbV9wcm90b3R5cGU7IH0KICAgICAgICAgSlNWYWx1ZSBwcm90
b3R5cGVGb3JMb29rdXAoRXhlY1N0YXRlKikgY29uc3Q7CiAgICAgICAgIFN0cnVjdHVyZUNoYWlu
KiBwcm90b3R5cGVDaGFpbihFeGVjU3RhdGUqKSBjb25zdDsKIAo=
</data>
<flag name="review"
          id="51233"
          type_id="1"
          status="-"
          setter="darin"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>62985</attachid>
            <date>2010-07-29 13:47:21 -0700</date>
            <delta_ts>2010-08-05 08:57:04 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>references.patch</filename>
            <type>text/plain</type>
            <size>14825</size>
            <attacher name="Nathan Lawrence">nlawrence</attacher>
            
              <data encoding="base64">SW5kZXg6IEphdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDY0MjgzKQorKysgSmF2YVNjcmlwdENvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsNDYgQEAKKzIwMTAtMDctMjkgIE5hdGhhbiBM
YXdyZW5jZSAgPG5sYXdyZW5jZUBhcHBsZS5jb20+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9C
T0RZIChPT1BTISkuCisKKyAgICAgICAgUmVmYWN0b3JpbmcgTWFya1N0YWNrOjphcHBlbmQgdG8g
dGFrZSBhIHJlZmVyZW5jZS4gIFRoaXMgaXMgaW4KKyAgICAgICAgcHJlcGFyYXRpb24gZm9yIG1v
dmFibGUgb2JqZWN0cyB3aGVuIHdlIHdpbGwgbmVlZCB0byB1cGRhdGUgcG9pbnRlcnMuCisgICAg
ICAgIGh0dHA6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTQxMTc3CisKKyAgICAg
ICAgVW5sZXNzIG90aGVyd2lzZSBub3RlZCwgYWxsIGNoYW5nZXMgYXJlIHRvIGVpdGhlciByZXR1
cm4gYnkgcmVmZXJlbmNlCisgICAgICAgIG9yIHBhc3MgYSByZWZlcmVuY2UgdG8gTWFya1N0YWNr
OjphcHBlbmQuCisKKyAgICAgICAgKiBieXRlY29kZS9Db2RlQmxvY2suY3BwOgorICAgICAgICAo
SlNDOjpDb2RlQmxvY2s6Om1hcmtBZ2dyZWdhdGUpOgorICAgICAgICAqIHJ1bnRpbWUvQ29sbGVj
dG9yLmNwcDoKKyAgICAgICAgKEpTQzo6SGVhcDo6bWFya0NvbnNlcnZhdGl2ZWx5KToKKyAgICAg
ICAgICAgIEFkZGVkIGEgdGVtcG9yYXJ5IHZhcmlhYmxlIHRvIHByZXZlbnQgbWFya2luZyBmcm9t
IGNoYW5naW5nIGFuCisgICAgICAgICAgICB1bmtub3duIHZhbHVlIG9uIHRoZSBzdGFjaworICAg
ICAgICAqIHJ1bnRpbWUvSlNDZWxsLmg6CisgICAgICAgIChKU0M6OkpTVmFsdWU6OmFzQ2VsbCk6
CisgICAgICAgIChKU0M6Ok1hcmtTdGFjazo6YXBwZW5kKToKKyAgICAgICAgKEpTQzo6TWFya1N0
YWNrOjphcHBlbmRJbnRlcm5hbCk6CisgICAgICAgICogcnVudGltZS9KU0dsb2JhbE9iamVjdC5j
cHA6CisgICAgICAgIChKU0M6Om1hcmtJZk5lZWRlZCk6CisgICAgICAgICogcnVudGltZS9KU09O
T2JqZWN0LmNwcDoKKyAgICAgICAgKEpTQzo6U3RyaW5naWZpZXI6OkhvbGRlcjo6b2JqZWN0KToK
KyAgICAgICAgKiBydW50aW1lL0pTT2JqZWN0Lmg6CisgICAgICAgIChKU0M6OkpTT2JqZWN0Ojpw
cm90b3R5cGUpOgorICAgICAgICAqIHJ1bnRpbWUvSlNTdGF0aWNTY29wZU9iamVjdC5jcHA6Cisg
ICAgICAgIChKU0M6OkpTU3RhdGljU2NvcGVPYmplY3Q6Om1hcmtDaGlsZHJlbik6CisgICAgICAg
ICogcnVudGltZS9KU1ZhbHVlLmg6CisgICAgICAgIChKU0M6OkpTVmFsdWU6OkpTVmFsdWUpOgor
ICAgICAgICAoSlNDOjpKU1ZhbHVlOjphc0NlbGwpOgorICAgICAgICAqIHJ1bnRpbWUvTWFya1N0
YWNrLmg6CisgICAgICAgICogcnVudGltZS9OYXRpdmVFcnJvckNvbnN0cnVjdG9yLmNwcDoKKyAg
ICAgICAgKEpTQzo6TmF0aXZlRXJyb3JDb25zdHJ1Y3Rvcjo6Y3JlYXRlU3RydWN0dXJlKToKKyAg
ICAgICAgICAgIENoYW5nZWQgdGhlIHN0cnVjdHVyZSBmbGFncyB0byBpbmNsdWRlIGEgY3VzdG9t
IG1hcmtDaGlsZHJlbi4KKyAgICAgICAgKEpTQzo6TmF0aXZlRXJyb3JDb25zdHJ1Y3Rvcjo6bWFy
a0NoaWxkcmVuKToKKyAgICAgICAgICAgIFVwZGF0ZSB0aGUgcHJvdG90eXBlIG9mIHRoZSBzdG9y
ZWQgc3RydWN0dXJlLgorICAgICAgICAqIHJ1bnRpbWUvTmF0aXZlRXJyb3JDb25zdHJ1Y3Rvci5o
OgorICAgICAgICAgICAgQWRkZWQgc3RydWN0dXJlIGZsYWdzLgorICAgICAgICAqIHJ1bnRpbWUv
U3RydWN0dXJlLmg6CisgICAgICAgIChKU0M6OlN0cnVjdHVyZTo6c3RvcmVkUHJvdG90eXBlKToK
KwogMjAxMC0wNy0yOSAgTWFydGluIFJvYmluc29uICA8bXJvYmluc29uQGlnYWxpYS5jb20+CiAK
ICAgICAgICAgVW5yZXZpZXdlZCBidWlsZCBmaXguCkluZGV4OiBKYXZhU2NyaXB0Q29yZS9ieXRl
Y29kZS9Db2RlQmxvY2suY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEphdmFTY3JpcHRDb3JlL2J5dGVjb2Rl
L0NvZGVCbG9jay5jcHAJKHJldmlzaW9uIDY0MjgxKQorKysgSmF2YVNjcmlwdENvcmUvYnl0ZWNv
ZGUvQ29kZUJsb2NrLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTUxMyw3ICsxNTEzLDcgQEAgdm9p
ZCBDb2RlQmxvY2s6OnJlZlN0cnVjdHVyZXMoSW5zdHJ1Y3Rpbwogdm9pZCBDb2RlQmxvY2s6Om1h
cmtBZ2dyZWdhdGUoTWFya1N0YWNrJiBtYXJrU3RhY2spCiB7CiAgICAgZm9yIChzaXplX3QgaSA9
IDA7IGkgPCBtX2NvbnN0YW50UmVnaXN0ZXJzLnNpemUoKTsgKytpKQotICAgICAgICBtYXJrU3Rh
Y2suYXBwZW5kKG1fY29uc3RhbnRSZWdpc3RlcnNbaV0uanNWYWx1ZSgpKTsKKyAgICAgICAgbWFy
a1N0YWNrLmFwcGVuZChtX2NvbnN0YW50UmVnaXN0ZXJzW2ldKTsKICAgICBmb3IgKHNpemVfdCBp
ID0gMDsgaSA8IG1fZnVuY3Rpb25FeHBycy5zaXplKCk7ICsraSkKICAgICAgICAgbV9mdW5jdGlv
bkV4cHJzW2ldLT5tYXJrQWdncmVnYXRlKG1hcmtTdGFjayk7CiAgICAgZm9yIChzaXplX3QgaSA9
IDA7IGkgPCBtX2Z1bmN0aW9uRGVjbHMuc2l6ZSgpOyArK2kpCkluZGV4OiBKYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0NvbGxlY3Rvci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9Db2xsZWN0b3IuY3BwCShyZXZpc2lvbiA2NDI4MSkKKysrIEphdmFTY3JpcHRDb3JlL3J1
bnRpbWUvQ29sbGVjdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzU5LDcgKzc1OSwxMyBAQCB2
b2lkIEhlYXA6Om1hcmtDb25zZXJ2YXRpdmVseShNYXJrU3RhY2smCiAgICAgICAgICAgICBmb3Ig
KHNpemVfdCBibG9jayA9IDA7IGJsb2NrIDwgdXNlZEJsb2NrczsgYmxvY2srKykgewogICAgICAg
ICAgICAgICAgIGlmIChibG9ja3NbYmxvY2tdICE9IGJsb2NrQWRkcikKICAgICAgICAgICAgICAg
ICAgICAgY29udGludWU7Ci0gICAgICAgICAgICAgICAgbWFya1N0YWNrLmFwcGVuZChyZWludGVy
cHJldF9jYXN0PEpTQ2VsbCo+KHhBc0JpdHMpKTsKKyAgICAgICAgICAgICAgICAvLyBXaGlsZSBt
YXJrU3RhY2suYXBwZW5kIG5vcm1hbGx5IHRha2VzIGEgcmVmZXJlbmNlIHRvIHVwZGF0ZSwKKyAg
ICAgICAgICAgICAgICAvLyB3ZSBkb24ndCBhY3R1YWxseSB3YW50IHRoZSBoZWFwIHRvIGJlIHVw
ZGF0ZWQgc2luY2Ugd2UgZG9uJ3QKKyAgICAgICAgICAgICAgICAvLyBrbm93IGZvciBzdXJlIHRo
YXQgaXQncyBhY3R1YWxseSBhIHBvaW50ZXIuICBJbiB0aGUgZnV0dXJlCisgICAgICAgICAgICAg
ICAgLy8gdGhpcyB3aWxsIGJlIHJlcGxhY2VkIGJ5IHNvbWUgYXBwZW5kUm9vdCBmdW5jdGlvbiBm
b3IgdGhpcworICAgICAgICAgICAgICAgIC8vIHNwZWNpZmljIGNhc2UuCisgICAgICAgICAgICAg
ICAgSlNDZWxsKiBjZWxsID0gcmVpbnRlcnByZXRfY2FzdDxKU0NlbGwqPih4QXNCaXRzKTsKKyAg
ICAgICAgICAgICAgICBtYXJrU3RhY2suYXBwZW5kKGNlbGwpOwogICAgICAgICAgICAgICAgIG1h
cmtTdGFjay5kcmFpbigpOwogICAgICAgICAgICAgfQogICAgICAgICB9CkluZGV4OiBKYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0pTQ2VsbC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEphdmFTY3JpcHRDb3JlL3J1
bnRpbWUvSlNDZWxsLmgJKHJldmlzaW9uIDY0MjgxKQorKysgSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9KU0NlbGwuaAkod29ya2luZyBjb3B5KQpAQCAtMzUsNiArMzUsNyBAQAogbmFtZXNwYWNlIEpT
QyB7CiAKICAgICBjbGFzcyBKU0NlbGwgOiBwdWJsaWMgTm9uY29weWFibGVDdXN0b21BbGxvY2F0
ZWQgeworICAgICAgICBmcmllbmQgY2xhc3MgQ29sbGVjdG9ySGVhcDsKICAgICAgICAgZnJpZW5k
IGNsYXNzIEdldHRlclNldHRlcjsKICAgICAgICAgZnJpZW5kIGNsYXNzIEhlYXA7CiAgICAgICAg
IGZyaWVuZCBjbGFzcyBKSVQ7CkBAIC0yMzcsNyArMjM4LDEzIEBAIG5hbWVzcGFjZSBKU0Mgewog
ICAgIH0KIAogI2lmICFVU0UoSlNWQUxVRTMyXzY0KQotICAgIEFMV0FZU19JTkxJTkUgSlNDZWxs
KiBKU1ZhbHVlOjphc0NlbGwoKSBjb25zdAorICAgIEFMV0FZU19JTkxJTkUgSlNDZWxsKiYgSlNW
YWx1ZTo6YXNDZWxsKCkKKyAgICB7CisgICAgICAgIEFTU0VSVChpc0NlbGwoKSk7CisgICAgICAg
IHJldHVybiBtX3B0cjsKKyAgICB9CisKKyAgICBBTFdBWVNfSU5MSU5FIEpTQ2VsbCogY29uc3Qm
IEpTVmFsdWU6OmFzQ2VsbCgpIGNvbnN0CiAgICAgewogICAgICAgICBBU1NFUlQoaXNDZWxsKCkp
OwogICAgICAgICByZXR1cm4gbV9wdHI7CkBAIC0zMjksNyArMzM2LDM2IEBAIG5hbWVzcGFjZSBK
U0MgewogICAgICAgICByZXR1cm4gaXNDZWxsKCkgPyBhc0NlbGwoKS0+dG9UaGlzT2JqZWN0KGV4
ZWMpIDogdG9UaGlzT2JqZWN0U2xvd0Nhc2UoZXhlYyk7CiAgICAgfQogCi0gICAgQUxXQVlTX0lO
TElORSB2b2lkIE1hcmtTdGFjazo6YXBwZW5kKEpTQ2VsbCogY2VsbCkKKyAgICB0ZW1wbGF0ZTx0
eXBlbmFtZSBUPgorICAgIEFMV0FZU19JTkxJTkUgdm9pZCBNYXJrU3RhY2s6OmFwcGVuZChUKiYg
Y2VsbCkKKyAgICB7CisgICAgICAgIC8vIFJlZmVyZW5jZXMgaW4gQysrIGFyZSBub3QgY292YXJp
YW50LiAgSlNPYmplY3QqIGJlaW5nIGEgc3VidHlwZSBvZiBKU0NlbGwqCisgICAgICAgIC8vIGRv
ZXMgbm90IG1lYW4gdGhhdCBKU09iamVjdComIGNhbiBiZSB1c2VkIGFzIGEgc3VidHlwZSBvZiBK
U0NlbGwqJiBiZWNhdXNlCisgICAgICAgIC8vIHRyZWF0aW5nIGEgSlNPYmplY3QqJiBhcyBhIEpT
Q2VsbComIHdvdWxkIGFsbG93IHVzIHRvIGNoYW5nZSB0aGUgcG9pbnRlciB0bworICAgICAgICAv
LyBwb2ludCB0byBzb21ldGhpbmcgdGhhdCBpcyBhIEpTQ2VsbCBidXQgbm90IGEgSlNPYmplY3Qu
CisgICAgICAgIC8vCisgICAgICAgIC8vIEluIHRoaXMgY2FzZSwgd2UgbmVlZCB0byBiZSBhYmxl
IHRvIGNoYW5nZSB0aGUgcG9pbnRlciwgYW5kIGFsdGhvdWdoIHdlIGtub3cKKyAgICAgICAgLy8g
aXQgdG8gYmUgc2FmZSwgQysrIGRvZXNuJ3QsIHJlcXVpcmluZyB1cyB0byB1c2UgdGVtcGxhdGVk
IGZ1bmN0aW9ucyB0aGF0CisgICAgICAgIC8vIHBhc3MgYSBjYXN0ZWQgdmVyc2lvbiB0byBhbiBp
bnRlcm5hbCBmdW5jdGlvbi4KKyAgICAgICAgSlNDZWxsKiYgcHRyID0gKnJlaW50ZXJwcmV0X2Nh
c3Q8SlNDZWxsKio+KCZjZWxsKTsKKyAgICAgICAgYXBwZW5kSW50ZXJuYWwocHRyKTsKKyAgICB9
CisKKyAgICBBTFdBWVNfSU5MSU5FIHZvaWQgTWFya1N0YWNrOjphcHBlbmQoSlNWYWx1ZSYgdmFs
dWUpCisgICAgeworICAgICAgICBBU1NFUlQodmFsdWUpOworICAgICAgICBpZiAodmFsdWUuaXND
ZWxsKCkpCisgICAgICAgICAgICBhcHBlbmRJbnRlcm5hbCh2YWx1ZS5hc0NlbGwoKSk7CisgICAg
fQorCisgICAgQUxXQVlTX0lOTElORSB2b2lkIE1hcmtTdGFjazo6YXBwZW5kKFJlZ2lzdGVyJiBy
ZWcpCisgICAgeworICAgICAgICBKU1ZhbHVlIHZhbHVlID0gcmVnLmpzVmFsdWUoKTsKKyAgICAg
ICAgYXBwZW5kKHZhbHVlKTsKKyAgICAgICAgcmVnID0gdmFsdWU7CisgICAgfQorCisgICAgaW5s
aW5lIHZvaWQgTWFya1N0YWNrOjphcHBlbmRJbnRlcm5hbChKU0NlbGwqJiBjZWxsKQogICAgIHsK
ICAgICAgICAgQVNTRVJUKCFtX2lzQ2hlY2tpbmdGb3JEZWZhdWx0TWFya1Zpb2xhdGlvbik7CiAg
ICAgICAgIEFTU0VSVChjZWxsKTsKQEAgLTM0MCwxMyArMzc2LDYgQEAgbmFtZXNwYWNlIEpTQyB7
CiAgICAgICAgICAgICBtX3ZhbHVlcy5hcHBlbmQoY2VsbCk7CiAgICAgfQogCi0gICAgQUxXQVlT
X0lOTElORSB2b2lkIE1hcmtTdGFjazo6YXBwZW5kKEpTVmFsdWUgdmFsdWUpCi0gICAgewotICAg
ICAgICBBU1NFUlQodmFsdWUpOwotICAgICAgICBpZiAodmFsdWUuaXNDZWxsKCkpCi0gICAgICAg
ICAgICBhcHBlbmQodmFsdWUuYXNDZWxsKCkpOwotICAgIH0KLQogICAgIGlubGluZSBIZWFwKiBI
ZWFwOjpoZWFwKEpTVmFsdWUgdikKICAgICB7CiAgICAgICAgIGlmICghdi5pc0NlbGwoKSkKSW5k
ZXg6IEphdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxPYmplY3QuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIEphdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxPYmplY3QuY3BwCShyZXZpc2lvbiA2
NDI4MSkKKysrIEphdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxPYmplY3QuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC04MCwxNiArODAsMTYgQEAgc3RhdGljIGNvbnN0IGludCBpbml0aWFsVGlj
a0NvdW50VGhyZXNobwogLy8gUHJlZmVycmVkIG51bWJlciBvZiBtaWxsaXNlY29uZHMgYmV0d2Vl
biBlYWNoIHRpbWVvdXQgY2hlY2sKIHN0YXRpYyBjb25zdCBpbnQgcHJlZmVycmVkU2NyaXB0Q2hl
Y2tUaW1lSW50ZXJ2YWwgPSAxMDAwOwogCi1zdGF0aWMgaW5saW5lIHZvaWQgbWFya0lmTmVlZGVk
KE1hcmtTdGFjayYgbWFya1N0YWNrLCBKU1ZhbHVlIHYpCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBz
dGF0aWMgaW5saW5lIHZvaWQgbWFya0lmTmVlZGVkKE1hcmtTdGFjayYgbWFya1N0YWNrLCBUKiYg
dikKIHsKICAgICBpZiAodikKICAgICAgICAgbWFya1N0YWNrLmFwcGVuZCh2KTsKIH0KIAotc3Rh
dGljIGlubGluZSB2b2lkIG1hcmtJZk5lZWRlZChNYXJrU3RhY2smIG1hcmtTdGFjaywgY29uc3Qg
UmVmUHRyPFN0cnVjdHVyZT4mIHMpCitzdGF0aWMgaW5saW5lIHZvaWQgbWFya0lmTmVlZGVkKE1h
cmtTdGFjayYgbWFya1N0YWNrLCBSZWZQdHI8U3RydWN0dXJlPiYgcykKIHsKICAgICBpZiAocykK
LSAgICAgICAgbWFya0lmTmVlZGVkKG1hcmtTdGFjaywgcy0+c3RvcmVkUHJvdG90eXBlKCkpOwor
ICAgICAgICBtYXJrU3RhY2suYXBwZW5kKHMtPnN0b3JlZFByb3RvdHlwZSgpKTsKIH0KIAogSlNH
bG9iYWxPYmplY3Q6On5KU0dsb2JhbE9iamVjdCgpCkluZGV4OiBKYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0pTT05PYmplY3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEphdmFTY3JpcHRDb3JlL3J1bnRpbWUv
SlNPTk9iamVjdC5jcHAJKHJldmlzaW9uIDY0MjgxKQorKysgSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9KU09OT2JqZWN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtODIsMTIgKzgyLDEzIEBAIHByaXZh
dGU6CiAgICAgcHVibGljOgogICAgICAgICBIb2xkZXIoSlNPYmplY3QqKTsKIAotICAgICAgICBK
U09iamVjdCogb2JqZWN0KCkgY29uc3QgeyByZXR1cm4gbV9vYmplY3Q7IH0KKyAgICAgICAgSlNP
YmplY3QqJiBvYmplY3QoKSB7IHJldHVybiBtX29iamVjdDsgfQorICAgICAgICBKU09iamVjdCog
Y29uc3QmIG9iamVjdCgpIGNvbnN0IHsgcmV0dXJuIG1fb2JqZWN0OyB9CiAKICAgICAgICAgYm9v
bCBhcHBlbmROZXh0UHJvcGVydHkoU3RyaW5naWZpZXImLCBTdHJpbmdCdWlsZGVyJik7CiAKICAg
ICBwcml2YXRlOgotICAgICAgICBKU09iamVjdCogY29uc3QgbV9vYmplY3Q7CisgICAgICAgIEpT
T2JqZWN0KiBtX29iamVjdDsKICAgICAgICAgY29uc3QgYm9vbCBtX2lzQXJyYXk7CiAgICAgICAg
IGJvb2wgbV9pc0pTQXJyYXk7CiAgICAgICAgIHVuc2lnbmVkIG1faW5kZXg7CkluZGV4OiBKYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0pTT2JqZWN0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gSmF2YVNjcmlwdENv
cmUvcnVudGltZS9KU09iamVjdC5oCShyZXZpc2lvbiA2NDI4MSkKKysrIEphdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvSlNPYmplY3QuaAkod29ya2luZyBjb3B5KQpAQCAtODYsNyArODYsOCBAQCBuYW1l
c3BhY2UgSlNDIHsKICAgICAgICAgLy8gaW4gdGhlIGNsYXNzIGFzIGl0IHJlc3VsdHMgaW4gdGhl
IHZ0YWJsZSBiZWluZyBnZW5lcmF0ZWQgYXMgYSB3ZWFrIHN5bWJvbAogICAgICAgICB2aXJ0dWFs
IH5KU09iamVjdCgpOwogCi0gICAgICAgIEpTVmFsdWUgcHJvdG90eXBlKCkgY29uc3Q7CisgICAg
ICAgIEpTVmFsdWUmIHByb3RvdHlwZSgpOworICAgICAgICBjb25zdCBKU1ZhbHVlJiBwcm90b3R5
cGUoKSBjb25zdDsKICAgICAgICAgdm9pZCBzZXRQcm90b3R5cGUoSlNWYWx1ZSBwcm90b3R5cGUp
OwogICAgICAgICBib29sIHNldFByb3RvdHlwZVdpdGhDeWNsZUNoZWNrKEpTVmFsdWUgcHJvdG90
eXBlKTsKICAgICAgICAgCkBAIC0zMTIsNyArMzEzLDEyIEBAIGlubGluZSBKU09iamVjdDo6fkpT
T2JqZWN0KCkKICAgICBtX3N0cnVjdHVyZS0+ZGVyZWYoKTsKIH0KIAotaW5saW5lIEpTVmFsdWUg
SlNPYmplY3Q6OnByb3RvdHlwZSgpIGNvbnN0CitpbmxpbmUgSlNWYWx1ZSYgSlNPYmplY3Q6OnBy
b3RvdHlwZSgpCit7CisgICAgcmV0dXJuIG1fc3RydWN0dXJlLT5zdG9yZWRQcm90b3R5cGUoKTsK
K30KKworaW5saW5lIGNvbnN0IEpTVmFsdWUmIEpTT2JqZWN0Ojpwcm90b3R5cGUoKSBjb25zdAog
ewogICAgIHJldHVybiBtX3N0cnVjdHVyZS0+c3RvcmVkUHJvdG90eXBlKCk7CiB9CkluZGV4OiBK
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTU3RhdGljU2NvcGVPYmplY3QuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIEphdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNTdGF0aWNTY29wZU9iamVjdC5jcHAJKHJldmlz
aW9uIDY0MjgxKQorKysgSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1N0YXRpY1Njb3BlT2JqZWN0
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzQsNyArMzQsNyBAQCBBU1NFUlRfQ0xBU1NfRklUU19J
Tl9DRUxMKEpTU3RhdGljU2NvcGVPCiB2b2lkIEpTU3RhdGljU2NvcGVPYmplY3Q6Om1hcmtDaGls
ZHJlbihNYXJrU3RhY2smIG1hcmtTdGFjaykKIHsKICAgICBKU1ZhcmlhYmxlT2JqZWN0OjptYXJr
Q2hpbGRyZW4obWFya1N0YWNrKTsKLSAgICBtYXJrU3RhY2suYXBwZW5kKGQoKS0+cmVnaXN0ZXJT
dG9yZS5qc1ZhbHVlKCkpOworICAgIG1hcmtTdGFjay5hcHBlbmQoZCgpLT5yZWdpc3RlclN0b3Jl
KTsKIH0KIAogSlNPYmplY3QqIEpTU3RhdGljU2NvcGVPYmplY3Q6OnRvVGhpc09iamVjdChFeGVj
U3RhdGUqIGV4ZWMpIGNvbnN0CkluZGV4OiBKYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTVmFsdWUu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTVmFsdWUuaAkocmV2aXNp
b24gNjQyODEpCisrKyBKYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTVmFsdWUuaAkod29ya2luZyBj
b3B5KQpAQCAtMTk5LDcgKzE5OSw4IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICBKU1ZhbHVl
IGdldEpTTnVtYmVyKCk7IC8vIEpTVmFsdWUoKSBpZiB0aGlzIGlzIG5vdCBhIEpTTnVtYmVyIG9y
IG51bWJlciBvYmplY3QKIAogICAgICAgICBib29sIGlzQ2VsbCgpIGNvbnN0OwotICAgICAgICBK
U0NlbGwqIGFzQ2VsbCgpIGNvbnN0OworICAgICAgICBKU0NlbGwqJiBhc0NlbGwoKTsKKyAgICAg
ICAgSlNDZWxsKiBjb25zdCYgYXNDZWxsKCkgY29uc3Q7CiAgICAgICAgIGJvb2wgaXNWYWxpZENh
bGxlZSgpOwogCiAjaWZuZGVmIE5ERUJVRwpAQCAtMjQwLDExICsyNDEsMTkgQEAgbmFtZXNwYWNl
IEpTQyB7CiAgICAgICAgICAgICAgICAgaW50MzJfdCB0YWc7CiAgICAgICAgICAgICAgICAgaW50
MzJfdCBwYXlsb2FkOwogICAgICAgICAgICAgfSBhc0JpdHM7CisgICAgICAgICAgICBzdHJ1Y3Qg
eworICAgICAgICAgICAgICAgIGludDMyX3QgdGFnOworICAgICAgICAgICAgICAgIEpTQ2VsbCog
bV9wdHI7CisgICAgICAgICAgICB9IGFzUHRyOwogI2Vsc2UKICAgICAgICAgICAgIHN0cnVjdCB7
CiAgICAgICAgICAgICAgICAgaW50MzJfdCBwYXlsb2FkOwogICAgICAgICAgICAgICAgIGludDMy
X3QgdGFnOwogICAgICAgICAgICAgfSBhc0JpdHM7CisgICAgICAgICAgICBzdHJ1Y3QgeworICAg
ICAgICAgICAgICAgIEpTQ2VsbCogbV9wdHI7CisgICAgICAgICAgICAgICAgaW50MzJfdCB0YWc7
CisgICAgICAgICAgICB9IGFzUHRyOwogI2VuZGlmCiAgICAgICAgIH0gdTsKICNlbHNlIC8vIFVT
RShKU1ZBTFVFMzJfNjQpCkBAIC00OTEsNyArNTAwLDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAg
ICAgICAgICB1LmFzQml0cy50YWcgPSBDZWxsVGFnOwogICAgICAgICBlbHNlCiAgICAgICAgICAg
ICB1LmFzQml0cy50YWcgPSBFbXB0eVZhbHVlVGFnOwotICAgICAgICB1LmFzQml0cy5wYXlsb2Fk
ID0gcmVpbnRlcnByZXRfY2FzdDxpbnQzMl90PihwdHIpOworICAgICAgICB1LmFzUHRyLm1fcHRy
ID0gcHRyOwogI2lmIEVOQUJMRShKU0NfWk9NQklFUykKICAgICAgICAgQVNTRVJUKCFpc1pvbWJp
ZSgpKTsKICNlbmRpZgpAQCAtNTAzLDcgKzUxMiw3IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAg
ICAgICAgdS5hc0JpdHMudGFnID0gQ2VsbFRhZzsKICAgICAgICAgZWxzZQogICAgICAgICAgICAg
dS5hc0JpdHMudGFnID0gRW1wdHlWYWx1ZVRhZzsKLSAgICAgICAgdS5hc0JpdHMucGF5bG9hZCA9
IHJlaW50ZXJwcmV0X2Nhc3Q8aW50MzJfdD4oY29uc3RfY2FzdDxKU0NlbGwqPihwdHIpKTsKKyAg
ICAgICAgdS5hc1B0ci5tX3B0ciA9IGNvbnN0X2Nhc3Q8SlNDZWxsKj4ocHRyKTsKICNpZiBFTkFC
TEUoSlNDX1pPTUJJRVMpCiAgICAgICAgIEFTU0VSVCghaXNab21iaWUoKSk7CiAjZW5kaWYKQEAg
LTU5OCwxMCArNjA3LDE2IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICByZXR1cm4gdS5hc0Rv
dWJsZTsKICAgICB9CiAgICAgCi0gICAgQUxXQVlTX0lOTElORSBKU0NlbGwqIEpTVmFsdWU6OmFz
Q2VsbCgpIGNvbnN0CisgICAgQUxXQVlTX0lOTElORSBKU0NlbGwqIGNvbnN0JiBKU1ZhbHVlOjph
c0NlbGwoKSBjb25zdAorICAgIHsKKyAgICAgICAgQVNTRVJUKGlzQ2VsbCgpKTsKKyAgICAgICAg
cmV0dXJuIHUuYXNQdHIubV9wdHI7CisgICAgfQorCisgICAgQUxXQVlTX0lOTElORSBKU0NlbGwq
JiBKU1ZhbHVlOjphc0NlbGwoKQogICAgIHsKICAgICAgICAgQVNTRVJUKGlzQ2VsbCgpKTsKLSAg
ICAgICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8SlNDZWxsKj4odS5hc0JpdHMucGF5bG9hZCk7
CisgICAgICAgIHJldHVybiB1LmFzUHRyLm1fcHRyOwogICAgIH0KIAogICAgIEFMV0FZU19JTkxJ
TkUgSlNWYWx1ZTo6SlNWYWx1ZShFbmNvZGVBc0RvdWJsZVRhZywgRXhlY1N0YXRlKiwgZG91Ymxl
IGQpCkluZGV4OiBKYXZhU2NyaXB0Q29yZS9ydW50aW1lL01hcmtTdGFjay5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIEphdmFTY3JpcHRDb3JlL3J1bnRpbWUvTWFya1N0YWNrLmgJKHJldmlzaW9uIDY0MjgxKQor
KysgSmF2YVNjcmlwdENvcmUvcnVudGltZS9NYXJrU3RhY2suaAkod29ya2luZyBjb3B5KQpAQCAt
MjcsNiArMjcsNyBAQAogI2RlZmluZSBNYXJrU3RhY2tfaAogCiAjaW5jbHVkZSAiSlNWYWx1ZS5o
IgorI2luY2x1ZGUgIlJlZ2lzdGVyLmgiCiAjaW5jbHVkZSA8d3RmL05vbmNvcHlhYmxlLmg+CiAK
IG5hbWVzcGFjZSBKU0MgewpAQCAtNDYsOCArNDcsOSBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAg
ICAgewogICAgICAgICB9CiAKLSAgICAgICAgQUxXQVlTX0lOTElORSB2b2lkIGFwcGVuZChKU1Zh
bHVlKTsKLSAgICAgICAgdm9pZCBhcHBlbmQoSlNDZWxsKik7CisgICAgICAgIHRlbXBsYXRlPHR5
cGVuYW1lIFQ+IEFMV0FZU19JTkxJTkUgdm9pZCBhcHBlbmQoVComIGNlbGwpOworICAgICAgICBB
TFdBWVNfSU5MSU5FIHZvaWQgYXBwZW5kKEpTVmFsdWUmKTsKKyAgICAgICAgQUxXQVlTX0lOTElO
RSB2b2lkIGFwcGVuZChSZWdpc3RlciYpOwogICAgICAgICAKICAgICAgICAgQUxXQVlTX0lOTElO
RSB2b2lkIGFwcGVuZFZhbHVlcyhSZWdpc3RlciogdmFsdWVzLCBzaXplX3QgY291bnQsIE1hcmtT
ZXRQcm9wZXJ0aWVzIHByb3BlcnRpZXMgPSBOb051bGxWYWx1ZXMpCiAgICAgICAgIHsKQEAgLTcw
LDYgKzcyLDggQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIH0KIAogICAgIHByaXZhdGU6Cisg
ICAgICAgIHZvaWQgYXBwZW5kSW50ZXJuYWwoSlNDZWxsKiYpOworCiAgICAgICAgIHZvaWQgbWFy
a0NoaWxkcmVuKEpTQ2VsbCopOwogCiAgICAgICAgIHN0cnVjdCBNYXJrU2V0IHsKSW5kZXg6IEph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvTmF0aXZlRXJyb3JDb25zdHJ1Y3Rvci5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gSmF2YVNjcmlwdENvcmUvcnVudGltZS9OYXRpdmVFcnJvckNvbnN0cnVjdG9yLmNwcAko
cmV2aXNpb24gNjQyODEpCisrKyBKYXZhU2NyaXB0Q29yZS9ydW50aW1lL05hdGl2ZUVycm9yQ29u
c3RydWN0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02OCw0ICs2OCwxNiBAQCBDYWxsVHlwZSBO
YXRpdmVFcnJvckNvbnN0cnVjdG9yOjpnZXRDYWxsCiAgICAgcmV0dXJuIENhbGxUeXBlSG9zdDsK
IH0KIAorUGFzc1JlZlB0cjxTdHJ1Y3R1cmU+IE5hdGl2ZUVycm9yQ29uc3RydWN0b3I6OmNyZWF0
ZVN0cnVjdHVyZShKU09iamVjdCogcHJvdG90eXBlKQoreworICAgIHJldHVybiBTdHJ1Y3R1cmU6
OmNyZWF0ZShwcm90b3R5cGUsIFR5cGVJbmZvKE9iamVjdFR5cGUsIFN0cnVjdHVyZUZsYWdzKSwg
QW5vbnltb3VzU2xvdENvdW50KTsKK30KKwordm9pZCBOYXRpdmVFcnJvckNvbnN0cnVjdG9yOjpt
YXJrQ2hpbGRyZW4oTWFya1N0YWNrJiBtYXJrU3RhY2spCit7CisgICAgSW50ZXJuYWxGdW5jdGlv
bjo6bWFya0NoaWxkcmVuKG1hcmtTdGFjayk7CisKKyAgICBtYXJrU3RhY2suYXBwZW5kKG1fZXJy
b3JTdHJ1Y3R1cmUtPnN0b3JlZFByb3RvdHlwZSgpKTsKK30KKwogfSAvLyBuYW1lc3BhY2UgSlND
CkluZGV4OiBKYXZhU2NyaXB0Q29yZS9ydW50aW1lL05hdGl2ZUVycm9yQ29uc3RydWN0b3IuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0Q29yZS9ydW50aW1lL05hdGl2ZUVycm9yQ29uc3RydWN0
b3IuaAkocmV2aXNpb24gNjQyODEpCisrKyBKYXZhU2NyaXB0Q29yZS9ydW50aW1lL05hdGl2ZUVy
cm9yQ29uc3RydWN0b3IuaAkod29ya2luZyBjb3B5KQpAQCAtMzYsMTEgKzM2LDE3IEBAIG5hbWVz
cGFjZSBKU0MgewogICAgICAgICBzdGF0aWMgY29uc3QgQ2xhc3NJbmZvIGluZm87CiAKICAgICAg
ICAgU3RydWN0dXJlKiBlcnJvclN0cnVjdHVyZSgpIHsgcmV0dXJuIG1fZXJyb3JTdHJ1Y3R1cmUu
Z2V0KCk7IH0KKyAgICAgICAgc3RhdGljIFBhc3NSZWZQdHI8U3RydWN0dXJlPiBjcmVhdGVTdHJ1
Y3R1cmUoSlNPYmplY3QqIHByb3RvdHlwZSk7CisKKyAgICBwcm90ZWN0ZWQ6CisgICAgICAgIHN0
YXRpYyBjb25zdCB1bnNpZ25lZCBTdHJ1Y3R1cmVGbGFncyA9IEludGVybmFsRnVuY3Rpb246OlN0
cnVjdHVyZUZsYWdzIHwgT3ZlcnJpZGVzTWFya0NoaWxkcmVuOwogCiAgICAgcHJpdmF0ZToKICAg
ICAgICAgdmlydHVhbCBDb25zdHJ1Y3RUeXBlIGdldENvbnN0cnVjdERhdGEoQ29uc3RydWN0RGF0
YSYpOwogICAgICAgICB2aXJ0dWFsIENhbGxUeXBlIGdldENhbGxEYXRhKENhbGxEYXRhJik7CiAK
KyAgICAgICAgdmlydHVhbCB2b2lkIG1hcmtDaGlsZHJlbihNYXJrU3RhY2smKTsKKwogICAgICAg
ICB2aXJ0dWFsIGNvbnN0IENsYXNzSW5mbyogY2xhc3NJbmZvKCkgY29uc3QgeyByZXR1cm4gJmlu
Zm87IH0KIAogICAgICAgICBSZWZQdHI8U3RydWN0dXJlPiBtX2Vycm9yU3RydWN0dXJlOwpJbmRl
eDogSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJ1Y3R1cmUuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZh
U2NyaXB0Q29yZS9ydW50aW1lL1N0cnVjdHVyZS5oCShyZXZpc2lvbiA2NDI4MSkKKysrIEphdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvU3RydWN0dXJlLmgJKHdvcmtpbmcgY29weSkKQEAgLTk0LDcgKzk0
LDggQEAgbmFtZXNwYWNlIEpTQyB7CiAKICAgICAgICAgY29uc3QgVHlwZUluZm8mIHR5cGVJbmZv
KCkgY29uc3QgeyByZXR1cm4gbV90eXBlSW5mbzsgfQogCi0gICAgICAgIEpTVmFsdWUgc3RvcmVk
UHJvdG90eXBlKCkgY29uc3QgeyByZXR1cm4gbV9wcm90b3R5cGU7IH0KKyAgICAgICAgY29uc3Qg
SlNWYWx1ZSYgc3RvcmVkUHJvdG90eXBlKCkgY29uc3QgeyByZXR1cm4gbV9wcm90b3R5cGU7IH0K
KyAgICAgICAgSlNWYWx1ZSYgc3RvcmVkUHJvdG90eXBlKCkgeyByZXR1cm4gbV9wcm90b3R5cGU7
IH0KICAgICAgICAgSlNWYWx1ZSBwcm90b3R5cGVGb3JMb29rdXAoRXhlY1N0YXRlKikgY29uc3Q7
CiAgICAgICAgIFN0cnVjdHVyZUNoYWluKiBwcm90b3R5cGVDaGFpbihFeGVjU3RhdGUqKSBjb25z
dDsKIAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>63240</attachid>
            <date>2010-08-02 11:18:17 -0700</date>
            <delta_ts>2010-08-02 12:14:16 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>references.patch</filename>
            <type>text/plain</type>
            <size>16541</size>
            <attacher name="Nathan Lawrence">nlawrence</attacher>
            
              <data encoding="base64">SW5kZXg6IEphdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDY0NDY0KQorKysgSmF2YVNjcmlwdENvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsNDYgQEAKKzIwMTAtMDgtMDIgIE5hdGhhbiBM
YXdyZW5jZSAgPG5sYXdyZW5jZUBhcHBsZS5jb20+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9C
T0RZIChPT1BTISkuCisKKyAgICAgICAgUmVmYWN0b3JpbmcgTWFya1N0YWNrOjphcHBlbmQgdG8g
dGFrZSBhIHJlZmVyZW5jZS4gIFRoaXMgaXMgaW4KKyAgICAgICAgcHJlcGFyYXRpb24gZm9yIG1v
dmFibGUgb2JqZWN0cyB3aGVuIHdlIHdpbGwgbmVlZCB0byB1cGRhdGUgcG9pbnRlcnMuCisgICAg
ICAgIGh0dHA6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTQxMTc3CisKKyAgICAg
ICAgVW5sZXNzIG90aGVyd2lzZSBub3RlZCwgYWxsIGNoYW5nZXMgYXJlIHRvIGVpdGhlciByZXR1
cm4gYnkgcmVmZXJlbmNlCisgICAgICAgIG9yIHBhc3MgYSByZWZlcmVuY2UgdG8gTWFya1N0YWNr
OjphcHBlbmQuCisKKyAgICAgICAgKiBieXRlY29kZS9Db2RlQmxvY2suY3BwOgorICAgICAgICAo
SlNDOjpDb2RlQmxvY2s6Om1hcmtBZ2dyZWdhdGUpOgorICAgICAgICAqIHJ1bnRpbWUvQ29sbGVj
dG9yLmNwcDoKKyAgICAgICAgKEpTQzo6SGVhcDo6bWFya0NvbnNlcnZhdGl2ZWx5KToKKyAgICAg
ICAgICAgIEFkZGVkIGEgdGVtcG9yYXJ5IHZhcmlhYmxlIHRvIHByZXZlbnQgbWFya2luZyBmcm9t
IGNoYW5naW5nIGFuCisgICAgICAgICAgICB1bmtub3duIHZhbHVlIG9uIHRoZSBzdGFjaworICAg
ICAgICAqIHJ1bnRpbWUvSlNDZWxsLmg6CisgICAgICAgIChKU0M6OkpTVmFsdWU6OmFzQ2VsbCk6
CisgICAgICAgIChKU0M6Ok1hcmtTdGFjazo6YXBwZW5kKToKKyAgICAgICAgKEpTQzo6TWFya1N0
YWNrOjphcHBlbmRJbnRlcm5hbCk6CisgICAgICAgICogcnVudGltZS9KU0dsb2JhbE9iamVjdC5j
cHA6CisgICAgICAgIChKU0M6Om1hcmtJZk5lZWRlZCk6CisgICAgICAgICogcnVudGltZS9KU09O
T2JqZWN0LmNwcDoKKyAgICAgICAgKEpTQzo6U3RyaW5naWZpZXI6OkhvbGRlcjo6b2JqZWN0KToK
KyAgICAgICAgKiBydW50aW1lL0pTT2JqZWN0Lmg6CisgICAgICAgIChKU0M6OkpTT2JqZWN0Ojpw
cm90b3R5cGUpOgorICAgICAgICAqIHJ1bnRpbWUvSlNTdGF0aWNTY29wZU9iamVjdC5jcHA6Cisg
ICAgICAgIChKU0M6OkpTU3RhdGljU2NvcGVPYmplY3Q6Om1hcmtDaGlsZHJlbik6CisgICAgICAg
ICogcnVudGltZS9KU1ZhbHVlLmg6CisgICAgICAgIChKU0M6OkpTVmFsdWU6OkpTVmFsdWUpOgor
ICAgICAgICAoSlNDOjpKU1ZhbHVlOjphc0NlbGwpOgorICAgICAgICAqIHJ1bnRpbWUvTWFya1N0
YWNrLmg6CisgICAgICAgICogcnVudGltZS9OYXRpdmVFcnJvckNvbnN0cnVjdG9yLmNwcDoKKyAg
ICAgICAgKEpTQzo6TmF0aXZlRXJyb3JDb25zdHJ1Y3Rvcjo6Y3JlYXRlU3RydWN0dXJlKToKKyAg
ICAgICAgICAgIENoYW5nZWQgdGhlIHN0cnVjdHVyZSBmbGFncyB0byBpbmNsdWRlIGEgY3VzdG9t
IG1hcmtDaGlsZHJlbi4KKyAgICAgICAgKEpTQzo6TmF0aXZlRXJyb3JDb25zdHJ1Y3Rvcjo6bWFy
a0NoaWxkcmVuKToKKyAgICAgICAgICAgIFVwZGF0ZSB0aGUgcHJvdG90eXBlIG9mIHRoZSBzdG9y
ZWQgc3RydWN0dXJlLgorICAgICAgICAqIHJ1bnRpbWUvTmF0aXZlRXJyb3JDb25zdHJ1Y3Rvci5o
OgorICAgICAgICAgICAgQWRkZWQgc3RydWN0dXJlIGZsYWdzLgorICAgICAgICAqIHJ1bnRpbWUv
U3RydWN0dXJlLmg6CisgICAgICAgIChKU0M6OlN0cnVjdHVyZTo6c3RvcmVkUHJvdG90eXBlKToK
KwogMjAxMC0wOC0wMiAgTWFoZXNoIEt1bGthcm5pICA8bWFoZXNoLmt1bGthcm5pQG5va2lhLmNv
bT4KIAogICAgICAgICBSZXZpZXdlZCBieSBTaW1vbiBIYXVzbWFubi4KSW5kZXg6IEphdmFTY3Jp
cHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gSmF2YVNjcmlwdENv
cmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmNwcAkocmV2aXNpb24gNjQ0NjQpCisrKyBKYXZhU2NyaXB0
Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNTEzLDcgKzE1
MTMsNyBAQCB2b2lkIENvZGVCbG9jazo6cmVmU3RydWN0dXJlcyhJbnN0cnVjdGlvCiB2b2lkIENv
ZGVCbG9jazo6bWFya0FnZ3JlZ2F0ZShNYXJrU3RhY2smIG1hcmtTdGFjaykKIHsKICAgICBmb3Ig
KHNpemVfdCBpID0gMDsgaSA8IG1fY29uc3RhbnRSZWdpc3RlcnMuc2l6ZSgpOyArK2kpCi0gICAg
ICAgIG1hcmtTdGFjay5hcHBlbmQobV9jb25zdGFudFJlZ2lzdGVyc1tpXS5qc1ZhbHVlKCkpOwor
ICAgICAgICBtYXJrU3RhY2suYXBwZW5kKG1fY29uc3RhbnRSZWdpc3RlcnNbaV0pOwogICAgIGZv
ciAoc2l6ZV90IGkgPSAwOyBpIDwgbV9mdW5jdGlvbkV4cHJzLnNpemUoKTsgKytpKQogICAgICAg
ICBtX2Z1bmN0aW9uRXhwcnNbaV0tPm1hcmtBZ2dyZWdhdGUobWFya1N0YWNrKTsKICAgICBmb3Ig
KHNpemVfdCBpID0gMDsgaSA8IG1fZnVuY3Rpb25EZWNscy5zaXplKCk7ICsraSkKSW5kZXg6IEph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvQ29sbGVjdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0NvbGxlY3Rvci5jcHAJKHJldmlzaW9uIDY0NDY0KQorKysgSmF2YVNj
cmlwdENvcmUvcnVudGltZS9Db2xsZWN0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03NTksNyAr
NzU5LDEzIEBAIHZvaWQgSGVhcDo6bWFya0NvbnNlcnZhdGl2ZWx5KE1hcmtTdGFjayYKICAgICAg
ICAgICAgIGZvciAoc2l6ZV90IGJsb2NrID0gMDsgYmxvY2sgPCB1c2VkQmxvY2tzOyBibG9jaysr
KSB7CiAgICAgICAgICAgICAgICAgaWYgKGJsb2Nrc1tibG9ja10gIT0gYmxvY2tBZGRyKQogICAg
ICAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgICAgICBtYXJrU3RhY2suYXBw
ZW5kKHJlaW50ZXJwcmV0X2Nhc3Q8SlNDZWxsKj4oeEFzQml0cykpOworICAgICAgICAgICAgICAg
IC8vIFdoaWxlIG1hcmtTdGFjay5hcHBlbmQgbm9ybWFsbHkgdGFrZXMgYSByZWZlcmVuY2UgdG8g
dXBkYXRlLAorICAgICAgICAgICAgICAgIC8vIHdlIGRvbid0IGFjdHVhbGx5IHdhbnQgdGhlIGhl
YXAgdG8gYmUgdXBkYXRlZCBzaW5jZSB3ZSBkb24ndAorICAgICAgICAgICAgICAgIC8vIGtub3cg
Zm9yIHN1cmUgdGhhdCBpdCdzIGFjdHVhbGx5IGEgcG9pbnRlci4gSW4gdGhlIGZ1dHVyZQorICAg
ICAgICAgICAgICAgIC8vIHRoaXMgd2lsbCBiZSByZXBsYWNlZCBieSBzb21lIGFwcGVuZFJvb3Qg
ZnVuY3Rpb24gZm9yIHRoaXMKKyAgICAgICAgICAgICAgICAvLyBzcGVjaWZpYyBjYXNlLgorICAg
ICAgICAgICAgICAgIEpTQ2VsbCogY2VsbCA9IHJlaW50ZXJwcmV0X2Nhc3Q8SlNDZWxsKj4oeEFz
Qml0cyk7CisgICAgICAgICAgICAgICAgbWFya1N0YWNrLmFwcGVuZChjZWxsKTsKICAgICAgICAg
ICAgICAgICBtYXJrU3RhY2suZHJhaW4oKTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQpJbmRl
eDogSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0NlbGwuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0pTQ2VsbC5oCShyZXZpc2lvbiA2NDQ2NCkKKysrIEphdmFTY3JpcHRD
b3JlL3J1bnRpbWUvSlNDZWxsLmgJKHdvcmtpbmcgY29weSkKQEAgLTM1LDYgKzM1LDcgQEAKIG5h
bWVzcGFjZSBKU0MgewogCiAgICAgY2xhc3MgSlNDZWxsIDogcHVibGljIE5vbmNvcHlhYmxlQ3Vz
dG9tQWxsb2NhdGVkIHsKKyAgICAgICAgZnJpZW5kIGNsYXNzIENvbGxlY3RvckhlYXA7CiAgICAg
ICAgIGZyaWVuZCBjbGFzcyBHZXR0ZXJTZXR0ZXI7CiAgICAgICAgIGZyaWVuZCBjbGFzcyBIZWFw
OwogICAgICAgICBmcmllbmQgY2xhc3MgSklUOwpAQCAtMjM3LDcgKzIzOCwxMyBAQCBuYW1lc3Bh
Y2UgSlNDIHsKICAgICB9CiAKICNpZiAhVVNFKEpTVkFMVUUzMl82NCkKLSAgICBBTFdBWVNfSU5M
SU5FIEpTQ2VsbCogSlNWYWx1ZTo6YXNDZWxsKCkgY29uc3QKKyAgICBBTFdBWVNfSU5MSU5FIEpT
Q2VsbComIEpTVmFsdWU6OmFzQ2VsbCgpCisgICAgeworICAgICAgICBBU1NFUlQoaXNDZWxsKCkp
OworICAgICAgICByZXR1cm4gbV9wdHI7CisgICAgfQorCisgICAgQUxXQVlTX0lOTElORSBKU0Nl
bGwqIGNvbnN0JiBKU1ZhbHVlOjphc0NlbGwoKSBjb25zdAogICAgIHsKICAgICAgICAgQVNTRVJU
KGlzQ2VsbCgpKTsKICAgICAgICAgcmV0dXJuIG1fcHRyOwpAQCAtMzI5LDcgKzMzNiw0MSBAQCBu
YW1lc3BhY2UgSlNDIHsKICAgICAgICAgcmV0dXJuIGlzQ2VsbCgpID8gYXNDZWxsKCktPnRvVGhp
c09iamVjdChleGVjKSA6IHRvVGhpc09iamVjdFNsb3dDYXNlKGV4ZWMpOwogICAgIH0KIAotICAg
IEFMV0FZU19JTkxJTkUgdm9pZCBNYXJrU3RhY2s6OmFwcGVuZChKU0NlbGwqIGNlbGwpCisgICAg
dGVtcGxhdGU8dHlwZW5hbWUgVD4KKyAgICBBTFdBWVNfSU5MSU5FIHZvaWQgTWFya1N0YWNrOjph
cHBlbmQoVComIGNlbGwpCisgICAgeworICAgICAgICAvLyBSZWZlcmVuY2VzIGluIEMrKyBhcmUg
bm90IGNvdmFyaWFudC4gIEpTT2JqZWN0KiBiZWluZyBhIHN1YnR5cGUgb2YgSlNDZWxsKgorICAg
ICAgICAvLyBkb2VzIG5vdCBtZWFuIHRoYXQgSlNPYmplY3QqJiBjYW4gYmUgdXNlZCBhcyBhIHN1
YnR5cGUgb2YgSlNDZWxsKiYgYmVjYXVzZQorICAgICAgICAvLyB0cmVhdGluZyBhIEpTT2JqZWN0
KiYgYXMgYSBKU0NlbGwqJiB3b3VsZCBhbGxvdyB1cyB0byBjaGFuZ2UgdGhlIHBvaW50ZXIgdG8K
KyAgICAgICAgLy8gcG9pbnQgdG8gc29tZXRoaW5nIHRoYXQgaXMgYSBKU0NlbGwgYnV0IG5vdCBh
IEpTT2JqZWN0LgorICAgICAgICAvLworICAgICAgICAvLyBJbiB0aGlzIGNhc2UsIHdlIG5lZWQg
dG8gYmUgYWJsZSB0byBjaGFuZ2UgdGhlIHBvaW50ZXIsIGFuZCBhbHRob3VnaCB3ZSBrbm93Cisg
ICAgICAgIC8vIGl0IHRvIGJlIHNhZmUsIEMrKyBkb2Vzbid0LCByZXF1aXJpbmcgdXMgdG8gdXNl
IHRlbXBsYXRlZCBmdW5jdGlvbnMgdGhhdAorICAgICAgICAvLyBwYXNzIGEgY2FzdGVkIHZlcnNp
b24gdG8gYW4gaW50ZXJuYWwgZnVuY3Rpb24uCisgICAgICAgIC8vCisgICAgICAgIC8vIEN1cnJl
bnRseSB3ZSdyZSBub3QgZG9pbmcgYW55dGhpbmcgd2l0aCB0aGUgdmFsdWUgb2YgdGhlIHBvaW50
ZXIsIHNvIG5vdGhpbmcKKyAgICAgICAgLy8gdW5zYWZlIHdpbGwgaGFwcGVuLiAgSW4gdGhlIGZ1
dHVyZSwgd2hlbiB3ZSBoYXZlIG1vdmFibGUgb2JqZWN0cywgd2Ugd2lsbCBiZQorICAgICAgICAv
LyBjaGFuZ2luZyB0aGUgdmFsdWUgb2YgdGhlIHBvaW50ZXIgdG8gYmUgdGhlIG5ldyBsb2NhdGlv
biwgaW4gd2hpY2ggY2FzZSB0aGUKKyAgICAgICAgLy8gdHlwZSB3aWxsIGJlIHByZXNlcnZlZC4K
KyAgICAgICAgSlNDZWxsKiYgcHRyID0gKnJlaW50ZXJwcmV0X2Nhc3Q8SlNDZWxsKio+KCZjZWxs
KTsKKyAgICAgICAgYXBwZW5kSW50ZXJuYWwocHRyKTsKKyAgICB9CisKKyAgICBBTFdBWVNfSU5M
SU5FIHZvaWQgTWFya1N0YWNrOjphcHBlbmQoSlNWYWx1ZSYgdmFsdWUpCisgICAgeworICAgICAg
ICBBU1NFUlQodmFsdWUpOworICAgICAgICBpZiAodmFsdWUuaXNDZWxsKCkpCisgICAgICAgICAg
ICBhcHBlbmRJbnRlcm5hbCh2YWx1ZS5hc0NlbGwoKSk7CisgICAgfQorCisgICAgQUxXQVlTX0lO
TElORSB2b2lkIE1hcmtTdGFjazo6YXBwZW5kKFJlZ2lzdGVyJiByZWcpCisgICAgeworICAgICAg
ICBKU1ZhbHVlIHZhbHVlID0gcmVnLmpzVmFsdWUoKTsKKyAgICAgICAgYXBwZW5kKHZhbHVlKTsK
KyAgICAgICAgcmVnID0gdmFsdWU7CisgICAgfQorCisgICAgaW5saW5lIHZvaWQgTWFya1N0YWNr
OjphcHBlbmRJbnRlcm5hbChKU0NlbGwqJiBjZWxsKQogICAgIHsKICAgICAgICAgQVNTRVJUKCFt
X2lzQ2hlY2tpbmdGb3JEZWZhdWx0TWFya1Zpb2xhdGlvbik7CiAgICAgICAgIEFTU0VSVChjZWxs
KTsKQEAgLTM0MCwxMyArMzgxLDYgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgICAgICBtX3Zh
bHVlcy5hcHBlbmQoY2VsbCk7CiAgICAgfQogCi0gICAgQUxXQVlTX0lOTElORSB2b2lkIE1hcmtT
dGFjazo6YXBwZW5kKEpTVmFsdWUgdmFsdWUpCi0gICAgewotICAgICAgICBBU1NFUlQodmFsdWUp
OwotICAgICAgICBpZiAodmFsdWUuaXNDZWxsKCkpCi0gICAgICAgICAgICBhcHBlbmQodmFsdWUu
YXNDZWxsKCkpOwotICAgIH0KLQogICAgIGlubGluZSBIZWFwKiBIZWFwOjpoZWFwKEpTVmFsdWUg
dikKICAgICB7CiAgICAgICAgIGlmICghdi5pc0NlbGwoKSkKSW5kZXg6IEphdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvSlNHbG9iYWxPYmplY3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEphdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvSlNHbG9iYWxPYmplY3QuY3BwCShyZXZpc2lvbiA2NDQ2NCkKKysrIEphdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxPYmplY3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04MCwx
NiArODAsMTYgQEAgc3RhdGljIGNvbnN0IGludCBpbml0aWFsVGlja0NvdW50VGhyZXNobwogLy8g
UHJlZmVycmVkIG51bWJlciBvZiBtaWxsaXNlY29uZHMgYmV0d2VlbiBlYWNoIHRpbWVvdXQgY2hl
Y2sKIHN0YXRpYyBjb25zdCBpbnQgcHJlZmVycmVkU2NyaXB0Q2hlY2tUaW1lSW50ZXJ2YWwgPSAx
MDAwOwogCi1zdGF0aWMgaW5saW5lIHZvaWQgbWFya0lmTmVlZGVkKE1hcmtTdGFjayYgbWFya1N0
YWNrLCBKU1ZhbHVlIHYpCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdGF0aWMgaW5saW5lIHZvaWQg
bWFya0lmTmVlZGVkKE1hcmtTdGFjayYgbWFya1N0YWNrLCBUKiYgdikKIHsKICAgICBpZiAodikK
ICAgICAgICAgbWFya1N0YWNrLmFwcGVuZCh2KTsKIH0KIAotc3RhdGljIGlubGluZSB2b2lkIG1h
cmtJZk5lZWRlZChNYXJrU3RhY2smIG1hcmtTdGFjaywgY29uc3QgUmVmUHRyPFN0cnVjdHVyZT4m
IHMpCitzdGF0aWMgaW5saW5lIHZvaWQgbWFya0lmTmVlZGVkKE1hcmtTdGFjayYgbWFya1N0YWNr
LCBSZWZQdHI8U3RydWN0dXJlPiYgcykKIHsKICAgICBpZiAocykKLSAgICAgICAgbWFya0lmTmVl
ZGVkKG1hcmtTdGFjaywgcy0+c3RvcmVkUHJvdG90eXBlKCkpOworICAgICAgICBtYXJrU3RhY2su
YXBwZW5kKHMtPnN0b3JlZFByb3RvdHlwZSgpKTsKIH0KIAogSlNHbG9iYWxPYmplY3Q6On5KU0ds
b2JhbE9iamVjdCgpCkluZGV4OiBKYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTT05PYmplY3QuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIEphdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNPTk9iamVjdC5jcHAJKHJl
dmlzaW9uIDY0NDY0KQorKysgSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU09OT2JqZWN0LmNwcAko
d29ya2luZyBjb3B5KQpAQCAtODIsMTIgKzgyLDEzIEBAIHByaXZhdGU6CiAgICAgcHVibGljOgog
ICAgICAgICBIb2xkZXIoSlNPYmplY3QqKTsKIAotICAgICAgICBKU09iamVjdCogb2JqZWN0KCkg
Y29uc3QgeyByZXR1cm4gbV9vYmplY3Q7IH0KKyAgICAgICAgSlNPYmplY3QqJiBvYmplY3QoKSB7
IHJldHVybiBtX29iamVjdDsgfQorICAgICAgICBKU09iamVjdCogY29uc3QmIG9iamVjdCgpIGNv
bnN0IHsgcmV0dXJuIG1fb2JqZWN0OyB9CiAKICAgICAgICAgYm9vbCBhcHBlbmROZXh0UHJvcGVy
dHkoU3RyaW5naWZpZXImLCBTdHJpbmdCdWlsZGVyJik7CiAKICAgICBwcml2YXRlOgotICAgICAg
ICBKU09iamVjdCogY29uc3QgbV9vYmplY3Q7CisgICAgICAgIEpTT2JqZWN0KiBtX29iamVjdDsK
ICAgICAgICAgY29uc3QgYm9vbCBtX2lzQXJyYXk7CiAgICAgICAgIGJvb2wgbV9pc0pTQXJyYXk7
CiAgICAgICAgIHVuc2lnbmVkIG1faW5kZXg7CkluZGV4OiBKYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0pTT2JqZWN0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU09iamVj
dC5oCShyZXZpc2lvbiA2NDQ2NCkKKysrIEphdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNPYmplY3Qu
aAkod29ya2luZyBjb3B5KQpAQCAtODYsNyArODYsOCBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAg
ICAgLy8gaW4gdGhlIGNsYXNzIGFzIGl0IHJlc3VsdHMgaW4gdGhlIHZ0YWJsZSBiZWluZyBnZW5l
cmF0ZWQgYXMgYSB3ZWFrIHN5bWJvbAogICAgICAgICB2aXJ0dWFsIH5KU09iamVjdCgpOwogCi0g
ICAgICAgIEpTVmFsdWUgcHJvdG90eXBlKCkgY29uc3Q7CisgICAgICAgIEpTVmFsdWUmIHByb3Rv
dHlwZSgpOworICAgICAgICBjb25zdCBKU1ZhbHVlJiBwcm90b3R5cGUoKSBjb25zdDsKICAgICAg
ICAgdm9pZCBzZXRQcm90b3R5cGUoSlNWYWx1ZSBwcm90b3R5cGUpOwogICAgICAgICBib29sIHNl
dFByb3RvdHlwZVdpdGhDeWNsZUNoZWNrKEpTVmFsdWUgcHJvdG90eXBlKTsKICAgICAgICAgCkBA
IC0zMTIsNyArMzEzLDEyIEBAIGlubGluZSBKU09iamVjdDo6fkpTT2JqZWN0KCkKICAgICBtX3N0
cnVjdHVyZS0+ZGVyZWYoKTsKIH0KIAotaW5saW5lIEpTVmFsdWUgSlNPYmplY3Q6OnByb3RvdHlw
ZSgpIGNvbnN0CitpbmxpbmUgSlNWYWx1ZSYgSlNPYmplY3Q6OnByb3RvdHlwZSgpCit7CisgICAg
cmV0dXJuIG1fc3RydWN0dXJlLT5zdG9yZWRQcm90b3R5cGUoKTsKK30KKworaW5saW5lIGNvbnN0
IEpTVmFsdWUmIEpTT2JqZWN0Ojpwcm90b3R5cGUoKSBjb25zdAogewogICAgIHJldHVybiBtX3N0
cnVjdHVyZS0+c3RvcmVkUHJvdG90eXBlKCk7CiB9CkluZGV4OiBKYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0pTU3RhdGljU2NvcGVPYmplY3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEphdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvSlNTdGF0aWNTY29wZU9iamVjdC5jcHAJKHJldmlzaW9uIDY0NDY0KQorKysgSmF2
YVNjcmlwdENvcmUvcnVudGltZS9KU1N0YXRpY1Njb3BlT2JqZWN0LmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMzQsNyArMzQsNyBAQCBBU1NFUlRfQ0xBU1NfRklUU19JTl9DRUxMKEpTU3RhdGljU2Nv
cGVPCiB2b2lkIEpTU3RhdGljU2NvcGVPYmplY3Q6Om1hcmtDaGlsZHJlbihNYXJrU3RhY2smIG1h
cmtTdGFjaykKIHsKICAgICBKU1ZhcmlhYmxlT2JqZWN0OjptYXJrQ2hpbGRyZW4obWFya1N0YWNr
KTsKLSAgICBtYXJrU3RhY2suYXBwZW5kKGQoKS0+cmVnaXN0ZXJTdG9yZS5qc1ZhbHVlKCkpOwor
ICAgIG1hcmtTdGFjay5hcHBlbmQoZCgpLT5yZWdpc3RlclN0b3JlKTsKIH0KIAogSlNPYmplY3Qq
IEpTU3RhdGljU2NvcGVPYmplY3Q6OnRvVGhpc09iamVjdChFeGVjU3RhdGUqIGV4ZWMpIGNvbnN0
CkluZGV4OiBKYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTVmFsdWUuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBK
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTVmFsdWUuaAkocmV2aXNpb24gNjQ0NjQpCisrKyBKYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0pTVmFsdWUuaAkod29ya2luZyBjb3B5KQpAQCAtMTk5LDcgKzE5
OSw4IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICBKU1ZhbHVlIGdldEpTTnVtYmVyKCk7IC8v
IEpTVmFsdWUoKSBpZiB0aGlzIGlzIG5vdCBhIEpTTnVtYmVyIG9yIG51bWJlciBvYmplY3QKIAog
ICAgICAgICBib29sIGlzQ2VsbCgpIGNvbnN0OwotICAgICAgICBKU0NlbGwqIGFzQ2VsbCgpIGNv
bnN0OworICAgICAgICBKU0NlbGwqJiBhc0NlbGwoKTsKKyAgICAgICAgSlNDZWxsKiBjb25zdCYg
YXNDZWxsKCkgY29uc3Q7CiAgICAgICAgIGJvb2wgaXNWYWxpZENhbGxlZSgpOwogCiAjaWZuZGVm
IE5ERUJVRwpAQCAtMjQwLDExICsyNDEsMTkgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgICAg
ICAgICAgaW50MzJfdCB0YWc7CiAgICAgICAgICAgICAgICAgaW50MzJfdCBwYXlsb2FkOwogICAg
ICAgICAgICAgfSBhc0JpdHM7CisgICAgICAgICAgICBzdHJ1Y3QgeworICAgICAgICAgICAgICAg
IGludDMyX3QgdGFnOworICAgICAgICAgICAgICAgIEpTQ2VsbCogbV9wdHI7CisgICAgICAgICAg
ICB9IGFzUHRyOwogI2Vsc2UKICAgICAgICAgICAgIHN0cnVjdCB7CiAgICAgICAgICAgICAgICAg
aW50MzJfdCBwYXlsb2FkOwogICAgICAgICAgICAgICAgIGludDMyX3QgdGFnOwogICAgICAgICAg
ICAgfSBhc0JpdHM7CisgICAgICAgICAgICBzdHJ1Y3QgeworICAgICAgICAgICAgICAgIEpTQ2Vs
bCogbV9wdHI7CisgICAgICAgICAgICAgICAgaW50MzJfdCB0YWc7CisgICAgICAgICAgICB9IGFz
UHRyOwogI2VuZGlmCiAgICAgICAgIH0gdTsKICNlbHNlIC8vIFVTRShKU1ZBTFVFMzJfNjQpCkBA
IC00OTEsNyArNTAwLDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgICAgICB1LmFzQml0cy50
YWcgPSBDZWxsVGFnOwogICAgICAgICBlbHNlCiAgICAgICAgICAgICB1LmFzQml0cy50YWcgPSBF
bXB0eVZhbHVlVGFnOwotICAgICAgICB1LmFzQml0cy5wYXlsb2FkID0gcmVpbnRlcnByZXRfY2Fz
dDxpbnQzMl90PihwdHIpOworICAgICAgICB1LmFzUHRyLm1fcHRyID0gcHRyOwogI2lmIEVOQUJM
RShKU0NfWk9NQklFUykKICAgICAgICAgQVNTRVJUKCFpc1pvbWJpZSgpKTsKICNlbmRpZgpAQCAt
NTAzLDcgKzUxMiw3IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICAgICAgdS5hc0JpdHMudGFn
ID0gQ2VsbFRhZzsKICAgICAgICAgZWxzZQogICAgICAgICAgICAgdS5hc0JpdHMudGFnID0gRW1w
dHlWYWx1ZVRhZzsKLSAgICAgICAgdS5hc0JpdHMucGF5bG9hZCA9IHJlaW50ZXJwcmV0X2Nhc3Q8
aW50MzJfdD4oY29uc3RfY2FzdDxKU0NlbGwqPihwdHIpKTsKKyAgICAgICAgdS5hc1B0ci5tX3B0
ciA9IGNvbnN0X2Nhc3Q8SlNDZWxsKj4ocHRyKTsKICNpZiBFTkFCTEUoSlNDX1pPTUJJRVMpCiAg
ICAgICAgIEFTU0VSVCghaXNab21iaWUoKSk7CiAjZW5kaWYKQEAgLTU5OCwxMCArNjA3LDE2IEBA
IG5hbWVzcGFjZSBKU0MgewogICAgICAgICByZXR1cm4gdS5hc0RvdWJsZTsKICAgICB9CiAgICAg
Ci0gICAgQUxXQVlTX0lOTElORSBKU0NlbGwqIEpTVmFsdWU6OmFzQ2VsbCgpIGNvbnN0CisgICAg
QUxXQVlTX0lOTElORSBKU0NlbGwqIGNvbnN0JiBKU1ZhbHVlOjphc0NlbGwoKSBjb25zdAorICAg
IHsKKyAgICAgICAgQVNTRVJUKGlzQ2VsbCgpKTsKKyAgICAgICAgcmV0dXJuIHUuYXNQdHIubV9w
dHI7CisgICAgfQorCisgICAgQUxXQVlTX0lOTElORSBKU0NlbGwqJiBKU1ZhbHVlOjphc0NlbGwo
KQogICAgIHsKICAgICAgICAgQVNTRVJUKGlzQ2VsbCgpKTsKLSAgICAgICAgcmV0dXJuIHJlaW50
ZXJwcmV0X2Nhc3Q8SlNDZWxsKj4odS5hc0JpdHMucGF5bG9hZCk7CisgICAgICAgIHJldHVybiB1
LmFzUHRyLm1fcHRyOwogICAgIH0KIAogICAgIEFMV0FZU19JTkxJTkUgSlNWYWx1ZTo6SlNWYWx1
ZShFbmNvZGVBc0RvdWJsZVRhZywgRXhlY1N0YXRlKiwgZG91YmxlIGQpCkluZGV4OiBKYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL01hcmtTdGFjay5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEphdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvTWFya1N0YWNrLmgJKHJldmlzaW9uIDY0NDY0KQorKysgSmF2YVNjcmlwdENvcmUv
cnVudGltZS9NYXJrU3RhY2suaAkod29ya2luZyBjb3B5KQpAQCAtNDYsOCArNDYsOSBAQCBuYW1l
c3BhY2UgSlNDIHsKICAgICAgICAgewogICAgICAgICB9CiAKLSAgICAgICAgQUxXQVlTX0lOTElO
RSB2b2lkIGFwcGVuZChKU1ZhbHVlKTsKLSAgICAgICAgdm9pZCBhcHBlbmQoSlNDZWxsKik7Cisg
ICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+IEFMV0FZU19JTkxJTkUgdm9pZCBhcHBlbmQoVCom
IGNlbGwpOworICAgICAgICBBTFdBWVNfSU5MSU5FIHZvaWQgYXBwZW5kKEpTVmFsdWUmKTsKKyAg
ICAgICAgQUxXQVlTX0lOTElORSB2b2lkIGFwcGVuZChSZWdpc3RlciYpOwogICAgICAgICAKICAg
ICAgICAgQUxXQVlTX0lOTElORSB2b2lkIGFwcGVuZFZhbHVlcyhSZWdpc3RlciogdmFsdWVzLCBz
aXplX3QgY291bnQsIE1hcmtTZXRQcm9wZXJ0aWVzIHByb3BlcnRpZXMgPSBOb051bGxWYWx1ZXMp
CiAgICAgICAgIHsKQEAgLTcwLDYgKzcxLDggQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIH0K
IAogICAgIHByaXZhdGU6CisgICAgICAgIHZvaWQgYXBwZW5kSW50ZXJuYWwoSlNDZWxsKiYpOwor
CiAgICAgICAgIHZvaWQgbWFya0NoaWxkcmVuKEpTQ2VsbCopOwogCiAgICAgICAgIHN0cnVjdCBN
YXJrU2V0IHsKSW5kZXg6IEphdmFTY3JpcHRDb3JlL3J1bnRpbWUvTmF0aXZlRXJyb3JDb25zdHJ1
Y3Rvci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gSmF2YVNjcmlwdENvcmUvcnVudGltZS9OYXRpdmVFcnJv
ckNvbnN0cnVjdG9yLmNwcAkocmV2aXNpb24gNjQ0NjQpCisrKyBKYXZhU2NyaXB0Q29yZS9ydW50
aW1lL05hdGl2ZUVycm9yQ29uc3RydWN0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02OCw0ICs2
OCwxNiBAQCBDYWxsVHlwZSBOYXRpdmVFcnJvckNvbnN0cnVjdG9yOjpnZXRDYWxsCiAgICAgcmV0
dXJuIENhbGxUeXBlSG9zdDsKIH0KIAorUGFzc1JlZlB0cjxTdHJ1Y3R1cmU+IE5hdGl2ZUVycm9y
Q29uc3RydWN0b3I6OmNyZWF0ZVN0cnVjdHVyZShKU09iamVjdCogcHJvdG90eXBlKQoreworICAg
IHJldHVybiBTdHJ1Y3R1cmU6OmNyZWF0ZShwcm90b3R5cGUsIFR5cGVJbmZvKE9iamVjdFR5cGUs
IFN0cnVjdHVyZUZsYWdzKSwgQW5vbnltb3VzU2xvdENvdW50KTsKK30KKwordm9pZCBOYXRpdmVF
cnJvckNvbnN0cnVjdG9yOjptYXJrQ2hpbGRyZW4oTWFya1N0YWNrJiBtYXJrU3RhY2spCit7Cisg
ICAgSW50ZXJuYWxGdW5jdGlvbjo6bWFya0NoaWxkcmVuKG1hcmtTdGFjayk7CisKKyAgICBtYXJr
U3RhY2suYXBwZW5kKG1fZXJyb3JTdHJ1Y3R1cmUtPnN0b3JlZFByb3RvdHlwZSgpKTsKK30KKwog
fSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBKYXZhU2NyaXB0Q29yZS9ydW50aW1lL05hdGl2ZUVy
cm9yQ29uc3RydWN0b3IuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0Q29yZS9ydW50aW1lL05h
dGl2ZUVycm9yQ29uc3RydWN0b3IuaAkocmV2aXNpb24gNjQ0NjQpCisrKyBKYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL05hdGl2ZUVycm9yQ29uc3RydWN0b3IuaAkod29ya2luZyBjb3B5KQpAQCAtMzYs
MTEgKzM2LDE3IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICBzdGF0aWMgY29uc3QgQ2xhc3NJ
bmZvIGluZm87CiAKICAgICAgICAgU3RydWN0dXJlKiBlcnJvclN0cnVjdHVyZSgpIHsgcmV0dXJu
IG1fZXJyb3JTdHJ1Y3R1cmUuZ2V0KCk7IH0KKyAgICAgICAgc3RhdGljIFBhc3NSZWZQdHI8U3Ry
dWN0dXJlPiBjcmVhdGVTdHJ1Y3R1cmUoSlNPYmplY3QqIHByb3RvdHlwZSk7CisKKyAgICBwcm90
ZWN0ZWQ6CisgICAgICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBTdHJ1Y3R1cmVGbGFncyA9IElu
dGVybmFsRnVuY3Rpb246OlN0cnVjdHVyZUZsYWdzIHwgT3ZlcnJpZGVzTWFya0NoaWxkcmVuOwog
CiAgICAgcHJpdmF0ZToKICAgICAgICAgdmlydHVhbCBDb25zdHJ1Y3RUeXBlIGdldENvbnN0cnVj
dERhdGEoQ29uc3RydWN0RGF0YSYpOwogICAgICAgICB2aXJ0dWFsIENhbGxUeXBlIGdldENhbGxE
YXRhKENhbGxEYXRhJik7CiAKKyAgICAgICAgdmlydHVhbCB2b2lkIG1hcmtDaGlsZHJlbihNYXJr
U3RhY2smKTsKKwogICAgICAgICB2aXJ0dWFsIGNvbnN0IENsYXNzSW5mbyogY2xhc3NJbmZvKCkg
Y29uc3QgeyByZXR1cm4gJmluZm87IH0KIAogICAgICAgICBSZWZQdHI8U3RydWN0dXJlPiBtX2Vy
cm9yU3RydWN0dXJlOwpJbmRleDogSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJ1Y3R1cmUuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cnVjdHVyZS5oCShyZXZpc2lv
biA2NDQ2NCkKKysrIEphdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RydWN0dXJlLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTk0LDcgKzk0LDggQEAgbmFtZXNwYWNlIEpTQyB7CiAKICAgICAgICAgY29uc3Qg
VHlwZUluZm8mIHR5cGVJbmZvKCkgY29uc3QgeyByZXR1cm4gbV90eXBlSW5mbzsgfQogCi0gICAg
ICAgIEpTVmFsdWUgc3RvcmVkUHJvdG90eXBlKCkgY29uc3QgeyByZXR1cm4gbV9wcm90b3R5cGU7
IH0KKyAgICAgICAgY29uc3QgSlNWYWx1ZSYgc3RvcmVkUHJvdG90eXBlKCkgY29uc3QgeyByZXR1
cm4gbV9wcm90b3R5cGU7IH0KKyAgICAgICAgSlNWYWx1ZSYgc3RvcmVkUHJvdG90eXBlKCkgeyBy
ZXR1cm4gbV9wcm90b3R5cGU7IH0KICAgICAgICAgSlNWYWx1ZSBwcm90b3R5cGVGb3JMb29rdXAo
RXhlY1N0YXRlKikgY29uc3Q7CiAgICAgICAgIFN0cnVjdHVyZUNoYWluKiBwcm90b3R5cGVDaGFp
bihFeGVjU3RhdGUqKSBjb25zdDsKIApJbmRleDogSmF2YVNjcmlwdEdsdWUvQ2hhbmdlTG9nCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIEphdmFTY3JpcHRHbHVlL0NoYW5nZUxvZwkocmV2aXNpb24gNjQyMjgpCisr
KyBKYXZhU2NyaXB0R2x1ZS9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwxNCBA
QAorMjAxMC0wOC0wMiAgTmF0aGFuIExhd3JlbmNlICA8bmxhd3JlbmNlQGFwcGxlLmNvbT4KKwor
ICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBSZW1vdmVkIHVu
bmVlZGVkIG1hcmtpbmcuICBXZSBuZWVkIHRvIHJlbW92ZSB0aGlzIG1hcmtpbmcgaW4gb3JkZXIg
dG8gaGF2ZQorICAgICAgICBNYXJrU3RhY2s6OmFwcGVuZCB0YWtlIHJlZmVyZW5jZXMgZm9yIHVw
ZGF0aW5nIG1vdmFibGUgb2JqZWN0cy4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTQxMTc3CisKKyAgICAgICAgKiBKU1ZhbHVlV3JhcHBlci5jcHA6Cisg
ICAgICAgIChKU1ZhbHVlV3JhcHBlcjo6SlNPYmplY3RNYXJrKToKKwogMjAxMC0wNy0yNyAgR2F2
aW4gQmFycmFjbG91Z2ggIDxiYXJyYWNsb3VnaEBhcHBsZS5jb20+CiAKICAgICAgICAgUmV2aWV3
ZWQgYnkgT2xpdmVyIEh1bnQuCkluZGV4OiBKYXZhU2NyaXB0R2x1ZS9KU1ZhbHVlV3JhcHBlci5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gSmF2YVNjcmlwdEdsdWUvSlNWYWx1ZVdyYXBwZXIuY3BwCShyZXZp
c2lvbiA2NDIyOCkKKysrIEphdmFTY3JpcHRHbHVlL0pTVmFsdWVXcmFwcGVyLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMTk0LDE1ICsxOTQsNCBAQCBDRlR5cGVSZWYgSlNWYWx1ZVdyYXBwZXI6OkpT
T2JqZWN0Q29weUNGCiAKIHZvaWQgSlNWYWx1ZVdyYXBwZXI6OkpTT2JqZWN0TWFyayh2b2lkICpk
YXRhKQogewotICAgIEpTVmFsdWVXcmFwcGVyKiBwdHIgPSAoSlNWYWx1ZVdyYXBwZXIqKWRhdGE7
Ci0gICAgaWYgKHB0cikKLSAgICB7Ci0gICAgICAgIC8vIFRoaXMgcmVzdWx0cyBpbiByZWN1cnNp
dmUgbWFya2luZyBidXQgd2lsbCBiZSBvdGhlcndpc2Ugc2FmZSBhbmQgY29ycmVjdC4KLSAgICAg
ICAgLy8gV2UgY2xhaW0gdGhlIGFycmF5IHZwdHIgaXMgMCBiZWNhdXNlIHdlIGRvbid0IGhhdmUg
YWNjZXNzIHRvIGl0IGhlcmUsIGFuZAotICAgICAgICAvLyBjbGFpbWluZyAwIGlzIGZ1bmN0aW9u
YWxseSBoYXJtbGVzcyAtLSBpdCBtZXJlbHkgbWVhbnMgdGhhdCB3ZSBjYW4ndAotICAgICAgICAv
LyBkZXZpcnR1YWxpc2UgbWFya2luZyBvZiBhcnJheXMgd2hlbiByZWN1cnNpbmcgZnJvbSB0aGlz
IHBvaW50LgotICAgICAgICBNYXJrU3RhY2sgbWFya1N0YWNrKDApOwotICAgICAgICBtYXJrU3Rh
Y2suYXBwZW5kKHB0ci0+ZlZhbHVlLmdldCgpKTsKLSAgICAgICAgbWFya1N0YWNrLmRyYWluKCk7
Ci0gICAgfQogfQo=
</data>
<flag name="review"
          id="51550"
          type_id="1"
          status="-"
          setter="darin"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>63245</attachid>
            <date>2010-08-02 12:14:16 -0700</date>
            <delta_ts>2010-08-04 10:18:52 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>references.patch</filename>
            <type>text/plain</type>
            <size>16862</size>
            <attacher name="Nathan Lawrence">nlawrence</attacher>
            
              <data encoding="base64">SW5kZXg6IEphdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDY0NDY0KQorKysgSmF2YVNjcmlwdENvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsNDYgQEAKKzIwMTAtMDgtMDIgIE5hdGhhbiBM
YXdyZW5jZSAgPG5sYXdyZW5jZUBhcHBsZS5jb20+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9C
T0RZIChPT1BTISkuCisKKyAgICAgICAgUmVmYWN0b3JpbmcgTWFya1N0YWNrOjphcHBlbmQgdG8g
dGFrZSBhIHJlZmVyZW5jZS4gIFRoaXMgaXMgaW4KKyAgICAgICAgcHJlcGFyYXRpb24gZm9yIG1v
dmFibGUgb2JqZWN0cyB3aGVuIHdlIHdpbGwgbmVlZCB0byB1cGRhdGUgcG9pbnRlcnMuCisgICAg
ICAgIGh0dHA6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTQxMTc3CisKKyAgICAg
ICAgVW5sZXNzIG90aGVyd2lzZSBub3RlZCwgYWxsIGNoYW5nZXMgYXJlIHRvIGVpdGhlciByZXR1
cm4gYnkgcmVmZXJlbmNlCisgICAgICAgIG9yIHBhc3MgYSByZWZlcmVuY2UgdG8gTWFya1N0YWNr
OjphcHBlbmQuCisKKyAgICAgICAgKiBieXRlY29kZS9Db2RlQmxvY2suY3BwOgorICAgICAgICAo
SlNDOjpDb2RlQmxvY2s6Om1hcmtBZ2dyZWdhdGUpOgorICAgICAgICAqIHJ1bnRpbWUvQ29sbGVj
dG9yLmNwcDoKKyAgICAgICAgKEpTQzo6SGVhcDo6bWFya0NvbnNlcnZhdGl2ZWx5KToKKyAgICAg
ICAgICAgIEFkZGVkIGEgdGVtcG9yYXJ5IHZhcmlhYmxlIHRvIHByZXZlbnQgbWFya2luZyBmcm9t
IGNoYW5naW5nIGFuCisgICAgICAgICAgICB1bmtub3duIHZhbHVlIG9uIHRoZSBzdGFjaworICAg
ICAgICAqIHJ1bnRpbWUvSlNDZWxsLmg6CisgICAgICAgIChKU0M6OkpTVmFsdWU6OmFzQ2VsbCk6
CisgICAgICAgIChKU0M6Ok1hcmtTdGFjazo6YXBwZW5kKToKKyAgICAgICAgKEpTQzo6TWFya1N0
YWNrOjphcHBlbmRJbnRlcm5hbCk6CisgICAgICAgICogcnVudGltZS9KU0dsb2JhbE9iamVjdC5j
cHA6CisgICAgICAgIChKU0M6Om1hcmtJZk5lZWRlZCk6CisgICAgICAgICogcnVudGltZS9KU09O
T2JqZWN0LmNwcDoKKyAgICAgICAgKEpTQzo6U3RyaW5naWZpZXI6OkhvbGRlcjo6b2JqZWN0KToK
KyAgICAgICAgKiBydW50aW1lL0pTT2JqZWN0Lmg6CisgICAgICAgIChKU0M6OkpTT2JqZWN0Ojpw
cm90b3R5cGUpOgorICAgICAgICAqIHJ1bnRpbWUvSlNTdGF0aWNTY29wZU9iamVjdC5jcHA6Cisg
ICAgICAgIChKU0M6OkpTU3RhdGljU2NvcGVPYmplY3Q6Om1hcmtDaGlsZHJlbik6CisgICAgICAg
ICogcnVudGltZS9KU1ZhbHVlLmg6CisgICAgICAgIChKU0M6OkpTVmFsdWU6OkpTVmFsdWUpOgor
ICAgICAgICAoSlNDOjpKU1ZhbHVlOjphc0NlbGwpOgorICAgICAgICAqIHJ1bnRpbWUvTWFya1N0
YWNrLmg6CisgICAgICAgICogcnVudGltZS9OYXRpdmVFcnJvckNvbnN0cnVjdG9yLmNwcDoKKyAg
ICAgICAgKEpTQzo6TmF0aXZlRXJyb3JDb25zdHJ1Y3Rvcjo6Y3JlYXRlU3RydWN0dXJlKToKKyAg
ICAgICAgICAgIENoYW5nZWQgdGhlIHN0cnVjdHVyZSBmbGFncyB0byBpbmNsdWRlIGEgY3VzdG9t
IG1hcmtDaGlsZHJlbi4KKyAgICAgICAgKEpTQzo6TmF0aXZlRXJyb3JDb25zdHJ1Y3Rvcjo6bWFy
a0NoaWxkcmVuKToKKyAgICAgICAgICAgIFVwZGF0ZSB0aGUgcHJvdG90eXBlIG9mIHRoZSBzdG9y
ZWQgc3RydWN0dXJlLgorICAgICAgICAqIHJ1bnRpbWUvTmF0aXZlRXJyb3JDb25zdHJ1Y3Rvci5o
OgorICAgICAgICAgICAgQWRkZWQgc3RydWN0dXJlIGZsYWdzLgorICAgICAgICAqIHJ1bnRpbWUv
U3RydWN0dXJlLmg6CisgICAgICAgIChKU0M6OlN0cnVjdHVyZTo6c3RvcmVkUHJvdG90eXBlKToK
KwogMjAxMC0wOC0wMiAgTWFoZXNoIEt1bGthcm5pICA8bWFoZXNoLmt1bGthcm5pQG5va2lhLmNv
bT4KIAogICAgICAgICBSZXZpZXdlZCBieSBTaW1vbiBIYXVzbWFubi4KSW5kZXg6IEphdmFTY3Jp
cHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gSmF2YVNjcmlwdENv
cmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmNwcAkocmV2aXNpb24gNjQ0NjQpCisrKyBKYXZhU2NyaXB0
Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNTEzLDcgKzE1
MTMsNyBAQCB2b2lkIENvZGVCbG9jazo6cmVmU3RydWN0dXJlcyhJbnN0cnVjdGlvCiB2b2lkIENv
ZGVCbG9jazo6bWFya0FnZ3JlZ2F0ZShNYXJrU3RhY2smIG1hcmtTdGFjaykKIHsKICAgICBmb3Ig
KHNpemVfdCBpID0gMDsgaSA8IG1fY29uc3RhbnRSZWdpc3RlcnMuc2l6ZSgpOyArK2kpCi0gICAg
ICAgIG1hcmtTdGFjay5hcHBlbmQobV9jb25zdGFudFJlZ2lzdGVyc1tpXS5qc1ZhbHVlKCkpOwor
ICAgICAgICBtYXJrU3RhY2suYXBwZW5kKG1fY29uc3RhbnRSZWdpc3RlcnNbaV0pOwogICAgIGZv
ciAoc2l6ZV90IGkgPSAwOyBpIDwgbV9mdW5jdGlvbkV4cHJzLnNpemUoKTsgKytpKQogICAgICAg
ICBtX2Z1bmN0aW9uRXhwcnNbaV0tPm1hcmtBZ2dyZWdhdGUobWFya1N0YWNrKTsKICAgICBmb3Ig
KHNpemVfdCBpID0gMDsgaSA8IG1fZnVuY3Rpb25EZWNscy5zaXplKCk7ICsraSkKSW5kZXg6IEph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvQ29sbGVjdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0NvbGxlY3Rvci5jcHAJKHJldmlzaW9uIDY0NDY0KQorKysgSmF2YVNj
cmlwdENvcmUvcnVudGltZS9Db2xsZWN0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03NTksNyAr
NzU5LDEzIEBAIHZvaWQgSGVhcDo6bWFya0NvbnNlcnZhdGl2ZWx5KE1hcmtTdGFjayYKICAgICAg
ICAgICAgIGZvciAoc2l6ZV90IGJsb2NrID0gMDsgYmxvY2sgPCB1c2VkQmxvY2tzOyBibG9jaysr
KSB7CiAgICAgICAgICAgICAgICAgaWYgKGJsb2Nrc1tibG9ja10gIT0gYmxvY2tBZGRyKQogICAg
ICAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgICAgICBtYXJrU3RhY2suYXBw
ZW5kKHJlaW50ZXJwcmV0X2Nhc3Q8SlNDZWxsKj4oeEFzQml0cykpOworICAgICAgICAgICAgICAg
IC8vIFdoaWxlIG1hcmtTdGFjay5hcHBlbmQgbm9ybWFsbHkgdGFrZXMgYSByZWZlcmVuY2UgdG8g
dXBkYXRlLAorICAgICAgICAgICAgICAgIC8vIHdlIGRvbid0IGFjdHVhbGx5IHdhbnQgdGhlIGhl
YXAgdG8gYmUgdXBkYXRlZCBzaW5jZSB3ZSBkb24ndAorICAgICAgICAgICAgICAgIC8vIGtub3cg
Zm9yIHN1cmUgdGhhdCBpdCdzIGFjdHVhbGx5IGEgcG9pbnRlci4gSW4gdGhlIGZ1dHVyZQorICAg
ICAgICAgICAgICAgIC8vIHRoaXMgd2lsbCBiZSByZXBsYWNlZCBieSBzb21lIGFwcGVuZFJvb3Qg
ZnVuY3Rpb24gZm9yIHRoaXMKKyAgICAgICAgICAgICAgICAvLyBzcGVjaWZpYyBjYXNlLgorICAg
ICAgICAgICAgICAgIEpTQ2VsbCogY2VsbCA9IHJlaW50ZXJwcmV0X2Nhc3Q8SlNDZWxsKj4oeEFz
Qml0cyk7CisgICAgICAgICAgICAgICAgbWFya1N0YWNrLmFwcGVuZChjZWxsKTsKICAgICAgICAg
ICAgICAgICBtYXJrU3RhY2suZHJhaW4oKTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQpJbmRl
eDogSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0NlbGwuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0pTQ2VsbC5oCShyZXZpc2lvbiA2NDQ2NCkKKysrIEphdmFTY3JpcHRD
b3JlL3J1bnRpbWUvSlNDZWxsLmgJKHdvcmtpbmcgY29weSkKQEAgLTM1LDYgKzM1LDcgQEAKIG5h
bWVzcGFjZSBKU0MgewogCiAgICAgY2xhc3MgSlNDZWxsIDogcHVibGljIE5vbmNvcHlhYmxlQ3Vz
dG9tQWxsb2NhdGVkIHsKKyAgICAgICAgZnJpZW5kIGNsYXNzIENvbGxlY3RvckhlYXA7CiAgICAg
ICAgIGZyaWVuZCBjbGFzcyBHZXR0ZXJTZXR0ZXI7CiAgICAgICAgIGZyaWVuZCBjbGFzcyBIZWFw
OwogICAgICAgICBmcmllbmQgY2xhc3MgSklUOwpAQCAtMjM3LDcgKzIzOCwxMyBAQCBuYW1lc3Bh
Y2UgSlNDIHsKICAgICB9CiAKICNpZiAhVVNFKEpTVkFMVUUzMl82NCkKLSAgICBBTFdBWVNfSU5M
SU5FIEpTQ2VsbCogSlNWYWx1ZTo6YXNDZWxsKCkgY29uc3QKKyAgICBBTFdBWVNfSU5MSU5FIEpT
Q2VsbComIEpTVmFsdWU6OmFzQ2VsbCgpCisgICAgeworICAgICAgICBBU1NFUlQoaXNDZWxsKCkp
OworICAgICAgICByZXR1cm4gbV9wdHI7CisgICAgfQorCisgICAgQUxXQVlTX0lOTElORSBKU0Nl
bGwqIGNvbnN0JiBKU1ZhbHVlOjphc0NlbGwoKSBjb25zdAogICAgIHsKICAgICAgICAgQVNTRVJU
KGlzQ2VsbCgpKTsKICAgICAgICAgcmV0dXJuIG1fcHRyOwpAQCAtMzI5LDcgKzMzNiw0MSBAQCBu
YW1lc3BhY2UgSlNDIHsKICAgICAgICAgcmV0dXJuIGlzQ2VsbCgpID8gYXNDZWxsKCktPnRvVGhp
c09iamVjdChleGVjKSA6IHRvVGhpc09iamVjdFNsb3dDYXNlKGV4ZWMpOwogICAgIH0KIAotICAg
IEFMV0FZU19JTkxJTkUgdm9pZCBNYXJrU3RhY2s6OmFwcGVuZChKU0NlbGwqIGNlbGwpCisgICAg
dGVtcGxhdGU8dHlwZW5hbWUgVD4KKyAgICBBTFdBWVNfSU5MSU5FIHZvaWQgTWFya1N0YWNrOjph
cHBlbmQoVComIGNlbGwpCisgICAgeworICAgICAgICAvLyBSZWZlcmVuY2VzIGluIEMrKyBhcmUg
bm90IGNvdmFyaWFudC4gIEpTT2JqZWN0KiBiZWluZyBhIHN1YnR5cGUgb2YgSlNDZWxsKgorICAg
ICAgICAvLyBkb2VzIG5vdCBtZWFuIHRoYXQgSlNPYmplY3QqJiBjYW4gYmUgdXNlZCBhcyBhIHN1
YnR5cGUgb2YgSlNDZWxsKiYgYmVjYXVzZQorICAgICAgICAvLyB0cmVhdGluZyBhIEpTT2JqZWN0
KiYgYXMgYSBKU0NlbGwqJiB3b3VsZCBhbGxvdyB1cyB0byBjaGFuZ2UgdGhlIHBvaW50ZXIgdG8K
KyAgICAgICAgLy8gcG9pbnQgdG8gc29tZXRoaW5nIHRoYXQgaXMgYSBKU0NlbGwgYnV0IG5vdCBh
IEpTT2JqZWN0LgorICAgICAgICAvLworICAgICAgICAvLyBJbiB0aGlzIGNhc2UsIHdlIG5lZWQg
dG8gYmUgYWJsZSB0byBjaGFuZ2UgdGhlIHBvaW50ZXIsIGFuZCBhbHRob3VnaCB3ZSBrbm93Cisg
ICAgICAgIC8vIGl0IHRvIGJlIHNhZmUsIEMrKyBkb2Vzbid0LCByZXF1aXJpbmcgdXMgdG8gdXNl
IHRlbXBsYXRlZCBmdW5jdGlvbnMgdGhhdAorICAgICAgICAvLyBwYXNzIGEgY2FzdGVkIHZlcnNp
b24gdG8gYW4gaW50ZXJuYWwgZnVuY3Rpb24uCisgICAgICAgIC8vCisgICAgICAgIC8vIEN1cnJl
bnRseSB3ZSdyZSBub3QgZG9pbmcgYW55dGhpbmcgd2l0aCB0aGUgdmFsdWUgb2YgdGhlIHBvaW50
ZXIsIHNvIG5vdGhpbmcKKyAgICAgICAgLy8gdW5zYWZlIHdpbGwgaGFwcGVuLiAgSW4gdGhlIGZ1
dHVyZSwgd2hlbiB3ZSBoYXZlIG1vdmFibGUgb2JqZWN0cywgd2Ugd2lsbCBiZQorICAgICAgICAv
LyBjaGFuZ2luZyB0aGUgdmFsdWUgb2YgdGhlIHBvaW50ZXIgdG8gYmUgdGhlIG5ldyBsb2NhdGlv
biwgaW4gd2hpY2ggY2FzZSB0aGUKKyAgICAgICAgLy8gdHlwZSB3aWxsIGJlIHByZXNlcnZlZC4K
KyAgICAgICAgSlNDZWxsKiYgcHRyID0gKnJlaW50ZXJwcmV0X2Nhc3Q8SlNDZWxsKio+KCZjZWxs
KTsKKyAgICAgICAgYXBwZW5kSW50ZXJuYWwocHRyKTsKKyAgICB9CisKKyAgICBBTFdBWVNfSU5M
SU5FIHZvaWQgTWFya1N0YWNrOjphcHBlbmQoSlNWYWx1ZSYgdmFsdWUpCisgICAgeworICAgICAg
ICBBU1NFUlQodmFsdWUpOworICAgICAgICBpZiAodmFsdWUuaXNDZWxsKCkpCisgICAgICAgICAg
ICBhcHBlbmRJbnRlcm5hbCh2YWx1ZS5hc0NlbGwoKSk7CisgICAgfQorCisgICAgQUxXQVlTX0lO
TElORSB2b2lkIE1hcmtTdGFjazo6YXBwZW5kKFJlZ2lzdGVyJiByZWcpCisgICAgeworICAgICAg
ICBKU1ZhbHVlIHZhbHVlID0gcmVnLmpzVmFsdWUoKTsKKyAgICAgICAgYXBwZW5kKHZhbHVlKTsK
KyAgICAgICAgcmVnID0gdmFsdWU7CisgICAgfQorCisgICAgaW5saW5lIHZvaWQgTWFya1N0YWNr
OjphcHBlbmRJbnRlcm5hbChKU0NlbGwqJiBjZWxsKQogICAgIHsKICAgICAgICAgQVNTRVJUKCFt
X2lzQ2hlY2tpbmdGb3JEZWZhdWx0TWFya1Zpb2xhdGlvbik7CiAgICAgICAgIEFTU0VSVChjZWxs
KTsKQEAgLTM0MCwxMyArMzgxLDYgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgICAgICBtX3Zh
bHVlcy5hcHBlbmQoY2VsbCk7CiAgICAgfQogCi0gICAgQUxXQVlTX0lOTElORSB2b2lkIE1hcmtT
dGFjazo6YXBwZW5kKEpTVmFsdWUgdmFsdWUpCi0gICAgewotICAgICAgICBBU1NFUlQodmFsdWUp
OwotICAgICAgICBpZiAodmFsdWUuaXNDZWxsKCkpCi0gICAgICAgICAgICBhcHBlbmQodmFsdWUu
YXNDZWxsKCkpOwotICAgIH0KLQogICAgIGlubGluZSBIZWFwKiBIZWFwOjpoZWFwKEpTVmFsdWUg
dikKICAgICB7CiAgICAgICAgIGlmICghdi5pc0NlbGwoKSkKSW5kZXg6IEphdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvSlNHbG9iYWxPYmplY3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEphdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvSlNHbG9iYWxPYmplY3QuY3BwCShyZXZpc2lvbiA2NDQ2NCkKKysrIEphdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxPYmplY3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04MCwx
NiArODAsMTYgQEAgc3RhdGljIGNvbnN0IGludCBpbml0aWFsVGlja0NvdW50VGhyZXNobwogLy8g
UHJlZmVycmVkIG51bWJlciBvZiBtaWxsaXNlY29uZHMgYmV0d2VlbiBlYWNoIHRpbWVvdXQgY2hl
Y2sKIHN0YXRpYyBjb25zdCBpbnQgcHJlZmVycmVkU2NyaXB0Q2hlY2tUaW1lSW50ZXJ2YWwgPSAx
MDAwOwogCi1zdGF0aWMgaW5saW5lIHZvaWQgbWFya0lmTmVlZGVkKE1hcmtTdGFjayYgbWFya1N0
YWNrLCBKU1ZhbHVlIHYpCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdGF0aWMgaW5saW5lIHZvaWQg
bWFya0lmTmVlZGVkKE1hcmtTdGFjayYgbWFya1N0YWNrLCBUKiYgdikKIHsKICAgICBpZiAodikK
ICAgICAgICAgbWFya1N0YWNrLmFwcGVuZCh2KTsKIH0KIAotc3RhdGljIGlubGluZSB2b2lkIG1h
cmtJZk5lZWRlZChNYXJrU3RhY2smIG1hcmtTdGFjaywgY29uc3QgUmVmUHRyPFN0cnVjdHVyZT4m
IHMpCitzdGF0aWMgaW5saW5lIHZvaWQgbWFya0lmTmVlZGVkKE1hcmtTdGFjayYgbWFya1N0YWNr
LCBSZWZQdHI8U3RydWN0dXJlPiYgcykKIHsKICAgICBpZiAocykKLSAgICAgICAgbWFya0lmTmVl
ZGVkKG1hcmtTdGFjaywgcy0+c3RvcmVkUHJvdG90eXBlKCkpOworICAgICAgICBtYXJrU3RhY2su
YXBwZW5kKHMtPnN0b3JlZFByb3RvdHlwZSgpKTsKIH0KIAogSlNHbG9iYWxPYmplY3Q6On5KU0ds
b2JhbE9iamVjdCgpCkluZGV4OiBKYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTT05PYmplY3QuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIEphdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNPTk9iamVjdC5jcHAJKHJl
dmlzaW9uIDY0NDY0KQorKysgSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU09OT2JqZWN0LmNwcAko
d29ya2luZyBjb3B5KQpAQCAtODIsMTIgKzgyLDEzIEBAIHByaXZhdGU6CiAgICAgcHVibGljOgog
ICAgICAgICBIb2xkZXIoSlNPYmplY3QqKTsKIAotICAgICAgICBKU09iamVjdCogb2JqZWN0KCkg
Y29uc3QgeyByZXR1cm4gbV9vYmplY3Q7IH0KKyAgICAgICAgSlNPYmplY3QqJiBvYmplY3QoKSB7
IHJldHVybiBtX29iamVjdDsgfQorICAgICAgICBKU09iamVjdCogY29uc3QmIG9iamVjdCgpIGNv
bnN0IHsgcmV0dXJuIG1fb2JqZWN0OyB9CiAKICAgICAgICAgYm9vbCBhcHBlbmROZXh0UHJvcGVy
dHkoU3RyaW5naWZpZXImLCBTdHJpbmdCdWlsZGVyJik7CiAKICAgICBwcml2YXRlOgotICAgICAg
ICBKU09iamVjdCogY29uc3QgbV9vYmplY3Q7CisgICAgICAgIEpTT2JqZWN0KiBtX29iamVjdDsK
ICAgICAgICAgY29uc3QgYm9vbCBtX2lzQXJyYXk7CiAgICAgICAgIGJvb2wgbV9pc0pTQXJyYXk7
CiAgICAgICAgIHVuc2lnbmVkIG1faW5kZXg7CkluZGV4OiBKYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0pTT2JqZWN0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU09iamVj
dC5oCShyZXZpc2lvbiA2NDQ2NCkKKysrIEphdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNPYmplY3Qu
aAkod29ya2luZyBjb3B5KQpAQCAtODYsNyArODYsOCBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAg
ICAgLy8gaW4gdGhlIGNsYXNzIGFzIGl0IHJlc3VsdHMgaW4gdGhlIHZ0YWJsZSBiZWluZyBnZW5l
cmF0ZWQgYXMgYSB3ZWFrIHN5bWJvbAogICAgICAgICB2aXJ0dWFsIH5KU09iamVjdCgpOwogCi0g
ICAgICAgIEpTVmFsdWUgcHJvdG90eXBlKCkgY29uc3Q7CisgICAgICAgIEpTVmFsdWUmIHByb3Rv
dHlwZSgpOworICAgICAgICBjb25zdCBKU1ZhbHVlJiBwcm90b3R5cGUoKSBjb25zdDsKICAgICAg
ICAgdm9pZCBzZXRQcm90b3R5cGUoSlNWYWx1ZSBwcm90b3R5cGUpOwogICAgICAgICBib29sIHNl
dFByb3RvdHlwZVdpdGhDeWNsZUNoZWNrKEpTVmFsdWUgcHJvdG90eXBlKTsKICAgICAgICAgCkBA
IC0zMTIsNyArMzEzLDEyIEBAIGlubGluZSBKU09iamVjdDo6fkpTT2JqZWN0KCkKICAgICBtX3N0
cnVjdHVyZS0+ZGVyZWYoKTsKIH0KIAotaW5saW5lIEpTVmFsdWUgSlNPYmplY3Q6OnByb3RvdHlw
ZSgpIGNvbnN0CitpbmxpbmUgSlNWYWx1ZSYgSlNPYmplY3Q6OnByb3RvdHlwZSgpCit7CisgICAg
cmV0dXJuIG1fc3RydWN0dXJlLT5zdG9yZWRQcm90b3R5cGUoKTsKK30KKworaW5saW5lIGNvbnN0
IEpTVmFsdWUmIEpTT2JqZWN0Ojpwcm90b3R5cGUoKSBjb25zdAogewogICAgIHJldHVybiBtX3N0
cnVjdHVyZS0+c3RvcmVkUHJvdG90eXBlKCk7CiB9CkluZGV4OiBKYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0pTU3RhdGljU2NvcGVPYmplY3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEphdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvSlNTdGF0aWNTY29wZU9iamVjdC5jcHAJKHJldmlzaW9uIDY0NDY0KQorKysgSmF2
YVNjcmlwdENvcmUvcnVudGltZS9KU1N0YXRpY1Njb3BlT2JqZWN0LmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMzQsNyArMzQsNyBAQCBBU1NFUlRfQ0xBU1NfRklUU19JTl9DRUxMKEpTU3RhdGljU2Nv
cGVPCiB2b2lkIEpTU3RhdGljU2NvcGVPYmplY3Q6Om1hcmtDaGlsZHJlbihNYXJrU3RhY2smIG1h
cmtTdGFjaykKIHsKICAgICBKU1ZhcmlhYmxlT2JqZWN0OjptYXJrQ2hpbGRyZW4obWFya1N0YWNr
KTsKLSAgICBtYXJrU3RhY2suYXBwZW5kKGQoKS0+cmVnaXN0ZXJTdG9yZS5qc1ZhbHVlKCkpOwor
ICAgIG1hcmtTdGFjay5hcHBlbmQoZCgpLT5yZWdpc3RlclN0b3JlKTsKIH0KIAogSlNPYmplY3Qq
IEpTU3RhdGljU2NvcGVPYmplY3Q6OnRvVGhpc09iamVjdChFeGVjU3RhdGUqIGV4ZWMpIGNvbnN0
CkluZGV4OiBKYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTVmFsdWUuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBK
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTVmFsdWUuaAkocmV2aXNpb24gNjQ0NjQpCisrKyBKYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0pTVmFsdWUuaAkod29ya2luZyBjb3B5KQpAQCAtMTk5LDcgKzE5
OSw4IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICBKU1ZhbHVlIGdldEpTTnVtYmVyKCk7IC8v
IEpTVmFsdWUoKSBpZiB0aGlzIGlzIG5vdCBhIEpTTnVtYmVyIG9yIG51bWJlciBvYmplY3QKIAog
ICAgICAgICBib29sIGlzQ2VsbCgpIGNvbnN0OwotICAgICAgICBKU0NlbGwqIGFzQ2VsbCgpIGNv
bnN0OworICAgICAgICBKU0NlbGwqJiBhc0NlbGwoKTsKKyAgICAgICAgSlNDZWxsKiBjb25zdCYg
YXNDZWxsKCkgY29uc3Q7CiAgICAgICAgIGJvb2wgaXNWYWxpZENhbGxlZSgpOwogCiAjaWZuZGVm
IE5ERUJVRwpAQCAtMjQwLDExICsyNDEsMTkgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgICAg
ICAgICAgaW50MzJfdCB0YWc7CiAgICAgICAgICAgICAgICAgaW50MzJfdCBwYXlsb2FkOwogICAg
ICAgICAgICAgfSBhc0JpdHM7CisgICAgICAgICAgICBzdHJ1Y3QgeworICAgICAgICAgICAgICAg
IGludDMyX3QgdGFnOworICAgICAgICAgICAgICAgIEpTQ2VsbCogcHRyOworICAgICAgICAgICAg
fSBhc1B0cjsKICNlbHNlCiAgICAgICAgICAgICBzdHJ1Y3QgewogICAgICAgICAgICAgICAgIGlu
dDMyX3QgcGF5bG9hZDsKICAgICAgICAgICAgICAgICBpbnQzMl90IHRhZzsKICAgICAgICAgICAg
IH0gYXNCaXRzOworICAgICAgICAgICAgc3RydWN0IHsKKyAgICAgICAgICAgICAgICBKU0NlbGwq
IHB0cjsKKyAgICAgICAgICAgICAgICBpbnQzMl90IHRhZzsKKyAgICAgICAgICAgIH0gYXNQdHI7
CiAjZW5kaWYKICAgICAgICAgfSB1OwogI2Vsc2UgLy8gVVNFKEpTVkFMVUUzMl82NCkKQEAgLTQ5
MSw3ICs1MDAsNyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgICAgIHUuYXNCaXRzLnRhZyA9
IENlbGxUYWc7CiAgICAgICAgIGVsc2UKICAgICAgICAgICAgIHUuYXNCaXRzLnRhZyA9IEVtcHR5
VmFsdWVUYWc7Ci0gICAgICAgIHUuYXNCaXRzLnBheWxvYWQgPSByZWludGVycHJldF9jYXN0PGlu
dDMyX3Q+KHB0cik7CisgICAgICAgIHUuYXNQdHIucHRyID0gcHRyOwogI2lmIEVOQUJMRShKU0Nf
Wk9NQklFUykKICAgICAgICAgQVNTRVJUKCFpc1pvbWJpZSgpKTsKICNlbmRpZgpAQCAtNTAzLDcg
KzUxMiw3IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICAgICAgdS5hc0JpdHMudGFnID0gQ2Vs
bFRhZzsKICAgICAgICAgZWxzZQogICAgICAgICAgICAgdS5hc0JpdHMudGFnID0gRW1wdHlWYWx1
ZVRhZzsKLSAgICAgICAgdS5hc0JpdHMucGF5bG9hZCA9IHJlaW50ZXJwcmV0X2Nhc3Q8aW50MzJf
dD4oY29uc3RfY2FzdDxKU0NlbGwqPihwdHIpKTsKKyAgICAgICAgdS5hc1B0ci5wdHIgPSBjb25z
dF9jYXN0PEpTQ2VsbCo+KHB0cik7CiAjaWYgRU5BQkxFKEpTQ19aT01CSUVTKQogICAgICAgICBB
U1NFUlQoIWlzWm9tYmllKCkpOwogI2VuZGlmCkBAIC01OTgsMTAgKzYwNywxNiBAQCBuYW1lc3Bh
Y2UgSlNDIHsKICAgICAgICAgcmV0dXJuIHUuYXNEb3VibGU7CiAgICAgfQogICAgIAotICAgIEFM
V0FZU19JTkxJTkUgSlNDZWxsKiBKU1ZhbHVlOjphc0NlbGwoKSBjb25zdAorICAgIEFMV0FZU19J
TkxJTkUgSlNDZWxsKiBjb25zdCYgSlNWYWx1ZTo6YXNDZWxsKCkgY29uc3QKKyAgICB7CisgICAg
ICAgIEFTU0VSVChpc0NlbGwoKSk7CisgICAgICAgIHJldHVybiB1LmFzUHRyLnB0cjsKKyAgICB9
CisKKyAgICBBTFdBWVNfSU5MSU5FIEpTQ2VsbComIEpTVmFsdWU6OmFzQ2VsbCgpCiAgICAgewog
ICAgICAgICBBU1NFUlQoaXNDZWxsKCkpOwotICAgICAgICByZXR1cm4gcmVpbnRlcnByZXRfY2Fz
dDxKU0NlbGwqPih1LmFzQml0cy5wYXlsb2FkKTsKKyAgICAgICAgcmV0dXJuIHUuYXNQdHIucHRy
OwogICAgIH0KIAogICAgIEFMV0FZU19JTkxJTkUgSlNWYWx1ZTo6SlNWYWx1ZShFbmNvZGVBc0Rv
dWJsZVRhZywgRXhlY1N0YXRlKiwgZG91YmxlIGQpCkluZGV4OiBKYXZhU2NyaXB0Q29yZS9ydW50
aW1lL01hcmtTdGFjay5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEphdmFTY3JpcHRDb3JlL3J1bnRpbWUvTWFy
a1N0YWNrLmgJKHJldmlzaW9uIDY0NDY0KQorKysgSmF2YVNjcmlwdENvcmUvcnVudGltZS9NYXJr
U3RhY2suaAkod29ya2luZyBjb3B5KQpAQCAtNDYsOCArNDYsOSBAQCBuYW1lc3BhY2UgSlNDIHsK
ICAgICAgICAgewogICAgICAgICB9CiAKLSAgICAgICAgQUxXQVlTX0lOTElORSB2b2lkIGFwcGVu
ZChKU1ZhbHVlKTsKLSAgICAgICAgdm9pZCBhcHBlbmQoSlNDZWxsKik7CisgICAgICAgIHRlbXBs
YXRlPHR5cGVuYW1lIFQ+IEFMV0FZU19JTkxJTkUgdm9pZCBhcHBlbmQoVComIGNlbGwpOworICAg
ICAgICBBTFdBWVNfSU5MSU5FIHZvaWQgYXBwZW5kKEpTVmFsdWUmKTsKKyAgICAgICAgQUxXQVlT
X0lOTElORSB2b2lkIGFwcGVuZChSZWdpc3RlciYpOwogICAgICAgICAKICAgICAgICAgQUxXQVlT
X0lOTElORSB2b2lkIGFwcGVuZFZhbHVlcyhSZWdpc3RlciogdmFsdWVzLCBzaXplX3QgY291bnQs
IE1hcmtTZXRQcm9wZXJ0aWVzIHByb3BlcnRpZXMgPSBOb051bGxWYWx1ZXMpCiAgICAgICAgIHsK
QEAgLTcwLDYgKzcxLDggQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIH0KIAogICAgIHByaXZh
dGU6CisgICAgICAgIHZvaWQgYXBwZW5kSW50ZXJuYWwoSlNDZWxsKiYpOworCiAgICAgICAgIHZv
aWQgbWFya0NoaWxkcmVuKEpTQ2VsbCopOwogCiAgICAgICAgIHN0cnVjdCBNYXJrU2V0IHsKSW5k
ZXg6IEphdmFTY3JpcHRDb3JlL3J1bnRpbWUvTmF0aXZlRXJyb3JDb25zdHJ1Y3Rvci5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gSmF2YVNjcmlwdENvcmUvcnVudGltZS9OYXRpdmVFcnJvckNvbnN0cnVjdG9y
LmNwcAkocmV2aXNpb24gNjQ0NjQpCisrKyBKYXZhU2NyaXB0Q29yZS9ydW50aW1lL05hdGl2ZUVy
cm9yQ29uc3RydWN0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02OCw0ICs2OCwxNiBAQCBDYWxs
VHlwZSBOYXRpdmVFcnJvckNvbnN0cnVjdG9yOjpnZXRDYWxsCiAgICAgcmV0dXJuIENhbGxUeXBl
SG9zdDsKIH0KIAorUGFzc1JlZlB0cjxTdHJ1Y3R1cmU+IE5hdGl2ZUVycm9yQ29uc3RydWN0b3I6
OmNyZWF0ZVN0cnVjdHVyZShKU09iamVjdCogcHJvdG90eXBlKQoreworICAgIHJldHVybiBTdHJ1
Y3R1cmU6OmNyZWF0ZShwcm90b3R5cGUsIFR5cGVJbmZvKE9iamVjdFR5cGUsIFN0cnVjdHVyZUZs
YWdzKSwgQW5vbnltb3VzU2xvdENvdW50KTsKK30KKwordm9pZCBOYXRpdmVFcnJvckNvbnN0cnVj
dG9yOjptYXJrQ2hpbGRyZW4oTWFya1N0YWNrJiBtYXJrU3RhY2spCit7CisgICAgSW50ZXJuYWxG
dW5jdGlvbjo6bWFya0NoaWxkcmVuKG1hcmtTdGFjayk7CisKKyAgICBtYXJrU3RhY2suYXBwZW5k
KG1fZXJyb3JTdHJ1Y3R1cmUtPnN0b3JlZFByb3RvdHlwZSgpKTsKK30KKwogfSAvLyBuYW1lc3Bh
Y2UgSlNDCkluZGV4OiBKYXZhU2NyaXB0Q29yZS9ydW50aW1lL05hdGl2ZUVycm9yQ29uc3RydWN0
b3IuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0Q29yZS9ydW50aW1lL05hdGl2ZUVycm9yQ29u
c3RydWN0b3IuaAkocmV2aXNpb24gNjQ0NjQpCisrKyBKYXZhU2NyaXB0Q29yZS9ydW50aW1lL05h
dGl2ZUVycm9yQ29uc3RydWN0b3IuaAkod29ya2luZyBjb3B5KQpAQCAtMzYsMTEgKzM2LDE3IEBA
IG5hbWVzcGFjZSBKU0MgewogICAgICAgICBzdGF0aWMgY29uc3QgQ2xhc3NJbmZvIGluZm87CiAK
ICAgICAgICAgU3RydWN0dXJlKiBlcnJvclN0cnVjdHVyZSgpIHsgcmV0dXJuIG1fZXJyb3JTdHJ1
Y3R1cmUuZ2V0KCk7IH0KKyAgICAgICAgc3RhdGljIFBhc3NSZWZQdHI8U3RydWN0dXJlPiBjcmVh
dGVTdHJ1Y3R1cmUoSlNPYmplY3QqIHByb3RvdHlwZSk7CisKKyAgICBwcm90ZWN0ZWQ6CisgICAg
ICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBTdHJ1Y3R1cmVGbGFncyA9IEludGVybmFsRnVuY3Rp
b246OlN0cnVjdHVyZUZsYWdzIHwgT3ZlcnJpZGVzTWFya0NoaWxkcmVuOwogCiAgICAgcHJpdmF0
ZToKICAgICAgICAgdmlydHVhbCBDb25zdHJ1Y3RUeXBlIGdldENvbnN0cnVjdERhdGEoQ29uc3Ry
dWN0RGF0YSYpOwogICAgICAgICB2aXJ0dWFsIENhbGxUeXBlIGdldENhbGxEYXRhKENhbGxEYXRh
Jik7CiAKKyAgICAgICAgdmlydHVhbCB2b2lkIG1hcmtDaGlsZHJlbihNYXJrU3RhY2smKTsKKwog
ICAgICAgICB2aXJ0dWFsIGNvbnN0IENsYXNzSW5mbyogY2xhc3NJbmZvKCkgY29uc3QgeyByZXR1
cm4gJmluZm87IH0KIAogICAgICAgICBSZWZQdHI8U3RydWN0dXJlPiBtX2Vycm9yU3RydWN0dXJl
OwpJbmRleDogSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJ1Y3R1cmUuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBKYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cnVjdHVyZS5oCShyZXZpc2lvbiA2NDQ2NCkKKysr
IEphdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RydWN0dXJlLmgJKHdvcmtpbmcgY29weSkKQEAgLTk0
LDcgKzk0LDggQEAgbmFtZXNwYWNlIEpTQyB7CiAKICAgICAgICAgY29uc3QgVHlwZUluZm8mIHR5
cGVJbmZvKCkgY29uc3QgeyByZXR1cm4gbV90eXBlSW5mbzsgfQogCi0gICAgICAgIEpTVmFsdWUg
c3RvcmVkUHJvdG90eXBlKCkgY29uc3QgeyByZXR1cm4gbV9wcm90b3R5cGU7IH0KKyAgICAgICAg
Y29uc3QgSlNWYWx1ZSYgc3RvcmVkUHJvdG90eXBlKCkgY29uc3QgeyByZXR1cm4gbV9wcm90b3R5
cGU7IH0KKyAgICAgICAgSlNWYWx1ZSYgc3RvcmVkUHJvdG90eXBlKCkgeyByZXR1cm4gbV9wcm90
b3R5cGU7IH0KICAgICAgICAgSlNWYWx1ZSBwcm90b3R5cGVGb3JMb29rdXAoRXhlY1N0YXRlKikg
Y29uc3Q7CiAgICAgICAgIFN0cnVjdHVyZUNoYWluKiBwcm90b3R5cGVDaGFpbihFeGVjU3RhdGUq
KSBjb25zdDsKIApJbmRleDogSmF2YVNjcmlwdEdsdWUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IEphdmFTY3JpcHRHbHVlL0NoYW5nZUxvZwkocmV2aXNpb24gNjQyMjgpCisrKyBKYXZhU2NyaXB0
R2x1ZS9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwxNSBAQAorMjAxMC0wOC0w
MiAgTmF0aGFuIExhd3JlbmNlICA8bmxhd3JlbmNlQGFwcGxlLmNvbT4KKworICAgICAgICBSZXZp
ZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBSZW1vdmVkIHVubmVlZGVkIG1hcmtp
bmcuICBXZSBuZWVkIHRvIHJlbW92ZSB0aGlzIG1hcmtpbmcgaW4gb3JkZXIgdG8gaGF2ZQorICAg
ICAgICBNYXJrU3RhY2s6OmFwcGVuZCB0YWtlIHJlZmVyZW5jZXMgZm9yIHVwZGF0aW5nIG1vdmFi
bGUgb2JqZWN0cy4KKworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9NDExNzcKKworICAgICAgICAqIEpTVmFsdWVXcmFwcGVyLmNwcDoKKyAgICAgICAgKEpT
VmFsdWVXcmFwcGVyOjpKU09iamVjdE1hcmspOgorCiAyMDEwLTA3LTI3ICBHYXZpbiBCYXJyYWNs
b3VnaCAgPGJhcnJhY2xvdWdoQGFwcGxlLmNvbT4KIAogICAgICAgICBSZXZpZXdlZCBieSBPbGl2
ZXIgSHVudC4KSW5kZXg6IEphdmFTY3JpcHRHbHVlL0pTVmFsdWVXcmFwcGVyLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBKYXZhU2NyaXB0R2x1ZS9KU1ZhbHVlV3JhcHBlci5jcHAJKHJldmlzaW9uIDY0MjI4
KQorKysgSmF2YVNjcmlwdEdsdWUvSlNWYWx1ZVdyYXBwZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0xOTIsMTcgKzE5MiwxMiBAQCBDRlR5cGVSZWYgSlNWYWx1ZVdyYXBwZXI6OkpTT2JqZWN0Q29w
eUNGCiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAotdm9pZCBKU1ZhbHVlV3JhcHBlcjo6SlNPYmpl
Y3RNYXJrKHZvaWQgKmRhdGEpCit2b2lkIEpTVmFsdWVXcmFwcGVyOjpKU09iamVjdE1hcmsodm9p
ZCopCiB7Ci0gICAgSlNWYWx1ZVdyYXBwZXIqIHB0ciA9IChKU1ZhbHVlV3JhcHBlciopZGF0YTsK
LSAgICBpZiAocHRyKQotICAgIHsKLSAgICAgICAgLy8gVGhpcyByZXN1bHRzIGluIHJlY3Vyc2l2
ZSBtYXJraW5nIGJ1dCB3aWxsIGJlIG90aGVyd2lzZSBzYWZlIGFuZCBjb3JyZWN0LgotICAgICAg
ICAvLyBXZSBjbGFpbSB0aGUgYXJyYXkgdnB0ciBpcyAwIGJlY2F1c2Ugd2UgZG9uJ3QgaGF2ZSBh
Y2Nlc3MgdG8gaXQgaGVyZSwgYW5kCi0gICAgICAgIC8vIGNsYWltaW5nIDAgaXMgZnVuY3Rpb25h
bGx5IGhhcm1sZXNzIC0tIGl0IG1lcmVseSBtZWFucyB0aGF0IHdlIGNhbid0Ci0gICAgICAgIC8v
IGRldmlydHVhbGlzZSBtYXJraW5nIG9mIGFycmF5cyB3aGVuIHJlY3Vyc2luZyBmcm9tIHRoaXMg
cG9pbnQuCi0gICAgICAgIE1hcmtTdGFjayBtYXJrU3RhY2soMCk7Ci0gICAgICAgIG1hcmtTdGFj
ay5hcHBlbmQocHRyLT5mVmFsdWUuZ2V0KCkpOwotICAgICAgICBtYXJrU3RhY2suZHJhaW4oKTsK
LSAgICB9CisgICAgLy8gVGhlIG9iamVjdCBkb2Vzbid0IG5lZWQgdG8gYmUgbWFya2VkIGhlcmUg
YmVjYXVzZSBpdCBpcyBhIHByb3RlY3RlZAorICAgIC8vIG9iamVjdCBhbmQgc2hvdWxkIHRoZXJl
Zm9yZSBiZSBtYXJrZWQgYnkKKyAgICAvLyBKU0M6OkhlYXA6Om1hcmtQcm90ZWN0ZWRPYmplY3Rz
LgorCisgICAgLy8gV2UgYXJlIGtlZXBpbmcgdGhlIGZ1bmN0aW9uIGFyb3VuZCBiZWNhdXNlIHRo
ZSBmdW5jdGlvbiBpcyBwYXNzZWQgYXMgYQorICAgIC8vIGNhbGxiYWNrLgogfQo=
</data>

          </attachment>
      

    </bug>

</bugzilla>