<?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>63485</bug_id>
          
          <creation_ts>2011-06-27 14:48:35 -0700</creation_ts>
          <short_desc>Support throwing away non-running code even while other code is running</short_desc>
          <delta_ts>2011-06-28 06:05:29 -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>New Bugs</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="Oliver Hunt">oliver</reporter>
          <assigned_to name="Oliver Hunt">oliver</assigned_to>
          <cc>apavlov</cc>
    
    <cc>aroben</cc>
    
    <cc>barraclough</cc>
    
    <cc>bweinstein</cc>
    
    <cc>eric</cc>
    
    <cc>ggaren</cc>
    
    <cc>jberlin</cc>
    
    <cc>rniwa</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>428327</commentid>
    <comment_count>0</comment_count>
    <who name="Oliver Hunt">oliver</who>
    <bug_when>2011-06-27 14:48:35 -0700</bug_when>
    <thetext>Support throwing away non-running code even while other code is running</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>428335</commentid>
    <comment_count>1</comment_count>
      <attachid>98791</attachid>
    <who name="Oliver Hunt">oliver</who>
    <bug_when>2011-06-27 14:52:58 -0700</bug_when>
    <thetext>Created attachment 98791
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>428412</commentid>
    <comment_count>2</comment_count>
      <attachid>98791</attachid>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2011-06-27 16:00:27 -0700</bug_when>
    <thetext>Comment on attachment 98791
Patch

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

r- because there&apos;s some more work to do here.

&gt; Source/JavaScriptCore/ChangeLog:8
&gt; +        Add a function to CodeBlock to support unlinking direct linked callsites,

&quot;call site&quot; is two words.

&gt; Source/JavaScriptCore/ChangeLog:12
&gt; +        The unlinking completely reverts any optimised callsites, such that they

&quot;optimized&quot; is the spelling in US English.

&gt; Source/JavaScriptCore/bytecode/CodeBlock.cpp:1695
&gt; +    // Ideally we&apos;d unlink the method_check optimisation here as
&gt; +    // well, but that would require additional work to deoptimise
&gt; +    // general case property accesses.

I think you can get rid of this comment, since it doesn&apos;t contribute to understanding the code around it. If you think this is important work to do, filing a bug is the best way to remember to do it.

&gt; Source/JavaScriptCore/bytecode/EvalCodeCache.h:75
&gt; +        void invalidate()
&gt; +        {
&gt; +            m_cacheMap.clear();
&gt; +        }

I think &quot;clear&quot; is a better name for this function, since that&apos;s what it does.

&gt; Source/JavaScriptCore/jit/JITWriteBarrier.h:73
&gt; +    void clearToMarkedStructure() { clear(reinterpret_cast&lt;void*&gt;(-1)); }
&gt; +    void clearLocation() { m_location = CodeLocationDataLabelPtr(); }

Is this for another patch?

&gt; Source/JavaScriptCore/jsc.cpp:158
&gt; +    putDirectFunction(globalExec(), new (globalExec()) JSFunction(globalExec(), this, functionStructure(), 0, Identifier(globalExec(), &quot;releaseExecutableMemory&quot;), functionReleaseExecutableMemory));

#ifndef NDEBUG only, please.

&gt; Source/JavaScriptCore/runtime/Executable.h:266
&gt; +        void unlinkCalls();
&gt;          OwnPtr&lt;EvalCodeBlock&gt; m_evalCodeBlock;

Newline between function and data declaration, please.

