<?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>49355</bug_id>
          
          <creation_ts>2010-11-10 16:58:15 -0800</creation_ts>
          <short_desc>WebGLRenderingContext needs to zero textures and renderbuffers</short_desc>
          <delta_ts>2010-12-21 18:03:42 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>WebGL</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>PC</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>44064</dependson>
    
    <dependson>49460</dependson>
    
    <dependson>49712</dependson>
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Chris Marrin">cmarrin</reporter>
          <assigned_to name="Zhenyao Mo">zmo</assigned_to>
          <cc>enne</cc>
    
    <cc>eric</cc>
    
    <cc>jamesr</cc>
    
    <cc>kbr</cc>
    
    <cc>levin</cc>
    
    <cc>senorblanco</cc>
    
    <cc>zmo</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>307639</commentid>
    <comment_count>0</comment_count>
    <who name="Chris Marrin">cmarrin</who>
    <bug_when>2010-11-10 16:58:15 -0800</bug_when>
    <thetext>WebGL must not have uninitialized data in any buffer. Currently if you pass 0  for the pixel pointer, the texture will be uninitialized.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>307966</commentid>
    <comment_count>1</comment_count>
    <who name="Zhenyao Mo">zmo</who>
    <bug_when>2010-11-11 09:33:14 -0800</bug_when>
    <thetext>I think should do it in WebGLRenderingContext::texImage2DBase(), because 1) this will take care of all ports, 2) framebuffer initialization also happens at WebGLRenderingContext level.

If you don&apos;t mind, I can take this bug as we need to remove the duplicated code in Chromium.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>308056</commentid>
    <comment_count>2</comment_count>
    <who name="Kenneth Russell">kbr</who>
    <bug_when>2010-11-11 12:30:03 -0800</bug_when>
    <thetext>Agreed -- Chris and I discussed this over IRC and we agree that the texture and renderbuffer initialization should be done at levels above GraphicsContext3D, but only if the GC3D implementation doesn&apos;t already do it (need to add another method like clearsTexturesAndRenderbuffers()).

Reassigning and changing synopsis.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>310015</commentid>
    <comment_count>3</comment_count>
      <attachid>74056</attachid>
    <who name="Zhenyao Mo">zmo</who>
    <bug_when>2010-11-16 16:30:25 -0800</bug_when>
    <thetext>Created attachment 74056
patch

Test is in sync with khronos.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>310017</commentid>
    <comment_count>4</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2010-11-16 16:34:08 -0800</bug_when>
    <thetext>Attachment 74056 did not build on mac:
Build output: http://queues.webkit.org/results/6153001</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>310025</commentid>
    <comment_count>5</comment_count>
      <attachid>74058</attachid>
    <who name="Zhenyao Mo">zmo</who>
    <bug_when>2010-11-16 16:39:23 -0800</bug_when>
    <thetext>Created attachment 74058
revised patch: fix compile issue for webkit</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>310383</commentid>
    <comment_count>6</comment_count>
      <attachid>74058</attachid>
    <who name="Kenneth Russell">kbr</who>
    <bug_when>2010-11-17 10:54:26 -0800</bug_when>
    <thetext>Comment on attachment 74058
revised patch: fix compile issue for webkit

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

This mostly looks good. Minor code and formatting issues.

&gt; WebCore/html/canvas/WebGLRenderingContext.cpp:2512
&gt; +        zero.set(new unsigned char[size]);

This should be &quot;zero = adoptArrayPtr(new unsigned char[size]);&quot;.

&gt; LayoutTests/fast/canvas/webgl/uninitialized-test.html:75
&gt; +if (data.length != expectedDataLength) {
&gt; +    testFailed(&quot;expected data length &quot; + expectedDataLength + &quot; but got &quot; + data.length + &quot; instead.&quot;);
&gt; +} else {
&gt; +    var k = 0;
&gt; +    for (var i = 0; i &lt; data.length; ++i) {
&gt; +	if (data[i] != 0) {
&gt; +	    k++;
&gt; +	}
&gt; +    }
&gt; +
&gt; +    if (k) {
&gt; +	testFailed(&quot;Found &quot; + k + &quot; non-zero bytes&quot;);
&gt; +    } else {
&gt; +	testPassed(&quot;All data initialized&quot;);
&gt; +    }
&gt; +}

Indentation is very messed up.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>310417</commentid>
    <comment_count>7</comment_count>
      <attachid>74140</attachid>
    <who name="Zhenyao Mo">zmo</who>
    <bug_when>2010-11-17 11:46:46 -0800</bug_when>
    <thetext>Created attachment 74140
revised patch: responding to kbr&apos;s review

Fixed the test indent issue on khronos and synced with it.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>310418</commentid>
    <comment_count>8</comment_count>
      <attachid>74140</attachid>
    <who name="Kenneth Russell">kbr</who>
    <bug_when>2010-11-17 11:49:14 -0800</bug_when>
    <thetext>Comment on attachment 74140
revised patch: responding to kbr&apos;s review

Looks good.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>310422</commentid>
    <comment_count>9</comment_count>
    <who name="Zhenyao Mo">zmo</who>
    <bug_when>2010-11-17 11:55:35 -0800</bug_when>
    <thetext>Committed r72228: &lt;http://trac.webkit.org/changeset/72228&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>310692</commentid>
    <comment_count>10</comment_count>
    <who name="David Levin">levin</who>
    <bug_when>2010-11-17 20:55:33 -0800</bug_when>
    <thetext>Rolled out here: http://trac.webkit.org/changeset/72273

It caused many &gt;10 regressions on Win and Linux gpu layout test runs.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>310702</commentid>
    <comment_count>11</comment_count>
      <attachid>74140</attachid>
    <who name="David Levin">levin</who>
    <bug_when>2010-11-17 22:06:55 -0800</bug_when>
    <thetext>Comment on attachment 74140
revised patch: responding to kbr&apos;s review

Clearing r+ and obsoleting bad patch.

After this was rolled out, the gpu layout tests started passing.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>311182</commentid>
    <comment_count>12</comment_count>
      <attachid>74140</attachid>
    <who name="Zhenyao Mo">zmo</who>
    <bug_when>2010-11-18 17:07:13 -0800</bug_when>
    <thetext>Comment on attachment 74140
revised patch: responding to kbr&apos;s review

This patch is actually correct, only that it exposes a bug in DrawingBuffer.cpp:reset().  Will wait until the fix for that lands to ask review again.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>311190</commentid>
    <comment_count>13</comment_count>
    <who name="David Levin">levin</who>
    <bug_when>2010-11-18 17:18:29 -0800</bug_when>
    <thetext>(In reply to comment #12)
&gt; (From update of attachment 74140 [details])
&gt; This patch is actually correct, only that it exposes a bug in DrawingBuffer.cpp:reset().  Will wait until the fix for that lands to ask review again.

Regardless of correctness, the key idea is to run the gpu layout tests (and address failures) OR else you leave the gardener with some odd choices:

1. Try to rebaseline things. (I&apos;m not sure if we have instructions about how to do this for the gpu tests. Also we have to look hard at the results and try to determine if they are correct or there is a bug, etc.)

2. Roll it out. Also, not a trivial decision.

Multiply this by lots of patches and then the gardener is having to potentially work 15+ hours days to keep up when tests aren&apos;t run :(</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>311193</commentid>
    <comment_count>14</comment_count>
    <who name="Zhenyao Mo">zmo</who>
    <bug_when>2010-11-18 17:21:41 -0800</bug_when>
    <thetext>(In reply to comment #13)
&gt; (In reply to comment #12)
&gt; &gt; (From update of attachment 74140 [details] [details])
&gt; &gt; This patch is actually correct, only that it exposes a bug in DrawingBuffer.cpp:reset().  Will wait until the fix for that lands to ask review again.
&gt; 
&gt; Regardless of correctness, the key idea is to run the gpu layout tests (and address failures) OR else you leave the gardener with some odd choices:
&gt; 
&gt; 1. Try to rebaseline things. (I&apos;m not sure if we have instructions about how to do this for the gpu tests. Also we have to look hard at the results and try to determine if they are correct or there is a bug, etc.)
&gt; 
&gt; 2. Roll it out. Also, not a trivial decision.
&gt; 
&gt; Multiply this by lots of patches and then the gardener is having to potentially work 15+ hours days to keep up when tests aren&apos;t run :(

I am sorry to put you through this.  I didn&apos;t realize my change will effect something other than WebGL.  Otherwise I will definitely run the gpu tests before committing.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>317966</commentid>
    <comment_count>15</comment_count>
      <attachid>75761</attachid>
    <who name="Zhenyao Mo">zmo</who>
    <bug_when>2010-12-06 17:34:12 -0800</bug_when>
    <thetext>Created attachment 75761
revised patch

Removing all the cases where pixels==null is passed to GraphicsContext3D::texImagde2D().

Per discussion with kbr, now an INVALID_VALUE is generated in GraphicsContext3D::texImagde2D if pixels==null.

Tested in linux with --platform chromium-gpu and it&apos;s no longer crashing.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>319069</commentid>
    <comment_count>16</comment_count>
      <attachid>75761</attachid>
    <who name="Kenneth Russell">kbr</who>
    <bug_when>2010-12-08 15:10:43 -0800</bug_when>
    <thetext>Comment on attachment 75761
revised patch

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

&gt; WebCore/html/canvas/WebGLRenderingContext.cpp:2534
&gt; +        zero = adoptArrayPtr(new unsigned char[size]);
&gt; +        memset(zero.get(), 0, size);

This construct is repeated many times throughout this code. It would be cleaner to use OwnFastMallocPtr&lt;T&gt; in conjunction with fastZeroedMalloc. The only issue is that OwnFastMallocPtr doesn&apos;t have a default constructor or assignment operator. Please go ahead and add them, and use them instead. (I don&apos;t think it&apos;s necessary to add a PassOwnFastMallocPtr class, just an assignment operator taking T*.)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>319646</commentid>
    <comment_count>17</comment_count>
      <attachid>76106</attachid>
    <who name="Zhenyao Mo">zmo</who>
    <bug_when>2010-12-09 12:18:46 -0800</bug_when>
    <thetext>Created attachment 76106
revised patch

Per discussion offline with kbr, a helper function texImage2DResourceSafe is added to GraphicsContext3D and used in various places in this patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>319659</commentid>
    <comment_count>18</comment_count>
      <attachid>76112</attachid>
    <who name="Zhenyao Mo">zmo</who>
    <bug_when>2010-12-09 12:33:43 -0800</bug_when>
    <thetext>Created attachment 76112
revised patch: fix a tiny issue</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>319764</commentid>
    <comment_count>19</comment_count>
      <attachid>76130</attachid>
    <who name="Zhenyao Mo">zmo</who>
    <bug_when>2010-12-09 16:09:24 -0800</bug_when>
    <thetext>Created attachment 76130
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>319781</commentid>
    <comment_count>20</comment_count>
      <attachid>76130</attachid>
    <who name="Kenneth Russell">kbr</who>
    <bug_when>2010-12-09 16:30:18 -0800</bug_when>
    <thetext>Comment on attachment 76130
Patch

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

The refactoring looks good but please clean up this one issue.

&gt; WebCore/platform/graphics/GraphicsContext3D.h:477
&gt; +    int texImage2DResourceSafe(unsigned target, unsigned level, unsigned internalformat, unsigned width, unsigned height, unsigned border, unsigned format, unsigned type);

Returning int is gross. Please make this return bool.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>319839</commentid>
    <comment_count>21</comment_count>
      <attachid>76148</attachid>
    <who name="Zhenyao Mo">zmo</who>
    <bug_when>2010-12-09 18:07:28 -0800</bug_when>
    <thetext>Created attachment 76148
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>321158</commentid>
    <comment_count>22</comment_count>
      <attachid>76148</attachid>
    <who name="Kenneth Russell">kbr</who>
    <bug_when>2010-12-13 09:33:03 -0800</bug_when>
    <thetext>Comment on attachment 76148
Patch

Looks good. Thanks for persisting with this fix.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>325279</commentid>
    <comment_count>23</comment_count>
    <who name="Zhenyao Mo">zmo</who>
    <bug_when>2010-12-21 17:15:33 -0800</bug_when>
    <thetext>I think it landed, not sure why this hasn&apos;t been updated.

Committed r74440: &lt;http://trac.webkit.org/changeset/74440&gt;

The patch was tested on linux with --platform chromium-gpu, but not on Mac as my Mac is snowleopard.

Will watch the bots.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>325285</commentid>
    <comment_count>24</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2010-12-21 17:23:39 -0800</bug_when>
    <thetext>Landed by you or by the commit-queue?  (Wondering if I need to go look at the commit-queue logs for failures.)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>325286</commentid>
    <comment_count>25</comment_count>
    <who name="Zhenyao Mo">zmo</who>
    <bug_when>2010-12-21 17:26:41 -0800</bug_when>
    <thetext>Landed by me using webkit-patch land --ignore-builders</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>325314</commentid>
    <comment_count>26</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2010-12-21 18:01:46 -0800</bug_when>
    <thetext>Hmm... If you saw an error message from webkit-patch land, I&apos;d love to see it. :)

Also, I don&apos;t think --ignore-builders even exists anymore.  We certainly don&apos;t block lands on them. :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>325316</commentid>
    <comment_count>27</comment_count>
    <who name="Zhenyao Mo">zmo</who>
    <bug_when>2010-12-21 18:03:42 -0800</bug_when>
    <thetext>(In reply to comment #26)
&gt; Hmm... If you saw an error message from webkit-patch land, I&apos;d love to see it. :)
&gt; 
&gt; Also, I don&apos;t think --ignore-builders even exists anymore.  We certainly don&apos;t block lands on them. :)

Unfortunately I didn&apos;t see any error messages.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>74056</attachid>
            <date>2010-11-16 16:30:25 -0800</date>
            <delta_ts>2010-11-16 16:39:23 -0800</delta_ts>
            <desc>patch</desc>
            <filename>init.patch</filename>
            <type>text/plain</type>
            <size>16588</size>
            <attacher name="Zhenyao Mo">zmo</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA3MjE0OCkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMjUgQEAKKzIwMTAtMTEtMTYgIFpoZW55YW8gTW8gIDx6bW9AZ29vZ2xlLmNvbT4K
KworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBXZWJHTFJl
bmRlcmluZ0NvbnRleHQgbmVlZHMgdG8gemVybyB0ZXh0dXJlcyBhbmQgcmVuZGVyYnVmZmVycwor
ICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NDkzNTUKKwor
ICAgICAgICBUZXN0OiBmYXN0L2NhbnZhcy93ZWJnbC91bmluaXRpYWxpemVkLXRlc3QuaHRtbAor
CisgICAgICAgICogaHRtbC9jYW52YXMvV2ViR0xGcmFtZWJ1ZmZlci5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpXZWJHTEZyYW1lYnVmZmVyOjpvbkFjY2Vzcyk6IFVzZSBhIHBhcmFtZXRlciB0byBk
ZWNpZGUgaWYgcmVuZGVyYnVmZmVyIGluaXRpYWxpemF0aW9uIGlzIG5lZWRlZC4KKyAgICAgICAg
KFdlYkNvcmU6OldlYkdMRnJhbWVidWZmZXI6OmluaXRpYWxpemVSZW5kZXJidWZmZXJzKTogRG9u
J3QgcmV0dXJuIGZhbHNlIGlmIGNvbG9yIGJ1ZmZlciBkb2Vzbid0IGV4aXN0LgorICAgICAgICAq
IGh0bWwvY2FudmFzL1dlYkdMRnJhbWVidWZmZXIuaDogTW9kaWZ5IG9uQWNjZXNzIGZ1bmN0aW9u
IHNpZ25hdHVyZS4KKyAgICAgICAgKiBodG1sL2NhbnZhcy9XZWJHTFJlbmRlcmluZ0NvbnRleHQu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0OjpjbGVhcik6IENh
bGwgb25BY2Nlc3Mgd2l0aCBhbiBhZGRlZCBwYXJhbWV0ZXIuCisgICAgICAgIChXZWJDb3JlOjpX
ZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmNvcHlUZXhJbWFnZTJEKTogRGl0dG8uCisgICAgICAgIChX
ZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmNvcHlUZXhTdWJJbWFnZTJEKTogRGl0dG8u
CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmRyYXdBcnJheXMpOiBE
aXR0by4KKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dDo6ZHJhd0VsZW1l
bnRzKTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnJl
YWRQaXhlbHMpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4
dDo6dGV4SW1hZ2UyREJhc2UpOiBDcmVhdGUgYnVmZmVyIGRhdGEgb2YgMHMgaWYgaW5wdXQgaXMg
bnVsbCB0byBpbml0aWFsaXplIHRleHR1cmVzLgorCiAyMDEwLTExLTE2ICBBbmRlcnMgQ2FybHNz
b24gIDxhbmRlcnNjYUBhcHBsZS5jb20+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgSm9obiBTdWxs
aXZhbi4KSW5kZXg6IFdlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xGcmFtZWJ1ZmZlci5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTEZyYW1lYnVmZmVyLmNwcAkocmV2
aXNpb24gNzIxMjQpCisrKyBXZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMRnJhbWVidWZmZXIuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0xODAsMTEgKzE4MCwxMyBAQCBib29sIFdlYkdMRnJhbWVidWZm
ZXI6OmlzSW5jb21wbGV0ZShib29sCiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi1ib29sIFdlYkdM
RnJhbWVidWZmZXI6Om9uQWNjZXNzKCkKK2Jvb2wgV2ViR0xGcmFtZWJ1ZmZlcjo6b25BY2Nlc3Mo
Ym9vbCBuZWVkVG9Jbml0aWFsaXplUmVuZGVyYnVmZmVycykKIHsKICAgICBpZiAoaXNJbmNvbXBs
ZXRlKHRydWUpKQogICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgcmV0dXJuIGluaXRpYWxpemVS
ZW5kZXJidWZmZXJzKCk7CisgICAgaWYgKG5lZWRUb0luaXRpYWxpemVSZW5kZXJidWZmZXJzKQor
ICAgICAgICByZXR1cm4gaW5pdGlhbGl6ZVJlbmRlcmJ1ZmZlcnMoKTsKKyAgICByZXR1cm4gdHJ1
ZTsKIH0KIAogdm9pZCBXZWJHTEZyYW1lYnVmZmVyOjpkZWxldGVPYmplY3RJbXBsKFBsYXRmb3Jt
M0RPYmplY3Qgb2JqZWN0KQpAQCAtMjAwLDggKzIwMiw2IEBAIHZvaWQgV2ViR0xGcmFtZWJ1ZmZl
cjo6ZGVsZXRlT2JqZWN0SW1wbCgKIGJvb2wgV2ViR0xGcmFtZWJ1ZmZlcjo6aW5pdGlhbGl6ZVJl
bmRlcmJ1ZmZlcnMoKQogewogICAgIEFTU0VSVChvYmplY3QoKSk7Ci0gICAgaWYgKCFpc0NvbG9y
QXR0YWNoZWQoKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIGJvb2wgaW5pdENvbG9yID0g
ZmFsc2UsIGluaXREZXB0aCA9IGZhbHNlLCBpbml0U3RlbmNpbCA9IGZhbHNlOwogICAgIHVuc2ln
bmVkIGxvbmcgbWFzayA9IDA7CiAgICAgaWYgKGlzVW5pbml0aWFsaXplZChtX2NvbG9yQXR0YWNo
bWVudC5nZXQoKSkpIHsKSW5kZXg6IFdlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xGcmFtZWJ1ZmZl
ci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xGcmFtZWJ1ZmZlci5o
CShyZXZpc2lvbiA3MjEyNCkKKysrIFdlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xGcmFtZWJ1ZmZl
ci5oCSh3b3JraW5nIGNvcHkpCkBAIC01MCw4ICs1MCw5IEBAIHB1YmxpYzoKICAgICAvLyByZWFk
UGl4ZWxzLCBjb3B5VGV4SW1hZ2UyRCwgY29weVRleFN1YkltYWdlMkQgaWYgdGhpcyBmcmFtZWJ1
ZmZlciBpcwogICAgIC8vIGN1cnJlbnRseSBib3VuZC4KICAgICAvLyBSZXR1cm4gZmFsc2UgaWYg
dGhlIGZyYW1lYnVmZmVyIGlzIGluY29tcGxldGU7IG90aGVyd2lzZSBpbml0aWFsaXplCi0gICAg
Ly8gdGhlIGJ1ZmZlcnMgaWYgdGhleSBoYXZlbid0IGJlZW4gaW5pdGlhbGl6ZWQuCi0gICAgYm9v
bCBvbkFjY2VzcygpOworICAgIC8vIHRoZSBidWZmZXJzIGlmIHRoZXkgaGF2ZW4ndCBiZWVuIGlu
aXRpYWxpemVkIGFuZAorICAgIC8vIG5lZWRUb0luaXRpYWxpemVSZW5kZXJidWZmZXJzIGlzIHRy
dWUuCisgICAgYm9vbCBvbkFjY2Vzcyhib29sIG5lZWRUb0luaXRpYWxpemVSZW5kZXJidWZmZXJz
KTsKIAogICAgIC8vIFJldHVybiBmYWxzZSBkb2VzIG5vdCBtZWFuIENPTVBMRVRFLCBtaWdodCBz
dGlsbCBiZSBJTkNPTVBMRVRFLgogICAgIGJvb2wgaXNJbmNvbXBsZXRlKGJvb2wgY2hlY2tJbnRl
cm5hbEZvcm1hdCkgY29uc3Q7CkluZGV4OiBXZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMUmVuZGVy
aW5nQ29udGV4dC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFJl
bmRlcmluZ0NvbnRleHQuY3BwCShyZXZpc2lvbiA3MjEyNCkKKysrIFdlYkNvcmUvaHRtbC9jYW52
YXMvV2ViR0xSZW5kZXJpbmdDb250ZXh0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjIsNiArNjIs
NjUgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCituYW1lc3BhY2UgeworCisgICAgdW5zaWdu
ZWQgYnl0ZXNQZXJDb21wb25lbnQodW5zaWduZWQgdHlwZSkKKyAgICB7CisgICAgICAgIHN3aXRj
aCAodHlwZSkgeworICAgICAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpVTlNJR05FRF9CWVRF
OgorICAgICAgICAgICAgcmV0dXJuIDE7CisgICAgICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6
OlVOU0lHTkVEX1NIT1JUXzVfNl81OgorICAgICAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpV
TlNJR05FRF9TSE9SVF80XzRfNF80OgorICAgICAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpV
TlNJR05FRF9TSE9SVF81XzVfNV8xOgorICAgICAgICAgICAgcmV0dXJuIDI7CisgICAgICAgIGRl
ZmF1bHQ6CisgICAgICAgICAgICBBU1NFUlQoZmFsc2UpOworICAgICAgICAgICAgcmV0dXJuIDA7
CisgICAgICAgIH0KKyAgICB9CisKKyAgICB1bnNpZ25lZCBjb21wb25lbnRzUGVyUGl4ZWwodW5z
aWduZWQgZm9ybWF0LCB1bnNpZ25lZCB0eXBlKQorICAgIHsKKyAgICAgICAgc3dpdGNoICh0eXBl
KSB7CisgICAgICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlVOU0lHTkVEX1NIT1JUXzVfNl81
OgorICAgICAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpVTlNJR05FRF9TSE9SVF80XzRfNF80
OgorICAgICAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpVTlNJR05FRF9TSE9SVF81XzVfNV8x
OgorICAgICAgICAgICAgcmV0dXJuIDE7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgfQorICAgICAgICBzd2l0Y2ggKGZvcm1hdCkgeworICAgICAgICBjYXNl
IEdyYXBoaWNzQ29udGV4dDNEOjpBTFBIQToKKyAgICAgICAgY2FzZSBHcmFwaGljc0NvbnRleHQz
RDo6TFVNSU5BTkNFOgorICAgICAgICAgICAgcmV0dXJuIDE7CisgICAgICAgIGNhc2UgR3JhcGhp
Y3NDb250ZXh0M0Q6OkxVTUlOQU5DRV9BTFBIQToKKyAgICAgICAgICAgIHJldHVybiAyOworICAg
ICAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpSR0I6CisgICAgICAgICAgICByZXR1cm4gMzsK
KyAgICAgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6UkdCQToKKyAgICAgICAgICAgIHJldHVy
biA0OworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgQVNTRVJUKGZhbHNlKTsKKyAgICAg
ICAgICAgIHJldHVybiAwOworICAgICAgICB9CisgICAgfQorCisgICAgLy8gVGhpcyBmdW5jdGlv
biBzaG91bGQgb25seSBiZSBjYWxsZWQgaWYgd2lkdGggYW5kIGhlaWdodCBpcyBub24temVybyBh
bmQKKyAgICAvLyBmb3JtYXQvdHlwZSBhcmUgdmFsaWQuICBSZXR1cm4gMCBpZiBvdmVyZmxvdyBo
YXBwZW5zLgorICAgIHNpemVfdCBpbWFnZVNpemVJbkJ5dGVzKHVuc2lnbmVkIHdpZHRoLCB1bnNp
Z25lZCBoZWlnaHQsIHVuc2lnbmVkIGZvcm1hdCwgdW5zaWduZWQgdHlwZSkKKyAgICB7CisgICAg
ICAgIEFTU0VSVCh3aWR0aCAmJiBoZWlnaHQpOworICAgICAgICBDaGVja2VkSW50PHVpbnQzMl90
PiBjaGVja2VkV2lkdGgod2lkdGgpOworICAgICAgICBDaGVja2VkSW50PHVpbnQzMl90PiBjaGVj
a2VkSGVpZ2h0KGhlaWdodCk7CisgICAgICAgIENoZWNrZWRJbnQ8dWludDMyX3Q+IGNoZWNrZWRC
eXRlc1BlclBpeGVsKGJ5dGVzUGVyQ29tcG9uZW50KHR5cGUpICogY29tcG9uZW50c1BlclBpeGVs
KGZvcm1hdCwgdHlwZSkpOworICAgICAgICBDaGVja2VkSW50PHVpbnQzMl90PiBjaGVja2VkU2l6
ZSA9IGNoZWNrZWRXaWR0aCAqIGNoZWNrZWRIZWlnaHQgKiBjaGVja2VkQnl0ZXNQZXJQaXhlbDsK
KyAgICAgICAgaWYgKGNoZWNrZWRTaXplLnZhbGlkKCkpCisgICAgICAgICAgICByZXR1cm4gY2hl
Y2tlZFNpemUudmFsdWUoKTsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorCit9IC8vIGFub255
bW91cyBuYW1lc3BhY2UKKwogc3RhdGljIGlubGluZSBQbGF0Zm9ybTNET2JqZWN0IG9iamVjdE9y
WmVybyhXZWJHTE9iamVjdCogb2JqZWN0KQogewogICAgIHJldHVybiBvYmplY3QgPyBvYmplY3Qt
Pm9iamVjdCgpIDogMDsKQEAgLTU0MCw3ICs1OTksNyBAQCB2b2lkIFdlYkdMUmVuZGVyaW5nQ29u
dGV4dDo6Y2xlYXIodW5zaWduCiAgICAgICAgIG1fY29udGV4dC0+c3ludGhlc2l6ZUdMRXJyb3Io
R3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfVkFMVUUpOwogICAgICAgICByZXR1cm47CiAgICAg
fQotICAgIGlmIChtX2ZyYW1lYnVmZmVyQmluZGluZyAmJiAhbV9mcmFtZWJ1ZmZlckJpbmRpbmct
Pm9uQWNjZXNzKCkpIHsKKyAgICBpZiAobV9mcmFtZWJ1ZmZlckJpbmRpbmcgJiYgIW1fZnJhbWVi
dWZmZXJCaW5kaW5nLT5vbkFjY2VzcyghaXNSZXNvdXJjZVNhZmUoKSkpIHsKICAgICAgICAgbV9j
b250ZXh0LT5zeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9GUkFN
RUJVRkZFUl9PUEVSQVRJT04pOwogICAgICAgICByZXR1cm47CiAgICAgfQpAQCAtNjE4LDcgKzY3
Nyw3IEBAIHZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojpjb3B5VGV4SW1hZ2UKICAgICAgICAg
bV9jb250ZXh0LT5zeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9W
QUxVRSk7CiAgICAgICAgIHJldHVybjsKICAgICB9Ci0gICAgaWYgKG1fZnJhbWVidWZmZXJCaW5k
aW5nICYmICFtX2ZyYW1lYnVmZmVyQmluZGluZy0+b25BY2Nlc3MoKSkgeworICAgIGlmIChtX2Zy
YW1lYnVmZmVyQmluZGluZyAmJiAhbV9mcmFtZWJ1ZmZlckJpbmRpbmctPm9uQWNjZXNzKCFpc1Jl
c291cmNlU2FmZSgpKSkgewogICAgICAgICBtX2NvbnRleHQtPnN5bnRoZXNpemVHTEVycm9yKEdy
YXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX0ZSQU1FQlVGRkVSX09QRVJBVElPTik7CiAgICAgICAg
IHJldHVybjsKICAgICB9CkBAIC02NDMsNyArNzAyLDcgQEAgdm9pZCBXZWJHTFJlbmRlcmluZ0Nv
bnRleHQ6OmNvcHlUZXhTdWJJbQogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAgICAg
fQotICAgIGlmIChtX2ZyYW1lYnVmZmVyQmluZGluZyAmJiAhbV9mcmFtZWJ1ZmZlckJpbmRpbmct
Pm9uQWNjZXNzKCkpIHsKKyAgICBpZiAobV9mcmFtZWJ1ZmZlckJpbmRpbmcgJiYgIW1fZnJhbWVi
dWZmZXJCaW5kaW5nLT5vbkFjY2VzcyghaXNSZXNvdXJjZVNhZmUoKSkpIHsKICAgICAgICAgbV9j
b250ZXh0LT5zeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9GUkFN
RUJVRkZFUl9PUEVSQVRJT04pOwogICAgICAgICByZXR1cm47CiAgICAgfQpAQCAtMTA3NCw3ICsx
MTMzLDcgQEAgdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmRyYXdBcnJheXModQogICAgICAg
ICB9CiAgICAgfQogCi0gICAgaWYgKG1fZnJhbWVidWZmZXJCaW5kaW5nICYmICFtX2ZyYW1lYnVm
ZmVyQmluZGluZy0+b25BY2Nlc3MoKSkgeworICAgIGlmIChtX2ZyYW1lYnVmZmVyQmluZGluZyAm
JiAhbV9mcmFtZWJ1ZmZlckJpbmRpbmctPm9uQWNjZXNzKCFpc1Jlc291cmNlU2FmZSgpKSkgewog
ICAgICAgICBtX2NvbnRleHQtPnN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJ
TlZBTElEX0ZSQU1FQlVGRkVSX09QRVJBVElPTik7CiAgICAgICAgIHJldHVybjsKICAgICB9CkBA
IC0xMTM4LDcgKzExOTcsNyBAQCB2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6ZHJhd0VsZW1l
bnRzCiAgICAgICAgIH0KICAgICB9CiAKLSAgICBpZiAobV9mcmFtZWJ1ZmZlckJpbmRpbmcgJiYg
IW1fZnJhbWVidWZmZXJCaW5kaW5nLT5vbkFjY2VzcygpKSB7CisgICAgaWYgKG1fZnJhbWVidWZm
ZXJCaW5kaW5nICYmICFtX2ZyYW1lYnVmZmVyQmluZGluZy0+b25BY2Nlc3MoIWlzUmVzb3VyY2VT
YWZlKCkpKSB7CiAgICAgICAgIG1fY29udGV4dC0+c3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3ND
b250ZXh0M0Q6OklOVkFMSURfRlJBTUVCVUZGRVJfT1BFUkFUSU9OKTsKICAgICAgICAgcmV0dXJu
OwogICAgIH0KQEAgLTIyNDMsNyArMjMwMiw3IEBAIHZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0
OjpyZWFkUGl4ZWxzKGwKICAgICAgICAgbV9jb250ZXh0LT5zeW50aGVzaXplR0xFcnJvcihHcmFw
aGljc0NvbnRleHQzRDo6SU5WQUxJRF9PUEVSQVRJT04pOwogICAgICAgICByZXR1cm47CiAgICAg
fQotICAgIGlmIChtX2ZyYW1lYnVmZmVyQmluZGluZyAmJiAhbV9mcmFtZWJ1ZmZlckJpbmRpbmct
Pm9uQWNjZXNzKCkpIHsKKyAgICBpZiAobV9mcmFtZWJ1ZmZlckJpbmRpbmcgJiYgIW1fZnJhbWVi
dWZmZXJCaW5kaW5nLT5vbkFjY2VzcyghaXNSZXNvdXJjZVNhZmUoKSkpIHsKICAgICAgICAgbV9j
b250ZXh0LT5zeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9GUkFN
RUJVRkZFUl9PUEVSQVRJT04pOwogICAgICAgICByZXR1cm47CiAgICAgfQpAQCAtMjQ0Myw2ICsy
NTAyLDE3IEBAIHZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp0ZXhJbWFnZTJEQmEKICAgICAg
ICAgICAgIHJldHVybjsKICAgICAgICAgfQogICAgIH0KKyAgICBPd25BcnJheVB0cjx1aW50OD4g
emVybzsKKyAgICBpZiAoIXBpeGVscyAmJiAhaXNSZXNvdXJjZVNhZmUoKSAmJiB3aWR0aCAmJiBo
ZWlnaHQpIHsKKyAgICAgICAgc2l6ZV90IHNpemUgPSBpbWFnZVNpemVJbkJ5dGVzKHdpZHRoLCBo
ZWlnaHQsIGZvcm1hdCwgdHlwZSk7CisgICAgICAgIGlmICghc2l6ZSkgeworICAgICAgICAgICAg
bV9jb250ZXh0LT5zeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9W
QUxVRSk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgemVyby5zZXQo
bmV3IHVpbnQ4W3NpemVdKTsKKyAgICAgICAgbWVtc2V0KHplcm8uZ2V0KCksIDAsIHNpemUpOwor
ICAgICAgICBwaXhlbHMgPSB6ZXJvLmdldCgpOworICAgIH0KICAgICBtX2NvbnRleHQtPnRleElt
YWdlMkQodGFyZ2V0LCBsZXZlbCwgaW50ZXJuYWxmb3JtYXQsIHdpZHRoLCBoZWlnaHQsCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGJvcmRlciwgZm9ybWF0LCB0eXBlLCBwaXhlbHMpOwogICAg
IHRleC0+c2V0TGV2ZWxJbmZvKHRhcmdldCwgbGV2ZWwsIGludGVybmFsZm9ybWF0LCB3aWR0aCwg
aGVpZ2h0LCB0eXBlKTsKSW5kZXg6IFdlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZwkocmV2aXNpb24gNzIxNDgpCisrKyBXZWJL
aXQvY2hyb21pdW0vQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTIgQEAKKzIw
MTAtMTEtMTYgIFpoZW55YW8gTW8gIDx6bW9AZ29vZ2xlLmNvbT4KKworICAgICAgICBSZXZpZXdl
ZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBXZWJHTFJlbmRlcmluZ0NvbnRleHQgbmVl
ZHMgdG8gemVybyB0ZXh0dXJlcyBhbmQgcmVuZGVyYnVmZmVycworICAgICAgICBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NDkzNTUKKworICAgICAgICAqIHNyYy9XZWJH
cmFwaGljc0NvbnRleHQzRERlZmF1bHRJbXBsLmNwcDogRG9uJ3QgZGVhbCB3aXRoIHRleHR1cmUg
aW5pdGlhbGl6YXRpb24gYXQgdGhpcyBsZXZlbC4KKwogMjAxMC0xMS0xMSAgWmhlbnlhbyBNbyAg
PHptb0Bnb29nbGUuY29tPgogCiAgICAgICAgIFJldmlld2VkIGJ5IEtlbm5ldGggUnVzc2VsbC4K
SW5kZXg6IFdlYktpdC9jaHJvbWl1bS9zcmMvV2ViR3JhcGhpY3NDb250ZXh0M0REZWZhdWx0SW1w
bC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJHcmFwaGljc0NvbnRl
eHQzRERlZmF1bHRJbXBsLmNwcAkocmV2aXNpb24gNzIxMjQpCisrKyBXZWJLaXQvY2hyb21pdW0v
c3JjL1dlYkdyYXBoaWNzQ29udGV4dDNERGVmYXVsdEltcGwuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0xMjQxLDcwICsxMjQxLDcgQEAgREVMRUdBVEVfVE9fR0xfMihzYW1wbGVDb3ZlcmFnZSwgU2Ft
cGxlQwogCiBERUxFR0FURV9UT19HTF80KHNjaXNzb3IsIFNjaXNzb3IsIGxvbmcsIGxvbmcsIHVu
c2lnbmVkIGxvbmcsIHVuc2lnbmVkIGxvbmcpCiAKLXVuc2lnbmVkIGJ5dGVzUGVyQ29tcG9uZW50
KHVuc2lnbmVkIHR5cGUpCi17Ci0gICAgc3dpdGNoICh0eXBlKSB7Ci0gICAgY2FzZSBHTF9CWVRF
OgotICAgIGNhc2UgR0xfVU5TSUdORURfQllURToKLSAgICAgICAgcmV0dXJuIDE7Ci0gICAgY2Fz
ZSBHTF9TSE9SVDoKLSAgICBjYXNlIEdMX1VOU0lHTkVEX1NIT1JUOgotICAgIGNhc2UgR0xfVU5T
SUdORURfU0hPUlRfNV82XzU6Ci0gICAgY2FzZSBHTF9VTlNJR05FRF9TSE9SVF80XzRfNF80Ogot
ICAgIGNhc2UgR0xfVU5TSUdORURfU0hPUlRfNV81XzVfMToKLSAgICAgICAgcmV0dXJuIDI7Ci0g
ICAgY2FzZSBHTF9GTE9BVDoKLSAgICAgICAgcmV0dXJuIDQ7Ci0gICAgZGVmYXVsdDoKLSAgICAg
ICAgcmV0dXJuIDQ7Ci0gICAgfQotfQotCi11bnNpZ25lZCBjb21wb25lbnRzUGVyUGl4ZWwodW5z
aWduZWQgZm9ybWF0LCB1bnNpZ25lZCB0eXBlKQotewotICAgIHN3aXRjaCAodHlwZSkgewotICAg
IGNhc2UgR0xfVU5TSUdORURfU0hPUlRfNV82XzU6Ci0gICAgY2FzZSBHTF9VTlNJR05FRF9TSE9S
VF80XzRfNF80OgotICAgIGNhc2UgR0xfVU5TSUdORURfU0hPUlRfNV81XzVfMToKLSAgICAgICAg
cmV0dXJuIDE7Ci0gICAgZGVmYXVsdDoKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotICAgIHN3aXRj
aCAoZm9ybWF0KSB7Ci0gICAgY2FzZSBHTF9MVU1JTkFOQ0U6Ci0gICAgICAgIHJldHVybiAxOwot
ICAgIGNhc2UgR0xfTFVNSU5BTkNFX0FMUEhBOgotICAgICAgICByZXR1cm4gMjsKLSAgICBjYXNl
IEdMX1JHQjoKLSAgICAgICAgcmV0dXJuIDM7Ci0gICAgY2FzZSBHTF9SR0JBOgotICAgIGNhc2Ug
R0xfQkdSQV9FWFQ6Ci0gICAgICAgIHJldHVybiA0OwotICAgIGRlZmF1bHQ6Ci0gICAgICAgIHJl
dHVybiA0OwotICAgIH0KLX0KLQotLy8gTi5CLjogIFRoaXMgY29kZSBkb2VzIG5vdCBwcm90ZWN0
IGFnYWluc3QgaW50ZWdlciBvdmVyZmxvdyAoYXMgdGhlIGNvbW1hbmQKLS8vIGJ1ZmZlciBpbXBs
ZW1lbnRhdGlvbiBkb2VzKSwgc28gaXQgc2hvdWxkIG5vdCBiZSBjb25zaWRlcmVkIHJvYnVzdCBl
bm91Z2gKLS8vIGZvciB1c2UgaW4gdGhlIGJyb3dzZXIuICBTaW5jZSB0aGlzIGltcGxlbWVudGF0
aW9uIGlzIG9ubHkgdXNlZCBmb3IgbGF5b3V0Ci0vLyB0ZXN0cywgdGhpcyBzaG91bGQgYmUgb2sg
Zm9yIG5vdy4KLXNpemVfdCBpbWFnZVNpemVJbkJ5dGVzKHVuc2lnbmVkIHdpZHRoLCB1bnNpZ25l
ZCBoZWlnaHQsIHVuc2lnbmVkIGZvcm1hdCwgdW5zaWduZWQgdHlwZSkKLXsKLSAgICByZXR1cm4g
d2lkdGggKiBoZWlnaHQgKiBieXRlc1BlckNvbXBvbmVudCh0eXBlKSAqIGNvbXBvbmVudHNQZXJQ
aXhlbChmb3JtYXQsIHR5cGUpOwotfQotCi12b2lkIFdlYkdyYXBoaWNzQ29udGV4dDNERGVmYXVs
dEltcGw6OnRleEltYWdlMkQodW5zaWduZWQgdGFyZ2V0LCB1bnNpZ25lZCBsZXZlbCwgdW5zaWdu
ZWQgaW50ZXJuYWxGb3JtYXQsIHVuc2lnbmVkIHdpZHRoLCB1bnNpZ25lZCBoZWlnaHQsIHVuc2ln
bmVkIGJvcmRlciwgdW5zaWduZWQgZm9ybWF0LCB1bnNpZ25lZCB0eXBlLCBjb25zdCB2b2lkKiBw
aXhlbHMpCi17Ci0gICAgT3duQXJyYXlQdHI8dWludDg+IHplcm87Ci0gICAgaWYgKCFwaXhlbHMp
IHsKLSAgICAgICAgc2l6ZV90IHNpemUgPSBpbWFnZVNpemVJbkJ5dGVzKHdpZHRoLCBoZWlnaHQs
IGZvcm1hdCwgdHlwZSk7Ci0gICAgICAgIHplcm8uc2V0KG5ldyB1aW50OFtzaXplXSk7Ci0gICAg
ICAgIG1lbXNldCh6ZXJvLmdldCgpLCAwLCBzaXplKTsKLSAgICAgICAgcGl4ZWxzID0gemVyby5n
ZXQoKTsKLSAgICB9Ci0gICAgZ2xUZXhJbWFnZTJEKHRhcmdldCwgbGV2ZWwsIGludGVybmFsRm9y
bWF0LCB3aWR0aCwgaGVpZ2h0LCBib3JkZXIsIGZvcm1hdCwgdHlwZSwgcGl4ZWxzKTsKLX0KK0RF
TEVHQVRFX1RPX0dMXzkodGV4SW1hZ2UyRCwgVGV4SW1hZ2UyRCwgdW5zaWduZWQsIHVuc2lnbmVk
LCB1bnNpZ25lZCwgdW5zaWduZWQsIHVuc2lnbmVkLCB1bnNpZ25lZCwgdW5zaWduZWQsIHVuc2ln
bmVkLCBjb25zdCB2b2lkKikKIAogdm9pZCBXZWJHcmFwaGljc0NvbnRleHQzRERlZmF1bHRJbXBs
OjpzaGFkZXJTb3VyY2UoV2ViR0xJZCBzaGFkZXIsIGNvbnN0IGNoYXIqIHN0cmluZykKIHsKSW5k
ZXg6IExheW91dFRlc3RzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9DaGFu
Z2VMb2cJKHJldmlzaW9uIDcyMTQ4KQorKysgTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCSh3b3JraW5n
IGNvcHkpCkBAIC0xLDMgKzEsMTMgQEAKKzIwMTAtMTEtMTYgIFpoZW55YW8gTW8gIDx6bW9AZ29v
Z2xlLmNvbT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAg
ICBXZWJHTFJlbmRlcmluZ0NvbnRleHQgbmVlZHMgdG8gemVybyB0ZXh0dXJlcyBhbmQgcmVuZGVy
YnVmZmVycworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
NDkzNTUKKworICAgICAgICAqIGZhc3QvY2FudmFzL3dlYmdsL3VuaW5pdGlhbGl6ZWQtdGVzdC1l
eHBlY3RlZC50eHQ6IEFkZGVkLgorICAgICAgICAqIGZhc3QvY2FudmFzL3dlYmdsL3VuaW5pdGlh
bGl6ZWQtdGVzdC5odG1sOiBBZGRlZC4KKwogMjAxMC0xMS0xNiAgRGF2ZSBIeWF0dCAgPGh5YXR0
QGFwcGxlLmNvbT4KIAogICAgICAgICBSZXZpZXdlZCBieSBEYW4gQmVybnN0ZWluLgpJbmRleDog
TGF5b3V0VGVzdHMvZmFzdC9jYW52YXMvd2ViZ2wvdW5pbml0aWFsaXplZC10ZXN0LWV4cGVjdGVk
LnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9mYXN0L2NhbnZhcy93ZWJnbC91bmluaXRp
YWxpemVkLXRlc3QtZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvZmFz
dC9jYW52YXMvd2ViZ2wvdW5pbml0aWFsaXplZC10ZXN0LWV4cGVjdGVkLnR4dAkocmV2aXNpb24g
MCkKQEAgLTAsMCArMSwxMyBAQAorVGVzdHMgdG8gY2hlY2sgdXNlciBjb2RlIGNhbm5vdCBhY2Nl
c3MgdW5pbml0aWFsaXplZCBkYXRhIGZyb20gR0wgcmVzb3VyY2VzLgorCitPbiBzdWNjZXNzLCB5
b3Ugd2lsbCBzZWUgYSBzZXJpZXMgb2YgIlBBU1MiIG1lc3NhZ2VzLCBmb2xsb3dlZCBieSAiVEVT
VCBDT01QTEVURSIuCisKK1BBU1MgQ29udGV4dCBjcmVhdGVkLgorUmVhZGluZyBhbiB1bmluaXRp
YWxpemVkIHRleHR1cmUgc2hvdWxkIHN1Y2NlZWQgd2l0aCBhbGwgYnl0ZXMgc2V0IHRvIDAuCitQ
QVNTIEFsbCBkYXRhIGluaXRpYWxpemVkCitQQVNTIGdldEVycm9yIHdhcyBleHBlY3RlZCB2YWx1
ZTogTk9fRVJST1IgOiAKKworUEFTUyBzdWNjZXNzZnVsbHlQYXJzZWQgaXMgdHJ1ZQorCitURVNU
IENPTVBMRVRFCisKSW5kZXg6IExheW91dFRlc3RzL2Zhc3QvY2FudmFzL3dlYmdsL3VuaW5pdGlh
bGl6ZWQtdGVzdC5odG1sCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2Zhc3QvY2FudmFzL3dl
YmdsL3VuaW5pdGlhbGl6ZWQtdGVzdC5odG1sCShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMv
ZmFzdC9jYW52YXMvd2ViZ2wvdW5pbml0aWFsaXplZC10ZXN0Lmh0bWwJKHJldmlzaW9uIDApCkBA
IC0wLDAgKzEsOTEgQEAKKzwhZG9jdHlwZSBodG1sPgorPGh0bWw+Cis8aGVhZD4KKzxtZXRhIGh0
dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PXV0Zi04
Ij4KKzx0aXRsZT5XZWJHTCBVbmluaXRpYWxpemVkIEdMIFJlc291cmNlcyBUZXN0czwvdGl0bGU+
Cis8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9Ii4uLy4uL2pzL3Jlc291cmNlcy9qcy10ZXN0
LXN0eWxlLmNzcyIvPgorPHNjcmlwdCBzcmM9Ii4uLy4uL2pzL3Jlc291cmNlcy9qcy10ZXN0LXBy
ZS5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0icmVzb3VyY2VzL3dlYmdsLXRlc3QuanMiPjwv
c2NyaXB0PgorPC9oZWFkPgorPGJvZHk+Cis8ZGl2IGlkPSJkZXNjcmlwdGlvbiI+PC9kaXY+Cis8
ZGl2IGlkPSJjb25zb2xlIj48L2Rpdj4KKzxjYW52YXMgaWQ9ImNhbnZhcyIgd2lkdGg9IjIiIGhl
aWdodD0iMiI+IDwvY2FudmFzPgorPHNjcmlwdD4KK2Rlc2NyaXB0aW9uKCJUZXN0cyB0byBjaGVj
ayB1c2VyIGNvZGUgY2Fubm90IGFjY2VzcyB1bmluaXRpYWxpemVkIGRhdGEgZnJvbSBHTCByZXNv
dXJjZXMuIik7CisKK3ZhciBjYW52YXMgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiY2FudmFz
Iik7Cit2YXIgZ2wgPSBjcmVhdGUzRENvbnRleHQoY2FudmFzKTsKK2lmICghZ2wpCisgIHRlc3RG
YWlsZWQoIkNvbnRleHQgY3JlYXRlZC4iKTsKK2Vsc2UKKyAgdGVzdFBhc3NlZCgiQ29udGV4dCBj
cmVhdGVkLiIpOworCitkZWJ1ZygiUmVhZGluZyBhbiB1bmluaXRpYWxpemVkIHRleHR1cmUgc2hv
dWxkIHN1Y2NlZWQgd2l0aCBhbGwgYnl0ZXMgc2V0IHRvIDAuIik7CisKK3ZhciB3aWR0aCA9IDUx
MjsKK3ZhciBoZWlnaHQgPSA1MTI7Cit2YXIgYnBwID0gNDsKK3ZhciBleHBlY3RlZERhdGFMZW5n
dGggPSB3aWR0aCpoZWlnaHQqYnBwOworCit2YXIgdGV4ID0gZ2wuY3JlYXRlVGV4dHVyZSgpOwor
Z2wuYmluZFRleHR1cmUoZ2wuVEVYVFVSRV8yRCwgdGV4KTsKK2dsLnRleEltYWdlMkQoZ2wuVEVY
VFVSRV8yRCwgMCwgZ2wuUkdCQSwgd2lkdGgsIGhlaWdodCwgMCwgZ2wuUkdCQSwgZ2wuVU5TSUdO
RURfQllURSwgbnVsbCk7CisKKy8vIHRoaXMgY2FuIGJlIHF1aXRlIHVuZGV0ZXJtaW5pc3RpYyBz
byB0byBpbXByb3ZlIG9kZHMgb2Ygc2VlaW5nIHVuaW5pdGlhbGl6ZWQgZGF0YSB3cml0ZSBiaXRz
CisvLyBpbnRvIHRleCB0aGVuIGRlbGV0ZSB0ZXh0dXJlIHRoZW4gcmUtY3JlYXRlIG9uZSB3aXRo
IHNhbWUgY2hhcmFjdGVyaXN0aWNzIChkcml2ZXIgd2lsbCBsaWtlbHkgcmV1c2UgbWVtKQorLy8g
d2l0aCB0aGlzIHRyaWNrIG9uIHI1OTA0NiBXZWJLaXQvT1NYIEkgZ2V0IEZBSUwgMTAwJSBvZiB0
aGUgdGltZSBpbnN0ZWFkIG9mIH4xNSUgb2YgdGhlIHRpbWUuCisKK3ZhciBiYWREYXRhID0gbmV3
IFVpbnQ4QXJyYXkoZXhwZWN0ZWREYXRhTGVuZ3RoKTsKK2ZvciAodmFyIGkgPSAwOyBpIDwgYmFk
RGF0YS5sZW5ndGg7ICsraSkKKyAgICBiYWREYXRhW2ldID0gaSAlIDI1NTsKKworZ2wudGV4U3Vi
SW1hZ2UyRChnbC5URVhUVVJFXzJELCAwLCAwLCAwLCB3aWR0aCwgaGVpZ2h0LCBnbC5SR0JBLCBn
bC5VTlNJR05FRF9CWVRFLCBiYWREYXRhKTsKK2dsLmZpbmlzaCgpOyAvLyBtYWtlIHN1cmUgaXQg
aGFzIGJlZW4gdXBsb2FkZWQKKworZ2wuZGVsZXRlVGV4dHVyZSh0ZXgpOworZ2wuZmluaXNoKCk7
IC8vIG1ha2Ugc3VyZSBpdCBoYXMgYmVlbiBkZWxldGVkCisKK3ZhciB0ZXggPSBnbC5jcmVhdGVU
ZXh0dXJlKCk7CitnbC5iaW5kVGV4dHVyZShnbC5URVhUVVJFXzJELCB0ZXgpOworZ2wudGV4SW1h
Z2UyRChnbC5URVhUVVJFXzJELCAwLCBnbC5SR0JBLCB3aWR0aCwgaGVpZ2h0LCAwLCBnbC5SR0JB
LCBnbC5VTlNJR05FRF9CWVRFLCBudWxsKTsKKwordmFyIGZiID0gZ2wuY3JlYXRlRnJhbWVidWZm
ZXIoKTsKK2dsLmJpbmRGcmFtZWJ1ZmZlcihnbC5GUkFNRUJVRkZFUiwgZmIpOworZ2wuZnJhbWVi
dWZmZXJUZXh0dXJlMkQoZ2wuRlJBTUVCVUZGRVIsIGdsLkNPTE9SX0FUVEFDSE1FTlQwLCBnbC5U
RVhUVVJFXzJELCB0ZXgsIDApOworCitkYXRhID0gbmV3IFVpbnQ4QXJyYXkod2lkdGggKiBoZWln
aHQgKiA0KTsKK2dsLnJlYWRQaXhlbHMoMCwgMCwgd2lkdGgsIGhlaWdodCwgZ2wuUkdCQSwgZ2wu
VU5TSUdORURfQllURSwgZGF0YSk7CisKK2lmIChkYXRhLmxlbmd0aCAhPSBleHBlY3RlZERhdGFM
ZW5ndGgpIHsKKyAgICB0ZXN0RmFpbGVkKCJleHBlY3RlZCBkYXRhIGxlbmd0aCAiICsgZXhwZWN0
ZWREYXRhTGVuZ3RoICsgIiBidXQgZ290ICIgKyBkYXRhLmxlbmd0aCArICIgaW5zdGVhZC4iKTsK
K30gZWxzZSB7CisgICAgdmFyIGsgPSAwOworICAgIGZvciAodmFyIGkgPSAwOyBpIDwgZGF0YS5s
ZW5ndGg7ICsraSkgeworCWlmIChkYXRhW2ldICE9IDApIHsKKwkgICAgaysrOworCX0KKyAgICB9
CisKKyAgICBpZiAoaykgeworCXRlc3RGYWlsZWQoIkZvdW5kICIgKyBrICsgIiBub24temVybyBi
eXRlcyIpOworICAgIH0gZWxzZSB7CisJdGVzdFBhc3NlZCgiQWxsIGRhdGEgaW5pdGlhbGl6ZWQi
KTsKKyAgICB9Cit9CisKK2dsRXJyb3JTaG91bGRCZShnbCwgZ2wuTk9fRVJST1IpOworCisvL1RP
RE86IHVuaW5pdGlhbGl6ZWQgdmVydGV4IGFycmF5IGJ1ZmZlcgorLy9UT0RPOiB1bmluaXRpYWxp
emVkIHZlcnRleCBlbGVtZW50cyBidWZmZXIKKy8vVE9ETzogdW5pbml0aWFsaXplZCBmcmFtZWJ1
ZmZlcj8gKGltcGxlbWVudGF0aW9ucyB3b3VsZCBuZWVkIHRvIGRvIGEgR0wgY2xlYXIgYXQgZmly
c3QgYmluZGluZz8pCisvL1RPRE86IHVuaW5pdGlhbGl6ZWQgcmVuZGVyYnVmZmVyPyAoaW1wbGVt
ZW50YXRpb25zIHdvdWxkIG5lZWQgdG8gZG8gYSBHTCBjbGVhciBhdCBmaXJzdCBiaW5kaW5nPykK
Ky8vVE9ETzogdW5pbml0aWFsaXplZCB1bmlmb3JtIGFycmF5cz8KKworZGVidWcoIiIpOworc3Vj
Y2Vzc2Z1bGx5UGFyc2VkID0gdHJ1ZTsKKzwvc2NyaXB0PgorPHNjcmlwdCBzcmM9Ii4uLy4uL2pz
L3Jlc291cmNlcy9qcy10ZXN0LXBvc3QuanMiPjwvc2NyaXB0PgorPC9ib2R5PgorPC9odG1sPgor
Cg==
</data>
<flag name="commit-queue"
          id="64596"
          type_id="3"
          status="-"
          setter="zmo"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>74058</attachid>
            <date>2010-11-16 16:39:23 -0800</date>
            <delta_ts>2010-11-17 11:46:46 -0800</delta_ts>
            <desc>revised patch: fix compile issue for webkit</desc>
            <filename>init.patch</filename>
            <type>text/plain</type>
            <size>16604</size>
            <attacher name="Zhenyao Mo">zmo</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA3MjE0OCkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMjUgQEAKKzIwMTAtMTEtMTYgIFpoZW55YW8gTW8gIDx6bW9AZ29vZ2xlLmNvbT4K
KworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBXZWJHTFJl
bmRlcmluZ0NvbnRleHQgbmVlZHMgdG8gemVybyB0ZXh0dXJlcyBhbmQgcmVuZGVyYnVmZmVycwor
ICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NDkzNTUKKwor
ICAgICAgICBUZXN0OiBmYXN0L2NhbnZhcy93ZWJnbC91bmluaXRpYWxpemVkLXRlc3QuaHRtbAor
CisgICAgICAgICogaHRtbC9jYW52YXMvV2ViR0xGcmFtZWJ1ZmZlci5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpXZWJHTEZyYW1lYnVmZmVyOjpvbkFjY2Vzcyk6IFVzZSBhIHBhcmFtZXRlciB0byBk
ZWNpZGUgaWYgcmVuZGVyYnVmZmVyIGluaXRpYWxpemF0aW9uIGlzIG5lZWRlZC4KKyAgICAgICAg
KFdlYkNvcmU6OldlYkdMRnJhbWVidWZmZXI6OmluaXRpYWxpemVSZW5kZXJidWZmZXJzKTogRG9u
J3QgcmV0dXJuIGZhbHNlIGlmIGNvbG9yIGJ1ZmZlciBkb2Vzbid0IGV4aXN0LgorICAgICAgICAq
IGh0bWwvY2FudmFzL1dlYkdMRnJhbWVidWZmZXIuaDogTW9kaWZ5IG9uQWNjZXNzIGZ1bmN0aW9u
IHNpZ25hdHVyZS4KKyAgICAgICAgKiBodG1sL2NhbnZhcy9XZWJHTFJlbmRlcmluZ0NvbnRleHQu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0OjpjbGVhcik6IENh
bGwgb25BY2Nlc3Mgd2l0aCBhbiBhZGRlZCBwYXJhbWV0ZXIuCisgICAgICAgIChXZWJDb3JlOjpX
ZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmNvcHlUZXhJbWFnZTJEKTogRGl0dG8uCisgICAgICAgIChX
ZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmNvcHlUZXhTdWJJbWFnZTJEKTogRGl0dG8u
CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmRyYXdBcnJheXMpOiBE
aXR0by4KKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dDo6ZHJhd0VsZW1l
bnRzKTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnJl
YWRQaXhlbHMpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4
dDo6dGV4SW1hZ2UyREJhc2UpOiBDcmVhdGUgYnVmZmVyIGRhdGEgb2YgMHMgaWYgaW5wdXQgaXMg
bnVsbCB0byBpbml0aWFsaXplIHRleHR1cmVzLgorCiAyMDEwLTExLTE2ICBBbmRlcnMgQ2FybHNz
b24gIDxhbmRlcnNjYUBhcHBsZS5jb20+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgSm9obiBTdWxs
aXZhbi4KSW5kZXg6IFdlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xGcmFtZWJ1ZmZlci5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTEZyYW1lYnVmZmVyLmNwcAkocmV2
aXNpb24gNzIxMjQpCisrKyBXZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMRnJhbWVidWZmZXIuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0xODAsMTEgKzE4MCwxMyBAQCBib29sIFdlYkdMRnJhbWVidWZm
ZXI6OmlzSW5jb21wbGV0ZShib29sCiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi1ib29sIFdlYkdM
RnJhbWVidWZmZXI6Om9uQWNjZXNzKCkKK2Jvb2wgV2ViR0xGcmFtZWJ1ZmZlcjo6b25BY2Nlc3Mo
Ym9vbCBuZWVkVG9Jbml0aWFsaXplUmVuZGVyYnVmZmVycykKIHsKICAgICBpZiAoaXNJbmNvbXBs
ZXRlKHRydWUpKQogICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgcmV0dXJuIGluaXRpYWxpemVS
ZW5kZXJidWZmZXJzKCk7CisgICAgaWYgKG5lZWRUb0luaXRpYWxpemVSZW5kZXJidWZmZXJzKQor
ICAgICAgICByZXR1cm4gaW5pdGlhbGl6ZVJlbmRlcmJ1ZmZlcnMoKTsKKyAgICByZXR1cm4gdHJ1
ZTsKIH0KIAogdm9pZCBXZWJHTEZyYW1lYnVmZmVyOjpkZWxldGVPYmplY3RJbXBsKFBsYXRmb3Jt
M0RPYmplY3Qgb2JqZWN0KQpAQCAtMjAwLDggKzIwMiw2IEBAIHZvaWQgV2ViR0xGcmFtZWJ1ZmZl
cjo6ZGVsZXRlT2JqZWN0SW1wbCgKIGJvb2wgV2ViR0xGcmFtZWJ1ZmZlcjo6aW5pdGlhbGl6ZVJl
bmRlcmJ1ZmZlcnMoKQogewogICAgIEFTU0VSVChvYmplY3QoKSk7Ci0gICAgaWYgKCFpc0NvbG9y
QXR0YWNoZWQoKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIGJvb2wgaW5pdENvbG9yID0g
ZmFsc2UsIGluaXREZXB0aCA9IGZhbHNlLCBpbml0U3RlbmNpbCA9IGZhbHNlOwogICAgIHVuc2ln
bmVkIGxvbmcgbWFzayA9IDA7CiAgICAgaWYgKGlzVW5pbml0aWFsaXplZChtX2NvbG9yQXR0YWNo
bWVudC5nZXQoKSkpIHsKSW5kZXg6IFdlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xGcmFtZWJ1ZmZl
ci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xGcmFtZWJ1ZmZlci5o
CShyZXZpc2lvbiA3MjEyNCkKKysrIFdlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xGcmFtZWJ1ZmZl
ci5oCSh3b3JraW5nIGNvcHkpCkBAIC01MCw4ICs1MCw5IEBAIHB1YmxpYzoKICAgICAvLyByZWFk
UGl4ZWxzLCBjb3B5VGV4SW1hZ2UyRCwgY29weVRleFN1YkltYWdlMkQgaWYgdGhpcyBmcmFtZWJ1
ZmZlciBpcwogICAgIC8vIGN1cnJlbnRseSBib3VuZC4KICAgICAvLyBSZXR1cm4gZmFsc2UgaWYg
dGhlIGZyYW1lYnVmZmVyIGlzIGluY29tcGxldGU7IG90aGVyd2lzZSBpbml0aWFsaXplCi0gICAg
Ly8gdGhlIGJ1ZmZlcnMgaWYgdGhleSBoYXZlbid0IGJlZW4gaW5pdGlhbGl6ZWQuCi0gICAgYm9v
bCBvbkFjY2VzcygpOworICAgIC8vIHRoZSBidWZmZXJzIGlmIHRoZXkgaGF2ZW4ndCBiZWVuIGlu
aXRpYWxpemVkIGFuZAorICAgIC8vIG5lZWRUb0luaXRpYWxpemVSZW5kZXJidWZmZXJzIGlzIHRy
dWUuCisgICAgYm9vbCBvbkFjY2Vzcyhib29sIG5lZWRUb0luaXRpYWxpemVSZW5kZXJidWZmZXJz
KTsKIAogICAgIC8vIFJldHVybiBmYWxzZSBkb2VzIG5vdCBtZWFuIENPTVBMRVRFLCBtaWdodCBz
dGlsbCBiZSBJTkNPTVBMRVRFLgogICAgIGJvb2wgaXNJbmNvbXBsZXRlKGJvb2wgY2hlY2tJbnRl
cm5hbEZvcm1hdCkgY29uc3Q7CkluZGV4OiBXZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMUmVuZGVy
aW5nQ29udGV4dC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFJl
bmRlcmluZ0NvbnRleHQuY3BwCShyZXZpc2lvbiA3MjEyNCkKKysrIFdlYkNvcmUvaHRtbC9jYW52
YXMvV2ViR0xSZW5kZXJpbmdDb250ZXh0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjIsNiArNjIs
NjUgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCituYW1lc3BhY2UgeworCisgICAgdW5zaWdu
ZWQgYnl0ZXNQZXJDb21wb25lbnQodW5zaWduZWQgdHlwZSkKKyAgICB7CisgICAgICAgIHN3aXRj
aCAodHlwZSkgeworICAgICAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpVTlNJR05FRF9CWVRF
OgorICAgICAgICAgICAgcmV0dXJuIDE7CisgICAgICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6
OlVOU0lHTkVEX1NIT1JUXzVfNl81OgorICAgICAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpV
TlNJR05FRF9TSE9SVF80XzRfNF80OgorICAgICAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpV
TlNJR05FRF9TSE9SVF81XzVfNV8xOgorICAgICAgICAgICAgcmV0dXJuIDI7CisgICAgICAgIGRl
ZmF1bHQ6CisgICAgICAgICAgICBBU1NFUlQoZmFsc2UpOworICAgICAgICAgICAgcmV0dXJuIDA7
CisgICAgICAgIH0KKyAgICB9CisKKyAgICB1bnNpZ25lZCBjb21wb25lbnRzUGVyUGl4ZWwodW5z
aWduZWQgZm9ybWF0LCB1bnNpZ25lZCB0eXBlKQorICAgIHsKKyAgICAgICAgc3dpdGNoICh0eXBl
KSB7CisgICAgICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlVOU0lHTkVEX1NIT1JUXzVfNl81
OgorICAgICAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpVTlNJR05FRF9TSE9SVF80XzRfNF80
OgorICAgICAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpVTlNJR05FRF9TSE9SVF81XzVfNV8x
OgorICAgICAgICAgICAgcmV0dXJuIDE7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgfQorICAgICAgICBzd2l0Y2ggKGZvcm1hdCkgeworICAgICAgICBjYXNl
IEdyYXBoaWNzQ29udGV4dDNEOjpBTFBIQToKKyAgICAgICAgY2FzZSBHcmFwaGljc0NvbnRleHQz
RDo6TFVNSU5BTkNFOgorICAgICAgICAgICAgcmV0dXJuIDE7CisgICAgICAgIGNhc2UgR3JhcGhp
Y3NDb250ZXh0M0Q6OkxVTUlOQU5DRV9BTFBIQToKKyAgICAgICAgICAgIHJldHVybiAyOworICAg
ICAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpSR0I6CisgICAgICAgICAgICByZXR1cm4gMzsK
KyAgICAgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6UkdCQToKKyAgICAgICAgICAgIHJldHVy
biA0OworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgQVNTRVJUKGZhbHNlKTsKKyAgICAg
ICAgICAgIHJldHVybiAwOworICAgICAgICB9CisgICAgfQorCisgICAgLy8gVGhpcyBmdW5jdGlv
biBzaG91bGQgb25seSBiZSBjYWxsZWQgaWYgd2lkdGggYW5kIGhlaWdodCBpcyBub24temVybyBh
bmQKKyAgICAvLyBmb3JtYXQvdHlwZSBhcmUgdmFsaWQuICBSZXR1cm4gMCBpZiBvdmVyZmxvdyBo
YXBwZW5zLgorICAgIHNpemVfdCBpbWFnZVNpemVJbkJ5dGVzKHVuc2lnbmVkIHdpZHRoLCB1bnNp
Z25lZCBoZWlnaHQsIHVuc2lnbmVkIGZvcm1hdCwgdW5zaWduZWQgdHlwZSkKKyAgICB7CisgICAg
ICAgIEFTU0VSVCh3aWR0aCAmJiBoZWlnaHQpOworICAgICAgICBDaGVja2VkSW50PHVpbnQzMl90
PiBjaGVja2VkV2lkdGgod2lkdGgpOworICAgICAgICBDaGVja2VkSW50PHVpbnQzMl90PiBjaGVj
a2VkSGVpZ2h0KGhlaWdodCk7CisgICAgICAgIENoZWNrZWRJbnQ8dWludDMyX3Q+IGNoZWNrZWRC
eXRlc1BlclBpeGVsKGJ5dGVzUGVyQ29tcG9uZW50KHR5cGUpICogY29tcG9uZW50c1BlclBpeGVs
KGZvcm1hdCwgdHlwZSkpOworICAgICAgICBDaGVja2VkSW50PHVpbnQzMl90PiBjaGVja2VkU2l6
ZSA9IGNoZWNrZWRXaWR0aCAqIGNoZWNrZWRIZWlnaHQgKiBjaGVja2VkQnl0ZXNQZXJQaXhlbDsK
KyAgICAgICAgaWYgKGNoZWNrZWRTaXplLnZhbGlkKCkpCisgICAgICAgICAgICByZXR1cm4gY2hl
Y2tlZFNpemUudmFsdWUoKTsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorCit9IC8vIGFub255
bW91cyBuYW1lc3BhY2UKKwogc3RhdGljIGlubGluZSBQbGF0Zm9ybTNET2JqZWN0IG9iamVjdE9y
WmVybyhXZWJHTE9iamVjdCogb2JqZWN0KQogewogICAgIHJldHVybiBvYmplY3QgPyBvYmplY3Qt
Pm9iamVjdCgpIDogMDsKQEAgLTU0MCw3ICs1OTksNyBAQCB2b2lkIFdlYkdMUmVuZGVyaW5nQ29u
dGV4dDo6Y2xlYXIodW5zaWduCiAgICAgICAgIG1fY29udGV4dC0+c3ludGhlc2l6ZUdMRXJyb3Io
R3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfVkFMVUUpOwogICAgICAgICByZXR1cm47CiAgICAg
fQotICAgIGlmIChtX2ZyYW1lYnVmZmVyQmluZGluZyAmJiAhbV9mcmFtZWJ1ZmZlckJpbmRpbmct
Pm9uQWNjZXNzKCkpIHsKKyAgICBpZiAobV9mcmFtZWJ1ZmZlckJpbmRpbmcgJiYgIW1fZnJhbWVi
dWZmZXJCaW5kaW5nLT5vbkFjY2VzcyghaXNSZXNvdXJjZVNhZmUoKSkpIHsKICAgICAgICAgbV9j
b250ZXh0LT5zeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9GUkFN
RUJVRkZFUl9PUEVSQVRJT04pOwogICAgICAgICByZXR1cm47CiAgICAgfQpAQCAtNjE4LDcgKzY3
Nyw3IEBAIHZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojpjb3B5VGV4SW1hZ2UKICAgICAgICAg
bV9jb250ZXh0LT5zeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9W
QUxVRSk7CiAgICAgICAgIHJldHVybjsKICAgICB9Ci0gICAgaWYgKG1fZnJhbWVidWZmZXJCaW5k
aW5nICYmICFtX2ZyYW1lYnVmZmVyQmluZGluZy0+b25BY2Nlc3MoKSkgeworICAgIGlmIChtX2Zy
YW1lYnVmZmVyQmluZGluZyAmJiAhbV9mcmFtZWJ1ZmZlckJpbmRpbmctPm9uQWNjZXNzKCFpc1Jl
c291cmNlU2FmZSgpKSkgewogICAgICAgICBtX2NvbnRleHQtPnN5bnRoZXNpemVHTEVycm9yKEdy
YXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX0ZSQU1FQlVGRkVSX09QRVJBVElPTik7CiAgICAgICAg
IHJldHVybjsKICAgICB9CkBAIC02NDMsNyArNzAyLDcgQEAgdm9pZCBXZWJHTFJlbmRlcmluZ0Nv
bnRleHQ6OmNvcHlUZXhTdWJJbQogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAgICAg
fQotICAgIGlmIChtX2ZyYW1lYnVmZmVyQmluZGluZyAmJiAhbV9mcmFtZWJ1ZmZlckJpbmRpbmct
Pm9uQWNjZXNzKCkpIHsKKyAgICBpZiAobV9mcmFtZWJ1ZmZlckJpbmRpbmcgJiYgIW1fZnJhbWVi
dWZmZXJCaW5kaW5nLT5vbkFjY2VzcyghaXNSZXNvdXJjZVNhZmUoKSkpIHsKICAgICAgICAgbV9j
b250ZXh0LT5zeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9GUkFN
RUJVRkZFUl9PUEVSQVRJT04pOwogICAgICAgICByZXR1cm47CiAgICAgfQpAQCAtMTA3NCw3ICsx
MTMzLDcgQEAgdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmRyYXdBcnJheXModQogICAgICAg
ICB9CiAgICAgfQogCi0gICAgaWYgKG1fZnJhbWVidWZmZXJCaW5kaW5nICYmICFtX2ZyYW1lYnVm
ZmVyQmluZGluZy0+b25BY2Nlc3MoKSkgeworICAgIGlmIChtX2ZyYW1lYnVmZmVyQmluZGluZyAm
JiAhbV9mcmFtZWJ1ZmZlckJpbmRpbmctPm9uQWNjZXNzKCFpc1Jlc291cmNlU2FmZSgpKSkgewog
ICAgICAgICBtX2NvbnRleHQtPnN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJ
TlZBTElEX0ZSQU1FQlVGRkVSX09QRVJBVElPTik7CiAgICAgICAgIHJldHVybjsKICAgICB9CkBA
IC0xMTM4LDcgKzExOTcsNyBAQCB2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6ZHJhd0VsZW1l
bnRzCiAgICAgICAgIH0KICAgICB9CiAKLSAgICBpZiAobV9mcmFtZWJ1ZmZlckJpbmRpbmcgJiYg
IW1fZnJhbWVidWZmZXJCaW5kaW5nLT5vbkFjY2VzcygpKSB7CisgICAgaWYgKG1fZnJhbWVidWZm
ZXJCaW5kaW5nICYmICFtX2ZyYW1lYnVmZmVyQmluZGluZy0+b25BY2Nlc3MoIWlzUmVzb3VyY2VT
YWZlKCkpKSB7CiAgICAgICAgIG1fY29udGV4dC0+c3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3ND
b250ZXh0M0Q6OklOVkFMSURfRlJBTUVCVUZGRVJfT1BFUkFUSU9OKTsKICAgICAgICAgcmV0dXJu
OwogICAgIH0KQEAgLTIyNDMsNyArMjMwMiw3IEBAIHZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0
OjpyZWFkUGl4ZWxzKGwKICAgICAgICAgbV9jb250ZXh0LT5zeW50aGVzaXplR0xFcnJvcihHcmFw
aGljc0NvbnRleHQzRDo6SU5WQUxJRF9PUEVSQVRJT04pOwogICAgICAgICByZXR1cm47CiAgICAg
fQotICAgIGlmIChtX2ZyYW1lYnVmZmVyQmluZGluZyAmJiAhbV9mcmFtZWJ1ZmZlckJpbmRpbmct
Pm9uQWNjZXNzKCkpIHsKKyAgICBpZiAobV9mcmFtZWJ1ZmZlckJpbmRpbmcgJiYgIW1fZnJhbWVi
dWZmZXJCaW5kaW5nLT5vbkFjY2VzcyghaXNSZXNvdXJjZVNhZmUoKSkpIHsKICAgICAgICAgbV9j
b250ZXh0LT5zeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9GUkFN
RUJVRkZFUl9PUEVSQVRJT04pOwogICAgICAgICByZXR1cm47CiAgICAgfQpAQCAtMjQ0Myw2ICsy
NTAyLDE3IEBAIHZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp0ZXhJbWFnZTJEQmEKICAgICAg
ICAgICAgIHJldHVybjsKICAgICAgICAgfQogICAgIH0KKyAgICBPd25BcnJheVB0cjx1bnNpZ25l
ZCBjaGFyPiB6ZXJvOworICAgIGlmICghcGl4ZWxzICYmICFpc1Jlc291cmNlU2FmZSgpICYmIHdp
ZHRoICYmIGhlaWdodCkgeworICAgICAgICBzaXplX3Qgc2l6ZSA9IGltYWdlU2l6ZUluQnl0ZXMo
d2lkdGgsIGhlaWdodCwgZm9ybWF0LCB0eXBlKTsKKyAgICAgICAgaWYgKCFzaXplKSB7CisgICAg
ICAgICAgICBtX2NvbnRleHQtPnN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJ
TlZBTElEX1ZBTFVFKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICB6
ZXJvLnNldChuZXcgdW5zaWduZWQgY2hhcltzaXplXSk7CisgICAgICAgIG1lbXNldCh6ZXJvLmdl
dCgpLCAwLCBzaXplKTsKKyAgICAgICAgcGl4ZWxzID0gemVyby5nZXQoKTsKKyAgICB9CiAgICAg
bV9jb250ZXh0LT50ZXhJbWFnZTJEKHRhcmdldCwgbGV2ZWwsIGludGVybmFsZm9ybWF0LCB3aWR0
aCwgaGVpZ2h0LAogICAgICAgICAgICAgICAgICAgICAgICAgICBib3JkZXIsIGZvcm1hdCwgdHlw
ZSwgcGl4ZWxzKTsKICAgICB0ZXgtPnNldExldmVsSW5mbyh0YXJnZXQsIGxldmVsLCBpbnRlcm5h
bGZvcm1hdCwgd2lkdGgsIGhlaWdodCwgdHlwZSk7CkluZGV4OiBXZWJLaXQvY2hyb21pdW0vQ2hh
bmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cJKHJldmlzaW9u
IDcyMTQ4KQorKysgV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAt
MSwzICsxLDEyIEBACisyMDEwLTExLTE2ICBaaGVueWFvIE1vICA8em1vQGdvb2dsZS5jb20+CisK
KyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgV2ViR0xSZW5k
ZXJpbmdDb250ZXh0IG5lZWRzIHRvIHplcm8gdGV4dHVyZXMgYW5kIHJlbmRlcmJ1ZmZlcnMKKyAg
ICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTQ5MzU1CisKKyAg
ICAgICAgKiBzcmMvV2ViR3JhcGhpY3NDb250ZXh0M0REZWZhdWx0SW1wbC5jcHA6IERvbid0IGRl
YWwgd2l0aCB0ZXh0dXJlIGluaXRpYWxpemF0aW9uIGF0IHRoaXMgbGV2ZWwuCisKIDIwMTAtMTEt
MTEgIFpoZW55YW8gTW8gIDx6bW9AZ29vZ2xlLmNvbT4KIAogICAgICAgICBSZXZpZXdlZCBieSBL
ZW5uZXRoIFJ1c3NlbGwuCkluZGV4OiBXZWJLaXQvY2hyb21pdW0vc3JjL1dlYkdyYXBoaWNzQ29u
dGV4dDNERGVmYXVsdEltcGwuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdC9jaHJvbWl1bS9zcmMv
V2ViR3JhcGhpY3NDb250ZXh0M0REZWZhdWx0SW1wbC5jcHAJKHJldmlzaW9uIDcyMTI0KQorKysg
V2ViS2l0L2Nocm9taXVtL3NyYy9XZWJHcmFwaGljc0NvbnRleHQzRERlZmF1bHRJbXBsLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMTI0MSw3MCArMTI0MSw3IEBAIERFTEVHQVRFX1RPX0dMXzIoc2Ft
cGxlQ292ZXJhZ2UsIFNhbXBsZUMKIAogREVMRUdBVEVfVE9fR0xfNChzY2lzc29yLCBTY2lzc29y
LCBsb25nLCBsb25nLCB1bnNpZ25lZCBsb25nLCB1bnNpZ25lZCBsb25nKQogCi11bnNpZ25lZCBi
eXRlc1BlckNvbXBvbmVudCh1bnNpZ25lZCB0eXBlKQotewotICAgIHN3aXRjaCAodHlwZSkgewot
ICAgIGNhc2UgR0xfQllURToKLSAgICBjYXNlIEdMX1VOU0lHTkVEX0JZVEU6Ci0gICAgICAgIHJl
dHVybiAxOwotICAgIGNhc2UgR0xfU0hPUlQ6Ci0gICAgY2FzZSBHTF9VTlNJR05FRF9TSE9SVDoK
LSAgICBjYXNlIEdMX1VOU0lHTkVEX1NIT1JUXzVfNl81OgotICAgIGNhc2UgR0xfVU5TSUdORURf
U0hPUlRfNF80XzRfNDoKLSAgICBjYXNlIEdMX1VOU0lHTkVEX1NIT1JUXzVfNV81XzE6Ci0gICAg
ICAgIHJldHVybiAyOwotICAgIGNhc2UgR0xfRkxPQVQ6Ci0gICAgICAgIHJldHVybiA0OwotICAg
IGRlZmF1bHQ6Ci0gICAgICAgIHJldHVybiA0OwotICAgIH0KLX0KLQotdW5zaWduZWQgY29tcG9u
ZW50c1BlclBpeGVsKHVuc2lnbmVkIGZvcm1hdCwgdW5zaWduZWQgdHlwZSkKLXsKLSAgICBzd2l0
Y2ggKHR5cGUpIHsKLSAgICBjYXNlIEdMX1VOU0lHTkVEX1NIT1JUXzVfNl81OgotICAgIGNhc2Ug
R0xfVU5TSUdORURfU0hPUlRfNF80XzRfNDoKLSAgICBjYXNlIEdMX1VOU0lHTkVEX1NIT1JUXzVf
NV81XzE6Ci0gICAgICAgIHJldHVybiAxOwotICAgIGRlZmF1bHQ6Ci0gICAgICAgIGJyZWFrOwot
ICAgIH0KLSAgICBzd2l0Y2ggKGZvcm1hdCkgewotICAgIGNhc2UgR0xfTFVNSU5BTkNFOgotICAg
ICAgICByZXR1cm4gMTsKLSAgICBjYXNlIEdMX0xVTUlOQU5DRV9BTFBIQToKLSAgICAgICAgcmV0
dXJuIDI7Ci0gICAgY2FzZSBHTF9SR0I6Ci0gICAgICAgIHJldHVybiAzOwotICAgIGNhc2UgR0xf
UkdCQToKLSAgICBjYXNlIEdMX0JHUkFfRVhUOgotICAgICAgICByZXR1cm4gNDsKLSAgICBkZWZh
dWx0OgotICAgICAgICByZXR1cm4gNDsKLSAgICB9Ci19Ci0KLS8vIE4uQi46ICBUaGlzIGNvZGUg
ZG9lcyBub3QgcHJvdGVjdCBhZ2FpbnN0IGludGVnZXIgb3ZlcmZsb3cgKGFzIHRoZSBjb21tYW5k
Ci0vLyBidWZmZXIgaW1wbGVtZW50YXRpb24gZG9lcyksIHNvIGl0IHNob3VsZCBub3QgYmUgY29u
c2lkZXJlZCByb2J1c3QgZW5vdWdoCi0vLyBmb3IgdXNlIGluIHRoZSBicm93c2VyLiAgU2luY2Ug
dGhpcyBpbXBsZW1lbnRhdGlvbiBpcyBvbmx5IHVzZWQgZm9yIGxheW91dAotLy8gdGVzdHMsIHRo
aXMgc2hvdWxkIGJlIG9rIGZvciBub3cuCi1zaXplX3QgaW1hZ2VTaXplSW5CeXRlcyh1bnNpZ25l
ZCB3aWR0aCwgdW5zaWduZWQgaGVpZ2h0LCB1bnNpZ25lZCBmb3JtYXQsIHVuc2lnbmVkIHR5cGUp
Ci17Ci0gICAgcmV0dXJuIHdpZHRoICogaGVpZ2h0ICogYnl0ZXNQZXJDb21wb25lbnQodHlwZSkg
KiBjb21wb25lbnRzUGVyUGl4ZWwoZm9ybWF0LCB0eXBlKTsKLX0KLQotdm9pZCBXZWJHcmFwaGlj
c0NvbnRleHQzRERlZmF1bHRJbXBsOjp0ZXhJbWFnZTJEKHVuc2lnbmVkIHRhcmdldCwgdW5zaWdu
ZWQgbGV2ZWwsIHVuc2lnbmVkIGludGVybmFsRm9ybWF0LCB1bnNpZ25lZCB3aWR0aCwgdW5zaWdu
ZWQgaGVpZ2h0LCB1bnNpZ25lZCBib3JkZXIsIHVuc2lnbmVkIGZvcm1hdCwgdW5zaWduZWQgdHlw
ZSwgY29uc3Qgdm9pZCogcGl4ZWxzKQotewotICAgIE93bkFycmF5UHRyPHVpbnQ4PiB6ZXJvOwot
ICAgIGlmICghcGl4ZWxzKSB7Ci0gICAgICAgIHNpemVfdCBzaXplID0gaW1hZ2VTaXplSW5CeXRl
cyh3aWR0aCwgaGVpZ2h0LCBmb3JtYXQsIHR5cGUpOwotICAgICAgICB6ZXJvLnNldChuZXcgdWlu
dDhbc2l6ZV0pOwotICAgICAgICBtZW1zZXQoemVyby5nZXQoKSwgMCwgc2l6ZSk7Ci0gICAgICAg
IHBpeGVscyA9IHplcm8uZ2V0KCk7Ci0gICAgfQotICAgIGdsVGV4SW1hZ2UyRCh0YXJnZXQsIGxl
dmVsLCBpbnRlcm5hbEZvcm1hdCwgd2lkdGgsIGhlaWdodCwgYm9yZGVyLCBmb3JtYXQsIHR5cGUs
IHBpeGVscyk7Ci19CitERUxFR0FURV9UT19HTF85KHRleEltYWdlMkQsIFRleEltYWdlMkQsIHVu
c2lnbmVkLCB1bnNpZ25lZCwgdW5zaWduZWQsIHVuc2lnbmVkLCB1bnNpZ25lZCwgdW5zaWduZWQs
IHVuc2lnbmVkLCB1bnNpZ25lZCwgY29uc3Qgdm9pZCopCiAKIHZvaWQgV2ViR3JhcGhpY3NDb250
ZXh0M0REZWZhdWx0SW1wbDo6c2hhZGVyU291cmNlKFdlYkdMSWQgc2hhZGVyLCBjb25zdCBjaGFy
KiBzdHJpbmcpCiB7CkluZGV4OiBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
TGF5b3V0VGVzdHMvQ2hhbmdlTG9nCShyZXZpc2lvbiA3MjE0OCkKKysrIExheW91dFRlc3RzL0No
YW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDEzIEBACisyMDEwLTExLTE2ICBaaGVu
eWFvIE1vICA8em1vQGdvb2dsZS5jb20+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChP
T1BTISkuCisKKyAgICAgICAgV2ViR0xSZW5kZXJpbmdDb250ZXh0IG5lZWRzIHRvIHplcm8gdGV4
dHVyZXMgYW5kIHJlbmRlcmJ1ZmZlcnMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTQ5MzU1CisKKyAgICAgICAgKiBmYXN0L2NhbnZhcy93ZWJnbC91bmlu
aXRpYWxpemVkLXRlc3QtZXhwZWN0ZWQudHh0OiBBZGRlZC4KKyAgICAgICAgKiBmYXN0L2NhbnZh
cy93ZWJnbC91bmluaXRpYWxpemVkLXRlc3QuaHRtbDogQWRkZWQuCisKIDIwMTAtMTEtMTYgIERh
dmUgSHlhdHQgIDxoeWF0dEBhcHBsZS5jb20+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgRGFuIEJl
cm5zdGVpbi4KSW5kZXg6IExheW91dFRlc3RzL2Zhc3QvY2FudmFzL3dlYmdsL3VuaW5pdGlhbGl6
ZWQtdGVzdC1leHBlY3RlZC50eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvZmFzdC9jYW52
YXMvd2ViZ2wvdW5pbml0aWFsaXplZC10ZXN0LWV4cGVjdGVkLnR4dAkocmV2aXNpb24gMCkKKysr
IExheW91dFRlc3RzL2Zhc3QvY2FudmFzL3dlYmdsL3VuaW5pdGlhbGl6ZWQtdGVzdC1leHBlY3Rl
ZC50eHQJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMTMgQEAKK1Rlc3RzIHRvIGNoZWNrIHVzZXIg
Y29kZSBjYW5ub3QgYWNjZXNzIHVuaW5pdGlhbGl6ZWQgZGF0YSBmcm9tIEdMIHJlc291cmNlcy4K
KworT24gc3VjY2VzcywgeW91IHdpbGwgc2VlIGEgc2VyaWVzIG9mICJQQVNTIiBtZXNzYWdlcywg
Zm9sbG93ZWQgYnkgIlRFU1QgQ09NUExFVEUiLgorCitQQVNTIENvbnRleHQgY3JlYXRlZC4KK1Jl
YWRpbmcgYW4gdW5pbml0aWFsaXplZCB0ZXh0dXJlIHNob3VsZCBzdWNjZWVkIHdpdGggYWxsIGJ5
dGVzIHNldCB0byAwLgorUEFTUyBBbGwgZGF0YSBpbml0aWFsaXplZAorUEFTUyBnZXRFcnJvciB3
YXMgZXhwZWN0ZWQgdmFsdWU6IE5PX0VSUk9SIDogCisKK1BBU1Mgc3VjY2Vzc2Z1bGx5UGFyc2Vk
IGlzIHRydWUKKworVEVTVCBDT01QTEVURQorCkluZGV4OiBMYXlvdXRUZXN0cy9mYXN0L2NhbnZh
cy93ZWJnbC91bmluaXRpYWxpemVkLXRlc3QuaHRtbAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0
cy9mYXN0L2NhbnZhcy93ZWJnbC91bmluaXRpYWxpemVkLXRlc3QuaHRtbAkocmV2aXNpb24gMCkK
KysrIExheW91dFRlc3RzL2Zhc3QvY2FudmFzL3dlYmdsL3VuaW5pdGlhbGl6ZWQtdGVzdC5odG1s
CShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDkxIEBACis8IWRvY3R5cGUgaHRtbD4KKzxodG1sPgor
PGhlYWQ+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRt
bDsgY2hhcnNldD11dGYtOCI+Cis8dGl0bGU+V2ViR0wgVW5pbml0aWFsaXplZCBHTCBSZXNvdXJj
ZXMgVGVzdHM8L3RpdGxlPgorPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSIuLi8uLi9qcy9y
ZXNvdXJjZXMvanMtdGVzdC1zdHlsZS5jc3MiLz4KKzxzY3JpcHQgc3JjPSIuLi8uLi9qcy9yZXNv
dXJjZXMvanMtdGVzdC1wcmUuanMiPjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9InJlc291cmNlcy93
ZWJnbC10ZXN0LmpzIj48L3NjcmlwdD4KKzwvaGVhZD4KKzxib2R5PgorPGRpdiBpZD0iZGVzY3Jp
cHRpb24iPjwvZGl2PgorPGRpdiBpZD0iY29uc29sZSI+PC9kaXY+Cis8Y2FudmFzIGlkPSJjYW52
YXMiIHdpZHRoPSIyIiBoZWlnaHQ9IjIiPiA8L2NhbnZhcz4KKzxzY3JpcHQ+CitkZXNjcmlwdGlv
bigiVGVzdHMgdG8gY2hlY2sgdXNlciBjb2RlIGNhbm5vdCBhY2Nlc3MgdW5pbml0aWFsaXplZCBk
YXRhIGZyb20gR0wgcmVzb3VyY2VzLiIpOworCit2YXIgY2FudmFzID0gZG9jdW1lbnQuZ2V0RWxl
bWVudEJ5SWQoImNhbnZhcyIpOwordmFyIGdsID0gY3JlYXRlM0RDb250ZXh0KGNhbnZhcyk7Citp
ZiAoIWdsKQorICB0ZXN0RmFpbGVkKCJDb250ZXh0IGNyZWF0ZWQuIik7CitlbHNlCisgIHRlc3RQ
YXNzZWQoIkNvbnRleHQgY3JlYXRlZC4iKTsKKworZGVidWcoIlJlYWRpbmcgYW4gdW5pbml0aWFs
aXplZCB0ZXh0dXJlIHNob3VsZCBzdWNjZWVkIHdpdGggYWxsIGJ5dGVzIHNldCB0byAwLiIpOwor
Cit2YXIgd2lkdGggPSA1MTI7Cit2YXIgaGVpZ2h0ID0gNTEyOwordmFyIGJwcCA9IDQ7Cit2YXIg
ZXhwZWN0ZWREYXRhTGVuZ3RoID0gd2lkdGgqaGVpZ2h0KmJwcDsKKwordmFyIHRleCA9IGdsLmNy
ZWF0ZVRleHR1cmUoKTsKK2dsLmJpbmRUZXh0dXJlKGdsLlRFWFRVUkVfMkQsIHRleCk7CitnbC50
ZXhJbWFnZTJEKGdsLlRFWFRVUkVfMkQsIDAsIGdsLlJHQkEsIHdpZHRoLCBoZWlnaHQsIDAsIGds
LlJHQkEsIGdsLlVOU0lHTkVEX0JZVEUsIG51bGwpOworCisvLyB0aGlzIGNhbiBiZSBxdWl0ZSB1
bmRldGVybWluaXN0aWMgc28gdG8gaW1wcm92ZSBvZGRzIG9mIHNlZWluZyB1bmluaXRpYWxpemVk
IGRhdGEgd3JpdGUgYml0cworLy8gaW50byB0ZXggdGhlbiBkZWxldGUgdGV4dHVyZSB0aGVuIHJl
LWNyZWF0ZSBvbmUgd2l0aCBzYW1lIGNoYXJhY3RlcmlzdGljcyAoZHJpdmVyIHdpbGwgbGlrZWx5
IHJldXNlIG1lbSkKKy8vIHdpdGggdGhpcyB0cmljayBvbiByNTkwNDYgV2ViS2l0L09TWCBJIGdl
dCBGQUlMIDEwMCUgb2YgdGhlIHRpbWUgaW5zdGVhZCBvZiB+MTUlIG9mIHRoZSB0aW1lLgorCit2
YXIgYmFkRGF0YSA9IG5ldyBVaW50OEFycmF5KGV4cGVjdGVkRGF0YUxlbmd0aCk7Citmb3IgKHZh
ciBpID0gMDsgaSA8IGJhZERhdGEubGVuZ3RoOyArK2kpCisgICAgYmFkRGF0YVtpXSA9IGkgJSAy
NTU7CisKK2dsLnRleFN1YkltYWdlMkQoZ2wuVEVYVFVSRV8yRCwgMCwgMCwgMCwgd2lkdGgsIGhl
aWdodCwgZ2wuUkdCQSwgZ2wuVU5TSUdORURfQllURSwgYmFkRGF0YSk7CitnbC5maW5pc2goKTsg
Ly8gbWFrZSBzdXJlIGl0IGhhcyBiZWVuIHVwbG9hZGVkCisKK2dsLmRlbGV0ZVRleHR1cmUodGV4
KTsKK2dsLmZpbmlzaCgpOyAvLyBtYWtlIHN1cmUgaXQgaGFzIGJlZW4gZGVsZXRlZAorCit2YXIg
dGV4ID0gZ2wuY3JlYXRlVGV4dHVyZSgpOworZ2wuYmluZFRleHR1cmUoZ2wuVEVYVFVSRV8yRCwg
dGV4KTsKK2dsLnRleEltYWdlMkQoZ2wuVEVYVFVSRV8yRCwgMCwgZ2wuUkdCQSwgd2lkdGgsIGhl
aWdodCwgMCwgZ2wuUkdCQSwgZ2wuVU5TSUdORURfQllURSwgbnVsbCk7CisKK3ZhciBmYiA9IGds
LmNyZWF0ZUZyYW1lYnVmZmVyKCk7CitnbC5iaW5kRnJhbWVidWZmZXIoZ2wuRlJBTUVCVUZGRVIs
IGZiKTsKK2dsLmZyYW1lYnVmZmVyVGV4dHVyZTJEKGdsLkZSQU1FQlVGRkVSLCBnbC5DT0xPUl9B
VFRBQ0hNRU5UMCwgZ2wuVEVYVFVSRV8yRCwgdGV4LCAwKTsKKworZGF0YSA9IG5ldyBVaW50OEFy
cmF5KHdpZHRoICogaGVpZ2h0ICogNCk7CitnbC5yZWFkUGl4ZWxzKDAsIDAsIHdpZHRoLCBoZWln
aHQsIGdsLlJHQkEsIGdsLlVOU0lHTkVEX0JZVEUsIGRhdGEpOworCitpZiAoZGF0YS5sZW5ndGgg
IT0gZXhwZWN0ZWREYXRhTGVuZ3RoKSB7CisgICAgdGVzdEZhaWxlZCgiZXhwZWN0ZWQgZGF0YSBs
ZW5ndGggIiArIGV4cGVjdGVkRGF0YUxlbmd0aCArICIgYnV0IGdvdCAiICsgZGF0YS5sZW5ndGgg
KyAiIGluc3RlYWQuIik7Cit9IGVsc2UgeworICAgIHZhciBrID0gMDsKKyAgICBmb3IgKHZhciBp
ID0gMDsgaSA8IGRhdGEubGVuZ3RoOyArK2kpIHsKKwlpZiAoZGF0YVtpXSAhPSAwKSB7CisJICAg
IGsrKzsKKwl9CisgICAgfQorCisgICAgaWYgKGspIHsKKwl0ZXN0RmFpbGVkKCJGb3VuZCAiICsg
ayArICIgbm9uLXplcm8gYnl0ZXMiKTsKKyAgICB9IGVsc2UgeworCXRlc3RQYXNzZWQoIkFsbCBk
YXRhIGluaXRpYWxpemVkIik7CisgICAgfQorfQorCitnbEVycm9yU2hvdWxkQmUoZ2wsIGdsLk5P
X0VSUk9SKTsKKworLy9UT0RPOiB1bmluaXRpYWxpemVkIHZlcnRleCBhcnJheSBidWZmZXIKKy8v
VE9ETzogdW5pbml0aWFsaXplZCB2ZXJ0ZXggZWxlbWVudHMgYnVmZmVyCisvL1RPRE86IHVuaW5p
dGlhbGl6ZWQgZnJhbWVidWZmZXI/IChpbXBsZW1lbnRhdGlvbnMgd291bGQgbmVlZCB0byBkbyBh
IEdMIGNsZWFyIGF0IGZpcnN0IGJpbmRpbmc/KQorLy9UT0RPOiB1bmluaXRpYWxpemVkIHJlbmRl
cmJ1ZmZlcj8gKGltcGxlbWVudGF0aW9ucyB3b3VsZCBuZWVkIHRvIGRvIGEgR0wgY2xlYXIgYXQg
Zmlyc3QgYmluZGluZz8pCisvL1RPRE86IHVuaW5pdGlhbGl6ZWQgdW5pZm9ybSBhcnJheXM/CisK
K2RlYnVnKCIiKTsKK3N1Y2Nlc3NmdWxseVBhcnNlZCA9IHRydWU7Cis8L3NjcmlwdD4KKzxzY3Jp
cHQgc3JjPSIuLi8uLi9qcy9yZXNvdXJjZXMvanMtdGVzdC1wb3N0LmpzIj48L3NjcmlwdD4KKzwv
Ym9keT4KKzwvaHRtbD4KKwo=
</data>
<flag name="review"
          id="64598"
          type_id="1"
          status="-"
          setter="kbr"
    />
    <flag name="commit-queue"
          id="64599"
          type_id="3"
          status="-"
          setter="zmo"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>74140</attachid>
            <date>2010-11-17 11:46:46 -0800</date>
            <delta_ts>2010-12-06 17:34:12 -0800</delta_ts>
            <desc>revised patch: responding to kbr&apos;s review</desc>
            <filename>init.patch</filename>
            <type>text/plain</type>
            <size>16745</size>
            <attacher name="Zhenyao Mo">zmo</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA3MjE0OCkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMjUgQEAKKzIwMTAtMTEtMTYgIFpoZW55YW8gTW8gIDx6bW9AZ29vZ2xlLmNvbT4K
KworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBXZWJHTFJl
bmRlcmluZ0NvbnRleHQgbmVlZHMgdG8gemVybyB0ZXh0dXJlcyBhbmQgcmVuZGVyYnVmZmVycwor
ICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NDkzNTUKKwor
ICAgICAgICBUZXN0OiBmYXN0L2NhbnZhcy93ZWJnbC91bmluaXRpYWxpemVkLXRlc3QuaHRtbAor
CisgICAgICAgICogaHRtbC9jYW52YXMvV2ViR0xGcmFtZWJ1ZmZlci5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpXZWJHTEZyYW1lYnVmZmVyOjpvbkFjY2Vzcyk6IFVzZSBhIHBhcmFtZXRlciB0byBk
ZWNpZGUgaWYgcmVuZGVyYnVmZmVyIGluaXRpYWxpemF0aW9uIGlzIG5lZWRlZC4KKyAgICAgICAg
KFdlYkNvcmU6OldlYkdMRnJhbWVidWZmZXI6OmluaXRpYWxpemVSZW5kZXJidWZmZXJzKTogRG9u
J3QgcmV0dXJuIGZhbHNlIGlmIGNvbG9yIGJ1ZmZlciBkb2Vzbid0IGV4aXN0LgorICAgICAgICAq
IGh0bWwvY2FudmFzL1dlYkdMRnJhbWVidWZmZXIuaDogTW9kaWZ5IG9uQWNjZXNzIGZ1bmN0aW9u
IHNpZ25hdHVyZS4KKyAgICAgICAgKiBodG1sL2NhbnZhcy9XZWJHTFJlbmRlcmluZ0NvbnRleHQu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0OjpjbGVhcik6IENh
bGwgb25BY2Nlc3Mgd2l0aCBhbiBhZGRlZCBwYXJhbWV0ZXIuCisgICAgICAgIChXZWJDb3JlOjpX
ZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmNvcHlUZXhJbWFnZTJEKTogRGl0dG8uCisgICAgICAgIChX
ZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmNvcHlUZXhTdWJJbWFnZTJEKTogRGl0dG8u
CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmRyYXdBcnJheXMpOiBE
aXR0by4KKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dDo6ZHJhd0VsZW1l
bnRzKTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnJl
YWRQaXhlbHMpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4
dDo6dGV4SW1hZ2UyREJhc2UpOiBDcmVhdGUgYnVmZmVyIGRhdGEgb2YgMHMgaWYgaW5wdXQgaXMg
bnVsbCB0byBpbml0aWFsaXplIHRleHR1cmVzLgorCiAyMDEwLTExLTE2ICBBbmRlcnMgQ2FybHNz
b24gIDxhbmRlcnNjYUBhcHBsZS5jb20+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgSm9obiBTdWxs
aXZhbi4KSW5kZXg6IFdlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xGcmFtZWJ1ZmZlci5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTEZyYW1lYnVmZmVyLmNwcAkocmV2
aXNpb24gNzIxMjQpCisrKyBXZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMRnJhbWVidWZmZXIuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0xODAsMTEgKzE4MCwxMyBAQCBib29sIFdlYkdMRnJhbWVidWZm
ZXI6OmlzSW5jb21wbGV0ZShib29sCiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi1ib29sIFdlYkdM
RnJhbWVidWZmZXI6Om9uQWNjZXNzKCkKK2Jvb2wgV2ViR0xGcmFtZWJ1ZmZlcjo6b25BY2Nlc3Mo
Ym9vbCBuZWVkVG9Jbml0aWFsaXplUmVuZGVyYnVmZmVycykKIHsKICAgICBpZiAoaXNJbmNvbXBs
ZXRlKHRydWUpKQogICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgcmV0dXJuIGluaXRpYWxpemVS
ZW5kZXJidWZmZXJzKCk7CisgICAgaWYgKG5lZWRUb0luaXRpYWxpemVSZW5kZXJidWZmZXJzKQor
ICAgICAgICByZXR1cm4gaW5pdGlhbGl6ZVJlbmRlcmJ1ZmZlcnMoKTsKKyAgICByZXR1cm4gdHJ1
ZTsKIH0KIAogdm9pZCBXZWJHTEZyYW1lYnVmZmVyOjpkZWxldGVPYmplY3RJbXBsKFBsYXRmb3Jt
M0RPYmplY3Qgb2JqZWN0KQpAQCAtMjAwLDggKzIwMiw2IEBAIHZvaWQgV2ViR0xGcmFtZWJ1ZmZl
cjo6ZGVsZXRlT2JqZWN0SW1wbCgKIGJvb2wgV2ViR0xGcmFtZWJ1ZmZlcjo6aW5pdGlhbGl6ZVJl
bmRlcmJ1ZmZlcnMoKQogewogICAgIEFTU0VSVChvYmplY3QoKSk7Ci0gICAgaWYgKCFpc0NvbG9y
QXR0YWNoZWQoKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIGJvb2wgaW5pdENvbG9yID0g
ZmFsc2UsIGluaXREZXB0aCA9IGZhbHNlLCBpbml0U3RlbmNpbCA9IGZhbHNlOwogICAgIHVuc2ln
bmVkIGxvbmcgbWFzayA9IDA7CiAgICAgaWYgKGlzVW5pbml0aWFsaXplZChtX2NvbG9yQXR0YWNo
bWVudC5nZXQoKSkpIHsKSW5kZXg6IFdlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xGcmFtZWJ1ZmZl
ci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xGcmFtZWJ1ZmZlci5o
CShyZXZpc2lvbiA3MjEyNCkKKysrIFdlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xGcmFtZWJ1ZmZl
ci5oCSh3b3JraW5nIGNvcHkpCkBAIC01MCw4ICs1MCw5IEBAIHB1YmxpYzoKICAgICAvLyByZWFk
UGl4ZWxzLCBjb3B5VGV4SW1hZ2UyRCwgY29weVRleFN1YkltYWdlMkQgaWYgdGhpcyBmcmFtZWJ1
ZmZlciBpcwogICAgIC8vIGN1cnJlbnRseSBib3VuZC4KICAgICAvLyBSZXR1cm4gZmFsc2UgaWYg
dGhlIGZyYW1lYnVmZmVyIGlzIGluY29tcGxldGU7IG90aGVyd2lzZSBpbml0aWFsaXplCi0gICAg
Ly8gdGhlIGJ1ZmZlcnMgaWYgdGhleSBoYXZlbid0IGJlZW4gaW5pdGlhbGl6ZWQuCi0gICAgYm9v
bCBvbkFjY2VzcygpOworICAgIC8vIHRoZSBidWZmZXJzIGlmIHRoZXkgaGF2ZW4ndCBiZWVuIGlu
aXRpYWxpemVkIGFuZAorICAgIC8vIG5lZWRUb0luaXRpYWxpemVSZW5kZXJidWZmZXJzIGlzIHRy
dWUuCisgICAgYm9vbCBvbkFjY2Vzcyhib29sIG5lZWRUb0luaXRpYWxpemVSZW5kZXJidWZmZXJz
KTsKIAogICAgIC8vIFJldHVybiBmYWxzZSBkb2VzIG5vdCBtZWFuIENPTVBMRVRFLCBtaWdodCBz
dGlsbCBiZSBJTkNPTVBMRVRFLgogICAgIGJvb2wgaXNJbmNvbXBsZXRlKGJvb2wgY2hlY2tJbnRl
cm5hbEZvcm1hdCkgY29uc3Q7CkluZGV4OiBXZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMUmVuZGVy
aW5nQ29udGV4dC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFJl
bmRlcmluZ0NvbnRleHQuY3BwCShyZXZpc2lvbiA3MjEyNCkKKysrIFdlYkNvcmUvaHRtbC9jYW52
YXMvV2ViR0xSZW5kZXJpbmdDb250ZXh0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTksOSArNTks
NjkgQEAKIAogI2luY2x1ZGUgPHd0Zi9CeXRlQXJyYXkuaD4KICNpbmNsdWRlIDx3dGYvT3duQXJy
YXlQdHIuaD4KKyNpbmNsdWRlIDx3dGYvUGFzc093bkFycmF5UHRyLmg+CiAKIG5hbWVzcGFjZSBX
ZWJDb3JlIHsKIAorbmFtZXNwYWNlIHsKKworICAgIHVuc2lnbmVkIGJ5dGVzUGVyQ29tcG9uZW50
KHVuc2lnbmVkIHR5cGUpCisgICAgeworICAgICAgICBzd2l0Y2ggKHR5cGUpIHsKKyAgICAgICAg
Y2FzZSBHcmFwaGljc0NvbnRleHQzRDo6VU5TSUdORURfQllURToKKyAgICAgICAgICAgIHJldHVy
biAxOworICAgICAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpVTlNJR05FRF9TSE9SVF81XzZf
NToKKyAgICAgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6VU5TSUdORURfU0hPUlRfNF80XzRf
NDoKKyAgICAgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6VU5TSUdORURfU0hPUlRfNV81XzVf
MToKKyAgICAgICAgICAgIHJldHVybiAyOworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAg
QVNTRVJUKGZhbHNlKTsKKyAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICB9CisgICAgfQor
CisgICAgdW5zaWduZWQgY29tcG9uZW50c1BlclBpeGVsKHVuc2lnbmVkIGZvcm1hdCwgdW5zaWdu
ZWQgdHlwZSkKKyAgICB7CisgICAgICAgIHN3aXRjaCAodHlwZSkgeworICAgICAgICBjYXNlIEdy
YXBoaWNzQ29udGV4dDNEOjpVTlNJR05FRF9TSE9SVF81XzZfNToKKyAgICAgICAgY2FzZSBHcmFw
aGljc0NvbnRleHQzRDo6VU5TSUdORURfU0hPUlRfNF80XzRfNDoKKyAgICAgICAgY2FzZSBHcmFw
aGljc0NvbnRleHQzRDo6VU5TSUdORURfU0hPUlRfNV81XzVfMToKKyAgICAgICAgICAgIHJldHVy
biAxOworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAg
ICAgICAgc3dpdGNoIChmb3JtYXQpIHsKKyAgICAgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6
QUxQSEE6CisgICAgICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkxVTUlOQU5DRToKKyAgICAg
ICAgICAgIHJldHVybiAxOworICAgICAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpMVU1JTkFO
Q0VfQUxQSEE6CisgICAgICAgICAgICByZXR1cm4gMjsKKyAgICAgICAgY2FzZSBHcmFwaGljc0Nv
bnRleHQzRDo6UkdCOgorICAgICAgICAgICAgcmV0dXJuIDM7CisgICAgICAgIGNhc2UgR3JhcGhp
Y3NDb250ZXh0M0Q6OlJHQkE6CisgICAgICAgICAgICByZXR1cm4gNDsKKyAgICAgICAgZGVmYXVs
dDoKKyAgICAgICAgICAgIEFTU0VSVChmYWxzZSk7CisgICAgICAgICAgICByZXR1cm4gMDsKKyAg
ICAgICAgfQorICAgIH0KKworICAgIC8vIFRoaXMgZnVuY3Rpb24gc2hvdWxkIG9ubHkgYmUgY2Fs
bGVkIGlmIHdpZHRoIGFuZCBoZWlnaHQgaXMgbm9uLXplcm8gYW5kCisgICAgLy8gZm9ybWF0L3R5
cGUgYXJlIHZhbGlkLiAgUmV0dXJuIDAgaWYgb3ZlcmZsb3cgaGFwcGVucy4KKyAgICBzaXplX3Qg
aW1hZ2VTaXplSW5CeXRlcyh1bnNpZ25lZCB3aWR0aCwgdW5zaWduZWQgaGVpZ2h0LCB1bnNpZ25l
ZCBmb3JtYXQsIHVuc2lnbmVkIHR5cGUpCisgICAgeworICAgICAgICBBU1NFUlQod2lkdGggJiYg
aGVpZ2h0KTsKKyAgICAgICAgQ2hlY2tlZEludDx1aW50MzJfdD4gY2hlY2tlZFdpZHRoKHdpZHRo
KTsKKyAgICAgICAgQ2hlY2tlZEludDx1aW50MzJfdD4gY2hlY2tlZEhlaWdodChoZWlnaHQpOwor
ICAgICAgICBDaGVja2VkSW50PHVpbnQzMl90PiBjaGVja2VkQnl0ZXNQZXJQaXhlbChieXRlc1Bl
ckNvbXBvbmVudCh0eXBlKSAqIGNvbXBvbmVudHNQZXJQaXhlbChmb3JtYXQsIHR5cGUpKTsKKyAg
ICAgICAgQ2hlY2tlZEludDx1aW50MzJfdD4gY2hlY2tlZFNpemUgPSBjaGVja2VkV2lkdGggKiBj
aGVja2VkSGVpZ2h0ICogY2hlY2tlZEJ5dGVzUGVyUGl4ZWw7CisgICAgICAgIGlmIChjaGVja2Vk
U2l6ZS52YWxpZCgpKQorICAgICAgICAgICAgcmV0dXJuIGNoZWNrZWRTaXplLnZhbHVlKCk7Cisg
ICAgICAgIHJldHVybiAwOworICAgIH0KKworfSAvLyBhbm9ueW1vdXMgbmFtZXNwYWNlCisKIHN0
YXRpYyBpbmxpbmUgUGxhdGZvcm0zRE9iamVjdCBvYmplY3RPclplcm8oV2ViR0xPYmplY3QqIG9i
amVjdCkKIHsKICAgICByZXR1cm4gb2JqZWN0ID8gb2JqZWN0LT5vYmplY3QoKSA6IDA7CkBAIC01
NDAsNyArNjAwLDcgQEAgdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmNsZWFyKHVuc2lnbgog
ICAgICAgICBtX2NvbnRleHQtPnN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJ
TlZBTElEX1ZBTFVFKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KLSAgICBpZiAobV9mcmFtZWJ1
ZmZlckJpbmRpbmcgJiYgIW1fZnJhbWVidWZmZXJCaW5kaW5nLT5vbkFjY2VzcygpKSB7CisgICAg
aWYgKG1fZnJhbWVidWZmZXJCaW5kaW5nICYmICFtX2ZyYW1lYnVmZmVyQmluZGluZy0+b25BY2Nl
c3MoIWlzUmVzb3VyY2VTYWZlKCkpKSB7CiAgICAgICAgIG1fY29udGV4dC0+c3ludGhlc2l6ZUdM
RXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfRlJBTUVCVUZGRVJfT1BFUkFUSU9OKTsK
ICAgICAgICAgcmV0dXJuOwogICAgIH0KQEAgLTYxOCw3ICs2NzgsNyBAQCB2b2lkIFdlYkdMUmVu
ZGVyaW5nQ29udGV4dDo6Y29weVRleEltYWdlCiAgICAgICAgIG1fY29udGV4dC0+c3ludGhlc2l6
ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfVkFMVUUpOwogICAgICAgICByZXR1
cm47CiAgICAgfQotICAgIGlmIChtX2ZyYW1lYnVmZmVyQmluZGluZyAmJiAhbV9mcmFtZWJ1ZmZl
ckJpbmRpbmctPm9uQWNjZXNzKCkpIHsKKyAgICBpZiAobV9mcmFtZWJ1ZmZlckJpbmRpbmcgJiYg
IW1fZnJhbWVidWZmZXJCaW5kaW5nLT5vbkFjY2VzcyghaXNSZXNvdXJjZVNhZmUoKSkpIHsKICAg
ICAgICAgbV9jb250ZXh0LT5zeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5W
QUxJRF9GUkFNRUJVRkZFUl9PUEVSQVRJT04pOwogICAgICAgICByZXR1cm47CiAgICAgfQpAQCAt
NjQzLDcgKzcwMyw3IEBAIHZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojpjb3B5VGV4U3ViSW0K
ICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQogICAgIH0KLSAgICBpZiAobV9mcmFtZWJ1
ZmZlckJpbmRpbmcgJiYgIW1fZnJhbWVidWZmZXJCaW5kaW5nLT5vbkFjY2VzcygpKSB7CisgICAg
aWYgKG1fZnJhbWVidWZmZXJCaW5kaW5nICYmICFtX2ZyYW1lYnVmZmVyQmluZGluZy0+b25BY2Nl
c3MoIWlzUmVzb3VyY2VTYWZlKCkpKSB7CiAgICAgICAgIG1fY29udGV4dC0+c3ludGhlc2l6ZUdM
RXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfRlJBTUVCVUZGRVJfT1BFUkFUSU9OKTsK
ICAgICAgICAgcmV0dXJuOwogICAgIH0KQEAgLTEwNzQsNyArMTEzNCw3IEBAIHZvaWQgV2ViR0xS
ZW5kZXJpbmdDb250ZXh0OjpkcmF3QXJyYXlzKHUKICAgICAgICAgfQogICAgIH0KIAotICAgIGlm
IChtX2ZyYW1lYnVmZmVyQmluZGluZyAmJiAhbV9mcmFtZWJ1ZmZlckJpbmRpbmctPm9uQWNjZXNz
KCkpIHsKKyAgICBpZiAobV9mcmFtZWJ1ZmZlckJpbmRpbmcgJiYgIW1fZnJhbWVidWZmZXJCaW5k
aW5nLT5vbkFjY2VzcyghaXNSZXNvdXJjZVNhZmUoKSkpIHsKICAgICAgICAgbV9jb250ZXh0LT5z
eW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9GUkFNRUJVRkZFUl9P
UEVSQVRJT04pOwogICAgICAgICByZXR1cm47CiAgICAgfQpAQCAtMTEzOCw3ICsxMTk4LDcgQEAg
dm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmRyYXdFbGVtZW50cwogICAgICAgICB9CiAgICAg
fQogCi0gICAgaWYgKG1fZnJhbWVidWZmZXJCaW5kaW5nICYmICFtX2ZyYW1lYnVmZmVyQmluZGlu
Zy0+b25BY2Nlc3MoKSkgeworICAgIGlmIChtX2ZyYW1lYnVmZmVyQmluZGluZyAmJiAhbV9mcmFt
ZWJ1ZmZlckJpbmRpbmctPm9uQWNjZXNzKCFpc1Jlc291cmNlU2FmZSgpKSkgewogICAgICAgICBt
X2NvbnRleHQtPnN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX0ZS
QU1FQlVGRkVSX09QRVJBVElPTik7CiAgICAgICAgIHJldHVybjsKICAgICB9CkBAIC0yMjQzLDcg
KzIzMDMsNyBAQCB2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6cmVhZFBpeGVscyhsCiAgICAg
ICAgIG1fY29udGV4dC0+c3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFM
SURfT1BFUkFUSU9OKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KLSAgICBpZiAobV9mcmFtZWJ1
ZmZlckJpbmRpbmcgJiYgIW1fZnJhbWVidWZmZXJCaW5kaW5nLT5vbkFjY2VzcygpKSB7CisgICAg
aWYgKG1fZnJhbWVidWZmZXJCaW5kaW5nICYmICFtX2ZyYW1lYnVmZmVyQmluZGluZy0+b25BY2Nl
c3MoIWlzUmVzb3VyY2VTYWZlKCkpKSB7CiAgICAgICAgIG1fY29udGV4dC0+c3ludGhlc2l6ZUdM
RXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfRlJBTUVCVUZGRVJfT1BFUkFUSU9OKTsK
ICAgICAgICAgcmV0dXJuOwogICAgIH0KQEAgLTI0NDMsNiArMjUwMywxNyBAQCB2b2lkIFdlYkdM
UmVuZGVyaW5nQ29udGV4dDo6dGV4SW1hZ2UyREJhCiAgICAgICAgICAgICByZXR1cm47CiAgICAg
ICAgIH0KICAgICB9CisgICAgT3duQXJyYXlQdHI8dW5zaWduZWQgY2hhcj4gemVybzsKKyAgICBp
ZiAoIXBpeGVscyAmJiAhaXNSZXNvdXJjZVNhZmUoKSAmJiB3aWR0aCAmJiBoZWlnaHQpIHsKKyAg
ICAgICAgc2l6ZV90IHNpemUgPSBpbWFnZVNpemVJbkJ5dGVzKHdpZHRoLCBoZWlnaHQsIGZvcm1h
dCwgdHlwZSk7CisgICAgICAgIGlmICghc2l6ZSkgeworICAgICAgICAgICAgbV9jb250ZXh0LT5z
eW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9WQUxVRSk7CisgICAg
ICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgemVybyA9IGFkb3B0QXJyYXlQdHIo
bmV3IHVuc2lnbmVkIGNoYXJbc2l6ZV0pOworICAgICAgICBtZW1zZXQoemVyby5nZXQoKSwgMCwg
c2l6ZSk7CisgICAgICAgIHBpeGVscyA9IHplcm8uZ2V0KCk7CisgICAgfQogICAgIG1fY29udGV4
dC0+dGV4SW1hZ2UyRCh0YXJnZXQsIGxldmVsLCBpbnRlcm5hbGZvcm1hdCwgd2lkdGgsIGhlaWdo
dCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9yZGVyLCBmb3JtYXQsIHR5cGUsIHBpeGVs
cyk7CiAgICAgdGV4LT5zZXRMZXZlbEluZm8odGFyZ2V0LCBsZXZlbCwgaW50ZXJuYWxmb3JtYXQs
IHdpZHRoLCBoZWlnaHQsIHR5cGUpOwpJbmRleDogV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZwo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBXZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCShyZXZpc2lvbiA3MjE0OCkK
KysrIFdlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwx
MiBAQAorMjAxMC0xMS0xNiAgWmhlbnlhbyBNbyAgPHptb0Bnb29nbGUuY29tPgorCisgICAgICAg
IFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFdlYkdMUmVuZGVyaW5nQ29u
dGV4dCBuZWVkcyB0byB6ZXJvIHRleHR1cmVzIGFuZCByZW5kZXJidWZmZXJzCisgICAgICAgIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD00OTM1NQorCisgICAgICAgICog
c3JjL1dlYkdyYXBoaWNzQ29udGV4dDNERGVmYXVsdEltcGwuY3BwOiBEb24ndCBkZWFsIHdpdGgg
dGV4dHVyZSBpbml0aWFsaXphdGlvbiBhdCB0aGlzIGxldmVsLgorCiAyMDEwLTExLTExICBaaGVu
eWFvIE1vICA8em1vQGdvb2dsZS5jb20+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgS2VubmV0aCBS
dXNzZWxsLgpJbmRleDogV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJHcmFwaGljc0NvbnRleHQzRERl
ZmF1bHRJbXBsLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQvY2hyb21pdW0vc3JjL1dlYkdyYXBo
aWNzQ29udGV4dDNERGVmYXVsdEltcGwuY3BwCShyZXZpc2lvbiA3MjEyNCkKKysrIFdlYktpdC9j
aHJvbWl1bS9zcmMvV2ViR3JhcGhpY3NDb250ZXh0M0REZWZhdWx0SW1wbC5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTEyNDEsNzAgKzEyNDEsNyBAQCBERUxFR0FURV9UT19HTF8yKHNhbXBsZUNvdmVy
YWdlLCBTYW1wbGVDCiAKIERFTEVHQVRFX1RPX0dMXzQoc2Npc3NvciwgU2Npc3NvciwgbG9uZywg
bG9uZywgdW5zaWduZWQgbG9uZywgdW5zaWduZWQgbG9uZykKIAotdW5zaWduZWQgYnl0ZXNQZXJD
b21wb25lbnQodW5zaWduZWQgdHlwZSkKLXsKLSAgICBzd2l0Y2ggKHR5cGUpIHsKLSAgICBjYXNl
IEdMX0JZVEU6Ci0gICAgY2FzZSBHTF9VTlNJR05FRF9CWVRFOgotICAgICAgICByZXR1cm4gMTsK
LSAgICBjYXNlIEdMX1NIT1JUOgotICAgIGNhc2UgR0xfVU5TSUdORURfU0hPUlQ6Ci0gICAgY2Fz
ZSBHTF9VTlNJR05FRF9TSE9SVF81XzZfNToKLSAgICBjYXNlIEdMX1VOU0lHTkVEX1NIT1JUXzRf
NF80XzQ6Ci0gICAgY2FzZSBHTF9VTlNJR05FRF9TSE9SVF81XzVfNV8xOgotICAgICAgICByZXR1
cm4gMjsKLSAgICBjYXNlIEdMX0ZMT0FUOgotICAgICAgICByZXR1cm4gNDsKLSAgICBkZWZhdWx0
OgotICAgICAgICByZXR1cm4gNDsKLSAgICB9Ci19Ci0KLXVuc2lnbmVkIGNvbXBvbmVudHNQZXJQ
aXhlbCh1bnNpZ25lZCBmb3JtYXQsIHVuc2lnbmVkIHR5cGUpCi17Ci0gICAgc3dpdGNoICh0eXBl
KSB7Ci0gICAgY2FzZSBHTF9VTlNJR05FRF9TSE9SVF81XzZfNToKLSAgICBjYXNlIEdMX1VOU0lH
TkVEX1NIT1JUXzRfNF80XzQ6Ci0gICAgY2FzZSBHTF9VTlNJR05FRF9TSE9SVF81XzVfNV8xOgot
ICAgICAgICByZXR1cm4gMTsKLSAgICBkZWZhdWx0OgotICAgICAgICBicmVhazsKLSAgICB9Ci0g
ICAgc3dpdGNoIChmb3JtYXQpIHsKLSAgICBjYXNlIEdMX0xVTUlOQU5DRToKLSAgICAgICAgcmV0
dXJuIDE7Ci0gICAgY2FzZSBHTF9MVU1JTkFOQ0VfQUxQSEE6Ci0gICAgICAgIHJldHVybiAyOwot
ICAgIGNhc2UgR0xfUkdCOgotICAgICAgICByZXR1cm4gMzsKLSAgICBjYXNlIEdMX1JHQkE6Ci0g
ICAgY2FzZSBHTF9CR1JBX0VYVDoKLSAgICAgICAgcmV0dXJuIDQ7Ci0gICAgZGVmYXVsdDoKLSAg
ICAgICAgcmV0dXJuIDQ7Ci0gICAgfQotfQotCi0vLyBOLkIuOiAgVGhpcyBjb2RlIGRvZXMgbm90
IHByb3RlY3QgYWdhaW5zdCBpbnRlZ2VyIG92ZXJmbG93IChhcyB0aGUgY29tbWFuZAotLy8gYnVm
ZmVyIGltcGxlbWVudGF0aW9uIGRvZXMpLCBzbyBpdCBzaG91bGQgbm90IGJlIGNvbnNpZGVyZWQg
cm9idXN0IGVub3VnaAotLy8gZm9yIHVzZSBpbiB0aGUgYnJvd3Nlci4gIFNpbmNlIHRoaXMgaW1w
bGVtZW50YXRpb24gaXMgb25seSB1c2VkIGZvciBsYXlvdXQKLS8vIHRlc3RzLCB0aGlzIHNob3Vs
ZCBiZSBvayBmb3Igbm93Lgotc2l6ZV90IGltYWdlU2l6ZUluQnl0ZXModW5zaWduZWQgd2lkdGgs
IHVuc2lnbmVkIGhlaWdodCwgdW5zaWduZWQgZm9ybWF0LCB1bnNpZ25lZCB0eXBlKQotewotICAg
IHJldHVybiB3aWR0aCAqIGhlaWdodCAqIGJ5dGVzUGVyQ29tcG9uZW50KHR5cGUpICogY29tcG9u
ZW50c1BlclBpeGVsKGZvcm1hdCwgdHlwZSk7Ci19Ci0KLXZvaWQgV2ViR3JhcGhpY3NDb250ZXh0
M0REZWZhdWx0SW1wbDo6dGV4SW1hZ2UyRCh1bnNpZ25lZCB0YXJnZXQsIHVuc2lnbmVkIGxldmVs
LCB1bnNpZ25lZCBpbnRlcm5hbEZvcm1hdCwgdW5zaWduZWQgd2lkdGgsIHVuc2lnbmVkIGhlaWdo
dCwgdW5zaWduZWQgYm9yZGVyLCB1bnNpZ25lZCBmb3JtYXQsIHVuc2lnbmVkIHR5cGUsIGNvbnN0
IHZvaWQqIHBpeGVscykKLXsKLSAgICBPd25BcnJheVB0cjx1aW50OD4gemVybzsKLSAgICBpZiAo
IXBpeGVscykgewotICAgICAgICBzaXplX3Qgc2l6ZSA9IGltYWdlU2l6ZUluQnl0ZXMod2lkdGgs
IGhlaWdodCwgZm9ybWF0LCB0eXBlKTsKLSAgICAgICAgemVyby5zZXQobmV3IHVpbnQ4W3NpemVd
KTsKLSAgICAgICAgbWVtc2V0KHplcm8uZ2V0KCksIDAsIHNpemUpOwotICAgICAgICBwaXhlbHMg
PSB6ZXJvLmdldCgpOwotICAgIH0KLSAgICBnbFRleEltYWdlMkQodGFyZ2V0LCBsZXZlbCwgaW50
ZXJuYWxGb3JtYXQsIHdpZHRoLCBoZWlnaHQsIGJvcmRlciwgZm9ybWF0LCB0eXBlLCBwaXhlbHMp
OwotfQorREVMRUdBVEVfVE9fR0xfOSh0ZXhJbWFnZTJELCBUZXhJbWFnZTJELCB1bnNpZ25lZCwg
dW5zaWduZWQsIHVuc2lnbmVkLCB1bnNpZ25lZCwgdW5zaWduZWQsIHVuc2lnbmVkLCB1bnNpZ25l
ZCwgdW5zaWduZWQsIGNvbnN0IHZvaWQqKQogCiB2b2lkIFdlYkdyYXBoaWNzQ29udGV4dDNERGVm
YXVsdEltcGw6OnNoYWRlclNvdXJjZShXZWJHTElkIHNoYWRlciwgY29uc3QgY2hhciogc3RyaW5n
KQogewpJbmRleDogTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRl
c3RzL0NoYW5nZUxvZwkocmV2aXNpb24gNzIxNDgpCisrKyBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cJ
KHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwxMyBAQAorMjAxMC0xMS0xNiAgWmhlbnlhbyBNbyAg
PHptb0Bnb29nbGUuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgor
CisgICAgICAgIFdlYkdMUmVuZGVyaW5nQ29udGV4dCBuZWVkcyB0byB6ZXJvIHRleHR1cmVzIGFu
ZCByZW5kZXJidWZmZXJzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD00OTM1NQorCisgICAgICAgICogZmFzdC9jYW52YXMvd2ViZ2wvdW5pbml0aWFsaXpl
ZC10ZXN0LWV4cGVjdGVkLnR4dDogQWRkZWQuCisgICAgICAgICogZmFzdC9jYW52YXMvd2ViZ2wv
dW5pbml0aWFsaXplZC10ZXN0Lmh0bWw6IEFkZGVkLgorCiAyMDEwLTExLTE2ICBEYXZlIEh5YXR0
ICA8aHlhdHRAYXBwbGUuY29tPgogCiAgICAgICAgIFJldmlld2VkIGJ5IERhbiBCZXJuc3RlaW4u
CkluZGV4OiBMYXlvdXRUZXN0cy9mYXN0L2NhbnZhcy93ZWJnbC91bmluaXRpYWxpemVkLXRlc3Qt
ZXhwZWN0ZWQudHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2Zhc3QvY2FudmFzL3dlYmds
L3VuaW5pdGlhbGl6ZWQtdGVzdC1leHBlY3RlZC50eHQJKHJldmlzaW9uIDApCisrKyBMYXlvdXRU
ZXN0cy9mYXN0L2NhbnZhcy93ZWJnbC91bmluaXRpYWxpemVkLXRlc3QtZXhwZWN0ZWQudHh0CShy
ZXZpc2lvbiAwKQpAQCAtMCwwICsxLDEzIEBACitUZXN0cyB0byBjaGVjayB1c2VyIGNvZGUgY2Fu
bm90IGFjY2VzcyB1bmluaXRpYWxpemVkIGRhdGEgZnJvbSBHTCByZXNvdXJjZXMuCisKK09uIHN1
Y2Nlc3MsIHlvdSB3aWxsIHNlZSBhIHNlcmllcyBvZiAiUEFTUyIgbWVzc2FnZXMsIGZvbGxvd2Vk
IGJ5ICJURVNUIENPTVBMRVRFIi4KKworUEFTUyBDb250ZXh0IGNyZWF0ZWQuCitSZWFkaW5nIGFu
IHVuaW5pdGlhbGl6ZWQgdGV4dHVyZSBzaG91bGQgc3VjY2VlZCB3aXRoIGFsbCBieXRlcyBzZXQg
dG8gMC4KK1BBU1MgQWxsIGRhdGEgaW5pdGlhbGl6ZWQKK1BBU1MgZ2V0RXJyb3Igd2FzIGV4cGVj
dGVkIHZhbHVlOiBOT19FUlJPUiA6IAorCitQQVNTIHN1Y2Nlc3NmdWxseVBhcnNlZCBpcyB0cnVl
CisKK1RFU1QgQ09NUExFVEUKKwpJbmRleDogTGF5b3V0VGVzdHMvZmFzdC9jYW52YXMvd2ViZ2wv
dW5pbml0aWFsaXplZC10ZXN0Lmh0bWwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvZmFzdC9j
YW52YXMvd2ViZ2wvdW5pbml0aWFsaXplZC10ZXN0Lmh0bWwJKHJldmlzaW9uIDApCisrKyBMYXlv
dXRUZXN0cy9mYXN0L2NhbnZhcy93ZWJnbC91bmluaXRpYWxpemVkLXRlc3QuaHRtbAkocmV2aXNp
b24gMCkKQEAgLTAsMCArMSw5MSBAQAorPCFkb2N0eXBlIGh0bWw+Cis8aHRtbD4KKzxoZWFkPgor
PG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJz
ZXQ9dXRmLTgiPgorPHRpdGxlPldlYkdMIFVuaW5pdGlhbGl6ZWQgR0wgUmVzb3VyY2VzIFRlc3Rz
PC90aXRsZT4KKzxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iLi4vLi4vanMvcmVzb3VyY2Vz
L2pzLXRlc3Qtc3R5bGUuY3NzIi8+Cis8c2NyaXB0IHNyYz0iLi4vLi4vanMvcmVzb3VyY2VzL2pz
LXRlc3QtcHJlLmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSJyZXNvdXJjZXMvd2ViZ2wtdGVz
dC5qcyI+PC9zY3JpcHQ+Cis8L2hlYWQ+Cis8Ym9keT4KKzxkaXYgaWQ9ImRlc2NyaXB0aW9uIj48
L2Rpdj4KKzxkaXYgaWQ9ImNvbnNvbGUiPjwvZGl2PgorPGNhbnZhcyBpZD0iY2FudmFzIiB3aWR0
aD0iMiIgaGVpZ2h0PSIyIj4gPC9jYW52YXM+Cis8c2NyaXB0PgorZGVzY3JpcHRpb24oIlRlc3Rz
IHRvIGNoZWNrIHVzZXIgY29kZSBjYW5ub3QgYWNjZXNzIHVuaW5pdGlhbGl6ZWQgZGF0YSBmcm9t
IEdMIHJlc291cmNlcy4iKTsKKwordmFyIGNhbnZhcyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlk
KCJjYW52YXMiKTsKK3ZhciBnbCA9IGNyZWF0ZTNEQ29udGV4dChjYW52YXMpOworaWYgKCFnbCkK
KyAgdGVzdEZhaWxlZCgiQ29udGV4dCBjcmVhdGVkLiIpOworZWxzZQorICB0ZXN0UGFzc2VkKCJD
b250ZXh0IGNyZWF0ZWQuIik7CisKK2RlYnVnKCJSZWFkaW5nIGFuIHVuaW5pdGlhbGl6ZWQgdGV4
dHVyZSBzaG91bGQgc3VjY2VlZCB3aXRoIGFsbCBieXRlcyBzZXQgdG8gMC4iKTsKKwordmFyIHdp
ZHRoID0gNTEyOwordmFyIGhlaWdodCA9IDUxMjsKK3ZhciBicHAgPSA0OwordmFyIGV4cGVjdGVk
RGF0YUxlbmd0aCA9IHdpZHRoKmhlaWdodCpicHA7CisKK3ZhciB0ZXggPSBnbC5jcmVhdGVUZXh0
dXJlKCk7CitnbC5iaW5kVGV4dHVyZShnbC5URVhUVVJFXzJELCB0ZXgpOworZ2wudGV4SW1hZ2Uy
RChnbC5URVhUVVJFXzJELCAwLCBnbC5SR0JBLCB3aWR0aCwgaGVpZ2h0LCAwLCBnbC5SR0JBLCBn
bC5VTlNJR05FRF9CWVRFLCBudWxsKTsKKworLy8gdGhpcyBjYW4gYmUgcXVpdGUgdW5kZXRlcm1p
bmlzdGljIHNvIHRvIGltcHJvdmUgb2RkcyBvZiBzZWVpbmcgdW5pbml0aWFsaXplZCBkYXRhIHdy
aXRlIGJpdHMKKy8vIGludG8gdGV4IHRoZW4gZGVsZXRlIHRleHR1cmUgdGhlbiByZS1jcmVhdGUg
b25lIHdpdGggc2FtZSBjaGFyYWN0ZXJpc3RpY3MgKGRyaXZlciB3aWxsIGxpa2VseSByZXVzZSBt
ZW0pCisvLyB3aXRoIHRoaXMgdHJpY2sgb24gcjU5MDQ2IFdlYktpdC9PU1ggSSBnZXQgRkFJTCAx
MDAlIG9mIHRoZSB0aW1lIGluc3RlYWQgb2YgfjE1JSBvZiB0aGUgdGltZS4KKwordmFyIGJhZERh
dGEgPSBuZXcgVWludDhBcnJheShleHBlY3RlZERhdGFMZW5ndGgpOworZm9yICh2YXIgaSA9IDA7
IGkgPCBiYWREYXRhLmxlbmd0aDsgKytpKQorICAgIGJhZERhdGFbaV0gPSBpICUgMjU1OworCitn
bC50ZXhTdWJJbWFnZTJEKGdsLlRFWFRVUkVfMkQsIDAsIDAsIDAsIHdpZHRoLCBoZWlnaHQsIGds
LlJHQkEsIGdsLlVOU0lHTkVEX0JZVEUsIGJhZERhdGEpOworZ2wuZmluaXNoKCk7IC8vIG1ha2Ug
c3VyZSBpdCBoYXMgYmVlbiB1cGxvYWRlZAorCitnbC5kZWxldGVUZXh0dXJlKHRleCk7CitnbC5m
aW5pc2goKTsgLy8gbWFrZSBzdXJlIGl0IGhhcyBiZWVuIGRlbGV0ZWQKKwordmFyIHRleCA9IGds
LmNyZWF0ZVRleHR1cmUoKTsKK2dsLmJpbmRUZXh0dXJlKGdsLlRFWFRVUkVfMkQsIHRleCk7Citn
bC50ZXhJbWFnZTJEKGdsLlRFWFRVUkVfMkQsIDAsIGdsLlJHQkEsIHdpZHRoLCBoZWlnaHQsIDAs
IGdsLlJHQkEsIGdsLlVOU0lHTkVEX0JZVEUsIG51bGwpOworCit2YXIgZmIgPSBnbC5jcmVhdGVG
cmFtZWJ1ZmZlcigpOworZ2wuYmluZEZyYW1lYnVmZmVyKGdsLkZSQU1FQlVGRkVSLCBmYik7Citn
bC5mcmFtZWJ1ZmZlclRleHR1cmUyRChnbC5GUkFNRUJVRkZFUiwgZ2wuQ09MT1JfQVRUQUNITUVO
VDAsIGdsLlRFWFRVUkVfMkQsIHRleCwgMCk7CisKK2RhdGEgPSBuZXcgVWludDhBcnJheSh3aWR0
aCAqIGhlaWdodCAqIDQpOworZ2wucmVhZFBpeGVscygwLCAwLCB3aWR0aCwgaGVpZ2h0LCBnbC5S
R0JBLCBnbC5VTlNJR05FRF9CWVRFLCBkYXRhKTsKKworaWYgKGRhdGEubGVuZ3RoICE9IGV4cGVj
dGVkRGF0YUxlbmd0aCkgeworICAgIHRlc3RGYWlsZWQoImV4cGVjdGVkIGRhdGEgbGVuZ3RoICIg
KyBleHBlY3RlZERhdGFMZW5ndGggKyAiIGJ1dCBnb3QgIiArIGRhdGEubGVuZ3RoICsgIiBpbnN0
ZWFkLiIpOworfSBlbHNlIHsKKyAgICB2YXIgayA9IDA7CisgICAgZm9yICh2YXIgaSA9IDA7IGkg
PCBkYXRhLmxlbmd0aDsgKytpKSB7CisgICAgICAgIGlmIChkYXRhW2ldICE9IDApIHsKKyAgICAg
ICAgICAgIGsrKzsKKyAgICAgICAgfQorICAgIH0KKworICAgIGlmIChrKSB7CisgICAgICAgIHRl
c3RGYWlsZWQoIkZvdW5kICIgKyBrICsgIiBub24temVybyBieXRlcyIpOworICAgIH0gZWxzZSB7
CisgICAgICAgIHRlc3RQYXNzZWQoIkFsbCBkYXRhIGluaXRpYWxpemVkIik7CisgICAgfQorfQor
CitnbEVycm9yU2hvdWxkQmUoZ2wsIGdsLk5PX0VSUk9SKTsKKworLy9UT0RPOiB1bmluaXRpYWxp
emVkIHZlcnRleCBhcnJheSBidWZmZXIKKy8vVE9ETzogdW5pbml0aWFsaXplZCB2ZXJ0ZXggZWxl
bWVudHMgYnVmZmVyCisvL1RPRE86IHVuaW5pdGlhbGl6ZWQgZnJhbWVidWZmZXI/IChpbXBsZW1l
bnRhdGlvbnMgd291bGQgbmVlZCB0byBkbyBhIEdMIGNsZWFyIGF0IGZpcnN0IGJpbmRpbmc/KQor
Ly9UT0RPOiB1bmluaXRpYWxpemVkIHJlbmRlcmJ1ZmZlcj8gKGltcGxlbWVudGF0aW9ucyB3b3Vs
ZCBuZWVkIHRvIGRvIGEgR0wgY2xlYXIgYXQgZmlyc3QgYmluZGluZz8pCisvL1RPRE86IHVuaW5p
dGlhbGl6ZWQgdW5pZm9ybSBhcnJheXM/CisKK2RlYnVnKCIiKTsKK3N1Y2Nlc3NmdWxseVBhcnNl
ZCA9IHRydWU7Cis8L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSIuLi8uLi9qcy9yZXNvdXJjZXMvanMt
dGVzdC1wb3N0LmpzIj48L3NjcmlwdD4KKzwvYm9keT4KKzwvaHRtbD4KKwo=
</data>
<flag name="commit-queue"
          id="64684"
          type_id="3"
          status="-"
          setter="zmo"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>75761</attachid>
            <date>2010-12-06 17:34:12 -0800</date>
            <delta_ts>2010-12-09 12:18:46 -0800</delta_ts>
            <desc>revised patch</desc>
            <filename>init.patch</filename>
            <type>text/plain</type>
            <size>33660</size>
            <attacher name="Zhenyao Mo">zmo</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA3MzQyMCkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsNDEgQEAKKzIwMTAtMTItMDYgIFpoZW55YW8gTW8gIDx6bW9AZ29vZ2xlLmNvbT4K
KworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBXZWJHTFJl
bmRlcmluZ0NvbnRleHQgbmVlZHMgdG8gemVybyB0ZXh0dXJlcyBhbmQgcmVuZGVyYnVmZmVycwor
ICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NDkzNTUKKwor
ICAgICAgICBUZXN0OiBmYXN0L2NhbnZhcy93ZWJnbC91bmluaXRpYWxpemVkLXRlc3QuaHRtbAor
CisgICAgICAgICogaHRtbC9jYW52YXMvV2ViR0xGcmFtZWJ1ZmZlci5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpXZWJHTEZyYW1lYnVmZmVyOjpvbkFjY2Vzcyk6IFVzZSBhIHBhcmFtZXRlciB0byBk
ZWNpZGUgaWYgcmVuZGVyYnVmZmVyIGluaXRpYWxpemF0aW9uIGlzIG5lZWRlZC4KKyAgICAgICAg
KFdlYkNvcmU6OldlYkdMRnJhbWVidWZmZXI6OmluaXRpYWxpemVSZW5kZXJidWZmZXJzKTogRG9u
J3QgcmV0dXJuIGZhbHNlIGlmIGNvbG9yIGJ1ZmZlciBkb2Vzbid0IGV4aXN0LgorICAgICAgICAq
IGh0bWwvY2FudmFzL1dlYkdMRnJhbWVidWZmZXIuaDogTW9kaWZ5IG9uQWNjZXNzIGZ1bmN0aW9u
IHNpZ25hdHVyZS4KKyAgICAgICAgKiBodG1sL2NhbnZhcy9XZWJHTFJlbmRlcmluZ0NvbnRleHQu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0OjpjbGVhcik6IENh
bGwgb25BY2Nlc3Mgd2l0aCBhbiBhZGRlZCBwYXJhbWV0ZXIuCisgICAgICAgIChXZWJDb3JlOjpX
ZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmNvcHlUZXhJbWFnZTJEKTogRGl0dG8uCisgICAgICAgIChX
ZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmNvcHlUZXhTdWJJbWFnZTJEKTogRGl0dG8u
CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmRyYXdBcnJheXMpOiBE
aXR0by4KKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dDo6ZHJhd0VsZW1l
bnRzKTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnJl
YWRQaXhlbHMpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4
dDo6dGV4SW1hZ2UyREJhc2UpOiBDcmVhdGUgYnVmZmVyIGRhdGEgb2YgMHMgaWYgaW5wdXQgaXMg
bnVsbCB0byBpbml0aWFsaXplIHRleHR1cmVzLgorICAgICAgICAqIFBsYXRmb3JtL2dyYXBoaWNz
L2Nocm9taXVtL0NhbnZhczJETGF5ZXJDaHJvbWl1bS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpD
YW52YXMyRExheWVyQ2hyb21pdW06OnVwZGF0ZUNvbnRlbnRzKTogQ3JlYXRlIGJ1ZmZlciBkYXRh
IG9mIDBzIGlmIGlucHV0IGlzIG51bGwgdG8gaW5pdGlhbGl6ZSB0ZXh0dXJlcy4KKyAgICAgICAg
KiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9EcmF3aW5nQnVmZmVyQ2hyb21pdW0uY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6Z2VuZXJhdGVDb2xvclRleHR1cmUpOiBEaXR0by4KKyAgICAgICAg
KiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllclJlbmRlcmVyQ2hyb21pdW0uY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6TGF5ZXJSZW5kZXJlckNocm9taXVtOjpwcmVwYXJlVG9EcmF3TGF5
ZXJzKTogRGl0dG8uCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vUmVuZGVy
U3VyZmFjZUNocm9taXVtLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclN1cmZhY2VDaHJv
bWl1bTo6cHJlcGFyZUNvbnRlbnRzVGV4dHVyZSk6IERpdHRvLgorICAgICAgICAqIHBsYXRmb3Jt
L2dyYXBoaWNzL2Nocm9taXVtL1ZpZGVvTGF5ZXJDaHJvbWl1bS5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpWaWRlb0xheWVyQ2hyb21pdW06OmFsbG9jYXRlVGV4dHVyZSk6IERpdHRvLgorICAgICAg
ICAqIHBsYXRmb3JtL2dyYXBoaWNzL2dwdS9EcmF3aW5nQnVmZmVyLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OkRyYXdpbmdCdWZmZXI6OnJlc2V0KTogQ3JlYXRlIGJ1ZmZlciBkYXRhIG9mIDBzIGlm
IGlucHV0IGlzIG51bGwgdG8gaW5pdGlhbGl6ZSB0ZXh0dXJlczsgYWxzbywgb25seSBjbGVhbiB0
aGUgZGVwdGgvc3RlbmNpbCBidWZmZXIgbGF0ZXIuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhp
Y3MvZ3B1L1RleHR1cmUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6VGV4dHVyZTo6Y3JlYXRlKTog
Q3JlYXRlIGJ1ZmZlciBkYXRhIG9mIDBzIGlmIGlucHV0IGlzIG51bGwgdG8gaW5pdGlhbGl6ZSB0
ZXh0dXJlcy4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvR3JhcGhpY3NDb250
ZXh0M0RPcGVuR0wuY3BwOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OnRl
eEltYWdlMkQpOiBHZW5lcmF0ZSBhbiBJTlZBTElEX1ZBTFVFIGlmIHBpeGVscz09bnVsbCBpcyBw
YXNzZWQuCisKIDIwMTAtMTItMDYgIFJ5b3N1a2UgTml3YSAgPHJuaXdhQHdlYmtpdC5vcmc+CiAK
ICAgICAgICAgUmV2aWV3ZWQgYnkgVG9ueSBDaGFuZy4KSW5kZXg6IFdlYkNvcmUvaHRtbC9jYW52
YXMvV2ViR0xGcmFtZWJ1ZmZlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9odG1sL2NhbnZh
cy9XZWJHTEZyYW1lYnVmZmVyLmNwcAkocmV2aXNpb24gNzMzMTkpCisrKyBXZWJDb3JlL2h0bWwv
Y2FudmFzL1dlYkdMRnJhbWVidWZmZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xODEsMTEgKzE4
MSwxMyBAQCBib29sIFdlYkdMRnJhbWVidWZmZXI6OmlzSW5jb21wbGV0ZShib29sCiAgICAgcmV0
dXJuIGZhbHNlOwogfQogCi1ib29sIFdlYkdMRnJhbWVidWZmZXI6Om9uQWNjZXNzKCkKK2Jvb2wg
V2ViR0xGcmFtZWJ1ZmZlcjo6b25BY2Nlc3MoYm9vbCBuZWVkVG9Jbml0aWFsaXplUmVuZGVyYnVm
ZmVycykKIHsKICAgICBpZiAoaXNJbmNvbXBsZXRlKHRydWUpKQogICAgICAgICByZXR1cm4gZmFs
c2U7Ci0gICAgcmV0dXJuIGluaXRpYWxpemVSZW5kZXJidWZmZXJzKCk7CisgICAgaWYgKG5lZWRU
b0luaXRpYWxpemVSZW5kZXJidWZmZXJzKQorICAgICAgICByZXR1cm4gaW5pdGlhbGl6ZVJlbmRl
cmJ1ZmZlcnMoKTsKKyAgICByZXR1cm4gdHJ1ZTsKIH0KIAogdm9pZCBXZWJHTEZyYW1lYnVmZmVy
OjpkZWxldGVPYmplY3RJbXBsKFBsYXRmb3JtM0RPYmplY3Qgb2JqZWN0KQpAQCAtMjAxLDggKzIw
Myw2IEBAIHZvaWQgV2ViR0xGcmFtZWJ1ZmZlcjo6ZGVsZXRlT2JqZWN0SW1wbCgKIGJvb2wgV2Vi
R0xGcmFtZWJ1ZmZlcjo6aW5pdGlhbGl6ZVJlbmRlcmJ1ZmZlcnMoKQogewogICAgIEFTU0VSVChv
YmplY3QoKSk7Ci0gICAgaWYgKCFpc0NvbG9yQXR0YWNoZWQoKSkKLSAgICAgICAgcmV0dXJuIGZh
bHNlOwogICAgIGJvb2wgaW5pdENvbG9yID0gZmFsc2UsIGluaXREZXB0aCA9IGZhbHNlLCBpbml0
U3RlbmNpbCA9IGZhbHNlOwogICAgIHVuc2lnbmVkIGxvbmcgbWFzayA9IDA7CiAgICAgaWYgKGlz
VW5pbml0aWFsaXplZChtX2NvbG9yQXR0YWNobWVudC5nZXQoKSkpIHsKSW5kZXg6IFdlYkNvcmUv
aHRtbC9jYW52YXMvV2ViR0xGcmFtZWJ1ZmZlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvaHRt
bC9jYW52YXMvV2ViR0xGcmFtZWJ1ZmZlci5oCShyZXZpc2lvbiA3MzMxOSkKKysrIFdlYkNvcmUv
aHRtbC9jYW52YXMvV2ViR0xGcmFtZWJ1ZmZlci5oCSh3b3JraW5nIGNvcHkpCkBAIC01MCw4ICs1
MCw5IEBAIHB1YmxpYzoKICAgICAvLyByZWFkUGl4ZWxzLCBjb3B5VGV4SW1hZ2UyRCwgY29weVRl
eFN1YkltYWdlMkQgaWYgdGhpcyBmcmFtZWJ1ZmZlciBpcwogICAgIC8vIGN1cnJlbnRseSBib3Vu
ZC4KICAgICAvLyBSZXR1cm4gZmFsc2UgaWYgdGhlIGZyYW1lYnVmZmVyIGlzIGluY29tcGxldGU7
IG90aGVyd2lzZSBpbml0aWFsaXplCi0gICAgLy8gdGhlIGJ1ZmZlcnMgaWYgdGhleSBoYXZlbid0
IGJlZW4gaW5pdGlhbGl6ZWQuCi0gICAgYm9vbCBvbkFjY2VzcygpOworICAgIC8vIHRoZSBidWZm
ZXJzIGlmIHRoZXkgaGF2ZW4ndCBiZWVuIGluaXRpYWxpemVkIGFuZAorICAgIC8vIG5lZWRUb0lu
aXRpYWxpemVSZW5kZXJidWZmZXJzIGlzIHRydWUuCisgICAgYm9vbCBvbkFjY2Vzcyhib29sIG5l
ZWRUb0luaXRpYWxpemVSZW5kZXJidWZmZXJzKTsKIAogICAgIC8vIFJldHVybiBmYWxzZSBkb2Vz
IG5vdCBtZWFuIENPTVBMRVRFLCBtaWdodCBzdGlsbCBiZSBJTkNPTVBMRVRFLgogICAgIGJvb2wg
aXNJbmNvbXBsZXRlKGJvb2wgY2hlY2tJbnRlcm5hbEZvcm1hdCkgY29uc3Q7CkluZGV4OiBXZWJD
b3JlL2h0bWwvY2FudmFzL1dlYkdMUmVuZGVyaW5nQ29udGV4dC5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
V2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFJlbmRlcmluZ0NvbnRleHQuY3BwCShyZXZpc2lvbiA3
MzMxOSkKKysrIFdlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xSZW5kZXJpbmdDb250ZXh0LmNwcAko
d29ya2luZyBjb3B5KQpAQCAtNTksOSArNTksNjkgQEAKIAogI2luY2x1ZGUgPHd0Zi9CeXRlQXJy
YXkuaD4KICNpbmNsdWRlIDx3dGYvT3duQXJyYXlQdHIuaD4KKyNpbmNsdWRlIDx3dGYvUGFzc093
bkFycmF5UHRyLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAorbmFtZXNwYWNlIHsKKworICAg
IHVuc2lnbmVkIGJ5dGVzUGVyQ29tcG9uZW50KHVuc2lnbmVkIHR5cGUpCisgICAgeworICAgICAg
ICBzd2l0Y2ggKHR5cGUpIHsKKyAgICAgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6VU5TSUdO
RURfQllURToKKyAgICAgICAgICAgIHJldHVybiAxOworICAgICAgICBjYXNlIEdyYXBoaWNzQ29u
dGV4dDNEOjpVTlNJR05FRF9TSE9SVF81XzZfNToKKyAgICAgICAgY2FzZSBHcmFwaGljc0NvbnRl
eHQzRDo6VU5TSUdORURfU0hPUlRfNF80XzRfNDoKKyAgICAgICAgY2FzZSBHcmFwaGljc0NvbnRl
eHQzRDo6VU5TSUdORURfU0hPUlRfNV81XzVfMToKKyAgICAgICAgICAgIHJldHVybiAyOworICAg
ICAgICBkZWZhdWx0OgorICAgICAgICAgICAgQVNTRVJUKGZhbHNlKTsKKyAgICAgICAgICAgIHJl
dHVybiAwOworICAgICAgICB9CisgICAgfQorCisgICAgdW5zaWduZWQgY29tcG9uZW50c1BlclBp
eGVsKHVuc2lnbmVkIGZvcm1hdCwgdW5zaWduZWQgdHlwZSkKKyAgICB7CisgICAgICAgIHN3aXRj
aCAodHlwZSkgeworICAgICAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpVTlNJR05FRF9TSE9S
VF81XzZfNToKKyAgICAgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6VU5TSUdORURfU0hPUlRf
NF80XzRfNDoKKyAgICAgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6VU5TSUdORURfU0hPUlRf
NV81XzVfMToKKyAgICAgICAgICAgIHJldHVybiAxOworICAgICAgICBkZWZhdWx0OgorICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgc3dpdGNoIChmb3JtYXQpIHsKKyAgICAg
ICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6QUxQSEE6CisgICAgICAgIGNhc2UgR3JhcGhpY3ND
b250ZXh0M0Q6OkxVTUlOQU5DRToKKyAgICAgICAgICAgIHJldHVybiAxOworICAgICAgICBjYXNl
IEdyYXBoaWNzQ29udGV4dDNEOjpMVU1JTkFOQ0VfQUxQSEE6CisgICAgICAgICAgICByZXR1cm4g
MjsKKyAgICAgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6UkdCOgorICAgICAgICAgICAgcmV0
dXJuIDM7CisgICAgICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlJHQkE6CisgICAgICAgICAg
ICByZXR1cm4gNDsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIEFTU0VSVChmYWxzZSk7
CisgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgfQorICAgIH0KKworICAgIC8vIFRoaXMg
ZnVuY3Rpb24gc2hvdWxkIG9ubHkgYmUgY2FsbGVkIGlmIHdpZHRoIGFuZCBoZWlnaHQgaXMgbm9u
LXplcm8gYW5kCisgICAgLy8gZm9ybWF0L3R5cGUgYXJlIHZhbGlkLiAgUmV0dXJuIDAgaWYgb3Zl
cmZsb3cgaGFwcGVucy4KKyAgICBzaXplX3QgaW1hZ2VTaXplSW5CeXRlcyh1bnNpZ25lZCB3aWR0
aCwgdW5zaWduZWQgaGVpZ2h0LCB1bnNpZ25lZCBmb3JtYXQsIHVuc2lnbmVkIHR5cGUpCisgICAg
eworICAgICAgICBBU1NFUlQod2lkdGggJiYgaGVpZ2h0KTsKKyAgICAgICAgQ2hlY2tlZEludDx1
aW50MzJfdD4gY2hlY2tlZFdpZHRoKHdpZHRoKTsKKyAgICAgICAgQ2hlY2tlZEludDx1aW50MzJf
dD4gY2hlY2tlZEhlaWdodChoZWlnaHQpOworICAgICAgICBDaGVja2VkSW50PHVpbnQzMl90PiBj
aGVja2VkQnl0ZXNQZXJQaXhlbChieXRlc1BlckNvbXBvbmVudCh0eXBlKSAqIGNvbXBvbmVudHNQ
ZXJQaXhlbChmb3JtYXQsIHR5cGUpKTsKKyAgICAgICAgQ2hlY2tlZEludDx1aW50MzJfdD4gY2hl
Y2tlZFNpemUgPSBjaGVja2VkV2lkdGggKiBjaGVja2VkSGVpZ2h0ICogY2hlY2tlZEJ5dGVzUGVy
UGl4ZWw7CisgICAgICAgIGlmIChjaGVja2VkU2l6ZS52YWxpZCgpKQorICAgICAgICAgICAgcmV0
dXJuIGNoZWNrZWRTaXplLnZhbHVlKCk7CisgICAgICAgIHJldHVybiAwOworICAgIH0KKworfSAv
LyBhbm9ueW1vdXMgbmFtZXNwYWNlCisKIHN0YXRpYyBpbmxpbmUgUGxhdGZvcm0zRE9iamVjdCBv
YmplY3RPclplcm8oV2ViR0xPYmplY3QqIG9iamVjdCkKIHsKICAgICByZXR1cm4gb2JqZWN0ID8g
b2JqZWN0LT5vYmplY3QoKSA6IDA7CkBAIC01NDQsNyArNjA0LDcgQEAgdm9pZCBXZWJHTFJlbmRl
cmluZ0NvbnRleHQ6OmNsZWFyKHVuc2lnbgogICAgICAgICBtX2NvbnRleHQtPnN5bnRoZXNpemVH
TEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX1ZBTFVFKTsKICAgICAgICAgcmV0dXJu
OwogICAgIH0KLSAgICBpZiAobV9mcmFtZWJ1ZmZlckJpbmRpbmcgJiYgIW1fZnJhbWVidWZmZXJC
aW5kaW5nLT5vbkFjY2VzcygpKSB7CisgICAgaWYgKG1fZnJhbWVidWZmZXJCaW5kaW5nICYmICFt
X2ZyYW1lYnVmZmVyQmluZGluZy0+b25BY2Nlc3MoIWlzUmVzb3VyY2VTYWZlKCkpKSB7CiAgICAg
ICAgIG1fY29udGV4dC0+c3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFM
SURfRlJBTUVCVUZGRVJfT1BFUkFUSU9OKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KQEAgLTYy
Miw3ICs2ODIsNyBAQCB2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6Y29weVRleEltYWdlCiAg
ICAgICAgIG1fY29udGV4dC0+c3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklO
VkFMSURfVkFMVUUpOwogICAgICAgICByZXR1cm47CiAgICAgfQotICAgIGlmIChtX2ZyYW1lYnVm
ZmVyQmluZGluZyAmJiAhbV9mcmFtZWJ1ZmZlckJpbmRpbmctPm9uQWNjZXNzKCkpIHsKKyAgICBp
ZiAobV9mcmFtZWJ1ZmZlckJpbmRpbmcgJiYgIW1fZnJhbWVidWZmZXJCaW5kaW5nLT5vbkFjY2Vz
cyghaXNSZXNvdXJjZVNhZmUoKSkpIHsKICAgICAgICAgbV9jb250ZXh0LT5zeW50aGVzaXplR0xF
cnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9GUkFNRUJVRkZFUl9PUEVSQVRJT04pOwog
ICAgICAgICByZXR1cm47CiAgICAgfQpAQCAtNjQ3LDcgKzcwNyw3IEBAIHZvaWQgV2ViR0xSZW5k
ZXJpbmdDb250ZXh0Ojpjb3B5VGV4U3ViSW0KICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAg
fQogICAgIH0KLSAgICBpZiAobV9mcmFtZWJ1ZmZlckJpbmRpbmcgJiYgIW1fZnJhbWVidWZmZXJC
aW5kaW5nLT5vbkFjY2VzcygpKSB7CisgICAgaWYgKG1fZnJhbWVidWZmZXJCaW5kaW5nICYmICFt
X2ZyYW1lYnVmZmVyQmluZGluZy0+b25BY2Nlc3MoIWlzUmVzb3VyY2VTYWZlKCkpKSB7CiAgICAg
ICAgIG1fY29udGV4dC0+c3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFM
SURfRlJBTUVCVUZGRVJfT1BFUkFUSU9OKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KQEAgLTEw
NzgsNyArMTEzOCw3IEBAIHZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpkcmF3QXJyYXlzKHUK
ICAgICAgICAgfQogICAgIH0KIAotICAgIGlmIChtX2ZyYW1lYnVmZmVyQmluZGluZyAmJiAhbV9m
cmFtZWJ1ZmZlckJpbmRpbmctPm9uQWNjZXNzKCkpIHsKKyAgICBpZiAobV9mcmFtZWJ1ZmZlckJp
bmRpbmcgJiYgIW1fZnJhbWVidWZmZXJCaW5kaW5nLT5vbkFjY2VzcyghaXNSZXNvdXJjZVNhZmUo
KSkpIHsKICAgICAgICAgbV9jb250ZXh0LT5zeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRl
eHQzRDo6SU5WQUxJRF9GUkFNRUJVRkZFUl9PUEVSQVRJT04pOwogICAgICAgICByZXR1cm47CiAg
ICAgfQpAQCAtMTE0Miw3ICsxMjAyLDcgQEAgdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmRy
YXdFbGVtZW50cwogICAgICAgICB9CiAgICAgfQogCi0gICAgaWYgKG1fZnJhbWVidWZmZXJCaW5k
aW5nICYmICFtX2ZyYW1lYnVmZmVyQmluZGluZy0+b25BY2Nlc3MoKSkgeworICAgIGlmIChtX2Zy
YW1lYnVmZmVyQmluZGluZyAmJiAhbV9mcmFtZWJ1ZmZlckJpbmRpbmctPm9uQWNjZXNzKCFpc1Jl
c291cmNlU2FmZSgpKSkgewogICAgICAgICBtX2NvbnRleHQtPnN5bnRoZXNpemVHTEVycm9yKEdy
YXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX0ZSQU1FQlVGRkVSX09QRVJBVElPTik7CiAgICAgICAg
IHJldHVybjsKICAgICB9CkBAIC0yMjYzLDcgKzIzMjMsNyBAQCB2b2lkIFdlYkdMUmVuZGVyaW5n
Q29udGV4dDo6cmVhZFBpeGVscyhsCiAgICAgICAgIG1fY29udGV4dC0+c3ludGhlc2l6ZUdMRXJy
b3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfT1BFUkFUSU9OKTsKICAgICAgICAgcmV0dXJu
OwogICAgIH0KLSAgICBpZiAobV9mcmFtZWJ1ZmZlckJpbmRpbmcgJiYgIW1fZnJhbWVidWZmZXJC
aW5kaW5nLT5vbkFjY2VzcygpKSB7CisgICAgaWYgKG1fZnJhbWVidWZmZXJCaW5kaW5nICYmICFt
X2ZyYW1lYnVmZmVyQmluZGluZy0+b25BY2Nlc3MoIWlzUmVzb3VyY2VTYWZlKCkpKSB7CiAgICAg
ICAgIG1fY29udGV4dC0+c3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFM
SURfRlJBTUVCVUZGRVJfT1BFUkFUSU9OKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KQEAgLTI0
NjMsNiArMjUyMywxNyBAQCB2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dGV4SW1hZ2UyREJh
CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KICAgICB9CisgICAgT3duQXJyYXlQdHI8
dW5zaWduZWQgY2hhcj4gemVybzsKKyAgICBpZiAoIXBpeGVscyAmJiAhaXNSZXNvdXJjZVNhZmUo
KSAmJiB3aWR0aCAmJiBoZWlnaHQpIHsKKyAgICAgICAgc2l6ZV90IHNpemUgPSBpbWFnZVNpemVJ
bkJ5dGVzKHdpZHRoLCBoZWlnaHQsIGZvcm1hdCwgdHlwZSk7CisgICAgICAgIGlmICghc2l6ZSkg
eworICAgICAgICAgICAgbV9jb250ZXh0LT5zeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRl
eHQzRDo6SU5WQUxJRF9WQUxVRSk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAg
ICAgICAgemVybyA9IGFkb3B0QXJyYXlQdHIobmV3IHVuc2lnbmVkIGNoYXJbc2l6ZV0pOworICAg
ICAgICBtZW1zZXQoemVyby5nZXQoKSwgMCwgc2l6ZSk7CisgICAgICAgIHBpeGVscyA9IHplcm8u
Z2V0KCk7CisgICAgfQogICAgIG1fY29udGV4dC0+dGV4SW1hZ2UyRCh0YXJnZXQsIGxldmVsLCBp
bnRlcm5hbGZvcm1hdCwgd2lkdGgsIGhlaWdodCwKICAgICAgICAgICAgICAgICAgICAgICAgICAg
Ym9yZGVyLCBmb3JtYXQsIHR5cGUsIHBpeGVscyk7CiAgICAgdGV4LT5zZXRMZXZlbEluZm8odGFy
Z2V0LCBsZXZlbCwgaW50ZXJuYWxmb3JtYXQsIHdpZHRoLCBoZWlnaHQsIHR5cGUpOwpJbmRleDog
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9DYW52YXMyRExheWVyQ2hyb21pdW0u
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vQ2Fu
dmFzMkRMYXllckNocm9taXVtLmNwcAkocmV2aXNpb24gNzM0MDkpCisrKyBXZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2Nocm9taXVtL0NhbnZhczJETGF5ZXJDaHJvbWl1bS5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTM3LDYgKzM3LDkgQEAKICNpbmNsdWRlICJEcmF3aW5nQnVmZmVyLmgiCiAjaW5j
bHVkZSAiR3JhcGhpY3NDb250ZXh0M0QuaCIKIAorI2luY2x1ZGUgPHd0Zi9Pd25BcnJheVB0ci5o
PgorI2luY2x1ZGUgPHd0Zi9QYXNzT3duQXJyYXlQdHIuaD4KKwogbmFtZXNwYWNlIFdlYkNvcmUg
ewogCiBQYXNzUmVmUHRyPENhbnZhczJETGF5ZXJDaHJvbWl1bT4gQ2FudmFzMkRMYXllckNocm9t
aXVtOjpjcmVhdGUoRHJhd2luZ0J1ZmZlciogZHJhd2luZ0J1ZmZlciwgR3JhcGhpY3NMYXllckNo
cm9taXVtKiBvd25lcikKQEAgLTY4LDcgKzcxLDEzIEBAIHZvaWQgQ2FudmFzMkRMYXllckNocm9t
aXVtOjp1cGRhdGVDb250ZW4KICAgICAgICAgY29udGV4dC0+YWN0aXZlVGV4dHVyZShHcmFwaGlj
c0NvbnRleHQzRDo6VEVYVFVSRTApOwogICAgICAgICBjb250ZXh0LT5iaW5kVGV4dHVyZShHcmFw
aGljc0NvbnRleHQzRDo6VEVYVFVSRV8yRCwgbV90ZXh0dXJlSWQpOwogICAgICAgICBJbnRTaXpl
IHNpemUgPSBtX2RyYXdpbmdCdWZmZXItPnNpemUoKTsKLSAgICAgICAgY29udGV4dC0+dGV4SW1h
Z2UyRChHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV8yRCwgMCwgR3JhcGhpY3NDb250ZXh0M0Q6
OlJHQkEsIHNpemUud2lkdGgoKSwgc2l6ZS5oZWlnaHQoKSwgMCwgR3JhcGhpY3NDb250ZXh0M0Q6
OlJHQkEsIEdyYXBoaWNzQ29udGV4dDNEOjpVTlNJR05FRF9CWVRFLCAwKTsKKyAgICAgICAgT3du
QXJyYXlQdHI8dW5zaWduZWQgY2hhcj4gemVybzsKKyAgICAgICAgaW50IGJ1ZmZlclNpemUgPSBz
aXplLndpZHRoKCkgKiBzaXplLmhlaWdodCgpICogNDsKKyAgICAgICAgaWYgKGJ1ZmZlclNpemUp
IHsKKyAgICAgICAgICAgIHplcm8gPSBhZG9wdEFycmF5UHRyKG5ldyB1bnNpZ25lZCBjaGFyW2J1
ZmZlclNpemVdKTsKKyAgICAgICAgICAgIG1lbXNldCh6ZXJvLmdldCgpLCAwLCBidWZmZXJTaXpl
KTsKKyAgICAgICAgfQorICAgICAgICBjb250ZXh0LT50ZXhJbWFnZTJEKEdyYXBoaWNzQ29udGV4
dDNEOjpURVhUVVJFXzJELCAwLCBHcmFwaGljc0NvbnRleHQzRDo6UkdCQSwgc2l6ZS53aWR0aCgp
LCBzaXplLmhlaWdodCgpLCAwLCBHcmFwaGljc0NvbnRleHQzRDo6UkdCQSwgR3JhcGhpY3NDb250
ZXh0M0Q6OlVOU0lHTkVEX0JZVEUsIHplcm8uZ2V0KCkpOwogICAgICAgICAvLyBTZXQgdGhlIG1p
bi1tYWcgZmlsdGVycyB0byBsaW5lYXIgYW5kIHdyYXAgbW9kZXMgdG8gR3JhcGhpY3NDb250ZXh0
M0Q6OkNMQU1QX1RPX0VER0UKICAgICAgICAgLy8gdG8gZ2V0IGFyb3VuZCBOUE9UIHRleHR1cmUg
bGltaXRhdGlvbnMgb2YgR0xFUy4KICAgICAgICAgY29udGV4dC0+dGV4UGFyYW1ldGVyaShHcmFw
aGljc0NvbnRleHQzRDo6VEVYVFVSRV8yRCwgR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfTUlO
X0ZJTFRFUiwgR3JhcGhpY3NDb250ZXh0M0Q6OkxJTkVBUik7CkluZGV4OiBXZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2Nocm9taXVtL0RyYXdpbmdCdWZmZXJDaHJvbWl1bS5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9EcmF3aW5nQnVmZmVyQ2hy
b21pdW0uY3BwCShyZXZpc2lvbiA3MzQwOSkKKysrIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2hyb21pdW0vRHJhd2luZ0J1ZmZlckNocm9taXVtLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzYs
NiArMzYsOSBAQAogI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dDNELmgiCiAjaW5jbHVkZSAiU2hh
cmVkR3JhcGhpY3NDb250ZXh0M0QuaCIKIAorI2luY2x1ZGUgPHd0Zi9Pd25BcnJheVB0ci5oPgor
I2luY2x1ZGUgPHd0Zi9QYXNzT3duQXJyYXlQdHIuaD4KKwogI2lmIFVTRShBQ0NFTEVSQVRFRF9D
T01QT1NJVElORykKICNpbmNsdWRlICJDYW52YXMyRExheWVyQ2hyb21pdW0uaCIKICNlbmRpZgpA
QCAtNjAsNyArNjMsMTMgQEAgc3RhdGljIHVuc2lnbmVkIGdlbmVyYXRlQ29sb3JUZXh0dXJlKEdy
YQogICAgIGNvbnRleHQtPnRleFBhcmFtZXRlcmkoR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVf
MkQsIEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFX01JTl9GSUxURVIsIEdyYXBoaWNzQ29udGV4
dDNEOjpORUFSRVNUKTsKICAgICBjb250ZXh0LT50ZXhQYXJhbWV0ZXJpKEdyYXBoaWNzQ29udGV4
dDNEOjpURVhUVVJFXzJELCBHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV9XUkFQX1MsIEdyYXBo
aWNzQ29udGV4dDNEOjpDTEFNUF9UT19FREdFKTsKICAgICBjb250ZXh0LT50ZXhQYXJhbWV0ZXJp
KEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFXzJELCBHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVS
RV9XUkFQX1QsIEdyYXBoaWNzQ29udGV4dDNEOjpDTEFNUF9UT19FREdFKTsKLSAgICBjb250ZXh0
LT50ZXhJbWFnZTJEKEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFXzJELCAwLCBHcmFwaGljc0Nv
bnRleHQzRDo6UkdCQSwgc2l6ZS53aWR0aCgpLCBzaXplLmhlaWdodCgpLCAwLCBHcmFwaGljc0Nv
bnRleHQzRDo6UkdCQSwgR3JhcGhpY3NDb250ZXh0M0Q6OlVOU0lHTkVEX0JZVEUsIDApOworICAg
IE93bkFycmF5UHRyPHVuc2lnbmVkIGNoYXI+IHplcm87CisgICAgaW50IGJ1ZmZlclNpemUgPSBz
aXplLndpZHRoKCkgKiBzaXplLmhlaWdodCgpICogNDsKKyAgICBpZiAoYnVmZmVyU2l6ZSkgewor
ICAgICAgICB6ZXJvID0gYWRvcHRBcnJheVB0cihuZXcgdW5zaWduZWQgY2hhcltidWZmZXJTaXpl
XSk7CisgICAgICAgIG1lbXNldCh6ZXJvLmdldCgpLCAwLCBidWZmZXJTaXplKTsKKyAgICB9Cisg
ICAgY29udGV4dC0+dGV4SW1hZ2UyRChHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV8yRCwgMCwg
R3JhcGhpY3NDb250ZXh0M0Q6OlJHQkEsIHNpemUud2lkdGgoKSwgc2l6ZS5oZWlnaHQoKSwgMCwg
R3JhcGhpY3NDb250ZXh0M0Q6OlJHQkEsIEdyYXBoaWNzQ29udGV4dDNEOjpVTlNJR05FRF9CWVRF
LCB6ZXJvLmdldCgpKTsKICAgICBjb250ZXh0LT5mcmFtZWJ1ZmZlclRleHR1cmUyRChHcmFwaGlj
c0NvbnRleHQzRDo6RlJBTUVCVUZGRVIsIEdyYXBoaWNzQ29udGV4dDNEOjpDT0xPUl9BVFRBQ0hN
RU5UMCwgR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfMkQsIG9mZnNjcmVlbkNvbG9yVGV4dHVy
ZSwgMCk7CiAKICAgICByZXR1cm4gb2Zmc2NyZWVuQ29sb3JUZXh0dXJlOwpJbmRleDogV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllclJlbmRlcmVyQ2hyb21pdW0uY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJSZW5k
ZXJlckNocm9taXVtLmNwcAkocmV2aXNpb24gNzM0MDkpCisrKyBXZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2Nocm9taXVtL0xheWVyUmVuZGVyZXJDaHJvbWl1bS5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTQ1LDYgKzQ1LDggQEAKICNlbGlmIFBMQVRGT1JNKENHKQogI2luY2x1ZGUgPENvcmVHcmFw
aGljcy9DR0JpdG1hcENvbnRleHQuaD4KICNlbmRpZgorI2luY2x1ZGUgPHd0Zi9Pd25BcnJheVB0
ci5oPgorI2luY2x1ZGUgPHd0Zi9QYXNzT3duQXJyYXlQdHIuaD4KIAogbmFtZXNwYWNlIFdlYkNv
cmUgewogCkBAIC0xOTUsOCArMTk3LDEzIEBAIHZvaWQgTGF5ZXJSZW5kZXJlckNocm9taXVtOjpw
cmVwYXJlVG9EcmEKICAgICBpZiAodmlzaWJsZVJlY3RXaWR0aCAhPSBtX3Jvb3RMYXllclRleHR1
cmVXaWR0aCB8fCB2aXNpYmxlUmVjdEhlaWdodCAhPSBtX3Jvb3RMYXllclRleHR1cmVIZWlnaHQp
IHsKICAgICAgICAgbV9yb290TGF5ZXJUZXh0dXJlV2lkdGggPSB2aXNpYmxlUmVjdFdpZHRoOwog
ICAgICAgICBtX3Jvb3RMYXllclRleHR1cmVIZWlnaHQgPSB2aXNpYmxlUmVjdEhlaWdodDsKLQot
ICAgICAgICBHTEMobV9jb250ZXh0LCBtX2NvbnRleHQtPnRleEltYWdlMkQoR3JhcGhpY3NDb250
ZXh0M0Q6OlRFWFRVUkVfMkQsIDAsIEdyYXBoaWNzQ29udGV4dDNEOjpSR0JBLCBtX3Jvb3RMYXll
clRleHR1cmVXaWR0aCwgbV9yb290TGF5ZXJUZXh0dXJlSGVpZ2h0LCAwLCBHcmFwaGljc0NvbnRl
eHQzRDo6UkdCQSwgR3JhcGhpY3NDb250ZXh0M0Q6OlVOU0lHTkVEX0JZVEUsIDApKTsKKyAgICAg
ICAgT3duQXJyYXlQdHI8dW5zaWduZWQgY2hhcj4gemVybzsKKyAgICAgICAgaW50IGJ1ZmZlclNp
emUgPSBtX3Jvb3RMYXllclRleHR1cmVXaWR0aCAqIG1fcm9vdExheWVyVGV4dHVyZUhlaWdodCAq
IDQ7CisgICAgICAgIGlmIChidWZmZXJTaXplKSB7CisgICAgICAgICAgICB6ZXJvID0gYWRvcHRB
cnJheVB0cihuZXcgdW5zaWduZWQgY2hhcltidWZmZXJTaXplXSk7CisgICAgICAgICAgICBtZW1z
ZXQoemVyby5nZXQoKSwgMCwgYnVmZmVyU2l6ZSk7CisgICAgICAgIH0KKyAgICAgICAgR0xDKG1f
Y29udGV4dCwgbV9jb250ZXh0LT50ZXhJbWFnZTJEKEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJF
XzJELCAwLCBHcmFwaGljc0NvbnRleHQzRDo6UkdCQSwgbV9yb290TGF5ZXJUZXh0dXJlV2lkdGgs
IG1fcm9vdExheWVyVGV4dHVyZUhlaWdodCwgMCwgR3JhcGhpY3NDb250ZXh0M0Q6OlJHQkEsIEdy
YXBoaWNzQ29udGV4dDNEOjpVTlNJR05FRF9CWVRFLCB6ZXJvLmdldCgpKSk7CiAKICAgICAgICAg
Ly8gUmVzZXQgdGhlIGN1cnJlbnQgcmVuZGVyIHN1cmZhY2UgdG8gZm9yY2UgYW4gdXBkYXRlIG9m
IHRoZSB2aWV3cG9ydCBhbmQKICAgICAgICAgLy8gcHJvamVjdGlvbiBtYXRyaXggbmV4dCB0aW1l
IHVzZVJlbmRlclN1cmZhY2UgaXMgY2FsbGVkLgpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jaHJvbWl1bS9SZW5kZXJTdXJmYWNlQ2hyb21pdW0uY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vUmVuZGVyU3VyZmFjZUNocm9taXVtLmNw
cAkocmV2aXNpb24gNzM0MDkpCisrKyBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVt
L1JlbmRlclN1cmZhY2VDaHJvbWl1bS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMxLDYgKzMxLDgg
QEAKIAogI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dDNELmgiCiAjaW5jbHVkZSAiTGF5ZXJSZW5k
ZXJlckNocm9taXVtLmgiCisjaW5jbHVkZSA8d3RmL093bkFycmF5UHRyLmg+CisjaW5jbHVkZSA8
d3RmL1Bhc3NPd25BcnJheVB0ci5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKQEAgLTc3LDkg
Kzc5LDE1IEBAIHZvaWQgUmVuZGVyU3VyZmFjZUNocm9taXVtOjpwcmVwYXJlQ29udGUKICAgICBp
ZiAobV9hbGxvY2F0ZWRUZXh0dXJlU2l6ZSAhPSByZXF1aXJlZFNpemUpIHsKICAgICAgICAgR3Jh
cGhpY3NDb250ZXh0M0QqIGNvbnRleHQgPSBtX293bmluZ0xheWVyLT5sYXllclJlbmRlcmVyKCkt
PmNvbnRleHQoKTsKICAgICAgICAgR0xDKGNvbnRleHQsIGNvbnRleHQtPmJpbmRUZXh0dXJlKEdy
YXBoaWNzQ29udGV4dDNEOjpURVhUVVJFXzJELCBtX2NvbnRlbnRzVGV4dHVyZUlkKSk7CisgICAg
ICAgIE93bkFycmF5UHRyPHVuc2lnbmVkIGNoYXI+IHplcm87CisgICAgICAgIGludCBidWZmZXJT
aXplID0gcmVxdWlyZWRTaXplLndpZHRoKCkgKiByZXF1aXJlZFNpemUuaGVpZ2h0KCkgKiA0Owor
ICAgICAgICBpZiAoYnVmZmVyU2l6ZSkgeworICAgICAgICAgICAgemVybyA9IGFkb3B0QXJyYXlQ
dHIobmV3IHVuc2lnbmVkIGNoYXJbYnVmZmVyU2l6ZV0pOworICAgICAgICAgICAgbWVtc2V0KHpl
cm8uZ2V0KCksIDAsIGJ1ZmZlclNpemUpOworICAgICAgICB9CiAgICAgICAgIEdMQyhjb250ZXh0
LCBjb250ZXh0LT50ZXhJbWFnZTJEKEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFXzJELCAwLCBH
cmFwaGljc0NvbnRleHQzRDo6UkdCQSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHJlcXVpcmVkU2l6ZS53aWR0aCgpLCByZXF1aXJlZFNpemUuaGVpZ2h0KCks
IDAsIEdyYXBoaWNzQ29udGV4dDNEOjpSR0JBLAotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgR3JhcGhpY3NDb250ZXh0M0Q6OlVOU0lHTkVEX0JZVEUsIDApKTsK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVxdWlyZWRTaXplLndp
ZHRoKCksIHJlcXVpcmVkU2l6ZS5oZWlnaHQoKSwgMCwgR3JhcGhpY3NDb250ZXh0M0Q6OlJHQkEs
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdyYXBoaWNzQ29udGV4
dDNEOjpVTlNJR05FRF9CWVRFLCB6ZXJvLmdldCgpKSk7CiAgICAgICAgIG1fYWxsb2NhdGVkVGV4
dHVyZVNpemUgPSByZXF1aXJlZFNpemU7CiAgICAgfQogfQpJbmRleDogV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jaHJvbWl1bS9WaWRlb0xheWVyQ2hyb21pdW0uY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vVmlkZW9MYXllckNocm9taXVtLmNw
cAkocmV2aXNpb24gNzM0MDkpCisrKyBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVt
L1ZpZGVvTGF5ZXJDaHJvbWl1bS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM5LDYgKzM5LDggQEAK
ICNpbmNsdWRlICJSZW5kZXJMYXllckJhY2tpbmcuaCIKICNpbmNsdWRlICJWaWRlb0ZyYW1lQ2hy
b21pdW0uaCIKICNpbmNsdWRlICJWaWRlb0ZyYW1lUHJvdmlkZXIuaCIKKyNpbmNsdWRlIDx3dGYv
T3duQXJyYXlQdHIuaD4KKyNpbmNsdWRlIDx3dGYvUGFzc093bkFycmF5UHRyLmg+CiAKIG5hbWVz
cGFjZSBXZWJDb3JlIHsKIApAQCAtMjk3LDcgKzI5OSwxMyBAQCBib29sIFZpZGVvTGF5ZXJDaHJv
bWl1bTo6YWxsb2NhdGVUZXh0dXJlCiB2b2lkIFZpZGVvTGF5ZXJDaHJvbWl1bTo6YWxsb2NhdGVU
ZXh0dXJlKEdyYXBoaWNzQ29udGV4dDNEKiBjb250ZXh0LCB1bnNpZ25lZCB0ZXh0dXJlSWQsIGNv
bnN0IEludFNpemUmIGRpbWVuc2lvbnMsIHVuc2lnbmVkIHRleHR1cmVGb3JtYXQpCiB7CiAgICAg
R0xDKGNvbnRleHQsIGNvbnRleHQtPmJpbmRUZXh0dXJlKEdyYXBoaWNzQ29udGV4dDNEOjpURVhU
VVJFXzJELCB0ZXh0dXJlSWQpKTsKLSAgICBHTEMoY29udGV4dCwgY29udGV4dC0+dGV4SW1hZ2Uy
RChHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV8yRCwgMCwgdGV4dHVyZUZvcm1hdCwgZGltZW5z
aW9ucy53aWR0aCgpLCBkaW1lbnNpb25zLmhlaWdodCgpLCAwLCB0ZXh0dXJlRm9ybWF0LCBHcmFw
aGljc0NvbnRleHQzRDo6VU5TSUdORURfQllURSwgMCkpOworICAgIE93bkFycmF5UHRyPHVuc2ln
bmVkIGNoYXI+IHplcm87CisgICAgaW50IGJ1ZmZlclNpemUgPSBkaW1lbnNpb25zLndpZHRoKCkg
KiBkaW1lbnNpb25zLmhlaWdodCgpICogNDsKKyAgICBpZiAoYnVmZmVyU2l6ZSkgeworICAgICAg
ICB6ZXJvID0gYWRvcHRBcnJheVB0cihuZXcgdW5zaWduZWQgY2hhcltidWZmZXJTaXplXSk7Cisg
ICAgICAgIG1lbXNldCh6ZXJvLmdldCgpLCAwLCBidWZmZXJTaXplKTsKKyAgICB9CisgICAgR0xD
KGNvbnRleHQsIGNvbnRleHQtPnRleEltYWdlMkQoR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVf
MkQsIDAsIHRleHR1cmVGb3JtYXQsIGRpbWVuc2lvbnMud2lkdGgoKSwgZGltZW5zaW9ucy5oZWln
aHQoKSwgMCwgdGV4dHVyZUZvcm1hdCwgR3JhcGhpY3NDb250ZXh0M0Q6OlVOU0lHTkVEX0JZVEUs
IHplcm8uZ2V0KCkpKTsKIH0KIAogdm9pZCBWaWRlb0xheWVyQ2hyb21pdW06OnVwZGF0ZVRleHR1
cmUoR3JhcGhpY3NDb250ZXh0M0QqIGNvbnRleHQsIHVuc2lnbmVkIHRleHR1cmVJZCwgY29uc3Qg
SW50U2l6ZSYgZGltZW5zaW9ucywgdW5zaWduZWQgZm9ybWF0LCBjb25zdCB2b2lkKiBkYXRhKQpJ
bmRleDogV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ncHUvRHJhd2luZ0J1ZmZlci5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ncHUvRHJhd2luZ0J1ZmZlci5j
cHAJKHJldmlzaW9uIDczNDA5KQorKysgV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ncHUvRHJh
d2luZ0J1ZmZlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM2LDYgKzM2LDkgQEAKIAogI2luY2x1
ZGUgIkV4dGVuc2lvbnMzRC5oIgogCisjaW5jbHVkZSA8d3RmL093bkFycmF5UHRyLmg+CisjaW5j
bHVkZSA8d3RmL1Bhc3NPd25BcnJheVB0ci5oPgorCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIFBh
c3NSZWZQdHI8RHJhd2luZ0J1ZmZlcj4gRHJhd2luZ0J1ZmZlcjo6Y3JlYXRlKEdyYXBoaWNzQ29u
dGV4dDNEKiBjb250ZXh0LCBjb25zdCBJbnRTaXplJiBzaXplKQpAQCAtMTQ1LDcgKzE0OCwxMyBA
QCB2b2lkIERyYXdpbmdCdWZmZXI6OnJlc2V0KGNvbnN0IEludFNpemUmCiAgICAgbV9jb250ZXh0
LT5iaW5kRnJhbWVidWZmZXIoR3JhcGhpY3NDb250ZXh0M0Q6OkZSQU1FQlVGRkVSLCBtX2Zibyk7
CiAKICAgICBtX2NvbnRleHQtPmJpbmRUZXh0dXJlKEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJF
XzJELCBtX2NvbG9yQnVmZmVyKTsKLSAgICBtX2NvbnRleHQtPnRleEltYWdlMkQoR3JhcGhpY3ND
b250ZXh0M0Q6OlRFWFRVUkVfMkQsIDAsIGludGVybmFsQ29sb3JGb3JtYXQsIG1fc2l6ZS53aWR0
aCgpLCBtX3NpemUuaGVpZ2h0KCksIDAsIGNvbG9yRm9ybWF0LCBHcmFwaGljc0NvbnRleHQzRDo6
VU5TSUdORURfQllURSwgMCk7CisgICAgT3duQXJyYXlQdHI8dW5zaWduZWQgY2hhcj4gemVybzsK
KyAgICBpbnQgYnVmZmVyU2l6ZSA9IG1fc2l6ZS53aWR0aCgpICogbV9zaXplLmhlaWdodCgpICog
KGF0dHJpYnV0ZXMuYWxwaGEgPyA0IDogMyk7CisgICAgaWYgKGJ1ZmZlclNpemUpIHsKKyAgICAg
ICAgemVybyA9IGFkb3B0QXJyYXlQdHIobmV3IHVuc2lnbmVkIGNoYXJbYnVmZmVyU2l6ZV0pOwor
ICAgICAgICBtZW1zZXQoemVyby5nZXQoKSwgMCwgYnVmZmVyU2l6ZSk7CisgICAgfQorICAgIG1f
Y29udGV4dC0+dGV4SW1hZ2UyRChHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV8yRCwgMCwgaW50
ZXJuYWxDb2xvckZvcm1hdCwgbV9zaXplLndpZHRoKCksIG1fc2l6ZS5oZWlnaHQoKSwgMCwgY29s
b3JGb3JtYXQsIEdyYXBoaWNzQ29udGV4dDNEOjpVTlNJR05FRF9CWVRFLCB6ZXJvLmdldCgpKTsK
ICAgICBtX2NvbnRleHQtPmZyYW1lYnVmZmVyVGV4dHVyZTJEKEdyYXBoaWNzQ29udGV4dDNEOjpG
UkFNRUJVRkZFUiwgR3JhcGhpY3NDb250ZXh0M0Q6OkNPTE9SX0FUVEFDSE1FTlQwLCBHcmFwaGlj
c0NvbnRleHQzRDo6VEVYVFVSRSwgbV9jb2xvckJ1ZmZlciwgMCk7CiAgICAgbV9jb250ZXh0LT5i
aW5kVGV4dHVyZShHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV8yRCwgMCk7CiAgICAgaWYgKCFt
dWx0aXNhbXBsZSgpICYmIChhdHRyaWJ1dGVzLnN0ZW5jaWwgfHwgYXR0cmlidXRlcy5kZXB0aCkp
IHsKQEAgLTE2NiwxOCArMTc1LDEzIEBAIHZvaWQgRHJhd2luZ0J1ZmZlcjo6cmVzZXQoY29uc3Qg
SW50U2l6ZSYKICAgICBpZiAobXVsdGlzYW1wbGUoKSkKICAgICAgICAgbV9jb250ZXh0LT5iaW5k
RnJhbWVidWZmZXIoR3JhcGhpY3NDb250ZXh0M0Q6OkZSQU1FQlVGRkVSLCBtX211bHRpc2FtcGxl
RkJPKTsKIAotICAgIC8vIEluaXRpYWxpemUgcmVuZGVyYnVmZmVycyB0byAwLgotICAgIGZsb2F0
IGNsZWFyQ29sb3JbXSA9IHswLCAwLCAwLCAwfSwgY2xlYXJEZXB0aCA9IDA7CisgICAgLy8gSW5p
dGlhbGl6ZSByZW5kZXJidWZmZXJzIChkZXB0aC9zdGVuY2lsKS4KKyAgICBmbG9hdCBjbGVhckRl
cHRoID0gMDsKICAgICBpbnQgY2xlYXJTdGVuY2lsID0gMDsKLSAgICB1bnNpZ25lZCBjaGFyIGNv
bG9yTWFza1tdID0ge3RydWUsIHRydWUsIHRydWUsIHRydWV9LCBkZXB0aE1hc2sgPSB0cnVlOwor
ICAgIHVuc2lnbmVkIGNoYXIgZGVwdGhNYXNrID0gdHJ1ZTsKICAgICB1bnNpZ25lZCBpbnQgc3Rl
bmNpbE1hc2sgPSAweGZmZmZmZmZmOwogICAgIHVuc2lnbmVkIGNoYXIgaXNTY2lzc29yRW5hYmxl
ZCA9IGZhbHNlOwotICAgIHVuc2lnbmVkIGNoYXIgaXNEaXRoZXJFbmFibGVkID0gZmFsc2U7Ci0g
ICAgdW5zaWduZWQgbG9uZyBjbGVhck1hc2sgPSBHcmFwaGljc0NvbnRleHQzRDo6Q09MT1JfQlVG
RkVSX0JJVDsKLSAgICBtX2NvbnRleHQtPmdldEZsb2F0dihHcmFwaGljc0NvbnRleHQzRDo6Q09M
T1JfQ0xFQVJfVkFMVUUsIGNsZWFyQ29sb3IpOwotICAgIG1fY29udGV4dC0+Y2xlYXJDb2xvcigw
LCAwLCAwLCAwKTsKLSAgICBtX2NvbnRleHQtPmdldEJvb2xlYW52KEdyYXBoaWNzQ29udGV4dDNE
OjpDT0xPUl9XUklURU1BU0ssIGNvbG9yTWFzayk7Ci0gICAgbV9jb250ZXh0LT5jb2xvck1hc2so
dHJ1ZSwgdHJ1ZSwgdHJ1ZSwgdHJ1ZSk7CisgICAgdW5zaWduZWQgbG9uZyBjbGVhck1hc2sgPSAw
OwogICAgIGlmIChhdHRyaWJ1dGVzLmRlcHRoKSB7CiAgICAgICAgIG1fY29udGV4dC0+Z2V0Rmxv
YXR2KEdyYXBoaWNzQ29udGV4dDNEOjpERVBUSF9DTEVBUl9WQUxVRSwgJmNsZWFyRGVwdGgpOwog
ICAgICAgICBtX2NvbnRleHQtPmNsZWFyRGVwdGgoMSk7CkBAIC0xOTIsMzEgKzE5NiwyNSBAQCB2
b2lkIERyYXdpbmdCdWZmZXI6OnJlc2V0KGNvbnN0IEludFNpemUmCiAgICAgICAgIG1fY29udGV4
dC0+c3RlbmNpbE1hc2tTZXBhcmF0ZShHcmFwaGljc0NvbnRleHQzRDo6RlJPTlQsIDB4ZmZmZmZm
ZmYpOwogICAgICAgICBjbGVhck1hc2sgfD0gR3JhcGhpY3NDb250ZXh0M0Q6OlNURU5DSUxfQlVG
RkVSX0JJVDsKICAgICB9Ci0gICAgaXNTY2lzc29yRW5hYmxlZCA9IG1fY29udGV4dC0+aXNFbmFi
bGVkKEdyYXBoaWNzQ29udGV4dDNEOjpTQ0lTU09SX1RFU1QpOwotICAgIG1fY29udGV4dC0+ZGlz
YWJsZShHcmFwaGljc0NvbnRleHQzRDo6U0NJU1NPUl9URVNUKTsKLSAgICBpc0RpdGhlckVuYWJs
ZWQgPSBtX2NvbnRleHQtPmlzRW5hYmxlZChHcmFwaGljc0NvbnRleHQzRDo6RElUSEVSKTsKLSAg
ICBtX2NvbnRleHQtPmRpc2FibGUoR3JhcGhpY3NDb250ZXh0M0Q6OkRJVEhFUik7CisgICAgaWYg
KGNsZWFyTWFzaykgeworICAgICAgICBpc1NjaXNzb3JFbmFibGVkID0gbV9jb250ZXh0LT5pc0Vu
YWJsZWQoR3JhcGhpY3NDb250ZXh0M0Q6OlNDSVNTT1JfVEVTVCk7CisgICAgICAgIG1fY29udGV4
dC0+ZGlzYWJsZShHcmFwaGljc0NvbnRleHQzRDo6U0NJU1NPUl9URVNUKTsKIAotICAgIG1fY29u
dGV4dC0+Y2xlYXIoY2xlYXJNYXNrKTsKKyAgICAgICAgbV9jb250ZXh0LT5jbGVhcihjbGVhck1h
c2spOwogCi0gICAgbV9jb250ZXh0LT5jbGVhckNvbG9yKGNsZWFyQ29sb3JbMF0sIGNsZWFyQ29s
b3JbMV0sIGNsZWFyQ29sb3JbMl0sIGNsZWFyQ29sb3JbM10pOwotICAgIG1fY29udGV4dC0+Y29s
b3JNYXNrKGNvbG9yTWFza1swXSwgY29sb3JNYXNrWzFdLCBjb2xvck1hc2tbMl0sIGNvbG9yTWFz
a1szXSk7Ci0gICAgaWYgKGF0dHJpYnV0ZXMuZGVwdGgpIHsKLSAgICAgICAgbV9jb250ZXh0LT5j
bGVhckRlcHRoKGNsZWFyRGVwdGgpOwotICAgICAgICBtX2NvbnRleHQtPmRlcHRoTWFzayhkZXB0
aE1hc2spOwotICAgIH0KLSAgICBpZiAoYXR0cmlidXRlcy5zdGVuY2lsKSB7Ci0gICAgICAgIG1f
Y29udGV4dC0+Y2xlYXJTdGVuY2lsKGNsZWFyU3RlbmNpbCk7Ci0gICAgICAgIG1fY29udGV4dC0+
c3RlbmNpbE1hc2tTZXBhcmF0ZShHcmFwaGljc0NvbnRleHQzRDo6RlJPTlQsIHN0ZW5jaWxNYXNr
KTsKKyAgICAgICAgaWYgKGF0dHJpYnV0ZXMuZGVwdGgpIHsKKyAgICAgICAgICAgIG1fY29udGV4
dC0+Y2xlYXJEZXB0aChjbGVhckRlcHRoKTsKKyAgICAgICAgICAgIG1fY29udGV4dC0+ZGVwdGhN
YXNrKGRlcHRoTWFzayk7CisgICAgICAgIH0KKyAgICAgICAgaWYgKGF0dHJpYnV0ZXMuc3RlbmNp
bCkgeworICAgICAgICAgICAgbV9jb250ZXh0LT5jbGVhclN0ZW5jaWwoY2xlYXJTdGVuY2lsKTsK
KyAgICAgICAgICAgIG1fY29udGV4dC0+c3RlbmNpbE1hc2tTZXBhcmF0ZShHcmFwaGljc0NvbnRl
eHQzRDo6RlJPTlQsIHN0ZW5jaWxNYXNrKTsKKyAgICAgICAgfQorICAgICAgICBpZiAoaXNTY2lz
c29yRW5hYmxlZCkKKyAgICAgICAgICAgIG1fY29udGV4dC0+ZW5hYmxlKEdyYXBoaWNzQ29udGV4
dDNEOjpTQ0lTU09SX1RFU1QpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBtX2NvbnRleHQt
PmRpc2FibGUoR3JhcGhpY3NDb250ZXh0M0Q6OlNDSVNTT1JfVEVTVCk7CiAgICAgfQotICAgIGlm
IChpc1NjaXNzb3JFbmFibGVkKQotICAgICAgICBtX2NvbnRleHQtPmVuYWJsZShHcmFwaGljc0Nv
bnRleHQzRDo6U0NJU1NPUl9URVNUKTsKLSAgICBlbHNlCi0gICAgICAgIG1fY29udGV4dC0+ZGlz
YWJsZShHcmFwaGljc0NvbnRleHQzRDo6U0NJU1NPUl9URVNUKTsKLSAgICBpZiAoaXNEaXRoZXJF
bmFibGVkKQotICAgICAgICBtX2NvbnRleHQtPmVuYWJsZShHcmFwaGljc0NvbnRleHQzRDo6RElU
SEVSKTsKLSAgICBlbHNlCi0gICAgICAgIG1fY29udGV4dC0+ZGlzYWJsZShHcmFwaGljc0NvbnRl
eHQzRDo6RElUSEVSKTsKIAogICAgIG1fY29udGV4dC0+Zmx1c2goKTsKICAgICAKSW5kZXg6IFdl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3B1L1RleHR1cmUuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3B1L1RleHR1cmUuY3BwCShyZXZpc2lvbiA3MzQwOSkK
KysrIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3B1L1RleHR1cmUuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC00MSw2ICs0MSw3IEBACiAKICNpbmNsdWRlIDxhbGdvcml0aG0+CiAjaW5jbHVkZSA8
d3RmL093bkFycmF5UHRyLmg+CisjaW5jbHVkZSA8d3RmL1Bhc3NPd25BcnJheVB0ci5oPgogCiB1
c2luZyBuYW1lc3BhY2Ugc3RkOwogCkBAIC0xMDYsMTUgKzEwNywyMiBAQCBQYXNzUmVmUHRyPFRl
eHR1cmU+IFRleHR1cmU6OmNyZWF0ZShHcmFwCiAKICAgICAgICAgSW50UmVjdCB0aWxlQm91bmRz
V2l0aEJvcmRlciA9IHRpbGluZy50aWxlQm91bmRzV2l0aEJvcmRlcihpKTsKIAotICAgIHVuc2ln
bmVkIGludCBnbEZvcm1hdCA9IDA7Ci0gICAgdW5zaWduZWQgaW50IGdsVHlwZSA9IDA7Ci0gICAg
Ym9vbCBzd2l6emxlOwotICAgIGNvbnZlcnRGb3JtYXQoY29udGV4dCwgZm9ybWF0LCAmZ2xGb3Jt
YXQsICZnbFR5cGUsICZzd2l6emxlKTsKLSAgICBjb250ZXh0LT5iaW5kVGV4dHVyZShHcmFwaGlj
c0NvbnRleHQzRDo6VEVYVFVSRV8yRCwgdGV4dHVyZUlkKTsKLSAgICBjb250ZXh0LT50ZXhJbWFn
ZTJEKEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFXzJELCAwLCBnbEZvcm1hdCwKLSAgICAgICAg
ICAgIHRpbGVCb3VuZHNXaXRoQm9yZGVyLndpZHRoKCksCi0gICAgICAgICAgICB0aWxlQm91bmRz
V2l0aEJvcmRlci5oZWlnaHQoKSwKLSAgICAgICAgICAgIDAsIGdsRm9ybWF0LCBnbFR5cGUsIDAp
OworICAgICAgICB1bnNpZ25lZCBpbnQgZ2xGb3JtYXQgPSAwOworICAgICAgICB1bnNpZ25lZCBp
bnQgZ2xUeXBlID0gMDsKKyAgICAgICAgYm9vbCBzd2l6emxlOworICAgICAgICBjb252ZXJ0Rm9y
bWF0KGNvbnRleHQsIGZvcm1hdCwgJmdsRm9ybWF0LCAmZ2xUeXBlLCAmc3dpenpsZSk7CisgICAg
ICAgIGNvbnRleHQtPmJpbmRUZXh0dXJlKEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFXzJELCB0
ZXh0dXJlSWQpOworICAgICAgICBPd25BcnJheVB0cjx1bnNpZ25lZCBjaGFyPiB6ZXJvOworICAg
ICAgICBpbnQgYnVmZmVyU2l6ZSA9IHRpbGVCb3VuZHNXaXRoQm9yZGVyLndpZHRoKCkgKiB0aWxl
Qm91bmRzV2l0aEJvcmRlci5oZWlnaHQoKSAqIDQ7CisgICAgICAgIGlmIChidWZmZXJTaXplKSB7
CisgICAgICAgICAgICB6ZXJvID0gYWRvcHRBcnJheVB0cihuZXcgdW5zaWduZWQgY2hhcltidWZm
ZXJTaXplXSk7CisgICAgICAgICAgICBtZW1zZXQoemVyby5nZXQoKSwgMCwgYnVmZmVyU2l6ZSk7
CisgICAgICAgIH0KKworICAgICAgICBjb250ZXh0LT50ZXhJbWFnZTJEKEdyYXBoaWNzQ29udGV4
dDNEOjpURVhUVVJFXzJELCAwLCBnbEZvcm1hdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICB0aWxlQm91bmRzV2l0aEJvcmRlci53aWR0aCgpLAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHRpbGVCb3VuZHNXaXRoQm9yZGVyLmhlaWdodCgpLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIDAsIGdsRm9ybWF0LCBnbFR5cGUsIHplcm8uZ2V0KCkpOwogICAgIH0KICAgICByZXR1
cm4gYWRvcHRSZWYobmV3IFRleHR1cmUoY29udGV4dCwgdGV4dHVyZUlkcy5sZWFrUHRyKCksIGZv
cm1hdCwgd2lkdGgsIGhlaWdodCwgbWF4VGV4dHVyZVNpemUpKTsKIH0KSW5kZXg6IFdlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0dyYXBoaWNzQ29udGV4dDNET3BlbkdMLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9HcmFwaGljc0NvbnRl
eHQzRE9wZW5HTC5jcHAJKHJldmlzaW9uIDczMzE5KQorKysgV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9vcGVuZ2wvR3JhcGhpY3NDb250ZXh0M0RPcGVuR0wuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0xMzI0LDggKzEzMjQsMTEgQEAgbG9uZyBHcmFwaGljc0NvbnRleHQzRDo6Z2V0VmVydGV4QXR0
cmliTwogCiBpbnQgR3JhcGhpY3NDb250ZXh0M0Q6OnRleEltYWdlMkQodW5zaWduZWQgdGFyZ2V0
LCB1bnNpZ25lZCBsZXZlbCwgdW5zaWduZWQgaW50ZXJuYWxmb3JtYXQsIHVuc2lnbmVkIHdpZHRo
LCB1bnNpZ25lZCBoZWlnaHQsIHVuc2lnbmVkIGJvcmRlciwgdW5zaWduZWQgZm9ybWF0LCB1bnNp
Z25lZCB0eXBlLCB2b2lkKiBwaXhlbHMpCiB7CisgICAgaWYgKHdpZHRoICYmIGhlaWdodCAmJiAh
cGl4ZWxzKSB7CisgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKElOVkFMSURfVkFMVUUpOworICAg
ICAgICByZXR1cm47CisgICAgfQogICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwotCiAgICAgOjpn
bFRleEltYWdlMkQodGFyZ2V0LCBsZXZlbCwgaW50ZXJuYWxmb3JtYXQsIHdpZHRoLCBoZWlnaHQs
IGJvcmRlciwgZm9ybWF0LCB0eXBlLCBwaXhlbHMpOwogICAgIHJldHVybiAwOwogfQpJbmRleDog
V2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQvY2hyb21pdW0v
Q2hhbmdlTG9nCShyZXZpc2lvbiA3MzQyMCkKKysrIFdlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cJ
KHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwxMyBAQAorMjAxMC0xMi0wNiAgWmhlbnlhbyBNbyAg
PHptb0Bnb29nbGUuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgor
CisgICAgICAgIFdlYkdMUmVuZGVyaW5nQ29udGV4dCBuZWVkcyB0byB6ZXJvIHRleHR1cmVzIGFu
ZCByZW5kZXJidWZmZXJzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD00OTM1NQorCisgICAgICAgICogc3JjL1dlYkdyYXBoaWNzQ29udGV4dDNERGVmYXVs
dEltcGwuY3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJHcmFwaGljc0NvbnRleHQzRERlZmF1bHRJ
bXBsOjp0ZXhJbWFnZTJEKTogRG9uJ3QgZGVhbCB3aXRoIHRleHR1cmUgaW5pdGlhbGl6YXRpb24g
YXQgdGhpcyBsZXZlbDsgZ2VuZXJhdGUgYW4gSU5WQUxJRF9WQUxVRSBpZiBwaXhlbHM9PW51bGwg
aXMgcGFzc2VkIGluLgorCiAyMDEwLTEyLTA2ICBOYXRlIENoYXBpbiAgPGphcGhldEBjaHJvbWl1
bS5vcmc+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgQWRhbSBCYXJ0aC4KSW5kZXg6IFdlYktpdC9j
aHJvbWl1bS9zcmMvV2ViR3JhcGhpY3NDb250ZXh0M0REZWZhdWx0SW1wbC5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJHcmFwaGljc0NvbnRleHQzRERlZmF1bHRJbXBs
LmNwcAkocmV2aXNpb24gNzMzMTkpCisrKyBXZWJLaXQvY2hyb21pdW0vc3JjL1dlYkdyYXBoaWNz
Q29udGV4dDNERGVmYXVsdEltcGwuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMjYwLDY4ICsxMjYw
LDEzIEBAIERFTEVHQVRFX1RPX0dMXzIoc2FtcGxlQ292ZXJhZ2UsIFNhbXBsZUMKIAogREVMRUdB
VEVfVE9fR0xfNChzY2lzc29yLCBTY2lzc29yLCBsb25nLCBsb25nLCB1bnNpZ25lZCBsb25nLCB1
bnNpZ25lZCBsb25nKQogCi11bnNpZ25lZCBieXRlc1BlckNvbXBvbmVudCh1bnNpZ25lZCB0eXBl
KQotewotICAgIHN3aXRjaCAodHlwZSkgewotICAgIGNhc2UgR0xfQllURToKLSAgICBjYXNlIEdM
X1VOU0lHTkVEX0JZVEU6Ci0gICAgICAgIHJldHVybiAxOwotICAgIGNhc2UgR0xfU0hPUlQ6Ci0g
ICAgY2FzZSBHTF9VTlNJR05FRF9TSE9SVDoKLSAgICBjYXNlIEdMX1VOU0lHTkVEX1NIT1JUXzVf
Nl81OgotICAgIGNhc2UgR0xfVU5TSUdORURfU0hPUlRfNF80XzRfNDoKLSAgICBjYXNlIEdMX1VO
U0lHTkVEX1NIT1JUXzVfNV81XzE6Ci0gICAgICAgIHJldHVybiAyOwotICAgIGNhc2UgR0xfRkxP
QVQ6Ci0gICAgICAgIHJldHVybiA0OwotICAgIGRlZmF1bHQ6Ci0gICAgICAgIHJldHVybiA0Owot
ICAgIH0KLX0KLQotdW5zaWduZWQgY29tcG9uZW50c1BlclBpeGVsKHVuc2lnbmVkIGZvcm1hdCwg
dW5zaWduZWQgdHlwZSkKLXsKLSAgICBzd2l0Y2ggKHR5cGUpIHsKLSAgICBjYXNlIEdMX1VOU0lH
TkVEX1NIT1JUXzVfNl81OgotICAgIGNhc2UgR0xfVU5TSUdORURfU0hPUlRfNF80XzRfNDoKLSAg
ICBjYXNlIEdMX1VOU0lHTkVEX1NIT1JUXzVfNV81XzE6Ci0gICAgICAgIHJldHVybiAxOwotICAg
IGRlZmF1bHQ6Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLSAgICBzd2l0Y2ggKGZvcm1hdCkgewot
ICAgIGNhc2UgR0xfTFVNSU5BTkNFOgotICAgICAgICByZXR1cm4gMTsKLSAgICBjYXNlIEdMX0xV
TUlOQU5DRV9BTFBIQToKLSAgICAgICAgcmV0dXJuIDI7Ci0gICAgY2FzZSBHTF9SR0I6Ci0gICAg
ICAgIHJldHVybiAzOwotICAgIGNhc2UgR0xfUkdCQToKLSAgICBjYXNlIEdMX0JHUkFfRVhUOgot
ICAgICAgICByZXR1cm4gNDsKLSAgICBkZWZhdWx0OgotICAgICAgICByZXR1cm4gNDsKLSAgICB9
Ci19Ci0KLS8vIE4uQi46ICBUaGlzIGNvZGUgZG9lcyBub3QgcHJvdGVjdCBhZ2FpbnN0IGludGVn
ZXIgb3ZlcmZsb3cgKGFzIHRoZSBjb21tYW5kCi0vLyBidWZmZXIgaW1wbGVtZW50YXRpb24gZG9l
cyksIHNvIGl0IHNob3VsZCBub3QgYmUgY29uc2lkZXJlZCByb2J1c3QgZW5vdWdoCi0vLyBmb3Ig
dXNlIGluIHRoZSBicm93c2VyLiAgU2luY2UgdGhpcyBpbXBsZW1lbnRhdGlvbiBpcyBvbmx5IHVz
ZWQgZm9yIGxheW91dAotLy8gdGVzdHMsIHRoaXMgc2hvdWxkIGJlIG9rIGZvciBub3cuCi1zaXpl
X3QgaW1hZ2VTaXplSW5CeXRlcyh1bnNpZ25lZCB3aWR0aCwgdW5zaWduZWQgaGVpZ2h0LCB1bnNp
Z25lZCBmb3JtYXQsIHVuc2lnbmVkIHR5cGUpCi17Ci0gICAgcmV0dXJuIHdpZHRoICogaGVpZ2h0
ICogYnl0ZXNQZXJDb21wb25lbnQodHlwZSkgKiBjb21wb25lbnRzUGVyUGl4ZWwoZm9ybWF0LCB0
eXBlKTsKLX0KLQogdm9pZCBXZWJHcmFwaGljc0NvbnRleHQzRERlZmF1bHRJbXBsOjp0ZXhJbWFn
ZTJEKHVuc2lnbmVkIHRhcmdldCwgdW5zaWduZWQgbGV2ZWwsIHVuc2lnbmVkIGludGVybmFsRm9y
bWF0LCB1bnNpZ25lZCB3aWR0aCwgdW5zaWduZWQgaGVpZ2h0LCB1bnNpZ25lZCBib3JkZXIsIHVu
c2lnbmVkIGZvcm1hdCwgdW5zaWduZWQgdHlwZSwgY29uc3Qgdm9pZCogcGl4ZWxzKQogewotICAg
IE93bkFycmF5UHRyPHVpbnQ4PiB6ZXJvOwotICAgIGlmICghcGl4ZWxzKSB7Ci0gICAgICAgIHNp
emVfdCBzaXplID0gaW1hZ2VTaXplSW5CeXRlcyh3aWR0aCwgaGVpZ2h0LCBmb3JtYXQsIHR5cGUp
OwotICAgICAgICB6ZXJvLnNldChuZXcgdWludDhbc2l6ZV0pOwotICAgICAgICBtZW1zZXQoemVy
by5nZXQoKSwgMCwgc2l6ZSk7Ci0gICAgICAgIHBpeGVscyA9IHplcm8uZ2V0KCk7CisgICAgaWYg
KHdpZHRoICYmIGhlaWdodCAmJiAhcGl4ZWxzKSB7CisgICAgICAgIHN5bnRoZXNpemVHTEVycm9y
KEdMX0lOVkFMSURfVkFMVUUpOworICAgICAgICByZXR1cm47CiAgICAgfQorICAgIG1ha2VDb250
ZXh0Q3VycmVudCgpOwogICAgIGdsVGV4SW1hZ2UyRCh0YXJnZXQsIGxldmVsLCBpbnRlcm5hbEZv
cm1hdCwgd2lkdGgsIGhlaWdodCwgYm9yZGVyLCBmb3JtYXQsIHR5cGUsIHBpeGVscyk7CiB9CiAK
SW5kZXg6IExheW91dFRlc3RzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9D
aGFuZ2VMb2cJKHJldmlzaW9uIDczNDIwKQorKysgTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xLDMgKzEsMTMgQEAKKzIwMTAtMTItMDYgIFpoZW55YW8gTW8gIDx6bW9A
Z29vZ2xlLmNvbT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAg
ICAgICBXZWJHTFJlbmRlcmluZ0NvbnRleHQgbmVlZHMgdG8gemVybyB0ZXh0dXJlcyBhbmQgcmVu
ZGVyYnVmZmVycworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9NDkzNTUKKworICAgICAgICAqIGZhc3QvY2FudmFzL3dlYmdsL3VuaW5pdGlhbGl6ZWQtdGVz
dC1leHBlY3RlZC50eHQ6IEFkZGVkLgorICAgICAgICAqIGZhc3QvY2FudmFzL3dlYmdsL3VuaW5p
dGlhbGl6ZWQtdGVzdC5odG1sOiBBZGRlZC4KKwogMjAxMC0xMi0wNiAgVmljdG9yIFdhbmcgIDx2
aWN0b3J3QGNocm9taXVtLm9yZz4KIAogICAgICAgICBVbnJldmlld2VkLgpJbmRleDogTGF5b3V0
VGVzdHMvZmFzdC9jYW52YXMvd2ViZ2wvdW5pbml0aWFsaXplZC10ZXN0LWV4cGVjdGVkLnR4dAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9mYXN0L2NhbnZhcy93ZWJnbC91bmluaXRpYWxpemVk
LXRlc3QtZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvZmFzdC9jYW52
YXMvd2ViZ2wvdW5pbml0aWFsaXplZC10ZXN0LWV4cGVjdGVkLnR4dAkocmV2aXNpb24gMCkKQEAg
LTAsMCArMSwxMyBAQAorVGVzdHMgdG8gY2hlY2sgdXNlciBjb2RlIGNhbm5vdCBhY2Nlc3MgdW5p
bml0aWFsaXplZCBkYXRhIGZyb20gR0wgcmVzb3VyY2VzLgorCitPbiBzdWNjZXNzLCB5b3Ugd2ls
bCBzZWUgYSBzZXJpZXMgb2YgIlBBU1MiIG1lc3NhZ2VzLCBmb2xsb3dlZCBieSAiVEVTVCBDT01Q
TEVURSIuCisKK1BBU1MgQ29udGV4dCBjcmVhdGVkLgorUmVhZGluZyBhbiB1bmluaXRpYWxpemVk
IHRleHR1cmUgc2hvdWxkIHN1Y2NlZWQgd2l0aCBhbGwgYnl0ZXMgc2V0IHRvIDAuCitQQVNTIEFs
bCBkYXRhIGluaXRpYWxpemVkCitQQVNTIGdldEVycm9yIHdhcyBleHBlY3RlZCB2YWx1ZTogTk9f
RVJST1IgOiAKKworUEFTUyBzdWNjZXNzZnVsbHlQYXJzZWQgaXMgdHJ1ZQorCitURVNUIENPTVBM
RVRFCisKSW5kZXg6IExheW91dFRlc3RzL2Zhc3QvY2FudmFzL3dlYmdsL3VuaW5pdGlhbGl6ZWQt
dGVzdC5odG1sCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2Zhc3QvY2FudmFzL3dlYmdsL3Vu
aW5pdGlhbGl6ZWQtdGVzdC5odG1sCShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvZmFzdC9j
YW52YXMvd2ViZ2wvdW5pbml0aWFsaXplZC10ZXN0Lmh0bWwJKHJldmlzaW9uIDApCkBAIC0wLDAg
KzEsOTEgQEAKKzwhZG9jdHlwZSBodG1sPgorPGh0bWw+Cis8aGVhZD4KKzxtZXRhIGh0dHAtZXF1
aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PXV0Zi04Ij4KKzx0
aXRsZT5XZWJHTCBVbmluaXRpYWxpemVkIEdMIFJlc291cmNlcyBUZXN0czwvdGl0bGU+Cis8bGlu
ayByZWw9InN0eWxlc2hlZXQiIGhyZWY9Ii4uLy4uL2pzL3Jlc291cmNlcy9qcy10ZXN0LXN0eWxl
LmNzcyIvPgorPHNjcmlwdCBzcmM9Ii4uLy4uL2pzL3Jlc291cmNlcy9qcy10ZXN0LXByZS5qcyI+
PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0icmVzb3VyY2VzL3dlYmdsLXRlc3QuanMiPjwvc2NyaXB0
PgorPC9oZWFkPgorPGJvZHk+Cis8ZGl2IGlkPSJkZXNjcmlwdGlvbiI+PC9kaXY+Cis8ZGl2IGlk
PSJjb25zb2xlIj48L2Rpdj4KKzxjYW52YXMgaWQ9ImNhbnZhcyIgd2lkdGg9IjIiIGhlaWdodD0i
MiI+IDwvY2FudmFzPgorPHNjcmlwdD4KK2Rlc2NyaXB0aW9uKCJUZXN0cyB0byBjaGVjayB1c2Vy
IGNvZGUgY2Fubm90IGFjY2VzcyB1bmluaXRpYWxpemVkIGRhdGEgZnJvbSBHTCByZXNvdXJjZXMu
Iik7CisKK3ZhciBjYW52YXMgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiY2FudmFzIik7Cit2
YXIgZ2wgPSBjcmVhdGUzRENvbnRleHQoY2FudmFzKTsKK2lmICghZ2wpCisgIHRlc3RGYWlsZWQo
IkNvbnRleHQgY3JlYXRlZC4iKTsKK2Vsc2UKKyAgdGVzdFBhc3NlZCgiQ29udGV4dCBjcmVhdGVk
LiIpOworCitkZWJ1ZygiUmVhZGluZyBhbiB1bmluaXRpYWxpemVkIHRleHR1cmUgc2hvdWxkIHN1
Y2NlZWQgd2l0aCBhbGwgYnl0ZXMgc2V0IHRvIDAuIik7CisKK3ZhciB3aWR0aCA9IDUxMjsKK3Zh
ciBoZWlnaHQgPSA1MTI7Cit2YXIgYnBwID0gNDsKK3ZhciBleHBlY3RlZERhdGFMZW5ndGggPSB3
aWR0aCpoZWlnaHQqYnBwOworCit2YXIgdGV4ID0gZ2wuY3JlYXRlVGV4dHVyZSgpOworZ2wuYmlu
ZFRleHR1cmUoZ2wuVEVYVFVSRV8yRCwgdGV4KTsKK2dsLnRleEltYWdlMkQoZ2wuVEVYVFVSRV8y
RCwgMCwgZ2wuUkdCQSwgd2lkdGgsIGhlaWdodCwgMCwgZ2wuUkdCQSwgZ2wuVU5TSUdORURfQllU
RSwgbnVsbCk7CisKKy8vIHRoaXMgY2FuIGJlIHF1aXRlIHVuZGV0ZXJtaW5pc3RpYyBzbyB0byBp
bXByb3ZlIG9kZHMgb2Ygc2VlaW5nIHVuaW5pdGlhbGl6ZWQgZGF0YSB3cml0ZSBiaXRzCisvLyBp
bnRvIHRleCB0aGVuIGRlbGV0ZSB0ZXh0dXJlIHRoZW4gcmUtY3JlYXRlIG9uZSB3aXRoIHNhbWUg
Y2hhcmFjdGVyaXN0aWNzIChkcml2ZXIgd2lsbCBsaWtlbHkgcmV1c2UgbWVtKQorLy8gd2l0aCB0
aGlzIHRyaWNrIG9uIHI1OTA0NiBXZWJLaXQvT1NYIEkgZ2V0IEZBSUwgMTAwJSBvZiB0aGUgdGlt
ZSBpbnN0ZWFkIG9mIH4xNSUgb2YgdGhlIHRpbWUuCisKK3ZhciBiYWREYXRhID0gbmV3IFVpbnQ4
QXJyYXkoZXhwZWN0ZWREYXRhTGVuZ3RoKTsKK2ZvciAodmFyIGkgPSAwOyBpIDwgYmFkRGF0YS5s
ZW5ndGg7ICsraSkKKyAgICBiYWREYXRhW2ldID0gaSAlIDI1NTsKKworZ2wudGV4U3ViSW1hZ2Uy
RChnbC5URVhUVVJFXzJELCAwLCAwLCAwLCB3aWR0aCwgaGVpZ2h0LCBnbC5SR0JBLCBnbC5VTlNJ
R05FRF9CWVRFLCBiYWREYXRhKTsKK2dsLmZpbmlzaCgpOyAvLyBtYWtlIHN1cmUgaXQgaGFzIGJl
ZW4gdXBsb2FkZWQKKworZ2wuZGVsZXRlVGV4dHVyZSh0ZXgpOworZ2wuZmluaXNoKCk7IC8vIG1h
a2Ugc3VyZSBpdCBoYXMgYmVlbiBkZWxldGVkCisKK3ZhciB0ZXggPSBnbC5jcmVhdGVUZXh0dXJl
KCk7CitnbC5iaW5kVGV4dHVyZShnbC5URVhUVVJFXzJELCB0ZXgpOworZ2wudGV4SW1hZ2UyRChn
bC5URVhUVVJFXzJELCAwLCBnbC5SR0JBLCB3aWR0aCwgaGVpZ2h0LCAwLCBnbC5SR0JBLCBnbC5V
TlNJR05FRF9CWVRFLCBudWxsKTsKKwordmFyIGZiID0gZ2wuY3JlYXRlRnJhbWVidWZmZXIoKTsK
K2dsLmJpbmRGcmFtZWJ1ZmZlcihnbC5GUkFNRUJVRkZFUiwgZmIpOworZ2wuZnJhbWVidWZmZXJU
ZXh0dXJlMkQoZ2wuRlJBTUVCVUZGRVIsIGdsLkNPTE9SX0FUVEFDSE1FTlQwLCBnbC5URVhUVVJF
XzJELCB0ZXgsIDApOworCitkYXRhID0gbmV3IFVpbnQ4QXJyYXkod2lkdGggKiBoZWlnaHQgKiA0
KTsKK2dsLnJlYWRQaXhlbHMoMCwgMCwgd2lkdGgsIGhlaWdodCwgZ2wuUkdCQSwgZ2wuVU5TSUdO
RURfQllURSwgZGF0YSk7CisKK2lmIChkYXRhLmxlbmd0aCAhPSBleHBlY3RlZERhdGFMZW5ndGgp
IHsKKyAgICB0ZXN0RmFpbGVkKCJleHBlY3RlZCBkYXRhIGxlbmd0aCAiICsgZXhwZWN0ZWREYXRh
TGVuZ3RoICsgIiBidXQgZ290ICIgKyBkYXRhLmxlbmd0aCArICIgaW5zdGVhZC4iKTsKK30gZWxz
ZSB7CisgICAgdmFyIGsgPSAwOworICAgIGZvciAodmFyIGkgPSAwOyBpIDwgZGF0YS5sZW5ndGg7
ICsraSkgeworICAgICAgICBpZiAoZGF0YVtpXSAhPSAwKSB7CisgICAgICAgICAgICBrKys7Cisg
ICAgICAgIH0KKyAgICB9CisKKyAgICBpZiAoaykgeworICAgICAgICB0ZXN0RmFpbGVkKCJGb3Vu
ZCAiICsgayArICIgbm9uLXplcm8gYnl0ZXMiKTsKKyAgICB9IGVsc2UgeworICAgICAgICB0ZXN0
UGFzc2VkKCJBbGwgZGF0YSBpbml0aWFsaXplZCIpOworICAgIH0KK30KKworZ2xFcnJvclNob3Vs
ZEJlKGdsLCBnbC5OT19FUlJPUik7CisKKy8vVE9ETzogdW5pbml0aWFsaXplZCB2ZXJ0ZXggYXJy
YXkgYnVmZmVyCisvL1RPRE86IHVuaW5pdGlhbGl6ZWQgdmVydGV4IGVsZW1lbnRzIGJ1ZmZlcgor
Ly9UT0RPOiB1bmluaXRpYWxpemVkIGZyYW1lYnVmZmVyPyAoaW1wbGVtZW50YXRpb25zIHdvdWxk
IG5lZWQgdG8gZG8gYSBHTCBjbGVhciBhdCBmaXJzdCBiaW5kaW5nPykKKy8vVE9ETzogdW5pbml0
aWFsaXplZCByZW5kZXJidWZmZXI/IChpbXBsZW1lbnRhdGlvbnMgd291bGQgbmVlZCB0byBkbyBh
IEdMIGNsZWFyIGF0IGZpcnN0IGJpbmRpbmc/KQorLy9UT0RPOiB1bmluaXRpYWxpemVkIHVuaWZv
cm0gYXJyYXlzPworCitkZWJ1ZygiIik7CitzdWNjZXNzZnVsbHlQYXJzZWQgPSB0cnVlOworPC9z
Y3JpcHQ+Cis8c2NyaXB0IHNyYz0iLi4vLi4vanMvcmVzb3VyY2VzL2pzLXRlc3QtcG9zdC5qcyI+
PC9zY3JpcHQ+Cis8L2JvZHk+Cis8L2h0bWw+CisK
</data>
<flag name="review"
          id="66592"
          type_id="1"
          status="-"
          setter="kbr"
    />
    <flag name="commit-queue"
          id="66593"
          type_id="3"
          status="-"
          setter="zmo"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>76106</attachid>
            <date>2010-12-09 12:18:46 -0800</date>
            <delta_ts>2010-12-09 12:33:43 -0800</delta_ts>
            <desc>revised patch</desc>
            <filename>init.patch</filename>
            <type>text/plain</type>
            <size>35487</size>
            <attacher name="Zhenyao Mo">zmo</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA3MzYzNCkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsNDQgQEAKKzIwMTAtMTItMDYgIFpoZW55YW8gTW8gIDx6bW9AZ29vZ2xlLmNvbT4K
KworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBXZWJHTFJl
bmRlcmluZ0NvbnRleHQgbmVlZHMgdG8gemVybyB0ZXh0dXJlcyBhbmQgcmVuZGVyYnVmZmVycwor
ICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NDkzNTUKKwor
ICAgICAgICBUZXN0OiBmYXN0L2NhbnZhcy93ZWJnbC91bmluaXRpYWxpemVkLXRlc3QuaHRtbAor
CisgICAgICAgICogaHRtbC9jYW52YXMvV2ViR0xGcmFtZWJ1ZmZlci5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpXZWJHTEZyYW1lYnVmZmVyOjpvbkFjY2Vzcyk6IFVzZSBhIHBhcmFtZXRlciB0byBk
ZWNpZGUgaWYgcmVuZGVyYnVmZmVyIGluaXRpYWxpemF0aW9uIGlzIG5lZWRlZC4KKyAgICAgICAg
KFdlYkNvcmU6OldlYkdMRnJhbWVidWZmZXI6OmluaXRpYWxpemVSZW5kZXJidWZmZXJzKTogRG9u
J3QgcmV0dXJuIGZhbHNlIGlmIGNvbG9yIGJ1ZmZlciBkb2Vzbid0IGV4aXN0LgorICAgICAgICAq
IGh0bWwvY2FudmFzL1dlYkdMRnJhbWVidWZmZXIuaDogTW9kaWZ5IG9uQWNjZXNzIGZ1bmN0aW9u
IHNpZ25hdHVyZS4KKyAgICAgICAgKiBodG1sL2NhbnZhcy9XZWJHTFJlbmRlcmluZ0NvbnRleHQu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0OjpjbGVhcik6IENh
bGwgb25BY2Nlc3Mgd2l0aCBhbiBhZGRlZCBwYXJhbWV0ZXIuCisgICAgICAgIChXZWJDb3JlOjpX
ZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmNvcHlUZXhJbWFnZTJEKTogRGl0dG8uCisgICAgICAgIChX
ZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmNvcHlUZXhTdWJJbWFnZTJEKTogRGl0dG8u
CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmRyYXdBcnJheXMpOiBE
aXR0by4KKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dDo6ZHJhd0VsZW1l
bnRzKTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnJl
YWRQaXhlbHMpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4
dDo6dGV4SW1hZ2UyREJhc2UpOiBDcmVhdGUgYnVmZmVyIGRhdGEgb2YgMHMgaWYgaW5wdXQgaXMg
bnVsbCB0byBpbml0aWFsaXplIHRleHR1cmVzLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNz
L0dyYXBoaWNzQ29udGV4dDNELmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4
dDNEOjp0ZXhJbWFnZTJEUmVzb3VyY2VTYWZlKTogSGVscGVyIGZ1bmN0aW9uIHRoYXQgaW5pdGlh
bGl6ZSBhbGwgcGl4ZWxzIHRvIDAuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhp
Y3NDb250ZXh0M0QuaDoKKyAgICAgICAgKiBQbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9DYW52
YXMyRExheWVyQ2hyb21pdW0uY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q2FudmFzMkRMYXllckNo
cm9taXVtOjp1cGRhdGVDb250ZW50cyk6IENyZWF0ZSBidWZmZXIgZGF0YSBvZiAwcyBpZiBpbnB1
dCBpcyBudWxsIHRvIGluaXRpYWxpemUgdGV4dHVyZXMuCisgICAgICAgICogcGxhdGZvcm0vZ3Jh
cGhpY3MvY2hyb21pdW0vRHJhd2luZ0J1ZmZlckNocm9taXVtLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OmdlbmVyYXRlQ29sb3JUZXh0dXJlKTogRGl0dG8uCisgICAgICAgICogcGxhdGZvcm0vZ3Jh
cGhpY3MvY2hyb21pdW0vTGF5ZXJSZW5kZXJlckNocm9taXVtLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OkxheWVyUmVuZGVyZXJDaHJvbWl1bTo6cHJlcGFyZVRvRHJhd0xheWVycyk6IERpdHRvLgor
ICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1JlbmRlclN1cmZhY2VDaHJvbWl1
bS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJTdXJmYWNlQ2hyb21pdW06OnByZXBhcmVD
b250ZW50c1RleHR1cmUpOiBEaXR0by4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJv
bWl1bS9WaWRlb0xheWVyQ2hyb21pdW0uY3BwOgorICAgICAgICAoV2ViQ29yZTo6VmlkZW9MYXll
ckNocm9taXVtOjphbGxvY2F0ZVRleHR1cmUpOiBEaXR0by4KKyAgICAgICAgKiBwbGF0Zm9ybS9n
cmFwaGljcy9ncHUvRHJhd2luZ0J1ZmZlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpEcmF3aW5n
QnVmZmVyOjpyZXNldCk6IENyZWF0ZSBidWZmZXIgZGF0YSBvZiAwcyBpZiBpbnB1dCBpcyBudWxs
IHRvIGluaXRpYWxpemUgdGV4dHVyZXM7IGFsc28sIG9ubHkgY2xlYW4gdGhlIGRlcHRoL3N0ZW5j
aWwgYnVmZmVyIGxhdGVyLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2dwdS9UZXh0dXJl
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlRleHR1cmU6OmNyZWF0ZSk6IENyZWF0ZSBidWZmZXIg
ZGF0YSBvZiAwcyBpZiBpbnB1dCBpcyBudWxsIHRvIGluaXRpYWxpemUgdGV4dHVyZXMuCisgICAg
ICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0dyYXBoaWNzQ29udGV4dDNET3BlbkdMLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjp0ZXhJbWFnZTJEKTogR2Vu
ZXJhdGUgYW4gSU5WQUxJRF9WQUxVRSBpZiBwaXhlbHM9PW51bGwgaXMgcGFzc2VkLgorCiAyMDEw
LTEyLTA5ICBZYWVsIEFoYXJvbiAgPHlhZWwuYWhhcm9uQG5va2lhLmNvbT4KIAogICAgICAgICBS
ZXZpZXdlZCBieSBBbnRvbmlvIEdvbWVzLgpJbmRleDogV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJH
TEZyYW1lYnVmZmVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdM
RnJhbWVidWZmZXIuY3BwCShyZXZpc2lvbiA3MzMxOSkKKysrIFdlYkNvcmUvaHRtbC9jYW52YXMv
V2ViR0xGcmFtZWJ1ZmZlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE4MSwxMSArMTgxLDEzIEBA
IGJvb2wgV2ViR0xGcmFtZWJ1ZmZlcjo6aXNJbmNvbXBsZXRlKGJvb2wKICAgICByZXR1cm4gZmFs
c2U7CiB9CiAKLWJvb2wgV2ViR0xGcmFtZWJ1ZmZlcjo6b25BY2Nlc3MoKQorYm9vbCBXZWJHTEZy
YW1lYnVmZmVyOjpvbkFjY2Vzcyhib29sIG5lZWRUb0luaXRpYWxpemVSZW5kZXJidWZmZXJzKQog
ewogICAgIGlmIChpc0luY29tcGxldGUodHJ1ZSkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKLSAg
ICByZXR1cm4gaW5pdGlhbGl6ZVJlbmRlcmJ1ZmZlcnMoKTsKKyAgICBpZiAobmVlZFRvSW5pdGlh
bGl6ZVJlbmRlcmJ1ZmZlcnMpCisgICAgICAgIHJldHVybiBpbml0aWFsaXplUmVuZGVyYnVmZmVy
cygpOworICAgIHJldHVybiB0cnVlOwogfQogCiB2b2lkIFdlYkdMRnJhbWVidWZmZXI6OmRlbGV0
ZU9iamVjdEltcGwoUGxhdGZvcm0zRE9iamVjdCBvYmplY3QpCkBAIC0yMDEsOCArMjAzLDYgQEAg
dm9pZCBXZWJHTEZyYW1lYnVmZmVyOjpkZWxldGVPYmplY3RJbXBsKAogYm9vbCBXZWJHTEZyYW1l
YnVmZmVyOjppbml0aWFsaXplUmVuZGVyYnVmZmVycygpCiB7CiAgICAgQVNTRVJUKG9iamVjdCgp
KTsKLSAgICBpZiAoIWlzQ29sb3JBdHRhY2hlZCgpKQotICAgICAgICByZXR1cm4gZmFsc2U7CiAg
ICAgYm9vbCBpbml0Q29sb3IgPSBmYWxzZSwgaW5pdERlcHRoID0gZmFsc2UsIGluaXRTdGVuY2ls
ID0gZmFsc2U7CiAgICAgdW5zaWduZWQgbG9uZyBtYXNrID0gMDsKICAgICBpZiAoaXNVbmluaXRp
YWxpemVkKG1fY29sb3JBdHRhY2htZW50LmdldCgpKSkgewpJbmRleDogV2ViQ29yZS9odG1sL2Nh
bnZhcy9XZWJHTEZyYW1lYnVmZmVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9odG1sL2NhbnZh
cy9XZWJHTEZyYW1lYnVmZmVyLmgJKHJldmlzaW9uIDczMzE5KQorKysgV2ViQ29yZS9odG1sL2Nh
bnZhcy9XZWJHTEZyYW1lYnVmZmVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTUwLDggKzUwLDkgQEAg
cHVibGljOgogICAgIC8vIHJlYWRQaXhlbHMsIGNvcHlUZXhJbWFnZTJELCBjb3B5VGV4U3ViSW1h
Z2UyRCBpZiB0aGlzIGZyYW1lYnVmZmVyIGlzCiAgICAgLy8gY3VycmVudGx5IGJvdW5kLgogICAg
IC8vIFJldHVybiBmYWxzZSBpZiB0aGUgZnJhbWVidWZmZXIgaXMgaW5jb21wbGV0ZTsgb3RoZXJ3
aXNlIGluaXRpYWxpemUKLSAgICAvLyB0aGUgYnVmZmVycyBpZiB0aGV5IGhhdmVuJ3QgYmVlbiBp
bml0aWFsaXplZC4KLSAgICBib29sIG9uQWNjZXNzKCk7CisgICAgLy8gdGhlIGJ1ZmZlcnMgaWYg
dGhleSBoYXZlbid0IGJlZW4gaW5pdGlhbGl6ZWQgYW5kCisgICAgLy8gbmVlZFRvSW5pdGlhbGl6
ZVJlbmRlcmJ1ZmZlcnMgaXMgdHJ1ZS4KKyAgICBib29sIG9uQWNjZXNzKGJvb2wgbmVlZFRvSW5p
dGlhbGl6ZVJlbmRlcmJ1ZmZlcnMpOwogCiAgICAgLy8gUmV0dXJuIGZhbHNlIGRvZXMgbm90IG1l
YW4gQ09NUExFVEUsIG1pZ2h0IHN0aWxsIGJlIElOQ09NUExFVEUuCiAgICAgYm9vbCBpc0luY29t
cGxldGUoYm9vbCBjaGVja0ludGVybmFsRm9ybWF0KSBjb25zdDsKSW5kZXg6IFdlYkNvcmUvaHRt
bC9jYW52YXMvV2ViR0xSZW5kZXJpbmdDb250ZXh0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3Jl
L2h0bWwvY2FudmFzL1dlYkdMUmVuZGVyaW5nQ29udGV4dC5jcHAJKHJldmlzaW9uIDczMzE5KQor
KysgV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFJlbmRlcmluZ0NvbnRleHQuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC01NDQsNyArNTQ0LDcgQEAgdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmNs
ZWFyKHVuc2lnbgogICAgICAgICBtX2NvbnRleHQtPnN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNz
Q29udGV4dDNEOjpJTlZBTElEX1ZBTFVFKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KLSAgICBp
ZiAobV9mcmFtZWJ1ZmZlckJpbmRpbmcgJiYgIW1fZnJhbWVidWZmZXJCaW5kaW5nLT5vbkFjY2Vz
cygpKSB7CisgICAgaWYgKG1fZnJhbWVidWZmZXJCaW5kaW5nICYmICFtX2ZyYW1lYnVmZmVyQmlu
ZGluZy0+b25BY2Nlc3MoIWlzUmVzb3VyY2VTYWZlKCkpKSB7CiAgICAgICAgIG1fY29udGV4dC0+
c3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfRlJBTUVCVUZGRVJf
T1BFUkFUSU9OKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KQEAgLTYyMiw3ICs2MjIsNyBAQCB2
b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6Y29weVRleEltYWdlCiAgICAgICAgIG1fY29udGV4
dC0+c3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfVkFMVUUpOwog
ICAgICAgICByZXR1cm47CiAgICAgfQotICAgIGlmIChtX2ZyYW1lYnVmZmVyQmluZGluZyAmJiAh
bV9mcmFtZWJ1ZmZlckJpbmRpbmctPm9uQWNjZXNzKCkpIHsKKyAgICBpZiAobV9mcmFtZWJ1ZmZl
ckJpbmRpbmcgJiYgIW1fZnJhbWVidWZmZXJCaW5kaW5nLT5vbkFjY2VzcyghaXNSZXNvdXJjZVNh
ZmUoKSkpIHsKICAgICAgICAgbV9jb250ZXh0LT5zeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0Nv
bnRleHQzRDo6SU5WQUxJRF9GUkFNRUJVRkZFUl9PUEVSQVRJT04pOwogICAgICAgICByZXR1cm47
CiAgICAgfQpAQCAtNjQ3LDcgKzY0Nyw3IEBAIHZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojpj
b3B5VGV4U3ViSW0KICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQogICAgIH0KLSAgICBp
ZiAobV9mcmFtZWJ1ZmZlckJpbmRpbmcgJiYgIW1fZnJhbWVidWZmZXJCaW5kaW5nLT5vbkFjY2Vz
cygpKSB7CisgICAgaWYgKG1fZnJhbWVidWZmZXJCaW5kaW5nICYmICFtX2ZyYW1lYnVmZmVyQmlu
ZGluZy0+b25BY2Nlc3MoIWlzUmVzb3VyY2VTYWZlKCkpKSB7CiAgICAgICAgIG1fY29udGV4dC0+
c3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfRlJBTUVCVUZGRVJf
T1BFUkFUSU9OKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KQEAgLTEwNzgsNyArMTA3OCw3IEBA
IHZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpkcmF3QXJyYXlzKHUKICAgICAgICAgfQogICAg
IH0KIAotICAgIGlmIChtX2ZyYW1lYnVmZmVyQmluZGluZyAmJiAhbV9mcmFtZWJ1ZmZlckJpbmRp
bmctPm9uQWNjZXNzKCkpIHsKKyAgICBpZiAobV9mcmFtZWJ1ZmZlckJpbmRpbmcgJiYgIW1fZnJh
bWVidWZmZXJCaW5kaW5nLT5vbkFjY2VzcyghaXNSZXNvdXJjZVNhZmUoKSkpIHsKICAgICAgICAg
bV9jb250ZXh0LT5zeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9G
UkFNRUJVRkZFUl9PUEVSQVRJT04pOwogICAgICAgICByZXR1cm47CiAgICAgfQpAQCAtMTE0Miw3
ICsxMTQyLDcgQEAgdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmRyYXdFbGVtZW50cwogICAg
ICAgICB9CiAgICAgfQogCi0gICAgaWYgKG1fZnJhbWVidWZmZXJCaW5kaW5nICYmICFtX2ZyYW1l
YnVmZmVyQmluZGluZy0+b25BY2Nlc3MoKSkgeworICAgIGlmIChtX2ZyYW1lYnVmZmVyQmluZGlu
ZyAmJiAhbV9mcmFtZWJ1ZmZlckJpbmRpbmctPm9uQWNjZXNzKCFpc1Jlc291cmNlU2FmZSgpKSkg
ewogICAgICAgICBtX2NvbnRleHQtPnN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNE
OjpJTlZBTElEX0ZSQU1FQlVGRkVSX09QRVJBVElPTik7CiAgICAgICAgIHJldHVybjsKICAgICB9
CkBAIC0yMjYzLDcgKzIyNjMsNyBAQCB2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6cmVhZFBp
eGVscyhsCiAgICAgICAgIG1fY29udGV4dC0+c3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250
ZXh0M0Q6OklOVkFMSURfT1BFUkFUSU9OKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KLSAgICBp
ZiAobV9mcmFtZWJ1ZmZlckJpbmRpbmcgJiYgIW1fZnJhbWVidWZmZXJCaW5kaW5nLT5vbkFjY2Vz
cygpKSB7CisgICAgaWYgKG1fZnJhbWVidWZmZXJCaW5kaW5nICYmICFtX2ZyYW1lYnVmZmVyQmlu
ZGluZy0+b25BY2Nlc3MoIWlzUmVzb3VyY2VTYWZlKCkpKSB7CiAgICAgICAgIG1fY29udGV4dC0+
c3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfRlJBTUVCVUZGRVJf
T1BFUkFUSU9OKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KQEAgLTI0NjMsOCArMjQ2MywxNSBA
QCB2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dGV4SW1hZ2UyREJhCiAgICAgICAgICAgICBy
ZXR1cm47CiAgICAgICAgIH0KICAgICB9Ci0gICAgbV9jb250ZXh0LT50ZXhJbWFnZTJEKHRhcmdl
dCwgbGV2ZWwsIGludGVybmFsZm9ybWF0LCB3aWR0aCwgaGVpZ2h0LAotICAgICAgICAgICAgICAg
ICAgICAgICAgICBib3JkZXIsIGZvcm1hdCwgdHlwZSwgcGl4ZWxzKTsKKyAgICBpZiAoIXBpeGVs
cyAmJiAhaXNSZXNvdXJjZVNhZmUoKSkgeworICAgICAgICBpbnQgZXJyb3IgPSBtX2NvbnRleHQt
PnRleEltYWdlMkRSZXNvdXJjZVNhZmUodGFyZ2V0LCBsZXZlbCwgaW50ZXJuYWxmb3JtYXQsIHdp
ZHRoLCBoZWlnaHQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBib3JkZXIsIGZvcm1hdCwgdHlwZSk7CisgICAgICAgIGlmIChlcnJvcikKKyAg
ICAgICAgICAgIHJldHVybjsKKyAgICB9IGVsc2UgeworICAgICAgICBtX2NvbnRleHQtPnRleElt
YWdlMkQodGFyZ2V0LCBsZXZlbCwgaW50ZXJuYWxmb3JtYXQsIHdpZHRoLCBoZWlnaHQsCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBib3JkZXIsIGZvcm1hdCwgdHlwZSwgcGl4ZWxzKTsK
KyAgICB9CiAgICAgdGV4LT5zZXRMZXZlbEluZm8odGFyZ2V0LCBsZXZlbCwgaW50ZXJuYWxmb3Jt
YXQsIHdpZHRoLCBoZWlnaHQsIHR5cGUpOwogICAgIGNsZWFudXBBZnRlckdyYXBoaWNzQ2FsbChm
YWxzZSk7CiB9CkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4
dDNELmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNz
Q29udGV4dDNELmNwcAkocmV2aXNpb24gNzMzMTkpCisrKyBXZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL0dyYXBoaWNzQ29udGV4dDNELmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzEsMjcgKzMxLDEw
NCBAQAogI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dDNELmgiCiAKICNpbmNsdWRlICJBcnJheUJ1
ZmZlclZpZXcuaCIKKyNpbmNsdWRlICJDaGVja2VkSW50LmgiCiAjaW5jbHVkZSAiRHJhd2luZ0J1
ZmZlci5oIgogI2luY2x1ZGUgIkltYWdlLmgiCiAjaW5jbHVkZSAiSW1hZ2VEYXRhLmgiCiAKKyNp
bmNsdWRlIDx3dGYvT3duQXJyYXlQdHIuaD4KKyNpbmNsdWRlIDx3dGYvUGFzc093bkFycmF5UHRy
Lmg+CisKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotc3RhdGljIHVpbnQ4X3QgY29udmVydENvbG9y
MTZMaXR0bGVUbzgodWludDE2X3QgdmFsdWUpCi17Ci0gICAgcmV0dXJuIHZhbHVlID4+IDg7Ci19
CituYW1lc3BhY2UgeworCisgICAgdW5zaWduZWQgYnl0ZXNQZXJDb21wb25lbnQodW5zaWduZWQg
dHlwZSkKKyAgICB7CisgICAgICAgIHN3aXRjaCAodHlwZSkgeworICAgICAgICBjYXNlIEdyYXBo
aWNzQ29udGV4dDNEOjpVTlNJR05FRF9CWVRFOgorICAgICAgICAgICAgcmV0dXJuIDE7CisgICAg
ICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlVOU0lHTkVEX1NIT1JUXzVfNl81OgorICAgICAg
ICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpVTlNJR05FRF9TSE9SVF80XzRfNF80OgorICAgICAg
ICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpVTlNJR05FRF9TSE9SVF81XzVfNV8xOgorICAgICAg
ICAgICAgcmV0dXJuIDI7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICByZXR1cm4gMTsK
KyAgICAgICAgfQorICAgIH0KKworICAgIHVuc2lnbmVkIGNvbXBvbmVudHNQZXJQaXhlbCh1bnNp
Z25lZCBmb3JtYXQsIHVuc2lnbmVkIHR5cGUpCisgICAgeworICAgICAgICBzd2l0Y2ggKHR5cGUp
IHsKKyAgICAgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6VU5TSUdORURfU0hPUlRfNV82XzU6
CisgICAgICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlVOU0lHTkVEX1NIT1JUXzRfNF80XzQ6
CisgICAgICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlVOU0lHTkVEX1NIT1JUXzVfNV81XzE6
CisgICAgICAgICAgICByZXR1cm4gMTsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICB9CisgICAgICAgIHN3aXRjaCAoZm9ybWF0KSB7CisgICAgICAgIGNhc2Ug
R3JhcGhpY3NDb250ZXh0M0Q6OkFMUEhBOgorICAgICAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNE
OjpMVU1JTkFOQ0U6CisgICAgICAgICAgICByZXR1cm4gMTsKKyAgICAgICAgY2FzZSBHcmFwaGlj
c0NvbnRleHQzRDo6TFVNSU5BTkNFX0FMUEhBOgorICAgICAgICAgICAgcmV0dXJuIDI7CisgICAg
ICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlJHQjoKKyAgICAgICAgICAgIHJldHVybiAzOwor
ICAgICAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpSR0JBOgorICAgICAgICAgICAgcmV0dXJu
IDQ7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICByZXR1cm4gNDsKKyAgICAgICAgfQor
ICAgIH0KKworICAgIC8vIFRoaXMgZnVuY3Rpb24gc2hvdWxkIG9ubHkgYmUgY2FsbGVkIGlmIHdp
ZHRoIGFuZCBoZWlnaHQgaXMgbm9uLXplcm8gYW5kCisgICAgLy8gZm9ybWF0L3R5cGUgYXJlIHZh
bGlkLiAgUmV0dXJuIDAgaWYgb3ZlcmZsb3cgaGFwcGVucy4KKyAgICBzaXplX3QgaW1hZ2VTaXpl
SW5CeXRlcyh1bnNpZ25lZCB3aWR0aCwgdW5zaWduZWQgaGVpZ2h0LCB1bnNpZ25lZCBmb3JtYXQs
IHVuc2lnbmVkIHR5cGUpCisgICAgeworICAgICAgICBBU1NFUlQod2lkdGggJiYgaGVpZ2h0KTsK
KyAgICAgICAgQ2hlY2tlZEludDx1aW50MzJfdD4gY2hlY2tlZFdpZHRoKHdpZHRoKTsKKyAgICAg
ICAgQ2hlY2tlZEludDx1aW50MzJfdD4gY2hlY2tlZEhlaWdodChoZWlnaHQpOworICAgICAgICBD
aGVja2VkSW50PHVpbnQzMl90PiBjaGVja2VkQnl0ZXNQZXJQaXhlbChieXRlc1BlckNvbXBvbmVu
dCh0eXBlKSAqIGNvbXBvbmVudHNQZXJQaXhlbChmb3JtYXQsIHR5cGUpKTsKKyAgICAgICAgQ2hl
Y2tlZEludDx1aW50MzJfdD4gY2hlY2tlZFNpemUgPSBjaGVja2VkV2lkdGggKiBjaGVja2VkSGVp
Z2h0ICogY2hlY2tlZEJ5dGVzUGVyUGl4ZWw7CisgICAgICAgIGlmIChjaGVja2VkU2l6ZS52YWxp
ZCgpKQorICAgICAgICAgICAgcmV0dXJuIGNoZWNrZWRTaXplLnZhbHVlKCk7CisgICAgICAgIHJl
dHVybiAwOworICAgIH0KKworICAgIHVpbnQ4X3QgY29udmVydENvbG9yMTZMaXR0bGVUbzgodWlu
dDE2X3QgdmFsdWUpCisgICAgeworICAgICAgICByZXR1cm4gdmFsdWUgPj4gODsKKyAgICB9CisK
KyAgICB1aW50OF90IGNvbnZlcnRDb2xvcjE2QmlnVG84KHVpbnQxNl90IHZhbHVlKQorICAgIHsK
KyAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PHVpbnQ4X3Q+KHZhbHVlICYgMHgwMEZGKTsKKyAg
ICB9CisKK30gLy8gYW5vbnltb3VzIG5hbWVzcGFjZQogCi1zdGF0aWMgdWludDhfdCBjb252ZXJ0
Q29sb3IxNkJpZ1RvOCh1aW50MTZfdCB2YWx1ZSkKLXsKLSAgICByZXR1cm4gc3RhdGljX2Nhc3Q8
dWludDhfdD4odmFsdWUgJiAweDAwRkYpOwotfQogCiBQYXNzUmVmUHRyPERyYXdpbmdCdWZmZXI+
IEdyYXBoaWNzQ29udGV4dDNEOjpjcmVhdGVEcmF3aW5nQnVmZmVyKGNvbnN0IEludFNpemUmIHNp
emUpCiB7CiAgICAgcmV0dXJuIERyYXdpbmdCdWZmZXI6OmNyZWF0ZSh0aGlzLCBzaXplKTsKIH0K
IAoraW50IEdyYXBoaWNzQ29udGV4dDNEOjp0ZXhJbWFnZTJEUmVzb3VyY2VTYWZlKHVuc2lnbmVk
IHRhcmdldCwgdW5zaWduZWQgbGV2ZWwsIHVuc2lnbmVkIGludGVybmFsZm9ybWF0LCB1bnNpZ25l
ZCB3aWR0aCwgdW5zaWduZWQgaGVpZ2h0LCB1bnNpZ25lZCBib3JkZXIsIHVuc2lnbmVkIGZvcm1h
dCwgdW5zaWduZWQgdHlwZSkgeworICAgIE93bkFycmF5UHRyPHVuc2lnbmVkIGNoYXI+IHplcm87
CisgICAgaWYgKHdpZHRoICYmIGhlaWdodCkgeworICAgICAgICBzaXplX3Qgc2l6ZSA9IGltYWdl
U2l6ZUluQnl0ZXMod2lkdGgsIGhlaWdodCwgZm9ybWF0LCB0eXBlKTsKKyAgICAgICAgaWYgKCFz
aXplKSB7CisgICAgICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6
SU5WQUxJRF9WQUxVRSk7CisgICAgICAgICAgICByZXR1cm4gMTsKKyAgICAgICAgfQorICAgICAg
ICB6ZXJvID0gYWRvcHRBcnJheVB0cihuZXcgdW5zaWduZWQgY2hhcltzaXplXSk7CisgICAgICAg
IG1lbXNldCh6ZXJvLmdldCgpLCAwLCBzaXplKTsKKyAgICB9CisgICAgdGV4SW1hZ2UyRCh0YXJn
ZXQsIGxldmVsLCBpbnRlcm5hbGZvcm1hdCwgd2lkdGgsIGhlaWdodCwgYm9yZGVyLCBmb3JtYXQs
IHR5cGUsIHplcm8uZ2V0KCkpOworICAgIHJldHVybiAwOworfQorCiBib29sIEdyYXBoaWNzQ29u
dGV4dDNEOjpjb21wdXRlRm9ybWF0QW5kVHlwZVBhcmFtZXRlcnModW5zaWduZWQgaW50IGZvcm1h
dCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICB1bnNpZ25lZCBpbnQgdHlwZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBsb25nKiBjb21wb25lbnRzUGVyUGl4ZWwsCklu
ZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dDNELmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHQzRC5oCShy
ZXZpc2lvbiA3MzMxOSkKKysrIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250
ZXh0M0QuaAkod29ya2luZyBjb3B5KQpAQCAtNDcyLDYgKzQ3MiwxMCBAQCBwdWJsaWM6CiAgICAg
Ly8gbGlrZSBHTF9GTE9BVCwgR0xfSU5ULCBldGMuCiAgICAgaW50IHNpemVJbkJ5dGVzKGludCB0
eXBlKTsKIAorICAgIC8vIEhlbHBlciB0byB0ZXhJbWFnZTJEIHdpdGggcGl4ZWw9PU5VTEwgY2Fz
ZTogcGl4ZWxzIGFyZSBpbml0aWFsaXplZCB0byAwLgorICAgIC8vIFJldHVybiAwIGlmIG5vIEdM
IGVycm9yIGlzIHN5bnRoZXNpemVkLgorICAgIGludCB0ZXhJbWFnZTJEUmVzb3VyY2VTYWZlKHVu
c2lnbmVkIHRhcmdldCwgdW5zaWduZWQgbGV2ZWwsIHVuc2lnbmVkIGludGVybmFsZm9ybWF0LCB1
bnNpZ25lZCB3aWR0aCwgdW5zaWduZWQgaGVpZ2h0LCB1bnNpZ25lZCBib3JkZXIsIHVuc2lnbmVk
IGZvcm1hdCwgdW5zaWduZWQgdHlwZSk7CisKICAgICBib29sIGlzR0xFUzJDb21wbGlhbnQoKSBj
b25zdDsKIAogICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jaHJvbWl1bS9DYW52YXMyRExheWVyQ2hyb21pdW0uY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vQ2FudmFzMkRMYXllckNocm9taXVtLmNw
cAkocmV2aXNpb24gNzM0MDkpCisrKyBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVt
L0NhbnZhczJETGF5ZXJDaHJvbWl1bS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTY4LDcgKzY4LDcg
QEAgdm9pZCBDYW52YXMyRExheWVyQ2hyb21pdW06OnVwZGF0ZUNvbnRlbgogICAgICAgICBjb250
ZXh0LT5hY3RpdmVUZXh0dXJlKEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFMCk7CiAgICAgICAg
IGNvbnRleHQtPmJpbmRUZXh0dXJlKEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFXzJELCBtX3Rl
eHR1cmVJZCk7CiAgICAgICAgIEludFNpemUgc2l6ZSA9IG1fZHJhd2luZ0J1ZmZlci0+c2l6ZSgp
OwotICAgICAgICBjb250ZXh0LT50ZXhJbWFnZTJEKEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJF
XzJELCAwLCBHcmFwaGljc0NvbnRleHQzRDo6UkdCQSwgc2l6ZS53aWR0aCgpLCBzaXplLmhlaWdo
dCgpLCAwLCBHcmFwaGljc0NvbnRleHQzRDo6UkdCQSwgR3JhcGhpY3NDb250ZXh0M0Q6OlVOU0lH
TkVEX0JZVEUsIDApOworICAgICAgICBjb250ZXh0LT50ZXhJbWFnZTJEUmVzb3VyY2VTYWZlKEdy
YXBoaWNzQ29udGV4dDNEOjpURVhUVVJFXzJELCAwLCBHcmFwaGljc0NvbnRleHQzRDo6UkdCQSwg
c2l6ZS53aWR0aCgpLCBzaXplLmhlaWdodCgpLCAwLCBHcmFwaGljc0NvbnRleHQzRDo6UkdCQSwg
R3JhcGhpY3NDb250ZXh0M0Q6OlVOU0lHTkVEX0JZVEUpOwogICAgICAgICAvLyBTZXQgdGhlIG1p
bi1tYWcgZmlsdGVycyB0byBsaW5lYXIgYW5kIHdyYXAgbW9kZXMgdG8gR3JhcGhpY3NDb250ZXh0
M0Q6OkNMQU1QX1RPX0VER0UKICAgICAgICAgLy8gdG8gZ2V0IGFyb3VuZCBOUE9UIHRleHR1cmUg
bGltaXRhdGlvbnMgb2YgR0xFUy4KICAgICAgICAgY29udGV4dC0+dGV4UGFyYW1ldGVyaShHcmFw
aGljc0NvbnRleHQzRDo6VEVYVFVSRV8yRCwgR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfTUlO
X0ZJTFRFUiwgR3JhcGhpY3NDb250ZXh0M0Q6OkxJTkVBUik7CkluZGV4OiBXZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2Nocm9taXVtL0RyYXdpbmdCdWZmZXJDaHJvbWl1bS5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9EcmF3aW5nQnVmZmVyQ2hy
b21pdW0uY3BwCShyZXZpc2lvbiA3MzQwOSkKKysrIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2hyb21pdW0vRHJhd2luZ0J1ZmZlckNocm9taXVtLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjAs
NyArNjAsNyBAQCBzdGF0aWMgdW5zaWduZWQgZ2VuZXJhdGVDb2xvclRleHR1cmUoR3JhCiAgICAg
Y29udGV4dC0+dGV4UGFyYW1ldGVyaShHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV8yRCwgR3Jh
cGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfTUlOX0ZJTFRFUiwgR3JhcGhpY3NDb250ZXh0M0Q6Ok5F
QVJFU1QpOwogICAgIGNvbnRleHQtPnRleFBhcmFtZXRlcmkoR3JhcGhpY3NDb250ZXh0M0Q6OlRF
WFRVUkVfMkQsIEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFX1dSQVBfUywgR3JhcGhpY3NDb250
ZXh0M0Q6OkNMQU1QX1RPX0VER0UpOwogICAgIGNvbnRleHQtPnRleFBhcmFtZXRlcmkoR3JhcGhp
Y3NDb250ZXh0M0Q6OlRFWFRVUkVfMkQsIEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFX1dSQVBf
VCwgR3JhcGhpY3NDb250ZXh0M0Q6OkNMQU1QX1RPX0VER0UpOwotICAgIGNvbnRleHQtPnRleElt
YWdlMkQoR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfMkQsIDAsIEdyYXBoaWNzQ29udGV4dDNE
OjpSR0JBLCBzaXplLndpZHRoKCksIHNpemUuaGVpZ2h0KCksIDAsIEdyYXBoaWNzQ29udGV4dDNE
OjpSR0JBLCBHcmFwaGljc0NvbnRleHQzRDo6VU5TSUdORURfQllURSwgMCk7CisgICAgY29udGV4
dC0+dGV4SW1hZ2UyRFJlc291cmNlU2FmZShHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV8yRCwg
MCwgR3JhcGhpY3NDb250ZXh0M0Q6OlJHQkEsIHNpemUud2lkdGgoKSwgc2l6ZS5oZWlnaHQoKSwg
MCwgR3JhcGhpY3NDb250ZXh0M0Q6OlJHQkEsIEdyYXBoaWNzQ29udGV4dDNEOjpVTlNJR05FRF9C
WVRFKTsKICAgICBjb250ZXh0LT5mcmFtZWJ1ZmZlclRleHR1cmUyRChHcmFwaGljc0NvbnRleHQz
RDo6RlJBTUVCVUZGRVIsIEdyYXBoaWNzQ29udGV4dDNEOjpDT0xPUl9BVFRBQ0hNRU5UMCwgR3Jh
cGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfMkQsIG9mZnNjcmVlbkNvbG9yVGV4dHVyZSwgMCk7CiAK
ICAgICByZXR1cm4gb2Zmc2NyZWVuQ29sb3JUZXh0dXJlOwpJbmRleDogV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jaHJvbWl1bS9MYXllclJlbmRlcmVyQ2hyb21pdW0uY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJSZW5kZXJlckNocm9t
aXVtLmNwcAkocmV2aXNpb24gNzM0MDkpCisrKyBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2No
cm9taXVtL0xheWVyUmVuZGVyZXJDaHJvbWl1bS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE5NSw4
ICsxOTUsNyBAQCB2b2lkIExheWVyUmVuZGVyZXJDaHJvbWl1bTo6cHJlcGFyZVRvRHJhCiAgICAg
aWYgKHZpc2libGVSZWN0V2lkdGggIT0gbV9yb290TGF5ZXJUZXh0dXJlV2lkdGggfHwgdmlzaWJs
ZVJlY3RIZWlnaHQgIT0gbV9yb290TGF5ZXJUZXh0dXJlSGVpZ2h0KSB7CiAgICAgICAgIG1fcm9v
dExheWVyVGV4dHVyZVdpZHRoID0gdmlzaWJsZVJlY3RXaWR0aDsKICAgICAgICAgbV9yb290TGF5
ZXJUZXh0dXJlSGVpZ2h0ID0gdmlzaWJsZVJlY3RIZWlnaHQ7Ci0KLSAgICAgICAgR0xDKG1fY29u
dGV4dCwgbV9jb250ZXh0LT50ZXhJbWFnZTJEKEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFXzJE
LCAwLCBHcmFwaGljc0NvbnRleHQzRDo6UkdCQSwgbV9yb290TGF5ZXJUZXh0dXJlV2lkdGgsIG1f
cm9vdExheWVyVGV4dHVyZUhlaWdodCwgMCwgR3JhcGhpY3NDb250ZXh0M0Q6OlJHQkEsIEdyYXBo
aWNzQ29udGV4dDNEOjpVTlNJR05FRF9CWVRFLCAwKSk7CisgICAgICAgIEdMQyhtX2NvbnRleHQs
IG1fY29udGV4dC0+dGV4SW1hZ2UyRFJlc291cmNlU2FmZShHcmFwaGljc0NvbnRleHQzRDo6VEVY
VFVSRV8yRCwgMCwgR3JhcGhpY3NDb250ZXh0M0Q6OlJHQkEsIG1fcm9vdExheWVyVGV4dHVyZVdp
ZHRoLCBtX3Jvb3RMYXllclRleHR1cmVIZWlnaHQsIDAsIEdyYXBoaWNzQ29udGV4dDNEOjpSR0JB
LCBHcmFwaGljc0NvbnRleHQzRDo6VU5TSUdORURfQllURSkpOwogCiAgICAgICAgIC8vIFJlc2V0
IHRoZSBjdXJyZW50IHJlbmRlciBzdXJmYWNlIHRvIGZvcmNlIGFuIHVwZGF0ZSBvZiB0aGUgdmll
d3BvcnQgYW5kCiAgICAgICAgIC8vIHByb2plY3Rpb24gbWF0cml4IG5leHQgdGltZSB1c2VSZW5k
ZXJTdXJmYWNlIGlzIGNhbGxlZC4KSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hy
b21pdW0vUmVuZGVyU3VyZmFjZUNocm9taXVtLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1JlbmRlclN1cmZhY2VDaHJvbWl1bS5jcHAJKHJldmlz
aW9uIDczNDA5KQorKysgV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9SZW5kZXJT
dXJmYWNlQ2hyb21pdW0uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03Nyw5ICs3Nyw5IEBAIHZvaWQg
UmVuZGVyU3VyZmFjZUNocm9taXVtOjpwcmVwYXJlQ29udGUKICAgICBpZiAobV9hbGxvY2F0ZWRU
ZXh0dXJlU2l6ZSAhPSByZXF1aXJlZFNpemUpIHsKICAgICAgICAgR3JhcGhpY3NDb250ZXh0M0Qq
IGNvbnRleHQgPSBtX293bmluZ0xheWVyLT5sYXllclJlbmRlcmVyKCktPmNvbnRleHQoKTsKICAg
ICAgICAgR0xDKGNvbnRleHQsIGNvbnRleHQtPmJpbmRUZXh0dXJlKEdyYXBoaWNzQ29udGV4dDNE
OjpURVhUVVJFXzJELCBtX2NvbnRlbnRzVGV4dHVyZUlkKSk7Ci0gICAgICAgIEdMQyhjb250ZXh0
LCBjb250ZXh0LT50ZXhJbWFnZTJEKEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFXzJELCAwLCBH
cmFwaGljc0NvbnRleHQzRDo6UkdCQSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHJlcXVpcmVkU2l6ZS53aWR0aCgpLCByZXF1aXJlZFNpemUuaGVpZ2h0KCks
IDAsIEdyYXBoaWNzQ29udGV4dDNEOjpSR0JBLAotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgR3JhcGhpY3NDb250ZXh0M0Q6OlVOU0lHTkVEX0JZVEUsIDApKTsK
KyAgICAgICAgR0xDKGNvbnRleHQsIGNvbnRleHQtPnRleEltYWdlMkRSZXNvdXJjZVNhZmUoR3Jh
cGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfMkQsIDAsIEdyYXBoaWNzQ29udGV4dDNEOjpSR0JBLAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXF1aXJlZFNpemUud2lk
dGgoKSwgcmVxdWlyZWRTaXplLmhlaWdodCgpLCAwLCBHcmFwaGljc0NvbnRleHQzRDo6UkdCQSwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR3JhcGhpY3NDb250ZXh0
M0Q6OlVOU0lHTkVEX0JZVEUpKTsKICAgICAgICAgbV9hbGxvY2F0ZWRUZXh0dXJlU2l6ZSA9IHJl
cXVpcmVkU2l6ZTsKICAgICB9CiB9CkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2No
cm9taXVtL1ZpZGVvTGF5ZXJDaHJvbWl1bS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9WaWRlb0xheWVyQ2hyb21pdW0uY3BwCShyZXZpc2lvbiA3
MzQwOSkKKysrIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vVmlkZW9MYXllckNo
cm9taXVtLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjk3LDcgKzI5Nyw3IEBAIGJvb2wgVmlkZW9M
YXllckNocm9taXVtOjphbGxvY2F0ZVRleHR1cmUKIHZvaWQgVmlkZW9MYXllckNocm9taXVtOjph
bGxvY2F0ZVRleHR1cmUoR3JhcGhpY3NDb250ZXh0M0QqIGNvbnRleHQsIHVuc2lnbmVkIHRleHR1
cmVJZCwgY29uc3QgSW50U2l6ZSYgZGltZW5zaW9ucywgdW5zaWduZWQgdGV4dHVyZUZvcm1hdCkK
IHsKICAgICBHTEMoY29udGV4dCwgY29udGV4dC0+YmluZFRleHR1cmUoR3JhcGhpY3NDb250ZXh0
M0Q6OlRFWFRVUkVfMkQsIHRleHR1cmVJZCkpOwotICAgIEdMQyhjb250ZXh0LCBjb250ZXh0LT50
ZXhJbWFnZTJEKEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFXzJELCAwLCB0ZXh0dXJlRm9ybWF0
LCBkaW1lbnNpb25zLndpZHRoKCksIGRpbWVuc2lvbnMuaGVpZ2h0KCksIDAsIHRleHR1cmVGb3Jt
YXQsIEdyYXBoaWNzQ29udGV4dDNEOjpVTlNJR05FRF9CWVRFLCAwKSk7CisgICAgR0xDKGNvbnRl
eHQsIGNvbnRleHQtPnRleEltYWdlMkRSZXNvdXJjZVNhZmUoR3JhcGhpY3NDb250ZXh0M0Q6OlRF
WFRVUkVfMkQsIDAsIHRleHR1cmVGb3JtYXQsIGRpbWVuc2lvbnMud2lkdGgoKSwgZGltZW5zaW9u
cy5oZWlnaHQoKSwgMCwgdGV4dHVyZUZvcm1hdCwgR3JhcGhpY3NDb250ZXh0M0Q6OlVOU0lHTkVE
X0JZVEUpKTsKIH0KIAogdm9pZCBWaWRlb0xheWVyQ2hyb21pdW06OnVwZGF0ZVRleHR1cmUoR3Jh
cGhpY3NDb250ZXh0M0QqIGNvbnRleHQsIHVuc2lnbmVkIHRleHR1cmVJZCwgY29uc3QgSW50U2l6
ZSYgZGltZW5zaW9ucywgdW5zaWduZWQgZm9ybWF0LCBjb25zdCB2b2lkKiBkYXRhKQpJbmRleDog
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ncHUvRHJhd2luZ0J1ZmZlci5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ncHUvRHJhd2luZ0J1ZmZlci5jcHAJKHJl
dmlzaW9uIDczNDA5KQorKysgV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ncHUvRHJhd2luZ0J1
ZmZlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTExNyw5ICsxMTcsNyBAQCB2b2lkIERyYXdpbmdC
dWZmZXI6OnJlc2V0KGNvbnN0IEludFNpemUmCiAgICAgICAgIAogICAgICAgICBtX2NvbnRleHQt
PmdldEludGVnZXJ2KEV4dGVuc2lvbnMzRDo6TUFYX1NBTVBMRVMsICZtYXhTYW1wbGVDb3VudCk7
CiAgICAgICAgIGludCBzYW1wbGVDb3VudCA9IHN0ZDo6bWluKDgsIG1heFNhbXBsZUNvdW50KTsK
LSAgICAgICAgaWYgKHNhbXBsZUNvdW50ID4gbWF4U2FtcGxlQ291bnQpCi0gICAgICAgICAgICBz
YW1wbGVDb3VudCA9IG1heFNhbXBsZUNvdW50OwotICAgICAgICAKKwogICAgICAgICBtX2NvbnRl
eHQtPmJpbmRGcmFtZWJ1ZmZlcihHcmFwaGljc0NvbnRleHQzRDo6RlJBTUVCVUZGRVIsIG1fbXVs
dGlzYW1wbGVGQk8pOwogCiAgICAgICAgIG1fY29udGV4dC0+YmluZFJlbmRlcmJ1ZmZlcihHcmFw
aGljc0NvbnRleHQzRDo6UkVOREVSQlVGRkVSLCBtX211bHRpc2FtcGxlQ29sb3JCdWZmZXIpOwpA
QCAtMTQ0LDggKzE0MiwxMiBAQCB2b2lkIERyYXdpbmdCdWZmZXI6OnJlc2V0KGNvbnN0IEludFNp
emUmCiAgICAgLy8gcmVzaXplIHJlZ3VsYXIgRkJPCiAgICAgbV9jb250ZXh0LT5iaW5kRnJhbWVi
dWZmZXIoR3JhcGhpY3NDb250ZXh0M0Q6OkZSQU1FQlVGRkVSLCBtX2Zibyk7CiAKKyAgICBib29s
IGlzUmVzb3VyY2VTYWZlID0gbV9jb250ZXh0LT5nZXRFeHRlbnNpb25zKCktPnN1cHBvcnRzKCJH
TF9DSFJPTUlVTV9yZXNvdXJjZV9zYWZlIik7CiAgICAgbV9jb250ZXh0LT5iaW5kVGV4dHVyZShH
cmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV8yRCwgbV9jb2xvckJ1ZmZlcik7Ci0gICAgbV9jb250
ZXh0LT50ZXhJbWFnZTJEKEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFXzJELCAwLCBpbnRlcm5h
bENvbG9yRm9ybWF0LCBtX3NpemUud2lkdGgoKSwgbV9zaXplLmhlaWdodCgpLCAwLCBjb2xvckZv
cm1hdCwgR3JhcGhpY3NDb250ZXh0M0Q6OlVOU0lHTkVEX0JZVEUsIDApOworICAgIGlmIChpc1Jl
c291cmNlU2FmZSkKKyAgICAgICAgbV9jb250ZXh0LT50ZXhJbWFnZTJEKEdyYXBoaWNzQ29udGV4
dDNEOjpURVhUVVJFXzJELCAwLCBpbnRlcm5hbENvbG9yRm9ybWF0LCBtX3NpemUud2lkdGgoKSwg
bV9zaXplLmhlaWdodCgpLCAwLCBjb2xvckZvcm1hdCwgR3JhcGhpY3NDb250ZXh0M0Q6OlVOU0lH
TkVEX0JZVEUsIDApOworICAgIGVsc2UKKyAgICAgICAgbV9jb250ZXh0LT50ZXhJbWFnZTJEUmVz
b3VyY2VTYWZlKEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFXzJELCAwLCBpbnRlcm5hbENvbG9y
Rm9ybWF0LCBtX3NpemUud2lkdGgoKSwgbV9zaXplLmhlaWdodCgpLCAwLCBjb2xvckZvcm1hdCwg
R3JhcGhpY3NDb250ZXh0M0Q6OlVOU0lHTkVEX0JZVEUpOwogICAgIG1fY29udGV4dC0+ZnJhbWVi
dWZmZXJUZXh0dXJlMkQoR3JhcGhpY3NDb250ZXh0M0Q6OkZSQU1FQlVGRkVSLCBHcmFwaGljc0Nv
bnRleHQzRDo6Q09MT1JfQVRUQUNITUVOVDAsIEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFLCBt
X2NvbG9yQnVmZmVyLCAwKTsKICAgICBtX2NvbnRleHQtPmJpbmRUZXh0dXJlKEdyYXBoaWNzQ29u
dGV4dDNEOjpURVhUVVJFXzJELCAwKTsKICAgICBpZiAoIW11bHRpc2FtcGxlKCkgJiYgKGF0dHJp
YnV0ZXMuc3RlbmNpbCB8fCBhdHRyaWJ1dGVzLmRlcHRoKSkgewpAQCAtMTY2LDU3ICsxNjgsNDgg
QEAgdm9pZCBEcmF3aW5nQnVmZmVyOjpyZXNldChjb25zdCBJbnRTaXplJgogICAgIGlmIChtdWx0
aXNhbXBsZSgpKQogICAgICAgICBtX2NvbnRleHQtPmJpbmRGcmFtZWJ1ZmZlcihHcmFwaGljc0Nv
bnRleHQzRDo6RlJBTUVCVUZGRVIsIG1fbXVsdGlzYW1wbGVGQk8pOwogCi0gICAgLy8gSW5pdGlh
bGl6ZSByZW5kZXJidWZmZXJzIHRvIDAuCi0gICAgZmxvYXQgY2xlYXJDb2xvcltdID0gezAsIDAs
IDAsIDB9LCBjbGVhckRlcHRoID0gMDsKLSAgICBpbnQgY2xlYXJTdGVuY2lsID0gMDsKLSAgICB1
bnNpZ25lZCBjaGFyIGNvbG9yTWFza1tdID0ge3RydWUsIHRydWUsIHRydWUsIHRydWV9LCBkZXB0
aE1hc2sgPSB0cnVlOwotICAgIHVuc2lnbmVkIGludCBzdGVuY2lsTWFzayA9IDB4ZmZmZmZmZmY7
Ci0gICAgdW5zaWduZWQgY2hhciBpc1NjaXNzb3JFbmFibGVkID0gZmFsc2U7Ci0gICAgdW5zaWdu
ZWQgY2hhciBpc0RpdGhlckVuYWJsZWQgPSBmYWxzZTsKLSAgICB1bnNpZ25lZCBsb25nIGNsZWFy
TWFzayA9IEdyYXBoaWNzQ29udGV4dDNEOjpDT0xPUl9CVUZGRVJfQklUOwotICAgIG1fY29udGV4
dC0+Z2V0RmxvYXR2KEdyYXBoaWNzQ29udGV4dDNEOjpDT0xPUl9DTEVBUl9WQUxVRSwgY2xlYXJD
b2xvcik7Ci0gICAgbV9jb250ZXh0LT5jbGVhckNvbG9yKDAsIDAsIDAsIDApOwotICAgIG1fY29u
dGV4dC0+Z2V0Qm9vbGVhbnYoR3JhcGhpY3NDb250ZXh0M0Q6OkNPTE9SX1dSSVRFTUFTSywgY29s
b3JNYXNrKTsKLSAgICBtX2NvbnRleHQtPmNvbG9yTWFzayh0cnVlLCB0cnVlLCB0cnVlLCB0cnVl
KTsKLSAgICBpZiAoYXR0cmlidXRlcy5kZXB0aCkgewotICAgICAgICBtX2NvbnRleHQtPmdldEZs
b2F0dihHcmFwaGljc0NvbnRleHQzRDo6REVQVEhfQ0xFQVJfVkFMVUUsICZjbGVhckRlcHRoKTsK
LSAgICAgICAgbV9jb250ZXh0LT5jbGVhckRlcHRoKDEpOwotICAgICAgICBtX2NvbnRleHQtPmdl
dEJvb2xlYW52KEdyYXBoaWNzQ29udGV4dDNEOjpERVBUSF9XUklURU1BU0ssICZkZXB0aE1hc2sp
OwotICAgICAgICBtX2NvbnRleHQtPmRlcHRoTWFzayh0cnVlKTsKLSAgICAgICAgY2xlYXJNYXNr
IHw9IEdyYXBoaWNzQ29udGV4dDNEOjpERVBUSF9CVUZGRVJfQklUOwotICAgIH0KLSAgICBpZiAo
YXR0cmlidXRlcy5zdGVuY2lsKSB7Ci0gICAgICAgIG1fY29udGV4dC0+Z2V0SW50ZWdlcnYoR3Jh
cGhpY3NDb250ZXh0M0Q6OlNURU5DSUxfQ0xFQVJfVkFMVUUsICZjbGVhclN0ZW5jaWwpOwotICAg
ICAgICBtX2NvbnRleHQtPmNsZWFyU3RlbmNpbCgwKTsKLSAgICAgICAgbV9jb250ZXh0LT5nZXRJ
bnRlZ2VydihHcmFwaGljc0NvbnRleHQzRDo6U1RFTkNJTF9XUklURU1BU0ssIHJlaW50ZXJwcmV0
X2Nhc3Q8aW50Kj4oJnN0ZW5jaWxNYXNrKSk7Ci0gICAgICAgIG1fY29udGV4dC0+c3RlbmNpbE1h
c2tTZXBhcmF0ZShHcmFwaGljc0NvbnRleHQzRDo6RlJPTlQsIDB4ZmZmZmZmZmYpOwotICAgICAg
ICBjbGVhck1hc2sgfD0gR3JhcGhpY3NDb250ZXh0M0Q6OlNURU5DSUxfQlVGRkVSX0JJVDsKLSAg
ICB9Ci0gICAgaXNTY2lzc29yRW5hYmxlZCA9IG1fY29udGV4dC0+aXNFbmFibGVkKEdyYXBoaWNz
Q29udGV4dDNEOjpTQ0lTU09SX1RFU1QpOwotICAgIG1fY29udGV4dC0+ZGlzYWJsZShHcmFwaGlj
c0NvbnRleHQzRDo6U0NJU1NPUl9URVNUKTsKLSAgICBpc0RpdGhlckVuYWJsZWQgPSBtX2NvbnRl
eHQtPmlzRW5hYmxlZChHcmFwaGljc0NvbnRleHQzRDo6RElUSEVSKTsKLSAgICBtX2NvbnRleHQt
PmRpc2FibGUoR3JhcGhpY3NDb250ZXh0M0Q6OkRJVEhFUik7Ci0KLSAgICBtX2NvbnRleHQtPmNs
ZWFyKGNsZWFyTWFzayk7Ci0KLSAgICBtX2NvbnRleHQtPmNsZWFyQ29sb3IoY2xlYXJDb2xvclsw
XSwgY2xlYXJDb2xvclsxXSwgY2xlYXJDb2xvclsyXSwgY2xlYXJDb2xvclszXSk7Ci0gICAgbV9j
b250ZXh0LT5jb2xvck1hc2soY29sb3JNYXNrWzBdLCBjb2xvck1hc2tbMV0sIGNvbG9yTWFza1sy
XSwgY29sb3JNYXNrWzNdKTsKLSAgICBpZiAoYXR0cmlidXRlcy5kZXB0aCkgewotICAgICAgICBt
X2NvbnRleHQtPmNsZWFyRGVwdGgoY2xlYXJEZXB0aCk7Ci0gICAgICAgIG1fY29udGV4dC0+ZGVw
dGhNYXNrKGRlcHRoTWFzayk7Ci0gICAgfQotICAgIGlmIChhdHRyaWJ1dGVzLnN0ZW5jaWwpIHsK
LSAgICAgICAgbV9jb250ZXh0LT5jbGVhclN0ZW5jaWwoY2xlYXJTdGVuY2lsKTsKLSAgICAgICAg
bV9jb250ZXh0LT5zdGVuY2lsTWFza1NlcGFyYXRlKEdyYXBoaWNzQ29udGV4dDNEOjpGUk9OVCwg
c3RlbmNpbE1hc2spOworICAgIGlmICghaXNSZXNvdXJjZVNhZmUpIHsKKyAgICAgICAgLy8gSW5p
dGlhbGl6ZSByZW5kZXJidWZmZXJzIChkZXB0aC9zdGVuY2lsKS4KKyAgICAgICAgZmxvYXQgY2xl
YXJEZXB0aCA9IDA7CisgICAgICAgIGludCBjbGVhclN0ZW5jaWwgPSAwOworICAgICAgICB1bnNp
Z25lZCBjaGFyIGRlcHRoTWFzayA9IHRydWU7CisgICAgICAgIHVuc2lnbmVkIGludCBzdGVuY2ls
TWFzayA9IDB4ZmZmZmZmZmY7CisgICAgICAgIHVuc2lnbmVkIGNoYXIgaXNTY2lzc29yRW5hYmxl
ZCA9IGZhbHNlOworICAgICAgICB1bnNpZ25lZCBsb25nIGNsZWFyTWFzayA9IDA7CisgICAgICAg
IGlmIChhdHRyaWJ1dGVzLmRlcHRoKSB7CisgICAgICAgICAgICBtX2NvbnRleHQtPmdldEZsb2F0
dihHcmFwaGljc0NvbnRleHQzRDo6REVQVEhfQ0xFQVJfVkFMVUUsICZjbGVhckRlcHRoKTsKKyAg
ICAgICAgICAgIG1fY29udGV4dC0+Y2xlYXJEZXB0aCgxKTsKKyAgICAgICAgICAgIG1fY29udGV4
dC0+Z2V0Qm9vbGVhbnYoR3JhcGhpY3NDb250ZXh0M0Q6OkRFUFRIX1dSSVRFTUFTSywgJmRlcHRo
TWFzayk7CisgICAgICAgICAgICBtX2NvbnRleHQtPmRlcHRoTWFzayh0cnVlKTsKKyAgICAgICAg
ICAgIGNsZWFyTWFzayB8PSBHcmFwaGljc0NvbnRleHQzRDo6REVQVEhfQlVGRkVSX0JJVDsKKyAg
ICAgICAgfQorICAgICAgICBpZiAoYXR0cmlidXRlcy5zdGVuY2lsKSB7CisgICAgICAgICAgICBt
X2NvbnRleHQtPmdldEludGVnZXJ2KEdyYXBoaWNzQ29udGV4dDNEOjpTVEVOQ0lMX0NMRUFSX1ZB
TFVFLCAmY2xlYXJTdGVuY2lsKTsKKyAgICAgICAgICAgIG1fY29udGV4dC0+Y2xlYXJTdGVuY2ls
KDApOworICAgICAgICAgICAgbV9jb250ZXh0LT5nZXRJbnRlZ2VydihHcmFwaGljc0NvbnRleHQz
RDo6U1RFTkNJTF9XUklURU1BU0ssIHJlaW50ZXJwcmV0X2Nhc3Q8aW50Kj4oJnN0ZW5jaWxNYXNr
KSk7CisgICAgICAgICAgICBtX2NvbnRleHQtPnN0ZW5jaWxNYXNrU2VwYXJhdGUoR3JhcGhpY3ND
b250ZXh0M0Q6OkZST05ULCAweGZmZmZmZmZmKTsKKyAgICAgICAgICAgIGNsZWFyTWFzayB8PSBH
cmFwaGljc0NvbnRleHQzRDo6U1RFTkNJTF9CVUZGRVJfQklUOworICAgICAgICB9CisgICAgICAg
IGlmIChjbGVhck1hc2spIHsKKyAgICAgICAgICAgIGlzU2Npc3NvckVuYWJsZWQgPSBtX2NvbnRl
eHQtPmlzRW5hYmxlZChHcmFwaGljc0NvbnRleHQzRDo6U0NJU1NPUl9URVNUKTsKKyAgICAgICAg
ICAgIG1fY29udGV4dC0+ZGlzYWJsZShHcmFwaGljc0NvbnRleHQzRDo6U0NJU1NPUl9URVNUKTsK
KworICAgICAgICAgICAgbV9jb250ZXh0LT5jbGVhcihjbGVhck1hc2spOworCisgICAgICAgICAg
ICBpZiAoYXR0cmlidXRlcy5kZXB0aCkgeworICAgICAgICAgICAgICAgIG1fY29udGV4dC0+Y2xl
YXJEZXB0aChjbGVhckRlcHRoKTsKKyAgICAgICAgICAgICAgICBtX2NvbnRleHQtPmRlcHRoTWFz
ayhkZXB0aE1hc2spOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKGF0dHJpYnV0ZXMu
c3RlbmNpbCkgeworICAgICAgICAgICAgICAgIG1fY29udGV4dC0+Y2xlYXJTdGVuY2lsKGNsZWFy
U3RlbmNpbCk7CisgICAgICAgICAgICAgICAgbV9jb250ZXh0LT5zdGVuY2lsTWFza1NlcGFyYXRl
KEdyYXBoaWNzQ29udGV4dDNEOjpGUk9OVCwgc3RlbmNpbE1hc2spOworICAgICAgICAgICAgfQor
ICAgICAgICAgICAgaWYgKGlzU2Npc3NvckVuYWJsZWQpCisgICAgICAgICAgICAgICAgbV9jb250
ZXh0LT5lbmFibGUoR3JhcGhpY3NDb250ZXh0M0Q6OlNDSVNTT1JfVEVTVCk7CisgICAgICAgICAg
ICBlbHNlCisgICAgICAgICAgICAgICAgbV9jb250ZXh0LT5kaXNhYmxlKEdyYXBoaWNzQ29udGV4
dDNEOjpTQ0lTU09SX1RFU1QpOworICAgICAgICB9CiAgICAgfQotICAgIGlmIChpc1NjaXNzb3JF
bmFibGVkKQotICAgICAgICBtX2NvbnRleHQtPmVuYWJsZShHcmFwaGljc0NvbnRleHQzRDo6U0NJ
U1NPUl9URVNUKTsKLSAgICBlbHNlCi0gICAgICAgIG1fY29udGV4dC0+ZGlzYWJsZShHcmFwaGlj
c0NvbnRleHQzRDo6U0NJU1NPUl9URVNUKTsKLSAgICBpZiAoaXNEaXRoZXJFbmFibGVkKQotICAg
ICAgICBtX2NvbnRleHQtPmVuYWJsZShHcmFwaGljc0NvbnRleHQzRDo6RElUSEVSKTsKLSAgICBl
bHNlCi0gICAgICAgIG1fY29udGV4dC0+ZGlzYWJsZShHcmFwaGljc0NvbnRleHQzRDo6RElUSEVS
KTsKIAogICAgIG1fY29udGV4dC0+Zmx1c2goKTsKICAgICAKSW5kZXg6IFdlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvZ3B1L1RleHR1cmUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvZ3B1L1RleHR1cmUuY3BwCShyZXZpc2lvbiA3MzQwOSkKKysrIFdlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvZ3B1L1RleHR1cmUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMDYs
MTUgKzEwNiwxNSBAQCBQYXNzUmVmUHRyPFRleHR1cmU+IFRleHR1cmU6OmNyZWF0ZShHcmFwCiAK
ICAgICAgICAgSW50UmVjdCB0aWxlQm91bmRzV2l0aEJvcmRlciA9IHRpbGluZy50aWxlQm91bmRz
V2l0aEJvcmRlcihpKTsKIAotICAgIHVuc2lnbmVkIGludCBnbEZvcm1hdCA9IDA7Ci0gICAgdW5z
aWduZWQgaW50IGdsVHlwZSA9IDA7Ci0gICAgYm9vbCBzd2l6emxlOwotICAgIGNvbnZlcnRGb3Jt
YXQoY29udGV4dCwgZm9ybWF0LCAmZ2xGb3JtYXQsICZnbFR5cGUsICZzd2l6emxlKTsKLSAgICBj
b250ZXh0LT5iaW5kVGV4dHVyZShHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV8yRCwgdGV4dHVy
ZUlkKTsKLSAgICBjb250ZXh0LT50ZXhJbWFnZTJEKEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJF
XzJELCAwLCBnbEZvcm1hdCwKLSAgICAgICAgICAgIHRpbGVCb3VuZHNXaXRoQm9yZGVyLndpZHRo
KCksCi0gICAgICAgICAgICB0aWxlQm91bmRzV2l0aEJvcmRlci5oZWlnaHQoKSwKLSAgICAgICAg
ICAgIDAsIGdsRm9ybWF0LCBnbFR5cGUsIDApOworICAgICAgICB1bnNpZ25lZCBpbnQgZ2xGb3Jt
YXQgPSAwOworICAgICAgICB1bnNpZ25lZCBpbnQgZ2xUeXBlID0gMDsKKyAgICAgICAgYm9vbCBz
d2l6emxlOworICAgICAgICBjb252ZXJ0Rm9ybWF0KGNvbnRleHQsIGZvcm1hdCwgJmdsRm9ybWF0
LCAmZ2xUeXBlLCAmc3dpenpsZSk7CisgICAgICAgIGNvbnRleHQtPmJpbmRUZXh0dXJlKEdyYXBo
aWNzQ29udGV4dDNEOjpURVhUVVJFXzJELCB0ZXh0dXJlSWQpOworICAgICAgICBjb250ZXh0LT50
ZXhJbWFnZTJEUmVzb3VyY2VTYWZlKEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFXzJELCAwLCBn
bEZvcm1hdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aWxlQm91
bmRzV2l0aEJvcmRlci53aWR0aCgpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHRpbGVCb3VuZHNXaXRoQm9yZGVyLmhlaWdodCgpLAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIDAsIGdsRm9ybWF0LCBnbFR5cGUpOwogICAgIH0KICAgICBy
ZXR1cm4gYWRvcHRSZWYobmV3IFRleHR1cmUoY29udGV4dCwgdGV4dHVyZUlkcy5sZWFrUHRyKCks
IGZvcm1hdCwgd2lkdGgsIGhlaWdodCwgbWF4VGV4dHVyZVNpemUpKTsKIH0KSW5kZXg6IFdlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0dyYXBoaWNzQ29udGV4dDNET3BlbkdMLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9HcmFwaGljc0Nv
bnRleHQzRE9wZW5HTC5jcHAJKHJldmlzaW9uIDczMzE5KQorKysgV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9vcGVuZ2wvR3JhcGhpY3NDb250ZXh0M0RPcGVuR0wuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0xMzI0LDggKzEzMjQsMTEgQEAgbG9uZyBHcmFwaGljc0NvbnRleHQzRDo6Z2V0VmVydGV4
QXR0cmliTwogCiBpbnQgR3JhcGhpY3NDb250ZXh0M0Q6OnRleEltYWdlMkQodW5zaWduZWQgdGFy
Z2V0LCB1bnNpZ25lZCBsZXZlbCwgdW5zaWduZWQgaW50ZXJuYWxmb3JtYXQsIHVuc2lnbmVkIHdp
ZHRoLCB1bnNpZ25lZCBoZWlnaHQsIHVuc2lnbmVkIGJvcmRlciwgdW5zaWduZWQgZm9ybWF0LCB1
bnNpZ25lZCB0eXBlLCB2b2lkKiBwaXhlbHMpCiB7CisgICAgaWYgKHdpZHRoICYmIGhlaWdodCAm
JiAhcGl4ZWxzKSB7CisgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKElOVkFMSURfVkFMVUUpOwor
ICAgICAgICByZXR1cm47CisgICAgfQogICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwotCiAgICAg
OjpnbFRleEltYWdlMkQodGFyZ2V0LCBsZXZlbCwgaW50ZXJuYWxmb3JtYXQsIHdpZHRoLCBoZWln
aHQsIGJvcmRlciwgZm9ybWF0LCB0eXBlLCBwaXhlbHMpOwogICAgIHJldHVybiAwOwogfQpJbmRl
eDogV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQvY2hyb21p
dW0vQ2hhbmdlTG9nCShyZXZpc2lvbiA3MzQyMCkKKysrIFdlYktpdC9jaHJvbWl1bS9DaGFuZ2VM
b2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwxMyBAQAorMjAxMC0xMi0wNiAgWmhlbnlhbyBN
byAgPHptb0Bnb29nbGUuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEp
LgorCisgICAgICAgIFdlYkdMUmVuZGVyaW5nQ29udGV4dCBuZWVkcyB0byB6ZXJvIHRleHR1cmVz
IGFuZCByZW5kZXJidWZmZXJzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3df
YnVnLmNnaT9pZD00OTM1NQorCisgICAgICAgICogc3JjL1dlYkdyYXBoaWNzQ29udGV4dDNERGVm
YXVsdEltcGwuY3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJHcmFwaGljc0NvbnRleHQzRERlZmF1
bHRJbXBsOjp0ZXhJbWFnZTJEKTogRG9uJ3QgZGVhbCB3aXRoIHRleHR1cmUgaW5pdGlhbGl6YXRp
b24gYXQgdGhpcyBsZXZlbDsgZ2VuZXJhdGUgYW4gSU5WQUxJRF9WQUxVRSBpZiBwaXhlbHM9PW51
bGwgaXMgcGFzc2VkIGluLgorCiAyMDEwLTEyLTA2ICBOYXRlIENoYXBpbiAgPGphcGhldEBjaHJv
bWl1bS5vcmc+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgQWRhbSBCYXJ0aC4KSW5kZXg6IFdlYktp
dC9jaHJvbWl1bS9zcmMvV2ViR3JhcGhpY3NDb250ZXh0M0REZWZhdWx0SW1wbC5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJHcmFwaGljc0NvbnRleHQzRERlZmF1bHRJ
bXBsLmNwcAkocmV2aXNpb24gNzMzMTkpCisrKyBXZWJLaXQvY2hyb21pdW0vc3JjL1dlYkdyYXBo
aWNzQ29udGV4dDNERGVmYXVsdEltcGwuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMjYwLDY4ICsx
MjYwLDEzIEBAIERFTEVHQVRFX1RPX0dMXzIoc2FtcGxlQ292ZXJhZ2UsIFNhbXBsZUMKIAogREVM
RUdBVEVfVE9fR0xfNChzY2lzc29yLCBTY2lzc29yLCBsb25nLCBsb25nLCB1bnNpZ25lZCBsb25n
LCB1bnNpZ25lZCBsb25nKQogCi11bnNpZ25lZCBieXRlc1BlckNvbXBvbmVudCh1bnNpZ25lZCB0
eXBlKQotewotICAgIHN3aXRjaCAodHlwZSkgewotICAgIGNhc2UgR0xfQllURToKLSAgICBjYXNl
IEdMX1VOU0lHTkVEX0JZVEU6Ci0gICAgICAgIHJldHVybiAxOwotICAgIGNhc2UgR0xfU0hPUlQ6
Ci0gICAgY2FzZSBHTF9VTlNJR05FRF9TSE9SVDoKLSAgICBjYXNlIEdMX1VOU0lHTkVEX1NIT1JU
XzVfNl81OgotICAgIGNhc2UgR0xfVU5TSUdORURfU0hPUlRfNF80XzRfNDoKLSAgICBjYXNlIEdM
X1VOU0lHTkVEX1NIT1JUXzVfNV81XzE6Ci0gICAgICAgIHJldHVybiAyOwotICAgIGNhc2UgR0xf
RkxPQVQ6Ci0gICAgICAgIHJldHVybiA0OwotICAgIGRlZmF1bHQ6Ci0gICAgICAgIHJldHVybiA0
OwotICAgIH0KLX0KLQotdW5zaWduZWQgY29tcG9uZW50c1BlclBpeGVsKHVuc2lnbmVkIGZvcm1h
dCwgdW5zaWduZWQgdHlwZSkKLXsKLSAgICBzd2l0Y2ggKHR5cGUpIHsKLSAgICBjYXNlIEdMX1VO
U0lHTkVEX1NIT1JUXzVfNl81OgotICAgIGNhc2UgR0xfVU5TSUdORURfU0hPUlRfNF80XzRfNDoK
LSAgICBjYXNlIEdMX1VOU0lHTkVEX1NIT1JUXzVfNV81XzE6Ci0gICAgICAgIHJldHVybiAxOwot
ICAgIGRlZmF1bHQ6Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLSAgICBzd2l0Y2ggKGZvcm1hdCkg
ewotICAgIGNhc2UgR0xfTFVNSU5BTkNFOgotICAgICAgICByZXR1cm4gMTsKLSAgICBjYXNlIEdM
X0xVTUlOQU5DRV9BTFBIQToKLSAgICAgICAgcmV0dXJuIDI7Ci0gICAgY2FzZSBHTF9SR0I6Ci0g
ICAgICAgIHJldHVybiAzOwotICAgIGNhc2UgR0xfUkdCQToKLSAgICBjYXNlIEdMX0JHUkFfRVhU
OgotICAgICAgICByZXR1cm4gNDsKLSAgICBkZWZhdWx0OgotICAgICAgICByZXR1cm4gNDsKLSAg
ICB9Ci19Ci0KLS8vIE4uQi46ICBUaGlzIGNvZGUgZG9lcyBub3QgcHJvdGVjdCBhZ2FpbnN0IGlu
dGVnZXIgb3ZlcmZsb3cgKGFzIHRoZSBjb21tYW5kCi0vLyBidWZmZXIgaW1wbGVtZW50YXRpb24g
ZG9lcyksIHNvIGl0IHNob3VsZCBub3QgYmUgY29uc2lkZXJlZCByb2J1c3QgZW5vdWdoCi0vLyBm
b3IgdXNlIGluIHRoZSBicm93c2VyLiAgU2luY2UgdGhpcyBpbXBsZW1lbnRhdGlvbiBpcyBvbmx5
IHVzZWQgZm9yIGxheW91dAotLy8gdGVzdHMsIHRoaXMgc2hvdWxkIGJlIG9rIGZvciBub3cuCi1z
aXplX3QgaW1hZ2VTaXplSW5CeXRlcyh1bnNpZ25lZCB3aWR0aCwgdW5zaWduZWQgaGVpZ2h0LCB1
bnNpZ25lZCBmb3JtYXQsIHVuc2lnbmVkIHR5cGUpCi17Ci0gICAgcmV0dXJuIHdpZHRoICogaGVp
Z2h0ICogYnl0ZXNQZXJDb21wb25lbnQodHlwZSkgKiBjb21wb25lbnRzUGVyUGl4ZWwoZm9ybWF0
LCB0eXBlKTsKLX0KLQogdm9pZCBXZWJHcmFwaGljc0NvbnRleHQzRERlZmF1bHRJbXBsOjp0ZXhJ
bWFnZTJEKHVuc2lnbmVkIHRhcmdldCwgdW5zaWduZWQgbGV2ZWwsIHVuc2lnbmVkIGludGVybmFs
Rm9ybWF0LCB1bnNpZ25lZCB3aWR0aCwgdW5zaWduZWQgaGVpZ2h0LCB1bnNpZ25lZCBib3JkZXIs
IHVuc2lnbmVkIGZvcm1hdCwgdW5zaWduZWQgdHlwZSwgY29uc3Qgdm9pZCogcGl4ZWxzKQogewot
ICAgIE93bkFycmF5UHRyPHVpbnQ4PiB6ZXJvOwotICAgIGlmICghcGl4ZWxzKSB7Ci0gICAgICAg
IHNpemVfdCBzaXplID0gaW1hZ2VTaXplSW5CeXRlcyh3aWR0aCwgaGVpZ2h0LCBmb3JtYXQsIHR5
cGUpOwotICAgICAgICB6ZXJvLnNldChuZXcgdWludDhbc2l6ZV0pOwotICAgICAgICBtZW1zZXQo
emVyby5nZXQoKSwgMCwgc2l6ZSk7Ci0gICAgICAgIHBpeGVscyA9IHplcm8uZ2V0KCk7CisgICAg
aWYgKHdpZHRoICYmIGhlaWdodCAmJiAhcGl4ZWxzKSB7CisgICAgICAgIHN5bnRoZXNpemVHTEVy
cm9yKEdMX0lOVkFMSURfVkFMVUUpOworICAgICAgICByZXR1cm47CiAgICAgfQorICAgIG1ha2VD
b250ZXh0Q3VycmVudCgpOwogICAgIGdsVGV4SW1hZ2UyRCh0YXJnZXQsIGxldmVsLCBpbnRlcm5h
bEZvcm1hdCwgd2lkdGgsIGhlaWdodCwgYm9yZGVyLCBmb3JtYXQsIHR5cGUsIHBpeGVscyk7CiB9
CiAKSW5kZXg6IExheW91dFRlc3RzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0
cy9DaGFuZ2VMb2cJKHJldmlzaW9uIDczNDIwKQorKysgTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCSh3
b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTMgQEAKKzIwMTAtMTItMDYgIFpoZW55YW8gTW8gIDx6
bW9AZ29vZ2xlLmNvbT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKwor
ICAgICAgICBXZWJHTFJlbmRlcmluZ0NvbnRleHQgbmVlZHMgdG8gemVybyB0ZXh0dXJlcyBhbmQg
cmVuZGVyYnVmZmVycworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9NDkzNTUKKworICAgICAgICAqIGZhc3QvY2FudmFzL3dlYmdsL3VuaW5pdGlhbGl6ZWQt
dGVzdC1leHBlY3RlZC50eHQ6IEFkZGVkLgorICAgICAgICAqIGZhc3QvY2FudmFzL3dlYmdsL3Vu
aW5pdGlhbGl6ZWQtdGVzdC5odG1sOiBBZGRlZC4KKwogMjAxMC0xMi0wNiAgVmljdG9yIFdhbmcg
IDx2aWN0b3J3QGNocm9taXVtLm9yZz4KIAogICAgICAgICBVbnJldmlld2VkLgpJbmRleDogTGF5
b3V0VGVzdHMvZmFzdC9jYW52YXMvd2ViZ2wvdW5pbml0aWFsaXplZC10ZXN0LWV4cGVjdGVkLnR4
dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9mYXN0L2NhbnZhcy93ZWJnbC91bmluaXRpYWxp
emVkLXRlc3QtZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvZmFzdC9j
YW52YXMvd2ViZ2wvdW5pbml0aWFsaXplZC10ZXN0LWV4cGVjdGVkLnR4dAkocmV2aXNpb24gMCkK
QEAgLTAsMCArMSwxMyBAQAorVGVzdHMgdG8gY2hlY2sgdXNlciBjb2RlIGNhbm5vdCBhY2Nlc3Mg
dW5pbml0aWFsaXplZCBkYXRhIGZyb20gR0wgcmVzb3VyY2VzLgorCitPbiBzdWNjZXNzLCB5b3Ug
d2lsbCBzZWUgYSBzZXJpZXMgb2YgIlBBU1MiIG1lc3NhZ2VzLCBmb2xsb3dlZCBieSAiVEVTVCBD
T01QTEVURSIuCisKK1BBU1MgQ29udGV4dCBjcmVhdGVkLgorUmVhZGluZyBhbiB1bmluaXRpYWxp
emVkIHRleHR1cmUgc2hvdWxkIHN1Y2NlZWQgd2l0aCBhbGwgYnl0ZXMgc2V0IHRvIDAuCitQQVNT
IEFsbCBkYXRhIGluaXRpYWxpemVkCitQQVNTIGdldEVycm9yIHdhcyBleHBlY3RlZCB2YWx1ZTog
Tk9fRVJST1IgOiAKKworUEFTUyBzdWNjZXNzZnVsbHlQYXJzZWQgaXMgdHJ1ZQorCitURVNUIENP
TVBMRVRFCisKSW5kZXg6IExheW91dFRlc3RzL2Zhc3QvY2FudmFzL3dlYmdsL3VuaW5pdGlhbGl6
ZWQtdGVzdC5odG1sCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2Zhc3QvY2FudmFzL3dlYmds
L3VuaW5pdGlhbGl6ZWQtdGVzdC5odG1sCShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvZmFz
dC9jYW52YXMvd2ViZ2wvdW5pbml0aWFsaXplZC10ZXN0Lmh0bWwJKHJldmlzaW9uIDApCkBAIC0w
LDAgKzEsOTEgQEAKKzwhZG9jdHlwZSBodG1sPgorPGh0bWw+Cis8aGVhZD4KKzxtZXRhIGh0dHAt
ZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PXV0Zi04Ij4K
Kzx0aXRsZT5XZWJHTCBVbmluaXRpYWxpemVkIEdMIFJlc291cmNlcyBUZXN0czwvdGl0bGU+Cis8
bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9Ii4uLy4uL2pzL3Jlc291cmNlcy9qcy10ZXN0LXN0
eWxlLmNzcyIvPgorPHNjcmlwdCBzcmM9Ii4uLy4uL2pzL3Jlc291cmNlcy9qcy10ZXN0LXByZS5q
cyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0icmVzb3VyY2VzL3dlYmdsLXRlc3QuanMiPjwvc2Ny
aXB0PgorPC9oZWFkPgorPGJvZHk+Cis8ZGl2IGlkPSJkZXNjcmlwdGlvbiI+PC9kaXY+Cis8ZGl2
IGlkPSJjb25zb2xlIj48L2Rpdj4KKzxjYW52YXMgaWQ9ImNhbnZhcyIgd2lkdGg9IjIiIGhlaWdo
dD0iMiI+IDwvY2FudmFzPgorPHNjcmlwdD4KK2Rlc2NyaXB0aW9uKCJUZXN0cyB0byBjaGVjayB1
c2VyIGNvZGUgY2Fubm90IGFjY2VzcyB1bmluaXRpYWxpemVkIGRhdGEgZnJvbSBHTCByZXNvdXJj
ZXMuIik7CisKK3ZhciBjYW52YXMgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiY2FudmFzIik7
Cit2YXIgZ2wgPSBjcmVhdGUzRENvbnRleHQoY2FudmFzKTsKK2lmICghZ2wpCisgIHRlc3RGYWls
ZWQoIkNvbnRleHQgY3JlYXRlZC4iKTsKK2Vsc2UKKyAgdGVzdFBhc3NlZCgiQ29udGV4dCBjcmVh
dGVkLiIpOworCitkZWJ1ZygiUmVhZGluZyBhbiB1bmluaXRpYWxpemVkIHRleHR1cmUgc2hvdWxk
IHN1Y2NlZWQgd2l0aCBhbGwgYnl0ZXMgc2V0IHRvIDAuIik7CisKK3ZhciB3aWR0aCA9IDUxMjsK
K3ZhciBoZWlnaHQgPSA1MTI7Cit2YXIgYnBwID0gNDsKK3ZhciBleHBlY3RlZERhdGFMZW5ndGgg
PSB3aWR0aCpoZWlnaHQqYnBwOworCit2YXIgdGV4ID0gZ2wuY3JlYXRlVGV4dHVyZSgpOworZ2wu
YmluZFRleHR1cmUoZ2wuVEVYVFVSRV8yRCwgdGV4KTsKK2dsLnRleEltYWdlMkQoZ2wuVEVYVFVS
RV8yRCwgMCwgZ2wuUkdCQSwgd2lkdGgsIGhlaWdodCwgMCwgZ2wuUkdCQSwgZ2wuVU5TSUdORURf
QllURSwgbnVsbCk7CisKKy8vIHRoaXMgY2FuIGJlIHF1aXRlIHVuZGV0ZXJtaW5pc3RpYyBzbyB0
byBpbXByb3ZlIG9kZHMgb2Ygc2VlaW5nIHVuaW5pdGlhbGl6ZWQgZGF0YSB3cml0ZSBiaXRzCisv
LyBpbnRvIHRleCB0aGVuIGRlbGV0ZSB0ZXh0dXJlIHRoZW4gcmUtY3JlYXRlIG9uZSB3aXRoIHNh
bWUgY2hhcmFjdGVyaXN0aWNzIChkcml2ZXIgd2lsbCBsaWtlbHkgcmV1c2UgbWVtKQorLy8gd2l0
aCB0aGlzIHRyaWNrIG9uIHI1OTA0NiBXZWJLaXQvT1NYIEkgZ2V0IEZBSUwgMTAwJSBvZiB0aGUg
dGltZSBpbnN0ZWFkIG9mIH4xNSUgb2YgdGhlIHRpbWUuCisKK3ZhciBiYWREYXRhID0gbmV3IFVp
bnQ4QXJyYXkoZXhwZWN0ZWREYXRhTGVuZ3RoKTsKK2ZvciAodmFyIGkgPSAwOyBpIDwgYmFkRGF0
YS5sZW5ndGg7ICsraSkKKyAgICBiYWREYXRhW2ldID0gaSAlIDI1NTsKKworZ2wudGV4U3ViSW1h
Z2UyRChnbC5URVhUVVJFXzJELCAwLCAwLCAwLCB3aWR0aCwgaGVpZ2h0LCBnbC5SR0JBLCBnbC5V
TlNJR05FRF9CWVRFLCBiYWREYXRhKTsKK2dsLmZpbmlzaCgpOyAvLyBtYWtlIHN1cmUgaXQgaGFz
IGJlZW4gdXBsb2FkZWQKKworZ2wuZGVsZXRlVGV4dHVyZSh0ZXgpOworZ2wuZmluaXNoKCk7IC8v
IG1ha2Ugc3VyZSBpdCBoYXMgYmVlbiBkZWxldGVkCisKK3ZhciB0ZXggPSBnbC5jcmVhdGVUZXh0
dXJlKCk7CitnbC5iaW5kVGV4dHVyZShnbC5URVhUVVJFXzJELCB0ZXgpOworZ2wudGV4SW1hZ2Uy
RChnbC5URVhUVVJFXzJELCAwLCBnbC5SR0JBLCB3aWR0aCwgaGVpZ2h0LCAwLCBnbC5SR0JBLCBn
bC5VTlNJR05FRF9CWVRFLCBudWxsKTsKKwordmFyIGZiID0gZ2wuY3JlYXRlRnJhbWVidWZmZXIo
KTsKK2dsLmJpbmRGcmFtZWJ1ZmZlcihnbC5GUkFNRUJVRkZFUiwgZmIpOworZ2wuZnJhbWVidWZm
ZXJUZXh0dXJlMkQoZ2wuRlJBTUVCVUZGRVIsIGdsLkNPTE9SX0FUVEFDSE1FTlQwLCBnbC5URVhU
VVJFXzJELCB0ZXgsIDApOworCitkYXRhID0gbmV3IFVpbnQ4QXJyYXkod2lkdGggKiBoZWlnaHQg
KiA0KTsKK2dsLnJlYWRQaXhlbHMoMCwgMCwgd2lkdGgsIGhlaWdodCwgZ2wuUkdCQSwgZ2wuVU5T
SUdORURfQllURSwgZGF0YSk7CisKK2lmIChkYXRhLmxlbmd0aCAhPSBleHBlY3RlZERhdGFMZW5n
dGgpIHsKKyAgICB0ZXN0RmFpbGVkKCJleHBlY3RlZCBkYXRhIGxlbmd0aCAiICsgZXhwZWN0ZWRE
YXRhTGVuZ3RoICsgIiBidXQgZ290ICIgKyBkYXRhLmxlbmd0aCArICIgaW5zdGVhZC4iKTsKK30g
ZWxzZSB7CisgICAgdmFyIGsgPSAwOworICAgIGZvciAodmFyIGkgPSAwOyBpIDwgZGF0YS5sZW5n
dGg7ICsraSkgeworICAgICAgICBpZiAoZGF0YVtpXSAhPSAwKSB7CisgICAgICAgICAgICBrKys7
CisgICAgICAgIH0KKyAgICB9CisKKyAgICBpZiAoaykgeworICAgICAgICB0ZXN0RmFpbGVkKCJG
b3VuZCAiICsgayArICIgbm9uLXplcm8gYnl0ZXMiKTsKKyAgICB9IGVsc2UgeworICAgICAgICB0
ZXN0UGFzc2VkKCJBbGwgZGF0YSBpbml0aWFsaXplZCIpOworICAgIH0KK30KKworZ2xFcnJvclNo
b3VsZEJlKGdsLCBnbC5OT19FUlJPUik7CisKKy8vVE9ETzogdW5pbml0aWFsaXplZCB2ZXJ0ZXgg
YXJyYXkgYnVmZmVyCisvL1RPRE86IHVuaW5pdGlhbGl6ZWQgdmVydGV4IGVsZW1lbnRzIGJ1ZmZl
cgorLy9UT0RPOiB1bmluaXRpYWxpemVkIGZyYW1lYnVmZmVyPyAoaW1wbGVtZW50YXRpb25zIHdv
dWxkIG5lZWQgdG8gZG8gYSBHTCBjbGVhciBhdCBmaXJzdCBiaW5kaW5nPykKKy8vVE9ETzogdW5p
bml0aWFsaXplZCByZW5kZXJidWZmZXI/IChpbXBsZW1lbnRhdGlvbnMgd291bGQgbmVlZCB0byBk
byBhIEdMIGNsZWFyIGF0IGZpcnN0IGJpbmRpbmc/KQorLy9UT0RPOiB1bmluaXRpYWxpemVkIHVu
aWZvcm0gYXJyYXlzPworCitkZWJ1ZygiIik7CitzdWNjZXNzZnVsbHlQYXJzZWQgPSB0cnVlOwor
PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0iLi4vLi4vanMvcmVzb3VyY2VzL2pzLXRlc3QtcG9zdC5q
cyI+PC9zY3JpcHQ+Cis8L2JvZHk+Cis8L2h0bWw+CisK
</data>
<flag name="commit-queue"
          id="66982"
          type_id="3"
          status="-"
          setter="zmo"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>76112</attachid>
            <date>2010-12-09 12:33:43 -0800</date>
            <delta_ts>2010-12-09 16:09:20 -0800</delta_ts>
            <desc>revised patch: fix a tiny issue</desc>
            <filename>init.patch</filename>
            <type>text/plain</type>
            <size>35206</size>
            <attacher name="Zhenyao Mo">zmo</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA3MzYzNCkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsNDQgQEAKKzIwMTAtMTItMDYgIFpoZW55YW8gTW8gIDx6bW9AZ29vZ2xlLmNvbT4K
KworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBXZWJHTFJl
bmRlcmluZ0NvbnRleHQgbmVlZHMgdG8gemVybyB0ZXh0dXJlcyBhbmQgcmVuZGVyYnVmZmVycwor
ICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NDkzNTUKKwor
ICAgICAgICBUZXN0OiBmYXN0L2NhbnZhcy93ZWJnbC91bmluaXRpYWxpemVkLXRlc3QuaHRtbAor
CisgICAgICAgICogaHRtbC9jYW52YXMvV2ViR0xGcmFtZWJ1ZmZlci5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpXZWJHTEZyYW1lYnVmZmVyOjpvbkFjY2Vzcyk6IFVzZSBhIHBhcmFtZXRlciB0byBk
ZWNpZGUgaWYgcmVuZGVyYnVmZmVyIGluaXRpYWxpemF0aW9uIGlzIG5lZWRlZC4KKyAgICAgICAg
KFdlYkNvcmU6OldlYkdMRnJhbWVidWZmZXI6OmluaXRpYWxpemVSZW5kZXJidWZmZXJzKTogRG9u
J3QgcmV0dXJuIGZhbHNlIGlmIGNvbG9yIGJ1ZmZlciBkb2Vzbid0IGV4aXN0LgorICAgICAgICAq
IGh0bWwvY2FudmFzL1dlYkdMRnJhbWVidWZmZXIuaDogTW9kaWZ5IG9uQWNjZXNzIGZ1bmN0aW9u
IHNpZ25hdHVyZS4KKyAgICAgICAgKiBodG1sL2NhbnZhcy9XZWJHTFJlbmRlcmluZ0NvbnRleHQu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0OjpjbGVhcik6IENh
bGwgb25BY2Nlc3Mgd2l0aCBhbiBhZGRlZCBwYXJhbWV0ZXIuCisgICAgICAgIChXZWJDb3JlOjpX
ZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmNvcHlUZXhJbWFnZTJEKTogRGl0dG8uCisgICAgICAgIChX
ZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmNvcHlUZXhTdWJJbWFnZTJEKTogRGl0dG8u
CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmRyYXdBcnJheXMpOiBE
aXR0by4KKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dDo6ZHJhd0VsZW1l
bnRzKTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnJl
YWRQaXhlbHMpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4
dDo6dGV4SW1hZ2UyREJhc2UpOiBDcmVhdGUgYnVmZmVyIGRhdGEgb2YgMHMgaWYgaW5wdXQgaXMg
bnVsbCB0byBpbml0aWFsaXplIHRleHR1cmVzLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNz
L0dyYXBoaWNzQ29udGV4dDNELmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4
dDNEOjp0ZXhJbWFnZTJEUmVzb3VyY2VTYWZlKTogSGVscGVyIGZ1bmN0aW9uIHRoYXQgaW5pdGlh
bGl6ZSBhbGwgcGl4ZWxzIHRvIDAuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhp
Y3NDb250ZXh0M0QuaDoKKyAgICAgICAgKiBQbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9DYW52
YXMyRExheWVyQ2hyb21pdW0uY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q2FudmFzMkRMYXllckNo
cm9taXVtOjp1cGRhdGVDb250ZW50cyk6IENyZWF0ZSBidWZmZXIgZGF0YSBvZiAwcyBpZiBpbnB1
dCBpcyBudWxsIHRvIGluaXRpYWxpemUgdGV4dHVyZXMuCisgICAgICAgICogcGxhdGZvcm0vZ3Jh
cGhpY3MvY2hyb21pdW0vRHJhd2luZ0J1ZmZlckNocm9taXVtLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OmdlbmVyYXRlQ29sb3JUZXh0dXJlKTogRGl0dG8uCisgICAgICAgICogcGxhdGZvcm0vZ3Jh
cGhpY3MvY2hyb21pdW0vTGF5ZXJSZW5kZXJlckNocm9taXVtLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OkxheWVyUmVuZGVyZXJDaHJvbWl1bTo6cHJlcGFyZVRvRHJhd0xheWVycyk6IERpdHRvLgor
ICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1JlbmRlclN1cmZhY2VDaHJvbWl1
bS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJTdXJmYWNlQ2hyb21pdW06OnByZXBhcmVD
b250ZW50c1RleHR1cmUpOiBEaXR0by4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJv
bWl1bS9WaWRlb0xheWVyQ2hyb21pdW0uY3BwOgorICAgICAgICAoV2ViQ29yZTo6VmlkZW9MYXll
ckNocm9taXVtOjphbGxvY2F0ZVRleHR1cmUpOiBEaXR0by4KKyAgICAgICAgKiBwbGF0Zm9ybS9n
cmFwaGljcy9ncHUvRHJhd2luZ0J1ZmZlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpEcmF3aW5n
QnVmZmVyOjpyZXNldCk6IENyZWF0ZSBidWZmZXIgZGF0YSBvZiAwcyBpZiBpbnB1dCBpcyBudWxs
IHRvIGluaXRpYWxpemUgdGV4dHVyZXM7IGFsc28sIG9ubHkgY2xlYW4gdGhlIGRlcHRoL3N0ZW5j
aWwgYnVmZmVyIGxhdGVyLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2dwdS9UZXh0dXJl
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlRleHR1cmU6OmNyZWF0ZSk6IENyZWF0ZSBidWZmZXIg
ZGF0YSBvZiAwcyBpZiBpbnB1dCBpcyBudWxsIHRvIGluaXRpYWxpemUgdGV4dHVyZXMuCisgICAg
ICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0dyYXBoaWNzQ29udGV4dDNET3BlbkdMLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjp0ZXhJbWFnZTJEKTogR2Vu
ZXJhdGUgYW4gSU5WQUxJRF9WQUxVRSBpZiBwaXhlbHM9PW51bGwgaXMgcGFzc2VkLgorCiAyMDEw
LTEyLTA5ICBZYWVsIEFoYXJvbiAgPHlhZWwuYWhhcm9uQG5va2lhLmNvbT4KIAogICAgICAgICBS
ZXZpZXdlZCBieSBBbnRvbmlvIEdvbWVzLgpJbmRleDogV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJH
TEZyYW1lYnVmZmVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdM
RnJhbWVidWZmZXIuY3BwCShyZXZpc2lvbiA3MzMxOSkKKysrIFdlYkNvcmUvaHRtbC9jYW52YXMv
V2ViR0xGcmFtZWJ1ZmZlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE4MSwxMSArMTgxLDEzIEBA
IGJvb2wgV2ViR0xGcmFtZWJ1ZmZlcjo6aXNJbmNvbXBsZXRlKGJvb2wKICAgICByZXR1cm4gZmFs
c2U7CiB9CiAKLWJvb2wgV2ViR0xGcmFtZWJ1ZmZlcjo6b25BY2Nlc3MoKQorYm9vbCBXZWJHTEZy
YW1lYnVmZmVyOjpvbkFjY2Vzcyhib29sIG5lZWRUb0luaXRpYWxpemVSZW5kZXJidWZmZXJzKQog
ewogICAgIGlmIChpc0luY29tcGxldGUodHJ1ZSkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKLSAg
ICByZXR1cm4gaW5pdGlhbGl6ZVJlbmRlcmJ1ZmZlcnMoKTsKKyAgICBpZiAobmVlZFRvSW5pdGlh
bGl6ZVJlbmRlcmJ1ZmZlcnMpCisgICAgICAgIHJldHVybiBpbml0aWFsaXplUmVuZGVyYnVmZmVy
cygpOworICAgIHJldHVybiB0cnVlOwogfQogCiB2b2lkIFdlYkdMRnJhbWVidWZmZXI6OmRlbGV0
ZU9iamVjdEltcGwoUGxhdGZvcm0zRE9iamVjdCBvYmplY3QpCkBAIC0yMDEsOCArMjAzLDYgQEAg
dm9pZCBXZWJHTEZyYW1lYnVmZmVyOjpkZWxldGVPYmplY3RJbXBsKAogYm9vbCBXZWJHTEZyYW1l
YnVmZmVyOjppbml0aWFsaXplUmVuZGVyYnVmZmVycygpCiB7CiAgICAgQVNTRVJUKG9iamVjdCgp
KTsKLSAgICBpZiAoIWlzQ29sb3JBdHRhY2hlZCgpKQotICAgICAgICByZXR1cm4gZmFsc2U7CiAg
ICAgYm9vbCBpbml0Q29sb3IgPSBmYWxzZSwgaW5pdERlcHRoID0gZmFsc2UsIGluaXRTdGVuY2ls
ID0gZmFsc2U7CiAgICAgdW5zaWduZWQgbG9uZyBtYXNrID0gMDsKICAgICBpZiAoaXNVbmluaXRp
YWxpemVkKG1fY29sb3JBdHRhY2htZW50LmdldCgpKSkgewpJbmRleDogV2ViQ29yZS9odG1sL2Nh
bnZhcy9XZWJHTEZyYW1lYnVmZmVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9odG1sL2NhbnZh
cy9XZWJHTEZyYW1lYnVmZmVyLmgJKHJldmlzaW9uIDczMzE5KQorKysgV2ViQ29yZS9odG1sL2Nh
bnZhcy9XZWJHTEZyYW1lYnVmZmVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTUwLDggKzUwLDkgQEAg
cHVibGljOgogICAgIC8vIHJlYWRQaXhlbHMsIGNvcHlUZXhJbWFnZTJELCBjb3B5VGV4U3ViSW1h
Z2UyRCBpZiB0aGlzIGZyYW1lYnVmZmVyIGlzCiAgICAgLy8gY3VycmVudGx5IGJvdW5kLgogICAg
IC8vIFJldHVybiBmYWxzZSBpZiB0aGUgZnJhbWVidWZmZXIgaXMgaW5jb21wbGV0ZTsgb3RoZXJ3
aXNlIGluaXRpYWxpemUKLSAgICAvLyB0aGUgYnVmZmVycyBpZiB0aGV5IGhhdmVuJ3QgYmVlbiBp
bml0aWFsaXplZC4KLSAgICBib29sIG9uQWNjZXNzKCk7CisgICAgLy8gdGhlIGJ1ZmZlcnMgaWYg
dGhleSBoYXZlbid0IGJlZW4gaW5pdGlhbGl6ZWQgYW5kCisgICAgLy8gbmVlZFRvSW5pdGlhbGl6
ZVJlbmRlcmJ1ZmZlcnMgaXMgdHJ1ZS4KKyAgICBib29sIG9uQWNjZXNzKGJvb2wgbmVlZFRvSW5p
dGlhbGl6ZVJlbmRlcmJ1ZmZlcnMpOwogCiAgICAgLy8gUmV0dXJuIGZhbHNlIGRvZXMgbm90IG1l
YW4gQ09NUExFVEUsIG1pZ2h0IHN0aWxsIGJlIElOQ09NUExFVEUuCiAgICAgYm9vbCBpc0luY29t
cGxldGUoYm9vbCBjaGVja0ludGVybmFsRm9ybWF0KSBjb25zdDsKSW5kZXg6IFdlYkNvcmUvaHRt
bC9jYW52YXMvV2ViR0xSZW5kZXJpbmdDb250ZXh0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3Jl
L2h0bWwvY2FudmFzL1dlYkdMUmVuZGVyaW5nQ29udGV4dC5jcHAJKHJldmlzaW9uIDczMzE5KQor
KysgV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFJlbmRlcmluZ0NvbnRleHQuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC01NDQsNyArNTQ0LDcgQEAgdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmNs
ZWFyKHVuc2lnbgogICAgICAgICBtX2NvbnRleHQtPnN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNz
Q29udGV4dDNEOjpJTlZBTElEX1ZBTFVFKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KLSAgICBp
ZiAobV9mcmFtZWJ1ZmZlckJpbmRpbmcgJiYgIW1fZnJhbWVidWZmZXJCaW5kaW5nLT5vbkFjY2Vz
cygpKSB7CisgICAgaWYgKG1fZnJhbWVidWZmZXJCaW5kaW5nICYmICFtX2ZyYW1lYnVmZmVyQmlu
ZGluZy0+b25BY2Nlc3MoIWlzUmVzb3VyY2VTYWZlKCkpKSB7CiAgICAgICAgIG1fY29udGV4dC0+
c3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfRlJBTUVCVUZGRVJf
T1BFUkFUSU9OKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KQEAgLTYyMiw3ICs2MjIsNyBAQCB2
b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6Y29weVRleEltYWdlCiAgICAgICAgIG1fY29udGV4
dC0+c3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfVkFMVUUpOwog
ICAgICAgICByZXR1cm47CiAgICAgfQotICAgIGlmIChtX2ZyYW1lYnVmZmVyQmluZGluZyAmJiAh
bV9mcmFtZWJ1ZmZlckJpbmRpbmctPm9uQWNjZXNzKCkpIHsKKyAgICBpZiAobV9mcmFtZWJ1ZmZl
ckJpbmRpbmcgJiYgIW1fZnJhbWVidWZmZXJCaW5kaW5nLT5vbkFjY2VzcyghaXNSZXNvdXJjZVNh
ZmUoKSkpIHsKICAgICAgICAgbV9jb250ZXh0LT5zeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0Nv
bnRleHQzRDo6SU5WQUxJRF9GUkFNRUJVRkZFUl9PUEVSQVRJT04pOwogICAgICAgICByZXR1cm47
CiAgICAgfQpAQCAtNjQ3LDcgKzY0Nyw3IEBAIHZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojpj
b3B5VGV4U3ViSW0KICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQogICAgIH0KLSAgICBp
ZiAobV9mcmFtZWJ1ZmZlckJpbmRpbmcgJiYgIW1fZnJhbWVidWZmZXJCaW5kaW5nLT5vbkFjY2Vz
cygpKSB7CisgICAgaWYgKG1fZnJhbWVidWZmZXJCaW5kaW5nICYmICFtX2ZyYW1lYnVmZmVyQmlu
ZGluZy0+b25BY2Nlc3MoIWlzUmVzb3VyY2VTYWZlKCkpKSB7CiAgICAgICAgIG1fY29udGV4dC0+
c3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfRlJBTUVCVUZGRVJf
T1BFUkFUSU9OKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KQEAgLTEwNzgsNyArMTA3OCw3IEBA
IHZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpkcmF3QXJyYXlzKHUKICAgICAgICAgfQogICAg
IH0KIAotICAgIGlmIChtX2ZyYW1lYnVmZmVyQmluZGluZyAmJiAhbV9mcmFtZWJ1ZmZlckJpbmRp
bmctPm9uQWNjZXNzKCkpIHsKKyAgICBpZiAobV9mcmFtZWJ1ZmZlckJpbmRpbmcgJiYgIW1fZnJh
bWVidWZmZXJCaW5kaW5nLT5vbkFjY2VzcyghaXNSZXNvdXJjZVNhZmUoKSkpIHsKICAgICAgICAg
bV9jb250ZXh0LT5zeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9G
UkFNRUJVRkZFUl9PUEVSQVRJT04pOwogICAgICAgICByZXR1cm47CiAgICAgfQpAQCAtMTE0Miw3
ICsxMTQyLDcgQEAgdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmRyYXdFbGVtZW50cwogICAg
ICAgICB9CiAgICAgfQogCi0gICAgaWYgKG1fZnJhbWVidWZmZXJCaW5kaW5nICYmICFtX2ZyYW1l
YnVmZmVyQmluZGluZy0+b25BY2Nlc3MoKSkgeworICAgIGlmIChtX2ZyYW1lYnVmZmVyQmluZGlu
ZyAmJiAhbV9mcmFtZWJ1ZmZlckJpbmRpbmctPm9uQWNjZXNzKCFpc1Jlc291cmNlU2FmZSgpKSkg
ewogICAgICAgICBtX2NvbnRleHQtPnN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNE
OjpJTlZBTElEX0ZSQU1FQlVGRkVSX09QRVJBVElPTik7CiAgICAgICAgIHJldHVybjsKICAgICB9
CkBAIC0yMjYzLDcgKzIyNjMsNyBAQCB2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6cmVhZFBp
eGVscyhsCiAgICAgICAgIG1fY29udGV4dC0+c3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250
ZXh0M0Q6OklOVkFMSURfT1BFUkFUSU9OKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KLSAgICBp
ZiAobV9mcmFtZWJ1ZmZlckJpbmRpbmcgJiYgIW1fZnJhbWVidWZmZXJCaW5kaW5nLT5vbkFjY2Vz
cygpKSB7CisgICAgaWYgKG1fZnJhbWVidWZmZXJCaW5kaW5nICYmICFtX2ZyYW1lYnVmZmVyQmlu
ZGluZy0+b25BY2Nlc3MoIWlzUmVzb3VyY2VTYWZlKCkpKSB7CiAgICAgICAgIG1fY29udGV4dC0+
c3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfRlJBTUVCVUZGRVJf
T1BFUkFUSU9OKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KQEAgLTI0NjMsOCArMjQ2MywxNSBA
QCB2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dGV4SW1hZ2UyREJhCiAgICAgICAgICAgICBy
ZXR1cm47CiAgICAgICAgIH0KICAgICB9Ci0gICAgbV9jb250ZXh0LT50ZXhJbWFnZTJEKHRhcmdl
dCwgbGV2ZWwsIGludGVybmFsZm9ybWF0LCB3aWR0aCwgaGVpZ2h0LAotICAgICAgICAgICAgICAg
ICAgICAgICAgICBib3JkZXIsIGZvcm1hdCwgdHlwZSwgcGl4ZWxzKTsKKyAgICBpZiAoIXBpeGVs
cyAmJiAhaXNSZXNvdXJjZVNhZmUoKSkgeworICAgICAgICBpbnQgZXJyb3IgPSBtX2NvbnRleHQt
PnRleEltYWdlMkRSZXNvdXJjZVNhZmUodGFyZ2V0LCBsZXZlbCwgaW50ZXJuYWxmb3JtYXQsIHdp
ZHRoLCBoZWlnaHQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBib3JkZXIsIGZvcm1hdCwgdHlwZSk7CisgICAgICAgIGlmIChlcnJvcikKKyAg
ICAgICAgICAgIHJldHVybjsKKyAgICB9IGVsc2UgeworICAgICAgICBtX2NvbnRleHQtPnRleElt
YWdlMkQodGFyZ2V0LCBsZXZlbCwgaW50ZXJuYWxmb3JtYXQsIHdpZHRoLCBoZWlnaHQsCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBib3JkZXIsIGZvcm1hdCwgdHlwZSwgcGl4ZWxzKTsK
KyAgICB9CiAgICAgdGV4LT5zZXRMZXZlbEluZm8odGFyZ2V0LCBsZXZlbCwgaW50ZXJuYWxmb3Jt
YXQsIHdpZHRoLCBoZWlnaHQsIHR5cGUpOwogICAgIGNsZWFudXBBZnRlckdyYXBoaWNzQ2FsbChm
YWxzZSk7CiB9CkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4
dDNELmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNz
Q29udGV4dDNELmNwcAkocmV2aXNpb24gNzMzMTkpCisrKyBXZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL0dyYXBoaWNzQ29udGV4dDNELmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzEsMjcgKzMxLDEw
NCBAQAogI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dDNELmgiCiAKICNpbmNsdWRlICJBcnJheUJ1
ZmZlclZpZXcuaCIKKyNpbmNsdWRlICJDaGVja2VkSW50LmgiCiAjaW5jbHVkZSAiRHJhd2luZ0J1
ZmZlci5oIgogI2luY2x1ZGUgIkltYWdlLmgiCiAjaW5jbHVkZSAiSW1hZ2VEYXRhLmgiCiAKKyNp
bmNsdWRlIDx3dGYvT3duQXJyYXlQdHIuaD4KKyNpbmNsdWRlIDx3dGYvUGFzc093bkFycmF5UHRy
Lmg+CisKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotc3RhdGljIHVpbnQ4X3QgY29udmVydENvbG9y
MTZMaXR0bGVUbzgodWludDE2X3QgdmFsdWUpCi17Ci0gICAgcmV0dXJuIHZhbHVlID4+IDg7Ci19
CituYW1lc3BhY2UgeworCisgICAgdW5zaWduZWQgYnl0ZXNQZXJDb21wb25lbnQodW5zaWduZWQg
dHlwZSkKKyAgICB7CisgICAgICAgIHN3aXRjaCAodHlwZSkgeworICAgICAgICBjYXNlIEdyYXBo
aWNzQ29udGV4dDNEOjpVTlNJR05FRF9CWVRFOgorICAgICAgICAgICAgcmV0dXJuIDE7CisgICAg
ICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlVOU0lHTkVEX1NIT1JUXzVfNl81OgorICAgICAg
ICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpVTlNJR05FRF9TSE9SVF80XzRfNF80OgorICAgICAg
ICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpVTlNJR05FRF9TSE9SVF81XzVfNV8xOgorICAgICAg
ICAgICAgcmV0dXJuIDI7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICByZXR1cm4gMTsK
KyAgICAgICAgfQorICAgIH0KKworICAgIHVuc2lnbmVkIGNvbXBvbmVudHNQZXJQaXhlbCh1bnNp
Z25lZCBmb3JtYXQsIHVuc2lnbmVkIHR5cGUpCisgICAgeworICAgICAgICBzd2l0Y2ggKHR5cGUp
IHsKKyAgICAgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6VU5TSUdORURfU0hPUlRfNV82XzU6
CisgICAgICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlVOU0lHTkVEX1NIT1JUXzRfNF80XzQ6
CisgICAgICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlVOU0lHTkVEX1NIT1JUXzVfNV81XzE6
CisgICAgICAgICAgICByZXR1cm4gMTsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICB9CisgICAgICAgIHN3aXRjaCAoZm9ybWF0KSB7CisgICAgICAgIGNhc2Ug
R3JhcGhpY3NDb250ZXh0M0Q6OkFMUEhBOgorICAgICAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNE
OjpMVU1JTkFOQ0U6CisgICAgICAgICAgICByZXR1cm4gMTsKKyAgICAgICAgY2FzZSBHcmFwaGlj
c0NvbnRleHQzRDo6TFVNSU5BTkNFX0FMUEhBOgorICAgICAgICAgICAgcmV0dXJuIDI7CisgICAg
ICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlJHQjoKKyAgICAgICAgICAgIHJldHVybiAzOwor
ICAgICAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpSR0JBOgorICAgICAgICAgICAgcmV0dXJu
IDQ7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICByZXR1cm4gNDsKKyAgICAgICAgfQor
ICAgIH0KKworICAgIC8vIFRoaXMgZnVuY3Rpb24gc2hvdWxkIG9ubHkgYmUgY2FsbGVkIGlmIHdp
ZHRoIGFuZCBoZWlnaHQgaXMgbm9uLXplcm8gYW5kCisgICAgLy8gZm9ybWF0L3R5cGUgYXJlIHZh
bGlkLiAgUmV0dXJuIDAgaWYgb3ZlcmZsb3cgaGFwcGVucy4KKyAgICBzaXplX3QgaW1hZ2VTaXpl
SW5CeXRlcyh1bnNpZ25lZCB3aWR0aCwgdW5zaWduZWQgaGVpZ2h0LCB1bnNpZ25lZCBmb3JtYXQs
IHVuc2lnbmVkIHR5cGUpCisgICAgeworICAgICAgICBBU1NFUlQod2lkdGggJiYgaGVpZ2h0KTsK
KyAgICAgICAgQ2hlY2tlZEludDx1aW50MzJfdD4gY2hlY2tlZFdpZHRoKHdpZHRoKTsKKyAgICAg
ICAgQ2hlY2tlZEludDx1aW50MzJfdD4gY2hlY2tlZEhlaWdodChoZWlnaHQpOworICAgICAgICBD
aGVja2VkSW50PHVpbnQzMl90PiBjaGVja2VkQnl0ZXNQZXJQaXhlbChieXRlc1BlckNvbXBvbmVu
dCh0eXBlKSAqIGNvbXBvbmVudHNQZXJQaXhlbChmb3JtYXQsIHR5cGUpKTsKKyAgICAgICAgQ2hl
Y2tlZEludDx1aW50MzJfdD4gY2hlY2tlZFNpemUgPSBjaGVja2VkV2lkdGggKiBjaGVja2VkSGVp
Z2h0ICogY2hlY2tlZEJ5dGVzUGVyUGl4ZWw7CisgICAgICAgIGlmIChjaGVja2VkU2l6ZS52YWxp
ZCgpKQorICAgICAgICAgICAgcmV0dXJuIGNoZWNrZWRTaXplLnZhbHVlKCk7CisgICAgICAgIHJl
dHVybiAwOworICAgIH0KKworICAgIHVpbnQ4X3QgY29udmVydENvbG9yMTZMaXR0bGVUbzgodWlu
dDE2X3QgdmFsdWUpCisgICAgeworICAgICAgICByZXR1cm4gdmFsdWUgPj4gODsKKyAgICB9CisK
KyAgICB1aW50OF90IGNvbnZlcnRDb2xvcjE2QmlnVG84KHVpbnQxNl90IHZhbHVlKQorICAgIHsK
KyAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PHVpbnQ4X3Q+KHZhbHVlICYgMHgwMEZGKTsKKyAg
ICB9CisKK30gLy8gYW5vbnltb3VzIG5hbWVzcGFjZQogCi1zdGF0aWMgdWludDhfdCBjb252ZXJ0
Q29sb3IxNkJpZ1RvOCh1aW50MTZfdCB2YWx1ZSkKLXsKLSAgICByZXR1cm4gc3RhdGljX2Nhc3Q8
dWludDhfdD4odmFsdWUgJiAweDAwRkYpOwotfQogCiBQYXNzUmVmUHRyPERyYXdpbmdCdWZmZXI+
IEdyYXBoaWNzQ29udGV4dDNEOjpjcmVhdGVEcmF3aW5nQnVmZmVyKGNvbnN0IEludFNpemUmIHNp
emUpCiB7CiAgICAgcmV0dXJuIERyYXdpbmdCdWZmZXI6OmNyZWF0ZSh0aGlzLCBzaXplKTsKIH0K
IAoraW50IEdyYXBoaWNzQ29udGV4dDNEOjp0ZXhJbWFnZTJEUmVzb3VyY2VTYWZlKHVuc2lnbmVk
IHRhcmdldCwgdW5zaWduZWQgbGV2ZWwsIHVuc2lnbmVkIGludGVybmFsZm9ybWF0LCB1bnNpZ25l
ZCB3aWR0aCwgdW5zaWduZWQgaGVpZ2h0LCB1bnNpZ25lZCBib3JkZXIsIHVuc2lnbmVkIGZvcm1h
dCwgdW5zaWduZWQgdHlwZSkgeworICAgIE93bkFycmF5UHRyPHVuc2lnbmVkIGNoYXI+IHplcm87
CisgICAgaWYgKHdpZHRoICYmIGhlaWdodCkgeworICAgICAgICBzaXplX3Qgc2l6ZSA9IGltYWdl
U2l6ZUluQnl0ZXMod2lkdGgsIGhlaWdodCwgZm9ybWF0LCB0eXBlKTsKKyAgICAgICAgaWYgKCFz
aXplKSB7CisgICAgICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6
SU5WQUxJRF9WQUxVRSk7CisgICAgICAgICAgICByZXR1cm4gMTsKKyAgICAgICAgfQorICAgICAg
ICB6ZXJvID0gYWRvcHRBcnJheVB0cihuZXcgdW5zaWduZWQgY2hhcltzaXplXSk7CisgICAgICAg
IG1lbXNldCh6ZXJvLmdldCgpLCAwLCBzaXplKTsKKyAgICB9CisgICAgdGV4SW1hZ2UyRCh0YXJn
ZXQsIGxldmVsLCBpbnRlcm5hbGZvcm1hdCwgd2lkdGgsIGhlaWdodCwgYm9yZGVyLCBmb3JtYXQs
IHR5cGUsIHplcm8uZ2V0KCkpOworICAgIHJldHVybiAwOworfQorCiBib29sIEdyYXBoaWNzQ29u
dGV4dDNEOjpjb21wdXRlRm9ybWF0QW5kVHlwZVBhcmFtZXRlcnModW5zaWduZWQgaW50IGZvcm1h
dCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICB1bnNpZ25lZCBpbnQgdHlwZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBsb25nKiBjb21wb25lbnRzUGVyUGl4ZWwsCklu
ZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dDNELmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHQzRC5oCShy
ZXZpc2lvbiA3MzMxOSkKKysrIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250
ZXh0M0QuaAkod29ya2luZyBjb3B5KQpAQCAtNDcyLDYgKzQ3MiwxMCBAQCBwdWJsaWM6CiAgICAg
Ly8gbGlrZSBHTF9GTE9BVCwgR0xfSU5ULCBldGMuCiAgICAgaW50IHNpemVJbkJ5dGVzKGludCB0
eXBlKTsKIAorICAgIC8vIEhlbHBlciB0byB0ZXhJbWFnZTJEIHdpdGggcGl4ZWw9PU5VTEwgY2Fz
ZTogcGl4ZWxzIGFyZSBpbml0aWFsaXplZCB0byAwLgorICAgIC8vIFJldHVybiAwIGlmIG5vIEdM
IGVycm9yIGlzIHN5bnRoZXNpemVkLgorICAgIGludCB0ZXhJbWFnZTJEUmVzb3VyY2VTYWZlKHVu
c2lnbmVkIHRhcmdldCwgdW5zaWduZWQgbGV2ZWwsIHVuc2lnbmVkIGludGVybmFsZm9ybWF0LCB1
bnNpZ25lZCB3aWR0aCwgdW5zaWduZWQgaGVpZ2h0LCB1bnNpZ25lZCBib3JkZXIsIHVuc2lnbmVk
IGZvcm1hdCwgdW5zaWduZWQgdHlwZSk7CisKICAgICBib29sIGlzR0xFUzJDb21wbGlhbnQoKSBj
b25zdDsKIAogICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jaHJvbWl1bS9DYW52YXMyRExheWVyQ2hyb21pdW0uY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vQ2FudmFzMkRMYXllckNocm9taXVtLmNw
cAkocmV2aXNpb24gNzM0MDkpCisrKyBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVt
L0NhbnZhczJETGF5ZXJDaHJvbWl1bS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTY4LDcgKzY4LDcg
QEAgdm9pZCBDYW52YXMyRExheWVyQ2hyb21pdW06OnVwZGF0ZUNvbnRlbgogICAgICAgICBjb250
ZXh0LT5hY3RpdmVUZXh0dXJlKEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFMCk7CiAgICAgICAg
IGNvbnRleHQtPmJpbmRUZXh0dXJlKEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFXzJELCBtX3Rl
eHR1cmVJZCk7CiAgICAgICAgIEludFNpemUgc2l6ZSA9IG1fZHJhd2luZ0J1ZmZlci0+c2l6ZSgp
OwotICAgICAgICBjb250ZXh0LT50ZXhJbWFnZTJEKEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJF
XzJELCAwLCBHcmFwaGljc0NvbnRleHQzRDo6UkdCQSwgc2l6ZS53aWR0aCgpLCBzaXplLmhlaWdo
dCgpLCAwLCBHcmFwaGljc0NvbnRleHQzRDo6UkdCQSwgR3JhcGhpY3NDb250ZXh0M0Q6OlVOU0lH
TkVEX0JZVEUsIDApOworICAgICAgICBjb250ZXh0LT50ZXhJbWFnZTJEUmVzb3VyY2VTYWZlKEdy
YXBoaWNzQ29udGV4dDNEOjpURVhUVVJFXzJELCAwLCBHcmFwaGljc0NvbnRleHQzRDo6UkdCQSwg
c2l6ZS53aWR0aCgpLCBzaXplLmhlaWdodCgpLCAwLCBHcmFwaGljc0NvbnRleHQzRDo6UkdCQSwg
R3JhcGhpY3NDb250ZXh0M0Q6OlVOU0lHTkVEX0JZVEUpOwogICAgICAgICAvLyBTZXQgdGhlIG1p
bi1tYWcgZmlsdGVycyB0byBsaW5lYXIgYW5kIHdyYXAgbW9kZXMgdG8gR3JhcGhpY3NDb250ZXh0
M0Q6OkNMQU1QX1RPX0VER0UKICAgICAgICAgLy8gdG8gZ2V0IGFyb3VuZCBOUE9UIHRleHR1cmUg
bGltaXRhdGlvbnMgb2YgR0xFUy4KICAgICAgICAgY29udGV4dC0+dGV4UGFyYW1ldGVyaShHcmFw
aGljc0NvbnRleHQzRDo6VEVYVFVSRV8yRCwgR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfTUlO
X0ZJTFRFUiwgR3JhcGhpY3NDb250ZXh0M0Q6OkxJTkVBUik7CkluZGV4OiBXZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2Nocm9taXVtL0RyYXdpbmdCdWZmZXJDaHJvbWl1bS5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9EcmF3aW5nQnVmZmVyQ2hy
b21pdW0uY3BwCShyZXZpc2lvbiA3MzQwOSkKKysrIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2hyb21pdW0vRHJhd2luZ0J1ZmZlckNocm9taXVtLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjAs
NyArNjAsNyBAQCBzdGF0aWMgdW5zaWduZWQgZ2VuZXJhdGVDb2xvclRleHR1cmUoR3JhCiAgICAg
Y29udGV4dC0+dGV4UGFyYW1ldGVyaShHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV8yRCwgR3Jh
cGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfTUlOX0ZJTFRFUiwgR3JhcGhpY3NDb250ZXh0M0Q6Ok5F
QVJFU1QpOwogICAgIGNvbnRleHQtPnRleFBhcmFtZXRlcmkoR3JhcGhpY3NDb250ZXh0M0Q6OlRF
WFRVUkVfMkQsIEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFX1dSQVBfUywgR3JhcGhpY3NDb250
ZXh0M0Q6OkNMQU1QX1RPX0VER0UpOwogICAgIGNvbnRleHQtPnRleFBhcmFtZXRlcmkoR3JhcGhp
Y3NDb250ZXh0M0Q6OlRFWFRVUkVfMkQsIEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFX1dSQVBf
VCwgR3JhcGhpY3NDb250ZXh0M0Q6OkNMQU1QX1RPX0VER0UpOwotICAgIGNvbnRleHQtPnRleElt
YWdlMkQoR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfMkQsIDAsIEdyYXBoaWNzQ29udGV4dDNE
OjpSR0JBLCBzaXplLndpZHRoKCksIHNpemUuaGVpZ2h0KCksIDAsIEdyYXBoaWNzQ29udGV4dDNE
OjpSR0JBLCBHcmFwaGljc0NvbnRleHQzRDo6VU5TSUdORURfQllURSwgMCk7CisgICAgY29udGV4
dC0+dGV4SW1hZ2UyRFJlc291cmNlU2FmZShHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV8yRCwg
MCwgR3JhcGhpY3NDb250ZXh0M0Q6OlJHQkEsIHNpemUud2lkdGgoKSwgc2l6ZS5oZWlnaHQoKSwg
MCwgR3JhcGhpY3NDb250ZXh0M0Q6OlJHQkEsIEdyYXBoaWNzQ29udGV4dDNEOjpVTlNJR05FRF9C
WVRFKTsKICAgICBjb250ZXh0LT5mcmFtZWJ1ZmZlclRleHR1cmUyRChHcmFwaGljc0NvbnRleHQz
RDo6RlJBTUVCVUZGRVIsIEdyYXBoaWNzQ29udGV4dDNEOjpDT0xPUl9BVFRBQ0hNRU5UMCwgR3Jh
cGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfMkQsIG9mZnNjcmVlbkNvbG9yVGV4dHVyZSwgMCk7CiAK
ICAgICByZXR1cm4gb2Zmc2NyZWVuQ29sb3JUZXh0dXJlOwpJbmRleDogV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jaHJvbWl1bS9MYXllclJlbmRlcmVyQ2hyb21pdW0uY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJSZW5kZXJlckNocm9t
aXVtLmNwcAkocmV2aXNpb24gNzM0MDkpCisrKyBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2No
cm9taXVtL0xheWVyUmVuZGVyZXJDaHJvbWl1bS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE5NSw4
ICsxOTUsNyBAQCB2b2lkIExheWVyUmVuZGVyZXJDaHJvbWl1bTo6cHJlcGFyZVRvRHJhCiAgICAg
aWYgKHZpc2libGVSZWN0V2lkdGggIT0gbV9yb290TGF5ZXJUZXh0dXJlV2lkdGggfHwgdmlzaWJs
ZVJlY3RIZWlnaHQgIT0gbV9yb290TGF5ZXJUZXh0dXJlSGVpZ2h0KSB7CiAgICAgICAgIG1fcm9v
dExheWVyVGV4dHVyZVdpZHRoID0gdmlzaWJsZVJlY3RXaWR0aDsKICAgICAgICAgbV9yb290TGF5
ZXJUZXh0dXJlSGVpZ2h0ID0gdmlzaWJsZVJlY3RIZWlnaHQ7Ci0KLSAgICAgICAgR0xDKG1fY29u
dGV4dCwgbV9jb250ZXh0LT50ZXhJbWFnZTJEKEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFXzJE
LCAwLCBHcmFwaGljc0NvbnRleHQzRDo6UkdCQSwgbV9yb290TGF5ZXJUZXh0dXJlV2lkdGgsIG1f
cm9vdExheWVyVGV4dHVyZUhlaWdodCwgMCwgR3JhcGhpY3NDb250ZXh0M0Q6OlJHQkEsIEdyYXBo
aWNzQ29udGV4dDNEOjpVTlNJR05FRF9CWVRFLCAwKSk7CisgICAgICAgIEdMQyhtX2NvbnRleHQs
IG1fY29udGV4dC0+dGV4SW1hZ2UyRFJlc291cmNlU2FmZShHcmFwaGljc0NvbnRleHQzRDo6VEVY
VFVSRV8yRCwgMCwgR3JhcGhpY3NDb250ZXh0M0Q6OlJHQkEsIG1fcm9vdExheWVyVGV4dHVyZVdp
ZHRoLCBtX3Jvb3RMYXllclRleHR1cmVIZWlnaHQsIDAsIEdyYXBoaWNzQ29udGV4dDNEOjpSR0JB
LCBHcmFwaGljc0NvbnRleHQzRDo6VU5TSUdORURfQllURSkpOwogCiAgICAgICAgIC8vIFJlc2V0
IHRoZSBjdXJyZW50IHJlbmRlciBzdXJmYWNlIHRvIGZvcmNlIGFuIHVwZGF0ZSBvZiB0aGUgdmll
d3BvcnQgYW5kCiAgICAgICAgIC8vIHByb2plY3Rpb24gbWF0cml4IG5leHQgdGltZSB1c2VSZW5k
ZXJTdXJmYWNlIGlzIGNhbGxlZC4KSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hy
b21pdW0vUmVuZGVyU3VyZmFjZUNocm9taXVtLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1JlbmRlclN1cmZhY2VDaHJvbWl1bS5jcHAJKHJldmlz
aW9uIDczNDA5KQorKysgV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9SZW5kZXJT
dXJmYWNlQ2hyb21pdW0uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03Nyw5ICs3Nyw5IEBAIHZvaWQg
UmVuZGVyU3VyZmFjZUNocm9taXVtOjpwcmVwYXJlQ29udGUKICAgICBpZiAobV9hbGxvY2F0ZWRU
ZXh0dXJlU2l6ZSAhPSByZXF1aXJlZFNpemUpIHsKICAgICAgICAgR3JhcGhpY3NDb250ZXh0M0Qq
IGNvbnRleHQgPSBtX293bmluZ0xheWVyLT5sYXllclJlbmRlcmVyKCktPmNvbnRleHQoKTsKICAg
ICAgICAgR0xDKGNvbnRleHQsIGNvbnRleHQtPmJpbmRUZXh0dXJlKEdyYXBoaWNzQ29udGV4dDNE
OjpURVhUVVJFXzJELCBtX2NvbnRlbnRzVGV4dHVyZUlkKSk7Ci0gICAgICAgIEdMQyhjb250ZXh0
LCBjb250ZXh0LT50ZXhJbWFnZTJEKEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFXzJELCAwLCBH
cmFwaGljc0NvbnRleHQzRDo6UkdCQSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHJlcXVpcmVkU2l6ZS53aWR0aCgpLCByZXF1aXJlZFNpemUuaGVpZ2h0KCks
IDAsIEdyYXBoaWNzQ29udGV4dDNEOjpSR0JBLAotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgR3JhcGhpY3NDb250ZXh0M0Q6OlVOU0lHTkVEX0JZVEUsIDApKTsK
KyAgICAgICAgR0xDKGNvbnRleHQsIGNvbnRleHQtPnRleEltYWdlMkRSZXNvdXJjZVNhZmUoR3Jh
cGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfMkQsIDAsIEdyYXBoaWNzQ29udGV4dDNEOjpSR0JBLAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXF1aXJlZFNpemUud2lk
dGgoKSwgcmVxdWlyZWRTaXplLmhlaWdodCgpLCAwLCBHcmFwaGljc0NvbnRleHQzRDo6UkdCQSwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR3JhcGhpY3NDb250ZXh0
M0Q6OlVOU0lHTkVEX0JZVEUpKTsKICAgICAgICAgbV9hbGxvY2F0ZWRUZXh0dXJlU2l6ZSA9IHJl
cXVpcmVkU2l6ZTsKICAgICB9CiB9CkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2No
cm9taXVtL1ZpZGVvTGF5ZXJDaHJvbWl1bS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9WaWRlb0xheWVyQ2hyb21pdW0uY3BwCShyZXZpc2lvbiA3
MzQwOSkKKysrIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vVmlkZW9MYXllckNo
cm9taXVtLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjk3LDcgKzI5Nyw3IEBAIGJvb2wgVmlkZW9M
YXllckNocm9taXVtOjphbGxvY2F0ZVRleHR1cmUKIHZvaWQgVmlkZW9MYXllckNocm9taXVtOjph
bGxvY2F0ZVRleHR1cmUoR3JhcGhpY3NDb250ZXh0M0QqIGNvbnRleHQsIHVuc2lnbmVkIHRleHR1
cmVJZCwgY29uc3QgSW50U2l6ZSYgZGltZW5zaW9ucywgdW5zaWduZWQgdGV4dHVyZUZvcm1hdCkK
IHsKICAgICBHTEMoY29udGV4dCwgY29udGV4dC0+YmluZFRleHR1cmUoR3JhcGhpY3NDb250ZXh0
M0Q6OlRFWFRVUkVfMkQsIHRleHR1cmVJZCkpOwotICAgIEdMQyhjb250ZXh0LCBjb250ZXh0LT50
ZXhJbWFnZTJEKEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFXzJELCAwLCB0ZXh0dXJlRm9ybWF0
LCBkaW1lbnNpb25zLndpZHRoKCksIGRpbWVuc2lvbnMuaGVpZ2h0KCksIDAsIHRleHR1cmVGb3Jt
YXQsIEdyYXBoaWNzQ29udGV4dDNEOjpVTlNJR05FRF9CWVRFLCAwKSk7CisgICAgR0xDKGNvbnRl
eHQsIGNvbnRleHQtPnRleEltYWdlMkRSZXNvdXJjZVNhZmUoR3JhcGhpY3NDb250ZXh0M0Q6OlRF
WFRVUkVfMkQsIDAsIHRleHR1cmVGb3JtYXQsIGRpbWVuc2lvbnMud2lkdGgoKSwgZGltZW5zaW9u
cy5oZWlnaHQoKSwgMCwgdGV4dHVyZUZvcm1hdCwgR3JhcGhpY3NDb250ZXh0M0Q6OlVOU0lHTkVE
X0JZVEUpKTsKIH0KIAogdm9pZCBWaWRlb0xheWVyQ2hyb21pdW06OnVwZGF0ZVRleHR1cmUoR3Jh
cGhpY3NDb250ZXh0M0QqIGNvbnRleHQsIHVuc2lnbmVkIHRleHR1cmVJZCwgY29uc3QgSW50U2l6
ZSYgZGltZW5zaW9ucywgdW5zaWduZWQgZm9ybWF0LCBjb25zdCB2b2lkKiBkYXRhKQpJbmRleDog
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ncHUvRHJhd2luZ0J1ZmZlci5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ncHUvRHJhd2luZ0J1ZmZlci5jcHAJKHJl
dmlzaW9uIDczNDA5KQorKysgV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ncHUvRHJhd2luZ0J1
ZmZlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTExNyw5ICsxMTcsNyBAQCB2b2lkIERyYXdpbmdC
dWZmZXI6OnJlc2V0KGNvbnN0IEludFNpemUmCiAgICAgICAgIAogICAgICAgICBtX2NvbnRleHQt
PmdldEludGVnZXJ2KEV4dGVuc2lvbnMzRDo6TUFYX1NBTVBMRVMsICZtYXhTYW1wbGVDb3VudCk7
CiAgICAgICAgIGludCBzYW1wbGVDb3VudCA9IHN0ZDo6bWluKDgsIG1heFNhbXBsZUNvdW50KTsK
LSAgICAgICAgaWYgKHNhbXBsZUNvdW50ID4gbWF4U2FtcGxlQ291bnQpCi0gICAgICAgICAgICBz
YW1wbGVDb3VudCA9IG1heFNhbXBsZUNvdW50OwotICAgICAgICAKKwogICAgICAgICBtX2NvbnRl
eHQtPmJpbmRGcmFtZWJ1ZmZlcihHcmFwaGljc0NvbnRleHQzRDo6RlJBTUVCVUZGRVIsIG1fbXVs
dGlzYW1wbGVGQk8pOwogCiAgICAgICAgIG1fY29udGV4dC0+YmluZFJlbmRlcmJ1ZmZlcihHcmFw
aGljc0NvbnRleHQzRDo6UkVOREVSQlVGRkVSLCBtX211bHRpc2FtcGxlQ29sb3JCdWZmZXIpOwpA
QCAtMTQ1LDcgKzE0Myw3IEBAIHZvaWQgRHJhd2luZ0J1ZmZlcjo6cmVzZXQoY29uc3QgSW50U2l6
ZSYKICAgICBtX2NvbnRleHQtPmJpbmRGcmFtZWJ1ZmZlcihHcmFwaGljc0NvbnRleHQzRDo6RlJB
TUVCVUZGRVIsIG1fZmJvKTsKIAogICAgIG1fY29udGV4dC0+YmluZFRleHR1cmUoR3JhcGhpY3ND
b250ZXh0M0Q6OlRFWFRVUkVfMkQsIG1fY29sb3JCdWZmZXIpOwotICAgIG1fY29udGV4dC0+dGV4
SW1hZ2UyRChHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV8yRCwgMCwgaW50ZXJuYWxDb2xvckZv
cm1hdCwgbV9zaXplLndpZHRoKCksIG1fc2l6ZS5oZWlnaHQoKSwgMCwgY29sb3JGb3JtYXQsIEdy
YXBoaWNzQ29udGV4dDNEOjpVTlNJR05FRF9CWVRFLCAwKTsKKyAgICBtX2NvbnRleHQtPnRleElt
YWdlMkRSZXNvdXJjZVNhZmUoR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfMkQsIDAsIGludGVy
bmFsQ29sb3JGb3JtYXQsIG1fc2l6ZS53aWR0aCgpLCBtX3NpemUuaGVpZ2h0KCksIDAsIGNvbG9y
Rm9ybWF0LCBHcmFwaGljc0NvbnRleHQzRDo6VU5TSUdORURfQllURSk7CiAgICAgbV9jb250ZXh0
LT5mcmFtZWJ1ZmZlclRleHR1cmUyRChHcmFwaGljc0NvbnRleHQzRDo6RlJBTUVCVUZGRVIsIEdy
YXBoaWNzQ29udGV4dDNEOjpDT0xPUl9BVFRBQ0hNRU5UMCwgR3JhcGhpY3NDb250ZXh0M0Q6OlRF
WFRVUkUsIG1fY29sb3JCdWZmZXIsIDApOwogICAgIG1fY29udGV4dC0+YmluZFRleHR1cmUoR3Jh
cGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfMkQsIDApOwogICAgIGlmICghbXVsdGlzYW1wbGUoKSAm
JiAoYXR0cmlidXRlcy5zdGVuY2lsIHx8IGF0dHJpYnV0ZXMuZGVwdGgpKSB7CkBAIC0xNjYsNTcg
KzE2NCw0OCBAQCB2b2lkIERyYXdpbmdCdWZmZXI6OnJlc2V0KGNvbnN0IEludFNpemUmCiAgICAg
aWYgKG11bHRpc2FtcGxlKCkpCiAgICAgICAgIG1fY29udGV4dC0+YmluZEZyYW1lYnVmZmVyKEdy
YXBoaWNzQ29udGV4dDNEOjpGUkFNRUJVRkZFUiwgbV9tdWx0aXNhbXBsZUZCTyk7CiAKLSAgICAv
LyBJbml0aWFsaXplIHJlbmRlcmJ1ZmZlcnMgdG8gMC4KLSAgICBmbG9hdCBjbGVhckNvbG9yW10g
PSB7MCwgMCwgMCwgMH0sIGNsZWFyRGVwdGggPSAwOwotICAgIGludCBjbGVhclN0ZW5jaWwgPSAw
OwotICAgIHVuc2lnbmVkIGNoYXIgY29sb3JNYXNrW10gPSB7dHJ1ZSwgdHJ1ZSwgdHJ1ZSwgdHJ1
ZX0sIGRlcHRoTWFzayA9IHRydWU7Ci0gICAgdW5zaWduZWQgaW50IHN0ZW5jaWxNYXNrID0gMHhm
ZmZmZmZmZjsKLSAgICB1bnNpZ25lZCBjaGFyIGlzU2Npc3NvckVuYWJsZWQgPSBmYWxzZTsKLSAg
ICB1bnNpZ25lZCBjaGFyIGlzRGl0aGVyRW5hYmxlZCA9IGZhbHNlOwotICAgIHVuc2lnbmVkIGxv
bmcgY2xlYXJNYXNrID0gR3JhcGhpY3NDb250ZXh0M0Q6OkNPTE9SX0JVRkZFUl9CSVQ7Ci0gICAg
bV9jb250ZXh0LT5nZXRGbG9hdHYoR3JhcGhpY3NDb250ZXh0M0Q6OkNPTE9SX0NMRUFSX1ZBTFVF
LCBjbGVhckNvbG9yKTsKLSAgICBtX2NvbnRleHQtPmNsZWFyQ29sb3IoMCwgMCwgMCwgMCk7Ci0g
ICAgbV9jb250ZXh0LT5nZXRCb29sZWFudihHcmFwaGljc0NvbnRleHQzRDo6Q09MT1JfV1JJVEVN
QVNLLCBjb2xvck1hc2spOwotICAgIG1fY29udGV4dC0+Y29sb3JNYXNrKHRydWUsIHRydWUsIHRy
dWUsIHRydWUpOwotICAgIGlmIChhdHRyaWJ1dGVzLmRlcHRoKSB7Ci0gICAgICAgIG1fY29udGV4
dC0+Z2V0RmxvYXR2KEdyYXBoaWNzQ29udGV4dDNEOjpERVBUSF9DTEVBUl9WQUxVRSwgJmNsZWFy
RGVwdGgpOwotICAgICAgICBtX2NvbnRleHQtPmNsZWFyRGVwdGgoMSk7Ci0gICAgICAgIG1fY29u
dGV4dC0+Z2V0Qm9vbGVhbnYoR3JhcGhpY3NDb250ZXh0M0Q6OkRFUFRIX1dSSVRFTUFTSywgJmRl
cHRoTWFzayk7Ci0gICAgICAgIG1fY29udGV4dC0+ZGVwdGhNYXNrKHRydWUpOwotICAgICAgICBj
bGVhck1hc2sgfD0gR3JhcGhpY3NDb250ZXh0M0Q6OkRFUFRIX0JVRkZFUl9CSVQ7Ci0gICAgfQot
ICAgIGlmIChhdHRyaWJ1dGVzLnN0ZW5jaWwpIHsKLSAgICAgICAgbV9jb250ZXh0LT5nZXRJbnRl
Z2VydihHcmFwaGljc0NvbnRleHQzRDo6U1RFTkNJTF9DTEVBUl9WQUxVRSwgJmNsZWFyU3RlbmNp
bCk7Ci0gICAgICAgIG1fY29udGV4dC0+Y2xlYXJTdGVuY2lsKDApOwotICAgICAgICBtX2NvbnRl
eHQtPmdldEludGVnZXJ2KEdyYXBoaWNzQ29udGV4dDNEOjpTVEVOQ0lMX1dSSVRFTUFTSywgcmVp
bnRlcnByZXRfY2FzdDxpbnQqPigmc3RlbmNpbE1hc2spKTsKLSAgICAgICAgbV9jb250ZXh0LT5z
dGVuY2lsTWFza1NlcGFyYXRlKEdyYXBoaWNzQ29udGV4dDNEOjpGUk9OVCwgMHhmZmZmZmZmZik7
Ci0gICAgICAgIGNsZWFyTWFzayB8PSBHcmFwaGljc0NvbnRleHQzRDo6U1RFTkNJTF9CVUZGRVJf
QklUOwotICAgIH0KLSAgICBpc1NjaXNzb3JFbmFibGVkID0gbV9jb250ZXh0LT5pc0VuYWJsZWQo
R3JhcGhpY3NDb250ZXh0M0Q6OlNDSVNTT1JfVEVTVCk7Ci0gICAgbV9jb250ZXh0LT5kaXNhYmxl
KEdyYXBoaWNzQ29udGV4dDNEOjpTQ0lTU09SX1RFU1QpOwotICAgIGlzRGl0aGVyRW5hYmxlZCA9
IG1fY29udGV4dC0+aXNFbmFibGVkKEdyYXBoaWNzQ29udGV4dDNEOjpESVRIRVIpOwotICAgIG1f
Y29udGV4dC0+ZGlzYWJsZShHcmFwaGljc0NvbnRleHQzRDo6RElUSEVSKTsKLQotICAgIG1fY29u
dGV4dC0+Y2xlYXIoY2xlYXJNYXNrKTsKLQotICAgIG1fY29udGV4dC0+Y2xlYXJDb2xvcihjbGVh
ckNvbG9yWzBdLCBjbGVhckNvbG9yWzFdLCBjbGVhckNvbG9yWzJdLCBjbGVhckNvbG9yWzNdKTsK
LSAgICBtX2NvbnRleHQtPmNvbG9yTWFzayhjb2xvck1hc2tbMF0sIGNvbG9yTWFza1sxXSwgY29s
b3JNYXNrWzJdLCBjb2xvck1hc2tbM10pOwotICAgIGlmIChhdHRyaWJ1dGVzLmRlcHRoKSB7Ci0g
ICAgICAgIG1fY29udGV4dC0+Y2xlYXJEZXB0aChjbGVhckRlcHRoKTsKLSAgICAgICAgbV9jb250
ZXh0LT5kZXB0aE1hc2soZGVwdGhNYXNrKTsKLSAgICB9Ci0gICAgaWYgKGF0dHJpYnV0ZXMuc3Rl
bmNpbCkgewotICAgICAgICBtX2NvbnRleHQtPmNsZWFyU3RlbmNpbChjbGVhclN0ZW5jaWwpOwot
ICAgICAgICBtX2NvbnRleHQtPnN0ZW5jaWxNYXNrU2VwYXJhdGUoR3JhcGhpY3NDb250ZXh0M0Q6
OkZST05ULCBzdGVuY2lsTWFzayk7CisgICAgaWYgKCFtX2NvbnRleHQtPmdldEV4dGVuc2lvbnMo
KS0+c3VwcG9ydHMoIkdMX0NIUk9NSVVNX3Jlc291cmNlX3NhZmUiKSkgeworICAgICAgICAvLyBJ
bml0aWFsaXplIHJlbmRlcmJ1ZmZlcnMgKGRlcHRoL3N0ZW5jaWwpLgorICAgICAgICBmbG9hdCBj
bGVhckRlcHRoID0gMDsKKyAgICAgICAgaW50IGNsZWFyU3RlbmNpbCA9IDA7CisgICAgICAgIHVu
c2lnbmVkIGNoYXIgZGVwdGhNYXNrID0gdHJ1ZTsKKyAgICAgICAgdW5zaWduZWQgaW50IHN0ZW5j
aWxNYXNrID0gMHhmZmZmZmZmZjsKKyAgICAgICAgdW5zaWduZWQgY2hhciBpc1NjaXNzb3JFbmFi
bGVkID0gZmFsc2U7CisgICAgICAgIHVuc2lnbmVkIGxvbmcgY2xlYXJNYXNrID0gMDsKKyAgICAg
ICAgaWYgKGF0dHJpYnV0ZXMuZGVwdGgpIHsKKyAgICAgICAgICAgIG1fY29udGV4dC0+Z2V0Rmxv
YXR2KEdyYXBoaWNzQ29udGV4dDNEOjpERVBUSF9DTEVBUl9WQUxVRSwgJmNsZWFyRGVwdGgpOwor
ICAgICAgICAgICAgbV9jb250ZXh0LT5jbGVhckRlcHRoKDEpOworICAgICAgICAgICAgbV9jb250
ZXh0LT5nZXRCb29sZWFudihHcmFwaGljc0NvbnRleHQzRDo6REVQVEhfV1JJVEVNQVNLLCAmZGVw
dGhNYXNrKTsKKyAgICAgICAgICAgIG1fY29udGV4dC0+ZGVwdGhNYXNrKHRydWUpOworICAgICAg
ICAgICAgY2xlYXJNYXNrIHw9IEdyYXBoaWNzQ29udGV4dDNEOjpERVBUSF9CVUZGRVJfQklUOwor
ICAgICAgICB9CisgICAgICAgIGlmIChhdHRyaWJ1dGVzLnN0ZW5jaWwpIHsKKyAgICAgICAgICAg
IG1fY29udGV4dC0+Z2V0SW50ZWdlcnYoR3JhcGhpY3NDb250ZXh0M0Q6OlNURU5DSUxfQ0xFQVJf
VkFMVUUsICZjbGVhclN0ZW5jaWwpOworICAgICAgICAgICAgbV9jb250ZXh0LT5jbGVhclN0ZW5j
aWwoMCk7CisgICAgICAgICAgICBtX2NvbnRleHQtPmdldEludGVnZXJ2KEdyYXBoaWNzQ29udGV4
dDNEOjpTVEVOQ0lMX1dSSVRFTUFTSywgcmVpbnRlcnByZXRfY2FzdDxpbnQqPigmc3RlbmNpbE1h
c2spKTsKKyAgICAgICAgICAgIG1fY29udGV4dC0+c3RlbmNpbE1hc2tTZXBhcmF0ZShHcmFwaGlj
c0NvbnRleHQzRDo6RlJPTlQsIDB4ZmZmZmZmZmYpOworICAgICAgICAgICAgY2xlYXJNYXNrIHw9
IEdyYXBoaWNzQ29udGV4dDNEOjpTVEVOQ0lMX0JVRkZFUl9CSVQ7CisgICAgICAgIH0KKyAgICAg
ICAgaWYgKGNsZWFyTWFzaykgeworICAgICAgICAgICAgaXNTY2lzc29yRW5hYmxlZCA9IG1fY29u
dGV4dC0+aXNFbmFibGVkKEdyYXBoaWNzQ29udGV4dDNEOjpTQ0lTU09SX1RFU1QpOworICAgICAg
ICAgICAgbV9jb250ZXh0LT5kaXNhYmxlKEdyYXBoaWNzQ29udGV4dDNEOjpTQ0lTU09SX1RFU1Qp
OworCisgICAgICAgICAgICBtX2NvbnRleHQtPmNsZWFyKGNsZWFyTWFzayk7CisKKyAgICAgICAg
ICAgIGlmIChhdHRyaWJ1dGVzLmRlcHRoKSB7CisgICAgICAgICAgICAgICAgbV9jb250ZXh0LT5j
bGVhckRlcHRoKGNsZWFyRGVwdGgpOworICAgICAgICAgICAgICAgIG1fY29udGV4dC0+ZGVwdGhN
YXNrKGRlcHRoTWFzayk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAoYXR0cmlidXRl
cy5zdGVuY2lsKSB7CisgICAgICAgICAgICAgICAgbV9jb250ZXh0LT5jbGVhclN0ZW5jaWwoY2xl
YXJTdGVuY2lsKTsKKyAgICAgICAgICAgICAgICBtX2NvbnRleHQtPnN0ZW5jaWxNYXNrU2VwYXJh
dGUoR3JhcGhpY3NDb250ZXh0M0Q6OkZST05ULCBzdGVuY2lsTWFzayk7CisgICAgICAgICAgICB9
CisgICAgICAgICAgICBpZiAoaXNTY2lzc29yRW5hYmxlZCkKKyAgICAgICAgICAgICAgICBtX2Nv
bnRleHQtPmVuYWJsZShHcmFwaGljc0NvbnRleHQzRDo6U0NJU1NPUl9URVNUKTsKKyAgICAgICAg
ICAgIGVsc2UKKyAgICAgICAgICAgICAgICBtX2NvbnRleHQtPmRpc2FibGUoR3JhcGhpY3NDb250
ZXh0M0Q6OlNDSVNTT1JfVEVTVCk7CisgICAgICAgIH0KICAgICB9Ci0gICAgaWYgKGlzU2Npc3Nv
ckVuYWJsZWQpCi0gICAgICAgIG1fY29udGV4dC0+ZW5hYmxlKEdyYXBoaWNzQ29udGV4dDNEOjpT
Q0lTU09SX1RFU1QpOwotICAgIGVsc2UKLSAgICAgICAgbV9jb250ZXh0LT5kaXNhYmxlKEdyYXBo
aWNzQ29udGV4dDNEOjpTQ0lTU09SX1RFU1QpOwotICAgIGlmIChpc0RpdGhlckVuYWJsZWQpCi0g
ICAgICAgIG1fY29udGV4dC0+ZW5hYmxlKEdyYXBoaWNzQ29udGV4dDNEOjpESVRIRVIpOwotICAg
IGVsc2UKLSAgICAgICAgbV9jb250ZXh0LT5kaXNhYmxlKEdyYXBoaWNzQ29udGV4dDNEOjpESVRI
RVIpOwogCiAgICAgbV9jb250ZXh0LT5mbHVzaCgpOwogICAgIApJbmRleDogV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9ncHUvVGV4dHVyZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9ncHUvVGV4dHVyZS5jcHAJKHJldmlzaW9uIDczNDA5KQorKysgV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9ncHUvVGV4dHVyZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEw
NiwxNSArMTA2LDE1IEBAIFBhc3NSZWZQdHI8VGV4dHVyZT4gVGV4dHVyZTo6Y3JlYXRlKEdyYXAK
IAogICAgICAgICBJbnRSZWN0IHRpbGVCb3VuZHNXaXRoQm9yZGVyID0gdGlsaW5nLnRpbGVCb3Vu
ZHNXaXRoQm9yZGVyKGkpOwogCi0gICAgdW5zaWduZWQgaW50IGdsRm9ybWF0ID0gMDsKLSAgICB1
bnNpZ25lZCBpbnQgZ2xUeXBlID0gMDsKLSAgICBib29sIHN3aXp6bGU7Ci0gICAgY29udmVydEZv
cm1hdChjb250ZXh0LCBmb3JtYXQsICZnbEZvcm1hdCwgJmdsVHlwZSwgJnN3aXp6bGUpOwotICAg
IGNvbnRleHQtPmJpbmRUZXh0dXJlKEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFXzJELCB0ZXh0
dXJlSWQpOwotICAgIGNvbnRleHQtPnRleEltYWdlMkQoR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRV
UkVfMkQsIDAsIGdsRm9ybWF0LAotICAgICAgICAgICAgdGlsZUJvdW5kc1dpdGhCb3JkZXIud2lk
dGgoKSwKLSAgICAgICAgICAgIHRpbGVCb3VuZHNXaXRoQm9yZGVyLmhlaWdodCgpLAotICAgICAg
ICAgICAgMCwgZ2xGb3JtYXQsIGdsVHlwZSwgMCk7CisgICAgICAgIHVuc2lnbmVkIGludCBnbEZv
cm1hdCA9IDA7CisgICAgICAgIHVuc2lnbmVkIGludCBnbFR5cGUgPSAwOworICAgICAgICBib29s
IHN3aXp6bGU7CisgICAgICAgIGNvbnZlcnRGb3JtYXQoY29udGV4dCwgZm9ybWF0LCAmZ2xGb3Jt
YXQsICZnbFR5cGUsICZzd2l6emxlKTsKKyAgICAgICAgY29udGV4dC0+YmluZFRleHR1cmUoR3Jh
cGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfMkQsIHRleHR1cmVJZCk7CisgICAgICAgIGNvbnRleHQt
PnRleEltYWdlMkRSZXNvdXJjZVNhZmUoR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfMkQsIDAs
IGdsRm9ybWF0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRpbGVC
b3VuZHNXaXRoQm9yZGVyLndpZHRoKCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgdGlsZUJvdW5kc1dpdGhCb3JkZXIuaGVpZ2h0KCksCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgMCwgZ2xGb3JtYXQsIGdsVHlwZSk7CiAgICAgfQogICAg
IHJldHVybiBhZG9wdFJlZihuZXcgVGV4dHVyZShjb250ZXh0LCB0ZXh0dXJlSWRzLmxlYWtQdHIo
KSwgZm9ybWF0LCB3aWR0aCwgaGVpZ2h0LCBtYXhUZXh0dXJlU2l6ZSkpOwogfQpJbmRleDogV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvR3JhcGhpY3NDb250ZXh0M0RPcGVuR0wuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0dyYXBoaWNz
Q29udGV4dDNET3BlbkdMLmNwcAkocmV2aXNpb24gNzMzMTkpCisrKyBXZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL29wZW5nbC9HcmFwaGljc0NvbnRleHQzRE9wZW5HTC5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTEzMjQsOCArMTMyNCwxMSBAQCBsb25nIEdyYXBoaWNzQ29udGV4dDNEOjpnZXRWZXJ0
ZXhBdHRyaWJPCiAKIGludCBHcmFwaGljc0NvbnRleHQzRDo6dGV4SW1hZ2UyRCh1bnNpZ25lZCB0
YXJnZXQsIHVuc2lnbmVkIGxldmVsLCB1bnNpZ25lZCBpbnRlcm5hbGZvcm1hdCwgdW5zaWduZWQg
d2lkdGgsIHVuc2lnbmVkIGhlaWdodCwgdW5zaWduZWQgYm9yZGVyLCB1bnNpZ25lZCBmb3JtYXQs
IHVuc2lnbmVkIHR5cGUsIHZvaWQqIHBpeGVscykKIHsKKyAgICBpZiAod2lkdGggJiYgaGVpZ2h0
ICYmICFwaXhlbHMpIHsKKyAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoSU5WQUxJRF9WQUxVRSk7
CisgICAgICAgIHJldHVybiAxOworICAgIH0KICAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKLQog
ICAgIDo6Z2xUZXhJbWFnZTJEKHRhcmdldCwgbGV2ZWwsIGludGVybmFsZm9ybWF0LCB3aWR0aCwg
aGVpZ2h0LCBib3JkZXIsIGZvcm1hdCwgdHlwZSwgcGl4ZWxzKTsKICAgICByZXR1cm4gMDsKIH0K
SW5kZXg6IFdlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0L2No
cm9taXVtL0NoYW5nZUxvZwkocmV2aXNpb24gNzM0MjApCisrKyBXZWJLaXQvY2hyb21pdW0vQ2hh
bmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTMgQEAKKzIwMTAtMTItMDYgIFpoZW55
YW8gTW8gIDx6bW9AZ29vZ2xlLmNvbT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9P
UFMhKS4KKworICAgICAgICBXZWJHTFJlbmRlcmluZ0NvbnRleHQgbmVlZHMgdG8gemVybyB0ZXh0
dXJlcyBhbmQgcmVuZGVyYnVmZmVycworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9NDkzNTUKKworICAgICAgICAqIHNyYy9XZWJHcmFwaGljc0NvbnRleHQz
RERlZmF1bHRJbXBsLmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2ViR3JhcGhpY3NDb250ZXh0M0RE
ZWZhdWx0SW1wbDo6dGV4SW1hZ2UyRCk6IERvbid0IGRlYWwgd2l0aCB0ZXh0dXJlIGluaXRpYWxp
emF0aW9uIGF0IHRoaXMgbGV2ZWw7IGdlbmVyYXRlIGFuIElOVkFMSURfVkFMVUUgaWYgcGl4ZWxz
PT1udWxsIGlzIHBhc3NlZCBpbi4KKwogMjAxMC0xMi0wNiAgTmF0ZSBDaGFwaW4gIDxqYXBoZXRA
Y2hyb21pdW0ub3JnPgogCiAgICAgICAgIFJldmlld2VkIGJ5IEFkYW0gQmFydGguCkluZGV4OiBX
ZWJLaXQvY2hyb21pdW0vc3JjL1dlYkdyYXBoaWNzQ29udGV4dDNERGVmYXVsdEltcGwuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFdlYktpdC9jaHJvbWl1bS9zcmMvV2ViR3JhcGhpY3NDb250ZXh0M0REZWZh
dWx0SW1wbC5jcHAJKHJldmlzaW9uIDczMzE5KQorKysgV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJH
cmFwaGljc0NvbnRleHQzRERlZmF1bHRJbXBsLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTI2MCw2
OCArMTI2MCwxMyBAQCBERUxFR0FURV9UT19HTF8yKHNhbXBsZUNvdmVyYWdlLCBTYW1wbGVDCiAK
IERFTEVHQVRFX1RPX0dMXzQoc2Npc3NvciwgU2Npc3NvciwgbG9uZywgbG9uZywgdW5zaWduZWQg
bG9uZywgdW5zaWduZWQgbG9uZykKIAotdW5zaWduZWQgYnl0ZXNQZXJDb21wb25lbnQodW5zaWdu
ZWQgdHlwZSkKLXsKLSAgICBzd2l0Y2ggKHR5cGUpIHsKLSAgICBjYXNlIEdMX0JZVEU6Ci0gICAg
Y2FzZSBHTF9VTlNJR05FRF9CWVRFOgotICAgICAgICByZXR1cm4gMTsKLSAgICBjYXNlIEdMX1NI
T1JUOgotICAgIGNhc2UgR0xfVU5TSUdORURfU0hPUlQ6Ci0gICAgY2FzZSBHTF9VTlNJR05FRF9T
SE9SVF81XzZfNToKLSAgICBjYXNlIEdMX1VOU0lHTkVEX1NIT1JUXzRfNF80XzQ6Ci0gICAgY2Fz
ZSBHTF9VTlNJR05FRF9TSE9SVF81XzVfNV8xOgotICAgICAgICByZXR1cm4gMjsKLSAgICBjYXNl
IEdMX0ZMT0FUOgotICAgICAgICByZXR1cm4gNDsKLSAgICBkZWZhdWx0OgotICAgICAgICByZXR1
cm4gNDsKLSAgICB9Ci19Ci0KLXVuc2lnbmVkIGNvbXBvbmVudHNQZXJQaXhlbCh1bnNpZ25lZCBm
b3JtYXQsIHVuc2lnbmVkIHR5cGUpCi17Ci0gICAgc3dpdGNoICh0eXBlKSB7Ci0gICAgY2FzZSBH
TF9VTlNJR05FRF9TSE9SVF81XzZfNToKLSAgICBjYXNlIEdMX1VOU0lHTkVEX1NIT1JUXzRfNF80
XzQ6Ci0gICAgY2FzZSBHTF9VTlNJR05FRF9TSE9SVF81XzVfNV8xOgotICAgICAgICByZXR1cm4g
MTsKLSAgICBkZWZhdWx0OgotICAgICAgICBicmVhazsKLSAgICB9Ci0gICAgc3dpdGNoIChmb3Jt
YXQpIHsKLSAgICBjYXNlIEdMX0xVTUlOQU5DRToKLSAgICAgICAgcmV0dXJuIDE7Ci0gICAgY2Fz
ZSBHTF9MVU1JTkFOQ0VfQUxQSEE6Ci0gICAgICAgIHJldHVybiAyOwotICAgIGNhc2UgR0xfUkdC
OgotICAgICAgICByZXR1cm4gMzsKLSAgICBjYXNlIEdMX1JHQkE6Ci0gICAgY2FzZSBHTF9CR1JB
X0VYVDoKLSAgICAgICAgcmV0dXJuIDQ7Ci0gICAgZGVmYXVsdDoKLSAgICAgICAgcmV0dXJuIDQ7
Ci0gICAgfQotfQotCi0vLyBOLkIuOiAgVGhpcyBjb2RlIGRvZXMgbm90IHByb3RlY3QgYWdhaW5z
dCBpbnRlZ2VyIG92ZXJmbG93IChhcyB0aGUgY29tbWFuZAotLy8gYnVmZmVyIGltcGxlbWVudGF0
aW9uIGRvZXMpLCBzbyBpdCBzaG91bGQgbm90IGJlIGNvbnNpZGVyZWQgcm9idXN0IGVub3VnaAot
Ly8gZm9yIHVzZSBpbiB0aGUgYnJvd3Nlci4gIFNpbmNlIHRoaXMgaW1wbGVtZW50YXRpb24gaXMg
b25seSB1c2VkIGZvciBsYXlvdXQKLS8vIHRlc3RzLCB0aGlzIHNob3VsZCBiZSBvayBmb3Igbm93
Lgotc2l6ZV90IGltYWdlU2l6ZUluQnl0ZXModW5zaWduZWQgd2lkdGgsIHVuc2lnbmVkIGhlaWdo
dCwgdW5zaWduZWQgZm9ybWF0LCB1bnNpZ25lZCB0eXBlKQotewotICAgIHJldHVybiB3aWR0aCAq
IGhlaWdodCAqIGJ5dGVzUGVyQ29tcG9uZW50KHR5cGUpICogY29tcG9uZW50c1BlclBpeGVsKGZv
cm1hdCwgdHlwZSk7Ci19Ci0KIHZvaWQgV2ViR3JhcGhpY3NDb250ZXh0M0REZWZhdWx0SW1wbDo6
dGV4SW1hZ2UyRCh1bnNpZ25lZCB0YXJnZXQsIHVuc2lnbmVkIGxldmVsLCB1bnNpZ25lZCBpbnRl
cm5hbEZvcm1hdCwgdW5zaWduZWQgd2lkdGgsIHVuc2lnbmVkIGhlaWdodCwgdW5zaWduZWQgYm9y
ZGVyLCB1bnNpZ25lZCBmb3JtYXQsIHVuc2lnbmVkIHR5cGUsIGNvbnN0IHZvaWQqIHBpeGVscykK
IHsKLSAgICBPd25BcnJheVB0cjx1aW50OD4gemVybzsKLSAgICBpZiAoIXBpeGVscykgewotICAg
ICAgICBzaXplX3Qgc2l6ZSA9IGltYWdlU2l6ZUluQnl0ZXMod2lkdGgsIGhlaWdodCwgZm9ybWF0
LCB0eXBlKTsKLSAgICAgICAgemVyby5zZXQobmV3IHVpbnQ4W3NpemVdKTsKLSAgICAgICAgbWVt
c2V0KHplcm8uZ2V0KCksIDAsIHNpemUpOwotICAgICAgICBwaXhlbHMgPSB6ZXJvLmdldCgpOwor
ICAgIGlmICh3aWR0aCAmJiBoZWlnaHQgJiYgIXBpeGVscykgeworICAgICAgICBzeW50aGVzaXpl
R0xFcnJvcihHTF9JTlZBTElEX1ZBTFVFKTsKKyAgICAgICAgcmV0dXJuOwogICAgIH0KKyAgICBt
YWtlQ29udGV4dEN1cnJlbnQoKTsKICAgICBnbFRleEltYWdlMkQodGFyZ2V0LCBsZXZlbCwgaW50
ZXJuYWxGb3JtYXQsIHdpZHRoLCBoZWlnaHQsIGJvcmRlciwgZm9ybWF0LCB0eXBlLCBwaXhlbHMp
OwogfQogCkluZGV4OiBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0
VGVzdHMvQ2hhbmdlTG9nCShyZXZpc2lvbiA3MzQyMCkKKysrIExheW91dFRlc3RzL0NoYW5nZUxv
Zwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDEzIEBACisyMDEwLTEyLTA2ICBaaGVueWFvIE1v
ICA8em1vQGdvb2dsZS5jb20+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISku
CisKKyAgICAgICAgV2ViR0xSZW5kZXJpbmdDb250ZXh0IG5lZWRzIHRvIHplcm8gdGV4dHVyZXMg
YW5kIHJlbmRlcmJ1ZmZlcnMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTQ5MzU1CisKKyAgICAgICAgKiBmYXN0L2NhbnZhcy93ZWJnbC91bmluaXRpYWxp
emVkLXRlc3QtZXhwZWN0ZWQudHh0OiBBZGRlZC4KKyAgICAgICAgKiBmYXN0L2NhbnZhcy93ZWJn
bC91bmluaXRpYWxpemVkLXRlc3QuaHRtbDogQWRkZWQuCisKIDIwMTAtMTItMDYgIFZpY3RvciBX
YW5nICA8dmljdG9yd0BjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgVW5yZXZpZXdlZC4KSW5kZXg6
IExheW91dFRlc3RzL2Zhc3QvY2FudmFzL3dlYmdsL3VuaW5pdGlhbGl6ZWQtdGVzdC1leHBlY3Rl
ZC50eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvZmFzdC9jYW52YXMvd2ViZ2wvdW5pbml0
aWFsaXplZC10ZXN0LWV4cGVjdGVkLnR4dAkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2Zh
c3QvY2FudmFzL3dlYmdsL3VuaW5pdGlhbGl6ZWQtdGVzdC1leHBlY3RlZC50eHQJKHJldmlzaW9u
IDApCkBAIC0wLDAgKzEsMTMgQEAKK1Rlc3RzIHRvIGNoZWNrIHVzZXIgY29kZSBjYW5ub3QgYWNj
ZXNzIHVuaW5pdGlhbGl6ZWQgZGF0YSBmcm9tIEdMIHJlc291cmNlcy4KKworT24gc3VjY2Vzcywg
eW91IHdpbGwgc2VlIGEgc2VyaWVzIG9mICJQQVNTIiBtZXNzYWdlcywgZm9sbG93ZWQgYnkgIlRF
U1QgQ09NUExFVEUiLgorCitQQVNTIENvbnRleHQgY3JlYXRlZC4KK1JlYWRpbmcgYW4gdW5pbml0
aWFsaXplZCB0ZXh0dXJlIHNob3VsZCBzdWNjZWVkIHdpdGggYWxsIGJ5dGVzIHNldCB0byAwLgor
UEFTUyBBbGwgZGF0YSBpbml0aWFsaXplZAorUEFTUyBnZXRFcnJvciB3YXMgZXhwZWN0ZWQgdmFs
dWU6IE5PX0VSUk9SIDogCisKK1BBU1Mgc3VjY2Vzc2Z1bGx5UGFyc2VkIGlzIHRydWUKKworVEVT
VCBDT01QTEVURQorCkluZGV4OiBMYXlvdXRUZXN0cy9mYXN0L2NhbnZhcy93ZWJnbC91bmluaXRp
YWxpemVkLXRlc3QuaHRtbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9mYXN0L2NhbnZhcy93
ZWJnbC91bmluaXRpYWxpemVkLXRlc3QuaHRtbAkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3Rz
L2Zhc3QvY2FudmFzL3dlYmdsL3VuaW5pdGlhbGl6ZWQtdGVzdC5odG1sCShyZXZpc2lvbiAwKQpA
QCAtMCwwICsxLDkxIEBACis8IWRvY3R5cGUgaHRtbD4KKzxodG1sPgorPGhlYWQ+Cis8bWV0YSBo
dHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD11dGYt
OCI+Cis8dGl0bGU+V2ViR0wgVW5pbml0aWFsaXplZCBHTCBSZXNvdXJjZXMgVGVzdHM8L3RpdGxl
PgorPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSIuLi8uLi9qcy9yZXNvdXJjZXMvanMtdGVz
dC1zdHlsZS5jc3MiLz4KKzxzY3JpcHQgc3JjPSIuLi8uLi9qcy9yZXNvdXJjZXMvanMtdGVzdC1w
cmUuanMiPjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9InJlc291cmNlcy93ZWJnbC10ZXN0LmpzIj48
L3NjcmlwdD4KKzwvaGVhZD4KKzxib2R5PgorPGRpdiBpZD0iZGVzY3JpcHRpb24iPjwvZGl2Pgor
PGRpdiBpZD0iY29uc29sZSI+PC9kaXY+Cis8Y2FudmFzIGlkPSJjYW52YXMiIHdpZHRoPSIyIiBo
ZWlnaHQ9IjIiPiA8L2NhbnZhcz4KKzxzY3JpcHQ+CitkZXNjcmlwdGlvbigiVGVzdHMgdG8gY2hl
Y2sgdXNlciBjb2RlIGNhbm5vdCBhY2Nlc3MgdW5pbml0aWFsaXplZCBkYXRhIGZyb20gR0wgcmVz
b3VyY2VzLiIpOworCit2YXIgY2FudmFzID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImNhbnZh
cyIpOwordmFyIGdsID0gY3JlYXRlM0RDb250ZXh0KGNhbnZhcyk7CitpZiAoIWdsKQorICB0ZXN0
RmFpbGVkKCJDb250ZXh0IGNyZWF0ZWQuIik7CitlbHNlCisgIHRlc3RQYXNzZWQoIkNvbnRleHQg
Y3JlYXRlZC4iKTsKKworZGVidWcoIlJlYWRpbmcgYW4gdW5pbml0aWFsaXplZCB0ZXh0dXJlIHNo
b3VsZCBzdWNjZWVkIHdpdGggYWxsIGJ5dGVzIHNldCB0byAwLiIpOworCit2YXIgd2lkdGggPSA1
MTI7Cit2YXIgaGVpZ2h0ID0gNTEyOwordmFyIGJwcCA9IDQ7Cit2YXIgZXhwZWN0ZWREYXRhTGVu
Z3RoID0gd2lkdGgqaGVpZ2h0KmJwcDsKKwordmFyIHRleCA9IGdsLmNyZWF0ZVRleHR1cmUoKTsK
K2dsLmJpbmRUZXh0dXJlKGdsLlRFWFRVUkVfMkQsIHRleCk7CitnbC50ZXhJbWFnZTJEKGdsLlRF
WFRVUkVfMkQsIDAsIGdsLlJHQkEsIHdpZHRoLCBoZWlnaHQsIDAsIGdsLlJHQkEsIGdsLlVOU0lH
TkVEX0JZVEUsIG51bGwpOworCisvLyB0aGlzIGNhbiBiZSBxdWl0ZSB1bmRldGVybWluaXN0aWMg
c28gdG8gaW1wcm92ZSBvZGRzIG9mIHNlZWluZyB1bmluaXRpYWxpemVkIGRhdGEgd3JpdGUgYml0
cworLy8gaW50byB0ZXggdGhlbiBkZWxldGUgdGV4dHVyZSB0aGVuIHJlLWNyZWF0ZSBvbmUgd2l0
aCBzYW1lIGNoYXJhY3RlcmlzdGljcyAoZHJpdmVyIHdpbGwgbGlrZWx5IHJldXNlIG1lbSkKKy8v
IHdpdGggdGhpcyB0cmljayBvbiByNTkwNDYgV2ViS2l0L09TWCBJIGdldCBGQUlMIDEwMCUgb2Yg
dGhlIHRpbWUgaW5zdGVhZCBvZiB+MTUlIG9mIHRoZSB0aW1lLgorCit2YXIgYmFkRGF0YSA9IG5l
dyBVaW50OEFycmF5KGV4cGVjdGVkRGF0YUxlbmd0aCk7Citmb3IgKHZhciBpID0gMDsgaSA8IGJh
ZERhdGEubGVuZ3RoOyArK2kpCisgICAgYmFkRGF0YVtpXSA9IGkgJSAyNTU7CisKK2dsLnRleFN1
YkltYWdlMkQoZ2wuVEVYVFVSRV8yRCwgMCwgMCwgMCwgd2lkdGgsIGhlaWdodCwgZ2wuUkdCQSwg
Z2wuVU5TSUdORURfQllURSwgYmFkRGF0YSk7CitnbC5maW5pc2goKTsgLy8gbWFrZSBzdXJlIGl0
IGhhcyBiZWVuIHVwbG9hZGVkCisKK2dsLmRlbGV0ZVRleHR1cmUodGV4KTsKK2dsLmZpbmlzaCgp
OyAvLyBtYWtlIHN1cmUgaXQgaGFzIGJlZW4gZGVsZXRlZAorCit2YXIgdGV4ID0gZ2wuY3JlYXRl
VGV4dHVyZSgpOworZ2wuYmluZFRleHR1cmUoZ2wuVEVYVFVSRV8yRCwgdGV4KTsKK2dsLnRleElt
YWdlMkQoZ2wuVEVYVFVSRV8yRCwgMCwgZ2wuUkdCQSwgd2lkdGgsIGhlaWdodCwgMCwgZ2wuUkdC
QSwgZ2wuVU5TSUdORURfQllURSwgbnVsbCk7CisKK3ZhciBmYiA9IGdsLmNyZWF0ZUZyYW1lYnVm
ZmVyKCk7CitnbC5iaW5kRnJhbWVidWZmZXIoZ2wuRlJBTUVCVUZGRVIsIGZiKTsKK2dsLmZyYW1l
YnVmZmVyVGV4dHVyZTJEKGdsLkZSQU1FQlVGRkVSLCBnbC5DT0xPUl9BVFRBQ0hNRU5UMCwgZ2wu
VEVYVFVSRV8yRCwgdGV4LCAwKTsKKworZGF0YSA9IG5ldyBVaW50OEFycmF5KHdpZHRoICogaGVp
Z2h0ICogNCk7CitnbC5yZWFkUGl4ZWxzKDAsIDAsIHdpZHRoLCBoZWlnaHQsIGdsLlJHQkEsIGds
LlVOU0lHTkVEX0JZVEUsIGRhdGEpOworCitpZiAoZGF0YS5sZW5ndGggIT0gZXhwZWN0ZWREYXRh
TGVuZ3RoKSB7CisgICAgdGVzdEZhaWxlZCgiZXhwZWN0ZWQgZGF0YSBsZW5ndGggIiArIGV4cGVj
dGVkRGF0YUxlbmd0aCArICIgYnV0IGdvdCAiICsgZGF0YS5sZW5ndGggKyAiIGluc3RlYWQuIik7
Cit9IGVsc2UgeworICAgIHZhciBrID0gMDsKKyAgICBmb3IgKHZhciBpID0gMDsgaSA8IGRhdGEu
bGVuZ3RoOyArK2kpIHsKKyAgICAgICAgaWYgKGRhdGFbaV0gIT0gMCkgeworICAgICAgICAgICAg
aysrOworICAgICAgICB9CisgICAgfQorCisgICAgaWYgKGspIHsKKyAgICAgICAgdGVzdEZhaWxl
ZCgiRm91bmQgIiArIGsgKyAiIG5vbi16ZXJvIGJ5dGVzIik7CisgICAgfSBlbHNlIHsKKyAgICAg
ICAgdGVzdFBhc3NlZCgiQWxsIGRhdGEgaW5pdGlhbGl6ZWQiKTsKKyAgICB9Cit9CisKK2dsRXJy
b3JTaG91bGRCZShnbCwgZ2wuTk9fRVJST1IpOworCisvL1RPRE86IHVuaW5pdGlhbGl6ZWQgdmVy
dGV4IGFycmF5IGJ1ZmZlcgorLy9UT0RPOiB1bmluaXRpYWxpemVkIHZlcnRleCBlbGVtZW50cyBi
dWZmZXIKKy8vVE9ETzogdW5pbml0aWFsaXplZCBmcmFtZWJ1ZmZlcj8gKGltcGxlbWVudGF0aW9u
cyB3b3VsZCBuZWVkIHRvIGRvIGEgR0wgY2xlYXIgYXQgZmlyc3QgYmluZGluZz8pCisvL1RPRE86
IHVuaW5pdGlhbGl6ZWQgcmVuZGVyYnVmZmVyPyAoaW1wbGVtZW50YXRpb25zIHdvdWxkIG5lZWQg
dG8gZG8gYSBHTCBjbGVhciBhdCBmaXJzdCBiaW5kaW5nPykKKy8vVE9ETzogdW5pbml0aWFsaXpl
ZCB1bmlmb3JtIGFycmF5cz8KKworZGVidWcoIiIpOworc3VjY2Vzc2Z1bGx5UGFyc2VkID0gdHJ1
ZTsKKzwvc2NyaXB0PgorPHNjcmlwdCBzcmM9Ii4uLy4uL2pzL3Jlc291cmNlcy9qcy10ZXN0LXBv
c3QuanMiPjwvc2NyaXB0PgorPC9ib2R5PgorPC9odG1sPgorCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>76130</attachid>
            <date>2010-12-09 16:09:24 -0800</date>
            <delta_ts>2010-12-09 18:07:24 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-49355-20101209160923.patch</filename>
            <type>text/plain</type>
            <size>35204</size>
            <attacher name="Zhenyao Mo">zmo</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA3MzYzNCkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsNDQgQEAKKzIwMTAtMTItMDYgIFpoZW55YW8gTW8gIDx6bW9AZ29vZ2xlLmNvbT4K
KworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBXZWJHTFJl
bmRlcmluZ0NvbnRleHQgbmVlZHMgdG8gemVybyB0ZXh0dXJlcyBhbmQgcmVuZGVyYnVmZmVycwor
ICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NDkzNTUKKwor
ICAgICAgICBUZXN0OiBmYXN0L2NhbnZhcy93ZWJnbC91bmluaXRpYWxpemVkLXRlc3QuaHRtbAor
CisgICAgICAgICogaHRtbC9jYW52YXMvV2ViR0xGcmFtZWJ1ZmZlci5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpXZWJHTEZyYW1lYnVmZmVyOjpvbkFjY2Vzcyk6IFVzZSBhIHBhcmFtZXRlciB0byBk
ZWNpZGUgaWYgcmVuZGVyYnVmZmVyIGluaXRpYWxpemF0aW9uIGlzIG5lZWRlZC4KKyAgICAgICAg
KFdlYkNvcmU6OldlYkdMRnJhbWVidWZmZXI6OmluaXRpYWxpemVSZW5kZXJidWZmZXJzKTogRG9u
J3QgcmV0dXJuIGZhbHNlIGlmIGNvbG9yIGJ1ZmZlciBkb2Vzbid0IGV4aXN0LgorICAgICAgICAq
IGh0bWwvY2FudmFzL1dlYkdMRnJhbWVidWZmZXIuaDogTW9kaWZ5IG9uQWNjZXNzIGZ1bmN0aW9u
IHNpZ25hdHVyZS4KKyAgICAgICAgKiBodG1sL2NhbnZhcy9XZWJHTFJlbmRlcmluZ0NvbnRleHQu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0OjpjbGVhcik6IENh
bGwgb25BY2Nlc3Mgd2l0aCBhbiBhZGRlZCBwYXJhbWV0ZXIuCisgICAgICAgIChXZWJDb3JlOjpX
ZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmNvcHlUZXhJbWFnZTJEKTogRGl0dG8uCisgICAgICAgIChX
ZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmNvcHlUZXhTdWJJbWFnZTJEKTogRGl0dG8u
CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmRyYXdBcnJheXMpOiBE
aXR0by4KKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dDo6ZHJhd0VsZW1l
bnRzKTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnJl
YWRQaXhlbHMpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4
dDo6dGV4SW1hZ2UyREJhc2UpOiBDcmVhdGUgYnVmZmVyIGRhdGEgb2YgMHMgaWYgaW5wdXQgaXMg
bnVsbCB0byBpbml0aWFsaXplIHRleHR1cmVzLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNz
L0dyYXBoaWNzQ29udGV4dDNELmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4
dDNEOjp0ZXhJbWFnZTJEUmVzb3VyY2VTYWZlKTogSGVscGVyIGZ1bmN0aW9uIHRoYXQgaW5pdGlh
bGl6ZSBhbGwgcGl4ZWxzIHRvIDAuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhp
Y3NDb250ZXh0M0QuaDoKKyAgICAgICAgKiBQbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9DYW52
YXMyRExheWVyQ2hyb21pdW0uY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q2FudmFzMkRMYXllckNo
cm9taXVtOjp1cGRhdGVDb250ZW50cyk6IENyZWF0ZSBidWZmZXIgZGF0YSBvZiAwcyBpZiBpbnB1
dCBpcyBudWxsIHRvIGluaXRpYWxpemUgdGV4dHVyZXMuCisgICAgICAgICogcGxhdGZvcm0vZ3Jh
cGhpY3MvY2hyb21pdW0vRHJhd2luZ0J1ZmZlckNocm9taXVtLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OmdlbmVyYXRlQ29sb3JUZXh0dXJlKTogRGl0dG8uCisgICAgICAgICogcGxhdGZvcm0vZ3Jh
cGhpY3MvY2hyb21pdW0vTGF5ZXJSZW5kZXJlckNocm9taXVtLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OkxheWVyUmVuZGVyZXJDaHJvbWl1bTo6cHJlcGFyZVRvRHJhd0xheWVycyk6IERpdHRvLgor
ICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1JlbmRlclN1cmZhY2VDaHJvbWl1
bS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJTdXJmYWNlQ2hyb21pdW06OnByZXBhcmVD
b250ZW50c1RleHR1cmUpOiBEaXR0by4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJv
bWl1bS9WaWRlb0xheWVyQ2hyb21pdW0uY3BwOgorICAgICAgICAoV2ViQ29yZTo6VmlkZW9MYXll
ckNocm9taXVtOjphbGxvY2F0ZVRleHR1cmUpOiBEaXR0by4KKyAgICAgICAgKiBwbGF0Zm9ybS9n
cmFwaGljcy9ncHUvRHJhd2luZ0J1ZmZlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpEcmF3aW5n
QnVmZmVyOjpyZXNldCk6IENyZWF0ZSBidWZmZXIgZGF0YSBvZiAwcyBpZiBpbnB1dCBpcyBudWxs
IHRvIGluaXRpYWxpemUgdGV4dHVyZXM7IGFsc28sIG9ubHkgY2xlYW4gdGhlIGRlcHRoL3N0ZW5j
aWwgYnVmZmVyIGxhdGVyLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2dwdS9UZXh0dXJl
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlRleHR1cmU6OmNyZWF0ZSk6IENyZWF0ZSBidWZmZXIg
ZGF0YSBvZiAwcyBpZiBpbnB1dCBpcyBudWxsIHRvIGluaXRpYWxpemUgdGV4dHVyZXMuCisgICAg
ICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0dyYXBoaWNzQ29udGV4dDNET3BlbkdMLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjp0ZXhJbWFnZTJEKTogR2Vu
ZXJhdGUgYW4gSU5WQUxJRF9WQUxVRSBpZiBwaXhlbHM9PW51bGwgaXMgcGFzc2VkLgorCiAyMDEw
LTEyLTA5ICBZYWVsIEFoYXJvbiAgPHlhZWwuYWhhcm9uQG5va2lhLmNvbT4KIAogICAgICAgICBS
ZXZpZXdlZCBieSBBbnRvbmlvIEdvbWVzLgpJbmRleDogV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJH
TEZyYW1lYnVmZmVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdM
RnJhbWVidWZmZXIuY3BwCShyZXZpc2lvbiA3MzMxOSkKKysrIFdlYkNvcmUvaHRtbC9jYW52YXMv
V2ViR0xGcmFtZWJ1ZmZlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE4MSwxMSArMTgxLDEzIEBA
IGJvb2wgV2ViR0xGcmFtZWJ1ZmZlcjo6aXNJbmNvbXBsZXRlKGJvb2wKICAgICByZXR1cm4gZmFs
c2U7CiB9CiAKLWJvb2wgV2ViR0xGcmFtZWJ1ZmZlcjo6b25BY2Nlc3MoKQorYm9vbCBXZWJHTEZy
YW1lYnVmZmVyOjpvbkFjY2Vzcyhib29sIG5lZWRUb0luaXRpYWxpemVSZW5kZXJidWZmZXJzKQog
ewogICAgIGlmIChpc0luY29tcGxldGUodHJ1ZSkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKLSAg
ICByZXR1cm4gaW5pdGlhbGl6ZVJlbmRlcmJ1ZmZlcnMoKTsKKyAgICBpZiAobmVlZFRvSW5pdGlh
bGl6ZVJlbmRlcmJ1ZmZlcnMpCisgICAgICAgIHJldHVybiBpbml0aWFsaXplUmVuZGVyYnVmZmVy
cygpOworICAgIHJldHVybiB0cnVlOwogfQogCiB2b2lkIFdlYkdMRnJhbWVidWZmZXI6OmRlbGV0
ZU9iamVjdEltcGwoUGxhdGZvcm0zRE9iamVjdCBvYmplY3QpCkBAIC0yMDEsOCArMjAzLDYgQEAg
dm9pZCBXZWJHTEZyYW1lYnVmZmVyOjpkZWxldGVPYmplY3RJbXBsKAogYm9vbCBXZWJHTEZyYW1l
YnVmZmVyOjppbml0aWFsaXplUmVuZGVyYnVmZmVycygpCiB7CiAgICAgQVNTRVJUKG9iamVjdCgp
KTsKLSAgICBpZiAoIWlzQ29sb3JBdHRhY2hlZCgpKQotICAgICAgICByZXR1cm4gZmFsc2U7CiAg
ICAgYm9vbCBpbml0Q29sb3IgPSBmYWxzZSwgaW5pdERlcHRoID0gZmFsc2UsIGluaXRTdGVuY2ls
ID0gZmFsc2U7CiAgICAgdW5zaWduZWQgbG9uZyBtYXNrID0gMDsKICAgICBpZiAoaXNVbmluaXRp
YWxpemVkKG1fY29sb3JBdHRhY2htZW50LmdldCgpKSkgewpJbmRleDogV2ViQ29yZS9odG1sL2Nh
bnZhcy9XZWJHTEZyYW1lYnVmZmVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9odG1sL2NhbnZh
cy9XZWJHTEZyYW1lYnVmZmVyLmgJKHJldmlzaW9uIDczMzE5KQorKysgV2ViQ29yZS9odG1sL2Nh
bnZhcy9XZWJHTEZyYW1lYnVmZmVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTUwLDggKzUwLDkgQEAg
cHVibGljOgogICAgIC8vIHJlYWRQaXhlbHMsIGNvcHlUZXhJbWFnZTJELCBjb3B5VGV4U3ViSW1h
Z2UyRCBpZiB0aGlzIGZyYW1lYnVmZmVyIGlzCiAgICAgLy8gY3VycmVudGx5IGJvdW5kLgogICAg
IC8vIFJldHVybiBmYWxzZSBpZiB0aGUgZnJhbWVidWZmZXIgaXMgaW5jb21wbGV0ZTsgb3RoZXJ3
aXNlIGluaXRpYWxpemUKLSAgICAvLyB0aGUgYnVmZmVycyBpZiB0aGV5IGhhdmVuJ3QgYmVlbiBp
bml0aWFsaXplZC4KLSAgICBib29sIG9uQWNjZXNzKCk7CisgICAgLy8gdGhlIGJ1ZmZlcnMgaWYg
dGhleSBoYXZlbid0IGJlZW4gaW5pdGlhbGl6ZWQgYW5kCisgICAgLy8gbmVlZFRvSW5pdGlhbGl6
ZVJlbmRlcmJ1ZmZlcnMgaXMgdHJ1ZS4KKyAgICBib29sIG9uQWNjZXNzKGJvb2wgbmVlZFRvSW5p
dGlhbGl6ZVJlbmRlcmJ1ZmZlcnMpOwogCiAgICAgLy8gUmV0dXJuIGZhbHNlIGRvZXMgbm90IG1l
YW4gQ09NUExFVEUsIG1pZ2h0IHN0aWxsIGJlIElOQ09NUExFVEUuCiAgICAgYm9vbCBpc0luY29t
cGxldGUoYm9vbCBjaGVja0ludGVybmFsRm9ybWF0KSBjb25zdDsKSW5kZXg6IFdlYkNvcmUvaHRt
bC9jYW52YXMvV2ViR0xSZW5kZXJpbmdDb250ZXh0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3Jl
L2h0bWwvY2FudmFzL1dlYkdMUmVuZGVyaW5nQ29udGV4dC5jcHAJKHJldmlzaW9uIDczMzE5KQor
KysgV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFJlbmRlcmluZ0NvbnRleHQuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC01NDQsNyArNTQ0LDcgQEAgdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmNs
ZWFyKHVuc2lnbgogICAgICAgICBtX2NvbnRleHQtPnN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNz
Q29udGV4dDNEOjpJTlZBTElEX1ZBTFVFKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KLSAgICBp
ZiAobV9mcmFtZWJ1ZmZlckJpbmRpbmcgJiYgIW1fZnJhbWVidWZmZXJCaW5kaW5nLT5vbkFjY2Vz
cygpKSB7CisgICAgaWYgKG1fZnJhbWVidWZmZXJCaW5kaW5nICYmICFtX2ZyYW1lYnVmZmVyQmlu
ZGluZy0+b25BY2Nlc3MoIWlzUmVzb3VyY2VTYWZlKCkpKSB7CiAgICAgICAgIG1fY29udGV4dC0+
c3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfRlJBTUVCVUZGRVJf
T1BFUkFUSU9OKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KQEAgLTYyMiw3ICs2MjIsNyBAQCB2
b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6Y29weVRleEltYWdlCiAgICAgICAgIG1fY29udGV4
dC0+c3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfVkFMVUUpOwog
ICAgICAgICByZXR1cm47CiAgICAgfQotICAgIGlmIChtX2ZyYW1lYnVmZmVyQmluZGluZyAmJiAh
bV9mcmFtZWJ1ZmZlckJpbmRpbmctPm9uQWNjZXNzKCkpIHsKKyAgICBpZiAobV9mcmFtZWJ1ZmZl
ckJpbmRpbmcgJiYgIW1fZnJhbWVidWZmZXJCaW5kaW5nLT5vbkFjY2VzcyghaXNSZXNvdXJjZVNh
ZmUoKSkpIHsKICAgICAgICAgbV9jb250ZXh0LT5zeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0Nv
bnRleHQzRDo6SU5WQUxJRF9GUkFNRUJVRkZFUl9PUEVSQVRJT04pOwogICAgICAgICByZXR1cm47
CiAgICAgfQpAQCAtNjQ3LDcgKzY0Nyw3IEBAIHZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojpj
b3B5VGV4U3ViSW0KICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQogICAgIH0KLSAgICBp
ZiAobV9mcmFtZWJ1ZmZlckJpbmRpbmcgJiYgIW1fZnJhbWVidWZmZXJCaW5kaW5nLT5vbkFjY2Vz
cygpKSB7CisgICAgaWYgKG1fZnJhbWVidWZmZXJCaW5kaW5nICYmICFtX2ZyYW1lYnVmZmVyQmlu
ZGluZy0+b25BY2Nlc3MoIWlzUmVzb3VyY2VTYWZlKCkpKSB7CiAgICAgICAgIG1fY29udGV4dC0+
c3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfRlJBTUVCVUZGRVJf
T1BFUkFUSU9OKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KQEAgLTEwNzgsNyArMTA3OCw3IEBA
IHZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpkcmF3QXJyYXlzKHUKICAgICAgICAgfQogICAg
IH0KIAotICAgIGlmIChtX2ZyYW1lYnVmZmVyQmluZGluZyAmJiAhbV9mcmFtZWJ1ZmZlckJpbmRp
bmctPm9uQWNjZXNzKCkpIHsKKyAgICBpZiAobV9mcmFtZWJ1ZmZlckJpbmRpbmcgJiYgIW1fZnJh
bWVidWZmZXJCaW5kaW5nLT5vbkFjY2VzcyghaXNSZXNvdXJjZVNhZmUoKSkpIHsKICAgICAgICAg
bV9jb250ZXh0LT5zeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9G
UkFNRUJVRkZFUl9PUEVSQVRJT04pOwogICAgICAgICByZXR1cm47CiAgICAgfQpAQCAtMTE0Miw3
ICsxMTQyLDcgQEAgdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmRyYXdFbGVtZW50cwogICAg
ICAgICB9CiAgICAgfQogCi0gICAgaWYgKG1fZnJhbWVidWZmZXJCaW5kaW5nICYmICFtX2ZyYW1l
YnVmZmVyQmluZGluZy0+b25BY2Nlc3MoKSkgeworICAgIGlmIChtX2ZyYW1lYnVmZmVyQmluZGlu
ZyAmJiAhbV9mcmFtZWJ1ZmZlckJpbmRpbmctPm9uQWNjZXNzKCFpc1Jlc291cmNlU2FmZSgpKSkg
ewogICAgICAgICBtX2NvbnRleHQtPnN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNE
OjpJTlZBTElEX0ZSQU1FQlVGRkVSX09QRVJBVElPTik7CiAgICAgICAgIHJldHVybjsKICAgICB9
CkBAIC0yMjYzLDcgKzIyNjMsNyBAQCB2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6cmVhZFBp
eGVscyhsCiAgICAgICAgIG1fY29udGV4dC0+c3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250
ZXh0M0Q6OklOVkFMSURfT1BFUkFUSU9OKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KLSAgICBp
ZiAobV9mcmFtZWJ1ZmZlckJpbmRpbmcgJiYgIW1fZnJhbWVidWZmZXJCaW5kaW5nLT5vbkFjY2Vz
cygpKSB7CisgICAgaWYgKG1fZnJhbWVidWZmZXJCaW5kaW5nICYmICFtX2ZyYW1lYnVmZmVyQmlu
ZGluZy0+b25BY2Nlc3MoIWlzUmVzb3VyY2VTYWZlKCkpKSB7CiAgICAgICAgIG1fY29udGV4dC0+
c3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfRlJBTUVCVUZGRVJf
T1BFUkFUSU9OKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KQEAgLTI0NjMsOCArMjQ2MywxNSBA
QCB2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dGV4SW1hZ2UyREJhCiAgICAgICAgICAgICBy
ZXR1cm47CiAgICAgICAgIH0KICAgICB9Ci0gICAgbV9jb250ZXh0LT50ZXhJbWFnZTJEKHRhcmdl
dCwgbGV2ZWwsIGludGVybmFsZm9ybWF0LCB3aWR0aCwgaGVpZ2h0LAotICAgICAgICAgICAgICAg
ICAgICAgICAgICBib3JkZXIsIGZvcm1hdCwgdHlwZSwgcGl4ZWxzKTsKKyAgICBpZiAoIXBpeGVs
cyAmJiAhaXNSZXNvdXJjZVNhZmUoKSkgeworICAgICAgICBpbnQgZXJyb3IgPSBtX2NvbnRleHQt
PnRleEltYWdlMkRSZXNvdXJjZVNhZmUodGFyZ2V0LCBsZXZlbCwgaW50ZXJuYWxmb3JtYXQsIHdp
ZHRoLCBoZWlnaHQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBib3JkZXIsIGZvcm1hdCwgdHlwZSk7CisgICAgICAgIGlmIChlcnJvcikKKyAg
ICAgICAgICAgIHJldHVybjsKKyAgICB9IGVsc2UgeworICAgICAgICBtX2NvbnRleHQtPnRleElt
YWdlMkQodGFyZ2V0LCBsZXZlbCwgaW50ZXJuYWxmb3JtYXQsIHdpZHRoLCBoZWlnaHQsCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBib3JkZXIsIGZvcm1hdCwgdHlwZSwgcGl4ZWxzKTsK
KyAgICB9CiAgICAgdGV4LT5zZXRMZXZlbEluZm8odGFyZ2V0LCBsZXZlbCwgaW50ZXJuYWxmb3Jt
YXQsIHdpZHRoLCBoZWlnaHQsIHR5cGUpOwogICAgIGNsZWFudXBBZnRlckdyYXBoaWNzQ2FsbChm
YWxzZSk7CiB9CkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4
dDNELmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNz
Q29udGV4dDNELmNwcAkocmV2aXNpb24gNzMzMTkpCisrKyBXZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL0dyYXBoaWNzQ29udGV4dDNELmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzEsMjcgKzMxLDEw
NSBAQAogI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dDNELmgiCiAKICNpbmNsdWRlICJBcnJheUJ1
ZmZlclZpZXcuaCIKKyNpbmNsdWRlICJDaGVja2VkSW50LmgiCiAjaW5jbHVkZSAiRHJhd2luZ0J1
ZmZlci5oIgogI2luY2x1ZGUgIkltYWdlLmgiCiAjaW5jbHVkZSAiSW1hZ2VEYXRhLmgiCiAKKyNp
bmNsdWRlIDx3dGYvT3duQXJyYXlQdHIuaD4KKyNpbmNsdWRlIDx3dGYvUGFzc093bkFycmF5UHRy
Lmg+CisKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotc3RhdGljIHVpbnQ4X3QgY29udmVydENvbG9y
MTZMaXR0bGVUbzgodWludDE2X3QgdmFsdWUpCi17Ci0gICAgcmV0dXJuIHZhbHVlID4+IDg7Ci19
CituYW1lc3BhY2UgeworCisgICAgdW5zaWduZWQgYnl0ZXNQZXJDb21wb25lbnQodW5zaWduZWQg
dHlwZSkKKyAgICB7CisgICAgICAgIHN3aXRjaCAodHlwZSkgeworICAgICAgICBjYXNlIEdyYXBo
aWNzQ29udGV4dDNEOjpVTlNJR05FRF9CWVRFOgorICAgICAgICAgICAgcmV0dXJuIDE7CisgICAg
ICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlVOU0lHTkVEX1NIT1JUXzVfNl81OgorICAgICAg
ICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpVTlNJR05FRF9TSE9SVF80XzRfNF80OgorICAgICAg
ICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpVTlNJR05FRF9TSE9SVF81XzVfNV8xOgorICAgICAg
ICAgICAgcmV0dXJuIDI7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICByZXR1cm4gMTsK
KyAgICAgICAgfQorICAgIH0KKworICAgIHVuc2lnbmVkIGNvbXBvbmVudHNQZXJQaXhlbCh1bnNp
Z25lZCBmb3JtYXQsIHVuc2lnbmVkIHR5cGUpCisgICAgeworICAgICAgICBzd2l0Y2ggKHR5cGUp
IHsKKyAgICAgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6VU5TSUdORURfU0hPUlRfNV82XzU6
CisgICAgICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlVOU0lHTkVEX1NIT1JUXzRfNF80XzQ6
CisgICAgICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlVOU0lHTkVEX1NIT1JUXzVfNV81XzE6
CisgICAgICAgICAgICByZXR1cm4gMTsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICB9CisgICAgICAgIHN3aXRjaCAoZm9ybWF0KSB7CisgICAgICAgIGNhc2Ug
R3JhcGhpY3NDb250ZXh0M0Q6OkFMUEhBOgorICAgICAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNE
OjpMVU1JTkFOQ0U6CisgICAgICAgICAgICByZXR1cm4gMTsKKyAgICAgICAgY2FzZSBHcmFwaGlj
c0NvbnRleHQzRDo6TFVNSU5BTkNFX0FMUEhBOgorICAgICAgICAgICAgcmV0dXJuIDI7CisgICAg
ICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlJHQjoKKyAgICAgICAgICAgIHJldHVybiAzOwor
ICAgICAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpSR0JBOgorICAgICAgICAgICAgcmV0dXJu
IDQ7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICByZXR1cm4gNDsKKyAgICAgICAgfQor
ICAgIH0KKworICAgIC8vIFRoaXMgZnVuY3Rpb24gc2hvdWxkIG9ubHkgYmUgY2FsbGVkIGlmIHdp
ZHRoIGFuZCBoZWlnaHQgaXMgbm9uLXplcm8gYW5kCisgICAgLy8gZm9ybWF0L3R5cGUgYXJlIHZh
bGlkLiAgUmV0dXJuIDAgaWYgb3ZlcmZsb3cgaGFwcGVucy4KKyAgICBzaXplX3QgaW1hZ2VTaXpl
SW5CeXRlcyh1bnNpZ25lZCB3aWR0aCwgdW5zaWduZWQgaGVpZ2h0LCB1bnNpZ25lZCBmb3JtYXQs
IHVuc2lnbmVkIHR5cGUpCisgICAgeworICAgICAgICBBU1NFUlQod2lkdGggJiYgaGVpZ2h0KTsK
KyAgICAgICAgQ2hlY2tlZEludDx1aW50MzJfdD4gY2hlY2tlZFdpZHRoKHdpZHRoKTsKKyAgICAg
ICAgQ2hlY2tlZEludDx1aW50MzJfdD4gY2hlY2tlZEhlaWdodChoZWlnaHQpOworICAgICAgICBD
aGVja2VkSW50PHVpbnQzMl90PiBjaGVja2VkQnl0ZXNQZXJQaXhlbChieXRlc1BlckNvbXBvbmVu
dCh0eXBlKSAqIGNvbXBvbmVudHNQZXJQaXhlbChmb3JtYXQsIHR5cGUpKTsKKyAgICAgICAgQ2hl
Y2tlZEludDx1aW50MzJfdD4gY2hlY2tlZFNpemUgPSBjaGVja2VkV2lkdGggKiBjaGVja2VkSGVp
Z2h0ICogY2hlY2tlZEJ5dGVzUGVyUGl4ZWw7CisgICAgICAgIGlmIChjaGVja2VkU2l6ZS52YWxp
ZCgpKQorICAgICAgICAgICAgcmV0dXJuIGNoZWNrZWRTaXplLnZhbHVlKCk7CisgICAgICAgIHJl
dHVybiAwOworICAgIH0KKworICAgIHVpbnQ4X3QgY29udmVydENvbG9yMTZMaXR0bGVUbzgodWlu
dDE2X3QgdmFsdWUpCisgICAgeworICAgICAgICByZXR1cm4gdmFsdWUgPj4gODsKKyAgICB9CisK
KyAgICB1aW50OF90IGNvbnZlcnRDb2xvcjE2QmlnVG84KHVpbnQxNl90IHZhbHVlKQorICAgIHsK
KyAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PHVpbnQ4X3Q+KHZhbHVlICYgMHgwMEZGKTsKKyAg
ICB9CisKK30gLy8gYW5vbnltb3VzIG5hbWVzcGFjZQogCi1zdGF0aWMgdWludDhfdCBjb252ZXJ0
Q29sb3IxNkJpZ1RvOCh1aW50MTZfdCB2YWx1ZSkKLXsKLSAgICByZXR1cm4gc3RhdGljX2Nhc3Q8
dWludDhfdD4odmFsdWUgJiAweDAwRkYpOwotfQogCiBQYXNzUmVmUHRyPERyYXdpbmdCdWZmZXI+
IEdyYXBoaWNzQ29udGV4dDNEOjpjcmVhdGVEcmF3aW5nQnVmZmVyKGNvbnN0IEludFNpemUmIHNp
emUpCiB7CiAgICAgcmV0dXJuIERyYXdpbmdCdWZmZXI6OmNyZWF0ZSh0aGlzLCBzaXplKTsKIH0K
IAoraW50IEdyYXBoaWNzQ29udGV4dDNEOjp0ZXhJbWFnZTJEUmVzb3VyY2VTYWZlKHVuc2lnbmVk
IHRhcmdldCwgdW5zaWduZWQgbGV2ZWwsIHVuc2lnbmVkIGludGVybmFsZm9ybWF0LCB1bnNpZ25l
ZCB3aWR0aCwgdW5zaWduZWQgaGVpZ2h0LCB1bnNpZ25lZCBib3JkZXIsIHVuc2lnbmVkIGZvcm1h
dCwgdW5zaWduZWQgdHlwZSkKK3sKKyAgICBPd25BcnJheVB0cjx1bnNpZ25lZCBjaGFyPiB6ZXJv
OworICAgIGlmICh3aWR0aCAmJiBoZWlnaHQpIHsKKyAgICAgICAgc2l6ZV90IHNpemUgPSBpbWFn
ZVNpemVJbkJ5dGVzKHdpZHRoLCBoZWlnaHQsIGZvcm1hdCwgdHlwZSk7CisgICAgICAgIGlmICgh
c2l6ZSkgeworICAgICAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6
OklOVkFMSURfVkFMVUUpOworICAgICAgICAgICAgcmV0dXJuIDE7CisgICAgICAgIH0KKyAgICAg
ICAgemVybyA9IGFkb3B0QXJyYXlQdHIobmV3IHVuc2lnbmVkIGNoYXJbc2l6ZV0pOworICAgICAg
ICBtZW1zZXQoemVyby5nZXQoKSwgMCwgc2l6ZSk7CisgICAgfQorICAgIHRleEltYWdlMkQodGFy
Z2V0LCBsZXZlbCwgaW50ZXJuYWxmb3JtYXQsIHdpZHRoLCBoZWlnaHQsIGJvcmRlciwgZm9ybWF0
LCB0eXBlLCB6ZXJvLmdldCgpKTsKKyAgICByZXR1cm4gMDsKK30KKwogYm9vbCBHcmFwaGljc0Nv
bnRleHQzRDo6Y29tcHV0ZUZvcm1hdEFuZFR5cGVQYXJhbWV0ZXJzKHVuc2lnbmVkIGludCBmb3Jt
YXQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgdW5zaWduZWQgaW50IHR5cGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgbG9uZyogY29tcG9uZW50c1BlclBpeGVsLApJ
bmRleDogV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHQzRC5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0M0QuaAko
cmV2aXNpb24gNzMzMTkpCisrKyBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29u
dGV4dDNELmgJKHdvcmtpbmcgY29weSkKQEAgLTQ3Miw2ICs0NzIsMTAgQEAgcHVibGljOgogICAg
IC8vIGxpa2UgR0xfRkxPQVQsIEdMX0lOVCwgZXRjLgogICAgIGludCBzaXplSW5CeXRlcyhpbnQg
dHlwZSk7CiAKKyAgICAvLyBIZWxwZXIgdG8gdGV4SW1hZ2UyRCB3aXRoIHBpeGVsPT0wIGNhc2U6
IHBpeGVscyBhcmUgaW5pdGlhbGl6ZWQgdG8gMC4KKyAgICAvLyBSZXR1cm4gMCBpZiBubyBHTCBl
cnJvciBpcyBzeW50aGVzaXplZC4KKyAgICBpbnQgdGV4SW1hZ2UyRFJlc291cmNlU2FmZSh1bnNp
Z25lZCB0YXJnZXQsIHVuc2lnbmVkIGxldmVsLCB1bnNpZ25lZCBpbnRlcm5hbGZvcm1hdCwgdW5z
aWduZWQgd2lkdGgsIHVuc2lnbmVkIGhlaWdodCwgdW5zaWduZWQgYm9yZGVyLCB1bnNpZ25lZCBm
b3JtYXQsIHVuc2lnbmVkIHR5cGUpOworCiAgICAgYm9vbCBpc0dMRVMyQ29tcGxpYW50KCkgY29u
c3Q7CiAKICAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY2hyb21pdW0vQ2FudmFzMkRMYXllckNocm9taXVtLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0NhbnZhczJETGF5ZXJDaHJvbWl1bS5jcHAJ
KHJldmlzaW9uIDczNDA5KQorKysgV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9D
YW52YXMyRExheWVyQ2hyb21pdW0uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02OCw3ICs2OCw3IEBA
IHZvaWQgQ2FudmFzMkRMYXllckNocm9taXVtOjp1cGRhdGVDb250ZW4KICAgICAgICAgY29udGV4
dC0+YWN0aXZlVGV4dHVyZShHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRTApOwogICAgICAgICBj
b250ZXh0LT5iaW5kVGV4dHVyZShHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV8yRCwgbV90ZXh0
dXJlSWQpOwogICAgICAgICBJbnRTaXplIHNpemUgPSBtX2RyYXdpbmdCdWZmZXItPnNpemUoKTsK
LSAgICAgICAgY29udGV4dC0+dGV4SW1hZ2UyRChHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV8y
RCwgMCwgR3JhcGhpY3NDb250ZXh0M0Q6OlJHQkEsIHNpemUud2lkdGgoKSwgc2l6ZS5oZWlnaHQo
KSwgMCwgR3JhcGhpY3NDb250ZXh0M0Q6OlJHQkEsIEdyYXBoaWNzQ29udGV4dDNEOjpVTlNJR05F
RF9CWVRFLCAwKTsKKyAgICAgICAgY29udGV4dC0+dGV4SW1hZ2UyRFJlc291cmNlU2FmZShHcmFw
aGljc0NvbnRleHQzRDo6VEVYVFVSRV8yRCwgMCwgR3JhcGhpY3NDb250ZXh0M0Q6OlJHQkEsIHNp
emUud2lkdGgoKSwgc2l6ZS5oZWlnaHQoKSwgMCwgR3JhcGhpY3NDb250ZXh0M0Q6OlJHQkEsIEdy
YXBoaWNzQ29udGV4dDNEOjpVTlNJR05FRF9CWVRFKTsKICAgICAgICAgLy8gU2V0IHRoZSBtaW4t
bWFnIGZpbHRlcnMgdG8gbGluZWFyIGFuZCB3cmFwIG1vZGVzIHRvIEdyYXBoaWNzQ29udGV4dDNE
OjpDTEFNUF9UT19FREdFCiAgICAgICAgIC8vIHRvIGdldCBhcm91bmQgTlBPVCB0ZXh0dXJlIGxp
bWl0YXRpb25zIG9mIEdMRVMuCiAgICAgICAgIGNvbnRleHQtPnRleFBhcmFtZXRlcmkoR3JhcGhp
Y3NDb250ZXh0M0Q6OlRFWFRVUkVfMkQsIEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFX01JTl9G
SUxURVIsIEdyYXBoaWNzQ29udGV4dDNEOjpMSU5FQVIpOwpJbmRleDogV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jaHJvbWl1bS9EcmF3aW5nQnVmZmVyQ2hyb21pdW0uY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vRHJhd2luZ0J1ZmZlckNocm9t
aXVtLmNwcAkocmV2aXNpb24gNzM0MDkpCisrKyBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2No
cm9taXVtL0RyYXdpbmdCdWZmZXJDaHJvbWl1bS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTYwLDcg
KzYwLDcgQEAgc3RhdGljIHVuc2lnbmVkIGdlbmVyYXRlQ29sb3JUZXh0dXJlKEdyYQogICAgIGNv
bnRleHQtPnRleFBhcmFtZXRlcmkoR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfMkQsIEdyYXBo
aWNzQ29udGV4dDNEOjpURVhUVVJFX01JTl9GSUxURVIsIEdyYXBoaWNzQ29udGV4dDNEOjpORUFS
RVNUKTsKICAgICBjb250ZXh0LT50ZXhQYXJhbWV0ZXJpKEdyYXBoaWNzQ29udGV4dDNEOjpURVhU
VVJFXzJELCBHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV9XUkFQX1MsIEdyYXBoaWNzQ29udGV4
dDNEOjpDTEFNUF9UT19FREdFKTsKICAgICBjb250ZXh0LT50ZXhQYXJhbWV0ZXJpKEdyYXBoaWNz
Q29udGV4dDNEOjpURVhUVVJFXzJELCBHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV9XUkFQX1Qs
IEdyYXBoaWNzQ29udGV4dDNEOjpDTEFNUF9UT19FREdFKTsKLSAgICBjb250ZXh0LT50ZXhJbWFn
ZTJEKEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFXzJELCAwLCBHcmFwaGljc0NvbnRleHQzRDo6
UkdCQSwgc2l6ZS53aWR0aCgpLCBzaXplLmhlaWdodCgpLCAwLCBHcmFwaGljc0NvbnRleHQzRDo6
UkdCQSwgR3JhcGhpY3NDb250ZXh0M0Q6OlVOU0lHTkVEX0JZVEUsIDApOworICAgIGNvbnRleHQt
PnRleEltYWdlMkRSZXNvdXJjZVNhZmUoR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfMkQsIDAs
IEdyYXBoaWNzQ29udGV4dDNEOjpSR0JBLCBzaXplLndpZHRoKCksIHNpemUuaGVpZ2h0KCksIDAs
IEdyYXBoaWNzQ29udGV4dDNEOjpSR0JBLCBHcmFwaGljc0NvbnRleHQzRDo6VU5TSUdORURfQllU
RSk7CiAgICAgY29udGV4dC0+ZnJhbWVidWZmZXJUZXh0dXJlMkQoR3JhcGhpY3NDb250ZXh0M0Q6
OkZSQU1FQlVGRkVSLCBHcmFwaGljc0NvbnRleHQzRDo6Q09MT1JfQVRUQUNITUVOVDAsIEdyYXBo
aWNzQ29udGV4dDNEOjpURVhUVVJFXzJELCBvZmZzY3JlZW5Db2xvclRleHR1cmUsIDApOwogCiAg
ICAgcmV0dXJuIG9mZnNjcmVlbkNvbG9yVGV4dHVyZTsKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJSZW5kZXJlckNocm9taXVtLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyUmVuZGVyZXJDaHJvbWl1
bS5jcHAJKHJldmlzaW9uIDczNDA5KQorKysgV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJv
bWl1bS9MYXllclJlbmRlcmVyQ2hyb21pdW0uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xOTUsOCAr
MTk1LDcgQEAgdm9pZCBMYXllclJlbmRlcmVyQ2hyb21pdW06OnByZXBhcmVUb0RyYQogICAgIGlm
ICh2aXNpYmxlUmVjdFdpZHRoICE9IG1fcm9vdExheWVyVGV4dHVyZVdpZHRoIHx8IHZpc2libGVS
ZWN0SGVpZ2h0ICE9IG1fcm9vdExheWVyVGV4dHVyZUhlaWdodCkgewogICAgICAgICBtX3Jvb3RM
YXllclRleHR1cmVXaWR0aCA9IHZpc2libGVSZWN0V2lkdGg7CiAgICAgICAgIG1fcm9vdExheWVy
VGV4dHVyZUhlaWdodCA9IHZpc2libGVSZWN0SGVpZ2h0OwotCi0gICAgICAgIEdMQyhtX2NvbnRl
eHQsIG1fY29udGV4dC0+dGV4SW1hZ2UyRChHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV8yRCwg
MCwgR3JhcGhpY3NDb250ZXh0M0Q6OlJHQkEsIG1fcm9vdExheWVyVGV4dHVyZVdpZHRoLCBtX3Jv
b3RMYXllclRleHR1cmVIZWlnaHQsIDAsIEdyYXBoaWNzQ29udGV4dDNEOjpSR0JBLCBHcmFwaGlj
c0NvbnRleHQzRDo6VU5TSUdORURfQllURSwgMCkpOworICAgICAgICBHTEMobV9jb250ZXh0LCBt
X2NvbnRleHQtPnRleEltYWdlMkRSZXNvdXJjZVNhZmUoR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRV
UkVfMkQsIDAsIEdyYXBoaWNzQ29udGV4dDNEOjpSR0JBLCBtX3Jvb3RMYXllclRleHR1cmVXaWR0
aCwgbV9yb290TGF5ZXJUZXh0dXJlSGVpZ2h0LCAwLCBHcmFwaGljc0NvbnRleHQzRDo6UkdCQSwg
R3JhcGhpY3NDb250ZXh0M0Q6OlVOU0lHTkVEX0JZVEUpKTsKIAogICAgICAgICAvLyBSZXNldCB0
aGUgY3VycmVudCByZW5kZXIgc3VyZmFjZSB0byBmb3JjZSBhbiB1cGRhdGUgb2YgdGhlIHZpZXdw
b3J0IGFuZAogICAgICAgICAvLyBwcm9qZWN0aW9uIG1hdHJpeCBuZXh0IHRpbWUgdXNlUmVuZGVy
U3VyZmFjZSBpcyBjYWxsZWQuCkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9t
aXVtL1JlbmRlclN1cmZhY2VDaHJvbWl1bS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9SZW5kZXJTdXJmYWNlQ2hyb21pdW0uY3BwCShyZXZpc2lv
biA3MzQwOSkKKysrIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vUmVuZGVyU3Vy
ZmFjZUNocm9taXVtLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzcsOSArNzcsOSBAQCB2b2lkIFJl
bmRlclN1cmZhY2VDaHJvbWl1bTo6cHJlcGFyZUNvbnRlCiAgICAgaWYgKG1fYWxsb2NhdGVkVGV4
dHVyZVNpemUgIT0gcmVxdWlyZWRTaXplKSB7CiAgICAgICAgIEdyYXBoaWNzQ29udGV4dDNEKiBj
b250ZXh0ID0gbV9vd25pbmdMYXllci0+bGF5ZXJSZW5kZXJlcigpLT5jb250ZXh0KCk7CiAgICAg
ICAgIEdMQyhjb250ZXh0LCBjb250ZXh0LT5iaW5kVGV4dHVyZShHcmFwaGljc0NvbnRleHQzRDo6
VEVYVFVSRV8yRCwgbV9jb250ZW50c1RleHR1cmVJZCkpOwotICAgICAgICBHTEMoY29udGV4dCwg
Y29udGV4dC0+dGV4SW1hZ2UyRChHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV8yRCwgMCwgR3Jh
cGhpY3NDb250ZXh0M0Q6OlJHQkEsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICByZXF1aXJlZFNpemUud2lkdGgoKSwgcmVxdWlyZWRTaXplLmhlaWdodCgpLCAw
LCBHcmFwaGljc0NvbnRleHQzRDo6UkdCQSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIEdyYXBoaWNzQ29udGV4dDNEOjpVTlNJR05FRF9CWVRFLCAwKSk7Cisg
ICAgICAgIEdMQyhjb250ZXh0LCBjb250ZXh0LT50ZXhJbWFnZTJEUmVzb3VyY2VTYWZlKEdyYXBo
aWNzQ29udGV4dDNEOjpURVhUVVJFXzJELCAwLCBHcmFwaGljc0NvbnRleHQzRDo6UkdCQSwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVxdWlyZWRTaXplLndpZHRo
KCksIHJlcXVpcmVkU2l6ZS5oZWlnaHQoKSwgMCwgR3JhcGhpY3NDb250ZXh0M0Q6OlJHQkEsCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdyYXBoaWNzQ29udGV4dDNE
OjpVTlNJR05FRF9CWVRFKSk7CiAgICAgICAgIG1fYWxsb2NhdGVkVGV4dHVyZVNpemUgPSByZXF1
aXJlZFNpemU7CiAgICAgfQogfQpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJv
bWl1bS9WaWRlb0xheWVyQ2hyb21pdW0uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY2hyb21pdW0vVmlkZW9MYXllckNocm9taXVtLmNwcAkocmV2aXNpb24gNzM0
MDkpCisrKyBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1ZpZGVvTGF5ZXJDaHJv
bWl1bS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI5Nyw3ICsyOTcsNyBAQCBib29sIFZpZGVvTGF5
ZXJDaHJvbWl1bTo6YWxsb2NhdGVUZXh0dXJlCiB2b2lkIFZpZGVvTGF5ZXJDaHJvbWl1bTo6YWxs
b2NhdGVUZXh0dXJlKEdyYXBoaWNzQ29udGV4dDNEKiBjb250ZXh0LCB1bnNpZ25lZCB0ZXh0dXJl
SWQsIGNvbnN0IEludFNpemUmIGRpbWVuc2lvbnMsIHVuc2lnbmVkIHRleHR1cmVGb3JtYXQpCiB7
CiAgICAgR0xDKGNvbnRleHQsIGNvbnRleHQtPmJpbmRUZXh0dXJlKEdyYXBoaWNzQ29udGV4dDNE
OjpURVhUVVJFXzJELCB0ZXh0dXJlSWQpKTsKLSAgICBHTEMoY29udGV4dCwgY29udGV4dC0+dGV4
SW1hZ2UyRChHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV8yRCwgMCwgdGV4dHVyZUZvcm1hdCwg
ZGltZW5zaW9ucy53aWR0aCgpLCBkaW1lbnNpb25zLmhlaWdodCgpLCAwLCB0ZXh0dXJlRm9ybWF0
LCBHcmFwaGljc0NvbnRleHQzRDo6VU5TSUdORURfQllURSwgMCkpOworICAgIEdMQyhjb250ZXh0
LCBjb250ZXh0LT50ZXhJbWFnZTJEUmVzb3VyY2VTYWZlKEdyYXBoaWNzQ29udGV4dDNEOjpURVhU
VVJFXzJELCAwLCB0ZXh0dXJlRm9ybWF0LCBkaW1lbnNpb25zLndpZHRoKCksIGRpbWVuc2lvbnMu
aGVpZ2h0KCksIDAsIHRleHR1cmVGb3JtYXQsIEdyYXBoaWNzQ29udGV4dDNEOjpVTlNJR05FRF9C
WVRFKSk7CiB9CiAKIHZvaWQgVmlkZW9MYXllckNocm9taXVtOjp1cGRhdGVUZXh0dXJlKEdyYXBo
aWNzQ29udGV4dDNEKiBjb250ZXh0LCB1bnNpZ25lZCB0ZXh0dXJlSWQsIGNvbnN0IEludFNpemUm
IGRpbWVuc2lvbnMsIHVuc2lnbmVkIGZvcm1hdCwgY29uc3Qgdm9pZCogZGF0YSkKSW5kZXg6IFdl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3B1L0RyYXdpbmdCdWZmZXIuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3B1L0RyYXdpbmdCdWZmZXIuY3BwCShyZXZp
c2lvbiA3MzQwOSkKKysrIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3B1L0RyYXdpbmdCdWZm
ZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMTcsOSArMTE3LDcgQEAgdm9pZCBEcmF3aW5nQnVm
ZmVyOjpyZXNldChjb25zdCBJbnRTaXplJgogICAgICAgICAKICAgICAgICAgbV9jb250ZXh0LT5n
ZXRJbnRlZ2VydihFeHRlbnNpb25zM0Q6Ok1BWF9TQU1QTEVTLCAmbWF4U2FtcGxlQ291bnQpOwog
ICAgICAgICBpbnQgc2FtcGxlQ291bnQgPSBzdGQ6Om1pbig4LCBtYXhTYW1wbGVDb3VudCk7Ci0g
ICAgICAgIGlmIChzYW1wbGVDb3VudCA+IG1heFNhbXBsZUNvdW50KQotICAgICAgICAgICAgc2Ft
cGxlQ291bnQgPSBtYXhTYW1wbGVDb3VudDsKLSAgICAgICAgCisKICAgICAgICAgbV9jb250ZXh0
LT5iaW5kRnJhbWVidWZmZXIoR3JhcGhpY3NDb250ZXh0M0Q6OkZSQU1FQlVGRkVSLCBtX211bHRp
c2FtcGxlRkJPKTsKIAogICAgICAgICBtX2NvbnRleHQtPmJpbmRSZW5kZXJidWZmZXIoR3JhcGhp
Y3NDb250ZXh0M0Q6OlJFTkRFUkJVRkZFUiwgbV9tdWx0aXNhbXBsZUNvbG9yQnVmZmVyKTsKQEAg
LTE0NSw3ICsxNDMsNyBAQCB2b2lkIERyYXdpbmdCdWZmZXI6OnJlc2V0KGNvbnN0IEludFNpemUm
CiAgICAgbV9jb250ZXh0LT5iaW5kRnJhbWVidWZmZXIoR3JhcGhpY3NDb250ZXh0M0Q6OkZSQU1F
QlVGRkVSLCBtX2Zibyk7CiAKICAgICBtX2NvbnRleHQtPmJpbmRUZXh0dXJlKEdyYXBoaWNzQ29u
dGV4dDNEOjpURVhUVVJFXzJELCBtX2NvbG9yQnVmZmVyKTsKLSAgICBtX2NvbnRleHQtPnRleElt
YWdlMkQoR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfMkQsIDAsIGludGVybmFsQ29sb3JGb3Jt
YXQsIG1fc2l6ZS53aWR0aCgpLCBtX3NpemUuaGVpZ2h0KCksIDAsIGNvbG9yRm9ybWF0LCBHcmFw
aGljc0NvbnRleHQzRDo6VU5TSUdORURfQllURSwgMCk7CisgICAgbV9jb250ZXh0LT50ZXhJbWFn
ZTJEUmVzb3VyY2VTYWZlKEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFXzJELCAwLCBpbnRlcm5h
bENvbG9yRm9ybWF0LCBtX3NpemUud2lkdGgoKSwgbV9zaXplLmhlaWdodCgpLCAwLCBjb2xvckZv
cm1hdCwgR3JhcGhpY3NDb250ZXh0M0Q6OlVOU0lHTkVEX0JZVEUpOwogICAgIG1fY29udGV4dC0+
ZnJhbWVidWZmZXJUZXh0dXJlMkQoR3JhcGhpY3NDb250ZXh0M0Q6OkZSQU1FQlVGRkVSLCBHcmFw
aGljc0NvbnRleHQzRDo6Q09MT1JfQVRUQUNITUVOVDAsIEdyYXBoaWNzQ29udGV4dDNEOjpURVhU
VVJFLCBtX2NvbG9yQnVmZmVyLCAwKTsKICAgICBtX2NvbnRleHQtPmJpbmRUZXh0dXJlKEdyYXBo
aWNzQ29udGV4dDNEOjpURVhUVVJFXzJELCAwKTsKICAgICBpZiAoIW11bHRpc2FtcGxlKCkgJiYg
KGF0dHJpYnV0ZXMuc3RlbmNpbCB8fCBhdHRyaWJ1dGVzLmRlcHRoKSkgewpAQCAtMTY2LDU3ICsx
NjQsNDggQEAgdm9pZCBEcmF3aW5nQnVmZmVyOjpyZXNldChjb25zdCBJbnRTaXplJgogICAgIGlm
IChtdWx0aXNhbXBsZSgpKQogICAgICAgICBtX2NvbnRleHQtPmJpbmRGcmFtZWJ1ZmZlcihHcmFw
aGljc0NvbnRleHQzRDo6RlJBTUVCVUZGRVIsIG1fbXVsdGlzYW1wbGVGQk8pOwogCi0gICAgLy8g
SW5pdGlhbGl6ZSByZW5kZXJidWZmZXJzIHRvIDAuCi0gICAgZmxvYXQgY2xlYXJDb2xvcltdID0g
ezAsIDAsIDAsIDB9LCBjbGVhckRlcHRoID0gMDsKLSAgICBpbnQgY2xlYXJTdGVuY2lsID0gMDsK
LSAgICB1bnNpZ25lZCBjaGFyIGNvbG9yTWFza1tdID0ge3RydWUsIHRydWUsIHRydWUsIHRydWV9
LCBkZXB0aE1hc2sgPSB0cnVlOwotICAgIHVuc2lnbmVkIGludCBzdGVuY2lsTWFzayA9IDB4ZmZm
ZmZmZmY7Ci0gICAgdW5zaWduZWQgY2hhciBpc1NjaXNzb3JFbmFibGVkID0gZmFsc2U7Ci0gICAg
dW5zaWduZWQgY2hhciBpc0RpdGhlckVuYWJsZWQgPSBmYWxzZTsKLSAgICB1bnNpZ25lZCBsb25n
IGNsZWFyTWFzayA9IEdyYXBoaWNzQ29udGV4dDNEOjpDT0xPUl9CVUZGRVJfQklUOwotICAgIG1f
Y29udGV4dC0+Z2V0RmxvYXR2KEdyYXBoaWNzQ29udGV4dDNEOjpDT0xPUl9DTEVBUl9WQUxVRSwg
Y2xlYXJDb2xvcik7Ci0gICAgbV9jb250ZXh0LT5jbGVhckNvbG9yKDAsIDAsIDAsIDApOwotICAg
IG1fY29udGV4dC0+Z2V0Qm9vbGVhbnYoR3JhcGhpY3NDb250ZXh0M0Q6OkNPTE9SX1dSSVRFTUFT
SywgY29sb3JNYXNrKTsKLSAgICBtX2NvbnRleHQtPmNvbG9yTWFzayh0cnVlLCB0cnVlLCB0cnVl
LCB0cnVlKTsKLSAgICBpZiAoYXR0cmlidXRlcy5kZXB0aCkgewotICAgICAgICBtX2NvbnRleHQt
PmdldEZsb2F0dihHcmFwaGljc0NvbnRleHQzRDo6REVQVEhfQ0xFQVJfVkFMVUUsICZjbGVhckRl
cHRoKTsKLSAgICAgICAgbV9jb250ZXh0LT5jbGVhckRlcHRoKDEpOwotICAgICAgICBtX2NvbnRl
eHQtPmdldEJvb2xlYW52KEdyYXBoaWNzQ29udGV4dDNEOjpERVBUSF9XUklURU1BU0ssICZkZXB0
aE1hc2spOwotICAgICAgICBtX2NvbnRleHQtPmRlcHRoTWFzayh0cnVlKTsKLSAgICAgICAgY2xl
YXJNYXNrIHw9IEdyYXBoaWNzQ29udGV4dDNEOjpERVBUSF9CVUZGRVJfQklUOwotICAgIH0KLSAg
ICBpZiAoYXR0cmlidXRlcy5zdGVuY2lsKSB7Ci0gICAgICAgIG1fY29udGV4dC0+Z2V0SW50ZWdl
cnYoR3JhcGhpY3NDb250ZXh0M0Q6OlNURU5DSUxfQ0xFQVJfVkFMVUUsICZjbGVhclN0ZW5jaWwp
OwotICAgICAgICBtX2NvbnRleHQtPmNsZWFyU3RlbmNpbCgwKTsKLSAgICAgICAgbV9jb250ZXh0
LT5nZXRJbnRlZ2VydihHcmFwaGljc0NvbnRleHQzRDo6U1RFTkNJTF9XUklURU1BU0ssIHJlaW50
ZXJwcmV0X2Nhc3Q8aW50Kj4oJnN0ZW5jaWxNYXNrKSk7Ci0gICAgICAgIG1fY29udGV4dC0+c3Rl
bmNpbE1hc2tTZXBhcmF0ZShHcmFwaGljc0NvbnRleHQzRDo6RlJPTlQsIDB4ZmZmZmZmZmYpOwot
ICAgICAgICBjbGVhck1hc2sgfD0gR3JhcGhpY3NDb250ZXh0M0Q6OlNURU5DSUxfQlVGRkVSX0JJ
VDsKLSAgICB9Ci0gICAgaXNTY2lzc29yRW5hYmxlZCA9IG1fY29udGV4dC0+aXNFbmFibGVkKEdy
YXBoaWNzQ29udGV4dDNEOjpTQ0lTU09SX1RFU1QpOwotICAgIG1fY29udGV4dC0+ZGlzYWJsZShH
cmFwaGljc0NvbnRleHQzRDo6U0NJU1NPUl9URVNUKTsKLSAgICBpc0RpdGhlckVuYWJsZWQgPSBt
X2NvbnRleHQtPmlzRW5hYmxlZChHcmFwaGljc0NvbnRleHQzRDo6RElUSEVSKTsKLSAgICBtX2Nv
bnRleHQtPmRpc2FibGUoR3JhcGhpY3NDb250ZXh0M0Q6OkRJVEhFUik7Ci0KLSAgICBtX2NvbnRl
eHQtPmNsZWFyKGNsZWFyTWFzayk7Ci0KLSAgICBtX2NvbnRleHQtPmNsZWFyQ29sb3IoY2xlYXJD
b2xvclswXSwgY2xlYXJDb2xvclsxXSwgY2xlYXJDb2xvclsyXSwgY2xlYXJDb2xvclszXSk7Ci0g
ICAgbV9jb250ZXh0LT5jb2xvck1hc2soY29sb3JNYXNrWzBdLCBjb2xvck1hc2tbMV0sIGNvbG9y
TWFza1syXSwgY29sb3JNYXNrWzNdKTsKLSAgICBpZiAoYXR0cmlidXRlcy5kZXB0aCkgewotICAg
ICAgICBtX2NvbnRleHQtPmNsZWFyRGVwdGgoY2xlYXJEZXB0aCk7Ci0gICAgICAgIG1fY29udGV4
dC0+ZGVwdGhNYXNrKGRlcHRoTWFzayk7Ci0gICAgfQotICAgIGlmIChhdHRyaWJ1dGVzLnN0ZW5j
aWwpIHsKLSAgICAgICAgbV9jb250ZXh0LT5jbGVhclN0ZW5jaWwoY2xlYXJTdGVuY2lsKTsKLSAg
ICAgICAgbV9jb250ZXh0LT5zdGVuY2lsTWFza1NlcGFyYXRlKEdyYXBoaWNzQ29udGV4dDNEOjpG
Uk9OVCwgc3RlbmNpbE1hc2spOworICAgIGlmICghbV9jb250ZXh0LT5nZXRFeHRlbnNpb25zKCkt
PnN1cHBvcnRzKCJHTF9DSFJPTUlVTV9yZXNvdXJjZV9zYWZlIikpIHsKKyAgICAgICAgLy8gSW5p
dGlhbGl6ZSByZW5kZXJidWZmZXJzIChkZXB0aC9zdGVuY2lsKS4KKyAgICAgICAgZmxvYXQgY2xl
YXJEZXB0aCA9IDA7CisgICAgICAgIGludCBjbGVhclN0ZW5jaWwgPSAwOworICAgICAgICB1bnNp
Z25lZCBjaGFyIGRlcHRoTWFzayA9IHRydWU7CisgICAgICAgIHVuc2lnbmVkIGludCBzdGVuY2ls
TWFzayA9IDB4ZmZmZmZmZmY7CisgICAgICAgIHVuc2lnbmVkIGNoYXIgaXNTY2lzc29yRW5hYmxl
ZCA9IGZhbHNlOworICAgICAgICB1bnNpZ25lZCBsb25nIGNsZWFyTWFzayA9IDA7CisgICAgICAg
IGlmIChhdHRyaWJ1dGVzLmRlcHRoKSB7CisgICAgICAgICAgICBtX2NvbnRleHQtPmdldEZsb2F0
dihHcmFwaGljc0NvbnRleHQzRDo6REVQVEhfQ0xFQVJfVkFMVUUsICZjbGVhckRlcHRoKTsKKyAg
ICAgICAgICAgIG1fY29udGV4dC0+Y2xlYXJEZXB0aCgxKTsKKyAgICAgICAgICAgIG1fY29udGV4
dC0+Z2V0Qm9vbGVhbnYoR3JhcGhpY3NDb250ZXh0M0Q6OkRFUFRIX1dSSVRFTUFTSywgJmRlcHRo
TWFzayk7CisgICAgICAgICAgICBtX2NvbnRleHQtPmRlcHRoTWFzayh0cnVlKTsKKyAgICAgICAg
ICAgIGNsZWFyTWFzayB8PSBHcmFwaGljc0NvbnRleHQzRDo6REVQVEhfQlVGRkVSX0JJVDsKKyAg
ICAgICAgfQorICAgICAgICBpZiAoYXR0cmlidXRlcy5zdGVuY2lsKSB7CisgICAgICAgICAgICBt
X2NvbnRleHQtPmdldEludGVnZXJ2KEdyYXBoaWNzQ29udGV4dDNEOjpTVEVOQ0lMX0NMRUFSX1ZB
TFVFLCAmY2xlYXJTdGVuY2lsKTsKKyAgICAgICAgICAgIG1fY29udGV4dC0+Y2xlYXJTdGVuY2ls
KDApOworICAgICAgICAgICAgbV9jb250ZXh0LT5nZXRJbnRlZ2VydihHcmFwaGljc0NvbnRleHQz
RDo6U1RFTkNJTF9XUklURU1BU0ssIHJlaW50ZXJwcmV0X2Nhc3Q8aW50Kj4oJnN0ZW5jaWxNYXNr
KSk7CisgICAgICAgICAgICBtX2NvbnRleHQtPnN0ZW5jaWxNYXNrU2VwYXJhdGUoR3JhcGhpY3ND
b250ZXh0M0Q6OkZST05ULCAweGZmZmZmZmZmKTsKKyAgICAgICAgICAgIGNsZWFyTWFzayB8PSBH
cmFwaGljc0NvbnRleHQzRDo6U1RFTkNJTF9CVUZGRVJfQklUOworICAgICAgICB9CisgICAgICAg
IGlmIChjbGVhck1hc2spIHsKKyAgICAgICAgICAgIGlzU2Npc3NvckVuYWJsZWQgPSBtX2NvbnRl
eHQtPmlzRW5hYmxlZChHcmFwaGljc0NvbnRleHQzRDo6U0NJU1NPUl9URVNUKTsKKyAgICAgICAg
ICAgIG1fY29udGV4dC0+ZGlzYWJsZShHcmFwaGljc0NvbnRleHQzRDo6U0NJU1NPUl9URVNUKTsK
KworICAgICAgICAgICAgbV9jb250ZXh0LT5jbGVhcihjbGVhck1hc2spOworCisgICAgICAgICAg
ICBpZiAoYXR0cmlidXRlcy5kZXB0aCkgeworICAgICAgICAgICAgICAgIG1fY29udGV4dC0+Y2xl
YXJEZXB0aChjbGVhckRlcHRoKTsKKyAgICAgICAgICAgICAgICBtX2NvbnRleHQtPmRlcHRoTWFz
ayhkZXB0aE1hc2spOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKGF0dHJpYnV0ZXMu
c3RlbmNpbCkgeworICAgICAgICAgICAgICAgIG1fY29udGV4dC0+Y2xlYXJTdGVuY2lsKGNsZWFy
U3RlbmNpbCk7CisgICAgICAgICAgICAgICAgbV9jb250ZXh0LT5zdGVuY2lsTWFza1NlcGFyYXRl
KEdyYXBoaWNzQ29udGV4dDNEOjpGUk9OVCwgc3RlbmNpbE1hc2spOworICAgICAgICAgICAgfQor
ICAgICAgICAgICAgaWYgKGlzU2Npc3NvckVuYWJsZWQpCisgICAgICAgICAgICAgICAgbV9jb250
ZXh0LT5lbmFibGUoR3JhcGhpY3NDb250ZXh0M0Q6OlNDSVNTT1JfVEVTVCk7CisgICAgICAgICAg
ICBlbHNlCisgICAgICAgICAgICAgICAgbV9jb250ZXh0LT5kaXNhYmxlKEdyYXBoaWNzQ29udGV4
dDNEOjpTQ0lTU09SX1RFU1QpOworICAgICAgICB9CiAgICAgfQotICAgIGlmIChpc1NjaXNzb3JF
bmFibGVkKQotICAgICAgICBtX2NvbnRleHQtPmVuYWJsZShHcmFwaGljc0NvbnRleHQzRDo6U0NJ
U1NPUl9URVNUKTsKLSAgICBlbHNlCi0gICAgICAgIG1fY29udGV4dC0+ZGlzYWJsZShHcmFwaGlj
c0NvbnRleHQzRDo6U0NJU1NPUl9URVNUKTsKLSAgICBpZiAoaXNEaXRoZXJFbmFibGVkKQotICAg
ICAgICBtX2NvbnRleHQtPmVuYWJsZShHcmFwaGljc0NvbnRleHQzRDo6RElUSEVSKTsKLSAgICBl
bHNlCi0gICAgICAgIG1fY29udGV4dC0+ZGlzYWJsZShHcmFwaGljc0NvbnRleHQzRDo6RElUSEVS
KTsKIAogICAgIG1fY29udGV4dC0+Zmx1c2goKTsKICAgICAKSW5kZXg6IFdlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvZ3B1L1RleHR1cmUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvZ3B1L1RleHR1cmUuY3BwCShyZXZpc2lvbiA3MzQwOSkKKysrIFdlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvZ3B1L1RleHR1cmUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMDYs
MTUgKzEwNiwxNSBAQCBQYXNzUmVmUHRyPFRleHR1cmU+IFRleHR1cmU6OmNyZWF0ZShHcmFwCiAK
ICAgICAgICAgSW50UmVjdCB0aWxlQm91bmRzV2l0aEJvcmRlciA9IHRpbGluZy50aWxlQm91bmRz
V2l0aEJvcmRlcihpKTsKIAotICAgIHVuc2lnbmVkIGludCBnbEZvcm1hdCA9IDA7Ci0gICAgdW5z
aWduZWQgaW50IGdsVHlwZSA9IDA7Ci0gICAgYm9vbCBzd2l6emxlOwotICAgIGNvbnZlcnRGb3Jt
YXQoY29udGV4dCwgZm9ybWF0LCAmZ2xGb3JtYXQsICZnbFR5cGUsICZzd2l6emxlKTsKLSAgICBj
b250ZXh0LT5iaW5kVGV4dHVyZShHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV8yRCwgdGV4dHVy
ZUlkKTsKLSAgICBjb250ZXh0LT50ZXhJbWFnZTJEKEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJF
XzJELCAwLCBnbEZvcm1hdCwKLSAgICAgICAgICAgIHRpbGVCb3VuZHNXaXRoQm9yZGVyLndpZHRo
KCksCi0gICAgICAgICAgICB0aWxlQm91bmRzV2l0aEJvcmRlci5oZWlnaHQoKSwKLSAgICAgICAg
ICAgIDAsIGdsRm9ybWF0LCBnbFR5cGUsIDApOworICAgICAgICB1bnNpZ25lZCBpbnQgZ2xGb3Jt
YXQgPSAwOworICAgICAgICB1bnNpZ25lZCBpbnQgZ2xUeXBlID0gMDsKKyAgICAgICAgYm9vbCBz
d2l6emxlOworICAgICAgICBjb252ZXJ0Rm9ybWF0KGNvbnRleHQsIGZvcm1hdCwgJmdsRm9ybWF0
LCAmZ2xUeXBlLCAmc3dpenpsZSk7CisgICAgICAgIGNvbnRleHQtPmJpbmRUZXh0dXJlKEdyYXBo
aWNzQ29udGV4dDNEOjpURVhUVVJFXzJELCB0ZXh0dXJlSWQpOworICAgICAgICBjb250ZXh0LT50
ZXhJbWFnZTJEUmVzb3VyY2VTYWZlKEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFXzJELCAwLCBn
bEZvcm1hdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aWxlQm91
bmRzV2l0aEJvcmRlci53aWR0aCgpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHRpbGVCb3VuZHNXaXRoQm9yZGVyLmhlaWdodCgpLAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIDAsIGdsRm9ybWF0LCBnbFR5cGUpOwogICAgIH0KICAgICBy
ZXR1cm4gYWRvcHRSZWYobmV3IFRleHR1cmUoY29udGV4dCwgdGV4dHVyZUlkcy5sZWFrUHRyKCks
IGZvcm1hdCwgd2lkdGgsIGhlaWdodCwgbWF4VGV4dHVyZVNpemUpKTsKIH0KSW5kZXg6IFdlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0dyYXBoaWNzQ29udGV4dDNET3BlbkdMLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9HcmFwaGljc0Nv
bnRleHQzRE9wZW5HTC5jcHAJKHJldmlzaW9uIDczMzE5KQorKysgV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9vcGVuZ2wvR3JhcGhpY3NDb250ZXh0M0RPcGVuR0wuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0xMzI0LDggKzEzMjQsMTEgQEAgbG9uZyBHcmFwaGljc0NvbnRleHQzRDo6Z2V0VmVydGV4
QXR0cmliTwogCiBpbnQgR3JhcGhpY3NDb250ZXh0M0Q6OnRleEltYWdlMkQodW5zaWduZWQgdGFy
Z2V0LCB1bnNpZ25lZCBsZXZlbCwgdW5zaWduZWQgaW50ZXJuYWxmb3JtYXQsIHVuc2lnbmVkIHdp
ZHRoLCB1bnNpZ25lZCBoZWlnaHQsIHVuc2lnbmVkIGJvcmRlciwgdW5zaWduZWQgZm9ybWF0LCB1
bnNpZ25lZCB0eXBlLCB2b2lkKiBwaXhlbHMpCiB7CisgICAgaWYgKHdpZHRoICYmIGhlaWdodCAm
JiAhcGl4ZWxzKSB7CisgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKElOVkFMSURfVkFMVUUpOwor
ICAgICAgICByZXR1cm4gMTsKKyAgICB9CiAgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Ci0KICAg
ICA6OmdsVGV4SW1hZ2UyRCh0YXJnZXQsIGxldmVsLCBpbnRlcm5hbGZvcm1hdCwgd2lkdGgsIGhl
aWdodCwgYm9yZGVyLCBmb3JtYXQsIHR5cGUsIHBpeGVscyk7CiAgICAgcmV0dXJuIDA7CiB9Cklu
ZGV4OiBXZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdC9jaHJv
bWl1bS9DaGFuZ2VMb2cJKHJldmlzaW9uIDczNDIwKQorKysgV2ViS2l0L2Nocm9taXVtL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDEzIEBACisyMDEwLTEyLTA2ICBaaGVueWFv
IE1vICA8em1vQGdvb2dsZS5jb20+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BT
ISkuCisKKyAgICAgICAgV2ViR0xSZW5kZXJpbmdDb250ZXh0IG5lZWRzIHRvIHplcm8gdGV4dHVy
ZXMgYW5kIHJlbmRlcmJ1ZmZlcnMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTQ5MzU1CisKKyAgICAgICAgKiBzcmMvV2ViR3JhcGhpY3NDb250ZXh0M0RE
ZWZhdWx0SW1wbC5jcHA6CisgICAgICAgIChXZWJLaXQ6OldlYkdyYXBoaWNzQ29udGV4dDNERGVm
YXVsdEltcGw6OnRleEltYWdlMkQpOiBEb24ndCBkZWFsIHdpdGggdGV4dHVyZSBpbml0aWFsaXph
dGlvbiBhdCB0aGlzIGxldmVsOyBnZW5lcmF0ZSBhbiBJTlZBTElEX1ZBTFVFIGlmIHBpeGVscz09
bnVsbCBpcyBwYXNzZWQgaW4uCisKIDIwMTAtMTItMDYgIE5hdGUgQ2hhcGluICA8amFwaGV0QGNo
cm9taXVtLm9yZz4KIAogICAgICAgICBSZXZpZXdlZCBieSBBZGFtIEJhcnRoLgpJbmRleDogV2Vi
S2l0L2Nocm9taXVtL3NyYy9XZWJHcmFwaGljc0NvbnRleHQzRERlZmF1bHRJbXBsLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBXZWJLaXQvY2hyb21pdW0vc3JjL1dlYkdyYXBoaWNzQ29udGV4dDNERGVmYXVs
dEltcGwuY3BwCShyZXZpc2lvbiA3MzMxOSkKKysrIFdlYktpdC9jaHJvbWl1bS9zcmMvV2ViR3Jh
cGhpY3NDb250ZXh0M0REZWZhdWx0SW1wbC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEyNjAsNjgg
KzEyNjAsMTMgQEAgREVMRUdBVEVfVE9fR0xfMihzYW1wbGVDb3ZlcmFnZSwgU2FtcGxlQwogCiBE
RUxFR0FURV9UT19HTF80KHNjaXNzb3IsIFNjaXNzb3IsIGxvbmcsIGxvbmcsIHVuc2lnbmVkIGxv
bmcsIHVuc2lnbmVkIGxvbmcpCiAKLXVuc2lnbmVkIGJ5dGVzUGVyQ29tcG9uZW50KHVuc2lnbmVk
IHR5cGUpCi17Ci0gICAgc3dpdGNoICh0eXBlKSB7Ci0gICAgY2FzZSBHTF9CWVRFOgotICAgIGNh
c2UgR0xfVU5TSUdORURfQllURToKLSAgICAgICAgcmV0dXJuIDE7Ci0gICAgY2FzZSBHTF9TSE9S
VDoKLSAgICBjYXNlIEdMX1VOU0lHTkVEX1NIT1JUOgotICAgIGNhc2UgR0xfVU5TSUdORURfU0hP
UlRfNV82XzU6Ci0gICAgY2FzZSBHTF9VTlNJR05FRF9TSE9SVF80XzRfNF80OgotICAgIGNhc2Ug
R0xfVU5TSUdORURfU0hPUlRfNV81XzVfMToKLSAgICAgICAgcmV0dXJuIDI7Ci0gICAgY2FzZSBH
TF9GTE9BVDoKLSAgICAgICAgcmV0dXJuIDQ7Ci0gICAgZGVmYXVsdDoKLSAgICAgICAgcmV0dXJu
IDQ7Ci0gICAgfQotfQotCi11bnNpZ25lZCBjb21wb25lbnRzUGVyUGl4ZWwodW5zaWduZWQgZm9y
bWF0LCB1bnNpZ25lZCB0eXBlKQotewotICAgIHN3aXRjaCAodHlwZSkgewotICAgIGNhc2UgR0xf
VU5TSUdORURfU0hPUlRfNV82XzU6Ci0gICAgY2FzZSBHTF9VTlNJR05FRF9TSE9SVF80XzRfNF80
OgotICAgIGNhc2UgR0xfVU5TSUdORURfU0hPUlRfNV81XzVfMToKLSAgICAgICAgcmV0dXJuIDE7
Ci0gICAgZGVmYXVsdDoKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotICAgIHN3aXRjaCAoZm9ybWF0
KSB7Ci0gICAgY2FzZSBHTF9MVU1JTkFOQ0U6Ci0gICAgICAgIHJldHVybiAxOwotICAgIGNhc2Ug
R0xfTFVNSU5BTkNFX0FMUEhBOgotICAgICAgICByZXR1cm4gMjsKLSAgICBjYXNlIEdMX1JHQjoK
LSAgICAgICAgcmV0dXJuIDM7Ci0gICAgY2FzZSBHTF9SR0JBOgotICAgIGNhc2UgR0xfQkdSQV9F
WFQ6Ci0gICAgICAgIHJldHVybiA0OwotICAgIGRlZmF1bHQ6Ci0gICAgICAgIHJldHVybiA0Owot
ICAgIH0KLX0KLQotLy8gTi5CLjogIFRoaXMgY29kZSBkb2VzIG5vdCBwcm90ZWN0IGFnYWluc3Qg
aW50ZWdlciBvdmVyZmxvdyAoYXMgdGhlIGNvbW1hbmQKLS8vIGJ1ZmZlciBpbXBsZW1lbnRhdGlv
biBkb2VzKSwgc28gaXQgc2hvdWxkIG5vdCBiZSBjb25zaWRlcmVkIHJvYnVzdCBlbm91Z2gKLS8v
IGZvciB1c2UgaW4gdGhlIGJyb3dzZXIuICBTaW5jZSB0aGlzIGltcGxlbWVudGF0aW9uIGlzIG9u
bHkgdXNlZCBmb3IgbGF5b3V0Ci0vLyB0ZXN0cywgdGhpcyBzaG91bGQgYmUgb2sgZm9yIG5vdy4K
LXNpemVfdCBpbWFnZVNpemVJbkJ5dGVzKHVuc2lnbmVkIHdpZHRoLCB1bnNpZ25lZCBoZWlnaHQs
IHVuc2lnbmVkIGZvcm1hdCwgdW5zaWduZWQgdHlwZSkKLXsKLSAgICByZXR1cm4gd2lkdGggKiBo
ZWlnaHQgKiBieXRlc1BlckNvbXBvbmVudCh0eXBlKSAqIGNvbXBvbmVudHNQZXJQaXhlbChmb3Jt
YXQsIHR5cGUpOwotfQotCiB2b2lkIFdlYkdyYXBoaWNzQ29udGV4dDNERGVmYXVsdEltcGw6OnRl
eEltYWdlMkQodW5zaWduZWQgdGFyZ2V0LCB1bnNpZ25lZCBsZXZlbCwgdW5zaWduZWQgaW50ZXJu
YWxGb3JtYXQsIHVuc2lnbmVkIHdpZHRoLCB1bnNpZ25lZCBoZWlnaHQsIHVuc2lnbmVkIGJvcmRl
ciwgdW5zaWduZWQgZm9ybWF0LCB1bnNpZ25lZCB0eXBlLCBjb25zdCB2b2lkKiBwaXhlbHMpCiB7
Ci0gICAgT3duQXJyYXlQdHI8dWludDg+IHplcm87Ci0gICAgaWYgKCFwaXhlbHMpIHsKLSAgICAg
ICAgc2l6ZV90IHNpemUgPSBpbWFnZVNpemVJbkJ5dGVzKHdpZHRoLCBoZWlnaHQsIGZvcm1hdCwg
dHlwZSk7Ci0gICAgICAgIHplcm8uc2V0KG5ldyB1aW50OFtzaXplXSk7Ci0gICAgICAgIG1lbXNl
dCh6ZXJvLmdldCgpLCAwLCBzaXplKTsKLSAgICAgICAgcGl4ZWxzID0gemVyby5nZXQoKTsKKyAg
ICBpZiAod2lkdGggJiYgaGVpZ2h0ICYmICFwaXhlbHMpIHsKKyAgICAgICAgc3ludGhlc2l6ZUdM
RXJyb3IoR0xfSU5WQUxJRF9WQUxVRSk7CisgICAgICAgIHJldHVybjsKICAgICB9CisgICAgbWFr
ZUNvbnRleHRDdXJyZW50KCk7CiAgICAgZ2xUZXhJbWFnZTJEKHRhcmdldCwgbGV2ZWwsIGludGVy
bmFsRm9ybWF0LCB3aWR0aCwgaGVpZ2h0LCBib3JkZXIsIGZvcm1hdCwgdHlwZSwgcGl4ZWxzKTsK
IH0KIApJbmRleDogTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRl
c3RzL0NoYW5nZUxvZwkocmV2aXNpb24gNzM0MjApCisrKyBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cJ
KHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwxMyBAQAorMjAxMC0xMi0wNiAgWmhlbnlhbyBNbyAg
PHptb0Bnb29nbGUuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgor
CisgICAgICAgIFdlYkdMUmVuZGVyaW5nQ29udGV4dCBuZWVkcyB0byB6ZXJvIHRleHR1cmVzIGFu
ZCByZW5kZXJidWZmZXJzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD00OTM1NQorCisgICAgICAgICogZmFzdC9jYW52YXMvd2ViZ2wvdW5pbml0aWFsaXpl
ZC10ZXN0LWV4cGVjdGVkLnR4dDogQWRkZWQuCisgICAgICAgICogZmFzdC9jYW52YXMvd2ViZ2wv
dW5pbml0aWFsaXplZC10ZXN0Lmh0bWw6IEFkZGVkLgorCiAyMDEwLTEyLTA2ICBWaWN0b3IgV2Fu
ZyAgPHZpY3RvcndAY2hyb21pdW0ub3JnPgogCiAgICAgICAgIFVucmV2aWV3ZWQuCkluZGV4OiBM
YXlvdXRUZXN0cy9mYXN0L2NhbnZhcy93ZWJnbC91bmluaXRpYWxpemVkLXRlc3QtZXhwZWN0ZWQu
dHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2Zhc3QvY2FudmFzL3dlYmdsL3VuaW5pdGlh
bGl6ZWQtdGVzdC1leHBlY3RlZC50eHQJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9mYXN0
L2NhbnZhcy93ZWJnbC91bmluaXRpYWxpemVkLXRlc3QtZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAw
KQpAQCAtMCwwICsxLDEzIEBACitUZXN0cyB0byBjaGVjayB1c2VyIGNvZGUgY2Fubm90IGFjY2Vz
cyB1bmluaXRpYWxpemVkIGRhdGEgZnJvbSBHTCByZXNvdXJjZXMuCisKK09uIHN1Y2Nlc3MsIHlv
dSB3aWxsIHNlZSBhIHNlcmllcyBvZiAiUEFTUyIgbWVzc2FnZXMsIGZvbGxvd2VkIGJ5ICJURVNU
IENPTVBMRVRFIi4KKworUEFTUyBDb250ZXh0IGNyZWF0ZWQuCitSZWFkaW5nIGFuIHVuaW5pdGlh
bGl6ZWQgdGV4dHVyZSBzaG91bGQgc3VjY2VlZCB3aXRoIGFsbCBieXRlcyBzZXQgdG8gMC4KK1BB
U1MgQWxsIGRhdGEgaW5pdGlhbGl6ZWQKK1BBU1MgZ2V0RXJyb3Igd2FzIGV4cGVjdGVkIHZhbHVl
OiBOT19FUlJPUiA6IAorCitQQVNTIHN1Y2Nlc3NmdWxseVBhcnNlZCBpcyB0cnVlCisKK1RFU1Qg
Q09NUExFVEUKKwpJbmRleDogTGF5b3V0VGVzdHMvZmFzdC9jYW52YXMvd2ViZ2wvdW5pbml0aWFs
aXplZC10ZXN0Lmh0bWwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvZmFzdC9jYW52YXMvd2Vi
Z2wvdW5pbml0aWFsaXplZC10ZXN0Lmh0bWwJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9m
YXN0L2NhbnZhcy93ZWJnbC91bmluaXRpYWxpemVkLXRlc3QuaHRtbAkocmV2aXNpb24gMCkKQEAg
LTAsMCArMSw5MSBAQAorPCFkb2N0eXBlIGh0bWw+Cis8aHRtbD4KKzxoZWFkPgorPG1ldGEgaHR0
cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9dXRmLTgi
PgorPHRpdGxlPldlYkdMIFVuaW5pdGlhbGl6ZWQgR0wgUmVzb3VyY2VzIFRlc3RzPC90aXRsZT4K
KzxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iLi4vLi4vanMvcmVzb3VyY2VzL2pzLXRlc3Qt
c3R5bGUuY3NzIi8+Cis8c2NyaXB0IHNyYz0iLi4vLi4vanMvcmVzb3VyY2VzL2pzLXRlc3QtcHJl
LmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSJyZXNvdXJjZXMvd2ViZ2wtdGVzdC5qcyI+PC9z
Y3JpcHQ+Cis8L2hlYWQ+Cis8Ym9keT4KKzxkaXYgaWQ9ImRlc2NyaXB0aW9uIj48L2Rpdj4KKzxk
aXYgaWQ9ImNvbnNvbGUiPjwvZGl2PgorPGNhbnZhcyBpZD0iY2FudmFzIiB3aWR0aD0iMiIgaGVp
Z2h0PSIyIj4gPC9jYW52YXM+Cis8c2NyaXB0PgorZGVzY3JpcHRpb24oIlRlc3RzIHRvIGNoZWNr
IHVzZXIgY29kZSBjYW5ub3QgYWNjZXNzIHVuaW5pdGlhbGl6ZWQgZGF0YSBmcm9tIEdMIHJlc291
cmNlcy4iKTsKKwordmFyIGNhbnZhcyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJjYW52YXMi
KTsKK3ZhciBnbCA9IGNyZWF0ZTNEQ29udGV4dChjYW52YXMpOworaWYgKCFnbCkKKyAgdGVzdEZh
aWxlZCgiQ29udGV4dCBjcmVhdGVkLiIpOworZWxzZQorICB0ZXN0UGFzc2VkKCJDb250ZXh0IGNy
ZWF0ZWQuIik7CisKK2RlYnVnKCJSZWFkaW5nIGFuIHVuaW5pdGlhbGl6ZWQgdGV4dHVyZSBzaG91
bGQgc3VjY2VlZCB3aXRoIGFsbCBieXRlcyBzZXQgdG8gMC4iKTsKKwordmFyIHdpZHRoID0gNTEy
OwordmFyIGhlaWdodCA9IDUxMjsKK3ZhciBicHAgPSA0OwordmFyIGV4cGVjdGVkRGF0YUxlbmd0
aCA9IHdpZHRoKmhlaWdodCpicHA7CisKK3ZhciB0ZXggPSBnbC5jcmVhdGVUZXh0dXJlKCk7Citn
bC5iaW5kVGV4dHVyZShnbC5URVhUVVJFXzJELCB0ZXgpOworZ2wudGV4SW1hZ2UyRChnbC5URVhU
VVJFXzJELCAwLCBnbC5SR0JBLCB3aWR0aCwgaGVpZ2h0LCAwLCBnbC5SR0JBLCBnbC5VTlNJR05F
RF9CWVRFLCBudWxsKTsKKworLy8gdGhpcyBjYW4gYmUgcXVpdGUgdW5kZXRlcm1pbmlzdGljIHNv
IHRvIGltcHJvdmUgb2RkcyBvZiBzZWVpbmcgdW5pbml0aWFsaXplZCBkYXRhIHdyaXRlIGJpdHMK
Ky8vIGludG8gdGV4IHRoZW4gZGVsZXRlIHRleHR1cmUgdGhlbiByZS1jcmVhdGUgb25lIHdpdGgg
c2FtZSBjaGFyYWN0ZXJpc3RpY3MgKGRyaXZlciB3aWxsIGxpa2VseSByZXVzZSBtZW0pCisvLyB3
aXRoIHRoaXMgdHJpY2sgb24gcjU5MDQ2IFdlYktpdC9PU1ggSSBnZXQgRkFJTCAxMDAlIG9mIHRo
ZSB0aW1lIGluc3RlYWQgb2YgfjE1JSBvZiB0aGUgdGltZS4KKwordmFyIGJhZERhdGEgPSBuZXcg
VWludDhBcnJheShleHBlY3RlZERhdGFMZW5ndGgpOworZm9yICh2YXIgaSA9IDA7IGkgPCBiYWRE
YXRhLmxlbmd0aDsgKytpKQorICAgIGJhZERhdGFbaV0gPSBpICUgMjU1OworCitnbC50ZXhTdWJJ
bWFnZTJEKGdsLlRFWFRVUkVfMkQsIDAsIDAsIDAsIHdpZHRoLCBoZWlnaHQsIGdsLlJHQkEsIGds
LlVOU0lHTkVEX0JZVEUsIGJhZERhdGEpOworZ2wuZmluaXNoKCk7IC8vIG1ha2Ugc3VyZSBpdCBo
YXMgYmVlbiB1cGxvYWRlZAorCitnbC5kZWxldGVUZXh0dXJlKHRleCk7CitnbC5maW5pc2goKTsg
Ly8gbWFrZSBzdXJlIGl0IGhhcyBiZWVuIGRlbGV0ZWQKKwordmFyIHRleCA9IGdsLmNyZWF0ZVRl
eHR1cmUoKTsKK2dsLmJpbmRUZXh0dXJlKGdsLlRFWFRVUkVfMkQsIHRleCk7CitnbC50ZXhJbWFn
ZTJEKGdsLlRFWFRVUkVfMkQsIDAsIGdsLlJHQkEsIHdpZHRoLCBoZWlnaHQsIDAsIGdsLlJHQkEs
IGdsLlVOU0lHTkVEX0JZVEUsIG51bGwpOworCit2YXIgZmIgPSBnbC5jcmVhdGVGcmFtZWJ1ZmZl
cigpOworZ2wuYmluZEZyYW1lYnVmZmVyKGdsLkZSQU1FQlVGRkVSLCBmYik7CitnbC5mcmFtZWJ1
ZmZlclRleHR1cmUyRChnbC5GUkFNRUJVRkZFUiwgZ2wuQ09MT1JfQVRUQUNITUVOVDAsIGdsLlRF
WFRVUkVfMkQsIHRleCwgMCk7CisKK2RhdGEgPSBuZXcgVWludDhBcnJheSh3aWR0aCAqIGhlaWdo
dCAqIDQpOworZ2wucmVhZFBpeGVscygwLCAwLCB3aWR0aCwgaGVpZ2h0LCBnbC5SR0JBLCBnbC5V
TlNJR05FRF9CWVRFLCBkYXRhKTsKKworaWYgKGRhdGEubGVuZ3RoICE9IGV4cGVjdGVkRGF0YUxl
bmd0aCkgeworICAgIHRlc3RGYWlsZWQoImV4cGVjdGVkIGRhdGEgbGVuZ3RoICIgKyBleHBlY3Rl
ZERhdGFMZW5ndGggKyAiIGJ1dCBnb3QgIiArIGRhdGEubGVuZ3RoICsgIiBpbnN0ZWFkLiIpOwor
fSBlbHNlIHsKKyAgICB2YXIgayA9IDA7CisgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBkYXRhLmxl
bmd0aDsgKytpKSB7CisgICAgICAgIGlmIChkYXRhW2ldICE9IDApIHsKKyAgICAgICAgICAgIGsr
KzsKKyAgICAgICAgfQorICAgIH0KKworICAgIGlmIChrKSB7CisgICAgICAgIHRlc3RGYWlsZWQo
IkZvdW5kICIgKyBrICsgIiBub24temVybyBieXRlcyIpOworICAgIH0gZWxzZSB7CisgICAgICAg
IHRlc3RQYXNzZWQoIkFsbCBkYXRhIGluaXRpYWxpemVkIik7CisgICAgfQorfQorCitnbEVycm9y
U2hvdWxkQmUoZ2wsIGdsLk5PX0VSUk9SKTsKKworLy9UT0RPOiB1bmluaXRpYWxpemVkIHZlcnRl
eCBhcnJheSBidWZmZXIKKy8vVE9ETzogdW5pbml0aWFsaXplZCB2ZXJ0ZXggZWxlbWVudHMgYnVm
ZmVyCisvL1RPRE86IHVuaW5pdGlhbGl6ZWQgZnJhbWVidWZmZXI/IChpbXBsZW1lbnRhdGlvbnMg
d291bGQgbmVlZCB0byBkbyBhIEdMIGNsZWFyIGF0IGZpcnN0IGJpbmRpbmc/KQorLy9UT0RPOiB1
bmluaXRpYWxpemVkIHJlbmRlcmJ1ZmZlcj8gKGltcGxlbWVudGF0aW9ucyB3b3VsZCBuZWVkIHRv
IGRvIGEgR0wgY2xlYXIgYXQgZmlyc3QgYmluZGluZz8pCisvL1RPRE86IHVuaW5pdGlhbGl6ZWQg
dW5pZm9ybSBhcnJheXM/CisKK2RlYnVnKCIiKTsKK3N1Y2Nlc3NmdWxseVBhcnNlZCA9IHRydWU7
Cis8L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSIuLi8uLi9qcy9yZXNvdXJjZXMvanMtdGVzdC1wb3N0
LmpzIj48L3NjcmlwdD4KKzwvYm9keT4KKzwvaHRtbD4KKwo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>76148</attachid>
            <date>2010-12-09 18:07:28 -0800</date>
            <delta_ts>2010-12-13 09:33:02 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-49355-20101209180727.patch</filename>
            <type>text/plain</type>
            <size>35225</size>
            <attacher name="Zhenyao Mo">zmo</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA3MzYzNCkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsNDQgQEAKKzIwMTAtMTItMDYgIFpoZW55YW8gTW8gIDx6bW9AZ29vZ2xlLmNvbT4K
KworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBXZWJHTFJl
bmRlcmluZ0NvbnRleHQgbmVlZHMgdG8gemVybyB0ZXh0dXJlcyBhbmQgcmVuZGVyYnVmZmVycwor
ICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NDkzNTUKKwor
ICAgICAgICBUZXN0OiBmYXN0L2NhbnZhcy93ZWJnbC91bmluaXRpYWxpemVkLXRlc3QuaHRtbAor
CisgICAgICAgICogaHRtbC9jYW52YXMvV2ViR0xGcmFtZWJ1ZmZlci5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpXZWJHTEZyYW1lYnVmZmVyOjpvbkFjY2Vzcyk6IFVzZSBhIHBhcmFtZXRlciB0byBk
ZWNpZGUgaWYgcmVuZGVyYnVmZmVyIGluaXRpYWxpemF0aW9uIGlzIG5lZWRlZC4KKyAgICAgICAg
KFdlYkNvcmU6OldlYkdMRnJhbWVidWZmZXI6OmluaXRpYWxpemVSZW5kZXJidWZmZXJzKTogRG9u
J3QgcmV0dXJuIGZhbHNlIGlmIGNvbG9yIGJ1ZmZlciBkb2Vzbid0IGV4aXN0LgorICAgICAgICAq
IGh0bWwvY2FudmFzL1dlYkdMRnJhbWVidWZmZXIuaDogTW9kaWZ5IG9uQWNjZXNzIGZ1bmN0aW9u
IHNpZ25hdHVyZS4KKyAgICAgICAgKiBodG1sL2NhbnZhcy9XZWJHTFJlbmRlcmluZ0NvbnRleHQu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0OjpjbGVhcik6IENh
bGwgb25BY2Nlc3Mgd2l0aCBhbiBhZGRlZCBwYXJhbWV0ZXIuCisgICAgICAgIChXZWJDb3JlOjpX
ZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmNvcHlUZXhJbWFnZTJEKTogRGl0dG8uCisgICAgICAgIChX
ZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmNvcHlUZXhTdWJJbWFnZTJEKTogRGl0dG8u
CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmRyYXdBcnJheXMpOiBE
aXR0by4KKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dDo6ZHJhd0VsZW1l
bnRzKTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnJl
YWRQaXhlbHMpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4
dDo6dGV4SW1hZ2UyREJhc2UpOiBDcmVhdGUgYnVmZmVyIGRhdGEgb2YgMHMgaWYgaW5wdXQgaXMg
bnVsbCB0byBpbml0aWFsaXplIHRleHR1cmVzLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNz
L0dyYXBoaWNzQ29udGV4dDNELmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4
dDNEOjp0ZXhJbWFnZTJEUmVzb3VyY2VTYWZlKTogSGVscGVyIGZ1bmN0aW9uIHRoYXQgaW5pdGlh
bGl6ZSBhbGwgcGl4ZWxzIHRvIDAuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhp
Y3NDb250ZXh0M0QuaDoKKyAgICAgICAgKiBQbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9DYW52
YXMyRExheWVyQ2hyb21pdW0uY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q2FudmFzMkRMYXllckNo
cm9taXVtOjp1cGRhdGVDb250ZW50cyk6IENyZWF0ZSBidWZmZXIgZGF0YSBvZiAwcyBpZiBpbnB1
dCBpcyBudWxsIHRvIGluaXRpYWxpemUgdGV4dHVyZXMuCisgICAgICAgICogcGxhdGZvcm0vZ3Jh
cGhpY3MvY2hyb21pdW0vRHJhd2luZ0J1ZmZlckNocm9taXVtLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OmdlbmVyYXRlQ29sb3JUZXh0dXJlKTogRGl0dG8uCisgICAgICAgICogcGxhdGZvcm0vZ3Jh
cGhpY3MvY2hyb21pdW0vTGF5ZXJSZW5kZXJlckNocm9taXVtLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OkxheWVyUmVuZGVyZXJDaHJvbWl1bTo6cHJlcGFyZVRvRHJhd0xheWVycyk6IERpdHRvLgor
ICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1JlbmRlclN1cmZhY2VDaHJvbWl1
bS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJTdXJmYWNlQ2hyb21pdW06OnByZXBhcmVD
b250ZW50c1RleHR1cmUpOiBEaXR0by4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJv
bWl1bS9WaWRlb0xheWVyQ2hyb21pdW0uY3BwOgorICAgICAgICAoV2ViQ29yZTo6VmlkZW9MYXll
ckNocm9taXVtOjphbGxvY2F0ZVRleHR1cmUpOiBEaXR0by4KKyAgICAgICAgKiBwbGF0Zm9ybS9n
cmFwaGljcy9ncHUvRHJhd2luZ0J1ZmZlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpEcmF3aW5n
QnVmZmVyOjpyZXNldCk6IENyZWF0ZSBidWZmZXIgZGF0YSBvZiAwcyBpZiBpbnB1dCBpcyBudWxs
IHRvIGluaXRpYWxpemUgdGV4dHVyZXM7IGFsc28sIG9ubHkgY2xlYW4gdGhlIGRlcHRoL3N0ZW5j
aWwgYnVmZmVyIGxhdGVyLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2dwdS9UZXh0dXJl
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlRleHR1cmU6OmNyZWF0ZSk6IENyZWF0ZSBidWZmZXIg
ZGF0YSBvZiAwcyBpZiBpbnB1dCBpcyBudWxsIHRvIGluaXRpYWxpemUgdGV4dHVyZXMuCisgICAg
ICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0dyYXBoaWNzQ29udGV4dDNET3BlbkdMLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjp0ZXhJbWFnZTJEKTogR2Vu
ZXJhdGUgYW4gSU5WQUxJRF9WQUxVRSBpZiBwaXhlbHM9PW51bGwgaXMgcGFzc2VkLgorCiAyMDEw
LTEyLTA5ICBZYWVsIEFoYXJvbiAgPHlhZWwuYWhhcm9uQG5va2lhLmNvbT4KIAogICAgICAgICBS
ZXZpZXdlZCBieSBBbnRvbmlvIEdvbWVzLgpJbmRleDogV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJH
TEZyYW1lYnVmZmVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdM
RnJhbWVidWZmZXIuY3BwCShyZXZpc2lvbiA3MzMxOSkKKysrIFdlYkNvcmUvaHRtbC9jYW52YXMv
V2ViR0xGcmFtZWJ1ZmZlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE4MSwxMSArMTgxLDEzIEBA
IGJvb2wgV2ViR0xGcmFtZWJ1ZmZlcjo6aXNJbmNvbXBsZXRlKGJvb2wKICAgICByZXR1cm4gZmFs
c2U7CiB9CiAKLWJvb2wgV2ViR0xGcmFtZWJ1ZmZlcjo6b25BY2Nlc3MoKQorYm9vbCBXZWJHTEZy
YW1lYnVmZmVyOjpvbkFjY2Vzcyhib29sIG5lZWRUb0luaXRpYWxpemVSZW5kZXJidWZmZXJzKQog
ewogICAgIGlmIChpc0luY29tcGxldGUodHJ1ZSkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKLSAg
ICByZXR1cm4gaW5pdGlhbGl6ZVJlbmRlcmJ1ZmZlcnMoKTsKKyAgICBpZiAobmVlZFRvSW5pdGlh
bGl6ZVJlbmRlcmJ1ZmZlcnMpCisgICAgICAgIHJldHVybiBpbml0aWFsaXplUmVuZGVyYnVmZmVy
cygpOworICAgIHJldHVybiB0cnVlOwogfQogCiB2b2lkIFdlYkdMRnJhbWVidWZmZXI6OmRlbGV0
ZU9iamVjdEltcGwoUGxhdGZvcm0zRE9iamVjdCBvYmplY3QpCkBAIC0yMDEsOCArMjAzLDYgQEAg
dm9pZCBXZWJHTEZyYW1lYnVmZmVyOjpkZWxldGVPYmplY3RJbXBsKAogYm9vbCBXZWJHTEZyYW1l
YnVmZmVyOjppbml0aWFsaXplUmVuZGVyYnVmZmVycygpCiB7CiAgICAgQVNTRVJUKG9iamVjdCgp
KTsKLSAgICBpZiAoIWlzQ29sb3JBdHRhY2hlZCgpKQotICAgICAgICByZXR1cm4gZmFsc2U7CiAg
ICAgYm9vbCBpbml0Q29sb3IgPSBmYWxzZSwgaW5pdERlcHRoID0gZmFsc2UsIGluaXRTdGVuY2ls
ID0gZmFsc2U7CiAgICAgdW5zaWduZWQgbG9uZyBtYXNrID0gMDsKICAgICBpZiAoaXNVbmluaXRp
YWxpemVkKG1fY29sb3JBdHRhY2htZW50LmdldCgpKSkgewpJbmRleDogV2ViQ29yZS9odG1sL2Nh
bnZhcy9XZWJHTEZyYW1lYnVmZmVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9odG1sL2NhbnZh
cy9XZWJHTEZyYW1lYnVmZmVyLmgJKHJldmlzaW9uIDczMzE5KQorKysgV2ViQ29yZS9odG1sL2Nh
bnZhcy9XZWJHTEZyYW1lYnVmZmVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTUwLDggKzUwLDkgQEAg
cHVibGljOgogICAgIC8vIHJlYWRQaXhlbHMsIGNvcHlUZXhJbWFnZTJELCBjb3B5VGV4U3ViSW1h
Z2UyRCBpZiB0aGlzIGZyYW1lYnVmZmVyIGlzCiAgICAgLy8gY3VycmVudGx5IGJvdW5kLgogICAg
IC8vIFJldHVybiBmYWxzZSBpZiB0aGUgZnJhbWVidWZmZXIgaXMgaW5jb21wbGV0ZTsgb3RoZXJ3
aXNlIGluaXRpYWxpemUKLSAgICAvLyB0aGUgYnVmZmVycyBpZiB0aGV5IGhhdmVuJ3QgYmVlbiBp
bml0aWFsaXplZC4KLSAgICBib29sIG9uQWNjZXNzKCk7CisgICAgLy8gdGhlIGJ1ZmZlcnMgaWYg
dGhleSBoYXZlbid0IGJlZW4gaW5pdGlhbGl6ZWQgYW5kCisgICAgLy8gbmVlZFRvSW5pdGlhbGl6
ZVJlbmRlcmJ1ZmZlcnMgaXMgdHJ1ZS4KKyAgICBib29sIG9uQWNjZXNzKGJvb2wgbmVlZFRvSW5p
dGlhbGl6ZVJlbmRlcmJ1ZmZlcnMpOwogCiAgICAgLy8gUmV0dXJuIGZhbHNlIGRvZXMgbm90IG1l
YW4gQ09NUExFVEUsIG1pZ2h0IHN0aWxsIGJlIElOQ09NUExFVEUuCiAgICAgYm9vbCBpc0luY29t
cGxldGUoYm9vbCBjaGVja0ludGVybmFsRm9ybWF0KSBjb25zdDsKSW5kZXg6IFdlYkNvcmUvaHRt
bC9jYW52YXMvV2ViR0xSZW5kZXJpbmdDb250ZXh0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3Jl
L2h0bWwvY2FudmFzL1dlYkdMUmVuZGVyaW5nQ29udGV4dC5jcHAJKHJldmlzaW9uIDczMzE5KQor
KysgV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFJlbmRlcmluZ0NvbnRleHQuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC01NDQsNyArNTQ0LDcgQEAgdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmNs
ZWFyKHVuc2lnbgogICAgICAgICBtX2NvbnRleHQtPnN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNz
Q29udGV4dDNEOjpJTlZBTElEX1ZBTFVFKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KLSAgICBp
ZiAobV9mcmFtZWJ1ZmZlckJpbmRpbmcgJiYgIW1fZnJhbWVidWZmZXJCaW5kaW5nLT5vbkFjY2Vz
cygpKSB7CisgICAgaWYgKG1fZnJhbWVidWZmZXJCaW5kaW5nICYmICFtX2ZyYW1lYnVmZmVyQmlu
ZGluZy0+b25BY2Nlc3MoIWlzUmVzb3VyY2VTYWZlKCkpKSB7CiAgICAgICAgIG1fY29udGV4dC0+
c3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfRlJBTUVCVUZGRVJf
T1BFUkFUSU9OKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KQEAgLTYyMiw3ICs2MjIsNyBAQCB2
b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6Y29weVRleEltYWdlCiAgICAgICAgIG1fY29udGV4
dC0+c3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfVkFMVUUpOwog
ICAgICAgICByZXR1cm47CiAgICAgfQotICAgIGlmIChtX2ZyYW1lYnVmZmVyQmluZGluZyAmJiAh
bV9mcmFtZWJ1ZmZlckJpbmRpbmctPm9uQWNjZXNzKCkpIHsKKyAgICBpZiAobV9mcmFtZWJ1ZmZl
ckJpbmRpbmcgJiYgIW1fZnJhbWVidWZmZXJCaW5kaW5nLT5vbkFjY2VzcyghaXNSZXNvdXJjZVNh
ZmUoKSkpIHsKICAgICAgICAgbV9jb250ZXh0LT5zeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0Nv
bnRleHQzRDo6SU5WQUxJRF9GUkFNRUJVRkZFUl9PUEVSQVRJT04pOwogICAgICAgICByZXR1cm47
CiAgICAgfQpAQCAtNjQ3LDcgKzY0Nyw3IEBAIHZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojpj
b3B5VGV4U3ViSW0KICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQogICAgIH0KLSAgICBp
ZiAobV9mcmFtZWJ1ZmZlckJpbmRpbmcgJiYgIW1fZnJhbWVidWZmZXJCaW5kaW5nLT5vbkFjY2Vz
cygpKSB7CisgICAgaWYgKG1fZnJhbWVidWZmZXJCaW5kaW5nICYmICFtX2ZyYW1lYnVmZmVyQmlu
ZGluZy0+b25BY2Nlc3MoIWlzUmVzb3VyY2VTYWZlKCkpKSB7CiAgICAgICAgIG1fY29udGV4dC0+
c3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfRlJBTUVCVUZGRVJf
T1BFUkFUSU9OKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KQEAgLTEwNzgsNyArMTA3OCw3IEBA
IHZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpkcmF3QXJyYXlzKHUKICAgICAgICAgfQogICAg
IH0KIAotICAgIGlmIChtX2ZyYW1lYnVmZmVyQmluZGluZyAmJiAhbV9mcmFtZWJ1ZmZlckJpbmRp
bmctPm9uQWNjZXNzKCkpIHsKKyAgICBpZiAobV9mcmFtZWJ1ZmZlckJpbmRpbmcgJiYgIW1fZnJh
bWVidWZmZXJCaW5kaW5nLT5vbkFjY2VzcyghaXNSZXNvdXJjZVNhZmUoKSkpIHsKICAgICAgICAg
bV9jb250ZXh0LT5zeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9G
UkFNRUJVRkZFUl9PUEVSQVRJT04pOwogICAgICAgICByZXR1cm47CiAgICAgfQpAQCAtMTE0Miw3
ICsxMTQyLDcgQEAgdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmRyYXdFbGVtZW50cwogICAg
ICAgICB9CiAgICAgfQogCi0gICAgaWYgKG1fZnJhbWVidWZmZXJCaW5kaW5nICYmICFtX2ZyYW1l
YnVmZmVyQmluZGluZy0+b25BY2Nlc3MoKSkgeworICAgIGlmIChtX2ZyYW1lYnVmZmVyQmluZGlu
ZyAmJiAhbV9mcmFtZWJ1ZmZlckJpbmRpbmctPm9uQWNjZXNzKCFpc1Jlc291cmNlU2FmZSgpKSkg
ewogICAgICAgICBtX2NvbnRleHQtPnN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNE
OjpJTlZBTElEX0ZSQU1FQlVGRkVSX09QRVJBVElPTik7CiAgICAgICAgIHJldHVybjsKICAgICB9
CkBAIC0yMjYzLDcgKzIyNjMsNyBAQCB2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6cmVhZFBp
eGVscyhsCiAgICAgICAgIG1fY29udGV4dC0+c3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250
ZXh0M0Q6OklOVkFMSURfT1BFUkFUSU9OKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KLSAgICBp
ZiAobV9mcmFtZWJ1ZmZlckJpbmRpbmcgJiYgIW1fZnJhbWVidWZmZXJCaW5kaW5nLT5vbkFjY2Vz
cygpKSB7CisgICAgaWYgKG1fZnJhbWVidWZmZXJCaW5kaW5nICYmICFtX2ZyYW1lYnVmZmVyQmlu
ZGluZy0+b25BY2Nlc3MoIWlzUmVzb3VyY2VTYWZlKCkpKSB7CiAgICAgICAgIG1fY29udGV4dC0+
c3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfRlJBTUVCVUZGRVJf
T1BFUkFUSU9OKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KQEAgLTI0NjMsOCArMjQ2MywxNSBA
QCB2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dGV4SW1hZ2UyREJhCiAgICAgICAgICAgICBy
ZXR1cm47CiAgICAgICAgIH0KICAgICB9Ci0gICAgbV9jb250ZXh0LT50ZXhJbWFnZTJEKHRhcmdl
dCwgbGV2ZWwsIGludGVybmFsZm9ybWF0LCB3aWR0aCwgaGVpZ2h0LAotICAgICAgICAgICAgICAg
ICAgICAgICAgICBib3JkZXIsIGZvcm1hdCwgdHlwZSwgcGl4ZWxzKTsKKyAgICBpZiAoIXBpeGVs
cyAmJiAhaXNSZXNvdXJjZVNhZmUoKSkgeworICAgICAgICBib29sIHN1Y2NlZWQgPSBtX2NvbnRl
eHQtPnRleEltYWdlMkRSZXNvdXJjZVNhZmUodGFyZ2V0LCBsZXZlbCwgaW50ZXJuYWxmb3JtYXQs
IHdpZHRoLCBoZWlnaHQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBib3JkZXIsIGZvcm1hdCwgdHlwZSk7CisgICAgICAgIGlmICghc3Vj
Y2VlZCkKKyAgICAgICAgICAgIHJldHVybjsKKyAgICB9IGVsc2UgeworICAgICAgICBtX2NvbnRl
eHQtPnRleEltYWdlMkQodGFyZ2V0LCBsZXZlbCwgaW50ZXJuYWxmb3JtYXQsIHdpZHRoLCBoZWln
aHQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib3JkZXIsIGZvcm1hdCwgdHlwZSwg
cGl4ZWxzKTsKKyAgICB9CiAgICAgdGV4LT5zZXRMZXZlbEluZm8odGFyZ2V0LCBsZXZlbCwgaW50
ZXJuYWxmb3JtYXQsIHdpZHRoLCBoZWlnaHQsIHR5cGUpOwogICAgIGNsZWFudXBBZnRlckdyYXBo
aWNzQ2FsbChmYWxzZSk7CiB9CkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBo
aWNzQ29udGV4dDNELmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L0dyYXBoaWNzQ29udGV4dDNELmNwcAkocmV2aXNpb24gNzMzMTkpCisrKyBXZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dDNELmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzEs
MjcgKzMxLDEwNSBAQAogI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dDNELmgiCiAKICNpbmNsdWRl
ICJBcnJheUJ1ZmZlclZpZXcuaCIKKyNpbmNsdWRlICJDaGVja2VkSW50LmgiCiAjaW5jbHVkZSAi
RHJhd2luZ0J1ZmZlci5oIgogI2luY2x1ZGUgIkltYWdlLmgiCiAjaW5jbHVkZSAiSW1hZ2VEYXRh
LmgiCiAKKyNpbmNsdWRlIDx3dGYvT3duQXJyYXlQdHIuaD4KKyNpbmNsdWRlIDx3dGYvUGFzc093
bkFycmF5UHRyLmg+CisKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotc3RhdGljIHVpbnQ4X3QgY29u
dmVydENvbG9yMTZMaXR0bGVUbzgodWludDE2X3QgdmFsdWUpCi17Ci0gICAgcmV0dXJuIHZhbHVl
ID4+IDg7Ci19CituYW1lc3BhY2UgeworCisgICAgdW5zaWduZWQgYnl0ZXNQZXJDb21wb25lbnQo
dW5zaWduZWQgdHlwZSkKKyAgICB7CisgICAgICAgIHN3aXRjaCAodHlwZSkgeworICAgICAgICBj
YXNlIEdyYXBoaWNzQ29udGV4dDNEOjpVTlNJR05FRF9CWVRFOgorICAgICAgICAgICAgcmV0dXJu
IDE7CisgICAgICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlVOU0lHTkVEX1NIT1JUXzVfNl81
OgorICAgICAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpVTlNJR05FRF9TSE9SVF80XzRfNF80
OgorICAgICAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpVTlNJR05FRF9TSE9SVF81XzVfNV8x
OgorICAgICAgICAgICAgcmV0dXJuIDI7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBy
ZXR1cm4gMTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHVuc2lnbmVkIGNvbXBvbmVudHNQZXJQ
aXhlbCh1bnNpZ25lZCBmb3JtYXQsIHVuc2lnbmVkIHR5cGUpCisgICAgeworICAgICAgICBzd2l0
Y2ggKHR5cGUpIHsKKyAgICAgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6VU5TSUdORURfU0hP
UlRfNV82XzU6CisgICAgICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlVOU0lHTkVEX1NIT1JU
XzRfNF80XzQ6CisgICAgICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlVOU0lHTkVEX1NIT1JU
XzVfNV81XzE6CisgICAgICAgICAgICByZXR1cm4gMTsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIHN3aXRjaCAoZm9ybWF0KSB7CisgICAg
ICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkFMUEhBOgorICAgICAgICBjYXNlIEdyYXBoaWNz
Q29udGV4dDNEOjpMVU1JTkFOQ0U6CisgICAgICAgICAgICByZXR1cm4gMTsKKyAgICAgICAgY2Fz
ZSBHcmFwaGljc0NvbnRleHQzRDo6TFVNSU5BTkNFX0FMUEhBOgorICAgICAgICAgICAgcmV0dXJu
IDI7CisgICAgICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlJHQjoKKyAgICAgICAgICAgIHJl
dHVybiAzOworICAgICAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpSR0JBOgorICAgICAgICAg
ICAgcmV0dXJuIDQ7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICByZXR1cm4gNDsKKyAg
ICAgICAgfQorICAgIH0KKworICAgIC8vIFRoaXMgZnVuY3Rpb24gc2hvdWxkIG9ubHkgYmUgY2Fs
bGVkIGlmIHdpZHRoIGFuZCBoZWlnaHQgaXMgbm9uLXplcm8gYW5kCisgICAgLy8gZm9ybWF0L3R5
cGUgYXJlIHZhbGlkLiAgUmV0dXJuIDAgaWYgb3ZlcmZsb3cgaGFwcGVucy4KKyAgICBzaXplX3Qg
aW1hZ2VTaXplSW5CeXRlcyh1bnNpZ25lZCB3aWR0aCwgdW5zaWduZWQgaGVpZ2h0LCB1bnNpZ25l
ZCBmb3JtYXQsIHVuc2lnbmVkIHR5cGUpCisgICAgeworICAgICAgICBBU1NFUlQod2lkdGggJiYg
aGVpZ2h0KTsKKyAgICAgICAgQ2hlY2tlZEludDx1aW50MzJfdD4gY2hlY2tlZFdpZHRoKHdpZHRo
KTsKKyAgICAgICAgQ2hlY2tlZEludDx1aW50MzJfdD4gY2hlY2tlZEhlaWdodChoZWlnaHQpOwor
ICAgICAgICBDaGVja2VkSW50PHVpbnQzMl90PiBjaGVja2VkQnl0ZXNQZXJQaXhlbChieXRlc1Bl
ckNvbXBvbmVudCh0eXBlKSAqIGNvbXBvbmVudHNQZXJQaXhlbChmb3JtYXQsIHR5cGUpKTsKKyAg
ICAgICAgQ2hlY2tlZEludDx1aW50MzJfdD4gY2hlY2tlZFNpemUgPSBjaGVja2VkV2lkdGggKiBj
aGVja2VkSGVpZ2h0ICogY2hlY2tlZEJ5dGVzUGVyUGl4ZWw7CisgICAgICAgIGlmIChjaGVja2Vk
U2l6ZS52YWxpZCgpKQorICAgICAgICAgICAgcmV0dXJuIGNoZWNrZWRTaXplLnZhbHVlKCk7Cisg
ICAgICAgIHJldHVybiAwOworICAgIH0KKworICAgIHVpbnQ4X3QgY29udmVydENvbG9yMTZMaXR0
bGVUbzgodWludDE2X3QgdmFsdWUpCisgICAgeworICAgICAgICByZXR1cm4gdmFsdWUgPj4gODsK
KyAgICB9CisKKyAgICB1aW50OF90IGNvbnZlcnRDb2xvcjE2QmlnVG84KHVpbnQxNl90IHZhbHVl
KQorICAgIHsKKyAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PHVpbnQ4X3Q+KHZhbHVlICYgMHgw
MEZGKTsKKyAgICB9CisKK30gLy8gYW5vbnltb3VzIG5hbWVzcGFjZQogCi1zdGF0aWMgdWludDhf
dCBjb252ZXJ0Q29sb3IxNkJpZ1RvOCh1aW50MTZfdCB2YWx1ZSkKLXsKLSAgICByZXR1cm4gc3Rh
dGljX2Nhc3Q8dWludDhfdD4odmFsdWUgJiAweDAwRkYpOwotfQogCiBQYXNzUmVmUHRyPERyYXdp
bmdCdWZmZXI+IEdyYXBoaWNzQ29udGV4dDNEOjpjcmVhdGVEcmF3aW5nQnVmZmVyKGNvbnN0IElu
dFNpemUmIHNpemUpCiB7CiAgICAgcmV0dXJuIERyYXdpbmdCdWZmZXI6OmNyZWF0ZSh0aGlzLCBz
aXplKTsKIH0KIAorYm9vbCBHcmFwaGljc0NvbnRleHQzRDo6dGV4SW1hZ2UyRFJlc291cmNlU2Fm
ZSh1bnNpZ25lZCB0YXJnZXQsIHVuc2lnbmVkIGxldmVsLCB1bnNpZ25lZCBpbnRlcm5hbGZvcm1h
dCwgdW5zaWduZWQgd2lkdGgsIHVuc2lnbmVkIGhlaWdodCwgdW5zaWduZWQgYm9yZGVyLCB1bnNp
Z25lZCBmb3JtYXQsIHVuc2lnbmVkIHR5cGUpCit7CisgICAgT3duQXJyYXlQdHI8dW5zaWduZWQg
Y2hhcj4gemVybzsKKyAgICBpZiAod2lkdGggJiYgaGVpZ2h0KSB7CisgICAgICAgIHNpemVfdCBz
aXplID0gaW1hZ2VTaXplSW5CeXRlcyh3aWR0aCwgaGVpZ2h0LCBmb3JtYXQsIHR5cGUpOworICAg
ICAgICBpZiAoIXNpemUpIHsKKyAgICAgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNz
Q29udGV4dDNEOjpJTlZBTElEX1ZBTFVFKTsKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAg
ICAgICAgfQorICAgICAgICB6ZXJvID0gYWRvcHRBcnJheVB0cihuZXcgdW5zaWduZWQgY2hhcltz
aXplXSk7CisgICAgICAgIG1lbXNldCh6ZXJvLmdldCgpLCAwLCBzaXplKTsKKyAgICB9CisgICAg
dGV4SW1hZ2UyRCh0YXJnZXQsIGxldmVsLCBpbnRlcm5hbGZvcm1hdCwgd2lkdGgsIGhlaWdodCwg
Ym9yZGVyLCBmb3JtYXQsIHR5cGUsIHplcm8uZ2V0KCkpOworICAgIHJldHVybiB0cnVlOworfQor
CiBib29sIEdyYXBoaWNzQ29udGV4dDNEOjpjb21wdXRlRm9ybWF0QW5kVHlwZVBhcmFtZXRlcnMo
dW5zaWduZWQgaW50IGZvcm1hdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgdHlwZSwKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBsb25nKiBjb21w
b25lbnRzUGVyUGl4ZWwsCkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNz
Q29udGV4dDNELmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFw
aGljc0NvbnRleHQzRC5oCShyZXZpc2lvbiA3MzMxOSkKKysrIFdlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvR3JhcGhpY3NDb250ZXh0M0QuaAkod29ya2luZyBjb3B5KQpAQCAtNDcyLDYgKzQ3Miwx
MCBAQCBwdWJsaWM6CiAgICAgLy8gbGlrZSBHTF9GTE9BVCwgR0xfSU5ULCBldGMuCiAgICAgaW50
IHNpemVJbkJ5dGVzKGludCB0eXBlKTsKIAorICAgIC8vIEhlbHBlciB0byB0ZXhJbWFnZTJEIHdp
dGggcGl4ZWw9PTAgY2FzZTogcGl4ZWxzIGFyZSBpbml0aWFsaXplZCB0byAwLgorICAgIC8vIFJl
dHVybiB0cnVlIGlmIG5vIEdMIGVycm9yIGlzIHN5bnRoZXNpemVkLgorICAgIGJvb2wgdGV4SW1h
Z2UyRFJlc291cmNlU2FmZSh1bnNpZ25lZCB0YXJnZXQsIHVuc2lnbmVkIGxldmVsLCB1bnNpZ25l
ZCBpbnRlcm5hbGZvcm1hdCwgdW5zaWduZWQgd2lkdGgsIHVuc2lnbmVkIGhlaWdodCwgdW5zaWdu
ZWQgYm9yZGVyLCB1bnNpZ25lZCBmb3JtYXQsIHVuc2lnbmVkIHR5cGUpOworCiAgICAgYm9vbCBp
c0dMRVMyQ29tcGxpYW50KCkgY29uc3Q7CiAKICAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KSW5kZXg6IFdl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vQ2FudmFzMkRMYXllckNocm9taXVtLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0NhbnZh
czJETGF5ZXJDaHJvbWl1bS5jcHAJKHJldmlzaW9uIDczNDA5KQorKysgV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jaHJvbWl1bS9DYW52YXMyRExheWVyQ2hyb21pdW0uY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC02OCw3ICs2OCw3IEBAIHZvaWQgQ2FudmFzMkRMYXllckNocm9taXVtOjp1cGRhdGVD
b250ZW4KICAgICAgICAgY29udGV4dC0+YWN0aXZlVGV4dHVyZShHcmFwaGljc0NvbnRleHQzRDo6
VEVYVFVSRTApOwogICAgICAgICBjb250ZXh0LT5iaW5kVGV4dHVyZShHcmFwaGljc0NvbnRleHQz
RDo6VEVYVFVSRV8yRCwgbV90ZXh0dXJlSWQpOwogICAgICAgICBJbnRTaXplIHNpemUgPSBtX2Ry
YXdpbmdCdWZmZXItPnNpemUoKTsKLSAgICAgICAgY29udGV4dC0+dGV4SW1hZ2UyRChHcmFwaGlj
c0NvbnRleHQzRDo6VEVYVFVSRV8yRCwgMCwgR3JhcGhpY3NDb250ZXh0M0Q6OlJHQkEsIHNpemUu
d2lkdGgoKSwgc2l6ZS5oZWlnaHQoKSwgMCwgR3JhcGhpY3NDb250ZXh0M0Q6OlJHQkEsIEdyYXBo
aWNzQ29udGV4dDNEOjpVTlNJR05FRF9CWVRFLCAwKTsKKyAgICAgICAgY29udGV4dC0+dGV4SW1h
Z2UyRFJlc291cmNlU2FmZShHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV8yRCwgMCwgR3JhcGhp
Y3NDb250ZXh0M0Q6OlJHQkEsIHNpemUud2lkdGgoKSwgc2l6ZS5oZWlnaHQoKSwgMCwgR3JhcGhp
Y3NDb250ZXh0M0Q6OlJHQkEsIEdyYXBoaWNzQ29udGV4dDNEOjpVTlNJR05FRF9CWVRFKTsKICAg
ICAgICAgLy8gU2V0IHRoZSBtaW4tbWFnIGZpbHRlcnMgdG8gbGluZWFyIGFuZCB3cmFwIG1vZGVz
IHRvIEdyYXBoaWNzQ29udGV4dDNEOjpDTEFNUF9UT19FREdFCiAgICAgICAgIC8vIHRvIGdldCBh
cm91bmQgTlBPVCB0ZXh0dXJlIGxpbWl0YXRpb25zIG9mIEdMRVMuCiAgICAgICAgIGNvbnRleHQt
PnRleFBhcmFtZXRlcmkoR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfMkQsIEdyYXBoaWNzQ29u
dGV4dDNEOjpURVhUVVJFX01JTl9GSUxURVIsIEdyYXBoaWNzQ29udGV4dDNEOjpMSU5FQVIpOwpJ
bmRleDogV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9EcmF3aW5nQnVmZmVyQ2hy
b21pdW0uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21p
dW0vRHJhd2luZ0J1ZmZlckNocm9taXVtLmNwcAkocmV2aXNpb24gNzM0MDkpCisrKyBXZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0RyYXdpbmdCdWZmZXJDaHJvbWl1bS5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTYwLDcgKzYwLDcgQEAgc3RhdGljIHVuc2lnbmVkIGdlbmVyYXRlQ29s
b3JUZXh0dXJlKEdyYQogICAgIGNvbnRleHQtPnRleFBhcmFtZXRlcmkoR3JhcGhpY3NDb250ZXh0
M0Q6OlRFWFRVUkVfMkQsIEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFX01JTl9GSUxURVIsIEdy
YXBoaWNzQ29udGV4dDNEOjpORUFSRVNUKTsKICAgICBjb250ZXh0LT50ZXhQYXJhbWV0ZXJpKEdy
YXBoaWNzQ29udGV4dDNEOjpURVhUVVJFXzJELCBHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV9X
UkFQX1MsIEdyYXBoaWNzQ29udGV4dDNEOjpDTEFNUF9UT19FREdFKTsKICAgICBjb250ZXh0LT50
ZXhQYXJhbWV0ZXJpKEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFXzJELCBHcmFwaGljc0NvbnRl
eHQzRDo6VEVYVFVSRV9XUkFQX1QsIEdyYXBoaWNzQ29udGV4dDNEOjpDTEFNUF9UT19FREdFKTsK
LSAgICBjb250ZXh0LT50ZXhJbWFnZTJEKEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFXzJELCAw
LCBHcmFwaGljc0NvbnRleHQzRDo6UkdCQSwgc2l6ZS53aWR0aCgpLCBzaXplLmhlaWdodCgpLCAw
LCBHcmFwaGljc0NvbnRleHQzRDo6UkdCQSwgR3JhcGhpY3NDb250ZXh0M0Q6OlVOU0lHTkVEX0JZ
VEUsIDApOworICAgIGNvbnRleHQtPnRleEltYWdlMkRSZXNvdXJjZVNhZmUoR3JhcGhpY3NDb250
ZXh0M0Q6OlRFWFRVUkVfMkQsIDAsIEdyYXBoaWNzQ29udGV4dDNEOjpSR0JBLCBzaXplLndpZHRo
KCksIHNpemUuaGVpZ2h0KCksIDAsIEdyYXBoaWNzQ29udGV4dDNEOjpSR0JBLCBHcmFwaGljc0Nv
bnRleHQzRDo6VU5TSUdORURfQllURSk7CiAgICAgY29udGV4dC0+ZnJhbWVidWZmZXJUZXh0dXJl
MkQoR3JhcGhpY3NDb250ZXh0M0Q6OkZSQU1FQlVGRkVSLCBHcmFwaGljc0NvbnRleHQzRDo6Q09M
T1JfQVRUQUNITUVOVDAsIEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFXzJELCBvZmZzY3JlZW5D
b2xvclRleHR1cmUsIDApOwogCiAgICAgcmV0dXJuIG9mZnNjcmVlbkNvbG9yVGV4dHVyZTsKSW5k
ZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJSZW5kZXJlckNocm9t
aXVtLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVt
L0xheWVyUmVuZGVyZXJDaHJvbWl1bS5jcHAJKHJldmlzaW9uIDczNDA5KQorKysgV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllclJlbmRlcmVyQ2hyb21pdW0uY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xOTUsOCArMTk1LDcgQEAgdm9pZCBMYXllclJlbmRlcmVyQ2hyb21pdW06
OnByZXBhcmVUb0RyYQogICAgIGlmICh2aXNpYmxlUmVjdFdpZHRoICE9IG1fcm9vdExheWVyVGV4
dHVyZVdpZHRoIHx8IHZpc2libGVSZWN0SGVpZ2h0ICE9IG1fcm9vdExheWVyVGV4dHVyZUhlaWdo
dCkgewogICAgICAgICBtX3Jvb3RMYXllclRleHR1cmVXaWR0aCA9IHZpc2libGVSZWN0V2lkdGg7
CiAgICAgICAgIG1fcm9vdExheWVyVGV4dHVyZUhlaWdodCA9IHZpc2libGVSZWN0SGVpZ2h0Owot
Ci0gICAgICAgIEdMQyhtX2NvbnRleHQsIG1fY29udGV4dC0+dGV4SW1hZ2UyRChHcmFwaGljc0Nv
bnRleHQzRDo6VEVYVFVSRV8yRCwgMCwgR3JhcGhpY3NDb250ZXh0M0Q6OlJHQkEsIG1fcm9vdExh
eWVyVGV4dHVyZVdpZHRoLCBtX3Jvb3RMYXllclRleHR1cmVIZWlnaHQsIDAsIEdyYXBoaWNzQ29u
dGV4dDNEOjpSR0JBLCBHcmFwaGljc0NvbnRleHQzRDo6VU5TSUdORURfQllURSwgMCkpOworICAg
ICAgICBHTEMobV9jb250ZXh0LCBtX2NvbnRleHQtPnRleEltYWdlMkRSZXNvdXJjZVNhZmUoR3Jh
cGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfMkQsIDAsIEdyYXBoaWNzQ29udGV4dDNEOjpSR0JBLCBt
X3Jvb3RMYXllclRleHR1cmVXaWR0aCwgbV9yb290TGF5ZXJUZXh0dXJlSGVpZ2h0LCAwLCBHcmFw
aGljc0NvbnRleHQzRDo6UkdCQSwgR3JhcGhpY3NDb250ZXh0M0Q6OlVOU0lHTkVEX0JZVEUpKTsK
IAogICAgICAgICAvLyBSZXNldCB0aGUgY3VycmVudCByZW5kZXIgc3VyZmFjZSB0byBmb3JjZSBh
biB1cGRhdGUgb2YgdGhlIHZpZXdwb3J0IGFuZAogICAgICAgICAvLyBwcm9qZWN0aW9uIG1hdHJp
eCBuZXh0IHRpbWUgdXNlUmVuZGVyU3VyZmFjZSBpcyBjYWxsZWQuCkluZGV4OiBXZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1JlbmRlclN1cmZhY2VDaHJvbWl1bS5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9SZW5kZXJTdXJmYWNl
Q2hyb21pdW0uY3BwCShyZXZpc2lvbiA3MzQwOSkKKysrIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY2hyb21pdW0vUmVuZGVyU3VyZmFjZUNocm9taXVtLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
NzcsOSArNzcsOSBAQCB2b2lkIFJlbmRlclN1cmZhY2VDaHJvbWl1bTo6cHJlcGFyZUNvbnRlCiAg
ICAgaWYgKG1fYWxsb2NhdGVkVGV4dHVyZVNpemUgIT0gcmVxdWlyZWRTaXplKSB7CiAgICAgICAg
IEdyYXBoaWNzQ29udGV4dDNEKiBjb250ZXh0ID0gbV9vd25pbmdMYXllci0+bGF5ZXJSZW5kZXJl
cigpLT5jb250ZXh0KCk7CiAgICAgICAgIEdMQyhjb250ZXh0LCBjb250ZXh0LT5iaW5kVGV4dHVy
ZShHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV8yRCwgbV9jb250ZW50c1RleHR1cmVJZCkpOwot
ICAgICAgICBHTEMoY29udGV4dCwgY29udGV4dC0+dGV4SW1hZ2UyRChHcmFwaGljc0NvbnRleHQz
RDo6VEVYVFVSRV8yRCwgMCwgR3JhcGhpY3NDb250ZXh0M0Q6OlJHQkEsCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXF1aXJlZFNpemUud2lkdGgoKSwgcmVx
dWlyZWRTaXplLmhlaWdodCgpLCAwLCBHcmFwaGljc0NvbnRleHQzRDo6UkdCQSwKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdyYXBoaWNzQ29udGV4dDNEOjpV
TlNJR05FRF9CWVRFLCAwKSk7CisgICAgICAgIEdMQyhjb250ZXh0LCBjb250ZXh0LT50ZXhJbWFn
ZTJEUmVzb3VyY2VTYWZlKEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFXzJELCAwLCBHcmFwaGlj
c0NvbnRleHQzRDo6UkdCQSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgcmVxdWlyZWRTaXplLndpZHRoKCksIHJlcXVpcmVkU2l6ZS5oZWlnaHQoKSwgMCwgR3JhcGhp
Y3NDb250ZXh0M0Q6OlJHQkEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIEdyYXBoaWNzQ29udGV4dDNEOjpVTlNJR05FRF9CWVRFKSk7CiAgICAgICAgIG1fYWxsb2Nh
dGVkVGV4dHVyZVNpemUgPSByZXF1aXJlZFNpemU7CiAgICAgfQogfQpJbmRleDogV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9WaWRlb0xheWVyQ2hyb21pdW0uY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vVmlkZW9MYXllckNocm9t
aXVtLmNwcAkocmV2aXNpb24gNzM0MDkpCisrKyBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2No
cm9taXVtL1ZpZGVvTGF5ZXJDaHJvbWl1bS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI5Nyw3ICsy
OTcsNyBAQCBib29sIFZpZGVvTGF5ZXJDaHJvbWl1bTo6YWxsb2NhdGVUZXh0dXJlCiB2b2lkIFZp
ZGVvTGF5ZXJDaHJvbWl1bTo6YWxsb2NhdGVUZXh0dXJlKEdyYXBoaWNzQ29udGV4dDNEKiBjb250
ZXh0LCB1bnNpZ25lZCB0ZXh0dXJlSWQsIGNvbnN0IEludFNpemUmIGRpbWVuc2lvbnMsIHVuc2ln
bmVkIHRleHR1cmVGb3JtYXQpCiB7CiAgICAgR0xDKGNvbnRleHQsIGNvbnRleHQtPmJpbmRUZXh0
dXJlKEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFXzJELCB0ZXh0dXJlSWQpKTsKLSAgICBHTEMo
Y29udGV4dCwgY29udGV4dC0+dGV4SW1hZ2UyRChHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV8y
RCwgMCwgdGV4dHVyZUZvcm1hdCwgZGltZW5zaW9ucy53aWR0aCgpLCBkaW1lbnNpb25zLmhlaWdo
dCgpLCAwLCB0ZXh0dXJlRm9ybWF0LCBHcmFwaGljc0NvbnRleHQzRDo6VU5TSUdORURfQllURSwg
MCkpOworICAgIEdMQyhjb250ZXh0LCBjb250ZXh0LT50ZXhJbWFnZTJEUmVzb3VyY2VTYWZlKEdy
YXBoaWNzQ29udGV4dDNEOjpURVhUVVJFXzJELCAwLCB0ZXh0dXJlRm9ybWF0LCBkaW1lbnNpb25z
LndpZHRoKCksIGRpbWVuc2lvbnMuaGVpZ2h0KCksIDAsIHRleHR1cmVGb3JtYXQsIEdyYXBoaWNz
Q29udGV4dDNEOjpVTlNJR05FRF9CWVRFKSk7CiB9CiAKIHZvaWQgVmlkZW9MYXllckNocm9taXVt
Ojp1cGRhdGVUZXh0dXJlKEdyYXBoaWNzQ29udGV4dDNEKiBjb250ZXh0LCB1bnNpZ25lZCB0ZXh0
dXJlSWQsIGNvbnN0IEludFNpemUmIGRpbWVuc2lvbnMsIHVuc2lnbmVkIGZvcm1hdCwgY29uc3Qg
dm9pZCogZGF0YSkKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3B1L0RyYXdpbmdC
dWZmZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3B1L0Ry
YXdpbmdCdWZmZXIuY3BwCShyZXZpc2lvbiA3MzQwOSkKKysrIFdlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvZ3B1L0RyYXdpbmdCdWZmZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMTcsOSArMTE3
LDcgQEAgdm9pZCBEcmF3aW5nQnVmZmVyOjpyZXNldChjb25zdCBJbnRTaXplJgogICAgICAgICAK
ICAgICAgICAgbV9jb250ZXh0LT5nZXRJbnRlZ2VydihFeHRlbnNpb25zM0Q6Ok1BWF9TQU1QTEVT
LCAmbWF4U2FtcGxlQ291bnQpOwogICAgICAgICBpbnQgc2FtcGxlQ291bnQgPSBzdGQ6Om1pbig4
LCBtYXhTYW1wbGVDb3VudCk7Ci0gICAgICAgIGlmIChzYW1wbGVDb3VudCA+IG1heFNhbXBsZUNv
dW50KQotICAgICAgICAgICAgc2FtcGxlQ291bnQgPSBtYXhTYW1wbGVDb3VudDsKLSAgICAgICAg
CisKICAgICAgICAgbV9jb250ZXh0LT5iaW5kRnJhbWVidWZmZXIoR3JhcGhpY3NDb250ZXh0M0Q6
OkZSQU1FQlVGRkVSLCBtX211bHRpc2FtcGxlRkJPKTsKIAogICAgICAgICBtX2NvbnRleHQtPmJp
bmRSZW5kZXJidWZmZXIoR3JhcGhpY3NDb250ZXh0M0Q6OlJFTkRFUkJVRkZFUiwgbV9tdWx0aXNh
bXBsZUNvbG9yQnVmZmVyKTsKQEAgLTE0NSw3ICsxNDMsNyBAQCB2b2lkIERyYXdpbmdCdWZmZXI6
OnJlc2V0KGNvbnN0IEludFNpemUmCiAgICAgbV9jb250ZXh0LT5iaW5kRnJhbWVidWZmZXIoR3Jh
cGhpY3NDb250ZXh0M0Q6OkZSQU1FQlVGRkVSLCBtX2Zibyk7CiAKICAgICBtX2NvbnRleHQtPmJp
bmRUZXh0dXJlKEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFXzJELCBtX2NvbG9yQnVmZmVyKTsK
LSAgICBtX2NvbnRleHQtPnRleEltYWdlMkQoR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfMkQs
IDAsIGludGVybmFsQ29sb3JGb3JtYXQsIG1fc2l6ZS53aWR0aCgpLCBtX3NpemUuaGVpZ2h0KCks
IDAsIGNvbG9yRm9ybWF0LCBHcmFwaGljc0NvbnRleHQzRDo6VU5TSUdORURfQllURSwgMCk7Cisg
ICAgbV9jb250ZXh0LT50ZXhJbWFnZTJEUmVzb3VyY2VTYWZlKEdyYXBoaWNzQ29udGV4dDNEOjpU
RVhUVVJFXzJELCAwLCBpbnRlcm5hbENvbG9yRm9ybWF0LCBtX3NpemUud2lkdGgoKSwgbV9zaXpl
LmhlaWdodCgpLCAwLCBjb2xvckZvcm1hdCwgR3JhcGhpY3NDb250ZXh0M0Q6OlVOU0lHTkVEX0JZ
VEUpOwogICAgIG1fY29udGV4dC0+ZnJhbWVidWZmZXJUZXh0dXJlMkQoR3JhcGhpY3NDb250ZXh0
M0Q6OkZSQU1FQlVGRkVSLCBHcmFwaGljc0NvbnRleHQzRDo6Q09MT1JfQVRUQUNITUVOVDAsIEdy
YXBoaWNzQ29udGV4dDNEOjpURVhUVVJFLCBtX2NvbG9yQnVmZmVyLCAwKTsKICAgICBtX2NvbnRl
eHQtPmJpbmRUZXh0dXJlKEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFXzJELCAwKTsKICAgICBp
ZiAoIW11bHRpc2FtcGxlKCkgJiYgKGF0dHJpYnV0ZXMuc3RlbmNpbCB8fCBhdHRyaWJ1dGVzLmRl
cHRoKSkgewpAQCAtMTY2LDU3ICsxNjQsNDggQEAgdm9pZCBEcmF3aW5nQnVmZmVyOjpyZXNldChj
b25zdCBJbnRTaXplJgogICAgIGlmIChtdWx0aXNhbXBsZSgpKQogICAgICAgICBtX2NvbnRleHQt
PmJpbmRGcmFtZWJ1ZmZlcihHcmFwaGljc0NvbnRleHQzRDo6RlJBTUVCVUZGRVIsIG1fbXVsdGlz
YW1wbGVGQk8pOwogCi0gICAgLy8gSW5pdGlhbGl6ZSByZW5kZXJidWZmZXJzIHRvIDAuCi0gICAg
ZmxvYXQgY2xlYXJDb2xvcltdID0gezAsIDAsIDAsIDB9LCBjbGVhckRlcHRoID0gMDsKLSAgICBp
bnQgY2xlYXJTdGVuY2lsID0gMDsKLSAgICB1bnNpZ25lZCBjaGFyIGNvbG9yTWFza1tdID0ge3Ry
dWUsIHRydWUsIHRydWUsIHRydWV9LCBkZXB0aE1hc2sgPSB0cnVlOwotICAgIHVuc2lnbmVkIGlu
dCBzdGVuY2lsTWFzayA9IDB4ZmZmZmZmZmY7Ci0gICAgdW5zaWduZWQgY2hhciBpc1NjaXNzb3JF
bmFibGVkID0gZmFsc2U7Ci0gICAgdW5zaWduZWQgY2hhciBpc0RpdGhlckVuYWJsZWQgPSBmYWxz
ZTsKLSAgICB1bnNpZ25lZCBsb25nIGNsZWFyTWFzayA9IEdyYXBoaWNzQ29udGV4dDNEOjpDT0xP
Ul9CVUZGRVJfQklUOwotICAgIG1fY29udGV4dC0+Z2V0RmxvYXR2KEdyYXBoaWNzQ29udGV4dDNE
OjpDT0xPUl9DTEVBUl9WQUxVRSwgY2xlYXJDb2xvcik7Ci0gICAgbV9jb250ZXh0LT5jbGVhckNv
bG9yKDAsIDAsIDAsIDApOwotICAgIG1fY29udGV4dC0+Z2V0Qm9vbGVhbnYoR3JhcGhpY3NDb250
ZXh0M0Q6OkNPTE9SX1dSSVRFTUFTSywgY29sb3JNYXNrKTsKLSAgICBtX2NvbnRleHQtPmNvbG9y
TWFzayh0cnVlLCB0cnVlLCB0cnVlLCB0cnVlKTsKLSAgICBpZiAoYXR0cmlidXRlcy5kZXB0aCkg
ewotICAgICAgICBtX2NvbnRleHQtPmdldEZsb2F0dihHcmFwaGljc0NvbnRleHQzRDo6REVQVEhf
Q0xFQVJfVkFMVUUsICZjbGVhckRlcHRoKTsKLSAgICAgICAgbV9jb250ZXh0LT5jbGVhckRlcHRo
KDEpOwotICAgICAgICBtX2NvbnRleHQtPmdldEJvb2xlYW52KEdyYXBoaWNzQ29udGV4dDNEOjpE
RVBUSF9XUklURU1BU0ssICZkZXB0aE1hc2spOwotICAgICAgICBtX2NvbnRleHQtPmRlcHRoTWFz
ayh0cnVlKTsKLSAgICAgICAgY2xlYXJNYXNrIHw9IEdyYXBoaWNzQ29udGV4dDNEOjpERVBUSF9C
VUZGRVJfQklUOwotICAgIH0KLSAgICBpZiAoYXR0cmlidXRlcy5zdGVuY2lsKSB7Ci0gICAgICAg
IG1fY29udGV4dC0+Z2V0SW50ZWdlcnYoR3JhcGhpY3NDb250ZXh0M0Q6OlNURU5DSUxfQ0xFQVJf
VkFMVUUsICZjbGVhclN0ZW5jaWwpOwotICAgICAgICBtX2NvbnRleHQtPmNsZWFyU3RlbmNpbCgw
KTsKLSAgICAgICAgbV9jb250ZXh0LT5nZXRJbnRlZ2VydihHcmFwaGljc0NvbnRleHQzRDo6U1RF
TkNJTF9XUklURU1BU0ssIHJlaW50ZXJwcmV0X2Nhc3Q8aW50Kj4oJnN0ZW5jaWxNYXNrKSk7Ci0g
ICAgICAgIG1fY29udGV4dC0+c3RlbmNpbE1hc2tTZXBhcmF0ZShHcmFwaGljc0NvbnRleHQzRDo6
RlJPTlQsIDB4ZmZmZmZmZmYpOwotICAgICAgICBjbGVhck1hc2sgfD0gR3JhcGhpY3NDb250ZXh0
M0Q6OlNURU5DSUxfQlVGRkVSX0JJVDsKLSAgICB9Ci0gICAgaXNTY2lzc29yRW5hYmxlZCA9IG1f
Y29udGV4dC0+aXNFbmFibGVkKEdyYXBoaWNzQ29udGV4dDNEOjpTQ0lTU09SX1RFU1QpOwotICAg
IG1fY29udGV4dC0+ZGlzYWJsZShHcmFwaGljc0NvbnRleHQzRDo6U0NJU1NPUl9URVNUKTsKLSAg
ICBpc0RpdGhlckVuYWJsZWQgPSBtX2NvbnRleHQtPmlzRW5hYmxlZChHcmFwaGljc0NvbnRleHQz
RDo6RElUSEVSKTsKLSAgICBtX2NvbnRleHQtPmRpc2FibGUoR3JhcGhpY3NDb250ZXh0M0Q6OkRJ
VEhFUik7Ci0KLSAgICBtX2NvbnRleHQtPmNsZWFyKGNsZWFyTWFzayk7Ci0KLSAgICBtX2NvbnRl
eHQtPmNsZWFyQ29sb3IoY2xlYXJDb2xvclswXSwgY2xlYXJDb2xvclsxXSwgY2xlYXJDb2xvclsy
XSwgY2xlYXJDb2xvclszXSk7Ci0gICAgbV9jb250ZXh0LT5jb2xvck1hc2soY29sb3JNYXNrWzBd
LCBjb2xvck1hc2tbMV0sIGNvbG9yTWFza1syXSwgY29sb3JNYXNrWzNdKTsKLSAgICBpZiAoYXR0
cmlidXRlcy5kZXB0aCkgewotICAgICAgICBtX2NvbnRleHQtPmNsZWFyRGVwdGgoY2xlYXJEZXB0
aCk7Ci0gICAgICAgIG1fY29udGV4dC0+ZGVwdGhNYXNrKGRlcHRoTWFzayk7Ci0gICAgfQotICAg
IGlmIChhdHRyaWJ1dGVzLnN0ZW5jaWwpIHsKLSAgICAgICAgbV9jb250ZXh0LT5jbGVhclN0ZW5j
aWwoY2xlYXJTdGVuY2lsKTsKLSAgICAgICAgbV9jb250ZXh0LT5zdGVuY2lsTWFza1NlcGFyYXRl
KEdyYXBoaWNzQ29udGV4dDNEOjpGUk9OVCwgc3RlbmNpbE1hc2spOworICAgIGlmICghbV9jb250
ZXh0LT5nZXRFeHRlbnNpb25zKCktPnN1cHBvcnRzKCJHTF9DSFJPTUlVTV9yZXNvdXJjZV9zYWZl
IikpIHsKKyAgICAgICAgLy8gSW5pdGlhbGl6ZSByZW5kZXJidWZmZXJzIChkZXB0aC9zdGVuY2ls
KS4KKyAgICAgICAgZmxvYXQgY2xlYXJEZXB0aCA9IDA7CisgICAgICAgIGludCBjbGVhclN0ZW5j
aWwgPSAwOworICAgICAgICB1bnNpZ25lZCBjaGFyIGRlcHRoTWFzayA9IHRydWU7CisgICAgICAg
IHVuc2lnbmVkIGludCBzdGVuY2lsTWFzayA9IDB4ZmZmZmZmZmY7CisgICAgICAgIHVuc2lnbmVk
IGNoYXIgaXNTY2lzc29yRW5hYmxlZCA9IGZhbHNlOworICAgICAgICB1bnNpZ25lZCBsb25nIGNs
ZWFyTWFzayA9IDA7CisgICAgICAgIGlmIChhdHRyaWJ1dGVzLmRlcHRoKSB7CisgICAgICAgICAg
ICBtX2NvbnRleHQtPmdldEZsb2F0dihHcmFwaGljc0NvbnRleHQzRDo6REVQVEhfQ0xFQVJfVkFM
VUUsICZjbGVhckRlcHRoKTsKKyAgICAgICAgICAgIG1fY29udGV4dC0+Y2xlYXJEZXB0aCgxKTsK
KyAgICAgICAgICAgIG1fY29udGV4dC0+Z2V0Qm9vbGVhbnYoR3JhcGhpY3NDb250ZXh0M0Q6OkRF
UFRIX1dSSVRFTUFTSywgJmRlcHRoTWFzayk7CisgICAgICAgICAgICBtX2NvbnRleHQtPmRlcHRo
TWFzayh0cnVlKTsKKyAgICAgICAgICAgIGNsZWFyTWFzayB8PSBHcmFwaGljc0NvbnRleHQzRDo6
REVQVEhfQlVGRkVSX0JJVDsKKyAgICAgICAgfQorICAgICAgICBpZiAoYXR0cmlidXRlcy5zdGVu
Y2lsKSB7CisgICAgICAgICAgICBtX2NvbnRleHQtPmdldEludGVnZXJ2KEdyYXBoaWNzQ29udGV4
dDNEOjpTVEVOQ0lMX0NMRUFSX1ZBTFVFLCAmY2xlYXJTdGVuY2lsKTsKKyAgICAgICAgICAgIG1f
Y29udGV4dC0+Y2xlYXJTdGVuY2lsKDApOworICAgICAgICAgICAgbV9jb250ZXh0LT5nZXRJbnRl
Z2VydihHcmFwaGljc0NvbnRleHQzRDo6U1RFTkNJTF9XUklURU1BU0ssIHJlaW50ZXJwcmV0X2Nh
c3Q8aW50Kj4oJnN0ZW5jaWxNYXNrKSk7CisgICAgICAgICAgICBtX2NvbnRleHQtPnN0ZW5jaWxN
YXNrU2VwYXJhdGUoR3JhcGhpY3NDb250ZXh0M0Q6OkZST05ULCAweGZmZmZmZmZmKTsKKyAgICAg
ICAgICAgIGNsZWFyTWFzayB8PSBHcmFwaGljc0NvbnRleHQzRDo6U1RFTkNJTF9CVUZGRVJfQklU
OworICAgICAgICB9CisgICAgICAgIGlmIChjbGVhck1hc2spIHsKKyAgICAgICAgICAgIGlzU2Np
c3NvckVuYWJsZWQgPSBtX2NvbnRleHQtPmlzRW5hYmxlZChHcmFwaGljc0NvbnRleHQzRDo6U0NJ
U1NPUl9URVNUKTsKKyAgICAgICAgICAgIG1fY29udGV4dC0+ZGlzYWJsZShHcmFwaGljc0NvbnRl
eHQzRDo6U0NJU1NPUl9URVNUKTsKKworICAgICAgICAgICAgbV9jb250ZXh0LT5jbGVhcihjbGVh
ck1hc2spOworCisgICAgICAgICAgICBpZiAoYXR0cmlidXRlcy5kZXB0aCkgeworICAgICAgICAg
ICAgICAgIG1fY29udGV4dC0+Y2xlYXJEZXB0aChjbGVhckRlcHRoKTsKKyAgICAgICAgICAgICAg
ICBtX2NvbnRleHQtPmRlcHRoTWFzayhkZXB0aE1hc2spOworICAgICAgICAgICAgfQorICAgICAg
ICAgICAgaWYgKGF0dHJpYnV0ZXMuc3RlbmNpbCkgeworICAgICAgICAgICAgICAgIG1fY29udGV4
dC0+Y2xlYXJTdGVuY2lsKGNsZWFyU3RlbmNpbCk7CisgICAgICAgICAgICAgICAgbV9jb250ZXh0
LT5zdGVuY2lsTWFza1NlcGFyYXRlKEdyYXBoaWNzQ29udGV4dDNEOjpGUk9OVCwgc3RlbmNpbE1h
c2spOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKGlzU2Npc3NvckVuYWJsZWQpCisg
ICAgICAgICAgICAgICAgbV9jb250ZXh0LT5lbmFibGUoR3JhcGhpY3NDb250ZXh0M0Q6OlNDSVNT
T1JfVEVTVCk7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgbV9jb250ZXh0LT5k
aXNhYmxlKEdyYXBoaWNzQ29udGV4dDNEOjpTQ0lTU09SX1RFU1QpOworICAgICAgICB9CiAgICAg
fQotICAgIGlmIChpc1NjaXNzb3JFbmFibGVkKQotICAgICAgICBtX2NvbnRleHQtPmVuYWJsZShH
cmFwaGljc0NvbnRleHQzRDo6U0NJU1NPUl9URVNUKTsKLSAgICBlbHNlCi0gICAgICAgIG1fY29u
dGV4dC0+ZGlzYWJsZShHcmFwaGljc0NvbnRleHQzRDo6U0NJU1NPUl9URVNUKTsKLSAgICBpZiAo
aXNEaXRoZXJFbmFibGVkKQotICAgICAgICBtX2NvbnRleHQtPmVuYWJsZShHcmFwaGljc0NvbnRl
eHQzRDo6RElUSEVSKTsKLSAgICBlbHNlCi0gICAgICAgIG1fY29udGV4dC0+ZGlzYWJsZShHcmFw
aGljc0NvbnRleHQzRDo6RElUSEVSKTsKIAogICAgIG1fY29udGV4dC0+Zmx1c2goKTsKICAgICAK
SW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3B1L1RleHR1cmUuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3B1L1RleHR1cmUuY3BwCShyZXZpc2lv
biA3MzQwOSkKKysrIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3B1L1RleHR1cmUuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0xMDYsMTUgKzEwNiwxNSBAQCBQYXNzUmVmUHRyPFRleHR1cmU+IFRl
eHR1cmU6OmNyZWF0ZShHcmFwCiAKICAgICAgICAgSW50UmVjdCB0aWxlQm91bmRzV2l0aEJvcmRl
ciA9IHRpbGluZy50aWxlQm91bmRzV2l0aEJvcmRlcihpKTsKIAotICAgIHVuc2lnbmVkIGludCBn
bEZvcm1hdCA9IDA7Ci0gICAgdW5zaWduZWQgaW50IGdsVHlwZSA9IDA7Ci0gICAgYm9vbCBzd2l6
emxlOwotICAgIGNvbnZlcnRGb3JtYXQoY29udGV4dCwgZm9ybWF0LCAmZ2xGb3JtYXQsICZnbFR5
cGUsICZzd2l6emxlKTsKLSAgICBjb250ZXh0LT5iaW5kVGV4dHVyZShHcmFwaGljc0NvbnRleHQz
RDo6VEVYVFVSRV8yRCwgdGV4dHVyZUlkKTsKLSAgICBjb250ZXh0LT50ZXhJbWFnZTJEKEdyYXBo
aWNzQ29udGV4dDNEOjpURVhUVVJFXzJELCAwLCBnbEZvcm1hdCwKLSAgICAgICAgICAgIHRpbGVC
b3VuZHNXaXRoQm9yZGVyLndpZHRoKCksCi0gICAgICAgICAgICB0aWxlQm91bmRzV2l0aEJvcmRl
ci5oZWlnaHQoKSwKLSAgICAgICAgICAgIDAsIGdsRm9ybWF0LCBnbFR5cGUsIDApOworICAgICAg
ICB1bnNpZ25lZCBpbnQgZ2xGb3JtYXQgPSAwOworICAgICAgICB1bnNpZ25lZCBpbnQgZ2xUeXBl
ID0gMDsKKyAgICAgICAgYm9vbCBzd2l6emxlOworICAgICAgICBjb252ZXJ0Rm9ybWF0KGNvbnRl
eHQsIGZvcm1hdCwgJmdsRm9ybWF0LCAmZ2xUeXBlLCAmc3dpenpsZSk7CisgICAgICAgIGNvbnRl
eHQtPmJpbmRUZXh0dXJlKEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFXzJELCB0ZXh0dXJlSWQp
OworICAgICAgICBjb250ZXh0LT50ZXhJbWFnZTJEUmVzb3VyY2VTYWZlKEdyYXBoaWNzQ29udGV4
dDNEOjpURVhUVVJFXzJELCAwLCBnbEZvcm1hdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICB0aWxlQm91bmRzV2l0aEJvcmRlci53aWR0aCgpLAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRpbGVCb3VuZHNXaXRoQm9yZGVyLmhlaWdodCgp
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAsIGdsRm9ybWF0LCBn
bFR5cGUpOwogICAgIH0KICAgICByZXR1cm4gYWRvcHRSZWYobmV3IFRleHR1cmUoY29udGV4dCwg
dGV4dHVyZUlkcy5sZWFrUHRyKCksIGZvcm1hdCwgd2lkdGgsIGhlaWdodCwgbWF4VGV4dHVyZVNp
emUpKTsKIH0KSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0dyYXBoaWNz
Q29udGV4dDNET3BlbkdMLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL29wZW5nbC9HcmFwaGljc0NvbnRleHQzRE9wZW5HTC5jcHAJKHJldmlzaW9uIDczMzE5KQor
KysgV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvR3JhcGhpY3NDb250ZXh0M0RPcGVu
R0wuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMzI0LDggKzEzMjQsMTEgQEAgbG9uZyBHcmFwaGlj
c0NvbnRleHQzRDo6Z2V0VmVydGV4QXR0cmliTwogCiBpbnQgR3JhcGhpY3NDb250ZXh0M0Q6OnRl
eEltYWdlMkQodW5zaWduZWQgdGFyZ2V0LCB1bnNpZ25lZCBsZXZlbCwgdW5zaWduZWQgaW50ZXJu
YWxmb3JtYXQsIHVuc2lnbmVkIHdpZHRoLCB1bnNpZ25lZCBoZWlnaHQsIHVuc2lnbmVkIGJvcmRl
ciwgdW5zaWduZWQgZm9ybWF0LCB1bnNpZ25lZCB0eXBlLCB2b2lkKiBwaXhlbHMpCiB7CisgICAg
aWYgKHdpZHRoICYmIGhlaWdodCAmJiAhcGl4ZWxzKSB7CisgICAgICAgIHN5bnRoZXNpemVHTEVy
cm9yKElOVkFMSURfVkFMVUUpOworICAgICAgICByZXR1cm4gMTsKKyAgICB9CiAgICAgbWFrZUNv
bnRleHRDdXJyZW50KCk7Ci0KICAgICA6OmdsVGV4SW1hZ2UyRCh0YXJnZXQsIGxldmVsLCBpbnRl
cm5hbGZvcm1hdCwgd2lkdGgsIGhlaWdodCwgYm9yZGVyLCBmb3JtYXQsIHR5cGUsIHBpeGVscyk7
CiAgICAgcmV0dXJuIDA7CiB9CkluZGV4OiBXZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFdlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cJKHJldmlzaW9uIDczNDIwKQorKysg
V2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDEzIEBA
CisyMDEwLTEyLTA2ICBaaGVueWFvIE1vICA8em1vQGdvb2dsZS5jb20+CisKKyAgICAgICAgUmV2
aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgV2ViR0xSZW5kZXJpbmdDb250ZXh0
IG5lZWRzIHRvIHplcm8gdGV4dHVyZXMgYW5kIHJlbmRlcmJ1ZmZlcnMKKyAgICAgICAgaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTQ5MzU1CisKKyAgICAgICAgKiBzcmMv
V2ViR3JhcGhpY3NDb250ZXh0M0REZWZhdWx0SW1wbC5jcHA6CisgICAgICAgIChXZWJLaXQ6Oldl
YkdyYXBoaWNzQ29udGV4dDNERGVmYXVsdEltcGw6OnRleEltYWdlMkQpOiBEb24ndCBkZWFsIHdp
dGggdGV4dHVyZSBpbml0aWFsaXphdGlvbiBhdCB0aGlzIGxldmVsOyBnZW5lcmF0ZSBhbiBJTlZB
TElEX1ZBTFVFIGlmIHBpeGVscz09bnVsbCBpcyBwYXNzZWQgaW4uCisKIDIwMTAtMTItMDYgIE5h
dGUgQ2hhcGluICA8amFwaGV0QGNocm9taXVtLm9yZz4KIAogICAgICAgICBSZXZpZXdlZCBieSBB
ZGFtIEJhcnRoLgpJbmRleDogV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJHcmFwaGljc0NvbnRleHQz
RERlZmF1bHRJbXBsLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQvY2hyb21pdW0vc3JjL1dlYkdy
YXBoaWNzQ29udGV4dDNERGVmYXVsdEltcGwuY3BwCShyZXZpc2lvbiA3MzMxOSkKKysrIFdlYktp
dC9jaHJvbWl1bS9zcmMvV2ViR3JhcGhpY3NDb250ZXh0M0REZWZhdWx0SW1wbC5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTEyNjAsNjggKzEyNjAsMTMgQEAgREVMRUdBVEVfVE9fR0xfMihzYW1wbGVD
b3ZlcmFnZSwgU2FtcGxlQwogCiBERUxFR0FURV9UT19HTF80KHNjaXNzb3IsIFNjaXNzb3IsIGxv
bmcsIGxvbmcsIHVuc2lnbmVkIGxvbmcsIHVuc2lnbmVkIGxvbmcpCiAKLXVuc2lnbmVkIGJ5dGVz
UGVyQ29tcG9uZW50KHVuc2lnbmVkIHR5cGUpCi17Ci0gICAgc3dpdGNoICh0eXBlKSB7Ci0gICAg
Y2FzZSBHTF9CWVRFOgotICAgIGNhc2UgR0xfVU5TSUdORURfQllURToKLSAgICAgICAgcmV0dXJu
IDE7Ci0gICAgY2FzZSBHTF9TSE9SVDoKLSAgICBjYXNlIEdMX1VOU0lHTkVEX1NIT1JUOgotICAg
IGNhc2UgR0xfVU5TSUdORURfU0hPUlRfNV82XzU6Ci0gICAgY2FzZSBHTF9VTlNJR05FRF9TSE9S
VF80XzRfNF80OgotICAgIGNhc2UgR0xfVU5TSUdORURfU0hPUlRfNV81XzVfMToKLSAgICAgICAg
cmV0dXJuIDI7Ci0gICAgY2FzZSBHTF9GTE9BVDoKLSAgICAgICAgcmV0dXJuIDQ7Ci0gICAgZGVm
YXVsdDoKLSAgICAgICAgcmV0dXJuIDQ7Ci0gICAgfQotfQotCi11bnNpZ25lZCBjb21wb25lbnRz
UGVyUGl4ZWwodW5zaWduZWQgZm9ybWF0LCB1bnNpZ25lZCB0eXBlKQotewotICAgIHN3aXRjaCAo
dHlwZSkgewotICAgIGNhc2UgR0xfVU5TSUdORURfU0hPUlRfNV82XzU6Ci0gICAgY2FzZSBHTF9V
TlNJR05FRF9TSE9SVF80XzRfNF80OgotICAgIGNhc2UgR0xfVU5TSUdORURfU0hPUlRfNV81XzVf
MToKLSAgICAgICAgcmV0dXJuIDE7Ci0gICAgZGVmYXVsdDoKLSAgICAgICAgYnJlYWs7Ci0gICAg
fQotICAgIHN3aXRjaCAoZm9ybWF0KSB7Ci0gICAgY2FzZSBHTF9MVU1JTkFOQ0U6Ci0gICAgICAg
IHJldHVybiAxOwotICAgIGNhc2UgR0xfTFVNSU5BTkNFX0FMUEhBOgotICAgICAgICByZXR1cm4g
MjsKLSAgICBjYXNlIEdMX1JHQjoKLSAgICAgICAgcmV0dXJuIDM7Ci0gICAgY2FzZSBHTF9SR0JB
OgotICAgIGNhc2UgR0xfQkdSQV9FWFQ6Ci0gICAgICAgIHJldHVybiA0OwotICAgIGRlZmF1bHQ6
Ci0gICAgICAgIHJldHVybiA0OwotICAgIH0KLX0KLQotLy8gTi5CLjogIFRoaXMgY29kZSBkb2Vz
IG5vdCBwcm90ZWN0IGFnYWluc3QgaW50ZWdlciBvdmVyZmxvdyAoYXMgdGhlIGNvbW1hbmQKLS8v
IGJ1ZmZlciBpbXBsZW1lbnRhdGlvbiBkb2VzKSwgc28gaXQgc2hvdWxkIG5vdCBiZSBjb25zaWRl
cmVkIHJvYnVzdCBlbm91Z2gKLS8vIGZvciB1c2UgaW4gdGhlIGJyb3dzZXIuICBTaW5jZSB0aGlz
IGltcGxlbWVudGF0aW9uIGlzIG9ubHkgdXNlZCBmb3IgbGF5b3V0Ci0vLyB0ZXN0cywgdGhpcyBz
aG91bGQgYmUgb2sgZm9yIG5vdy4KLXNpemVfdCBpbWFnZVNpemVJbkJ5dGVzKHVuc2lnbmVkIHdp
ZHRoLCB1bnNpZ25lZCBoZWlnaHQsIHVuc2lnbmVkIGZvcm1hdCwgdW5zaWduZWQgdHlwZSkKLXsK
LSAgICByZXR1cm4gd2lkdGggKiBoZWlnaHQgKiBieXRlc1BlckNvbXBvbmVudCh0eXBlKSAqIGNv
bXBvbmVudHNQZXJQaXhlbChmb3JtYXQsIHR5cGUpOwotfQotCiB2b2lkIFdlYkdyYXBoaWNzQ29u
dGV4dDNERGVmYXVsdEltcGw6OnRleEltYWdlMkQodW5zaWduZWQgdGFyZ2V0LCB1bnNpZ25lZCBs
ZXZlbCwgdW5zaWduZWQgaW50ZXJuYWxGb3JtYXQsIHVuc2lnbmVkIHdpZHRoLCB1bnNpZ25lZCBo
ZWlnaHQsIHVuc2lnbmVkIGJvcmRlciwgdW5zaWduZWQgZm9ybWF0LCB1bnNpZ25lZCB0eXBlLCBj
b25zdCB2b2lkKiBwaXhlbHMpCiB7Ci0gICAgT3duQXJyYXlQdHI8dWludDg+IHplcm87Ci0gICAg
aWYgKCFwaXhlbHMpIHsKLSAgICAgICAgc2l6ZV90IHNpemUgPSBpbWFnZVNpemVJbkJ5dGVzKHdp
ZHRoLCBoZWlnaHQsIGZvcm1hdCwgdHlwZSk7Ci0gICAgICAgIHplcm8uc2V0KG5ldyB1aW50OFtz
aXplXSk7Ci0gICAgICAgIG1lbXNldCh6ZXJvLmdldCgpLCAwLCBzaXplKTsKLSAgICAgICAgcGl4
ZWxzID0gemVyby5nZXQoKTsKKyAgICBpZiAod2lkdGggJiYgaGVpZ2h0ICYmICFwaXhlbHMpIHsK
KyAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR0xfSU5WQUxJRF9WQUxVRSk7CisgICAgICAgIHJl
dHVybjsKICAgICB9CisgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CiAgICAgZ2xUZXhJbWFnZTJE
KHRhcmdldCwgbGV2ZWwsIGludGVybmFsRm9ybWF0LCB3aWR0aCwgaGVpZ2h0LCBib3JkZXIsIGZv
cm1hdCwgdHlwZSwgcGl4ZWxzKTsKIH0KIApJbmRleDogTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIExheW91dFRlc3RzL0NoYW5nZUxvZwkocmV2aXNpb24gNzM0MjApCisrKyBM
YXlvdXRUZXN0cy9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwxMyBAQAorMjAx
MC0xMi0wNiAgWmhlbnlhbyBNbyAgPHptb0Bnb29nbGUuY29tPgorCisgICAgICAgIFJldmlld2Vk
IGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFdlYkdMUmVuZGVyaW5nQ29udGV4dCBuZWVk
cyB0byB6ZXJvIHRleHR1cmVzIGFuZCByZW5kZXJidWZmZXJzCisgICAgICAgIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD00OTM1NQorCisgICAgICAgICogZmFzdC9jYW52
YXMvd2ViZ2wvdW5pbml0aWFsaXplZC10ZXN0LWV4cGVjdGVkLnR4dDogQWRkZWQuCisgICAgICAg
ICogZmFzdC9jYW52YXMvd2ViZ2wvdW5pbml0aWFsaXplZC10ZXN0Lmh0bWw6IEFkZGVkLgorCiAy
MDEwLTEyLTA2ICBWaWN0b3IgV2FuZyAgPHZpY3RvcndAY2hyb21pdW0ub3JnPgogCiAgICAgICAg
IFVucmV2aWV3ZWQuCkluZGV4OiBMYXlvdXRUZXN0cy9mYXN0L2NhbnZhcy93ZWJnbC91bmluaXRp
YWxpemVkLXRlc3QtZXhwZWN0ZWQudHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2Zhc3Qv
Y2FudmFzL3dlYmdsL3VuaW5pdGlhbGl6ZWQtdGVzdC1leHBlY3RlZC50eHQJKHJldmlzaW9uIDAp
CisrKyBMYXlvdXRUZXN0cy9mYXN0L2NhbnZhcy93ZWJnbC91bmluaXRpYWxpemVkLXRlc3QtZXhw
ZWN0ZWQudHh0CShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDEzIEBACitUZXN0cyB0byBjaGVjayB1
c2VyIGNvZGUgY2Fubm90IGFjY2VzcyB1bmluaXRpYWxpemVkIGRhdGEgZnJvbSBHTCByZXNvdXJj
ZXMuCisKK09uIHN1Y2Nlc3MsIHlvdSB3aWxsIHNlZSBhIHNlcmllcyBvZiAiUEFTUyIgbWVzc2Fn
ZXMsIGZvbGxvd2VkIGJ5ICJURVNUIENPTVBMRVRFIi4KKworUEFTUyBDb250ZXh0IGNyZWF0ZWQu
CitSZWFkaW5nIGFuIHVuaW5pdGlhbGl6ZWQgdGV4dHVyZSBzaG91bGQgc3VjY2VlZCB3aXRoIGFs
bCBieXRlcyBzZXQgdG8gMC4KK1BBU1MgQWxsIGRhdGEgaW5pdGlhbGl6ZWQKK1BBU1MgZ2V0RXJy
b3Igd2FzIGV4cGVjdGVkIHZhbHVlOiBOT19FUlJPUiA6IAorCitQQVNTIHN1Y2Nlc3NmdWxseVBh
cnNlZCBpcyB0cnVlCisKK1RFU1QgQ09NUExFVEUKKwpJbmRleDogTGF5b3V0VGVzdHMvZmFzdC9j
YW52YXMvd2ViZ2wvdW5pbml0aWFsaXplZC10ZXN0Lmh0bWwKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0
VGVzdHMvZmFzdC9jYW52YXMvd2ViZ2wvdW5pbml0aWFsaXplZC10ZXN0Lmh0bWwJKHJldmlzaW9u
IDApCisrKyBMYXlvdXRUZXN0cy9mYXN0L2NhbnZhcy93ZWJnbC91bmluaXRpYWxpemVkLXRlc3Qu
aHRtbAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw5MSBAQAorPCFkb2N0eXBlIGh0bWw+Cis8aHRt
bD4KKzxoZWFkPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0
L2h0bWw7IGNoYXJzZXQ9dXRmLTgiPgorPHRpdGxlPldlYkdMIFVuaW5pdGlhbGl6ZWQgR0wgUmVz
b3VyY2VzIFRlc3RzPC90aXRsZT4KKzxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iLi4vLi4v
anMvcmVzb3VyY2VzL2pzLXRlc3Qtc3R5bGUuY3NzIi8+Cis8c2NyaXB0IHNyYz0iLi4vLi4vanMv
cmVzb3VyY2VzL2pzLXRlc3QtcHJlLmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSJyZXNvdXJj
ZXMvd2ViZ2wtdGVzdC5qcyI+PC9zY3JpcHQ+Cis8L2hlYWQ+Cis8Ym9keT4KKzxkaXYgaWQ9ImRl
c2NyaXB0aW9uIj48L2Rpdj4KKzxkaXYgaWQ9ImNvbnNvbGUiPjwvZGl2PgorPGNhbnZhcyBpZD0i
Y2FudmFzIiB3aWR0aD0iMiIgaGVpZ2h0PSIyIj4gPC9jYW52YXM+Cis8c2NyaXB0PgorZGVzY3Jp
cHRpb24oIlRlc3RzIHRvIGNoZWNrIHVzZXIgY29kZSBjYW5ub3QgYWNjZXNzIHVuaW5pdGlhbGl6
ZWQgZGF0YSBmcm9tIEdMIHJlc291cmNlcy4iKTsKKwordmFyIGNhbnZhcyA9IGRvY3VtZW50Lmdl
dEVsZW1lbnRCeUlkKCJjYW52YXMiKTsKK3ZhciBnbCA9IGNyZWF0ZTNEQ29udGV4dChjYW52YXMp
OworaWYgKCFnbCkKKyAgdGVzdEZhaWxlZCgiQ29udGV4dCBjcmVhdGVkLiIpOworZWxzZQorICB0
ZXN0UGFzc2VkKCJDb250ZXh0IGNyZWF0ZWQuIik7CisKK2RlYnVnKCJSZWFkaW5nIGFuIHVuaW5p
dGlhbGl6ZWQgdGV4dHVyZSBzaG91bGQgc3VjY2VlZCB3aXRoIGFsbCBieXRlcyBzZXQgdG8gMC4i
KTsKKwordmFyIHdpZHRoID0gNTEyOwordmFyIGhlaWdodCA9IDUxMjsKK3ZhciBicHAgPSA0Owor
dmFyIGV4cGVjdGVkRGF0YUxlbmd0aCA9IHdpZHRoKmhlaWdodCpicHA7CisKK3ZhciB0ZXggPSBn
bC5jcmVhdGVUZXh0dXJlKCk7CitnbC5iaW5kVGV4dHVyZShnbC5URVhUVVJFXzJELCB0ZXgpOwor
Z2wudGV4SW1hZ2UyRChnbC5URVhUVVJFXzJELCAwLCBnbC5SR0JBLCB3aWR0aCwgaGVpZ2h0LCAw
LCBnbC5SR0JBLCBnbC5VTlNJR05FRF9CWVRFLCBudWxsKTsKKworLy8gdGhpcyBjYW4gYmUgcXVp
dGUgdW5kZXRlcm1pbmlzdGljIHNvIHRvIGltcHJvdmUgb2RkcyBvZiBzZWVpbmcgdW5pbml0aWFs
aXplZCBkYXRhIHdyaXRlIGJpdHMKKy8vIGludG8gdGV4IHRoZW4gZGVsZXRlIHRleHR1cmUgdGhl
biByZS1jcmVhdGUgb25lIHdpdGggc2FtZSBjaGFyYWN0ZXJpc3RpY3MgKGRyaXZlciB3aWxsIGxp
a2VseSByZXVzZSBtZW0pCisvLyB3aXRoIHRoaXMgdHJpY2sgb24gcjU5MDQ2IFdlYktpdC9PU1gg
SSBnZXQgRkFJTCAxMDAlIG9mIHRoZSB0aW1lIGluc3RlYWQgb2YgfjE1JSBvZiB0aGUgdGltZS4K
KwordmFyIGJhZERhdGEgPSBuZXcgVWludDhBcnJheShleHBlY3RlZERhdGFMZW5ndGgpOworZm9y
ICh2YXIgaSA9IDA7IGkgPCBiYWREYXRhLmxlbmd0aDsgKytpKQorICAgIGJhZERhdGFbaV0gPSBp
ICUgMjU1OworCitnbC50ZXhTdWJJbWFnZTJEKGdsLlRFWFRVUkVfMkQsIDAsIDAsIDAsIHdpZHRo
LCBoZWlnaHQsIGdsLlJHQkEsIGdsLlVOU0lHTkVEX0JZVEUsIGJhZERhdGEpOworZ2wuZmluaXNo
KCk7IC8vIG1ha2Ugc3VyZSBpdCBoYXMgYmVlbiB1cGxvYWRlZAorCitnbC5kZWxldGVUZXh0dXJl
KHRleCk7CitnbC5maW5pc2goKTsgLy8gbWFrZSBzdXJlIGl0IGhhcyBiZWVuIGRlbGV0ZWQKKwor
dmFyIHRleCA9IGdsLmNyZWF0ZVRleHR1cmUoKTsKK2dsLmJpbmRUZXh0dXJlKGdsLlRFWFRVUkVf
MkQsIHRleCk7CitnbC50ZXhJbWFnZTJEKGdsLlRFWFRVUkVfMkQsIDAsIGdsLlJHQkEsIHdpZHRo
LCBoZWlnaHQsIDAsIGdsLlJHQkEsIGdsLlVOU0lHTkVEX0JZVEUsIG51bGwpOworCit2YXIgZmIg
PSBnbC5jcmVhdGVGcmFtZWJ1ZmZlcigpOworZ2wuYmluZEZyYW1lYnVmZmVyKGdsLkZSQU1FQlVG
RkVSLCBmYik7CitnbC5mcmFtZWJ1ZmZlclRleHR1cmUyRChnbC5GUkFNRUJVRkZFUiwgZ2wuQ09M
T1JfQVRUQUNITUVOVDAsIGdsLlRFWFRVUkVfMkQsIHRleCwgMCk7CisKK2RhdGEgPSBuZXcgVWlu
dDhBcnJheSh3aWR0aCAqIGhlaWdodCAqIDQpOworZ2wucmVhZFBpeGVscygwLCAwLCB3aWR0aCwg
aGVpZ2h0LCBnbC5SR0JBLCBnbC5VTlNJR05FRF9CWVRFLCBkYXRhKTsKKworaWYgKGRhdGEubGVu
Z3RoICE9IGV4cGVjdGVkRGF0YUxlbmd0aCkgeworICAgIHRlc3RGYWlsZWQoImV4cGVjdGVkIGRh
dGEgbGVuZ3RoICIgKyBleHBlY3RlZERhdGFMZW5ndGggKyAiIGJ1dCBnb3QgIiArIGRhdGEubGVu
Z3RoICsgIiBpbnN0ZWFkLiIpOworfSBlbHNlIHsKKyAgICB2YXIgayA9IDA7CisgICAgZm9yICh2
YXIgaSA9IDA7IGkgPCBkYXRhLmxlbmd0aDsgKytpKSB7CisgICAgICAgIGlmIChkYXRhW2ldICE9
IDApIHsKKyAgICAgICAgICAgIGsrKzsKKyAgICAgICAgfQorICAgIH0KKworICAgIGlmIChrKSB7
CisgICAgICAgIHRlc3RGYWlsZWQoIkZvdW5kICIgKyBrICsgIiBub24temVybyBieXRlcyIpOwor
ICAgIH0gZWxzZSB7CisgICAgICAgIHRlc3RQYXNzZWQoIkFsbCBkYXRhIGluaXRpYWxpemVkIik7
CisgICAgfQorfQorCitnbEVycm9yU2hvdWxkQmUoZ2wsIGdsLk5PX0VSUk9SKTsKKworLy9UT0RP
OiB1bmluaXRpYWxpemVkIHZlcnRleCBhcnJheSBidWZmZXIKKy8vVE9ETzogdW5pbml0aWFsaXpl
ZCB2ZXJ0ZXggZWxlbWVudHMgYnVmZmVyCisvL1RPRE86IHVuaW5pdGlhbGl6ZWQgZnJhbWVidWZm
ZXI/IChpbXBsZW1lbnRhdGlvbnMgd291bGQgbmVlZCB0byBkbyBhIEdMIGNsZWFyIGF0IGZpcnN0
IGJpbmRpbmc/KQorLy9UT0RPOiB1bmluaXRpYWxpemVkIHJlbmRlcmJ1ZmZlcj8gKGltcGxlbWVu
dGF0aW9ucyB3b3VsZCBuZWVkIHRvIGRvIGEgR0wgY2xlYXIgYXQgZmlyc3QgYmluZGluZz8pCisv
L1RPRE86IHVuaW5pdGlhbGl6ZWQgdW5pZm9ybSBhcnJheXM/CisKK2RlYnVnKCIiKTsKK3N1Y2Nl
c3NmdWxseVBhcnNlZCA9IHRydWU7Cis8L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSIuLi8uLi9qcy9y
ZXNvdXJjZXMvanMtdGVzdC1wb3N0LmpzIj48L3NjcmlwdD4KKzwvYm9keT4KKzwvaHRtbD4KKwo=
</data>
<flag name="review"
          id="67040"
          type_id="1"
          status="+"
          setter="kbr"
    />
          </attachment>
      

    </bug>

</bugzilla>