<?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>127152</bug_id>
          
          <creation_ts>2014-01-16 17:05:21 -0800</creation_ts>
          <short_desc>CodeBlockSet should be generational</short_desc>
          <delta_ts>2014-04-08 05:03:43 -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>JavaScriptCore</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>
          <dependson>131356</dependson>
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Mark Hahnenberg">mhahnenberg</reporter>
          <assigned_to name="Mark Hahnenberg">mhahnenberg</assigned_to>
          <cc>commit-queue</cc>
    
    <cc>fpizlo</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>968999</commentid>
    <comment_count>0</comment_count>
    <who name="Mark Hahnenberg">mhahnenberg</who>
    <bug_when>2014-01-16 17:05:21 -0800</bug_when>
    <thetext>This is a big overhead during EdenCollections. We should think about how we can generationalize our CodeBlock lifetimes.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>973899</commentid>
    <comment_count>1</comment_count>
      <attachid>222707</attachid>
    <who name="Mark Hahnenberg">mhahnenberg</who>
    <bug_when>2014-01-30 12:14:13 -0800</bug_when>
    <thetext>Created attachment 222707
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>973911</commentid>
    <comment_count>2</comment_count>
      <attachid>222707</attachid>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2014-01-30 12:33:55 -0800</bug_when>
    <thetext>Comment on attachment 222707
Patch

