<?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>137464</bug_id>
          
          <creation_ts>2014-10-06 14:35:15 -0700</creation_ts>
          <short_desc>Take Web Audio into account for the Page::isPlayingAudio() API</short_desc>
          <delta_ts>2014-11-19 14:59:32 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>Web Audio</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Ada Chan">adachan</reporter>
          <assigned_to name="Ada Chan">adachan</assigned_to>
          <cc>adachan</cc>
    
    <cc>cdumez</cc>
    
    <cc>commit-queue</cc>
    
    <cc>crogers</cc>
    
    <cc>eric.carlson</cc>
    
    <cc>glenn</cc>
    
    <cc>jer.noble</cc>
    
    <cc>philipj</cc>
    
    <cc>sergio</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1039831</commentid>
    <comment_count>0</comment_count>
    <who name="Ada Chan">adachan</who>
    <bug_when>2014-10-06 14:35:15 -0700</bug_when>
    <thetext>Page::isPlayingAudio(), first added in https://bugs.webkit.org/show_bug.cgi?id=137218, does not take into account AudioNodes that are playing audio yet.  We need to support that.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1049616</commentid>
    <comment_count>1</comment_count>
      <attachid>241821</attachid>
    <who name="Ada Chan">adachan</who>
    <bug_when>2014-11-18 15:43:49 -0800</bug_when>
    <thetext>Created attachment 241821
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1049628</commentid>
    <comment_count>2</comment_count>
      <attachid>241821</attachid>
    <who name="Jer Noble">jer.noble</who>
    <bug_when>2014-11-18 16:15:59 -0800</bug_when>
    <thetext>Comment on attachment 241821
Patch

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

&gt; Source/WebCore/platform/audio/ios/AudioDestinationIOS.cpp:198
&gt; +    if (!result) {
&gt;          m_isPlaying = true;
&gt; +        updateIsEffectivelyPlayingAudio();
&gt; +    }

We should add a &quot;void setPlaying(bool)&quot; to avoid duplicated code here...

&gt; Source/WebCore/platform/audio/ios/AudioDestinationIOS.cpp:213
&gt; -    if (!result)
&gt; +    if (!result) {
&gt;          m_isPlaying = false;
&gt; +        updateIsEffectivelyPlayingAudio();
&gt; +    }

...And here.

&gt; Source/WebCore/platform/audio/ios/AudioDestinationIOS.cpp:245
&gt; +void AudioDestinationIOS::updateIsSilent()
&gt; +{
&gt; +    bool isSilent = true;
&gt; +    for (unsigned i = 0; i &lt; m_renderBus-&gt;numberOfChannels(); ++i) {
&gt; +        AudioChannel* channel = m_renderBus-&gt;channel(i);
&gt; +        if (!channel-&gt;isSilent()) {
&gt; +            isSilent = false;
&gt; +            break;
&gt; +        }
&gt; +    }

AudioBus has an isSilent() member which returns true if all channels are silent.  You shouldn&apos;t have to write this loop yourself.

In fact, this could probably be a &quot;void setSilent(bool)&quot; method, and you could call &quot;setSilent(m_renderBus.isSilent())&quot; from render() above.

&gt; Source/WebCore/platform/audio/mac/AudioDestinationMac.cpp:151
&gt; -    if (!result)
&gt; +    if (!result) {
&gt;          m_isPlaying = true;
&gt; +        updateIsEffectivelyPlayingAudio();
&gt; +    }

And since there&apos;s nothing platform specific here, perhaps we should move this up into the AudioDestinationNode class, in AudioDestinationNode::render().

&gt; Source/WebCore/platform/audio/mac/AudioDestinationMac.cpp:161
&gt; -    if (!result)
&gt; +    if (!result) {
&gt;          m_isPlaying = false;
&gt; +        updateIsEffectivelyPlayingAudio();
&gt; +    }

Ditto.

&gt; Source/WebCore/platform/audio/mac/AudioDestinationMac.cpp:209
&gt; +void AudioDestinationMac::updateIsSilent()
&gt; +{
&gt; +    bool isSilent = true;
&gt; +    for (unsigned i = 0; i &lt; m_renderBus-&gt;numberOfChannels(); ++i) {
&gt; +        AudioChannel* channel = m_renderBus-&gt;channel(i);
&gt; +        if (!channel-&gt;isSilent()) {
&gt; +            isSilent = false;
&gt; +            break;
&gt; +        }
&gt; +    }
&gt; +
&gt; +    if (isSilent != m_isSilent) {
&gt; +        m_isSilent = isSilent;
&gt; +        updateIsEffectivelyPlayingAudio();
&gt; +    }
&gt; +}
&gt; +
&gt; +void AudioDestinationMac::updateIsEffectivelyPlayingAudio()
&gt; +{
&gt; +    bool isEffectivelyPlayingAudio = isPlaying() &amp;&amp; !isSilent();
&gt; +    if (isEffectivelyPlayingAudio != m_isEffectivelyPlayingAudio) {
&gt; +        m_isEffectivelyPlayingAudio = isEffectivelyPlayingAudio;
&gt; +        m_callback.isPlayingAudioDidChange();
&gt; +    }
&gt; +}

Ditto.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1049677</commentid>
    <comment_count>3</comment_count>
      <attachid>241821</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2014-11-18 17:39:38 -0800</bug_when>
    <thetext>Comment on attachment 241821
Patch

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

&gt; LayoutTests/webaudio/web-audio-is-playing.html:4
&gt; +    &lt;script type=&quot;text/javascript&quot; src=&quot;../resources/js-test-pre.js&quot;&gt;&lt;/script&gt;

nit: Can omit the type as this is the default.

&gt; LayoutTests/webaudio/web-audio-is-playing.html:32
&gt; +        }, 300);

Would it work with a 0 delay? It is really so that we need to wait that long, I am worried that test is going to be flaky.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1049733</commentid>
    <comment_count>4</comment_count>
    <who name="Ada Chan">adachan</who>
    <bug_when>2014-11-18 23:25:57 -0800</bug_when>
    <thetext>(In reply to comment #2)
Thanks for your feedback, Jer!  I&apos;ll update my patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1049735</commentid>
    <comment_count>5</comment_count>
    <who name="Ada Chan">adachan</who>
    <bug_when>2014-11-18 23:29:25 -0800</bug_when>
    <thetext>(In reply to comment #3)
&gt; Comment on attachment 241821 [details]
&gt; Patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=241821&amp;action=review
&gt; 
&gt; &gt; LayoutTests/webaudio/web-audio-is-playing.html:4
&gt; &gt; +    &lt;script type=&quot;text/javascript&quot; src=&quot;../resources/js-test-pre.js&quot;&gt;&lt;/script&gt;
&gt; 
&gt; nit: Can omit the type as this is the default.

OK, will fix.

&gt; 
&gt; &gt; LayoutTests/webaudio/web-audio-is-playing.html:32
&gt; &gt; +        }, 300);
&gt; 
&gt; Would it work with a 0 delay? It is really so that we need to wait that
&gt; long, I am worried that test is going to be flaky.

Yes, I&apos;ve tested with different delays and values less than this one do not pass consistently.  Do you have suggestions on other ways to test this?  This test also produces a very short beep.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1049789</commentid>
    <comment_count>6</comment_count>
      <attachid>241821</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2014-11-19 09:15:10 -0800</bug_when>
    <thetext>Comment on attachment 241821
Patch

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

&gt;&gt;&gt; LayoutTests/webaudio/web-audio-is-playing.html:32
&gt;&gt;&gt; +        }, 300);
&gt;&gt; 
&gt;&gt; Would it work with a 0 delay? It is really so that we need to wait that long, I am worried that test is going to be flaky.
&gt; 
&gt; Yes, I&apos;ve tested with different delays and values less than this one do not pass consistently.  Do you have suggestions on other ways to test this?  This test also produces a very short beep.

You should probably use shouldBecomeEqual() from js-test-pre.js. I think it is used exactly for such cases.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1049859</commentid>
    <comment_count>7</comment_count>
      <attachid>241873</attachid>
    <who name="Ada Chan">adachan</who>
    <bug_when>2014-11-19 11:49:43 -0800</bug_when>
    <thetext>Created attachment 241873
Revised patch: incorporated feedback from Jer and Chris.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1049930</commentid>
    <comment_count>8</comment_count>
    <who name="Ada Chan">adachan</who>
    <bug_when>2014-11-19 14:59:32 -0800</bug_when>
    <thetext>Committed:
http://trac.webkit.org/changeset/176350</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>241821</attachid>
            <date>2014-11-18 15:43:49 -0800</date>
            <delta_ts>2014-11-19 11:49:43 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>0001-Take-Web-Audio-into-account-for-the-Page-isPlayingAu.patch</filename>
            <type>text/plain</type>
            <size>30132</size>
            <attacher name="Ada Chan">adachan</attacher>
            
              <data encoding="base64">RnJvbSA0YTgwZmQ1NGJjYWI4MDE4YWVhMjgwNWMwZTdiZGQ2YzQ4OGViMzVhIE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBBZGEgQ2hhbiA8YWRhY2hhbkBhcHBsZS5jb20+CkRhdGU6IFR1
