<?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>47354</bug_id>
          
          <creation_ts>2010-10-07 09:05:58 -0700</creation_ts>
          <short_desc>Need WKPage API for serializing and restoring a page&apos;s state</short_desc>
          <delta_ts>2010-10-11 22:26:06 -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>WebKit2</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Brady Eidson">beidson</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>abarth</cc>
    
    <cc>eric</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>291042</commentid>
    <comment_count>0</comment_count>
    <who name="Brady Eidson">beidson</who>
    <bug_when>2010-10-07 09:05:58 -0700</bug_when>
    <thetext>Need WKPage API for serializing and restoring a page&apos;s state, including its session state, such as back/forward list data.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>291050</commentid>
    <comment_count>1</comment_count>
    <who name="Brady Eidson">beidson</who>
    <bug_when>2010-10-07 09:25:52 -0700</bug_when>
    <thetext>Patch coming shortly, and will refer to https://bugs.webkit.org/show_bug.cgi?id=47355 for follow up work.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>291053</commentid>
    <comment_count>2</comment_count>
      <attachid>70096</attachid>
    <who name="Brady Eidson">beidson</who>
    <bug_when>2010-10-07 09:31:36 -0700</bug_when>
    <thetext>Created attachment 70096
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>291056</commentid>
    <comment_count>3</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-10-07 09:34:05 -0700</bug_when>
    <thetext>Attachment 70096 did not pass style-queue:

Failed to run &quot;[&apos;WebKitTools/Scripts/check-webkit-style&apos;]&quot; exit_code: 1
WebKit2/UIProcess/cf/WebBackForwardListCF.cpp:26:  Found header this file implements before WebCore config.h. Should be: config.h, primary header, blank line, and then alphabetically sorted.  [build/include_order] [4]
WebKit2/Platform/Logging.cpp:26:  Found header this file implements before WebCore config.h. Should be: config.h, primary header, blank line, and then alphabetically sorted.  [build/include_order] [4]
WebKit2/UIProcess/cf/WebPageProxyCF.cpp:26:  Found header this file implements before WebCore config.h. Should be: config.h, primary header, blank line, and then alphabetically sorted.  [build/include_order] [4]
WebKit2/UIProcess/cf/WebPageProxyCF.cpp:63:  Use 0 instead of NULL.  [readability/null] [5]
WebKit2/UIProcess/cf/WebPageProxyCF.cpp:65:  Use 0 instead of NULL.  [readability/null] [5]
WebKit2/UIProcess/cf/WebPageProxyCF.cpp:67:  Tests for true/false, null/non-null, and zero/non-zero should all be done without equality comparisons.  [readability/comparison_to_zero] [5]
WebKit2/UIProcess/cf/WebPageProxyCF.cpp:67:  Use 0 instead of NULL.  [readability/null] [5]
Total errors found: 7 in 14 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>291061</commentid>
    <comment_count>4</comment_count>
      <attachid>70098</attachid>
    <who name="Brady Eidson">beidson</who>
    <bug_when>2010-10-07 09:47:03 -0700</bug_when>
    <thetext>Created attachment 70098
Patch v2 

Fixed NULL -&gt; 0 style errors, but the config.h stuff is bogus (we don&apos;t use it in WK2)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>291067</commentid>
    <comment_count>5</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-10-07 09:53:23 -0700</bug_when>
    <thetext>Attachment 70098 did not pass style-queue:

Failed to run &quot;[&apos;WebKitTools/Scripts/check-webkit-style&apos;]&quot; exit_code: 1
WebKit2/UIProcess/cf/WebBackForwardListCF.cpp:26:  Found header this file implements before WebCore config.h. Should be: config.h, primary header, blank line, and then alphabetically sorted.  [build/include_order] [4]
WebKit2/Platform/Logging.cpp:26:  Found header this file implements before WebCore config.h. Should be: config.h, primary header, blank line, and then alphabetically sorted.  [build/include_order] [4]
WebKit2/UIProcess/cf/WebPageProxyCF.cpp:26:  Found header this file implements before WebCore config.h. Should be: config.h, primary header, blank line, and then alphabetically sorted.  [build/include_order] [4]
Total errors found: 3 in 14 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>291140</commentid>
    <comment_count>6</comment_count>
    <who name="Brady Eidson">beidson</who>
    <bug_when>2010-10-07 11:00:51 -0700</bug_when>
    <thetext>Per Sam&apos;s in person request and review, landed Logging channel stuff separately in http://trac.webkit.org/changeset/69323</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>291145</commentid>
    <comment_count>7</comment_count>
      <attachid>70121</attachid>
    <who name="Brady Eidson">beidson</who>
    <bug_when>2010-10-07 11:08:35 -0700</bug_when>
    <thetext>Created attachment 70121
Patch v3 (without Logging.h/cpp additions)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>291152</commentid>
    <comment_count>8</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-10-07 11:12:23 -0700</bug_when>
    <thetext>Attachment 70121 did not pass style-queue:

Failed to run &quot;[&apos;WebKitTools/Scripts/check-webkit-style&apos;]&quot; exit_code: 1
WebKit2/UIProcess/cf/WebBackForwardListCF.cpp:26:  Found header this file implements before WebCore config.h. Should be: config.h, primary header, blank line, and then alphabetically sorted.  [build/include_order] [4]
WebKit2/UIProcess/cf/WebPageProxyCF.cpp:26:  Found header this file implements before WebCore config.h. Should be: config.h, primary header, blank line, and then alphabetically sorted.  [build/include_order] [4]
Total errors found: 2 in 11 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>291957</commentid>
    <comment_count>9</comment_count>
      <attachid>70121</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2010-10-08 16:44:58 -0700</bug_when>
    <thetext>Comment on attachment 70121
Patch v3 (without Logging.h/cpp additions)

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

&gt; WebKit2/UIProcess/WebBackForwardList.h:93
&gt; +// FIXME - &lt;rdar://problem/8261624&gt; and https://bugs.webkit.org/show_bug.cgi?id=47355 - 
&gt; +//         When we have a solution for restoring the full back/forward list 
&gt; +//         then causing a load of the current item, we will no longer need this.

Strange formatting here. We normally don&apos;t use &quot;-&quot; like this and line up multi-line comments like this.

&gt; WebKit2/UIProcess/WebPageProxy.h:163
&gt; +    typedef bool (*WebPageProxySessionStateFilterCallback)(WKPageRef page, WKStringRef type, WKTypeRef object, void*);

No need for the argument name &quot;page&quot; here.

&gt; WebKit2/UIProcess/API/C/WKPage.cpp:157
&gt; +    static RefPtr&lt;WebString&gt; sessionHistoryURLValueType = WebString::create(&quot;SessionHistoryURL&quot;);

This should not be a RefPtr. That will cause us to have a static destructor. Instead we just want to leak this string and store it in a WebString* or a WKStringRef global.

&gt; WebKit2/UIProcess/API/C/WKPage.h:191
&gt; +WK_EXPORT WKStringRef WKPageGetSessionHistoryURLValueType();

If these are supposed to be C header files, then these should say (void), not ().

&gt; WebKit2/UIProcess/API/C/WKPage.h:193
&gt; +typedef bool (*WKPageSessionStateFilterCallback)(WKPageRef page, WKStringRef valueType, WKTypeRef value, void*);

If this is a C header file, then the last argument needs an argument name.

&gt; WebKit2/UIProcess/API/C/WKPage.h:194
&gt; +WK_EXPORT WKDataRef WKPageCopySessionState(WKPageRef page, void *context, WKPageSessionStateFilterCallback urlAllowedCallback);

Not sure why you said “void *context” here and “void*” on the line above.

&gt; WebKit2/UIProcess/cf/WebBackForwardListCF.cpp:40
&gt; +    RetainPtr&lt;CFMutableDictionaryRef&gt; dictionary(AdoptCF, CFDictionaryCreateMutable(0, 2, &amp;kCFTypeDictionaryKeyCallBacks, &amp;kCFTypeDictionaryValueCallBacks));

Since this dictionary always has exactly two values, I think we could just use CFDictionaryCreate on it instead of making it mutable.

&gt; WebKit2/UIProcess/cf/WebBackForwardListCF.cpp:42
&gt; +    RetainPtr&lt;CFNumberRef&gt; currentIndex(AdoptCF, CFNumberCreate(0, kCFNumberSInt32Type, &amp;m_current));

Since m_current is not an SInt32 or UInt32, but rather an unsigned, the right CFNumberType to use is kCFNumberIntType.

&gt; WebKit2/UIProcess/cf/WebBackForwardListCF.cpp:51
&gt; +        RetainPtr&lt;CFMutableDictionaryRef&gt; entryDictionary(AdoptCF, CFDictionaryCreateMutable(0, 2, &amp;kCFTypeDictionaryKeyCallBacks, &amp;kCFTypeDictionaryValueCallBacks));

Since this dictionary always has exactly two values, I think we could just use CFDictionaryCreate on it instead of making it mutable.

&gt; WebKit2/UIProcess/cf/WebBackForwardListCF.cpp:64
&gt; +    return dictionary.releaseRef();

Please use the new name leakRef rather than the old name releaseRef.

&gt; WebKit2/UIProcess/cf/WebBackForwardListCF.cpp:70
&gt; +    if (!cfIndex || CFGetTypeID(cfIndex) != CFNumberGetTypeID() || CFNumberIsFloatType(cfIndex)) {

Why the CFNumberIsFloat type check? That doesn’t seem right.

&gt; WebKit2/UIProcess/cf/WebBackForwardListCF.cpp:76
&gt; +    int32_t currentIndex;
&gt; +    if (!CFNumberGetValue(cfIndex, kCFNumberSInt32Type, &amp;currentIndex)) {

It would be more elegant to use int and kCFNumberIntType or SInt32 and kCFNumberSInt32Type.

&gt; WebKit2/UIProcess/cf/WebBackForwardListCF.cpp:110
&gt; +        // FIXME &lt;rdar://problem/8261624&gt; and https://bugs.webkit.org/show_bug.cgi?id=47355 - 
&gt; +        //          The data for the above entry needs to be added to the full back/forward list.
&gt; +        //          When we have a solution that restores the full back/forwardlist then causes a load of the current item,
&gt; +        //          we will no longer need this.

Same comment-formatting thought as above.

&gt; WebKit2/UIProcess/cf/WebPageProxyCF.cpp:47
&gt; +    RetainPtr&lt;CFMutableDictionaryRef&gt; stateDictionary(AdoptCF, CFDictionaryCreateMutable(0, 1, &amp;kCFTypeDictionaryKeyCallBacks, &amp;kCFTypeDictionaryValueCallBacks));
&gt; +    CFDictionarySetValue(stateDictionary.get(), SessionHistoryKey(), sessionHistoryDictionary.get());

Since this dictionary always has exactly one value, I think we could just use CFDictionaryCreate on it instead of making it mutable.

&gt; WebKit2/UIProcess/cf/WebPageProxyCF.cpp:55
&gt; +    RefPtr&lt;WebData&gt; stateWebData = WebData::create(stateVector);
&gt; +    return stateWebData.release();

No need for the local variable here.

&gt; WebKit2/UIProcess/cf/WebPageProxyCF.cpp:93
&gt; +    // FIXME: When we have a solution for restoring the full back/forward list then causing a load of the current item,
&gt; +    //        we will trigger that load here.  Until then, we use the &quot;restored current URL&quot; which can later be removed.

Same FIXME formatting comment.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>292679</commentid>
    <comment_count>10</comment_count>
      <attachid>70476</attachid>
    <who name="Brady Eidson">beidson</who>
    <bug_when>2010-10-11 14:56:20 -0700</bug_when>
    <thetext>Created attachment 70476
Patch v4 - All of Darin&apos;s feedback, plus a versioning header Sam and I discussed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>292682</commentid>
    <comment_count>11</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-10-11 15:01:03 -0700</bug_when>
    <thetext>Attachment 70476 did not pass style-queue:

Failed to run &quot;[&apos;WebKitTools/Scripts/check-webkit-style&apos;]&quot; exit_code: 1
WebKit2/UIProcess/cf/WebBackForwardListCF.cpp:26:  Found header this file implements before WebCore config.h. Should be: config.h, primary header, blank line, and then alphabetically sorted.  [build/include_order] [4]
WebKit2/UIProcess/cf/WebPageProxyCF.cpp:26:  Found header this file implements before WebCore config.h. Should be: config.h, primary header, blank line, and then alphabetically sorted.  [build/include_order] [4]
Total errors found: 2 in 11 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>292684</commentid>
    <comment_count>12</comment_count>
      <attachid>70476</attachid>
    <who name="Brady Eidson">beidson</who>
    <bug_when>2010-10-11 15:03:56 -0700</bug_when>
    <thetext>Comment on attachment 70476
Patch v4 - All of Darin&apos;s feedback, plus a versioning header Sam and I discussed.

Whoops different version for windows coming soon</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>292703</commentid>
    <comment_count>13</comment_count>
      <attachid>70477</attachid>
    <who name="Brady Eidson">beidson</who>
    <bug_when>2010-10-11 15:22:14 -0700</bug_when>
    <thetext>Created attachment 70477
Patch v5 - Darin&apos;s feedback + a cross platform version header.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>292704</commentid>
    <comment_count>14</comment_count>
      <attachid>70477</attachid>
    <who name="Brady Eidson">beidson</who>
    <bug_when>2010-10-11 15:23:53 -0700</bug_when>
    <thetext>Comment on attachment 70477
Patch v5 - Darin&apos;s feedback + a cross platform version header.

Sorry, not quite ready</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>292706</commentid>
    <comment_count>15</comment_count>
      <attachid>70478</attachid>
    <who name="Brady Eidson">beidson</who>
    <bug_when>2010-10-11 15:24:46 -0700</bug_when>
    <thetext>Created attachment 70478
Patch v6 - The same, with debugging info, etc removed</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>292707</commentid>
    <comment_count>16</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-10-11 15:25:46 -0700</bug_when>
    <thetext>Attachment 70477 did not pass style-queue:

Failed to run &quot;[&apos;WebKitTools/Scripts/check-webkit-style&apos;]&quot; exit_code: 1
WebKit2/UIProcess/cf/WebBackForwardListCF.cpp:26:  Found header this file implements before WebCore config.h. Should be: config.h, primary header, blank line, and then alphabetically sorted.  [build/include_order] [4]
WebKit2/UIProcess/cf/WebPageProxyCF.cpp:26:  Found header this file implements before WebCore config.h. Should be: config.h, primary header, blank line, and then alphabetically sorted.  [build/include_order] [4]
Total errors found: 2 in 11 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>292708</commentid>
    <comment_count>17</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-10-11 15:26:24 -0700</bug_when>
    <thetext>Attachment 70478 did not pass style-queue:

Failed to run &quot;[&apos;WebKitTools/Scripts/check-webkit-style&apos;]&quot; exit_code: 1
WebKit2/UIProcess/cf/WebBackForwardListCF.cpp:26:  Found header this file implements before WebCore config.h. Should be: config.h, primary header, blank line, and then alphabetically sorted.  [build/include_order] [4]
WebKit2/UIProcess/cf/WebPageProxyCF.cpp:26:  Found header this file implements before WebCore config.h. Should be: config.h, primary header, blank line, and then alphabetically sorted.  [build/include_order] [4]
Total errors found: 2 in 11 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>292765</commentid>
    <comment_count>18</comment_count>
      <attachid>70478</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2010-10-11 17:00:25 -0700</bug_when>
    <thetext>Comment on attachment 70478
Patch v6 - The same, with debugging info, etc removed

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

&gt; WebKit2/UIProcess/WebPageProxy.h:168
&gt; +    typedef bool (*WebPageProxySessionStateFilterCallback)(WKPageRef, WKStringRef type, WKTypeRef object, void*);

Probably should name the context argument here.

&gt; WebKit2/UIProcess/API/C/WKPage.cpp:164
&gt; +    RefPtr&lt;WebData&gt; state = toImpl(pageRef)-&gt;sessionStateData(filter, context);
&gt;      return toAPI(state.release().releaseRef());

No obvious need for a local variable here. Might read better as a single long line.

&gt; WebKit2/UIProcess/API/C/WKPage.h:211
&gt; +typedef bool (*WKPageSessionStateFilterCallback)(WKPageRef page, WKStringRef valueType, WKTypeRef value, void* context);
&gt; +WK_EXPORT WKDataRef WKPageCopySessionState(WKPageRef page, void *context, WKPageSessionStateFilterCallback urlAllowedCallback);

Inconsistent void* vs. void * on these two lines.

&gt; WebKit2/UIProcess/cf/WebBackForwardListCF.cpp:46
&gt; +    const void* keys[2] = { SessionHistoryCurrentIndexKey(), SessionHistoryEntriesKey() };
&gt; +    const void* values[2] = { currentIndex.get(), entries.get() };
&gt; +
&gt; +    RetainPtr&lt;CFDictionaryRef&gt; dictionary(AdoptCF, CFDictionaryCreate(0, keys, values, 2, &amp;kCFTypeDictionaryKeyCallBacks, &amp;kCFTypeDictionaryValueCallBacks));

That constant 2 is repeated three times. Would be bad if these didn’t agree. No concrete idea for making it better.

&gt; WebKit2/UIProcess/cf/WebBackForwardListCF.cpp:59
&gt; +        const void* keys[2] = { SessionHistoryEntryURLKey(), SessionHistoryEntryTitleKey() };
&gt; +        const void* values[2] = { url.get(), title.get() };
&gt; +
&gt; +        RetainPtr&lt;CFDictionaryRef&gt; entryDictionary(AdoptCF, CFDictionaryCreate(0, keys, values, 2, &amp;kCFTypeDictionaryKeyCallBacks, &amp;kCFTypeDictionaryValueCallBacks));

Ditto.

&gt; WebKit2/UIProcess/cf/WebPageProxyCF.cpp:51
&gt; +    const void* keys[1] = { SessionHistoryKey() };
&gt; +    const void* values[1] = { sessionHistoryDictionary.get() };
&gt; +    
&gt; +    RetainPtr&lt;CFDictionaryRef&gt; stateDictionary(AdoptCF, CFDictionaryCreate(0, keys, values, 1, &amp;kCFTypeDictionaryKeyCallBacks, &amp;kCFTypeDictionaryValueCallBacks));

For a single entry you don’t really need to use an array.

&gt; WebKit2/UIProcess/cf/WebPageProxyCF.cpp:56
&gt; +    Vector&lt;unsigned char&gt; stateVector(length + 4);

All these explicit &quot;4&quot; constants are slightly annoying. Maybe sizeof(UInt32)?

&gt; WebKit2/UIProcess/cf/WebPageProxyCF.cpp:72
&gt; +    if (!webData || webData-&gt;size() &lt; 4)

Here’s another 4.

&gt; WebKit2/UIProcess/cf/WebPageProxyCF.cpp:83
&gt; +    RetainPtr&lt;CFDataRef&gt; data(AdoptCF, CFDataCreate(0, webData-&gt;bytes() + 4, webData-&gt;size() - 4));

And two more 4’s.

&gt; WebKit2/UIProcess/cf/WebPageProxyCF.cpp:87
&gt; +    if (propertyListError) {

Don’t you have to CFRelease this?

&gt; WebKit2/UIProcess/cf/WebPageProxyCF.cpp:98
&gt; +    if (CFGetTypeID(propertyList.get()) != CFDictionaryGetTypeID()) {
&gt; +        LOG(SessionState, &quot;SessionState property list is not a CFDictionaryRef (%i) - its CFTypeID is %i&quot;, (int)CFDictionaryGetTypeID(), (int)CFGetTypeID(propertyList.get()));
&gt; +        return;
&gt; +    }

I don’t think CFPropertyListCreateWithData can return a non-dictionary.

&gt; WebKit2/WebKit2.xcodeproj/project.pbxproj:653
&gt; -		BC111B0B112F5E4F00337BAB /* WebPageProxy.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = WebPageProxy.cpp; sourceTree = &quot;&lt;group&gt;&quot;; };
&gt; +		BC111B0B112F5E4F00337BAB /* WebPageProxy.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; fileEncoding = 4; path = WebPageProxy.cpp; sourceTree = &quot;&lt;group&gt;&quot;; };

Why this change?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>292807</commentid>
    <comment_count>19</comment_count>
    <who name="Brady Eidson">beidson</who>
    <bug_when>2010-10-11 18:14:22 -0700</bug_when>
    <thetext>Fixing the windows build right now.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>292826</commentid>
    <comment_count>20</comment_count>
      <attachid>70510</attachid>
    <who name="Brady Eidson">beidson</who>
    <bug_when>2010-10-11 19:03:27 -0700</bug_when>
    <thetext>Created attachment 70510
Windows build fix (would like a review)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>292839</commentid>
    <comment_count>21</comment_count>
    <who name="Brady Eidson">beidson</who>
    <bug_when>2010-10-11 19:40:05 -0700</bug_when>
    <thetext>I commited http://trac.webkit.org/changeset/69538 before Darin&apos;s comments came through.  I&apos;m going to follow up with a couple of his comments with his implicit review.  :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>292840</commentid>
    <comment_count>22</comment_count>
    <who name="Brady Eidson">beidson</who>
    <bug_when>2010-10-11 19:43:23 -0700</bug_when>
    <thetext>http://trac.webkit.org/changeset/69556 was a build fix for Windows.

http://trac.webkit.org/changeset/69559 addresses some of Darin&apos;s second review feedback.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>292841</commentid>
    <comment_count>23</comment_count>
    <who name="Brady Eidson">beidson</who>
    <bug_when>2010-10-11 19:44:27 -0700</bug_when>
    <thetext>Brian also checked in http://trac.webkit.org/changeset/69542 as a Windows build fix.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>292847</commentid>
    <comment_count>24</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-10-11 20:13:37 -0700</bug_when>
    <thetext>http://trac.webkit.org/changeset/69556 might have broken GTK Linux 64-bit Debug</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>292848</commentid>
    <comment_count>25</comment_count>
      <attachid>70510</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2010-10-11 20:26:28 -0700</bug_when>
    <thetext>Comment on attachment 70510
Windows build fix (would like a review)

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

&gt; WebKit2/UIProcess/cf/WebPageProxyCF.cpp:63
&gt; +    if (!CFPropertyListWriteToStream(stateDictionary.get(), writeStream.get(), kCFPropertyListBinaryFormat_v1_0, 0))
&gt; +        return 0;

I believe in this failure case you should call CFWriteStreamClose.

&gt; WebKit2/UIProcess/cf/WebPageProxyCF.cpp:65
&gt; +    RetainPtr&lt;CFDataRef&gt; stateCFData(AdoptCF, (CFDataRef)CFWriteStreamCopyProperty(writeStream.get(), kCFStreamPropertyDataWritten));

I believe that after doing this you should call CFWriteStreamClose.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>70096</attachid>
            <date>2010-10-07 09:31:36 -0700</date>
            <delta_ts>2010-10-07 09:47:03 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>patch.txt</filename>
            <type>text/plain</type>
            <size>33002</size>
            <attacher name="Brady Eidson">beidson</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYktpdDIvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdDIvQ2hhbmdlTG9n
CShyZXZpc2lvbiA2OTMxMikKKysrIFdlYktpdDIvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsNDcgQEAKKzIwMTAtMTAtMDcgIEJyYWR5IEVpZHNvbiAgPGJlaWRzb25AYXBwbGUu
Y29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIDxy
ZGFyOi8vcHJvYmxlbS84MjYyMjAyPiBhbmQgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTQ3MzU0CisgICAgICAgIE5lZWQgV0tQYWdlIEFQSSBmb3Igc2VyaWFsaXppbmcg
YW5kIHJlc3RvcmluZyBhIHBhZ2UncyBzdGF0ZQorCisgICAgICAgICogV2ViS2l0Mi5wcm86Cisg
ICAgICAgICogV2ViS2l0Mi54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAgICAqIHdp
bi9XZWJLaXQyLnZjcHJvajoKKworICAgICAgICAqIFdlYktpdDJQcmVmaXguaDogQWRkIERFRklO
RV9TVEFUSUNfR0VUVEVSIGNvbnZlbmllbmNlLgorCisgICAgICAgIEFkZCBjbGFzc2ljIFdlYkNv
cmUvV2ViS2l0IHN0eWxlIGxvZ2dpbmcgY2hhbm5lbHMsIHdpdGggYSBuZXcgU2Vzc2lvblN0YXRl
IGNoYW5uZWw6CisgICAgICAgICogUGxhdGZvcm0vTG9nZ2luZy5jcHA6IEFkZGVkLgorICAgICAg
ICAoaW5pdGlhbGl6ZUxvZ0NoYW5uZWxzSWZOZWNlc3NhcnkpOgorICAgICAgICAqIFBsYXRmb3Jt
L0xvZ2dpbmcuaDogQWRkZWQuCisKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL0MvV0tQYWdlLmNw
cDoKKyAgICAgICAgKFdLUGFnZUdldFNlc3Npb25IaXN0b3J5VVJMVmFsdWVUeXBlKToKKyAgICAg
ICAgKFdLUGFnZUNvcHlTZXNzaW9uU3RhdGUpOiBDaGFuZ2UgdG8gdXNlIGEgZmlsdGVyIGZ1bmN0
aW9uIHRvIGFsbG93IHRoZSBBUEkgY2xpZW50IHRvIGRlY2lkZSB3aGF0CisgICAgICAgICAgdHlw
ZXMgb2YgdGhpbmdzIGdldCBzZXJpYWxpemVkIGFzIHNlc3Npb24gc3RhdGUuICBGb3Igbm93IGl0
IG9ubHkgZmlsdGVycyBiYXNlZCBvbiBVUkwgaW4KKyAgICAgICAgICBzZXNzaW9uIGhpc3Rvcnkg
ZW50cmllcy4KKyAgICAgICAgKFdLUGFnZVJlc3RvcmVGcm9tU2Vzc2lvblN0YXRlKToKKyAgICAg
ICAgKiBVSVByb2Nlc3MvQVBJL0MvV0tQYWdlLmg6CisKKyAgICAgICAgKiBVSVByb2Nlc3MvV2Vi
UGFnZVByb3h5LmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZVByb3h5OjpzZXNzaW9uU3Rh
dGVEYXRhKTogTGVhdmUgc3R1YnMgZm9yIG5vbi1DRiBwbGF0Zm9ybSBidWlsZHMuCisgICAgICAg
IChXZWJLaXQ6OldlYlBhZ2VQcm94eTo6cmVzdG9yZUZyb21TZXNzaW9uU3RhdGVEYXRhKTogRGl0
dG8uCisgICAgICAgICogVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5oOgorCisgICAgICAgICogVUlQ
cm9jZXNzL2NmL1dlYkJhY2tGb3J3YXJkTGlzdENGLmNwcDogQWRkZWQuCisgICAgICAgIChXZWJL
aXQ6OldlYkJhY2tGb3J3YXJkTGlzdDo6Y3JlYXRlQ0ZEaWN0aW9uYXJ5UmVwcmVzZW50YXRpb24p
OiBTdG9yZSBiYWNrL2ZvcndhcmQgbGlzdCBpbmZvIENGIHByb3BlcnR5IGxpc3Qgc3R5bGUuCisg
ICAgICAgIChXZWJLaXQ6OldlYkJhY2tGb3J3YXJkTGlzdDo6cmVzdG9yZUZyb21DRkRpY3Rpb25h
cnlSZXByZXNlbnRhdGlvbik6IFJlc3RvcmUgZnJvbSB0aGF0IGRhdGEgLSBidXQgZm9yIG5vdyB3
ZSBkb24ndCAKKyAgICAgICAgICBhY3R1YWxseSBwdXQgdGhlIGJhY2svZm9yd2FyZCBsaXN0IGJh
Y2sgaW50byBwbGFjZSBhbmQgaW5zdGVhZCBvbmx5IHJlbWVtYmVyIHRoZSBjdXJyZW50IFVSTC4K
KyAgICAgICAgKiBVSVByb2Nlc3MvV2ViQmFja0ZvcndhcmRMaXN0Lmg6CisgICAgICAgIChXZWJL
aXQ6OldlYkJhY2tGb3J3YXJkTGlzdDo6cmVzdG9yZWRDdXJyZW50VVJMKToKKworICAgICAgICAq
IFVJUHJvY2Vzcy9jZi9XZWJQYWdlUHJveHlDRi5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViS2l0
OjpXZWJQYWdlUHJveHk6OnNlc3Npb25TdGF0ZURhdGEpOiBDcmVhdGUgdGhlIHNlc3Npb25zIHN0
YXRlIGRhdGUgQ0YgcHJvcGVydHkgbGlzdCBzdHlsZS4KKyAgICAgICAgKFdlYktpdDo6V2ViUGFn
ZVByb3h5OjpyZXN0b3JlRnJvbVNlc3Npb25TdGF0ZURhdGEpOiBSZXN0b3JlIGZyb20gdGhhdCBw
cm9wZXJ0eSBsaXN0IHN0eWxlIHNlc3Npb24gc3RhdGUgZGF0YS4KKworCisKIDIwMTAtMTAtMDcg
IEx1aXogQWdvc3RpbmkgIDxsdWl6LmFnb3N0aW5pQG9wZW5ib3NzYS5vcmc+CiAKICAgICAgICAg
UmV2aWV3ZWQgYnkgS2VubmV0aCBSb2hkZSBDaHJpc3RpYW5zZW4uCkluZGV4OiBXZWJLaXQyL1dl
YktpdDIucHJvCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdDIvV2ViS2l0Mi5wcm8JKHJldmlzaW9uIDY5
MzEyKQorKysgV2ViS2l0Mi9XZWJLaXQyLnBybwkod29ya2luZyBjb3B5KQpAQCAtMTU3LDYgKzE1
Nyw3IEBAIEhFQURFUlMgKz0gXAogICAgIFBsYXRmb3JtL0NvcmVJUEMvRGF0YVJlZmVyZW5jZS5o
IFwKICAgICBQbGF0Zm9ybS9Db3JlSVBDL0hhbmRsZU1lc3NhZ2UuaCBcCiAgICAgUGxhdGZvcm0v
Q29yZUlQQy9NZXNzYWdlSUQuaCBcCisgICAgUGxhdGZvcm0vTG9nZ2luZy5oIFwKICAgICBQbGF0
Zm9ybS9Nb2R1bGUuaCBcCiAgICAgUGxhdGZvcm0vUGxhdGZvcm1Qcm9jZXNzSWRlbnRpZmllci5o
IFwKICAgICBQbGF0Zm9ybS9SdW5Mb29wLmggXApAQCAtMjk5LDYgKzMwMCw3IEBAIFNPVVJDRVMg
Kz0gXAogICAgIFBsYXRmb3JtL0NvcmVJUEMvQ29ubmVjdGlvbi5jcHAgXAogICAgIFBsYXRmb3Jt
L0NvcmVJUEMvRGF0YVJlZmVyZW5jZS5jcHAgXAogICAgIFBsYXRmb3JtL0NvcmVJUEMvcXQvQ29u
bmVjdGlvblF0LmNwcCBcCisgICAgUGxhdGZvcm0vTG9nZ2luZy5jcHAgXAogICAgIFBsYXRmb3Jt
L01vZHVsZS5jcHAgXAogICAgIFBsYXRmb3JtL1J1bkxvb3AuY3BwIFwKICAgICBQbGF0Zm9ybS9X
b3JrUXVldWUuY3BwIFwKSW5kZXg6IFdlYktpdDIvV2ViS2l0MlByZWZpeC5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFdlYktpdDIvV2ViS2l0MlByZWZpeC5oCShyZXZpc2lvbiA2OTMxMikKKysrIFdlYktpdDIv
V2ViS2l0MlByZWZpeC5oCSh3b3JraW5nIGNvcHkpCkBAIC0yOSw2ICsyOSwyMiBAQAogI2luY2x1
ZGUgPHd0Zi9GYXN0TWFsbG9jLmg+CiAjZW5kaWYKIAorI2lmZGVmIF9fY3BsdXNwbHVzCisjZGVm
aW5lIEVYVEVSTl9DX0JFR0lOIGV4dGVybiAiQyIgeworI2RlZmluZSBFWFRFUk5fQ19FTkQgfQor
I2Vsc2UKKyNkZWZpbmUgRVhURVJOX0NfQkVHSU4KKyNkZWZpbmUgRVhURVJOX0NfRU5ECisjZW5k
aWYKKworLy8gRm9yIGRlZmluaW5nIGdldHRlcnMgdG8gYSBzdGF0aWMgdmFsdWUsIHdoZXJlIHRo
ZSBnZXR0ZXJzIGhhdmUgaW50ZXJuYWwgbGlua2FnZQorI2RlZmluZSBERUZJTkVfU1RBVElDX0dF
VFRFUih0eXBlLCBuYW1lLCBhcmd1bWVudHMpIFwKK3N0YXRpYyBjb25zdCB0eXBlJiBuYW1lKCkg
XAoreyBcCisgICAgREVGSU5FX1NUQVRJQ19MT0NBTCh0eXBlLCBuYW1lIyNWYWx1ZSwgYXJndW1l
bnRzKTsgXAorICAgIHJldHVybiBuYW1lIyNWYWx1ZTsgXAorfQorCiAjaWYgZGVmaW5lZChCVUlM
RElOR19RVF9fKQogCiAjZGVmaW5lIFdURl9VU0VfSlNDIDEKSW5kZXg6IFdlYktpdDIvUGxhdGZv
cm0vTG9nZ2luZy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0Mi9QbGF0Zm9ybS9Mb2dnaW5nLmNw
cAkocmV2aXNpb24gMCkKKysrIFdlYktpdDIvUGxhdGZvcm0vTG9nZ2luZy5jcHAJKHJldmlzaW9u
IDApCkBAIC0wLDAgKzEsNDIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisg
KiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAq
IEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBF
WEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiTG9nZ2luZy5oIgor
CisjaWYgIUxPR19ESVNBQkxFRAorCitXVEZMb2dDaGFubmVsIExvZ1Nlc3Npb25TdGF0ZSA9IHsg
MHgwMDAwMDAwMSwgIldlYktpdDJMb2dMZXZlbCIsIFdURkxvZ0NoYW5uZWxPbiB9OworCit2b2lk
IGluaXRpYWxpemVMb2dDaGFubmVsc0lmTmVjZXNzYXJ5KCkKK3sKKyAgICBzdGF0aWMgYm9vbCBo
YXZlSW5pdGlhbGl6ZWRMb2dDaGFubmVscyA9IGZhbHNlOworICAgIGlmIChoYXZlSW5pdGlhbGl6
ZWRMb2dDaGFubmVscykKKyAgICAgICAgcmV0dXJuOworICAgIGhhdmVJbml0aWFsaXplZExvZ0No
YW5uZWxzID0gdHJ1ZTsKKworICAgIGluaXRpYWxpemVMb2dDaGFubmVsKCZMb2dTZXNzaW9uU3Rh
dGUpOworfQorCisjZW5kaWYgLy8gTE9HX0RJU0FCTEVECkluZGV4OiBXZWJLaXQyL1BsYXRmb3Jt
L0xvZ2dpbmcuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQyL1BsYXRmb3JtL0xvZ2dpbmcuaAkocmV2
aXNpb24gMCkKKysrIFdlYktpdDIvUGxhdGZvcm0vTG9nZ2luZy5oCShyZXZpc2lvbiAwKQpAQCAt
MCwwICsxLDQ4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEwIEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1l
dDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5Z
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZ
LCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBMb2dnaW5nX2gKKyNkZWZpbmUgTG9n
Z2luZ19oCisKKyNpbmNsdWRlIDx3dGYvQXNzZXJ0aW9ucy5oPgorCisjaWYgIUxPR19ESVNBQkxF
RAorCisjaWZuZGVmIExPR19DSEFOTkVMX1BSRUZJWAorI2RlZmluZSBMT0dfQ0hBTk5FTF9QUkVG
SVggTG9nCisjZW5kaWYKKworRVhURVJOX0NfQkVHSU4KKworZXh0ZXJuIFdURkxvZ0NoYW5uZWwg
TG9nU2Vzc2lvblN0YXRlOworCit2b2lkIGluaXRpYWxpemVMb2dDaGFubmVsc0lmTmVjZXNzYXJ5
KHZvaWQpOwordm9pZCBpbml0aWFsaXplTG9nQ2hhbm5lbChXVEZMb2dDaGFubmVsKik7CisKK0VY
VEVSTl9DX0VORAorCisjZW5kaWYgLy8gTE9HX0RJU0FCTEVECisKKyNlbmRpZiAvLyBMb2dnaW5n
X2gKSW5kZXg6IFdlYktpdDIvVUlQcm9jZXNzL1dlYkJhY2tGb3J3YXJkTGlzdC5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFdlYktpdDIvVUlQcm9jZXNzL1dlYkJhY2tGb3J3YXJkTGlzdC5oCShyZXZpc2lvbiA2
OTMxMikKKysrIFdlYktpdDIvVUlQcm9jZXNzL1dlYkJhY2tGb3J3YXJkTGlzdC5oCSh3b3JraW5n
IGNvcHkpCkBAIC0yOSwxNCArMjksMTMgQEAKICNpbmNsdWRlICJBUElPYmplY3QuaCIKICNpbmNs
dWRlICJJbW11dGFibGVBcnJheS5oIgogI2luY2x1ZGUgIldlYkJhY2tGb3J3YXJkTGlzdEl0ZW0u
aCIKKyNpbmNsdWRlICJXZWJQYWdlUHJveHkuaCIKICNpbmNsdWRlIDx3dGYvUGFzc1JlZlB0ci5o
PgogI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KICNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CiAKIG5h
bWVzcGFjZSBXZWJLaXQgewogCi1jbGFzcyBXZWJQYWdlUHJveHk7Ci0KIHR5cGVkZWYgVmVjdG9y
PFJlZlB0cjxXZWJCYWNrRm9yd2FyZExpc3RJdGVtPiA+IEJhY2tGb3J3YXJkTGlzdEl0ZW1WZWN0
b3I7CiAKIC8qCkBAIC03Miw2ICs3MSwxMSBAQCBwdWJsaWM6CiAgICAgUGFzc1JlZlB0cjxJbW11
dGFibGVBcnJheT4gYmFja0xpc3RBc0ltbXV0YWJsZUFycmF5V2l0aExpbWl0KHVuc2lnbmVkIGxp
bWl0KTsKICAgICBQYXNzUmVmUHRyPEltbXV0YWJsZUFycmF5PiBmb3J3YXJkTGlzdEFzSW1tdXRh
YmxlQXJyYXlXaXRoTGltaXQodW5zaWduZWQgbGltaXQpOwogCisjaWYgUExBVEZPUk0oQ0YpCisg
ICAgQ0ZEaWN0aW9uYXJ5UmVmIGNyZWF0ZUNGRGljdGlvbmFyeVJlcHJlc2VudGF0aW9uKFdlYlBh
Z2VQcm94eTo6V2ViUGFnZVByb3h5U2Vzc2lvblN0YXRlRmlsdGVyQ2FsbGJhY2ssIHZvaWQqIGNv
bnRleHQpIGNvbnN0OworICAgIGJvb2wgcmVzdG9yZUZyb21DRkRpY3Rpb25hcnlSZXByZXNlbnRh
dGlvbihDRkRpY3Rpb25hcnlSZWYpOworI2VuZGlmCisKIHByaXZhdGU6CiAgICAgV2ViQmFja0Zv
cndhcmRMaXN0KFdlYlBhZ2VQcm94eSopOwogCkBAIC04Myw2ICs4NywxNCBAQCBwcml2YXRlOgog
ICAgIHVuc2lnbmVkIG1fY2FwYWNpdHk7CiAgICAgYm9vbCBtX2Nsb3NlZDsKICAgICBib29sIG1f
ZW5hYmxlZDsKKyAgICAKKy8vIEZJWE1FIC0gPHJkYXI6Ly9wcm9ibGVtLzgyNjE2MjQ+IGFuZCBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NDczNTUgLSAKKy8vICAgICAg
ICAgV2hlbiB3ZSBoYXZlIGEgc29sdXRpb24gZm9yIHJlc3RvcmluZyB0aGUgZnVsbCBiYWNrL2Zv
cndhcmQgbGlzdCAKKy8vICAgICAgICAgdGhlbiBjYXVzaW5nIGEgbG9hZCBvZiB0aGUgY3VycmVu
dCBpdGVtLCB3ZSB3aWxsIG5vIGxvbmdlciBuZWVkIHRoaXMuCitwdWJsaWM6CisgICAgY29uc3Qg
V1RGOjpTdHJpbmcmIHJlc3RvcmVkQ3VycmVudFVSTCgpIGNvbnN0IHsgcmV0dXJuIG1fcmVzdG9y
ZWRDdXJyZW50VVJMOyB9Citwcml2YXRlOgorICAgIFdURjo6U3RyaW5nIG1fcmVzdG9yZWRDdXJy
ZW50VVJMOwogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViS2l0CkluZGV4OiBXZWJLaXQyL1VJUHJv
Y2Vzcy9XZWJQYWdlUHJveHkuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdDIvVUlQcm9jZXNzL1dl
YlBhZ2VQcm94eS5jcHAJKHJldmlzaW9uIDY5MzEyKQorKysgV2ViS2l0Mi9VSVByb2Nlc3MvV2Vi
UGFnZVByb3h5LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDQ2LDE2ICs0NDYsMTggQEAgdm9pZCBX
ZWJQYWdlUHJveHk6OnRlcm1pbmF0ZVByb2Nlc3MoKQogICAgIHByb2Nlc3MoKS0+dGVybWluYXRl
KCk7CiB9CiAKLVBhc3NSZWZQdHI8V2ViRGF0YT4gV2ViUGFnZVByb3h5OjpzZXNzaW9uU3RhdGUo
KSBjb25zdAorI2lmICFQTEFURk9STShDRikKK1Bhc3NSZWZQdHI8V2ViRGF0YT4gV2ViUGFnZVBy
b3h5OjpzZXNzaW9uU3RhdGVEYXRhKFdlYlBhZ2VQcm94eVNlc3Npb25TdGF0ZUZpbHRlckNhbGxi
YWNrLCB2b2lkKiBjb250ZXh0KSBjb25zdAogewogICAgIC8vIEZJWE1FOiBSZXR1cm4gc2Vzc2lv
biBzdGF0ZSBkYXRhIGZvciBzYXZpbmcgUGFnZSBzdGF0ZS4KICAgICByZXR1cm4gMDsKIH0KIAot
dm9pZCBXZWJQYWdlUHJveHk6OnJlc3RvcmVGcm9tU2Vzc2lvblN0YXRlKFdlYkRhdGEqKQordm9p
ZCBXZWJQYWdlUHJveHk6OnJlc3RvcmVGcm9tU2Vzc2lvblN0YXRlRGF0YShXZWJEYXRhKikKIHsK
ICAgICAvLyBGSVhNRTogUmVzdG9yZSB0aGUgUGFnZSBmcm9tIHRoZSBwYXNzZWQgaW4gc2Vzc2lv
biBzdGF0ZSBkYXRhLgogfQorI2VuZGlmCiAKIHZvaWQgV2ViUGFnZVByb3h5OjpzZXRUZXh0Wm9v
bUZhY3Rvcihkb3VibGUgem9vbUZhY3RvcikKIHsKSW5kZXg6IFdlYktpdDIvVUlQcm9jZXNzL1dl
YlBhZ2VQcm94eS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdDIvVUlQcm9jZXNzL1dlYlBhZ2VQcm94
eS5oCShyZXZpc2lvbiA2OTMxMikKKysrIFdlYktpdDIvVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5o
CSh3b3JraW5nIGNvcHkpCkBAIC0xNTksOSArMTU5LDEwIEBAIHB1YmxpYzoKICAgICB2b2lkIHNl
dEN1c3RvbVVzZXJBZ2VudChjb25zdCBTdHJpbmcmKTsKIAogICAgIHZvaWQgdGVybWluYXRlUHJv
Y2VzcygpOwotICAgIAotICAgIFBhc3NSZWZQdHI8V2ViRGF0YT4gc2Vzc2lvblN0YXRlKCkgY29u
c3Q7Ci0gICAgdm9pZCByZXN0b3JlRnJvbVNlc3Npb25TdGF0ZShXZWJEYXRhKik7CisKKyAgICB0
eXBlZGVmIGJvb2wgKCpXZWJQYWdlUHJveHlTZXNzaW9uU3RhdGVGaWx0ZXJDYWxsYmFjaykoV0tQ
YWdlUmVmIHBhZ2UsIFdLU3RyaW5nUmVmIHR5cGUsIFdLVHlwZVJlZiBvYmplY3QsIHZvaWQqKTsK
KyAgICBQYXNzUmVmUHRyPFdlYkRhdGE+IHNlc3Npb25TdGF0ZURhdGEoV2ViUGFnZVByb3h5U2Vz
c2lvblN0YXRlRmlsdGVyQ2FsbGJhY2ssIHZvaWQqIGNvbnRleHQpIGNvbnN0OworICAgIHZvaWQg
cmVzdG9yZUZyb21TZXNzaW9uU3RhdGVEYXRhKFdlYkRhdGEqKTsKIAogICAgIGRvdWJsZSB0ZXh0
Wm9vbUZhY3RvcigpIGNvbnN0IHsgcmV0dXJuIG1fdGV4dFpvb21GYWN0b3I7IH0KICAgICB2b2lk
IHNldFRleHRab29tRmFjdG9yKGRvdWJsZSk7CkluZGV4OiBXZWJLaXQyL1VJUHJvY2Vzcy9BUEkv
Qy9XS1BhZ2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdDIvVUlQcm9jZXNzL0FQSS9DL1dLUGFn
ZS5jcHAJKHJldmlzaW9uIDY5MzEyKQorKysgV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0MvV0tQYWdl
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTUyLDE1ICsxNTIsMjEgQEAgdm9pZCBXS1BhZ2VUZXJt
aW5hdGUoV0tQYWdlUmVmIHBhZ2VSZWYpCiAgICAgdG9JbXBsKHBhZ2VSZWYpLT50ZXJtaW5hdGVQ
cm9jZXNzKCk7CiB9CiAKLVdLRGF0YVJlZiBXS1BhZ2VDb3B5U2Vzc2lvblN0YXRlKFdLUGFnZVJl
ZiBwYWdlUmVmKQorV0tTdHJpbmdSZWYgV0tQYWdlR2V0U2Vzc2lvbkhpc3RvcnlVUkxWYWx1ZVR5
cGUoKQogewotICAgIFJlZlB0cjxXZWJEYXRhPiBzdGF0ZSA9IHRvSW1wbChwYWdlUmVmKS0+c2Vz
c2lvblN0YXRlKCk7CisgICAgc3RhdGljIFJlZlB0cjxXZWJTdHJpbmc+IHNlc3Npb25IaXN0b3J5
VVJMVmFsdWVUeXBlID0gV2ViU3RyaW5nOjpjcmVhdGUoIlNlc3Npb25IaXN0b3J5VVJMIik7Cisg
ICAgcmV0dXJuIHRvQVBJKHNlc3Npb25IaXN0b3J5VVJMVmFsdWVUeXBlLmdldCgpKTsKK30KKwor
V0tEYXRhUmVmIFdLUGFnZUNvcHlTZXNzaW9uU3RhdGUoV0tQYWdlUmVmIHBhZ2VSZWYsIHZvaWQg
KmNvbnRleHQsIFdLUGFnZVNlc3Npb25TdGF0ZUZpbHRlckNhbGxiYWNrIGZpbHRlcikKK3sKKyAg
ICBSZWZQdHI8V2ViRGF0YT4gc3RhdGUgPSB0b0ltcGwocGFnZVJlZiktPnNlc3Npb25TdGF0ZURh
dGEoZmlsdGVyLCBjb250ZXh0KTsKICAgICByZXR1cm4gdG9BUEkoc3RhdGUucmVsZWFzZSgpLnJl
bGVhc2VSZWYoKSk7CiB9CiAKIHZvaWQgV0tQYWdlUmVzdG9yZUZyb21TZXNzaW9uU3RhdGUoV0tQ
YWdlUmVmIHBhZ2VSZWYsIFdLRGF0YVJlZiBzZXNzaW9uU3RhdGVEYXRhKQogewotICAgIHRvSW1w
bChwYWdlUmVmKS0+cmVzdG9yZUZyb21TZXNzaW9uU3RhdGUodG9JbXBsKHNlc3Npb25TdGF0ZURh
dGEpKTsKKyAgICB0b0ltcGwocGFnZVJlZiktPnJlc3RvcmVGcm9tU2Vzc2lvblN0YXRlRGF0YSh0
b0ltcGwoc2Vzc2lvblN0YXRlRGF0YSkpOwogfQogCiBkb3VibGUgV0tQYWdlR2V0VGV4dFpvb21G
YWN0b3IoV0tQYWdlUmVmIHBhZ2VSZWYpCkluZGV4OiBXZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQy9X
S1BhZ2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQy9XS1BhZ2UuaAko
cmV2aXNpb24gNjkzMTIpCisrKyBXZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQy9XS1BhZ2UuaAkod29y
a2luZyBjb3B5KQpAQCAtMTg4LDcgKzE4OCwxMCBAQCBXS19FWFBPUlQgdm9pZCBXS1BhZ2VTZXRD
dXN0b21Vc2VyQWdlbnQoCiAKIFdLX0VYUE9SVCB2b2lkIFdLUGFnZVRlcm1pbmF0ZShXS1BhZ2VS
ZWYgcGFnZSk7CiAKLVdLX0VYUE9SVCBXS0RhdGFSZWYgV0tQYWdlQ29weVNlc3Npb25TdGF0ZShX
S1BhZ2VSZWYgcGFnZSk7CitXS19FWFBPUlQgV0tTdHJpbmdSZWYgV0tQYWdlR2V0U2Vzc2lvbkhp
c3RvcnlVUkxWYWx1ZVR5cGUoKTsKKwordHlwZWRlZiBib29sICgqV0tQYWdlU2Vzc2lvblN0YXRl
RmlsdGVyQ2FsbGJhY2spKFdLUGFnZVJlZiBwYWdlLCBXS1N0cmluZ1JlZiB2YWx1ZVR5cGUsIFdL
VHlwZVJlZiB2YWx1ZSwgdm9pZCopOworV0tfRVhQT1JUIFdLRGF0YVJlZiBXS1BhZ2VDb3B5U2Vz
c2lvblN0YXRlKFdLUGFnZVJlZiBwYWdlLCB2b2lkICpjb250ZXh0LCBXS1BhZ2VTZXNzaW9uU3Rh
dGVGaWx0ZXJDYWxsYmFjayB1cmxBbGxvd2VkQ2FsbGJhY2spOwogV0tfRVhQT1JUIHZvaWQgV0tQ
YWdlUmVzdG9yZUZyb21TZXNzaW9uU3RhdGUoV0tQYWdlUmVmIHBhZ2UsIFdLRGF0YVJlZiBzZXNz
aW9uU3RhdGVEYXRhKTsKIAogV0tfRVhQT1JUIGRvdWJsZSBXS1BhZ2VHZXRUZXh0Wm9vbUZhY3Rv
cihXS1BhZ2VSZWYgcGFnZSk7CkluZGV4OiBXZWJLaXQyL1VJUHJvY2Vzcy9jZi9XZWJCYWNrRm9y
d2FyZExpc3RDRi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0Mi9VSVByb2Nlc3MvY2YvV2ViQmFj
a0ZvcndhcmRMaXN0Q0YuY3BwCShyZXZpc2lvbiAwKQorKysgV2ViS2l0Mi9VSVByb2Nlc3MvY2Yv
V2ViQmFja0ZvcndhcmRMaXN0Q0YuY3BwCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDExOSBAQAor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAxMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMu
IEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUg
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVN
RU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgorICovCisKKyNpbmNsdWRlICJXZWJCYWNrRm9yd2FyZExpc3QuaCIKKyNpbmNsdWRlICJM
b2dnaW5nLmgiCisKK3VzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOworCituYW1lc3BhY2UgV2ViS2l0
IHsKKworREVGSU5FX1NUQVRJQ19HRVRURVIoQ0ZTdHJpbmdSZWYsIFNlc3Npb25IaXN0b3J5Q3Vy
cmVudEluZGV4S2V5LCBDRlNUUigiU2Vzc2lvbkhpc3RvcnlDdXJyZW50SW5kZXgiKSk7CitERUZJ
TkVfU1RBVElDX0dFVFRFUihDRlN0cmluZ1JlZiwgU2Vzc2lvbkhpc3RvcnlFbnRyaWVzS2V5LCBD
RlNUUigiU2Vzc2lvbkhpc3RvcnlFbnRyaWVzIikpOworREVGSU5FX1NUQVRJQ19HRVRURVIoQ0ZT
dHJpbmdSZWYsIFNlc3Npb25IaXN0b3J5RW50cnlUaXRsZUtleSwgQ0ZTVFIoIlNlc3Npb25IaXN0
b3J5RW50cnlUaXRsZSIpKTsKK0RFRklORV9TVEFUSUNfR0VUVEVSKENGU3RyaW5nUmVmLCBTZXNz
aW9uSGlzdG9yeUVudHJ5VVJMS2V5LCBDRlNUUigiU2Vzc2lvbkhpc3RvcnlFbnRyeVVSTCIpKTsK
KworQ0ZEaWN0aW9uYXJ5UmVmIFdlYkJhY2tGb3J3YXJkTGlzdDo6Y3JlYXRlQ0ZEaWN0aW9uYXJ5
UmVwcmVzZW50YXRpb24oV2ViUGFnZVByb3h5OjpXZWJQYWdlUHJveHlTZXNzaW9uU3RhdGVGaWx0
ZXJDYWxsYmFjayBmaWx0ZXIsIHZvaWQqIGNvbnRleHQpIGNvbnN0Cit7CisgICAgUmV0YWluUHRy
PENGTXV0YWJsZURpY3Rpb25hcnlSZWY+IGRpY3Rpb25hcnkoQWRvcHRDRiwgQ0ZEaWN0aW9uYXJ5
Q3JlYXRlTXV0YWJsZSgwLCAyLCAma0NGVHlwZURpY3Rpb25hcnlLZXlDYWxsQmFja3MsICZrQ0ZU
eXBlRGljdGlvbmFyeVZhbHVlQ2FsbEJhY2tzKSk7CisgICAgCisgICAgUmV0YWluUHRyPENGTnVt
YmVyUmVmPiBjdXJyZW50SW5kZXgoQWRvcHRDRiwgQ0ZOdW1iZXJDcmVhdGUoMCwga0NGTnVtYmVy
U0ludDMyVHlwZSwgJm1fY3VycmVudCkpOworICAgIENGRGljdGlvbmFyeVNldFZhbHVlKGRpY3Rp
b25hcnkuZ2V0KCksIFNlc3Npb25IaXN0b3J5Q3VycmVudEluZGV4S2V5KCksIGN1cnJlbnRJbmRl
eC5nZXQoKSk7CisgICAgCisgICAgUmV0YWluUHRyPENGTXV0YWJsZUFycmF5UmVmPiBlbnRyaWVz
KEFkb3B0Q0YsIENGQXJyYXlDcmVhdGVNdXRhYmxlKDAsIG1fZW50cmllcy5zaXplKCksICZrQ0ZU
eXBlQXJyYXlDYWxsQmFja3MpKTsKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1fZW50cmll
cy5zaXplKCk7ICsraSkgeworICAgICAgICBSZWZQdHI8V2ViVVJMPiB3ZWJVUkwgPSBXZWJVUkw6
OmNyZWF0ZShtX2VudHJpZXNbaV0tPnVybCgpKTsKKyAgICAgICAgaWYgKCFmaWx0ZXIodG9BUEko
bV9wYWdlKSwgV0tQYWdlR2V0U2Vzc2lvbkhpc3RvcnlVUkxWYWx1ZVR5cGUoKSwgdG9VUkxSZWYo
bV9lbnRyaWVzW2ldLT5vcmlnaW5hbFVSTCgpLmltcGwoKSksIGNvbnRleHQpKQorICAgICAgICAg
ICAgY29udGludWU7CisKKyAgICAgICAgUmV0YWluUHRyPENGTXV0YWJsZURpY3Rpb25hcnlSZWY+
IGVudHJ5RGljdGlvbmFyeShBZG9wdENGLCBDRkRpY3Rpb25hcnlDcmVhdGVNdXRhYmxlKDAsIDIs
ICZrQ0ZUeXBlRGljdGlvbmFyeUtleUNhbGxCYWNrcywgJmtDRlR5cGVEaWN0aW9uYXJ5VmFsdWVD
YWxsQmFja3MpKTsKKyAgICAgICAgCisgICAgICAgIFJldGFpblB0cjxDRlN0cmluZ1JlZj4gdXJs
KEFkb3B0Q0YsIG1fZW50cmllc1tpXS0+dXJsKCkuY3JlYXRlQ0ZTdHJpbmcoKSk7CisgICAgICAg
IENGRGljdGlvbmFyeVNldFZhbHVlKGVudHJ5RGljdGlvbmFyeS5nZXQoKSwgU2Vzc2lvbkhpc3Rv
cnlFbnRyeVVSTEtleSgpLCB1cmwuZ2V0KCkpOworCisgICAgICAgIFJldGFpblB0cjxDRlN0cmlu
Z1JlZj4gdGl0bGUoQWRvcHRDRiwgbV9lbnRyaWVzW2ldLT50aXRsZSgpLmNyZWF0ZUNGU3RyaW5n
KCkpOworICAgICAgICBDRkRpY3Rpb25hcnlTZXRWYWx1ZShlbnRyeURpY3Rpb25hcnkuZ2V0KCks
IFNlc3Npb25IaXN0b3J5RW50cnlUaXRsZUtleSgpLCB0aXRsZS5nZXQoKSk7CisgICAgCisgICAg
ICAgIENGQXJyYXlBcHBlbmRWYWx1ZShlbnRyaWVzLmdldCgpLCBlbnRyeURpY3Rpb25hcnkuZ2V0
KCkpOworICAgIH0KKyAgICAKKyAgICBDRkRpY3Rpb25hcnlTZXRWYWx1ZShkaWN0aW9uYXJ5Lmdl
dCgpLCBTZXNzaW9uSGlzdG9yeUVudHJpZXNLZXkoKSwgZW50cmllcy5nZXQoKSk7CisKKyAgICBy
ZXR1cm4gZGljdGlvbmFyeS5yZWxlYXNlUmVmKCk7Cit9CisKK2Jvb2wgV2ViQmFja0ZvcndhcmRM
aXN0OjpyZXN0b3JlRnJvbUNGRGljdGlvbmFyeVJlcHJlc2VudGF0aW9uKENGRGljdGlvbmFyeVJl
ZiBkaWN0aW9uYXJ5KQoreworICAgIENGTnVtYmVyUmVmIGNmSW5kZXggPSAoQ0ZOdW1iZXJSZWYp
Q0ZEaWN0aW9uYXJ5R2V0VmFsdWUoZGljdGlvbmFyeSwgU2Vzc2lvbkhpc3RvcnlDdXJyZW50SW5k
ZXhLZXkoKSk7CisgICAgaWYgKCFjZkluZGV4IHx8IENGR2V0VHlwZUlEKGNmSW5kZXgpICE9IENG
TnVtYmVyR2V0VHlwZUlEKCkgfHwgQ0ZOdW1iZXJJc0Zsb2F0VHlwZShjZkluZGV4KSkgeworICAg
ICAgICBMT0coU2Vzc2lvblN0YXRlLCAiV2ViQmFja0ZvcndhcmRMaXN0IGRpY3Rpb25hcnkgcmVw
cmVzZW50YXRpb24gZG9lcyBub3QgaGF2ZSBhIHZhbGlkIGN1cnJlbnQgaW5kZXgiKTsKKyAgICAg
ICAgcmV0dXJuIGZhbHNlOworICAgIH0KKyAgICAKKyAgICBpbnQzMl90IGN1cnJlbnRJbmRleDsK
KyAgICBpZiAoIUNGTnVtYmVyR2V0VmFsdWUoY2ZJbmRleCwga0NGTnVtYmVyU0ludDMyVHlwZSwg
JmN1cnJlbnRJbmRleCkpIHsKKyAgICAgICAgTE9HKFNlc3Npb25TdGF0ZSwgIldlYkJhY2tGb3J3
YXJkTGlzdCBkaWN0aW9uYXJ5IHJlcHJlc2VudGF0aW9uIGRvZXMgbm90IGhhdmUgYSB2YWxpZCBp
bnRlZ2VyIGN1cnJlbnQgaW5kZXgiKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKyAg
ICAKKyAgICBDRkFycmF5UmVmIGNmRW50cmllcyA9IChDRkFycmF5UmVmKUNGRGljdGlvbmFyeUdl
dFZhbHVlKGRpY3Rpb25hcnksIFNlc3Npb25IaXN0b3J5RW50cmllc0tleSgpKTsKKyAgICBpZiAo
IWNmRW50cmllcyB8fCBDRkdldFR5cGVJRChjZkVudHJpZXMpICE9IENGQXJyYXlHZXRUeXBlSUQo
KSkgeworICAgICAgICBMT0coU2Vzc2lvblN0YXRlLCAiV2ViQmFja0ZvcndhcmRMaXN0IGRpY3Rp
b25hcnkgcmVwcmVzZW50YXRpb24gZG9lcyBub3QgaGF2ZSBhIHZhbGlkIGxpc3Qgb2YgZW50cmll
cyIpOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorICAgIAorICAgIENGSW5kZXggc2l6
ZSA9IENGQXJyYXlHZXRDb3VudChjZkVudHJpZXMpOworICAgIGZvciAoQ0ZJbmRleCBpID0gMDsg
aSA8IHNpemU7ICsraSkgeworICAgICAgICBDRkRpY3Rpb25hcnlSZWYgZW50cnlEaWN0aW9uYXJ5
ID0gKENGRGljdGlvbmFyeVJlZilDRkFycmF5R2V0VmFsdWVBdEluZGV4KGNmRW50cmllcywgaSk7
CisgICAgICAgIGlmICghZW50cnlEaWN0aW9uYXJ5IHx8IENGR2V0VHlwZUlEKGVudHJ5RGljdGlv
bmFyeSkgIT0gQ0ZEaWN0aW9uYXJ5R2V0VHlwZUlEKCkpIHsKKyAgICAgICAgICAgIExPRyhTZXNz
aW9uU3RhdGUsICJXZWJCYWNrRm9yd2FyZExpc3QgZW50cnkgYXJyYXkgZG9lcyBub3QgaGF2ZSBh
IHZhbGlkIGVudHJ5IGF0IGluZGV4ICVpIiwgKGludClpKTsKKyAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgQ0ZTdHJpbmdSZWYgZW50cnlVUkwg
PSAoQ0ZTdHJpbmdSZWYpQ0ZEaWN0aW9uYXJ5R2V0VmFsdWUoZW50cnlEaWN0aW9uYXJ5LCBTZXNz
aW9uSGlzdG9yeUVudHJ5VVJMS2V5KCkpOworICAgICAgICBpZiAoIWVudHJ5VVJMIHx8IENGR2V0
VHlwZUlEKGVudHJ5VVJMKSAhPSBDRlN0cmluZ0dldFR5cGVJRCgpKSB7CisgICAgICAgICAgICBM
T0coU2Vzc2lvblN0YXRlLCAiV2ViQmFja0ZvcndhcmRMaXN0IGVudHJ5IGF0IGluZGV4ICVpIGRv
ZXMgbm90IGhhdmUgYSB2YWxpZCBVUkwiLCAoaW50KWkpOworICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOworICAgICAgICB9CisKKyAgICAgICAgQ0ZTdHJpbmdSZWYgZW50cnlUaXRsZSA9IChDRlN0
cmluZ1JlZilDRkRpY3Rpb25hcnlHZXRWYWx1ZShlbnRyeURpY3Rpb25hcnksIFNlc3Npb25IaXN0
b3J5RW50cnlUaXRsZUtleSgpKTsKKyAgICAgICAgaWYgKCFlbnRyeVRpdGxlIHx8IENGR2V0VHlw
ZUlEKGVudHJ5VGl0bGUpICE9IENGU3RyaW5nR2V0VHlwZUlEKCkpIHsKKyAgICAgICAgICAgIExP
RyhTZXNzaW9uU3RhdGUsICJXZWJCYWNrRm9yd2FyZExpc3QgZW50cnkgYXQgaW5kZXggJWkgZG9l
cyBub3QgaGF2ZSBhIHZhbGlkIHRpdGxlIiwgKGludClpKTsKKyAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgLy8gRklYTUUgPHJkYXI6Ly9wcm9i
bGVtLzgyNjE2MjQ+IGFuZCBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
NDczNTUgLSAKKyAgICAgICAgLy8gICAgICAgICAgVGhlIGRhdGEgZm9yIHRoZSBhYm92ZSBlbnRy
eSBuZWVkcyB0byBiZSBhZGRlZCB0byB0aGUgZnVsbCBiYWNrL2ZvcndhcmQgbGlzdC4KKyAgICAg
ICAgLy8gICAgICAgICAgV2hlbiB3ZSBoYXZlIGEgc29sdXRpb24gdGhhdCByZXN0b3JlcyB0aGUg
ZnVsbCBiYWNrL2ZvcndhcmRsaXN0IHRoZW4gY2F1c2VzIGEgbG9hZCBvZiB0aGUgY3VycmVudCBp
dGVtLAorICAgICAgICAvLyAgICAgICAgICB3ZSB3aWxsIG5vIGxvbmdlciBuZWVkIHRoaXMuCisg
ICAgICAgIGlmIChpID09IGN1cnJlbnRJbmRleCkgeworICAgICAgICAgICAgbV9yZXN0b3JlZEN1
cnJlbnRVUkwgPSBlbnRyeVVSTDsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAg
fQorICAgIHJldHVybiB0cnVlOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKSW5kZXg6IFdl
YktpdDIvVUlQcm9jZXNzL2NmL1dlYlBhZ2VQcm94eUNGLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJL
aXQyL1VJUHJvY2Vzcy9jZi9XZWJQYWdlUHJveHlDRi5jcHAJKHJldmlzaW9uIDApCisrKyBXZWJL
aXQyL1VJUHJvY2Vzcy9jZi9XZWJQYWdlUHJveHlDRi5jcHAJKHJldmlzaW9uIDApCkBAIC0wLDAg
KzEsOTcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0Ogor
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
CisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9S
CisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgor
ICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiV2ViUGFnZVByb3h5LmgiCisKKyNpbmNs
dWRlICJMb2dnaW5nLmgiCisjaW5jbHVkZSAiV2ViQmFja0ZvcndhcmRMaXN0LmgiCisjaW5jbHVk
ZSAiV2ViRGF0YS5oIgorCit1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKKworbmFtZXNwYWNlIFdl
YktpdCB7CisKK0RFRklORV9TVEFUSUNfR0VUVEVSKENGU3RyaW5nUmVmLCBTZXNzaW9uSGlzdG9y
eUtleSwgQ0ZTVFIoIlNlc3Npb25IaXN0b3J5IikpOworCitQYXNzUmVmUHRyPFdlYkRhdGE+IFdl
YlBhZ2VQcm94eTo6c2Vzc2lvblN0YXRlRGF0YShXZWJQYWdlUHJveHlTZXNzaW9uU3RhdGVGaWx0
ZXJDYWxsYmFjayBmaWx0ZXIsIHZvaWQqIGNvbnRleHQpIGNvbnN0Cit7CisgICAgUmV0YWluUHRy
PENGRGljdGlvbmFyeVJlZj4gc2Vzc2lvbkhpc3RvcnlEaWN0aW9uYXJ5KEFkb3B0Q0YsIG1fYmFj
a0ZvcndhcmRMaXN0LT5jcmVhdGVDRkRpY3Rpb25hcnlSZXByZXNlbnRhdGlvbihmaWx0ZXIsIGNv
bnRleHQpKTsKKyAgICAKKyAgICAvLyBGb3Igbm93IHdlJ3JlIG9ubHkgc2VyaWFsaXppbmcgdGhl
IGJhY2svZm9yd2FyZCBsaXN0LiAgSWYgdGhhdCBvYmplY3QgaXMgbnVsbCwgdGhlbiB0aGUgZW50
aXJlIHNlc3Npb25TdGF0ZSBjYW4gYmUgbnVsbC4KKyAgICBpZiAoIXNlc3Npb25IaXN0b3J5RGlj
dGlvbmFyeSkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICBSZXRhaW5QdHI8Q0ZNdXRhYmxlRGlj
dGlvbmFyeVJlZj4gc3RhdGVEaWN0aW9uYXJ5KEFkb3B0Q0YsIENGRGljdGlvbmFyeUNyZWF0ZU11
dGFibGUoMCwgMSwgJmtDRlR5cGVEaWN0aW9uYXJ5S2V5Q2FsbEJhY2tzLCAma0NGVHlwZURpY3Rp
b25hcnlWYWx1ZUNhbGxCYWNrcykpOworICAgIENGRGljdGlvbmFyeVNldFZhbHVlKHN0YXRlRGlj
dGlvbmFyeS5nZXQoKSwgU2Vzc2lvbkhpc3RvcnlLZXkoKSwgc2Vzc2lvbkhpc3RvcnlEaWN0aW9u
YXJ5LmdldCgpKTsKKyAgICAKKyAgICBSZXRhaW5QdHI8Q0ZEYXRhUmVmPiBzdGF0ZUNGRGF0YShB
ZG9wdENGLCBDRlByb3BlcnR5TGlzdENyZWF0ZURhdGEoMCwgc3RhdGVEaWN0aW9uYXJ5LmdldCgp
LCBrQ0ZQcm9wZXJ0eUxpc3RCaW5hcnlGb3JtYXRfdjFfMCwgMCwgMCkpOworCisgICAgQ0ZJbmRl
eCBsZW5ndGggPSBDRkRhdGFHZXRMZW5ndGgoc3RhdGVDRkRhdGEuZ2V0KCkpOworICAgIFZlY3Rv
cjx1bnNpZ25lZCBjaGFyPiBzdGF0ZVZlY3RvcihsZW5ndGgpOworICAgIENGRGF0YUdldEJ5dGVz
KHN0YXRlQ0ZEYXRhLmdldCgpLCBDRlJhbmdlTWFrZSgwLCBsZW5ndGgpLCBzdGF0ZVZlY3Rvci5k
YXRhKCkpOworICAgIFJlZlB0cjxXZWJEYXRhPiBzdGF0ZVdlYkRhdGEgPSBXZWJEYXRhOjpjcmVh
dGUoc3RhdGVWZWN0b3IpOworICAgIHJldHVybiBzdGF0ZVdlYkRhdGEucmVsZWFzZSgpOworfQor
Cit2b2lkIFdlYlBhZ2VQcm94eTo6cmVzdG9yZUZyb21TZXNzaW9uU3RhdGVEYXRhKFdlYkRhdGEq
IHdlYkRhdGEpCit7CisgICAgaWYgKCF3ZWJEYXRhKQorICAgICAgICByZXR1cm47CisgICAgCisg
ICAgUmV0YWluUHRyPENGRGF0YVJlZj4gZGF0YShBZG9wdENGLCBDRkRhdGFDcmVhdGUoTlVMTCwg
d2ViRGF0YS0+Ynl0ZXMoKSwgd2ViRGF0YS0+c2l6ZSgpKSk7CisKKyAgICBDRkVycm9yUmVmIHBy
b3BlcnR5TGlzdEVycm9yID0gTlVMTDsKKyAgICBSZXRhaW5QdHI8Q0ZQcm9wZXJ0eUxpc3RSZWY+
IHByb3BlcnR5TGlzdChBZG9wdENGLCBDRlByb3BlcnR5TGlzdENyZWF0ZVdpdGhEYXRhKDAsIGRh
dGEuZ2V0KCksIGtDRlByb3BlcnR5TGlzdEltbXV0YWJsZSwgMCwgJnByb3BlcnR5TGlzdEVycm9y
KSk7CisgICAgaWYgKHByb3BlcnR5TGlzdEVycm9yICE9IE5VTEwpIHsKKyAgICAgICAgTE9HKFNl
c3Npb25TdGF0ZSwgIkNvdWxkIG5vdCByZWFkIHNlc3Npb24gc3RhdGUgcHJvcGVydHkgbGlzdCIp
OworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgaWYgKCFwcm9wZXJ0eUxpc3QpCisgICAg
ICAgIHJldHVybjsKKyAgICAgICAgCisgICAgaWYgKENGR2V0VHlwZUlEKHByb3BlcnR5TGlzdC5n
ZXQoKSkgIT0gQ0ZEaWN0aW9uYXJ5R2V0VHlwZUlEKCkpIHsKKyAgICAgICAgTE9HKFNlc3Npb25T
dGF0ZSwgIlNlc3Npb25TdGF0ZSBwcm9wZXJ0eSBsaXN0IGlzIG5vdCBhIENGRGljdGlvbmFyeVJl
ZiAoJWkpIC0gaXRzIENGVHlwZUlEIGlzICVpIiwgKGludClDRkRpY3Rpb25hcnlHZXRUeXBlSUQo
KSwgKGludClDRkdldFR5cGVJRChwcm9wZXJ0eUxpc3QuZ2V0KCkpKTsKKyAgICAgICAgcmV0dXJu
OworICAgIH0KKyAgICAKKyAgICBDRlR5cGVSZWYgc2Vzc2lvbkhpc3RvcnlSZWYgPSBDRkRpY3Rp
b25hcnlHZXRWYWx1ZShzdGF0aWNfY2FzdDxDRkRpY3Rpb25hcnlSZWY+KHByb3BlcnR5TGlzdC5n
ZXQoKSksIFNlc3Npb25IaXN0b3J5S2V5KCkpOworICAgIGlmICghc2Vzc2lvbkhpc3RvcnlSZWYg
fHwgQ0ZHZXRUeXBlSUQoc2Vzc2lvbkhpc3RvcnlSZWYpICE9IENGRGljdGlvbmFyeUdldFR5cGVJ
RCgpKSB7CisgICAgICAgIExPRyhTZXNzaW9uU3RhdGUsICJTZXNzaW9uU3RhdGUgZGljdGlvbmFy
eSBkb2VzIG5vdCBjb250YWluIGEgU2Vzc2lvbkhpc3RvcnlEaWN0aW9uYXJ5IGtleSwgaXQgaXMg
b2YgdGhlIHdyb25nIHR5cGUiKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICAKKyAgICBD
RkRpY3Rpb25hcnlSZWYgc2Vzc2lvbkhpc3RvcnlEaWN0aW9uYXJ5ID0gc3RhdGljX2Nhc3Q8Q0ZE
aWN0aW9uYXJ5UmVmPihzZXNzaW9uSGlzdG9yeVJlZik7CisgICAgaWYgKCFtX2JhY2tGb3J3YXJk
TGlzdC0+cmVzdG9yZUZyb21DRkRpY3Rpb25hcnlSZXByZXNlbnRhdGlvbihzZXNzaW9uSGlzdG9y
eURpY3Rpb25hcnkpKSB7CisgICAgICAgIExPRyhTZXNzaW9uU3RhdGUsICJGYWlsZWQgdG8gcmVz
dG9yZSBiYWNrL2ZvcndhcmQgbGlzdCBmcm9tIFNlc3Npb25IaXN0b3J5RGljdGlvbmFyeSIpOwor
ICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgLy8gRklYTUU6IFdoZW4gd2UgaGF2ZSBhIHNv
bHV0aW9uIGZvciByZXN0b3JpbmcgdGhlIGZ1bGwgYmFjay9mb3J3YXJkIGxpc3QgdGhlbiBjYXVz
aW5nIGEgbG9hZCBvZiB0aGUgY3VycmVudCBpdGVtLAorICAgIC8vICAgICAgICB3ZSB3aWxsIHRy
aWdnZXIgdGhhdCBsb2FkIGhlcmUuICBVbnRpbCB0aGVuLCB3ZSB1c2UgdGhlICJyZXN0b3JlZCBj
dXJyZW50IFVSTCIgd2hpY2ggY2FuIGxhdGVyIGJlIHJlbW92ZWQuCisgICAgbG9hZFVSTChtX2Jh
Y2tGb3J3YXJkTGlzdC0+cmVzdG9yZWRDdXJyZW50VVJMKCkpOworfQorCit9IC8vIG5hbWVzcGFj
ZSBXZWJLaXQKSW5kZXg6IFdlYktpdDIvV2ViS2l0Mi54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9q
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFdlYktpdDIvV2ViS2l0Mi54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9q
CShyZXZpc2lvbiA2OTMxMikKKysrIFdlYktpdDIvV2ViS2l0Mi54Y29kZXByb2ovcHJvamVjdC5w
Ynhwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC0xMzgsNiArMTM4LDEwIEBACiAJCTFBRUZEMkY3MTFE
MTgwN0IwMDgyMTlEMyAvKiBBcmd1bWVudENvZGVycy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMUFFRkQyRjYxMUQxODA3QjAwODIxOUQzIC8qIEFyZ3Vt
ZW50Q29kZXJzLmggKi87IH07CiAJCTUxNTc4QjgzMTIwOUVDRUYwMEEzN0M0QSAvKiBXZWJEYXRh
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MTU3OEI4
MjEyMDlFQ0VGMDBBMzdDNEEgLyogV2ViRGF0YS5oICovOyB9OwogCQk1MTZBNEE1RDEyMEEyQ0NE
MDBDMDVCN0YgLyogV2ViRXJyb3IuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDUxNkE0QTVCMTIwQTJDQ0QwMEMwNUI3RiAvKiBXZWJFcnJvci5oICovOyB9
OworCQk1MUE3RjJGMzEyNUJGODIwMDA4QUVCMUQgLyogTG9nZ2luZy5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTFBN0YyRjIxMjVCRjgyMDAwOEFFQjFE
IC8qIExvZ2dpbmcuaCAqLzsgfTsKKwkJNTFBN0YyRjUxMjVCRjhENDAwOEFFQjFEIC8qIExvZ2dp
bmcuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTFB
N0YyRjQxMjVCRjhENDAwOEFFQjFEIC8qIExvZ2dpbmcuY3BwICovOyB9OworCQk1MUIzMDA1MDEy
NTI5RDBFMDAwQjVDQTAgLyogV2ViQmFja0ZvcndhcmRMaXN0Q0YuY3BwIGluIFNvdXJjZXMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTFCMzAwNEUxMjUyOUQwRTAwMEI1Q0Ew
IC8qIFdlYkJhY2tGb3J3YXJkTGlzdENGLmNwcCAqLzsgfTsKKwkJNTFCMzAwNTExMjUyOUQwRTAw
MEI1Q0EwIC8qIFdlYlBhZ2VQcm94eUNGLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDUxQjMwMDRGMTI1MjlEMEUwMDBCNUNBMCAvKiBXZWJQYWdlUHJv
eHlDRi5jcHAgKi87IH07CiAJCTZEOEE5MUE2MTFGMEVGRDEwMEREMDFGRSAvKiBjb20uYXBwbGUu
V2ViUHJvY2Vzcy5zYiBpbiBSZXNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gNkQ4QTkxQTUxMUYwRUZEMTAwREQwMUZFIC8qIGNvbS5hcHBsZS5XZWJQcm9jZXNzLnNi
ICovOyB9OwogCQk3NjJCNzQ4RDEyMEJDNzVDMDA4MTkzMzkgLyogV0tQcmVmZXJlbmNlc1ByaXZh
dGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDc2MkI3
NDg0MTIwQkJBMkQwMDgxOTMzOSAvKiBXS1ByZWZlcmVuY2VzUHJpdmF0ZS5oICovOyBzZXR0aW5n
cyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTc2MkI3NEFGMTIwQkM5NEYw
MDgxOTMzOSAvKiBXS1ByZWZlcmVuY2VzUHJpdmF0ZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3NjJCNzQ5RDEyMEJDOEVBMDA4MTkzMzkgLyogV0tQ
cmVmZXJlbmNlc1ByaXZhdGUuY3BwICovOyB9OwpAQCAtNTg2LDYgKzU5MCwxMCBAQAogCQkzMkRC
Q0Y1RTAzNzBBREVFMDBDOTE3ODMgLyogV2ViS2l0MlByZWZpeC5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBXZWJLaXQyUHJlZml4Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCTUxNTc4QjgyMTIwOUVDRUYwMEEzN0M0QSAvKiBXZWJEYXRhLmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdlYkRhdGEuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJNTE2QTRBNUIxMjBBMkNDRDAwQzA1QjdGIC8qIFdlYkVycm9yLmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdlYkVycm9yLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CisJCTUxQTdGMkYyMTI1QkY4MjAwMDhBRUIxRCAvKiBMb2dnaW5nLmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgcGF0aCA9IExvZ2dpbmcuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKKwkJNTFBN0YyRjQxMjVCRjhENDAwOEFFQjFEIC8qIExvZ2dpbmcuY3BwICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gTG9nZ2luZy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CisJCTUxQjMwMDRFMTI1MjlEMEUwMDBCNUNBMCAvKiBXZWJCYWNrRm9yd2FyZExp
c3RDRi5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBXZWJCYWNrRm9y
d2FyZExpc3RDRi5jcHA7IHBhdGggPSBjZi9XZWJCYWNrRm9yd2FyZExpc3RDRi5jcHA7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTUxQjMwMDRGMTI1MjlEMEUwMDBCNUNBMCAvKiBXZWJQ
YWdlUHJveHlDRi5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBXZWJQ
YWdlUHJveHlDRi5jcHA7IHBhdGggPSBjZi9XZWJQYWdlUHJveHlDRi5jcHA7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCTVEQUQ3Mjk0MTE2RkY3MEIwMEVFNTM5NiAvKiBXZWJQcm9jZXNz
LnhjY29uZmlnICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dC54Y2NvbmZpZzsgcGF0aCA9IFdlYlByb2Nlc3MueGNj
b25maWc7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTVEQUQ3M0YxMTE2RkY5MEMwMEVF
NTM5NiAvKiBCYXNlVGFyZ2V0LnhjY29uZmlnICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dC54Y2NvbmZpZzsgcGF0
aCA9IEJhc2VUYXJnZXQueGNjb25maWc7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTZE
OEE5MUE1MTFGMEVGRDEwMEREMDFGRSAvKiBjb20uYXBwbGUuV2ViUHJvY2Vzcy5zYiAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHRleHQ7IG5hbWUgPSBjb20uYXBwbGUuV2ViUHJvY2Vzcy5zYjsgcGF0aCA9IFdlYlByb2Nl
c3MvY29tLmFwcGxlLldlYlByb2Nlc3Muc2I7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBA
IC02MzMsNyArNjQxLDcgQEAKIAkJQkMxMTFBRTMxMTJGNUMyNjAwMzM3QkFCIC8qIFdlYlByb2Nl
c3MuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gV2ViUHJvY2Vzcy5j
cHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUJDMTExQjA4MTEyRjVFM0MwMDMzN0JB
QiAvKiBSZXNwb25zaXZlbmVzc1RpbWVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNw
cDsgcGF0aCA9IFJlc3BvbnNpdmVuZXNzVGltZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQlCQzExMUIwQTExMkY1RTRGMDAzMzdCQUIgLyogV2ViRnJhbWVQcm94eS5jcHAgKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBXZWJGcmFtZVByb3h5LmNwcDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJQkMxMTFCMEIxMTJGNUU0RjAwMzM3QkFCIC8qIFdl
YlBhZ2VQcm94eS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBXZWJQ
YWdlUHJveHkuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlCQzExMUIwQjExMkY1
RTRGMDAzMzdCQUIgLyogV2ViUGFnZVByb3h5LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBleHBsaWNpdEZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBmaWxlRW5jb2Rpbmcg
PSA0OyBwYXRoID0gV2ViUGFnZVByb3h5LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJQkMxMTFCMEMxMTJGNUU0RjAwMzM3QkFCIC8qIFdlYlByb2Nlc3NNYW5hZ2VyLmNwcCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFdlYlByb2Nlc3NNYW5hZ2VyLmNwcDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQkMxMTFCMEQxMTJGNUU0RjAwMzM3QkFCIC8q
IFdlYlByb2Nlc3NQcm94eS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGgg
PSBXZWJQcm9jZXNzUHJveHkuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlCQzEx
MUIxQjExMkY1RkU2MDAzMzdCQUIgLyogUHJvY2Vzc0xhdW5jaGVyTWFjLm1tICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0gUHJvY2Vzc0xhdW5jaGVyTWFjLm1tOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMTIxMCw2ICsxMjE4LDE1IEBACiAJCQluYW1lID0g
Ik90aGVyIFNvdXJjZXMiOwogCQkJc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsKIAkJfTsKKwkJNTFC
MzAwNEQxMjUyOUNGNTAwMEI1Q0EwIC8qIGNmICovID0geworCQkJaXNhID0gUEJYR3JvdXA7CisJ
CQljaGlsZHJlbiA9ICgKKwkJCQk1MUIzMDA0RTEyNTI5RDBFMDAwQjVDQTAgLyogV2ViQmFja0Zv
cndhcmRMaXN0Q0YuY3BwICovLAorCQkJCTUxQjMwMDRGMTI1MjlEMEUwMDBCNUNBMCAvKiBXZWJQ
YWdlUHJveHlDRi5jcHAgKi8sCisJCQkpOworCQkJbmFtZSA9IGNmOworCQkJc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsKKwkJfTsKIAkJQkMwMzJENUMxMEY0MzZENTAwNThDMTVBIC8qIFdlYlByb2Nl
c3MgKi8gPSB7CiAJCQlpc2EgPSBQQlhHcm91cDsKIAkJCWNoaWxkcmVuID0gKApAQCAtMTI4Myw2
ICsxMzAwLDcgQEAKIAkJCWlzYSA9IFBCWEdyb3VwOwogCQkJY2hpbGRyZW4gPSAoCiAJCQkJQkMw
MzJEQzQxMEY0Mzg3QzAwNThDMTVBIC8qIEFQSSAqLywKKwkJCQk1MUIzMDA0RDEyNTI5Q0Y1MDAw
QjVDQTAgLyogY2YgKi8sCiAJCQkJQkMxMTFCMTgxMTJGNUZCNDAwMzM3QkFCIC8qIExhdW5jaGVy
ICovLAogCQkJCUJDQ0YwODVDMTEzRjNCNzUwMEM2NTBDNSAvKiBtYWMgKi8sCiAJCQkJMUFFRkND
MDUxMUQwMUYzNDAwODIxOUQzIC8qIFBsdWdpbnMgKi8sCkBAIC0xNTM5LDYgKzE1NTcsOCBAQAog
CQkJY2hpbGRyZW4gPSAoCiAJCQkJMUFCNUExQkExMEUwMjFEMzAwNDBGNkNGIC8qIENvcmVJUEMg
Ki8sCiAJCQkJMUE3RTgxNEUxMTUyRDIyNDAwMDM2OTVCIC8qIG1hYyAqLywKKwkJCQk1MUE3RjJG
NDEyNUJGOEQ0MDA4QUVCMUQgLyogTG9nZ2luZy5jcHAgKi8sCisJCQkJNTFBN0YyRjIxMjVCRjgy
MDAwOEFFQjFEIC8qIExvZ2dpbmcuaCAqLywKIAkJCQlDMEUzQUE0NTEyMDlFMkJBMDBBNDlEMDEg
LyogTW9kdWxlLmNwcCAqLywKIAkJCQlDMEUzQUE0NDEyMDlFMkJBMDBBNDlEMDEgLyogTW9kdWxl
LmggKi8sCiAJCQkJQkM4NzgwRkIxMTYxQzJCODAwQ0MyNzY4IC8qIFBsYXRmb3JtUHJvY2Vzc0lk
ZW50aWZpZXIuaCAqLywKQEAgLTE5MzgsNiArMTk1OCw3IEBACiAJCQkJQkMzMDY1RkExMjU5MzQ0
RTAwRTcxMjc4IC8qIENhY2hlTW9kZWwuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDMzA2NkJGMTI1
QTQ0MjEwMEU3MTI3OCAvKiBXZWJQcm9jZXNzTWVzc2FnZXMuaCBpbiBIZWFkZXJzICovLAogCQkJ
CUJDMzA2ODI0MTI1QTZCOTQwMEU3MTI3OCAvKiBXZWJQcm9jZXNzQ3JlYXRpb25QYXJhbWV0ZXJz
LmggaW4gSGVhZGVycyAqLywKKwkJCQk1MUE3RjJGMzEyNUJGODIwMDA4QUVCMUQgLyogTG9nZ2lu
Zy5oIGluIEhlYWRlcnMgKi8sCiAJCQkpOwogCQkJcnVuT25seUZvckRlcGxveW1lbnRQb3N0cHJv
Y2Vzc2luZyA9IDA7CiAJCX07CkBAIC0yMjI5LDEyICsyMjUwLDE1IEBACiAJCQkJMUEwNDNGNjkx
MjUxNEQ4QjAwRkZCRkI1IC8qIFdlYlByb2Nlc3NDb25uZWN0aW9uTWVzc2FnZVJlY2VpdmVyLmNw
cCBpbiBTb3VyY2VzICovLAogCQkJCTFBOEVGNENDMTI1MjQwMzcwMEY3MDY3RiAvKiBQbHVnaW5D
b250cm9sbGVyUHJveHkuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQzAyQkZGMUUxMjUxNTAyRTAw
OUNDQkVBIC8qIE5hdGl2ZVdlYktleWJvYXJkRXZlbnRNYWMubW0gaW4gU291cmNlcyAqLywKKwkJ
CQk1MUIzMDA1MDEyNTI5RDBFMDAwQjVDQTAgLyogV2ViQmFja0ZvcndhcmRMaXN0Q0YuY3BwIGlu
IFNvdXJjZXMgKi8sCisJCQkJNTFCMzAwNTExMjUyOUQwRTAwMEI1Q0EwIC8qIFdlYlBhZ2VQcm94
eUNGLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTFBOEVGOTZFMTI1MkFGNkIwMEY3MDY3RiAvKiBQ
bHVnaW5Db250cm9sbGVyUHJveHlNZXNzYWdlUmVjZWl2ZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJ
CQkJMUE4RUZBNzAxMjUyQjg0MTAwRjcwNjdGIC8qIFBsdWdpblByb3h5TWVzc2FnZVJlY2VpdmVy
LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTFBOEVGREZFMTI1M0NCNkUwMEY3MDY3RiAvKiBEYXRh
UmVmZXJlbmNlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUJDMzA2NUM0MTI1OTJGODkwMEU3MTI3
OCAvKiBXZWJQcm9jZXNzTWFjLm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJQkMzMDY2QkUxMjVBNDQy
MTAwRTcxMjc4IC8qIFdlYlByb2Nlc3NNZXNzYWdlUmVjZWl2ZXIuY3BwIGluIFNvdXJjZXMgKi8s
CiAJCQkJQkMzMDY4MjUxMjVBNkI5NDAwRTcxMjc4IC8qIFdlYlByb2Nlc3NDcmVhdGlvblBhcmFt
ZXRlcnMuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJNTFBN0YyRjUxMjVCRjhENDAwOEFFQjFEIC8q
IExvZ2dpbmcuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkpOwogCQkJcnVuT25seUZvckRlcGxveW1l
bnRQb3N0cHJvY2Vzc2luZyA9IDA7CiAJCX07CkluZGV4OiBXZWJLaXQyL3dpbi9XZWJLaXQyLnZj
cHJvago9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQyL3dpbi9XZWJLaXQyLnZjcHJvagkocmV2aXNpb24g
NjkzMTIpCisrKyBXZWJLaXQyL3dpbi9XZWJLaXQyLnZjcHJvagkod29ya2luZyBjb3B5KQpAQCAt
MTcwNSw2ICsxNzA1LDE4IEBACiAJCQkJPC9GaWx0ZXI+DQogCQkJPC9GaWx0ZXI+DQogCQkJPEZp
bHRlcg0KKwkJCQlOYW1lPSJjZiINCisJCQkJPg0KKwkJCQk8RmlsZQ0KKwkJCQkJUmVsYXRpdmVQ
YXRoPSIuLlxVSVByb2Nlc3NcY2ZcV2ViQmFja0ZvcndhcmRMaXN0Q0YuY3BwIg0KKwkJCQkJPg0K
KwkJCQk8L0ZpbGU+DQorCQkJCTxGaWxlDQorCQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXFVJUHJvY2Vz
c1xjZlxXZWJQYWdlUHJveHlDRi5jcHAiDQorCQkJCQk+DQorCQkJCTwvRmlsZT4NCisJCQk8L0Zp
bHRlcj4NCisJCQk8RmlsdGVyDQogCQkJCU5hbWU9IkxhdW5jaGVyIg0KIAkJCQk+DQogCQkJCTxG
aWxlDQpAQCAtMTc4MSw2ICsxNzkzLDE0IEBACiAJCQlOYW1lPSJQbGF0Zm9ybSINCiAJCQk+DQog
CQkJPEZpbGUNCisJCQkJUmVsYXRpdmVQYXRoPSIuLlxQbGF0Zm9ybVxMb2dnaW5nLmNwcCINCisJ
CQkJPg0KKwkJCTwvRmlsZT4NCisJCQk8RmlsZQ0KKwkJCQlSZWxhdGl2ZVBhdGg9Ii4uXFBsYXRm
b3JtXExvZ2dpbmcuaCINCisJCQkJPg0KKwkJCTwvRmlsZT4NCisJCQk8RmlsZQ0KIAkJCQlSZWxh
dGl2ZVBhdGg9Ii4uXFBsYXRmb3JtXE1vZHVsZS5jcHAiDQogCQkJCT4NCiAJCQk8L0ZpbGU+DQo=
</data>
<flag name="commit-queue"
          id="59879"
          type_id="3"
          status="-"
          setter="beidson"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>70098</attachid>
            <date>2010-10-07 09:47:03 -0700</date>
            <delta_ts>2010-10-07 11:08:35 -0700</delta_ts>
            <desc>Patch v2 </desc>
            <filename>patch.txt</filename>
            <type>text/plain</type>
            <size>32988</size>
            <attacher name="Brady Eidson">beidson</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYktpdDIvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdDIvQ2hhbmdlTG9n
CShyZXZpc2lvbiA2OTMxMikKKysrIFdlYktpdDIvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsNDcgQEAKKzIwMTAtMTAtMDcgIEJyYWR5IEVpZHNvbiAgPGJlaWRzb25AYXBwbGUu
Y29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIDxy
ZGFyOi8vcHJvYmxlbS84MjYyMjAyPiBhbmQgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTQ3MzU0CisgICAgICAgIE5lZWQgV0tQYWdlIEFQSSBmb3Igc2VyaWFsaXppbmcg
YW5kIHJlc3RvcmluZyBhIHBhZ2UncyBzdGF0ZQorCisgICAgICAgICogV2ViS2l0Mi5wcm86Cisg
ICAgICAgICogV2ViS2l0Mi54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAgICAqIHdp
bi9XZWJLaXQyLnZjcHJvajoKKworICAgICAgICAqIFdlYktpdDJQcmVmaXguaDogQWRkIERFRklO
RV9TVEFUSUNfR0VUVEVSIGNvbnZlbmllbmNlLgorCisgICAgICAgIEFkZCBjbGFzc2ljIFdlYkNv
cmUvV2ViS2l0IHN0eWxlIGxvZ2dpbmcgY2hhbm5lbHMsIHdpdGggYSBuZXcgU2Vzc2lvblN0YXRl
IGNoYW5uZWw6CisgICAgICAgICogUGxhdGZvcm0vTG9nZ2luZy5jcHA6IEFkZGVkLgorICAgICAg
ICAoaW5pdGlhbGl6ZUxvZ0NoYW5uZWxzSWZOZWNlc3NhcnkpOgorICAgICAgICAqIFBsYXRmb3Jt
L0xvZ2dpbmcuaDogQWRkZWQuCisKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL0MvV0tQYWdlLmNw
cDoKKyAgICAgICAgKFdLUGFnZUdldFNlc3Npb25IaXN0b3J5VVJMVmFsdWVUeXBlKToKKyAgICAg
ICAgKFdLUGFnZUNvcHlTZXNzaW9uU3RhdGUpOiBDaGFuZ2UgdG8gdXNlIGEgZmlsdGVyIGZ1bmN0
aW9uIHRvIGFsbG93IHRoZSBBUEkgY2xpZW50IHRvIGRlY2lkZSB3aGF0CisgICAgICAgICAgdHlw
ZXMgb2YgdGhpbmdzIGdldCBzZXJpYWxpemVkIGFzIHNlc3Npb24gc3RhdGUuICBGb3Igbm93IGl0
IG9ubHkgZmlsdGVycyBiYXNlZCBvbiBVUkwgaW4KKyAgICAgICAgICBzZXNzaW9uIGhpc3Rvcnkg
ZW50cmllcy4KKyAgICAgICAgKFdLUGFnZVJlc3RvcmVGcm9tU2Vzc2lvblN0YXRlKToKKyAgICAg
ICAgKiBVSVByb2Nlc3MvQVBJL0MvV0tQYWdlLmg6CisKKyAgICAgICAgKiBVSVByb2Nlc3MvV2Vi
UGFnZVByb3h5LmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZVByb3h5OjpzZXNzaW9uU3Rh
dGVEYXRhKTogTGVhdmUgc3R1YnMgZm9yIG5vbi1DRiBwbGF0Zm9ybSBidWlsZHMuCisgICAgICAg
IChXZWJLaXQ6OldlYlBhZ2VQcm94eTo6cmVzdG9yZUZyb21TZXNzaW9uU3RhdGVEYXRhKTogRGl0
dG8uCisgICAgICAgICogVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5oOgorCisgICAgICAgICogVUlQ
cm9jZXNzL2NmL1dlYkJhY2tGb3J3YXJkTGlzdENGLmNwcDogQWRkZWQuCisgICAgICAgIChXZWJL
aXQ6OldlYkJhY2tGb3J3YXJkTGlzdDo6Y3JlYXRlQ0ZEaWN0aW9uYXJ5UmVwcmVzZW50YXRpb24p
OiBTdG9yZSBiYWNrL2ZvcndhcmQgbGlzdCBpbmZvIENGIHByb3BlcnR5IGxpc3Qgc3R5bGUuCisg
ICAgICAgIChXZWJLaXQ6OldlYkJhY2tGb3J3YXJkTGlzdDo6cmVzdG9yZUZyb21DRkRpY3Rpb25h
cnlSZXByZXNlbnRhdGlvbik6IFJlc3RvcmUgZnJvbSB0aGF0IGRhdGEgLSBidXQgZm9yIG5vdyB3
ZSBkb24ndCAKKyAgICAgICAgICBhY3R1YWxseSBwdXQgdGhlIGJhY2svZm9yd2FyZCBsaXN0IGJh
Y2sgaW50byBwbGFjZSBhbmQgaW5zdGVhZCBvbmx5IHJlbWVtYmVyIHRoZSBjdXJyZW50IFVSTC4K
KyAgICAgICAgKiBVSVByb2Nlc3MvV2ViQmFja0ZvcndhcmRMaXN0Lmg6CisgICAgICAgIChXZWJL
aXQ6OldlYkJhY2tGb3J3YXJkTGlzdDo6cmVzdG9yZWRDdXJyZW50VVJMKToKKworICAgICAgICAq
IFVJUHJvY2Vzcy9jZi9XZWJQYWdlUHJveHlDRi5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViS2l0
OjpXZWJQYWdlUHJveHk6OnNlc3Npb25TdGF0ZURhdGEpOiBDcmVhdGUgdGhlIHNlc3Npb25zIHN0
YXRlIGRhdGUgQ0YgcHJvcGVydHkgbGlzdCBzdHlsZS4KKyAgICAgICAgKFdlYktpdDo6V2ViUGFn
ZVByb3h5OjpyZXN0b3JlRnJvbVNlc3Npb25TdGF0ZURhdGEpOiBSZXN0b3JlIGZyb20gdGhhdCBw
cm9wZXJ0eSBsaXN0IHN0eWxlIHNlc3Npb24gc3RhdGUgZGF0YS4KKworCisKIDIwMTAtMTAtMDcg
IEx1aXogQWdvc3RpbmkgIDxsdWl6LmFnb3N0aW5pQG9wZW5ib3NzYS5vcmc+CiAKICAgICAgICAg
UmV2aWV3ZWQgYnkgS2VubmV0aCBSb2hkZSBDaHJpc3RpYW5zZW4uCkluZGV4OiBXZWJLaXQyL1dl
YktpdDIucHJvCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdDIvV2ViS2l0Mi5wcm8JKHJldmlzaW9uIDY5
MzEyKQorKysgV2ViS2l0Mi9XZWJLaXQyLnBybwkod29ya2luZyBjb3B5KQpAQCAtMTU3LDYgKzE1
Nyw3IEBAIEhFQURFUlMgKz0gXAogICAgIFBsYXRmb3JtL0NvcmVJUEMvRGF0YVJlZmVyZW5jZS5o
IFwKICAgICBQbGF0Zm9ybS9Db3JlSVBDL0hhbmRsZU1lc3NhZ2UuaCBcCiAgICAgUGxhdGZvcm0v
Q29yZUlQQy9NZXNzYWdlSUQuaCBcCisgICAgUGxhdGZvcm0vTG9nZ2luZy5oIFwKICAgICBQbGF0
Zm9ybS9Nb2R1bGUuaCBcCiAgICAgUGxhdGZvcm0vUGxhdGZvcm1Qcm9jZXNzSWRlbnRpZmllci5o
IFwKICAgICBQbGF0Zm9ybS9SdW5Mb29wLmggXApAQCAtMjk5LDYgKzMwMCw3IEBAIFNPVVJDRVMg
Kz0gXAogICAgIFBsYXRmb3JtL0NvcmVJUEMvQ29ubmVjdGlvbi5jcHAgXAogICAgIFBsYXRmb3Jt
L0NvcmVJUEMvRGF0YVJlZmVyZW5jZS5jcHAgXAogICAgIFBsYXRmb3JtL0NvcmVJUEMvcXQvQ29u
bmVjdGlvblF0LmNwcCBcCisgICAgUGxhdGZvcm0vTG9nZ2luZy5jcHAgXAogICAgIFBsYXRmb3Jt
L01vZHVsZS5jcHAgXAogICAgIFBsYXRmb3JtL1J1bkxvb3AuY3BwIFwKICAgICBQbGF0Zm9ybS9X
b3JrUXVldWUuY3BwIFwKSW5kZXg6IFdlYktpdDIvV2ViS2l0MlByZWZpeC5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFdlYktpdDIvV2ViS2l0MlByZWZpeC5oCShyZXZpc2lvbiA2OTMxMikKKysrIFdlYktpdDIv
V2ViS2l0MlByZWZpeC5oCSh3b3JraW5nIGNvcHkpCkBAIC0yOSw2ICsyOSwyMiBAQAogI2luY2x1
ZGUgPHd0Zi9GYXN0TWFsbG9jLmg+CiAjZW5kaWYKIAorI2lmZGVmIF9fY3BsdXNwbHVzCisjZGVm
aW5lIEVYVEVSTl9DX0JFR0lOIGV4dGVybiAiQyIgeworI2RlZmluZSBFWFRFUk5fQ19FTkQgfQor
I2Vsc2UKKyNkZWZpbmUgRVhURVJOX0NfQkVHSU4KKyNkZWZpbmUgRVhURVJOX0NfRU5ECisjZW5k
aWYKKworLy8gRm9yIGRlZmluaW5nIGdldHRlcnMgdG8gYSBzdGF0aWMgdmFsdWUsIHdoZXJlIHRo
ZSBnZXR0ZXJzIGhhdmUgaW50ZXJuYWwgbGlua2FnZQorI2RlZmluZSBERUZJTkVfU1RBVElDX0dF
VFRFUih0eXBlLCBuYW1lLCBhcmd1bWVudHMpIFwKK3N0YXRpYyBjb25zdCB0eXBlJiBuYW1lKCkg
XAoreyBcCisgICAgREVGSU5FX1NUQVRJQ19MT0NBTCh0eXBlLCBuYW1lIyNWYWx1ZSwgYXJndW1l
bnRzKTsgXAorICAgIHJldHVybiBuYW1lIyNWYWx1ZTsgXAorfQorCiAjaWYgZGVmaW5lZChCVUlM
RElOR19RVF9fKQogCiAjZGVmaW5lIFdURl9VU0VfSlNDIDEKSW5kZXg6IFdlYktpdDIvUGxhdGZv
cm0vTG9nZ2luZy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0Mi9QbGF0Zm9ybS9Mb2dnaW5nLmNw
cAkocmV2aXNpb24gMCkKKysrIFdlYktpdDIvUGxhdGZvcm0vTG9nZ2luZy5jcHAJKHJldmlzaW9u
IDApCkBAIC0wLDAgKzEsNDIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisg
KiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAq
IEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBF
WEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiTG9nZ2luZy5oIgor
CisjaWYgIUxPR19ESVNBQkxFRAorCitXVEZMb2dDaGFubmVsIExvZ1Nlc3Npb25TdGF0ZSA9IHsg
MHgwMDAwMDAwMSwgIldlYktpdDJMb2dMZXZlbCIsIFdURkxvZ0NoYW5uZWxPbiB9OworCit2b2lk
IGluaXRpYWxpemVMb2dDaGFubmVsc0lmTmVjZXNzYXJ5KCkKK3sKKyAgICBzdGF0aWMgYm9vbCBo
YXZlSW5pdGlhbGl6ZWRMb2dDaGFubmVscyA9IGZhbHNlOworICAgIGlmIChoYXZlSW5pdGlhbGl6
ZWRMb2dDaGFubmVscykKKyAgICAgICAgcmV0dXJuOworICAgIGhhdmVJbml0aWFsaXplZExvZ0No
YW5uZWxzID0gdHJ1ZTsKKworICAgIGluaXRpYWxpemVMb2dDaGFubmVsKCZMb2dTZXNzaW9uU3Rh
dGUpOworfQorCisjZW5kaWYgLy8gTE9HX0RJU0FCTEVECkluZGV4OiBXZWJLaXQyL1BsYXRmb3Jt
L0xvZ2dpbmcuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQyL1BsYXRmb3JtL0xvZ2dpbmcuaAkocmV2
aXNpb24gMCkKKysrIFdlYktpdDIvUGxhdGZvcm0vTG9nZ2luZy5oCShyZXZpc2lvbiAwKQpAQCAt
MCwwICsxLDQ4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEwIEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1l
dDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5Z
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZ
LCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBMb2dnaW5nX2gKKyNkZWZpbmUgTG9n
Z2luZ19oCisKKyNpbmNsdWRlIDx3dGYvQXNzZXJ0aW9ucy5oPgorCisjaWYgIUxPR19ESVNBQkxF
RAorCisjaWZuZGVmIExPR19DSEFOTkVMX1BSRUZJWAorI2RlZmluZSBMT0dfQ0hBTk5FTF9QUkVG
SVggTG9nCisjZW5kaWYKKworRVhURVJOX0NfQkVHSU4KKworZXh0ZXJuIFdURkxvZ0NoYW5uZWwg
TG9nU2Vzc2lvblN0YXRlOworCit2b2lkIGluaXRpYWxpemVMb2dDaGFubmVsc0lmTmVjZXNzYXJ5
KHZvaWQpOwordm9pZCBpbml0aWFsaXplTG9nQ2hhbm5lbChXVEZMb2dDaGFubmVsKik7CisKK0VY
VEVSTl9DX0VORAorCisjZW5kaWYgLy8gTE9HX0RJU0FCTEVECisKKyNlbmRpZiAvLyBMb2dnaW5n
X2gKSW5kZXg6IFdlYktpdDIvVUlQcm9jZXNzL1dlYkJhY2tGb3J3YXJkTGlzdC5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFdlYktpdDIvVUlQcm9jZXNzL1dlYkJhY2tGb3J3YXJkTGlzdC5oCShyZXZpc2lvbiA2
OTMxMikKKysrIFdlYktpdDIvVUlQcm9jZXNzL1dlYkJhY2tGb3J3YXJkTGlzdC5oCSh3b3JraW5n
IGNvcHkpCkBAIC0yOSwxNCArMjksMTMgQEAKICNpbmNsdWRlICJBUElPYmplY3QuaCIKICNpbmNs
dWRlICJJbW11dGFibGVBcnJheS5oIgogI2luY2x1ZGUgIldlYkJhY2tGb3J3YXJkTGlzdEl0ZW0u
aCIKKyNpbmNsdWRlICJXZWJQYWdlUHJveHkuaCIKICNpbmNsdWRlIDx3dGYvUGFzc1JlZlB0ci5o
PgogI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KICNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CiAKIG5h
bWVzcGFjZSBXZWJLaXQgewogCi1jbGFzcyBXZWJQYWdlUHJveHk7Ci0KIHR5cGVkZWYgVmVjdG9y
PFJlZlB0cjxXZWJCYWNrRm9yd2FyZExpc3RJdGVtPiA+IEJhY2tGb3J3YXJkTGlzdEl0ZW1WZWN0
b3I7CiAKIC8qCkBAIC03Miw2ICs3MSwxMSBAQCBwdWJsaWM6CiAgICAgUGFzc1JlZlB0cjxJbW11
dGFibGVBcnJheT4gYmFja0xpc3RBc0ltbXV0YWJsZUFycmF5V2l0aExpbWl0KHVuc2lnbmVkIGxp
bWl0KTsKICAgICBQYXNzUmVmUHRyPEltbXV0YWJsZUFycmF5PiBmb3J3YXJkTGlzdEFzSW1tdXRh
YmxlQXJyYXlXaXRoTGltaXQodW5zaWduZWQgbGltaXQpOwogCisjaWYgUExBVEZPUk0oQ0YpCisg
ICAgQ0ZEaWN0aW9uYXJ5UmVmIGNyZWF0ZUNGRGljdGlvbmFyeVJlcHJlc2VudGF0aW9uKFdlYlBh
Z2VQcm94eTo6V2ViUGFnZVByb3h5U2Vzc2lvblN0YXRlRmlsdGVyQ2FsbGJhY2ssIHZvaWQqIGNv
bnRleHQpIGNvbnN0OworICAgIGJvb2wgcmVzdG9yZUZyb21DRkRpY3Rpb25hcnlSZXByZXNlbnRh
dGlvbihDRkRpY3Rpb25hcnlSZWYpOworI2VuZGlmCisKIHByaXZhdGU6CiAgICAgV2ViQmFja0Zv
cndhcmRMaXN0KFdlYlBhZ2VQcm94eSopOwogCkBAIC04Myw2ICs4NywxNCBAQCBwcml2YXRlOgog
ICAgIHVuc2lnbmVkIG1fY2FwYWNpdHk7CiAgICAgYm9vbCBtX2Nsb3NlZDsKICAgICBib29sIG1f
ZW5hYmxlZDsKKyAgICAKKy8vIEZJWE1FIC0gPHJkYXI6Ly9wcm9ibGVtLzgyNjE2MjQ+IGFuZCBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NDczNTUgLSAKKy8vICAgICAg
ICAgV2hlbiB3ZSBoYXZlIGEgc29sdXRpb24gZm9yIHJlc3RvcmluZyB0aGUgZnVsbCBiYWNrL2Zv
cndhcmQgbGlzdCAKKy8vICAgICAgICAgdGhlbiBjYXVzaW5nIGEgbG9hZCBvZiB0aGUgY3VycmVu
dCBpdGVtLCB3ZSB3aWxsIG5vIGxvbmdlciBuZWVkIHRoaXMuCitwdWJsaWM6CisgICAgY29uc3Qg
V1RGOjpTdHJpbmcmIHJlc3RvcmVkQ3VycmVudFVSTCgpIGNvbnN0IHsgcmV0dXJuIG1fcmVzdG9y
ZWRDdXJyZW50VVJMOyB9Citwcml2YXRlOgorICAgIFdURjo6U3RyaW5nIG1fcmVzdG9yZWRDdXJy
ZW50VVJMOwogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViS2l0CkluZGV4OiBXZWJLaXQyL1VJUHJv
Y2Vzcy9XZWJQYWdlUHJveHkuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdDIvVUlQcm9jZXNzL1dl
YlBhZ2VQcm94eS5jcHAJKHJldmlzaW9uIDY5MzEyKQorKysgV2ViS2l0Mi9VSVByb2Nlc3MvV2Vi
UGFnZVByb3h5LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDQ2LDE2ICs0NDYsMTggQEAgdm9pZCBX
ZWJQYWdlUHJveHk6OnRlcm1pbmF0ZVByb2Nlc3MoKQogICAgIHByb2Nlc3MoKS0+dGVybWluYXRl
KCk7CiB9CiAKLVBhc3NSZWZQdHI8V2ViRGF0YT4gV2ViUGFnZVByb3h5OjpzZXNzaW9uU3RhdGUo
KSBjb25zdAorI2lmICFQTEFURk9STShDRikKK1Bhc3NSZWZQdHI8V2ViRGF0YT4gV2ViUGFnZVBy
b3h5OjpzZXNzaW9uU3RhdGVEYXRhKFdlYlBhZ2VQcm94eVNlc3Npb25TdGF0ZUZpbHRlckNhbGxi
YWNrLCB2b2lkKiBjb250ZXh0KSBjb25zdAogewogICAgIC8vIEZJWE1FOiBSZXR1cm4gc2Vzc2lv
biBzdGF0ZSBkYXRhIGZvciBzYXZpbmcgUGFnZSBzdGF0ZS4KICAgICByZXR1cm4gMDsKIH0KIAot
dm9pZCBXZWJQYWdlUHJveHk6OnJlc3RvcmVGcm9tU2Vzc2lvblN0YXRlKFdlYkRhdGEqKQordm9p
ZCBXZWJQYWdlUHJveHk6OnJlc3RvcmVGcm9tU2Vzc2lvblN0YXRlRGF0YShXZWJEYXRhKikKIHsK
ICAgICAvLyBGSVhNRTogUmVzdG9yZSB0aGUgUGFnZSBmcm9tIHRoZSBwYXNzZWQgaW4gc2Vzc2lv
biBzdGF0ZSBkYXRhLgogfQorI2VuZGlmCiAKIHZvaWQgV2ViUGFnZVByb3h5OjpzZXRUZXh0Wm9v
bUZhY3Rvcihkb3VibGUgem9vbUZhY3RvcikKIHsKSW5kZXg6IFdlYktpdDIvVUlQcm9jZXNzL1dl
YlBhZ2VQcm94eS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdDIvVUlQcm9jZXNzL1dlYlBhZ2VQcm94
eS5oCShyZXZpc2lvbiA2OTMxMikKKysrIFdlYktpdDIvVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5o
CSh3b3JraW5nIGNvcHkpCkBAIC0xNTksOSArMTU5LDEwIEBAIHB1YmxpYzoKICAgICB2b2lkIHNl
dEN1c3RvbVVzZXJBZ2VudChjb25zdCBTdHJpbmcmKTsKIAogICAgIHZvaWQgdGVybWluYXRlUHJv
Y2VzcygpOwotICAgIAotICAgIFBhc3NSZWZQdHI8V2ViRGF0YT4gc2Vzc2lvblN0YXRlKCkgY29u
c3Q7Ci0gICAgdm9pZCByZXN0b3JlRnJvbVNlc3Npb25TdGF0ZShXZWJEYXRhKik7CisKKyAgICB0
eXBlZGVmIGJvb2wgKCpXZWJQYWdlUHJveHlTZXNzaW9uU3RhdGVGaWx0ZXJDYWxsYmFjaykoV0tQ
YWdlUmVmIHBhZ2UsIFdLU3RyaW5nUmVmIHR5cGUsIFdLVHlwZVJlZiBvYmplY3QsIHZvaWQqKTsK
KyAgICBQYXNzUmVmUHRyPFdlYkRhdGE+IHNlc3Npb25TdGF0ZURhdGEoV2ViUGFnZVByb3h5U2Vz
c2lvblN0YXRlRmlsdGVyQ2FsbGJhY2ssIHZvaWQqIGNvbnRleHQpIGNvbnN0OworICAgIHZvaWQg
cmVzdG9yZUZyb21TZXNzaW9uU3RhdGVEYXRhKFdlYkRhdGEqKTsKIAogICAgIGRvdWJsZSB0ZXh0
Wm9vbUZhY3RvcigpIGNvbnN0IHsgcmV0dXJuIG1fdGV4dFpvb21GYWN0b3I7IH0KICAgICB2b2lk
IHNldFRleHRab29tRmFjdG9yKGRvdWJsZSk7CkluZGV4OiBXZWJLaXQyL1VJUHJvY2Vzcy9BUEkv
Qy9XS1BhZ2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdDIvVUlQcm9jZXNzL0FQSS9DL1dLUGFn
ZS5jcHAJKHJldmlzaW9uIDY5MzEyKQorKysgV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0MvV0tQYWdl
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTUyLDE1ICsxNTIsMjEgQEAgdm9pZCBXS1BhZ2VUZXJt
aW5hdGUoV0tQYWdlUmVmIHBhZ2VSZWYpCiAgICAgdG9JbXBsKHBhZ2VSZWYpLT50ZXJtaW5hdGVQ
cm9jZXNzKCk7CiB9CiAKLVdLRGF0YVJlZiBXS1BhZ2VDb3B5U2Vzc2lvblN0YXRlKFdLUGFnZVJl
ZiBwYWdlUmVmKQorV0tTdHJpbmdSZWYgV0tQYWdlR2V0U2Vzc2lvbkhpc3RvcnlVUkxWYWx1ZVR5
cGUoKQogewotICAgIFJlZlB0cjxXZWJEYXRhPiBzdGF0ZSA9IHRvSW1wbChwYWdlUmVmKS0+c2Vz
c2lvblN0YXRlKCk7CisgICAgc3RhdGljIFJlZlB0cjxXZWJTdHJpbmc+IHNlc3Npb25IaXN0b3J5
VVJMVmFsdWVUeXBlID0gV2ViU3RyaW5nOjpjcmVhdGUoIlNlc3Npb25IaXN0b3J5VVJMIik7Cisg
ICAgcmV0dXJuIHRvQVBJKHNlc3Npb25IaXN0b3J5VVJMVmFsdWVUeXBlLmdldCgpKTsKK30KKwor
V0tEYXRhUmVmIFdLUGFnZUNvcHlTZXNzaW9uU3RhdGUoV0tQYWdlUmVmIHBhZ2VSZWYsIHZvaWQg
KmNvbnRleHQsIFdLUGFnZVNlc3Npb25TdGF0ZUZpbHRlckNhbGxiYWNrIGZpbHRlcikKK3sKKyAg
ICBSZWZQdHI8V2ViRGF0YT4gc3RhdGUgPSB0b0ltcGwocGFnZVJlZiktPnNlc3Npb25TdGF0ZURh
dGEoZmlsdGVyLCBjb250ZXh0KTsKICAgICByZXR1cm4gdG9BUEkoc3RhdGUucmVsZWFzZSgpLnJl
bGVhc2VSZWYoKSk7CiB9CiAKIHZvaWQgV0tQYWdlUmVzdG9yZUZyb21TZXNzaW9uU3RhdGUoV0tQ
YWdlUmVmIHBhZ2VSZWYsIFdLRGF0YVJlZiBzZXNzaW9uU3RhdGVEYXRhKQogewotICAgIHRvSW1w
bChwYWdlUmVmKS0+cmVzdG9yZUZyb21TZXNzaW9uU3RhdGUodG9JbXBsKHNlc3Npb25TdGF0ZURh
dGEpKTsKKyAgICB0b0ltcGwocGFnZVJlZiktPnJlc3RvcmVGcm9tU2Vzc2lvblN0YXRlRGF0YSh0
b0ltcGwoc2Vzc2lvblN0YXRlRGF0YSkpOwogfQogCiBkb3VibGUgV0tQYWdlR2V0VGV4dFpvb21G
YWN0b3IoV0tQYWdlUmVmIHBhZ2VSZWYpCkluZGV4OiBXZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQy9X
S1BhZ2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQy9XS1BhZ2UuaAko
cmV2aXNpb24gNjkzMTIpCisrKyBXZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQy9XS1BhZ2UuaAkod29y
a2luZyBjb3B5KQpAQCAtMTg4LDcgKzE4OCwxMCBAQCBXS19FWFBPUlQgdm9pZCBXS1BhZ2VTZXRD
dXN0b21Vc2VyQWdlbnQoCiAKIFdLX0VYUE9SVCB2b2lkIFdLUGFnZVRlcm1pbmF0ZShXS1BhZ2VS
ZWYgcGFnZSk7CiAKLVdLX0VYUE9SVCBXS0RhdGFSZWYgV0tQYWdlQ29weVNlc3Npb25TdGF0ZShX
S1BhZ2VSZWYgcGFnZSk7CitXS19FWFBPUlQgV0tTdHJpbmdSZWYgV0tQYWdlR2V0U2Vzc2lvbkhp
c3RvcnlVUkxWYWx1ZVR5cGUoKTsKKwordHlwZWRlZiBib29sICgqV0tQYWdlU2Vzc2lvblN0YXRl
RmlsdGVyQ2FsbGJhY2spKFdLUGFnZVJlZiBwYWdlLCBXS1N0cmluZ1JlZiB2YWx1ZVR5cGUsIFdL
VHlwZVJlZiB2YWx1ZSwgdm9pZCopOworV0tfRVhQT1JUIFdLRGF0YVJlZiBXS1BhZ2VDb3B5U2Vz
c2lvblN0YXRlKFdLUGFnZVJlZiBwYWdlLCB2b2lkICpjb250ZXh0LCBXS1BhZ2VTZXNzaW9uU3Rh
dGVGaWx0ZXJDYWxsYmFjayB1cmxBbGxvd2VkQ2FsbGJhY2spOwogV0tfRVhQT1JUIHZvaWQgV0tQ
YWdlUmVzdG9yZUZyb21TZXNzaW9uU3RhdGUoV0tQYWdlUmVmIHBhZ2UsIFdLRGF0YVJlZiBzZXNz
aW9uU3RhdGVEYXRhKTsKIAogV0tfRVhQT1JUIGRvdWJsZSBXS1BhZ2VHZXRUZXh0Wm9vbUZhY3Rv
cihXS1BhZ2VSZWYgcGFnZSk7CkluZGV4OiBXZWJLaXQyL1VJUHJvY2Vzcy9jZi9XZWJCYWNrRm9y
d2FyZExpc3RDRi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0Mi9VSVByb2Nlc3MvY2YvV2ViQmFj
a0ZvcndhcmRMaXN0Q0YuY3BwCShyZXZpc2lvbiAwKQorKysgV2ViS2l0Mi9VSVByb2Nlc3MvY2Yv
V2ViQmFja0ZvcndhcmRMaXN0Q0YuY3BwCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDExOSBAQAor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAxMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMu
IEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUg
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVN
RU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgorICovCisKKyNpbmNsdWRlICJXZWJCYWNrRm9yd2FyZExpc3QuaCIKKyNpbmNsdWRlICJM
b2dnaW5nLmgiCisKK3VzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOworCituYW1lc3BhY2UgV2ViS2l0
IHsKKworREVGSU5FX1NUQVRJQ19HRVRURVIoQ0ZTdHJpbmdSZWYsIFNlc3Npb25IaXN0b3J5Q3Vy
cmVudEluZGV4S2V5LCBDRlNUUigiU2Vzc2lvbkhpc3RvcnlDdXJyZW50SW5kZXgiKSk7CitERUZJ
TkVfU1RBVElDX0dFVFRFUihDRlN0cmluZ1JlZiwgU2Vzc2lvbkhpc3RvcnlFbnRyaWVzS2V5LCBD
RlNUUigiU2Vzc2lvbkhpc3RvcnlFbnRyaWVzIikpOworREVGSU5FX1NUQVRJQ19HRVRURVIoQ0ZT
dHJpbmdSZWYsIFNlc3Npb25IaXN0b3J5RW50cnlUaXRsZUtleSwgQ0ZTVFIoIlNlc3Npb25IaXN0
b3J5RW50cnlUaXRsZSIpKTsKK0RFRklORV9TVEFUSUNfR0VUVEVSKENGU3RyaW5nUmVmLCBTZXNz
aW9uSGlzdG9yeUVudHJ5VVJMS2V5LCBDRlNUUigiU2Vzc2lvbkhpc3RvcnlFbnRyeVVSTCIpKTsK
KworQ0ZEaWN0aW9uYXJ5UmVmIFdlYkJhY2tGb3J3YXJkTGlzdDo6Y3JlYXRlQ0ZEaWN0aW9uYXJ5
UmVwcmVzZW50YXRpb24oV2ViUGFnZVByb3h5OjpXZWJQYWdlUHJveHlTZXNzaW9uU3RhdGVGaWx0
ZXJDYWxsYmFjayBmaWx0ZXIsIHZvaWQqIGNvbnRleHQpIGNvbnN0Cit7CisgICAgUmV0YWluUHRy
PENGTXV0YWJsZURpY3Rpb25hcnlSZWY+IGRpY3Rpb25hcnkoQWRvcHRDRiwgQ0ZEaWN0aW9uYXJ5
Q3JlYXRlTXV0YWJsZSgwLCAyLCAma0NGVHlwZURpY3Rpb25hcnlLZXlDYWxsQmFja3MsICZrQ0ZU
eXBlRGljdGlvbmFyeVZhbHVlQ2FsbEJhY2tzKSk7CisgICAgCisgICAgUmV0YWluUHRyPENGTnVt
YmVyUmVmPiBjdXJyZW50SW5kZXgoQWRvcHRDRiwgQ0ZOdW1iZXJDcmVhdGUoMCwga0NGTnVtYmVy
U0ludDMyVHlwZSwgJm1fY3VycmVudCkpOworICAgIENGRGljdGlvbmFyeVNldFZhbHVlKGRpY3Rp
b25hcnkuZ2V0KCksIFNlc3Npb25IaXN0b3J5Q3VycmVudEluZGV4S2V5KCksIGN1cnJlbnRJbmRl
eC5nZXQoKSk7CisgICAgCisgICAgUmV0YWluUHRyPENGTXV0YWJsZUFycmF5UmVmPiBlbnRyaWVz
KEFkb3B0Q0YsIENGQXJyYXlDcmVhdGVNdXRhYmxlKDAsIG1fZW50cmllcy5zaXplKCksICZrQ0ZU
eXBlQXJyYXlDYWxsQmFja3MpKTsKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1fZW50cmll
cy5zaXplKCk7ICsraSkgeworICAgICAgICBSZWZQdHI8V2ViVVJMPiB3ZWJVUkwgPSBXZWJVUkw6
OmNyZWF0ZShtX2VudHJpZXNbaV0tPnVybCgpKTsKKyAgICAgICAgaWYgKCFmaWx0ZXIodG9BUEko
bV9wYWdlKSwgV0tQYWdlR2V0U2Vzc2lvbkhpc3RvcnlVUkxWYWx1ZVR5cGUoKSwgdG9VUkxSZWYo
bV9lbnRyaWVzW2ldLT5vcmlnaW5hbFVSTCgpLmltcGwoKSksIGNvbnRleHQpKQorICAgICAgICAg
ICAgY29udGludWU7CisKKyAgICAgICAgUmV0YWluUHRyPENGTXV0YWJsZURpY3Rpb25hcnlSZWY+
IGVudHJ5RGljdGlvbmFyeShBZG9wdENGLCBDRkRpY3Rpb25hcnlDcmVhdGVNdXRhYmxlKDAsIDIs
ICZrQ0ZUeXBlRGljdGlvbmFyeUtleUNhbGxCYWNrcywgJmtDRlR5cGVEaWN0aW9uYXJ5VmFsdWVD
YWxsQmFja3MpKTsKKyAgICAgICAgCisgICAgICAgIFJldGFpblB0cjxDRlN0cmluZ1JlZj4gdXJs
KEFkb3B0Q0YsIG1fZW50cmllc1tpXS0+dXJsKCkuY3JlYXRlQ0ZTdHJpbmcoKSk7CisgICAgICAg
IENGRGljdGlvbmFyeVNldFZhbHVlKGVudHJ5RGljdGlvbmFyeS5nZXQoKSwgU2Vzc2lvbkhpc3Rv
cnlFbnRyeVVSTEtleSgpLCB1cmwuZ2V0KCkpOworCisgICAgICAgIFJldGFpblB0cjxDRlN0cmlu
Z1JlZj4gdGl0bGUoQWRvcHRDRiwgbV9lbnRyaWVzW2ldLT50aXRsZSgpLmNyZWF0ZUNGU3RyaW5n
KCkpOworICAgICAgICBDRkRpY3Rpb25hcnlTZXRWYWx1ZShlbnRyeURpY3Rpb25hcnkuZ2V0KCks
IFNlc3Npb25IaXN0b3J5RW50cnlUaXRsZUtleSgpLCB0aXRsZS5nZXQoKSk7CisgICAgCisgICAg
ICAgIENGQXJyYXlBcHBlbmRWYWx1ZShlbnRyaWVzLmdldCgpLCBlbnRyeURpY3Rpb25hcnkuZ2V0
KCkpOworICAgIH0KKyAgICAKKyAgICBDRkRpY3Rpb25hcnlTZXRWYWx1ZShkaWN0aW9uYXJ5Lmdl
dCgpLCBTZXNzaW9uSGlzdG9yeUVudHJpZXNLZXkoKSwgZW50cmllcy5nZXQoKSk7CisKKyAgICBy
ZXR1cm4gZGljdGlvbmFyeS5yZWxlYXNlUmVmKCk7Cit9CisKK2Jvb2wgV2ViQmFja0ZvcndhcmRM
aXN0OjpyZXN0b3JlRnJvbUNGRGljdGlvbmFyeVJlcHJlc2VudGF0aW9uKENGRGljdGlvbmFyeVJl
ZiBkaWN0aW9uYXJ5KQoreworICAgIENGTnVtYmVyUmVmIGNmSW5kZXggPSAoQ0ZOdW1iZXJSZWYp
Q0ZEaWN0aW9uYXJ5R2V0VmFsdWUoZGljdGlvbmFyeSwgU2Vzc2lvbkhpc3RvcnlDdXJyZW50SW5k
ZXhLZXkoKSk7CisgICAgaWYgKCFjZkluZGV4IHx8IENGR2V0VHlwZUlEKGNmSW5kZXgpICE9IENG
TnVtYmVyR2V0VHlwZUlEKCkgfHwgQ0ZOdW1iZXJJc0Zsb2F0VHlwZShjZkluZGV4KSkgeworICAg
ICAgICBMT0coU2Vzc2lvblN0YXRlLCAiV2ViQmFja0ZvcndhcmRMaXN0IGRpY3Rpb25hcnkgcmVw
cmVzZW50YXRpb24gZG9lcyBub3QgaGF2ZSBhIHZhbGlkIGN1cnJlbnQgaW5kZXgiKTsKKyAgICAg
ICAgcmV0dXJuIGZhbHNlOworICAgIH0KKyAgICAKKyAgICBpbnQzMl90IGN1cnJlbnRJbmRleDsK
KyAgICBpZiAoIUNGTnVtYmVyR2V0VmFsdWUoY2ZJbmRleCwga0NGTnVtYmVyU0ludDMyVHlwZSwg
JmN1cnJlbnRJbmRleCkpIHsKKyAgICAgICAgTE9HKFNlc3Npb25TdGF0ZSwgIldlYkJhY2tGb3J3
YXJkTGlzdCBkaWN0aW9uYXJ5IHJlcHJlc2VudGF0aW9uIGRvZXMgbm90IGhhdmUgYSB2YWxpZCBp
bnRlZ2VyIGN1cnJlbnQgaW5kZXgiKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKyAg
ICAKKyAgICBDRkFycmF5UmVmIGNmRW50cmllcyA9IChDRkFycmF5UmVmKUNGRGljdGlvbmFyeUdl
dFZhbHVlKGRpY3Rpb25hcnksIFNlc3Npb25IaXN0b3J5RW50cmllc0tleSgpKTsKKyAgICBpZiAo
IWNmRW50cmllcyB8fCBDRkdldFR5cGVJRChjZkVudHJpZXMpICE9IENGQXJyYXlHZXRUeXBlSUQo
KSkgeworICAgICAgICBMT0coU2Vzc2lvblN0YXRlLCAiV2ViQmFja0ZvcndhcmRMaXN0IGRpY3Rp
b25hcnkgcmVwcmVzZW50YXRpb24gZG9lcyBub3QgaGF2ZSBhIHZhbGlkIGxpc3Qgb2YgZW50cmll
cyIpOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorICAgIAorICAgIENGSW5kZXggc2l6
ZSA9IENGQXJyYXlHZXRDb3VudChjZkVudHJpZXMpOworICAgIGZvciAoQ0ZJbmRleCBpID0gMDsg
aSA8IHNpemU7ICsraSkgeworICAgICAgICBDRkRpY3Rpb25hcnlSZWYgZW50cnlEaWN0aW9uYXJ5
ID0gKENGRGljdGlvbmFyeVJlZilDRkFycmF5R2V0VmFsdWVBdEluZGV4KGNmRW50cmllcywgaSk7
CisgICAgICAgIGlmICghZW50cnlEaWN0aW9uYXJ5IHx8IENGR2V0VHlwZUlEKGVudHJ5RGljdGlv
bmFyeSkgIT0gQ0ZEaWN0aW9uYXJ5R2V0VHlwZUlEKCkpIHsKKyAgICAgICAgICAgIExPRyhTZXNz
aW9uU3RhdGUsICJXZWJCYWNrRm9yd2FyZExpc3QgZW50cnkgYXJyYXkgZG9lcyBub3QgaGF2ZSBh
IHZhbGlkIGVudHJ5IGF0IGluZGV4ICVpIiwgKGludClpKTsKKyAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgQ0ZTdHJpbmdSZWYgZW50cnlVUkwg
PSAoQ0ZTdHJpbmdSZWYpQ0ZEaWN0aW9uYXJ5R2V0VmFsdWUoZW50cnlEaWN0aW9uYXJ5LCBTZXNz
aW9uSGlzdG9yeUVudHJ5VVJMS2V5KCkpOworICAgICAgICBpZiAoIWVudHJ5VVJMIHx8IENGR2V0
VHlwZUlEKGVudHJ5VVJMKSAhPSBDRlN0cmluZ0dldFR5cGVJRCgpKSB7CisgICAgICAgICAgICBM
T0coU2Vzc2lvblN0YXRlLCAiV2ViQmFja0ZvcndhcmRMaXN0IGVudHJ5IGF0IGluZGV4ICVpIGRv
ZXMgbm90IGhhdmUgYSB2YWxpZCBVUkwiLCAoaW50KWkpOworICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOworICAgICAgICB9CisKKyAgICAgICAgQ0ZTdHJpbmdSZWYgZW50cnlUaXRsZSA9IChDRlN0
cmluZ1JlZilDRkRpY3Rpb25hcnlHZXRWYWx1ZShlbnRyeURpY3Rpb25hcnksIFNlc3Npb25IaXN0
b3J5RW50cnlUaXRsZUtleSgpKTsKKyAgICAgICAgaWYgKCFlbnRyeVRpdGxlIHx8IENGR2V0VHlw
ZUlEKGVudHJ5VGl0bGUpICE9IENGU3RyaW5nR2V0VHlwZUlEKCkpIHsKKyAgICAgICAgICAgIExP
RyhTZXNzaW9uU3RhdGUsICJXZWJCYWNrRm9yd2FyZExpc3QgZW50cnkgYXQgaW5kZXggJWkgZG9l
cyBub3QgaGF2ZSBhIHZhbGlkIHRpdGxlIiwgKGludClpKTsKKyAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgLy8gRklYTUUgPHJkYXI6Ly9wcm9i
bGVtLzgyNjE2MjQ+IGFuZCBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
NDczNTUgLSAKKyAgICAgICAgLy8gICAgICAgICAgVGhlIGRhdGEgZm9yIHRoZSBhYm92ZSBlbnRy
eSBuZWVkcyB0byBiZSBhZGRlZCB0byB0aGUgZnVsbCBiYWNrL2ZvcndhcmQgbGlzdC4KKyAgICAg
ICAgLy8gICAgICAgICAgV2hlbiB3ZSBoYXZlIGEgc29sdXRpb24gdGhhdCByZXN0b3JlcyB0aGUg
ZnVsbCBiYWNrL2ZvcndhcmRsaXN0IHRoZW4gY2F1c2VzIGEgbG9hZCBvZiB0aGUgY3VycmVudCBp
dGVtLAorICAgICAgICAvLyAgICAgICAgICB3ZSB3aWxsIG5vIGxvbmdlciBuZWVkIHRoaXMuCisg
ICAgICAgIGlmIChpID09IGN1cnJlbnRJbmRleCkgeworICAgICAgICAgICAgbV9yZXN0b3JlZEN1
cnJlbnRVUkwgPSBlbnRyeVVSTDsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAg
fQorICAgIHJldHVybiB0cnVlOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKSW5kZXg6IFdl
YktpdDIvVUlQcm9jZXNzL2NmL1dlYlBhZ2VQcm94eUNGLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJL
aXQyL1VJUHJvY2Vzcy9jZi9XZWJQYWdlUHJveHlDRi5jcHAJKHJldmlzaW9uIDApCisrKyBXZWJL
aXQyL1VJUHJvY2Vzcy9jZi9XZWJQYWdlUHJveHlDRi5jcHAJKHJldmlzaW9uIDApCkBAIC0wLDAg
KzEsOTcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0Ogor
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
CisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9S
CisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgor
ICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiV2ViUGFnZVByb3h5LmgiCisKKyNpbmNs
dWRlICJMb2dnaW5nLmgiCisjaW5jbHVkZSAiV2ViQmFja0ZvcndhcmRMaXN0LmgiCisjaW5jbHVk
ZSAiV2ViRGF0YS5oIgorCit1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKKworbmFtZXNwYWNlIFdl
YktpdCB7CisKK0RFRklORV9TVEFUSUNfR0VUVEVSKENGU3RyaW5nUmVmLCBTZXNzaW9uSGlzdG9y
eUtleSwgQ0ZTVFIoIlNlc3Npb25IaXN0b3J5IikpOworCitQYXNzUmVmUHRyPFdlYkRhdGE+IFdl
YlBhZ2VQcm94eTo6c2Vzc2lvblN0YXRlRGF0YShXZWJQYWdlUHJveHlTZXNzaW9uU3RhdGVGaWx0
ZXJDYWxsYmFjayBmaWx0ZXIsIHZvaWQqIGNvbnRleHQpIGNvbnN0Cit7CisgICAgUmV0YWluUHRy
PENGRGljdGlvbmFyeVJlZj4gc2Vzc2lvbkhpc3RvcnlEaWN0aW9uYXJ5KEFkb3B0Q0YsIG1fYmFj
a0ZvcndhcmRMaXN0LT5jcmVhdGVDRkRpY3Rpb25hcnlSZXByZXNlbnRhdGlvbihmaWx0ZXIsIGNv
bnRleHQpKTsKKyAgICAKKyAgICAvLyBGb3Igbm93IHdlJ3JlIG9ubHkgc2VyaWFsaXppbmcgdGhl
IGJhY2svZm9yd2FyZCBsaXN0LiAgSWYgdGhhdCBvYmplY3QgaXMgbnVsbCwgdGhlbiB0aGUgZW50
aXJlIHNlc3Npb25TdGF0ZSBjYW4gYmUgbnVsbC4KKyAgICBpZiAoIXNlc3Npb25IaXN0b3J5RGlj
dGlvbmFyeSkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICBSZXRhaW5QdHI8Q0ZNdXRhYmxlRGlj
dGlvbmFyeVJlZj4gc3RhdGVEaWN0aW9uYXJ5KEFkb3B0Q0YsIENGRGljdGlvbmFyeUNyZWF0ZU11
dGFibGUoMCwgMSwgJmtDRlR5cGVEaWN0aW9uYXJ5S2V5Q2FsbEJhY2tzLCAma0NGVHlwZURpY3Rp
b25hcnlWYWx1ZUNhbGxCYWNrcykpOworICAgIENGRGljdGlvbmFyeVNldFZhbHVlKHN0YXRlRGlj
dGlvbmFyeS5nZXQoKSwgU2Vzc2lvbkhpc3RvcnlLZXkoKSwgc2Vzc2lvbkhpc3RvcnlEaWN0aW9u
YXJ5LmdldCgpKTsKKyAgICAKKyAgICBSZXRhaW5QdHI8Q0ZEYXRhUmVmPiBzdGF0ZUNGRGF0YShB
ZG9wdENGLCBDRlByb3BlcnR5TGlzdENyZWF0ZURhdGEoMCwgc3RhdGVEaWN0aW9uYXJ5LmdldCgp
LCBrQ0ZQcm9wZXJ0eUxpc3RCaW5hcnlGb3JtYXRfdjFfMCwgMCwgMCkpOworCisgICAgQ0ZJbmRl
eCBsZW5ndGggPSBDRkRhdGFHZXRMZW5ndGgoc3RhdGVDRkRhdGEuZ2V0KCkpOworICAgIFZlY3Rv
cjx1bnNpZ25lZCBjaGFyPiBzdGF0ZVZlY3RvcihsZW5ndGgpOworICAgIENGRGF0YUdldEJ5dGVz
KHN0YXRlQ0ZEYXRhLmdldCgpLCBDRlJhbmdlTWFrZSgwLCBsZW5ndGgpLCBzdGF0ZVZlY3Rvci5k
YXRhKCkpOworICAgIFJlZlB0cjxXZWJEYXRhPiBzdGF0ZVdlYkRhdGEgPSBXZWJEYXRhOjpjcmVh
dGUoc3RhdGVWZWN0b3IpOworICAgIHJldHVybiBzdGF0ZVdlYkRhdGEucmVsZWFzZSgpOworfQor
Cit2b2lkIFdlYlBhZ2VQcm94eTo6cmVzdG9yZUZyb21TZXNzaW9uU3RhdGVEYXRhKFdlYkRhdGEq
IHdlYkRhdGEpCit7CisgICAgaWYgKCF3ZWJEYXRhKQorICAgICAgICByZXR1cm47CisgICAgCisg
ICAgUmV0YWluUHRyPENGRGF0YVJlZj4gZGF0YShBZG9wdENGLCBDRkRhdGFDcmVhdGUoMCwgd2Vi
RGF0YS0+Ynl0ZXMoKSwgd2ViRGF0YS0+c2l6ZSgpKSk7CisKKyAgICBDRkVycm9yUmVmIHByb3Bl
cnR5TGlzdEVycm9yID0gMDsKKyAgICBSZXRhaW5QdHI8Q0ZQcm9wZXJ0eUxpc3RSZWY+IHByb3Bl
cnR5TGlzdChBZG9wdENGLCBDRlByb3BlcnR5TGlzdENyZWF0ZVdpdGhEYXRhKDAsIGRhdGEuZ2V0
KCksIGtDRlByb3BlcnR5TGlzdEltbXV0YWJsZSwgMCwgJnByb3BlcnR5TGlzdEVycm9yKSk7Cisg
ICAgaWYgKHByb3BlcnR5TGlzdEVycm9yKSB7CisgICAgICAgIExPRyhTZXNzaW9uU3RhdGUsICJD
b3VsZCBub3QgcmVhZCBzZXNzaW9uIHN0YXRlIHByb3BlcnR5IGxpc3QiKTsKKyAgICAgICAgcmV0
dXJuOworICAgIH0KKworICAgIGlmICghcHJvcGVydHlMaXN0KQorICAgICAgICByZXR1cm47Cisg
ICAgICAgIAorICAgIGlmIChDRkdldFR5cGVJRChwcm9wZXJ0eUxpc3QuZ2V0KCkpICE9IENGRGlj
dGlvbmFyeUdldFR5cGVJRCgpKSB7CisgICAgICAgIExPRyhTZXNzaW9uU3RhdGUsICJTZXNzaW9u
U3RhdGUgcHJvcGVydHkgbGlzdCBpcyBub3QgYSBDRkRpY3Rpb25hcnlSZWYgKCVpKSAtIGl0cyBD
RlR5cGVJRCBpcyAlaSIsIChpbnQpQ0ZEaWN0aW9uYXJ5R2V0VHlwZUlEKCksIChpbnQpQ0ZHZXRU
eXBlSUQocHJvcGVydHlMaXN0LmdldCgpKSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAg
CisgICAgQ0ZUeXBlUmVmIHNlc3Npb25IaXN0b3J5UmVmID0gQ0ZEaWN0aW9uYXJ5R2V0VmFsdWUo
c3RhdGljX2Nhc3Q8Q0ZEaWN0aW9uYXJ5UmVmPihwcm9wZXJ0eUxpc3QuZ2V0KCkpLCBTZXNzaW9u
SGlzdG9yeUtleSgpKTsKKyAgICBpZiAoIXNlc3Npb25IaXN0b3J5UmVmIHx8IENGR2V0VHlwZUlE
KHNlc3Npb25IaXN0b3J5UmVmKSAhPSBDRkRpY3Rpb25hcnlHZXRUeXBlSUQoKSkgeworICAgICAg
ICBMT0coU2Vzc2lvblN0YXRlLCAiU2Vzc2lvblN0YXRlIGRpY3Rpb25hcnkgZG9lcyBub3QgY29u
dGFpbiBhIFNlc3Npb25IaXN0b3J5RGljdGlvbmFyeSBrZXksIGl0IGlzIG9mIHRoZSB3cm9uZyB0
eXBlIik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgCisgICAgQ0ZEaWN0aW9uYXJ5UmVm
IHNlc3Npb25IaXN0b3J5RGljdGlvbmFyeSA9IHN0YXRpY19jYXN0PENGRGljdGlvbmFyeVJlZj4o
c2Vzc2lvbkhpc3RvcnlSZWYpOworICAgIGlmICghbV9iYWNrRm9yd2FyZExpc3QtPnJlc3RvcmVG
cm9tQ0ZEaWN0aW9uYXJ5UmVwcmVzZW50YXRpb24oc2Vzc2lvbkhpc3RvcnlEaWN0aW9uYXJ5KSkg
eworICAgICAgICBMT0coU2Vzc2lvblN0YXRlLCAiRmFpbGVkIHRvIHJlc3RvcmUgYmFjay9mb3J3
YXJkIGxpc3QgZnJvbSBTZXNzaW9uSGlzdG9yeURpY3Rpb25hcnkiKTsKKyAgICAgICAgcmV0dXJu
OworICAgIH0KKworICAgIC8vIEZJWE1FOiBXaGVuIHdlIGhhdmUgYSBzb2x1dGlvbiBmb3IgcmVz
dG9yaW5nIHRoZSBmdWxsIGJhY2svZm9yd2FyZCBsaXN0IHRoZW4gY2F1c2luZyBhIGxvYWQgb2Yg
dGhlIGN1cnJlbnQgaXRlbSwKKyAgICAvLyAgICAgICAgd2Ugd2lsbCB0cmlnZ2VyIHRoYXQgbG9h
ZCBoZXJlLiAgVW50aWwgdGhlbiwgd2UgdXNlIHRoZSAicmVzdG9yZWQgY3VycmVudCBVUkwiIHdo
aWNoIGNhbiBsYXRlciBiZSByZW1vdmVkLgorICAgIGxvYWRVUkwobV9iYWNrRm9yd2FyZExpc3Qt
PnJlc3RvcmVkQ3VycmVudFVSTCgpKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CkluZGV4
OiBXZWJLaXQyL1dlYktpdDIueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvago9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBXZWJLaXQyL1dlYktpdDIueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkocmV2aXNpb24gNjkz
MTIpCisrKyBXZWJLaXQyL1dlYktpdDIueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkod29ya2lu
ZyBjb3B5KQpAQCAtMTM4LDYgKzEzOCwxMCBAQAogCQkxQUVGRDJGNzExRDE4MDdCMDA4MjE5RDMg
LyogQXJndW1lbnRDb2RlcnMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDFBRUZEMkY2MTFEMTgwN0IwMDgyMTlEMyAvKiBBcmd1bWVudENvZGVycy5oICov
OyB9OwogCQk1MTU3OEI4MzEyMDlFQ0VGMDBBMzdDNEEgLyogV2ViRGF0YS5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTE1NzhCODIxMjA5RUNFRjAwQTM3
QzRBIC8qIFdlYkRhdGEuaCAqLzsgfTsKIAkJNTE2QTRBNUQxMjBBMkNDRDAwQzA1QjdGIC8qIFdl
YkVycm9yLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1
MTZBNEE1QjEyMEEyQ0NEMDBDMDVCN0YgLyogV2ViRXJyb3IuaCAqLzsgfTsKKwkJNTFBN0YyRjMx
MjVCRjgyMDAwOEFFQjFEIC8qIExvZ2dpbmcuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDUxQTdGMkYyMTI1QkY4MjAwMDhBRUIxRCAvKiBMb2dnaW5nLmgg
Ki87IH07CisJCTUxQTdGMkY1MTI1QkY4RDQwMDhBRUIxRCAvKiBMb2dnaW5nLmNwcCBpbiBTb3Vy
Y2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUxQTdGMkY0MTI1QkY4RDQw
MDhBRUIxRCAvKiBMb2dnaW5nLmNwcCAqLzsgfTsKKwkJNTFCMzAwNTAxMjUyOUQwRTAwMEI1Q0Ew
IC8qIFdlYkJhY2tGb3J3YXJkTGlzdENGLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDUxQjMwMDRFMTI1MjlEMEUwMDBCNUNBMCAvKiBXZWJCYWNrRm9y
d2FyZExpc3RDRi5jcHAgKi87IH07CisJCTUxQjMwMDUxMTI1MjlEMEUwMDBCNUNBMCAvKiBXZWJQ
YWdlUHJveHlDRi5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSA1MUIzMDA0RjEyNTI5RDBFMDAwQjVDQTAgLyogV2ViUGFnZVByb3h5Q0YuY3BwICovOyB9
OwogCQk2RDhBOTFBNjExRjBFRkQxMDBERDAxRkUgLyogY29tLmFwcGxlLldlYlByb2Nlc3Muc2Ig
aW4gUmVzb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDZEOEE5MUE1
MTFGMEVGRDEwMEREMDFGRSAvKiBjb20uYXBwbGUuV2ViUHJvY2Vzcy5zYiAqLzsgfTsKIAkJNzYy
Qjc0OEQxMjBCQzc1QzAwODE5MzM5IC8qIFdLUHJlZmVyZW5jZXNQcml2YXRlLmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3NjJCNzQ4NDEyMEJCQTJEMDA4
MTkzMzkgLyogV0tQcmVmZXJlbmNlc1ByaXZhdGUuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRF
UyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk3NjJCNzRBRjEyMEJDOTRGMDA4MTkzMzkgLyogV0tQ
cmVmZXJlbmNlc1ByaXZhdGUuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gNzYyQjc0OUQxMjBCQzhFQTAwODE5MzM5IC8qIFdLUHJlZmVyZW5jZXNQcml2
YXRlLmNwcCAqLzsgfTsKQEAgLTU4Niw2ICs1OTAsMTAgQEAKIAkJMzJEQkNGNUUwMzcwQURFRTAw
QzkxNzgzIC8qIFdlYktpdDJQcmVmaXguaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRo
ID0gV2ViS2l0MlByZWZpeC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1MTU3OEI4
MjEyMDlFQ0VGMDBBMzdDNEEgLyogV2ViRGF0YS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBXZWJEYXRhLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTUxNkE0QTVC
MTIwQTJDQ0QwMEMwNUI3RiAvKiBXZWJFcnJvci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBXZWJFcnJvci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk1MUE3RjJG
MjEyNUJGODIwMDA4QUVCMUQgLyogTG9nZ2luZy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBMb2dnaW5nLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTUxQTdGMkY0
MTI1QkY4RDQwMDhBRUIxRCAvKiBMb2dnaW5nLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3Bw
LmNwcDsgcGF0aCA9IExvZ2dpbmcuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk1
MUIzMDA0RTEyNTI5RDBFMDAwQjVDQTAgLyogV2ViQmFja0ZvcndhcmRMaXN0Q0YuY3BwICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gV2ViQmFja0ZvcndhcmRMaXN0Q0YuY3Bw
OyBwYXRoID0gY2YvV2ViQmFja0ZvcndhcmRMaXN0Q0YuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OworCQk1MUIzMDA0RjEyNTI5RDBFMDAwQjVDQTAgLyogV2ViUGFnZVByb3h5Q0YuY3Bw
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gV2ViUGFnZVByb3h5Q0YuY3Bw
OyBwYXRoID0gY2YvV2ViUGFnZVByb3h5Q0YuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQk1REFENzI5NDExNkZGNzBCMDBFRTUzOTYgLyogV2ViUHJvY2Vzcy54Y2NvbmZpZyAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHRleHQueGNjb25maWc7IHBhdGggPSBXZWJQcm9jZXNzLnhjY29uZmlnOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQk1REFENzNGMTExNkZGOTBDMDBFRTUzOTYgLyogQmFzZVRh
cmdldC54Y2NvbmZpZyAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQueGNjb25maWc7IHBhdGggPSBCYXNlVGFyZ2V0
LnhjY29uZmlnOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk2RDhBOTFBNTExRjBFRkQx
MDBERDAxRkUgLyogY29tLmFwcGxlLldlYlByb2Nlc3Muc2IgKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0OyBuYW1l
ID0gY29tLmFwcGxlLldlYlByb2Nlc3Muc2I7IHBhdGggPSBXZWJQcm9jZXNzL2NvbS5hcHBsZS5X
ZWJQcm9jZXNzLnNiOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtNjMzLDcgKzY0MSw3
IEBACiAJCUJDMTExQUUzMTEyRjVDMjYwMDMzN0JBQiAvKiBXZWJQcm9jZXNzLmNwcCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFdlYlByb2Nlc3MuY3BwOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQlCQzExMUIwODExMkY1RTNDMDAzMzdCQUIgLyogUmVzcG9uc2l2
ZW5lc3NUaW1lci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBSZXNw
b25zaXZlbmVzc1RpbWVyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQkMxMTFC
MEExMTJGNUU0RjAwMzM3QkFCIC8qIFdlYkZyYW1lUHJveHkuY3BwICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jcHAuY3BwOyBwYXRoID0gV2ViRnJhbWVQcm94eS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07Ci0JCUJDMTExQjBCMTEyRjVFNEYwMDMzN0JBQiAvKiBXZWJQYWdlUHJveHkuY3Bw
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gV2ViUGFnZVByb3h5LmNwcDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQkMxMTFCMEIxMTJGNUU0RjAwMzM3QkFCIC8q
IFdlYlBhZ2VQcm94eS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZXhwbGljaXRG
aWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgZmlsZUVuY29kaW5nID0gNDsgcGF0aCA9IFdl
YlBhZ2VQcm94eS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUJDMTExQjBDMTEy
RjVFNEYwMDMzN0JBQiAvKiBXZWJQcm9jZXNzTWFuYWdlci5jcHAgKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmNwcC5jcHA7IHBhdGggPSBXZWJQcm9jZXNzTWFuYWdlci5jcHA7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCUJDMTExQjBEMTEyRjVFNEYwMDMzN0JBQiAvKiBXZWJQcm9jZXNzUHJv
eHkuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gV2ViUHJvY2Vzc1By
b3h5LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQkMxMTFCMUIxMTJGNUZFNjAw
MzM3QkFCIC8qIFByb2Nlc3NMYXVuY2hlck1hYy5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3Bw
Lm9iamNwcDsgcGF0aCA9IFByb2Nlc3NMYXVuY2hlck1hYy5tbTsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKQEAgLTEyMTAsNiArMTIxOCwxNSBAQAogCQkJbmFtZSA9ICJPdGhlciBTb3VyY2Vz
IjsKIAkJCXNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7CiAJCX07CisJCTUxQjMwMDREMTI1MjlDRjUw
MDBCNUNBMCAvKiBjZiAqLyA9IHsKKwkJCWlzYSA9IFBCWEdyb3VwOworCQkJY2hpbGRyZW4gPSAo
CisJCQkJNTFCMzAwNEUxMjUyOUQwRTAwMEI1Q0EwIC8qIFdlYkJhY2tGb3J3YXJkTGlzdENGLmNw
cCAqLywKKwkJCQk1MUIzMDA0RjEyNTI5RDBFMDAwQjVDQTAgLyogV2ViUGFnZVByb3h5Q0YuY3Bw
ICovLAorCQkJKTsKKwkJCW5hbWUgPSBjZjsKKwkJCXNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7CisJ
CX07CiAJCUJDMDMyRDVDMTBGNDM2RDUwMDU4QzE1QSAvKiBXZWJQcm9jZXNzICovID0gewogCQkJ
aXNhID0gUEJYR3JvdXA7CiAJCQljaGlsZHJlbiA9ICgKQEAgLTEyODMsNiArMTMwMCw3IEBACiAJ
CQlpc2EgPSBQQlhHcm91cDsKIAkJCWNoaWxkcmVuID0gKAogCQkJCUJDMDMyREM0MTBGNDM4N0Mw
MDU4QzE1QSAvKiBBUEkgKi8sCisJCQkJNTFCMzAwNEQxMjUyOUNGNTAwMEI1Q0EwIC8qIGNmICov
LAogCQkJCUJDMTExQjE4MTEyRjVGQjQwMDMzN0JBQiAvKiBMYXVuY2hlciAqLywKIAkJCQlCQ0NG
MDg1QzExM0YzQjc1MDBDNjUwQzUgLyogbWFjICovLAogCQkJCTFBRUZDQzA1MTFEMDFGMzQwMDgy
MTlEMyAvKiBQbHVnaW5zICovLApAQCAtMTUzOSw2ICsxNTU3LDggQEAKIAkJCWNoaWxkcmVuID0g
KAogCQkJCTFBQjVBMUJBMTBFMDIxRDMwMDQwRjZDRiAvKiBDb3JlSVBDICovLAogCQkJCTFBN0U4
MTRFMTE1MkQyMjQwMDAzNjk1QiAvKiBtYWMgKi8sCisJCQkJNTFBN0YyRjQxMjVCRjhENDAwOEFF
QjFEIC8qIExvZ2dpbmcuY3BwICovLAorCQkJCTUxQTdGMkYyMTI1QkY4MjAwMDhBRUIxRCAvKiBM
b2dnaW5nLmggKi8sCiAJCQkJQzBFM0FBNDUxMjA5RTJCQTAwQTQ5RDAxIC8qIE1vZHVsZS5jcHAg
Ki8sCiAJCQkJQzBFM0FBNDQxMjA5RTJCQTAwQTQ5RDAxIC8qIE1vZHVsZS5oICovLAogCQkJCUJD
ODc4MEZCMTE2MUMyQjgwMENDMjc2OCAvKiBQbGF0Zm9ybVByb2Nlc3NJZGVudGlmaWVyLmggKi8s
CkBAIC0xOTM4LDYgKzE5NTgsNyBAQAogCQkJCUJDMzA2NUZBMTI1OTM0NEUwMEU3MTI3OCAvKiBD
YWNoZU1vZGVsLmggaW4gSGVhZGVycyAqLywKIAkJCQlCQzMwNjZCRjEyNUE0NDIxMDBFNzEyNzgg
LyogV2ViUHJvY2Vzc01lc3NhZ2VzLmggaW4gSGVhZGVycyAqLywKIAkJCQlCQzMwNjgyNDEyNUE2
Qjk0MDBFNzEyNzggLyogV2ViUHJvY2Vzc0NyZWF0aW9uUGFyYW1ldGVycy5oIGluIEhlYWRlcnMg
Ki8sCisJCQkJNTFBN0YyRjMxMjVCRjgyMDAwOEFFQjFEIC8qIExvZ2dpbmcuaCBpbiBIZWFkZXJz
ICovLAogCQkJKTsKIAkJCXJ1bk9ubHlGb3JEZXBsb3ltZW50UG9zdHByb2Nlc3NpbmcgPSAwOwog
CQl9OwpAQCAtMjIyOSwxMiArMjI1MCwxNSBAQAogCQkJCTFBMDQzRjY5MTI1MTREOEIwMEZGQkZC
NSAvKiBXZWJQcm9jZXNzQ29ubmVjdGlvbk1lc3NhZ2VSZWNlaXZlci5jcHAgaW4gU291cmNlcyAq
LywKIAkJCQkxQThFRjRDQzEyNTI0MDM3MDBGNzA2N0YgLyogUGx1Z2luQ29udHJvbGxlclByb3h5
LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUMwMkJGRjFFMTI1MTUwMkUwMDlDQ0JFQSAvKiBOYXRp
dmVXZWJLZXlib2FyZEV2ZW50TWFjLm1tIGluIFNvdXJjZXMgKi8sCisJCQkJNTFCMzAwNTAxMjUy
OUQwRTAwMEI1Q0EwIC8qIFdlYkJhY2tGb3J3YXJkTGlzdENGLmNwcCBpbiBTb3VyY2VzICovLAor
CQkJCTUxQjMwMDUxMTI1MjlEMEUwMDBCNUNBMCAvKiBXZWJQYWdlUHJveHlDRi5jcHAgaW4gU291
cmNlcyAqLywKIAkJCQkxQThFRjk2RTEyNTJBRjZCMDBGNzA2N0YgLyogUGx1Z2luQ29udHJvbGxl
clByb3h5TWVzc2FnZVJlY2VpdmVyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTFBOEVGQTcwMTI1
MkI4NDEwMEY3MDY3RiAvKiBQbHVnaW5Qcm94eU1lc3NhZ2VSZWNlaXZlci5jcHAgaW4gU291cmNl
cyAqLywKIAkJCQkxQThFRkRGRTEyNTNDQjZFMDBGNzA2N0YgLyogRGF0YVJlZmVyZW5jZS5jcHAg
aW4gU291cmNlcyAqLywKIAkJCQlCQzMwNjVDNDEyNTkyRjg5MDBFNzEyNzggLyogV2ViUHJvY2Vz
c01hYy5tbSBpbiBTb3VyY2VzICovLAogCQkJCUJDMzA2NkJFMTI1QTQ0MjEwMEU3MTI3OCAvKiBX
ZWJQcm9jZXNzTWVzc2FnZVJlY2VpdmVyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUJDMzA2ODI1
MTI1QTZCOTQwMEU3MTI3OCAvKiBXZWJQcm9jZXNzQ3JlYXRpb25QYXJhbWV0ZXJzLmNwcCBpbiBT
b3VyY2VzICovLAorCQkJCTUxQTdGMkY1MTI1QkY4RDQwMDhBRUIxRCAvKiBMb2dnaW5nLmNwcCBp
biBTb3VyY2VzICovLAogCQkJKTsKIAkJCXJ1bk9ubHlGb3JEZXBsb3ltZW50UG9zdHByb2Nlc3Np
bmcgPSAwOwogCQl9OwpJbmRleDogV2ViS2l0Mi93aW4vV2ViS2l0Mi52Y3Byb2oKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gV2ViS2l0Mi93aW4vV2ViS2l0Mi52Y3Byb2oJKHJldmlzaW9uIDY5MzEyKQorKysgV2Vi
S2l0Mi93aW4vV2ViS2l0Mi52Y3Byb2oJKHdvcmtpbmcgY29weSkKQEAgLTE3MDUsNiArMTcwNSwx
OCBAQAogCQkJCTwvRmlsdGVyPg0KIAkJCTwvRmlsdGVyPg0KIAkJCTxGaWx0ZXINCisJCQkJTmFt
ZT0iY2YiDQorCQkJCT4NCisJCQkJPEZpbGUNCisJCQkJCVJlbGF0aXZlUGF0aD0iLi5cVUlQcm9j
ZXNzXGNmXFdlYkJhY2tGb3J3YXJkTGlzdENGLmNwcCINCisJCQkJCT4NCisJCQkJPC9GaWxlPg0K
KwkJCQk8RmlsZQ0KKwkJCQkJUmVsYXRpdmVQYXRoPSIuLlxVSVByb2Nlc3NcY2ZcV2ViUGFnZVBy
b3h5Q0YuY3BwIg0KKwkJCQkJPg0KKwkJCQk8L0ZpbGU+DQorCQkJPC9GaWx0ZXI+DQorCQkJPEZp
bHRlcg0KIAkJCQlOYW1lPSJMYXVuY2hlciINCiAJCQkJPg0KIAkJCQk8RmlsZQ0KQEAgLTE3ODEs
NiArMTc5MywxNCBAQAogCQkJTmFtZT0iUGxhdGZvcm0iDQogCQkJPg0KIAkJCTxGaWxlDQorCQkJ
CVJlbGF0aXZlUGF0aD0iLi5cUGxhdGZvcm1cTG9nZ2luZy5jcHAiDQorCQkJCT4NCisJCQk8L0Zp
bGU+DQorCQkJPEZpbGUNCisJCQkJUmVsYXRpdmVQYXRoPSIuLlxQbGF0Zm9ybVxMb2dnaW5nLmgi
DQorCQkJCT4NCisJCQk8L0ZpbGU+DQorCQkJPEZpbGUNCiAJCQkJUmVsYXRpdmVQYXRoPSIuLlxQ
bGF0Zm9ybVxNb2R1bGUuY3BwIg0KIAkJCQk+DQogCQkJPC9GaWxlPg0K
</data>
<flag name="commit-queue"
          id="59884"
          type_id="3"
          status="-"
          setter="beidson"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>70121</attachid>
            <date>2010-10-07 11:08:35 -0700</date>
            <delta_ts>2010-10-11 14:56:20 -0700</delta_ts>
            <desc>Patch v3 (without Logging.h/cpp additions)</desc>
            <filename>patch.txt</filename>
            <type>text/plain</type>
            <size>26278</size>
            <attacher name="Brady Eidson">beidson</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYktpdDIvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdDIvQ2hhbmdlTG9n
CShyZXZpc2lvbiA2OTMyMykKKysrIFdlYktpdDIvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsNDQgQEAKKzIwMTAtMTAtMDcgIEJyYWR5IEVpZHNvbiAgPGJlaWRzb25AYXBwbGUu
Y29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIDxy
ZGFyOi8vcHJvYmxlbS84MjYyMjAyPiBhbmQgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTQ3MzU0CisgICAgICAgIE5lZWQgV0tQYWdlIEFQSSBmb3Igc2VyaWFsaXppbmcg
YW5kIHJlc3RvcmluZyBhIHBhZ2UncyBzdGF0ZQorCisgICAgICAgICogV2ViS2l0Mi54Y29kZXBy
b2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAgICAqIHdpbi9XZWJLaXQyLnZjcHJvajoKKworICAg
ICAgICAqIFdlYktpdDJQcmVmaXguaDogQWRkIERFRklORV9TVEFUSUNfR0VUVEVSIGNvbnZlbmll
bmNlLgorCisgICAgICAgIEFkZCBjbGFzc2ljIFdlYkNvcmUvV2ViS2l0IHN0eWxlIGxvZ2dpbmcg
Y2hhbm5lbHMsIHdpdGggYSBuZXcgU2Vzc2lvblN0YXRlIGNoYW5uZWw6CisgICAgICAgICogUGxh
dGZvcm0vTG9nZ2luZy5jcHA6IEFkZGVkLgorICAgICAgICAoaW5pdGlhbGl6ZUxvZ0NoYW5uZWxz
SWZOZWNlc3NhcnkpOgorICAgICAgICAqIFBsYXRmb3JtL0xvZ2dpbmcuaDogQWRkZWQuCisKKyAg
ICAgICAgKiBVSVByb2Nlc3MvQVBJL0MvV0tQYWdlLmNwcDoKKyAgICAgICAgKFdLUGFnZUdldFNl
c3Npb25IaXN0b3J5VVJMVmFsdWVUeXBlKToKKyAgICAgICAgKFdLUGFnZUNvcHlTZXNzaW9uU3Rh
dGUpOiBDaGFuZ2UgdG8gdXNlIGEgZmlsdGVyIGZ1bmN0aW9uIHRvIGFsbG93IHRoZSBBUEkgY2xp
ZW50IHRvIGRlY2lkZSB3aGF0CisgICAgICAgICAgdHlwZXMgb2YgdGhpbmdzIGdldCBzZXJpYWxp
emVkIGFzIHNlc3Npb24gc3RhdGUuICBGb3Igbm93IGl0IG9ubHkgZmlsdGVycyBiYXNlZCBvbiBV
UkwgaW4KKyAgICAgICAgICBzZXNzaW9uIGhpc3RvcnkgZW50cmllcy4KKyAgICAgICAgKFdLUGFn
ZVJlc3RvcmVGcm9tU2Vzc2lvblN0YXRlKToKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL0MvV0tQ
YWdlLmg6CisKKyAgICAgICAgKiBVSVByb2Nlc3MvV2ViUGFnZVByb3h5LmNwcDoKKyAgICAgICAg
KFdlYktpdDo6V2ViUGFnZVByb3h5OjpzZXNzaW9uU3RhdGVEYXRhKTogTGVhdmUgc3R1YnMgZm9y
IG5vbi1DRiBwbGF0Zm9ybSBidWlsZHMuCisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2VQcm94eTo6
cmVzdG9yZUZyb21TZXNzaW9uU3RhdGVEYXRhKTogRGl0dG8uCisgICAgICAgICogVUlQcm9jZXNz
L1dlYlBhZ2VQcm94eS5oOgorCisgICAgICAgICogVUlQcm9jZXNzL2NmL1dlYkJhY2tGb3J3YXJk
TGlzdENGLmNwcDogQWRkZWQuCisgICAgICAgIChXZWJLaXQ6OldlYkJhY2tGb3J3YXJkTGlzdDo6
Y3JlYXRlQ0ZEaWN0aW9uYXJ5UmVwcmVzZW50YXRpb24pOiBTdG9yZSBiYWNrL2ZvcndhcmQgbGlz
dCBpbmZvIENGIHByb3BlcnR5IGxpc3Qgc3R5bGUuCisgICAgICAgIChXZWJLaXQ6OldlYkJhY2tG
b3J3YXJkTGlzdDo6cmVzdG9yZUZyb21DRkRpY3Rpb25hcnlSZXByZXNlbnRhdGlvbik6IFJlc3Rv
cmUgZnJvbSB0aGF0IGRhdGEgLSBidXQgZm9yIG5vdyB3ZSBkb24ndCAKKyAgICAgICAgICBhY3R1
YWxseSBwdXQgdGhlIGJhY2svZm9yd2FyZCBsaXN0IGJhY2sgaW50byBwbGFjZSBhbmQgaW5zdGVh
ZCBvbmx5IHJlbWVtYmVyIHRoZSBjdXJyZW50IFVSTC4KKyAgICAgICAgKiBVSVByb2Nlc3MvV2Vi
QmFja0ZvcndhcmRMaXN0Lmg6CisgICAgICAgIChXZWJLaXQ6OldlYkJhY2tGb3J3YXJkTGlzdDo6
cmVzdG9yZWRDdXJyZW50VVJMKToKKworICAgICAgICAqIFVJUHJvY2Vzcy9jZi9XZWJQYWdlUHJv
eHlDRi5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlUHJveHk6OnNlc3Npb25T
dGF0ZURhdGEpOiBDcmVhdGUgdGhlIHNlc3Npb25zIHN0YXRlIGRhdGUgQ0YgcHJvcGVydHkgbGlz
dCBzdHlsZS4KKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZVByb3h5OjpyZXN0b3JlRnJvbVNlc3Np
b25TdGF0ZURhdGEpOiBSZXN0b3JlIGZyb20gdGhhdCBwcm9wZXJ0eSBsaXN0IHN0eWxlIHNlc3Np
b24gc3RhdGUgZGF0YS4KKwogMjAxMC0xMC0wNyAgQnJhZHkgRWlkc29uICA8YmVpZHNvbkBhcHBs
ZS5jb20+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgU2FtIFdlaW5pZy4KSW5kZXg6IFdlYktpdDIv
V2ViS2l0MlByZWZpeC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdDIvV2ViS2l0MlByZWZpeC5oCShy
ZXZpc2lvbiA2OTMyMykKKysrIFdlYktpdDIvV2ViS2l0MlByZWZpeC5oCSh3b3JraW5nIGNvcHkp
CkBAIC0yOSw2ICsyOSwyMiBAQAogI2luY2x1ZGUgPHd0Zi9GYXN0TWFsbG9jLmg+CiAjZW5kaWYK
IAorI2lmZGVmIF9fY3BsdXNwbHVzCisjZGVmaW5lIEVYVEVSTl9DX0JFR0lOIGV4dGVybiAiQyIg
eworI2RlZmluZSBFWFRFUk5fQ19FTkQgfQorI2Vsc2UKKyNkZWZpbmUgRVhURVJOX0NfQkVHSU4K
KyNkZWZpbmUgRVhURVJOX0NfRU5ECisjZW5kaWYKKworLy8gRm9yIGRlZmluaW5nIGdldHRlcnMg
dG8gYSBzdGF0aWMgdmFsdWUsIHdoZXJlIHRoZSBnZXR0ZXJzIGhhdmUgaW50ZXJuYWwgbGlua2Fn
ZQorI2RlZmluZSBERUZJTkVfU1RBVElDX0dFVFRFUih0eXBlLCBuYW1lLCBhcmd1bWVudHMpIFwK
K3N0YXRpYyBjb25zdCB0eXBlJiBuYW1lKCkgXAoreyBcCisgICAgREVGSU5FX1NUQVRJQ19MT0NB
TCh0eXBlLCBuYW1lIyNWYWx1ZSwgYXJndW1lbnRzKTsgXAorICAgIHJldHVybiBuYW1lIyNWYWx1
ZTsgXAorfQorCiAjaWYgZGVmaW5lZChCVUlMRElOR19RVF9fKQogCiAjZGVmaW5lIFdURl9VU0Vf
SlNDIDEKSW5kZXg6IFdlYktpdDIvVUlQcm9jZXNzL1dlYkJhY2tGb3J3YXJkTGlzdC5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFdlYktpdDIvVUlQcm9jZXNzL1dlYkJhY2tGb3J3YXJkTGlzdC5oCShyZXZpc2lv
biA2OTMyMykKKysrIFdlYktpdDIvVUlQcm9jZXNzL1dlYkJhY2tGb3J3YXJkTGlzdC5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0yOSwxNCArMjksMTMgQEAKICNpbmNsdWRlICJBUElPYmplY3QuaCIKICNp
bmNsdWRlICJJbW11dGFibGVBcnJheS5oIgogI2luY2x1ZGUgIldlYkJhY2tGb3J3YXJkTGlzdEl0
ZW0uaCIKKyNpbmNsdWRlICJXZWJQYWdlUHJveHkuaCIKICNpbmNsdWRlIDx3dGYvUGFzc1JlZlB0
ci5oPgogI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KICNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CiAK
IG5hbWVzcGFjZSBXZWJLaXQgewogCi1jbGFzcyBXZWJQYWdlUHJveHk7Ci0KIHR5cGVkZWYgVmVj
dG9yPFJlZlB0cjxXZWJCYWNrRm9yd2FyZExpc3RJdGVtPiA+IEJhY2tGb3J3YXJkTGlzdEl0ZW1W
ZWN0b3I7CiAKIC8qCkBAIC03Miw2ICs3MSwxMSBAQCBwdWJsaWM6CiAgICAgUGFzc1JlZlB0cjxJ
bW11dGFibGVBcnJheT4gYmFja0xpc3RBc0ltbXV0YWJsZUFycmF5V2l0aExpbWl0KHVuc2lnbmVk
IGxpbWl0KTsKICAgICBQYXNzUmVmUHRyPEltbXV0YWJsZUFycmF5PiBmb3J3YXJkTGlzdEFzSW1t
dXRhYmxlQXJyYXlXaXRoTGltaXQodW5zaWduZWQgbGltaXQpOwogCisjaWYgUExBVEZPUk0oQ0Yp
CisgICAgQ0ZEaWN0aW9uYXJ5UmVmIGNyZWF0ZUNGRGljdGlvbmFyeVJlcHJlc2VudGF0aW9uKFdl
YlBhZ2VQcm94eTo6V2ViUGFnZVByb3h5U2Vzc2lvblN0YXRlRmlsdGVyQ2FsbGJhY2ssIHZvaWQq
IGNvbnRleHQpIGNvbnN0OworICAgIGJvb2wgcmVzdG9yZUZyb21DRkRpY3Rpb25hcnlSZXByZXNl
bnRhdGlvbihDRkRpY3Rpb25hcnlSZWYpOworI2VuZGlmCisKIHByaXZhdGU6CiAgICAgV2ViQmFj
a0ZvcndhcmRMaXN0KFdlYlBhZ2VQcm94eSopOwogCkBAIC04Myw2ICs4NywxNCBAQCBwcml2YXRl
OgogICAgIHVuc2lnbmVkIG1fY2FwYWNpdHk7CiAgICAgYm9vbCBtX2Nsb3NlZDsKICAgICBib29s
IG1fZW5hYmxlZDsKKyAgICAKKy8vIEZJWE1FIC0gPHJkYXI6Ly9wcm9ibGVtLzgyNjE2MjQ+IGFu
ZCBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NDczNTUgLSAKKy8vICAg
ICAgICAgV2hlbiB3ZSBoYXZlIGEgc29sdXRpb24gZm9yIHJlc3RvcmluZyB0aGUgZnVsbCBiYWNr
L2ZvcndhcmQgbGlzdCAKKy8vICAgICAgICAgdGhlbiBjYXVzaW5nIGEgbG9hZCBvZiB0aGUgY3Vy
cmVudCBpdGVtLCB3ZSB3aWxsIG5vIGxvbmdlciBuZWVkIHRoaXMuCitwdWJsaWM6CisgICAgY29u
c3QgV1RGOjpTdHJpbmcmIHJlc3RvcmVkQ3VycmVudFVSTCgpIGNvbnN0IHsgcmV0dXJuIG1fcmVz
dG9yZWRDdXJyZW50VVJMOyB9Citwcml2YXRlOgorICAgIFdURjo6U3RyaW5nIG1fcmVzdG9yZWRD
dXJyZW50VVJMOwogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViS2l0CkluZGV4OiBXZWJLaXQyL1VJ
UHJvY2Vzcy9XZWJQYWdlUHJveHkuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdDIvVUlQcm9jZXNz
L1dlYlBhZ2VQcm94eS5jcHAJKHJldmlzaW9uIDY5MzIzKQorKysgV2ViS2l0Mi9VSVByb2Nlc3Mv
V2ViUGFnZVByb3h5LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDQ2LDE2ICs0NDYsMTggQEAgdm9p
ZCBXZWJQYWdlUHJveHk6OnRlcm1pbmF0ZVByb2Nlc3MoKQogICAgIHByb2Nlc3MoKS0+dGVybWlu
YXRlKCk7CiB9CiAKLVBhc3NSZWZQdHI8V2ViRGF0YT4gV2ViUGFnZVByb3h5OjpzZXNzaW9uU3Rh
dGUoKSBjb25zdAorI2lmICFQTEFURk9STShDRikKK1Bhc3NSZWZQdHI8V2ViRGF0YT4gV2ViUGFn
ZVByb3h5OjpzZXNzaW9uU3RhdGVEYXRhKFdlYlBhZ2VQcm94eVNlc3Npb25TdGF0ZUZpbHRlckNh
bGxiYWNrLCB2b2lkKiBjb250ZXh0KSBjb25zdAogewogICAgIC8vIEZJWE1FOiBSZXR1cm4gc2Vz
c2lvbiBzdGF0ZSBkYXRhIGZvciBzYXZpbmcgUGFnZSBzdGF0ZS4KICAgICByZXR1cm4gMDsKIH0K
IAotdm9pZCBXZWJQYWdlUHJveHk6OnJlc3RvcmVGcm9tU2Vzc2lvblN0YXRlKFdlYkRhdGEqKQor
dm9pZCBXZWJQYWdlUHJveHk6OnJlc3RvcmVGcm9tU2Vzc2lvblN0YXRlRGF0YShXZWJEYXRhKikK
IHsKICAgICAvLyBGSVhNRTogUmVzdG9yZSB0aGUgUGFnZSBmcm9tIHRoZSBwYXNzZWQgaW4gc2Vz
c2lvbiBzdGF0ZSBkYXRhLgogfQorI2VuZGlmCiAKIHZvaWQgV2ViUGFnZVByb3h5OjpzZXRUZXh0
Wm9vbUZhY3Rvcihkb3VibGUgem9vbUZhY3RvcikKIHsKSW5kZXg6IFdlYktpdDIvVUlQcm9jZXNz
L1dlYlBhZ2VQcm94eS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdDIvVUlQcm9jZXNzL1dlYlBhZ2VQ
cm94eS5oCShyZXZpc2lvbiA2OTMyMykKKysrIFdlYktpdDIvVUlQcm9jZXNzL1dlYlBhZ2VQcm94
eS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xNTksOSArMTU5LDEwIEBAIHB1YmxpYzoKICAgICB2b2lk
IHNldEN1c3RvbVVzZXJBZ2VudChjb25zdCBTdHJpbmcmKTsKIAogICAgIHZvaWQgdGVybWluYXRl
UHJvY2VzcygpOwotICAgIAotICAgIFBhc3NSZWZQdHI8V2ViRGF0YT4gc2Vzc2lvblN0YXRlKCkg
Y29uc3Q7Ci0gICAgdm9pZCByZXN0b3JlRnJvbVNlc3Npb25TdGF0ZShXZWJEYXRhKik7CisKKyAg
ICB0eXBlZGVmIGJvb2wgKCpXZWJQYWdlUHJveHlTZXNzaW9uU3RhdGVGaWx0ZXJDYWxsYmFjayko
V0tQYWdlUmVmIHBhZ2UsIFdLU3RyaW5nUmVmIHR5cGUsIFdLVHlwZVJlZiBvYmplY3QsIHZvaWQq
KTsKKyAgICBQYXNzUmVmUHRyPFdlYkRhdGE+IHNlc3Npb25TdGF0ZURhdGEoV2ViUGFnZVByb3h5
U2Vzc2lvblN0YXRlRmlsdGVyQ2FsbGJhY2ssIHZvaWQqIGNvbnRleHQpIGNvbnN0OworICAgIHZv
aWQgcmVzdG9yZUZyb21TZXNzaW9uU3RhdGVEYXRhKFdlYkRhdGEqKTsKIAogICAgIGRvdWJsZSB0
ZXh0Wm9vbUZhY3RvcigpIGNvbnN0IHsgcmV0dXJuIG1fdGV4dFpvb21GYWN0b3I7IH0KICAgICB2
b2lkIHNldFRleHRab29tRmFjdG9yKGRvdWJsZSk7CkluZGV4OiBXZWJLaXQyL1VJUHJvY2Vzcy9B
UEkvQy9XS1BhZ2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdDIvVUlQcm9jZXNzL0FQSS9DL1dL
UGFnZS5jcHAJKHJldmlzaW9uIDY5MzIzKQorKysgV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0MvV0tQ
YWdlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTUyLDE1ICsxNTIsMjEgQEAgdm9pZCBXS1BhZ2VU
ZXJtaW5hdGUoV0tQYWdlUmVmIHBhZ2VSZWYpCiAgICAgdG9JbXBsKHBhZ2VSZWYpLT50ZXJtaW5h
dGVQcm9jZXNzKCk7CiB9CiAKLVdLRGF0YVJlZiBXS1BhZ2VDb3B5U2Vzc2lvblN0YXRlKFdLUGFn
ZVJlZiBwYWdlUmVmKQorV0tTdHJpbmdSZWYgV0tQYWdlR2V0U2Vzc2lvbkhpc3RvcnlVUkxWYWx1
ZVR5cGUoKQogewotICAgIFJlZlB0cjxXZWJEYXRhPiBzdGF0ZSA9IHRvSW1wbChwYWdlUmVmKS0+
c2Vzc2lvblN0YXRlKCk7CisgICAgc3RhdGljIFJlZlB0cjxXZWJTdHJpbmc+IHNlc3Npb25IaXN0
b3J5VVJMVmFsdWVUeXBlID0gV2ViU3RyaW5nOjpjcmVhdGUoIlNlc3Npb25IaXN0b3J5VVJMIik7
CisgICAgcmV0dXJuIHRvQVBJKHNlc3Npb25IaXN0b3J5VVJMVmFsdWVUeXBlLmdldCgpKTsKK30K
KworV0tEYXRhUmVmIFdLUGFnZUNvcHlTZXNzaW9uU3RhdGUoV0tQYWdlUmVmIHBhZ2VSZWYsIHZv
aWQgKmNvbnRleHQsIFdLUGFnZVNlc3Npb25TdGF0ZUZpbHRlckNhbGxiYWNrIGZpbHRlcikKK3sK
KyAgICBSZWZQdHI8V2ViRGF0YT4gc3RhdGUgPSB0b0ltcGwocGFnZVJlZiktPnNlc3Npb25TdGF0
ZURhdGEoZmlsdGVyLCBjb250ZXh0KTsKICAgICByZXR1cm4gdG9BUEkoc3RhdGUucmVsZWFzZSgp
LnJlbGVhc2VSZWYoKSk7CiB9CiAKIHZvaWQgV0tQYWdlUmVzdG9yZUZyb21TZXNzaW9uU3RhdGUo
V0tQYWdlUmVmIHBhZ2VSZWYsIFdLRGF0YVJlZiBzZXNzaW9uU3RhdGVEYXRhKQogewotICAgIHRv
SW1wbChwYWdlUmVmKS0+cmVzdG9yZUZyb21TZXNzaW9uU3RhdGUodG9JbXBsKHNlc3Npb25TdGF0
ZURhdGEpKTsKKyAgICB0b0ltcGwocGFnZVJlZiktPnJlc3RvcmVGcm9tU2Vzc2lvblN0YXRlRGF0
YSh0b0ltcGwoc2Vzc2lvblN0YXRlRGF0YSkpOwogfQogCiBkb3VibGUgV0tQYWdlR2V0VGV4dFpv
b21GYWN0b3IoV0tQYWdlUmVmIHBhZ2VSZWYpCkluZGV4OiBXZWJLaXQyL1VJUHJvY2Vzcy9BUEkv
Qy9XS1BhZ2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQy9XS1BhZ2Uu
aAkocmV2aXNpb24gNjkzMjMpCisrKyBXZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQy9XS1BhZ2UuaAko
d29ya2luZyBjb3B5KQpAQCAtMTg4LDcgKzE4OCwxMCBAQCBXS19FWFBPUlQgdm9pZCBXS1BhZ2VT
ZXRDdXN0b21Vc2VyQWdlbnQoCiAKIFdLX0VYUE9SVCB2b2lkIFdLUGFnZVRlcm1pbmF0ZShXS1Bh
Z2VSZWYgcGFnZSk7CiAKLVdLX0VYUE9SVCBXS0RhdGFSZWYgV0tQYWdlQ29weVNlc3Npb25TdGF0
ZShXS1BhZ2VSZWYgcGFnZSk7CitXS19FWFBPUlQgV0tTdHJpbmdSZWYgV0tQYWdlR2V0U2Vzc2lv
bkhpc3RvcnlVUkxWYWx1ZVR5cGUoKTsKKwordHlwZWRlZiBib29sICgqV0tQYWdlU2Vzc2lvblN0
YXRlRmlsdGVyQ2FsbGJhY2spKFdLUGFnZVJlZiBwYWdlLCBXS1N0cmluZ1JlZiB2YWx1ZVR5cGUs
IFdLVHlwZVJlZiB2YWx1ZSwgdm9pZCopOworV0tfRVhQT1JUIFdLRGF0YVJlZiBXS1BhZ2VDb3B5
U2Vzc2lvblN0YXRlKFdLUGFnZVJlZiBwYWdlLCB2b2lkICpjb250ZXh0LCBXS1BhZ2VTZXNzaW9u
U3RhdGVGaWx0ZXJDYWxsYmFjayB1cmxBbGxvd2VkQ2FsbGJhY2spOwogV0tfRVhQT1JUIHZvaWQg
V0tQYWdlUmVzdG9yZUZyb21TZXNzaW9uU3RhdGUoV0tQYWdlUmVmIHBhZ2UsIFdLRGF0YVJlZiBz
ZXNzaW9uU3RhdGVEYXRhKTsKIAogV0tfRVhQT1JUIGRvdWJsZSBXS1BhZ2VHZXRUZXh0Wm9vbUZh
Y3RvcihXS1BhZ2VSZWYgcGFnZSk7CkluZGV4OiBXZWJLaXQyL1VJUHJvY2Vzcy9jZi9XZWJCYWNr
Rm9yd2FyZExpc3RDRi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0Mi9VSVByb2Nlc3MvY2YvV2Vi
QmFja0ZvcndhcmRMaXN0Q0YuY3BwCShyZXZpc2lvbiAwKQorKysgV2ViS2l0Mi9VSVByb2Nlc3Mv
Y2YvV2ViQmFja0ZvcndhcmRMaXN0Q0YuY3BwCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDExOSBA
QAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBU
SEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NV
UkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgorICovCisKKyNpbmNsdWRlICJXZWJCYWNrRm9yd2FyZExpc3QuaCIKKyNpbmNsdWRl
ICJMb2dnaW5nLmgiCisKK3VzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOworCituYW1lc3BhY2UgV2Vi
S2l0IHsKKworREVGSU5FX1NUQVRJQ19HRVRURVIoQ0ZTdHJpbmdSZWYsIFNlc3Npb25IaXN0b3J5
Q3VycmVudEluZGV4S2V5LCBDRlNUUigiU2Vzc2lvbkhpc3RvcnlDdXJyZW50SW5kZXgiKSk7CitE
RUZJTkVfU1RBVElDX0dFVFRFUihDRlN0cmluZ1JlZiwgU2Vzc2lvbkhpc3RvcnlFbnRyaWVzS2V5
LCBDRlNUUigiU2Vzc2lvbkhpc3RvcnlFbnRyaWVzIikpOworREVGSU5FX1NUQVRJQ19HRVRURVIo
Q0ZTdHJpbmdSZWYsIFNlc3Npb25IaXN0b3J5RW50cnlUaXRsZUtleSwgQ0ZTVFIoIlNlc3Npb25I
aXN0b3J5RW50cnlUaXRsZSIpKTsKK0RFRklORV9TVEFUSUNfR0VUVEVSKENGU3RyaW5nUmVmLCBT
ZXNzaW9uSGlzdG9yeUVudHJ5VVJMS2V5LCBDRlNUUigiU2Vzc2lvbkhpc3RvcnlFbnRyeVVSTCIp
KTsKKworQ0ZEaWN0aW9uYXJ5UmVmIFdlYkJhY2tGb3J3YXJkTGlzdDo6Y3JlYXRlQ0ZEaWN0aW9u
YXJ5UmVwcmVzZW50YXRpb24oV2ViUGFnZVByb3h5OjpXZWJQYWdlUHJveHlTZXNzaW9uU3RhdGVG
aWx0ZXJDYWxsYmFjayBmaWx0ZXIsIHZvaWQqIGNvbnRleHQpIGNvbnN0Cit7CisgICAgUmV0YWlu
UHRyPENGTXV0YWJsZURpY3Rpb25hcnlSZWY+IGRpY3Rpb25hcnkoQWRvcHRDRiwgQ0ZEaWN0aW9u
YXJ5Q3JlYXRlTXV0YWJsZSgwLCAyLCAma0NGVHlwZURpY3Rpb25hcnlLZXlDYWxsQmFja3MsICZr
Q0ZUeXBlRGljdGlvbmFyeVZhbHVlQ2FsbEJhY2tzKSk7CisgICAgCisgICAgUmV0YWluUHRyPENG
TnVtYmVyUmVmPiBjdXJyZW50SW5kZXgoQWRvcHRDRiwgQ0ZOdW1iZXJDcmVhdGUoMCwga0NGTnVt
YmVyU0ludDMyVHlwZSwgJm1fY3VycmVudCkpOworICAgIENGRGljdGlvbmFyeVNldFZhbHVlKGRp
Y3Rpb25hcnkuZ2V0KCksIFNlc3Npb25IaXN0b3J5Q3VycmVudEluZGV4S2V5KCksIGN1cnJlbnRJ
bmRleC5nZXQoKSk7CisgICAgCisgICAgUmV0YWluUHRyPENGTXV0YWJsZUFycmF5UmVmPiBlbnRy
aWVzKEFkb3B0Q0YsIENGQXJyYXlDcmVhdGVNdXRhYmxlKDAsIG1fZW50cmllcy5zaXplKCksICZr
Q0ZUeXBlQXJyYXlDYWxsQmFja3MpKTsKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1fZW50
cmllcy5zaXplKCk7ICsraSkgeworICAgICAgICBSZWZQdHI8V2ViVVJMPiB3ZWJVUkwgPSBXZWJV
Ukw6OmNyZWF0ZShtX2VudHJpZXNbaV0tPnVybCgpKTsKKyAgICAgICAgaWYgKCFmaWx0ZXIodG9B
UEkobV9wYWdlKSwgV0tQYWdlR2V0U2Vzc2lvbkhpc3RvcnlVUkxWYWx1ZVR5cGUoKSwgdG9VUkxS
ZWYobV9lbnRyaWVzW2ldLT5vcmlnaW5hbFVSTCgpLmltcGwoKSksIGNvbnRleHQpKQorICAgICAg
ICAgICAgY29udGludWU7CisKKyAgICAgICAgUmV0YWluUHRyPENGTXV0YWJsZURpY3Rpb25hcnlS
ZWY+IGVudHJ5RGljdGlvbmFyeShBZG9wdENGLCBDRkRpY3Rpb25hcnlDcmVhdGVNdXRhYmxlKDAs
IDIsICZrQ0ZUeXBlRGljdGlvbmFyeUtleUNhbGxCYWNrcywgJmtDRlR5cGVEaWN0aW9uYXJ5VmFs
dWVDYWxsQmFja3MpKTsKKyAgICAgICAgCisgICAgICAgIFJldGFpblB0cjxDRlN0cmluZ1JlZj4g
dXJsKEFkb3B0Q0YsIG1fZW50cmllc1tpXS0+dXJsKCkuY3JlYXRlQ0ZTdHJpbmcoKSk7CisgICAg
ICAgIENGRGljdGlvbmFyeVNldFZhbHVlKGVudHJ5RGljdGlvbmFyeS5nZXQoKSwgU2Vzc2lvbkhp
c3RvcnlFbnRyeVVSTEtleSgpLCB1cmwuZ2V0KCkpOworCisgICAgICAgIFJldGFpblB0cjxDRlN0
cmluZ1JlZj4gdGl0bGUoQWRvcHRDRiwgbV9lbnRyaWVzW2ldLT50aXRsZSgpLmNyZWF0ZUNGU3Ry
aW5nKCkpOworICAgICAgICBDRkRpY3Rpb25hcnlTZXRWYWx1ZShlbnRyeURpY3Rpb25hcnkuZ2V0
KCksIFNlc3Npb25IaXN0b3J5RW50cnlUaXRsZUtleSgpLCB0aXRsZS5nZXQoKSk7CisgICAgCisg
ICAgICAgIENGQXJyYXlBcHBlbmRWYWx1ZShlbnRyaWVzLmdldCgpLCBlbnRyeURpY3Rpb25hcnku
Z2V0KCkpOworICAgIH0KKyAgICAKKyAgICBDRkRpY3Rpb25hcnlTZXRWYWx1ZShkaWN0aW9uYXJ5
LmdldCgpLCBTZXNzaW9uSGlzdG9yeUVudHJpZXNLZXkoKSwgZW50cmllcy5nZXQoKSk7CisKKyAg
ICByZXR1cm4gZGljdGlvbmFyeS5yZWxlYXNlUmVmKCk7Cit9CisKK2Jvb2wgV2ViQmFja0Zvcndh
cmRMaXN0OjpyZXN0b3JlRnJvbUNGRGljdGlvbmFyeVJlcHJlc2VudGF0aW9uKENGRGljdGlvbmFy
eVJlZiBkaWN0aW9uYXJ5KQoreworICAgIENGTnVtYmVyUmVmIGNmSW5kZXggPSAoQ0ZOdW1iZXJS
ZWYpQ0ZEaWN0aW9uYXJ5R2V0VmFsdWUoZGljdGlvbmFyeSwgU2Vzc2lvbkhpc3RvcnlDdXJyZW50
SW5kZXhLZXkoKSk7CisgICAgaWYgKCFjZkluZGV4IHx8IENGR2V0VHlwZUlEKGNmSW5kZXgpICE9
IENGTnVtYmVyR2V0VHlwZUlEKCkgfHwgQ0ZOdW1iZXJJc0Zsb2F0VHlwZShjZkluZGV4KSkgewor
ICAgICAgICBMT0coU2Vzc2lvblN0YXRlLCAiV2ViQmFja0ZvcndhcmRMaXN0IGRpY3Rpb25hcnkg
cmVwcmVzZW50YXRpb24gZG9lcyBub3QgaGF2ZSBhIHZhbGlkIGN1cnJlbnQgaW5kZXgiKTsKKyAg
ICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKyAgICAKKyAgICBpbnQzMl90IGN1cnJlbnRJbmRl
eDsKKyAgICBpZiAoIUNGTnVtYmVyR2V0VmFsdWUoY2ZJbmRleCwga0NGTnVtYmVyU0ludDMyVHlw
ZSwgJmN1cnJlbnRJbmRleCkpIHsKKyAgICAgICAgTE9HKFNlc3Npb25TdGF0ZSwgIldlYkJhY2tG
b3J3YXJkTGlzdCBkaWN0aW9uYXJ5IHJlcHJlc2VudGF0aW9uIGRvZXMgbm90IGhhdmUgYSB2YWxp
ZCBpbnRlZ2VyIGN1cnJlbnQgaW5kZXgiKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0K
KyAgICAKKyAgICBDRkFycmF5UmVmIGNmRW50cmllcyA9IChDRkFycmF5UmVmKUNGRGljdGlvbmFy
eUdldFZhbHVlKGRpY3Rpb25hcnksIFNlc3Npb25IaXN0b3J5RW50cmllc0tleSgpKTsKKyAgICBp
ZiAoIWNmRW50cmllcyB8fCBDRkdldFR5cGVJRChjZkVudHJpZXMpICE9IENGQXJyYXlHZXRUeXBl
SUQoKSkgeworICAgICAgICBMT0coU2Vzc2lvblN0YXRlLCAiV2ViQmFja0ZvcndhcmRMaXN0IGRp
Y3Rpb25hcnkgcmVwcmVzZW50YXRpb24gZG9lcyBub3QgaGF2ZSBhIHZhbGlkIGxpc3Qgb2YgZW50
cmllcyIpOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorICAgIAorICAgIENGSW5kZXgg
c2l6ZSA9IENGQXJyYXlHZXRDb3VudChjZkVudHJpZXMpOworICAgIGZvciAoQ0ZJbmRleCBpID0g
MDsgaSA8IHNpemU7ICsraSkgeworICAgICAgICBDRkRpY3Rpb25hcnlSZWYgZW50cnlEaWN0aW9u
YXJ5ID0gKENGRGljdGlvbmFyeVJlZilDRkFycmF5R2V0VmFsdWVBdEluZGV4KGNmRW50cmllcywg
aSk7CisgICAgICAgIGlmICghZW50cnlEaWN0aW9uYXJ5IHx8IENGR2V0VHlwZUlEKGVudHJ5RGlj
dGlvbmFyeSkgIT0gQ0ZEaWN0aW9uYXJ5R2V0VHlwZUlEKCkpIHsKKyAgICAgICAgICAgIExPRyhT
ZXNzaW9uU3RhdGUsICJXZWJCYWNrRm9yd2FyZExpc3QgZW50cnkgYXJyYXkgZG9lcyBub3QgaGF2
ZSBhIHZhbGlkIGVudHJ5IGF0IGluZGV4ICVpIiwgKGludClpKTsKKyAgICAgICAgICAgIHJldHVy
biBmYWxzZTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgQ0ZTdHJpbmdSZWYgZW50cnlV
UkwgPSAoQ0ZTdHJpbmdSZWYpQ0ZEaWN0aW9uYXJ5R2V0VmFsdWUoZW50cnlEaWN0aW9uYXJ5LCBT
ZXNzaW9uSGlzdG9yeUVudHJ5VVJMS2V5KCkpOworICAgICAgICBpZiAoIWVudHJ5VVJMIHx8IENG
R2V0VHlwZUlEKGVudHJ5VVJMKSAhPSBDRlN0cmluZ0dldFR5cGVJRCgpKSB7CisgICAgICAgICAg
ICBMT0coU2Vzc2lvblN0YXRlLCAiV2ViQmFja0ZvcndhcmRMaXN0IGVudHJ5IGF0IGluZGV4ICVp
IGRvZXMgbm90IGhhdmUgYSB2YWxpZCBVUkwiLCAoaW50KWkpOworICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOworICAgICAgICB9CisKKyAgICAgICAgQ0ZTdHJpbmdSZWYgZW50cnlUaXRsZSA9IChD
RlN0cmluZ1JlZilDRkRpY3Rpb25hcnlHZXRWYWx1ZShlbnRyeURpY3Rpb25hcnksIFNlc3Npb25I
aXN0b3J5RW50cnlUaXRsZUtleSgpKTsKKyAgICAgICAgaWYgKCFlbnRyeVRpdGxlIHx8IENGR2V0
VHlwZUlEKGVudHJ5VGl0bGUpICE9IENGU3RyaW5nR2V0VHlwZUlEKCkpIHsKKyAgICAgICAgICAg
IExPRyhTZXNzaW9uU3RhdGUsICJXZWJCYWNrRm9yd2FyZExpc3QgZW50cnkgYXQgaW5kZXggJWkg
ZG9lcyBub3QgaGF2ZSBhIHZhbGlkIHRpdGxlIiwgKGludClpKTsKKyAgICAgICAgICAgIHJldHVy
biBmYWxzZTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgLy8gRklYTUUgPHJkYXI6Ly9w
cm9ibGVtLzgyNjE2MjQ+IGFuZCBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9NDczNTUgLSAKKyAgICAgICAgLy8gICAgICAgICAgVGhlIGRhdGEgZm9yIHRoZSBhYm92ZSBl
bnRyeSBuZWVkcyB0byBiZSBhZGRlZCB0byB0aGUgZnVsbCBiYWNrL2ZvcndhcmQgbGlzdC4KKyAg
ICAgICAgLy8gICAgICAgICAgV2hlbiB3ZSBoYXZlIGEgc29sdXRpb24gdGhhdCByZXN0b3JlcyB0
aGUgZnVsbCBiYWNrL2ZvcndhcmRsaXN0IHRoZW4gY2F1c2VzIGEgbG9hZCBvZiB0aGUgY3VycmVu
dCBpdGVtLAorICAgICAgICAvLyAgICAgICAgICB3ZSB3aWxsIG5vIGxvbmdlciBuZWVkIHRoaXMu
CisgICAgICAgIGlmIChpID09IGN1cnJlbnRJbmRleCkgeworICAgICAgICAgICAgbV9yZXN0b3Jl
ZEN1cnJlbnRVUkwgPSBlbnRyeVVSTDsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9Cisg
ICAgfQorICAgIHJldHVybiB0cnVlOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKSW5kZXg6
IFdlYktpdDIvVUlQcm9jZXNzL2NmL1dlYlBhZ2VQcm94eUNGLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBX
ZWJLaXQyL1VJUHJvY2Vzcy9jZi9XZWJQYWdlUHJveHlDRi5jcHAJKHJldmlzaW9uIDApCisrKyBX
ZWJLaXQyL1VJUHJvY2Vzcy9jZi9XZWJQYWdlUHJveHlDRi5jcHAJKHJldmlzaW9uIDApCkBAIC0w
LDAgKzEsOTcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0
OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkg
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlks
IE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiV2ViUGFnZVByb3h5LmgiCisKKyNp
bmNsdWRlICJMb2dnaW5nLmgiCisjaW5jbHVkZSAiV2ViQmFja0ZvcndhcmRMaXN0LmgiCisjaW5j
bHVkZSAiV2ViRGF0YS5oIgorCit1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKKworbmFtZXNwYWNl
IFdlYktpdCB7CisKK0RFRklORV9TVEFUSUNfR0VUVEVSKENGU3RyaW5nUmVmLCBTZXNzaW9uSGlz
dG9yeUtleSwgQ0ZTVFIoIlNlc3Npb25IaXN0b3J5IikpOworCitQYXNzUmVmUHRyPFdlYkRhdGE+
IFdlYlBhZ2VQcm94eTo6c2Vzc2lvblN0YXRlRGF0YShXZWJQYWdlUHJveHlTZXNzaW9uU3RhdGVG
aWx0ZXJDYWxsYmFjayBmaWx0ZXIsIHZvaWQqIGNvbnRleHQpIGNvbnN0Cit7CisgICAgUmV0YWlu
UHRyPENGRGljdGlvbmFyeVJlZj4gc2Vzc2lvbkhpc3RvcnlEaWN0aW9uYXJ5KEFkb3B0Q0YsIG1f
YmFja0ZvcndhcmRMaXN0LT5jcmVhdGVDRkRpY3Rpb25hcnlSZXByZXNlbnRhdGlvbihmaWx0ZXIs
IGNvbnRleHQpKTsKKyAgICAKKyAgICAvLyBGb3Igbm93IHdlJ3JlIG9ubHkgc2VyaWFsaXppbmcg
dGhlIGJhY2svZm9yd2FyZCBsaXN0LiAgSWYgdGhhdCBvYmplY3QgaXMgbnVsbCwgdGhlbiB0aGUg
ZW50aXJlIHNlc3Npb25TdGF0ZSBjYW4gYmUgbnVsbC4KKyAgICBpZiAoIXNlc3Npb25IaXN0b3J5
RGljdGlvbmFyeSkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICBSZXRhaW5QdHI8Q0ZNdXRhYmxl
RGljdGlvbmFyeVJlZj4gc3RhdGVEaWN0aW9uYXJ5KEFkb3B0Q0YsIENGRGljdGlvbmFyeUNyZWF0
ZU11dGFibGUoMCwgMSwgJmtDRlR5cGVEaWN0aW9uYXJ5S2V5Q2FsbEJhY2tzLCAma0NGVHlwZURp
Y3Rpb25hcnlWYWx1ZUNhbGxCYWNrcykpOworICAgIENGRGljdGlvbmFyeVNldFZhbHVlKHN0YXRl
RGljdGlvbmFyeS5nZXQoKSwgU2Vzc2lvbkhpc3RvcnlLZXkoKSwgc2Vzc2lvbkhpc3RvcnlEaWN0
aW9uYXJ5LmdldCgpKTsKKyAgICAKKyAgICBSZXRhaW5QdHI8Q0ZEYXRhUmVmPiBzdGF0ZUNGRGF0
YShBZG9wdENGLCBDRlByb3BlcnR5TGlzdENyZWF0ZURhdGEoMCwgc3RhdGVEaWN0aW9uYXJ5Lmdl
dCgpLCBrQ0ZQcm9wZXJ0eUxpc3RCaW5hcnlGb3JtYXRfdjFfMCwgMCwgMCkpOworCisgICAgQ0ZJ
bmRleCBsZW5ndGggPSBDRkRhdGFHZXRMZW5ndGgoc3RhdGVDRkRhdGEuZ2V0KCkpOworICAgIFZl
Y3Rvcjx1bnNpZ25lZCBjaGFyPiBzdGF0ZVZlY3RvcihsZW5ndGgpOworICAgIENGRGF0YUdldEJ5
dGVzKHN0YXRlQ0ZEYXRhLmdldCgpLCBDRlJhbmdlTWFrZSgwLCBsZW5ndGgpLCBzdGF0ZVZlY3Rv
ci5kYXRhKCkpOworICAgIFJlZlB0cjxXZWJEYXRhPiBzdGF0ZVdlYkRhdGEgPSBXZWJEYXRhOjpj
cmVhdGUoc3RhdGVWZWN0b3IpOworICAgIHJldHVybiBzdGF0ZVdlYkRhdGEucmVsZWFzZSgpOwor
fQorCit2b2lkIFdlYlBhZ2VQcm94eTo6cmVzdG9yZUZyb21TZXNzaW9uU3RhdGVEYXRhKFdlYkRh
dGEqIHdlYkRhdGEpCit7CisgICAgaWYgKCF3ZWJEYXRhKQorICAgICAgICByZXR1cm47CisgICAg
CisgICAgUmV0YWluUHRyPENGRGF0YVJlZj4gZGF0YShBZG9wdENGLCBDRkRhdGFDcmVhdGUoMCwg
d2ViRGF0YS0+Ynl0ZXMoKSwgd2ViRGF0YS0+c2l6ZSgpKSk7CisKKyAgICBDRkVycm9yUmVmIHBy
b3BlcnR5TGlzdEVycm9yID0gMDsKKyAgICBSZXRhaW5QdHI8Q0ZQcm9wZXJ0eUxpc3RSZWY+IHBy
b3BlcnR5TGlzdChBZG9wdENGLCBDRlByb3BlcnR5TGlzdENyZWF0ZVdpdGhEYXRhKDAsIGRhdGEu
Z2V0KCksIGtDRlByb3BlcnR5TGlzdEltbXV0YWJsZSwgMCwgJnByb3BlcnR5TGlzdEVycm9yKSk7
CisgICAgaWYgKHByb3BlcnR5TGlzdEVycm9yKSB7CisgICAgICAgIExPRyhTZXNzaW9uU3RhdGUs
ICJDb3VsZCBub3QgcmVhZCBzZXNzaW9uIHN0YXRlIHByb3BlcnR5IGxpc3QiKTsKKyAgICAgICAg
cmV0dXJuOworICAgIH0KKworICAgIGlmICghcHJvcGVydHlMaXN0KQorICAgICAgICByZXR1cm47
CisgICAgICAgIAorICAgIGlmIChDRkdldFR5cGVJRChwcm9wZXJ0eUxpc3QuZ2V0KCkpICE9IENG
RGljdGlvbmFyeUdldFR5cGVJRCgpKSB7CisgICAgICAgIExPRyhTZXNzaW9uU3RhdGUsICJTZXNz
aW9uU3RhdGUgcHJvcGVydHkgbGlzdCBpcyBub3QgYSBDRkRpY3Rpb25hcnlSZWYgKCVpKSAtIGl0
cyBDRlR5cGVJRCBpcyAlaSIsIChpbnQpQ0ZEaWN0aW9uYXJ5R2V0VHlwZUlEKCksIChpbnQpQ0ZH
ZXRUeXBlSUQocHJvcGVydHlMaXN0LmdldCgpKSk7CisgICAgICAgIHJldHVybjsKKyAgICB9Cisg
ICAgCisgICAgQ0ZUeXBlUmVmIHNlc3Npb25IaXN0b3J5UmVmID0gQ0ZEaWN0aW9uYXJ5R2V0VmFs
dWUoc3RhdGljX2Nhc3Q8Q0ZEaWN0aW9uYXJ5UmVmPihwcm9wZXJ0eUxpc3QuZ2V0KCkpLCBTZXNz
aW9uSGlzdG9yeUtleSgpKTsKKyAgICBpZiAoIXNlc3Npb25IaXN0b3J5UmVmIHx8IENGR2V0VHlw
ZUlEKHNlc3Npb25IaXN0b3J5UmVmKSAhPSBDRkRpY3Rpb25hcnlHZXRUeXBlSUQoKSkgeworICAg
ICAgICBMT0coU2Vzc2lvblN0YXRlLCAiU2Vzc2lvblN0YXRlIGRpY3Rpb25hcnkgZG9lcyBub3Qg
Y29udGFpbiBhIFNlc3Npb25IaXN0b3J5RGljdGlvbmFyeSBrZXksIGl0IGlzIG9mIHRoZSB3cm9u
ZyB0eXBlIik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgCisgICAgQ0ZEaWN0aW9uYXJ5
UmVmIHNlc3Npb25IaXN0b3J5RGljdGlvbmFyeSA9IHN0YXRpY19jYXN0PENGRGljdGlvbmFyeVJl
Zj4oc2Vzc2lvbkhpc3RvcnlSZWYpOworICAgIGlmICghbV9iYWNrRm9yd2FyZExpc3QtPnJlc3Rv
cmVGcm9tQ0ZEaWN0aW9uYXJ5UmVwcmVzZW50YXRpb24oc2Vzc2lvbkhpc3RvcnlEaWN0aW9uYXJ5
KSkgeworICAgICAgICBMT0coU2Vzc2lvblN0YXRlLCAiRmFpbGVkIHRvIHJlc3RvcmUgYmFjay9m
b3J3YXJkIGxpc3QgZnJvbSBTZXNzaW9uSGlzdG9yeURpY3Rpb25hcnkiKTsKKyAgICAgICAgcmV0
dXJuOworICAgIH0KKworICAgIC8vIEZJWE1FOiBXaGVuIHdlIGhhdmUgYSBzb2x1dGlvbiBmb3Ig
cmVzdG9yaW5nIHRoZSBmdWxsIGJhY2svZm9yd2FyZCBsaXN0IHRoZW4gY2F1c2luZyBhIGxvYWQg
b2YgdGhlIGN1cnJlbnQgaXRlbSwKKyAgICAvLyAgICAgICAgd2Ugd2lsbCB0cmlnZ2VyIHRoYXQg
bG9hZCBoZXJlLiAgVW50aWwgdGhlbiwgd2UgdXNlIHRoZSAicmVzdG9yZWQgY3VycmVudCBVUkwi
IHdoaWNoIGNhbiBsYXRlciBiZSByZW1vdmVkLgorICAgIGxvYWRVUkwobV9iYWNrRm9yd2FyZExp
c3QtPnJlc3RvcmVkQ3VycmVudFVSTCgpKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0Cklu
ZGV4OiBXZWJLaXQyL1dlYktpdDIueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvago9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBXZWJLaXQyL1dlYktpdDIueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkocmV2aXNpb24g
NjkzMjMpCisrKyBXZWJLaXQyL1dlYktpdDIueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkod29y
a2luZyBjb3B5KQpAQCAtMTQwLDYgKzE0MCw4IEBACiAJCTUxNkE0QTVEMTIwQTJDQ0QwMEMwNUI3
RiAvKiBXZWJFcnJvci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gNTE2QTRBNUIxMjBBMkNDRDAwQzA1QjdGIC8qIFdlYkVycm9yLmggKi87IH07CiAJCTUx
QTdGMkYzMTI1QkY4MjAwMDhBRUIxRCAvKiBMb2dnaW5nLmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MUE3RjJGMjEyNUJGODIwMDA4QUVCMUQgLyogTG9n
Z2luZy5oICovOyB9OwogCQk1MUE3RjJGNTEyNUJGOEQ0MDA4QUVCMUQgLyogTG9nZ2luZy5jcHAg
aW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MUE3RjJGNDEy
NUJGOEQ0MDA4QUVCMUQgLyogTG9nZ2luZy5jcHAgKi87IH07CisJCTUxQjMwMDUwMTI1MjlEMEUw
MDBCNUNBMCAvKiBXZWJCYWNrRm9yd2FyZExpc3RDRi5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MUIzMDA0RTEyNTI5RDBFMDAwQjVDQTAgLyogV2Vi
QmFja0ZvcndhcmRMaXN0Q0YuY3BwICovOyB9OworCQk1MUIzMDA1MTEyNTI5RDBFMDAwQjVDQTAg
LyogV2ViUGFnZVByb3h5Q0YuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gNTFCMzAwNEYxMjUyOUQwRTAwMEI1Q0EwIC8qIFdlYlBhZ2VQcm94eUNGLmNw
cCAqLzsgfTsKIAkJNkQ4QTkxQTYxMUYwRUZEMTAwREQwMUZFIC8qIGNvbS5hcHBsZS5XZWJQcm9j
ZXNzLnNiIGluIFJlc291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA2
RDhBOTFBNTExRjBFRkQxMDBERDAxRkUgLyogY29tLmFwcGxlLldlYlByb2Nlc3Muc2IgKi87IH07
CiAJCTc2MkI3NDhEMTIwQkM3NUMwMDgxOTMzOSAvKiBXS1ByZWZlcmVuY2VzUHJpdmF0ZS5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNzYyQjc0ODQxMjBC
QkEyRDAwODE5MzM5IC8qIFdLUHJlZmVyZW5jZXNQcml2YXRlLmggKi87IHNldHRpbmdzID0ge0FU
VFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJNzYyQjc0QUYxMjBCQzk0RjAwODE5MzM5
IC8qIFdLUHJlZmVyZW5jZXNQcml2YXRlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDc2MkI3NDlEMTIwQkM4RUEwMDgxOTMzOSAvKiBXS1ByZWZlcmVu
Y2VzUHJpdmF0ZS5jcHAgKi87IH07CkBAIC01OTAsNiArNTkyLDggQEAKIAkJNTE2QTRBNUIxMjBB
MkNDRDAwQzA1QjdGIC8qIFdlYkVycm9yLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0
aCA9IFdlYkVycm9yLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTUxQTdGMkYyMTI1
QkY4MjAwMDhBRUIxRCAvKiBMb2dnaW5nLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0
aCA9IExvZ2dpbmcuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTFBN0YyRjQxMjVC
RjhENDAwOEFFQjFEIC8qIExvZ2dpbmcuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3Bw
OyBwYXRoID0gTG9nZ2luZy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTUxQjMw
MDRFMTI1MjlEMEUwMDBCNUNBMCAvKiBXZWJCYWNrRm9yd2FyZExpc3RDRi5jcHAgKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBXZWJCYWNrRm9yd2FyZExpc3RDRi5jcHA7IHBh
dGggPSBjZi9XZWJCYWNrRm9yd2FyZExpc3RDRi5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CisJCTUxQjMwMDRGMTI1MjlEMEUwMDBCNUNBMCAvKiBXZWJQYWdlUHJveHlDRi5jcHAgKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBXZWJQYWdlUHJveHlDRi5jcHA7IHBh
dGggPSBjZi9XZWJQYWdlUHJveHlDRi5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CTVEQUQ3Mjk0MTE2RkY3MEIwMEVFNTM5NiAvKiBXZWJQcm9jZXNzLnhjY29uZmlnICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gdGV4dC54Y2NvbmZpZzsgcGF0aCA9IFdlYlByb2Nlc3MueGNjb25maWc7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCTVEQUQ3M0YxMTE2RkY5MEMwMEVFNTM5NiAvKiBCYXNlVGFyZ2V0
LnhjY29uZmlnICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dC54Y2NvbmZpZzsgcGF0aCA9IEJhc2VUYXJnZXQueGNj
b25maWc7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTZEOEE5MUE1MTFGMEVGRDEwMERE
MDFGRSAvKiBjb20uYXBwbGUuV2ViUHJvY2Vzcy5zYiAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQ7IG5hbWUgPSBj
b20uYXBwbGUuV2ViUHJvY2Vzcy5zYjsgcGF0aCA9IFdlYlByb2Nlc3MvY29tLmFwcGxlLldlYlBy
b2Nlc3Muc2I7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC02MzcsNyArNjQxLDcgQEAK
IAkJQkMxMTFBRTMxMTJGNUMyNjAwMzM3QkFCIC8qIFdlYlByb2Nlc3MuY3BwICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gV2ViUHJvY2Vzcy5jcHA7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCUJDMTExQjA4MTEyRjVFM0MwMDMzN0JBQiAvKiBSZXNwb25zaXZlbmVz
c1RpbWVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFJlc3BvbnNp
dmVuZXNzVGltZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlCQzExMUIwQTEx
MkY1RTRGMDAzMzdCQUIgLyogV2ViRnJhbWVQcm94eS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmNwcC5jcHA7IHBhdGggPSBXZWJGcmFtZVByb3h5LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKLQkJQkMxMTFCMEIxMTJGNUU0RjAwMzM3QkFCIC8qIFdlYlBhZ2VQcm94eS5jcHAgKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBXZWJQYWdlUHJveHkuY3BwOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OworCQlCQzExMUIwQjExMkY1RTRGMDAzMzdCQUIgLyogV2Vi
UGFnZVByb3h5LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBleHBsaWNpdEZpbGVU
eXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBmaWxlRW5jb2RpbmcgPSA0OyBwYXRoID0gV2ViUGFn
ZVByb3h5LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQkMxMTFCMEMxMTJGNUU0
RjAwMzM3QkFCIC8qIFdlYlByb2Nlc3NNYW5hZ2VyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Y3BwLmNwcDsgcGF0aCA9IFdlYlByb2Nlc3NNYW5hZ2VyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJQkMxMTFCMEQxMTJGNUU0RjAwMzM3QkFCIC8qIFdlYlByb2Nlc3NQcm94eS5j
cHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBXZWJQcm9jZXNzUHJveHku
Y3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlCQzExMUIxQjExMkY1RkU2MDAzMzdC
QUIgLyogUHJvY2Vzc0xhdW5jaGVyTWFjLm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2Jq
Y3BwOyBwYXRoID0gUHJvY2Vzc0xhdW5jaGVyTWFjLm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwpAQCAtMTIxNCw2ICsxMjE4LDE1IEBACiAJCQluYW1lID0gIk90aGVyIFNvdXJjZXMiOwog
CQkJc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsKIAkJfTsKKwkJNTFCMzAwNEQxMjUyOUNGNTAwMEI1
Q0EwIC8qIGNmICovID0geworCQkJaXNhID0gUEJYR3JvdXA7CisJCQljaGlsZHJlbiA9ICgKKwkJ
CQk1MUIzMDA0RTEyNTI5RDBFMDAwQjVDQTAgLyogV2ViQmFja0ZvcndhcmRMaXN0Q0YuY3BwICov
LAorCQkJCTUxQjMwMDRGMTI1MjlEMEUwMDBCNUNBMCAvKiBXZWJQYWdlUHJveHlDRi5jcHAgKi8s
CisJCQkpOworCQkJbmFtZSA9IGNmOworCQkJc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsKKwkJfTsK
IAkJQkMwMzJENUMxMEY0MzZENTAwNThDMTVBIC8qIFdlYlByb2Nlc3MgKi8gPSB7CiAJCQlpc2Eg
PSBQQlhHcm91cDsKIAkJCWNoaWxkcmVuID0gKApAQCAtMTI4Nyw2ICsxMzAwLDcgQEAKIAkJCWlz
YSA9IFBCWEdyb3VwOwogCQkJY2hpbGRyZW4gPSAoCiAJCQkJQkMwMzJEQzQxMEY0Mzg3QzAwNThD
MTVBIC8qIEFQSSAqLywKKwkJCQk1MUIzMDA0RDEyNTI5Q0Y1MDAwQjVDQTAgLyogY2YgKi8sCiAJ
CQkJQkMxMTFCMTgxMTJGNUZCNDAwMzM3QkFCIC8qIExhdW5jaGVyICovLAogCQkJCUJDQ0YwODVD
MTEzRjNCNzUwMEM2NTBDNSAvKiBtYWMgKi8sCiAJCQkJMUFFRkNDMDUxMUQwMUYzNDAwODIxOUQz
IC8qIFBsdWdpbnMgKi8sCkBAIC0yMjM2LDYgKzIyNTAsOCBAQAogCQkJCTFBMDQzRjY5MTI1MTRE
OEIwMEZGQkZCNSAvKiBXZWJQcm9jZXNzQ29ubmVjdGlvbk1lc3NhZ2VSZWNlaXZlci5jcHAgaW4g
U291cmNlcyAqLywKIAkJCQkxQThFRjRDQzEyNTI0MDM3MDBGNzA2N0YgLyogUGx1Z2luQ29udHJv
bGxlclByb3h5LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUMwMkJGRjFFMTI1MTUwMkUwMDlDQ0JF
QSAvKiBOYXRpdmVXZWJLZXlib2FyZEV2ZW50TWFjLm1tIGluIFNvdXJjZXMgKi8sCisJCQkJNTFC
MzAwNTAxMjUyOUQwRTAwMEI1Q0EwIC8qIFdlYkJhY2tGb3J3YXJkTGlzdENGLmNwcCBpbiBTb3Vy
Y2VzICovLAorCQkJCTUxQjMwMDUxMTI1MjlEMEUwMDBCNUNBMCAvKiBXZWJQYWdlUHJveHlDRi5j
cHAgaW4gU291cmNlcyAqLywKIAkJCQkxQThFRjk2RTEyNTJBRjZCMDBGNzA2N0YgLyogUGx1Z2lu
Q29udHJvbGxlclByb3h5TWVzc2FnZVJlY2VpdmVyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTFB
OEVGQTcwMTI1MkI4NDEwMEY3MDY3RiAvKiBQbHVnaW5Qcm94eU1lc3NhZ2VSZWNlaXZlci5jcHAg
aW4gU291cmNlcyAqLywKIAkJCQkxQThFRkRGRTEyNTNDQjZFMDBGNzA2N0YgLyogRGF0YVJlZmVy
ZW5jZS5jcHAgaW4gU291cmNlcyAqLywKSW5kZXg6IFdlYktpdDIvd2luL1dlYktpdDIudmNwcm9q
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFdlYktpdDIvd2luL1dlYktpdDIudmNwcm9qCShyZXZpc2lvbiA2OTMy
MykKKysrIFdlYktpdDIvd2luL1dlYktpdDIudmNwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC0xNzA1
LDYgKzE3MDUsMTggQEAKIAkJCQk8L0ZpbHRlcj4NCiAJCQk8L0ZpbHRlcj4NCiAJCQk8RmlsdGVy
DQorCQkJCU5hbWU9ImNmIg0KKwkJCQk+DQorCQkJCTxGaWxlDQorCQkJCQlSZWxhdGl2ZVBhdGg9
Ii4uXFVJUHJvY2Vzc1xjZlxXZWJCYWNrRm9yd2FyZExpc3RDRi5jcHAiDQorCQkJCQk+DQorCQkJ
CTwvRmlsZT4NCisJCQkJPEZpbGUNCisJCQkJCVJlbGF0aXZlUGF0aD0iLi5cVUlQcm9jZXNzXGNm
XFdlYlBhZ2VQcm94eUNGLmNwcCINCisJCQkJCT4NCisJCQkJPC9GaWxlPg0KKwkJCTwvRmlsdGVy
Pg0KKwkJCTxGaWx0ZXINCiAJCQkJTmFtZT0iTGF1bmNoZXIiDQogCQkJCT4NCiAJCQkJPEZpbGUN
Cg==
</data>
<flag name="review"
          id="59903"
          type_id="1"
          status="+"
          setter="darin"
    />
    <flag name="commit-queue"
          id="59904"
          type_id="3"
          status="-"
          setter="beidson"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>70476</attachid>
            <date>2010-10-11 14:56:20 -0700</date>
            <delta_ts>2010-10-11 15:22:14 -0700</delta_ts>
            <desc>Patch v4 - All of Darin&apos;s feedback, plus a versioning header Sam and I discussed.</desc>
            <filename>patch.txt</filename>
            <type>text/plain</type>
            <size>26454</size>
            <attacher name="Brady Eidson">beidson</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYktpdDIvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdDIvQ2hhbmdlTG9n
CShyZXZpc2lvbiA2OTUyNykKKysrIFdlYktpdDIvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsNDEgQEAKKzIwMTAtMTAtMTEgIEJyYWR5IEVpZHNvbiAgPGJlaWRzb25AYXBwbGUu
Y29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IERhcmluIEFkbGVyIGFuZCAuLi4KKworICAgICAg
ICA8cmRhcjovL3Byb2JsZW0vODI2MjIwMj4gYW5kIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD00NzM1NAorICAgICAgICBOZWVkIFdLUGFnZSBBUEkgZm9yIHNlcmlhbGl6
aW5nIGFuZCByZXN0b3JpbmcgYSBwYWdlJ3Mgc3RhdGUKKworICAgICAgICAqIFdlYktpdDIueGNv
ZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgKiB3aW4vV2ViS2l0Mi52Y3Byb2o6CisK
KyAgICAgICAgKiBXZWJLaXQyUHJlZml4Lmg6IEFkZCBERUZJTkVfU1RBVElDX0dFVFRFUiBjb252
ZW5pZW5jZS4KKworICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvQy9XS1BhZ2UuY3BwOgorICAgICAg
ICAoV0tQYWdlR2V0U2Vzc2lvbkhpc3RvcnlVUkxWYWx1ZVR5cGUpOgorICAgICAgICAoV0tQYWdl
Q29weVNlc3Npb25TdGF0ZSk6IENoYW5nZSB0byB1c2UgYSBmaWx0ZXIgZnVuY3Rpb24gdG8gYWxs
b3cgdGhlIEFQSSBjbGllbnQgdG8gZGVjaWRlIHdoYXQKKyAgICAgICAgICB0eXBlcyBvZiB0aGlu
Z3MgZ2V0IHNlcmlhbGl6ZWQgYXMgc2Vzc2lvbiBzdGF0ZS4gIEZvciBub3cgaXQgb25seSBmaWx0
ZXJzIGJhc2VkIG9uIFVSTCBpbgorICAgICAgICAgIHNlc3Npb24gaGlzdG9yeSBlbnRyaWVzLgor
ICAgICAgICAoV0tQYWdlUmVzdG9yZUZyb21TZXNzaW9uU3RhdGUpOgorICAgICAgICAqIFVJUHJv
Y2Vzcy9BUEkvQy9XS1BhZ2UuaDoKKworICAgICAgICAqIFVJUHJvY2Vzcy9XZWJCYWNrRm9yd2Fy
ZExpc3QuaDoKKyAgICAgICAgKFdlYktpdDo6V2ViQmFja0ZvcndhcmRMaXN0OjpyZXN0b3JlZEN1
cnJlbnRVUkwpOgorCisgICAgICAgICogVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5jcHA6CisgICAg
ICAgIChXZWJLaXQ6OldlYlBhZ2VQcm94eTo6c2Vzc2lvblN0YXRlRGF0YSk6IExlYXZlIHN0dWJz
IGZvciBub24tQ0YgcGxhdGZvcm0gYnVpbGRzLgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlUHJv
eHk6OnJlc3RvcmVGcm9tU2Vzc2lvblN0YXRlRGF0YSk6IERpdHRvLgorICAgICAgICAqIFVJUHJv
Y2Vzcy9XZWJQYWdlUHJveHkuaDoKKworICAgICAgICAqIFVJUHJvY2Vzcy9jZjogQWRkZWQuCisg
ICAgICAgICogVUlQcm9jZXNzL2NmL1dlYkJhY2tGb3J3YXJkTGlzdENGLmNwcDogQWRkZWQuCisg
ICAgICAgIChXZWJLaXQ6OldlYkJhY2tGb3J3YXJkTGlzdDo6Y3JlYXRlQ0ZEaWN0aW9uYXJ5UmVw
cmVzZW50YXRpb24pOiBTdG9yZSBiYWNrL2ZvcndhcmQgbGlzdCBpbmZvIENGIHByb3BlcnR5IGxp
c3Qgc3R5bGUuCisgICAgICAgIChXZWJLaXQ6OldlYkJhY2tGb3J3YXJkTGlzdDo6cmVzdG9yZUZy
b21DRkRpY3Rpb25hcnlSZXByZXNlbnRhdGlvbik6IFJlc3RvcmUgZnJvbSB0aGF0IGRhdGEgLSBi
dXQgZm9yIG5vdyB3ZSBkb24ndCAKKyAgICAgICAgICBhY3R1YWxseSBwdXQgdGhlIGJhY2svZm9y
d2FyZCBsaXN0IGJhY2sgaW50byBwbGFjZSBhbmQgaW5zdGVhZCBvbmx5IHJlbWVtYmVyIHRoZSBj
dXJyZW50IFVSTC4KKworICAgICAgICAqIFVJUHJvY2Vzcy9jZi9XZWJQYWdlUHJveHlDRi5jcHA6
IEFkZGVkLgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlUHJveHk6OnNlc3Npb25TdGF0ZURhdGEp
OiBDcmVhdGUgdGhlIHNlc3Npb25zIHN0YXRlIGRhdGUgQ0YgcHJvcGVydHkgbGlzdCBzdHlsZSwg
cGx1cyBhIHZlcnNpb24gaGVhZGVyLgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlUHJveHk6OnJl
c3RvcmVGcm9tU2Vzc2lvblN0YXRlRGF0YSk6IFJlc3RvcmUgZnJvbSB0aGF0IHByb3BlcnR5IGxp
c3Qgc3R5bGUgc2Vzc2lvbiBzdGF0ZSBkYXRhLgorCiAyMDEwLTEwLTExICBKZXNzaWUgQmVybGlu
ICA8amJlcmxpbkBhcHBsZS5jb20+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgRGFyaW4gQWRsZXIu
CkluZGV4OiBXZWJLaXQyL1dlYktpdDJQcmVmaXguaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQyL1dl
YktpdDJQcmVmaXguaAkocmV2aXNpb24gNjk1MjEpCisrKyBXZWJLaXQyL1dlYktpdDJQcmVmaXgu
aAkod29ya2luZyBjb3B5KQpAQCAtMzcsNiArMzcsMTQgQEAKICNkZWZpbmUgRVhURVJOX0NfRU5E
CiAjZW5kaWYKIAorLy8gRm9yIGRlZmluaW5nIGdldHRlcnMgdG8gYSBzdGF0aWMgdmFsdWUsIHdo
ZXJlIHRoZSBnZXR0ZXJzIGhhdmUgaW50ZXJuYWwgbGlua2FnZQorI2RlZmluZSBERUZJTkVfU1RB
VElDX0dFVFRFUih0eXBlLCBuYW1lLCBhcmd1bWVudHMpIFwKK3N0YXRpYyBjb25zdCB0eXBlJiBu
YW1lKCkgXAoreyBcCisgICAgREVGSU5FX1NUQVRJQ19MT0NBTCh0eXBlLCBuYW1lIyNWYWx1ZSwg
YXJndW1lbnRzKTsgXAorICAgIHJldHVybiBuYW1lIyNWYWx1ZTsgXAorfQorCiAjaWYgZGVmaW5l
ZChCVUlMRElOR19RVF9fKQogCiAjZGVmaW5lIFdURl9VU0VfSlNDIDEKSW5kZXg6IFdlYktpdDIv
VUlQcm9jZXNzL1dlYkJhY2tGb3J3YXJkTGlzdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdDIvVUlQ
cm9jZXNzL1dlYkJhY2tGb3J3YXJkTGlzdC5oCShyZXZpc2lvbiA2OTUyMSkKKysrIFdlYktpdDIv
VUlQcm9jZXNzL1dlYkJhY2tGb3J3YXJkTGlzdC5oCSh3b3JraW5nIGNvcHkpCkBAIC0yOSwxNCAr
MjksMTMgQEAKICNpbmNsdWRlICJBUElPYmplY3QuaCIKICNpbmNsdWRlICJJbW11dGFibGVBcnJh
eS5oIgogI2luY2x1ZGUgIldlYkJhY2tGb3J3YXJkTGlzdEl0ZW0uaCIKKyNpbmNsdWRlICJXZWJQ
YWdlUHJveHkuaCIKICNpbmNsdWRlIDx3dGYvUGFzc1JlZlB0ci5oPgogI2luY2x1ZGUgPHd0Zi9S
ZWZQdHIuaD4KICNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CiAKIG5hbWVzcGFjZSBXZWJLaXQgewog
Ci1jbGFzcyBXZWJQYWdlUHJveHk7Ci0KIHR5cGVkZWYgVmVjdG9yPFJlZlB0cjxXZWJCYWNrRm9y
d2FyZExpc3RJdGVtPiA+IEJhY2tGb3J3YXJkTGlzdEl0ZW1WZWN0b3I7CiAKIC8qCkBAIC03Miw2
ICs3MSwxMSBAQCBwdWJsaWM6CiAgICAgUGFzc1JlZlB0cjxJbW11dGFibGVBcnJheT4gYmFja0xp
c3RBc0ltbXV0YWJsZUFycmF5V2l0aExpbWl0KHVuc2lnbmVkIGxpbWl0KTsKICAgICBQYXNzUmVm
UHRyPEltbXV0YWJsZUFycmF5PiBmb3J3YXJkTGlzdEFzSW1tdXRhYmxlQXJyYXlXaXRoTGltaXQo
dW5zaWduZWQgbGltaXQpOwogCisjaWYgUExBVEZPUk0oQ0YpCisgICAgQ0ZEaWN0aW9uYXJ5UmVm
IGNyZWF0ZUNGRGljdGlvbmFyeVJlcHJlc2VudGF0aW9uKFdlYlBhZ2VQcm94eTo6V2ViUGFnZVBy
b3h5U2Vzc2lvblN0YXRlRmlsdGVyQ2FsbGJhY2ssIHZvaWQqIGNvbnRleHQpIGNvbnN0OworICAg
IGJvb2wgcmVzdG9yZUZyb21DRkRpY3Rpb25hcnlSZXByZXNlbnRhdGlvbihDRkRpY3Rpb25hcnlS
ZWYpOworI2VuZGlmCisKIHByaXZhdGU6CiAgICAgV2ViQmFja0ZvcndhcmRMaXN0KFdlYlBhZ2VQ
cm94eSopOwogCkBAIC04Myw2ICs4NywxNCBAQCBwcml2YXRlOgogICAgIHVuc2lnbmVkIG1fY2Fw
YWNpdHk7CiAgICAgYm9vbCBtX2Nsb3NlZDsKICAgICBib29sIG1fZW5hYmxlZDsKKyAgICAKKy8v
IEZJWE1FIC0gPHJkYXI6Ly9wcm9ibGVtLzgyNjE2MjQ+IGFuZCBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NDczNTUgLSAKKy8vIFdoZW4gd2UgaGF2ZSBhIHNvbHV0aW9u
IGZvciByZXN0b3JpbmcgdGhlIGZ1bGwgYmFjay9mb3J3YXJkIGxpc3QgCisvLyB0aGVuIGNhdXNp
bmcgYSBsb2FkIG9mIHRoZSBjdXJyZW50IGl0ZW0sIHdlIHdpbGwgbm8gbG9uZ2VyIG5lZWQgdGhp
cy4KK3B1YmxpYzoKKyAgICBjb25zdCBXVEY6OlN0cmluZyYgcmVzdG9yZWRDdXJyZW50VVJMKCkg
Y29uc3QgeyByZXR1cm4gbV9yZXN0b3JlZEN1cnJlbnRVUkw7IH0KK3ByaXZhdGU6CisgICAgV1RG
OjpTdHJpbmcgbV9yZXN0b3JlZEN1cnJlbnRVUkw7CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJL
aXQKSW5kZXg6IFdlYktpdDIvVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gV2ViS2l0Mi9VSVByb2Nlc3MvV2ViUGFnZVByb3h5LmNwcAkocmV2aXNpb24gNjk1MjEpCisr
KyBXZWJLaXQyL1VJUHJvY2Vzcy9XZWJQYWdlUHJveHkuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00
NTAsMTYgKzQ1MCwxOCBAQCB2b2lkIFdlYlBhZ2VQcm94eTo6dGVybWluYXRlUHJvY2VzcygpCiAg
ICAgcHJvY2VzcygpLT50ZXJtaW5hdGUoKTsKIH0KIAotUGFzc1JlZlB0cjxXZWJEYXRhPiBXZWJQ
YWdlUHJveHk6OnNlc3Npb25TdGF0ZSgpIGNvbnN0CisjaWYgIVBMQVRGT1JNKENGKQorUGFzc1Jl
ZlB0cjxXZWJEYXRhPiBXZWJQYWdlUHJveHk6OnNlc3Npb25TdGF0ZURhdGEoV2ViUGFnZVByb3h5
U2Vzc2lvblN0YXRlRmlsdGVyQ2FsbGJhY2ssIHZvaWQqIGNvbnRleHQpIGNvbnN0CiB7CiAgICAg
Ly8gRklYTUU6IFJldHVybiBzZXNzaW9uIHN0YXRlIGRhdGEgZm9yIHNhdmluZyBQYWdlIHN0YXRl
LgogICAgIHJldHVybiAwOwogfQogCi12b2lkIFdlYlBhZ2VQcm94eTo6cmVzdG9yZUZyb21TZXNz
aW9uU3RhdGUoV2ViRGF0YSopCit2b2lkIFdlYlBhZ2VQcm94eTo6cmVzdG9yZUZyb21TZXNzaW9u
U3RhdGVEYXRhKFdlYkRhdGEqKQogewogICAgIC8vIEZJWE1FOiBSZXN0b3JlIHRoZSBQYWdlIGZy
b20gdGhlIHBhc3NlZCBpbiBzZXNzaW9uIHN0YXRlIGRhdGEuCiB9CisjZW5kaWYKIAogdm9pZCBX
ZWJQYWdlUHJveHk6OnNldFRleHRab29tRmFjdG9yKGRvdWJsZSB6b29tRmFjdG9yKQogewpJbmRl
eDogV2ViS2l0Mi9VSVByb2Nlc3MvV2ViUGFnZVByb3h5LmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0
Mi9VSVByb2Nlc3MvV2ViUGFnZVByb3h5LmgJKHJldmlzaW9uIDY5NTIxKQorKysgV2ViS2l0Mi9V
SVByb2Nlc3MvV2ViUGFnZVByb3h5LmgJKHdvcmtpbmcgY29weSkKQEAgLTE2NCw5ICsxNjQsMTAg
QEAgcHVibGljOgogICAgIHZvaWQgc2V0Q3VzdG9tVXNlckFnZW50KGNvbnN0IFN0cmluZyYpOwog
CiAgICAgdm9pZCB0ZXJtaW5hdGVQcm9jZXNzKCk7Ci0gICAgCi0gICAgUGFzc1JlZlB0cjxXZWJE
YXRhPiBzZXNzaW9uU3RhdGUoKSBjb25zdDsKLSAgICB2b2lkIHJlc3RvcmVGcm9tU2Vzc2lvblN0
YXRlKFdlYkRhdGEqKTsKKworICAgIHR5cGVkZWYgYm9vbCAoKldlYlBhZ2VQcm94eVNlc3Npb25T
dGF0ZUZpbHRlckNhbGxiYWNrKShXS1BhZ2VSZWYsIFdLU3RyaW5nUmVmIHR5cGUsIFdLVHlwZVJl
ZiBvYmplY3QsIHZvaWQqKTsKKyAgICBQYXNzUmVmUHRyPFdlYkRhdGE+IHNlc3Npb25TdGF0ZURh
dGEoV2ViUGFnZVByb3h5U2Vzc2lvblN0YXRlRmlsdGVyQ2FsbGJhY2ssIHZvaWQqIGNvbnRleHQp
IGNvbnN0OworICAgIHZvaWQgcmVzdG9yZUZyb21TZXNzaW9uU3RhdGVEYXRhKFdlYkRhdGEqKTsK
IAogICAgIGRvdWJsZSB0ZXh0Wm9vbUZhY3RvcigpIGNvbnN0IHsgcmV0dXJuIG1fdGV4dFpvb21G
YWN0b3I7IH0KICAgICB2b2lkIHNldFRleHRab29tRmFjdG9yKGRvdWJsZSk7CkluZGV4OiBXZWJL
aXQyL1VJUHJvY2Vzcy9BUEkvQy9XS1BhZ2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdDIvVUlQ
cm9jZXNzL0FQSS9DL1dLUGFnZS5jcHAJKHJldmlzaW9uIDY5NTIxKQorKysgV2ViS2l0Mi9VSVBy
b2Nlc3MvQVBJL0MvV0tQYWdlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTUyLDE1ICsxNTIsMjEg
QEAgdm9pZCBXS1BhZ2VUZXJtaW5hdGUoV0tQYWdlUmVmIHBhZ2VSZWYpCiAgICAgdG9JbXBsKHBh
Z2VSZWYpLT50ZXJtaW5hdGVQcm9jZXNzKCk7CiB9CiAKLVdLRGF0YVJlZiBXS1BhZ2VDb3B5U2Vz
c2lvblN0YXRlKFdLUGFnZVJlZiBwYWdlUmVmKQorV0tTdHJpbmdSZWYgV0tQYWdlR2V0U2Vzc2lv
bkhpc3RvcnlVUkxWYWx1ZVR5cGUoKQogewotICAgIFJlZlB0cjxXZWJEYXRhPiBzdGF0ZSA9IHRv
SW1wbChwYWdlUmVmKS0+c2Vzc2lvblN0YXRlKCk7CisgICAgc3RhdGljIFdlYlN0cmluZyogc2Vz
c2lvbkhpc3RvcnlVUkxWYWx1ZVR5cGUgPSBXZWJTdHJpbmc6OmNyZWF0ZSgiU2Vzc2lvbkhpc3Rv
cnlVUkwiKS5yZWxlYXNlUmVmKCk7CisgICAgcmV0dXJuIHRvQVBJKHNlc3Npb25IaXN0b3J5VVJM
VmFsdWVUeXBlKTsKK30KKworV0tEYXRhUmVmIFdLUGFnZUNvcHlTZXNzaW9uU3RhdGUoV0tQYWdl
UmVmIHBhZ2VSZWYsIHZvaWQgKmNvbnRleHQsIFdLUGFnZVNlc3Npb25TdGF0ZUZpbHRlckNhbGxi
YWNrIGZpbHRlcikKK3sKKyAgICBSZWZQdHI8V2ViRGF0YT4gc3RhdGUgPSB0b0ltcGwocGFnZVJl
ZiktPnNlc3Npb25TdGF0ZURhdGEoZmlsdGVyLCBjb250ZXh0KTsKICAgICByZXR1cm4gdG9BUEko
c3RhdGUucmVsZWFzZSgpLnJlbGVhc2VSZWYoKSk7CiB9CiAKIHZvaWQgV0tQYWdlUmVzdG9yZUZy
b21TZXNzaW9uU3RhdGUoV0tQYWdlUmVmIHBhZ2VSZWYsIFdLRGF0YVJlZiBzZXNzaW9uU3RhdGVE
YXRhKQogewotICAgIHRvSW1wbChwYWdlUmVmKS0+cmVzdG9yZUZyb21TZXNzaW9uU3RhdGUodG9J
bXBsKHNlc3Npb25TdGF0ZURhdGEpKTsKKyAgICB0b0ltcGwocGFnZVJlZiktPnJlc3RvcmVGcm9t
U2Vzc2lvblN0YXRlRGF0YSh0b0ltcGwoc2Vzc2lvblN0YXRlRGF0YSkpOwogfQogCiBkb3VibGUg
V0tQYWdlR2V0VGV4dFpvb21GYWN0b3IoV0tQYWdlUmVmIHBhZ2VSZWYpCkluZGV4OiBXZWJLaXQy
L1VJUHJvY2Vzcy9BUEkvQy9XS1BhZ2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQyL1VJUHJvY2Vz
cy9BUEkvQy9XS1BhZ2UuaAkocmV2aXNpb24gNjk1MjEpCisrKyBXZWJLaXQyL1VJUHJvY2Vzcy9B
UEkvQy9XS1BhZ2UuaAkod29ya2luZyBjb3B5KQpAQCAtMjA1LDcgKzIwNSwxMCBAQCBXS19FWFBP
UlQgdm9pZCBXS1BhZ2VTZXRDdXN0b21Vc2VyQWdlbnQoCiAKIFdLX0VYUE9SVCB2b2lkIFdLUGFn
ZVRlcm1pbmF0ZShXS1BhZ2VSZWYgcGFnZSk7CiAKLVdLX0VYUE9SVCBXS0RhdGFSZWYgV0tQYWdl
Q29weVNlc3Npb25TdGF0ZShXS1BhZ2VSZWYgcGFnZSk7CitXS19FWFBPUlQgV0tTdHJpbmdSZWYg
V0tQYWdlR2V0U2Vzc2lvbkhpc3RvcnlVUkxWYWx1ZVR5cGUodm9pZCk7CisKK3R5cGVkZWYgYm9v
bCAoKldLUGFnZVNlc3Npb25TdGF0ZUZpbHRlckNhbGxiYWNrKShXS1BhZ2VSZWYgcGFnZSwgV0tT
dHJpbmdSZWYgdmFsdWVUeXBlLCBXS1R5cGVSZWYgdmFsdWUsIHZvaWQqIGNvbnRleHQpOworV0tf
RVhQT1JUIFdLRGF0YVJlZiBXS1BhZ2VDb3B5U2Vzc2lvblN0YXRlKFdLUGFnZVJlZiBwYWdlLCB2
b2lkICpjb250ZXh0LCBXS1BhZ2VTZXNzaW9uU3RhdGVGaWx0ZXJDYWxsYmFjayB1cmxBbGxvd2Vk
Q2FsbGJhY2spOwogV0tfRVhQT1JUIHZvaWQgV0tQYWdlUmVzdG9yZUZyb21TZXNzaW9uU3RhdGUo
V0tQYWdlUmVmIHBhZ2UsIFdLRGF0YVJlZiBzZXNzaW9uU3RhdGVEYXRhKTsKIAogV0tfRVhQT1JU
IGRvdWJsZSBXS1BhZ2VHZXRUZXh0Wm9vbUZhY3RvcihXS1BhZ2VSZWYgcGFnZSk7CkluZGV4OiBX
ZWJLaXQyL1VJUHJvY2Vzcy9jZi9XZWJCYWNrRm9yd2FyZExpc3RDRi5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gV2ViS2l0Mi9VSVByb2Nlc3MvY2YvV2ViQmFja0ZvcndhcmRMaXN0Q0YuY3BwCShyZXZpc2lv
biAwKQorKysgV2ViS2l0Mi9VSVByb2Nlc3MvY2YvV2ViQmFja0ZvcndhcmRMaXN0Q0YuY3BwCShy
ZXZpc2lvbiAwKQpAQCAtMCwwICsxLDExOCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMCBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMg
SVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRP
UlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MK
KyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgor
ICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJXZWJC
YWNrRm9yd2FyZExpc3QuaCIKKyNpbmNsdWRlICJMb2dnaW5nLmgiCisKK3VzaW5nIG5hbWVzcGFj
ZSBXZWJDb3JlOworCituYW1lc3BhY2UgV2ViS2l0IHsKKworREVGSU5FX1NUQVRJQ19HRVRURVIo
Q0ZTdHJpbmdSZWYsIFNlc3Npb25IaXN0b3J5Q3VycmVudEluZGV4S2V5LCBDRlNUUigiU2Vzc2lv
bkhpc3RvcnlDdXJyZW50SW5kZXgiKSk7CitERUZJTkVfU1RBVElDX0dFVFRFUihDRlN0cmluZ1Jl
ZiwgU2Vzc2lvbkhpc3RvcnlFbnRyaWVzS2V5LCBDRlNUUigiU2Vzc2lvbkhpc3RvcnlFbnRyaWVz
IikpOworREVGSU5FX1NUQVRJQ19HRVRURVIoQ0ZTdHJpbmdSZWYsIFNlc3Npb25IaXN0b3J5RW50
cnlUaXRsZUtleSwgQ0ZTVFIoIlNlc3Npb25IaXN0b3J5RW50cnlUaXRsZSIpKTsKK0RFRklORV9T
VEFUSUNfR0VUVEVSKENGU3RyaW5nUmVmLCBTZXNzaW9uSGlzdG9yeUVudHJ5VVJMS2V5LCBDRlNU
UigiU2Vzc2lvbkhpc3RvcnlFbnRyeVVSTCIpKTsKKworQ0ZEaWN0aW9uYXJ5UmVmIFdlYkJhY2tG
b3J3YXJkTGlzdDo6Y3JlYXRlQ0ZEaWN0aW9uYXJ5UmVwcmVzZW50YXRpb24oV2ViUGFnZVByb3h5
OjpXZWJQYWdlUHJveHlTZXNzaW9uU3RhdGVGaWx0ZXJDYWxsYmFjayBmaWx0ZXIsIHZvaWQqIGNv
bnRleHQpIGNvbnN0Cit7CisgICAgUmV0YWluUHRyPENGTnVtYmVyUmVmPiBjdXJyZW50SW5kZXgo
QWRvcHRDRiwgQ0ZOdW1iZXJDcmVhdGUoMCwga0NGTnVtYmVySW50VHlwZSwgJm1fY3VycmVudCkp
OyAgICAKKyAgICBSZXRhaW5QdHI8Q0ZNdXRhYmxlQXJyYXlSZWY+IGVudHJpZXMoQWRvcHRDRiwg
Q0ZBcnJheUNyZWF0ZU11dGFibGUoMCwgbV9lbnRyaWVzLnNpemUoKSwgJmtDRlR5cGVBcnJheUNh
bGxCYWNrcykpOworICAgIAorICAgIGNvbnN0IHZvaWQqIGtleXNbMl0gPSB7IFNlc3Npb25IaXN0
b3J5Q3VycmVudEluZGV4S2V5KCksIFNlc3Npb25IaXN0b3J5RW50cmllc0tleSgpIH07CisgICAg
Y29uc3Qgdm9pZCogdmFsdWVzWzJdID0geyBjdXJyZW50SW5kZXguZ2V0KCksIGVudHJpZXMuZ2V0
KCkgfTsKKworICAgIFJldGFpblB0cjxDRkRpY3Rpb25hcnlSZWY+IGRpY3Rpb25hcnkoQWRvcHRD
RiwgQ0ZEaWN0aW9uYXJ5Q3JlYXRlKDAsIGtleXMsIHZhbHVlcywgMiwgJmtDRlR5cGVEaWN0aW9u
YXJ5S2V5Q2FsbEJhY2tzLCAma0NGVHlwZURpY3Rpb25hcnlWYWx1ZUNhbGxCYWNrcykpOworCisg
ICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtX2VudHJpZXMuc2l6ZSgpOyArK2kpIHsKKyAgICAg
ICAgUmVmUHRyPFdlYlVSTD4gd2ViVVJMID0gV2ViVVJMOjpjcmVhdGUobV9lbnRyaWVzW2ldLT51
cmwoKSk7CisgICAgICAgIGlmICghZmlsdGVyKHRvQVBJKG1fcGFnZSksIFdLUGFnZUdldFNlc3Np
b25IaXN0b3J5VVJMVmFsdWVUeXBlKCksIHRvVVJMUmVmKG1fZW50cmllc1tpXS0+b3JpZ2luYWxV
UkwoKS5pbXBsKCkpLCBjb250ZXh0KSkKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAK
KyAgICAgICAgUmV0YWluUHRyPENGU3RyaW5nUmVmPiB1cmwoQWRvcHRDRiwgbV9lbnRyaWVzW2ld
LT51cmwoKS5jcmVhdGVDRlN0cmluZygpKTsKKyAgICAgICAgUmV0YWluUHRyPENGU3RyaW5nUmVm
PiB0aXRsZShBZG9wdENGLCBtX2VudHJpZXNbaV0tPnRpdGxlKCkuY3JlYXRlQ0ZTdHJpbmcoKSk7
CisgICAgICAgIAorICAgICAgICBjb25zdCB2b2lkKiBrZXlzWzJdID0geyBTZXNzaW9uSGlzdG9y
eUVudHJ5VVJMS2V5KCksIFNlc3Npb25IaXN0b3J5RW50cnlUaXRsZUtleSgpIH07CisgICAgICAg
IGNvbnN0IHZvaWQqIHZhbHVlc1syXSA9IHsgdXJsLmdldCgpLCB0aXRsZS5nZXQoKSB9OworCisg
ICAgICAgIFJldGFpblB0cjxDRkRpY3Rpb25hcnlSZWY+IGVudHJ5RGljdGlvbmFyeShBZG9wdENG
LCBDRkRpY3Rpb25hcnlDcmVhdGUoMCwga2V5cywgdmFsdWVzLCAyLCAma0NGVHlwZURpY3Rpb25h
cnlLZXlDYWxsQmFja3MsICZrQ0ZUeXBlRGljdGlvbmFyeVZhbHVlQ2FsbEJhY2tzKSk7CisgICAg
ICAgIENGQXJyYXlBcHBlbmRWYWx1ZShlbnRyaWVzLmdldCgpLCBlbnRyeURpY3Rpb25hcnkuZ2V0
KCkpOworICAgIH0KKyAgICAKKyAgICByZXR1cm4gZGljdGlvbmFyeS5sZWFrUmVmKCk7Cit9CisK
K2Jvb2wgV2ViQmFja0ZvcndhcmRMaXN0OjpyZXN0b3JlRnJvbUNGRGljdGlvbmFyeVJlcHJlc2Vu
dGF0aW9uKENGRGljdGlvbmFyeVJlZiBkaWN0aW9uYXJ5KQoreworICAgIENGTnVtYmVyUmVmIGNm
SW5kZXggPSAoQ0ZOdW1iZXJSZWYpQ0ZEaWN0aW9uYXJ5R2V0VmFsdWUoZGljdGlvbmFyeSwgU2Vz
c2lvbkhpc3RvcnlDdXJyZW50SW5kZXhLZXkoKSk7CisgICAgaWYgKCFjZkluZGV4IHx8IENGR2V0
VHlwZUlEKGNmSW5kZXgpICE9IENGTnVtYmVyR2V0VHlwZUlEKCkpIHsKKyAgICAgICAgTE9HKFNl
c3Npb25TdGF0ZSwgIldlYkJhY2tGb3J3YXJkTGlzdCBkaWN0aW9uYXJ5IHJlcHJlc2VudGF0aW9u
IGRvZXMgbm90IGhhdmUgYSB2YWxpZCBjdXJyZW50IGluZGV4Iik7CisgICAgICAgIHJldHVybiBm
YWxzZTsKKyAgICB9CisgICAgCisgICAgdW5zaWduZWQgY3VycmVudEluZGV4OworICAgIGlmICgh
Q0ZOdW1iZXJHZXRWYWx1ZShjZkluZGV4LCBrQ0ZOdW1iZXJJbnRUeXBlLCAmY3VycmVudEluZGV4
KSkgeworICAgICAgICBMT0coU2Vzc2lvblN0YXRlLCAiV2ViQmFja0ZvcndhcmRMaXN0IGRpY3Rp
b25hcnkgcmVwcmVzZW50YXRpb24gZG9lcyBub3QgaGF2ZSBhIHZhbGlkIGludGVnZXIgY3VycmVu
dCBpbmRleCIpOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorICAgIAorICAgIENGQXJy
YXlSZWYgY2ZFbnRyaWVzID0gKENGQXJyYXlSZWYpQ0ZEaWN0aW9uYXJ5R2V0VmFsdWUoZGljdGlv
bmFyeSwgU2Vzc2lvbkhpc3RvcnlFbnRyaWVzS2V5KCkpOworICAgIGlmICghY2ZFbnRyaWVzIHx8
IENGR2V0VHlwZUlEKGNmRW50cmllcykgIT0gQ0ZBcnJheUdldFR5cGVJRCgpKSB7CisgICAgICAg
IExPRyhTZXNzaW9uU3RhdGUsICJXZWJCYWNrRm9yd2FyZExpc3QgZGljdGlvbmFyeSByZXByZXNl
bnRhdGlvbiBkb2VzIG5vdCBoYXZlIGEgdmFsaWQgbGlzdCBvZiBlbnRyaWVzIik7CisgICAgICAg
IHJldHVybiBmYWxzZTsKKyAgICB9CisgICAgCisgICAgQ0ZJbmRleCBzaXplID0gQ0ZBcnJheUdl
dENvdW50KGNmRW50cmllcyk7CisgICAgZm9yIChDRkluZGV4IGkgPSAwOyBpIDwgc2l6ZTsgKytp
KSB7CisgICAgICAgIENGRGljdGlvbmFyeVJlZiBlbnRyeURpY3Rpb25hcnkgPSAoQ0ZEaWN0aW9u
YXJ5UmVmKUNGQXJyYXlHZXRWYWx1ZUF0SW5kZXgoY2ZFbnRyaWVzLCBpKTsKKyAgICAgICAgaWYg
KCFlbnRyeURpY3Rpb25hcnkgfHwgQ0ZHZXRUeXBlSUQoZW50cnlEaWN0aW9uYXJ5KSAhPSBDRkRp
Y3Rpb25hcnlHZXRUeXBlSUQoKSkgeworICAgICAgICAgICAgTE9HKFNlc3Npb25TdGF0ZSwgIldl
YkJhY2tGb3J3YXJkTGlzdCBlbnRyeSBhcnJheSBkb2VzIG5vdCBoYXZlIGEgdmFsaWQgZW50cnkg
YXQgaW5kZXggJWkiLCAoaW50KWkpOworICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAg
ICB9CisgICAgICAgIAorICAgICAgICBDRlN0cmluZ1JlZiBlbnRyeVVSTCA9IChDRlN0cmluZ1Jl
ZilDRkRpY3Rpb25hcnlHZXRWYWx1ZShlbnRyeURpY3Rpb25hcnksIFNlc3Npb25IaXN0b3J5RW50
cnlVUkxLZXkoKSk7CisgICAgICAgIGlmICghZW50cnlVUkwgfHwgQ0ZHZXRUeXBlSUQoZW50cnlV
UkwpICE9IENGU3RyaW5nR2V0VHlwZUlEKCkpIHsKKyAgICAgICAgICAgIExPRyhTZXNzaW9uU3Rh
dGUsICJXZWJCYWNrRm9yd2FyZExpc3QgZW50cnkgYXQgaW5kZXggJWkgZG9lcyBub3QgaGF2ZSBh
IHZhbGlkIFVSTCIsIChpbnQpaSk7CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAg
IH0KKworICAgICAgICBDRlN0cmluZ1JlZiBlbnRyeVRpdGxlID0gKENGU3RyaW5nUmVmKUNGRGlj
dGlvbmFyeUdldFZhbHVlKGVudHJ5RGljdGlvbmFyeSwgU2Vzc2lvbkhpc3RvcnlFbnRyeVRpdGxl
S2V5KCkpOworICAgICAgICBpZiAoIWVudHJ5VGl0bGUgfHwgQ0ZHZXRUeXBlSUQoZW50cnlUaXRs
ZSkgIT0gQ0ZTdHJpbmdHZXRUeXBlSUQoKSkgeworICAgICAgICAgICAgTE9HKFNlc3Npb25TdGF0
ZSwgIldlYkJhY2tGb3J3YXJkTGlzdCBlbnRyeSBhdCBpbmRleCAlaSBkb2VzIG5vdCBoYXZlIGEg
dmFsaWQgdGl0bGUiLCAoaW50KWkpOworICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAg
ICB9CisgICAgICAgIAorICAgICAgICAvLyBGSVhNRSA8cmRhcjovL3Byb2JsZW0vODI2MTYyND4g
YW5kIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD00NzM1NSAtIAorICAg
ICAgICAvLyBUaGUgZGF0YSBmb3IgdGhlIGFib3ZlIGVudHJ5IG5lZWRzIHRvIGJlIGFkZGVkIHRv
IHRoZSBmdWxsIGJhY2svZm9yd2FyZCBsaXN0LgorICAgICAgICAvLyBXaGVuIHdlIGhhdmUgYSBz
b2x1dGlvbiB0aGF0IHJlc3RvcmVzIHRoZSBmdWxsIGJhY2svZm9yd2FyZGxpc3QgdGhlbiBjYXVz
ZXMgYSBsb2FkIG9mIHRoZSBjdXJyZW50IGl0ZW0sCisgICAgICAgIC8vIHdlIHdpbGwgbm8gbG9u
Z2VyIG5lZWQgdGhpcy4KKyAgICAgICAgaWYgKGkgPT0gY3VycmVudEluZGV4KSB7CisgICAgICAg
ICAgICBtX3Jlc3RvcmVkQ3VycmVudFVSTCA9IGVudHJ5VVJMOworICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgIH0KKyAgICB9CisgICAgcmV0dXJuIHRydWU7Cit9CisKK30gLy8gbmFtZXNwYWNl
IFdlYktpdApJbmRleDogV2ViS2l0Mi9VSVByb2Nlc3MvY2YvV2ViUGFnZVByb3h5Q0YuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFdlYktpdDIvVUlQcm9jZXNzL2NmL1dlYlBhZ2VQcm94eUNGLmNwcAkocmV2
aXNpb24gMCkKKysrIFdlYktpdDIvVUlQcm9jZXNzL2NmL1dlYlBhZ2VQcm94eUNGLmNwcAkocmV2
aXNpb24gMCkKQEAgLTAsMCArMSwxMTYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElT
JycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JT
CisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisg
KiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQg
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAq
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiV2ViUGFn
ZVByb3h5LmgiCisKKyNpbmNsdWRlICJMb2dnaW5nLmgiCisjaW5jbHVkZSAiV2ViQmFja0Zvcndh
cmRMaXN0LmgiCisjaW5jbHVkZSAiV2ViRGF0YS5oIgorCit1c2luZyBuYW1lc3BhY2UgV2ViQ29y
ZTsKKworbmFtZXNwYWNlIFdlYktpdCB7CisKK0RFRklORV9TVEFUSUNfR0VUVEVSKENGU3RyaW5n
UmVmLCBTZXNzaW9uSGlzdG9yeUtleSwgQ0ZTVFIoIlNlc3Npb25IaXN0b3J5IikpOworCitzdGF0
aWMgY29uc3QgVUludDMyIEN1cnJlbnRTZXNzaW9uU3RhdGVEYXRhVmVyc2lvbiA9IDE7CisKK1Bh
c3NSZWZQdHI8V2ViRGF0YT4gV2ViUGFnZVByb3h5OjpzZXNzaW9uU3RhdGVEYXRhKFdlYlBhZ2VQ
cm94eVNlc3Npb25TdGF0ZUZpbHRlckNhbGxiYWNrIGZpbHRlciwgdm9pZCogY29udGV4dCkgY29u
c3QKK3sKKyAgICBSZXRhaW5QdHI8Q0ZEaWN0aW9uYXJ5UmVmPiBzZXNzaW9uSGlzdG9yeURpY3Rp
b25hcnkoQWRvcHRDRiwgbV9iYWNrRm9yd2FyZExpc3QtPmNyZWF0ZUNGRGljdGlvbmFyeVJlcHJl
c2VudGF0aW9uKGZpbHRlciwgY29udGV4dCkpOworICAgIAorICAgIC8vIEZvciBub3cgd2UncmUg
b25seSBzZXJpYWxpemluZyB0aGUgYmFjay9mb3J3YXJkIGxpc3QuICBJZiB0aGF0IG9iamVjdCBp
cyBudWxsLCB0aGVuIHRoZSBlbnRpcmUgc2Vzc2lvblN0YXRlIGNhbiBiZSBudWxsLgorICAgIGlm
ICghc2Vzc2lvbkhpc3RvcnlEaWN0aW9uYXJ5KQorICAgICAgICByZXR1cm4gMDsKKyAgICAKKyAg
ICBjb25zdCB2b2lkKiBrZXlzWzFdID0geyBTZXNzaW9uSGlzdG9yeUtleSgpIH07CisgICAgY29u
c3Qgdm9pZCogdmFsdWVzWzFdID0geyBzZXNzaW9uSGlzdG9yeURpY3Rpb25hcnkuZ2V0KCkgfTsK
KyAgICAKKyAgICBSZXRhaW5QdHI8Q0ZEaWN0aW9uYXJ5UmVmPiBzdGF0ZURpY3Rpb25hcnkoQWRv
cHRDRiwgQ0ZEaWN0aW9uYXJ5Q3JlYXRlKDAsIGtleXMsIHZhbHVlcywgMSwgJmtDRlR5cGVEaWN0
aW9uYXJ5S2V5Q2FsbEJhY2tzLCAma0NGVHlwZURpY3Rpb25hcnlWYWx1ZUNhbGxCYWNrcykpOwor
CisgICAgUmV0YWluUHRyPENGRGF0YVJlZj4gc3RhdGVDRkRhdGEoQWRvcHRDRiwgQ0ZQcm9wZXJ0
eUxpc3RDcmVhdGVEYXRhKDAsIHN0YXRlRGljdGlvbmFyeS5nZXQoKSwga0NGUHJvcGVydHlMaXN0
QmluYXJ5Rm9ybWF0X3YxXzAsIDAsIDApKTsKKworICAgIENGSW5kZXggbGVuZ3RoID0gQ0ZEYXRh
R2V0TGVuZ3RoKHN0YXRlQ0ZEYXRhLmdldCgpKTsKKyAgICBWZWN0b3I8dW5zaWduZWQgY2hhcj4g
c3RhdGVWZWN0b3IobGVuZ3RoICsgNCk7CisgICAgCisgICAgLy8gUHV0IHRoZSBzZXNzaW9uIHN0
YXRlIHZlcnNpb24gbnVtYmVyIGF0IHRoZSBzdGFydCBvZiB0aGUgYnVmZmVyCisgICAgVUludDMy
IHZlcnNpb25IZWFkZXIgPSBodG9ubChDdXJyZW50U2Vzc2lvblN0YXRlRGF0YVZlcnNpb24pOwor
ICAgIG1lbWNweShzdGF0ZVZlY3Rvci5kYXRhKCksICZ2ZXJzaW9uSGVhZGVyLCA0KTsKKyAgICAK
KyAgICAvLyBDb3B5IGluIHRoZSBhY3R1YWwgc2Vzc2lvbiBzdGF0ZSBkYXRhCisgICAgQ0ZEYXRh
R2V0Qnl0ZXMoc3RhdGVDRkRhdGEuZ2V0KCksIENGUmFuZ2VNYWtlKDAsIGxlbmd0aCksIHN0YXRl
VmVjdG9yLmRhdGEoKSArIDQpOworICAgIAorICAgIHJldHVybiBXZWJEYXRhOjpjcmVhdGUoc3Rh
dGVWZWN0b3IpOworfQorCit2b2lkIFdlYlBhZ2VQcm94eTo6cmVzdG9yZUZyb21TZXNzaW9uU3Rh
dGVEYXRhKFdlYkRhdGEqIHdlYkRhdGEpCit7CisgICAgaWYgKCF3ZWJEYXRhIHx8IHdlYkRhdGEt
PnNpemUoKSA8IDQpCisgICAgICAgIHJldHVybjsKKworICAgIFVJbnQzMiB2ZXJzaW9uSGVhZGVy
OworICAgIG1lbWNweSgmdmVyc2lvbkhlYWRlciwgd2ViRGF0YS0+Ynl0ZXMoKSwgNCk7CisgICAg
dmVyc2lvbkhlYWRlciA9IG50b2hsKHZlcnNpb25IZWFkZXIpOworICAgIAorICAgIGlmICh2ZXJz
aW9uSGVhZGVyICE9IEN1cnJlbnRTZXNzaW9uU3RhdGVEYXRhVmVyc2lvbikgeworICAgICAgICBM
T0coU2Vzc2lvblN0YXRlLCAiVW5yZWNvZ25pemVkIHZlcnNpb24gaGVhZGVyIGZvciBzZXNzaW9u
IHN0YXRlIGRhdGEgLSBjYW5ub3QgcmVzdG9yZSIpOworICAgICAgICByZXR1cm47CisgICAgfQor
ICAgIAorICAgIFJldGFpblB0cjxDRkRhdGFSZWY+IGRhdGEoQWRvcHRDRiwgQ0ZEYXRhQ3JlYXRl
KDAsIHdlYkRhdGEtPmJ5dGVzKCkgKyA0LCB3ZWJEYXRhLT5zaXplKCkgLSA0KSk7CisKKyAgICBD
RkVycm9yUmVmIHByb3BlcnR5TGlzdEVycm9yID0gMDsKKyAgICBSZXRhaW5QdHI8Q0ZQcm9wZXJ0
eUxpc3RSZWY+IHByb3BlcnR5TGlzdChBZG9wdENGLCBDRlByb3BlcnR5TGlzdENyZWF0ZVdpdGhE
YXRhKDAsIGRhdGEuZ2V0KCksIGtDRlByb3BlcnR5TGlzdEltbXV0YWJsZSwgMCwgJnByb3BlcnR5
TGlzdEVycm9yKSk7CisgICAgaWYgKHByb3BlcnR5TGlzdEVycm9yKSB7CisgICAgICAgIExPRyhT
ZXNzaW9uU3RhdGUsICJDb3VsZCBub3QgcmVhZCBzZXNzaW9uIHN0YXRlIHByb3BlcnR5IGxpc3Qi
KTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlmICghcHJvcGVydHlMaXN0KQorICAg
ICAgICByZXR1cm47CisgICAgICAgIAorICAgIGlmIChDRkdldFR5cGVJRChwcm9wZXJ0eUxpc3Qu
Z2V0KCkpICE9IENGRGljdGlvbmFyeUdldFR5cGVJRCgpKSB7CisgICAgICAgIExPRyhTZXNzaW9u
U3RhdGUsICJTZXNzaW9uU3RhdGUgcHJvcGVydHkgbGlzdCBpcyBub3QgYSBDRkRpY3Rpb25hcnlS
ZWYgKCVpKSAtIGl0cyBDRlR5cGVJRCBpcyAlaSIsIChpbnQpQ0ZEaWN0aW9uYXJ5R2V0VHlwZUlE
KCksIChpbnQpQ0ZHZXRUeXBlSUQocHJvcGVydHlMaXN0LmdldCgpKSk7CisgICAgICAgIHJldHVy
bjsKKyAgICB9CisgICAgCisgICAgQ0ZUeXBlUmVmIHNlc3Npb25IaXN0b3J5UmVmID0gQ0ZEaWN0
aW9uYXJ5R2V0VmFsdWUoc3RhdGljX2Nhc3Q8Q0ZEaWN0aW9uYXJ5UmVmPihwcm9wZXJ0eUxpc3Qu
Z2V0KCkpLCBTZXNzaW9uSGlzdG9yeUtleSgpKTsKKyAgICBpZiAoIXNlc3Npb25IaXN0b3J5UmVm
IHx8IENGR2V0VHlwZUlEKHNlc3Npb25IaXN0b3J5UmVmKSAhPSBDRkRpY3Rpb25hcnlHZXRUeXBl
SUQoKSkgeworICAgICAgICBMT0coU2Vzc2lvblN0YXRlLCAiU2Vzc2lvblN0YXRlIGRpY3Rpb25h
cnkgZG9lcyBub3QgY29udGFpbiBhIFNlc3Npb25IaXN0b3J5RGljdGlvbmFyeSBrZXksIGl0IGlz
IG9mIHRoZSB3cm9uZyB0eXBlIik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgCisgICAg
Q0ZEaWN0aW9uYXJ5UmVmIHNlc3Npb25IaXN0b3J5RGljdGlvbmFyeSA9IHN0YXRpY19jYXN0PENG
RGljdGlvbmFyeVJlZj4oc2Vzc2lvbkhpc3RvcnlSZWYpOworICAgIGlmICghbV9iYWNrRm9yd2Fy
ZExpc3QtPnJlc3RvcmVGcm9tQ0ZEaWN0aW9uYXJ5UmVwcmVzZW50YXRpb24oc2Vzc2lvbkhpc3Rv
cnlEaWN0aW9uYXJ5KSkgeworICAgICAgICBMT0coU2Vzc2lvblN0YXRlLCAiRmFpbGVkIHRvIHJl
c3RvcmUgYmFjay9mb3J3YXJkIGxpc3QgZnJvbSBTZXNzaW9uSGlzdG9yeURpY3Rpb25hcnkiKTsK
KyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIC8vIEZJWE1FOiBXaGVuIHdlIGhhdmUgYSBz
b2x1dGlvbiBmb3IgcmVzdG9yaW5nIHRoZSBmdWxsIGJhY2svZm9yd2FyZCBsaXN0IHRoZW4gY2F1
c2luZyBhIGxvYWQgb2YgdGhlIGN1cnJlbnQgaXRlbSwKKyAgICAvLyB3ZSB3aWxsIHRyaWdnZXIg
dGhhdCBsb2FkIGhlcmUuICBVbnRpbCB0aGVuLCB3ZSB1c2UgdGhlICJyZXN0b3JlZCBjdXJyZW50
IFVSTCIgd2hpY2ggY2FuIGxhdGVyIGJlIHJlbW92ZWQuCisgICAgbG9hZFVSTChtX2JhY2tGb3J3
YXJkTGlzdC0+cmVzdG9yZWRDdXJyZW50VVJMKCkpOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJL
aXQKSW5kZXg6IFdlYktpdDIvV2ViS2l0Mi54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFdlYktpdDIvV2ViS2l0Mi54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZp
c2lvbiA2OTUyMSkKKysrIFdlYktpdDIvV2ViS2l0Mi54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9q
CSh3b3JraW5nIGNvcHkpCkBAIC0xNDMsNiArMTQzLDggQEAKIAkJNTE2QTRBNUQxMjBBMkNDRDAw
QzA1QjdGIC8qIFdlYkVycm9yLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSA1MTZBNEE1QjEyMEEyQ0NEMDBDMDVCN0YgLyogV2ViRXJyb3IuaCAqLzsgfTsK
IAkJNTFBN0YyRjMxMjVCRjgyMDAwOEFFQjFEIC8qIExvZ2dpbmcuaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUxQTdGMkYyMTI1QkY4MjAwMDhBRUIxRCAv
KiBMb2dnaW5nLmggKi87IH07CiAJCTUxQTdGMkY1MTI1QkY4RDQwMDhBRUIxRCAvKiBMb2dnaW5n
LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUxQTdG
MkY0MTI1QkY4RDQwMDhBRUIxRCAvKiBMb2dnaW5nLmNwcCAqLzsgfTsKKwkJNTFCMzAwNTAxMjUy
OUQwRTAwMEI1Q0EwIC8qIFdlYkJhY2tGb3J3YXJkTGlzdENGLmNwcCBpbiBTb3VyY2VzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUxQjMwMDRFMTI1MjlEMEUwMDBCNUNBMCAv
KiBXZWJCYWNrRm9yd2FyZExpc3RDRi5jcHAgKi87IH07CisJCTUxQjMwMDUxMTI1MjlEMEUwMDBC
NUNBMCAvKiBXZWJQYWdlUHJveHlDRi5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSA1MUIzMDA0RjEyNTI5RDBFMDAwQjVDQTAgLyogV2ViUGFnZVByb3h5
Q0YuY3BwICovOyB9OwogCQk2RDhBOTFBNjExRjBFRkQxMDBERDAxRkUgLyogY29tLmFwcGxlLldl
YlByb2Nlc3Muc2IgaW4gUmVzb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDZEOEE5MUE1MTFGMEVGRDEwMEREMDFGRSAvKiBjb20uYXBwbGUuV2ViUHJvY2Vzcy5zYiAq
LzsgfTsKIAkJNzYyQjc0OEQxMjBCQzc1QzAwODE5MzM5IC8qIFdLUHJlZmVyZW5jZXNQcml2YXRl
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3NjJCNzQ4
NDEyMEJCQTJEMDA4MTkzMzkgLyogV0tQcmVmZXJlbmNlc1ByaXZhdGUuaCAqLzsgc2V0dGluZ3Mg
PSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk3NjJCNzRBRjEyMEJDOTRGMDA4
MTkzMzkgLyogV0tQcmVmZXJlbmNlc1ByaXZhdGUuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNzYyQjc0OUQxMjBCQzhFQTAwODE5MzM5IC8qIFdLUHJl
ZmVyZW5jZXNQcml2YXRlLmNwcCAqLzsgfTsKQEAgLTU5OSw2ICs2MDEsOCBAQAogCQk1MTZBNEE1
QjEyMEEyQ0NEMDBDMDVCN0YgLyogV2ViRXJyb3IuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gV2ViRXJyb3IuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTFBN0Yy
RjIxMjVCRjgyMDAwOEFFQjFEIC8qIExvZ2dpbmcuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gTG9nZ2luZy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1MUE3RjJG
NDEyNUJGOEQ0MDA4QUVCMUQgLyogTG9nZ2luZy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNw
cC5jcHA7IHBhdGggPSBMb2dnaW5nLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJ
NTFCMzAwNEUxMjUyOUQwRTAwMEI1Q0EwIC8qIFdlYkJhY2tGb3J3YXJkTGlzdENGLmNwcCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IFdlYkJhY2tGb3J3YXJkTGlzdENGLmNw
cDsgcGF0aCA9IGNmL1dlYkJhY2tGb3J3YXJkTGlzdENGLmNwcDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKKwkJNTFCMzAwNEYxMjUyOUQwRTAwMEI1Q0EwIC8qIFdlYlBhZ2VQcm94eUNGLmNw
cCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IFdlYlBhZ2VQcm94eUNGLmNw
cDsgcGF0aCA9IGNmL1dlYlBhZ2VQcm94eUNGLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJNURBRDcyOTQxMTZGRjcwQjAwRUU1Mzk2IC8qIFdlYlByb2Nlc3MueGNjb25maWcgKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSB0ZXh0LnhjY29uZmlnOyBwYXRoID0gV2ViUHJvY2Vzcy54Y2NvbmZpZzsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNURBRDczRjExMTZGRjkwQzAwRUU1Mzk2IC8qIEJhc2VU
YXJnZXQueGNjb25maWcgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0LnhjY29uZmlnOyBwYXRoID0gQmFzZVRhcmdl
dC54Y2NvbmZpZzsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNkQ4QTkxQTUxMUYwRUZE
MTAwREQwMUZFIC8qIGNvbS5hcHBsZS5XZWJQcm9jZXNzLnNiICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dDsgbmFt
ZSA9IGNvbS5hcHBsZS5XZWJQcm9jZXNzLnNiOyBwYXRoID0gV2ViUHJvY2Vzcy9jb20uYXBwbGUu
V2ViUHJvY2Vzcy5zYjsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTY0Niw3ICs2NTAs
NyBAQAogCQlCQzExMUFFMzExMkY1QzI2MDAzMzdCQUIgLyogV2ViUHJvY2Vzcy5jcHAgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBXZWJQcm9jZXNzLmNwcDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQkMxMTFCMDgxMTJGNUUzQzAwMzM3QkFCIC8qIFJlc3BvbnNp
dmVuZXNzVGltZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gUmVz
cG9uc2l2ZW5lc3NUaW1lci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUJDMTEx
QjBBMTEyRjVFNEYwMDMzN0JBQiAvKiBXZWJGcmFtZVByb3h5LmNwcCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFdlYkZyYW1lUHJveHkuY3BwOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwotCQlCQzExMUIwQjExMkY1RTRGMDAzMzdCQUIgLyogV2ViUGFnZVByb3h5LmNw
cCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFdlYlBhZ2VQcm94eS5jcHA7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUJDMTExQjBCMTEyRjVFNEYwMDMzN0JBQiAv
KiBXZWJQYWdlUHJveHkuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGV4cGxpY2l0
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IGZpbGVFbmNvZGluZyA9IDQ7IHBhdGggPSBX
ZWJQYWdlUHJveHkuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlCQzExMUIwQzEx
MkY1RTRGMDAzMzdCQUIgLyogV2ViUHJvY2Vzc01hbmFnZXIuY3BwICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jcHAuY3BwOyBwYXRoID0gV2ViUHJvY2Vzc01hbmFnZXIuY3BwOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQlCQzExMUIwRDExMkY1RTRGMDAzMzdCQUIgLyogV2ViUHJvY2Vzc1By
b3h5LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFdlYlByb2Nlc3NQ
cm94eS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUJDMTExQjFCMTEyRjVGRTYw
MDMzN0JBQiAvKiBQcm9jZXNzTGF1bmNoZXJNYWMubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNw
cC5vYmpjcHA7IHBhdGggPSBQcm9jZXNzTGF1bmNoZXJNYWMubW07IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CkBAIC0xMjI5LDYgKzEyMzMsMTUgQEAKIAkJCW5hbWUgPSAiT3RoZXIgU291cmNl
cyI7CiAJCQlzb3VyY2VUcmVlID0gIjxncm91cD4iOwogCQl9OworCQk1MUIzMDA0RDEyNTI5Q0Y1
MDAwQjVDQTAgLyogY2YgKi8gPSB7CisJCQlpc2EgPSBQQlhHcm91cDsKKwkJCWNoaWxkcmVuID0g
KAorCQkJCTUxQjMwMDRFMTI1MjlEMEUwMDBCNUNBMCAvKiBXZWJCYWNrRm9yd2FyZExpc3RDRi5j
cHAgKi8sCisJCQkJNTFCMzAwNEYxMjUyOUQwRTAwMEI1Q0EwIC8qIFdlYlBhZ2VQcm94eUNGLmNw
cCAqLywKKwkJCSk7CisJCQluYW1lID0gY2Y7CisJCQlzb3VyY2VUcmVlID0gIjxncm91cD4iOwor
CQl9OwogCQlCQzAzMkQ1QzEwRjQzNkQ1MDA1OEMxNUEgLyogV2ViUHJvY2VzcyAqLyA9IHsKIAkJ
CWlzYSA9IFBCWEdyb3VwOwogCQkJY2hpbGRyZW4gPSAoCkBAIC0xMzAyLDYgKzEzMTUsNyBAQAog
CQkJaXNhID0gUEJYR3JvdXA7CiAJCQljaGlsZHJlbiA9ICgKIAkJCQlCQzAzMkRDNDEwRjQzODdD
MDA1OEMxNUEgLyogQVBJICovLAorCQkJCTUxQjMwMDREMTI1MjlDRjUwMDBCNUNBMCAvKiBjZiAq
LywKIAkJCQlCQzExMUIxODExMkY1RkI0MDAzMzdCQUIgLyogTGF1bmNoZXIgKi8sCiAJCQkJQkND
RjA4NUMxMTNGM0I3NTAwQzY1MEM1IC8qIG1hYyAqLywKIAkJCQkxQUVGQ0MwNTExRDAxRjM0MDA4
MjE5RDMgLyogUGx1Z2lucyAqLywKQEAgLTIyNjAsNiArMjI3NCw4IEBACiAJCQkJMUEwNDNGNjkx
MjUxNEQ4QjAwRkZCRkI1IC8qIFdlYlByb2Nlc3NDb25uZWN0aW9uTWVzc2FnZVJlY2VpdmVyLmNw
cCBpbiBTb3VyY2VzICovLAogCQkJCTFBOEVGNENDMTI1MjQwMzcwMEY3MDY3RiAvKiBQbHVnaW5D
b250cm9sbGVyUHJveHkuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQzAyQkZGMUUxMjUxNTAyRTAw
OUNDQkVBIC8qIE5hdGl2ZVdlYktleWJvYXJkRXZlbnRNYWMubW0gaW4gU291cmNlcyAqLywKKwkJ
CQk1MUIzMDA1MDEyNTI5RDBFMDAwQjVDQTAgLyogV2ViQmFja0ZvcndhcmRMaXN0Q0YuY3BwIGlu
IFNvdXJjZXMgKi8sCisJCQkJNTFCMzAwNTExMjUyOUQwRTAwMEI1Q0EwIC8qIFdlYlBhZ2VQcm94
eUNGLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTFBOEVGOTZFMTI1MkFGNkIwMEY3MDY3RiAvKiBQ
bHVnaW5Db250cm9sbGVyUHJveHlNZXNzYWdlUmVjZWl2ZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJ
CQkJMUE4RUZBNzAxMjUyQjg0MTAwRjcwNjdGIC8qIFBsdWdpblByb3h5TWVzc2FnZVJlY2VpdmVy
LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTFBOEVGREZFMTI1M0NCNkUwMEY3MDY3RiAvKiBEYXRh
UmVmZXJlbmNlLmNwcCBpbiBTb3VyY2VzICovLApJbmRleDogV2ViS2l0Mi93aW4vV2ViS2l0Mi52
Y3Byb2oKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0Mi93aW4vV2ViS2l0Mi52Y3Byb2oJKHJldmlzaW9u
IDY5NTIxKQorKysgV2ViS2l0Mi93aW4vV2ViS2l0Mi52Y3Byb2oJKHdvcmtpbmcgY29weSkKQEAg
LTE3MjksNiArMTcyOSwxOCBAQAogCQkJCTwvRmlsdGVyPg0KIAkJCTwvRmlsdGVyPg0KIAkJCTxG
aWx0ZXINCisJCQkJTmFtZT0iY2YiDQorCQkJCT4NCisJCQkJPEZpbGUNCisJCQkJCVJlbGF0aXZl
UGF0aD0iLi5cVUlQcm9jZXNzXGNmXFdlYkJhY2tGb3J3YXJkTGlzdENGLmNwcCINCisJCQkJCT4N
CisJCQkJPC9GaWxlPg0KKwkJCQk8RmlsZQ0KKwkJCQkJUmVsYXRpdmVQYXRoPSIuLlxVSVByb2Nl
c3NcY2ZcV2ViUGFnZVByb3h5Q0YuY3BwIg0KKwkJCQkJPg0KKwkJCQk8L0ZpbGU+DQorCQkJPC9G
aWx0ZXI+DQorCQkJPEZpbHRlcg0KIAkJCQlOYW1lPSJMYXVuY2hlciINCiAJCQkJPg0KIAkJCQk8
RmlsZQ0K
</data>
<flag name="review"
          id="60328"
          type_id="1"
          status="-"
          setter="beidson"
    />
    <flag name="commit-queue"
          id="60329"
          type_id="3"
          status="-"
          setter="beidson"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>70477</attachid>
            <date>2010-10-11 15:22:14 -0700</date>
            <delta_ts>2010-10-11 15:24:46 -0700</delta_ts>
            <desc>Patch v5 - Darin&apos;s feedback + a cross platform version header.</desc>
            <filename>patch.txt</filename>
            <type>text/plain</type>
            <size>26734</size>
            <attacher name="Brady Eidson">beidson</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYktpdDIvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdDIvQ2hhbmdlTG9n
CShyZXZpc2lvbiA2OTUyNykKKysrIFdlYktpdDIvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsNDEgQEAKKzIwMTAtMTAtMTEgIEJyYWR5IEVpZHNvbiAgPGJlaWRzb25AYXBwbGUu
Y29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IERhcmluIEFkbGVyIGFuZCAuLi4KKworICAgICAg
ICA8cmRhcjovL3Byb2JsZW0vODI2MjIwMj4gYW5kIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD00NzM1NAorICAgICAgICBOZWVkIFdLUGFnZSBBUEkgZm9yIHNlcmlhbGl6
aW5nIGFuZCByZXN0b3JpbmcgYSBwYWdlJ3Mgc3RhdGUKKworICAgICAgICAqIFdlYktpdDIueGNv
ZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgKiB3aW4vV2ViS2l0Mi52Y3Byb2o6CisK
KyAgICAgICAgKiBXZWJLaXQyUHJlZml4Lmg6IEFkZCBERUZJTkVfU1RBVElDX0dFVFRFUiBjb252
ZW5pZW5jZS4KKworICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvQy9XS1BhZ2UuY3BwOgorICAgICAg
ICAoV0tQYWdlR2V0U2Vzc2lvbkhpc3RvcnlVUkxWYWx1ZVR5cGUpOgorICAgICAgICAoV0tQYWdl
Q29weVNlc3Npb25TdGF0ZSk6IENoYW5nZSB0byB1c2UgYSBmaWx0ZXIgZnVuY3Rpb24gdG8gYWxs
b3cgdGhlIEFQSSBjbGllbnQgdG8gZGVjaWRlIHdoYXQKKyAgICAgICAgICB0eXBlcyBvZiB0aGlu
Z3MgZ2V0IHNlcmlhbGl6ZWQgYXMgc2Vzc2lvbiBzdGF0ZS4gIEZvciBub3cgaXQgb25seSBmaWx0
ZXJzIGJhc2VkIG9uIFVSTCBpbgorICAgICAgICAgIHNlc3Npb24gaGlzdG9yeSBlbnRyaWVzLgor
ICAgICAgICAoV0tQYWdlUmVzdG9yZUZyb21TZXNzaW9uU3RhdGUpOgorICAgICAgICAqIFVJUHJv
Y2Vzcy9BUEkvQy9XS1BhZ2UuaDoKKworICAgICAgICAqIFVJUHJvY2Vzcy9XZWJCYWNrRm9yd2Fy
ZExpc3QuaDoKKyAgICAgICAgKFdlYktpdDo6V2ViQmFja0ZvcndhcmRMaXN0OjpyZXN0b3JlZEN1
cnJlbnRVUkwpOgorCisgICAgICAgICogVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5jcHA6CisgICAg
ICAgIChXZWJLaXQ6OldlYlBhZ2VQcm94eTo6c2Vzc2lvblN0YXRlRGF0YSk6IExlYXZlIHN0dWJz
IGZvciBub24tQ0YgcGxhdGZvcm0gYnVpbGRzLgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlUHJv
eHk6OnJlc3RvcmVGcm9tU2Vzc2lvblN0YXRlRGF0YSk6IERpdHRvLgorICAgICAgICAqIFVJUHJv
Y2Vzcy9XZWJQYWdlUHJveHkuaDoKKworICAgICAgICAqIFVJUHJvY2Vzcy9jZjogQWRkZWQuCisg
ICAgICAgICogVUlQcm9jZXNzL2NmL1dlYkJhY2tGb3J3YXJkTGlzdENGLmNwcDogQWRkZWQuCisg
ICAgICAgIChXZWJLaXQ6OldlYkJhY2tGb3J3YXJkTGlzdDo6Y3JlYXRlQ0ZEaWN0aW9uYXJ5UmVw
cmVzZW50YXRpb24pOiBTdG9yZSBiYWNrL2ZvcndhcmQgbGlzdCBpbmZvIENGIHByb3BlcnR5IGxp
c3Qgc3R5bGUuCisgICAgICAgIChXZWJLaXQ6OldlYkJhY2tGb3J3YXJkTGlzdDo6cmVzdG9yZUZy
b21DRkRpY3Rpb25hcnlSZXByZXNlbnRhdGlvbik6IFJlc3RvcmUgZnJvbSB0aGF0IGRhdGEgLSBi
dXQgZm9yIG5vdyB3ZSBkb24ndCAKKyAgICAgICAgICBhY3R1YWxseSBwdXQgdGhlIGJhY2svZm9y
d2FyZCBsaXN0IGJhY2sgaW50byBwbGFjZSBhbmQgaW5zdGVhZCBvbmx5IHJlbWVtYmVyIHRoZSBj
dXJyZW50IFVSTC4KKworICAgICAgICAqIFVJUHJvY2Vzcy9jZi9XZWJQYWdlUHJveHlDRi5jcHA6
IEFkZGVkLgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlUHJveHk6OnNlc3Npb25TdGF0ZURhdGEp
OiBDcmVhdGUgdGhlIHNlc3Npb25zIHN0YXRlIGRhdGUgQ0YgcHJvcGVydHkgbGlzdCBzdHlsZSwg
cGx1cyBhIHZlcnNpb24gaGVhZGVyLgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlUHJveHk6OnJl
c3RvcmVGcm9tU2Vzc2lvblN0YXRlRGF0YSk6IFJlc3RvcmUgZnJvbSB0aGF0IHByb3BlcnR5IGxp
c3Qgc3R5bGUgc2Vzc2lvbiBzdGF0ZSBkYXRhLgorCiAyMDEwLTEwLTExICBKZXNzaWUgQmVybGlu
ICA8amJlcmxpbkBhcHBsZS5jb20+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgRGFyaW4gQWRsZXIu
CkluZGV4OiBXZWJLaXQyL1dlYktpdDJQcmVmaXguaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQyL1dl
YktpdDJQcmVmaXguaAkocmV2aXNpb24gNjk1MjEpCisrKyBXZWJLaXQyL1dlYktpdDJQcmVmaXgu
aAkod29ya2luZyBjb3B5KQpAQCAtMzcsNiArMzcsMTQgQEAKICNkZWZpbmUgRVhURVJOX0NfRU5E
CiAjZW5kaWYKIAorLy8gRm9yIGRlZmluaW5nIGdldHRlcnMgdG8gYSBzdGF0aWMgdmFsdWUsIHdo
ZXJlIHRoZSBnZXR0ZXJzIGhhdmUgaW50ZXJuYWwgbGlua2FnZQorI2RlZmluZSBERUZJTkVfU1RB
VElDX0dFVFRFUih0eXBlLCBuYW1lLCBhcmd1bWVudHMpIFwKK3N0YXRpYyBjb25zdCB0eXBlJiBu
YW1lKCkgXAoreyBcCisgICAgREVGSU5FX1NUQVRJQ19MT0NBTCh0eXBlLCBuYW1lIyNWYWx1ZSwg
YXJndW1lbnRzKTsgXAorICAgIHJldHVybiBuYW1lIyNWYWx1ZTsgXAorfQorCiAjaWYgZGVmaW5l
ZChCVUlMRElOR19RVF9fKQogCiAjZGVmaW5lIFdURl9VU0VfSlNDIDEKSW5kZXg6IFdlYktpdDIv
VUlQcm9jZXNzL1dlYkJhY2tGb3J3YXJkTGlzdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdDIvVUlQ
cm9jZXNzL1dlYkJhY2tGb3J3YXJkTGlzdC5oCShyZXZpc2lvbiA2OTUyMSkKKysrIFdlYktpdDIv
VUlQcm9jZXNzL1dlYkJhY2tGb3J3YXJkTGlzdC5oCSh3b3JraW5nIGNvcHkpCkBAIC0yOSwxNCAr
MjksMTMgQEAKICNpbmNsdWRlICJBUElPYmplY3QuaCIKICNpbmNsdWRlICJJbW11dGFibGVBcnJh
eS5oIgogI2luY2x1ZGUgIldlYkJhY2tGb3J3YXJkTGlzdEl0ZW0uaCIKKyNpbmNsdWRlICJXZWJQ
YWdlUHJveHkuaCIKICNpbmNsdWRlIDx3dGYvUGFzc1JlZlB0ci5oPgogI2luY2x1ZGUgPHd0Zi9S
ZWZQdHIuaD4KICNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CiAKIG5hbWVzcGFjZSBXZWJLaXQgewog
Ci1jbGFzcyBXZWJQYWdlUHJveHk7Ci0KIHR5cGVkZWYgVmVjdG9yPFJlZlB0cjxXZWJCYWNrRm9y
d2FyZExpc3RJdGVtPiA+IEJhY2tGb3J3YXJkTGlzdEl0ZW1WZWN0b3I7CiAKIC8qCkBAIC03Miw2
ICs3MSwxMSBAQCBwdWJsaWM6CiAgICAgUGFzc1JlZlB0cjxJbW11dGFibGVBcnJheT4gYmFja0xp
c3RBc0ltbXV0YWJsZUFycmF5V2l0aExpbWl0KHVuc2lnbmVkIGxpbWl0KTsKICAgICBQYXNzUmVm
UHRyPEltbXV0YWJsZUFycmF5PiBmb3J3YXJkTGlzdEFzSW1tdXRhYmxlQXJyYXlXaXRoTGltaXQo
dW5zaWduZWQgbGltaXQpOwogCisjaWYgUExBVEZPUk0oQ0YpCisgICAgQ0ZEaWN0aW9uYXJ5UmVm
IGNyZWF0ZUNGRGljdGlvbmFyeVJlcHJlc2VudGF0aW9uKFdlYlBhZ2VQcm94eTo6V2ViUGFnZVBy
b3h5U2Vzc2lvblN0YXRlRmlsdGVyQ2FsbGJhY2ssIHZvaWQqIGNvbnRleHQpIGNvbnN0OworICAg
IGJvb2wgcmVzdG9yZUZyb21DRkRpY3Rpb25hcnlSZXByZXNlbnRhdGlvbihDRkRpY3Rpb25hcnlS
ZWYpOworI2VuZGlmCisKIHByaXZhdGU6CiAgICAgV2ViQmFja0ZvcndhcmRMaXN0KFdlYlBhZ2VQ
cm94eSopOwogCkBAIC04Myw2ICs4NywxNCBAQCBwcml2YXRlOgogICAgIHVuc2lnbmVkIG1fY2Fw
YWNpdHk7CiAgICAgYm9vbCBtX2Nsb3NlZDsKICAgICBib29sIG1fZW5hYmxlZDsKKyAgICAKKy8v
IEZJWE1FIC0gPHJkYXI6Ly9wcm9ibGVtLzgyNjE2MjQ+IGFuZCBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NDczNTUgLSAKKy8vIFdoZW4gd2UgaGF2ZSBhIHNvbHV0aW9u
IGZvciByZXN0b3JpbmcgdGhlIGZ1bGwgYmFjay9mb3J3YXJkIGxpc3QgCisvLyB0aGVuIGNhdXNp
bmcgYSBsb2FkIG9mIHRoZSBjdXJyZW50IGl0ZW0sIHdlIHdpbGwgbm8gbG9uZ2VyIG5lZWQgdGhp
cy4KK3B1YmxpYzoKKyAgICBjb25zdCBXVEY6OlN0cmluZyYgcmVzdG9yZWRDdXJyZW50VVJMKCkg
Y29uc3QgeyByZXR1cm4gbV9yZXN0b3JlZEN1cnJlbnRVUkw7IH0KK3ByaXZhdGU6CisgICAgV1RG
OjpTdHJpbmcgbV9yZXN0b3JlZEN1cnJlbnRVUkw7CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJL
aXQKSW5kZXg6IFdlYktpdDIvVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gV2ViS2l0Mi9VSVByb2Nlc3MvV2ViUGFnZVByb3h5LmNwcAkocmV2aXNpb24gNjk1MjEpCisr
KyBXZWJLaXQyL1VJUHJvY2Vzcy9XZWJQYWdlUHJveHkuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00
NTAsMTYgKzQ1MCwxOCBAQCB2b2lkIFdlYlBhZ2VQcm94eTo6dGVybWluYXRlUHJvY2VzcygpCiAg
ICAgcHJvY2VzcygpLT50ZXJtaW5hdGUoKTsKIH0KIAotUGFzc1JlZlB0cjxXZWJEYXRhPiBXZWJQ
YWdlUHJveHk6OnNlc3Npb25TdGF0ZSgpIGNvbnN0CisjaWYgIVBMQVRGT1JNKENGKQorUGFzc1Jl
ZlB0cjxXZWJEYXRhPiBXZWJQYWdlUHJveHk6OnNlc3Npb25TdGF0ZURhdGEoV2ViUGFnZVByb3h5
U2Vzc2lvblN0YXRlRmlsdGVyQ2FsbGJhY2ssIHZvaWQqIGNvbnRleHQpIGNvbnN0CiB7CiAgICAg
Ly8gRklYTUU6IFJldHVybiBzZXNzaW9uIHN0YXRlIGRhdGEgZm9yIHNhdmluZyBQYWdlIHN0YXRl
LgogICAgIHJldHVybiAwOwogfQogCi12b2lkIFdlYlBhZ2VQcm94eTo6cmVzdG9yZUZyb21TZXNz
aW9uU3RhdGUoV2ViRGF0YSopCit2b2lkIFdlYlBhZ2VQcm94eTo6cmVzdG9yZUZyb21TZXNzaW9u
U3RhdGVEYXRhKFdlYkRhdGEqKQogewogICAgIC8vIEZJWE1FOiBSZXN0b3JlIHRoZSBQYWdlIGZy
b20gdGhlIHBhc3NlZCBpbiBzZXNzaW9uIHN0YXRlIGRhdGEuCiB9CisjZW5kaWYKIAogdm9pZCBX
ZWJQYWdlUHJveHk6OnNldFRleHRab29tRmFjdG9yKGRvdWJsZSB6b29tRmFjdG9yKQogewpJbmRl
eDogV2ViS2l0Mi9VSVByb2Nlc3MvV2ViUGFnZVByb3h5LmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0
Mi9VSVByb2Nlc3MvV2ViUGFnZVByb3h5LmgJKHJldmlzaW9uIDY5NTIxKQorKysgV2ViS2l0Mi9V
SVByb2Nlc3MvV2ViUGFnZVByb3h5LmgJKHdvcmtpbmcgY29weSkKQEAgLTE2NCw5ICsxNjQsMTAg
QEAgcHVibGljOgogICAgIHZvaWQgc2V0Q3VzdG9tVXNlckFnZW50KGNvbnN0IFN0cmluZyYpOwog
CiAgICAgdm9pZCB0ZXJtaW5hdGVQcm9jZXNzKCk7Ci0gICAgCi0gICAgUGFzc1JlZlB0cjxXZWJE
YXRhPiBzZXNzaW9uU3RhdGUoKSBjb25zdDsKLSAgICB2b2lkIHJlc3RvcmVGcm9tU2Vzc2lvblN0
YXRlKFdlYkRhdGEqKTsKKworICAgIHR5cGVkZWYgYm9vbCAoKldlYlBhZ2VQcm94eVNlc3Npb25T
dGF0ZUZpbHRlckNhbGxiYWNrKShXS1BhZ2VSZWYsIFdLU3RyaW5nUmVmIHR5cGUsIFdLVHlwZVJl
ZiBvYmplY3QsIHZvaWQqKTsKKyAgICBQYXNzUmVmUHRyPFdlYkRhdGE+IHNlc3Npb25TdGF0ZURh
dGEoV2ViUGFnZVByb3h5U2Vzc2lvblN0YXRlRmlsdGVyQ2FsbGJhY2ssIHZvaWQqIGNvbnRleHQp
IGNvbnN0OworICAgIHZvaWQgcmVzdG9yZUZyb21TZXNzaW9uU3RhdGVEYXRhKFdlYkRhdGEqKTsK
IAogICAgIGRvdWJsZSB0ZXh0Wm9vbUZhY3RvcigpIGNvbnN0IHsgcmV0dXJuIG1fdGV4dFpvb21G
YWN0b3I7IH0KICAgICB2b2lkIHNldFRleHRab29tRmFjdG9yKGRvdWJsZSk7CkluZGV4OiBXZWJL
aXQyL1VJUHJvY2Vzcy9BUEkvQy9XS1BhZ2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdDIvVUlQ
cm9jZXNzL0FQSS9DL1dLUGFnZS5jcHAJKHJldmlzaW9uIDY5NTIxKQorKysgV2ViS2l0Mi9VSVBy
b2Nlc3MvQVBJL0MvV0tQYWdlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTUyLDE1ICsxNTIsMjEg
QEAgdm9pZCBXS1BhZ2VUZXJtaW5hdGUoV0tQYWdlUmVmIHBhZ2VSZWYpCiAgICAgdG9JbXBsKHBh
Z2VSZWYpLT50ZXJtaW5hdGVQcm9jZXNzKCk7CiB9CiAKLVdLRGF0YVJlZiBXS1BhZ2VDb3B5U2Vz
c2lvblN0YXRlKFdLUGFnZVJlZiBwYWdlUmVmKQorV0tTdHJpbmdSZWYgV0tQYWdlR2V0U2Vzc2lv
bkhpc3RvcnlVUkxWYWx1ZVR5cGUoKQogewotICAgIFJlZlB0cjxXZWJEYXRhPiBzdGF0ZSA9IHRv
SW1wbChwYWdlUmVmKS0+c2Vzc2lvblN0YXRlKCk7CisgICAgc3RhdGljIFdlYlN0cmluZyogc2Vz
c2lvbkhpc3RvcnlVUkxWYWx1ZVR5cGUgPSBXZWJTdHJpbmc6OmNyZWF0ZSgiU2Vzc2lvbkhpc3Rv
cnlVUkwiKS5yZWxlYXNlUmVmKCk7CisgICAgcmV0dXJuIHRvQVBJKHNlc3Npb25IaXN0b3J5VVJM
VmFsdWVUeXBlKTsKK30KKworV0tEYXRhUmVmIFdLUGFnZUNvcHlTZXNzaW9uU3RhdGUoV0tQYWdl
UmVmIHBhZ2VSZWYsIHZvaWQgKmNvbnRleHQsIFdLUGFnZVNlc3Npb25TdGF0ZUZpbHRlckNhbGxi
YWNrIGZpbHRlcikKK3sKKyAgICBSZWZQdHI8V2ViRGF0YT4gc3RhdGUgPSB0b0ltcGwocGFnZVJl
ZiktPnNlc3Npb25TdGF0ZURhdGEoZmlsdGVyLCBjb250ZXh0KTsKICAgICByZXR1cm4gdG9BUEko
c3RhdGUucmVsZWFzZSgpLnJlbGVhc2VSZWYoKSk7CiB9CiAKIHZvaWQgV0tQYWdlUmVzdG9yZUZy
b21TZXNzaW9uU3RhdGUoV0tQYWdlUmVmIHBhZ2VSZWYsIFdLRGF0YVJlZiBzZXNzaW9uU3RhdGVE
YXRhKQogewotICAgIHRvSW1wbChwYWdlUmVmKS0+cmVzdG9yZUZyb21TZXNzaW9uU3RhdGUodG9J
bXBsKHNlc3Npb25TdGF0ZURhdGEpKTsKKyAgICB0b0ltcGwocGFnZVJlZiktPnJlc3RvcmVGcm9t
U2Vzc2lvblN0YXRlRGF0YSh0b0ltcGwoc2Vzc2lvblN0YXRlRGF0YSkpOwogfQogCiBkb3VibGUg
V0tQYWdlR2V0VGV4dFpvb21GYWN0b3IoV0tQYWdlUmVmIHBhZ2VSZWYpCkluZGV4OiBXZWJLaXQy
L1VJUHJvY2Vzcy9BUEkvQy9XS1BhZ2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQyL1VJUHJvY2Vz
cy9BUEkvQy9XS1BhZ2UuaAkocmV2aXNpb24gNjk1MjEpCisrKyBXZWJLaXQyL1VJUHJvY2Vzcy9B
UEkvQy9XS1BhZ2UuaAkod29ya2luZyBjb3B5KQpAQCAtMjA1LDcgKzIwNSwxMCBAQCBXS19FWFBP
UlQgdm9pZCBXS1BhZ2VTZXRDdXN0b21Vc2VyQWdlbnQoCiAKIFdLX0VYUE9SVCB2b2lkIFdLUGFn
ZVRlcm1pbmF0ZShXS1BhZ2VSZWYgcGFnZSk7CiAKLVdLX0VYUE9SVCBXS0RhdGFSZWYgV0tQYWdl
Q29weVNlc3Npb25TdGF0ZShXS1BhZ2VSZWYgcGFnZSk7CitXS19FWFBPUlQgV0tTdHJpbmdSZWYg
V0tQYWdlR2V0U2Vzc2lvbkhpc3RvcnlVUkxWYWx1ZVR5cGUodm9pZCk7CisKK3R5cGVkZWYgYm9v
bCAoKldLUGFnZVNlc3Npb25TdGF0ZUZpbHRlckNhbGxiYWNrKShXS1BhZ2VSZWYgcGFnZSwgV0tT
dHJpbmdSZWYgdmFsdWVUeXBlLCBXS1R5cGVSZWYgdmFsdWUsIHZvaWQqIGNvbnRleHQpOworV0tf
RVhQT1JUIFdLRGF0YVJlZiBXS1BhZ2VDb3B5U2Vzc2lvblN0YXRlKFdLUGFnZVJlZiBwYWdlLCB2
b2lkICpjb250ZXh0LCBXS1BhZ2VTZXNzaW9uU3RhdGVGaWx0ZXJDYWxsYmFjayB1cmxBbGxvd2Vk
Q2FsbGJhY2spOwogV0tfRVhQT1JUIHZvaWQgV0tQYWdlUmVzdG9yZUZyb21TZXNzaW9uU3RhdGUo
V0tQYWdlUmVmIHBhZ2UsIFdLRGF0YVJlZiBzZXNzaW9uU3RhdGVEYXRhKTsKIAogV0tfRVhQT1JU
IGRvdWJsZSBXS1BhZ2VHZXRUZXh0Wm9vbUZhY3RvcihXS1BhZ2VSZWYgcGFnZSk7CkluZGV4OiBX
ZWJLaXQyL1VJUHJvY2Vzcy9jZi9XZWJCYWNrRm9yd2FyZExpc3RDRi5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gV2ViS2l0Mi9VSVByb2Nlc3MvY2YvV2ViQmFja0ZvcndhcmRMaXN0Q0YuY3BwCShyZXZpc2lv
biAwKQorKysgV2ViS2l0Mi9VSVByb2Nlc3MvY2YvV2ViQmFja0ZvcndhcmRMaXN0Q0YuY3BwCShy
ZXZpc2lvbiAwKQpAQCAtMCwwICsxLDExOCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMCBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMg
SVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRP
UlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MK
KyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgor
ICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJXZWJC
YWNrRm9yd2FyZExpc3QuaCIKKyNpbmNsdWRlICJMb2dnaW5nLmgiCisKK3VzaW5nIG5hbWVzcGFj
ZSBXZWJDb3JlOworCituYW1lc3BhY2UgV2ViS2l0IHsKKworREVGSU5FX1NUQVRJQ19HRVRURVIo
Q0ZTdHJpbmdSZWYsIFNlc3Npb25IaXN0b3J5Q3VycmVudEluZGV4S2V5LCBDRlNUUigiU2Vzc2lv
bkhpc3RvcnlDdXJyZW50SW5kZXgiKSk7CitERUZJTkVfU1RBVElDX0dFVFRFUihDRlN0cmluZ1Jl
ZiwgU2Vzc2lvbkhpc3RvcnlFbnRyaWVzS2V5LCBDRlNUUigiU2Vzc2lvbkhpc3RvcnlFbnRyaWVz
IikpOworREVGSU5FX1NUQVRJQ19HRVRURVIoQ0ZTdHJpbmdSZWYsIFNlc3Npb25IaXN0b3J5RW50
cnlUaXRsZUtleSwgQ0ZTVFIoIlNlc3Npb25IaXN0b3J5RW50cnlUaXRsZSIpKTsKK0RFRklORV9T
VEFUSUNfR0VUVEVSKENGU3RyaW5nUmVmLCBTZXNzaW9uSGlzdG9yeUVudHJ5VVJMS2V5LCBDRlNU
UigiU2Vzc2lvbkhpc3RvcnlFbnRyeVVSTCIpKTsKKworQ0ZEaWN0aW9uYXJ5UmVmIFdlYkJhY2tG
b3J3YXJkTGlzdDo6Y3JlYXRlQ0ZEaWN0aW9uYXJ5UmVwcmVzZW50YXRpb24oV2ViUGFnZVByb3h5
OjpXZWJQYWdlUHJveHlTZXNzaW9uU3RhdGVGaWx0ZXJDYWxsYmFjayBmaWx0ZXIsIHZvaWQqIGNv
bnRleHQpIGNvbnN0Cit7CisgICAgUmV0YWluUHRyPENGTnVtYmVyUmVmPiBjdXJyZW50SW5kZXgo
QWRvcHRDRiwgQ0ZOdW1iZXJDcmVhdGUoMCwga0NGTnVtYmVySW50VHlwZSwgJm1fY3VycmVudCkp
OyAgICAKKyAgICBSZXRhaW5QdHI8Q0ZNdXRhYmxlQXJyYXlSZWY+IGVudHJpZXMoQWRvcHRDRiwg
Q0ZBcnJheUNyZWF0ZU11dGFibGUoMCwgbV9lbnRyaWVzLnNpemUoKSwgJmtDRlR5cGVBcnJheUNh
bGxCYWNrcykpOworICAgIAorICAgIGNvbnN0IHZvaWQqIGtleXNbMl0gPSB7IFNlc3Npb25IaXN0
b3J5Q3VycmVudEluZGV4S2V5KCksIFNlc3Npb25IaXN0b3J5RW50cmllc0tleSgpIH07CisgICAg
Y29uc3Qgdm9pZCogdmFsdWVzWzJdID0geyBjdXJyZW50SW5kZXguZ2V0KCksIGVudHJpZXMuZ2V0
KCkgfTsKKworICAgIFJldGFpblB0cjxDRkRpY3Rpb25hcnlSZWY+IGRpY3Rpb25hcnkoQWRvcHRD
RiwgQ0ZEaWN0aW9uYXJ5Q3JlYXRlKDAsIGtleXMsIHZhbHVlcywgMiwgJmtDRlR5cGVEaWN0aW9u
YXJ5S2V5Q2FsbEJhY2tzLCAma0NGVHlwZURpY3Rpb25hcnlWYWx1ZUNhbGxCYWNrcykpOworCisg
ICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtX2VudHJpZXMuc2l6ZSgpOyArK2kpIHsKKyAgICAg
ICAgUmVmUHRyPFdlYlVSTD4gd2ViVVJMID0gV2ViVVJMOjpjcmVhdGUobV9lbnRyaWVzW2ldLT51
cmwoKSk7CisgICAgICAgIGlmICghZmlsdGVyKHRvQVBJKG1fcGFnZSksIFdLUGFnZUdldFNlc3Np
b25IaXN0b3J5VVJMVmFsdWVUeXBlKCksIHRvVVJMUmVmKG1fZW50cmllc1tpXS0+b3JpZ2luYWxV
UkwoKS5pbXBsKCkpLCBjb250ZXh0KSkKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAK
KyAgICAgICAgUmV0YWluUHRyPENGU3RyaW5nUmVmPiB1cmwoQWRvcHRDRiwgbV9lbnRyaWVzW2ld
LT51cmwoKS5jcmVhdGVDRlN0cmluZygpKTsKKyAgICAgICAgUmV0YWluUHRyPENGU3RyaW5nUmVm
PiB0aXRsZShBZG9wdENGLCBtX2VudHJpZXNbaV0tPnRpdGxlKCkuY3JlYXRlQ0ZTdHJpbmcoKSk7
CisgICAgICAgIAorICAgICAgICBjb25zdCB2b2lkKiBrZXlzWzJdID0geyBTZXNzaW9uSGlzdG9y
eUVudHJ5VVJMS2V5KCksIFNlc3Npb25IaXN0b3J5RW50cnlUaXRsZUtleSgpIH07CisgICAgICAg
IGNvbnN0IHZvaWQqIHZhbHVlc1syXSA9IHsgdXJsLmdldCgpLCB0aXRsZS5nZXQoKSB9OworCisg
ICAgICAgIFJldGFpblB0cjxDRkRpY3Rpb25hcnlSZWY+IGVudHJ5RGljdGlvbmFyeShBZG9wdENG
LCBDRkRpY3Rpb25hcnlDcmVhdGUoMCwga2V5cywgdmFsdWVzLCAyLCAma0NGVHlwZURpY3Rpb25h
cnlLZXlDYWxsQmFja3MsICZrQ0ZUeXBlRGljdGlvbmFyeVZhbHVlQ2FsbEJhY2tzKSk7CisgICAg
ICAgIENGQXJyYXlBcHBlbmRWYWx1ZShlbnRyaWVzLmdldCgpLCBlbnRyeURpY3Rpb25hcnkuZ2V0
KCkpOworICAgIH0KKyAgICAKKyAgICByZXR1cm4gZGljdGlvbmFyeS5sZWFrUmVmKCk7Cit9CisK
K2Jvb2wgV2ViQmFja0ZvcndhcmRMaXN0OjpyZXN0b3JlRnJvbUNGRGljdGlvbmFyeVJlcHJlc2Vu
dGF0aW9uKENGRGljdGlvbmFyeVJlZiBkaWN0aW9uYXJ5KQoreworICAgIENGTnVtYmVyUmVmIGNm
SW5kZXggPSAoQ0ZOdW1iZXJSZWYpQ0ZEaWN0aW9uYXJ5R2V0VmFsdWUoZGljdGlvbmFyeSwgU2Vz
c2lvbkhpc3RvcnlDdXJyZW50SW5kZXhLZXkoKSk7CisgICAgaWYgKCFjZkluZGV4IHx8IENGR2V0
VHlwZUlEKGNmSW5kZXgpICE9IENGTnVtYmVyR2V0VHlwZUlEKCkpIHsKKyAgICAgICAgTE9HKFNl
c3Npb25TdGF0ZSwgIldlYkJhY2tGb3J3YXJkTGlzdCBkaWN0aW9uYXJ5IHJlcHJlc2VudGF0aW9u
IGRvZXMgbm90IGhhdmUgYSB2YWxpZCBjdXJyZW50IGluZGV4Iik7CisgICAgICAgIHJldHVybiBm
YWxzZTsKKyAgICB9CisgICAgCisgICAgdW5zaWduZWQgY3VycmVudEluZGV4OworICAgIGlmICgh
Q0ZOdW1iZXJHZXRWYWx1ZShjZkluZGV4LCBrQ0ZOdW1iZXJJbnRUeXBlLCAmY3VycmVudEluZGV4
KSkgeworICAgICAgICBMT0coU2Vzc2lvblN0YXRlLCAiV2ViQmFja0ZvcndhcmRMaXN0IGRpY3Rp
b25hcnkgcmVwcmVzZW50YXRpb24gZG9lcyBub3QgaGF2ZSBhIHZhbGlkIGludGVnZXIgY3VycmVu
dCBpbmRleCIpOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorICAgIAorICAgIENGQXJy
YXlSZWYgY2ZFbnRyaWVzID0gKENGQXJyYXlSZWYpQ0ZEaWN0aW9uYXJ5R2V0VmFsdWUoZGljdGlv
bmFyeSwgU2Vzc2lvbkhpc3RvcnlFbnRyaWVzS2V5KCkpOworICAgIGlmICghY2ZFbnRyaWVzIHx8
IENGR2V0VHlwZUlEKGNmRW50cmllcykgIT0gQ0ZBcnJheUdldFR5cGVJRCgpKSB7CisgICAgICAg
IExPRyhTZXNzaW9uU3RhdGUsICJXZWJCYWNrRm9yd2FyZExpc3QgZGljdGlvbmFyeSByZXByZXNl
bnRhdGlvbiBkb2VzIG5vdCBoYXZlIGEgdmFsaWQgbGlzdCBvZiBlbnRyaWVzIik7CisgICAgICAg
IHJldHVybiBmYWxzZTsKKyAgICB9CisgICAgCisgICAgQ0ZJbmRleCBzaXplID0gQ0ZBcnJheUdl
dENvdW50KGNmRW50cmllcyk7CisgICAgZm9yIChDRkluZGV4IGkgPSAwOyBpIDwgc2l6ZTsgKytp
KSB7CisgICAgICAgIENGRGljdGlvbmFyeVJlZiBlbnRyeURpY3Rpb25hcnkgPSAoQ0ZEaWN0aW9u
YXJ5UmVmKUNGQXJyYXlHZXRWYWx1ZUF0SW5kZXgoY2ZFbnRyaWVzLCBpKTsKKyAgICAgICAgaWYg
KCFlbnRyeURpY3Rpb25hcnkgfHwgQ0ZHZXRUeXBlSUQoZW50cnlEaWN0aW9uYXJ5KSAhPSBDRkRp
Y3Rpb25hcnlHZXRUeXBlSUQoKSkgeworICAgICAgICAgICAgTE9HKFNlc3Npb25TdGF0ZSwgIldl
YkJhY2tGb3J3YXJkTGlzdCBlbnRyeSBhcnJheSBkb2VzIG5vdCBoYXZlIGEgdmFsaWQgZW50cnkg
YXQgaW5kZXggJWkiLCAoaW50KWkpOworICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAg
ICB9CisgICAgICAgIAorICAgICAgICBDRlN0cmluZ1JlZiBlbnRyeVVSTCA9IChDRlN0cmluZ1Jl
ZilDRkRpY3Rpb25hcnlHZXRWYWx1ZShlbnRyeURpY3Rpb25hcnksIFNlc3Npb25IaXN0b3J5RW50
cnlVUkxLZXkoKSk7CisgICAgICAgIGlmICghZW50cnlVUkwgfHwgQ0ZHZXRUeXBlSUQoZW50cnlV
UkwpICE9IENGU3RyaW5nR2V0VHlwZUlEKCkpIHsKKyAgICAgICAgICAgIExPRyhTZXNzaW9uU3Rh
dGUsICJXZWJCYWNrRm9yd2FyZExpc3QgZW50cnkgYXQgaW5kZXggJWkgZG9lcyBub3QgaGF2ZSBh
IHZhbGlkIFVSTCIsIChpbnQpaSk7CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAg
IH0KKworICAgICAgICBDRlN0cmluZ1JlZiBlbnRyeVRpdGxlID0gKENGU3RyaW5nUmVmKUNGRGlj
dGlvbmFyeUdldFZhbHVlKGVudHJ5RGljdGlvbmFyeSwgU2Vzc2lvbkhpc3RvcnlFbnRyeVRpdGxl
S2V5KCkpOworICAgICAgICBpZiAoIWVudHJ5VGl0bGUgfHwgQ0ZHZXRUeXBlSUQoZW50cnlUaXRs
ZSkgIT0gQ0ZTdHJpbmdHZXRUeXBlSUQoKSkgeworICAgICAgICAgICAgTE9HKFNlc3Npb25TdGF0
ZSwgIldlYkJhY2tGb3J3YXJkTGlzdCBlbnRyeSBhdCBpbmRleCAlaSBkb2VzIG5vdCBoYXZlIGEg
dmFsaWQgdGl0bGUiLCAoaW50KWkpOworICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAg
ICB9CisgICAgICAgIAorICAgICAgICAvLyBGSVhNRSA8cmRhcjovL3Byb2JsZW0vODI2MTYyND4g
YW5kIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD00NzM1NSAtIAorICAg
ICAgICAvLyBUaGUgZGF0YSBmb3IgdGhlIGFib3ZlIGVudHJ5IG5lZWRzIHRvIGJlIGFkZGVkIHRv
IHRoZSBmdWxsIGJhY2svZm9yd2FyZCBsaXN0LgorICAgICAgICAvLyBXaGVuIHdlIGhhdmUgYSBz
b2x1dGlvbiB0aGF0IHJlc3RvcmVzIHRoZSBmdWxsIGJhY2svZm9yd2FyZGxpc3QgdGhlbiBjYXVz
ZXMgYSBsb2FkIG9mIHRoZSBjdXJyZW50IGl0ZW0sCisgICAgICAgIC8vIHdlIHdpbGwgbm8gbG9u
Z2VyIG5lZWQgdGhpcy4KKyAgICAgICAgaWYgKGkgPT0gY3VycmVudEluZGV4KSB7CisgICAgICAg
ICAgICBtX3Jlc3RvcmVkQ3VycmVudFVSTCA9IGVudHJ5VVJMOworICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgIH0KKyAgICB9CisgICAgcmV0dXJuIHRydWU7Cit9CisKK30gLy8gbmFtZXNwYWNl
IFdlYktpdApJbmRleDogV2ViS2l0Mi9VSVByb2Nlc3MvY2YvV2ViUGFnZVByb3h5Q0YuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFdlYktpdDIvVUlQcm9jZXNzL2NmL1dlYlBhZ2VQcm94eUNGLmNwcAkocmV2
aXNpb24gMCkKKysrIFdlYktpdDIvVUlQcm9jZXNzL2NmL1dlYlBhZ2VQcm94eUNGLmNwcAkocmV2
aXNpb24gMCkKQEAgLTAsMCArMSwxMTkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElT
JycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JT
CisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisg
KiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQg
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAq
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiV2ViUGFn
ZVByb3h5LmgiCisKKyNpbmNsdWRlICJMb2dnaW5nLmgiCisjaW5jbHVkZSAiV2ViQmFja0Zvcndh
cmRMaXN0LmgiCisjaW5jbHVkZSAiV2ViRGF0YS5oIgorCit1c2luZyBuYW1lc3BhY2UgV2ViQ29y
ZTsKKworbmFtZXNwYWNlIFdlYktpdCB7CisKK0RFRklORV9TVEFUSUNfR0VUVEVSKENGU3RyaW5n
UmVmLCBTZXNzaW9uSGlzdG9yeUtleSwgQ0ZTVFIoIlNlc3Npb25IaXN0b3J5IikpOworCitzdGF0
aWMgY29uc3QgVUludDMyIEN1cnJlbnRTZXNzaW9uU3RhdGVEYXRhVmVyc2lvbiA9IDB4QUFBQUFB
QUE7CisKK1Bhc3NSZWZQdHI8V2ViRGF0YT4gV2ViUGFnZVByb3h5OjpzZXNzaW9uU3RhdGVEYXRh
KFdlYlBhZ2VQcm94eVNlc3Npb25TdGF0ZUZpbHRlckNhbGxiYWNrIGZpbHRlciwgdm9pZCogY29u
dGV4dCkgY29uc3QKK3sKKyAgICBSZXRhaW5QdHI8Q0ZEaWN0aW9uYXJ5UmVmPiBzZXNzaW9uSGlz
dG9yeURpY3Rpb25hcnkoQWRvcHRDRiwgbV9iYWNrRm9yd2FyZExpc3QtPmNyZWF0ZUNGRGljdGlv
bmFyeVJlcHJlc2VudGF0aW9uKGZpbHRlciwgY29udGV4dCkpOworICAgIAorICAgIC8vIEZvciBu
b3cgd2UncmUgb25seSBzZXJpYWxpemluZyB0aGUgYmFjay9mb3J3YXJkIGxpc3QuICBJZiB0aGF0
IG9iamVjdCBpcyBudWxsLCB0aGVuIHRoZSBlbnRpcmUgc2Vzc2lvblN0YXRlIGNhbiBiZSBudWxs
LgorICAgIGlmICghc2Vzc2lvbkhpc3RvcnlEaWN0aW9uYXJ5KQorICAgICAgICByZXR1cm4gMDsK
KyAgICAKKyAgICBjb25zdCB2b2lkKiBrZXlzWzFdID0geyBTZXNzaW9uSGlzdG9yeUtleSgpIH07
CisgICAgY29uc3Qgdm9pZCogdmFsdWVzWzFdID0geyBzZXNzaW9uSGlzdG9yeURpY3Rpb25hcnku
Z2V0KCkgfTsKKyAgICAKKyAgICBSZXRhaW5QdHI8Q0ZEaWN0aW9uYXJ5UmVmPiBzdGF0ZURpY3Rp
b25hcnkoQWRvcHRDRiwgQ0ZEaWN0aW9uYXJ5Q3JlYXRlKDAsIGtleXMsIHZhbHVlcywgMSwgJmtD
RlR5cGVEaWN0aW9uYXJ5S2V5Q2FsbEJhY2tzLCAma0NGVHlwZURpY3Rpb25hcnlWYWx1ZUNhbGxC
YWNrcykpOworCisgICAgUmV0YWluUHRyPENGRGF0YVJlZj4gc3RhdGVDRkRhdGEoQWRvcHRDRiwg
Q0ZQcm9wZXJ0eUxpc3RDcmVhdGVEYXRhKDAsIHN0YXRlRGljdGlvbmFyeS5nZXQoKSwga0NGUHJv
cGVydHlMaXN0QmluYXJ5Rm9ybWF0X3YxXzAsIDAsIDApKTsKKworICAgIENGSW5kZXggbGVuZ3Ro
ID0gQ0ZEYXRhR2V0TGVuZ3RoKHN0YXRlQ0ZEYXRhLmdldCgpKTsKKyAgICBWZWN0b3I8dW5zaWdu
ZWQgY2hhcj4gc3RhdGVWZWN0b3IobGVuZ3RoICsgNCk7CisgICAgCisgICAgLy8gUHV0IHRoZSBz
ZXNzaW9uIHN0YXRlIHZlcnNpb24gbnVtYmVyIGF0IHRoZSBzdGFydCBvZiB0aGUgYnVmZmVyCisg
ICAgc3RhdGVWZWN0b3IuZGF0YSgpWzBdID0gKEN1cnJlbnRTZXNzaW9uU3RhdGVEYXRhVmVyc2lv
biAmIDB4RkYwMDAwMDApID4+IDI0OworICAgIHN0YXRlVmVjdG9yLmRhdGEoKVsxXSA9IChDdXJy
ZW50U2Vzc2lvblN0YXRlRGF0YVZlcnNpb24gJiAweDAwRkYwMDAwKSA+PiAxNjsKKyAgICBzdGF0
ZVZlY3Rvci5kYXRhKClbMl0gPSAoQ3VycmVudFNlc3Npb25TdGF0ZURhdGFWZXJzaW9uICYgMHgw
MDAwRkYwMCkgPj4gODsKKyAgICBzdGF0ZVZlY3Rvci5kYXRhKClbM10gPSAoQ3VycmVudFNlc3Np
b25TdGF0ZURhdGFWZXJzaW9uICYgMHgwMDAwMDBGRik7CisgICAgCisgICAgLy8gQ29weSBpbiB0
aGUgYWN0dWFsIHNlc3Npb24gc3RhdGUgZGF0YQorICAgIENGRGF0YUdldEJ5dGVzKHN0YXRlQ0ZE
YXRhLmdldCgpLCBDRlJhbmdlTWFrZSgwLCBsZW5ndGgpLCBzdGF0ZVZlY3Rvci5kYXRhKCkgKyA0
KTsKKyAgICAKKyAgICByZXR1cm4gV2ViRGF0YTo6Y3JlYXRlKHN0YXRlVmVjdG9yKTsKK30KKwor
dm9pZCBXZWJQYWdlUHJveHk6OnJlc3RvcmVGcm9tU2Vzc2lvblN0YXRlRGF0YShXZWJEYXRhKiB3
ZWJEYXRhKQoreworICAgIGlmICghd2ViRGF0YSB8fCB3ZWJEYXRhLT5zaXplKCkgPCA0KQorICAg
ICAgICByZXR1cm47CisKKyAgICBjb25zdCB1bnNpZ25lZCBjaGFyKiBidWZmZXIgPSB3ZWJEYXRh
LT5ieXRlcygpOworICAgIFVJbnQzMiB2ZXJzaW9uSGVhZGVyID0gKGJ1ZmZlclswXSA8PCAyNCkg
KyAoYnVmZmVyWzFdIDw8IDE2KSArIChidWZmZXJbMl0gPDwgOCkgKyBidWZmZXJbM107CisKKyAg
ICBwcmludGYoIiV4XG4iLCB2ZXJzaW9uSGVhZGVyKTsKKyAgICAKKyAgICBpZiAodmVyc2lvbkhl
YWRlciAhPSBDdXJyZW50U2Vzc2lvblN0YXRlRGF0YVZlcnNpb24pIHsKKyAgICAgICAgTE9HKFNl
c3Npb25TdGF0ZSwgIlVucmVjb2duaXplZCB2ZXJzaW9uIGhlYWRlciBmb3Igc2Vzc2lvbiBzdGF0
ZSBkYXRhIC0gY2Fubm90IHJlc3RvcmUiKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICAK
KyAgICBSZXRhaW5QdHI8Q0ZEYXRhUmVmPiBkYXRhKEFkb3B0Q0YsIENGRGF0YUNyZWF0ZSgwLCB3
ZWJEYXRhLT5ieXRlcygpICsgNCwgd2ViRGF0YS0+c2l6ZSgpIC0gNCkpOworCisgICAgQ0ZFcnJv
clJlZiBwcm9wZXJ0eUxpc3RFcnJvciA9IDA7CisgICAgUmV0YWluUHRyPENGUHJvcGVydHlMaXN0
UmVmPiBwcm9wZXJ0eUxpc3QoQWRvcHRDRiwgQ0ZQcm9wZXJ0eUxpc3RDcmVhdGVXaXRoRGF0YSgw
LCBkYXRhLmdldCgpLCBrQ0ZQcm9wZXJ0eUxpc3RJbW11dGFibGUsIDAsICZwcm9wZXJ0eUxpc3RF
cnJvcikpOworICAgIGlmIChwcm9wZXJ0eUxpc3RFcnJvcikgeworICAgICAgICBMT0coU2Vzc2lv
blN0YXRlLCAiQ291bGQgbm90IHJlYWQgc2Vzc2lvbiBzdGF0ZSBwcm9wZXJ0eSBsaXN0Iik7Cisg
ICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZiAoIXByb3BlcnR5TGlzdCkKKyAgICAgICAg
cmV0dXJuOworICAgICAgICAKKyAgICBpZiAoQ0ZHZXRUeXBlSUQocHJvcGVydHlMaXN0LmdldCgp
KSAhPSBDRkRpY3Rpb25hcnlHZXRUeXBlSUQoKSkgeworICAgICAgICBMT0coU2Vzc2lvblN0YXRl
LCAiU2Vzc2lvblN0YXRlIHByb3BlcnR5IGxpc3QgaXMgbm90IGEgQ0ZEaWN0aW9uYXJ5UmVmICgl
aSkgLSBpdHMgQ0ZUeXBlSUQgaXMgJWkiLCAoaW50KUNGRGljdGlvbmFyeUdldFR5cGVJRCgpLCAo
aW50KUNGR2V0VHlwZUlEKHByb3BlcnR5TGlzdC5nZXQoKSkpOworICAgICAgICByZXR1cm47Cisg
ICAgfQorICAgIAorICAgIENGVHlwZVJlZiBzZXNzaW9uSGlzdG9yeVJlZiA9IENGRGljdGlvbmFy
eUdldFZhbHVlKHN0YXRpY19jYXN0PENGRGljdGlvbmFyeVJlZj4ocHJvcGVydHlMaXN0LmdldCgp
KSwgU2Vzc2lvbkhpc3RvcnlLZXkoKSk7CisgICAgaWYgKCFzZXNzaW9uSGlzdG9yeVJlZiB8fCBD
RkdldFR5cGVJRChzZXNzaW9uSGlzdG9yeVJlZikgIT0gQ0ZEaWN0aW9uYXJ5R2V0VHlwZUlEKCkp
IHsKKyAgICAgICAgTE9HKFNlc3Npb25TdGF0ZSwgIlNlc3Npb25TdGF0ZSBkaWN0aW9uYXJ5IGRv
ZXMgbm90IGNvbnRhaW4gYSBTZXNzaW9uSGlzdG9yeURpY3Rpb25hcnkga2V5LCBpdCBpcyBvZiB0
aGUgd3JvbmcgdHlwZSIpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIAorICAgIENGRGlj
dGlvbmFyeVJlZiBzZXNzaW9uSGlzdG9yeURpY3Rpb25hcnkgPSBzdGF0aWNfY2FzdDxDRkRpY3Rp
b25hcnlSZWY+KHNlc3Npb25IaXN0b3J5UmVmKTsKKyAgICBpZiAoIW1fYmFja0ZvcndhcmRMaXN0
LT5yZXN0b3JlRnJvbUNGRGljdGlvbmFyeVJlcHJlc2VudGF0aW9uKHNlc3Npb25IaXN0b3J5RGlj
dGlvbmFyeSkpIHsKKyAgICAgICAgTE9HKFNlc3Npb25TdGF0ZSwgIkZhaWxlZCB0byByZXN0b3Jl
IGJhY2svZm9yd2FyZCBsaXN0IGZyb20gU2Vzc2lvbkhpc3RvcnlEaWN0aW9uYXJ5Iik7CisgICAg
ICAgIHJldHVybjsKKyAgICB9CisKKyAgICAvLyBGSVhNRTogV2hlbiB3ZSBoYXZlIGEgc29sdXRp
b24gZm9yIHJlc3RvcmluZyB0aGUgZnVsbCBiYWNrL2ZvcndhcmQgbGlzdCB0aGVuIGNhdXNpbmcg
YSBsb2FkIG9mIHRoZSBjdXJyZW50IGl0ZW0sCisgICAgLy8gd2Ugd2lsbCB0cmlnZ2VyIHRoYXQg
bG9hZCBoZXJlLiAgVW50aWwgdGhlbiwgd2UgdXNlIHRoZSAicmVzdG9yZWQgY3VycmVudCBVUkwi
IHdoaWNoIGNhbiBsYXRlciBiZSByZW1vdmVkLgorICAgIGxvYWRVUkwobV9iYWNrRm9yd2FyZExp
c3QtPnJlc3RvcmVkQ3VycmVudFVSTCgpKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0Cklu
ZGV4OiBXZWJLaXQyL1dlYktpdDIueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvago9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBXZWJLaXQyL1dlYktpdDIueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkocmV2aXNpb24g
Njk1MjEpCisrKyBXZWJLaXQyL1dlYktpdDIueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkod29y
a2luZyBjb3B5KQpAQCAtMTQzLDYgKzE0Myw4IEBACiAJCTUxNkE0QTVEMTIwQTJDQ0QwMEMwNUI3
RiAvKiBXZWJFcnJvci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gNTE2QTRBNUIxMjBBMkNDRDAwQzA1QjdGIC8qIFdlYkVycm9yLmggKi87IH07CiAJCTUx
QTdGMkYzMTI1QkY4MjAwMDhBRUIxRCAvKiBMb2dnaW5nLmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MUE3RjJGMjEyNUJGODIwMDA4QUVCMUQgLyogTG9n
Z2luZy5oICovOyB9OwogCQk1MUE3RjJGNTEyNUJGOEQ0MDA4QUVCMUQgLyogTG9nZ2luZy5jcHAg
aW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MUE3RjJGNDEy
NUJGOEQ0MDA4QUVCMUQgLyogTG9nZ2luZy5jcHAgKi87IH07CisJCTUxQjMwMDUwMTI1MjlEMEUw
MDBCNUNBMCAvKiBXZWJCYWNrRm9yd2FyZExpc3RDRi5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MUIzMDA0RTEyNTI5RDBFMDAwQjVDQTAgLyogV2Vi
QmFja0ZvcndhcmRMaXN0Q0YuY3BwICovOyB9OworCQk1MUIzMDA1MTEyNTI5RDBFMDAwQjVDQTAg
LyogV2ViUGFnZVByb3h5Q0YuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gNTFCMzAwNEYxMjUyOUQwRTAwMEI1Q0EwIC8qIFdlYlBhZ2VQcm94eUNGLmNw
cCAqLzsgfTsKIAkJNkQ4QTkxQTYxMUYwRUZEMTAwREQwMUZFIC8qIGNvbS5hcHBsZS5XZWJQcm9j
ZXNzLnNiIGluIFJlc291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA2
RDhBOTFBNTExRjBFRkQxMDBERDAxRkUgLyogY29tLmFwcGxlLldlYlByb2Nlc3Muc2IgKi87IH07
CiAJCTc2MkI3NDhEMTIwQkM3NUMwMDgxOTMzOSAvKiBXS1ByZWZlcmVuY2VzUHJpdmF0ZS5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNzYyQjc0ODQxMjBC
QkEyRDAwODE5MzM5IC8qIFdLUHJlZmVyZW5jZXNQcml2YXRlLmggKi87IHNldHRpbmdzID0ge0FU
VFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJNzYyQjc0QUYxMjBCQzk0RjAwODE5MzM5
IC8qIFdLUHJlZmVyZW5jZXNQcml2YXRlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDc2MkI3NDlEMTIwQkM4RUEwMDgxOTMzOSAvKiBXS1ByZWZlcmVu
Y2VzUHJpdmF0ZS5jcHAgKi87IH07CkBAIC01OTksNiArNjAxLDggQEAKIAkJNTE2QTRBNUIxMjBB
MkNDRDAwQzA1QjdGIC8qIFdlYkVycm9yLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0
aCA9IFdlYkVycm9yLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTUxQTdGMkYyMTI1
QkY4MjAwMDhBRUIxRCAvKiBMb2dnaW5nLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0
aCA9IExvZ2dpbmcuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTFBN0YyRjQxMjVC
RjhENDAwOEFFQjFEIC8qIExvZ2dpbmcuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3Bw
OyBwYXRoID0gTG9nZ2luZy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTUxQjMw
MDRFMTI1MjlEMEUwMDBCNUNBMCAvKiBXZWJCYWNrRm9yd2FyZExpc3RDRi5jcHAgKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBXZWJCYWNrRm9yd2FyZExpc3RDRi5jcHA7IHBh
dGggPSBjZi9XZWJCYWNrRm9yd2FyZExpc3RDRi5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CisJCTUxQjMwMDRGMTI1MjlEMEUwMDBCNUNBMCAvKiBXZWJQYWdlUHJveHlDRi5jcHAgKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBXZWJQYWdlUHJveHlDRi5jcHA7IHBh
dGggPSBjZi9XZWJQYWdlUHJveHlDRi5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CTVEQUQ3Mjk0MTE2RkY3MEIwMEVFNTM5NiAvKiBXZWJQcm9jZXNzLnhjY29uZmlnICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gdGV4dC54Y2NvbmZpZzsgcGF0aCA9IFdlYlByb2Nlc3MueGNjb25maWc7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCTVEQUQ3M0YxMTE2RkY5MEMwMEVFNTM5NiAvKiBCYXNlVGFyZ2V0
LnhjY29uZmlnICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dC54Y2NvbmZpZzsgcGF0aCA9IEJhc2VUYXJnZXQueGNj
b25maWc7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTZEOEE5MUE1MTFGMEVGRDEwMERE
MDFGRSAvKiBjb20uYXBwbGUuV2ViUHJvY2Vzcy5zYiAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQ7IG5hbWUgPSBj
b20uYXBwbGUuV2ViUHJvY2Vzcy5zYjsgcGF0aCA9IFdlYlByb2Nlc3MvY29tLmFwcGxlLldlYlBy
b2Nlc3Muc2I7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC02NDYsNyArNjUwLDcgQEAK
IAkJQkMxMTFBRTMxMTJGNUMyNjAwMzM3QkFCIC8qIFdlYlByb2Nlc3MuY3BwICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gV2ViUHJvY2Vzcy5jcHA7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCUJDMTExQjA4MTEyRjVFM0MwMDMzN0JBQiAvKiBSZXNwb25zaXZlbmVz
c1RpbWVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFJlc3BvbnNp
dmVuZXNzVGltZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlCQzExMUIwQTEx
MkY1RTRGMDAzMzdCQUIgLyogV2ViRnJhbWVQcm94eS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmNwcC5jcHA7IHBhdGggPSBXZWJGcmFtZVByb3h5LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKLQkJQkMxMTFCMEIxMTJGNUU0RjAwMzM3QkFCIC8qIFdlYlBhZ2VQcm94eS5jcHAgKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBXZWJQYWdlUHJveHkuY3BwOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OworCQlCQzExMUIwQjExMkY1RTRGMDAzMzdCQUIgLyogV2Vi
UGFnZVByb3h5LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBleHBsaWNpdEZpbGVU
eXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBmaWxlRW5jb2RpbmcgPSA0OyBwYXRoID0gV2ViUGFn
ZVByb3h5LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQkMxMTFCMEMxMTJGNUU0
RjAwMzM3QkFCIC8qIFdlYlByb2Nlc3NNYW5hZ2VyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Y3BwLmNwcDsgcGF0aCA9IFdlYlByb2Nlc3NNYW5hZ2VyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJQkMxMTFCMEQxMTJGNUU0RjAwMzM3QkFCIC8qIFdlYlByb2Nlc3NQcm94eS5j
cHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBXZWJQcm9jZXNzUHJveHku
Y3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlCQzExMUIxQjExMkY1RkU2MDAzMzdC
QUIgLyogUHJvY2Vzc0xhdW5jaGVyTWFjLm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2Jq
Y3BwOyBwYXRoID0gUHJvY2Vzc0xhdW5jaGVyTWFjLm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwpAQCAtMTIyOSw2ICsxMjMzLDE1IEBACiAJCQluYW1lID0gIk90aGVyIFNvdXJjZXMiOwog
CQkJc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsKIAkJfTsKKwkJNTFCMzAwNEQxMjUyOUNGNTAwMEI1
Q0EwIC8qIGNmICovID0geworCQkJaXNhID0gUEJYR3JvdXA7CisJCQljaGlsZHJlbiA9ICgKKwkJ
CQk1MUIzMDA0RTEyNTI5RDBFMDAwQjVDQTAgLyogV2ViQmFja0ZvcndhcmRMaXN0Q0YuY3BwICov
LAorCQkJCTUxQjMwMDRGMTI1MjlEMEUwMDBCNUNBMCAvKiBXZWJQYWdlUHJveHlDRi5jcHAgKi8s
CisJCQkpOworCQkJbmFtZSA9IGNmOworCQkJc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsKKwkJfTsK
IAkJQkMwMzJENUMxMEY0MzZENTAwNThDMTVBIC8qIFdlYlByb2Nlc3MgKi8gPSB7CiAJCQlpc2Eg
PSBQQlhHcm91cDsKIAkJCWNoaWxkcmVuID0gKApAQCAtMTMwMiw2ICsxMzE1LDcgQEAKIAkJCWlz
YSA9IFBCWEdyb3VwOwogCQkJY2hpbGRyZW4gPSAoCiAJCQkJQkMwMzJEQzQxMEY0Mzg3QzAwNThD
MTVBIC8qIEFQSSAqLywKKwkJCQk1MUIzMDA0RDEyNTI5Q0Y1MDAwQjVDQTAgLyogY2YgKi8sCiAJ
CQkJQkMxMTFCMTgxMTJGNUZCNDAwMzM3QkFCIC8qIExhdW5jaGVyICovLAogCQkJCUJDQ0YwODVD
MTEzRjNCNzUwMEM2NTBDNSAvKiBtYWMgKi8sCiAJCQkJMUFFRkNDMDUxMUQwMUYzNDAwODIxOUQz
IC8qIFBsdWdpbnMgKi8sCkBAIC0yMjYwLDYgKzIyNzQsOCBAQAogCQkJCTFBMDQzRjY5MTI1MTRE
OEIwMEZGQkZCNSAvKiBXZWJQcm9jZXNzQ29ubmVjdGlvbk1lc3NhZ2VSZWNlaXZlci5jcHAgaW4g
U291cmNlcyAqLywKIAkJCQkxQThFRjRDQzEyNTI0MDM3MDBGNzA2N0YgLyogUGx1Z2luQ29udHJv
bGxlclByb3h5LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUMwMkJGRjFFMTI1MTUwMkUwMDlDQ0JF
QSAvKiBOYXRpdmVXZWJLZXlib2FyZEV2ZW50TWFjLm1tIGluIFNvdXJjZXMgKi8sCisJCQkJNTFC
MzAwNTAxMjUyOUQwRTAwMEI1Q0EwIC8qIFdlYkJhY2tGb3J3YXJkTGlzdENGLmNwcCBpbiBTb3Vy
Y2VzICovLAorCQkJCTUxQjMwMDUxMTI1MjlEMEUwMDBCNUNBMCAvKiBXZWJQYWdlUHJveHlDRi5j
cHAgaW4gU291cmNlcyAqLywKIAkJCQkxQThFRjk2RTEyNTJBRjZCMDBGNzA2N0YgLyogUGx1Z2lu
Q29udHJvbGxlclByb3h5TWVzc2FnZVJlY2VpdmVyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTFB
OEVGQTcwMTI1MkI4NDEwMEY3MDY3RiAvKiBQbHVnaW5Qcm94eU1lc3NhZ2VSZWNlaXZlci5jcHAg
aW4gU291cmNlcyAqLywKIAkJCQkxQThFRkRGRTEyNTNDQjZFMDBGNzA2N0YgLyogRGF0YVJlZmVy
ZW5jZS5jcHAgaW4gU291cmNlcyAqLywKSW5kZXg6IFdlYktpdDIvd2luL1dlYktpdDIudmNwcm9q
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFdlYktpdDIvd2luL1dlYktpdDIudmNwcm9qCShyZXZpc2lvbiA2OTUy
MSkKKysrIFdlYktpdDIvd2luL1dlYktpdDIudmNwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC0xNzI5
LDYgKzE3MjksMTggQEAKIAkJCQk8L0ZpbHRlcj4NCiAJCQk8L0ZpbHRlcj4NCiAJCQk8RmlsdGVy
DQorCQkJCU5hbWU9ImNmIg0KKwkJCQk+DQorCQkJCTxGaWxlDQorCQkJCQlSZWxhdGl2ZVBhdGg9
Ii4uXFVJUHJvY2Vzc1xjZlxXZWJCYWNrRm9yd2FyZExpc3RDRi5jcHAiDQorCQkJCQk+DQorCQkJ
CTwvRmlsZT4NCisJCQkJPEZpbGUNCisJCQkJCVJlbGF0aXZlUGF0aD0iLi5cVUlQcm9jZXNzXGNm
XFdlYlBhZ2VQcm94eUNGLmNwcCINCisJCQkJCT4NCisJCQkJPC9GaWxlPg0KKwkJCTwvRmlsdGVy
Pg0KKwkJCTxGaWx0ZXINCiAJCQkJTmFtZT0iTGF1bmNoZXIiDQogCQkJCT4NCiAJCQkJPEZpbGUN
Cg==
</data>
<flag name="review"
          id="60331"
          type_id="1"
          status="-"
          setter="beidson"
    />
    <flag name="commit-queue"
          id="60332"
          type_id="3"
          status="-"
          setter="beidson"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>70478</attachid>
            <date>2010-10-11 15:24:46 -0700</date>
            <delta_ts>2010-10-11 17:00:25 -0700</delta_ts>
            <desc>Patch v6 - The same, with debugging info, etc removed</desc>
            <filename>patch.txt</filename>
            <type>text/plain</type>
            <size>26687</size>
            <attacher name="Brady Eidson">beidson</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYktpdDIvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdDIvQ2hhbmdlTG9n
CShyZXZpc2lvbiA2OTUyNykKKysrIFdlYktpdDIvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsNDEgQEAKKzIwMTAtMTAtMTEgIEJyYWR5IEVpZHNvbiAgPGJlaWRzb25AYXBwbGUu
Y29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IERhcmluIEFkbGVyIGFuZCAuLi4KKworICAgICAg
ICA8cmRhcjovL3Byb2JsZW0vODI2MjIwMj4gYW5kIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD00NzM1NAorICAgICAgICBOZWVkIFdLUGFnZSBBUEkgZm9yIHNlcmlhbGl6
aW5nIGFuZCByZXN0b3JpbmcgYSBwYWdlJ3Mgc3RhdGUKKworICAgICAgICAqIFdlYktpdDIueGNv
ZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgKiB3aW4vV2ViS2l0Mi52Y3Byb2o6CisK
KyAgICAgICAgKiBXZWJLaXQyUHJlZml4Lmg6IEFkZCBERUZJTkVfU1RBVElDX0dFVFRFUiBjb252
ZW5pZW5jZS4KKworICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvQy9XS1BhZ2UuY3BwOgorICAgICAg
ICAoV0tQYWdlR2V0U2Vzc2lvbkhpc3RvcnlVUkxWYWx1ZVR5cGUpOgorICAgICAgICAoV0tQYWdl
Q29weVNlc3Npb25TdGF0ZSk6IENoYW5nZSB0byB1c2UgYSBmaWx0ZXIgZnVuY3Rpb24gdG8gYWxs
b3cgdGhlIEFQSSBjbGllbnQgdG8gZGVjaWRlIHdoYXQKKyAgICAgICAgICB0eXBlcyBvZiB0aGlu
Z3MgZ2V0IHNlcmlhbGl6ZWQgYXMgc2Vzc2lvbiBzdGF0ZS4gIEZvciBub3cgaXQgb25seSBmaWx0
ZXJzIGJhc2VkIG9uIFVSTCBpbgorICAgICAgICAgIHNlc3Npb24gaGlzdG9yeSBlbnRyaWVzLgor
ICAgICAgICAoV0tQYWdlUmVzdG9yZUZyb21TZXNzaW9uU3RhdGUpOgorICAgICAgICAqIFVJUHJv
Y2Vzcy9BUEkvQy9XS1BhZ2UuaDoKKworICAgICAgICAqIFVJUHJvY2Vzcy9XZWJCYWNrRm9yd2Fy
ZExpc3QuaDoKKyAgICAgICAgKFdlYktpdDo6V2ViQmFja0ZvcndhcmRMaXN0OjpyZXN0b3JlZEN1
cnJlbnRVUkwpOgorCisgICAgICAgICogVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5jcHA6CisgICAg
ICAgIChXZWJLaXQ6OldlYlBhZ2VQcm94eTo6c2Vzc2lvblN0YXRlRGF0YSk6IExlYXZlIHN0dWJz
IGZvciBub24tQ0YgcGxhdGZvcm0gYnVpbGRzLgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlUHJv
eHk6OnJlc3RvcmVGcm9tU2Vzc2lvblN0YXRlRGF0YSk6IERpdHRvLgorICAgICAgICAqIFVJUHJv
Y2Vzcy9XZWJQYWdlUHJveHkuaDoKKworICAgICAgICAqIFVJUHJvY2Vzcy9jZjogQWRkZWQuCisg
ICAgICAgICogVUlQcm9jZXNzL2NmL1dlYkJhY2tGb3J3YXJkTGlzdENGLmNwcDogQWRkZWQuCisg
ICAgICAgIChXZWJLaXQ6OldlYkJhY2tGb3J3YXJkTGlzdDo6Y3JlYXRlQ0ZEaWN0aW9uYXJ5UmVw
cmVzZW50YXRpb24pOiBTdG9yZSBiYWNrL2ZvcndhcmQgbGlzdCBpbmZvIENGIHByb3BlcnR5IGxp
c3Qgc3R5bGUuCisgICAgICAgIChXZWJLaXQ6OldlYkJhY2tGb3J3YXJkTGlzdDo6cmVzdG9yZUZy
b21DRkRpY3Rpb25hcnlSZXByZXNlbnRhdGlvbik6IFJlc3RvcmUgZnJvbSB0aGF0IGRhdGEgLSBi
dXQgZm9yIG5vdyB3ZSBkb24ndCAKKyAgICAgICAgICBhY3R1YWxseSBwdXQgdGhlIGJhY2svZm9y
d2FyZCBsaXN0IGJhY2sgaW50byBwbGFjZSBhbmQgaW5zdGVhZCBvbmx5IHJlbWVtYmVyIHRoZSBj
dXJyZW50IFVSTC4KKworICAgICAgICAqIFVJUHJvY2Vzcy9jZi9XZWJQYWdlUHJveHlDRi5jcHA6
IEFkZGVkLgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlUHJveHk6OnNlc3Npb25TdGF0ZURhdGEp
OiBDcmVhdGUgdGhlIHNlc3Npb25zIHN0YXRlIGRhdGUgQ0YgcHJvcGVydHkgbGlzdCBzdHlsZSwg
cGx1cyBhIHZlcnNpb24gaGVhZGVyLgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlUHJveHk6OnJl
c3RvcmVGcm9tU2Vzc2lvblN0YXRlRGF0YSk6IFJlc3RvcmUgZnJvbSB0aGF0IHByb3BlcnR5IGxp
c3Qgc3R5bGUgc2Vzc2lvbiBzdGF0ZSBkYXRhLgorCiAyMDEwLTEwLTExICBKZXNzaWUgQmVybGlu
ICA8amJlcmxpbkBhcHBsZS5jb20+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgRGFyaW4gQWRsZXIu
CkluZGV4OiBXZWJLaXQyL1dlYktpdDJQcmVmaXguaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQyL1dl
YktpdDJQcmVmaXguaAkocmV2aXNpb24gNjk1MjEpCisrKyBXZWJLaXQyL1dlYktpdDJQcmVmaXgu
aAkod29ya2luZyBjb3B5KQpAQCAtMzcsNiArMzcsMTQgQEAKICNkZWZpbmUgRVhURVJOX0NfRU5E
CiAjZW5kaWYKIAorLy8gRm9yIGRlZmluaW5nIGdldHRlcnMgdG8gYSBzdGF0aWMgdmFsdWUsIHdo
ZXJlIHRoZSBnZXR0ZXJzIGhhdmUgaW50ZXJuYWwgbGlua2FnZQorI2RlZmluZSBERUZJTkVfU1RB
VElDX0dFVFRFUih0eXBlLCBuYW1lLCBhcmd1bWVudHMpIFwKK3N0YXRpYyBjb25zdCB0eXBlJiBu
YW1lKCkgXAoreyBcCisgICAgREVGSU5FX1NUQVRJQ19MT0NBTCh0eXBlLCBuYW1lIyNWYWx1ZSwg
YXJndW1lbnRzKTsgXAorICAgIHJldHVybiBuYW1lIyNWYWx1ZTsgXAorfQorCiAjaWYgZGVmaW5l
ZChCVUlMRElOR19RVF9fKQogCiAjZGVmaW5lIFdURl9VU0VfSlNDIDEKSW5kZXg6IFdlYktpdDIv
VUlQcm9jZXNzL1dlYkJhY2tGb3J3YXJkTGlzdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdDIvVUlQ
cm9jZXNzL1dlYkJhY2tGb3J3YXJkTGlzdC5oCShyZXZpc2lvbiA2OTUyMSkKKysrIFdlYktpdDIv
VUlQcm9jZXNzL1dlYkJhY2tGb3J3YXJkTGlzdC5oCSh3b3JraW5nIGNvcHkpCkBAIC0yOSwxNCAr
MjksMTMgQEAKICNpbmNsdWRlICJBUElPYmplY3QuaCIKICNpbmNsdWRlICJJbW11dGFibGVBcnJh
eS5oIgogI2luY2x1ZGUgIldlYkJhY2tGb3J3YXJkTGlzdEl0ZW0uaCIKKyNpbmNsdWRlICJXZWJQ
YWdlUHJveHkuaCIKICNpbmNsdWRlIDx3dGYvUGFzc1JlZlB0ci5oPgogI2luY2x1ZGUgPHd0Zi9S
ZWZQdHIuaD4KICNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CiAKIG5hbWVzcGFjZSBXZWJLaXQgewog
Ci1jbGFzcyBXZWJQYWdlUHJveHk7Ci0KIHR5cGVkZWYgVmVjdG9yPFJlZlB0cjxXZWJCYWNrRm9y
d2FyZExpc3RJdGVtPiA+IEJhY2tGb3J3YXJkTGlzdEl0ZW1WZWN0b3I7CiAKIC8qCkBAIC03Miw2
ICs3MSwxMSBAQCBwdWJsaWM6CiAgICAgUGFzc1JlZlB0cjxJbW11dGFibGVBcnJheT4gYmFja0xp
c3RBc0ltbXV0YWJsZUFycmF5V2l0aExpbWl0KHVuc2lnbmVkIGxpbWl0KTsKICAgICBQYXNzUmVm
UHRyPEltbXV0YWJsZUFycmF5PiBmb3J3YXJkTGlzdEFzSW1tdXRhYmxlQXJyYXlXaXRoTGltaXQo
dW5zaWduZWQgbGltaXQpOwogCisjaWYgUExBVEZPUk0oQ0YpCisgICAgQ0ZEaWN0aW9uYXJ5UmVm
IGNyZWF0ZUNGRGljdGlvbmFyeVJlcHJlc2VudGF0aW9uKFdlYlBhZ2VQcm94eTo6V2ViUGFnZVBy
b3h5U2Vzc2lvblN0YXRlRmlsdGVyQ2FsbGJhY2ssIHZvaWQqIGNvbnRleHQpIGNvbnN0OworICAg
IGJvb2wgcmVzdG9yZUZyb21DRkRpY3Rpb25hcnlSZXByZXNlbnRhdGlvbihDRkRpY3Rpb25hcnlS
ZWYpOworI2VuZGlmCisKIHByaXZhdGU6CiAgICAgV2ViQmFja0ZvcndhcmRMaXN0KFdlYlBhZ2VQ
cm94eSopOwogCkBAIC04Myw2ICs4NywxNCBAQCBwcml2YXRlOgogICAgIHVuc2lnbmVkIG1fY2Fw
YWNpdHk7CiAgICAgYm9vbCBtX2Nsb3NlZDsKICAgICBib29sIG1fZW5hYmxlZDsKKyAgICAKKy8v
IEZJWE1FIC0gPHJkYXI6Ly9wcm9ibGVtLzgyNjE2MjQ+IGFuZCBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NDczNTUgLSAKKy8vIFdoZW4gd2UgaGF2ZSBhIHNvbHV0aW9u
IGZvciByZXN0b3JpbmcgdGhlIGZ1bGwgYmFjay9mb3J3YXJkIGxpc3QgCisvLyB0aGVuIGNhdXNp
bmcgYSBsb2FkIG9mIHRoZSBjdXJyZW50IGl0ZW0sIHdlIHdpbGwgbm8gbG9uZ2VyIG5lZWQgdGhp
cy4KK3B1YmxpYzoKKyAgICBjb25zdCBXVEY6OlN0cmluZyYgcmVzdG9yZWRDdXJyZW50VVJMKCkg
Y29uc3QgeyByZXR1cm4gbV9yZXN0b3JlZEN1cnJlbnRVUkw7IH0KK3ByaXZhdGU6CisgICAgV1RG
OjpTdHJpbmcgbV9yZXN0b3JlZEN1cnJlbnRVUkw7CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJL
aXQKSW5kZXg6IFdlYktpdDIvVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gV2ViS2l0Mi9VSVByb2Nlc3MvV2ViUGFnZVByb3h5LmNwcAkocmV2aXNpb24gNjk1MjEpCisr
KyBXZWJLaXQyL1VJUHJvY2Vzcy9XZWJQYWdlUHJveHkuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00
NTAsMTYgKzQ1MCwxOCBAQCB2b2lkIFdlYlBhZ2VQcm94eTo6dGVybWluYXRlUHJvY2VzcygpCiAg
ICAgcHJvY2VzcygpLT50ZXJtaW5hdGUoKTsKIH0KIAotUGFzc1JlZlB0cjxXZWJEYXRhPiBXZWJQ
YWdlUHJveHk6OnNlc3Npb25TdGF0ZSgpIGNvbnN0CisjaWYgIVBMQVRGT1JNKENGKQorUGFzc1Jl
ZlB0cjxXZWJEYXRhPiBXZWJQYWdlUHJveHk6OnNlc3Npb25TdGF0ZURhdGEoV2ViUGFnZVByb3h5
U2Vzc2lvblN0YXRlRmlsdGVyQ2FsbGJhY2ssIHZvaWQqIGNvbnRleHQpIGNvbnN0CiB7CiAgICAg
Ly8gRklYTUU6IFJldHVybiBzZXNzaW9uIHN0YXRlIGRhdGEgZm9yIHNhdmluZyBQYWdlIHN0YXRl
LgogICAgIHJldHVybiAwOwogfQogCi12b2lkIFdlYlBhZ2VQcm94eTo6cmVzdG9yZUZyb21TZXNz
aW9uU3RhdGUoV2ViRGF0YSopCit2b2lkIFdlYlBhZ2VQcm94eTo6cmVzdG9yZUZyb21TZXNzaW9u
U3RhdGVEYXRhKFdlYkRhdGEqKQogewogICAgIC8vIEZJWE1FOiBSZXN0b3JlIHRoZSBQYWdlIGZy
b20gdGhlIHBhc3NlZCBpbiBzZXNzaW9uIHN0YXRlIGRhdGEuCiB9CisjZW5kaWYKIAogdm9pZCBX
ZWJQYWdlUHJveHk6OnNldFRleHRab29tRmFjdG9yKGRvdWJsZSB6b29tRmFjdG9yKQogewpJbmRl
eDogV2ViS2l0Mi9VSVByb2Nlc3MvV2ViUGFnZVByb3h5LmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0
Mi9VSVByb2Nlc3MvV2ViUGFnZVByb3h5LmgJKHJldmlzaW9uIDY5NTIxKQorKysgV2ViS2l0Mi9V
SVByb2Nlc3MvV2ViUGFnZVByb3h5LmgJKHdvcmtpbmcgY29weSkKQEAgLTE2NCw5ICsxNjQsMTAg
QEAgcHVibGljOgogICAgIHZvaWQgc2V0Q3VzdG9tVXNlckFnZW50KGNvbnN0IFN0cmluZyYpOwog
CiAgICAgdm9pZCB0ZXJtaW5hdGVQcm9jZXNzKCk7Ci0gICAgCi0gICAgUGFzc1JlZlB0cjxXZWJE
YXRhPiBzZXNzaW9uU3RhdGUoKSBjb25zdDsKLSAgICB2b2lkIHJlc3RvcmVGcm9tU2Vzc2lvblN0
YXRlKFdlYkRhdGEqKTsKKworICAgIHR5cGVkZWYgYm9vbCAoKldlYlBhZ2VQcm94eVNlc3Npb25T
dGF0ZUZpbHRlckNhbGxiYWNrKShXS1BhZ2VSZWYsIFdLU3RyaW5nUmVmIHR5cGUsIFdLVHlwZVJl
ZiBvYmplY3QsIHZvaWQqKTsKKyAgICBQYXNzUmVmUHRyPFdlYkRhdGE+IHNlc3Npb25TdGF0ZURh
dGEoV2ViUGFnZVByb3h5U2Vzc2lvblN0YXRlRmlsdGVyQ2FsbGJhY2ssIHZvaWQqIGNvbnRleHQp
IGNvbnN0OworICAgIHZvaWQgcmVzdG9yZUZyb21TZXNzaW9uU3RhdGVEYXRhKFdlYkRhdGEqKTsK
IAogICAgIGRvdWJsZSB0ZXh0Wm9vbUZhY3RvcigpIGNvbnN0IHsgcmV0dXJuIG1fdGV4dFpvb21G
YWN0b3I7IH0KICAgICB2b2lkIHNldFRleHRab29tRmFjdG9yKGRvdWJsZSk7CkluZGV4OiBXZWJL
aXQyL1VJUHJvY2Vzcy9BUEkvQy9XS1BhZ2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdDIvVUlQ
cm9jZXNzL0FQSS9DL1dLUGFnZS5jcHAJKHJldmlzaW9uIDY5NTIxKQorKysgV2ViS2l0Mi9VSVBy
b2Nlc3MvQVBJL0MvV0tQYWdlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTUyLDE1ICsxNTIsMjEg
QEAgdm9pZCBXS1BhZ2VUZXJtaW5hdGUoV0tQYWdlUmVmIHBhZ2VSZWYpCiAgICAgdG9JbXBsKHBh
Z2VSZWYpLT50ZXJtaW5hdGVQcm9jZXNzKCk7CiB9CiAKLVdLRGF0YVJlZiBXS1BhZ2VDb3B5U2Vz
c2lvblN0YXRlKFdLUGFnZVJlZiBwYWdlUmVmKQorV0tTdHJpbmdSZWYgV0tQYWdlR2V0U2Vzc2lv
bkhpc3RvcnlVUkxWYWx1ZVR5cGUoKQogewotICAgIFJlZlB0cjxXZWJEYXRhPiBzdGF0ZSA9IHRv
SW1wbChwYWdlUmVmKS0+c2Vzc2lvblN0YXRlKCk7CisgICAgc3RhdGljIFdlYlN0cmluZyogc2Vz
c2lvbkhpc3RvcnlVUkxWYWx1ZVR5cGUgPSBXZWJTdHJpbmc6OmNyZWF0ZSgiU2Vzc2lvbkhpc3Rv
cnlVUkwiKS5yZWxlYXNlUmVmKCk7CisgICAgcmV0dXJuIHRvQVBJKHNlc3Npb25IaXN0b3J5VVJM
VmFsdWVUeXBlKTsKK30KKworV0tEYXRhUmVmIFdLUGFnZUNvcHlTZXNzaW9uU3RhdGUoV0tQYWdl
UmVmIHBhZ2VSZWYsIHZvaWQgKmNvbnRleHQsIFdLUGFnZVNlc3Npb25TdGF0ZUZpbHRlckNhbGxi
YWNrIGZpbHRlcikKK3sKKyAgICBSZWZQdHI8V2ViRGF0YT4gc3RhdGUgPSB0b0ltcGwocGFnZVJl
ZiktPnNlc3Npb25TdGF0ZURhdGEoZmlsdGVyLCBjb250ZXh0KTsKICAgICByZXR1cm4gdG9BUEko
c3RhdGUucmVsZWFzZSgpLnJlbGVhc2VSZWYoKSk7CiB9CiAKIHZvaWQgV0tQYWdlUmVzdG9yZUZy
b21TZXNzaW9uU3RhdGUoV0tQYWdlUmVmIHBhZ2VSZWYsIFdLRGF0YVJlZiBzZXNzaW9uU3RhdGVE
YXRhKQogewotICAgIHRvSW1wbChwYWdlUmVmKS0+cmVzdG9yZUZyb21TZXNzaW9uU3RhdGUodG9J
bXBsKHNlc3Npb25TdGF0ZURhdGEpKTsKKyAgICB0b0ltcGwocGFnZVJlZiktPnJlc3RvcmVGcm9t
U2Vzc2lvblN0YXRlRGF0YSh0b0ltcGwoc2Vzc2lvblN0YXRlRGF0YSkpOwogfQogCiBkb3VibGUg
V0tQYWdlR2V0VGV4dFpvb21GYWN0b3IoV0tQYWdlUmVmIHBhZ2VSZWYpCkluZGV4OiBXZWJLaXQy
L1VJUHJvY2Vzcy9BUEkvQy9XS1BhZ2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQyL1VJUHJvY2Vz
cy9BUEkvQy9XS1BhZ2UuaAkocmV2aXNpb24gNjk1MjEpCisrKyBXZWJLaXQyL1VJUHJvY2Vzcy9B
UEkvQy9XS1BhZ2UuaAkod29ya2luZyBjb3B5KQpAQCAtMjA1LDcgKzIwNSwxMCBAQCBXS19FWFBP
UlQgdm9pZCBXS1BhZ2VTZXRDdXN0b21Vc2VyQWdlbnQoCiAKIFdLX0VYUE9SVCB2b2lkIFdLUGFn
ZVRlcm1pbmF0ZShXS1BhZ2VSZWYgcGFnZSk7CiAKLVdLX0VYUE9SVCBXS0RhdGFSZWYgV0tQYWdl
Q29weVNlc3Npb25TdGF0ZShXS1BhZ2VSZWYgcGFnZSk7CitXS19FWFBPUlQgV0tTdHJpbmdSZWYg
V0tQYWdlR2V0U2Vzc2lvbkhpc3RvcnlVUkxWYWx1ZVR5cGUodm9pZCk7CisKK3R5cGVkZWYgYm9v
bCAoKldLUGFnZVNlc3Npb25TdGF0ZUZpbHRlckNhbGxiYWNrKShXS1BhZ2VSZWYgcGFnZSwgV0tT
dHJpbmdSZWYgdmFsdWVUeXBlLCBXS1R5cGVSZWYgdmFsdWUsIHZvaWQqIGNvbnRleHQpOworV0tf
RVhQT1JUIFdLRGF0YVJlZiBXS1BhZ2VDb3B5U2Vzc2lvblN0YXRlKFdLUGFnZVJlZiBwYWdlLCB2
b2lkICpjb250ZXh0LCBXS1BhZ2VTZXNzaW9uU3RhdGVGaWx0ZXJDYWxsYmFjayB1cmxBbGxvd2Vk
Q2FsbGJhY2spOwogV0tfRVhQT1JUIHZvaWQgV0tQYWdlUmVzdG9yZUZyb21TZXNzaW9uU3RhdGUo
V0tQYWdlUmVmIHBhZ2UsIFdLRGF0YVJlZiBzZXNzaW9uU3RhdGVEYXRhKTsKIAogV0tfRVhQT1JU
IGRvdWJsZSBXS1BhZ2VHZXRUZXh0Wm9vbUZhY3RvcihXS1BhZ2VSZWYgcGFnZSk7CkluZGV4OiBX
ZWJLaXQyL1VJUHJvY2Vzcy9jZi9XZWJCYWNrRm9yd2FyZExpc3RDRi5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gV2ViS2l0Mi9VSVByb2Nlc3MvY2YvV2ViQmFja0ZvcndhcmRMaXN0Q0YuY3BwCShyZXZpc2lv
biAwKQorKysgV2ViS2l0Mi9VSVByb2Nlc3MvY2YvV2ViQmFja0ZvcndhcmRMaXN0Q0YuY3BwCShy
ZXZpc2lvbiAwKQpAQCAtMCwwICsxLDExOCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMCBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMg
SVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRP
UlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MK
KyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgor
ICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJXZWJC
YWNrRm9yd2FyZExpc3QuaCIKKyNpbmNsdWRlICJMb2dnaW5nLmgiCisKK3VzaW5nIG5hbWVzcGFj
ZSBXZWJDb3JlOworCituYW1lc3BhY2UgV2ViS2l0IHsKKworREVGSU5FX1NUQVRJQ19HRVRURVIo
Q0ZTdHJpbmdSZWYsIFNlc3Npb25IaXN0b3J5Q3VycmVudEluZGV4S2V5LCBDRlNUUigiU2Vzc2lv
bkhpc3RvcnlDdXJyZW50SW5kZXgiKSk7CitERUZJTkVfU1RBVElDX0dFVFRFUihDRlN0cmluZ1Jl
ZiwgU2Vzc2lvbkhpc3RvcnlFbnRyaWVzS2V5LCBDRlNUUigiU2Vzc2lvbkhpc3RvcnlFbnRyaWVz
IikpOworREVGSU5FX1NUQVRJQ19HRVRURVIoQ0ZTdHJpbmdSZWYsIFNlc3Npb25IaXN0b3J5RW50
cnlUaXRsZUtleSwgQ0ZTVFIoIlNlc3Npb25IaXN0b3J5RW50cnlUaXRsZSIpKTsKK0RFRklORV9T
VEFUSUNfR0VUVEVSKENGU3RyaW5nUmVmLCBTZXNzaW9uSGlzdG9yeUVudHJ5VVJMS2V5LCBDRlNU
UigiU2Vzc2lvbkhpc3RvcnlFbnRyeVVSTCIpKTsKKworQ0ZEaWN0aW9uYXJ5UmVmIFdlYkJhY2tG
b3J3YXJkTGlzdDo6Y3JlYXRlQ0ZEaWN0aW9uYXJ5UmVwcmVzZW50YXRpb24oV2ViUGFnZVByb3h5
OjpXZWJQYWdlUHJveHlTZXNzaW9uU3RhdGVGaWx0ZXJDYWxsYmFjayBmaWx0ZXIsIHZvaWQqIGNv
bnRleHQpIGNvbnN0Cit7CisgICAgUmV0YWluUHRyPENGTnVtYmVyUmVmPiBjdXJyZW50SW5kZXgo
QWRvcHRDRiwgQ0ZOdW1iZXJDcmVhdGUoMCwga0NGTnVtYmVySW50VHlwZSwgJm1fY3VycmVudCkp
OyAgICAKKyAgICBSZXRhaW5QdHI8Q0ZNdXRhYmxlQXJyYXlSZWY+IGVudHJpZXMoQWRvcHRDRiwg
Q0ZBcnJheUNyZWF0ZU11dGFibGUoMCwgbV9lbnRyaWVzLnNpemUoKSwgJmtDRlR5cGVBcnJheUNh
bGxCYWNrcykpOworICAgIAorICAgIGNvbnN0IHZvaWQqIGtleXNbMl0gPSB7IFNlc3Npb25IaXN0
b3J5Q3VycmVudEluZGV4S2V5KCksIFNlc3Npb25IaXN0b3J5RW50cmllc0tleSgpIH07CisgICAg
Y29uc3Qgdm9pZCogdmFsdWVzWzJdID0geyBjdXJyZW50SW5kZXguZ2V0KCksIGVudHJpZXMuZ2V0
KCkgfTsKKworICAgIFJldGFpblB0cjxDRkRpY3Rpb25hcnlSZWY+IGRpY3Rpb25hcnkoQWRvcHRD
RiwgQ0ZEaWN0aW9uYXJ5Q3JlYXRlKDAsIGtleXMsIHZhbHVlcywgMiwgJmtDRlR5cGVEaWN0aW9u
YXJ5S2V5Q2FsbEJhY2tzLCAma0NGVHlwZURpY3Rpb25hcnlWYWx1ZUNhbGxCYWNrcykpOworCisg
ICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtX2VudHJpZXMuc2l6ZSgpOyArK2kpIHsKKyAgICAg
ICAgUmVmUHRyPFdlYlVSTD4gd2ViVVJMID0gV2ViVVJMOjpjcmVhdGUobV9lbnRyaWVzW2ldLT51
cmwoKSk7CisgICAgICAgIGlmICghZmlsdGVyKHRvQVBJKG1fcGFnZSksIFdLUGFnZUdldFNlc3Np
b25IaXN0b3J5VVJMVmFsdWVUeXBlKCksIHRvVVJMUmVmKG1fZW50cmllc1tpXS0+b3JpZ2luYWxV
UkwoKS5pbXBsKCkpLCBjb250ZXh0KSkKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAK
KyAgICAgICAgUmV0YWluUHRyPENGU3RyaW5nUmVmPiB1cmwoQWRvcHRDRiwgbV9lbnRyaWVzW2ld
LT51cmwoKS5jcmVhdGVDRlN0cmluZygpKTsKKyAgICAgICAgUmV0YWluUHRyPENGU3RyaW5nUmVm
PiB0aXRsZShBZG9wdENGLCBtX2VudHJpZXNbaV0tPnRpdGxlKCkuY3JlYXRlQ0ZTdHJpbmcoKSk7
CisgICAgICAgIAorICAgICAgICBjb25zdCB2b2lkKiBrZXlzWzJdID0geyBTZXNzaW9uSGlzdG9y
eUVudHJ5VVJMS2V5KCksIFNlc3Npb25IaXN0b3J5RW50cnlUaXRsZUtleSgpIH07CisgICAgICAg
IGNvbnN0IHZvaWQqIHZhbHVlc1syXSA9IHsgdXJsLmdldCgpLCB0aXRsZS5nZXQoKSB9OworCisg
ICAgICAgIFJldGFpblB0cjxDRkRpY3Rpb25hcnlSZWY+IGVudHJ5RGljdGlvbmFyeShBZG9wdENG
LCBDRkRpY3Rpb25hcnlDcmVhdGUoMCwga2V5cywgdmFsdWVzLCAyLCAma0NGVHlwZURpY3Rpb25h
cnlLZXlDYWxsQmFja3MsICZrQ0ZUeXBlRGljdGlvbmFyeVZhbHVlQ2FsbEJhY2tzKSk7CisgICAg
ICAgIENGQXJyYXlBcHBlbmRWYWx1ZShlbnRyaWVzLmdldCgpLCBlbnRyeURpY3Rpb25hcnkuZ2V0
KCkpOworICAgIH0KKyAgICAKKyAgICByZXR1cm4gZGljdGlvbmFyeS5sZWFrUmVmKCk7Cit9CisK
K2Jvb2wgV2ViQmFja0ZvcndhcmRMaXN0OjpyZXN0b3JlRnJvbUNGRGljdGlvbmFyeVJlcHJlc2Vu
dGF0aW9uKENGRGljdGlvbmFyeVJlZiBkaWN0aW9uYXJ5KQoreworICAgIENGTnVtYmVyUmVmIGNm
SW5kZXggPSAoQ0ZOdW1iZXJSZWYpQ0ZEaWN0aW9uYXJ5R2V0VmFsdWUoZGljdGlvbmFyeSwgU2Vz
c2lvbkhpc3RvcnlDdXJyZW50SW5kZXhLZXkoKSk7CisgICAgaWYgKCFjZkluZGV4IHx8IENGR2V0
VHlwZUlEKGNmSW5kZXgpICE9IENGTnVtYmVyR2V0VHlwZUlEKCkpIHsKKyAgICAgICAgTE9HKFNl
c3Npb25TdGF0ZSwgIldlYkJhY2tGb3J3YXJkTGlzdCBkaWN0aW9uYXJ5IHJlcHJlc2VudGF0aW9u
IGRvZXMgbm90IGhhdmUgYSB2YWxpZCBjdXJyZW50IGluZGV4Iik7CisgICAgICAgIHJldHVybiBm
YWxzZTsKKyAgICB9CisgICAgCisgICAgdW5zaWduZWQgY3VycmVudEluZGV4OworICAgIGlmICgh
Q0ZOdW1iZXJHZXRWYWx1ZShjZkluZGV4LCBrQ0ZOdW1iZXJJbnRUeXBlLCAmY3VycmVudEluZGV4
KSkgeworICAgICAgICBMT0coU2Vzc2lvblN0YXRlLCAiV2ViQmFja0ZvcndhcmRMaXN0IGRpY3Rp
b25hcnkgcmVwcmVzZW50YXRpb24gZG9lcyBub3QgaGF2ZSBhIHZhbGlkIGludGVnZXIgY3VycmVu
dCBpbmRleCIpOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorICAgIAorICAgIENGQXJy
YXlSZWYgY2ZFbnRyaWVzID0gKENGQXJyYXlSZWYpQ0ZEaWN0aW9uYXJ5R2V0VmFsdWUoZGljdGlv
bmFyeSwgU2Vzc2lvbkhpc3RvcnlFbnRyaWVzS2V5KCkpOworICAgIGlmICghY2ZFbnRyaWVzIHx8
IENGR2V0VHlwZUlEKGNmRW50cmllcykgIT0gQ0ZBcnJheUdldFR5cGVJRCgpKSB7CisgICAgICAg
IExPRyhTZXNzaW9uU3RhdGUsICJXZWJCYWNrRm9yd2FyZExpc3QgZGljdGlvbmFyeSByZXByZXNl
bnRhdGlvbiBkb2VzIG5vdCBoYXZlIGEgdmFsaWQgbGlzdCBvZiBlbnRyaWVzIik7CisgICAgICAg
IHJldHVybiBmYWxzZTsKKyAgICB9CisgICAgCisgICAgQ0ZJbmRleCBzaXplID0gQ0ZBcnJheUdl
dENvdW50KGNmRW50cmllcyk7CisgICAgZm9yIChDRkluZGV4IGkgPSAwOyBpIDwgc2l6ZTsgKytp
KSB7CisgICAgICAgIENGRGljdGlvbmFyeVJlZiBlbnRyeURpY3Rpb25hcnkgPSAoQ0ZEaWN0aW9u
YXJ5UmVmKUNGQXJyYXlHZXRWYWx1ZUF0SW5kZXgoY2ZFbnRyaWVzLCBpKTsKKyAgICAgICAgaWYg
KCFlbnRyeURpY3Rpb25hcnkgfHwgQ0ZHZXRUeXBlSUQoZW50cnlEaWN0aW9uYXJ5KSAhPSBDRkRp
Y3Rpb25hcnlHZXRUeXBlSUQoKSkgeworICAgICAgICAgICAgTE9HKFNlc3Npb25TdGF0ZSwgIldl
YkJhY2tGb3J3YXJkTGlzdCBlbnRyeSBhcnJheSBkb2VzIG5vdCBoYXZlIGEgdmFsaWQgZW50cnkg
YXQgaW5kZXggJWkiLCAoaW50KWkpOworICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAg
ICB9CisgICAgICAgIAorICAgICAgICBDRlN0cmluZ1JlZiBlbnRyeVVSTCA9IChDRlN0cmluZ1Jl
ZilDRkRpY3Rpb25hcnlHZXRWYWx1ZShlbnRyeURpY3Rpb25hcnksIFNlc3Npb25IaXN0b3J5RW50
cnlVUkxLZXkoKSk7CisgICAgICAgIGlmICghZW50cnlVUkwgfHwgQ0ZHZXRUeXBlSUQoZW50cnlV
UkwpICE9IENGU3RyaW5nR2V0VHlwZUlEKCkpIHsKKyAgICAgICAgICAgIExPRyhTZXNzaW9uU3Rh
dGUsICJXZWJCYWNrRm9yd2FyZExpc3QgZW50cnkgYXQgaW5kZXggJWkgZG9lcyBub3QgaGF2ZSBh
IHZhbGlkIFVSTCIsIChpbnQpaSk7CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAg
IH0KKworICAgICAgICBDRlN0cmluZ1JlZiBlbnRyeVRpdGxlID0gKENGU3RyaW5nUmVmKUNGRGlj
dGlvbmFyeUdldFZhbHVlKGVudHJ5RGljdGlvbmFyeSwgU2Vzc2lvbkhpc3RvcnlFbnRyeVRpdGxl
S2V5KCkpOworICAgICAgICBpZiAoIWVudHJ5VGl0bGUgfHwgQ0ZHZXRUeXBlSUQoZW50cnlUaXRs
ZSkgIT0gQ0ZTdHJpbmdHZXRUeXBlSUQoKSkgeworICAgICAgICAgICAgTE9HKFNlc3Npb25TdGF0
ZSwgIldlYkJhY2tGb3J3YXJkTGlzdCBlbnRyeSBhdCBpbmRleCAlaSBkb2VzIG5vdCBoYXZlIGEg
dmFsaWQgdGl0bGUiLCAoaW50KWkpOworICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAg
ICB9CisgICAgICAgIAorICAgICAgICAvLyBGSVhNRSA8cmRhcjovL3Byb2JsZW0vODI2MTYyND4g
YW5kIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD00NzM1NSAtIAorICAg
ICAgICAvLyBUaGUgZGF0YSBmb3IgdGhlIGFib3ZlIGVudHJ5IG5lZWRzIHRvIGJlIGFkZGVkIHRv
IHRoZSBmdWxsIGJhY2svZm9yd2FyZCBsaXN0LgorICAgICAgICAvLyBXaGVuIHdlIGhhdmUgYSBz
b2x1dGlvbiB0aGF0IHJlc3RvcmVzIHRoZSBmdWxsIGJhY2svZm9yd2FyZGxpc3QgdGhlbiBjYXVz
ZXMgYSBsb2FkIG9mIHRoZSBjdXJyZW50IGl0ZW0sCisgICAgICAgIC8vIHdlIHdpbGwgbm8gbG9u
Z2VyIG5lZWQgdGhpcy4KKyAgICAgICAgaWYgKGkgPT0gY3VycmVudEluZGV4KSB7CisgICAgICAg
ICAgICBtX3Jlc3RvcmVkQ3VycmVudFVSTCA9IGVudHJ5VVJMOworICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgIH0KKyAgICB9CisgICAgcmV0dXJuIHRydWU7Cit9CisKK30gLy8gbmFtZXNwYWNl
IFdlYktpdApJbmRleDogV2ViS2l0Mi9VSVByb2Nlc3MvY2YvV2ViUGFnZVByb3h5Q0YuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFdlYktpdDIvVUlQcm9jZXNzL2NmL1dlYlBhZ2VQcm94eUNGLmNwcAkocmV2
aXNpb24gMCkKKysrIFdlYktpdDIvVUlQcm9jZXNzL2NmL1dlYlBhZ2VQcm94eUNGLmNwcAkocmV2
aXNpb24gMCkKQEAgLTAsMCArMSwxMTcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElT
JycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JT
CisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisg
KiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQg
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAq
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiV2ViUGFn
ZVByb3h5LmgiCisKKyNpbmNsdWRlICJMb2dnaW5nLmgiCisjaW5jbHVkZSAiV2ViQmFja0Zvcndh
cmRMaXN0LmgiCisjaW5jbHVkZSAiV2ViRGF0YS5oIgorCit1c2luZyBuYW1lc3BhY2UgV2ViQ29y
ZTsKKworbmFtZXNwYWNlIFdlYktpdCB7CisKK0RFRklORV9TVEFUSUNfR0VUVEVSKENGU3RyaW5n
UmVmLCBTZXNzaW9uSGlzdG9yeUtleSwgQ0ZTVFIoIlNlc3Npb25IaXN0b3J5IikpOworCitzdGF0
aWMgY29uc3QgVUludDMyIEN1cnJlbnRTZXNzaW9uU3RhdGVEYXRhVmVyc2lvbiA9IDE7CisKK1Bh
c3NSZWZQdHI8V2ViRGF0YT4gV2ViUGFnZVByb3h5OjpzZXNzaW9uU3RhdGVEYXRhKFdlYlBhZ2VQ
cm94eVNlc3Npb25TdGF0ZUZpbHRlckNhbGxiYWNrIGZpbHRlciwgdm9pZCogY29udGV4dCkgY29u
c3QKK3sKKyAgICBSZXRhaW5QdHI8Q0ZEaWN0aW9uYXJ5UmVmPiBzZXNzaW9uSGlzdG9yeURpY3Rp
b25hcnkoQWRvcHRDRiwgbV9iYWNrRm9yd2FyZExpc3QtPmNyZWF0ZUNGRGljdGlvbmFyeVJlcHJl
c2VudGF0aW9uKGZpbHRlciwgY29udGV4dCkpOworICAgIAorICAgIC8vIEZvciBub3cgd2UncmUg
b25seSBzZXJpYWxpemluZyB0aGUgYmFjay9mb3J3YXJkIGxpc3QuICBJZiB0aGF0IG9iamVjdCBp
cyBudWxsLCB0aGVuIHRoZSBlbnRpcmUgc2Vzc2lvblN0YXRlIGNhbiBiZSBudWxsLgorICAgIGlm
ICghc2Vzc2lvbkhpc3RvcnlEaWN0aW9uYXJ5KQorICAgICAgICByZXR1cm4gMDsKKyAgICAKKyAg
ICBjb25zdCB2b2lkKiBrZXlzWzFdID0geyBTZXNzaW9uSGlzdG9yeUtleSgpIH07CisgICAgY29u
c3Qgdm9pZCogdmFsdWVzWzFdID0geyBzZXNzaW9uSGlzdG9yeURpY3Rpb25hcnkuZ2V0KCkgfTsK
KyAgICAKKyAgICBSZXRhaW5QdHI8Q0ZEaWN0aW9uYXJ5UmVmPiBzdGF0ZURpY3Rpb25hcnkoQWRv
cHRDRiwgQ0ZEaWN0aW9uYXJ5Q3JlYXRlKDAsIGtleXMsIHZhbHVlcywgMSwgJmtDRlR5cGVEaWN0
aW9uYXJ5S2V5Q2FsbEJhY2tzLCAma0NGVHlwZURpY3Rpb25hcnlWYWx1ZUNhbGxCYWNrcykpOwor
CisgICAgUmV0YWluUHRyPENGRGF0YVJlZj4gc3RhdGVDRkRhdGEoQWRvcHRDRiwgQ0ZQcm9wZXJ0
eUxpc3RDcmVhdGVEYXRhKDAsIHN0YXRlRGljdGlvbmFyeS5nZXQoKSwga0NGUHJvcGVydHlMaXN0
QmluYXJ5Rm9ybWF0X3YxXzAsIDAsIDApKTsKKworICAgIENGSW5kZXggbGVuZ3RoID0gQ0ZEYXRh
R2V0TGVuZ3RoKHN0YXRlQ0ZEYXRhLmdldCgpKTsKKyAgICBWZWN0b3I8dW5zaWduZWQgY2hhcj4g
c3RhdGVWZWN0b3IobGVuZ3RoICsgNCk7CisgICAgCisgICAgLy8gUHV0IHRoZSBzZXNzaW9uIHN0
YXRlIHZlcnNpb24gbnVtYmVyIGF0IHRoZSBzdGFydCBvZiB0aGUgYnVmZmVyCisgICAgc3RhdGVW
ZWN0b3IuZGF0YSgpWzBdID0gKEN1cnJlbnRTZXNzaW9uU3RhdGVEYXRhVmVyc2lvbiAmIDB4RkYw
MDAwMDApID4+IDI0OworICAgIHN0YXRlVmVjdG9yLmRhdGEoKVsxXSA9IChDdXJyZW50U2Vzc2lv
blN0YXRlRGF0YVZlcnNpb24gJiAweDAwRkYwMDAwKSA+PiAxNjsKKyAgICBzdGF0ZVZlY3Rvci5k
YXRhKClbMl0gPSAoQ3VycmVudFNlc3Npb25TdGF0ZURhdGFWZXJzaW9uICYgMHgwMDAwRkYwMCkg
Pj4gODsKKyAgICBzdGF0ZVZlY3Rvci5kYXRhKClbM10gPSAoQ3VycmVudFNlc3Npb25TdGF0ZURh
dGFWZXJzaW9uICYgMHgwMDAwMDBGRik7CisgICAgCisgICAgLy8gQ29weSBpbiB0aGUgYWN0dWFs
IHNlc3Npb24gc3RhdGUgZGF0YQorICAgIENGRGF0YUdldEJ5dGVzKHN0YXRlQ0ZEYXRhLmdldCgp
LCBDRlJhbmdlTWFrZSgwLCBsZW5ndGgpLCBzdGF0ZVZlY3Rvci5kYXRhKCkgKyA0KTsKKyAgICAK
KyAgICByZXR1cm4gV2ViRGF0YTo6Y3JlYXRlKHN0YXRlVmVjdG9yKTsKK30KKwordm9pZCBXZWJQ
YWdlUHJveHk6OnJlc3RvcmVGcm9tU2Vzc2lvblN0YXRlRGF0YShXZWJEYXRhKiB3ZWJEYXRhKQor
eworICAgIGlmICghd2ViRGF0YSB8fCB3ZWJEYXRhLT5zaXplKCkgPCA0KQorICAgICAgICByZXR1
cm47CisKKyAgICBjb25zdCB1bnNpZ25lZCBjaGFyKiBidWZmZXIgPSB3ZWJEYXRhLT5ieXRlcygp
OworICAgIFVJbnQzMiB2ZXJzaW9uSGVhZGVyID0gKGJ1ZmZlclswXSA8PCAyNCkgKyAoYnVmZmVy
WzFdIDw8IDE2KSArIChidWZmZXJbMl0gPDwgOCkgKyBidWZmZXJbM107CisgICAgCisgICAgaWYg
KHZlcnNpb25IZWFkZXIgIT0gQ3VycmVudFNlc3Npb25TdGF0ZURhdGFWZXJzaW9uKSB7CisgICAg
ICAgIExPRyhTZXNzaW9uU3RhdGUsICJVbnJlY29nbml6ZWQgdmVyc2lvbiBoZWFkZXIgZm9yIHNl
c3Npb24gc3RhdGUgZGF0YSAtIGNhbm5vdCByZXN0b3JlIik7CisgICAgICAgIHJldHVybjsKKyAg
ICB9CisgICAgCisgICAgUmV0YWluUHRyPENGRGF0YVJlZj4gZGF0YShBZG9wdENGLCBDRkRhdGFD
cmVhdGUoMCwgd2ViRGF0YS0+Ynl0ZXMoKSArIDQsIHdlYkRhdGEtPnNpemUoKSAtIDQpKTsKKwor
ICAgIENGRXJyb3JSZWYgcHJvcGVydHlMaXN0RXJyb3IgPSAwOworICAgIFJldGFpblB0cjxDRlBy
b3BlcnR5TGlzdFJlZj4gcHJvcGVydHlMaXN0KEFkb3B0Q0YsIENGUHJvcGVydHlMaXN0Q3JlYXRl
V2l0aERhdGEoMCwgZGF0YS5nZXQoKSwga0NGUHJvcGVydHlMaXN0SW1tdXRhYmxlLCAwLCAmcHJv
cGVydHlMaXN0RXJyb3IpKTsKKyAgICBpZiAocHJvcGVydHlMaXN0RXJyb3IpIHsKKyAgICAgICAg
TE9HKFNlc3Npb25TdGF0ZSwgIkNvdWxkIG5vdCByZWFkIHNlc3Npb24gc3RhdGUgcHJvcGVydHkg
bGlzdCIpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgaWYgKCFwcm9wZXJ0eUxpc3Qp
CisgICAgICAgIHJldHVybjsKKyAgICAgICAgCisgICAgaWYgKENGR2V0VHlwZUlEKHByb3BlcnR5
TGlzdC5nZXQoKSkgIT0gQ0ZEaWN0aW9uYXJ5R2V0VHlwZUlEKCkpIHsKKyAgICAgICAgTE9HKFNl
c3Npb25TdGF0ZSwgIlNlc3Npb25TdGF0ZSBwcm9wZXJ0eSBsaXN0IGlzIG5vdCBhIENGRGljdGlv
bmFyeVJlZiAoJWkpIC0gaXRzIENGVHlwZUlEIGlzICVpIiwgKGludClDRkRpY3Rpb25hcnlHZXRU
eXBlSUQoKSwgKGludClDRkdldFR5cGVJRChwcm9wZXJ0eUxpc3QuZ2V0KCkpKTsKKyAgICAgICAg
cmV0dXJuOworICAgIH0KKyAgICAKKyAgICBDRlR5cGVSZWYgc2Vzc2lvbkhpc3RvcnlSZWYgPSBD
RkRpY3Rpb25hcnlHZXRWYWx1ZShzdGF0aWNfY2FzdDxDRkRpY3Rpb25hcnlSZWY+KHByb3BlcnR5
TGlzdC5nZXQoKSksIFNlc3Npb25IaXN0b3J5S2V5KCkpOworICAgIGlmICghc2Vzc2lvbkhpc3Rv
cnlSZWYgfHwgQ0ZHZXRUeXBlSUQoc2Vzc2lvbkhpc3RvcnlSZWYpICE9IENGRGljdGlvbmFyeUdl
dFR5cGVJRCgpKSB7CisgICAgICAgIExPRyhTZXNzaW9uU3RhdGUsICJTZXNzaW9uU3RhdGUgZGlj
dGlvbmFyeSBkb2VzIG5vdCBjb250YWluIGEgU2Vzc2lvbkhpc3RvcnlEaWN0aW9uYXJ5IGtleSwg
aXQgaXMgb2YgdGhlIHdyb25nIHR5cGUiKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICAK
KyAgICBDRkRpY3Rpb25hcnlSZWYgc2Vzc2lvbkhpc3RvcnlEaWN0aW9uYXJ5ID0gc3RhdGljX2Nh
c3Q8Q0ZEaWN0aW9uYXJ5UmVmPihzZXNzaW9uSGlzdG9yeVJlZik7CisgICAgaWYgKCFtX2JhY2tG
b3J3YXJkTGlzdC0+cmVzdG9yZUZyb21DRkRpY3Rpb25hcnlSZXByZXNlbnRhdGlvbihzZXNzaW9u
SGlzdG9yeURpY3Rpb25hcnkpKSB7CisgICAgICAgIExPRyhTZXNzaW9uU3RhdGUsICJGYWlsZWQg
dG8gcmVzdG9yZSBiYWNrL2ZvcndhcmQgbGlzdCBmcm9tIFNlc3Npb25IaXN0b3J5RGljdGlvbmFy
eSIpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgLy8gRklYTUU6IFdoZW4gd2UgaGF2
ZSBhIHNvbHV0aW9uIGZvciByZXN0b3JpbmcgdGhlIGZ1bGwgYmFjay9mb3J3YXJkIGxpc3QgdGhl
biBjYXVzaW5nIGEgbG9hZCBvZiB0aGUgY3VycmVudCBpdGVtLAorICAgIC8vIHdlIHdpbGwgdHJp
Z2dlciB0aGF0IGxvYWQgaGVyZS4gIFVudGlsIHRoZW4sIHdlIHVzZSB0aGUgInJlc3RvcmVkIGN1
cnJlbnQgVVJMIiB3aGljaCBjYW4gbGF0ZXIgYmUgcmVtb3ZlZC4KKyAgICBsb2FkVVJMKG1fYmFj
a0ZvcndhcmRMaXN0LT5yZXN0b3JlZEN1cnJlbnRVUkwoKSk7Cit9CisKK30gLy8gbmFtZXNwYWNl
IFdlYktpdApJbmRleDogV2ViS2l0Mi9XZWJLaXQyLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gV2ViS2l0Mi9XZWJLaXQyLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJ
KHJldmlzaW9uIDY5NTIxKQorKysgV2ViS2l0Mi9XZWJLaXQyLnhjb2RlcHJvai9wcm9qZWN0LnBi
eHByb2oJKHdvcmtpbmcgY29weSkKQEAgLTE0Myw2ICsxNDMsOCBAQAogCQk1MTZBNEE1RDEyMEEy
Q0NEMDBDMDVCN0YgLyogV2ViRXJyb3IuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDUxNkE0QTVCMTIwQTJDQ0QwMEMwNUI3RiAvKiBXZWJFcnJvci5oICov
OyB9OwogCQk1MUE3RjJGMzEyNUJGODIwMDA4QUVCMUQgLyogTG9nZ2luZy5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTFBN0YyRjIxMjVCRjgyMDAwOEFF
QjFEIC8qIExvZ2dpbmcuaCAqLzsgfTsKIAkJNTFBN0YyRjUxMjVCRjhENDAwOEFFQjFEIC8qIExv
Z2dpbmcuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
NTFBN0YyRjQxMjVCRjhENDAwOEFFQjFEIC8qIExvZ2dpbmcuY3BwICovOyB9OworCQk1MUIzMDA1
MDEyNTI5RDBFMDAwQjVDQTAgLyogV2ViQmFja0ZvcndhcmRMaXN0Q0YuY3BwIGluIFNvdXJjZXMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTFCMzAwNEUxMjUyOUQwRTAwMEI1
Q0EwIC8qIFdlYkJhY2tGb3J3YXJkTGlzdENGLmNwcCAqLzsgfTsKKwkJNTFCMzAwNTExMjUyOUQw
RTAwMEI1Q0EwIC8qIFdlYlBhZ2VQcm94eUNGLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUxQjMwMDRGMTI1MjlEMEUwMDBCNUNBMCAvKiBXZWJQYWdl
UHJveHlDRi5jcHAgKi87IH07CiAJCTZEOEE5MUE2MTFGMEVGRDEwMEREMDFGRSAvKiBjb20uYXBw
bGUuV2ViUHJvY2Vzcy5zYiBpbiBSZXNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gNkQ4QTkxQTUxMUYwRUZEMTAwREQwMUZFIC8qIGNvbS5hcHBsZS5XZWJQcm9jZXNz
LnNiICovOyB9OwogCQk3NjJCNzQ4RDEyMEJDNzVDMDA4MTkzMzkgLyogV0tQcmVmZXJlbmNlc1By
aXZhdGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDc2
MkI3NDg0MTIwQkJBMkQwMDgxOTMzOSAvKiBXS1ByZWZlcmVuY2VzUHJpdmF0ZS5oICovOyBzZXR0
aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTc2MkI3NEFGMTIwQkM5
NEYwMDgxOTMzOSAvKiBXS1ByZWZlcmVuY2VzUHJpdmF0ZS5jcHAgaW4gU291cmNlcyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3NjJCNzQ5RDEyMEJDOEVBMDA4MTkzMzkgLyog
V0tQcmVmZXJlbmNlc1ByaXZhdGUuY3BwICovOyB9OwpAQCAtNTk5LDYgKzYwMSw4IEBACiAJCTUx
NkE0QTVCMTIwQTJDQ0QwMEMwNUI3RiAvKiBXZWJFcnJvci5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IHBhdGggPSBXZWJFcnJvci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1
MUE3RjJGMjEyNUJGODIwMDA4QUVCMUQgLyogTG9nZ2luZy5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IHBhdGggPSBMb2dnaW5nLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTUx
QTdGMkY0MTI1QkY4RDQwMDhBRUIxRCAvKiBMb2dnaW5nLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuY3BwLmNwcDsgcGF0aCA9IExvZ2dpbmcuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OworCQk1MUIzMDA0RTEyNTI5RDBFMDAwQjVDQTAgLyogV2ViQmFja0ZvcndhcmRMaXN0Q0YuY3Bw
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gV2ViQmFja0ZvcndhcmRMaXN0
Q0YuY3BwOyBwYXRoID0gY2YvV2ViQmFja0ZvcndhcmRMaXN0Q0YuY3BwOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OworCQk1MUIzMDA0RjEyNTI5RDBFMDAwQjVDQTAgLyogV2ViUGFnZVByb3h5
Q0YuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gV2ViUGFnZVByb3h5
Q0YuY3BwOyBwYXRoID0gY2YvV2ViUGFnZVByb3h5Q0YuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQk1REFENzI5NDExNkZGNzBCMDBFRTUzOTYgLyogV2ViUHJvY2Vzcy54Y2NvbmZp
ZyAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHRleHQueGNjb25maWc7IHBhdGggPSBXZWJQcm9jZXNzLnhjY29uZmlnOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1REFENzNGMTExNkZGOTBDMDBFRTUzOTYgLyog
QmFzZVRhcmdldC54Y2NvbmZpZyAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQueGNjb25maWc7IHBhdGggPSBCYXNl
VGFyZ2V0LnhjY29uZmlnOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk2RDhBOTFBNTEx
RjBFRkQxMDBERDAxRkUgLyogY29tLmFwcGxlLldlYlByb2Nlc3Muc2IgKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0
OyBuYW1lID0gY29tLmFwcGxlLldlYlByb2Nlc3Muc2I7IHBhdGggPSBXZWJQcm9jZXNzL2NvbS5h
cHBsZS5XZWJQcm9jZXNzLnNiOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtNjQ2LDcg
KzY1MCw3IEBACiAJCUJDMTExQUUzMTEyRjVDMjYwMDMzN0JBQiAvKiBXZWJQcm9jZXNzLmNwcCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFdlYlByb2Nlc3MuY3BwOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlCQzExMUIwODExMkY1RTNDMDAzMzdCQUIgLyogUmVz
cG9uc2l2ZW5lc3NUaW1lci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGgg
PSBSZXNwb25zaXZlbmVzc1RpbWVyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
QkMxMTFCMEExMTJGNUU0RjAwMzM3QkFCIC8qIFdlYkZyYW1lUHJveHkuY3BwICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gV2ViRnJhbWVQcm94eS5jcHA7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07Ci0JCUJDMTExQjBCMTEyRjVFNEYwMDMzN0JBQiAvKiBXZWJQYWdlUHJv
eHkuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gV2ViUGFnZVByb3h5
LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQkMxMTFCMEIxMTJGNUU0RjAwMzM3
QkFCIC8qIFdlYlBhZ2VQcm94eS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZXhw
bGljaXRGaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgZmlsZUVuY29kaW5nID0gNDsgcGF0
aCA9IFdlYlBhZ2VQcm94eS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUJDMTEx
QjBDMTEyRjVFNEYwMDMzN0JBQiAvKiBXZWJQcm9jZXNzTWFuYWdlci5jcHAgKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBXZWJQcm9jZXNzTWFuYWdlci5jcHA7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCUJDMTExQjBEMTEyRjVFNEYwMDMzN0JBQiAvKiBXZWJQcm9j
ZXNzUHJveHkuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gV2ViUHJv
Y2Vzc1Byb3h5LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQkMxMTFCMUIxMTJG
NUZFNjAwMzM3QkFCIC8qIFByb2Nlc3NMYXVuY2hlck1hYy5tbSAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuY3BwLm9iamNwcDsgcGF0aCA9IFByb2Nlc3NMYXVuY2hlck1hYy5tbTsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKQEAgLTEyMjksNiArMTIzMywxNSBAQAogCQkJbmFtZSA9ICJPdGhlciBT
b3VyY2VzIjsKIAkJCXNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7CiAJCX07CisJCTUxQjMwMDREMTI1
MjlDRjUwMDBCNUNBMCAvKiBjZiAqLyA9IHsKKwkJCWlzYSA9IFBCWEdyb3VwOworCQkJY2hpbGRy
ZW4gPSAoCisJCQkJNTFCMzAwNEUxMjUyOUQwRTAwMEI1Q0EwIC8qIFdlYkJhY2tGb3J3YXJkTGlz
dENGLmNwcCAqLywKKwkJCQk1MUIzMDA0RjEyNTI5RDBFMDAwQjVDQTAgLyogV2ViUGFnZVByb3h5
Q0YuY3BwICovLAorCQkJKTsKKwkJCW5hbWUgPSBjZjsKKwkJCXNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7CisJCX07CiAJCUJDMDMyRDVDMTBGNDM2RDUwMDU4QzE1QSAvKiBXZWJQcm9jZXNzICovID0g
ewogCQkJaXNhID0gUEJYR3JvdXA7CiAJCQljaGlsZHJlbiA9ICgKQEAgLTEzMDIsNiArMTMxNSw3
IEBACiAJCQlpc2EgPSBQQlhHcm91cDsKIAkJCWNoaWxkcmVuID0gKAogCQkJCUJDMDMyREM0MTBG
NDM4N0MwMDU4QzE1QSAvKiBBUEkgKi8sCisJCQkJNTFCMzAwNEQxMjUyOUNGNTAwMEI1Q0EwIC8q
IGNmICovLAogCQkJCUJDMTExQjE4MTEyRjVGQjQwMDMzN0JBQiAvKiBMYXVuY2hlciAqLywKIAkJ
CQlCQ0NGMDg1QzExM0YzQjc1MDBDNjUwQzUgLyogbWFjICovLAogCQkJCTFBRUZDQzA1MTFEMDFG
MzQwMDgyMTlEMyAvKiBQbHVnaW5zICovLApAQCAtMjI2MCw2ICsyMjc0LDggQEAKIAkJCQkxQTA0
M0Y2OTEyNTE0RDhCMDBGRkJGQjUgLyogV2ViUHJvY2Vzc0Nvbm5lY3Rpb25NZXNzYWdlUmVjZWl2
ZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMUE4RUY0Q0MxMjUyNDAzNzAwRjcwNjdGIC8qIFBs
dWdpbkNvbnRyb2xsZXJQcm94eS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlDMDJCRkYxRTEyNTE1
MDJFMDA5Q0NCRUEgLyogTmF0aXZlV2ViS2V5Ym9hcmRFdmVudE1hYy5tbSBpbiBTb3VyY2VzICov
LAorCQkJCTUxQjMwMDUwMTI1MjlEMEUwMDBCNUNBMCAvKiBXZWJCYWNrRm9yd2FyZExpc3RDRi5j
cHAgaW4gU291cmNlcyAqLywKKwkJCQk1MUIzMDA1MTEyNTI5RDBFMDAwQjVDQTAgLyogV2ViUGFn
ZVByb3h5Q0YuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMUE4RUY5NkUxMjUyQUY2QjAwRjcwNjdG
IC8qIFBsdWdpbkNvbnRyb2xsZXJQcm94eU1lc3NhZ2VSZWNlaXZlci5jcHAgaW4gU291cmNlcyAq
LywKIAkJCQkxQThFRkE3MDEyNTJCODQxMDBGNzA2N0YgLyogUGx1Z2luUHJveHlNZXNzYWdlUmVj
ZWl2ZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMUE4RUZERkUxMjUzQ0I2RTAwRjcwNjdGIC8q
IERhdGFSZWZlcmVuY2UuY3BwIGluIFNvdXJjZXMgKi8sCkluZGV4OiBXZWJLaXQyL3dpbi9XZWJL
aXQyLnZjcHJvago9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQyL3dpbi9XZWJLaXQyLnZjcHJvagkocmV2
aXNpb24gNjk1MjEpCisrKyBXZWJLaXQyL3dpbi9XZWJLaXQyLnZjcHJvagkod29ya2luZyBjb3B5
KQpAQCAtMTcyOSw2ICsxNzI5LDE4IEBACiAJCQkJPC9GaWx0ZXI+DQogCQkJPC9GaWx0ZXI+DQog
CQkJPEZpbHRlcg0KKwkJCQlOYW1lPSJjZiINCisJCQkJPg0KKwkJCQk8RmlsZQ0KKwkJCQkJUmVs
YXRpdmVQYXRoPSIuLlxVSVByb2Nlc3NcY2ZcV2ViQmFja0ZvcndhcmRMaXN0Q0YuY3BwIg0KKwkJ
CQkJPg0KKwkJCQk8L0ZpbGU+DQorCQkJCTxGaWxlDQorCQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXFVJ
UHJvY2Vzc1xjZlxXZWJQYWdlUHJveHlDRi5jcHAiDQorCQkJCQk+DQorCQkJCTwvRmlsZT4NCisJ
CQk8L0ZpbHRlcj4NCisJCQk8RmlsdGVyDQogCQkJCU5hbWU9IkxhdW5jaGVyIg0KIAkJCQk+DQog
CQkJCTxGaWxlDQo=
</data>
<flag name="review"
          id="60333"
          type_id="1"
          status="+"
          setter="sam"
    />
    <flag name="commit-queue"
          id="60334"
          type_id="3"
          status="-"
          setter="beidson"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>70510</attachid>
            <date>2010-10-11 19:03:27 -0700</date>
            <delta_ts>2010-10-11 22:26:06 -0700</delta_ts>
            <desc>Windows build fix (would like a review)</desc>
            <filename>patch.txt</filename>
            <type>text/plain</type>
            <size>2594</size>
            <attacher name="Brady Eidson">beidson</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYktpdDIvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdDIvQ2hhbmdlTG9n
CShyZXZpc2lvbiA2OTU1MSkKKysrIFdlYktpdDIvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMTMgQEAKKzIwMTAtMTAtMTEgIEJyYWR5IEVpZHNvbiAgPGJlaWRzb25AYXBwbGUu
Y29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEJ1
aWxkIGZpeCBmb3IgV2luZG93cyBpbiBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9NDczNTQKKworICAgICAgICAqIFVJUHJvY2Vzcy9jZi9XZWJQYWdlUHJveHlDRi5jcHA6
CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2VQcm94eTo6c2Vzc2lvblN0YXRlRGF0YSk6IENoYW5n
ZSB0byB1c2UgQ0YgQVBJcyB0aGF0IGV4aXN0IG9uIFdpbmRvd3MuCisgICAgICAgIChXZWJLaXQ6
OldlYlBhZ2VQcm94eTo6cmVzdG9yZUZyb21TZXNzaW9uU3RhdGVEYXRhKTogRGl0dG8uCisKIDIw
MTAtMTAtMTEgIFNhbSBXZWluaWcgIDxzYW1Ad2Via2l0Lm9yZz4KIAogICAgICAgICBSZXZpZXdl
ZCBieSBBbmRlcnMgQ2FybHNzb24uCkluZGV4OiBXZWJLaXQyL1VJUHJvY2Vzcy9jZi9XZWJQYWdl
UHJveHlDRi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0Mi9VSVByb2Nlc3MvY2YvV2ViUGFnZVBy
b3h5Q0YuY3BwCShyZXZpc2lvbiA2OTU1MSkKKysrIFdlYktpdDIvVUlQcm9jZXNzL2NmL1dlYlBh
Z2VQcm94eUNGLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTIsNyArNTIsMTcgQEAgUGFzc1JlZlB0
cjxXZWJEYXRhPiBXZWJQYWdlUHJveHk6OnNlc3NpbwogICAgIAogICAgIFJldGFpblB0cjxDRkRp
Y3Rpb25hcnlSZWY+IHN0YXRlRGljdGlvbmFyeShBZG9wdENGLCBDRkRpY3Rpb25hcnlDcmVhdGUo
MCwga2V5cywgdmFsdWVzLCAxLCAma0NGVHlwZURpY3Rpb25hcnlLZXlDYWxsQmFja3MsICZrQ0ZU
eXBlRGljdGlvbmFyeVZhbHVlQ2FsbEJhY2tzKSk7CiAKLSAgICBSZXRhaW5QdHI8Q0ZEYXRhUmVm
PiBzdGF0ZUNGRGF0YShBZG9wdENGLCBDRlByb3BlcnR5TGlzdENyZWF0ZURhdGEoMCwgc3RhdGVE
aWN0aW9uYXJ5LmdldCgpLCBrQ0ZQcm9wZXJ0eUxpc3RCaW5hcnlGb3JtYXRfdjFfMCwgMCwgMCkp
OworICAgIFJldGFpblB0cjxDRldyaXRlU3RyZWFtUmVmPiB3cml0ZVN0cmVhbShBZG9wdENGLCBD
RldyaXRlU3RyZWFtQ3JlYXRlV2l0aEFsbG9jYXRlZEJ1ZmZlcnMoMCwgMCkpOworICAgIGlmICgh
d3JpdGVTdHJlYW0pCisgICAgICAgIHJldHVybiAwOworICAgIAorICAgIGlmICghQ0ZXcml0ZVN0
cmVhbU9wZW4od3JpdGVTdHJlYW0uZ2V0KCkpKQorICAgICAgICByZXR1cm4gMDsKKyAgICAgICAg
CisgICAgaWYgKCFDRlByb3BlcnR5TGlzdFdyaXRlVG9TdHJlYW0oc3RhdGVEaWN0aW9uYXJ5Lmdl
dCgpLCB3cml0ZVN0cmVhbS5nZXQoKSwga0NGUHJvcGVydHlMaXN0QmluYXJ5Rm9ybWF0X3YxXzAs
IDApKQorICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgCisgICAgUmV0YWluUHRyPENGRGF0YVJl
Zj4gc3RhdGVDRkRhdGEoQWRvcHRDRiwgKENGRGF0YVJlZilDRldyaXRlU3RyZWFtQ29weVByb3Bl
cnR5KHdyaXRlU3RyZWFtLmdldCgpLCBrQ0ZTdHJlYW1Qcm9wZXJ0eURhdGFXcml0dGVuKSk7CiAK
ICAgICBDRkluZGV4IGxlbmd0aCA9IENGRGF0YUdldExlbmd0aChzdGF0ZUNGRGF0YS5nZXQoKSk7
CiAgICAgVmVjdG9yPHVuc2lnbmVkIGNoYXI+IHN0YXRlVmVjdG9yKGxlbmd0aCArIDQpOwpAQCAt
ODQsOSArOTQsMTAgQEAgdm9pZCBXZWJQYWdlUHJveHk6OnJlc3RvcmVGcm9tU2Vzc2lvblN0YQog
ICAgIAogICAgIFJldGFpblB0cjxDRkRhdGFSZWY+IGRhdGEoQWRvcHRDRiwgQ0ZEYXRhQ3JlYXRl
KDAsIHdlYkRhdGEtPmJ5dGVzKCkgKyA0LCB3ZWJEYXRhLT5zaXplKCkgLSA0KSk7CiAKLSAgICBD
RkVycm9yUmVmIHByb3BlcnR5TGlzdEVycm9yID0gMDsKLSAgICBSZXRhaW5QdHI8Q0ZQcm9wZXJ0
eUxpc3RSZWY+IHByb3BlcnR5TGlzdChBZG9wdENGLCBDRlByb3BlcnR5TGlzdENyZWF0ZVdpdGhE
YXRhKDAsIGRhdGEuZ2V0KCksIGtDRlByb3BlcnR5TGlzdEltbXV0YWJsZSwgMCwgJnByb3BlcnR5
TGlzdEVycm9yKSk7CisgICAgQ0ZTdHJpbmdSZWYgcHJvcGVydHlMaXN0RXJyb3IgPSAwOworICAg
IFJldGFpblB0cjxDRlByb3BlcnR5TGlzdFJlZj4gcHJvcGVydHlMaXN0KEFkb3B0Q0YsIENGUHJv
cGVydHlMaXN0Q3JlYXRlRnJvbVhNTERhdGEoMCwgZGF0YS5nZXQoKSwga0NGUHJvcGVydHlMaXN0
SW1tdXRhYmxlLCAmcHJvcGVydHlMaXN0RXJyb3IpKTsKICAgICBpZiAocHJvcGVydHlMaXN0RXJy
b3IpIHsKKyAgICAgICAgQ0ZSZWxlYXNlKHByb3BlcnR5TGlzdEVycm9yKTsKICAgICAgICAgTE9H
KFNlc3Npb25TdGF0ZSwgIkNvdWxkIG5vdCByZWFkIHNlc3Npb24gc3RhdGUgcHJvcGVydHkgbGlz
dCIpOwogICAgICAgICByZXR1cm47CiAgICAgfQo=
</data>

          </attachment>
      

    </bug>

</bugzilla>