&gt; Source/JavaScriptCore/runtime/JSGlobalData.cpp:453
&gt; +struct SafeRecompiler {

This can inherit from VoidFunctor.

&gt; Source/JavaScriptCore/runtime/JSGlobalData.cpp:455
&gt; +    typedef bool ReturnType;
&gt; +    static bool returnValue() { return true; }

Then you can remove these.

&gt; Source/JavaScriptCore/runtime/JSGlobalData.cpp:472
&gt; +        SafeRecompiler recompiler;

&quot;Safe&quot; is something that all objects should be, so &quot;SafeRecompiler&quot; isn&apos;t a great class name. How about &quot;ConservativeRecompiler&quot; or &quot;StackPreservingRecompiler&quot;.

&gt; Source/JavaScriptCore/runtime/JSGlobalData.cpp:480
&gt; +        heap.getConservativeRoots(roots);
&gt; +        HashSet&lt;JSCell*&gt;::iterator end = roots.end();
&gt; +        for (HashSet&lt;JSCell*&gt;::iterator ptr = roots.begin(); ptr != end; ++ptr) {
&gt; +            ScriptExecutable* executable = 0;
&gt; +            JSCell* cell = *ptr;
&gt; +            // Gathering roots se reset it to avoid badness
&gt; +            heap.setMarked(cell);

Two comments:

(1) gatherConservativeRoots seems like the wrong API here. We only want to know about objects on the JS stack -- not all objects referenced by C.

(2) gatherConservativeRoots should do the job of re-setting the mark bit. We don&apos;t want to give the Heap an API that can leave it in an invalid state.

&gt; Source/JavaScriptCore/runtime/JSGlobalData.cpp:493
&gt; +                recompiler.liveFunctions.add(static_cast&lt;FunctionExecutable*&gt;(executable));

&quot;currentlyExecutingFunctions&quot; is a better name than &quot;liveFunctions&quot; because lots of functions are live, but we&apos;ll throw away their code anyway.

&gt; Source/JavaScriptCore/runtime/JSGlobalData.cpp:499
&gt; +    heap.collectAllGarbage();

Kind of a shame that we&apos;ll iterate the heap twice, but I guess there&apos;s currently no other way to identify running eval and program code?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>428466</commentid>
    <comment_count>3</comment_count>
      <attachid>98820</attachid>
    <who name="Oliver Hunt">oliver</who>
    <bug_when>2011-06-27 17:20:32 -0700</bug_when>
    <thetext>Created attachment 98820
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>428536</commentid>
    <comment_count>4</comment_count>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2011-06-27 18:12:38 -0700</bug_when>
    <thetext>Oliver mentioned that the conservative stack trace saves us in cases where we would throw away a function during its own compilation.

He&apos;s going to post a new patch that saves us from that case inside discardCode().</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>428538</commentid>
    <comment_count>5</comment_count>
      <attachid>98836</attachid>
    <who name="Oliver Hunt">oliver</who>
    <bug_when>2011-06-27 18:15:30 -0700</bug_when>
    <thetext>Created attachment 98836
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>428539</commentid>
    <comment_count>6</comment_count>
      <attachid>98836</attachid>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2011-06-27 18:17:31 -0700</bug_when>
    <thetext>Comment on attachment 98836
Patch

r=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>428551</commentid>
    <comment_count>7</comment_count>
    <who name="Oliver Hunt">oliver</who>
    <bug_when>2011-06-27 18:32:14 -0700</bug_when>
    <thetext>Committed r89885: &lt;http://trac.webkit.org/changeset/89885&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>428569</commentid>
    <comment_count>8</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2011-06-27 19:15:54 -0700</bug_when>
    <thetext>This patch broke Snow Leopard, Windows, and WinCairo builds:

http://build.webkit.org/builders/SnowLeopard%20Intel%20Release%20%28Build%29/builds/31350/steps/compile-webkit/logs/warnings%20%281%29
http://build.webkit.org/builders/SnowLeopard%20Intel%20Release%20%28Build%29/builds/31350/steps/compile-webkit/logs/stdio

http://build.webkit.org/builders/Windows%20Debug%20%28Build%29/builds/37159/steps/compile-webkit/logs/stdio

http://build.webkit.org/builders/WinCairo%20Debug%20%28Build%29/builds/7884/steps/compile-webkit/logs/stdio</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>428570</commentid>
    <comment_count>9</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2011-06-27 19:24:29 -0700</bug_when>
    <thetext>It seems like the problem is that __ZN3JSC12JSGlobalData23releaseExecutableMemoryEv isn&apos;t defined for release builds but JavaScriptCore.exp tries to export it.

Can we add a preprocessor in JavaScriptCore.exp?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>428573</commentid>
    <comment_count>10</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2011-06-27 19:39:56 -0700</bug_when>
    <thetext>Build fix: http://trac.webkit.org/changeset/89887

It seems like Windows XP (Debug) needs some sort of a &quot;kick&quot;:
http://build.webkit.org/builders/Windows%20Debug%20%28Build%29/builds/37160/steps/compile-webkit/logs/stdio</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>428816</commentid>
    <comment_count>11</comment_count>
    <who name="Alexander Pavlov (apavlov)">apavlov</who>
    <bug_when>2011-06-28 05:34:54 -0700</bug_when>
    <thetext>Windows (Debug) Builder still broken, as of r89922</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>428828</commentid>
    <comment_count>12</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2011-06-28 06:05:29 -0700</bug_when>
    <thetext>(In reply to comment #11)
&gt; Windows (Debug) Builder still broken, as of r89922

Linker somehow cannot see JSGlobalData::releaseExecutableMemory from jsc.obj.  Windows 7 (Release) is building fine though.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>98791</attachid>
            <date>2011-06-27 14:52:58 -0700</date>
            <delta_ts>2011-06-27 17:20:27 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-63485-20110627145256.patch</filename>
            <type>text/plain</type>
            <size>20789</size>
            <attacher name="Oliver Hunt">oliver</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogODk2NDEKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9DaGFuZ2VMb2cgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nCmluZGV4IDRk
Njg2MWMwZDFjOTQwMzAxMTI2ZGNjMWZkMzkzYzI4MzY3ZGE3ZDEuLmZhM2Y3NmUxMzJlNjRiNTVk
NjNiODIxMGQ0ZjliYzA3ZjUxMDBmMDMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwpAQCAtMSwz
ICsxLDUyIEBACisyMDExLTA2LTI3ICBPbGl2ZXIgSHVudCAgPG9saXZlckBhcHBsZS5jb20+CisK
KyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgU3VwcG9ydCB0
aHJvd2luZyBhd2F5IG5vbi1ydW5uaW5nIGNvZGUgZXZlbiB3aGlsZSBvdGhlciBjb2RlIGlzIHJ1
bm5pbmcKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTYz
NDg1CisKKyAgICAgICAgQWRkIGEgZnVuY3Rpb24gdG8gQ29kZUJsb2NrIHRvIHN1cHBvcnQgdW5s
aW5raW5nIGRpcmVjdCBsaW5rZWQgY2FsbHNpdGVzLAorICAgICAgICBhbmQgdGhlbiB3aXRoIHRo
YXQgaW4gcGxhY2UgYWRkIGxvZ2ljIHRvIGRpc2NhcmQgY29kZSBmcm9tIGFueSBmdW5jdGlvbgor
ICAgICAgICB0aGF0IGlzIG5vdCBjdXJyZW50bHkgb24gdGhlIHN0YWNrLgorCisgICAgICAgIFRo
ZSB1bmxpbmtpbmcgY29tcGxldGVseSByZXZlcnRzIGFueSBvcHRpbWlzZWQgY2FsbHNpdGVzLCBz
dWNoIHRoYXQgdGhleQorICAgICAgICBtYXkgYmUgcmVsaW5rZWQgYWdhaW4gaW4gZnV0dXJlLgor
CisgICAgICAgICogSmF2YVNjcmlwdENvcmUuZXhwOgorICAgICAgICAqIGJ5dGVjb2RlL0NvZGVC
bG9jay5jcHA6CisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6dW5saW5rQ2FsbHMpOgorICAgICAg
ICAoSlNDOjpDb2RlQmxvY2s6OmludmFsaWRhdGVFdmFsQ2FjaGUpOgorICAgICAgICAqIGJ5dGVj
b2RlL0NvZGVCbG9jay5oOgorICAgICAgICAoSlNDOjpDYWxsTGlua0luZm86OkNhbGxMaW5rSW5m
byk6CisgICAgICAgIChKU0M6OkNhbGxMaW5rSW5mbzo6dW5saW5rKToKKyAgICAgICAgKiBieXRl
Y29kZS9FdmFsQ29kZUNhY2hlLmg6CisgICAgICAgIChKU0M6OkV2YWxDb2RlQ2FjaGU6OmludmFs
aWRhdGUpOgorICAgICAgICAqIGhlYXAvSGVhcC5jcHA6CisgICAgICAgIChKU0M6OkhlYXA6Omdl
dENvbnNlcnZhdGl2ZVJvb3RzKToKKyAgICAgICAgKiBoZWFwL0hlYXAuaDoKKyAgICAgICAgKiBq
aXQvSklULmNwcDoKKyAgICAgICAgKEpTQzo6SklUOjpwcml2YXRlQ29tcGlsZSk6CisgICAgICAg
ICogaml0L0pJVC5oOgorICAgICAgICAqIGppdC9KSVRDYWxsLmNwcDoKKyAgICAgICAgKEpTQzo6
SklUOjpjb21waWxlT3BDYWxsKToKKyAgICAgICAgKiBqaXQvSklUV3JpdGVCYXJyaWVyLmg6Cisg
ICAgICAgIChKU0M6OkpJVFdyaXRlQmFycmllckJhc2U6OmNsZWFyKToKKyAgICAgICAgKEpTQzo6
SklUV3JpdGVCYXJyaWVyQmFzZTo6Y2xlYXJUb01hcmtlZFN0cnVjdHVyZSk6CisgICAgICAgIChK
U0M6OkpJVFdyaXRlQmFycmllckJhc2U6OmNsZWFyTG9jYXRpb24pOgorICAgICAgICAqIGpzYy5j
cHA6CisgICAgICAgIChHbG9iYWxPYmplY3Q6Okdsb2JhbE9iamVjdCk6CisgICAgICAgIChmdW5j
dGlvblJlbGVhc2VFeGVjdXRhYmxlTWVtb3J5KToKKyAgICAgICAgKiBydW50aW1lL0V4ZWN1dGFi
bGUuY3BwOgorICAgICAgICAoSlNDOjpFdmFsRXhlY3V0YWJsZTo6dW5saW5rQ2FsbHMpOgorICAg
ICAgICAoSlNDOjpQcm9ncmFtRXhlY3V0YWJsZTo6dW5saW5rQ2FsbHMpOgorICAgICAgICAoSlND
OjpGdW5jdGlvbkV4ZWN1dGFibGU6OmRpc2NhcmRDb2RlKToKKyAgICAgICAgKEpTQzo6RnVuY3Rp
b25FeGVjdXRhYmxlOjp1bmxpbmtDYWxscyk6CisgICAgICAgICogcnVudGltZS9FeGVjdXRhYmxl
Lmg6CisgICAgICAgICogcnVudGltZS9KU0dsb2JhbERhdGEuY3BwOgorICAgICAgICAoSlNDOjpT
YWZlUmVjb21waWxlcjo6cmV0dXJuVmFsdWUpOgorICAgICAgICAoSlNDOjpTYWZlUmVjb21waWxl
cjo6b3BlcmF0b3IoKSk6CisgICAgICAgIChKU0M6OkpTR2xvYmFsRGF0YTo6cmVsZWFzZUV4ZWN1
dGFibGVNZW1vcnkpOgorCiAyMDExLTA2LTIzICBPbGl2ZXIgSHVudCAgPG9saXZlckBhcHBsZS5j
b20+CiAKICAgICAgICAgRml4IFF0IGFnYWluLgpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL0phdmFTY3JpcHRDb3JlLmV4cCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2Ny
aXB0Q29yZS5leHAKaW5kZXggZTQ2ZDAwNTA1ZTcwNWFlZDQyNTNiNTYzNWNhMmU2MjhlZTM0NGVj
Mi4uZjI1MTIyNjczYTkwYTc4ZDJkNWMyNDVlNmY0YjI1MGMyOWUwOGMwOSAxMDA2NDQKLS0tIGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLmV4cAorKysgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUuZXhwCkBAIC0xMzMsNiArMTMzLDcgQEAgX19aTjNK
U0MxMkpTR2xvYmFsRGF0YTE0cmVzZXREYXRlQ2FjaGVFdgogX19aTjNKU0MxMkpTR2xvYmFsRGF0
YTE0c2hhcmVkSW5zdGFuY2VFdgogX19aTjNKU0MxMkpTR2xvYmFsRGF0YTE1ZHVtcFJlZ0V4cFRy
YWNlRXYKIF9fWk4zSlNDMTJKU0dsb2JhbERhdGEyMmNsZWFyQnVpbHRpblN0cnVjdHVyZXNFdgor
X19aTjNKU0MxMkpTR2xvYmFsRGF0YTIzcmVsZWFzZUV4ZWN1dGFibGVNZW1vcnlFdgogX19aTjNK
U0MxMkpTR2xvYmFsRGF0YTZjcmVhdGVFTlNfMTVUaHJlYWRTdGFja1R5cGVFCiBfX1pOM0pTQzEy
SlNHbG9iYWxEYXRhRDFFdgogX19aTjNKU0MxMlJlZ0V4cE9iamVjdDZzX2luZm9FCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmNwcCBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suY3BwCmluZGV4IDIyNDcyNDliM2Vh
NDEyZjYyZGRlYjYxMTU0Mzc5ZGI5YzRiMDZiODIuLjhhNTkyNzUxM2ZkM2NlZGIxZWFkMTVhNzVm
NmFlOGFiZDRlNDJhOTEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29k
ZS9Db2RlQmxvY2suY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2Rl
QmxvY2suY3BwCkBAIC0zOCw2ICszOCw3IEBACiAjaW5jbHVkZSAiSlNGdW5jdGlvbi5oIgogI2lu
Y2x1ZGUgIkpTU3RhdGljU2NvcGVPYmplY3QuaCIKICNpbmNsdWRlICJKU1ZhbHVlLmgiCisjaW5j
bHVkZSAiUmVwYXRjaEJ1ZmZlci5oIgogI2luY2x1ZGUgIlVTdHJpbmdDb25jYXRlbmF0ZS5oIgog
I2luY2x1ZGUgPHN0ZGlvLmg+CiAjaW5jbHVkZSA8d3RmL1N0cmluZ0V4dHJhcy5oPgpAQCAtMTY3
Nyw0ICsxNjc4LDI5IEBAIHZvaWQgQ29kZUJsb2NrOjpjcmVhdGVBY3RpdmF0aW9uKENhbGxGcmFt
ZSogY2FsbEZyYW1lKQogICAgIGNhbGxGcmFtZS0+c2V0U2NvcGVDaGFpbihjYWxsRnJhbWUtPnNj
b3BlQ2hhaW4oKS0+cHVzaChhY3RpdmF0aW9uKSk7CiB9CiAKK3ZvaWQgQ29kZUJsb2NrOjp1bmxp
bmtDYWxscygpCit7CisjaWYgRU5BQkxFKEpJVCkKKyAgICBpZiAoIShtX2NhbGxMaW5rSW5mb3Mu
c2l6ZSgpIHx8IG1fbWV0aG9kQ2FsbExpbmtJbmZvcy5zaXplKCkpKQorICAgICAgICByZXR1cm47
CisgICAgUmVwYXRjaEJ1ZmZlciByZXBhdGNoQnVmZmVyKHRoaXMpOworICAgIGZvciAoc2l6ZV90
IGkgPSAwOyBpIDwgbV9jYWxsTGlua0luZm9zLnNpemUoKTsgaSsrKSB7CisgICAgICAgIGlmICgh
bV9jYWxsTGlua0luZm9zW2ldLmlzTGlua2VkKCkpCisgICAgICAgICAgICBjb250aW51ZTsKKyAg
ICAgICAgcmVwYXRjaEJ1ZmZlci5yZWxpbmsobV9jYWxsTGlua0luZm9zW2ldLmNhbGxSZXR1cm5M
b2NhdGlvbiwgbV9jYWxsTGlua0luZm9zW2ldLmlzQ2FsbCA/IG1fZ2xvYmFsRGF0YS0+aml0U3R1
YnMtPmN0aVZpcnR1YWxDYWxsTGluaygpIDogbV9nbG9iYWxEYXRhLT5qaXRTdHVicy0+Y3RpVmly
dHVhbENvbnN0cnVjdExpbmsoKSk7CisgICAgICAgIG1fY2FsbExpbmtJbmZvc1tpXS51bmxpbmso
KTsKKyAgICB9CisgICAgLy8gSWRlYWxseSB3ZSdkIHVubGluayB0aGUgbWV0aG9kX2NoZWNrIG9w
dGltaXNhdGlvbiBoZXJlIGFzCisgICAgLy8gd2VsbCwgYnV0IHRoYXQgd291bGQgcmVxdWlyZSBh
ZGRpdGlvbmFsIHdvcmsgdG8gZGVvcHRpbWlzZQorICAgIC8vIGdlbmVyYWwgY2FzZSBwcm9wZXJ0
eSBhY2Nlc3Nlcy4KKyNlbmRpZgorfQorCit2b2lkIENvZGVCbG9jazo6aW52YWxpZGF0ZUV2YWxD
YWNoZSgpCit7CisgICAgaWYgKCFtX3JhcmVEYXRhKQorICAgICAgICByZXR1cm47CisgICAgbV9y
YXJlRGF0YS0+bV9ldmFsQ29kZUNhY2hlLmludmFsaWRhdGUoKTsKK30KKwogfSAvLyBuYW1lc3Bh
Y2UgSlNDCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJs
b2NrLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmgKaW5kZXgg
OGJmYTMyMzgwMTQxNmUzZmU1YTdjMWY4NTI1MjhiNWI1NjIyOWFhOC4uNmNjNDEyYTUxN2I1NzE3
OWQ2NTczMWUxOGQzZGNlMTE4MGVhNWM4YiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL2J5dGVjb2RlL0NvZGVCbG9jay5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRl
Y29kZS9Db2RlQmxvY2suaApAQCAtOTgsNiArOTgsNyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICBz
dHJ1Y3QgQ2FsbExpbmtJbmZvIHsKICAgICAgICAgQ2FsbExpbmtJbmZvKCkKICAgICAgICAgICAg
IDogaGFzU2VlblNob3VsZFJlcGF0Y2goZmFsc2UpCisgICAgICAgICAgICAsIGlzQ2FsbChmYWxz
ZSkKICAgICAgICAgewogICAgICAgICB9CiAKQEAgLTEwNSw5ICsxMDYsMTUgQEAgbmFtZXNwYWNl
IEpTQyB7CiAgICAgICAgIENvZGVMb2NhdGlvbkRhdGFMYWJlbFB0ciBob3RQYXRoQmVnaW47CiAg
ICAgICAgIENvZGVMb2NhdGlvbk5lYXJDYWxsIGhvdFBhdGhPdGhlcjsKICAgICAgICAgSklUV3Jp
dGVCYXJyaWVyPEpTRnVuY3Rpb24+IGNhbGxlZTsKLSAgICAgICAgYm9vbCBoYXNTZWVuU2hvdWxk
UmVwYXRjaDsKKyAgICAgICAgYm9vbCBoYXNTZWVuU2hvdWxkUmVwYXRjaCA6IDE7CisgICAgICAg
IGJvb2wgaXNDYWxsIDogMTsKIAogICAgICAgICBib29sIGlzTGlua2VkKCkgeyByZXR1cm4gY2Fs
bGVlOyB9CisgICAgICAgIHZvaWQgdW5saW5rKCkKKyAgICAgICAgeworICAgICAgICAgICAgaGFz
U2VlblNob3VsZFJlcGF0Y2ggPSBmYWxzZTsKKyAgICAgICAgICAgIGNhbGxlZS5jbGVhcigpOwor
ICAgICAgICB9CiAKICAgICAgICAgYm9vbCBzZWVuT25jZSgpCiAgICAgICAgIHsKQEAgLTI3MCw3
ICsyNzcsMTAgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgICAgICAgICAgcmV0dXJuIDE7CiAg
ICAgICAgICAgICByZXR1cm4gYmluYXJ5U2VhcmNoPENhbGxSZXR1cm5PZmZzZXRUb0J5dGVjb2Rl
T2Zmc2V0LCB1bnNpZ25lZCwgZ2V0Q2FsbFJldHVybk9mZnNldD4oY2FsbEluZGljZXMuYmVnaW4o
KSwgY2FsbEluZGljZXMuc2l6ZSgpLCBnZXRKSVRDb2RlKCkub2Zmc2V0T2YocmV0dXJuQWRkcmVz
cy52YWx1ZSgpKSktPmJ5dGVjb2RlT2Zmc2V0OwogICAgICAgICB9CisKKyAgICAgICAgdm9pZCB1
bmxpbmtDYWxscygpOwogI2VuZGlmCisKICNpZiBFTkFCTEUoSU5URVJQUkVURVIpCiAgICAgICAg
IHVuc2lnbmVkIGJ5dGVjb2RlT2Zmc2V0KEluc3RydWN0aW9uKiByZXR1cm5BZGRyZXNzKQogICAg
ICAgICB7CkBAIC0zNDAsNiArMzUwLDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAKICAgICAgICAgdm9p
ZCBjcmVhdGVBY3RpdmF0aW9uKENhbGxGcmFtZSopOwogCisgICAgICAgIHZvaWQgaW52YWxpZGF0
ZUV2YWxDYWNoZSgpOwogI2lmIEVOQUJMRShJTlRFUlBSRVRFUikKICAgICAgICAgdm9pZCBhZGRQ
cm9wZXJ0eUFjY2Vzc0luc3RydWN0aW9uKHVuc2lnbmVkIHByb3BlcnR5QWNjZXNzSW5zdHJ1Y3Rp
b24pCiAgICAgICAgIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29k
ZS9FdmFsQ29kZUNhY2hlLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvRXZhbENv
ZGVDYWNoZS5oCmluZGV4IDA5MWEyZDIyYzAyNmZkN2Y2YzNhOGQwZDlkZTk5OThkNWJkOTQ0ZWEu
LmJhOWMxNTQyMTk3N2JmODUyNjM2ZDZlM2E2OGNjNWI1OTE2MmZhNmUgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9FdmFsQ29kZUNhY2hlLmgKKysrIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0V2YWxDb2RlQ2FjaGUuaApAQCAtNjksNiArNjksMTEg
QEAgbmFtZXNwYWNlIEpTQyB7CiAKICAgICAgICAgdm9pZCB2aXNpdEFnZ3JlZ2F0ZShTbG90Vmlz
aXRvciYpOwogCisgICAgICAgIHZvaWQgaW52YWxpZGF0ZSgpCisgICAgICAgIHsKKyAgICAgICAg
ICAgIG1fY2FjaGVNYXAuY2xlYXIoKTsKKyAgICAgICAgfQorCiAgICAgcHJpdmF0ZToKICAgICAg
ICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIG1heENhY2hlYWJsZVNvdXJjZUxlbmd0aCA9IDI1NjsK
ICAgICAgICAgc3RhdGljIGNvbnN0IGludCBtYXhDYWNoZUVudHJpZXMgPSA2NDsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXAuY3BwIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2hlYXAvSGVhcC5jcHAKaW5kZXggMDBmMzE3NTRmYjY2OTFmYjZmYTI2MDE1YWU3NmQ3
YmFlNTQyMzM2NS4uZDQ0NGVhYjc2NDdmYjExZjg4NzU0NDA4NmE1NTE0NDBhM2Q3YTVhMSAxMDA2
NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcC5jcHAKKysrIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcC5jcHAKQEAgLTM5NSw2ICszOTUsMzAgQEAgaW5saW5l
IFJlZ2lzdGVyRmlsZSYgSGVhcDo6cmVnaXN0ZXJGaWxlKCkKICAgICByZXR1cm4gbV9nbG9iYWxE
YXRhLT5pbnRlcnByZXRlci0+cmVnaXN0ZXJGaWxlKCk7CiB9CiAKK3ZvaWQgSGVhcDo6Z2V0Q29u
c2VydmF0aXZlUm9vdHMoSGFzaFNldDxKU0NlbGwqPiYgcm9vdHMpCit7CisgICAgQVNTRVJUKGlz
VmFsaWRUaHJlYWRTdGF0ZShtX2dsb2JhbERhdGEpKTsKKyAgICBpZiAobV9vcGVyYXRpb25JblBy
b2dyZXNzICE9IE5vT3BlcmF0aW9uKQorICAgICAgICBDUkFTSCgpOworICAgIG1fb3BlcmF0aW9u
SW5Qcm9ncmVzcyA9IENvbGxlY3Rpb247CisgICAgQ29uc2VydmF0aXZlUm9vdHMgbWFjaGluZVRo
cmVhZFJvb3RzKCZtX2Jsb2Nrcyk7CisgICAgdm9pZCogZHVtbXk7CisgICAgbV9tYWNoaW5lVGhy
ZWFkcy5nYXRoZXJDb25zZXJ2YXRpdmVSb290cyhtYWNoaW5lVGhyZWFkUm9vdHMsICZkdW1teSk7
CisgICAgCisgICAgQ29uc2VydmF0aXZlUm9vdHMgcmVnaXN0ZXJGaWxlUm9vdHMoJm1fYmxvY2tz
KTsKKyAgICByZWdpc3RlckZpbGUoKS5nYXRoZXJDb25zZXJ2YXRpdmVSb290cyhyZWdpc3RlckZp
bGVSb290cyk7CisKKyAgICBzaXplX3QgbWFjaGluZVJvb3RDb3VudCA9IG1hY2hpbmVUaHJlYWRS
b290cy5zaXplKCk7CisgICAgSlNDZWxsKiogbWFjaGluZVJvb3RzID0gbWFjaGluZVRocmVhZFJv
b3RzLnJvb3RzKCk7CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtYWNoaW5lUm9vdENvdW50
OyBpKyspCisgICAgICAgIHJvb3RzLmFkZChtYWNoaW5lUm9vdHNbaV0pOworICAgIHNpemVfdCBy
ZWdpc3RlckZpbGVSb290Q291bnQgPSByZWdpc3RlckZpbGVSb290cy5zaXplKCk7CisgICAgSlND
ZWxsKiogcmVnaXN0ZXJSb290cyA9IHJlZ2lzdGVyRmlsZVJvb3RzLnJvb3RzKCk7CisgICAgZm9y
IChzaXplX3QgaSA9IDA7IGkgPCByZWdpc3RlckZpbGVSb290Q291bnQ7IGkrKykKKyAgICAgICAg
cm9vdHMuYWRkKHJlZ2lzdGVyUm9vdHNbaV0pOworICAgIG1fb3BlcmF0aW9uSW5Qcm9ncmVzcyA9
IE5vT3BlcmF0aW9uOworfQorCiB2b2lkIEhlYXA6Om1hcmtSb290cygpCiB7CiAgICAgQVNTRVJU
KGlzVmFsaWRUaHJlYWRTdGF0ZShtX2dsb2JhbERhdGEpKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9oZWFwL0hlYXAuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hl
YXAuaAppbmRleCAyNzU4YjUxZTA2NmFiNmIzY2E5YjA4MjFmOGEyZjgzOWUyYTU5NGJkLi40NzVi
MDNjZmU2OTQ1YTIzYmViOTdlNTcxODdhMmM5ZDcxNDBlY2ZmIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2hl
YXAvSGVhcC5oCkBAIC0xMTQsNiArMTE0LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIEhh
bmRsZVNsb3QgYWxsb2NhdGVMb2NhbEhhbmRsZSgpIHsgcmV0dXJuIG1faGFuZGxlU3RhY2sucHVz
aCgpOyB9CiAKICAgICAgICAgSGFuZGxlU3RhY2sqIGhhbmRsZVN0YWNrKCkgeyByZXR1cm4gJm1f
aGFuZGxlU3RhY2s7IH0KKyAgICAgICAgdm9pZCBnZXRDb25zZXJ2YXRpdmVSb290cyhIYXNoU2V0
PEpTQ2VsbCo+JiByb290cyk7CiAKICAgICBwcml2YXRlOgogICAgICAgICB0eXBlZGVmIEhhc2hT
ZXQ8TWFya2VkQmxvY2sqPjo6aXRlcmF0b3IgQmxvY2tJdGVyYXRvcjsKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9q
aXQvSklULmNwcAppbmRleCBhOGFkOTViNDE3N2I1ZmQ2YmNiNzVmYjZlMzU1YjEyMzhlNzA3ZjI2
Li4xYTY3M2QwNTBjNzMzNDE2MGE4ZTcwNjA5YzIyOTI1MDJjMWIwNzFjIDEwMDY0NAotLS0gYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL2ppdC9KSVQuY3BwCkBAIC01NzYsNiArNTc2LDcgQEAgSklUQ29kZSBKSVQ6OnByaXZhdGVD
b21waWxlKENvZGVQdHIqIGZ1bmN0aW9uRW50cnlBcml0eUNoZWNrKQogICAgIH0KICAgICBmb3Ig
KHVuc2lnbmVkIGkgPSAwOyBpIDwgbV9jb2RlQmxvY2stPm51bWJlck9mQ2FsbExpbmtJbmZvcygp
OyArK2kpIHsKICAgICAgICAgQ2FsbExpbmtJbmZvJiBpbmZvID0gbV9jb2RlQmxvY2stPmNhbGxM
aW5rSW5mbyhpKTsKKyAgICAgICAgaW5mby5pc0NhbGwgPSBtX2NhbGxTdHJ1Y3R1cmVTdHViQ29t
cGlsYXRpb25JbmZvW2ldLmlzQ2FsbDsKICAgICAgICAgaW5mby5jYWxsUmV0dXJuTG9jYXRpb24g
PSBwYXRjaEJ1ZmZlci5sb2NhdGlvbk9mTmVhckNhbGwobV9jYWxsU3RydWN0dXJlU3R1YkNvbXBp
bGF0aW9uSW5mb1tpXS5jYWxsUmV0dXJuTG9jYXRpb24pOwogICAgICAgICBpbmZvLmhvdFBhdGhC
ZWdpbiA9IHBhdGNoQnVmZmVyLmxvY2F0aW9uT2YobV9jYWxsU3RydWN0dXJlU3R1YkNvbXBpbGF0
aW9uSW5mb1tpXS5ob3RQYXRoQmVnaW4pOwogICAgICAgICBpbmZvLmhvdFBhdGhPdGhlciA9IHBh
dGNoQnVmZmVyLmxvY2F0aW9uT2ZOZWFyQ2FsbChtX2NhbGxTdHJ1Y3R1cmVTdHViQ29tcGlsYXRp
b25JbmZvW2ldLmhvdFBhdGhPdGhlcik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvaml0L0pJVC5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQuaAppbmRleCBhMmEx
NzUxYzM5NmFhMzgwODRmMTBhNTdmNDZkMWIyOGRjMzVlNjZhLi43MThhYjIyYWJiZGE0MWExNGZm
Yjg4MmQwNTM4MDhkOWNjYjU0NjE1IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
aml0L0pJVC5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmgKQEAgLTE0OSw2
ICsxNDksNyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkRhdGFM
YWJlbFB0ciBob3RQYXRoQmVnaW47CiAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpDYWxsIGhvdFBh
dGhPdGhlcjsKICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkNhbGwgY2FsbFJldHVybkxvY2F0aW9u
OworICAgICAgICBib29sIGlzQ2FsbDsKICAgICB9OwogCiAgICAgc3RydWN0IE1ldGhvZENhbGxD
b21waWxhdGlvbkluZm8gewpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9K
SVRDYWxsLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUQ2FsbC5jcHAKaW5kZXgg
Yjk2NTY1Yzk4ZDE3NzQ2MTMwZDUzZjhhNmZkYjYzZmY3YzA2YzY1ZC4uZThhMDY3MzVkMDNlODE4
MzQyYTEyNzBkOTk1YzNlZTE5NzdhNTBkOSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL2ppdC9KSVRDYWxsLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVENh
bGwuY3BwCkBAIC0xMzMsNiArMTMzLDcgQEAgdm9pZCBKSVQ6OmNvbXBpbGVPcENhbGwoT3Bjb2Rl
SUQgb3Bjb2RlSUQsIEluc3RydWN0aW9uKiBpbnN0cnVjdGlvbiwgdW5zaWduZWQgY2EKICAgICBh
ZGRTbG93Q2FzZShqdW1wVG9TbG93KTsKICAgICBBU1NFUlRfSklUX09GRlNFVChkaWZmZXJlbmNl
QmV0d2VlbihhZGRyZXNzT2ZMaW5rZWRGdW5jdGlvbkNoZWNrLCBqdW1wVG9TbG93KSwgcGF0Y2hP
ZmZzZXRPcENhbGxDb21wYXJlVG9KdW1wKTsKICAgICBtX2NhbGxTdHJ1Y3R1cmVTdHViQ29tcGls
YXRpb25JbmZvW2NhbGxMaW5rSW5mb0luZGV4XS5ob3RQYXRoQmVnaW4gPSBhZGRyZXNzT2ZMaW5r
ZWRGdW5jdGlvbkNoZWNrOworICAgIG1fY2FsbFN0cnVjdHVyZVN0dWJDb21waWxhdGlvbkluZm9b
Y2FsbExpbmtJbmZvSW5kZXhdLmlzQ2FsbCA9IG9wY29kZUlEICE9IG9wX2NvbnN0cnVjdDsKIAog
ICAgIC8vIFRoZSBmb2xsb3dpbmcgaXMgdGhlIGZhc3QgY2FzZSwgb25seSB1c2VkIHdoYW4gYSBj
YWxsZWUgY2FuIGJlIGxpbmtlZC4KIApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2ppdC9KSVRXcml0ZUJhcnJpZXIuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUV3Jp
dGVCYXJyaWVyLmgKaW5kZXggZGJlOTBjMmM0ZmU5YmZlMjQxM2FjNTE3NWI1NTBlY2U4ZTEyMjc0
NC4uNzIyMWIxY2ZlZDY3ODExNWU5OTQ3OTg4MDkwYjhlY2M2OGVmYTNkZCAxMDA2NDQKLS0tIGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRXcml0ZUJhcnJpZXIuaAorKysgYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaml0L0pJVFdyaXRlQmFycmllci5oCkBAIC02OCw2ICs2OCwxMCBAQCBw
dWJsaWM6CiAgICAgICAgIHJldHVybiBtX2xvY2F0aW9uOwogICAgIH0KICAgICAKKyAgICB2b2lk
IGNsZWFyKCkgeyBjbGVhcigwKTsgfQorICAgIHZvaWQgY2xlYXJUb01hcmtlZFN0cnVjdHVyZSgp
IHsgY2xlYXIocmVpbnRlcnByZXRfY2FzdDx2b2lkKj4oLTEpKTsgfQorICAgIHZvaWQgY2xlYXJM
b2NhdGlvbigpIHsgbV9sb2NhdGlvbiA9IENvZGVMb2NhdGlvbkRhdGFMYWJlbFB0cigpOyB9CisK
IHByb3RlY3RlZDoKICAgICBKSVRXcml0ZUJhcnJpZXJCYXNlKCkKICAgICB7CkBAIC05NCw2ICs5
OCwxNCBAQCBwcm90ZWN0ZWQ6CiAgICAgfQogCiBwcml2YXRlOgorICAgIHZvaWQgY2xlYXIodm9p
ZCogY2xlYXJlZFZhbHVlKQorICAgIHsKKyAgICAgICAgaWYgKCFtX2xvY2F0aW9uKQorICAgICAg
ICAgICAgcmV0dXJuOworICAgICAgICBpZiAobV9sb2NhdGlvbi5leGVjdXRhYmxlQWRkcmVzcygp
ICE9IEpJVFdyaXRlQmFycmllckZsYWcpCisgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6cmVw
YXRjaFBvaW50ZXIobV9sb2NhdGlvbiwgY2xlYXJlZFZhbHVlKTsKKyAgICB9CisKICAgICBDb2Rl
TG9jYXRpb25EYXRhTGFiZWxQdHIgbV9sb2NhdGlvbjsKIH07CiAKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9qc2MuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2pzYy5jcHAK
aW5kZXggNmVmOGUxODU2NDJkYzdiOWU3YzkyZWE0NmZlMTE0YTcyMjY5YTRlZC4uMTU5NGVhOTk3
Y2E2NGU4YWVkNmIwNGEyNzcwNWYwODVmNTBjMjNlMCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2pzYy5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2pzYy5jcHAKQEAg
LTc0LDYgKzc0LDcgQEAgc3RhdGljIGJvb2wgZmlsbEJ1ZmZlcldpdGhDb250ZW50c09mRmlsZShj
b25zdCBVU3RyaW5nJiBmaWxlTmFtZSwgVmVjdG9yPGNoYXI+Jgogc3RhdGljIEVuY29kZWRKU1Zh
bHVlIEpTQ19IT1NUX0NBTEwgZnVuY3Rpb25QcmludChFeGVjU3RhdGUqKTsKIHN0YXRpYyBFbmNv
ZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGZ1bmN0aW9uRGVidWcoRXhlY1N0YXRlKik7CiBzdGF0
aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBmdW5jdGlvbkdDKEV4ZWNTdGF0ZSopOwor
c3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZnVuY3Rpb25SZWxlYXNlRXhlY3V0
YWJsZU1lbW9yeShFeGVjU3RhdGUqKTsKIHN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9D
QUxMIGZ1bmN0aW9uVmVyc2lvbihFeGVjU3RhdGUqKTsKIHN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBK
U0NfSE9TVF9DQUxMIGZ1bmN0aW9uUnVuKEV4ZWNTdGF0ZSopOwogc3RhdGljIEVuY29kZWRKU1Zh
bHVlIEpTQ19IT1NUX0NBTEwgZnVuY3Rpb25Mb2FkKEV4ZWNTdGF0ZSopOwpAQCAtMTU0LDYgKzE1
NSw3IEBAIEdsb2JhbE9iamVjdDo6R2xvYmFsT2JqZWN0KEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0
YSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIGNvbnN0CiAgICAgcHV0RGlyZWN0RnVuY3Rpb24oZ2xv
YmFsRXhlYygpLCBuZXcgKGdsb2JhbEV4ZWMoKSkgSlNGdW5jdGlvbihnbG9iYWxFeGVjKCksIHRo
aXMsIGZ1bmN0aW9uU3RydWN0dXJlKCksIDEsIElkZW50aWZpZXIoZ2xvYmFsRXhlYygpLCAicHJp
bnQiKSwgZnVuY3Rpb25QcmludCkpOwogICAgIHB1dERpcmVjdEZ1bmN0aW9uKGdsb2JhbEV4ZWMo
KSwgbmV3IChnbG9iYWxFeGVjKCkpIEpTRnVuY3Rpb24oZ2xvYmFsRXhlYygpLCB0aGlzLCBmdW5j
dGlvblN0cnVjdHVyZSgpLCAwLCBJZGVudGlmaWVyKGdsb2JhbEV4ZWMoKSwgInF1aXQiKSwgZnVu
Y3Rpb25RdWl0KSk7CiAgICAgcHV0RGlyZWN0RnVuY3Rpb24oZ2xvYmFsRXhlYygpLCBuZXcgKGds
b2JhbEV4ZWMoKSkgSlNGdW5jdGlvbihnbG9iYWxFeGVjKCksIHRoaXMsIGZ1bmN0aW9uU3RydWN0
dXJlKCksIDAsIElkZW50aWZpZXIoZ2xvYmFsRXhlYygpLCAiZ2MiKSwgZnVuY3Rpb25HQykpOwor
ICAgIHB1dERpcmVjdEZ1bmN0aW9uKGdsb2JhbEV4ZWMoKSwgbmV3IChnbG9iYWxFeGVjKCkpIEpT
RnVuY3Rpb24oZ2xvYmFsRXhlYygpLCB0aGlzLCBmdW5jdGlvblN0cnVjdHVyZSgpLCAwLCBJZGVu
dGlmaWVyKGdsb2JhbEV4ZWMoKSwgInJlbGVhc2VFeGVjdXRhYmxlTWVtb3J5IiksIGZ1bmN0aW9u
UmVsZWFzZUV4ZWN1dGFibGVNZW1vcnkpKTsKICAgICBwdXREaXJlY3RGdW5jdGlvbihnbG9iYWxF
eGVjKCksIG5ldyAoZ2xvYmFsRXhlYygpKSBKU0Z1bmN0aW9uKGdsb2JhbEV4ZWMoKSwgdGhpcywg
ZnVuY3Rpb25TdHJ1Y3R1cmUoKSwgMSwgSWRlbnRpZmllcihnbG9iYWxFeGVjKCksICJ2ZXJzaW9u
IiksIGZ1bmN0aW9uVmVyc2lvbikpOwogICAgIHB1dERpcmVjdEZ1bmN0aW9uKGdsb2JhbEV4ZWMo
KSwgbmV3IChnbG9iYWxFeGVjKCkpIEpTRnVuY3Rpb24oZ2xvYmFsRXhlYygpLCB0aGlzLCBmdW5j
dGlvblN0cnVjdHVyZSgpLCAxLCBJZGVudGlmaWVyKGdsb2JhbEV4ZWMoKSwgInJ1biIpLCBmdW5j
dGlvblJ1bikpOwogICAgIHB1dERpcmVjdEZ1bmN0aW9uKGdsb2JhbEV4ZWMoKSwgbmV3IChnbG9i
YWxFeGVjKCkpIEpTRnVuY3Rpb24oZ2xvYmFsRXhlYygpLCB0aGlzLCBmdW5jdGlvblN0cnVjdHVy
ZSgpLCAxLCBJZGVudGlmaWVyKGdsb2JhbEV4ZWMoKSwgImxvYWQiKSwgZnVuY3Rpb25Mb2FkKSk7
CkBAIC0xOTgsNiArMjAwLDEzIEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZnVuY3Rp
b25HQyhFeGVjU3RhdGUqIGV4ZWMpCiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVm
aW5lZCgpKTsKIH0KIAorRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBmdW5jdGlvblJlbGVh
c2VFeGVjdXRhYmxlTWVtb3J5KEV4ZWNTdGF0ZSogZXhlYykKK3sKKyAgICBKU0xvY2sgbG9jayhT
aWxlbmNlQXNzZXJ0aW9uc09ubHkpOworICAgIGV4ZWMtPmdsb2JhbERhdGEoKS5yZWxlYXNlRXhl
Y3V0YWJsZU1lbW9yeSgpOworICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQo
KSk7Cit9CisKIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZnVuY3Rpb25WZXJzaW9uKEV4
ZWNTdGF0ZSopCiB7CiAgICAgLy8gV2UgbmVlZCB0aGlzIGZ1bmN0aW9uIGZvciBjb21wYXRpYmls
aXR5IHdpdGggdGhlIE1vemlsbGEgSlMgdGVzdHMgYnV0IGZvciBub3cKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0V4ZWN1dGFibGUuY3BwIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvRXhlY3V0YWJsZS5jcHAKaW5kZXggNmNkZThiMTY5YzA4NjFiMjY0
Njk2ODA0YjZiMGM4NDMwZjgyZmQ3YS4uNjk0ZjNlZTEzZjI2NjQzN2U0OGM4MTVhNWI5OTJiYmVk
MTcwNzIyYSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRXhlY3V0
YWJsZS5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRXhlY3V0YWJsZS5j
cHAKQEAgLTY0LDYgKzY0LDggQEAgTmF0aXZlRXhlY3V0YWJsZTo6fk5hdGl2ZUV4ZWN1dGFibGUo
KQogewogfQogCitjb25zdCBDbGFzc0luZm8gU2NyaXB0RXhlY3V0YWJsZTo6c19pbmZvID0geyAi
U2NyaXB0RXhlY3V0YWJsZSIsICZFeGVjdXRhYmxlQmFzZTo6c19pbmZvLCAwLCAwIH07CisKIGNv
bnN0IENsYXNzSW5mbyBFdmFsRXhlY3V0YWJsZTo6c19pbmZvID0geyAiRXZhbEV4ZWN1dGFibGUi
LCAmU2NyaXB0RXhlY3V0YWJsZTo6c19pbmZvLCAwLCAwIH07CiAKIEV2YWxFeGVjdXRhYmxlOjpF
dmFsRXhlY3V0YWJsZShFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IFNvdXJjZUNvZGUmIHNvdXJjZSwg
Ym9vbCBpblN0cmljdENvbnRleHQpCkBAIC0xNjksNiArMTcxLDEyIEBAIHZvaWQgRXZhbEV4ZWN1
dGFibGU6OnZpc2l0Q2hpbGRyZW4oU2xvdFZpc2l0b3ImIHZpc2l0b3IpCiAgICAgICAgIG1fZXZh
bENvZGVCbG9jay0+dmlzaXRBZ2dyZWdhdGUodmlzaXRvcik7CiB9CiAKK3ZvaWQgRXZhbEV4ZWN1
dGFibGU6OnVubGlua0NhbGxzKCkKK3sKKyAgICBpZiAobV9ldmFsQ29kZUJsb2NrKQorICAgICAg
ICBtX2V2YWxDb2RlQmxvY2stPnVubGlua0NhbGxzKCk7Cit9CisKIEpTT2JqZWN0KiBQcm9ncmFt
RXhlY3V0YWJsZTo6Y2hlY2tTeW50YXgoRXhlY1N0YXRlKiBleGVjKQogewogICAgIEpTT2JqZWN0
KiBleGNlcHRpb24gPSAwOwpAQCAtMjI2LDYgKzIzNCwxMiBAQCBKU09iamVjdCogUHJvZ3JhbUV4
ZWN1dGFibGU6OmNvbXBpbGVJbnRlcm5hbChFeGVjU3RhdGUqIGV4ZWMsIFNjb3BlQ2hhaW5Ob2Rl
KiBzYwogICAgIHJldHVybiAwOwogfQogCit2b2lkIFByb2dyYW1FeGVjdXRhYmxlOjp1bmxpbmtD
YWxscygpCit7CisgICAgaWYgKG1fcHJvZ3JhbUNvZGVCbG9jaykKKyAgICAgICAgbV9wcm9ncmFt
Q29kZUJsb2NrLT51bmxpbmtDYWxscygpOworfQorCiAjaWYgRU5BQkxFKEpJVCkKIHN0YXRpYyBi
b29sIHRyeURGR0NvbXBpbGUoSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhLCBDb2RlQmxvY2sqIGNv
ZGVCbG9jaywgSklUQ29kZSYgaml0Q29kZSwgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyJiBqaXRDb2Rl
V2l0aEFyaXR5Q2hlY2spCiB7CkBAIC0zODIsNyArMzk2LDExIEBAIHZvaWQgRnVuY3Rpb25FeGVj
dXRhYmxlOjp2aXNpdENoaWxkcmVuKFNsb3RWaXNpdG9yJiB2aXNpdG9yKQogCiB2b2lkIEZ1bmN0
aW9uRXhlY3V0YWJsZTo6ZGlzY2FyZENvZGUoKQogeworICAgIGlmIChtX2NvZGVCbG9ja0ZvckNh
bGwpCisgICAgICAgIG1fY29kZUJsb2NrRm9yQ2FsbC0+aW52YWxpZGF0ZUV2YWxDYWNoZSgpOwog
ICAgIG1fY29kZUJsb2NrRm9yQ2FsbC5jbGVhcigpOworICAgIGlmIChtX2NvZGVCbG9ja0ZvckNv
bnN0cnVjdCkKKyAgICAgICAgbV9jb2RlQmxvY2tGb3JDb25zdHJ1Y3QtPmludmFsaWRhdGVFdmFs
Q2FjaGUoKTsKICAgICBtX2NvZGVCbG9ja0ZvckNvbnN0cnVjdC5jbGVhcigpOwogICAgIG1fbnVt
UGFyYW1ldGVyc0ZvckNhbGwgPSBOVU1fUEFSQU1FVEVSU19OT1RfQ09NUElMRUQ7CiAgICAgbV9u
dW1QYXJhbWV0ZXJzRm9yQ29uc3RydWN0ID0gTlVNX1BBUkFNRVRFUlNfTk9UX0NPTVBJTEVEOwpA
QCAtMzkyLDYgKzQxMCwxNCBAQCB2b2lkIEZ1bmN0aW9uRXhlY3V0YWJsZTo6ZGlzY2FyZENvZGUo
KQogI2VuZGlmCiB9CiAKK3ZvaWQgRnVuY3Rpb25FeGVjdXRhYmxlOjp1bmxpbmtDYWxscygpCit7
CisgICAgaWYgKG1fY29kZUJsb2NrRm9yQ2FsbCkKKyAgICAgICAgbV9jb2RlQmxvY2tGb3JDYWxs
LT51bmxpbmtDYWxscygpOworICAgIGlmIChtX2NvZGVCbG9ja0ZvckNvbnN0cnVjdCkKKyAgICAg
ICAgbV9jb2RlQmxvY2tGb3JDb25zdHJ1Y3QtPnVubGlua0NhbGxzKCk7Cit9CisKIEZ1bmN0aW9u
RXhlY3V0YWJsZSogRnVuY3Rpb25FeGVjdXRhYmxlOjpmcm9tR2xvYmFsQ29kZShjb25zdCBJZGVu
dGlmaWVyJiBmdW5jdGlvbk5hbWUsIEV4ZWNTdGF0ZSogZXhlYywgRGVidWdnZXIqIGRlYnVnZ2Vy
LCBjb25zdCBTb3VyY2VDb2RlJiBzb3VyY2UsIEpTT2JqZWN0KiogZXhjZXB0aW9uKQogewogICAg
IEpTR2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0ID0gZXhlYy0+bGV4aWNhbEdsb2Jh
bE9iamVjdCgpOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRXhl
Y3V0YWJsZS5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRXhlY3V0YWJsZS5oCmlu
ZGV4IDcwZTVlNjEwNjkyMDEwNzQyMmQ2OWEyNDFhMTE2ZWNlOThjOTUxZGYuLmNmYTk5MDU1YmYy
MWM5ZWExOTRmYzU5M2YwNjUxZDI5YjQwZWMxMjkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0V4ZWN1dGFibGUuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9FeGVjdXRhYmxlLmgKQEAgLTIwMiw2ICsyMDIsOSBAQCBuYW1lc3BhY2UgSlNDIHsK
ICAgICAgICAgYm9vbCBuZWVkc0FjdGl2YXRpb24oKSBjb25zdCB7IHJldHVybiBtX2hhc0NhcHR1
cmVkVmFyaWFibGVzIHx8IG1fZmVhdHVyZXMgJiAoRXZhbEZlYXR1cmUgfCBXaXRoRmVhdHVyZSB8
IENhdGNoRmVhdHVyZSk7IH0KICAgICAgICAgYm9vbCBpc1N0cmljdE1vZGUoKSBjb25zdCB7IHJl
dHVybiBtX2ZlYXR1cmVzICYgU3RyaWN0TW9kZUZlYXR1cmU7IH0KIAorICAgICAgICB2aXJ0dWFs
IHZvaWQgdW5saW5rQ2FsbHMoKSA9IDA7CisgICAgICAgIAorICAgICAgICBzdGF0aWMgY29uc3Qg
Q2xhc3NJbmZvIHNfaW5mbzsKICAgICBwcm90ZWN0ZWQ6CiAgICAgICAgIHZvaWQgcmVjb3JkUGFy
c2UoQ29kZUZlYXR1cmVzIGZlYXR1cmVzLCBib29sIGhhc0NhcHR1cmVkVmFyaWFibGVzLCBpbnQg
Zmlyc3RMaW5lLCBpbnQgbGFzdExpbmUpCiAgICAgICAgIHsKQEAgLTI1OSw3ICsyNjIsNyBAQCBu
YW1lc3BhY2UgSlNDIHsKIAogICAgICAgICBKU09iamVjdCogY29tcGlsZUludGVybmFsKEV4ZWNT
dGF0ZSosIFNjb3BlQ2hhaW5Ob2RlKik7CiAgICAgICAgIHZpcnR1YWwgdm9pZCB2aXNpdENoaWxk
cmVuKFNsb3RWaXNpdG9yJik7Ci0KKyAgICAgICAgdm9pZCB1bmxpbmtDYWxscygpOwogICAgICAg
ICBPd25QdHI8RXZhbENvZGVCbG9jaz4gbV9ldmFsQ29kZUJsb2NrOwogICAgIH07CiAKQEAgLTMx
MCw2ICszMTMsNyBAQCBuYW1lc3BhY2UgSlNDIHsKIAogICAgICAgICBKU09iamVjdCogY29tcGls
ZUludGVybmFsKEV4ZWNTdGF0ZSosIFNjb3BlQ2hhaW5Ob2RlKik7CiAgICAgICAgIHZpcnR1YWwg
dm9pZCB2aXNpdENoaWxkcmVuKFNsb3RWaXNpdG9yJik7CisgICAgICAgIHZvaWQgdW5saW5rQ2Fs
bHMoKTsKIAogICAgICAgICBPd25QdHI8UHJvZ3JhbUNvZGVCbG9jaz4gbV9wcm9ncmFtQ29kZUJs
b2NrOwogICAgIH07CkBAIC00MTEsNiArNDE1LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAg
IHN0YXRpYyBjb25zdCB1bnNpZ25lZCBTdHJ1Y3R1cmVGbGFncyA9IE92ZXJyaWRlc1Zpc2l0Q2hp
bGRyZW4gfCBTY3JpcHRFeGVjdXRhYmxlOjpTdHJ1Y3R1cmVGbGFnczsKICAgICAgICAgdW5zaWdu
ZWQgbV9udW1DYXB0dXJlZFZhcmlhYmxlcyA6IDMxOwogICAgICAgICBib29sIG1fZm9yY2VVc2Vz
QXJndW1lbnRzIDogMTsKKyAgICAgICAgdm9pZCB1bmxpbmtDYWxscygpOwogCiAgICAgICAgIFJl
ZlB0cjxGdW5jdGlvblBhcmFtZXRlcnM+IG1fcGFyYW1ldGVyczsKICAgICAgICAgT3duUHRyPEZ1
bmN0aW9uQ29kZUJsb2NrPiBtX2NvZGVCbG9ja0ZvckNhbGw7CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2JhbERhdGEuY3BwIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxEYXRhLmNwcAppbmRleCBjYjQ1NWRkYjNlODIyYjE3NGYw
M2Q5NGY4MjE5NDA3YWQ3ZTc1MmY5Li4wODQ5MmUyZmU3NjM3NmFmNTY3YjQyOTBjN2M4Mjg2YmE5
ZjNiNGM1IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2Jh
bERhdGEuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsRGF0
YS5jcHAKQEAgLTQ1MCwxMSArNDUwLDUzIEBAIHZvaWQgSlNHbG9iYWxEYXRhOjpyZWNvbXBpbGVB
bGxKU0Z1bmN0aW9ucygpCiAgICAgaGVhcC5mb3JFYWNoQ2VsbDxSZWNvbXBpbGVyPigpOwogfQog
CitzdHJ1Y3QgU2FmZVJlY29tcGlsZXIgeworICAgIHR5cGVkZWYgYm9vbCBSZXR1cm5UeXBlOwor
ICAgIHN0YXRpYyBib29sIHJldHVyblZhbHVlKCkgeyByZXR1cm4gdHJ1ZTsgfQorCisgICAgSGFz
aFNldDxGdW5jdGlvbkV4ZWN1dGFibGUqPiBsaXZlRnVuY3Rpb25zOworICAgIHZvaWQgb3BlcmF0
b3IoKShKU0NlbGwqIGNlbGwpCisgICAgeworICAgICAgICBpZiAoIWNlbGwtPmluaGVyaXRzKCZG
dW5jdGlvbkV4ZWN1dGFibGU6OnNfaW5mbykpCisgICAgICAgICAgICByZXR1cm47CisgICAgICAg
IEZ1bmN0aW9uRXhlY3V0YWJsZSogZXhlY3V0YWJsZSA9IHN0YXRpY19jYXN0PEZ1bmN0aW9uRXhl
Y3V0YWJsZSo+KGNlbGwpOworICAgICAgICBpZiAobGl2ZUZ1bmN0aW9ucy5jb250YWlucyhleGVj
dXRhYmxlKSkKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgZXhlY3V0YWJsZS0+ZGlzY2Fy
ZENvZGUoKTsKKyAgICB9Cit9OworCiB2b2lkIEpTR2xvYmFsRGF0YTo6cmVsZWFzZUV4ZWN1dGFi
bGVNZW1vcnkoKQogewotICAgIGlmICghZHluYW1pY0dsb2JhbE9iamVjdCkKLSAgICAgICAgcmVj
b21waWxlQWxsSlNGdW5jdGlvbnMoKTsKKyAgICBpZiAoZHluYW1pY0dsb2JhbE9iamVjdCkgewor
ICAgICAgICBTYWZlUmVjb21waWxlciByZWNvbXBpbGVyOworICAgICAgICBIYXNoU2V0PEpTQ2Vs
bCo+IHJvb3RzOworICAgICAgICBoZWFwLmdldENvbnNlcnZhdGl2ZVJvb3RzKHJvb3RzKTsKKyAg
ICAgICAgSGFzaFNldDxKU0NlbGwqPjo6aXRlcmF0b3IgZW5kID0gcm9vdHMuZW5kKCk7CisgICAg
ICAgIGZvciAoSGFzaFNldDxKU0NlbGwqPjo6aXRlcmF0b3IgcHRyID0gcm9vdHMuYmVnaW4oKTsg
cHRyICE9IGVuZDsgKytwdHIpIHsKKyAgICAgICAgICAgIFNjcmlwdEV4ZWN1dGFibGUqIGV4ZWN1
dGFibGUgPSAwOworICAgICAgICAgICAgSlNDZWxsKiBjZWxsID0gKnB0cjsKKyAgICAgICAgICAg
IC8vIEdhdGhlcmluZyByb290cyBzZSByZXNldCBpdCB0byBhdm9pZCBiYWRuZXNzCisgICAgICAg
ICAgICBoZWFwLnNldE1hcmtlZChjZWxsKTsKKyAgICAgICAgICAgIGlmIChjZWxsLT5pbmhlcml0
cygmU2NyaXB0RXhlY3V0YWJsZTo6c19pbmZvKSkKKyAgICAgICAgICAgICAgICBleGVjdXRhYmxl
ID0gc3RhdGljX2Nhc3Q8U2NyaXB0RXhlY3V0YWJsZSo+KCpwdHIpOworICAgICAgICAgICAgZWxz
ZSBpZiAoY2VsbC0+aW5oZXJpdHMoJkpTRnVuY3Rpb246OnNfaW5mbykpIHsKKyAgICAgICAgICAg
ICAgICBKU0Z1bmN0aW9uKiBmdW5jdGlvbiA9IGFzRnVuY3Rpb24oKnB0cik7CisgICAgICAgICAg
ICAgICAgaWYgKGZ1bmN0aW9uLT5pc0hvc3RGdW5jdGlvbigpKQorICAgICAgICAgICAgICAgICAg
ICBjb250aW51ZTsKKyAgICAgICAgICAgICAgICBleGVjdXRhYmxlID0gZnVuY3Rpb24tPmpzRXhl
Y3V0YWJsZSgpOworICAgICAgICAgICAgfSBlbHNlCisgICAgICAgICAgICAgICAgY29udGludWU7
CisgICAgICAgICAgICBBU1NFUlQoZXhlY3V0YWJsZS0+aW5oZXJpdHMoJlNjcmlwdEV4ZWN1dGFi
bGU6OnNfaW5mbykpOworICAgICAgICAgICAgZXhlY3V0YWJsZS0+dW5saW5rQ2FsbHMoKTsKKyAg
ICAgICAgICAgIGlmIChleGVjdXRhYmxlLT5pbmhlcml0cygmRnVuY3Rpb25FeGVjdXRhYmxlOjpz
X2luZm8pKQorICAgICAgICAgICAgICAgIHJlY29tcGlsZXIubGl2ZUZ1bmN0aW9ucy5hZGQoc3Rh
dGljX2Nhc3Q8RnVuY3Rpb25FeGVjdXRhYmxlKj4oZXhlY3V0YWJsZSkpOworICAgICAgICAgICAg
ICAgIAorICAgICAgICB9CisgICAgICAgIGhlYXAuZm9yRWFjaENlbGw8U2FmZVJlY29tcGlsZXI+
KHJlY29tcGlsZXIpOworICAgIH0KICAgICBtX3JlZ0V4cENhY2hlLT5pbnZhbGlkYXRlQ29kZSgp
OworICAgIGhlYXAuY29sbGVjdEFsbEdhcmJhZ2UoKTsKIH0KICAgICAKIHZvaWQgcmVsZWFzZUV4
ZWN1dGFibGVNZW1vcnkoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhKQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>98820</attachid>
            <date>2011-06-27 17:20:32 -0700</date>
            <delta_ts>2011-06-27 18:15:27 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-63485-20110627172031.patch</filename>
            <type>text/plain</type>
            <size>21311</size>
            <attacher name="Oliver Hunt">oliver</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogODk2NDEKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9DaGFuZ2VMb2cgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nCmluZGV4IDRk
Njg2MWMwZDFjOTQwMzAxMTI2ZGNjMWZkMzkzYzI4MzY3ZGE3ZDEuLjJhMDViZTcyZTg0NWEzYTcw
ZDFmZWQ3OWJhNzdjYjAyZTg3MTdmYzcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwpAQCAtMSwz
ICsxLDUyIEBACisyMDExLTA2LTI3ICBPbGl2ZXIgSHVudCAgPG9saXZlckBhcHBsZS5jb20+CisK
KyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgU3VwcG9ydCB0
aHJvd2luZyBhd2F5IG5vbi1ydW5uaW5nIGNvZGUgZXZlbiB3aGlsZSBvdGhlciBjb2RlIGlzIHJ1
bm5pbmcKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTYz
NDg1CisKKyAgICAgICAgQWRkIGEgZnVuY3Rpb24gdG8gQ29kZUJsb2NrIHRvIHN1cHBvcnQgdW5s
aW5raW5nIGRpcmVjdCBsaW5rZWQgY2FsbHNpdGVzLAorICAgICAgICBhbmQgdGhlbiB3aXRoIHRo
YXQgaW4gcGxhY2UgYWRkIGxvZ2ljIHRvIGRpc2NhcmQgY29kZSBmcm9tIGFueSBmdW5jdGlvbgor
ICAgICAgICB0aGF0IGlzIG5vdCBjdXJyZW50bHkgb24gdGhlIHN0YWNrLgorCisgICAgICAgIFRo
ZSB1bmxpbmtpbmcgY29tcGxldGVseSByZXZlcnRzIGFueSBvcHRpbWl6ZWQgY2FsbCBzaXRlcywg
c3VjaCB0aGF0IHRoZXkKKyAgICAgICAgbWF5IGJlIHJlbGlua2VkIGFnYWluIGluIGZ1dHVyZS4K
KworICAgICAgICAqIEphdmFTY3JpcHRDb3JlLmV4cDoKKyAgICAgICAgKiBieXRlY29kZS9Db2Rl
QmxvY2suY3BwOgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OnVubGlua0NhbGxzKToKKyAgICAg
ICAgKEpTQzo6Q29kZUJsb2NrOjpjbGVhckV2YWxDYWNoZSk6CisgICAgICAgICogYnl0ZWNvZGUv
Q29kZUJsb2NrLmg6CisgICAgICAgIChKU0M6OkNhbGxMaW5rSW5mbzo6Q2FsbExpbmtJbmZvKToK
KyAgICAgICAgKEpTQzo6Q2FsbExpbmtJbmZvOjp1bmxpbmspOgorICAgICAgICAqIGJ5dGVjb2Rl
L0V2YWxDb2RlQ2FjaGUuaDoKKyAgICAgICAgKEpTQzo6RXZhbENvZGVDYWNoZTo6Y2xlYXIpOgor
ICAgICAgICAqIGhlYXAvSGVhcC5jcHA6CisgICAgICAgIChKU0M6OkhlYXA6OmdldENvbnNlcnZh
dGl2ZVN0YWNrUm9vdHMpOgorICAgICAgICAqIGhlYXAvSGVhcC5oOgorICAgICAgICAqIGppdC9K
SVQuY3BwOgorICAgICAgICAoSlNDOjpKSVQ6OnByaXZhdGVDb21waWxlKToKKyAgICAgICAgKiBq
aXQvSklULmg6CisgICAgICAgICogaml0L0pJVENhbGwuY3BwOgorICAgICAgICAoSlNDOjpKSVQ6
OmNvbXBpbGVPcENhbGwpOgorICAgICAgICAqIGppdC9KSVRXcml0ZUJhcnJpZXIuaDoKKyAgICAg
ICAgKEpTQzo6SklUV3JpdGVCYXJyaWVyQmFzZTo6Y2xlYXIpOgorICAgICAgICAoSlNDOjpKSVRX
cml0ZUJhcnJpZXJCYXNlOjpjbGVhclRvTWFya2VkU3RydWN0dXJlKToKKyAgICAgICAgKEpTQzo6
SklUV3JpdGVCYXJyaWVyQmFzZTo6Y2xlYXJMb2NhdGlvbik6CisgICAgICAgICoganNjLmNwcDoK
KyAgICAgICAgKEdsb2JhbE9iamVjdDo6R2xvYmFsT2JqZWN0KToKKyAgICAgICAgKGZ1bmN0aW9u
UmVsZWFzZUV4ZWN1dGFibGVNZW1vcnkpOgorICAgICAgICAqIHJ1bnRpbWUvRXhlY3V0YWJsZS5j
cHA6CisgICAgICAgIChKU0M6OkV2YWxFeGVjdXRhYmxlOjp1bmxpbmtDYWxscyk6CisgICAgICAg
IChKU0M6OlByb2dyYW1FeGVjdXRhYmxlOjp1bmxpbmtDYWxscyk6CisgICAgICAgIChKU0M6OkZ1
bmN0aW9uRXhlY3V0YWJsZTo6ZGlzY2FyZENvZGUpOgorICAgICAgICAoSlNDOjpGdW5jdGlvbkV4
ZWN1dGFibGU6OnVubGlua0NhbGxzKToKKyAgICAgICAgKiBydW50aW1lL0V4ZWN1dGFibGUuaDoK
KyAgICAgICAgKiBydW50aW1lL0pTR2xvYmFsRGF0YS5jcHA6CisgICAgICAgIChKU0M6OlNhZmVS
ZWNvbXBpbGVyOjpyZXR1cm5WYWx1ZSk6CisgICAgICAgIChKU0M6OlNhZmVSZWNvbXBpbGVyOjpv
cGVyYXRvcigpKToKKyAgICAgICAgKEpTQzo6SlNHbG9iYWxEYXRhOjpyZWxlYXNlRXhlY3V0YWJs
ZU1lbW9yeSk6CisKIDIwMTEtMDYtMjMgIE9saXZlciBIdW50ICA8b2xpdmVyQGFwcGxlLmNvbT4K
IAogICAgICAgICBGaXggUXQgYWdhaW4uCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvSmF2YVNjcmlwdENvcmUuZXhwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRD
b3JlLmV4cAppbmRleCBlNDZkMDA1MDVlNzA1YWVkNDI1M2I1NjM1Y2EyZTYyOGVlMzQ0ZWMyLi5m
MjUxMjI2NzNhOTBhNzhkMmQ1YzI0NWU2ZjRiMjUwYzI5ZTA4YzA5IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUuZXhwCisrKyBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9KYXZhU2NyaXB0Q29yZS5leHAKQEAgLTEzMyw2ICsxMzMsNyBAQCBfX1pOM0pTQzEy
SlNHbG9iYWxEYXRhMTRyZXNldERhdGVDYWNoZUV2CiBfX1pOM0pTQzEySlNHbG9iYWxEYXRhMTRz
aGFyZWRJbnN0YW5jZUV2CiBfX1pOM0pTQzEySlNHbG9iYWxEYXRhMTVkdW1wUmVnRXhwVHJhY2VF
dgogX19aTjNKU0MxMkpTR2xvYmFsRGF0YTIyY2xlYXJCdWlsdGluU3RydWN0dXJlc0V2CitfX1pO
M0pTQzEySlNHbG9iYWxEYXRhMjNyZWxlYXNlRXhlY3V0YWJsZU1lbW9yeUV2CiBfX1pOM0pTQzEy
SlNHbG9iYWxEYXRhNmNyZWF0ZUVOU18xNVRocmVhZFN0YWNrVHlwZUUKIF9fWk4zSlNDMTJKU0ds
b2JhbERhdGFEMUV2CiBfX1pOM0pTQzEyUmVnRXhwT2JqZWN0NnNfaW5mb0UKZGlmZiAtLWdpdCBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suY3BwIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5jcHAKaW5kZXggMjI0NzI0OWIzZWE0MTJm
NjJkZGViNjExNTQzNzlkYjljNGIwNmI4Mi4uOTZkZTRmOGRlYzA2NTUwZGYwZjkwMzFjMzI1OGI1
OTFjYmQ2MzMxNSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0Nv
ZGVCbG9jay5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9j
ay5jcHAKQEAgLTM4LDYgKzM4LDcgQEAKICNpbmNsdWRlICJKU0Z1bmN0aW9uLmgiCiAjaW5jbHVk
ZSAiSlNTdGF0aWNTY29wZU9iamVjdC5oIgogI2luY2x1ZGUgIkpTVmFsdWUuaCIKKyNpbmNsdWRl
ICJSZXBhdGNoQnVmZmVyLmgiCiAjaW5jbHVkZSAiVVN0cmluZ0NvbmNhdGVuYXRlLmgiCiAjaW5j
bHVkZSA8c3RkaW8uaD4KICNpbmNsdWRlIDx3dGYvU3RyaW5nRXh0cmFzLmg+CkBAIC0xNjc2LDUg
KzE2NzcsMjcgQEAgdm9pZCBDb2RlQmxvY2s6OmNyZWF0ZUFjdGl2YXRpb24oQ2FsbEZyYW1lKiBj
YWxsRnJhbWUpCiAgICAgY2FsbEZyYW1lLT51bmNoZWNrZWRSKGFjdGl2YXRpb25SZWdpc3Rlcigp
KSA9IEpTVmFsdWUoYWN0aXZhdGlvbik7CiAgICAgY2FsbEZyYW1lLT5zZXRTY29wZUNoYWluKGNh
bGxGcmFtZS0+c2NvcGVDaGFpbigpLT5wdXNoKGFjdGl2YXRpb24pKTsKIH0KKyAgICAKKyNpZiBF
TkFCTEUoSklUKQordm9pZCBDb2RlQmxvY2s6OnVubGlua0NhbGxzKCkKK3sKKyAgICBpZiAoISht
X2NhbGxMaW5rSW5mb3Muc2l6ZSgpIHx8IG1fbWV0aG9kQ2FsbExpbmtJbmZvcy5zaXplKCkpKQor
ICAgICAgICByZXR1cm47CisgICAgUmVwYXRjaEJ1ZmZlciByZXBhdGNoQnVmZmVyKHRoaXMpOwor
ICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbV9jYWxsTGlua0luZm9zLnNpemUoKTsgaSsrKSB7
CisgICAgICAgIGlmICghbV9jYWxsTGlua0luZm9zW2ldLmlzTGlua2VkKCkpCisgICAgICAgICAg
ICBjb250aW51ZTsKKyAgICAgICAgcmVwYXRjaEJ1ZmZlci5yZWxpbmsobV9jYWxsTGlua0luZm9z
W2ldLmNhbGxSZXR1cm5Mb2NhdGlvbiwgbV9jYWxsTGlua0luZm9zW2ldLmlzQ2FsbCA/IG1fZ2xv
YmFsRGF0YS0+aml0U3R1YnMtPmN0aVZpcnR1YWxDYWxsTGluaygpIDogbV9nbG9iYWxEYXRhLT5q
aXRTdHVicy0+Y3RpVmlydHVhbENvbnN0cnVjdExpbmsoKSk7CisgICAgICAgIG1fY2FsbExpbmtJ
bmZvc1tpXS51bmxpbmsoKTsKKyAgICB9Cit9CisjZW5kaWYKKwordm9pZCBDb2RlQmxvY2s6OmNs
ZWFyRXZhbENhY2hlKCkKK3sKKyAgICBpZiAoIW1fcmFyZURhdGEpCisgICAgICAgIHJldHVybjsK
KyAgICBtX3JhcmVEYXRhLT5tX2V2YWxDb2RlQ2FjaGUuY2xlYXIoKTsKK30KIAogfSAvLyBuYW1l
c3BhY2UgSlNDCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29k
ZUJsb2NrLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmgKaW5k
ZXggOGJmYTMyMzgwMTQxNmUzZmU1YTdjMWY4NTI1MjhiNWI1NjIyOWFhOC4uZDNiMmZmNzA3NTA4
NTQ5Y2ExMjk0Y2UzZTUxNDFmN2VhMmI3NDc1NCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
eXRlY29kZS9Db2RlQmxvY2suaApAQCAtOTgsNiArOTgsNyBAQCBuYW1lc3BhY2UgSlNDIHsKICAg
ICBzdHJ1Y3QgQ2FsbExpbmtJbmZvIHsKICAgICAgICAgQ2FsbExpbmtJbmZvKCkKICAgICAgICAg
ICAgIDogaGFzU2VlblNob3VsZFJlcGF0Y2goZmFsc2UpCisgICAgICAgICAgICAsIGlzQ2FsbChm
YWxzZSkKICAgICAgICAgewogICAgICAgICB9CiAKQEAgLTEwNSw5ICsxMDYsMTUgQEAgbmFtZXNw
YWNlIEpTQyB7CiAgICAgICAgIENvZGVMb2NhdGlvbkRhdGFMYWJlbFB0ciBob3RQYXRoQmVnaW47
CiAgICAgICAgIENvZGVMb2NhdGlvbk5lYXJDYWxsIGhvdFBhdGhPdGhlcjsKICAgICAgICAgSklU
V3JpdGVCYXJyaWVyPEpTRnVuY3Rpb24+IGNhbGxlZTsKLSAgICAgICAgYm9vbCBoYXNTZWVuU2hv
dWxkUmVwYXRjaDsKKyAgICAgICAgYm9vbCBoYXNTZWVuU2hvdWxkUmVwYXRjaCA6IDE7CisgICAg
ICAgIGJvb2wgaXNDYWxsIDogMTsKIAogICAgICAgICBib29sIGlzTGlua2VkKCkgeyByZXR1cm4g
Y2FsbGVlOyB9CisgICAgICAgIHZvaWQgdW5saW5rKCkKKyAgICAgICAgeworICAgICAgICAgICAg
aGFzU2VlblNob3VsZFJlcGF0Y2ggPSBmYWxzZTsKKyAgICAgICAgICAgIGNhbGxlZS5jbGVhcigp
OworICAgICAgICB9CiAKICAgICAgICAgYm9vbCBzZWVuT25jZSgpCiAgICAgICAgIHsKQEAgLTI3
MCw3ICsyNzcsMTAgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgICAgICAgICAgcmV0dXJuIDE7
CiAgICAgICAgICAgICByZXR1cm4gYmluYXJ5U2VhcmNoPENhbGxSZXR1cm5PZmZzZXRUb0J5dGVj
b2RlT2Zmc2V0LCB1bnNpZ25lZCwgZ2V0Q2FsbFJldHVybk9mZnNldD4oY2FsbEluZGljZXMuYmVn
aW4oKSwgY2FsbEluZGljZXMuc2l6ZSgpLCBnZXRKSVRDb2RlKCkub2Zmc2V0T2YocmV0dXJuQWRk
cmVzcy52YWx1ZSgpKSktPmJ5dGVjb2RlT2Zmc2V0OwogICAgICAgICB9CisKKyAgICAgICAgdm9p
ZCB1bmxpbmtDYWxscygpOwogI2VuZGlmCisKICNpZiBFTkFCTEUoSU5URVJQUkVURVIpCiAgICAg
ICAgIHVuc2lnbmVkIGJ5dGVjb2RlT2Zmc2V0KEluc3RydWN0aW9uKiByZXR1cm5BZGRyZXNzKQog
ICAgICAgICB7CkBAIC0zNDAsNiArMzUwLDggQEAgbmFtZXNwYWNlIEpTQyB7CiAKICAgICAgICAg
dm9pZCBjcmVhdGVBY3RpdmF0aW9uKENhbGxGcmFtZSopOwogCisgICAgICAgIHZvaWQgY2xlYXJF
dmFsQ2FjaGUoKTsKKwogI2lmIEVOQUJMRShJTlRFUlBSRVRFUikKICAgICAgICAgdm9pZCBhZGRQ
cm9wZXJ0eUFjY2Vzc0luc3RydWN0aW9uKHVuc2lnbmVkIHByb3BlcnR5QWNjZXNzSW5zdHJ1Y3Rp
b24pCiAgICAgICAgIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29k
ZS9FdmFsQ29kZUNhY2hlLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvRXZhbENv
ZGVDYWNoZS5oCmluZGV4IDA5MWEyZDIyYzAyNmZkN2Y2YzNhOGQwZDlkZTk5OThkNWJkOTQ0ZWEu
LjIyNDg5YjBmYjg2YmY3M2YzYmEwNWM1YWU1N2ZmNjJmYWJkNTA4MGIgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9FdmFsQ29kZUNhY2hlLmgKKysrIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0V2YWxDb2RlQ2FjaGUuaApAQCAtNjksNiArNjksMTEg
QEAgbmFtZXNwYWNlIEpTQyB7CiAKICAgICAgICAgdm9pZCB2aXNpdEFnZ3JlZ2F0ZShTbG90Vmlz
aXRvciYpOwogCisgICAgICAgIHZvaWQgY2xlYXIoKQorICAgICAgICB7CisgICAgICAgICAgICBt
X2NhY2hlTWFwLmNsZWFyKCk7CisgICAgICAgIH0KKwogICAgIHByaXZhdGU6CiAgICAgICAgIHN0
YXRpYyBjb25zdCB1bnNpZ25lZCBtYXhDYWNoZWFibGVTb3VyY2VMZW5ndGggPSAyNTY7CiAgICAg
ICAgIHN0YXRpYyBjb25zdCBpbnQgbWF4Q2FjaGVFbnRyaWVzID0gNjQ7CmRpZmYgLS1naXQgYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9oZWFwL0hlYXAuY3BwCmluZGV4IDAwZjMxNzU0ZmI2NjkxZmI2ZmEyNjAxNWFlNzZkN2JhZTU0
MjMzNjUuLjJhOWI3YmI3YWQ2YTVhZWM2ODY1Mjk1MGZmMTc1MzM1MTVkZjhkMTcgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXAuY3BwCisrKyBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9oZWFwL0hlYXAuY3BwCkBAIC0zOTUsNiArMzk1LDM0IEBAIGlubGluZSBSZWdp
c3RlckZpbGUmIEhlYXA6OnJlZ2lzdGVyRmlsZSgpCiAgICAgcmV0dXJuIG1fZ2xvYmFsRGF0YS0+
aW50ZXJwcmV0ZXItPnJlZ2lzdGVyRmlsZSgpOwogfQogCit2b2lkIEhlYXA6OmdldENvbnNlcnZh
dGl2ZVN0YWNrUm9vdHMoSGFzaFNldDxKU0NlbGwqPiYgcm9vdHMpCit7CisgICAgQVNTRVJUKGlz
VmFsaWRUaHJlYWRTdGF0ZShtX2dsb2JhbERhdGEpKTsKKyAgICBpZiAobV9vcGVyYXRpb25JblBy
b2dyZXNzICE9IE5vT3BlcmF0aW9uKQorICAgICAgICBDUkFTSCgpOworICAgIG1fb3BlcmF0aW9u
SW5Qcm9ncmVzcyA9IENvbGxlY3Rpb247CisgICAgQ29uc2VydmF0aXZlUm9vdHMgbWFjaGluZVRo
cmVhZFJvb3RzKCZtX2Jsb2Nrcyk7CisgICAgdm9pZCogZHVtbXk7CisgICAgbV9tYWNoaW5lVGhy
ZWFkcy5nYXRoZXJDb25zZXJ2YXRpdmVSb290cyhtYWNoaW5lVGhyZWFkUm9vdHMsICZkdW1teSk7
CisgICAgCisgICAgQ29uc2VydmF0aXZlUm9vdHMgcmVnaXN0ZXJGaWxlUm9vdHMoJm1fYmxvY2tz
KTsKKyAgICByZWdpc3RlckZpbGUoKS5nYXRoZXJDb25zZXJ2YXRpdmVSb290cyhyZWdpc3RlckZp
bGVSb290cyk7CisKKyAgICBzaXplX3QgbWFjaGluZVJvb3RDb3VudCA9IG1hY2hpbmVUaHJlYWRS
b290cy5zaXplKCk7CisgICAgSlNDZWxsKiogbWFjaGluZVJvb3RzID0gbWFjaGluZVRocmVhZFJv
b3RzLnJvb3RzKCk7CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtYWNoaW5lUm9vdENvdW50
OyBpKyspIHsKKyAgICAgICAgc2V0TWFya2VkKG1hY2hpbmVSb290c1tpXSk7CisgICAgICAgIHJv
b3RzLmFkZChtYWNoaW5lUm9vdHNbaV0pOworICAgIH0KKyAgICBzaXplX3QgcmVnaXN0ZXJGaWxl
Um9vdENvdW50ID0gcmVnaXN0ZXJGaWxlUm9vdHMuc2l6ZSgpOworICAgIEpTQ2VsbCoqIHJlZ2lz
dGVyUm9vdHMgPSByZWdpc3RlckZpbGVSb290cy5yb290cygpOworICAgIGZvciAoc2l6ZV90IGkg
PSAwOyBpIDwgcmVnaXN0ZXJGaWxlUm9vdENvdW50OyBpKyspIHsKKyAgICAgICAgc2V0TWFya2Vk
KHJlZ2lzdGVyUm9vdHNbaV0pOworICAgICAgICByb290cy5hZGQocmVnaXN0ZXJSb290c1tpXSk7
CisgICAgfQorICAgIG1fb3BlcmF0aW9uSW5Qcm9ncmVzcyA9IE5vT3BlcmF0aW9uOworfQorCiB2
b2lkIEhlYXA6Om1hcmtSb290cygpCiB7CiAgICAgQVNTRVJUKGlzVmFsaWRUaHJlYWRTdGF0ZSht
X2dsb2JhbERhdGEpKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hl
YXAuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXAuaAppbmRleCAyNzU4YjUxZTA2
NmFiNmIzY2E5YjA4MjFmOGEyZjgzOWUyYTU5NGJkLi4zOWVkNDdlOTA3ZTM0MjY0YzM3ZDllMGE1
ZmU0YjI5Nzg3MGY0NGI2IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9I
ZWFwLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcC5oCkBAIC0xMTQsNiAr
MTE0LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIEhhbmRsZVNsb3QgYWxsb2NhdGVMb2Nh
bEhhbmRsZSgpIHsgcmV0dXJuIG1faGFuZGxlU3RhY2sucHVzaCgpOyB9CiAKICAgICAgICAgSGFu
ZGxlU3RhY2sqIGhhbmRsZVN0YWNrKCkgeyByZXR1cm4gJm1faGFuZGxlU3RhY2s7IH0KKyAgICAg
ICAgdm9pZCBnZXRDb25zZXJ2YXRpdmVTdGFja1Jvb3RzKEhhc2hTZXQ8SlNDZWxsKj4mIHJvb3Rz
KTsKIAogICAgIHByaXZhdGU6CiAgICAgICAgIHR5cGVkZWYgSGFzaFNldDxNYXJrZWRCbG9jayo+
OjppdGVyYXRvciBCbG9ja0l0ZXJhdG9yOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL2ppdC9KSVQuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQuY3BwCmluZGV4
IGE4YWQ5NWI0MTc3YjVmZDZiY2I3NWZiNmUzNTViMTIzOGU3MDdmMjYuLjFhNjczZDA1MGM3MzM0
MTYwYThlNzA2MDljMjI5MjUwMmMxYjA3MWMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9qaXQvSklULmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5jcHAK
QEAgLTU3Niw2ICs1NzYsNyBAQCBKSVRDb2RlIEpJVDo6cHJpdmF0ZUNvbXBpbGUoQ29kZVB0ciog
ZnVuY3Rpb25FbnRyeUFyaXR5Q2hlY2spCiAgICAgfQogICAgIGZvciAodW5zaWduZWQgaSA9IDA7
IGkgPCBtX2NvZGVCbG9jay0+bnVtYmVyT2ZDYWxsTGlua0luZm9zKCk7ICsraSkgewogICAgICAg
ICBDYWxsTGlua0luZm8mIGluZm8gPSBtX2NvZGVCbG9jay0+Y2FsbExpbmtJbmZvKGkpOworICAg
ICAgICBpbmZvLmlzQ2FsbCA9IG1fY2FsbFN0cnVjdHVyZVN0dWJDb21waWxhdGlvbkluZm9baV0u
aXNDYWxsOwogICAgICAgICBpbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbiA9IHBhdGNoQnVmZmVyLmxv
Y2F0aW9uT2ZOZWFyQ2FsbChtX2NhbGxTdHJ1Y3R1cmVTdHViQ29tcGlsYXRpb25JbmZvW2ldLmNh
bGxSZXR1cm5Mb2NhdGlvbik7CiAgICAgICAgIGluZm8uaG90UGF0aEJlZ2luID0gcGF0Y2hCdWZm
ZXIubG9jYXRpb25PZihtX2NhbGxTdHJ1Y3R1cmVTdHViQ29tcGlsYXRpb25JbmZvW2ldLmhvdFBh
dGhCZWdpbik7CiAgICAgICAgIGluZm8uaG90UGF0aE90aGVyID0gcGF0Y2hCdWZmZXIubG9jYXRp
b25PZk5lYXJDYWxsKG1fY2FsbFN0cnVjdHVyZVN0dWJDb21waWxhdGlvbkluZm9baV0uaG90UGF0
aE90aGVyKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmggYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5oCmluZGV4IGEyYTE3NTFjMzk2YWEzODA4NGYx
MGE1N2Y0NmQxYjI4ZGMzNWU2NmEuLjcxOGFiMjJhYmJkYTQxYTE0ZmZiODgyZDA1MzgwOGQ5Y2Ni
NTQ2MTUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmgKKysrIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQuaApAQCAtMTQ5LDYgKzE0OSw3IEBAIG5hbWVz
cGFjZSBKU0MgewogICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6RGF0YUxhYmVsUHRyIGhvdFBhdGhC
ZWdpbjsKICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkNhbGwgaG90UGF0aE90aGVyOwogICAgICAg
ICBNYWNyb0Fzc2VtYmxlcjo6Q2FsbCBjYWxsUmV0dXJuTG9jYXRpb247CisgICAgICAgIGJvb2wg
aXNDYWxsOwogICAgIH07CiAKICAgICBzdHJ1Y3QgTWV0aG9kQ2FsbENvbXBpbGF0aW9uSW5mbyB7
CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVENhbGwuY3BwIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRDYWxsLmNwcAppbmRleCBiOTY1NjVjOThkMTc3NDYx
MzBkNTNmOGE2ZmRiNjNmZjdjMDZjNjVkLi5lOGEwNjczNWQwM2U4MTgzNDJhMTI3MGQ5OTVjM2Vl
MTk3N2E1MGQ5IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVENhbGwu
Y3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUQ2FsbC5jcHAKQEAgLTEzMyw2
ICsxMzMsNyBAQCB2b2lkIEpJVDo6Y29tcGlsZU9wQ2FsbChPcGNvZGVJRCBvcGNvZGVJRCwgSW5z
dHJ1Y3Rpb24qIGluc3RydWN0aW9uLCB1bnNpZ25lZCBjYQogICAgIGFkZFNsb3dDYXNlKGp1bXBU
b1Nsb3cpOwogICAgIEFTU0VSVF9KSVRfT0ZGU0VUKGRpZmZlcmVuY2VCZXR3ZWVuKGFkZHJlc3NP
ZkxpbmtlZEZ1bmN0aW9uQ2hlY2ssIGp1bXBUb1Nsb3cpLCBwYXRjaE9mZnNldE9wQ2FsbENvbXBh
cmVUb0p1bXApOwogICAgIG1fY2FsbFN0cnVjdHVyZVN0dWJDb21waWxhdGlvbkluZm9bY2FsbExp
bmtJbmZvSW5kZXhdLmhvdFBhdGhCZWdpbiA9IGFkZHJlc3NPZkxpbmtlZEZ1bmN0aW9uQ2hlY2s7
CisgICAgbV9jYWxsU3RydWN0dXJlU3R1YkNvbXBpbGF0aW9uSW5mb1tjYWxsTGlua0luZm9JbmRl
eF0uaXNDYWxsID0gb3Bjb2RlSUQgIT0gb3BfY29uc3RydWN0OwogCiAgICAgLy8gVGhlIGZvbGxv
d2luZyBpcyB0aGUgZmFzdCBjYXNlLCBvbmx5IHVzZWQgd2hhbiBhIGNhbGxlZSBjYW4gYmUgbGlu
a2VkLgogCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFdyaXRlQmFy
cmllci5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRXcml0ZUJhcnJpZXIuaAppbmRl
eCBkYmU5MGMyYzRmZTliZmUyNDEzYWM1MTc1YjU1MGVjZThlMTIyNzQ0Li4xMGUwNzEwMDE4NmVl
ZGRhY2YzNGEzNjAzZGE2OTE4ZWM4YTQyODgxIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvaml0L0pJVFdyaXRlQmFycmllci5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9q
aXQvSklUV3JpdGVCYXJyaWVyLmgKQEAgLTY4LDYgKzY4LDggQEAgcHVibGljOgogICAgICAgICBy
ZXR1cm4gbV9sb2NhdGlvbjsKICAgICB9CiAgICAgCisgICAgdm9pZCBjbGVhcigpIHsgY2xlYXIo
MCk7IH0KKwogcHJvdGVjdGVkOgogICAgIEpJVFdyaXRlQmFycmllckJhc2UoKQogICAgIHsKQEAg
LTk0LDYgKzk2LDE0IEBAIHByb3RlY3RlZDoKICAgICB9CiAKIHByaXZhdGU6CisgICAgdm9pZCBj
bGVhcih2b2lkKiBjbGVhcmVkVmFsdWUpCisgICAgeworICAgICAgICBpZiAoIW1fbG9jYXRpb24p
CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIGlmIChtX2xvY2F0aW9uLmV4ZWN1dGFibGVB
ZGRyZXNzKCkgIT0gSklUV3JpdGVCYXJyaWVyRmxhZykKKyAgICAgICAgICAgIE1hY3JvQXNzZW1i
bGVyOjpyZXBhdGNoUG9pbnRlcihtX2xvY2F0aW9uLCBjbGVhcmVkVmFsdWUpOworICAgIH0KKwog
ICAgIENvZGVMb2NhdGlvbkRhdGFMYWJlbFB0ciBtX2xvY2F0aW9uOwogfTsKIApkaWZmIC0tZ2l0
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2pzYy5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
anNjLmNwcAppbmRleCA2ZWY4ZTE4NTY0MmRjN2I5ZTdjOTJlYTQ2ZmUxMTRhNzIyNjlhNGVkLi5j
NWY4MTI4YzQ1M2I0M2U1ZjEwNjc2MjAxYzhlYjJlMDNjOWMzZmIzIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvanNjLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvanNj
LmNwcApAQCAtNzQsNiArNzQsNyBAQCBzdGF0aWMgYm9vbCBmaWxsQnVmZmVyV2l0aENvbnRlbnRz
T2ZGaWxlKGNvbnN0IFVTdHJpbmcmIGZpbGVOYW1lLCBWZWN0b3I8Y2hhcj4mCiBzdGF0aWMgRW5j
b2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBmdW5jdGlvblByaW50KEV4ZWNTdGF0ZSopOwogc3Rh
dGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZnVuY3Rpb25EZWJ1ZyhFeGVjU3RhdGUq
KTsKIHN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGZ1bmN0aW9uR0MoRXhlY1N0
YXRlKik7CitzdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBmdW5jdGlvblJlbGVh
c2VFeGVjdXRhYmxlTWVtb3J5KEV4ZWNTdGF0ZSopOwogc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpT
Q19IT1NUX0NBTEwgZnVuY3Rpb25WZXJzaW9uKEV4ZWNTdGF0ZSopOwogc3RhdGljIEVuY29kZWRK
U1ZhbHVlIEpTQ19IT1NUX0NBTEwgZnVuY3Rpb25SdW4oRXhlY1N0YXRlKik7CiBzdGF0aWMgRW5j
b2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBmdW5jdGlvbkxvYWQoRXhlY1N0YXRlKik7CkBAIC0x
NTQsNiArMTU1LDkgQEAgR2xvYmFsT2JqZWN0OjpHbG9iYWxPYmplY3QoSlNHbG9iYWxEYXRhJiBn
bG9iYWxEYXRhLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgY29uc3QKICAgICBwdXREaXJlY3RGdW5j
dGlvbihnbG9iYWxFeGVjKCksIG5ldyAoZ2xvYmFsRXhlYygpKSBKU0Z1bmN0aW9uKGdsb2JhbEV4
ZWMoKSwgdGhpcywgZnVuY3Rpb25TdHJ1Y3R1cmUoKSwgMSwgSWRlbnRpZmllcihnbG9iYWxFeGVj
KCksICJwcmludCIpLCBmdW5jdGlvblByaW50KSk7CiAgICAgcHV0RGlyZWN0RnVuY3Rpb24oZ2xv
YmFsRXhlYygpLCBuZXcgKGdsb2JhbEV4ZWMoKSkgSlNGdW5jdGlvbihnbG9iYWxFeGVjKCksIHRo
aXMsIGZ1bmN0aW9uU3RydWN0dXJlKCksIDAsIElkZW50aWZpZXIoZ2xvYmFsRXhlYygpLCAicXVp
dCIpLCBmdW5jdGlvblF1aXQpKTsKICAgICBwdXREaXJlY3RGdW5jdGlvbihnbG9iYWxFeGVjKCks
IG5ldyAoZ2xvYmFsRXhlYygpKSBKU0Z1bmN0aW9uKGdsb2JhbEV4ZWMoKSwgdGhpcywgZnVuY3Rp
b25TdHJ1Y3R1cmUoKSwgMCwgSWRlbnRpZmllcihnbG9iYWxFeGVjKCksICJnYyIpLCBmdW5jdGlv
bkdDKSk7CisjaWZuZGVmIE5ERUJVRworICAgIHB1dERpcmVjdEZ1bmN0aW9uKGdsb2JhbEV4ZWMo
KSwgbmV3IChnbG9iYWxFeGVjKCkpIEpTRnVuY3Rpb24oZ2xvYmFsRXhlYygpLCB0aGlzLCBmdW5j
dGlvblN0cnVjdHVyZSgpLCAwLCBJZGVudGlmaWVyKGdsb2JhbEV4ZWMoKSwgInJlbGVhc2VFeGVj
dXRhYmxlTWVtb3J5IiksIGZ1bmN0aW9uUmVsZWFzZUV4ZWN1dGFibGVNZW1vcnkpKTsKKyNlbmRp
ZgogICAgIHB1dERpcmVjdEZ1bmN0aW9uKGdsb2JhbEV4ZWMoKSwgbmV3IChnbG9iYWxFeGVjKCkp
IEpTRnVuY3Rpb24oZ2xvYmFsRXhlYygpLCB0aGlzLCBmdW5jdGlvblN0cnVjdHVyZSgpLCAxLCBJ
ZGVudGlmaWVyKGdsb2JhbEV4ZWMoKSwgInZlcnNpb24iKSwgZnVuY3Rpb25WZXJzaW9uKSk7CiAg
ICAgcHV0RGlyZWN0RnVuY3Rpb24oZ2xvYmFsRXhlYygpLCBuZXcgKGdsb2JhbEV4ZWMoKSkgSlNG
dW5jdGlvbihnbG9iYWxFeGVjKCksIHRoaXMsIGZ1bmN0aW9uU3RydWN0dXJlKCksIDEsIElkZW50
aWZpZXIoZ2xvYmFsRXhlYygpLCAicnVuIiksIGZ1bmN0aW9uUnVuKSk7CiAgICAgcHV0RGlyZWN0
RnVuY3Rpb24oZ2xvYmFsRXhlYygpLCBuZXcgKGdsb2JhbEV4ZWMoKSkgSlNGdW5jdGlvbihnbG9i
YWxFeGVjKCksIHRoaXMsIGZ1bmN0aW9uU3RydWN0dXJlKCksIDEsIElkZW50aWZpZXIoZ2xvYmFs
RXhlYygpLCAibG9hZCIpLCBmdW5jdGlvbkxvYWQpKTsKQEAgLTE5OCw2ICsyMDIsMTUgQEAgRW5j
b2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBmdW5jdGlvbkdDKEV4ZWNTdGF0ZSogZXhlYykKICAg
ICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogfQogCisjaWZuZGVmIE5E
RUJVRworRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBmdW5jdGlvblJlbGVhc2VFeGVjdXRh
YmxlTWVtb3J5KEV4ZWNTdGF0ZSogZXhlYykKK3sKKyAgICBKU0xvY2sgbG9jayhTaWxlbmNlQXNz
ZXJ0aW9uc09ubHkpOworICAgIGV4ZWMtPmdsb2JhbERhdGEoKS5yZWxlYXNlRXhlY3V0YWJsZU1l
bW9yeSgpOworICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7Cit9Cisj
ZW5kaWYKKwogRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBmdW5jdGlvblZlcnNpb24oRXhl
Y1N0YXRlKikKIHsKICAgICAvLyBXZSBuZWVkIHRoaXMgZnVuY3Rpb24gZm9yIGNvbXBhdGliaWxp
dHkgd2l0aCB0aGUgTW96aWxsYSBKUyB0ZXN0cyBidXQgZm9yIG5vdwpkaWZmIC0tZ2l0IGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRXhlY3V0YWJsZS5jcHAgYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9FeGVjdXRhYmxlLmNwcAppbmRleCA2Y2RlOGIxNjljMDg2MWIyNjQ2
OTY4MDRiNmIwYzg0MzBmODJmZDdhLi44MDc3YTVjNjNmZjk3YWY1OGQxNTMzZmQyY2Y4ZjJjYmJl
M2E2ZWNiIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9FeGVjdXRh
YmxlLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9FeGVjdXRhYmxlLmNw
cApAQCAtNjQsNiArNjQsOCBAQCBOYXRpdmVFeGVjdXRhYmxlOjp+TmF0aXZlRXhlY3V0YWJsZSgp
CiB7CiB9CiAKK2NvbnN0IENsYXNzSW5mbyBTY3JpcHRFeGVjdXRhYmxlOjpzX2luZm8gPSB7ICJT
Y3JpcHRFeGVjdXRhYmxlIiwgJkV4ZWN1dGFibGVCYXNlOjpzX2luZm8sIDAsIDAgfTsKKwogY29u
c3QgQ2xhc3NJbmZvIEV2YWxFeGVjdXRhYmxlOjpzX2luZm8gPSB7ICJFdmFsRXhlY3V0YWJsZSIs
ICZTY3JpcHRFeGVjdXRhYmxlOjpzX2luZm8sIDAsIDAgfTsKIAogRXZhbEV4ZWN1dGFibGU6OkV2
YWxFeGVjdXRhYmxlKEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgU291cmNlQ29kZSYgc291cmNlLCBi
b29sIGluU3RyaWN0Q29udGV4dCkKQEAgLTE2OSw2ICsxNzEsMTYgQEAgdm9pZCBFdmFsRXhlY3V0
YWJsZTo6dmlzaXRDaGlsZHJlbihTbG90VmlzaXRvciYgdmlzaXRvcikKICAgICAgICAgbV9ldmFs
Q29kZUJsb2NrLT52aXNpdEFnZ3JlZ2F0ZSh2aXNpdG9yKTsKIH0KIAordm9pZCBFdmFsRXhlY3V0
YWJsZTo6dW5saW5rQ2FsbHMoKQoreworI2lmIEVOQUJMRShKSVQpCisgICAgaWYgKCFtX2ppdENv
ZGVGb3JDYWxsKQorICAgICAgICByZXR1cm47CisgICAgQVNTRVJUKG1fZXZhbENvZGVCbG9jayk7
CisgICAgbV9ldmFsQ29kZUJsb2NrLT51bmxpbmtDYWxscygpOworI2VuZGlmCit9CisKIEpTT2Jq
ZWN0KiBQcm9ncmFtRXhlY3V0YWJsZTo6Y2hlY2tTeW50YXgoRXhlY1N0YXRlKiBleGVjKQogewog
ICAgIEpTT2JqZWN0KiBleGNlcHRpb24gPSAwOwpAQCAtMjI2LDYgKzIzOCwxNiBAQCBKU09iamVj
dCogUHJvZ3JhbUV4ZWN1dGFibGU6OmNvbXBpbGVJbnRlcm5hbChFeGVjU3RhdGUqIGV4ZWMsIFNj
b3BlQ2hhaW5Ob2RlKiBzYwogICAgIHJldHVybiAwOwogfQogCit2b2lkIFByb2dyYW1FeGVjdXRh
YmxlOjp1bmxpbmtDYWxscygpCit7CisjaWYgRU5BQkxFKEpJVCkKKyAgICBpZiAoIW1faml0Q29k
ZUZvckNhbGwpCisgICAgICAgIHJldHVybjsKKyAgICBBU1NFUlQobV9wcm9ncmFtQ29kZUJsb2Nr
KTsKKyAgICBtX3Byb2dyYW1Db2RlQmxvY2stPnVubGlua0NhbGxzKCk7CisjZW5kaWYKK30KKwog
I2lmIEVOQUJMRShKSVQpCiBzdGF0aWMgYm9vbCB0cnlERkdDb21waWxlKEpTR2xvYmFsRGF0YSog
Z2xvYmFsRGF0YSwgQ29kZUJsb2NrKiBjb2RlQmxvY2ssIEpJVENvZGUmIGppdENvZGUsIE1hY3Jv
QXNzZW1ibGVyQ29kZVB0ciYgaml0Q29kZVdpdGhBcml0eUNoZWNrKQogewpAQCAtMzgyLDEzICs0
MDQsMzMgQEAgdm9pZCBGdW5jdGlvbkV4ZWN1dGFibGU6OnZpc2l0Q2hpbGRyZW4oU2xvdFZpc2l0
b3ImIHZpc2l0b3IpCiAKIHZvaWQgRnVuY3Rpb25FeGVjdXRhYmxlOjpkaXNjYXJkQ29kZSgpCiB7
CisgICAgaWYgKG1fY29kZUJsb2NrRm9yQ2FsbCkKKyAgICAgICAgbV9jb2RlQmxvY2tGb3JDYWxs
LT5jbGVhckV2YWxDYWNoZSgpOwogICAgIG1fY29kZUJsb2NrRm9yQ2FsbC5jbGVhcigpOworICAg
IGlmIChtX2NvZGVCbG9ja0ZvckNvbnN0cnVjdCkKKyAgICAgICAgbV9jb2RlQmxvY2tGb3JDb25z
dHJ1Y3QtPmNsZWFyRXZhbENhY2hlKCk7CiAgICAgbV9jb2RlQmxvY2tGb3JDb25zdHJ1Y3QuY2xl
YXIoKTsKICAgICBtX251bVBhcmFtZXRlcnNGb3JDYWxsID0gTlVNX1BBUkFNRVRFUlNfTk9UX0NP
TVBJTEVEOwogICAgIG1fbnVtUGFyYW1ldGVyc0ZvckNvbnN0cnVjdCA9IE5VTV9QQVJBTUVURVJT
X05PVF9DT01QSUxFRDsKICNpZiBFTkFCTEUoSklUKQogICAgIG1faml0Q29kZUZvckNhbGwgPSBK
SVRDb2RlKCk7CiAgICAgbV9qaXRDb2RlRm9yQ29uc3RydWN0ID0gSklUQ29kZSgpOworICAgIG1f
aml0Q29kZUZvckNhbGxXaXRoQXJpdHlDaGVjayA9IE1hY3JvQXNzZW1ibGVyQ29kZVB0cigpOwor
ICAgIG1faml0Q29kZUZvckNvbnN0cnVjdFdpdGhBcml0eUNoZWNrID0gTWFjcm9Bc3NlbWJsZXJD
b2RlUHRyKCk7CisjZW5kaWYKK30KKwordm9pZCBGdW5jdGlvbkV4ZWN1dGFibGU6OnVubGlua0Nh
bGxzKCkKK3sKKyNpZiBFTkFCTEUoSklUKQorICAgIGlmICghIW1faml0Q29kZUZvckNhbGwpIHsK
KyAgICAgICAgQVNTRVJUKG1fY29kZUJsb2NrRm9yQ2FsbCk7CisgICAgICAgIG1fY29kZUJsb2Nr
Rm9yQ2FsbC0+dW5saW5rQ2FsbHMoKTsKKyAgICB9CisgICAgaWYgKCEhbV9qaXRDb2RlRm9yQ29u
c3RydWN0KSB7CisgICAgICAgIEFTU0VSVChtX2NvZGVCbG9ja0ZvckNvbnN0cnVjdCk7CisgICAg
ICAgIG1fY29kZUJsb2NrRm9yQ29uc3RydWN0LT51bmxpbmtDYWxscygpOworICAgIH0KICNlbmRp
ZgogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9FeGVjdXRh
YmxlLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9FeGVjdXRhYmxlLmgKaW5kZXgg
NzBlNWU2MTA2OTIwMTA3NDIyZDY5YTI0MWExMTZlY2U5OGM5NTFkZi4uZTc5NWZiZmMzMTIzZTNm
NzJiMjVmN2FhMzIwODMyYjVkMmEyMjUyMCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvRXhlY3V0YWJsZS5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0V4ZWN1dGFibGUuaApAQCAtMjAyLDYgKzIwMiw5IEBAIG5hbWVzcGFjZSBKU0MgewogICAg
ICAgICBib29sIG5lZWRzQWN0aXZhdGlvbigpIGNvbnN0IHsgcmV0dXJuIG1faGFzQ2FwdHVyZWRW
YXJpYWJsZXMgfHwgbV9mZWF0dXJlcyAmIChFdmFsRmVhdHVyZSB8IFdpdGhGZWF0dXJlIHwgQ2F0
Y2hGZWF0dXJlKTsgfQogICAgICAgICBib29sIGlzU3RyaWN0TW9kZSgpIGNvbnN0IHsgcmV0dXJu
IG1fZmVhdHVyZXMgJiBTdHJpY3RNb2RlRmVhdHVyZTsgfQogCisgICAgICAgIHZpcnR1YWwgdm9p
ZCB1bmxpbmtDYWxscygpID0gMDsKKyAgICAgICAgCisgICAgICAgIHN0YXRpYyBjb25zdCBDbGFz
c0luZm8gc19pbmZvOwogICAgIHByb3RlY3RlZDoKICAgICAgICAgdm9pZCByZWNvcmRQYXJzZShD
b2RlRmVhdHVyZXMgZmVhdHVyZXMsIGJvb2wgaGFzQ2FwdHVyZWRWYXJpYWJsZXMsIGludCBmaXJz
dExpbmUsIGludCBsYXN0TGluZSkKICAgICAgICAgewpAQCAtMjU5LDYgKzI2Miw3IEBAIG5hbWVz
cGFjZSBKU0MgewogCiAgICAgICAgIEpTT2JqZWN0KiBjb21waWxlSW50ZXJuYWwoRXhlY1N0YXRl
KiwgU2NvcGVDaGFpbk5vZGUqKTsKICAgICAgICAgdmlydHVhbCB2b2lkIHZpc2l0Q2hpbGRyZW4o
U2xvdFZpc2l0b3ImKTsKKyAgICAgICAgdm9pZCB1bmxpbmtDYWxscygpOwogCiAgICAgICAgIE93
blB0cjxFdmFsQ29kZUJsb2NrPiBtX2V2YWxDb2RlQmxvY2s7CiAgICAgfTsKQEAgLTMxMCw2ICsz
MTQsNyBAQCBuYW1lc3BhY2UgSlNDIHsKIAogICAgICAgICBKU09iamVjdCogY29tcGlsZUludGVy
bmFsKEV4ZWNTdGF0ZSosIFNjb3BlQ2hhaW5Ob2RlKik7CiAgICAgICAgIHZpcnR1YWwgdm9pZCB2
aXNpdENoaWxkcmVuKFNsb3RWaXNpdG9yJik7CisgICAgICAgIHZvaWQgdW5saW5rQ2FsbHMoKTsK
IAogICAgICAgICBPd25QdHI8UHJvZ3JhbUNvZGVCbG9jaz4gbV9wcm9ncmFtQ29kZUJsb2NrOwog
ICAgIH07CkBAIC00MTEsNiArNDE2LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHN0YXRp
YyBjb25zdCB1bnNpZ25lZCBTdHJ1Y3R1cmVGbGFncyA9IE92ZXJyaWRlc1Zpc2l0Q2hpbGRyZW4g
fCBTY3JpcHRFeGVjdXRhYmxlOjpTdHJ1Y3R1cmVGbGFnczsKICAgICAgICAgdW5zaWduZWQgbV9u
dW1DYXB0dXJlZFZhcmlhYmxlcyA6IDMxOwogICAgICAgICBib29sIG1fZm9yY2VVc2VzQXJndW1l
bnRzIDogMTsKKyAgICAgICAgdm9pZCB1bmxpbmtDYWxscygpOwogCiAgICAgICAgIFJlZlB0cjxG
dW5jdGlvblBhcmFtZXRlcnM+IG1fcGFyYW1ldGVyczsKICAgICAgICAgT3duUHRyPEZ1bmN0aW9u
Q29kZUJsb2NrPiBtX2NvZGVCbG9ja0ZvckNhbGw7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9KU0dsb2JhbERhdGEuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvSlNHbG9iYWxEYXRhLmNwcAppbmRleCBjYjQ1NWRkYjNlODIyYjE3NGYwM2Q5NGY4
MjE5NDA3YWQ3ZTc1MmY5Li4wMGU4ZWM1YTM0YjhmMzMxZjZiZjBlZjVmNDY2MzkzZjVjMWQzZDEy
IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2JhbERhdGEu
Y3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsRGF0YS5jcHAK
QEAgLTQ1MCwxMSArNDUwLDQ4IEBAIHZvaWQgSlNHbG9iYWxEYXRhOjpyZWNvbXBpbGVBbGxKU0Z1
bmN0aW9ucygpCiAgICAgaGVhcC5mb3JFYWNoQ2VsbDxSZWNvbXBpbGVyPigpOwogfQogCitzdHJ1
Y3QgU3RhY2tQcmVzZXJ2aW5nUmVjb21waWxlciA6IHB1YmxpYyBNYXJrZWRCbG9jazo6Vm9pZEZ1
bmN0b3IgeworICAgIEhhc2hTZXQ8RnVuY3Rpb25FeGVjdXRhYmxlKj4gY3VycmVudGx5RXhlY3V0
aW5nRnVuY3Rpb25zOworICAgIHZvaWQgb3BlcmF0b3IoKShKU0NlbGwqIGNlbGwpCisgICAgewor
ICAgICAgICBpZiAoIWNlbGwtPmluaGVyaXRzKCZGdW5jdGlvbkV4ZWN1dGFibGU6OnNfaW5mbykp
CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIEZ1bmN0aW9uRXhlY3V0YWJsZSogZXhlY3V0
YWJsZSA9IHN0YXRpY19jYXN0PEZ1bmN0aW9uRXhlY3V0YWJsZSo+KGNlbGwpOworICAgICAgICBp
ZiAoY3VycmVudGx5RXhlY3V0aW5nRnVuY3Rpb25zLmNvbnRhaW5zKGV4ZWN1dGFibGUpKQorICAg
ICAgICAgICAgcmV0dXJuOworICAgICAgICBleGVjdXRhYmxlLT5kaXNjYXJkQ29kZSgpOworICAg
IH0KK307CisKIHZvaWQgSlNHbG9iYWxEYXRhOjpyZWxlYXNlRXhlY3V0YWJsZU1lbW9yeSgpCiB7
Ci0gICAgaWYgKCFkeW5hbWljR2xvYmFsT2JqZWN0KQotICAgICAgICByZWNvbXBpbGVBbGxKU0Z1
bmN0aW9ucygpOworICAgIGlmIChkeW5hbWljR2xvYmFsT2JqZWN0KSB7CisgICAgICAgIFN0YWNr
UHJlc2VydmluZ1JlY29tcGlsZXIgcmVjb21waWxlcjsKKyAgICAgICAgSGFzaFNldDxKU0NlbGwq
PiByb290czsKKyAgICAgICAgaGVhcC5nZXRDb25zZXJ2YXRpdmVTdGFja1Jvb3RzKHJvb3RzKTsK
KyAgICAgICAgSGFzaFNldDxKU0NlbGwqPjo6aXRlcmF0b3IgZW5kID0gcm9vdHMuZW5kKCk7Cisg
ICAgICAgIGZvciAoSGFzaFNldDxKU0NlbGwqPjo6aXRlcmF0b3IgcHRyID0gcm9vdHMuYmVnaW4o
KTsgcHRyICE9IGVuZDsgKytwdHIpIHsKKyAgICAgICAgICAgIFNjcmlwdEV4ZWN1dGFibGUqIGV4
ZWN1dGFibGUgPSAwOworICAgICAgICAgICAgSlNDZWxsKiBjZWxsID0gKnB0cjsKKyAgICAgICAg
ICAgIGlmIChjZWxsLT5pbmhlcml0cygmU2NyaXB0RXhlY3V0YWJsZTo6c19pbmZvKSkKKyAgICAg
ICAgICAgICAgICBleGVjdXRhYmxlID0gc3RhdGljX2Nhc3Q8U2NyaXB0RXhlY3V0YWJsZSo+KCpw
dHIpOworICAgICAgICAgICAgZWxzZSBpZiAoY2VsbC0+aW5oZXJpdHMoJkpTRnVuY3Rpb246OnNf
aW5mbykpIHsKKyAgICAgICAgICAgICAgICBKU0Z1bmN0aW9uKiBmdW5jdGlvbiA9IGFzRnVuY3Rp
b24oKnB0cik7CisgICAgICAgICAgICAgICAgaWYgKGZ1bmN0aW9uLT5pc0hvc3RGdW5jdGlvbigp
KQorICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgICAgICBleGVjdXRh
YmxlID0gZnVuY3Rpb24tPmpzRXhlY3V0YWJsZSgpOworICAgICAgICAgICAgfSBlbHNlCisgICAg
ICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICBBU1NFUlQoZXhlY3V0YWJsZS0+aW5o
ZXJpdHMoJlNjcmlwdEV4ZWN1dGFibGU6OnNfaW5mbykpOworICAgICAgICAgICAgZXhlY3V0YWJs
ZS0+dW5saW5rQ2FsbHMoKTsKKyAgICAgICAgICAgIGlmIChleGVjdXRhYmxlLT5pbmhlcml0cygm
RnVuY3Rpb25FeGVjdXRhYmxlOjpzX2luZm8pKQorICAgICAgICAgICAgICAgIHJlY29tcGlsZXIu
Y3VycmVudGx5RXhlY3V0aW5nRnVuY3Rpb25zLmFkZChzdGF0aWNfY2FzdDxGdW5jdGlvbkV4ZWN1
dGFibGUqPihleGVjdXRhYmxlKSk7CisgICAgICAgICAgICAgICAgCisgICAgICAgIH0KKyAgICAg
ICAgaGVhcC5mb3JFYWNoQ2VsbDxTdGFja1ByZXNlcnZpbmdSZWNvbXBpbGVyPihyZWNvbXBpbGVy
KTsKKyAgICB9CiAgICAgbV9yZWdFeHBDYWNoZS0+aW52YWxpZGF0ZUNvZGUoKTsKKyAgICBoZWFw
LmNvbGxlY3RBbGxHYXJiYWdlKCk7CiB9CiAgICAgCiB2b2lkIHJlbGVhc2VFeGVjdXRhYmxlTWVt
b3J5KEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL1JlZ0V4cC5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9SZWdFeHAuY3BwCmluZGV4IDcwYjVmYzg5MmRlYmQ4YWZmYjg5ZmRmOTVkYmE3ZGIyN2QyZDI0
M2EuLmE1NzhhNjgzY2U3M2VlYjI3MDZlOGM1ZTFkZjJkMDAxNjQ0NjZkNjUgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1JlZ0V4cC5jcHAKKysrIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvUmVnRXhwLmNwcApAQCAtMTk5LDYgKzE5OSw5IEBAIGludCBS
ZWdFeHA6Om1hdGNoKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgY29uc3QgVVN0cmluZyYgcywg
aW50IHN0YXJ0T2Zmc2V0LCBWCiAKIHZvaWQgUmVnRXhwOjppbnZhbGlkYXRlQ29kZSgpCiB7Cisg
ICAgaWYgKCFtX3JlcHJlc2VudGF0aW9uKQorICAgICAgICByZXR1cm47CisgICAgbV9zdGF0ZSA9
IE5vdENvbXBpbGVkOwogICAgIG1fcmVwcmVzZW50YXRpb24uY2xlYXIoKTsKIH0KIAo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>98836</attachid>
            <date>2011-06-27 18:15:30 -0700</date>
            <delta_ts>2011-06-27 18:17:31 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-63485-20110627181529.patch</filename>
            <type>text/plain</type>
            <size>21193</size>
            <attacher name="Oliver Hunt">oliver</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogODk4ODIKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9DaGFuZ2VMb2cgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nCmluZGV4IGM1
NzNhMmUyZjg3MjdkZjRiNzQ0ZWRmYTFlM2MzN2U5OGMxNDkxYmYuLmY0MDYxNzU5M2JhOWQ0MDE0
ODdhZWQ0NzJlNGI1YTlmNTA3MDE4NmQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwpAQCAtMSwz
ICsxLDUwIEBACisyMDExLTA2LTI3ICBPbGl2ZXIgSHVudCAgPG9saXZlckBhcHBsZS5jb20+CisK
KyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgU3VwcG9ydCB0
aHJvd2luZyBhd2F5IG5vbi1ydW5uaW5nIGNvZGUgZXZlbiB3aGlsZSBvdGhlciBjb2RlIGlzIHJ1
bm5pbmcKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTYz
NDg1CisKKyAgICAgICAgQWRkIGEgZnVuY3Rpb24gdG8gQ29kZUJsb2NrIHRvIHN1cHBvcnQgdW5s
aW5raW5nIGRpcmVjdCBsaW5rZWQgY2FsbHNpdGVzLAorICAgICAgICBhbmQgdGhlbiB3aXRoIHRo
YXQgaW4gcGxhY2UgYWRkIGxvZ2ljIHRvIGRpc2NhcmQgY29kZSBmcm9tIGFueSBmdW5jdGlvbgor
ICAgICAgICB0aGF0IGlzIG5vdCBjdXJyZW50bHkgb24gdGhlIHN0YWNrLgorCisgICAgICAgIFRo
ZSB1bmxpbmtpbmcgY29tcGxldGVseSByZXZlcnRzIGFueSBvcHRpbWl6ZWQgY2FsbCBzaXRlcywg
c3VjaCB0aGF0IHRoZXkKKyAgICAgICAgbWF5IGJlIHJlbGlua2VkIGFnYWluIGluIGZ1dHVyZS4K
KworICAgICAgICAqIEphdmFTY3JpcHRDb3JlLmV4cDoKKyAgICAgICAgKiBieXRlY29kZS9Db2Rl
QmxvY2suY3BwOgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OnVubGlua0NhbGxzKToKKyAgICAg
ICAgKEpTQzo6Q29kZUJsb2NrOjpjbGVhckV2YWxDYWNoZSk6CisgICAgICAgICogYnl0ZWNvZGUv
Q29kZUJsb2NrLmg6CisgICAgICAgIChKU0M6OkNhbGxMaW5rSW5mbzo6Q2FsbExpbmtJbmZvKToK
KyAgICAgICAgKEpTQzo6Q2FsbExpbmtJbmZvOjp1bmxpbmspOgorICAgICAgICAqIGJ5dGVjb2Rl
L0V2YWxDb2RlQ2FjaGUuaDoKKyAgICAgICAgKEpTQzo6RXZhbENvZGVDYWNoZTo6Y2xlYXIpOgor
ICAgICAgICAqIGhlYXAvSGVhcC5jcHA6CisgICAgICAgIChKU0M6OkhlYXA6OmdldENvbnNlcnZh
dGl2ZVJlZ2lzdGVyUm9vdHMpOgorICAgICAgICAqIGhlYXAvSGVhcC5oOgorICAgICAgICAqIGpp
dC9KSVQuY3BwOgorICAgICAgICAoSlNDOjpKSVQ6OnByaXZhdGVDb21waWxlKToKKyAgICAgICAg
KiBqaXQvSklULmg6CisgICAgICAgICogaml0L0pJVENhbGwuY3BwOgorICAgICAgICAoSlNDOjpK
SVQ6OmNvbXBpbGVPcENhbGwpOgorICAgICAgICAqIGppdC9KSVRXcml0ZUJhcnJpZXIuaDoKKyAg
ICAgICAgKEpTQzo6SklUV3JpdGVCYXJyaWVyQmFzZTo6Y2xlYXIpOgorICAgICAgICAqIGpzYy5j
cHA6CisgICAgICAgIChHbG9iYWxPYmplY3Q6Okdsb2JhbE9iamVjdCk6CisgICAgICAgIChmdW5j
dGlvblJlbGVhc2VFeGVjdXRhYmxlTWVtb3J5KToKKyAgICAgICAgKiBydW50aW1lL0V4ZWN1dGFi
bGUuY3BwOgorICAgICAgICAoSlNDOjpFdmFsRXhlY3V0YWJsZTo6dW5saW5rQ2FsbHMpOgorICAg
ICAgICAoSlNDOjpQcm9ncmFtRXhlY3V0YWJsZTo6dW5saW5rQ2FsbHMpOgorICAgICAgICAoSlND
OjpGdW5jdGlvbkV4ZWN1dGFibGU6OmRpc2NhcmRDb2RlKToKKyAgICAgICAgKEpTQzo6RnVuY3Rp
b25FeGVjdXRhYmxlOjp1bmxpbmtDYWxscyk6CisgICAgICAgICogcnVudGltZS9FeGVjdXRhYmxl
Lmg6CisgICAgICAgICogcnVudGltZS9KU0dsb2JhbERhdGEuY3BwOgorICAgICAgICAoSlNDOjpT
YWZlUmVjb21waWxlcjo6cmV0dXJuVmFsdWUpOgorICAgICAgICAoSlNDOjpTYWZlUmVjb21waWxl
cjo6b3BlcmF0b3IoKSk6CisgICAgICAgIChKU0M6OkpTR2xvYmFsRGF0YTo6cmVsZWFzZUV4ZWN1
dGFibGVNZW1vcnkpOgorCiAyMDExLTA2LTI3ICBHYXZpbiBCYXJyYWNsb3VnaCAgPGJhcnJhY2xv
dWdoQGFwcGxlLmNvbT4KIAogICAgICAgICBSZXZpZXdlZCBieSBPbGl2ZXIgSHVudC4KZGlmZiAt
LWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS5leHAgYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUuZXhwCmluZGV4IGU0NmQwMDUwNWU3MDVhZWQ0
MjUzYjU2MzVjYTJlNjI4ZWUzNDRlYzIuLmYyNTEyMjY3M2E5MGE3OGQyZDVjMjQ1ZTZmNGIyNTBj
MjllMDhjMDkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29y
ZS5leHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLmV4cApAQCAt
MTMzLDYgKzEzMyw3IEBAIF9fWk4zSlNDMTJKU0dsb2JhbERhdGExNHJlc2V0RGF0ZUNhY2hlRXYK
IF9fWk4zSlNDMTJKU0dsb2JhbERhdGExNHNoYXJlZEluc3RhbmNlRXYKIF9fWk4zSlNDMTJKU0ds
b2JhbERhdGExNWR1bXBSZWdFeHBUcmFjZUV2CiBfX1pOM0pTQzEySlNHbG9iYWxEYXRhMjJjbGVh
ckJ1aWx0aW5TdHJ1Y3R1cmVzRXYKK19fWk4zSlNDMTJKU0dsb2JhbERhdGEyM3JlbGVhc2VFeGVj
dXRhYmxlTWVtb3J5RXYKIF9fWk4zSlNDMTJKU0dsb2JhbERhdGE2Y3JlYXRlRU5TXzE1VGhyZWFk
U3RhY2tUeXBlRQogX19aTjNKU0MxMkpTR2xvYmFsRGF0YUQxRXYKIF9fWk4zSlNDMTJSZWdFeHBP
YmplY3Q2c19pbmZvRQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2Rl
L0NvZGVCbG9jay5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2Nr
LmNwcAppbmRleCAyMjQ3MjQ5YjNlYTQxMmY2MmRkZWI2MTE1NDM3OWRiOWM0YjA2YjgyLi45NmRl
NGY4ZGVjMDY1NTBkZjBmOTAzMWMzMjU4YjU5MWNiZDYzMzE1IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmNwcApAQCAtMzgsNiArMzgsNyBAQAogI2luY2x1
ZGUgIkpTRnVuY3Rpb24uaCIKICNpbmNsdWRlICJKU1N0YXRpY1Njb3BlT2JqZWN0LmgiCiAjaW5j
bHVkZSAiSlNWYWx1ZS5oIgorI2luY2x1ZGUgIlJlcGF0Y2hCdWZmZXIuaCIKICNpbmNsdWRlICJV
U3RyaW5nQ29uY2F0ZW5hdGUuaCIKICNpbmNsdWRlIDxzdGRpby5oPgogI2luY2x1ZGUgPHd0Zi9T
dHJpbmdFeHRyYXMuaD4KQEAgLTE2NzYsNSArMTY3NywyNyBAQCB2b2lkIENvZGVCbG9jazo6Y3Jl
YXRlQWN0aXZhdGlvbihDYWxsRnJhbWUqIGNhbGxGcmFtZSkKICAgICBjYWxsRnJhbWUtPnVuY2hl
Y2tlZFIoYWN0aXZhdGlvblJlZ2lzdGVyKCkpID0gSlNWYWx1ZShhY3RpdmF0aW9uKTsKICAgICBj
YWxsRnJhbWUtPnNldFNjb3BlQ2hhaW4oY2FsbEZyYW1lLT5zY29wZUNoYWluKCktPnB1c2goYWN0
aXZhdGlvbikpOwogfQorICAgIAorI2lmIEVOQUJMRShKSVQpCit2b2lkIENvZGVCbG9jazo6dW5s
aW5rQ2FsbHMoKQoreworICAgIGlmICghKG1fY2FsbExpbmtJbmZvcy5zaXplKCkgfHwgbV9tZXRo
b2RDYWxsTGlua0luZm9zLnNpemUoKSkpCisgICAgICAgIHJldHVybjsKKyAgICBSZXBhdGNoQnVm
ZmVyIHJlcGF0Y2hCdWZmZXIodGhpcyk7CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtX2Nh
bGxMaW5rSW5mb3Muc2l6ZSgpOyBpKyspIHsKKyAgICAgICAgaWYgKCFtX2NhbGxMaW5rSW5mb3Nb
aV0uaXNMaW5rZWQoKSkKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICByZXBhdGNoQnVm
ZmVyLnJlbGluayhtX2NhbGxMaW5rSW5mb3NbaV0uY2FsbFJldHVybkxvY2F0aW9uLCBtX2NhbGxM
aW5rSW5mb3NbaV0uaXNDYWxsID8gbV9nbG9iYWxEYXRhLT5qaXRTdHVicy0+Y3RpVmlydHVhbENh
bGxMaW5rKCkgOiBtX2dsb2JhbERhdGEtPmppdFN0dWJzLT5jdGlWaXJ0dWFsQ29uc3RydWN0TGlu
aygpKTsKKyAgICAgICAgbV9jYWxsTGlua0luZm9zW2ldLnVubGluaygpOworICAgIH0KK30KKyNl
bmRpZgorCit2b2lkIENvZGVCbG9jazo6Y2xlYXJFdmFsQ2FjaGUoKQoreworICAgIGlmICghbV9y
YXJlRGF0YSkKKyAgICAgICAgcmV0dXJuOworICAgIG1fcmFyZURhdGEtPm1fZXZhbENvZGVDYWNo
ZS5jbGVhcigpOworfQogCiB9IC8vIG5hbWVzcGFjZSBKU0MKZGlmZiAtLWdpdCBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ieXRlY29kZS9Db2RlQmxvY2suaAppbmRleCA4YmZhMzIzODAxNDE2ZTNmZTVhN2MxZjg1MjUy
OGI1YjU2MjI5YWE4Li5kM2IyZmY3MDc1MDg1NDljYTEyOTRjZTNlNTE0MWY3ZWEyYjc0NzU0IDEw
MDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmgKKysr
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5oCkBAIC05OCw2ICs5
OCw3IEBAIG5hbWVzcGFjZSBKU0MgewogICAgIHN0cnVjdCBDYWxsTGlua0luZm8gewogICAgICAg
ICBDYWxsTGlua0luZm8oKQogICAgICAgICAgICAgOiBoYXNTZWVuU2hvdWxkUmVwYXRjaChmYWxz
ZSkKKyAgICAgICAgICAgICwgaXNDYWxsKGZhbHNlKQogICAgICAgICB7CiAgICAgICAgIH0KIApA
QCAtMTA1LDkgKzEwNiwxNSBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgQ29kZUxvY2F0aW9u
RGF0YUxhYmVsUHRyIGhvdFBhdGhCZWdpbjsKICAgICAgICAgQ29kZUxvY2F0aW9uTmVhckNhbGwg
aG90UGF0aE90aGVyOwogICAgICAgICBKSVRXcml0ZUJhcnJpZXI8SlNGdW5jdGlvbj4gY2FsbGVl
OwotICAgICAgICBib29sIGhhc1NlZW5TaG91bGRSZXBhdGNoOworICAgICAgICBib29sIGhhc1Nl
ZW5TaG91bGRSZXBhdGNoIDogMTsKKyAgICAgICAgYm9vbCBpc0NhbGwgOiAxOwogCiAgICAgICAg
IGJvb2wgaXNMaW5rZWQoKSB7IHJldHVybiBjYWxsZWU7IH0KKyAgICAgICAgdm9pZCB1bmxpbmso
KQorICAgICAgICB7CisgICAgICAgICAgICBoYXNTZWVuU2hvdWxkUmVwYXRjaCA9IGZhbHNlOwor
ICAgICAgICAgICAgY2FsbGVlLmNsZWFyKCk7CisgICAgICAgIH0KIAogICAgICAgICBib29sIHNl
ZW5PbmNlKCkKICAgICAgICAgewpAQCAtMjcwLDcgKzI3NywxMCBAQCBuYW1lc3BhY2UgSlNDIHsK
ICAgICAgICAgICAgICAgICByZXR1cm4gMTsKICAgICAgICAgICAgIHJldHVybiBiaW5hcnlTZWFy
Y2g8Q2FsbFJldHVybk9mZnNldFRvQnl0ZWNvZGVPZmZzZXQsIHVuc2lnbmVkLCBnZXRDYWxsUmV0
dXJuT2Zmc2V0PihjYWxsSW5kaWNlcy5iZWdpbigpLCBjYWxsSW5kaWNlcy5zaXplKCksIGdldEpJ
VENvZGUoKS5vZmZzZXRPZihyZXR1cm5BZGRyZXNzLnZhbHVlKCkpKS0+Ynl0ZWNvZGVPZmZzZXQ7
CiAgICAgICAgIH0KKworICAgICAgICB2b2lkIHVubGlua0NhbGxzKCk7CiAjZW5kaWYKKwogI2lm
IEVOQUJMRShJTlRFUlBSRVRFUikKICAgICAgICAgdW5zaWduZWQgYnl0ZWNvZGVPZmZzZXQoSW5z
dHJ1Y3Rpb24qIHJldHVybkFkZHJlc3MpCiAgICAgICAgIHsKQEAgLTM0MCw2ICszNTAsOCBAQCBu
YW1lc3BhY2UgSlNDIHsKIAogICAgICAgICB2b2lkIGNyZWF0ZUFjdGl2YXRpb24oQ2FsbEZyYW1l
Kik7CiAKKyAgICAgICAgdm9pZCBjbGVhckV2YWxDYWNoZSgpOworCiAjaWYgRU5BQkxFKElOVEVS
UFJFVEVSKQogICAgICAgICB2b2lkIGFkZFByb3BlcnR5QWNjZXNzSW5zdHJ1Y3Rpb24odW5zaWdu
ZWQgcHJvcGVydHlBY2Nlc3NJbnN0cnVjdGlvbikKICAgICAgICAgewpkaWZmIC0tZ2l0IGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0V2YWxDb2RlQ2FjaGUuaCBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ieXRlY29kZS9FdmFsQ29kZUNhY2hlLmgKaW5kZXggMDkxYTJkMjJjMDI2ZmQ3
ZjZjM2E4ZDBkOWRlOTk5OGQ1YmQ5NDRlYS4uMjI0ODliMGZiODZiZjczZjNiYTA1YzVhZTU3ZmY2
MmZhYmQ1MDgwYiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0V2
YWxDb2RlQ2FjaGUuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvRXZhbENv
ZGVDYWNoZS5oCkBAIC02OSw2ICs2OSwxMSBAQCBuYW1lc3BhY2UgSlNDIHsKIAogICAgICAgICB2
b2lkIHZpc2l0QWdncmVnYXRlKFNsb3RWaXNpdG9yJik7CiAKKyAgICAgICAgdm9pZCBjbGVhcigp
CisgICAgICAgIHsKKyAgICAgICAgICAgIG1fY2FjaGVNYXAuY2xlYXIoKTsKKyAgICAgICAgfQor
CiAgICAgcHJpdmF0ZToKICAgICAgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIG1heENhY2hlYWJs
ZVNvdXJjZUxlbmd0aCA9IDI1NjsKICAgICAgICAgc3RhdGljIGNvbnN0IGludCBtYXhDYWNoZUVu
dHJpZXMgPSA2NDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXAu
Y3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcC5jcHAKaW5kZXggMDBmMzE3NTRm
YjY2OTFmYjZmYTI2MDE1YWU3NmQ3YmFlNTQyMzM2NS4uMWFmZmY4NWIzNDQyMTVhZjk4ZGYxNTE1
MjU3YWFiNjI1YTk1NmExNiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAv
SGVhcC5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcC5jcHAKQEAgLTM5
NSw2ICszOTUsMjMgQEAgaW5saW5lIFJlZ2lzdGVyRmlsZSYgSGVhcDo6cmVnaXN0ZXJGaWxlKCkK
ICAgICByZXR1cm4gbV9nbG9iYWxEYXRhLT5pbnRlcnByZXRlci0+cmVnaXN0ZXJGaWxlKCk7CiB9
CiAKK3ZvaWQgSGVhcDo6Z2V0Q29uc2VydmF0aXZlUmVnaXN0ZXJSb290cyhIYXNoU2V0PEpTQ2Vs
bCo+JiByb290cykKK3sKKyAgICBBU1NFUlQoaXNWYWxpZFRocmVhZFN0YXRlKG1fZ2xvYmFsRGF0
YSkpOworICAgIGlmIChtX29wZXJhdGlvbkluUHJvZ3Jlc3MgIT0gTm9PcGVyYXRpb24pCisgICAg
ICAgIENSQVNIKCk7CisgICAgbV9vcGVyYXRpb25JblByb2dyZXNzID0gQ29sbGVjdGlvbjsKKyAg
ICBDb25zZXJ2YXRpdmVSb290cyByZWdpc3RlckZpbGVSb290cygmbV9ibG9ja3MpOworICAgIHJl
Z2lzdGVyRmlsZSgpLmdhdGhlckNvbnNlcnZhdGl2ZVJvb3RzKHJlZ2lzdGVyRmlsZVJvb3RzKTsK
KyAgICBzaXplX3QgcmVnaXN0ZXJGaWxlUm9vdENvdW50ID0gcmVnaXN0ZXJGaWxlUm9vdHMuc2l6
ZSgpOworICAgIEpTQ2VsbCoqIHJlZ2lzdGVyUm9vdHMgPSByZWdpc3RlckZpbGVSb290cy5yb290
cygpOworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgcmVnaXN0ZXJGaWxlUm9vdENvdW50OyBp
KyspIHsKKyAgICAgICAgc2V0TWFya2VkKHJlZ2lzdGVyUm9vdHNbaV0pOworICAgICAgICByb290
cy5hZGQocmVnaXN0ZXJSb290c1tpXSk7CisgICAgfQorICAgIG1fb3BlcmF0aW9uSW5Qcm9ncmVz
cyA9IE5vT3BlcmF0aW9uOworfQorCiB2b2lkIEhlYXA6Om1hcmtSb290cygpCiB7CiAgICAgQVNT
RVJUKGlzVmFsaWRUaHJlYWRTdGF0ZShtX2dsb2JhbERhdGEpKTsKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXAuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFw
L0hlYXAuaAppbmRleCAyNzU4YjUxZTA2NmFiNmIzY2E5YjA4MjFmOGEyZjgzOWUyYTU5NGJkLi45
YWI1NmZkNzllNTY5NmUwMmEzMzQ1MmEyNDA3ZmQ0Y2E2NTQ2NjNlIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2hlYXAvSGVhcC5oCkBAIC0xMTQsNiArMTE0LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAg
IEhhbmRsZVNsb3QgYWxsb2NhdGVMb2NhbEhhbmRsZSgpIHsgcmV0dXJuIG1faGFuZGxlU3RhY2su
cHVzaCgpOyB9CiAKICAgICAgICAgSGFuZGxlU3RhY2sqIGhhbmRsZVN0YWNrKCkgeyByZXR1cm4g
Jm1faGFuZGxlU3RhY2s7IH0KKyAgICAgICAgdm9pZCBnZXRDb25zZXJ2YXRpdmVSZWdpc3RlclJv
b3RzKEhhc2hTZXQ8SlNDZWxsKj4mIHJvb3RzKTsKIAogICAgIHByaXZhdGU6CiAgICAgICAgIHR5
cGVkZWYgSGFzaFNldDxNYXJrZWRCbG9jayo+OjppdGVyYXRvciBCbG9ja0l0ZXJhdG9yOwpkaWZm
IC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQuY3BwIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2ppdC9KSVQuY3BwCmluZGV4IGE4YWQ5NWI0MTc3YjVmZDZiY2I3NWZiNmUzNTVi
MTIzOGU3MDdmMjYuLjFhNjczZDA1MGM3MzM0MTYwYThlNzA2MDljMjI5MjUwMmMxYjA3MWMgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmNwcAorKysgYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaml0L0pJVC5jcHAKQEAgLTU3Niw2ICs1NzYsNyBAQCBKSVRDb2RlIEpJ
VDo6cHJpdmF0ZUNvbXBpbGUoQ29kZVB0ciogZnVuY3Rpb25FbnRyeUFyaXR5Q2hlY2spCiAgICAg
fQogICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBtX2NvZGVCbG9jay0+bnVtYmVyT2ZDYWxs
TGlua0luZm9zKCk7ICsraSkgewogICAgICAgICBDYWxsTGlua0luZm8mIGluZm8gPSBtX2NvZGVC
bG9jay0+Y2FsbExpbmtJbmZvKGkpOworICAgICAgICBpbmZvLmlzQ2FsbCA9IG1fY2FsbFN0cnVj
dHVyZVN0dWJDb21waWxhdGlvbkluZm9baV0uaXNDYWxsOwogICAgICAgICBpbmZvLmNhbGxSZXR1
cm5Mb2NhdGlvbiA9IHBhdGNoQnVmZmVyLmxvY2F0aW9uT2ZOZWFyQ2FsbChtX2NhbGxTdHJ1Y3R1
cmVTdHViQ29tcGlsYXRpb25JbmZvW2ldLmNhbGxSZXR1cm5Mb2NhdGlvbik7CiAgICAgICAgIGlu
Zm8uaG90UGF0aEJlZ2luID0gcGF0Y2hCdWZmZXIubG9jYXRpb25PZihtX2NhbGxTdHJ1Y3R1cmVT
dHViQ29tcGlsYXRpb25JbmZvW2ldLmhvdFBhdGhCZWdpbik7CiAgICAgICAgIGluZm8uaG90UGF0
aE90aGVyID0gcGF0Y2hCdWZmZXIubG9jYXRpb25PZk5lYXJDYWxsKG1fY2FsbFN0cnVjdHVyZVN0
dWJDb21waWxhdGlvbkluZm9baV0uaG90UGF0aE90aGVyKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9qaXQvSklULmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5o
CmluZGV4IGEyYTE3NTFjMzk2YWEzODA4NGYxMGE1N2Y0NmQxYjI4ZGMzNWU2NmEuLjcxOGFiMjJh
YmJkYTQxYTE0ZmZiODgyZDA1MzgwOGQ5Y2NiNTQ2MTUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9qaXQvSklULmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQu
aApAQCAtMTQ5LDYgKzE0OSw3IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICBNYWNyb0Fzc2Vt
Ymxlcjo6RGF0YUxhYmVsUHRyIGhvdFBhdGhCZWdpbjsKICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6
OkNhbGwgaG90UGF0aE90aGVyOwogICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6Q2FsbCBjYWxsUmV0
dXJuTG9jYXRpb247CisgICAgICAgIGJvb2wgaXNDYWxsOwogICAgIH07CiAKICAgICBzdHJ1Y3Qg
TWV0aG9kQ2FsbENvbXBpbGF0aW9uSW5mbyB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvaml0L0pJVENhbGwuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRDYWxs
LmNwcAppbmRleCBiOTY1NjVjOThkMTc3NDYxMzBkNTNmOGE2ZmRiNjNmZjdjMDZjNjVkLi5lOGEw
NjczNWQwM2U4MTgzNDJhMTI3MGQ5OTVjM2VlMTk3N2E1MGQ5IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaml0L0pJVENhbGwuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9qaXQvSklUQ2FsbC5jcHAKQEAgLTEzMyw2ICsxMzMsNyBAQCB2b2lkIEpJVDo6Y29tcGlsZU9w
Q2FsbChPcGNvZGVJRCBvcGNvZGVJRCwgSW5zdHJ1Y3Rpb24qIGluc3RydWN0aW9uLCB1bnNpZ25l
ZCBjYQogICAgIGFkZFNsb3dDYXNlKGp1bXBUb1Nsb3cpOwogICAgIEFTU0VSVF9KSVRfT0ZGU0VU
KGRpZmZlcmVuY2VCZXR3ZWVuKGFkZHJlc3NPZkxpbmtlZEZ1bmN0aW9uQ2hlY2ssIGp1bXBUb1Ns
b3cpLCBwYXRjaE9mZnNldE9wQ2FsbENvbXBhcmVUb0p1bXApOwogICAgIG1fY2FsbFN0cnVjdHVy
ZVN0dWJDb21waWxhdGlvbkluZm9bY2FsbExpbmtJbmZvSW5kZXhdLmhvdFBhdGhCZWdpbiA9IGFk
ZHJlc3NPZkxpbmtlZEZ1bmN0aW9uQ2hlY2s7CisgICAgbV9jYWxsU3RydWN0dXJlU3R1YkNvbXBp
bGF0aW9uSW5mb1tjYWxsTGlua0luZm9JbmRleF0uaXNDYWxsID0gb3Bjb2RlSUQgIT0gb3BfY29u
c3RydWN0OwogCiAgICAgLy8gVGhlIGZvbGxvd2luZyBpcyB0aGUgZmFzdCBjYXNlLCBvbmx5IHVz
ZWQgd2hhbiBhIGNhbGxlZSBjYW4gYmUgbGlua2VkLgogCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvaml0L0pJVFdyaXRlQmFycmllci5oIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2ppdC9KSVRXcml0ZUJhcnJpZXIuaAppbmRleCBkYmU5MGMyYzRmZTliZmUyNDEzYWM1MTc1YjU1
MGVjZThlMTIyNzQ0Li4xMGUwNzEwMDE4NmVlZGRhY2YzNGEzNjAzZGE2OTE4ZWM4YTQyODgxIDEw
MDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFdyaXRlQmFycmllci5oCisr
KyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUV3JpdGVCYXJyaWVyLmgKQEAgLTY4LDYg
KzY4LDggQEAgcHVibGljOgogICAgICAgICByZXR1cm4gbV9sb2NhdGlvbjsKICAgICB9CiAgICAg
CisgICAgdm9pZCBjbGVhcigpIHsgY2xlYXIoMCk7IH0KKwogcHJvdGVjdGVkOgogICAgIEpJVFdy
aXRlQmFycmllckJhc2UoKQogICAgIHsKQEAgLTk0LDYgKzk2LDE0IEBAIHByb3RlY3RlZDoKICAg
ICB9CiAKIHByaXZhdGU6CisgICAgdm9pZCBjbGVhcih2b2lkKiBjbGVhcmVkVmFsdWUpCisgICAg
eworICAgICAgICBpZiAoIW1fbG9jYXRpb24pCisgICAgICAgICAgICByZXR1cm47CisgICAgICAg
IGlmIChtX2xvY2F0aW9uLmV4ZWN1dGFibGVBZGRyZXNzKCkgIT0gSklUV3JpdGVCYXJyaWVyRmxh
ZykKKyAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpyZXBhdGNoUG9pbnRlcihtX2xvY2F0aW9u
LCBjbGVhcmVkVmFsdWUpOworICAgIH0KKwogICAgIENvZGVMb2NhdGlvbkRhdGFMYWJlbFB0ciBt
X2xvY2F0aW9uOwogfTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2pzYy5j
cHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvanNjLmNwcAppbmRleCA2ZWY4ZTE4NTY0MmRjN2I5
ZTdjOTJlYTQ2ZmUxMTRhNzIyNjlhNGVkLi5jNWY4MTI4YzQ1M2I0M2U1ZjEwNjc2MjAxYzhlYjJl
MDNjOWMzZmIzIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvanNjLmNwcAorKysg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvanNjLmNwcApAQCAtNzQsNiArNzQsNyBAQCBzdGF0aWMg
Ym9vbCBmaWxsQnVmZmVyV2l0aENvbnRlbnRzT2ZGaWxlKGNvbnN0IFVTdHJpbmcmIGZpbGVOYW1l
LCBWZWN0b3I8Y2hhcj4mCiBzdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBmdW5j
dGlvblByaW50KEV4ZWNTdGF0ZSopOwogc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NB
TEwgZnVuY3Rpb25EZWJ1ZyhFeGVjU3RhdGUqKTsKIHN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0Nf
SE9TVF9DQUxMIGZ1bmN0aW9uR0MoRXhlY1N0YXRlKik7CitzdGF0aWMgRW5jb2RlZEpTVmFsdWUg
SlNDX0hPU1RfQ0FMTCBmdW5jdGlvblJlbGVhc2VFeGVjdXRhYmxlTWVtb3J5KEV4ZWNTdGF0ZSop
Owogc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZnVuY3Rpb25WZXJzaW9uKEV4
ZWNTdGF0ZSopOwogc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZnVuY3Rpb25S
dW4oRXhlY1N0YXRlKik7CiBzdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBmdW5j
dGlvbkxvYWQoRXhlY1N0YXRlKik7CkBAIC0xNTQsNiArMTU1LDkgQEAgR2xvYmFsT2JqZWN0OjpH
bG9iYWxPYmplY3QoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBTdHJ1Y3R1cmUqIHN0cnVjdHVy
ZSwgY29uc3QKICAgICBwdXREaXJlY3RGdW5jdGlvbihnbG9iYWxFeGVjKCksIG5ldyAoZ2xvYmFs
RXhlYygpKSBKU0Z1bmN0aW9uKGdsb2JhbEV4ZWMoKSwgdGhpcywgZnVuY3Rpb25TdHJ1Y3R1cmUo
KSwgMSwgSWRlbnRpZmllcihnbG9iYWxFeGVjKCksICJwcmludCIpLCBmdW5jdGlvblByaW50KSk7
CiAgICAgcHV0RGlyZWN0RnVuY3Rpb24oZ2xvYmFsRXhlYygpLCBuZXcgKGdsb2JhbEV4ZWMoKSkg
SlNGdW5jdGlvbihnbG9iYWxFeGVjKCksIHRoaXMsIGZ1bmN0aW9uU3RydWN0dXJlKCksIDAsIElk
ZW50aWZpZXIoZ2xvYmFsRXhlYygpLCAicXVpdCIpLCBmdW5jdGlvblF1aXQpKTsKICAgICBwdXRE
aXJlY3RGdW5jdGlvbihnbG9iYWxFeGVjKCksIG5ldyAoZ2xvYmFsRXhlYygpKSBKU0Z1bmN0aW9u
KGdsb2JhbEV4ZWMoKSwgdGhpcywgZnVuY3Rpb25TdHJ1Y3R1cmUoKSwgMCwgSWRlbnRpZmllcihn
bG9iYWxFeGVjKCksICJnYyIpLCBmdW5jdGlvbkdDKSk7CisjaWZuZGVmIE5ERUJVRworICAgIHB1
dERpcmVjdEZ1bmN0aW9uKGdsb2JhbEV4ZWMoKSwgbmV3IChnbG9iYWxFeGVjKCkpIEpTRnVuY3Rp
b24oZ2xvYmFsRXhlYygpLCB0aGlzLCBmdW5jdGlvblN0cnVjdHVyZSgpLCAwLCBJZGVudGlmaWVy
KGdsb2JhbEV4ZWMoKSwgInJlbGVhc2VFeGVjdXRhYmxlTWVtb3J5IiksIGZ1bmN0aW9uUmVsZWFz
ZUV4ZWN1dGFibGVNZW1vcnkpKTsKKyNlbmRpZgogICAgIHB1dERpcmVjdEZ1bmN0aW9uKGdsb2Jh
bEV4ZWMoKSwgbmV3IChnbG9iYWxFeGVjKCkpIEpTRnVuY3Rpb24oZ2xvYmFsRXhlYygpLCB0aGlz
LCBmdW5jdGlvblN0cnVjdHVyZSgpLCAxLCBJZGVudGlmaWVyKGdsb2JhbEV4ZWMoKSwgInZlcnNp
b24iKSwgZnVuY3Rpb25WZXJzaW9uKSk7CiAgICAgcHV0RGlyZWN0RnVuY3Rpb24oZ2xvYmFsRXhl
YygpLCBuZXcgKGdsb2JhbEV4ZWMoKSkgSlNGdW5jdGlvbihnbG9iYWxFeGVjKCksIHRoaXMsIGZ1
bmN0aW9uU3RydWN0dXJlKCksIDEsIElkZW50aWZpZXIoZ2xvYmFsRXhlYygpLCAicnVuIiksIGZ1
bmN0aW9uUnVuKSk7CiAgICAgcHV0RGlyZWN0RnVuY3Rpb24oZ2xvYmFsRXhlYygpLCBuZXcgKGds
b2JhbEV4ZWMoKSkgSlNGdW5jdGlvbihnbG9iYWxFeGVjKCksIHRoaXMsIGZ1bmN0aW9uU3RydWN0
dXJlKCksIDEsIElkZW50aWZpZXIoZ2xvYmFsRXhlYygpLCAibG9hZCIpLCBmdW5jdGlvbkxvYWQp
KTsKQEAgLTE5OCw2ICsyMDIsMTUgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBmdW5j
dGlvbkdDKEV4ZWNTdGF0ZSogZXhlYykKICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5k
ZWZpbmVkKCkpOwogfQogCisjaWZuZGVmIE5ERUJVRworRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1Rf
Q0FMTCBmdW5jdGlvblJlbGVhc2VFeGVjdXRhYmxlTWVtb3J5KEV4ZWNTdGF0ZSogZXhlYykKK3sK
KyAgICBKU0xvY2sgbG9jayhTaWxlbmNlQXNzZXJ0aW9uc09ubHkpOworICAgIGV4ZWMtPmdsb2Jh
bERhdGEoKS5yZWxlYXNlRXhlY3V0YWJsZU1lbW9yeSgpOworICAgIHJldHVybiBKU1ZhbHVlOjpl
bmNvZGUoanNVbmRlZmluZWQoKSk7Cit9CisjZW5kaWYKKwogRW5jb2RlZEpTVmFsdWUgSlNDX0hP
U1RfQ0FMTCBmdW5jdGlvblZlcnNpb24oRXhlY1N0YXRlKikKIHsKICAgICAvLyBXZSBuZWVkIHRo
aXMgZnVuY3Rpb24gZm9yIGNvbXBhdGliaWxpdHkgd2l0aCB0aGUgTW96aWxsYSBKUyB0ZXN0cyBi
dXQgZm9yIG5vdwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRXhl
Y3V0YWJsZS5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9FeGVjdXRhYmxlLmNw
cAppbmRleCA2Y2RlOGIxNjljMDg2MWIyNjQ2OTY4MDRiNmIwYzg0MzBmODJmZDdhLi42NTE1NmIz
MGZmOThmOTc1ZTZhNDI5NTA5NWZkNDJkMjQ2ZmQ0YTdhIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9FeGVjdXRhYmxlLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9FeGVjdXRhYmxlLmNwcApAQCAtNjQsNiArNjQsOCBAQCBOYXRpdmVFeGVj
dXRhYmxlOjp+TmF0aXZlRXhlY3V0YWJsZSgpCiB7CiB9CiAKK2NvbnN0IENsYXNzSW5mbyBTY3Jp
cHRFeGVjdXRhYmxlOjpzX2luZm8gPSB7ICJTY3JpcHRFeGVjdXRhYmxlIiwgJkV4ZWN1dGFibGVC
YXNlOjpzX2luZm8sIDAsIDAgfTsKKwogY29uc3QgQ2xhc3NJbmZvIEV2YWxFeGVjdXRhYmxlOjpz
X2luZm8gPSB7ICJFdmFsRXhlY3V0YWJsZSIsICZTY3JpcHRFeGVjdXRhYmxlOjpzX2luZm8sIDAs
IDAgfTsKIAogRXZhbEV4ZWN1dGFibGU6OkV2YWxFeGVjdXRhYmxlKEV4ZWNTdGF0ZSogZXhlYywg
Y29uc3QgU291cmNlQ29kZSYgc291cmNlLCBib29sIGluU3RyaWN0Q29udGV4dCkKQEAgLTE2OSw2
ICsxNzEsMTYgQEAgdm9pZCBFdmFsRXhlY3V0YWJsZTo6dmlzaXRDaGlsZHJlbihTbG90VmlzaXRv
ciYgdmlzaXRvcikKICAgICAgICAgbV9ldmFsQ29kZUJsb2NrLT52aXNpdEFnZ3JlZ2F0ZSh2aXNp
dG9yKTsKIH0KIAordm9pZCBFdmFsRXhlY3V0YWJsZTo6dW5saW5rQ2FsbHMoKQoreworI2lmIEVO
QUJMRShKSVQpCisgICAgaWYgKCFtX2ppdENvZGVGb3JDYWxsKQorICAgICAgICByZXR1cm47Cisg
ICAgQVNTRVJUKG1fZXZhbENvZGVCbG9jayk7CisgICAgbV9ldmFsQ29kZUJsb2NrLT51bmxpbmtD
YWxscygpOworI2VuZGlmCit9CisKIEpTT2JqZWN0KiBQcm9ncmFtRXhlY3V0YWJsZTo6Y2hlY2tT
eW50YXgoRXhlY1N0YXRlKiBleGVjKQogewogICAgIEpTT2JqZWN0KiBleGNlcHRpb24gPSAwOwpA
QCAtMjI2LDYgKzIzOCwxNiBAQCBKU09iamVjdCogUHJvZ3JhbUV4ZWN1dGFibGU6OmNvbXBpbGVJ
bnRlcm5hbChFeGVjU3RhdGUqIGV4ZWMsIFNjb3BlQ2hhaW5Ob2RlKiBzYwogICAgIHJldHVybiAw
OwogfQogCit2b2lkIFByb2dyYW1FeGVjdXRhYmxlOjp1bmxpbmtDYWxscygpCit7CisjaWYgRU5B
QkxFKEpJVCkKKyAgICBpZiAoIW1faml0Q29kZUZvckNhbGwpCisgICAgICAgIHJldHVybjsKKyAg
ICBBU1NFUlQobV9wcm9ncmFtQ29kZUJsb2NrKTsKKyAgICBtX3Byb2dyYW1Db2RlQmxvY2stPnVu
bGlua0NhbGxzKCk7CisjZW5kaWYKK30KKwogI2lmIEVOQUJMRShKSVQpCiBzdGF0aWMgYm9vbCB0
cnlERkdDb21waWxlKEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YSwgQ29kZUJsb2NrKiBjb2RlQmxv
Y2ssIEpJVENvZGUmIGppdENvZGUsIE1hY3JvQXNzZW1ibGVyQ29kZVB0ciYgaml0Q29kZVdpdGhB
cml0eUNoZWNrKQogewpAQCAtMzgyLDEzICs0MDQsNDEgQEAgdm9pZCBGdW5jdGlvbkV4ZWN1dGFi
bGU6OnZpc2l0Q2hpbGRyZW4oU2xvdFZpc2l0b3ImIHZpc2l0b3IpCiAKIHZvaWQgRnVuY3Rpb25F
eGVjdXRhYmxlOjpkaXNjYXJkQ29kZSgpCiB7CisjaWYgRU5BQkxFKEpJVCkKKyAgICAvLyBUaGVz
ZSBmaXJzdCB0d28gY2hlY2tzIGFyZSB0byBoYW5kbGUgdGhlIHJhcmUgY2FzZSB3aGVyZQorICAg
IC8vIHdlIGFyZSB0cnlpbmcgdG8gZXZpY3QgY29kZSBmb3IgYSBmdW5jdGlvbiBkdXJpbmcgaXRz
CisgICAgLy8gY29kZWdlbi4KKyAgICBpZiAoIW1faml0Q29kZUZvckNhbGwgJiYgbV9jb2RlQmxv
Y2tGb3JDYWxsKQorICAgICAgICByZXR1cm47CisgICAgaWYgKCFtX2ppdENvZGVGb3JDb25zdHJ1
Y3QgJiYgbV9jb2RlQmxvY2tGb3JDb25zdHJ1Y3QpCisgICAgICAgIHJldHVybjsKKyAgICBtX2pp
dENvZGVGb3JDYWxsID0gSklUQ29kZSgpOworICAgIG1faml0Q29kZUZvckNvbnN0cnVjdCA9IEpJ
VENvZGUoKTsKKyAgICBtX2ppdENvZGVGb3JDYWxsV2l0aEFyaXR5Q2hlY2sgPSBNYWNyb0Fzc2Vt
YmxlckNvZGVQdHIoKTsKKyAgICBtX2ppdENvZGVGb3JDb25zdHJ1Y3RXaXRoQXJpdHlDaGVjayA9
IE1hY3JvQXNzZW1ibGVyQ29kZVB0cigpOworI2VuZGlmCisgICAgaWYgKG1fY29kZUJsb2NrRm9y
Q2FsbCkKKyAgICAgICAgbV9jb2RlQmxvY2tGb3JDYWxsLT5jbGVhckV2YWxDYWNoZSgpOwogICAg
IG1fY29kZUJsb2NrRm9yQ2FsbC5jbGVhcigpOworICAgIGlmIChtX2NvZGVCbG9ja0ZvckNvbnN0
cnVjdCkKKyAgICAgICAgbV9jb2RlQmxvY2tGb3JDb25zdHJ1Y3QtPmNsZWFyRXZhbENhY2hlKCk7
CiAgICAgbV9jb2RlQmxvY2tGb3JDb25zdHJ1Y3QuY2xlYXIoKTsKICAgICBtX251bVBhcmFtZXRl
cnNGb3JDYWxsID0gTlVNX1BBUkFNRVRFUlNfTk9UX0NPTVBJTEVEOwogICAgIG1fbnVtUGFyYW1l
dGVyc0ZvckNvbnN0cnVjdCA9IE5VTV9QQVJBTUVURVJTX05PVF9DT01QSUxFRDsKKworfQorCit2
b2lkIEZ1bmN0aW9uRXhlY3V0YWJsZTo6dW5saW5rQ2FsbHMoKQorewogI2lmIEVOQUJMRShKSVQp
Ci0gICAgbV9qaXRDb2RlRm9yQ2FsbCA9IEpJVENvZGUoKTsKLSAgICBtX2ppdENvZGVGb3JDb25z
dHJ1Y3QgPSBKSVRDb2RlKCk7CisgICAgaWYgKCEhbV9qaXRDb2RlRm9yQ2FsbCkgeworICAgICAg
ICBBU1NFUlQobV9jb2RlQmxvY2tGb3JDYWxsKTsKKyAgICAgICAgbV9jb2RlQmxvY2tGb3JDYWxs
LT51bmxpbmtDYWxscygpOworICAgIH0KKyAgICBpZiAoISFtX2ppdENvZGVGb3JDb25zdHJ1Y3Qp
IHsKKyAgICAgICAgQVNTRVJUKG1fY29kZUJsb2NrRm9yQ29uc3RydWN0KTsKKyAgICAgICAgbV9j
b2RlQmxvY2tGb3JDb25zdHJ1Y3QtPnVubGlua0NhbGxzKCk7CisgICAgfQogI2VuZGlmCiB9CiAK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0V4ZWN1dGFibGUuaCBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0V4ZWN1dGFibGUuaAppbmRleCA3MGU1ZTYx
MDY5MjAxMDc0MjJkNjlhMjQxYTExNmVjZTk4Yzk1MWRmLi5lNzk1ZmJmYzMxMjNlM2Y3MmIyNWY3
YWEzMjA4MzJiNWQyYTIyNTIwIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9FeGVjdXRhYmxlLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRXhl
Y3V0YWJsZS5oCkBAIC0yMDIsNiArMjAyLDkgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIGJv
b2wgbmVlZHNBY3RpdmF0aW9uKCkgY29uc3QgeyByZXR1cm4gbV9oYXNDYXB0dXJlZFZhcmlhYmxl
cyB8fCBtX2ZlYXR1cmVzICYgKEV2YWxGZWF0dXJlIHwgV2l0aEZlYXR1cmUgfCBDYXRjaEZlYXR1
cmUpOyB9CiAgICAgICAgIGJvb2wgaXNTdHJpY3RNb2RlKCkgY29uc3QgeyByZXR1cm4gbV9mZWF0
dXJlcyAmIFN0cmljdE1vZGVGZWF0dXJlOyB9CiAKKyAgICAgICAgdmlydHVhbCB2b2lkIHVubGlu
a0NhbGxzKCkgPSAwOworICAgICAgICAKKyAgICAgICAgc3RhdGljIGNvbnN0IENsYXNzSW5mbyBz
X2luZm87CiAgICAgcHJvdGVjdGVkOgogICAgICAgICB2b2lkIHJlY29yZFBhcnNlKENvZGVGZWF0
dXJlcyBmZWF0dXJlcywgYm9vbCBoYXNDYXB0dXJlZFZhcmlhYmxlcywgaW50IGZpcnN0TGluZSwg
aW50IGxhc3RMaW5lKQogICAgICAgICB7CkBAIC0yNTksNiArMjYyLDcgQEAgbmFtZXNwYWNlIEpT
QyB7CiAKICAgICAgICAgSlNPYmplY3QqIGNvbXBpbGVJbnRlcm5hbChFeGVjU3RhdGUqLCBTY29w
ZUNoYWluTm9kZSopOwogICAgICAgICB2aXJ0dWFsIHZvaWQgdmlzaXRDaGlsZHJlbihTbG90Vmlz
aXRvciYpOworICAgICAgICB2b2lkIHVubGlua0NhbGxzKCk7CiAKICAgICAgICAgT3duUHRyPEV2
YWxDb2RlQmxvY2s+IG1fZXZhbENvZGVCbG9jazsKICAgICB9OwpAQCAtMzEwLDYgKzMxNCw3IEBA
IG5hbWVzcGFjZSBKU0MgewogCiAgICAgICAgIEpTT2JqZWN0KiBjb21waWxlSW50ZXJuYWwoRXhl
Y1N0YXRlKiwgU2NvcGVDaGFpbk5vZGUqKTsKICAgICAgICAgdmlydHVhbCB2b2lkIHZpc2l0Q2hp
bGRyZW4oU2xvdFZpc2l0b3ImKTsKKyAgICAgICAgdm9pZCB1bmxpbmtDYWxscygpOwogCiAgICAg
ICAgIE93blB0cjxQcm9ncmFtQ29kZUJsb2NrPiBtX3Byb2dyYW1Db2RlQmxvY2s7CiAgICAgfTsK
QEAgLTQxMSw2ICs0MTYsNyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgc3RhdGljIGNvbnN0
IHVuc2lnbmVkIFN0cnVjdHVyZUZsYWdzID0gT3ZlcnJpZGVzVmlzaXRDaGlsZHJlbiB8IFNjcmlw
dEV4ZWN1dGFibGU6OlN0cnVjdHVyZUZsYWdzOwogICAgICAgICB1bnNpZ25lZCBtX251bUNhcHR1
cmVkVmFyaWFibGVzIDogMzE7CiAgICAgICAgIGJvb2wgbV9mb3JjZVVzZXNBcmd1bWVudHMgOiAx
OworICAgICAgICB2b2lkIHVubGlua0NhbGxzKCk7CiAKICAgICAgICAgUmVmUHRyPEZ1bmN0aW9u
UGFyYW1ldGVycz4gbV9wYXJhbWV0ZXJzOwogICAgICAgICBPd25QdHI8RnVuY3Rpb25Db2RlQmxv
Y2s+IG1fY29kZUJsb2NrRm9yQ2FsbDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0pTR2xvYmFsRGF0YS5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9KU0dsb2JhbERhdGEuY3BwCmluZGV4IGNiNDU1ZGRiM2U4MjJiMTc0ZjAzZDk0ZjgyMTk0MDdh
ZDdlNzUyZjkuLjkxZTNiYjUwYTUwM2UyMzFmZDkwMTI3MjE4YmYxMmY5NzlkOTM1YWUgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsRGF0YS5jcHAKKysr
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxEYXRhLmNwcApAQCAtNDUw
LDExICs0NTAsNDggQEAgdm9pZCBKU0dsb2JhbERhdGE6OnJlY29tcGlsZUFsbEpTRnVuY3Rpb25z
KCkKICAgICBoZWFwLmZvckVhY2hDZWxsPFJlY29tcGlsZXI+KCk7CiB9CiAKK3N0cnVjdCBTdGFj
a1ByZXNlcnZpbmdSZWNvbXBpbGVyIDogcHVibGljIE1hcmtlZEJsb2NrOjpWb2lkRnVuY3RvciB7
CisgICAgSGFzaFNldDxGdW5jdGlvbkV4ZWN1dGFibGUqPiBjdXJyZW50bHlFeGVjdXRpbmdGdW5j
dGlvbnM7CisgICAgdm9pZCBvcGVyYXRvcigpKEpTQ2VsbCogY2VsbCkKKyAgICB7CisgICAgICAg
IGlmICghY2VsbC0+aW5oZXJpdHMoJkZ1bmN0aW9uRXhlY3V0YWJsZTo6c19pbmZvKSkKKyAgICAg
ICAgICAgIHJldHVybjsKKyAgICAgICAgRnVuY3Rpb25FeGVjdXRhYmxlKiBleGVjdXRhYmxlID0g
c3RhdGljX2Nhc3Q8RnVuY3Rpb25FeGVjdXRhYmxlKj4oY2VsbCk7CisgICAgICAgIGlmIChjdXJy
ZW50bHlFeGVjdXRpbmdGdW5jdGlvbnMuY29udGFpbnMoZXhlY3V0YWJsZSkpCisgICAgICAgICAg
ICByZXR1cm47CisgICAgICAgIGV4ZWN1dGFibGUtPmRpc2NhcmRDb2RlKCk7CisgICAgfQorfTsK
Kwogdm9pZCBKU0dsb2JhbERhdGE6OnJlbGVhc2VFeGVjdXRhYmxlTWVtb3J5KCkKIHsKLSAgICBp
ZiAoIWR5bmFtaWNHbG9iYWxPYmplY3QpCi0gICAgICAgIHJlY29tcGlsZUFsbEpTRnVuY3Rpb25z
KCk7CisgICAgaWYgKGR5bmFtaWNHbG9iYWxPYmplY3QpIHsKKyAgICAgICAgU3RhY2tQcmVzZXJ2
aW5nUmVjb21waWxlciByZWNvbXBpbGVyOworICAgICAgICBIYXNoU2V0PEpTQ2VsbCo+IHJvb3Rz
OworICAgICAgICBoZWFwLmdldENvbnNlcnZhdGl2ZVJlZ2lzdGVyUm9vdHMocm9vdHMpOworICAg
ICAgICBIYXNoU2V0PEpTQ2VsbCo+OjppdGVyYXRvciBlbmQgPSByb290cy5lbmQoKTsKKyAgICAg
ICAgZm9yIChIYXNoU2V0PEpTQ2VsbCo+OjppdGVyYXRvciBwdHIgPSByb290cy5iZWdpbigpOyBw
dHIgIT0gZW5kOyArK3B0cikgeworICAgICAgICAgICAgU2NyaXB0RXhlY3V0YWJsZSogZXhlY3V0
YWJsZSA9IDA7CisgICAgICAgICAgICBKU0NlbGwqIGNlbGwgPSAqcHRyOworICAgICAgICAgICAg
aWYgKGNlbGwtPmluaGVyaXRzKCZTY3JpcHRFeGVjdXRhYmxlOjpzX2luZm8pKQorICAgICAgICAg
ICAgICAgIGV4ZWN1dGFibGUgPSBzdGF0aWNfY2FzdDxTY3JpcHRFeGVjdXRhYmxlKj4oKnB0cik7
CisgICAgICAgICAgICBlbHNlIGlmIChjZWxsLT5pbmhlcml0cygmSlNGdW5jdGlvbjo6c19pbmZv
KSkgeworICAgICAgICAgICAgICAgIEpTRnVuY3Rpb24qIGZ1bmN0aW9uID0gYXNGdW5jdGlvbigq
cHRyKTsKKyAgICAgICAgICAgICAgICBpZiAoZnVuY3Rpb24tPmlzSG9zdEZ1bmN0aW9uKCkpCisg
ICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgICAgIGV4ZWN1dGFibGUg
PSBmdW5jdGlvbi0+anNFeGVjdXRhYmxlKCk7CisgICAgICAgICAgICB9IGVsc2UKKyAgICAgICAg
ICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIEFTU0VSVChleGVjdXRhYmxlLT5pbmhlcml0
cygmU2NyaXB0RXhlY3V0YWJsZTo6c19pbmZvKSk7CisgICAgICAgICAgICBleGVjdXRhYmxlLT51
bmxpbmtDYWxscygpOworICAgICAgICAgICAgaWYgKGV4ZWN1dGFibGUtPmluaGVyaXRzKCZGdW5j
dGlvbkV4ZWN1dGFibGU6OnNfaW5mbykpCisgICAgICAgICAgICAgICAgcmVjb21waWxlci5jdXJy
ZW50bHlFeGVjdXRpbmdGdW5jdGlvbnMuYWRkKHN0YXRpY19jYXN0PEZ1bmN0aW9uRXhlY3V0YWJs
ZSo+KGV4ZWN1dGFibGUpKTsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgfQorICAgICAgICBo
ZWFwLmZvckVhY2hDZWxsPFN0YWNrUHJlc2VydmluZ1JlY29tcGlsZXI+KHJlY29tcGlsZXIpOwor
ICAgIH0KICAgICBtX3JlZ0V4cENhY2hlLT5pbnZhbGlkYXRlQ29kZSgpOworICAgIGhlYXAuY29s
bGVjdEFsbEdhcmJhZ2UoKTsKIH0KICAgICAKIHZvaWQgcmVsZWFzZUV4ZWN1dGFibGVNZW1vcnko
SlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhKQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvUmVnRXhwLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1Jl
Z0V4cC5jcHAKaW5kZXggNzBiNWZjODkyZGViZDhhZmZiODlmZGY5NWRiYTdkYjI3ZDJkMjQzYS4u
YTU3OGE2ODNjZTczZWViMjcwNmU4YzVlMWRmMmQwMDE2NDQ2NmQ2NSAxMDA2NDQKLS0tIGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUmVnRXhwLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9SZWdFeHAuY3BwCkBAIC0xOTksNiArMTk5LDkgQEAgaW50IFJlZ0V4
cDo6bWF0Y2goSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBjb25zdCBVU3RyaW5nJiBzLCBpbnQg
c3RhcnRPZmZzZXQsIFYKIAogdm9pZCBSZWdFeHA6OmludmFsaWRhdGVDb2RlKCkKIHsKKyAgICBp
ZiAoIW1fcmVwcmVzZW50YXRpb24pCisgICAgICAgIHJldHVybjsKKyAgICBtX3N0YXRlID0gTm90
Q29tcGlsZWQ7CiAgICAgbV9yZXByZXNlbnRhdGlvbi5jbGVhcigpOwogfQogCg==
</data>
<flag name="review"
          id="93164"
          type_id="1"
          status="+"
          setter="ggaren"
    />
          </attachment>
      

    </bug>

</bugzilla>