r=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>974077</commentid>
    <comment_count>3</comment_count>
    <who name="Mark Hahnenberg">mhahnenberg</who>
    <bug_when>2014-01-30 16:09:14 -0800</bug_when>
    <thetext>(In reply to comment #1)
&gt; Created an attachment (id=222707) [details]
&gt; Patch

Hmm, I think this patch has issues. The correctness of the weakReferenceHarvester stuff in which CodeBlocks participate is dependent on visiting all marked CodeBlocks during a collection. Otherwise we won&apos;t propagate liveness for all the things that hang off of CodeBlock that need it.

Another alternative is to just ignore all new CodeBlocks (i.e. auto-promote, pretenure, etc.). We&apos;d still have to visit them to LUB value profiles.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>996041</commentid>
    <comment_count>4</comment_count>
      <attachid>228214</attachid>
    <who name="Mark Hahnenberg">mhahnenberg</who>
    <bug_when>2014-03-31 16:16:19 -0700</bug_when>
    <thetext>Created attachment 228214
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>996045</commentid>
    <comment_count>5</comment_count>
      <attachid>228216</attachid>
    <who name="Mark Hahnenberg">mhahnenberg</who>
    <bug_when>2014-03-31 16:23:06 -0700</bug_when>
    <thetext>Created attachment 228216
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>996056</commentid>
    <comment_count>6</comment_count>
      <attachid>228216</attachid>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2014-03-31 16:49:30 -0700</bug_when>
    <thetext>Comment on attachment 228216
Patch

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

r=me

&gt; Source/JavaScriptCore/bytecode/CodeBlock.h:1004
&gt; +        // During EdenCollections all CodeBlocks that are visited are assumed to be live.

Would be nice to explain our reasoning here: It&apos;s probably cheaper to assume liveness, and we don&apos;t want to worry about write barrier subtleties required by the mutually weak liveness methodology.

&gt; Source/JavaScriptCore/heap/CodeBlockSet.cpp:71
&gt; +void CodeBlockSet::clearAllMarks()
&gt;  {
&gt; -    for (CodeBlock* codeBlock : m_set) {
&gt; +    promoteYoungCodeBlocks();
&gt; +    for (CodeBlock* codeBlock : m_oldCodeBlocks) {
&gt;          codeBlock-&gt;m_mayBeExecuting = false;
&gt;          codeBlock-&gt;m_visitAggregateHasBeenCalled = false;
&gt;      }
&gt;  }

It feels strange for &quot;clearAllMarks&quot; to promote. And might this get us into a bad state if deleteAllCompiledCode is called at the start of an eden collection? Similarly strange, though less so, for deleteUnmarkedAndUnreferenced to promote.

Can we make the caller promote instead? For example, Heap::deleteAllCompiledCode could run only during full collections, and Heap::markRoots could eagerly promote code blocks before full collections and lazily promote code blocks after eden collections. Or, Heap::resetAllocators() could promote code blocks unconditionally, and Heap::deleteAllCompiledCode could run after Heap::resetAllocators().</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>996779</commentid>
    <comment_count>7</comment_count>
      <attachid>228216</attachid>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2014-04-02 12:19:03 -0700</bug_when>
    <thetext>Comment on attachment 228216
Patch

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

&gt; Source/JavaScriptCore/heap/CodeBlockSet.cpp:135
&gt; +        m_oldCodeBlocks.remove(codeBlock);

Needs early return.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>996849</commentid>
    <comment_count>8</comment_count>
      <attachid>228428</attachid>
    <who name="Mark Hahnenberg">mhahnenberg</who>
    <bug_when>2014-04-02 14:08:44 -0700</bug_when>
    <thetext>Created attachment 228428
Final patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>996851</commentid>
    <comment_count>9</comment_count>
      <attachid>228428</attachid>
    <who name="Mark Hahnenberg">mhahnenberg</who>
    <bug_when>2014-04-02 14:10:31 -0700</bug_when>
    <thetext>Comment on attachment 228428
Final patch

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

&gt; Source/JavaScriptCore/bytecode/CodeBlock.h:151
&gt; +    template &lt;typename Functor&gt; void forEachRelatedCodeBlock(Functor&amp;&amp; functor)
&gt; +    {
&gt; +        Functor f(std::forward&lt;Functor&gt;(functor));
&gt; +        Vector&lt;CodeBlock*, 4&gt; codeBlocks;
&gt; +        codeBlocks.append(this);
&gt; +
&gt; +        while (!codeBlocks.isEmpty()) {
&gt; +            CodeBlock* currentCodeBlock = codeBlocks.takeLast();
&gt; +            f(currentCodeBlock);
&gt; +
&gt; +            if (CodeBlock* alternative = currentCodeBlock-&gt;alternative())
&gt; +                codeBlocks.append(alternative);
&gt; +            if (CodeBlock* osrEntryBlock = currentCodeBlock-&gt;specialOSREntryBlockOrNull())
&gt; +                codeBlocks.append(osrEntryBlock);
&gt; +        }
&gt; +    }

I had to add handling of the OSR entry block along with the alternative blocks. To make it more general, I turned it into a DFS of a DAG. There&apos;s no defense against cycles.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>996897</commentid>
    <comment_count>10</comment_count>
      <attachid>228428</attachid>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2014-04-02 16:17:46 -0700</bug_when>
    <thetext>Comment on attachment 228428
Final patch

r=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>996914</commentid>
    <comment_count>11</comment_count>
      <attachid>228428</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2014-04-02 16:50:52 -0700</bug_when>
    <thetext>Comment on attachment 228428
Final patch

Clearing flags on attachment: 228428

Committed r166678: &lt;http://trac.webkit.org/changeset/166678&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>996915</commentid>
    <comment_count>12</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2014-04-02 16:50:56 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>222707</attachid>
            <date>2014-01-30 12:14:13 -0800</date>
            <delta_ts>2014-03-31 16:16:17 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-127152-20140130121408.patch</filename>
            <type>text/plain</type>
            <size>18523</size>
            <attacher name="Mark Hahnenberg">mhahnenberg</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTYzMDk4KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDQ0IEBA
CisyMDE0LTAxLTMwICBNYXJrIEhhaG5lbmJlcmcgIDxtaGFobmVuYmVyZ0BhcHBsZS5jb20+CisK
KyAgICAgICAgQWxsIENvZGVCbG9ja3MgYXJlIGl0ZXJhdGVkIGR1cmluZyBldmVyeSBjb2xsZWN0
aW9uCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMjcx
NTIKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBUaGlz
IHBhdGNoIG1ha2VzIGJvdGggdGhlIEhlYXAncyBsaXN0IG9mIEV4ZWN1dGFibGVzIGFzIHdlbGwg
YXMgdGhlIENvZGVCbG9ja1NldCdzCisgICAgICAgIHNldCBvZiBmdW5jdGlvbmFsaXR5IGdlbmVy
YXRpb25hbC4gVGhpcyByZWR1Y2VzIHRoZSBhdmVyYWdlIGFtb3VudCBvZiB0aW1lIHdlIHNwZW5k
IAorICAgICAgICBwcm9jZXNzaW5nIGNvZGUgZHVyaW5nIEVkZW5Db2xsZWN0aW9ucyBzaWduaWZp
Y2FudGx5LgorCisgICAgICAgICogYnl0ZWNvZGUvQ29kZUJsb2NrLmNwcDoKKyAgICAgICAgKEpT
Qzo6Q29kZUJsb2NrOjpDb2RlQmxvY2spOgorICAgICAgICAqIGJ5dGVjb2RlL0NvZGVCbG9jay5o
OgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OmNsZWFyTWFyayk6CisgICAgICAgIChKU0M6OkNv
ZGVCbG9ja1NldDo6bWFyayk6CisgICAgICAgICogaGVhcC9Db2RlQmxvY2tTZXQuY3BwOgorICAg
ICAgICAoSlNDOjpDb2RlQmxvY2tTZXQ6On5Db2RlQmxvY2tTZXQpOgorICAgICAgICAoSlNDOjpD
b2RlQmxvY2tTZXQ6OmFkZCk6CisgICAgICAgIChKU0M6OkNvZGVCbG9ja1NldDo6Y2xlYXJNYXJr
cyk6CisgICAgICAgIChKU0M6OkNvZGVCbG9ja1NldDo6ZGVsZXRlVW5tYXJrZWRBbmRVbnJlZmVy
ZW5jZWQpOgorICAgICAgICAoSlNDOjpDb2RlQmxvY2tTZXQ6OnByb21vdGVOZXdDb2RlQmxvY2tz
KToKKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrU2V0Ojp0cmFjZU1hcmtlZCk6CisgICAgICAgIChK
U0M6OkNvZGVCbG9ja1NldDo6cmVtZW1iZXJDdXJyZW50bHlFeGVjdXRpbmdDb2RlQmxvY2tzKToK
KyAgICAgICAgKiBoZWFwL0NvZGVCbG9ja1NldC5oOgorICAgICAgICAoSlNDOjpDb2RlQmxvY2tT
ZXQ6Oml0ZXJhdGUpOgorICAgICAgICAqIGhlYXAvSGVhcC5jcHA6CisgICAgICAgIChKU0M6Okhl
YXA6OmNsZWFyQ29kZUJsb2NrTWFya3NGb3JSZW1lbWJlcmVkRXhlY3V0YWJsZXMpOgorICAgICAg
ICAoSlNDOjpIZWFwOjptYXJrUm9vdHMpOgorICAgICAgICAoSlNDOjpIZWFwOjpkZWxldGVBbGxD
b21waWxlZENvZGUpOgorICAgICAgICAoSlNDOjpIZWFwOjpkZWxldGVVbm1hcmtlZENvbXBpbGVk
Q29kZSk6CisgICAgICAgIChKU0M6OkhlYXA6OmFkZENvbXBpbGVkQ29kZSk6CisgICAgICAgICog
aGVhcC9IZWFwLmg6CisgICAgICAgICogcnVudGltZS9FeGVjdXRhYmxlLmNwcDoKKyAgICAgICAg
KEpTQzo6U2NyaXB0RXhlY3V0YWJsZTo6Y2xlYXJBbHRlcm5hdGl2ZUNoYWluTWFya3MpOgorICAg
ICAgICAoSlNDOjpFdmFsRXhlY3V0YWJsZTo6Y2xlYXJDb2RlQmxvY2tNYXJrcyk6CisgICAgICAg
IChKU0M6OlByb2dyYW1FeGVjdXRhYmxlOjpjbGVhckNvZGVCbG9ja01hcmtzKToKKyAgICAgICAg
KEpTQzo6RnVuY3Rpb25FeGVjdXRhYmxlOjpjbGVhckNvZGVCbG9ja01hcmtzKToKKyAgICAgICAg
KiBydW50aW1lL0V4ZWN1dGFibGUuaDoKKyAgICAgICAgKEpTQzo6U2NyaXB0RXhlY3V0YWJsZTo6
Y2xlYXJDb2RlQmxvY2tNYXJrcyk6CisKIDIwMTQtMDEtMzAgIFphbiBEb2JlcnNlayAgPHpkb2Jl
cnNla0BpZ2FsaWEuY29tPgogCiAgICAgICAgIFtHVEtdIE9ubHkgZGlzYWJsZSAtZnRyZWUtZGNl
IG9wdGltaXphdGlvbiB3aGVuIGNvbXBpbGluZyB3aXRoIEdDQwpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5jcHAJKHJldmlzaW9uIDE2MzAzOCkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0xNDg1LDYgKzE0ODUsOCBAQCBDb2RlQmxvY2s6OkNvZGVCbG9jayhDb3B5UGFyc2Vk
QmxvY2tUYWcsCiAgICAgLCBtX2FjdGl2YXRpb25SZWdpc3RlcihvdGhlci5tX2FjdGl2YXRpb25S
ZWdpc3RlcikKICAgICAsIG1faXNTdHJpY3RNb2RlKG90aGVyLm1faXNTdHJpY3RNb2RlKQogICAg
ICwgbV9uZWVkc0FjdGl2YXRpb24ob3RoZXIubV9uZWVkc0FjdGl2YXRpb24pCisgICAgLCBtX21h
eUJlRXhlY3V0aW5nKGZhbHNlKQorICAgICwgbV92aXNpdEFnZ3JlZ2F0ZUhhc0JlZW5DYWxsZWQo
ZmFsc2UpCiAgICAgLCBtX3NvdXJjZShvdGhlci5tX3NvdXJjZSkKICAgICAsIG1fc291cmNlT2Zm
c2V0KG90aGVyLm1fc291cmNlT2Zmc2V0KQogICAgICwgbV9maXJzdExpbmVDb2x1bW5PZmZzZXQo
b3RoZXIubV9maXJzdExpbmVDb2x1bW5PZmZzZXQpCkBAIC0xNTQxLDYgKzE1NDMsOCBAQCBDb2Rl
QmxvY2s6OkNvZGVCbG9jayhTY3JpcHRFeGVjdXRhYmxlKiBvCiAgICAgLCBtX2FjdGl2YXRpb25S
ZWdpc3Rlcih1bmxpbmtlZENvZGVCbG9jay0+YWN0aXZhdGlvblJlZ2lzdGVyKCkpCiAgICAgLCBt
X2lzU3RyaWN0TW9kZSh1bmxpbmtlZENvZGVCbG9jay0+aXNTdHJpY3RNb2RlKCkpCiAgICAgLCBt
X25lZWRzQWN0aXZhdGlvbih1bmxpbmtlZENvZGVCbG9jay0+bmVlZHNGdWxsU2NvcGVDaGFpbigp
ICYmIHVubGlua2VkQ29kZUJsb2NrLT5jb2RlVHlwZSgpID09IEZ1bmN0aW9uQ29kZSkKKyAgICAs
IG1fbWF5QmVFeGVjdXRpbmcoZmFsc2UpCisgICAgLCBtX3Zpc2l0QWdncmVnYXRlSGFzQmVlbkNh
bGxlZChmYWxzZSkKICAgICAsIG1fc291cmNlKHNvdXJjZVByb3ZpZGVyKQogICAgICwgbV9zb3Vy
Y2VPZmZzZXQoc291cmNlT2Zmc2V0KQogICAgICwgbV9maXJzdExpbmVDb2x1bW5PZmZzZXQoZmly
c3RMaW5lQ29sdW1uT2Zmc2V0KQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2Rl
L0NvZGVCbG9jay5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29k
ZS9Db2RlQmxvY2suaAkocmV2aXNpb24gMTYzMDM4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2J5dGVjb2RlL0NvZGVCbG9jay5oCSh3b3JraW5nIGNvcHkpCkBAIC0xNDQsNiArMTQ0LDcgQEAg
cHVibGljOgogICAgIENvZGVCbG9jayogYmFzZWxpbmVWZXJzaW9uKCk7CiAKICAgICB2b2lkIHZp
c2l0QWdncmVnYXRlKFNsb3RWaXNpdG9yJik7CisgICAgdm9pZCBjbGVhck1hcmsoKSB7IG1fdmlz
aXRBZ2dyZWdhdGVIYXNCZWVuQ2FsbGVkID0gZmFsc2U7IH0KIAogICAgIHZvaWQgZHVtcEJ5dGVj
b2RlKFByaW50U3RyZWFtJiA9IFdURjo6ZGF0YUZpbGUoKSk7CiAgICAgdm9pZCBkdW1wQnl0ZWNv
ZGUoUHJpbnRTdHJlYW0mLCB1bnNpZ25lZCBieXRlY29kZU9mZnNldCk7CkBAIC0xMjc4LDEzICsx
Mjc5LDEzIEBAIGlubGluZSB2b2lkIENvZGVCbG9ja1NldDo6bWFyayh2b2lkKiBjYW4KICAgICBp
ZiAodmFsdWUgKyAxIDw9IDEpCiAgICAgICAgIHJldHVybjsKICAgICAKLSAgICBIYXNoU2V0PENv
ZGVCbG9jayo+OjppdGVyYXRvciBpdGVyID0gbV9zZXQuZmluZChzdGF0aWNfY2FzdDxDb2RlQmxv
Y2sqPihjYW5kaWRhdGVDb2RlQmxvY2spKTsKLSAgICBpZiAoaXRlciA9PSBtX3NldC5lbmQoKSkK
KyAgICBDb2RlQmxvY2sqIGNvZGVCbG9jayA9IHN0YXRpY19jYXN0PENvZGVCbG9jayo+KGNhbmRp
ZGF0ZUNvZGVCbG9jayk7CisgICAgaWYgKCFtX29sZENvZGVCbG9ja3MuY29udGFpbnMoY29kZUJs
b2NrKSAmJiAhbV9uZXdDb2RlQmxvY2tzLmNvbnRhaW5zKGNvZGVCbG9jaykpCiAgICAgICAgIHJl
dHVybjsKICAgICAKLSAgICAoKml0ZXIpLT5tX21heUJlRXhlY3V0aW5nID0gdHJ1ZTsKKyAgICBj
b2RlQmxvY2stPm1fbWF5QmVFeGVjdXRpbmcgPSB0cnVlOwogI2lmIEVOQUJMRShHR0MpCi0gICAg
bV9jdXJyZW50bHlFeGVjdXRpbmcuYXBwZW5kKHN0YXRpY19jYXN0PENvZGVCbG9jayo+KGNhbmRp
ZGF0ZUNvZGVCbG9jaykpOworICAgIG1fY3VycmVudGx5RXhlY3V0aW5nLmFkZChjb2RlQmxvY2sp
OwogI2VuZGlmCiB9CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0NvZGVCbG9j
a1NldC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvQ29kZUJs
b2NrU2V0LmNwcAkocmV2aXNpb24gMTYzMDM4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hl
YXAvQ29kZUJsb2NrU2V0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzcsNDQgKzM3LDQ1IEBAIENv
ZGVCbG9ja1NldDo6Q29kZUJsb2NrU2V0KCkgeyB9CiAKIENvZGVCbG9ja1NldDo6fkNvZGVCbG9j
a1NldCgpCiB7Ci0gICAgSGFzaFNldDxDb2RlQmxvY2sqPjo6aXRlcmF0b3IgaXRlciA9IG1fc2V0
LmJlZ2luKCk7Ci0gICAgSGFzaFNldDxDb2RlQmxvY2sqPjo6aXRlcmF0b3IgZW5kID0gbV9zZXQu
ZW5kKCk7Ci0gICAgZm9yICg7IGl0ZXIgIT0gZW5kOyArK2l0ZXIpCi0gICAgICAgICgqaXRlcikt
PmRlcmVmKCk7CisgICAgZm9yIChDb2RlQmxvY2sqIGNvZGVCbG9jayA6IG1fb2xkQ29kZUJsb2Nr
cykKKyAgICAgICAgY29kZUJsb2NrLT5kZXJlZigpOworICAgIGZvciAoQ29kZUJsb2NrKiBjb2Rl
QmxvY2sgOiBtX25ld0NvZGVCbG9ja3MpCisgICAgICAgIGNvZGVCbG9jay0+ZGVyZWYoKTsKIH0K
IAogdm9pZCBDb2RlQmxvY2tTZXQ6OmFkZChQYXNzUmVmUHRyPENvZGVCbG9jaz4gY29kZUJsb2Nr
KQogewogICAgIENvZGVCbG9jayogYmxvY2sgPSBjb2RlQmxvY2subGVha1JlZigpOwotICAgIGJv
b2wgaXNOZXdFbnRyeSA9IG1fc2V0LmFkZChibG9jaykuaXNOZXdFbnRyeTsKKyAgICBib29sIGlz
TmV3RW50cnkgPSBtX25ld0NvZGVCbG9ja3MuYWRkKGJsb2NrKS5pc05ld0VudHJ5OwogICAgIEFT
U0VSVF9VTlVTRUQoaXNOZXdFbnRyeSwgaXNOZXdFbnRyeSk7CisgICAgQVNTRVJUKCFtX29sZENv
ZGVCbG9ja3MuY29udGFpbnMoYmxvY2spKTsKIH0KIAotdm9pZCBDb2RlQmxvY2tTZXQ6OmNsZWFy
TWFya3MoKQordm9pZCBDb2RlQmxvY2tTZXQ6OmNsZWFyTWFya3MoSGVhcE9wZXJhdGlvbiBjb2xs
ZWN0aW9uVHlwZSkKIHsKLSAgICBIYXNoU2V0PENvZGVCbG9jayo+OjppdGVyYXRvciBpdGVyID0g
bV9zZXQuYmVnaW4oKTsKLSAgICBIYXNoU2V0PENvZGVCbG9jayo+OjppdGVyYXRvciBlbmQgPSBt
X3NldC5lbmQoKTsKLSAgICBmb3IgKDsgaXRlciAhPSBlbmQ7ICsraXRlcikgewotICAgICAgICBD
b2RlQmxvY2sqIGNvZGVCbG9jayA9ICppdGVyOworICAgIGlmIChjb2xsZWN0aW9uVHlwZSA9PSBF
ZGVuQ29sbGVjdGlvbikKKyAgICAgICAgcmV0dXJuOworCisgICAgcHJvbW90ZU5ld0NvZGVCbG9j
a3MoKTsKKworICAgIGZvciAoQ29kZUJsb2NrKiBjb2RlQmxvY2sgOiBtX29sZENvZGVCbG9ja3Mp
IHsKICAgICAgICAgY29kZUJsb2NrLT5tX21heUJlRXhlY3V0aW5nID0gZmFsc2U7CiAgICAgICAg
IGNvZGVCbG9jay0+bV92aXNpdEFnZ3JlZ2F0ZUhhc0JlZW5DYWxsZWQgPSBmYWxzZTsKICAgICB9
CiB9CiAKLXZvaWQgQ29kZUJsb2NrU2V0OjpkZWxldGVVbm1hcmtlZEFuZFVucmVmZXJlbmNlZCgp
Cit2b2lkIENvZGVCbG9ja1NldDo6ZGVsZXRlVW5tYXJrZWRBbmRVbnJlZmVyZW5jZWQoSGVhcE9w
ZXJhdGlvbiBjb2xsZWN0aW9uVHlwZSkKIHsKICAgICAvLyBUaGlzIG5lZWRzIHRvIGJlIGEgZml4
cG9pbnQgYmVjYXVzZSBjb2RlIGJsb2NrcyB0aGF0IGFyZSB1bm1hcmtlZCBtYXkKICAgICAvLyBy
ZWZlciB0byBlYWNoIG90aGVyLiBGb3IgZXhhbXBsZSwgYSBERkcgY29kZSBibG9jayB0aGF0IGlz
IG93bmVkIGJ5CiAgICAgLy8gdGhlIEdDIG1heSByZWZlciB0byBhbiBGVEwgZm9yLWVudHJ5IGNv
ZGUgYmxvY2sgdGhhdCBpcyBhbHNvIG93bmVkIGJ5CiAgICAgLy8gdGhlIEdDLgorICAgIEhhc2hT
ZXQ8Q29kZUJsb2NrKj4mIGNvZGVCbG9ja3MgPSBjb2xsZWN0aW9uVHlwZSA9PSBFZGVuQ29sbGVj
dGlvbiA/IG1fbmV3Q29kZUJsb2NrcyA6IG1fb2xkQ29kZUJsb2NrczsKICAgICBWZWN0b3I8Q29k
ZUJsb2NrKiwgMTY+IHRvUmVtb3ZlOwogICAgIGlmICh2ZXJib3NlKQotICAgICAgICBkYXRhTG9n
KCJGaXhwb2ludGluZyBvdmVyIHVubWFya2VkLCBzZXQgc2l6ZSA9ICIsIG1fc2V0LnNpemUoKSwg
Ii4uLlxuIik7CisgICAgICAgIGRhdGFMb2coIkZpeHBvaW50aW5nIG92ZXIgdW5tYXJrZWQsIHNl
dCBzaXplID0gIiwgY29kZUJsb2Nrcy5zaXplKCksICIuLi5cbiIpOwogICAgIGZvciAoOzspIHsK
LSAgICAgICAgSGFzaFNldDxDb2RlQmxvY2sqPjo6aXRlcmF0b3IgaXRlciA9IG1fc2V0LmJlZ2lu
KCk7Ci0gICAgICAgIEhhc2hTZXQ8Q29kZUJsb2NrKj46Oml0ZXJhdG9yIGVuZCA9IG1fc2V0LmVu
ZCgpOwotICAgICAgICBmb3IgKDsgaXRlciAhPSBlbmQ7ICsraXRlcikgewotICAgICAgICAgICAg
Q29kZUJsb2NrKiBjb2RlQmxvY2sgPSAqaXRlcjsKKyAgICAgICAgZm9yIChDb2RlQmxvY2sqIGNv
ZGVCbG9jayA6IGNvZGVCbG9ja3MpIHsKICAgICAgICAgICAgIGlmICghY29kZUJsb2NrLT5oYXNP
bmVSZWYoKSkKICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgIGlmIChjb2Rl
QmxvY2stPm1fbWF5QmVFeGVjdXRpbmcpCkBAIC04NywyMSArODgsMjYgQEAgdm9pZCBDb2RlQmxv
Y2tTZXQ6OmRlbGV0ZVVubWFya2VkQW5kVW5yZQogICAgICAgICBpZiAodG9SZW1vdmUuaXNFbXB0
eSgpKQogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IHRvUmVt
b3ZlLnNpemUoKTsgaS0tOykKLSAgICAgICAgICAgIG1fc2V0LnJlbW92ZSh0b1JlbW92ZVtpXSk7
CisgICAgICAgICAgICBjb2RlQmxvY2tzLnJlbW92ZSh0b1JlbW92ZVtpXSk7CiAgICAgICAgIHRv
UmVtb3ZlLnJlc2l6ZSgwKTsKICAgICB9CisKKyAgICBpZiAoY29sbGVjdGlvblR5cGUgPT0gRWRl
bkNvbGxlY3Rpb24pCisgICAgICAgIHByb21vdGVOZXdDb2RlQmxvY2tzKCk7Cit9CisKK3ZvaWQg
Q29kZUJsb2NrU2V0Ojpwcm9tb3RlTmV3Q29kZUJsb2NrcygpCit7CisgICAgbV9vbGRDb2RlQmxv
Y2tzLmFkZChtX25ld0NvZGVCbG9ja3MuYmVnaW4oKSwgbV9uZXdDb2RlQmxvY2tzLmVuZCgpKTsK
KyAgICBtX25ld0NvZGVCbG9ja3MuY2xlYXIoKTsKIH0KIAogdm9pZCBDb2RlQmxvY2tTZXQ6OnRy
YWNlTWFya2VkKFNsb3RWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIGlmICh2ZXJib3NlKQotICAg
ICAgICBkYXRhTG9nKCJUcmFjaW5nICIsIG1fc2V0LnNpemUoKSwgIiBjb2RlIGJsb2Nrcy5cbiIp
OwotICAgIEhhc2hTZXQ8Q29kZUJsb2NrKj46Oml0ZXJhdG9yIGl0ZXIgPSBtX3NldC5iZWdpbigp
OwotICAgIEhhc2hTZXQ8Q29kZUJsb2NrKj46Oml0ZXJhdG9yIGVuZCA9IG1fc2V0LmVuZCgpOwot
ICAgIGZvciAoOyBpdGVyICE9IGVuZDsgKytpdGVyKSB7Ci0gICAgICAgIENvZGVCbG9jayogY29k
ZUJsb2NrID0gKml0ZXI7Ci0gICAgICAgIGlmICghY29kZUJsb2NrLT5tX21heUJlRXhlY3V0aW5n
KQotICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIGRhdGFMb2coIlRyYWNpbmcgIiwgbV9j
dXJyZW50bHlFeGVjdXRpbmcuc2l6ZSgpLCAiIGNvZGUgYmxvY2tzLlxuIik7CisgICAgZm9yIChD
b2RlQmxvY2sqIGNvZGVCbG9jayA6IG1fY3VycmVudGx5RXhlY3V0aW5nKSB7CisgICAgICAgIEFT
U0VSVChjb2RlQmxvY2stPm1fbWF5QmVFeGVjdXRpbmcpOwogICAgICAgICBjb2RlQmxvY2stPnZp
c2l0QWdncmVnYXRlKHZpc2l0b3IpOwogICAgIH0KIH0KQEAgLTEwOSw4ICsxMTUsMTMgQEAgdm9p
ZCBDb2RlQmxvY2tTZXQ6OnRyYWNlTWFya2VkKFNsb3RWaXNpdAogdm9pZCBDb2RlQmxvY2tTZXQ6
OnJlbWVtYmVyQ3VycmVudGx5RXhlY3V0aW5nQ29kZUJsb2NrcyhIZWFwKiBoZWFwKQogewogI2lm
IEVOQUJMRShHR0MpCi0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtX2N1cnJlbnRseUV4ZWN1
dGluZy5zaXplKCk7ICsraSkKLSAgICAgICAgaGVhcC0+YWRkVG9SZW1lbWJlcmVkU2V0KG1fY3Vy
cmVudGx5RXhlY3V0aW5nW2ldLT5vd25lckV4ZWN1dGFibGUoKSk7CisgICAgZm9yIChDb2RlQmxv
Y2sqIGNvZGVCbG9jayA6IG1fY3VycmVudGx5RXhlY3V0aW5nKSB7CisgICAgICAgIEFTU0VSVChj
b2RlQmxvY2stPm1fbWF5QmVFeGVjdXRpbmcpOworICAgICAgICBoZWFwLT5hZGRUb1JlbWVtYmVy
ZWRTZXQoY29kZUJsb2NrLT5vd25lckV4ZWN1dGFibGUoKSk7CisgICAgICAgIC8vIFdlIGNsZWFy
IG1fbWF5QmVFeGVjdXRpbmcgaGVyZSBzbyB0aGF0IHdlIGRvbid0IGhhdmUgdG8gY2xlYXIgaXQg
YXQgdGhlIAorICAgICAgICAvLyBiZWdpbmluZyBvZiB0aGUgbmV4dCBFZGVuQ29sbGVjdGlvbi4K
KyAgICAgICAgY29kZUJsb2NrLT5tX21heUJlRXhlY3V0aW5nID0gZmFsc2U7CisgICAgfQogICAg
IG1fY3VycmVudGx5RXhlY3V0aW5nLmNsZWFyKCk7CiAjZWxzZQogICAgIFVOVVNFRF9QQVJBTSho
ZWFwKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0NvZGVCbG9ja1NldC5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0NvZGVCbG9ja1NldC5oCShy
ZXZpc2lvbiAxNjMwMzgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9Db2RlQmxvY2tT
ZXQuaAkod29ya2luZyBjb3B5KQpAQCAtMjYsNiArMjYsNyBAQAogI2lmbmRlZiBDb2RlQmxvY2tT
ZXRfaAogI2RlZmluZSBDb2RlQmxvY2tTZXRfaAogCisjaW5jbHVkZSAiSGVhcE9wZXJhdGlvbi5o
IgogI2luY2x1ZGUgPHd0Zi9IYXNoU2V0Lmg+CiAjaW5jbHVkZSA8d3RmL05vbmNvcHlhYmxlLmg+
CiAjaW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIuaD4KQEAgLTUzLDcgKzU0LDcgQEAgcHVibGljOgog
ICAgIHZvaWQgYWRkKFBhc3NSZWZQdHI8Q29kZUJsb2NrPik7CiAgICAgCiAgICAgLy8gQ2xlYXIg
YWxsIG1hcmsgYml0cyBhc3NvY2lhdGVkIHdpdGggREZHIGNvZGUgYmxvY2tzLgotICAgIHZvaWQg
Y2xlYXJNYXJrcygpOworICAgIHZvaWQgY2xlYXJNYXJrcyhIZWFwT3BlcmF0aW9uKTsKICAgICAK
ICAgICAvLyBNYXJrIGEgcG9pbnRlciB0aGF0IG1heSBiZSBhIENvZGVCbG9jayB0aGF0IGJlbG9u
Z3MgdG8gdGhlIHNldCBvZiBERkcKICAgICAvLyBibG9ja3MuIFRoaXMgaXMgZGVmaW5lZCBpbiBD
b2RlQmxvY2suaC4KQEAgLTYxLDcgKzYyLDcgQEAgcHVibGljOgogICAgIAogICAgIC8vIERlbGV0
ZSBhbGwgY29kZSBibG9ja3MgdGhhdCBhcmUgb25seSByZWZlcmVuY2VkIGJ5IHRoaXMgc2V0IChp
LmUuIG93bmVkCiAgICAgLy8gYnkgdGhpcyBzZXQpLCBhbmQgdGhhdCBoYXZlIG5vdCBiZWVuIG1h
cmtlZC4KLSAgICB2b2lkIGRlbGV0ZVVubWFya2VkQW5kVW5yZWZlcmVuY2VkKCk7CisgICAgdm9p
ZCBkZWxldGVVbm1hcmtlZEFuZFVucmVmZXJlbmNlZChIZWFwT3BlcmF0aW9uKTsKICAgICAKICAg
ICAvLyBUcmFjZSBhbGwgbWFya2VkIGNvZGUgYmxvY2tzLiBUaGUgQ29kZUJsb2NrIGlzIGZyZWUg
dG8gbWFrZSB1c2Ugb2YKICAgICAvLyBtYXlCZUV4ZWN1dGluZy4KQEAgLTc2LDcgKzc3LDEzIEBA
IHB1YmxpYzoKICAgICAvLyB2aXNpdGVkLgogICAgIHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmN0b3I+
IHZvaWQgaXRlcmF0ZShGdW5jdG9yJiBmdW5jdG9yKQogICAgIHsKLSAgICAgICAgZm9yIChhdXRv
ICZjb2RlQmxvY2sgOiBtX3NldCkgeworICAgICAgICBmb3IgKGF1dG8gJmNvZGVCbG9jayA6IG1f
b2xkQ29kZUJsb2NrcykgeworICAgICAgICAgICAgYm9vbCBkb25lID0gZnVuY3Rvcihjb2RlQmxv
Y2spOworICAgICAgICAgICAgaWYgKGRvbmUpCisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgIH0KKworICAgICAgICBmb3IgKGF1dG8gJmNvZGVCbG9jayA6IG1fbmV3Q29kZUJsb2Nrcykg
ewogICAgICAgICAgICAgYm9vbCBkb25lID0gZnVuY3Rvcihjb2RlQmxvY2spOwogICAgICAgICAg
ICAgaWYgKGRvbmUpCiAgICAgICAgICAgICAgICAgYnJlYWs7CkBAIC04NCwxMSArOTEsMTQgQEAg
cHVibGljOgogICAgIH0KIAogcHJpdmF0ZToKKyAgICB2b2lkIHByb21vdGVOZXdDb2RlQmxvY2tz
KCk7CisKICAgICAvLyBUaGlzIGlzIG5vdCBhIHNldCBvZiBSZWZQdHI8Q29kZUJsb2NrPiBiZWNh
dXNlIHdlIG5lZWQgdG8gYmUgYWJsZSB0byBmaW5kCiAgICAgLy8gYXJiaXRyYXJ5IGJvZ3VzIHBv
aW50ZXJzLiBJIGNvdWxkIGhhdmUgd3JpdHRlbiBhIHRoaW5neSB0aGF0IGhhZCBwZWVrIHR5cGVz
CiAgICAgLy8gYW5kIGFsbCwgYnV0IHRoYXQgc2VlbWVkIGxpa2Ugb3ZlcmtpbGwuCi0gICAgSGFz
aFNldDxDb2RlQmxvY2sqID4gbV9zZXQ7Ci0gICAgVmVjdG9yPENvZGVCbG9jayo+IG1fY3VycmVu
dGx5RXhlY3V0aW5nOworICAgIEhhc2hTZXQ8Q29kZUJsb2NrKj4gbV9vbGRDb2RlQmxvY2tzOwor
ICAgIEhhc2hTZXQ8Q29kZUJsb2NrKj4gbV9uZXdDb2RlQmxvY2tzOworICAgIEhhc2hTZXQ8Q29k
ZUJsb2NrKj4gbV9jdXJyZW50bHlFeGVjdXRpbmc7CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBKU0MK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXAuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXAuY3BwCShyZXZpc2lvbiAxNjMwMzgpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
NDQwLDYgKzQ0MCwxOSBAQCB2b2lkIEhlYXA6OmdldENvbnNlcnZhdGl2ZVJlZ2lzdGVyUm9vdHMo
CiAgICAgfQogfQogCit2b2lkIEhlYXA6OmNsZWFyQ29kZUJsb2NrTWFya3NGb3JSZW1lbWJlcmVk
RXhlY3V0YWJsZXMoVmVjdG9yPGNvbnN0IEpTQ2VsbCo+JiByZW1lbWJlcmVkU2V0KQoreworICAg
IEdDUEhBU0UoQ2xlYXJDb2RlQmxvY2tNYXJrc0ZvclJlbWVtYmVyZWRFeGVjdXRhYmxlcyk7Cisg
ICAgaWYgKG1fb3BlcmF0aW9uSW5Qcm9ncmVzcyAhPSBFZGVuQ29sbGVjdGlvbikKKyAgICAgICAg
cmV0dXJuOworCisgICAgZm9yIChjb25zdCBKU0NlbGwqIGNlbGwgOiByZW1lbWJlcmVkU2V0KSB7
CisgICAgICAgIGlmICghY2VsbC0+aW5oZXJpdHMoU2NyaXB0RXhlY3V0YWJsZTo6aW5mbygpKSkK
KyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICBqc0Nhc3Q8Y29uc3QgU2NyaXB0RXhlY3V0
YWJsZSo+KGNlbGwpLT5jbGVhckNvZGVCbG9ja01hcmtzKCk7CisgICAgfQorfQorCiB2b2lkIEhl
YXA6Om1hcmtSb290cygpCiB7CiAgICAgU2FtcGxpbmdSZWdpb24gc2FtcGxpbmdSZWdpb24oIkdh
cmJhZ2UgQ29sbGVjdGlvbjogVHJhY2luZyIpOwpAQCAtNDUxLDcgKzQ2NCw3IEBAIHZvaWQgSGVh
cDo6bWFya1Jvb3RzKCkKICAgICBkb3VibGUgZ2NTdGFydFRpbWUgPSBXVEY6Om1vbm90b25pY2Fs
bHlJbmNyZWFzaW5nVGltZSgpOwogI2VuZGlmCiAKLSAgICBtX2NvZGVCbG9ja3MuY2xlYXJNYXJr
cygpOworICAgIG1fY29kZUJsb2Nrcy5jbGVhck1hcmtzKG1fb3BlcmF0aW9uSW5Qcm9ncmVzcyk7
CiAgICAgdm9pZCogZHVtbXk7CiAKICAgICAvLyBXZSBnYXRoZXIgY29uc2VydmF0aXZlIHJvb3Rz
IGJlZm9yZSBjbGVhcmluZyBtYXJrIGJpdHMgYmVjYXVzZSBjb25zZXJ2YXRpdmUKQEAgLTQ5NSw2
ICs1MDgsOCBAQCB2b2lkIEhlYXA6Om1hcmtSb290cygpCiAjaWYgRU5BQkxFKEdHQykKICAgICBW
ZWN0b3I8Y29uc3QgSlNDZWxsKj4gcmVtZW1iZXJlZFNldChtX3Nsb3RWaXNpdG9yLm1hcmtTdGFj
aygpLnNpemUoKSk7CiAgICAgbV9zbG90VmlzaXRvci5tYXJrU3RhY2soKS5maWxsVmVjdG9yKHJl
bWVtYmVyZWRTZXQpOworCisgICAgY2xlYXJDb2RlQmxvY2tNYXJrc0ZvclJlbWVtYmVyZWRFeGVj
dXRhYmxlcyhyZW1lbWJlcmVkU2V0KTsKICNlbmRpZgogCiAgICAgewpAQCAtNzI0LDIwICs3Mzks
MzIgQEAgdm9pZCBIZWFwOjpkZWxldGVBbGxDb21waWxlZENvZGUoKQogICAgIGlmIChtX3ZtLT5l
bnRyeVNjb3BlKQogICAgICAgICByZXR1cm47CiAKLSAgICBmb3IgKEV4ZWN1dGFibGVCYXNlKiBj
dXJyZW50ID0gbV9jb21waWxlZENvZGUuaGVhZCgpOyBjdXJyZW50OyBjdXJyZW50ID0gY3VycmVu
dC0+bmV4dCgpKSB7CisgICAgZm9yIChFeGVjdXRhYmxlQmFzZSogY3VycmVudCA9IG1fb2xkQ29t
cGlsZWRDb2RlLmhlYWQoKTsgY3VycmVudDsgY3VycmVudCA9IGN1cnJlbnQtPm5leHQoKSkgewog
ICAgICAgICBpZiAoIWN1cnJlbnQtPmlzRnVuY3Rpb25FeGVjdXRhYmxlKCkpCiAgICAgICAgICAg
ICBjb250aW51ZTsKICAgICAgICAgc3RhdGljX2Nhc3Q8RnVuY3Rpb25FeGVjdXRhYmxlKj4oY3Vy
cmVudCktPmNsZWFyQ29kZUlmTm90Q29tcGlsaW5nKCk7CiAgICAgfQogCi0gICAgbV9jb2RlQmxv
Y2tzLmNsZWFyTWFya3MoKTsKLSAgICBtX2NvZGVCbG9ja3MuZGVsZXRlVW5tYXJrZWRBbmRVbnJl
ZmVyZW5jZWQoKTsKKyAgICBmb3IgKEV4ZWN1dGFibGVCYXNlKiBjdXJyZW50ID0gbV9uZXdDb21w
aWxlZENvZGUuaGVhZCgpOyBjdXJyZW50OyBjdXJyZW50ID0gY3VycmVudC0+bmV4dCgpKSB7Cisg
ICAgICAgIGlmICghY3VycmVudC0+aXNGdW5jdGlvbkV4ZWN1dGFibGUoKSkKKyAgICAgICAgICAg
IGNvbnRpbnVlOworICAgICAgICBzdGF0aWNfY2FzdDxGdW5jdGlvbkV4ZWN1dGFibGUqPihjdXJy
ZW50KS0+Y2xlYXJDb2RlSWZOb3RDb21waWxpbmcoKTsKKyAgICB9CisKKyAgICBtX2NvZGVCbG9j
a3MuY2xlYXJNYXJrcyhGdWxsQ29sbGVjdGlvbik7CisgICAgbV9jb2RlQmxvY2tzLmRlbGV0ZVVu
bWFya2VkQW5kVW5yZWZlcmVuY2VkKEZ1bGxDb2xsZWN0aW9uKTsKIH0KIAogdm9pZCBIZWFwOjpk
ZWxldGVVbm1hcmtlZENvbXBpbGVkQ29kZSgpCiB7CisgICAgRG91Ymx5TGlua2VkTGlzdDxFeGVj
dXRhYmxlQmFzZT4qIGNvbXBpbGVkQ29kZSA9ICZtX25ld0NvbXBpbGVkQ29kZTsKKyAgICBpZiAo
bV9vcGVyYXRpb25JblByb2dyZXNzICE9IEVkZW5Db2xsZWN0aW9uKSB7CisgICAgICAgIG1fb2xk
Q29tcGlsZWRDb2RlLmFwcGVuZChtX25ld0NvbXBpbGVkQ29kZSk7CisgICAgICAgIGNvbXBpbGVk
Q29kZSA9ICZtX29sZENvbXBpbGVkQ29kZTsKKyAgICB9CisKICAgICBFeGVjdXRhYmxlQmFzZSog
bmV4dDsKLSAgICBmb3IgKEV4ZWN1dGFibGVCYXNlKiBjdXJyZW50ID0gbV9jb21waWxlZENvZGUu
aGVhZCgpOyBjdXJyZW50OyBjdXJyZW50ID0gbmV4dCkgeworICAgIGZvciAoRXhlY3V0YWJsZUJh
c2UqIGN1cnJlbnQgPSBjb21waWxlZENvZGUtPmhlYWQoKTsgY3VycmVudDsgY3VycmVudCA9IG5l
eHQpIHsKICAgICAgICAgbmV4dCA9IGN1cnJlbnQtPm5leHQoKTsKICAgICAgICAgaWYgKGlzTWFy
a2VkKGN1cnJlbnQpKQogICAgICAgICAgICAgY29udGludWU7CkBAIC03NDUsMTAgKzc3MiwxMyBA
QCB2b2lkIEhlYXA6OmRlbGV0ZVVubWFya2VkQ29tcGlsZWRDb2RlKCkKICAgICAgICAgLy8gV2Ug
ZG8gdGhpcyBiZWNhdXNlIGV4ZWN1dGFibGUgbWVtb3J5IGlzIGxpbWl0ZWQgb24gc29tZSBwbGF0
Zm9ybXMgYW5kIGJlY2F1c2UKICAgICAgICAgLy8gQ29kZUJsb2NrIHJlcXVpcmVzIGVhZ2VyIGZp
bmFsaXphdGlvbi4KICAgICAgICAgRXhlY3V0YWJsZUJhc2U6OmNsZWFyQ29kZVZpcnR1YWwoY3Vy
cmVudCk7Ci0gICAgICAgIG1fY29tcGlsZWRDb2RlLnJlbW92ZShjdXJyZW50KTsKKyAgICAgICAg
Y29tcGlsZWRDb2RlLT5yZW1vdmUoY3VycmVudCk7CiAgICAgfQogCi0gICAgbV9jb2RlQmxvY2tz
LmRlbGV0ZVVubWFya2VkQW5kVW5yZWZlcmVuY2VkKCk7CisgICAgaWYgKG1fb3BlcmF0aW9uSW5Q
cm9ncmVzcyA9PSBFZGVuQ29sbGVjdGlvbikKKyAgICAgICAgbV9vbGRDb21waWxlZENvZGUuYXBw
ZW5kKG1fbmV3Q29tcGlsZWRDb2RlKTsKKworICAgIG1fY29kZUJsb2Nrcy5kZWxldGVVbm1hcmtl
ZEFuZFVucmVmZXJlbmNlZChtX29wZXJhdGlvbkluUHJvZ3Jlc3MpOwogICAgIG1faml0U3R1YlJv
dXRpbmVzLmRlbGV0ZVVubWFya2VkSmV0dGlzb25lZFN0dWJSb3V0aW5lcygpOwogfQogCkBAIC0x
MDMyLDcgKzEwNjIsOCBAQCB2b2lkIEhlYXA6OkZpbmFsaXplck93bmVyOjpmaW5hbGl6ZShIYW5k
CiAKIHZvaWQgSGVhcDo6YWRkQ29tcGlsZWRDb2RlKEV4ZWN1dGFibGVCYXNlKiBleGVjdXRhYmxl
KQogewotICAgIG1fY29tcGlsZWRDb2RlLmFwcGVuZChleGVjdXRhYmxlKTsKKyAgICBBU1NFUlQo
IWlzTWFya2VkKGV4ZWN1dGFibGUpKTsKKyAgICBtX25ld0NvbXBpbGVkQ29kZS5hcHBlbmQoZXhl
Y3V0YWJsZSk7CiB9CiAKIGNsYXNzIFpvbWJpZnkgOiBwdWJsaWMgTWFya2VkQmxvY2s6OlZvaWRG
dW5jdG9yIHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXAuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwLmgJKHJldmlzaW9uIDE2MzAz
OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXAuaAkod29ya2luZyBjb3B5KQpA
QCAtMjQ1LDYgKzI0NSw3IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICB2b2lkIG1hcmtSb290
cygpOwogICAgICAgICB2b2lkIG1hcmtQcm90ZWN0ZWRPYmplY3RzKEhlYXBSb290VmlzaXRvciYp
OwogICAgICAgICB2b2lkIG1hcmtUZW1wU29ydFZlY3RvcnMoSGVhcFJvb3RWaXNpdG9yJik7Cisg
ICAgICAgIHZvaWQgY2xlYXJDb2RlQmxvY2tNYXJrc0ZvclJlbWVtYmVyZWRFeGVjdXRhYmxlcyhW
ZWN0b3I8Y29uc3QgSlNDZWxsKj4mKTsKICAgICAgICAgdGVtcGxhdGUgPEhlYXBPcGVyYXRpb24g
Y29sbGVjdGlvblR5cGU+CiAgICAgICAgIHZvaWQgY29weUJhY2tpbmdTdG9yZXMoKTsKICAgICAg
ICAgdm9pZCBoYXJ2ZXN0V2Vha1JlZmVyZW5jZXMoKTsKQEAgLTMwOCw3ICszMDksOCBAQCBuYW1l
c3BhY2UgSlNDIHsKICAgICAgICAgZG91YmxlIG1fbGFzdEdDTGVuZ3RoOwogICAgICAgICBkb3Vi
bGUgbV9sYXN0Q29kZURpc2NhcmRUaW1lOwogCi0gICAgICAgIERvdWJseUxpbmtlZExpc3Q8RXhl
Y3V0YWJsZUJhc2U+IG1fY29tcGlsZWRDb2RlOworICAgICAgICBEb3VibHlMaW5rZWRMaXN0PEV4
ZWN1dGFibGVCYXNlPiBtX29sZENvbXBpbGVkQ29kZTsKKyAgICAgICAgRG91Ymx5TGlua2VkTGlz
dDxFeGVjdXRhYmxlQmFzZT4gbV9uZXdDb21waWxlZENvZGU7CiAgICAgICAgIAogICAgICAgICBP
d25QdHI8R0NBY3Rpdml0eUNhbGxiYWNrPiBtX2FjdGl2aXR5Q2FsbGJhY2s7CiAgICAgICAgIE93
blB0cjxJbmNyZW1lbnRhbFN3ZWVwZXI+IG1fc3dlZXBlcjsKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0V4ZWN1dGFibGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0V4ZWN1dGFibGUuY3BwCShyZXZpc2lvbiAxNjMwMzgpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9FeGVjdXRhYmxlLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtNjczLDQgKzY3MywyOCBAQCBDb2RlQmxvY2tIYXNoIFNjcmlwdEV4ZWN1dGFibGU6Omhh
c2hGb3IoCiAgICAgcmV0dXJuIENvZGVCbG9ja0hhc2goc291cmNlKCksIGtpbmQpOwogfQogCit2
b2lkIFNjcmlwdEV4ZWN1dGFibGU6OmNsZWFyQWx0ZXJuYXRpdmVDaGFpbk1hcmtzKENvZGVCbG9j
ayogY29kZUJsb2NrKQoreworICAgIHdoaWxlIChjb2RlQmxvY2spIHsKKyAgICAgICAgY29kZUJs
b2NrLT5jbGVhck1hcmsoKTsKKyAgICAgICAgY29kZUJsb2NrID0gY29kZUJsb2NrLT5hbHRlcm5h
dGl2ZSgpOworICAgIH0KK30KKwordm9pZCBFdmFsRXhlY3V0YWJsZTo6Y2xlYXJDb2RlQmxvY2tN
YXJrcygpIGNvbnN0Cit7CisgICAgY2xlYXJBbHRlcm5hdGl2ZUNoYWluTWFya3MobV9ldmFsQ29k
ZUJsb2NrLmdldCgpKTsKK30KKwordm9pZCBQcm9ncmFtRXhlY3V0YWJsZTo6Y2xlYXJDb2RlQmxv
Y2tNYXJrcygpIGNvbnN0Cit7CisgICAgY2xlYXJBbHRlcm5hdGl2ZUNoYWluTWFya3MobV9wcm9n
cmFtQ29kZUJsb2NrLmdldCgpKTsKK30KKwordm9pZCBGdW5jdGlvbkV4ZWN1dGFibGU6OmNsZWFy
Q29kZUJsb2NrTWFya3MoKSBjb25zdAoreworICAgIGNsZWFyQWx0ZXJuYXRpdmVDaGFpbk1hcmtz
KG1fY29kZUJsb2NrRm9yQ2FsbC5nZXQoKSk7CisgICAgY2xlYXJBbHRlcm5hdGl2ZUNoYWluTWFy
a3MobV9jb2RlQmxvY2tGb3JDb25zdHJ1Y3QuZ2V0KCkpOworfQorCiB9CkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9FeGVjdXRhYmxlLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRXhlY3V0YWJsZS5oCShyZXZpc2lvbiAxNjMwMzgpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9FeGVjdXRhYmxlLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTQwMCw2ICs0MDAsOCBAQCBwdWJsaWM6CiAgICAgYm9vbCBuZXZlcklubGluZSgpIGNv
bnN0IHsgcmV0dXJuIG1fbmV2ZXJJbmxpbmU7IH0KICAgICBib29sIGlzSW5saW5pbmdDYW5kaWRh
dGUoKSBjb25zdCB7IHJldHVybiAhbmV2ZXJJbmxpbmUoKTsgfQogCisgICAgc3RhdGljIHZvaWQg
Y2xlYXJBbHRlcm5hdGl2ZUNoYWluTWFya3MoQ29kZUJsb2NrKik7CisgICAgdm9pZCBjbGVhckNv
ZGVCbG9ja01hcmtzKCkgY29uc3Q7CiAgICAgdm9pZCB1bmxpbmtDYWxscygpOwogICAgICAgICAK
ICAgICBDb2RlRmVhdHVyZXMgZmVhdHVyZXMoKSBjb25zdCB7IHJldHVybiBtX2ZlYXR1cmVzOyB9
CkBAIC00ODAsNiArNDgyLDcgQEAgcHVibGljOgogICAgICAgICAKICAgICBERUNMQVJFX0lORk87
CiAKKyAgICB2b2lkIGNsZWFyQ29kZUJsb2NrTWFya3MoKSBjb25zdDsKICAgICB2b2lkIHVubGlu
a0NhbGxzKCk7CiAKICAgICB2b2lkIGNsZWFyQ29kZSgpOwpAQCAtNTM2LDYgKzUzOSw3IEBAIHB1
YmxpYzoKICAgICAgICAgCiAgICAgREVDTEFSRV9JTkZPOwogICAgICAgICAKKyAgICB2b2lkIGNs
ZWFyQ29kZUJsb2NrTWFya3MoKSBjb25zdDsKICAgICB2b2lkIHVubGlua0NhbGxzKCk7CiAKICAg
ICB2b2lkIGNsZWFyQ29kZSgpOwpAQCAtNjQ2LDYgKzY1MCw3IEBAIHB1YmxpYzoKICAgICAgICAg
CiAgICAgREVDTEFSRV9JTkZPOwogICAgICAgICAKKyAgICB2b2lkIGNsZWFyQ29kZUJsb2NrTWFy
a3MoKSBjb25zdDsKICAgICB2b2lkIHVubGlua0NhbGxzKCk7CiAKICAgICB2b2lkIGNsZWFyQ29k
ZSgpOwpAQCAtNzExLDYgKzcxNiwyMyBAQCBpbmxpbmUgdm9pZCBTY3JpcHRFeGVjdXRhYmxlOjp1
bmxpbmtDYWxsCiAgICAgfQogfQogCitpbmxpbmUgdm9pZCBTY3JpcHRFeGVjdXRhYmxlOjpjbGVh
ckNvZGVCbG9ja01hcmtzKCkgY29uc3QKK3sKKyAgICBzd2l0Y2ggKHN0cnVjdHVyZSgpLT50eXBl
SW5mbygpLnR5cGUoKSkgeworICAgIGNhc2UgRXZhbEV4ZWN1dGFibGVUeXBlOgorICAgICAgICBq
c0Nhc3Q8Y29uc3QgRXZhbEV4ZWN1dGFibGUqPih0aGlzKS0+Y2xlYXJDb2RlQmxvY2tNYXJrcygp
OworICAgICAgICBicmVhazsKKyAgICBjYXNlIFByb2dyYW1FeGVjdXRhYmxlVHlwZToKKyAgICAg
ICAganNDYXN0PGNvbnN0IFByb2dyYW1FeGVjdXRhYmxlKj4odGhpcyktPmNsZWFyQ29kZUJsb2Nr
TWFya3MoKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBGdW5jdGlvbkV4ZWN1dGFibGVUeXBl
OgorICAgICAgICBqc0Nhc3Q8Y29uc3QgRnVuY3Rpb25FeGVjdXRhYmxlKj4odGhpcyktPmNsZWFy
Q29kZUJsb2NrTWFya3MoKTsKKyAgICAgICAgYnJlYWs7CisgICAgZGVmYXVsdDoKKyAgICAgICAg
UkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICB9Cit9CisKIH0KIAogI2VuZGlmCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>228214</attachid>
            <date>2014-03-31 16:16:19 -0700</date>
            <delta_ts>2014-03-31 16:23:04 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-127152-20140331161559.patch</filename>
            <type>text/plain</type>
            <size>21594</size>
            <attacher name="Mark Hahnenberg">mhahnenberg</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTY2NTM5KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDU3IEBA
CisyMDE0LTAzLTMxICBNYXJrIEhhaG5lbmJlcmcgIDxtaGFobmVuYmVyZ0BhcHBsZS5jb20+CisK
KyAgICAgICAgQ29kZUJsb2NrU2V0IHNob3VsZCBiZSBnZW5lcmF0aW9uYWwKKyAgICAgICAgaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEyNzE1MgorCisgICAgICAgIFJl
dmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIER1cmluZyBFZGVuQ29sbGVjdGlv
bnMgd2Ugbm93IG9ubHkgdmlzaXQgdGhvc2UgQ29kZUJsb2NrcyB0aGF0OgorICAgICAgICBhKSBB
cmUgbmV3IHNpbmNlIHRoZSBsYXN0IGNvbGxlY3Rpb24gaWYgdGhleSB3ZXJlIHNvbWVob3cgb3Ro
ZXJ3aXNlIHJlYWNoYWJsZS4KKyAgICAgICAgYikgQXJlIHJlYWNoYWJsZSBmcm9tIGFuIEV4ZWN1
dGFibGUgdGhhdCBpcyBwYXJ0IG9mIHRoZSByZW1lbWJlcmVkIHNldC4KKworICAgICAgICAqIGJ5
dGVjb2RlL0NvZGVCbG9jay5jcHA6CisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6Q29kZUJsb2Nr
KTogSW5pdGlhbGl6ZSB1bmluaXRpYWxpemVkIHZhcmlhYmxlcy4KKyAgICAgICAgKEpTQzo6Q29k
ZUJsb2NrOjp2aXNpdEFnZ3JlZ2F0ZSk6IE1vdmUgdGhlIGFkZGl0aW9uIG9mIHRoZSB3ZWFrIHJl
ZmVyZW5jZSBoYXJ2ZXN0ZXIgYWZ0ZXIgdGhlCisgICAgICAgIHNob3VsZEltbWVkaWF0ZWx5QXNz
dW1lTGl2ZW5lc3NEdXJpbmdTY2FuIGNoZWNrIHNpbmNlIGl0J3MgcmVkdW5kYW50IGlmIHdlIGFz
c3VtZSBsaXZlbmVzcy4KKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpkZXRlcm1pbmVMaXZlbmVz
cyk6IFBhc3MgSGVhcE9wZXJhdGlvbiB0byBzaG91bGRJbW1lZGlhdGVseUFzc3VtZS4uLgorICAg
ICAgICAoSlNDOjpDb2RlQmxvY2s6OmZpbmFsaXplVW5jb25kaXRpb25hbGx5KTogRGl0dG8uCisg
ICAgICAgICogYnl0ZWNvZGUvQ29kZUJsb2NrLmg6CisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6
Zm9yRWFjaFJlbGF0ZWRDb2RlQmxvY2spOiBFeGVjdXRlcyBhIGZ1bmN0b3IgZm9yIGVhY2ggQ29k
ZUJsb2NrIHJlYWNoYWJsZSB2aWEgYWx0ZXJuYXRpdmUoKQorICAgICAgICAoSlNDOjpDb2RlQmxv
Y2s6OnNob3VsZEltbWVkaWF0ZWx5QXNzdW1lTGl2ZW5lc3NEdXJpbmdTY2FuKTogQXNzdW1lIHRo
YXQgYSB2aXNpdGVkIENvZGVCbG9jayBpcyBsaXZlIGR1cmluZyAKKyAgICAgICAgRWRlbkNvbGxl
Y3Rpb25zLgorICAgICAgICAoSlNDOjpDb2RlQmxvY2tTZXQ6Om1hcmspOiBBbHNvIGNoZWNrIHRo
ZSBzZXQgb2YgbmV3IENvZGVCbG9ja3MgZm9yIG1lbWViZXJzaGlwIHdoZW4gZG9pbmcgY29uc2Vy
dmF0aXZlIHNjYW5uaW5nLgorICAgICAgICAoSlNDOjpTY3JpcHRFeGVjdXRhYmxlOjpmb3JFYWNo
Q29kZUJsb2NrKTogRXhlY3V0ZXMgYSBmdW5jdG9yIGZvciBlYWNoIG9mIHRoaXMgRXhlY3V0YWJs
ZSdzIENvZGVCbG9ja3MuCisgICAgICAgICogaGVhcC9Db2RlQmxvY2tTZXQuY3BwOgorICAgICAg
ICAoSlNDOjpDb2RlQmxvY2tTZXQ6On5Db2RlQmxvY2tTZXQpOgorICAgICAgICAoSlNDOjpDb2Rl
QmxvY2tTZXQ6OmFkZCk6CisgICAgICAgIChKU0M6OkNvZGVCbG9ja1NldDo6cHJvbW90ZVlvdW5n
Q29kZUJsb2Nrcyk6IE1vdmVzIGFsbCBDb2RlQmxvY2tzIGN1cnJlbnRseSBpbiB0aGUgc2V0IG9m
IG5ldyBDb2RlQmxvY2tzIGludG8gCisgICAgICAgIHRoZSBzZXQgb2Ygb2xkIENvZGVCbG9ja3Mu
CisgICAgICAgIChKU0M6OkNvZGVCbG9ja1NldDo6Y2xlYXJBbGxNYXJrcyk6IENsZWFycyB0aGUg
bWFya3MgZm9yIGFsbCBDb2RlQmxvY2tzLiBPbmx5IHVzZWQgZHVyaW5nIEZ1bGxDb2xsZWN0aW9u
cy4KKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrU2V0OjpjbGVhck1hcmtzRm9yQ29kZUJsb2Nrc0lu
UmVtZW1iZXJlZEV4ZWN1dGFibGVzKTogQ2xlYXJzIHRoZSBtYXJrcyBmb3IgYWxsIENvZGVCbG9j
a3Mgb3duZWQgCisgICAgICAgIGJ5IEV4ZWN1dGFibGVzIGluIHRoZSByZW1lbWJlcmVkIHNldC4g
V2hlbiBhbiBFeGVjdXRhYmxlIGlzIGFkZGVkIHRvIHRoZSByZW1lbWJlcmVkIHNldCBpdCdzIHR5
cGljYWxseSBiZWNhdXNlIAorICAgICAgICB3ZSBuZWVkIHRvIGRvIHNvbWV0aGluZyB3aXRoIGl0
cyBDb2RlQmxvY2suCisgICAgICAgIChKU0M6OkNvZGVCbG9ja1NldDo6Y2xlYXJNYXJrcyk6Cisg
ICAgICAgIChKU0M6OkNvZGVCbG9ja1NldDo6ZGVsZXRlVW5tYXJrZWRBbmRVbnJlZmVyZW5jZWQp
OiBGaXhwb2ludHMgb3ZlciBlaXRoZXIganVzdCB0aGUgbmV3IENvZGVCbG9ja3Mgb3IgYWxsIENv
ZGVCbG9ja3MKKyAgICAgICAgdG8gZGV0ZXJtaW5lIHdoaWNoIENvZGVCbG9ja3MgYXJlIGRlYWQg
YW5kIGVhZ2VybHkgZmluYWxpemVzL2RlbGV0ZXMgdGhlbS4KKyAgICAgICAgKEpTQzo6Q29kZUJs
b2NrU2V0OjpyZW1vdmUpOgorICAgICAgICAoSlNDOjpDb2RlQmxvY2tTZXQ6OnRyYWNlTWFya2Vk
KTogSXRlcmF0ZSBvbmx5IHRoZSBjdXJyZW50bHkgZXhlY3V0aW5nIENvZGVCbG9ja3MgaW5zdGVh
ZCBvZiBhbGwgQ29kZUJsb2Nrcy4KKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrU2V0OjpyZW1lbWJl
ckN1cnJlbnRseUV4ZWN1dGluZ0NvZGVCbG9ja3MpOiBDbGVhciBtX21heUJlRXhlY3V0aW5nIGZv
ciBhbGwgY3VycmVudGx5IGV4ZWN1dGluZyAKKyAgICAgICAgQ29kZUJsb2NrcyBiZWNhdXNlIHdl
IG5vIGxvbmdlciBhbHdheXMgZG8gdGhpcyBhdCB0aGUgYmVnaW5uaW5nIG9mIEVkZW5Db2xsZWN0
aW9ucy4KKyAgICAgICAgKiBoZWFwL0NvZGVCbG9ja1NldC5oOgorICAgICAgICAoSlNDOjpDb2Rl
QmxvY2tTZXQ6Oml0ZXJhdGUpOgorICAgICAgICAqIGhlYXAvSGVhcC5jcHA6CisgICAgICAgIChK
U0M6OkhlYXA6Om1hcmtSb290cyk6CisgICAgICAgIChKU0M6OkhlYXA6OmRlbGV0ZUFsbENvbXBp
bGVkQ29kZSk6CisgICAgICAgIChKU0M6OkhlYXA6OmRlbGV0ZVVubWFya2VkQ29tcGlsZWRDb2Rl
KToKKyAgICAgICAgKiBydW50aW1lL0V4ZWN1dGFibGUuY3BwOgorICAgICAgICAoSlNDOjpTY3Jp
cHRFeGVjdXRhYmxlOjppbnN0YWxsQ29kZSk6IFdyaXRlIGJhcnJpZXIgY29kZSBvbiBpbnN0YWxs
YXRpb24uIFdlIGRvIHRoaXMgZHVlIHRvIHRoZSBmb2xsb3dpbmcgc2l0dWF0aW9uOgorICAgICAg
ICBhKSBBIENvZGVCbG9jayBpcyBjcmVhdGVkIGFuZCBpcyBjb21waWxlZCBvbiBhIERGRyB3b3Jr
ZXIgdGhyZWFkLgorICAgICAgICBiKSBObyBHQyBoYXBwZW5zLgorICAgICAgICBjKSBUaGUgQ29k
ZUJsb2NrIGhhcyBmaW5pc2hlZCBiZWluZyBjb21waWxlZCBhbmQgaXMgaW5zdGFsbGVkIGluIHRo
ZSBFeGVjdXRhYmxlLgorICAgICAgICBkKSBUaGUgZnVuY3Rpb24gbmV2ZXIgZXhlY3V0ZXMgYmVm
b3JlIHRoZSBuZXh0IEdDLgorICAgICAgICBlKSBUaGUgbmV4dCBHQyBuZWVkcyBuZWVkcyB0byB2
aXNpdCB0aGUgbmV3IENvZGVCbG9jayBidXQgdGhlIEV4ZWN1dGFibGUgd29uJ3QgYmUgcmV2aXNp
dGVkIHVubGVzcyAKKyAgICAgICAgICAgIGl0J3MgYWRkZWQgdG8gdGhlIHJlbWVtYmVyZWQgc2V0
LgorCiAyMDE0LTAzLTMxICBEZWFuIEphY2tzb24gIDxkaW5vQGFwcGxlLmNvbT4KIAogICAgICAg
ICBSZW1vdmUgV0VCX0FOSU1BVElPTlMKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRl
Y29kZS9Db2RlQmxvY2suY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
eXRlY29kZS9Db2RlQmxvY2suY3BwCShyZXZpc2lvbiAxNjY1MTUpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTQ0Niw2
ICsxNDQ2LDggQEAgQ29kZUJsb2NrOjpDb2RlQmxvY2soQ29weVBhcnNlZEJsb2NrVGFnLAogICAg
ICwgbV9hY3RpdmF0aW9uUmVnaXN0ZXIob3RoZXIubV9hY3RpdmF0aW9uUmVnaXN0ZXIpCiAgICAg
LCBtX2lzU3RyaWN0TW9kZShvdGhlci5tX2lzU3RyaWN0TW9kZSkKICAgICAsIG1fbmVlZHNBY3Rp
dmF0aW9uKG90aGVyLm1fbmVlZHNBY3RpdmF0aW9uKQorICAgICwgbV9tYXlCZUV4ZWN1dGluZyhm
YWxzZSkKKyAgICAsIG1fdmlzaXRBZ2dyZWdhdGVIYXNCZWVuQ2FsbGVkKGZhbHNlKQogICAgICwg
bV9zb3VyY2Uob3RoZXIubV9zb3VyY2UpCiAgICAgLCBtX3NvdXJjZU9mZnNldChvdGhlci5tX3Nv
dXJjZU9mZnNldCkKICAgICAsIG1fZmlyc3RMaW5lQ29sdW1uT2Zmc2V0KG90aGVyLm1fZmlyc3RM
aW5lQ29sdW1uT2Zmc2V0KQpAQCAtMTUwMyw2ICsxNTA1LDggQEAgQ29kZUJsb2NrOjpDb2RlQmxv
Y2soU2NyaXB0RXhlY3V0YWJsZSogbwogICAgICwgbV9hY3RpdmF0aW9uUmVnaXN0ZXIodW5saW5r
ZWRDb2RlQmxvY2stPmFjdGl2YXRpb25SZWdpc3RlcigpKQogICAgICwgbV9pc1N0cmljdE1vZGUo
dW5saW5rZWRDb2RlQmxvY2stPmlzU3RyaWN0TW9kZSgpKQogICAgICwgbV9uZWVkc0FjdGl2YXRp
b24odW5saW5rZWRDb2RlQmxvY2stPmhhc0FjdGl2YXRpb25SZWdpc3RlcigpICYmIHVubGlua2Vk
Q29kZUJsb2NrLT5jb2RlVHlwZSgpID09IEZ1bmN0aW9uQ29kZSkKKyAgICAsIG1fbWF5QmVFeGVj
dXRpbmcoZmFsc2UpCisgICAgLCBtX3Zpc2l0QWdncmVnYXRlSGFzQmVlbkNhbGxlZChmYWxzZSkK
ICAgICAsIG1fc291cmNlKHNvdXJjZVByb3ZpZGVyKQogICAgICwgbV9zb3VyY2VPZmZzZXQoc291
cmNlT2Zmc2V0KQogICAgICwgbV9maXJzdExpbmVDb2x1bW5PZmZzZXQoZmlyc3RMaW5lQ29sdW1u
T2Zmc2V0KQpAQCAtMTkzNywxMyArMTk0MSw5IEBAIHZvaWQgQ29kZUJsb2NrOjp2aXNpdEFnZ3Jl
Z2F0ZShTbG90VmlzaXQKICAgICAvLyBhbmQgd2hlbiBpdCBydW5zLCBpdCBmaWd1cmVzIG91dCB3
aGV0aGVyIGl0IGhhcyBhbnkgd29yayB0byBkby4KICAgICB2aXNpdG9yLmFkZFVuY29uZGl0aW9u
YWxGaW5hbGl6ZXIodGhpcyk7CiAgICAgCi0gICAgLy8gVGhlcmUgYXJlIHR3byB0aGluZ3MgdGhh
dCB3ZSB1c2Ugd2VhayByZWZlcmVuY2UgaGFydmVzdGVycyBmb3I6IERGRyBmaXhwb2ludCBmb3IK
LSAgICAvLyBqZXR0aXNvbmluZywgYW5kIHRyeWluZyB0byBmaW5kIHN0cnVjdHVyZXMgdGhhdCB3
b3VsZCBiZSBsaXZlIGJhc2VkIG9uIHNvbWUKLSAgICAvLyBpbmxpbmUgY2FjaGUuIFNvIGl0IG1h
a2VzIHNlbnNlIHRvIHJlZ2lzdGVyIHRoZW0gcmVnYXJkbGVzcy4KLSAgICB2aXNpdG9yLmFkZFdl
YWtSZWZlcmVuY2VIYXJ2ZXN0ZXIodGhpcyk7CiAgICAgbV9hbGxUcmFuc2l0aW9uc0hhdmVCZWVu
TWFya2VkID0gZmFsc2U7CiAgICAgCi0gICAgaWYgKHNob3VsZEltbWVkaWF0ZWx5QXNzdW1lTGl2
ZW5lc3NEdXJpbmdTY2FuKCkpIHsKKyAgICBpZiAoc2hvdWxkSW1tZWRpYXRlbHlBc3N1bWVMaXZl
bmVzc0R1cmluZ1NjYW4obV9oZWFwLT5vcGVyYXRpb25JblByb2dyZXNzKCkpKSB7CiAgICAgICAg
IC8vIFRoaXMgY29kZSBibG9jayBpcyBsaXZlLCBzbyBzY2FuIGFsbCByZWZlcmVuY2VzIHN0cm9u
Z2x5IGFuZCByZXR1cm4uCiAgICAgICAgIHN0cm9uZ2x5VmlzaXRTdHJvbmdSZWZlcmVuY2VzKHZp
c2l0b3IpOwogICAgICAgICBzdHJvbmdseVZpc2l0V2Vha1JlZmVyZW5jZXModmlzaXRvcik7CkBA
IC0xOTUxLDYgKzE5NTEsMTEgQEAgdm9pZCBDb2RlQmxvY2s6OnZpc2l0QWdncmVnYXRlKFNsb3RW
aXNpdAogICAgICAgICByZXR1cm47CiAgICAgfQogICAgIAorICAgIC8vIFRoZXJlIGFyZSB0d28g
dGhpbmdzIHRoYXQgd2UgdXNlIHdlYWsgcmVmZXJlbmNlIGhhcnZlc3RlcnMgZm9yOiBERkcgZml4
cG9pbnQgZm9yCisgICAgLy8gamV0dGlzb25pbmcsIGFuZCB0cnlpbmcgdG8gZmluZCBzdHJ1Y3R1
cmVzIHRoYXQgd291bGQgYmUgbGl2ZSBiYXNlZCBvbiBzb21lCisgICAgLy8gaW5saW5lIGNhY2hl
LiBTbyBpdCBtYWtlcyBzZW5zZSB0byByZWdpc3RlciB0aGVtIHJlZ2FyZGxlc3MuCisgICAgdmlz
aXRvci5hZGRXZWFrUmVmZXJlbmNlSGFydmVzdGVyKHRoaXMpOworCiAjaWYgRU5BQkxFKERGR19K
SVQpCiAgICAgLy8gV2UgZ2V0IGhlcmUgaWYgd2UncmUgbGl2ZSBpbiB0aGUgc2Vuc2UgdGhhdCBv
dXIgb3duZXIgZXhlY3V0YWJsZSBpcyBsaXZlLAogICAgIC8vIGJ1dCB3ZSdyZSBub3QgeWV0IGxp
dmUgZm9yIHN1cmUgaW4gYW5vdGhlciBzZW5zZTogd2UgbWF5IHlldCBkZWNpZGUgdGhhdCB0aGlz
CkBAIC0yMDc4LDcgKzIwODMsNyBAQCB2b2lkIENvZGVCbG9jazo6ZGV0ZXJtaW5lTGl2ZW5lc3Mo
U2xvdFZpCiB7CiAgICAgVU5VU0VEX1BBUkFNKHZpc2l0b3IpOwogICAgIAotICAgIGlmIChzaG91
bGRJbW1lZGlhdGVseUFzc3VtZUxpdmVuZXNzRHVyaW5nU2NhbigpKQorICAgIGlmIChzaG91bGRJ
bW1lZGlhdGVseUFzc3VtZUxpdmVuZXNzRHVyaW5nU2NhbihtX2hlYXAtPm9wZXJhdGlvbkluUHJv
Z3Jlc3MoKSkpCiAgICAgICAgIHJldHVybjsKICAgICAKICNpZiBFTkFCTEUoREZHX0pJVCkKQEAg
LTIyMTMsNyArMjIxOCw3IEBAIHZvaWQgQ29kZUJsb2NrOjpmaW5hbGl6ZVVuY29uZGl0aW9uYWxs
eSgKIAogI2lmIEVOQUJMRShERkdfSklUKQogICAgIC8vIENoZWNrIGlmIHdlJ3JlIG5vdCBsaXZl
LiBJZiB3ZSBhcmUsIHRoZW4gamV0dGlzb24uCi0gICAgaWYgKCEoc2hvdWxkSW1tZWRpYXRlbHlB
c3N1bWVMaXZlbmVzc0R1cmluZ1NjYW4oKSB8fCBtX2ppdENvZGUtPmRmZ0NvbW1vbigpLT5saXZl
bmVzc0hhc0JlZW5Qcm92ZWQpKSB7CisgICAgaWYgKCEoc2hvdWxkSW1tZWRpYXRlbHlBc3N1bWVM
aXZlbmVzc0R1cmluZ1NjYW4obV9oZWFwLT5vcGVyYXRpb25JblByb2dyZXNzKCkpIHx8IG1faml0
Q29kZS0+ZGZnQ29tbW9uKCktPmxpdmVuZXNzSGFzQmVlblByb3ZlZCkpIHsKICAgICAgICAgaWYg
KE9wdGlvbnM6OnZlcmJvc2VPU1IoKSkKICAgICAgICAgICAgIGRhdGFMb2coKnRoaXMsICIgaGFz
IGRlYWQgd2VhayByZWZlcmVuY2VzLCBqZXR0aXNvbmluZyBkdXJpbmcgR0MuXG4iKTsKIApJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suaAkocmV2aXNpb24g
MTY2NTE1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5oCSh3
b3JraW5nIGNvcHkpCkBAIC0xMzIsNiArMTMyLDE2IEBAIHB1YmxpYzoKICAgICBDb2RlQmxvY2sq
IGFsdGVybmF0aXZlKCkgeyByZXR1cm4gbV9hbHRlcm5hdGl2ZS5nZXQoKTsgfQogICAgIFBhc3NS
ZWZQdHI8Q29kZUJsb2NrPiByZWxlYXNlQWx0ZXJuYXRpdmUoKSB7IHJldHVybiBtX2FsdGVybmF0
aXZlLnJlbGVhc2UoKTsgfQogICAgIHZvaWQgc2V0QWx0ZXJuYXRpdmUoUGFzc1JlZlB0cjxDb2Rl
QmxvY2s+IGFsdGVybmF0aXZlKSB7IG1fYWx0ZXJuYXRpdmUgPSBhbHRlcm5hdGl2ZTsgfQorCisg
ICAgdGVtcGxhdGUgPHR5cGVuYW1lIEZ1bmN0b3I+IHZvaWQgZm9yRWFjaFJlbGF0ZWRDb2RlQmxv
Y2soRnVuY3RvciYmIGZ1bmN0b3IpCisgICAgeworICAgICAgICBGdW5jdG9yIGYoc3RkOjpmb3J3
YXJkPEZ1bmN0b3I+KGZ1bmN0b3IpKTsKKyAgICAgICAgQ29kZUJsb2NrKiBjdXJyZW50Q29kZUJs
b2NrID0gdGhpczsKKyAgICAgICAgd2hpbGUgKGN1cnJlbnRDb2RlQmxvY2spIHsKKyAgICAgICAg
ICAgIGYoY3VycmVudENvZGVCbG9jayk7CisgICAgICAgICAgICBjdXJyZW50Q29kZUJsb2NrID0g
Y3VycmVudENvZGVCbG9jay0+YWx0ZXJuYXRpdmUoKTsKKyAgICAgICAgfQorICAgIH0KICAgICAK
ICAgICBDb2RlU3BlY2lhbGl6YXRpb25LaW5kIHNwZWNpYWxpemF0aW9uS2luZCgpIGNvbnN0CiAg
ICAgewpAQCAtOTg5LDggKzk5OSwxMiBAQCBwcml2YXRlOgogICAgIHZvaWQgZHVtcFJhcmVDYXNl
UHJvZmlsZShQcmludFN0cmVhbSYsIGNvbnN0IGNoYXIqIG5hbWUsIFJhcmVDYXNlUHJvZmlsZSos
IGJvb2wmIGhhc1ByaW50ZWRQcm9maWxpbmcpOwogICAgICAgICAKICNpZiBFTkFCTEUoREZHX0pJ
VCkKLSAgICBib29sIHNob3VsZEltbWVkaWF0ZWx5QXNzdW1lTGl2ZW5lc3NEdXJpbmdTY2FuKCkK
KyAgICBib29sIHNob3VsZEltbWVkaWF0ZWx5QXNzdW1lTGl2ZW5lc3NEdXJpbmdTY2FuKEhlYXBP
cGVyYXRpb24gY29sbGVjdGlvblR5cGUpCiAgICAgeworICAgICAgICAvLyBEdXJpbmcgRWRlbkNv
bGxlY3Rpb25zIGFsbCBDb2RlQmxvY2tzIHRoYXQgYXJlIHZpc2l0ZWQgYXJlIGFzc3VtZWQgdG8g
YmUgbGl2ZS4KKyAgICAgICAgaWYgKGNvbGxlY3Rpb25UeXBlID09IEVkZW5Db2xsZWN0aW9uKQor
ICAgICAgICAgICAgcmV0dXJuIHRydWU7CisKICAgICAgICAgLy8gSW50ZXJwcmV0ZXIgYW5kIEJh
c2VsaW5lIEpJVCBDb2RlQmxvY2tzIGRvbid0IG5lZWQgdG8gYmUgamV0dGlzb25lZCB3aGVuCiAg
ICAgICAgIC8vIHRoZWlyIHdlYWsgcmVmZXJlbmNlcyBnbyBzdGFsZS4gU28gaWYgYSBiYXNsaW5l
IEpJVCBDb2RlQmxvY2sgZ2V0cwogICAgICAgICAvLyBzY2FubmVkLCB3ZSBjYW4gYXNzdW1lIHRo
YXQgdGhpcyBtZWFucyB0aGF0IGl0J3MgbGl2ZS4KQEAgLTEwMDksNyArMTAyMyw3IEBAIHByaXZh
dGU6CiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CiAjZWxzZQotICAgIGJvb2wgc2hvdWxk
SW1tZWRpYXRlbHlBc3N1bWVMaXZlbmVzc0R1cmluZ1NjYW4oKSB7IHJldHVybiB0cnVlOyB9Cisg
ICAgYm9vbCBzaG91bGRJbW1lZGlhdGVseUFzc3VtZUxpdmVuZXNzRHVyaW5nU2NhbigvKkhlYXBP
cGVyYXRpb24qLykgeyByZXR1cm4gdHJ1ZTsgfQogI2VuZGlmCiAgICAgCiAgICAgdm9pZCBwcm9w
YWdhdGVUcmFuc2l0aW9ucyhTbG90VmlzaXRvciYpOwpAQCAtMTI3NSwxMiArMTI4OSwxMiBAQCBp
bmxpbmUgdm9pZCBDb2RlQmxvY2tTZXQ6Om1hcmsodm9pZCogY2FuCiAgICAgLy8gLTEgKyAxID0g
MAogICAgIGlmICh2YWx1ZSArIDEgPD0gMSkKICAgICAgICAgcmV0dXJuOwotICAgIAotICAgIEhh
c2hTZXQ8Q29kZUJsb2NrKj46Oml0ZXJhdG9yIGl0ZXIgPSBtX3NldC5maW5kKHN0YXRpY19jYXN0
PENvZGVCbG9jayo+KGNhbmRpZGF0ZUNvZGVCbG9jaykpOwotICAgIGlmIChpdGVyID09IG1fc2V0
LmVuZCgpKQorCisgICAgQ29kZUJsb2NrKiBjb2RlQmxvY2sgPSBzdGF0aWNfY2FzdDxDb2RlQmxv
Y2sqPihjYW5kaWRhdGVDb2RlQmxvY2spOyAKKyAgICBpZiAoIW1fc2V0LmNvbnRhaW5zKGNvZGVC
bG9jaykgJiYgIW1fbmV3Q29kZUJsb2Nrcy5jb250YWlucyhjb2RlQmxvY2spKQogICAgICAgICBy
ZXR1cm47Ci0gICAgCi0gICAgbWFyaygqaXRlcik7CisKKyAgICBtYXJrKGNvZGVCbG9jayk7CiB9
CiAKIGlubGluZSB2b2lkIENvZGVCbG9ja1NldDo6bWFyayhDb2RlQmxvY2sqIGNvZGVCbG9jaykK
QEAgLTEyOTIsMTEgKzEzMDYsNDAgQEAgaW5saW5lIHZvaWQgQ29kZUJsb2NrU2V0OjptYXJrKENv
ZGVCbG9jawogICAgICAgICByZXR1cm47CiAgICAgCiAgICAgY29kZUJsb2NrLT5tX21heUJlRXhl
Y3V0aW5nID0gdHJ1ZTsKKyAgICAvLyBXZSBtaWdodCBub3QgaGF2ZSBjbGVhcmVkIHRoZSBtYXJr
cyBmb3IgdGhpcyBDb2RlQmxvY2ssIGJ1dCB3ZSBuZWVkIHRvIHZpc2l0IGl0LgorICAgIGNvZGVC
bG9jay0+bV92aXNpdEFnZ3JlZ2F0ZUhhc0JlZW5DYWxsZWQgPSBmYWxzZTsKICNpZiBFTkFCTEUo
R0dDKQogICAgIG1fY3VycmVudGx5RXhlY3V0aW5nLmFwcGVuZChjb2RlQmxvY2spOwogI2VuZGlm
CiB9CiAKK3RlbXBsYXRlIDx0eXBlbmFtZSBGdW5jdG9yPiBpbmxpbmUgdm9pZCBTY3JpcHRFeGVj
dXRhYmxlOjpmb3JFYWNoQ29kZUJsb2NrKEZ1bmN0b3ImJiBmdW5jdG9yKQoreworICAgIHN3aXRj
aCAodHlwZSgpKSB7CisgICAgY2FzZSBQcm9ncmFtRXhlY3V0YWJsZVR5cGU6IHsKKyAgICAgICAg
anNDYXN0PFByb2dyYW1FeGVjdXRhYmxlKj4odGhpcyktPm1fcHJvZ3JhbUNvZGVCbG9jay0+Zm9y
RWFjaFJlbGF0ZWRDb2RlQmxvY2soc3RkOjpmb3J3YXJkPEZ1bmN0b3I+KGZ1bmN0b3IpKTsKKyAg
ICAgICAgYnJlYWs7CisgICAgfQorICAgICAgICAKKyAgICBjYXNlIEV2YWxFeGVjdXRhYmxlVHlw
ZTogeworICAgICAgICBqc0Nhc3Q8RXZhbEV4ZWN1dGFibGUqPih0aGlzKS0+bV9ldmFsQ29kZUJs
b2NrLT5mb3JFYWNoUmVsYXRlZENvZGVCbG9jayhzdGQ6OmZvcndhcmQ8RnVuY3Rvcj4oZnVuY3Rv
cikpOworICAgICAgICBicmVhazsKKyAgICB9CisgICAgICAgIAorICAgIGNhc2UgRnVuY3Rpb25F
eGVjdXRhYmxlVHlwZTogeworICAgICAgICBGdW5jdG9yIGYoc3RkOjpmb3J3YXJkPEZ1bmN0b3I+
KGZ1bmN0b3IpKTsKKyAgICAgICAgRnVuY3Rpb25FeGVjdXRhYmxlKiBleGVjdXRhYmxlID0ganND
YXN0PEZ1bmN0aW9uRXhlY3V0YWJsZSo+KHRoaXMpOworICAgICAgICBpZiAoQ29kZUJsb2NrKiBj
b2RlQmxvY2sgPSBleGVjdXRhYmxlLT5tX2NvZGVCbG9ja0ZvckNhbGwuZ2V0KCkpCisgICAgICAg
ICAgICBjb2RlQmxvY2stPmZvckVhY2hSZWxhdGVkQ29kZUJsb2NrKGYpOworICAgICAgICBpZiAo
Q29kZUJsb2NrKiBjb2RlQmxvY2sgPSBleGVjdXRhYmxlLT5tX2NvZGVCbG9ja0ZvckNvbnN0cnVj
dC5nZXQoKSkKKyAgICAgICAgICAgIGNvZGVCbG9jay0+Zm9yRWFjaFJlbGF0ZWRDb2RlQmxvY2so
Zik7CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICBkZWZhdWx0OgorICAgICAgICBSRUxFQVNF
X0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIH0KK30KKwogfSAvLyBuYW1lc3BhY2UgSlNDCiAK
ICNlbmRpZiAvLyBDb2RlQmxvY2tfaApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAv
Q29kZUJsb2NrU2V0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVh
cC9Db2RlQmxvY2tTZXQuY3BwCShyZXZpc2lvbiAxNjY1MTUpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaGVhcC9Db2RlQmxvY2tTZXQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00MywzNCArNDMs
NzEgQEAgQ29kZUJsb2NrU2V0Ojp+Q29kZUJsb2NrU2V0KCkKIHsKICAgICBmb3IgKENvZGVCbG9j
ayogY29kZUJsb2NrIDogbV9zZXQpCiAgICAgICAgIGNvZGVCbG9jay0+ZGVyZWYoKTsKKworICAg
IGZvciAoQ29kZUJsb2NrKiBjb2RlQmxvY2sgOiBtX25ld0NvZGVCbG9ja3MpCisgICAgICAgIGNv
ZGVCbG9jay0+ZGVyZWYoKTsKIH0KIAogdm9pZCBDb2RlQmxvY2tTZXQ6OmFkZChQYXNzUmVmUHRy
PENvZGVCbG9jaz4gY29kZUJsb2NrKQogewogICAgIENvZGVCbG9jayogYmxvY2sgPSBjb2RlQmxv
Y2subGVha1JlZigpOwotICAgIGJvb2wgaXNOZXdFbnRyeSA9IG1fc2V0LmFkZChibG9jaykuaXNO
ZXdFbnRyeTsKKyAgICBib29sIGlzTmV3RW50cnkgPSBtX25ld0NvZGVCbG9ja3MuYWRkKGJsb2Nr
KS5pc05ld0VudHJ5OwogICAgIEFTU0VSVF9VTlVTRUQoaXNOZXdFbnRyeSwgaXNOZXdFbnRyeSk7
CiB9CiAKLXZvaWQgQ29kZUJsb2NrU2V0OjpjbGVhck1hcmtzKCkKK3ZvaWQgQ29kZUJsb2NrU2V0
Ojpwcm9tb3RlWW91bmdDb2RlQmxvY2tzKCkKK3sKKyAgICBtX3NldC5hZGQobV9uZXdDb2RlQmxv
Y2tzLmJlZ2luKCksIG1fbmV3Q29kZUJsb2Nrcy5lbmQoKSk7CisgICAgbV9uZXdDb2RlQmxvY2tz
LmNsZWFyKCk7Cit9CisKK3ZvaWQgQ29kZUJsb2NrU2V0OjpjbGVhckFsbE1hcmtzKCkKIHsKKyAg
ICBwcm9tb3RlWW91bmdDb2RlQmxvY2tzKCk7CiAgICAgZm9yIChDb2RlQmxvY2sqIGNvZGVCbG9j
ayA6IG1fc2V0KSB7CiAgICAgICAgIGNvZGVCbG9jay0+bV9tYXlCZUV4ZWN1dGluZyA9IGZhbHNl
OwogICAgICAgICBjb2RlQmxvY2stPm1fdmlzaXRBZ2dyZWdhdGVIYXNCZWVuQ2FsbGVkID0gZmFs
c2U7CiAgICAgfQogfQogCi12b2lkIENvZGVCbG9ja1NldDo6ZGVsZXRlVW5tYXJrZWRBbmRVbnJl
ZmVyZW5jZWQoKQordm9pZCBDb2RlQmxvY2tTZXQ6OmNsZWFyTWFya3NGb3JDb2RlQmxvY2tzSW5S
ZW1lbWJlcmVkRXhlY3V0YWJsZXMoY29uc3QgVmVjdG9yPGNvbnN0IEpTQ2VsbCo+JiByZW1lbWJl
cmVkU2V0KQogeworICAgIGZvciAoY29uc3QgSlNDZWxsKiBjZWxsIDogcmVtZW1iZXJlZFNldCkg
eworICAgICAgICBTY3JpcHRFeGVjdXRhYmxlKiBleGVjdXRhYmxlID0gY29uc3RfY2FzdDxTY3Jp
cHRFeGVjdXRhYmxlKj4oanNEeW5hbWljQ2FzdDxjb25zdCBTY3JpcHRFeGVjdXRhYmxlKj4oY2Vs
bCkpOworICAgICAgICBpZiAoIWV4ZWN1dGFibGUpCisgICAgICAgICAgICBjb250aW51ZTsKKyAg
ICAgICAgZXhlY3V0YWJsZS0+Zm9yRWFjaENvZGVCbG9jayhbXShDb2RlQmxvY2sqIGNvZGVCbG9j
aykgeworICAgICAgICAgICAgY29kZUJsb2NrLT5tX21heUJlRXhlY3V0aW5nID0gZmFsc2U7Cisg
ICAgICAgICAgICBjb2RlQmxvY2stPm1fdmlzaXRBZ2dyZWdhdGVIYXNCZWVuQ2FsbGVkID0gZmFs
c2U7CisgICAgICAgIH0pOworICAgIH0KK30KKwordm9pZCBDb2RlQmxvY2tTZXQ6OmNsZWFyTWFy
a3MoSGVhcE9wZXJhdGlvbiBjb2xsZWN0aW9uVHlwZSwgY29uc3QgVmVjdG9yPGNvbnN0IEpTQ2Vs
bCo+JiByZW1lbWJlcmVkU2V0KQoreworICAgIGlmIChjb2xsZWN0aW9uVHlwZSA9PSBFZGVuQ29s
bGVjdGlvbikgeworICAgICAgICAvLyBUaGlzIGVuc3VyZXMgdGhhdCB3ZSB3aWxsIHJldmlzaXQg
Q29kZUJsb2NrcyBpbiByZW1lbWJlcmVkIEV4ZWN1dGFibGVzIGV2ZW4gaWYgdGhleSB3ZXJlIHBy
ZXZpb3VzbHkgbWFya2VkLgorICAgICAgICBjbGVhck1hcmtzRm9yQ29kZUJsb2Nrc0luUmVtZW1i
ZXJlZEV4ZWN1dGFibGVzKHJlbWVtYmVyZWRTZXQpOworICAgICAgICByZXR1cm47CisgICAgfQor
CisgICAgQVNTRVJUKGNvbGxlY3Rpb25UeXBlID09IEZ1bGxDb2xsZWN0aW9uKTsKKyAgICBjbGVh
ckFsbE1hcmtzKCk7Cit9CisKK3ZvaWQgQ29kZUJsb2NrU2V0OjpkZWxldGVVbm1hcmtlZEFuZFVu
cmVmZXJlbmNlZChIZWFwT3BlcmF0aW9uIGNvbGxlY3Rpb25UeXBlKQoreworICAgIEhhc2hTZXQ8
Q29kZUJsb2NrKj4mIHNldCA9IGNvbGxlY3Rpb25UeXBlID09IEVkZW5Db2xsZWN0aW9uID8gbV9u
ZXdDb2RlQmxvY2tzIDogbV9zZXQ7CisKICAgICAvLyBUaGlzIG5lZWRzIHRvIGJlIGEgZml4cG9p
bnQgYmVjYXVzZSBjb2RlIGJsb2NrcyB0aGF0IGFyZSB1bm1hcmtlZCBtYXkKICAgICAvLyByZWZl
ciB0byBlYWNoIG90aGVyLiBGb3IgZXhhbXBsZSwgYSBERkcgY29kZSBibG9jayB0aGF0IGlzIG93
bmVkIGJ5CiAgICAgLy8gdGhlIEdDIG1heSByZWZlciB0byBhbiBGVEwgZm9yLWVudHJ5IGNvZGUg
YmxvY2sgdGhhdCBpcyBhbHNvIG93bmVkIGJ5CiAgICAgLy8gdGhlIEdDLgogICAgIFZlY3RvcjxD
b2RlQmxvY2sqLCAxNj4gdG9SZW1vdmU7CiAgICAgaWYgKHZlcmJvc2UpCi0gICAgICAgIGRhdGFM
b2coIkZpeHBvaW50aW5nIG92ZXIgdW5tYXJrZWQsIHNldCBzaXplID0gIiwgbV9zZXQuc2l6ZSgp
LCAiLi4uXG4iKTsKKyAgICAgICAgZGF0YUxvZygiRml4cG9pbnRpbmcgb3ZlciB1bm1hcmtlZCwg
c2V0IHNpemUgPSAiLCBzZXQuc2l6ZSgpLCAiLi4uXG4iKTsKICAgICBmb3IgKDs7KSB7Ci0gICAg
ICAgIGZvciAoQ29kZUJsb2NrKiBjb2RlQmxvY2sgOiBtX3NldCkgeworICAgICAgICBmb3IgKENv
ZGVCbG9jayogY29kZUJsb2NrIDogc2V0KSB7CiAgICAgICAgICAgICBpZiAoIWNvZGVCbG9jay0+
aGFzT25lUmVmKCkpCiAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICBpZiAo
Y29kZUJsb2NrLT5tX21heUJlRXhlY3V0aW5nKQpAQCAtODMsMjQgKzEyMCwyOSBAQCB2b2lkIENv
ZGVCbG9ja1NldDo6ZGVsZXRlVW5tYXJrZWRBbmRVbnJlCiAgICAgICAgIGlmICh0b1JlbW92ZS5p
c0VtcHR5KCkpCiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgZm9yIChDb2RlQmxvY2sqIGNv
ZGVCbG9jayA6IHRvUmVtb3ZlKQotICAgICAgICAgICAgbV9zZXQucmVtb3ZlKGNvZGVCbG9jayk7
CisgICAgICAgICAgICBzZXQucmVtb3ZlKGNvZGVCbG9jayk7CiAgICAgICAgIHRvUmVtb3ZlLnJl
c2l6ZSgwKTsKICAgICB9CisKKyAgICBpZiAoY29sbGVjdGlvblR5cGUgPT0gRWRlbkNvbGxlY3Rp
b24pCisgICAgICAgIHByb21vdGVZb3VuZ0NvZGVCbG9ja3MoKTsKIH0KIAogdm9pZCBDb2RlQmxv
Y2tTZXQ6OnJlbW92ZShDb2RlQmxvY2sqIGNvZGVCbG9jaykKIHsKICAgICBjb2RlQmxvY2stPmRl
cmVmKCk7Ci0gICAgbV9zZXQucmVtb3ZlKGNvZGVCbG9jayk7CisgICAgaWYgKG1fc2V0LmNvbnRh
aW5zKGNvZGVCbG9jaykpCisgICAgICAgIG1fc2V0LnJlbW92ZShjb2RlQmxvY2spOworICAgIEFT
U0VSVChtX25ld0NvZGVCbG9ja3MuY29udGFpbnMoY29kZUJsb2NrKSk7CisgICAgbV9uZXdDb2Rl
QmxvY2tzLnJlbW92ZShjb2RlQmxvY2spOwogfQogCiB2b2lkIENvZGVCbG9ja1NldDo6dHJhY2VN
YXJrZWQoU2xvdFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgaWYgKHZlcmJvc2UpCi0gICAgICAg
IGRhdGFMb2coIlRyYWNpbmcgIiwgbV9zZXQuc2l6ZSgpLCAiIGNvZGUgYmxvY2tzLlxuIik7Ci0g
ICAgZm9yIChDb2RlQmxvY2sqIGNvZGVCbG9jayA6IG1fc2V0KSB7Ci0gICAgICAgIGlmICghY29k
ZUJsb2NrLT5tX21heUJlRXhlY3V0aW5nKQotICAgICAgICAgICAgY29udGludWU7CisgICAgICAg
IGRhdGFMb2coIlRyYWNpbmcgIiwgbV9jdXJyZW50bHlFeGVjdXRpbmcuc2l6ZSgpLCAiIGNvZGUg
YmxvY2tzLlxuIik7CisgICAgZm9yIChDb2RlQmxvY2sqIGNvZGVCbG9jayA6IG1fY3VycmVudGx5
RXhlY3V0aW5nKSB7CisgICAgICAgIEFTU0VSVChjb2RlQmxvY2stPm1fbWF5QmVFeGVjdXRpbmcp
OwogICAgICAgICBjb2RlQmxvY2stPnZpc2l0QWdncmVnYXRlKHZpc2l0b3IpOwogICAgIH0KIH0K
QEAgLTEwOCw4ICsxNTAsMTEgQEAgdm9pZCBDb2RlQmxvY2tTZXQ6OnRyYWNlTWFya2VkKFNsb3RW
aXNpdAogdm9pZCBDb2RlQmxvY2tTZXQ6OnJlbWVtYmVyQ3VycmVudGx5RXhlY3V0aW5nQ29kZUJs
b2NrcyhIZWFwKiBoZWFwKQogewogI2lmIEVOQUJMRShHR0MpCi0gICAgZm9yIChDb2RlQmxvY2sq
IGNvZGVCbG9jayA6IG1fY3VycmVudGx5RXhlY3V0aW5nKQorICAgIGZvciAoQ29kZUJsb2NrKiBj
b2RlQmxvY2sgOiBtX2N1cnJlbnRseUV4ZWN1dGluZykgewogICAgICAgICBoZWFwLT5hZGRUb1Jl
bWVtYmVyZWRTZXQoY29kZUJsb2NrLT5vd25lckV4ZWN1dGFibGUoKSk7CisgICAgICAgIEFTU0VS
VChjb2RlQmxvY2stPm1fbWF5QmVFeGVjdXRpbmcpOworICAgICAgICBjb2RlQmxvY2stPm1fbWF5
QmVFeGVjdXRpbmcgPSBmYWxzZTsKKyAgICB9CiAgICAgbV9jdXJyZW50bHlFeGVjdXRpbmcuY2xl
YXIoKTsKICNlbHNlCiAgICAgVU5VU0VEX1BBUkFNKGhlYXApOwpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2hlYXAvQ29kZUJsb2NrU2V0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2hlYXAvQ29kZUJsb2NrU2V0LmgJKHJldmlzaW9uIDE2NjUxNSkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0NvZGVCbG9ja1NldC5oCSh3b3JraW5nIGNvcHkpCkBAIC0y
Nyw2ICsyNyw3IEBACiAjZGVmaW5lIENvZGVCbG9ja1NldF9oCiAKICNpbmNsdWRlICJHQ1NlZ21l
bnRlZEFycmF5LmgiCisjaW5jbHVkZSAiSGVhcE9wZXJhdGlvbi5oIgogI2luY2x1ZGUgPHd0Zi9I
YXNoU2V0Lmg+CiAjaW5jbHVkZSA8d3RmL05vbmNvcHlhYmxlLmg+CiAjaW5jbHVkZSA8d3RmL1Bh
c3NSZWZQdHIuaD4KQEAgLTM3LDYgKzM4LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiBjbGFzcyBCbG9j
a0FsbG9jYXRvcjsKIGNsYXNzIENvZGVCbG9jazsKIGNsYXNzIEhlYXA7CitjbGFzcyBKU0NlbGw7
CiBjbGFzcyBTbG90VmlzaXRvcjsKIAogLy8gQ29kZUJsb2NrU2V0IHRyYWNrcyBhbGwgQ29kZUJs
b2Nrcy4gRXZlcnkgQ29kZUJsb2NrIHN0YXJ0cyBvdXQgd2l0aCBvbmUKQEAgLTUzLDkgKzU1LDEy
IEBAIHB1YmxpYzoKICAgICAvLyBBZGQgYSBDb2RlQmxvY2suIFRoaXMgaXMgb25seSBjYWxsZWQg
YnkgQ29kZUJsb2NrIGNvbnN0cnVjdG9ycy4KICAgICB2b2lkIGFkZChQYXNzUmVmUHRyPENvZGVC
bG9jaz4pOwogICAgIAotICAgIC8vIENsZWFyIGFsbCBtYXJrIGJpdHMgYXNzb2NpYXRlZCB3aXRo
IERGRyBjb2RlIGJsb2Nrcy4KLSAgICB2b2lkIGNsZWFyTWFya3MoKTsKLSAgICAKKyAgICAvLyBD
bGVhciBtYXJrIGJpdHMgZm9yIGNlcnRhaW4gQ29kZUJsb2NrcyBkZXBlbmRpbmcgb24gdGhlIHR5
cGUgb2YgY29sbGVjdGlvbi4KKyAgICB2b2lkIGNsZWFyTWFya3MoSGVhcE9wZXJhdGlvbiwgY29u
c3QgVmVjdG9yPGNvbnN0IEpTQ2VsbCo+Jik7CisKKyAgICAvLyBDbGVhciBhbGwgbWFyayBiaXRz
IGZvciBhbGwgQ29kZUJsb2Nrcy4KKyAgICB2b2lkIGNsZWFyQWxsTWFya3MoKTsKKwogICAgIC8v
IE1hcmsgYSBwb2ludGVyIHRoYXQgbWF5IGJlIGEgQ29kZUJsb2NrIHRoYXQgYmVsb25ncyB0byB0
aGUgc2V0IG9mIERGRwogICAgIC8vIGJsb2Nrcy4gVGhpcyBpcyBkZWZpbmVkIGluIENvZGVCbG9j
ay5oLgogICAgIHZvaWQgbWFyayhDb2RlQmxvY2sqIGNhbmRpZGF0ZUNvZGVCbG9jayk7CkBAIC02
Myw3ICs2OCw3IEBAIHB1YmxpYzoKICAgICAKICAgICAvLyBEZWxldGUgYWxsIGNvZGUgYmxvY2tz
IHRoYXQgYXJlIG9ubHkgcmVmZXJlbmNlZCBieSB0aGlzIHNldCAoaS5lLiBvd25lZAogICAgIC8v
IGJ5IHRoaXMgc2V0KSwgYW5kIHRoYXQgaGF2ZSBub3QgYmVlbiBtYXJrZWQuCi0gICAgdm9pZCBk
ZWxldGVVbm1hcmtlZEFuZFVucmVmZXJlbmNlZCgpOworICAgIHZvaWQgZGVsZXRlVW5tYXJrZWRB
bmRVbnJlZmVyZW5jZWQoSGVhcE9wZXJhdGlvbik7CiAgICAgCiAgICAgdm9pZCByZW1vdmUoQ29k
ZUJsb2NrKik7CiAgICAgCkBAIC04MywxNSArODgsMjUgQEAgcHVibGljOgogICAgICAgICBmb3Ig
KGF1dG8mIGNvZGVCbG9jayA6IG1fc2V0KSB7CiAgICAgICAgICAgICBib29sIGRvbmUgPSBmdW5j
dG9yKGNvZGVCbG9jayk7CiAgICAgICAgICAgICBpZiAoZG9uZSkKLSAgICAgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKworICAgICAgICBmb3Ig
KGF1dG8mIGNvZGVCbG9jayA6IG1fbmV3Q29kZUJsb2NrcykgeworICAgICAgICAgICAgYm9vbCBk
b25lID0gZnVuY3Rvcihjb2RlQmxvY2spOworICAgICAgICAgICAgaWYgKGRvbmUpCisgICAgICAg
ICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAgICAgfQogCiBwcml2YXRlOgorICAgIHZvaWQg
Y2xlYXJNYXJrc0ZvckNvZGVCbG9ja3NJblJlbWVtYmVyZWRFeGVjdXRhYmxlcyhjb25zdCBWZWN0
b3I8Y29uc3QgSlNDZWxsKj4mKTsKKyAgICB2b2lkIHByb21vdGVZb3VuZ0NvZGVCbG9ja3MoKTsK
KwogICAgIC8vIFRoaXMgaXMgbm90IGEgc2V0IG9mIFJlZlB0cjxDb2RlQmxvY2s+IGJlY2F1c2Ug
d2UgbmVlZCB0byBiZSBhYmxlIHRvIGZpbmQKICAgICAvLyBhcmJpdHJhcnkgYm9ndXMgcG9pbnRl
cnMuIEkgY291bGQgaGF2ZSB3cml0dGVuIGEgdGhpbmd5IHRoYXQgaGFkIHBlZWsgdHlwZXMKICAg
ICAvLyBhbmQgYWxsLCBidXQgdGhhdCBzZWVtZWQgbGlrZSBvdmVya2lsbC4KLSAgICBIYXNoU2V0
PENvZGVCbG9jayogPiBtX3NldDsKKyAgICBIYXNoU2V0PENvZGVCbG9jayo+IG1fc2V0OworICAg
IEhhc2hTZXQ8Q29kZUJsb2NrKj4gbV9uZXdDb2RlQmxvY2tzOwogICAgIEdDU2VnbWVudGVkQXJy
YXk8Q29kZUJsb2NrKj4gbV9jdXJyZW50bHlFeGVjdXRpbmc7CiB9OwogCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaGVhcC9IZWFwLmNwcAkocmV2aXNpb24gMTY2NTE1KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2hlYXAvSGVhcC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ0Nyw3ICs0NDcsMTQg
QEAgdm9pZCBIZWFwOjptYXJrUm9vdHMoKQogICAgIGRvdWJsZSBnY1N0YXJ0VGltZSA9IFdURjo6
bW9ub3RvbmljYWxseUluY3JlYXNpbmdUaW1lKCk7CiAjZW5kaWYKIAotICAgIG1fY29kZUJsb2Nr
cy5jbGVhck1hcmtzKCk7CisjaWYgRU5BQkxFKEdHQykKKyAgICBWZWN0b3I8Y29uc3QgSlNDZWxs
Kj4gcmVtZW1iZXJlZFNldChtX3Nsb3RWaXNpdG9yLm1hcmtTdGFjaygpLnNpemUoKSk7CisgICAg
bV9zbG90VmlzaXRvci5tYXJrU3RhY2soKS5maWxsVmVjdG9yKHJlbWVtYmVyZWRTZXQpOworI2Vs
c2UKKyAgICBWZWN0b3I8Y29uc3QgSlNDZWxsKj4gcmVtZW1iZXJlZFNldDsKKyNlbmRpZgorCisg
ICAgbV9jb2RlQmxvY2tzLmNsZWFyTWFya3MobV9vcGVyYXRpb25JblByb2dyZXNzLCByZW1lbWJl
cmVkU2V0KTsKIAogICAgIC8vIFdlIGdhdGhlciBjb25zZXJ2YXRpdmUgcm9vdHMgYmVmb3JlIGNs
ZWFyaW5nIG1hcmsgYml0cyBiZWNhdXNlIGNvbnNlcnZhdGl2ZQogICAgIC8vIGdhdGhlcmluZyB1
c2VzIHRoZSBtYXJrIGJpdHMgdG8gZGV0ZXJtaW5lIHdoZXRoZXIgYSByZWZlcmVuY2UgaXMgdmFs
aWQuCkBAIC00NjUsMTMgKzQ3Miw2IEBAIHZvaWQgSGVhcDo6bWFya1Jvb3RzKCkKICAgICBtX3Ns
b3RWaXNpdG9yLmRpZFN0YXJ0TWFya2luZygpOwogICAgIEhlYXBSb290VmlzaXRvciBoZWFwUm9v
dFZpc2l0b3IobV9zbG90VmlzaXRvcik7CiAKLSNpZiBFTkFCTEUoR0dDKQotICAgIFZlY3Rvcjxj
b25zdCBKU0NlbGwqPiByZW1lbWJlcmVkU2V0KG1fc2xvdFZpc2l0b3IubWFya1N0YWNrKCkuc2l6
ZSgpKTsKLSAgICBtX3Nsb3RWaXNpdG9yLm1hcmtTdGFjaygpLmZpbGxWZWN0b3IocmVtZW1iZXJl
ZFNldCk7Ci0jZWxzZQotICAgIFZlY3Rvcjxjb25zdCBKU0NlbGwqPiByZW1lbWJlcmVkU2V0Owot
I2VuZGlmCi0KICAgICB7CiAgICAgICAgIFBhcmFsbGVsTW9kZUVuYWJsZXIgZW5hYmxlcihtX3Ns
b3RWaXNpdG9yKTsKIApAQCAtODE0LDggKzgxNCw4IEBAIHZvaWQgSGVhcDo6ZGVsZXRlQWxsQ29t
cGlsZWRDb2RlKCkKICAgICAgICAgc3RhdGljX2Nhc3Q8RnVuY3Rpb25FeGVjdXRhYmxlKj4oY3Vy
cmVudCktPmNsZWFyQ29kZUlmTm90Q29tcGlsaW5nKCk7CiAgICAgfQogCi0gICAgbV9jb2RlQmxv
Y2tzLmNsZWFyTWFya3MoKTsKLSAgICBtX2NvZGVCbG9ja3MuZGVsZXRlVW5tYXJrZWRBbmRVbnJl
ZmVyZW5jZWQoKTsKKyAgICBtX2NvZGVCbG9ja3MuY2xlYXJBbGxNYXJrcygpOworICAgIG1fY29k
ZUJsb2Nrcy5kZWxldGVVbm1hcmtlZEFuZFVucmVmZXJlbmNlZChGdWxsQ29sbGVjdGlvbik7CiB9
CiAKIHZvaWQgSGVhcDo6ZGVsZXRlQWxsVW5saW5rZWRGdW5jdGlvbkNvZGUoKQpAQCAtODI5LDcg
KzgyOSw4IEBAIHZvaWQgSGVhcDo6ZGVsZXRlQWxsVW5saW5rZWRGdW5jdGlvbkNvZGUKIAogdm9p
ZCBIZWFwOjpkZWxldGVVbm1hcmtlZENvbXBpbGVkQ29kZSgpCiB7Ci0gICAgR0NQSEFTRShEZWxl
dGVDb2RlQmxvY2tzKTsKKyAgICB7CisgICAgR0NQSEFTRShDbGVhclVubWFya2VkRXhlY3V0YWJs
ZXMpOwogICAgIEV4ZWN1dGFibGVCYXNlKiBuZXh0OwogICAgIGZvciAoRXhlY3V0YWJsZUJhc2Uq
IGN1cnJlbnQgPSBtX2NvbXBpbGVkQ29kZS5oZWFkKCk7IGN1cnJlbnQ7IGN1cnJlbnQgPSBuZXh0
KSB7CiAgICAgICAgIG5leHQgPSBjdXJyZW50LT5uZXh0KCk7CkBAIC04NDEsOCArODQyLDEwIEBA
IHZvaWQgSGVhcDo6ZGVsZXRlVW5tYXJrZWRDb21waWxlZENvZGUoKQogICAgICAgICBFeGVjdXRh
YmxlQmFzZTo6Y2xlYXJDb2RlVmlydHVhbChjdXJyZW50KTsKICAgICAgICAgbV9jb21waWxlZENv
ZGUucmVtb3ZlKGN1cnJlbnQpOwogICAgIH0KKyAgICB9CiAKLSAgICBtX2NvZGVCbG9ja3MuZGVs
ZXRlVW5tYXJrZWRBbmRVbnJlZmVyZW5jZWQoKTsKKyAgICBHQ1BIQVNFKERlbGV0ZUNvZGVCbG9j
a3MpOworICAgIG1fY29kZUJsb2Nrcy5kZWxldGVVbm1hcmtlZEFuZFVucmVmZXJlbmNlZChtX29w
ZXJhdGlvbkluUHJvZ3Jlc3MpOwogICAgIG1faml0U3R1YlJvdXRpbmVzLmRlbGV0ZVVubWFya2Vk
SmV0dGlzb25lZFN0dWJSb3V0aW5lcygpOwogfQogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9FeGVjdXRhYmxlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9FeGVjdXRhYmxlLmNwcAkocmV2aXNpb24gMTY2NTE1KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRXhlY3V0YWJsZS5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTE3OCw2ICsxNzgsOCBAQCB2b2lkIFNjcmlwdEV4ZWN1dGFibGU6Omluc3RhbGxDb2RlKENvZGVC
CiAgICAgRGVidWdnZXIqIGRlYnVnZ2VyID0gZ2VuZXJpY0NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0
KCktPmRlYnVnZ2VyKCk7CiAgICAgaWYgKGRlYnVnZ2VyKQogICAgICAgICBkZWJ1Z2dlci0+cmVn
aXN0ZXJDb2RlQmxvY2soZ2VuZXJpY0NvZGVCbG9jayk7CisKKyAgICBIZWFwOjpoZWFwKHRoaXMp
LT53cml0ZUJhcnJpZXIodGhpcyk7CiB9CiAKIFBhc3NSZWZQdHI8Q29kZUJsb2NrPiBTY3JpcHRF
eGVjdXRhYmxlOjpuZXdDb2RlQmxvY2tGb3IoCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9FeGVjdXRhYmxlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvRXhlY3V0YWJsZS5oCShyZXZpc2lvbiAxNjY1MTUpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9FeGVjdXRhYmxlLmgJKHdvcmtpbmcgY29weSkKQEAgLTQyOSw2ICs0
MjksOCBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBwcmVwYXJlRm9yRXhlY3V0aW9uSW1wbChl
eGVjLCBmdW5jdGlvbiwgc2NvcGUsIGtpbmQpOwogICAgIH0KIAorICAgIHRlbXBsYXRlIDx0eXBl
bmFtZSBGdW5jdG9yPiB2b2lkIGZvckVhY2hDb2RlQmxvY2soRnVuY3RvciYmKTsKKwogcHJpdmF0
ZToKICAgICBKU09iamVjdCogcHJlcGFyZUZvckV4ZWN1dGlvbkltcGwoRXhlY1N0YXRlKiwgSlNG
dW5jdGlvbiosIEpTU2NvcGUqKiwgQ29kZVNwZWNpYWxpemF0aW9uS2luZCk7CiAK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>228216</attachid>
            <date>2014-03-31 16:23:06 -0700</date>
            <delta_ts>2014-04-02 14:08:42 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-127152-20140331162246.patch</filename>
            <type>text/plain</type>
            <size>21938</size>
            <attacher name="Mark Hahnenberg">mhahnenberg</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTY2NTM5KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDU3IEBA
CisyMDE0LTAzLTMxICBNYXJrIEhhaG5lbmJlcmcgIDxtaGFobmVuYmVyZ0BhcHBsZS5jb20+CisK
KyAgICAgICAgQ29kZUJsb2NrU2V0IHNob3VsZCBiZSBnZW5lcmF0aW9uYWwKKyAgICAgICAgaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEyNzE1MgorCisgICAgICAgIFJl
dmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIER1cmluZyBFZGVuQ29sbGVjdGlv
bnMgd2Ugbm93IG9ubHkgdmlzaXQgdGhvc2UgQ29kZUJsb2NrcyB0aGF0OgorICAgICAgICBhKSBB
cmUgbmV3IHNpbmNlIHRoZSBsYXN0IGNvbGxlY3Rpb24gaWYgdGhleSB3ZXJlIHNvbWVob3cgb3Ro
ZXJ3aXNlIHJlYWNoYWJsZS4KKyAgICAgICAgYikgQXJlIHJlYWNoYWJsZSBmcm9tIGFuIEV4ZWN1
dGFibGUgdGhhdCBpcyBwYXJ0IG9mIHRoZSByZW1lbWJlcmVkIHNldC4KKworICAgICAgICAqIGJ5
dGVjb2RlL0NvZGVCbG9jay5jcHA6CisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6Q29kZUJsb2Nr
KTogSW5pdGlhbGl6ZSB1bmluaXRpYWxpemVkIHZhcmlhYmxlcy4KKyAgICAgICAgKEpTQzo6Q29k
ZUJsb2NrOjp2aXNpdEFnZ3JlZ2F0ZSk6IE1vdmUgdGhlIGFkZGl0aW9uIG9mIHRoZSB3ZWFrIHJl
ZmVyZW5jZSBoYXJ2ZXN0ZXIgYWZ0ZXIgdGhlCisgICAgICAgIHNob3VsZEltbWVkaWF0ZWx5QXNz
dW1lTGl2ZW5lc3NEdXJpbmdTY2FuIGNoZWNrIHNpbmNlIGl0J3MgcmVkdW5kYW50IGlmIHdlIGFz
c3VtZSBsaXZlbmVzcy4KKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpkZXRlcm1pbmVMaXZlbmVz
cyk6IFBhc3MgSGVhcE9wZXJhdGlvbiB0byBzaG91bGRJbW1lZGlhdGVseUFzc3VtZS4uLgorICAg
ICAgICAoSlNDOjpDb2RlQmxvY2s6OmZpbmFsaXplVW5jb25kaXRpb25hbGx5KTogRGl0dG8uCisg
ICAgICAgICogYnl0ZWNvZGUvQ29kZUJsb2NrLmg6CisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6
Zm9yRWFjaFJlbGF0ZWRDb2RlQmxvY2spOiBFeGVjdXRlcyBhIGZ1bmN0b3IgZm9yIGVhY2ggQ29k
ZUJsb2NrIHJlYWNoYWJsZSB2aWEgYWx0ZXJuYXRpdmUoKQorICAgICAgICAoSlNDOjpDb2RlQmxv
Y2s6OnNob3VsZEltbWVkaWF0ZWx5QXNzdW1lTGl2ZW5lc3NEdXJpbmdTY2FuKTogQXNzdW1lIHRo
YXQgYSB2aXNpdGVkIENvZGVCbG9jayBpcyBsaXZlIGR1cmluZyAKKyAgICAgICAgRWRlbkNvbGxl
Y3Rpb25zLgorICAgICAgICAoSlNDOjpDb2RlQmxvY2tTZXQ6Om1hcmspOiBBbHNvIGNoZWNrIHRo
ZSBzZXQgb2YgbmV3IENvZGVCbG9ja3MgZm9yIG1lbWViZXJzaGlwIHdoZW4gZG9pbmcgY29uc2Vy
dmF0aXZlIHNjYW5uaW5nLgorICAgICAgICAoSlNDOjpTY3JpcHRFeGVjdXRhYmxlOjpmb3JFYWNo
Q29kZUJsb2NrKTogRXhlY3V0ZXMgYSBmdW5jdG9yIGZvciBlYWNoIG9mIHRoaXMgRXhlY3V0YWJs
ZSdzIENvZGVCbG9ja3MuCisgICAgICAgICogaGVhcC9Db2RlQmxvY2tTZXQuY3BwOgorICAgICAg
ICAoSlNDOjpDb2RlQmxvY2tTZXQ6On5Db2RlQmxvY2tTZXQpOgorICAgICAgICAoSlNDOjpDb2Rl
QmxvY2tTZXQ6OmFkZCk6CisgICAgICAgIChKU0M6OkNvZGVCbG9ja1NldDo6cHJvbW90ZVlvdW5n
Q29kZUJsb2Nrcyk6IE1vdmVzIGFsbCBDb2RlQmxvY2tzIGN1cnJlbnRseSBpbiB0aGUgc2V0IG9m
IG5ldyBDb2RlQmxvY2tzIGludG8gCisgICAgICAgIHRoZSBzZXQgb2Ygb2xkIENvZGVCbG9ja3Mu
CisgICAgICAgIChKU0M6OkNvZGVCbG9ja1NldDo6Y2xlYXJBbGxNYXJrcyk6IENsZWFycyB0aGUg
bWFya3MgZm9yIGFsbCBDb2RlQmxvY2tzLiBPbmx5IHVzZWQgZHVyaW5nIEZ1bGxDb2xsZWN0aW9u
cy4KKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrU2V0OjpjbGVhck1hcmtzRm9yQ29kZUJsb2Nrc0lu
UmVtZW1iZXJlZEV4ZWN1dGFibGVzKTogQ2xlYXJzIHRoZSBtYXJrcyBmb3IgYWxsIENvZGVCbG9j
a3Mgb3duZWQgCisgICAgICAgIGJ5IEV4ZWN1dGFibGVzIGluIHRoZSByZW1lbWJlcmVkIHNldC4g
V2hlbiBhbiBFeGVjdXRhYmxlIGlzIGFkZGVkIHRvIHRoZSByZW1lbWJlcmVkIHNldCBpdCdzIHR5
cGljYWxseSBiZWNhdXNlIAorICAgICAgICB3ZSBuZWVkIHRvIGRvIHNvbWV0aGluZyB3aXRoIGl0
cyBDb2RlQmxvY2suCisgICAgICAgIChKU0M6OkNvZGVCbG9ja1NldDo6Y2xlYXJNYXJrcyk6Cisg
ICAgICAgIChKU0M6OkNvZGVCbG9ja1NldDo6ZGVsZXRlVW5tYXJrZWRBbmRVbnJlZmVyZW5jZWQp
OiBGaXhwb2ludHMgb3ZlciBlaXRoZXIganVzdCB0aGUgbmV3IENvZGVCbG9ja3Mgb3IgYWxsIENv
ZGVCbG9ja3MKKyAgICAgICAgdG8gZGV0ZXJtaW5lIHdoaWNoIENvZGVCbG9ja3MgYXJlIGRlYWQg
YW5kIGVhZ2VybHkgZmluYWxpemVzL2RlbGV0ZXMgdGhlbS4KKyAgICAgICAgKEpTQzo6Q29kZUJs
b2NrU2V0OjpyZW1vdmUpOgorICAgICAgICAoSlNDOjpDb2RlQmxvY2tTZXQ6OnRyYWNlTWFya2Vk
KTogSXRlcmF0ZSBvbmx5IHRoZSBjdXJyZW50bHkgZXhlY3V0aW5nIENvZGVCbG9ja3MgaW5zdGVh
ZCBvZiBhbGwgQ29kZUJsb2Nrcy4KKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrU2V0OjpyZW1lbWJl
ckN1cnJlbnRseUV4ZWN1dGluZ0NvZGVCbG9ja3MpOiBDbGVhciBtX21heUJlRXhlY3V0aW5nIGZv
ciBhbGwgY3VycmVudGx5IGV4ZWN1dGluZyAKKyAgICAgICAgQ29kZUJsb2NrcyBiZWNhdXNlIHdl
IG5vIGxvbmdlciBhbHdheXMgZG8gdGhpcyBhdCB0aGUgYmVnaW5uaW5nIG9mIEVkZW5Db2xsZWN0
aW9ucy4KKyAgICAgICAgKiBoZWFwL0NvZGVCbG9ja1NldC5oOgorICAgICAgICAoSlNDOjpDb2Rl
QmxvY2tTZXQ6Oml0ZXJhdGUpOgorICAgICAgICAqIGhlYXAvSGVhcC5jcHA6CisgICAgICAgIChK
U0M6OkhlYXA6Om1hcmtSb290cyk6CisgICAgICAgIChKU0M6OkhlYXA6OmRlbGV0ZUFsbENvbXBp
bGVkQ29kZSk6CisgICAgICAgIChKU0M6OkhlYXA6OmRlbGV0ZVVubWFya2VkQ29tcGlsZWRDb2Rl
KToKKyAgICAgICAgKiBydW50aW1lL0V4ZWN1dGFibGUuY3BwOgorICAgICAgICAoSlNDOjpTY3Jp
cHRFeGVjdXRhYmxlOjppbnN0YWxsQ29kZSk6IFdyaXRlIGJhcnJpZXIgY29kZSBvbiBpbnN0YWxs
YXRpb24uIFdlIGRvIHRoaXMgZHVlIHRvIHRoZSBmb2xsb3dpbmcgc2l0dWF0aW9uOgorICAgICAg
ICBhKSBBIENvZGVCbG9jayBpcyBjcmVhdGVkIGFuZCBpcyBjb21waWxlZCBvbiBhIERGRyB3b3Jr
ZXIgdGhyZWFkLgorICAgICAgICBiKSBObyBHQyBoYXBwZW5zLgorICAgICAgICBjKSBUaGUgQ29k
ZUJsb2NrIGhhcyBmaW5pc2hlZCBiZWluZyBjb21waWxlZCBhbmQgaXMgaW5zdGFsbGVkIGluIHRo
ZSBFeGVjdXRhYmxlLgorICAgICAgICBkKSBUaGUgZnVuY3Rpb24gbmV2ZXIgZXhlY3V0ZXMgYmVm
b3JlIHRoZSBuZXh0IEdDLgorICAgICAgICBlKSBUaGUgbmV4dCBHQyBuZWVkcyBuZWVkcyB0byB2
aXNpdCB0aGUgbmV3IENvZGVCbG9jayBidXQgdGhlIEV4ZWN1dGFibGUgd29uJ3QgYmUgcmV2aXNp
dGVkIHVubGVzcyAKKyAgICAgICAgICAgIGl0J3MgYWRkZWQgdG8gdGhlIHJlbWVtYmVyZWQgc2V0
LgorCiAyMDE0LTAzLTMxICBEZWFuIEphY2tzb24gIDxkaW5vQGFwcGxlLmNvbT4KIAogICAgICAg
ICBSZW1vdmUgV0VCX0FOSU1BVElPTlMKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRl
Y29kZS9Db2RlQmxvY2suY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
eXRlY29kZS9Db2RlQmxvY2suY3BwCShyZXZpc2lvbiAxNjY1MTUpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTQ0Niw2
ICsxNDQ2LDggQEAgQ29kZUJsb2NrOjpDb2RlQmxvY2soQ29weVBhcnNlZEJsb2NrVGFnLAogICAg
ICwgbV9hY3RpdmF0aW9uUmVnaXN0ZXIob3RoZXIubV9hY3RpdmF0aW9uUmVnaXN0ZXIpCiAgICAg
LCBtX2lzU3RyaWN0TW9kZShvdGhlci5tX2lzU3RyaWN0TW9kZSkKICAgICAsIG1fbmVlZHNBY3Rp
dmF0aW9uKG90aGVyLm1fbmVlZHNBY3RpdmF0aW9uKQorICAgICwgbV9tYXlCZUV4ZWN1dGluZyhm
YWxzZSkKKyAgICAsIG1fdmlzaXRBZ2dyZWdhdGVIYXNCZWVuQ2FsbGVkKGZhbHNlKQogICAgICwg
bV9zb3VyY2Uob3RoZXIubV9zb3VyY2UpCiAgICAgLCBtX3NvdXJjZU9mZnNldChvdGhlci5tX3Nv
dXJjZU9mZnNldCkKICAgICAsIG1fZmlyc3RMaW5lQ29sdW1uT2Zmc2V0KG90aGVyLm1fZmlyc3RM
aW5lQ29sdW1uT2Zmc2V0KQpAQCAtMTUwMyw2ICsxNTA1LDggQEAgQ29kZUJsb2NrOjpDb2RlQmxv
Y2soU2NyaXB0RXhlY3V0YWJsZSogbwogICAgICwgbV9hY3RpdmF0aW9uUmVnaXN0ZXIodW5saW5r
ZWRDb2RlQmxvY2stPmFjdGl2YXRpb25SZWdpc3RlcigpKQogICAgICwgbV9pc1N0cmljdE1vZGUo
dW5saW5rZWRDb2RlQmxvY2stPmlzU3RyaWN0TW9kZSgpKQogICAgICwgbV9uZWVkc0FjdGl2YXRp
b24odW5saW5rZWRDb2RlQmxvY2stPmhhc0FjdGl2YXRpb25SZWdpc3RlcigpICYmIHVubGlua2Vk
Q29kZUJsb2NrLT5jb2RlVHlwZSgpID09IEZ1bmN0aW9uQ29kZSkKKyAgICAsIG1fbWF5QmVFeGVj
dXRpbmcoZmFsc2UpCisgICAgLCBtX3Zpc2l0QWdncmVnYXRlSGFzQmVlbkNhbGxlZChmYWxzZSkK
ICAgICAsIG1fc291cmNlKHNvdXJjZVByb3ZpZGVyKQogICAgICwgbV9zb3VyY2VPZmZzZXQoc291
cmNlT2Zmc2V0KQogICAgICwgbV9maXJzdExpbmVDb2x1bW5PZmZzZXQoZmlyc3RMaW5lQ29sdW1u
T2Zmc2V0KQpAQCAtMTkzNywxMyArMTk0MSw5IEBAIHZvaWQgQ29kZUJsb2NrOjp2aXNpdEFnZ3Jl
Z2F0ZShTbG90VmlzaXQKICAgICAvLyBhbmQgd2hlbiBpdCBydW5zLCBpdCBmaWd1cmVzIG91dCB3
aGV0aGVyIGl0IGhhcyBhbnkgd29yayB0byBkby4KICAgICB2aXNpdG9yLmFkZFVuY29uZGl0aW9u
YWxGaW5hbGl6ZXIodGhpcyk7CiAgICAgCi0gICAgLy8gVGhlcmUgYXJlIHR3byB0aGluZ3MgdGhh
dCB3ZSB1c2Ugd2VhayByZWZlcmVuY2UgaGFydmVzdGVycyBmb3I6IERGRyBmaXhwb2ludCBmb3IK
LSAgICAvLyBqZXR0aXNvbmluZywgYW5kIHRyeWluZyB0byBmaW5kIHN0cnVjdHVyZXMgdGhhdCB3
b3VsZCBiZSBsaXZlIGJhc2VkIG9uIHNvbWUKLSAgICAvLyBpbmxpbmUgY2FjaGUuIFNvIGl0IG1h
a2VzIHNlbnNlIHRvIHJlZ2lzdGVyIHRoZW0gcmVnYXJkbGVzcy4KLSAgICB2aXNpdG9yLmFkZFdl
YWtSZWZlcmVuY2VIYXJ2ZXN0ZXIodGhpcyk7CiAgICAgbV9hbGxUcmFuc2l0aW9uc0hhdmVCZWVu
TWFya2VkID0gZmFsc2U7CiAgICAgCi0gICAgaWYgKHNob3VsZEltbWVkaWF0ZWx5QXNzdW1lTGl2
ZW5lc3NEdXJpbmdTY2FuKCkpIHsKKyAgICBpZiAoc2hvdWxkSW1tZWRpYXRlbHlBc3N1bWVMaXZl
bmVzc0R1cmluZ1NjYW4obV9oZWFwLT5vcGVyYXRpb25JblByb2dyZXNzKCkpKSB7CiAgICAgICAg
IC8vIFRoaXMgY29kZSBibG9jayBpcyBsaXZlLCBzbyBzY2FuIGFsbCByZWZlcmVuY2VzIHN0cm9u
Z2x5IGFuZCByZXR1cm4uCiAgICAgICAgIHN0cm9uZ2x5VmlzaXRTdHJvbmdSZWZlcmVuY2VzKHZp
c2l0b3IpOwogICAgICAgICBzdHJvbmdseVZpc2l0V2Vha1JlZmVyZW5jZXModmlzaXRvcik7CkBA
IC0xOTUxLDYgKzE5NTEsMTEgQEAgdm9pZCBDb2RlQmxvY2s6OnZpc2l0QWdncmVnYXRlKFNsb3RW
aXNpdAogICAgICAgICByZXR1cm47CiAgICAgfQogICAgIAorICAgIC8vIFRoZXJlIGFyZSB0d28g
dGhpbmdzIHRoYXQgd2UgdXNlIHdlYWsgcmVmZXJlbmNlIGhhcnZlc3RlcnMgZm9yOiBERkcgZml4
cG9pbnQgZm9yCisgICAgLy8gamV0dGlzb25pbmcsIGFuZCB0cnlpbmcgdG8gZmluZCBzdHJ1Y3R1
cmVzIHRoYXQgd291bGQgYmUgbGl2ZSBiYXNlZCBvbiBzb21lCisgICAgLy8gaW5saW5lIGNhY2hl
LiBTbyBpdCBtYWtlcyBzZW5zZSB0byByZWdpc3RlciB0aGVtIHJlZ2FyZGxlc3MuCisgICAgdmlz
aXRvci5hZGRXZWFrUmVmZXJlbmNlSGFydmVzdGVyKHRoaXMpOworCiAjaWYgRU5BQkxFKERGR19K
SVQpCiAgICAgLy8gV2UgZ2V0IGhlcmUgaWYgd2UncmUgbGl2ZSBpbiB0aGUgc2Vuc2UgdGhhdCBv
dXIgb3duZXIgZXhlY3V0YWJsZSBpcyBsaXZlLAogICAgIC8vIGJ1dCB3ZSdyZSBub3QgeWV0IGxp
dmUgZm9yIHN1cmUgaW4gYW5vdGhlciBzZW5zZTogd2UgbWF5IHlldCBkZWNpZGUgdGhhdCB0aGlz
CkBAIC0yMDc4LDcgKzIwODMsNyBAQCB2b2lkIENvZGVCbG9jazo6ZGV0ZXJtaW5lTGl2ZW5lc3Mo
U2xvdFZpCiB7CiAgICAgVU5VU0VEX1BBUkFNKHZpc2l0b3IpOwogICAgIAotICAgIGlmIChzaG91
bGRJbW1lZGlhdGVseUFzc3VtZUxpdmVuZXNzRHVyaW5nU2NhbigpKQorICAgIGlmIChzaG91bGRJ
bW1lZGlhdGVseUFzc3VtZUxpdmVuZXNzRHVyaW5nU2NhbihtX2hlYXAtPm9wZXJhdGlvbkluUHJv
Z3Jlc3MoKSkpCiAgICAgICAgIHJldHVybjsKICAgICAKICNpZiBFTkFCTEUoREZHX0pJVCkKQEAg
LTIyMTMsNyArMjIxOCw3IEBAIHZvaWQgQ29kZUJsb2NrOjpmaW5hbGl6ZVVuY29uZGl0aW9uYWxs
eSgKIAogI2lmIEVOQUJMRShERkdfSklUKQogICAgIC8vIENoZWNrIGlmIHdlJ3JlIG5vdCBsaXZl
LiBJZiB3ZSBhcmUsIHRoZW4gamV0dGlzb24uCi0gICAgaWYgKCEoc2hvdWxkSW1tZWRpYXRlbHlB
c3N1bWVMaXZlbmVzc0R1cmluZ1NjYW4oKSB8fCBtX2ppdENvZGUtPmRmZ0NvbW1vbigpLT5saXZl
bmVzc0hhc0JlZW5Qcm92ZWQpKSB7CisgICAgaWYgKCEoc2hvdWxkSW1tZWRpYXRlbHlBc3N1bWVM
aXZlbmVzc0R1cmluZ1NjYW4obV9oZWFwLT5vcGVyYXRpb25JblByb2dyZXNzKCkpIHx8IG1faml0
Q29kZS0+ZGZnQ29tbW9uKCktPmxpdmVuZXNzSGFzQmVlblByb3ZlZCkpIHsKICAgICAgICAgaWYg
KE9wdGlvbnM6OnZlcmJvc2VPU1IoKSkKICAgICAgICAgICAgIGRhdGFMb2coKnRoaXMsICIgaGFz
IGRlYWQgd2VhayByZWZlcmVuY2VzLCBqZXR0aXNvbmluZyBkdXJpbmcgR0MuXG4iKTsKIApJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suaAkocmV2aXNpb24g
MTY2NTE1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5oCSh3
b3JraW5nIGNvcHkpCkBAIC0xMzIsNiArMTMyLDE2IEBAIHB1YmxpYzoKICAgICBDb2RlQmxvY2sq
IGFsdGVybmF0aXZlKCkgeyByZXR1cm4gbV9hbHRlcm5hdGl2ZS5nZXQoKTsgfQogICAgIFBhc3NS
ZWZQdHI8Q29kZUJsb2NrPiByZWxlYXNlQWx0ZXJuYXRpdmUoKSB7IHJldHVybiBtX2FsdGVybmF0
aXZlLnJlbGVhc2UoKTsgfQogICAgIHZvaWQgc2V0QWx0ZXJuYXRpdmUoUGFzc1JlZlB0cjxDb2Rl
QmxvY2s+IGFsdGVybmF0aXZlKSB7IG1fYWx0ZXJuYXRpdmUgPSBhbHRlcm5hdGl2ZTsgfQorCisg
ICAgdGVtcGxhdGUgPHR5cGVuYW1lIEZ1bmN0b3I+IHZvaWQgZm9yRWFjaFJlbGF0ZWRDb2RlQmxv
Y2soRnVuY3RvciYmIGZ1bmN0b3IpCisgICAgeworICAgICAgICBGdW5jdG9yIGYoc3RkOjpmb3J3
YXJkPEZ1bmN0b3I+KGZ1bmN0b3IpKTsKKyAgICAgICAgQ29kZUJsb2NrKiBjdXJyZW50Q29kZUJs
b2NrID0gdGhpczsKKyAgICAgICAgd2hpbGUgKGN1cnJlbnRDb2RlQmxvY2spIHsKKyAgICAgICAg
ICAgIGYoY3VycmVudENvZGVCbG9jayk7CisgICAgICAgICAgICBjdXJyZW50Q29kZUJsb2NrID0g
Y3VycmVudENvZGVCbG9jay0+YWx0ZXJuYXRpdmUoKTsKKyAgICAgICAgfQorICAgIH0KICAgICAK
ICAgICBDb2RlU3BlY2lhbGl6YXRpb25LaW5kIHNwZWNpYWxpemF0aW9uS2luZCgpIGNvbnN0CiAg
ICAgewpAQCAtOTg5LDggKzk5OSwxMiBAQCBwcml2YXRlOgogICAgIHZvaWQgZHVtcFJhcmVDYXNl
UHJvZmlsZShQcmludFN0cmVhbSYsIGNvbnN0IGNoYXIqIG5hbWUsIFJhcmVDYXNlUHJvZmlsZSos
IGJvb2wmIGhhc1ByaW50ZWRQcm9maWxpbmcpOwogICAgICAgICAKICNpZiBFTkFCTEUoREZHX0pJ
VCkKLSAgICBib29sIHNob3VsZEltbWVkaWF0ZWx5QXNzdW1lTGl2ZW5lc3NEdXJpbmdTY2FuKCkK
KyAgICBib29sIHNob3VsZEltbWVkaWF0ZWx5QXNzdW1lTGl2ZW5lc3NEdXJpbmdTY2FuKEhlYXBP
cGVyYXRpb24gY29sbGVjdGlvblR5cGUpCiAgICAgeworICAgICAgICAvLyBEdXJpbmcgRWRlbkNv
bGxlY3Rpb25zIGFsbCBDb2RlQmxvY2tzIHRoYXQgYXJlIHZpc2l0ZWQgYXJlIGFzc3VtZWQgdG8g
YmUgbGl2ZS4KKyAgICAgICAgaWYgKGNvbGxlY3Rpb25UeXBlID09IEVkZW5Db2xsZWN0aW9uKQor
ICAgICAgICAgICAgcmV0dXJuIHRydWU7CisKICAgICAgICAgLy8gSW50ZXJwcmV0ZXIgYW5kIEJh
c2VsaW5lIEpJVCBDb2RlQmxvY2tzIGRvbid0IG5lZWQgdG8gYmUgamV0dGlzb25lZCB3aGVuCiAg
ICAgICAgIC8vIHRoZWlyIHdlYWsgcmVmZXJlbmNlcyBnbyBzdGFsZS4gU28gaWYgYSBiYXNsaW5l
IEpJVCBDb2RlQmxvY2sgZ2V0cwogICAgICAgICAvLyBzY2FubmVkLCB3ZSBjYW4gYXNzdW1lIHRo
YXQgdGhpcyBtZWFucyB0aGF0IGl0J3MgbGl2ZS4KQEAgLTEwMDksNyArMTAyMyw3IEBAIHByaXZh
dGU6CiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CiAjZWxzZQotICAgIGJvb2wgc2hvdWxk
SW1tZWRpYXRlbHlBc3N1bWVMaXZlbmVzc0R1cmluZ1NjYW4oKSB7IHJldHVybiB0cnVlOyB9Cisg
ICAgYm9vbCBzaG91bGRJbW1lZGlhdGVseUFzc3VtZUxpdmVuZXNzRHVyaW5nU2NhbigvKkhlYXBP
cGVyYXRpb24qLykgeyByZXR1cm4gdHJ1ZTsgfQogI2VuZGlmCiAgICAgCiAgICAgdm9pZCBwcm9w
YWdhdGVUcmFuc2l0aW9ucyhTbG90VmlzaXRvciYpOwpAQCAtMTI3NSwxMiArMTI4OSwxMiBAQCBp
bmxpbmUgdm9pZCBDb2RlQmxvY2tTZXQ6Om1hcmsodm9pZCogY2FuCiAgICAgLy8gLTEgKyAxID0g
MAogICAgIGlmICh2YWx1ZSArIDEgPD0gMSkKICAgICAgICAgcmV0dXJuOwotICAgIAotICAgIEhh
c2hTZXQ8Q29kZUJsb2NrKj46Oml0ZXJhdG9yIGl0ZXIgPSBtX3NldC5maW5kKHN0YXRpY19jYXN0
PENvZGVCbG9jayo+KGNhbmRpZGF0ZUNvZGVCbG9jaykpOwotICAgIGlmIChpdGVyID09IG1fc2V0
LmVuZCgpKQorCisgICAgQ29kZUJsb2NrKiBjb2RlQmxvY2sgPSBzdGF0aWNfY2FzdDxDb2RlQmxv
Y2sqPihjYW5kaWRhdGVDb2RlQmxvY2spOyAKKyAgICBpZiAoIW1fb2xkQ29kZUJsb2Nrcy5jb250
YWlucyhjb2RlQmxvY2spICYmICFtX25ld0NvZGVCbG9ja3MuY29udGFpbnMoY29kZUJsb2NrKSkK
ICAgICAgICAgcmV0dXJuOwotICAgIAotICAgIG1hcmsoKml0ZXIpOworCisgICAgbWFyayhjb2Rl
QmxvY2spOwogfQogCiBpbmxpbmUgdm9pZCBDb2RlQmxvY2tTZXQ6Om1hcmsoQ29kZUJsb2NrKiBj
b2RlQmxvY2spCkBAIC0xMjkyLDExICsxMzA2LDQwIEBAIGlubGluZSB2b2lkIENvZGVCbG9ja1Nl
dDo6bWFyayhDb2RlQmxvY2sKICAgICAgICAgcmV0dXJuOwogICAgIAogICAgIGNvZGVCbG9jay0+
bV9tYXlCZUV4ZWN1dGluZyA9IHRydWU7CisgICAgLy8gV2UgbWlnaHQgbm90IGhhdmUgY2xlYXJl
ZCB0aGUgbWFya3MgZm9yIHRoaXMgQ29kZUJsb2NrLCBidXQgd2UgbmVlZCB0byB2aXNpdCBpdC4K
KyAgICBjb2RlQmxvY2stPm1fdmlzaXRBZ2dyZWdhdGVIYXNCZWVuQ2FsbGVkID0gZmFsc2U7CiAj
aWYgRU5BQkxFKEdHQykKICAgICBtX2N1cnJlbnRseUV4ZWN1dGluZy5hcHBlbmQoY29kZUJsb2Nr
KTsKICNlbmRpZgogfQogCit0ZW1wbGF0ZSA8dHlwZW5hbWUgRnVuY3Rvcj4gaW5saW5lIHZvaWQg
U2NyaXB0RXhlY3V0YWJsZTo6Zm9yRWFjaENvZGVCbG9jayhGdW5jdG9yJiYgZnVuY3RvcikKK3sK
KyAgICBzd2l0Y2ggKHR5cGUoKSkgeworICAgIGNhc2UgUHJvZ3JhbUV4ZWN1dGFibGVUeXBlOiB7
CisgICAgICAgIGpzQ2FzdDxQcm9ncmFtRXhlY3V0YWJsZSo+KHRoaXMpLT5tX3Byb2dyYW1Db2Rl
QmxvY2stPmZvckVhY2hSZWxhdGVkQ29kZUJsb2NrKHN0ZDo6Zm9yd2FyZDxGdW5jdG9yPihmdW5j
dG9yKSk7CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICAgICAgCisgICAgY2FzZSBFdmFsRXhl
Y3V0YWJsZVR5cGU6IHsKKyAgICAgICAganNDYXN0PEV2YWxFeGVjdXRhYmxlKj4odGhpcyktPm1f
ZXZhbENvZGVCbG9jay0+Zm9yRWFjaFJlbGF0ZWRDb2RlQmxvY2soc3RkOjpmb3J3YXJkPEZ1bmN0
b3I+KGZ1bmN0b3IpKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorICAgICAgICAKKyAgICBjYXNl
IEZ1bmN0aW9uRXhlY3V0YWJsZVR5cGU6IHsKKyAgICAgICAgRnVuY3RvciBmKHN0ZDo6Zm9yd2Fy
ZDxGdW5jdG9yPihmdW5jdG9yKSk7CisgICAgICAgIEZ1bmN0aW9uRXhlY3V0YWJsZSogZXhlY3V0
YWJsZSA9IGpzQ2FzdDxGdW5jdGlvbkV4ZWN1dGFibGUqPih0aGlzKTsKKyAgICAgICAgaWYgKENv
ZGVCbG9jayogY29kZUJsb2NrID0gZXhlY3V0YWJsZS0+bV9jb2RlQmxvY2tGb3JDYWxsLmdldCgp
KQorICAgICAgICAgICAgY29kZUJsb2NrLT5mb3JFYWNoUmVsYXRlZENvZGVCbG9jayhmKTsKKyAg
ICAgICAgaWYgKENvZGVCbG9jayogY29kZUJsb2NrID0gZXhlY3V0YWJsZS0+bV9jb2RlQmxvY2tG
b3JDb25zdHJ1Y3QuZ2V0KCkpCisgICAgICAgICAgICBjb2RlQmxvY2stPmZvckVhY2hSZWxhdGVk
Q29kZUJsb2NrKGYpOworICAgICAgICBicmVhazsKKyAgICB9CisgICAgZGVmYXVsdDoKKyAgICAg
ICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICB9Cit9CisKIH0gLy8gbmFtZXNw
YWNlIEpTQwogCiAjZW5kaWYgLy8gQ29kZUJsb2NrX2gKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9oZWFwL0NvZGVCbG9ja1NldC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2hlYXAvQ29kZUJsb2NrU2V0LmNwcAkocmV2aXNpb24gMTY2NTE1KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2hlYXAvQ29kZUJsb2NrU2V0LmNwcAkod29ya2luZyBjb3B5KQpAQCAt
NDEsMzYgKzQxLDczIEBAIENvZGVCbG9ja1NldDo6Q29kZUJsb2NrU2V0KEJsb2NrQWxsb2NhdG8K
IAogQ29kZUJsb2NrU2V0Ojp+Q29kZUJsb2NrU2V0KCkKIHsKLSAgICBmb3IgKENvZGVCbG9jayog
Y29kZUJsb2NrIDogbV9zZXQpCisgICAgZm9yIChDb2RlQmxvY2sqIGNvZGVCbG9jayA6IG1fb2xk
Q29kZUJsb2NrcykKKyAgICAgICAgY29kZUJsb2NrLT5kZXJlZigpOworCisgICAgZm9yIChDb2Rl
QmxvY2sqIGNvZGVCbG9jayA6IG1fbmV3Q29kZUJsb2NrcykKICAgICAgICAgY29kZUJsb2NrLT5k
ZXJlZigpOwogfQogCiB2b2lkIENvZGVCbG9ja1NldDo6YWRkKFBhc3NSZWZQdHI8Q29kZUJsb2Nr
PiBjb2RlQmxvY2spCiB7CiAgICAgQ29kZUJsb2NrKiBibG9jayA9IGNvZGVCbG9jay5sZWFrUmVm
KCk7Ci0gICAgYm9vbCBpc05ld0VudHJ5ID0gbV9zZXQuYWRkKGJsb2NrKS5pc05ld0VudHJ5Owor
ICAgIGJvb2wgaXNOZXdFbnRyeSA9IG1fbmV3Q29kZUJsb2Nrcy5hZGQoYmxvY2spLmlzTmV3RW50
cnk7CiAgICAgQVNTRVJUX1VOVVNFRChpc05ld0VudHJ5LCBpc05ld0VudHJ5KTsKIH0KIAotdm9p
ZCBDb2RlQmxvY2tTZXQ6OmNsZWFyTWFya3MoKQordm9pZCBDb2RlQmxvY2tTZXQ6OnByb21vdGVZ
b3VuZ0NvZGVCbG9ja3MoKQoreworICAgIG1fb2xkQ29kZUJsb2Nrcy5hZGQobV9uZXdDb2RlQmxv
Y2tzLmJlZ2luKCksIG1fbmV3Q29kZUJsb2Nrcy5lbmQoKSk7CisgICAgbV9uZXdDb2RlQmxvY2tz
LmNsZWFyKCk7Cit9CisKK3ZvaWQgQ29kZUJsb2NrU2V0OjpjbGVhckFsbE1hcmtzKCkKIHsKLSAg
ICBmb3IgKENvZGVCbG9jayogY29kZUJsb2NrIDogbV9zZXQpIHsKKyAgICBwcm9tb3RlWW91bmdD
b2RlQmxvY2tzKCk7CisgICAgZm9yIChDb2RlQmxvY2sqIGNvZGVCbG9jayA6IG1fb2xkQ29kZUJs
b2NrcykgewogICAgICAgICBjb2RlQmxvY2stPm1fbWF5QmVFeGVjdXRpbmcgPSBmYWxzZTsKICAg
ICAgICAgY29kZUJsb2NrLT5tX3Zpc2l0QWdncmVnYXRlSGFzQmVlbkNhbGxlZCA9IGZhbHNlOwog
ICAgIH0KIH0KIAotdm9pZCBDb2RlQmxvY2tTZXQ6OmRlbGV0ZVVubWFya2VkQW5kVW5yZWZlcmVu
Y2VkKCkKK3ZvaWQgQ29kZUJsb2NrU2V0OjpjbGVhck1hcmtzRm9yQ29kZUJsb2Nrc0luUmVtZW1i
ZXJlZEV4ZWN1dGFibGVzKGNvbnN0IFZlY3Rvcjxjb25zdCBKU0NlbGwqPiYgcmVtZW1iZXJlZFNl
dCkKK3sKKyAgICBmb3IgKGNvbnN0IEpTQ2VsbCogY2VsbCA6IHJlbWVtYmVyZWRTZXQpIHsKKyAg
ICAgICAgU2NyaXB0RXhlY3V0YWJsZSogZXhlY3V0YWJsZSA9IGNvbnN0X2Nhc3Q8U2NyaXB0RXhl
Y3V0YWJsZSo+KGpzRHluYW1pY0Nhc3Q8Y29uc3QgU2NyaXB0RXhlY3V0YWJsZSo+KGNlbGwpKTsK
KyAgICAgICAgaWYgKCFleGVjdXRhYmxlKQorICAgICAgICAgICAgY29udGludWU7CisgICAgICAg
IGV4ZWN1dGFibGUtPmZvckVhY2hDb2RlQmxvY2soW10oQ29kZUJsb2NrKiBjb2RlQmxvY2spIHsK
KyAgICAgICAgICAgIGNvZGVCbG9jay0+bV9tYXlCZUV4ZWN1dGluZyA9IGZhbHNlOworICAgICAg
ICAgICAgY29kZUJsb2NrLT5tX3Zpc2l0QWdncmVnYXRlSGFzQmVlbkNhbGxlZCA9IGZhbHNlOwor
ICAgICAgICB9KTsKKyAgICB9Cit9CisKK3ZvaWQgQ29kZUJsb2NrU2V0OjpjbGVhck1hcmtzKEhl
YXBPcGVyYXRpb24gY29sbGVjdGlvblR5cGUsIGNvbnN0IFZlY3Rvcjxjb25zdCBKU0NlbGwqPiYg
cmVtZW1iZXJlZFNldCkKIHsKKyAgICBpZiAoY29sbGVjdGlvblR5cGUgPT0gRWRlbkNvbGxlY3Rp
b24pIHsKKyAgICAgICAgLy8gVGhpcyBlbnN1cmVzIHRoYXQgd2Ugd2lsbCByZXZpc2l0IENvZGVC
bG9ja3MgaW4gcmVtZW1iZXJlZCBFeGVjdXRhYmxlcyBldmVuIGlmIHRoZXkgd2VyZSBwcmV2aW91
c2x5IG1hcmtlZC4KKyAgICAgICAgY2xlYXJNYXJrc0ZvckNvZGVCbG9ja3NJblJlbWVtYmVyZWRF
eGVjdXRhYmxlcyhyZW1lbWJlcmVkU2V0KTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAg
IEFTU0VSVChjb2xsZWN0aW9uVHlwZSA9PSBGdWxsQ29sbGVjdGlvbik7CisgICAgY2xlYXJBbGxN
YXJrcygpOworfQorCit2b2lkIENvZGVCbG9ja1NldDo6ZGVsZXRlVW5tYXJrZWRBbmRVbnJlZmVy
ZW5jZWQoSGVhcE9wZXJhdGlvbiBjb2xsZWN0aW9uVHlwZSkKK3sKKyAgICBIYXNoU2V0PENvZGVC
bG9jayo+JiBzZXQgPSBjb2xsZWN0aW9uVHlwZSA9PSBFZGVuQ29sbGVjdGlvbiA/IG1fbmV3Q29k
ZUJsb2NrcyA6IG1fb2xkQ29kZUJsb2NrczsKKwogICAgIC8vIFRoaXMgbmVlZHMgdG8gYmUgYSBm
aXhwb2ludCBiZWNhdXNlIGNvZGUgYmxvY2tzIHRoYXQgYXJlIHVubWFya2VkIG1heQogICAgIC8v
IHJlZmVyIHRvIGVhY2ggb3RoZXIuIEZvciBleGFtcGxlLCBhIERGRyBjb2RlIGJsb2NrIHRoYXQg
aXMgb3duZWQgYnkKICAgICAvLyB0aGUgR0MgbWF5IHJlZmVyIHRvIGFuIEZUTCBmb3ItZW50cnkg
Y29kZSBibG9jayB0aGF0IGlzIGFsc28gb3duZWQgYnkKICAgICAvLyB0aGUgR0MuCiAgICAgVmVj
dG9yPENvZGVCbG9jayosIDE2PiB0b1JlbW92ZTsKICAgICBpZiAodmVyYm9zZSkKLSAgICAgICAg
ZGF0YUxvZygiRml4cG9pbnRpbmcgb3ZlciB1bm1hcmtlZCwgc2V0IHNpemUgPSAiLCBtX3NldC5z
aXplKCksICIuLi5cbiIpOworICAgICAgICBkYXRhTG9nKCJGaXhwb2ludGluZyBvdmVyIHVubWFy
a2VkLCBzZXQgc2l6ZSA9ICIsIHNldC5zaXplKCksICIuLi5cbiIpOwogICAgIGZvciAoOzspIHsK
LSAgICAgICAgZm9yIChDb2RlQmxvY2sqIGNvZGVCbG9jayA6IG1fc2V0KSB7CisgICAgICAgIGZv
ciAoQ29kZUJsb2NrKiBjb2RlQmxvY2sgOiBzZXQpIHsKICAgICAgICAgICAgIGlmICghY29kZUJs
b2NrLT5oYXNPbmVSZWYoKSkKICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAg
IGlmIChjb2RlQmxvY2stPm1fbWF5QmVFeGVjdXRpbmcpCkBAIC04MywyNCArMTIwLDI5IEBAIHZv
aWQgQ29kZUJsb2NrU2V0OjpkZWxldGVVbm1hcmtlZEFuZFVucmUKICAgICAgICAgaWYgKHRvUmVt
b3ZlLmlzRW1wdHkoKSkKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBmb3IgKENvZGVCbG9j
ayogY29kZUJsb2NrIDogdG9SZW1vdmUpCi0gICAgICAgICAgICBtX3NldC5yZW1vdmUoY29kZUJs
b2NrKTsKKyAgICAgICAgICAgIHNldC5yZW1vdmUoY29kZUJsb2NrKTsKICAgICAgICAgdG9SZW1v
dmUucmVzaXplKDApOwogICAgIH0KKworICAgIGlmIChjb2xsZWN0aW9uVHlwZSA9PSBFZGVuQ29s
bGVjdGlvbikKKyAgICAgICAgcHJvbW90ZVlvdW5nQ29kZUJsb2NrcygpOwogfQogCiB2b2lkIENv
ZGVCbG9ja1NldDo6cmVtb3ZlKENvZGVCbG9jayogY29kZUJsb2NrKQogewogICAgIGNvZGVCbG9j
ay0+ZGVyZWYoKTsKLSAgICBtX3NldC5yZW1vdmUoY29kZUJsb2NrKTsKKyAgICBpZiAobV9vbGRD
b2RlQmxvY2tzLmNvbnRhaW5zKGNvZGVCbG9jaykpCisgICAgICAgIG1fb2xkQ29kZUJsb2Nrcy5y
ZW1vdmUoY29kZUJsb2NrKTsKKyAgICBBU1NFUlQobV9uZXdDb2RlQmxvY2tzLmNvbnRhaW5zKGNv
ZGVCbG9jaykpOworICAgIG1fbmV3Q29kZUJsb2Nrcy5yZW1vdmUoY29kZUJsb2NrKTsKIH0KIAog
dm9pZCBDb2RlQmxvY2tTZXQ6OnRyYWNlTWFya2VkKFNsb3RWaXNpdG9yJiB2aXNpdG9yKQogewog
ICAgIGlmICh2ZXJib3NlKQotICAgICAgICBkYXRhTG9nKCJUcmFjaW5nICIsIG1fc2V0LnNpemUo
KSwgIiBjb2RlIGJsb2Nrcy5cbiIpOwotICAgIGZvciAoQ29kZUJsb2NrKiBjb2RlQmxvY2sgOiBt
X3NldCkgewotICAgICAgICBpZiAoIWNvZGVCbG9jay0+bV9tYXlCZUV4ZWN1dGluZykKLSAgICAg
ICAgICAgIGNvbnRpbnVlOworICAgICAgICBkYXRhTG9nKCJUcmFjaW5nICIsIG1fY3VycmVudGx5
RXhlY3V0aW5nLnNpemUoKSwgIiBjb2RlIGJsb2Nrcy5cbiIpOworICAgIGZvciAoQ29kZUJsb2Nr
KiBjb2RlQmxvY2sgOiBtX2N1cnJlbnRseUV4ZWN1dGluZykgeworICAgICAgICBBU1NFUlQoY29k
ZUJsb2NrLT5tX21heUJlRXhlY3V0aW5nKTsKICAgICAgICAgY29kZUJsb2NrLT52aXNpdEFnZ3Jl
Z2F0ZSh2aXNpdG9yKTsKICAgICB9CiB9CkBAIC0xMDgsOCArMTUwLDExIEBAIHZvaWQgQ29kZUJs
b2NrU2V0Ojp0cmFjZU1hcmtlZChTbG90VmlzaXQKIHZvaWQgQ29kZUJsb2NrU2V0OjpyZW1lbWJl
ckN1cnJlbnRseUV4ZWN1dGluZ0NvZGVCbG9ja3MoSGVhcCogaGVhcCkKIHsKICNpZiBFTkFCTEUo
R0dDKQotICAgIGZvciAoQ29kZUJsb2NrKiBjb2RlQmxvY2sgOiBtX2N1cnJlbnRseUV4ZWN1dGlu
ZykKKyAgICBmb3IgKENvZGVCbG9jayogY29kZUJsb2NrIDogbV9jdXJyZW50bHlFeGVjdXRpbmcp
IHsKICAgICAgICAgaGVhcC0+YWRkVG9SZW1lbWJlcmVkU2V0KGNvZGVCbG9jay0+b3duZXJFeGVj
dXRhYmxlKCkpOworICAgICAgICBBU1NFUlQoY29kZUJsb2NrLT5tX21heUJlRXhlY3V0aW5nKTsK
KyAgICAgICAgY29kZUJsb2NrLT5tX21heUJlRXhlY3V0aW5nID0gZmFsc2U7CisgICAgfQogICAg
IG1fY3VycmVudGx5RXhlY3V0aW5nLmNsZWFyKCk7CiAjZWxzZQogICAgIFVOVVNFRF9QQVJBTSho
ZWFwKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0NvZGVCbG9ja1NldC5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0NvZGVCbG9ja1NldC5oCShy
ZXZpc2lvbiAxNjY1MTUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9Db2RlQmxvY2tT
ZXQuaAkod29ya2luZyBjb3B5KQpAQCAtMjcsNiArMjcsNyBAQAogI2RlZmluZSBDb2RlQmxvY2tT
ZXRfaAogCiAjaW5jbHVkZSAiR0NTZWdtZW50ZWRBcnJheS5oIgorI2luY2x1ZGUgIkhlYXBPcGVy
YXRpb24uaCIKICNpbmNsdWRlIDx3dGYvSGFzaFNldC5oPgogI2luY2x1ZGUgPHd0Zi9Ob25jb3B5
YWJsZS5oPgogI2luY2x1ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+CkBAIC0zNyw2ICszOCw3IEBAIG5h
bWVzcGFjZSBKU0MgewogY2xhc3MgQmxvY2tBbGxvY2F0b3I7CiBjbGFzcyBDb2RlQmxvY2s7CiBj
bGFzcyBIZWFwOworY2xhc3MgSlNDZWxsOwogY2xhc3MgU2xvdFZpc2l0b3I7CiAKIC8vIENvZGVC
bG9ja1NldCB0cmFja3MgYWxsIENvZGVCbG9ja3MuIEV2ZXJ5IENvZGVCbG9jayBzdGFydHMgb3V0
IHdpdGggb25lCkBAIC01Myw5ICs1NSwxMiBAQCBwdWJsaWM6CiAgICAgLy8gQWRkIGEgQ29kZUJs
b2NrLiBUaGlzIGlzIG9ubHkgY2FsbGVkIGJ5IENvZGVCbG9jayBjb25zdHJ1Y3RvcnMuCiAgICAg
dm9pZCBhZGQoUGFzc1JlZlB0cjxDb2RlQmxvY2s+KTsKICAgICAKLSAgICAvLyBDbGVhciBhbGwg
bWFyayBiaXRzIGFzc29jaWF0ZWQgd2l0aCBERkcgY29kZSBibG9ja3MuCi0gICAgdm9pZCBjbGVh
ck1hcmtzKCk7Ci0gICAgCisgICAgLy8gQ2xlYXIgbWFyayBiaXRzIGZvciBjZXJ0YWluIENvZGVC
bG9ja3MgZGVwZW5kaW5nIG9uIHRoZSB0eXBlIG9mIGNvbGxlY3Rpb24uCisgICAgdm9pZCBjbGVh
ck1hcmtzKEhlYXBPcGVyYXRpb24sIGNvbnN0IFZlY3Rvcjxjb25zdCBKU0NlbGwqPiYpOworCisg
ICAgLy8gQ2xlYXIgYWxsIG1hcmsgYml0cyBmb3IgYWxsIENvZGVCbG9ja3MuCisgICAgdm9pZCBj
bGVhckFsbE1hcmtzKCk7CisKICAgICAvLyBNYXJrIGEgcG9pbnRlciB0aGF0IG1heSBiZSBhIENv
ZGVCbG9jayB0aGF0IGJlbG9uZ3MgdG8gdGhlIHNldCBvZiBERkcKICAgICAvLyBibG9ja3MuIFRo
aXMgaXMgZGVmaW5lZCBpbiBDb2RlQmxvY2suaC4KICAgICB2b2lkIG1hcmsoQ29kZUJsb2NrKiBj
YW5kaWRhdGVDb2RlQmxvY2spOwpAQCAtNjMsNyArNjgsNyBAQCBwdWJsaWM6CiAgICAgCiAgICAg
Ly8gRGVsZXRlIGFsbCBjb2RlIGJsb2NrcyB0aGF0IGFyZSBvbmx5IHJlZmVyZW5jZWQgYnkgdGhp
cyBzZXQgKGkuZS4gb3duZWQKICAgICAvLyBieSB0aGlzIHNldCksIGFuZCB0aGF0IGhhdmUgbm90
IGJlZW4gbWFya2VkLgotICAgIHZvaWQgZGVsZXRlVW5tYXJrZWRBbmRVbnJlZmVyZW5jZWQoKTsK
KyAgICB2b2lkIGRlbGV0ZVVubWFya2VkQW5kVW5yZWZlcmVuY2VkKEhlYXBPcGVyYXRpb24pOwog
ICAgIAogICAgIHZvaWQgcmVtb3ZlKENvZGVCbG9jayopOwogICAgIApAQCAtODAsMTggKzg1LDI4
IEBAIHB1YmxpYzoKICAgICAvLyB2aXNpdGVkLgogICAgIHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmN0
b3I+IHZvaWQgaXRlcmF0ZShGdW5jdG9yJiBmdW5jdG9yKQogICAgIHsKLSAgICAgICAgZm9yIChh
dXRvJiBjb2RlQmxvY2sgOiBtX3NldCkgeworICAgICAgICBmb3IgKGF1dG8mIGNvZGVCbG9jayA6
IG1fb2xkQ29kZUJsb2NrcykgeworICAgICAgICAgICAgYm9vbCBkb25lID0gZnVuY3Rvcihjb2Rl
QmxvY2spOworICAgICAgICAgICAgaWYgKGRvbmUpCisgICAgICAgICAgICAgICAgcmV0dXJuOwor
ICAgICAgICB9CisKKyAgICAgICAgZm9yIChhdXRvJiBjb2RlQmxvY2sgOiBtX25ld0NvZGVCbG9j
a3MpIHsKICAgICAgICAgICAgIGJvb2wgZG9uZSA9IGZ1bmN0b3IoY29kZUJsb2NrKTsKICAgICAg
ICAgICAgIGlmIChkb25lKQotICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAg
IHJldHVybjsKICAgICAgICAgfQogICAgIH0KIAogcHJpdmF0ZToKKyAgICB2b2lkIGNsZWFyTWFy
a3NGb3JDb2RlQmxvY2tzSW5SZW1lbWJlcmVkRXhlY3V0YWJsZXMoY29uc3QgVmVjdG9yPGNvbnN0
IEpTQ2VsbCo+Jik7CisgICAgdm9pZCBwcm9tb3RlWW91bmdDb2RlQmxvY2tzKCk7CisKICAgICAv
LyBUaGlzIGlzIG5vdCBhIHNldCBvZiBSZWZQdHI8Q29kZUJsb2NrPiBiZWNhdXNlIHdlIG5lZWQg
dG8gYmUgYWJsZSB0byBmaW5kCiAgICAgLy8gYXJiaXRyYXJ5IGJvZ3VzIHBvaW50ZXJzLiBJIGNv
dWxkIGhhdmUgd3JpdHRlbiBhIHRoaW5neSB0aGF0IGhhZCBwZWVrIHR5cGVzCiAgICAgLy8gYW5k
IGFsbCwgYnV0IHRoYXQgc2VlbWVkIGxpa2Ugb3ZlcmtpbGwuCi0gICAgSGFzaFNldDxDb2RlQmxv
Y2sqID4gbV9zZXQ7CisgICAgSGFzaFNldDxDb2RlQmxvY2sqPiBtX29sZENvZGVCbG9ja3M7Cisg
ICAgSGFzaFNldDxDb2RlQmxvY2sqPiBtX25ld0NvZGVCbG9ja3M7CiAgICAgR0NTZWdtZW50ZWRB
cnJheTxDb2RlQmxvY2sqPiBtX2N1cnJlbnRseUV4ZWN1dGluZzsKIH07CiAKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXAuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9oZWFwL0hlYXAuY3BwCShyZXZpc2lvbiAxNjY1MTUpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaGVhcC9IZWFwLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDQ3LDcgKzQ0Nywx
NCBAQCB2b2lkIEhlYXA6Om1hcmtSb290cygpCiAgICAgZG91YmxlIGdjU3RhcnRUaW1lID0gV1RG
Ojptb25vdG9uaWNhbGx5SW5jcmVhc2luZ1RpbWUoKTsKICNlbmRpZgogCi0gICAgbV9jb2RlQmxv
Y2tzLmNsZWFyTWFya3MoKTsKKyNpZiBFTkFCTEUoR0dDKQorICAgIFZlY3Rvcjxjb25zdCBKU0Nl
bGwqPiByZW1lbWJlcmVkU2V0KG1fc2xvdFZpc2l0b3IubWFya1N0YWNrKCkuc2l6ZSgpKTsKKyAg
ICBtX3Nsb3RWaXNpdG9yLm1hcmtTdGFjaygpLmZpbGxWZWN0b3IocmVtZW1iZXJlZFNldCk7Cisj
ZWxzZQorICAgIFZlY3Rvcjxjb25zdCBKU0NlbGwqPiByZW1lbWJlcmVkU2V0OworI2VuZGlmCisK
KyAgICBtX2NvZGVCbG9ja3MuY2xlYXJNYXJrcyhtX29wZXJhdGlvbkluUHJvZ3Jlc3MsIHJlbWVt
YmVyZWRTZXQpOwogCiAgICAgLy8gV2UgZ2F0aGVyIGNvbnNlcnZhdGl2ZSByb290cyBiZWZvcmUg
Y2xlYXJpbmcgbWFyayBiaXRzIGJlY2F1c2UgY29uc2VydmF0aXZlCiAgICAgLy8gZ2F0aGVyaW5n
IHVzZXMgdGhlIG1hcmsgYml0cyB0byBkZXRlcm1pbmUgd2hldGhlciBhIHJlZmVyZW5jZSBpcyB2
YWxpZC4KQEAgLTQ2NSwxMyArNDcyLDYgQEAgdm9pZCBIZWFwOjptYXJrUm9vdHMoKQogICAgIG1f
c2xvdFZpc2l0b3IuZGlkU3RhcnRNYXJraW5nKCk7CiAgICAgSGVhcFJvb3RWaXNpdG9yIGhlYXBS
b290VmlzaXRvcihtX3Nsb3RWaXNpdG9yKTsKIAotI2lmIEVOQUJMRShHR0MpCi0gICAgVmVjdG9y
PGNvbnN0IEpTQ2VsbCo+IHJlbWVtYmVyZWRTZXQobV9zbG90VmlzaXRvci5tYXJrU3RhY2soKS5z
aXplKCkpOwotICAgIG1fc2xvdFZpc2l0b3IubWFya1N0YWNrKCkuZmlsbFZlY3RvcihyZW1lbWJl
cmVkU2V0KTsKLSNlbHNlCi0gICAgVmVjdG9yPGNvbnN0IEpTQ2VsbCo+IHJlbWVtYmVyZWRTZXQ7
Ci0jZW5kaWYKLQogICAgIHsKICAgICAgICAgUGFyYWxsZWxNb2RlRW5hYmxlciBlbmFibGVyKG1f
c2xvdFZpc2l0b3IpOwogCkBAIC04MTQsOCArODE0LDggQEAgdm9pZCBIZWFwOjpkZWxldGVBbGxD
b21waWxlZENvZGUoKQogICAgICAgICBzdGF0aWNfY2FzdDxGdW5jdGlvbkV4ZWN1dGFibGUqPihj
dXJyZW50KS0+Y2xlYXJDb2RlSWZOb3RDb21waWxpbmcoKTsKICAgICB9CiAKLSAgICBtX2NvZGVC
bG9ja3MuY2xlYXJNYXJrcygpOwotICAgIG1fY29kZUJsb2Nrcy5kZWxldGVVbm1hcmtlZEFuZFVu
cmVmZXJlbmNlZCgpOworICAgIG1fY29kZUJsb2Nrcy5jbGVhckFsbE1hcmtzKCk7CisgICAgbV9j
b2RlQmxvY2tzLmRlbGV0ZVVubWFya2VkQW5kVW5yZWZlcmVuY2VkKEZ1bGxDb2xsZWN0aW9uKTsK
IH0KIAogdm9pZCBIZWFwOjpkZWxldGVBbGxVbmxpbmtlZEZ1bmN0aW9uQ29kZSgpCkBAIC04Mjks
NyArODI5LDggQEAgdm9pZCBIZWFwOjpkZWxldGVBbGxVbmxpbmtlZEZ1bmN0aW9uQ29kZQogCiB2
b2lkIEhlYXA6OmRlbGV0ZVVubWFya2VkQ29tcGlsZWRDb2RlKCkKIHsKLSAgICBHQ1BIQVNFKERl
bGV0ZUNvZGVCbG9ja3MpOworICAgIHsKKyAgICBHQ1BIQVNFKENsZWFyVW5tYXJrZWRFeGVjdXRh
Ymxlcyk7CiAgICAgRXhlY3V0YWJsZUJhc2UqIG5leHQ7CiAgICAgZm9yIChFeGVjdXRhYmxlQmFz
ZSogY3VycmVudCA9IG1fY29tcGlsZWRDb2RlLmhlYWQoKTsgY3VycmVudDsgY3VycmVudCA9IG5l
eHQpIHsKICAgICAgICAgbmV4dCA9IGN1cnJlbnQtPm5leHQoKTsKQEAgLTg0MSw4ICs4NDIsMTAg
QEAgdm9pZCBIZWFwOjpkZWxldGVVbm1hcmtlZENvbXBpbGVkQ29kZSgpCiAgICAgICAgIEV4ZWN1
dGFibGVCYXNlOjpjbGVhckNvZGVWaXJ0dWFsKGN1cnJlbnQpOwogICAgICAgICBtX2NvbXBpbGVk
Q29kZS5yZW1vdmUoY3VycmVudCk7CiAgICAgfQorICAgIH0KIAotICAgIG1fY29kZUJsb2Nrcy5k
ZWxldGVVbm1hcmtlZEFuZFVucmVmZXJlbmNlZCgpOworICAgIEdDUEhBU0UoRGVsZXRlQ29kZUJs
b2Nrcyk7CisgICAgbV9jb2RlQmxvY2tzLmRlbGV0ZVVubWFya2VkQW5kVW5yZWZlcmVuY2VkKG1f
b3BlcmF0aW9uSW5Qcm9ncmVzcyk7CiAgICAgbV9qaXRTdHViUm91dGluZXMuZGVsZXRlVW5tYXJr
ZWRKZXR0aXNvbmVkU3R1YlJvdXRpbmVzKCk7CiB9CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0V4ZWN1dGFibGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0V4ZWN1dGFibGUuY3BwCShyZXZpc2lvbiAxNjY1MTUpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9FeGVjdXRhYmxlLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMTc4LDYgKzE3OCw4IEBAIHZvaWQgU2NyaXB0RXhlY3V0YWJsZTo6aW5zdGFsbENvZGUoQ29k
ZUIKICAgICBEZWJ1Z2dlciogZGVidWdnZXIgPSBnZW5lcmljQ29kZUJsb2NrLT5nbG9iYWxPYmpl
Y3QoKS0+ZGVidWdnZXIoKTsKICAgICBpZiAoZGVidWdnZXIpCiAgICAgICAgIGRlYnVnZ2VyLT5y
ZWdpc3RlckNvZGVCbG9jayhnZW5lcmljQ29kZUJsb2NrKTsKKworICAgIEhlYXA6OmhlYXAodGhp
cyktPndyaXRlQmFycmllcih0aGlzKTsKIH0KIAogUGFzc1JlZlB0cjxDb2RlQmxvY2s+IFNjcmlw
dEV4ZWN1dGFibGU6Om5ld0NvZGVCbG9ja0ZvcigKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0V4ZWN1dGFibGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9FeGVjdXRhYmxlLmgJKHJldmlzaW9uIDE2NjUxNSkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0V4ZWN1dGFibGUuaAkod29ya2luZyBjb3B5KQpAQCAtNDI5LDYg
KzQyOSw4IEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIHByZXBhcmVGb3JFeGVjdXRpb25JbXBs
KGV4ZWMsIGZ1bmN0aW9uLCBzY29wZSwga2luZCk7CiAgICAgfQogCisgICAgdGVtcGxhdGUgPHR5
cGVuYW1lIEZ1bmN0b3I+IHZvaWQgZm9yRWFjaENvZGVCbG9jayhGdW5jdG9yJiYpOworCiBwcml2
YXRlOgogICAgIEpTT2JqZWN0KiBwcmVwYXJlRm9yRXhlY3V0aW9uSW1wbChFeGVjU3RhdGUqLCBK
U0Z1bmN0aW9uKiwgSlNTY29wZSoqLCBDb2RlU3BlY2lhbGl6YXRpb25LaW5kKTsKIAo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>228428</attachid>
            <date>2014-04-02 14:08:44 -0700</date>
            <delta_ts>2014-04-02 16:50:52 -0700</delta_ts>
            <desc>Final patch</desc>
            <filename>bug-127152-20140402140748.patch</filename>
            <type>text/plain</type>
            <size>21071</size>
            <attacher name="Mark Hahnenberg">mhahnenberg</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTY2NjY1KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDU0IEBA
CisyMDE0LTAzLTMxICBNYXJrIEhhaG5lbmJlcmcgIDxtaGFobmVuYmVyZ0BhcHBsZS5jb20+CisK
KyAgICAgICAgQ29kZUJsb2NrU2V0IHNob3VsZCBiZSBnZW5lcmF0aW9uYWwKKyAgICAgICAgaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEyNzE1MgorCisgICAgICAgIFJl
dmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIER1cmluZyBFZGVuQ29sbGVjdGlv
bnMgd2Ugbm93IG9ubHkgdmlzaXQgdGhvc2UgQ29kZUJsb2NrcyB0aGF0OgorICAgICAgICBhKSBB
cmUgbmV3IHNpbmNlIHRoZSBsYXN0IGNvbGxlY3Rpb24gaWYgdGhleSB3ZXJlIHNvbWVob3cgb3Ro
ZXJ3aXNlIHJlYWNoYWJsZS4KKyAgICAgICAgYikgQXJlIHJlYWNoYWJsZSBmcm9tIGFuIEV4ZWN1
dGFibGUgdGhhdCBpcyBwYXJ0IG9mIHRoZSByZW1lbWJlcmVkIHNldC4KKworICAgICAgICAqIGJ5
dGVjb2RlL0NvZGVCbG9jay5jcHA6CisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6Q29kZUJsb2Nr
KTogSW5pdGlhbGl6ZSB1bmluaXRpYWxpemVkIHZhcmlhYmxlcy4KKyAgICAgICAgKEpTQzo6Q29k
ZUJsb2NrOjp2aXNpdEFnZ3JlZ2F0ZSk6IE1vdmUgdGhlIGFkZGl0aW9uIG9mIHRoZSB3ZWFrIHJl
ZmVyZW5jZSBoYXJ2ZXN0ZXIgYWZ0ZXIgdGhlCisgICAgICAgIHNob3VsZEltbWVkaWF0ZWx5QXNz
dW1lTGl2ZW5lc3NEdXJpbmdTY2FuIGNoZWNrIHNpbmNlIGl0J3MgcmVkdW5kYW50IGlmIHdlIGFz
c3VtZSBsaXZlbmVzcy4KKyAgICAgICAgKiBieXRlY29kZS9Db2RlQmxvY2suaDoKKyAgICAgICAg
KEpTQzo6Q29kZUJsb2NrOjpmb3JFYWNoUmVsYXRlZENvZGVCbG9jayk6IEV4ZWN1dGVzIGEgZnVu
Y3RvciBmb3IgZWFjaCBDb2RlQmxvY2sgcmVhY2hhYmxlIGZyb20gdGhlIGN1cnJlbnQgQ29kZUJs
b2NrIChpbmNsdWRpbmcgdGhpcykuCisgICAgICAgIFdlIHVzZSB0aGlzIHRvIGNsZWFyIG1hcmtz
IGZvciB0aGUgQ29kZUJsb2NrcyBvZiByZW1lbWJlcmVkIEV4ZWN1dGFibGVzIChzZWU6IENvZGVC
bG9ja1NldDo6Y2xlYXJNYXJrc0ZvckVkZW5Db2xsZWN0aW9uKS4KKyAgICAgICAgKEpTQzo6Q29k
ZUJsb2NrU2V0OjptYXJrKTogQWxzbyBjaGVjayB0aGUgc2V0IG9mIG5ldyBDb2RlQmxvY2tzIGZv
ciBtZW1lYmVyc2hpcCB3aGVuIGRvaW5nIGNvbnNlcnZhdGl2ZSBzY2FubmluZy4KKyAgICAgICAg
KEpTQzo6U2NyaXB0RXhlY3V0YWJsZTo6Zm9yRWFjaENvZGVCbG9jayk6IEV4ZWN1dGVzIGEgZnVu
Y3RvciBmb3IgZWFjaCBvZiB0aGlzIEV4ZWN1dGFibGUncyBDb2RlQmxvY2tzLgorICAgICAgICAq
IGhlYXAvQ29kZUJsb2NrU2V0LmNwcDoKKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrU2V0Ojp+Q29k
ZUJsb2NrU2V0KToKKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrU2V0OjphZGQpOgorICAgICAgICAo
SlNDOjpDb2RlQmxvY2tTZXQ6OnByb21vdGVZb3VuZ0NvZGVCbG9ja3MpOiBNb3ZlcyBhbGwgQ29k
ZUJsb2NrcyBjdXJyZW50bHkgaW4gdGhlIHNldCBvZiBuZXcgQ29kZUJsb2NrcyBpbnRvIAorICAg
ICAgICB0aGUgc2V0IG9mIG9sZCBDb2RlQmxvY2tzLgorICAgICAgICAoSlNDOjpDb2RlQmxvY2tT
ZXQ6OmNsZWFyTWFya3NGb3JGdWxsQ29sbGVjdGlvbik6IENsZWFycyB0aGUgbWFya3MgZm9yIGFs
bCBDb2RlQmxvY2tzLgorICAgICAgICAoSlNDOjpDb2RlQmxvY2tTZXQ6OmNsZWFyTWFya3NGb3JF
ZGVuQ29sbGVjdGlvbik6IENsZWFycyB0aGUgbWFya3MgZm9yIENvZGVCbG9ja3Mgb3duZWQgYnkg
RXhlY3V0YWJsZXMgaW4gdGhlIAorICAgICAgICByZW1lbWJlcmVkIHNldC4gV2hlbiBhbiBFeGVj
dXRhYmxlIGlzIGFkZGVkIHRvIHRoZSByZW1lbWJlcmVkIHNldCBpdCdzIHR5cGljYWxseSBiZWNh
dXNlIHdlIG5lZWQgdG8gZG8gc29tZXRoaW5nIAorICAgICAgICB3aXRoIGl0cyBDb2RlQmxvY2su
CisgICAgICAgIChKU0M6OkNvZGVCbG9ja1NldDo6Y2xlYXJNYXJrcyk6CisgICAgICAgIChKU0M6
OkNvZGVCbG9ja1NldDo6ZGVsZXRlVW5tYXJrZWRBbmRVbnJlZmVyZW5jZWQpOiBGaXhwb2ludHMg
b3ZlciBlaXRoZXIganVzdCB0aGUgbmV3IENvZGVCbG9ja3Mgb3IgYWxsIENvZGVCbG9ja3MKKyAg
ICAgICAgdG8gZGV0ZXJtaW5lIHdoaWNoIENvZGVCbG9ja3MgYXJlIGRlYWQgYW5kIGVhZ2VybHkg
ZmluYWxpemVzL2RlbGV0ZXMgdGhlbS4KKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrU2V0OjpyZW1v
dmUpOgorICAgICAgICAoSlNDOjpDb2RlQmxvY2tTZXQ6OnRyYWNlTWFya2VkKTogSXRlcmF0ZSBv
bmx5IHRoZSBjdXJyZW50bHkgZXhlY3V0aW5nIENvZGVCbG9ja3MgaW5zdGVhZCBvZiBhbGwgQ29k
ZUJsb2Nrcy4KKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrU2V0OjpyZW1lbWJlckN1cnJlbnRseUV4
ZWN1dGluZ0NvZGVCbG9ja3MpOiBDbGVhciBtX21heUJlRXhlY3V0aW5nIGZvciBhbGwgY3VycmVu
dGx5IGV4ZWN1dGluZyAKKyAgICAgICAgQ29kZUJsb2NrcyBiZWNhdXNlIHdlIG5vIGxvbmdlciBh
bHdheXMgZG8gdGhpcyBhdCB0aGUgYmVnaW5uaW5nIG9mIEVkZW5Db2xsZWN0aW9ucy4KKyAgICAg
ICAgKiBoZWFwL0NvZGVCbG9ja1NldC5oOgorICAgICAgICAoSlNDOjpDb2RlQmxvY2tTZXQ6Oml0
ZXJhdGUpOgorICAgICAgICAqIGhlYXAvSGVhcC5jcHA6CisgICAgICAgIChKU0M6OkhlYXA6Om1h
cmtSb290cyk6CisgICAgICAgIChKU0M6OkhlYXA6OmRlbGV0ZUFsbENvbXBpbGVkQ29kZSk6Cisg
ICAgICAgIChKU0M6OkhlYXA6OmRlbGV0ZVVubWFya2VkQ29tcGlsZWRDb2RlKToKKyAgICAgICAg
KiBydW50aW1lL0V4ZWN1dGFibGUuY3BwOgorICAgICAgICAoSlNDOjpTY3JpcHRFeGVjdXRhYmxl
OjppbnN0YWxsQ29kZSk6IFdyaXRlIGJhcnJpZXIgY29kZSBvbiBpbnN0YWxsYXRpb24uIFdlIGRv
IHRoaXMgZHVlIHRvIHRoZSBmb2xsb3dpbmcgc2l0dWF0aW9uOgorICAgICAgICBhKSBBIENvZGVC
bG9jayBpcyBjcmVhdGVkIGFuZCBpcyBjb21waWxlZCBvbiBhIERGRyB3b3JrZXIgdGhyZWFkLgor
ICAgICAgICBiKSBObyBHQyBoYXBwZW5zLgorICAgICAgICBjKSBUaGUgQ29kZUJsb2NrIGhhcyBm
aW5pc2hlZCBiZWluZyBjb21waWxlZCBhbmQgaXMgaW5zdGFsbGVkIGluIHRoZSBFeGVjdXRhYmxl
LgorICAgICAgICBkKSBUaGUgZnVuY3Rpb24gbmV2ZXIgZXhlY3V0ZXMgYmVmb3JlIHRoZSBuZXh0
IEdDLgorICAgICAgICBlKSBUaGUgbmV4dCBHQyBuZWVkcyBuZWVkcyB0byB2aXNpdCB0aGUgbmV3
IENvZGVCbG9jayBidXQgdGhlIEV4ZWN1dGFibGUgd29uJ3QgYmUgcmV2aXNpdGVkIHVubGVzcyAK
KyAgICAgICAgICAgIGl0J3MgYWRkZWQgdG8gdGhlIHJlbWVtYmVyZWQgc2V0LgorCiAyMDE0LTA0
LTAyICBNYXJrIExhbSAgPG1hcmsubGFtQGFwcGxlLmNvbT4KIAogICAgICAgICBBZGRlZCBzb21l
IG1vcmUgZGF0YUxvZyBpbmZvIGZvciBPU1IgZXhpdHMuCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmNwcAkocmV2aXNpb24gMTY2NjY1KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTE0NDYsNiArMTQ0Niw4IEBAIENvZGVCbG9jazo6Q29kZUJsb2NrKENvcHlQYXJzZWRCbG9j
a1RhZywKICAgICAsIG1fYWN0aXZhdGlvblJlZ2lzdGVyKG90aGVyLm1fYWN0aXZhdGlvblJlZ2lz
dGVyKQogICAgICwgbV9pc1N0cmljdE1vZGUob3RoZXIubV9pc1N0cmljdE1vZGUpCiAgICAgLCBt
X25lZWRzQWN0aXZhdGlvbihvdGhlci5tX25lZWRzQWN0aXZhdGlvbikKKyAgICAsIG1fbWF5QmVF
eGVjdXRpbmcoZmFsc2UpCisgICAgLCBtX3Zpc2l0QWdncmVnYXRlSGFzQmVlbkNhbGxlZChmYWxz
ZSkKICAgICAsIG1fc291cmNlKG90aGVyLm1fc291cmNlKQogICAgICwgbV9zb3VyY2VPZmZzZXQo
b3RoZXIubV9zb3VyY2VPZmZzZXQpCiAgICAgLCBtX2ZpcnN0TGluZUNvbHVtbk9mZnNldChvdGhl
ci5tX2ZpcnN0TGluZUNvbHVtbk9mZnNldCkKQEAgLTE1MDMsNiArMTUwNSw4IEBAIENvZGVCbG9j
azo6Q29kZUJsb2NrKFNjcmlwdEV4ZWN1dGFibGUqIG8KICAgICAsIG1fYWN0aXZhdGlvblJlZ2lz
dGVyKHVubGlua2VkQ29kZUJsb2NrLT5hY3RpdmF0aW9uUmVnaXN0ZXIoKSkKICAgICAsIG1faXNT
dHJpY3RNb2RlKHVubGlua2VkQ29kZUJsb2NrLT5pc1N0cmljdE1vZGUoKSkKICAgICAsIG1fbmVl
ZHNBY3RpdmF0aW9uKHVubGlua2VkQ29kZUJsb2NrLT5oYXNBY3RpdmF0aW9uUmVnaXN0ZXIoKSAm
JiB1bmxpbmtlZENvZGVCbG9jay0+Y29kZVR5cGUoKSA9PSBGdW5jdGlvbkNvZGUpCisgICAgLCBt
X21heUJlRXhlY3V0aW5nKGZhbHNlKQorICAgICwgbV92aXNpdEFnZ3JlZ2F0ZUhhc0JlZW5DYWxs
ZWQoZmFsc2UpCiAgICAgLCBtX3NvdXJjZShzb3VyY2VQcm92aWRlcikKICAgICAsIG1fc291cmNl
T2Zmc2V0KHNvdXJjZU9mZnNldCkKICAgICAsIG1fZmlyc3RMaW5lQ29sdW1uT2Zmc2V0KGZpcnN0
TGluZUNvbHVtbk9mZnNldCkKQEAgLTE5MzcsMTAgKzE5NDEsNiBAQCB2b2lkIENvZGVCbG9jazo6
dmlzaXRBZ2dyZWdhdGUoU2xvdFZpc2l0CiAgICAgLy8gYW5kIHdoZW4gaXQgcnVucywgaXQgZmln
dXJlcyBvdXQgd2hldGhlciBpdCBoYXMgYW55IHdvcmsgdG8gZG8uCiAgICAgdmlzaXRvci5hZGRV
bmNvbmRpdGlvbmFsRmluYWxpemVyKHRoaXMpOwogICAgIAotICAgIC8vIFRoZXJlIGFyZSB0d28g
dGhpbmdzIHRoYXQgd2UgdXNlIHdlYWsgcmVmZXJlbmNlIGhhcnZlc3RlcnMgZm9yOiBERkcgZml4
cG9pbnQgZm9yCi0gICAgLy8gamV0dGlzb25pbmcsIGFuZCB0cnlpbmcgdG8gZmluZCBzdHJ1Y3R1
cmVzIHRoYXQgd291bGQgYmUgbGl2ZSBiYXNlZCBvbiBzb21lCi0gICAgLy8gaW5saW5lIGNhY2hl
LiBTbyBpdCBtYWtlcyBzZW5zZSB0byByZWdpc3RlciB0aGVtIHJlZ2FyZGxlc3MuCi0gICAgdmlz
aXRvci5hZGRXZWFrUmVmZXJlbmNlSGFydmVzdGVyKHRoaXMpOwogICAgIG1fYWxsVHJhbnNpdGlv
bnNIYXZlQmVlbk1hcmtlZCA9IGZhbHNlOwogICAgIAogICAgIGlmIChzaG91bGRJbW1lZGlhdGVs
eUFzc3VtZUxpdmVuZXNzRHVyaW5nU2NhbigpKSB7CkBAIC0xOTUxLDYgKzE5NTEsMTEgQEAgdm9p
ZCBDb2RlQmxvY2s6OnZpc2l0QWdncmVnYXRlKFNsb3RWaXNpdAogICAgICAgICByZXR1cm47CiAg
ICAgfQogICAgIAorICAgIC8vIFRoZXJlIGFyZSB0d28gdGhpbmdzIHRoYXQgd2UgdXNlIHdlYWsg
cmVmZXJlbmNlIGhhcnZlc3RlcnMgZm9yOiBERkcgZml4cG9pbnQgZm9yCisgICAgLy8gamV0dGlz
b25pbmcsIGFuZCB0cnlpbmcgdG8gZmluZCBzdHJ1Y3R1cmVzIHRoYXQgd291bGQgYmUgbGl2ZSBi
YXNlZCBvbiBzb21lCisgICAgLy8gaW5saW5lIGNhY2hlLiBTbyBpdCBtYWtlcyBzZW5zZSB0byBy
ZWdpc3RlciB0aGVtIHJlZ2FyZGxlc3MuCisgICAgdmlzaXRvci5hZGRXZWFrUmVmZXJlbmNlSGFy
dmVzdGVyKHRoaXMpOworCiAjaWYgRU5BQkxFKERGR19KSVQpCiAgICAgLy8gV2UgZ2V0IGhlcmUg
aWYgd2UncmUgbGl2ZSBpbiB0aGUgc2Vuc2UgdGhhdCBvdXIgb3duZXIgZXhlY3V0YWJsZSBpcyBs
aXZlLAogICAgIC8vIGJ1dCB3ZSdyZSBub3QgeWV0IGxpdmUgZm9yIHN1cmUgaW4gYW5vdGhlciBz
ZW5zZTogd2UgbWF5IHlldCBkZWNpZGUgdGhhdCB0aGlzCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5oCShyZXZpc2lvbiAxNjY2NjUpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmgJKHdvcmtpbmcgY29weSkKQEAgLTEz
Miw2ICsxMzIsMjMgQEAgcHVibGljOgogICAgIENvZGVCbG9jayogYWx0ZXJuYXRpdmUoKSB7IHJl
dHVybiBtX2FsdGVybmF0aXZlLmdldCgpOyB9CiAgICAgUGFzc1JlZlB0cjxDb2RlQmxvY2s+IHJl
bGVhc2VBbHRlcm5hdGl2ZSgpIHsgcmV0dXJuIG1fYWx0ZXJuYXRpdmUucmVsZWFzZSgpOyB9CiAg
ICAgdm9pZCBzZXRBbHRlcm5hdGl2ZShQYXNzUmVmUHRyPENvZGVCbG9jaz4gYWx0ZXJuYXRpdmUp
IHsgbV9hbHRlcm5hdGl2ZSA9IGFsdGVybmF0aXZlOyB9CisKKyAgICB0ZW1wbGF0ZSA8dHlwZW5h
bWUgRnVuY3Rvcj4gdm9pZCBmb3JFYWNoUmVsYXRlZENvZGVCbG9jayhGdW5jdG9yJiYgZnVuY3Rv
cikKKyAgICB7CisgICAgICAgIEZ1bmN0b3IgZihzdGQ6OmZvcndhcmQ8RnVuY3Rvcj4oZnVuY3Rv
cikpOworICAgICAgICBWZWN0b3I8Q29kZUJsb2NrKiwgND4gY29kZUJsb2NrczsKKyAgICAgICAg
Y29kZUJsb2Nrcy5hcHBlbmQodGhpcyk7CisKKyAgICAgICAgd2hpbGUgKCFjb2RlQmxvY2tzLmlz
RW1wdHkoKSkgeworICAgICAgICAgICAgQ29kZUJsb2NrKiBjdXJyZW50Q29kZUJsb2NrID0gY29k
ZUJsb2Nrcy50YWtlTGFzdCgpOworICAgICAgICAgICAgZihjdXJyZW50Q29kZUJsb2NrKTsKKwor
ICAgICAgICAgICAgaWYgKENvZGVCbG9jayogYWx0ZXJuYXRpdmUgPSBjdXJyZW50Q29kZUJsb2Nr
LT5hbHRlcm5hdGl2ZSgpKQorICAgICAgICAgICAgICAgIGNvZGVCbG9ja3MuYXBwZW5kKGFsdGVy
bmF0aXZlKTsKKyAgICAgICAgICAgIGlmIChDb2RlQmxvY2sqIG9zckVudHJ5QmxvY2sgPSBjdXJy
ZW50Q29kZUJsb2NrLT5zcGVjaWFsT1NSRW50cnlCbG9ja09yTnVsbCgpKQorICAgICAgICAgICAg
ICAgIGNvZGVCbG9ja3MuYXBwZW5kKG9zckVudHJ5QmxvY2spOworICAgICAgICB9CisgICAgfQog
ICAgIAogICAgIENvZGVTcGVjaWFsaXphdGlvbktpbmQgc3BlY2lhbGl6YXRpb25LaW5kKCkgY29u
c3QKICAgICB7CkBAIC0xMjc1LDEyICsxMjkyLDEyIEBAIGlubGluZSB2b2lkIENvZGVCbG9ja1Nl
dDo6bWFyayh2b2lkKiBjYW4KICAgICAvLyAtMSArIDEgPSAwCiAgICAgaWYgKHZhbHVlICsgMSA8
PSAxKQogICAgICAgICByZXR1cm47Ci0gICAgCi0gICAgSGFzaFNldDxDb2RlQmxvY2sqPjo6aXRl
cmF0b3IgaXRlciA9IG1fc2V0LmZpbmQoc3RhdGljX2Nhc3Q8Q29kZUJsb2NrKj4oY2FuZGlkYXRl
Q29kZUJsb2NrKSk7Ci0gICAgaWYgKGl0ZXIgPT0gbV9zZXQuZW5kKCkpCisKKyAgICBDb2RlQmxv
Y2sqIGNvZGVCbG9jayA9IHN0YXRpY19jYXN0PENvZGVCbG9jayo+KGNhbmRpZGF0ZUNvZGVCbG9j
ayk7IAorICAgIGlmICghbV9vbGRDb2RlQmxvY2tzLmNvbnRhaW5zKGNvZGVCbG9jaykgJiYgIW1f
bmV3Q29kZUJsb2Nrcy5jb250YWlucyhjb2RlQmxvY2spKQogICAgICAgICByZXR1cm47Ci0gICAg
Ci0gICAgbWFyaygqaXRlcik7CisKKyAgICBtYXJrKGNvZGVCbG9jayk7CiB9CiAKIGlubGluZSB2
b2lkIENvZGVCbG9ja1NldDo6bWFyayhDb2RlQmxvY2sqIGNvZGVCbG9jaykKQEAgLTEyOTIsMTEg
KzEzMDksNDAgQEAgaW5saW5lIHZvaWQgQ29kZUJsb2NrU2V0OjptYXJrKENvZGVCbG9jawogICAg
ICAgICByZXR1cm47CiAgICAgCiAgICAgY29kZUJsb2NrLT5tX21heUJlRXhlY3V0aW5nID0gdHJ1
ZTsKKyAgICAvLyBXZSBtaWdodCBub3QgaGF2ZSBjbGVhcmVkIHRoZSBtYXJrcyBmb3IgdGhpcyBD
b2RlQmxvY2ssIGJ1dCB3ZSBuZWVkIHRvIHZpc2l0IGl0LgorICAgIGNvZGVCbG9jay0+bV92aXNp
dEFnZ3JlZ2F0ZUhhc0JlZW5DYWxsZWQgPSBmYWxzZTsKICNpZiBFTkFCTEUoR0dDKQogICAgIG1f
Y3VycmVudGx5RXhlY3V0aW5nLmFwcGVuZChjb2RlQmxvY2spOwogI2VuZGlmCiB9CiAKK3RlbXBs
YXRlIDx0eXBlbmFtZSBGdW5jdG9yPiBpbmxpbmUgdm9pZCBTY3JpcHRFeGVjdXRhYmxlOjpmb3JF
YWNoQ29kZUJsb2NrKEZ1bmN0b3ImJiBmdW5jdG9yKQoreworICAgIHN3aXRjaCAodHlwZSgpKSB7
CisgICAgY2FzZSBQcm9ncmFtRXhlY3V0YWJsZVR5cGU6IHsKKyAgICAgICAganNDYXN0PFByb2dy
YW1FeGVjdXRhYmxlKj4odGhpcyktPm1fcHJvZ3JhbUNvZGVCbG9jay0+Zm9yRWFjaFJlbGF0ZWRD
b2RlQmxvY2soc3RkOjpmb3J3YXJkPEZ1bmN0b3I+KGZ1bmN0b3IpKTsKKyAgICAgICAgYnJlYWs7
CisgICAgfQorICAgICAgICAKKyAgICBjYXNlIEV2YWxFeGVjdXRhYmxlVHlwZTogeworICAgICAg
ICBqc0Nhc3Q8RXZhbEV4ZWN1dGFibGUqPih0aGlzKS0+bV9ldmFsQ29kZUJsb2NrLT5mb3JFYWNo
UmVsYXRlZENvZGVCbG9jayhzdGQ6OmZvcndhcmQ8RnVuY3Rvcj4oZnVuY3RvcikpOworICAgICAg
ICBicmVhazsKKyAgICB9CisgICAgICAgIAorICAgIGNhc2UgRnVuY3Rpb25FeGVjdXRhYmxlVHlw
ZTogeworICAgICAgICBGdW5jdG9yIGYoc3RkOjpmb3J3YXJkPEZ1bmN0b3I+KGZ1bmN0b3IpKTsK
KyAgICAgICAgRnVuY3Rpb25FeGVjdXRhYmxlKiBleGVjdXRhYmxlID0ganNDYXN0PEZ1bmN0aW9u
RXhlY3V0YWJsZSo+KHRoaXMpOworICAgICAgICBpZiAoQ29kZUJsb2NrKiBjb2RlQmxvY2sgPSBl
eGVjdXRhYmxlLT5tX2NvZGVCbG9ja0ZvckNhbGwuZ2V0KCkpCisgICAgICAgICAgICBjb2RlQmxv
Y2stPmZvckVhY2hSZWxhdGVkQ29kZUJsb2NrKGYpOworICAgICAgICBpZiAoQ29kZUJsb2NrKiBj
b2RlQmxvY2sgPSBleGVjdXRhYmxlLT5tX2NvZGVCbG9ja0ZvckNvbnN0cnVjdC5nZXQoKSkKKyAg
ICAgICAgICAgIGNvZGVCbG9jay0+Zm9yRWFjaFJlbGF0ZWRDb2RlQmxvY2soZik7CisgICAgICAg
IGJyZWFrOworICAgIH0KKyAgICBkZWZhdWx0OgorICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1Rf
UkVBQ0hFRCgpOworICAgIH0KK30KKwogfSAvLyBuYW1lc3BhY2UgSlNDCiAKICNlbmRpZiAvLyBD
b2RlQmxvY2tfaApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvQ29kZUJsb2NrU2V0
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9Db2RlQmxvY2tT
ZXQuY3BwCShyZXZpc2lvbiAxNjY2NjUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9D
b2RlQmxvY2tTZXQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00MSwzNiArNDEsNjUgQEAgQ29kZUJs
b2NrU2V0OjpDb2RlQmxvY2tTZXQoQmxvY2tBbGxvY2F0bwogCiBDb2RlQmxvY2tTZXQ6On5Db2Rl
QmxvY2tTZXQoKQogewotICAgIGZvciAoQ29kZUJsb2NrKiBjb2RlQmxvY2sgOiBtX3NldCkKKyAg
ICBmb3IgKENvZGVCbG9jayogY29kZUJsb2NrIDogbV9vbGRDb2RlQmxvY2tzKQorICAgICAgICBj
b2RlQmxvY2stPmRlcmVmKCk7CisKKyAgICBmb3IgKENvZGVCbG9jayogY29kZUJsb2NrIDogbV9u
ZXdDb2RlQmxvY2tzKQogICAgICAgICBjb2RlQmxvY2stPmRlcmVmKCk7CiB9CiAKIHZvaWQgQ29k
ZUJsb2NrU2V0OjphZGQoUGFzc1JlZlB0cjxDb2RlQmxvY2s+IGNvZGVCbG9jaykKIHsKICAgICBD
b2RlQmxvY2sqIGJsb2NrID0gY29kZUJsb2NrLmxlYWtSZWYoKTsKLSAgICBib29sIGlzTmV3RW50
cnkgPSBtX3NldC5hZGQoYmxvY2spLmlzTmV3RW50cnk7CisgICAgYm9vbCBpc05ld0VudHJ5ID0g
bV9uZXdDb2RlQmxvY2tzLmFkZChibG9jaykuaXNOZXdFbnRyeTsKICAgICBBU1NFUlRfVU5VU0VE
KGlzTmV3RW50cnksIGlzTmV3RW50cnkpOwogfQogCi12b2lkIENvZGVCbG9ja1NldDo6Y2xlYXJN
YXJrcygpCit2b2lkIENvZGVCbG9ja1NldDo6cHJvbW90ZVlvdW5nQ29kZUJsb2NrcygpCit7Cisg
ICAgbV9vbGRDb2RlQmxvY2tzLmFkZChtX25ld0NvZGVCbG9ja3MuYmVnaW4oKSwgbV9uZXdDb2Rl
QmxvY2tzLmVuZCgpKTsKKyAgICBtX25ld0NvZGVCbG9ja3MuY2xlYXIoKTsKK30KKwordm9pZCBD
b2RlQmxvY2tTZXQ6OmNsZWFyTWFya3NGb3JGdWxsQ29sbGVjdGlvbigpCiB7Ci0gICAgZm9yIChD
b2RlQmxvY2sqIGNvZGVCbG9jayA6IG1fc2V0KSB7CisgICAgZm9yIChDb2RlQmxvY2sqIGNvZGVC
bG9jayA6IG1fb2xkQ29kZUJsb2NrcykgewogICAgICAgICBjb2RlQmxvY2stPm1fbWF5QmVFeGVj
dXRpbmcgPSBmYWxzZTsKICAgICAgICAgY29kZUJsb2NrLT5tX3Zpc2l0QWdncmVnYXRlSGFzQmVl
bkNhbGxlZCA9IGZhbHNlOwogICAgIH0KKworICAgIC8vIFdlIHByb21vdGUgYWZ0ZXIgd2UgY2xl
YXIgbWFya3Mgb24gdGhlIG9sZCBnZW5lcmF0aW9uIENvZGVCbG9ja3MgYmVjYXVzZQorICAgIC8v
IG5vbmUgb2YgdGhlIHlvdW5nIGdlbmVyYXRpb25zIENvZGVCbG9ja3MgbmVlZCB0byBiZSBjbGVh
cmVkLgorICAgIHByb21vdGVZb3VuZ0NvZGVCbG9ja3MoKTsKK30KKwordm9pZCBDb2RlQmxvY2tT
ZXQ6OmNsZWFyTWFya3NGb3JFZGVuQ29sbGVjdGlvbihjb25zdCBWZWN0b3I8Y29uc3QgSlNDZWxs
Kj4mIHJlbWVtYmVyZWRTZXQpCit7CisgICAgLy8gVGhpcyBlbnN1cmVzIHRoYXQgd2Ugd2lsbCBy
ZXZpc2l0IENvZGVCbG9ja3MgaW4gcmVtZW1iZXJlZCBFeGVjdXRhYmxlcyBldmVuIGlmIHRoZXkg
d2VyZSBwcmV2aW91c2x5IG1hcmtlZC4KKyAgICBmb3IgKGNvbnN0IEpTQ2VsbCogY2VsbCA6IHJl
bWVtYmVyZWRTZXQpIHsKKyAgICAgICAgU2NyaXB0RXhlY3V0YWJsZSogZXhlY3V0YWJsZSA9IGNv
bnN0X2Nhc3Q8U2NyaXB0RXhlY3V0YWJsZSo+KGpzRHluYW1pY0Nhc3Q8Y29uc3QgU2NyaXB0RXhl
Y3V0YWJsZSo+KGNlbGwpKTsKKyAgICAgICAgaWYgKCFleGVjdXRhYmxlKQorICAgICAgICAgICAg
Y29udGludWU7CisgICAgICAgIGV4ZWN1dGFibGUtPmZvckVhY2hDb2RlQmxvY2soW10oQ29kZUJs
b2NrKiBjb2RlQmxvY2spIHsKKyAgICAgICAgICAgIGNvZGVCbG9jay0+bV9tYXlCZUV4ZWN1dGlu
ZyA9IGZhbHNlOworICAgICAgICAgICAgY29kZUJsb2NrLT5tX3Zpc2l0QWdncmVnYXRlSGFzQmVl
bkNhbGxlZCA9IGZhbHNlOworICAgICAgICB9KTsKKyAgICB9CiB9CiAKLXZvaWQgQ29kZUJsb2Nr
U2V0OjpkZWxldGVVbm1hcmtlZEFuZFVucmVmZXJlbmNlZCgpCit2b2lkIENvZGVCbG9ja1NldDo6
ZGVsZXRlVW5tYXJrZWRBbmRVbnJlZmVyZW5jZWQoSGVhcE9wZXJhdGlvbiBjb2xsZWN0aW9uVHlw
ZSkKIHsKKyAgICBIYXNoU2V0PENvZGVCbG9jayo+JiBzZXQgPSBjb2xsZWN0aW9uVHlwZSA9PSBF
ZGVuQ29sbGVjdGlvbiA/IG1fbmV3Q29kZUJsb2NrcyA6IG1fb2xkQ29kZUJsb2NrczsKKwogICAg
IC8vIFRoaXMgbmVlZHMgdG8gYmUgYSBmaXhwb2ludCBiZWNhdXNlIGNvZGUgYmxvY2tzIHRoYXQg
YXJlIHVubWFya2VkIG1heQogICAgIC8vIHJlZmVyIHRvIGVhY2ggb3RoZXIuIEZvciBleGFtcGxl
LCBhIERGRyBjb2RlIGJsb2NrIHRoYXQgaXMgb3duZWQgYnkKICAgICAvLyB0aGUgR0MgbWF5IHJl
ZmVyIHRvIGFuIEZUTCBmb3ItZW50cnkgY29kZSBibG9jayB0aGF0IGlzIGFsc28gb3duZWQgYnkK
ICAgICAvLyB0aGUgR0MuCiAgICAgVmVjdG9yPENvZGVCbG9jayosIDE2PiB0b1JlbW92ZTsKICAg
ICBpZiAodmVyYm9zZSkKLSAgICAgICAgZGF0YUxvZygiRml4cG9pbnRpbmcgb3ZlciB1bm1hcmtl
ZCwgc2V0IHNpemUgPSAiLCBtX3NldC5zaXplKCksICIuLi5cbiIpOworICAgICAgICBkYXRhTG9n
KCJGaXhwb2ludGluZyBvdmVyIHVubWFya2VkLCBzZXQgc2l6ZSA9ICIsIHNldC5zaXplKCksICIu
Li5cbiIpOwogICAgIGZvciAoOzspIHsKLSAgICAgICAgZm9yIChDb2RlQmxvY2sqIGNvZGVCbG9j
ayA6IG1fc2V0KSB7CisgICAgICAgIGZvciAoQ29kZUJsb2NrKiBjb2RlQmxvY2sgOiBzZXQpIHsK
ICAgICAgICAgICAgIGlmICghY29kZUJsb2NrLT5oYXNPbmVSZWYoKSkKICAgICAgICAgICAgICAg
ICBjb250aW51ZTsKICAgICAgICAgICAgIGlmIChjb2RlQmxvY2stPm1fbWF5QmVFeGVjdXRpbmcp
CkBAIC04MywyNCArMTEyLDMyIEBAIHZvaWQgQ29kZUJsb2NrU2V0OjpkZWxldGVVbm1hcmtlZEFu
ZFVucmUKICAgICAgICAgaWYgKHRvUmVtb3ZlLmlzRW1wdHkoKSkKICAgICAgICAgICAgIGJyZWFr
OwogICAgICAgICBmb3IgKENvZGVCbG9jayogY29kZUJsb2NrIDogdG9SZW1vdmUpCi0gICAgICAg
ICAgICBtX3NldC5yZW1vdmUoY29kZUJsb2NrKTsKKyAgICAgICAgICAgIHNldC5yZW1vdmUoY29k
ZUJsb2NrKTsKICAgICAgICAgdG9SZW1vdmUucmVzaXplKDApOwogICAgIH0KKworICAgIC8vIEFu
eSByZW1haW5pbmcgeW91bmcgQ29kZUJsb2NrcyBhcmUgbGl2ZSBhbmQgbmVlZCB0byBiZSBwcm9t
b3RlZCB0byB0aGUgc2V0IG9mIG9sZCBDb2RlQmxvY2tzLgorICAgIGlmIChjb2xsZWN0aW9uVHlw
ZSA9PSBFZGVuQ29sbGVjdGlvbikKKyAgICAgICAgcHJvbW90ZVlvdW5nQ29kZUJsb2NrcygpOwog
fQogCiB2b2lkIENvZGVCbG9ja1NldDo6cmVtb3ZlKENvZGVCbG9jayogY29kZUJsb2NrKQogewog
ICAgIGNvZGVCbG9jay0+ZGVyZWYoKTsKLSAgICBtX3NldC5yZW1vdmUoY29kZUJsb2NrKTsKKyAg
ICBpZiAobV9vbGRDb2RlQmxvY2tzLmNvbnRhaW5zKGNvZGVCbG9jaykpIHsKKyAgICAgICAgbV9v
bGRDb2RlQmxvY2tzLnJlbW92ZShjb2RlQmxvY2spOworICAgICAgICByZXR1cm47CisgICAgfQor
ICAgIEFTU0VSVChtX25ld0NvZGVCbG9ja3MuY29udGFpbnMoY29kZUJsb2NrKSk7CisgICAgbV9u
ZXdDb2RlQmxvY2tzLnJlbW92ZShjb2RlQmxvY2spOwogfQogCiB2b2lkIENvZGVCbG9ja1NldDo6
dHJhY2VNYXJrZWQoU2xvdFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgaWYgKHZlcmJvc2UpCi0g
ICAgICAgIGRhdGFMb2coIlRyYWNpbmcgIiwgbV9zZXQuc2l6ZSgpLCAiIGNvZGUgYmxvY2tzLlxu
Iik7Ci0gICAgZm9yIChDb2RlQmxvY2sqIGNvZGVCbG9jayA6IG1fc2V0KSB7Ci0gICAgICAgIGlm
ICghY29kZUJsb2NrLT5tX21heUJlRXhlY3V0aW5nKQotICAgICAgICAgICAgY29udGludWU7Cisg
ICAgICAgIGRhdGFMb2coIlRyYWNpbmcgIiwgbV9jdXJyZW50bHlFeGVjdXRpbmcuc2l6ZSgpLCAi
IGNvZGUgYmxvY2tzLlxuIik7CisgICAgZm9yIChDb2RlQmxvY2sqIGNvZGVCbG9jayA6IG1fY3Vy
cmVudGx5RXhlY3V0aW5nKSB7CisgICAgICAgIEFTU0VSVChjb2RlQmxvY2stPm1fbWF5QmVFeGVj
dXRpbmcpOwogICAgICAgICBjb2RlQmxvY2stPnZpc2l0QWdncmVnYXRlKHZpc2l0b3IpOwogICAg
IH0KIH0KQEAgLTEwOCw4ICsxNDUsMTAgQEAgdm9pZCBDb2RlQmxvY2tTZXQ6OnRyYWNlTWFya2Vk
KFNsb3RWaXNpdAogdm9pZCBDb2RlQmxvY2tTZXQ6OnJlbWVtYmVyQ3VycmVudGx5RXhlY3V0aW5n
Q29kZUJsb2NrcyhIZWFwKiBoZWFwKQogewogI2lmIEVOQUJMRShHR0MpCi0gICAgZm9yIChDb2Rl
QmxvY2sqIGNvZGVCbG9jayA6IG1fY3VycmVudGx5RXhlY3V0aW5nKQorICAgIGZvciAoQ29kZUJs
b2NrKiBjb2RlQmxvY2sgOiBtX2N1cnJlbnRseUV4ZWN1dGluZykgewogICAgICAgICBoZWFwLT5h
ZGRUb1JlbWVtYmVyZWRTZXQoY29kZUJsb2NrLT5vd25lckV4ZWN1dGFibGUoKSk7CisgICAgICAg
IEFTU0VSVChjb2RlQmxvY2stPm1fbWF5QmVFeGVjdXRpbmcpOworICAgIH0KICAgICBtX2N1cnJl
bnRseUV4ZWN1dGluZy5jbGVhcigpOwogI2Vsc2UKICAgICBVTlVTRURfUEFSQU0oaGVhcCk7Cklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9Db2RlQmxvY2tTZXQuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9Db2RlQmxvY2tTZXQuaAkocmV2aXNpb24g
MTY2NjY1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvQ29kZUJsb2NrU2V0LmgJKHdv
cmtpbmcgY29weSkKQEAgLTI3LDYgKzI3LDcgQEAKICNkZWZpbmUgQ29kZUJsb2NrU2V0X2gKIAog
I2luY2x1ZGUgIkdDU2VnbWVudGVkQXJyYXkuaCIKKyNpbmNsdWRlICJIZWFwT3BlcmF0aW9uLmgi
CiAjaW5jbHVkZSA8d3RmL0hhc2hTZXQuaD4KICNpbmNsdWRlIDx3dGYvTm9uY29weWFibGUuaD4K
ICNpbmNsdWRlIDx3dGYvUGFzc1JlZlB0ci5oPgpAQCAtMzcsNiArMzgsNyBAQCBuYW1lc3BhY2Ug
SlNDIHsKIGNsYXNzIEJsb2NrQWxsb2NhdG9yOwogY2xhc3MgQ29kZUJsb2NrOwogY2xhc3MgSGVh
cDsKK2NsYXNzIEpTQ2VsbDsKIGNsYXNzIFNsb3RWaXNpdG9yOwogCiAvLyBDb2RlQmxvY2tTZXQg
dHJhY2tzIGFsbCBDb2RlQmxvY2tzLiBFdmVyeSBDb2RlQmxvY2sgc3RhcnRzIG91dCB3aXRoIG9u
ZQpAQCAtNTMsOSArNTUsMTIgQEAgcHVibGljOgogICAgIC8vIEFkZCBhIENvZGVCbG9jay4gVGhp
cyBpcyBvbmx5IGNhbGxlZCBieSBDb2RlQmxvY2sgY29uc3RydWN0b3JzLgogICAgIHZvaWQgYWRk
KFBhc3NSZWZQdHI8Q29kZUJsb2NrPik7CiAgICAgCi0gICAgLy8gQ2xlYXIgYWxsIG1hcmsgYml0
cyBhc3NvY2lhdGVkIHdpdGggREZHIGNvZGUgYmxvY2tzLgotICAgIHZvaWQgY2xlYXJNYXJrcygp
OwotICAgIAorICAgIC8vIENsZWFyIG1hcmsgYml0cyBmb3IgY2VydGFpbiBDb2RlQmxvY2tzIGRl
cGVuZGluZyBvbiB0aGUgdHlwZSBvZiBjb2xsZWN0aW9uLgorICAgIHZvaWQgY2xlYXJNYXJrc0Zv
ckVkZW5Db2xsZWN0aW9uKGNvbnN0IFZlY3Rvcjxjb25zdCBKU0NlbGwqPiYpOworCisgICAgLy8g
Q2xlYXIgYWxsIG1hcmsgYml0cyBmb3IgYWxsIENvZGVCbG9ja3MuCisgICAgdm9pZCBjbGVhck1h
cmtzRm9yRnVsbENvbGxlY3Rpb24oKTsKKwogICAgIC8vIE1hcmsgYSBwb2ludGVyIHRoYXQgbWF5
IGJlIGEgQ29kZUJsb2NrIHRoYXQgYmVsb25ncyB0byB0aGUgc2V0IG9mIERGRwogICAgIC8vIGJs
b2Nrcy4gVGhpcyBpcyBkZWZpbmVkIGluIENvZGVCbG9jay5oLgogICAgIHZvaWQgbWFyayhDb2Rl
QmxvY2sqIGNhbmRpZGF0ZUNvZGVCbG9jayk7CkBAIC02Myw3ICs2OCw3IEBAIHB1YmxpYzoKICAg
ICAKICAgICAvLyBEZWxldGUgYWxsIGNvZGUgYmxvY2tzIHRoYXQgYXJlIG9ubHkgcmVmZXJlbmNl
ZCBieSB0aGlzIHNldCAoaS5lLiBvd25lZAogICAgIC8vIGJ5IHRoaXMgc2V0KSwgYW5kIHRoYXQg
aGF2ZSBub3QgYmVlbiBtYXJrZWQuCi0gICAgdm9pZCBkZWxldGVVbm1hcmtlZEFuZFVucmVmZXJl
bmNlZCgpOworICAgIHZvaWQgZGVsZXRlVW5tYXJrZWRBbmRVbnJlZmVyZW5jZWQoSGVhcE9wZXJh
dGlvbik7CiAgICAgCiAgICAgdm9pZCByZW1vdmUoQ29kZUJsb2NrKik7CiAgICAgCkBAIC04MCwx
OCArODUsMjggQEAgcHVibGljOgogICAgIC8vIHZpc2l0ZWQuCiAgICAgdGVtcGxhdGU8dHlwZW5h
bWUgRnVuY3Rvcj4gdm9pZCBpdGVyYXRlKEZ1bmN0b3ImIGZ1bmN0b3IpCiAgICAgewotICAgICAg
ICBmb3IgKGF1dG8mIGNvZGVCbG9jayA6IG1fc2V0KSB7CisgICAgICAgIGZvciAoYXV0byYgY29k
ZUJsb2NrIDogbV9vbGRDb2RlQmxvY2tzKSB7CisgICAgICAgICAgICBib29sIGRvbmUgPSBmdW5j
dG9yKGNvZGVCbG9jayk7CisgICAgICAgICAgICBpZiAoZG9uZSkKKyAgICAgICAgICAgICAgICBy
ZXR1cm47CisgICAgICAgIH0KKworICAgICAgICBmb3IgKGF1dG8mIGNvZGVCbG9jayA6IG1fbmV3
Q29kZUJsb2NrcykgewogICAgICAgICAgICAgYm9vbCBkb25lID0gZnVuY3Rvcihjb2RlQmxvY2sp
OwogICAgICAgICAgICAgaWYgKGRvbmUpCi0gICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
ICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAgICAgfQogCiBwcml2YXRlOgorICAgIHZvaWQg
Y2xlYXJNYXJrc0ZvckNvZGVCbG9ja3NJblJlbWVtYmVyZWRFeGVjdXRhYmxlcyhjb25zdCBWZWN0
b3I8Y29uc3QgSlNDZWxsKj4mKTsKKyAgICB2b2lkIHByb21vdGVZb3VuZ0NvZGVCbG9ja3MoKTsK
KwogICAgIC8vIFRoaXMgaXMgbm90IGEgc2V0IG9mIFJlZlB0cjxDb2RlQmxvY2s+IGJlY2F1c2Ug
d2UgbmVlZCB0byBiZSBhYmxlIHRvIGZpbmQKICAgICAvLyBhcmJpdHJhcnkgYm9ndXMgcG9pbnRl
cnMuIEkgY291bGQgaGF2ZSB3cml0dGVuIGEgdGhpbmd5IHRoYXQgaGFkIHBlZWsgdHlwZXMKICAg
ICAvLyBhbmQgYWxsLCBidXQgdGhhdCBzZWVtZWQgbGlrZSBvdmVya2lsbC4KLSAgICBIYXNoU2V0
PENvZGVCbG9jayogPiBtX3NldDsKKyAgICBIYXNoU2V0PENvZGVCbG9jayo+IG1fb2xkQ29kZUJs
b2NrczsKKyAgICBIYXNoU2V0PENvZGVCbG9jayo+IG1fbmV3Q29kZUJsb2NrczsKICAgICBHQ1Nl
Z21lbnRlZEFycmF5PENvZGVCbG9jayo+IG1fY3VycmVudGx5RXhlY3V0aW5nOwogfTsKIApJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcC5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcC5jcHAJKHJldmlzaW9uIDE2NjY2NSkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXAuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00ODUs
NyArNDg1LDE3IEBAIHZvaWQgSGVhcDo6bWFya1Jvb3RzKCkKICAgICBkb3VibGUgZ2NTdGFydFRp
bWUgPSBXVEY6Om1vbm90b25pY2FsbHlJbmNyZWFzaW5nVGltZSgpOwogI2VuZGlmCiAKLSAgICBt
X2NvZGVCbG9ja3MuY2xlYXJNYXJrcygpOworI2lmIEVOQUJMRShHR0MpCisgICAgVmVjdG9yPGNv
bnN0IEpTQ2VsbCo+IHJlbWVtYmVyZWRTZXQobV9zbG90VmlzaXRvci5tYXJrU3RhY2soKS5zaXpl
KCkpOworICAgIG1fc2xvdFZpc2l0b3IubWFya1N0YWNrKCkuZmlsbFZlY3RvcihyZW1lbWJlcmVk
U2V0KTsKKyNlbHNlCisgICAgVmVjdG9yPGNvbnN0IEpTQ2VsbCo+IHJlbWVtYmVyZWRTZXQ7Cisj
ZW5kaWYKKworICAgIGlmIChtX29wZXJhdGlvbkluUHJvZ3Jlc3MgPT0gRWRlbkNvbGxlY3Rpb24p
CisgICAgICAgIG1fY29kZUJsb2Nrcy5jbGVhck1hcmtzRm9yRWRlbkNvbGxlY3Rpb24ocmVtZW1i
ZXJlZFNldCk7CisgICAgZWxzZQorICAgICAgICBtX2NvZGVCbG9ja3MuY2xlYXJNYXJrc0ZvckZ1
bGxDb2xsZWN0aW9uKCk7CiAKICAgICAvLyBXZSBnYXRoZXIgY29uc2VydmF0aXZlIHJvb3RzIGJl
Zm9yZSBjbGVhcmluZyBtYXJrIGJpdHMgYmVjYXVzZSBjb25zZXJ2YXRpdmUKICAgICAvLyBnYXRo
ZXJpbmcgdXNlcyB0aGUgbWFyayBiaXRzIHRvIGRldGVybWluZSB3aGV0aGVyIGEgcmVmZXJlbmNl
IGlzIHZhbGlkLgpAQCAtNTAzLDEzICs1MTMsNiBAQCB2b2lkIEhlYXA6Om1hcmtSb290cygpCiAg
ICAgbV9zbG90VmlzaXRvci5kaWRTdGFydE1hcmtpbmcoKTsKICAgICBIZWFwUm9vdFZpc2l0b3Ig
aGVhcFJvb3RWaXNpdG9yKG1fc2xvdFZpc2l0b3IpOwogCi0jaWYgRU5BQkxFKEdHQykKLSAgICBW
ZWN0b3I8Y29uc3QgSlNDZWxsKj4gcmVtZW1iZXJlZFNldChtX3Nsb3RWaXNpdG9yLm1hcmtTdGFj
aygpLnNpemUoKSk7Ci0gICAgbV9zbG90VmlzaXRvci5tYXJrU3RhY2soKS5maWxsVmVjdG9yKHJl
bWVtYmVyZWRTZXQpOwotI2Vsc2UKLSAgICBWZWN0b3I8Y29uc3QgSlNDZWxsKj4gcmVtZW1iZXJl
ZFNldDsKLSNlbmRpZgotCiAgICAgewogICAgICAgICBQYXJhbGxlbE1vZGVFbmFibGVyIGVuYWJs
ZXIobV9zbG90VmlzaXRvcik7CiAKQEAgLTg1Miw4ICs4NTUsOSBAQCB2b2lkIEhlYXA6OmRlbGV0
ZUFsbENvbXBpbGVkQ29kZSgpCiAgICAgICAgIHN0YXRpY19jYXN0PEZ1bmN0aW9uRXhlY3V0YWJs
ZSo+KGN1cnJlbnQpLT5jbGVhckNvZGVJZk5vdENvbXBpbGluZygpOwogICAgIH0KIAotICAgIG1f
Y29kZUJsb2Nrcy5jbGVhck1hcmtzKCk7Ci0gICAgbV9jb2RlQmxvY2tzLmRlbGV0ZVVubWFya2Vk
QW5kVW5yZWZlcmVuY2VkKCk7CisgICAgQVNTRVJUKG1fb3BlcmF0aW9uSW5Qcm9ncmVzcyA9PSBG
dWxsQ29sbGVjdGlvbik7CisgICAgbV9jb2RlQmxvY2tzLmNsZWFyTWFya3NGb3JGdWxsQ29sbGVj
dGlvbigpOworICAgIG1fY29kZUJsb2Nrcy5kZWxldGVVbm1hcmtlZEFuZFVucmVmZXJlbmNlZChG
dWxsQ29sbGVjdGlvbik7CiB9CiAKIHZvaWQgSGVhcDo6ZGVsZXRlQWxsVW5saW5rZWRGdW5jdGlv
bkNvZGUoKQpAQCAtODY1LDkgKzg2OSw5IEBAIHZvaWQgSGVhcDo6ZGVsZXRlQWxsVW5saW5rZWRG
dW5jdGlvbkNvZGUKICAgICB9CiB9CiAKLXZvaWQgSGVhcDo6ZGVsZXRlVW5tYXJrZWRDb21waWxl
ZENvZGUoKQordm9pZCBIZWFwOjpjbGVhclVubWFya2VkRXhlY3V0YWJsZXMoKQogewotICAgIEdD
UEhBU0UoRGVsZXRlQ29kZUJsb2Nrcyk7CisgICAgR0NQSEFTRShDbGVhclVubWFya2VkRXhlY3V0
YWJsZXMpOwogICAgIEV4ZWN1dGFibGVCYXNlKiBuZXh0OwogICAgIGZvciAoRXhlY3V0YWJsZUJh
c2UqIGN1cnJlbnQgPSBtX2NvbXBpbGVkQ29kZS5oZWFkKCk7IGN1cnJlbnQ7IGN1cnJlbnQgPSBu
ZXh0KSB7CiAgICAgICAgIG5leHQgPSBjdXJyZW50LT5uZXh0KCk7CkBAIC04NzksOCArODgzLDEz
IEBAIHZvaWQgSGVhcDo6ZGVsZXRlVW5tYXJrZWRDb21waWxlZENvZGUoKQogICAgICAgICBFeGVj
dXRhYmxlQmFzZTo6Y2xlYXJDb2RlVmlydHVhbChjdXJyZW50KTsKICAgICAgICAgbV9jb21waWxl
ZENvZGUucmVtb3ZlKGN1cnJlbnQpOwogICAgIH0KK30KIAotICAgIG1fY29kZUJsb2Nrcy5kZWxl
dGVVbm1hcmtlZEFuZFVucmVmZXJlbmNlZCgpOwordm9pZCBIZWFwOjpkZWxldGVVbm1hcmtlZENv
bXBpbGVkQ29kZSgpCit7CisgICAgR0NQSEFTRShEZWxldGVDb2RlQmxvY2tzKTsKKyAgICBjbGVh
clVubWFya2VkRXhlY3V0YWJsZXMoKTsKKyAgICBtX2NvZGVCbG9ja3MuZGVsZXRlVW5tYXJrZWRB
bmRVbnJlZmVyZW5jZWQobV9vcGVyYXRpb25JblByb2dyZXNzKTsKICAgICBtX2ppdFN0dWJSb3V0
aW5lcy5kZWxldGVVbm1hcmtlZEpldHRpc29uZWRTdHViUm91dGluZXMoKTsKIH0KIApAQCAtMTAx
MSw2ICsxMDIwLDkgQEAgdm9pZCBIZWFwOjp3aWxsU3RhcnRDb2xsZWN0aW9uKEhlYXBPcGVyYQog
CiB2b2lkIEhlYXA6OmRlbGV0ZU9sZENvZGUoZG91YmxlIGdjU3RhcnRUaW1lKQogeworICAgIGlm
IChtX29wZXJhdGlvbkluUHJvZ3Jlc3MgPT0gRWRlbkNvbGxlY3Rpb24pCisgICAgICAgIHJldHVy
bjsKKwogICAgIEdDUEhBU0UoRGVsZXRlT2xkQ29kZSk7CiAgICAgaWYgKGdjU3RhcnRUaW1lIC0g
bV9sYXN0Q29kZURpc2NhcmRUaW1lID4gbWludXRlKSB7CiAgICAgICAgIGRlbGV0ZUFsbENvbXBp
bGVkQ29kZSgpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcC5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXAuaAkocmV2aXNpb24gMTY2
NjY1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcC5oCSh3b3JraW5nIGNvcHkp
CkBAIC0yOTIsNiArMjkyLDcgQEAgcHJpdmF0ZToKICAgICB2b2lkIGNvcHlCYWNraW5nU3RvcmVz
KCk7CiAgICAgdm9pZCBoYXJ2ZXN0V2Vha1JlZmVyZW5jZXMoKTsKICAgICB2b2lkIGZpbmFsaXpl
VW5jb25kaXRpb25hbEZpbmFsaXplcnMoKTsKKyAgICB2b2lkIGNsZWFyVW5tYXJrZWRFeGVjdXRh
YmxlcygpOwogICAgIHZvaWQgZGVsZXRlVW5tYXJrZWRDb21waWxlZENvZGUoKTsKICAgICB2b2lk
IHVwZGF0ZUFsbG9jYXRpb25MaW1pdHMoKTsKICAgICB2b2lkIGRpZEZpbmlzaENvbGxlY3Rpb24o
ZG91YmxlIGdjU3RhcnRUaW1lKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0V4ZWN1dGFibGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0V4ZWN1dGFibGUuY3BwCShyZXZpc2lvbiAxNjY2NjUpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9FeGVjdXRhYmxlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTc4LDYgKzE3
OCw4IEBAIHZvaWQgU2NyaXB0RXhlY3V0YWJsZTo6aW5zdGFsbENvZGUoQ29kZUIKICAgICBEZWJ1
Z2dlciogZGVidWdnZXIgPSBnZW5lcmljQ29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKS0+ZGVidWdn
ZXIoKTsKICAgICBpZiAoZGVidWdnZXIpCiAgICAgICAgIGRlYnVnZ2VyLT5yZWdpc3RlckNvZGVC
bG9jayhnZW5lcmljQ29kZUJsb2NrKTsKKworICAgIEhlYXA6OmhlYXAodGhpcyktPndyaXRlQmFy
cmllcih0aGlzKTsKIH0KIAogUGFzc1JlZlB0cjxDb2RlQmxvY2s+IFNjcmlwdEV4ZWN1dGFibGU6
Om5ld0NvZGVCbG9ja0ZvcigKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0V4
ZWN1dGFibGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9F
eGVjdXRhYmxlLmgJKHJldmlzaW9uIDE2NjY2NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0V4ZWN1dGFibGUuaAkod29ya2luZyBjb3B5KQpAQCAtNDI5LDYgKzQyOSw4IEBAIHB1
YmxpYzoKICAgICAgICAgcmV0dXJuIHByZXBhcmVGb3JFeGVjdXRpb25JbXBsKGV4ZWMsIGZ1bmN0
aW9uLCBzY29wZSwga2luZCk7CiAgICAgfQogCisgICAgdGVtcGxhdGUgPHR5cGVuYW1lIEZ1bmN0
b3I+IHZvaWQgZm9yRWFjaENvZGVCbG9jayhGdW5jdG9yJiYpOworCiBwcml2YXRlOgogICAgIEpT
T2JqZWN0KiBwcmVwYXJlRm9yRXhlY3V0aW9uSW1wbChFeGVjU3RhdGUqLCBKU0Z1bmN0aW9uKiwg
SlNTY29wZSoqLCBDb2RlU3BlY2lhbGl6YXRpb25LaW5kKTsKIAo=
</data>

          </attachment>
      

    </bug>

</bugzilla>