<?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>57488</bug_id>
          
          <creation_ts>2011-03-30 11:40:07 -0700</creation_ts>
          <short_desc>Cached Resource Overhead Space Usage and Accounting Inaccurate</short_desc>
          <delta_ts>2011-04-01 20:32:28 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>WebCore Misc.</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Mac</rep_platform>
          <op_sys>OS X 10.5</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>57657</dependson>
    
    <dependson>57660</dependson>
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Michael Saboff">msaboff</reporter>
          <assigned_to name="Michael Saboff">msaboff</assigned_to>
          <cc>abarth</cc>
    
    <cc>buildbot</cc>
    
    <cc>commit-queue</cc>
    
    <cc>eric</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>376527</commentid>
    <comment_count>0</comment_count>
    <who name="Michael Saboff">msaboff</who>
    <bug_when>2011-03-30 11:40:07 -0700</bug_when>
    <thetext>The current CachedResource::overheadSize() on Mac returns 4312.  The ResourceResponse component of this is 3072.  Tests show that the ResourceResponse should actually be greater than 5100.

The suggested resolution is two fold, reduce the amount of memory ResourceResponse uses and then adjust the value returned by ResourceResponse::memoryUsage() accordingly.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>376818</commentid>
    <comment_count>1</comment_count>
      <attachid>87645</attachid>
    <who name="Michael Saboff">msaboff</who>
    <bug_when>2011-03-30 17:42:39 -0700</bug_when>
    <thetext>Created attachment 87645
Patch to reduce ResourceResponse memory usage and bring overhead size inline with reality.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>376822</commentid>
    <comment_count>2</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-03-30 17:45:35 -0700</bug_when>
    <thetext>Attachment 87645 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;Source/WebCore/ChangeLog&apos;, u&apos;Source/WebCor...&quot; exit_code: 1

Source/WebCore/platform/network/cf/ResourceResponseCFNet.cpp:108:  One line control clauses should not use braces.  [whitespace/braces] [4]
Total errors found: 1 in 7 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>376830</commentid>
    <comment_count>3</comment_count>
      <attachid>87645</attachid>
    <who name="Maciej Stachowiak">mjs</who>
    <bug_when>2011-03-30 18:00:44 -0700</bug_when>
    <thetext>Comment on attachment 87645
Patch to reduce ResourceResponse memory usage and bring overhead size inline with reality.

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

r- because I think at least a few of my comments indicate real bugs.

&gt; Source/WebCore/platform/network/ResourceResponseBase.cpp:560
&gt; +void ResourceResponseBase::lazyInit(bool baseInitOnly) const

Instead of a boolean, we usually prefer to use a named enum for this sort of thing, so it&apos;s clear what the parameter means at the call sites. I just read through a bunch of newly modified call sites and it was not at all clear what lazyInit(true) means.

&gt; Source/WebCore/platform/network/cf/ResourceResponse.h:98
&gt; +    void platformLazyInit(bool baseInitOnly = false);

It&apos;s a bad idea to have a default value for a parameter in the subclass, but not in the case class.

&gt; Source/WebCore/platform/network/cf/ResourceResponseCFNet.cpp:90
&gt; +        // FIXME: We may need to do MIME type sniffing here (unless that is done in CFURLResponseGetMIMEType).

It is done in CFURLResponseGetMIMEType. You can remove the FIXME.

&gt; Source/WebCore/platform/network/cf/ResourceResponseCFNet.cpp:116
&gt; +        for (int idx = 0; idx &lt; numCommonHeaderFields; idx++) {
&gt; +            CFStringRef value;
&gt; +            if (CFDictionaryGetValueIfPresent(headers.get(), commonHeaderFields[i], &amp;value))
&gt; +                m_httpHeaderFields.set(commonHeaderFields[i], value);

We conventionally name for loop index variables just &quot;i&quot; rather than &quot;idx&quot;. Some code below is subscripted by i, and I don&apos;t see an outer loop using i as the index, so I wonder if this is mistaken?

&gt; Source/WebCore/platform/network/mac/ResourceResponseMac.mm:105
&gt; +            for (int idx = 0; idx &lt; numCommonHeaderFields; idx++) {
&gt; +                if (NSString* headerValue = [headers objectForKey:commonHeaderFields[idx]])
&gt; +                    m_httpHeaderFields.set([commonHeaderFields[idx] UTF8String], headerValue);

I suggest using i instead of idx for the index variable.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>376850</commentid>
    <comment_count>4</comment_count>
    <who name="Build Bot">buildbot</who>
    <bug_when>2011-03-30 18:48:03 -0700</bug_when>
    <thetext>Attachment 87645 did not build on win:
Build output: http://queues.webkit.org/results/8309089</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>377145</commentid>
    <comment_count>5</comment_count>
      <attachid>87725</attachid>
    <who name="Michael Saboff">msaboff</who>
    <bug_when>2011-03-31 07:35:39 -0700</bug_when>
    <thetext>Created attachment 87725
Patch with update in response to reviewer&apos;s comments</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>377168</commentid>
    <comment_count>6</comment_count>
      <attachid>87725</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2011-03-31 08:26:29 -0700</bug_when>
    <thetext>Comment on attachment 87725
Patch with update in response to reviewer&apos;s comments

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

Sorry, didn’t finish my review, but I added a few comments.

&gt; Source/WebCore/ChangeLog:17
&gt; +        No new tests. (OOPS!)

You need to remove this line or replace it with an explanation of why there are no tests.

&gt; Source/WebCore/platform/network/ResourceResponseBase.cpp:258
&gt; +    lazyInit(CommonFieldsOnly);
&gt; +
&gt; +    // Optimistic check first
&gt; +    String value = m_httpHeaderFields.get(name);
&gt; +    if (!value.isEmpty())        
&gt; +        return value;
&gt; +
&gt; +    lazyInit(AllFields);

I think this “optimistic” check does not work well for fields that are common, but also commonly omitted from HTTP headers. We may want to explore a design where we know whether a field name is common or not rather than assuming anything not found is not common.

Also, an isNull check is more efficient than isEmpty, so I suggest using that instead.

&gt; Source/WebCore/platform/network/ResourceResponseBase.h:141
&gt; -    void platformLazyInit() { }
&gt; +    void platformLazyInit(InitLevel initLevel) { UNUSED_PARAM(initLevel); }

Rather than using UNUSED_PARAM you can just leave the argument name out, since the class name makes it clear what it is.

&gt; Source/WebCore/platform/network/cf/ResourceResponseCFNet.cpp:46
&gt; +    CFSTR(&quot;Age&quot;, CFSTR(&quot;Cache-Control&quot;, CFSTR(&quot;Date&quot;, CFSTR(&quot;Etag&quot;, CFSTR(&quot;Expires&quot;, CFSTR(&quot;Last-Modified&quot;, CFSTR(&quot;Pragma&quot;)

Missing end parentheses here mean this probably won’t compile.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>377181</commentid>
    <comment_count>7</comment_count>
    <who name="Build Bot">buildbot</who>
    <bug_when>2011-03-31 08:48:05 -0700</bug_when>
    <thetext>Attachment 87725 did not build on win:
Build output: http://queues.webkit.org/results/8309380</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>377213</commentid>
    <comment_count>8</comment_count>
    <who name="Build Bot">buildbot</who>
    <bug_when>2011-03-31 09:08:55 -0700</bug_when>
    <thetext>Attachment 87725 did not build on win:
Build output: http://queues.webkit.org/results/8314330</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>377293</commentid>
    <comment_count>9</comment_count>
      <attachid>87725</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2011-03-31 10:23:04 -0700</bug_when>
    <thetext>Comment on attachment 87725
Patch with update in response to reviewer&apos;s comments

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

review- since this doesn’t compile on Windows.

Otherwise, the only place with some room for improvement is with the comments and logic in the function to fetch header fields.

&gt; Source/WebCore/platform/network/ResourceResponseBase.cpp:253
&gt; +    // Optimistic check first

You can probably omit this comment. If you did want to leave a comment you could have it address why we think this is a good idea. I think the rationale is that this prevents fetching a common field with a non-empty value from causing initialization of all fields. Putting that in writing could make it clear that we also want to optimize fetching a common field with an empty value.

&gt; Source/WebCore/platform/network/cf/ResourceResponseCFNet.cpp:88
&gt; +    if ((m_initLevel &lt; CommonFieldsOnly) &amp;&amp; (initLevel &gt;= CommonFieldsOnly)) {

I think this reads better without the extra parentheses.

&gt; Source/WebCore/platform/network/mac/ResourceResponseMac.mm:49
&gt; +static const NSString* commonHeaderFields[] = {

The const here is in the wrong place. It needs to be after the &quot;*&quot;.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>377472</commentid>
    <comment_count>10</comment_count>
      <attachid>87793</attachid>
    <who name="Michael Saboff">msaboff</who>
    <bug_when>2011-03-31 14:54:58 -0700</bug_when>
    <thetext>Created attachment 87793
Updated patch with windows build fix and changes in response to reviews.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>377512</commentid>
    <comment_count>11</comment_count>
    <who name="Build Bot">buildbot</who>
    <bug_when>2011-03-31 15:59:45 -0700</bug_when>
    <thetext>Attachment 87793 did not build on win:
Build output: http://queues.webkit.org/results/8314432</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>377527</commentid>
    <comment_count>12</comment_count>
      <attachid>87802</attachid>
    <who name="Michael Saboff">msaboff</who>
    <bug_when>2011-03-31 16:16:49 -0700</bug_when>
    <thetext>Created attachment 87802
Fixed missing closing paren</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>377529</commentid>
    <comment_count>13</comment_count>
      <attachid>87793</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2011-03-31 16:18:16 -0700</bug_when>
    <thetext>Comment on attachment 87793
Updated patch with windows build fix and changes in response to reviews.

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

Looks great! Still won’t compile on Windows but I’m going to say review+ as long as you fix the Windows build issue before checking in.

&gt; Source/WebCore/platform/network/ResourceResponseBase.cpp:253
&gt; +    // Check to see if we already have the field before copying all header fields

I still think this comment focuses too much on what we’re doing, and not enough on why it’s a good idea. But it’s better and I’m not going to insist on further refinement.

Also, in WebKit we normally put a period on these sentence-style comments.

&gt; Source/WebCore/platform/network/ResourceResponseBase.h:129
&gt; +        Uninitialized = 0,

I don’t think you need this &quot;= 0&quot;. For one thing, it will be 0. For another, who cares if it’s 0 or not?

&gt; Source/WebCore/platform/network/cf/ResourceResponseCFNet.cpp:46
&gt; +    CFSTR(&quot;Age&quot;, CFSTR(&quot;Cache-Control&quot;), CFSTR(&quot;Date&quot;), CFSTR(&quot;Etag&quot;), CFSTR(&quot;Expires&quot;), CFSTR(&quot;Last-Modified&quot;), CFSTR(&quot;Pragma&quot;)

Still missing one parenthesis here, so it still won’t build!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>377547</commentid>
    <comment_count>14</comment_count>
    <who name="Build Bot">buildbot</who>
    <bug_when>2011-03-31 16:51:53 -0700</bug_when>
    <thetext>Attachment 87802 did not build on win:
Build output: http://queues.webkit.org/results/8315307</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>377564</commentid>
    <comment_count>15</comment_count>
      <attachid>87810</attachid>
    <who name="Michael Saboff">msaboff</who>
    <bug_when>2011-03-31 17:20:39 -0700</bug_when>
    <thetext>Created attachment 87810
Really fixed missing paren.  More feedback changes.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>377863</commentid>
    <comment_count>16</comment_count>
    <who name="Build Bot">buildbot</who>
    <bug_when>2011-04-01 09:44:34 -0700</bug_when>
    <thetext>Attachment 87810 did not build on win:
Build output: http://queues.webkit.org/results/8307202</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>377869</commentid>
    <comment_count>17</comment_count>
      <attachid>87871</attachid>
    <who name="Michael Saboff">msaboff</who>
    <bug_when>2011-04-01 09:55:03 -0700</bug_when>
    <thetext>Created attachment 87871
Fix windows build with cast</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>377883</commentid>
    <comment_count>18</comment_count>
      <attachid>87871</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2011-04-01 10:03:36 -0700</bug_when>
    <thetext>Comment on attachment 87871
Fix windows build with cast

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

&gt; Source/WebCore/platform/network/ResourceResponseBase.cpp:267
&gt; +    // Check to see if we already have a the field before copying all header fields

Stray “a” here.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>378005</commentid>
    <comment_count>19</comment_count>
    <who name="Michael Saboff">msaboff</who>
    <bug_when>2011-04-01 13:00:44 -0700</bug_when>
    <thetext>Committed r82711: &lt;http://trac.webkit.org/changeset/82711&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>378040</commentid>
    <comment_count>20</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-04-01 13:35:52 -0700</bug_when>
    <thetext>http://trac.webkit.org/changeset/82711 might have broken Windows 7 Release (Tests)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>378126</commentid>
    <comment_count>21</comment_count>
    <who name="Michael Saboff">msaboff</who>
    <bug_when>2011-04-01 15:28:25 -0700</bug_when>
    <thetext>Reopened to fix breakage on Windows.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>378251</commentid>
    <comment_count>22</comment_count>
      <attachid>87949</attachid>
    <who name="Michael Saboff">msaboff</who>
    <bug_when>2011-04-01 17:48:44 -0700</bug_when>
    <thetext>Created attachment 87949
Fix for Windows test break - put header field access inside if (httpResponse) check</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>378311</commentid>
    <comment_count>23</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2011-04-01 20:21:25 -0700</bug_when>
    <thetext>The commit-queue encountered the following flaky tests while processing attachment 87949:

http/tests/appcache/fail-on-update-2.html bug 57691 (author: ap@webkit.org)
The commit-queue is continuing to process your patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>378312</commentid>
    <comment_count>24</comment_count>
      <attachid>87949</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2011-04-01 20:22:57 -0700</bug_when>
    <thetext>Comment on attachment 87949
Fix for Windows test break - put header field access inside if (httpResponse) check

Rejecting attachment 87949 from commit-queue.

Failed to run &quot;[&apos;./Tools/Scripts/webkit-patch&apos;, &apos;--status-host=queues.webkit.org&apos;, &apos;--bot-id=cr-jail-3&apos;, &apos;land-a...&quot; exit_code: 1

Last 500 characters of output:
900b2defebbf (refs/remotes/trunk)
	M	Source/WebKit2/ChangeLog
	M	Source/WebKit2/UIProcess/win/WebPageProxyWin.cpp
	M	Source/WebKit2/UIProcess/win/WebPopupMenuProxyWin.h
	M	Source/WebKit2/UIProcess/WebPageProxy.h
	M	Source/WebKit2/UIProcess/WebPageProxy.messages.in
	M	Source/WebKit2/WebProcess/WebCoreSupport/WebPopupMenu.cpp
r82763 = d9db6c99df3a6e955e8132274ac1e525d06c5cde (refs/remotes/trunk)
First, rewinding head to replay your work on top of it...
Fast-forwarded master to refs/remotes/trunk.

Full output: http://queues.webkit.org/results/8321383</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>378313</commentid>
    <comment_count>25</comment_count>
    <who name="Michael Saboff">msaboff</who>
    <bug_when>2011-04-01 20:32:28 -0700</bug_when>
    <thetext>Committed r82764: &lt;http://trac.webkit.org/changeset/82764&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>87645</attachid>
            <date>2011-03-30 17:42:39 -0700</date>
            <delta_ts>2011-03-31 07:35:39 -0700</delta_ts>
            <desc>Patch to reduce ResourceResponse memory usage and bring overhead size inline with reality.</desc>
            <filename>57488-1.patch</filename>
            <type>text/plain</type>
            <size>24271</size>
            <attacher name="Michael Saboff">msaboff</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDgyNTI0KQorKysgU291cmNlL1dlYkNvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsNTUgQEAKKzIwMTEtMDMtMzAgIE1pY2hhZWwg
U2Fib2ZmICA8bXNhYm9mZkBhcHBsZS5jb20+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZ
IChPT1BTISkuCisKKyAgICAgICAgQ2FjaGVkIFJlc291cmNlIE92ZXJoZWFkIFNwYWNlIFVzYWdl
IGFuZCBBY2NvdW50aW5nIEluYWNjdXJhdGUKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTU3NDg4CisKKyAgICAgICAgQ2hhbmdlZCB0aGUgZml4ZWQgb3Zl
cmhlYWQgdmFsdWUgZm9yIFJlc291cmNlUmVzcG9uc2UgdG8gMzgwMCBieXRlcy4KKyAgICAgICAg
TW9kaWZpZWQgUmVzb3VyY2VSZXNwb25zZTo6cGxhdGZvcm1MYXp5SW5pdCgpIHRvIGhhbmRsZSAi
YmFzZSIgbGV2ZWwKKyAgICAgICAgYXR0cmlidXRlcyBvciBhbGwgYXR0cmlidXRlcy4gIFRoZSBi
YXNlIGF0dHJpYnV0ZXMsIGxpa2UgVVJMLCBzdGF0dXMKKyAgICAgICAgY29kZSwgbWltZSB0eXBl
IGFuZCBhIGZldyBoZWFkZXIgZmllbGRzIChtb3N0bHkgY2FjaGUgcmVsYXRlZCkgYXJlCisgICAg
ICAgIHN1aXRhYmxlIGZvciBtb3N0IHJlc291cmNlcy4gIFRoaXMgcmVkdWNlcyB0aGUgcGVyIHJl
c291cmNlIG1lbW9yeQorICAgICAgICBuZWVkcyBieSBvdmVyIDFLIGJ5dGVzIHBlciByZXNvdXJj
ZSB0aHVzIHNhdmluZyBtZW1vcnkgaW4gdGhlIGNhY2hlLgorICAgICAgICBDb2xsZWN0aXZlbHks
IHRoZXNlIHR3byBjaGFuZ2VzIGJyaW5nIHRoZSBvdmVyaGVhZCBtZW1vcnkgY2FsY3VsYXRpb24K
KyAgICAgICAgaW4gbGluZSB3aXRoIHJlYWxpdHkuCisKKyAgICAgICAgTm8gbmV3IHRlc3RzLiAo
T09QUyEpCisKKyAgICAgICAgKiBsb2FkZXIvY2FjaGUvQ2FjaGVkUmVzb3VyY2UuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6Q2FjaGVkUmVzb3VyY2U6OmNhblVzZUNhY2hlVmFsaWRhdG9yKToKKyAg
ICAgICAgKiBwbGF0Zm9ybS9uZXR3b3JrL1Jlc291cmNlUmVzcG9uc2VCYXNlLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OlJlc291cmNlUmVzcG9uc2VCYXNlOjppc0hUVFApOgorICAgICAgICAoV2Vi
Q29yZTo6UmVzb3VyY2VSZXNwb25zZUJhc2U6OnVybCk6CisgICAgICAgIChXZWJDb3JlOjpSZXNv
dXJjZVJlc3BvbnNlQmFzZTo6c2V0VVJMKToKKyAgICAgICAgKFdlYkNvcmU6OlJlc291cmNlUmVz
cG9uc2VCYXNlOjptaW1lVHlwZSk6CisgICAgICAgIChXZWJDb3JlOjpSZXNvdXJjZVJlc3BvbnNl
QmFzZTo6c2V0TWltZVR5cGUpOgorICAgICAgICAoV2ViQ29yZTo6UmVzb3VyY2VSZXNwb25zZUJh
c2U6OmV4cGVjdGVkQ29udGVudExlbmd0aCk6CisgICAgICAgIChXZWJDb3JlOjpSZXNvdXJjZVJl
c3BvbnNlQmFzZTo6c2V0RXhwZWN0ZWRDb250ZW50TGVuZ3RoKToKKyAgICAgICAgKFdlYkNvcmU6
OlJlc291cmNlUmVzcG9uc2VCYXNlOjp0ZXh0RW5jb2RpbmdOYW1lKToKKyAgICAgICAgKFdlYkNv
cmU6OlJlc291cmNlUmVzcG9uc2VCYXNlOjpzZXRUZXh0RW5jb2RpbmdOYW1lKToKKyAgICAgICAg
KFdlYkNvcmU6OlJlc291cmNlUmVzcG9uc2VCYXNlOjpzdWdnZXN0ZWRGaWxlbmFtZSk6CisgICAg
ICAgIChXZWJDb3JlOjpSZXNvdXJjZVJlc3BvbnNlQmFzZTo6c2V0U3VnZ2VzdGVkRmlsZW5hbWUp
OgorICAgICAgICAoV2ViQ29yZTo6UmVzb3VyY2VSZXNwb25zZUJhc2U6Omh0dHBTdGF0dXNDb2Rl
KToKKyAgICAgICAgKFdlYkNvcmU6OlJlc291cmNlUmVzcG9uc2VCYXNlOjpzZXRIVFRQU3RhdHVz
Q29kZSk6CisgICAgICAgIChXZWJDb3JlOjpSZXNvdXJjZVJlc3BvbnNlQmFzZTo6aHR0cEhlYWRl
ckZpZWxkKToKKyAgICAgICAgKFdlYkNvcmU6OlJlc291cmNlUmVzcG9uc2VCYXNlOjpzZXRIVFRQ
SGVhZGVyRmllbGQpOgorICAgICAgICAoV2ViQ29yZTo6UmVzb3VyY2VSZXNwb25zZUJhc2U6OnBh
cnNlQ2FjaGVDb250cm9sRGlyZWN0aXZlcyk6CisgICAgICAgIChXZWJDb3JlOjpSZXNvdXJjZVJl
c3BvbnNlQmFzZTo6aGFzQ2FjaGVWYWxpZGF0b3JGaWVsZHMpOgorICAgICAgICAoV2ViQ29yZTo6
UmVzb3VyY2VSZXNwb25zZUJhc2U6OmRhdGUpOgorICAgICAgICAoV2ViQ29yZTo6UmVzb3VyY2VS
ZXNwb25zZUJhc2U6OmFnZSk6CisgICAgICAgIChXZWJDb3JlOjpSZXNvdXJjZVJlc3BvbnNlQmFz
ZTo6ZXhwaXJlcyk6CisgICAgICAgIChXZWJDb3JlOjpSZXNvdXJjZVJlc3BvbnNlQmFzZTo6bGFz
dE1vZGlmaWVkKToKKyAgICAgICAgKFdlYkNvcmU6OlJlc291cmNlUmVzcG9uc2VCYXNlOjpsYXp5
SW5pdCk6CisgICAgICAgICogcGxhdGZvcm0vbmV0d29yay9SZXNvdXJjZVJlc3BvbnNlQmFzZS5o
OgorICAgICAgICAoV2ViQ29yZTo6UmVzb3VyY2VSZXNwb25zZUJhc2U6OnBsYXRmb3JtTGF6eUlu
aXQpOgorICAgICAgICAqIHBsYXRmb3JtL25ldHdvcmsvY2YvUmVzb3VyY2VSZXNwb25zZS5oOgor
ICAgICAgICAoV2ViQ29yZTo6UmVzb3VyY2VSZXNwb25zZTo6UmVzb3VyY2VSZXNwb25zZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpSZXNvdXJjZVJlc3BvbnNlOjptZW1vcnlVc2FnZSk6CisgICAgICAg
ICogcGxhdGZvcm0vbmV0d29yay9jZi9SZXNvdXJjZVJlc3BvbnNlQ0ZOZXQuY3BwOgorICAgICAg
ICAqIHBsYXRmb3JtL25ldHdvcmsvbWFjL1Jlc291cmNlUmVzcG9uc2VNYWMubW06CisgICAgICAg
IChXZWJDb3JlOjpSZXNvdXJjZVJlc3BvbnNlOjpwbGF0Zm9ybUxhenlJbml0KToKKwogMjAxMS0w
My0zMCAgTU9SSVRBIEhhamltZSAgPG1vcnJpdGFAZ29vZ2xlLmNvbT4KIAogICAgICAgICBSZXZp
ZXdlZCBieSBTaW1vbiBGcmFzZXIuCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvY2FjaGUv
Q2FjaGVkUmVzb3VyY2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2xvYWRlci9j
YWNoZS9DYWNoZWRSZXNvdXJjZS5jcHAJKHJldmlzaW9uIDgyNDc2KQorKysgU291cmNlL1dlYkNv
cmUvbG9hZGVyL2NhY2hlL0NhY2hlZFJlc291cmNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTA0
LDEwICs1MDQsNyBAQCBib29sIENhY2hlZFJlc291cmNlOjpjYW5Vc2VDYWNoZVZhbGlkYXRvCiAK
ICAgICBpZiAobV9yZXNwb25zZS5jYWNoZUNvbnRyb2xDb250YWluc05vU3RvcmUoKSkKICAgICAg
ICAgcmV0dXJuIGZhbHNlOwotCi0gICAgREVGSU5FX1NUQVRJQ19MT0NBTChjb25zdCBBdG9taWNT
dHJpbmcsIGxhc3RNb2RpZmllZEhlYWRlciwgKCJsYXN0LW1vZGlmaWVkIikpOwotICAgIERFRklO
RV9TVEFUSUNfTE9DQUwoY29uc3QgQXRvbWljU3RyaW5nLCBlVGFnSGVhZGVyLCAoImV0YWciKSk7
Ci0gICAgcmV0dXJuICFtX3Jlc3BvbnNlLmh0dHBIZWFkZXJGaWVsZChsYXN0TW9kaWZpZWRIZWFk
ZXIpLmlzRW1wdHkoKSB8fCAhbV9yZXNwb25zZS5odHRwSGVhZGVyRmllbGQoZVRhZ0hlYWRlciku
aXNFbXB0eSgpOworICAgIHJldHVybiBtX3Jlc3BvbnNlLmhhc0NhY2hlVmFsaWRhdG9yRmllbGRz
KCk7CiB9CiAKIGJvb2wgQ2FjaGVkUmVzb3VyY2U6Om11c3RSZXZhbGlkYXRlRHVlVG9DYWNoZUhl
YWRlcnMoQ2FjaGVQb2xpY3kgY2FjaGVQb2xpY3kpIGNvbnN0CkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9uZXR3b3JrL1Jlc291cmNlUmVzcG9uc2VCYXNlLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL1Jlc291cmNlUmVzcG9uc2VCYXNlLmNw
cAkocmV2aXNpb24gODI0NzYpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL1Jl
c291cmNlUmVzcG9uc2VCYXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTM1LDcgKzEzNSw3IEBA
IFBhc3NPd25QdHI8Q3Jvc3NUaHJlYWRSZXNvdXJjZVJlc3BvbnNlRGEKIAogYm9vbCBSZXNvdXJj
ZVJlc3BvbnNlQmFzZTo6aXNIVFRQKCkgY29uc3QKIHsKLSAgICBsYXp5SW5pdCgpOworICAgIGxh
enlJbml0KHRydWUpOwogCiAgICAgU3RyaW5nIHByb3RvY29sID0gbV91cmwucHJvdG9jb2woKTsK
IApAQCAtMTQ0LDkwICsxNDQsOTAgQEAgYm9vbCBSZXNvdXJjZVJlc3BvbnNlQmFzZTo6aXNIVFRQ
KCkgY29ucwogCiBjb25zdCBLVVJMJiBSZXNvdXJjZVJlc3BvbnNlQmFzZTo6dXJsKCkgY29uc3QK
IHsKLSAgICBsYXp5SW5pdCgpOwotICAgIAorICAgIGxhenlJbml0KHRydWUpOworCiAgICAgcmV0
dXJuIG1fdXJsOyAKIH0KIAogdm9pZCBSZXNvdXJjZVJlc3BvbnNlQmFzZTo6c2V0VVJMKGNvbnN0
IEtVUkwmIHVybCkKIHsKLSAgICBsYXp5SW5pdCgpOworICAgIGxhenlJbml0KHRydWUpOwogICAg
IG1faXNOdWxsID0gZmFsc2U7Ci0gICAgCisKICAgICBtX3VybCA9IHVybDsgCiB9CiAKIGNvbnN0
IFN0cmluZyYgUmVzb3VyY2VSZXNwb25zZUJhc2U6Om1pbWVUeXBlKCkgY29uc3QKIHsKLSAgICBs
YXp5SW5pdCgpOworICAgIGxhenlJbml0KHRydWUpOwogCiAgICAgcmV0dXJuIG1fbWltZVR5cGU7
IAogfQogCiB2b2lkIFJlc291cmNlUmVzcG9uc2VCYXNlOjpzZXRNaW1lVHlwZShjb25zdCBTdHJp
bmcmIG1pbWVUeXBlKQogewotICAgIGxhenlJbml0KCk7CisgICAgbGF6eUluaXQodHJ1ZSk7CiAg
ICAgbV9pc051bGwgPSBmYWxzZTsKLSAgICAKKwogICAgIG1fbWltZVR5cGUgPSBtaW1lVHlwZTsg
CiB9CiAKIGxvbmcgbG9uZyBSZXNvdXJjZVJlc3BvbnNlQmFzZTo6ZXhwZWN0ZWRDb250ZW50TGVu
Z3RoKCkgY29uc3QgCiB7Ci0gICAgbGF6eUluaXQoKTsKKyAgICBsYXp5SW5pdCh0cnVlKTsKIAog
ICAgIHJldHVybiBtX2V4cGVjdGVkQ29udGVudExlbmd0aDsKIH0KIAogdm9pZCBSZXNvdXJjZVJl
c3BvbnNlQmFzZTo6c2V0RXhwZWN0ZWRDb250ZW50TGVuZ3RoKGxvbmcgbG9uZyBleHBlY3RlZENv
bnRlbnRMZW5ndGgpCiB7Ci0gICAgbGF6eUluaXQoKTsKKyAgICBsYXp5SW5pdCh0cnVlKTsKICAg
ICBtX2lzTnVsbCA9IGZhbHNlOwotICAgIAorCiAgICAgbV9leHBlY3RlZENvbnRlbnRMZW5ndGgg
PSBleHBlY3RlZENvbnRlbnRMZW5ndGg7IAogfQogCiBjb25zdCBTdHJpbmcmIFJlc291cmNlUmVz
cG9uc2VCYXNlOjp0ZXh0RW5jb2RpbmdOYW1lKCkgY29uc3QKIHsKLSAgICBsYXp5SW5pdCgpOwor
ICAgIGxhenlJbml0KHRydWUpOwogCiAgICAgcmV0dXJuIG1fdGV4dEVuY29kaW5nTmFtZTsKIH0K
IAogdm9pZCBSZXNvdXJjZVJlc3BvbnNlQmFzZTo6c2V0VGV4dEVuY29kaW5nTmFtZShjb25zdCBT
dHJpbmcmIGVuY29kaW5nTmFtZSkKIHsKLSAgICBsYXp5SW5pdCgpOworICAgIGxhenlJbml0KHRy
dWUpOwogICAgIG1faXNOdWxsID0gZmFsc2U7Ci0gICAgCisKICAgICBtX3RleHRFbmNvZGluZ05h
bWUgPSBlbmNvZGluZ05hbWU7IAogfQogCiAvLyBGSVhNRSBzaG91bGQgY29tcHV0ZSB0aGlzIG9u
IHRoZSBmbHkKIGNvbnN0IFN0cmluZyYgUmVzb3VyY2VSZXNwb25zZUJhc2U6OnN1Z2dlc3RlZEZp
bGVuYW1lKCkgY29uc3QKIHsKLSAgICBsYXp5SW5pdCgpOworICAgIGxhenlJbml0KHRydWUpOwog
CiAgICAgcmV0dXJuIG1fc3VnZ2VzdGVkRmlsZW5hbWU7CiB9CiAKIHZvaWQgUmVzb3VyY2VSZXNw
b25zZUJhc2U6OnNldFN1Z2dlc3RlZEZpbGVuYW1lKGNvbnN0IFN0cmluZyYgc3VnZ2VzdGVkTmFt
ZSkKIHsKLSAgICBsYXp5SW5pdCgpOworICAgIGxhenlJbml0KHRydWUpOwogICAgIG1faXNOdWxs
ID0gZmFsc2U7Ci0gICAgCisKICAgICBtX3N1Z2dlc3RlZEZpbGVuYW1lID0gc3VnZ2VzdGVkTmFt
ZTsgCiB9CiAKIGludCBSZXNvdXJjZVJlc3BvbnNlQmFzZTo6aHR0cFN0YXR1c0NvZGUoKSBjb25z
dAogewotICAgIGxhenlJbml0KCk7CisgICAgbGF6eUluaXQodHJ1ZSk7CiAKICAgICByZXR1cm4g
bV9odHRwU3RhdHVzQ29kZTsKIH0KIAogdm9pZCBSZXNvdXJjZVJlc3BvbnNlQmFzZTo6c2V0SFRU
UFN0YXR1c0NvZGUoaW50IHN0YXR1c0NvZGUpCiB7Ci0gICAgbGF6eUluaXQoKTsKKyAgICBsYXp5
SW5pdCh0cnVlKTsKIAogICAgIG1faHR0cFN0YXR1c0NvZGUgPSBzdGF0dXNDb2RlOwogfQpAQCAt
MjQ4LDYgKzI0OCwxMyBAQCB2b2lkIFJlc291cmNlUmVzcG9uc2VCYXNlOjpzZXRIVFRQU3RhdHVz
CiAKIFN0cmluZyBSZXNvdXJjZVJlc3BvbnNlQmFzZTo6aHR0cEhlYWRlckZpZWxkKGNvbnN0IEF0
b21pY1N0cmluZyYgbmFtZSkgY29uc3QKIHsKKyAgICBsYXp5SW5pdCh0cnVlKTsKKworICAgIC8v
IE9wdGltaXN0aWMgY2hlY2sgZmlyc3QKKyAgICBTdHJpbmcgdmFsdWUgPSBtX2h0dHBIZWFkZXJG
aWVsZHMuZ2V0KG5hbWUpOworICAgIGlmICghdmFsdWUuaXNFbXB0eSgpKSAgICAgICAgCisgICAg
ICAgIHJldHVybiB2YWx1ZTsKKwogICAgIGxhenlJbml0KCk7CiAKICAgICByZXR1cm4gbV9odHRw
SGVhZGVyRmllbGRzLmdldChuYW1lKTsgCkBAIC0yNTUsNiArMjYyLDEyIEBAIFN0cmluZyBSZXNv
dXJjZVJlc3BvbnNlQmFzZTo6aHR0cEhlYWRlckYKIAogU3RyaW5nIFJlc291cmNlUmVzcG9uc2VC
YXNlOjpodHRwSGVhZGVyRmllbGQoY29uc3QgY2hhciogbmFtZSkgY29uc3QKIHsKKyAgICBsYXp5
SW5pdCh0cnVlKTsKKworICAgIFN0cmluZyB2YWx1ZSA9IG1faHR0cEhlYWRlckZpZWxkcy5nZXQo
bmFtZSk7CisgICAgaWYgKCF2YWx1ZS5pc0VtcHR5KCkpCisgICAgICAgIHJldHVybiB2YWx1ZTsK
KwogICAgIGxhenlJbml0KCk7CiAKICAgICByZXR1cm4gbV9odHRwSGVhZGVyRmllbGRzLmdldChu
YW1lKTsgCkBAIC0yNjMsNyArMjc2LDcgQEAgU3RyaW5nIFJlc291cmNlUmVzcG9uc2VCYXNlOjpo
dHRwSGVhZGVyRgogdm9pZCBSZXNvdXJjZVJlc3BvbnNlQmFzZTo6c2V0SFRUUEhlYWRlckZpZWxk
KGNvbnN0IEF0b21pY1N0cmluZyYgbmFtZSwgY29uc3QgU3RyaW5nJiB2YWx1ZSkKIHsKICAgICBs
YXp5SW5pdCgpOwotICAgIAorCiAgICAgREVGSU5FX1NUQVRJQ19MT0NBTChjb25zdCBBdG9taWNT
dHJpbmcsIGFnZUhlYWRlciwgKCJhZ2UiKSk7CiAgICAgREVGSU5FX1NUQVRJQ19MT0NBTChjb25z
dCBBdG9taWNTdHJpbmcsIGNhY2hlQ29udHJvbEhlYWRlciwgKCJjYWNoZS1jb250cm9sIikpOwog
ICAgIERFRklORV9TVEFUSUNfTE9DQUwoY29uc3QgQXRvbWljU3RyaW5nLCBkYXRlSGVhZGVyLCAo
ImRhdGUiKSk7CkBAIC0yOTUsNyArMzA4LDcgQEAgdm9pZCBSZXNvdXJjZVJlc3BvbnNlQmFzZTo6
cGFyc2VDYWNoZUNvbgogewogICAgIEFTU0VSVCghbV9oYXZlUGFyc2VkQ2FjaGVDb250cm9sSGVh
ZGVyKTsKIAotICAgIGxhenlJbml0KCk7CisgICAgbGF6eUluaXQodHJ1ZSk7CiAKICAgICBtX2hh
dmVQYXJzZWRDYWNoZUNvbnRyb2xIZWFkZXIgPSB0cnVlOwogCkBAIC0zMzIsMTMgKzM0NSwxNCBA
QCB2b2lkIFJlc291cmNlUmVzcG9uc2VCYXNlOjpwYXJzZUNhY2hlQ29uCiAgICAgICAgICAgICB9
CiAgICAgICAgIH0KICAgICB9Ci0gICAgICAgIAorCiAgICAgaWYgKCFtX2NhY2hlQ29udHJvbENv
bnRhaW5zTm9DYWNoZSkgewogICAgICAgICAvLyBIYW5kbGUgUHJhZ21hOiBuby1jYWNoZQogICAg
ICAgICAvLyBUaGlzIGlzIGRlcHJlY2F0ZWQgYW5kIGVxdWl2YWxlbnQgdG8gQ2FjaGUtY29udHJv
bDogbm8tY2FjaGUKICAgICAgICAgLy8gRG9uJ3QgYm90aGVyIHRva2VuaXppbmcgdGhlIHZhbHVl
LCBpdCBpcyBub3QgaW1wb3J0YW50CiAgICAgICAgIERFRklORV9TVEFUSUNfTE9DQUwoY29uc3Qg
QXRvbWljU3RyaW5nLCBwcmFnbWFIZWFkZXIsICgicHJhZ21hIikpOwogICAgICAgICBTdHJpbmcg
cHJhZ21hVmFsdWUgPSBtX2h0dHBIZWFkZXJGaWVsZHMuZ2V0KHByYWdtYUhlYWRlcik7CisKICAg
ICAgICAgbV9jYWNoZUNvbnRyb2xDb250YWluc05vQ2FjaGUgPSBwcmFnbWFWYWx1ZS5sb3dlcigp
LmNvbnRhaW5zKG5vQ2FjaGVEaXJlY3RpdmUpOwogICAgIH0KIH0KQEAgLTM2NCw2ICszNzgsMTUg
QEAgYm9vbCBSZXNvdXJjZVJlc3BvbnNlQmFzZTo6Y2FjaGVDb250cm9sQwogICAgIHJldHVybiBt
X2NhY2hlQ29udHJvbENvbnRhaW5zTXVzdFJldmFsaWRhdGU7CiB9CiAKK2Jvb2wgUmVzb3VyY2VS
ZXNwb25zZUJhc2U6Omhhc0NhY2hlVmFsaWRhdG9yRmllbGRzKCkgY29uc3QKK3sKKyAgICBsYXp5
SW5pdCh0cnVlKTsKKworICAgIERFRklORV9TVEFUSUNfTE9DQUwoY29uc3QgQXRvbWljU3RyaW5n
LCBsYXN0TW9kaWZpZWRIZWFkZXIsICgibGFzdC1tb2RpZmllZCIpKTsKKyAgICBERUZJTkVfU1RB
VElDX0xPQ0FMKGNvbnN0IEF0b21pY1N0cmluZywgZVRhZ0hlYWRlciwgKCJldGFnIikpOworICAg
IHJldHVybiAhbV9odHRwSGVhZGVyRmllbGRzLmdldChsYXN0TW9kaWZpZWRIZWFkZXIpLmlzRW1w
dHkoKSB8fCAhbV9odHRwSGVhZGVyRmllbGRzLmdldChlVGFnSGVhZGVyKS5pc0VtcHR5KCk7Cit9
CisKIGRvdWJsZSBSZXNvdXJjZVJlc3BvbnNlQmFzZTo6Y2FjaGVDb250cm9sTWF4QWdlKCkgY29u
c3QKIHsKICAgICBpZiAoIW1faGF2ZVBhcnNlZENhY2hlQ29udHJvbEhlYWRlcikKQEAgLTM4OCw3
ICs0MTEsNyBAQCBzdGF0aWMgZG91YmxlIHBhcnNlRGF0ZVZhbHVlSW5IZWFkZXIoY29uCiAKIGRv
dWJsZSBSZXNvdXJjZVJlc3BvbnNlQmFzZTo6ZGF0ZSgpIGNvbnN0CiB7Ci0gICAgbGF6eUluaXQo
KTsKKyAgICBsYXp5SW5pdCh0cnVlKTsKIAogICAgIGlmICghbV9oYXZlUGFyc2VkRGF0ZUhlYWRl
cikgewogICAgICAgICBERUZJTkVfU1RBVElDX0xPQ0FMKGNvbnN0IEF0b21pY1N0cmluZywgaGVh
ZGVyTmFtZSwgKCJkYXRlIikpOwpAQCAtNDAwLDggKzQyMyw4IEBAIGRvdWJsZSBSZXNvdXJjZVJl
c3BvbnNlQmFzZTo6ZGF0ZSgpIGNvbnMKIAogZG91YmxlIFJlc291cmNlUmVzcG9uc2VCYXNlOjph
Z2UoKSBjb25zdAogewotICAgIGxhenlJbml0KCk7Ci0gICAgCisgICAgbGF6eUluaXQodHJ1ZSk7
CisKICAgICBpZiAoIW1faGF2ZVBhcnNlZEFnZUhlYWRlcikgewogICAgICAgICBERUZJTkVfU1RB
VElDX0xPQ0FMKGNvbnN0IEF0b21pY1N0cmluZywgaGVhZGVyTmFtZSwgKCJhZ2UiKSk7CiAgICAg
ICAgIFN0cmluZyBoZWFkZXJWYWx1ZSA9IG1faHR0cEhlYWRlckZpZWxkcy5nZXQoaGVhZGVyTmFt
ZSk7CkBAIC00MTYsNyArNDM5LDcgQEAgZG91YmxlIFJlc291cmNlUmVzcG9uc2VCYXNlOjphZ2Uo
KSBjb25zdAogCiBkb3VibGUgUmVzb3VyY2VSZXNwb25zZUJhc2U6OmV4cGlyZXMoKSBjb25zdAog
ewotICAgIGxhenlJbml0KCk7CisgICAgbGF6eUluaXQodHJ1ZSk7CiAKICAgICBpZiAoIW1faGF2
ZVBhcnNlZEV4cGlyZXNIZWFkZXIpIHsKICAgICAgICAgREVGSU5FX1NUQVRJQ19MT0NBTChjb25z
dCBBdG9taWNTdHJpbmcsIGhlYWRlck5hbWUsICgiZXhwaXJlcyIpKTsKQEAgLTQyOCw4ICs0NTEs
OCBAQCBkb3VibGUgUmVzb3VyY2VSZXNwb25zZUJhc2U6OmV4cGlyZXMoKSBjCiAKIGRvdWJsZSBS
ZXNvdXJjZVJlc3BvbnNlQmFzZTo6bGFzdE1vZGlmaWVkKCkgY29uc3QKIHsKLSAgICBsYXp5SW5p
dCgpOwotICAgIAorICAgIGxhenlJbml0KHRydWUpOworCiAgICAgaWYgKCFtX2hhdmVQYXJzZWRM
YXN0TW9kaWZpZWRIZWFkZXIpIHsKICAgICAgICAgREVGSU5FX1NUQVRJQ19MT0NBTChjb25zdCBB
dG9taWNTdHJpbmcsIGhlYWRlck5hbWUsICgibGFzdC1tb2RpZmllZCIpKTsKICAgICAgICAgbV9s
YXN0TW9kaWZpZWQgPSBwYXJzZURhdGVWYWx1ZUluSGVhZGVyKG1faHR0cEhlYWRlckZpZWxkcywg
aGVhZGVyTmFtZSk7CkBAIC01MzQsMTEgKzU1NywxMSBAQCB2b2lkIFJlc291cmNlUmVzcG9uc2VC
YXNlOjpzZXRSZXNvdXJjZUxvCiAgICAgbV9yZXNvdXJjZUxvYWRJbmZvID0gbG9hZEluZm87CiB9
CiAKLXZvaWQgUmVzb3VyY2VSZXNwb25zZUJhc2U6OmxhenlJbml0KCkgY29uc3QKK3ZvaWQgUmVz
b3VyY2VSZXNwb25zZUJhc2U6OmxhenlJbml0KGJvb2wgYmFzZUluaXRPbmx5KSBjb25zdAogewot
ICAgIGNvbnN0X2Nhc3Q8UmVzb3VyY2VSZXNwb25zZSo+KHN0YXRpY19jYXN0PGNvbnN0IFJlc291
cmNlUmVzcG9uc2UqPih0aGlzKSktPnBsYXRmb3JtTGF6eUluaXQoKTsKKyAgICBjb25zdF9jYXN0
PFJlc291cmNlUmVzcG9uc2UqPihzdGF0aWNfY2FzdDxjb25zdCBSZXNvdXJjZVJlc3BvbnNlKj4o
dGhpcykpLT5wbGF0Zm9ybUxhenlJbml0KGJhc2VJbml0T25seSk7CiB9Ci0KKyAgICAKIGJvb2wg
UmVzb3VyY2VSZXNwb25zZUJhc2U6OmNvbXBhcmUoY29uc3QgUmVzb3VyY2VSZXNwb25zZSYgYSwg
Y29uc3QgUmVzb3VyY2VSZXNwb25zZSYgYikKIHsKICAgICBpZiAoYS5pc051bGwoKSAhPSBiLmlz
TnVsbCgpKQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9SZXNvdXJjZVJl
c3BvbnNlQmFzZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdv
cmsvUmVzb3VyY2VSZXNwb25zZUJhc2UuaAkocmV2aXNpb24gODI0NzYpCisrKyBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9uZXR3b3JrL1Jlc291cmNlUmVzcG9uc2VCYXNlLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTM0LDYgKzM0LDcgQEAKIAogI2luY2x1ZGUgPHd0Zi9QYXNzT3duUHRyLmg+CiAjaW5j
bHVkZSA8d3RmL1JlZlB0ci5oPgorI2luY2x1ZGUgPHd0Zi9VbnVzZWRQYXJhbS5oPgogCiBuYW1l
c3BhY2UgV2ViQ29yZSB7CiAKQEAgLTkzLDYgKzk0LDcgQEAgcHVibGljOgogICAgIGJvb2wgY2Fj
aGVDb250cm9sQ29udGFpbnNOb0NhY2hlKCkgY29uc3Q7CiAgICAgYm9vbCBjYWNoZUNvbnRyb2xD
b250YWluc05vU3RvcmUoKSBjb25zdDsKICAgICBib29sIGNhY2hlQ29udHJvbENvbnRhaW5zTXVz
dFJldmFsaWRhdGUoKSBjb25zdDsKKyAgICBib29sIGhhc0NhY2hlVmFsaWRhdG9yRmllbGRzKCkg
Y29uc3Q7CiAgICAgZG91YmxlIGNhY2hlQ29udHJvbE1heEFnZSgpIGNvbnN0OwogICAgIGRvdWJs
ZSBkYXRlKCkgY29uc3Q7CiAgICAgZG91YmxlIGFnZSgpIGNvbnN0OwpAQCAtMTI3LDEwICsxMjks
MTAgQEAgcHJvdGVjdGVkOgogICAgIFJlc291cmNlUmVzcG9uc2VCYXNlKCk7CiAgICAgUmVzb3Vy
Y2VSZXNwb25zZUJhc2UoY29uc3QgS1VSTCYgdXJsLCBjb25zdCBTdHJpbmcmIG1pbWVUeXBlLCBs
b25nIGxvbmcgZXhwZWN0ZWRMZW5ndGgsIGNvbnN0IFN0cmluZyYgdGV4dEVuY29kaW5nTmFtZSwg
Y29uc3QgU3RyaW5nJiBmaWxlbmFtZSk7CiAKLSAgICB2b2lkIGxhenlJbml0KCkgY29uc3Q7Cisg
ICAgdm9pZCBsYXp5SW5pdChib29sIGJhc2VJbml0T25seSA9IGZhbHNlKSBjb25zdDsKIAogICAg
IC8vIFRoZSBSZXNvdXJjZVJlc3BvbnNlIHN1YmNsYXNzIG1heSAic2hhZG93IiB0aGlzIG1ldGhv
ZCB0byBsYXppbHkgaW5pdGlhbGl6ZSBwbGF0Zm9ybSBzcGVjaWZpYyBmaWVsZHMKLSAgICB2b2lk
IHBsYXRmb3JtTGF6eUluaXQoKSB7IH0KKyAgICB2b2lkIHBsYXRmb3JtTGF6eUluaXQoYm9vbCBi
YXNlSW5pdE9ubHkpIHsgVU5VU0VEX1BBUkFNKGJhc2VJbml0T25seSk7IH0KIAogICAgIC8vIFRo
ZSBSZXNvdXJjZVJlc3BvbnNlIHN1YmNsYXNzIG1heSAic2hhZG93IiB0aGlzIG1ldGhvZCB0byBj
b21wYXJlIHBsYXRmb3JtIHNwZWNpZmljIGZpZWxkcwogICAgIHN0YXRpYyBib29sIHBsYXRmb3Jt
Q29tcGFyZShjb25zdCBSZXNvdXJjZVJlc3BvbnNlJiwgY29uc3QgUmVzb3VyY2VSZXNwb25zZSYp
IHsgcmV0dXJuIHRydWU7IH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsv
Y2YvUmVzb3VyY2VSZXNwb25zZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL25ldHdvcmsvY2YvUmVzb3VyY2VSZXNwb25zZS5oCShyZXZpc2lvbiA4MjQ3NikKKysrIFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY2YvUmVzb3VyY2VSZXNwb25zZS5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC00NCwxMyArNDQsMTUgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogY2xhc3Mg
UmVzb3VyY2VSZXNwb25zZSA6IHB1YmxpYyBSZXNvdXJjZVJlc3BvbnNlQmFzZSB7CiBwdWJsaWM6
CiAgICAgUmVzb3VyY2VSZXNwb25zZSgpCi0gICAgICAgIDogbV9pc1VwVG9EYXRlKHRydWUpCisg
ICAgICAgIDogbV9iYXNlSXNVcFRvRGF0ZSh0cnVlKQorICAgICAgICAsIG1faXNVcFRvRGF0ZSh0
cnVlKQogICAgIHsKICAgICB9CiAKICNpZiBVU0UoQ0ZORVRXT1JLKQogICAgIFJlc291cmNlUmVz
cG9uc2UoQ0ZVUkxSZXNwb25zZVJlZiBjZlJlc3BvbnNlKQogICAgICAgICA6IG1fY2ZSZXNwb25z
ZShjZlJlc3BvbnNlKQorICAgICAgICAsIG1fYmFzZUlzVXBUb0RhdGUoZmFsc2UpCiAgICAgICAg
ICwgbV9pc1VwVG9EYXRlKGZhbHNlKQogICAgIHsKICAgICAgICAgbV9pc051bGwgPSAhY2ZSZXNw
b25zZTsKQEAgLTU4LDYgKzYwLDcgQEAgcHVibGljOgogI2Vsc2UKICAgICBSZXNvdXJjZVJlc3Bv
bnNlKE5TVVJMUmVzcG9uc2UqIG5zUmVzcG9uc2UpCiAgICAgICAgIDogbV9uc1Jlc3BvbnNlKG5z
UmVzcG9uc2UpCisgICAgICAgICwgbV9iYXNlSXNVcFRvRGF0ZShmYWxzZSkKICAgICAgICAgLCBt
X2lzVXBUb0RhdGUoZmFsc2UpCiAgICAgewogICAgICAgICBtX2lzTnVsbCA9ICFuc1Jlc3BvbnNl
OwpAQCAtNjYsNiArNjksNyBAQCBwdWJsaWM6CiAKICAgICBSZXNvdXJjZVJlc3BvbnNlKGNvbnN0
IEtVUkwmIHVybCwgY29uc3QgU3RyaW5nJiBtaW1lVHlwZSwgbG9uZyBsb25nIGV4cGVjdGVkTGVu
Z3RoLCBjb25zdCBTdHJpbmcmIHRleHRFbmNvZGluZ05hbWUsIGNvbnN0IFN0cmluZyYgZmlsZW5h
bWUpCiAgICAgICAgIDogUmVzb3VyY2VSZXNwb25zZUJhc2UodXJsLCBtaW1lVHlwZSwgZXhwZWN0
ZWRMZW5ndGgsIHRleHRFbmNvZGluZ05hbWUsIGZpbGVuYW1lKQorICAgICAgICAsIG1fYmFzZUlz
VXBUb0RhdGUodHJ1ZSkKICAgICAgICAgLCBtX2lzVXBUb0RhdGUodHJ1ZSkKICAgICB7CiAgICAg
fQpAQCAtNzMsOCArNzcsOCBAQCBwdWJsaWM6CiAgICAgdW5zaWduZWQgbWVtb3J5VXNhZ2UoKSBj
b25zdAogICAgIHsKICAgICAgICAgLy8gRklYTUU6IEZpbmQgc29tZSBwcm9ncmFtbWF0aWMgbGln
aHdlaWdodCB3YXkgdG8gY2FsY3VsYXRlIFJlc291cmNlUmVzcG9uc2UgYW5kIGFzc29jaWF0ZWQg
Y2xhc3Nlcy4KLSAgICAgICAgLy8gVGhpcyBpcyBhIHJvdWdoIGVzdGltYXRlIG9mIHJlc291cmNl
IG92ZXJoZWFkIGJhc2VkIG9uIHN0YXRzIGNvbGxlY3RlZCBmcm9tIHRoZSBzdHJlc3MgdGVzdC4K
LSAgICAgICAgcmV0dXJuIDMwNzI7CisgICAgICAgIC8vIFRoaXMgaXMgYSByb3VnaCBlc3RpbWF0
ZSBvZiByZXNvdXJjZSBvdmVyaGVhZCBiYXNlZCBvbiBzdGF0cyBjb2xsZWN0ZWQgZnJvbSBtZW1v
cnkgdXNhZ2UgdGVzdHMuCisgICAgICAgIHJldHVybiAzODAwOwogICAgICAgICAvKiAgMTI4MCAq
IDIgKyAgICAgICAgICAgICAgICAvLyBhdmVyYWdlIHNpemUgb2YgUmVzb3VyY2VSZXNwb25zZS4g
RG91YmxlZCB0byBhY2NvdW50IGZvciB0aGUgV2ViQ29yZSBjb3B5IGFuZCB0aGUgQ0YgY29weS4K
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gTW9zdGx5IGR1ZSB0byB0
aGUgc2l6ZSBvZiB0aGUgaGFzaCBtYXBzLCB0aGUgSGVhZGVyIE1hcCBzdHJpbmdzIGFuZCB0aGUg
VVJMLgogICAgICAgICAgICAgMjU2ICogMiAgICAgICAgICAgICAgICAgICAvLyBPdmVyaGVhZCBm
cm9tIFJlc291cmNlUmVxdWVzdCwgZG91YmxlZCB0byBhY2NvdW50IGZvciBXZWJDb3JlIGNvcHkg
YW5kIENGIGNvcHkuCkBAIC05MSw3ICs5NSw3IEBAIHB1YmxpYzoKIHByaXZhdGU6CiAgICAgZnJp
ZW5kIGNsYXNzIFJlc291cmNlUmVzcG9uc2VCYXNlOwogCi0gICAgdm9pZCBwbGF0Zm9ybUxhenlJ
bml0KCk7CisgICAgdm9pZCBwbGF0Zm9ybUxhenlJbml0KGJvb2wgYmFzZUluaXRPbmx5ID0gZmFs
c2UpOwogICAgIFBhc3NPd25QdHI8Q3Jvc3NUaHJlYWRSZXNvdXJjZVJlc3BvbnNlRGF0YT4gZG9Q
bGF0Zm9ybUNvcHlEYXRhKFBhc3NPd25QdHI8Q3Jvc3NUaHJlYWRSZXNvdXJjZVJlc3BvbnNlRGF0
YT4gZGF0YSkgY29uc3QgeyByZXR1cm4gZGF0YTsgfQogICAgIHZvaWQgZG9QbGF0Zm9ybUFkb3B0
KFBhc3NPd25QdHI8Q3Jvc3NUaHJlYWRSZXNvdXJjZVJlc3BvbnNlRGF0YT4pIHsgfQogCkBAIC0x
MDIsNiArMTA2LDcgQEAgcHJpdmF0ZToKICNlbHNlCiAgICAgbXV0YWJsZSBSZXRhaW5QdHI8TlNV
UkxSZXNwb25zZT4gbV9uc1Jlc3BvbnNlOwogI2VuZGlmCisgICAgYm9vbCBtX2Jhc2VJc1VwVG9E
YXRlOwogICAgIGJvb2wgbV9pc1VwVG9EYXRlOwogfTsKIApJbmRleDogU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vbmV0d29yay9jZi9SZXNvdXJjZVJlc3BvbnNlQ0ZOZXQuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY2YvUmVzb3VyY2VSZXNwb25zZUNG
TmV0LmNwcAkocmV2aXNpb24gODI0NzYpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3
b3JrL2NmL1Jlc291cmNlUmVzcG9uc2VDRk5ldC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQyLDYg
KzQyLDExIEBAIHVzaW5nIG5hbWVzcGFjZSBzdGQ7CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAor
c3RhdGljIGNvbnN0IENGU3RyaW5nUmVmIGNvbW1vbkhlYWRlckZpZWxkc1tdID0geworICAgIENG
U1RSKCJBZ2UiLCBDRlNUUigiQ2FjaGUtQ29udHJvbCIsIENGU1RSKCJEYXRlIiwgQ0ZTVFIoIkV0
YWciLCBDRlNUUigiRXhwaXJlcyIsIENGU1RSKCJMYXN0LU1vZGlmaWVkIiwgQ0ZTVFIoIlByYWdt
YSIpCit9Oworc3RhdGljIGNvbnN0IGludCBudW1Db21tb25IZWFkZXJGaWVsZHMgPSBzaXplb2Yo
Y29tbW9uSGVhZGVyRmllbGRzKSAvIHNpemVvZihDRlN0cmluZ1JlZik7CisKIENGVVJMUmVzcG9u
c2VSZWYgUmVzb3VyY2VSZXNwb25zZTo6Y2ZVUkxSZXNwb25zZSgpIGNvbnN0CiB7CiAgICAgaWYg
KCFtX2NmUmVzcG9uc2UgJiYgIW1faXNOdWxsKSB7CkBAIC03MCwzOCArNzUsNTUgQEAgc3RhdGlj
IHRpbWVfdCB0b1RpbWVUKENGQWJzb2x1dGVUaW1lIHRpbQogICAgIHJldHVybiBtaW4obWF4KG1p
blRpbWVBc0RvdWJsZSwgdGltZSArIGtDRkFic29sdXRlVGltZUludGVydmFsU2luY2UxOTcwKSwg
bWF4VGltZUFzRG91YmxlKTsKIH0KIAotdm9pZCBSZXNvdXJjZVJlc3BvbnNlOjpwbGF0Zm9ybUxh
enlJbml0KCkKK3ZvaWQgUmVzb3VyY2VSZXNwb25zZTo6cGxhdGZvcm1MYXp5SW5pdChib29sIGJh
c2VJbml0T25seSkKIHsKICAgICBpZiAobV9pc1VwVG9EYXRlKQogICAgICAgICByZXR1cm47Ci0g
ICAgbV9pc1VwVG9EYXRlID0gdHJ1ZTsKIAogICAgIGlmIChtX2lzTnVsbCkgewogICAgICAgICBB
U1NFUlQoIW1fY2ZSZXNwb25zZS5nZXQoKSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAg
ICAvLyBGSVhNRTogV2UgbWF5IG5lZWQgdG8gZG8gTUlNRSB0eXBlIHNuaWZmaW5nIGhlcmUgKHVu
bGVzcyB0aGF0IGlzIGRvbmUgaW4gQ0ZVUkxSZXNwb25zZUdldE1JTUVUeXBlKS4KKyAgICBpZiAo
IW1fYmFzZUlzVXBUb0RhdGUpIHsKKyAgICAgICAgbV91cmwgPSBDRlVSTFJlc3BvbnNlR2V0VVJM
KG1fY2ZSZXNwb25zZS5nZXQoKSk7CisgICAgICAgIC8vIEZJWE1FOiBXZSBtYXkgbmVlZCB0byBk
byBNSU1FIHR5cGUgc25pZmZpbmcgaGVyZSAodW5sZXNzIHRoYXQgaXMgZG9uZSBpbiBDRlVSTFJl
c3BvbnNlR2V0TUlNRVR5cGUpLgorICAgICAgICBtX21pbWVUeXBlID0gQ0ZVUkxSZXNwb25zZUdl
dE1JTUVUeXBlKG1fY2ZSZXNwb25zZS5nZXQoKSk7CisgICAgICAgIG1fZXhwZWN0ZWRDb250ZW50
TGVuZ3RoID0gQ0ZVUkxSZXNwb25zZUdldEV4cGVjdGVkQ29udGVudExlbmd0aChtX2NmUmVzcG9u
c2UuZ2V0KCkpOworICAgICAgICBtX3RleHRFbmNvZGluZ05hbWUgPSBDRlVSTFJlc3BvbnNlR2V0
VGV4dEVuY29kaW5nTmFtZShtX2NmUmVzcG9uc2UuZ2V0KCkpOworCisgICAgICAgIC8vIFdvcmth
cm91bmQgZm9yIDxyZGFyOi8vcHJvYmxlbS84NzU3MDg4PiwgY2FuIGJlIHJlbW92ZWQgb25jZSB0
aGF0IGlzIGZpeGVkLgorICAgICAgICB1bnNpZ25lZCB0ZXh0RW5jb2RpbmdOYW1lTGVuZ3RoID0g
bV90ZXh0RW5jb2RpbmdOYW1lLmxlbmd0aCgpOworICAgICAgICBpZiAodGV4dEVuY29kaW5nTmFt
ZUxlbmd0aCA+PSAyICYmIG1fdGV4dEVuY29kaW5nTmFtZVswVV0gPT0gJyInICYmIG1fdGV4dEVu
Y29kaW5nTmFtZVt0ZXh0RW5jb2RpbmdOYW1lTGVuZ3RoIC0gMV0gPT0gJyInKQorICAgICAgICAg
ICAgbV90ZXh0RW5jb2RpbmdOYW1lID0gbV90ZXh0RW5jb2RpbmdOYW1lLnN1YnN0cmluZygxLCB0
ZXh0RW5jb2RpbmdOYW1lTGVuZ3RoIC0gMik7CisKKyAgICAgICAgbV9sYXN0TW9kaWZpZWREYXRl
ID0gdG9UaW1lVChDRlVSTFJlc3BvbnNlR2V0TGFzdE1vZGlmaWVkRGF0ZShtX2NmUmVzcG9uc2Uu
Z2V0KCkpKTsKKworICAgICAgICBSZXRhaW5QdHI8Q0ZTdHJpbmdSZWY+IHN1Z2dlc3RlZEZpbGVu
YW1lKEFkb3B0Q0YsIENGVVJMUmVzcG9uc2VDb3B5U3VnZ2VzdGVkRmlsZW5hbWUobV9jZlJlc3Bv
bnNlLmdldCgpKSk7CisgICAgICAgIG1fc3VnZ2VzdGVkRmlsZW5hbWUgPSBzdWdnZXN0ZWRGaWxl
bmFtZS5nZXQoKTsKKworICAgICAgICBDRkhUVFBNZXNzYWdlUmVmIGh0dHBSZXNwb25zZSA9IENG
VVJMUmVzcG9uc2VHZXRIVFRQUmVzcG9uc2UobV9jZlJlc3BvbnNlLmdldCgpKTsKKyAgICAgICAg
aWYgKGh0dHBSZXNwb25zZSkgeworICAgICAgICAgICAgbV9odHRwU3RhdHVzQ29kZSA9IENGSFRU
UE1lc3NhZ2VHZXRSZXNwb25zZVN0YXR1c0NvZGUoaHR0cFJlc3BvbnNlKTsKKyAgICAgICAgfSBl
bHNlCisgICAgICAgICAgICBtX2h0dHBTdGF0dXNDb2RlID0gMDsKKworICAgICAgICBSZXRhaW5Q
dHI8Q0ZEaWN0aW9uYXJ5UmVmPiBoZWFkZXJzKEFkb3B0Q0YsIENGSFRUUE1lc3NhZ2VDb3B5QWxs
SGVhZGVyRmllbGRzKGh0dHBSZXNwb25zZSkpOwogCi0gICAgbV91cmwgPSBDRlVSTFJlc3BvbnNl
R2V0VVJMKG1fY2ZSZXNwb25zZS5nZXQoKSk7Ci0gICAgbV9taW1lVHlwZSA9IENGVVJMUmVzcG9u
c2VHZXRNSU1FVHlwZShtX2NmUmVzcG9uc2UuZ2V0KCkpOwotICAgIG1fZXhwZWN0ZWRDb250ZW50
TGVuZ3RoID0gQ0ZVUkxSZXNwb25zZUdldEV4cGVjdGVkQ29udGVudExlbmd0aChtX2NmUmVzcG9u
c2UuZ2V0KCkpOwotICAgIG1fdGV4dEVuY29kaW5nTmFtZSA9IENGVVJMUmVzcG9uc2VHZXRUZXh0
RW5jb2RpbmdOYW1lKG1fY2ZSZXNwb25zZS5nZXQoKSk7Ci0KLSAgICAvLyBXb3JrYXJvdW5kIGZv
ciA8cmRhcjovL3Byb2JsZW0vODc1NzA4OD4sIGNhbiBiZSByZW1vdmVkIG9uY2UgdGhhdCBpcyBm
aXhlZC4KLSAgICB1bnNpZ25lZCB0ZXh0RW5jb2RpbmdOYW1lTGVuZ3RoID0gbV90ZXh0RW5jb2Rp
bmdOYW1lLmxlbmd0aCgpOwotICAgIGlmICh0ZXh0RW5jb2RpbmdOYW1lTGVuZ3RoID49IDIgJiYg
bV90ZXh0RW5jb2RpbmdOYW1lWzBVXSA9PSAnIicgJiYgbV90ZXh0RW5jb2RpbmdOYW1lW3RleHRF
bmNvZGluZ05hbWVMZW5ndGggLSAxXSA9PSAnIicpCi0gICAgICAgIG1fdGV4dEVuY29kaW5nTmFt
ZSA9IG1fdGV4dEVuY29kaW5nTmFtZS5zdWJzdHJpbmcoMSwgdGV4dEVuY29kaW5nTmFtZUxlbmd0
aCAtIDIpOworICAgICAgICBmb3IgKGludCBpZHggPSAwOyBpZHggPCBudW1Db21tb25IZWFkZXJG
aWVsZHM7IGlkeCsrKSB7CisgICAgICAgICAgICBDRlN0cmluZ1JlZiB2YWx1ZTsKKyAgICAgICAg
ICAgIGlmIChDRkRpY3Rpb25hcnlHZXRWYWx1ZUlmUHJlc2VudChoZWFkZXJzLmdldCgpLCBjb21t
b25IZWFkZXJGaWVsZHNbaV0sICZ2YWx1ZSkpCisgICAgICAgICAgICAgICAgbV9odHRwSGVhZGVy
RmllbGRzLnNldChjb21tb25IZWFkZXJGaWVsZHNbaV0sIHZhbHVlKTsKKyAgICAgICAgfQogCi0g
ICAgbV9sYXN0TW9kaWZpZWREYXRlID0gdG9UaW1lVChDRlVSTFJlc3BvbnNlR2V0TGFzdE1vZGlm
aWVkRGF0ZShtX2NmUmVzcG9uc2UuZ2V0KCkpKTsKKyAgICAgICAgbV9iYXNlSXNVcFRvRGF0ZSA9
IHRydWU7CisgICAgfQogCi0gICAgUmV0YWluUHRyPENGU3RyaW5nUmVmPiBzdWdnZXN0ZWRGaWxl
bmFtZShBZG9wdENGLCBDRlVSTFJlc3BvbnNlQ29weVN1Z2dlc3RlZEZpbGVuYW1lKG1fY2ZSZXNw
b25zZS5nZXQoKSkpOwotICAgIG1fc3VnZ2VzdGVkRmlsZW5hbWUgPSBzdWdnZXN0ZWRGaWxlbmFt
ZS5nZXQoKTsKKyAgICBpZiAoYmFzZUluaXRPbmx5KQorICAgICAgICByZXR1cm47CiAKICAgICBD
RkhUVFBNZXNzYWdlUmVmIGh0dHBSZXNwb25zZSA9IENGVVJMUmVzcG9uc2VHZXRIVFRQUmVzcG9u
c2UobV9jZlJlc3BvbnNlLmdldCgpKTsKICAgICBpZiAoaHR0cFJlc3BvbnNlKSB7Ci0gICAgICAg
IG1faHR0cFN0YXR1c0NvZGUgPSBDRkhUVFBNZXNzYWdlR2V0UmVzcG9uc2VTdGF0dXNDb2RlKGh0
dHBSZXNwb25zZSk7Ci0KICAgICAgICAgUmV0YWluUHRyPENGU3RyaW5nUmVmPiBzdGF0dXNMaW5l
KEFkb3B0Q0YsIENGSFRUUE1lc3NhZ2VDb3B5UmVzcG9uc2VTdGF0dXNMaW5lKGh0dHBSZXNwb25z
ZSkpOwogICAgICAgICBtX2h0dHBTdGF0dXNUZXh0ID0gZXh0cmFjdFJlYXNvblBocmFzZUZyb21I
VFRQU3RhdHVzTGluZShzdGF0dXNMaW5lLmdldCgpKTsKIApAQCAtMTEyLDEwICsxMzQsMTEgQEAg
dm9pZCBSZXNvdXJjZVJlc3BvbnNlOjpwbGF0Zm9ybUxhenlJbml0KAogICAgICAgICBDRkRpY3Rp
b25hcnlHZXRLZXlzQW5kVmFsdWVzKGhlYWRlcnMuZ2V0KCksIGtleXMuZGF0YSgpLCB2YWx1ZXMu
ZGF0YSgpKTsKICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBoZWFkZXJDb3VudDsgKytpKQog
ICAgICAgICAgICAgbV9odHRwSGVhZGVyRmllbGRzLnNldCgoQ0ZTdHJpbmdSZWYpa2V5c1tpXSwg
KENGU3RyaW5nUmVmKXZhbHVlc1tpXSk7Ci0gICAgfSBlbHNlCi0gICAgICAgIG1faHR0cFN0YXR1
c0NvZGUgPSAwOwotfQorICAgIH0KIAorICAgIG1faXNVcFRvRGF0ZSA9IHRydWU7Cit9CisgICAg
CiBib29sIFJlc291cmNlUmVzcG9uc2U6OnBsYXRmb3JtQ29tcGFyZShjb25zdCBSZXNvdXJjZVJl
c3BvbnNlJiBhLCBjb25zdCBSZXNvdXJjZVJlc3BvbnNlJiBiKQogewogICAgIHJldHVybiBDRkVx
dWFsKGEuY2ZVUkxSZXNwb25zZSgpLCBiLmNmVVJMUmVzcG9uc2UoKSk7CkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL21hYy9SZXNvdXJjZVJlc3BvbnNlTWFjLm1tCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvbWFjL1Jlc291cmNlUmVz
cG9uc2VNYWMubW0JKHJldmlzaW9uIDgyNDc2KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
bmV0d29yay9tYWMvUmVzb3VyY2VSZXNwb25zZU1hYy5tbQkod29ya2luZyBjb3B5KQpAQCAtMzQs
NiArMzQsNyBAQAogI2ltcG9ydCA8Rm91bmRhdGlvbi9Gb3VuZGF0aW9uLmg+CiAjaW1wb3J0IDx3
dGYvU3RkTGliRXh0cmFzLmg+CiAjaW1wb3J0IDxsaW1pdHM+CisjaW5jbHVkZSA8d3RmL3RleHQv
Q1N0cmluZy5oPgogCiBAaW50ZXJmYWNlIE5TVVJMUmVzcG9uc2UgKEZvdW5kYXRpb25TZWNyZXRz
V2ViQ29yZUtub3dzQWJvdXQpCiAtIChOU1RpbWVJbnRlcnZhbClfY2FsY3VsYXRlZEV4cGlyYXRp
b247CkBAIC00NSw2ICs0NiwxMSBAQCB0eXBlZGVmIGludCBOU0ludGVnZXI7CiAKIG5hbWVzcGFj
ZSBXZWJDb3JlIHsKIAorc3RhdGljIGNvbnN0IE5TU3RyaW5nKiBjb21tb25IZWFkZXJGaWVsZHNb
XSA9IHsKKyAgICBAIkFnZSIsIEAiQ2FjaGUtQ29udHJvbCIsIEAiRGF0ZSIsIEAiRXRhZyIsIEAi
RXhwaXJlcyIsIEAiTGFzdC1Nb2RpZmllZCIsIEAiUHJhZ21hIgorfTsKK3N0YXRpYyBjb25zdCBp
bnQgbnVtQ29tbW9uSGVhZGVyRmllbGRzID0gc2l6ZW9mKGNvbW1vbkhlYWRlckZpZWxkcykgLyBz
aXplb2YoQXRvbWljU3RyaW5nKik7CisKIE5TVVJMUmVzcG9uc2UgKlJlc291cmNlUmVzcG9uc2U6
Om5zVVJMUmVzcG9uc2UoKSBjb25zdAogewogICAgIGlmICghbV9uc1Jlc3BvbnNlICYmICFtX2lz
TnVsbCkgewpAQCAtNjEsNDggKzY3LDc0IEBAIE5TVVJMUmVzcG9uc2UgKlJlc291cmNlUmVzcG9u
c2U6Om5zVVJMUmUKICAgICByZXR1cm4gbV9uc1Jlc3BvbnNlLmdldCgpOwogfQogCi12b2lkIFJl
c291cmNlUmVzcG9uc2U6OnBsYXRmb3JtTGF6eUluaXQoKQordm9pZCBSZXNvdXJjZVJlc3BvbnNl
OjpwbGF0Zm9ybUxhenlJbml0KGJvb2wgYmFzZUluaXRPbmx5KQogewogICAgIGlmIChtX2lzVXBU
b0RhdGUpCiAgICAgICAgIHJldHVybjsKLSAgICBtX2lzVXBUb0RhdGUgPSB0cnVlOwogCiAgICAg
aWYgKG1faXNOdWxsKSB7CiAgICAgICAgIEFTU0VSVCghbV9uc1Jlc3BvbnNlKTsKICAgICAgICAg
cmV0dXJuOwogICAgIH0KLSAgICAKLSAgICBtX3VybCA9IFttX25zUmVzcG9uc2UuZ2V0KCkgVVJM
XTsKLSAgICBtX21pbWVUeXBlID0gW21fbnNSZXNwb25zZS5nZXQoKSBNSU1FVHlwZV07Ci0gICAg
bV9leHBlY3RlZENvbnRlbnRMZW5ndGggPSBbbV9uc1Jlc3BvbnNlLmdldCgpIGV4cGVjdGVkQ29u
dGVudExlbmd0aF07Ci0gICAgbV90ZXh0RW5jb2RpbmdOYW1lID0gW21fbnNSZXNwb25zZS5nZXQo
KSB0ZXh0RW5jb2RpbmdOYW1lXTsKLQotICAgIC8vIFdvcmthcm91bmQgZm9yIDxyZGFyOi8vcHJv
YmxlbS84NzU3MDg4PiwgY2FuIGJlIHJlbW92ZWQgb25jZSB0aGF0IGlzIGZpeGVkLgotICAgIHVu
c2lnbmVkIHRleHRFbmNvZGluZ05hbWVMZW5ndGggPSBtX3RleHRFbmNvZGluZ05hbWUubGVuZ3Ro
KCk7Ci0gICAgaWYgKHRleHRFbmNvZGluZ05hbWVMZW5ndGggPj0gMiAmJiBtX3RleHRFbmNvZGlu
Z05hbWVbMFVdID09ICciJyAmJiBtX3RleHRFbmNvZGluZ05hbWVbdGV4dEVuY29kaW5nTmFtZUxl
bmd0aCAtIDFdID09ICciJykKLSAgICAgICAgbV90ZXh0RW5jb2RpbmdOYW1lID0gbV90ZXh0RW5j
b2RpbmdOYW1lLnN1YnN0cmluZygxLCB0ZXh0RW5jb2RpbmdOYW1lTGVuZ3RoIC0gMik7CiAKLSAg
ICBtX3N1Z2dlc3RlZEZpbGVuYW1lID0gW21fbnNSZXNwb25zZS5nZXQoKSBzdWdnZXN0ZWRGaWxl
bmFtZV07Ci0gICAgCi0gICAgaWYgKFttX25zUmVzcG9uc2UuZ2V0KCkgaXNLaW5kT2ZDbGFzczpb
TlNIVFRQVVJMUmVzcG9uc2UgY2xhc3NdXSkgewotICAgICAgICBOU0hUVFBVUkxSZXNwb25zZSAq
aHR0cFJlc3BvbnNlID0gKE5TSFRUUFVSTFJlc3BvbnNlICopbV9uc1Jlc3BvbnNlLmdldCgpOwor
ICAgIGlmICghbV9iYXNlSXNVcFRvRGF0ZSkgeworICAgICAgICBOU0F1dG9yZWxlYXNlUG9vbCog
cG9vbCA9IFtbTlNBdXRvcmVsZWFzZVBvb2wgYWxsb2NdIGluaXRdOworCisgICAgICAgIG1faHR0
cEhlYWRlckZpZWxkcy5jbGVhcigpOworICAgICAgICBtX3VybCA9IFttX25zUmVzcG9uc2UuZ2V0
KCkgVVJMXTsKKyAgICAgICAgbV9taW1lVHlwZSA9IFttX25zUmVzcG9uc2UuZ2V0KCkgTUlNRVR5
cGVdOworICAgICAgICBtX2V4cGVjdGVkQ29udGVudExlbmd0aCA9IFttX25zUmVzcG9uc2UuZ2V0
KCkgZXhwZWN0ZWRDb250ZW50TGVuZ3RoXTsKKyAgICAgICAgbV90ZXh0RW5jb2RpbmdOYW1lID0g
W21fbnNSZXNwb25zZS5nZXQoKSB0ZXh0RW5jb2RpbmdOYW1lXTsKKworICAgICAgICAvLyBXb3Jr
YXJvdW5kIGZvciA8cmRhcjovL3Byb2JsZW0vODc1NzA4OD4sIGNhbiBiZSByZW1vdmVkIG9uY2Ug
dGhhdCBpcyBmaXhlZC4KKyAgICAgICAgdW5zaWduZWQgdGV4dEVuY29kaW5nTmFtZUxlbmd0aCA9
IG1fdGV4dEVuY29kaW5nTmFtZS5sZW5ndGgoKTsKKyAgICAgICAgaWYgKHRleHRFbmNvZGluZ05h
bWVMZW5ndGggPj0gMiAmJiBtX3RleHRFbmNvZGluZ05hbWVbMFVdID09ICciJyAmJiBtX3RleHRF
bmNvZGluZ05hbWVbdGV4dEVuY29kaW5nTmFtZUxlbmd0aCAtIDFdID09ICciJykKKyAgICAgICAg
ICAgIG1fdGV4dEVuY29kaW5nTmFtZSA9IG1fdGV4dEVuY29kaW5nTmFtZS5zdWJzdHJpbmcoMSwg
dGV4dEVuY29kaW5nTmFtZUxlbmd0aCAtIDIpOworCisgICAgICAgIG1fc3VnZ2VzdGVkRmlsZW5h
bWUgPSBbbV9uc1Jlc3BvbnNlLmdldCgpIHN1Z2dlc3RlZEZpbGVuYW1lXTsKKworICAgICAgICBp
ZiAoW21fbnNSZXNwb25zZS5nZXQoKSBpc0tpbmRPZkNsYXNzOltOU0hUVFBVUkxSZXNwb25zZSBj
bGFzc11dKSB7CisgICAgICAgICAgICBOU0hUVFBVUkxSZXNwb25zZSAqaHR0cFJlc3BvbnNlID0g
KE5TSFRUUFVSTFJlc3BvbnNlICopbV9uc1Jlc3BvbnNlLmdldCgpOworCisgICAgICAgICAgICBt
X2h0dHBTdGF0dXNDb2RlID0gW2h0dHBSZXNwb25zZSBzdGF0dXNDb2RlXTsKKworICAgICAgICAg
ICAgTlNEaWN0aW9uYXJ5ICpoZWFkZXJzID0gW2h0dHBSZXNwb25zZSBhbGxIZWFkZXJGaWVsZHNd
OworICAgICAgICAgICAgCisgICAgICAgICAgICBmb3IgKGludCBpZHggPSAwOyBpZHggPCBudW1D
b21tb25IZWFkZXJGaWVsZHM7IGlkeCsrKSB7CisgICAgICAgICAgICAgICAgaWYgKE5TU3RyaW5n
KiBoZWFkZXJWYWx1ZSA9IFtoZWFkZXJzIG9iamVjdEZvcktleTpjb21tb25IZWFkZXJGaWVsZHNb
aWR4XV0pCisgICAgICAgICAgICAgICAgICAgIG1faHR0cEhlYWRlckZpZWxkcy5zZXQoW2NvbW1v
bkhlYWRlckZpZWxkc1tpZHhdIFVURjhTdHJpbmddLCBoZWFkZXJWYWx1ZSk7CisgICAgICAgICAg
ICB9CisgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgbV9odHRwU3RhdHVzQ29kZSA9IDA7CisK
KyAgICAgICAgbV9iYXNlSXNVcFRvRGF0ZSA9IHRydWU7CiAgICAgICAgIAotICAgICAgICBtX2h0
dHBTdGF0dXNDb2RlID0gW2h0dHBSZXNwb25zZSBzdGF0dXNDb2RlXTsKKyAgICAgICAgW3Bvb2wg
ZHJhaW5dOworICAgIH0KKworICAgIGlmICgoIWJhc2VJbml0T25seSkgJiYgKFttX25zUmVzcG9u
c2UuZ2V0KCkgaXNLaW5kT2ZDbGFzczpbTlNIVFRQVVJMUmVzcG9uc2UgY2xhc3NdXSkpIHsKKyAg
ICAgICAgTlNBdXRvcmVsZWFzZVBvb2wqIHBvb2wgPSBbW05TQXV0b3JlbGVhc2VQb29sIGFsbG9j
XSBpbml0XTsKKworICAgICAgICBOU0hUVFBVUkxSZXNwb25zZSAqaHR0cFJlc3BvbnNlID0gKE5T
SFRUUFVSTFJlc3BvbnNlICopbV9uc1Jlc3BvbnNlLmdldCgpOwogCiAgICAgICAgIFJldGFpblB0
cjxOU1N0cmluZz4gaHR0cFN0YXR1c0xpbmUoQWRvcHROUywgd2tDb3B5TlNVUkxSZXNwb25zZVN0
YXR1c0xpbmUobV9uc1Jlc3BvbnNlLmdldCgpKSk7CiAgICAgICAgIGlmIChodHRwU3RhdHVzTGlu
ZSkKICAgICAgICAgICAgIG1faHR0cFN0YXR1c1RleHQgPSBleHRyYWN0UmVhc29uUGhyYXNlRnJv
bUhUVFBTdGF0dXNMaW5lKGh0dHBTdGF0dXNMaW5lLmdldCgpKTsKICAgICAgICAgZWxzZQogICAg
ICAgICAgICAgbV9odHRwU3RhdHVzVGV4dCA9ICJPSyI7Ci0gICAgICAgIAorCiAgICAgICAgIE5T
RGljdGlvbmFyeSAqaGVhZGVycyA9IFtodHRwUmVzcG9uc2UgYWxsSGVhZGVyRmllbGRzXTsKICAg
ICAgICAgTlNFbnVtZXJhdG9yICplID0gW2hlYWRlcnMga2V5RW51bWVyYXRvcl07CiAgICAgICAg
IHdoaWxlIChOU1N0cmluZyAqbmFtZSA9IFtlIG5leHRPYmplY3RdKQogICAgICAgICAgICAgbV9o
dHRwSGVhZGVyRmllbGRzLnNldChuYW1lLCBbaGVhZGVycyBvYmplY3RGb3JLZXk6bmFtZV0pOwot
ICAgIH0gZWxzZQotICAgICAgICBtX2h0dHBTdGF0dXNDb2RlID0gMDsKKyAgICAgICAgCisgICAg
ICAgIG1faXNVcFRvRGF0ZSA9IHRydWU7CisKKyAgICAgICAgW3Bvb2wgZHJhaW5dOworICAgIH0K
IH0KIAorICAgIAogYm9vbCBSZXNvdXJjZVJlc3BvbnNlOjpwbGF0Zm9ybUNvbXBhcmUoY29uc3Qg
UmVzb3VyY2VSZXNwb25zZSYgYSwgY29uc3QgUmVzb3VyY2VSZXNwb25zZSYgYikKIHsKICAgICBy
ZXR1cm4gYS5uc1VSTFJlc3BvbnNlKCkgPT0gYi5uc1VSTFJlc3BvbnNlKCk7Cg==
</data>
<flag name="review"
          id="80070"
          type_id="1"
          status="-"
          setter="mjs"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>87725</attachid>
            <date>2011-03-31 07:35:39 -0700</date>
            <delta_ts>2011-03-31 14:54:58 -0700</delta_ts>
            <desc>Patch with update in response to reviewer&apos;s comments</desc>
            <filename>57488-2.patch</filename>
            <type>text/plain</type>
            <size>28750</size>
            <attacher name="Michael Saboff">msaboff</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDgyNTI0KQorKysgU291cmNlL1dlYkNvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsNTUgQEAKKzIwMTEtMDMtMzAgIE1pY2hhZWwg
U2Fib2ZmICA8bXNhYm9mZkBhcHBsZS5jb20+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZ
IChPT1BTISkuCisKKyAgICAgICAgQ2FjaGVkIFJlc291cmNlIE92ZXJoZWFkIFNwYWNlIFVzYWdl
IGFuZCBBY2NvdW50aW5nIEluYWNjdXJhdGUKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTU3NDg4CisKKyAgICAgICAgQ2hhbmdlZCB0aGUgZml4ZWQgb3Zl
cmhlYWQgdmFsdWUgZm9yIFJlc291cmNlUmVzcG9uc2UgdG8gMzgwMCBieXRlcy4KKyAgICAgICAg
TW9kaWZpZWQgUmVzb3VyY2VSZXNwb25zZTo6cGxhdGZvcm1MYXp5SW5pdCgpIHRvIGhhbmRsZSAi
YmFzZSIgbGV2ZWwKKyAgICAgICAgYXR0cmlidXRlcyBvciBhbGwgYXR0cmlidXRlcy4gIFRoZSBi
YXNlIGF0dHJpYnV0ZXMsIGxpa2UgVVJMLCBzdGF0dXMKKyAgICAgICAgY29kZSwgbWltZSB0eXBl
IGFuZCBhIGZldyBoZWFkZXIgZmllbGRzIChtb3N0bHkgY2FjaGUgcmVsYXRlZCkgYXJlCisgICAg
ICAgIHN1aXRhYmxlIGZvciBtb3N0IHJlc291cmNlcy4gIFRoaXMgcmVkdWNlcyB0aGUgcGVyIHJl
c291cmNlIG1lbW9yeQorICAgICAgICBuZWVkcyBieSBvdmVyIDFLIGJ5dGVzIHBlciByZXNvdXJj
ZSB0aHVzIHNhdmluZyBtZW1vcnkgaW4gdGhlIGNhY2hlLgorICAgICAgICBDb2xsZWN0aXZlbHks
IHRoZXNlIHR3byBjaGFuZ2VzIGJyaW5nIHRoZSBvdmVyaGVhZCBtZW1vcnkgY2FsY3VsYXRpb24K
KyAgICAgICAgaW4gbGluZSB3aXRoIHJlYWxpdHkuCisKKyAgICAgICAgTm8gbmV3IHRlc3RzLiAo
T09QUyEpCisKKyAgICAgICAgKiBsb2FkZXIvY2FjaGUvQ2FjaGVkUmVzb3VyY2UuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6Q2FjaGVkUmVzb3VyY2U6OmNhblVzZUNhY2hlVmFsaWRhdG9yKToKKyAg
ICAgICAgKiBwbGF0Zm9ybS9uZXR3b3JrL1Jlc291cmNlUmVzcG9uc2VCYXNlLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OlJlc291cmNlUmVzcG9uc2VCYXNlOjppc0hUVFApOgorICAgICAgICAoV2Vi
Q29yZTo6UmVzb3VyY2VSZXNwb25zZUJhc2U6OnVybCk6CisgICAgICAgIChXZWJDb3JlOjpSZXNv
dXJjZVJlc3BvbnNlQmFzZTo6c2V0VVJMKToKKyAgICAgICAgKFdlYkNvcmU6OlJlc291cmNlUmVz
cG9uc2VCYXNlOjptaW1lVHlwZSk6CisgICAgICAgIChXZWJDb3JlOjpSZXNvdXJjZVJlc3BvbnNl
QmFzZTo6c2V0TWltZVR5cGUpOgorICAgICAgICAoV2ViQ29yZTo6UmVzb3VyY2VSZXNwb25zZUJh
c2U6OmV4cGVjdGVkQ29udGVudExlbmd0aCk6CisgICAgICAgIChXZWJDb3JlOjpSZXNvdXJjZVJl
c3BvbnNlQmFzZTo6c2V0RXhwZWN0ZWRDb250ZW50TGVuZ3RoKToKKyAgICAgICAgKFdlYkNvcmU6
OlJlc291cmNlUmVzcG9uc2VCYXNlOjp0ZXh0RW5jb2RpbmdOYW1lKToKKyAgICAgICAgKFdlYkNv
cmU6OlJlc291cmNlUmVzcG9uc2VCYXNlOjpzZXRUZXh0RW5jb2RpbmdOYW1lKToKKyAgICAgICAg
KFdlYkNvcmU6OlJlc291cmNlUmVzcG9uc2VCYXNlOjpzdWdnZXN0ZWRGaWxlbmFtZSk6CisgICAg
ICAgIChXZWJDb3JlOjpSZXNvdXJjZVJlc3BvbnNlQmFzZTo6c2V0U3VnZ2VzdGVkRmlsZW5hbWUp
OgorICAgICAgICAoV2ViQ29yZTo6UmVzb3VyY2VSZXNwb25zZUJhc2U6Omh0dHBTdGF0dXNDb2Rl
KToKKyAgICAgICAgKFdlYkNvcmU6OlJlc291cmNlUmVzcG9uc2VCYXNlOjpzZXRIVFRQU3RhdHVz
Q29kZSk6CisgICAgICAgIChXZWJDb3JlOjpSZXNvdXJjZVJlc3BvbnNlQmFzZTo6aHR0cEhlYWRl
ckZpZWxkKToKKyAgICAgICAgKFdlYkNvcmU6OlJlc291cmNlUmVzcG9uc2VCYXNlOjpzZXRIVFRQ
SGVhZGVyRmllbGQpOgorICAgICAgICAoV2ViQ29yZTo6UmVzb3VyY2VSZXNwb25zZUJhc2U6OnBh
cnNlQ2FjaGVDb250cm9sRGlyZWN0aXZlcyk6CisgICAgICAgIChXZWJDb3JlOjpSZXNvdXJjZVJl
c3BvbnNlQmFzZTo6aGFzQ2FjaGVWYWxpZGF0b3JGaWVsZHMpOgorICAgICAgICAoV2ViQ29yZTo6
UmVzb3VyY2VSZXNwb25zZUJhc2U6OmRhdGUpOgorICAgICAgICAoV2ViQ29yZTo6UmVzb3VyY2VS
ZXNwb25zZUJhc2U6OmFnZSk6CisgICAgICAgIChXZWJDb3JlOjpSZXNvdXJjZVJlc3BvbnNlQmFz
ZTo6ZXhwaXJlcyk6CisgICAgICAgIChXZWJDb3JlOjpSZXNvdXJjZVJlc3BvbnNlQmFzZTo6bGFz
dE1vZGlmaWVkKToKKyAgICAgICAgKFdlYkNvcmU6OlJlc291cmNlUmVzcG9uc2VCYXNlOjpsYXp5
SW5pdCk6CisgICAgICAgICogcGxhdGZvcm0vbmV0d29yay9SZXNvdXJjZVJlc3BvbnNlQmFzZS5o
OgorICAgICAgICAoV2ViQ29yZTo6UmVzb3VyY2VSZXNwb25zZUJhc2U6OnBsYXRmb3JtTGF6eUlu
aXQpOgorICAgICAgICAqIHBsYXRmb3JtL25ldHdvcmsvY2YvUmVzb3VyY2VSZXNwb25zZS5oOgor
ICAgICAgICAoV2ViQ29yZTo6UmVzb3VyY2VSZXNwb25zZTo6UmVzb3VyY2VSZXNwb25zZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpSZXNvdXJjZVJlc3BvbnNlOjptZW1vcnlVc2FnZSk6CisgICAgICAg
ICogcGxhdGZvcm0vbmV0d29yay9jZi9SZXNvdXJjZVJlc3BvbnNlQ0ZOZXQuY3BwOgorICAgICAg
ICAqIHBsYXRmb3JtL25ldHdvcmsvbWFjL1Jlc291cmNlUmVzcG9uc2VNYWMubW06CisgICAgICAg
IChXZWJDb3JlOjpSZXNvdXJjZVJlc3BvbnNlOjpwbGF0Zm9ybUxhenlJbml0KToKKwogMjAxMS0w
My0zMCAgTU9SSVRBIEhhamltZSAgPG1vcnJpdGFAZ29vZ2xlLmNvbT4KIAogICAgICAgICBSZXZp
ZXdlZCBieSBTaW1vbiBGcmFzZXIuCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvY2FjaGUv
Q2FjaGVkUmVzb3VyY2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2xvYWRlci9j
YWNoZS9DYWNoZWRSZXNvdXJjZS5jcHAJKHJldmlzaW9uIDgyNDc2KQorKysgU291cmNlL1dlYkNv
cmUvbG9hZGVyL2NhY2hlL0NhY2hlZFJlc291cmNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTA0
LDEwICs1MDQsNyBAQCBib29sIENhY2hlZFJlc291cmNlOjpjYW5Vc2VDYWNoZVZhbGlkYXRvCiAK
ICAgICBpZiAobV9yZXNwb25zZS5jYWNoZUNvbnRyb2xDb250YWluc05vU3RvcmUoKSkKICAgICAg
ICAgcmV0dXJuIGZhbHNlOwotCi0gICAgREVGSU5FX1NUQVRJQ19MT0NBTChjb25zdCBBdG9taWNT
dHJpbmcsIGxhc3RNb2RpZmllZEhlYWRlciwgKCJsYXN0LW1vZGlmaWVkIikpOwotICAgIERFRklO
RV9TVEFUSUNfTE9DQUwoY29uc3QgQXRvbWljU3RyaW5nLCBlVGFnSGVhZGVyLCAoImV0YWciKSk7
Ci0gICAgcmV0dXJuICFtX3Jlc3BvbnNlLmh0dHBIZWFkZXJGaWVsZChsYXN0TW9kaWZpZWRIZWFk
ZXIpLmlzRW1wdHkoKSB8fCAhbV9yZXNwb25zZS5odHRwSGVhZGVyRmllbGQoZVRhZ0hlYWRlciku
aXNFbXB0eSgpOworICAgIHJldHVybiBtX3Jlc3BvbnNlLmhhc0NhY2hlVmFsaWRhdG9yRmllbGRz
KCk7CiB9CiAKIGJvb2wgQ2FjaGVkUmVzb3VyY2U6Om11c3RSZXZhbGlkYXRlRHVlVG9DYWNoZUhl
YWRlcnMoQ2FjaGVQb2xpY3kgY2FjaGVQb2xpY3kpIGNvbnN0CkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9uZXR3b3JrL1Jlc291cmNlUmVzcG9uc2VCYXNlLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL1Jlc291cmNlUmVzcG9uc2VCYXNlLmNw
cAkocmV2aXNpb24gODI0NzYpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL1Jl
c291cmNlUmVzcG9uc2VCYXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTA4LDcgKzEwOCw3IEBA
IFBhc3NPd25QdHI8UmVzb3VyY2VSZXNwb25zZT4gUmVzb3VyY2VSZXMKICAgICByZXNwb25zZS0+
c2V0SFRUUFN0YXR1c0NvZGUoZGF0YS0+bV9odHRwU3RhdHVzQ29kZSk7CiAgICAgcmVzcG9uc2Ut
PnNldEhUVFBTdGF0dXNUZXh0KGRhdGEtPm1faHR0cFN0YXR1c1RleHQpOwogCi0gICAgcmVzcG9u
c2UtPmxhenlJbml0KCk7CisgICAgcmVzcG9uc2UtPmxhenlJbml0KEFsbEZpZWxkcyk7CiAgICAg
cmVzcG9uc2UtPm1faHR0cEhlYWRlckZpZWxkcy5hZG9wdChkYXRhLT5tX2h0dHBIZWFkZXJzLnJl
bGVhc2UoKSk7CiAgICAgcmVzcG9uc2UtPnNldExhc3RNb2RpZmllZERhdGUoZGF0YS0+bV9sYXN0
TW9kaWZpZWREYXRlKTsKICAgICByZXNwb25zZS0+c2V0UmVzb3VyY2VMb2FkVGltaW5nKGRhdGEt
Pm1fcmVzb3VyY2VMb2FkVGltaW5nLnJlbGVhc2UoKSk7CkBAIC0xMzUsNyArMTM1LDcgQEAgUGFz
c093blB0cjxDcm9zc1RocmVhZFJlc291cmNlUmVzcG9uc2VEYQogCiBib29sIFJlc291cmNlUmVz
cG9uc2VCYXNlOjppc0hUVFAoKSBjb25zdAogewotICAgIGxhenlJbml0KCk7CisgICAgbGF6eUlu
aXQoQ29tbW9uRmllbGRzT25seSk7CiAKICAgICBTdHJpbmcgcHJvdG9jb2wgPSBtX3VybC5wcm90
b2NvbCgpOwogCkBAIC0xNDQsMTI2ICsxNDQsMTM5IEBAIGJvb2wgUmVzb3VyY2VSZXNwb25zZUJh
c2U6OmlzSFRUUCgpIGNvbnMKIAogY29uc3QgS1VSTCYgUmVzb3VyY2VSZXNwb25zZUJhc2U6OnVy
bCgpIGNvbnN0CiB7Ci0gICAgbGF6eUluaXQoKTsKLSAgICAKKyAgICBsYXp5SW5pdChDb21tb25G
aWVsZHNPbmx5KTsKKwogICAgIHJldHVybiBtX3VybDsgCiB9CiAKIHZvaWQgUmVzb3VyY2VSZXNw
b25zZUJhc2U6OnNldFVSTChjb25zdCBLVVJMJiB1cmwpCiB7Ci0gICAgbGF6eUluaXQoKTsKKyAg
ICBsYXp5SW5pdChDb21tb25GaWVsZHNPbmx5KTsKICAgICBtX2lzTnVsbCA9IGZhbHNlOwotICAg
IAorCiAgICAgbV91cmwgPSB1cmw7IAogfQogCiBjb25zdCBTdHJpbmcmIFJlc291cmNlUmVzcG9u
c2VCYXNlOjptaW1lVHlwZSgpIGNvbnN0CiB7Ci0gICAgbGF6eUluaXQoKTsKKyAgICBsYXp5SW5p
dChDb21tb25GaWVsZHNPbmx5KTsKIAogICAgIHJldHVybiBtX21pbWVUeXBlOyAKIH0KIAogdm9p
ZCBSZXNvdXJjZVJlc3BvbnNlQmFzZTo6c2V0TWltZVR5cGUoY29uc3QgU3RyaW5nJiBtaW1lVHlw
ZSkKIHsKLSAgICBsYXp5SW5pdCgpOworICAgIGxhenlJbml0KENvbW1vbkZpZWxkc09ubHkpOwog
ICAgIG1faXNOdWxsID0gZmFsc2U7Ci0gICAgCisKICAgICBtX21pbWVUeXBlID0gbWltZVR5cGU7
IAogfQogCiBsb25nIGxvbmcgUmVzb3VyY2VSZXNwb25zZUJhc2U6OmV4cGVjdGVkQ29udGVudExl
bmd0aCgpIGNvbnN0IAogewotICAgIGxhenlJbml0KCk7CisgICAgbGF6eUluaXQoQ29tbW9uRmll
bGRzT25seSk7CiAKICAgICByZXR1cm4gbV9leHBlY3RlZENvbnRlbnRMZW5ndGg7CiB9CiAKIHZv
aWQgUmVzb3VyY2VSZXNwb25zZUJhc2U6OnNldEV4cGVjdGVkQ29udGVudExlbmd0aChsb25nIGxv
bmcgZXhwZWN0ZWRDb250ZW50TGVuZ3RoKQogewotICAgIGxhenlJbml0KCk7CisgICAgbGF6eUlu
aXQoQ29tbW9uRmllbGRzT25seSk7CiAgICAgbV9pc051bGwgPSBmYWxzZTsKLSAgICAKKwogICAg
IG1fZXhwZWN0ZWRDb250ZW50TGVuZ3RoID0gZXhwZWN0ZWRDb250ZW50TGVuZ3RoOyAKIH0KIAog
Y29uc3QgU3RyaW5nJiBSZXNvdXJjZVJlc3BvbnNlQmFzZTo6dGV4dEVuY29kaW5nTmFtZSgpIGNv
bnN0CiB7Ci0gICAgbGF6eUluaXQoKTsKKyAgICBsYXp5SW5pdChDb21tb25GaWVsZHNPbmx5KTsK
IAogICAgIHJldHVybiBtX3RleHRFbmNvZGluZ05hbWU7CiB9CiAKIHZvaWQgUmVzb3VyY2VSZXNw
b25zZUJhc2U6OnNldFRleHRFbmNvZGluZ05hbWUoY29uc3QgU3RyaW5nJiBlbmNvZGluZ05hbWUp
CiB7Ci0gICAgbGF6eUluaXQoKTsKKyAgICBsYXp5SW5pdChDb21tb25GaWVsZHNPbmx5KTsKICAg
ICBtX2lzTnVsbCA9IGZhbHNlOwotICAgIAorCiAgICAgbV90ZXh0RW5jb2RpbmdOYW1lID0gZW5j
b2RpbmdOYW1lOyAKIH0KIAogLy8gRklYTUUgc2hvdWxkIGNvbXB1dGUgdGhpcyBvbiB0aGUgZmx5
CiBjb25zdCBTdHJpbmcmIFJlc291cmNlUmVzcG9uc2VCYXNlOjpzdWdnZXN0ZWRGaWxlbmFtZSgp
IGNvbnN0CiB7Ci0gICAgbGF6eUluaXQoKTsKKyAgICBsYXp5SW5pdChDb21tb25GaWVsZHNPbmx5
KTsKIAogICAgIHJldHVybiBtX3N1Z2dlc3RlZEZpbGVuYW1lOwogfQogCiB2b2lkIFJlc291cmNl
UmVzcG9uc2VCYXNlOjpzZXRTdWdnZXN0ZWRGaWxlbmFtZShjb25zdCBTdHJpbmcmIHN1Z2dlc3Rl
ZE5hbWUpCiB7Ci0gICAgbGF6eUluaXQoKTsKKyAgICBsYXp5SW5pdChDb21tb25GaWVsZHNPbmx5
KTsKICAgICBtX2lzTnVsbCA9IGZhbHNlOwotICAgIAorCiAgICAgbV9zdWdnZXN0ZWRGaWxlbmFt
ZSA9IHN1Z2dlc3RlZE5hbWU7IAogfQogCiBpbnQgUmVzb3VyY2VSZXNwb25zZUJhc2U6Omh0dHBT
dGF0dXNDb2RlKCkgY29uc3QKIHsKLSAgICBsYXp5SW5pdCgpOworICAgIGxhenlJbml0KENvbW1v
bkZpZWxkc09ubHkpOwogCiAgICAgcmV0dXJuIG1faHR0cFN0YXR1c0NvZGU7CiB9CiAKIHZvaWQg
UmVzb3VyY2VSZXNwb25zZUJhc2U6OnNldEhUVFBTdGF0dXNDb2RlKGludCBzdGF0dXNDb2RlKQog
ewotICAgIGxhenlJbml0KCk7CisgICAgbGF6eUluaXQoQ29tbW9uRmllbGRzT25seSk7CiAKICAg
ICBtX2h0dHBTdGF0dXNDb2RlID0gc3RhdHVzQ29kZTsKIH0KIAogY29uc3QgU3RyaW5nJiBSZXNv
dXJjZVJlc3BvbnNlQmFzZTo6aHR0cFN0YXR1c1RleHQoKSBjb25zdCAKIHsKLSAgICBsYXp5SW5p
dCgpOworICAgIGxhenlJbml0KEFsbEZpZWxkcyk7CiAKICAgICByZXR1cm4gbV9odHRwU3RhdHVz
VGV4dDsgCiB9CiAKIHZvaWQgUmVzb3VyY2VSZXNwb25zZUJhc2U6OnNldEhUVFBTdGF0dXNUZXh0
KGNvbnN0IFN0cmluZyYgc3RhdHVzVGV4dCkgCiB7Ci0gICAgbGF6eUluaXQoKTsKKyAgICBsYXp5
SW5pdChBbGxGaWVsZHMpOwogCiAgICAgbV9odHRwU3RhdHVzVGV4dCA9IHN0YXR1c1RleHQ7IAog
fQogCiBTdHJpbmcgUmVzb3VyY2VSZXNwb25zZUJhc2U6Omh0dHBIZWFkZXJGaWVsZChjb25zdCBB
dG9taWNTdHJpbmcmIG5hbWUpIGNvbnN0CiB7Ci0gICAgbGF6eUluaXQoKTsKKyAgICBsYXp5SW5p
dChDb21tb25GaWVsZHNPbmx5KTsKKworICAgIC8vIE9wdGltaXN0aWMgY2hlY2sgZmlyc3QKKyAg
ICBTdHJpbmcgdmFsdWUgPSBtX2h0dHBIZWFkZXJGaWVsZHMuZ2V0KG5hbWUpOworICAgIGlmICgh
dmFsdWUuaXNFbXB0eSgpKSAgICAgICAgCisgICAgICAgIHJldHVybiB2YWx1ZTsKKworICAgIGxh
enlJbml0KEFsbEZpZWxkcyk7CiAKICAgICByZXR1cm4gbV9odHRwSGVhZGVyRmllbGRzLmdldChu
YW1lKTsgCiB9CiAKIFN0cmluZyBSZXNvdXJjZVJlc3BvbnNlQmFzZTo6aHR0cEhlYWRlckZpZWxk
KGNvbnN0IGNoYXIqIG5hbWUpIGNvbnN0CiB7Ci0gICAgbGF6eUluaXQoKTsKKyAgICBsYXp5SW5p
dChDb21tb25GaWVsZHNPbmx5KTsKKworICAgIFN0cmluZyB2YWx1ZSA9IG1faHR0cEhlYWRlckZp
ZWxkcy5nZXQobmFtZSk7CisgICAgaWYgKCF2YWx1ZS5pc0VtcHR5KCkpCisgICAgICAgIHJldHVy
biB2YWx1ZTsKKworICAgIGxhenlJbml0KEFsbEZpZWxkcyk7CiAKICAgICByZXR1cm4gbV9odHRw
SGVhZGVyRmllbGRzLmdldChuYW1lKTsgCiB9CiAKIHZvaWQgUmVzb3VyY2VSZXNwb25zZUJhc2U6
OnNldEhUVFBIZWFkZXJGaWVsZChjb25zdCBBdG9taWNTdHJpbmcmIG5hbWUsIGNvbnN0IFN0cmlu
ZyYgdmFsdWUpCiB7Ci0gICAgbGF6eUluaXQoKTsKLSAgICAKKyAgICBsYXp5SW5pdChBbGxGaWVs
ZHMpOworCiAgICAgREVGSU5FX1NUQVRJQ19MT0NBTChjb25zdCBBdG9taWNTdHJpbmcsIGFnZUhl
YWRlciwgKCJhZ2UiKSk7CiAgICAgREVGSU5FX1NUQVRJQ19MT0NBTChjb25zdCBBdG9taWNTdHJp
bmcsIGNhY2hlQ29udHJvbEhlYWRlciwgKCJjYWNoZS1jb250cm9sIikpOwogICAgIERFRklORV9T
VEFUSUNfTE9DQUwoY29uc3QgQXRvbWljU3RyaW5nLCBkYXRlSGVhZGVyLCAoImRhdGUiKSk7CkBA
IC0yODYsNyArMjk5LDcgQEAgdm9pZCBSZXNvdXJjZVJlc3BvbnNlQmFzZTo6c2V0SFRUUEhlYWRl
cgogCiBjb25zdCBIVFRQSGVhZGVyTWFwJiBSZXNvdXJjZVJlc3BvbnNlQmFzZTo6aHR0cEhlYWRl
ckZpZWxkcygpIGNvbnN0CiB7Ci0gICAgbGF6eUluaXQoKTsKKyAgICBsYXp5SW5pdChBbGxGaWVs
ZHMpOwogCiAgICAgcmV0dXJuIG1faHR0cEhlYWRlckZpZWxkczsKIH0KQEAgLTI5NSw3ICszMDgs
NyBAQCB2b2lkIFJlc291cmNlUmVzcG9uc2VCYXNlOjpwYXJzZUNhY2hlQ29uCiB7CiAgICAgQVNT
RVJUKCFtX2hhdmVQYXJzZWRDYWNoZUNvbnRyb2xIZWFkZXIpOwogCi0gICAgbGF6eUluaXQoKTsK
KyAgICBsYXp5SW5pdChDb21tb25GaWVsZHNPbmx5KTsKIAogICAgIG1faGF2ZVBhcnNlZENhY2hl
Q29udHJvbEhlYWRlciA9IHRydWU7CiAKQEAgLTMzMiwxMyArMzQ1LDE0IEBAIHZvaWQgUmVzb3Vy
Y2VSZXNwb25zZUJhc2U6OnBhcnNlQ2FjaGVDb24KICAgICAgICAgICAgIH0KICAgICAgICAgfQog
ICAgIH0KLSAgICAgICAgCisKICAgICBpZiAoIW1fY2FjaGVDb250cm9sQ29udGFpbnNOb0NhY2hl
KSB7CiAgICAgICAgIC8vIEhhbmRsZSBQcmFnbWE6IG5vLWNhY2hlCiAgICAgICAgIC8vIFRoaXMg
aXMgZGVwcmVjYXRlZCBhbmQgZXF1aXZhbGVudCB0byBDYWNoZS1jb250cm9sOiBuby1jYWNoZQog
ICAgICAgICAvLyBEb24ndCBib3RoZXIgdG9rZW5pemluZyB0aGUgdmFsdWUsIGl0IGlzIG5vdCBp
bXBvcnRhbnQKICAgICAgICAgREVGSU5FX1NUQVRJQ19MT0NBTChjb25zdCBBdG9taWNTdHJpbmcs
IHByYWdtYUhlYWRlciwgKCJwcmFnbWEiKSk7CiAgICAgICAgIFN0cmluZyBwcmFnbWFWYWx1ZSA9
IG1faHR0cEhlYWRlckZpZWxkcy5nZXQocHJhZ21hSGVhZGVyKTsKKwogICAgICAgICBtX2NhY2hl
Q29udHJvbENvbnRhaW5zTm9DYWNoZSA9IHByYWdtYVZhbHVlLmxvd2VyKCkuY29udGFpbnMobm9D
YWNoZURpcmVjdGl2ZSk7CiAgICAgfQogfQpAQCAtMzY0LDYgKzM3OCwxNSBAQCBib29sIFJlc291
cmNlUmVzcG9uc2VCYXNlOjpjYWNoZUNvbnRyb2xDCiAgICAgcmV0dXJuIG1fY2FjaGVDb250cm9s
Q29udGFpbnNNdXN0UmV2YWxpZGF0ZTsKIH0KIAorYm9vbCBSZXNvdXJjZVJlc3BvbnNlQmFzZTo6
aGFzQ2FjaGVWYWxpZGF0b3JGaWVsZHMoKSBjb25zdAoreworICAgIGxhenlJbml0KENvbW1vbkZp
ZWxkc09ubHkpOworCisgICAgREVGSU5FX1NUQVRJQ19MT0NBTChjb25zdCBBdG9taWNTdHJpbmcs
IGxhc3RNb2RpZmllZEhlYWRlciwgKCJsYXN0LW1vZGlmaWVkIikpOworICAgIERFRklORV9TVEFU
SUNfTE9DQUwoY29uc3QgQXRvbWljU3RyaW5nLCBlVGFnSGVhZGVyLCAoImV0YWciKSk7CisgICAg
cmV0dXJuICFtX2h0dHBIZWFkZXJGaWVsZHMuZ2V0KGxhc3RNb2RpZmllZEhlYWRlcikuaXNFbXB0
eSgpIHx8ICFtX2h0dHBIZWFkZXJGaWVsZHMuZ2V0KGVUYWdIZWFkZXIpLmlzRW1wdHkoKTsKK30K
KwogZG91YmxlIFJlc291cmNlUmVzcG9uc2VCYXNlOjpjYWNoZUNvbnRyb2xNYXhBZ2UoKSBjb25z
dAogewogICAgIGlmICghbV9oYXZlUGFyc2VkQ2FjaGVDb250cm9sSGVhZGVyKQpAQCAtMzg4LDcg
KzQxMSw3IEBAIHN0YXRpYyBkb3VibGUgcGFyc2VEYXRlVmFsdWVJbkhlYWRlcihjb24KIAogZG91
YmxlIFJlc291cmNlUmVzcG9uc2VCYXNlOjpkYXRlKCkgY29uc3QKIHsKLSAgICBsYXp5SW5pdCgp
OworICAgIGxhenlJbml0KENvbW1vbkZpZWxkc09ubHkpOwogCiAgICAgaWYgKCFtX2hhdmVQYXJz
ZWREYXRlSGVhZGVyKSB7CiAgICAgICAgIERFRklORV9TVEFUSUNfTE9DQUwoY29uc3QgQXRvbWlj
U3RyaW5nLCBoZWFkZXJOYW1lLCAoImRhdGUiKSk7CkBAIC00MDAsOCArNDIzLDggQEAgZG91Ymxl
IFJlc291cmNlUmVzcG9uc2VCYXNlOjpkYXRlKCkgY29ucwogCiBkb3VibGUgUmVzb3VyY2VSZXNw
b25zZUJhc2U6OmFnZSgpIGNvbnN0CiB7Ci0gICAgbGF6eUluaXQoKTsKLSAgICAKKyAgICBsYXp5
SW5pdChDb21tb25GaWVsZHNPbmx5KTsKKwogICAgIGlmICghbV9oYXZlUGFyc2VkQWdlSGVhZGVy
KSB7CiAgICAgICAgIERFRklORV9TVEFUSUNfTE9DQUwoY29uc3QgQXRvbWljU3RyaW5nLCBoZWFk
ZXJOYW1lLCAoImFnZSIpKTsKICAgICAgICAgU3RyaW5nIGhlYWRlclZhbHVlID0gbV9odHRwSGVh
ZGVyRmllbGRzLmdldChoZWFkZXJOYW1lKTsKQEAgLTQxNiw3ICs0MzksNyBAQCBkb3VibGUgUmVz
b3VyY2VSZXNwb25zZUJhc2U6OmFnZSgpIGNvbnN0CiAKIGRvdWJsZSBSZXNvdXJjZVJlc3BvbnNl
QmFzZTo6ZXhwaXJlcygpIGNvbnN0CiB7Ci0gICAgbGF6eUluaXQoKTsKKyAgICBsYXp5SW5pdChD
b21tb25GaWVsZHNPbmx5KTsKIAogICAgIGlmICghbV9oYXZlUGFyc2VkRXhwaXJlc0hlYWRlcikg
ewogICAgICAgICBERUZJTkVfU1RBVElDX0xPQ0FMKGNvbnN0IEF0b21pY1N0cmluZywgaGVhZGVy
TmFtZSwgKCJleHBpcmVzIikpOwpAQCAtNDI4LDggKzQ1MSw4IEBAIGRvdWJsZSBSZXNvdXJjZVJl
c3BvbnNlQmFzZTo6ZXhwaXJlcygpIGMKIAogZG91YmxlIFJlc291cmNlUmVzcG9uc2VCYXNlOjps
YXN0TW9kaWZpZWQoKSBjb25zdAogewotICAgIGxhenlJbml0KCk7Ci0gICAgCisgICAgbGF6eUlu
aXQoQ29tbW9uRmllbGRzT25seSk7CisKICAgICBpZiAoIW1faGF2ZVBhcnNlZExhc3RNb2RpZmll
ZEhlYWRlcikgewogICAgICAgICBERUZJTkVfU1RBVElDX0xPQ0FMKGNvbnN0IEF0b21pY1N0cmlu
ZywgaGVhZGVyTmFtZSwgKCJsYXN0LW1vZGlmaWVkIikpOwogICAgICAgICBtX2xhc3RNb2RpZmll
ZCA9IHBhcnNlRGF0ZVZhbHVlSW5IZWFkZXIobV9odHRwSGVhZGVyRmllbGRzLCBoZWFkZXJOYW1l
KTsKQEAgLTQ0MCw3ICs0NjMsNyBAQCBkb3VibGUgUmVzb3VyY2VSZXNwb25zZUJhc2U6Omxhc3RN
b2RpZmllCiAKIGJvb2wgUmVzb3VyY2VSZXNwb25zZUJhc2U6OmlzQXR0YWNobWVudCgpIGNvbnN0
CiB7Ci0gICAgbGF6eUluaXQoKTsKKyAgICBsYXp5SW5pdChBbGxGaWVsZHMpOwogCiAgICAgREVG
SU5FX1NUQVRJQ19MT0NBTChjb25zdCBBdG9taWNTdHJpbmcsIGhlYWRlck5hbWUsICgiY29udGVu
dC1kaXNwb3NpdGlvbiIpKTsKICAgICBTdHJpbmcgdmFsdWUgPSBtX2h0dHBIZWFkZXJGaWVsZHMu
Z2V0KGhlYWRlck5hbWUpOwpAQCAtNDU0LDIxICs0NzcsMjEgQEAgYm9vbCBSZXNvdXJjZVJlc3Bv
bnNlQmFzZTo6aXNBdHRhY2htZW50KAogICAKIHZvaWQgUmVzb3VyY2VSZXNwb25zZUJhc2U6OnNl
dExhc3RNb2RpZmllZERhdGUodGltZV90IGxhc3RNb2RpZmllZERhdGUpCiB7Ci0gICAgbGF6eUlu
aXQoKTsKKyAgICBsYXp5SW5pdChBbGxGaWVsZHMpOwogCiAgICAgbV9sYXN0TW9kaWZpZWREYXRl
ID0gbGFzdE1vZGlmaWVkRGF0ZTsKIH0KIAogdGltZV90IFJlc291cmNlUmVzcG9uc2VCYXNlOjps
YXN0TW9kaWZpZWREYXRlKCkgY29uc3QKIHsKLSAgICBsYXp5SW5pdCgpOworICAgIGxhenlJbml0
KEFsbEZpZWxkcyk7CiAKICAgICByZXR1cm4gbV9sYXN0TW9kaWZpZWREYXRlOwogfQogCiBib29s
IFJlc291cmNlUmVzcG9uc2VCYXNlOjp3YXNDYWNoZWQoKSBjb25zdAogewotICAgIGxhenlJbml0
KCk7CisgICAgbGF6eUluaXQoQWxsRmllbGRzKTsKIAogICAgIHJldHVybiBtX3dhc0NhY2hlZDsK
IH0KQEAgLTQ4MCw2NSArNTAzLDY1IEBAIHZvaWQgUmVzb3VyY2VSZXNwb25zZUJhc2U6OnNldFdh
c0NhY2hlZCgKIAogYm9vbCBSZXNvdXJjZVJlc3BvbnNlQmFzZTo6Y29ubmVjdGlvblJldXNlZCgp
IGNvbnN0CiB7Ci0gICAgbGF6eUluaXQoKTsKKyAgICBsYXp5SW5pdChBbGxGaWVsZHMpOwogCiAg
ICAgcmV0dXJuIG1fY29ubmVjdGlvblJldXNlZDsKIH0KIAogdm9pZCBSZXNvdXJjZVJlc3BvbnNl
QmFzZTo6c2V0Q29ubmVjdGlvblJldXNlZChib29sIGNvbm5lY3Rpb25SZXVzZWQpCiB7Ci0gICAg
bGF6eUluaXQoKTsKKyAgICBsYXp5SW5pdChBbGxGaWVsZHMpOwogCiAgICAgbV9jb25uZWN0aW9u
UmV1c2VkID0gY29ubmVjdGlvblJldXNlZDsKIH0KIAogdW5zaWduZWQgUmVzb3VyY2VSZXNwb25z
ZUJhc2U6OmNvbm5lY3Rpb25JRCgpIGNvbnN0CiB7Ci0gICAgbGF6eUluaXQoKTsKKyAgICBsYXp5
SW5pdChBbGxGaWVsZHMpOwogCiAgICAgcmV0dXJuIG1fY29ubmVjdGlvbklEOwogfQogCiB2b2lk
IFJlc291cmNlUmVzcG9uc2VCYXNlOjpzZXRDb25uZWN0aW9uSUQodW5zaWduZWQgY29ubmVjdGlv
bklEKQogewotICAgIGxhenlJbml0KCk7CisgICAgbGF6eUluaXQoQWxsRmllbGRzKTsKIAogICAg
IG1fY29ubmVjdGlvbklEID0gY29ubmVjdGlvbklEOwogfQogCiBSZXNvdXJjZUxvYWRUaW1pbmcq
IFJlc291cmNlUmVzcG9uc2VCYXNlOjpyZXNvdXJjZUxvYWRUaW1pbmcoKSBjb25zdAogewotICAg
IGxhenlJbml0KCk7CisgICAgbGF6eUluaXQoQWxsRmllbGRzKTsKIAogICAgIHJldHVybiBtX3Jl
c291cmNlTG9hZFRpbWluZy5nZXQoKTsKIH0KIAogdm9pZCBSZXNvdXJjZVJlc3BvbnNlQmFzZTo6
c2V0UmVzb3VyY2VMb2FkVGltaW5nKFBhc3NSZWZQdHI8UmVzb3VyY2VMb2FkVGltaW5nPiByZXNv
dXJjZUxvYWRUaW1pbmcpCiB7Ci0gICAgbGF6eUluaXQoKTsKKyAgICBsYXp5SW5pdChBbGxGaWVs
ZHMpOwogCiAgICAgbV9yZXNvdXJjZUxvYWRUaW1pbmcgPSByZXNvdXJjZUxvYWRUaW1pbmc7CiB9
CiAKIFBhc3NSZWZQdHI8UmVzb3VyY2VMb2FkSW5mbz4gUmVzb3VyY2VSZXNwb25zZUJhc2U6OnJl
c291cmNlTG9hZEluZm8oKSBjb25zdAogewotICAgIGxhenlJbml0KCk7CisgICAgbGF6eUluaXQo
QWxsRmllbGRzKTsKIAogICAgIHJldHVybiBtX3Jlc291cmNlTG9hZEluZm8uZ2V0KCk7CiB9CiAK
IHZvaWQgUmVzb3VyY2VSZXNwb25zZUJhc2U6OnNldFJlc291cmNlTG9hZEluZm8oUGFzc1JlZlB0
cjxSZXNvdXJjZUxvYWRJbmZvPiBsb2FkSW5mbykKIHsKLSAgICBsYXp5SW5pdCgpOworICAgIGxh
enlJbml0KEFsbEZpZWxkcyk7CiAKICAgICBtX3Jlc291cmNlTG9hZEluZm8gPSBsb2FkSW5mbzsK
IH0KIAotdm9pZCBSZXNvdXJjZVJlc3BvbnNlQmFzZTo6bGF6eUluaXQoKSBjb25zdAordm9pZCBS
ZXNvdXJjZVJlc3BvbnNlQmFzZTo6bGF6eUluaXQoSW5pdExldmVsIGluaXRMZXZlbCkgY29uc3QK
IHsKLSAgICBjb25zdF9jYXN0PFJlc291cmNlUmVzcG9uc2UqPihzdGF0aWNfY2FzdDxjb25zdCBS
ZXNvdXJjZVJlc3BvbnNlKj4odGhpcykpLT5wbGF0Zm9ybUxhenlJbml0KCk7CisgICAgY29uc3Rf
Y2FzdDxSZXNvdXJjZVJlc3BvbnNlKj4oc3RhdGljX2Nhc3Q8Y29uc3QgUmVzb3VyY2VSZXNwb25z
ZSo+KHRoaXMpKS0+cGxhdGZvcm1MYXp5SW5pdChpbml0TGV2ZWwpOwogfQotCisgICAgCiBib29s
IFJlc291cmNlUmVzcG9uc2VCYXNlOjpjb21wYXJlKGNvbnN0IFJlc291cmNlUmVzcG9uc2UmIGEs
IGNvbnN0IFJlc291cmNlUmVzcG9uc2UmIGIpCiB7CiAgICAgaWYgKGEuaXNOdWxsKCkgIT0gYi5p
c051bGwoKSkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvUmVzb3VyY2VS
ZXNwb25zZUJhc2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3
b3JrL1Jlc291cmNlUmVzcG9uc2VCYXNlLmgJKHJldmlzaW9uIDgyNDc2KQorKysgU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vbmV0d29yay9SZXNvdXJjZVJlc3BvbnNlQmFzZS5oCSh3b3JraW5nIGNv
cHkpCkBAIC0zNCw2ICszNCw3IEBACiAKICNpbmNsdWRlIDx3dGYvUGFzc093blB0ci5oPgogI2lu
Y2x1ZGUgPHd0Zi9SZWZQdHIuaD4KKyNpbmNsdWRlIDx3dGYvVW51c2VkUGFyYW0uaD4KIAogbmFt
ZXNwYWNlIFdlYkNvcmUgewogCkBAIC05Myw2ICs5NCw3IEBAIHB1YmxpYzoKICAgICBib29sIGNh
Y2hlQ29udHJvbENvbnRhaW5zTm9DYWNoZSgpIGNvbnN0OwogICAgIGJvb2wgY2FjaGVDb250cm9s
Q29udGFpbnNOb1N0b3JlKCkgY29uc3Q7CiAgICAgYm9vbCBjYWNoZUNvbnRyb2xDb250YWluc011
c3RSZXZhbGlkYXRlKCkgY29uc3Q7CisgICAgYm9vbCBoYXNDYWNoZVZhbGlkYXRvckZpZWxkcygp
IGNvbnN0OwogICAgIGRvdWJsZSBjYWNoZUNvbnRyb2xNYXhBZ2UoKSBjb25zdDsKICAgICBkb3Vi
bGUgZGF0ZSgpIGNvbnN0OwogICAgIGRvdWJsZSBhZ2UoKSBjb25zdDsKQEAgLTEyNCwxMyArMTI2
LDE5IEBAIHB1YmxpYzoKICAgICBzdGF0aWMgYm9vbCBjb21wYXJlKGNvbnN0IFJlc291cmNlUmVz
cG9uc2UmLCBjb25zdCBSZXNvdXJjZVJlc3BvbnNlJik7CiAKIHByb3RlY3RlZDoKKyAgICBlbnVt
IEluaXRMZXZlbCB7CisgICAgICAgIFVuaW5pdGlhbGl6ZWQgPSAwLAorICAgICAgICBDb21tb25G
aWVsZHNPbmx5LAorICAgICAgICBBbGxGaWVsZHMKKyAgICB9OworCiAgICAgUmVzb3VyY2VSZXNw
b25zZUJhc2UoKTsKICAgICBSZXNvdXJjZVJlc3BvbnNlQmFzZShjb25zdCBLVVJMJiB1cmwsIGNv
bnN0IFN0cmluZyYgbWltZVR5cGUsIGxvbmcgbG9uZyBleHBlY3RlZExlbmd0aCwgY29uc3QgU3Ry
aW5nJiB0ZXh0RW5jb2RpbmdOYW1lLCBjb25zdCBTdHJpbmcmIGZpbGVuYW1lKTsKIAotICAgIHZv
aWQgbGF6eUluaXQoKSBjb25zdDsKKyAgICB2b2lkIGxhenlJbml0KEluaXRMZXZlbCkgY29uc3Q7
CiAKICAgICAvLyBUaGUgUmVzb3VyY2VSZXNwb25zZSBzdWJjbGFzcyBtYXkgInNoYWRvdyIgdGhp
cyBtZXRob2QgdG8gbGF6aWx5IGluaXRpYWxpemUgcGxhdGZvcm0gc3BlY2lmaWMgZmllbGRzCi0g
ICAgdm9pZCBwbGF0Zm9ybUxhenlJbml0KCkgeyB9CisgICAgdm9pZCBwbGF0Zm9ybUxhenlJbml0
KEluaXRMZXZlbCBpbml0TGV2ZWwpIHsgVU5VU0VEX1BBUkFNKGluaXRMZXZlbCk7IH0KIAogICAg
IC8vIFRoZSBSZXNvdXJjZVJlc3BvbnNlIHN1YmNsYXNzIG1heSAic2hhZG93IiB0aGlzIG1ldGhv
ZCB0byBjb21wYXJlIHBsYXRmb3JtIHNwZWNpZmljIGZpZWxkcwogICAgIHN0YXRpYyBib29sIHBs
YXRmb3JtQ29tcGFyZShjb25zdCBSZXNvdXJjZVJlc3BvbnNlJiwgY29uc3QgUmVzb3VyY2VSZXNw
b25zZSYpIHsgcmV0dXJuIHRydWU7IH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25l
dHdvcmsvY2YvUmVzb3VyY2VSZXNwb25zZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL25ldHdvcmsvY2YvUmVzb3VyY2VSZXNwb25zZS5oCShyZXZpc2lvbiA4MjQ3NikK
KysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY2YvUmVzb3VyY2VSZXNwb25zZS5o
CSh3b3JraW5nIGNvcHkpCkBAIC00NCwyMSArNDQsMjEgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewog
Y2xhc3MgUmVzb3VyY2VSZXNwb25zZSA6IHB1YmxpYyBSZXNvdXJjZVJlc3BvbnNlQmFzZSB7CiBw
dWJsaWM6CiAgICAgUmVzb3VyY2VSZXNwb25zZSgpCi0gICAgICAgIDogbV9pc1VwVG9EYXRlKHRy
dWUpCisgICAgICAgIDogbV9pbml0TGV2ZWwoQWxsRmllbGRzKQogICAgIHsKICAgICB9CiAKICNp
ZiBVU0UoQ0ZORVRXT1JLKQogICAgIFJlc291cmNlUmVzcG9uc2UoQ0ZVUkxSZXNwb25zZVJlZiBj
ZlJlc3BvbnNlKQogICAgICAgICA6IG1fY2ZSZXNwb25zZShjZlJlc3BvbnNlKQotICAgICAgICAs
IG1faXNVcFRvRGF0ZShmYWxzZSkKKyAgICAgICAgLCBtX2luaXRMZXZlbChVbmluaXRpYWxpemVk
KQogICAgIHsKICAgICAgICAgbV9pc051bGwgPSAhY2ZSZXNwb25zZTsKICAgICB9CiAjZWxzZQog
ICAgIFJlc291cmNlUmVzcG9uc2UoTlNVUkxSZXNwb25zZSogbnNSZXNwb25zZSkKICAgICAgICAg
OiBtX25zUmVzcG9uc2UobnNSZXNwb25zZSkKLSAgICAgICAgLCBtX2lzVXBUb0RhdGUoZmFsc2Up
CisgICAgICAgICwgbV9pbml0TGV2ZWwoVW5pbml0aWFsaXplZCkKICAgICB7CiAgICAgICAgIG1f
aXNOdWxsID0gIW5zUmVzcG9uc2U7CiAgICAgfQpAQCAtNjYsMTUgKzY2LDE1IEBAIHB1YmxpYzoK
IAogICAgIFJlc291cmNlUmVzcG9uc2UoY29uc3QgS1VSTCYgdXJsLCBjb25zdCBTdHJpbmcmIG1p
bWVUeXBlLCBsb25nIGxvbmcgZXhwZWN0ZWRMZW5ndGgsIGNvbnN0IFN0cmluZyYgdGV4dEVuY29k
aW5nTmFtZSwgY29uc3QgU3RyaW5nJiBmaWxlbmFtZSkKICAgICAgICAgOiBSZXNvdXJjZVJlc3Bv
bnNlQmFzZSh1cmwsIG1pbWVUeXBlLCBleHBlY3RlZExlbmd0aCwgdGV4dEVuY29kaW5nTmFtZSwg
ZmlsZW5hbWUpCi0gICAgICAgICwgbV9pc1VwVG9EYXRlKHRydWUpCisgICAgICAgICwgbV9pbml0
TGV2ZWwoQWxsRmllbGRzKQogICAgIHsKICAgICB9CiAKICAgICB1bnNpZ25lZCBtZW1vcnlVc2Fn
ZSgpIGNvbnN0CiAgICAgewogICAgICAgICAvLyBGSVhNRTogRmluZCBzb21lIHByb2dyYW1tYXRp
YyBsaWdod2VpZ2h0IHdheSB0byBjYWxjdWxhdGUgUmVzb3VyY2VSZXNwb25zZSBhbmQgYXNzb2Np
YXRlZCBjbGFzc2VzLgotICAgICAgICAvLyBUaGlzIGlzIGEgcm91Z2ggZXN0aW1hdGUgb2YgcmVz
b3VyY2Ugb3ZlcmhlYWQgYmFzZWQgb24gc3RhdHMgY29sbGVjdGVkIGZyb20gdGhlIHN0cmVzcyB0
ZXN0LgotICAgICAgICByZXR1cm4gMzA3MjsKKyAgICAgICAgLy8gVGhpcyBpcyBhIHJvdWdoIGVz
dGltYXRlIG9mIHJlc291cmNlIG92ZXJoZWFkIGJhc2VkIG9uIHN0YXRzIGNvbGxlY3RlZCBmcm9t
IG1lbW9yeSB1c2FnZSB0ZXN0cy4KKyAgICAgICAgcmV0dXJuIDM4MDA7CiAgICAgICAgIC8qICAx
MjgwICogMiArICAgICAgICAgICAgICAgIC8vIGF2ZXJhZ2Ugc2l6ZSBvZiBSZXNvdXJjZVJlc3Bv
bnNlLiBEb3VibGVkIHRvIGFjY291bnQgZm9yIHRoZSBXZWJDb3JlIGNvcHkgYW5kIHRoZSBDRiBj
b3B5LgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBNb3N0bHkgZHVl
IHRvIHRoZSBzaXplIG9mIHRoZSBoYXNoIG1hcHMsIHRoZSBIZWFkZXIgTWFwIHN0cmluZ3MgYW5k
IHRoZSBVUkwuCiAgICAgICAgICAgICAyNTYgKiAyICAgICAgICAgICAgICAgICAgIC8vIE92ZXJo
ZWFkIGZyb20gUmVzb3VyY2VSZXF1ZXN0LCBkb3VibGVkIHRvIGFjY291bnQgZm9yIFdlYkNvcmUg
Y29weSBhbmQgQ0YgY29weS4KQEAgLTkxLDcgKzkxLDcgQEAgcHVibGljOgogcHJpdmF0ZToKICAg
ICBmcmllbmQgY2xhc3MgUmVzb3VyY2VSZXNwb25zZUJhc2U7CiAKLSAgICB2b2lkIHBsYXRmb3Jt
TGF6eUluaXQoKTsKKyAgICB2b2lkIHBsYXRmb3JtTGF6eUluaXQoSW5pdExldmVsKTsKICAgICBQ
YXNzT3duUHRyPENyb3NzVGhyZWFkUmVzb3VyY2VSZXNwb25zZURhdGE+IGRvUGxhdGZvcm1Db3B5
RGF0YShQYXNzT3duUHRyPENyb3NzVGhyZWFkUmVzb3VyY2VSZXNwb25zZURhdGE+IGRhdGEpIGNv
bnN0IHsgcmV0dXJuIGRhdGE7IH0KICAgICB2b2lkIGRvUGxhdGZvcm1BZG9wdChQYXNzT3duUHRy
PENyb3NzVGhyZWFkUmVzb3VyY2VSZXNwb25zZURhdGE+KSB7IH0KIApAQCAtMTAyLDcgKzEwMiw3
IEBAIHByaXZhdGU6CiAjZWxzZQogICAgIG11dGFibGUgUmV0YWluUHRyPE5TVVJMUmVzcG9uc2U+
IG1fbnNSZXNwb25zZTsKICNlbmRpZgotICAgIGJvb2wgbV9pc1VwVG9EYXRlOworICAgIEluaXRM
ZXZlbCBtX2luaXRMZXZlbDsKIH07CiAKIHN0cnVjdCBDcm9zc1RocmVhZFJlc291cmNlUmVzcG9u
c2VEYXRhIDogcHVibGljIENyb3NzVGhyZWFkUmVzb3VyY2VSZXNwb25zZURhdGFCYXNlIHsKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY2YvUmVzb3VyY2VSZXNwb25zZUNG
TmV0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2Nm
L1Jlc291cmNlUmVzcG9uc2VDRk5ldC5jcHAJKHJldmlzaW9uIDgyNDc2KQorKysgU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vbmV0d29yay9jZi9SZXNvdXJjZVJlc3BvbnNlQ0ZOZXQuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC00Miw2ICs0MiwxMSBAQCB1c2luZyBuYW1lc3BhY2Ugc3RkOwogCiBuYW1l
c3BhY2UgV2ViQ29yZSB7CiAKK3N0YXRpYyBjb25zdCBDRlN0cmluZ1JlZiBjb21tb25IZWFkZXJG
aWVsZHNbXSA9IHsKKyAgICBDRlNUUigiQWdlIiwgQ0ZTVFIoIkNhY2hlLUNvbnRyb2wiLCBDRlNU
UigiRGF0ZSIsIENGU1RSKCJFdGFnIiwgQ0ZTVFIoIkV4cGlyZXMiLCBDRlNUUigiTGFzdC1Nb2Rp
ZmllZCIsIENGU1RSKCJQcmFnbWEiKQorfTsKK3N0YXRpYyBjb25zdCBpbnQgbnVtQ29tbW9uSGVh
ZGVyRmllbGRzID0gc2l6ZW9mKGNvbW1vbkhlYWRlckZpZWxkcykgLyBzaXplb2YoQ0ZTdHJpbmdS
ZWYpOworCiBDRlVSTFJlc3BvbnNlUmVmIFJlc291cmNlUmVzcG9uc2U6OmNmVVJMUmVzcG9uc2Uo
KSBjb25zdAogewogICAgIGlmICghbV9jZlJlc3BvbnNlICYmICFtX2lzTnVsbCkgewpAQCAtNzAs
NTIgKzc1LDY2IEBAIHN0YXRpYyB0aW1lX3QgdG9UaW1lVChDRkFic29sdXRlVGltZSB0aW0KICAg
ICByZXR1cm4gbWluKG1heChtaW5UaW1lQXNEb3VibGUsIHRpbWUgKyBrQ0ZBYnNvbHV0ZVRpbWVJ
bnRlcnZhbFNpbmNlMTk3MCksIG1heFRpbWVBc0RvdWJsZSk7CiB9CiAKLXZvaWQgUmVzb3VyY2VS
ZXNwb25zZTo6cGxhdGZvcm1MYXp5SW5pdCgpCit2b2lkIFJlc291cmNlUmVzcG9uc2U6OnBsYXRm
b3JtTGF6eUluaXQoSW5pdExldmVsIGluaXRMZXZlbCkKIHsKLSAgICBpZiAobV9pc1VwVG9EYXRl
KQorICAgIGlmIChtX2luaXRMZXZlbCA+IGluaXRMZXZlbCkKICAgICAgICAgcmV0dXJuOwotICAg
IG1faXNVcFRvRGF0ZSA9IHRydWU7CiAKICAgICBpZiAobV9pc051bGwpIHsKICAgICAgICAgQVNT
RVJUKCFtX2NmUmVzcG9uc2UuZ2V0KCkpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAg
Ly8gRklYTUU6IFdlIG1heSBuZWVkIHRvIGRvIE1JTUUgdHlwZSBzbmlmZmluZyBoZXJlICh1bmxl
c3MgdGhhdCBpcyBkb25lIGluIENGVVJMUmVzcG9uc2VHZXRNSU1FVHlwZSkuCi0KLSAgICBtX3Vy
bCA9IENGVVJMUmVzcG9uc2VHZXRVUkwobV9jZlJlc3BvbnNlLmdldCgpKTsKLSAgICBtX21pbWVU
eXBlID0gQ0ZVUkxSZXNwb25zZUdldE1JTUVUeXBlKG1fY2ZSZXNwb25zZS5nZXQoKSk7Ci0gICAg
bV9leHBlY3RlZENvbnRlbnRMZW5ndGggPSBDRlVSTFJlc3BvbnNlR2V0RXhwZWN0ZWRDb250ZW50
TGVuZ3RoKG1fY2ZSZXNwb25zZS5nZXQoKSk7Ci0gICAgbV90ZXh0RW5jb2RpbmdOYW1lID0gQ0ZV
UkxSZXNwb25zZUdldFRleHRFbmNvZGluZ05hbWUobV9jZlJlc3BvbnNlLmdldCgpKTsKLQotICAg
IC8vIFdvcmthcm91bmQgZm9yIDxyZGFyOi8vcHJvYmxlbS84NzU3MDg4PiwgY2FuIGJlIHJlbW92
ZWQgb25jZSB0aGF0IGlzIGZpeGVkLgotICAgIHVuc2lnbmVkIHRleHRFbmNvZGluZ05hbWVMZW5n
dGggPSBtX3RleHRFbmNvZGluZ05hbWUubGVuZ3RoKCk7Ci0gICAgaWYgKHRleHRFbmNvZGluZ05h
bWVMZW5ndGggPj0gMiAmJiBtX3RleHRFbmNvZGluZ05hbWVbMFVdID09ICciJyAmJiBtX3RleHRF
bmNvZGluZ05hbWVbdGV4dEVuY29kaW5nTmFtZUxlbmd0aCAtIDFdID09ICciJykKLSAgICAgICAg
bV90ZXh0RW5jb2RpbmdOYW1lID0gbV90ZXh0RW5jb2RpbmdOYW1lLnN1YnN0cmluZygxLCB0ZXh0
RW5jb2RpbmdOYW1lTGVuZ3RoIC0gMik7CisgICAgaWYgKChtX2luaXRMZXZlbCA8IENvbW1vbkZp
ZWxkc09ubHkpICYmIChpbml0TGV2ZWwgPj0gQ29tbW9uRmllbGRzT25seSkpIHsKKyAgICAgICAg
bV91cmwgPSBDRlVSTFJlc3BvbnNlR2V0VVJMKG1fY2ZSZXNwb25zZS5nZXQoKSk7CisgICAgICAg
IG1fbWltZVR5cGUgPSBDRlVSTFJlc3BvbnNlR2V0TUlNRVR5cGUobV9jZlJlc3BvbnNlLmdldCgp
KTsKKyAgICAgICAgbV9leHBlY3RlZENvbnRlbnRMZW5ndGggPSBDRlVSTFJlc3BvbnNlR2V0RXhw
ZWN0ZWRDb250ZW50TGVuZ3RoKG1fY2ZSZXNwb25zZS5nZXQoKSk7CisgICAgICAgIG1fdGV4dEVu
Y29kaW5nTmFtZSA9IENGVVJMUmVzcG9uc2VHZXRUZXh0RW5jb2RpbmdOYW1lKG1fY2ZSZXNwb25z
ZS5nZXQoKSk7CisKKyAgICAgICAgLy8gV29ya2Fyb3VuZCBmb3IgPHJkYXI6Ly9wcm9ibGVtLzg3
NTcwODg+LCBjYW4gYmUgcmVtb3ZlZCBvbmNlIHRoYXQgaXMgZml4ZWQuCisgICAgICAgIHVuc2ln
bmVkIHRleHRFbmNvZGluZ05hbWVMZW5ndGggPSBtX3RleHRFbmNvZGluZ05hbWUubGVuZ3RoKCk7
CisgICAgICAgIGlmICh0ZXh0RW5jb2RpbmdOYW1lTGVuZ3RoID49IDIgJiYgbV90ZXh0RW5jb2Rp
bmdOYW1lWzBVXSA9PSAnIicgJiYgbV90ZXh0RW5jb2RpbmdOYW1lW3RleHRFbmNvZGluZ05hbWVM
ZW5ndGggLSAxXSA9PSAnIicpCisgICAgICAgICAgICBtX3RleHRFbmNvZGluZ05hbWUgPSBtX3Rl
eHRFbmNvZGluZ05hbWUuc3Vic3RyaW5nKDEsIHRleHRFbmNvZGluZ05hbWVMZW5ndGggLSAyKTsK
KworICAgICAgICBtX2xhc3RNb2RpZmllZERhdGUgPSB0b1RpbWVUKENGVVJMUmVzcG9uc2VHZXRM
YXN0TW9kaWZpZWREYXRlKG1fY2ZSZXNwb25zZS5nZXQoKSkpOworCisgICAgICAgIFJldGFpblB0
cjxDRlN0cmluZ1JlZj4gc3VnZ2VzdGVkRmlsZW5hbWUoQWRvcHRDRiwgQ0ZVUkxSZXNwb25zZUNv
cHlTdWdnZXN0ZWRGaWxlbmFtZShtX2NmUmVzcG9uc2UuZ2V0KCkpKTsKKyAgICAgICAgbV9zdWdn
ZXN0ZWRGaWxlbmFtZSA9IHN1Z2dlc3RlZEZpbGVuYW1lLmdldCgpOworCisgICAgICAgIENGSFRU
UE1lc3NhZ2VSZWYgaHR0cFJlc3BvbnNlID0gQ0ZVUkxSZXNwb25zZUdldEhUVFBSZXNwb25zZSht
X2NmUmVzcG9uc2UuZ2V0KCkpOworICAgICAgICBpZiAoaHR0cFJlc3BvbnNlKQorICAgICAgICAg
ICAgbV9odHRwU3RhdHVzQ29kZSA9IENGSFRUUE1lc3NhZ2VHZXRSZXNwb25zZVN0YXR1c0NvZGUo
aHR0cFJlc3BvbnNlKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgbV9odHRwU3RhdHVzQ29k
ZSA9IDA7CiAKLSAgICBtX2xhc3RNb2RpZmllZERhdGUgPSB0b1RpbWVUKENGVVJMUmVzcG9uc2VH
ZXRMYXN0TW9kaWZpZWREYXRlKG1fY2ZSZXNwb25zZS5nZXQoKSkpOwotCi0gICAgUmV0YWluUHRy
PENGU3RyaW5nUmVmPiBzdWdnZXN0ZWRGaWxlbmFtZShBZG9wdENGLCBDRlVSTFJlc3BvbnNlQ29w
eVN1Z2dlc3RlZEZpbGVuYW1lKG1fY2ZSZXNwb25zZS5nZXQoKSkpOwotICAgIG1fc3VnZ2VzdGVk
RmlsZW5hbWUgPSBzdWdnZXN0ZWRGaWxlbmFtZS5nZXQoKTsKKyAgICAgICAgUmV0YWluUHRyPENG
RGljdGlvbmFyeVJlZj4gaGVhZGVycyhBZG9wdENGLCBDRkhUVFBNZXNzYWdlQ29weUFsbEhlYWRl
ckZpZWxkcyhodHRwUmVzcG9uc2UpKTsKIAotICAgIENGSFRUUE1lc3NhZ2VSZWYgaHR0cFJlc3Bv
bnNlID0gQ0ZVUkxSZXNwb25zZUdldEhUVFBSZXNwb25zZShtX2NmUmVzcG9uc2UuZ2V0KCkpOwot
ICAgIGlmIChodHRwUmVzcG9uc2UpIHsKLSAgICAgICAgbV9odHRwU3RhdHVzQ29kZSA9IENGSFRU
UE1lc3NhZ2VHZXRSZXNwb25zZVN0YXR1c0NvZGUoaHR0cFJlc3BvbnNlKTsKKyAgICAgICAgZm9y
IChpbnQgaSA9IDA7IGkgPCBudW1Db21tb25IZWFkZXJGaWVsZHM7IGkrKykgeworICAgICAgICAg
ICAgQ0ZTdHJpbmdSZWYgdmFsdWU7CisgICAgICAgICAgICBpZiAoQ0ZEaWN0aW9uYXJ5R2V0VmFs
dWVJZlByZXNlbnQoaGVhZGVycy5nZXQoKSwgY29tbW9uSGVhZGVyRmllbGRzW2ldLCAmdmFsdWUp
KQorICAgICAgICAgICAgICAgIG1faHR0cEhlYWRlckZpZWxkcy5zZXQoY29tbW9uSGVhZGVyRmll
bGRzW2ldLCB2YWx1ZSk7CisgICAgICAgIH0KKyAgICB9CiAKLSAgICAgICAgUmV0YWluUHRyPENG
U3RyaW5nUmVmPiBzdGF0dXNMaW5lKEFkb3B0Q0YsIENGSFRUUE1lc3NhZ2VDb3B5UmVzcG9uc2VT
dGF0dXNMaW5lKGh0dHBSZXNwb25zZSkpOwotICAgICAgICBtX2h0dHBTdGF0dXNUZXh0ID0gZXh0
cmFjdFJlYXNvblBocmFzZUZyb21IVFRQU3RhdHVzTGluZShzdGF0dXNMaW5lLmdldCgpKTsKKyAg
ICBpZiAoKG1faW5pdExldmVsIDwgQWxsRmllbGRzKSAmJiAoaW5pdExldmVsID49IEFsbEZpZWxk
cykpIHsKKyAgICAgICAgQ0ZIVFRQTWVzc2FnZVJlZiBodHRwUmVzcG9uc2UgPSBDRlVSTFJlc3Bv
bnNlR2V0SFRUUFJlc3BvbnNlKG1fY2ZSZXNwb25zZS5nZXQoKSk7CisgICAgICAgIGlmIChodHRw
UmVzcG9uc2UpIHsKKyAgICAgICAgICAgIFJldGFpblB0cjxDRlN0cmluZ1JlZj4gc3RhdHVzTGlu
ZShBZG9wdENGLCBDRkhUVFBNZXNzYWdlQ29weVJlc3BvbnNlU3RhdHVzTGluZShodHRwUmVzcG9u
c2UpKTsKKyAgICAgICAgICAgIG1faHR0cFN0YXR1c1RleHQgPSBleHRyYWN0UmVhc29uUGhyYXNl
RnJvbUhUVFBTdGF0dXNMaW5lKHN0YXR1c0xpbmUuZ2V0KCkpOworCisgICAgICAgICAgICBSZXRh
aW5QdHI8Q0ZEaWN0aW9uYXJ5UmVmPiBoZWFkZXJzKEFkb3B0Q0YsIENGSFRUUE1lc3NhZ2VDb3B5
QWxsSGVhZGVyRmllbGRzKGh0dHBSZXNwb25zZSkpOworICAgICAgICAgICAgQ0ZJbmRleCBoZWFk
ZXJDb3VudCA9IENGRGljdGlvbmFyeUdldENvdW50KGhlYWRlcnMuZ2V0KCkpOworICAgICAgICAg
ICAgVmVjdG9yPGNvbnN0IHZvaWQqLCAxMjg+IGtleXMoaGVhZGVyQ291bnQpOworICAgICAgICAg
ICAgVmVjdG9yPGNvbnN0IHZvaWQqLCAxMjg+IHZhbHVlcyhoZWFkZXJDb3VudCk7CisgICAgICAg
ICAgICBDRkRpY3Rpb25hcnlHZXRLZXlzQW5kVmFsdWVzKGhlYWRlcnMuZ2V0KCksIGtleXMuZGF0
YSgpLCB2YWx1ZXMuZGF0YSgpKTsKKyAgICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgaGVh
ZGVyQ291bnQ7ICsraSkKKyAgICAgICAgICAgICAgICBtX2h0dHBIZWFkZXJGaWVsZHMuc2V0KChD
RlN0cmluZ1JlZilrZXlzW2ldLCAoQ0ZTdHJpbmdSZWYpdmFsdWVzW2ldKTsKKyAgICAgICAgfQor
ICAgIH0KIAotICAgICAgICBSZXRhaW5QdHI8Q0ZEaWN0aW9uYXJ5UmVmPiBoZWFkZXJzKEFkb3B0
Q0YsIENGSFRUUE1lc3NhZ2VDb3B5QWxsSGVhZGVyRmllbGRzKGh0dHBSZXNwb25zZSkpOwotICAg
ICAgICBDRkluZGV4IGhlYWRlckNvdW50ID0gQ0ZEaWN0aW9uYXJ5R2V0Q291bnQoaGVhZGVycy5n
ZXQoKSk7Ci0gICAgICAgIFZlY3Rvcjxjb25zdCB2b2lkKiwgMTI4PiBrZXlzKGhlYWRlckNvdW50
KTsKLSAgICAgICAgVmVjdG9yPGNvbnN0IHZvaWQqLCAxMjg+IHZhbHVlcyhoZWFkZXJDb3VudCk7
Ci0gICAgICAgIENGRGljdGlvbmFyeUdldEtleXNBbmRWYWx1ZXMoaGVhZGVycy5nZXQoKSwga2V5
cy5kYXRhKCksIHZhbHVlcy5kYXRhKCkpOwotICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGhl
YWRlckNvdW50OyArK2kpCi0gICAgICAgICAgICBtX2h0dHBIZWFkZXJGaWVsZHMuc2V0KChDRlN0
cmluZ1JlZilrZXlzW2ldLCAoQ0ZTdHJpbmdSZWYpdmFsdWVzW2ldKTsKLSAgICB9IGVsc2UKLSAg
ICAgICAgbV9odHRwU3RhdHVzQ29kZSA9IDA7CisgICAgbV9pbml0TGV2ZWwgPSBpbml0TGV2ZWw7
CiB9Ci0KKyAgICAKIGJvb2wgUmVzb3VyY2VSZXNwb25zZTo6cGxhdGZvcm1Db21wYXJlKGNvbnN0
IFJlc291cmNlUmVzcG9uc2UmIGEsIGNvbnN0IFJlc291cmNlUmVzcG9uc2UmIGIpCiB7CiAgICAg
cmV0dXJuIENGRXF1YWwoYS5jZlVSTFJlc3BvbnNlKCksIGIuY2ZVUkxSZXNwb25zZSgpKTsKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvbWFjL1Jlc291cmNlUmVzcG9uc2VN
YWMubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9tYWMv
UmVzb3VyY2VSZXNwb25zZU1hYy5tbQkocmV2aXNpb24gODI0NzYpCisrKyBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9uZXR3b3JrL21hYy9SZXNvdXJjZVJlc3BvbnNlTWFjLm1tCSh3b3JraW5nIGNv
cHkpCkBAIC0zNCw2ICszNCw3IEBACiAjaW1wb3J0IDxGb3VuZGF0aW9uL0ZvdW5kYXRpb24uaD4K
ICNpbXBvcnQgPHd0Zi9TdGRMaWJFeHRyYXMuaD4KICNpbXBvcnQgPGxpbWl0cz4KKyNpbmNsdWRl
IDx3dGYvdGV4dC9DU3RyaW5nLmg+CiAKIEBpbnRlcmZhY2UgTlNVUkxSZXNwb25zZSAoRm91bmRh
dGlvblNlY3JldHNXZWJDb3JlS25vd3NBYm91dCkKIC0gKE5TVGltZUludGVydmFsKV9jYWxjdWxh
dGVkRXhwaXJhdGlvbjsKQEAgLTQ1LDYgKzQ2LDExIEBAIHR5cGVkZWYgaW50IE5TSW50ZWdlcjsK
IAogbmFtZXNwYWNlIFdlYkNvcmUgewogCitzdGF0aWMgY29uc3QgTlNTdHJpbmcqIGNvbW1vbkhl
YWRlckZpZWxkc1tdID0geworICAgIEAiQWdlIiwgQCJDYWNoZS1Db250cm9sIiwgQCJEYXRlIiwg
QCJFdGFnIiwgQCJFeHBpcmVzIiwgQCJMYXN0LU1vZGlmaWVkIiwgQCJQcmFnbWEiCit9Oworc3Rh
dGljIGNvbnN0IGludCBudW1Db21tb25IZWFkZXJGaWVsZHMgPSBzaXplb2YoY29tbW9uSGVhZGVy
RmllbGRzKSAvIHNpemVvZihBdG9taWNTdHJpbmcqKTsKKwogTlNVUkxSZXNwb25zZSAqUmVzb3Vy
Y2VSZXNwb25zZTo6bnNVUkxSZXNwb25zZSgpIGNvbnN0CiB7CiAgICAgaWYgKCFtX25zUmVzcG9u
c2UgJiYgIW1faXNOdWxsKSB7CkBAIC02MSw0OCArNjcsNzIgQEAgTlNVUkxSZXNwb25zZSAqUmVz
b3VyY2VSZXNwb25zZTo6bnNVUkxSZQogICAgIHJldHVybiBtX25zUmVzcG9uc2UuZ2V0KCk7CiB9
CiAKLXZvaWQgUmVzb3VyY2VSZXNwb25zZTo6cGxhdGZvcm1MYXp5SW5pdCgpCit2b2lkIFJlc291
cmNlUmVzcG9uc2U6OnBsYXRmb3JtTGF6eUluaXQoSW5pdExldmVsIGluaXRMZXZlbCkKIHsKLSAg
ICBpZiAobV9pc1VwVG9EYXRlKQorICAgIGlmIChtX2luaXRMZXZlbCA+PSBpbml0TGV2ZWwpCiAg
ICAgICAgIHJldHVybjsKLSAgICBtX2lzVXBUb0RhdGUgPSB0cnVlOwogCiAgICAgaWYgKG1faXNO
dWxsKSB7CiAgICAgICAgIEFTU0VSVCghbV9uc1Jlc3BvbnNlKTsKICAgICAgICAgcmV0dXJuOwog
ICAgIH0KLSAgICAKLSAgICBtX3VybCA9IFttX25zUmVzcG9uc2UuZ2V0KCkgVVJMXTsKLSAgICBt
X21pbWVUeXBlID0gW21fbnNSZXNwb25zZS5nZXQoKSBNSU1FVHlwZV07Ci0gICAgbV9leHBlY3Rl
ZENvbnRlbnRMZW5ndGggPSBbbV9uc1Jlc3BvbnNlLmdldCgpIGV4cGVjdGVkQ29udGVudExlbmd0
aF07Ci0gICAgbV90ZXh0RW5jb2RpbmdOYW1lID0gW21fbnNSZXNwb25zZS5nZXQoKSB0ZXh0RW5j
b2RpbmdOYW1lXTsKLQotICAgIC8vIFdvcmthcm91bmQgZm9yIDxyZGFyOi8vcHJvYmxlbS84NzU3
MDg4PiwgY2FuIGJlIHJlbW92ZWQgb25jZSB0aGF0IGlzIGZpeGVkLgotICAgIHVuc2lnbmVkIHRl
eHRFbmNvZGluZ05hbWVMZW5ndGggPSBtX3RleHRFbmNvZGluZ05hbWUubGVuZ3RoKCk7Ci0gICAg
aWYgKHRleHRFbmNvZGluZ05hbWVMZW5ndGggPj0gMiAmJiBtX3RleHRFbmNvZGluZ05hbWVbMFVd
ID09ICciJyAmJiBtX3RleHRFbmNvZGluZ05hbWVbdGV4dEVuY29kaW5nTmFtZUxlbmd0aCAtIDFd
ID09ICciJykKLSAgICAgICAgbV90ZXh0RW5jb2RpbmdOYW1lID0gbV90ZXh0RW5jb2RpbmdOYW1l
LnN1YnN0cmluZygxLCB0ZXh0RW5jb2RpbmdOYW1lTGVuZ3RoIC0gMik7CiAKLSAgICBtX3N1Z2dl
c3RlZEZpbGVuYW1lID0gW21fbnNSZXNwb25zZS5nZXQoKSBzdWdnZXN0ZWRGaWxlbmFtZV07Ci0g
ICAgCi0gICAgaWYgKFttX25zUmVzcG9uc2UuZ2V0KCkgaXNLaW5kT2ZDbGFzczpbTlNIVFRQVVJM
UmVzcG9uc2UgY2xhc3NdXSkgewotICAgICAgICBOU0hUVFBVUkxSZXNwb25zZSAqaHR0cFJlc3Bv
bnNlID0gKE5TSFRUUFVSTFJlc3BvbnNlICopbV9uc1Jlc3BvbnNlLmdldCgpOworICAgIGlmICgo
bV9pbml0TGV2ZWwgPCBDb21tb25GaWVsZHNPbmx5KSAmJiAoaW5pdExldmVsID49IENvbW1vbkZp
ZWxkc09ubHkpKSB7CisgICAgICAgIE5TQXV0b3JlbGVhc2VQb29sKiBwb29sID0gW1tOU0F1dG9y
ZWxlYXNlUG9vbCBhbGxvY10gaW5pdF07CisKKyAgICAgICAgbV9odHRwSGVhZGVyRmllbGRzLmNs
ZWFyKCk7CisgICAgICAgIG1fdXJsID0gW21fbnNSZXNwb25zZS5nZXQoKSBVUkxdOworICAgICAg
ICBtX21pbWVUeXBlID0gW21fbnNSZXNwb25zZS5nZXQoKSBNSU1FVHlwZV07CisgICAgICAgIG1f
ZXhwZWN0ZWRDb250ZW50TGVuZ3RoID0gW21fbnNSZXNwb25zZS5nZXQoKSBleHBlY3RlZENvbnRl
bnRMZW5ndGhdOworICAgICAgICBtX3RleHRFbmNvZGluZ05hbWUgPSBbbV9uc1Jlc3BvbnNlLmdl
dCgpIHRleHRFbmNvZGluZ05hbWVdOworCisgICAgICAgIC8vIFdvcmthcm91bmQgZm9yIDxyZGFy
Oi8vcHJvYmxlbS84NzU3MDg4PiwgY2FuIGJlIHJlbW92ZWQgb25jZSB0aGF0IGlzIGZpeGVkLgor
ICAgICAgICB1bnNpZ25lZCB0ZXh0RW5jb2RpbmdOYW1lTGVuZ3RoID0gbV90ZXh0RW5jb2RpbmdO
YW1lLmxlbmd0aCgpOworICAgICAgICBpZiAodGV4dEVuY29kaW5nTmFtZUxlbmd0aCA+PSAyICYm
IG1fdGV4dEVuY29kaW5nTmFtZVswVV0gPT0gJyInICYmIG1fdGV4dEVuY29kaW5nTmFtZVt0ZXh0
RW5jb2RpbmdOYW1lTGVuZ3RoIC0gMV0gPT0gJyInKQorICAgICAgICAgICAgbV90ZXh0RW5jb2Rp
bmdOYW1lID0gbV90ZXh0RW5jb2RpbmdOYW1lLnN1YnN0cmluZygxLCB0ZXh0RW5jb2RpbmdOYW1l
TGVuZ3RoIC0gMik7CisKKyAgICAgICAgbV9zdWdnZXN0ZWRGaWxlbmFtZSA9IFttX25zUmVzcG9u
c2UuZ2V0KCkgc3VnZ2VzdGVkRmlsZW5hbWVdOworCisgICAgICAgIGlmIChbbV9uc1Jlc3BvbnNl
LmdldCgpIGlzS2luZE9mQ2xhc3M6W05TSFRUUFVSTFJlc3BvbnNlIGNsYXNzXV0pIHsKKyAgICAg
ICAgICAgIE5TSFRUUFVSTFJlc3BvbnNlICpodHRwUmVzcG9uc2UgPSAoTlNIVFRQVVJMUmVzcG9u
c2UgKiltX25zUmVzcG9uc2UuZ2V0KCk7CisKKyAgICAgICAgICAgIG1faHR0cFN0YXR1c0NvZGUg
PSBbaHR0cFJlc3BvbnNlIHN0YXR1c0NvZGVdOworCisgICAgICAgICAgICBOU0RpY3Rpb25hcnkg
KmhlYWRlcnMgPSBbaHR0cFJlc3BvbnNlIGFsbEhlYWRlckZpZWxkc107CisgICAgICAgICAgICAK
KyAgICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbnVtQ29tbW9uSGVhZGVyRmllbGRzOyBp
KyspIHsKKyAgICAgICAgICAgICAgICBpZiAoTlNTdHJpbmcqIGhlYWRlclZhbHVlID0gW2hlYWRl
cnMgb2JqZWN0Rm9yS2V5OmNvbW1vbkhlYWRlckZpZWxkc1tpXV0pCisgICAgICAgICAgICAgICAg
ICAgIG1faHR0cEhlYWRlckZpZWxkcy5zZXQoW2NvbW1vbkhlYWRlckZpZWxkc1tpXSBVVEY4U3Ry
aW5nXSwgaGVhZGVyVmFsdWUpOworICAgICAgICAgICAgfQorICAgICAgICB9IGVsc2UKKyAgICAg
ICAgICAgIG1faHR0cFN0YXR1c0NvZGUgPSAwOwogICAgICAgICAKLSAgICAgICAgbV9odHRwU3Rh
dHVzQ29kZSA9IFtodHRwUmVzcG9uc2Ugc3RhdHVzQ29kZV07CisgICAgICAgIFtwb29sIGRyYWlu
XTsKKyAgICB9CisKKyAgICBpZiAoKG1faW5pdExldmVsIDwgQWxsRmllbGRzKSAmJiAoaW5pdExl
dmVsID49IEFsbEZpZWxkcykgJiYgKFttX25zUmVzcG9uc2UuZ2V0KCkgaXNLaW5kT2ZDbGFzczpb
TlNIVFRQVVJMUmVzcG9uc2UgY2xhc3NdXSkpIHsKKyAgICAgICAgTlNBdXRvcmVsZWFzZVBvb2wq
IHBvb2wgPSBbW05TQXV0b3JlbGVhc2VQb29sIGFsbG9jXSBpbml0XTsKKworICAgICAgICBOU0hU
VFBVUkxSZXNwb25zZSAqaHR0cFJlc3BvbnNlID0gKE5TSFRUUFVSTFJlc3BvbnNlICopbV9uc1Jl
c3BvbnNlLmdldCgpOwogCiAgICAgICAgIFJldGFpblB0cjxOU1N0cmluZz4gaHR0cFN0YXR1c0xp
bmUoQWRvcHROUywgd2tDb3B5TlNVUkxSZXNwb25zZVN0YXR1c0xpbmUobV9uc1Jlc3BvbnNlLmdl
dCgpKSk7CiAgICAgICAgIGlmIChodHRwU3RhdHVzTGluZSkKICAgICAgICAgICAgIG1faHR0cFN0
YXR1c1RleHQgPSBleHRyYWN0UmVhc29uUGhyYXNlRnJvbUhUVFBTdGF0dXNMaW5lKGh0dHBTdGF0
dXNMaW5lLmdldCgpKTsKICAgICAgICAgZWxzZQogICAgICAgICAgICAgbV9odHRwU3RhdHVzVGV4
dCA9ICJPSyI7Ci0gICAgICAgIAorCiAgICAgICAgIE5TRGljdGlvbmFyeSAqaGVhZGVycyA9IFto
dHRwUmVzcG9uc2UgYWxsSGVhZGVyRmllbGRzXTsKICAgICAgICAgTlNFbnVtZXJhdG9yICplID0g
W2hlYWRlcnMga2V5RW51bWVyYXRvcl07CiAgICAgICAgIHdoaWxlIChOU1N0cmluZyAqbmFtZSA9
IFtlIG5leHRPYmplY3RdKQogICAgICAgICAgICAgbV9odHRwSGVhZGVyRmllbGRzLnNldChuYW1l
LCBbaGVhZGVycyBvYmplY3RGb3JLZXk6bmFtZV0pOwotICAgIH0gZWxzZQotICAgICAgICBtX2h0
dHBTdGF0dXNDb2RlID0gMDsKKyAgICAgICAgCisgICAgICAgIFtwb29sIGRyYWluXTsKKyAgICB9
CisKKyAgICBtX2luaXRMZXZlbCA9IGluaXRMZXZlbDsKIH0KIAorICAgIAogYm9vbCBSZXNvdXJj
ZVJlc3BvbnNlOjpwbGF0Zm9ybUNvbXBhcmUoY29uc3QgUmVzb3VyY2VSZXNwb25zZSYgYSwgY29u
c3QgUmVzb3VyY2VSZXNwb25zZSYgYikKIHsKICAgICByZXR1cm4gYS5uc1VSTFJlc3BvbnNlKCkg
PT0gYi5uc1VSTFJlc3BvbnNlKCk7Cg==
</data>
<flag name="review"
          id="80165"
          type_id="1"
          status="-"
          setter="darin"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>87793</attachid>
            <date>2011-03-31 14:54:58 -0700</date>
            <delta_ts>2011-03-31 17:20:39 -0700</delta_ts>
            <desc>Updated patch with windows build fix and changes in response to reviews.</desc>
            <filename>57488-3.patch</filename>
            <type>text/plain</type>
            <size>28875</size>
            <attacher name="Michael Saboff">msaboff</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDgyNTI0KQorKysgU291cmNlL1dlYkNvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsNTcgQEAKKzIwMTEtMDMtMzAgIE1pY2hhZWwg
U2Fib2ZmICA8bXNhYm9mZkBhcHBsZS5jb20+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZ
IChPT1BTISkuCisKKyAgICAgICAgQ2FjaGVkIFJlc291cmNlIE92ZXJoZWFkIFNwYWNlIFVzYWdl
IGFuZCBBY2NvdW50aW5nIEluYWNjdXJhdGUKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTU3NDg4CisKKyAgICAgICAgQ2hhbmdlZCB0aGUgZml4ZWQgb3Zl
cmhlYWQgdmFsdWUgZm9yIFJlc291cmNlUmVzcG9uc2UgdG8gMzgwMCBieXRlcy4KKyAgICAgICAg
TW9kaWZpZWQgUmVzb3VyY2VSZXNwb25zZTo6cGxhdGZvcm1MYXp5SW5pdCgpIHRvIGhhbmRsZSAi
YmFzZSIgbGV2ZWwKKyAgICAgICAgYXR0cmlidXRlcyBvciBhbGwgYXR0cmlidXRlcy4gIFRoZSBi
YXNlIGF0dHJpYnV0ZXMsIGxpa2UgVVJMLCBzdGF0dXMKKyAgICAgICAgY29kZSwgbWltZSB0eXBl
IGFuZCBhIGZldyBoZWFkZXIgZmllbGRzIChtb3N0bHkgY2FjaGUgcmVsYXRlZCkgYXJlCisgICAg
ICAgIHN1aXRhYmxlIGZvciBtb3N0IHJlc291cmNlcy4gIFRoaXMgcmVkdWNlcyB0aGUgcGVyIHJl
c291cmNlIG1lbW9yeQorICAgICAgICBuZWVkcyBieSBvdmVyIDFLIGJ5dGVzIHBlciByZXNvdXJj
ZSB0aHVzIHNhdmluZyBtZW1vcnkgaW4gdGhlIGNhY2hlLgorICAgICAgICBDb2xsZWN0aXZlbHks
IHRoZXNlIHR3byBjaGFuZ2VzIGJyaW5nIHRoZSBvdmVyaGVhZCBtZW1vcnkgY2FsY3VsYXRpb24K
KyAgICAgICAgaW4gbGluZSB3aXRoIHJlYWxpdHkuCisKKyAgICAgICAgTm8gbmV3IHRlc3RzIGFk
ZGVkIGR1ZSB0byBleGlzdGluZyB0ZXN0cyBjb3ZlciBhcmVhcyBvZiBjaGFuZ2UgYW5kCisgICAg
ICAgIHRoZXJlIGlzIG5vIGZ1bmN0aW9uYWwgY2hhbmdlLiAgVGhlIGNoYW5nZSBpcyBsaW1pdGVk
IHRvIHJlZHVjaW5nIAorICAgICAgICBtZW1vcnkgdXNhZ2UgYWxvbmcgZXhpc3RpbmcgcGF0aHMu
CisKKyAgICAgICAgKiBsb2FkZXIvY2FjaGUvQ2FjaGVkUmVzb3VyY2UuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6Q2FjaGVkUmVzb3VyY2U6OmNhblVzZUNhY2hlVmFsaWRhdG9yKToKKyAgICAgICAg
KiBwbGF0Zm9ybS9uZXR3b3JrL1Jlc291cmNlUmVzcG9uc2VCYXNlLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OlJlc291cmNlUmVzcG9uc2VCYXNlOjppc0hUVFApOgorICAgICAgICAoV2ViQ29yZTo6
UmVzb3VyY2VSZXNwb25zZUJhc2U6OnVybCk6CisgICAgICAgIChXZWJDb3JlOjpSZXNvdXJjZVJl
c3BvbnNlQmFzZTo6c2V0VVJMKToKKyAgICAgICAgKFdlYkNvcmU6OlJlc291cmNlUmVzcG9uc2VC
YXNlOjptaW1lVHlwZSk6CisgICAgICAgIChXZWJDb3JlOjpSZXNvdXJjZVJlc3BvbnNlQmFzZTo6
c2V0TWltZVR5cGUpOgorICAgICAgICAoV2ViQ29yZTo6UmVzb3VyY2VSZXNwb25zZUJhc2U6OmV4
cGVjdGVkQ29udGVudExlbmd0aCk6CisgICAgICAgIChXZWJDb3JlOjpSZXNvdXJjZVJlc3BvbnNl
QmFzZTo6c2V0RXhwZWN0ZWRDb250ZW50TGVuZ3RoKToKKyAgICAgICAgKFdlYkNvcmU6OlJlc291
cmNlUmVzcG9uc2VCYXNlOjp0ZXh0RW5jb2RpbmdOYW1lKToKKyAgICAgICAgKFdlYkNvcmU6OlJl
c291cmNlUmVzcG9uc2VCYXNlOjpzZXRUZXh0RW5jb2RpbmdOYW1lKToKKyAgICAgICAgKFdlYkNv
cmU6OlJlc291cmNlUmVzcG9uc2VCYXNlOjpzdWdnZXN0ZWRGaWxlbmFtZSk6CisgICAgICAgIChX
ZWJDb3JlOjpSZXNvdXJjZVJlc3BvbnNlQmFzZTo6c2V0U3VnZ2VzdGVkRmlsZW5hbWUpOgorICAg
ICAgICAoV2ViQ29yZTo6UmVzb3VyY2VSZXNwb25zZUJhc2U6Omh0dHBTdGF0dXNDb2RlKToKKyAg
ICAgICAgKFdlYkNvcmU6OlJlc291cmNlUmVzcG9uc2VCYXNlOjpzZXRIVFRQU3RhdHVzQ29kZSk6
CisgICAgICAgIChXZWJDb3JlOjpSZXNvdXJjZVJlc3BvbnNlQmFzZTo6aHR0cEhlYWRlckZpZWxk
KToKKyAgICAgICAgKFdlYkNvcmU6OlJlc291cmNlUmVzcG9uc2VCYXNlOjpzZXRIVFRQSGVhZGVy
RmllbGQpOgorICAgICAgICAoV2ViQ29yZTo6UmVzb3VyY2VSZXNwb25zZUJhc2U6OnBhcnNlQ2Fj
aGVDb250cm9sRGlyZWN0aXZlcyk6CisgICAgICAgIChXZWJDb3JlOjpSZXNvdXJjZVJlc3BvbnNl
QmFzZTo6aGFzQ2FjaGVWYWxpZGF0b3JGaWVsZHMpOgorICAgICAgICAoV2ViQ29yZTo6UmVzb3Vy
Y2VSZXNwb25zZUJhc2U6OmRhdGUpOgorICAgICAgICAoV2ViQ29yZTo6UmVzb3VyY2VSZXNwb25z
ZUJhc2U6OmFnZSk6CisgICAgICAgIChXZWJDb3JlOjpSZXNvdXJjZVJlc3BvbnNlQmFzZTo6ZXhw
aXJlcyk6CisgICAgICAgIChXZWJDb3JlOjpSZXNvdXJjZVJlc3BvbnNlQmFzZTo6bGFzdE1vZGlm
aWVkKToKKyAgICAgICAgKFdlYkNvcmU6OlJlc291cmNlUmVzcG9uc2VCYXNlOjpsYXp5SW5pdCk6
CisgICAgICAgICogcGxhdGZvcm0vbmV0d29yay9SZXNvdXJjZVJlc3BvbnNlQmFzZS5oOgorICAg
ICAgICAoV2ViQ29yZTo6UmVzb3VyY2VSZXNwb25zZUJhc2U6OnBsYXRmb3JtTGF6eUluaXQpOgor
ICAgICAgICAqIHBsYXRmb3JtL25ldHdvcmsvY2YvUmVzb3VyY2VSZXNwb25zZS5oOgorICAgICAg
ICAoV2ViQ29yZTo6UmVzb3VyY2VSZXNwb25zZTo6UmVzb3VyY2VSZXNwb25zZSk6CisgICAgICAg
IChXZWJDb3JlOjpSZXNvdXJjZVJlc3BvbnNlOjptZW1vcnlVc2FnZSk6CisgICAgICAgICogcGxh
dGZvcm0vbmV0d29yay9jZi9SZXNvdXJjZVJlc3BvbnNlQ0ZOZXQuY3BwOgorICAgICAgICAqIHBs
YXRmb3JtL25ldHdvcmsvbWFjL1Jlc291cmNlUmVzcG9uc2VNYWMubW06CisgICAgICAgIChXZWJD
b3JlOjpSZXNvdXJjZVJlc3BvbnNlOjpwbGF0Zm9ybUxhenlJbml0KToKKwogMjAxMS0wMy0zMCAg
TU9SSVRBIEhhamltZSAgPG1vcnJpdGFAZ29vZ2xlLmNvbT4KIAogICAgICAgICBSZXZpZXdlZCBi
eSBTaW1vbiBGcmFzZXIuCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvY2FjaGUvQ2FjaGVk
UmVzb3VyY2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2xvYWRlci9jYWNoZS9D
YWNoZWRSZXNvdXJjZS5jcHAJKHJldmlzaW9uIDgyNDc2KQorKysgU291cmNlL1dlYkNvcmUvbG9h
ZGVyL2NhY2hlL0NhY2hlZFJlc291cmNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTA0LDEwICs1
MDQsNyBAQCBib29sIENhY2hlZFJlc291cmNlOjpjYW5Vc2VDYWNoZVZhbGlkYXRvCiAKICAgICBp
ZiAobV9yZXNwb25zZS5jYWNoZUNvbnRyb2xDb250YWluc05vU3RvcmUoKSkKICAgICAgICAgcmV0
dXJuIGZhbHNlOwotCi0gICAgREVGSU5FX1NUQVRJQ19MT0NBTChjb25zdCBBdG9taWNTdHJpbmcs
IGxhc3RNb2RpZmllZEhlYWRlciwgKCJsYXN0LW1vZGlmaWVkIikpOwotICAgIERFRklORV9TVEFU
SUNfTE9DQUwoY29uc3QgQXRvbWljU3RyaW5nLCBlVGFnSGVhZGVyLCAoImV0YWciKSk7Ci0gICAg
cmV0dXJuICFtX3Jlc3BvbnNlLmh0dHBIZWFkZXJGaWVsZChsYXN0TW9kaWZpZWRIZWFkZXIpLmlz
RW1wdHkoKSB8fCAhbV9yZXNwb25zZS5odHRwSGVhZGVyRmllbGQoZVRhZ0hlYWRlcikuaXNFbXB0
eSgpOworICAgIHJldHVybiBtX3Jlc3BvbnNlLmhhc0NhY2hlVmFsaWRhdG9yRmllbGRzKCk7CiB9
CiAKIGJvb2wgQ2FjaGVkUmVzb3VyY2U6Om11c3RSZXZhbGlkYXRlRHVlVG9DYWNoZUhlYWRlcnMo
Q2FjaGVQb2xpY3kgY2FjaGVQb2xpY3kpIGNvbnN0CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9uZXR3b3JrL1Jlc291cmNlUmVzcG9uc2VCYXNlLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL1Jlc291cmNlUmVzcG9uc2VCYXNlLmNwcAkocmV2
aXNpb24gODI0NzYpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL1Jlc291cmNl
UmVzcG9uc2VCYXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTA4LDcgKzEwOCw3IEBAIFBhc3NP
d25QdHI8UmVzb3VyY2VSZXNwb25zZT4gUmVzb3VyY2VSZXMKICAgICByZXNwb25zZS0+c2V0SFRU
UFN0YXR1c0NvZGUoZGF0YS0+bV9odHRwU3RhdHVzQ29kZSk7CiAgICAgcmVzcG9uc2UtPnNldEhU
VFBTdGF0dXNUZXh0KGRhdGEtPm1faHR0cFN0YXR1c1RleHQpOwogCi0gICAgcmVzcG9uc2UtPmxh
enlJbml0KCk7CisgICAgcmVzcG9uc2UtPmxhenlJbml0KEFsbEZpZWxkcyk7CiAgICAgcmVzcG9u
c2UtPm1faHR0cEhlYWRlckZpZWxkcy5hZG9wdChkYXRhLT5tX2h0dHBIZWFkZXJzLnJlbGVhc2Uo
KSk7CiAgICAgcmVzcG9uc2UtPnNldExhc3RNb2RpZmllZERhdGUoZGF0YS0+bV9sYXN0TW9kaWZp
ZWREYXRlKTsKICAgICByZXNwb25zZS0+c2V0UmVzb3VyY2VMb2FkVGltaW5nKGRhdGEtPm1fcmVz
b3VyY2VMb2FkVGltaW5nLnJlbGVhc2UoKSk7CkBAIC0xMzUsNyArMTM1LDcgQEAgUGFzc093blB0
cjxDcm9zc1RocmVhZFJlc291cmNlUmVzcG9uc2VEYQogCiBib29sIFJlc291cmNlUmVzcG9uc2VC
YXNlOjppc0hUVFAoKSBjb25zdAogewotICAgIGxhenlJbml0KCk7CisgICAgbGF6eUluaXQoQ29t
bW9uRmllbGRzT25seSk7CiAKICAgICBTdHJpbmcgcHJvdG9jb2wgPSBtX3VybC5wcm90b2NvbCgp
OwogCkBAIC0xNDQsMTI2ICsxNDQsMTQwIEBAIGJvb2wgUmVzb3VyY2VSZXNwb25zZUJhc2U6Omlz
SFRUUCgpIGNvbnMKIAogY29uc3QgS1VSTCYgUmVzb3VyY2VSZXNwb25zZUJhc2U6OnVybCgpIGNv
bnN0CiB7Ci0gICAgbGF6eUluaXQoKTsKLSAgICAKKyAgICBsYXp5SW5pdChDb21tb25GaWVsZHNP
bmx5KTsKKwogICAgIHJldHVybiBtX3VybDsgCiB9CiAKIHZvaWQgUmVzb3VyY2VSZXNwb25zZUJh
c2U6OnNldFVSTChjb25zdCBLVVJMJiB1cmwpCiB7Ci0gICAgbGF6eUluaXQoKTsKKyAgICBsYXp5
SW5pdChDb21tb25GaWVsZHNPbmx5KTsKICAgICBtX2lzTnVsbCA9IGZhbHNlOwotICAgIAorCiAg
ICAgbV91cmwgPSB1cmw7IAogfQogCiBjb25zdCBTdHJpbmcmIFJlc291cmNlUmVzcG9uc2VCYXNl
OjptaW1lVHlwZSgpIGNvbnN0CiB7Ci0gICAgbGF6eUluaXQoKTsKKyAgICBsYXp5SW5pdChDb21t
b25GaWVsZHNPbmx5KTsKIAogICAgIHJldHVybiBtX21pbWVUeXBlOyAKIH0KIAogdm9pZCBSZXNv
dXJjZVJlc3BvbnNlQmFzZTo6c2V0TWltZVR5cGUoY29uc3QgU3RyaW5nJiBtaW1lVHlwZSkKIHsK
LSAgICBsYXp5SW5pdCgpOworICAgIGxhenlJbml0KENvbW1vbkZpZWxkc09ubHkpOwogICAgIG1f
aXNOdWxsID0gZmFsc2U7Ci0gICAgCisKICAgICBtX21pbWVUeXBlID0gbWltZVR5cGU7IAogfQog
CiBsb25nIGxvbmcgUmVzb3VyY2VSZXNwb25zZUJhc2U6OmV4cGVjdGVkQ29udGVudExlbmd0aCgp
IGNvbnN0IAogewotICAgIGxhenlJbml0KCk7CisgICAgbGF6eUluaXQoQ29tbW9uRmllbGRzT25s
eSk7CiAKICAgICByZXR1cm4gbV9leHBlY3RlZENvbnRlbnRMZW5ndGg7CiB9CiAKIHZvaWQgUmVz
b3VyY2VSZXNwb25zZUJhc2U6OnNldEV4cGVjdGVkQ29udGVudExlbmd0aChsb25nIGxvbmcgZXhw
ZWN0ZWRDb250ZW50TGVuZ3RoKQogewotICAgIGxhenlJbml0KCk7CisgICAgbGF6eUluaXQoQ29t
bW9uRmllbGRzT25seSk7CiAgICAgbV9pc051bGwgPSBmYWxzZTsKLSAgICAKKwogICAgIG1fZXhw
ZWN0ZWRDb250ZW50TGVuZ3RoID0gZXhwZWN0ZWRDb250ZW50TGVuZ3RoOyAKIH0KIAogY29uc3Qg
U3RyaW5nJiBSZXNvdXJjZVJlc3BvbnNlQmFzZTo6dGV4dEVuY29kaW5nTmFtZSgpIGNvbnN0CiB7
Ci0gICAgbGF6eUluaXQoKTsKKyAgICBsYXp5SW5pdChDb21tb25GaWVsZHNPbmx5KTsKIAogICAg
IHJldHVybiBtX3RleHRFbmNvZGluZ05hbWU7CiB9CiAKIHZvaWQgUmVzb3VyY2VSZXNwb25zZUJh
c2U6OnNldFRleHRFbmNvZGluZ05hbWUoY29uc3QgU3RyaW5nJiBlbmNvZGluZ05hbWUpCiB7Ci0g
ICAgbGF6eUluaXQoKTsKKyAgICBsYXp5SW5pdChDb21tb25GaWVsZHNPbmx5KTsKICAgICBtX2lz
TnVsbCA9IGZhbHNlOwotICAgIAorCiAgICAgbV90ZXh0RW5jb2RpbmdOYW1lID0gZW5jb2RpbmdO
YW1lOyAKIH0KIAogLy8gRklYTUUgc2hvdWxkIGNvbXB1dGUgdGhpcyBvbiB0aGUgZmx5CiBjb25z
dCBTdHJpbmcmIFJlc291cmNlUmVzcG9uc2VCYXNlOjpzdWdnZXN0ZWRGaWxlbmFtZSgpIGNvbnN0
CiB7Ci0gICAgbGF6eUluaXQoKTsKKyAgICBsYXp5SW5pdChDb21tb25GaWVsZHNPbmx5KTsKIAog
ICAgIHJldHVybiBtX3N1Z2dlc3RlZEZpbGVuYW1lOwogfQogCiB2b2lkIFJlc291cmNlUmVzcG9u
c2VCYXNlOjpzZXRTdWdnZXN0ZWRGaWxlbmFtZShjb25zdCBTdHJpbmcmIHN1Z2dlc3RlZE5hbWUp
CiB7Ci0gICAgbGF6eUluaXQoKTsKKyAgICBsYXp5SW5pdChDb21tb25GaWVsZHNPbmx5KTsKICAg
ICBtX2lzTnVsbCA9IGZhbHNlOwotICAgIAorCiAgICAgbV9zdWdnZXN0ZWRGaWxlbmFtZSA9IHN1
Z2dlc3RlZE5hbWU7IAogfQogCiBpbnQgUmVzb3VyY2VSZXNwb25zZUJhc2U6Omh0dHBTdGF0dXND
b2RlKCkgY29uc3QKIHsKLSAgICBsYXp5SW5pdCgpOworICAgIGxhenlJbml0KENvbW1vbkZpZWxk
c09ubHkpOwogCiAgICAgcmV0dXJuIG1faHR0cFN0YXR1c0NvZGU7CiB9CiAKIHZvaWQgUmVzb3Vy
Y2VSZXNwb25zZUJhc2U6OnNldEhUVFBTdGF0dXNDb2RlKGludCBzdGF0dXNDb2RlKQogewotICAg
IGxhenlJbml0KCk7CisgICAgbGF6eUluaXQoQ29tbW9uRmllbGRzT25seSk7CiAKICAgICBtX2h0
dHBTdGF0dXNDb2RlID0gc3RhdHVzQ29kZTsKIH0KIAogY29uc3QgU3RyaW5nJiBSZXNvdXJjZVJl
c3BvbnNlQmFzZTo6aHR0cFN0YXR1c1RleHQoKSBjb25zdCAKIHsKLSAgICBsYXp5SW5pdCgpOwor
ICAgIGxhenlJbml0KEFsbEZpZWxkcyk7CiAKICAgICByZXR1cm4gbV9odHRwU3RhdHVzVGV4dDsg
CiB9CiAKIHZvaWQgUmVzb3VyY2VSZXNwb25zZUJhc2U6OnNldEhUVFBTdGF0dXNUZXh0KGNvbnN0
IFN0cmluZyYgc3RhdHVzVGV4dCkgCiB7Ci0gICAgbGF6eUluaXQoKTsKKyAgICBsYXp5SW5pdChB
bGxGaWVsZHMpOwogCiAgICAgbV9odHRwU3RhdHVzVGV4dCA9IHN0YXR1c1RleHQ7IAogfQogCiBT
dHJpbmcgUmVzb3VyY2VSZXNwb25zZUJhc2U6Omh0dHBIZWFkZXJGaWVsZChjb25zdCBBdG9taWNT
dHJpbmcmIG5hbWUpIGNvbnN0CiB7Ci0gICAgbGF6eUluaXQoKTsKKyAgICBsYXp5SW5pdChDb21t
b25GaWVsZHNPbmx5KTsKKworICAgIC8vIENoZWNrIHRvIHNlZSBpZiB3ZSBhbHJlYWR5IGhhdmUg
dGhlIGZpZWxkIGJlZm9yZSBjb3B5aW5nIGFsbCBoZWFkZXIgZmllbGRzCisgICAgU3RyaW5nIHZh
bHVlID0gbV9odHRwSGVhZGVyRmllbGRzLmdldChuYW1lKTsKKyAgICBpZiAoIXZhbHVlLmlzRW1w
dHkoKSkgICAgICAgIAorICAgICAgICByZXR1cm4gdmFsdWU7CisKKyAgICBsYXp5SW5pdChBbGxG
aWVsZHMpOwogCiAgICAgcmV0dXJuIG1faHR0cEhlYWRlckZpZWxkcy5nZXQobmFtZSk7IAogfQog
CiBTdHJpbmcgUmVzb3VyY2VSZXNwb25zZUJhc2U6Omh0dHBIZWFkZXJGaWVsZChjb25zdCBjaGFy
KiBuYW1lKSBjb25zdAogewotICAgIGxhenlJbml0KCk7CisgICAgbGF6eUluaXQoQ29tbW9uRmll
bGRzT25seSk7CisKKyAgICAvLyBDaGVjayB0byBzZWUgaWYgd2UgYWxyZWFkeSBoYXZlIGEgdGhl
IGZpZWxkIGJlZm9yZSBjb3B5aW5nIGFsbCBoZWFkZXIgZmllbGRzCisgICAgU3RyaW5nIHZhbHVl
ID0gbV9odHRwSGVhZGVyRmllbGRzLmdldChuYW1lKTsKKyAgICBpZiAoIXZhbHVlLmlzRW1wdHko
KSkKKyAgICAgICAgcmV0dXJuIHZhbHVlOworCisgICAgbGF6eUluaXQoQWxsRmllbGRzKTsKIAog
ICAgIHJldHVybiBtX2h0dHBIZWFkZXJGaWVsZHMuZ2V0KG5hbWUpOyAKIH0KIAogdm9pZCBSZXNv
dXJjZVJlc3BvbnNlQmFzZTo6c2V0SFRUUEhlYWRlckZpZWxkKGNvbnN0IEF0b21pY1N0cmluZyYg
bmFtZSwgY29uc3QgU3RyaW5nJiB2YWx1ZSkKIHsKLSAgICBsYXp5SW5pdCgpOwotICAgIAorICAg
IGxhenlJbml0KEFsbEZpZWxkcyk7CisKICAgICBERUZJTkVfU1RBVElDX0xPQ0FMKGNvbnN0IEF0
b21pY1N0cmluZywgYWdlSGVhZGVyLCAoImFnZSIpKTsKICAgICBERUZJTkVfU1RBVElDX0xPQ0FM
KGNvbnN0IEF0b21pY1N0cmluZywgY2FjaGVDb250cm9sSGVhZGVyLCAoImNhY2hlLWNvbnRyb2wi
KSk7CiAgICAgREVGSU5FX1NUQVRJQ19MT0NBTChjb25zdCBBdG9taWNTdHJpbmcsIGRhdGVIZWFk
ZXIsICgiZGF0ZSIpKTsKQEAgLTI4Niw3ICszMDAsNyBAQCB2b2lkIFJlc291cmNlUmVzcG9uc2VC
YXNlOjpzZXRIVFRQSGVhZGVyCiAKIGNvbnN0IEhUVFBIZWFkZXJNYXAmIFJlc291cmNlUmVzcG9u
c2VCYXNlOjpodHRwSGVhZGVyRmllbGRzKCkgY29uc3QKIHsKLSAgICBsYXp5SW5pdCgpOworICAg
IGxhenlJbml0KEFsbEZpZWxkcyk7CiAKICAgICByZXR1cm4gbV9odHRwSGVhZGVyRmllbGRzOwog
fQpAQCAtMjk1LDcgKzMwOSw3IEBAIHZvaWQgUmVzb3VyY2VSZXNwb25zZUJhc2U6OnBhcnNlQ2Fj
aGVDb24KIHsKICAgICBBU1NFUlQoIW1faGF2ZVBhcnNlZENhY2hlQ29udHJvbEhlYWRlcik7CiAK
LSAgICBsYXp5SW5pdCgpOworICAgIGxhenlJbml0KENvbW1vbkZpZWxkc09ubHkpOwogCiAgICAg
bV9oYXZlUGFyc2VkQ2FjaGVDb250cm9sSGVhZGVyID0gdHJ1ZTsKIApAQCAtMzMyLDEzICszNDYs
MTQgQEAgdm9pZCBSZXNvdXJjZVJlc3BvbnNlQmFzZTo6cGFyc2VDYWNoZUNvbgogICAgICAgICAg
ICAgfQogICAgICAgICB9CiAgICAgfQotICAgICAgICAKKwogICAgIGlmICghbV9jYWNoZUNvbnRy
b2xDb250YWluc05vQ2FjaGUpIHsKICAgICAgICAgLy8gSGFuZGxlIFByYWdtYTogbm8tY2FjaGUK
ICAgICAgICAgLy8gVGhpcyBpcyBkZXByZWNhdGVkIGFuZCBlcXVpdmFsZW50IHRvIENhY2hlLWNv
bnRyb2w6IG5vLWNhY2hlCiAgICAgICAgIC8vIERvbid0IGJvdGhlciB0b2tlbml6aW5nIHRoZSB2
YWx1ZSwgaXQgaXMgbm90IGltcG9ydGFudAogICAgICAgICBERUZJTkVfU1RBVElDX0xPQ0FMKGNv
bnN0IEF0b21pY1N0cmluZywgcHJhZ21hSGVhZGVyLCAoInByYWdtYSIpKTsKICAgICAgICAgU3Ry
aW5nIHByYWdtYVZhbHVlID0gbV9odHRwSGVhZGVyRmllbGRzLmdldChwcmFnbWFIZWFkZXIpOwor
CiAgICAgICAgIG1fY2FjaGVDb250cm9sQ29udGFpbnNOb0NhY2hlID0gcHJhZ21hVmFsdWUubG93
ZXIoKS5jb250YWlucyhub0NhY2hlRGlyZWN0aXZlKTsKICAgICB9CiB9CkBAIC0zNjQsNiArMzc5
LDE1IEBAIGJvb2wgUmVzb3VyY2VSZXNwb25zZUJhc2U6OmNhY2hlQ29udHJvbEMKICAgICByZXR1
cm4gbV9jYWNoZUNvbnRyb2xDb250YWluc011c3RSZXZhbGlkYXRlOwogfQogCitib29sIFJlc291
cmNlUmVzcG9uc2VCYXNlOjpoYXNDYWNoZVZhbGlkYXRvckZpZWxkcygpIGNvbnN0Cit7CisgICAg
bGF6eUluaXQoQ29tbW9uRmllbGRzT25seSk7CisKKyAgICBERUZJTkVfU1RBVElDX0xPQ0FMKGNv
bnN0IEF0b21pY1N0cmluZywgbGFzdE1vZGlmaWVkSGVhZGVyLCAoImxhc3QtbW9kaWZpZWQiKSk7
CisgICAgREVGSU5FX1NUQVRJQ19MT0NBTChjb25zdCBBdG9taWNTdHJpbmcsIGVUYWdIZWFkZXIs
ICgiZXRhZyIpKTsKKyAgICByZXR1cm4gIW1faHR0cEhlYWRlckZpZWxkcy5nZXQobGFzdE1vZGlm
aWVkSGVhZGVyKS5pc0VtcHR5KCkgfHwgIW1faHR0cEhlYWRlckZpZWxkcy5nZXQoZVRhZ0hlYWRl
cikuaXNFbXB0eSgpOworfQorCiBkb3VibGUgUmVzb3VyY2VSZXNwb25zZUJhc2U6OmNhY2hlQ29u
dHJvbE1heEFnZSgpIGNvbnN0CiB7CiAgICAgaWYgKCFtX2hhdmVQYXJzZWRDYWNoZUNvbnRyb2xI
ZWFkZXIpCkBAIC0zODgsNyArNDEyLDcgQEAgc3RhdGljIGRvdWJsZSBwYXJzZURhdGVWYWx1ZUlu
SGVhZGVyKGNvbgogCiBkb3VibGUgUmVzb3VyY2VSZXNwb25zZUJhc2U6OmRhdGUoKSBjb25zdAog
ewotICAgIGxhenlJbml0KCk7CisgICAgbGF6eUluaXQoQ29tbW9uRmllbGRzT25seSk7CiAKICAg
ICBpZiAoIW1faGF2ZVBhcnNlZERhdGVIZWFkZXIpIHsKICAgICAgICAgREVGSU5FX1NUQVRJQ19M
T0NBTChjb25zdCBBdG9taWNTdHJpbmcsIGhlYWRlck5hbWUsICgiZGF0ZSIpKTsKQEAgLTQwMCw4
ICs0MjQsOCBAQCBkb3VibGUgUmVzb3VyY2VSZXNwb25zZUJhc2U6OmRhdGUoKSBjb25zCiAKIGRv
dWJsZSBSZXNvdXJjZVJlc3BvbnNlQmFzZTo6YWdlKCkgY29uc3QKIHsKLSAgICBsYXp5SW5pdCgp
OwotICAgIAorICAgIGxhenlJbml0KENvbW1vbkZpZWxkc09ubHkpOworCiAgICAgaWYgKCFtX2hh
dmVQYXJzZWRBZ2VIZWFkZXIpIHsKICAgICAgICAgREVGSU5FX1NUQVRJQ19MT0NBTChjb25zdCBB
dG9taWNTdHJpbmcsIGhlYWRlck5hbWUsICgiYWdlIikpOwogICAgICAgICBTdHJpbmcgaGVhZGVy
VmFsdWUgPSBtX2h0dHBIZWFkZXJGaWVsZHMuZ2V0KGhlYWRlck5hbWUpOwpAQCAtNDE2LDcgKzQ0
MCw3IEBAIGRvdWJsZSBSZXNvdXJjZVJlc3BvbnNlQmFzZTo6YWdlKCkgY29uc3QKIAogZG91Ymxl
IFJlc291cmNlUmVzcG9uc2VCYXNlOjpleHBpcmVzKCkgY29uc3QKIHsKLSAgICBsYXp5SW5pdCgp
OworICAgIGxhenlJbml0KENvbW1vbkZpZWxkc09ubHkpOwogCiAgICAgaWYgKCFtX2hhdmVQYXJz
ZWRFeHBpcmVzSGVhZGVyKSB7CiAgICAgICAgIERFRklORV9TVEFUSUNfTE9DQUwoY29uc3QgQXRv
bWljU3RyaW5nLCBoZWFkZXJOYW1lLCAoImV4cGlyZXMiKSk7CkBAIC00MjgsOCArNDUyLDggQEAg
ZG91YmxlIFJlc291cmNlUmVzcG9uc2VCYXNlOjpleHBpcmVzKCkgYwogCiBkb3VibGUgUmVzb3Vy
Y2VSZXNwb25zZUJhc2U6Omxhc3RNb2RpZmllZCgpIGNvbnN0CiB7Ci0gICAgbGF6eUluaXQoKTsK
LSAgICAKKyAgICBsYXp5SW5pdChDb21tb25GaWVsZHNPbmx5KTsKKwogICAgIGlmICghbV9oYXZl
UGFyc2VkTGFzdE1vZGlmaWVkSGVhZGVyKSB7CiAgICAgICAgIERFRklORV9TVEFUSUNfTE9DQUwo
Y29uc3QgQXRvbWljU3RyaW5nLCBoZWFkZXJOYW1lLCAoImxhc3QtbW9kaWZpZWQiKSk7CiAgICAg
ICAgIG1fbGFzdE1vZGlmaWVkID0gcGFyc2VEYXRlVmFsdWVJbkhlYWRlcihtX2h0dHBIZWFkZXJG
aWVsZHMsIGhlYWRlck5hbWUpOwpAQCAtNDQwLDcgKzQ2NCw3IEBAIGRvdWJsZSBSZXNvdXJjZVJl
c3BvbnNlQmFzZTo6bGFzdE1vZGlmaWUKIAogYm9vbCBSZXNvdXJjZVJlc3BvbnNlQmFzZTo6aXNB
dHRhY2htZW50KCkgY29uc3QKIHsKLSAgICBsYXp5SW5pdCgpOworICAgIGxhenlJbml0KEFsbEZp
ZWxkcyk7CiAKICAgICBERUZJTkVfU1RBVElDX0xPQ0FMKGNvbnN0IEF0b21pY1N0cmluZywgaGVh
ZGVyTmFtZSwgKCJjb250ZW50LWRpc3Bvc2l0aW9uIikpOwogICAgIFN0cmluZyB2YWx1ZSA9IG1f
aHR0cEhlYWRlckZpZWxkcy5nZXQoaGVhZGVyTmFtZSk7CkBAIC00NTQsMjEgKzQ3OCwyMSBAQCBi
b29sIFJlc291cmNlUmVzcG9uc2VCYXNlOjppc0F0dGFjaG1lbnQoCiAgIAogdm9pZCBSZXNvdXJj
ZVJlc3BvbnNlQmFzZTo6c2V0TGFzdE1vZGlmaWVkRGF0ZSh0aW1lX3QgbGFzdE1vZGlmaWVkRGF0
ZSkKIHsKLSAgICBsYXp5SW5pdCgpOworICAgIGxhenlJbml0KEFsbEZpZWxkcyk7CiAKICAgICBt
X2xhc3RNb2RpZmllZERhdGUgPSBsYXN0TW9kaWZpZWREYXRlOwogfQogCiB0aW1lX3QgUmVzb3Vy
Y2VSZXNwb25zZUJhc2U6Omxhc3RNb2RpZmllZERhdGUoKSBjb25zdAogewotICAgIGxhenlJbml0
KCk7CisgICAgbGF6eUluaXQoQWxsRmllbGRzKTsKIAogICAgIHJldHVybiBtX2xhc3RNb2RpZmll
ZERhdGU7CiB9CiAKIGJvb2wgUmVzb3VyY2VSZXNwb25zZUJhc2U6Ondhc0NhY2hlZCgpIGNvbnN0
CiB7Ci0gICAgbGF6eUluaXQoKTsKKyAgICBsYXp5SW5pdChBbGxGaWVsZHMpOwogCiAgICAgcmV0
dXJuIG1fd2FzQ2FjaGVkOwogfQpAQCAtNDgwLDY1ICs1MDQsNjUgQEAgdm9pZCBSZXNvdXJjZVJl
c3BvbnNlQmFzZTo6c2V0V2FzQ2FjaGVkKAogCiBib29sIFJlc291cmNlUmVzcG9uc2VCYXNlOjpj
b25uZWN0aW9uUmV1c2VkKCkgY29uc3QKIHsKLSAgICBsYXp5SW5pdCgpOworICAgIGxhenlJbml0
KEFsbEZpZWxkcyk7CiAKICAgICByZXR1cm4gbV9jb25uZWN0aW9uUmV1c2VkOwogfQogCiB2b2lk
IFJlc291cmNlUmVzcG9uc2VCYXNlOjpzZXRDb25uZWN0aW9uUmV1c2VkKGJvb2wgY29ubmVjdGlv
blJldXNlZCkKIHsKLSAgICBsYXp5SW5pdCgpOworICAgIGxhenlJbml0KEFsbEZpZWxkcyk7CiAK
ICAgICBtX2Nvbm5lY3Rpb25SZXVzZWQgPSBjb25uZWN0aW9uUmV1c2VkOwogfQogCiB1bnNpZ25l
ZCBSZXNvdXJjZVJlc3BvbnNlQmFzZTo6Y29ubmVjdGlvbklEKCkgY29uc3QKIHsKLSAgICBsYXp5
SW5pdCgpOworICAgIGxhenlJbml0KEFsbEZpZWxkcyk7CiAKICAgICByZXR1cm4gbV9jb25uZWN0
aW9uSUQ7CiB9CiAKIHZvaWQgUmVzb3VyY2VSZXNwb25zZUJhc2U6OnNldENvbm5lY3Rpb25JRCh1
bnNpZ25lZCBjb25uZWN0aW9uSUQpCiB7Ci0gICAgbGF6eUluaXQoKTsKKyAgICBsYXp5SW5pdChB
bGxGaWVsZHMpOwogCiAgICAgbV9jb25uZWN0aW9uSUQgPSBjb25uZWN0aW9uSUQ7CiB9CiAKIFJl
c291cmNlTG9hZFRpbWluZyogUmVzb3VyY2VSZXNwb25zZUJhc2U6OnJlc291cmNlTG9hZFRpbWlu
ZygpIGNvbnN0CiB7Ci0gICAgbGF6eUluaXQoKTsKKyAgICBsYXp5SW5pdChBbGxGaWVsZHMpOwog
CiAgICAgcmV0dXJuIG1fcmVzb3VyY2VMb2FkVGltaW5nLmdldCgpOwogfQogCiB2b2lkIFJlc291
cmNlUmVzcG9uc2VCYXNlOjpzZXRSZXNvdXJjZUxvYWRUaW1pbmcoUGFzc1JlZlB0cjxSZXNvdXJj
ZUxvYWRUaW1pbmc+IHJlc291cmNlTG9hZFRpbWluZykKIHsKLSAgICBsYXp5SW5pdCgpOworICAg
IGxhenlJbml0KEFsbEZpZWxkcyk7CiAKICAgICBtX3Jlc291cmNlTG9hZFRpbWluZyA9IHJlc291
cmNlTG9hZFRpbWluZzsKIH0KIAogUGFzc1JlZlB0cjxSZXNvdXJjZUxvYWRJbmZvPiBSZXNvdXJj
ZVJlc3BvbnNlQmFzZTo6cmVzb3VyY2VMb2FkSW5mbygpIGNvbnN0CiB7Ci0gICAgbGF6eUluaXQo
KTsKKyAgICBsYXp5SW5pdChBbGxGaWVsZHMpOwogCiAgICAgcmV0dXJuIG1fcmVzb3VyY2VMb2Fk
SW5mby5nZXQoKTsKIH0KIAogdm9pZCBSZXNvdXJjZVJlc3BvbnNlQmFzZTo6c2V0UmVzb3VyY2VM
b2FkSW5mbyhQYXNzUmVmUHRyPFJlc291cmNlTG9hZEluZm8+IGxvYWRJbmZvKQogewotICAgIGxh
enlJbml0KCk7CisgICAgbGF6eUluaXQoQWxsRmllbGRzKTsKIAogICAgIG1fcmVzb3VyY2VMb2Fk
SW5mbyA9IGxvYWRJbmZvOwogfQogCi12b2lkIFJlc291cmNlUmVzcG9uc2VCYXNlOjpsYXp5SW5p
dCgpIGNvbnN0Cit2b2lkIFJlc291cmNlUmVzcG9uc2VCYXNlOjpsYXp5SW5pdChJbml0TGV2ZWwg
aW5pdExldmVsKSBjb25zdAogewotICAgIGNvbnN0X2Nhc3Q8UmVzb3VyY2VSZXNwb25zZSo+KHN0
YXRpY19jYXN0PGNvbnN0IFJlc291cmNlUmVzcG9uc2UqPih0aGlzKSktPnBsYXRmb3JtTGF6eUlu
aXQoKTsKKyAgICBjb25zdF9jYXN0PFJlc291cmNlUmVzcG9uc2UqPihzdGF0aWNfY2FzdDxjb25z
dCBSZXNvdXJjZVJlc3BvbnNlKj4odGhpcykpLT5wbGF0Zm9ybUxhenlJbml0KGluaXRMZXZlbCk7
CiB9Ci0KKyAgICAKIGJvb2wgUmVzb3VyY2VSZXNwb25zZUJhc2U6OmNvbXBhcmUoY29uc3QgUmVz
b3VyY2VSZXNwb25zZSYgYSwgY29uc3QgUmVzb3VyY2VSZXNwb25zZSYgYikKIHsKICAgICBpZiAo
YS5pc051bGwoKSAhPSBiLmlzTnVsbCgpKQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
bmV0d29yay9SZXNvdXJjZVJlc3BvbnNlQmFzZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL25ldHdvcmsvUmVzb3VyY2VSZXNwb25zZUJhc2UuaAkocmV2aXNpb24gODI0
NzYpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL1Jlc291cmNlUmVzcG9uc2VC
YXNlLmgJKHdvcmtpbmcgY29weSkKQEAgLTkzLDYgKzkzLDcgQEAgcHVibGljOgogICAgIGJvb2wg
Y2FjaGVDb250cm9sQ29udGFpbnNOb0NhY2hlKCkgY29uc3Q7CiAgICAgYm9vbCBjYWNoZUNvbnRy
b2xDb250YWluc05vU3RvcmUoKSBjb25zdDsKICAgICBib29sIGNhY2hlQ29udHJvbENvbnRhaW5z
TXVzdFJldmFsaWRhdGUoKSBjb25zdDsKKyAgICBib29sIGhhc0NhY2hlVmFsaWRhdG9yRmllbGRz
KCkgY29uc3Q7CiAgICAgZG91YmxlIGNhY2hlQ29udHJvbE1heEFnZSgpIGNvbnN0OwogICAgIGRv
dWJsZSBkYXRlKCkgY29uc3Q7CiAgICAgZG91YmxlIGFnZSgpIGNvbnN0OwpAQCAtMTI0LDEzICsx
MjUsMTkgQEAgcHVibGljOgogICAgIHN0YXRpYyBib29sIGNvbXBhcmUoY29uc3QgUmVzb3VyY2VS
ZXNwb25zZSYsIGNvbnN0IFJlc291cmNlUmVzcG9uc2UmKTsKIAogcHJvdGVjdGVkOgorICAgIGVu
dW0gSW5pdExldmVsIHsKKyAgICAgICAgVW5pbml0aWFsaXplZCA9IDAsCisgICAgICAgIENvbW1v
bkZpZWxkc09ubHksCisgICAgICAgIEFsbEZpZWxkcworICAgIH07CisKICAgICBSZXNvdXJjZVJl
c3BvbnNlQmFzZSgpOwogICAgIFJlc291cmNlUmVzcG9uc2VCYXNlKGNvbnN0IEtVUkwmIHVybCwg
Y29uc3QgU3RyaW5nJiBtaW1lVHlwZSwgbG9uZyBsb25nIGV4cGVjdGVkTGVuZ3RoLCBjb25zdCBT
dHJpbmcmIHRleHRFbmNvZGluZ05hbWUsIGNvbnN0IFN0cmluZyYgZmlsZW5hbWUpOwogCi0gICAg
dm9pZCBsYXp5SW5pdCgpIGNvbnN0OworICAgIHZvaWQgbGF6eUluaXQoSW5pdExldmVsKSBjb25z
dDsKIAogICAgIC8vIFRoZSBSZXNvdXJjZVJlc3BvbnNlIHN1YmNsYXNzIG1heSAic2hhZG93IiB0
aGlzIG1ldGhvZCB0byBsYXppbHkgaW5pdGlhbGl6ZSBwbGF0Zm9ybSBzcGVjaWZpYyBmaWVsZHMK
LSAgICB2b2lkIHBsYXRmb3JtTGF6eUluaXQoKSB7IH0KKyAgICB2b2lkIHBsYXRmb3JtTGF6eUlu
aXQoSW5pdExldmVsKSB7IH0KIAogICAgIC8vIFRoZSBSZXNvdXJjZVJlc3BvbnNlIHN1YmNsYXNz
IG1heSAic2hhZG93IiB0aGlzIG1ldGhvZCB0byBjb21wYXJlIHBsYXRmb3JtIHNwZWNpZmljIGZp
ZWxkcwogICAgIHN0YXRpYyBib29sIHBsYXRmb3JtQ29tcGFyZShjb25zdCBSZXNvdXJjZVJlc3Bv
bnNlJiwgY29uc3QgUmVzb3VyY2VSZXNwb25zZSYpIHsgcmV0dXJuIHRydWU7IH0KSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY2YvUmVzb3VyY2VSZXNwb25zZS5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY2YvUmVzb3VyY2VSZXNw
b25zZS5oCShyZXZpc2lvbiA4MjQ3NikKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdv
cmsvY2YvUmVzb3VyY2VSZXNwb25zZS5oCSh3b3JraW5nIGNvcHkpCkBAIC00NCwyMSArNDQsMjEg
QEAgbmFtZXNwYWNlIFdlYkNvcmUgewogY2xhc3MgUmVzb3VyY2VSZXNwb25zZSA6IHB1YmxpYyBS
ZXNvdXJjZVJlc3BvbnNlQmFzZSB7CiBwdWJsaWM6CiAgICAgUmVzb3VyY2VSZXNwb25zZSgpCi0g
ICAgICAgIDogbV9pc1VwVG9EYXRlKHRydWUpCisgICAgICAgIDogbV9pbml0TGV2ZWwoQWxsRmll
bGRzKQogICAgIHsKICAgICB9CiAKICNpZiBVU0UoQ0ZORVRXT1JLKQogICAgIFJlc291cmNlUmVz
cG9uc2UoQ0ZVUkxSZXNwb25zZVJlZiBjZlJlc3BvbnNlKQogICAgICAgICA6IG1fY2ZSZXNwb25z
ZShjZlJlc3BvbnNlKQotICAgICAgICAsIG1faXNVcFRvRGF0ZShmYWxzZSkKKyAgICAgICAgLCBt
X2luaXRMZXZlbChVbmluaXRpYWxpemVkKQogICAgIHsKICAgICAgICAgbV9pc051bGwgPSAhY2ZS
ZXNwb25zZTsKICAgICB9CiAjZWxzZQogICAgIFJlc291cmNlUmVzcG9uc2UoTlNVUkxSZXNwb25z
ZSogbnNSZXNwb25zZSkKICAgICAgICAgOiBtX25zUmVzcG9uc2UobnNSZXNwb25zZSkKLSAgICAg
ICAgLCBtX2lzVXBUb0RhdGUoZmFsc2UpCisgICAgICAgICwgbV9pbml0TGV2ZWwoVW5pbml0aWFs
aXplZCkKICAgICB7CiAgICAgICAgIG1faXNOdWxsID0gIW5zUmVzcG9uc2U7CiAgICAgfQpAQCAt
NjYsMTUgKzY2LDE1IEBAIHB1YmxpYzoKIAogICAgIFJlc291cmNlUmVzcG9uc2UoY29uc3QgS1VS
TCYgdXJsLCBjb25zdCBTdHJpbmcmIG1pbWVUeXBlLCBsb25nIGxvbmcgZXhwZWN0ZWRMZW5ndGgs
IGNvbnN0IFN0cmluZyYgdGV4dEVuY29kaW5nTmFtZSwgY29uc3QgU3RyaW5nJiBmaWxlbmFtZSkK
ICAgICAgICAgOiBSZXNvdXJjZVJlc3BvbnNlQmFzZSh1cmwsIG1pbWVUeXBlLCBleHBlY3RlZExl
bmd0aCwgdGV4dEVuY29kaW5nTmFtZSwgZmlsZW5hbWUpCi0gICAgICAgICwgbV9pc1VwVG9EYXRl
KHRydWUpCisgICAgICAgICwgbV9pbml0TGV2ZWwoQWxsRmllbGRzKQogICAgIHsKICAgICB9CiAK
ICAgICB1bnNpZ25lZCBtZW1vcnlVc2FnZSgpIGNvbnN0CiAgICAgewogICAgICAgICAvLyBGSVhN
RTogRmluZCBzb21lIHByb2dyYW1tYXRpYyBsaWdod2VpZ2h0IHdheSB0byBjYWxjdWxhdGUgUmVz
b3VyY2VSZXNwb25zZSBhbmQgYXNzb2NpYXRlZCBjbGFzc2VzLgotICAgICAgICAvLyBUaGlzIGlz
IGEgcm91Z2ggZXN0aW1hdGUgb2YgcmVzb3VyY2Ugb3ZlcmhlYWQgYmFzZWQgb24gc3RhdHMgY29s
bGVjdGVkIGZyb20gdGhlIHN0cmVzcyB0ZXN0LgotICAgICAgICByZXR1cm4gMzA3MjsKKyAgICAg
ICAgLy8gVGhpcyBpcyBhIHJvdWdoIGVzdGltYXRlIG9mIHJlc291cmNlIG92ZXJoZWFkIGJhc2Vk
IG9uIHN0YXRzIGNvbGxlY3RlZCBmcm9tIG1lbW9yeSB1c2FnZSB0ZXN0cy4KKyAgICAgICAgcmV0
dXJuIDM4MDA7CiAgICAgICAgIC8qICAxMjgwICogMiArICAgICAgICAgICAgICAgIC8vIGF2ZXJh
Z2Ugc2l6ZSBvZiBSZXNvdXJjZVJlc3BvbnNlLiBEb3VibGVkIHRvIGFjY291bnQgZm9yIHRoZSBX
ZWJDb3JlIGNvcHkgYW5kIHRoZSBDRiBjb3B5LgogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAvLyBNb3N0bHkgZHVlIHRvIHRoZSBzaXplIG9mIHRoZSBoYXNoIG1hcHMsIHRo
ZSBIZWFkZXIgTWFwIHN0cmluZ3MgYW5kIHRoZSBVUkwuCiAgICAgICAgICAgICAyNTYgKiAyICAg
ICAgICAgICAgICAgICAgIC8vIE92ZXJoZWFkIGZyb20gUmVzb3VyY2VSZXF1ZXN0LCBkb3VibGVk
IHRvIGFjY291bnQgZm9yIFdlYkNvcmUgY29weSBhbmQgQ0YgY29weS4KQEAgLTkxLDcgKzkxLDcg
QEAgcHVibGljOgogcHJpdmF0ZToKICAgICBmcmllbmQgY2xhc3MgUmVzb3VyY2VSZXNwb25zZUJh
c2U7CiAKLSAgICB2b2lkIHBsYXRmb3JtTGF6eUluaXQoKTsKKyAgICB2b2lkIHBsYXRmb3JtTGF6
eUluaXQoSW5pdExldmVsKTsKICAgICBQYXNzT3duUHRyPENyb3NzVGhyZWFkUmVzb3VyY2VSZXNw
b25zZURhdGE+IGRvUGxhdGZvcm1Db3B5RGF0YShQYXNzT3duUHRyPENyb3NzVGhyZWFkUmVzb3Vy
Y2VSZXNwb25zZURhdGE+IGRhdGEpIGNvbnN0IHsgcmV0dXJuIGRhdGE7IH0KICAgICB2b2lkIGRv
UGxhdGZvcm1BZG9wdChQYXNzT3duUHRyPENyb3NzVGhyZWFkUmVzb3VyY2VSZXNwb25zZURhdGE+
KSB7IH0KIApAQCAtMTAyLDcgKzEwMiw3IEBAIHByaXZhdGU6CiAjZWxzZQogICAgIG11dGFibGUg
UmV0YWluUHRyPE5TVVJMUmVzcG9uc2U+IG1fbnNSZXNwb25zZTsKICNlbmRpZgotICAgIGJvb2wg
bV9pc1VwVG9EYXRlOworICAgIEluaXRMZXZlbCBtX2luaXRMZXZlbDsKIH07CiAKIHN0cnVjdCBD
cm9zc1RocmVhZFJlc291cmNlUmVzcG9uc2VEYXRhIDogcHVibGljIENyb3NzVGhyZWFkUmVzb3Vy
Y2VSZXNwb25zZURhdGFCYXNlIHsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdv
cmsvY2YvUmVzb3VyY2VSZXNwb25zZUNGTmV0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9uZXR3b3JrL2NmL1Jlc291cmNlUmVzcG9uc2VDRk5ldC5jcHAJKHJldmlz
aW9uIDgyNDc2KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9jZi9SZXNvdXJj
ZVJlc3BvbnNlQ0ZOZXQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00Miw2ICs0MiwxMSBAQCB1c2lu
ZyBuYW1lc3BhY2Ugc3RkOwogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKK3N0YXRpYyBDRlN0cmlu
Z1JlZiBjb25zdCBjb21tb25IZWFkZXJGaWVsZHNbXSA9IHsKKyAgICBDRlNUUigiQWdlIiwgQ0ZT
VFIoIkNhY2hlLUNvbnRyb2wiKSwgQ0ZTVFIoIkRhdGUiKSwgQ0ZTVFIoIkV0YWciKSwgQ0ZTVFIo
IkV4cGlyZXMiKSwgQ0ZTVFIoIkxhc3QtTW9kaWZpZWQiKSwgQ0ZTVFIoIlByYWdtYSIpCit9Owor
c3RhdGljIGNvbnN0IGludCBudW1Db21tb25IZWFkZXJGaWVsZHMgPSBzaXplb2YoY29tbW9uSGVh
ZGVyRmllbGRzKSAvIHNpemVvZihDRlN0cmluZ1JlZik7CisKIENGVVJMUmVzcG9uc2VSZWYgUmVz
b3VyY2VSZXNwb25zZTo6Y2ZVUkxSZXNwb25zZSgpIGNvbnN0CiB7CiAgICAgaWYgKCFtX2NmUmVz
cG9uc2UgJiYgIW1faXNOdWxsKSB7CkBAIC03MCw1MiArNzUsNjYgQEAgc3RhdGljIHRpbWVfdCB0
b1RpbWVUKENGQWJzb2x1dGVUaW1lIHRpbQogICAgIHJldHVybiBtaW4obWF4KG1pblRpbWVBc0Rv
dWJsZSwgdGltZSArIGtDRkFic29sdXRlVGltZUludGVydmFsU2luY2UxOTcwKSwgbWF4VGltZUFz
RG91YmxlKTsKIH0KIAotdm9pZCBSZXNvdXJjZVJlc3BvbnNlOjpwbGF0Zm9ybUxhenlJbml0KCkK
K3ZvaWQgUmVzb3VyY2VSZXNwb25zZTo6cGxhdGZvcm1MYXp5SW5pdChJbml0TGV2ZWwgaW5pdExl
dmVsKQogewotICAgIGlmIChtX2lzVXBUb0RhdGUpCisgICAgaWYgKG1faW5pdExldmVsID4gaW5p
dExldmVsKQogICAgICAgICByZXR1cm47Ci0gICAgbV9pc1VwVG9EYXRlID0gdHJ1ZTsKIAogICAg
IGlmIChtX2lzTnVsbCkgewogICAgICAgICBBU1NFUlQoIW1fY2ZSZXNwb25zZS5nZXQoKSk7CiAg
ICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICAvLyBGSVhNRTogV2UgbWF5IG5lZWQgdG8gZG8g
TUlNRSB0eXBlIHNuaWZmaW5nIGhlcmUgKHVubGVzcyB0aGF0IGlzIGRvbmUgaW4gQ0ZVUkxSZXNw
b25zZUdldE1JTUVUeXBlKS4KLQotICAgIG1fdXJsID0gQ0ZVUkxSZXNwb25zZUdldFVSTChtX2Nm
UmVzcG9uc2UuZ2V0KCkpOwotICAgIG1fbWltZVR5cGUgPSBDRlVSTFJlc3BvbnNlR2V0TUlNRVR5
cGUobV9jZlJlc3BvbnNlLmdldCgpKTsKLSAgICBtX2V4cGVjdGVkQ29udGVudExlbmd0aCA9IENG
VVJMUmVzcG9uc2VHZXRFeHBlY3RlZENvbnRlbnRMZW5ndGgobV9jZlJlc3BvbnNlLmdldCgpKTsK
LSAgICBtX3RleHRFbmNvZGluZ05hbWUgPSBDRlVSTFJlc3BvbnNlR2V0VGV4dEVuY29kaW5nTmFt
ZShtX2NmUmVzcG9uc2UuZ2V0KCkpOwotCi0gICAgLy8gV29ya2Fyb3VuZCBmb3IgPHJkYXI6Ly9w
cm9ibGVtLzg3NTcwODg+LCBjYW4gYmUgcmVtb3ZlZCBvbmNlIHRoYXQgaXMgZml4ZWQuCi0gICAg
dW5zaWduZWQgdGV4dEVuY29kaW5nTmFtZUxlbmd0aCA9IG1fdGV4dEVuY29kaW5nTmFtZS5sZW5n
dGgoKTsKLSAgICBpZiAodGV4dEVuY29kaW5nTmFtZUxlbmd0aCA+PSAyICYmIG1fdGV4dEVuY29k
aW5nTmFtZVswVV0gPT0gJyInICYmIG1fdGV4dEVuY29kaW5nTmFtZVt0ZXh0RW5jb2RpbmdOYW1l
TGVuZ3RoIC0gMV0gPT0gJyInKQotICAgICAgICBtX3RleHRFbmNvZGluZ05hbWUgPSBtX3RleHRF
bmNvZGluZ05hbWUuc3Vic3RyaW5nKDEsIHRleHRFbmNvZGluZ05hbWVMZW5ndGggLSAyKTsKKyAg
ICBpZiAobV9pbml0TGV2ZWwgPCBDb21tb25GaWVsZHNPbmx5ICYmIGluaXRMZXZlbCA+PSBDb21t
b25GaWVsZHNPbmx5KSB7CisgICAgICAgIG1fdXJsID0gQ0ZVUkxSZXNwb25zZUdldFVSTChtX2Nm
UmVzcG9uc2UuZ2V0KCkpOworICAgICAgICBtX21pbWVUeXBlID0gQ0ZVUkxSZXNwb25zZUdldE1J
TUVUeXBlKG1fY2ZSZXNwb25zZS5nZXQoKSk7CisgICAgICAgIG1fZXhwZWN0ZWRDb250ZW50TGVu
Z3RoID0gQ0ZVUkxSZXNwb25zZUdldEV4cGVjdGVkQ29udGVudExlbmd0aChtX2NmUmVzcG9uc2Uu
Z2V0KCkpOworICAgICAgICBtX3RleHRFbmNvZGluZ05hbWUgPSBDRlVSTFJlc3BvbnNlR2V0VGV4
dEVuY29kaW5nTmFtZShtX2NmUmVzcG9uc2UuZ2V0KCkpOworCisgICAgICAgIC8vIFdvcmthcm91
bmQgZm9yIDxyZGFyOi8vcHJvYmxlbS84NzU3MDg4PiwgY2FuIGJlIHJlbW92ZWQgb25jZSB0aGF0
IGlzIGZpeGVkLgorICAgICAgICB1bnNpZ25lZCB0ZXh0RW5jb2RpbmdOYW1lTGVuZ3RoID0gbV90
ZXh0RW5jb2RpbmdOYW1lLmxlbmd0aCgpOworICAgICAgICBpZiAodGV4dEVuY29kaW5nTmFtZUxl
bmd0aCA+PSAyICYmIG1fdGV4dEVuY29kaW5nTmFtZVswVV0gPT0gJyInICYmIG1fdGV4dEVuY29k
aW5nTmFtZVt0ZXh0RW5jb2RpbmdOYW1lTGVuZ3RoIC0gMV0gPT0gJyInKQorICAgICAgICAgICAg
bV90ZXh0RW5jb2RpbmdOYW1lID0gbV90ZXh0RW5jb2RpbmdOYW1lLnN1YnN0cmluZygxLCB0ZXh0
RW5jb2RpbmdOYW1lTGVuZ3RoIC0gMik7CisKKyAgICAgICAgbV9sYXN0TW9kaWZpZWREYXRlID0g
dG9UaW1lVChDRlVSTFJlc3BvbnNlR2V0TGFzdE1vZGlmaWVkRGF0ZShtX2NmUmVzcG9uc2UuZ2V0
KCkpKTsKKworICAgICAgICBSZXRhaW5QdHI8Q0ZTdHJpbmdSZWY+IHN1Z2dlc3RlZEZpbGVuYW1l
KEFkb3B0Q0YsIENGVVJMUmVzcG9uc2VDb3B5U3VnZ2VzdGVkRmlsZW5hbWUobV9jZlJlc3BvbnNl
LmdldCgpKSk7CisgICAgICAgIG1fc3VnZ2VzdGVkRmlsZW5hbWUgPSBzdWdnZXN0ZWRGaWxlbmFt
ZS5nZXQoKTsKKworICAgICAgICBDRkhUVFBNZXNzYWdlUmVmIGh0dHBSZXNwb25zZSA9IENGVVJM
UmVzcG9uc2VHZXRIVFRQUmVzcG9uc2UobV9jZlJlc3BvbnNlLmdldCgpKTsKKyAgICAgICAgaWYg
KGh0dHBSZXNwb25zZSkKKyAgICAgICAgICAgIG1faHR0cFN0YXR1c0NvZGUgPSBDRkhUVFBNZXNz
YWdlR2V0UmVzcG9uc2VTdGF0dXNDb2RlKGh0dHBSZXNwb25zZSk7CisgICAgICAgIGVsc2UKKyAg
ICAgICAgICAgIG1faHR0cFN0YXR1c0NvZGUgPSAwOwogCi0gICAgbV9sYXN0TW9kaWZpZWREYXRl
ID0gdG9UaW1lVChDRlVSTFJlc3BvbnNlR2V0TGFzdE1vZGlmaWVkRGF0ZShtX2NmUmVzcG9uc2Uu
Z2V0KCkpKTsKLQotICAgIFJldGFpblB0cjxDRlN0cmluZ1JlZj4gc3VnZ2VzdGVkRmlsZW5hbWUo
QWRvcHRDRiwgQ0ZVUkxSZXNwb25zZUNvcHlTdWdnZXN0ZWRGaWxlbmFtZShtX2NmUmVzcG9uc2Uu
Z2V0KCkpKTsKLSAgICBtX3N1Z2dlc3RlZEZpbGVuYW1lID0gc3VnZ2VzdGVkRmlsZW5hbWUuZ2V0
KCk7CisgICAgICAgIFJldGFpblB0cjxDRkRpY3Rpb25hcnlSZWY+IGhlYWRlcnMoQWRvcHRDRiwg
Q0ZIVFRQTWVzc2FnZUNvcHlBbGxIZWFkZXJGaWVsZHMoaHR0cFJlc3BvbnNlKSk7CiAKLSAgICBD
RkhUVFBNZXNzYWdlUmVmIGh0dHBSZXNwb25zZSA9IENGVVJMUmVzcG9uc2VHZXRIVFRQUmVzcG9u
c2UobV9jZlJlc3BvbnNlLmdldCgpKTsKLSAgICBpZiAoaHR0cFJlc3BvbnNlKSB7Ci0gICAgICAg
IG1faHR0cFN0YXR1c0NvZGUgPSBDRkhUVFBNZXNzYWdlR2V0UmVzcG9uc2VTdGF0dXNDb2RlKGh0
dHBSZXNwb25zZSk7CisgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbnVtQ29tbW9uSGVhZGVy
RmllbGRzOyBpKyspIHsKKyAgICAgICAgICAgIENGU3RyaW5nUmVmIHZhbHVlOworICAgICAgICAg
ICAgaWYgKENGRGljdGlvbmFyeUdldFZhbHVlSWZQcmVzZW50KGhlYWRlcnMuZ2V0KCksIGNvbW1v
bkhlYWRlckZpZWxkc1tpXSwgJnZhbHVlKSkKKyAgICAgICAgICAgICAgICBtX2h0dHBIZWFkZXJG
aWVsZHMuc2V0KGNvbW1vbkhlYWRlckZpZWxkc1tpXSwgdmFsdWUpOworICAgICAgICB9CisgICAg
fQogCi0gICAgICAgIFJldGFpblB0cjxDRlN0cmluZ1JlZj4gc3RhdHVzTGluZShBZG9wdENGLCBD
RkhUVFBNZXNzYWdlQ29weVJlc3BvbnNlU3RhdHVzTGluZShodHRwUmVzcG9uc2UpKTsKLSAgICAg
ICAgbV9odHRwU3RhdHVzVGV4dCA9IGV4dHJhY3RSZWFzb25QaHJhc2VGcm9tSFRUUFN0YXR1c0xp
bmUoc3RhdHVzTGluZS5nZXQoKSk7CisgICAgaWYgKG1faW5pdExldmVsIDwgQWxsRmllbGRzICYm
IGluaXRMZXZlbCA+PSBBbGxGaWVsZHMpIHsKKyAgICAgICAgQ0ZIVFRQTWVzc2FnZVJlZiBodHRw
UmVzcG9uc2UgPSBDRlVSTFJlc3BvbnNlR2V0SFRUUFJlc3BvbnNlKG1fY2ZSZXNwb25zZS5nZXQo
KSk7CisgICAgICAgIGlmIChodHRwUmVzcG9uc2UpIHsKKyAgICAgICAgICAgIFJldGFpblB0cjxD
RlN0cmluZ1JlZj4gc3RhdHVzTGluZShBZG9wdENGLCBDRkhUVFBNZXNzYWdlQ29weVJlc3BvbnNl
U3RhdHVzTGluZShodHRwUmVzcG9uc2UpKTsKKyAgICAgICAgICAgIG1faHR0cFN0YXR1c1RleHQg
PSBleHRyYWN0UmVhc29uUGhyYXNlRnJvbUhUVFBTdGF0dXNMaW5lKHN0YXR1c0xpbmUuZ2V0KCkp
OworCisgICAgICAgICAgICBSZXRhaW5QdHI8Q0ZEaWN0aW9uYXJ5UmVmPiBoZWFkZXJzKEFkb3B0
Q0YsIENGSFRUUE1lc3NhZ2VDb3B5QWxsSGVhZGVyRmllbGRzKGh0dHBSZXNwb25zZSkpOworICAg
ICAgICAgICAgQ0ZJbmRleCBoZWFkZXJDb3VudCA9IENGRGljdGlvbmFyeUdldENvdW50KGhlYWRl
cnMuZ2V0KCkpOworICAgICAgICAgICAgVmVjdG9yPGNvbnN0IHZvaWQqLCAxMjg+IGtleXMoaGVh
ZGVyQ291bnQpOworICAgICAgICAgICAgVmVjdG9yPGNvbnN0IHZvaWQqLCAxMjg+IHZhbHVlcyho
ZWFkZXJDb3VudCk7CisgICAgICAgICAgICBDRkRpY3Rpb25hcnlHZXRLZXlzQW5kVmFsdWVzKGhl
YWRlcnMuZ2V0KCksIGtleXMuZGF0YSgpLCB2YWx1ZXMuZGF0YSgpKTsKKyAgICAgICAgICAgIGZv
ciAoaW50IGkgPSAwOyBpIDwgaGVhZGVyQ291bnQ7ICsraSkKKyAgICAgICAgICAgICAgICBtX2h0
dHBIZWFkZXJGaWVsZHMuc2V0KChDRlN0cmluZ1JlZilrZXlzW2ldLCAoQ0ZTdHJpbmdSZWYpdmFs
dWVzW2ldKTsKKyAgICAgICAgfQorICAgIH0KIAotICAgICAgICBSZXRhaW5QdHI8Q0ZEaWN0aW9u
YXJ5UmVmPiBoZWFkZXJzKEFkb3B0Q0YsIENGSFRUUE1lc3NhZ2VDb3B5QWxsSGVhZGVyRmllbGRz
KGh0dHBSZXNwb25zZSkpOwotICAgICAgICBDRkluZGV4IGhlYWRlckNvdW50ID0gQ0ZEaWN0aW9u
YXJ5R2V0Q291bnQoaGVhZGVycy5nZXQoKSk7Ci0gICAgICAgIFZlY3Rvcjxjb25zdCB2b2lkKiwg
MTI4PiBrZXlzKGhlYWRlckNvdW50KTsKLSAgICAgICAgVmVjdG9yPGNvbnN0IHZvaWQqLCAxMjg+
IHZhbHVlcyhoZWFkZXJDb3VudCk7Ci0gICAgICAgIENGRGljdGlvbmFyeUdldEtleXNBbmRWYWx1
ZXMoaGVhZGVycy5nZXQoKSwga2V5cy5kYXRhKCksIHZhbHVlcy5kYXRhKCkpOwotICAgICAgICBm
b3IgKGludCBpID0gMDsgaSA8IGhlYWRlckNvdW50OyArK2kpCi0gICAgICAgICAgICBtX2h0dHBI
ZWFkZXJGaWVsZHMuc2V0KChDRlN0cmluZ1JlZilrZXlzW2ldLCAoQ0ZTdHJpbmdSZWYpdmFsdWVz
W2ldKTsKLSAgICB9IGVsc2UKLSAgICAgICAgbV9odHRwU3RhdHVzQ29kZSA9IDA7CisgICAgbV9p
bml0TGV2ZWwgPSBpbml0TGV2ZWw7CiB9Ci0KKyAgICAKIGJvb2wgUmVzb3VyY2VSZXNwb25zZTo6
cGxhdGZvcm1Db21wYXJlKGNvbnN0IFJlc291cmNlUmVzcG9uc2UmIGEsIGNvbnN0IFJlc291cmNl
UmVzcG9uc2UmIGIpCiB7CiAgICAgcmV0dXJuIENGRXF1YWwoYS5jZlVSTFJlc3BvbnNlKCksIGIu
Y2ZVUkxSZXNwb25zZSgpKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsv
bWFjL1Jlc291cmNlUmVzcG9uc2VNYWMubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vbmV0d29yay9tYWMvUmVzb3VyY2VSZXNwb25zZU1hYy5tbQkocmV2aXNpb24gODI0
NzYpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL21hYy9SZXNvdXJjZVJlc3Bv
bnNlTWFjLm1tCSh3b3JraW5nIGNvcHkpCkBAIC0zNCw2ICszNCw3IEBACiAjaW1wb3J0IDxGb3Vu
ZGF0aW9uL0ZvdW5kYXRpb24uaD4KICNpbXBvcnQgPHd0Zi9TdGRMaWJFeHRyYXMuaD4KICNpbXBv
cnQgPGxpbWl0cz4KKyNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+CiAKIEBpbnRlcmZhY2Ug
TlNVUkxSZXNwb25zZSAoRm91bmRhdGlvblNlY3JldHNXZWJDb3JlS25vd3NBYm91dCkKIC0gKE5T
VGltZUludGVydmFsKV9jYWxjdWxhdGVkRXhwaXJhdGlvbjsKQEAgLTQ1LDYgKzQ2LDExIEBAIHR5
cGVkZWYgaW50IE5TSW50ZWdlcjsKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCitzdGF0aWMgTlNT
dHJpbmcqIGNvbnN0IGNvbW1vbkhlYWRlckZpZWxkc1tdID0geworICAgIEAiQWdlIiwgQCJDYWNo
ZS1Db250cm9sIiwgQCJEYXRlIiwgQCJFdGFnIiwgQCJFeHBpcmVzIiwgQCJMYXN0LU1vZGlmaWVk
IiwgQCJQcmFnbWEiCit9Oworc3RhdGljIGNvbnN0IGludCBudW1Db21tb25IZWFkZXJGaWVsZHMg
PSBzaXplb2YoY29tbW9uSGVhZGVyRmllbGRzKSAvIHNpemVvZihBdG9taWNTdHJpbmcqKTsKKwog
TlNVUkxSZXNwb25zZSAqUmVzb3VyY2VSZXNwb25zZTo6bnNVUkxSZXNwb25zZSgpIGNvbnN0CiB7
CiAgICAgaWYgKCFtX25zUmVzcG9uc2UgJiYgIW1faXNOdWxsKSB7CkBAIC02MSw0OCArNjcsNzIg
QEAgTlNVUkxSZXNwb25zZSAqUmVzb3VyY2VSZXNwb25zZTo6bnNVUkxSZQogICAgIHJldHVybiBt
X25zUmVzcG9uc2UuZ2V0KCk7CiB9CiAKLXZvaWQgUmVzb3VyY2VSZXNwb25zZTo6cGxhdGZvcm1M
YXp5SW5pdCgpCit2b2lkIFJlc291cmNlUmVzcG9uc2U6OnBsYXRmb3JtTGF6eUluaXQoSW5pdExl
dmVsIGluaXRMZXZlbCkKIHsKLSAgICBpZiAobV9pc1VwVG9EYXRlKQorICAgIGlmIChtX2luaXRM
ZXZlbCA+PSBpbml0TGV2ZWwpCiAgICAgICAgIHJldHVybjsKLSAgICBtX2lzVXBUb0RhdGUgPSB0
cnVlOwogCiAgICAgaWYgKG1faXNOdWxsKSB7CiAgICAgICAgIEFTU0VSVCghbV9uc1Jlc3BvbnNl
KTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KLSAgICAKLSAgICBtX3VybCA9IFttX25zUmVzcG9u
c2UuZ2V0KCkgVVJMXTsKLSAgICBtX21pbWVUeXBlID0gW21fbnNSZXNwb25zZS5nZXQoKSBNSU1F
VHlwZV07Ci0gICAgbV9leHBlY3RlZENvbnRlbnRMZW5ndGggPSBbbV9uc1Jlc3BvbnNlLmdldCgp
IGV4cGVjdGVkQ29udGVudExlbmd0aF07Ci0gICAgbV90ZXh0RW5jb2RpbmdOYW1lID0gW21fbnNS
ZXNwb25zZS5nZXQoKSB0ZXh0RW5jb2RpbmdOYW1lXTsKLQotICAgIC8vIFdvcmthcm91bmQgZm9y
IDxyZGFyOi8vcHJvYmxlbS84NzU3MDg4PiwgY2FuIGJlIHJlbW92ZWQgb25jZSB0aGF0IGlzIGZp
eGVkLgotICAgIHVuc2lnbmVkIHRleHRFbmNvZGluZ05hbWVMZW5ndGggPSBtX3RleHRFbmNvZGlu
Z05hbWUubGVuZ3RoKCk7Ci0gICAgaWYgKHRleHRFbmNvZGluZ05hbWVMZW5ndGggPj0gMiAmJiBt
X3RleHRFbmNvZGluZ05hbWVbMFVdID09ICciJyAmJiBtX3RleHRFbmNvZGluZ05hbWVbdGV4dEVu
Y29kaW5nTmFtZUxlbmd0aCAtIDFdID09ICciJykKLSAgICAgICAgbV90ZXh0RW5jb2RpbmdOYW1l
ID0gbV90ZXh0RW5jb2RpbmdOYW1lLnN1YnN0cmluZygxLCB0ZXh0RW5jb2RpbmdOYW1lTGVuZ3Ro
IC0gMik7CiAKLSAgICBtX3N1Z2dlc3RlZEZpbGVuYW1lID0gW21fbnNSZXNwb25zZS5nZXQoKSBz
dWdnZXN0ZWRGaWxlbmFtZV07Ci0gICAgCi0gICAgaWYgKFttX25zUmVzcG9uc2UuZ2V0KCkgaXNL
aW5kT2ZDbGFzczpbTlNIVFRQVVJMUmVzcG9uc2UgY2xhc3NdXSkgewotICAgICAgICBOU0hUVFBV
UkxSZXNwb25zZSAqaHR0cFJlc3BvbnNlID0gKE5TSFRUUFVSTFJlc3BvbnNlICopbV9uc1Jlc3Bv
bnNlLmdldCgpOworICAgIGlmIChtX2luaXRMZXZlbCA8IENvbW1vbkZpZWxkc09ubHkgJiYgaW5p
dExldmVsID49IENvbW1vbkZpZWxkc09ubHkpIHsKKyAgICAgICAgTlNBdXRvcmVsZWFzZVBvb2wq
IHBvb2wgPSBbW05TQXV0b3JlbGVhc2VQb29sIGFsbG9jXSBpbml0XTsKKworICAgICAgICBtX2h0
dHBIZWFkZXJGaWVsZHMuY2xlYXIoKTsKKyAgICAgICAgbV91cmwgPSBbbV9uc1Jlc3BvbnNlLmdl
dCgpIFVSTF07CisgICAgICAgIG1fbWltZVR5cGUgPSBbbV9uc1Jlc3BvbnNlLmdldCgpIE1JTUVU
eXBlXTsKKyAgICAgICAgbV9leHBlY3RlZENvbnRlbnRMZW5ndGggPSBbbV9uc1Jlc3BvbnNlLmdl
dCgpIGV4cGVjdGVkQ29udGVudExlbmd0aF07CisgICAgICAgIG1fdGV4dEVuY29kaW5nTmFtZSA9
IFttX25zUmVzcG9uc2UuZ2V0KCkgdGV4dEVuY29kaW5nTmFtZV07CisKKyAgICAgICAgLy8gV29y
a2Fyb3VuZCBmb3IgPHJkYXI6Ly9wcm9ibGVtLzg3NTcwODg+LCBjYW4gYmUgcmVtb3ZlZCBvbmNl
IHRoYXQgaXMgZml4ZWQuCisgICAgICAgIHVuc2lnbmVkIHRleHRFbmNvZGluZ05hbWVMZW5ndGgg
PSBtX3RleHRFbmNvZGluZ05hbWUubGVuZ3RoKCk7CisgICAgICAgIGlmICh0ZXh0RW5jb2RpbmdO
YW1lTGVuZ3RoID49IDIgJiYgbV90ZXh0RW5jb2RpbmdOYW1lWzBVXSA9PSAnIicgJiYgbV90ZXh0
RW5jb2RpbmdOYW1lW3RleHRFbmNvZGluZ05hbWVMZW5ndGggLSAxXSA9PSAnIicpCisgICAgICAg
ICAgICBtX3RleHRFbmNvZGluZ05hbWUgPSBtX3RleHRFbmNvZGluZ05hbWUuc3Vic3RyaW5nKDEs
IHRleHRFbmNvZGluZ05hbWVMZW5ndGggLSAyKTsKKworICAgICAgICBtX3N1Z2dlc3RlZEZpbGVu
YW1lID0gW21fbnNSZXNwb25zZS5nZXQoKSBzdWdnZXN0ZWRGaWxlbmFtZV07CisKKyAgICAgICAg
aWYgKFttX25zUmVzcG9uc2UuZ2V0KCkgaXNLaW5kT2ZDbGFzczpbTlNIVFRQVVJMUmVzcG9uc2Ug
Y2xhc3NdXSkgeworICAgICAgICAgICAgTlNIVFRQVVJMUmVzcG9uc2UgKmh0dHBSZXNwb25zZSA9
IChOU0hUVFBVUkxSZXNwb25zZSAqKW1fbnNSZXNwb25zZS5nZXQoKTsKKworICAgICAgICAgICAg
bV9odHRwU3RhdHVzQ29kZSA9IFtodHRwUmVzcG9uc2Ugc3RhdHVzQ29kZV07CisKKyAgICAgICAg
ICAgIE5TRGljdGlvbmFyeSAqaGVhZGVycyA9IFtodHRwUmVzcG9uc2UgYWxsSGVhZGVyRmllbGRz
XTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBudW1Db21t
b25IZWFkZXJGaWVsZHM7IGkrKykgeworICAgICAgICAgICAgICAgIGlmIChOU1N0cmluZyogaGVh
ZGVyVmFsdWUgPSBbaGVhZGVycyBvYmplY3RGb3JLZXk6Y29tbW9uSGVhZGVyRmllbGRzW2ldXSkK
KyAgICAgICAgICAgICAgICAgICAgbV9odHRwSGVhZGVyRmllbGRzLnNldChbY29tbW9uSGVhZGVy
RmllbGRzW2ldIFVURjhTdHJpbmddLCBoZWFkZXJWYWx1ZSk7CisgICAgICAgICAgICB9CisgICAg
ICAgIH0gZWxzZQorICAgICAgICAgICAgbV9odHRwU3RhdHVzQ29kZSA9IDA7CiAgICAgICAgIAot
ICAgICAgICBtX2h0dHBTdGF0dXNDb2RlID0gW2h0dHBSZXNwb25zZSBzdGF0dXNDb2RlXTsKKyAg
ICAgICAgW3Bvb2wgZHJhaW5dOworICAgIH0KKworICAgIGlmIChtX2luaXRMZXZlbCA8IEFsbEZp
ZWxkcyAmJiBpbml0TGV2ZWwgPj0gQWxsRmllbGRzICYmIFttX25zUmVzcG9uc2UuZ2V0KCkgaXNL
aW5kT2ZDbGFzczpbTlNIVFRQVVJMUmVzcG9uc2UgY2xhc3NdXSkgeworICAgICAgICBOU0F1dG9y
ZWxlYXNlUG9vbCogcG9vbCA9IFtbTlNBdXRvcmVsZWFzZVBvb2wgYWxsb2NdIGluaXRdOworCisg
ICAgICAgIE5TSFRUUFVSTFJlc3BvbnNlICpodHRwUmVzcG9uc2UgPSAoTlNIVFRQVVJMUmVzcG9u
c2UgKiltX25zUmVzcG9uc2UuZ2V0KCk7CiAKICAgICAgICAgUmV0YWluUHRyPE5TU3RyaW5nPiBo
dHRwU3RhdHVzTGluZShBZG9wdE5TLCB3a0NvcHlOU1VSTFJlc3BvbnNlU3RhdHVzTGluZShtX25z
UmVzcG9uc2UuZ2V0KCkpKTsKICAgICAgICAgaWYgKGh0dHBTdGF0dXNMaW5lKQogICAgICAgICAg
ICAgbV9odHRwU3RhdHVzVGV4dCA9IGV4dHJhY3RSZWFzb25QaHJhc2VGcm9tSFRUUFN0YXR1c0xp
bmUoaHR0cFN0YXR1c0xpbmUuZ2V0KCkpOwogICAgICAgICBlbHNlCiAgICAgICAgICAgICBtX2h0
dHBTdGF0dXNUZXh0ID0gIk9LIjsKLSAgICAgICAgCisKICAgICAgICAgTlNEaWN0aW9uYXJ5ICpo
ZWFkZXJzID0gW2h0dHBSZXNwb25zZSBhbGxIZWFkZXJGaWVsZHNdOwogICAgICAgICBOU0VudW1l
cmF0b3IgKmUgPSBbaGVhZGVycyBrZXlFbnVtZXJhdG9yXTsKICAgICAgICAgd2hpbGUgKE5TU3Ry
aW5nICpuYW1lID0gW2UgbmV4dE9iamVjdF0pCiAgICAgICAgICAgICBtX2h0dHBIZWFkZXJGaWVs
ZHMuc2V0KG5hbWUsIFtoZWFkZXJzIG9iamVjdEZvcktleTpuYW1lXSk7Ci0gICAgfSBlbHNlCi0g
ICAgICAgIG1faHR0cFN0YXR1c0NvZGUgPSAwOworICAgICAgICAKKyAgICAgICAgW3Bvb2wgZHJh
aW5dOworICAgIH0KKworICAgIG1faW5pdExldmVsID0gaW5pdExldmVsOwogfQogCisgICAgCiBi
b29sIFJlc291cmNlUmVzcG9uc2U6OnBsYXRmb3JtQ29tcGFyZShjb25zdCBSZXNvdXJjZVJlc3Bv
bnNlJiBhLCBjb25zdCBSZXNvdXJjZVJlc3BvbnNlJiBiKQogewogICAgIHJldHVybiBhLm5zVVJM
UmVzcG9uc2UoKSA9PSBiLm5zVVJMUmVzcG9uc2UoKTsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>87802</attachid>
            <date>2011-03-31 16:16:49 -0700</date>
            <delta_ts>2011-03-31 17:20:39 -0700</delta_ts>
            <desc>Fixed missing closing paren</desc>
            <filename>57488-4.patch</filename>
            <type>text/plain</type>
            <size>28876</size>
            <attacher name="Michael Saboff">msaboff</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDgyNTI0KQorKysgU291cmNlL1dlYkNvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsNTcgQEAKKzIwMTEtMDMtMzAgIE1pY2hhZWwg
U2Fib2ZmICA8bXNhYm9mZkBhcHBsZS5jb20+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZ
IChPT1BTISkuCisKKyAgICAgICAgQ2FjaGVkIFJlc291cmNlIE92ZXJoZWFkIFNwYWNlIFVzYWdl
IGFuZCBBY2NvdW50aW5nIEluYWNjdXJhdGUKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTU3NDg4CisKKyAgICAgICAgQ2hhbmdlZCB0aGUgZml4ZWQgb3Zl
cmhlYWQgdmFsdWUgZm9yIFJlc291cmNlUmVzcG9uc2UgdG8gMzgwMCBieXRlcy4KKyAgICAgICAg
TW9kaWZpZWQgUmVzb3VyY2VSZXNwb25zZTo6cGxhdGZvcm1MYXp5SW5pdCgpIHRvIGhhbmRsZSAi
YmFzZSIgbGV2ZWwKKyAgICAgICAgYXR0cmlidXRlcyBvciBhbGwgYXR0cmlidXRlcy4gIFRoZSBi
YXNlIGF0dHJpYnV0ZXMsIGxpa2UgVVJMLCBzdGF0dXMKKyAgICAgICAgY29kZSwgbWltZSB0eXBl
IGFuZCBhIGZldyBoZWFkZXIgZmllbGRzIChtb3N0bHkgY2FjaGUgcmVsYXRlZCkgYXJlCisgICAg
ICAgIHN1aXRhYmxlIGZvciBtb3N0IHJlc291cmNlcy4gIFRoaXMgcmVkdWNlcyB0aGUgcGVyIHJl
c291cmNlIG1lbW9yeQorICAgICAgICBuZWVkcyBieSBvdmVyIDFLIGJ5dGVzIHBlciByZXNvdXJj
ZSB0aHVzIHNhdmluZyBtZW1vcnkgaW4gdGhlIGNhY2hlLgorICAgICAgICBDb2xsZWN0aXZlbHks
IHRoZXNlIHR3byBjaGFuZ2VzIGJyaW5nIHRoZSBvdmVyaGVhZCBtZW1vcnkgY2FsY3VsYXRpb24K
KyAgICAgICAgaW4gbGluZSB3aXRoIHJlYWxpdHkuCisKKyAgICAgICAgTm8gbmV3IHRlc3RzIGFk
ZGVkIGR1ZSB0byBleGlzdGluZyB0ZXN0cyBjb3ZlciBhcmVhcyBvZiBjaGFuZ2UgYW5kCisgICAg
ICAgIHRoZXJlIGlzIG5vIGZ1bmN0aW9uYWwgY2hhbmdlLiAgVGhlIGNoYW5nZSBpcyBsaW1pdGVk
IHRvIHJlZHVjaW5nIAorICAgICAgICBtZW1vcnkgdXNhZ2UgYWxvbmcgZXhpc3RpbmcgcGF0aHMu
CisKKyAgICAgICAgKiBsb2FkZXIvY2FjaGUvQ2FjaGVkUmVzb3VyY2UuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6Q2FjaGVkUmVzb3VyY2U6OmNhblVzZUNhY2hlVmFsaWRhdG9yKToKKyAgICAgICAg
KiBwbGF0Zm9ybS9uZXR3b3JrL1Jlc291cmNlUmVzcG9uc2VCYXNlLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OlJlc291cmNlUmVzcG9uc2VCYXNlOjppc0hUVFApOgorICAgICAgICAoV2ViQ29yZTo6
UmVzb3VyY2VSZXNwb25zZUJhc2U6OnVybCk6CisgICAgICAgIChXZWJDb3JlOjpSZXNvdXJjZVJl
c3BvbnNlQmFzZTo6c2V0VVJMKToKKyAgICAgICAgKFdlYkNvcmU6OlJlc291cmNlUmVzcG9uc2VC
YXNlOjptaW1lVHlwZSk6CisgICAgICAgIChXZWJDb3JlOjpSZXNvdXJjZVJlc3BvbnNlQmFzZTo6
c2V0TWltZVR5cGUpOgorICAgICAgICAoV2ViQ29yZTo6UmVzb3VyY2VSZXNwb25zZUJhc2U6OmV4
cGVjdGVkQ29udGVudExlbmd0aCk6CisgICAgICAgIChXZWJDb3JlOjpSZXNvdXJjZVJlc3BvbnNl
QmFzZTo6c2V0RXhwZWN0ZWRDb250ZW50TGVuZ3RoKToKKyAgICAgICAgKFdlYkNvcmU6OlJlc291
cmNlUmVzcG9uc2VCYXNlOjp0ZXh0RW5jb2RpbmdOYW1lKToKKyAgICAgICAgKFdlYkNvcmU6OlJl
c291cmNlUmVzcG9uc2VCYXNlOjpzZXRUZXh0RW5jb2RpbmdOYW1lKToKKyAgICAgICAgKFdlYkNv
cmU6OlJlc291cmNlUmVzcG9uc2VCYXNlOjpzdWdnZXN0ZWRGaWxlbmFtZSk6CisgICAgICAgIChX
ZWJDb3JlOjpSZXNvdXJjZVJlc3BvbnNlQmFzZTo6c2V0U3VnZ2VzdGVkRmlsZW5hbWUpOgorICAg
ICAgICAoV2ViQ29yZTo6UmVzb3VyY2VSZXNwb25zZUJhc2U6Omh0dHBTdGF0dXNDb2RlKToKKyAg
ICAgICAgKFdlYkNvcmU6OlJlc291cmNlUmVzcG9uc2VCYXNlOjpzZXRIVFRQU3RhdHVzQ29kZSk6
CisgICAgICAgIChXZWJDb3JlOjpSZXNvdXJjZVJlc3BvbnNlQmFzZTo6aHR0cEhlYWRlckZpZWxk
KToKKyAgICAgICAgKFdlYkNvcmU6OlJlc291cmNlUmVzcG9uc2VCYXNlOjpzZXRIVFRQSGVhZGVy
RmllbGQpOgorICAgICAgICAoV2ViQ29yZTo6UmVzb3VyY2VSZXNwb25zZUJhc2U6OnBhcnNlQ2Fj
aGVDb250cm9sRGlyZWN0aXZlcyk6CisgICAgICAgIChXZWJDb3JlOjpSZXNvdXJjZVJlc3BvbnNl
QmFzZTo6aGFzQ2FjaGVWYWxpZGF0b3JGaWVsZHMpOgorICAgICAgICAoV2ViQ29yZTo6UmVzb3Vy
Y2VSZXNwb25zZUJhc2U6OmRhdGUpOgorICAgICAgICAoV2ViQ29yZTo6UmVzb3VyY2VSZXNwb25z
ZUJhc2U6OmFnZSk6CisgICAgICAgIChXZWJDb3JlOjpSZXNvdXJjZVJlc3BvbnNlQmFzZTo6ZXhw
aXJlcyk6CisgICAgICAgIChXZWJDb3JlOjpSZXNvdXJjZVJlc3BvbnNlQmFzZTo6bGFzdE1vZGlm
aWVkKToKKyAgICAgICAgKFdlYkNvcmU6OlJlc291cmNlUmVzcG9uc2VCYXNlOjpsYXp5SW5pdCk6
CisgICAgICAgICogcGxhdGZvcm0vbmV0d29yay9SZXNvdXJjZVJlc3BvbnNlQmFzZS5oOgorICAg
ICAgICAoV2ViQ29yZTo6UmVzb3VyY2VSZXNwb25zZUJhc2U6OnBsYXRmb3JtTGF6eUluaXQpOgor
ICAgICAgICAqIHBsYXRmb3JtL25ldHdvcmsvY2YvUmVzb3VyY2VSZXNwb25zZS5oOgorICAgICAg
ICAoV2ViQ29yZTo6UmVzb3VyY2VSZXNwb25zZTo6UmVzb3VyY2VSZXNwb25zZSk6CisgICAgICAg
IChXZWJDb3JlOjpSZXNvdXJjZVJlc3BvbnNlOjptZW1vcnlVc2FnZSk6CisgICAgICAgICogcGxh
dGZvcm0vbmV0d29yay9jZi9SZXNvdXJjZVJlc3BvbnNlQ0ZOZXQuY3BwOgorICAgICAgICAqIHBs
YXRmb3JtL25ldHdvcmsvbWFjL1Jlc291cmNlUmVzcG9uc2VNYWMubW06CisgICAgICAgIChXZWJD
b3JlOjpSZXNvdXJjZVJlc3BvbnNlOjpwbGF0Zm9ybUxhenlJbml0KToKKwogMjAxMS0wMy0zMCAg
TU9SSVRBIEhhamltZSAgPG1vcnJpdGFAZ29vZ2xlLmNvbT4KIAogICAgICAgICBSZXZpZXdlZCBi
eSBTaW1vbiBGcmFzZXIuCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvY2FjaGUvQ2FjaGVk
UmVzb3VyY2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2xvYWRlci9jYWNoZS9D
YWNoZWRSZXNvdXJjZS5jcHAJKHJldmlzaW9uIDgyNDc2KQorKysgU291cmNlL1dlYkNvcmUvbG9h
ZGVyL2NhY2hlL0NhY2hlZFJlc291cmNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTA0LDEwICs1
MDQsNyBAQCBib29sIENhY2hlZFJlc291cmNlOjpjYW5Vc2VDYWNoZVZhbGlkYXRvCiAKICAgICBp
ZiAobV9yZXNwb25zZS5jYWNoZUNvbnRyb2xDb250YWluc05vU3RvcmUoKSkKICAgICAgICAgcmV0
dXJuIGZhbHNlOwotCi0gICAgREVGSU5FX1NUQVRJQ19MT0NBTChjb25zdCBBdG9taWNTdHJpbmcs
IGxhc3RNb2RpZmllZEhlYWRlciwgKCJsYXN0LW1vZGlmaWVkIikpOwotICAgIERFRklORV9TVEFU
SUNfTE9DQUwoY29uc3QgQXRvbWljU3RyaW5nLCBlVGFnSGVhZGVyLCAoImV0YWciKSk7Ci0gICAg
cmV0dXJuICFtX3Jlc3BvbnNlLmh0dHBIZWFkZXJGaWVsZChsYXN0TW9kaWZpZWRIZWFkZXIpLmlz
RW1wdHkoKSB8fCAhbV9yZXNwb25zZS5odHRwSGVhZGVyRmllbGQoZVRhZ0hlYWRlcikuaXNFbXB0
eSgpOworICAgIHJldHVybiBtX3Jlc3BvbnNlLmhhc0NhY2hlVmFsaWRhdG9yRmllbGRzKCk7CiB9
CiAKIGJvb2wgQ2FjaGVkUmVzb3VyY2U6Om11c3RSZXZhbGlkYXRlRHVlVG9DYWNoZUhlYWRlcnMo
Q2FjaGVQb2xpY3kgY2FjaGVQb2xpY3kpIGNvbnN0CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9uZXR3b3JrL1Jlc291cmNlUmVzcG9uc2VCYXNlLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL1Jlc291cmNlUmVzcG9uc2VCYXNlLmNwcAkocmV2
aXNpb24gODI0NzYpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL1Jlc291cmNl
UmVzcG9uc2VCYXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTA4LDcgKzEwOCw3IEBAIFBhc3NP
d25QdHI8UmVzb3VyY2VSZXNwb25zZT4gUmVzb3VyY2VSZXMKICAgICByZXNwb25zZS0+c2V0SFRU
UFN0YXR1c0NvZGUoZGF0YS0+bV9odHRwU3RhdHVzQ29kZSk7CiAgICAgcmVzcG9uc2UtPnNldEhU
VFBTdGF0dXNUZXh0KGRhdGEtPm1faHR0cFN0YXR1c1RleHQpOwogCi0gICAgcmVzcG9uc2UtPmxh
enlJbml0KCk7CisgICAgcmVzcG9uc2UtPmxhenlJbml0KEFsbEZpZWxkcyk7CiAgICAgcmVzcG9u
c2UtPm1faHR0cEhlYWRlckZpZWxkcy5hZG9wdChkYXRhLT5tX2h0dHBIZWFkZXJzLnJlbGVhc2Uo
KSk7CiAgICAgcmVzcG9uc2UtPnNldExhc3RNb2RpZmllZERhdGUoZGF0YS0+bV9sYXN0TW9kaWZp
ZWREYXRlKTsKICAgICByZXNwb25zZS0+c2V0UmVzb3VyY2VMb2FkVGltaW5nKGRhdGEtPm1fcmVz
b3VyY2VMb2FkVGltaW5nLnJlbGVhc2UoKSk7CkBAIC0xMzUsNyArMTM1LDcgQEAgUGFzc093blB0
cjxDcm9zc1RocmVhZFJlc291cmNlUmVzcG9uc2VEYQogCiBib29sIFJlc291cmNlUmVzcG9uc2VC
YXNlOjppc0hUVFAoKSBjb25zdAogewotICAgIGxhenlJbml0KCk7CisgICAgbGF6eUluaXQoQ29t
bW9uRmllbGRzT25seSk7CiAKICAgICBTdHJpbmcgcHJvdG9jb2wgPSBtX3VybC5wcm90b2NvbCgp
OwogCkBAIC0xNDQsMTI2ICsxNDQsMTQwIEBAIGJvb2wgUmVzb3VyY2VSZXNwb25zZUJhc2U6Omlz
SFRUUCgpIGNvbnMKIAogY29uc3QgS1VSTCYgUmVzb3VyY2VSZXNwb25zZUJhc2U6OnVybCgpIGNv
bnN0CiB7Ci0gICAgbGF6eUluaXQoKTsKLSAgICAKKyAgICBsYXp5SW5pdChDb21tb25GaWVsZHNP
bmx5KTsKKwogICAgIHJldHVybiBtX3VybDsgCiB9CiAKIHZvaWQgUmVzb3VyY2VSZXNwb25zZUJh
c2U6OnNldFVSTChjb25zdCBLVVJMJiB1cmwpCiB7Ci0gICAgbGF6eUluaXQoKTsKKyAgICBsYXp5
SW5pdChDb21tb25GaWVsZHNPbmx5KTsKICAgICBtX2lzTnVsbCA9IGZhbHNlOwotICAgIAorCiAg
ICAgbV91cmwgPSB1cmw7IAogfQogCiBjb25zdCBTdHJpbmcmIFJlc291cmNlUmVzcG9uc2VCYXNl
OjptaW1lVHlwZSgpIGNvbnN0CiB7Ci0gICAgbGF6eUluaXQoKTsKKyAgICBsYXp5SW5pdChDb21t
b25GaWVsZHNPbmx5KTsKIAogICAgIHJldHVybiBtX21pbWVUeXBlOyAKIH0KIAogdm9pZCBSZXNv
dXJjZVJlc3BvbnNlQmFzZTo6c2V0TWltZVR5cGUoY29uc3QgU3RyaW5nJiBtaW1lVHlwZSkKIHsK
LSAgICBsYXp5SW5pdCgpOworICAgIGxhenlJbml0KENvbW1vbkZpZWxkc09ubHkpOwogICAgIG1f
aXNOdWxsID0gZmFsc2U7Ci0gICAgCisKICAgICBtX21pbWVUeXBlID0gbWltZVR5cGU7IAogfQog
CiBsb25nIGxvbmcgUmVzb3VyY2VSZXNwb25zZUJhc2U6OmV4cGVjdGVkQ29udGVudExlbmd0aCgp
IGNvbnN0IAogewotICAgIGxhenlJbml0KCk7CisgICAgbGF6eUluaXQoQ29tbW9uRmllbGRzT25s
eSk7CiAKICAgICByZXR1cm4gbV9leHBlY3RlZENvbnRlbnRMZW5ndGg7CiB9CiAKIHZvaWQgUmVz
b3VyY2VSZXNwb25zZUJhc2U6OnNldEV4cGVjdGVkQ29udGVudExlbmd0aChsb25nIGxvbmcgZXhw
ZWN0ZWRDb250ZW50TGVuZ3RoKQogewotICAgIGxhenlJbml0KCk7CisgICAgbGF6eUluaXQoQ29t
bW9uRmllbGRzT25seSk7CiAgICAgbV9pc051bGwgPSBmYWxzZTsKLSAgICAKKwogICAgIG1fZXhw
ZWN0ZWRDb250ZW50TGVuZ3RoID0gZXhwZWN0ZWRDb250ZW50TGVuZ3RoOyAKIH0KIAogY29uc3Qg
U3RyaW5nJiBSZXNvdXJjZVJlc3BvbnNlQmFzZTo6dGV4dEVuY29kaW5nTmFtZSgpIGNvbnN0CiB7
Ci0gICAgbGF6eUluaXQoKTsKKyAgICBsYXp5SW5pdChDb21tb25GaWVsZHNPbmx5KTsKIAogICAg
IHJldHVybiBtX3RleHRFbmNvZGluZ05hbWU7CiB9CiAKIHZvaWQgUmVzb3VyY2VSZXNwb25zZUJh
c2U6OnNldFRleHRFbmNvZGluZ05hbWUoY29uc3QgU3RyaW5nJiBlbmNvZGluZ05hbWUpCiB7Ci0g
ICAgbGF6eUluaXQoKTsKKyAgICBsYXp5SW5pdChDb21tb25GaWVsZHNPbmx5KTsKICAgICBtX2lz
TnVsbCA9IGZhbHNlOwotICAgIAorCiAgICAgbV90ZXh0RW5jb2RpbmdOYW1lID0gZW5jb2RpbmdO
YW1lOyAKIH0KIAogLy8gRklYTUUgc2hvdWxkIGNvbXB1dGUgdGhpcyBvbiB0aGUgZmx5CiBjb25z
dCBTdHJpbmcmIFJlc291cmNlUmVzcG9uc2VCYXNlOjpzdWdnZXN0ZWRGaWxlbmFtZSgpIGNvbnN0
CiB7Ci0gICAgbGF6eUluaXQoKTsKKyAgICBsYXp5SW5pdChDb21tb25GaWVsZHNPbmx5KTsKIAog
ICAgIHJldHVybiBtX3N1Z2dlc3RlZEZpbGVuYW1lOwogfQogCiB2b2lkIFJlc291cmNlUmVzcG9u
c2VCYXNlOjpzZXRTdWdnZXN0ZWRGaWxlbmFtZShjb25zdCBTdHJpbmcmIHN1Z2dlc3RlZE5hbWUp
CiB7Ci0gICAgbGF6eUluaXQoKTsKKyAgICBsYXp5SW5pdChDb21tb25GaWVsZHNPbmx5KTsKICAg
ICBtX2lzTnVsbCA9IGZhbHNlOwotICAgIAorCiAgICAgbV9zdWdnZXN0ZWRGaWxlbmFtZSA9IHN1
Z2dlc3RlZE5hbWU7IAogfQogCiBpbnQgUmVzb3VyY2VSZXNwb25zZUJhc2U6Omh0dHBTdGF0dXND
b2RlKCkgY29uc3QKIHsKLSAgICBsYXp5SW5pdCgpOworICAgIGxhenlJbml0KENvbW1vbkZpZWxk
c09ubHkpOwogCiAgICAgcmV0dXJuIG1faHR0cFN0YXR1c0NvZGU7CiB9CiAKIHZvaWQgUmVzb3Vy
Y2VSZXNwb25zZUJhc2U6OnNldEhUVFBTdGF0dXNDb2RlKGludCBzdGF0dXNDb2RlKQogewotICAg
IGxhenlJbml0KCk7CisgICAgbGF6eUluaXQoQ29tbW9uRmllbGRzT25seSk7CiAKICAgICBtX2h0
dHBTdGF0dXNDb2RlID0gc3RhdHVzQ29kZTsKIH0KIAogY29uc3QgU3RyaW5nJiBSZXNvdXJjZVJl
c3BvbnNlQmFzZTo6aHR0cFN0YXR1c1RleHQoKSBjb25zdCAKIHsKLSAgICBsYXp5SW5pdCgpOwor
ICAgIGxhenlJbml0KEFsbEZpZWxkcyk7CiAKICAgICByZXR1cm4gbV9odHRwU3RhdHVzVGV4dDsg
CiB9CiAKIHZvaWQgUmVzb3VyY2VSZXNwb25zZUJhc2U6OnNldEhUVFBTdGF0dXNUZXh0KGNvbnN0
IFN0cmluZyYgc3RhdHVzVGV4dCkgCiB7Ci0gICAgbGF6eUluaXQoKTsKKyAgICBsYXp5SW5pdChB
bGxGaWVsZHMpOwogCiAgICAgbV9odHRwU3RhdHVzVGV4dCA9IHN0YXR1c1RleHQ7IAogfQogCiBT
dHJpbmcgUmVzb3VyY2VSZXNwb25zZUJhc2U6Omh0dHBIZWFkZXJGaWVsZChjb25zdCBBdG9taWNT
dHJpbmcmIG5hbWUpIGNvbnN0CiB7Ci0gICAgbGF6eUluaXQoKTsKKyAgICBsYXp5SW5pdChDb21t
b25GaWVsZHNPbmx5KTsKKworICAgIC8vIENoZWNrIHRvIHNlZSBpZiB3ZSBhbHJlYWR5IGhhdmUg
dGhlIGZpZWxkIGJlZm9yZSBjb3B5aW5nIGFsbCBoZWFkZXIgZmllbGRzCisgICAgU3RyaW5nIHZh
bHVlID0gbV9odHRwSGVhZGVyRmllbGRzLmdldChuYW1lKTsKKyAgICBpZiAoIXZhbHVlLmlzRW1w
dHkoKSkgICAgICAgIAorICAgICAgICByZXR1cm4gdmFsdWU7CisKKyAgICBsYXp5SW5pdChBbGxG
aWVsZHMpOwogCiAgICAgcmV0dXJuIG1faHR0cEhlYWRlckZpZWxkcy5nZXQobmFtZSk7IAogfQog
CiBTdHJpbmcgUmVzb3VyY2VSZXNwb25zZUJhc2U6Omh0dHBIZWFkZXJGaWVsZChjb25zdCBjaGFy
KiBuYW1lKSBjb25zdAogewotICAgIGxhenlJbml0KCk7CisgICAgbGF6eUluaXQoQ29tbW9uRmll
bGRzT25seSk7CisKKyAgICAvLyBDaGVjayB0byBzZWUgaWYgd2UgYWxyZWFkeSBoYXZlIGEgdGhl
IGZpZWxkIGJlZm9yZSBjb3B5aW5nIGFsbCBoZWFkZXIgZmllbGRzCisgICAgU3RyaW5nIHZhbHVl
ID0gbV9odHRwSGVhZGVyRmllbGRzLmdldChuYW1lKTsKKyAgICBpZiAoIXZhbHVlLmlzRW1wdHko
KSkKKyAgICAgICAgcmV0dXJuIHZhbHVlOworCisgICAgbGF6eUluaXQoQWxsRmllbGRzKTsKIAog
ICAgIHJldHVybiBtX2h0dHBIZWFkZXJGaWVsZHMuZ2V0KG5hbWUpOyAKIH0KIAogdm9pZCBSZXNv
dXJjZVJlc3BvbnNlQmFzZTo6c2V0SFRUUEhlYWRlckZpZWxkKGNvbnN0IEF0b21pY1N0cmluZyYg
bmFtZSwgY29uc3QgU3RyaW5nJiB2YWx1ZSkKIHsKLSAgICBsYXp5SW5pdCgpOwotICAgIAorICAg
IGxhenlJbml0KEFsbEZpZWxkcyk7CisKICAgICBERUZJTkVfU1RBVElDX0xPQ0FMKGNvbnN0IEF0
b21pY1N0cmluZywgYWdlSGVhZGVyLCAoImFnZSIpKTsKICAgICBERUZJTkVfU1RBVElDX0xPQ0FM
KGNvbnN0IEF0b21pY1N0cmluZywgY2FjaGVDb250cm9sSGVhZGVyLCAoImNhY2hlLWNvbnRyb2wi
KSk7CiAgICAgREVGSU5FX1NUQVRJQ19MT0NBTChjb25zdCBBdG9taWNTdHJpbmcsIGRhdGVIZWFk
ZXIsICgiZGF0ZSIpKTsKQEAgLTI4Niw3ICszMDAsNyBAQCB2b2lkIFJlc291cmNlUmVzcG9uc2VC
YXNlOjpzZXRIVFRQSGVhZGVyCiAKIGNvbnN0IEhUVFBIZWFkZXJNYXAmIFJlc291cmNlUmVzcG9u
c2VCYXNlOjpodHRwSGVhZGVyRmllbGRzKCkgY29uc3QKIHsKLSAgICBsYXp5SW5pdCgpOworICAg
IGxhenlJbml0KEFsbEZpZWxkcyk7CiAKICAgICByZXR1cm4gbV9odHRwSGVhZGVyRmllbGRzOwog
fQpAQCAtMjk1LDcgKzMwOSw3IEBAIHZvaWQgUmVzb3VyY2VSZXNwb25zZUJhc2U6OnBhcnNlQ2Fj
aGVDb24KIHsKICAgICBBU1NFUlQoIW1faGF2ZVBhcnNlZENhY2hlQ29udHJvbEhlYWRlcik7CiAK
LSAgICBsYXp5SW5pdCgpOworICAgIGxhenlJbml0KENvbW1vbkZpZWxkc09ubHkpOwogCiAgICAg
bV9oYXZlUGFyc2VkQ2FjaGVDb250cm9sSGVhZGVyID0gdHJ1ZTsKIApAQCAtMzMyLDEzICszNDYs
MTQgQEAgdm9pZCBSZXNvdXJjZVJlc3BvbnNlQmFzZTo6cGFyc2VDYWNoZUNvbgogICAgICAgICAg
ICAgfQogICAgICAgICB9CiAgICAgfQotICAgICAgICAKKwogICAgIGlmICghbV9jYWNoZUNvbnRy
b2xDb250YWluc05vQ2FjaGUpIHsKICAgICAgICAgLy8gSGFuZGxlIFByYWdtYTogbm8tY2FjaGUK
ICAgICAgICAgLy8gVGhpcyBpcyBkZXByZWNhdGVkIGFuZCBlcXVpdmFsZW50IHRvIENhY2hlLWNv
bnRyb2w6IG5vLWNhY2hlCiAgICAgICAgIC8vIERvbid0IGJvdGhlciB0b2tlbml6aW5nIHRoZSB2
YWx1ZSwgaXQgaXMgbm90IGltcG9ydGFudAogICAgICAgICBERUZJTkVfU1RBVElDX0xPQ0FMKGNv
bnN0IEF0b21pY1N0cmluZywgcHJhZ21hSGVhZGVyLCAoInByYWdtYSIpKTsKICAgICAgICAgU3Ry
aW5nIHByYWdtYVZhbHVlID0gbV9odHRwSGVhZGVyRmllbGRzLmdldChwcmFnbWFIZWFkZXIpOwor
CiAgICAgICAgIG1fY2FjaGVDb250cm9sQ29udGFpbnNOb0NhY2hlID0gcHJhZ21hVmFsdWUubG93
ZXIoKS5jb250YWlucyhub0NhY2hlRGlyZWN0aXZlKTsKICAgICB9CiB9CkBAIC0zNjQsNiArMzc5
LDE1IEBAIGJvb2wgUmVzb3VyY2VSZXNwb25zZUJhc2U6OmNhY2hlQ29udHJvbEMKICAgICByZXR1
cm4gbV9jYWNoZUNvbnRyb2xDb250YWluc011c3RSZXZhbGlkYXRlOwogfQogCitib29sIFJlc291
cmNlUmVzcG9uc2VCYXNlOjpoYXNDYWNoZVZhbGlkYXRvckZpZWxkcygpIGNvbnN0Cit7CisgICAg
bGF6eUluaXQoQ29tbW9uRmllbGRzT25seSk7CisKKyAgICBERUZJTkVfU1RBVElDX0xPQ0FMKGNv
bnN0IEF0b21pY1N0cmluZywgbGFzdE1vZGlmaWVkSGVhZGVyLCAoImxhc3QtbW9kaWZpZWQiKSk7
CisgICAgREVGSU5FX1NUQVRJQ19MT0NBTChjb25zdCBBdG9taWNTdHJpbmcsIGVUYWdIZWFkZXIs
ICgiZXRhZyIpKTsKKyAgICByZXR1cm4gIW1faHR0cEhlYWRlckZpZWxkcy5nZXQobGFzdE1vZGlm
aWVkSGVhZGVyKS5pc0VtcHR5KCkgfHwgIW1faHR0cEhlYWRlckZpZWxkcy5nZXQoZVRhZ0hlYWRl
cikuaXNFbXB0eSgpOworfQorCiBkb3VibGUgUmVzb3VyY2VSZXNwb25zZUJhc2U6OmNhY2hlQ29u
dHJvbE1heEFnZSgpIGNvbnN0CiB7CiAgICAgaWYgKCFtX2hhdmVQYXJzZWRDYWNoZUNvbnRyb2xI
ZWFkZXIpCkBAIC0zODgsNyArNDEyLDcgQEAgc3RhdGljIGRvdWJsZSBwYXJzZURhdGVWYWx1ZUlu
SGVhZGVyKGNvbgogCiBkb3VibGUgUmVzb3VyY2VSZXNwb25zZUJhc2U6OmRhdGUoKSBjb25zdAog
ewotICAgIGxhenlJbml0KCk7CisgICAgbGF6eUluaXQoQ29tbW9uRmllbGRzT25seSk7CiAKICAg
ICBpZiAoIW1faGF2ZVBhcnNlZERhdGVIZWFkZXIpIHsKICAgICAgICAgREVGSU5FX1NUQVRJQ19M
T0NBTChjb25zdCBBdG9taWNTdHJpbmcsIGhlYWRlck5hbWUsICgiZGF0ZSIpKTsKQEAgLTQwMCw4
ICs0MjQsOCBAQCBkb3VibGUgUmVzb3VyY2VSZXNwb25zZUJhc2U6OmRhdGUoKSBjb25zCiAKIGRv
dWJsZSBSZXNvdXJjZVJlc3BvbnNlQmFzZTo6YWdlKCkgY29uc3QKIHsKLSAgICBsYXp5SW5pdCgp
OwotICAgIAorICAgIGxhenlJbml0KENvbW1vbkZpZWxkc09ubHkpOworCiAgICAgaWYgKCFtX2hh
dmVQYXJzZWRBZ2VIZWFkZXIpIHsKICAgICAgICAgREVGSU5FX1NUQVRJQ19MT0NBTChjb25zdCBB
dG9taWNTdHJpbmcsIGhlYWRlck5hbWUsICgiYWdlIikpOwogICAgICAgICBTdHJpbmcgaGVhZGVy
VmFsdWUgPSBtX2h0dHBIZWFkZXJGaWVsZHMuZ2V0KGhlYWRlck5hbWUpOwpAQCAtNDE2LDcgKzQ0
MCw3IEBAIGRvdWJsZSBSZXNvdXJjZVJlc3BvbnNlQmFzZTo6YWdlKCkgY29uc3QKIAogZG91Ymxl
IFJlc291cmNlUmVzcG9uc2VCYXNlOjpleHBpcmVzKCkgY29uc3QKIHsKLSAgICBsYXp5SW5pdCgp
OworICAgIGxhenlJbml0KENvbW1vbkZpZWxkc09ubHkpOwogCiAgICAgaWYgKCFtX2hhdmVQYXJz
ZWRFeHBpcmVzSGVhZGVyKSB7CiAgICAgICAgIERFRklORV9TVEFUSUNfTE9DQUwoY29uc3QgQXRv
bWljU3RyaW5nLCBoZWFkZXJOYW1lLCAoImV4cGlyZXMiKSk7CkBAIC00MjgsOCArNDUyLDggQEAg
ZG91YmxlIFJlc291cmNlUmVzcG9uc2VCYXNlOjpleHBpcmVzKCkgYwogCiBkb3VibGUgUmVzb3Vy
Y2VSZXNwb25zZUJhc2U6Omxhc3RNb2RpZmllZCgpIGNvbnN0CiB7Ci0gICAgbGF6eUluaXQoKTsK
LSAgICAKKyAgICBsYXp5SW5pdChDb21tb25GaWVsZHNPbmx5KTsKKwogICAgIGlmICghbV9oYXZl
UGFyc2VkTGFzdE1vZGlmaWVkSGVhZGVyKSB7CiAgICAgICAgIERFRklORV9TVEFUSUNfTE9DQUwo
Y29uc3QgQXRvbWljU3RyaW5nLCBoZWFkZXJOYW1lLCAoImxhc3QtbW9kaWZpZWQiKSk7CiAgICAg
ICAgIG1fbGFzdE1vZGlmaWVkID0gcGFyc2VEYXRlVmFsdWVJbkhlYWRlcihtX2h0dHBIZWFkZXJG
aWVsZHMsIGhlYWRlck5hbWUpOwpAQCAtNDQwLDcgKzQ2NCw3IEBAIGRvdWJsZSBSZXNvdXJjZVJl
c3BvbnNlQmFzZTo6bGFzdE1vZGlmaWUKIAogYm9vbCBSZXNvdXJjZVJlc3BvbnNlQmFzZTo6aXNB
dHRhY2htZW50KCkgY29uc3QKIHsKLSAgICBsYXp5SW5pdCgpOworICAgIGxhenlJbml0KEFsbEZp
ZWxkcyk7CiAKICAgICBERUZJTkVfU1RBVElDX0xPQ0FMKGNvbnN0IEF0b21pY1N0cmluZywgaGVh
ZGVyTmFtZSwgKCJjb250ZW50LWRpc3Bvc2l0aW9uIikpOwogICAgIFN0cmluZyB2YWx1ZSA9IG1f
aHR0cEhlYWRlckZpZWxkcy5nZXQoaGVhZGVyTmFtZSk7CkBAIC00NTQsMjEgKzQ3OCwyMSBAQCBi
b29sIFJlc291cmNlUmVzcG9uc2VCYXNlOjppc0F0dGFjaG1lbnQoCiAgIAogdm9pZCBSZXNvdXJj
ZVJlc3BvbnNlQmFzZTo6c2V0TGFzdE1vZGlmaWVkRGF0ZSh0aW1lX3QgbGFzdE1vZGlmaWVkRGF0
ZSkKIHsKLSAgICBsYXp5SW5pdCgpOworICAgIGxhenlJbml0KEFsbEZpZWxkcyk7CiAKICAgICBt
X2xhc3RNb2RpZmllZERhdGUgPSBsYXN0TW9kaWZpZWREYXRlOwogfQogCiB0aW1lX3QgUmVzb3Vy
Y2VSZXNwb25zZUJhc2U6Omxhc3RNb2RpZmllZERhdGUoKSBjb25zdAogewotICAgIGxhenlJbml0
KCk7CisgICAgbGF6eUluaXQoQWxsRmllbGRzKTsKIAogICAgIHJldHVybiBtX2xhc3RNb2RpZmll
ZERhdGU7CiB9CiAKIGJvb2wgUmVzb3VyY2VSZXNwb25zZUJhc2U6Ondhc0NhY2hlZCgpIGNvbnN0
CiB7Ci0gICAgbGF6eUluaXQoKTsKKyAgICBsYXp5SW5pdChBbGxGaWVsZHMpOwogCiAgICAgcmV0
dXJuIG1fd2FzQ2FjaGVkOwogfQpAQCAtNDgwLDY1ICs1MDQsNjUgQEAgdm9pZCBSZXNvdXJjZVJl
c3BvbnNlQmFzZTo6c2V0V2FzQ2FjaGVkKAogCiBib29sIFJlc291cmNlUmVzcG9uc2VCYXNlOjpj
b25uZWN0aW9uUmV1c2VkKCkgY29uc3QKIHsKLSAgICBsYXp5SW5pdCgpOworICAgIGxhenlJbml0
KEFsbEZpZWxkcyk7CiAKICAgICByZXR1cm4gbV9jb25uZWN0aW9uUmV1c2VkOwogfQogCiB2b2lk
IFJlc291cmNlUmVzcG9uc2VCYXNlOjpzZXRDb25uZWN0aW9uUmV1c2VkKGJvb2wgY29ubmVjdGlv
blJldXNlZCkKIHsKLSAgICBsYXp5SW5pdCgpOworICAgIGxhenlJbml0KEFsbEZpZWxkcyk7CiAK
ICAgICBtX2Nvbm5lY3Rpb25SZXVzZWQgPSBjb25uZWN0aW9uUmV1c2VkOwogfQogCiB1bnNpZ25l
ZCBSZXNvdXJjZVJlc3BvbnNlQmFzZTo6Y29ubmVjdGlvbklEKCkgY29uc3QKIHsKLSAgICBsYXp5
SW5pdCgpOworICAgIGxhenlJbml0KEFsbEZpZWxkcyk7CiAKICAgICByZXR1cm4gbV9jb25uZWN0
aW9uSUQ7CiB9CiAKIHZvaWQgUmVzb3VyY2VSZXNwb25zZUJhc2U6OnNldENvbm5lY3Rpb25JRCh1
bnNpZ25lZCBjb25uZWN0aW9uSUQpCiB7Ci0gICAgbGF6eUluaXQoKTsKKyAgICBsYXp5SW5pdChB
bGxGaWVsZHMpOwogCiAgICAgbV9jb25uZWN0aW9uSUQgPSBjb25uZWN0aW9uSUQ7CiB9CiAKIFJl
c291cmNlTG9hZFRpbWluZyogUmVzb3VyY2VSZXNwb25zZUJhc2U6OnJlc291cmNlTG9hZFRpbWlu
ZygpIGNvbnN0CiB7Ci0gICAgbGF6eUluaXQoKTsKKyAgICBsYXp5SW5pdChBbGxGaWVsZHMpOwog
CiAgICAgcmV0dXJuIG1fcmVzb3VyY2VMb2FkVGltaW5nLmdldCgpOwogfQogCiB2b2lkIFJlc291
cmNlUmVzcG9uc2VCYXNlOjpzZXRSZXNvdXJjZUxvYWRUaW1pbmcoUGFzc1JlZlB0cjxSZXNvdXJj
ZUxvYWRUaW1pbmc+IHJlc291cmNlTG9hZFRpbWluZykKIHsKLSAgICBsYXp5SW5pdCgpOworICAg
IGxhenlJbml0KEFsbEZpZWxkcyk7CiAKICAgICBtX3Jlc291cmNlTG9hZFRpbWluZyA9IHJlc291
cmNlTG9hZFRpbWluZzsKIH0KIAogUGFzc1JlZlB0cjxSZXNvdXJjZUxvYWRJbmZvPiBSZXNvdXJj
ZVJlc3BvbnNlQmFzZTo6cmVzb3VyY2VMb2FkSW5mbygpIGNvbnN0CiB7Ci0gICAgbGF6eUluaXQo
KTsKKyAgICBsYXp5SW5pdChBbGxGaWVsZHMpOwogCiAgICAgcmV0dXJuIG1fcmVzb3VyY2VMb2Fk
SW5mby5nZXQoKTsKIH0KIAogdm9pZCBSZXNvdXJjZVJlc3BvbnNlQmFzZTo6c2V0UmVzb3VyY2VM
b2FkSW5mbyhQYXNzUmVmUHRyPFJlc291cmNlTG9hZEluZm8+IGxvYWRJbmZvKQogewotICAgIGxh
enlJbml0KCk7CisgICAgbGF6eUluaXQoQWxsRmllbGRzKTsKIAogICAgIG1fcmVzb3VyY2VMb2Fk
SW5mbyA9IGxvYWRJbmZvOwogfQogCi12b2lkIFJlc291cmNlUmVzcG9uc2VCYXNlOjpsYXp5SW5p
dCgpIGNvbnN0Cit2b2lkIFJlc291cmNlUmVzcG9uc2VCYXNlOjpsYXp5SW5pdChJbml0TGV2ZWwg
aW5pdExldmVsKSBjb25zdAogewotICAgIGNvbnN0X2Nhc3Q8UmVzb3VyY2VSZXNwb25zZSo+KHN0
YXRpY19jYXN0PGNvbnN0IFJlc291cmNlUmVzcG9uc2UqPih0aGlzKSktPnBsYXRmb3JtTGF6eUlu
aXQoKTsKKyAgICBjb25zdF9jYXN0PFJlc291cmNlUmVzcG9uc2UqPihzdGF0aWNfY2FzdDxjb25z
dCBSZXNvdXJjZVJlc3BvbnNlKj4odGhpcykpLT5wbGF0Zm9ybUxhenlJbml0KGluaXRMZXZlbCk7
CiB9Ci0KKyAgICAKIGJvb2wgUmVzb3VyY2VSZXNwb25zZUJhc2U6OmNvbXBhcmUoY29uc3QgUmVz
b3VyY2VSZXNwb25zZSYgYSwgY29uc3QgUmVzb3VyY2VSZXNwb25zZSYgYikKIHsKICAgICBpZiAo
YS5pc051bGwoKSAhPSBiLmlzTnVsbCgpKQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
bmV0d29yay9SZXNvdXJjZVJlc3BvbnNlQmFzZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL25ldHdvcmsvUmVzb3VyY2VSZXNwb25zZUJhc2UuaAkocmV2aXNpb24gODI0
NzYpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL1Jlc291cmNlUmVzcG9uc2VC
YXNlLmgJKHdvcmtpbmcgY29weSkKQEAgLTkzLDYgKzkzLDcgQEAgcHVibGljOgogICAgIGJvb2wg
Y2FjaGVDb250cm9sQ29udGFpbnNOb0NhY2hlKCkgY29uc3Q7CiAgICAgYm9vbCBjYWNoZUNvbnRy
b2xDb250YWluc05vU3RvcmUoKSBjb25zdDsKICAgICBib29sIGNhY2hlQ29udHJvbENvbnRhaW5z
TXVzdFJldmFsaWRhdGUoKSBjb25zdDsKKyAgICBib29sIGhhc0NhY2hlVmFsaWRhdG9yRmllbGRz
KCkgY29uc3Q7CiAgICAgZG91YmxlIGNhY2hlQ29udHJvbE1heEFnZSgpIGNvbnN0OwogICAgIGRv
dWJsZSBkYXRlKCkgY29uc3Q7CiAgICAgZG91YmxlIGFnZSgpIGNvbnN0OwpAQCAtMTI0LDEzICsx
MjUsMTkgQEAgcHVibGljOgogICAgIHN0YXRpYyBib29sIGNvbXBhcmUoY29uc3QgUmVzb3VyY2VS
ZXNwb25zZSYsIGNvbnN0IFJlc291cmNlUmVzcG9uc2UmKTsKIAogcHJvdGVjdGVkOgorICAgIGVu
dW0gSW5pdExldmVsIHsKKyAgICAgICAgVW5pbml0aWFsaXplZCA9IDAsCisgICAgICAgIENvbW1v
bkZpZWxkc09ubHksCisgICAgICAgIEFsbEZpZWxkcworICAgIH07CisKICAgICBSZXNvdXJjZVJl
c3BvbnNlQmFzZSgpOwogICAgIFJlc291cmNlUmVzcG9uc2VCYXNlKGNvbnN0IEtVUkwmIHVybCwg
Y29uc3QgU3RyaW5nJiBtaW1lVHlwZSwgbG9uZyBsb25nIGV4cGVjdGVkTGVuZ3RoLCBjb25zdCBT
dHJpbmcmIHRleHRFbmNvZGluZ05hbWUsIGNvbnN0IFN0cmluZyYgZmlsZW5hbWUpOwogCi0gICAg
dm9pZCBsYXp5SW5pdCgpIGNvbnN0OworICAgIHZvaWQgbGF6eUluaXQoSW5pdExldmVsKSBjb25z
dDsKIAogICAgIC8vIFRoZSBSZXNvdXJjZVJlc3BvbnNlIHN1YmNsYXNzIG1heSAic2hhZG93IiB0
aGlzIG1ldGhvZCB0byBsYXppbHkgaW5pdGlhbGl6ZSBwbGF0Zm9ybSBzcGVjaWZpYyBmaWVsZHMK
LSAgICB2b2lkIHBsYXRmb3JtTGF6eUluaXQoKSB7IH0KKyAgICB2b2lkIHBsYXRmb3JtTGF6eUlu
aXQoSW5pdExldmVsKSB7IH0KIAogICAgIC8vIFRoZSBSZXNvdXJjZVJlc3BvbnNlIHN1YmNsYXNz
IG1heSAic2hhZG93IiB0aGlzIG1ldGhvZCB0byBjb21wYXJlIHBsYXRmb3JtIHNwZWNpZmljIGZp
ZWxkcwogICAgIHN0YXRpYyBib29sIHBsYXRmb3JtQ29tcGFyZShjb25zdCBSZXNvdXJjZVJlc3Bv
bnNlJiwgY29uc3QgUmVzb3VyY2VSZXNwb25zZSYpIHsgcmV0dXJuIHRydWU7IH0KSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY2YvUmVzb3VyY2VSZXNwb25zZS5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY2YvUmVzb3VyY2VSZXNw
b25zZS5oCShyZXZpc2lvbiA4MjQ3NikKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdv
cmsvY2YvUmVzb3VyY2VSZXNwb25zZS5oCSh3b3JraW5nIGNvcHkpCkBAIC00NCwyMSArNDQsMjEg
QEAgbmFtZXNwYWNlIFdlYkNvcmUgewogY2xhc3MgUmVzb3VyY2VSZXNwb25zZSA6IHB1YmxpYyBS
ZXNvdXJjZVJlc3BvbnNlQmFzZSB7CiBwdWJsaWM6CiAgICAgUmVzb3VyY2VSZXNwb25zZSgpCi0g
ICAgICAgIDogbV9pc1VwVG9EYXRlKHRydWUpCisgICAgICAgIDogbV9pbml0TGV2ZWwoQWxsRmll
bGRzKQogICAgIHsKICAgICB9CiAKICNpZiBVU0UoQ0ZORVRXT1JLKQogICAgIFJlc291cmNlUmVz
cG9uc2UoQ0ZVUkxSZXNwb25zZVJlZiBjZlJlc3BvbnNlKQogICAgICAgICA6IG1fY2ZSZXNwb25z
ZShjZlJlc3BvbnNlKQotICAgICAgICAsIG1faXNVcFRvRGF0ZShmYWxzZSkKKyAgICAgICAgLCBt
X2luaXRMZXZlbChVbmluaXRpYWxpemVkKQogICAgIHsKICAgICAgICAgbV9pc051bGwgPSAhY2ZS
ZXNwb25zZTsKICAgICB9CiAjZWxzZQogICAgIFJlc291cmNlUmVzcG9uc2UoTlNVUkxSZXNwb25z
ZSogbnNSZXNwb25zZSkKICAgICAgICAgOiBtX25zUmVzcG9uc2UobnNSZXNwb25zZSkKLSAgICAg
ICAgLCBtX2lzVXBUb0RhdGUoZmFsc2UpCisgICAgICAgICwgbV9pbml0TGV2ZWwoVW5pbml0aWFs
aXplZCkKICAgICB7CiAgICAgICAgIG1faXNOdWxsID0gIW5zUmVzcG9uc2U7CiAgICAgfQpAQCAt
NjYsMTUgKzY2LDE1IEBAIHB1YmxpYzoKIAogICAgIFJlc291cmNlUmVzcG9uc2UoY29uc3QgS1VS
TCYgdXJsLCBjb25zdCBTdHJpbmcmIG1pbWVUeXBlLCBsb25nIGxvbmcgZXhwZWN0ZWRMZW5ndGgs
IGNvbnN0IFN0cmluZyYgdGV4dEVuY29kaW5nTmFtZSwgY29uc3QgU3RyaW5nJiBmaWxlbmFtZSkK
ICAgICAgICAgOiBSZXNvdXJjZVJlc3BvbnNlQmFzZSh1cmwsIG1pbWVUeXBlLCBleHBlY3RlZExl
bmd0aCwgdGV4dEVuY29kaW5nTmFtZSwgZmlsZW5hbWUpCi0gICAgICAgICwgbV9pc1VwVG9EYXRl
KHRydWUpCisgICAgICAgICwgbV9pbml0TGV2ZWwoQWxsRmllbGRzKQogICAgIHsKICAgICB9CiAK
ICAgICB1bnNpZ25lZCBtZW1vcnlVc2FnZSgpIGNvbnN0CiAgICAgewogICAgICAgICAvLyBGSVhN
RTogRmluZCBzb21lIHByb2dyYW1tYXRpYyBsaWdod2VpZ2h0IHdheSB0byBjYWxjdWxhdGUgUmVz
b3VyY2VSZXNwb25zZSBhbmQgYXNzb2NpYXRlZCBjbGFzc2VzLgotICAgICAgICAvLyBUaGlzIGlz
IGEgcm91Z2ggZXN0aW1hdGUgb2YgcmVzb3VyY2Ugb3ZlcmhlYWQgYmFzZWQgb24gc3RhdHMgY29s
bGVjdGVkIGZyb20gdGhlIHN0cmVzcyB0ZXN0LgotICAgICAgICByZXR1cm4gMzA3MjsKKyAgICAg
ICAgLy8gVGhpcyBpcyBhIHJvdWdoIGVzdGltYXRlIG9mIHJlc291cmNlIG92ZXJoZWFkIGJhc2Vk
IG9uIHN0YXRzIGNvbGxlY3RlZCBmcm9tIG1lbW9yeSB1c2FnZSB0ZXN0cy4KKyAgICAgICAgcmV0
dXJuIDM4MDA7CiAgICAgICAgIC8qICAxMjgwICogMiArICAgICAgICAgICAgICAgIC8vIGF2ZXJh
Z2Ugc2l6ZSBvZiBSZXNvdXJjZVJlc3BvbnNlLiBEb3VibGVkIHRvIGFjY291bnQgZm9yIHRoZSBX
ZWJDb3JlIGNvcHkgYW5kIHRoZSBDRiBjb3B5LgogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAvLyBNb3N0bHkgZHVlIHRvIHRoZSBzaXplIG9mIHRoZSBoYXNoIG1hcHMsIHRo
ZSBIZWFkZXIgTWFwIHN0cmluZ3MgYW5kIHRoZSBVUkwuCiAgICAgICAgICAgICAyNTYgKiAyICAg
ICAgICAgICAgICAgICAgIC8vIE92ZXJoZWFkIGZyb20gUmVzb3VyY2VSZXF1ZXN0LCBkb3VibGVk
IHRvIGFjY291bnQgZm9yIFdlYkNvcmUgY29weSBhbmQgQ0YgY29weS4KQEAgLTkxLDcgKzkxLDcg
QEAgcHVibGljOgogcHJpdmF0ZToKICAgICBmcmllbmQgY2xhc3MgUmVzb3VyY2VSZXNwb25zZUJh
c2U7CiAKLSAgICB2b2lkIHBsYXRmb3JtTGF6eUluaXQoKTsKKyAgICB2b2lkIHBsYXRmb3JtTGF6
eUluaXQoSW5pdExldmVsKTsKICAgICBQYXNzT3duUHRyPENyb3NzVGhyZWFkUmVzb3VyY2VSZXNw
b25zZURhdGE+IGRvUGxhdGZvcm1Db3B5RGF0YShQYXNzT3duUHRyPENyb3NzVGhyZWFkUmVzb3Vy
Y2VSZXNwb25zZURhdGE+IGRhdGEpIGNvbnN0IHsgcmV0dXJuIGRhdGE7IH0KICAgICB2b2lkIGRv
UGxhdGZvcm1BZG9wdChQYXNzT3duUHRyPENyb3NzVGhyZWFkUmVzb3VyY2VSZXNwb25zZURhdGE+
KSB7IH0KIApAQCAtMTAyLDcgKzEwMiw3IEBAIHByaXZhdGU6CiAjZWxzZQogICAgIG11dGFibGUg
UmV0YWluUHRyPE5TVVJMUmVzcG9uc2U+IG1fbnNSZXNwb25zZTsKICNlbmRpZgotICAgIGJvb2wg
bV9pc1VwVG9EYXRlOworICAgIEluaXRMZXZlbCBtX2luaXRMZXZlbDsKIH07CiAKIHN0cnVjdCBD
cm9zc1RocmVhZFJlc291cmNlUmVzcG9uc2VEYXRhIDogcHVibGljIENyb3NzVGhyZWFkUmVzb3Vy
Y2VSZXNwb25zZURhdGFCYXNlIHsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdv
cmsvY2YvUmVzb3VyY2VSZXNwb25zZUNGTmV0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9uZXR3b3JrL2NmL1Jlc291cmNlUmVzcG9uc2VDRk5ldC5jcHAJKHJldmlz
aW9uIDgyNDc2KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9jZi9SZXNvdXJj
ZVJlc3BvbnNlQ0ZOZXQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00Miw2ICs0MiwxMSBAQCB1c2lu
ZyBuYW1lc3BhY2Ugc3RkOwogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKK3N0YXRpYyBDRlN0cmlu
Z1JlZiBjb25zdCBjb21tb25IZWFkZXJGaWVsZHNbXSA9IHsKKyAgICBDRlNUUigiQWdlIiksIENG
U1RSKCJDYWNoZS1Db250cm9sIiksIENGU1RSKCJEYXRlIiksIENGU1RSKCJFdGFnIiksIENGU1RS
KCJFeHBpcmVzIiksIENGU1RSKCJMYXN0LU1vZGlmaWVkIiksIENGU1RSKCJQcmFnbWEiKQorfTsK
K3N0YXRpYyBjb25zdCBpbnQgbnVtQ29tbW9uSGVhZGVyRmllbGRzID0gc2l6ZW9mKGNvbW1vbkhl
YWRlckZpZWxkcykgLyBzaXplb2YoQ0ZTdHJpbmdSZWYpOworCiBDRlVSTFJlc3BvbnNlUmVmIFJl
c291cmNlUmVzcG9uc2U6OmNmVVJMUmVzcG9uc2UoKSBjb25zdAogewogICAgIGlmICghbV9jZlJl
c3BvbnNlICYmICFtX2lzTnVsbCkgewpAQCAtNzAsNTIgKzc1LDY2IEBAIHN0YXRpYyB0aW1lX3Qg
dG9UaW1lVChDRkFic29sdXRlVGltZSB0aW0KICAgICByZXR1cm4gbWluKG1heChtaW5UaW1lQXNE
b3VibGUsIHRpbWUgKyBrQ0ZBYnNvbHV0ZVRpbWVJbnRlcnZhbFNpbmNlMTk3MCksIG1heFRpbWVB
c0RvdWJsZSk7CiB9CiAKLXZvaWQgUmVzb3VyY2VSZXNwb25zZTo6cGxhdGZvcm1MYXp5SW5pdCgp
Cit2b2lkIFJlc291cmNlUmVzcG9uc2U6OnBsYXRmb3JtTGF6eUluaXQoSW5pdExldmVsIGluaXRM
ZXZlbCkKIHsKLSAgICBpZiAobV9pc1VwVG9EYXRlKQorICAgIGlmIChtX2luaXRMZXZlbCA+IGlu
aXRMZXZlbCkKICAgICAgICAgcmV0dXJuOwotICAgIG1faXNVcFRvRGF0ZSA9IHRydWU7CiAKICAg
ICBpZiAobV9pc051bGwpIHsKICAgICAgICAgQVNTRVJUKCFtX2NmUmVzcG9uc2UuZ2V0KCkpOwog
ICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgLy8gRklYTUU6IFdlIG1heSBuZWVkIHRvIGRv
IE1JTUUgdHlwZSBzbmlmZmluZyBoZXJlICh1bmxlc3MgdGhhdCBpcyBkb25lIGluIENGVVJMUmVz
cG9uc2VHZXRNSU1FVHlwZSkuCi0KLSAgICBtX3VybCA9IENGVVJMUmVzcG9uc2VHZXRVUkwobV9j
ZlJlc3BvbnNlLmdldCgpKTsKLSAgICBtX21pbWVUeXBlID0gQ0ZVUkxSZXNwb25zZUdldE1JTUVU
eXBlKG1fY2ZSZXNwb25zZS5nZXQoKSk7Ci0gICAgbV9leHBlY3RlZENvbnRlbnRMZW5ndGggPSBD
RlVSTFJlc3BvbnNlR2V0RXhwZWN0ZWRDb250ZW50TGVuZ3RoKG1fY2ZSZXNwb25zZS5nZXQoKSk7
Ci0gICAgbV90ZXh0RW5jb2RpbmdOYW1lID0gQ0ZVUkxSZXNwb25zZUdldFRleHRFbmNvZGluZ05h
bWUobV9jZlJlc3BvbnNlLmdldCgpKTsKLQotICAgIC8vIFdvcmthcm91bmQgZm9yIDxyZGFyOi8v
cHJvYmxlbS84NzU3MDg4PiwgY2FuIGJlIHJlbW92ZWQgb25jZSB0aGF0IGlzIGZpeGVkLgotICAg
IHVuc2lnbmVkIHRleHRFbmNvZGluZ05hbWVMZW5ndGggPSBtX3RleHRFbmNvZGluZ05hbWUubGVu
Z3RoKCk7Ci0gICAgaWYgKHRleHRFbmNvZGluZ05hbWVMZW5ndGggPj0gMiAmJiBtX3RleHRFbmNv
ZGluZ05hbWVbMFVdID09ICciJyAmJiBtX3RleHRFbmNvZGluZ05hbWVbdGV4dEVuY29kaW5nTmFt
ZUxlbmd0aCAtIDFdID09ICciJykKLSAgICAgICAgbV90ZXh0RW5jb2RpbmdOYW1lID0gbV90ZXh0
RW5jb2RpbmdOYW1lLnN1YnN0cmluZygxLCB0ZXh0RW5jb2RpbmdOYW1lTGVuZ3RoIC0gMik7Cisg
ICAgaWYgKG1faW5pdExldmVsIDwgQ29tbW9uRmllbGRzT25seSAmJiBpbml0TGV2ZWwgPj0gQ29t
bW9uRmllbGRzT25seSkgeworICAgICAgICBtX3VybCA9IENGVVJMUmVzcG9uc2VHZXRVUkwobV9j
ZlJlc3BvbnNlLmdldCgpKTsKKyAgICAgICAgbV9taW1lVHlwZSA9IENGVVJMUmVzcG9uc2VHZXRN
SU1FVHlwZShtX2NmUmVzcG9uc2UuZ2V0KCkpOworICAgICAgICBtX2V4cGVjdGVkQ29udGVudExl
bmd0aCA9IENGVVJMUmVzcG9uc2VHZXRFeHBlY3RlZENvbnRlbnRMZW5ndGgobV9jZlJlc3BvbnNl
LmdldCgpKTsKKyAgICAgICAgbV90ZXh0RW5jb2RpbmdOYW1lID0gQ0ZVUkxSZXNwb25zZUdldFRl
eHRFbmNvZGluZ05hbWUobV9jZlJlc3BvbnNlLmdldCgpKTsKKworICAgICAgICAvLyBXb3JrYXJv
dW5kIGZvciA8cmRhcjovL3Byb2JsZW0vODc1NzA4OD4sIGNhbiBiZSByZW1vdmVkIG9uY2UgdGhh
dCBpcyBmaXhlZC4KKyAgICAgICAgdW5zaWduZWQgdGV4dEVuY29kaW5nTmFtZUxlbmd0aCA9IG1f
dGV4dEVuY29kaW5nTmFtZS5sZW5ndGgoKTsKKyAgICAgICAgaWYgKHRleHRFbmNvZGluZ05hbWVM
ZW5ndGggPj0gMiAmJiBtX3RleHRFbmNvZGluZ05hbWVbMFVdID09ICciJyAmJiBtX3RleHRFbmNv
ZGluZ05hbWVbdGV4dEVuY29kaW5nTmFtZUxlbmd0aCAtIDFdID09ICciJykKKyAgICAgICAgICAg
IG1fdGV4dEVuY29kaW5nTmFtZSA9IG1fdGV4dEVuY29kaW5nTmFtZS5zdWJzdHJpbmcoMSwgdGV4
dEVuY29kaW5nTmFtZUxlbmd0aCAtIDIpOworCisgICAgICAgIG1fbGFzdE1vZGlmaWVkRGF0ZSA9
IHRvVGltZVQoQ0ZVUkxSZXNwb25zZUdldExhc3RNb2RpZmllZERhdGUobV9jZlJlc3BvbnNlLmdl
dCgpKSk7CisKKyAgICAgICAgUmV0YWluUHRyPENGU3RyaW5nUmVmPiBzdWdnZXN0ZWRGaWxlbmFt
ZShBZG9wdENGLCBDRlVSTFJlc3BvbnNlQ29weVN1Z2dlc3RlZEZpbGVuYW1lKG1fY2ZSZXNwb25z
ZS5nZXQoKSkpOworICAgICAgICBtX3N1Z2dlc3RlZEZpbGVuYW1lID0gc3VnZ2VzdGVkRmlsZW5h
bWUuZ2V0KCk7CisKKyAgICAgICAgQ0ZIVFRQTWVzc2FnZVJlZiBodHRwUmVzcG9uc2UgPSBDRlVS
TFJlc3BvbnNlR2V0SFRUUFJlc3BvbnNlKG1fY2ZSZXNwb25zZS5nZXQoKSk7CisgICAgICAgIGlm
IChodHRwUmVzcG9uc2UpCisgICAgICAgICAgICBtX2h0dHBTdGF0dXNDb2RlID0gQ0ZIVFRQTWVz
c2FnZUdldFJlc3BvbnNlU3RhdHVzQ29kZShodHRwUmVzcG9uc2UpOworICAgICAgICBlbHNlCisg
ICAgICAgICAgICBtX2h0dHBTdGF0dXNDb2RlID0gMDsKIAotICAgIG1fbGFzdE1vZGlmaWVkRGF0
ZSA9IHRvVGltZVQoQ0ZVUkxSZXNwb25zZUdldExhc3RNb2RpZmllZERhdGUobV9jZlJlc3BvbnNl
LmdldCgpKSk7Ci0KLSAgICBSZXRhaW5QdHI8Q0ZTdHJpbmdSZWY+IHN1Z2dlc3RlZEZpbGVuYW1l
KEFkb3B0Q0YsIENGVVJMUmVzcG9uc2VDb3B5U3VnZ2VzdGVkRmlsZW5hbWUobV9jZlJlc3BvbnNl
LmdldCgpKSk7Ci0gICAgbV9zdWdnZXN0ZWRGaWxlbmFtZSA9IHN1Z2dlc3RlZEZpbGVuYW1lLmdl
dCgpOworICAgICAgICBSZXRhaW5QdHI8Q0ZEaWN0aW9uYXJ5UmVmPiBoZWFkZXJzKEFkb3B0Q0Ys
IENGSFRUUE1lc3NhZ2VDb3B5QWxsSGVhZGVyRmllbGRzKGh0dHBSZXNwb25zZSkpOwogCi0gICAg
Q0ZIVFRQTWVzc2FnZVJlZiBodHRwUmVzcG9uc2UgPSBDRlVSTFJlc3BvbnNlR2V0SFRUUFJlc3Bv
bnNlKG1fY2ZSZXNwb25zZS5nZXQoKSk7Ci0gICAgaWYgKGh0dHBSZXNwb25zZSkgewotICAgICAg
ICBtX2h0dHBTdGF0dXNDb2RlID0gQ0ZIVFRQTWVzc2FnZUdldFJlc3BvbnNlU3RhdHVzQ29kZSho
dHRwUmVzcG9uc2UpOworICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IG51bUNvbW1vbkhlYWRl
ckZpZWxkczsgaSsrKSB7CisgICAgICAgICAgICBDRlN0cmluZ1JlZiB2YWx1ZTsKKyAgICAgICAg
ICAgIGlmIChDRkRpY3Rpb25hcnlHZXRWYWx1ZUlmUHJlc2VudChoZWFkZXJzLmdldCgpLCBjb21t
b25IZWFkZXJGaWVsZHNbaV0sICZ2YWx1ZSkpCisgICAgICAgICAgICAgICAgbV9odHRwSGVhZGVy
RmllbGRzLnNldChjb21tb25IZWFkZXJGaWVsZHNbaV0sIHZhbHVlKTsKKyAgICAgICAgfQorICAg
IH0KIAotICAgICAgICBSZXRhaW5QdHI8Q0ZTdHJpbmdSZWY+IHN0YXR1c0xpbmUoQWRvcHRDRiwg
Q0ZIVFRQTWVzc2FnZUNvcHlSZXNwb25zZVN0YXR1c0xpbmUoaHR0cFJlc3BvbnNlKSk7Ci0gICAg
ICAgIG1faHR0cFN0YXR1c1RleHQgPSBleHRyYWN0UmVhc29uUGhyYXNlRnJvbUhUVFBTdGF0dXNM
aW5lKHN0YXR1c0xpbmUuZ2V0KCkpOworICAgIGlmIChtX2luaXRMZXZlbCA8IEFsbEZpZWxkcyAm
JiBpbml0TGV2ZWwgPj0gQWxsRmllbGRzKSB7CisgICAgICAgIENGSFRUUE1lc3NhZ2VSZWYgaHR0
cFJlc3BvbnNlID0gQ0ZVUkxSZXNwb25zZUdldEhUVFBSZXNwb25zZShtX2NmUmVzcG9uc2UuZ2V0
KCkpOworICAgICAgICBpZiAoaHR0cFJlc3BvbnNlKSB7CisgICAgICAgICAgICBSZXRhaW5QdHI8
Q0ZTdHJpbmdSZWY+IHN0YXR1c0xpbmUoQWRvcHRDRiwgQ0ZIVFRQTWVzc2FnZUNvcHlSZXNwb25z
ZVN0YXR1c0xpbmUoaHR0cFJlc3BvbnNlKSk7CisgICAgICAgICAgICBtX2h0dHBTdGF0dXNUZXh0
ID0gZXh0cmFjdFJlYXNvblBocmFzZUZyb21IVFRQU3RhdHVzTGluZShzdGF0dXNMaW5lLmdldCgp
KTsKKworICAgICAgICAgICAgUmV0YWluUHRyPENGRGljdGlvbmFyeVJlZj4gaGVhZGVycyhBZG9w
dENGLCBDRkhUVFBNZXNzYWdlQ29weUFsbEhlYWRlckZpZWxkcyhodHRwUmVzcG9uc2UpKTsKKyAg
ICAgICAgICAgIENGSW5kZXggaGVhZGVyQ291bnQgPSBDRkRpY3Rpb25hcnlHZXRDb3VudChoZWFk
ZXJzLmdldCgpKTsKKyAgICAgICAgICAgIFZlY3Rvcjxjb25zdCB2b2lkKiwgMTI4PiBrZXlzKGhl
YWRlckNvdW50KTsKKyAgICAgICAgICAgIFZlY3Rvcjxjb25zdCB2b2lkKiwgMTI4PiB2YWx1ZXMo
aGVhZGVyQ291bnQpOworICAgICAgICAgICAgQ0ZEaWN0aW9uYXJ5R2V0S2V5c0FuZFZhbHVlcyho
ZWFkZXJzLmdldCgpLCBrZXlzLmRhdGEoKSwgdmFsdWVzLmRhdGEoKSk7CisgICAgICAgICAgICBm
b3IgKGludCBpID0gMDsgaSA8IGhlYWRlckNvdW50OyArK2kpCisgICAgICAgICAgICAgICAgbV9o
dHRwSGVhZGVyRmllbGRzLnNldCgoQ0ZTdHJpbmdSZWYpa2V5c1tpXSwgKENGU3RyaW5nUmVmKXZh
bHVlc1tpXSk7CisgICAgICAgIH0KKyAgICB9CiAKLSAgICAgICAgUmV0YWluUHRyPENGRGljdGlv
bmFyeVJlZj4gaGVhZGVycyhBZG9wdENGLCBDRkhUVFBNZXNzYWdlQ29weUFsbEhlYWRlckZpZWxk
cyhodHRwUmVzcG9uc2UpKTsKLSAgICAgICAgQ0ZJbmRleCBoZWFkZXJDb3VudCA9IENGRGljdGlv
bmFyeUdldENvdW50KGhlYWRlcnMuZ2V0KCkpOwotICAgICAgICBWZWN0b3I8Y29uc3Qgdm9pZCos
IDEyOD4ga2V5cyhoZWFkZXJDb3VudCk7Ci0gICAgICAgIFZlY3Rvcjxjb25zdCB2b2lkKiwgMTI4
PiB2YWx1ZXMoaGVhZGVyQ291bnQpOwotICAgICAgICBDRkRpY3Rpb25hcnlHZXRLZXlzQW5kVmFs
dWVzKGhlYWRlcnMuZ2V0KCksIGtleXMuZGF0YSgpLCB2YWx1ZXMuZGF0YSgpKTsKLSAgICAgICAg
Zm9yIChpbnQgaSA9IDA7IGkgPCBoZWFkZXJDb3VudDsgKytpKQotICAgICAgICAgICAgbV9odHRw
SGVhZGVyRmllbGRzLnNldCgoQ0ZTdHJpbmdSZWYpa2V5c1tpXSwgKENGU3RyaW5nUmVmKXZhbHVl
c1tpXSk7Ci0gICAgfSBlbHNlCi0gICAgICAgIG1faHR0cFN0YXR1c0NvZGUgPSAwOworICAgIG1f
aW5pdExldmVsID0gaW5pdExldmVsOwogfQotCisgICAgCiBib29sIFJlc291cmNlUmVzcG9uc2U6
OnBsYXRmb3JtQ29tcGFyZShjb25zdCBSZXNvdXJjZVJlc3BvbnNlJiBhLCBjb25zdCBSZXNvdXJj
ZVJlc3BvbnNlJiBiKQogewogICAgIHJldHVybiBDRkVxdWFsKGEuY2ZVUkxSZXNwb25zZSgpLCBi
LmNmVVJMUmVzcG9uc2UoKSk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3Jr
L21hYy9SZXNvdXJjZVJlc3BvbnNlTWFjLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL25ldHdvcmsvbWFjL1Jlc291cmNlUmVzcG9uc2VNYWMubW0JKHJldmlzaW9uIDgy
NDc2KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9tYWMvUmVzb3VyY2VSZXNw
b25zZU1hYy5tbQkod29ya2luZyBjb3B5KQpAQCAtMzQsNiArMzQsNyBAQAogI2ltcG9ydCA8Rm91
bmRhdGlvbi9Gb3VuZGF0aW9uLmg+CiAjaW1wb3J0IDx3dGYvU3RkTGliRXh0cmFzLmg+CiAjaW1w
b3J0IDxsaW1pdHM+CisjaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgogCiBAaW50ZXJmYWNl
IE5TVVJMUmVzcG9uc2UgKEZvdW5kYXRpb25TZWNyZXRzV2ViQ29yZUtub3dzQWJvdXQpCiAtIChO
U1RpbWVJbnRlcnZhbClfY2FsY3VsYXRlZEV4cGlyYXRpb247CkBAIC00NSw2ICs0NiwxMSBAQCB0
eXBlZGVmIGludCBOU0ludGVnZXI7CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAorc3RhdGljIE5T
U3RyaW5nKiBjb25zdCBjb21tb25IZWFkZXJGaWVsZHNbXSA9IHsKKyAgICBAIkFnZSIsIEAiQ2Fj
aGUtQ29udHJvbCIsIEAiRGF0ZSIsIEAiRXRhZyIsIEAiRXhwaXJlcyIsIEAiTGFzdC1Nb2RpZmll
ZCIsIEAiUHJhZ21hIgorfTsKK3N0YXRpYyBjb25zdCBpbnQgbnVtQ29tbW9uSGVhZGVyRmllbGRz
ID0gc2l6ZW9mKGNvbW1vbkhlYWRlckZpZWxkcykgLyBzaXplb2YoQXRvbWljU3RyaW5nKik7CisK
IE5TVVJMUmVzcG9uc2UgKlJlc291cmNlUmVzcG9uc2U6Om5zVVJMUmVzcG9uc2UoKSBjb25zdAog
ewogICAgIGlmICghbV9uc1Jlc3BvbnNlICYmICFtX2lzTnVsbCkgewpAQCAtNjEsNDggKzY3LDcy
IEBAIE5TVVJMUmVzcG9uc2UgKlJlc291cmNlUmVzcG9uc2U6Om5zVVJMUmUKICAgICByZXR1cm4g
bV9uc1Jlc3BvbnNlLmdldCgpOwogfQogCi12b2lkIFJlc291cmNlUmVzcG9uc2U6OnBsYXRmb3Jt
TGF6eUluaXQoKQordm9pZCBSZXNvdXJjZVJlc3BvbnNlOjpwbGF0Zm9ybUxhenlJbml0KEluaXRM
ZXZlbCBpbml0TGV2ZWwpCiB7Ci0gICAgaWYgKG1faXNVcFRvRGF0ZSkKKyAgICBpZiAobV9pbml0
TGV2ZWwgPj0gaW5pdExldmVsKQogICAgICAgICByZXR1cm47Ci0gICAgbV9pc1VwVG9EYXRlID0g
dHJ1ZTsKIAogICAgIGlmIChtX2lzTnVsbCkgewogICAgICAgICBBU1NFUlQoIW1fbnNSZXNwb25z
ZSk7CiAgICAgICAgIHJldHVybjsKICAgICB9Ci0gICAgCi0gICAgbV91cmwgPSBbbV9uc1Jlc3Bv
bnNlLmdldCgpIFVSTF07Ci0gICAgbV9taW1lVHlwZSA9IFttX25zUmVzcG9uc2UuZ2V0KCkgTUlN
RVR5cGVdOwotICAgIG1fZXhwZWN0ZWRDb250ZW50TGVuZ3RoID0gW21fbnNSZXNwb25zZS5nZXQo
KSBleHBlY3RlZENvbnRlbnRMZW5ndGhdOwotICAgIG1fdGV4dEVuY29kaW5nTmFtZSA9IFttX25z
UmVzcG9uc2UuZ2V0KCkgdGV4dEVuY29kaW5nTmFtZV07Ci0KLSAgICAvLyBXb3JrYXJvdW5kIGZv
ciA8cmRhcjovL3Byb2JsZW0vODc1NzA4OD4sIGNhbiBiZSByZW1vdmVkIG9uY2UgdGhhdCBpcyBm
aXhlZC4KLSAgICB1bnNpZ25lZCB0ZXh0RW5jb2RpbmdOYW1lTGVuZ3RoID0gbV90ZXh0RW5jb2Rp
bmdOYW1lLmxlbmd0aCgpOwotICAgIGlmICh0ZXh0RW5jb2RpbmdOYW1lTGVuZ3RoID49IDIgJiYg
bV90ZXh0RW5jb2RpbmdOYW1lWzBVXSA9PSAnIicgJiYgbV90ZXh0RW5jb2RpbmdOYW1lW3RleHRF
bmNvZGluZ05hbWVMZW5ndGggLSAxXSA9PSAnIicpCi0gICAgICAgIG1fdGV4dEVuY29kaW5nTmFt
ZSA9IG1fdGV4dEVuY29kaW5nTmFtZS5zdWJzdHJpbmcoMSwgdGV4dEVuY29kaW5nTmFtZUxlbmd0
aCAtIDIpOwogCi0gICAgbV9zdWdnZXN0ZWRGaWxlbmFtZSA9IFttX25zUmVzcG9uc2UuZ2V0KCkg
c3VnZ2VzdGVkRmlsZW5hbWVdOwotICAgIAotICAgIGlmIChbbV9uc1Jlc3BvbnNlLmdldCgpIGlz
S2luZE9mQ2xhc3M6W05TSFRUUFVSTFJlc3BvbnNlIGNsYXNzXV0pIHsKLSAgICAgICAgTlNIVFRQ
VVJMUmVzcG9uc2UgKmh0dHBSZXNwb25zZSA9IChOU0hUVFBVUkxSZXNwb25zZSAqKW1fbnNSZXNw
b25zZS5nZXQoKTsKKyAgICBpZiAobV9pbml0TGV2ZWwgPCBDb21tb25GaWVsZHNPbmx5ICYmIGlu
aXRMZXZlbCA+PSBDb21tb25GaWVsZHNPbmx5KSB7CisgICAgICAgIE5TQXV0b3JlbGVhc2VQb29s
KiBwb29sID0gW1tOU0F1dG9yZWxlYXNlUG9vbCBhbGxvY10gaW5pdF07CisKKyAgICAgICAgbV9o
dHRwSGVhZGVyRmllbGRzLmNsZWFyKCk7CisgICAgICAgIG1fdXJsID0gW21fbnNSZXNwb25zZS5n
ZXQoKSBVUkxdOworICAgICAgICBtX21pbWVUeXBlID0gW21fbnNSZXNwb25zZS5nZXQoKSBNSU1F
VHlwZV07CisgICAgICAgIG1fZXhwZWN0ZWRDb250ZW50TGVuZ3RoID0gW21fbnNSZXNwb25zZS5n
ZXQoKSBleHBlY3RlZENvbnRlbnRMZW5ndGhdOworICAgICAgICBtX3RleHRFbmNvZGluZ05hbWUg
PSBbbV9uc1Jlc3BvbnNlLmdldCgpIHRleHRFbmNvZGluZ05hbWVdOworCisgICAgICAgIC8vIFdv
cmthcm91bmQgZm9yIDxyZGFyOi8vcHJvYmxlbS84NzU3MDg4PiwgY2FuIGJlIHJlbW92ZWQgb25j
ZSB0aGF0IGlzIGZpeGVkLgorICAgICAgICB1bnNpZ25lZCB0ZXh0RW5jb2RpbmdOYW1lTGVuZ3Ro
ID0gbV90ZXh0RW5jb2RpbmdOYW1lLmxlbmd0aCgpOworICAgICAgICBpZiAodGV4dEVuY29kaW5n
TmFtZUxlbmd0aCA+PSAyICYmIG1fdGV4dEVuY29kaW5nTmFtZVswVV0gPT0gJyInICYmIG1fdGV4
dEVuY29kaW5nTmFtZVt0ZXh0RW5jb2RpbmdOYW1lTGVuZ3RoIC0gMV0gPT0gJyInKQorICAgICAg
ICAgICAgbV90ZXh0RW5jb2RpbmdOYW1lID0gbV90ZXh0RW5jb2RpbmdOYW1lLnN1YnN0cmluZygx
LCB0ZXh0RW5jb2RpbmdOYW1lTGVuZ3RoIC0gMik7CisKKyAgICAgICAgbV9zdWdnZXN0ZWRGaWxl
bmFtZSA9IFttX25zUmVzcG9uc2UuZ2V0KCkgc3VnZ2VzdGVkRmlsZW5hbWVdOworCisgICAgICAg
IGlmIChbbV9uc1Jlc3BvbnNlLmdldCgpIGlzS2luZE9mQ2xhc3M6W05TSFRUUFVSTFJlc3BvbnNl
IGNsYXNzXV0pIHsKKyAgICAgICAgICAgIE5TSFRUUFVSTFJlc3BvbnNlICpodHRwUmVzcG9uc2Ug
PSAoTlNIVFRQVVJMUmVzcG9uc2UgKiltX25zUmVzcG9uc2UuZ2V0KCk7CisKKyAgICAgICAgICAg
IG1faHR0cFN0YXR1c0NvZGUgPSBbaHR0cFJlc3BvbnNlIHN0YXR1c0NvZGVdOworCisgICAgICAg
ICAgICBOU0RpY3Rpb25hcnkgKmhlYWRlcnMgPSBbaHR0cFJlc3BvbnNlIGFsbEhlYWRlckZpZWxk
c107CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbnVtQ29t
bW9uSGVhZGVyRmllbGRzOyBpKyspIHsKKyAgICAgICAgICAgICAgICBpZiAoTlNTdHJpbmcqIGhl
YWRlclZhbHVlID0gW2hlYWRlcnMgb2JqZWN0Rm9yS2V5OmNvbW1vbkhlYWRlckZpZWxkc1tpXV0p
CisgICAgICAgICAgICAgICAgICAgIG1faHR0cEhlYWRlckZpZWxkcy5zZXQoW2NvbW1vbkhlYWRl
ckZpZWxkc1tpXSBVVEY4U3RyaW5nXSwgaGVhZGVyVmFsdWUpOworICAgICAgICAgICAgfQorICAg
ICAgICB9IGVsc2UKKyAgICAgICAgICAgIG1faHR0cFN0YXR1c0NvZGUgPSAwOwogICAgICAgICAK
LSAgICAgICAgbV9odHRwU3RhdHVzQ29kZSA9IFtodHRwUmVzcG9uc2Ugc3RhdHVzQ29kZV07Cisg
ICAgICAgIFtwb29sIGRyYWluXTsKKyAgICB9CisKKyAgICBpZiAobV9pbml0TGV2ZWwgPCBBbGxG
aWVsZHMgJiYgaW5pdExldmVsID49IEFsbEZpZWxkcyAmJiBbbV9uc1Jlc3BvbnNlLmdldCgpIGlz
S2luZE9mQ2xhc3M6W05TSFRUUFVSTFJlc3BvbnNlIGNsYXNzXV0pIHsKKyAgICAgICAgTlNBdXRv
cmVsZWFzZVBvb2wqIHBvb2wgPSBbW05TQXV0b3JlbGVhc2VQb29sIGFsbG9jXSBpbml0XTsKKwor
ICAgICAgICBOU0hUVFBVUkxSZXNwb25zZSAqaHR0cFJlc3BvbnNlID0gKE5TSFRUUFVSTFJlc3Bv
bnNlICopbV9uc1Jlc3BvbnNlLmdldCgpOwogCiAgICAgICAgIFJldGFpblB0cjxOU1N0cmluZz4g
aHR0cFN0YXR1c0xpbmUoQWRvcHROUywgd2tDb3B5TlNVUkxSZXNwb25zZVN0YXR1c0xpbmUobV9u
c1Jlc3BvbnNlLmdldCgpKSk7CiAgICAgICAgIGlmIChodHRwU3RhdHVzTGluZSkKICAgICAgICAg
ICAgIG1faHR0cFN0YXR1c1RleHQgPSBleHRyYWN0UmVhc29uUGhyYXNlRnJvbUhUVFBTdGF0dXNM
aW5lKGh0dHBTdGF0dXNMaW5lLmdldCgpKTsKICAgICAgICAgZWxzZQogICAgICAgICAgICAgbV9o
dHRwU3RhdHVzVGV4dCA9ICJPSyI7Ci0gICAgICAgIAorCiAgICAgICAgIE5TRGljdGlvbmFyeSAq
aGVhZGVycyA9IFtodHRwUmVzcG9uc2UgYWxsSGVhZGVyRmllbGRzXTsKICAgICAgICAgTlNFbnVt
ZXJhdG9yICplID0gW2hlYWRlcnMga2V5RW51bWVyYXRvcl07CiAgICAgICAgIHdoaWxlIChOU1N0
cmluZyAqbmFtZSA9IFtlIG5leHRPYmplY3RdKQogICAgICAgICAgICAgbV9odHRwSGVhZGVyRmll
bGRzLnNldChuYW1lLCBbaGVhZGVycyBvYmplY3RGb3JLZXk6bmFtZV0pOwotICAgIH0gZWxzZQot
ICAgICAgICBtX2h0dHBTdGF0dXNDb2RlID0gMDsKKyAgICAgICAgCisgICAgICAgIFtwb29sIGRy
YWluXTsKKyAgICB9CisKKyAgICBtX2luaXRMZXZlbCA9IGluaXRMZXZlbDsKIH0KIAorICAgIAog
Ym9vbCBSZXNvdXJjZVJlc3BvbnNlOjpwbGF0Zm9ybUNvbXBhcmUoY29uc3QgUmVzb3VyY2VSZXNw
b25zZSYgYSwgY29uc3QgUmVzb3VyY2VSZXNwb25zZSYgYikKIHsKICAgICByZXR1cm4gYS5uc1VS
TFJlc3BvbnNlKCkgPT0gYi5uc1VSTFJlc3BvbnNlKCk7Cg==
</data>
<flag name="review"
          id="80248"
          type_id="1"
          status="+"
          setter="darin"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>87810</attachid>
            <date>2011-03-31 17:20:39 -0700</date>
            <delta_ts>2011-04-01 09:55:03 -0700</delta_ts>
            <desc>Really fixed missing paren.  More feedback changes.</desc>
            <filename>57488-5.patch</filename>
            <type>text/plain</type>
            <size>28873</size>
            <attacher name="Michael Saboff">msaboff</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDgyNTI0KQorKysgU291cmNlL1dlYkNvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsNTcgQEAKKzIwMTEtMDMtMzAgIE1pY2hhZWwg
U2Fib2ZmICA8bXNhYm9mZkBhcHBsZS5jb20+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZ
IChPT1BTISkuCisKKyAgICAgICAgQ2FjaGVkIFJlc291cmNlIE92ZXJoZWFkIFNwYWNlIFVzYWdl
IGFuZCBBY2NvdW50aW5nIEluYWNjdXJhdGUKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTU3NDg4CisKKyAgICAgICAgQ2hhbmdlZCB0aGUgZml4ZWQgb3Zl
cmhlYWQgdmFsdWUgZm9yIFJlc291cmNlUmVzcG9uc2UgdG8gMzgwMCBieXRlcy4KKyAgICAgICAg
TW9kaWZpZWQgUmVzb3VyY2VSZXNwb25zZTo6cGxhdGZvcm1MYXp5SW5pdCgpIHRvIGhhbmRsZSAi
YmFzZSIgbGV2ZWwKKyAgICAgICAgYXR0cmlidXRlcyBvciBhbGwgYXR0cmlidXRlcy4gIFRoZSBi
YXNlIGF0dHJpYnV0ZXMsIGxpa2UgVVJMLCBzdGF0dXMKKyAgICAgICAgY29kZSwgbWltZSB0eXBl
IGFuZCBhIGZldyBoZWFkZXIgZmllbGRzIChtb3N0bHkgY2FjaGUgcmVsYXRlZCkgYXJlCisgICAg
ICAgIHN1aXRhYmxlIGZvciBtb3N0IHJlc291cmNlcy4gIFRoaXMgcmVkdWNlcyB0aGUgcGVyIHJl
c291cmNlIG1lbW9yeQorICAgICAgICBuZWVkcyBieSBvdmVyIDFLIGJ5dGVzIHBlciByZXNvdXJj
ZSB0aHVzIHNhdmluZyBtZW1vcnkgaW4gdGhlIGNhY2hlLgorICAgICAgICBDb2xsZWN0aXZlbHks
IHRoZXNlIHR3byBjaGFuZ2VzIGJyaW5nIHRoZSBvdmVyaGVhZCBtZW1vcnkgY2FsY3VsYXRpb24K
KyAgICAgICAgaW4gbGluZSB3aXRoIHJlYWxpdHkuCisKKyAgICAgICAgTm8gbmV3IHRlc3RzIGFk
ZGVkIGR1ZSB0byBleGlzdGluZyB0ZXN0cyBjb3ZlciBhcmVhcyBvZiBjaGFuZ2UgYW5kCisgICAg
ICAgIHRoZXJlIGlzIG5vIGZ1bmN0aW9uYWwgY2hhbmdlLiAgVGhlIGNoYW5nZSBpcyBsaW1pdGVk
IHRvIHJlZHVjaW5nIAorICAgICAgICBtZW1vcnkgdXNhZ2UgYWxvbmcgZXhpc3RpbmcgcGF0aHMu
CisKKyAgICAgICAgKiBsb2FkZXIvY2FjaGUvQ2FjaGVkUmVzb3VyY2UuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6Q2FjaGVkUmVzb3VyY2U6OmNhblVzZUNhY2hlVmFsaWRhdG9yKToKKyAgICAgICAg
KiBwbGF0Zm9ybS9uZXR3b3JrL1Jlc291cmNlUmVzcG9uc2VCYXNlLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OlJlc291cmNlUmVzcG9uc2VCYXNlOjppc0hUVFApOgorICAgICAgICAoV2ViQ29yZTo6
UmVzb3VyY2VSZXNwb25zZUJhc2U6OnVybCk6CisgICAgICAgIChXZWJDb3JlOjpSZXNvdXJjZVJl
c3BvbnNlQmFzZTo6c2V0VVJMKToKKyAgICAgICAgKFdlYkNvcmU6OlJlc291cmNlUmVzcG9uc2VC
YXNlOjptaW1lVHlwZSk6CisgICAgICAgIChXZWJDb3JlOjpSZXNvdXJjZVJlc3BvbnNlQmFzZTo6
c2V0TWltZVR5cGUpOgorICAgICAgICAoV2ViQ29yZTo6UmVzb3VyY2VSZXNwb25zZUJhc2U6OmV4
cGVjdGVkQ29udGVudExlbmd0aCk6CisgICAgICAgIChXZWJDb3JlOjpSZXNvdXJjZVJlc3BvbnNl
QmFzZTo6c2V0RXhwZWN0ZWRDb250ZW50TGVuZ3RoKToKKyAgICAgICAgKFdlYkNvcmU6OlJlc291
cmNlUmVzcG9uc2VCYXNlOjp0ZXh0RW5jb2RpbmdOYW1lKToKKyAgICAgICAgKFdlYkNvcmU6OlJl
c291cmNlUmVzcG9uc2VCYXNlOjpzZXRUZXh0RW5jb2RpbmdOYW1lKToKKyAgICAgICAgKFdlYkNv
cmU6OlJlc291cmNlUmVzcG9uc2VCYXNlOjpzdWdnZXN0ZWRGaWxlbmFtZSk6CisgICAgICAgIChX
ZWJDb3JlOjpSZXNvdXJjZVJlc3BvbnNlQmFzZTo6c2V0U3VnZ2VzdGVkRmlsZW5hbWUpOgorICAg
ICAgICAoV2ViQ29yZTo6UmVzb3VyY2VSZXNwb25zZUJhc2U6Omh0dHBTdGF0dXNDb2RlKToKKyAg
ICAgICAgKFdlYkNvcmU6OlJlc291cmNlUmVzcG9uc2VCYXNlOjpzZXRIVFRQU3RhdHVzQ29kZSk6
CisgICAgICAgIChXZWJDb3JlOjpSZXNvdXJjZVJlc3BvbnNlQmFzZTo6aHR0cEhlYWRlckZpZWxk
KToKKyAgICAgICAgKFdlYkNvcmU6OlJlc291cmNlUmVzcG9uc2VCYXNlOjpzZXRIVFRQSGVhZGVy
RmllbGQpOgorICAgICAgICAoV2ViQ29yZTo6UmVzb3VyY2VSZXNwb25zZUJhc2U6OnBhcnNlQ2Fj
aGVDb250cm9sRGlyZWN0aXZlcyk6CisgICAgICAgIChXZWJDb3JlOjpSZXNvdXJjZVJlc3BvbnNl
QmFzZTo6aGFzQ2FjaGVWYWxpZGF0b3JGaWVsZHMpOgorICAgICAgICAoV2ViQ29yZTo6UmVzb3Vy
Y2VSZXNwb25zZUJhc2U6OmRhdGUpOgorICAgICAgICAoV2ViQ29yZTo6UmVzb3VyY2VSZXNwb25z
ZUJhc2U6OmFnZSk6CisgICAgICAgIChXZWJDb3JlOjpSZXNvdXJjZVJlc3BvbnNlQmFzZTo6ZXhw
aXJlcyk6CisgICAgICAgIChXZWJDb3JlOjpSZXNvdXJjZVJlc3BvbnNlQmFzZTo6bGFzdE1vZGlm
aWVkKToKKyAgICAgICAgKFdlYkNvcmU6OlJlc291cmNlUmVzcG9uc2VCYXNlOjpsYXp5SW5pdCk6
CisgICAgICAgICogcGxhdGZvcm0vbmV0d29yay9SZXNvdXJjZVJlc3BvbnNlQmFzZS5oOgorICAg
ICAgICAoV2ViQ29yZTo6UmVzb3VyY2VSZXNwb25zZUJhc2U6OnBsYXRmb3JtTGF6eUluaXQpOgor
ICAgICAgICAqIHBsYXRmb3JtL25ldHdvcmsvY2YvUmVzb3VyY2VSZXNwb25zZS5oOgorICAgICAg
ICAoV2ViQ29yZTo6UmVzb3VyY2VSZXNwb25zZTo6UmVzb3VyY2VSZXNwb25zZSk6CisgICAgICAg
IChXZWJDb3JlOjpSZXNvdXJjZVJlc3BvbnNlOjptZW1vcnlVc2FnZSk6CisgICAgICAgICogcGxh
dGZvcm0vbmV0d29yay9jZi9SZXNvdXJjZVJlc3BvbnNlQ0ZOZXQuY3BwOgorICAgICAgICAqIHBs
YXRmb3JtL25ldHdvcmsvbWFjL1Jlc291cmNlUmVzcG9uc2VNYWMubW06CisgICAgICAgIChXZWJD
b3JlOjpSZXNvdXJjZVJlc3BvbnNlOjpwbGF0Zm9ybUxhenlJbml0KToKKwogMjAxMS0wMy0zMCAg
TU9SSVRBIEhhamltZSAgPG1vcnJpdGFAZ29vZ2xlLmNvbT4KIAogICAgICAgICBSZXZpZXdlZCBi
eSBTaW1vbiBGcmFzZXIuCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvY2FjaGUvQ2FjaGVk
UmVzb3VyY2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2xvYWRlci9jYWNoZS9D
YWNoZWRSZXNvdXJjZS5jcHAJKHJldmlzaW9uIDgyNDc2KQorKysgU291cmNlL1dlYkNvcmUvbG9h
ZGVyL2NhY2hlL0NhY2hlZFJlc291cmNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTA0LDEwICs1
MDQsNyBAQCBib29sIENhY2hlZFJlc291cmNlOjpjYW5Vc2VDYWNoZVZhbGlkYXRvCiAKICAgICBp
ZiAobV9yZXNwb25zZS5jYWNoZUNvbnRyb2xDb250YWluc05vU3RvcmUoKSkKICAgICAgICAgcmV0
dXJuIGZhbHNlOwotCi0gICAgREVGSU5FX1NUQVRJQ19MT0NBTChjb25zdCBBdG9taWNTdHJpbmcs
IGxhc3RNb2RpZmllZEhlYWRlciwgKCJsYXN0LW1vZGlmaWVkIikpOwotICAgIERFRklORV9TVEFU
SUNfTE9DQUwoY29uc3QgQXRvbWljU3RyaW5nLCBlVGFnSGVhZGVyLCAoImV0YWciKSk7Ci0gICAg
cmV0dXJuICFtX3Jlc3BvbnNlLmh0dHBIZWFkZXJGaWVsZChsYXN0TW9kaWZpZWRIZWFkZXIpLmlz
RW1wdHkoKSB8fCAhbV9yZXNwb25zZS5odHRwSGVhZGVyRmllbGQoZVRhZ0hlYWRlcikuaXNFbXB0
eSgpOworICAgIHJldHVybiBtX3Jlc3BvbnNlLmhhc0NhY2hlVmFsaWRhdG9yRmllbGRzKCk7CiB9
CiAKIGJvb2wgQ2FjaGVkUmVzb3VyY2U6Om11c3RSZXZhbGlkYXRlRHVlVG9DYWNoZUhlYWRlcnMo
Q2FjaGVQb2xpY3kgY2FjaGVQb2xpY3kpIGNvbnN0CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9uZXR3b3JrL1Jlc291cmNlUmVzcG9uc2VCYXNlLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL1Jlc291cmNlUmVzcG9uc2VCYXNlLmNwcAkocmV2
aXNpb24gODI0NzYpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL1Jlc291cmNl
UmVzcG9uc2VCYXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTA4LDcgKzEwOCw3IEBAIFBhc3NP
d25QdHI8UmVzb3VyY2VSZXNwb25zZT4gUmVzb3VyY2VSZXMKICAgICByZXNwb25zZS0+c2V0SFRU
UFN0YXR1c0NvZGUoZGF0YS0+bV9odHRwU3RhdHVzQ29kZSk7CiAgICAgcmVzcG9uc2UtPnNldEhU
VFBTdGF0dXNUZXh0KGRhdGEtPm1faHR0cFN0YXR1c1RleHQpOwogCi0gICAgcmVzcG9uc2UtPmxh
enlJbml0KCk7CisgICAgcmVzcG9uc2UtPmxhenlJbml0KEFsbEZpZWxkcyk7CiAgICAgcmVzcG9u
c2UtPm1faHR0cEhlYWRlckZpZWxkcy5hZG9wdChkYXRhLT5tX2h0dHBIZWFkZXJzLnJlbGVhc2Uo
KSk7CiAgICAgcmVzcG9uc2UtPnNldExhc3RNb2RpZmllZERhdGUoZGF0YS0+bV9sYXN0TW9kaWZp
ZWREYXRlKTsKICAgICByZXNwb25zZS0+c2V0UmVzb3VyY2VMb2FkVGltaW5nKGRhdGEtPm1fcmVz
b3VyY2VMb2FkVGltaW5nLnJlbGVhc2UoKSk7CkBAIC0xMzUsNyArMTM1LDcgQEAgUGFzc093blB0
cjxDcm9zc1RocmVhZFJlc291cmNlUmVzcG9uc2VEYQogCiBib29sIFJlc291cmNlUmVzcG9uc2VC
YXNlOjppc0hUVFAoKSBjb25zdAogewotICAgIGxhenlJbml0KCk7CisgICAgbGF6eUluaXQoQ29t
bW9uRmllbGRzT25seSk7CiAKICAgICBTdHJpbmcgcHJvdG9jb2wgPSBtX3VybC5wcm90b2NvbCgp
OwogCkBAIC0xNDQsMTI2ICsxNDQsMTQwIEBAIGJvb2wgUmVzb3VyY2VSZXNwb25zZUJhc2U6Omlz
SFRUUCgpIGNvbnMKIAogY29uc3QgS1VSTCYgUmVzb3VyY2VSZXNwb25zZUJhc2U6OnVybCgpIGNv
bnN0CiB7Ci0gICAgbGF6eUluaXQoKTsKLSAgICAKKyAgICBsYXp5SW5pdChDb21tb25GaWVsZHNP
bmx5KTsKKwogICAgIHJldHVybiBtX3VybDsgCiB9CiAKIHZvaWQgUmVzb3VyY2VSZXNwb25zZUJh
c2U6OnNldFVSTChjb25zdCBLVVJMJiB1cmwpCiB7Ci0gICAgbGF6eUluaXQoKTsKKyAgICBsYXp5
SW5pdChDb21tb25GaWVsZHNPbmx5KTsKICAgICBtX2lzTnVsbCA9IGZhbHNlOwotICAgIAorCiAg
ICAgbV91cmwgPSB1cmw7IAogfQogCiBjb25zdCBTdHJpbmcmIFJlc291cmNlUmVzcG9uc2VCYXNl
OjptaW1lVHlwZSgpIGNvbnN0CiB7Ci0gICAgbGF6eUluaXQoKTsKKyAgICBsYXp5SW5pdChDb21t
b25GaWVsZHNPbmx5KTsKIAogICAgIHJldHVybiBtX21pbWVUeXBlOyAKIH0KIAogdm9pZCBSZXNv
dXJjZVJlc3BvbnNlQmFzZTo6c2V0TWltZVR5cGUoY29uc3QgU3RyaW5nJiBtaW1lVHlwZSkKIHsK
LSAgICBsYXp5SW5pdCgpOworICAgIGxhenlJbml0KENvbW1vbkZpZWxkc09ubHkpOwogICAgIG1f
aXNOdWxsID0gZmFsc2U7Ci0gICAgCisKICAgICBtX21pbWVUeXBlID0gbWltZVR5cGU7IAogfQog
CiBsb25nIGxvbmcgUmVzb3VyY2VSZXNwb25zZUJhc2U6OmV4cGVjdGVkQ29udGVudExlbmd0aCgp
IGNvbnN0IAogewotICAgIGxhenlJbml0KCk7CisgICAgbGF6eUluaXQoQ29tbW9uRmllbGRzT25s
eSk7CiAKICAgICByZXR1cm4gbV9leHBlY3RlZENvbnRlbnRMZW5ndGg7CiB9CiAKIHZvaWQgUmVz
b3VyY2VSZXNwb25zZUJhc2U6OnNldEV4cGVjdGVkQ29udGVudExlbmd0aChsb25nIGxvbmcgZXhw
ZWN0ZWRDb250ZW50TGVuZ3RoKQogewotICAgIGxhenlJbml0KCk7CisgICAgbGF6eUluaXQoQ29t
bW9uRmllbGRzT25seSk7CiAgICAgbV9pc051bGwgPSBmYWxzZTsKLSAgICAKKwogICAgIG1fZXhw
ZWN0ZWRDb250ZW50TGVuZ3RoID0gZXhwZWN0ZWRDb250ZW50TGVuZ3RoOyAKIH0KIAogY29uc3Qg
U3RyaW5nJiBSZXNvdXJjZVJlc3BvbnNlQmFzZTo6dGV4dEVuY29kaW5nTmFtZSgpIGNvbnN0CiB7
Ci0gICAgbGF6eUluaXQoKTsKKyAgICBsYXp5SW5pdChDb21tb25GaWVsZHNPbmx5KTsKIAogICAg
IHJldHVybiBtX3RleHRFbmNvZGluZ05hbWU7CiB9CiAKIHZvaWQgUmVzb3VyY2VSZXNwb25zZUJh
c2U6OnNldFRleHRFbmNvZGluZ05hbWUoY29uc3QgU3RyaW5nJiBlbmNvZGluZ05hbWUpCiB7Ci0g
ICAgbGF6eUluaXQoKTsKKyAgICBsYXp5SW5pdChDb21tb25GaWVsZHNPbmx5KTsKICAgICBtX2lz
TnVsbCA9IGZhbHNlOwotICAgIAorCiAgICAgbV90ZXh0RW5jb2RpbmdOYW1lID0gZW5jb2RpbmdO
YW1lOyAKIH0KIAogLy8gRklYTUUgc2hvdWxkIGNvbXB1dGUgdGhpcyBvbiB0aGUgZmx5CiBjb25z
dCBTdHJpbmcmIFJlc291cmNlUmVzcG9uc2VCYXNlOjpzdWdnZXN0ZWRGaWxlbmFtZSgpIGNvbnN0
CiB7Ci0gICAgbGF6eUluaXQoKTsKKyAgICBsYXp5SW5pdChDb21tb25GaWVsZHNPbmx5KTsKIAog
ICAgIHJldHVybiBtX3N1Z2dlc3RlZEZpbGVuYW1lOwogfQogCiB2b2lkIFJlc291cmNlUmVzcG9u
c2VCYXNlOjpzZXRTdWdnZXN0ZWRGaWxlbmFtZShjb25zdCBTdHJpbmcmIHN1Z2dlc3RlZE5hbWUp
CiB7Ci0gICAgbGF6eUluaXQoKTsKKyAgICBsYXp5SW5pdChDb21tb25GaWVsZHNPbmx5KTsKICAg
ICBtX2lzTnVsbCA9IGZhbHNlOwotICAgIAorCiAgICAgbV9zdWdnZXN0ZWRGaWxlbmFtZSA9IHN1
Z2dlc3RlZE5hbWU7IAogfQogCiBpbnQgUmVzb3VyY2VSZXNwb25zZUJhc2U6Omh0dHBTdGF0dXND
b2RlKCkgY29uc3QKIHsKLSAgICBsYXp5SW5pdCgpOworICAgIGxhenlJbml0KENvbW1vbkZpZWxk
c09ubHkpOwogCiAgICAgcmV0dXJuIG1faHR0cFN0YXR1c0NvZGU7CiB9CiAKIHZvaWQgUmVzb3Vy
Y2VSZXNwb25zZUJhc2U6OnNldEhUVFBTdGF0dXNDb2RlKGludCBzdGF0dXNDb2RlKQogewotICAg
IGxhenlJbml0KCk7CisgICAgbGF6eUluaXQoQ29tbW9uRmllbGRzT25seSk7CiAKICAgICBtX2h0
dHBTdGF0dXNDb2RlID0gc3RhdHVzQ29kZTsKIH0KIAogY29uc3QgU3RyaW5nJiBSZXNvdXJjZVJl
c3BvbnNlQmFzZTo6aHR0cFN0YXR1c1RleHQoKSBjb25zdCAKIHsKLSAgICBsYXp5SW5pdCgpOwor
ICAgIGxhenlJbml0KEFsbEZpZWxkcyk7CiAKICAgICByZXR1cm4gbV9odHRwU3RhdHVzVGV4dDsg
CiB9CiAKIHZvaWQgUmVzb3VyY2VSZXNwb25zZUJhc2U6OnNldEhUVFBTdGF0dXNUZXh0KGNvbnN0
IFN0cmluZyYgc3RhdHVzVGV4dCkgCiB7Ci0gICAgbGF6eUluaXQoKTsKKyAgICBsYXp5SW5pdChB
bGxGaWVsZHMpOwogCiAgICAgbV9odHRwU3RhdHVzVGV4dCA9IHN0YXR1c1RleHQ7IAogfQogCiBT
dHJpbmcgUmVzb3VyY2VSZXNwb25zZUJhc2U6Omh0dHBIZWFkZXJGaWVsZChjb25zdCBBdG9taWNT
dHJpbmcmIG5hbWUpIGNvbnN0CiB7Ci0gICAgbGF6eUluaXQoKTsKKyAgICBsYXp5SW5pdChDb21t
b25GaWVsZHNPbmx5KTsKKworICAgIC8vIENoZWNrIHRvIHNlZSBpZiB3ZSBhbHJlYWR5IGhhdmUg
dGhlIGZpZWxkIGJlZm9yZSBjb3B5aW5nIGFsbCBoZWFkZXIgZmllbGRzLgorICAgIFN0cmluZyB2
YWx1ZSA9IG1faHR0cEhlYWRlckZpZWxkcy5nZXQobmFtZSk7CisgICAgaWYgKCF2YWx1ZS5pc0Vt
cHR5KCkpICAgICAgICAKKyAgICAgICAgcmV0dXJuIHZhbHVlOworCisgICAgbGF6eUluaXQoQWxs
RmllbGRzKTsKIAogICAgIHJldHVybiBtX2h0dHBIZWFkZXJGaWVsZHMuZ2V0KG5hbWUpOyAKIH0K
IAogU3RyaW5nIFJlc291cmNlUmVzcG9uc2VCYXNlOjpodHRwSGVhZGVyRmllbGQoY29uc3QgY2hh
ciogbmFtZSkgY29uc3QKIHsKLSAgICBsYXp5SW5pdCgpOworICAgIGxhenlJbml0KENvbW1vbkZp
ZWxkc09ubHkpOworCisgICAgLy8gQ2hlY2sgdG8gc2VlIGlmIHdlIGFscmVhZHkgaGF2ZSBhIHRo
ZSBmaWVsZCBiZWZvcmUgY29weWluZyBhbGwgaGVhZGVyIGZpZWxkcworICAgIFN0cmluZyB2YWx1
ZSA9IG1faHR0cEhlYWRlckZpZWxkcy5nZXQobmFtZSk7CisgICAgaWYgKCF2YWx1ZS5pc0VtcHR5
KCkpCisgICAgICAgIHJldHVybiB2YWx1ZTsKKworICAgIGxhenlJbml0KEFsbEZpZWxkcyk7CiAK
ICAgICByZXR1cm4gbV9odHRwSGVhZGVyRmllbGRzLmdldChuYW1lKTsgCiB9CiAKIHZvaWQgUmVz
b3VyY2VSZXNwb25zZUJhc2U6OnNldEhUVFBIZWFkZXJGaWVsZChjb25zdCBBdG9taWNTdHJpbmcm
IG5hbWUsIGNvbnN0IFN0cmluZyYgdmFsdWUpCiB7Ci0gICAgbGF6eUluaXQoKTsKLSAgICAKKyAg
ICBsYXp5SW5pdChBbGxGaWVsZHMpOworCiAgICAgREVGSU5FX1NUQVRJQ19MT0NBTChjb25zdCBB
dG9taWNTdHJpbmcsIGFnZUhlYWRlciwgKCJhZ2UiKSk7CiAgICAgREVGSU5FX1NUQVRJQ19MT0NB
TChjb25zdCBBdG9taWNTdHJpbmcsIGNhY2hlQ29udHJvbEhlYWRlciwgKCJjYWNoZS1jb250cm9s
IikpOwogICAgIERFRklORV9TVEFUSUNfTE9DQUwoY29uc3QgQXRvbWljU3RyaW5nLCBkYXRlSGVh
ZGVyLCAoImRhdGUiKSk7CkBAIC0yODYsNyArMzAwLDcgQEAgdm9pZCBSZXNvdXJjZVJlc3BvbnNl
QmFzZTo6c2V0SFRUUEhlYWRlcgogCiBjb25zdCBIVFRQSGVhZGVyTWFwJiBSZXNvdXJjZVJlc3Bv
bnNlQmFzZTo6aHR0cEhlYWRlckZpZWxkcygpIGNvbnN0CiB7Ci0gICAgbGF6eUluaXQoKTsKKyAg
ICBsYXp5SW5pdChBbGxGaWVsZHMpOwogCiAgICAgcmV0dXJuIG1faHR0cEhlYWRlckZpZWxkczsK
IH0KQEAgLTI5NSw3ICszMDksNyBAQCB2b2lkIFJlc291cmNlUmVzcG9uc2VCYXNlOjpwYXJzZUNh
Y2hlQ29uCiB7CiAgICAgQVNTRVJUKCFtX2hhdmVQYXJzZWRDYWNoZUNvbnRyb2xIZWFkZXIpOwog
Ci0gICAgbGF6eUluaXQoKTsKKyAgICBsYXp5SW5pdChDb21tb25GaWVsZHNPbmx5KTsKIAogICAg
IG1faGF2ZVBhcnNlZENhY2hlQ29udHJvbEhlYWRlciA9IHRydWU7CiAKQEAgLTMzMiwxMyArMzQ2
LDE0IEBAIHZvaWQgUmVzb3VyY2VSZXNwb25zZUJhc2U6OnBhcnNlQ2FjaGVDb24KICAgICAgICAg
ICAgIH0KICAgICAgICAgfQogICAgIH0KLSAgICAgICAgCisKICAgICBpZiAoIW1fY2FjaGVDb250
cm9sQ29udGFpbnNOb0NhY2hlKSB7CiAgICAgICAgIC8vIEhhbmRsZSBQcmFnbWE6IG5vLWNhY2hl
CiAgICAgICAgIC8vIFRoaXMgaXMgZGVwcmVjYXRlZCBhbmQgZXF1aXZhbGVudCB0byBDYWNoZS1j
b250cm9sOiBuby1jYWNoZQogICAgICAgICAvLyBEb24ndCBib3RoZXIgdG9rZW5pemluZyB0aGUg
dmFsdWUsIGl0IGlzIG5vdCBpbXBvcnRhbnQKICAgICAgICAgREVGSU5FX1NUQVRJQ19MT0NBTChj
b25zdCBBdG9taWNTdHJpbmcsIHByYWdtYUhlYWRlciwgKCJwcmFnbWEiKSk7CiAgICAgICAgIFN0
cmluZyBwcmFnbWFWYWx1ZSA9IG1faHR0cEhlYWRlckZpZWxkcy5nZXQocHJhZ21hSGVhZGVyKTsK
KwogICAgICAgICBtX2NhY2hlQ29udHJvbENvbnRhaW5zTm9DYWNoZSA9IHByYWdtYVZhbHVlLmxv
d2VyKCkuY29udGFpbnMobm9DYWNoZURpcmVjdGl2ZSk7CiAgICAgfQogfQpAQCAtMzY0LDYgKzM3
OSwxNSBAQCBib29sIFJlc291cmNlUmVzcG9uc2VCYXNlOjpjYWNoZUNvbnRyb2xDCiAgICAgcmV0
dXJuIG1fY2FjaGVDb250cm9sQ29udGFpbnNNdXN0UmV2YWxpZGF0ZTsKIH0KIAorYm9vbCBSZXNv
dXJjZVJlc3BvbnNlQmFzZTo6aGFzQ2FjaGVWYWxpZGF0b3JGaWVsZHMoKSBjb25zdAoreworICAg
IGxhenlJbml0KENvbW1vbkZpZWxkc09ubHkpOworCisgICAgREVGSU5FX1NUQVRJQ19MT0NBTChj
b25zdCBBdG9taWNTdHJpbmcsIGxhc3RNb2RpZmllZEhlYWRlciwgKCJsYXN0LW1vZGlmaWVkIikp
OworICAgIERFRklORV9TVEFUSUNfTE9DQUwoY29uc3QgQXRvbWljU3RyaW5nLCBlVGFnSGVhZGVy
LCAoImV0YWciKSk7CisgICAgcmV0dXJuICFtX2h0dHBIZWFkZXJGaWVsZHMuZ2V0KGxhc3RNb2Rp
ZmllZEhlYWRlcikuaXNFbXB0eSgpIHx8ICFtX2h0dHBIZWFkZXJGaWVsZHMuZ2V0KGVUYWdIZWFk
ZXIpLmlzRW1wdHkoKTsKK30KKwogZG91YmxlIFJlc291cmNlUmVzcG9uc2VCYXNlOjpjYWNoZUNv
bnRyb2xNYXhBZ2UoKSBjb25zdAogewogICAgIGlmICghbV9oYXZlUGFyc2VkQ2FjaGVDb250cm9s
SGVhZGVyKQpAQCAtMzg4LDcgKzQxMiw3IEBAIHN0YXRpYyBkb3VibGUgcGFyc2VEYXRlVmFsdWVJ
bkhlYWRlcihjb24KIAogZG91YmxlIFJlc291cmNlUmVzcG9uc2VCYXNlOjpkYXRlKCkgY29uc3QK
IHsKLSAgICBsYXp5SW5pdCgpOworICAgIGxhenlJbml0KENvbW1vbkZpZWxkc09ubHkpOwogCiAg
ICAgaWYgKCFtX2hhdmVQYXJzZWREYXRlSGVhZGVyKSB7CiAgICAgICAgIERFRklORV9TVEFUSUNf
TE9DQUwoY29uc3QgQXRvbWljU3RyaW5nLCBoZWFkZXJOYW1lLCAoImRhdGUiKSk7CkBAIC00MDAs
OCArNDI0LDggQEAgZG91YmxlIFJlc291cmNlUmVzcG9uc2VCYXNlOjpkYXRlKCkgY29ucwogCiBk
b3VibGUgUmVzb3VyY2VSZXNwb25zZUJhc2U6OmFnZSgpIGNvbnN0CiB7Ci0gICAgbGF6eUluaXQo
KTsKLSAgICAKKyAgICBsYXp5SW5pdChDb21tb25GaWVsZHNPbmx5KTsKKwogICAgIGlmICghbV9o
YXZlUGFyc2VkQWdlSGVhZGVyKSB7CiAgICAgICAgIERFRklORV9TVEFUSUNfTE9DQUwoY29uc3Qg
QXRvbWljU3RyaW5nLCBoZWFkZXJOYW1lLCAoImFnZSIpKTsKICAgICAgICAgU3RyaW5nIGhlYWRl
clZhbHVlID0gbV9odHRwSGVhZGVyRmllbGRzLmdldChoZWFkZXJOYW1lKTsKQEAgLTQxNiw3ICs0
NDAsNyBAQCBkb3VibGUgUmVzb3VyY2VSZXNwb25zZUJhc2U6OmFnZSgpIGNvbnN0CiAKIGRvdWJs
ZSBSZXNvdXJjZVJlc3BvbnNlQmFzZTo6ZXhwaXJlcygpIGNvbnN0CiB7Ci0gICAgbGF6eUluaXQo
KTsKKyAgICBsYXp5SW5pdChDb21tb25GaWVsZHNPbmx5KTsKIAogICAgIGlmICghbV9oYXZlUGFy
c2VkRXhwaXJlc0hlYWRlcikgewogICAgICAgICBERUZJTkVfU1RBVElDX0xPQ0FMKGNvbnN0IEF0
b21pY1N0cmluZywgaGVhZGVyTmFtZSwgKCJleHBpcmVzIikpOwpAQCAtNDI4LDggKzQ1Miw4IEBA
IGRvdWJsZSBSZXNvdXJjZVJlc3BvbnNlQmFzZTo6ZXhwaXJlcygpIGMKIAogZG91YmxlIFJlc291
cmNlUmVzcG9uc2VCYXNlOjpsYXN0TW9kaWZpZWQoKSBjb25zdAogewotICAgIGxhenlJbml0KCk7
Ci0gICAgCisgICAgbGF6eUluaXQoQ29tbW9uRmllbGRzT25seSk7CisKICAgICBpZiAoIW1faGF2
ZVBhcnNlZExhc3RNb2RpZmllZEhlYWRlcikgewogICAgICAgICBERUZJTkVfU1RBVElDX0xPQ0FM
KGNvbnN0IEF0b21pY1N0cmluZywgaGVhZGVyTmFtZSwgKCJsYXN0LW1vZGlmaWVkIikpOwogICAg
ICAgICBtX2xhc3RNb2RpZmllZCA9IHBhcnNlRGF0ZVZhbHVlSW5IZWFkZXIobV9odHRwSGVhZGVy
RmllbGRzLCBoZWFkZXJOYW1lKTsKQEAgLTQ0MCw3ICs0NjQsNyBAQCBkb3VibGUgUmVzb3VyY2VS
ZXNwb25zZUJhc2U6Omxhc3RNb2RpZmllCiAKIGJvb2wgUmVzb3VyY2VSZXNwb25zZUJhc2U6Omlz
QXR0YWNobWVudCgpIGNvbnN0CiB7Ci0gICAgbGF6eUluaXQoKTsKKyAgICBsYXp5SW5pdChBbGxG
aWVsZHMpOwogCiAgICAgREVGSU5FX1NUQVRJQ19MT0NBTChjb25zdCBBdG9taWNTdHJpbmcsIGhl
YWRlck5hbWUsICgiY29udGVudC1kaXNwb3NpdGlvbiIpKTsKICAgICBTdHJpbmcgdmFsdWUgPSBt
X2h0dHBIZWFkZXJGaWVsZHMuZ2V0KGhlYWRlck5hbWUpOwpAQCAtNDU0LDIxICs0NzgsMjEgQEAg
Ym9vbCBSZXNvdXJjZVJlc3BvbnNlQmFzZTo6aXNBdHRhY2htZW50KAogICAKIHZvaWQgUmVzb3Vy
Y2VSZXNwb25zZUJhc2U6OnNldExhc3RNb2RpZmllZERhdGUodGltZV90IGxhc3RNb2RpZmllZERh
dGUpCiB7Ci0gICAgbGF6eUluaXQoKTsKKyAgICBsYXp5SW5pdChBbGxGaWVsZHMpOwogCiAgICAg
bV9sYXN0TW9kaWZpZWREYXRlID0gbGFzdE1vZGlmaWVkRGF0ZTsKIH0KIAogdGltZV90IFJlc291
cmNlUmVzcG9uc2VCYXNlOjpsYXN0TW9kaWZpZWREYXRlKCkgY29uc3QKIHsKLSAgICBsYXp5SW5p
dCgpOworICAgIGxhenlJbml0KEFsbEZpZWxkcyk7CiAKICAgICByZXR1cm4gbV9sYXN0TW9kaWZp
ZWREYXRlOwogfQogCiBib29sIFJlc291cmNlUmVzcG9uc2VCYXNlOjp3YXNDYWNoZWQoKSBjb25z
dAogewotICAgIGxhenlJbml0KCk7CisgICAgbGF6eUluaXQoQWxsRmllbGRzKTsKIAogICAgIHJl
dHVybiBtX3dhc0NhY2hlZDsKIH0KQEAgLTQ4MCw2NSArNTA0LDY1IEBAIHZvaWQgUmVzb3VyY2VS
ZXNwb25zZUJhc2U6OnNldFdhc0NhY2hlZCgKIAogYm9vbCBSZXNvdXJjZVJlc3BvbnNlQmFzZTo6
Y29ubmVjdGlvblJldXNlZCgpIGNvbnN0CiB7Ci0gICAgbGF6eUluaXQoKTsKKyAgICBsYXp5SW5p
dChBbGxGaWVsZHMpOwogCiAgICAgcmV0dXJuIG1fY29ubmVjdGlvblJldXNlZDsKIH0KIAogdm9p
ZCBSZXNvdXJjZVJlc3BvbnNlQmFzZTo6c2V0Q29ubmVjdGlvblJldXNlZChib29sIGNvbm5lY3Rp
b25SZXVzZWQpCiB7Ci0gICAgbGF6eUluaXQoKTsKKyAgICBsYXp5SW5pdChBbGxGaWVsZHMpOwog
CiAgICAgbV9jb25uZWN0aW9uUmV1c2VkID0gY29ubmVjdGlvblJldXNlZDsKIH0KIAogdW5zaWdu
ZWQgUmVzb3VyY2VSZXNwb25zZUJhc2U6OmNvbm5lY3Rpb25JRCgpIGNvbnN0CiB7Ci0gICAgbGF6
eUluaXQoKTsKKyAgICBsYXp5SW5pdChBbGxGaWVsZHMpOwogCiAgICAgcmV0dXJuIG1fY29ubmVj
dGlvbklEOwogfQogCiB2b2lkIFJlc291cmNlUmVzcG9uc2VCYXNlOjpzZXRDb25uZWN0aW9uSUQo
dW5zaWduZWQgY29ubmVjdGlvbklEKQogewotICAgIGxhenlJbml0KCk7CisgICAgbGF6eUluaXQo
QWxsRmllbGRzKTsKIAogICAgIG1fY29ubmVjdGlvbklEID0gY29ubmVjdGlvbklEOwogfQogCiBS
ZXNvdXJjZUxvYWRUaW1pbmcqIFJlc291cmNlUmVzcG9uc2VCYXNlOjpyZXNvdXJjZUxvYWRUaW1p
bmcoKSBjb25zdAogewotICAgIGxhenlJbml0KCk7CisgICAgbGF6eUluaXQoQWxsRmllbGRzKTsK
IAogICAgIHJldHVybiBtX3Jlc291cmNlTG9hZFRpbWluZy5nZXQoKTsKIH0KIAogdm9pZCBSZXNv
dXJjZVJlc3BvbnNlQmFzZTo6c2V0UmVzb3VyY2VMb2FkVGltaW5nKFBhc3NSZWZQdHI8UmVzb3Vy
Y2VMb2FkVGltaW5nPiByZXNvdXJjZUxvYWRUaW1pbmcpCiB7Ci0gICAgbGF6eUluaXQoKTsKKyAg
ICBsYXp5SW5pdChBbGxGaWVsZHMpOwogCiAgICAgbV9yZXNvdXJjZUxvYWRUaW1pbmcgPSByZXNv
dXJjZUxvYWRUaW1pbmc7CiB9CiAKIFBhc3NSZWZQdHI8UmVzb3VyY2VMb2FkSW5mbz4gUmVzb3Vy
Y2VSZXNwb25zZUJhc2U6OnJlc291cmNlTG9hZEluZm8oKSBjb25zdAogewotICAgIGxhenlJbml0
KCk7CisgICAgbGF6eUluaXQoQWxsRmllbGRzKTsKIAogICAgIHJldHVybiBtX3Jlc291cmNlTG9h
ZEluZm8uZ2V0KCk7CiB9CiAKIHZvaWQgUmVzb3VyY2VSZXNwb25zZUJhc2U6OnNldFJlc291cmNl
TG9hZEluZm8oUGFzc1JlZlB0cjxSZXNvdXJjZUxvYWRJbmZvPiBsb2FkSW5mbykKIHsKLSAgICBs
YXp5SW5pdCgpOworICAgIGxhenlJbml0KEFsbEZpZWxkcyk7CiAKICAgICBtX3Jlc291cmNlTG9h
ZEluZm8gPSBsb2FkSW5mbzsKIH0KIAotdm9pZCBSZXNvdXJjZVJlc3BvbnNlQmFzZTo6bGF6eUlu
aXQoKSBjb25zdAordm9pZCBSZXNvdXJjZVJlc3BvbnNlQmFzZTo6bGF6eUluaXQoSW5pdExldmVs
IGluaXRMZXZlbCkgY29uc3QKIHsKLSAgICBjb25zdF9jYXN0PFJlc291cmNlUmVzcG9uc2UqPihz
dGF0aWNfY2FzdDxjb25zdCBSZXNvdXJjZVJlc3BvbnNlKj4odGhpcykpLT5wbGF0Zm9ybUxhenlJ
bml0KCk7CisgICAgY29uc3RfY2FzdDxSZXNvdXJjZVJlc3BvbnNlKj4oc3RhdGljX2Nhc3Q8Y29u
c3QgUmVzb3VyY2VSZXNwb25zZSo+KHRoaXMpKS0+cGxhdGZvcm1MYXp5SW5pdChpbml0TGV2ZWwp
OwogfQotCisgICAgCiBib29sIFJlc291cmNlUmVzcG9uc2VCYXNlOjpjb21wYXJlKGNvbnN0IFJl
c291cmNlUmVzcG9uc2UmIGEsIGNvbnN0IFJlc291cmNlUmVzcG9uc2UmIGIpCiB7CiAgICAgaWYg
KGEuaXNOdWxsKCkgIT0gYi5pc051bGwoKSkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L25ldHdvcmsvUmVzb3VyY2VSZXNwb25zZUJhc2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9uZXR3b3JrL1Jlc291cmNlUmVzcG9uc2VCYXNlLmgJKHJldmlzaW9uIDgy
NDc2KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9SZXNvdXJjZVJlc3BvbnNl
QmFzZS5oCSh3b3JraW5nIGNvcHkpCkBAIC05Myw2ICs5Myw3IEBAIHB1YmxpYzoKICAgICBib29s
IGNhY2hlQ29udHJvbENvbnRhaW5zTm9DYWNoZSgpIGNvbnN0OwogICAgIGJvb2wgY2FjaGVDb250
cm9sQ29udGFpbnNOb1N0b3JlKCkgY29uc3Q7CiAgICAgYm9vbCBjYWNoZUNvbnRyb2xDb250YWlu
c011c3RSZXZhbGlkYXRlKCkgY29uc3Q7CisgICAgYm9vbCBoYXNDYWNoZVZhbGlkYXRvckZpZWxk
cygpIGNvbnN0OwogICAgIGRvdWJsZSBjYWNoZUNvbnRyb2xNYXhBZ2UoKSBjb25zdDsKICAgICBk
b3VibGUgZGF0ZSgpIGNvbnN0OwogICAgIGRvdWJsZSBhZ2UoKSBjb25zdDsKQEAgLTEyNCwxMyAr
MTI1LDE5IEBAIHB1YmxpYzoKICAgICBzdGF0aWMgYm9vbCBjb21wYXJlKGNvbnN0IFJlc291cmNl
UmVzcG9uc2UmLCBjb25zdCBSZXNvdXJjZVJlc3BvbnNlJik7CiAKIHByb3RlY3RlZDoKKyAgICBl
bnVtIEluaXRMZXZlbCB7CisgICAgICAgIFVuaW5pdGlhbGl6ZWQsCisgICAgICAgIENvbW1vbkZp
ZWxkc09ubHksCisgICAgICAgIEFsbEZpZWxkcworICAgIH07CisKICAgICBSZXNvdXJjZVJlc3Bv
bnNlQmFzZSgpOwogICAgIFJlc291cmNlUmVzcG9uc2VCYXNlKGNvbnN0IEtVUkwmIHVybCwgY29u
c3QgU3RyaW5nJiBtaW1lVHlwZSwgbG9uZyBsb25nIGV4cGVjdGVkTGVuZ3RoLCBjb25zdCBTdHJp
bmcmIHRleHRFbmNvZGluZ05hbWUsIGNvbnN0IFN0cmluZyYgZmlsZW5hbWUpOwogCi0gICAgdm9p
ZCBsYXp5SW5pdCgpIGNvbnN0OworICAgIHZvaWQgbGF6eUluaXQoSW5pdExldmVsKSBjb25zdDsK
IAogICAgIC8vIFRoZSBSZXNvdXJjZVJlc3BvbnNlIHN1YmNsYXNzIG1heSAic2hhZG93IiB0aGlz
IG1ldGhvZCB0byBsYXppbHkgaW5pdGlhbGl6ZSBwbGF0Zm9ybSBzcGVjaWZpYyBmaWVsZHMKLSAg
ICB2b2lkIHBsYXRmb3JtTGF6eUluaXQoKSB7IH0KKyAgICB2b2lkIHBsYXRmb3JtTGF6eUluaXQo
SW5pdExldmVsKSB7IH0KIAogICAgIC8vIFRoZSBSZXNvdXJjZVJlc3BvbnNlIHN1YmNsYXNzIG1h
eSAic2hhZG93IiB0aGlzIG1ldGhvZCB0byBjb21wYXJlIHBsYXRmb3JtIHNwZWNpZmljIGZpZWxk
cwogICAgIHN0YXRpYyBib29sIHBsYXRmb3JtQ29tcGFyZShjb25zdCBSZXNvdXJjZVJlc3BvbnNl
JiwgY29uc3QgUmVzb3VyY2VSZXNwb25zZSYpIHsgcmV0dXJuIHRydWU7IH0KSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY2YvUmVzb3VyY2VSZXNwb25zZS5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY2YvUmVzb3VyY2VSZXNwb25z
ZS5oCShyZXZpc2lvbiA4MjQ3NikKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsv
Y2YvUmVzb3VyY2VSZXNwb25zZS5oCSh3b3JraW5nIGNvcHkpCkBAIC00NCwyMSArNDQsMjEgQEAg
bmFtZXNwYWNlIFdlYkNvcmUgewogY2xhc3MgUmVzb3VyY2VSZXNwb25zZSA6IHB1YmxpYyBSZXNv
dXJjZVJlc3BvbnNlQmFzZSB7CiBwdWJsaWM6CiAgICAgUmVzb3VyY2VSZXNwb25zZSgpCi0gICAg
ICAgIDogbV9pc1VwVG9EYXRlKHRydWUpCisgICAgICAgIDogbV9pbml0TGV2ZWwoQWxsRmllbGRz
KQogICAgIHsKICAgICB9CiAKICNpZiBVU0UoQ0ZORVRXT1JLKQogICAgIFJlc291cmNlUmVzcG9u
c2UoQ0ZVUkxSZXNwb25zZVJlZiBjZlJlc3BvbnNlKQogICAgICAgICA6IG1fY2ZSZXNwb25zZShj
ZlJlc3BvbnNlKQotICAgICAgICAsIG1faXNVcFRvRGF0ZShmYWxzZSkKKyAgICAgICAgLCBtX2lu
aXRMZXZlbChVbmluaXRpYWxpemVkKQogICAgIHsKICAgICAgICAgbV9pc051bGwgPSAhY2ZSZXNw
b25zZTsKICAgICB9CiAjZWxzZQogICAgIFJlc291cmNlUmVzcG9uc2UoTlNVUkxSZXNwb25zZSog
bnNSZXNwb25zZSkKICAgICAgICAgOiBtX25zUmVzcG9uc2UobnNSZXNwb25zZSkKLSAgICAgICAg
LCBtX2lzVXBUb0RhdGUoZmFsc2UpCisgICAgICAgICwgbV9pbml0TGV2ZWwoVW5pbml0aWFsaXpl
ZCkKICAgICB7CiAgICAgICAgIG1faXNOdWxsID0gIW5zUmVzcG9uc2U7CiAgICAgfQpAQCAtNjYs
MTUgKzY2LDE1IEBAIHB1YmxpYzoKIAogICAgIFJlc291cmNlUmVzcG9uc2UoY29uc3QgS1VSTCYg
dXJsLCBjb25zdCBTdHJpbmcmIG1pbWVUeXBlLCBsb25nIGxvbmcgZXhwZWN0ZWRMZW5ndGgsIGNv
bnN0IFN0cmluZyYgdGV4dEVuY29kaW5nTmFtZSwgY29uc3QgU3RyaW5nJiBmaWxlbmFtZSkKICAg
ICAgICAgOiBSZXNvdXJjZVJlc3BvbnNlQmFzZSh1cmwsIG1pbWVUeXBlLCBleHBlY3RlZExlbmd0
aCwgdGV4dEVuY29kaW5nTmFtZSwgZmlsZW5hbWUpCi0gICAgICAgICwgbV9pc1VwVG9EYXRlKHRy
dWUpCisgICAgICAgICwgbV9pbml0TGV2ZWwoQWxsRmllbGRzKQogICAgIHsKICAgICB9CiAKICAg
ICB1bnNpZ25lZCBtZW1vcnlVc2FnZSgpIGNvbnN0CiAgICAgewogICAgICAgICAvLyBGSVhNRTog
RmluZCBzb21lIHByb2dyYW1tYXRpYyBsaWdod2VpZ2h0IHdheSB0byBjYWxjdWxhdGUgUmVzb3Vy
Y2VSZXNwb25zZSBhbmQgYXNzb2NpYXRlZCBjbGFzc2VzLgotICAgICAgICAvLyBUaGlzIGlzIGEg
cm91Z2ggZXN0aW1hdGUgb2YgcmVzb3VyY2Ugb3ZlcmhlYWQgYmFzZWQgb24gc3RhdHMgY29sbGVj
dGVkIGZyb20gdGhlIHN0cmVzcyB0ZXN0LgotICAgICAgICByZXR1cm4gMzA3MjsKKyAgICAgICAg
Ly8gVGhpcyBpcyBhIHJvdWdoIGVzdGltYXRlIG9mIHJlc291cmNlIG92ZXJoZWFkIGJhc2VkIG9u
IHN0YXRzIGNvbGxlY3RlZCBmcm9tIG1lbW9yeSB1c2FnZSB0ZXN0cy4KKyAgICAgICAgcmV0dXJu
IDM4MDA7CiAgICAgICAgIC8qICAxMjgwICogMiArICAgICAgICAgICAgICAgIC8vIGF2ZXJhZ2Ug
c2l6ZSBvZiBSZXNvdXJjZVJlc3BvbnNlLiBEb3VibGVkIHRvIGFjY291bnQgZm9yIHRoZSBXZWJD
b3JlIGNvcHkgYW5kIHRoZSBDRiBjb3B5LgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAvLyBNb3N0bHkgZHVlIHRvIHRoZSBzaXplIG9mIHRoZSBoYXNoIG1hcHMsIHRoZSBI
ZWFkZXIgTWFwIHN0cmluZ3MgYW5kIHRoZSBVUkwuCiAgICAgICAgICAgICAyNTYgKiAyICAgICAg
ICAgICAgICAgICAgIC8vIE92ZXJoZWFkIGZyb20gUmVzb3VyY2VSZXF1ZXN0LCBkb3VibGVkIHRv
IGFjY291bnQgZm9yIFdlYkNvcmUgY29weSBhbmQgQ0YgY29weS4KQEAgLTkxLDcgKzkxLDcgQEAg
cHVibGljOgogcHJpdmF0ZToKICAgICBmcmllbmQgY2xhc3MgUmVzb3VyY2VSZXNwb25zZUJhc2U7
CiAKLSAgICB2b2lkIHBsYXRmb3JtTGF6eUluaXQoKTsKKyAgICB2b2lkIHBsYXRmb3JtTGF6eUlu
aXQoSW5pdExldmVsKTsKICAgICBQYXNzT3duUHRyPENyb3NzVGhyZWFkUmVzb3VyY2VSZXNwb25z
ZURhdGE+IGRvUGxhdGZvcm1Db3B5RGF0YShQYXNzT3duUHRyPENyb3NzVGhyZWFkUmVzb3VyY2VS
ZXNwb25zZURhdGE+IGRhdGEpIGNvbnN0IHsgcmV0dXJuIGRhdGE7IH0KICAgICB2b2lkIGRvUGxh
dGZvcm1BZG9wdChQYXNzT3duUHRyPENyb3NzVGhyZWFkUmVzb3VyY2VSZXNwb25zZURhdGE+KSB7
IH0KIApAQCAtMTAyLDcgKzEwMiw3IEBAIHByaXZhdGU6CiAjZWxzZQogICAgIG11dGFibGUgUmV0
YWluUHRyPE5TVVJMUmVzcG9uc2U+IG1fbnNSZXNwb25zZTsKICNlbmRpZgotICAgIGJvb2wgbV9p
c1VwVG9EYXRlOworICAgIEluaXRMZXZlbCBtX2luaXRMZXZlbDsKIH07CiAKIHN0cnVjdCBDcm9z
c1RocmVhZFJlc291cmNlUmVzcG9uc2VEYXRhIDogcHVibGljIENyb3NzVGhyZWFkUmVzb3VyY2VS
ZXNwb25zZURhdGFCYXNlIHsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsv
Y2YvUmVzb3VyY2VSZXNwb25zZUNGTmV0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9uZXR3b3JrL2NmL1Jlc291cmNlUmVzcG9uc2VDRk5ldC5jcHAJKHJldmlzaW9u
IDgyNDc2KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9jZi9SZXNvdXJjZVJl
c3BvbnNlQ0ZOZXQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00Miw2ICs0MiwxMSBAQCB1c2luZyBu
YW1lc3BhY2Ugc3RkOwogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKK3N0YXRpYyBDRlN0cmluZ1Jl
ZiBjb25zdCBjb21tb25IZWFkZXJGaWVsZHNbXSA9IHsKKyAgICBDRlNUUigiQWdlIiksIENGU1RS
KCJDYWNoZS1Db250cm9sIiksIENGU1RSKCJEYXRlIiksIENGU1RSKCJFdGFnIiksIENGU1RSKCJF
eHBpcmVzIiksIENGU1RSKCJMYXN0LU1vZGlmaWVkIiksIENGU1RSKCJQcmFnbWEiKQorfTsKK3N0
YXRpYyBjb25zdCBpbnQgbnVtQ29tbW9uSGVhZGVyRmllbGRzID0gc2l6ZW9mKGNvbW1vbkhlYWRl
ckZpZWxkcykgLyBzaXplb2YoQ0ZTdHJpbmdSZWYpOworCiBDRlVSTFJlc3BvbnNlUmVmIFJlc291
cmNlUmVzcG9uc2U6OmNmVVJMUmVzcG9uc2UoKSBjb25zdAogewogICAgIGlmICghbV9jZlJlc3Bv
bnNlICYmICFtX2lzTnVsbCkgewpAQCAtNzAsNTIgKzc1LDY2IEBAIHN0YXRpYyB0aW1lX3QgdG9U
aW1lVChDRkFic29sdXRlVGltZSB0aW0KICAgICByZXR1cm4gbWluKG1heChtaW5UaW1lQXNEb3Vi
bGUsIHRpbWUgKyBrQ0ZBYnNvbHV0ZVRpbWVJbnRlcnZhbFNpbmNlMTk3MCksIG1heFRpbWVBc0Rv
dWJsZSk7CiB9CiAKLXZvaWQgUmVzb3VyY2VSZXNwb25zZTo6cGxhdGZvcm1MYXp5SW5pdCgpCit2
b2lkIFJlc291cmNlUmVzcG9uc2U6OnBsYXRmb3JtTGF6eUluaXQoSW5pdExldmVsIGluaXRMZXZl
bCkKIHsKLSAgICBpZiAobV9pc1VwVG9EYXRlKQorICAgIGlmIChtX2luaXRMZXZlbCA+IGluaXRM
ZXZlbCkKICAgICAgICAgcmV0dXJuOwotICAgIG1faXNVcFRvRGF0ZSA9IHRydWU7CiAKICAgICBp
ZiAobV9pc051bGwpIHsKICAgICAgICAgQVNTRVJUKCFtX2NmUmVzcG9uc2UuZ2V0KCkpOwogICAg
ICAgICByZXR1cm47CiAgICAgfQogCi0gICAgLy8gRklYTUU6IFdlIG1heSBuZWVkIHRvIGRvIE1J
TUUgdHlwZSBzbmlmZmluZyBoZXJlICh1bmxlc3MgdGhhdCBpcyBkb25lIGluIENGVVJMUmVzcG9u
c2VHZXRNSU1FVHlwZSkuCi0KLSAgICBtX3VybCA9IENGVVJMUmVzcG9uc2VHZXRVUkwobV9jZlJl
c3BvbnNlLmdldCgpKTsKLSAgICBtX21pbWVUeXBlID0gQ0ZVUkxSZXNwb25zZUdldE1JTUVUeXBl
KG1fY2ZSZXNwb25zZS5nZXQoKSk7Ci0gICAgbV9leHBlY3RlZENvbnRlbnRMZW5ndGggPSBDRlVS
TFJlc3BvbnNlR2V0RXhwZWN0ZWRDb250ZW50TGVuZ3RoKG1fY2ZSZXNwb25zZS5nZXQoKSk7Ci0g
ICAgbV90ZXh0RW5jb2RpbmdOYW1lID0gQ0ZVUkxSZXNwb25zZUdldFRleHRFbmNvZGluZ05hbWUo
bV9jZlJlc3BvbnNlLmdldCgpKTsKLQotICAgIC8vIFdvcmthcm91bmQgZm9yIDxyZGFyOi8vcHJv
YmxlbS84NzU3MDg4PiwgY2FuIGJlIHJlbW92ZWQgb25jZSB0aGF0IGlzIGZpeGVkLgotICAgIHVu
c2lnbmVkIHRleHRFbmNvZGluZ05hbWVMZW5ndGggPSBtX3RleHRFbmNvZGluZ05hbWUubGVuZ3Ro
KCk7Ci0gICAgaWYgKHRleHRFbmNvZGluZ05hbWVMZW5ndGggPj0gMiAmJiBtX3RleHRFbmNvZGlu
Z05hbWVbMFVdID09ICciJyAmJiBtX3RleHRFbmNvZGluZ05hbWVbdGV4dEVuY29kaW5nTmFtZUxl
bmd0aCAtIDFdID09ICciJykKLSAgICAgICAgbV90ZXh0RW5jb2RpbmdOYW1lID0gbV90ZXh0RW5j
b2RpbmdOYW1lLnN1YnN0cmluZygxLCB0ZXh0RW5jb2RpbmdOYW1lTGVuZ3RoIC0gMik7CisgICAg
aWYgKG1faW5pdExldmVsIDwgQ29tbW9uRmllbGRzT25seSAmJiBpbml0TGV2ZWwgPj0gQ29tbW9u
RmllbGRzT25seSkgeworICAgICAgICBtX3VybCA9IENGVVJMUmVzcG9uc2VHZXRVUkwobV9jZlJl
c3BvbnNlLmdldCgpKTsKKyAgICAgICAgbV9taW1lVHlwZSA9IENGVVJMUmVzcG9uc2VHZXRNSU1F
VHlwZShtX2NmUmVzcG9uc2UuZ2V0KCkpOworICAgICAgICBtX2V4cGVjdGVkQ29udGVudExlbmd0
aCA9IENGVVJMUmVzcG9uc2VHZXRFeHBlY3RlZENvbnRlbnRMZW5ndGgobV9jZlJlc3BvbnNlLmdl
dCgpKTsKKyAgICAgICAgbV90ZXh0RW5jb2RpbmdOYW1lID0gQ0ZVUkxSZXNwb25zZUdldFRleHRF
bmNvZGluZ05hbWUobV9jZlJlc3BvbnNlLmdldCgpKTsKKworICAgICAgICAvLyBXb3JrYXJvdW5k
IGZvciA8cmRhcjovL3Byb2JsZW0vODc1NzA4OD4sIGNhbiBiZSByZW1vdmVkIG9uY2UgdGhhdCBp
cyBmaXhlZC4KKyAgICAgICAgdW5zaWduZWQgdGV4dEVuY29kaW5nTmFtZUxlbmd0aCA9IG1fdGV4
dEVuY29kaW5nTmFtZS5sZW5ndGgoKTsKKyAgICAgICAgaWYgKHRleHRFbmNvZGluZ05hbWVMZW5n
dGggPj0gMiAmJiBtX3RleHRFbmNvZGluZ05hbWVbMFVdID09ICciJyAmJiBtX3RleHRFbmNvZGlu
Z05hbWVbdGV4dEVuY29kaW5nTmFtZUxlbmd0aCAtIDFdID09ICciJykKKyAgICAgICAgICAgIG1f
dGV4dEVuY29kaW5nTmFtZSA9IG1fdGV4dEVuY29kaW5nTmFtZS5zdWJzdHJpbmcoMSwgdGV4dEVu
Y29kaW5nTmFtZUxlbmd0aCAtIDIpOworCisgICAgICAgIG1fbGFzdE1vZGlmaWVkRGF0ZSA9IHRv
VGltZVQoQ0ZVUkxSZXNwb25zZUdldExhc3RNb2RpZmllZERhdGUobV9jZlJlc3BvbnNlLmdldCgp
KSk7CisKKyAgICAgICAgUmV0YWluUHRyPENGU3RyaW5nUmVmPiBzdWdnZXN0ZWRGaWxlbmFtZShB
ZG9wdENGLCBDRlVSTFJlc3BvbnNlQ29weVN1Z2dlc3RlZEZpbGVuYW1lKG1fY2ZSZXNwb25zZS5n
ZXQoKSkpOworICAgICAgICBtX3N1Z2dlc3RlZEZpbGVuYW1lID0gc3VnZ2VzdGVkRmlsZW5hbWUu
Z2V0KCk7CisKKyAgICAgICAgQ0ZIVFRQTWVzc2FnZVJlZiBodHRwUmVzcG9uc2UgPSBDRlVSTFJl
c3BvbnNlR2V0SFRUUFJlc3BvbnNlKG1fY2ZSZXNwb25zZS5nZXQoKSk7CisgICAgICAgIGlmICho
dHRwUmVzcG9uc2UpCisgICAgICAgICAgICBtX2h0dHBTdGF0dXNDb2RlID0gQ0ZIVFRQTWVzc2Fn
ZUdldFJlc3BvbnNlU3RhdHVzQ29kZShodHRwUmVzcG9uc2UpOworICAgICAgICBlbHNlCisgICAg
ICAgICAgICBtX2h0dHBTdGF0dXNDb2RlID0gMDsKIAotICAgIG1fbGFzdE1vZGlmaWVkRGF0ZSA9
IHRvVGltZVQoQ0ZVUkxSZXNwb25zZUdldExhc3RNb2RpZmllZERhdGUobV9jZlJlc3BvbnNlLmdl
dCgpKSk7Ci0KLSAgICBSZXRhaW5QdHI8Q0ZTdHJpbmdSZWY+IHN1Z2dlc3RlZEZpbGVuYW1lKEFk
b3B0Q0YsIENGVVJMUmVzcG9uc2VDb3B5U3VnZ2VzdGVkRmlsZW5hbWUobV9jZlJlc3BvbnNlLmdl
dCgpKSk7Ci0gICAgbV9zdWdnZXN0ZWRGaWxlbmFtZSA9IHN1Z2dlc3RlZEZpbGVuYW1lLmdldCgp
OworICAgICAgICBSZXRhaW5QdHI8Q0ZEaWN0aW9uYXJ5UmVmPiBoZWFkZXJzKEFkb3B0Q0YsIENG
SFRUUE1lc3NhZ2VDb3B5QWxsSGVhZGVyRmllbGRzKGh0dHBSZXNwb25zZSkpOwogCi0gICAgQ0ZI
VFRQTWVzc2FnZVJlZiBodHRwUmVzcG9uc2UgPSBDRlVSTFJlc3BvbnNlR2V0SFRUUFJlc3BvbnNl
KG1fY2ZSZXNwb25zZS5nZXQoKSk7Ci0gICAgaWYgKGh0dHBSZXNwb25zZSkgewotICAgICAgICBt
X2h0dHBTdGF0dXNDb2RlID0gQ0ZIVFRQTWVzc2FnZUdldFJlc3BvbnNlU3RhdHVzQ29kZShodHRw
UmVzcG9uc2UpOworICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IG51bUNvbW1vbkhlYWRlckZp
ZWxkczsgaSsrKSB7CisgICAgICAgICAgICBDRlN0cmluZ1JlZiB2YWx1ZTsKKyAgICAgICAgICAg
IGlmIChDRkRpY3Rpb25hcnlHZXRWYWx1ZUlmUHJlc2VudChoZWFkZXJzLmdldCgpLCBjb21tb25I
ZWFkZXJGaWVsZHNbaV0sICZ2YWx1ZSkpCisgICAgICAgICAgICAgICAgbV9odHRwSGVhZGVyRmll
bGRzLnNldChjb21tb25IZWFkZXJGaWVsZHNbaV0sIHZhbHVlKTsKKyAgICAgICAgfQorICAgIH0K
IAotICAgICAgICBSZXRhaW5QdHI8Q0ZTdHJpbmdSZWY+IHN0YXR1c0xpbmUoQWRvcHRDRiwgQ0ZI
VFRQTWVzc2FnZUNvcHlSZXNwb25zZVN0YXR1c0xpbmUoaHR0cFJlc3BvbnNlKSk7Ci0gICAgICAg
IG1faHR0cFN0YXR1c1RleHQgPSBleHRyYWN0UmVhc29uUGhyYXNlRnJvbUhUVFBTdGF0dXNMaW5l
KHN0YXR1c0xpbmUuZ2V0KCkpOworICAgIGlmIChtX2luaXRMZXZlbCA8IEFsbEZpZWxkcyAmJiBp
bml0TGV2ZWwgPj0gQWxsRmllbGRzKSB7CisgICAgICAgIENGSFRUUE1lc3NhZ2VSZWYgaHR0cFJl
c3BvbnNlID0gQ0ZVUkxSZXNwb25zZUdldEhUVFBSZXNwb25zZShtX2NmUmVzcG9uc2UuZ2V0KCkp
OworICAgICAgICBpZiAoaHR0cFJlc3BvbnNlKSB7CisgICAgICAgICAgICBSZXRhaW5QdHI8Q0ZT
dHJpbmdSZWY+IHN0YXR1c0xpbmUoQWRvcHRDRiwgQ0ZIVFRQTWVzc2FnZUNvcHlSZXNwb25zZVN0
YXR1c0xpbmUoaHR0cFJlc3BvbnNlKSk7CisgICAgICAgICAgICBtX2h0dHBTdGF0dXNUZXh0ID0g
ZXh0cmFjdFJlYXNvblBocmFzZUZyb21IVFRQU3RhdHVzTGluZShzdGF0dXNMaW5lLmdldCgpKTsK
KworICAgICAgICAgICAgUmV0YWluUHRyPENGRGljdGlvbmFyeVJlZj4gaGVhZGVycyhBZG9wdENG
LCBDRkhUVFBNZXNzYWdlQ29weUFsbEhlYWRlckZpZWxkcyhodHRwUmVzcG9uc2UpKTsKKyAgICAg
ICAgICAgIENGSW5kZXggaGVhZGVyQ291bnQgPSBDRkRpY3Rpb25hcnlHZXRDb3VudChoZWFkZXJz
LmdldCgpKTsKKyAgICAgICAgICAgIFZlY3Rvcjxjb25zdCB2b2lkKiwgMTI4PiBrZXlzKGhlYWRl
ckNvdW50KTsKKyAgICAgICAgICAgIFZlY3Rvcjxjb25zdCB2b2lkKiwgMTI4PiB2YWx1ZXMoaGVh
ZGVyQ291bnQpOworICAgICAgICAgICAgQ0ZEaWN0aW9uYXJ5R2V0S2V5c0FuZFZhbHVlcyhoZWFk
ZXJzLmdldCgpLCBrZXlzLmRhdGEoKSwgdmFsdWVzLmRhdGEoKSk7CisgICAgICAgICAgICBmb3Ig
KGludCBpID0gMDsgaSA8IGhlYWRlckNvdW50OyArK2kpCisgICAgICAgICAgICAgICAgbV9odHRw
SGVhZGVyRmllbGRzLnNldCgoQ0ZTdHJpbmdSZWYpa2V5c1tpXSwgKENGU3RyaW5nUmVmKXZhbHVl
c1tpXSk7CisgICAgICAgIH0KKyAgICB9CiAKLSAgICAgICAgUmV0YWluUHRyPENGRGljdGlvbmFy
eVJlZj4gaGVhZGVycyhBZG9wdENGLCBDRkhUVFBNZXNzYWdlQ29weUFsbEhlYWRlckZpZWxkcyho
dHRwUmVzcG9uc2UpKTsKLSAgICAgICAgQ0ZJbmRleCBoZWFkZXJDb3VudCA9IENGRGljdGlvbmFy
eUdldENvdW50KGhlYWRlcnMuZ2V0KCkpOwotICAgICAgICBWZWN0b3I8Y29uc3Qgdm9pZCosIDEy
OD4ga2V5cyhoZWFkZXJDb3VudCk7Ci0gICAgICAgIFZlY3Rvcjxjb25zdCB2b2lkKiwgMTI4PiB2
YWx1ZXMoaGVhZGVyQ291bnQpOwotICAgICAgICBDRkRpY3Rpb25hcnlHZXRLZXlzQW5kVmFsdWVz
KGhlYWRlcnMuZ2V0KCksIGtleXMuZGF0YSgpLCB2YWx1ZXMuZGF0YSgpKTsKLSAgICAgICAgZm9y
IChpbnQgaSA9IDA7IGkgPCBoZWFkZXJDb3VudDsgKytpKQotICAgICAgICAgICAgbV9odHRwSGVh
ZGVyRmllbGRzLnNldCgoQ0ZTdHJpbmdSZWYpa2V5c1tpXSwgKENGU3RyaW5nUmVmKXZhbHVlc1tp
XSk7Ci0gICAgfSBlbHNlCi0gICAgICAgIG1faHR0cFN0YXR1c0NvZGUgPSAwOworICAgIG1faW5p
dExldmVsID0gaW5pdExldmVsOwogfQotCisgICAgCiBib29sIFJlc291cmNlUmVzcG9uc2U6OnBs
YXRmb3JtQ29tcGFyZShjb25zdCBSZXNvdXJjZVJlc3BvbnNlJiBhLCBjb25zdCBSZXNvdXJjZVJl
c3BvbnNlJiBiKQogewogICAgIHJldHVybiBDRkVxdWFsKGEuY2ZVUkxSZXNwb25zZSgpLCBiLmNm
VVJMUmVzcG9uc2UoKSk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL21h
Yy9SZXNvdXJjZVJlc3BvbnNlTWFjLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL25ldHdvcmsvbWFjL1Jlc291cmNlUmVzcG9uc2VNYWMubW0JKHJldmlzaW9uIDgyNDc2
KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9tYWMvUmVzb3VyY2VSZXNwb25z
ZU1hYy5tbQkod29ya2luZyBjb3B5KQpAQCAtMzQsNiArMzQsNyBAQAogI2ltcG9ydCA8Rm91bmRh
dGlvbi9Gb3VuZGF0aW9uLmg+CiAjaW1wb3J0IDx3dGYvU3RkTGliRXh0cmFzLmg+CiAjaW1wb3J0
IDxsaW1pdHM+CisjaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgogCiBAaW50ZXJmYWNlIE5T
VVJMUmVzcG9uc2UgKEZvdW5kYXRpb25TZWNyZXRzV2ViQ29yZUtub3dzQWJvdXQpCiAtIChOU1Rp
bWVJbnRlcnZhbClfY2FsY3VsYXRlZEV4cGlyYXRpb247CkBAIC00NSw2ICs0NiwxMSBAQCB0eXBl
ZGVmIGludCBOU0ludGVnZXI7CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAorc3RhdGljIE5TU3Ry
aW5nKiBjb25zdCBjb21tb25IZWFkZXJGaWVsZHNbXSA9IHsKKyAgICBAIkFnZSIsIEAiQ2FjaGUt
Q29udHJvbCIsIEAiRGF0ZSIsIEAiRXRhZyIsIEAiRXhwaXJlcyIsIEAiTGFzdC1Nb2RpZmllZCIs
IEAiUHJhZ21hIgorfTsKK3N0YXRpYyBjb25zdCBpbnQgbnVtQ29tbW9uSGVhZGVyRmllbGRzID0g
c2l6ZW9mKGNvbW1vbkhlYWRlckZpZWxkcykgLyBzaXplb2YoQXRvbWljU3RyaW5nKik7CisKIE5T
VVJMUmVzcG9uc2UgKlJlc291cmNlUmVzcG9uc2U6Om5zVVJMUmVzcG9uc2UoKSBjb25zdAogewog
ICAgIGlmICghbV9uc1Jlc3BvbnNlICYmICFtX2lzTnVsbCkgewpAQCAtNjEsNDggKzY3LDcyIEBA
IE5TVVJMUmVzcG9uc2UgKlJlc291cmNlUmVzcG9uc2U6Om5zVVJMUmUKICAgICByZXR1cm4gbV9u
c1Jlc3BvbnNlLmdldCgpOwogfQogCi12b2lkIFJlc291cmNlUmVzcG9uc2U6OnBsYXRmb3JtTGF6
eUluaXQoKQordm9pZCBSZXNvdXJjZVJlc3BvbnNlOjpwbGF0Zm9ybUxhenlJbml0KEluaXRMZXZl
bCBpbml0TGV2ZWwpCiB7Ci0gICAgaWYgKG1faXNVcFRvRGF0ZSkKKyAgICBpZiAobV9pbml0TGV2
ZWwgPj0gaW5pdExldmVsKQogICAgICAgICByZXR1cm47Ci0gICAgbV9pc1VwVG9EYXRlID0gdHJ1
ZTsKIAogICAgIGlmIChtX2lzTnVsbCkgewogICAgICAgICBBU1NFUlQoIW1fbnNSZXNwb25zZSk7
CiAgICAgICAgIHJldHVybjsKICAgICB9Ci0gICAgCi0gICAgbV91cmwgPSBbbV9uc1Jlc3BvbnNl
LmdldCgpIFVSTF07Ci0gICAgbV9taW1lVHlwZSA9IFttX25zUmVzcG9uc2UuZ2V0KCkgTUlNRVR5
cGVdOwotICAgIG1fZXhwZWN0ZWRDb250ZW50TGVuZ3RoID0gW21fbnNSZXNwb25zZS5nZXQoKSBl
eHBlY3RlZENvbnRlbnRMZW5ndGhdOwotICAgIG1fdGV4dEVuY29kaW5nTmFtZSA9IFttX25zUmVz
cG9uc2UuZ2V0KCkgdGV4dEVuY29kaW5nTmFtZV07Ci0KLSAgICAvLyBXb3JrYXJvdW5kIGZvciA8
cmRhcjovL3Byb2JsZW0vODc1NzA4OD4sIGNhbiBiZSByZW1vdmVkIG9uY2UgdGhhdCBpcyBmaXhl
ZC4KLSAgICB1bnNpZ25lZCB0ZXh0RW5jb2RpbmdOYW1lTGVuZ3RoID0gbV90ZXh0RW5jb2RpbmdO
YW1lLmxlbmd0aCgpOwotICAgIGlmICh0ZXh0RW5jb2RpbmdOYW1lTGVuZ3RoID49IDIgJiYgbV90
ZXh0RW5jb2RpbmdOYW1lWzBVXSA9PSAnIicgJiYgbV90ZXh0RW5jb2RpbmdOYW1lW3RleHRFbmNv
ZGluZ05hbWVMZW5ndGggLSAxXSA9PSAnIicpCi0gICAgICAgIG1fdGV4dEVuY29kaW5nTmFtZSA9
IG1fdGV4dEVuY29kaW5nTmFtZS5zdWJzdHJpbmcoMSwgdGV4dEVuY29kaW5nTmFtZUxlbmd0aCAt
IDIpOwogCi0gICAgbV9zdWdnZXN0ZWRGaWxlbmFtZSA9IFttX25zUmVzcG9uc2UuZ2V0KCkgc3Vn
Z2VzdGVkRmlsZW5hbWVdOwotICAgIAotICAgIGlmIChbbV9uc1Jlc3BvbnNlLmdldCgpIGlzS2lu
ZE9mQ2xhc3M6W05TSFRUUFVSTFJlc3BvbnNlIGNsYXNzXV0pIHsKLSAgICAgICAgTlNIVFRQVVJM
UmVzcG9uc2UgKmh0dHBSZXNwb25zZSA9IChOU0hUVFBVUkxSZXNwb25zZSAqKW1fbnNSZXNwb25z
ZS5nZXQoKTsKKyAgICBpZiAobV9pbml0TGV2ZWwgPCBDb21tb25GaWVsZHNPbmx5ICYmIGluaXRM
ZXZlbCA+PSBDb21tb25GaWVsZHNPbmx5KSB7CisgICAgICAgIE5TQXV0b3JlbGVhc2VQb29sKiBw
b29sID0gW1tOU0F1dG9yZWxlYXNlUG9vbCBhbGxvY10gaW5pdF07CisKKyAgICAgICAgbV9odHRw
SGVhZGVyRmllbGRzLmNsZWFyKCk7CisgICAgICAgIG1fdXJsID0gW21fbnNSZXNwb25zZS5nZXQo
KSBVUkxdOworICAgICAgICBtX21pbWVUeXBlID0gW21fbnNSZXNwb25zZS5nZXQoKSBNSU1FVHlw
ZV07CisgICAgICAgIG1fZXhwZWN0ZWRDb250ZW50TGVuZ3RoID0gW21fbnNSZXNwb25zZS5nZXQo
KSBleHBlY3RlZENvbnRlbnRMZW5ndGhdOworICAgICAgICBtX3RleHRFbmNvZGluZ05hbWUgPSBb
bV9uc1Jlc3BvbnNlLmdldCgpIHRleHRFbmNvZGluZ05hbWVdOworCisgICAgICAgIC8vIFdvcmth
cm91bmQgZm9yIDxyZGFyOi8vcHJvYmxlbS84NzU3MDg4PiwgY2FuIGJlIHJlbW92ZWQgb25jZSB0
aGF0IGlzIGZpeGVkLgorICAgICAgICB1bnNpZ25lZCB0ZXh0RW5jb2RpbmdOYW1lTGVuZ3RoID0g
bV90ZXh0RW5jb2RpbmdOYW1lLmxlbmd0aCgpOworICAgICAgICBpZiAodGV4dEVuY29kaW5nTmFt
ZUxlbmd0aCA+PSAyICYmIG1fdGV4dEVuY29kaW5nTmFtZVswVV0gPT0gJyInICYmIG1fdGV4dEVu
Y29kaW5nTmFtZVt0ZXh0RW5jb2RpbmdOYW1lTGVuZ3RoIC0gMV0gPT0gJyInKQorICAgICAgICAg
ICAgbV90ZXh0RW5jb2RpbmdOYW1lID0gbV90ZXh0RW5jb2RpbmdOYW1lLnN1YnN0cmluZygxLCB0
ZXh0RW5jb2RpbmdOYW1lTGVuZ3RoIC0gMik7CisKKyAgICAgICAgbV9zdWdnZXN0ZWRGaWxlbmFt
ZSA9IFttX25zUmVzcG9uc2UuZ2V0KCkgc3VnZ2VzdGVkRmlsZW5hbWVdOworCisgICAgICAgIGlm
IChbbV9uc1Jlc3BvbnNlLmdldCgpIGlzS2luZE9mQ2xhc3M6W05TSFRUUFVSTFJlc3BvbnNlIGNs
YXNzXV0pIHsKKyAgICAgICAgICAgIE5TSFRUUFVSTFJlc3BvbnNlICpodHRwUmVzcG9uc2UgPSAo
TlNIVFRQVVJMUmVzcG9uc2UgKiltX25zUmVzcG9uc2UuZ2V0KCk7CisKKyAgICAgICAgICAgIG1f
aHR0cFN0YXR1c0NvZGUgPSBbaHR0cFJlc3BvbnNlIHN0YXR1c0NvZGVdOworCisgICAgICAgICAg
ICBOU0RpY3Rpb25hcnkgKmhlYWRlcnMgPSBbaHR0cFJlc3BvbnNlIGFsbEhlYWRlckZpZWxkc107
CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbnVtQ29tbW9u
SGVhZGVyRmllbGRzOyBpKyspIHsKKyAgICAgICAgICAgICAgICBpZiAoTlNTdHJpbmcqIGhlYWRl
clZhbHVlID0gW2hlYWRlcnMgb2JqZWN0Rm9yS2V5OmNvbW1vbkhlYWRlckZpZWxkc1tpXV0pCisg
ICAgICAgICAgICAgICAgICAgIG1faHR0cEhlYWRlckZpZWxkcy5zZXQoW2NvbW1vbkhlYWRlckZp
ZWxkc1tpXSBVVEY4U3RyaW5nXSwgaGVhZGVyVmFsdWUpOworICAgICAgICAgICAgfQorICAgICAg
ICB9IGVsc2UKKyAgICAgICAgICAgIG1faHR0cFN0YXR1c0NvZGUgPSAwOwogICAgICAgICAKLSAg
ICAgICAgbV9odHRwU3RhdHVzQ29kZSA9IFtodHRwUmVzcG9uc2Ugc3RhdHVzQ29kZV07CisgICAg
ICAgIFtwb29sIGRyYWluXTsKKyAgICB9CisKKyAgICBpZiAobV9pbml0TGV2ZWwgPCBBbGxGaWVs
ZHMgJiYgaW5pdExldmVsID49IEFsbEZpZWxkcyAmJiBbbV9uc1Jlc3BvbnNlLmdldCgpIGlzS2lu
ZE9mQ2xhc3M6W05TSFRUUFVSTFJlc3BvbnNlIGNsYXNzXV0pIHsKKyAgICAgICAgTlNBdXRvcmVs
ZWFzZVBvb2wqIHBvb2wgPSBbW05TQXV0b3JlbGVhc2VQb29sIGFsbG9jXSBpbml0XTsKKworICAg
ICAgICBOU0hUVFBVUkxSZXNwb25zZSAqaHR0cFJlc3BvbnNlID0gKE5TSFRUUFVSTFJlc3BvbnNl
ICopbV9uc1Jlc3BvbnNlLmdldCgpOwogCiAgICAgICAgIFJldGFpblB0cjxOU1N0cmluZz4gaHR0
cFN0YXR1c0xpbmUoQWRvcHROUywgd2tDb3B5TlNVUkxSZXNwb25zZVN0YXR1c0xpbmUobV9uc1Jl
c3BvbnNlLmdldCgpKSk7CiAgICAgICAgIGlmIChodHRwU3RhdHVzTGluZSkKICAgICAgICAgICAg
IG1faHR0cFN0YXR1c1RleHQgPSBleHRyYWN0UmVhc29uUGhyYXNlRnJvbUhUVFBTdGF0dXNMaW5l
KGh0dHBTdGF0dXNMaW5lLmdldCgpKTsKICAgICAgICAgZWxzZQogICAgICAgICAgICAgbV9odHRw
U3RhdHVzVGV4dCA9ICJPSyI7Ci0gICAgICAgIAorCiAgICAgICAgIE5TRGljdGlvbmFyeSAqaGVh
ZGVycyA9IFtodHRwUmVzcG9uc2UgYWxsSGVhZGVyRmllbGRzXTsKICAgICAgICAgTlNFbnVtZXJh
dG9yICplID0gW2hlYWRlcnMga2V5RW51bWVyYXRvcl07CiAgICAgICAgIHdoaWxlIChOU1N0cmlu
ZyAqbmFtZSA9IFtlIG5leHRPYmplY3RdKQogICAgICAgICAgICAgbV9odHRwSGVhZGVyRmllbGRz
LnNldChuYW1lLCBbaGVhZGVycyBvYmplY3RGb3JLZXk6bmFtZV0pOwotICAgIH0gZWxzZQotICAg
ICAgICBtX2h0dHBTdGF0dXNDb2RlID0gMDsKKyAgICAgICAgCisgICAgICAgIFtwb29sIGRyYWlu
XTsKKyAgICB9CisKKyAgICBtX2luaXRMZXZlbCA9IGluaXRMZXZlbDsKIH0KIAorICAgIAogYm9v
bCBSZXNvdXJjZVJlc3BvbnNlOjpwbGF0Zm9ybUNvbXBhcmUoY29uc3QgUmVzb3VyY2VSZXNwb25z
ZSYgYSwgY29uc3QgUmVzb3VyY2VSZXNwb25zZSYgYikKIHsKICAgICByZXR1cm4gYS5uc1VSTFJl
c3BvbnNlKCkgPT0gYi5uc1VSTFJlc3BvbnNlKCk7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>87871</attachid>
            <date>2011-04-01 09:55:03 -0700</date>
            <delta_ts>2011-04-01 17:48:44 -0700</delta_ts>
            <desc>Fix windows build with cast</desc>
            <filename>57488-6.patch</filename>
            <type>text/plain</type>
            <size>28888</size>
            <attacher name="Michael Saboff">msaboff</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDgyNTI0KQorKysgU291cmNlL1dlYkNvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsNTcgQEAKKzIwMTEtMDMtMzAgIE1pY2hhZWwg
U2Fib2ZmICA8bXNhYm9mZkBhcHBsZS5jb20+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZ
IChPT1BTISkuCisKKyAgICAgICAgQ2FjaGVkIFJlc291cmNlIE92ZXJoZWFkIFNwYWNlIFVzYWdl
IGFuZCBBY2NvdW50aW5nIEluYWNjdXJhdGUKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTU3NDg4CisKKyAgICAgICAgQ2hhbmdlZCB0aGUgZml4ZWQgb3Zl
cmhlYWQgdmFsdWUgZm9yIFJlc291cmNlUmVzcG9uc2UgdG8gMzgwMCBieXRlcy4KKyAgICAgICAg
TW9kaWZpZWQgUmVzb3VyY2VSZXNwb25zZTo6cGxhdGZvcm1MYXp5SW5pdCgpIHRvIGhhbmRsZSAi
YmFzZSIgbGV2ZWwKKyAgICAgICAgYXR0cmlidXRlcyBvciBhbGwgYXR0cmlidXRlcy4gIFRoZSBi
YXNlIGF0dHJpYnV0ZXMsIGxpa2UgVVJMLCBzdGF0dXMKKyAgICAgICAgY29kZSwgbWltZSB0eXBl
IGFuZCBhIGZldyBoZWFkZXIgZmllbGRzIChtb3N0bHkgY2FjaGUgcmVsYXRlZCkgYXJlCisgICAg
ICAgIHN1aXRhYmxlIGZvciBtb3N0IHJlc291cmNlcy4gIFRoaXMgcmVkdWNlcyB0aGUgcGVyIHJl
c291cmNlIG1lbW9yeQorICAgICAgICBuZWVkcyBieSBvdmVyIDFLIGJ5dGVzIHBlciByZXNvdXJj
ZSB0aHVzIHNhdmluZyBtZW1vcnkgaW4gdGhlIGNhY2hlLgorICAgICAgICBDb2xsZWN0aXZlbHks
IHRoZXNlIHR3byBjaGFuZ2VzIGJyaW5nIHRoZSBvdmVyaGVhZCBtZW1vcnkgY2FsY3VsYXRpb24K
KyAgICAgICAgaW4gbGluZSB3aXRoIHJlYWxpdHkuCisKKyAgICAgICAgTm8gbmV3IHRlc3RzIGFk
ZGVkIGR1ZSB0byBleGlzdGluZyB0ZXN0cyBjb3ZlciBhcmVhcyBvZiBjaGFuZ2UgYW5kCisgICAg
ICAgIHRoZXJlIGlzIG5vIGZ1bmN0aW9uYWwgY2hhbmdlLiAgVGhlIGNoYW5nZSBpcyBsaW1pdGVk
IHRvIHJlZHVjaW5nIAorICAgICAgICBtZW1vcnkgdXNhZ2UgYWxvbmcgZXhpc3RpbmcgcGF0aHMu
CisKKyAgICAgICAgKiBsb2FkZXIvY2FjaGUvQ2FjaGVkUmVzb3VyY2UuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6Q2FjaGVkUmVzb3VyY2U6OmNhblVzZUNhY2hlVmFsaWRhdG9yKToKKyAgICAgICAg
KiBwbGF0Zm9ybS9uZXR3b3JrL1Jlc291cmNlUmVzcG9uc2VCYXNlLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OlJlc291cmNlUmVzcG9uc2VCYXNlOjppc0hUVFApOgorICAgICAgICAoV2ViQ29yZTo6
UmVzb3VyY2VSZXNwb25zZUJhc2U6OnVybCk6CisgICAgICAgIChXZWJDb3JlOjpSZXNvdXJjZVJl
c3BvbnNlQmFzZTo6c2V0VVJMKToKKyAgICAgICAgKFdlYkNvcmU6OlJlc291cmNlUmVzcG9uc2VC
YXNlOjptaW1lVHlwZSk6CisgICAgICAgIChXZWJDb3JlOjpSZXNvdXJjZVJlc3BvbnNlQmFzZTo6
c2V0TWltZVR5cGUpOgorICAgICAgICAoV2ViQ29yZTo6UmVzb3VyY2VSZXNwb25zZUJhc2U6OmV4
cGVjdGVkQ29udGVudExlbmd0aCk6CisgICAgICAgIChXZWJDb3JlOjpSZXNvdXJjZVJlc3BvbnNl
QmFzZTo6c2V0RXhwZWN0ZWRDb250ZW50TGVuZ3RoKToKKyAgICAgICAgKFdlYkNvcmU6OlJlc291
cmNlUmVzcG9uc2VCYXNlOjp0ZXh0RW5jb2RpbmdOYW1lKToKKyAgICAgICAgKFdlYkNvcmU6OlJl
c291cmNlUmVzcG9uc2VCYXNlOjpzZXRUZXh0RW5jb2RpbmdOYW1lKToKKyAgICAgICAgKFdlYkNv
cmU6OlJlc291cmNlUmVzcG9uc2VCYXNlOjpzdWdnZXN0ZWRGaWxlbmFtZSk6CisgICAgICAgIChX
ZWJDb3JlOjpSZXNvdXJjZVJlc3BvbnNlQmFzZTo6c2V0U3VnZ2VzdGVkRmlsZW5hbWUpOgorICAg
ICAgICAoV2ViQ29yZTo6UmVzb3VyY2VSZXNwb25zZUJhc2U6Omh0dHBTdGF0dXNDb2RlKToKKyAg
ICAgICAgKFdlYkNvcmU6OlJlc291cmNlUmVzcG9uc2VCYXNlOjpzZXRIVFRQU3RhdHVzQ29kZSk6
CisgICAgICAgIChXZWJDb3JlOjpSZXNvdXJjZVJlc3BvbnNlQmFzZTo6aHR0cEhlYWRlckZpZWxk
KToKKyAgICAgICAgKFdlYkNvcmU6OlJlc291cmNlUmVzcG9uc2VCYXNlOjpzZXRIVFRQSGVhZGVy
RmllbGQpOgorICAgICAgICAoV2ViQ29yZTo6UmVzb3VyY2VSZXNwb25zZUJhc2U6OnBhcnNlQ2Fj
aGVDb250cm9sRGlyZWN0aXZlcyk6CisgICAgICAgIChXZWJDb3JlOjpSZXNvdXJjZVJlc3BvbnNl
QmFzZTo6aGFzQ2FjaGVWYWxpZGF0b3JGaWVsZHMpOgorICAgICAgICAoV2ViQ29yZTo6UmVzb3Vy
Y2VSZXNwb25zZUJhc2U6OmRhdGUpOgorICAgICAgICAoV2ViQ29yZTo6UmVzb3VyY2VSZXNwb25z
ZUJhc2U6OmFnZSk6CisgICAgICAgIChXZWJDb3JlOjpSZXNvdXJjZVJlc3BvbnNlQmFzZTo6ZXhw
aXJlcyk6CisgICAgICAgIChXZWJDb3JlOjpSZXNvdXJjZVJlc3BvbnNlQmFzZTo6bGFzdE1vZGlm
aWVkKToKKyAgICAgICAgKFdlYkNvcmU6OlJlc291cmNlUmVzcG9uc2VCYXNlOjpsYXp5SW5pdCk6
CisgICAgICAgICogcGxhdGZvcm0vbmV0d29yay9SZXNvdXJjZVJlc3BvbnNlQmFzZS5oOgorICAg
ICAgICAoV2ViQ29yZTo6UmVzb3VyY2VSZXNwb25zZUJhc2U6OnBsYXRmb3JtTGF6eUluaXQpOgor
ICAgICAgICAqIHBsYXRmb3JtL25ldHdvcmsvY2YvUmVzb3VyY2VSZXNwb25zZS5oOgorICAgICAg
ICAoV2ViQ29yZTo6UmVzb3VyY2VSZXNwb25zZTo6UmVzb3VyY2VSZXNwb25zZSk6CisgICAgICAg
IChXZWJDb3JlOjpSZXNvdXJjZVJlc3BvbnNlOjptZW1vcnlVc2FnZSk6CisgICAgICAgICogcGxh
dGZvcm0vbmV0d29yay9jZi9SZXNvdXJjZVJlc3BvbnNlQ0ZOZXQuY3BwOgorICAgICAgICAqIHBs
YXRmb3JtL25ldHdvcmsvbWFjL1Jlc291cmNlUmVzcG9uc2VNYWMubW06CisgICAgICAgIChXZWJD
b3JlOjpSZXNvdXJjZVJlc3BvbnNlOjpwbGF0Zm9ybUxhenlJbml0KToKKwogMjAxMS0wMy0zMCAg
TU9SSVRBIEhhamltZSAgPG1vcnJpdGFAZ29vZ2xlLmNvbT4KIAogICAgICAgICBSZXZpZXdlZCBi
eSBTaW1vbiBGcmFzZXIuCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvY2FjaGUvQ2FjaGVk
UmVzb3VyY2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2xvYWRlci9jYWNoZS9D
YWNoZWRSZXNvdXJjZS5jcHAJKHJldmlzaW9uIDgyNDc2KQorKysgU291cmNlL1dlYkNvcmUvbG9h
ZGVyL2NhY2hlL0NhY2hlZFJlc291cmNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTA0LDEwICs1
MDQsNyBAQCBib29sIENhY2hlZFJlc291cmNlOjpjYW5Vc2VDYWNoZVZhbGlkYXRvCiAKICAgICBp
ZiAobV9yZXNwb25zZS5jYWNoZUNvbnRyb2xDb250YWluc05vU3RvcmUoKSkKICAgICAgICAgcmV0
dXJuIGZhbHNlOwotCi0gICAgREVGSU5FX1NUQVRJQ19MT0NBTChjb25zdCBBdG9taWNTdHJpbmcs
IGxhc3RNb2RpZmllZEhlYWRlciwgKCJsYXN0LW1vZGlmaWVkIikpOwotICAgIERFRklORV9TVEFU
SUNfTE9DQUwoY29uc3QgQXRvbWljU3RyaW5nLCBlVGFnSGVhZGVyLCAoImV0YWciKSk7Ci0gICAg
cmV0dXJuICFtX3Jlc3BvbnNlLmh0dHBIZWFkZXJGaWVsZChsYXN0TW9kaWZpZWRIZWFkZXIpLmlz
RW1wdHkoKSB8fCAhbV9yZXNwb25zZS5odHRwSGVhZGVyRmllbGQoZVRhZ0hlYWRlcikuaXNFbXB0
eSgpOworICAgIHJldHVybiBtX3Jlc3BvbnNlLmhhc0NhY2hlVmFsaWRhdG9yRmllbGRzKCk7CiB9
CiAKIGJvb2wgQ2FjaGVkUmVzb3VyY2U6Om11c3RSZXZhbGlkYXRlRHVlVG9DYWNoZUhlYWRlcnMo
Q2FjaGVQb2xpY3kgY2FjaGVQb2xpY3kpIGNvbnN0CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9uZXR3b3JrL1Jlc291cmNlUmVzcG9uc2VCYXNlLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL1Jlc291cmNlUmVzcG9uc2VCYXNlLmNwcAkocmV2
aXNpb24gODI0NzYpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL1Jlc291cmNl
UmVzcG9uc2VCYXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTA4LDcgKzEwOCw3IEBAIFBhc3NP
d25QdHI8UmVzb3VyY2VSZXNwb25zZT4gUmVzb3VyY2VSZXMKICAgICByZXNwb25zZS0+c2V0SFRU
UFN0YXR1c0NvZGUoZGF0YS0+bV9odHRwU3RhdHVzQ29kZSk7CiAgICAgcmVzcG9uc2UtPnNldEhU
VFBTdGF0dXNUZXh0KGRhdGEtPm1faHR0cFN0YXR1c1RleHQpOwogCi0gICAgcmVzcG9uc2UtPmxh
enlJbml0KCk7CisgICAgcmVzcG9uc2UtPmxhenlJbml0KEFsbEZpZWxkcyk7CiAgICAgcmVzcG9u
c2UtPm1faHR0cEhlYWRlckZpZWxkcy5hZG9wdChkYXRhLT5tX2h0dHBIZWFkZXJzLnJlbGVhc2Uo
KSk7CiAgICAgcmVzcG9uc2UtPnNldExhc3RNb2RpZmllZERhdGUoZGF0YS0+bV9sYXN0TW9kaWZp
ZWREYXRlKTsKICAgICByZXNwb25zZS0+c2V0UmVzb3VyY2VMb2FkVGltaW5nKGRhdGEtPm1fcmVz
b3VyY2VMb2FkVGltaW5nLnJlbGVhc2UoKSk7CkBAIC0xMzUsNyArMTM1LDcgQEAgUGFzc093blB0
cjxDcm9zc1RocmVhZFJlc291cmNlUmVzcG9uc2VEYQogCiBib29sIFJlc291cmNlUmVzcG9uc2VC
YXNlOjppc0hUVFAoKSBjb25zdAogewotICAgIGxhenlJbml0KCk7CisgICAgbGF6eUluaXQoQ29t
bW9uRmllbGRzT25seSk7CiAKICAgICBTdHJpbmcgcHJvdG9jb2wgPSBtX3VybC5wcm90b2NvbCgp
OwogCkBAIC0xNDQsMTI2ICsxNDQsMTQwIEBAIGJvb2wgUmVzb3VyY2VSZXNwb25zZUJhc2U6Omlz
SFRUUCgpIGNvbnMKIAogY29uc3QgS1VSTCYgUmVzb3VyY2VSZXNwb25zZUJhc2U6OnVybCgpIGNv
bnN0CiB7Ci0gICAgbGF6eUluaXQoKTsKLSAgICAKKyAgICBsYXp5SW5pdChDb21tb25GaWVsZHNP
bmx5KTsKKwogICAgIHJldHVybiBtX3VybDsgCiB9CiAKIHZvaWQgUmVzb3VyY2VSZXNwb25zZUJh
c2U6OnNldFVSTChjb25zdCBLVVJMJiB1cmwpCiB7Ci0gICAgbGF6eUluaXQoKTsKKyAgICBsYXp5
SW5pdChDb21tb25GaWVsZHNPbmx5KTsKICAgICBtX2lzTnVsbCA9IGZhbHNlOwotICAgIAorCiAg
ICAgbV91cmwgPSB1cmw7IAogfQogCiBjb25zdCBTdHJpbmcmIFJlc291cmNlUmVzcG9uc2VCYXNl
OjptaW1lVHlwZSgpIGNvbnN0CiB7Ci0gICAgbGF6eUluaXQoKTsKKyAgICBsYXp5SW5pdChDb21t
b25GaWVsZHNPbmx5KTsKIAogICAgIHJldHVybiBtX21pbWVUeXBlOyAKIH0KIAogdm9pZCBSZXNv
dXJjZVJlc3BvbnNlQmFzZTo6c2V0TWltZVR5cGUoY29uc3QgU3RyaW5nJiBtaW1lVHlwZSkKIHsK
LSAgICBsYXp5SW5pdCgpOworICAgIGxhenlJbml0KENvbW1vbkZpZWxkc09ubHkpOwogICAgIG1f
aXNOdWxsID0gZmFsc2U7Ci0gICAgCisKICAgICBtX21pbWVUeXBlID0gbWltZVR5cGU7IAogfQog
CiBsb25nIGxvbmcgUmVzb3VyY2VSZXNwb25zZUJhc2U6OmV4cGVjdGVkQ29udGVudExlbmd0aCgp
IGNvbnN0IAogewotICAgIGxhenlJbml0KCk7CisgICAgbGF6eUluaXQoQ29tbW9uRmllbGRzT25s
eSk7CiAKICAgICByZXR1cm4gbV9leHBlY3RlZENvbnRlbnRMZW5ndGg7CiB9CiAKIHZvaWQgUmVz
b3VyY2VSZXNwb25zZUJhc2U6OnNldEV4cGVjdGVkQ29udGVudExlbmd0aChsb25nIGxvbmcgZXhw
ZWN0ZWRDb250ZW50TGVuZ3RoKQogewotICAgIGxhenlJbml0KCk7CisgICAgbGF6eUluaXQoQ29t
bW9uRmllbGRzT25seSk7CiAgICAgbV9pc051bGwgPSBmYWxzZTsKLSAgICAKKwogICAgIG1fZXhw
ZWN0ZWRDb250ZW50TGVuZ3RoID0gZXhwZWN0ZWRDb250ZW50TGVuZ3RoOyAKIH0KIAogY29uc3Qg
U3RyaW5nJiBSZXNvdXJjZVJlc3BvbnNlQmFzZTo6dGV4dEVuY29kaW5nTmFtZSgpIGNvbnN0CiB7
Ci0gICAgbGF6eUluaXQoKTsKKyAgICBsYXp5SW5pdChDb21tb25GaWVsZHNPbmx5KTsKIAogICAg
IHJldHVybiBtX3RleHRFbmNvZGluZ05hbWU7CiB9CiAKIHZvaWQgUmVzb3VyY2VSZXNwb25zZUJh
c2U6OnNldFRleHRFbmNvZGluZ05hbWUoY29uc3QgU3RyaW5nJiBlbmNvZGluZ05hbWUpCiB7Ci0g
ICAgbGF6eUluaXQoKTsKKyAgICBsYXp5SW5pdChDb21tb25GaWVsZHNPbmx5KTsKICAgICBtX2lz
TnVsbCA9IGZhbHNlOwotICAgIAorCiAgICAgbV90ZXh0RW5jb2RpbmdOYW1lID0gZW5jb2RpbmdO
YW1lOyAKIH0KIAogLy8gRklYTUUgc2hvdWxkIGNvbXB1dGUgdGhpcyBvbiB0aGUgZmx5CiBjb25z
dCBTdHJpbmcmIFJlc291cmNlUmVzcG9uc2VCYXNlOjpzdWdnZXN0ZWRGaWxlbmFtZSgpIGNvbnN0
CiB7Ci0gICAgbGF6eUluaXQoKTsKKyAgICBsYXp5SW5pdChDb21tb25GaWVsZHNPbmx5KTsKIAog
ICAgIHJldHVybiBtX3N1Z2dlc3RlZEZpbGVuYW1lOwogfQogCiB2b2lkIFJlc291cmNlUmVzcG9u
c2VCYXNlOjpzZXRTdWdnZXN0ZWRGaWxlbmFtZShjb25zdCBTdHJpbmcmIHN1Z2dlc3RlZE5hbWUp
CiB7Ci0gICAgbGF6eUluaXQoKTsKKyAgICBsYXp5SW5pdChDb21tb25GaWVsZHNPbmx5KTsKICAg
ICBtX2lzTnVsbCA9IGZhbHNlOwotICAgIAorCiAgICAgbV9zdWdnZXN0ZWRGaWxlbmFtZSA9IHN1
Z2dlc3RlZE5hbWU7IAogfQogCiBpbnQgUmVzb3VyY2VSZXNwb25zZUJhc2U6Omh0dHBTdGF0dXND
b2RlKCkgY29uc3QKIHsKLSAgICBsYXp5SW5pdCgpOworICAgIGxhenlJbml0KENvbW1vbkZpZWxk
c09ubHkpOwogCiAgICAgcmV0dXJuIG1faHR0cFN0YXR1c0NvZGU7CiB9CiAKIHZvaWQgUmVzb3Vy
Y2VSZXNwb25zZUJhc2U6OnNldEhUVFBTdGF0dXNDb2RlKGludCBzdGF0dXNDb2RlKQogewotICAg
IGxhenlJbml0KCk7CisgICAgbGF6eUluaXQoQ29tbW9uRmllbGRzT25seSk7CiAKICAgICBtX2h0
dHBTdGF0dXNDb2RlID0gc3RhdHVzQ29kZTsKIH0KIAogY29uc3QgU3RyaW5nJiBSZXNvdXJjZVJl
c3BvbnNlQmFzZTo6aHR0cFN0YXR1c1RleHQoKSBjb25zdCAKIHsKLSAgICBsYXp5SW5pdCgpOwor
ICAgIGxhenlJbml0KEFsbEZpZWxkcyk7CiAKICAgICByZXR1cm4gbV9odHRwU3RhdHVzVGV4dDsg
CiB9CiAKIHZvaWQgUmVzb3VyY2VSZXNwb25zZUJhc2U6OnNldEhUVFBTdGF0dXNUZXh0KGNvbnN0
IFN0cmluZyYgc3RhdHVzVGV4dCkgCiB7Ci0gICAgbGF6eUluaXQoKTsKKyAgICBsYXp5SW5pdChB
bGxGaWVsZHMpOwogCiAgICAgbV9odHRwU3RhdHVzVGV4dCA9IHN0YXR1c1RleHQ7IAogfQogCiBT
dHJpbmcgUmVzb3VyY2VSZXNwb25zZUJhc2U6Omh0dHBIZWFkZXJGaWVsZChjb25zdCBBdG9taWNT
dHJpbmcmIG5hbWUpIGNvbnN0CiB7Ci0gICAgbGF6eUluaXQoKTsKKyAgICBsYXp5SW5pdChDb21t
b25GaWVsZHNPbmx5KTsKKworICAgIC8vIENoZWNrIHRvIHNlZSBpZiB3ZSBhbHJlYWR5IGhhdmUg
dGhlIGZpZWxkIGJlZm9yZSBjb3B5aW5nIGFsbCBoZWFkZXIgZmllbGRzLgorICAgIFN0cmluZyB2
YWx1ZSA9IG1faHR0cEhlYWRlckZpZWxkcy5nZXQobmFtZSk7CisgICAgaWYgKCF2YWx1ZS5pc0Vt
cHR5KCkpICAgICAgICAKKyAgICAgICAgcmV0dXJuIHZhbHVlOworCisgICAgbGF6eUluaXQoQWxs
RmllbGRzKTsKIAogICAgIHJldHVybiBtX2h0dHBIZWFkZXJGaWVsZHMuZ2V0KG5hbWUpOyAKIH0K
IAogU3RyaW5nIFJlc291cmNlUmVzcG9uc2VCYXNlOjpodHRwSGVhZGVyRmllbGQoY29uc3QgY2hh
ciogbmFtZSkgY29uc3QKIHsKLSAgICBsYXp5SW5pdCgpOworICAgIGxhenlJbml0KENvbW1vbkZp
ZWxkc09ubHkpOworCisgICAgLy8gQ2hlY2sgdG8gc2VlIGlmIHdlIGFscmVhZHkgaGF2ZSBhIHRo
ZSBmaWVsZCBiZWZvcmUgY29weWluZyBhbGwgaGVhZGVyIGZpZWxkcworICAgIFN0cmluZyB2YWx1
ZSA9IG1faHR0cEhlYWRlckZpZWxkcy5nZXQobmFtZSk7CisgICAgaWYgKCF2YWx1ZS5pc0VtcHR5
KCkpCisgICAgICAgIHJldHVybiB2YWx1ZTsKKworICAgIGxhenlJbml0KEFsbEZpZWxkcyk7CiAK
ICAgICByZXR1cm4gbV9odHRwSGVhZGVyRmllbGRzLmdldChuYW1lKTsgCiB9CiAKIHZvaWQgUmVz
b3VyY2VSZXNwb25zZUJhc2U6OnNldEhUVFBIZWFkZXJGaWVsZChjb25zdCBBdG9taWNTdHJpbmcm
IG5hbWUsIGNvbnN0IFN0cmluZyYgdmFsdWUpCiB7Ci0gICAgbGF6eUluaXQoKTsKLSAgICAKKyAg
ICBsYXp5SW5pdChBbGxGaWVsZHMpOworCiAgICAgREVGSU5FX1NUQVRJQ19MT0NBTChjb25zdCBB
dG9taWNTdHJpbmcsIGFnZUhlYWRlciwgKCJhZ2UiKSk7CiAgICAgREVGSU5FX1NUQVRJQ19MT0NB
TChjb25zdCBBdG9taWNTdHJpbmcsIGNhY2hlQ29udHJvbEhlYWRlciwgKCJjYWNoZS1jb250cm9s
IikpOwogICAgIERFRklORV9TVEFUSUNfTE9DQUwoY29uc3QgQXRvbWljU3RyaW5nLCBkYXRlSGVh
ZGVyLCAoImRhdGUiKSk7CkBAIC0yODYsNyArMzAwLDcgQEAgdm9pZCBSZXNvdXJjZVJlc3BvbnNl
QmFzZTo6c2V0SFRUUEhlYWRlcgogCiBjb25zdCBIVFRQSGVhZGVyTWFwJiBSZXNvdXJjZVJlc3Bv
bnNlQmFzZTo6aHR0cEhlYWRlckZpZWxkcygpIGNvbnN0CiB7Ci0gICAgbGF6eUluaXQoKTsKKyAg
ICBsYXp5SW5pdChBbGxGaWVsZHMpOwogCiAgICAgcmV0dXJuIG1faHR0cEhlYWRlckZpZWxkczsK
IH0KQEAgLTI5NSw3ICszMDksNyBAQCB2b2lkIFJlc291cmNlUmVzcG9uc2VCYXNlOjpwYXJzZUNh
Y2hlQ29uCiB7CiAgICAgQVNTRVJUKCFtX2hhdmVQYXJzZWRDYWNoZUNvbnRyb2xIZWFkZXIpOwog
Ci0gICAgbGF6eUluaXQoKTsKKyAgICBsYXp5SW5pdChDb21tb25GaWVsZHNPbmx5KTsKIAogICAg
IG1faGF2ZVBhcnNlZENhY2hlQ29udHJvbEhlYWRlciA9IHRydWU7CiAKQEAgLTMzMiwxMyArMzQ2
LDE0IEBAIHZvaWQgUmVzb3VyY2VSZXNwb25zZUJhc2U6OnBhcnNlQ2FjaGVDb24KICAgICAgICAg
ICAgIH0KICAgICAgICAgfQogICAgIH0KLSAgICAgICAgCisKICAgICBpZiAoIW1fY2FjaGVDb250
cm9sQ29udGFpbnNOb0NhY2hlKSB7CiAgICAgICAgIC8vIEhhbmRsZSBQcmFnbWE6IG5vLWNhY2hl
CiAgICAgICAgIC8vIFRoaXMgaXMgZGVwcmVjYXRlZCBhbmQgZXF1aXZhbGVudCB0byBDYWNoZS1j
b250cm9sOiBuby1jYWNoZQogICAgICAgICAvLyBEb24ndCBib3RoZXIgdG9rZW5pemluZyB0aGUg
dmFsdWUsIGl0IGlzIG5vdCBpbXBvcnRhbnQKICAgICAgICAgREVGSU5FX1NUQVRJQ19MT0NBTChj
b25zdCBBdG9taWNTdHJpbmcsIHByYWdtYUhlYWRlciwgKCJwcmFnbWEiKSk7CiAgICAgICAgIFN0
cmluZyBwcmFnbWFWYWx1ZSA9IG1faHR0cEhlYWRlckZpZWxkcy5nZXQocHJhZ21hSGVhZGVyKTsK
KwogICAgICAgICBtX2NhY2hlQ29udHJvbENvbnRhaW5zTm9DYWNoZSA9IHByYWdtYVZhbHVlLmxv
d2VyKCkuY29udGFpbnMobm9DYWNoZURpcmVjdGl2ZSk7CiAgICAgfQogfQpAQCAtMzY0LDYgKzM3
OSwxNSBAQCBib29sIFJlc291cmNlUmVzcG9uc2VCYXNlOjpjYWNoZUNvbnRyb2xDCiAgICAgcmV0
dXJuIG1fY2FjaGVDb250cm9sQ29udGFpbnNNdXN0UmV2YWxpZGF0ZTsKIH0KIAorYm9vbCBSZXNv
dXJjZVJlc3BvbnNlQmFzZTo6aGFzQ2FjaGVWYWxpZGF0b3JGaWVsZHMoKSBjb25zdAoreworICAg
IGxhenlJbml0KENvbW1vbkZpZWxkc09ubHkpOworCisgICAgREVGSU5FX1NUQVRJQ19MT0NBTChj
b25zdCBBdG9taWNTdHJpbmcsIGxhc3RNb2RpZmllZEhlYWRlciwgKCJsYXN0LW1vZGlmaWVkIikp
OworICAgIERFRklORV9TVEFUSUNfTE9DQUwoY29uc3QgQXRvbWljU3RyaW5nLCBlVGFnSGVhZGVy
LCAoImV0YWciKSk7CisgICAgcmV0dXJuICFtX2h0dHBIZWFkZXJGaWVsZHMuZ2V0KGxhc3RNb2Rp
ZmllZEhlYWRlcikuaXNFbXB0eSgpIHx8ICFtX2h0dHBIZWFkZXJGaWVsZHMuZ2V0KGVUYWdIZWFk
ZXIpLmlzRW1wdHkoKTsKK30KKwogZG91YmxlIFJlc291cmNlUmVzcG9uc2VCYXNlOjpjYWNoZUNv
bnRyb2xNYXhBZ2UoKSBjb25zdAogewogICAgIGlmICghbV9oYXZlUGFyc2VkQ2FjaGVDb250cm9s
SGVhZGVyKQpAQCAtMzg4LDcgKzQxMiw3IEBAIHN0YXRpYyBkb3VibGUgcGFyc2VEYXRlVmFsdWVJ
bkhlYWRlcihjb24KIAogZG91YmxlIFJlc291cmNlUmVzcG9uc2VCYXNlOjpkYXRlKCkgY29uc3QK
IHsKLSAgICBsYXp5SW5pdCgpOworICAgIGxhenlJbml0KENvbW1vbkZpZWxkc09ubHkpOwogCiAg
ICAgaWYgKCFtX2hhdmVQYXJzZWREYXRlSGVhZGVyKSB7CiAgICAgICAgIERFRklORV9TVEFUSUNf
TE9DQUwoY29uc3QgQXRvbWljU3RyaW5nLCBoZWFkZXJOYW1lLCAoImRhdGUiKSk7CkBAIC00MDAs
OCArNDI0LDggQEAgZG91YmxlIFJlc291cmNlUmVzcG9uc2VCYXNlOjpkYXRlKCkgY29ucwogCiBk
b3VibGUgUmVzb3VyY2VSZXNwb25zZUJhc2U6OmFnZSgpIGNvbnN0CiB7Ci0gICAgbGF6eUluaXQo
KTsKLSAgICAKKyAgICBsYXp5SW5pdChDb21tb25GaWVsZHNPbmx5KTsKKwogICAgIGlmICghbV9o
YXZlUGFyc2VkQWdlSGVhZGVyKSB7CiAgICAgICAgIERFRklORV9TVEFUSUNfTE9DQUwoY29uc3Qg
QXRvbWljU3RyaW5nLCBoZWFkZXJOYW1lLCAoImFnZSIpKTsKICAgICAgICAgU3RyaW5nIGhlYWRl
clZhbHVlID0gbV9odHRwSGVhZGVyRmllbGRzLmdldChoZWFkZXJOYW1lKTsKQEAgLTQxNiw3ICs0
NDAsNyBAQCBkb3VibGUgUmVzb3VyY2VSZXNwb25zZUJhc2U6OmFnZSgpIGNvbnN0CiAKIGRvdWJs
ZSBSZXNvdXJjZVJlc3BvbnNlQmFzZTo6ZXhwaXJlcygpIGNvbnN0CiB7Ci0gICAgbGF6eUluaXQo
KTsKKyAgICBsYXp5SW5pdChDb21tb25GaWVsZHNPbmx5KTsKIAogICAgIGlmICghbV9oYXZlUGFy
c2VkRXhwaXJlc0hlYWRlcikgewogICAgICAgICBERUZJTkVfU1RBVElDX0xPQ0FMKGNvbnN0IEF0
b21pY1N0cmluZywgaGVhZGVyTmFtZSwgKCJleHBpcmVzIikpOwpAQCAtNDI4LDggKzQ1Miw4IEBA
IGRvdWJsZSBSZXNvdXJjZVJlc3BvbnNlQmFzZTo6ZXhwaXJlcygpIGMKIAogZG91YmxlIFJlc291
cmNlUmVzcG9uc2VCYXNlOjpsYXN0TW9kaWZpZWQoKSBjb25zdAogewotICAgIGxhenlJbml0KCk7
Ci0gICAgCisgICAgbGF6eUluaXQoQ29tbW9uRmllbGRzT25seSk7CisKICAgICBpZiAoIW1faGF2
ZVBhcnNlZExhc3RNb2RpZmllZEhlYWRlcikgewogICAgICAgICBERUZJTkVfU1RBVElDX0xPQ0FM
KGNvbnN0IEF0b21pY1N0cmluZywgaGVhZGVyTmFtZSwgKCJsYXN0LW1vZGlmaWVkIikpOwogICAg
ICAgICBtX2xhc3RNb2RpZmllZCA9IHBhcnNlRGF0ZVZhbHVlSW5IZWFkZXIobV9odHRwSGVhZGVy
RmllbGRzLCBoZWFkZXJOYW1lKTsKQEAgLTQ0MCw3ICs0NjQsNyBAQCBkb3VibGUgUmVzb3VyY2VS
ZXNwb25zZUJhc2U6Omxhc3RNb2RpZmllCiAKIGJvb2wgUmVzb3VyY2VSZXNwb25zZUJhc2U6Omlz
QXR0YWNobWVudCgpIGNvbnN0CiB7Ci0gICAgbGF6eUluaXQoKTsKKyAgICBsYXp5SW5pdChBbGxG
aWVsZHMpOwogCiAgICAgREVGSU5FX1NUQVRJQ19MT0NBTChjb25zdCBBdG9taWNTdHJpbmcsIGhl
YWRlck5hbWUsICgiY29udGVudC1kaXNwb3NpdGlvbiIpKTsKICAgICBTdHJpbmcgdmFsdWUgPSBt
X2h0dHBIZWFkZXJGaWVsZHMuZ2V0KGhlYWRlck5hbWUpOwpAQCAtNDU0LDIxICs0NzgsMjEgQEAg
Ym9vbCBSZXNvdXJjZVJlc3BvbnNlQmFzZTo6aXNBdHRhY2htZW50KAogICAKIHZvaWQgUmVzb3Vy
Y2VSZXNwb25zZUJhc2U6OnNldExhc3RNb2RpZmllZERhdGUodGltZV90IGxhc3RNb2RpZmllZERh
dGUpCiB7Ci0gICAgbGF6eUluaXQoKTsKKyAgICBsYXp5SW5pdChBbGxGaWVsZHMpOwogCiAgICAg
bV9sYXN0TW9kaWZpZWREYXRlID0gbGFzdE1vZGlmaWVkRGF0ZTsKIH0KIAogdGltZV90IFJlc291
cmNlUmVzcG9uc2VCYXNlOjpsYXN0TW9kaWZpZWREYXRlKCkgY29uc3QKIHsKLSAgICBsYXp5SW5p
dCgpOworICAgIGxhenlJbml0KEFsbEZpZWxkcyk7CiAKICAgICByZXR1cm4gbV9sYXN0TW9kaWZp
ZWREYXRlOwogfQogCiBib29sIFJlc291cmNlUmVzcG9uc2VCYXNlOjp3YXNDYWNoZWQoKSBjb25z
dAogewotICAgIGxhenlJbml0KCk7CisgICAgbGF6eUluaXQoQWxsRmllbGRzKTsKIAogICAgIHJl
dHVybiBtX3dhc0NhY2hlZDsKIH0KQEAgLTQ4MCw2NSArNTA0LDY1IEBAIHZvaWQgUmVzb3VyY2VS
ZXNwb25zZUJhc2U6OnNldFdhc0NhY2hlZCgKIAogYm9vbCBSZXNvdXJjZVJlc3BvbnNlQmFzZTo6
Y29ubmVjdGlvblJldXNlZCgpIGNvbnN0CiB7Ci0gICAgbGF6eUluaXQoKTsKKyAgICBsYXp5SW5p
dChBbGxGaWVsZHMpOwogCiAgICAgcmV0dXJuIG1fY29ubmVjdGlvblJldXNlZDsKIH0KIAogdm9p
ZCBSZXNvdXJjZVJlc3BvbnNlQmFzZTo6c2V0Q29ubmVjdGlvblJldXNlZChib29sIGNvbm5lY3Rp
b25SZXVzZWQpCiB7Ci0gICAgbGF6eUluaXQoKTsKKyAgICBsYXp5SW5pdChBbGxGaWVsZHMpOwog
CiAgICAgbV9jb25uZWN0aW9uUmV1c2VkID0gY29ubmVjdGlvblJldXNlZDsKIH0KIAogdW5zaWdu
ZWQgUmVzb3VyY2VSZXNwb25zZUJhc2U6OmNvbm5lY3Rpb25JRCgpIGNvbnN0CiB7Ci0gICAgbGF6
eUluaXQoKTsKKyAgICBsYXp5SW5pdChBbGxGaWVsZHMpOwogCiAgICAgcmV0dXJuIG1fY29ubmVj
dGlvbklEOwogfQogCiB2b2lkIFJlc291cmNlUmVzcG9uc2VCYXNlOjpzZXRDb25uZWN0aW9uSUQo
dW5zaWduZWQgY29ubmVjdGlvbklEKQogewotICAgIGxhenlJbml0KCk7CisgICAgbGF6eUluaXQo
QWxsRmllbGRzKTsKIAogICAgIG1fY29ubmVjdGlvbklEID0gY29ubmVjdGlvbklEOwogfQogCiBS
ZXNvdXJjZUxvYWRUaW1pbmcqIFJlc291cmNlUmVzcG9uc2VCYXNlOjpyZXNvdXJjZUxvYWRUaW1p
bmcoKSBjb25zdAogewotICAgIGxhenlJbml0KCk7CisgICAgbGF6eUluaXQoQWxsRmllbGRzKTsK
IAogICAgIHJldHVybiBtX3Jlc291cmNlTG9hZFRpbWluZy5nZXQoKTsKIH0KIAogdm9pZCBSZXNv
dXJjZVJlc3BvbnNlQmFzZTo6c2V0UmVzb3VyY2VMb2FkVGltaW5nKFBhc3NSZWZQdHI8UmVzb3Vy
Y2VMb2FkVGltaW5nPiByZXNvdXJjZUxvYWRUaW1pbmcpCiB7Ci0gICAgbGF6eUluaXQoKTsKKyAg
ICBsYXp5SW5pdChBbGxGaWVsZHMpOwogCiAgICAgbV9yZXNvdXJjZUxvYWRUaW1pbmcgPSByZXNv
dXJjZUxvYWRUaW1pbmc7CiB9CiAKIFBhc3NSZWZQdHI8UmVzb3VyY2VMb2FkSW5mbz4gUmVzb3Vy
Y2VSZXNwb25zZUJhc2U6OnJlc291cmNlTG9hZEluZm8oKSBjb25zdAogewotICAgIGxhenlJbml0
KCk7CisgICAgbGF6eUluaXQoQWxsRmllbGRzKTsKIAogICAgIHJldHVybiBtX3Jlc291cmNlTG9h
ZEluZm8uZ2V0KCk7CiB9CiAKIHZvaWQgUmVzb3VyY2VSZXNwb25zZUJhc2U6OnNldFJlc291cmNl
TG9hZEluZm8oUGFzc1JlZlB0cjxSZXNvdXJjZUxvYWRJbmZvPiBsb2FkSW5mbykKIHsKLSAgICBs
YXp5SW5pdCgpOworICAgIGxhenlJbml0KEFsbEZpZWxkcyk7CiAKICAgICBtX3Jlc291cmNlTG9h
ZEluZm8gPSBsb2FkSW5mbzsKIH0KIAotdm9pZCBSZXNvdXJjZVJlc3BvbnNlQmFzZTo6bGF6eUlu
aXQoKSBjb25zdAordm9pZCBSZXNvdXJjZVJlc3BvbnNlQmFzZTo6bGF6eUluaXQoSW5pdExldmVs
IGluaXRMZXZlbCkgY29uc3QKIHsKLSAgICBjb25zdF9jYXN0PFJlc291cmNlUmVzcG9uc2UqPihz
dGF0aWNfY2FzdDxjb25zdCBSZXNvdXJjZVJlc3BvbnNlKj4odGhpcykpLT5wbGF0Zm9ybUxhenlJ
bml0KCk7CisgICAgY29uc3RfY2FzdDxSZXNvdXJjZVJlc3BvbnNlKj4oc3RhdGljX2Nhc3Q8Y29u
c3QgUmVzb3VyY2VSZXNwb25zZSo+KHRoaXMpKS0+cGxhdGZvcm1MYXp5SW5pdChpbml0TGV2ZWwp
OwogfQotCisgICAgCiBib29sIFJlc291cmNlUmVzcG9uc2VCYXNlOjpjb21wYXJlKGNvbnN0IFJl
c291cmNlUmVzcG9uc2UmIGEsIGNvbnN0IFJlc291cmNlUmVzcG9uc2UmIGIpCiB7CiAgICAgaWYg
KGEuaXNOdWxsKCkgIT0gYi5pc051bGwoKSkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L25ldHdvcmsvUmVzb3VyY2VSZXNwb25zZUJhc2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9uZXR3b3JrL1Jlc291cmNlUmVzcG9uc2VCYXNlLmgJKHJldmlzaW9uIDgy
NDc2KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9SZXNvdXJjZVJlc3BvbnNl
QmFzZS5oCSh3b3JraW5nIGNvcHkpCkBAIC05Myw2ICs5Myw3IEBAIHB1YmxpYzoKICAgICBib29s
IGNhY2hlQ29udHJvbENvbnRhaW5zTm9DYWNoZSgpIGNvbnN0OwogICAgIGJvb2wgY2FjaGVDb250
cm9sQ29udGFpbnNOb1N0b3JlKCkgY29uc3Q7CiAgICAgYm9vbCBjYWNoZUNvbnRyb2xDb250YWlu
c011c3RSZXZhbGlkYXRlKCkgY29uc3Q7CisgICAgYm9vbCBoYXNDYWNoZVZhbGlkYXRvckZpZWxk
cygpIGNvbnN0OwogICAgIGRvdWJsZSBjYWNoZUNvbnRyb2xNYXhBZ2UoKSBjb25zdDsKICAgICBk
b3VibGUgZGF0ZSgpIGNvbnN0OwogICAgIGRvdWJsZSBhZ2UoKSBjb25zdDsKQEAgLTEyNCwxMyAr
MTI1LDE5IEBAIHB1YmxpYzoKICAgICBzdGF0aWMgYm9vbCBjb21wYXJlKGNvbnN0IFJlc291cmNl
UmVzcG9uc2UmLCBjb25zdCBSZXNvdXJjZVJlc3BvbnNlJik7CiAKIHByb3RlY3RlZDoKKyAgICBl
bnVtIEluaXRMZXZlbCB7CisgICAgICAgIFVuaW5pdGlhbGl6ZWQsCisgICAgICAgIENvbW1vbkZp
ZWxkc09ubHksCisgICAgICAgIEFsbEZpZWxkcworICAgIH07CisKICAgICBSZXNvdXJjZVJlc3Bv
bnNlQmFzZSgpOwogICAgIFJlc291cmNlUmVzcG9uc2VCYXNlKGNvbnN0IEtVUkwmIHVybCwgY29u
c3QgU3RyaW5nJiBtaW1lVHlwZSwgbG9uZyBsb25nIGV4cGVjdGVkTGVuZ3RoLCBjb25zdCBTdHJp
bmcmIHRleHRFbmNvZGluZ05hbWUsIGNvbnN0IFN0cmluZyYgZmlsZW5hbWUpOwogCi0gICAgdm9p
ZCBsYXp5SW5pdCgpIGNvbnN0OworICAgIHZvaWQgbGF6eUluaXQoSW5pdExldmVsKSBjb25zdDsK
IAogICAgIC8vIFRoZSBSZXNvdXJjZVJlc3BvbnNlIHN1YmNsYXNzIG1heSAic2hhZG93IiB0aGlz
IG1ldGhvZCB0byBsYXppbHkgaW5pdGlhbGl6ZSBwbGF0Zm9ybSBzcGVjaWZpYyBmaWVsZHMKLSAg
ICB2b2lkIHBsYXRmb3JtTGF6eUluaXQoKSB7IH0KKyAgICB2b2lkIHBsYXRmb3JtTGF6eUluaXQo
SW5pdExldmVsKSB7IH0KIAogICAgIC8vIFRoZSBSZXNvdXJjZVJlc3BvbnNlIHN1YmNsYXNzIG1h
eSAic2hhZG93IiB0aGlzIG1ldGhvZCB0byBjb21wYXJlIHBsYXRmb3JtIHNwZWNpZmljIGZpZWxk
cwogICAgIHN0YXRpYyBib29sIHBsYXRmb3JtQ29tcGFyZShjb25zdCBSZXNvdXJjZVJlc3BvbnNl
JiwgY29uc3QgUmVzb3VyY2VSZXNwb25zZSYpIHsgcmV0dXJuIHRydWU7IH0KSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY2YvUmVzb3VyY2VSZXNwb25zZS5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY2YvUmVzb3VyY2VSZXNwb25z
ZS5oCShyZXZpc2lvbiA4MjQ3NikKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsv
Y2YvUmVzb3VyY2VSZXNwb25zZS5oCSh3b3JraW5nIGNvcHkpCkBAIC00NCwyMSArNDQsMjEgQEAg
bmFtZXNwYWNlIFdlYkNvcmUgewogY2xhc3MgUmVzb3VyY2VSZXNwb25zZSA6IHB1YmxpYyBSZXNv
dXJjZVJlc3BvbnNlQmFzZSB7CiBwdWJsaWM6CiAgICAgUmVzb3VyY2VSZXNwb25zZSgpCi0gICAg
ICAgIDogbV9pc1VwVG9EYXRlKHRydWUpCisgICAgICAgIDogbV9pbml0TGV2ZWwoQWxsRmllbGRz
KQogICAgIHsKICAgICB9CiAKICNpZiBVU0UoQ0ZORVRXT1JLKQogICAgIFJlc291cmNlUmVzcG9u
c2UoQ0ZVUkxSZXNwb25zZVJlZiBjZlJlc3BvbnNlKQogICAgICAgICA6IG1fY2ZSZXNwb25zZShj
ZlJlc3BvbnNlKQotICAgICAgICAsIG1faXNVcFRvRGF0ZShmYWxzZSkKKyAgICAgICAgLCBtX2lu
aXRMZXZlbChVbmluaXRpYWxpemVkKQogICAgIHsKICAgICAgICAgbV9pc051bGwgPSAhY2ZSZXNw
b25zZTsKICAgICB9CiAjZWxzZQogICAgIFJlc291cmNlUmVzcG9uc2UoTlNVUkxSZXNwb25zZSog
bnNSZXNwb25zZSkKICAgICAgICAgOiBtX25zUmVzcG9uc2UobnNSZXNwb25zZSkKLSAgICAgICAg
LCBtX2lzVXBUb0RhdGUoZmFsc2UpCisgICAgICAgICwgbV9pbml0TGV2ZWwoVW5pbml0aWFsaXpl
ZCkKICAgICB7CiAgICAgICAgIG1faXNOdWxsID0gIW5zUmVzcG9uc2U7CiAgICAgfQpAQCAtNjYs
MTUgKzY2LDE1IEBAIHB1YmxpYzoKIAogICAgIFJlc291cmNlUmVzcG9uc2UoY29uc3QgS1VSTCYg
dXJsLCBjb25zdCBTdHJpbmcmIG1pbWVUeXBlLCBsb25nIGxvbmcgZXhwZWN0ZWRMZW5ndGgsIGNv
bnN0IFN0cmluZyYgdGV4dEVuY29kaW5nTmFtZSwgY29uc3QgU3RyaW5nJiBmaWxlbmFtZSkKICAg
ICAgICAgOiBSZXNvdXJjZVJlc3BvbnNlQmFzZSh1cmwsIG1pbWVUeXBlLCBleHBlY3RlZExlbmd0
aCwgdGV4dEVuY29kaW5nTmFtZSwgZmlsZW5hbWUpCi0gICAgICAgICwgbV9pc1VwVG9EYXRlKHRy
dWUpCisgICAgICAgICwgbV9pbml0TGV2ZWwoQWxsRmllbGRzKQogICAgIHsKICAgICB9CiAKICAg
ICB1bnNpZ25lZCBtZW1vcnlVc2FnZSgpIGNvbnN0CiAgICAgewogICAgICAgICAvLyBGSVhNRTog
RmluZCBzb21lIHByb2dyYW1tYXRpYyBsaWdod2VpZ2h0IHdheSB0byBjYWxjdWxhdGUgUmVzb3Vy
Y2VSZXNwb25zZSBhbmQgYXNzb2NpYXRlZCBjbGFzc2VzLgotICAgICAgICAvLyBUaGlzIGlzIGEg
cm91Z2ggZXN0aW1hdGUgb2YgcmVzb3VyY2Ugb3ZlcmhlYWQgYmFzZWQgb24gc3RhdHMgY29sbGVj
dGVkIGZyb20gdGhlIHN0cmVzcyB0ZXN0LgotICAgICAgICByZXR1cm4gMzA3MjsKKyAgICAgICAg
Ly8gVGhpcyBpcyBhIHJvdWdoIGVzdGltYXRlIG9mIHJlc291cmNlIG92ZXJoZWFkIGJhc2VkIG9u
IHN0YXRzIGNvbGxlY3RlZCBmcm9tIG1lbW9yeSB1c2FnZSB0ZXN0cy4KKyAgICAgICAgcmV0dXJu
IDM4MDA7CiAgICAgICAgIC8qICAxMjgwICogMiArICAgICAgICAgICAgICAgIC8vIGF2ZXJhZ2Ug
c2l6ZSBvZiBSZXNvdXJjZVJlc3BvbnNlLiBEb3VibGVkIHRvIGFjY291bnQgZm9yIHRoZSBXZWJD
b3JlIGNvcHkgYW5kIHRoZSBDRiBjb3B5LgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAvLyBNb3N0bHkgZHVlIHRvIHRoZSBzaXplIG9mIHRoZSBoYXNoIG1hcHMsIHRoZSBI
ZWFkZXIgTWFwIHN0cmluZ3MgYW5kIHRoZSBVUkwuCiAgICAgICAgICAgICAyNTYgKiAyICAgICAg
ICAgICAgICAgICAgIC8vIE92ZXJoZWFkIGZyb20gUmVzb3VyY2VSZXF1ZXN0LCBkb3VibGVkIHRv
IGFjY291bnQgZm9yIFdlYkNvcmUgY29weSBhbmQgQ0YgY29weS4KQEAgLTkxLDcgKzkxLDcgQEAg
cHVibGljOgogcHJpdmF0ZToKICAgICBmcmllbmQgY2xhc3MgUmVzb3VyY2VSZXNwb25zZUJhc2U7
CiAKLSAgICB2b2lkIHBsYXRmb3JtTGF6eUluaXQoKTsKKyAgICB2b2lkIHBsYXRmb3JtTGF6eUlu
aXQoSW5pdExldmVsKTsKICAgICBQYXNzT3duUHRyPENyb3NzVGhyZWFkUmVzb3VyY2VSZXNwb25z
ZURhdGE+IGRvUGxhdGZvcm1Db3B5RGF0YShQYXNzT3duUHRyPENyb3NzVGhyZWFkUmVzb3VyY2VS
ZXNwb25zZURhdGE+IGRhdGEpIGNvbnN0IHsgcmV0dXJuIGRhdGE7IH0KICAgICB2b2lkIGRvUGxh
dGZvcm1BZG9wdChQYXNzT3duUHRyPENyb3NzVGhyZWFkUmVzb3VyY2VSZXNwb25zZURhdGE+KSB7
IH0KIApAQCAtMTAyLDcgKzEwMiw3IEBAIHByaXZhdGU6CiAjZWxzZQogICAgIG11dGFibGUgUmV0
YWluUHRyPE5TVVJMUmVzcG9uc2U+IG1fbnNSZXNwb25zZTsKICNlbmRpZgotICAgIGJvb2wgbV9p
c1VwVG9EYXRlOworICAgIEluaXRMZXZlbCBtX2luaXRMZXZlbDsKIH07CiAKIHN0cnVjdCBDcm9z
c1RocmVhZFJlc291cmNlUmVzcG9uc2VEYXRhIDogcHVibGljIENyb3NzVGhyZWFkUmVzb3VyY2VS
ZXNwb25zZURhdGFCYXNlIHsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsv
Y2YvUmVzb3VyY2VSZXNwb25zZUNGTmV0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9uZXR3b3JrL2NmL1Jlc291cmNlUmVzcG9uc2VDRk5ldC5jcHAJKHJldmlzaW9u
IDgyNDc2KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9jZi9SZXNvdXJjZVJl
c3BvbnNlQ0ZOZXQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00Miw2ICs0MiwxMSBAQCB1c2luZyBu
YW1lc3BhY2Ugc3RkOwogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKK3N0YXRpYyBDRlN0cmluZ1Jl
ZiBjb25zdCBjb21tb25IZWFkZXJGaWVsZHNbXSA9IHsKKyAgICBDRlNUUigiQWdlIiksIENGU1RS
KCJDYWNoZS1Db250cm9sIiksIENGU1RSKCJEYXRlIiksIENGU1RSKCJFdGFnIiksIENGU1RSKCJF
eHBpcmVzIiksIENGU1RSKCJMYXN0LU1vZGlmaWVkIiksIENGU1RSKCJQcmFnbWEiKQorfTsKK3N0
YXRpYyBjb25zdCBpbnQgbnVtQ29tbW9uSGVhZGVyRmllbGRzID0gc2l6ZW9mKGNvbW1vbkhlYWRl
ckZpZWxkcykgLyBzaXplb2YoQ0ZTdHJpbmdSZWYpOworCiBDRlVSTFJlc3BvbnNlUmVmIFJlc291
cmNlUmVzcG9uc2U6OmNmVVJMUmVzcG9uc2UoKSBjb25zdAogewogICAgIGlmICghbV9jZlJlc3Bv
bnNlICYmICFtX2lzTnVsbCkgewpAQCAtNzAsNTIgKzc1LDY2IEBAIHN0YXRpYyB0aW1lX3QgdG9U
aW1lVChDRkFic29sdXRlVGltZSB0aW0KICAgICByZXR1cm4gbWluKG1heChtaW5UaW1lQXNEb3Vi
bGUsIHRpbWUgKyBrQ0ZBYnNvbHV0ZVRpbWVJbnRlcnZhbFNpbmNlMTk3MCksIG1heFRpbWVBc0Rv
dWJsZSk7CiB9CiAKLXZvaWQgUmVzb3VyY2VSZXNwb25zZTo6cGxhdGZvcm1MYXp5SW5pdCgpCit2
b2lkIFJlc291cmNlUmVzcG9uc2U6OnBsYXRmb3JtTGF6eUluaXQoSW5pdExldmVsIGluaXRMZXZl
bCkKIHsKLSAgICBpZiAobV9pc1VwVG9EYXRlKQorICAgIGlmIChtX2luaXRMZXZlbCA+IGluaXRM
ZXZlbCkKICAgICAgICAgcmV0dXJuOwotICAgIG1faXNVcFRvRGF0ZSA9IHRydWU7CiAKICAgICBp
ZiAobV9pc051bGwpIHsKICAgICAgICAgQVNTRVJUKCFtX2NmUmVzcG9uc2UuZ2V0KCkpOwogICAg
ICAgICByZXR1cm47CiAgICAgfQogCi0gICAgLy8gRklYTUU6IFdlIG1heSBuZWVkIHRvIGRvIE1J
TUUgdHlwZSBzbmlmZmluZyBoZXJlICh1bmxlc3MgdGhhdCBpcyBkb25lIGluIENGVVJMUmVzcG9u
c2VHZXRNSU1FVHlwZSkuCi0KLSAgICBtX3VybCA9IENGVVJMUmVzcG9uc2VHZXRVUkwobV9jZlJl
c3BvbnNlLmdldCgpKTsKLSAgICBtX21pbWVUeXBlID0gQ0ZVUkxSZXNwb25zZUdldE1JTUVUeXBl
KG1fY2ZSZXNwb25zZS5nZXQoKSk7Ci0gICAgbV9leHBlY3RlZENvbnRlbnRMZW5ndGggPSBDRlVS
TFJlc3BvbnNlR2V0RXhwZWN0ZWRDb250ZW50TGVuZ3RoKG1fY2ZSZXNwb25zZS5nZXQoKSk7Ci0g
ICAgbV90ZXh0RW5jb2RpbmdOYW1lID0gQ0ZVUkxSZXNwb25zZUdldFRleHRFbmNvZGluZ05hbWUo
bV9jZlJlc3BvbnNlLmdldCgpKTsKLQotICAgIC8vIFdvcmthcm91bmQgZm9yIDxyZGFyOi8vcHJv
YmxlbS84NzU3MDg4PiwgY2FuIGJlIHJlbW92ZWQgb25jZSB0aGF0IGlzIGZpeGVkLgotICAgIHVu
c2lnbmVkIHRleHRFbmNvZGluZ05hbWVMZW5ndGggPSBtX3RleHRFbmNvZGluZ05hbWUubGVuZ3Ro
KCk7Ci0gICAgaWYgKHRleHRFbmNvZGluZ05hbWVMZW5ndGggPj0gMiAmJiBtX3RleHRFbmNvZGlu
Z05hbWVbMFVdID09ICciJyAmJiBtX3RleHRFbmNvZGluZ05hbWVbdGV4dEVuY29kaW5nTmFtZUxl
bmd0aCAtIDFdID09ICciJykKLSAgICAgICAgbV90ZXh0RW5jb2RpbmdOYW1lID0gbV90ZXh0RW5j
b2RpbmdOYW1lLnN1YnN0cmluZygxLCB0ZXh0RW5jb2RpbmdOYW1lTGVuZ3RoIC0gMik7CisgICAg
aWYgKG1faW5pdExldmVsIDwgQ29tbW9uRmllbGRzT25seSAmJiBpbml0TGV2ZWwgPj0gQ29tbW9u
RmllbGRzT25seSkgeworICAgICAgICBtX3VybCA9IENGVVJMUmVzcG9uc2VHZXRVUkwobV9jZlJl
c3BvbnNlLmdldCgpKTsKKyAgICAgICAgbV9taW1lVHlwZSA9IENGVVJMUmVzcG9uc2VHZXRNSU1F
VHlwZShtX2NmUmVzcG9uc2UuZ2V0KCkpOworICAgICAgICBtX2V4cGVjdGVkQ29udGVudExlbmd0
aCA9IENGVVJMUmVzcG9uc2VHZXRFeHBlY3RlZENvbnRlbnRMZW5ndGgobV9jZlJlc3BvbnNlLmdl
dCgpKTsKKyAgICAgICAgbV90ZXh0RW5jb2RpbmdOYW1lID0gQ0ZVUkxSZXNwb25zZUdldFRleHRF
bmNvZGluZ05hbWUobV9jZlJlc3BvbnNlLmdldCgpKTsKKworICAgICAgICAvLyBXb3JrYXJvdW5k
IGZvciA8cmRhcjovL3Byb2JsZW0vODc1NzA4OD4sIGNhbiBiZSByZW1vdmVkIG9uY2UgdGhhdCBp
cyBmaXhlZC4KKyAgICAgICAgdW5zaWduZWQgdGV4dEVuY29kaW5nTmFtZUxlbmd0aCA9IG1fdGV4
dEVuY29kaW5nTmFtZS5sZW5ndGgoKTsKKyAgICAgICAgaWYgKHRleHRFbmNvZGluZ05hbWVMZW5n
dGggPj0gMiAmJiBtX3RleHRFbmNvZGluZ05hbWVbMFVdID09ICciJyAmJiBtX3RleHRFbmNvZGlu
Z05hbWVbdGV4dEVuY29kaW5nTmFtZUxlbmd0aCAtIDFdID09ICciJykKKyAgICAgICAgICAgIG1f
dGV4dEVuY29kaW5nTmFtZSA9IG1fdGV4dEVuY29kaW5nTmFtZS5zdWJzdHJpbmcoMSwgdGV4dEVu
Y29kaW5nTmFtZUxlbmd0aCAtIDIpOworCisgICAgICAgIG1fbGFzdE1vZGlmaWVkRGF0ZSA9IHRv
VGltZVQoQ0ZVUkxSZXNwb25zZUdldExhc3RNb2RpZmllZERhdGUobV9jZlJlc3BvbnNlLmdldCgp
KSk7CisKKyAgICAgICAgUmV0YWluUHRyPENGU3RyaW5nUmVmPiBzdWdnZXN0ZWRGaWxlbmFtZShB
ZG9wdENGLCBDRlVSTFJlc3BvbnNlQ29weVN1Z2dlc3RlZEZpbGVuYW1lKG1fY2ZSZXNwb25zZS5n
ZXQoKSkpOworICAgICAgICBtX3N1Z2dlc3RlZEZpbGVuYW1lID0gc3VnZ2VzdGVkRmlsZW5hbWUu
Z2V0KCk7CisKKyAgICAgICAgQ0ZIVFRQTWVzc2FnZVJlZiBodHRwUmVzcG9uc2UgPSBDRlVSTFJl
c3BvbnNlR2V0SFRUUFJlc3BvbnNlKG1fY2ZSZXNwb25zZS5nZXQoKSk7CisgICAgICAgIGlmICho
dHRwUmVzcG9uc2UpCisgICAgICAgICAgICBtX2h0dHBTdGF0dXNDb2RlID0gQ0ZIVFRQTWVzc2Fn
ZUdldFJlc3BvbnNlU3RhdHVzQ29kZShodHRwUmVzcG9uc2UpOworICAgICAgICBlbHNlCisgICAg
ICAgICAgICBtX2h0dHBTdGF0dXNDb2RlID0gMDsKIAotICAgIG1fbGFzdE1vZGlmaWVkRGF0ZSA9
IHRvVGltZVQoQ0ZVUkxSZXNwb25zZUdldExhc3RNb2RpZmllZERhdGUobV9jZlJlc3BvbnNlLmdl
dCgpKSk7Ci0KLSAgICBSZXRhaW5QdHI8Q0ZTdHJpbmdSZWY+IHN1Z2dlc3RlZEZpbGVuYW1lKEFk
b3B0Q0YsIENGVVJMUmVzcG9uc2VDb3B5U3VnZ2VzdGVkRmlsZW5hbWUobV9jZlJlc3BvbnNlLmdl
dCgpKSk7Ci0gICAgbV9zdWdnZXN0ZWRGaWxlbmFtZSA9IHN1Z2dlc3RlZEZpbGVuYW1lLmdldCgp
OworICAgICAgICBSZXRhaW5QdHI8Q0ZEaWN0aW9uYXJ5UmVmPiBoZWFkZXJzKEFkb3B0Q0YsIENG
SFRUUE1lc3NhZ2VDb3B5QWxsSGVhZGVyRmllbGRzKGh0dHBSZXNwb25zZSkpOwogCi0gICAgQ0ZI
VFRQTWVzc2FnZVJlZiBodHRwUmVzcG9uc2UgPSBDRlVSTFJlc3BvbnNlR2V0SFRUUFJlc3BvbnNl
KG1fY2ZSZXNwb25zZS5nZXQoKSk7Ci0gICAgaWYgKGh0dHBSZXNwb25zZSkgewotICAgICAgICBt
X2h0dHBTdGF0dXNDb2RlID0gQ0ZIVFRQTWVzc2FnZUdldFJlc3BvbnNlU3RhdHVzQ29kZShodHRw
UmVzcG9uc2UpOworICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IG51bUNvbW1vbkhlYWRlckZp
ZWxkczsgaSsrKSB7CisgICAgICAgICAgICBDRlN0cmluZ1JlZiB2YWx1ZTsKKyAgICAgICAgICAg
IGlmIChDRkRpY3Rpb25hcnlHZXRWYWx1ZUlmUHJlc2VudChoZWFkZXJzLmdldCgpLCBjb21tb25I
ZWFkZXJGaWVsZHNbaV0sIChjb25zdCB2b2lkICoqKSZ2YWx1ZSkpCisgICAgICAgICAgICAgICAg
bV9odHRwSGVhZGVyRmllbGRzLnNldChjb21tb25IZWFkZXJGaWVsZHNbaV0sIHZhbHVlKTsKKyAg
ICAgICAgfQorICAgIH0KIAotICAgICAgICBSZXRhaW5QdHI8Q0ZTdHJpbmdSZWY+IHN0YXR1c0xp
bmUoQWRvcHRDRiwgQ0ZIVFRQTWVzc2FnZUNvcHlSZXNwb25zZVN0YXR1c0xpbmUoaHR0cFJlc3Bv
bnNlKSk7Ci0gICAgICAgIG1faHR0cFN0YXR1c1RleHQgPSBleHRyYWN0UmVhc29uUGhyYXNlRnJv
bUhUVFBTdGF0dXNMaW5lKHN0YXR1c0xpbmUuZ2V0KCkpOworICAgIGlmIChtX2luaXRMZXZlbCA8
IEFsbEZpZWxkcyAmJiBpbml0TGV2ZWwgPj0gQWxsRmllbGRzKSB7CisgICAgICAgIENGSFRUUE1l
c3NhZ2VSZWYgaHR0cFJlc3BvbnNlID0gQ0ZVUkxSZXNwb25zZUdldEhUVFBSZXNwb25zZShtX2Nm
UmVzcG9uc2UuZ2V0KCkpOworICAgICAgICBpZiAoaHR0cFJlc3BvbnNlKSB7CisgICAgICAgICAg
ICBSZXRhaW5QdHI8Q0ZTdHJpbmdSZWY+IHN0YXR1c0xpbmUoQWRvcHRDRiwgQ0ZIVFRQTWVzc2Fn
ZUNvcHlSZXNwb25zZVN0YXR1c0xpbmUoaHR0cFJlc3BvbnNlKSk7CisgICAgICAgICAgICBtX2h0
dHBTdGF0dXNUZXh0ID0gZXh0cmFjdFJlYXNvblBocmFzZUZyb21IVFRQU3RhdHVzTGluZShzdGF0
dXNMaW5lLmdldCgpKTsKKworICAgICAgICAgICAgUmV0YWluUHRyPENGRGljdGlvbmFyeVJlZj4g
aGVhZGVycyhBZG9wdENGLCBDRkhUVFBNZXNzYWdlQ29weUFsbEhlYWRlckZpZWxkcyhodHRwUmVz
cG9uc2UpKTsKKyAgICAgICAgICAgIENGSW5kZXggaGVhZGVyQ291bnQgPSBDRkRpY3Rpb25hcnlH
ZXRDb3VudChoZWFkZXJzLmdldCgpKTsKKyAgICAgICAgICAgIFZlY3Rvcjxjb25zdCB2b2lkKiwg
MTI4PiBrZXlzKGhlYWRlckNvdW50KTsKKyAgICAgICAgICAgIFZlY3Rvcjxjb25zdCB2b2lkKiwg
MTI4PiB2YWx1ZXMoaGVhZGVyQ291bnQpOworICAgICAgICAgICAgQ0ZEaWN0aW9uYXJ5R2V0S2V5
c0FuZFZhbHVlcyhoZWFkZXJzLmdldCgpLCBrZXlzLmRhdGEoKSwgdmFsdWVzLmRhdGEoKSk7Cisg
ICAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGhlYWRlckNvdW50OyArK2kpCisgICAgICAg
ICAgICAgICAgbV9odHRwSGVhZGVyRmllbGRzLnNldCgoQ0ZTdHJpbmdSZWYpa2V5c1tpXSwgKENG
U3RyaW5nUmVmKXZhbHVlc1tpXSk7CisgICAgICAgIH0KKyAgICB9CiAKLSAgICAgICAgUmV0YWlu
UHRyPENGRGljdGlvbmFyeVJlZj4gaGVhZGVycyhBZG9wdENGLCBDRkhUVFBNZXNzYWdlQ29weUFs
bEhlYWRlckZpZWxkcyhodHRwUmVzcG9uc2UpKTsKLSAgICAgICAgQ0ZJbmRleCBoZWFkZXJDb3Vu
dCA9IENGRGljdGlvbmFyeUdldENvdW50KGhlYWRlcnMuZ2V0KCkpOwotICAgICAgICBWZWN0b3I8
Y29uc3Qgdm9pZCosIDEyOD4ga2V5cyhoZWFkZXJDb3VudCk7Ci0gICAgICAgIFZlY3Rvcjxjb25z
dCB2b2lkKiwgMTI4PiB2YWx1ZXMoaGVhZGVyQ291bnQpOwotICAgICAgICBDRkRpY3Rpb25hcnlH
ZXRLZXlzQW5kVmFsdWVzKGhlYWRlcnMuZ2V0KCksIGtleXMuZGF0YSgpLCB2YWx1ZXMuZGF0YSgp
KTsKLSAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBoZWFkZXJDb3VudDsgKytpKQotICAgICAg
ICAgICAgbV9odHRwSGVhZGVyRmllbGRzLnNldCgoQ0ZTdHJpbmdSZWYpa2V5c1tpXSwgKENGU3Ry
aW5nUmVmKXZhbHVlc1tpXSk7Ci0gICAgfSBlbHNlCi0gICAgICAgIG1faHR0cFN0YXR1c0NvZGUg
PSAwOworICAgIG1faW5pdExldmVsID0gaW5pdExldmVsOwogfQotCisgICAgCiBib29sIFJlc291
cmNlUmVzcG9uc2U6OnBsYXRmb3JtQ29tcGFyZShjb25zdCBSZXNvdXJjZVJlc3BvbnNlJiBhLCBj
b25zdCBSZXNvdXJjZVJlc3BvbnNlJiBiKQogewogICAgIHJldHVybiBDRkVxdWFsKGEuY2ZVUkxS
ZXNwb25zZSgpLCBiLmNmVVJMUmVzcG9uc2UoKSk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9uZXR3b3JrL21hYy9SZXNvdXJjZVJlc3BvbnNlTWFjLm1tCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvbWFjL1Jlc291cmNlUmVzcG9uc2VNYWMubW0J
KHJldmlzaW9uIDgyNDc2KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9tYWMv
UmVzb3VyY2VSZXNwb25zZU1hYy5tbQkod29ya2luZyBjb3B5KQpAQCAtMzQsNiArMzQsNyBAQAog
I2ltcG9ydCA8Rm91bmRhdGlvbi9Gb3VuZGF0aW9uLmg+CiAjaW1wb3J0IDx3dGYvU3RkTGliRXh0
cmFzLmg+CiAjaW1wb3J0IDxsaW1pdHM+CisjaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgog
CiBAaW50ZXJmYWNlIE5TVVJMUmVzcG9uc2UgKEZvdW5kYXRpb25TZWNyZXRzV2ViQ29yZUtub3dz
QWJvdXQpCiAtIChOU1RpbWVJbnRlcnZhbClfY2FsY3VsYXRlZEV4cGlyYXRpb247CkBAIC00NSw2
ICs0NiwxMSBAQCB0eXBlZGVmIGludCBOU0ludGVnZXI7CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsK
IAorc3RhdGljIE5TU3RyaW5nKiBjb25zdCBjb21tb25IZWFkZXJGaWVsZHNbXSA9IHsKKyAgICBA
IkFnZSIsIEAiQ2FjaGUtQ29udHJvbCIsIEAiRGF0ZSIsIEAiRXRhZyIsIEAiRXhwaXJlcyIsIEAi
TGFzdC1Nb2RpZmllZCIsIEAiUHJhZ21hIgorfTsKK3N0YXRpYyBjb25zdCBpbnQgbnVtQ29tbW9u
SGVhZGVyRmllbGRzID0gc2l6ZW9mKGNvbW1vbkhlYWRlckZpZWxkcykgLyBzaXplb2YoQXRvbWlj
U3RyaW5nKik7CisKIE5TVVJMUmVzcG9uc2UgKlJlc291cmNlUmVzcG9uc2U6Om5zVVJMUmVzcG9u
c2UoKSBjb25zdAogewogICAgIGlmICghbV9uc1Jlc3BvbnNlICYmICFtX2lzTnVsbCkgewpAQCAt
NjEsNDggKzY3LDcyIEBAIE5TVVJMUmVzcG9uc2UgKlJlc291cmNlUmVzcG9uc2U6Om5zVVJMUmUK
ICAgICByZXR1cm4gbV9uc1Jlc3BvbnNlLmdldCgpOwogfQogCi12b2lkIFJlc291cmNlUmVzcG9u
c2U6OnBsYXRmb3JtTGF6eUluaXQoKQordm9pZCBSZXNvdXJjZVJlc3BvbnNlOjpwbGF0Zm9ybUxh
enlJbml0KEluaXRMZXZlbCBpbml0TGV2ZWwpCiB7Ci0gICAgaWYgKG1faXNVcFRvRGF0ZSkKKyAg
ICBpZiAobV9pbml0TGV2ZWwgPj0gaW5pdExldmVsKQogICAgICAgICByZXR1cm47Ci0gICAgbV9p
c1VwVG9EYXRlID0gdHJ1ZTsKIAogICAgIGlmIChtX2lzTnVsbCkgewogICAgICAgICBBU1NFUlQo
IW1fbnNSZXNwb25zZSk7CiAgICAgICAgIHJldHVybjsKICAgICB9Ci0gICAgCi0gICAgbV91cmwg
PSBbbV9uc1Jlc3BvbnNlLmdldCgpIFVSTF07Ci0gICAgbV9taW1lVHlwZSA9IFttX25zUmVzcG9u
c2UuZ2V0KCkgTUlNRVR5cGVdOwotICAgIG1fZXhwZWN0ZWRDb250ZW50TGVuZ3RoID0gW21fbnNS
ZXNwb25zZS5nZXQoKSBleHBlY3RlZENvbnRlbnRMZW5ndGhdOwotICAgIG1fdGV4dEVuY29kaW5n
TmFtZSA9IFttX25zUmVzcG9uc2UuZ2V0KCkgdGV4dEVuY29kaW5nTmFtZV07Ci0KLSAgICAvLyBX
b3JrYXJvdW5kIGZvciA8cmRhcjovL3Byb2JsZW0vODc1NzA4OD4sIGNhbiBiZSByZW1vdmVkIG9u
Y2UgdGhhdCBpcyBmaXhlZC4KLSAgICB1bnNpZ25lZCB0ZXh0RW5jb2RpbmdOYW1lTGVuZ3RoID0g
bV90ZXh0RW5jb2RpbmdOYW1lLmxlbmd0aCgpOwotICAgIGlmICh0ZXh0RW5jb2RpbmdOYW1lTGVu
Z3RoID49IDIgJiYgbV90ZXh0RW5jb2RpbmdOYW1lWzBVXSA9PSAnIicgJiYgbV90ZXh0RW5jb2Rp
bmdOYW1lW3RleHRFbmNvZGluZ05hbWVMZW5ndGggLSAxXSA9PSAnIicpCi0gICAgICAgIG1fdGV4
dEVuY29kaW5nTmFtZSA9IG1fdGV4dEVuY29kaW5nTmFtZS5zdWJzdHJpbmcoMSwgdGV4dEVuY29k
aW5nTmFtZUxlbmd0aCAtIDIpOwogCi0gICAgbV9zdWdnZXN0ZWRGaWxlbmFtZSA9IFttX25zUmVz
cG9uc2UuZ2V0KCkgc3VnZ2VzdGVkRmlsZW5hbWVdOwotICAgIAotICAgIGlmIChbbV9uc1Jlc3Bv
bnNlLmdldCgpIGlzS2luZE9mQ2xhc3M6W05TSFRUUFVSTFJlc3BvbnNlIGNsYXNzXV0pIHsKLSAg
ICAgICAgTlNIVFRQVVJMUmVzcG9uc2UgKmh0dHBSZXNwb25zZSA9IChOU0hUVFBVUkxSZXNwb25z
ZSAqKW1fbnNSZXNwb25zZS5nZXQoKTsKKyAgICBpZiAobV9pbml0TGV2ZWwgPCBDb21tb25GaWVs
ZHNPbmx5ICYmIGluaXRMZXZlbCA+PSBDb21tb25GaWVsZHNPbmx5KSB7CisgICAgICAgIE5TQXV0
b3JlbGVhc2VQb29sKiBwb29sID0gW1tOU0F1dG9yZWxlYXNlUG9vbCBhbGxvY10gaW5pdF07CisK
KyAgICAgICAgbV9odHRwSGVhZGVyRmllbGRzLmNsZWFyKCk7CisgICAgICAgIG1fdXJsID0gW21f
bnNSZXNwb25zZS5nZXQoKSBVUkxdOworICAgICAgICBtX21pbWVUeXBlID0gW21fbnNSZXNwb25z
ZS5nZXQoKSBNSU1FVHlwZV07CisgICAgICAgIG1fZXhwZWN0ZWRDb250ZW50TGVuZ3RoID0gW21f
bnNSZXNwb25zZS5nZXQoKSBleHBlY3RlZENvbnRlbnRMZW5ndGhdOworICAgICAgICBtX3RleHRF
bmNvZGluZ05hbWUgPSBbbV9uc1Jlc3BvbnNlLmdldCgpIHRleHRFbmNvZGluZ05hbWVdOworCisg
ICAgICAgIC8vIFdvcmthcm91bmQgZm9yIDxyZGFyOi8vcHJvYmxlbS84NzU3MDg4PiwgY2FuIGJl
IHJlbW92ZWQgb25jZSB0aGF0IGlzIGZpeGVkLgorICAgICAgICB1bnNpZ25lZCB0ZXh0RW5jb2Rp
bmdOYW1lTGVuZ3RoID0gbV90ZXh0RW5jb2RpbmdOYW1lLmxlbmd0aCgpOworICAgICAgICBpZiAo
dGV4dEVuY29kaW5nTmFtZUxlbmd0aCA+PSAyICYmIG1fdGV4dEVuY29kaW5nTmFtZVswVV0gPT0g
JyInICYmIG1fdGV4dEVuY29kaW5nTmFtZVt0ZXh0RW5jb2RpbmdOYW1lTGVuZ3RoIC0gMV0gPT0g
JyInKQorICAgICAgICAgICAgbV90ZXh0RW5jb2RpbmdOYW1lID0gbV90ZXh0RW5jb2RpbmdOYW1l
LnN1YnN0cmluZygxLCB0ZXh0RW5jb2RpbmdOYW1lTGVuZ3RoIC0gMik7CisKKyAgICAgICAgbV9z
dWdnZXN0ZWRGaWxlbmFtZSA9IFttX25zUmVzcG9uc2UuZ2V0KCkgc3VnZ2VzdGVkRmlsZW5hbWVd
OworCisgICAgICAgIGlmIChbbV9uc1Jlc3BvbnNlLmdldCgpIGlzS2luZE9mQ2xhc3M6W05TSFRU
UFVSTFJlc3BvbnNlIGNsYXNzXV0pIHsKKyAgICAgICAgICAgIE5TSFRUUFVSTFJlc3BvbnNlICpo
dHRwUmVzcG9uc2UgPSAoTlNIVFRQVVJMUmVzcG9uc2UgKiltX25zUmVzcG9uc2UuZ2V0KCk7CisK
KyAgICAgICAgICAgIG1faHR0cFN0YXR1c0NvZGUgPSBbaHR0cFJlc3BvbnNlIHN0YXR1c0NvZGVd
OworCisgICAgICAgICAgICBOU0RpY3Rpb25hcnkgKmhlYWRlcnMgPSBbaHR0cFJlc3BvbnNlIGFs
bEhlYWRlckZpZWxkc107CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGZvciAoaW50IGkgPSAw
OyBpIDwgbnVtQ29tbW9uSGVhZGVyRmllbGRzOyBpKyspIHsKKyAgICAgICAgICAgICAgICBpZiAo
TlNTdHJpbmcqIGhlYWRlclZhbHVlID0gW2hlYWRlcnMgb2JqZWN0Rm9yS2V5OmNvbW1vbkhlYWRl
ckZpZWxkc1tpXV0pCisgICAgICAgICAgICAgICAgICAgIG1faHR0cEhlYWRlckZpZWxkcy5zZXQo
W2NvbW1vbkhlYWRlckZpZWxkc1tpXSBVVEY4U3RyaW5nXSwgaGVhZGVyVmFsdWUpOworICAgICAg
ICAgICAgfQorICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgIG1faHR0cFN0YXR1c0NvZGUgPSAw
OwogICAgICAgICAKLSAgICAgICAgbV9odHRwU3RhdHVzQ29kZSA9IFtodHRwUmVzcG9uc2Ugc3Rh
dHVzQ29kZV07CisgICAgICAgIFtwb29sIGRyYWluXTsKKyAgICB9CisKKyAgICBpZiAobV9pbml0
TGV2ZWwgPCBBbGxGaWVsZHMgJiYgaW5pdExldmVsID49IEFsbEZpZWxkcyAmJiBbbV9uc1Jlc3Bv
bnNlLmdldCgpIGlzS2luZE9mQ2xhc3M6W05TSFRUUFVSTFJlc3BvbnNlIGNsYXNzXV0pIHsKKyAg
ICAgICAgTlNBdXRvcmVsZWFzZVBvb2wqIHBvb2wgPSBbW05TQXV0b3JlbGVhc2VQb29sIGFsbG9j
XSBpbml0XTsKKworICAgICAgICBOU0hUVFBVUkxSZXNwb25zZSAqaHR0cFJlc3BvbnNlID0gKE5T
SFRUUFVSTFJlc3BvbnNlICopbV9uc1Jlc3BvbnNlLmdldCgpOwogCiAgICAgICAgIFJldGFpblB0
cjxOU1N0cmluZz4gaHR0cFN0YXR1c0xpbmUoQWRvcHROUywgd2tDb3B5TlNVUkxSZXNwb25zZVN0
YXR1c0xpbmUobV9uc1Jlc3BvbnNlLmdldCgpKSk7CiAgICAgICAgIGlmIChodHRwU3RhdHVzTGlu
ZSkKICAgICAgICAgICAgIG1faHR0cFN0YXR1c1RleHQgPSBleHRyYWN0UmVhc29uUGhyYXNlRnJv
bUhUVFBTdGF0dXNMaW5lKGh0dHBTdGF0dXNMaW5lLmdldCgpKTsKICAgICAgICAgZWxzZQogICAg
ICAgICAgICAgbV9odHRwU3RhdHVzVGV4dCA9ICJPSyI7Ci0gICAgICAgIAorCiAgICAgICAgIE5T
RGljdGlvbmFyeSAqaGVhZGVycyA9IFtodHRwUmVzcG9uc2UgYWxsSGVhZGVyRmllbGRzXTsKICAg
ICAgICAgTlNFbnVtZXJhdG9yICplID0gW2hlYWRlcnMga2V5RW51bWVyYXRvcl07CiAgICAgICAg
IHdoaWxlIChOU1N0cmluZyAqbmFtZSA9IFtlIG5leHRPYmplY3RdKQogICAgICAgICAgICAgbV9o
dHRwSGVhZGVyRmllbGRzLnNldChuYW1lLCBbaGVhZGVycyBvYmplY3RGb3JLZXk6bmFtZV0pOwot
ICAgIH0gZWxzZQotICAgICAgICBtX2h0dHBTdGF0dXNDb2RlID0gMDsKKyAgICAgICAgCisgICAg
ICAgIFtwb29sIGRyYWluXTsKKyAgICB9CisKKyAgICBtX2luaXRMZXZlbCA9IGluaXRMZXZlbDsK
IH0KIAorICAgIAogYm9vbCBSZXNvdXJjZVJlc3BvbnNlOjpwbGF0Zm9ybUNvbXBhcmUoY29uc3Qg
UmVzb3VyY2VSZXNwb25zZSYgYSwgY29uc3QgUmVzb3VyY2VSZXNwb25zZSYgYikKIHsKICAgICBy
ZXR1cm4gYS5uc1VSTFJlc3BvbnNlKCkgPT0gYi5uc1VSTFJlc3BvbnNlKCk7Cg==
</data>
<flag name="review"
          id="80330"
          type_id="1"
          status="+"
          setter="darin"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>87949</attachid>
            <date>2011-04-01 17:48:44 -0700</date>
            <delta_ts>2011-04-01 20:22:57 -0700</delta_ts>
            <desc>Fix for Windows test break - put header field access inside if (httpResponse) check</desc>
            <filename>57488-8.patch</filename>
            <type>text/plain</type>
            <size>30035</size>
            <attacher name="Michael Saboff">msaboff</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDgyNzMxKQorKysgU291cmNlL1dlYkNvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsNzUgQEAKKzIwMTEtMDQtMDEgIE1pY2hhZWwg
U2Fib2ZmICA8bXNhYm9mZkBhcHBsZS5jb20+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZ
IChPT1BTISkuCisKKyAgICAgICAgQ2FjaGVkIFJlc291cmNlIE92ZXJoZWFkIFNwYWNlIFVzYWdl
IGFuZCBBY2NvdW50aW5nIEluYWNjdXJhdGUKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTU3NDg4CisKKyAgICAgICAgRml4ZWQgd2luZG93cyB0ZXN0IGZh
aWx1cmVzLgorICAgICAgICBDaGFuZ2VkIHRoZSBmaXhlZCBvdmVyaGVhZCB2YWx1ZSBmb3IgUmVz
b3VyY2VSZXNwb25zZSB0byAzODAwIGJ5dGVzLgorICAgICAgICBNb2RpZmllZCBSZXNvdXJjZVJl
c3BvbnNlOjpwbGF0Zm9ybUxhenlJbml0KCkgdG8gaGFuZGxlICJiYXNlIiBsZXZlbAorICAgICAg
ICBhdHRyaWJ1dGVzIG9yIGFsbCBhdHRyaWJ1dGVzLiAgVGhlIGJhc2UgYXR0cmlidXRlcywgbGlr
ZSBVUkwsIHN0YXR1cworICAgICAgICBjb2RlLCBtaW1lIHR5cGUgYW5kIGEgZmV3IGhlYWRlciBm
aWVsZHMgKG1vc3RseSBjYWNoZSByZWxhdGVkKSBhcmUKKyAgICAgICAgc3VpdGFibGUgZm9yIG1v
c3QgcmVzb3VyY2VzLiAgVGhpcyByZWR1Y2VzIHRoZSBwZXIgcmVzb3VyY2UgbWVtb3J5CisgICAg
ICAgIG5lZWRzIGJ5IG92ZXIgMUsgYnl0ZXMgcGVyIHJlc291cmNlIHRodXMgc2F2aW5nIG1lbW9y
eSBpbiB0aGUgY2FjaGUuCisgICAgICAgIENvbGxlY3RpdmVseSwgdGhlc2UgdHdvIGNoYW5nZXMg
YnJpbmcgdGhlIG92ZXJoZWFkIG1lbW9yeSBjYWxjdWxhdGlvbgorICAgICAgICBpbiBsaW5lIHdp
dGggcmVhbGl0eS4KKworICAgICAgICBObyBuZXcgdGVzdHMgYWRkZWQgZHVlIHRvIGV4aXN0aW5n
IHRlc3RzIGNvdmVyIGFyZWFzIG9mIGNoYW5nZSBhbmQKKyAgICAgICAgdGhlcmUgaXMgbm8gZnVu
Y3Rpb25hbCBjaGFuZ2UuICBUaGUgY2hhbmdlIGlzIGxpbWl0ZWQgdG8gcmVkdWNpbmcgCisgICAg
ICAgIG1lbW9yeSB1c2FnZSBhbG9uZyBleGlzdGluZyBwYXRocy4KKworICAgICAgICAqIGxvYWRl
ci9jYWNoZS9DYWNoZWRSZXNvdXJjZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDYWNoZWRSZXNv
dXJjZTo6Y2FuVXNlQ2FjaGVWYWxpZGF0b3IpOgorICAgICAgICAqIHBsYXRmb3JtL25ldHdvcmsv
UmVzb3VyY2VSZXNwb25zZUJhc2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVzb3VyY2VSZXNw
b25zZUJhc2U6OmFkb3B0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlc291cmNlUmVzcG9uc2VCYXNl
Ojppc0hUVFApOgorICAgICAgICAoV2ViQ29yZTo6UmVzb3VyY2VSZXNwb25zZUJhc2U6OnVybCk6
CisgICAgICAgIChXZWJDb3JlOjpSZXNvdXJjZVJlc3BvbnNlQmFzZTo6c2V0VVJMKToKKyAgICAg
ICAgKFdlYkNvcmU6OlJlc291cmNlUmVzcG9uc2VCYXNlOjptaW1lVHlwZSk6CisgICAgICAgIChX
ZWJDb3JlOjpSZXNvdXJjZVJlc3BvbnNlQmFzZTo6c2V0TWltZVR5cGUpOgorICAgICAgICAoV2Vi
Q29yZTo6UmVzb3VyY2VSZXNwb25zZUJhc2U6OmV4cGVjdGVkQ29udGVudExlbmd0aCk6CisgICAg
ICAgIChXZWJDb3JlOjpSZXNvdXJjZVJlc3BvbnNlQmFzZTo6c2V0RXhwZWN0ZWRDb250ZW50TGVu
Z3RoKToKKyAgICAgICAgKFdlYkNvcmU6OlJlc291cmNlUmVzcG9uc2VCYXNlOjp0ZXh0RW5jb2Rp
bmdOYW1lKToKKyAgICAgICAgKFdlYkNvcmU6OlJlc291cmNlUmVzcG9uc2VCYXNlOjpzZXRUZXh0
RW5jb2RpbmdOYW1lKToKKyAgICAgICAgKFdlYkNvcmU6OlJlc291cmNlUmVzcG9uc2VCYXNlOjpz
dWdnZXN0ZWRGaWxlbmFtZSk6CisgICAgICAgIChXZWJDb3JlOjpSZXNvdXJjZVJlc3BvbnNlQmFz
ZTo6c2V0U3VnZ2VzdGVkRmlsZW5hbWUpOgorICAgICAgICAoV2ViQ29yZTo6UmVzb3VyY2VSZXNw
b25zZUJhc2U6Omh0dHBTdGF0dXNDb2RlKToKKyAgICAgICAgKFdlYkNvcmU6OlJlc291cmNlUmVz
cG9uc2VCYXNlOjpzZXRIVFRQU3RhdHVzQ29kZSk6CisgICAgICAgIChXZWJDb3JlOjpSZXNvdXJj
ZVJlc3BvbnNlQmFzZTo6aHR0cFN0YXR1c1RleHQpOgorICAgICAgICAoV2ViQ29yZTo6UmVzb3Vy
Y2VSZXNwb25zZUJhc2U6OnNldEhUVFBTdGF0dXNUZXh0KToKKyAgICAgICAgKFdlYkNvcmU6OlJl
c291cmNlUmVzcG9uc2VCYXNlOjpodHRwSGVhZGVyRmllbGQpOgorICAgICAgICAoV2ViQ29yZTo6
UmVzb3VyY2VSZXNwb25zZUJhc2U6OnNldEhUVFBIZWFkZXJGaWVsZCk6CisgICAgICAgIChXZWJD
b3JlOjpSZXNvdXJjZVJlc3BvbnNlQmFzZTo6aHR0cEhlYWRlckZpZWxkcyk6CisgICAgICAgIChX
ZWJDb3JlOjpSZXNvdXJjZVJlc3BvbnNlQmFzZTo6cGFyc2VDYWNoZUNvbnRyb2xEaXJlY3RpdmVz
KToKKyAgICAgICAgKFdlYkNvcmU6OlJlc291cmNlUmVzcG9uc2VCYXNlOjpoYXNDYWNoZVZhbGlk
YXRvckZpZWxkcyk6CisgICAgICAgIChXZWJDb3JlOjpSZXNvdXJjZVJlc3BvbnNlQmFzZTo6ZGF0
ZSk6CisgICAgICAgIChXZWJDb3JlOjpSZXNvdXJjZVJlc3BvbnNlQmFzZTo6YWdlKToKKyAgICAg
ICAgKFdlYkNvcmU6OlJlc291cmNlUmVzcG9uc2VCYXNlOjpleHBpcmVzKToKKyAgICAgICAgKFdl
YkNvcmU6OlJlc291cmNlUmVzcG9uc2VCYXNlOjpsYXN0TW9kaWZpZWQpOgorICAgICAgICAoV2Vi
Q29yZTo6UmVzb3VyY2VSZXNwb25zZUJhc2U6OmlzQXR0YWNobWVudCk6CisgICAgICAgIChXZWJD
b3JlOjpSZXNvdXJjZVJlc3BvbnNlQmFzZTo6c2V0TGFzdE1vZGlmaWVkRGF0ZSk6CisgICAgICAg
IChXZWJDb3JlOjpSZXNvdXJjZVJlc3BvbnNlQmFzZTo6bGFzdE1vZGlmaWVkRGF0ZSk6CisgICAg
ICAgIChXZWJDb3JlOjpSZXNvdXJjZVJlc3BvbnNlQmFzZTo6d2FzQ2FjaGVkKToKKyAgICAgICAg
KFdlYkNvcmU6OlJlc291cmNlUmVzcG9uc2VCYXNlOjpjb25uZWN0aW9uUmV1c2VkKToKKyAgICAg
ICAgKFdlYkNvcmU6OlJlc291cmNlUmVzcG9uc2VCYXNlOjpzZXRDb25uZWN0aW9uUmV1c2VkKToK
KyAgICAgICAgKFdlYkNvcmU6OlJlc291cmNlUmVzcG9uc2VCYXNlOjpjb25uZWN0aW9uSUQpOgor
ICAgICAgICAoV2ViQ29yZTo6UmVzb3VyY2VSZXNwb25zZUJhc2U6OnNldENvbm5lY3Rpb25JRCk6
CisgICAgICAgIChXZWJDb3JlOjpSZXNvdXJjZVJlc3BvbnNlQmFzZTo6cmVzb3VyY2VMb2FkVGlt
aW5nKToKKyAgICAgICAgKFdlYkNvcmU6OlJlc291cmNlUmVzcG9uc2VCYXNlOjpzZXRSZXNvdXJj
ZUxvYWRUaW1pbmcpOgorICAgICAgICAoV2ViQ29yZTo6UmVzb3VyY2VSZXNwb25zZUJhc2U6OnJl
c291cmNlTG9hZEluZm8pOgorICAgICAgICAoV2ViQ29yZTo6UmVzb3VyY2VSZXNwb25zZUJhc2U6
OnNldFJlc291cmNlTG9hZEluZm8pOgorICAgICAgICAoV2ViQ29yZTo6UmVzb3VyY2VSZXNwb25z
ZUJhc2U6OmxhenlJbml0KToKKyAgICAgICAgKiBwbGF0Zm9ybS9uZXR3b3JrL1Jlc291cmNlUmVz
cG9uc2VCYXNlLmg6CisgICAgICAgIChXZWJDb3JlOjpSZXNvdXJjZVJlc3BvbnNlQmFzZTo6cGxh
dGZvcm1MYXp5SW5pdCk6CisgICAgICAgICogcGxhdGZvcm0vbmV0d29yay9jZi9SZXNvdXJjZVJl
c3BvbnNlLmg6CisgICAgICAgIChXZWJDb3JlOjpSZXNvdXJjZVJlc3BvbnNlOjpSZXNvdXJjZVJl
c3BvbnNlKToKKyAgICAgICAgKFdlYkNvcmU6OlJlc291cmNlUmVzcG9uc2U6Om1lbW9yeVVzYWdl
KToKKyAgICAgICAgKiBwbGF0Zm9ybS9uZXR3b3JrL2NmL1Jlc291cmNlUmVzcG9uc2VDRk5ldC5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpSZXNvdXJjZVJlc3BvbnNlOjpwbGF0Zm9ybUxhenlJbml0
KToKKyAgICAgICAgKiBwbGF0Zm9ybS9uZXR3b3JrL21hYy9SZXNvdXJjZVJlc3BvbnNlTWFjLm1t
OgorICAgICAgICAoV2ViQ29yZTo6UmVzb3VyY2VSZXNwb25zZTo6cGxhdGZvcm1MYXp5SW5pdCk6
CisKIDIwMTEtMDQtMDEgIEpvaG4gQmF1bWFuICA8amJhdW1hbkBjaHJvbWl1bS5vcmc+CiAKICAg
ICAgICAgUmV2aWV3ZWQgYnkgS2VubmV0aCBSdXNzZWxsLgpJbmRleDogU291cmNlL1dlYkNvcmUv
bG9hZGVyL2NhY2hlL0NhY2hlZFJlc291cmNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9sb2FkZXIvY2FjaGUvQ2FjaGVkUmVzb3VyY2UuY3BwCShyZXZpc2lvbiA4MjcxNykKKysr
IFNvdXJjZS9XZWJDb3JlL2xvYWRlci9jYWNoZS9DYWNoZWRSZXNvdXJjZS5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTUwNCwxMCArNTA0LDcgQEAgYm9vbCBDYWNoZWRSZXNvdXJjZTo6Y2FuVXNlQ2Fj
aGVWYWxpZGF0bwogCiAgICAgaWYgKG1fcmVzcG9uc2UuY2FjaGVDb250cm9sQ29udGFpbnNOb1N0
b3JlKCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIERFRklORV9TVEFUSUNfTE9DQUwo
Y29uc3QgQXRvbWljU3RyaW5nLCBsYXN0TW9kaWZpZWRIZWFkZXIsICgibGFzdC1tb2RpZmllZCIp
KTsKLSAgICBERUZJTkVfU1RBVElDX0xPQ0FMKGNvbnN0IEF0b21pY1N0cmluZywgZVRhZ0hlYWRl
ciwgKCJldGFnIikpOwotICAgIHJldHVybiAhbV9yZXNwb25zZS5odHRwSGVhZGVyRmllbGQobGFz
dE1vZGlmaWVkSGVhZGVyKS5pc0VtcHR5KCkgfHwgIW1fcmVzcG9uc2UuaHR0cEhlYWRlckZpZWxk
KGVUYWdIZWFkZXIpLmlzRW1wdHkoKTsKKyAgICByZXR1cm4gbV9yZXNwb25zZS5oYXNDYWNoZVZh
bGlkYXRvckZpZWxkcygpOwogfQogCiBib29sIENhY2hlZFJlc291cmNlOjptdXN0UmV2YWxpZGF0
ZUR1ZVRvQ2FjaGVIZWFkZXJzKENhY2hlUG9saWN5IGNhY2hlUG9saWN5KSBjb25zdApJbmRleDog
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9SZXNvdXJjZVJlc3BvbnNlQmFzZS5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9SZXNvdXJjZVJl
c3BvbnNlQmFzZS5jcHAJKHJldmlzaW9uIDgyNzE3KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vbmV0d29yay9SZXNvdXJjZVJlc3BvbnNlQmFzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEw
OCw3ICsxMDgsNyBAQCBQYXNzT3duUHRyPFJlc291cmNlUmVzcG9uc2U+IFJlc291cmNlUmVzCiAg
ICAgcmVzcG9uc2UtPnNldEhUVFBTdGF0dXNDb2RlKGRhdGEtPm1faHR0cFN0YXR1c0NvZGUpOwog
ICAgIHJlc3BvbnNlLT5zZXRIVFRQU3RhdHVzVGV4dChkYXRhLT5tX2h0dHBTdGF0dXNUZXh0KTsK
IAotICAgIHJlc3BvbnNlLT5sYXp5SW5pdCgpOworICAgIHJlc3BvbnNlLT5sYXp5SW5pdChBbGxG
aWVsZHMpOwogICAgIHJlc3BvbnNlLT5tX2h0dHBIZWFkZXJGaWVsZHMuYWRvcHQoZGF0YS0+bV9o
dHRwSGVhZGVycy5yZWxlYXNlKCkpOwogICAgIHJlc3BvbnNlLT5zZXRMYXN0TW9kaWZpZWREYXRl
KGRhdGEtPm1fbGFzdE1vZGlmaWVkRGF0ZSk7CiAgICAgcmVzcG9uc2UtPnNldFJlc291cmNlTG9h
ZFRpbWluZyhkYXRhLT5tX3Jlc291cmNlTG9hZFRpbWluZy5yZWxlYXNlKCkpOwpAQCAtMTM1LDcg
KzEzNSw3IEBAIFBhc3NPd25QdHI8Q3Jvc3NUaHJlYWRSZXNvdXJjZVJlc3BvbnNlRGEKIAogYm9v
bCBSZXNvdXJjZVJlc3BvbnNlQmFzZTo6aXNIVFRQKCkgY29uc3QKIHsKLSAgICBsYXp5SW5pdCgp
OworICAgIGxhenlJbml0KENvbW1vbkZpZWxkc09ubHkpOwogCiAgICAgU3RyaW5nIHByb3RvY29s
ID0gbV91cmwucHJvdG9jb2woKTsKIApAQCAtMTQ0LDEyNiArMTQ0LDE0MCBAQCBib29sIFJlc291
cmNlUmVzcG9uc2VCYXNlOjppc0hUVFAoKSBjb25zCiAKIGNvbnN0IEtVUkwmIFJlc291cmNlUmVz
cG9uc2VCYXNlOjp1cmwoKSBjb25zdAogewotICAgIGxhenlJbml0KCk7Ci0gICAgCisgICAgbGF6
eUluaXQoQ29tbW9uRmllbGRzT25seSk7CisKICAgICByZXR1cm4gbV91cmw7IAogfQogCiB2b2lk
IFJlc291cmNlUmVzcG9uc2VCYXNlOjpzZXRVUkwoY29uc3QgS1VSTCYgdXJsKQogewotICAgIGxh
enlJbml0KCk7CisgICAgbGF6eUluaXQoQ29tbW9uRmllbGRzT25seSk7CiAgICAgbV9pc051bGwg
PSBmYWxzZTsKLSAgICAKKwogICAgIG1fdXJsID0gdXJsOyAKIH0KIAogY29uc3QgU3RyaW5nJiBS
ZXNvdXJjZVJlc3BvbnNlQmFzZTo6bWltZVR5cGUoKSBjb25zdAogewotICAgIGxhenlJbml0KCk7
CisgICAgbGF6eUluaXQoQ29tbW9uRmllbGRzT25seSk7CiAKICAgICByZXR1cm4gbV9taW1lVHlw
ZTsgCiB9CiAKIHZvaWQgUmVzb3VyY2VSZXNwb25zZUJhc2U6OnNldE1pbWVUeXBlKGNvbnN0IFN0
cmluZyYgbWltZVR5cGUpCiB7Ci0gICAgbGF6eUluaXQoKTsKKyAgICBsYXp5SW5pdChDb21tb25G
aWVsZHNPbmx5KTsKICAgICBtX2lzTnVsbCA9IGZhbHNlOwotICAgIAorCiAgICAgbV9taW1lVHlw
ZSA9IG1pbWVUeXBlOyAKIH0KIAogbG9uZyBsb25nIFJlc291cmNlUmVzcG9uc2VCYXNlOjpleHBl
Y3RlZENvbnRlbnRMZW5ndGgoKSBjb25zdCAKIHsKLSAgICBsYXp5SW5pdCgpOworICAgIGxhenlJ
bml0KENvbW1vbkZpZWxkc09ubHkpOwogCiAgICAgcmV0dXJuIG1fZXhwZWN0ZWRDb250ZW50TGVu
Z3RoOwogfQogCiB2b2lkIFJlc291cmNlUmVzcG9uc2VCYXNlOjpzZXRFeHBlY3RlZENvbnRlbnRM
ZW5ndGgobG9uZyBsb25nIGV4cGVjdGVkQ29udGVudExlbmd0aCkKIHsKLSAgICBsYXp5SW5pdCgp
OworICAgIGxhenlJbml0KENvbW1vbkZpZWxkc09ubHkpOwogICAgIG1faXNOdWxsID0gZmFsc2U7
Ci0gICAgCisKICAgICBtX2V4cGVjdGVkQ29udGVudExlbmd0aCA9IGV4cGVjdGVkQ29udGVudExl
bmd0aDsgCiB9CiAKIGNvbnN0IFN0cmluZyYgUmVzb3VyY2VSZXNwb25zZUJhc2U6OnRleHRFbmNv
ZGluZ05hbWUoKSBjb25zdAogewotICAgIGxhenlJbml0KCk7CisgICAgbGF6eUluaXQoQ29tbW9u
RmllbGRzT25seSk7CiAKICAgICByZXR1cm4gbV90ZXh0RW5jb2RpbmdOYW1lOwogfQogCiB2b2lk
IFJlc291cmNlUmVzcG9uc2VCYXNlOjpzZXRUZXh0RW5jb2RpbmdOYW1lKGNvbnN0IFN0cmluZyYg
ZW5jb2RpbmdOYW1lKQogewotICAgIGxhenlJbml0KCk7CisgICAgbGF6eUluaXQoQ29tbW9uRmll
bGRzT25seSk7CiAgICAgbV9pc051bGwgPSBmYWxzZTsKLSAgICAKKwogICAgIG1fdGV4dEVuY29k
aW5nTmFtZSA9IGVuY29kaW5nTmFtZTsgCiB9CiAKIC8vIEZJWE1FIHNob3VsZCBjb21wdXRlIHRo
aXMgb24gdGhlIGZseQogY29uc3QgU3RyaW5nJiBSZXNvdXJjZVJlc3BvbnNlQmFzZTo6c3VnZ2Vz
dGVkRmlsZW5hbWUoKSBjb25zdAogewotICAgIGxhenlJbml0KCk7CisgICAgbGF6eUluaXQoQ29t
bW9uRmllbGRzT25seSk7CiAKICAgICByZXR1cm4gbV9zdWdnZXN0ZWRGaWxlbmFtZTsKIH0KIAog
dm9pZCBSZXNvdXJjZVJlc3BvbnNlQmFzZTo6c2V0U3VnZ2VzdGVkRmlsZW5hbWUoY29uc3QgU3Ry
aW5nJiBzdWdnZXN0ZWROYW1lKQogewotICAgIGxhenlJbml0KCk7CisgICAgbGF6eUluaXQoQ29t
bW9uRmllbGRzT25seSk7CiAgICAgbV9pc051bGwgPSBmYWxzZTsKLSAgICAKKwogICAgIG1fc3Vn
Z2VzdGVkRmlsZW5hbWUgPSBzdWdnZXN0ZWROYW1lOyAKIH0KIAogaW50IFJlc291cmNlUmVzcG9u
c2VCYXNlOjpodHRwU3RhdHVzQ29kZSgpIGNvbnN0CiB7Ci0gICAgbGF6eUluaXQoKTsKKyAgICBs
YXp5SW5pdChDb21tb25GaWVsZHNPbmx5KTsKIAogICAgIHJldHVybiBtX2h0dHBTdGF0dXNDb2Rl
OwogfQogCiB2b2lkIFJlc291cmNlUmVzcG9uc2VCYXNlOjpzZXRIVFRQU3RhdHVzQ29kZShpbnQg
c3RhdHVzQ29kZSkKIHsKLSAgICBsYXp5SW5pdCgpOworICAgIGxhenlJbml0KENvbW1vbkZpZWxk
c09ubHkpOwogCiAgICAgbV9odHRwU3RhdHVzQ29kZSA9IHN0YXR1c0NvZGU7CiB9CiAKIGNvbnN0
IFN0cmluZyYgUmVzb3VyY2VSZXNwb25zZUJhc2U6Omh0dHBTdGF0dXNUZXh0KCkgY29uc3QgCiB7
Ci0gICAgbGF6eUluaXQoKTsKKyAgICBsYXp5SW5pdChBbGxGaWVsZHMpOwogCiAgICAgcmV0dXJu
IG1faHR0cFN0YXR1c1RleHQ7IAogfQogCiB2b2lkIFJlc291cmNlUmVzcG9uc2VCYXNlOjpzZXRI
VFRQU3RhdHVzVGV4dChjb25zdCBTdHJpbmcmIHN0YXR1c1RleHQpIAogewotICAgIGxhenlJbml0
KCk7CisgICAgbGF6eUluaXQoQWxsRmllbGRzKTsKIAogICAgIG1faHR0cFN0YXR1c1RleHQgPSBz
dGF0dXNUZXh0OyAKIH0KIAogU3RyaW5nIFJlc291cmNlUmVzcG9uc2VCYXNlOjpodHRwSGVhZGVy
RmllbGQoY29uc3QgQXRvbWljU3RyaW5nJiBuYW1lKSBjb25zdAogewotICAgIGxhenlJbml0KCk7
CisgICAgbGF6eUluaXQoQ29tbW9uRmllbGRzT25seSk7CisKKyAgICAvLyBJZiB3ZSBhbHJlYWR5
IGhhdmUgdGhlIGhlYWRlciwganVzdCByZXR1cm4gaXQgaW5zdGVhZCBvZiBjb25zdW1pbmcgbWVt
b3J5IGJ5IGdyYWJpbmcgYWxsIGhlYWRlcnMuCisgICAgU3RyaW5nIHZhbHVlID0gbV9odHRwSGVh
ZGVyRmllbGRzLmdldChuYW1lKTsKKyAgICBpZiAoIXZhbHVlLmlzRW1wdHkoKSkgICAgICAgIAor
ICAgICAgICByZXR1cm4gdmFsdWU7CisKKyAgICBsYXp5SW5pdChBbGxGaWVsZHMpOwogCiAgICAg
cmV0dXJuIG1faHR0cEhlYWRlckZpZWxkcy5nZXQobmFtZSk7IAogfQogCiBTdHJpbmcgUmVzb3Vy
Y2VSZXNwb25zZUJhc2U6Omh0dHBIZWFkZXJGaWVsZChjb25zdCBjaGFyKiBuYW1lKSBjb25zdAog
ewotICAgIGxhenlJbml0KCk7CisgICAgbGF6eUluaXQoQ29tbW9uRmllbGRzT25seSk7CisKKyAg
ICAvLyBJZiB3ZSBhbHJlYWR5IGhhdmUgdGhlIGhlYWRlciwganVzdCByZXR1cm4gaXQgaW5zdGVh
ZCBvZiBjb25zdW1pbmcgbWVtb3J5IGJ5IGdyYWJpbmcgYWxsIGhlYWRlcnMuCisgICAgU3RyaW5n
IHZhbHVlID0gbV9odHRwSGVhZGVyRmllbGRzLmdldChuYW1lKTsKKyAgICBpZiAoIXZhbHVlLmlz
RW1wdHkoKSkKKyAgICAgICAgcmV0dXJuIHZhbHVlOworCisgICAgbGF6eUluaXQoQWxsRmllbGRz
KTsKIAogICAgIHJldHVybiBtX2h0dHBIZWFkZXJGaWVsZHMuZ2V0KG5hbWUpOyAKIH0KIAogdm9p
ZCBSZXNvdXJjZVJlc3BvbnNlQmFzZTo6c2V0SFRUUEhlYWRlckZpZWxkKGNvbnN0IEF0b21pY1N0
cmluZyYgbmFtZSwgY29uc3QgU3RyaW5nJiB2YWx1ZSkKIHsKLSAgICBsYXp5SW5pdCgpOwotICAg
IAorICAgIGxhenlJbml0KEFsbEZpZWxkcyk7CisKICAgICBERUZJTkVfU1RBVElDX0xPQ0FMKGNv
bnN0IEF0b21pY1N0cmluZywgYWdlSGVhZGVyLCAoImFnZSIpKTsKICAgICBERUZJTkVfU1RBVElD
X0xPQ0FMKGNvbnN0IEF0b21pY1N0cmluZywgY2FjaGVDb250cm9sSGVhZGVyLCAoImNhY2hlLWNv
bnRyb2wiKSk7CiAgICAgREVGSU5FX1NUQVRJQ19MT0NBTChjb25zdCBBdG9taWNTdHJpbmcsIGRh
dGVIZWFkZXIsICgiZGF0ZSIpKTsKQEAgLTI4Niw3ICszMDAsNyBAQCB2b2lkIFJlc291cmNlUmVz
cG9uc2VCYXNlOjpzZXRIVFRQSGVhZGVyCiAKIGNvbnN0IEhUVFBIZWFkZXJNYXAmIFJlc291cmNl
UmVzcG9uc2VCYXNlOjpodHRwSGVhZGVyRmllbGRzKCkgY29uc3QKIHsKLSAgICBsYXp5SW5pdCgp
OworICAgIGxhenlJbml0KEFsbEZpZWxkcyk7CiAKICAgICByZXR1cm4gbV9odHRwSGVhZGVyRmll
bGRzOwogfQpAQCAtMjk1LDcgKzMwOSw3IEBAIHZvaWQgUmVzb3VyY2VSZXNwb25zZUJhc2U6OnBh
cnNlQ2FjaGVDb24KIHsKICAgICBBU1NFUlQoIW1faGF2ZVBhcnNlZENhY2hlQ29udHJvbEhlYWRl
cik7CiAKLSAgICBsYXp5SW5pdCgpOworICAgIGxhenlJbml0KENvbW1vbkZpZWxkc09ubHkpOwog
CiAgICAgbV9oYXZlUGFyc2VkQ2FjaGVDb250cm9sSGVhZGVyID0gdHJ1ZTsKIApAQCAtMzMyLDEz
ICszNDYsMTQgQEAgdm9pZCBSZXNvdXJjZVJlc3BvbnNlQmFzZTo6cGFyc2VDYWNoZUNvbgogICAg
ICAgICAgICAgfQogICAgICAgICB9CiAgICAgfQotICAgICAgICAKKwogICAgIGlmICghbV9jYWNo
ZUNvbnRyb2xDb250YWluc05vQ2FjaGUpIHsKICAgICAgICAgLy8gSGFuZGxlIFByYWdtYTogbm8t
Y2FjaGUKICAgICAgICAgLy8gVGhpcyBpcyBkZXByZWNhdGVkIGFuZCBlcXVpdmFsZW50IHRvIENh
Y2hlLWNvbnRyb2w6IG5vLWNhY2hlCiAgICAgICAgIC8vIERvbid0IGJvdGhlciB0b2tlbml6aW5n
IHRoZSB2YWx1ZSwgaXQgaXMgbm90IGltcG9ydGFudAogICAgICAgICBERUZJTkVfU1RBVElDX0xP
Q0FMKGNvbnN0IEF0b21pY1N0cmluZywgcHJhZ21hSGVhZGVyLCAoInByYWdtYSIpKTsKICAgICAg
ICAgU3RyaW5nIHByYWdtYVZhbHVlID0gbV9odHRwSGVhZGVyRmllbGRzLmdldChwcmFnbWFIZWFk
ZXIpOworCiAgICAgICAgIG1fY2FjaGVDb250cm9sQ29udGFpbnNOb0NhY2hlID0gcHJhZ21hVmFs
dWUubG93ZXIoKS5jb250YWlucyhub0NhY2hlRGlyZWN0aXZlKTsKICAgICB9CiB9CkBAIC0zNjQs
NiArMzc5LDE1IEBAIGJvb2wgUmVzb3VyY2VSZXNwb25zZUJhc2U6OmNhY2hlQ29udHJvbEMKICAg
ICByZXR1cm4gbV9jYWNoZUNvbnRyb2xDb250YWluc011c3RSZXZhbGlkYXRlOwogfQogCitib29s
IFJlc291cmNlUmVzcG9uc2VCYXNlOjpoYXNDYWNoZVZhbGlkYXRvckZpZWxkcygpIGNvbnN0Cit7
CisgICAgbGF6eUluaXQoQ29tbW9uRmllbGRzT25seSk7CisKKyAgICBERUZJTkVfU1RBVElDX0xP
Q0FMKGNvbnN0IEF0b21pY1N0cmluZywgbGFzdE1vZGlmaWVkSGVhZGVyLCAoImxhc3QtbW9kaWZp
ZWQiKSk7CisgICAgREVGSU5FX1NUQVRJQ19MT0NBTChjb25zdCBBdG9taWNTdHJpbmcsIGVUYWdI
ZWFkZXIsICgiZXRhZyIpKTsKKyAgICByZXR1cm4gIW1faHR0cEhlYWRlckZpZWxkcy5nZXQobGFz
dE1vZGlmaWVkSGVhZGVyKS5pc0VtcHR5KCkgfHwgIW1faHR0cEhlYWRlckZpZWxkcy5nZXQoZVRh
Z0hlYWRlcikuaXNFbXB0eSgpOworfQorCiBkb3VibGUgUmVzb3VyY2VSZXNwb25zZUJhc2U6OmNh
Y2hlQ29udHJvbE1heEFnZSgpIGNvbnN0CiB7CiAgICAgaWYgKCFtX2hhdmVQYXJzZWRDYWNoZUNv
bnRyb2xIZWFkZXIpCkBAIC0zODgsNyArNDEyLDcgQEAgc3RhdGljIGRvdWJsZSBwYXJzZURhdGVW
YWx1ZUluSGVhZGVyKGNvbgogCiBkb3VibGUgUmVzb3VyY2VSZXNwb25zZUJhc2U6OmRhdGUoKSBj
b25zdAogewotICAgIGxhenlJbml0KCk7CisgICAgbGF6eUluaXQoQ29tbW9uRmllbGRzT25seSk7
CiAKICAgICBpZiAoIW1faGF2ZVBhcnNlZERhdGVIZWFkZXIpIHsKICAgICAgICAgREVGSU5FX1NU
QVRJQ19MT0NBTChjb25zdCBBdG9taWNTdHJpbmcsIGhlYWRlck5hbWUsICgiZGF0ZSIpKTsKQEAg
LTQwMCw4ICs0MjQsOCBAQCBkb3VibGUgUmVzb3VyY2VSZXNwb25zZUJhc2U6OmRhdGUoKSBjb25z
CiAKIGRvdWJsZSBSZXNvdXJjZVJlc3BvbnNlQmFzZTo6YWdlKCkgY29uc3QKIHsKLSAgICBsYXp5
SW5pdCgpOwotICAgIAorICAgIGxhenlJbml0KENvbW1vbkZpZWxkc09ubHkpOworCiAgICAgaWYg
KCFtX2hhdmVQYXJzZWRBZ2VIZWFkZXIpIHsKICAgICAgICAgREVGSU5FX1NUQVRJQ19MT0NBTChj
b25zdCBBdG9taWNTdHJpbmcsIGhlYWRlck5hbWUsICgiYWdlIikpOwogICAgICAgICBTdHJpbmcg
aGVhZGVyVmFsdWUgPSBtX2h0dHBIZWFkZXJGaWVsZHMuZ2V0KGhlYWRlck5hbWUpOwpAQCAtNDE2
LDcgKzQ0MCw3IEBAIGRvdWJsZSBSZXNvdXJjZVJlc3BvbnNlQmFzZTo6YWdlKCkgY29uc3QKIAog
ZG91YmxlIFJlc291cmNlUmVzcG9uc2VCYXNlOjpleHBpcmVzKCkgY29uc3QKIHsKLSAgICBsYXp5
SW5pdCgpOworICAgIGxhenlJbml0KENvbW1vbkZpZWxkc09ubHkpOwogCiAgICAgaWYgKCFtX2hh
dmVQYXJzZWRFeHBpcmVzSGVhZGVyKSB7CiAgICAgICAgIERFRklORV9TVEFUSUNfTE9DQUwoY29u
c3QgQXRvbWljU3RyaW5nLCBoZWFkZXJOYW1lLCAoImV4cGlyZXMiKSk7CkBAIC00MjgsOCArNDUy
LDggQEAgZG91YmxlIFJlc291cmNlUmVzcG9uc2VCYXNlOjpleHBpcmVzKCkgYwogCiBkb3VibGUg
UmVzb3VyY2VSZXNwb25zZUJhc2U6Omxhc3RNb2RpZmllZCgpIGNvbnN0CiB7Ci0gICAgbGF6eUlu
aXQoKTsKLSAgICAKKyAgICBsYXp5SW5pdChDb21tb25GaWVsZHNPbmx5KTsKKwogICAgIGlmICgh
bV9oYXZlUGFyc2VkTGFzdE1vZGlmaWVkSGVhZGVyKSB7CiAgICAgICAgIERFRklORV9TVEFUSUNf
TE9DQUwoY29uc3QgQXRvbWljU3RyaW5nLCBoZWFkZXJOYW1lLCAoImxhc3QtbW9kaWZpZWQiKSk7
CiAgICAgICAgIG1fbGFzdE1vZGlmaWVkID0gcGFyc2VEYXRlVmFsdWVJbkhlYWRlcihtX2h0dHBI
ZWFkZXJGaWVsZHMsIGhlYWRlck5hbWUpOwpAQCAtNDQwLDcgKzQ2NCw3IEBAIGRvdWJsZSBSZXNv
dXJjZVJlc3BvbnNlQmFzZTo6bGFzdE1vZGlmaWUKIAogYm9vbCBSZXNvdXJjZVJlc3BvbnNlQmFz
ZTo6aXNBdHRhY2htZW50KCkgY29uc3QKIHsKLSAgICBsYXp5SW5pdCgpOworICAgIGxhenlJbml0
KEFsbEZpZWxkcyk7CiAKICAgICBERUZJTkVfU1RBVElDX0xPQ0FMKGNvbnN0IEF0b21pY1N0cmlu
ZywgaGVhZGVyTmFtZSwgKCJjb250ZW50LWRpc3Bvc2l0aW9uIikpOwogICAgIFN0cmluZyB2YWx1
ZSA9IG1faHR0cEhlYWRlckZpZWxkcy5nZXQoaGVhZGVyTmFtZSk7CkBAIC00NTQsMjEgKzQ3OCwy
MSBAQCBib29sIFJlc291cmNlUmVzcG9uc2VCYXNlOjppc0F0dGFjaG1lbnQoCiAgIAogdm9pZCBS
ZXNvdXJjZVJlc3BvbnNlQmFzZTo6c2V0TGFzdE1vZGlmaWVkRGF0ZSh0aW1lX3QgbGFzdE1vZGlm
aWVkRGF0ZSkKIHsKLSAgICBsYXp5SW5pdCgpOworICAgIGxhenlJbml0KEFsbEZpZWxkcyk7CiAK
ICAgICBtX2xhc3RNb2RpZmllZERhdGUgPSBsYXN0TW9kaWZpZWREYXRlOwogfQogCiB0aW1lX3Qg
UmVzb3VyY2VSZXNwb25zZUJhc2U6Omxhc3RNb2RpZmllZERhdGUoKSBjb25zdAogewotICAgIGxh
enlJbml0KCk7CisgICAgbGF6eUluaXQoQWxsRmllbGRzKTsKIAogICAgIHJldHVybiBtX2xhc3RN
b2RpZmllZERhdGU7CiB9CiAKIGJvb2wgUmVzb3VyY2VSZXNwb25zZUJhc2U6Ondhc0NhY2hlZCgp
IGNvbnN0CiB7Ci0gICAgbGF6eUluaXQoKTsKKyAgICBsYXp5SW5pdChBbGxGaWVsZHMpOwogCiAg
ICAgcmV0dXJuIG1fd2FzQ2FjaGVkOwogfQpAQCAtNDgwLDY1ICs1MDQsNjUgQEAgdm9pZCBSZXNv
dXJjZVJlc3BvbnNlQmFzZTo6c2V0V2FzQ2FjaGVkKAogCiBib29sIFJlc291cmNlUmVzcG9uc2VC
YXNlOjpjb25uZWN0aW9uUmV1c2VkKCkgY29uc3QKIHsKLSAgICBsYXp5SW5pdCgpOworICAgIGxh
enlJbml0KEFsbEZpZWxkcyk7CiAKICAgICByZXR1cm4gbV9jb25uZWN0aW9uUmV1c2VkOwogfQog
CiB2b2lkIFJlc291cmNlUmVzcG9uc2VCYXNlOjpzZXRDb25uZWN0aW9uUmV1c2VkKGJvb2wgY29u
bmVjdGlvblJldXNlZCkKIHsKLSAgICBsYXp5SW5pdCgpOworICAgIGxhenlJbml0KEFsbEZpZWxk
cyk7CiAKICAgICBtX2Nvbm5lY3Rpb25SZXVzZWQgPSBjb25uZWN0aW9uUmV1c2VkOwogfQogCiB1
bnNpZ25lZCBSZXNvdXJjZVJlc3BvbnNlQmFzZTo6Y29ubmVjdGlvbklEKCkgY29uc3QKIHsKLSAg
ICBsYXp5SW5pdCgpOworICAgIGxhenlJbml0KEFsbEZpZWxkcyk7CiAKICAgICByZXR1cm4gbV9j
b25uZWN0aW9uSUQ7CiB9CiAKIHZvaWQgUmVzb3VyY2VSZXNwb25zZUJhc2U6OnNldENvbm5lY3Rp
b25JRCh1bnNpZ25lZCBjb25uZWN0aW9uSUQpCiB7Ci0gICAgbGF6eUluaXQoKTsKKyAgICBsYXp5
SW5pdChBbGxGaWVsZHMpOwogCiAgICAgbV9jb25uZWN0aW9uSUQgPSBjb25uZWN0aW9uSUQ7CiB9
CiAKIFJlc291cmNlTG9hZFRpbWluZyogUmVzb3VyY2VSZXNwb25zZUJhc2U6OnJlc291cmNlTG9h
ZFRpbWluZygpIGNvbnN0CiB7Ci0gICAgbGF6eUluaXQoKTsKKyAgICBsYXp5SW5pdChBbGxGaWVs
ZHMpOwogCiAgICAgcmV0dXJuIG1fcmVzb3VyY2VMb2FkVGltaW5nLmdldCgpOwogfQogCiB2b2lk
IFJlc291cmNlUmVzcG9uc2VCYXNlOjpzZXRSZXNvdXJjZUxvYWRUaW1pbmcoUGFzc1JlZlB0cjxS
ZXNvdXJjZUxvYWRUaW1pbmc+IHJlc291cmNlTG9hZFRpbWluZykKIHsKLSAgICBsYXp5SW5pdCgp
OworICAgIGxhenlJbml0KEFsbEZpZWxkcyk7CiAKICAgICBtX3Jlc291cmNlTG9hZFRpbWluZyA9
IHJlc291cmNlTG9hZFRpbWluZzsKIH0KIAogUGFzc1JlZlB0cjxSZXNvdXJjZUxvYWRJbmZvPiBS
ZXNvdXJjZVJlc3BvbnNlQmFzZTo6cmVzb3VyY2VMb2FkSW5mbygpIGNvbnN0CiB7Ci0gICAgbGF6
eUluaXQoKTsKKyAgICBsYXp5SW5pdChBbGxGaWVsZHMpOwogCiAgICAgcmV0dXJuIG1fcmVzb3Vy
Y2VMb2FkSW5mby5nZXQoKTsKIH0KIAogdm9pZCBSZXNvdXJjZVJlc3BvbnNlQmFzZTo6c2V0UmVz
b3VyY2VMb2FkSW5mbyhQYXNzUmVmUHRyPFJlc291cmNlTG9hZEluZm8+IGxvYWRJbmZvKQogewot
ICAgIGxhenlJbml0KCk7CisgICAgbGF6eUluaXQoQWxsRmllbGRzKTsKIAogICAgIG1fcmVzb3Vy
Y2VMb2FkSW5mbyA9IGxvYWRJbmZvOwogfQogCi12b2lkIFJlc291cmNlUmVzcG9uc2VCYXNlOjps
YXp5SW5pdCgpIGNvbnN0Cit2b2lkIFJlc291cmNlUmVzcG9uc2VCYXNlOjpsYXp5SW5pdChJbml0
TGV2ZWwgaW5pdExldmVsKSBjb25zdAogewotICAgIGNvbnN0X2Nhc3Q8UmVzb3VyY2VSZXNwb25z
ZSo+KHN0YXRpY19jYXN0PGNvbnN0IFJlc291cmNlUmVzcG9uc2UqPih0aGlzKSktPnBsYXRmb3Jt
TGF6eUluaXQoKTsKKyAgICBjb25zdF9jYXN0PFJlc291cmNlUmVzcG9uc2UqPihzdGF0aWNfY2Fz
dDxjb25zdCBSZXNvdXJjZVJlc3BvbnNlKj4odGhpcykpLT5wbGF0Zm9ybUxhenlJbml0KGluaXRM
ZXZlbCk7CiB9Ci0KKyAgICAKIGJvb2wgUmVzb3VyY2VSZXNwb25zZUJhc2U6OmNvbXBhcmUoY29u
c3QgUmVzb3VyY2VSZXNwb25zZSYgYSwgY29uc3QgUmVzb3VyY2VSZXNwb25zZSYgYikKIHsKICAg
ICBpZiAoYS5pc051bGwoKSAhPSBiLmlzTnVsbCgpKQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vbmV0d29yay9SZXNvdXJjZVJlc3BvbnNlQmFzZS5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvUmVzb3VyY2VSZXNwb25zZUJhc2UuaAkocmV2aXNp
b24gODI3MTcpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL1Jlc291cmNlUmVz
cG9uc2VCYXNlLmgJKHdvcmtpbmcgY29weSkKQEAgLTkzLDYgKzkzLDcgQEAgcHVibGljOgogICAg
IGJvb2wgY2FjaGVDb250cm9sQ29udGFpbnNOb0NhY2hlKCkgY29uc3Q7CiAgICAgYm9vbCBjYWNo
ZUNvbnRyb2xDb250YWluc05vU3RvcmUoKSBjb25zdDsKICAgICBib29sIGNhY2hlQ29udHJvbENv
bnRhaW5zTXVzdFJldmFsaWRhdGUoKSBjb25zdDsKKyAgICBib29sIGhhc0NhY2hlVmFsaWRhdG9y
RmllbGRzKCkgY29uc3Q7CiAgICAgZG91YmxlIGNhY2hlQ29udHJvbE1heEFnZSgpIGNvbnN0Owog
ICAgIGRvdWJsZSBkYXRlKCkgY29uc3Q7CiAgICAgZG91YmxlIGFnZSgpIGNvbnN0OwpAQCAtMTI0
LDEzICsxMjUsMTkgQEAgcHVibGljOgogICAgIHN0YXRpYyBib29sIGNvbXBhcmUoY29uc3QgUmVz
b3VyY2VSZXNwb25zZSYsIGNvbnN0IFJlc291cmNlUmVzcG9uc2UmKTsKIAogcHJvdGVjdGVkOgor
ICAgIGVudW0gSW5pdExldmVsIHsKKyAgICAgICAgVW5pbml0aWFsaXplZCwKKyAgICAgICAgQ29t
bW9uRmllbGRzT25seSwKKyAgICAgICAgQWxsRmllbGRzCisgICAgfTsKKwogICAgIFJlc291cmNl
UmVzcG9uc2VCYXNlKCk7CiAgICAgUmVzb3VyY2VSZXNwb25zZUJhc2UoY29uc3QgS1VSTCYgdXJs
LCBjb25zdCBTdHJpbmcmIG1pbWVUeXBlLCBsb25nIGxvbmcgZXhwZWN0ZWRMZW5ndGgsIGNvbnN0
IFN0cmluZyYgdGV4dEVuY29kaW5nTmFtZSwgY29uc3QgU3RyaW5nJiBmaWxlbmFtZSk7CiAKLSAg
ICB2b2lkIGxhenlJbml0KCkgY29uc3Q7CisgICAgdm9pZCBsYXp5SW5pdChJbml0TGV2ZWwpIGNv
bnN0OwogCiAgICAgLy8gVGhlIFJlc291cmNlUmVzcG9uc2Ugc3ViY2xhc3MgbWF5ICJzaGFkb3ci
IHRoaXMgbWV0aG9kIHRvIGxhemlseSBpbml0aWFsaXplIHBsYXRmb3JtIHNwZWNpZmljIGZpZWxk
cwotICAgIHZvaWQgcGxhdGZvcm1MYXp5SW5pdCgpIHsgfQorICAgIHZvaWQgcGxhdGZvcm1MYXp5
SW5pdChJbml0TGV2ZWwpIHsgfQogCiAgICAgLy8gVGhlIFJlc291cmNlUmVzcG9uc2Ugc3ViY2xh
c3MgbWF5ICJzaGFkb3ciIHRoaXMgbWV0aG9kIHRvIGNvbXBhcmUgcGxhdGZvcm0gc3BlY2lmaWMg
ZmllbGRzCiAgICAgc3RhdGljIGJvb2wgcGxhdGZvcm1Db21wYXJlKGNvbnN0IFJlc291cmNlUmVz
cG9uc2UmLCBjb25zdCBSZXNvdXJjZVJlc3BvbnNlJikgeyByZXR1cm4gdHJ1ZTsgfQpJbmRleDog
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9jZi9SZXNvdXJjZVJlc3BvbnNlLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9jZi9SZXNvdXJjZVJl
c3BvbnNlLmgJKHJldmlzaW9uIDgyNzE3KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0
d29yay9jZi9SZXNvdXJjZVJlc3BvbnNlLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ0LDIxICs0NCwy
MSBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiBjbGFzcyBSZXNvdXJjZVJlc3BvbnNlIDogcHVibGlj
IFJlc291cmNlUmVzcG9uc2VCYXNlIHsKIHB1YmxpYzoKICAgICBSZXNvdXJjZVJlc3BvbnNlKCkK
LSAgICAgICAgOiBtX2lzVXBUb0RhdGUodHJ1ZSkKKyAgICAgICAgOiBtX2luaXRMZXZlbChBbGxG
aWVsZHMpCiAgICAgewogICAgIH0KIAogI2lmIFVTRShDRk5FVFdPUkspCiAgICAgUmVzb3VyY2VS
ZXNwb25zZShDRlVSTFJlc3BvbnNlUmVmIGNmUmVzcG9uc2UpCiAgICAgICAgIDogbV9jZlJlc3Bv
bnNlKGNmUmVzcG9uc2UpCi0gICAgICAgICwgbV9pc1VwVG9EYXRlKGZhbHNlKQorICAgICAgICAs
IG1faW5pdExldmVsKFVuaW5pdGlhbGl6ZWQpCiAgICAgewogICAgICAgICBtX2lzTnVsbCA9ICFj
ZlJlc3BvbnNlOwogICAgIH0KICNlbHNlCiAgICAgUmVzb3VyY2VSZXNwb25zZShOU1VSTFJlc3Bv
bnNlKiBuc1Jlc3BvbnNlKQogICAgICAgICA6IG1fbnNSZXNwb25zZShuc1Jlc3BvbnNlKQotICAg
ICAgICAsIG1faXNVcFRvRGF0ZShmYWxzZSkKKyAgICAgICAgLCBtX2luaXRMZXZlbChVbmluaXRp
YWxpemVkKQogICAgIHsKICAgICAgICAgbV9pc051bGwgPSAhbnNSZXNwb25zZTsKICAgICB9CkBA
IC02NiwxNSArNjYsMTUgQEAgcHVibGljOgogCiAgICAgUmVzb3VyY2VSZXNwb25zZShjb25zdCBL
VVJMJiB1cmwsIGNvbnN0IFN0cmluZyYgbWltZVR5cGUsIGxvbmcgbG9uZyBleHBlY3RlZExlbmd0
aCwgY29uc3QgU3RyaW5nJiB0ZXh0RW5jb2RpbmdOYW1lLCBjb25zdCBTdHJpbmcmIGZpbGVuYW1l
KQogICAgICAgICA6IFJlc291cmNlUmVzcG9uc2VCYXNlKHVybCwgbWltZVR5cGUsIGV4cGVjdGVk
TGVuZ3RoLCB0ZXh0RW5jb2RpbmdOYW1lLCBmaWxlbmFtZSkKLSAgICAgICAgLCBtX2lzVXBUb0Rh
dGUodHJ1ZSkKKyAgICAgICAgLCBtX2luaXRMZXZlbChBbGxGaWVsZHMpCiAgICAgewogICAgIH0K
IAogICAgIHVuc2lnbmVkIG1lbW9yeVVzYWdlKCkgY29uc3QKICAgICB7CiAgICAgICAgIC8vIEZJ
WE1FOiBGaW5kIHNvbWUgcHJvZ3JhbW1hdGljIGxpZ2h3ZWlnaHQgd2F5IHRvIGNhbGN1bGF0ZSBS
ZXNvdXJjZVJlc3BvbnNlIGFuZCBhc3NvY2lhdGVkIGNsYXNzZXMuCi0gICAgICAgIC8vIFRoaXMg
aXMgYSByb3VnaCBlc3RpbWF0ZSBvZiByZXNvdXJjZSBvdmVyaGVhZCBiYXNlZCBvbiBzdGF0cyBj
b2xsZWN0ZWQgZnJvbSB0aGUgc3RyZXNzIHRlc3QuCi0gICAgICAgIHJldHVybiAzMDcyOworICAg
ICAgICAvLyBUaGlzIGlzIGEgcm91Z2ggZXN0aW1hdGUgb2YgcmVzb3VyY2Ugb3ZlcmhlYWQgYmFz
ZWQgb24gc3RhdHMgY29sbGVjdGVkIGZyb20gbWVtb3J5IHVzYWdlIHRlc3RzLgorICAgICAgICBy
ZXR1cm4gMzgwMDsKICAgICAgICAgLyogIDEyODAgKiAyICsgICAgICAgICAgICAgICAgLy8gYXZl
cmFnZSBzaXplIG9mIFJlc291cmNlUmVzcG9uc2UuIERvdWJsZWQgdG8gYWNjb3VudCBmb3IgdGhl
IFdlYkNvcmUgY29weSBhbmQgdGhlIENGIGNvcHkuCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIC8vIE1vc3RseSBkdWUgdG8gdGhlIHNpemUgb2YgdGhlIGhhc2ggbWFwcywg
dGhlIEhlYWRlciBNYXAgc3RyaW5ncyBhbmQgdGhlIFVSTC4KICAgICAgICAgICAgIDI1NiAqIDIg
ICAgICAgICAgICAgICAgICAgLy8gT3ZlcmhlYWQgZnJvbSBSZXNvdXJjZVJlcXVlc3QsIGRvdWJs
ZWQgdG8gYWNjb3VudCBmb3IgV2ViQ29yZSBjb3B5IGFuZCBDRiBjb3B5LgpAQCAtOTEsNyArOTEs
NyBAQCBwdWJsaWM6CiBwcml2YXRlOgogICAgIGZyaWVuZCBjbGFzcyBSZXNvdXJjZVJlc3BvbnNl
QmFzZTsKIAotICAgIHZvaWQgcGxhdGZvcm1MYXp5SW5pdCgpOworICAgIHZvaWQgcGxhdGZvcm1M
YXp5SW5pdChJbml0TGV2ZWwpOwogICAgIFBhc3NPd25QdHI8Q3Jvc3NUaHJlYWRSZXNvdXJjZVJl
c3BvbnNlRGF0YT4gZG9QbGF0Zm9ybUNvcHlEYXRhKFBhc3NPd25QdHI8Q3Jvc3NUaHJlYWRSZXNv
dXJjZVJlc3BvbnNlRGF0YT4gZGF0YSkgY29uc3QgeyByZXR1cm4gZGF0YTsgfQogICAgIHZvaWQg
ZG9QbGF0Zm9ybUFkb3B0KFBhc3NPd25QdHI8Q3Jvc3NUaHJlYWRSZXNvdXJjZVJlc3BvbnNlRGF0
YT4pIHsgfQogCkBAIC0xMDIsNyArMTAyLDcgQEAgcHJpdmF0ZToKICNlbHNlCiAgICAgbXV0YWJs
ZSBSZXRhaW5QdHI8TlNVUkxSZXNwb25zZT4gbV9uc1Jlc3BvbnNlOwogI2VuZGlmCi0gICAgYm9v
bCBtX2lzVXBUb0RhdGU7CisgICAgSW5pdExldmVsIG1faW5pdExldmVsOwogfTsKIAogc3RydWN0
IENyb3NzVGhyZWFkUmVzb3VyY2VSZXNwb25zZURhdGEgOiBwdWJsaWMgQ3Jvc3NUaHJlYWRSZXNv
dXJjZVJlc3BvbnNlRGF0YUJhc2UgewpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0
d29yay9jZi9SZXNvdXJjZVJlc3BvbnNlQ0ZOZXQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY2YvUmVzb3VyY2VSZXNwb25zZUNGTmV0LmNwcAkocmV2
aXNpb24gODI3MTcpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2NmL1Jlc291
cmNlUmVzcG9uc2VDRk5ldC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQyLDYgKzQyLDExIEBAIHVz
aW5nIG5hbWVzcGFjZSBzdGQ7CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAorc3RhdGljIENGU3Ry
aW5nUmVmIGNvbnN0IGNvbW1vbkhlYWRlckZpZWxkc1tdID0geworICAgIENGU1RSKCJBZ2UiKSwg
Q0ZTVFIoIkNhY2hlLUNvbnRyb2wiKSwgQ0ZTVFIoIkRhdGUiKSwgQ0ZTVFIoIkV0YWciKSwgQ0ZT
VFIoIkV4cGlyZXMiKSwgQ0ZTVFIoIkxhc3QtTW9kaWZpZWQiKSwgQ0ZTVFIoIlByYWdtYSIpCit9
Oworc3RhdGljIGNvbnN0IGludCBudW1Db21tb25IZWFkZXJGaWVsZHMgPSBzaXplb2YoY29tbW9u
SGVhZGVyRmllbGRzKSAvIHNpemVvZihDRlN0cmluZ1JlZik7CisKIENGVVJMUmVzcG9uc2VSZWYg
UmVzb3VyY2VSZXNwb25zZTo6Y2ZVUkxSZXNwb25zZSgpIGNvbnN0CiB7CiAgICAgaWYgKCFtX2Nm
UmVzcG9uc2UgJiYgIW1faXNOdWxsKSB7CkBAIC03MCw1MiArNzUsNjYgQEAgc3RhdGljIHRpbWVf
dCB0b1RpbWVUKENGQWJzb2x1dGVUaW1lIHRpbQogICAgIHJldHVybiBtaW4obWF4KG1pblRpbWVB
c0RvdWJsZSwgdGltZSArIGtDRkFic29sdXRlVGltZUludGVydmFsU2luY2UxOTcwKSwgbWF4VGlt
ZUFzRG91YmxlKTsKIH0KIAotdm9pZCBSZXNvdXJjZVJlc3BvbnNlOjpwbGF0Zm9ybUxhenlJbml0
KCkKK3ZvaWQgUmVzb3VyY2VSZXNwb25zZTo6cGxhdGZvcm1MYXp5SW5pdChJbml0TGV2ZWwgaW5p
dExldmVsKQogewotICAgIGlmIChtX2lzVXBUb0RhdGUpCisgICAgaWYgKG1faW5pdExldmVsID4g
aW5pdExldmVsKQogICAgICAgICByZXR1cm47Ci0gICAgbV9pc1VwVG9EYXRlID0gdHJ1ZTsKIAog
ICAgIGlmIChtX2lzTnVsbCkgewogICAgICAgICBBU1NFUlQoIW1fY2ZSZXNwb25zZS5nZXQoKSk7
CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICAvLyBGSVhNRTogV2UgbWF5IG5lZWQgdG8g
ZG8gTUlNRSB0eXBlIHNuaWZmaW5nIGhlcmUgKHVubGVzcyB0aGF0IGlzIGRvbmUgaW4gQ0ZVUkxS
ZXNwb25zZUdldE1JTUVUeXBlKS4KKyAgICBpZiAobV9pbml0TGV2ZWwgPCBDb21tb25GaWVsZHNP
bmx5ICYmIGluaXRMZXZlbCA+PSBDb21tb25GaWVsZHNPbmx5KSB7CisgICAgICAgIG1fdXJsID0g
Q0ZVUkxSZXNwb25zZUdldFVSTChtX2NmUmVzcG9uc2UuZ2V0KCkpOworICAgICAgICBtX21pbWVU
eXBlID0gQ0ZVUkxSZXNwb25zZUdldE1JTUVUeXBlKG1fY2ZSZXNwb25zZS5nZXQoKSk7CisgICAg
ICAgIG1fZXhwZWN0ZWRDb250ZW50TGVuZ3RoID0gQ0ZVUkxSZXNwb25zZUdldEV4cGVjdGVkQ29u
dGVudExlbmd0aChtX2NmUmVzcG9uc2UuZ2V0KCkpOworICAgICAgICBtX3RleHRFbmNvZGluZ05h
bWUgPSBDRlVSTFJlc3BvbnNlR2V0VGV4dEVuY29kaW5nTmFtZShtX2NmUmVzcG9uc2UuZ2V0KCkp
OworCisgICAgICAgIC8vIFdvcmthcm91bmQgZm9yIDxyZGFyOi8vcHJvYmxlbS84NzU3MDg4Piwg
Y2FuIGJlIHJlbW92ZWQgb25jZSB0aGF0IGlzIGZpeGVkLgorICAgICAgICB1bnNpZ25lZCB0ZXh0
RW5jb2RpbmdOYW1lTGVuZ3RoID0gbV90ZXh0RW5jb2RpbmdOYW1lLmxlbmd0aCgpOworICAgICAg
ICBpZiAodGV4dEVuY29kaW5nTmFtZUxlbmd0aCA+PSAyICYmIG1fdGV4dEVuY29kaW5nTmFtZVsw
VV0gPT0gJyInICYmIG1fdGV4dEVuY29kaW5nTmFtZVt0ZXh0RW5jb2RpbmdOYW1lTGVuZ3RoIC0g
MV0gPT0gJyInKQorICAgICAgICAgICAgbV90ZXh0RW5jb2RpbmdOYW1lID0gbV90ZXh0RW5jb2Rp
bmdOYW1lLnN1YnN0cmluZygxLCB0ZXh0RW5jb2RpbmdOYW1lTGVuZ3RoIC0gMik7CisKKyAgICAg
ICAgbV9sYXN0TW9kaWZpZWREYXRlID0gdG9UaW1lVChDRlVSTFJlc3BvbnNlR2V0TGFzdE1vZGlm
aWVkRGF0ZShtX2NmUmVzcG9uc2UuZ2V0KCkpKTsKKworICAgICAgICBSZXRhaW5QdHI8Q0ZTdHJp
bmdSZWY+IHN1Z2dlc3RlZEZpbGVuYW1lKEFkb3B0Q0YsIENGVVJMUmVzcG9uc2VDb3B5U3VnZ2Vz
dGVkRmlsZW5hbWUobV9jZlJlc3BvbnNlLmdldCgpKSk7CisgICAgICAgIG1fc3VnZ2VzdGVkRmls
ZW5hbWUgPSBzdWdnZXN0ZWRGaWxlbmFtZS5nZXQoKTsKKworICAgICAgICBDRkhUVFBNZXNzYWdl
UmVmIGh0dHBSZXNwb25zZSA9IENGVVJMUmVzcG9uc2VHZXRIVFRQUmVzcG9uc2UobV9jZlJlc3Bv
bnNlLmdldCgpKTsKKyAgICAgICAgaWYgKGh0dHBSZXNwb25zZSkgeworICAgICAgICAgICAgbV9o
dHRwU3RhdHVzQ29kZSA9IENGSFRUUE1lc3NhZ2VHZXRSZXNwb25zZVN0YXR1c0NvZGUoaHR0cFJl
c3BvbnNlKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgUmV0YWluUHRyPENGRGljdGlvbmFy
eVJlZj4gaGVhZGVycyhBZG9wdENGLCBDRkhUVFBNZXNzYWdlQ29weUFsbEhlYWRlckZpZWxkcyho
dHRwUmVzcG9uc2UpKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7
IGkgPCBudW1Db21tb25IZWFkZXJGaWVsZHM7IGkrKykgeworICAgICAgICAgICAgICAgIENGU3Ry
aW5nUmVmIHZhbHVlOworICAgICAgICAgICAgICAgIGlmIChDRkRpY3Rpb25hcnlHZXRWYWx1ZUlm
UHJlc2VudChoZWFkZXJzLmdldCgpLCBjb21tb25IZWFkZXJGaWVsZHNbaV0sIChjb25zdCB2b2lk
ICoqKSZ2YWx1ZSkpCisgICAgICAgICAgICAgICAgICAgIG1faHR0cEhlYWRlckZpZWxkcy5zZXQo
Y29tbW9uSGVhZGVyRmllbGRzW2ldLCB2YWx1ZSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0g
ZWxzZQorICAgICAgICAgICAgbV9odHRwU3RhdHVzQ29kZSA9IDA7CisgICAgfQogCi0gICAgbV91
cmwgPSBDRlVSTFJlc3BvbnNlR2V0VVJMKG1fY2ZSZXNwb25zZS5nZXQoKSk7Ci0gICAgbV9taW1l
VHlwZSA9IENGVVJMUmVzcG9uc2VHZXRNSU1FVHlwZShtX2NmUmVzcG9uc2UuZ2V0KCkpOwotICAg
IG1fZXhwZWN0ZWRDb250ZW50TGVuZ3RoID0gQ0ZVUkxSZXNwb25zZUdldEV4cGVjdGVkQ29udGVu
dExlbmd0aChtX2NmUmVzcG9uc2UuZ2V0KCkpOwotICAgIG1fdGV4dEVuY29kaW5nTmFtZSA9IENG
VVJMUmVzcG9uc2VHZXRUZXh0RW5jb2RpbmdOYW1lKG1fY2ZSZXNwb25zZS5nZXQoKSk7Ci0KLSAg
ICAvLyBXb3JrYXJvdW5kIGZvciA8cmRhcjovL3Byb2JsZW0vODc1NzA4OD4sIGNhbiBiZSByZW1v
dmVkIG9uY2UgdGhhdCBpcyBmaXhlZC4KLSAgICB1bnNpZ25lZCB0ZXh0RW5jb2RpbmdOYW1lTGVu
Z3RoID0gbV90ZXh0RW5jb2RpbmdOYW1lLmxlbmd0aCgpOwotICAgIGlmICh0ZXh0RW5jb2RpbmdO
YW1lTGVuZ3RoID49IDIgJiYgbV90ZXh0RW5jb2RpbmdOYW1lWzBVXSA9PSAnIicgJiYgbV90ZXh0
RW5jb2RpbmdOYW1lW3RleHRFbmNvZGluZ05hbWVMZW5ndGggLSAxXSA9PSAnIicpCi0gICAgICAg
IG1fdGV4dEVuY29kaW5nTmFtZSA9IG1fdGV4dEVuY29kaW5nTmFtZS5zdWJzdHJpbmcoMSwgdGV4
dEVuY29kaW5nTmFtZUxlbmd0aCAtIDIpOwotCi0gICAgbV9sYXN0TW9kaWZpZWREYXRlID0gdG9U
aW1lVChDRlVSTFJlc3BvbnNlR2V0TGFzdE1vZGlmaWVkRGF0ZShtX2NmUmVzcG9uc2UuZ2V0KCkp
KTsKLQotICAgIFJldGFpblB0cjxDRlN0cmluZ1JlZj4gc3VnZ2VzdGVkRmlsZW5hbWUoQWRvcHRD
RiwgQ0ZVUkxSZXNwb25zZUNvcHlTdWdnZXN0ZWRGaWxlbmFtZShtX2NmUmVzcG9uc2UuZ2V0KCkp
KTsKLSAgICBtX3N1Z2dlc3RlZEZpbGVuYW1lID0gc3VnZ2VzdGVkRmlsZW5hbWUuZ2V0KCk7Ci0K
LSAgICBDRkhUVFBNZXNzYWdlUmVmIGh0dHBSZXNwb25zZSA9IENGVVJMUmVzcG9uc2VHZXRIVFRQ
UmVzcG9uc2UobV9jZlJlc3BvbnNlLmdldCgpKTsKLSAgICBpZiAoaHR0cFJlc3BvbnNlKSB7Ci0g
ICAgICAgIG1faHR0cFN0YXR1c0NvZGUgPSBDRkhUVFBNZXNzYWdlR2V0UmVzcG9uc2VTdGF0dXND
b2RlKGh0dHBSZXNwb25zZSk7Ci0KLSAgICAgICAgUmV0YWluUHRyPENGU3RyaW5nUmVmPiBzdGF0
dXNMaW5lKEFkb3B0Q0YsIENGSFRUUE1lc3NhZ2VDb3B5UmVzcG9uc2VTdGF0dXNMaW5lKGh0dHBS
ZXNwb25zZSkpOwotICAgICAgICBtX2h0dHBTdGF0dXNUZXh0ID0gZXh0cmFjdFJlYXNvblBocmFz
ZUZyb21IVFRQU3RhdHVzTGluZShzdGF0dXNMaW5lLmdldCgpKTsKLQotICAgICAgICBSZXRhaW5Q
dHI8Q0ZEaWN0aW9uYXJ5UmVmPiBoZWFkZXJzKEFkb3B0Q0YsIENGSFRUUE1lc3NhZ2VDb3B5QWxs
SGVhZGVyRmllbGRzKGh0dHBSZXNwb25zZSkpOwotICAgICAgICBDRkluZGV4IGhlYWRlckNvdW50
ID0gQ0ZEaWN0aW9uYXJ5R2V0Q291bnQoaGVhZGVycy5nZXQoKSk7Ci0gICAgICAgIFZlY3Rvcjxj
b25zdCB2b2lkKiwgMTI4PiBrZXlzKGhlYWRlckNvdW50KTsKLSAgICAgICAgVmVjdG9yPGNvbnN0
IHZvaWQqLCAxMjg+IHZhbHVlcyhoZWFkZXJDb3VudCk7Ci0gICAgICAgIENGRGljdGlvbmFyeUdl
dEtleXNBbmRWYWx1ZXMoaGVhZGVycy5nZXQoKSwga2V5cy5kYXRhKCksIHZhbHVlcy5kYXRhKCkp
OwotICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGhlYWRlckNvdW50OyArK2kpCi0gICAgICAg
ICAgICBtX2h0dHBIZWFkZXJGaWVsZHMuc2V0KChDRlN0cmluZ1JlZilrZXlzW2ldLCAoQ0ZTdHJp
bmdSZWYpdmFsdWVzW2ldKTsKLSAgICB9IGVsc2UKLSAgICAgICAgbV9odHRwU3RhdHVzQ29kZSA9
IDA7Ci19CisgICAgaWYgKG1faW5pdExldmVsIDwgQWxsRmllbGRzICYmIGluaXRMZXZlbCA+PSBB
bGxGaWVsZHMpIHsKKyAgICAgICAgQ0ZIVFRQTWVzc2FnZVJlZiBodHRwUmVzcG9uc2UgPSBDRlVS
TFJlc3BvbnNlR2V0SFRUUFJlc3BvbnNlKG1fY2ZSZXNwb25zZS5nZXQoKSk7CisgICAgICAgIGlm
IChodHRwUmVzcG9uc2UpIHsKKyAgICAgICAgICAgIFJldGFpblB0cjxDRlN0cmluZ1JlZj4gc3Rh
dHVzTGluZShBZG9wdENGLCBDRkhUVFBNZXNzYWdlQ29weVJlc3BvbnNlU3RhdHVzTGluZShodHRw
UmVzcG9uc2UpKTsKKyAgICAgICAgICAgIG1faHR0cFN0YXR1c1RleHQgPSBleHRyYWN0UmVhc29u
UGhyYXNlRnJvbUhUVFBTdGF0dXNMaW5lKHN0YXR1c0xpbmUuZ2V0KCkpOworCisgICAgICAgICAg
ICBSZXRhaW5QdHI8Q0ZEaWN0aW9uYXJ5UmVmPiBoZWFkZXJzKEFkb3B0Q0YsIENGSFRUUE1lc3Nh
Z2VDb3B5QWxsSGVhZGVyRmllbGRzKGh0dHBSZXNwb25zZSkpOworICAgICAgICAgICAgQ0ZJbmRl
eCBoZWFkZXJDb3VudCA9IENGRGljdGlvbmFyeUdldENvdW50KGhlYWRlcnMuZ2V0KCkpOworICAg
ICAgICAgICAgVmVjdG9yPGNvbnN0IHZvaWQqLCAxMjg+IGtleXMoaGVhZGVyQ291bnQpOworICAg
ICAgICAgICAgVmVjdG9yPGNvbnN0IHZvaWQqLCAxMjg+IHZhbHVlcyhoZWFkZXJDb3VudCk7Cisg
ICAgICAgICAgICBDRkRpY3Rpb25hcnlHZXRLZXlzQW5kVmFsdWVzKGhlYWRlcnMuZ2V0KCksIGtl
eXMuZGF0YSgpLCB2YWx1ZXMuZGF0YSgpKTsKKyAgICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBp
IDwgaGVhZGVyQ291bnQ7ICsraSkKKyAgICAgICAgICAgICAgICBtX2h0dHBIZWFkZXJGaWVsZHMu
c2V0KChDRlN0cmluZ1JlZilrZXlzW2ldLCAoQ0ZTdHJpbmdSZWYpdmFsdWVzW2ldKTsKKyAgICAg
ICAgfQorICAgIH0KIAorICAgIG1faW5pdExldmVsID0gaW5pdExldmVsOworfQorICAgIAogYm9v
bCBSZXNvdXJjZVJlc3BvbnNlOjpwbGF0Zm9ybUNvbXBhcmUoY29uc3QgUmVzb3VyY2VSZXNwb25z
ZSYgYSwgY29uc3QgUmVzb3VyY2VSZXNwb25zZSYgYikKIHsKICAgICByZXR1cm4gQ0ZFcXVhbChh
LmNmVVJMUmVzcG9uc2UoKSwgYi5jZlVSTFJlc3BvbnNlKCkpOwpJbmRleDogU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vbmV0d29yay9tYWMvUmVzb3VyY2VSZXNwb25zZU1hYy5tbQo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL21hYy9SZXNvdXJjZVJlc3BvbnNl
TWFjLm1tCShyZXZpc2lvbiA4MjcxNykKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdv
cmsvbWFjL1Jlc291cmNlUmVzcG9uc2VNYWMubW0JKHdvcmtpbmcgY29weSkKQEAgLTM0LDYgKzM0
LDcgQEAKICNpbXBvcnQgPEZvdW5kYXRpb24vRm91bmRhdGlvbi5oPgogI2ltcG9ydCA8d3RmL1N0
ZExpYkV4dHJhcy5oPgogI2ltcG9ydCA8bGltaXRzPgorI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJp
bmcuaD4KIAogQGludGVyZmFjZSBOU1VSTFJlc3BvbnNlIChGb3VuZGF0aW9uU2VjcmV0c1dlYkNv
cmVLbm93c0Fib3V0KQogLSAoTlNUaW1lSW50ZXJ2YWwpX2NhbGN1bGF0ZWRFeHBpcmF0aW9uOwpA
QCAtNDUsNiArNDYsMTEgQEAgdHlwZWRlZiBpbnQgTlNJbnRlZ2VyOwogCiBuYW1lc3BhY2UgV2Vi
Q29yZSB7CiAKK3N0YXRpYyBOU1N0cmluZyogY29uc3QgY29tbW9uSGVhZGVyRmllbGRzW10gPSB7
CisgICAgQCJBZ2UiLCBAIkNhY2hlLUNvbnRyb2wiLCBAIkRhdGUiLCBAIkV0YWciLCBAIkV4cGly
ZXMiLCBAIkxhc3QtTW9kaWZpZWQiLCBAIlByYWdtYSIKK307CitzdGF0aWMgY29uc3QgaW50IG51
bUNvbW1vbkhlYWRlckZpZWxkcyA9IHNpemVvZihjb21tb25IZWFkZXJGaWVsZHMpIC8gc2l6ZW9m
KEF0b21pY1N0cmluZyopOworCiBOU1VSTFJlc3BvbnNlICpSZXNvdXJjZVJlc3BvbnNlOjpuc1VS
TFJlc3BvbnNlKCkgY29uc3QKIHsKICAgICBpZiAoIW1fbnNSZXNwb25zZSAmJiAhbV9pc051bGwp
IHsKQEAgLTYxLDQ4ICs2Nyw3MiBAQCBOU1VSTFJlc3BvbnNlICpSZXNvdXJjZVJlc3BvbnNlOjpu
c1VSTFJlCiAgICAgcmV0dXJuIG1fbnNSZXNwb25zZS5nZXQoKTsKIH0KIAotdm9pZCBSZXNvdXJj
ZVJlc3BvbnNlOjpwbGF0Zm9ybUxhenlJbml0KCkKK3ZvaWQgUmVzb3VyY2VSZXNwb25zZTo6cGxh
dGZvcm1MYXp5SW5pdChJbml0TGV2ZWwgaW5pdExldmVsKQogewotICAgIGlmIChtX2lzVXBUb0Rh
dGUpCisgICAgaWYgKG1faW5pdExldmVsID49IGluaXRMZXZlbCkKICAgICAgICAgcmV0dXJuOwot
ICAgIG1faXNVcFRvRGF0ZSA9IHRydWU7CiAKICAgICBpZiAobV9pc051bGwpIHsKICAgICAgICAg
QVNTRVJUKCFtX25zUmVzcG9uc2UpOwogICAgICAgICByZXR1cm47CiAgICAgfQotICAgIAotICAg
IG1fdXJsID0gW21fbnNSZXNwb25zZS5nZXQoKSBVUkxdOwotICAgIG1fbWltZVR5cGUgPSBbbV9u
c1Jlc3BvbnNlLmdldCgpIE1JTUVUeXBlXTsKLSAgICBtX2V4cGVjdGVkQ29udGVudExlbmd0aCA9
IFttX25zUmVzcG9uc2UuZ2V0KCkgZXhwZWN0ZWRDb250ZW50TGVuZ3RoXTsKLSAgICBtX3RleHRF
bmNvZGluZ05hbWUgPSBbbV9uc1Jlc3BvbnNlLmdldCgpIHRleHRFbmNvZGluZ05hbWVdOwotCi0g
ICAgLy8gV29ya2Fyb3VuZCBmb3IgPHJkYXI6Ly9wcm9ibGVtLzg3NTcwODg+LCBjYW4gYmUgcmVt
b3ZlZCBvbmNlIHRoYXQgaXMgZml4ZWQuCi0gICAgdW5zaWduZWQgdGV4dEVuY29kaW5nTmFtZUxl
bmd0aCA9IG1fdGV4dEVuY29kaW5nTmFtZS5sZW5ndGgoKTsKLSAgICBpZiAodGV4dEVuY29kaW5n
TmFtZUxlbmd0aCA+PSAyICYmIG1fdGV4dEVuY29kaW5nTmFtZVswVV0gPT0gJyInICYmIG1fdGV4
dEVuY29kaW5nTmFtZVt0ZXh0RW5jb2RpbmdOYW1lTGVuZ3RoIC0gMV0gPT0gJyInKQotICAgICAg
ICBtX3RleHRFbmNvZGluZ05hbWUgPSBtX3RleHRFbmNvZGluZ05hbWUuc3Vic3RyaW5nKDEsIHRl
eHRFbmNvZGluZ05hbWVMZW5ndGggLSAyKTsKIAotICAgIG1fc3VnZ2VzdGVkRmlsZW5hbWUgPSBb
bV9uc1Jlc3BvbnNlLmdldCgpIHN1Z2dlc3RlZEZpbGVuYW1lXTsKLSAgICAKLSAgICBpZiAoW21f
bnNSZXNwb25zZS5nZXQoKSBpc0tpbmRPZkNsYXNzOltOU0hUVFBVUkxSZXNwb25zZSBjbGFzc11d
KSB7Ci0gICAgICAgIE5TSFRUUFVSTFJlc3BvbnNlICpodHRwUmVzcG9uc2UgPSAoTlNIVFRQVVJM
UmVzcG9uc2UgKiltX25zUmVzcG9uc2UuZ2V0KCk7CisgICAgaWYgKG1faW5pdExldmVsIDwgQ29t
bW9uRmllbGRzT25seSAmJiBpbml0TGV2ZWwgPj0gQ29tbW9uRmllbGRzT25seSkgeworICAgICAg
ICBOU0F1dG9yZWxlYXNlUG9vbCogcG9vbCA9IFtbTlNBdXRvcmVsZWFzZVBvb2wgYWxsb2NdIGlu
aXRdOworCisgICAgICAgIG1faHR0cEhlYWRlckZpZWxkcy5jbGVhcigpOworICAgICAgICBtX3Vy
bCA9IFttX25zUmVzcG9uc2UuZ2V0KCkgVVJMXTsKKyAgICAgICAgbV9taW1lVHlwZSA9IFttX25z
UmVzcG9uc2UuZ2V0KCkgTUlNRVR5cGVdOworICAgICAgICBtX2V4cGVjdGVkQ29udGVudExlbmd0
aCA9IFttX25zUmVzcG9uc2UuZ2V0KCkgZXhwZWN0ZWRDb250ZW50TGVuZ3RoXTsKKyAgICAgICAg
bV90ZXh0RW5jb2RpbmdOYW1lID0gW21fbnNSZXNwb25zZS5nZXQoKSB0ZXh0RW5jb2RpbmdOYW1l
XTsKKworICAgICAgICAvLyBXb3JrYXJvdW5kIGZvciA8cmRhcjovL3Byb2JsZW0vODc1NzA4OD4s
IGNhbiBiZSByZW1vdmVkIG9uY2UgdGhhdCBpcyBmaXhlZC4KKyAgICAgICAgdW5zaWduZWQgdGV4
dEVuY29kaW5nTmFtZUxlbmd0aCA9IG1fdGV4dEVuY29kaW5nTmFtZS5sZW5ndGgoKTsKKyAgICAg
ICAgaWYgKHRleHRFbmNvZGluZ05hbWVMZW5ndGggPj0gMiAmJiBtX3RleHRFbmNvZGluZ05hbWVb
MFVdID09ICciJyAmJiBtX3RleHRFbmNvZGluZ05hbWVbdGV4dEVuY29kaW5nTmFtZUxlbmd0aCAt
IDFdID09ICciJykKKyAgICAgICAgICAgIG1fdGV4dEVuY29kaW5nTmFtZSA9IG1fdGV4dEVuY29k
aW5nTmFtZS5zdWJzdHJpbmcoMSwgdGV4dEVuY29kaW5nTmFtZUxlbmd0aCAtIDIpOworCisgICAg
ICAgIG1fc3VnZ2VzdGVkRmlsZW5hbWUgPSBbbV9uc1Jlc3BvbnNlLmdldCgpIHN1Z2dlc3RlZEZp
bGVuYW1lXTsKKworICAgICAgICBpZiAoW21fbnNSZXNwb25zZS5nZXQoKSBpc0tpbmRPZkNsYXNz
OltOU0hUVFBVUkxSZXNwb25zZSBjbGFzc11dKSB7CisgICAgICAgICAgICBOU0hUVFBVUkxSZXNw
b25zZSAqaHR0cFJlc3BvbnNlID0gKE5TSFRUUFVSTFJlc3BvbnNlICopbV9uc1Jlc3BvbnNlLmdl
dCgpOworCisgICAgICAgICAgICBtX2h0dHBTdGF0dXNDb2RlID0gW2h0dHBSZXNwb25zZSBzdGF0
dXNDb2RlXTsKKworICAgICAgICAgICAgTlNEaWN0aW9uYXJ5ICpoZWFkZXJzID0gW2h0dHBSZXNw
b25zZSBhbGxIZWFkZXJGaWVsZHNdOworICAgICAgICAgICAgCisgICAgICAgICAgICBmb3IgKGlu
dCBpID0gMDsgaSA8IG51bUNvbW1vbkhlYWRlckZpZWxkczsgaSsrKSB7CisgICAgICAgICAgICAg
ICAgaWYgKE5TU3RyaW5nKiBoZWFkZXJWYWx1ZSA9IFtoZWFkZXJzIG9iamVjdEZvcktleTpjb21t
b25IZWFkZXJGaWVsZHNbaV1dKQorICAgICAgICAgICAgICAgICAgICBtX2h0dHBIZWFkZXJGaWVs
ZHMuc2V0KFtjb21tb25IZWFkZXJGaWVsZHNbaV0gVVRGOFN0cmluZ10sIGhlYWRlclZhbHVlKTsK
KyAgICAgICAgICAgIH0KKyAgICAgICAgfSBlbHNlCisgICAgICAgICAgICBtX2h0dHBTdGF0dXND
b2RlID0gMDsKICAgICAgICAgCi0gICAgICAgIG1faHR0cFN0YXR1c0NvZGUgPSBbaHR0cFJlc3Bv
bnNlIHN0YXR1c0NvZGVdOworICAgICAgICBbcG9vbCBkcmFpbl07CisgICAgfQorCisgICAgaWYg
KG1faW5pdExldmVsIDwgQWxsRmllbGRzICYmIGluaXRMZXZlbCA+PSBBbGxGaWVsZHMgJiYgW21f
bnNSZXNwb25zZS5nZXQoKSBpc0tpbmRPZkNsYXNzOltOU0hUVFBVUkxSZXNwb25zZSBjbGFzc11d
KSB7CisgICAgICAgIE5TQXV0b3JlbGVhc2VQb29sKiBwb29sID0gW1tOU0F1dG9yZWxlYXNlUG9v
bCBhbGxvY10gaW5pdF07CisKKyAgICAgICAgTlNIVFRQVVJMUmVzcG9uc2UgKmh0dHBSZXNwb25z
ZSA9IChOU0hUVFBVUkxSZXNwb25zZSAqKW1fbnNSZXNwb25zZS5nZXQoKTsKIAogICAgICAgICBS
ZXRhaW5QdHI8TlNTdHJpbmc+IGh0dHBTdGF0dXNMaW5lKEFkb3B0TlMsIHdrQ29weU5TVVJMUmVz
cG9uc2VTdGF0dXNMaW5lKG1fbnNSZXNwb25zZS5nZXQoKSkpOwogICAgICAgICBpZiAoaHR0cFN0
YXR1c0xpbmUpCiAgICAgICAgICAgICBtX2h0dHBTdGF0dXNUZXh0ID0gZXh0cmFjdFJlYXNvblBo
cmFzZUZyb21IVFRQU3RhdHVzTGluZShodHRwU3RhdHVzTGluZS5nZXQoKSk7CiAgICAgICAgIGVs
c2UKICAgICAgICAgICAgIG1faHR0cFN0YXR1c1RleHQgPSAiT0siOwotICAgICAgICAKKwogICAg
ICAgICBOU0RpY3Rpb25hcnkgKmhlYWRlcnMgPSBbaHR0cFJlc3BvbnNlIGFsbEhlYWRlckZpZWxk
c107CiAgICAgICAgIE5TRW51bWVyYXRvciAqZSA9IFtoZWFkZXJzIGtleUVudW1lcmF0b3JdOwog
ICAgICAgICB3aGlsZSAoTlNTdHJpbmcgKm5hbWUgPSBbZSBuZXh0T2JqZWN0XSkKICAgICAgICAg
ICAgIG1faHR0cEhlYWRlckZpZWxkcy5zZXQobmFtZSwgW2hlYWRlcnMgb2JqZWN0Rm9yS2V5Om5h
bWVdKTsKLSAgICB9IGVsc2UKLSAgICAgICAgbV9odHRwU3RhdHVzQ29kZSA9IDA7CisgICAgICAg
IAorICAgICAgICBbcG9vbCBkcmFpbl07CisgICAgfQorCisgICAgbV9pbml0TGV2ZWwgPSBpbml0
TGV2ZWw7CiB9CiAKKyAgICAKIGJvb2wgUmVzb3VyY2VSZXNwb25zZTo6cGxhdGZvcm1Db21wYXJl
KGNvbnN0IFJlc291cmNlUmVzcG9uc2UmIGEsIGNvbnN0IFJlc291cmNlUmVzcG9uc2UmIGIpCiB7
CiAgICAgcmV0dXJuIGEubnNVUkxSZXNwb25zZSgpID09IGIubnNVUkxSZXNwb25zZSgpOwo=
</data>
<flag name="commit-queue"
          id="80414"
          type_id="3"
          status="-"
          setter="commit-queue"
    />
          </attachment>
      

    </bug>

</bugzilla>