ZSwgMTggTm92IDIwMTQgMTQ6NDQ6NDEgLTA4MDAKU3ViamVjdDogW1BBVENIXSBUYWtlIFdlYiBB
dWRpbyBpbnRvIGFjY291bnQgZm9yIHRoZSBQYWdlOjppc1BsYXlpbmdBdWRpbygpCiBBUEkuIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMzc0NjQKClJldmlld2VkIGJ5
IE5PQk9EWSAoT09QUyEpLgoKU291cmNlL1dlYkNvcmU6CgpNYWtlIEF1ZGlvQ29udGV4dCBhIHN1
YmNsYXNzIG9mIEF1ZGlvUHJvZHVjZXIuIEl0IGZpZ3VyZXMgb3V0IHdoZXRoZXIgdGhlcmUncwph
dWRpbyBwbGF5aW5nIGJ5IGNoZWNraW5nIHdoZXRoZXIgaXRzIEF1ZGlvRGVzdGluYXRpb25Ob2Rl
IGlzIHBsYXlpbmcgKGFuZCBub3QKc2lsZW50KS4gSXQgY2FsbHMgRG9jdW1lbnQ6OnVwZGF0ZUlz
UGxheWluZ0F1ZGlvKCkgd2hlbmV2ZXIgaXRzIGF1ZGlvIHBsYXlpbmcKc3RhdGUgaGFzIGNoYW5n
ZWQuCgpUZXN0OiB3ZWJhdWRpby93ZWItYXVkaW8taXMtcGxheWluZy5odG1sCgoqIE1vZHVsZXMv
d2ViYXVkaW8vQXVkaW9Db250ZXh0LmNwcDoKKFdlYkNvcmU6OkF1ZGlvQ29udGV4dDo6bGF6eUlu
aXRpYWxpemUpOgpBZGQgaXRzZWxmIHRvIHRoZSBEb2N1bWVudCdzIGxpc3Qgb2YgQXVkaW9Qcm9k
dWNlcnMgaWYgaXQncyBub3QgYW4gb2ZmbGluZQphdWRpbyBjb250ZXh0LgooV2ViQ29yZTo6QXVk
aW9Db250ZXh0Ojp1bmluaXRpYWxpemUpOgpSZW1vdmUgaXRzZWxmIGZyb20gdGhlIERvY3VtZW50
J3MgbGlzdCBvZiBBdWRpb1Byb2R1Y2VycyBpZiBpdCdzIG5vdCBhbiBvZmZsaW5lCmF1ZGlvIGNv
bnRleHQuCihXZWJDb3JlOjpBdWRpb0NvbnRleHQ6OnN0b3ApOgpUZWxsIHRoZSBkb2N1bWVudCB0
byB1cGRhdGUgaXRzIGF1ZGlvIHBsYXlpbmcgc3RhdGUuCihXZWJDb3JlOjpBdWRpb0NvbnRleHQ6
OmlzUGxheWluZ0F1ZGlvKToKUmV0dXJuIHRydWUgaWYgdGhlIGF1ZGlvIGNvbnRleHQgaGFzbid0
IGJlZW4gc3RvcHBlZCBhbmQgaXRzIGRlc3RpbmF0aW9uIG5vZGUgaXMKcGxheWluZyBhdWRpby4K
KFdlYkNvcmU6OkF1ZGlvQ29udGV4dDo6cGFnZU11dGVkU3RhdGVEaWRDaGFuZ2UpOgpBZGQgYSBG
SVhNRSBmb3Igbm93LgooV2ViQ29yZTo6QXVkaW9Db250ZXh0Ojppc1BsYXlpbmdBdWRpb0RpZENo
YW5nZSk6CkNhbGwgRG9jdW1lbnQ6OnVwZGF0ZUlzUGxheWluZ0F1ZGlvKCkuCiogTW9kdWxlcy93
ZWJhdWRpby9BdWRpb0NvbnRleHQuaDoKCiogTW9kdWxlcy93ZWJhdWRpby9BdWRpb0Rlc3RpbmF0
aW9uTm9kZS5jcHA6CihXZWJDb3JlOjpBdWRpb0Rlc3RpbmF0aW9uTm9kZTo6aXNQbGF5aW5nQXVk
aW9EaWRDaGFuZ2UpOgpOb3RpZnkgdGhlIEF1ZGlvQ29udGV4dCBhYm91dCB0aGUgY2hhbmdlIGlu
IGF1ZGlvIHBsYXlpbmcgc3RhdGUuCiogTW9kdWxlcy93ZWJhdWRpby9BdWRpb0Rlc3RpbmF0aW9u
Tm9kZS5oOgooV2ViQ29yZTo6QXVkaW9EZXN0aW5hdGlvbk5vZGU6OmlzUGxheWluZ0F1ZGlvKToK
CiogTW9kdWxlcy93ZWJhdWRpby9EZWZhdWx0QXVkaW9EZXN0aW5hdGlvbk5vZGUuY3BwOgooV2Vi
Q29yZTo6RGVmYXVsdEF1ZGlvRGVzdGluYXRpb25Ob2RlOjppc1BsYXlpbmdBdWRpbyk6ClJldHVy
biB3aGV0aGVyIHRoZSBBdWRpb0Rlc3RpbmF0aW9uIGlzIHJlYWxseSBwbGF5aW5nIGF1ZGlvIChw
bGF5aW5nIGFuZCBub3Qgc2lsZW50KS4KKiBNb2R1bGVzL3dlYmF1ZGlvL0RlZmF1bHRBdWRpb0Rl
c3RpbmF0aW9uTm9kZS5oOgoKKiBwbGF0Zm9ybS9hdWRpby9BdWRpb0Rlc3RpbmF0aW9uLmg6Ciog
cGxhdGZvcm0vYXVkaW8vQXVkaW9JT0NhbGxiYWNrLmg6CiogcGxhdGZvcm0vYXVkaW8vaW9zL0F1
ZGlvRGVzdGluYXRpb25JT1MuY3BwOgooV2ViQ29yZTo6QXVkaW9EZXN0aW5hdGlvbklPUzo6QXVk
aW9EZXN0aW5hdGlvbklPUyk6CkluaXRpYWxpemUgbV9pc1NpbGVudCBhbmQgbV9pc0VmZmVjdGl2
ZWx5UGxheWluZ0F1ZGlvLgooV2ViQ29yZTo6QXVkaW9EZXN0aW5hdGlvbklPUzo6c3RhcnQpOgpB
ZnRlciBtX2lzUGxheWluZyBjaGFuZ2VzLCBjYWxsIHVwZGF0ZUlzRWZmZWN0aXZlbHlQbGF5aW5n
QXVkaW8oKS4KKFdlYkNvcmU6OkF1ZGlvRGVzdGluYXRpb25JT1M6OnN0b3ApOgpEaXR0by4KKFdl
YkNvcmU6OkF1ZGlvRGVzdGluYXRpb25JT1M6OnJlbmRlcik6CkFmdGVyIHJlbmRlcmluZyBmaW5p
c2hlcywgY2FsbCB1cGRhdGVJc1NpbGVudCgpIHRvIHVwZGF0ZSBtX2lzU2lsZW50LgooV2ViQ29y
ZTo6QXVkaW9EZXN0aW5hdGlvbklPUzo6dXBkYXRlSXNTaWxlbnQpOgpDb21wdXRlIHRoZSBjdXJy
ZW50IG1faXNTaWxlbnQgc3RhdGUgYnkgZ29pbmcgdGhyb3VnaCBhbGwgYXVkaW8gY2hhbm5lbHMg
dG8gc2VlIGlmIHRoZXkgYXJlIGFsbApzaWxlbnQuIElmIG1faXNTaWxlbnQgaGFzIGNoYW5nZWQs
IGNhbGwgdXBkYXRlSXNFZmZlY3RpdmVseVBsYXlpbmdBdWRpbygpLgooV2ViQ29yZTo6QXVkaW9E
ZXN0aW5hdGlvbklPUzo6dXBkYXRlSXNFZmZlY3RpdmVseVBsYXlpbmdBdWRpbyk6CkNvbXB1dGUg
dGhlIGN1cnJlbnQgbV9pc0VmZmVjdGl2ZWx5UGxheWluZ0F1ZGlvLiBJZiBpdCBoYXMgY2hhbmdl
ZCwgY2FsbCB1cGRhdGVJc0VmZmVjdGl2ZWx5UGxheWluZ0F1ZGlvKCkuCiogcGxhdGZvcm0vYXVk
aW8vaW9zL0F1ZGlvRGVzdGluYXRpb25JT1MuaDoKCiogcGxhdGZvcm0vYXVkaW8vbWFjL0F1ZGlv
RGVzdGluYXRpb25NYWMuY3BwOgooV2ViQ29yZTo6QXVkaW9EZXN0aW5hdGlvbk1hYzo6QXVkaW9E
ZXN0aW5hdGlvbk1hYyk6CkluaXRpYWxpemUgbV9pc1NpbGVudCBhbmQgbV9pc0VmZmVjdGl2ZWx5
UGxheWluZ0F1ZGlvLgooV2ViQ29yZTo6QXVkaW9EZXN0aW5hdGlvbk1hYzo6c3RhcnQpOgpBZnRl
ciBtX2lzUGxheWluZyBjaGFuZ2VzLCBjYWxsIHVwZGF0ZUlzRWZmZWN0aXZlbHlQbGF5aW5nQXVk
aW8oKS4KKFdlYkNvcmU6OkF1ZGlvRGVzdGluYXRpb25NYWM6OnN0b3ApOgpEaXR0by4KKFdlYkNv
cmU6OkF1ZGlvRGVzdGluYXRpb25NYWM6OnJlbmRlcik6CkFmdGVyIHJlbmRlcmluZyBmaW5pc2hl
cywgY2FsbCB1cGRhdGVJc1NpbGVudCgpIHRvIHVwZGF0ZSBtX2lzU2lsZW50LgooV2ViQ29yZTo6
QXVkaW9EZXN0aW5hdGlvbk1hYzo6dXBkYXRlSXNTaWxlbnQpOgpDb21wdXRlIHRoZSBjdXJyZW50
IG1faXNTaWxlbnQgc3RhdGUgYnkgZ29pbmcgdGhyb3VnaCBhbGwgYXVkaW8gY2hhbm5lbHMgdG8g
c2VlIGlmIHRoZXkgYXJlIGFsbApzaWxlbnQuIElmIG1faXNTaWxlbnQgaGFzIGNoYW5nZWQsIGNh
bGwgdXBkYXRlSXNFZmZlY3RpdmVseVBsYXlpbmdBdWRpbygpLgooV2ViQ29yZTo6QXVkaW9EZXN0
aW5hdGlvbk1hYzo6dXBkYXRlSXNFZmZlY3RpdmVseVBsYXlpbmdBdWRpbyk6CkNvbXB1dGUgdGhl
IGN1cnJlbnQgbV9pc0VmZmVjdGl2ZWx5UGxheWluZ0F1ZGlvLiBJZiBpdCBoYXMgY2hhbmdlZCwg
Y2FsbCB1cGRhdGVJc0VmZmVjdGl2ZWx5UGxheWluZ0F1ZGlvKCkuCiogcGxhdGZvcm0vYXVkaW8v
bWFjL0F1ZGlvRGVzdGluYXRpb25NYWMuaDoKCiogdGVzdGluZy9JbnRlcm5hbHMuY3BwOgooV2Vi
Q29yZTo6SW50ZXJuYWxzOjppc1BhZ2VQbGF5aW5nQXVkaW8pOgoqIHRlc3RpbmcvSW50ZXJuYWxz
Lmg6CiogdGVzdGluZy9JbnRlcm5hbHMuaWRsOgpBZGQgaW50ZXJuYWxzLmlzUGFnZVBsYXlpbmdB
dWRpbygpIGZvciB0ZXN0aW5nLgoKTGF5b3V0VGVzdHM6CgpUaGlzIHRlc3QgY2hlY2tzIHRoYXQg
UGFnZTo6aXNQbGF5aW5nQXVkaW8oKSByZXR1cm5zIGZhbHNlIGJlZm9yZSBhbiBhdWRpbyBjb250
ZXh0IGlzIGNyZWF0ZWQKYW5kIGJlZm9yZSB0aGUgb3NjaWxsYXRvciBub2RlIG1ha2VzIGEgc291
bmQuIEl0IHRoZW4gc3RhcnRzIHRoZSBvc2NpbGxhdG9yIG5vZGUgYW5kIHRoZW4gYWZ0ZXIKYSBz
aG9ydCBkZWxheSBtYWtlcyBzdXJlIFBhZ2U6OmlzUGxheWluZ0F1ZGlvKCkgZG9lcyByZXR1cm4g
dHJ1ZS4KCiogd2ViYXVkaW8vd2ViLWF1ZGlvLWlzLXBsYXlpbmctZXhwZWN0ZWQudHh0OiBBZGRl
ZC4KKiB3ZWJhdWRpby93ZWItYXVkaW8taXMtcGxheWluZy5odG1sOiBBZGRlZC4KLS0tCiBMYXlv
dXRUZXN0cy9DaGFuZ2VMb2cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IDE0ICsrKysK
IC4uLi93ZWJhdWRpby93ZWItYXVkaW8taXMtcGxheWluZy1leHBlY3RlZC50eHQgICAgIHwgMTIg
KysrKwogTGF5b3V0VGVzdHMvd2ViYXVkaW8vd2ViLWF1ZGlvLWlzLXBsYXlpbmcuaHRtbCAgICAg
fCAzNiArKysrKysrKysrCiBTb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cgICAgICAgICAgICAgICAg
ICAgICAgICAgICB8IDgzICsrKysrKysrKysrKysrKysrKysrKysKIFNvdXJjZS9XZWJDb3JlL01v
ZHVsZXMvd2ViYXVkaW8vQXVkaW9Db250ZXh0LmNwcCAgIHwgMjEgKysrKysrCiBTb3VyY2UvV2Vi
Q29yZS9Nb2R1bGVzL3dlYmF1ZGlvL0F1ZGlvQ29udGV4dC5oICAgICB8ICA5ICsrLQogLi4uL01v
ZHVsZXMvd2ViYXVkaW8vQXVkaW9EZXN0aW5hdGlvbk5vZGUuY3BwICAgICAgfCAgNiArKwogLi4u
L01vZHVsZXMvd2ViYXVkaW8vQXVkaW9EZXN0aW5hdGlvbk5vZGUuaCAgICAgICAgfCAgNSArLQog
Li4uL3dlYmF1ZGlvL0RlZmF1bHRBdWRpb0Rlc3RpbmF0aW9uTm9kZS5jcHAgICAgICAgfCAgNiAr
KwogLi4uL01vZHVsZXMvd2ViYXVkaW8vRGVmYXVsdEF1ZGlvRGVzdGluYXRpb25Ob2RlLmggfCAg
MyArLQogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vYXVkaW8vQXVkaW9EZXN0aW5hdGlvbi5oICAg
fCAgMiArCiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9hdWRpby9BdWRpb0lPQ2FsbGJhY2suaCAg
ICB8ICAyICsKIC4uLi9wbGF0Zm9ybS9hdWRpby9pb3MvQXVkaW9EZXN0aW5hdGlvbklPUy5jcHAg
ICAgIHwgMzggKysrKysrKysrLQogLi4uL3BsYXRmb3JtL2F1ZGlvL2lvcy9BdWRpb0Rlc3RpbmF0
aW9uSU9TLmggICAgICAgfCAgNiArKwogLi4uL3BsYXRmb3JtL2F1ZGlvL21hYy9BdWRpb0Rlc3Rp
bmF0aW9uTWFjLmNwcCAgICAgfCAzOCArKysrKysrKystCiAuLi4vcGxhdGZvcm0vYXVkaW8vbWFj
L0F1ZGlvRGVzdGluYXRpb25NYWMuaCAgICAgICB8ICA2ICsrCiBTb3VyY2UvV2ViQ29yZS90ZXN0
aW5nL0ludGVybmFscy5jcHAgICAgICAgICAgICAgICB8ICA5ICsrKwogU291cmNlL1dlYkNvcmUv
dGVzdGluZy9JbnRlcm5hbHMuaCAgICAgICAgICAgICAgICAgfCAgMSArCiBTb3VyY2UvV2ViQ29y
ZS90ZXN0aW5nL0ludGVybmFscy5pZGwgICAgICAgICAgICAgICB8ICAxICsKIDE5IGZpbGVzIGNo
YW5nZWQsIDI5MSBpbnNlcnRpb25zKCspLCA3IGRlbGV0aW9ucygtKQogY3JlYXRlIG1vZGUgMTAw
NjQ0IExheW91dFRlc3RzL3dlYmF1ZGlvL3dlYi1hdWRpby1pcy1wbGF5aW5nLWV4cGVjdGVkLnR4
dAogY3JlYXRlIG1vZGUgMTAwNjQ0IExheW91dFRlc3RzL3dlYmF1ZGlvL3dlYi1hdWRpby1pcy1w
bGF5aW5nLmh0bWwKCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cgYi9MYXlvdXRU
ZXN0cy9DaGFuZ2VMb2cKaW5kZXggZmZjMTYwNC4uNGUzNTc4NiAxMDA2NDQKLS0tIGEvTGF5b3V0
VGVzdHMvQ2hhbmdlTG9nCisrKyBiL0xheW91dFRlc3RzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE3
IEBACisyMDE0LTExLTE4ICBBZGEgQ2hhbiAgPGFkYWNoYW5AYXBwbGUuY29tPgorCisgICAgICAg
IFRha2UgV2ViIEF1ZGlvIGludG8gYWNjb3VudCBmb3IgdGhlIFBhZ2U6OmlzUGxheWluZ0F1ZGlv
KCkgQVBJLgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
MTM3NDY0CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAg
VGhpcyB0ZXN0IGNoZWNrcyB0aGF0IFBhZ2U6OmlzUGxheWluZ0F1ZGlvKCkgcmV0dXJucyBmYWxz
ZSBiZWZvcmUgYW4gYXVkaW8gY29udGV4dCBpcyBjcmVhdGVkCisgICAgICAgIGFuZCBiZWZvcmUg
dGhlIG9zY2lsbGF0b3Igbm9kZSBtYWtlcyBhIHNvdW5kLiBJdCB0aGVuIHN0YXJ0cyB0aGUgb3Nj
aWxsYXRvciBub2RlIGFuZCB0aGVuIGFmdGVyCisgICAgICAgIGEgc2hvcnQgZGVsYXkgbWFrZXMg
c3VyZSBQYWdlOjppc1BsYXlpbmdBdWRpbygpIGRvZXMgcmV0dXJuIHRydWUuCisKKyAgICAgICAg
KiB3ZWJhdWRpby93ZWItYXVkaW8taXMtcGxheWluZy1leHBlY3RlZC50eHQ6IEFkZGVkLgorICAg
ICAgICAqIHdlYmF1ZGlvL3dlYi1hdWRpby1pcy1wbGF5aW5nLmh0bWw6IEFkZGVkLgorCiAyMDE0
LTExLTE4ICBEYXZpZCBIeWF0dCAgPGh5YXR0QGFwcGxlLmNvbT4KIAogICAgICAgICBSRUdSRVNT
SU9OKHIxNTIzMTMpOiBJbmxpbmUtYmxvY2sgZWxlbWVudCBkb2Vzbid0IHdyYXAgcHJvcGVybHkK
ZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3dlYmF1ZGlvL3dlYi1hdWRpby1pcy1wbGF5aW5nLWV4
cGVjdGVkLnR4dCBiL0xheW91dFRlc3RzL3dlYmF1ZGlvL3dlYi1hdWRpby1pcy1wbGF5aW5nLWV4
cGVjdGVkLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wN2MzZTEyCi0t
LSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvd2ViYXVkaW8vd2ViLWF1ZGlvLWlzLXBsYXlp
bmctZXhwZWN0ZWQudHh0CkBAIC0wLDAgKzEsMTIgQEAKK1Rlc3RpbmcgUGFnZTo6aXNQbGF5aW5n
QXVkaW8oKSB3aXRoIHdlYiBhdWRpbworCitPbiBzdWNjZXNzLCB5b3Ugd2lsbCBzZWUgYSBzZXJp
ZXMgb2YgIlBBU1MiIG1lc3NhZ2VzLCBmb2xsb3dlZCBieSAiVEVTVCBDT01QTEVURSIuCisKKwor
UEFTUyB3aW5kb3cuaW50ZXJuYWxzLmlzUGFnZVBsYXlpbmdBdWRpbygpIGlzIGZhbHNlCitQQVNT
IHdpbmRvdy5pbnRlcm5hbHMuaXNQYWdlUGxheWluZ0F1ZGlvKCkgaXMgZmFsc2UKK1BBU1Mgd2lu
ZG93LmludGVybmFscy5pc1BhZ2VQbGF5aW5nQXVkaW8oKSBpcyB0cnVlCitQQVNTIHN1Y2Nlc3Nm
dWxseVBhcnNlZCBpcyB0cnVlCisKK1RFU1QgQ09NUExFVEUKKwpkaWZmIC0tZ2l0IGEvTGF5b3V0
VGVzdHMvd2ViYXVkaW8vd2ViLWF1ZGlvLWlzLXBsYXlpbmcuaHRtbCBiL0xheW91dFRlc3RzL3dl
YmF1ZGlvL3dlYi1hdWRpby1pcy1wbGF5aW5nLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMDAwMDAwMC4uNDQxZjJmZgotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL3dlYmF1
ZGlvL3dlYi1hdWRpby1pcy1wbGF5aW5nLmh0bWwKQEAgLTAsMCArMSwzNiBAQAorPCFET0NUWVBF
IGh0bWw+Cis8aHRtbD4KKzxoZWFkPgorICAgIDxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0
IiBzcmM9Ii4uL3Jlc291cmNlcy9qcy10ZXN0LXByZS5qcyI+PC9zY3JpcHQ+Cis8L2hlYWQ+Cis8
Ym9keT4KKyAgICA8c2NyaXB0PgorICAgICAgICBkZXNjcmlwdGlvbigiVGVzdGluZyBQYWdlOjpp
c1BsYXlpbmdBdWRpbygpIHdpdGggd2ViIGF1ZGlvIik7CisKKyAgICAgICAganNUZXN0SXNBc3lu
YyA9IHRydWU7CisKKyAgICAgICAgaWYgKHdpbmRvdy5pbnRlcm5hbHMpCisgICAgICAgICAgICBz
aG91bGRCZUZhbHNlKCJ3aW5kb3cuaW50ZXJuYWxzLmlzUGFnZVBsYXlpbmdBdWRpbygpIik7CisK
KyAgICAgICAgdmFyIGNvbnRleHQgPSBuZXcgd2Via2l0QXVkaW9Db250ZXh0KCk7CisgICAgICAg
IHZhciBmcmVxdWVuY3kgPSAzMDA7CisgICAgICAgIHZhciBvc2NpbGxhdG9yID0gY29udGV4dC5j
cmVhdGVPc2NpbGxhdG9yKCk7CisKKyAgICAgICAgaWYgKHdpbmRvdy5pbnRlcm5hbHMpCisgICAg
ICAgICAgICBzaG91bGRCZUZhbHNlKCJ3aW5kb3cuaW50ZXJuYWxzLmlzUGFnZVBsYXlpbmdBdWRp
bygpIik7CisKKyAgICAgICAgb3NjaWxsYXRvci5mcmVxdWVuY3kudmFsdWUgPSBmcmVxdWVuY3k7
CisgICAgICAgIG9zY2lsbGF0b3IudHlwZSA9IDA7CisgICAgICAgIG9zY2lsbGF0b3IuY29ubmVj
dChjb250ZXh0LmRlc3RpbmF0aW9uKTsKKyAgICAgICAgb3NjaWxsYXRvci5zdGFydCgwKTsKKwor
ICAgICAgICAvKiBEZWxheSBjaGVja2luZyBpc1BhZ2VQbGF5aW5nQXVkaW8oKSB0byBnaXZlIHRp
bWUgZm9yIHJlbmRlcmluZyAqLworICAgICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uKCkgeworICAg
ICAgICAgICAgaWYgKHdpbmRvdy5pbnRlcm5hbHMpCisgICAgICAgICAgICAgICAgc2hvdWxkQmVU
cnVlKCJ3aW5kb3cuaW50ZXJuYWxzLmlzUGFnZVBsYXlpbmdBdWRpbygpIik7CisgICAgICAgICAg
ICBmaW5pc2hKU1Rlc3QoKTsKKyAgICAgICAgfSwgMzAwKTsKKyAgICA8L3NjcmlwdD4KKyAgICA8
c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSIuLi9yZXNvdXJjZXMvanMtdGVzdC1w
b3N0LmpzIj48L3NjcmlwdD4KKzwvYm9keT4KKzwvaHRtbD4KZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwppbmRleCBhNDQ0MGIz
Li4xOTFjNDcyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvU291
cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsODYgQEAKKzIwMTQtMTEtMTggIEFkYSBD
aGFuICA8YWRhY2hhbkBhcHBsZS5jb20+CisKKyAgICAgICAgVGFrZSBXZWIgQXVkaW8gaW50byBh
Y2NvdW50IGZvciB0aGUgUGFnZTo6aXNQbGF5aW5nQXVkaW8oKSBBUEkuCisgICAgICAgIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMzc0NjQKKworICAgICAgICBSZXZp
ZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBNYWtlIEF1ZGlvQ29udGV4dCBhIHN1
YmNsYXNzIG9mIEF1ZGlvUHJvZHVjZXIuIEl0IGZpZ3VyZXMgb3V0IHdoZXRoZXIgdGhlcmUncwor
ICAgICAgICBhdWRpbyBwbGF5aW5nIGJ5IGNoZWNraW5nIHdoZXRoZXIgaXRzIEF1ZGlvRGVzdGlu
YXRpb25Ob2RlIGlzIHBsYXlpbmcgKGFuZCBub3QKKyAgICAgICAgc2lsZW50KS4gSXQgY2FsbHMg
RG9jdW1lbnQ6OnVwZGF0ZUlzUGxheWluZ0F1ZGlvKCkgd2hlbmV2ZXIgaXRzIGF1ZGlvIHBsYXlp
bmcKKyAgICAgICAgc3RhdGUgaGFzIGNoYW5nZWQuCisKKyAgICAgICAgVGVzdDogd2ViYXVkaW8v
d2ViLWF1ZGlvLWlzLXBsYXlpbmcuaHRtbAorCisgICAgICAgICogTW9kdWxlcy93ZWJhdWRpby9B
dWRpb0NvbnRleHQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6QXVkaW9Db250ZXh0OjpsYXp5SW5p
dGlhbGl6ZSk6CisgICAgICAgIEFkZCBpdHNlbGYgdG8gdGhlIERvY3VtZW50J3MgbGlzdCBvZiBB
dWRpb1Byb2R1Y2VycyBpZiBpdCdzIG5vdCBhbiBvZmZsaW5lCisgICAgICAgIGF1ZGlvIGNvbnRl
eHQuCisgICAgICAgIChXZWJDb3JlOjpBdWRpb0NvbnRleHQ6OnVuaW5pdGlhbGl6ZSk6CisgICAg
ICAgIFJlbW92ZSBpdHNlbGYgZnJvbSB0aGUgRG9jdW1lbnQncyBsaXN0IG9mIEF1ZGlvUHJvZHVj
ZXJzIGlmIGl0J3Mgbm90IGFuIG9mZmxpbmUKKyAgICAgICAgYXVkaW8gY29udGV4dC4KKyAgICAg
ICAgKFdlYkNvcmU6OkF1ZGlvQ29udGV4dDo6c3RvcCk6CisgICAgICAgIFRlbGwgdGhlIGRvY3Vt
ZW50IHRvIHVwZGF0ZSBpdHMgYXVkaW8gcGxheWluZyBzdGF0ZS4KKyAgICAgICAgKFdlYkNvcmU6
OkF1ZGlvQ29udGV4dDo6aXNQbGF5aW5nQXVkaW8pOgorICAgICAgICBSZXR1cm4gdHJ1ZSBpZiB0
aGUgYXVkaW8gY29udGV4dCBoYXNuJ3QgYmVlbiBzdG9wcGVkIGFuZCBpdHMgZGVzdGluYXRpb24g
bm9kZSBpcworICAgICAgICBwbGF5aW5nIGF1ZGlvLgorICAgICAgICAoV2ViQ29yZTo6QXVkaW9D
b250ZXh0OjpwYWdlTXV0ZWRTdGF0ZURpZENoYW5nZSk6CisgICAgICAgIEFkZCBhIEZJWE1FIGZv
ciBub3cuCisgICAgICAgIChXZWJDb3JlOjpBdWRpb0NvbnRleHQ6OmlzUGxheWluZ0F1ZGlvRGlk
Q2hhbmdlKToKKyAgICAgICAgQ2FsbCBEb2N1bWVudDo6dXBkYXRlSXNQbGF5aW5nQXVkaW8oKS4K
KyAgICAgICAgKiBNb2R1bGVzL3dlYmF1ZGlvL0F1ZGlvQ29udGV4dC5oOgorCisgICAgICAgICog
TW9kdWxlcy93ZWJhdWRpby9BdWRpb0Rlc3RpbmF0aW9uTm9kZS5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpBdWRpb0Rlc3RpbmF0aW9uTm9kZTo6aXNQbGF5aW5nQXVkaW9EaWRDaGFuZ2UpOgorICAg
ICAgICBOb3RpZnkgdGhlIEF1ZGlvQ29udGV4dCBhYm91dCB0aGUgY2hhbmdlIGluIGF1ZGlvIHBs
YXlpbmcgc3RhdGUuCisgICAgICAgICogTW9kdWxlcy93ZWJhdWRpby9BdWRpb0Rlc3RpbmF0aW9u
Tm9kZS5oOgorICAgICAgICAoV2ViQ29yZTo6QXVkaW9EZXN0aW5hdGlvbk5vZGU6OmlzUGxheWlu
Z0F1ZGlvKToKKworICAgICAgICAqIE1vZHVsZXMvd2ViYXVkaW8vRGVmYXVsdEF1ZGlvRGVzdGlu
YXRpb25Ob2RlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkRlZmF1bHRBdWRpb0Rlc3RpbmF0aW9u
Tm9kZTo6aXNQbGF5aW5nQXVkaW8pOgorICAgICAgICBSZXR1cm4gd2hldGhlciB0aGUgQXVkaW9E
ZXN0aW5hdGlvbiBpcyByZWFsbHkgcGxheWluZyBhdWRpbyAocGxheWluZyBhbmQgbm90IHNpbGVu
dCkuCisgICAgICAgICogTW9kdWxlcy93ZWJhdWRpby9EZWZhdWx0QXVkaW9EZXN0aW5hdGlvbk5v
ZGUuaDoKKworICAgICAgICAqIHBsYXRmb3JtL2F1ZGlvL0F1ZGlvRGVzdGluYXRpb24uaDoKKyAg
ICAgICAgKiBwbGF0Zm9ybS9hdWRpby9BdWRpb0lPQ2FsbGJhY2suaDoKKyAgICAgICAgKiBwbGF0
Zm9ybS9hdWRpby9pb3MvQXVkaW9EZXN0aW5hdGlvbklPUy5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpBdWRpb0Rlc3RpbmF0aW9uSU9TOjpBdWRpb0Rlc3RpbmF0aW9uSU9TKToKKyAgICAgICAgSW5p
dGlhbGl6ZSBtX2lzU2lsZW50IGFuZCBtX2lzRWZmZWN0aXZlbHlQbGF5aW5nQXVkaW8uCisgICAg
ICAgIChXZWJDb3JlOjpBdWRpb0Rlc3RpbmF0aW9uSU9TOjpzdGFydCk6CisgICAgICAgIEFmdGVy
IG1faXNQbGF5aW5nIGNoYW5nZXMsIGNhbGwgdXBkYXRlSXNFZmZlY3RpdmVseVBsYXlpbmdBdWRp
bygpLgorICAgICAgICAoV2ViQ29yZTo6QXVkaW9EZXN0aW5hdGlvbklPUzo6c3RvcCk6CisgICAg
ICAgIERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6QXVkaW9EZXN0aW5hdGlvbklPUzo6cmVuZGVy
KToKKyAgICAgICAgQWZ0ZXIgcmVuZGVyaW5nIGZpbmlzaGVzLCBjYWxsIHVwZGF0ZUlzU2lsZW50
KCkgdG8gdXBkYXRlIG1faXNTaWxlbnQuCisgICAgICAgIChXZWJDb3JlOjpBdWRpb0Rlc3RpbmF0
aW9uSU9TOjp1cGRhdGVJc1NpbGVudCk6CisgICAgICAgIENvbXB1dGUgdGhlIGN1cnJlbnQgbV9p
c1NpbGVudCBzdGF0ZSBieSBnb2luZyB0aHJvdWdoIGFsbCBhdWRpbyBjaGFubmVscyB0byBzZWUg
aWYgdGhleSBhcmUgYWxsCisgICAgICAgIHNpbGVudC4gSWYgbV9pc1NpbGVudCBoYXMgY2hhbmdl
ZCwgY2FsbCB1cGRhdGVJc0VmZmVjdGl2ZWx5UGxheWluZ0F1ZGlvKCkuCisgICAgICAgIChXZWJD
b3JlOjpBdWRpb0Rlc3RpbmF0aW9uSU9TOjp1cGRhdGVJc0VmZmVjdGl2ZWx5UGxheWluZ0F1ZGlv
KToKKyAgICAgICAgQ29tcHV0ZSB0aGUgY3VycmVudCBtX2lzRWZmZWN0aXZlbHlQbGF5aW5nQXVk
aW8uIElmIGl0IGhhcyBjaGFuZ2VkLCBjYWxsIHVwZGF0ZUlzRWZmZWN0aXZlbHlQbGF5aW5nQXVk
aW8oKS4KKyAgICAgICAgKiBwbGF0Zm9ybS9hdWRpby9pb3MvQXVkaW9EZXN0aW5hdGlvbklPUy5o
OgorCisgICAgICAgICogcGxhdGZvcm0vYXVkaW8vbWFjL0F1ZGlvRGVzdGluYXRpb25NYWMuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6QXVkaW9EZXN0aW5hdGlvbk1hYzo6QXVkaW9EZXN0aW5hdGlv
bk1hYyk6CisgICAgICAgIEluaXRpYWxpemUgbV9pc1NpbGVudCBhbmQgbV9pc0VmZmVjdGl2ZWx5
UGxheWluZ0F1ZGlvLgorICAgICAgICAoV2ViQ29yZTo6QXVkaW9EZXN0aW5hdGlvbk1hYzo6c3Rh
cnQpOgorICAgICAgICBBZnRlciBtX2lzUGxheWluZyBjaGFuZ2VzLCBjYWxsIHVwZGF0ZUlzRWZm
ZWN0aXZlbHlQbGF5aW5nQXVkaW8oKS4KKyAgICAgICAgKFdlYkNvcmU6OkF1ZGlvRGVzdGluYXRp
b25NYWM6OnN0b3ApOgorICAgICAgICBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OkF1ZGlvRGVz
dGluYXRpb25NYWM6OnJlbmRlcik6CisgICAgICAgIEFmdGVyIHJlbmRlcmluZyBmaW5pc2hlcywg
Y2FsbCB1cGRhdGVJc1NpbGVudCgpIHRvIHVwZGF0ZSBtX2lzU2lsZW50LgorICAgICAgICAoV2Vi
Q29yZTo6QXVkaW9EZXN0aW5hdGlvbk1hYzo6dXBkYXRlSXNTaWxlbnQpOgorICAgICAgICBDb21w
dXRlIHRoZSBjdXJyZW50IG1faXNTaWxlbnQgc3RhdGUgYnkgZ29pbmcgdGhyb3VnaCBhbGwgYXVk
aW8gY2hhbm5lbHMgdG8gc2VlIGlmIHRoZXkgYXJlIGFsbAorICAgICAgICBzaWxlbnQuIElmIG1f
aXNTaWxlbnQgaGFzIGNoYW5nZWQsIGNhbGwgdXBkYXRlSXNFZmZlY3RpdmVseVBsYXlpbmdBdWRp
bygpLgorICAgICAgICAoV2ViQ29yZTo6QXVkaW9EZXN0aW5hdGlvbk1hYzo6dXBkYXRlSXNFZmZl
Y3RpdmVseVBsYXlpbmdBdWRpbyk6CisgICAgICAgIENvbXB1dGUgdGhlIGN1cnJlbnQgbV9pc0Vm
ZmVjdGl2ZWx5UGxheWluZ0F1ZGlvLiBJZiBpdCBoYXMgY2hhbmdlZCwgY2FsbCB1cGRhdGVJc0Vm
ZmVjdGl2ZWx5UGxheWluZ0F1ZGlvKCkuCisgICAgICAgICogcGxhdGZvcm0vYXVkaW8vbWFjL0F1
ZGlvRGVzdGluYXRpb25NYWMuaDoKKworICAgICAgICAqIHRlc3RpbmcvSW50ZXJuYWxzLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OkludGVybmFsczo6aXNQYWdlUGxheWluZ0F1ZGlvKToKKyAgICAg
ICAgKiB0ZXN0aW5nL0ludGVybmFscy5oOgorICAgICAgICAqIHRlc3RpbmcvSW50ZXJuYWxzLmlk
bDoKKyAgICAgICAgQWRkIGludGVybmFscy5pc1BhZ2VQbGF5aW5nQXVkaW8oKSBmb3IgdGVzdGlu
Zy4KKwogMjAxNC0xMS0xOCAgR2VvZmZyZXkgR2FyZW4gIDxnZ2FyZW5AYXBwbGUuY29tPgogCiAg
ICAgICAgIFJlbW92ZWQgdGhlIGN1c3RvbSBhbGxvY2F0b3IgZm9yIExpc3RIYXNoU2V0IG5vZGVz
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1ZGlvL0F1ZGlvQ29udGV4
dC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1ZGlvL0F1ZGlvQ29udGV4dC5jcHAK
aW5kZXggYjA2OTVmYS4uZTE5NjE5MiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxl
cy93ZWJhdWRpby9BdWRpb0NvbnRleHQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMv
d2ViYXVkaW8vQXVkaW9Db250ZXh0LmNwcApAQCAtMjE5LDYgKzIxOSw4IEBAIHZvaWQgQXVkaW9D
b250ZXh0OjpsYXp5SW5pdGlhbGl6ZSgpCiAgICAgICAgICAgICAgICAgbV9kZXN0aW5hdGlvbk5v
ZGUtPmluaXRpYWxpemUoKTsKIAogICAgICAgICAgICAgICAgIGlmICghaXNPZmZsaW5lQ29udGV4
dCgpKSB7CisgICAgICAgICAgICAgICAgICAgIGRvY3VtZW50KCktPmFkZEF1ZGlvUHJvZHVjZXIo
dGhpcyk7CisKICAgICAgICAgICAgICAgICAgICAgLy8gVGhpcyBzdGFydHMgdGhlIGF1ZGlvIHRo
cmVhZC4gVGhlIGRlc3RpbmF0aW9uIG5vZGUncyBwcm92aWRlSW5wdXQoKSBtZXRob2Qgd2lsbCBu
b3cgYmUgY2FsbGVkIHJlcGVhdGVkbHkgdG8gcmVuZGVyIGF1ZGlvLgogICAgICAgICAgICAgICAg
ICAgICAvLyBFYWNoIHRpbWUgcHJvdmlkZUlucHV0KCkgaXMgY2FsbGVkLCBhIHBvcnRpb24gb2Yg
dGhlIGF1ZGlvIHN0cmVhbSBpcyByZW5kZXJlZC4gTGV0J3MgY2FsbCB0aGlzIHRpbWUgcGVyaW9k
IGEgInJlbmRlciBxdWFudHVtIi4KICAgICAgICAgICAgICAgICAgICAgLy8gTk9URTogZm9yIG5v
dyBkZWZhdWx0IEF1ZGlvQ29udGV4dCBkb2VzIG5vdCBuZWVkIGFuIGV4cGxpY2l0IHN0YXJ0UmVu
ZGVyaW5nKCkgY2FsbCBmcm9tIEphdmFTY3JpcHQuCkBAIC0yNjQsNiArMjY2LDggQEAgdm9pZCBB
dWRpb0NvbnRleHQ6OnVuaW5pdGlhbGl6ZSgpCiAgICAgbV9pc0F1ZGlvVGhyZWFkRmluaXNoZWQg
PSB0cnVlOwogCiAgICAgaWYgKCFpc09mZmxpbmVDb250ZXh0KCkpIHsKKyAgICAgICAgZG9jdW1l
bnQoKS0+cmVtb3ZlQXVkaW9Qcm9kdWNlcih0aGlzKTsKKwogICAgICAgICBBU1NFUlQoc19oYXJk
d2FyZUNvbnRleHRDb3VudCk7CiAgICAgICAgIC0tc19oYXJkd2FyZUNvbnRleHRDb3VudDsKICAg
ICB9CkBAIC0yOTcsNiArMzAxLDggQEAgdm9pZCBBdWRpb0NvbnRleHQ6OnN0b3AoKQogICAgICAg
ICByZXR1cm47CiAgICAgbV9pc1N0b3BTY2hlZHVsZWQgPSB0cnVlOwogCisgICAgZG9jdW1lbnQo
KS0+dXBkYXRlSXNQbGF5aW5nQXVkaW8oKTsKKwogICAgIC8vIERvbid0IGNhbGwgdW5pbml0aWFs
aXplKCkgaW1tZWRpYXRlbHkgaGVyZSBiZWNhdXNlIHRoZSBTY3JpcHRFeGVjdXRpb25Db250ZXh0
IGlzIGluIHRoZSBtaWRkbGUKICAgICAvLyBvZiBkZWFsaW5nIHdpdGggYWxsIG9mIGl0cyBBY3Rp
dmVET01PYmplY3RzIGF0IHRoaXMgcG9pbnQuIHVuaW5pdGlhbGl6ZSgpIGNhbiBkZS1yZWZlcmVu
Y2Ugb3RoZXIKICAgICAvLyBBY3RpdmVET01PYmplY3RzIHNvIGxldCdzIHNjaGVkdWxlIHVuaW5p
dGlhbGl6ZSgpIHRvIGJlIGNhbGxlZCBsYXRlci4KQEAgLTk2Miw2ICs5NjgsMjEgQEAgdm9pZCBB
dWRpb0NvbnRleHQ6Om1lZGlhQ2FuU3RhcnQoKQogICAgIHJlbW92ZUJlaGF2aW9yUmVzdHJpY3Rp
b24oQXVkaW9Db250ZXh0OjpSZXF1aXJlUGFnZUNvbnNlbnRGb3JBdWRpb1N0YXJ0UmVzdHJpY3Rp
b24pOwogfQogCitib29sIEF1ZGlvQ29udGV4dDo6aXNQbGF5aW5nQXVkaW8oKQoreworICAgIHJl
dHVybiAhbV9pc1N0b3BTY2hlZHVsZWQgJiYgbV9kZXN0aW5hdGlvbk5vZGUgJiYgbV9kZXN0aW5h
dGlvbk5vZGUtPmlzUGxheWluZ0F1ZGlvKCk7Cit9CisKK3ZvaWQgQXVkaW9Db250ZXh0OjpwYWdl
TXV0ZWRTdGF0ZURpZENoYW5nZSgpCit7CisgICAgLy8gRklYTUUgaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTEzODEwNDogSGFuZGxlIG11dGluZyB3ZWIgYXVkaW8uCit9
CisKK3ZvaWQgQXVkaW9Db250ZXh0Ojppc1BsYXlpbmdBdWRpb0RpZENoYW5nZSgpCit7CisgICAg
ZG9jdW1lbnQoKS0+dXBkYXRlSXNQbGF5aW5nQXVkaW8oKTsKK30KKwogdm9pZCBBdWRpb0NvbnRl
eHQ6OmZpcmVDb21wbGV0aW9uRXZlbnQoKQogewogICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1ZGlvL0F1ZGlvQ29udGV4
dC5oIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJhdWRpby9BdWRpb0NvbnRleHQuaAppbmRl
eCBmZjgwYWMwLi4xMjNkMzkxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dl
YmF1ZGlvL0F1ZGlvQ29udGV4dC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViYXVk
aW8vQXVkaW9Db250ZXh0LmgKQEAgLTI5LDYgKzI5LDcgQEAKICNpbmNsdWRlICJBc3luY0F1ZGlv
RGVjb2Rlci5oIgogI2luY2x1ZGUgIkF1ZGlvQnVzLmgiCiAjaW5jbHVkZSAiQXVkaW9EZXN0aW5h
dGlvbk5vZGUuaCIKKyNpbmNsdWRlICJBdWRpb1Byb2R1Y2VyLmgiCiAjaW5jbHVkZSAiRXZlbnRM
aXN0ZW5lci5oIgogI2luY2x1ZGUgIkV2ZW50VGFyZ2V0LmgiCiAjaW5jbHVkZSAiTWVkaWFDYW5T
dGFydExpc3RlbmVyLmgiCkBAIC03Myw3ICs3NCw3IEBAIGNsYXNzIFBlcmlvZGljV2F2ZTsKIC8v
IEF1ZGlvQ29udGV4dCBpcyB0aGUgY29ybmVyc3RvbmUgb2YgdGhlIHdlYiBhdWRpbyBBUEkgYW5k
IGFsbCBBdWRpb05vZGVzIGFyZSBjcmVhdGVkIGZyb20gaXQuCiAvLyBGb3IgdGhyZWFkIHNhZmV0
eSBiZXR3ZWVuIHRoZSBhdWRpbyB0aHJlYWQgYW5kIHRoZSBtYWluIHRocmVhZCwgaXQgaGFzIGEg
cmVuZGVyaW5nIGdyYXBoIGxvY2tpbmcgbWVjaGFuaXNtLiAKIAotY2xhc3MgQXVkaW9Db250ZXh0
IDogcHVibGljIEFjdGl2ZURPTU9iamVjdCwgcHVibGljIFRocmVhZFNhZmVSZWZDb3VudGVkPEF1
ZGlvQ29udGV4dD4sIHB1YmxpYyBFdmVudFRhcmdldFdpdGhJbmxpbmVEYXRhLCBwdWJsaWMgTWVk
aWFDYW5TdGFydExpc3RlbmVyIHsKK2NsYXNzIEF1ZGlvQ29udGV4dCA6IHB1YmxpYyBBY3RpdmVE
T01PYmplY3QsIHB1YmxpYyBUaHJlYWRTYWZlUmVmQ291bnRlZDxBdWRpb0NvbnRleHQ+LCBwdWJs
aWMgRXZlbnRUYXJnZXRXaXRoSW5saW5lRGF0YSwgcHVibGljIE1lZGlhQ2FuU3RhcnRMaXN0ZW5l
ciwgcHVibGljIEF1ZGlvUHJvZHVjZXIgewogcHVibGljOgogICAgIC8vIENyZWF0ZSBhbiBBdWRp
b0NvbnRleHQgZm9yIHJlbmRlcmluZyB0byB0aGUgYXVkaW8gaGFyZHdhcmUuCiAgICAgc3RhdGlj
IFBhc3NSZWZQdHI8QXVkaW9Db250ZXh0PiBjcmVhdGUoRG9jdW1lbnQmLCBFeGNlcHRpb25Db2Rl
Jik7CkBAIC0yNTcsNiArMjU4LDggQEAgcHVibGljOgogICAgIHZvaWQgYWRkQmVoYXZpb3JSZXN0
cmljdGlvbihCZWhhdmlvclJlc3RyaWN0aW9ucyByZXN0cmljdGlvbikgeyBtX3Jlc3RyaWN0aW9u
cyB8PSByZXN0cmljdGlvbjsgfQogICAgIHZvaWQgcmVtb3ZlQmVoYXZpb3JSZXN0cmljdGlvbihC
ZWhhdmlvclJlc3RyaWN0aW9ucyByZXN0cmljdGlvbikgeyBtX3Jlc3RyaWN0aW9ucyAmPSB+cmVz
dHJpY3Rpb247IH0KIAorICAgIHZvaWQgaXNQbGF5aW5nQXVkaW9EaWRDaGFuZ2UoKTsKKwogcHJv
dGVjdGVkOgogICAgIGV4cGxpY2l0IEF1ZGlvQ29udGV4dChEb2N1bWVudCYpOwogICAgIEF1ZGlv
Q29udGV4dChEb2N1bWVudCYsIHVuc2lnbmVkIG51bWJlck9mQ2hhbm5lbHMsIHNpemVfdCBudW1i
ZXJPZkZyYW1lcywgZmxvYXQgc2FtcGxlUmF0ZSk7CkBAIC0yODAsNiArMjgzLDEwIEBAIHByaXZh
dGU6CiAKICAgICB2aXJ0dWFsIHZvaWQgbWVkaWFDYW5TdGFydCgpIG92ZXJyaWRlOwogCisgICAg
Ly8gQXVkaW9Qcm9kdWNlcgorICAgIHZpcnR1YWwgYm9vbCBpc1BsYXlpbmdBdWRpbygpIG92ZXJy
aWRlOworICAgIHZpcnR1YWwgdm9pZCBwYWdlTXV0ZWRTdGF0ZURpZENoYW5nZSgpIG92ZXJyaWRl
OworCiAgICAgYm9vbCBtX2lzSW5pdGlhbGl6ZWQ7CiAgICAgYm9vbCBtX2lzQXVkaW9UaHJlYWRG
aW5pc2hlZDsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJhdWRpby9B
dWRpb0Rlc3RpbmF0aW9uTm9kZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1ZGlv
L0F1ZGlvRGVzdGluYXRpb25Ob2RlLmNwcAppbmRleCAwMTViMGQ5Li4xYzI0NWJjIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1ZGlvL0F1ZGlvRGVzdGluYXRpb25Ob2Rl
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1ZGlvL0F1ZGlvRGVzdGluYXRp
b25Ob2RlLmNwcApAQCAtMTAyLDYgKzEwMiwxMiBAQCB2b2lkIEF1ZGlvRGVzdGluYXRpb25Ob2Rl
OjpyZW5kZXIoQXVkaW9CdXMqIHNvdXJjZUJ1cywgQXVkaW9CdXMqIGRlc3RpbmF0aW9uQnVzLAog
ICAgIG1fY3VycmVudFNhbXBsZUZyYW1lICs9IG51bWJlck9mRnJhbWVzOwogfQogCit2b2lkIEF1
ZGlvRGVzdGluYXRpb25Ob2RlOjppc1BsYXlpbmdBdWRpb0RpZENoYW5nZSgpCit7CisgICAgaWYg
KGNvbnRleHQoKSkKKyAgICAgICAgY29udGV4dCgpLT5pc1BsYXlpbmdBdWRpb0RpZENoYW5nZSgp
OworfQorCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKICNlbmRpZiAvLyBFTkFCTEUoV0VCX0FV
RElPKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJhdWRpby9BdWRpb0Rl
c3RpbmF0aW9uTm9kZS5oIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJhdWRpby9BdWRpb0Rl
c3RpbmF0aW9uTm9kZS5oCmluZGV4IGU3NDJjNjAuLjMwYzAyYmMgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL01vZHVsZXMvd2ViYXVkaW8vQXVkaW9EZXN0aW5hdGlvbk5vZGUuaAorKysgYi9T
b3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1ZGlvL0F1ZGlvRGVzdGluYXRpb25Ob2RlLmgKQEAg
LTYwLDcgKzYwLDEwIEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIHZvaWQgc3RhcnRSZW5kZXJpbmco
KSA9IDA7CiAKICAgICBBdWRpb1NvdXJjZVByb3ZpZGVyKiBsb2NhbEF1ZGlvSW5wdXRQcm92aWRl
cigpIHsgcmV0dXJuICZtX2xvY2FsQXVkaW9JbnB1dFByb3ZpZGVyOyB9Ci0gICAgCisKKyAgICB2
aXJ0dWFsIGJvb2wgaXNQbGF5aW5nQXVkaW8oKSB7IHJldHVybiBmYWxzZTsgfQorICAgIHZpcnR1
YWwgdm9pZCBpc1BsYXlpbmdBdWRpb0RpZENoYW5nZSgpIG92ZXJyaWRlOworCiBwcm90ZWN0ZWQ6
CiAgICAgLy8gTG9jYWxBdWRpb0lucHV0UHJvdmlkZXIgYWxsb3dzIHVzIHRvIGV4cG9zZSBhbiBB
dWRpb1NvdXJjZVByb3ZpZGVyIGZvciBsb2NhbC9saXZlIGF1ZGlvIGlucHV0LgogICAgIC8vIElm
IHRoZXJlIGlzIGxvY2FsL2xpdmUgYXVkaW8gaW5wdXQsIHdlIGNhbGwgc2V0KCkgd2l0aCB0aGUg
YXVkaW8gaW5wdXQgZGF0YSBldmVyeSByZW5kZXIgcXVhbnR1bS4KZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL01vZHVsZXMvd2ViYXVkaW8vRGVmYXVsdEF1ZGlvRGVzdGluYXRpb25Ob2RlLmNw
cCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViYXVkaW8vRGVmYXVsdEF1ZGlvRGVzdGluYXRp
b25Ob2RlLmNwcAppbmRleCA2YjRmOWI4Li40ODI5OWMxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9Nb2R1bGVzL3dlYmF1ZGlvL0RlZmF1bHRBdWRpb0Rlc3RpbmF0aW9uTm9kZS5jcHAKKysr
IGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJhdWRpby9EZWZhdWx0QXVkaW9EZXN0aW5hdGlv
bk5vZGUuY3BwCkBAIC0yOCw2ICsyOCw3IEBACiAKICNpbmNsdWRlICJEZWZhdWx0QXVkaW9EZXN0
aW5hdGlvbk5vZGUuaCIKIAorI2luY2x1ZGUgIkF1ZGlvQ29udGV4dC5oIgogI2luY2x1ZGUgIkV4
Y2VwdGlvbkNvZGUuaCIKICNpbmNsdWRlICJMb2dnaW5nLmgiCiAjaW5jbHVkZSA8d3RmL01haW5U
aHJlYWQuaD4KQEAgLTEzMyw2ICsxMzQsMTEgQEAgdm9pZCBEZWZhdWx0QXVkaW9EZXN0aW5hdGlv
bk5vZGU6OnNldENoYW5uZWxDb3VudCh1bnNpZ25lZCBsb25nIGNoYW5uZWxDb3VudCwgRXgKICAg
ICB9CiB9CiAKK2Jvb2wgRGVmYXVsdEF1ZGlvRGVzdGluYXRpb25Ob2RlOjppc1BsYXlpbmdBdWRp
bygpCit7CisgICAgcmV0dXJuIG1fZGVzdGluYXRpb24gJiYgbV9kZXN0aW5hdGlvbi0+aXNFZmZl
Y3RpdmVseVBsYXlpbmdBdWRpbygpOworfQorCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKICNl
bmRpZiAvLyBFTkFCTEUoV0VCX0FVRElPKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9k
dWxlcy93ZWJhdWRpby9EZWZhdWx0QXVkaW9EZXN0aW5hdGlvbk5vZGUuaCBiL1NvdXJjZS9XZWJD
b3JlL01vZHVsZXMvd2ViYXVkaW8vRGVmYXVsdEF1ZGlvRGVzdGluYXRpb25Ob2RlLmgKaW5kZXgg
NTc0ZmVkMi4uY2E1NzVlMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJh
dWRpby9EZWZhdWx0QXVkaW9EZXN0aW5hdGlvbk5vZGUuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL3dlYmF1ZGlvL0RlZmF1bHRBdWRpb0Rlc3RpbmF0aW9uTm9kZS5oCkBAIC01MSw3ICs1
MSw4IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIHZvaWQgZW5hYmxlSW5wdXQoY29uc3QgU3RyaW5n
JiBpbnB1dERldmljZUlkKSBvdmVycmlkZTsKICAgICB2aXJ0dWFsIHZvaWQgc3RhcnRSZW5kZXJp
bmcoKSBvdmVycmlkZTsKICAgICB2aXJ0dWFsIHVuc2lnbmVkIGxvbmcgbWF4Q2hhbm5lbENvdW50
KCkgY29uc3Qgb3ZlcnJpZGU7Ci0gICAgCisgICAgdmlydHVhbCBib29sIGlzUGxheWluZ0F1ZGlv
KCkgb3ZlcnJpZGU7CisKIHByaXZhdGU6CiAgICAgZXhwbGljaXQgRGVmYXVsdEF1ZGlvRGVzdGlu
YXRpb25Ob2RlKEF1ZGlvQ29udGV4dCopOwogICAgIHZvaWQgY3JlYXRlRGVzdGluYXRpb24oKTsK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2F1ZGlvL0F1ZGlvRGVzdGluYXRp
b24uaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2F1ZGlvL0F1ZGlvRGVzdGluYXRpb24uaApp
bmRleCAxMDYzOWRhLi40ZmM2OWEwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9hdWRpby9BdWRpb0Rlc3RpbmF0aW9uLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
YXVkaW8vQXVkaW9EZXN0aW5hdGlvbi5oCkBAIC01MSw2ICs1MSw4IEBAIHB1YmxpYzoKICAgICB2
aXJ0dWFsIHZvaWQgc3RhcnQoKSA9IDA7CiAgICAgdmlydHVhbCB2b2lkIHN0b3AoKSA9IDA7CiAg
ICAgdmlydHVhbCBib29sIGlzUGxheWluZygpID0gMDsKKyAgICB2aXJ0dWFsIGJvb2wgaXNTaWxl
bnQoKSA9IDA7CisgICAgdmlydHVhbCBib29sIGlzRWZmZWN0aXZlbHlQbGF5aW5nQXVkaW8oKSA9
IDA7CiAKICAgICAvLyBTYW1wbGUtcmF0ZSBjb252ZXJzaW9uIG1heSBoYXBwZW4gaW4gQXVkaW9E
ZXN0aW5hdGlvbiB0byB0aGUgaGFyZHdhcmUgc2FtcGxlLXJhdGUKICAgICB2aXJ0dWFsIGZsb2F0
IHNhbXBsZVJhdGUoKSBjb25zdCA9IDA7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9hdWRpby9BdWRpb0lPQ2FsbGJhY2suaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2F1
ZGlvL0F1ZGlvSU9DYWxsYmFjay5oCmluZGV4IDI3ZGUyZDUuLjRkZTY5MTMgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2F1ZGlvL0F1ZGlvSU9DYWxsYmFjay5oCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2F1ZGlvL0F1ZGlvSU9DYWxsYmFjay5oCkBAIC00MCw2ICs0
MCw4IEBAIHB1YmxpYzoKICAgICAvLyBPcHRpb25hbCBhdWRpbyBpbnB1dCBpcyBnaXZlbiBpbiBz
b3VyY2VCdXMgKGlmIGl0J3Mgbm90IDApLgogICAgIHZpcnR1YWwgdm9pZCByZW5kZXIoQXVkaW9C
dXMqIHNvdXJjZUJ1cywgQXVkaW9CdXMqIGRlc3RpbmF0aW9uQnVzLCBzaXplX3QgZnJhbWVzVG9Q
cm9jZXNzKSA9IDA7CiAKKyAgICB2aXJ0dWFsIHZvaWQgaXNQbGF5aW5nQXVkaW9EaWRDaGFuZ2Uo
KSA9IDA7CisKICAgICB2aXJ0dWFsIH5BdWRpb0lPQ2FsbGJhY2soKSB7IH0KIH07CiAKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2F1ZGlvL2lvcy9BdWRpb0Rlc3RpbmF0aW9u
SU9TLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2F1ZGlvL2lvcy9BdWRpb0Rlc3RpbmF0
aW9uSU9TLmNwcAppbmRleCAyNTM5NTE5Li5iMzkxNGM4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9hdWRpby9pb3MvQXVkaW9EZXN0aW5hdGlvbklPUy5jcHAKKysrIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vYXVkaW8vaW9zL0F1ZGlvRGVzdGluYXRpb25JT1MuY3BwCkBA
IC0xMDMsNiArMTAzLDggQEAgQXVkaW9EZXN0aW5hdGlvbklPUzo6QXVkaW9EZXN0aW5hdGlvbklP
UyhBdWRpb0lPQ2FsbGJhY2smIGNhbGxiYWNrLCBkb3VibGUgc2FtcGwKICAgICAsIG1fbWVkaWFT
ZXNzaW9uKE1lZGlhU2Vzc2lvbjo6Y3JlYXRlKCp0aGlzKSkKICAgICAsIG1fc2FtcGxlUmF0ZShz
YW1wbGVSYXRlKQogICAgICwgbV9pc1BsYXlpbmcoZmFsc2UpCisgICAgLCBtX2lzU2lsZW50KHRy
dWUpCisgICAgLCBtX2lzRWZmZWN0aXZlbHlQbGF5aW5nQXVkaW8oZmFsc2UpCiB7CiAgICAgYXVk
aW9EZXN0aW5hdGlvbnMoKS5hZGQodGhpcyk7CiAKQEAgLTE5MCw4ICsxOTIsMTAgQEAgdm9pZCBB
dWRpb0Rlc3RpbmF0aW9uSU9TOjpzdGFydCgpCiAgICAgfQogCiAgICAgT1NTdGF0dXMgcmVzdWx0
ID0gQXVkaW9PdXRwdXRVbml0U3RhcnQobV9vdXRwdXRVbml0KTsKLSAgICBpZiAoIXJlc3VsdCkK
KyAgICBpZiAoIXJlc3VsdCkgewogICAgICAgICBtX2lzUGxheWluZyA9IHRydWU7CisgICAgICAg
IHVwZGF0ZUlzRWZmZWN0aXZlbHlQbGF5aW5nQXVkaW8oKTsKKyAgICB9CiB9CiAKIHZvaWQgQXVk
aW9EZXN0aW5hdGlvbklPUzo6c3RvcCgpCkBAIC0yMDMsOCArMjA3LDEwIEBAIHZvaWQgQXVkaW9E
ZXN0aW5hdGlvbklPUzo6c3RvcCgpCiAgICAgfQogCiAgICAgT1NTdGF0dXMgcmVzdWx0ID0gQXVk
aW9PdXRwdXRVbml0U3RvcChtX291dHB1dFVuaXQpOwotICAgIGlmICghcmVzdWx0KQorICAgIGlm
ICghcmVzdWx0KSB7CiAgICAgICAgIG1faXNQbGF5aW5nID0gZmFsc2U7CisgICAgICAgIHVwZGF0
ZUlzRWZmZWN0aXZlbHlQbGF5aW5nQXVkaW8oKTsKKyAgICB9CiB9CiAKIC8vIFB1bGxzIG9uIG91
ciBwcm92aWRlciB0byBnZXQgcmVuZGVyZWQgYXVkaW8gc3RyZWFtLgpAQCAtMjIyLDkgKzIyOCwz
NyBAQCBPU1N0YXR1cyBBdWRpb0Rlc3RpbmF0aW9uSU9TOjpyZW5kZXIoVUludDMyIG51bWJlck9m
RnJhbWVzLCBBdWRpb0J1ZmZlckxpc3QqIGlvRAogICAgICAgICBtX2NhbGxiYWNrLnJlbmRlcigw
LCBtX3JlbmRlckJ1cy5nZXQoKSwgcmVtYWluaW5nRnJhbWVzKTsKICAgICB9CiAKKyAgICB1cGRh
dGVJc1NpbGVudCgpOworCiAgICAgcmV0dXJuIG5vRXJyOwogfQogCit2b2lkIEF1ZGlvRGVzdGlu
YXRpb25JT1M6OnVwZGF0ZUlzU2lsZW50KCkKK3sKKyAgICBib29sIGlzU2lsZW50ID0gdHJ1ZTsK
KyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbV9yZW5kZXJCdXMtPm51bWJlck9mQ2hhbm5l
bHMoKTsgKytpKSB7CisgICAgICAgIEF1ZGlvQ2hhbm5lbCogY2hhbm5lbCA9IG1fcmVuZGVyQnVz
LT5jaGFubmVsKGkpOworICAgICAgICBpZiAoIWNoYW5uZWwtPmlzU2lsZW50KCkpIHsKKyAgICAg
ICAgICAgIGlzU2lsZW50ID0gZmFsc2U7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQor
ICAgIH0KKworICAgIGlmIChpc1NpbGVudCAhPSBtX2lzU2lsZW50KSB7CisgICAgICAgIG1faXNT
aWxlbnQgPSBpc1NpbGVudDsKKyAgICAgICAgdXBkYXRlSXNFZmZlY3RpdmVseVBsYXlpbmdBdWRp
bygpOworICAgIH0KK30KKwordm9pZCBBdWRpb0Rlc3RpbmF0aW9uSU9TOjp1cGRhdGVJc0VmZmVj
dGl2ZWx5UGxheWluZ0F1ZGlvKCkKK3sKKyAgICBib29sIGlzRWZmZWN0aXZlbHlQbGF5aW5nQXVk
aW8gPSBpc1BsYXlpbmcoKSAmJiAhaXNTaWxlbnQoKTsKKyAgICBpZiAoaXNFZmZlY3RpdmVseVBs
YXlpbmdBdWRpbyAhPSBtX2lzRWZmZWN0aXZlbHlQbGF5aW5nQXVkaW8pIHsKKyAgICAgICAgbV9p
c0VmZmVjdGl2ZWx5UGxheWluZ0F1ZGlvID0gaXNFZmZlY3RpdmVseVBsYXlpbmdBdWRpbzsKKyAg
ICAgICAgbV9jYWxsYmFjay5pc1BsYXlpbmdBdWRpb0RpZENoYW5nZSgpOworICAgIH0KK30KKwog
Ly8gRGVmYXVsdE91dHB1dFVuaXQgY2FsbGJhY2sKIE9TU3RhdHVzIEF1ZGlvRGVzdGluYXRpb25J
T1M6OmlucHV0UHJvYyh2b2lkKiB1c2VyRGF0YSwgQXVkaW9Vbml0UmVuZGVyQWN0aW9uRmxhZ3Mq
LCBjb25zdCBBdWRpb1RpbWVTdGFtcCosIFVJbnQzMiAvKmJ1c051bWJlciovLCBVSW50MzIgbnVt
YmVyT2ZGcmFtZXMsIEF1ZGlvQnVmZmVyTGlzdCogaW9EYXRhKQogewpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vYXVkaW8vaW9zL0F1ZGlvRGVzdGluYXRpb25JT1MuaCBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2F1ZGlvL2lvcy9BdWRpb0Rlc3RpbmF0aW9uSU9TLmgKaW5k
ZXggNzQ3ZTgwZS4uMmI2OGZjZTI1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9hdWRpby9pb3MvQXVkaW9EZXN0aW5hdGlvbklPUy5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2F1ZGlvL2lvcy9BdWRpb0Rlc3RpbmF0aW9uSU9TLmgKQEAgLTUzLDYgKzUzLDggQEAg
cHJpdmF0ZToKICAgICB2aXJ0dWFsIHZvaWQgc3RvcCgpIG92ZXJyaWRlOwogICAgIHZpcnR1YWwg
Ym9vbCBpc1BsYXlpbmcoKSBvdmVycmlkZSB7IHJldHVybiBtX2lzUGxheWluZzsgfQogICAgIHZp
cnR1YWwgZmxvYXQgc2FtcGxlUmF0ZSgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIG1fc2FtcGxl
UmF0ZTsgfQorICAgIHZpcnR1YWwgYm9vbCBpc1NpbGVudCgpIG92ZXJyaWRlIHsgcmV0dXJuIG1f
aXNTaWxlbnQ7IH0KKyAgICB2aXJ0dWFsIGJvb2wgaXNFZmZlY3RpdmVseVBsYXlpbmdBdWRpbygp
IG92ZXJyaWRlIHsgcmV0dXJuIG1faXNFZmZlY3RpdmVseVBsYXlpbmdBdWRpbzsgfQogCiAgICAg
Ly8gTWVkaWFTZXNzaW9uQ2xpZW50CiAgICAgdmlydHVhbCBNZWRpYVNlc3Npb246Ok1lZGlhVHlw
ZSBtZWRpYVR5cGUoKSBjb25zdCB7IHJldHVybiBNZWRpYVNlc3Npb246OldlYkF1ZGlvOyB9CkBA
IC03MCw2ICs3Miw4IEBAIHByaXZhdGU6CiAgICAgZnJpZW5kIGZsb2F0IEF1ZGlvRGVzdGluYXRp
b246OmhhcmR3YXJlU2FtcGxlUmF0ZSgpOwogCiAgICAgT1NTdGF0dXMgcmVuZGVyKFVJbnQzMiBu
dW1iZXJPZkZyYW1lcywgQXVkaW9CdWZmZXJMaXN0KiBpb0RhdGEpOworICAgIHZvaWQgdXBkYXRl
SXNTaWxlbnQoKTsKKyAgICB2b2lkIHVwZGF0ZUlzRWZmZWN0aXZlbHlQbGF5aW5nQXVkaW8oKTsK
IAogICAgIEF1ZGlvVW5pdCBtX291dHB1dFVuaXQ7CiAgICAgQXVkaW9JT0NhbGxiYWNrJiBtX2Nh
bGxiYWNrOwpAQCAtNzgsNiArODIsOCBAQCBwcml2YXRlOgogCiAgICAgZG91YmxlIG1fc2FtcGxl
UmF0ZTsKICAgICBib29sIG1faXNQbGF5aW5nOworICAgIGJvb2wgbV9pc1NpbGVudDsKKyAgICBi
b29sIG1faXNFZmZlY3RpdmVseVBsYXlpbmdBdWRpbzsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdl
YkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2F1ZGlvL21hYy9BdWRp
b0Rlc3RpbmF0aW9uTWFjLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2F1ZGlvL21hYy9B
dWRpb0Rlc3RpbmF0aW9uTWFjLmNwcAppbmRleCBlOTVlNGM1Li43M2JiNmZmIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9hdWRpby9tYWMvQXVkaW9EZXN0aW5hdGlvbk1hYy5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vYXVkaW8vbWFjL0F1ZGlvRGVzdGluYXRp
b25NYWMuY3BwCkBAIC04NSw2ICs4NSw4IEBAIEF1ZGlvRGVzdGluYXRpb25NYWM6OkF1ZGlvRGVz
dGluYXRpb25NYWMoQXVkaW9JT0NhbGxiYWNrJiBjYWxsYmFjaywgZmxvYXQgc2FtcGxlCiAgICAg
LCBtX3JlbmRlckJ1cyhBdWRpb0J1czo6Y3JlYXRlKDIsIGtCdWZmZXJTaXplLCBmYWxzZSkpCiAg
ICAgLCBtX3NhbXBsZVJhdGUoc2FtcGxlUmF0ZSkKICAgICAsIG1faXNQbGF5aW5nKGZhbHNlKQor
ICAgICwgbV9pc1NpbGVudCh0cnVlKQorICAgICwgbV9pc0VmZmVjdGl2ZWx5UGxheWluZ0F1ZGlv
KGZhbHNlKQogICAgICwgbV9tZWRpYVNlc3Npb24oTWVkaWFTZXNzaW9uOjpjcmVhdGUoKnRoaXMp
KQogewogICAgIC8vIE9wZW4gYW5kIGluaXRpYWxpemUgRGVmYXVsdE91dHB1dFVuaXQKQEAgLTE0
MywxNiArMTQ1LDIwIEBAIHZvaWQgQXVkaW9EZXN0aW5hdGlvbk1hYzo6c3RhcnQoKQogewogICAg
IE9TU3RhdHVzIHJlc3VsdCA9IEF1ZGlvT3V0cHV0VW5pdFN0YXJ0KG1fb3V0cHV0VW5pdCk7CiAK
LSAgICBpZiAoIXJlc3VsdCkKKyAgICBpZiAoIXJlc3VsdCkgewogICAgICAgICBtX2lzUGxheWlu
ZyA9IHRydWU7CisgICAgICAgIHVwZGF0ZUlzRWZmZWN0aXZlbHlQbGF5aW5nQXVkaW8oKTsKKyAg
ICB9CiB9CiAKIHZvaWQgQXVkaW9EZXN0aW5hdGlvbk1hYzo6c3RvcCgpCiB7CiAgICAgT1NTdGF0
dXMgcmVzdWx0ID0gQXVkaW9PdXRwdXRVbml0U3RvcChtX291dHB1dFVuaXQpOwogCi0gICAgaWYg
KCFyZXN1bHQpCisgICAgaWYgKCFyZXN1bHQpIHsKICAgICAgICAgbV9pc1BsYXlpbmcgPSBmYWxz
ZTsKKyAgICAgICAgdXBkYXRlSXNFZmZlY3RpdmVseVBsYXlpbmdBdWRpbygpOworICAgIH0KIH0K
IAogLy8gUHVsbHMgb24gb3VyIHByb3ZpZGVyIHRvIGdldCByZW5kZXJlZCBhdWRpbyBzdHJlYW0u
CkBAIC0xNjUsNiArMTcxLDggQEAgT1NTdGF0dXMgQXVkaW9EZXN0aW5hdGlvbk1hYzo6cmVuZGVy
KFVJbnQzMiBudW1iZXJPZkZyYW1lcywgQXVkaW9CdWZmZXJMaXN0KiBpb0QKICAgICAvLyBGSVhN
RTogQWRkIHN1cHBvcnQgZm9yIGxvY2FsL2xpdmUgYXVkaW8gaW5wdXQuCiAgICAgbV9jYWxsYmFj
ay5yZW5kZXIoMCwgbV9yZW5kZXJCdXMuZ2V0KCksIG51bWJlck9mRnJhbWVzKTsKIAorICAgIHVw
ZGF0ZUlzU2lsZW50KCk7CisKICAgICAvLyBDbGFtcCB2YWx1ZXMgYXQgMGRiIChpLmUuLCBbLTEu
MCwgMS4wXSkKICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbV9yZW5kZXJCdXMtPm51bWJl
ck9mQ2hhbm5lbHMoKTsgKytpKSB7CiAgICAgICAgIEF1ZGlvQ2hhbm5lbCogY2hhbm5lbCA9IG1f
cmVuZGVyQnVzLT5jaGFubmVsKGkpOwpAQCAtMTc0LDYgKzE4MiwzMiBAQCBPU1N0YXR1cyBBdWRp
b0Rlc3RpbmF0aW9uTWFjOjpyZW5kZXIoVUludDMyIG51bWJlck9mRnJhbWVzLCBBdWRpb0J1ZmZl
ckxpc3QqIGlvRAogICAgIHJldHVybiBub0VycjsKIH0KIAordm9pZCBBdWRpb0Rlc3RpbmF0aW9u
TWFjOjp1cGRhdGVJc1NpbGVudCgpCit7CisgICAgYm9vbCBpc1NpbGVudCA9IHRydWU7CisgICAg
Zm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG1fcmVuZGVyQnVzLT5udW1iZXJPZkNoYW5uZWxzKCk7
ICsraSkgeworICAgICAgICBBdWRpb0NoYW5uZWwqIGNoYW5uZWwgPSBtX3JlbmRlckJ1cy0+Y2hh
bm5lbChpKTsKKyAgICAgICAgaWYgKCFjaGFubmVsLT5pc1NpbGVudCgpKSB7CisgICAgICAgICAg
ICBpc1NpbGVudCA9IGZhbHNlOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICB9
CisKKyAgICBpZiAoaXNTaWxlbnQgIT0gbV9pc1NpbGVudCkgeworICAgICAgICBtX2lzU2lsZW50
ID0gaXNTaWxlbnQ7CisgICAgICAgIHVwZGF0ZUlzRWZmZWN0aXZlbHlQbGF5aW5nQXVkaW8oKTsK
KyAgICB9Cit9CisKK3ZvaWQgQXVkaW9EZXN0aW5hdGlvbk1hYzo6dXBkYXRlSXNFZmZlY3RpdmVs
eVBsYXlpbmdBdWRpbygpCit7CisgICAgYm9vbCBpc0VmZmVjdGl2ZWx5UGxheWluZ0F1ZGlvID0g
aXNQbGF5aW5nKCkgJiYgIWlzU2lsZW50KCk7CisgICAgaWYgKGlzRWZmZWN0aXZlbHlQbGF5aW5n
QXVkaW8gIT0gbV9pc0VmZmVjdGl2ZWx5UGxheWluZ0F1ZGlvKSB7CisgICAgICAgIG1faXNFZmZl
Y3RpdmVseVBsYXlpbmdBdWRpbyA9IGlzRWZmZWN0aXZlbHlQbGF5aW5nQXVkaW87CisgICAgICAg
IG1fY2FsbGJhY2suaXNQbGF5aW5nQXVkaW9EaWRDaGFuZ2UoKTsKKyAgICB9Cit9CisKIC8vIERl
ZmF1bHRPdXRwdXRVbml0IGNhbGxiYWNrCiBPU1N0YXR1cyBBdWRpb0Rlc3RpbmF0aW9uTWFjOjpp
bnB1dFByb2Modm9pZCogdXNlckRhdGEsIEF1ZGlvVW5pdFJlbmRlckFjdGlvbkZsYWdzKiwgY29u
c3QgQXVkaW9UaW1lU3RhbXAqLCBVSW50MzIgLypidXNOdW1iZXIqLywgVUludDMyIG51bWJlck9m
RnJhbWVzLCBBdWRpb0J1ZmZlckxpc3QqIGlvRGF0YSkKIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2F1ZGlvL21hYy9BdWRpb0Rlc3RpbmF0aW9uTWFjLmggYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9hdWRpby9tYWMvQXVkaW9EZXN0aW5hdGlvbk1hYy5oCmluZGV4IDFm
Y2Y5NzMuLjAxNmMyZTEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2F1ZGlv
L21hYy9BdWRpb0Rlc3RpbmF0aW9uTWFjLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
YXVkaW8vbWFjL0F1ZGlvRGVzdGluYXRpb25NYWMuaApAQCAtNTEsNiArNTEsOCBAQCBwcml2YXRl
OgogICAgIHN0YXRpYyBPU1N0YXR1cyBpbnB1dFByb2Modm9pZCogdXNlckRhdGEsIEF1ZGlvVW5p
dFJlbmRlckFjdGlvbkZsYWdzKiwgY29uc3QgQXVkaW9UaW1lU3RhbXAqLCBVSW50MzIgYnVzTnVt
YmVyLCBVSW50MzIgbnVtYmVyT2ZGcmFtZXMsIEF1ZGlvQnVmZmVyTGlzdCogaW9EYXRhKTsKIAog
ICAgIE9TU3RhdHVzIHJlbmRlcihVSW50MzIgbnVtYmVyT2ZGcmFtZXMsIEF1ZGlvQnVmZmVyTGlz
dCogaW9EYXRhKTsKKyAgICB2b2lkIHVwZGF0ZUlzU2lsZW50KCk7CisgICAgdm9pZCB1cGRhdGVJ
c0VmZmVjdGl2ZWx5UGxheWluZ0F1ZGlvKCk7CiAKICAgICB2aXJ0dWFsIE1lZGlhU2Vzc2lvbjo6
TWVkaWFUeXBlIG1lZGlhVHlwZSgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIE1lZGlhU2Vzc2lv
bjo6V2ViQXVkaW87IH0KICAgICB2aXJ0dWFsIE1lZGlhU2Vzc2lvbjo6TWVkaWFUeXBlIHByZXNl
bnRhdGlvblR5cGUoKSBjb25zdCB7IHJldHVybiBNZWRpYVNlc3Npb246OldlYkF1ZGlvOyB9CkBA
IC02MSw2ICs2Myw4IEBAIHByaXZhdGU6CiAgICAgdmlydHVhbCB2b2lkIHN0YXJ0KCkgb3ZlcnJp
ZGU7CiAgICAgdmlydHVhbCB2b2lkIHN0b3AoKSBvdmVycmlkZTsKICAgICB2aXJ0dWFsIGJvb2wg
aXNQbGF5aW5nKCkgb3ZlcnJpZGUgeyByZXR1cm4gbV9pc1BsYXlpbmc7IH0KKyAgICB2aXJ0dWFs
IGJvb2wgaXNTaWxlbnQoKSBvdmVycmlkZSB7IHJldHVybiBtX2lzU2lsZW50OyB9CisgICAgdmly
dHVhbCBib29sIGlzRWZmZWN0aXZlbHlQbGF5aW5nQXVkaW8oKSBvdmVycmlkZSB7IHJldHVybiBt
X2lzRWZmZWN0aXZlbHlQbGF5aW5nQXVkaW87IH0KIAogICAgIHZpcnR1YWwgdm9pZCBwYXVzZVBs
YXliYWNrKCkgb3ZlcnJpZGUgeyBzdG9wKCk7IH0KICAgICB2aXJ0dWFsIHZvaWQgcmVzdW1lUGxh
eWJhY2soKSBvdmVycmlkZSB7IHN0YXJ0KCk7IH0KQEAgLTczLDYgKzc3LDggQEAgcHJpdmF0ZToK
IAogICAgIGZsb2F0IG1fc2FtcGxlUmF0ZTsKICAgICBib29sIG1faXNQbGF5aW5nOworICAgIGJv
b2wgbV9pc1NpbGVudDsKKyAgICBib29sIG1faXNFZmZlY3RpdmVseVBsYXlpbmdBdWRpbzsKIAog
I2lmIFVTRShBVURJT19TRVNTSU9OKQogICAgIHN0ZDo6dW5pcXVlX3B0cjxNZWRpYVNlc3Npb24+
IG1fbWVkaWFTZXNzaW9uOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvdGVzdGluZy9JbnRl
cm5hbHMuY3BwIGIvU291cmNlL1dlYkNvcmUvdGVzdGluZy9JbnRlcm5hbHMuY3BwCmluZGV4IGFk
MjVhMzMuLmJhOWUxMGIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3Rlc3RpbmcvSW50ZXJu
YWxzLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS90ZXN0aW5nL0ludGVybmFscy5jcHAKQEAgLTI0
MTAsNCArMjQxMCwxMyBAQCB2b2lkIEludGVybmFsczo6c2V0UGFnZU11dGVkKGJvb2wgbXV0ZWQp
CiAgICAgICAgIHBhZ2UtPnNldE11dGVkKG11dGVkKTsKIH0KIAorYm9vbCBJbnRlcm5hbHM6Omlz
UGFnZVBsYXlpbmdBdWRpbygpCit7CisgICAgRG9jdW1lbnQqIGRvY3VtZW50ID0gY29udGV4dERv
Y3VtZW50KCk7CisgICAgaWYgKCFkb2N1bWVudCB8fCAhZG9jdW1lbnQtPnBhZ2UoKSkKKyAgICAg
ICAgcmV0dXJuIGZhbHNlOworCisgICAgcmV0dXJuIGRvY3VtZW50LT5wYWdlKCktPmlzUGxheWlu
Z0F1ZGlvKCk7Cit9CisKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Rlc3RpbmcvSW50
ZXJuYWxzLmggYi9Tb3VyY2UvV2ViQ29yZS90ZXN0aW5nL0ludGVybmFscy5oCmluZGV4IDdlNzc0
NGMuLjhmZjNlZmQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3Rlc3RpbmcvSW50ZXJuYWxz
LmgKKysrIGIvU291cmNlL1dlYkNvcmUvdGVzdGluZy9JbnRlcm5hbHMuaApAQCAtMzQ5LDYgKzM0
OSw3IEBAIHB1YmxpYzoKICAgICBTdHJpbmcgcGFnZU92ZXJsYXlMYXllclRyZWVBc1RleHQoRXhj
ZXB0aW9uQ29kZSYpIGNvbnN0OwogCiAgICAgdm9pZCBzZXRQYWdlTXV0ZWQoYm9vbCk7CisgICAg
Ym9vbCBpc1BhZ2VQbGF5aW5nQXVkaW8oKTsKIAogcHJpdmF0ZToKICAgICBleHBsaWNpdCBJbnRl
cm5hbHMoRG9jdW1lbnQqKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Rlc3RpbmcvSW50
ZXJuYWxzLmlkbCBiL1NvdXJjZS9XZWJDb3JlL3Rlc3RpbmcvSW50ZXJuYWxzLmlkbAppbmRleCBj
NmQzMzVlLi41NmNmYjNkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS90ZXN0aW5nL0ludGVy
bmFscy5pZGwKKysrIGIvU291cmNlL1dlYkNvcmUvdGVzdGluZy9JbnRlcm5hbHMuaWRsCkBAIC0z
MDQsNCArMzA0LDUgQEAgZW51bSBQYWdlT3ZlcmxheVR5cGUgewogICAgIFtSYWlzZXNFeGNlcHRp
b25dIERPTVN0cmluZyBwYWdlT3ZlcmxheUxheWVyVHJlZUFzVGV4dCgpOwogCiAgICAgdm9pZCBz
ZXRQYWdlTXV0ZWQoYm9vbGVhbiBtdXRlZCk7CisgICAgYm9vbGVhbiBpc1BhZ2VQbGF5aW5nQXVk
aW8oKTsKIH07Ci0tIAoyLjEuMSAoQXBwbGUgR2l0LTUxKQoK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>241873</attachid>
            <date>2014-11-19 11:49:43 -0800</date>
            <delta_ts>2014-11-19 12:02:36 -0800</delta_ts>
            <desc>Revised patch: incorporated feedback from Jer and Chris.</desc>
            <filename>0001-Take-Web-Audio-into-account-for-the-Page-isPlayingAu.patch</filename>
            <type>text/plain</type>
            <size>25958</size>
            <attacher name="Ada Chan">adachan</attacher>
            
              <data encoding="base64">RnJvbSBhMTI2Yjk3MDEyMjliN2M0YTg2YTMyZTY0MzM0MGMwOTljY2I0YjkwIE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBBZGEgQ2hhbiA8YWRhY2hhbkBhcHBsZS5jb20+CkRhdGU6IFR1
