<?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>21260</bug_id>
          
          <creation_ts>2008-09-30 17:03:07 -0700</creation_ts>
          <short_desc>Unbounded memory growth when churning elements with anonymous event handler functions</short_desc>
          <delta_ts>2009-04-20 20:57:05 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>WebCore JavaScript</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Mac</rep_platform>
          <op_sys>OS X 10.5</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>HasReduction, InRadar</keywords>
          <priority>P1</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>25370</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Simon Fraser (smfr)">simon.fraser</reporter>
          <assigned_to name="Geoffrey Garen">ggaren</assigned_to>
          <cc>alice.barraclough</cc>
    
    <cc>ap</cc>
    
    <cc>ddkilzer</cc>
    
    <cc>mrowe</cc>
    
    <cc>oliver</cc>
    
    <cc>pam</cc>
    
    <cc>sam</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>93469</commentid>
    <comment_count>0</comment_count>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2008-09-30 17:03:07 -0700</bug_when>
    <thetext>The to-be-attached testcase creates, attaches, then removes hundreds of divs, each of which has an event handler registered on it.

If the event handler uses an anonymous function, like:
    a.addEventListener(&quot;click&quot;, function () {}, true);

then memory grows over time, and is not fully reclaimed by GC. Debugging shows that none of the HTMLElements are destroyed, even after they  have been removed from the DOM.  &apos;leaks&apos; does not report any leaks, but the Caches window shows an increasing number of Function Protected Objects.

If the event handler uses a named function:

function clicked(e) {}
a.addEventListener(&quot;click&quot;, clicked, true);

then the problem does not occur.

Seen on WebKit TOT r37078.

Note that if the elements that are entrained are costly (like &lt;canvas&gt;) then this rapidly becomes a problem.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>93470</commentid>
    <comment_count>1</comment_count>
      <attachid>23964</attachid>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2008-09-30 17:03:37 -0700</bug_when>
    <thetext>Created attachment 23964
Testcase</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>93475</commentid>
    <comment_count>2</comment_count>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2008-09-30 17:37:09 -0700</bug_when>
    <thetext>&lt;rdar://problem/6259524&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>93675</commentid>
    <comment_count>3</comment_count>
    <who name="Oliver Hunt">oliver</who>
    <bug_when>2008-10-01 23:28:41 -0700</bug_when>
    <thetext>Okay, so this isn&apos;t a permanent leak -- the functions get collected when the Page goes away.  The underlying problem appears to be that the JSEventListener uses a ProtectedPtr to hold the event handler.  However because the event handler is defined along the lines of:

var a = someElement;
a.addEventListener(&quot;..&quot;, function(){})

The function&apos;s Activation picks up &apos;a&apos;.  Then when ever we do a gc sweep that will mark the protected event handler (the function we defined) which will mark its activation, which in turn marks the element.  This is a ref cycle which means we should just leak forever, however the Page somehow tracks this and manually breaks the cycle when it gets torn down. 

To fix this we probably just need to ensure we do correct gc rather than relying on protectedptr on JSEventListener, although i&apos;m honestly not sure how we should do this :-(</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>93676</commentid>
    <comment_count>4</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2008-10-01 23:31:58 -0700</bug_when>
    <thetext>Another similar case:

someElement.onfoo = someFunction;
someFunction.bar = someElement;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>93683</commentid>
    <comment_count>5</comment_count>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2008-10-01 23:53:43 -0700</bug_when>
    <thetext>I think we could make each DOM object responsible for marking its event listeners.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>93684</commentid>
    <comment_count>6</comment_count>
    <who name="Sam Weinig">sam</who>
    <bug_when>2008-10-01 23:55:23 -0700</bug_when>
    <thetext>I believe I know how to fix this bug.  We should just eliminate the protected listener concept and use custom marking.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>115212</commentid>
    <comment_count>7</comment_count>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2009-03-25 13:38:16 -0700</bug_when>
    <thetext>Maybe related: bug 24806.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>115408</commentid>
    <comment_count>8</comment_count>
      <attachid>28984</attachid>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2009-03-26 14:02:45 -0700</bug_when>
    <thetext>Created attachment 28984
reduction</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>116663</commentid>
    <comment_count>9</comment_count>
      <attachid>29286</attachid>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2009-04-06 13:10:46 -0700</bug_when>
    <thetext>Created attachment 29286
patch

Fixes the reduction, and most node-based event handler leaks. More work remains to be done, but this patch is a good improvement.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>116664</commentid>
    <comment_count>10</comment_count>
      <attachid>29286</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2009-04-06 13:16:01 -0700</bug_when>
    <thetext>Comment on attachment 29286
patch

&gt; -    // If we&apos;re already marking this tree, then we can simply mark this wrapper
&gt; -    // by calling the base class; our caller is iterating the tree.
&gt; +    // Nodes in a subtree are kept alive by the tree&apos;s root, so, if the root
&gt; +    // is already marking the tree, we only need to mark ourselves.
&gt;      if (root-&gt;inSubtreeMark()) {
&gt;          DOMObject::mark();
&gt; +        markEventListeners(node-&gt;eventListeners());
&gt;          return;
&gt;      }

I find it a little strange that the comment says &quot;only need to mark ourselves&quot; and the code says &quot;call the base class mark and also call markEventListeners&quot;. Is there a simple way to make the comment and code consistent?

Same issue earlier in the file, in the more complicated version that also calls mark on the document wrapper.

r=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>116665</commentid>
    <comment_count>11</comment_count>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2009-04-06 13:22:04 -0700</bug_when>
    <thetext>&gt; Is there a simple way to make the comment and code consistent?

Changed to &quot;don&apos;t need to explicitly mark any other nodes.&quot;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>116673</commentid>
    <comment_count>12</comment_count>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2009-04-06 14:57:18 -0700</bug_when>
    <thetext>Committed revision 42256.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>117321</commentid>
    <comment_count>13</comment_count>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2009-04-13 11:54:03 -0700</bug_when>
    <thetext>Fixed, right?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>117987</commentid>
    <comment_count>14</comment_count>
      <attachid>29592</attachid>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2009-04-17 16:17:33 -0700</bug_when>
    <thetext>Created attachment 29592
Next patch

Another in the long stream of patches for this bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>117988</commentid>
    <comment_count>15</comment_count>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2009-04-17 16:17:50 -0700</bug_when>
    <thetext>Still some work to be done on this bug - reopening for patch review.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>118009</commentid>
    <comment_count>16</comment_count>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2009-04-17 18:32:20 -0700</bug_when>
    <thetext>Committed revision r42633. Still a little more to go, though.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>118053</commentid>
    <comment_count>17</comment_count>
      <attachid>29603</attachid>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2009-04-19 00:15:54 -0700</bug_when>
    <thetext>Created attachment 29603
Next patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>118054</commentid>
    <comment_count>18</comment_count>
      <attachid>29603</attachid>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2009-04-19 00:30:33 -0700</bug_when>
    <thetext>Comment on attachment 29603
Next patch

r=me

&gt; -    return JSEventListener::create(asObject(val), this, isInline).get();
&gt; +    return JSEventListener::create(asObject(val), this, false).get();

Hopefully, the confusing boolean arguments won&apos;t remain here forever.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>118055</commentid>
    <comment_count>19</comment_count>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2009-04-19 00:39:34 -0700</bug_when>
    <thetext>Committed revision r42657. Still a little more to go, though.
</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>118087</commentid>
    <comment_count>20</comment_count>
      <attachid>29610</attachid>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2009-04-19 23:46:57 -0700</bug_when>
    <thetext>Created attachment 29610
last patch, i promise</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>118088</commentid>
    <comment_count>21</comment_count>
      <attachid>29610</attachid>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2009-04-20 00:15:05 -0700</bug_when>
    <thetext>Comment on attachment 29610
last patch, i promise

&gt; +    // Ensure that &apos;node&apos; has a JavaScript wrapper to mark the event listener we&apos;re creating.

What keeps it from being collected in the future?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>118122</commentid>
    <comment_count>22</comment_count>
      <attachid>29610</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2009-04-20 09:06:15 -0700</bug_when>
    <thetext>Comment on attachment 29610
last patch, i promise

r=me

The term &quot;inline&quot; here drives me crazy now. Is there any precedent outside WebKit for calling handlers created with HTML attributes &quot;inline event listeners&quot;?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>118123</commentid>
    <comment_count>23</comment_count>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2009-04-20 09:10:03 -0700</bug_when>
    <thetext>&gt; &gt; +    // Ensure that &apos;node&apos; has a JavaScript wrapper to mark the event listener we&apos;re creating.
&gt; 
&gt; What keeps it from being collected in the future?

At GC time, the document marks all node wrappers that are observable through the DOM. Observable qualities include custom properties set on a JS wrapper, and JS event handlers set on a node.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>118124</commentid>
    <comment_count>24</comment_count>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2009-04-20 09:16:39 -0700</bug_when>
    <thetext>&gt; The term &quot;inline&quot; here drives me crazy now. Is there any precedent outside
&gt; WebKit for calling handlers created with HTML attributes &quot;inline event
&gt; listeners&quot;?

Me too! :)

No, I don&apos;t think there&apos;s a precedent for using the word &quot;inline.&quot; But I haven&apos;t been able to come up with a replacement word that satisfies everybody.

Some options: onEventListener (because the relevant properties all start with &quot;on&quot;); soloEventListener (because you can only have one at a time, unlike the addEventListener API); legacyEventListener (because this is a pseudo-deprecated way to add event listeners).

What do you think?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>118220</commentid>
    <comment_count>25</comment_count>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2009-04-20 20:56:47 -0700</bug_when>
    <thetext>We settled on &quot;AttributeEventListener.&quot;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="0"
              isprivate="0"
          >
            <attachid>23964</attachid>
            <date>2008-09-30 17:03:37 -0700</date>
            <delta_ts>2009-03-26 14:02:45 -0700</delta_ts>
            <desc>Testcase</desc>
            <filename>anonymous_event_handler.html</filename>
            <type>text/html</type>
            <size>2675</size>
            <attacher name="Simon Fraser (smfr)">simon.fraser</attacher>
            
              <data encoding="base64">PGh0bWw+Cgo8aGVhZD4KCjxtZXRhIG5hbWU9InZpZXdwb3J0IiBjb250ZW50PSJpbml0aWFsLXNj
YWxlPTEuMCIgLz4KPHRpdGxlPkJsb29tcyAobm8gYW5pbXMpPC90aXRsZT4KCjxzdHlsZSB0eXBl
PSJ0ZXh0L2NzcyI+Cgpib2R5CnsKICAgIGJhY2tncm91bmQtY29sb3I6IGJsYWNrOwogICAgY29s
b3I6IHdoaXRlOwogICAgZm9udC1mYW1pbHk6ICJBbWVyaWNhbiBUeXBld3JpdGVyIjsKICAgIHBh
ZGRpbmc6IDA7CiAgICBtYXJnaW46IDA7Cn0KCiNwbGFuZQp7CiAgICBwb3NpdGlvbjogYWJzb2x1
dGU7CiAgICB0b3A6IDA7CiAgICBsZWZ0OiAwOwogICAgd2lkdGg6IDEwMCU7CiAgICBoZWlnaHQ6
IDEwMCU7CiAgICBwYWRkaW5nOiAwOwoKICAgIC13ZWJraXQtdHJhbnNmb3JtLXN0eWxlOiBwcmVz
ZXJ2ZS0zZDsKICAgIC13ZWJraXQtcGVyc3BlY3RpdmU6IDYwMDsKfQoKI2NhcmQKewogICAgcG9z
aXRpb246IGFic29sdXRlOwogICAgCiAgICBib3R0b206IDA7CiAgICAKICAgIHdpZHRoOiAxMDAl
OwoKICAgIHotaW5kZXg6IDMwMDsKfQoKI2luZm8KewogICAgdGV4dC1zaGFkb3c6IGJsYWNrIDBw
eCA0cHggNHB4OwogICAgCiAgICBwYWRkaW5nOiA4cHggMjBweDsKfQoKZGl2LmRpc2MKewogICAg
cG9zaXRpb246IGFic29sdXRlOwogICAgYmFja2dyb3VuZC1jb2xvcjogeWVsbG93Owp9CgpjYW52
YXMKewogICAgb3BhY2l0eTogMTsKfQoKCjwvc3R5bGU+CjwvaGVhZD4KPGJvZHk+Cgo8ZGl2IGlk
PSJwbGFuZSI+CjwvZGl2PgoKPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoKZnVuY3Rp
b24gc2NhbGUobikKewogICAgcmV0dXJuICJzY2FsZSgiICsgbiArICIpIjsKfQoKZnVuY3Rpb24g
dHJhbnNsYXRlKHgsIHkpCnsKICAgIHJldHVybiAidHJhbnNsYXRlKCIgKyB4LnRvU3RyaW5nKCkg
KyAicHgsICIgKyB5LnRvU3RyaW5nKCkgKyAicHgpIjsKfQoKZnVuY3Rpb24gY29uY2F0KCkKewog
ICAgdmFyIHN0YWNrID0gbmV3IEFycmF5KCk7CiAgICAKICAgIGZvciAodmFyIGkgPSAwOyBpIDwg
YXJndW1lbnRzLmxlbmd0aDsgaSsrKQogICAgewogICAgICAgIHN0YWNrLnB1c2goYXJndW1lbnRz
W2ldKTsKICAgIH0KICAgIHJldHVybiBzdGFjay5qb2luKCIgIik7Cn0KCmZ1bmN0aW9uIHdyYXAo
dHJhbnNmb3JtLCB4LCB5KQp7CiAgICB2YXIgeDIgPSB4IC8gMjsKICAgIHZhciB5MiA9IHkgLyAy
OwogICAgcmV0dXJuIGNvbmNhdCh0cmFuc2Zvcm0sIHRyYW5zbGF0ZSgtIHggLyAyLCAtIHkgLyAy
KSk7Cn0KCmZ1bmN0aW9uIHJnYmEociwgZywgYiwgYSkKewogICAgcmV0dXJuICJyZ2JhKCIgKyBN
YXRoLmZsb29yKHIpICsgIiwgIiArIE1hdGguZmxvb3IoZykgKyAiLCAiICsgTWF0aC5mbG9vcihi
KSArICIsICIgKyBhICsgIikiOwp9CgpmdW5jdGlvbiByZ2J2KHYpCnsKICAgIHJldHVybiAicmdi
YSgiICsgdi5qb2luKCIsIikgKyAiKSI7Cn0KCmZ1bmN0aW9uIHJhbmRvbV9jb2xvcigpCnsKICAg
IHJldHVybiBbIE1hdGguZmxvb3IoTWF0aC5yYW5kb20oKSAqIDI1NSksIE1hdGguZmxvb3IoTWF0
aC5yYW5kb20oKSAqIDI1NSksIE1hdGguZmxvb3IoTWF0aC5yYW5kb20oKSAqIDI1NSksIDEgXTsK
fQoKZnVuY3Rpb24gZGlzYygpCnsKICAgIHZhciBkaXNjRGl2ID0gZG9jdW1lbnQuY3JlYXRlRWxl
bWVudCgnZGl2Jyk7CiAgICBkaXNjRGl2LmNsYXNzTmFtZSA9ICdkaXNjJzsKCiAgICB2YXIgciA9
IE1hdGgucmFuZG9tKCkgKiA1MCArIDIwOwogICAgZGlzY0Rpdi5zdHlsZS53aWR0aCA9IChyICog
MikgKyAncHgnOwogICAgZGlzY0Rpdi5zdHlsZS5oZWlnaHQgPSAociAqIDIpICsgJ3B4JzsKCiAg
ICByZXR1cm4gZGlzY0RpdjsKfQoKZnVuY3Rpb24gZGVzdHJveURpc2MoKQp7CiAgdmFyIGNvbnRh
aW5lciA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdwbGFuZScpOwogIGNvbnRhaW5lci5yZW1v
dmVDaGlsZChjb250YWluZXIuZmlyc3RDaGlsZCk7Cn0KCmZ1bmN0aW9uIGNsaWNrZWQoZSkgewp9
CgpmdW5jdGlvbiBtYWtlRGlzYygpCnsKICAgIHZhciBhID0gZGlzYygpOwogICAgYS5zdHlsZS53
ZWJraXRUcmFuc2Zvcm0gPSB0cmFuc2xhdGUoTWF0aC5yYW5kb20oKSAqIDMyMCwgTWF0aC5yYW5k
b20oKSAqIDM2MCk7CiAgICAKICAgIC8vIG1lbW9yeSBncm93dGgKICAgIGEuYWRkRXZlbnRMaXN0
ZW5lcigiY2xpY2siLCBmdW5jdGlvbiAoKSB7fSwgdHJ1ZSk7CiAgICAKICAgIC8vIG5vIG1lbW9y
eSBncm93dGgKICAgIC8vYS5hZGRFdmVudExpc3RlbmVyKCJjbGljayIsIGNsaWNrZWQsIHRydWUp
OwogICAgCiAgICBzZXRUaW1lb3V0KGRlc3Ryb3lEaXNjLCAxNTAwKTsKICAgIAogICAgZG9jdW1l
bnQuZ2V0RWxlbWVudEJ5SWQoJ3BsYW5lJykuYXBwZW5kQ2hpbGQoYSk7Cn0KCmZ1bmN0aW9uIG1h
a2VPbmVEaXNjKCkKewogIG1ha2VEaXNjKCk7CiAgcmFuZCgpOwp9CgpmdW5jdGlvbiByYW5kKCkK
ewogICAgc2V0VGltZW91dChtYWtlT25lRGlzYywgTWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpICog
MzAwKSk7Cn0KCmZ1bmN0aW9uIG9uUGFnZUxvYWQoKQp7CiAgICByYW5kKG1ha2VEaXNjKTsKfQoK
ZnVuY3Rpb24gc2V0Q2FyZEluZm8obmFtZSkKewp9Cgp3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcign
bG9hZCcsIG9uUGFnZUxvYWQsIGZhbHNlKTsKPC9zY3JpcHQ+Cgo8L2JvZHk+CjwvaHRtbD4=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="0"
              isprivate="0"
          >
            <attachid>28984</attachid>
            <date>2009-03-26 14:02:45 -0700</date>
            <delta_ts>2009-03-26 14:02:45 -0700</delta_ts>
            <desc>reduction</desc>
            <filename>scratch.html</filename>
            <type>text/html</type>
            <size>284</size>
            <attacher name="Geoffrey Garen">ggaren</attacher>
            
              <data encoding="base64">PHNjcmlwdD4KZnVuY3Rpb24gbGVhaygpIHsKICAgIGZvciAodmFyIGkgPSAwOyBpIDwgMTAyNDsg
KytpKSB7CiAgICAgICAgdmFyIGRpdiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpOwog
ICAgICAgIHZhciBsaXN0ZW5lciA9IGZ1bmN0aW9uICgpIHt9OwogICAgICAgIGxpc3RlbmVyLmN5
Y2xlID0gZGl2OwogICAgICAgIGRpdi5vbmNsaWNrID0gbGlzdGVuZXI7CiAgICB9Cn0KPC9zY3Jp
cHQ+Cgo8YnV0dG9uIG9uY2xpY2s9ImxlYWsoKSI+bGVhayBzb21lIG1lbW9yeTwvYnV0dG9uPgo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>29286</attachid>
            <date>2009-04-06 13:10:46 -0700</date>
            <delta_ts>2009-04-06 13:16:01 -0700</delta_ts>
            <desc>patch</desc>
            <filename>patch-mark.txt</filename>
            <type>text/plain</type>
            <size>13958</size>
            <attacher name="Geoffrey Garen">ggaren</attacher>
            
              <data encoding="base64">SW5kZXg6IENoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBDaGFuZ2VMb2cJKHJldmlzaW9uIDQyMjUz
KQorKysgQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMzQgQEAKKzIwMDktMDQt
MDYgIEdlb2ZmcmV5IEdhcmVuICA8Z2dhcmVuQGFwcGxlLmNvbT4KKworICAgICAgICBSZXZpZXdl
ZCBieSBOT0JPRFkgKE9PUFMhKS4KKyAgICAgICAgCisgICAgICAgIEZpeGVkIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMTI2MAorICAgICAgICBVbmJvdW5kZWQgbWVt
b3J5IGdyb3d0aCB3aGVuIGNodXJuaW5nIGVsZW1lbnRzIHdpdGggYW5vbnltb3VzIGV2ZW50IGhh
bmRsZXIgZnVuY3Rpb25zCisKKyAgICAgICAgVGhlIHByb2JsZW0gd2FzIHRoYXQgYSBwcm90ZWN0
ZWQgZXZlbnQgbGlzdGVuZXIncyBzY29wZSBjaGFpbiB3b3VsZCBlbmQKKyAgICAgICAgdXAgd2l0
aCBhIHJlZmVyZW5jZSB0byB0aGUgTm9kZSBwcm90ZWN0aW5nIGl0LCBjYXVzaW5nIGEgY3ljbGUu
IFRoZQorICAgICAgICBzb2x1dGlvbiBpcyB0byBzdG9wIHByb3RlY3RpbmcgZXZlbnQgbGlzdGVu
ZXJzIGFuZCByZWx5IG9uIG1hcmtpbmcgaW5zdGVhZC4KKworICAgICAgICBUaGlzIHBhdGNoIGNv
bnZlcnRzIG1vc3QgTm9kZSBldmVudCBsaXN0ZW5lcnMgdG8gdXNlIG1hcmtpbmcgaW5zdGVhZCBv
ZgorICAgICAgICBHQyBwcm90ZWN0aW9uLgorCisgICAgICAgICogYmluZGluZ3MvanMvSlNET01C
aW5kaW5nLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmlzT2JzZXJ2YWJsZVRocm91Z2hET00pOgor
ICAgICAgICAoV2ViQ29yZTo6bWFya0RPTU5vZGVzRm9yRG9jdW1lbnQpOiBSZWZhY3RvcmVkIHRo
ZSB0ZXN0IGZvciB3aGV0aGVyIGEgTm9kZQorICAgICAgICBuZWVkcyBtYXJraW5nLCBhbmQgYWRk
ZWQgYSBjYXNlIGZvciBtYXJraW5nIHRoZSBub2RlIGluIG9yZGVyIHRvIG1hcmsgaXRzCisgICAg
ICAgIGV2ZW50IGxpc3RlbmVycy4KKworICAgICAgICAqIGJpbmRpbmdzL2pzL0pTTm9kZUN1c3Rv
bS5jcHA6CisgICAgICAgIChXZWJDb3JlOjptYXJrRXZlbnRMaXN0ZW5lcnMpOgorICAgICAgICAo
V2ViQ29yZTo6SlNOb2RlOjphZGRFdmVudExpc3RlbmVyKToKKyAgICAgICAgKFdlYkNvcmU6OkpT
Tm9kZTo6cmVtb3ZlRXZlbnRMaXN0ZW5lcik6CisgICAgICAgIChXZWJDb3JlOjpKU05vZGU6Om1h
cmspOiBBZGRlZCBjb2RlIHRvIG1hcmsgYSBOb2RlJ3MgZXZlbnQgbGlzdGVuZXJzIHdoZW4KKyAg
ICAgICAgbWFya2luZyB0aGUgTm9kZS4gQ2hhbmdlZCBjb2RlIHVzaW5nIHByb3RlY3RlZCBldmVu
dCBsaXN0ZW5lciB0byB1c2UgZXZlbnQKKyAgICAgICAgbGlzdGVuZXIuCisKKyAgICAgICAgKiBk
b20vTm9kZS5pZGw6IENoYW5nZWQgY29kZSB1c2luZyBwcm90ZWN0ZWQgZXZlbnQgbGlzdGVuZXIg
dG8gdXNlIGV2ZW50CisgICAgICAgIGxpc3RlbmVyLgorCiAyMDA5LTA0LTA2ICBHdXN0YXZvIE5v
cm9uaGEgU2lsdmEgIDxndXN0YXZvLm5vcm9uaGFAY29sbGFib3JhLmNvLnVrPgogCiAgICAgICAg
IFJ1YmJlci1zdGFtcGVkIGJ5IFNhbSBXZWluaWcuCkluZGV4OiBiaW5kaW5ncy9qcy9KU0RPTUJp
bmRpbmcuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIGJpbmRpbmdzL2pzL0pTRE9NQmluZGluZy5jcHAJKHJl
dmlzaW9uIDQyMjM1KQorKysgYmluZGluZ3MvanMvSlNET01CaW5kaW5nLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMjU5LDMyICsyNTksNDUgQEAgdm9pZCBmb3JnZXRBbGxET01Ob2Rlc0ZvckRvY3Vt
ZW50KERvY3VtZQogICAgIHJlbW92ZVdyYXBwZXJzKGRvY3VtZW50LT53cmFwcGVyQ2FjaGUoKSk7
CiB9CiAKLXZvaWQgbWFya0RPTU5vZGVzRm9yRG9jdW1lbnQoRG9jdW1lbnQqIGRvYykKK3N0YXRp
YyBpbmxpbmUgYm9vbCBpc09ic2VydmFibGVUaHJvdWdoRE9NKEpTTm9kZSoganNOb2RlKQogewot
ICAgIC8vIElmIGEgbm9kZSdzIEpTIHdyYXBwZXIgaG9sZHMgY3VzdG9tIHByb3BlcnRpZXMsIHRo
b3NlIHByb3BlcnRpZXMgbXVzdAotICAgIC8vIHBlcnNpc3QgZXZlcnkgdGltZSB0aGUgbm9kZSBp
cyBmZXRjaGVkIGZyb20gdGhlIERPTS4gU28sIHdlIGtlZXAgSlMKLSAgICAvLyB3cmFwcGVycyBs
aWtlIHRoYXQgZnJvbSBiZWluZyBnYXJiYWdlIGNvbGxlY3RlZC4KKyAgICAvLyBDZXJ0YWluIGNv
bmRpdGlvbnMgaW1wbGljaXRseSBtYWtlIGEgSlMgRE9NIG5vZGUgd3JhcHBlciBvYnNlcnZhYmxl
CisgICAgLy8gdGhyb3VnaCB0aGUgRE9NLCBldmVuIGlmIG5vIGV4cGxpY2l0IHJlZmVyZW5jZSB0
byBpdCByZW1haW5zLgorCisgICAgTm9kZSogbm9kZSA9IGpzTm9kZS0+aW1wbCgpOworCisgICAg
aWYgKG5vZGUtPmluRG9jdW1lbnQoKSkgeworICAgICAgICAvLyAxLiBJZiBhIG5vZGUgaXMgaW4g
dGhlIGRvY3VtZW50LCBhbmQgaXRzIHdyYXBwZXIgaGFzIGN1c3RvbSBwcm9wZXJ0aWVzLAorICAg
ICAgICAvLyB0aGUgd3JhcHBlciBpcyBvYnNlcnZhYmxlIGJlY2F1c2UgZnV0dXJlIGFjY2VzcyB0
byB0aGUgbm9kZSB0aHJvdWdoIHRoZQorICAgICAgICAvLyBET00gbXVzdCByZWZsZWN0IHRob3Nl
IHByb3BlcnRpZXMuCisgICAgICAgIGlmIChqc05vZGUtPmhhc0N1c3RvbVByb3BlcnRpZXMoKSkK
KyAgICAgICAgICAgIHJldHVybiB0cnVlOworCisgICAgICAgIC8vIDIuIElmIGEgbm9kZSBpcyBp
biB0aGUgZG9jdW1lbnQsIGFuZCBoYXMgZXZlbnQgbGlzdGVuZXJzLCBpdHMgd3JhcHBlciBpcwor
ICAgICAgICAvLyBvYnNlcnZhYmxlIGJlY2F1c2UgaXRzIHdyYXBwZXIgaXMgcmVzcG9uc2libGUg
Zm9yIG1hcmtpbmcgdGhvc2UgZXZlbnQgbGlzdGVuZXJzLgorICAgICAgICBpZiAobm9kZS0+ZXZl
bnRMaXN0ZW5lcnMoKS5zaXplKCkpCisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsgLy8gVGVjaG5p
Y2FsbHksIHdlIG1heSBvdmVyemVhbG91c2x5IG1hcmsgYSB3cmFwcGVyIGZvciBhIG5vZGUgdGhh
dCBoYXMgb25seSBub24tSlMgZXZlbnQgbGlzdGVuZXJzLiBPaCB3ZWxsLgorICAgIH0gZWxzZSB7
CisgICAgICAgIC8vIDMuIElmIGEgd3JhcHBlciBpcyB0aGUgbGFzdCByZWZlcmVuY2UgdG8gYW4g
aW1hZ2UgZWxlbWVudCB0aGF0IGlzIGxvYWRpbmcKKyAgICAgICAgLy8gYnV0IG5vdCBpbiB0aGUg
ZG9jdW1lbnQgLS0gd2hpY2ggaGFwcGVucyBpbiB0aGUgY2FzZSBvZiAibmV3IEltYWdlIiAtLSB0
aGUKKyAgICAgICAgLy8gd3JhcHBlciBpcyBvYnNlcnZhYmxlIGJlY2F1c2UgaXQgaXMgdGhlIG9u
bHkgdGhpbmcga2VlcGluZyB0aGUgaW1hZ2UgZWxlbWVudAorICAgICAgICAvLyBhbGl2ZSwgYW5k
IGlmIHRoZSBpbWFnZSBlbGVtZW50IGlzIGRlc3Ryb3llZCwgaXRzIGxvYWQgZXZlbnQgd2lsbCBu
b3QgZmlyZS4KKyAgICAgICAgLy8gRklYTUU6IFRoZSBET00gc2hvdWxkIG1hbmFnZSB0aGlzIGlz
c3VlIHdpdGhvdXQgdGhlIGhlbHAgb2YgSmF2YVNjcmlwdCB3cmFwcGVycy4KKyAgICAgICAgaWYg
KG5vZGUtPmhhc1RhZ05hbWUoaW1nVGFnKSAmJiAhc3RhdGljX2Nhc3Q8SFRNTEltYWdlRWxlbWVu
dCo+KG5vZGUpLT5oYXZlRmlyZWRMb2FkRXZlbnQoKSkKKyAgICAgICAgICAgIHJldHVybiB0cnVl
OworICAgIH0KKworICAgIHJldHVybiBmYWxzZTsKK30KIAordm9pZCBtYXJrRE9NTm9kZXNGb3JE
b2N1bWVudChEb2N1bWVudCogZG9jKQorewogICAgIEpTV3JhcHBlckNhY2hlJiBub2RlRGljdCA9
IGRvYy0+d3JhcHBlckNhY2hlKCk7CiAgICAgSlNXcmFwcGVyQ2FjaGU6Oml0ZXJhdG9yIG5vZGVF
bmQgPSBub2RlRGljdC5lbmQoKTsKICAgICBmb3IgKEpTV3JhcHBlckNhY2hlOjppdGVyYXRvciBu
b2RlSXQgPSBub2RlRGljdC5iZWdpbigpOyBub2RlSXQgIT0gbm9kZUVuZDsgKytub2RlSXQpIHsK
ICAgICAgICAgSlNOb2RlKiBqc05vZGUgPSBub2RlSXQtPnNlY29uZDsKLSAgICAgICAgTm9kZSog
bm9kZSA9IGpzTm9kZS0+aW1wbCgpOwotCi0gICAgICAgIGlmIChqc05vZGUtPm1hcmtlZCgpKQot
ICAgICAgICAgICAgY29udGludWU7Ci0KLSAgICAgICAgLy8gTm8gbmVlZCB0byBwcmVzZXJ2ZSBh
IHdyYXBwZXIgdGhhdCBoYXMgbm8gY3VzdG9tIHByb3BlcnRpZXMgb3IgaXMgbm8KLSAgICAgICAg
Ly8gbG9uZ2VyIGZldGNoYWJsZSB0aHJvdWdoIHRoZSBET00uCi0gICAgICAgIGlmICghanNOb2Rl
LT5oYXNDdXN0b21Qcm9wZXJ0aWVzKCkgfHwgIW5vZGUtPmluRG9jdW1lbnQoKSkgewotICAgICAg
ICAgICAgLy8uLi4gdW5sZXNzIHRoZSB3cmFwcGVyIHdyYXBzIGEgbG9hZGluZyBpbWFnZSwgc2lu
Y2UgdGhlICJuZXcgSW1hZ2UiCi0gICAgICAgICAgICAvLyBzeW50YXggYWxsb3dzIGFuIG9ycGhh
biBpbWFnZSB3cmFwcGVyIHRvIGJlIHRoZSBsYXN0IHJlZmVyZW5jZQotICAgICAgICAgICAgLy8g
dG8gYSBsb2FkaW5nIGltYWdlLCB3aG9zZSBsb2FkIGV2ZW50IG1pZ2h0IGhhdmUgaW1wb3J0YW50
IHNpZGUtZWZmZWN0cy4KLSAgICAgICAgICAgIGlmICghbm9kZS0+aGFzVGFnTmFtZShpbWdUYWcp
IHx8IHN0YXRpY19jYXN0PEhUTUxJbWFnZUVsZW1lbnQqPihub2RlKS0+aGF2ZUZpcmVkTG9hZEV2
ZW50KCkpCi0gICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIH0KLQotICAgICAgICBq
c05vZGUtPm1hcmsoKTsKKyAgICAgICAgaWYgKCFqc05vZGUtPm1hcmtlZCgpICYmIGlzT2JzZXJ2
YWJsZVRocm91Z2hET00oanNOb2RlKSkKKyAgICAgICAgICAgIGpzTm9kZS0+bWFyaygpOwogICAg
IH0KIH0KIApJbmRleDogYmluZGluZ3MvanMvSlNOb2RlQ3VzdG9tLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBiaW5kaW5ncy9qcy9KU05vZGVDdXN0b20uY3BwCShyZXZpc2lvbiA0MjIzNSkKKysrIGJpbmRp
bmdzL2pzL0pTTm9kZUN1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTUyLDYgKzUyLDcgQEAK
ICNpbmNsdWRlICJOb2RlLmgiCiAjaW5jbHVkZSAiTm90YXRpb24uaCIKICNpbmNsdWRlICJQcm9j
ZXNzaW5nSW5zdHJ1Y3Rpb24uaCIKKyNpbmNsdWRlICJSZWdpc3RlcmVkRXZlbnRMaXN0ZW5lci5o
IgogI2luY2x1ZGUgIlRleHQuaCIKICNpbmNsdWRlIDx3dGYvUGFzc1JlZlB0ci5oPgogI2luY2x1
ZGUgPHd0Zi9SZWZQdHIuaD4KQEAgLTY3LDYgKzY4LDEyIEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsK
IAogdHlwZWRlZiBpbnQgRXhwZWN0aW9uQ29kZTsKIAorc3RhdGljIGlubGluZSB2b2lkIG1hcmtF
dmVudExpc3RlbmVycyhjb25zdCBSZWdpc3RlcmVkRXZlbnRMaXN0ZW5lclZlY3RvciYgbGlzdGVu
ZXJzKQoreworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbGlzdGVuZXJzLnNpemUoKTsgKytp
KQorICAgICAgICBsaXN0ZW5lcnNbaV0tPmxpc3RlbmVyKCktPm1hcmsoKTsKK30KKwogSlNWYWx1
ZVB0ciBKU05vZGU6Omluc2VydEJlZm9yZShFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IEFyZ0xpc3Qm
IGFyZ3MpCiB7CiAgICAgRXhjZXB0aW9uQ29kZSBlYyA9IDA7CkBAIC0xMTMsNyArMTIwLDcgQEAg
SlNWYWx1ZVB0ciBKU05vZGU6OmFkZEV2ZW50TGlzdGVuZXIoRXhlYwogICAgIGlmICghZ2xvYmFs
T2JqZWN0KQogICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKIAotICAgIGlmIChSZWZQdHI8
SlNQcm90ZWN0ZWRFdmVudExpc3RlbmVyPiBsaXN0ZW5lciA9IGdsb2JhbE9iamVjdC0+ZmluZE9y
Q3JlYXRlSlNQcm90ZWN0ZWRFdmVudExpc3RlbmVyKGFyZ3MuYXQoZXhlYywgMSkpKQorICAgIGlm
IChSZWZQdHI8SlNFdmVudExpc3RlbmVyPiBsaXN0ZW5lciA9IGdsb2JhbE9iamVjdC0+ZmluZE9y
Q3JlYXRlSlNFdmVudExpc3RlbmVyKGFyZ3MuYXQoZXhlYywgMSkpKQogICAgICAgICBpbXBsKCkt
PmFkZEV2ZW50TGlzdGVuZXIoYXJncy5hdChleGVjLCAwKS50b1N0cmluZyhleGVjKSwgbGlzdGVu
ZXIucmVsZWFzZSgpLCBhcmdzLmF0KGV4ZWMsIDIpLnRvQm9vbGVhbihleGVjKSk7CiAKICAgICBy
ZXR1cm4ganNVbmRlZmluZWQoKTsKQEAgLTEyNSw3ICsxMzIsNyBAQCBKU1ZhbHVlUHRyIEpTTm9k
ZTo6cmVtb3ZlRXZlbnRMaXN0ZW5lcihFCiAgICAgaWYgKCFnbG9iYWxPYmplY3QpCiAgICAgICAg
IHJldHVybiBqc1VuZGVmaW5lZCgpOwogCi0gICAgaWYgKEpTUHJvdGVjdGVkRXZlbnRMaXN0ZW5l
ciogbGlzdGVuZXIgPSBnbG9iYWxPYmplY3QtPmZpbmRKU1Byb3RlY3RlZEV2ZW50TGlzdGVuZXIo
YXJncy5hdChleGVjLCAxKSkpCisgICAgaWYgKEpTRXZlbnRMaXN0ZW5lciogbGlzdGVuZXIgPSBn
bG9iYWxPYmplY3QtPmZpbmRKU0V2ZW50TGlzdGVuZXIoYXJncy5hdChleGVjLCAxKSkpCiAgICAg
ICAgIGltcGwoKS0+cmVtb3ZlRXZlbnRMaXN0ZW5lcihhcmdzLmF0KGV4ZWMsIDApLnRvU3RyaW5n
KGV4ZWMpLCBsaXN0ZW5lciwgYXJncy5hdChleGVjLCAyKS50b0Jvb2xlYW4oZXhlYykpOwogCiAg
ICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CkBAIC0xNDEsMTYgKzE0OCwxNSBAQCB2b2lkIEpTTm9k
ZTo6bWFyaygpCiAKICAgICBOb2RlKiBub2RlID0gbV9pbXBsLmdldCgpOwogCi0gICAgLy8gTm9k
ZXMgaW4gdGhlIGRvY3VtZW50IGFyZSBrZXB0IGFsaXZlIGJ5IEpTRG9jdW1lbnQ6Om1hcmssCi0g
ICAgLy8gc28gd2UgaGF2ZSBubyBzcGVjaWFsIHJlc3BvbnNpYmlsaXRpZXMgYW5kIGNhbiBqdXN0
IGNhbGwgdGhlIGJhc2UgY2xhc3MgaGVyZS4KKyAgICAvLyBOb2RlcyBpbiB0aGUgZG9jdW1lbnQg
YXJlIGtlcHQgYWxpdmUgYnkgSlNEb2N1bWVudDo6bWFyaywgc28gd2Ugb25seSBuZWVkCisgICAg
Ly8gdG8gbWFyayBvdXJzZWx2ZXMgYW5kIG1ha2Ugc3VyZSB0aGF0IHRoZSBkb2N1bWVudCBpcyBt
YXJrZWQuCiAgICAgaWYgKG5vZGUtPmluRG9jdW1lbnQoKSkgewotICAgICAgICAvLyBCdXQgaWYg
dGhlIGRvY3VtZW50IGlzbid0IG1hcmtlZCB3ZSBoYXZlIHRvIG1hcmsgaXQgdG8gZW5zdXJlIHRo
YXQKLSAgICAgICAgLy8gbm9kZXMgcmVhY2hhYmxlIGZyb20gdGhpcyBvbmUgYXJlIGFsc28gbWFy
a2VkCisgICAgICAgIERPTU9iamVjdDo6bWFyaygpOworICAgICAgICBtYXJrRXZlbnRMaXN0ZW5l
cnMobm9kZS0+ZXZlbnRMaXN0ZW5lcnMoKSk7CiAgICAgICAgIGlmIChEb2N1bWVudCogZG9jID0g
bm9kZS0+b3duZXJEb2N1bWVudCgpKQogICAgICAgICAgICAgaWYgKERPTU9iamVjdCogZG9jV3Jh
cHBlciA9IGdldENhY2hlZERPTU9iamVjdFdyYXBwZXIoKkhlYXA6OmhlYXAodGhpcyktPmdsb2Jh
bERhdGEoKSwgZG9jKSkKICAgICAgICAgICAgICAgICBpZiAoIWRvY1dyYXBwZXItPm1hcmtlZCgp
KQogICAgICAgICAgICAgICAgICAgICBkb2NXcmFwcGVyLT5tYXJrKCk7Ci0gICAgICAgIERPTU9i
amVjdDo6bWFyaygpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCkBAIC0xNjAsMTQgKzE2Niwx
NSBAQCB2b2lkIEpTTm9kZTo6bWFyaygpCiAgICAgZm9yIChOb2RlKiBjdXJyZW50ID0gbV9pbXBs
LmdldCgpOyBjdXJyZW50OyBjdXJyZW50ID0gY3VycmVudC0+cGFyZW50Tm9kZSgpKQogICAgICAg
ICByb290ID0gY3VycmVudDsKIAotICAgIC8vIElmIHdlJ3JlIGFscmVhZHkgbWFya2luZyB0aGlz
IHRyZWUsIHRoZW4gd2UgY2FuIHNpbXBseSBtYXJrIHRoaXMgd3JhcHBlcgotICAgIC8vIGJ5IGNh
bGxpbmcgdGhlIGJhc2UgY2xhc3M7IG91ciBjYWxsZXIgaXMgaXRlcmF0aW5nIHRoZSB0cmVlLgor
ICAgIC8vIE5vZGVzIGluIGEgc3VidHJlZSBhcmUga2VwdCBhbGl2ZSBieSB0aGUgdHJlZSdzIHJv
b3QsIHNvLCBpZiB0aGUgcm9vdAorICAgIC8vIGlzIGFscmVhZHkgbWFya2luZyB0aGUgdHJlZSwg
d2Ugb25seSBuZWVkIHRvIG1hcmsgb3Vyc2VsdmVzLgogICAgIGlmIChyb290LT5pblN1YnRyZWVN
YXJrKCkpIHsKICAgICAgICAgRE9NT2JqZWN0OjptYXJrKCk7CisgICAgICAgIG1hcmtFdmVudExp
c3RlbmVycyhub2RlLT5ldmVudExpc3RlbmVycygpKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0K
IAotICAgIC8vIE1hcmsgdGhlIHdob2xlIHRyZWU7IHVzZSB0aGUgZ2xvYmFsIHNldCBvZiByb290
cyB0byBhdm9pZCByZWVudGVyaW5nLgorICAgIC8vIE1hcmsgdGhlIHdob2xlIHRyZWUgc3VidHJl
ZS4KICAgICByb290LT5zZXRJblN1YnRyZWVNYXJrKHRydWUpOwogICAgIGZvciAoTm9kZSogbm9k
ZVRvTWFyayA9IHJvb3Q7IG5vZGVUb01hcms7IG5vZGVUb01hcmsgPSBub2RlVG9NYXJrLT50cmF2
ZXJzZU5leHROb2RlKCkpIHsKICAgICAgICAgSlNOb2RlKiB3cmFwcGVyID0gZ2V0Q2FjaGVkRE9N
Tm9kZVdyYXBwZXIobV9pbXBsLT5kb2N1bWVudCgpLCBub2RlVG9NYXJrKTsKSW5kZXg6IGRvbS9O
b2RlLmlkbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBkb20vTm9kZS5pZGwJKHJldmlzaW9uIDQyMjM1KQorKysg
ZG9tL05vZGUuaWRsCSh3b3JraW5nIGNvcHkpCkBAIC0xMzUsNDYgKzEzNSw0NiBAQCBtb2R1bGUg
Y29yZSB7CiAKICNpZiAhZGVmaW5lZChMQU5HVUFHRV9PQkpFQ1RJVkVfQykKICNpZiAhZGVmaW5l
ZChMQU5HVUFHRV9DT00pCi0gICAgICAgIGF0dHJpYnV0ZSBbRG9udEVudW0sIFByb3RlY3RlZExp
c3RlbmVyXSBFdmVudExpc3RlbmVyIG9uYWJvcnQ7Ci0gICAgICAgIGF0dHJpYnV0ZSBbRG9udEVu
dW0sIFByb3RlY3RlZExpc3RlbmVyXSBFdmVudExpc3RlbmVyIG9uYmx1cjsKLSAgICAgICAgYXR0
cmlidXRlIFtEb250RW51bSwgUHJvdGVjdGVkTGlzdGVuZXJdIEV2ZW50TGlzdGVuZXIgb25jaGFu
Z2U7Ci0gICAgICAgIGF0dHJpYnV0ZSBbRG9udEVudW0sIFByb3RlY3RlZExpc3RlbmVyXSBFdmVu
dExpc3RlbmVyIG9uY2xpY2s7Ci0gICAgICAgIGF0dHJpYnV0ZSBbRG9udEVudW0sIFByb3RlY3Rl
ZExpc3RlbmVyXSBFdmVudExpc3RlbmVyIG9uY29udGV4dG1lbnU7Ci0gICAgICAgIGF0dHJpYnV0
ZSBbRG9udEVudW0sIFByb3RlY3RlZExpc3RlbmVyXSBFdmVudExpc3RlbmVyIG9uZGJsY2xpY2s7
Ci0gICAgICAgIGF0dHJpYnV0ZSBbRG9udEVudW0sIFByb3RlY3RlZExpc3RlbmVyXSBFdmVudExp
c3RlbmVyIG9uZXJyb3I7Ci0gICAgICAgIGF0dHJpYnV0ZSBbRG9udEVudW0sIFByb3RlY3RlZExp
c3RlbmVyXSBFdmVudExpc3RlbmVyIG9uZm9jdXM7Ci0gICAgICAgIGF0dHJpYnV0ZSBbRG9udEVu
dW0sIFByb3RlY3RlZExpc3RlbmVyXSBFdmVudExpc3RlbmVyIG9uaW5wdXQ7Ci0gICAgICAgIGF0
dHJpYnV0ZSBbRG9udEVudW0sIFByb3RlY3RlZExpc3RlbmVyXSBFdmVudExpc3RlbmVyIG9ua2V5
ZG93bjsKLSAgICAgICAgYXR0cmlidXRlIFtEb250RW51bSwgUHJvdGVjdGVkTGlzdGVuZXJdIEV2
ZW50TGlzdGVuZXIgb25rZXlwcmVzczsKLSAgICAgICAgYXR0cmlidXRlIFtEb250RW51bSwgUHJv
dGVjdGVkTGlzdGVuZXJdIEV2ZW50TGlzdGVuZXIgb25rZXl1cDsKLSAgICAgICAgYXR0cmlidXRl
IFtEb250RW51bSwgUHJvdGVjdGVkTGlzdGVuZXJdIEV2ZW50TGlzdGVuZXIgb25sb2FkOwotICAg
ICAgICBhdHRyaWJ1dGUgW0RvbnRFbnVtLCBQcm90ZWN0ZWRMaXN0ZW5lcl0gRXZlbnRMaXN0ZW5l
ciBvbm1vdXNlZG93bjsKLSAgICAgICAgYXR0cmlidXRlIFtEb250RW51bSwgUHJvdGVjdGVkTGlz
dGVuZXJdIEV2ZW50TGlzdGVuZXIgb25tb3VzZW1vdmU7Ci0gICAgICAgIGF0dHJpYnV0ZSBbRG9u
dEVudW0sIFByb3RlY3RlZExpc3RlbmVyXSBFdmVudExpc3RlbmVyIG9ubW91c2VvdXQ7Ci0gICAg
ICAgIGF0dHJpYnV0ZSBbRG9udEVudW0sIFByb3RlY3RlZExpc3RlbmVyXSBFdmVudExpc3RlbmVy
IG9ubW91c2VvdmVyOwotICAgICAgICBhdHRyaWJ1dGUgW0RvbnRFbnVtLCBQcm90ZWN0ZWRMaXN0
ZW5lcl0gRXZlbnRMaXN0ZW5lciBvbm1vdXNldXA7Ci0gICAgICAgIGF0dHJpYnV0ZSBbRG9udEVu
dW0sIFByb3RlY3RlZExpc3RlbmVyXSBFdmVudExpc3RlbmVyIG9ubW91c2V3aGVlbDsKLSAgICAg
ICAgYXR0cmlidXRlIFtEb250RW51bSwgUHJvdGVjdGVkTGlzdGVuZXJdIEV2ZW50TGlzdGVuZXIg
b25iZWZvcmVjdXQ7Ci0gICAgICAgIGF0dHJpYnV0ZSBbRG9udEVudW0sIFByb3RlY3RlZExpc3Rl
bmVyXSBFdmVudExpc3RlbmVyIG9uY3V0OwotICAgICAgICBhdHRyaWJ1dGUgW0RvbnRFbnVtLCBQ
cm90ZWN0ZWRMaXN0ZW5lcl0gRXZlbnRMaXN0ZW5lciBvbmJlZm9yZWNvcHk7Ci0gICAgICAgIGF0
dHJpYnV0ZSBbRG9udEVudW0sIFByb3RlY3RlZExpc3RlbmVyXSBFdmVudExpc3RlbmVyIG9uY29w
eTsKLSAgICAgICAgYXR0cmlidXRlIFtEb250RW51bSwgUHJvdGVjdGVkTGlzdGVuZXJdIEV2ZW50
TGlzdGVuZXIgb25iZWZvcmVwYXN0ZTsKLSAgICAgICAgYXR0cmlidXRlIFtEb250RW51bSwgUHJv
dGVjdGVkTGlzdGVuZXJdIEV2ZW50TGlzdGVuZXIgb25wYXN0ZTsKLSAgICAgICAgYXR0cmlidXRl
IFtEb250RW51bSwgUHJvdGVjdGVkTGlzdGVuZXJdIEV2ZW50TGlzdGVuZXIgb25kcmFnZW50ZXI7
Ci0gICAgICAgIGF0dHJpYnV0ZSBbRG9udEVudW0sIFByb3RlY3RlZExpc3RlbmVyXSBFdmVudExp
c3RlbmVyIG9uZHJhZ292ZXI7Ci0gICAgICAgIGF0dHJpYnV0ZSBbRG9udEVudW0sIFByb3RlY3Rl
ZExpc3RlbmVyXSBFdmVudExpc3RlbmVyIG9uZHJhZ2xlYXZlOwotICAgICAgICBhdHRyaWJ1dGUg
W0RvbnRFbnVtLCBQcm90ZWN0ZWRMaXN0ZW5lcl0gRXZlbnRMaXN0ZW5lciBvbmRyb3A7Ci0gICAg
ICAgIGF0dHJpYnV0ZSBbRG9udEVudW0sIFByb3RlY3RlZExpc3RlbmVyXSBFdmVudExpc3RlbmVy
IG9uZHJhZ3N0YXJ0OwotICAgICAgICBhdHRyaWJ1dGUgW0RvbnRFbnVtLCBQcm90ZWN0ZWRMaXN0
ZW5lcl0gRXZlbnRMaXN0ZW5lciBvbmRyYWc7Ci0gICAgICAgIGF0dHJpYnV0ZSBbRG9udEVudW0s
IFByb3RlY3RlZExpc3RlbmVyXSBFdmVudExpc3RlbmVyIG9uZHJhZ2VuZDsKLSAgICAgICAgYXR0
cmlidXRlIFtEb250RW51bSwgUHJvdGVjdGVkTGlzdGVuZXJdIEV2ZW50TGlzdGVuZXIgb25yZXNl
dDsKLSAgICAgICAgYXR0cmlidXRlIFtEb250RW51bSwgUHJvdGVjdGVkTGlzdGVuZXJdIEV2ZW50
TGlzdGVuZXIgb25yZXNpemU7Ci0gICAgICAgIGF0dHJpYnV0ZSBbRG9udEVudW0sIFByb3RlY3Rl
ZExpc3RlbmVyXSBFdmVudExpc3RlbmVyIG9uc2Nyb2xsOwotICAgICAgICBhdHRyaWJ1dGUgW0Rv
bnRFbnVtLCBQcm90ZWN0ZWRMaXN0ZW5lcl0gRXZlbnRMaXN0ZW5lciBvbnNlYXJjaDsKLSAgICAg
ICAgYXR0cmlidXRlIFtEb250RW51bSwgUHJvdGVjdGVkTGlzdGVuZXJdIEV2ZW50TGlzdGVuZXIg
b25zZWxlY3Q7Ci0gICAgICAgIGF0dHJpYnV0ZSBbRG9udEVudW0sIFByb3RlY3RlZExpc3RlbmVy
XSBFdmVudExpc3RlbmVyIG9uc2VsZWN0c3RhcnQ7Ci0gICAgICAgIGF0dHJpYnV0ZSBbRG9udEVu
dW0sIFByb3RlY3RlZExpc3RlbmVyXSBFdmVudExpc3RlbmVyIG9uc3VibWl0OwotICAgICAgICBh
dHRyaWJ1dGUgW0RvbnRFbnVtLCBQcm90ZWN0ZWRMaXN0ZW5lcl0gRXZlbnRMaXN0ZW5lciBvbnVu
bG9hZDsKKyAgICAgICAgYXR0cmlidXRlIFtEb250RW51bV0gRXZlbnRMaXN0ZW5lciBvbmFib3J0
OworICAgICAgICBhdHRyaWJ1dGUgW0RvbnRFbnVtXSBFdmVudExpc3RlbmVyIG9uYmx1cjsKKyAg
ICAgICAgYXR0cmlidXRlIFtEb250RW51bV0gRXZlbnRMaXN0ZW5lciBvbmNoYW5nZTsKKyAgICAg
ICAgYXR0cmlidXRlIFtEb250RW51bV0gRXZlbnRMaXN0ZW5lciBvbmNsaWNrOworICAgICAgICBh
dHRyaWJ1dGUgW0RvbnRFbnVtXSBFdmVudExpc3RlbmVyIG9uY29udGV4dG1lbnU7CisgICAgICAg
IGF0dHJpYnV0ZSBbRG9udEVudW1dIEV2ZW50TGlzdGVuZXIgb25kYmxjbGljazsKKyAgICAgICAg
YXR0cmlidXRlIFtEb250RW51bV0gRXZlbnRMaXN0ZW5lciBvbmVycm9yOworICAgICAgICBhdHRy
aWJ1dGUgW0RvbnRFbnVtXSBFdmVudExpc3RlbmVyIG9uZm9jdXM7CisgICAgICAgIGF0dHJpYnV0
ZSBbRG9udEVudW1dIEV2ZW50TGlzdGVuZXIgb25pbnB1dDsKKyAgICAgICAgYXR0cmlidXRlIFtE
b250RW51bV0gRXZlbnRMaXN0ZW5lciBvbmtleWRvd247CisgICAgICAgIGF0dHJpYnV0ZSBbRG9u
dEVudW1dIEV2ZW50TGlzdGVuZXIgb25rZXlwcmVzczsKKyAgICAgICAgYXR0cmlidXRlIFtEb250
RW51bV0gRXZlbnRMaXN0ZW5lciBvbmtleXVwOworICAgICAgICBhdHRyaWJ1dGUgW0RvbnRFbnVt
XSBFdmVudExpc3RlbmVyIG9ubG9hZDsKKyAgICAgICAgYXR0cmlidXRlIFtEb250RW51bV0gRXZl
bnRMaXN0ZW5lciBvbm1vdXNlZG93bjsKKyAgICAgICAgYXR0cmlidXRlIFtEb250RW51bV0gRXZl
bnRMaXN0ZW5lciBvbm1vdXNlbW92ZTsKKyAgICAgICAgYXR0cmlidXRlIFtEb250RW51bV0gRXZl
bnRMaXN0ZW5lciBvbm1vdXNlb3V0OworICAgICAgICBhdHRyaWJ1dGUgW0RvbnRFbnVtXSBFdmVu
dExpc3RlbmVyIG9ubW91c2VvdmVyOworICAgICAgICBhdHRyaWJ1dGUgW0RvbnRFbnVtXSBFdmVu
dExpc3RlbmVyIG9ubW91c2V1cDsKKyAgICAgICAgYXR0cmlidXRlIFtEb250RW51bV0gRXZlbnRM
aXN0ZW5lciBvbm1vdXNld2hlZWw7CisgICAgICAgIGF0dHJpYnV0ZSBbRG9udEVudW1dIEV2ZW50
TGlzdGVuZXIgb25iZWZvcmVjdXQ7CisgICAgICAgIGF0dHJpYnV0ZSBbRG9udEVudW1dIEV2ZW50
TGlzdGVuZXIgb25jdXQ7CisgICAgICAgIGF0dHJpYnV0ZSBbRG9udEVudW1dIEV2ZW50TGlzdGVu
ZXIgb25iZWZvcmVjb3B5OworICAgICAgICBhdHRyaWJ1dGUgW0RvbnRFbnVtXSBFdmVudExpc3Rl
bmVyIG9uY29weTsKKyAgICAgICAgYXR0cmlidXRlIFtEb250RW51bV0gRXZlbnRMaXN0ZW5lciBv
bmJlZm9yZXBhc3RlOworICAgICAgICBhdHRyaWJ1dGUgW0RvbnRFbnVtXSBFdmVudExpc3RlbmVy
IG9ucGFzdGU7CisgICAgICAgIGF0dHJpYnV0ZSBbRG9udEVudW1dIEV2ZW50TGlzdGVuZXIgb25k
cmFnZW50ZXI7CisgICAgICAgIGF0dHJpYnV0ZSBbRG9udEVudW1dIEV2ZW50TGlzdGVuZXIgb25k
cmFnb3ZlcjsKKyAgICAgICAgYXR0cmlidXRlIFtEb250RW51bV0gRXZlbnRMaXN0ZW5lciBvbmRy
YWdsZWF2ZTsKKyAgICAgICAgYXR0cmlidXRlIFtEb250RW51bV0gRXZlbnRMaXN0ZW5lciBvbmRy
b3A7CisgICAgICAgIGF0dHJpYnV0ZSBbRG9udEVudW1dIEV2ZW50TGlzdGVuZXIgb25kcmFnc3Rh
cnQ7CisgICAgICAgIGF0dHJpYnV0ZSBbRG9udEVudW1dIEV2ZW50TGlzdGVuZXIgb25kcmFnOwor
ICAgICAgICBhdHRyaWJ1dGUgW0RvbnRFbnVtXSBFdmVudExpc3RlbmVyIG9uZHJhZ2VuZDsKKyAg
ICAgICAgYXR0cmlidXRlIFtEb250RW51bV0gRXZlbnRMaXN0ZW5lciBvbnJlc2V0OworICAgICAg
ICBhdHRyaWJ1dGUgW0RvbnRFbnVtXSBFdmVudExpc3RlbmVyIG9ucmVzaXplOworICAgICAgICBh
dHRyaWJ1dGUgW0RvbnRFbnVtXSBFdmVudExpc3RlbmVyIG9uc2Nyb2xsOworICAgICAgICBhdHRy
aWJ1dGUgW0RvbnRFbnVtXSBFdmVudExpc3RlbmVyIG9uc2VhcmNoOworICAgICAgICBhdHRyaWJ1
dGUgW0RvbnRFbnVtXSBFdmVudExpc3RlbmVyIG9uc2VsZWN0OworICAgICAgICBhdHRyaWJ1dGUg
W0RvbnRFbnVtXSBFdmVudExpc3RlbmVyIG9uc2VsZWN0c3RhcnQ7CisgICAgICAgIGF0dHJpYnV0
ZSBbRG9udEVudW1dIEV2ZW50TGlzdGVuZXIgb25zdWJtaXQ7CisgICAgICAgIGF0dHJpYnV0ZSBb
RG9udEVudW1dIEV2ZW50TGlzdGVuZXIgb251bmxvYWQ7CiAKICAgICAgICAgW0N1c3RvbV0gdm9p
ZCBhZGRFdmVudExpc3RlbmVyKGluIERPTVN0cmluZyB0eXBlLCAKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGluIEV2ZW50TGlzdGVuZXIgbGlzdGVuZXIsIAo=
</data>
<flag name="review"
          id="14546"
          type_id="1"
          status="+"
          setter="darin"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>29592</attachid>
            <date>2009-04-17 16:17:33 -0700</date>
            <delta_ts>2009-04-17 17:57:23 -0700</delta_ts>
            <desc>Next patch</desc>
            <filename>patch.txt</filename>
            <type>text/plain</type>
            <size>111417</size>
            <attacher name="Geoffrey Garen">ggaren</attacher>
            
              <data encoding="base64">SW5kZXg6IENoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBDaGFuZ2VMb2cJKHJldmlzaW9uIDQyNjMw
KQorKysgQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTI0IEBACisyMDA5LTA0
LTE3ICBHZW9mZnJleSBHYXJlbiAgPGdnYXJlbkBhcHBsZS5jb20+CisKKyAgICAgICAgUmV2aWV3
ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgTW9yZSBmaXggZm9yIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMTI2MAorICAgICAgICBVbmJvdW5kZWQgbWVt
b3J5IGdyb3d0aCB3aGVuIGNodXJuaW5nIGVsZW1lbnRzIHdpdGggYW5vbnltb3VzIGV2ZW50IGhh
bmRsZXIgZnVuY3Rpb25zCisgICAgICAgIAorICAgICAgICBTb21lIHJlZmFjdG9yaW5nIG9mICJp
bmxpbmUiIGV2ZW50IGxpc3RlbmVycy4KKyAgICAgICAgCisgICAgICAgIFJlbmFtZXM6CisgICAg
ICAgICAgICBkaXNwYXRjaEV2ZW50Rm9yVHlwZSA9PiBkaXNwYXRjaEV2ZW50CisgICAgICAgICAg
ICBzZXRXaW5kb3dJbmxpbmVFdmVudExpc3RlbmVyRm9yVHlwZUFuZEF0dHJpYnV0ZSA9PiBzZXRX
aW5kb3dJbmxpbmVFdmVudExpc3RlbmVyCisgICAgICAgICAgICByZW1vdmVJbmxpbmVFdmVudExp
c3RlbmVyRm9yVHlwZSA9PiBjbGVhcklubGluZUV2ZW50TGlzdGVuZXIKKyAgICAgICAgICAgIHNl
dElubGluZUV2ZW50TGlzdGVuZXJGb3JUeXBlID0+IHNldElubGluZUV2ZW50TGlzdGVuZXIKKyAg
ICAgICAgICAgIGlubGluZUV2ZW50TGlzdGVuZXJGb3JUeXBlID0+IGdldElubGluZUV2ZW50TGlz
dGVuZXIKKworICAgICAgICAqIGJpbmRpbmdzL2pzL0pTTGF6eUV2ZW50TGlzdGVuZXIuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6ZXZlbnRQYXJhbWV0ZXJOYW1lKToKKyAgICAgICAgKFdlYkNvcmU6
OkpTTGF6eUV2ZW50TGlzdGVuZXI6OkpTTGF6eUV2ZW50TGlzdGVuZXIpOgorICAgICAgICAoV2Vi
Q29yZTo6Y3JlYXRlSW5saW5lRXZlbnRMaXN0ZW5lcik6CisgICAgICAgICogYmluZGluZ3MvanMv
SlNMYXp5RXZlbnRMaXN0ZW5lci5oOiBBZGRlZCB0d28gaGVscGVyIGZ1bmN0aW9ucyBmb3IKKyAg
ICAgICAgY3JlYXRpbmcgImlubGluZSIgZXZlbnQgbGlzdGVuZXJzLiBUaGVzZSByZXBsYWNlIERv
Y3VtZW50OjpjcmVhdGVFdmVudExpc3RlbmVyLAorICAgICAgICBhbmQgYWJzdHJhY3QgdGhlIGNy
ZWF0aW9uIG9mIEpTIGV2ZW50IGxpc3RlbmVycyBmb3IgRE9NIGF0dHJpYnV0ZXMgb3V0CisgICAg
ICAgIG9mIHRoZSBET00uIFJlbW92ZWQgbGVnYWN5IEpTUHJvdGVjdGVkRXZlbnRMaXN0ZW5lciBj
b25zdHJ1Y3RvciBjb2RlIGZvcgorICAgICAgICBhZGRpbmcgdGhlIGV2ZW50IGxpc3RlbmVyJ3Mg
ZnVuY3Rpb24gdG8gYSBtYXAsIHNpbmNlIGxhenkgZXZlbnQgbGlzdGVuZXJzCisgICAgICAgIGRv
bid0IGhhdmUgZnVuY3Rpb25zIGF0IGNvbnN0cnVjdGlvbiB0aW1lLgorCisgICAgICAgICogZG9t
L0RvY3VtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkRvY3VtZW50OjpzZXRGb2N1c2VkTm9k
ZSk6CisgICAgICAgICogZG9tL0RvY3VtZW50Lmg6CisgICAgICAgIChXZWJDb3JlOjpEb2N1bWVu
dDo6aXNTVkdEb2N1bWVudCk6CisgICAgICAgICogZG9tL0VsZW1lbnQuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6RWxlbWVudDo6c2V0V2luZG93SW5saW5lRXZlbnRMaXN0ZW5lcik6CisgICAgICAg
ICogZG9tL0VsZW1lbnQuaDogVXBkYXRlZCBmb3IgcmVuYW1lcy4gTml4ZWQgRG9jdW1lbnQ6OmNy
ZWF0ZUV2ZW50TGlzdGVuZXIsCisgICAgICAgIG1lbnRpb25lZCBhYm92ZS4gTW92ZWQgc2V0V2lu
ZG93SW5saW5lRXZlbnRMaXN0ZW5lckZvclR5cGVBbmRBdHRyaWJ1dGUKKyAgICAgICAgdG8gRWxl
bWVudCwgZm9yIHNpbXBsaWNpdHkuCisKKyAgICAgICAgKiBkb20vSW5wdXRFbGVtZW50LmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OklucHV0RWxlbWVudDo6c2V0VmFsdWVGcm9tUmVuZGVyZXIpOgor
ICAgICAgICAqIGRvbS9Ob2RlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Ok5vZGU6OmRpc3BhdGNo
Rm9jdXNFdmVudCk6CisgICAgICAgIChXZWJDb3JlOjpOb2RlOjpkaXNwYXRjaEJsdXJFdmVudCk6
CisgICAgICAgIChXZWJDb3JlOjpOb2RlOjpkaXNwYXRjaEV2ZW50KToKKyAgICAgICAgKFdlYkNv
cmU6Ok5vZGU6OmNsZWFySW5saW5lRXZlbnRMaXN0ZW5lcik6CisgICAgICAgIChXZWJDb3JlOjpO
b2RlOjpzZXRJbmxpbmVFdmVudExpc3RlbmVyKToKKyAgICAgICAgKFdlYkNvcmU6Ok5vZGU6Omdl
dElubGluZUV2ZW50TGlzdGVuZXIpOgorICAgICAgICAoV2ViQ29yZTo6Tm9kZTo6b25hYm9ydCk6
CisgICAgICAgIChXZWJDb3JlOjpOb2RlOjpzZXRPbmFib3J0KToKKyAgICAgICAgKFdlYkNvcmU6
Ok5vZGU6OmV0Yy4pOgorICAgICAgICAqIGRvbS9Ob2RlLmg6IFVwZGF0ZWQgZm9yIHJlbmFtZXMu
CisgICAgICAgIAorICAgICAgICAqIGVkaXRpbmcvUmVwbGFjZVNlbGVjdGlvbkNvbW1hbmQuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6UmVwbGFjZW1lbnRGcmFnbWVudDo6UmVwbGFjZW1lbnRGcmFn
bWVudCk6IFVwZGF0ZWQgZm9yIHJlbmFtZXMuCisgICAgICAgIAorICAgICAgICBVcGRhdGVkIHRo
ZXNlIGZpbGVzIGZvciByZW5hbWVzLCBhbmQgdG8gdXNlIHRoZSBuZXcgY3JlYXRlSW5saW5lRXZl
bnRMaXN0ZW5lcgorICAgICAgICBoZWxwZXIgZnVuY3Rpb246CisKKyAgICAgICAgKiBodG1sL0hU
TUxCb2R5RWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpIVE1MQm9keUVsZW1lbnQ6OnBh
cnNlTWFwcGVkQXR0cmlidXRlKToKKyAgICAgICAgKiBodG1sL0hUTUxCdXR0b25FbGVtZW50LmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxCdXR0b25FbGVtZW50OjpwYXJzZU1hcHBlZEF0dHJp
YnV0ZSk6CisgICAgICAgICogaHRtbC9IVE1MRWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpIVE1MRWxlbWVudDo6cGFyc2VNYXBwZWRBdHRyaWJ1dGUpOgorICAgICAgICAqIGh0bWwvSFRN
TEZvcm1Db250cm9sRWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpIVE1MRm9ybUNvbnRy
b2xFbGVtZW50OjpvbkNoYW5nZSk6CisgICAgICAgICogaHRtbC9IVE1MRm9ybUVsZW1lbnQuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6SFRNTEZvcm1FbGVtZW50OjpwcmVwYXJlU3VibWl0KToKKyAg
ICAgICAgKFdlYkNvcmU6OkhUTUxGb3JtRWxlbWVudDo6cmVzZXQpOgorICAgICAgICAoV2ViQ29y
ZTo6SFRNTEZvcm1FbGVtZW50OjpwYXJzZU1hcHBlZEF0dHJpYnV0ZSk6CisgICAgICAgICogaHRt
bC9IVE1MRnJhbWVFbGVtZW50QmFzZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpIVE1MRnJhbWVF
bGVtZW50QmFzZTo6cGFyc2VNYXBwZWRBdHRyaWJ1dGUpOgorICAgICAgICAqIGh0bWwvSFRNTEZy
YW1lU2V0RWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpIVE1MRnJhbWVTZXRFbGVtZW50
OjpwYXJzZU1hcHBlZEF0dHJpYnV0ZSk6CisgICAgICAgICogaHRtbC9IVE1MSW1hZ2VFbGVtZW50
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxJbWFnZUVsZW1lbnQ6OnBhcnNlTWFwcGVkQXR0
cmlidXRlKToKKyAgICAgICAgKiBodG1sL0hUTUxJbWFnZUxvYWRlci5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpIVE1MSW1hZ2VMb2FkZXI6OmRpc3BhdGNoTG9hZEV2ZW50KToKKyAgICAgICAgKiBo
dG1sL0hUTUxJbnB1dEVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SFRNTElucHV0RWxl
bWVudDo6cGFyc2VNYXBwZWRBdHRyaWJ1dGUpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTElucHV0
RWxlbWVudDo6b25TZWFyY2gpOgorICAgICAgICAqIGh0bWwvSFRNTE1lZGlhRWxlbWVudC5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpIVE1MTWVkaWFFbGVtZW50Ojpsb2FkSW50ZXJuYWwpOgorICAg
ICAgICAqIGh0bWwvSFRNTE9iamVjdEVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SFRN
TE9iamVjdEVsZW1lbnQ6OnBhcnNlTWFwcGVkQXR0cmlidXRlKToKKyAgICAgICAgKiBodG1sL0hU
TUxTY3JpcHRFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxTY3JpcHRFbGVtZW50
OjpwYXJzZU1hcHBlZEF0dHJpYnV0ZSk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MU2NyaXB0RWxl
bWVudDo6ZGlzcGF0Y2hMb2FkRXZlbnQpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTFNjcmlwdEVs
ZW1lbnQ6OmRpc3BhdGNoRXJyb3JFdmVudCk6CisgICAgICAgICogaHRtbC9IVE1MU2VsZWN0RWxl
bWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpIVE1MU2VsZWN0RWxlbWVudDo6cGFyc2VNYXBw
ZWRBdHRyaWJ1dGUpOgorICAgICAgICAqIGh0bWwvSFRNTFRleHRBcmVhRWxlbWVudC5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpIVE1MVGV4dEFyZWFFbGVtZW50OjpwYXJzZU1hcHBlZEF0dHJpYnV0
ZSk6CisgICAgICAgICogaHRtbC9IVE1MVG9rZW5pemVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OkhUTUxUb2tlbml6ZXI6Om5vdGlmeUZpbmlzaGVkKToKKyAgICAgICAgKiBwYWdlL0FjY2Vzc2li
aWxpdHlSZW5kZXJPYmplY3QuY3BwOgorICAgICAgICAoV2ViQ29yZTo6QWNjZXNzaWJpbGl0eVJl
bmRlck9iamVjdDo6bW91c2VCdXR0b25MaXN0ZW5lcik6CisgICAgICAgICogcGFnZS9ET01XaW5k
b3cuY3BwOgorICAgICAgICAqIHBhZ2UvRE9NV2luZG93Lmg6CisgICAgICAgIChXZWJDb3JlOjpE
T01XaW5kb3c6OmV2ZW50TGlzdGVuZXJzKToKKyAgICAgICAgKiBwYWdlL0V2ZW50SGFuZGxlci5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpFdmVudEhhbmRsZXI6OmNhbk1vdXNlRG93blN0YXJ0U2Vs
ZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OkV2ZW50SGFuZGxlcjo6Y2FuTW91c2VEcmFnRXh0ZW5k
U2VsZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OkV2ZW50SGFuZGxlcjo6c2VuZFNjcm9sbEV2ZW50
KToKKyAgICAgICAgKiBwYWdlL1BhZ2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6bmV0d29ya1N0
YXRlQ2hhbmdlZCk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckxpc3RCb3guY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6UmVuZGVyTGlzdEJveDo6dmFsdWVDaGFuZ2VkKToKKyAgICAgICAgKiBy
ZW5kZXJpbmcvUmVuZGVyVGV4dENvbnRyb2wuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVy
VGV4dENvbnRyb2w6OnNlbGVjdGlvbkNoYW5nZWQpOgorICAgICAgICAqIHN2Zy9TVkdFbGVtZW50
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR0VsZW1lbnQ6OnBhcnNlTWFwcGVkQXR0cmlidXRl
KToKKyAgICAgICAgKiBzdmcvU1ZHRWxlbWVudEluc3RhbmNlLmNwcDoKKyAgICAgICAgKiBzdmcv
U1ZHSW1hZ2VMb2FkZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U1ZHSW1hZ2VMb2FkZXI6OmRp
c3BhdGNoTG9hZEV2ZW50KToKKyAgICAgICAgKiBzdmcvU1ZHU1ZHRWxlbWVudC5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpTVkdTVkdFbGVtZW50OjpwYXJzZU1hcHBlZEF0dHJpYnV0ZSk6CisgICAg
ICAgICogc3ZnL1NWR1NjcmlwdEVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U1ZHU2Ny
aXB0RWxlbWVudDo6ZGlzcGF0Y2hFcnJvckV2ZW50KToKKyAgICAgICAgKiB3bWwvV01MSW5wdXRF
bGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OldNTElucHV0RWxlbWVudDo6ZGVmYXVsdEV2
ZW50SGFuZGxlcik6CisKIDIwMDktMDQtMTcgIEJyYWR5IEVpZHNvbiAgPGJlaWRzb25AYXBwbGUu
Y29tPgogCiAgICAgICAgIFJldmlld2VkIGJ5IE1hcmsgUm93ZQpJbmRleDogYmluZGluZ3MvanMv
SlNMYXp5RXZlbnRMaXN0ZW5lci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gYmluZGluZ3MvanMvSlNMYXp5
RXZlbnRMaXN0ZW5lci5jcHAJKHJldmlzaW9uIDQyNjAyKQorKysgYmluZGluZ3MvanMvSlNMYXp5
RXZlbnRMaXN0ZW5lci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIzLDYgKzIzLDcgQEAKICNpbmNs
dWRlICJGcmFtZS5oIgogI2luY2x1ZGUgIkpTTm9kZS5oIgogI2luY2x1ZGUgPHJ1bnRpbWUvRnVu
Y3Rpb25Db25zdHJ1Y3Rvci5oPgorI2luY2x1ZGUgPHJ1bnRpbWUvSlNMb2NrLmg+CiAjaW5jbHVk
ZSA8d3RmL1JlZkNvdW50ZWRMZWFrQ291bnRlci5oPgogCiB1c2luZyBuYW1lc3BhY2UgSlNDOwpA
QCAtMzMsNiArMzQsMTUgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogc3RhdGljIFdURjo6UmVmQ291
bnRlZExlYWtDb3VudGVyIGV2ZW50TGlzdGVuZXJDb3VudGVyKCJKU0xhenlFdmVudExpc3RlbmVy
Iik7CiAjZW5kaWYKIAorc3RhdGljIGNvbnN0IFN0cmluZyYgZXZlbnRQYXJhbWV0ZXJOYW1lKGJv
b2wgaXNTVkdFdmVudCkKK3sKKyAgICBERUZJTkVfU1RBVElDX0xPQ0FMKGNvbnN0IFN0cmluZywg
ZXZlbnRTdHJpbmcsICgiZXZlbnQiKSk7CisjaWYgRU5BQkxFKFNWRykKKyAgICBERUZJTkVfU1RB
VElDX0xPQ0FMKGNvbnN0IFN0cmluZywgZXZ0U3RyaW5nLCAoImV2dCIpKTsKKyNlbmRpZgorICAg
IHJldHVybiBpc1NWR0V2ZW50ID8gZXZ0U3RyaW5nIDogZXZlbnRTdHJpbmc7Cit9CisKIEpTTGF6
eUV2ZW50TGlzdGVuZXI6OkpTTGF6eUV2ZW50TGlzdGVuZXIoY29uc3QgU3RyaW5nJiBmdW5jdGlv
bk5hbWUsIGNvbnN0IFN0cmluZyYgZXZlbnRQYXJhbWV0ZXJOYW1lLCBjb25zdCBTdHJpbmcmIGNv
ZGUsIEpTRE9NR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIE5vZGUqIG5vZGUsIGludCBsaW5l
TnVtYmVyKQogICAgIDogSlNBYnN0cmFjdEV2ZW50TGlzdGVuZXIodHJ1ZSkKICAgICAsIG1fZ2xv
YmFsT2JqZWN0KGdsb2JhbE9iamVjdCkKQEAgLTU0LDExICs2NCw2IEBAIEpTTGF6eUV2ZW50TGlz
dGVuZXI6OkpTTGF6eUV2ZW50TGlzdGVuZXIKICAgICBpZiAobV9saW5lTnVtYmVyID09IDApCiAg
ICAgICAgIG1fbGluZU51bWJlciA9IDE7CiAKLSAgICBpZiAobV9qc0Z1bmN0aW9uKSB7Ci0gICAg
ICAgIEpTRE9NV2luZG93OjpQcm90ZWN0ZWRMaXN0ZW5lcnNNYXAmIGxpc3RlbmVycyA9IGlzSW5s
aW5lKCkKLSAgICAgICAgICAgID8gbV9nbG9iYWxPYmplY3QtPmpzUHJvdGVjdGVkSW5saW5lRXZl
bnRMaXN0ZW5lcnMoKSA6IG1fZ2xvYmFsT2JqZWN0LT5qc1Byb3RlY3RlZEV2ZW50TGlzdGVuZXJz
KCk7Ci0gICAgICAgIGxpc3RlbmVycy5zZXQobV9qc0Z1bmN0aW9uLCB0aGlzKTsKLSAgICB9CiAj
aWZuZGVmIE5ERUJVRwogICAgIGV2ZW50TGlzdGVuZXJDb3VudGVyLmluY3JlbWVudCgpOwogI2Vu
ZGlmCkBAIC0xNDcsNCArMTUyLDM3IEBAIEpTRE9NR2xvYmFsT2JqZWN0KiBKU0xhenlFdmVudExp
c3RlbmVyOjoKICAgICByZXR1cm4gbV9nbG9iYWxPYmplY3Q7CiB9CiAKK1Bhc3NSZWZQdHI8SlNM
YXp5RXZlbnRMaXN0ZW5lcj4gY3JlYXRlSW5saW5lRXZlbnRMaXN0ZW5lcihOb2RlKiBub2RlLCBB
dHRyaWJ1dGUqIGF0dHIpCit7CisgICAgQVNTRVJUKG5vZGUpOworCisgICAgRG9jdW1lbnQqIGRv
Y3VtZW50ID0gbm9kZS0+ZG9jdW1lbnQoKTsKKworICAgIEZyYW1lKiBmcmFtZSA9IGRvY3VtZW50
LT5mcmFtZSgpOworICAgIGlmICghZnJhbWUpCisgICAgICAgIHJldHVybiAwOworCisgICAgU2Ny
aXB0Q29udHJvbGxlciogc2NyaXB0Q29udHJvbGxlciA9IGZyYW1lLT5zY3JpcHQoKTsKKyAgICBp
ZiAoIXNjcmlwdENvbnRyb2xsZXItPmlzRW5hYmxlZCgpKQorICAgICAgICByZXR1cm4gMDsKKwor
ICAgIEpTRE9NV2luZG93KiBnbG9iYWxPYmplY3QgPSBzY3JpcHRDb250cm9sbGVyLT5nbG9iYWxP
YmplY3QoKTsKKworICAgIHJldHVybiBKU0xhenlFdmVudExpc3RlbmVyOjpjcmVhdGUoYXR0ci0+
bG9jYWxOYW1lKCkuc3RyaW5nKCksIGV2ZW50UGFyYW1ldGVyTmFtZShub2RlLT5pc1NWR0VsZW1l
bnQoKSksIGF0dHItPnZhbHVlKCksIGdsb2JhbE9iamVjdCwgbm9kZSwgc2NyaXB0Q29udHJvbGxl
ci0+ZXZlbnRIYW5kbGVyTGluZU51bWJlcigpKTsKK30KKworUGFzc1JlZlB0cjxKU0xhenlFdmVu
dExpc3RlbmVyPiBjcmVhdGVJbmxpbmVFdmVudExpc3RlbmVyKEZyYW1lKiBmcmFtZSwgQXR0cmli
dXRlKiBhdHRyKQoreworICAgIGlmICghZnJhbWUpCisgICAgICAgIHJldHVybiAwOworCisgICAg
U2NyaXB0Q29udHJvbGxlciogc2NyaXB0Q29udHJvbGxlciA9IGZyYW1lLT5zY3JpcHQoKTsKKyAg
ICBpZiAoIXNjcmlwdENvbnRyb2xsZXItPmlzRW5hYmxlZCgpKQorICAgICAgICByZXR1cm4gMDsK
KworICAgIEpTRE9NV2luZG93KiBnbG9iYWxPYmplY3QgPSBzY3JpcHRDb250cm9sbGVyLT5nbG9i
YWxPYmplY3QoKTsKKworICAgIHJldHVybiBKU0xhenlFdmVudExpc3RlbmVyOjpjcmVhdGUoYXR0
ci0+bG9jYWxOYW1lKCkuc3RyaW5nKCksIGV2ZW50UGFyYW1ldGVyTmFtZShmcmFtZS0+ZG9jdW1l
bnQoKS0+aXNTVkdEb2N1bWVudCgpKSwgYXR0ci0+dmFsdWUoKSwgZ2xvYmFsT2JqZWN0LCAwLCBz
Y3JpcHRDb250cm9sbGVyLT5ldmVudEhhbmRsZXJMaW5lTnVtYmVyKCkpOworfQorCiB9IC8vIG5h
bWVzcGFjZSBXZWJDb3JlCkluZGV4OiBiaW5kaW5ncy9qcy9KU0xhenlFdmVudExpc3RlbmVyLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gYmluZGluZ3MvanMvSlNMYXp5RXZlbnRMaXN0ZW5lci5oCShyZXZpc2lv
biA0MjYwMikKKysrIGJpbmRpbmdzL2pzL0pTTGF6eUV2ZW50TGlzdGVuZXIuaAkod29ya2luZyBj
b3B5KQpAQCAtMjUsNiArMjUsNyBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKKyAgICBjbGFz
cyBBdHRyaWJ1dGU7CiAgICAgY2xhc3MgTm9kZTsKIAogICAgIGNsYXNzIEpTTGF6eUV2ZW50TGlz
dGVuZXIgOiBwdWJsaWMgSlNBYnN0cmFjdEV2ZW50TGlzdGVuZXIgewpAQCAtNTcsNiArNTgsOSBA
QCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIE5vZGUqIG1fb3JpZ2luYWxOb2RlOwogICAg
IH07CiAKKyAgICBQYXNzUmVmUHRyPEpTTGF6eUV2ZW50TGlzdGVuZXI+IGNyZWF0ZUlubGluZUV2
ZW50TGlzdGVuZXIoTm9kZSosIEF0dHJpYnV0ZSopOworICAgIFBhc3NSZWZQdHI8SlNMYXp5RXZl
bnRMaXN0ZW5lcj4gY3JlYXRlSW5saW5lRXZlbnRMaXN0ZW5lcihGcmFtZSosIEF0dHJpYnV0ZSop
OworCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKICNlbmRpZiAvLyBKU0V2ZW50TGlzdGVuZXJf
aApJbmRleDogZG9tL0RvY3VtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBkb20vRG9jdW1lbnQuY3Bw
CShyZXZpc2lvbiA0MjYwMikKKysrIGRvbS9Eb2N1bWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTI0ODgsNyArMjQ4OCw3IEBAIGJvb2wgRG9jdW1lbnQ6OnNldEZvY3VzZWROb2RlKFBhc3NSZWZQ
dHIKICAgICAgICAgLy8gRGlzcGF0Y2ggYSBjaGFuZ2UgZXZlbnQgZm9yIHRleHQgZmllbGRzIG9y
IHRleHRhcmVhcyB0aGF0IGhhdmUgYmVlbiBlZGl0ZWQKICAgICAgICAgUmVuZGVyT2JqZWN0KiBy
ID0gc3RhdGljX2Nhc3Q8UmVuZGVyT2JqZWN0Kj4ob2xkRm9jdXNlZE5vZGUuZ2V0KCktPnJlbmRl
cmVyKCkpOwogICAgICAgICBpZiAociAmJiByLT5pc1RleHRDb250cm9sKCkgJiYgdG9SZW5kZXJU
ZXh0Q29udHJvbChyKS0+aXNFZGl0ZWQoKSkgewotICAgICAgICAgICAgb2xkRm9jdXNlZE5vZGUt
PmRpc3BhdGNoRXZlbnRGb3JUeXBlKGV2ZW50TmFtZXMoKS5jaGFuZ2VFdmVudCwgdHJ1ZSwgZmFs
c2UpOworICAgICAgICAgICAgb2xkRm9jdXNlZE5vZGUtPmRpc3BhdGNoRXZlbnQoZXZlbnROYW1l
cygpLmNoYW5nZUV2ZW50LCB0cnVlLCBmYWxzZSk7CiAgICAgICAgICAgICBpZiAoKHIgPSBzdGF0
aWNfY2FzdDxSZW5kZXJPYmplY3QqPihvbGRGb2N1c2VkTm9kZS5nZXQoKS0+cmVuZGVyZXIoKSkp
KSB7CiAgICAgICAgICAgICAgICAgaWYgKHItPmlzVGV4dENvbnRyb2woKSkKICAgICAgICAgICAg
ICAgICAgICAgdG9SZW5kZXJUZXh0Q29udHJvbChyKS0+c2V0RWRpdGVkKGZhbHNlKTsKQEAgLTI3
NTgsMzEgKzI3NTgsNiBAQCBDU1NTdHlsZURlY2xhcmF0aW9uKiBEb2N1bWVudDo6Z2V0T3ZlcnJp
CiAgICAgcmV0dXJuIDA7CiB9CiAKLVBhc3NSZWZQdHI8RXZlbnRMaXN0ZW5lcj4gRG9jdW1lbnQ6
OmNyZWF0ZUV2ZW50TGlzdGVuZXIoY29uc3QgU3RyaW5nJiBmdW5jdGlvbk5hbWUsIGNvbnN0IFN0
cmluZyYgY29kZSwgTm9kZSogbm9kZSkKLXsKLSAgICBGcmFtZSogZnJtID0gZnJhbWUoKTsKLSAg
ICBpZiAoIWZybSB8fCAhZnJtLT5zY3JpcHQoKS0+aXNFbmFibGVkKCkpCi0gICAgICAgIHJldHVy
biAwOwotCi0gICAgREVGSU5FX1NUQVRJQ19MT0NBTChjb25zdCBTdHJpbmcsIGV2ZW50U3RyaW5n
LCAoImV2ZW50IikpOwotCi0jaWYgRU5BQkxFKFNWRykKLSAgICBERUZJTkVfU1RBVElDX0xPQ0FM
KGNvbnN0IFN0cmluZywgZXZ0U3RyaW5nLCAoImV2dCIpKTsKLSAgICBpZiAobm9kZSA/IG5vZGUt
PmlzU1ZHRWxlbWVudCgpIDogaXNTVkdEb2N1bWVudCgpKQotICAgICAgICByZXR1cm4gSlNMYXp5
RXZlbnRMaXN0ZW5lcjo6Y3JlYXRlKGZ1bmN0aW9uTmFtZSwgZXZ0U3RyaW5nLCBjb2RlLCBmcm0t
PnNjcmlwdCgpLT5nbG9iYWxPYmplY3QoKSwgbm9kZSwgZnJtLT5zY3JpcHQoKS0+ZXZlbnRIYW5k
bGVyTGluZU51bWJlcigpKTsKLSNlbmRpZgotCi0gICAgcmV0dXJuIEpTTGF6eUV2ZW50TGlzdGVu
ZXI6OmNyZWF0ZShmdW5jdGlvbk5hbWUsIGV2ZW50U3RyaW5nLCBjb2RlLCBmcm0tPnNjcmlwdCgp
LT5nbG9iYWxPYmplY3QoKSwgbm9kZSwgZnJtLT5zY3JpcHQoKS0+ZXZlbnRIYW5kbGVyTGluZU51
bWJlcigpKTsKLX0KLQotdm9pZCBEb2N1bWVudDo6c2V0V2luZG93SW5saW5lRXZlbnRMaXN0ZW5l
ckZvclR5cGVBbmRBdHRyaWJ1dGUoY29uc3QgQXRvbWljU3RyaW5nJiBldmVudFR5cGUsIEF0dHJp
YnV0ZSogYXR0cikKLXsKLSAgICBET01XaW5kb3cqIGRvbVdpbmRvdyA9IHRoaXMtPmRvbVdpbmRv
dygpOwotICAgIGlmICghZG9tV2luZG93KQotICAgICAgICByZXR1cm47Ci0gICAgZG9tV2luZG93
LT5zZXRJbmxpbmVFdmVudExpc3RlbmVyRm9yVHlwZShldmVudFR5cGUsIGNyZWF0ZUV2ZW50TGlz
dGVuZXIoYXR0ci0+bG9jYWxOYW1lKCkuc3RyaW5nKCksIGF0dHItPnZhbHVlKCksIDApKTsKLX0K
LQogRWxlbWVudCogRG9jdW1lbnQ6Om93bmVyRWxlbWVudCgpIGNvbnN0CiB7CiAgICAgaWYgKCFm
cmFtZSgpKQpJbmRleDogZG9tL0RvY3VtZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gZG9tL0RvY3VtZW50
LmgJKHJldmlzaW9uIDQyNjAyKQorKysgZG9tL0RvY3VtZW50LmgJKHdvcmtpbmcgY29weSkKQEAg
LTMwNCw2ICszMDQsOCBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCBib29sIGlzSW1hZ2VEb2N1bWVu
dCgpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CiAjaWYgRU5BQkxFKFNWRykKICAgICB2aXJ0dWFs
IGJvb2wgaXNTVkdEb2N1bWVudCgpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CisjZWxzZQorICAg
IHN0YXRpYyBib29sIGlzU1ZHRG9jdW1lbnQoKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQogI2Vu
ZGlmCiAgICAgdmlydHVhbCBib29sIGlzUGx1Z2luRG9jdW1lbnQoKSBjb25zdCB7IHJldHVybiBm
YWxzZTsgfQogICAgIHZpcnR1YWwgYm9vbCBpc01lZGlhRG9jdW1lbnQoKSBjb25zdCB7IHJldHVy
biBmYWxzZTsgfQpAQCAtNTc1LDEwICs1NzcsNiBAQCBwdWJsaWM6CiAgICAgdm9pZCBhZGRMaXN0
ZW5lclR5cGUoTGlzdGVuZXJUeXBlIGxpc3RlbmVyVHlwZSkgeyBtX2xpc3RlbmVyVHlwZXMgPSBt
X2xpc3RlbmVyVHlwZXMgfCBsaXN0ZW5lclR5cGU7IH0KICAgICB2b2lkIGFkZExpc3RlbmVyVHlw
ZUlmTmVlZGVkKGNvbnN0IEF0b21pY1N0cmluZyYgZXZlbnRUeXBlKTsKIAotICAgIHZvaWQgc2V0
V2luZG93SW5saW5lRXZlbnRMaXN0ZW5lckZvclR5cGVBbmRBdHRyaWJ1dGUoY29uc3QgQXRvbWlj
U3RyaW5nJiBldmVudFR5cGUsIEF0dHJpYnV0ZSopOwotCi0gICAgUGFzc1JlZlB0cjxFdmVudExp
c3RlbmVyPiBjcmVhdGVFdmVudExpc3RlbmVyKGNvbnN0IFN0cmluZyYgZnVuY3Rpb25OYW1lLCBj
b25zdCBTdHJpbmcmIGNvZGUsIE5vZGUqKTsKLQogICAgIENTU1N0eWxlRGVjbGFyYXRpb24qIGdl
dE92ZXJyaWRlU3R5bGUoRWxlbWVudCosIGNvbnN0IFN0cmluZyYgcHNldWRvRWx0KTsKIAogICAg
IC8qKgpJbmRleDogZG9tL0VsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIGRvbS9FbGVtZW50LmNw
cAkocmV2aXNpb24gNDI2MDIpCisrKyBkb20vRWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTEzMDYsNCArMTMwNiwxMiBAQCB1bnNpZ25lZCBFbGVtZW50OjpjaGlsZEVsZW1lbnRDb3VudCgp
IGNvCiAgICAgcmV0dXJuIGNvdW50OwogfQogCit2b2lkIEVsZW1lbnQ6OnNldFdpbmRvd0lubGlu
ZUV2ZW50TGlzdGVuZXIoY29uc3QgQXRvbWljU3RyaW5nJiBldmVudFR5cGUsIFBhc3NSZWZQdHI8
RXZlbnRMaXN0ZW5lcj4gbGlzdGVuZXIpCit7CisgICAgRE9NV2luZG93KiBkb21XaW5kb3cgPSBk
b2N1bWVudCgpLT5kb21XaW5kb3coKTsKKyAgICBpZiAoIWRvbVdpbmRvdykKKyAgICAgICAgcmV0
dXJuOworICAgIGRvbVdpbmRvdy0+c2V0SW5saW5lRXZlbnRMaXN0ZW5lcihldmVudFR5cGUsIGxp
c3RlbmVyKTsKIH0KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogZG9tL0VsZW1lbnQu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBkb20vRWxlbWVudC5oCShyZXZpc2lvbiA0MjYwMikKKysrIGRvbS9F
bGVtZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTIyOSw2ICsyMjksNyBAQCBwcml2YXRlOgogcHJv
dGVjdGVkOgogICAgIEVsZW1lbnRSYXJlRGF0YSogcmFyZURhdGEoKSBjb25zdDsKICAgICBFbGVt
ZW50UmFyZURhdGEqIGVuc3VyZVJhcmVEYXRhKCk7CisgICAgdm9pZCBzZXRXaW5kb3dJbmxpbmVF
dmVudExpc3RlbmVyKGNvbnN0IEF0b21pY1N0cmluZyYgZXZlbnRUeXBlLCBQYXNzUmVmUHRyPEV2
ZW50TGlzdGVuZXI+KTsKICAgICAKICAgICBtdXRhYmxlIFJlZlB0cjxOYW1lZE5vZGVNYXA+IG5h
bWVkQXR0ck1hcDsKIH07CkluZGV4OiBkb20vSW5wdXRFbGVtZW50LmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBkb20vSW5wdXRFbGVtZW50LmNwcAkocmV2aXNpb24gNDI2MDIpCisrKyBkb20vSW5wdXRFbGVt
ZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTQ4LDcgKzE0OCw3IEBAIHZvaWQgSW5wdXRFbGVt
ZW50OjpzZXRWYWx1ZUZyb21SZW5kZXJlcigKICAgICBmb3JtQ29udHJvbEVsZW1lbnQtPnNldFZh
bHVlTWF0Y2hlc1JlbmRlcmVyKCk7CiAKICAgICAvLyBGaXJlIHRoZSAiaW5wdXQiIERPTSBldmVu
dAotICAgIGVsZW1lbnQtPmRpc3BhdGNoRXZlbnRGb3JUeXBlKGV2ZW50TmFtZXMoKS5pbnB1dEV2
ZW50LCB0cnVlLCBmYWxzZSk7CisgICAgZWxlbWVudC0+ZGlzcGF0Y2hFdmVudChldmVudE5hbWVz
KCkuaW5wdXRFdmVudCwgdHJ1ZSwgZmFsc2UpOwogICAgIG5vdGlmeUZvcm1TdGF0ZUNoYW5nZWQo
ZGF0YSwgZG9jdW1lbnQpOwogfQogCkluZGV4OiBkb20vTm9kZS5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
ZG9tL05vZGUuY3BwCShyZXZpc2lvbiA0MjYwMikKKysrIGRvbS9Ob2RlLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMjc2NCwxNSArMjc2NCwxNSBAQCB2b2lkIE5vZGU6OmRpc3BhdGNoTXV0YXRpb25F
dmVudChjb25zdCBBCiAKIHZvaWQgTm9kZTo6ZGlzcGF0Y2hGb2N1c0V2ZW50KCkKIHsKLSAgICBk
aXNwYXRjaEV2ZW50Rm9yVHlwZShldmVudE5hbWVzKCkuZm9jdXNFdmVudCwgZmFsc2UsIGZhbHNl
KTsKKyAgICBkaXNwYXRjaEV2ZW50KGV2ZW50TmFtZXMoKS5mb2N1c0V2ZW50LCBmYWxzZSwgZmFs
c2UpOwogfQogCiB2b2lkIE5vZGU6OmRpc3BhdGNoQmx1ckV2ZW50KCkKIHsKLSAgICBkaXNwYXRj
aEV2ZW50Rm9yVHlwZShldmVudE5hbWVzKCkuYmx1ckV2ZW50LCBmYWxzZSwgZmFsc2UpOworICAg
IGRpc3BhdGNoRXZlbnQoZXZlbnROYW1lcygpLmJsdXJFdmVudCwgZmFsc2UsIGZhbHNlKTsKIH0K
IAotYm9vbCBOb2RlOjpkaXNwYXRjaEV2ZW50Rm9yVHlwZShjb25zdCBBdG9taWNTdHJpbmcmIGV2
ZW50VHlwZSwgYm9vbCBjYW5CdWJibGVBcmcsIGJvb2wgY2FuY2VsYWJsZUFyZykKK2Jvb2wgTm9k
ZTo6ZGlzcGF0Y2hFdmVudChjb25zdCBBdG9taWNTdHJpbmcmIGV2ZW50VHlwZSwgYm9vbCBjYW5C
dWJibGVBcmcsIGJvb2wgY2FuY2VsYWJsZUFyZykKIHsKICAgICBBU1NFUlQoIWV2ZW50RGlzcGF0
Y2hGb3JiaWRkZW4oKSk7CiAgICAgRXhjZXB0aW9uQ29kZSBlYyA9IDA7CkBAIC0yNzk1LDcgKzI3
OTUsNyBAQCB2b2lkIE5vZGU6OmRpc3BhdGNoU3RvcmFnZUV2ZW50KGNvbnN0IEF0CiAjZW5kaWYK
IH0KIAotdm9pZCBOb2RlOjpyZW1vdmVJbmxpbmVFdmVudExpc3RlbmVyRm9yVHlwZShjb25zdCBB
dG9taWNTdHJpbmcmIGV2ZW50VHlwZSkKK3ZvaWQgTm9kZTo6Y2xlYXJJbmxpbmVFdmVudExpc3Rl
bmVyKGNvbnN0IEF0b21pY1N0cmluZyYgZXZlbnRUeXBlKQogewogICAgIGlmICghaGFzUmFyZURh
dGEoKSkKICAgICAgICAgcmV0dXJuOwpAQCAtMjgyMiwyMCArMjgyMiwxNCBAQCB2b2lkIE5vZGU6
OnJlbW92ZUlubGluZUV2ZW50TGlzdGVuZXJGb3JUCiAgICAgfQogfQogCi12b2lkIE5vZGU6OnNl
dElubGluZUV2ZW50TGlzdGVuZXJGb3JUeXBlKGNvbnN0IEF0b21pY1N0cmluZyYgZXZlbnRUeXBl
LCBQYXNzUmVmUHRyPEV2ZW50TGlzdGVuZXI+IGxpc3RlbmVyKQordm9pZCBOb2RlOjpzZXRJbmxp
bmVFdmVudExpc3RlbmVyKGNvbnN0IEF0b21pY1N0cmluZyYgZXZlbnRUeXBlLCBQYXNzUmVmUHRy
PEV2ZW50TGlzdGVuZXI+IGxpc3RlbmVyKQogewotICAgIC8vIEluIGNhc2Ugd2UgYXJlIHRoZSBv
bmx5IG9uZSBob2xkaW5nIGEgcmVmZXJlbmNlIHRvIGl0LCB3ZSBkb24ndCB3YW50IHJlbW92ZUlu
bGluZUV2ZW50TGlzdGVuZXJGb3JUeXBlIHRvIGRlc3Ryb3kgaXQuCi0gICAgcmVtb3ZlSW5saW5l
RXZlbnRMaXN0ZW5lckZvclR5cGUoZXZlbnRUeXBlKTsKKyAgICBjbGVhcklubGluZUV2ZW50TGlz
dGVuZXIoZXZlbnRUeXBlKTsKICAgICBpZiAobGlzdGVuZXIpCiAgICAgICAgIGFkZEV2ZW50TGlz
dGVuZXIoZXZlbnRUeXBlLCBsaXN0ZW5lciwgZmFsc2UpOwogfQogCi12b2lkIE5vZGU6OnNldElu
bGluZUV2ZW50TGlzdGVuZXJGb3JUeXBlQW5kQXR0cmlidXRlKGNvbnN0IEF0b21pY1N0cmluZyYg
ZXZlbnRUeXBlLCBBdHRyaWJ1dGUqIGF0dHIpCi17Ci0gICAgc2V0SW5saW5lRXZlbnRMaXN0ZW5l
ckZvclR5cGUoZXZlbnRUeXBlLCBkb2N1bWVudCgpLT5jcmVhdGVFdmVudExpc3RlbmVyKGF0dHIt
PmxvY2FsTmFtZSgpLnN0cmluZygpLCBhdHRyLT52YWx1ZSgpLCB0aGlzKSk7Ci19Ci0KLUV2ZW50
TGlzdGVuZXIqIE5vZGU6OmlubGluZUV2ZW50TGlzdGVuZXJGb3JUeXBlKGNvbnN0IEF0b21pY1N0
cmluZyYgZXZlbnRUeXBlKSBjb25zdAorRXZlbnRMaXN0ZW5lciogTm9kZTo6Z2V0SW5saW5lRXZl
bnRMaXN0ZW5lcihjb25zdCBBdG9taWNTdHJpbmcmIGV2ZW50VHlwZSkgY29uc3QKIHsKICAgICBj
b25zdCBSZWdpc3RlcmVkRXZlbnRMaXN0ZW5lclZlY3RvciYgbGlzdGVuZXJzID0gZXZlbnRMaXN0
ZW5lcnMoKTsKICAgICBzaXplX3Qgc2l6ZSA9IGxpc3RlbmVycy5zaXplKCk7CkBAIC0yODc3LDQw
MiArMjg3MSw0MDIgQEAgdm9pZCBOb2RlOjpkZWZhdWx0RXZlbnRIYW5kbGVyKEV2ZW50KiBldgog
CiBFdmVudExpc3RlbmVyKiBOb2RlOjpvbmFib3J0KCkgY29uc3QKIHsKLSAgICByZXR1cm4gaW5s
aW5lRXZlbnRMaXN0ZW5lckZvclR5cGUoZXZlbnROYW1lcygpLmFib3J0RXZlbnQpOworICAgIHJl
dHVybiBnZXRJbmxpbmVFdmVudExpc3RlbmVyKGV2ZW50TmFtZXMoKS5hYm9ydEV2ZW50KTsKIH0K
IAogdm9pZCBOb2RlOjpzZXRPbmFib3J0KFBhc3NSZWZQdHI8RXZlbnRMaXN0ZW5lcj4gZXZlbnRM
aXN0ZW5lcikKIHsKLSAgICBzZXRJbmxpbmVFdmVudExpc3RlbmVyRm9yVHlwZShldmVudE5hbWVz
KCkuYWJvcnRFdmVudCwgZXZlbnRMaXN0ZW5lcik7CisgICAgc2V0SW5saW5lRXZlbnRMaXN0ZW5l
cihldmVudE5hbWVzKCkuYWJvcnRFdmVudCwgZXZlbnRMaXN0ZW5lcik7CiB9CiAKIEV2ZW50TGlz
dGVuZXIqIE5vZGU6Om9uYmx1cigpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIGlubGluZUV2ZW50TGlz
dGVuZXJGb3JUeXBlKGV2ZW50TmFtZXMoKS5ibHVyRXZlbnQpOworICAgIHJldHVybiBnZXRJbmxp
bmVFdmVudExpc3RlbmVyKGV2ZW50TmFtZXMoKS5ibHVyRXZlbnQpOwogfQogCiB2b2lkIE5vZGU6
OnNldE9uYmx1cihQYXNzUmVmUHRyPEV2ZW50TGlzdGVuZXI+IGV2ZW50TGlzdGVuZXIpCiB7Ci0g
ICAgc2V0SW5saW5lRXZlbnRMaXN0ZW5lckZvclR5cGUoZXZlbnROYW1lcygpLmJsdXJFdmVudCwg
ZXZlbnRMaXN0ZW5lcik7CisgICAgc2V0SW5saW5lRXZlbnRMaXN0ZW5lcihldmVudE5hbWVzKCku
Ymx1ckV2ZW50LCBldmVudExpc3RlbmVyKTsKIH0KIAogRXZlbnRMaXN0ZW5lciogTm9kZTo6b25j
aGFuZ2UoKSBjb25zdAogewotICAgIHJldHVybiBpbmxpbmVFdmVudExpc3RlbmVyRm9yVHlwZShl
dmVudE5hbWVzKCkuY2hhbmdlRXZlbnQpOworICAgIHJldHVybiBnZXRJbmxpbmVFdmVudExpc3Rl
bmVyKGV2ZW50TmFtZXMoKS5jaGFuZ2VFdmVudCk7CiB9CiAKIHZvaWQgTm9kZTo6c2V0T25jaGFu
Z2UoUGFzc1JlZlB0cjxFdmVudExpc3RlbmVyPiBldmVudExpc3RlbmVyKQogewotICAgIHNldElu
bGluZUV2ZW50TGlzdGVuZXJGb3JUeXBlKGV2ZW50TmFtZXMoKS5jaGFuZ2VFdmVudCwgZXZlbnRM
aXN0ZW5lcik7CisgICAgc2V0SW5saW5lRXZlbnRMaXN0ZW5lcihldmVudE5hbWVzKCkuY2hhbmdl
RXZlbnQsIGV2ZW50TGlzdGVuZXIpOwogfQogCiBFdmVudExpc3RlbmVyKiBOb2RlOjpvbmNsaWNr
KCkgY29uc3QKIHsKLSAgICByZXR1cm4gaW5saW5lRXZlbnRMaXN0ZW5lckZvclR5cGUoZXZlbnRO
YW1lcygpLmNsaWNrRXZlbnQpOworICAgIHJldHVybiBnZXRJbmxpbmVFdmVudExpc3RlbmVyKGV2
ZW50TmFtZXMoKS5jbGlja0V2ZW50KTsKIH0KIAogdm9pZCBOb2RlOjpzZXRPbmNsaWNrKFBhc3NS
ZWZQdHI8RXZlbnRMaXN0ZW5lcj4gZXZlbnRMaXN0ZW5lcikKIHsKLSAgICBzZXRJbmxpbmVFdmVu
dExpc3RlbmVyRm9yVHlwZShldmVudE5hbWVzKCkuY2xpY2tFdmVudCwgZXZlbnRMaXN0ZW5lcik7
CisgICAgc2V0SW5saW5lRXZlbnRMaXN0ZW5lcihldmVudE5hbWVzKCkuY2xpY2tFdmVudCwgZXZl
bnRMaXN0ZW5lcik7CiB9CiAKIEV2ZW50TGlzdGVuZXIqIE5vZGU6Om9uY29udGV4dG1lbnUoKSBj
b25zdAogewotICAgIHJldHVybiBpbmxpbmVFdmVudExpc3RlbmVyRm9yVHlwZShldmVudE5hbWVz
KCkuY29udGV4dG1lbnVFdmVudCk7CisgICAgcmV0dXJuIGdldElubGluZUV2ZW50TGlzdGVuZXIo
ZXZlbnROYW1lcygpLmNvbnRleHRtZW51RXZlbnQpOwogfQogCiB2b2lkIE5vZGU6OnNldE9uY29u
dGV4dG1lbnUoUGFzc1JlZlB0cjxFdmVudExpc3RlbmVyPiBldmVudExpc3RlbmVyKQogewotICAg
IHNldElubGluZUV2ZW50TGlzdGVuZXJGb3JUeXBlKGV2ZW50TmFtZXMoKS5jb250ZXh0bWVudUV2
ZW50LCBldmVudExpc3RlbmVyKTsKKyAgICBzZXRJbmxpbmVFdmVudExpc3RlbmVyKGV2ZW50TmFt
ZXMoKS5jb250ZXh0bWVudUV2ZW50LCBldmVudExpc3RlbmVyKTsKIH0KIAogRXZlbnRMaXN0ZW5l
ciogTm9kZTo6b25kYmxjbGljaygpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIGlubGluZUV2ZW50TGlz
dGVuZXJGb3JUeXBlKGV2ZW50TmFtZXMoKS5kYmxjbGlja0V2ZW50KTsKKyAgICByZXR1cm4gZ2V0
SW5saW5lRXZlbnRMaXN0ZW5lcihldmVudE5hbWVzKCkuZGJsY2xpY2tFdmVudCk7CiB9CiAKIHZv
aWQgTm9kZTo6c2V0T25kYmxjbGljayhQYXNzUmVmUHRyPEV2ZW50TGlzdGVuZXI+IGV2ZW50TGlz
dGVuZXIpCiB7Ci0gICAgc2V0SW5saW5lRXZlbnRMaXN0ZW5lckZvclR5cGUoZXZlbnROYW1lcygp
LmRibGNsaWNrRXZlbnQsIGV2ZW50TGlzdGVuZXIpOworICAgIHNldElubGluZUV2ZW50TGlzdGVu
ZXIoZXZlbnROYW1lcygpLmRibGNsaWNrRXZlbnQsIGV2ZW50TGlzdGVuZXIpOwogfQogCiBFdmVu
dExpc3RlbmVyKiBOb2RlOjpvbmVycm9yKCkgY29uc3QKIHsKLSAgICByZXR1cm4gaW5saW5lRXZl
bnRMaXN0ZW5lckZvclR5cGUoZXZlbnROYW1lcygpLmVycm9yRXZlbnQpOworICAgIHJldHVybiBn
ZXRJbmxpbmVFdmVudExpc3RlbmVyKGV2ZW50TmFtZXMoKS5lcnJvckV2ZW50KTsKIH0KIAogdm9p
ZCBOb2RlOjpzZXRPbmVycm9yKFBhc3NSZWZQdHI8RXZlbnRMaXN0ZW5lcj4gZXZlbnRMaXN0ZW5l
cikKIHsKLSAgICBzZXRJbmxpbmVFdmVudExpc3RlbmVyRm9yVHlwZShldmVudE5hbWVzKCkuZXJy
b3JFdmVudCwgZXZlbnRMaXN0ZW5lcik7CisgICAgc2V0SW5saW5lRXZlbnRMaXN0ZW5lcihldmVu
dE5hbWVzKCkuZXJyb3JFdmVudCwgZXZlbnRMaXN0ZW5lcik7CiB9CiAKIEV2ZW50TGlzdGVuZXIq
IE5vZGU6Om9uZm9jdXMoKSBjb25zdAogewotICAgIHJldHVybiBpbmxpbmVFdmVudExpc3RlbmVy
Rm9yVHlwZShldmVudE5hbWVzKCkuZm9jdXNFdmVudCk7CisgICAgcmV0dXJuIGdldElubGluZUV2
ZW50TGlzdGVuZXIoZXZlbnROYW1lcygpLmZvY3VzRXZlbnQpOwogfQogCiB2b2lkIE5vZGU6OnNl
dE9uZm9jdXMoUGFzc1JlZlB0cjxFdmVudExpc3RlbmVyPiBldmVudExpc3RlbmVyKQogewotICAg
IHNldElubGluZUV2ZW50TGlzdGVuZXJGb3JUeXBlKGV2ZW50TmFtZXMoKS5mb2N1c0V2ZW50LCBl
dmVudExpc3RlbmVyKTsKKyAgICBzZXRJbmxpbmVFdmVudExpc3RlbmVyKGV2ZW50TmFtZXMoKS5m
b2N1c0V2ZW50LCBldmVudExpc3RlbmVyKTsKIH0KIAogRXZlbnRMaXN0ZW5lciogTm9kZTo6b25p
bnB1dCgpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIGlubGluZUV2ZW50TGlzdGVuZXJGb3JUeXBlKGV2
ZW50TmFtZXMoKS5pbnB1dEV2ZW50KTsKKyAgICByZXR1cm4gZ2V0SW5saW5lRXZlbnRMaXN0ZW5l
cihldmVudE5hbWVzKCkuaW5wdXRFdmVudCk7CiB9CiAKIHZvaWQgTm9kZTo6c2V0T25pbnB1dChQ
YXNzUmVmUHRyPEV2ZW50TGlzdGVuZXI+IGV2ZW50TGlzdGVuZXIpCiB7Ci0gICAgc2V0SW5saW5l
RXZlbnRMaXN0ZW5lckZvclR5cGUoZXZlbnROYW1lcygpLmlucHV0RXZlbnQsIGV2ZW50TGlzdGVu
ZXIpOworICAgIHNldElubGluZUV2ZW50TGlzdGVuZXIoZXZlbnROYW1lcygpLmlucHV0RXZlbnQs
IGV2ZW50TGlzdGVuZXIpOwogfQogCiBFdmVudExpc3RlbmVyKiBOb2RlOjpvbmtleWRvd24oKSBj
b25zdAogewotICAgIHJldHVybiBpbmxpbmVFdmVudExpc3RlbmVyRm9yVHlwZShldmVudE5hbWVz
KCkua2V5ZG93bkV2ZW50KTsKKyAgICByZXR1cm4gZ2V0SW5saW5lRXZlbnRMaXN0ZW5lcihldmVu
dE5hbWVzKCkua2V5ZG93bkV2ZW50KTsKIH0KIAogdm9pZCBOb2RlOjpzZXRPbmtleWRvd24oUGFz
c1JlZlB0cjxFdmVudExpc3RlbmVyPiBldmVudExpc3RlbmVyKQogewotICAgIHNldElubGluZUV2
ZW50TGlzdGVuZXJGb3JUeXBlKGV2ZW50TmFtZXMoKS5rZXlkb3duRXZlbnQsIGV2ZW50TGlzdGVu
ZXIpOworICAgIHNldElubGluZUV2ZW50TGlzdGVuZXIoZXZlbnROYW1lcygpLmtleWRvd25FdmVu
dCwgZXZlbnRMaXN0ZW5lcik7CiB9CiAKIEV2ZW50TGlzdGVuZXIqIE5vZGU6Om9ua2V5cHJlc3Mo
KSBjb25zdAogewotICAgIHJldHVybiBpbmxpbmVFdmVudExpc3RlbmVyRm9yVHlwZShldmVudE5h
bWVzKCkua2V5cHJlc3NFdmVudCk7CisgICAgcmV0dXJuIGdldElubGluZUV2ZW50TGlzdGVuZXIo
ZXZlbnROYW1lcygpLmtleXByZXNzRXZlbnQpOwogfQogCiB2b2lkIE5vZGU6OnNldE9ua2V5cHJl
c3MoUGFzc1JlZlB0cjxFdmVudExpc3RlbmVyPiBldmVudExpc3RlbmVyKQogewotICAgIHNldElu
bGluZUV2ZW50TGlzdGVuZXJGb3JUeXBlKGV2ZW50TmFtZXMoKS5rZXlwcmVzc0V2ZW50LCBldmVu
dExpc3RlbmVyKTsKKyAgICBzZXRJbmxpbmVFdmVudExpc3RlbmVyKGV2ZW50TmFtZXMoKS5rZXlw
cmVzc0V2ZW50LCBldmVudExpc3RlbmVyKTsKIH0KIAogRXZlbnRMaXN0ZW5lciogTm9kZTo6b25r
ZXl1cCgpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIGlubGluZUV2ZW50TGlzdGVuZXJGb3JUeXBlKGV2
ZW50TmFtZXMoKS5rZXl1cEV2ZW50KTsKKyAgICByZXR1cm4gZ2V0SW5saW5lRXZlbnRMaXN0ZW5l
cihldmVudE5hbWVzKCkua2V5dXBFdmVudCk7CiB9CiAKIHZvaWQgTm9kZTo6c2V0T25rZXl1cChQ
YXNzUmVmUHRyPEV2ZW50TGlzdGVuZXI+IGV2ZW50TGlzdGVuZXIpCiB7Ci0gICAgc2V0SW5saW5l
RXZlbnRMaXN0ZW5lckZvclR5cGUoZXZlbnROYW1lcygpLmtleXVwRXZlbnQsIGV2ZW50TGlzdGVu
ZXIpOworICAgIHNldElubGluZUV2ZW50TGlzdGVuZXIoZXZlbnROYW1lcygpLmtleXVwRXZlbnQs
IGV2ZW50TGlzdGVuZXIpOwogfQogCiBFdmVudExpc3RlbmVyKiBOb2RlOjpvbmxvYWQoKSBjb25z
dAogewotICAgIHJldHVybiBpbmxpbmVFdmVudExpc3RlbmVyRm9yVHlwZShldmVudE5hbWVzKCku
bG9hZEV2ZW50KTsKKyAgICByZXR1cm4gZ2V0SW5saW5lRXZlbnRMaXN0ZW5lcihldmVudE5hbWVz
KCkubG9hZEV2ZW50KTsKIH0KIAogdm9pZCBOb2RlOjpzZXRPbmxvYWQoUGFzc1JlZlB0cjxFdmVu
dExpc3RlbmVyPiBldmVudExpc3RlbmVyKQogewotICAgIHNldElubGluZUV2ZW50TGlzdGVuZXJG
b3JUeXBlKGV2ZW50TmFtZXMoKS5sb2FkRXZlbnQsIGV2ZW50TGlzdGVuZXIpOworICAgIHNldElu
bGluZUV2ZW50TGlzdGVuZXIoZXZlbnROYW1lcygpLmxvYWRFdmVudCwgZXZlbnRMaXN0ZW5lcik7
CiB9CiAKIEV2ZW50TGlzdGVuZXIqIE5vZGU6Om9ubW91c2Vkb3duKCkgY29uc3QKIHsKLSAgICBy
ZXR1cm4gaW5saW5lRXZlbnRMaXN0ZW5lckZvclR5cGUoZXZlbnROYW1lcygpLm1vdXNlZG93bkV2
ZW50KTsKKyAgICByZXR1cm4gZ2V0SW5saW5lRXZlbnRMaXN0ZW5lcihldmVudE5hbWVzKCkubW91
c2Vkb3duRXZlbnQpOwogfQogCiB2b2lkIE5vZGU6OnNldE9ubW91c2Vkb3duKFBhc3NSZWZQdHI8
RXZlbnRMaXN0ZW5lcj4gZXZlbnRMaXN0ZW5lcikKIHsKLSAgICBzZXRJbmxpbmVFdmVudExpc3Rl
bmVyRm9yVHlwZShldmVudE5hbWVzKCkubW91c2Vkb3duRXZlbnQsIGV2ZW50TGlzdGVuZXIpOwor
ICAgIHNldElubGluZUV2ZW50TGlzdGVuZXIoZXZlbnROYW1lcygpLm1vdXNlZG93bkV2ZW50LCBl
dmVudExpc3RlbmVyKTsKIH0KIAogRXZlbnRMaXN0ZW5lciogTm9kZTo6b25tb3VzZW1vdmUoKSBj
b25zdAogewotICAgIHJldHVybiBpbmxpbmVFdmVudExpc3RlbmVyRm9yVHlwZShldmVudE5hbWVz
KCkubW91c2Vtb3ZlRXZlbnQpOworICAgIHJldHVybiBnZXRJbmxpbmVFdmVudExpc3RlbmVyKGV2
ZW50TmFtZXMoKS5tb3VzZW1vdmVFdmVudCk7CiB9CiAKIHZvaWQgTm9kZTo6c2V0T25tb3VzZW1v
dmUoUGFzc1JlZlB0cjxFdmVudExpc3RlbmVyPiBldmVudExpc3RlbmVyKQogewotICAgIHNldElu
bGluZUV2ZW50TGlzdGVuZXJGb3JUeXBlKGV2ZW50TmFtZXMoKS5tb3VzZW1vdmVFdmVudCwgZXZl
bnRMaXN0ZW5lcik7CisgICAgc2V0SW5saW5lRXZlbnRMaXN0ZW5lcihldmVudE5hbWVzKCkubW91
c2Vtb3ZlRXZlbnQsIGV2ZW50TGlzdGVuZXIpOwogfQogCiBFdmVudExpc3RlbmVyKiBOb2RlOjpv
bm1vdXNlb3V0KCkgY29uc3QKIHsKLSAgICByZXR1cm4gaW5saW5lRXZlbnRMaXN0ZW5lckZvclR5
cGUoZXZlbnROYW1lcygpLm1vdXNlb3V0RXZlbnQpOworICAgIHJldHVybiBnZXRJbmxpbmVFdmVu
dExpc3RlbmVyKGV2ZW50TmFtZXMoKS5tb3VzZW91dEV2ZW50KTsKIH0KIAogdm9pZCBOb2RlOjpz
ZXRPbm1vdXNlb3V0KFBhc3NSZWZQdHI8RXZlbnRMaXN0ZW5lcj4gZXZlbnRMaXN0ZW5lcikKIHsK
LSAgICBzZXRJbmxpbmVFdmVudExpc3RlbmVyRm9yVHlwZShldmVudE5hbWVzKCkubW91c2VvdXRF
dmVudCwgZXZlbnRMaXN0ZW5lcik7CisgICAgc2V0SW5saW5lRXZlbnRMaXN0ZW5lcihldmVudE5h
bWVzKCkubW91c2VvdXRFdmVudCwgZXZlbnRMaXN0ZW5lcik7CiB9CiAKIEV2ZW50TGlzdGVuZXIq
IE5vZGU6Om9ubW91c2VvdmVyKCkgY29uc3QKIHsKLSAgICByZXR1cm4gaW5saW5lRXZlbnRMaXN0
ZW5lckZvclR5cGUoZXZlbnROYW1lcygpLm1vdXNlb3ZlckV2ZW50KTsKKyAgICByZXR1cm4gZ2V0
SW5saW5lRXZlbnRMaXN0ZW5lcihldmVudE5hbWVzKCkubW91c2VvdmVyRXZlbnQpOwogfQogCiB2
b2lkIE5vZGU6OnNldE9ubW91c2VvdmVyKFBhc3NSZWZQdHI8RXZlbnRMaXN0ZW5lcj4gZXZlbnRM
aXN0ZW5lcikKIHsKLSAgICBzZXRJbmxpbmVFdmVudExpc3RlbmVyRm9yVHlwZShldmVudE5hbWVz
KCkubW91c2VvdmVyRXZlbnQsIGV2ZW50TGlzdGVuZXIpOworICAgIHNldElubGluZUV2ZW50TGlz
dGVuZXIoZXZlbnROYW1lcygpLm1vdXNlb3ZlckV2ZW50LCBldmVudExpc3RlbmVyKTsKIH0KIAog
RXZlbnRMaXN0ZW5lciogTm9kZTo6b25tb3VzZXVwKCkgY29uc3QKIHsKLSAgICByZXR1cm4gaW5s
aW5lRXZlbnRMaXN0ZW5lckZvclR5cGUoZXZlbnROYW1lcygpLm1vdXNldXBFdmVudCk7CisgICAg
cmV0dXJuIGdldElubGluZUV2ZW50TGlzdGVuZXIoZXZlbnROYW1lcygpLm1vdXNldXBFdmVudCk7
CiB9CiAKIHZvaWQgTm9kZTo6c2V0T25tb3VzZXVwKFBhc3NSZWZQdHI8RXZlbnRMaXN0ZW5lcj4g
ZXZlbnRMaXN0ZW5lcikKIHsKLSAgICBzZXRJbmxpbmVFdmVudExpc3RlbmVyRm9yVHlwZShldmVu
dE5hbWVzKCkubW91c2V1cEV2ZW50LCBldmVudExpc3RlbmVyKTsKKyAgICBzZXRJbmxpbmVFdmVu
dExpc3RlbmVyKGV2ZW50TmFtZXMoKS5tb3VzZXVwRXZlbnQsIGV2ZW50TGlzdGVuZXIpOwogfQog
CiBFdmVudExpc3RlbmVyKiBOb2RlOjpvbm1vdXNld2hlZWwoKSBjb25zdAogewotICAgIHJldHVy
biBpbmxpbmVFdmVudExpc3RlbmVyRm9yVHlwZShldmVudE5hbWVzKCkubW91c2V3aGVlbEV2ZW50
KTsKKyAgICByZXR1cm4gZ2V0SW5saW5lRXZlbnRMaXN0ZW5lcihldmVudE5hbWVzKCkubW91c2V3
aGVlbEV2ZW50KTsKIH0KIAogdm9pZCBOb2RlOjpzZXRPbm1vdXNld2hlZWwoUGFzc1JlZlB0cjxF
dmVudExpc3RlbmVyPiBldmVudExpc3RlbmVyKQogewotICAgIHNldElubGluZUV2ZW50TGlzdGVu
ZXJGb3JUeXBlKGV2ZW50TmFtZXMoKS5tb3VzZXdoZWVsRXZlbnQsIGV2ZW50TGlzdGVuZXIpOwor
ICAgIHNldElubGluZUV2ZW50TGlzdGVuZXIoZXZlbnROYW1lcygpLm1vdXNld2hlZWxFdmVudCwg
ZXZlbnRMaXN0ZW5lcik7CiB9CiAKIEV2ZW50TGlzdGVuZXIqIE5vZGU6Om9uYmVmb3JlY3V0KCkg
Y29uc3QKIHsKLSAgICByZXR1cm4gaW5saW5lRXZlbnRMaXN0ZW5lckZvclR5cGUoZXZlbnROYW1l
cygpLmJlZm9yZWN1dEV2ZW50KTsKKyAgICByZXR1cm4gZ2V0SW5saW5lRXZlbnRMaXN0ZW5lcihl
dmVudE5hbWVzKCkuYmVmb3JlY3V0RXZlbnQpOwogfQogCiB2b2lkIE5vZGU6OnNldE9uYmVmb3Jl
Y3V0KFBhc3NSZWZQdHI8RXZlbnRMaXN0ZW5lcj4gZXZlbnRMaXN0ZW5lcikKIHsKLSAgICBzZXRJ
bmxpbmVFdmVudExpc3RlbmVyRm9yVHlwZShldmVudE5hbWVzKCkuYmVmb3JlY3V0RXZlbnQsIGV2
ZW50TGlzdGVuZXIpOworICAgIHNldElubGluZUV2ZW50TGlzdGVuZXIoZXZlbnROYW1lcygpLmJl
Zm9yZWN1dEV2ZW50LCBldmVudExpc3RlbmVyKTsKIH0KIAogRXZlbnRMaXN0ZW5lciogTm9kZTo6
b25jdXQoKSBjb25zdAogewotICAgIHJldHVybiBpbmxpbmVFdmVudExpc3RlbmVyRm9yVHlwZShl
dmVudE5hbWVzKCkuY3V0RXZlbnQpOworICAgIHJldHVybiBnZXRJbmxpbmVFdmVudExpc3RlbmVy
KGV2ZW50TmFtZXMoKS5jdXRFdmVudCk7CiB9CiAKIHZvaWQgTm9kZTo6c2V0T25jdXQoUGFzc1Jl
ZlB0cjxFdmVudExpc3RlbmVyPiBldmVudExpc3RlbmVyKQogewotICAgIHNldElubGluZUV2ZW50
TGlzdGVuZXJGb3JUeXBlKGV2ZW50TmFtZXMoKS5jdXRFdmVudCwgZXZlbnRMaXN0ZW5lcik7Cisg
ICAgc2V0SW5saW5lRXZlbnRMaXN0ZW5lcihldmVudE5hbWVzKCkuY3V0RXZlbnQsIGV2ZW50TGlz
dGVuZXIpOwogfQogCiBFdmVudExpc3RlbmVyKiBOb2RlOjpvbmJlZm9yZWNvcHkoKSBjb25zdAog
ewotICAgIHJldHVybiBpbmxpbmVFdmVudExpc3RlbmVyRm9yVHlwZShldmVudE5hbWVzKCkuYmVm
b3JlY29weUV2ZW50KTsKKyAgICByZXR1cm4gZ2V0SW5saW5lRXZlbnRMaXN0ZW5lcihldmVudE5h
bWVzKCkuYmVmb3JlY29weUV2ZW50KTsKIH0KIAogdm9pZCBOb2RlOjpzZXRPbmJlZm9yZWNvcHko
UGFzc1JlZlB0cjxFdmVudExpc3RlbmVyPiBldmVudExpc3RlbmVyKQogewotICAgIHNldElubGlu
ZUV2ZW50TGlzdGVuZXJGb3JUeXBlKGV2ZW50TmFtZXMoKS5iZWZvcmVjb3B5RXZlbnQsIGV2ZW50
TGlzdGVuZXIpOworICAgIHNldElubGluZUV2ZW50TGlzdGVuZXIoZXZlbnROYW1lcygpLmJlZm9y
ZWNvcHlFdmVudCwgZXZlbnRMaXN0ZW5lcik7CiB9CiAKIEV2ZW50TGlzdGVuZXIqIE5vZGU6Om9u
Y29weSgpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIGlubGluZUV2ZW50TGlzdGVuZXJGb3JUeXBlKGV2
ZW50TmFtZXMoKS5jb3B5RXZlbnQpOworICAgIHJldHVybiBnZXRJbmxpbmVFdmVudExpc3RlbmVy
KGV2ZW50TmFtZXMoKS5jb3B5RXZlbnQpOwogfQogCiB2b2lkIE5vZGU6OnNldE9uY29weShQYXNz
UmVmUHRyPEV2ZW50TGlzdGVuZXI+IGV2ZW50TGlzdGVuZXIpCiB7Ci0gICAgc2V0SW5saW5lRXZl
bnRMaXN0ZW5lckZvclR5cGUoZXZlbnROYW1lcygpLmNvcHlFdmVudCwgZXZlbnRMaXN0ZW5lcik7
CisgICAgc2V0SW5saW5lRXZlbnRMaXN0ZW5lcihldmVudE5hbWVzKCkuY29weUV2ZW50LCBldmVu
dExpc3RlbmVyKTsKIH0KIAogRXZlbnRMaXN0ZW5lciogTm9kZTo6b25iZWZvcmVwYXN0ZSgpIGNv
bnN0CiB7Ci0gICAgcmV0dXJuIGlubGluZUV2ZW50TGlzdGVuZXJGb3JUeXBlKGV2ZW50TmFtZXMo
KS5iZWZvcmVwYXN0ZUV2ZW50KTsKKyAgICByZXR1cm4gZ2V0SW5saW5lRXZlbnRMaXN0ZW5lcihl
dmVudE5hbWVzKCkuYmVmb3JlcGFzdGVFdmVudCk7CiB9CiAKIHZvaWQgTm9kZTo6c2V0T25iZWZv
cmVwYXN0ZShQYXNzUmVmUHRyPEV2ZW50TGlzdGVuZXI+IGV2ZW50TGlzdGVuZXIpCiB7Ci0gICAg
c2V0SW5saW5lRXZlbnRMaXN0ZW5lckZvclR5cGUoZXZlbnROYW1lcygpLmJlZm9yZXBhc3RlRXZl
bnQsIGV2ZW50TGlzdGVuZXIpOworICAgIHNldElubGluZUV2ZW50TGlzdGVuZXIoZXZlbnROYW1l
cygpLmJlZm9yZXBhc3RlRXZlbnQsIGV2ZW50TGlzdGVuZXIpOwogfQogCiBFdmVudExpc3RlbmVy
KiBOb2RlOjpvbnBhc3RlKCkgY29uc3QKIHsKLSAgICByZXR1cm4gaW5saW5lRXZlbnRMaXN0ZW5l
ckZvclR5cGUoZXZlbnROYW1lcygpLnBhc3RlRXZlbnQpOworICAgIHJldHVybiBnZXRJbmxpbmVF
dmVudExpc3RlbmVyKGV2ZW50TmFtZXMoKS5wYXN0ZUV2ZW50KTsKIH0KIAogdm9pZCBOb2RlOjpz
ZXRPbnBhc3RlKFBhc3NSZWZQdHI8RXZlbnRMaXN0ZW5lcj4gZXZlbnRMaXN0ZW5lcikKIHsKLSAg
ICBzZXRJbmxpbmVFdmVudExpc3RlbmVyRm9yVHlwZShldmVudE5hbWVzKCkucGFzdGVFdmVudCwg
ZXZlbnRMaXN0ZW5lcik7CisgICAgc2V0SW5saW5lRXZlbnRMaXN0ZW5lcihldmVudE5hbWVzKCku
cGFzdGVFdmVudCwgZXZlbnRMaXN0ZW5lcik7CiB9CiAKIEV2ZW50TGlzdGVuZXIqIE5vZGU6Om9u
ZHJhZ2VudGVyKCkgY29uc3QKIHsKLSAgICByZXR1cm4gaW5saW5lRXZlbnRMaXN0ZW5lckZvclR5
cGUoZXZlbnROYW1lcygpLmRyYWdlbnRlckV2ZW50KTsKKyAgICByZXR1cm4gZ2V0SW5saW5lRXZl
bnRMaXN0ZW5lcihldmVudE5hbWVzKCkuZHJhZ2VudGVyRXZlbnQpOwogfQogCiB2b2lkIE5vZGU6
OnNldE9uZHJhZ2VudGVyKFBhc3NSZWZQdHI8RXZlbnRMaXN0ZW5lcj4gZXZlbnRMaXN0ZW5lcikK
IHsKLSAgICBzZXRJbmxpbmVFdmVudExpc3RlbmVyRm9yVHlwZShldmVudE5hbWVzKCkuZHJhZ2Vu
dGVyRXZlbnQsIGV2ZW50TGlzdGVuZXIpOworICAgIHNldElubGluZUV2ZW50TGlzdGVuZXIoZXZl
bnROYW1lcygpLmRyYWdlbnRlckV2ZW50LCBldmVudExpc3RlbmVyKTsKIH0KIAogRXZlbnRMaXN0
ZW5lciogTm9kZTo6b25kcmFnb3ZlcigpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIGlubGluZUV2ZW50
TGlzdGVuZXJGb3JUeXBlKGV2ZW50TmFtZXMoKS5kcmFnb3ZlckV2ZW50KTsKKyAgICByZXR1cm4g
Z2V0SW5saW5lRXZlbnRMaXN0ZW5lcihldmVudE5hbWVzKCkuZHJhZ292ZXJFdmVudCk7CiB9CiAK
IHZvaWQgTm9kZTo6c2V0T25kcmFnb3ZlcihQYXNzUmVmUHRyPEV2ZW50TGlzdGVuZXI+IGV2ZW50
TGlzdGVuZXIpCiB7Ci0gICAgc2V0SW5saW5lRXZlbnRMaXN0ZW5lckZvclR5cGUoZXZlbnROYW1l
cygpLmRyYWdvdmVyRXZlbnQsIGV2ZW50TGlzdGVuZXIpOworICAgIHNldElubGluZUV2ZW50TGlz
dGVuZXIoZXZlbnROYW1lcygpLmRyYWdvdmVyRXZlbnQsIGV2ZW50TGlzdGVuZXIpOwogfQogCiBF
dmVudExpc3RlbmVyKiBOb2RlOjpvbmRyYWdsZWF2ZSgpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIGlu
bGluZUV2ZW50TGlzdGVuZXJGb3JUeXBlKGV2ZW50TmFtZXMoKS5kcmFnbGVhdmVFdmVudCk7Cisg
ICAgcmV0dXJuIGdldElubGluZUV2ZW50TGlzdGVuZXIoZXZlbnROYW1lcygpLmRyYWdsZWF2ZUV2
ZW50KTsKIH0KIAogdm9pZCBOb2RlOjpzZXRPbmRyYWdsZWF2ZShQYXNzUmVmUHRyPEV2ZW50TGlz
dGVuZXI+IGV2ZW50TGlzdGVuZXIpCiB7Ci0gICAgc2V0SW5saW5lRXZlbnRMaXN0ZW5lckZvclR5
cGUoZXZlbnROYW1lcygpLmRyYWdsZWF2ZUV2ZW50LCBldmVudExpc3RlbmVyKTsKKyAgICBzZXRJ
bmxpbmVFdmVudExpc3RlbmVyKGV2ZW50TmFtZXMoKS5kcmFnbGVhdmVFdmVudCwgZXZlbnRMaXN0
ZW5lcik7CiB9CiAKIEV2ZW50TGlzdGVuZXIqIE5vZGU6Om9uZHJvcCgpIGNvbnN0CiB7Ci0gICAg
cmV0dXJuIGlubGluZUV2ZW50TGlzdGVuZXJGb3JUeXBlKGV2ZW50TmFtZXMoKS5kcm9wRXZlbnQp
OworICAgIHJldHVybiBnZXRJbmxpbmVFdmVudExpc3RlbmVyKGV2ZW50TmFtZXMoKS5kcm9wRXZl
bnQpOwogfQogCiB2b2lkIE5vZGU6OnNldE9uZHJvcChQYXNzUmVmUHRyPEV2ZW50TGlzdGVuZXI+
IGV2ZW50TGlzdGVuZXIpCiB7Ci0gICAgc2V0SW5saW5lRXZlbnRMaXN0ZW5lckZvclR5cGUoZXZl
bnROYW1lcygpLmRyb3BFdmVudCwgZXZlbnRMaXN0ZW5lcik7CisgICAgc2V0SW5saW5lRXZlbnRM
aXN0ZW5lcihldmVudE5hbWVzKCkuZHJvcEV2ZW50LCBldmVudExpc3RlbmVyKTsKIH0KIAogRXZl
bnRMaXN0ZW5lciogTm9kZTo6b25kcmFnc3RhcnQoKSBjb25zdAogewotICAgIHJldHVybiBpbmxp
bmVFdmVudExpc3RlbmVyRm9yVHlwZShldmVudE5hbWVzKCkuZHJhZ3N0YXJ0RXZlbnQpOworICAg
IHJldHVybiBnZXRJbmxpbmVFdmVudExpc3RlbmVyKGV2ZW50TmFtZXMoKS5kcmFnc3RhcnRFdmVu
dCk7CiB9CiAKIHZvaWQgTm9kZTo6c2V0T25kcmFnc3RhcnQoUGFzc1JlZlB0cjxFdmVudExpc3Rl
bmVyPiBldmVudExpc3RlbmVyKQogewotICAgIHNldElubGluZUV2ZW50TGlzdGVuZXJGb3JUeXBl
KGV2ZW50TmFtZXMoKS5kcmFnc3RhcnRFdmVudCwgZXZlbnRMaXN0ZW5lcik7CisgICAgc2V0SW5s
aW5lRXZlbnRMaXN0ZW5lcihldmVudE5hbWVzKCkuZHJhZ3N0YXJ0RXZlbnQsIGV2ZW50TGlzdGVu
ZXIpOwogfQogCiBFdmVudExpc3RlbmVyKiBOb2RlOjpvbmRyYWcoKSBjb25zdAogewotICAgIHJl
dHVybiBpbmxpbmVFdmVudExpc3RlbmVyRm9yVHlwZShldmVudE5hbWVzKCkuZHJhZ0V2ZW50KTsK
KyAgICByZXR1cm4gZ2V0SW5saW5lRXZlbnRMaXN0ZW5lcihldmVudE5hbWVzKCkuZHJhZ0V2ZW50
KTsKIH0KIAogdm9pZCBOb2RlOjpzZXRPbmRyYWcoUGFzc1JlZlB0cjxFdmVudExpc3RlbmVyPiBl
dmVudExpc3RlbmVyKQogewotICAgIHNldElubGluZUV2ZW50TGlzdGVuZXJGb3JUeXBlKGV2ZW50
TmFtZXMoKS5kcmFnRXZlbnQsIGV2ZW50TGlzdGVuZXIpOworICAgIHNldElubGluZUV2ZW50TGlz
dGVuZXIoZXZlbnROYW1lcygpLmRyYWdFdmVudCwgZXZlbnRMaXN0ZW5lcik7CiB9CiAKIEV2ZW50
TGlzdGVuZXIqIE5vZGU6Om9uZHJhZ2VuZCgpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIGlubGluZUV2
ZW50TGlzdGVuZXJGb3JUeXBlKGV2ZW50TmFtZXMoKS5kcmFnZW5kRXZlbnQpOworICAgIHJldHVy
biBnZXRJbmxpbmVFdmVudExpc3RlbmVyKGV2ZW50TmFtZXMoKS5kcmFnZW5kRXZlbnQpOwogfQog
CiB2b2lkIE5vZGU6OnNldE9uZHJhZ2VuZChQYXNzUmVmUHRyPEV2ZW50TGlzdGVuZXI+IGV2ZW50
TGlzdGVuZXIpCiB7Ci0gICAgc2V0SW5saW5lRXZlbnRMaXN0ZW5lckZvclR5cGUoZXZlbnROYW1l
cygpLmRyYWdlbmRFdmVudCwgZXZlbnRMaXN0ZW5lcik7CisgICAgc2V0SW5saW5lRXZlbnRMaXN0
ZW5lcihldmVudE5hbWVzKCkuZHJhZ2VuZEV2ZW50LCBldmVudExpc3RlbmVyKTsKIH0KIAogRXZl
bnRMaXN0ZW5lciogTm9kZTo6b25yZXNldCgpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIGlubGluZUV2
ZW50TGlzdGVuZXJGb3JUeXBlKGV2ZW50TmFtZXMoKS5yZXNldEV2ZW50KTsKKyAgICByZXR1cm4g
Z2V0SW5saW5lRXZlbnRMaXN0ZW5lcihldmVudE5hbWVzKCkucmVzZXRFdmVudCk7CiB9CiAKIHZv
aWQgTm9kZTo6c2V0T25yZXNldChQYXNzUmVmUHRyPEV2ZW50TGlzdGVuZXI+IGV2ZW50TGlzdGVu
ZXIpCiB7Ci0gICAgc2V0SW5saW5lRXZlbnRMaXN0ZW5lckZvclR5cGUoZXZlbnROYW1lcygpLnJl
c2V0RXZlbnQsIGV2ZW50TGlzdGVuZXIpOworICAgIHNldElubGluZUV2ZW50TGlzdGVuZXIoZXZl
bnROYW1lcygpLnJlc2V0RXZlbnQsIGV2ZW50TGlzdGVuZXIpOwogfQogCiBFdmVudExpc3RlbmVy
KiBOb2RlOjpvbnJlc2l6ZSgpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIGlubGluZUV2ZW50TGlzdGVu
ZXJGb3JUeXBlKGV2ZW50TmFtZXMoKS5yZXNpemVFdmVudCk7CisgICAgcmV0dXJuIGdldElubGlu
ZUV2ZW50TGlzdGVuZXIoZXZlbnROYW1lcygpLnJlc2l6ZUV2ZW50KTsKIH0KIAogdm9pZCBOb2Rl
OjpzZXRPbnJlc2l6ZShQYXNzUmVmUHRyPEV2ZW50TGlzdGVuZXI+IGV2ZW50TGlzdGVuZXIpCiB7
Ci0gICAgc2V0SW5saW5lRXZlbnRMaXN0ZW5lckZvclR5cGUoZXZlbnROYW1lcygpLnJlc2l6ZUV2
ZW50LCBldmVudExpc3RlbmVyKTsKKyAgICBzZXRJbmxpbmVFdmVudExpc3RlbmVyKGV2ZW50TmFt
ZXMoKS5yZXNpemVFdmVudCwgZXZlbnRMaXN0ZW5lcik7CiB9CiAKIEV2ZW50TGlzdGVuZXIqIE5v
ZGU6Om9uc2Nyb2xsKCkgY29uc3QKIHsKLSAgICByZXR1cm4gaW5saW5lRXZlbnRMaXN0ZW5lckZv
clR5cGUoZXZlbnROYW1lcygpLnNjcm9sbEV2ZW50KTsKKyAgICByZXR1cm4gZ2V0SW5saW5lRXZl
bnRMaXN0ZW5lcihldmVudE5hbWVzKCkuc2Nyb2xsRXZlbnQpOwogfQogCiB2b2lkIE5vZGU6OnNl
dE9uc2Nyb2xsKFBhc3NSZWZQdHI8RXZlbnRMaXN0ZW5lcj4gZXZlbnRMaXN0ZW5lcikKIHsKLSAg
ICBzZXRJbmxpbmVFdmVudExpc3RlbmVyRm9yVHlwZShldmVudE5hbWVzKCkuc2Nyb2xsRXZlbnQs
IGV2ZW50TGlzdGVuZXIpOworICAgIHNldElubGluZUV2ZW50TGlzdGVuZXIoZXZlbnROYW1lcygp
LnNjcm9sbEV2ZW50LCBldmVudExpc3RlbmVyKTsKIH0KIAogRXZlbnRMaXN0ZW5lciogTm9kZTo6
b25zZWFyY2goKSBjb25zdAogewotICAgIHJldHVybiBpbmxpbmVFdmVudExpc3RlbmVyRm9yVHlw
ZShldmVudE5hbWVzKCkuc2VhcmNoRXZlbnQpOworICAgIHJldHVybiBnZXRJbmxpbmVFdmVudExp
c3RlbmVyKGV2ZW50TmFtZXMoKS5zZWFyY2hFdmVudCk7CiB9CiAKIHZvaWQgTm9kZTo6c2V0T25z
ZWFyY2goUGFzc1JlZlB0cjxFdmVudExpc3RlbmVyPiBldmVudExpc3RlbmVyKQogewotICAgIHNl
dElubGluZUV2ZW50TGlzdGVuZXJGb3JUeXBlKGV2ZW50TmFtZXMoKS5zZWFyY2hFdmVudCwgZXZl
bnRMaXN0ZW5lcik7CisgICAgc2V0SW5saW5lRXZlbnRMaXN0ZW5lcihldmVudE5hbWVzKCkuc2Vh
cmNoRXZlbnQsIGV2ZW50TGlzdGVuZXIpOwogfQogCiBFdmVudExpc3RlbmVyKiBOb2RlOjpvbnNl
bGVjdCgpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIGlubGluZUV2ZW50TGlzdGVuZXJGb3JUeXBlKGV2
ZW50TmFtZXMoKS5zZWxlY3RFdmVudCk7CisgICAgcmV0dXJuIGdldElubGluZUV2ZW50TGlzdGVu
ZXIoZXZlbnROYW1lcygpLnNlbGVjdEV2ZW50KTsKIH0KIAogdm9pZCBOb2RlOjpzZXRPbnNlbGVj
dChQYXNzUmVmUHRyPEV2ZW50TGlzdGVuZXI+IGV2ZW50TGlzdGVuZXIpCiB7Ci0gICAgc2V0SW5s
aW5lRXZlbnRMaXN0ZW5lckZvclR5cGUoZXZlbnROYW1lcygpLnNlbGVjdEV2ZW50LCBldmVudExp
c3RlbmVyKTsKKyAgICBzZXRJbmxpbmVFdmVudExpc3RlbmVyKGV2ZW50TmFtZXMoKS5zZWxlY3RF
dmVudCwgZXZlbnRMaXN0ZW5lcik7CiB9CiAKIEV2ZW50TGlzdGVuZXIqIE5vZGU6Om9uc2VsZWN0
c3RhcnQoKSBjb25zdAogewotICAgIHJldHVybiBpbmxpbmVFdmVudExpc3RlbmVyRm9yVHlwZShl
dmVudE5hbWVzKCkuc2VsZWN0c3RhcnRFdmVudCk7CisgICAgcmV0dXJuIGdldElubGluZUV2ZW50
TGlzdGVuZXIoZXZlbnROYW1lcygpLnNlbGVjdHN0YXJ0RXZlbnQpOwogfQogCiB2b2lkIE5vZGU6
OnNldE9uc2VsZWN0c3RhcnQoUGFzc1JlZlB0cjxFdmVudExpc3RlbmVyPiBldmVudExpc3RlbmVy
KQogewotICAgIHNldElubGluZUV2ZW50TGlzdGVuZXJGb3JUeXBlKGV2ZW50TmFtZXMoKS5zZWxl
Y3RzdGFydEV2ZW50LCBldmVudExpc3RlbmVyKTsKKyAgICBzZXRJbmxpbmVFdmVudExpc3RlbmVy
KGV2ZW50TmFtZXMoKS5zZWxlY3RzdGFydEV2ZW50LCBldmVudExpc3RlbmVyKTsKIH0KIAogRXZl
bnRMaXN0ZW5lciogTm9kZTo6b25zdWJtaXQoKSBjb25zdAogewotICAgIHJldHVybiBpbmxpbmVF
dmVudExpc3RlbmVyRm9yVHlwZShldmVudE5hbWVzKCkuc3VibWl0RXZlbnQpOworICAgIHJldHVy
biBnZXRJbmxpbmVFdmVudExpc3RlbmVyKGV2ZW50TmFtZXMoKS5zdWJtaXRFdmVudCk7CiB9CiAK
IHZvaWQgTm9kZTo6c2V0T25zdWJtaXQoUGFzc1JlZlB0cjxFdmVudExpc3RlbmVyPiBldmVudExp
c3RlbmVyKQogewotICAgIHNldElubGluZUV2ZW50TGlzdGVuZXJGb3JUeXBlKGV2ZW50TmFtZXMo
KS5zdWJtaXRFdmVudCwgZXZlbnRMaXN0ZW5lcik7CisgICAgc2V0SW5saW5lRXZlbnRMaXN0ZW5l
cihldmVudE5hbWVzKCkuc3VibWl0RXZlbnQsIGV2ZW50TGlzdGVuZXIpOwogfQogCiBFdmVudExp
c3RlbmVyKiBOb2RlOjpvbnVubG9hZCgpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIGlubGluZUV2ZW50
TGlzdGVuZXJGb3JUeXBlKGV2ZW50TmFtZXMoKS51bmxvYWRFdmVudCk7CisgICAgcmV0dXJuIGdl
dElubGluZUV2ZW50TGlzdGVuZXIoZXZlbnROYW1lcygpLnVubG9hZEV2ZW50KTsKIH0KIAogdm9p
ZCBOb2RlOjpzZXRPbnVubG9hZChQYXNzUmVmUHRyPEV2ZW50TGlzdGVuZXI+IGV2ZW50TGlzdGVu
ZXIpCiB7Ci0gICAgc2V0SW5saW5lRXZlbnRMaXN0ZW5lckZvclR5cGUoZXZlbnROYW1lcygpLnVu
bG9hZEV2ZW50LCBldmVudExpc3RlbmVyKTsKKyAgICBzZXRJbmxpbmVFdmVudExpc3RlbmVyKGV2
ZW50TmFtZXMoKS51bmxvYWRFdmVudCwgZXZlbnRMaXN0ZW5lcik7CiB9CiAKIH0gLy8gbmFtZXNw
YWNlIFdlYkNvcmUKSW5kZXg6IGRvbS9Ob2RlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gZG9tL05vZGUuaAko
cmV2aXNpb24gNDI2MDIpCisrKyBkb20vTm9kZS5oCSh3b3JraW5nIGNvcHkpCkBAIC01MTUsMTYg
KzUxNSwxOSBAQCBwdWJsaWM6CiAKICAgICB2aXJ0dWFsIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQq
IHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKSBjb25zdDsKIAorICAgIC8vIFVzZWQgZm9yIHN0YW5k
YXJkIERPTSBhZGRFdmVudExpc3RlbmVyIC8gcmVtb3ZlRXZlbnRMaXN0ZW5lciBBUElzLgogICAg
IHZpcnR1YWwgdm9pZCBhZGRFdmVudExpc3RlbmVyKGNvbnN0IEF0b21pY1N0cmluZyYgZXZlbnRU
eXBlLCBQYXNzUmVmUHRyPEV2ZW50TGlzdGVuZXI+LCBib29sIHVzZUNhcHR1cmUpOwogICAgIHZp
cnR1YWwgdm9pZCByZW1vdmVFdmVudExpc3RlbmVyKGNvbnN0IEF0b21pY1N0cmluZyYgZXZlbnRU
eXBlLCBFdmVudExpc3RlbmVyKiwgYm9vbCB1c2VDYXB0dXJlKTsKKworICAgIC8vIFVzZWQgZm9y
IGxlZ2FjeSAib25FdmVudCIgcHJvcGVydHkgQVBJcy4KKyAgICB2b2lkIHNldElubGluZUV2ZW50
TGlzdGVuZXIoY29uc3QgQXRvbWljU3RyaW5nJiBldmVudFR5cGUsIFBhc3NSZWZQdHI8RXZlbnRM
aXN0ZW5lcj4pOworICAgIHZvaWQgY2xlYXJJbmxpbmVFdmVudExpc3RlbmVyKGNvbnN0IEF0b21p
Y1N0cmluZyYgZXZlbnRUeXBlKTsKKyAgICBFdmVudExpc3RlbmVyKiBnZXRJbmxpbmVFdmVudExp
c3RlbmVyKGNvbnN0IEF0b21pY1N0cmluZyYgZXZlbnRUeXBlKSBjb25zdDsKKwogICAgIHZpcnR1
YWwgYm9vbCBkaXNwYXRjaEV2ZW50KFBhc3NSZWZQdHI8RXZlbnQ+LCBFeGNlcHRpb25Db2RlJik7
Ci0gICAgdm9pZCByZW1vdmVBbGxFdmVudExpc3RlbmVycygpIHsgaWYgKGhhc1JhcmVEYXRhKCkp
IHJlbW92ZUFsbEV2ZW50TGlzdGVuZXJzU2xvd0Nhc2UoKTsgfQorICAgIGJvb2wgZGlzcGF0Y2hF
dmVudChjb25zdCBBdG9taWNTdHJpbmcmIGV2ZW50VHlwZSwgYm9vbCBjYW5CdWJibGUsIGJvb2wg
Y2FuY2VsYWJsZSk7CiAKLSAgICB2b2lkIHNldElubGluZUV2ZW50TGlzdGVuZXJGb3JUeXBlKGNv
bnN0IEF0b21pY1N0cmluZyYgZXZlbnRUeXBlLCBQYXNzUmVmUHRyPEV2ZW50TGlzdGVuZXI+KTsK
LSAgICB2b2lkIHNldElubGluZUV2ZW50TGlzdGVuZXJGb3JUeXBlQW5kQXR0cmlidXRlKGNvbnN0
IEF0b21pY1N0cmluZyYgZXZlbnRUeXBlLCBBdHRyaWJ1dGUqKTsKLSAgICB2b2lkIHJlbW92ZUlu
bGluZUV2ZW50TGlzdGVuZXJGb3JUeXBlKGNvbnN0IEF0b21pY1N0cmluZyYgZXZlbnRUeXBlKTsK
LSAgICBib29sIGRpc3BhdGNoRXZlbnRGb3JUeXBlKGNvbnN0IEF0b21pY1N0cmluZyYgZXZlbnRU
eXBlLCBib29sIGNhbkJ1YmJsZSwgYm9vbCBjYW5jZWxhYmxlKTsKLSAgICBFdmVudExpc3RlbmVy
KiBpbmxpbmVFdmVudExpc3RlbmVyRm9yVHlwZShjb25zdCBBdG9taWNTdHJpbmcmIGV2ZW50VHlw
ZSkgY29uc3Q7CisgICAgdm9pZCByZW1vdmVBbGxFdmVudExpc3RlbmVycygpIHsgaWYgKGhhc1Jh
cmVEYXRhKCkpIHJlbW92ZUFsbEV2ZW50TGlzdGVuZXJzU2xvd0Nhc2UoKTsgfQogCiAgICAgdm9p
ZCBkaXNwYXRjaFN1YnRyZWVNb2RpZmllZEV2ZW50KCk7CiAgICAgdm9pZCBkaXNwYXRjaFdpbmRv
d0V2ZW50KFBhc3NSZWZQdHI8RXZlbnQ+KTsKSW5kZXg6IGVkaXRpbmcvUmVwbGFjZVNlbGVjdGlv
bkNvbW1hbmQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIGVkaXRpbmcvUmVwbGFjZVNlbGVjdGlvbkNvbW1h
bmQuY3BwCShyZXZpc2lvbiA0MjYwMikKKysrIGVkaXRpbmcvUmVwbGFjZVNlbGVjdGlvbkNvbW1h
bmQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMjQsNyArMTI0LDcgQEAgUmVwbGFjZW1lbnRGcmFn
bWVudDo6UmVwbGFjZW1lbnRGcmFnbWVudAogICAgIAogICAgIE5vZGUqIHNoYWRvd0FuY2VzdG9y
Tm9kZSA9IGVkaXRhYmxlUm9vdC0+c2hhZG93QW5jZXN0b3JOb2RlKCk7CiAgICAgCi0gICAgaWYg
KCFlZGl0YWJsZVJvb3QtPmlubGluZUV2ZW50TGlzdGVuZXJGb3JUeXBlKGV2ZW50TmFtZXMoKS53
ZWJraXRCZWZvcmVUZXh0SW5zZXJ0ZWRFdmVudCkgJiYKKyAgICBpZiAoIWVkaXRhYmxlUm9vdC0+
Z2V0SW5saW5lRXZlbnRMaXN0ZW5lcihldmVudE5hbWVzKCkud2Via2l0QmVmb3JlVGV4dEluc2Vy
dGVkRXZlbnQpICYmCiAgICAgICAgIC8vIEZJWE1FOiBSZW1vdmUgdGhlc2UgY2hlY2tzIG9uY2Ug
dGV4dGFyZWFzIGFuZCB0ZXh0ZmllbGRzIGFjdHVhbGx5IHJlZ2lzdGVyIGFuIGV2ZW50IGhhbmRs
ZXIuCiAgICAgICAgICEoc2hhZG93QW5jZXN0b3JOb2RlICYmIHNoYWRvd0FuY2VzdG9yTm9kZS0+
cmVuZGVyZXIoKSAmJiBzaGFkb3dBbmNlc3Rvck5vZGUtPnJlbmRlcmVyKCktPmlzVGV4dENvbnRy
b2woKSkgJiYKICAgICAgICAgZWRpdGFibGVSb290LT5pc0NvbnRlbnRSaWNobHlFZGl0YWJsZSgp
KSB7CkluZGV4OiBodG1sL0hUTUxCb2R5RWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gaHRtbC9I
VE1MQm9keUVsZW1lbnQuY3BwCShyZXZpc2lvbiA0MjYwMikKKysrIGh0bWwvSFRNTEJvZHlFbGVt
ZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzYsNiArMzYsNyBAQAogI2luY2x1ZGUgIkZyYW1l
Vmlldy5oIgogI2luY2x1ZGUgIkhUTUxGcmFtZUVsZW1lbnRCYXNlLmgiCiAjaW5jbHVkZSAiSFRN
TE5hbWVzLmgiCisjaW5jbHVkZSAiSlNMYXp5RXZlbnRMaXN0ZW5lci5oIgogCiBuYW1lc3BhY2Ug
V2ViQ29yZSB7CiAKQEAgLTEzMiwyNCArMTMzLDI0IEBAIHZvaWQgSFRNTEJvZHlFbGVtZW50Ojpw
YXJzZU1hcHBlZEF0dHJpYnUKICAgICAgICAgaWYgKGF0dGFjaGVkKCkpCiAgICAgICAgICAgICBk
b2N1bWVudCgpLT5yZWNhbGNTdHlsZShGb3JjZSk7CiAgICAgfSBlbHNlIGlmIChhdHRyLT5uYW1l
KCkgPT0gb25sb2FkQXR0cikKLSAgICAgICAgZG9jdW1lbnQoKS0+c2V0V2luZG93SW5saW5lRXZl
bnRMaXN0ZW5lckZvclR5cGVBbmRBdHRyaWJ1dGUoZXZlbnROYW1lcygpLmxvYWRFdmVudCwgYXR0
cik7CisgICAgICAgIHNldFdpbmRvd0lubGluZUV2ZW50TGlzdGVuZXIoZXZlbnROYW1lcygpLmxv
YWRFdmVudCwgY3JlYXRlSW5saW5lRXZlbnRMaXN0ZW5lcihkb2N1bWVudCgpLT5mcmFtZSgpLCBh
dHRyKSk7CiAgICAgZWxzZSBpZiAoYXR0ci0+bmFtZSgpID09IG9uYmVmb3JldW5sb2FkQXR0cikK
LSAgICAgICAgZG9jdW1lbnQoKS0+c2V0V2luZG93SW5saW5lRXZlbnRMaXN0ZW5lckZvclR5cGVB
bmRBdHRyaWJ1dGUoZXZlbnROYW1lcygpLmJlZm9yZXVubG9hZEV2ZW50LCBhdHRyKTsKKyAgICAg
ICAgc2V0V2luZG93SW5saW5lRXZlbnRMaXN0ZW5lcihldmVudE5hbWVzKCkuYmVmb3JldW5sb2Fk
RXZlbnQsIGNyZWF0ZUlubGluZUV2ZW50TGlzdGVuZXIoZG9jdW1lbnQoKS0+ZnJhbWUoKSwgYXR0
cikpOwogICAgIGVsc2UgaWYgKGF0dHItPm5hbWUoKSA9PSBvbnVubG9hZEF0dHIpCi0gICAgICAg
IGRvY3VtZW50KCktPnNldFdpbmRvd0lubGluZUV2ZW50TGlzdGVuZXJGb3JUeXBlQW5kQXR0cmli
dXRlKGV2ZW50TmFtZXMoKS51bmxvYWRFdmVudCwgYXR0cik7CisgICAgICAgIHNldFdpbmRvd0lu
bGluZUV2ZW50TGlzdGVuZXIoZXZlbnROYW1lcygpLnVubG9hZEV2ZW50LCBjcmVhdGVJbmxpbmVF
dmVudExpc3RlbmVyKGRvY3VtZW50KCktPmZyYW1lKCksIGF0dHIpKTsKICAgICBlbHNlIGlmIChh
dHRyLT5uYW1lKCkgPT0gb25ibHVyQXR0cikKLSAgICAgICAgZG9jdW1lbnQoKS0+c2V0V2luZG93
SW5saW5lRXZlbnRMaXN0ZW5lckZvclR5cGVBbmRBdHRyaWJ1dGUoZXZlbnROYW1lcygpLmJsdXJF
dmVudCwgYXR0cik7CisgICAgICAgIHNldFdpbmRvd0lubGluZUV2ZW50TGlzdGVuZXIoZXZlbnRO
YW1lcygpLmJsdXJFdmVudCwgY3JlYXRlSW5saW5lRXZlbnRMaXN0ZW5lcihkb2N1bWVudCgpLT5m
cmFtZSgpLCBhdHRyKSk7CiAgICAgZWxzZSBpZiAoYXR0ci0+bmFtZSgpID09IG9uZm9jdXNBdHRy
KQotICAgICAgICBkb2N1bWVudCgpLT5zZXRXaW5kb3dJbmxpbmVFdmVudExpc3RlbmVyRm9yVHlw
ZUFuZEF0dHJpYnV0ZShldmVudE5hbWVzKCkuZm9jdXNFdmVudCwgYXR0cik7CisgICAgICAgIHNl
dFdpbmRvd0lubGluZUV2ZW50TGlzdGVuZXIoZXZlbnROYW1lcygpLmZvY3VzRXZlbnQsIGNyZWF0
ZUlubGluZUV2ZW50TGlzdGVuZXIoZG9jdW1lbnQoKS0+ZnJhbWUoKSwgYXR0cikpOwogICAgIGVs
c2UgaWYgKGF0dHItPm5hbWUoKSA9PSBvbnJlc2l6ZUF0dHIpCi0gICAgICAgIGRvY3VtZW50KCkt
PnNldFdpbmRvd0lubGluZUV2ZW50TGlzdGVuZXJGb3JUeXBlQW5kQXR0cmlidXRlKGV2ZW50TmFt
ZXMoKS5yZXNpemVFdmVudCwgYXR0cik7CisgICAgICAgIHNldFdpbmRvd0lubGluZUV2ZW50TGlz
dGVuZXIoZXZlbnROYW1lcygpLnJlc2l6ZUV2ZW50LCBjcmVhdGVJbmxpbmVFdmVudExpc3RlbmVy
KGRvY3VtZW50KCktPmZyYW1lKCksIGF0dHIpKTsKICAgICBlbHNlIGlmIChhdHRyLT5uYW1lKCkg
PT0gb25zY3JvbGxBdHRyKQotICAgICAgICBkb2N1bWVudCgpLT5zZXRXaW5kb3dJbmxpbmVFdmVu
dExpc3RlbmVyRm9yVHlwZUFuZEF0dHJpYnV0ZShldmVudE5hbWVzKCkuc2Nyb2xsRXZlbnQsIGF0
dHIpOworICAgICAgICBzZXRXaW5kb3dJbmxpbmVFdmVudExpc3RlbmVyKGV2ZW50TmFtZXMoKS5z
Y3JvbGxFdmVudCwgY3JlYXRlSW5saW5lRXZlbnRMaXN0ZW5lcihkb2N1bWVudCgpLT5mcmFtZSgp
LCBhdHRyKSk7CiAgICAgZWxzZSBpZiAoYXR0ci0+bmFtZSgpID09IG9uc3RvcmFnZUF0dHIpIHsK
ICAgICAgICAgLy8gVGhlIEhUTUw1IHNwZWMgY3VycmVudGx5IHNwZWNpZmllcyB0aGF0IHN0b3Jh
Z2UgZXZlbnRzIGFyZSBmaXJlZCBvbmx5IGF0IHRoZSBib2R5IGVsZW1lbnQgb2YKICAgICAgICAg
Ly8gYW4gSFRNTERvY3VtZW50LCB3aGljaCBpcyB3aHkgdGhlIG9uc3RvcmFnZSBhdHRyaWJ1dGUg
ZGlmZmVycyBmcm9tIHRoZSBvbmVzIGJlZm9yZSBpdC4KICAgICAgICAgLy8gVGhlIHNwZWMgbWln
aHQgY2hhbmdlIG9uIHRoaXMsIGFuZCB0aGVuIHNvIHNob3VsZCB3ZSEKLSAgICAgICAgc2V0SW5s
aW5lRXZlbnRMaXN0ZW5lckZvclR5cGVBbmRBdHRyaWJ1dGUoZXZlbnROYW1lcygpLnN0b3JhZ2VF
dmVudCwgYXR0cik7CisgICAgICAgIHNldElubGluZUV2ZW50TGlzdGVuZXIoZXZlbnROYW1lcygp
LnN0b3JhZ2VFdmVudCwgY3JlYXRlSW5saW5lRXZlbnRMaXN0ZW5lcihkb2N1bWVudCgpLT5mcmFt
ZSgpLCBhdHRyKSk7CiAgICAgfSBlbHNlCiAgICAgICAgIEhUTUxFbGVtZW50OjpwYXJzZU1hcHBl
ZEF0dHJpYnV0ZShhdHRyKTsKIH0KSW5kZXg6IGh0bWwvSFRNTEJ1dHRvbkVsZW1lbnQuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIGh0bWwvSFRNTEJ1dHRvbkVsZW1lbnQuY3BwCShyZXZpc2lvbiA0MjYwMikK
KysrIGh0bWwvSFRNTEJ1dHRvbkVsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMCw2ICsz
MCw3IEBACiAjaW5jbHVkZSAiRm9ybURhdGFMaXN0LmgiCiAjaW5jbHVkZSAiSFRNTEZvcm1FbGVt
ZW50LmgiCiAjaW5jbHVkZSAiSFRNTE5hbWVzLmgiCisjaW5jbHVkZSAiSlNMYXp5RXZlbnRMaXN0
ZW5lci5oIgogI2luY2x1ZGUgIktleWJvYXJkRXZlbnQuaCIKICNpbmNsdWRlICJSZW5kZXJCdXR0
b24uaCIKICNpbmNsdWRlIDx3dGYvU3RkTGliRXh0cmFzLmg+CkBAIC04OSw5ICs5MCw5IEBAIHZv
aWQgSFRNTEJ1dHRvbkVsZW1lbnQ6OnBhcnNlTWFwcGVkQXR0cmkKICAgICAgICAgLy8gRG9uJ3Qg
bWFwICdhbGlnbicgYXR0cmlidXRlLiAgVGhpcyBtYXRjaGVzIHdoYXQgRmlyZWZveCBhbmQgSUUg
ZG8sIGJ1dCBub3QgT3BlcmEuCiAgICAgICAgIC8vIFNlZSBodHRwOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD0xMjA3MQogICAgIH0gZWxzZSBpZiAoYXR0ci0+bmFtZSgpID09IG9u
Zm9jdXNBdHRyKSB7Ci0gICAgICAgIHNldElubGluZUV2ZW50TGlzdGVuZXJGb3JUeXBlQW5kQXR0
cmlidXRlKGV2ZW50TmFtZXMoKS5mb2N1c0V2ZW50LCBhdHRyKTsKKyAgICAgICAgc2V0SW5saW5l
RXZlbnRMaXN0ZW5lcihldmVudE5hbWVzKCkuZm9jdXNFdmVudCwgY3JlYXRlSW5saW5lRXZlbnRM
aXN0ZW5lcih0aGlzLCBhdHRyKSk7CiAgICAgfSBlbHNlIGlmIChhdHRyLT5uYW1lKCkgPT0gb25i
bHVyQXR0cikgewotICAgICAgICBzZXRJbmxpbmVFdmVudExpc3RlbmVyRm9yVHlwZUFuZEF0dHJp
YnV0ZShldmVudE5hbWVzKCkuYmx1ckV2ZW50LCBhdHRyKTsKKyAgICAgICAgc2V0SW5saW5lRXZl
bnRMaXN0ZW5lcihldmVudE5hbWVzKCkuYmx1ckV2ZW50LCBjcmVhdGVJbmxpbmVFdmVudExpc3Rl
bmVyKHRoaXMsIGF0dHIpKTsKICAgICB9IGVsc2UKICAgICAgICAgSFRNTEZvcm1Db250cm9sRWxl
bWVudDo6cGFyc2VNYXBwZWRBdHRyaWJ1dGUoYXR0cik7CiB9CkluZGV4OiBodG1sL0hUTUxFbGVt
ZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBodG1sL0hUTUxFbGVtZW50LmNwcAkocmV2aXNpb24gNDI2
MDIpCisrKyBodG1sL0hUTUxFbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzYsNyArMzYs
OCBAQAogI2luY2x1ZGUgIkhUTUxFbGVtZW50RmFjdG9yeS5oIgogI2luY2x1ZGUgIkhUTUxGb3Jt
RWxlbWVudC5oIgogI2luY2x1ZGUgIkhUTUxOYW1lcy5oIgotI2luY2x1ZGUgIkhUTUxUb2tlbml6
ZXIuaCIgLy8gcGFyc2VIVE1MRG9jdW1lbnRGcmFnbWVudAorI2luY2x1ZGUgIkhUTUxUb2tlbml6
ZXIuaCIKKyNpbmNsdWRlICJKU0xhenlFdmVudExpc3RlbmVyLmgiCiAjaW5jbHVkZSAiUmVuZGVy
V29yZEJyZWFrLmgiCiAjaW5jbHVkZSAiU2V0dGluZ3MuaCIKICNpbmNsdWRlICJUZXh0LmgiCkBA
IC0xNDEsNzUgKzE0Miw3NSBAQCB2b2lkIEhUTUxFbGVtZW50OjpwYXJzZU1hcHBlZEF0dHJpYnV0
ZShNCiAgICAgfQogLy8gc3RhbmRhcmQgZXZlbnRzCiAgICAgZWxzZSBpZiAoYXR0ci0+bmFtZSgp
ID09IG9uY2xpY2tBdHRyKSB7Ci0gICAgICAgIHNldElubGluZUV2ZW50TGlzdGVuZXJGb3JUeXBl
QW5kQXR0cmlidXRlKGV2ZW50TmFtZXMoKS5jbGlja0V2ZW50LCBhdHRyKTsKKyAgICAgICAgc2V0
SW5saW5lRXZlbnRMaXN0ZW5lcihldmVudE5hbWVzKCkuY2xpY2tFdmVudCwgY3JlYXRlSW5saW5l
RXZlbnRMaXN0ZW5lcih0aGlzLCBhdHRyKSk7CiAgICAgfSBlbHNlIGlmIChhdHRyLT5uYW1lKCkg
PT0gb25jb250ZXh0bWVudUF0dHIpIHsKLSAgICAgICAgc2V0SW5saW5lRXZlbnRMaXN0ZW5lckZv
clR5cGVBbmRBdHRyaWJ1dGUoZXZlbnROYW1lcygpLmNvbnRleHRtZW51RXZlbnQsIGF0dHIpOwor
ICAgICAgICBzZXRJbmxpbmVFdmVudExpc3RlbmVyKGV2ZW50TmFtZXMoKS5jb250ZXh0bWVudUV2
ZW50LCBjcmVhdGVJbmxpbmVFdmVudExpc3RlbmVyKHRoaXMsIGF0dHIpKTsKICAgICB9IGVsc2Ug
aWYgKGF0dHItPm5hbWUoKSA9PSBvbmRibGNsaWNrQXR0cikgewotICAgICAgICBzZXRJbmxpbmVF
dmVudExpc3RlbmVyRm9yVHlwZUFuZEF0dHJpYnV0ZShldmVudE5hbWVzKCkuZGJsY2xpY2tFdmVu
dCwgYXR0cik7CisgICAgICAgIHNldElubGluZUV2ZW50TGlzdGVuZXIoZXZlbnROYW1lcygpLmRi
bGNsaWNrRXZlbnQsIGNyZWF0ZUlubGluZUV2ZW50TGlzdGVuZXIodGhpcywgYXR0cikpOwogICAg
IH0gZWxzZSBpZiAoYXR0ci0+bmFtZSgpID09IG9ubW91c2Vkb3duQXR0cikgewotICAgICAgICBz
ZXRJbmxpbmVFdmVudExpc3RlbmVyRm9yVHlwZUFuZEF0dHJpYnV0ZShldmVudE5hbWVzKCkubW91
c2Vkb3duRXZlbnQsIGF0dHIpOworICAgICAgICBzZXRJbmxpbmVFdmVudExpc3RlbmVyKGV2ZW50
TmFtZXMoKS5tb3VzZWRvd25FdmVudCwgY3JlYXRlSW5saW5lRXZlbnRMaXN0ZW5lcih0aGlzLCBh
dHRyKSk7CiAgICAgfSBlbHNlIGlmIChhdHRyLT5uYW1lKCkgPT0gb25tb3VzZW1vdmVBdHRyKSB7
Ci0gICAgICAgIHNldElubGluZUV2ZW50TGlzdGVuZXJGb3JUeXBlQW5kQXR0cmlidXRlKGV2ZW50
TmFtZXMoKS5tb3VzZW1vdmVFdmVudCwgYXR0cik7CisgICAgICAgIHNldElubGluZUV2ZW50TGlz
dGVuZXIoZXZlbnROYW1lcygpLm1vdXNlbW92ZUV2ZW50LCBjcmVhdGVJbmxpbmVFdmVudExpc3Rl
bmVyKHRoaXMsIGF0dHIpKTsKICAgICB9IGVsc2UgaWYgKGF0dHItPm5hbWUoKSA9PSBvbm1vdXNl
b3V0QXR0cikgewotICAgICAgICBzZXRJbmxpbmVFdmVudExpc3RlbmVyRm9yVHlwZUFuZEF0dHJp
YnV0ZShldmVudE5hbWVzKCkubW91c2VvdXRFdmVudCwgYXR0cik7CisgICAgICAgIHNldElubGlu
ZUV2ZW50TGlzdGVuZXIoZXZlbnROYW1lcygpLm1vdXNlb3V0RXZlbnQsIGNyZWF0ZUlubGluZUV2
ZW50TGlzdGVuZXIodGhpcywgYXR0cikpOwogICAgIH0gZWxzZSBpZiAoYXR0ci0+bmFtZSgpID09
IG9ubW91c2VvdmVyQXR0cikgewotICAgICAgICBzZXRJbmxpbmVFdmVudExpc3RlbmVyRm9yVHlw
ZUFuZEF0dHJpYnV0ZShldmVudE5hbWVzKCkubW91c2VvdmVyRXZlbnQsIGF0dHIpOworICAgICAg
ICBzZXRJbmxpbmVFdmVudExpc3RlbmVyKGV2ZW50TmFtZXMoKS5tb3VzZW92ZXJFdmVudCwgY3Jl
YXRlSW5saW5lRXZlbnRMaXN0ZW5lcih0aGlzLCBhdHRyKSk7CiAgICAgfSBlbHNlIGlmIChhdHRy
LT5uYW1lKCkgPT0gb25tb3VzZXVwQXR0cikgewotICAgICAgICBzZXRJbmxpbmVFdmVudExpc3Rl
bmVyRm9yVHlwZUFuZEF0dHJpYnV0ZShldmVudE5hbWVzKCkubW91c2V1cEV2ZW50LCBhdHRyKTsK
KyAgICAgICAgc2V0SW5saW5lRXZlbnRMaXN0ZW5lcihldmVudE5hbWVzKCkubW91c2V1cEV2ZW50
LCBjcmVhdGVJbmxpbmVFdmVudExpc3RlbmVyKHRoaXMsIGF0dHIpKTsKICAgICB9IGVsc2UgaWYg
KGF0dHItPm5hbWUoKSA9PSBvbm1vdXNld2hlZWxBdHRyKSB7Ci0gICAgICAgIHNldElubGluZUV2
ZW50TGlzdGVuZXJGb3JUeXBlQW5kQXR0cmlidXRlKGV2ZW50TmFtZXMoKS5tb3VzZXdoZWVsRXZl
bnQsIGF0dHIpOworICAgICAgICBzZXRJbmxpbmVFdmVudExpc3RlbmVyKGV2ZW50TmFtZXMoKS5t
b3VzZXdoZWVsRXZlbnQsIGNyZWF0ZUlubGluZUV2ZW50TGlzdGVuZXIodGhpcywgYXR0cikpOwog
ICAgIH0gZWxzZSBpZiAoYXR0ci0+bmFtZSgpID09IG9uZm9jdXNBdHRyKSB7Ci0gICAgICAgIHNl
dElubGluZUV2ZW50TGlzdGVuZXJGb3JUeXBlQW5kQXR0cmlidXRlKGV2ZW50TmFtZXMoKS5mb2N1
c0V2ZW50LCBhdHRyKTsKKyAgICAgICAgc2V0SW5saW5lRXZlbnRMaXN0ZW5lcihldmVudE5hbWVz
KCkuZm9jdXNFdmVudCwgY3JlYXRlSW5saW5lRXZlbnRMaXN0ZW5lcih0aGlzLCBhdHRyKSk7CiAg
ICAgfSBlbHNlIGlmIChhdHRyLT5uYW1lKCkgPT0gb25ibHVyQXR0cikgewotICAgICAgICBzZXRJ
bmxpbmVFdmVudExpc3RlbmVyRm9yVHlwZUFuZEF0dHJpYnV0ZShldmVudE5hbWVzKCkuYmx1ckV2
ZW50LCBhdHRyKTsKKyAgICAgICAgc2V0SW5saW5lRXZlbnRMaXN0ZW5lcihldmVudE5hbWVzKCku
Ymx1ckV2ZW50LCBjcmVhdGVJbmxpbmVFdmVudExpc3RlbmVyKHRoaXMsIGF0dHIpKTsKICAgICB9
IGVsc2UgaWYgKGF0dHItPm5hbWUoKSA9PSBvbmtleWRvd25BdHRyKSB7Ci0gICAgICAgIHNldElu
bGluZUV2ZW50TGlzdGVuZXJGb3JUeXBlQW5kQXR0cmlidXRlKGV2ZW50TmFtZXMoKS5rZXlkb3du
RXZlbnQsIGF0dHIpOworICAgICAgICBzZXRJbmxpbmVFdmVudExpc3RlbmVyKGV2ZW50TmFtZXMo
KS5rZXlkb3duRXZlbnQsIGNyZWF0ZUlubGluZUV2ZW50TGlzdGVuZXIodGhpcywgYXR0cikpOwog
ICAgIH0gZWxzZSBpZiAoYXR0ci0+bmFtZSgpID09IG9ua2V5cHJlc3NBdHRyKSB7Ci0gICAgICAg
IHNldElubGluZUV2ZW50TGlzdGVuZXJGb3JUeXBlQW5kQXR0cmlidXRlKGV2ZW50TmFtZXMoKS5r
ZXlwcmVzc0V2ZW50LCBhdHRyKTsKKyAgICAgICAgc2V0SW5saW5lRXZlbnRMaXN0ZW5lcihldmVu
dE5hbWVzKCkua2V5cHJlc3NFdmVudCwgY3JlYXRlSW5saW5lRXZlbnRMaXN0ZW5lcih0aGlzLCBh
dHRyKSk7CiAgICAgfSBlbHNlIGlmIChhdHRyLT5uYW1lKCkgPT0gb25rZXl1cEF0dHIpIHsKLSAg
ICAgICAgc2V0SW5saW5lRXZlbnRMaXN0ZW5lckZvclR5cGVBbmRBdHRyaWJ1dGUoZXZlbnROYW1l
cygpLmtleXVwRXZlbnQsIGF0dHIpOworICAgICAgICBzZXRJbmxpbmVFdmVudExpc3RlbmVyKGV2
ZW50TmFtZXMoKS5rZXl1cEV2ZW50LCBjcmVhdGVJbmxpbmVFdmVudExpc3RlbmVyKHRoaXMsIGF0
dHIpKTsKICAgICB9IGVsc2UgaWYgKGF0dHItPm5hbWUoKSA9PSBvbnNjcm9sbEF0dHIpIHsKLSAg
ICAgICAgc2V0SW5saW5lRXZlbnRMaXN0ZW5lckZvclR5cGVBbmRBdHRyaWJ1dGUoZXZlbnROYW1l
cygpLnNjcm9sbEV2ZW50LCBhdHRyKTsKKyAgICAgICAgc2V0SW5saW5lRXZlbnRMaXN0ZW5lcihl
dmVudE5hbWVzKCkuc2Nyb2xsRXZlbnQsIGNyZWF0ZUlubGluZUV2ZW50TGlzdGVuZXIodGhpcywg
YXR0cikpOwogICAgIH0gZWxzZSBpZiAoYXR0ci0+bmFtZSgpID09IG9uYmVmb3JlY3V0QXR0cikg
ewotICAgICAgICBzZXRJbmxpbmVFdmVudExpc3RlbmVyRm9yVHlwZUFuZEF0dHJpYnV0ZShldmVu
dE5hbWVzKCkuYmVmb3JlY3V0RXZlbnQsIGF0dHIpOworICAgICAgICBzZXRJbmxpbmVFdmVudExp
c3RlbmVyKGV2ZW50TmFtZXMoKS5iZWZvcmVjdXRFdmVudCwgY3JlYXRlSW5saW5lRXZlbnRMaXN0
ZW5lcih0aGlzLCBhdHRyKSk7CiAgICAgfSBlbHNlIGlmIChhdHRyLT5uYW1lKCkgPT0gb25jdXRB
dHRyKSB7Ci0gICAgICAgIHNldElubGluZUV2ZW50TGlzdGVuZXJGb3JUeXBlQW5kQXR0cmlidXRl
KGV2ZW50TmFtZXMoKS5jdXRFdmVudCwgYXR0cik7CisgICAgICAgIHNldElubGluZUV2ZW50TGlz
dGVuZXIoZXZlbnROYW1lcygpLmN1dEV2ZW50LCBjcmVhdGVJbmxpbmVFdmVudExpc3RlbmVyKHRo
aXMsIGF0dHIpKTsKICAgICB9IGVsc2UgaWYgKGF0dHItPm5hbWUoKSA9PSBvbmJlZm9yZWNvcHlB
dHRyKSB7Ci0gICAgICAgIHNldElubGluZUV2ZW50TGlzdGVuZXJGb3JUeXBlQW5kQXR0cmlidXRl
KGV2ZW50TmFtZXMoKS5iZWZvcmVjb3B5RXZlbnQsIGF0dHIpOworICAgICAgICBzZXRJbmxpbmVF
dmVudExpc3RlbmVyKGV2ZW50TmFtZXMoKS5iZWZvcmVjb3B5RXZlbnQsIGNyZWF0ZUlubGluZUV2
ZW50TGlzdGVuZXIodGhpcywgYXR0cikpOwogICAgIH0gZWxzZSBpZiAoYXR0ci0+bmFtZSgpID09
IG9uY29weUF0dHIpIHsKLSAgICAgICAgc2V0SW5saW5lRXZlbnRMaXN0ZW5lckZvclR5cGVBbmRB
dHRyaWJ1dGUoZXZlbnROYW1lcygpLmNvcHlFdmVudCwgYXR0cik7CisgICAgICAgIHNldElubGlu
ZUV2ZW50TGlzdGVuZXIoZXZlbnROYW1lcygpLmNvcHlFdmVudCwgY3JlYXRlSW5saW5lRXZlbnRM
aXN0ZW5lcih0aGlzLCBhdHRyKSk7CiAgICAgfSBlbHNlIGlmIChhdHRyLT5uYW1lKCkgPT0gb25i
ZWZvcmVwYXN0ZUF0dHIpIHsKLSAgICAgICAgc2V0SW5saW5lRXZlbnRMaXN0ZW5lckZvclR5cGVB
bmRBdHRyaWJ1dGUoZXZlbnROYW1lcygpLmJlZm9yZXBhc3RlRXZlbnQsIGF0dHIpOworICAgICAg
ICBzZXRJbmxpbmVFdmVudExpc3RlbmVyKGV2ZW50TmFtZXMoKS5iZWZvcmVwYXN0ZUV2ZW50LCBj
cmVhdGVJbmxpbmVFdmVudExpc3RlbmVyKHRoaXMsIGF0dHIpKTsKICAgICB9IGVsc2UgaWYgKGF0
dHItPm5hbWUoKSA9PSBvbnBhc3RlQXR0cikgewotICAgICAgICBzZXRJbmxpbmVFdmVudExpc3Rl
bmVyRm9yVHlwZUFuZEF0dHJpYnV0ZShldmVudE5hbWVzKCkucGFzdGVFdmVudCwgYXR0cik7Cisg
ICAgICAgIHNldElubGluZUV2ZW50TGlzdGVuZXIoZXZlbnROYW1lcygpLnBhc3RlRXZlbnQsIGNy
ZWF0ZUlubGluZUV2ZW50TGlzdGVuZXIodGhpcywgYXR0cikpOwogICAgIH0gZWxzZSBpZiAoYXR0
ci0+bmFtZSgpID09IG9uZHJhZ2VudGVyQXR0cikgewotICAgICAgICBzZXRJbmxpbmVFdmVudExp
c3RlbmVyRm9yVHlwZUFuZEF0dHJpYnV0ZShldmVudE5hbWVzKCkuZHJhZ2VudGVyRXZlbnQsIGF0
dHIpOworICAgICAgICBzZXRJbmxpbmVFdmVudExpc3RlbmVyKGV2ZW50TmFtZXMoKS5kcmFnZW50
ZXJFdmVudCwgY3JlYXRlSW5saW5lRXZlbnRMaXN0ZW5lcih0aGlzLCBhdHRyKSk7CiAgICAgfSBl
bHNlIGlmIChhdHRyLT5uYW1lKCkgPT0gb25kcmFnb3ZlckF0dHIpIHsKLSAgICAgICAgc2V0SW5s
aW5lRXZlbnRMaXN0ZW5lckZvclR5cGVBbmRBdHRyaWJ1dGUoZXZlbnROYW1lcygpLmRyYWdvdmVy
RXZlbnQsIGF0dHIpOworICAgICAgICBzZXRJbmxpbmVFdmVudExpc3RlbmVyKGV2ZW50TmFtZXMo
KS5kcmFnb3ZlckV2ZW50LCBjcmVhdGVJbmxpbmVFdmVudExpc3RlbmVyKHRoaXMsIGF0dHIpKTsK
ICAgICB9IGVsc2UgaWYgKGF0dHItPm5hbWUoKSA9PSBvbmRyYWdsZWF2ZUF0dHIpIHsKLSAgICAg
ICAgc2V0SW5saW5lRXZlbnRMaXN0ZW5lckZvclR5cGVBbmRBdHRyaWJ1dGUoZXZlbnROYW1lcygp
LmRyYWdsZWF2ZUV2ZW50LCBhdHRyKTsKKyAgICAgICAgc2V0SW5saW5lRXZlbnRMaXN0ZW5lcihl
dmVudE5hbWVzKCkuZHJhZ2xlYXZlRXZlbnQsIGNyZWF0ZUlubGluZUV2ZW50TGlzdGVuZXIodGhp
cywgYXR0cikpOwogICAgIH0gZWxzZSBpZiAoYXR0ci0+bmFtZSgpID09IG9uZHJvcEF0dHIpIHsK
LSAgICAgICAgc2V0SW5saW5lRXZlbnRMaXN0ZW5lckZvclR5cGVBbmRBdHRyaWJ1dGUoZXZlbnRO
YW1lcygpLmRyb3BFdmVudCwgYXR0cik7CisgICAgICAgIHNldElubGluZUV2ZW50TGlzdGVuZXIo
ZXZlbnROYW1lcygpLmRyb3BFdmVudCwgY3JlYXRlSW5saW5lRXZlbnRMaXN0ZW5lcih0aGlzLCBh
dHRyKSk7CiAgICAgfSBlbHNlIGlmIChhdHRyLT5uYW1lKCkgPT0gb25kcmFnc3RhcnRBdHRyKSB7
Ci0gICAgICAgIHNldElubGluZUV2ZW50TGlzdGVuZXJGb3JUeXBlQW5kQXR0cmlidXRlKGV2ZW50
TmFtZXMoKS5kcmFnc3RhcnRFdmVudCwgYXR0cik7CisgICAgICAgIHNldElubGluZUV2ZW50TGlz
dGVuZXIoZXZlbnROYW1lcygpLmRyYWdzdGFydEV2ZW50LCBjcmVhdGVJbmxpbmVFdmVudExpc3Rl
bmVyKHRoaXMsIGF0dHIpKTsKICAgICB9IGVsc2UgaWYgKGF0dHItPm5hbWUoKSA9PSBvbmRyYWdB
dHRyKSB7Ci0gICAgICAgIHNldElubGluZUV2ZW50TGlzdGVuZXJGb3JUeXBlQW5kQXR0cmlidXRl
KGV2ZW50TmFtZXMoKS5kcmFnRXZlbnQsIGF0dHIpOworICAgICAgICBzZXRJbmxpbmVFdmVudExp
c3RlbmVyKGV2ZW50TmFtZXMoKS5kcmFnRXZlbnQsIGNyZWF0ZUlubGluZUV2ZW50TGlzdGVuZXIo
dGhpcywgYXR0cikpOwogICAgIH0gZWxzZSBpZiAoYXR0ci0+bmFtZSgpID09IG9uZHJhZ2VuZEF0
dHIpIHsKLSAgICAgICAgc2V0SW5saW5lRXZlbnRMaXN0ZW5lckZvclR5cGVBbmRBdHRyaWJ1dGUo
ZXZlbnROYW1lcygpLmRyYWdlbmRFdmVudCwgYXR0cik7CisgICAgICAgIHNldElubGluZUV2ZW50
TGlzdGVuZXIoZXZlbnROYW1lcygpLmRyYWdlbmRFdmVudCwgY3JlYXRlSW5saW5lRXZlbnRMaXN0
ZW5lcih0aGlzLCBhdHRyKSk7CiAgICAgfSBlbHNlIGlmIChhdHRyLT5uYW1lKCkgPT0gb25zZWxl
Y3RzdGFydEF0dHIpIHsKLSAgICAgICAgc2V0SW5saW5lRXZlbnRMaXN0ZW5lckZvclR5cGVBbmRB
dHRyaWJ1dGUoZXZlbnROYW1lcygpLnNlbGVjdHN0YXJ0RXZlbnQsIGF0dHIpOworICAgICAgICBz
ZXRJbmxpbmVFdmVudExpc3RlbmVyKGV2ZW50TmFtZXMoKS5zZWxlY3RzdGFydEV2ZW50LCBjcmVh
dGVJbmxpbmVFdmVudExpc3RlbmVyKHRoaXMsIGF0dHIpKTsKICAgICB9IGVsc2UgaWYgKGF0dHIt
Pm5hbWUoKSA9PSBvbnN1Ym1pdEF0dHIpIHsKLSAgICAgICAgc2V0SW5saW5lRXZlbnRMaXN0ZW5l
ckZvclR5cGVBbmRBdHRyaWJ1dGUoZXZlbnROYW1lcygpLnN1Ym1pdEV2ZW50LCBhdHRyKTsKKyAg
ICAgICAgc2V0SW5saW5lRXZlbnRMaXN0ZW5lcihldmVudE5hbWVzKCkuc3VibWl0RXZlbnQsIGNy
ZWF0ZUlubGluZUV2ZW50TGlzdGVuZXIodGhpcywgYXR0cikpOwogICAgIH0gZWxzZSBpZiAoYXR0
ci0+bmFtZSgpID09IG9uZXJyb3JBdHRyKSB7Ci0gICAgICAgIHNldElubGluZUV2ZW50TGlzdGVu
ZXJGb3JUeXBlQW5kQXR0cmlidXRlKGV2ZW50TmFtZXMoKS5lcnJvckV2ZW50LCBhdHRyKTsKKyAg
ICAgICAgc2V0SW5saW5lRXZlbnRMaXN0ZW5lcihldmVudE5hbWVzKCkuZXJyb3JFdmVudCwgY3Jl
YXRlSW5saW5lRXZlbnRMaXN0ZW5lcih0aGlzLCBhdHRyKSk7CiAgICAgfSBlbHNlIGlmIChhdHRy
LT5uYW1lKCkgPT0gb253ZWJraXRhbmltYXRpb25zdGFydEF0dHIpIHsKLSAgICAgICAgc2V0SW5s
aW5lRXZlbnRMaXN0ZW5lckZvclR5cGVBbmRBdHRyaWJ1dGUoZXZlbnROYW1lcygpLndlYmtpdEFu
aW1hdGlvblN0YXJ0RXZlbnQsIGF0dHIpOworICAgICAgICBzZXRJbmxpbmVFdmVudExpc3RlbmVy
KGV2ZW50TmFtZXMoKS53ZWJraXRBbmltYXRpb25TdGFydEV2ZW50LCBjcmVhdGVJbmxpbmVFdmVu
dExpc3RlbmVyKHRoaXMsIGF0dHIpKTsKICAgICB9IGVsc2UgaWYgKGF0dHItPm5hbWUoKSA9PSBv
bndlYmtpdGFuaW1hdGlvbml0ZXJhdGlvbkF0dHIpIHsKLSAgICAgICAgc2V0SW5saW5lRXZlbnRM
aXN0ZW5lckZvclR5cGVBbmRBdHRyaWJ1dGUoZXZlbnROYW1lcygpLndlYmtpdEFuaW1hdGlvbkl0
ZXJhdGlvbkV2ZW50LCBhdHRyKTsKKyAgICAgICAgc2V0SW5saW5lRXZlbnRMaXN0ZW5lcihldmVu
dE5hbWVzKCkud2Via2l0QW5pbWF0aW9uSXRlcmF0aW9uRXZlbnQsIGNyZWF0ZUlubGluZUV2ZW50
TGlzdGVuZXIodGhpcywgYXR0cikpOwogICAgIH0gZWxzZSBpZiAoYXR0ci0+bmFtZSgpID09IG9u
d2Via2l0YW5pbWF0aW9uZW5kQXR0cikgewotICAgICAgICBzZXRJbmxpbmVFdmVudExpc3RlbmVy
Rm9yVHlwZUFuZEF0dHJpYnV0ZShldmVudE5hbWVzKCkud2Via2l0QW5pbWF0aW9uRW5kRXZlbnQs
IGF0dHIpOworICAgICAgICBzZXRJbmxpbmVFdmVudExpc3RlbmVyKGV2ZW50TmFtZXMoKS53ZWJr
aXRBbmltYXRpb25FbmRFdmVudCwgY3JlYXRlSW5saW5lRXZlbnRMaXN0ZW5lcih0aGlzLCBhdHRy
KSk7CiAgICAgfSBlbHNlIGlmIChhdHRyLT5uYW1lKCkgPT0gb253ZWJraXR0cmFuc2l0aW9uZW5k
QXR0cikgewotICAgICAgICBzZXRJbmxpbmVFdmVudExpc3RlbmVyRm9yVHlwZUFuZEF0dHJpYnV0
ZShldmVudE5hbWVzKCkud2Via2l0VHJhbnNpdGlvbkVuZEV2ZW50LCBhdHRyKTsKKyAgICAgICAg
c2V0SW5saW5lRXZlbnRMaXN0ZW5lcihldmVudE5hbWVzKCkud2Via2l0VHJhbnNpdGlvbkVuZEV2
ZW50LCBjcmVhdGVJbmxpbmVFdmVudExpc3RlbmVyKHRoaXMsIGF0dHIpKTsKICAgICB9CiB9CiAK
SW5kZXg6IGh0bWwvSFRNTEZvcm1Db250cm9sRWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gaHRt
bC9IVE1MRm9ybUNvbnRyb2xFbGVtZW50LmNwcAkocmV2aXNpb24gNDI2MDIpCisrKyBodG1sL0hU
TUxGb3JtQ29udHJvbEVsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNjQsNyArMTY0LDcg
QEAgdm9pZCBIVE1MRm9ybUNvbnRyb2xFbGVtZW50OjpzZXROYW1lKGNvbgogCiB2b2lkIEhUTUxG
b3JtQ29udHJvbEVsZW1lbnQ6Om9uQ2hhbmdlKCkKIHsKLSAgICBkaXNwYXRjaEV2ZW50Rm9yVHlw
ZShldmVudE5hbWVzKCkuY2hhbmdlRXZlbnQsIHRydWUsIGZhbHNlKTsKKyAgICBkaXNwYXRjaEV2
ZW50KGV2ZW50TmFtZXMoKS5jaGFuZ2VFdmVudCwgdHJ1ZSwgZmFsc2UpOwogfQogCiBib29sIEhU
TUxGb3JtQ29udHJvbEVsZW1lbnQ6OmRpc2FibGVkKCkgY29uc3QKSW5kZXg6IGh0bWwvSFRNTEZv
cm1FbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBodG1sL0hUTUxGb3JtRWxlbWVudC5jcHAJKHJl
dmlzaW9uIDQyNjAyKQorKysgaHRtbC9IVE1MRm9ybUVsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC00Miw2ICs0Miw3IEBACiAjaW5jbHVkZSAiSFRNTEltYWdlRWxlbWVudC5oIgogI2luY2x1
ZGUgIkhUTUxJbnB1dEVsZW1lbnQuaCIKICNpbmNsdWRlICJIVE1MTmFtZXMuaCIKKyNpbmNsdWRl
ICJKU0xhenlFdmVudExpc3RlbmVyLmgiCiAjaW5jbHVkZSAiTUlNRVR5cGVSZWdpc3RyeS5oIgog
I2luY2x1ZGUgIlBhZ2UuaCIKICNpbmNsdWRlICJSZW5kZXJUZXh0Q29udHJvbC5oIgpAQCAtMjk3
LDcgKzI5OCw3IEBAIGJvb2wgSFRNTEZvcm1FbGVtZW50OjpwcmVwYXJlU3VibWl0KEV2ZW4KICAg
ICBtX2luc3VibWl0ID0gdHJ1ZTsKICAgICBtX2RvaW5nc3VibWl0ID0gZmFsc2U7CiAKLSAgICBp
ZiAoZGlzcGF0Y2hFdmVudEZvclR5cGUoZXZlbnROYW1lcygpLnN1Ym1pdEV2ZW50LCB0cnVlLCB0
cnVlKSAmJiAhbV9kb2luZ3N1Ym1pdCkKKyAgICBpZiAoZGlzcGF0Y2hFdmVudChldmVudE5hbWVz
KCkuc3VibWl0RXZlbnQsIHRydWUsIHRydWUpICYmICFtX2RvaW5nc3VibWl0KQogICAgICAgICBt
X2RvaW5nc3VibWl0ID0gdHJ1ZTsKIAogICAgIG1faW5zdWJtaXQgPSBmYWxzZTsKQEAgLTQxNyw3
ICs0MTgsNyBAQCB2b2lkIEhUTUxGb3JtRWxlbWVudDo6cmVzZXQoKQogCiAgICAgLy8gIyMjIERP
TTIgbGFiZWxzIHRoaXMgZXZlbnQgYXMgbm90IGNhbmNlbGFibGUsIGhvd2V2ZXIKICAgICAvLyBj
b21tb24gYnJvd3NlcnMoIHNpY2shICkgYWxsb3cgaXQgYmUgY2FuY2VsbGVkLgotICAgIGlmICgg
IWRpc3BhdGNoRXZlbnRGb3JUeXBlKGV2ZW50TmFtZXMoKS5yZXNldEV2ZW50LHRydWUsIHRydWUp
ICkgeworICAgIGlmICggIWRpc3BhdGNoRXZlbnQoZXZlbnROYW1lcygpLnJlc2V0RXZlbnQsdHJ1
ZSwgdHJ1ZSkgKSB7CiAgICAgICAgIG1faW5yZXNldCA9IGZhbHNlOwogICAgICAgICByZXR1cm47
CiAgICAgfQpAQCAtNDUxLDkgKzQ1Miw5IEBAIHZvaWQgSFRNTEZvcm1FbGVtZW50OjpwYXJzZU1h
cHBlZEF0dHJpYnUKICAgICAgICAgZWxzZQogICAgICAgICAgICAgZG9jdW1lbnQoKS0+dW5yZWdp
c3RlckZvckRvY3VtZW50QWN0aXZhdGlvbkNhbGxiYWNrcyh0aGlzKTsKICAgICB9IGVsc2UgaWYg
KGF0dHItPm5hbWUoKSA9PSBvbnN1Ym1pdEF0dHIpCi0gICAgICAgIHNldElubGluZUV2ZW50TGlz
dGVuZXJGb3JUeXBlQW5kQXR0cmlidXRlKGV2ZW50TmFtZXMoKS5zdWJtaXRFdmVudCwgYXR0cik7
CisgICAgICAgIHNldElubGluZUV2ZW50TGlzdGVuZXIoZXZlbnROYW1lcygpLnN1Ym1pdEV2ZW50
LCBjcmVhdGVJbmxpbmVFdmVudExpc3RlbmVyKHRoaXMsIGF0dHIpKTsKICAgICBlbHNlIGlmIChh
dHRyLT5uYW1lKCkgPT0gb25yZXNldEF0dHIpCi0gICAgICAgIHNldElubGluZUV2ZW50TGlzdGVu
ZXJGb3JUeXBlQW5kQXR0cmlidXRlKGV2ZW50TmFtZXMoKS5yZXNldEV2ZW50LCBhdHRyKTsKKyAg
ICAgICAgc2V0SW5saW5lRXZlbnRMaXN0ZW5lcihldmVudE5hbWVzKCkucmVzZXRFdmVudCwgY3Jl
YXRlSW5saW5lRXZlbnRMaXN0ZW5lcih0aGlzLCBhdHRyKSk7CiAgICAgZWxzZSBpZiAoYXR0ci0+
bmFtZSgpID09IG5hbWVBdHRyKSB7CiAgICAgICAgIGNvbnN0IEF0b21pY1N0cmluZyYgbmV3TmFt
ZSA9IGF0dHItPnZhbHVlKCk7CiAgICAgICAgIGlmIChpbkRvY3VtZW50KCkgJiYgZG9jdW1lbnQo
KS0+aXNIVE1MRG9jdW1lbnQoKSkgewpJbmRleDogaHRtbC9IVE1MRnJhbWVFbGVtZW50QmFzZS5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gaHRtbC9IVE1MRnJhbWVFbGVtZW50QmFzZS5jcHAJKHJldmlzaW9u
IDQyNjAyKQorKysgaHRtbC9IVE1MRnJhbWVFbGVtZW50QmFzZS5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTM0LDYgKzM0LDcgQEAKICNpbmNsdWRlICJGcmFtZVZpZXcuaCIKICNpbmNsdWRlICJIVE1M
RnJhbWVTZXRFbGVtZW50LmgiCiAjaW5jbHVkZSAiSFRNTE5hbWVzLmgiCisjaW5jbHVkZSAiSlNM
YXp5RXZlbnRMaXN0ZW5lci5oIgogI2luY2x1ZGUgIktVUkwuaCIKICNpbmNsdWRlICJQYWdlLmgi
CiAjaW5jbHVkZSAiUmVuZGVyRnJhbWUuaCIKQEAgLTE0MCwxMCArMTQxLDEwIEBAIHZvaWQgSFRN
TEZyYW1lRWxlbWVudEJhc2U6OnBhcnNlTWFwcGVkQXQKICAgICAgICAgaWYgKGNvbnRlbnRGcmFt
ZSgpKQogICAgICAgICAgICAgY29udGVudEZyYW1lKCktPnNldEluVmlld1NvdXJjZU1vZGUodmll
d1NvdXJjZU1vZGUoKSk7CiAgICAgfSBlbHNlIGlmIChhdHRyLT5uYW1lKCkgPT0gb25sb2FkQXR0
cikgewotICAgICAgICBzZXRJbmxpbmVFdmVudExpc3RlbmVyRm9yVHlwZUFuZEF0dHJpYnV0ZShl
dmVudE5hbWVzKCkubG9hZEV2ZW50LCBhdHRyKTsKKyAgICAgICAgc2V0SW5saW5lRXZlbnRMaXN0
ZW5lcihldmVudE5hbWVzKCkubG9hZEV2ZW50LCBjcmVhdGVJbmxpbmVFdmVudExpc3RlbmVyKHRo
aXMsIGF0dHIpKTsKICAgICB9IGVsc2UgaWYgKGF0dHItPm5hbWUoKSA9PSBvbmJlZm9yZXVubG9h
ZEF0dHIpIHsKICAgICAgICAgLy8gRklYTUU6IHNob3VsZCA8ZnJhbWU+IGVsZW1lbnRzIGhhdmUg
YmVmb3JldW5sb2FkIGhhbmRsZXJzPwotICAgICAgICBzZXRJbmxpbmVFdmVudExpc3RlbmVyRm9y
VHlwZUFuZEF0dHJpYnV0ZShldmVudE5hbWVzKCkuYmVmb3JldW5sb2FkRXZlbnQsIGF0dHIpOwor
ICAgICAgICBzZXRJbmxpbmVFdmVudExpc3RlbmVyKGV2ZW50TmFtZXMoKS5iZWZvcmV1bmxvYWRF
dmVudCwgY3JlYXRlSW5saW5lRXZlbnRMaXN0ZW5lcih0aGlzLCBhdHRyKSk7CiAgICAgfSBlbHNl
CiAgICAgICAgIEhUTUxGcmFtZU93bmVyRWxlbWVudDo6cGFyc2VNYXBwZWRBdHRyaWJ1dGUoYXR0
cik7CiB9CkluZGV4OiBodG1sL0hUTUxGcmFtZVNldEVsZW1lbnQuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IGh0bWwvSFRNTEZyYW1lU2V0RWxlbWVudC5jcHAJKHJldmlzaW9uIDQyNjAyKQorKysgaHRtbC9I
VE1MRnJhbWVTZXRFbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjksNiArMjksNyBAQAog
I2luY2x1ZGUgIkV2ZW50LmgiCiAjaW5jbHVkZSAiRXZlbnROYW1lcy5oIgogI2luY2x1ZGUgIkhU
TUxOYW1lcy5oIgorI2luY2x1ZGUgIkpTTGF6eUV2ZW50TGlzdGVuZXIuaCIKICNpbmNsdWRlICJM
ZW5ndGguaCIKICNpbmNsdWRlICJMZW5ndGguaCIKICNpbmNsdWRlICJNb3VzZUV2ZW50LmgiCkBA
IC0xMjUsMTEgKzEyNiwxMSBAQCB2b2lkIEhUTUxGcmFtZVNldEVsZW1lbnQ6OnBhcnNlTWFwcGVk
QXR0CiAgICAgICAgICAgICBtX2JvcmRlckNvbG9yU2V0ID0gdHJ1ZTsKICAgICAgICAgfQogICAg
IH0gZWxzZSBpZiAoYXR0ci0+bmFtZSgpID09IG9ubG9hZEF0dHIpIHsKLSAgICAgICAgZG9jdW1l
bnQoKS0+c2V0V2luZG93SW5saW5lRXZlbnRMaXN0ZW5lckZvclR5cGVBbmRBdHRyaWJ1dGUoZXZl
bnROYW1lcygpLmxvYWRFdmVudCwgYXR0cik7CisgICAgICAgIHNldFdpbmRvd0lubGluZUV2ZW50
TGlzdGVuZXIoZXZlbnROYW1lcygpLmxvYWRFdmVudCwgY3JlYXRlSW5saW5lRXZlbnRMaXN0ZW5l
cihkb2N1bWVudCgpLT5mcmFtZSgpLCBhdHRyKSk7CiAgICAgfSBlbHNlIGlmIChhdHRyLT5uYW1l
KCkgPT0gb25iZWZvcmV1bmxvYWRBdHRyKSB7Ci0gICAgICAgIGRvY3VtZW50KCktPnNldFdpbmRv
d0lubGluZUV2ZW50TGlzdGVuZXJGb3JUeXBlQW5kQXR0cmlidXRlKGV2ZW50TmFtZXMoKS5iZWZv
cmV1bmxvYWRFdmVudCwgYXR0cik7CisgICAgICAgIHNldFdpbmRvd0lubGluZUV2ZW50TGlzdGVu
ZXIoZXZlbnROYW1lcygpLmJlZm9yZXVubG9hZEV2ZW50LCBjcmVhdGVJbmxpbmVFdmVudExpc3Rl
bmVyKGRvY3VtZW50KCktPmZyYW1lKCksIGF0dHIpKTsKICAgICB9IGVsc2UgaWYgKGF0dHItPm5h
bWUoKSA9PSBvbnVubG9hZEF0dHIpIHsKLSAgICAgICAgZG9jdW1lbnQoKS0+c2V0V2luZG93SW5s
aW5lRXZlbnRMaXN0ZW5lckZvclR5cGVBbmRBdHRyaWJ1dGUoZXZlbnROYW1lcygpLnVubG9hZEV2
ZW50LCBhdHRyKTsKKyAgICAgICAgc2V0V2luZG93SW5saW5lRXZlbnRMaXN0ZW5lcihldmVudE5h
bWVzKCkudW5sb2FkRXZlbnQsIGNyZWF0ZUlubGluZUV2ZW50TGlzdGVuZXIoZG9jdW1lbnQoKS0+
ZnJhbWUoKSwgYXR0cikpOwogICAgIH0gZWxzZQogICAgICAgICBIVE1MRWxlbWVudDo6cGFyc2VN
YXBwZWRBdHRyaWJ1dGUoYXR0cik7CiB9CkluZGV4OiBodG1sL0hUTUxJbWFnZUVsZW1lbnQuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIGh0bWwvSFRNTEltYWdlRWxlbWVudC5jcHAJKHJldmlzaW9uIDQyNjAy
KQorKysgaHRtbC9IVE1MSW1hZ2VFbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzAsNiAr
MzAsNyBAQAogI2luY2x1ZGUgIkhUTUxEb2N1bWVudC5oIgogI2luY2x1ZGUgIkhUTUxGb3JtRWxl
bWVudC5oIgogI2luY2x1ZGUgIkhUTUxOYW1lcy5oIgorI2luY2x1ZGUgIkpTTGF6eUV2ZW50TGlz
dGVuZXIuaCIKICNpbmNsdWRlICJSZW5kZXJJbWFnZS5oIgogCiB1c2luZyBuYW1lc3BhY2Ugc3Rk
OwpAQCAtMTEzLDkgKzExNCw5IEBAIHZvaWQgSFRNTEltYWdlRWxlbWVudDo6cGFyc2VNYXBwZWRB
dHRyaWIKICAgICB9IGVsc2UgaWYgKGF0dHJOYW1lID09IGlzbWFwQXR0cikKICAgICAgICAgaXNt
YXAgPSB0cnVlOwogICAgIGVsc2UgaWYgKGF0dHJOYW1lID09IG9uYWJvcnRBdHRyKQotICAgICAg
ICBzZXRJbmxpbmVFdmVudExpc3RlbmVyRm9yVHlwZUFuZEF0dHJpYnV0ZShldmVudE5hbWVzKCku
YWJvcnRFdmVudCwgYXR0cik7CisgICAgICAgIHNldElubGluZUV2ZW50TGlzdGVuZXIoZXZlbnRO
YW1lcygpLmFib3J0RXZlbnQsIGNyZWF0ZUlubGluZUV2ZW50TGlzdGVuZXIodGhpcywgYXR0cikp
OwogICAgIGVsc2UgaWYgKGF0dHJOYW1lID09IG9ubG9hZEF0dHIpCi0gICAgICAgIHNldElubGlu
ZUV2ZW50TGlzdGVuZXJGb3JUeXBlQW5kQXR0cmlidXRlKGV2ZW50TmFtZXMoKS5sb2FkRXZlbnQs
IGF0dHIpOworICAgICAgICBzZXRJbmxpbmVFdmVudExpc3RlbmVyKGV2ZW50TmFtZXMoKS5sb2Fk
RXZlbnQsIGNyZWF0ZUlubGluZUV2ZW50TGlzdGVuZXIodGhpcywgYXR0cikpOwogICAgIGVsc2Ug
aWYgKGF0dHJOYW1lID09IGNvbXBvc2l0ZUF0dHIpIHsKICAgICAgICAgaWYgKCFwYXJzZUNvbXBv
c2l0ZU9wZXJhdG9yKGF0dHItPnZhbHVlKCksIG1fY29tcG9zaXRlT3BlcmF0b3IpKQogICAgICAg
ICAgICAgbV9jb21wb3NpdGVPcGVyYXRvciA9IENvbXBvc2l0ZVNvdXJjZU92ZXI7CkluZGV4OiBo
dG1sL0hUTUxJbWFnZUxvYWRlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gaHRtbC9IVE1MSW1hZ2VMb2Fk
ZXIuY3BwCShyZXZpc2lvbiA0MjYwMikKKysrIGh0bWwvSFRNTEltYWdlTG9hZGVyLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtNDUsNyArNDUsNyBAQCB2b2lkIEhUTUxJbWFnZUxvYWRlcjo6ZGlzcGF0
Y2hMb2FkRXZlbnQoCiAgICAgYm9vbCBlcnJvck9jY3VycmVkID0gaW1hZ2UoKS0+ZXJyb3JPY2N1
cnJlZCgpOwogICAgIGlmICghZXJyb3JPY2N1cnJlZCAmJiBpbWFnZSgpLT5odHRwU3RhdHVzQ29k
ZUVycm9yT2NjdXJyZWQoKSkKICAgICAgICAgZXJyb3JPY2N1cnJlZCA9IGVsZW1lbnQoKS0+aGFz
VGFnTmFtZShIVE1MTmFtZXM6Om9iamVjdFRhZyk7IC8vIEFuIDxvYmplY3Q+IGNvbnNpZGVycyBh
IDQwNCB0byBiZSBhbiBlcnJvciBhbmQgc2hvdWxkIGZpcmUgb25lcnJvci4KLSAgICBlbGVtZW50
KCktPmRpc3BhdGNoRXZlbnRGb3JUeXBlKGVycm9yT2NjdXJyZWQgPyBldmVudE5hbWVzKCkuZXJy
b3JFdmVudCA6IGV2ZW50TmFtZXMoKS5sb2FkRXZlbnQsIGZhbHNlLCBmYWxzZSk7CisgICAgZWxl
bWVudCgpLT5kaXNwYXRjaEV2ZW50KGVycm9yT2NjdXJyZWQgPyBldmVudE5hbWVzKCkuZXJyb3JF
dmVudCA6IGV2ZW50TmFtZXMoKS5sb2FkRXZlbnQsIGZhbHNlLCBmYWxzZSk7CiB9CiAKIFN0cmlu
ZyBIVE1MSW1hZ2VMb2FkZXI6OnNvdXJjZVVSSShjb25zdCBBdG9taWNTdHJpbmcmIGF0dHIpIGNv
bnN0CkluZGV4OiBodG1sL0hUTUxJbnB1dEVsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIGh0bWwv
SFRNTElucHV0RWxlbWVudC5jcHAJKHJldmlzaW9uIDQyNjAyKQorKysgaHRtbC9IVE1MSW5wdXRF
bGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjYsOCArMjYsOCBAQAogI2luY2x1ZGUgImNv
bmZpZy5oIgogI2luY2x1ZGUgIkhUTUxJbnB1dEVsZW1lbnQuaCIKIAotI2luY2x1ZGUgIkNocm9t
ZUNsaWVudC5oIgogI2luY2x1ZGUgIkNTU1Byb3BlcnR5TmFtZXMuaCIKKyNpbmNsdWRlICJDaHJv
bWVDbGllbnQuaCIKICNpbmNsdWRlICJEb2N1bWVudC5oIgogI2luY2x1ZGUgIkVkaXRvci5oIgog
I2luY2x1ZGUgIkV2ZW50LmgiCkBAIC00MSw2ICs0MSw3IEBACiAjaW5jbHVkZSAiSFRNTEZvcm1F
bGVtZW50LmgiCiAjaW5jbHVkZSAiSFRNTEltYWdlTG9hZGVyLmgiCiAjaW5jbHVkZSAiSFRNTE5h
bWVzLmgiCisjaW5jbHVkZSAiSlNMYXp5RXZlbnRMaXN0ZW5lci5oIgogI2luY2x1ZGUgIktleWJv
YXJkRXZlbnQuaCIKICNpbmNsdWRlICJMb2NhbGl6ZWRTdHJpbmdzLmgiCiAjaW5jbHVkZSAiTW91
c2VFdmVudC5oIgpAQCAtNTg3LDIwICs1ODgsMjAgQEAgdm9pZCBIVE1MSW5wdXRFbGVtZW50Ojpw
YXJzZU1hcHBlZEF0dHJpYgogICAgICAgICBpZiAocmVzcGVjdEhlaWdodEFuZFdpZHRoQXR0cnMo
KSkKICAgICAgICAgICAgIGFkZENTU0xlbmd0aChhdHRyLCBDU1NQcm9wZXJ0eUhlaWdodCwgYXR0
ci0+dmFsdWUoKSk7CiAgICAgfSBlbHNlIGlmIChhdHRyLT5uYW1lKCkgPT0gb25mb2N1c0F0dHIp
IHsKLSAgICAgICAgc2V0SW5saW5lRXZlbnRMaXN0ZW5lckZvclR5cGVBbmRBdHRyaWJ1dGUoZXZl
bnROYW1lcygpLmZvY3VzRXZlbnQsIGF0dHIpOworICAgICAgICBzZXRJbmxpbmVFdmVudExpc3Rl
bmVyKGV2ZW50TmFtZXMoKS5mb2N1c0V2ZW50LCBjcmVhdGVJbmxpbmVFdmVudExpc3RlbmVyKHRo
aXMsIGF0dHIpKTsKICAgICB9IGVsc2UgaWYgKGF0dHItPm5hbWUoKSA9PSBvbmJsdXJBdHRyKSB7
Ci0gICAgICAgIHNldElubGluZUV2ZW50TGlzdGVuZXJGb3JUeXBlQW5kQXR0cmlidXRlKGV2ZW50
TmFtZXMoKS5ibHVyRXZlbnQsIGF0dHIpOworICAgICAgICBzZXRJbmxpbmVFdmVudExpc3RlbmVy
KGV2ZW50TmFtZXMoKS5ibHVyRXZlbnQsIGNyZWF0ZUlubGluZUV2ZW50TGlzdGVuZXIodGhpcywg
YXR0cikpOwogICAgIH0gZWxzZSBpZiAoYXR0ci0+bmFtZSgpID09IG9uc2VsZWN0QXR0cikgewot
ICAgICAgICBzZXRJbmxpbmVFdmVudExpc3RlbmVyRm9yVHlwZUFuZEF0dHJpYnV0ZShldmVudE5h
bWVzKCkuc2VsZWN0RXZlbnQsIGF0dHIpOworICAgICAgICBzZXRJbmxpbmVFdmVudExpc3RlbmVy
KGV2ZW50TmFtZXMoKS5zZWxlY3RFdmVudCwgY3JlYXRlSW5saW5lRXZlbnRMaXN0ZW5lcih0aGlz
LCBhdHRyKSk7CiAgICAgfSBlbHNlIGlmIChhdHRyLT5uYW1lKCkgPT0gb25jaGFuZ2VBdHRyKSB7
Ci0gICAgICAgIHNldElubGluZUV2ZW50TGlzdGVuZXJGb3JUeXBlQW5kQXR0cmlidXRlKGV2ZW50
TmFtZXMoKS5jaGFuZ2VFdmVudCwgYXR0cik7CisgICAgICAgIHNldElubGluZUV2ZW50TGlzdGVu
ZXIoZXZlbnROYW1lcygpLmNoYW5nZUV2ZW50LCBjcmVhdGVJbmxpbmVFdmVudExpc3RlbmVyKHRo
aXMsIGF0dHIpKTsKICAgICB9IGVsc2UgaWYgKGF0dHItPm5hbWUoKSA9PSBvbmlucHV0QXR0cikg
ewotICAgICAgICBzZXRJbmxpbmVFdmVudExpc3RlbmVyRm9yVHlwZUFuZEF0dHJpYnV0ZShldmVu
dE5hbWVzKCkuaW5wdXRFdmVudCwgYXR0cik7CisgICAgICAgIHNldElubGluZUV2ZW50TGlzdGVu
ZXIoZXZlbnROYW1lcygpLmlucHV0RXZlbnQsIGNyZWF0ZUlubGluZUV2ZW50TGlzdGVuZXIodGhp
cywgYXR0cikpOwogICAgIH0KICAgICAvLyBTZWFyY2ggZmllbGQgYW5kIHNsaWRlciBhdHRyaWJ1
dGVzIGFsbCBqdXN0IGNhdXNlIHVwZGF0ZUZyb21FbGVtZW50IHRvIGJlIGNhbGxlZCB0aHJvdWdo
IHN0eWxlCiAgICAgLy8gcmVjYWxjaW5nLgogICAgIGVsc2UgaWYgKGF0dHItPm5hbWUoKSA9PSBv
bnNlYXJjaEF0dHIpIHsKLSAgICAgICAgc2V0SW5saW5lRXZlbnRMaXN0ZW5lckZvclR5cGVBbmRB
dHRyaWJ1dGUoZXZlbnROYW1lcygpLnNlYXJjaEV2ZW50LCBhdHRyKTsKKyAgICAgICAgc2V0SW5s
aW5lRXZlbnRMaXN0ZW5lcihldmVudE5hbWVzKCkuc2VhcmNoRXZlbnQsIGNyZWF0ZUlubGluZUV2
ZW50TGlzdGVuZXIodGhpcywgYXR0cikpOwogICAgIH0gZWxzZSBpZiAoYXR0ci0+bmFtZSgpID09
IHJlc3VsdHNBdHRyKSB7CiAgICAgICAgIGludCBvbGRSZXN1bHRzID0gbV9tYXhSZXN1bHRzOwog
ICAgICAgICBtX21heFJlc3VsdHMgPSAhYXR0ci0+aXNOdWxsKCkgPyBtaW4oYXR0ci0+dmFsdWUo
KS50b0ludCgpLCBtYXhTYXZlZFJlc3VsdHMpIDogLTE7CkBAIC0xNTE2LDcgKzE1MTcsNyBAQCB2
b2lkIEhUTUxJbnB1dEVsZW1lbnQ6Om9uU2VhcmNoKCkKICAgICBBU1NFUlQoaXNTZWFyY2hGaWVs
ZCgpKTsKICAgICBpZiAocmVuZGVyZXIoKSkKICAgICAgICAgc3RhdGljX2Nhc3Q8UmVuZGVyVGV4
dENvbnRyb2xTaW5nbGVMaW5lKj4ocmVuZGVyZXIoKSktPnN0b3BTZWFyY2hFdmVudFRpbWVyKCk7
Ci0gICAgZGlzcGF0Y2hFdmVudEZvclR5cGUoZXZlbnROYW1lcygpLnNlYXJjaEV2ZW50LCB0cnVl
LCBmYWxzZSk7CisgICAgZGlzcGF0Y2hFdmVudChldmVudE5hbWVzKCkuc2VhcmNoRXZlbnQsIHRy
dWUsIGZhbHNlKTsKIH0KIAogVmlzaWJsZVNlbGVjdGlvbiBIVE1MSW5wdXRFbGVtZW50OjpzZWxl
Y3Rpb24oKSBjb25zdApJbmRleDogaHRtbC9IVE1MTWVkaWFFbGVtZW50LmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBodG1sL0hUTUxNZWRpYUVsZW1lbnQuY3BwCShyZXZpc2lvbiA0MjYwMikKKysrIGh0bWwv
SFRNTE1lZGlhRWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQwNSw3ICs0MDUsNyBAQCB2
b2lkIEhUTUxNZWRpYUVsZW1lbnQ6OmxvYWRJbnRlcm5hbCgpCiAgICAgICAgICAgICBtX3BsYXll
ci0+cGF1c2UoKTsKICAgICAgICAgICAgIG1fcGxheWVyLT5zZWVrKDApOwogICAgICAgICB9Ci0g
ICAgICAgIGRpc3BhdGNoRXZlbnRGb3JUeXBlKGV2ZW50TmFtZXMoKS5lbXB0aWVkRXZlbnQsIGZh
bHNlLCB0cnVlKTsKKyAgICAgICAgZGlzcGF0Y2hFdmVudChldmVudE5hbWVzKCkuZW1wdGllZEV2
ZW50LCBmYWxzZSwgdHJ1ZSk7CiAgICAgfQogICAgIAogICAgIHNlbGVjdE1lZGlhUmVzb3VyY2Uo
KTsKSW5kZXg6IGh0bWwvSFRNTE9iamVjdEVsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIGh0bWwv
SFRNTE9iamVjdEVsZW1lbnQuY3BwCShyZXZpc2lvbiA0MjYwMikKKysrIGh0bWwvSFRNTE9iamVj
dEVsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMiw2ICszMiw3IEBACiAjaW5jbHVkZSAi
SFRNTEZvcm1FbGVtZW50LmgiCiAjaW5jbHVkZSAiSFRNTEltYWdlTG9hZGVyLmgiCiAjaW5jbHVk
ZSAiSFRNTE5hbWVzLmgiCisjaW5jbHVkZSAiSlNMYXp5RXZlbnRMaXN0ZW5lci5oIgogI2luY2x1
ZGUgIk1JTUVUeXBlUmVnaXN0cnkuaCIKICNpbmNsdWRlICJSZW5kZXJJbWFnZS5oIgogI2luY2x1
ZGUgIlJlbmRlclBhcnRPYmplY3QuaCIKQEAgLTQwLDcgKzQxLDYgQEAKICNpbmNsdWRlICJTZXR0
aW5ncy5oIgogI2luY2x1ZGUgIlRleHQuaCIKIAotCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIHVz
aW5nIG5hbWVzcGFjZSBIVE1MTmFtZXM7CkBAIC05NSw3ICs5NSw3IEBAIHZvaWQgSFRNTE9iamVj
dEVsZW1lbnQ6OnBhcnNlTWFwcGVkQXR0cmkKICAgICAgICAgaWYgKHJlbmRlcmVyKCkpCiAgICAg
ICAgICAgbV9uZWVkV2lkZ2V0VXBkYXRlID0gdHJ1ZTsKICAgICB9IGVsc2UgaWYgKGF0dHItPm5h
bWUoKSA9PSBvbmxvYWRBdHRyKSB7Ci0gICAgICAgIHNldElubGluZUV2ZW50TGlzdGVuZXJGb3JU
eXBlQW5kQXR0cmlidXRlKGV2ZW50TmFtZXMoKS5sb2FkRXZlbnQsIGF0dHIpOworICAgICAgICBz
ZXRJbmxpbmVFdmVudExpc3RlbmVyKGV2ZW50TmFtZXMoKS5sb2FkRXZlbnQsIGNyZWF0ZUlubGlu
ZUV2ZW50TGlzdGVuZXIodGhpcywgYXR0cikpOwogICAgIH0gZWxzZSBpZiAoYXR0ci0+bmFtZSgp
ID09IG5hbWVBdHRyKSB7CiAgICAgICAgIGNvbnN0IEF0b21pY1N0cmluZyYgbmV3TmFtZSA9IGF0
dHItPnZhbHVlKCk7CiAgICAgICAgIGlmIChpc0RvY05hbWVkSXRlbSgpICYmIGluRG9jdW1lbnQo
KSAmJiBkb2N1bWVudCgpLT5pc0hUTUxEb2N1bWVudCgpKSB7CkluZGV4OiBodG1sL0hUTUxTY3Jp
cHRFbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBodG1sL0hUTUxTY3JpcHRFbGVtZW50LmNwcAko
cmV2aXNpb24gNDI2MDIpCisrKyBodG1sL0hUTUxTY3JpcHRFbGVtZW50LmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMjYsNiArMjYsNyBAQAogI2luY2x1ZGUgIkRvY3VtZW50LmgiCiAjaW5jbHVkZSAi
RXZlbnROYW1lcy5oIgogI2luY2x1ZGUgIkhUTUxOYW1lcy5oIgorI2luY2x1ZGUgIkpTTGF6eUV2
ZW50TGlzdGVuZXIuaCIKICNpbmNsdWRlICJUZXh0LmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsK
QEAgLTY3LDcgKzY4LDcgQEAgdm9pZCBIVE1MU2NyaXB0RWxlbWVudDo6cGFyc2VNYXBwZWRBdHRy
aQogICAgIGlmIChhdHRyTmFtZSA9PSBzcmNBdHRyKQogICAgICAgICBoYW5kbGVTb3VyY2VBdHRy
aWJ1dGUobV9kYXRhLCBhdHRyLT52YWx1ZSgpKTsKICAgICBlbHNlIGlmIChhdHRyTmFtZSA9PSBv
bmxvYWRBdHRyKQotICAgICAgICBzZXRJbmxpbmVFdmVudExpc3RlbmVyRm9yVHlwZUFuZEF0dHJp
YnV0ZShldmVudE5hbWVzKCkubG9hZEV2ZW50LCBhdHRyKTsKKyAgICAgICAgc2V0SW5saW5lRXZl
bnRMaXN0ZW5lcihldmVudE5hbWVzKCkubG9hZEV2ZW50LCBjcmVhdGVJbmxpbmVFdmVudExpc3Rl
bmVyKHRoaXMsIGF0dHIpKTsKICAgICBlbHNlCiAgICAgICAgIEhUTUxFbGVtZW50OjpwYXJzZU1h
cHBlZEF0dHJpYnV0ZShhdHRyKTsKIH0KQEAgLTIxNSwxMiArMjE2LDEyIEBAIHZvaWQgSFRNTFNj
cmlwdEVsZW1lbnQ6OmRpc3BhdGNoTG9hZEV2ZW4KICAgICBBU1NFUlQoIW1fZGF0YS5oYXZlRmly
ZWRMb2FkRXZlbnQoKSk7CiAgICAgbV9kYXRhLnNldEhhdmVGaXJlZExvYWRFdmVudCh0cnVlKTsK
IAotICAgIGRpc3BhdGNoRXZlbnRGb3JUeXBlKGV2ZW50TmFtZXMoKS5sb2FkRXZlbnQsIGZhbHNl
LCBmYWxzZSk7CisgICAgZGlzcGF0Y2hFdmVudChldmVudE5hbWVzKCkubG9hZEV2ZW50LCBmYWxz
ZSwgZmFsc2UpOwogfQogCiB2b2lkIEhUTUxTY3JpcHRFbGVtZW50OjpkaXNwYXRjaEVycm9yRXZl
bnQoKQogewotICAgIGRpc3BhdGNoRXZlbnRGb3JUeXBlKGV2ZW50TmFtZXMoKS5lcnJvckV2ZW50
LCB0cnVlLCBmYWxzZSk7CisgICAgZGlzcGF0Y2hFdmVudChldmVudE5hbWVzKCkuZXJyb3JFdmVu
dCwgdHJ1ZSwgZmFsc2UpOwogfQogCiB9CkluZGV4OiBodG1sL0hUTUxTZWxlY3RFbGVtZW50LmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBodG1sL0hUTUxTZWxlY3RFbGVtZW50LmNwcAkocmV2aXNpb24gNDI2
MDIpCisrKyBodG1sL0hUTUxTZWxlY3RFbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDIs
NiArNDIsNyBAQAogI2luY2x1ZGUgIkhUTUxOYW1lcy5oIgogI2luY2x1ZGUgIkhUTUxPcHRpb25F
bGVtZW50LmgiCiAjaW5jbHVkZSAiSFRNTE9wdGlvbnNDb2xsZWN0aW9uLmgiCisjaW5jbHVkZSAi
SlNMYXp5RXZlbnRMaXN0ZW5lci5oIgogI2luY2x1ZGUgIktleWJvYXJkRXZlbnQuaCIKICNpbmNs
dWRlICJNb3VzZUV2ZW50LmgiCiAjaW5jbHVkZSAiUGFnZS5oIgpAQCAtMzI2LDExICszMjcsMTEg
QEAgdm9pZCBIVE1MU2VsZWN0RWxlbWVudDo6cGFyc2VNYXBwZWRBdHRyaQogICAgICAgICAvLyBE
b24ndCBtYXAgJ2FsaWduJyBhdHRyaWJ1dGUuICBUaGlzIG1hdGNoZXMgd2hhdCBGaXJlZm94LCBP
cGVyYSBhbmQgSUUgZG8uCiAgICAgICAgIC8vIFNlZSBodHRwOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD0xMjA3MgogICAgIH0gZWxzZSBpZiAoYXR0ci0+bmFtZSgpID09IG9uZm9j
dXNBdHRyKSB7Ci0gICAgICAgIHNldElubGluZUV2ZW50TGlzdGVuZXJGb3JUeXBlQW5kQXR0cmli
dXRlKGV2ZW50TmFtZXMoKS5mb2N1c0V2ZW50LCBhdHRyKTsKKyAgICAgICAgc2V0SW5saW5lRXZl
bnRMaXN0ZW5lcihldmVudE5hbWVzKCkuZm9jdXNFdmVudCwgY3JlYXRlSW5saW5lRXZlbnRMaXN0
ZW5lcih0aGlzLCBhdHRyKSk7CiAgICAgfSBlbHNlIGlmIChhdHRyLT5uYW1lKCkgPT0gb25ibHVy
QXR0cikgewotICAgICAgICBzZXRJbmxpbmVFdmVudExpc3RlbmVyRm9yVHlwZUFuZEF0dHJpYnV0
ZShldmVudE5hbWVzKCkuYmx1ckV2ZW50LCBhdHRyKTsKKyAgICAgICAgc2V0SW5saW5lRXZlbnRM
aXN0ZW5lcihldmVudE5hbWVzKCkuYmx1ckV2ZW50LCBjcmVhdGVJbmxpbmVFdmVudExpc3RlbmVy
KHRoaXMsIGF0dHIpKTsKICAgICB9IGVsc2UgaWYgKGF0dHItPm5hbWUoKSA9PSBvbmNoYW5nZUF0
dHIpIHsKLSAgICAgICAgc2V0SW5saW5lRXZlbnRMaXN0ZW5lckZvclR5cGVBbmRBdHRyaWJ1dGUo
ZXZlbnROYW1lcygpLmNoYW5nZUV2ZW50LCBhdHRyKTsKKyAgICAgICAgc2V0SW5saW5lRXZlbnRM
aXN0ZW5lcihldmVudE5hbWVzKCkuY2hhbmdlRXZlbnQsIGNyZWF0ZUlubGluZUV2ZW50TGlzdGVu
ZXIodGhpcywgYXR0cikpOwogICAgIH0gZWxzZQogICAgICAgICBIVE1MRm9ybUNvbnRyb2xFbGVt
ZW50V2l0aFN0YXRlOjpwYXJzZU1hcHBlZEF0dHJpYnV0ZShhdHRyKTsKIH0KSW5kZXg6IGh0bWwv
SFRNTFRleHRBcmVhRWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gaHRtbC9IVE1MVGV4dEFyZWFF
bGVtZW50LmNwcAkocmV2aXNpb24gNDI2MDIpCisrKyBodG1sL0hUTUxUZXh0QXJlYUVsZW1lbnQu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNCw2ICszNCw3IEBACiAjaW5jbHVkZSAiRm9ybURhdGFM
aXN0LmgiCiAjaW5jbHVkZSAiRnJhbWUuaCIKICNpbmNsdWRlICJIVE1MTmFtZXMuaCIKKyNpbmNs
dWRlICJKU0xhenlFdmVudExpc3RlbmVyLmgiCiAjaW5jbHVkZSAiUGFnZS5oIgogI2luY2x1ZGUg
IlJlbmRlclN0eWxlLmgiCiAjaW5jbHVkZSAiUmVuZGVyVGV4dENvbnRyb2xNdWx0aUxpbmUuaCIK
QEAgLTE3OSwxMyArMTgwLDEzIEBAIHZvaWQgSFRNTFRleHRBcmVhRWxlbWVudDo6cGFyc2VNYXBw
ZWRBdHQKICAgICAgICAgLy8gRG9uJ3QgbWFwICdhbGlnbicgYXR0cmlidXRlLiAgVGhpcyBtYXRj
aGVzIHdoYXQgRmlyZWZveCwgT3BlcmEgYW5kIElFIGRvLgogICAgICAgICAvLyBTZWUgaHR0cDov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzA3NQogICAgIH0gZWxzZSBpZiAoYXR0
ci0+bmFtZSgpID09IG9uZm9jdXNBdHRyKQotICAgICAgICBzZXRJbmxpbmVFdmVudExpc3RlbmVy
Rm9yVHlwZUFuZEF0dHJpYnV0ZShldmVudE5hbWVzKCkuZm9jdXNFdmVudCwgYXR0cik7CisgICAg
ICAgIHNldElubGluZUV2ZW50TGlzdGVuZXIoZXZlbnROYW1lcygpLmZvY3VzRXZlbnQsIGNyZWF0
ZUlubGluZUV2ZW50TGlzdGVuZXIodGhpcywgYXR0cikpOwogICAgIGVsc2UgaWYgKGF0dHItPm5h
bWUoKSA9PSBvbmJsdXJBdHRyKQotICAgICAgICBzZXRJbmxpbmVFdmVudExpc3RlbmVyRm9yVHlw
ZUFuZEF0dHJpYnV0ZShldmVudE5hbWVzKCkuYmx1ckV2ZW50LCBhdHRyKTsKKyAgICAgICAgc2V0
SW5saW5lRXZlbnRMaXN0ZW5lcihldmVudE5hbWVzKCkuYmx1ckV2ZW50LCBjcmVhdGVJbmxpbmVF
dmVudExpc3RlbmVyKHRoaXMsIGF0dHIpKTsKICAgICBlbHNlIGlmIChhdHRyLT5uYW1lKCkgPT0g
b25zZWxlY3RBdHRyKQotICAgICAgICBzZXRJbmxpbmVFdmVudExpc3RlbmVyRm9yVHlwZUFuZEF0
dHJpYnV0ZShldmVudE5hbWVzKCkuc2VsZWN0RXZlbnQsIGF0dHIpOworICAgICAgICBzZXRJbmxp
bmVFdmVudExpc3RlbmVyKGV2ZW50TmFtZXMoKS5zZWxlY3RFdmVudCwgY3JlYXRlSW5saW5lRXZl
bnRMaXN0ZW5lcih0aGlzLCBhdHRyKSk7CiAgICAgZWxzZSBpZiAoYXR0ci0+bmFtZSgpID09IG9u
Y2hhbmdlQXR0cikKLSAgICAgICAgc2V0SW5saW5lRXZlbnRMaXN0ZW5lckZvclR5cGVBbmRBdHRy
aWJ1dGUoZXZlbnROYW1lcygpLmNoYW5nZUV2ZW50LCBhdHRyKTsKKyAgICAgICAgc2V0SW5saW5l
RXZlbnRMaXN0ZW5lcihldmVudE5hbWVzKCkuY2hhbmdlRXZlbnQsIGNyZWF0ZUlubGluZUV2ZW50
TGlzdGVuZXIodGhpcywgYXR0cikpOwogICAgIGVsc2UKICAgICAgICAgSFRNTEZvcm1Db250cm9s
RWxlbWVudFdpdGhTdGF0ZTo6cGFyc2VNYXBwZWRBdHRyaWJ1dGUoYXR0cik7CiB9CkluZGV4OiBo
dG1sL0hUTUxUb2tlbml6ZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIGh0bWwvSFRNTFRva2VuaXplci5j
cHAJKHJldmlzaW9uIDQyNjAyKQorKysgaHRtbC9IVE1MVG9rZW5pemVyLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMTk4NiwxMSArMTk4NiwxMSBAQCB2b2lkIEhUTUxUb2tlbml6ZXI6Om5vdGlmeUZp
bmlzaGVkKENhY2hlCiAjZW5kaWYKIAogICAgICAgICBpZiAoZXJyb3JPY2N1cnJlZCkKLSAgICAg
ICAgICAgIG4tPmRpc3BhdGNoRXZlbnRGb3JUeXBlKGV2ZW50TmFtZXMoKS5lcnJvckV2ZW50LCB0
cnVlLCBmYWxzZSk7CisgICAgICAgICAgICBuLT5kaXNwYXRjaEV2ZW50KGV2ZW50TmFtZXMoKS5l
cnJvckV2ZW50LCB0cnVlLCBmYWxzZSk7CiAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgaWYg
KHN0YXRpY19jYXN0PEhUTUxTY3JpcHRFbGVtZW50Kj4obi5nZXQoKSktPnNob3VsZEV4ZWN1dGVB
c0phdmFTY3JpcHQoKSkKICAgICAgICAgICAgICAgICBtX3N0YXRlID0gc2NyaXB0RXhlY3V0aW9u
KHNvdXJjZUNvZGUsIG1fc3RhdGUpOwotICAgICAgICAgICAgbi0+ZGlzcGF0Y2hFdmVudEZvclR5
cGUoZXZlbnROYW1lcygpLmxvYWRFdmVudCwgZmFsc2UsIGZhbHNlKTsKKyAgICAgICAgICAgIG4t
PmRpc3BhdGNoRXZlbnQoZXZlbnROYW1lcygpLmxvYWRFdmVudCwgZmFsc2UsIGZhbHNlKTsKICAg
ICAgICAgfQogCiAgICAgICAgIC8vIFRoZSBzdGF0ZSBvZiBtX3BlbmRpbmdTY3JpcHRzLmlzRW1w
dHkoKSBjYW4gY2hhbmdlIGluc2lkZSB0aGUgc2NyaXB0RXhlY3V0aW9uKCkKSW5kZXg6IHBhZ2Uv
QWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gcGFnZS9BY2Nlc3Np
YmlsaXR5UmVuZGVyT2JqZWN0LmNwcAkocmV2aXNpb24gNDI2MDIpCisrKyBwYWdlL0FjY2Vzc2li
aWxpdHlSZW5kZXJPYmplY3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01NzMsNyArNTczLDcgQEAg
RWxlbWVudCogQWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdDo6bW91cwogCiAgICAgLy8gRklYTUU6
IERvIHRoZSBjb250aW51YXRpb24gc2VhcmNoIGxpa2UgYW5jaG9yRWxlbWVudCBkb2VzCiAgICAg
Zm9yIChFbGVtZW50KiBlbGVtZW50ID0gc3RhdGljX2Nhc3Q8RWxlbWVudCo+KG5vZGUpOyBlbGVt
ZW50OyBlbGVtZW50ID0gZWxlbWVudC0+cGFyZW50RWxlbWVudCgpKSB7Ci0gICAgICAgIGlmIChl
bGVtZW50LT5pbmxpbmVFdmVudExpc3RlbmVyRm9yVHlwZShldmVudE5hbWVzKCkuY2xpY2tFdmVu
dCkgfHwgZWxlbWVudC0+aW5saW5lRXZlbnRMaXN0ZW5lckZvclR5cGUoZXZlbnROYW1lcygpLm1v
dXNlZG93bkV2ZW50KSB8fCBlbGVtZW50LT5pbmxpbmVFdmVudExpc3RlbmVyRm9yVHlwZShldmVu
dE5hbWVzKCkubW91c2V1cEV2ZW50KSkKKyAgICAgICAgaWYgKGVsZW1lbnQtPmdldElubGluZUV2
ZW50TGlzdGVuZXIoZXZlbnROYW1lcygpLmNsaWNrRXZlbnQpIHx8IGVsZW1lbnQtPmdldElubGlu
ZUV2ZW50TGlzdGVuZXIoZXZlbnROYW1lcygpLm1vdXNlZG93bkV2ZW50KSB8fCBlbGVtZW50LT5n
ZXRJbmxpbmVFdmVudExpc3RlbmVyKGV2ZW50TmFtZXMoKS5tb3VzZXVwRXZlbnQpKQogICAgICAg
ICAgICAgcmV0dXJuIGVsZW1lbnQ7CiAgICAgfQogCkluZGV4OiBwYWdlL0RPTVdpbmRvdy5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gcGFnZS9ET01XaW5kb3cuY3BwCShyZXZpc2lvbiA0MjYwMikKKysrIHBh
Z2UvRE9NV2luZG93LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTA2OCwxNCArMTA2OCwxNCBAQCBi
b29sIERPTVdpbmRvdzo6aGFzRXZlbnRMaXN0ZW5lcihjb25zdCBBCiAgICAgcmV0dXJuIGZhbHNl
OwogfQogCi12b2lkIERPTVdpbmRvdzo6c2V0SW5saW5lRXZlbnRMaXN0ZW5lckZvclR5cGUoY29u
c3QgQXRvbWljU3RyaW5nJiBldmVudFR5cGUsIFBhc3NSZWZQdHI8RXZlbnRMaXN0ZW5lcj4gZXZl
bnRMaXN0ZW5lcikKK3ZvaWQgRE9NV2luZG93OjpzZXRJbmxpbmVFdmVudExpc3RlbmVyKGNvbnN0
IEF0b21pY1N0cmluZyYgZXZlbnRUeXBlLCBQYXNzUmVmUHRyPEV2ZW50TGlzdGVuZXI+IGxpc3Rl
bmVyKQogewotICAgIHJlbW92ZUlubGluZUV2ZW50TGlzdGVuZXJGb3JUeXBlKGV2ZW50VHlwZSk7
Ci0gICAgaWYgKGV2ZW50TGlzdGVuZXIpCi0gICAgICAgIGFkZEV2ZW50TGlzdGVuZXIoZXZlbnRU
eXBlLCBldmVudExpc3RlbmVyLCBmYWxzZSk7CisgICAgY2xlYXJJbmxpbmVFdmVudExpc3RlbmVy
KGV2ZW50VHlwZSk7CisgICAgaWYgKGxpc3RlbmVyKQorICAgICAgICBhZGRFdmVudExpc3RlbmVy
KGV2ZW50VHlwZSwgbGlzdGVuZXIsIGZhbHNlKTsKIH0KIAotdm9pZCBET01XaW5kb3c6OnJlbW92
ZUlubGluZUV2ZW50TGlzdGVuZXJGb3JUeXBlKGNvbnN0IEF0b21pY1N0cmluZyYgZXZlbnRUeXBl
KQordm9pZCBET01XaW5kb3c6OmNsZWFySW5saW5lRXZlbnRMaXN0ZW5lcihjb25zdCBBdG9taWNT
dHJpbmcmIGV2ZW50VHlwZSkKIHsKICAgICBzaXplX3Qgc2l6ZSA9IG1fZXZlbnRMaXN0ZW5lcnMu
c2l6ZSgpOwogICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgc2l6ZTsgKytpKSB7CkBAIC0xMDky
LDcgKzEwOTIsNyBAQCB2b2lkIERPTVdpbmRvdzo6cmVtb3ZlSW5saW5lRXZlbnRMaXN0ZW5lCiAg
ICAgfQogfQogCi1FdmVudExpc3RlbmVyKiBET01XaW5kb3c6OmlubGluZUV2ZW50TGlzdGVuZXJG
b3JUeXBlKGNvbnN0IEF0b21pY1N0cmluZyYgZXZlbnRUeXBlKSBjb25zdAorRXZlbnRMaXN0ZW5l
ciogRE9NV2luZG93OjpnZXRJbmxpbmVFdmVudExpc3RlbmVyKGNvbnN0IEF0b21pY1N0cmluZyYg
ZXZlbnRUeXBlKSBjb25zdAogewogICAgIHNpemVfdCBzaXplID0gbV9ldmVudExpc3RlbmVycy5z
aXplKCk7CiAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBzaXplOyArK2kpIHsKQEAgLTExMjks
MjkyICsxMTI5LDI5MiBAQCB2b2lkIERPTVdpbmRvdzo6cmVtb3ZlUGVuZGluZ0ZyYW1lQmVmb3Jl
CiAKIEV2ZW50TGlzdGVuZXIqIERPTVdpbmRvdzo6b25hYm9ydCgpIGNvbnN0CiB7Ci0gICAgcmV0
dXJuIGlubGluZUV2ZW50TGlzdGVuZXJGb3JUeXBlKGV2ZW50TmFtZXMoKS5hYm9ydEV2ZW50KTsK
KyAgICByZXR1cm4gZ2V0SW5saW5lRXZlbnRMaXN0ZW5lcihldmVudE5hbWVzKCkuYWJvcnRFdmVu
dCk7CiB9CiAKIHZvaWQgRE9NV2luZG93OjpzZXRPbmFib3J0KFBhc3NSZWZQdHI8RXZlbnRMaXN0
ZW5lcj4gZXZlbnRMaXN0ZW5lcikKIHsKLSAgICBzZXRJbmxpbmVFdmVudExpc3RlbmVyRm9yVHlw
ZShldmVudE5hbWVzKCkuYWJvcnRFdmVudCwgZXZlbnRMaXN0ZW5lcik7CisgICAgc2V0SW5saW5l
RXZlbnRMaXN0ZW5lcihldmVudE5hbWVzKCkuYWJvcnRFdmVudCwgZXZlbnRMaXN0ZW5lcik7CiB9
CiAKIEV2ZW50TGlzdGVuZXIqIERPTVdpbmRvdzo6b25ibHVyKCkgY29uc3QKIHsKLSAgICByZXR1
cm4gaW5saW5lRXZlbnRMaXN0ZW5lckZvclR5cGUoZXZlbnROYW1lcygpLmJsdXJFdmVudCk7Cisg
ICAgcmV0dXJuIGdldElubGluZUV2ZW50TGlzdGVuZXIoZXZlbnROYW1lcygpLmJsdXJFdmVudCk7
CiB9CiAKIHZvaWQgRE9NV2luZG93OjpzZXRPbmJsdXIoUGFzc1JlZlB0cjxFdmVudExpc3RlbmVy
PiBldmVudExpc3RlbmVyKQogewotICAgIHNldElubGluZUV2ZW50TGlzdGVuZXJGb3JUeXBlKGV2
ZW50TmFtZXMoKS5ibHVyRXZlbnQsIGV2ZW50TGlzdGVuZXIpOworICAgIHNldElubGluZUV2ZW50
TGlzdGVuZXIoZXZlbnROYW1lcygpLmJsdXJFdmVudCwgZXZlbnRMaXN0ZW5lcik7CiB9CiAKIEV2
ZW50TGlzdGVuZXIqIERPTVdpbmRvdzo6b25jaGFuZ2UoKSBjb25zdAogewotICAgIHJldHVybiBp
bmxpbmVFdmVudExpc3RlbmVyRm9yVHlwZShldmVudE5hbWVzKCkuY2hhbmdlRXZlbnQpOworICAg
IHJldHVybiBnZXRJbmxpbmVFdmVudExpc3RlbmVyKGV2ZW50TmFtZXMoKS5jaGFuZ2VFdmVudCk7
CiB9CiAKIHZvaWQgRE9NV2luZG93OjpzZXRPbmNoYW5nZShQYXNzUmVmUHRyPEV2ZW50TGlzdGVu
ZXI+IGV2ZW50TGlzdGVuZXIpCiB7Ci0gICAgc2V0SW5saW5lRXZlbnRMaXN0ZW5lckZvclR5cGUo
ZXZlbnROYW1lcygpLmNoYW5nZUV2ZW50LCBldmVudExpc3RlbmVyKTsKKyAgICBzZXRJbmxpbmVF
dmVudExpc3RlbmVyKGV2ZW50TmFtZXMoKS5jaGFuZ2VFdmVudCwgZXZlbnRMaXN0ZW5lcik7CiB9
CiAKIEV2ZW50TGlzdGVuZXIqIERPTVdpbmRvdzo6b25jbGljaygpIGNvbnN0CiB7Ci0gICAgcmV0
dXJuIGlubGluZUV2ZW50TGlzdGVuZXJGb3JUeXBlKGV2ZW50TmFtZXMoKS5jbGlja0V2ZW50KTsK
KyAgICByZXR1cm4gZ2V0SW5saW5lRXZlbnRMaXN0ZW5lcihldmVudE5hbWVzKCkuY2xpY2tFdmVu
dCk7CiB9CiAKIHZvaWQgRE9NV2luZG93OjpzZXRPbmNsaWNrKFBhc3NSZWZQdHI8RXZlbnRMaXN0
ZW5lcj4gZXZlbnRMaXN0ZW5lcikKIHsKLSAgICBzZXRJbmxpbmVFdmVudExpc3RlbmVyRm9yVHlw
ZShldmVudE5hbWVzKCkuY2xpY2tFdmVudCwgZXZlbnRMaXN0ZW5lcik7CisgICAgc2V0SW5saW5l
RXZlbnRMaXN0ZW5lcihldmVudE5hbWVzKCkuY2xpY2tFdmVudCwgZXZlbnRMaXN0ZW5lcik7CiB9
CiAKIEV2ZW50TGlzdGVuZXIqIERPTVdpbmRvdzo6b25kYmxjbGljaygpIGNvbnN0CiB7Ci0gICAg
cmV0dXJuIGlubGluZUV2ZW50TGlzdGVuZXJGb3JUeXBlKGV2ZW50TmFtZXMoKS5kYmxjbGlja0V2
ZW50KTsKKyAgICByZXR1cm4gZ2V0SW5saW5lRXZlbnRMaXN0ZW5lcihldmVudE5hbWVzKCkuZGJs
Y2xpY2tFdmVudCk7CiB9CiAKIHZvaWQgRE9NV2luZG93OjpzZXRPbmRibGNsaWNrKFBhc3NSZWZQ
dHI8RXZlbnRMaXN0ZW5lcj4gZXZlbnRMaXN0ZW5lcikKIHsKLSAgICBzZXRJbmxpbmVFdmVudExp
c3RlbmVyRm9yVHlwZShldmVudE5hbWVzKCkuZGJsY2xpY2tFdmVudCwgZXZlbnRMaXN0ZW5lcik7
CisgICAgc2V0SW5saW5lRXZlbnRMaXN0ZW5lcihldmVudE5hbWVzKCkuZGJsY2xpY2tFdmVudCwg
ZXZlbnRMaXN0ZW5lcik7CiB9CiAKIEV2ZW50TGlzdGVuZXIqIERPTVdpbmRvdzo6b25lcnJvcigp
IGNvbnN0CiB7Ci0gICAgcmV0dXJuIGlubGluZUV2ZW50TGlzdGVuZXJGb3JUeXBlKGV2ZW50TmFt
ZXMoKS5lcnJvckV2ZW50KTsKKyAgICByZXR1cm4gZ2V0SW5saW5lRXZlbnRMaXN0ZW5lcihldmVu
dE5hbWVzKCkuZXJyb3JFdmVudCk7CiB9CiAKIHZvaWQgRE9NV2luZG93OjpzZXRPbmVycm9yKFBh
c3NSZWZQdHI8RXZlbnRMaXN0ZW5lcj4gZXZlbnRMaXN0ZW5lcikKIHsKLSAgICBzZXRJbmxpbmVF
dmVudExpc3RlbmVyRm9yVHlwZShldmVudE5hbWVzKCkuZXJyb3JFdmVudCwgZXZlbnRMaXN0ZW5l
cik7CisgICAgc2V0SW5saW5lRXZlbnRMaXN0ZW5lcihldmVudE5hbWVzKCkuZXJyb3JFdmVudCwg
ZXZlbnRMaXN0ZW5lcik7CiB9CiAKIEV2ZW50TGlzdGVuZXIqIERPTVdpbmRvdzo6b25mb2N1cygp
IGNvbnN0CiB7Ci0gICAgcmV0dXJuIGlubGluZUV2ZW50TGlzdGVuZXJGb3JUeXBlKGV2ZW50TmFt
ZXMoKS5mb2N1c0V2ZW50KTsKKyAgICByZXR1cm4gZ2V0SW5saW5lRXZlbnRMaXN0ZW5lcihldmVu
dE5hbWVzKCkuZm9jdXNFdmVudCk7CiB9CiAKIHZvaWQgRE9NV2luZG93OjpzZXRPbmZvY3VzKFBh
c3NSZWZQdHI8RXZlbnRMaXN0ZW5lcj4gZXZlbnRMaXN0ZW5lcikKIHsKLSAgICBzZXRJbmxpbmVF
dmVudExpc3RlbmVyRm9yVHlwZShldmVudE5hbWVzKCkuZm9jdXNFdmVudCwgZXZlbnRMaXN0ZW5l
cik7CisgICAgc2V0SW5saW5lRXZlbnRMaXN0ZW5lcihldmVudE5hbWVzKCkuZm9jdXNFdmVudCwg
ZXZlbnRMaXN0ZW5lcik7CiB9CiAKIEV2ZW50TGlzdGVuZXIqIERPTVdpbmRvdzo6b25rZXlkb3du
KCkgY29uc3QKIHsKLSAgICByZXR1cm4gaW5saW5lRXZlbnRMaXN0ZW5lckZvclR5cGUoZXZlbnRO
YW1lcygpLmtleWRvd25FdmVudCk7CisgICAgcmV0dXJuIGdldElubGluZUV2ZW50TGlzdGVuZXIo
ZXZlbnROYW1lcygpLmtleWRvd25FdmVudCk7CiB9CiAKIHZvaWQgRE9NV2luZG93OjpzZXRPbmtl
eWRvd24oUGFzc1JlZlB0cjxFdmVudExpc3RlbmVyPiBldmVudExpc3RlbmVyKQogewotICAgIHNl
dElubGluZUV2ZW50TGlzdGVuZXJGb3JUeXBlKGV2ZW50TmFtZXMoKS5rZXlkb3duRXZlbnQsIGV2
ZW50TGlzdGVuZXIpOworICAgIHNldElubGluZUV2ZW50TGlzdGVuZXIoZXZlbnROYW1lcygpLmtl
eWRvd25FdmVudCwgZXZlbnRMaXN0ZW5lcik7CiB9CiAKIEV2ZW50TGlzdGVuZXIqIERPTVdpbmRv
dzo6b25rZXlwcmVzcygpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIGlubGluZUV2ZW50TGlzdGVuZXJG
b3JUeXBlKGV2ZW50TmFtZXMoKS5rZXlwcmVzc0V2ZW50KTsKKyAgICByZXR1cm4gZ2V0SW5saW5l
RXZlbnRMaXN0ZW5lcihldmVudE5hbWVzKCkua2V5cHJlc3NFdmVudCk7CiB9CiAKIHZvaWQgRE9N
V2luZG93OjpzZXRPbmtleXByZXNzKFBhc3NSZWZQdHI8RXZlbnRMaXN0ZW5lcj4gZXZlbnRMaXN0
ZW5lcikKIHsKLSAgICBzZXRJbmxpbmVFdmVudExpc3RlbmVyRm9yVHlwZShldmVudE5hbWVzKCku
a2V5cHJlc3NFdmVudCwgZXZlbnRMaXN0ZW5lcik7CisgICAgc2V0SW5saW5lRXZlbnRMaXN0ZW5l
cihldmVudE5hbWVzKCkua2V5cHJlc3NFdmVudCwgZXZlbnRMaXN0ZW5lcik7CiB9CiAKIEV2ZW50
TGlzdGVuZXIqIERPTVdpbmRvdzo6b25rZXl1cCgpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIGlubGlu
ZUV2ZW50TGlzdGVuZXJGb3JUeXBlKGV2ZW50TmFtZXMoKS5rZXl1cEV2ZW50KTsKKyAgICByZXR1
cm4gZ2V0SW5saW5lRXZlbnRMaXN0ZW5lcihldmVudE5hbWVzKCkua2V5dXBFdmVudCk7CiB9CiAK
IHZvaWQgRE9NV2luZG93OjpzZXRPbmtleXVwKFBhc3NSZWZQdHI8RXZlbnRMaXN0ZW5lcj4gZXZl
bnRMaXN0ZW5lcikKIHsKLSAgICBzZXRJbmxpbmVFdmVudExpc3RlbmVyRm9yVHlwZShldmVudE5h
bWVzKCkua2V5dXBFdmVudCwgZXZlbnRMaXN0ZW5lcik7CisgICAgc2V0SW5saW5lRXZlbnRMaXN0
ZW5lcihldmVudE5hbWVzKCkua2V5dXBFdmVudCwgZXZlbnRMaXN0ZW5lcik7CiB9CiAKIEV2ZW50
TGlzdGVuZXIqIERPTVdpbmRvdzo6b25sb2FkKCkgY29uc3QKIHsKLSAgICByZXR1cm4gaW5saW5l
RXZlbnRMaXN0ZW5lckZvclR5cGUoZXZlbnROYW1lcygpLmxvYWRFdmVudCk7CisgICAgcmV0dXJu
IGdldElubGluZUV2ZW50TGlzdGVuZXIoZXZlbnROYW1lcygpLmxvYWRFdmVudCk7CiB9CiAKIHZv
aWQgRE9NV2luZG93OjpzZXRPbmxvYWQoUGFzc1JlZlB0cjxFdmVudExpc3RlbmVyPiBldmVudExp
c3RlbmVyKQogewotICAgIHNldElubGluZUV2ZW50TGlzdGVuZXJGb3JUeXBlKGV2ZW50TmFtZXMo
KS5sb2FkRXZlbnQsIGV2ZW50TGlzdGVuZXIpOworICAgIHNldElubGluZUV2ZW50TGlzdGVuZXIo
ZXZlbnROYW1lcygpLmxvYWRFdmVudCwgZXZlbnRMaXN0ZW5lcik7CiB9CiAKIEV2ZW50TGlzdGVu
ZXIqIERPTVdpbmRvdzo6b25tb3VzZWRvd24oKSBjb25zdAogewotICAgIHJldHVybiBpbmxpbmVF
dmVudExpc3RlbmVyRm9yVHlwZShldmVudE5hbWVzKCkubW91c2Vkb3duRXZlbnQpOworICAgIHJl
dHVybiBnZXRJbmxpbmVFdmVudExpc3RlbmVyKGV2ZW50TmFtZXMoKS5tb3VzZWRvd25FdmVudCk7
CiB9CiAKIHZvaWQgRE9NV2luZG93OjpzZXRPbm1vdXNlZG93bihQYXNzUmVmUHRyPEV2ZW50TGlz
dGVuZXI+IGV2ZW50TGlzdGVuZXIpCiB7Ci0gICAgc2V0SW5saW5lRXZlbnRMaXN0ZW5lckZvclR5
cGUoZXZlbnROYW1lcygpLm1vdXNlZG93bkV2ZW50LCBldmVudExpc3RlbmVyKTsKKyAgICBzZXRJ
bmxpbmVFdmVudExpc3RlbmVyKGV2ZW50TmFtZXMoKS5tb3VzZWRvd25FdmVudCwgZXZlbnRMaXN0
ZW5lcik7CiB9CiAKIEV2ZW50TGlzdGVuZXIqIERPTVdpbmRvdzo6b25tb3VzZW1vdmUoKSBjb25z
dAogewotICAgIHJldHVybiBpbmxpbmVFdmVudExpc3RlbmVyRm9yVHlwZShldmVudE5hbWVzKCku
bW91c2Vtb3ZlRXZlbnQpOworICAgIHJldHVybiBnZXRJbmxpbmVFdmVudExpc3RlbmVyKGV2ZW50
TmFtZXMoKS5tb3VzZW1vdmVFdmVudCk7CiB9CiAKIHZvaWQgRE9NV2luZG93OjpzZXRPbm1vdXNl
bW92ZShQYXNzUmVmUHRyPEV2ZW50TGlzdGVuZXI+IGV2ZW50TGlzdGVuZXIpCiB7Ci0gICAgc2V0
SW5saW5lRXZlbnRMaXN0ZW5lckZvclR5cGUoZXZlbnROYW1lcygpLm1vdXNlbW92ZUV2ZW50LCBl
dmVudExpc3RlbmVyKTsKKyAgICBzZXRJbmxpbmVFdmVudExpc3RlbmVyKGV2ZW50TmFtZXMoKS5t
b3VzZW1vdmVFdmVudCwgZXZlbnRMaXN0ZW5lcik7CiB9CiAKIEV2ZW50TGlzdGVuZXIqIERPTVdp
bmRvdzo6b25tb3VzZW91dCgpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIGlubGluZUV2ZW50TGlzdGVu
ZXJGb3JUeXBlKGV2ZW50TmFtZXMoKS5tb3VzZW91dEV2ZW50KTsKKyAgICByZXR1cm4gZ2V0SW5s
aW5lRXZlbnRMaXN0ZW5lcihldmVudE5hbWVzKCkubW91c2VvdXRFdmVudCk7CiB9CiAKIHZvaWQg
RE9NV2luZG93OjpzZXRPbm1vdXNlb3V0KFBhc3NSZWZQdHI8RXZlbnRMaXN0ZW5lcj4gZXZlbnRM
aXN0ZW5lcikKIHsKLSAgICBzZXRJbmxpbmVFdmVudExpc3RlbmVyRm9yVHlwZShldmVudE5hbWVz
KCkubW91c2VvdXRFdmVudCwgZXZlbnRMaXN0ZW5lcik7CisgICAgc2V0SW5saW5lRXZlbnRMaXN0
ZW5lcihldmVudE5hbWVzKCkubW91c2VvdXRFdmVudCwgZXZlbnRMaXN0ZW5lcik7CiB9CiAKIEV2
ZW50TGlzdGVuZXIqIERPTVdpbmRvdzo6b25tb3VzZW92ZXIoKSBjb25zdAogewotICAgIHJldHVy
biBpbmxpbmVFdmVudExpc3RlbmVyRm9yVHlwZShldmVudE5hbWVzKCkubW91c2VvdmVyRXZlbnQp
OworICAgIHJldHVybiBnZXRJbmxpbmVFdmVudExpc3RlbmVyKGV2ZW50TmFtZXMoKS5tb3VzZW92
ZXJFdmVudCk7CiB9CiAKIHZvaWQgRE9NV2luZG93OjpzZXRPbm1vdXNlb3ZlcihQYXNzUmVmUHRy
PEV2ZW50TGlzdGVuZXI+IGV2ZW50TGlzdGVuZXIpCiB7Ci0gICAgc2V0SW5saW5lRXZlbnRMaXN0
ZW5lckZvclR5cGUoZXZlbnROYW1lcygpLm1vdXNlb3ZlckV2ZW50LCBldmVudExpc3RlbmVyKTsK
KyAgICBzZXRJbmxpbmVFdmVudExpc3RlbmVyKGV2ZW50TmFtZXMoKS5tb3VzZW92ZXJFdmVudCwg
ZXZlbnRMaXN0ZW5lcik7CiB9CiAKIEV2ZW50TGlzdGVuZXIqIERPTVdpbmRvdzo6b25tb3VzZXVw
KCkgY29uc3QKIHsKLSAgICByZXR1cm4gaW5saW5lRXZlbnRMaXN0ZW5lckZvclR5cGUoZXZlbnRO
YW1lcygpLm1vdXNldXBFdmVudCk7CisgICAgcmV0dXJuIGdldElubGluZUV2ZW50TGlzdGVuZXIo
ZXZlbnROYW1lcygpLm1vdXNldXBFdmVudCk7CiB9CiAKIHZvaWQgRE9NV2luZG93OjpzZXRPbm1v
dXNldXAoUGFzc1JlZlB0cjxFdmVudExpc3RlbmVyPiBldmVudExpc3RlbmVyKQogewotICAgIHNl
dElubGluZUV2ZW50TGlzdGVuZXJGb3JUeXBlKGV2ZW50TmFtZXMoKS5tb3VzZXVwRXZlbnQsIGV2
ZW50TGlzdGVuZXIpOworICAgIHNldElubGluZUV2ZW50TGlzdGVuZXIoZXZlbnROYW1lcygpLm1v
dXNldXBFdmVudCwgZXZlbnRMaXN0ZW5lcik7CiB9CiAKIEV2ZW50TGlzdGVuZXIqIERPTVdpbmRv
dzo6b25tb3VzZXdoZWVsKCkgY29uc3QKIHsKLSAgICByZXR1cm4gaW5saW5lRXZlbnRMaXN0ZW5l
ckZvclR5cGUoZXZlbnROYW1lcygpLm1vdXNld2hlZWxFdmVudCk7CisgICAgcmV0dXJuIGdldElu
bGluZUV2ZW50TGlzdGVuZXIoZXZlbnROYW1lcygpLm1vdXNld2hlZWxFdmVudCk7CiB9CiAKIHZv
aWQgRE9NV2luZG93OjpzZXRPbm1vdXNld2hlZWwoUGFzc1JlZlB0cjxFdmVudExpc3RlbmVyPiBl
dmVudExpc3RlbmVyKQogewotICAgIHNldElubGluZUV2ZW50TGlzdGVuZXJGb3JUeXBlKGV2ZW50
TmFtZXMoKS5tb3VzZXdoZWVsRXZlbnQsIGV2ZW50TGlzdGVuZXIpOworICAgIHNldElubGluZUV2
ZW50TGlzdGVuZXIoZXZlbnROYW1lcygpLm1vdXNld2hlZWxFdmVudCwgZXZlbnRMaXN0ZW5lcik7
CiB9CiAKIEV2ZW50TGlzdGVuZXIqIERPTVdpbmRvdzo6b25yZXNldCgpIGNvbnN0CiB7Ci0gICAg
cmV0dXJuIGlubGluZUV2ZW50TGlzdGVuZXJGb3JUeXBlKGV2ZW50TmFtZXMoKS5yZXNldEV2ZW50
KTsKKyAgICByZXR1cm4gZ2V0SW5saW5lRXZlbnRMaXN0ZW5lcihldmVudE5hbWVzKCkucmVzZXRF
dmVudCk7CiB9CiAKIHZvaWQgRE9NV2luZG93OjpzZXRPbnJlc2V0KFBhc3NSZWZQdHI8RXZlbnRM
aXN0ZW5lcj4gZXZlbnRMaXN0ZW5lcikKIHsKLSAgICBzZXRJbmxpbmVFdmVudExpc3RlbmVyRm9y
VHlwZShldmVudE5hbWVzKCkucmVzZXRFdmVudCwgZXZlbnRMaXN0ZW5lcik7CisgICAgc2V0SW5s
aW5lRXZlbnRMaXN0ZW5lcihldmVudE5hbWVzKCkucmVzZXRFdmVudCwgZXZlbnRMaXN0ZW5lcik7
CiB9CiAKIEV2ZW50TGlzdGVuZXIqIERPTVdpbmRvdzo6b25yZXNpemUoKSBjb25zdAogewotICAg
IHJldHVybiBpbmxpbmVFdmVudExpc3RlbmVyRm9yVHlwZShldmVudE5hbWVzKCkucmVzaXplRXZl
bnQpOworICAgIHJldHVybiBnZXRJbmxpbmVFdmVudExpc3RlbmVyKGV2ZW50TmFtZXMoKS5yZXNp
emVFdmVudCk7CiB9CiAKIHZvaWQgRE9NV2luZG93OjpzZXRPbnJlc2l6ZShQYXNzUmVmUHRyPEV2
ZW50TGlzdGVuZXI+IGV2ZW50TGlzdGVuZXIpCiB7Ci0gICAgc2V0SW5saW5lRXZlbnRMaXN0ZW5l
ckZvclR5cGUoZXZlbnROYW1lcygpLnJlc2l6ZUV2ZW50LCBldmVudExpc3RlbmVyKTsKKyAgICBz
ZXRJbmxpbmVFdmVudExpc3RlbmVyKGV2ZW50TmFtZXMoKS5yZXNpemVFdmVudCwgZXZlbnRMaXN0
ZW5lcik7CiB9CiAKIEV2ZW50TGlzdGVuZXIqIERPTVdpbmRvdzo6b25zY3JvbGwoKSBjb25zdAog
ewotICAgIHJldHVybiBpbmxpbmVFdmVudExpc3RlbmVyRm9yVHlwZShldmVudE5hbWVzKCkuc2Ny
b2xsRXZlbnQpOworICAgIHJldHVybiBnZXRJbmxpbmVFdmVudExpc3RlbmVyKGV2ZW50TmFtZXMo
KS5zY3JvbGxFdmVudCk7CiB9CiAKIHZvaWQgRE9NV2luZG93OjpzZXRPbnNjcm9sbChQYXNzUmVm
UHRyPEV2ZW50TGlzdGVuZXI+IGV2ZW50TGlzdGVuZXIpCiB7Ci0gICAgc2V0SW5saW5lRXZlbnRM
aXN0ZW5lckZvclR5cGUoZXZlbnROYW1lcygpLnNjcm9sbEV2ZW50LCBldmVudExpc3RlbmVyKTsK
KyAgICBzZXRJbmxpbmVFdmVudExpc3RlbmVyKGV2ZW50TmFtZXMoKS5zY3JvbGxFdmVudCwgZXZl
bnRMaXN0ZW5lcik7CiB9CiAKIEV2ZW50TGlzdGVuZXIqIERPTVdpbmRvdzo6b25zZWFyY2goKSBj
b25zdAogewotICAgIHJldHVybiBpbmxpbmVFdmVudExpc3RlbmVyRm9yVHlwZShldmVudE5hbWVz
KCkuc2VhcmNoRXZlbnQpOworICAgIHJldHVybiBnZXRJbmxpbmVFdmVudExpc3RlbmVyKGV2ZW50
TmFtZXMoKS5zZWFyY2hFdmVudCk7CiB9CiAKIHZvaWQgRE9NV2luZG93OjpzZXRPbnNlYXJjaChQ
YXNzUmVmUHRyPEV2ZW50TGlzdGVuZXI+IGV2ZW50TGlzdGVuZXIpCiB7Ci0gICAgc2V0SW5saW5l
RXZlbnRMaXN0ZW5lckZvclR5cGUoZXZlbnROYW1lcygpLnNlYXJjaEV2ZW50LCBldmVudExpc3Rl
bmVyKTsKKyAgICBzZXRJbmxpbmVFdmVudExpc3RlbmVyKGV2ZW50TmFtZXMoKS5zZWFyY2hFdmVu
dCwgZXZlbnRMaXN0ZW5lcik7CiB9CiAKIEV2ZW50TGlzdGVuZXIqIERPTVdpbmRvdzo6b25zZWxl
Y3QoKSBjb25zdAogewotICAgIHJldHVybiBpbmxpbmVFdmVudExpc3RlbmVyRm9yVHlwZShldmVu
dE5hbWVzKCkuc2VsZWN0RXZlbnQpOworICAgIHJldHVybiBnZXRJbmxpbmVFdmVudExpc3RlbmVy
KGV2ZW50TmFtZXMoKS5zZWxlY3RFdmVudCk7CiB9CiAKIHZvaWQgRE9NV2luZG93OjpzZXRPbnNl
bGVjdChQYXNzUmVmUHRyPEV2ZW50TGlzdGVuZXI+IGV2ZW50TGlzdGVuZXIpCiB7Ci0gICAgc2V0
SW5saW5lRXZlbnRMaXN0ZW5lckZvclR5cGUoZXZlbnROYW1lcygpLnNlbGVjdEV2ZW50LCBldmVu
dExpc3RlbmVyKTsKKyAgICBzZXRJbmxpbmVFdmVudExpc3RlbmVyKGV2ZW50TmFtZXMoKS5zZWxl
Y3RFdmVudCwgZXZlbnRMaXN0ZW5lcik7CiB9CiAKIEV2ZW50TGlzdGVuZXIqIERPTVdpbmRvdzo6
b25zdWJtaXQoKSBjb25zdAogewotICAgIHJldHVybiBpbmxpbmVFdmVudExpc3RlbmVyRm9yVHlw
ZShldmVudE5hbWVzKCkuc3VibWl0RXZlbnQpOworICAgIHJldHVybiBnZXRJbmxpbmVFdmVudExp
c3RlbmVyKGV2ZW50TmFtZXMoKS5zdWJtaXRFdmVudCk7CiB9CiAKIHZvaWQgRE9NV2luZG93Ojpz
ZXRPbnN1Ym1pdChQYXNzUmVmUHRyPEV2ZW50TGlzdGVuZXI+IGV2ZW50TGlzdGVuZXIpCiB7Ci0g
ICAgc2V0SW5saW5lRXZlbnRMaXN0ZW5lckZvclR5cGUoZXZlbnROYW1lcygpLnN1Ym1pdEV2ZW50
LCBldmVudExpc3RlbmVyKTsKKyAgICBzZXRJbmxpbmVFdmVudExpc3RlbmVyKGV2ZW50TmFtZXMo
KS5zdWJtaXRFdmVudCwgZXZlbnRMaXN0ZW5lcik7CiB9CiAKIEV2ZW50TGlzdGVuZXIqIERPTVdp
bmRvdzo6b251bmxvYWQoKSBjb25zdAogewotICAgIHJldHVybiBpbmxpbmVFdmVudExpc3RlbmVy
Rm9yVHlwZShldmVudE5hbWVzKCkudW5sb2FkRXZlbnQpOworICAgIHJldHVybiBnZXRJbmxpbmVF
dmVudExpc3RlbmVyKGV2ZW50TmFtZXMoKS51bmxvYWRFdmVudCk7CiB9CiAKIHZvaWQgRE9NV2lu
ZG93OjpzZXRPbnVubG9hZChQYXNzUmVmUHRyPEV2ZW50TGlzdGVuZXI+IGV2ZW50TGlzdGVuZXIp
CiB7Ci0gICAgc2V0SW5saW5lRXZlbnRMaXN0ZW5lckZvclR5cGUoZXZlbnROYW1lcygpLnVubG9h
ZEV2ZW50LCBldmVudExpc3RlbmVyKTsKKyAgICBzZXRJbmxpbmVFdmVudExpc3RlbmVyKGV2ZW50
TmFtZXMoKS51bmxvYWRFdmVudCwgZXZlbnRMaXN0ZW5lcik7CiB9CiAKIEV2ZW50TGlzdGVuZXIq
IERPTVdpbmRvdzo6b25iZWZvcmV1bmxvYWQoKSBjb25zdAogewotICAgIHJldHVybiBpbmxpbmVF
dmVudExpc3RlbmVyRm9yVHlwZShldmVudE5hbWVzKCkuYmVmb3JldW5sb2FkRXZlbnQpOworICAg
IHJldHVybiBnZXRJbmxpbmVFdmVudExpc3RlbmVyKGV2ZW50TmFtZXMoKS5iZWZvcmV1bmxvYWRF
dmVudCk7CiB9CiAKIHZvaWQgRE9NV2luZG93OjpzZXRPbmJlZm9yZXVubG9hZChQYXNzUmVmUHRy
PEV2ZW50TGlzdGVuZXI+IGV2ZW50TGlzdGVuZXIpCiB7Ci0gICAgc2V0SW5saW5lRXZlbnRMaXN0
ZW5lckZvclR5cGUoZXZlbnROYW1lcygpLmJlZm9yZXVubG9hZEV2ZW50LCBldmVudExpc3RlbmVy
KTsKKyAgICBzZXRJbmxpbmVFdmVudExpc3RlbmVyKGV2ZW50TmFtZXMoKS5iZWZvcmV1bmxvYWRF
dmVudCwgZXZlbnRMaXN0ZW5lcik7CiB9CiAKIEV2ZW50TGlzdGVuZXIqIERPTVdpbmRvdzo6b253
ZWJraXRhbmltYXRpb25zdGFydCgpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIGlubGluZUV2ZW50TGlz
dGVuZXJGb3JUeXBlKGV2ZW50TmFtZXMoKS53ZWJraXRBbmltYXRpb25TdGFydEV2ZW50KTsKKyAg
ICByZXR1cm4gZ2V0SW5saW5lRXZlbnRMaXN0ZW5lcihldmVudE5hbWVzKCkud2Via2l0QW5pbWF0
aW9uU3RhcnRFdmVudCk7CiB9CiAKIHZvaWQgRE9NV2luZG93OjpzZXRPbndlYmtpdGFuaW1hdGlv
bnN0YXJ0KFBhc3NSZWZQdHI8RXZlbnRMaXN0ZW5lcj4gZXZlbnRMaXN0ZW5lcikKIHsKLSAgICBz
ZXRJbmxpbmVFdmVudExpc3RlbmVyRm9yVHlwZShldmVudE5hbWVzKCkud2Via2l0QW5pbWF0aW9u
U3RhcnRFdmVudCwgZXZlbnRMaXN0ZW5lcik7CisgICAgc2V0SW5saW5lRXZlbnRMaXN0ZW5lcihl
dmVudE5hbWVzKCkud2Via2l0QW5pbWF0aW9uU3RhcnRFdmVudCwgZXZlbnRMaXN0ZW5lcik7CiB9
CiAKIEV2ZW50TGlzdGVuZXIqIERPTVdpbmRvdzo6b253ZWJraXRhbmltYXRpb25pdGVyYXRpb24o
KSBjb25zdAogewotICAgIHJldHVybiBpbmxpbmVFdmVudExpc3RlbmVyRm9yVHlwZShldmVudE5h
bWVzKCkud2Via2l0QW5pbWF0aW9uSXRlcmF0aW9uRXZlbnQpOworICAgIHJldHVybiBnZXRJbmxp
bmVFdmVudExpc3RlbmVyKGV2ZW50TmFtZXMoKS53ZWJraXRBbmltYXRpb25JdGVyYXRpb25FdmVu
dCk7CiB9CiAKIHZvaWQgRE9NV2luZG93OjpzZXRPbndlYmtpdGFuaW1hdGlvbml0ZXJhdGlvbihQ
YXNzUmVmUHRyPEV2ZW50TGlzdGVuZXI+IGV2ZW50TGlzdGVuZXIpCiB7Ci0gICAgc2V0SW5saW5l
RXZlbnRMaXN0ZW5lckZvclR5cGUoZXZlbnROYW1lcygpLndlYmtpdEFuaW1hdGlvbkl0ZXJhdGlv
bkV2ZW50LCBldmVudExpc3RlbmVyKTsKKyAgICBzZXRJbmxpbmVFdmVudExpc3RlbmVyKGV2ZW50
TmFtZXMoKS53ZWJraXRBbmltYXRpb25JdGVyYXRpb25FdmVudCwgZXZlbnRMaXN0ZW5lcik7CiB9
CiAKIEV2ZW50TGlzdGVuZXIqIERPTVdpbmRvdzo6b253ZWJraXRhbmltYXRpb25lbmQoKSBjb25z
dAogewotICAgIHJldHVybiBpbmxpbmVFdmVudExpc3RlbmVyRm9yVHlwZShldmVudE5hbWVzKCku
d2Via2l0QW5pbWF0aW9uRW5kRXZlbnQpOworICAgIHJldHVybiBnZXRJbmxpbmVFdmVudExpc3Rl
bmVyKGV2ZW50TmFtZXMoKS53ZWJraXRBbmltYXRpb25FbmRFdmVudCk7CiB9CiAKIHZvaWQgRE9N
V2luZG93OjpzZXRPbndlYmtpdGFuaW1hdGlvbmVuZChQYXNzUmVmUHRyPEV2ZW50TGlzdGVuZXI+
IGV2ZW50TGlzdGVuZXIpCiB7Ci0gICAgc2V0SW5saW5lRXZlbnRMaXN0ZW5lckZvclR5cGUoZXZl
bnROYW1lcygpLndlYmtpdEFuaW1hdGlvbkVuZEV2ZW50LCBldmVudExpc3RlbmVyKTsKKyAgICBz
ZXRJbmxpbmVFdmVudExpc3RlbmVyKGV2ZW50TmFtZXMoKS53ZWJraXRBbmltYXRpb25FbmRFdmVu
dCwgZXZlbnRMaXN0ZW5lcik7CiB9CiAKIEV2ZW50TGlzdGVuZXIqIERPTVdpbmRvdzo6b253ZWJr
aXR0cmFuc2l0aW9uZW5kKCkgY29uc3QKIHsKLSAgICByZXR1cm4gaW5saW5lRXZlbnRMaXN0ZW5l
ckZvclR5cGUoZXZlbnROYW1lcygpLndlYmtpdFRyYW5zaXRpb25FbmRFdmVudCk7CisgICAgcmV0
dXJuIGdldElubGluZUV2ZW50TGlzdGVuZXIoZXZlbnROYW1lcygpLndlYmtpdFRyYW5zaXRpb25F
bmRFdmVudCk7CiB9CiAKIHZvaWQgRE9NV2luZG93OjpzZXRPbndlYmtpdHRyYW5zaXRpb25lbmQo
UGFzc1JlZlB0cjxFdmVudExpc3RlbmVyPiBldmVudExpc3RlbmVyKQogewotICAgIHNldElubGlu
ZUV2ZW50TGlzdGVuZXJGb3JUeXBlKGV2ZW50TmFtZXMoKS53ZWJraXRUcmFuc2l0aW9uRW5kRXZl
bnQsIGV2ZW50TGlzdGVuZXIpOworICAgIHNldElubGluZUV2ZW50TGlzdGVuZXIoZXZlbnROYW1l
cygpLndlYmtpdFRyYW5zaXRpb25FbmRFdmVudCwgZXZlbnRMaXN0ZW5lcik7CiB9CiAKIH0gLy8g
bmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IHBhZ2UvRE9NV2luZG93LmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
cGFnZS9ET01XaW5kb3cuaAkocmV2aXNpb24gNDI2MDIpCisrKyBwYWdlL0RPTVdpbmRvdy5oCSh3
b3JraW5nIGNvcHkpCkBAIC0yMDQsMTMgKzIwNCwxOCBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAK
ICAgICAgICAgdm9pZCBoYW5kbGVFdmVudChFdmVudCosIGJvb2wgdXNlQ2FwdHVyZSk7CiAKKyAg
ICAgICAgLy8gVXNlZCBmb3Igc3RhbmRhcmQgRE9NIGFkZEV2ZW50TGlzdGVuZXIgLyByZW1vdmVF
dmVudExpc3RlbmVyIEFQSXMuCiAgICAgICAgIHZvaWQgYWRkRXZlbnRMaXN0ZW5lcihjb25zdCBB
dG9taWNTdHJpbmcmIGV2ZW50VHlwZSwgUGFzc1JlZlB0cjxFdmVudExpc3RlbmVyPiwgYm9vbCB1
c2VDYXB0dXJlKTsKICAgICAgICAgdm9pZCByZW1vdmVFdmVudExpc3RlbmVyKGNvbnN0IEF0b21p
Y1N0cmluZyYgZXZlbnRUeXBlLCBFdmVudExpc3RlbmVyKiwgYm9vbCB1c2VDYXB0dXJlKTsKKwor
ICAgICAgICAvLyBVc2VkIGZvciBsZWdhY3kgIm9uRXZlbnQiIHByb3BlcnR5IEFQSXMuCisgICAg
ICAgIHZvaWQgc2V0SW5saW5lRXZlbnRMaXN0ZW5lcihjb25zdCBBdG9taWNTdHJpbmcmIGV2ZW50
VHlwZSwgUGFzc1JlZlB0cjxFdmVudExpc3RlbmVyPik7CisgICAgICAgIHZvaWQgY2xlYXJJbmxp
bmVFdmVudExpc3RlbmVyKGNvbnN0IEF0b21pY1N0cmluZyYgZXZlbnRUeXBlKTsKKyAgICAgICAg
RXZlbnRMaXN0ZW5lciogZ2V0SW5saW5lRXZlbnRMaXN0ZW5lcihjb25zdCBBdG9taWNTdHJpbmcm
IGV2ZW50VHlwZSkgY29uc3Q7CisKKyAgICAgICAgY29uc3QgUmVnaXN0ZXJlZEV2ZW50TGlzdGVu
ZXJWZWN0b3ImIGV2ZW50TGlzdGVuZXJzKCkgY29uc3QgeyByZXR1cm4gbV9ldmVudExpc3RlbmVy
czsgfQogICAgICAgICBib29sIGhhc0V2ZW50TGlzdGVuZXIoY29uc3QgQXRvbWljU3RyaW5nJiBl
dmVudFR5cGUpOwogICAgICAgICB2b2lkIHJlbW92ZUFsbEV2ZW50TGlzdGVuZXJzKCk7Ci0gICAg
ICAgIGNvbnN0IFJlZ2lzdGVyZWRFdmVudExpc3RlbmVyVmVjdG9yJiBldmVudExpc3RlbmVycygp
IGNvbnN0IHsgcmV0dXJuIG1fZXZlbnRMaXN0ZW5lcnM7IH0KLQotICAgICAgICB2b2lkIHNldElu
bGluZUV2ZW50TGlzdGVuZXJGb3JUeXBlKGNvbnN0IEF0b21pY1N0cmluZyYgZXZlbnRUeXBlLCBQ
YXNzUmVmUHRyPEV2ZW50TGlzdGVuZXI+KTsKICAgICAgICAgCiAgICAgICAgIEV2ZW50TGlzdGVu
ZXIqIG9uYWJvcnQoKSBjb25zdDsKICAgICAgICAgdm9pZCBzZXRPbmFib3J0KFBhc3NSZWZQdHI8
RXZlbnRMaXN0ZW5lcj4pOwpAQCAtMjkzLDkgKzI5OCw2IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsK
ICAgICAgICAgRE9NQXBwbGljYXRpb25DYWNoZSogb3B0aW9uYWxBcHBsaWNhdGlvbkNhY2hlKCkg
Y29uc3QgeyByZXR1cm4gbV9hcHBsaWNhdGlvbkNhY2hlLmdldCgpOyB9CiAjZW5kaWYKIAotICAg
ICAgICB2b2lkIHJlbW92ZUlubGluZUV2ZW50TGlzdGVuZXJGb3JUeXBlKGNvbnN0IEF0b21pY1N0
cmluZyYgZXZlbnRUeXBlKTsKLSAgICAgICAgRXZlbnRMaXN0ZW5lciogaW5saW5lRXZlbnRMaXN0
ZW5lckZvclR5cGUoY29uc3QgQXRvbWljU3RyaW5nJiBldmVudFR5cGUpIGNvbnN0OwotCiAgICAg
cHJpdmF0ZToKICAgICAgICAgRE9NV2luZG93KEZyYW1lKik7CiAKSW5kZXg6IHBhZ2UvRXZlbnRI
YW5kbGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBwYWdlL0V2ZW50SGFuZGxlci5jcHAJKHJldmlzaW9u
IDQyNjAyKQorKysgcGFnZS9FdmVudEhhbmRsZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNzc2
LDcgKzE3NzYsNyBAQCBib29sIEV2ZW50SGFuZGxlcjo6Y2FuTW91c2VEb3duU3RhcnRTZWxlCiAg
ICAgICAgICAgICAKICAgICBmb3IgKFJlbmRlck9iamVjdCogY3VyciA9IG5vZGUtPnJlbmRlcmVy
KCk7IGN1cnI7IGN1cnIgPSBjdXJyLT5wYXJlbnQoKSkgewogICAgICAgICBpZiAoTm9kZSogbm9k
ZSA9IGN1cnItPm5vZGUoKSkKLSAgICAgICAgICAgIHJldHVybiBub2RlLT5kaXNwYXRjaEV2ZW50
Rm9yVHlwZShldmVudE5hbWVzKCkuc2VsZWN0c3RhcnRFdmVudCwgdHJ1ZSwgdHJ1ZSk7CisgICAg
ICAgICAgICByZXR1cm4gbm9kZS0+ZGlzcGF0Y2hFdmVudChldmVudE5hbWVzKCkuc2VsZWN0c3Rh
cnRFdmVudCwgdHJ1ZSwgdHJ1ZSk7CiAgICAgfQogCiAgICAgcmV0dXJuIHRydWU7CkBAIC0xNzg5
LDcgKzE3ODksNyBAQCBib29sIEV2ZW50SGFuZGxlcjo6Y2FuTW91c2VEcmFnRXh0ZW5kU2VsCiAg
ICAgICAgICAgICAKICAgICBmb3IgKFJlbmRlck9iamVjdCogY3VyciA9IG5vZGUtPnJlbmRlcmVy
KCk7IGN1cnI7IGN1cnIgPSBjdXJyLT5wYXJlbnQoKSkgewogICAgICAgICBpZiAoTm9kZSogbm9k
ZSA9IGN1cnItPm5vZGUoKSkKLSAgICAgICAgICAgIHJldHVybiBub2RlLT5kaXNwYXRjaEV2ZW50
Rm9yVHlwZShldmVudE5hbWVzKCkuc2VsZWN0c3RhcnRFdmVudCwgdHJ1ZSwgdHJ1ZSk7CisgICAg
ICAgICAgICByZXR1cm4gbm9kZS0+ZGlzcGF0Y2hFdmVudChldmVudE5hbWVzKCkuc2VsZWN0c3Rh
cnRFdmVudCwgdHJ1ZSwgdHJ1ZSk7CiAgICAgfQogCiAgICAgcmV0dXJuIHRydWU7CkBAIC0yMzc1
LDcgKzIzNzUsNyBAQCB2b2lkIEV2ZW50SGFuZGxlcjo6c2VuZFNjcm9sbEV2ZW50KCkKICAgICBp
ZiAoIXYpCiAgICAgICAgIHJldHVybjsKICAgICB2LT5zZXRXYXNTY3JvbGxlZEJ5VXNlcih0cnVl
KTsKLSAgICBtX2ZyYW1lLT5kb2N1bWVudCgpLT5kaXNwYXRjaEV2ZW50Rm9yVHlwZShldmVudE5h
bWVzKCkuc2Nyb2xsRXZlbnQsIHRydWUsIGZhbHNlKTsKKyAgICBtX2ZyYW1lLT5kb2N1bWVudCgp
LT5kaXNwYXRjaEV2ZW50KGV2ZW50TmFtZXMoKS5zY3JvbGxFdmVudCwgdHJ1ZSwgZmFsc2UpOwog
fQogCiB1bnNpZ25lZCBFdmVudEhhbmRsZXI6OnBlbmRpbmdGcmFtZUJlZm9yZVVubG9hZEV2ZW50
Q291bnQoKQpJbmRleDogcGFnZS9QYWdlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBwYWdlL1BhZ2UuY3Bw
CShyZXZpc2lvbiA0MjYwMikKKysrIHBhZ2UvUGFnZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTk5
LDcgKzk5LDcgQEAgc3RhdGljIHZvaWQgbmV0d29ya1N0YXRlQ2hhbmdlZCgpCiAgICAgICAgIGlm
ICghZXZlbnRUYXJnZXQpCiAgICAgICAgICAgICBldmVudFRhcmdldCA9IGRvY3VtZW50OwogICAg
ICAgICAKLSAgICAgICAgZXZlbnRUYXJnZXQtPmRpc3BhdGNoRXZlbnRGb3JUeXBlKGV2ZW50TmFt
ZSwgZmFsc2UsIGZhbHNlKTsKKyAgICAgICAgZXZlbnRUYXJnZXQtPmRpc3BhdGNoRXZlbnQoZXZl
bnROYW1lLCBmYWxzZSwgZmFsc2UpOwogICAgIH0KIH0KIApJbmRleDogcmVuZGVyaW5nL1JlbmRl
ckxpc3RCb3guY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIHJlbmRlcmluZy9SZW5kZXJMaXN0Qm94LmNwcAko
cmV2aXNpb24gNDI2MDIpCisrKyByZW5kZXJpbmcvUmVuZGVyTGlzdEJveC5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTUyNyw3ICs1MjcsNyBAQCB2b2lkIFJlbmRlckxpc3RCb3g6OnZhbHVlQ2hhbmdl
ZChTY3JvbGxiCiAgICAgICAgIG1faW5kZXhPZmZzZXQgPSBuZXdPZmZzZXQ7CiAgICAgICAgIHJl
cGFpbnQoKTsKICAgICAgICAgLy8gRmlyZSB0aGUgc2Nyb2xsIERPTSBldmVudC4KLSAgICAgICAg
bm9kZSgpLT5kaXNwYXRjaEV2ZW50Rm9yVHlwZShldmVudE5hbWVzKCkuc2Nyb2xsRXZlbnQsIGZh
bHNlLCBmYWxzZSk7CisgICAgICAgIG5vZGUoKS0+ZGlzcGF0Y2hFdmVudChldmVudE5hbWVzKCku
c2Nyb2xsRXZlbnQsIGZhbHNlLCBmYWxzZSk7CiAgICAgfQogfQogCkluZGV4OiByZW5kZXJpbmcv
UmVuZGVyVGV4dENvbnRyb2wuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIHJlbmRlcmluZy9SZW5kZXJUZXh0
Q29udHJvbC5jcHAJKHJldmlzaW9uIDQyNjAyKQorKysgcmVuZGVyaW5nL1JlbmRlclRleHRDb250
cm9sLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTE2LDcgKzUxNiw3IEBAIHZvaWQgUmVuZGVyVGV4
dENvbnRyb2w6OnNlbGVjdGlvbkNoYW5nZWQKIAogICAgIGlmIChGcmFtZSogZnJhbWUgPSBkb2N1
bWVudCgpLT5mcmFtZSgpKSB7CiAgICAgICAgIGlmIChmcmFtZS0+c2VsZWN0aW9uKCktPmlzUmFu
Z2UoKSAmJiB1c2VyVHJpZ2dlcmVkKQotICAgICAgICAgICAgbm9kZSgpLT5kaXNwYXRjaEV2ZW50
Rm9yVHlwZShldmVudE5hbWVzKCkuc2VsZWN0RXZlbnQsIHRydWUsIGZhbHNlKTsKKyAgICAgICAg
ICAgIG5vZGUoKS0+ZGlzcGF0Y2hFdmVudChldmVudE5hbWVzKCkuc2VsZWN0RXZlbnQsIHRydWUs
IGZhbHNlKTsKICAgICB9CiB9CiAKSW5kZXg6IHN2Zy9TVkdFbGVtZW50LmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBzdmcvU1ZHRWxlbWVudC5jcHAJKHJldmlzaW9uIDQyNjAyKQorKysgc3ZnL1NWR0VsZW1l
bnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMyw2ICszMyw3IEBACiAjaW5jbHVkZSAiRXZlbnRO
YW1lcy5oIgogI2luY2x1ZGUgIkZyYW1lVmlldy5oIgogI2luY2x1ZGUgIkhUTUxOYW1lcy5oIgor
I2luY2x1ZGUgIkpTTGF6eUV2ZW50TGlzdGVuZXIuaCIKICNpbmNsdWRlICJQbGF0Zm9ybVN0cmlu
Zy5oIgogI2luY2x1ZGUgIlJlZ2lzdGVyZWRFdmVudExpc3RlbmVyLmgiCiAjaW5jbHVkZSAiUmVu
ZGVyT2JqZWN0LmgiCkBAIC0xNTAsMjUgKzE1MSwyNSBAQCB2b2lkIFNWR0VsZW1lbnQ6OnBhcnNl
TWFwcGVkQXR0cmlidXRlKE1hCiB7CiAgICAgLy8gc3RhbmRhcmQgZXZlbnRzCiAgICAgaWYgKGF0
dHItPm5hbWUoKSA9PSBvbmxvYWRBdHRyKQotICAgICAgICBzZXRJbmxpbmVFdmVudExpc3RlbmVy
Rm9yVHlwZUFuZEF0dHJpYnV0ZShldmVudE5hbWVzKCkubG9hZEV2ZW50LCBhdHRyKTsKKyAgICAg
ICAgc2V0SW5saW5lRXZlbnRMaXN0ZW5lcihldmVudE5hbWVzKCkubG9hZEV2ZW50LCBjcmVhdGVJ
bmxpbmVFdmVudExpc3RlbmVyKHRoaXMsIGF0dHIpKTsKICAgICBlbHNlIGlmIChhdHRyLT5uYW1l
KCkgPT0gb25jbGlja0F0dHIpCi0gICAgICAgIHNldElubGluZUV2ZW50TGlzdGVuZXJGb3JUeXBl
QW5kQXR0cmlidXRlKGV2ZW50TmFtZXMoKS5jbGlja0V2ZW50LCBhdHRyKTsKKyAgICAgICAgc2V0
SW5saW5lRXZlbnRMaXN0ZW5lcihldmVudE5hbWVzKCkuY2xpY2tFdmVudCwgY3JlYXRlSW5saW5l
RXZlbnRMaXN0ZW5lcih0aGlzLCBhdHRyKSk7CiAgICAgZWxzZSBpZiAoYXR0ci0+bmFtZSgpID09
IG9ubW91c2Vkb3duQXR0cikKLSAgICAgICAgc2V0SW5saW5lRXZlbnRMaXN0ZW5lckZvclR5cGVB
bmRBdHRyaWJ1dGUoZXZlbnROYW1lcygpLm1vdXNlZG93bkV2ZW50LCBhdHRyKTsKKyAgICAgICAg
c2V0SW5saW5lRXZlbnRMaXN0ZW5lcihldmVudE5hbWVzKCkubW91c2Vkb3duRXZlbnQsIGNyZWF0
ZUlubGluZUV2ZW50TGlzdGVuZXIodGhpcywgYXR0cikpOwogICAgIGVsc2UgaWYgKGF0dHItPm5h
bWUoKSA9PSBvbm1vdXNlbW92ZUF0dHIpCi0gICAgICAgIHNldElubGluZUV2ZW50TGlzdGVuZXJG
b3JUeXBlQW5kQXR0cmlidXRlKGV2ZW50TmFtZXMoKS5tb3VzZW1vdmVFdmVudCwgYXR0cik7Cisg
ICAgICAgIHNldElubGluZUV2ZW50TGlzdGVuZXIoZXZlbnROYW1lcygpLm1vdXNlbW92ZUV2ZW50
LCBjcmVhdGVJbmxpbmVFdmVudExpc3RlbmVyKHRoaXMsIGF0dHIpKTsKICAgICBlbHNlIGlmIChh
dHRyLT5uYW1lKCkgPT0gb25tb3VzZW91dEF0dHIpCi0gICAgICAgIHNldElubGluZUV2ZW50TGlz
dGVuZXJGb3JUeXBlQW5kQXR0cmlidXRlKGV2ZW50TmFtZXMoKS5tb3VzZW91dEV2ZW50LCBhdHRy
KTsKKyAgICAgICAgc2V0SW5saW5lRXZlbnRMaXN0ZW5lcihldmVudE5hbWVzKCkubW91c2VvdXRF
dmVudCwgY3JlYXRlSW5saW5lRXZlbnRMaXN0ZW5lcih0aGlzLCBhdHRyKSk7CiAgICAgZWxzZSBp
ZiAoYXR0ci0+bmFtZSgpID09IG9ubW91c2VvdmVyQXR0cikKLSAgICAgICAgc2V0SW5saW5lRXZl
bnRMaXN0ZW5lckZvclR5cGVBbmRBdHRyaWJ1dGUoZXZlbnROYW1lcygpLm1vdXNlb3ZlckV2ZW50
LCBhdHRyKTsKKyAgICAgICAgc2V0SW5saW5lRXZlbnRMaXN0ZW5lcihldmVudE5hbWVzKCkubW91
c2VvdmVyRXZlbnQsIGNyZWF0ZUlubGluZUV2ZW50TGlzdGVuZXIodGhpcywgYXR0cikpOwogICAg
IGVsc2UgaWYgKGF0dHItPm5hbWUoKSA9PSBvbm1vdXNldXBBdHRyKQotICAgICAgICBzZXRJbmxp
bmVFdmVudExpc3RlbmVyRm9yVHlwZUFuZEF0dHJpYnV0ZShldmVudE5hbWVzKCkubW91c2V1cEV2
ZW50LCBhdHRyKTsKKyAgICAgICAgc2V0SW5saW5lRXZlbnRMaXN0ZW5lcihldmVudE5hbWVzKCku
bW91c2V1cEV2ZW50LCBjcmVhdGVJbmxpbmVFdmVudExpc3RlbmVyKHRoaXMsIGF0dHIpKTsKICAg
ICBlbHNlIGlmIChhdHRyLT5uYW1lKCkgPT0gU1ZHTmFtZXM6Om9uZm9jdXNpbkF0dHIpCi0gICAg
ICAgIHNldElubGluZUV2ZW50TGlzdGVuZXJGb3JUeXBlQW5kQXR0cmlidXRlKGV2ZW50TmFtZXMo
KS5ET01Gb2N1c0luRXZlbnQsIGF0dHIpOworICAgICAgICBzZXRJbmxpbmVFdmVudExpc3RlbmVy
KGV2ZW50TmFtZXMoKS5ET01Gb2N1c0luRXZlbnQsIGNyZWF0ZUlubGluZUV2ZW50TGlzdGVuZXIo
dGhpcywgYXR0cikpOwogICAgIGVsc2UgaWYgKGF0dHItPm5hbWUoKSA9PSBTVkdOYW1lczo6b25m
b2N1c291dEF0dHIpCi0gICAgICAgIHNldElubGluZUV2ZW50TGlzdGVuZXJGb3JUeXBlQW5kQXR0
cmlidXRlKGV2ZW50TmFtZXMoKS5ET01Gb2N1c091dEV2ZW50LCBhdHRyKTsKKyAgICAgICAgc2V0
SW5saW5lRXZlbnRMaXN0ZW5lcihldmVudE5hbWVzKCkuRE9NRm9jdXNPdXRFdmVudCwgY3JlYXRl
SW5saW5lRXZlbnRMaXN0ZW5lcih0aGlzLCBhdHRyKSk7CiAgICAgZWxzZSBpZiAoYXR0ci0+bmFt
ZSgpID09IFNWR05hbWVzOjpvbmFjdGl2YXRlQXR0cikKLSAgICAgICAgc2V0SW5saW5lRXZlbnRM
aXN0ZW5lckZvclR5cGVBbmRBdHRyaWJ1dGUoZXZlbnROYW1lcygpLkRPTUFjdGl2YXRlRXZlbnQs
IGF0dHIpOworICAgICAgICBzZXRJbmxpbmVFdmVudExpc3RlbmVyKGV2ZW50TmFtZXMoKS5ET01B
Y3RpdmF0ZUV2ZW50LCBjcmVhdGVJbmxpbmVFdmVudExpc3RlbmVyKHRoaXMsIGF0dHIpKTsKICAg
ICBlbHNlCiAgICAgICAgIFN0eWxlZEVsZW1lbnQ6OnBhcnNlTWFwcGVkQXR0cmlidXRlKGF0dHIp
OwogfQpJbmRleDogc3ZnL1NWR0VsZW1lbnRJbnN0YW5jZS5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gc3Zn
L1NWR0VsZW1lbnRJbnN0YW5jZS5jcHAJKHJldmlzaW9uIDQyNjAyKQorKysgc3ZnL1NWR0VsZW1l
bnRJbnN0YW5jZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE3NCw0MDIgKzE3NCw0MDIgQEAgYm9v
bCBTVkdFbGVtZW50SW5zdGFuY2U6OmRpc3BhdGNoRXZlbnQoUAogCiBFdmVudExpc3RlbmVyKiBT
VkdFbGVtZW50SW5zdGFuY2U6Om9uYWJvcnQoKSBjb25zdAogewotICAgIHJldHVybiBjb3JyZXNw
b25kaW5nRWxlbWVudCgpLT5pbmxpbmVFdmVudExpc3RlbmVyRm9yVHlwZShldmVudE5hbWVzKCku
YWJvcnRFdmVudCk7CisgICAgcmV0dXJuIGNvcnJlc3BvbmRpbmdFbGVtZW50KCktPmdldElubGlu
ZUV2ZW50TGlzdGVuZXIoZXZlbnROYW1lcygpLmFib3J0RXZlbnQpOwogfQogCiB2b2lkIFNWR0Vs
ZW1lbnRJbnN0YW5jZTo6c2V0T25hYm9ydChQYXNzUmVmUHRyPEV2ZW50TGlzdGVuZXI+IGV2ZW50
TGlzdGVuZXIpCiB7Ci0gICAgY29ycmVzcG9uZGluZ0VsZW1lbnQoKS0+c2V0SW5saW5lRXZlbnRM
aXN0ZW5lckZvclR5cGUoZXZlbnROYW1lcygpLmFib3J0RXZlbnQsIGV2ZW50TGlzdGVuZXIpOwor
ICAgIGNvcnJlc3BvbmRpbmdFbGVtZW50KCktPnNldElubGluZUV2ZW50TGlzdGVuZXIoZXZlbnRO
YW1lcygpLmFib3J0RXZlbnQsIGV2ZW50TGlzdGVuZXIpOwogfQogCiBFdmVudExpc3RlbmVyKiBT
VkdFbGVtZW50SW5zdGFuY2U6Om9uYmx1cigpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIGNvcnJlc3Bv
bmRpbmdFbGVtZW50KCktPmlubGluZUV2ZW50TGlzdGVuZXJGb3JUeXBlKGV2ZW50TmFtZXMoKS5i
bHVyRXZlbnQpOworICAgIHJldHVybiBjb3JyZXNwb25kaW5nRWxlbWVudCgpLT5nZXRJbmxpbmVF
dmVudExpc3RlbmVyKGV2ZW50TmFtZXMoKS5ibHVyRXZlbnQpOwogfQogCiB2b2lkIFNWR0VsZW1l
bnRJbnN0YW5jZTo6c2V0T25ibHVyKFBhc3NSZWZQdHI8RXZlbnRMaXN0ZW5lcj4gZXZlbnRMaXN0
ZW5lcikKIHsKLSAgICBjb3JyZXNwb25kaW5nRWxlbWVudCgpLT5zZXRJbmxpbmVFdmVudExpc3Rl
bmVyRm9yVHlwZShldmVudE5hbWVzKCkuYmx1ckV2ZW50LCBldmVudExpc3RlbmVyKTsKKyAgICBj
b3JyZXNwb25kaW5nRWxlbWVudCgpLT5zZXRJbmxpbmVFdmVudExpc3RlbmVyKGV2ZW50TmFtZXMo
KS5ibHVyRXZlbnQsIGV2ZW50TGlzdGVuZXIpOwogfQogCiBFdmVudExpc3RlbmVyKiBTVkdFbGVt
ZW50SW5zdGFuY2U6Om9uY2hhbmdlKCkgY29uc3QKIHsKLSAgICByZXR1cm4gY29ycmVzcG9uZGlu
Z0VsZW1lbnQoKS0+aW5saW5lRXZlbnRMaXN0ZW5lckZvclR5cGUoZXZlbnROYW1lcygpLmNoYW5n
ZUV2ZW50KTsKKyAgICByZXR1cm4gY29ycmVzcG9uZGluZ0VsZW1lbnQoKS0+Z2V0SW5saW5lRXZl
bnRMaXN0ZW5lcihldmVudE5hbWVzKCkuY2hhbmdlRXZlbnQpOwogfQogCiB2b2lkIFNWR0VsZW1l
bnRJbnN0YW5jZTo6c2V0T25jaGFuZ2UoUGFzc1JlZlB0cjxFdmVudExpc3RlbmVyPiBldmVudExp
c3RlbmVyKQogewotICAgIGNvcnJlc3BvbmRpbmdFbGVtZW50KCktPnNldElubGluZUV2ZW50TGlz
dGVuZXJGb3JUeXBlKGV2ZW50TmFtZXMoKS5jaGFuZ2VFdmVudCwgZXZlbnRMaXN0ZW5lcik7Cisg
ICAgY29ycmVzcG9uZGluZ0VsZW1lbnQoKS0+c2V0SW5saW5lRXZlbnRMaXN0ZW5lcihldmVudE5h
bWVzKCkuY2hhbmdlRXZlbnQsIGV2ZW50TGlzdGVuZXIpOwogfQogCiBFdmVudExpc3RlbmVyKiBT
VkdFbGVtZW50SW5zdGFuY2U6Om9uY2xpY2soKSBjb25zdAogewotICAgIHJldHVybiBjb3JyZXNw
b25kaW5nRWxlbWVudCgpLT5pbmxpbmVFdmVudExpc3RlbmVyRm9yVHlwZShldmVudE5hbWVzKCku
Y2xpY2tFdmVudCk7CisgICAgcmV0dXJuIGNvcnJlc3BvbmRpbmdFbGVtZW50KCktPmdldElubGlu
ZUV2ZW50TGlzdGVuZXIoZXZlbnROYW1lcygpLmNsaWNrRXZlbnQpOwogfQogCiB2b2lkIFNWR0Vs
ZW1lbnRJbnN0YW5jZTo6c2V0T25jbGljayhQYXNzUmVmUHRyPEV2ZW50TGlzdGVuZXI+IGV2ZW50
TGlzdGVuZXIpCiB7Ci0gICAgY29ycmVzcG9uZGluZ0VsZW1lbnQoKS0+c2V0SW5saW5lRXZlbnRM
aXN0ZW5lckZvclR5cGUoZXZlbnROYW1lcygpLmNsaWNrRXZlbnQsIGV2ZW50TGlzdGVuZXIpOwor
ICAgIGNvcnJlc3BvbmRpbmdFbGVtZW50KCktPnNldElubGluZUV2ZW50TGlzdGVuZXIoZXZlbnRO
YW1lcygpLmNsaWNrRXZlbnQsIGV2ZW50TGlzdGVuZXIpOwogfQogCiBFdmVudExpc3RlbmVyKiBT
VkdFbGVtZW50SW5zdGFuY2U6Om9uY29udGV4dG1lbnUoKSBjb25zdAogewotICAgIHJldHVybiBj
b3JyZXNwb25kaW5nRWxlbWVudCgpLT5pbmxpbmVFdmVudExpc3RlbmVyRm9yVHlwZShldmVudE5h
bWVzKCkuY29udGV4dG1lbnVFdmVudCk7CisgICAgcmV0dXJuIGNvcnJlc3BvbmRpbmdFbGVtZW50
KCktPmdldElubGluZUV2ZW50TGlzdGVuZXIoZXZlbnROYW1lcygpLmNvbnRleHRtZW51RXZlbnQp
OwogfQogCiB2b2lkIFNWR0VsZW1lbnRJbnN0YW5jZTo6c2V0T25jb250ZXh0bWVudShQYXNzUmVm
UHRyPEV2ZW50TGlzdGVuZXI+IGV2ZW50TGlzdGVuZXIpCiB7Ci0gICAgY29ycmVzcG9uZGluZ0Vs
ZW1lbnQoKS0+c2V0SW5saW5lRXZlbnRMaXN0ZW5lckZvclR5cGUoZXZlbnROYW1lcygpLmNvbnRl
eHRtZW51RXZlbnQsIGV2ZW50TGlzdGVuZXIpOworICAgIGNvcnJlc3BvbmRpbmdFbGVtZW50KCkt
PnNldElubGluZUV2ZW50TGlzdGVuZXIoZXZlbnROYW1lcygpLmNvbnRleHRtZW51RXZlbnQsIGV2
ZW50TGlzdGVuZXIpOwogfQogCiBFdmVudExpc3RlbmVyKiBTVkdFbGVtZW50SW5zdGFuY2U6Om9u
ZGJsY2xpY2soKSBjb25zdAogewotICAgIHJldHVybiBjb3JyZXNwb25kaW5nRWxlbWVudCgpLT5p
bmxpbmVFdmVudExpc3RlbmVyRm9yVHlwZShldmVudE5hbWVzKCkuZGJsY2xpY2tFdmVudCk7Cisg
ICAgcmV0dXJuIGNvcnJlc3BvbmRpbmdFbGVtZW50KCktPmdldElubGluZUV2ZW50TGlzdGVuZXIo
ZXZlbnROYW1lcygpLmRibGNsaWNrRXZlbnQpOwogfQogCiB2b2lkIFNWR0VsZW1lbnRJbnN0YW5j
ZTo6c2V0T25kYmxjbGljayhQYXNzUmVmUHRyPEV2ZW50TGlzdGVuZXI+IGV2ZW50TGlzdGVuZXIp
CiB7Ci0gICAgY29ycmVzcG9uZGluZ0VsZW1lbnQoKS0+c2V0SW5saW5lRXZlbnRMaXN0ZW5lckZv
clR5cGUoZXZlbnROYW1lcygpLmRibGNsaWNrRXZlbnQsIGV2ZW50TGlzdGVuZXIpOworICAgIGNv
cnJlc3BvbmRpbmdFbGVtZW50KCktPnNldElubGluZUV2ZW50TGlzdGVuZXIoZXZlbnROYW1lcygp
LmRibGNsaWNrRXZlbnQsIGV2ZW50TGlzdGVuZXIpOwogfQogCiBFdmVudExpc3RlbmVyKiBTVkdF
bGVtZW50SW5zdGFuY2U6Om9uZXJyb3IoKSBjb25zdAogewotICAgIHJldHVybiBjb3JyZXNwb25k
aW5nRWxlbWVudCgpLT5pbmxpbmVFdmVudExpc3RlbmVyRm9yVHlwZShldmVudE5hbWVzKCkuZXJy
b3JFdmVudCk7CisgICAgcmV0dXJuIGNvcnJlc3BvbmRpbmdFbGVtZW50KCktPmdldElubGluZUV2
ZW50TGlzdGVuZXIoZXZlbnROYW1lcygpLmVycm9yRXZlbnQpOwogfQogCiB2b2lkIFNWR0VsZW1l
bnRJbnN0YW5jZTo6c2V0T25lcnJvcihQYXNzUmVmUHRyPEV2ZW50TGlzdGVuZXI+IGV2ZW50TGlz
dGVuZXIpCiB7Ci0gICAgY29ycmVzcG9uZGluZ0VsZW1lbnQoKS0+c2V0SW5saW5lRXZlbnRMaXN0
ZW5lckZvclR5cGUoZXZlbnROYW1lcygpLmVycm9yRXZlbnQsIGV2ZW50TGlzdGVuZXIpOworICAg
IGNvcnJlc3BvbmRpbmdFbGVtZW50KCktPnNldElubGluZUV2ZW50TGlzdGVuZXIoZXZlbnROYW1l
cygpLmVycm9yRXZlbnQsIGV2ZW50TGlzdGVuZXIpOwogfQogCiBFdmVudExpc3RlbmVyKiBTVkdF
bGVtZW50SW5zdGFuY2U6Om9uZm9jdXMoKSBjb25zdAogewotICAgIHJldHVybiBjb3JyZXNwb25k
aW5nRWxlbWVudCgpLT5pbmxpbmVFdmVudExpc3RlbmVyRm9yVHlwZShldmVudE5hbWVzKCkuZm9j
dXNFdmVudCk7CisgICAgcmV0dXJuIGNvcnJlc3BvbmRpbmdFbGVtZW50KCktPmdldElubGluZUV2
ZW50TGlzdGVuZXIoZXZlbnROYW1lcygpLmZvY3VzRXZlbnQpOwogfQogCiB2b2lkIFNWR0VsZW1l
bnRJbnN0YW5jZTo6c2V0T25mb2N1cyhQYXNzUmVmUHRyPEV2ZW50TGlzdGVuZXI+IGV2ZW50TGlz
dGVuZXIpCiB7Ci0gICAgY29ycmVzcG9uZGluZ0VsZW1lbnQoKS0+c2V0SW5saW5lRXZlbnRMaXN0
ZW5lckZvclR5cGUoZXZlbnROYW1lcygpLmZvY3VzRXZlbnQsIGV2ZW50TGlzdGVuZXIpOworICAg
IGNvcnJlc3BvbmRpbmdFbGVtZW50KCktPnNldElubGluZUV2ZW50TGlzdGVuZXIoZXZlbnROYW1l
cygpLmZvY3VzRXZlbnQsIGV2ZW50TGlzdGVuZXIpOwogfQogCiBFdmVudExpc3RlbmVyKiBTVkdF
bGVtZW50SW5zdGFuY2U6Om9uaW5wdXQoKSBjb25zdAogewotICAgIHJldHVybiBjb3JyZXNwb25k
aW5nRWxlbWVudCgpLT5pbmxpbmVFdmVudExpc3RlbmVyRm9yVHlwZShldmVudE5hbWVzKCkuaW5w
dXRFdmVudCk7CisgICAgcmV0dXJuIGNvcnJlc3BvbmRpbmdFbGVtZW50KCktPmdldElubGluZUV2
ZW50TGlzdGVuZXIoZXZlbnROYW1lcygpLmlucHV0RXZlbnQpOwogfQogCiB2b2lkIFNWR0VsZW1l
bnRJbnN0YW5jZTo6c2V0T25pbnB1dChQYXNzUmVmUHRyPEV2ZW50TGlzdGVuZXI+IGV2ZW50TGlz
dGVuZXIpCiB7Ci0gICAgY29ycmVzcG9uZGluZ0VsZW1lbnQoKS0+c2V0SW5saW5lRXZlbnRMaXN0
ZW5lckZvclR5cGUoZXZlbnROYW1lcygpLmlucHV0RXZlbnQsIGV2ZW50TGlzdGVuZXIpOworICAg
IGNvcnJlc3BvbmRpbmdFbGVtZW50KCktPnNldElubGluZUV2ZW50TGlzdGVuZXIoZXZlbnROYW1l
cygpLmlucHV0RXZlbnQsIGV2ZW50TGlzdGVuZXIpOwogfQogCiBFdmVudExpc3RlbmVyKiBTVkdF
bGVtZW50SW5zdGFuY2U6Om9ua2V5ZG93bigpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIGNvcnJlc3Bv
bmRpbmdFbGVtZW50KCktPmlubGluZUV2ZW50TGlzdGVuZXJGb3JUeXBlKGV2ZW50TmFtZXMoKS5r
ZXlkb3duRXZlbnQpOworICAgIHJldHVybiBjb3JyZXNwb25kaW5nRWxlbWVudCgpLT5nZXRJbmxp
bmVFdmVudExpc3RlbmVyKGV2ZW50TmFtZXMoKS5rZXlkb3duRXZlbnQpOwogfQogCiB2b2lkIFNW
R0VsZW1lbnRJbnN0YW5jZTo6c2V0T25rZXlkb3duKFBhc3NSZWZQdHI8RXZlbnRMaXN0ZW5lcj4g
ZXZlbnRMaXN0ZW5lcikKIHsKLSAgICBjb3JyZXNwb25kaW5nRWxlbWVudCgpLT5zZXRJbmxpbmVF
dmVudExpc3RlbmVyRm9yVHlwZShldmVudE5hbWVzKCkua2V5ZG93bkV2ZW50LCBldmVudExpc3Rl
bmVyKTsKKyAgICBjb3JyZXNwb25kaW5nRWxlbWVudCgpLT5zZXRJbmxpbmVFdmVudExpc3RlbmVy
KGV2ZW50TmFtZXMoKS5rZXlkb3duRXZlbnQsIGV2ZW50TGlzdGVuZXIpOwogfQogCiBFdmVudExp
c3RlbmVyKiBTVkdFbGVtZW50SW5zdGFuY2U6Om9ua2V5cHJlc3MoKSBjb25zdAogewotICAgIHJl
dHVybiBjb3JyZXNwb25kaW5nRWxlbWVudCgpLT5pbmxpbmVFdmVudExpc3RlbmVyRm9yVHlwZShl
dmVudE5hbWVzKCkua2V5cHJlc3NFdmVudCk7CisgICAgcmV0dXJuIGNvcnJlc3BvbmRpbmdFbGVt
ZW50KCktPmdldElubGluZUV2ZW50TGlzdGVuZXIoZXZlbnROYW1lcygpLmtleXByZXNzRXZlbnQp
OwogfQogCiB2b2lkIFNWR0VsZW1lbnRJbnN0YW5jZTo6c2V0T25rZXlwcmVzcyhQYXNzUmVmUHRy
PEV2ZW50TGlzdGVuZXI+IGV2ZW50TGlzdGVuZXIpCiB7Ci0gICAgY29ycmVzcG9uZGluZ0VsZW1l
bnQoKS0+c2V0SW5saW5lRXZlbnRMaXN0ZW5lckZvclR5cGUoZXZlbnROYW1lcygpLmtleXByZXNz
RXZlbnQsIGV2ZW50TGlzdGVuZXIpOworICAgIGNvcnJlc3BvbmRpbmdFbGVtZW50KCktPnNldElu
bGluZUV2ZW50TGlzdGVuZXIoZXZlbnROYW1lcygpLmtleXByZXNzRXZlbnQsIGV2ZW50TGlzdGVu
ZXIpOwogfQogCiBFdmVudExpc3RlbmVyKiBTVkdFbGVtZW50SW5zdGFuY2U6Om9ua2V5dXAoKSBj
b25zdAogewotICAgIHJldHVybiBjb3JyZXNwb25kaW5nRWxlbWVudCgpLT5pbmxpbmVFdmVudExp
c3RlbmVyRm9yVHlwZShldmVudE5hbWVzKCkua2V5dXBFdmVudCk7CisgICAgcmV0dXJuIGNvcnJl
c3BvbmRpbmdFbGVtZW50KCktPmdldElubGluZUV2ZW50TGlzdGVuZXIoZXZlbnROYW1lcygpLmtl
eXVwRXZlbnQpOwogfQogCiB2b2lkIFNWR0VsZW1lbnRJbnN0YW5jZTo6c2V0T25rZXl1cChQYXNz
UmVmUHRyPEV2ZW50TGlzdGVuZXI+IGV2ZW50TGlzdGVuZXIpCiB7Ci0gICAgY29ycmVzcG9uZGlu
Z0VsZW1lbnQoKS0+c2V0SW5saW5lRXZlbnRMaXN0ZW5lckZvclR5cGUoZXZlbnROYW1lcygpLmtl
eXVwRXZlbnQsIGV2ZW50TGlzdGVuZXIpOworICAgIGNvcnJlc3BvbmRpbmdFbGVtZW50KCktPnNl
dElubGluZUV2ZW50TGlzdGVuZXIoZXZlbnROYW1lcygpLmtleXVwRXZlbnQsIGV2ZW50TGlzdGVu
ZXIpOwogfQogCiBFdmVudExpc3RlbmVyKiBTVkdFbGVtZW50SW5zdGFuY2U6Om9ubG9hZCgpIGNv
bnN0CiB7Ci0gICAgcmV0dXJuIGNvcnJlc3BvbmRpbmdFbGVtZW50KCktPmlubGluZUV2ZW50TGlz
dGVuZXJGb3JUeXBlKGV2ZW50TmFtZXMoKS5sb2FkRXZlbnQpOworICAgIHJldHVybiBjb3JyZXNw
b25kaW5nRWxlbWVudCgpLT5nZXRJbmxpbmVFdmVudExpc3RlbmVyKGV2ZW50TmFtZXMoKS5sb2Fk
RXZlbnQpOwogfQogCiB2b2lkIFNWR0VsZW1lbnRJbnN0YW5jZTo6c2V0T25sb2FkKFBhc3NSZWZQ
dHI8RXZlbnRMaXN0ZW5lcj4gZXZlbnRMaXN0ZW5lcikKIHsKLSAgICBjb3JyZXNwb25kaW5nRWxl
bWVudCgpLT5zZXRJbmxpbmVFdmVudExpc3RlbmVyRm9yVHlwZShldmVudE5hbWVzKCkubG9hZEV2
ZW50LCBldmVudExpc3RlbmVyKTsKKyAgICBjb3JyZXNwb25kaW5nRWxlbWVudCgpLT5zZXRJbmxp
bmVFdmVudExpc3RlbmVyKGV2ZW50TmFtZXMoKS5sb2FkRXZlbnQsIGV2ZW50TGlzdGVuZXIpOwog
fQogCiBFdmVudExpc3RlbmVyKiBTVkdFbGVtZW50SW5zdGFuY2U6Om9ubW91c2Vkb3duKCkgY29u
c3QKIHsKLSAgICByZXR1cm4gY29ycmVzcG9uZGluZ0VsZW1lbnQoKS0+aW5saW5lRXZlbnRMaXN0
ZW5lckZvclR5cGUoZXZlbnROYW1lcygpLm1vdXNlZG93bkV2ZW50KTsKKyAgICByZXR1cm4gY29y
cmVzcG9uZGluZ0VsZW1lbnQoKS0+Z2V0SW5saW5lRXZlbnRMaXN0ZW5lcihldmVudE5hbWVzKCku
bW91c2Vkb3duRXZlbnQpOwogfQogCiB2b2lkIFNWR0VsZW1lbnRJbnN0YW5jZTo6c2V0T25tb3Vz
ZWRvd24oUGFzc1JlZlB0cjxFdmVudExpc3RlbmVyPiBldmVudExpc3RlbmVyKQogewotICAgIGNv
cnJlc3BvbmRpbmdFbGVtZW50KCktPnNldElubGluZUV2ZW50TGlzdGVuZXJGb3JUeXBlKGV2ZW50
TmFtZXMoKS5tb3VzZWRvd25FdmVudCwgZXZlbnRMaXN0ZW5lcik7CisgICAgY29ycmVzcG9uZGlu
Z0VsZW1lbnQoKS0+c2V0SW5saW5lRXZlbnRMaXN0ZW5lcihldmVudE5hbWVzKCkubW91c2Vkb3du
RXZlbnQsIGV2ZW50TGlzdGVuZXIpOwogfQogCiBFdmVudExpc3RlbmVyKiBTVkdFbGVtZW50SW5z
dGFuY2U6Om9ubW91c2Vtb3ZlKCkgY29uc3QKIHsKLSAgICByZXR1cm4gY29ycmVzcG9uZGluZ0Vs
ZW1lbnQoKS0+aW5saW5lRXZlbnRMaXN0ZW5lckZvclR5cGUoZXZlbnROYW1lcygpLm1vdXNlbW92
ZUV2ZW50KTsKKyAgICByZXR1cm4gY29ycmVzcG9uZGluZ0VsZW1lbnQoKS0+Z2V0SW5saW5lRXZl
bnRMaXN0ZW5lcihldmVudE5hbWVzKCkubW91c2Vtb3ZlRXZlbnQpOwogfQogCiB2b2lkIFNWR0Vs
ZW1lbnRJbnN0YW5jZTo6c2V0T25tb3VzZW1vdmUoUGFzc1JlZlB0cjxFdmVudExpc3RlbmVyPiBl
dmVudExpc3RlbmVyKQogewotICAgIGNvcnJlc3BvbmRpbmdFbGVtZW50KCktPnNldElubGluZUV2
ZW50TGlzdGVuZXJGb3JUeXBlKGV2ZW50TmFtZXMoKS5tb3VzZW1vdmVFdmVudCwgZXZlbnRMaXN0
ZW5lcik7CisgICAgY29ycmVzcG9uZGluZ0VsZW1lbnQoKS0+c2V0SW5saW5lRXZlbnRMaXN0ZW5l
cihldmVudE5hbWVzKCkubW91c2Vtb3ZlRXZlbnQsIGV2ZW50TGlzdGVuZXIpOwogfQogCiBFdmVu
dExpc3RlbmVyKiBTVkdFbGVtZW50SW5zdGFuY2U6Om9ubW91c2VvdXQoKSBjb25zdAogewotICAg
IHJldHVybiBjb3JyZXNwb25kaW5nRWxlbWVudCgpLT5pbmxpbmVFdmVudExpc3RlbmVyRm9yVHlw
ZShldmVudE5hbWVzKCkubW91c2VvdXRFdmVudCk7CisgICAgcmV0dXJuIGNvcnJlc3BvbmRpbmdF
bGVtZW50KCktPmdldElubGluZUV2ZW50TGlzdGVuZXIoZXZlbnROYW1lcygpLm1vdXNlb3V0RXZl
bnQpOwogfQogCiB2b2lkIFNWR0VsZW1lbnRJbnN0YW5jZTo6c2V0T25tb3VzZW91dChQYXNzUmVm
UHRyPEV2ZW50TGlzdGVuZXI+IGV2ZW50TGlzdGVuZXIpCiB7Ci0gICAgY29ycmVzcG9uZGluZ0Vs
ZW1lbnQoKS0+c2V0SW5saW5lRXZlbnRMaXN0ZW5lckZvclR5cGUoZXZlbnROYW1lcygpLm1vdXNl
b3V0RXZlbnQsIGV2ZW50TGlzdGVuZXIpOworICAgIGNvcnJlc3BvbmRpbmdFbGVtZW50KCktPnNl
dElubGluZUV2ZW50TGlzdGVuZXIoZXZlbnROYW1lcygpLm1vdXNlb3V0RXZlbnQsIGV2ZW50TGlz
dGVuZXIpOwogfQogCiBFdmVudExpc3RlbmVyKiBTVkdFbGVtZW50SW5zdGFuY2U6Om9ubW91c2Vv
dmVyKCkgY29uc3QKIHsKLSAgICByZXR1cm4gY29ycmVzcG9uZGluZ0VsZW1lbnQoKS0+aW5saW5l
RXZlbnRMaXN0ZW5lckZvclR5cGUoZXZlbnROYW1lcygpLm1vdXNlb3ZlckV2ZW50KTsKKyAgICBy
ZXR1cm4gY29ycmVzcG9uZGluZ0VsZW1lbnQoKS0+Z2V0SW5saW5lRXZlbnRMaXN0ZW5lcihldmVu
dE5hbWVzKCkubW91c2VvdmVyRXZlbnQpOwogfQogCiB2b2lkIFNWR0VsZW1lbnRJbnN0YW5jZTo6
c2V0T25tb3VzZW92ZXIoUGFzc1JlZlB0cjxFdmVudExpc3RlbmVyPiBldmVudExpc3RlbmVyKQog
ewotICAgIGNvcnJlc3BvbmRpbmdFbGVtZW50KCktPnNldElubGluZUV2ZW50TGlzdGVuZXJGb3JU
eXBlKGV2ZW50TmFtZXMoKS5tb3VzZW92ZXJFdmVudCwgZXZlbnRMaXN0ZW5lcik7CisgICAgY29y
cmVzcG9uZGluZ0VsZW1lbnQoKS0+c2V0SW5saW5lRXZlbnRMaXN0ZW5lcihldmVudE5hbWVzKCku
bW91c2VvdmVyRXZlbnQsIGV2ZW50TGlzdGVuZXIpOwogfQogCiBFdmVudExpc3RlbmVyKiBTVkdF
bGVtZW50SW5zdGFuY2U6Om9ubW91c2V1cCgpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIGNvcnJlc3Bv
bmRpbmdFbGVtZW50KCktPmlubGluZUV2ZW50TGlzdGVuZXJGb3JUeXBlKGV2ZW50TmFtZXMoKS5t
b3VzZXVwRXZlbnQpOworICAgIHJldHVybiBjb3JyZXNwb25kaW5nRWxlbWVudCgpLT5nZXRJbmxp
bmVFdmVudExpc3RlbmVyKGV2ZW50TmFtZXMoKS5tb3VzZXVwRXZlbnQpOwogfQogCiB2b2lkIFNW
R0VsZW1lbnRJbnN0YW5jZTo6c2V0T25tb3VzZXVwKFBhc3NSZWZQdHI8RXZlbnRMaXN0ZW5lcj4g
ZXZlbnRMaXN0ZW5lcikKIHsKLSAgICBjb3JyZXNwb25kaW5nRWxlbWVudCgpLT5zZXRJbmxpbmVF
dmVudExpc3RlbmVyRm9yVHlwZShldmVudE5hbWVzKCkubW91c2V1cEV2ZW50LCBldmVudExpc3Rl
bmVyKTsKKyAgICBjb3JyZXNwb25kaW5nRWxlbWVudCgpLT5zZXRJbmxpbmVFdmVudExpc3RlbmVy
KGV2ZW50TmFtZXMoKS5tb3VzZXVwRXZlbnQsIGV2ZW50TGlzdGVuZXIpOwogfQogCiBFdmVudExp
c3RlbmVyKiBTVkdFbGVtZW50SW5zdGFuY2U6Om9ubW91c2V3aGVlbCgpIGNvbnN0CiB7Ci0gICAg
cmV0dXJuIGNvcnJlc3BvbmRpbmdFbGVtZW50KCktPmlubGluZUV2ZW50TGlzdGVuZXJGb3JUeXBl
KGV2ZW50TmFtZXMoKS5tb3VzZXdoZWVsRXZlbnQpOworICAgIHJldHVybiBjb3JyZXNwb25kaW5n
RWxlbWVudCgpLT5nZXRJbmxpbmVFdmVudExpc3RlbmVyKGV2ZW50TmFtZXMoKS5tb3VzZXdoZWVs
RXZlbnQpOwogfQogCiB2b2lkIFNWR0VsZW1lbnRJbnN0YW5jZTo6c2V0T25tb3VzZXdoZWVsKFBh
c3NSZWZQdHI8RXZlbnRMaXN0ZW5lcj4gZXZlbnRMaXN0ZW5lcikKIHsKLSAgICBjb3JyZXNwb25k
aW5nRWxlbWVudCgpLT5zZXRJbmxpbmVFdmVudExpc3RlbmVyRm9yVHlwZShldmVudE5hbWVzKCku
bW91c2V3aGVlbEV2ZW50LCBldmVudExpc3RlbmVyKTsKKyAgICBjb3JyZXNwb25kaW5nRWxlbWVu
dCgpLT5zZXRJbmxpbmVFdmVudExpc3RlbmVyKGV2ZW50TmFtZXMoKS5tb3VzZXdoZWVsRXZlbnQs
IGV2ZW50TGlzdGVuZXIpOwogfQogCiBFdmVudExpc3RlbmVyKiBTVkdFbGVtZW50SW5zdGFuY2U6
Om9uYmVmb3JlY3V0KCkgY29uc3QKIHsKLSAgICByZXR1cm4gY29ycmVzcG9uZGluZ0VsZW1lbnQo
KS0+aW5saW5lRXZlbnRMaXN0ZW5lckZvclR5cGUoZXZlbnROYW1lcygpLmJlZm9yZWN1dEV2ZW50
KTsKKyAgICByZXR1cm4gY29ycmVzcG9uZGluZ0VsZW1lbnQoKS0+Z2V0SW5saW5lRXZlbnRMaXN0
ZW5lcihldmVudE5hbWVzKCkuYmVmb3JlY3V0RXZlbnQpOwogfQogCiB2b2lkIFNWR0VsZW1lbnRJ
bnN0YW5jZTo6c2V0T25iZWZvcmVjdXQoUGFzc1JlZlB0cjxFdmVudExpc3RlbmVyPiBldmVudExp
c3RlbmVyKQogewotICAgIGNvcnJlc3BvbmRpbmdFbGVtZW50KCktPnNldElubGluZUV2ZW50TGlz
dGVuZXJGb3JUeXBlKGV2ZW50TmFtZXMoKS5iZWZvcmVjdXRFdmVudCwgZXZlbnRMaXN0ZW5lcik7
CisgICAgY29ycmVzcG9uZGluZ0VsZW1lbnQoKS0+c2V0SW5saW5lRXZlbnRMaXN0ZW5lcihldmVu
dE5hbWVzKCkuYmVmb3JlY3V0RXZlbnQsIGV2ZW50TGlzdGVuZXIpOwogfQogCiBFdmVudExpc3Rl
bmVyKiBTVkdFbGVtZW50SW5zdGFuY2U6Om9uY3V0KCkgY29uc3QKIHsKLSAgICByZXR1cm4gY29y
cmVzcG9uZGluZ0VsZW1lbnQoKS0+aW5saW5lRXZlbnRMaXN0ZW5lckZvclR5cGUoZXZlbnROYW1l
cygpLmN1dEV2ZW50KTsKKyAgICByZXR1cm4gY29ycmVzcG9uZGluZ0VsZW1lbnQoKS0+Z2V0SW5s
aW5lRXZlbnRMaXN0ZW5lcihldmVudE5hbWVzKCkuY3V0RXZlbnQpOwogfQogCiB2b2lkIFNWR0Vs
ZW1lbnRJbnN0YW5jZTo6c2V0T25jdXQoUGFzc1JlZlB0cjxFdmVudExpc3RlbmVyPiBldmVudExp
c3RlbmVyKQogewotICAgIGNvcnJlc3BvbmRpbmdFbGVtZW50KCktPnNldElubGluZUV2ZW50TGlz
dGVuZXJGb3JUeXBlKGV2ZW50TmFtZXMoKS5jdXRFdmVudCwgZXZlbnRMaXN0ZW5lcik7CisgICAg
Y29ycmVzcG9uZGluZ0VsZW1lbnQoKS0+c2V0SW5saW5lRXZlbnRMaXN0ZW5lcihldmVudE5hbWVz
KCkuY3V0RXZlbnQsIGV2ZW50TGlzdGVuZXIpOwogfQogCiBFdmVudExpc3RlbmVyKiBTVkdFbGVt
ZW50SW5zdGFuY2U6Om9uYmVmb3JlY29weSgpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIGNvcnJlc3Bv
bmRpbmdFbGVtZW50KCktPmlubGluZUV2ZW50TGlzdGVuZXJGb3JUeXBlKGV2ZW50TmFtZXMoKS5i
ZWZvcmVjb3B5RXZlbnQpOworICAgIHJldHVybiBjb3JyZXNwb25kaW5nRWxlbWVudCgpLT5nZXRJ
bmxpbmVFdmVudExpc3RlbmVyKGV2ZW50TmFtZXMoKS5iZWZvcmVjb3B5RXZlbnQpOwogfQogCiB2
b2lkIFNWR0VsZW1lbnRJbnN0YW5jZTo6c2V0T25iZWZvcmVjb3B5KFBhc3NSZWZQdHI8RXZlbnRM
aXN0ZW5lcj4gZXZlbnRMaXN0ZW5lcikKIHsKLSAgICBjb3JyZXNwb25kaW5nRWxlbWVudCgpLT5z
ZXRJbmxpbmVFdmVudExpc3RlbmVyRm9yVHlwZShldmVudE5hbWVzKCkuYmVmb3JlY29weUV2ZW50
LCBldmVudExpc3RlbmVyKTsKKyAgICBjb3JyZXNwb25kaW5nRWxlbWVudCgpLT5zZXRJbmxpbmVF
dmVudExpc3RlbmVyKGV2ZW50TmFtZXMoKS5iZWZvcmVjb3B5RXZlbnQsIGV2ZW50TGlzdGVuZXIp
OwogfQogCiBFdmVudExpc3RlbmVyKiBTVkdFbGVtZW50SW5zdGFuY2U6Om9uY29weSgpIGNvbnN0
CiB7Ci0gICAgcmV0dXJuIGNvcnJlc3BvbmRpbmdFbGVtZW50KCktPmlubGluZUV2ZW50TGlzdGVu
ZXJGb3JUeXBlKGV2ZW50TmFtZXMoKS5jb3B5RXZlbnQpOworICAgIHJldHVybiBjb3JyZXNwb25k
aW5nRWxlbWVudCgpLT5nZXRJbmxpbmVFdmVudExpc3RlbmVyKGV2ZW50TmFtZXMoKS5jb3B5RXZl
bnQpOwogfQogCiB2b2lkIFNWR0VsZW1lbnRJbnN0YW5jZTo6c2V0T25jb3B5KFBhc3NSZWZQdHI8
RXZlbnRMaXN0ZW5lcj4gZXZlbnRMaXN0ZW5lcikKIHsKLSAgICBjb3JyZXNwb25kaW5nRWxlbWVu
dCgpLT5zZXRJbmxpbmVFdmVudExpc3RlbmVyRm9yVHlwZShldmVudE5hbWVzKCkuY29weUV2ZW50
LCBldmVudExpc3RlbmVyKTsKKyAgICBjb3JyZXNwb25kaW5nRWxlbWVudCgpLT5zZXRJbmxpbmVF
dmVudExpc3RlbmVyKGV2ZW50TmFtZXMoKS5jb3B5RXZlbnQsIGV2ZW50TGlzdGVuZXIpOwogfQog
CiBFdmVudExpc3RlbmVyKiBTVkdFbGVtZW50SW5zdGFuY2U6Om9uYmVmb3JlcGFzdGUoKSBjb25z
dAogewotICAgIHJldHVybiBjb3JyZXNwb25kaW5nRWxlbWVudCgpLT5pbmxpbmVFdmVudExpc3Rl
bmVyRm9yVHlwZShldmVudE5hbWVzKCkuYmVmb3JlcGFzdGVFdmVudCk7CisgICAgcmV0dXJuIGNv
cnJlc3BvbmRpbmdFbGVtZW50KCktPmdldElubGluZUV2ZW50TGlzdGVuZXIoZXZlbnROYW1lcygp
LmJlZm9yZXBhc3RlRXZlbnQpOwogfQogCiB2b2lkIFNWR0VsZW1lbnRJbnN0YW5jZTo6c2V0T25i
ZWZvcmVwYXN0ZShQYXNzUmVmUHRyPEV2ZW50TGlzdGVuZXI+IGV2ZW50TGlzdGVuZXIpCiB7Ci0g
ICAgY29ycmVzcG9uZGluZ0VsZW1lbnQoKS0+c2V0SW5saW5lRXZlbnRMaXN0ZW5lckZvclR5cGUo
ZXZlbnROYW1lcygpLmJlZm9yZXBhc3RlRXZlbnQsIGV2ZW50TGlzdGVuZXIpOworICAgIGNvcnJl
c3BvbmRpbmdFbGVtZW50KCktPnNldElubGluZUV2ZW50TGlzdGVuZXIoZXZlbnROYW1lcygpLmJl
Zm9yZXBhc3RlRXZlbnQsIGV2ZW50TGlzdGVuZXIpOwogfQogCiBFdmVudExpc3RlbmVyKiBTVkdF
bGVtZW50SW5zdGFuY2U6Om9ucGFzdGUoKSBjb25zdAogewotICAgIHJldHVybiBjb3JyZXNwb25k
aW5nRWxlbWVudCgpLT5pbmxpbmVFdmVudExpc3RlbmVyRm9yVHlwZShldmVudE5hbWVzKCkucGFz
dGVFdmVudCk7CisgICAgcmV0dXJuIGNvcnJlc3BvbmRpbmdFbGVtZW50KCktPmdldElubGluZUV2
ZW50TGlzdGVuZXIoZXZlbnROYW1lcygpLnBhc3RlRXZlbnQpOwogfQogCiB2b2lkIFNWR0VsZW1l
bnRJbnN0YW5jZTo6c2V0T25wYXN0ZShQYXNzUmVmUHRyPEV2ZW50TGlzdGVuZXI+IGV2ZW50TGlz
dGVuZXIpCiB7Ci0gICAgY29ycmVzcG9uZGluZ0VsZW1lbnQoKS0+c2V0SW5saW5lRXZlbnRMaXN0
ZW5lckZvclR5cGUoZXZlbnROYW1lcygpLnBhc3RlRXZlbnQsIGV2ZW50TGlzdGVuZXIpOworICAg
IGNvcnJlc3BvbmRpbmdFbGVtZW50KCktPnNldElubGluZUV2ZW50TGlzdGVuZXIoZXZlbnROYW1l
cygpLnBhc3RlRXZlbnQsIGV2ZW50TGlzdGVuZXIpOwogfQogCiBFdmVudExpc3RlbmVyKiBTVkdF
bGVtZW50SW5zdGFuY2U6Om9uZHJhZ2VudGVyKCkgY29uc3QKIHsKLSAgICByZXR1cm4gY29ycmVz
cG9uZGluZ0VsZW1lbnQoKS0+aW5saW5lRXZlbnRMaXN0ZW5lckZvclR5cGUoZXZlbnROYW1lcygp
LmRyYWdlbnRlckV2ZW50KTsKKyAgICByZXR1cm4gY29ycmVzcG9uZGluZ0VsZW1lbnQoKS0+Z2V0
SW5saW5lRXZlbnRMaXN0ZW5lcihldmVudE5hbWVzKCkuZHJhZ2VudGVyRXZlbnQpOwogfQogCiB2
b2lkIFNWR0VsZW1lbnRJbnN0YW5jZTo6c2V0T25kcmFnZW50ZXIoUGFzc1JlZlB0cjxFdmVudExp
c3RlbmVyPiBldmVudExpc3RlbmVyKQogewotICAgIGNvcnJlc3BvbmRpbmdFbGVtZW50KCktPnNl
dElubGluZUV2ZW50TGlzdGVuZXJGb3JUeXBlKGV2ZW50TmFtZXMoKS5kcmFnZW50ZXJFdmVudCwg
ZXZlbnRMaXN0ZW5lcik7CisgICAgY29ycmVzcG9uZGluZ0VsZW1lbnQoKS0+c2V0SW5saW5lRXZl
bnRMaXN0ZW5lcihldmVudE5hbWVzKCkuZHJhZ2VudGVyRXZlbnQsIGV2ZW50TGlzdGVuZXIpOwog
fQogCiBFdmVudExpc3RlbmVyKiBTVkdFbGVtZW50SW5zdGFuY2U6Om9uZHJhZ292ZXIoKSBjb25z
dAogewotICAgIHJldHVybiBjb3JyZXNwb25kaW5nRWxlbWVudCgpLT5pbmxpbmVFdmVudExpc3Rl
bmVyRm9yVHlwZShldmVudE5hbWVzKCkuZHJhZ292ZXJFdmVudCk7CisgICAgcmV0dXJuIGNvcnJl
c3BvbmRpbmdFbGVtZW50KCktPmdldElubGluZUV2ZW50TGlzdGVuZXIoZXZlbnROYW1lcygpLmRy
YWdvdmVyRXZlbnQpOwogfQogCiB2b2lkIFNWR0VsZW1lbnRJbnN0YW5jZTo6c2V0T25kcmFnb3Zl
cihQYXNzUmVmUHRyPEV2ZW50TGlzdGVuZXI+IGV2ZW50TGlzdGVuZXIpCiB7Ci0gICAgY29ycmVz
cG9uZGluZ0VsZW1lbnQoKS0+c2V0SW5saW5lRXZlbnRMaXN0ZW5lckZvclR5cGUoZXZlbnROYW1l
cygpLmRyYWdvdmVyRXZlbnQsIGV2ZW50TGlzdGVuZXIpOworICAgIGNvcnJlc3BvbmRpbmdFbGVt
ZW50KCktPnNldElubGluZUV2ZW50TGlzdGVuZXIoZXZlbnROYW1lcygpLmRyYWdvdmVyRXZlbnQs
IGV2ZW50TGlzdGVuZXIpOwogfQogCiBFdmVudExpc3RlbmVyKiBTVkdFbGVtZW50SW5zdGFuY2U6
Om9uZHJhZ2xlYXZlKCkgY29uc3QKIHsKLSAgICByZXR1cm4gY29ycmVzcG9uZGluZ0VsZW1lbnQo
KS0+aW5saW5lRXZlbnRMaXN0ZW5lckZvclR5cGUoZXZlbnROYW1lcygpLmRyYWdsZWF2ZUV2ZW50
KTsKKyAgICByZXR1cm4gY29ycmVzcG9uZGluZ0VsZW1lbnQoKS0+Z2V0SW5saW5lRXZlbnRMaXN0
ZW5lcihldmVudE5hbWVzKCkuZHJhZ2xlYXZlRXZlbnQpOwogfQogCiB2b2lkIFNWR0VsZW1lbnRJ
bnN0YW5jZTo6c2V0T25kcmFnbGVhdmUoUGFzc1JlZlB0cjxFdmVudExpc3RlbmVyPiBldmVudExp
c3RlbmVyKQogewotICAgIGNvcnJlc3BvbmRpbmdFbGVtZW50KCktPnNldElubGluZUV2ZW50TGlz
dGVuZXJGb3JUeXBlKGV2ZW50TmFtZXMoKS5kcmFnbGVhdmVFdmVudCwgZXZlbnRMaXN0ZW5lcik7
CisgICAgY29ycmVzcG9uZGluZ0VsZW1lbnQoKS0+c2V0SW5saW5lRXZlbnRMaXN0ZW5lcihldmVu
dE5hbWVzKCkuZHJhZ2xlYXZlRXZlbnQsIGV2ZW50TGlzdGVuZXIpOwogfQogCiBFdmVudExpc3Rl
bmVyKiBTVkdFbGVtZW50SW5zdGFuY2U6Om9uZHJvcCgpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIGNv
cnJlc3BvbmRpbmdFbGVtZW50KCktPmlubGluZUV2ZW50TGlzdGVuZXJGb3JUeXBlKGV2ZW50TmFt
ZXMoKS5kcm9wRXZlbnQpOworICAgIHJldHVybiBjb3JyZXNwb25kaW5nRWxlbWVudCgpLT5nZXRJ
bmxpbmVFdmVudExpc3RlbmVyKGV2ZW50TmFtZXMoKS5kcm9wRXZlbnQpOwogfQogCiB2b2lkIFNW
R0VsZW1lbnRJbnN0YW5jZTo6c2V0T25kcm9wKFBhc3NSZWZQdHI8RXZlbnRMaXN0ZW5lcj4gZXZl
bnRMaXN0ZW5lcikKIHsKLSAgICBjb3JyZXNwb25kaW5nRWxlbWVudCgpLT5zZXRJbmxpbmVFdmVu
dExpc3RlbmVyRm9yVHlwZShldmVudE5hbWVzKCkuZHJvcEV2ZW50LCBldmVudExpc3RlbmVyKTsK
KyAgICBjb3JyZXNwb25kaW5nRWxlbWVudCgpLT5zZXRJbmxpbmVFdmVudExpc3RlbmVyKGV2ZW50
TmFtZXMoKS5kcm9wRXZlbnQsIGV2ZW50TGlzdGVuZXIpOwogfQogCiBFdmVudExpc3RlbmVyKiBT
VkdFbGVtZW50SW5zdGFuY2U6Om9uZHJhZ3N0YXJ0KCkgY29uc3QKIHsKLSAgICByZXR1cm4gY29y
cmVzcG9uZGluZ0VsZW1lbnQoKS0+aW5saW5lRXZlbnRMaXN0ZW5lckZvclR5cGUoZXZlbnROYW1l
cygpLmRyYWdzdGFydEV2ZW50KTsKKyAgICByZXR1cm4gY29ycmVzcG9uZGluZ0VsZW1lbnQoKS0+
Z2V0SW5saW5lRXZlbnRMaXN0ZW5lcihldmVudE5hbWVzKCkuZHJhZ3N0YXJ0RXZlbnQpOwogfQog
CiB2b2lkIFNWR0VsZW1lbnRJbnN0YW5jZTo6c2V0T25kcmFnc3RhcnQoUGFzc1JlZlB0cjxFdmVu
dExpc3RlbmVyPiBldmVudExpc3RlbmVyKQogewotICAgIGNvcnJlc3BvbmRpbmdFbGVtZW50KCkt
PnNldElubGluZUV2ZW50TGlzdGVuZXJGb3JUeXBlKGV2ZW50TmFtZXMoKS5kcmFnc3RhcnRFdmVu
dCwgZXZlbnRMaXN0ZW5lcik7CisgICAgY29ycmVzcG9uZGluZ0VsZW1lbnQoKS0+c2V0SW5saW5l
RXZlbnRMaXN0ZW5lcihldmVudE5hbWVzKCkuZHJhZ3N0YXJ0RXZlbnQsIGV2ZW50TGlzdGVuZXIp
OwogfQogCiBFdmVudExpc3RlbmVyKiBTVkdFbGVtZW50SW5zdGFuY2U6Om9uZHJhZygpIGNvbnN0
CiB7Ci0gICAgcmV0dXJuIGNvcnJlc3BvbmRpbmdFbGVtZW50KCktPmlubGluZUV2ZW50TGlzdGVu
ZXJGb3JUeXBlKGV2ZW50TmFtZXMoKS5kcmFnRXZlbnQpOworICAgIHJldHVybiBjb3JyZXNwb25k
aW5nRWxlbWVudCgpLT5nZXRJbmxpbmVFdmVudExpc3RlbmVyKGV2ZW50TmFtZXMoKS5kcmFnRXZl
bnQpOwogfQogCiB2b2lkIFNWR0VsZW1lbnRJbnN0YW5jZTo6c2V0T25kcmFnKFBhc3NSZWZQdHI8
RXZlbnRMaXN0ZW5lcj4gZXZlbnRMaXN0ZW5lcikKIHsKLSAgICBjb3JyZXNwb25kaW5nRWxlbWVu
dCgpLT5zZXRJbmxpbmVFdmVudExpc3RlbmVyRm9yVHlwZShldmVudE5hbWVzKCkuZHJhZ0V2ZW50
LCBldmVudExpc3RlbmVyKTsKKyAgICBjb3JyZXNwb25kaW5nRWxlbWVudCgpLT5zZXRJbmxpbmVF
dmVudExpc3RlbmVyKGV2ZW50TmFtZXMoKS5kcmFnRXZlbnQsIGV2ZW50TGlzdGVuZXIpOwogfQog
CiBFdmVudExpc3RlbmVyKiBTVkdFbGVtZW50SW5zdGFuY2U6Om9uZHJhZ2VuZCgpIGNvbnN0CiB7
Ci0gICAgcmV0dXJuIGNvcnJlc3BvbmRpbmdFbGVtZW50KCktPmlubGluZUV2ZW50TGlzdGVuZXJG
b3JUeXBlKGV2ZW50TmFtZXMoKS5kcmFnZW5kRXZlbnQpOworICAgIHJldHVybiBjb3JyZXNwb25k
aW5nRWxlbWVudCgpLT5nZXRJbmxpbmVFdmVudExpc3RlbmVyKGV2ZW50TmFtZXMoKS5kcmFnZW5k
RXZlbnQpOwogfQogCiB2b2lkIFNWR0VsZW1lbnRJbnN0YW5jZTo6c2V0T25kcmFnZW5kKFBhc3NS
ZWZQdHI8RXZlbnRMaXN0ZW5lcj4gZXZlbnRMaXN0ZW5lcikKIHsKLSAgICBjb3JyZXNwb25kaW5n
RWxlbWVudCgpLT5zZXRJbmxpbmVFdmVudExpc3RlbmVyRm9yVHlwZShldmVudE5hbWVzKCkuZHJh
Z2VuZEV2ZW50LCBldmVudExpc3RlbmVyKTsKKyAgICBjb3JyZXNwb25kaW5nRWxlbWVudCgpLT5z
ZXRJbmxpbmVFdmVudExpc3RlbmVyKGV2ZW50TmFtZXMoKS5kcmFnZW5kRXZlbnQsIGV2ZW50TGlz
dGVuZXIpOwogfQogCiBFdmVudExpc3RlbmVyKiBTVkdFbGVtZW50SW5zdGFuY2U6Om9ucmVzZXQo
KSBjb25zdAogewotICAgIHJldHVybiBjb3JyZXNwb25kaW5nRWxlbWVudCgpLT5pbmxpbmVFdmVu
dExpc3RlbmVyRm9yVHlwZShldmVudE5hbWVzKCkucmVzZXRFdmVudCk7CisgICAgcmV0dXJuIGNv
cnJlc3BvbmRpbmdFbGVtZW50KCktPmdldElubGluZUV2ZW50TGlzdGVuZXIoZXZlbnROYW1lcygp
LnJlc2V0RXZlbnQpOwogfQogCiB2b2lkIFNWR0VsZW1lbnRJbnN0YW5jZTo6c2V0T25yZXNldChQ
YXNzUmVmUHRyPEV2ZW50TGlzdGVuZXI+IGV2ZW50TGlzdGVuZXIpCiB7Ci0gICAgY29ycmVzcG9u
ZGluZ0VsZW1lbnQoKS0+c2V0SW5saW5lRXZlbnRMaXN0ZW5lckZvclR5cGUoZXZlbnROYW1lcygp
LnJlc2V0RXZlbnQsIGV2ZW50TGlzdGVuZXIpOworICAgIGNvcnJlc3BvbmRpbmdFbGVtZW50KCkt
PnNldElubGluZUV2ZW50TGlzdGVuZXIoZXZlbnROYW1lcygpLnJlc2V0RXZlbnQsIGV2ZW50TGlz
dGVuZXIpOwogfQogCiBFdmVudExpc3RlbmVyKiBTVkdFbGVtZW50SW5zdGFuY2U6Om9ucmVzaXpl
KCkgY29uc3QKIHsKLSAgICByZXR1cm4gY29ycmVzcG9uZGluZ0VsZW1lbnQoKS0+aW5saW5lRXZl
bnRMaXN0ZW5lckZvclR5cGUoZXZlbnROYW1lcygpLnJlc2l6ZUV2ZW50KTsKKyAgICByZXR1cm4g
Y29ycmVzcG9uZGluZ0VsZW1lbnQoKS0+Z2V0SW5saW5lRXZlbnRMaXN0ZW5lcihldmVudE5hbWVz
KCkucmVzaXplRXZlbnQpOwogfQogCiB2b2lkIFNWR0VsZW1lbnRJbnN0YW5jZTo6c2V0T25yZXNp
emUoUGFzc1JlZlB0cjxFdmVudExpc3RlbmVyPiBldmVudExpc3RlbmVyKQogewotICAgIGNvcnJl
c3BvbmRpbmdFbGVtZW50KCktPnNldElubGluZUV2ZW50TGlzdGVuZXJGb3JUeXBlKGV2ZW50TmFt
ZXMoKS5yZXNpemVFdmVudCwgZXZlbnRMaXN0ZW5lcik7CisgICAgY29ycmVzcG9uZGluZ0VsZW1l
bnQoKS0+c2V0SW5saW5lRXZlbnRMaXN0ZW5lcihldmVudE5hbWVzKCkucmVzaXplRXZlbnQsIGV2
ZW50TGlzdGVuZXIpOwogfQogCiBFdmVudExpc3RlbmVyKiBTVkdFbGVtZW50SW5zdGFuY2U6Om9u
c2Nyb2xsKCkgY29uc3QKIHsKLSAgICByZXR1cm4gY29ycmVzcG9uZGluZ0VsZW1lbnQoKS0+aW5s
aW5lRXZlbnRMaXN0ZW5lckZvclR5cGUoZXZlbnROYW1lcygpLnNjcm9sbEV2ZW50KTsKKyAgICBy
ZXR1cm4gY29ycmVzcG9uZGluZ0VsZW1lbnQoKS0+Z2V0SW5saW5lRXZlbnRMaXN0ZW5lcihldmVu
dE5hbWVzKCkuc2Nyb2xsRXZlbnQpOwogfQogCiB2b2lkIFNWR0VsZW1lbnRJbnN0YW5jZTo6c2V0
T25zY3JvbGwoUGFzc1JlZlB0cjxFdmVudExpc3RlbmVyPiBldmVudExpc3RlbmVyKQogewotICAg
IGNvcnJlc3BvbmRpbmdFbGVtZW50KCktPnNldElubGluZUV2ZW50TGlzdGVuZXJGb3JUeXBlKGV2
ZW50TmFtZXMoKS5zY3JvbGxFdmVudCwgZXZlbnRMaXN0ZW5lcik7CisgICAgY29ycmVzcG9uZGlu
Z0VsZW1lbnQoKS0+c2V0SW5saW5lRXZlbnRMaXN0ZW5lcihldmVudE5hbWVzKCkuc2Nyb2xsRXZl
bnQsIGV2ZW50TGlzdGVuZXIpOwogfQogCiBFdmVudExpc3RlbmVyKiBTVkdFbGVtZW50SW5zdGFu
Y2U6Om9uc2VhcmNoKCkgY29uc3QKIHsKLSAgICByZXR1cm4gY29ycmVzcG9uZGluZ0VsZW1lbnQo
KS0+aW5saW5lRXZlbnRMaXN0ZW5lckZvclR5cGUoZXZlbnROYW1lcygpLnNlYXJjaEV2ZW50KTsK
KyAgICByZXR1cm4gY29ycmVzcG9uZGluZ0VsZW1lbnQoKS0+Z2V0SW5saW5lRXZlbnRMaXN0ZW5l
cihldmVudE5hbWVzKCkuc2VhcmNoRXZlbnQpOwogfQogCiB2b2lkIFNWR0VsZW1lbnRJbnN0YW5j
ZTo6c2V0T25zZWFyY2goUGFzc1JlZlB0cjxFdmVudExpc3RlbmVyPiBldmVudExpc3RlbmVyKQog
ewotICAgIGNvcnJlc3BvbmRpbmdFbGVtZW50KCktPnNldElubGluZUV2ZW50TGlzdGVuZXJGb3JU
eXBlKGV2ZW50TmFtZXMoKS5zZWFyY2hFdmVudCwgZXZlbnRMaXN0ZW5lcik7CisgICAgY29ycmVz
cG9uZGluZ0VsZW1lbnQoKS0+c2V0SW5saW5lRXZlbnRMaXN0ZW5lcihldmVudE5hbWVzKCkuc2Vh
cmNoRXZlbnQsIGV2ZW50TGlzdGVuZXIpOwogfQogCiBFdmVudExpc3RlbmVyKiBTVkdFbGVtZW50
SW5zdGFuY2U6Om9uc2VsZWN0KCkgY29uc3QKIHsKLSAgICByZXR1cm4gY29ycmVzcG9uZGluZ0Vs
ZW1lbnQoKS0+aW5saW5lRXZlbnRMaXN0ZW5lckZvclR5cGUoZXZlbnROYW1lcygpLnNlbGVjdEV2
ZW50KTsKKyAgICByZXR1cm4gY29ycmVzcG9uZGluZ0VsZW1lbnQoKS0+Z2V0SW5saW5lRXZlbnRM
aXN0ZW5lcihldmVudE5hbWVzKCkuc2VsZWN0RXZlbnQpOwogfQogCiB2b2lkIFNWR0VsZW1lbnRJ
bnN0YW5jZTo6c2V0T25zZWxlY3QoUGFzc1JlZlB0cjxFdmVudExpc3RlbmVyPiBldmVudExpc3Rl
bmVyKQogewotICAgIGNvcnJlc3BvbmRpbmdFbGVtZW50KCktPnNldElubGluZUV2ZW50TGlzdGVu
ZXJGb3JUeXBlKGV2ZW50TmFtZXMoKS5zZWxlY3RFdmVudCwgZXZlbnRMaXN0ZW5lcik7CisgICAg
Y29ycmVzcG9uZGluZ0VsZW1lbnQoKS0+c2V0SW5saW5lRXZlbnRMaXN0ZW5lcihldmVudE5hbWVz
KCkuc2VsZWN0RXZlbnQsIGV2ZW50TGlzdGVuZXIpOwogfQogCiBFdmVudExpc3RlbmVyKiBTVkdF
bGVtZW50SW5zdGFuY2U6Om9uc2VsZWN0c3RhcnQoKSBjb25zdAogewotICAgIHJldHVybiBjb3Jy
ZXNwb25kaW5nRWxlbWVudCgpLT5pbmxpbmVFdmVudExpc3RlbmVyRm9yVHlwZShldmVudE5hbWVz
KCkuc2VsZWN0c3RhcnRFdmVudCk7CisgICAgcmV0dXJuIGNvcnJlc3BvbmRpbmdFbGVtZW50KCkt
PmdldElubGluZUV2ZW50TGlzdGVuZXIoZXZlbnROYW1lcygpLnNlbGVjdHN0YXJ0RXZlbnQpOwog
fQogCiB2b2lkIFNWR0VsZW1lbnRJbnN0YW5jZTo6c2V0T25zZWxlY3RzdGFydChQYXNzUmVmUHRy
PEV2ZW50TGlzdGVuZXI+IGV2ZW50TGlzdGVuZXIpCiB7Ci0gICAgY29ycmVzcG9uZGluZ0VsZW1l
bnQoKS0+c2V0SW5saW5lRXZlbnRMaXN0ZW5lckZvclR5cGUoZXZlbnROYW1lcygpLnNlbGVjdHN0
YXJ0RXZlbnQsIGV2ZW50TGlzdGVuZXIpOworICAgIGNvcnJlc3BvbmRpbmdFbGVtZW50KCktPnNl
dElubGluZUV2ZW50TGlzdGVuZXIoZXZlbnROYW1lcygpLnNlbGVjdHN0YXJ0RXZlbnQsIGV2ZW50
TGlzdGVuZXIpOwogfQogCiBFdmVudExpc3RlbmVyKiBTVkdFbGVtZW50SW5zdGFuY2U6Om9uc3Vi
bWl0KCkgY29uc3QKIHsKLSAgICByZXR1cm4gY29ycmVzcG9uZGluZ0VsZW1lbnQoKS0+aW5saW5l
RXZlbnRMaXN0ZW5lckZvclR5cGUoZXZlbnROYW1lcygpLnN1Ym1pdEV2ZW50KTsKKyAgICByZXR1
cm4gY29ycmVzcG9uZGluZ0VsZW1lbnQoKS0+Z2V0SW5saW5lRXZlbnRMaXN0ZW5lcihldmVudE5h
bWVzKCkuc3VibWl0RXZlbnQpOwogfQogCiB2b2lkIFNWR0VsZW1lbnRJbnN0YW5jZTo6c2V0T25z
dWJtaXQoUGFzc1JlZlB0cjxFdmVudExpc3RlbmVyPiBldmVudExpc3RlbmVyKQogewotICAgIGNv
cnJlc3BvbmRpbmdFbGVtZW50KCktPnNldElubGluZUV2ZW50TGlzdGVuZXJGb3JUeXBlKGV2ZW50
TmFtZXMoKS5zdWJtaXRFdmVudCwgZXZlbnRMaXN0ZW5lcik7CisgICAgY29ycmVzcG9uZGluZ0Vs
ZW1lbnQoKS0+c2V0SW5saW5lRXZlbnRMaXN0ZW5lcihldmVudE5hbWVzKCkuc3VibWl0RXZlbnQs
IGV2ZW50TGlzdGVuZXIpOwogfQogCiBFdmVudExpc3RlbmVyKiBTVkdFbGVtZW50SW5zdGFuY2U6
Om9udW5sb2FkKCkgY29uc3QKIHsKLSAgICByZXR1cm4gY29ycmVzcG9uZGluZ0VsZW1lbnQoKS0+
aW5saW5lRXZlbnRMaXN0ZW5lckZvclR5cGUoZXZlbnROYW1lcygpLnVubG9hZEV2ZW50KTsKKyAg
ICByZXR1cm4gY29ycmVzcG9uZGluZ0VsZW1lbnQoKS0+Z2V0SW5saW5lRXZlbnRMaXN0ZW5lcihl
dmVudE5hbWVzKCkudW5sb2FkRXZlbnQpOwogfQogCiB2b2lkIFNWR0VsZW1lbnRJbnN0YW5jZTo6
c2V0T251bmxvYWQoUGFzc1JlZlB0cjxFdmVudExpc3RlbmVyPiBldmVudExpc3RlbmVyKQogewot
ICAgIGNvcnJlc3BvbmRpbmdFbGVtZW50KCktPnNldElubGluZUV2ZW50TGlzdGVuZXJGb3JUeXBl
KGV2ZW50TmFtZXMoKS51bmxvYWRFdmVudCwgZXZlbnRMaXN0ZW5lcik7CisgICAgY29ycmVzcG9u
ZGluZ0VsZW1lbnQoKS0+c2V0SW5saW5lRXZlbnRMaXN0ZW5lcihldmVudE5hbWVzKCkudW5sb2Fk
RXZlbnQsIGV2ZW50TGlzdGVuZXIpOwogfQogCiB9CkluZGV4OiBzdmcvU1ZHSW1hZ2VMb2FkZXIu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIHN2Zy9TVkdJbWFnZUxvYWRlci5jcHAJKHJldmlzaW9uIDQyNjAy
KQorKysgc3ZnL1NWR0ltYWdlTG9hZGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDMsNyArNDMs
NyBAQCBTVkdJbWFnZUxvYWRlcjo6flNWR0ltYWdlTG9hZGVyKCkKIHZvaWQgU1ZHSW1hZ2VMb2Fk
ZXI6OmRpc3BhdGNoTG9hZEV2ZW50KCkKIHsKICAgICBpZiAoaW1hZ2UoKS0+ZXJyb3JPY2N1cnJl
ZCgpKQotICAgICAgICBlbGVtZW50KCktPmRpc3BhdGNoRXZlbnRGb3JUeXBlKGV2ZW50TmFtZXMo
KS5lcnJvckV2ZW50LCBmYWxzZSwgZmFsc2UpOworICAgICAgICBlbGVtZW50KCktPmRpc3BhdGNo
RXZlbnQoZXZlbnROYW1lcygpLmVycm9yRXZlbnQsIGZhbHNlLCBmYWxzZSk7CiAgICAgZWxzZSB7
CiAgICAgICAgIFNWR0ltYWdlRWxlbWVudCogaW1hZ2VFbGVtZW50ID0gc3RhdGljX2Nhc3Q8U1ZH
SW1hZ2VFbGVtZW50Kj4oZWxlbWVudCgpKTsKICAgICAgICAgaWYgKGltYWdlRWxlbWVudC0+ZXh0
ZXJuYWxSZXNvdXJjZXNSZXF1aXJlZEJhc2VWYWx1ZSgpKQpJbmRleDogc3ZnL1NWR1NWR0VsZW1l
bnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIHN2Zy9TVkdTVkdFbGVtZW50LmNwcAkocmV2aXNpb24gNDI2
MDIpCisrKyBzdmcvU1ZHU1ZHRWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM0LDYgKzM0
LDcgQEAKICNpbmNsdWRlICJGbG9hdFJlY3QuaCIKICNpbmNsdWRlICJGcmFtZS5oIgogI2luY2x1
ZGUgIkhUTUxOYW1lcy5oIgorI2luY2x1ZGUgIkpTTGF6eUV2ZW50TGlzdGVuZXIuaCIKICNpbmNs
dWRlICJSZW5kZXJTVkdWaWV3cG9ydENvbnRhaW5lci5oIgogI2luY2x1ZGUgIlJlbmRlclNWR1Jv
b3QuaCIKICNpbmNsdWRlICJTVkdBbmdsZS5oIgpAQCAtMjIwLDEzICsyMjEsMTMgQEAgdm9pZCBT
VkdTVkdFbGVtZW50OjpwYXJzZU1hcHBlZEF0dHJpYnV0ZQogCiAgICAgICAgIC8vIE9ubHkgaGFu
ZGxlIGV2ZW50cyBpZiB3ZSdyZSB0aGUgb3V0ZXJtb3N0IDxzdmc+IGVsZW1lbnQKICAgICAgICAg
aWYgKGF0dHItPm5hbWUoKSA9PSBvbnVubG9hZEF0dHIpCi0gICAgICAgICAgICBkb2N1bWVudCgp
LT5zZXRXaW5kb3dJbmxpbmVFdmVudExpc3RlbmVyRm9yVHlwZUFuZEF0dHJpYnV0ZShldmVudE5h
bWVzKCkudW5sb2FkRXZlbnQsIGF0dHIpOworICAgICAgICAgICAgc2V0V2luZG93SW5saW5lRXZl
bnRMaXN0ZW5lcihldmVudE5hbWVzKCkudW5sb2FkRXZlbnQsIGNyZWF0ZUlubGluZUV2ZW50TGlz
dGVuZXIoZG9jdW1lbnQoKS0+ZnJhbWUoKSwgYXR0cikpOwogICAgICAgICBlbHNlIGlmIChhdHRy
LT5uYW1lKCkgPT0gb25yZXNpemVBdHRyKQotICAgICAgICAgICAgZG9jdW1lbnQoKS0+c2V0V2lu
ZG93SW5saW5lRXZlbnRMaXN0ZW5lckZvclR5cGVBbmRBdHRyaWJ1dGUoZXZlbnROYW1lcygpLnJl
c2l6ZUV2ZW50LCBhdHRyKTsKKyAgICAgICAgICAgIHNldFdpbmRvd0lubGluZUV2ZW50TGlzdGVu
ZXIoZXZlbnROYW1lcygpLnJlc2l6ZUV2ZW50LCBjcmVhdGVJbmxpbmVFdmVudExpc3RlbmVyKGRv
Y3VtZW50KCktPmZyYW1lKCksIGF0dHIpKTsKICAgICAgICAgZWxzZSBpZiAoYXR0ci0+bmFtZSgp
ID09IG9uc2Nyb2xsQXR0cikKLSAgICAgICAgICAgIGRvY3VtZW50KCktPnNldFdpbmRvd0lubGlu
ZUV2ZW50TGlzdGVuZXJGb3JUeXBlQW5kQXR0cmlidXRlKGV2ZW50TmFtZXMoKS5zY3JvbGxFdmVu
dCwgYXR0cik7CisgICAgICAgICAgICBzZXRXaW5kb3dJbmxpbmVFdmVudExpc3RlbmVyKGV2ZW50
TmFtZXMoKS5zY3JvbGxFdmVudCwgY3JlYXRlSW5saW5lRXZlbnRMaXN0ZW5lcihkb2N1bWVudCgp
LT5mcmFtZSgpLCBhdHRyKSk7CiAgICAgICAgIGVsc2UgaWYgKGF0dHItPm5hbWUoKSA9PSBTVkdO
YW1lczo6b256b29tQXR0cikKLSAgICAgICAgICAgIGRvY3VtZW50KCktPnNldFdpbmRvd0lubGlu
ZUV2ZW50TGlzdGVuZXJGb3JUeXBlQW5kQXR0cmlidXRlKGV2ZW50TmFtZXMoKS56b29tRXZlbnQs
IGF0dHIpOworICAgICAgICAgICAgc2V0V2luZG93SW5saW5lRXZlbnRMaXN0ZW5lcihldmVudE5h
bWVzKCkuem9vbUV2ZW50LCBjcmVhdGVJbmxpbmVFdmVudExpc3RlbmVyKGRvY3VtZW50KCktPmZy
YW1lKCksIGF0dHIpKTsKICAgICAgICAgZWxzZQogICAgICAgICAgICAgc2V0TGlzdGVuZXIgPSBm
YWxzZTsKICAKQEAgLTIzNSw5ICsyMzYsOSBAQCB2b2lkIFNWR1NWR0VsZW1lbnQ6OnBhcnNlTWFw
cGVkQXR0cmlidXRlCiAgICAgfQogCiAgICAgaWYgKGF0dHItPm5hbWUoKSA9PSBvbmFib3J0QXR0
cikKLSAgICAgICAgZG9jdW1lbnQoKS0+c2V0V2luZG93SW5saW5lRXZlbnRMaXN0ZW5lckZvclR5
cGVBbmRBdHRyaWJ1dGUoZXZlbnROYW1lcygpLmFib3J0RXZlbnQsIGF0dHIpOworICAgICAgICBz
ZXRXaW5kb3dJbmxpbmVFdmVudExpc3RlbmVyKGV2ZW50TmFtZXMoKS5hYm9ydEV2ZW50LCBjcmVh
dGVJbmxpbmVFdmVudExpc3RlbmVyKGRvY3VtZW50KCktPmZyYW1lKCksIGF0dHIpKTsKICAgICBl
bHNlIGlmIChhdHRyLT5uYW1lKCkgPT0gb25lcnJvckF0dHIpCi0gICAgICAgIGRvY3VtZW50KCkt
PnNldFdpbmRvd0lubGluZUV2ZW50TGlzdGVuZXJGb3JUeXBlQW5kQXR0cmlidXRlKGV2ZW50TmFt
ZXMoKS5lcnJvckV2ZW50LCBhdHRyKTsKKyAgICAgICAgc2V0V2luZG93SW5saW5lRXZlbnRMaXN0
ZW5lcihldmVudE5hbWVzKCkuZXJyb3JFdmVudCwgY3JlYXRlSW5saW5lRXZlbnRMaXN0ZW5lcihk
b2N1bWVudCgpLT5mcmFtZSgpLCBhdHRyKSk7CiAgICAgZWxzZSBpZiAoYXR0ci0+bmFtZSgpID09
IFNWR05hbWVzOjp4QXR0cikKICAgICAgICAgc2V0WEJhc2VWYWx1ZShTVkdMZW5ndGgoTGVuZ3Ro
TW9kZVdpZHRoLCBhdHRyLT52YWx1ZSgpKSk7CiAgICAgZWxzZSBpZiAoYXR0ci0+bmFtZSgpID09
IFNWR05hbWVzOjp5QXR0cikKSW5kZXg6IHN2Zy9TVkdTY3JpcHRFbGVtZW50LmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBzdmcvU1ZHU2NyaXB0RWxlbWVudC5jcHAJKHJldmlzaW9uIDQyNjAyKQorKysgc3Zn
L1NWR1NjcmlwdEVsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMDMsNyArMjAzLDcgQEAg
dm9pZCBTVkdTY3JpcHRFbGVtZW50OjpkaXNwYXRjaExvYWRFdmVudAogCiB2b2lkIFNWR1Njcmlw
dEVsZW1lbnQ6OmRpc3BhdGNoRXJyb3JFdmVudCgpCiB7Ci0gICAgZGlzcGF0Y2hFdmVudEZvclR5
cGUoZXZlbnROYW1lcygpLmVycm9yRXZlbnQsIHRydWUsIGZhbHNlKTsKKyAgICBkaXNwYXRjaEV2
ZW50KGV2ZW50TmFtZXMoKS5lcnJvckV2ZW50LCB0cnVlLCBmYWxzZSk7CiB9CiAKIH0KSW5kZXg6
IHdtbC9XTUxJbnB1dEVsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIHdtbC9XTUxJbnB1dEVsZW1l
bnQuY3BwCShyZXZpc2lvbiA0MjYwMikKKysrIHdtbC9XTUxJbnB1dEVsZW1lbnQuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0zMDEsNyArMzAxLDcgQEAgdm9pZCBXTUxJbnB1dEVsZW1lbnQ6OmRlZmF1
bHRFdmVudEhhbmRsZQogICAgICAgICAvLyBGaXJlIG9uQ2hhbmdlIGZvciB0ZXh0IGZpZWxkcy4K
ICAgICAgICAgUmVuZGVyT2JqZWN0KiByID0gcmVuZGVyZXIoKTsKICAgICAgICAgaWYgKHIgJiYg
ci0+aXNFZGl0ZWQoKSkgewotICAgICAgICAgICAgZGlzcGF0Y2hFdmVudEZvclR5cGUoZXZlbnRO
YW1lcygpLmNoYW5nZUV2ZW50LCB0cnVlLCBmYWxzZSk7CisgICAgICAgICAgICBkaXNwYXRjaEV2
ZW50KGV2ZW50TmFtZXMoKS5jaGFuZ2VFdmVudCwgdHJ1ZSwgZmFsc2UpOwogICAgICAgICAgICAg
CiAgICAgICAgICAgICAvLyBSZWZldGNoIHRoZSByZW5kZXJlciBzaW5jZSBhcmJpdHJhcnkgSlMg
Y29kZSBydW4gZHVyaW5nIG9uY2hhbmdlIGNhbiBkbyBhbnl0aGluZywgaW5jbHVkaW5nIGRlc3Ry
b3lpbmcgaXQuCiAgICAgICAgICAgICByID0gcmVuZGVyZXIoKTsK
</data>
<flag name="review"
          id="14778"
          type_id="1"
          status="+"
          setter="oliver"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>29603</attachid>
            <date>2009-04-19 00:15:54 -0700</date>
            <delta_ts>2009-04-19 00:30:33 -0700</delta_ts>
            <desc>Next patch</desc>
            <filename>patch.txt</filename>
            <type>text/plain</type>
            <size>10621</size>
            <attacher name="Geoffrey Garen">ggaren</attacher>
            
              <data encoding="base64">SW5kZXg6IENoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBDaGFuZ2VMb2cJKHJldmlzaW9uIDQyNjUy
KQorKysgQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMzYgQEAKKzIwMDktMDQt
MTggIEdlb2ZmcmV5IEdhcmVuICA8Z2dhcmVuQGFwcGxlLmNvbT4KKworICAgICAgICBSZXZpZXdl
ZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBNb3JlIGZpeCBmb3IgaHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIxMjYwCisgICAgICAgIFVuYm91bmRlZCBtZW1v
cnkgZ3Jvd3RoIHdoZW4gY2h1cm5pbmcgZWxlbWVudHMgd2l0aCBhbm9ueW1vdXMgZXZlbnQgaGFu
ZGxlciBmdW5jdGlvbnMKKyAgICAgICAgCisgICAgICAgIFJlbW92ZWQgYSBsaXR0bGUgbW9yZSBj
b21wbGV4aXR5IGZyb20gZXZlbnQgaGFuZGxlciBjcmVhdGlvbiBhbmQgZGVzdHJ1Y3Rpb24uCisg
ICAgICAgIAorICAgICAgICBSZW1vdmVkIHRoZSBqc1Byb3RlY3RlZEV2ZW50TGlzdGVuZXJzLCBq
c1Byb3RlY3RlZElubGluZUV2ZW50TGlzdGVuZXJzLAorICAgICAgICBhbmQganNJbmxpbmVFdmVu
dExpc3RlbmVycyBtYXBzLCBhbmQgYWxsIHRoZSBjb2RlIGZvciBtYW5hZ2luZyB0aGVtLgorICAg
ICAgICAKKyAgICAgICAgUHJvdGVjdGVkRXZlbnRMaXN0ZW5lcnMgZG9uJ3QgZXhpc3QgYW55bW9y
ZSwgc28gdGhleSdyZSBlYXN5IHRvIG5peC4KKyAgICAgICAgCisgICAgICAgIElubGluZSBFdmVu
dExpc3RlbmVycyBkbyBzdGlsbCBleGlzdCwgYnV0IHRoZXJlJ3Mgbm8gcmVhc29uIHRvIHRyYWNr
CisgICAgICAgIHRoZW0gaW4gYSBtYXAuIFRoZSBtYXAgZXhpc3RzIHRvIGVuYWJsZSAncmVtb3Zl
RXZlbnRMaXN0ZW5lcicgdG8gYXNzb2NpYXRlCisgICAgICAgIGEgdW5pcXVlIEpTRXZlbnRMaXN0
ZW5lciB3aXRoIGEgZ2l2ZW4gSmF2YVNjcmlwdCBmdW5jdGlvbi4gQnV0IHRoZQorICAgICAgICAn
cmVtb3ZlRXZlbnRMaXN0ZW5lcicgQVBJIG9ubHkgd29ya3Mgd2l0aCBub24taW5saW5lIGV2ZW50
IGxpc3RlbmVycyEKKyAgICAgICAgCisgICAgICAgICogYmluZGluZ3MvanMvSlNET01HbG9iYWxP
YmplY3QuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SlNET01HbG9iYWxPYmplY3Q6On5KU0RPTUds
b2JhbE9iamVjdCk6CisgICAgICAgIChXZWJDb3JlOjpKU0RPTUdsb2JhbE9iamVjdDo6ZmluZEpT
RXZlbnRMaXN0ZW5lcik6CisgICAgICAgIChXZWJDb3JlOjpKU0RPTUdsb2JhbE9iamVjdDo6Zmlu
ZE9yQ3JlYXRlSlNFdmVudExpc3RlbmVyKToKKyAgICAgICAgKFdlYkNvcmU6OkpTRE9NR2xvYmFs
T2JqZWN0OjpjcmVhdGVKU0lubGluZUV2ZW50TGlzdGVuZXIpOgorICAgICAgICAqIGJpbmRpbmdz
L2pzL0pTRE9NR2xvYmFsT2JqZWN0Lmg6CisgICAgICAgICogYmluZGluZ3MvanMvSlNFdmVudExp
c3RlbmVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkpTRXZlbnRMaXN0ZW5lcjo6SlNFdmVudExp
c3RlbmVyKToKKyAgICAgICAgKFdlYkNvcmU6OkpTRXZlbnRMaXN0ZW5lcjo6Y2xlYXJKU0Z1bmN0
aW9uSW5saW5lKToKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU0xhenlFdmVudExpc3RlbmVyLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OkpTTGF6eUV2ZW50TGlzdGVuZXI6On5KU0xhenlFdmVudExp
c3RlbmVyKToKKyAgICAgICAgKFdlYkNvcmU6OkpTTGF6eUV2ZW50TGlzdGVuZXI6OnBhcnNlQ29k
ZSk6CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy9Db2RlR2VuZXJhdG9ySlMucG06CisKIDIw
MDktMDQtMTggIERhbiBCZXJuc3RlaW4gIDxtaXR6QGFwcGxlLmNvbT4KIAogICAgICAgICBSZXZp
ZXdlZCBieSBHZW9mZnJleSBHYXJlbi4KSW5kZXg6IGJpbmRpbmdzL2pzL0pTRE9NR2xvYmFsT2Jq
ZWN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBiaW5kaW5ncy9qcy9KU0RPTUdsb2JhbE9iamVjdC5jcHAJ
KHJldmlzaW9uIDQyNjQ0KQorKysgYmluZGluZ3MvanMvSlNET01HbG9iYWxPYmplY3QuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC01MywyNiArNTMsMTAgQEAgSlNET01HbG9iYWxPYmplY3Q6OkpTRE9N
R2xvYmFsT2JqZWN0KFBhcwogCiBKU0RPTUdsb2JhbE9iamVjdDo6fkpTRE9NR2xvYmFsT2JqZWN0
KCkKIHsKLSAgICAvLyBDbGVhciBhbnkgYmFja3BvaW50ZXJzIHRvIHRoZSB3aW5kb3cKLSAgICBQ
cm90ZWN0ZWRMaXN0ZW5lcnNNYXA6Oml0ZXJhdG9yIGkxID0gZCgpLT5qc1Byb3RlY3RlZEV2ZW50
TGlzdGVuZXJzLmJlZ2luKCk7Ci0gICAgUHJvdGVjdGVkTGlzdGVuZXJzTWFwOjppdGVyYXRvciBl
MSA9IGQoKS0+anNQcm90ZWN0ZWRFdmVudExpc3RlbmVycy5lbmQoKTsKLSAgICBmb3IgKDsgaTEg
IT0gZTE7ICsraTEpCi0gICAgICAgIGkxLT5zZWNvbmQtPmNsZWFyR2xvYmFsT2JqZWN0KCk7Ci0K
LSAgICBpMSA9IGQoKS0+anNQcm90ZWN0ZWRJbmxpbmVFdmVudExpc3RlbmVycy5iZWdpbigpOwot
ICAgIGUxID0gZCgpLT5qc1Byb3RlY3RlZElubGluZUV2ZW50TGlzdGVuZXJzLmVuZCgpOwotICAg
IGZvciAoOyBpMSAhPSBlMTsgKytpMSkKLSAgICAgICAgaTEtPnNlY29uZC0+Y2xlYXJHbG9iYWxP
YmplY3QoKTsKLQogICAgIEpTTGlzdGVuZXJzTWFwOjppdGVyYXRvciBpMiA9IGQoKS0+anNFdmVu
dExpc3RlbmVycy5iZWdpbigpOwogICAgIEpTTGlzdGVuZXJzTWFwOjppdGVyYXRvciBlMiA9IGQo
KS0+anNFdmVudExpc3RlbmVycy5lbmQoKTsKICAgICBmb3IgKDsgaTIgIT0gZTI7ICsraTIpCiAg
ICAgICAgIGkyLT5zZWNvbmQtPmNsZWFyR2xvYmFsT2JqZWN0KCk7Ci0KLSAgICBpMiA9IGQoKS0+
anNJbmxpbmVFdmVudExpc3RlbmVycy5iZWdpbigpOwotICAgIGUyID0gZCgpLT5qc0lubGluZUV2
ZW50TGlzdGVuZXJzLmVuZCgpOwotICAgIGZvciAoOyBpMiAhPSBlMjsgKytpMikKLSAgICAgICAg
aTItPnNlY29uZC0+Y2xlYXJHbG9iYWxPYmplY3QoKTsKIH0KIAogdm9pZCBKU0RPTUdsb2JhbE9i
amVjdDo6bWFyaygpCkBAIC05MCwzNSArNzQsMzIgQEAgdm9pZCBKU0RPTUdsb2JhbE9iamVjdDo6
bWFyaygpCiAgICAgfQogfQogCi1KU0V2ZW50TGlzdGVuZXIqIEpTRE9NR2xvYmFsT2JqZWN0Ojpm
aW5kSlNFdmVudExpc3RlbmVyKEpTVmFsdWVQdHIgdmFsLCBib29sIGlzSW5saW5lKQorSlNFdmVu
dExpc3RlbmVyKiBKU0RPTUdsb2JhbE9iamVjdDo6ZmluZEpTRXZlbnRMaXN0ZW5lcihKU1ZhbHVl
UHRyIHZhbCkKIHsKICAgICBpZiAoIXZhbC5pc09iamVjdCgpKQogICAgICAgICByZXR1cm4gMDsK
IAotICAgIEpTTGlzdGVuZXJzTWFwJiBsaXN0ZW5lcnMgPSBpc0lubGluZSA/IGQoKS0+anNJbmxp
bmVFdmVudExpc3RlbmVycyA6IGQoKS0+anNFdmVudExpc3RlbmVyczsKLSAgICByZXR1cm4gbGlz
dGVuZXJzLmdldChhc09iamVjdCh2YWwpKTsKKyAgICByZXR1cm4gZCgpLT5qc0V2ZW50TGlzdGVu
ZXJzLmdldChhc09iamVjdCh2YWwpKTsKIH0KIAotUGFzc1JlZlB0cjxKU0V2ZW50TGlzdGVuZXI+
IEpTRE9NR2xvYmFsT2JqZWN0OjpmaW5kT3JDcmVhdGVKU0V2ZW50TGlzdGVuZXIoSlNWYWx1ZVB0
ciB2YWwsIGJvb2wgaXNJbmxpbmUpCitQYXNzUmVmUHRyPEpTRXZlbnRMaXN0ZW5lcj4gSlNET01H
bG9iYWxPYmplY3Q6OmZpbmRPckNyZWF0ZUpTRXZlbnRMaXN0ZW5lcihKU1ZhbHVlUHRyIHZhbCkK
IHsKLSAgICBpZiAoSlNFdmVudExpc3RlbmVyKiBsaXN0ZW5lciA9IGZpbmRKU0V2ZW50TGlzdGVu
ZXIodmFsLCBpc0lubGluZSkpCisgICAgaWYgKEpTRXZlbnRMaXN0ZW5lciogbGlzdGVuZXIgPSBm
aW5kSlNFdmVudExpc3RlbmVyKHZhbCkpCiAgICAgICAgIHJldHVybiBsaXN0ZW5lcjsKIAogICAg
IGlmICghdmFsLmlzT2JqZWN0KCkpCiAgICAgICAgIHJldHVybiAwOwogCiAgICAgLy8gVGhlIEpT
RXZlbnRMaXN0ZW5lciBjb25zdHJ1Y3RvciBhZGRzIGl0IHRvIG91ciBqc0V2ZW50TGlzdGVuZXJz
IG1hcC4KLSAgICByZXR1cm4gSlNFdmVudExpc3RlbmVyOjpjcmVhdGUoYXNPYmplY3QodmFsKSwg
dGhpcywgaXNJbmxpbmUpLmdldCgpOworICAgIHJldHVybiBKU0V2ZW50TGlzdGVuZXI6OmNyZWF0
ZShhc09iamVjdCh2YWwpLCB0aGlzLCBmYWxzZSkuZ2V0KCk7CiB9CiAKLUpTRE9NR2xvYmFsT2Jq
ZWN0OjpQcm90ZWN0ZWRMaXN0ZW5lcnNNYXAmIEpTRE9NR2xvYmFsT2JqZWN0Ojpqc1Byb3RlY3Rl
ZEV2ZW50TGlzdGVuZXJzKCkKK1Bhc3NSZWZQdHI8SlNFdmVudExpc3RlbmVyPiBKU0RPTUdsb2Jh
bE9iamVjdDo6Y3JlYXRlSlNJbmxpbmVFdmVudExpc3RlbmVyKEpTVmFsdWVQdHIgdmFsKQogewot
ICAgIHJldHVybiBkKCktPmpzUHJvdGVjdGVkRXZlbnRMaXN0ZW5lcnM7Ci19CisgICAgaWYgKCF2
YWwuaXNPYmplY3QoKSkKKyAgICAgICAgcmV0dXJuIDA7CiAKLUpTRE9NR2xvYmFsT2JqZWN0OjpQ
cm90ZWN0ZWRMaXN0ZW5lcnNNYXAmIEpTRE9NR2xvYmFsT2JqZWN0Ojpqc1Byb3RlY3RlZElubGlu
ZUV2ZW50TGlzdGVuZXJzKCkKLXsKLSAgICByZXR1cm4gZCgpLT5qc1Byb3RlY3RlZElubGluZUV2
ZW50TGlzdGVuZXJzOworICAgIHJldHVybiBKU0V2ZW50TGlzdGVuZXI6OmNyZWF0ZShhc09iamVj
dCh2YWwpLCB0aGlzLCB0cnVlKS5nZXQoKTsKIH0KIAogSlNET01HbG9iYWxPYmplY3Q6OkpTTGlz
dGVuZXJzTWFwJiBKU0RPTUdsb2JhbE9iamVjdDo6anNFdmVudExpc3RlbmVycygpCkBAIC0xMjYs
MTEgKzEwNyw2IEBAIEpTRE9NR2xvYmFsT2JqZWN0OjpKU0xpc3RlbmVyc01hcCYgSlNET00KICAg
ICByZXR1cm4gZCgpLT5qc0V2ZW50TGlzdGVuZXJzOwogfQogCi1KU0RPTUdsb2JhbE9iamVjdDo6
SlNMaXN0ZW5lcnNNYXAmIEpTRE9NR2xvYmFsT2JqZWN0Ojpqc0lubGluZUV2ZW50TGlzdGVuZXJz
KCkKLXsKLSAgICByZXR1cm4gZCgpLT5qc0lubGluZUV2ZW50TGlzdGVuZXJzOwotfQotCiB2b2lk
IEpTRE9NR2xvYmFsT2JqZWN0OjpzZXRDdXJyZW50RXZlbnQoRXZlbnQqIGV2dCkKIHsKICAgICBk
KCktPmV2dCA9IGV2dDsKSW5kZXg6IGJpbmRpbmdzL2pzL0pTRE9NR2xvYmFsT2JqZWN0LmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gYmluZGluZ3MvanMvSlNET01HbG9iYWxPYmplY3QuaAkocmV2aXNpb24gNDI2
NDQpCisrKyBiaW5kaW5ncy9qcy9KU0RPTUdsb2JhbE9iamVjdC5oCSh3b3JraW5nIGNvcHkpCkBA
IC0zMyw3ICszMyw2IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogICAgIGNsYXNzIEV2ZW50Owog
ICAgIGNsYXNzIEpTTGF6eUV2ZW50TGlzdGVuZXI7Ci0gICAgY2xhc3MgSlNQcm90ZWN0ZWRFdmVu
dExpc3RlbmVyOwogICAgIGNsYXNzIEpTRXZlbnRMaXN0ZW5lcjsKICAgICBjbGFzcyBTY3JpcHRF
eGVjdXRpb25Db250ZXh0OwogCkBAIC01NSwxOCArNTQsMTggQEAgbmFtZXNwYWNlIFdlYkNvcmUg
ewogICAgICAgICB2aXJ0dWFsIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIHNjcmlwdEV4ZWN1dGlv
bkNvbnRleHQoKSBjb25zdCA9IDA7CiAKICAgICAgICAgLy8gRmluZHMgYSB3cmFwcGVyIG9mIGEg
R0MtdW5wcm90ZWN0ZWQgSlMgRXZlbnRMaXN0ZW5lciwgcmV0dXJucyAwIGlmIG5vIGV4aXN0aW5n
IG9uZS4KLSAgICAgICAgSlNFdmVudExpc3RlbmVyKiBmaW5kSlNFdmVudExpc3RlbmVyKEpTQzo6
SlNWYWx1ZVB0ciwgYm9vbCBpc0lubGluZSA9IGZhbHNlKTsKKyAgICAgICAgSlNFdmVudExpc3Rl
bmVyKiBmaW5kSlNFdmVudExpc3RlbmVyKEpTQzo6SlNWYWx1ZVB0cik7CiAKICAgICAgICAgLy8g
RmluZHMgb3IgY3JlYXRlcyBhIHdyYXBwZXIgb2YgYSBKUyBFdmVudExpc3RlbmVyLiBKUyBFdmVu
dExpc3RlbmVyIG9iamVjdCBpcyAqTk9UKiBHQy1wcm90ZWN0ZWQuCi0gICAgICAgIFBhc3NSZWZQ
dHI8SlNFdmVudExpc3RlbmVyPiBmaW5kT3JDcmVhdGVKU0V2ZW50TGlzdGVuZXIoSlNDOjpKU1Zh
bHVlUHRyLCBib29sIGlzSW5saW5lID0gZmFsc2UpOworICAgICAgICBQYXNzUmVmUHRyPEpTRXZl
bnRMaXN0ZW5lcj4gZmluZE9yQ3JlYXRlSlNFdmVudExpc3RlbmVyKEpTQzo6SlNWYWx1ZVB0cik7
CisKKyAgICAgICAgLy8gQ3JlYXRlcyBhIEdDLXByb3RlY3RlZCBKUyBFdmVudExpc3RlbmVyIGZv
ciBhbiAib25YWFgiIGV2ZW50IGF0dHJpYnV0ZS4KKyAgICAgICAgLy8gVGhlc2UgbGlzdGVuZXJz
IGNhbm5vdCBiZSByZW1vdmVkIHRocm91Z2ggdGhlIHJlbW92ZUV2ZW50TGlzdGVuZXIgQVBJLgor
ICAgICAgICBQYXNzUmVmUHRyPEpTRXZlbnRMaXN0ZW5lcj4gY3JlYXRlSlNJbmxpbmVFdmVudExp
c3RlbmVyKEpTQzo6SlNWYWx1ZVB0cik7CiAKLSAgICAgICAgdHlwZWRlZiBIYXNoTWFwPEpTQzo6
SlNPYmplY3QqLCBKU0xhenlFdmVudExpc3RlbmVyKj4gUHJvdGVjdGVkTGlzdGVuZXJzTWFwOwog
ICAgICAgICB0eXBlZGVmIEhhc2hNYXA8SlNDOjpKU09iamVjdCosIEpTRXZlbnRMaXN0ZW5lcio+
IEpTTGlzdGVuZXJzTWFwOwogCi0gICAgICAgIFByb3RlY3RlZExpc3RlbmVyc01hcCYganNQcm90
ZWN0ZWRFdmVudExpc3RlbmVycygpOwotICAgICAgICBQcm90ZWN0ZWRMaXN0ZW5lcnNNYXAmIGpz
UHJvdGVjdGVkSW5saW5lRXZlbnRMaXN0ZW5lcnMoKTsKICAgICAgICAgSlNMaXN0ZW5lcnNNYXAm
IGpzRXZlbnRMaXN0ZW5lcnMoKTsKLSAgICAgICAgSlNMaXN0ZW5lcnNNYXAmIGpzSW5saW5lRXZl
bnRMaXN0ZW5lcnMoKTsKIAogICAgICAgICB2b2lkIHNldEN1cnJlbnRFdmVudChFdmVudCopOwog
ICAgICAgICBFdmVudCogY3VycmVudEV2ZW50KCkgY29uc3Q7CkBAIC04MCwxMCArNzksNyBAQCBu
YW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgICAgICBKU0RPTVN0cnVjdHVyZU1hcCBzdHJ1Y3R1
cmVzOwogICAgICAgICAgICAgSlNET01Db25zdHJ1Y3Rvck1hcCBjb25zdHJ1Y3RvcnM7CiAKLSAg
ICAgICAgICAgIEpTRE9NR2xvYmFsT2JqZWN0OjpQcm90ZWN0ZWRMaXN0ZW5lcnNNYXAganNQcm90
ZWN0ZWRFdmVudExpc3RlbmVyczsKLSAgICAgICAgICAgIEpTRE9NR2xvYmFsT2JqZWN0OjpQcm90
ZWN0ZWRMaXN0ZW5lcnNNYXAganNQcm90ZWN0ZWRJbmxpbmVFdmVudExpc3RlbmVyczsKICAgICAg
ICAgICAgIEpTRE9NR2xvYmFsT2JqZWN0OjpKU0xpc3RlbmVyc01hcCBqc0V2ZW50TGlzdGVuZXJz
OwotICAgICAgICAgICAgSlNET01HbG9iYWxPYmplY3Q6OkpTTGlzdGVuZXJzTWFwIGpzSW5saW5l
RXZlbnRMaXN0ZW5lcnM7CiAKICAgICAgICAgICAgIEV2ZW50KiBldnQ7CiAgICAgICAgIH07Cklu
ZGV4OiBiaW5kaW5ncy9qcy9KU0V2ZW50TGlzdGVuZXIuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIGJpbmRp
bmdzL2pzL0pTRXZlbnRMaXN0ZW5lci5jcHAJKHJldmlzaW9uIDQyNjQ0KQorKysgYmluZGluZ3Mv
anMvSlNFdmVudExpc3RlbmVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTM3LDIwICsxMzcsMTQg
QEAgSlNFdmVudExpc3RlbmVyOjpKU0V2ZW50TGlzdGVuZXIoSlNPYmplYwogICAgICwgbV9qc0Z1
bmN0aW9uKGZ1bmN0aW9uKQogICAgICwgbV9nbG9iYWxPYmplY3QoZ2xvYmFsT2JqZWN0KQogewot
ICAgIGlmIChtX2pzRnVuY3Rpb24pIHsKLSAgICAgICAgSlNET01XaW5kb3c6OkpTTGlzdGVuZXJz
TWFwJiBsaXN0ZW5lcnMgPSBpc0lubGluZQotICAgICAgICAgICAgPyBnbG9iYWxPYmplY3QtPmpz
SW5saW5lRXZlbnRMaXN0ZW5lcnMoKSA6IGdsb2JhbE9iamVjdC0+anNFdmVudExpc3RlbmVycygp
OwotICAgICAgICBsaXN0ZW5lcnMuc2V0KG1fanNGdW5jdGlvbiwgdGhpcyk7Ci0gICAgfQorICAg
IGlmICghaXNJbmxpbmUgJiYgbV9qc0Z1bmN0aW9uKQorICAgICAgICBnbG9iYWxPYmplY3QtPmpz
RXZlbnRMaXN0ZW5lcnMoKS5zZXQobV9qc0Z1bmN0aW9uLCB0aGlzKTsKIH0KIAogaW5saW5lIHZv
aWQgSlNFdmVudExpc3RlbmVyOjpjbGVhckpTRnVuY3Rpb25JbmxpbmUoKQogewotICAgIGlmICht
X2pzRnVuY3Rpb24gJiYgbV9nbG9iYWxPYmplY3QpIHsKLSAgICAgICAgSlNET01XaW5kb3c6OkpT
TGlzdGVuZXJzTWFwJiBsaXN0ZW5lcnMgPSBpc0lubGluZSgpCi0gICAgICAgICAgICA/IG1fZ2xv
YmFsT2JqZWN0LT5qc0lubGluZUV2ZW50TGlzdGVuZXJzKCkgOiBtX2dsb2JhbE9iamVjdC0+anNF
dmVudExpc3RlbmVycygpOwotICAgICAgICBsaXN0ZW5lcnMucmVtb3ZlKG1fanNGdW5jdGlvbik7
Ci0gICAgfQorICAgIGlmICghaXNJbmxpbmUoKSAmJiBtX2pzRnVuY3Rpb24gJiYgbV9nbG9iYWxP
YmplY3QpCisgICAgICAgIG1fZ2xvYmFsT2JqZWN0LT5qc0V2ZW50TGlzdGVuZXJzKCkucmVtb3Zl
KG1fanNGdW5jdGlvbik7CiAgICAgCiAgICAgbV9qc0Z1bmN0aW9uID0gMDsKICAgICBtX2dsb2Jh
bE9iamVjdCA9IDA7CkluZGV4OiBiaW5kaW5ncy9qcy9KU0xhenlFdmVudExpc3RlbmVyLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBiaW5kaW5ncy9qcy9KU0xhenlFdmVudExpc3RlbmVyLmNwcAkocmV2aXNp
b24gNDI2NDQpCisrKyBiaW5kaW5ncy9qcy9KU0xhenlFdmVudExpc3RlbmVyLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtNzEsMTEgKzcxLDYgQEAgSlNMYXp5RXZlbnRMaXN0ZW5lcjo6SlNMYXp5RXZl
bnRMaXN0ZW5lcgogCiBKU0xhenlFdmVudExpc3RlbmVyOjp+SlNMYXp5RXZlbnRMaXN0ZW5lcigp
CiB7Ci0gICAgaWYgKG1fanNGdW5jdGlvbiAmJiBtX2dsb2JhbE9iamVjdCkgewotICAgICAgICBK
U0RPTVdpbmRvdzo6UHJvdGVjdGVkTGlzdGVuZXJzTWFwJiBsaXN0ZW5lcnMgPSBpc0lubGluZSgp
Ci0gICAgICAgICAgICA/IG1fZ2xvYmFsT2JqZWN0LT5qc1Byb3RlY3RlZElubGluZUV2ZW50TGlz
dGVuZXJzKCkgOiBtX2dsb2JhbE9iamVjdC0+anNQcm90ZWN0ZWRFdmVudExpc3RlbmVycygpOwot
ICAgICAgICBsaXN0ZW5lcnMucmVtb3ZlKG1fanNGdW5jdGlvbik7Ci0gICAgfQogI2lmbmRlZiBO
REVCVUcKICAgICBldmVudExpc3RlbmVyQ291bnRlci5kZWNyZW1lbnQoKTsKICNlbmRpZgpAQCAt
MTM5LDEyICsxMzQsNiBAQCB2b2lkIEpTTGF6eUV2ZW50TGlzdGVuZXI6OnBhcnNlQ29kZSgpIGNv
CiAgICAgbV9mdW5jdGlvbk5hbWUgPSBTdHJpbmcoKTsKICAgICBtX2NvZGUgPSBTdHJpbmcoKTsK
ICAgICBtX2V2ZW50UGFyYW1ldGVyTmFtZSA9IFN0cmluZygpOwotCi0gICAgaWYgKG1fanNGdW5j
dGlvbikgewotICAgICAgICBBU1NFUlQoaXNJbmxpbmUoKSk7Ci0gICAgICAgIEpTRE9NV2luZG93
OjpQcm90ZWN0ZWRMaXN0ZW5lcnNNYXAmIGxpc3RlbmVycyA9IG1fZ2xvYmFsT2JqZWN0LT5qc1By
b3RlY3RlZElubGluZUV2ZW50TGlzdGVuZXJzKCk7Ci0gICAgICAgIGxpc3RlbmVycy5zZXQobV9q
c0Z1bmN0aW9uLCBjb25zdF9jYXN0PEpTTGF6eUV2ZW50TGlzdGVuZXIqPih0aGlzKSk7Ci0gICAg
fQogfQogCiBKU0RPTUdsb2JhbE9iamVjdCogSlNMYXp5RXZlbnRMaXN0ZW5lcjo6Z2xvYmFsT2Jq
ZWN0KCkgY29uc3QKSW5kZXg6IGJpbmRpbmdzL3NjcmlwdHMvQ29kZUdlbmVyYXRvckpTLnBtCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIGJpbmRpbmdzL3NjcmlwdHMvQ29kZUdlbmVyYXRvckpTLnBtCShyZXZpc2lv
biA0MjY0NCkKKysrIGJpbmRpbmdzL3NjcmlwdHMvQ29kZUdlbmVyYXRvckpTLnBtCSh3b3JraW5n
IGNvcHkpCkBAIC0xMjU1LDcgKzEyNTUsNyBAQCBzdWIgR2VuZXJhdGVJbXBsZW1lbnRhdGlvbgog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICBp
ZiAoIWdsb2JhbE9iamVjdClcbiIpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBw
dXNoKEBpbXBsQ29udGVudCwgIiAgICAgICAgcmV0dXJuO1xuIik7CiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHB1c2goQGltcGxDb250
ZW50LCAiICAgIGltcC0+c2V0JGltcGxTZXR0ZXJGdW5jdGlvbk5hbWUoZ2xvYmFsT2JqZWN0LT5m
aW5kT3JDcmVhdGVKU0V2ZW50TGlzdGVuZXIodmFsdWUsIHRydWUpKTtcbiIpOworICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgIGltcC0+c2V0JGltcGxT
ZXR0ZXJGdW5jdGlvbk5hbWUoZ2xvYmFsT2JqZWN0LT5jcmVhdGVKU0lubGluZUV2ZW50TGlzdGVu
ZXIodmFsdWUpKTtcbiIpOwogICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNpZiAoJGF0dHJp
YnV0ZS0+c2lnbmF0dXJlLT50eXBlID1+IC9Db25zdHJ1Y3RvciQvKSB7CiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgbXkgJGNvbnN0cnVjdG9yVHlwZSA9ICRhdHRyaWJ1dGUtPnNpZ25hdHVy
ZS0+dHlwZTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkY29uc3RydWN0b3JUeXBlID1+
IHMvQ29uc3RydWN0b3IkLy87Cg==
</data>
<flag name="review"
          id="14786"
          type_id="1"
          status="+"
          setter="ap"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>29610</attachid>
            <date>2009-04-19 23:46:57 -0700</date>
            <delta_ts>2009-04-20 09:06:15 -0700</delta_ts>
            <desc>last patch, i promise</desc>
            <filename>patch.txt</filename>
            <type>text/plain</type>
            <size>11906</size>
            <attacher name="Geoffrey Garen">ggaren</attacher>
            
              <data encoding="base64">SW5kZXg6IENoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBDaGFuZ2VMb2cJKHJldmlzaW9uIDQyNjY4
KQorKysgQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMzggQEAKKzIwMDktMDQt
MTkgIEdlb2ZmcmV5IEdhcmVuICA8Z2dhcmVuQGFwcGxlLmNvbT4KKworICAgICAgICBSZXZpZXdl
ZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBMYXN0IHBhdGNoIGZvciBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjEyNjAKKyAgICAgICAgVW5ib3VuZGVkIG1l
bW9yeSBncm93dGggd2hlbiBjaHVybmluZyBlbGVtZW50cyB3aXRoIGFub255bW91cyBldmVudCBo
YW5kbGVyIGZ1bmN0aW9ucworICAgICAgICAKKyAgICAgICAgQ29udmVydGVkICJsYXp5IiBldmVu
dCBsaXN0ZW5lcnMgdG8gYmUgdW5wcm90ZWN0ZWQsIGp1c3QgbGlrZSBhbGwgdGhlIG90aGVycy4K
KworICAgICAgICAqIGJpbmRpbmdzL2pzL0pTRXZlbnRMaXN0ZW5lci5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpKU0V2ZW50TGlzdGVuZXI6OkpTRXZlbnRMaXN0ZW5lcik6CisgICAgICAgIChXZWJD
b3JlOjpKU0V2ZW50TGlzdGVuZXI6On5KU0V2ZW50TGlzdGVuZXIpOgorICAgICAgICAoV2ViQ29y
ZTo6SlNFdmVudExpc3RlbmVyOjpqc0Z1bmN0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkpTRXZl
bnRMaXN0ZW5lcjo6bWFya0pTRnVuY3Rpb24pOgorICAgICAgICAoV2ViQ29yZTo6SlNFdmVudExp
c3RlbmVyOjpoYW5kbGVFdmVudCk6CisgICAgICAgIChXZWJDb3JlOjpKU0V2ZW50TGlzdGVuZXI6
OnZpcnR1YWxJc0lubGluZSk6CisgICAgICAgICogYmluZGluZ3MvanMvSlNFdmVudExpc3RlbmVy
Lmg6CisgICAgICAgIChXZWJDb3JlOjpKU0V2ZW50TGlzdGVuZXI6OmlzSW5saW5lKTogTWVyZ2Vk
IEpTQWJzdHJhY3RFdmVudExpc3RlbmVyCisgICAgICAgIGludG8gSlNFdmVudExpc3RlbmVyLiBO
b3cgdGhhdCB0aGUgb25seSBkaWZmZXJlbmNlIGJldHdlZW4gSlNFdmVudExpc3RlbmVyCisgICAg
ICAgIGFuZCBKU0xhenlFdmVudExpc3RlbmVyIGlzIHRoYXQgSlNMYXp5RXZlbnRMaXN0ZW5lciBj
b21waWxlcyBsYXppbHksCisgICAgICAgIHRoZXJlJ3Mgbm8gbmVlZCBmb3IgYW4gYWJzdHJhY3Qg
YmFzZSBjbGFzcy4KKworICAgICAgICAqIGJpbmRpbmdzL2pzL0pTTGF6eUV2ZW50TGlzdGVuZXIu
Y3BwOiBDb252ZXJ0ZWQgSlNMYXp5RXZlbnRMaXN0ZW5lciB0bworICAgICAgICBpbmhlcml0IGZy
b20gSlNFdmVudExpc3RlbmVyIGFuZCBtYXRjaCBpdHMgdW4tR0MtcHJvdGVjdGVkIGJlaGF2aW9y
LgorICAgICAgICAoV2ViQ29yZTo6SlNMYXp5RXZlbnRMaXN0ZW5lcjo6SlNMYXp5RXZlbnRMaXN0
ZW5lcik6IGRpdHRvCisgICAgICAgIChXZWJDb3JlOjpKU0xhenlFdmVudExpc3RlbmVyOjpwYXJz
ZUNvZGUpOiBkaXR0bworICAgICAgICAoV2ViQ29yZTo6Y3JlYXRlSW5saW5lRXZlbnRMaXN0ZW5l
cik6IFdoZW4gY3JlYXRpbmcgYSBsYXp5IGV2ZW50IGxpc3RlbmVyLAorICAgICAgICBlbnN1cmUg
dGhhdCB0aGUgcmVsYXRlZCBub2RlIGhhcyBhIEpTIHdyYXBwZXIgdG8gbWFyayB0aGUgbGlzdGVu
ZXIuIFNpbmNlCisgICAgICAgIHRoZSBwYXJzZXIgbWFrZXMgdGhlc2UgbGlzdGVuZXJzLCBpdCdz
IHBvc3NpYmxlIHRoYXQgbm8gSlMgcmVmZXJlbmNlIGhhcworICAgICAgICBiZWVuIG1hZGUgdG8g
dGhlIG5vZGUgeWV0LgorICAgICAgICAqIGJpbmRpbmdzL2pzL0pTTGF6eUV2ZW50TGlzdGVuZXIu
aDogZGl0dG8KKworICAgICAgICAqIGRvbS9FdmVudExpc3RlbmVyLmg6CisgICAgICAgIChXZWJD
b3JlOjpFdmVudExpc3RlbmVyOjpjbGVhckpTRnVuY3Rpb24pOiBSZW1vdmVkIGFuIHVzdXNlZCBm
dW5jdGlvbi4KKwogMjAwOS0wNC0xOSAgRGFuIEJlcm5zdGVpbiAgPG1pdHpAYXBwbGUuY29tPgog
CiAgICAgICAgIC0gbWF5YmUgZml4IHJlbGVhc2UgYnVpbGRzCkluZGV4OiBiaW5kaW5ncy9qcy9K
U0V2ZW50TGlzdGVuZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIGJpbmRpbmdzL2pzL0pTRXZlbnRMaXN0
ZW5lci5jcHAJKHJldmlzaW9uIDQyNjY3KQorKysgYmluZGluZ3MvanMvSlNFdmVudExpc3RlbmVy
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzEsNyArMzEsMzUgQEAgdXNpbmcgbmFtZXNwYWNlIEpT
QzsKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi12b2lkIEpTQWJzdHJhY3RFdmVudExpc3RlbmVy
OjpoYW5kbGVFdmVudChFdmVudCogZXZlbnQsIGJvb2wgaXNXaW5kb3dFdmVudCkKK0pTRXZlbnRM
aXN0ZW5lcjo6SlNFdmVudExpc3RlbmVyKEpTT2JqZWN0KiBmdW5jdGlvbiwgSlNET01HbG9iYWxP
YmplY3QqIGdsb2JhbE9iamVjdCwgYm9vbCBpc0lubGluZSkKKyAgICA6IG1fanNGdW5jdGlvbihm
dW5jdGlvbikKKyAgICAsIG1fZ2xvYmFsT2JqZWN0KGdsb2JhbE9iamVjdCkKKyAgICAsIG1faXNJ
bmxpbmUoaXNJbmxpbmUpCit7CisgICAgaWYgKCFpc0lubGluZSAmJiBtX2pzRnVuY3Rpb24pCisg
ICAgICAgIGdsb2JhbE9iamVjdC0+anNFdmVudExpc3RlbmVycygpLnNldChtX2pzRnVuY3Rpb24s
IHRoaXMpOworfQorCitKU0V2ZW50TGlzdGVuZXI6On5KU0V2ZW50TGlzdGVuZXIoKQoreworICAg
IGlmICghaXNJbmxpbmUoKSAmJiBtX2pzRnVuY3Rpb24gJiYgbV9nbG9iYWxPYmplY3QpCisgICAg
ICAgIG1fZ2xvYmFsT2JqZWN0LT5qc0V2ZW50TGlzdGVuZXJzKCkucmVtb3ZlKG1fanNGdW5jdGlv
bik7Cit9CisKK0pTT2JqZWN0KiBKU0V2ZW50TGlzdGVuZXI6OmpzRnVuY3Rpb24oKSBjb25zdAor
eworICAgIHJldHVybiBtX2pzRnVuY3Rpb247Cit9CisKK3ZvaWQgSlNFdmVudExpc3RlbmVyOjpt
YXJrSlNGdW5jdGlvbigpCit7CisgICAgaWYgKG1fanNGdW5jdGlvbiAmJiAhbV9qc0Z1bmN0aW9u
LT5tYXJrZWQoKSkKKyAgICAgICAgbV9qc0Z1bmN0aW9uLT5tYXJrKCk7CisgICAgaWYgKG1fZ2xv
YmFsT2JqZWN0ICYmICFtX2dsb2JhbE9iamVjdC0+bWFya2VkKCkpCisgICAgICAgIG1fZ2xvYmFs
T2JqZWN0LT5tYXJrKCk7Cit9CisKK3ZvaWQgSlNFdmVudExpc3RlbmVyOjpoYW5kbGVFdmVudChF
dmVudCogZXZlbnQsIGJvb2wgaXNXaW5kb3dFdmVudCkKIHsKICAgICBKU0xvY2sgbG9jayhmYWxz
ZSk7CiAKQEAgLTM5LDcgKzY3LDcgQEAgdm9pZCBKU0Fic3RyYWN0RXZlbnRMaXN0ZW5lcjo6aGFu
ZGxlRXZlbgogICAgIGlmICghanNGdW5jdGlvbikKICAgICAgICAgcmV0dXJuOwogCi0gICAgSlNE
T01HbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCA9IHRoaXMtPmdsb2JhbE9iamVjdCgpOworICAg
IEpTRE9NR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QgPSBtX2dsb2JhbE9iamVjdDsKICAgICAv
LyBOdWxsIGNoZWNrIGFzIGNsZWFyR2xvYmFsT2JqZWN0KCkgY2FuIGNsZWFyIHRoaXMgYW5kIHdl
IHN0aWxsIGdldCBjYWxsZWQgYmFjayBieQogICAgIC8vIHhtbGh0dHByZXF1ZXN0IG9iamVjdHMu
IFNlZSBodHRwOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMzI3NQogICAgIC8v
IEZJWE1FOiBJcyB0aGlzIGNoZWNrIHN0aWxsIG5lY2Vzc2FyeT8gUmVxdWVzdHMgYXJlIHN1cHBv
c2VkIHRvIGJlIHN0b3BwZWQgYmVmb3JlIGNsZWFyR2xvYmFsT2JqZWN0KCkgaXMgY2FsbGVkLgpA
QCAtMTI1LDU3ICsxNTMsOSBAQCB2b2lkIEpTQWJzdHJhY3RFdmVudExpc3RlbmVyOjpoYW5kbGVF
dmVuCiAgICAgfQogfQogCi1ib29sIEpTQWJzdHJhY3RFdmVudExpc3RlbmVyOjp2aXJ0dWFsSXNJ
bmxpbmUoKSBjb25zdAorYm9vbCBKU0V2ZW50TGlzdGVuZXI6OnZpcnR1YWxJc0lubGluZSgpIGNv
bnN0CiB7CiAgICAgcmV0dXJuIG1faXNJbmxpbmU7CiB9CiAKLS8vIC0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0K
LQotSlNFdmVudExpc3RlbmVyOjpKU0V2ZW50TGlzdGVuZXIoSlNPYmplY3QqIGZ1bmN0aW9uLCBK
U0RPTUdsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBib29sIGlzSW5saW5lKQotICAgIDogSlNB
YnN0cmFjdEV2ZW50TGlzdGVuZXIoaXNJbmxpbmUpCi0gICAgLCBtX2pzRnVuY3Rpb24oZnVuY3Rp
b24pCi0gICAgLCBtX2dsb2JhbE9iamVjdChnbG9iYWxPYmplY3QpCi17Ci0gICAgaWYgKCFpc0lu
bGluZSAmJiBtX2pzRnVuY3Rpb24pCi0gICAgICAgIGdsb2JhbE9iamVjdC0+anNFdmVudExpc3Rl
bmVycygpLnNldChtX2pzRnVuY3Rpb24sIHRoaXMpOwotfQotCi1pbmxpbmUgdm9pZCBKU0V2ZW50
TGlzdGVuZXI6OmNsZWFySlNGdW5jdGlvbklubGluZSgpCi17Ci0gICAgaWYgKCFpc0lubGluZSgp
ICYmIG1fanNGdW5jdGlvbiAmJiBtX2dsb2JhbE9iamVjdCkKLSAgICAgICAgbV9nbG9iYWxPYmpl
Y3QtPmpzRXZlbnRMaXN0ZW5lcnMoKS5yZW1vdmUobV9qc0Z1bmN0aW9uKTsKLSAgICAKLSAgICBt
X2pzRnVuY3Rpb24gPSAwOwotICAgIG1fZ2xvYmFsT2JqZWN0ID0gMDsKLX0KLQotSlNFdmVudExp
c3RlbmVyOjp+SlNFdmVudExpc3RlbmVyKCkKLXsKLSAgICBjbGVhckpTRnVuY3Rpb25JbmxpbmUo
KTsKLX0KLQotSlNPYmplY3QqIEpTRXZlbnRMaXN0ZW5lcjo6anNGdW5jdGlvbigpIGNvbnN0Ci17
Ci0gICAgcmV0dXJuIG1fanNGdW5jdGlvbjsKLX0KLQotdm9pZCBKU0V2ZW50TGlzdGVuZXI6OmNs
ZWFySlNGdW5jdGlvbigpCi17Ci0gICAgY2xlYXJKU0Z1bmN0aW9uSW5saW5lKCk7Ci19Ci0KLUpT
RE9NR2xvYmFsT2JqZWN0KiBKU0V2ZW50TGlzdGVuZXI6Omdsb2JhbE9iamVjdCgpIGNvbnN0Ci17
Ci0gICAgcmV0dXJuIG1fZ2xvYmFsT2JqZWN0OwotfQotCi12b2lkIEpTRXZlbnRMaXN0ZW5lcjo6
bWFya0pTRnVuY3Rpb24oKQotewotICAgIGlmIChtX2pzRnVuY3Rpb24gJiYgIW1fanNGdW5jdGlv
bi0+bWFya2VkKCkpCi0gICAgICAgIG1fanNGdW5jdGlvbi0+bWFyaygpOwotICAgIGlmIChtX2ds
b2JhbE9iamVjdCAmJiAhbV9nbG9iYWxPYmplY3QtPm1hcmtlZCgpKQotICAgICAgICBtX2dsb2Jh
bE9iamVjdC0+bWFyaygpOwotfQotCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBiaW5k
aW5ncy9qcy9KU0V2ZW50TGlzdGVuZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBiaW5kaW5ncy9qcy9KU0V2
ZW50TGlzdGVuZXIuaAkocmV2aXNpb24gNDI2NjcpCisrKyBiaW5kaW5ncy9qcy9KU0V2ZW50TGlz
dGVuZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMjgsMjUgKzI4LDcgQEAgbmFtZXNwYWNlIFdlYkNv
cmUgewogCiAgICAgY2xhc3MgSlNET01HbG9iYWxPYmplY3Q7CiAKLSAgICBjbGFzcyBKU0Fic3Ry
YWN0RXZlbnRMaXN0ZW5lciA6IHB1YmxpYyBFdmVudExpc3RlbmVyIHsKLSAgICBwdWJsaWM6Ci0g
ICAgICAgIGJvb2wgaXNJbmxpbmUoKSBjb25zdCB7IHJldHVybiBtX2lzSW5saW5lOyB9Ci0KLSAg
ICBwcm90ZWN0ZWQ6Ci0gICAgICAgIEpTQWJzdHJhY3RFdmVudExpc3RlbmVyKGJvb2wgaXNJbmxp
bmUpCi0gICAgICAgICAgICA6IG1faXNJbmxpbmUoaXNJbmxpbmUpCi0gICAgICAgIHsKLSAgICAg
ICAgfQotCi0gICAgcHJpdmF0ZToKLSAgICAgICAgdmlydHVhbCB2b2lkIGhhbmRsZUV2ZW50KEV2
ZW50KiwgYm9vbCBpc1dpbmRvd0V2ZW50KTsKLSAgICAgICAgdmlydHVhbCBKU0RPTUdsb2JhbE9i
amVjdCogZ2xvYmFsT2JqZWN0KCkgY29uc3QgPSAwOwotICAgICAgICB2aXJ0dWFsIGJvb2wgdmly
dHVhbElzSW5saW5lKCkgY29uc3Q7Ci0KLSAgICAgICAgYm9vbCBtX2lzSW5saW5lOwotICAgIH07
Ci0KLSAgICBjbGFzcyBKU0V2ZW50TGlzdGVuZXIgOiBwdWJsaWMgSlNBYnN0cmFjdEV2ZW50TGlz
dGVuZXIgeworICAgIGNsYXNzIEpTRXZlbnRMaXN0ZW5lciA6IHB1YmxpYyBFdmVudExpc3RlbmVy
IHsKICAgICBwdWJsaWM6CiAgICAgICAgIHN0YXRpYyBQYXNzUmVmUHRyPEpTRXZlbnRMaXN0ZW5l
cj4gY3JlYXRlKEpTQzo6SlNPYmplY3QqIGxpc3RlbmVyLCBKU0RPTUdsb2JhbE9iamVjdCogZ2xv
YmFsT2JqZWN0LCBib29sIGlzSW5saW5lKQogICAgICAgICB7CkBAIC01NiwxOSArMzgsMjEgQEAg
bmFtZXNwYWNlIFdlYkNvcmUgewogCiAgICAgICAgIHZvaWQgY2xlYXJHbG9iYWxPYmplY3QoKSB7
IG1fZ2xvYmFsT2JqZWN0ID0gMDsgfQogCisgICAgICAgIGJvb2wgaXNJbmxpbmUoKSBjb25zdCB7
IHJldHVybiBtX2lzSW5saW5lOyB9CiAgICAgICAgIHZpcnR1YWwgSlNDOjpKU09iamVjdCoganNG
dW5jdGlvbigpIGNvbnN0OwotICAgICAgICB2aXJ0dWFsIHZvaWQgY2xlYXJKU0Z1bmN0aW9uKCk7
Ci0gICAgICAgIHZpcnR1YWwgdm9pZCBtYXJrSlNGdW5jdGlvbigpOwogCiAgICAgcHJpdmF0ZToK
LSAgICAgICAgSlNFdmVudExpc3RlbmVyKEpTQzo6SlNPYmplY3QqIGZ1bmN0aW9uLCBKU0RPTUds
b2JhbE9iamVjdCosIGJvb2wgaXNJbmxpbmUpOwotCi0gICAgICAgIHZpcnR1YWwgSlNET01HbG9i
YWxPYmplY3QqIGdsb2JhbE9iamVjdCgpIGNvbnN0OwotCisgICAgICAgIHZpcnR1YWwgdm9pZCBt
YXJrSlNGdW5jdGlvbigpOworICAgICAgICB2aXJ0dWFsIHZvaWQgaGFuZGxlRXZlbnQoRXZlbnQq
LCBib29sIGlzV2luZG93RXZlbnQpOworICAgICAgICB2aXJ0dWFsIGJvb2wgdmlydHVhbElzSW5s
aW5lKCkgY29uc3Q7CiAgICAgICAgIHZvaWQgY2xlYXJKU0Z1bmN0aW9uSW5saW5lKCk7CiAKLSAg
ICAgICAgSlNDOjpKU09iamVjdCogbV9qc0Z1bmN0aW9uOworICAgIHByb3RlY3RlZDoKKyAgICAg
ICAgSlNFdmVudExpc3RlbmVyKEpTQzo6SlNPYmplY3QqIGZ1bmN0aW9uLCBKU0RPTUdsb2JhbE9i
amVjdCosIGJvb2wgaXNJbmxpbmUpOworCisgICAgICAgIG11dGFibGUgSlNDOjpKU09iamVjdCog
bV9qc0Z1bmN0aW9uOwogICAgICAgICBKU0RPTUdsb2JhbE9iamVjdCogbV9nbG9iYWxPYmplY3Q7
CisgICAgICAgIGJvb2wgbV9pc0lubGluZTsKICAgICB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJD
b3JlCkluZGV4OiBiaW5kaW5ncy9qcy9KU0xhenlFdmVudExpc3RlbmVyLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBiaW5kaW5ncy9qcy9KU0xhenlFdmVudExpc3RlbmVyLmNwcAkocmV2aXNpb24gNDI2Njcp
CisrKyBiaW5kaW5ncy9qcy9KU0xhenlFdmVudExpc3RlbmVyLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtNDQsOCArNDQsNyBAQCBzdGF0aWMgY29uc3QgU3RyaW5nJiBldmVudFBhcmFtZXRlck5hbWUo
CiB9CiAKIEpTTGF6eUV2ZW50TGlzdGVuZXI6OkpTTGF6eUV2ZW50TGlzdGVuZXIoY29uc3QgU3Ry
aW5nJiBmdW5jdGlvbk5hbWUsIGNvbnN0IFN0cmluZyYgZXZlbnRQYXJhbWV0ZXJOYW1lLCBjb25z
dCBTdHJpbmcmIGNvZGUsIEpTRE9NR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIE5vZGUqIG5v
ZGUsIGludCBsaW5lTnVtYmVyKQotICAgIDogSlNBYnN0cmFjdEV2ZW50TGlzdGVuZXIodHJ1ZSkK
LSAgICAsIG1fZ2xvYmFsT2JqZWN0KGdsb2JhbE9iamVjdCkKKyAgICA6IEpTRXZlbnRMaXN0ZW5l
cigwLCBnbG9iYWxPYmplY3QsIHRydWUpCiAgICAgLCBtX2Z1bmN0aW9uTmFtZShmdW5jdGlvbk5h
bWUpCiAgICAgLCBtX2V2ZW50UGFyYW1ldGVyTmFtZShldmVudFBhcmFtZXRlck5hbWUpCiAgICAg
LCBtX2NvZGUoY29kZSkKQEAgLTg4LDcgKzg3LDcgQEAgdm9pZCBKU0xhenlFdmVudExpc3RlbmVy
OjpwYXJzZUNvZGUoKSBjbwogICAgICAgICByZXR1cm47CiAKICAgICBpZiAobV9nbG9iYWxPYmpl
Y3QtPnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKS0+aXNEb2N1bWVudCgpKSB7Ci0gICAgICAgIEpT
RE9NV2luZG93KiB3aW5kb3cgPSBzdGF0aWNfY2FzdDxKU0RPTVdpbmRvdyo+KG1fZ2xvYmFsT2Jq
ZWN0LmdldCgpKTsKKyAgICAgICAgSlNET01XaW5kb3cqIHdpbmRvdyA9IHN0YXRpY19jYXN0PEpT
RE9NV2luZG93Kj4obV9nbG9iYWxPYmplY3QpOwogICAgICAgICBGcmFtZSogZnJhbWUgPSB3aW5k
b3ctPmltcGwoKS0+ZnJhbWUoKTsKICAgICAgICAgaWYgKCFmcmFtZSkKICAgICAgICAgICAgIHJl
dHVybjsKQEAgLTExMSw3ICsxMTAsNyBAQCB2b2lkIEpTTGF6eUV2ZW50TGlzdGVuZXI6OnBhcnNl
Q29kZSgpIGNvCiAgICAgLy8gaGF2ZSBiZWVuIGFkZGVkIHdpdGggc2V0QXR0cmlidXRlIGZyb20g
YSBzY3JpcHQsIGFuZCB3ZSBzaG91bGQgcGFzcyBTdHJpbmcoKSBpbiB0aGF0IGNhc2UuCiAgICAg
bV9qc0Z1bmN0aW9uID0gY29uc3RydWN0RnVuY3Rpb24oZXhlYywgYXJncywgSWRlbnRpZmllcihl
eGVjLCBtX2Z1bmN0aW9uTmFtZSksIHNvdXJjZVVSTCwgbV9saW5lTnVtYmVyKTsgLy8gRklYTUU6
IGlzIGdsb2JhbEV4ZWMgb2s/CiAKLSAgICBKU0Z1bmN0aW9uKiBsaXN0ZW5lckFzRnVuY3Rpb24g
PSBzdGF0aWNfY2FzdDxKU0Z1bmN0aW9uKj4obV9qc0Z1bmN0aW9uLmdldCgpKTsKKyAgICBKU0Z1
bmN0aW9uKiBsaXN0ZW5lckFzRnVuY3Rpb24gPSBzdGF0aWNfY2FzdDxKU0Z1bmN0aW9uKj4obV9q
c0Z1bmN0aW9uKTsKIAogICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkgewogICAgICAgICBl
eGVjLT5jbGVhckV4Y2VwdGlvbigpOwpAQCAtMTM2LDExICsxMzUsNiBAQCB2b2lkIEpTTGF6eUV2
ZW50TGlzdGVuZXI6OnBhcnNlQ29kZSgpIGNvCiAgICAgbV9ldmVudFBhcmFtZXRlck5hbWUgPSBT
dHJpbmcoKTsKIH0KIAotSlNET01HbG9iYWxPYmplY3QqIEpTTGF6eUV2ZW50TGlzdGVuZXI6Omds
b2JhbE9iamVjdCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1fZ2xvYmFsT2JqZWN0OwotfQotCiBQ
YXNzUmVmUHRyPEpTTGF6eUV2ZW50TGlzdGVuZXI+IGNyZWF0ZUlubGluZUV2ZW50TGlzdGVuZXIo
Tm9kZSogbm9kZSwgQXR0cmlidXRlKiBhdHRyKQogewogICAgIEFTU0VSVChub2RlKTsKQEAgLTE1
Niw2ICsxNTAsMTIgQEAgUGFzc1JlZlB0cjxKU0xhenlFdmVudExpc3RlbmVyPiBjcmVhdGVJbgog
ICAgICAgICByZXR1cm4gMDsKIAogICAgIEpTRE9NV2luZG93KiBnbG9iYWxPYmplY3QgPSBzY3Jp
cHRDb250cm9sbGVyLT5nbG9iYWxPYmplY3QoKTsKKyAgICAKKyAgICAvLyBFbnN1cmUgdGhhdCAn
bm9kZScgaGFzIGEgSmF2YVNjcmlwdCB3cmFwcGVyIHRvIG1hcmsgdGhlIGV2ZW50IGxpc3RlbmVy
IHdlJ3JlIGNyZWF0aW5nLgorICAgIHsKKyAgICAgICAgSlNMb2NrIGxvY2soZmFsc2UpOworICAg
ICAgICB0b0pTKGdsb2JhbE9iamVjdC0+Z2xvYmFsRXhlYygpLCBub2RlKTsKKyAgICB9CiAKICAg
ICByZXR1cm4gSlNMYXp5RXZlbnRMaXN0ZW5lcjo6Y3JlYXRlKGF0dHItPmxvY2FsTmFtZSgpLnN0
cmluZygpLCBldmVudFBhcmFtZXRlck5hbWUobm9kZS0+aXNTVkdFbGVtZW50KCkpLCBhdHRyLT52
YWx1ZSgpLCBnbG9iYWxPYmplY3QsIG5vZGUsIHNjcmlwdENvbnRyb2xsZXItPmV2ZW50SGFuZGxl
ckxpbmVOdW1iZXIoKSk7CiB9CkBAIC0xNjksNiArMTY5LDcgQEAgUGFzc1JlZlB0cjxKU0xhenlF
dmVudExpc3RlbmVyPiBjcmVhdGVJbgogICAgIGlmICghc2NyaXB0Q29udHJvbGxlci0+aXNFbmFi
bGVkKCkpCiAgICAgICAgIHJldHVybiAwOwogCisgICAgLy8gJ2dsb2JhbE9iamVjdCcgaXMgdGhl
IEphdmFTY3JpcHQgd3JhcHBlciB0aGF0IHdpbGwgbWFyayB0aGUgZXZlbnQgbGlzdGVuZXIgd2Un
cmUgY3JlYXRpbmcuCiAgICAgSlNET01XaW5kb3cqIGdsb2JhbE9iamVjdCA9IHNjcmlwdENvbnRy
b2xsZXItPmdsb2JhbE9iamVjdCgpOwogCiAgICAgcmV0dXJuIEpTTGF6eUV2ZW50TGlzdGVuZXI6
OmNyZWF0ZShhdHRyLT5sb2NhbE5hbWUoKS5zdHJpbmcoKSwgZXZlbnRQYXJhbWV0ZXJOYW1lKGZy
YW1lLT5kb2N1bWVudCgpLT5pc1NWR0RvY3VtZW50KCkpLCBhdHRyLT52YWx1ZSgpLCBnbG9iYWxP
YmplY3QsIDAsIHNjcmlwdENvbnRyb2xsZXItPmV2ZW50SGFuZGxlckxpbmVOdW1iZXIoKSk7Cklu
ZGV4OiBiaW5kaW5ncy9qcy9KU0xhenlFdmVudExpc3RlbmVyLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gYmlu
ZGluZ3MvanMvSlNMYXp5RXZlbnRMaXN0ZW5lci5oCShyZXZpc2lvbiA0MjY2NykKKysrIGJpbmRp
bmdzL2pzL0pTTGF6eUV2ZW50TGlzdGVuZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMjgsNyArMjgs
NyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgY2xhc3MgQXR0cmlidXRlOwogICAgIGNsYXNz
IE5vZGU7CiAKLSAgICBjbGFzcyBKU0xhenlFdmVudExpc3RlbmVyIDogcHVibGljIEpTQWJzdHJh
Y3RFdmVudExpc3RlbmVyIHsKKyAgICBjbGFzcyBKU0xhenlFdmVudExpc3RlbmVyIDogcHVibGlj
IEpTRXZlbnRMaXN0ZW5lciB7CiAgICAgcHVibGljOgogICAgICAgICBzdGF0aWMgUGFzc1JlZlB0
cjxKU0xhenlFdmVudExpc3RlbmVyPiBjcmVhdGUoY29uc3QgU3RyaW5nJiBmdW5jdGlvbk5hbWUs
IGNvbnN0IFN0cmluZyYgZXZlbnRQYXJhbWV0ZXJOYW1lLCBjb25zdCBTdHJpbmcmIGNvZGUsIEpT
RE9NR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIE5vZGUqIG5vZGUsIGludCBsaW5lTnVtYmVy
KQogICAgICAgICB7CkBAIC0zNiwyMCArMzYsMTQgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAg
ICAgICB9CiAgICAgICAgIHZpcnR1YWwgfkpTTGF6eUV2ZW50TGlzdGVuZXIoKTsKIAotICAgICAg
ICB2b2lkIGNsZWFyR2xvYmFsT2JqZWN0KCkgeyBtX2dsb2JhbE9iamVjdCA9IDA7IH0KLQogICAg
IHByaXZhdGU6CiAgICAgICAgIEpTTGF6eUV2ZW50TGlzdGVuZXIoY29uc3QgU3RyaW5nJiBmdW5j
dGlvbk5hbWUsIGNvbnN0IFN0cmluZyYgZXZlbnRQYXJhbWV0ZXJOYW1lLCBjb25zdCBTdHJpbmcm
IGNvZGUsIEpTRE9NR2xvYmFsT2JqZWN0KiwgTm9kZSosIGludCBsaW5lTnVtYmVyKTsKIAogICAg
ICAgICB2aXJ0dWFsIEpTQzo6SlNPYmplY3QqIGpzRnVuY3Rpb24oKSBjb25zdDsKLSAgICAgICAg
dmlydHVhbCBKU0RPTUdsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0KCkgY29uc3Q7CiAgICAgICAg
IHZpcnR1YWwgYm9vbCB3YXNDcmVhdGVkRnJvbU1hcmt1cCgpIGNvbnN0IHsgcmV0dXJuIHRydWU7
IH0KIAogICAgICAgICB2b2lkIHBhcnNlQ29kZSgpIGNvbnN0OwogCi0gICAgICAgIG11dGFibGUg
SlNDOjpQcm90ZWN0ZWRQdHI8SlNDOjpKU09iamVjdD4gbV9qc0Z1bmN0aW9uOwotICAgICAgICBK
U0M6OlByb3RlY3RlZFB0cjxKU0RPTUdsb2JhbE9iamVjdD4gbV9nbG9iYWxPYmplY3Q7Ci0KICAg
ICAgICAgbXV0YWJsZSBTdHJpbmcgbV9mdW5jdGlvbk5hbWU7CiAgICAgICAgIG11dGFibGUgU3Ry
aW5nIG1fZXZlbnRQYXJhbWV0ZXJOYW1lOwogICAgICAgICBtdXRhYmxlIFN0cmluZyBtX2NvZGU7
CkluZGV4OiBkb20vRXZlbnRMaXN0ZW5lci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIGRvbS9FdmVudExpc3Rl
bmVyLmgJKHJldmlzaW9uIDQyNjY3KQorKysgZG9tL0V2ZW50TGlzdGVuZXIuaAkod29ya2luZyBj
b3B5KQpAQCAtMzksNyArMzksNiBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKICNpZiBVU0UoSlND
KQogICAgICAgICB2aXJ0dWFsIEpTQzo6SlNPYmplY3QqIGpzRnVuY3Rpb24oKSBjb25zdCB7IHJl
dHVybiAwOyB9Ci0gICAgICAgIHZpcnR1YWwgdm9pZCBjbGVhckpTRnVuY3Rpb24oKSB7IH0KICAg
ICAgICAgdmlydHVhbCB2b2lkIG1hcmtKU0Z1bmN0aW9uKCkgeyB9CiAjZW5kaWYKIAo=
</data>
<flag name="review"
          id="14789"
          type_id="1"
          status="+"
          setter="darin"
    />
          </attachment>
      

    </bug>

</bugzilla>