ZSwgMTggTm92IDIwMTQgMTQ6NDQ6NDEgLTA4MDAKU3ViamVjdDogW1BBVENIXSBUYWtlIFdlYiBB
dWRpbyBpbnRvIGFjY291bnQgZm9yIHRoZSBQYWdlOjppc1BsYXlpbmdBdWRpbygpCiBBUEkuIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMzc0NjQKClJldmlld2VkIGJ5
IE5PQk9EWSAoT09QUyEpLgoKU291cmNlL1dlYkNvcmU6CgpNYWtlIEF1ZGlvQ29udGV4dCBhIHN1
YmNsYXNzIG9mIEF1ZGlvUHJvZHVjZXIuIEl0IGZpZ3VyZXMgb3V0IHdoZXRoZXIgdGhlcmUncwph
dWRpbyBwbGF5aW5nIGJ5IGNoZWNraW5nIHdoZXRoZXIgaXRzIEF1ZGlvRGVzdGluYXRpb25Ob2Rl
IGlzIHBsYXlpbmcgKGFuZCBub3QKc2lsZW50KS4gSXQgY2FsbHMgRG9jdW1lbnQ6OnVwZGF0ZUlz
UGxheWluZ0F1ZGlvKCkgd2hlbmV2ZXIgaXRzIGF1ZGlvIHBsYXlpbmcKc3RhdGUgaGFzIGNoYW5n
ZWQuCgpUZXN0OiB3ZWJhdWRpby93ZWItYXVkaW8taXMtcGxheWluZy5odG1sCgoqIE1vZHVsZXMv
d2ViYXVkaW8vQXVkaW9Db250ZXh0LmNwcDoKKFdlYkNvcmU6OkF1ZGlvQ29udGV4dDo6bGF6eUlu
aXRpYWxpemUpOgpBZGQgaXRzZWxmIHRvIHRoZSBEb2N1bWVudCdzIGxpc3Qgb2YgQXVkaW9Qcm9k
dWNlcnMgaWYgaXQncyBub3QgYW4gb2ZmbGluZQphdWRpbyBjb250ZXh0LgooV2ViQ29yZTo6QXVk
aW9Db250ZXh0Ojp1bmluaXRpYWxpemUpOgpSZW1vdmUgaXRzZWxmIGZyb20gdGhlIERvY3VtZW50
J3MgbGlzdCBvZiBBdWRpb1Byb2R1Y2VycyBpZiBpdCdzIG5vdCBhbiBvZmZsaW5lCmF1ZGlvIGNv
bnRleHQuCihXZWJDb3JlOjpBdWRpb0NvbnRleHQ6OnN0b3ApOgpUZWxsIHRoZSBkb2N1bWVudCB0
byB1cGRhdGUgaXRzIGF1ZGlvIHBsYXlpbmcgc3RhdGUuCihXZWJDb3JlOjpBdWRpb0NvbnRleHQ6
OmlzUGxheWluZ0F1ZGlvKToKUmV0dXJuIHRydWUgaWYgdGhlIGF1ZGlvIGNvbnRleHQgaGFzbid0
IGJlZW4gc3RvcHBlZCBhbmQgaXRzIGRlc3RpbmF0aW9uIG5vZGUgaXMKcGxheWluZyBhdWRpby4K
KFdlYkNvcmU6OkF1ZGlvQ29udGV4dDo6cGFnZU11dGVkU3RhdGVEaWRDaGFuZ2UpOgpBZGQgYSBG
SVhNRSBmb3Igbm93LgooV2ViQ29yZTo6QXVkaW9Db250ZXh0Ojppc1BsYXlpbmdBdWRpb0RpZENo
YW5nZSk6CkNhbGwgRG9jdW1lbnQ6OnVwZGF0ZUlzUGxheWluZ0F1ZGlvKCkuCiogTW9kdWxlcy93
ZWJhdWRpby9BdWRpb0NvbnRleHQuaDoKCiogTW9kdWxlcy93ZWJhdWRpby9BdWRpb0Rlc3RpbmF0
aW9uTm9kZS5jcHA6CihXZWJDb3JlOjpBdWRpb0Rlc3RpbmF0aW9uTm9kZTo6QXVkaW9EZXN0aW5h
dGlvbk5vZGUpOgpJbml0aWFsaXplIG1faXNTaWxlbnQgYW5kIG1faXNFZmZlY3RpdmVseVBsYXlp
bmdBdWRpby4KKFdlYkNvcmU6OkF1ZGlvRGVzdGluYXRpb25Ob2RlOjpyZW5kZXIpOgpDYWxsIHNl
dElzU2lsZW50KCkgd2l0aCB0aGUgYXBwcm9wcmlhdGUgdmFsdWUgYWZ0ZXIgcmVuZGVyaW5nLgoo
V2ViQ29yZTo6QXVkaW9EZXN0aW5hdGlvbk5vZGU6OmlzUGxheWluZ0RpZENoYW5nZSk6CkNhbGwg
dXBkYXRlSXNFZmZlY3RpdmVseVBsYXlpbmdBdWRpbygpLgooV2ViQ29yZTo6QXVkaW9EZXN0aW5h
dGlvbk5vZGU6OnNldElzU2lsZW50KToKSWYgbV9pc1NpbGVudCBoYXMgY2hhbmdlZCwgY2FsbCB1
cGRhdGVJc0VmZmVjdGl2ZWx5UGxheWluZ0F1ZGlvKCkuCihXZWJDb3JlOjpBdWRpb0Rlc3RpbmF0
aW9uTm9kZTo6dXBkYXRlSXNFZmZlY3RpdmVseVBsYXlpbmdBdWRpbyk6CklmIG1faXNFZmZlY3Rp
dmVseVBsYXlpbmdBdWRpbyBoYXMgY2hhbmdlZCwgY2FsbCBBdWRpb0NvbnRleHQ6OmlzUGxheWlu
Z0F1ZGlvRGlkQ2hhbmdlKCkuCiogTW9kdWxlcy93ZWJhdWRpby9BdWRpb0Rlc3RpbmF0aW9uTm9k
ZS5oOgooV2ViQ29yZTo6QXVkaW9EZXN0aW5hdGlvbk5vZGU6OmlzUGxheWluZyk6CihXZWJDb3Jl
OjpBdWRpb0Rlc3RpbmF0aW9uTm9kZTo6aXNQbGF5aW5nQXVkaW8pOgoKKiBNb2R1bGVzL3dlYmF1
ZGlvL0RlZmF1bHRBdWRpb0Rlc3RpbmF0aW9uTm9kZS5jcHA6CihXZWJDb3JlOjpEZWZhdWx0QXVk
aW9EZXN0aW5hdGlvbk5vZGU6OmlzUGxheWluZyk6ClJldHVybiB3aGV0aGVyIHRoZSBBdWRpb0Rl
c3RpbmF0aW9uIGlzIHBsYXlpbmcuCiogTW9kdWxlcy93ZWJhdWRpby9EZWZhdWx0QXVkaW9EZXN0
aW5hdGlvbk5vZGUuaDoKCiogcGxhdGZvcm0vYXVkaW8vQXVkaW9JT0NhbGxiYWNrLmg6CiogcGxh
dGZvcm0vYXVkaW8vaW9zL0F1ZGlvRGVzdGluYXRpb25JT1MuY3BwOgooV2ViQ29yZTo6QXVkaW9E
ZXN0aW5hdGlvbklPUzo6c3RhcnQpOgpDYWxsIHNldElzUGxheWluZygpIGluc3RlYWQuCihXZWJD
b3JlOjpBdWRpb0Rlc3RpbmF0aW9uSU9TOjpzdG9wKToKRGl0dG8uCihXZWJDb3JlOjpBdWRpb0Rl
c3RpbmF0aW9uSU9TOjpzZXRJc1BsYXlpbmcpOgpJZiBtX2lzUGxheWluZyBoYXMgY2hhbmdlZCwg
Y2FsbCBBdWRpb0lPQ2FsbGJhY2s6OmlzUGxheWluZ0RpZENoYW5nZSgpLgoqIHBsYXRmb3JtL2F1
ZGlvL2lvcy9BdWRpb0Rlc3RpbmF0aW9uSU9TLmg6CgoqIHBsYXRmb3JtL2F1ZGlvL21hYy9BdWRp
b0Rlc3RpbmF0aW9uTWFjLmNwcDoKKFdlYkNvcmU6OkF1ZGlvRGVzdGluYXRpb25NYWM6OnN0YXJ0
KToKQ2FsbCBzZXRJc1BsYXlpbmcoKSBpbnN0ZWFkLgooV2ViQ29yZTo6QXVkaW9EZXN0aW5hdGlv
bk1hYzo6c3RvcCk6CkRpdHRvLgooV2ViQ29yZTo6QXVkaW9EZXN0aW5hdGlvbk1hYzo6c2V0SXNQ
bGF5aW5nKToKSWYgbV9pc1BsYXlpbmcgaGFzIGNoYW5nZWQsIGNhbGwgQXVkaW9JT0NhbGxiYWNr
Ojppc1BsYXlpbmdEaWRDaGFuZ2UoKS4KKiBwbGF0Zm9ybS9hdWRpby9tYWMvQXVkaW9EZXN0aW5h
dGlvbk1hYy5oOgoKKiB0ZXN0aW5nL0ludGVybmFscy5jcHA6CihXZWJDb3JlOjpJbnRlcm5hbHM6
OmlzUGFnZVBsYXlpbmdBdWRpbyk6CiogdGVzdGluZy9JbnRlcm5hbHMuaDoKKiB0ZXN0aW5nL0lu
dGVybmFscy5pZGw6CkFkZCBpbnRlcm5hbHMuaXNQYWdlUGxheWluZ0F1ZGlvKCkgZm9yIHRlc3Rp
bmcuCgpMYXlvdXRUZXN0czoKClRoaXMgdGVzdCBjaGVja3MgdGhhdCBQYWdlOjppc1BsYXlpbmdB
dWRpbygpIHJldHVybnMgZmFsc2UgYmVmb3JlIGFuIGF1ZGlvIGNvbnRleHQgaXMgY3JlYXRlZAph
bmQgYmVmb3JlIHRoZSBvc2NpbGxhdG9yIG5vZGUgbWFrZXMgYSBzb3VuZC4gSXQgdGhlbiBzdGFy
dHMgdGhlIG9zY2lsbGF0b3Igbm9kZSBhbmQgY2hlY2tzCnRoYXQgUGFnZTo6aXNQbGF5aW5nQXVk
aW8oKSBsYXRlciByZXR1cm5zIHRydWUuCgoqIHdlYmF1ZGlvL3dlYi1hdWRpby1pcy1wbGF5aW5n
LWV4cGVjdGVkLnR4dDogQWRkZWQuCiogd2ViYXVkaW8vd2ViLWF1ZGlvLWlzLXBsYXlpbmcuaHRt
bDogQWRkZWQuCi0tLQogTGF5b3V0VGVzdHMvQ2hhbmdlTG9nICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgfCAxNCArKysrCiAuLi4vd2ViYXVkaW8vd2ViLWF1ZGlvLWlzLXBsYXlpbmctZXhw
ZWN0ZWQudHh0ICAgICB8IDEyICsrKysKIExheW91dFRlc3RzL3dlYmF1ZGlvL3dlYi1hdWRpby1p
cy1wbGF5aW5nLmh0bWwgICAgIHwgMzEgKysrKysrKysrCiBTb3VyY2UvV2ViQ29yZS9DaGFuZ2VM
b2cgICAgICAgICAgICAgICAgICAgICAgICAgICB8IDc3ICsrKysrKysrKysrKysrKysrKysrKysK
IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViYXVkaW8vQXVkaW9Db250ZXh0LmNwcCAgIHwgMjEg
KysrKysrCiBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1ZGlvL0F1ZGlvQ29udGV4dC5oICAg
ICB8ICA5ICsrLQogLi4uL01vZHVsZXMvd2ViYXVkaW8vQXVkaW9EZXN0aW5hdGlvbk5vZGUuY3Bw
ICAgICAgfCAzMiArKysrKysrKysKIC4uLi9Nb2R1bGVzL3dlYmF1ZGlvL0F1ZGlvRGVzdGluYXRp
b25Ob2RlLmggICAgICAgIHwgMTEgKysrLQogLi4uL3dlYmF1ZGlvL0RlZmF1bHRBdWRpb0Rlc3Rp
bmF0aW9uTm9kZS5jcHAgICAgICAgfCAgNiArKwogLi4uL01vZHVsZXMvd2ViYXVkaW8vRGVmYXVs
dEF1ZGlvRGVzdGluYXRpb25Ob2RlLmggfCAgMyArLQogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
YXVkaW8vQXVkaW9JT0NhbGxiYWNrLmggICAgfCAgMiArCiAuLi4vcGxhdGZvcm0vYXVkaW8vaW9z
L0F1ZGlvRGVzdGluYXRpb25JT1MuY3BwICAgICB8IDEzICsrKy0KIC4uLi9wbGF0Zm9ybS9hdWRp
by9pb3MvQXVkaW9EZXN0aW5hdGlvbklPUy5oICAgICAgIHwgIDEgKwogLi4uL3BsYXRmb3JtL2F1
ZGlvL21hYy9BdWRpb0Rlc3RpbmF0aW9uTWFjLmNwcCAgICAgfCAxMyArKystCiAuLi4vcGxhdGZv
cm0vYXVkaW8vbWFjL0F1ZGlvRGVzdGluYXRpb25NYWMuaCAgICAgICB8ICAxICsKIFNvdXJjZS9X
ZWJDb3JlL3Rlc3RpbmcvSW50ZXJuYWxzLmNwcCAgICAgICAgICAgICAgIHwgIDkgKysrCiBTb3Vy
Y2UvV2ViQ29yZS90ZXN0aW5nL0ludGVybmFscy5oICAgICAgICAgICAgICAgICB8ICAxICsKIFNv
dXJjZS9XZWJDb3JlL3Rlc3RpbmcvSW50ZXJuYWxzLmlkbCAgICAgICAgICAgICAgIHwgIDEgKwog
MTggZmlsZXMgY2hhbmdlZCwgMjUwIGluc2VydGlvbnMoKyksIDcgZGVsZXRpb25zKC0pCiBjcmVh
dGUgbW9kZSAxMDA2NDQgTGF5b3V0VGVzdHMvd2ViYXVkaW8vd2ViLWF1ZGlvLWlzLXBsYXlpbmct
ZXhwZWN0ZWQudHh0CiBjcmVhdGUgbW9kZSAxMDA2NDQgTGF5b3V0VGVzdHMvd2ViYXVkaW8vd2Vi
LWF1ZGlvLWlzLXBsYXlpbmcuaHRtbAoKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL0NoYW5nZUxv
ZyBiL0xheW91dFRlc3RzL0NoYW5nZUxvZwppbmRleCBlNTEwM2M3Li4xZDhjMjA1IDEwMDY0NAot
LS0gYS9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKKysrIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCkBA
IC0xLDMgKzEsMTcgQEAKKzIwMTQtMTEtMTggIEFkYSBDaGFuICA8YWRhY2hhbkBhcHBsZS5jb20+
CisKKyAgICAgICAgVGFrZSBXZWIgQXVkaW8gaW50byBhY2NvdW50IGZvciB0aGUgUGFnZTo6aXNQ
bGF5aW5nQXVkaW8oKSBBUEkuCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3df
YnVnLmNnaT9pZD0xMzc0NjQKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4K
KworICAgICAgICBUaGlzIHRlc3QgY2hlY2tzIHRoYXQgUGFnZTo6aXNQbGF5aW5nQXVkaW8oKSBy
ZXR1cm5zIGZhbHNlIGJlZm9yZSBhbiBhdWRpbyBjb250ZXh0IGlzIGNyZWF0ZWQKKyAgICAgICAg
YW5kIGJlZm9yZSB0aGUgb3NjaWxsYXRvciBub2RlIG1ha2VzIGEgc291bmQuIEl0IHRoZW4gc3Rh
cnRzIHRoZSBvc2NpbGxhdG9yIG5vZGUgYW5kIGNoZWNrcworICAgICAgICB0aGF0IFBhZ2U6Omlz
UGxheWluZ0F1ZGlvKCkgbGF0ZXIgcmV0dXJucyB0cnVlLgorCisgICAgICAgICogd2ViYXVkaW8v
d2ViLWF1ZGlvLWlzLXBsYXlpbmctZXhwZWN0ZWQudHh0OiBBZGRlZC4KKyAgICAgICAgKiB3ZWJh
dWRpby93ZWItYXVkaW8taXMtcGxheWluZy5odG1sOiBBZGRlZC4KKwogMjAxNC0xMS0xOSAgQ2hy
aXMgRHVtZXogIDxjZHVtZXpAYXBwbGUuY29tPgogCiAgICAgICAgIEFkZCBsYXlvdXQgdGVzdCBm
b3IgRE9NIHRpbWVycyB0aHJvdHRsaW5nIGFuZCAwIGhlaWdodCBlbGVtZW50IHdpdGggdmlzaWJs
ZSBvdmVyZmxvd2luZyBjb250ZW50CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy93ZWJhdWRpby93
ZWItYXVkaW8taXMtcGxheWluZy1leHBlY3RlZC50eHQgYi9MYXlvdXRUZXN0cy93ZWJhdWRpby93
ZWItYXVkaW8taXMtcGxheWluZy1leHBlY3RlZC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMDAwMDAwMC4uZjgxM2ZiYgotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL3dlYmF1
ZGlvL3dlYi1hdWRpby1pcy1wbGF5aW5nLWV4cGVjdGVkLnR4dApAQCAtMCwwICsxLDEyIEBACitU
ZXN0aW5nIFBhZ2U6OmlzUGxheWluZ0F1ZGlvKCkgd2l0aCB3ZWIgYXVkaW8KKworT24gc3VjY2Vz
cywgeW91IHdpbGwgc2VlIGEgc2VyaWVzIG9mICJQQVNTIiBtZXNzYWdlcywgZm9sbG93ZWQgYnkg
IlRFU1QgQ09NUExFVEUiLgorCisKK1BBU1Mgd2luZG93LmludGVybmFscy5pc1BhZ2VQbGF5aW5n
QXVkaW8oKSBpcyBmYWxzZQorUEFTUyB3aW5kb3cuaW50ZXJuYWxzLmlzUGFnZVBsYXlpbmdBdWRp
bygpIGlzIGZhbHNlCitQQVNTIHdpbmRvdy5pbnRlcm5hbHMuaXNQYWdlUGxheWluZ0F1ZGlvKCkg
YmVjYW1lIHRydWUKK1BBU1Mgc3VjY2Vzc2Z1bGx5UGFyc2VkIGlzIHRydWUKKworVEVTVCBDT01Q
TEVURQorCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy93ZWJhdWRpby93ZWItYXVkaW8taXMtcGxh
eWluZy5odG1sIGIvTGF5b3V0VGVzdHMvd2ViYXVkaW8vd2ViLWF1ZGlvLWlzLXBsYXlpbmcuaHRt
bApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mY2YwNGY1Ci0tLSAvZGV2L251
bGwKKysrIGIvTGF5b3V0VGVzdHMvd2ViYXVkaW8vd2ViLWF1ZGlvLWlzLXBsYXlpbmcuaHRtbApA
QCAtMCwwICsxLDMxIEBACis8IURPQ1RZUEUgaHRtbD4KKzxodG1sPgorPGhlYWQ+CisgICAgPHNj
cmlwdCBzcmM9Ii4uL3Jlc291cmNlcy9qcy10ZXN0LXByZS5qcyI+PC9zY3JpcHQ+Cis8L2hlYWQ+
Cis8Ym9keT4KKyAgICA8c2NyaXB0PgorICAgICAgICBkZXNjcmlwdGlvbigiVGVzdGluZyBQYWdl
Ojppc1BsYXlpbmdBdWRpbygpIHdpdGggd2ViIGF1ZGlvIik7CisKKyAgICAgICAganNUZXN0SXNB
c3luYyA9IHRydWU7CisKKyAgICAgICAgaWYgKHdpbmRvdy5pbnRlcm5hbHMpCisgICAgICAgICAg
ICBzaG91bGRCZUZhbHNlKCJ3aW5kb3cuaW50ZXJuYWxzLmlzUGFnZVBsYXlpbmdBdWRpbygpIik7
CisKKyAgICAgICAgdmFyIGNvbnRleHQgPSBuZXcgd2Via2l0QXVkaW9Db250ZXh0KCk7CisgICAg
ICAgIHZhciBmcmVxdWVuY3kgPSAzMDA7CisgICAgICAgIHZhciBvc2NpbGxhdG9yID0gY29udGV4
dC5jcmVhdGVPc2NpbGxhdG9yKCk7CisKKyAgICAgICAgaWYgKHdpbmRvdy5pbnRlcm5hbHMpCisg
ICAgICAgICAgICBzaG91bGRCZUZhbHNlKCJ3aW5kb3cuaW50ZXJuYWxzLmlzUGFnZVBsYXlpbmdB
dWRpbygpIik7CisKKyAgICAgICAgb3NjaWxsYXRvci5mcmVxdWVuY3kudmFsdWUgPSBmcmVxdWVu
Y3k7CisgICAgICAgIG9zY2lsbGF0b3IudHlwZSA9IDA7CisgICAgICAgIG9zY2lsbGF0b3IuY29u
bmVjdChjb250ZXh0LmRlc3RpbmF0aW9uKTsKKyAgICAgICAgb3NjaWxsYXRvci5zdGFydCgwKTsK
KworICAgICAgICBzaG91bGRCZWNvbWVFcXVhbCgid2luZG93LmludGVybmFscy5pc1BhZ2VQbGF5
aW5nQXVkaW8oKSIsICJ0cnVlIiwgZmluaXNoSlNUZXN0KTsKKyAgICA8L3NjcmlwdD4KKyAgICA8
c2NyaXB0IHNyYz0iLi4vcmVzb3VyY2VzL2pzLXRlc3QtcG9zdC5qcyI+PC9zY3JpcHQ+Cis8L2Jv
ZHk+Cis8L2h0bWw+CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cgYi9Tb3Vy
Y2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNjEwMzZhZC4uNzIwNDI2YyAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpA
QCAtMSwzICsxLDgwIEBACisyMDE0LTExLTE4ICBBZGEgQ2hhbiAgPGFkYWNoYW5AYXBwbGUuY29t
PgorCisgICAgICAgIFRha2UgV2ViIEF1ZGlvIGludG8gYWNjb3VudCBmb3IgdGhlIFBhZ2U6Omlz
UGxheWluZ0F1ZGlvKCkgQVBJLgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9MTM3NDY0CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISku
CisKKyAgICAgICAgTWFrZSBBdWRpb0NvbnRleHQgYSBzdWJjbGFzcyBvZiBBdWRpb1Byb2R1Y2Vy
LiBJdCBmaWd1cmVzIG91dCB3aGV0aGVyIHRoZXJlJ3MKKyAgICAgICAgYXVkaW8gcGxheWluZyBi
eSBjaGVja2luZyB3aGV0aGVyIGl0cyBBdWRpb0Rlc3RpbmF0aW9uTm9kZSBpcyBwbGF5aW5nIChh
bmQgbm90CisgICAgICAgIHNpbGVudCkuIEl0IGNhbGxzIERvY3VtZW50Ojp1cGRhdGVJc1BsYXlp
bmdBdWRpbygpIHdoZW5ldmVyIGl0cyBhdWRpbyBwbGF5aW5nCisgICAgICAgIHN0YXRlIGhhcyBj
aGFuZ2VkLgorCisgICAgICAgIFRlc3Q6IHdlYmF1ZGlvL3dlYi1hdWRpby1pcy1wbGF5aW5nLmh0
bWwKKworICAgICAgICAqIE1vZHVsZXMvd2ViYXVkaW8vQXVkaW9Db250ZXh0LmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OkF1ZGlvQ29udGV4dDo6bGF6eUluaXRpYWxpemUpOgorICAgICAgICBBZGQg
aXRzZWxmIHRvIHRoZSBEb2N1bWVudCdzIGxpc3Qgb2YgQXVkaW9Qcm9kdWNlcnMgaWYgaXQncyBu
b3QgYW4gb2ZmbGluZQorICAgICAgICBhdWRpbyBjb250ZXh0LgorICAgICAgICAoV2ViQ29yZTo6
QXVkaW9Db250ZXh0Ojp1bmluaXRpYWxpemUpOgorICAgICAgICBSZW1vdmUgaXRzZWxmIGZyb20g
dGhlIERvY3VtZW50J3MgbGlzdCBvZiBBdWRpb1Byb2R1Y2VycyBpZiBpdCdzIG5vdCBhbiBvZmZs
aW5lCisgICAgICAgIGF1ZGlvIGNvbnRleHQuCisgICAgICAgIChXZWJDb3JlOjpBdWRpb0NvbnRl
eHQ6OnN0b3ApOgorICAgICAgICBUZWxsIHRoZSBkb2N1bWVudCB0byB1cGRhdGUgaXRzIGF1ZGlv
IHBsYXlpbmcgc3RhdGUuCisgICAgICAgIChXZWJDb3JlOjpBdWRpb0NvbnRleHQ6OmlzUGxheWlu
Z0F1ZGlvKToKKyAgICAgICAgUmV0dXJuIHRydWUgaWYgdGhlIGF1ZGlvIGNvbnRleHQgaGFzbid0
IGJlZW4gc3RvcHBlZCBhbmQgaXRzIGRlc3RpbmF0aW9uIG5vZGUgaXMKKyAgICAgICAgcGxheWlu
ZyBhdWRpby4KKyAgICAgICAgKFdlYkNvcmU6OkF1ZGlvQ29udGV4dDo6cGFnZU11dGVkU3RhdGVE
aWRDaGFuZ2UpOgorICAgICAgICBBZGQgYSBGSVhNRSBmb3Igbm93LgorICAgICAgICAoV2ViQ29y
ZTo6QXVkaW9Db250ZXh0Ojppc1BsYXlpbmdBdWRpb0RpZENoYW5nZSk6CisgICAgICAgIENhbGwg
RG9jdW1lbnQ6OnVwZGF0ZUlzUGxheWluZ0F1ZGlvKCkuCisgICAgICAgICogTW9kdWxlcy93ZWJh
dWRpby9BdWRpb0NvbnRleHQuaDoKKworICAgICAgICAqIE1vZHVsZXMvd2ViYXVkaW8vQXVkaW9E
ZXN0aW5hdGlvbk5vZGUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6QXVkaW9EZXN0aW5hdGlvbk5v
ZGU6OkF1ZGlvRGVzdGluYXRpb25Ob2RlKToKKyAgICAgICAgSW5pdGlhbGl6ZSBtX2lzU2lsZW50
IGFuZCBtX2lzRWZmZWN0aXZlbHlQbGF5aW5nQXVkaW8uCisgICAgICAgIChXZWJDb3JlOjpBdWRp
b0Rlc3RpbmF0aW9uTm9kZTo6cmVuZGVyKToKKyAgICAgICAgQ2FsbCBzZXRJc1NpbGVudCgpIHdp
dGggdGhlIGFwcHJvcHJpYXRlIHZhbHVlIGFmdGVyIHJlbmRlcmluZy4KKyAgICAgICAgKFdlYkNv
cmU6OkF1ZGlvRGVzdGluYXRpb25Ob2RlOjppc1BsYXlpbmdEaWRDaGFuZ2UpOgorICAgICAgICBD
YWxsIHVwZGF0ZUlzRWZmZWN0aXZlbHlQbGF5aW5nQXVkaW8oKS4KKyAgICAgICAgKFdlYkNvcmU6
OkF1ZGlvRGVzdGluYXRpb25Ob2RlOjpzZXRJc1NpbGVudCk6CisgICAgICAgIElmIG1faXNTaWxl
bnQgaGFzIGNoYW5nZWQsIGNhbGwgdXBkYXRlSXNFZmZlY3RpdmVseVBsYXlpbmdBdWRpbygpLgor
ICAgICAgICAoV2ViQ29yZTo6QXVkaW9EZXN0aW5hdGlvbk5vZGU6OnVwZGF0ZUlzRWZmZWN0aXZl
bHlQbGF5aW5nQXVkaW8pOgorICAgICAgICBJZiBtX2lzRWZmZWN0aXZlbHlQbGF5aW5nQXVkaW8g
aGFzIGNoYW5nZWQsIGNhbGwgQXVkaW9Db250ZXh0Ojppc1BsYXlpbmdBdWRpb0RpZENoYW5nZSgp
LgorICAgICAgICAqIE1vZHVsZXMvd2ViYXVkaW8vQXVkaW9EZXN0aW5hdGlvbk5vZGUuaDoKKyAg
ICAgICAgKFdlYkNvcmU6OkF1ZGlvRGVzdGluYXRpb25Ob2RlOjppc1BsYXlpbmcpOgorICAgICAg
ICAoV2ViQ29yZTo6QXVkaW9EZXN0aW5hdGlvbk5vZGU6OmlzUGxheWluZ0F1ZGlvKToKKworICAg
ICAgICAqIE1vZHVsZXMvd2ViYXVkaW8vRGVmYXVsdEF1ZGlvRGVzdGluYXRpb25Ob2RlLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OkRlZmF1bHRBdWRpb0Rlc3RpbmF0aW9uTm9kZTo6aXNQbGF5aW5n
KToKKyAgICAgICAgUmV0dXJuIHdoZXRoZXIgdGhlIEF1ZGlvRGVzdGluYXRpb24gaXMgcGxheWlu
Zy4KKyAgICAgICAgKiBNb2R1bGVzL3dlYmF1ZGlvL0RlZmF1bHRBdWRpb0Rlc3RpbmF0aW9uTm9k
ZS5oOgorCisgICAgICAgICogcGxhdGZvcm0vYXVkaW8vQXVkaW9JT0NhbGxiYWNrLmg6CisgICAg
ICAgICogcGxhdGZvcm0vYXVkaW8vaW9zL0F1ZGlvRGVzdGluYXRpb25JT1MuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6QXVkaW9EZXN0aW5hdGlvbklPUzo6c3RhcnQpOgorICAgICAgICBDYWxsIHNl
dElzUGxheWluZygpIGluc3RlYWQuCisgICAgICAgIChXZWJDb3JlOjpBdWRpb0Rlc3RpbmF0aW9u
SU9TOjpzdG9wKToKKyAgICAgICAgRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpBdWRpb0Rlc3Rp
bmF0aW9uSU9TOjpzZXRJc1BsYXlpbmcpOgorICAgICAgICBJZiBtX2lzUGxheWluZyBoYXMgY2hh
bmdlZCwgY2FsbCBBdWRpb0lPQ2FsbGJhY2s6OmlzUGxheWluZ0RpZENoYW5nZSgpLgorICAgICAg
ICAqIHBsYXRmb3JtL2F1ZGlvL2lvcy9BdWRpb0Rlc3RpbmF0aW9uSU9TLmg6CisKKyAgICAgICAg
KiBwbGF0Zm9ybS9hdWRpby9tYWMvQXVkaW9EZXN0aW5hdGlvbk1hYy5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpBdWRpb0Rlc3RpbmF0aW9uTWFjOjpzdGFydCk6CisgICAgICAgIENhbGwgc2V0SXNQ
bGF5aW5nKCkgaW5zdGVhZC4KKyAgICAgICAgKFdlYkNvcmU6OkF1ZGlvRGVzdGluYXRpb25NYWM6
OnN0b3ApOgorICAgICAgICBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OkF1ZGlvRGVzdGluYXRp
b25NYWM6OnNldElzUGxheWluZyk6CisgICAgICAgIElmIG1faXNQbGF5aW5nIGhhcyBjaGFuZ2Vk
LCBjYWxsIEF1ZGlvSU9DYWxsYmFjazo6aXNQbGF5aW5nRGlkQ2hhbmdlKCkuCisgICAgICAgICog
cGxhdGZvcm0vYXVkaW8vbWFjL0F1ZGlvRGVzdGluYXRpb25NYWMuaDoKKworICAgICAgICAqIHRl
c3RpbmcvSW50ZXJuYWxzLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkludGVybmFsczo6aXNQYWdl
UGxheWluZ0F1ZGlvKToKKyAgICAgICAgKiB0ZXN0aW5nL0ludGVybmFscy5oOgorICAgICAgICAq
IHRlc3RpbmcvSW50ZXJuYWxzLmlkbDoKKyAgICAgICAgQWRkIGludGVybmFscy5pc1BhZ2VQbGF5
aW5nQXVkaW8oKSBmb3IgdGVzdGluZy4KKwogMjAxNC0xMS0xOSAgUGhpbGlwcGUgTm9ybWFuZCAg
PHBub3JtYW5kQGlnYWxpYS5jb20+CiAKICAgICAgICAgTWlzc2luZyBOVUxMLWNoZWNrIGluIFZp
ZGVvVHJhY2s6OnNldExhbmd1YWdlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L3dlYmF1ZGlvL0F1ZGlvQ29udGV4dC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1
ZGlvL0F1ZGlvQ29udGV4dC5jcHAKaW5kZXggYjA2OTVmYS4uZTE5NjE5MiAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJhdWRpby9BdWRpb0NvbnRleHQuY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViYXVkaW8vQXVkaW9Db250ZXh0LmNwcApAQCAtMjE5LDYg
KzIxOSw4IEBAIHZvaWQgQXVkaW9Db250ZXh0OjpsYXp5SW5pdGlhbGl6ZSgpCiAgICAgICAgICAg
ICAgICAgbV9kZXN0aW5hdGlvbk5vZGUtPmluaXRpYWxpemUoKTsKIAogICAgICAgICAgICAgICAg
IGlmICghaXNPZmZsaW5lQ29udGV4dCgpKSB7CisgICAgICAgICAgICAgICAgICAgIGRvY3VtZW50
KCktPmFkZEF1ZGlvUHJvZHVjZXIodGhpcyk7CisKICAgICAgICAgICAgICAgICAgICAgLy8gVGhp
cyBzdGFydHMgdGhlIGF1ZGlvIHRocmVhZC4gVGhlIGRlc3RpbmF0aW9uIG5vZGUncyBwcm92aWRl
SW5wdXQoKSBtZXRob2Qgd2lsbCBub3cgYmUgY2FsbGVkIHJlcGVhdGVkbHkgdG8gcmVuZGVyIGF1
ZGlvLgogICAgICAgICAgICAgICAgICAgICAvLyBFYWNoIHRpbWUgcHJvdmlkZUlucHV0KCkgaXMg
Y2FsbGVkLCBhIHBvcnRpb24gb2YgdGhlIGF1ZGlvIHN0cmVhbSBpcyByZW5kZXJlZC4gTGV0J3Mg
Y2FsbCB0aGlzIHRpbWUgcGVyaW9kIGEgInJlbmRlciBxdWFudHVtIi4KICAgICAgICAgICAgICAg
ICAgICAgLy8gTk9URTogZm9yIG5vdyBkZWZhdWx0IEF1ZGlvQ29udGV4dCBkb2VzIG5vdCBuZWVk
IGFuIGV4cGxpY2l0IHN0YXJ0UmVuZGVyaW5nKCkgY2FsbCBmcm9tIEphdmFTY3JpcHQuCkBAIC0y
NjQsNiArMjY2LDggQEAgdm9pZCBBdWRpb0NvbnRleHQ6OnVuaW5pdGlhbGl6ZSgpCiAgICAgbV9p
c0F1ZGlvVGhyZWFkRmluaXNoZWQgPSB0cnVlOwogCiAgICAgaWYgKCFpc09mZmxpbmVDb250ZXh0
KCkpIHsKKyAgICAgICAgZG9jdW1lbnQoKS0+cmVtb3ZlQXVkaW9Qcm9kdWNlcih0aGlzKTsKKwog
ICAgICAgICBBU1NFUlQoc19oYXJkd2FyZUNvbnRleHRDb3VudCk7CiAgICAgICAgIC0tc19oYXJk
d2FyZUNvbnRleHRDb3VudDsKICAgICB9CkBAIC0yOTcsNiArMzAxLDggQEAgdm9pZCBBdWRpb0Nv
bnRleHQ6OnN0b3AoKQogICAgICAgICByZXR1cm47CiAgICAgbV9pc1N0b3BTY2hlZHVsZWQgPSB0
cnVlOwogCisgICAgZG9jdW1lbnQoKS0+dXBkYXRlSXNQbGF5aW5nQXVkaW8oKTsKKwogICAgIC8v
IERvbid0IGNhbGwgdW5pbml0aWFsaXplKCkgaW1tZWRpYXRlbHkgaGVyZSBiZWNhdXNlIHRoZSBT
Y3JpcHRFeGVjdXRpb25Db250ZXh0IGlzIGluIHRoZSBtaWRkbGUKICAgICAvLyBvZiBkZWFsaW5n
IHdpdGggYWxsIG9mIGl0cyBBY3RpdmVET01PYmplY3RzIGF0IHRoaXMgcG9pbnQuIHVuaW5pdGlh
bGl6ZSgpIGNhbiBkZS1yZWZlcmVuY2Ugb3RoZXIKICAgICAvLyBBY3RpdmVET01PYmplY3RzIHNv
IGxldCdzIHNjaGVkdWxlIHVuaW5pdGlhbGl6ZSgpIHRvIGJlIGNhbGxlZCBsYXRlci4KQEAgLTk2
Miw2ICs5NjgsMjEgQEAgdm9pZCBBdWRpb0NvbnRleHQ6Om1lZGlhQ2FuU3RhcnQoKQogICAgIHJl
bW92ZUJlaGF2aW9yUmVzdHJpY3Rpb24oQXVkaW9Db250ZXh0OjpSZXF1aXJlUGFnZUNvbnNlbnRG
b3JBdWRpb1N0YXJ0UmVzdHJpY3Rpb24pOwogfQogCitib29sIEF1ZGlvQ29udGV4dDo6aXNQbGF5
aW5nQXVkaW8oKQoreworICAgIHJldHVybiAhbV9pc1N0b3BTY2hlZHVsZWQgJiYgbV9kZXN0aW5h
dGlvbk5vZGUgJiYgbV9kZXN0aW5hdGlvbk5vZGUtPmlzUGxheWluZ0F1ZGlvKCk7Cit9CisKK3Zv
aWQgQXVkaW9Db250ZXh0OjpwYWdlTXV0ZWRTdGF0ZURpZENoYW5nZSgpCit7CisgICAgLy8gRklY
TUUgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEzODEwNDogSGFuZGxl
IG11dGluZyB3ZWIgYXVkaW8uCit9CisKK3ZvaWQgQXVkaW9Db250ZXh0Ojppc1BsYXlpbmdBdWRp
b0RpZENoYW5nZSgpCit7CisgICAgZG9jdW1lbnQoKS0+dXBkYXRlSXNQbGF5aW5nQXVkaW8oKTsK
K30KKwogdm9pZCBBdWRpb0NvbnRleHQ6OmZpcmVDb21wbGV0aW9uRXZlbnQoKQogewogICAgIEFT
U0VSVChpc01haW5UaHJlYWQoKSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L3dlYmF1ZGlvL0F1ZGlvQ29udGV4dC5oIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJhdWRp
by9BdWRpb0NvbnRleHQuaAppbmRleCBmZjgwYWMwLi4xMjNkMzkxIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1ZGlvL0F1ZGlvQ29udGV4dC5oCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL01vZHVsZXMvd2ViYXVkaW8vQXVkaW9Db250ZXh0LmgKQEAgLTI5LDYgKzI5LDcgQEAK
ICNpbmNsdWRlICJBc3luY0F1ZGlvRGVjb2Rlci5oIgogI2luY2x1ZGUgIkF1ZGlvQnVzLmgiCiAj
aW5jbHVkZSAiQXVkaW9EZXN0aW5hdGlvbk5vZGUuaCIKKyNpbmNsdWRlICJBdWRpb1Byb2R1Y2Vy
LmgiCiAjaW5jbHVkZSAiRXZlbnRMaXN0ZW5lci5oIgogI2luY2x1ZGUgIkV2ZW50VGFyZ2V0Lmgi
CiAjaW5jbHVkZSAiTWVkaWFDYW5TdGFydExpc3RlbmVyLmgiCkBAIC03Myw3ICs3NCw3IEBAIGNs
YXNzIFBlcmlvZGljV2F2ZTsKIC8vIEF1ZGlvQ29udGV4dCBpcyB0aGUgY29ybmVyc3RvbmUgb2Yg
dGhlIHdlYiBhdWRpbyBBUEkgYW5kIGFsbCBBdWRpb05vZGVzIGFyZSBjcmVhdGVkIGZyb20gaXQu
CiAvLyBGb3IgdGhyZWFkIHNhZmV0eSBiZXR3ZWVuIHRoZSBhdWRpbyB0aHJlYWQgYW5kIHRoZSBt
YWluIHRocmVhZCwgaXQgaGFzIGEgcmVuZGVyaW5nIGdyYXBoIGxvY2tpbmcgbWVjaGFuaXNtLiAK
IAotY2xhc3MgQXVkaW9Db250ZXh0IDogcHVibGljIEFjdGl2ZURPTU9iamVjdCwgcHVibGljIFRo
cmVhZFNhZmVSZWZDb3VudGVkPEF1ZGlvQ29udGV4dD4sIHB1YmxpYyBFdmVudFRhcmdldFdpdGhJ
bmxpbmVEYXRhLCBwdWJsaWMgTWVkaWFDYW5TdGFydExpc3RlbmVyIHsKK2NsYXNzIEF1ZGlvQ29u
dGV4dCA6IHB1YmxpYyBBY3RpdmVET01PYmplY3QsIHB1YmxpYyBUaHJlYWRTYWZlUmVmQ291bnRl
ZDxBdWRpb0NvbnRleHQ+LCBwdWJsaWMgRXZlbnRUYXJnZXRXaXRoSW5saW5lRGF0YSwgcHVibGlj
IE1lZGlhQ2FuU3RhcnRMaXN0ZW5lciwgcHVibGljIEF1ZGlvUHJvZHVjZXIgewogcHVibGljOgog
ICAgIC8vIENyZWF0ZSBhbiBBdWRpb0NvbnRleHQgZm9yIHJlbmRlcmluZyB0byB0aGUgYXVkaW8g
aGFyZHdhcmUuCiAgICAgc3RhdGljIFBhc3NSZWZQdHI8QXVkaW9Db250ZXh0PiBjcmVhdGUoRG9j
dW1lbnQmLCBFeGNlcHRpb25Db2RlJik7CkBAIC0yNTcsNiArMjU4LDggQEAgcHVibGljOgogICAg
IHZvaWQgYWRkQmVoYXZpb3JSZXN0cmljdGlvbihCZWhhdmlvclJlc3RyaWN0aW9ucyByZXN0cmlj
dGlvbikgeyBtX3Jlc3RyaWN0aW9ucyB8PSByZXN0cmljdGlvbjsgfQogICAgIHZvaWQgcmVtb3Zl
QmVoYXZpb3JSZXN0cmljdGlvbihCZWhhdmlvclJlc3RyaWN0aW9ucyByZXN0cmljdGlvbikgeyBt
X3Jlc3RyaWN0aW9ucyAmPSB+cmVzdHJpY3Rpb247IH0KIAorICAgIHZvaWQgaXNQbGF5aW5nQXVk
aW9EaWRDaGFuZ2UoKTsKKwogcHJvdGVjdGVkOgogICAgIGV4cGxpY2l0IEF1ZGlvQ29udGV4dChE
b2N1bWVudCYpOwogICAgIEF1ZGlvQ29udGV4dChEb2N1bWVudCYsIHVuc2lnbmVkIG51bWJlck9m
Q2hhbm5lbHMsIHNpemVfdCBudW1iZXJPZkZyYW1lcywgZmxvYXQgc2FtcGxlUmF0ZSk7CkBAIC0y
ODAsNiArMjgzLDEwIEBAIHByaXZhdGU6CiAKICAgICB2aXJ0dWFsIHZvaWQgbWVkaWFDYW5TdGFy
dCgpIG92ZXJyaWRlOwogCisgICAgLy8gQXVkaW9Qcm9kdWNlcgorICAgIHZpcnR1YWwgYm9vbCBp
c1BsYXlpbmdBdWRpbygpIG92ZXJyaWRlOworICAgIHZpcnR1YWwgdm9pZCBwYWdlTXV0ZWRTdGF0
ZURpZENoYW5nZSgpIG92ZXJyaWRlOworCiAgICAgYm9vbCBtX2lzSW5pdGlhbGl6ZWQ7CiAgICAg
Ym9vbCBtX2lzQXVkaW9UaHJlYWRGaW5pc2hlZDsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvTW9kdWxlcy93ZWJhdWRpby9BdWRpb0Rlc3RpbmF0aW9uTm9kZS5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9Nb2R1bGVzL3dlYmF1ZGlvL0F1ZGlvRGVzdGluYXRpb25Ob2RlLmNwcAppbmRleCAwMTVi
MGQ5Li42ODRkMmNkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1ZGlv
L0F1ZGlvRGVzdGluYXRpb25Ob2RlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dl
YmF1ZGlvL0F1ZGlvRGVzdGluYXRpb25Ob2RlLmNwcApAQCAtMzksNiArMzksOCBAQCBuYW1lc3Bh
Y2UgV2ViQ29yZSB7CiBBdWRpb0Rlc3RpbmF0aW9uTm9kZTo6QXVkaW9EZXN0aW5hdGlvbk5vZGUo
QXVkaW9Db250ZXh0KiBjb250ZXh0LCBmbG9hdCBzYW1wbGVSYXRlKQogICAgIDogQXVkaW9Ob2Rl
KGNvbnRleHQsIHNhbXBsZVJhdGUpCiAgICAgLCBtX2N1cnJlbnRTYW1wbGVGcmFtZSgwKQorICAg
ICwgbV9pc1NpbGVudCh0cnVlKQorICAgICwgbV9pc0VmZmVjdGl2ZWx5UGxheWluZ0F1ZGlvKGZh
bHNlKQogewogICAgIGFkZElucHV0KHN0ZDo6bWFrZV91bmlxdWU8QXVkaW9Ob2RlSW5wdXQ+KHRo
aXMpKTsKICAgICAKQEAgLTYxLDE2ICs2MywxOSBAQCB2b2lkIEF1ZGlvRGVzdGluYXRpb25Ob2Rl
OjpyZW5kZXIoQXVkaW9CdXMqIHNvdXJjZUJ1cywgQXVkaW9CdXMqIGRlc3RpbmF0aW9uQnVzLAog
ICAgIAogICAgIGlmICghY29udGV4dCgpLT5pc0luaXRpYWxpemVkKCkpIHsKICAgICAgICAgZGVz
dGluYXRpb25CdXMtPnplcm8oKTsKKyAgICAgICAgc2V0SXNTaWxlbnQodHJ1ZSk7CiAgICAgICAg
IHJldHVybjsKICAgICB9CiAKICAgICBpZiAoY29udGV4dCgpLT51c2VyR2VzdHVyZVJlcXVpcmVk
Rm9yQXVkaW9TdGFydCgpKSB7CiAgICAgICAgIGRlc3RpbmF0aW9uQnVzLT56ZXJvKCk7CisgICAg
ICAgIHNldElzU2lsZW50KHRydWUpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCiAgICAgaWYg
KGNvbnRleHQoKS0+cGFnZUNvbnNlbnRSZXF1aXJlZEZvckF1ZGlvU3RhcnQoKSkgewogICAgICAg
ICBkZXN0aW5hdGlvbkJ1cy0+emVybygpOworICAgICAgICBzZXRJc1NpbGVudCh0cnVlKTsKICAg
ICAgICAgcmV0dXJuOwogICAgIH0KIApAQCAtMTAwLDYgKzEwNSwzMyBAQCB2b2lkIEF1ZGlvRGVz
dGluYXRpb25Ob2RlOjpyZW5kZXIoQXVkaW9CdXMqIHNvdXJjZUJ1cywgQXVkaW9CdXMqIGRlc3Rp
bmF0aW9uQnVzLAogICAgIAogICAgIC8vIEFkdmFuY2UgY3VycmVudCBzYW1wbGUtZnJhbWUuCiAg
ICAgbV9jdXJyZW50U2FtcGxlRnJhbWUgKz0gbnVtYmVyT2ZGcmFtZXM7CisKKyAgICBzZXRJc1Np
bGVudChkZXN0aW5hdGlvbkJ1cy0+aXNTaWxlbnQoKSk7Cit9CisKK3ZvaWQgQXVkaW9EZXN0aW5h
dGlvbk5vZGU6OmlzUGxheWluZ0RpZENoYW5nZSgpCit7CisgICAgdXBkYXRlSXNFZmZlY3RpdmVs
eVBsYXlpbmdBdWRpbygpOworfQorCit2b2lkIEF1ZGlvRGVzdGluYXRpb25Ob2RlOjpzZXRJc1Np
bGVudChib29sIGlzU2lsZW50KQoreworICAgIGlmIChtX2lzU2lsZW50ID09IGlzU2lsZW50KQor
ICAgICAgICByZXR1cm47CisKKyAgICBtX2lzU2lsZW50ID0gaXNTaWxlbnQ7CisgICAgdXBkYXRl
SXNFZmZlY3RpdmVseVBsYXlpbmdBdWRpbygpOworfQorCit2b2lkIEF1ZGlvRGVzdGluYXRpb25O
b2RlOjp1cGRhdGVJc0VmZmVjdGl2ZWx5UGxheWluZ0F1ZGlvKCkKK3sKKyAgICBib29sIGlzRWZm
ZWN0aXZlbHlQbGF5aW5nQXVkaW8gPSBpc1BsYXlpbmcoKSAmJiAhbV9pc1NpbGVudDsKKyAgICBp
ZiAobV9pc0VmZmVjdGl2ZWx5UGxheWluZ0F1ZGlvID09IGlzRWZmZWN0aXZlbHlQbGF5aW5nQXVk
aW8pCisgICAgICAgIHJldHVybjsKKworICAgIG1faXNFZmZlY3RpdmVseVBsYXlpbmdBdWRpbyA9
IGlzRWZmZWN0aXZlbHlQbGF5aW5nQXVkaW87CisgICAgaWYgKGNvbnRleHQoKSkKKyAgICAgICAg
Y29udGV4dCgpLT5pc1BsYXlpbmdBdWRpb0RpZENoYW5nZSgpOwogfQogCiB9IC8vIG5hbWVzcGFj
ZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1ZGlvL0F1
ZGlvRGVzdGluYXRpb25Ob2RlLmggYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1ZGlvL0F1
ZGlvRGVzdGluYXRpb25Ob2RlLmgKaW5kZXggZTc0MmM2MC4uNDQzOGQyZSAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJhdWRpby9BdWRpb0Rlc3RpbmF0aW9uTm9kZS5oCisr
KyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViYXVkaW8vQXVkaW9EZXN0aW5hdGlvbk5vZGUu
aApAQCAtNjAsNyArNjAsMTEgQEAgcHVibGljOgogICAgIHZpcnR1YWwgdm9pZCBzdGFydFJlbmRl
cmluZygpID0gMDsKIAogICAgIEF1ZGlvU291cmNlUHJvdmlkZXIqIGxvY2FsQXVkaW9JbnB1dFBy
b3ZpZGVyKCkgeyByZXR1cm4gJm1fbG9jYWxBdWRpb0lucHV0UHJvdmlkZXI7IH0KLSAgICAKKwor
ICAgIHZpcnR1YWwgYm9vbCBpc1BsYXlpbmcoKSB7IHJldHVybiBmYWxzZTsgfQorICAgIHZpcnR1
YWwgdm9pZCBpc1BsYXlpbmdEaWRDaGFuZ2UoKSBvdmVycmlkZTsKKyAgICBib29sIGlzUGxheWlu
Z0F1ZGlvKCkgY29uc3QgeyByZXR1cm4gbV9pc0VmZmVjdGl2ZWx5UGxheWluZ0F1ZGlvOyB9CisK
IHByb3RlY3RlZDoKICAgICAvLyBMb2NhbEF1ZGlvSW5wdXRQcm92aWRlciBhbGxvd3MgdXMgdG8g
ZXhwb3NlIGFuIEF1ZGlvU291cmNlUHJvdmlkZXIgZm9yIGxvY2FsL2xpdmUgYXVkaW8gaW5wdXQu
CiAgICAgLy8gSWYgdGhlcmUgaXMgbG9jYWwvbGl2ZSBhdWRpbyBpbnB1dCwgd2UgY2FsbCBzZXQo
KSB3aXRoIHRoZSBhdWRpbyBpbnB1dCBkYXRhIGV2ZXJ5IHJlbmRlciBxdWFudHVtLgpAQCAtOTMs
MTAgKzk3LDE1IEBAIHByb3RlY3RlZDoKICAgICB2aXJ0dWFsIGRvdWJsZSB0YWlsVGltZSgpIGNv
bnN0IG92ZXJyaWRlIHsgcmV0dXJuIDA7IH0KICAgICB2aXJ0dWFsIGRvdWJsZSBsYXRlbmN5VGlt
ZSgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIDA7IH0KIAorICAgIHZvaWQgc2V0SXNTaWxlbnQo
Ym9vbCk7CisgICAgdm9pZCB1cGRhdGVJc0VmZmVjdGl2ZWx5UGxheWluZ0F1ZGlvKCk7CisKICAg
ICAvLyBDb3VudHMgdGhlIG51bWJlciBvZiBzYW1wbGUtZnJhbWVzIHByb2Nlc3NlZCBieSB0aGUg
ZGVzdGluYXRpb24uCiAgICAgc2l6ZV90IG1fY3VycmVudFNhbXBsZUZyYW1lOwogCiAgICAgTG9j
YWxBdWRpb0lucHV0UHJvdmlkZXIgbV9sb2NhbEF1ZGlvSW5wdXRQcm92aWRlcjsKKyAgICBib29s
IG1faXNTaWxlbnQ7CisgICAgYm9vbCBtX2lzRWZmZWN0aXZlbHlQbGF5aW5nQXVkaW87CiB9Owog
CiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL3dlYmF1ZGlvL0RlZmF1bHRBdWRpb0Rlc3RpbmF0aW9uTm9kZS5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9Nb2R1bGVzL3dlYmF1ZGlvL0RlZmF1bHRBdWRpb0Rlc3RpbmF0aW9uTm9kZS5jcHAKaW5k
ZXggNmI0ZjliOC4uOTU2Y2MyMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93
ZWJhdWRpby9EZWZhdWx0QXVkaW9EZXN0aW5hdGlvbk5vZGUuY3BwCisrKyBiL1NvdXJjZS9XZWJD
b3JlL01vZHVsZXMvd2ViYXVkaW8vRGVmYXVsdEF1ZGlvRGVzdGluYXRpb25Ob2RlLmNwcApAQCAt
MjgsNiArMjgsNyBAQAogCiAjaW5jbHVkZSAiRGVmYXVsdEF1ZGlvRGVzdGluYXRpb25Ob2RlLmgi
CiAKKyNpbmNsdWRlICJBdWRpb0NvbnRleHQuaCIKICNpbmNsdWRlICJFeGNlcHRpb25Db2RlLmgi
CiAjaW5jbHVkZSAiTG9nZ2luZy5oIgogI2luY2x1ZGUgPHd0Zi9NYWluVGhyZWFkLmg+CkBAIC0x
MzMsNiArMTM0LDExIEBAIHZvaWQgRGVmYXVsdEF1ZGlvRGVzdGluYXRpb25Ob2RlOjpzZXRDaGFu
bmVsQ291bnQodW5zaWduZWQgbG9uZyBjaGFubmVsQ291bnQsIEV4CiAgICAgfQogfQogCitib29s
IERlZmF1bHRBdWRpb0Rlc3RpbmF0aW9uTm9kZTo6aXNQbGF5aW5nKCkKK3sKKyAgICByZXR1cm4g
bV9kZXN0aW5hdGlvbiAmJiBtX2Rlc3RpbmF0aW9uLT5pc1BsYXlpbmcoKTsKK30KKwogfSAvLyBu
YW1lc3BhY2UgV2ViQ29yZQogCiAjZW5kaWYgLy8gRU5BQkxFKFdFQl9BVURJTykKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViYXVkaW8vRGVmYXVsdEF1ZGlvRGVzdGluYXRp
b25Ob2RlLmggYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1ZGlvL0RlZmF1bHRBdWRpb0Rl
c3RpbmF0aW9uTm9kZS5oCmluZGV4IDU3NGZlZDIuLjJlMGE4NjUgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL01vZHVsZXMvd2ViYXVkaW8vRGVmYXVsdEF1ZGlvRGVzdGluYXRpb25Ob2RlLmgK
KysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJhdWRpby9EZWZhdWx0QXVkaW9EZXN0aW5h
dGlvbk5vZGUuaApAQCAtNTEsNyArNTEsOCBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCB2b2lkIGVu
YWJsZUlucHV0KGNvbnN0IFN0cmluZyYgaW5wdXREZXZpY2VJZCkgb3ZlcnJpZGU7CiAgICAgdmly
dHVhbCB2b2lkIHN0YXJ0UmVuZGVyaW5nKCkgb3ZlcnJpZGU7CiAgICAgdmlydHVhbCB1bnNpZ25l
ZCBsb25nIG1heENoYW5uZWxDb3VudCgpIGNvbnN0IG92ZXJyaWRlOwotICAgIAorICAgIHZpcnR1
YWwgYm9vbCBpc1BsYXlpbmcoKSBvdmVycmlkZTsKKwogcHJpdmF0ZToKICAgICBleHBsaWNpdCBE
ZWZhdWx0QXVkaW9EZXN0aW5hdGlvbk5vZGUoQXVkaW9Db250ZXh0Kik7CiAgICAgdm9pZCBjcmVh
dGVEZXN0aW5hdGlvbigpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vYXVk
aW8vQXVkaW9JT0NhbGxiYWNrLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9hdWRpby9BdWRp
b0lPQ2FsbGJhY2suaAppbmRleCAyN2RlMmQ1Li5hZDIzY2VmIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9hdWRpby9BdWRpb0lPQ2FsbGJhY2suaAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9hdWRpby9BdWRpb0lPQ2FsbGJhY2suaApAQCAtNDAsNiArNDAsOCBAQCBw
dWJsaWM6CiAgICAgLy8gT3B0aW9uYWwgYXVkaW8gaW5wdXQgaXMgZ2l2ZW4gaW4gc291cmNlQnVz
IChpZiBpdCdzIG5vdCAwKS4KICAgICB2aXJ0dWFsIHZvaWQgcmVuZGVyKEF1ZGlvQnVzKiBzb3Vy
Y2VCdXMsIEF1ZGlvQnVzKiBkZXN0aW5hdGlvbkJ1cywgc2l6ZV90IGZyYW1lc1RvUHJvY2Vzcykg
PSAwOwogCisgICAgdmlydHVhbCB2b2lkIGlzUGxheWluZ0RpZENoYW5nZSgpID0gMDsKKwogICAg
IHZpcnR1YWwgfkF1ZGlvSU9DYWxsYmFjaygpIHsgfQogfTsKIApkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vYXVkaW8vaW9zL0F1ZGlvRGVzdGluYXRpb25JT1MuY3BwIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vYXVkaW8vaW9zL0F1ZGlvRGVzdGluYXRpb25JT1MuY3BwCmlu
ZGV4IDI1Mzk1MTkuLmI0NGIwY2UgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2F1ZGlvL2lvcy9BdWRpb0Rlc3RpbmF0aW9uSU9TLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9hdWRpby9pb3MvQXVkaW9EZXN0aW5hdGlvbklPUy5jcHAKQEAgLTE5MSw3ICsxOTEs
NyBAQCB2b2lkIEF1ZGlvRGVzdGluYXRpb25JT1M6OnN0YXJ0KCkKIAogICAgIE9TU3RhdHVzIHJl
c3VsdCA9IEF1ZGlvT3V0cHV0VW5pdFN0YXJ0KG1fb3V0cHV0VW5pdCk7CiAgICAgaWYgKCFyZXN1
bHQpCi0gICAgICAgIG1faXNQbGF5aW5nID0gdHJ1ZTsKKyAgICAgICAgc2V0SXNQbGF5aW5nKHRy
dWUpOwogfQogCiB2b2lkIEF1ZGlvRGVzdGluYXRpb25JT1M6OnN0b3AoKQpAQCAtMjA0LDcgKzIw
NCw3IEBAIHZvaWQgQXVkaW9EZXN0aW5hdGlvbklPUzo6c3RvcCgpCiAKICAgICBPU1N0YXR1cyBy
ZXN1bHQgPSBBdWRpb091dHB1dFVuaXRTdG9wKG1fb3V0cHV0VW5pdCk7CiAgICAgaWYgKCFyZXN1
bHQpCi0gICAgICAgIG1faXNQbGF5aW5nID0gZmFsc2U7CisgICAgICAgIHNldElzUGxheWluZyhm
YWxzZSk7CiB9CiAKIC8vIFB1bGxzIG9uIG91ciBwcm92aWRlciB0byBnZXQgcmVuZGVyZWQgYXVk
aW8gc3RyZWFtLgpAQCAtMjI1LDYgKzIyNSwxNSBAQCBPU1N0YXR1cyBBdWRpb0Rlc3RpbmF0aW9u
SU9TOjpyZW5kZXIoVUludDMyIG51bWJlck9mRnJhbWVzLCBBdWRpb0J1ZmZlckxpc3QqIGlvRAog
ICAgIHJldHVybiBub0VycjsKIH0KIAordm9pZCBBdWRpb0Rlc3RpbmF0aW9uSU9TOjpzZXRJc1Bs
YXlpbmcoYm9vbCBpc1BsYXlpbmcpCit7CisgICAgaWYgKG1faXNQbGF5aW5nID09IGlzUGxheWlu
ZykKKyAgICAgICAgcmV0dXJuOworCisgICAgbV9pc1BsYXlpbmcgPSBpc1BsYXlpbmc7CisgICAg
bV9jYWxsYmFjay5pc1BsYXlpbmdEaWRDaGFuZ2UoKTsKK30KKwogLy8gRGVmYXVsdE91dHB1dFVu
aXQgY2FsbGJhY2sKIE9TU3RhdHVzIEF1ZGlvRGVzdGluYXRpb25JT1M6OmlucHV0UHJvYyh2b2lk
KiB1c2VyRGF0YSwgQXVkaW9Vbml0UmVuZGVyQWN0aW9uRmxhZ3MqLCBjb25zdCBBdWRpb1RpbWVT
dGFtcCosIFVJbnQzMiAvKmJ1c051bWJlciovLCBVSW50MzIgbnVtYmVyT2ZGcmFtZXMsIEF1ZGlv
QnVmZmVyTGlzdCogaW9EYXRhKQogewpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vYXVkaW8vaW9zL0F1ZGlvRGVzdGluYXRpb25JT1MuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2F1ZGlvL2lvcy9BdWRpb0Rlc3RpbmF0aW9uSU9TLmgKaW5kZXggNzQ3ZTgwZS4uNjRhZjEx
YSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vYXVkaW8vaW9zL0F1ZGlvRGVz
dGluYXRpb25JT1MuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9hdWRpby9pb3MvQXVk
aW9EZXN0aW5hdGlvbklPUy5oCkBAIC03MCw2ICs3MCw3IEBAIHByaXZhdGU6CiAgICAgZnJpZW5k
IGZsb2F0IEF1ZGlvRGVzdGluYXRpb246OmhhcmR3YXJlU2FtcGxlUmF0ZSgpOwogCiAgICAgT1NT
dGF0dXMgcmVuZGVyKFVJbnQzMiBudW1iZXJPZkZyYW1lcywgQXVkaW9CdWZmZXJMaXN0KiBpb0Rh
dGEpOworICAgIHZvaWQgc2V0SXNQbGF5aW5nKGJvb2wpOwogCiAgICAgQXVkaW9Vbml0IG1fb3V0
cHV0VW5pdDsKICAgICBBdWRpb0lPQ2FsbGJhY2smIG1fY2FsbGJhY2s7CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9hdWRpby9tYWMvQXVkaW9EZXN0aW5hdGlvbk1hYy5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9hdWRpby9tYWMvQXVkaW9EZXN0aW5hdGlvbk1hYy5j
cHAKaW5kZXggZTk1ZTRjNS4uMGFhZTFmYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vYXVkaW8vbWFjL0F1ZGlvRGVzdGluYXRpb25NYWMuY3BwCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2F1ZGlvL21hYy9BdWRpb0Rlc3RpbmF0aW9uTWFjLmNwcApAQCAtMTQ0LDcg
KzE0NCw3IEBAIHZvaWQgQXVkaW9EZXN0aW5hdGlvbk1hYzo6c3RhcnQoKQogICAgIE9TU3RhdHVz
IHJlc3VsdCA9IEF1ZGlvT3V0cHV0VW5pdFN0YXJ0KG1fb3V0cHV0VW5pdCk7CiAKICAgICBpZiAo
IXJlc3VsdCkKLSAgICAgICAgbV9pc1BsYXlpbmcgPSB0cnVlOworICAgICAgICBzZXRJc1BsYXlp
bmcodHJ1ZSk7CiB9CiAKIHZvaWQgQXVkaW9EZXN0aW5hdGlvbk1hYzo6c3RvcCgpCkBAIC0xNTIs
NyArMTUyLDcgQEAgdm9pZCBBdWRpb0Rlc3RpbmF0aW9uTWFjOjpzdG9wKCkKICAgICBPU1N0YXR1
cyByZXN1bHQgPSBBdWRpb091dHB1dFVuaXRTdG9wKG1fb3V0cHV0VW5pdCk7CiAKICAgICBpZiAo
IXJlc3VsdCkKLSAgICAgICAgbV9pc1BsYXlpbmcgPSBmYWxzZTsKKyAgICAgICAgc2V0SXNQbGF5
aW5nKGZhbHNlKTsKIH0KIAogLy8gUHVsbHMgb24gb3VyIHByb3ZpZGVyIHRvIGdldCByZW5kZXJl
ZCBhdWRpbyBzdHJlYW0uCkBAIC0xNzQsNiArMTc0LDE1IEBAIE9TU3RhdHVzIEF1ZGlvRGVzdGlu
YXRpb25NYWM6OnJlbmRlcihVSW50MzIgbnVtYmVyT2ZGcmFtZXMsIEF1ZGlvQnVmZmVyTGlzdCog
aW9ECiAgICAgcmV0dXJuIG5vRXJyOwogfQogCit2b2lkIEF1ZGlvRGVzdGluYXRpb25NYWM6OnNl
dElzUGxheWluZyhib29sIGlzUGxheWluZykKK3sKKyAgICBpZiAobV9pc1BsYXlpbmcgPT0gaXNQ
bGF5aW5nKQorICAgICAgICByZXR1cm47CisKKyAgICBtX2lzUGxheWluZyA9IGlzUGxheWluZzsK
KyAgICBtX2NhbGxiYWNrLmlzUGxheWluZ0RpZENoYW5nZSgpOworfQorCiAvLyBEZWZhdWx0T3V0
cHV0VW5pdCBjYWxsYmFjawogT1NTdGF0dXMgQXVkaW9EZXN0aW5hdGlvbk1hYzo6aW5wdXRQcm9j
KHZvaWQqIHVzZXJEYXRhLCBBdWRpb1VuaXRSZW5kZXJBY3Rpb25GbGFncyosIGNvbnN0IEF1ZGlv
VGltZVN0YW1wKiwgVUludDMyIC8qYnVzTnVtYmVyKi8sIFVJbnQzMiBudW1iZXJPZkZyYW1lcywg
QXVkaW9CdWZmZXJMaXN0KiBpb0RhdGEpCiB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9hdWRpby9tYWMvQXVkaW9EZXN0aW5hdGlvbk1hYy5oIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vYXVkaW8vbWFjL0F1ZGlvRGVzdGluYXRpb25NYWMuaAppbmRleCAxZmNmOTczLi4y
MDAyNmY3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9hdWRpby9tYWMvQXVk
aW9EZXN0aW5hdGlvbk1hYy5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2F1ZGlvL21h
Yy9BdWRpb0Rlc3RpbmF0aW9uTWFjLmgKQEAgLTUxLDYgKzUxLDcgQEAgcHJpdmF0ZToKICAgICBz
dGF0aWMgT1NTdGF0dXMgaW5wdXRQcm9jKHZvaWQqIHVzZXJEYXRhLCBBdWRpb1VuaXRSZW5kZXJB
Y3Rpb25GbGFncyosIGNvbnN0IEF1ZGlvVGltZVN0YW1wKiwgVUludDMyIGJ1c051bWJlciwgVUlu
dDMyIG51bWJlck9mRnJhbWVzLCBBdWRpb0J1ZmZlckxpc3QqIGlvRGF0YSk7CiAKICAgICBPU1N0
YXR1cyByZW5kZXIoVUludDMyIG51bWJlck9mRnJhbWVzLCBBdWRpb0J1ZmZlckxpc3QqIGlvRGF0
YSk7CisgICAgdm9pZCBzZXRJc1BsYXlpbmcoYm9vbCk7CiAKICAgICB2aXJ0dWFsIE1lZGlhU2Vz
c2lvbjo6TWVkaWFUeXBlIG1lZGlhVHlwZSgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIE1lZGlh
U2Vzc2lvbjo6V2ViQXVkaW87IH0KICAgICB2aXJ0dWFsIE1lZGlhU2Vzc2lvbjo6TWVkaWFUeXBl
IHByZXNlbnRhdGlvblR5cGUoKSBjb25zdCB7IHJldHVybiBNZWRpYVNlc3Npb246OldlYkF1ZGlv
OyB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS90ZXN0aW5nL0ludGVybmFscy5jcHAgYi9T
b3VyY2UvV2ViQ29yZS90ZXN0aW5nL0ludGVybmFscy5jcHAKaW5kZXggYWQyNWEzMy4uYmE5ZTEw
YiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvdGVzdGluZy9JbnRlcm5hbHMuY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3Rlc3RpbmcvSW50ZXJuYWxzLmNwcApAQCAtMjQxMCw0ICsyNDEwLDEz
IEBAIHZvaWQgSW50ZXJuYWxzOjpzZXRQYWdlTXV0ZWQoYm9vbCBtdXRlZCkKICAgICAgICAgcGFn
ZS0+c2V0TXV0ZWQobXV0ZWQpOwogfQogCitib29sIEludGVybmFsczo6aXNQYWdlUGxheWluZ0F1
ZGlvKCkKK3sKKyAgICBEb2N1bWVudCogZG9jdW1lbnQgPSBjb250ZXh0RG9jdW1lbnQoKTsKKyAg
ICBpZiAoIWRvY3VtZW50IHx8ICFkb2N1bWVudC0+cGFnZSgpKQorICAgICAgICByZXR1cm4gZmFs
c2U7CisKKyAgICByZXR1cm4gZG9jdW1lbnQtPnBhZ2UoKS0+aXNQbGF5aW5nQXVkaW8oKTsKK30K
KwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvdGVzdGluZy9JbnRlcm5hbHMuaCBiL1Nv
dXJjZS9XZWJDb3JlL3Rlc3RpbmcvSW50ZXJuYWxzLmgKaW5kZXggN2U3NzQ0Yy4uOGZmM2VmZCAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvdGVzdGluZy9JbnRlcm5hbHMuaAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS90ZXN0aW5nL0ludGVybmFscy5oCkBAIC0zNDksNiArMzQ5LDcgQEAgcHVibGlj
OgogICAgIFN0cmluZyBwYWdlT3ZlcmxheUxheWVyVHJlZUFzVGV4dChFeGNlcHRpb25Db2RlJikg
Y29uc3Q7CiAKICAgICB2b2lkIHNldFBhZ2VNdXRlZChib29sKTsKKyAgICBib29sIGlzUGFnZVBs
YXlpbmdBdWRpbygpOwogCiBwcml2YXRlOgogICAgIGV4cGxpY2l0IEludGVybmFscyhEb2N1bWVu
dCopOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvdGVzdGluZy9JbnRlcm5hbHMuaWRsIGIv
U291cmNlL1dlYkNvcmUvdGVzdGluZy9JbnRlcm5hbHMuaWRsCmluZGV4IGM2ZDMzNWUuLjU2Y2Zi
M2QgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3Rlc3RpbmcvSW50ZXJuYWxzLmlkbAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS90ZXN0aW5nL0ludGVybmFscy5pZGwKQEAgLTMwNCw0ICszMDQsNSBA
QCBlbnVtIFBhZ2VPdmVybGF5VHlwZSB7CiAgICAgW1JhaXNlc0V4Y2VwdGlvbl0gRE9NU3RyaW5n
IHBhZ2VPdmVybGF5TGF5ZXJUcmVlQXNUZXh0KCk7CiAKICAgICB2b2lkIHNldFBhZ2VNdXRlZChi
b29sZWFuIG11dGVkKTsKKyAgICBib29sZWFuIGlzUGFnZVBsYXlpbmdBdWRpbygpOwogfTsKLS0g
CjIuMS4xIChBcHBsZSBHaXQtNTEpCgo=
</data>
<flag name="review"
          id="266751"
          type_id="1"
          status="+"
          setter="jer.noble"
    />
          </attachment>
      

    </bug>

</bugzilla>