<?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>164175</bug_id>
          
          <creation_ts>2016-10-28 22:51:06 -0700</creation_ts>
          <short_desc>[DOMJIT][JSC] Allow DFG GetById optimization for impure objects with NewImpurePropertyFiresWatchpoints</short_desc>
          <delta_ts>2016-11-16 13:38:50 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>JavaScriptCore</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>NEW</bug_status>
          <resolution></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>
          
          <blocked>164797</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Yusuke Suzuki">ysuzuki</reporter>
          <assigned_to name="Yusuke Suzuki">ysuzuki</assigned_to>
          <cc>fpizlo</cc>
    
    <cc>saam</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1245980</commentid>
    <comment_count>0</comment_count>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2016-10-28 22:51:06 -0700</bug_when>
    <thetext>The most frequently used one is `document`.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1250330</commentid>
    <comment_count>1</comment_count>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2016-11-11 12:08:03 -0800</bug_when>
    <thetext>The challenge is that impure property&apos;s watchpointset is managed by the hash table. And it will be removed once it is fired.

Super simple idea is that,

1. Guard this hash table with lock
2. When registering watchpoint to this watchpointset in DFG side, we first hold this watchpointset with Ref in the DFG side. DesiredWatchpoints will hold impure watchpointsets with Ref&lt;WatchpointSet&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1250339</commentid>
    <comment_count>2</comment_count>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2016-11-11 12:22:34 -0800</bug_when>
    <thetext>No, if AccessCase correctly holds the watchpointset, lock is not necessary.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1250492</commentid>
    <comment_count>3</comment_count>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2016-11-11 16:29:21 -0800</bug_when>
    <thetext>Start working on it</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1250500</commentid>
    <comment_count>4</comment_count>
      <attachid>294564</attachid>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2016-11-11 16:34:16 -0800</bug_when>
    <thetext>Created attachment 294564
Patch

WIP</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1250507</commentid>
    <comment_count>5</comment_count>
      <attachid>294566</attachid>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2016-11-11 16:40:12 -0800</bug_when>
    <thetext>Created attachment 294566
Patch

WIP</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1250530</commentid>
    <comment_count>6</comment_count>
      <attachid>294566</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2016-11-11 17:17:56 -0800</bug_when>
    <thetext>Comment on attachment 294566
Patch

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

I like where this is going.

How do you plan to handle thrashing?  Currently the only watchpoints that a GetByIdStatus would tell the DFG to set are watchpoints that we know very well how to set without getting into trouble.  There&apos;s a ton of infrastructure to protect us from repeatedly recompiling due to structure transition watchpoints.  But this watchpoint is different.  We allow this watchpoint to repeatedly clear inline caches because it&apos;s cheap to repatch an inline cache.  It&apos;s not cheap to recompile something with the DFG or FTL.  So, we need some better defense.  The DFG recompilation infrastructure will not really know why the code was jettisoned - I mean, it&apos;ll have some kind of debug string, but that&apos;s not really enough.  The way we handle this with most other structures is that they are monotonic.  Once they are fired, they stay invalidated forever, so if the DFG recompiles then it will not make the same mistake again - the DFG always has a safe path for when the watchpoint is already invalid.  But these impure watchpoints are not designed to work that way!  They simply get deleted when they are fired.  Afterwards nobody knows that they had ever been there.  This is great for inline caches, since it&apos;s OK for them to try as many times as they want.  But the DFG needs to know somehow that it should not make the same mistake again.

Here are possible ways to do this:
- Have each StructureStubInfo track an extra bit for when that watchpoint got fired.  We would make this work by having StructureStubClearingWatchpoint know about when it&apos;s being used for impure properties, and in that case, it will set the bit.  Then each IC will remember if it had ever been messed with.  Maybe this is good enough.
- Have VM remember when we fire impure watchpoints on a given name.  We would probably want to clear that remembered set periodically (stupid but effective: GC clears the set if it has not done so in more than 1 second).  This will accelerate convergence when combined with the first approach.  A nice variant of this is that you only remember when addImpureProperty fired a watchpoint set that was being watched.  This way, we don&apos;t remember anything about impure properties that don&apos;t overlap with the properties that ICs are caching.
- There could be a bit in the baseline CodeBlock that tells if we had ever seen an impure property watchpoint fire, or if it had ever caused us to recompile.

I think that the first approach is mandatory and the other two are optional.

&gt; Source/JavaScriptCore/bytecode/ComplexGetStatus.cpp:45
&gt; +        if (!impurePropertySet &amp;&amp; impurePropertySet-&gt;hasBeenInvalidated())

I think you meant ||

&gt; Source/JavaScriptCore/bytecode/GetByIdVariant.cpp:111
&gt; +    if (m_impurePropertySet != other.m_impurePropertySet)
&gt; +        return false;
&gt; +

If only it was a set of sets!  Like m_extraWatchpoints or something.

I see that you are renaming m_additionalSet to m_impurePropertySet.  I would have hesitated before doing that.  I guess calling it m_impurePropertySet is a signal from AccessCase to GetByIdStatus/ComplexGetStatus/etc that we had done the impure property optimization.  But we don&apos;t really need to convey that signal, since the Structure will tell us this already.  The DFG could still know that the impure thing is in play, and make decisions based on that, just by looking into the structure.  This is nice, since that means that if we ever added another reason for an &quot;additionalSet&quot;, that was unrelated to impure properties, then we may get away with simply teaching AccessCase about it and trusting that this will magically make the DFG watch this watchpoint.

In this world, the meaning of the additionalSet is very concise: it just means that you&apos;ve got to watch that watchpoint!  You don&apos;t have to know anything more.  Such an easy mental model.

Does this make sense, or am I overlooking something?

&gt; Source/JavaScriptCore/bytecode/PolymorphicAccess.cpp:297
&gt; +    result-&gt;initializeImpurePropertySetIfNecessary(vm, ident);

By the way, in my world, I would have named this method just as you did.  But in my world, only this method would have to know about the exact relationship between impure properties and the watchpoint set.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1251803</commentid>
    <comment_count>7</comment_count>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2016-11-15 21:42:47 -0800</bug_when>
    <thetext>Thanks!!!

(In reply to comment #6)
&gt; Comment on attachment 294566 [details]
&gt; Patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=294566&amp;action=review
&gt; 
&gt; I like where this is going.
&gt; 
&gt; How do you plan to handle thrashing?  Currently the only watchpoints that a
&gt; GetByIdStatus would tell the DFG to set are watchpoints that we know very
&gt; well how to set without getting into trouble.  There&apos;s a ton of
&gt; infrastructure to protect us from repeatedly recompiling due to structure
&gt; transition watchpoints.  But this watchpoint is different.  We allow this
&gt; watchpoint to repeatedly clear inline caches because it&apos;s cheap to repatch
&gt; an inline cache.  It&apos;s not cheap to recompile something with the DFG or FTL.
&gt; So, we need some better defense.  The DFG recompilation infrastructure will
&gt; not really know why the code was jettisoned - I mean, it&apos;ll have some kind
&gt; of debug string, but that&apos;s not really enough.  The way we handle this with
&gt; most other structures is that they are monotonic.  Once they are fired, they
&gt; stay invalidated forever, so if the DFG recompiles then it will not make the
&gt; same mistake again - the DFG always has a safe path for when the watchpoint
&gt; is already invalid.  But these impure watchpoints are not designed to work
&gt; that way!  They simply get deleted when they are fired.  Afterwards nobody
&gt; knows that they had ever been there.  This is great for inline caches, since
&gt; it&apos;s OK for them to try as many times as they want.  But the DFG needs to
&gt; know somehow that it should not make the same mistake again.

Right. Impure watchpoint is removed from the map when impure property is added.
So, watchpointSet-&gt;hasBeenInvalidated() check is not enough.

&gt; 
&gt; Here are possible ways to do this:
&gt; - Have each StructureStubInfo track an extra bit for when that watchpoint
&gt; got fired.  We would make this work by having
&gt; StructureStubClearingWatchpoint know about when it&apos;s being used for impure
&gt; properties, and in that case, it will set the bit.  Then each IC will
&gt; remember if it had ever been messed with.  Maybe this is good enough.

Sounds nice. It should work.

&gt; - Have VM remember when we fire impure watchpoints on a given name.  We
&gt; would probably want to clear that remembered set periodically (stupid but
&gt; effective: GC clears the set if it has not done so in more than 1 second). 
&gt; This will accelerate convergence when combined with the first approach.  A
&gt; nice variant of this is that you only remember when addImpureProperty fired
&gt; a watchpoint set that was being watched.  This way, we don&apos;t remember
&gt; anything about impure properties that don&apos;t overlap with the properties that
&gt; ICs are caching.

&gt; - There could be a bit in the baseline CodeBlock that tells if we had ever
&gt; seen an impure property watchpoint fire, or if it had ever caused us to
&gt; recompile.
&gt; 
&gt; I think that the first approach is mandatory and the other two are optional.

Agreed. The first one must be done.
Second, and third ones can be done.
I think implementing the first one is good for the first step.
If we figured out that the first one is not enough for the performance in the benchmarks or so, we should include the second and third ones in the same patch.

&gt; 
&gt; &gt; Source/JavaScriptCore/bytecode/ComplexGetStatus.cpp:45
&gt; &gt; +        if (!impurePropertySet &amp;&amp; impurePropertySet-&gt;hasBeenInvalidated())
&gt; 
&gt; I think you meant ||

Oops, right.

&gt; 
&gt; &gt; Source/JavaScriptCore/bytecode/GetByIdVariant.cpp:111
&gt; &gt; +    if (m_impurePropertySet != other.m_impurePropertySet)
&gt; &gt; +        return false;
&gt; &gt; +
&gt; 
&gt; If only it was a set of sets!  Like m_extraWatchpoints or something.
&gt; 
&gt; I see that you are renaming m_additionalSet to m_impurePropertySet.  I would
&gt; have hesitated before doing that.  I guess calling it m_impurePropertySet is
&gt; a signal from AccessCase to GetByIdStatus/ComplexGetStatus/etc that we had
&gt; done the impure property optimization.  But we don&apos;t really need to convey
&gt; that signal, since the Structure will tell us this already.  The DFG could
&gt; still know that the impure thing is in play, and make decisions based on
&gt; that, just by looking into the structure.  This is nice, since that means
&gt; that if we ever added another reason for an &quot;additionalSet&quot;, that was
&gt; unrelated to impure properties, then we may get away with simply teaching
&gt; AccessCase about it and trusting that this will magically make the DFG watch
&gt; this watchpoint.
&gt; 
&gt; In this world, the meaning of the additionalSet is very concise: it just
&gt; means that you&apos;ve got to watch that watchpoint!  You don&apos;t have to know
&gt; anything more.  Such an easy mental model.
&gt; 
&gt; Does this make sense, or am I overlooking something?

It sounds very nice.

&gt; 
&gt; &gt; Source/JavaScriptCore/bytecode/PolymorphicAccess.cpp:297
&gt; &gt; +    result-&gt;initializeImpurePropertySetIfNecessary(vm, ident);
&gt; 
&gt; By the way, in my world, I would have named this method just as you did. 
&gt; But in my world, only this method would have to know about the exact
&gt; relationship between impure properties and the watchpoint set.

Yeah, if we just hold extraWatchpoints, only this place should know about impure thing.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1251804</commentid>
    <comment_count>8</comment_count>
      <attachid>294924</attachid>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2016-11-15 21:47:22 -0800</bug_when>
    <thetext>Created attachment 294924
Patch

WIP, start holding extraWatchpoints</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1251998</commentid>
    <comment_count>9</comment_count>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2016-11-16 13:38:50 -0800</bug_when>
    <thetext>fun fact: Once GetByOffset for document is landed, Dromaeo&apos;s query test becomes more &amp; more meaningless.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>294564</attachid>
            <date>2016-11-11 16:34:16 -0800</date>
            <delta_ts>2016-11-11 16:40:10 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-164175-20161111163002.patch</filename>
            <type>text/plain</type>
            <size>31538</size>
            <attacher name="Yusuke Suzuki">ysuzuki</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjA4NjAxCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCBi
Yzk3MjljYTMwZDEyYjJlOGFkNjc3OTBhNTdlZjY0NTk5YzZkNjA2Li44MDhkODIyYjEwZDZkYmFk
OTM3NzJiODUyYTdlOGIxMTE0MjUwZGE4IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSw1MyBAQAorMjAxNi0xMS0xMSAgWXVzdWtlIFN1enVraSAgPHV0YXRhbmUudGVhQGdtYWls
LmNvbT4KKworICAgICAgICBbRE9NSklUXVtKU0NdIEFsbG93IERGRyBHZXRCeUlkIG9wdGltaXph
dGlvbiBmb3IgaW1wdXJlIG9iamVjdHMgd2l0aCBOZXdJbXB1cmVQcm9wZXJ0eUZpcmVzV2F0Y2hw
b2ludHMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE2
NDE3NQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICog
Ynl0ZWNvZGUvQ29tcGxleEdldFN0YXR1cy5jcHA6CisgICAgICAgIChKU0M6OkNvbXBsZXhHZXRT
dGF0dXM6OmNvbXB1dGVGb3IpOgorICAgICAgICAqIGJ5dGVjb2RlL0NvbXBsZXhHZXRTdGF0dXMu
aDoKKyAgICAgICAgKiBieXRlY29kZS9HZXRCeUlkU3RhdHVzLmNwcDoKKyAgICAgICAgKEpTQzo6
R2V0QnlJZFN0YXR1czo6Y29tcHV0ZUZyb21MTEludCk6CisgICAgICAgIChKU0M6OkdldEJ5SWRT
dGF0dXM6OmNvbXB1dGVGb3JTdHViSW5mb1dpdGhvdXRFeGl0U2l0ZUZlZWRiYWNrKToKKyAgICAg
ICAgKEpTQzo6R2V0QnlJZFN0YXR1czo6Y29tcHV0ZUZvcik6CisgICAgICAgICogYnl0ZWNvZGUv
R2V0QnlJZFZhcmlhbnQuY3BwOgorICAgICAgICAoSlNDOjpHZXRCeUlkVmFyaWFudDo6R2V0QnlJ
ZFZhcmlhbnQpOgorICAgICAgICAoSlNDOjpHZXRCeUlkVmFyaWFudDo6b3BlcmF0b3I9KToKKyAg
ICAgICAgKEpTQzo6R2V0QnlJZFZhcmlhbnQ6OmF0dGVtcHRUb01lcmdlKToKKyAgICAgICAgKEpT
Qzo6R2V0QnlJZFZhcmlhbnQ6OmR1bXBJbkNvbnRleHQpOgorICAgICAgICAqIGJ5dGVjb2RlL0dl
dEJ5SWRWYXJpYW50Lmg6CisgICAgICAgIChKU0M6OkdldEJ5SWRWYXJpYW50OjppbXB1cmVQcm9w
ZXJ0eVNldCk6CisgICAgICAgICogYnl0ZWNvZGUvUG9seW1vcnBoaWNBY2Nlc3MuY3BwOgorICAg
ICAgICAoSlNDOjpBY2Nlc3NDYXNlOjppbml0aWFsaXplSW1wdXJlUHJvcGVydHlTZXRJZk5lY2Vz
c2FyeSk6CisgICAgICAgIChKU0M6OkFjY2Vzc0Nhc2U6OnRyeUdldCk6CisgICAgICAgIChKU0M6
OkFjY2Vzc0Nhc2U6OmdldCk6CisgICAgICAgIChKU0M6OkFjY2Vzc0Nhc2U6Om1lZ2Ftb3JwaGlj
TG9hZCk6CisgICAgICAgIChKU0M6OkFjY2Vzc0Nhc2U6OnJlcGxhY2UpOgorICAgICAgICAoSlND
OjpBY2Nlc3NDYXNlOjp0cmFuc2l0aW9uKToKKyAgICAgICAgKEpTQzo6QWNjZXNzQ2FzZTo6c2V0
dGVyKToKKyAgICAgICAgKEpTQzo6QWNjZXNzQ2FzZTo6aW4pOgorICAgICAgICAoSlNDOjpBY2Nl
c3NDYXNlOjpnZXRMZW5ndGgpOgorICAgICAgICAoSlNDOjpBY2Nlc3NDYXNlOjpnZXRJbnRyaW5z
aWMpOgorICAgICAgICAoSlNDOjpBY2Nlc3NDYXNlOjpmcm9tU3RydWN0dXJlU3R1YkluZm8pOgor
ICAgICAgICAoSlNDOjpBY2Nlc3NDYXNlOjpjbG9uZSk6CisgICAgICAgIChKU0M6OkFjY2Vzc0Nh
c2U6OmNvbW1pdCk6CisgICAgICAgIChKU0M6OkFjY2Vzc0Nhc2U6OmNvdWxkU3RpbGxTdWNjZWVk
KToKKyAgICAgICAgKEpTQzo6QWNjZXNzQ2FzZTo6Y2FuQmVSZXBsYWNlZEJ5TWVnYW1vcnBoaWNM
b2FkKToKKyAgICAgICAgKEpTQzo6UG9seW1vcnBoaWNBY2Nlc3M6OnJlZ2VuZXJhdGUpOgorICAg
ICAgICAqIGJ5dGVjb2RlL1BvbHltb3JwaGljQWNjZXNzLmg6CisgICAgICAgIChKU0M6OkFjY2Vz
c0Nhc2U6OmltcHVyZVByb3BlcnR5U2V0KToKKyAgICAgICAgKiBieXRlY29kZS9TdHJ1Y3R1cmVT
dHViSW5mby5jcHA6CisgICAgICAgIChKU0M6OlN0cnVjdHVyZVN0dWJJbmZvOjphZGRBY2Nlc3ND
YXNlKToKKyAgICAgICAgKiBqaXQvUmVwYXRjaC5jcHA6CisgICAgICAgIChKU0M6OnRyeUNhY2hl
R2V0QnlJRCk6CisgICAgICAgIChKU0M6OnRyeUNhY2hlUHV0QnlJRCk6CisgICAgICAgIChKU0M6
OnRyeVJlcGF0Y2hJbik6CisgICAgICAgICogcnVudGltZS9WTS5jcHA6CisgICAgICAgIChKU0M6
OlZNOjpyZWdpc3RlcldhdGNocG9pbnRGb3JJbXB1cmVQcm9wZXJ0eSk6IERlbGV0ZWQuCisgICAg
ICAgICogcnVudGltZS9WTS5oOgorCiAyMDE2LTExLTExICBDaHJpcyBEdW1leiAgPGNkdW1lekBh
cHBsZS5jb20+CiAKICAgICAgICAgVW5yZXZpZXdlZCwgcm9sbGluZyBvdXQgcjIwODU4NC4KZGlm
ZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db21wbGV4R2V0U3RhdHVz
LmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db21wbGV4R2V0U3RhdHVzLmNw
cAppbmRleCAwNjIyNTUzYzAyNGM5MTBhY2UzNjBkMGQzZTQyMzEwZjA4ZWJiNGI0Li4zYzliODli
YWZiMjQ0MDZhNTEyZDhkMzQ2MmU5MjMyZWNiOWUyZjI0IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29tcGxleEdldFN0YXR1cy5jcHAKKysrIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvbXBsZXhHZXRTdGF0dXMuY3BwCkBAIC0zMSw3ICszMSw3
IEBACiBuYW1lc3BhY2UgSlNDIHsKIAogQ29tcGxleEdldFN0YXR1cyBDb21wbGV4R2V0U3RhdHVz
Ojpjb21wdXRlRm9yKAotICAgIFN0cnVjdHVyZSogaGVhZFN0cnVjdHVyZSwgY29uc3QgT2JqZWN0
UHJvcGVydHlDb25kaXRpb25TZXQmIGNvbmRpdGlvblNldCwgVW5pcXVlZFN0cmluZ0ltcGwqIHVp
ZCkKKyAgICBTdHJ1Y3R1cmUqIGhlYWRTdHJ1Y3R1cmUsIGNvbnN0IE9iamVjdFByb3BlcnR5Q29u
ZGl0aW9uU2V0JiBjb25kaXRpb25TZXQsIFdhdGNocG9pbnRTZXQqIGltcHVyZVByb3BlcnR5U2V0
LCBVbmlxdWVkU3RyaW5nSW1wbCogdWlkKQogewogICAgIC8vIEZJWE1FOiBXZSBzaG91bGQgYXNz
ZXJ0IHRoYXQgd2UgbmV2ZXIgc2VlIGEgc3RydWN0dXJlIHRoYXQKICAgICAvLyBnZXRPd25Qcm9w
ZXJ0eVNsb3RJc0ltcHVyZSgpIGJ1dCBmb3Igd2hpY2ggd2UgZG9uJ3QKQEAgLTQxLDggKzQxLDEw
IEBAIENvbXBsZXhHZXRTdGF0dXMgQ29tcGxleEdldFN0YXR1czo6Y29tcHV0ZUZvcigKICAgICAK
ICAgICBBU1NFUlQoY29uZGl0aW9uU2V0LmlzVmFsaWQoKSk7CiAgICAgCi0gICAgaWYgKGhlYWRT
dHJ1Y3R1cmUtPnRha2VzU2xvd1BhdGhJbkRGR0ZvckltcHVyZVByb3BlcnR5KCkpCi0gICAgICAg
IHJldHVybiB0YWtlc1Nsb3dQYXRoKCk7CisgICAgaWYgKGhlYWRTdHJ1Y3R1cmUtPnRha2VzU2xv
d1BhdGhJbkRGR0ZvckltcHVyZVByb3BlcnR5KCkpIHsKKyAgICAgICAgaWYgKCFpbXB1cmVQcm9w
ZXJ0eVNldCAmJiBpbXB1cmVQcm9wZXJ0eVNldC0+aGFzQmVlbkludmFsaWRhdGVkKCkpCisgICAg
ICAgICAgICByZXR1cm4gdGFrZXNTbG93UGF0aCgpOworICAgIH0KICAgICAKICAgICBDb21wbGV4
R2V0U3RhdHVzIHJlc3VsdDsKICAgICByZXN1bHQubV9raW5kID0gSW5saW5lYWJsZTsKZGlmZiAt
LWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db21wbGV4R2V0U3RhdHVzLmgg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29tcGxleEdldFN0YXR1cy5oCmluZGV4
IGQ5NGIzMTJhYjliMjdlYmJlMTg2YjEwMzdiYzQyY2I4OTZkMDBkYmUuLjMyOTFhZDVkNmRlZDcw
NDZkNWY1NjExOWUzNWRjNjJhYzk4MDliZGIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ieXRlY29kZS9Db21wbGV4R2V0U3RhdHVzLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL2J5dGVjb2RlL0NvbXBsZXhHZXRTdGF0dXMuaApAQCAtOTUsNyArOTUsNyBAQCBjbGFzcyBD
b21wbGV4R2V0U3RhdHVzIHsKICAgICB9CiAgICAgCiAgICAgc3RhdGljIENvbXBsZXhHZXRTdGF0
dXMgY29tcHV0ZUZvcigKLSAgICAgICAgU3RydWN0dXJlKiBoZWFkU3RydWN0dXJlLCBjb25zdCBP
YmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldCYsIFVuaXF1ZWRTdHJpbmdJbXBsKiB1aWQpOworICAg
ICAgICBTdHJ1Y3R1cmUqIGhlYWRTdHJ1Y3R1cmUsIGNvbnN0IE9iamVjdFByb3BlcnR5Q29uZGl0
aW9uU2V0JiwgV2F0Y2hwb2ludFNldCogaW1wdXJlUHJvcGVydHlTZXQsIFVuaXF1ZWRTdHJpbmdJ
bXBsKiB1aWQpOwogICAgIAogICAgIEtpbmQga2luZCgpIGNvbnN0IHsgcmV0dXJuIG1fa2luZDsg
fQogICAgIFByb3BlcnR5T2Zmc2V0IG9mZnNldCgpIGNvbnN0IHsgcmV0dXJuIG1fb2Zmc2V0OyB9
CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvR2V0QnlJZFN0YXR1
cy5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvR2V0QnlJZFN0YXR1cy5jcHAK
aW5kZXggMThjMWM3ZWQyYzNhY2M0M2RiZWViMDBjZWExNmUzYzBmNTgwZjY3OC4uNGNjMjY3MDdi
ZmRjODQ2YjM5MjM0ZTZhMjc0YWY3NDkxNjRiMGM5MiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2J5dGVjb2RlL0dldEJ5SWRTdGF0dXMuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ieXRlY29kZS9HZXRCeUlkU3RhdHVzLmNwcApAQCAtOTQsNiArOTQsNyBAQCBHZXRC
eUlkU3RhdHVzIEdldEJ5SWRTdGF0dXM6OmNvbXB1dGVGcm9tTExJbnQoQ29kZUJsb2NrKiBwcm9m
aWxlZEJsb2NrLCB1bnNpZ25lZAogCiAgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSB2bS5oZWFw
LnN0cnVjdHVyZUlEVGFibGUoKS5nZXQoc3RydWN0dXJlSUQpOwogCisgICAgLy8gRklYTUU6IFdl
IHNob3VsZCBoYXZlIGEgY2hhbmNlIHRvIG9wdGltaXplIHRoaXMgZm9yIE5ld0ltcHVyZVByb3Bl
cnR5RmlyZXNXYXRjaHBvaW50cyBjYXNlLgogICAgIGlmIChzdHJ1Y3R1cmUtPnRha2VzU2xvd1Bh
dGhJbkRGR0ZvckltcHVyZVByb3BlcnR5KCkpCiAgICAgICAgIHJldHVybiBHZXRCeUlkU3RhdHVz
KE5vSW5mb3JtYXRpb24sIGZhbHNlKTsKIApAQCAtMTc2LDYgKzE3Nyw3IEBAIEdldEJ5SWRTdGF0
dXMgR2V0QnlJZFN0YXR1czo6Y29tcHV0ZUZvclN0dWJJbmZvV2l0aG91dEV4aXRTaXRlRmVlZGJh
Y2soCiAgICAgICAgIAogICAgIGNhc2UgQ2FjaGVUeXBlOjpHZXRCeUlkU2VsZjogewogICAgICAg
ICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IHN0dWJJbmZvLT51LmJ5SWRTZWxmLmJhc2VPYmplY3RT
dHJ1Y3R1cmUuZ2V0KCk7CisgICAgICAgIC8vIEZJWE1FOiBXZSBzaG91bGQgaGF2ZSBhIGNoYW5j
ZSB0byBvcHRpbWl6ZSB0aGlzIGZvciBOZXdJbXB1cmVQcm9wZXJ0eUZpcmVzV2F0Y2hwb2ludHMg
Y2FzZS4KICAgICAgICAgaWYgKHN0cnVjdHVyZS0+dGFrZXNTbG93UGF0aEluREZHRm9ySW1wdXJl
UHJvcGVydHkoKSkKICAgICAgICAgICAgIHJldHVybiBHZXRCeUlkU3RhdHVzKHNsb3dQYXRoU3Rh
dGUsIHRydWUpOwogICAgICAgICB1bnNpZ25lZCBhdHRyaWJ1dGVzOwpAQCAtMjEwLDcgKzIxMiw3
IEBAIEdldEJ5SWRTdGF0dXMgR2V0QnlJZFN0YXR1czo6Y29tcHV0ZUZvclN0dWJJbmZvV2l0aG91
dEV4aXRTaXRlRmVlZGJhY2soCiAgICAgICAgICAgICB9CiAgICAgICAgICAgICAKICAgICAgICAg
ICAgIENvbXBsZXhHZXRTdGF0dXMgY29tcGxleEdldFN0YXR1cyA9IENvbXBsZXhHZXRTdGF0dXM6
OmNvbXB1dGVGb3IoCi0gICAgICAgICAgICAgICAgc3RydWN0dXJlLCBhY2Nlc3MuY29uZGl0aW9u
U2V0KCksIHVpZCk7CisgICAgICAgICAgICAgICAgc3RydWN0dXJlLCBhY2Nlc3MuY29uZGl0aW9u
U2V0KCksIGFjY2Vzcy5pbXB1cmVQcm9wZXJ0eVNldCgpLCB1aWQpOwogICAgICAgICAgICAgIAog
ICAgICAgICAgICAgc3dpdGNoIChjb21wbGV4R2V0U3RhdHVzLmtpbmQoKSkgewogICAgICAgICAg
ICAgY2FzZSBDb21wbGV4R2V0U3RhdHVzOjpTaG91bGRTa2lwOgpAQCAtMjU4LDcgKzI2MCw5IEBA
IEdldEJ5SWRTdGF0dXMgR2V0QnlJZFN0YXR1czo6Y29tcHV0ZUZvclN0dWJJbmZvV2l0aG91dEV4
aXRTaXRlRmVlZGJhY2soCiAgICAgICAgICAgICAgICAgQVNTRVJUKChBY2Nlc3NDYXNlOjpNaXNz
ID09IGFjY2Vzcy50eXBlKCkpID09IChhY2Nlc3Mub2Zmc2V0KCkgPT0gaW52YWxpZE9mZnNldCkp
OwogICAgICAgICAgICAgICAgIEdldEJ5SWRWYXJpYW50IHZhcmlhbnQoCiAgICAgICAgICAgICAg
ICAgICAgIFN0cnVjdHVyZVNldChzdHJ1Y3R1cmUpLCBjb21wbGV4R2V0U3RhdHVzLm9mZnNldCgp
LAotICAgICAgICAgICAgICAgICAgICBjb21wbGV4R2V0U3RhdHVzLmNvbmRpdGlvblNldCgpLCBX
VEZNb3ZlKGNhbGxMaW5rU3RhdHVzKSwKKyAgICAgICAgICAgICAgICAgICAgY29tcGxleEdldFN0
YXR1cy5jb25kaXRpb25TZXQoKSwKKyAgICAgICAgICAgICAgICAgICAgYWNjZXNzLmltcHVyZVBy
b3BlcnR5U2V0KCksCisgICAgICAgICAgICAgICAgICAgIFdURk1vdmUoY2FsbExpbmtTdGF0dXMp
LAogICAgICAgICAgICAgICAgICAgICBpbnRyaW5zaWNGdW5jdGlvbiwKICAgICAgICAgICAgICAg
ICAgICAgZG9tSklUKTsKIApAQCAtMzUxLDYgKzM1NSw5IEBAIEdldEJ5SWRTdGF0dXMgR2V0QnlJ
ZFN0YXR1czo6Y29tcHV0ZUZvcihjb25zdCBTdHJ1Y3R1cmVTZXQmIHNldCwgVW5pcXVlZFN0cmlu
Z0ltCiAgICAgICAgIAogICAgICAgICBpZiAoIXN0cnVjdHVyZS0+cHJvcGVydHlBY2Nlc3Nlc0Fy
ZUNhY2hlYWJsZSgpKQogICAgICAgICAgICAgcmV0dXJuIEdldEJ5SWRTdGF0dXMoVGFrZXNTbG93
UGF0aCk7CisgICAgICAgIC8vIEZJWE1FOiBXZSBzaG91bGQgaGF2ZSBhIGNoYW5jZSB0byBvcHRp
bWl6ZSB0aGlzIGZvciBOZXdJbXB1cmVQcm9wZXJ0eUZpcmVzV2F0Y2hwb2ludHMgY2FzZS4KKyAg
ICAgICAgaWYgKHN0cnVjdHVyZS0+dGFrZXNTbG93UGF0aEluREZHRm9ySW1wdXJlUHJvcGVydHko
KSkKKyAgICAgICAgICAgIHJldHVybiBHZXRCeUlkU3RhdHVzKFRha2VzU2xvd1BhdGgpOwogICAg
ICAgICAKICAgICAgICAgdW5zaWduZWQgYXR0cmlidXRlczsKICAgICAgICAgUHJvcGVydHlPZmZz
ZXQgb2Zmc2V0ID0gc3RydWN0dXJlLT5nZXRDb25jdXJyZW50bHkodWlkLCBhdHRyaWJ1dGVzKTsK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9HZXRCeUlkVmFyaWFu
dC5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvR2V0QnlJZFZhcmlhbnQuY3Bw
CmluZGV4IGQ5NDBiNjJjYWU4YzM2NDMzOTdlOTcyZTEzM2Q0NzRmN2IzY2I2NGEuLmNhYWE3NDdj
YWY1MGRkNjVlNThhY2E1MDg2MWQzYmIxMjA5ZDhlN2UgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ieXRlY29kZS9HZXRCeUlkVmFyaWFudC5jcHAKKysrIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2J5dGVjb2RlL0dldEJ5SWRWYXJpYW50LmNwcApAQCAtMzUsMTIgKzM1LDE0IEBA
IG5hbWVzcGFjZSBKU0MgewogR2V0QnlJZFZhcmlhbnQ6OkdldEJ5SWRWYXJpYW50KAogICAgIGNv
bnN0IFN0cnVjdHVyZVNldCYgc3RydWN0dXJlU2V0LCBQcm9wZXJ0eU9mZnNldCBvZmZzZXQsCiAg
ICAgY29uc3QgT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQmIGNvbmRpdGlvblNldCwKKyAgICBX
YXRjaHBvaW50U2V0KiBpbXB1cmVQcm9wZXJ0eVNldCA9IG51bGxwdHIsCiAgICAgc3RkOjp1bmlx
dWVfcHRyPENhbGxMaW5rU3RhdHVzPiBjYWxsTGlua1N0YXR1cywKICAgICBKU0Z1bmN0aW9uKiBp
bnRyaW5zaWNGdW5jdGlvbiwKICAgICBET01KSVQ6OkdldHRlclNldHRlciogZG9tSklUKQogICAg
IDogbV9zdHJ1Y3R1cmVTZXQoc3RydWN0dXJlU2V0KQogICAgICwgbV9jb25kaXRpb25TZXQoY29u
ZGl0aW9uU2V0KQogICAgICwgbV9vZmZzZXQob2Zmc2V0KQorICAgICwgbV9pbXB1cmVQcm9wZXJ0
eVNldChpbXB1cmVQcm9wZXJ0eVNldCkKICAgICAsIG1fY2FsbExpbmtTdGF0dXMoV1RGTW92ZShj
YWxsTGlua1N0YXR1cykpCiAgICAgLCBtX2ludHJpbnNpY0Z1bmN0aW9uKGludHJpbnNpY0Z1bmN0
aW9uKQogICAgICwgbV9kb21KSVQoZG9tSklUKQpAQCAtNjYsNiArNjgsNyBAQCBHZXRCeUlkVmFy
aWFudCYgR2V0QnlJZFZhcmlhbnQ6Om9wZXJhdG9yPShjb25zdCBHZXRCeUlkVmFyaWFudCYgb3Ro
ZXIpCiAgICAgbV9zdHJ1Y3R1cmVTZXQgPSBvdGhlci5tX3N0cnVjdHVyZVNldDsKICAgICBtX2Nv
bmRpdGlvblNldCA9IG90aGVyLm1fY29uZGl0aW9uU2V0OwogICAgIG1fb2Zmc2V0ID0gb3RoZXIu
bV9vZmZzZXQ7CisgICAgbV9pbXB1cmVQcm9wZXJ0eVNldCA9IG90aGVyLm1faW1wdXJlUHJvcGVy
dHlTZXQ7CiAgICAgbV9pbnRyaW5zaWNGdW5jdGlvbiA9IG90aGVyLm1faW50cmluc2ljRnVuY3Rp
b247CiAgICAgbV9kb21KSVQgPSBvdGhlci5tX2RvbUpJVDsKICAgICBpZiAob3RoZXIubV9jYWxs
TGlua1N0YXR1cykKQEAgLTEwMyw2ICsxMDYsOSBAQCBib29sIEdldEJ5SWRWYXJpYW50OjphdHRl
bXB0VG9NZXJnZShjb25zdCBHZXRCeUlkVmFyaWFudCYgb3RoZXIpCiAgICAgaWYgKG1fY2FsbExp
bmtTdGF0dXMgfHwgb3RoZXIubV9jYWxsTGlua1N0YXR1cykKICAgICAgICAgcmV0dXJuIGZhbHNl
OwogCisgICAgaWYgKG1faW1wdXJlUHJvcGVydHlTZXQgIT0gb3RoZXIubV9pbXB1cmVQcm9wZXJ0
eVNldCkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCiAgICAgaWYgKCFjYW5NZXJnZUludHJpbnNp
Y1N0cnVjdHVyZXMob3RoZXIpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKQEAgLTE0MCw2ICsx
NDYsOCBAQCB2b2lkIEdldEJ5SWRWYXJpYW50OjpkdW1wSW5Db250ZXh0KFByaW50U3RyZWFtJiBv
dXQsIER1bXBDb250ZXh0KiBjb250ZXh0KSBjb25zdAogICAgIG91dC5wcmludCgKICAgICAgICAg
IjwiLCBpbkNvbnRleHQoc3RydWN0dXJlU2V0KCksIGNvbnRleHQpLCAiLCAiLCBpbkNvbnRleHQo
bV9jb25kaXRpb25TZXQsIGNvbnRleHQpKTsKICAgICBvdXQucHJpbnQoIiwgb2Zmc2V0ID0gIiwg
b2Zmc2V0KCkpOworICAgIGlmIChtX2ltcHVyZVByb3BlcnR5U2V0KQorICAgICAgICBvdXQucHJp
bnQoIiwgaW1wdXJlUHJvcGVydHlTZXQgPSAiLCBSYXdQb2ludGVyKG1faW1wdXJlUHJvcGVydHlT
ZXQuZ2V0KCkpKTsKICAgICBpZiAobV9jYWxsTGlua1N0YXR1cykKICAgICAgICAgb3V0LnByaW50
KCIsIGNhbGwgPSAiLCAqbV9jYWxsTGlua1N0YXR1cyk7CiAgICAgaWYgKG1faW50cmluc2ljRnVu
Y3Rpb24pCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvR2V0QnlJ
ZFZhcmlhbnQuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9HZXRCeUlkVmFyaWFu
dC5oCmluZGV4IDhkZWQyNDg2NzVmODcxZDc5MDhmMjJhNTY5NDM3Mjk3OGI4OTUzYTUuLjU1OWI2
OGNmYTQyNTdiMzI0Njg1MDlkMDBlZjllMGI0NmYwN2U5MjAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ieXRlY29kZS9HZXRCeUlkVmFyaWFudC5oCisrKyBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ieXRlY29kZS9HZXRCeUlkVmFyaWFudC5oCkBAIC00NSw2ICs0NSw3IEBAIGNs
YXNzIEdldEJ5SWRWYXJpYW50IHsKICAgICBHZXRCeUlkVmFyaWFudCgKICAgICAgICAgY29uc3Qg
U3RydWN0dXJlU2V0JiBzdHJ1Y3R1cmVTZXQgPSBTdHJ1Y3R1cmVTZXQoKSwgUHJvcGVydHlPZmZz
ZXQgb2Zmc2V0ID0gaW52YWxpZE9mZnNldCwKICAgICAgICAgY29uc3QgT2JqZWN0UHJvcGVydHlD
b25kaXRpb25TZXQmID0gT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQoKSwKKyAgICAgICAgV2F0
Y2hwb2ludFNldCogaW1wdXJlUHJvcGVydHlTZXQgPSBudWxscHRyLAogICAgICAgICBzdGQ6OnVu
aXF1ZV9wdHI8Q2FsbExpbmtTdGF0dXM+ID0gbnVsbHB0ciwKICAgICAgICAgSlNGdW5jdGlvbiog
PSBudWxscHRyLAogICAgICAgICBET01KSVQ6OkdldHRlclNldHRlciogPSBudWxscHRyKTsKQEAg
LTU4LDYgKzU5LDcgQEAgY2xhc3MgR2V0QnlJZFZhcmlhbnQgewogICAgIGJvb2wgb3BlcmF0b3Ih
KCkgY29uc3QgeyByZXR1cm4gIWlzU2V0KCk7IH0KICAgICBjb25zdCBTdHJ1Y3R1cmVTZXQmIHN0
cnVjdHVyZVNldCgpIGNvbnN0IHsgcmV0dXJuIG1fc3RydWN0dXJlU2V0OyB9CiAgICAgU3RydWN0
dXJlU2V0JiBzdHJ1Y3R1cmVTZXQoKSB7IHJldHVybiBtX3N0cnVjdHVyZVNldDsgfQorICAgIFdh
dGNocG9pbnRTZXQqIGltcHVyZVByb3BlcnR5U2V0KCkgeyByZXR1cm4gbV9pbXB1cmVQcm9wZXJ0
eVNldC5nZXQoKTsgfQogCiAgICAgLy8gQSBub24tZW1wdHkgY29uZGl0aW9uIHNldCBtZWFucyB0
aGF0IHRoaXMgaXMgYSBwcm90b3R5cGUgbG9hZC4KICAgICBjb25zdCBPYmplY3RQcm9wZXJ0eUNv
bmRpdGlvblNldCYgY29uZGl0aW9uU2V0KCkgY29uc3QgeyByZXR1cm4gbV9jb25kaXRpb25TZXQ7
IH0KQEAgLTgzLDYgKzg1LDcgQEAgY2xhc3MgR2V0QnlJZFZhcmlhbnQgewogICAgIFN0cnVjdHVy
ZVNldCBtX3N0cnVjdHVyZVNldDsKICAgICBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldCBtX2Nv
bmRpdGlvblNldDsKICAgICBQcm9wZXJ0eU9mZnNldCBtX29mZnNldDsKKyAgICBSZWZQdHI8V2F0
Y2hwb2ludFNldD4gbV9pbXB1cmVQcm9wZXJ0eVNldDsKICAgICBzdGQ6OnVuaXF1ZV9wdHI8Q2Fs
bExpbmtTdGF0dXM+IG1fY2FsbExpbmtTdGF0dXM7CiAgICAgSlNGdW5jdGlvbiogbV9pbnRyaW5z
aWNGdW5jdGlvbjsKICAgICBET01KSVQ6OkdldHRlclNldHRlciogbV9kb21KSVQ7CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUG9seW1vcnBoaWNBY2Nlc3MuY3Bw
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1BvbHltb3JwaGljQWNjZXNzLmNwcApp
bmRleCA4OWFkOWM2ZmYzMzliMWYwODA2YjI0YTRjNzY0YTlkNGUzZmI5M2MwLi43Yzc1ZWQwNTQ0
YTA3NWUxODFlM2NiZTFhZWE0N2M1ODRjYmQ1MGIyIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvYnl0ZWNvZGUvUG9seW1vcnBoaWNBY2Nlc3MuY3BwCisrKyBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ieXRlY29kZS9Qb2x5bW9ycGhpY0FjY2Vzcy5jcHAKQEAgLTIxMCwxMiArMjEw
LDIxIEBAIHZvaWQgQWNjZXNzR2VuZXJhdGlvblN0YXRlOjplbWl0RXhwbGljaXRFeGNlcHRpb25I
YW5kbGVyKCkKICAgICB9CiB9CiAKK3ZvaWQgQWNjZXNzQ2FzZTo6aW5pdGlhbGl6ZUltcHVyZVBy
b3BlcnR5U2V0SWZOZWNlc3NhcnkoVk0mIHZtLCBjb25zdCBJZGVudGlmaWVyJiBpZGVudCkKK3sK
KyAgICBpZiAoKHN0cnVjdHVyZSgpICYmIHN0cnVjdHVyZSgpLT5uZWVkSW1wdXJlUHJvcGVydHlX
YXRjaHBvaW50KCkpIHx8IG1fY29uZGl0aW9uU2V0Lm5lZWRJbXB1cmVQcm9wZXJ0eVdhdGNocG9p
bnQoKSkgeworICAgICAgICBpZiAoIW1fcmFyZURhdGEpCisgICAgICAgICAgICBtX3JhcmVEYXRh
ID0gc3RkOjptYWtlX3VuaXF1ZTxSYXJlRGF0YT4oKTsKKyAgICAgICAgbV9yYXJlRGF0YS0+aW1w
dXJlUHJvcGVydHlTZXQgPSB2bS5lbnN1cmVXYXRjaHBvaW50U2V0Rm9ySW1wdXJlUHJvcGVydHko
aWRlbnQpOworICAgIH0KK30KKwogQWNjZXNzQ2FzZTo6QWNjZXNzQ2FzZSgpCiB7CiB9CiAKIHN0
ZDo6dW5pcXVlX3B0cjxBY2Nlc3NDYXNlPiBBY2Nlc3NDYXNlOjp0cnlHZXQoCi0gICAgVk0mIHZt
LCBKU0NlbGwqIG93bmVyLCBBY2Nlc3NUeXBlIHR5cGUsIFByb3BlcnR5T2Zmc2V0IG9mZnNldCwg
U3RydWN0dXJlKiBzdHJ1Y3R1cmUsCisgICAgVk0mIHZtLCBKU0NlbGwqIG93bmVyLCBjb25zdCBJ
ZGVudGlmaWVyJiBpZGVudCwgQWNjZXNzVHlwZSB0eXBlLCBQcm9wZXJ0eU9mZnNldCBvZmZzZXQs
IFN0cnVjdHVyZSogc3RydWN0dXJlLAogICAgIGNvbnN0IE9iamVjdFByb3BlcnR5Q29uZGl0aW9u
U2V0JiBjb25kaXRpb25TZXQsIGJvb2wgdmlhUHJveHksIFdhdGNocG9pbnRTZXQqIGFkZGl0aW9u
YWxTZXQpCiB7CiAgICAgc3RkOjp1bmlxdWVfcHRyPEFjY2Vzc0Nhc2U+IHJlc3VsdChuZXcgQWNj
ZXNzQ2FzZSgpKTsKQEAgLTIzMSwxMSArMjQwLDEyIEBAIHN0ZDo6dW5pcXVlX3B0cjxBY2Nlc3ND
YXNlPiBBY2Nlc3NDYXNlOjp0cnlHZXQoCiAgICAgICAgIHJlc3VsdC0+bV9yYXJlRGF0YS0+YWRk
aXRpb25hbFNldCA9IGFkZGl0aW9uYWxTZXQ7CiAgICAgfQogCisgICAgcmVzdWx0LT5pbml0aWFs
aXplSW1wdXJlUHJvcGVydHlTZXRJZk5lY2Vzc2FyeSh2bSwgaWRlbnQpOwogICAgIHJldHVybiBy
ZXN1bHQ7CiB9CiAKIHN0ZDo6dW5pcXVlX3B0cjxBY2Nlc3NDYXNlPiBBY2Nlc3NDYXNlOjpnZXQo
Ci0gICAgVk0mIHZtLCBKU0NlbGwqIG93bmVyLCBBY2Nlc3NUeXBlIHR5cGUsIFByb3BlcnR5T2Zm
c2V0IG9mZnNldCwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsCisgICAgVk0mIHZtLCBKU0NlbGwqIG93
bmVyLCBjb25zdCBJZGVudGlmaWVyJiBpZGVudCwgQWNjZXNzVHlwZSB0eXBlLCBQcm9wZXJ0eU9m
ZnNldCBvZmZzZXQsIFN0cnVjdHVyZSogc3RydWN0dXJlLAogICAgIGNvbnN0IE9iamVjdFByb3Bl
cnR5Q29uZGl0aW9uU2V0JiBjb25kaXRpb25TZXQsIGJvb2wgdmlhUHJveHksIFdhdGNocG9pbnRT
ZXQqIGFkZGl0aW9uYWxTZXQsCiAgICAgUHJvcGVydHlTbG90OjpHZXRWYWx1ZUZ1bmMgY3VzdG9t
R2V0dGVyLCBKU09iamVjdCogY3VzdG9tU2xvdEJhc2UsIERPTUpJVDo6R2V0dGVyU2V0dGVyKiBk
b21KSVQpCiB7CkBAIC0yNTUsMTAgKzI2NSwxMSBAQCBzdGQ6OnVuaXF1ZV9wdHI8QWNjZXNzQ2Fz
ZT4gQWNjZXNzQ2FzZTo6Z2V0KAogICAgICAgICByZXN1bHQtPm1fcmFyZURhdGEtPmRvbUpJVCA9
IGRvbUpJVDsKICAgICB9CiAKKyAgICByZXN1bHQtPmluaXRpYWxpemVJbXB1cmVQcm9wZXJ0eVNl
dElmTmVjZXNzYXJ5KHZtLCBpZGVudCk7CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAotc3RkOjp1
bmlxdWVfcHRyPEFjY2Vzc0Nhc2U+IEFjY2Vzc0Nhc2U6Om1lZ2Ftb3JwaGljTG9hZChWTSYgdm0s
IEpTQ2VsbCogb3duZXIpCitzdGQ6OnVuaXF1ZV9wdHI8QWNjZXNzQ2FzZT4gQWNjZXNzQ2FzZTo6
bWVnYW1vcnBoaWNMb2FkKFZNJiB2bSwgSlNDZWxsKiBvd25lciwgY29uc3QgSWRlbnRpZmllciYg
aWRlbnQpCiB7CiAgICAgVU5VU0VEX1BBUkFNKHZtKTsKICAgICBVTlVTRURfUEFSQU0ob3duZXIp
OwpAQCAtMjcwLDExICsyODEsMTIgQEAgc3RkOjp1bmlxdWVfcHRyPEFjY2Vzc0Nhc2U+IEFjY2Vz
c0Nhc2U6Om1lZ2Ftb3JwaGljTG9hZChWTSYgdm0sIEpTQ2VsbCogb3duZXIpCiAgICAgCiAgICAg
cmVzdWx0LT5tX3R5cGUgPSBNZWdhbW9ycGhpY0xvYWQ7CiAgICAgCisgICAgcmVzdWx0LT5pbml0
aWFsaXplSW1wdXJlUHJvcGVydHlTZXRJZk5lY2Vzc2FyeSh2bSwgaWRlbnQpOwogICAgIHJldHVy
biByZXN1bHQ7CiB9CiAKIHN0ZDo6dW5pcXVlX3B0cjxBY2Nlc3NDYXNlPiBBY2Nlc3NDYXNlOjpy
ZXBsYWNlKAotICAgIFZNJiB2bSwgSlNDZWxsKiBvd25lciwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUs
IFByb3BlcnR5T2Zmc2V0IG9mZnNldCkKKyAgICBWTSYgdm0sIEpTQ2VsbCogb3duZXIsIGNvbnN0
IElkZW50aWZpZXImIGlkZW50LCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgUHJvcGVydHlPZmZzZXQg
b2Zmc2V0KQogewogICAgIHN0ZDo6dW5pcXVlX3B0cjxBY2Nlc3NDYXNlPiByZXN1bHQobmV3IEFj
Y2Vzc0Nhc2UoKSk7CiAKQEAgLTI4MiwxMSArMjk0LDEyIEBAIHN0ZDo6dW5pcXVlX3B0cjxBY2Nl
c3NDYXNlPiBBY2Nlc3NDYXNlOjpyZXBsYWNlKAogICAgIHJlc3VsdC0+bV9vZmZzZXQgPSBvZmZz
ZXQ7CiAgICAgcmVzdWx0LT5tX3N0cnVjdHVyZS5zZXQodm0sIG93bmVyLCBzdHJ1Y3R1cmUpOwog
CisgICAgcmVzdWx0LT5pbml0aWFsaXplSW1wdXJlUHJvcGVydHlTZXRJZk5lY2Vzc2FyeSh2bSwg
aWRlbnQpOwogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKIHN0ZDo6dW5pcXVlX3B0cjxBY2Nlc3ND
YXNlPiBBY2Nlc3NDYXNlOjp0cmFuc2l0aW9uKAotICAgIFZNJiB2bSwgSlNDZWxsKiBvd25lciwg
U3RydWN0dXJlKiBvbGRTdHJ1Y3R1cmUsIFN0cnVjdHVyZSogbmV3U3RydWN0dXJlLCBQcm9wZXJ0
eU9mZnNldCBvZmZzZXQsCisgICAgVk0mIHZtLCBKU0NlbGwqIG93bmVyLCBjb25zdCBJZGVudGlm
aWVyJiBpZGVudCwgU3RydWN0dXJlKiBvbGRTdHJ1Y3R1cmUsIFN0cnVjdHVyZSogbmV3U3RydWN0
dXJlLCBQcm9wZXJ0eU9mZnNldCBvZmZzZXQsCiAgICAgY29uc3QgT2JqZWN0UHJvcGVydHlDb25k
aXRpb25TZXQmIGNvbmRpdGlvblNldCkKIHsKICAgICBSRUxFQVNFX0FTU0VSVChvbGRTdHJ1Y3R1
cmUgPT0gbmV3U3RydWN0dXJlLT5wcmV2aW91c0lEKCkpOwpAQCAtMzA2LDExICszMTksMTIgQEAg
c3RkOjp1bmlxdWVfcHRyPEFjY2Vzc0Nhc2U+IEFjY2Vzc0Nhc2U6OnRyYW5zaXRpb24oCiAgICAg
cmVzdWx0LT5tX3N0cnVjdHVyZS5zZXQodm0sIG93bmVyLCBuZXdTdHJ1Y3R1cmUpOwogICAgIHJl
c3VsdC0+bV9jb25kaXRpb25TZXQgPSBjb25kaXRpb25TZXQ7CiAKKyAgICByZXN1bHQtPmluaXRp
YWxpemVJbXB1cmVQcm9wZXJ0eVNldElmTmVjZXNzYXJ5KHZtLCBpZGVudCk7CiAgICAgcmV0dXJu
IHJlc3VsdDsKIH0KIAogc3RkOjp1bmlxdWVfcHRyPEFjY2Vzc0Nhc2U+IEFjY2Vzc0Nhc2U6OnNl
dHRlcigKLSAgICBWTSYgdm0sIEpTQ2VsbCogb3duZXIsIEFjY2Vzc1R5cGUgdHlwZSwgU3RydWN0
dXJlKiBzdHJ1Y3R1cmUsIFByb3BlcnR5T2Zmc2V0IG9mZnNldCwKKyAgICBWTSYgdm0sIEpTQ2Vs
bCogb3duZXIsIGNvbnN0IElkZW50aWZpZXImIGlkZW50LCBBY2Nlc3NUeXBlIHR5cGUsIFN0cnVj
dHVyZSogc3RydWN0dXJlLCBQcm9wZXJ0eU9mZnNldCBvZmZzZXQsCiAgICAgY29uc3QgT2JqZWN0
UHJvcGVydHlDb25kaXRpb25TZXQmIGNvbmRpdGlvblNldCwgUHV0UHJvcGVydHlTbG90OjpQdXRW
YWx1ZUZ1bmMgY3VzdG9tU2V0dGVyLAogICAgIEpTT2JqZWN0KiBjdXN0b21TbG90QmFzZSkKIHsK
QEAgLTMyNCwxMSArMzM4LDEyIEBAIHN0ZDo6dW5pcXVlX3B0cjxBY2Nlc3NDYXNlPiBBY2Nlc3ND
YXNlOjpzZXR0ZXIoCiAgICAgcmVzdWx0LT5tX3JhcmVEYXRhLT5jdXN0b21BY2Nlc3Nvci5zZXR0
ZXIgPSBjdXN0b21TZXR0ZXI7CiAgICAgcmVzdWx0LT5tX3JhcmVEYXRhLT5jdXN0b21TbG90QmFz
ZS5zZXRNYXlCZU51bGwodm0sIG93bmVyLCBjdXN0b21TbG90QmFzZSk7CiAKKyAgICByZXN1bHQt
PmluaXRpYWxpemVJbXB1cmVQcm9wZXJ0eVNldElmTmVjZXNzYXJ5KHZtLCBpZGVudCk7CiAgICAg
cmV0dXJuIHJlc3VsdDsKIH0KIAogc3RkOjp1bmlxdWVfcHRyPEFjY2Vzc0Nhc2U+IEFjY2Vzc0Nh
c2U6OmluKAotICAgIFZNJiB2bSwgSlNDZWxsKiBvd25lciwgQWNjZXNzVHlwZSB0eXBlLCBTdHJ1
Y3R1cmUqIHN0cnVjdHVyZSwKKyAgICBWTSYgdm0sIEpTQ2VsbCogb3duZXIsIGNvbnN0IElkZW50
aWZpZXImIGlkZW50LCBBY2Nlc3NUeXBlIHR5cGUsIFN0cnVjdHVyZSogc3RydWN0dXJlLAogICAg
IGNvbnN0IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0JiBjb25kaXRpb25TZXQpCiB7CiAgICAg
c3RkOjp1bmlxdWVfcHRyPEFjY2Vzc0Nhc2U+IHJlc3VsdChuZXcgQWNjZXNzQ2FzZSgpKTsKQEAg
LTMzNywyMCArMzUyLDIyIEBAIHN0ZDo6dW5pcXVlX3B0cjxBY2Nlc3NDYXNlPiBBY2Nlc3NDYXNl
OjppbigKICAgICByZXN1bHQtPm1fc3RydWN0dXJlLnNldCh2bSwgb3duZXIsIHN0cnVjdHVyZSk7
CiAgICAgcmVzdWx0LT5tX2NvbmRpdGlvblNldCA9IGNvbmRpdGlvblNldDsKIAorICAgIHJlc3Vs
dC0+aW5pdGlhbGl6ZUltcHVyZVByb3BlcnR5U2V0SWZOZWNlc3Nhcnkodm0sIGlkZW50KTsKICAg
ICByZXR1cm4gcmVzdWx0OwogfQogCi1zdGQ6OnVuaXF1ZV9wdHI8QWNjZXNzQ2FzZT4gQWNjZXNz
Q2FzZTo6Z2V0TGVuZ3RoKFZNJiwgSlNDZWxsKiwgQWNjZXNzVHlwZSB0eXBlKQorc3RkOjp1bmlx
dWVfcHRyPEFjY2Vzc0Nhc2U+IEFjY2Vzc0Nhc2U6OmdldExlbmd0aChWTSYgdm0sIEpTQ2VsbCos
IEFjY2Vzc1R5cGUgdHlwZSkKIHsKICAgICBzdGQ6OnVuaXF1ZV9wdHI8QWNjZXNzQ2FzZT4gcmVz
dWx0KG5ldyBBY2Nlc3NDYXNlKCkpOwogCiAgICAgcmVzdWx0LT5tX3R5cGUgPSB0eXBlOwogCisg
ICAgcmVzdWx0LT5pbml0aWFsaXplSW1wdXJlUHJvcGVydHlTZXRJZk5lY2Vzc2FyeSh2bSwgdm0u
cHJvcGVydHlOYW1lcy0+bGVuZ3RoKTsKICAgICByZXR1cm4gcmVzdWx0OwogfQogCiBzdGQ6OnVu
aXF1ZV9wdHI8QWNjZXNzQ2FzZT4gQWNjZXNzQ2FzZTo6Z2V0SW50cmluc2ljKAotICAgIFZNJiB2
bSwgSlNDZWxsKiBvd25lciwgSlNGdW5jdGlvbiogZ2V0dGVyLCBQcm9wZXJ0eU9mZnNldCBvZmZz
ZXQsCisgICAgVk0mIHZtLCBKU0NlbGwqIG93bmVyLCBjb25zdCBJZGVudGlmaWVyJiBpZGVudCwg
SlNGdW5jdGlvbiogZ2V0dGVyLCBQcm9wZXJ0eU9mZnNldCBvZmZzZXQsCiAgICAgU3RydWN0dXJl
KiBzdHJ1Y3R1cmUsIGNvbnN0IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0JiBjb25kaXRpb25T
ZXQpCiB7CiAgICAgc3RkOjp1bmlxdWVfcHRyPEFjY2Vzc0Nhc2U+IHJlc3VsdChuZXcgQWNjZXNz
Q2FzZSgpKTsKQEAgLTM2Myw2ICszODAsNyBAQCBzdGQ6OnVuaXF1ZV9wdHI8QWNjZXNzQ2FzZT4g
QWNjZXNzQ2FzZTo6Z2V0SW50cmluc2ljKAogICAgIHJlc3VsdC0+bV9yYXJlRGF0YSA9IHN0ZDo6
bWFrZV91bmlxdWU8UmFyZURhdGE+KCk7CiAgICAgcmVzdWx0LT5tX3JhcmVEYXRhLT5pbnRyaW5z
aWNGdW5jdGlvbi5zZXQodm0sIG93bmVyLCBnZXR0ZXIpOwogCisgICAgcmVzdWx0LT5pbml0aWFs
aXplSW1wdXJlUHJvcGVydHlTZXRJZk5lY2Vzc2FyeSh2bSwgaWRlbnQpOwogICAgIHJldHVybiBy
ZXN1bHQ7CiB9CiAKQEAgLTM3MSwxNyArMzg5LDE3IEBAIEFjY2Vzc0Nhc2U6On5BY2Nlc3NDYXNl
KCkKIH0KIAogc3RkOjp1bmlxdWVfcHRyPEFjY2Vzc0Nhc2U+IEFjY2Vzc0Nhc2U6OmZyb21TdHJ1
Y3R1cmVTdHViSW5mbygKLSAgICBWTSYgdm0sIEpTQ2VsbCogb3duZXIsIFN0cnVjdHVyZVN0dWJJ
bmZvJiBzdHViSW5mbykKKyAgICBWTSYgdm0sIEpTQ2VsbCogb3duZXIsIGNvbnN0IElkZW50aWZp
ZXImIGlkZW50LCBTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8pCiB7CiAgICAgc3dpdGNoIChz
dHViSW5mby5jYWNoZVR5cGUpIHsKICAgICBjYXNlIENhY2hlVHlwZTo6R2V0QnlJZFNlbGY6CiAg
ICAgICAgIHJldHVybiBnZXQoCi0gICAgICAgICAgICB2bSwgb3duZXIsIExvYWQsIHN0dWJJbmZv
LnUuYnlJZFNlbGYub2Zmc2V0LAorICAgICAgICAgICAgdm0sIG93bmVyLCBpZGVudCwgTG9hZCwg
c3R1YkluZm8udS5ieUlkU2VsZi5vZmZzZXQsCiAgICAgICAgICAgICBzdHViSW5mby51LmJ5SWRT
ZWxmLmJhc2VPYmplY3RTdHJ1Y3R1cmUuZ2V0KCkpOwogCiAgICAgY2FzZSBDYWNoZVR5cGU6OlB1
dEJ5SWRSZXBsYWNlOgogICAgICAgICByZXR1cm4gcmVwbGFjZSgKLSAgICAgICAgICAgIHZtLCBv
d25lciwgc3R1YkluZm8udS5ieUlkU2VsZi5iYXNlT2JqZWN0U3RydWN0dXJlLmdldCgpLCBzdHVi
SW5mby51LmJ5SWRTZWxmLm9mZnNldCk7CisgICAgICAgICAgICB2bSwgb3duZXIsIGlkZW50LCBz
dHViSW5mby51LmJ5SWRTZWxmLmJhc2VPYmplY3RTdHJ1Y3R1cmUuZ2V0KCksIHN0dWJJbmZvLnUu
YnlJZFNlbGYub2Zmc2V0KTsKIAogICAgIGRlZmF1bHQ6CiAgICAgICAgIHJldHVybiBudWxscHRy
OwpAQCAtMzk5LDYgKzQxNyw3IEBAIHN0ZDo6dW5pcXVlX3B0cjxBY2Nlc3NDYXNlPiBBY2Nlc3ND
YXNlOjpjbG9uZSgpIGNvbnN0CiAgICAgICAgIHJlc3VsdC0+bV9yYXJlRGF0YSA9IHN0ZDo6bWFr
ZV91bmlxdWU8UmFyZURhdGE+KCk7CiAgICAgICAgIHJlc3VsdC0+bV9yYXJlRGF0YS0+dmlhUHJv
eHkgPSByYXJlRGF0YS0+dmlhUHJveHk7CiAgICAgICAgIHJlc3VsdC0+bV9yYXJlRGF0YS0+YWRk
aXRpb25hbFNldCA9IHJhcmVEYXRhLT5hZGRpdGlvbmFsU2V0OworICAgICAgICByZXN1bHQtPm1f
cmFyZURhdGEtPmltcHVyZVByb3BlcnR5U2V0ID0gcmFyZURhdGEtPmltcHVyZVByb3BlcnR5U2V0
OwogICAgICAgICAvLyBOT1RFOiBXZSBkb24ndCBjb3B5IHRoZSBjYWxsTGlua0luZm8sIHNpbmNl
IHRoYXQncyBjcmVhdGVkIGR1cmluZyBjb2RlIGdlbmVyYXRpb24uCiAgICAgICAgIHJlc3VsdC0+
bV9yYXJlRGF0YS0+Y3VzdG9tQWNjZXNzb3Iub3BhcXVlID0gcmFyZURhdGEtPmN1c3RvbUFjY2Vz
c29yLm9wYXF1ZTsKICAgICAgICAgcmVzdWx0LT5tX3JhcmVEYXRhLT5jdXN0b21TbG90QmFzZSA9
IHJhcmVEYXRhLT5jdXN0b21TbG90QmFzZTsKQEAgLTQwOCw3ICs0MjcsNyBAQCBzdGQ6OnVuaXF1
ZV9wdHI8QWNjZXNzQ2FzZT4gQWNjZXNzQ2FzZTo6Y2xvbmUoKSBjb25zdAogICAgIHJldHVybiBy
ZXN1bHQ7CiB9CiAKLVZlY3RvcjxXYXRjaHBvaW50U2V0KiwgMj4gQWNjZXNzQ2FzZTo6Y29tbWl0
KFZNJiB2bSwgY29uc3QgSWRlbnRpZmllciYgaWRlbnQpCitWZWN0b3I8V2F0Y2hwb2ludFNldCos
IDI+IEFjY2Vzc0Nhc2U6OmNvbW1pdChWTSYsIGNvbnN0IElkZW50aWZpZXImKQogewogICAgIC8v
IEl0J3MgZmluZSB0byBjb21taXQgc29tZXRoaW5nIHRoYXQgaXMgYWxyZWFkeSBjb21taXR0ZWQu
IFRoYXQgYXJpc2VzIHdoZW4gd2Ugc3dpdGNoIHRvIHVzaW5nCiAgICAgLy8gbmV3bHkgYWxsb2Nh
dGVkIHdhdGNocG9pbnRzLiBXaGVuIGl0IGhhcHBlbnMsIGl0J3Mgbm90IGVmZmljaWVudCAtIGJ1
dCB3ZSB0aGluayB0aGF0J3MgT0sKQEAgLTQxNyw5ICs0MzYsOCBAQCBWZWN0b3I8V2F0Y2hwb2lu
dFNldCosIDI+IEFjY2Vzc0Nhc2U6OmNvbW1pdChWTSYgdm0sIGNvbnN0IElkZW50aWZpZXImIGlk
ZW50KQogICAgIAogICAgIFZlY3RvcjxXYXRjaHBvaW50U2V0KiwgMj4gcmVzdWx0OwogICAgIAot
ICAgIGlmICgoc3RydWN0dXJlKCkgJiYgc3RydWN0dXJlKCktPm5lZWRJbXB1cmVQcm9wZXJ0eVdh
dGNocG9pbnQoKSkKLSAgICAgICAgfHwgbV9jb25kaXRpb25TZXQubmVlZEltcHVyZVByb3BlcnR5
V2F0Y2hwb2ludCgpKQotICAgICAgICByZXN1bHQuYXBwZW5kKHZtLmVuc3VyZVdhdGNocG9pbnRT
ZXRGb3JJbXB1cmVQcm9wZXJ0eShpZGVudCkpOworICAgIGlmIChpbXB1cmVQcm9wZXJ0eVNldCgp
KQorICAgICAgICByZXN1bHQuYXBwZW5kKGltcHVyZVByb3BlcnR5U2V0KCkpOwogCiAgICAgaWYg
KGFkZGl0aW9uYWxTZXQoKSkKICAgICAgICAgcmVzdWx0LmFwcGVuZChhZGRpdGlvbmFsU2V0KCkp
OwpAQCAtNDc4LDcgKzQ5NiwxMiBAQCBib29sIEFjY2Vzc0Nhc2U6OmRvZXNDYWxscyhWZWN0b3I8
SlNDZWxsKj4qIGNlbGxzVG9NYXJrKSBjb25zdAogCiBib29sIEFjY2Vzc0Nhc2U6OmNvdWxkU3Rp
bGxTdWNjZWVkKCkgY29uc3QKIHsKLSAgICByZXR1cm4gbV9jb25kaXRpb25TZXQuc3RydWN0dXJl
c0Vuc3VyZVZhbGlkaXR5QXNzdW1pbmdJbXB1cmVQcm9wZXJ0eVdhdGNocG9pbnQoKTsKKyAgICBp
ZiAoIW1fY29uZGl0aW9uU2V0LnN0cnVjdHVyZXNFbnN1cmVWYWxpZGl0eUFzc3VtaW5nSW1wdXJl
UHJvcGVydHlXYXRjaHBvaW50KCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBhdXRvKiBp
bXB1cmVQcm9wZXJ0eVNldCA9IHRoaXMtPmltcHVyZVByb3BlcnR5U2V0KCk7CisgICAgaWYgKGlt
cHVyZVByb3BlcnR5U2V0ICYmIGltcHVyZVByb3BlcnR5U2V0LT5oYXNCZWVuSW52YWxpZGF0ZWQo
KSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIHJldHVybiB0cnVlOwogfQogCiBib29sIEFj
Y2Vzc0Nhc2U6OmNhbkJlUmVwbGFjZWRCeU1lZ2Ftb3JwaGljTG9hZCgpIGNvbnN0CkBAIC00OTAs
NiArNTEzLDcgQEAgYm9vbCBBY2Nlc3NDYXNlOjpjYW5CZVJlcGxhY2VkQnlNZWdhbW9ycGhpY0xv
YWQoKSBjb25zdAogICAgICAgICAmJiAhdmlhUHJveHkoKQogICAgICAgICAmJiBjb25kaXRpb25T
ZXQoKS5pc0VtcHR5KCkKICAgICAgICAgJiYgIWFkZGl0aW9uYWxTZXQoKQorICAgICAgICAmJiAh
aW1wdXJlUHJvcGVydHlTZXQoKQogICAgICAgICAmJiAhY3VzdG9tU2xvdEJhc2UoKTsKIH0KIApA
QCAtMTc0OSw3ICsxNzczLDcgQEAgQWNjZXNzR2VuZXJhdGlvblJlc3VsdCBQb2x5bW9ycGhpY0Fj
Y2Vzczo6cmVnZW5lcmF0ZSgKICAgICAgICAgfQogICAgICAgICAKICAgICAgICAgaWYgKG51bVNl
bGZMb2FkcyA+PSBPcHRpb25zOjptZWdhbW9ycGhpY0xvYWRDb3N0KCkpIHsKLSAgICAgICAgICAg
IGlmIChhdXRvIG1lZ2EgPSBBY2Nlc3NDYXNlOjptZWdhbW9ycGhpY0xvYWQodm0sIGNvZGVCbG9j
aykpIHsKKyAgICAgICAgICAgIGlmIChhdXRvIG1lZ2EgPSBBY2Nlc3NDYXNlOjptZWdhbW9ycGhp
Y0xvYWQodm0sIGNvZGVCbG9jaywgaWRlbnQpKSB7CiAgICAgICAgICAgICAgICAgY2FzZXMucmVt
b3ZlQWxsTWF0Y2hpbmcoCiAgICAgICAgICAgICAgICAgICAgIFsmXSAoc3RkOjp1bmlxdWVfcHRy
PEFjY2Vzc0Nhc2U+JiBuZXdDYXNlKSAtPiBib29sIHsKICAgICAgICAgICAgICAgICAgICAgICAg
IHJldHVybiBuZXdDYXNlLT5jYW5CZVJlcGxhY2VkQnlNZWdhbW9ycGhpY0xvYWQoKTsKZGlmZiAt
LWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Qb2x5bW9ycGhpY0FjY2Vzcy5o
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1BvbHltb3JwaGljQWNjZXNzLmgKaW5k
ZXggNmY3MDFjNWZhZjlmMWMzYzA3NjBhMDM3M2YzMWU2ODdmM2VhMTA2ZC4uZDI3YjBjNzk2OTc3
MGExZDRiM2QzMjZjNTI5ZWU5MTQxZWZlOGE2NiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2J5dGVjb2RlL1BvbHltb3JwaGljQWNjZXNzLmgKKysrIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2J5dGVjb2RlL1BvbHltb3JwaGljQWNjZXNzLmgKQEAgLTEyMiwxMyArMTIyLDEzIEBA
IGNsYXNzIEFjY2Vzc0Nhc2UgewogICAgIH07CiAKICAgICBzdGF0aWMgc3RkOjp1bmlxdWVfcHRy
PEFjY2Vzc0Nhc2U+IHRyeUdldCgKLSAgICAgICAgVk0mLCBKU0NlbGwqIG93bmVyLCBBY2Nlc3NU
eXBlLCBQcm9wZXJ0eU9mZnNldCwgU3RydWN0dXJlKiwKKyAgICAgICAgVk0mLCBKU0NlbGwqIG93
bmVyLCBjb25zdCBJZGVudGlmaWVyJiwgQWNjZXNzVHlwZSwgUHJvcGVydHlPZmZzZXQsIFN0cnVj
dHVyZSosCiAgICAgICAgIGNvbnN0IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0JiA9IE9iamVj
dFByb3BlcnR5Q29uZGl0aW9uU2V0KCksCiAgICAgICAgIGJvb2wgdmlhUHJveHkgPSBmYWxzZSwK
ICAgICAgICAgV2F0Y2hwb2ludFNldCogYWRkaXRpb25hbFNldCA9IG51bGxwdHIpOwogCiAgICAg
c3RhdGljIHN0ZDo6dW5pcXVlX3B0cjxBY2Nlc3NDYXNlPiBnZXQoCi0gICAgICAgIFZNJiwgSlND
ZWxsKiBvd25lciwgQWNjZXNzVHlwZSwgUHJvcGVydHlPZmZzZXQsIFN0cnVjdHVyZSosCisgICAg
ICAgIFZNJiwgSlNDZWxsKiBvd25lciwgY29uc3QgSWRlbnRpZmllciYsIEFjY2Vzc1R5cGUsIFBy
b3BlcnR5T2Zmc2V0LCBTdHJ1Y3R1cmUqLAogICAgICAgICBjb25zdCBPYmplY3RQcm9wZXJ0eUNv
bmRpdGlvblNldCYgPSBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldCgpLAogICAgICAgICBib29s
IHZpYVByb3h5ID0gZmFsc2UsCiAgICAgICAgIFdhdGNocG9pbnRTZXQqIGFkZGl0aW9uYWxTZXQg
PSBudWxscHRyLApAQCAtMTM2LDI3ICsxMzYsMjggQEAgY2xhc3MgQWNjZXNzQ2FzZSB7CiAgICAg
ICAgIEpTT2JqZWN0KiBjdXN0b21TbG90QmFzZSA9IG51bGxwdHIsCiAgICAgICAgIERPTUpJVDo6
R2V0dGVyU2V0dGVyKiA9IG51bGxwdHIpOwogICAgIAotICAgIHN0YXRpYyBzdGQ6OnVuaXF1ZV9w
dHI8QWNjZXNzQ2FzZT4gbWVnYW1vcnBoaWNMb2FkKFZNJiwgSlNDZWxsKiBvd25lcik7CisgICAg
c3RhdGljIHN0ZDo6dW5pcXVlX3B0cjxBY2Nlc3NDYXNlPiBtZWdhbW9ycGhpY0xvYWQoVk0mLCBK
U0NlbGwqIG93bmVyLCBjb25zdCBJZGVudGlmaWVyJik7CisKKyAgICBzdGF0aWMgc3RkOjp1bmlx
dWVfcHRyPEFjY2Vzc0Nhc2U+IGdldExlbmd0aChWTSYsIEpTQ2VsbCogb3duZXIsIEFjY2Vzc1R5
cGUpOworCisgICAgc3RhdGljIHN0ZDo6dW5pcXVlX3B0cjxBY2Nlc3NDYXNlPiBnZXRJbnRyaW5z
aWMoVk0mLCBKU0NlbGwqIG93bmVyLCBjb25zdCBJZGVudGlmaWVyJiwgSlNGdW5jdGlvbiogaW50
cmluc2ljLCBQcm9wZXJ0eU9mZnNldCwgU3RydWN0dXJlKiwgY29uc3QgT2JqZWN0UHJvcGVydHlD
b25kaXRpb25TZXQmKTsKICAgICAKLSAgICBzdGF0aWMgc3RkOjp1bmlxdWVfcHRyPEFjY2Vzc0Nh
c2U+IHJlcGxhY2UoVk0mLCBKU0NlbGwqIG93bmVyLCBTdHJ1Y3R1cmUqLCBQcm9wZXJ0eU9mZnNl
dCk7CisgICAgc3RhdGljIHN0ZDo6dW5pcXVlX3B0cjxBY2Nlc3NDYXNlPiByZXBsYWNlKFZNJiwg
SlNDZWxsKiBvd25lciwgY29uc3QgSWRlbnRpZmllciYsIFN0cnVjdHVyZSosIFByb3BlcnR5T2Zm
c2V0KTsKIAogICAgIHN0YXRpYyBzdGQ6OnVuaXF1ZV9wdHI8QWNjZXNzQ2FzZT4gdHJhbnNpdGlv
bigKLSAgICAgICAgVk0mLCBKU0NlbGwqIG93bmVyLCBTdHJ1Y3R1cmUqIG9sZFN0cnVjdHVyZSwg
U3RydWN0dXJlKiBuZXdTdHJ1Y3R1cmUsIFByb3BlcnR5T2Zmc2V0LAorICAgICAgICBWTSYsIEpT
Q2VsbCogb3duZXIsIGNvbnN0IElkZW50aWZpZXImLCBTdHJ1Y3R1cmUqIG9sZFN0cnVjdHVyZSwg
U3RydWN0dXJlKiBuZXdTdHJ1Y3R1cmUsIFByb3BlcnR5T2Zmc2V0LAogICAgICAgICBjb25zdCBP
YmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldCYgPSBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldCgp
KTsKIAogICAgIHN0YXRpYyBzdGQ6OnVuaXF1ZV9wdHI8QWNjZXNzQ2FzZT4gc2V0dGVyKAotICAg
ICAgICBWTSYsIEpTQ2VsbCogb3duZXIsIEFjY2Vzc1R5cGUsIFN0cnVjdHVyZSosIFByb3BlcnR5
T2Zmc2V0LAorICAgICAgICBWTSYsIEpTQ2VsbCogb3duZXIsIGNvbnN0IElkZW50aWZpZXImLCBB
Y2Nlc3NUeXBlLCBTdHJ1Y3R1cmUqLCBQcm9wZXJ0eU9mZnNldCwKICAgICAgICAgY29uc3QgT2Jq
ZWN0UHJvcGVydHlDb25kaXRpb25TZXQmLCBQdXRQcm9wZXJ0eVNsb3Q6OlB1dFZhbHVlRnVuYyA9
IG51bGxwdHIsCiAgICAgICAgIEpTT2JqZWN0KiBjdXN0b21TbG90QmFzZSA9IG51bGxwdHIpOwog
CiAgICAgc3RhdGljIHN0ZDo6dW5pcXVlX3B0cjxBY2Nlc3NDYXNlPiBpbigKLSAgICAgICAgVk0m
LCBKU0NlbGwqIG93bmVyLCBBY2Nlc3NUeXBlLCBTdHJ1Y3R1cmUqLAorICAgICAgICBWTSYsIEpT
Q2VsbCogb3duZXIsIGNvbnN0IElkZW50aWZpZXImLCBBY2Nlc3NUeXBlLCBTdHJ1Y3R1cmUqLAog
ICAgICAgICBjb25zdCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldCYgPSBPYmplY3RQcm9wZXJ0
eUNvbmRpdGlvblNldCgpKTsKIAotICAgIHN0YXRpYyBzdGQ6OnVuaXF1ZV9wdHI8QWNjZXNzQ2Fz
ZT4gZ2V0TGVuZ3RoKFZNJiwgSlNDZWxsKiBvd25lciwgQWNjZXNzVHlwZSk7Ci0gICAgc3RhdGlj
IHN0ZDo6dW5pcXVlX3B0cjxBY2Nlc3NDYXNlPiBnZXRJbnRyaW5zaWMoVk0mLCBKU0NlbGwqIG93
bmVyLCBKU0Z1bmN0aW9uKiBpbnRyaW5zaWMsIFByb3BlcnR5T2Zmc2V0LCBTdHJ1Y3R1cmUqLCBj
b25zdCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldCYpOwotICAgIAotICAgIHN0YXRpYyBzdGQ6
OnVuaXF1ZV9wdHI8QWNjZXNzQ2FzZT4gZnJvbVN0cnVjdHVyZVN0dWJJbmZvKFZNJiwgSlNDZWxs
KiBvd25lciwgU3RydWN0dXJlU3R1YkluZm8mKTsKKyAgICBzdGF0aWMgc3RkOjp1bmlxdWVfcHRy
PEFjY2Vzc0Nhc2U+IGZyb21TdHJ1Y3R1cmVTdHViSW5mbyhWTSYsIEpTQ2VsbCogb3duZXIsIGNv
bnN0IElkZW50aWZpZXImLCBTdHJ1Y3R1cmVTdHViSW5mbyYpOwogCiAgICAgfkFjY2Vzc0Nhc2Uo
KTsKICAgICAKQEAgLTIwMSw2ICsyMDIsMTEgQEAgY2xhc3MgQWNjZXNzQ2FzZSB7CiAgICAgICAg
IHJldHVybiBtX3JhcmVEYXRhID8gbV9yYXJlRGF0YS0+YWRkaXRpb25hbFNldC5nZXQoKSA6IG51
bGxwdHI7CiAgICAgfQogCisgICAgV2F0Y2hwb2ludFNldCogaW1wdXJlUHJvcGVydHlTZXQoKSBj
b25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIG1fcmFyZURhdGEgPyBtX3JhcmVEYXRhLT5pbXB1
cmVQcm9wZXJ0eVNldC5nZXQoKSA6IG51bGxwdHI7CisgICAgfQorCiAgICAgSlNPYmplY3QqIGN1
c3RvbVNsb3RCYXNlKCkgY29uc3QKICAgICB7CiAgICAgICAgIHJldHVybiBtX3JhcmVEYXRhID8g
bV9yYXJlRGF0YS0+Y3VzdG9tU2xvdEJhc2UuZ2V0KCkgOiBudWxscHRyOwpAQCAtMjc4LDYgKzI4
NCw4IEBAIGNsYXNzIEFjY2Vzc0Nhc2UgewogICAgIHZvaWQgZ2VuZXJhdGVJbXBsKEFjY2Vzc0dl
bmVyYXRpb25TdGF0ZSYpOwogICAgIHZvaWQgZW1pdEludHJpbnNpY0dldHRlcihBY2Nlc3NHZW5l
cmF0aW9uU3RhdGUmKTsKICAgICB2b2lkIGVtaXRET01KSVRHZXR0ZXIoQWNjZXNzR2VuZXJhdGlv
blN0YXRlJiwgR1BSUmVnIGJhc2VGb3JHZXRHUFIpOworCisgICAgdm9pZCBpbml0aWFsaXplSW1w
dXJlUHJvcGVydHlTZXRJZk5lY2Vzc2FyeShWTSYsIGNvbnN0IElkZW50aWZpZXImKTsKICAgICAK
ICAgICBBY2Nlc3NUeXBlIG1fdHlwZSB7IExvYWQgfTsKICAgICBTdGF0ZSBtX3N0YXRlIHsgUHJp
bW9yZGlhbCB9OwpAQCAtMzAyLDYgKzMxMCw3IEBAIGNsYXNzIEFjY2Vzc0Nhc2UgewogICAgICAg
ICAKICAgICAgICAgYm9vbCB2aWFQcm94eTsKICAgICAgICAgUmVmUHRyPFdhdGNocG9pbnRTZXQ+
IGFkZGl0aW9uYWxTZXQ7CisgICAgICAgIFJlZlB0cjxXYXRjaHBvaW50U2V0PiBpbXB1cmVQcm9w
ZXJ0eVNldDsKICAgICAgICAgLy8gRklYTUU6IFRoaXMgc2hvdWxkIHByb2JhYmx5IGxpdmUgaW4g
dGhlIHN0dWIgcm91dGluZSBvYmplY3QuCiAgICAgICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD0xNTY0NTYKICAgICAgICAgc3RkOjp1bmlxdWVfcHRyPENhbGxM
aW5rSW5mbz4gY2FsbExpbmtJbmZvOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2J5dGVjb2RlL1N0cnVjdHVyZVN0dWJJbmZvLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
eXRlY29kZS9TdHJ1Y3R1cmVTdHViSW5mby5jcHAKaW5kZXggMzhlNWNlZjkyMzdhMDg2YjZiNDYx
ZmZkZjM5ZjlhZDQ0Y2VlN2I2NS4uNzJiYzhhYzBkZjM0ZTMzZTU1YzQ3YTNlOTQxNWM2OGE3ZTlm
OTAzZiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1N0cnVjdHVy
ZVN0dWJJbmZvLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvU3RydWN0
dXJlU3R1YkluZm8uY3BwCkBAIC0xNDUsNyArMTQ1LDcgQEAgQWNjZXNzR2VuZXJhdGlvblJlc3Vs
dCBTdHJ1Y3R1cmVTdHViSW5mbzo6YWRkQWNjZXNzQ2FzZSgKICAgICAgICAgVmVjdG9yPHN0ZDo6
dW5pcXVlX3B0cjxBY2Nlc3NDYXNlPiwgMj4gYWNjZXNzQ2FzZXM7CiAgICAgICAgIAogICAgICAg
ICBzdGQ6OnVuaXF1ZV9wdHI8QWNjZXNzQ2FzZT4gcHJldmlvdXNDYXNlID0KLSAgICAgICAgICAg
IEFjY2Vzc0Nhc2U6OmZyb21TdHJ1Y3R1cmVTdHViSW5mbyh2bSwgY29kZUJsb2NrLCAqdGhpcyk7
CisgICAgICAgICAgICBBY2Nlc3NDYXNlOjpmcm9tU3RydWN0dXJlU3R1YkluZm8odm0sIGNvZGVC
bG9jaywgaWRlbnQsICp0aGlzKTsKICAgICAgICAgaWYgKHByZXZpb3VzQ2FzZSkKICAgICAgICAg
ICAgIGFjY2Vzc0Nhc2VzLmFwcGVuZChXVEZNb3ZlKHByZXZpb3VzQ2FzZSkpOwogICAgICAgICAK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvUmVwYXRjaC5jcHAgYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaml0L1JlcGF0Y2guY3BwCmluZGV4IGJhYTViN2QyMjZhZDllZWJh
MTQwOTNjNjQxZmE2YjNhMmE4YjBhZmIuLmQ5MzQwODIxNjEwYmY4OWRkMmYwZTY1ODRlNmM2Yzc5
MWE2MGRjNjYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvUmVwYXRjaC5j
cHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9SZXBhdGNoLmNwcApAQCAtMjc4LDkg
KzI3OCw5IEBAIHN0YXRpYyBJbmxpbmVDYWNoZUFjdGlvbiB0cnlDYWNoZUdldEJ5SUQoRXhlY1N0
YXRlKiBleGVjLCBKU1ZhbHVlIGJhc2VWYWx1ZSwgY29uCiAgICAgICAgICAgICBlbHNlCiAgICAg
ICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKIAotICAgICAgICAgICAg
bmV3Q2FzZSA9IEFjY2Vzc0Nhc2U6OnRyeUdldCh2bSwgY29kZUJsb2NrLCB0eXBlLCBvZmZzZXQs
IHN0cnVjdHVyZSwgY29uZGl0aW9uU2V0LCBsb2FkVGFyZ2V0RnJvbVByb3h5LCBzbG90LndhdGNo
cG9pbnRTZXQoKSk7CisgICAgICAgICAgICBuZXdDYXNlID0gQWNjZXNzQ2FzZTo6dHJ5R2V0KHZt
LCBjb2RlQmxvY2ssIHByb3BlcnR5TmFtZSwgdHlwZSwgb2Zmc2V0LCBzdHJ1Y3R1cmUsIGNvbmRp
dGlvblNldCwgbG9hZFRhcmdldEZyb21Qcm94eSwgc2xvdC53YXRjaHBvaW50U2V0KCkpOwogICAg
ICAgICB9IGVsc2UgaWYgKCFsb2FkVGFyZ2V0RnJvbVByb3h5ICYmIGdldHRlciAmJiBBY2Nlc3ND
YXNlOjpjYW5FbWl0SW50cmluc2ljR2V0dGVyKGdldHRlciwgc3RydWN0dXJlKSkKLSAgICAgICAg
ICAgIG5ld0Nhc2UgPSBBY2Nlc3NDYXNlOjpnZXRJbnRyaW5zaWModm0sIGNvZGVCbG9jaywgZ2V0
dGVyLCBzbG90LmNhY2hlZE9mZnNldCgpLCBzdHJ1Y3R1cmUsIGNvbmRpdGlvblNldCk7CisgICAg
ICAgICAgICBuZXdDYXNlID0gQWNjZXNzQ2FzZTo6Z2V0SW50cmluc2ljKHZtLCBjb2RlQmxvY2ss
IHByb3BlcnR5TmFtZSwgZ2V0dGVyLCBzbG90LmNhY2hlZE9mZnNldCgpLCBzdHJ1Y3R1cmUsIGNv
bmRpdGlvblNldCk7CiAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgQWNjZXNzQ2FzZTo6QWNj
ZXNzVHlwZSB0eXBlOwogICAgICAgICAgICAgaWYgKHNsb3QuaXNDYWNoZWFibGVWYWx1ZSgpKQpA
QCAtMjk1LDcgKzI5NSw3IEBAIHN0YXRpYyBJbmxpbmVDYWNoZUFjdGlvbiB0cnlDYWNoZUdldEJ5
SUQoRXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVlIGJhc2VWYWx1ZSwgY29uCiAgICAgICAgICAgICAg
ICAgdHlwZSA9IEFjY2Vzc0Nhc2U6OkN1c3RvbVZhbHVlR2V0dGVyOwogCiAgICAgICAgICAgICBu
ZXdDYXNlID0gQWNjZXNzQ2FzZTo6Z2V0KAotICAgICAgICAgICAgICAgIHZtLCBjb2RlQmxvY2ss
IHR5cGUsIG9mZnNldCwgc3RydWN0dXJlLCBjb25kaXRpb25TZXQsIGxvYWRUYXJnZXRGcm9tUHJv
eHksCisgICAgICAgICAgICAgICAgdm0sIGNvZGVCbG9jaywgcHJvcGVydHlOYW1lLCB0eXBlLCBv
ZmZzZXQsIHN0cnVjdHVyZSwgY29uZGl0aW9uU2V0LCBsb2FkVGFyZ2V0RnJvbVByb3h5LAogICAg
ICAgICAgICAgICAgIHNsb3Qud2F0Y2hwb2ludFNldCgpLCBzbG90LmlzQ2FjaGVhYmxlQ3VzdG9t
KCkgPyBzbG90LmN1c3RvbUdldHRlcigpIDogbnVsbHB0ciwKICAgICAgICAgICAgICAgICBzbG90
LmlzQ2FjaGVhYmxlQ3VzdG9tKCkgPyBzbG90LnNsb3RCYXNlKCkgOiBudWxscHRyLAogICAgICAg
ICAgICAgICAgIGRvbUpJVCk7CkBAIC0zODYsNyArMzg2LDcgQEAgc3RhdGljIElubGluZUNhY2hl
QWN0aW9uIHRyeUNhY2hlUHV0QnlJRChFeGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWUgYmFzZVZhbHVl
LCBTdHIKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgIG5l
d0Nhc2UgPSBBY2Nlc3NDYXNlOjpyZXBsYWNlKHZtLCBjb2RlQmxvY2ssIHN0cnVjdHVyZSwgc2xv
dC5jYWNoZWRPZmZzZXQoKSk7CisgICAgICAgICAgICBuZXdDYXNlID0gQWNjZXNzQ2FzZTo6cmVw
bGFjZSh2bSwgY29kZUJsb2NrLCBpZGVudCwgc3RydWN0dXJlLCBzbG90LmNhY2hlZE9mZnNldCgp
KTsKICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgIEFTU0VSVChzbG90LnR5cGUoKSA9PSBQ
dXRQcm9wZXJ0eVNsb3Q6Ok5ld1Byb3BlcnR5KTsKIApAQCAtNDE5LDcgKzQxOSw3IEBAIHN0YXRp
YyBJbmxpbmVDYWNoZUFjdGlvbiB0cnlDYWNoZVB1dEJ5SUQoRXhlY1N0YXRlKiBleGVjLCBKU1Zh
bHVlIGJhc2VWYWx1ZSwgU3RyCiAgICAgICAgICAgICAgICAgICAgIHJldHVybiBHaXZlVXBPbkNh
Y2hlOwogICAgICAgICAgICAgfQogCi0gICAgICAgICAgICBuZXdDYXNlID0gQWNjZXNzQ2FzZTo6
dHJhbnNpdGlvbih2bSwgY29kZUJsb2NrLCBzdHJ1Y3R1cmUsIG5ld1N0cnVjdHVyZSwgb2Zmc2V0
LCBjb25kaXRpb25TZXQpOworICAgICAgICAgICAgbmV3Q2FzZSA9IEFjY2Vzc0Nhc2U6OnRyYW5z
aXRpb24odm0sIGNvZGVCbG9jaywgaWRlbnQsIHN0cnVjdHVyZSwgbmV3U3RydWN0dXJlLCBvZmZz
ZXQsIGNvbmRpdGlvblNldCk7CiAgICAgICAgIH0KICAgICB9IGVsc2UgaWYgKHNsb3QuaXNDYWNo
ZWFibGVDdXN0b20oKSB8fCBzbG90LmlzQ2FjaGVhYmxlU2V0dGVyKCkpIHsKICAgICAgICAgaWYg
KHNsb3QuaXNDYWNoZWFibGVDdXN0b20oKSkgewpAQCAtNDM0LDcgKzQzNCw3IEBAIHN0YXRpYyBJ
bmxpbmVDYWNoZUFjdGlvbiB0cnlDYWNoZVB1dEJ5SUQoRXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVl
IGJhc2VWYWx1ZSwgU3RyCiAgICAgICAgICAgICB9CiAKICAgICAgICAgICAgIG5ld0Nhc2UgPSBB
Y2Nlc3NDYXNlOjpzZXR0ZXIoCi0gICAgICAgICAgICAgICAgdm0sIGNvZGVCbG9jaywgc2xvdC5p
c0N1c3RvbUFjY2Vzc29yKCkgPyBBY2Nlc3NDYXNlOjpDdXN0b21BY2Nlc3NvclNldHRlciA6IEFj
Y2Vzc0Nhc2U6OkN1c3RvbVZhbHVlU2V0dGVyLCBzdHJ1Y3R1cmUsIGludmFsaWRPZmZzZXQsIGNv
bmRpdGlvblNldCwKKyAgICAgICAgICAgICAgICB2bSwgY29kZUJsb2NrLCBpZGVudCwgc2xvdC5p
c0N1c3RvbUFjY2Vzc29yKCkgPyBBY2Nlc3NDYXNlOjpDdXN0b21BY2Nlc3NvclNldHRlciA6IEFj
Y2Vzc0Nhc2U6OkN1c3RvbVZhbHVlU2V0dGVyLCBzdHJ1Y3R1cmUsIGludmFsaWRPZmZzZXQsIGNv
bmRpdGlvblNldCwKICAgICAgICAgICAgICAgICBzbG90LmN1c3RvbVNldHRlcigpLCBzbG90LmJh
c2UoKSk7CiAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICBPYmplY3RQcm9wZXJ0eUNvbmRp
dGlvblNldCBjb25kaXRpb25TZXQ7CkBAIC00NTEsNyArNDUxLDcgQEAgc3RhdGljIElubGluZUNh
Y2hlQWN0aW9uIHRyeUNhY2hlUHV0QnlJRChFeGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWUgYmFzZVZh
bHVlLCBTdHIKICAgICAgICAgICAgICAgICBvZmZzZXQgPSBzbG90LmNhY2hlZE9mZnNldCgpOwog
CiAgICAgICAgICAgICBuZXdDYXNlID0gQWNjZXNzQ2FzZTo6c2V0dGVyKAotICAgICAgICAgICAg
ICAgIHZtLCBjb2RlQmxvY2ssIEFjY2Vzc0Nhc2U6OlNldHRlciwgc3RydWN0dXJlLCBvZmZzZXQs
IGNvbmRpdGlvblNldCk7CisgICAgICAgICAgICAgICAgdm0sIGNvZGVCbG9jaywgaWRlbnQsIEFj
Y2Vzc0Nhc2U6OlNldHRlciwgc3RydWN0dXJlLCBvZmZzZXQsIGNvbmRpdGlvblNldCk7CiAgICAg
ICAgIH0KICAgICB9CiAKQEAgLTUxNCw3ICs1MTQsNyBAQCBzdGF0aWMgSW5saW5lQ2FjaGVBY3Rp
b24gdHJ5UmVwYXRjaEluKAogICAgIExPR19JQygoSUNFdmVudDo6SW5BZGRBY2Nlc3NDYXNlLCBz
dHJ1Y3R1cmUtPmNsYXNzSW5mbygpLCBpZGVudCkpOwogCiAgICAgc3RkOjp1bmlxdWVfcHRyPEFj
Y2Vzc0Nhc2U+IG5ld0Nhc2UgPSBBY2Nlc3NDYXNlOjppbigKLSAgICAgICAgdm0sIGNvZGVCbG9j
aywgd2FzRm91bmQgPyBBY2Nlc3NDYXNlOjpJbkhpdCA6IEFjY2Vzc0Nhc2U6OkluTWlzcywgc3Ry
dWN0dXJlLCBjb25kaXRpb25TZXQpOworICAgICAgICB2bSwgY29kZUJsb2NrLCBpZGVudCwgd2Fz
Rm91bmQgPyBBY2Nlc3NDYXNlOjpJbkhpdCA6IEFjY2Vzc0Nhc2U6OkluTWlzcywgc3RydWN0dXJl
LCBjb25kaXRpb25TZXQpOwogCiAgICAgQWNjZXNzR2VuZXJhdGlvblJlc3VsdCByZXN1bHQgPSBz
dHViSW5mby5hZGRBY2Nlc3NDYXNlKGNvZGVCbG9jaywgaWRlbnQsIFdURk1vdmUobmV3Q2FzZSkp
OwogICAgIApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVk0uY3Bw
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVk0uY3BwCmluZGV4IDdhMmYwZjI2OTRh
YzAxNmJkOTNkMWM4NmE0YWY5OWVkMWU1ZWVlZjYuLjEzMDVmNDIyMTJkZTI5YmY4Y2FkOWJkMThk
NTA0YzBiYjk1YmY0ZTIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L1ZNLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9WTS5jcHAKQEAgLTc2
MywxMSArNzYzLDYgQEAgV2F0Y2hwb2ludFNldCogVk06OmVuc3VyZVdhdGNocG9pbnRTZXRGb3JJ
bXB1cmVQcm9wZXJ0eShjb25zdCBJZGVudGlmaWVyJiBwcm9wZXIKICAgICByZXR1cm4gcmVzdWx0
Lml0ZXJhdG9yLT52YWx1ZS5nZXQoKTsKIH0KIAotdm9pZCBWTTo6cmVnaXN0ZXJXYXRjaHBvaW50
Rm9ySW1wdXJlUHJvcGVydHkoY29uc3QgSWRlbnRpZmllciYgcHJvcGVydHlOYW1lLCBXYXRjaHBv
aW50KiB3YXRjaHBvaW50KQotewotICAgIGVuc3VyZVdhdGNocG9pbnRTZXRGb3JJbXB1cmVQcm9w
ZXJ0eShwcm9wZXJ0eU5hbWUpLT5hZGQod2F0Y2hwb2ludCk7Ci19Ci0KIHZvaWQgVk06OmFkZElt
cHVyZVByb3BlcnR5KGNvbnN0IFN0cmluZyYgcHJvcGVydHlOYW1lKQogewogICAgIGlmIChSZWZQ
dHI8V2F0Y2hwb2ludFNldD4gd2F0Y2hwb2ludFNldCA9IG1faW1wdXJlUHJvcGVydHlXYXRjaHBv
aW50U2V0cy50YWtlKHByb3BlcnR5TmFtZSkpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9WTS5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVk0uaApp
bmRleCBlMTRiODg1ZmQ0NDgzMGZlZmNmMDk3M2I0MTk5MGZlNTg1MDU0MmQ0Li40ZjViNTQxMTk5
ZjVhNTI0OWE2MWExMDMxNzNmZDY1MWNlYjUxNTRjIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9WTS5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L1ZNLmgKQEAgLTU5Nyw3ICs1OTcsNiBAQCBjbGFzcyBWTSA6IHB1YmxpYyBUaHJlYWRTYWZlUmVm
Q291bnRlZDxWTT4gewogICAgIEpTX0VYUE9SVF9QUklWQVRFIHZvaWQgZGVsZXRlQWxsTGlua2Vk
Q29kZSgpOwogCiAgICAgV2F0Y2hwb2ludFNldCogZW5zdXJlV2F0Y2hwb2ludFNldEZvckltcHVy
ZVByb3BlcnR5KGNvbnN0IElkZW50aWZpZXImKTsKLSAgICB2b2lkIHJlZ2lzdGVyV2F0Y2hwb2lu
dEZvckltcHVyZVByb3BlcnR5KGNvbnN0IElkZW50aWZpZXImLCBXYXRjaHBvaW50Kik7CiAgICAg
CiAgICAgLy8gRklYTUU6IFVzZSBBdG9taWNTdHJpbmcgb25jZSBpdCBnb3QgbWVyZ2VkIHdpdGgg
SWRlbnRpZmllci4KICAgICBKU19FWFBPUlRfUFJJVkFURSB2b2lkIGFkZEltcHVyZVByb3BlcnR5
KGNvbnN0IFN0cmluZyYpOwo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>294566</attachid>
            <date>2016-11-11 16:40:12 -0800</date>
            <delta_ts>2016-11-15 21:47:19 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-164175-20161111163558.patch</filename>
            <type>text/plain</type>
            <size>32420</size>
            <attacher name="Yusuke Suzuki">ysuzuki</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjA4NjAxCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCBi
Yzk3MjljYTMwZDEyYjJlOGFkNjc3OTBhNTdlZjY0NTk5YzZkNjA2Li5iNmQ4NTZmYzhhZDUzYTIz
NGMyOTNkZjZlZDE3ODAxYjg4YWFjMjc2IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSw1NSBAQAorMjAxNi0xMS0xMSAgWXVzdWtlIFN1enVraSAgPHV0YXRhbmUudGVhQGdtYWls
LmNvbT4KKworICAgICAgICBbRE9NSklUXVtKU0NdIEFsbG93IERGRyBHZXRCeUlkIG9wdGltaXph
dGlvbiBmb3IgaW1wdXJlIG9iamVjdHMgd2l0aCBOZXdJbXB1cmVQcm9wZXJ0eUZpcmVzV2F0Y2hw
b2ludHMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE2
NDE3NQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICog
Ynl0ZWNvZGUvQ29tcGxleEdldFN0YXR1cy5jcHA6CisgICAgICAgIChKU0M6OkNvbXBsZXhHZXRT
dGF0dXM6OmNvbXB1dGVGb3IpOgorICAgICAgICAqIGJ5dGVjb2RlL0NvbXBsZXhHZXRTdGF0dXMu
aDoKKyAgICAgICAgKiBieXRlY29kZS9HZXRCeUlkU3RhdHVzLmNwcDoKKyAgICAgICAgKEpTQzo6
R2V0QnlJZFN0YXR1czo6Y29tcHV0ZUZyb21MTEludCk6CisgICAgICAgIChKU0M6OkdldEJ5SWRT
dGF0dXM6OmNvbXB1dGVGb3JTdHViSW5mb1dpdGhvdXRFeGl0U2l0ZUZlZWRiYWNrKToKKyAgICAg
ICAgKEpTQzo6R2V0QnlJZFN0YXR1czo6Y29tcHV0ZUZvcik6CisgICAgICAgICogYnl0ZWNvZGUv
R2V0QnlJZFZhcmlhbnQuY3BwOgorICAgICAgICAoSlNDOjpHZXRCeUlkVmFyaWFudDo6R2V0QnlJ
ZFZhcmlhbnQpOgorICAgICAgICAoSlNDOjpHZXRCeUlkVmFyaWFudDo6b3BlcmF0b3I9KToKKyAg
ICAgICAgKEpTQzo6R2V0QnlJZFZhcmlhbnQ6OmF0dGVtcHRUb01lcmdlKToKKyAgICAgICAgKEpT
Qzo6R2V0QnlJZFZhcmlhbnQ6OmR1bXBJbkNvbnRleHQpOgorICAgICAgICAqIGJ5dGVjb2RlL0dl
dEJ5SWRWYXJpYW50Lmg6CisgICAgICAgIChKU0M6OkdldEJ5SWRWYXJpYW50OjppbXB1cmVQcm9w
ZXJ0eVNldCk6CisgICAgICAgICogYnl0ZWNvZGUvUG9seW1vcnBoaWNBY2Nlc3MuY3BwOgorICAg
ICAgICAoSlNDOjpBY2Nlc3NDYXNlOjppbml0aWFsaXplSW1wdXJlUHJvcGVydHlTZXRJZk5lY2Vz
c2FyeSk6CisgICAgICAgIChKU0M6OkFjY2Vzc0Nhc2U6OnRyeUdldCk6CisgICAgICAgIChKU0M6
OkFjY2Vzc0Nhc2U6OmdldCk6CisgICAgICAgIChKU0M6OkFjY2Vzc0Nhc2U6Om1lZ2Ftb3JwaGlj
TG9hZCk6CisgICAgICAgIChKU0M6OkFjY2Vzc0Nhc2U6OnJlcGxhY2UpOgorICAgICAgICAoSlND
OjpBY2Nlc3NDYXNlOjp0cmFuc2l0aW9uKToKKyAgICAgICAgKEpTQzo6QWNjZXNzQ2FzZTo6c2V0
dGVyKToKKyAgICAgICAgKEpTQzo6QWNjZXNzQ2FzZTo6aW4pOgorICAgICAgICAoSlNDOjpBY2Nl
c3NDYXNlOjpnZXRMZW5ndGgpOgorICAgICAgICAoSlNDOjpBY2Nlc3NDYXNlOjpnZXRJbnRyaW5z
aWMpOgorICAgICAgICAoSlNDOjpBY2Nlc3NDYXNlOjpmcm9tU3RydWN0dXJlU3R1YkluZm8pOgor
ICAgICAgICAoSlNDOjpBY2Nlc3NDYXNlOjpjbG9uZSk6CisgICAgICAgIChKU0M6OkFjY2Vzc0Nh
c2U6OmNvbW1pdCk6CisgICAgICAgIChKU0M6OkFjY2Vzc0Nhc2U6OmNvdWxkU3RpbGxTdWNjZWVk
KToKKyAgICAgICAgKEpTQzo6QWNjZXNzQ2FzZTo6Y2FuQmVSZXBsYWNlZEJ5TWVnYW1vcnBoaWNM
b2FkKToKKyAgICAgICAgKEpTQzo6UG9seW1vcnBoaWNBY2Nlc3M6OnJlZ2VuZXJhdGUpOgorICAg
ICAgICAqIGJ5dGVjb2RlL1BvbHltb3JwaGljQWNjZXNzLmg6CisgICAgICAgIChKU0M6OkFjY2Vz
c0Nhc2U6OmltcHVyZVByb3BlcnR5U2V0KToKKyAgICAgICAgKiBieXRlY29kZS9QdXRCeUlkU3Rh
dHVzLmNwcDoKKyAgICAgICAgKEpTQzo6UHV0QnlJZFN0YXR1czo6Y29tcHV0ZUZvclN0dWJJbmZv
KToKKyAgICAgICAgKiBieXRlY29kZS9TdHJ1Y3R1cmVTdHViSW5mby5jcHA6CisgICAgICAgIChK
U0M6OlN0cnVjdHVyZVN0dWJJbmZvOjphZGRBY2Nlc3NDYXNlKToKKyAgICAgICAgKiBqaXQvUmVw
YXRjaC5jcHA6CisgICAgICAgIChKU0M6OnRyeUNhY2hlR2V0QnlJRCk6CisgICAgICAgIChKU0M6
OnRyeUNhY2hlUHV0QnlJRCk6CisgICAgICAgIChKU0M6OnRyeVJlcGF0Y2hJbik6CisgICAgICAg
ICogcnVudGltZS9WTS5jcHA6CisgICAgICAgIChKU0M6OlZNOjpyZWdpc3RlcldhdGNocG9pbnRG
b3JJbXB1cmVQcm9wZXJ0eSk6IERlbGV0ZWQuCisgICAgICAgICogcnVudGltZS9WTS5oOgorCiAy
MDE2LTExLTExICBDaHJpcyBEdW1leiAgPGNkdW1lekBhcHBsZS5jb20+CiAKICAgICAgICAgVW5y
ZXZpZXdlZCwgcm9sbGluZyBvdXQgcjIwODU4NC4KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ieXRlY29kZS9Db21wbGV4R2V0U3RhdHVzLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ieXRlY29kZS9Db21wbGV4R2V0U3RhdHVzLmNwcAppbmRleCAwNjIyNTUzYzAyNGM5MTBh
Y2UzNjBkMGQzZTQyMzEwZjA4ZWJiNGI0Li4zYzliODliYWZiMjQ0MDZhNTEyZDhkMzQ2MmU5MjMy
ZWNiOWUyZjI0IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29t
cGxleEdldFN0YXR1cy5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0Nv
bXBsZXhHZXRTdGF0dXMuY3BwCkBAIC0zMSw3ICszMSw3IEBACiBuYW1lc3BhY2UgSlNDIHsKIAog
Q29tcGxleEdldFN0YXR1cyBDb21wbGV4R2V0U3RhdHVzOjpjb21wdXRlRm9yKAotICAgIFN0cnVj
dHVyZSogaGVhZFN0cnVjdHVyZSwgY29uc3QgT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQmIGNv
bmRpdGlvblNldCwgVW5pcXVlZFN0cmluZ0ltcGwqIHVpZCkKKyAgICBTdHJ1Y3R1cmUqIGhlYWRT
dHJ1Y3R1cmUsIGNvbnN0IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0JiBjb25kaXRpb25TZXQs
IFdhdGNocG9pbnRTZXQqIGltcHVyZVByb3BlcnR5U2V0LCBVbmlxdWVkU3RyaW5nSW1wbCogdWlk
KQogewogICAgIC8vIEZJWE1FOiBXZSBzaG91bGQgYXNzZXJ0IHRoYXQgd2UgbmV2ZXIgc2VlIGEg
c3RydWN0dXJlIHRoYXQKICAgICAvLyBnZXRPd25Qcm9wZXJ0eVNsb3RJc0ltcHVyZSgpIGJ1dCBm
b3Igd2hpY2ggd2UgZG9uJ3QKQEAgLTQxLDggKzQxLDEwIEBAIENvbXBsZXhHZXRTdGF0dXMgQ29t
cGxleEdldFN0YXR1czo6Y29tcHV0ZUZvcigKICAgICAKICAgICBBU1NFUlQoY29uZGl0aW9uU2V0
LmlzVmFsaWQoKSk7CiAgICAgCi0gICAgaWYgKGhlYWRTdHJ1Y3R1cmUtPnRha2VzU2xvd1BhdGhJ
bkRGR0ZvckltcHVyZVByb3BlcnR5KCkpCi0gICAgICAgIHJldHVybiB0YWtlc1Nsb3dQYXRoKCk7
CisgICAgaWYgKGhlYWRTdHJ1Y3R1cmUtPnRha2VzU2xvd1BhdGhJbkRGR0ZvckltcHVyZVByb3Bl
cnR5KCkpIHsKKyAgICAgICAgaWYgKCFpbXB1cmVQcm9wZXJ0eVNldCAmJiBpbXB1cmVQcm9wZXJ0
eVNldC0+aGFzQmVlbkludmFsaWRhdGVkKCkpCisgICAgICAgICAgICByZXR1cm4gdGFrZXNTbG93
UGF0aCgpOworICAgIH0KICAgICAKICAgICBDb21wbGV4R2V0U3RhdHVzIHJlc3VsdDsKICAgICBy
ZXN1bHQubV9raW5kID0gSW5saW5lYWJsZTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ieXRlY29kZS9Db21wbGV4R2V0U3RhdHVzLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
Ynl0ZWNvZGUvQ29tcGxleEdldFN0YXR1cy5oCmluZGV4IGQ5NGIzMTJhYjliMjdlYmJlMTg2YjEw
MzdiYzQyY2I4OTZkMDBkYmUuLjMyOTFhZDVkNmRlZDcwNDZkNWY1NjExOWUzNWRjNjJhYzk4MDli
ZGIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db21wbGV4R2V0
U3RhdHVzLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvbXBsZXhHZXRT
dGF0dXMuaApAQCAtOTUsNyArOTUsNyBAQCBjbGFzcyBDb21wbGV4R2V0U3RhdHVzIHsKICAgICB9
CiAgICAgCiAgICAgc3RhdGljIENvbXBsZXhHZXRTdGF0dXMgY29tcHV0ZUZvcigKLSAgICAgICAg
U3RydWN0dXJlKiBoZWFkU3RydWN0dXJlLCBjb25zdCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNl
dCYsIFVuaXF1ZWRTdHJpbmdJbXBsKiB1aWQpOworICAgICAgICBTdHJ1Y3R1cmUqIGhlYWRTdHJ1
Y3R1cmUsIGNvbnN0IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0JiwgV2F0Y2hwb2ludFNldCog
aW1wdXJlUHJvcGVydHlTZXQsIFVuaXF1ZWRTdHJpbmdJbXBsKiB1aWQpOwogICAgIAogICAgIEtp
bmQga2luZCgpIGNvbnN0IHsgcmV0dXJuIG1fa2luZDsgfQogICAgIFByb3BlcnR5T2Zmc2V0IG9m
ZnNldCgpIGNvbnN0IHsgcmV0dXJuIG1fb2Zmc2V0OyB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvYnl0ZWNvZGUvR2V0QnlJZFN0YXR1cy5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvYnl0ZWNvZGUvR2V0QnlJZFN0YXR1cy5jcHAKaW5kZXggMThjMWM3ZWQyYzNhY2M0M2Ri
ZWViMDBjZWExNmUzYzBmNTgwZjY3OC4uNGNjMjY3MDdiZmRjODQ2YjM5MjM0ZTZhMjc0YWY3NDkx
NjRiMGM5MiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0dldEJ5
SWRTdGF0dXMuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9HZXRCeUlk
U3RhdHVzLmNwcApAQCAtOTQsNiArOTQsNyBAQCBHZXRCeUlkU3RhdHVzIEdldEJ5SWRTdGF0dXM6
OmNvbXB1dGVGcm9tTExJbnQoQ29kZUJsb2NrKiBwcm9maWxlZEJsb2NrLCB1bnNpZ25lZAogCiAg
ICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSB2bS5oZWFwLnN0cnVjdHVyZUlEVGFibGUoKS5nZXQo
c3RydWN0dXJlSUQpOwogCisgICAgLy8gRklYTUU6IFdlIHNob3VsZCBoYXZlIGEgY2hhbmNlIHRv
IG9wdGltaXplIHRoaXMgZm9yIE5ld0ltcHVyZVByb3BlcnR5RmlyZXNXYXRjaHBvaW50cyBjYXNl
LgogICAgIGlmIChzdHJ1Y3R1cmUtPnRha2VzU2xvd1BhdGhJbkRGR0ZvckltcHVyZVByb3BlcnR5
KCkpCiAgICAgICAgIHJldHVybiBHZXRCeUlkU3RhdHVzKE5vSW5mb3JtYXRpb24sIGZhbHNlKTsK
IApAQCAtMTc2LDYgKzE3Nyw3IEBAIEdldEJ5SWRTdGF0dXMgR2V0QnlJZFN0YXR1czo6Y29tcHV0
ZUZvclN0dWJJbmZvV2l0aG91dEV4aXRTaXRlRmVlZGJhY2soCiAgICAgICAgIAogICAgIGNhc2Ug
Q2FjaGVUeXBlOjpHZXRCeUlkU2VsZjogewogICAgICAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9
IHN0dWJJbmZvLT51LmJ5SWRTZWxmLmJhc2VPYmplY3RTdHJ1Y3R1cmUuZ2V0KCk7CisgICAgICAg
IC8vIEZJWE1FOiBXZSBzaG91bGQgaGF2ZSBhIGNoYW5jZSB0byBvcHRpbWl6ZSB0aGlzIGZvciBO
ZXdJbXB1cmVQcm9wZXJ0eUZpcmVzV2F0Y2hwb2ludHMgY2FzZS4KICAgICAgICAgaWYgKHN0cnVj
dHVyZS0+dGFrZXNTbG93UGF0aEluREZHRm9ySW1wdXJlUHJvcGVydHkoKSkKICAgICAgICAgICAg
IHJldHVybiBHZXRCeUlkU3RhdHVzKHNsb3dQYXRoU3RhdGUsIHRydWUpOwogICAgICAgICB1bnNp
Z25lZCBhdHRyaWJ1dGVzOwpAQCAtMjEwLDcgKzIxMiw3IEBAIEdldEJ5SWRTdGF0dXMgR2V0QnlJ
ZFN0YXR1czo6Y29tcHV0ZUZvclN0dWJJbmZvV2l0aG91dEV4aXRTaXRlRmVlZGJhY2soCiAgICAg
ICAgICAgICB9CiAgICAgICAgICAgICAKICAgICAgICAgICAgIENvbXBsZXhHZXRTdGF0dXMgY29t
cGxleEdldFN0YXR1cyA9IENvbXBsZXhHZXRTdGF0dXM6OmNvbXB1dGVGb3IoCi0gICAgICAgICAg
ICAgICAgc3RydWN0dXJlLCBhY2Nlc3MuY29uZGl0aW9uU2V0KCksIHVpZCk7CisgICAgICAgICAg
ICAgICAgc3RydWN0dXJlLCBhY2Nlc3MuY29uZGl0aW9uU2V0KCksIGFjY2Vzcy5pbXB1cmVQcm9w
ZXJ0eVNldCgpLCB1aWQpOwogICAgICAgICAgICAgIAogICAgICAgICAgICAgc3dpdGNoIChjb21w
bGV4R2V0U3RhdHVzLmtpbmQoKSkgewogICAgICAgICAgICAgY2FzZSBDb21wbGV4R2V0U3RhdHVz
OjpTaG91bGRTa2lwOgpAQCAtMjU4LDcgKzI2MCw5IEBAIEdldEJ5SWRTdGF0dXMgR2V0QnlJZFN0
YXR1czo6Y29tcHV0ZUZvclN0dWJJbmZvV2l0aG91dEV4aXRTaXRlRmVlZGJhY2soCiAgICAgICAg
ICAgICAgICAgQVNTRVJUKChBY2Nlc3NDYXNlOjpNaXNzID09IGFjY2Vzcy50eXBlKCkpID09IChh
Y2Nlc3Mub2Zmc2V0KCkgPT0gaW52YWxpZE9mZnNldCkpOwogICAgICAgICAgICAgICAgIEdldEJ5
SWRWYXJpYW50IHZhcmlhbnQoCiAgICAgICAgICAgICAgICAgICAgIFN0cnVjdHVyZVNldChzdHJ1
Y3R1cmUpLCBjb21wbGV4R2V0U3RhdHVzLm9mZnNldCgpLAotICAgICAgICAgICAgICAgICAgICBj
b21wbGV4R2V0U3RhdHVzLmNvbmRpdGlvblNldCgpLCBXVEZNb3ZlKGNhbGxMaW5rU3RhdHVzKSwK
KyAgICAgICAgICAgICAgICAgICAgY29tcGxleEdldFN0YXR1cy5jb25kaXRpb25TZXQoKSwKKyAg
ICAgICAgICAgICAgICAgICAgYWNjZXNzLmltcHVyZVByb3BlcnR5U2V0KCksCisgICAgICAgICAg
ICAgICAgICAgIFdURk1vdmUoY2FsbExpbmtTdGF0dXMpLAogICAgICAgICAgICAgICAgICAgICBp
bnRyaW5zaWNGdW5jdGlvbiwKICAgICAgICAgICAgICAgICAgICAgZG9tSklUKTsKIApAQCAtMzUx
LDYgKzM1NSw5IEBAIEdldEJ5SWRTdGF0dXMgR2V0QnlJZFN0YXR1czo6Y29tcHV0ZUZvcihjb25z
dCBTdHJ1Y3R1cmVTZXQmIHNldCwgVW5pcXVlZFN0cmluZ0ltCiAgICAgICAgIAogICAgICAgICBp
ZiAoIXN0cnVjdHVyZS0+cHJvcGVydHlBY2Nlc3Nlc0FyZUNhY2hlYWJsZSgpKQogICAgICAgICAg
ICAgcmV0dXJuIEdldEJ5SWRTdGF0dXMoVGFrZXNTbG93UGF0aCk7CisgICAgICAgIC8vIEZJWE1F
OiBXZSBzaG91bGQgaGF2ZSBhIGNoYW5jZSB0byBvcHRpbWl6ZSB0aGlzIGZvciBOZXdJbXB1cmVQ
cm9wZXJ0eUZpcmVzV2F0Y2hwb2ludHMgY2FzZS4KKyAgICAgICAgaWYgKHN0cnVjdHVyZS0+dGFr
ZXNTbG93UGF0aEluREZHRm9ySW1wdXJlUHJvcGVydHkoKSkKKyAgICAgICAgICAgIHJldHVybiBH
ZXRCeUlkU3RhdHVzKFRha2VzU2xvd1BhdGgpOwogICAgICAgICAKICAgICAgICAgdW5zaWduZWQg
YXR0cmlidXRlczsKICAgICAgICAgUHJvcGVydHlPZmZzZXQgb2Zmc2V0ID0gc3RydWN0dXJlLT5n
ZXRDb25jdXJyZW50bHkodWlkLCBhdHRyaWJ1dGVzKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ieXRlY29kZS9HZXRCeUlkVmFyaWFudC5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvYnl0ZWNvZGUvR2V0QnlJZFZhcmlhbnQuY3BwCmluZGV4IGQ5NDBiNjJjYWU4YzM2NDMz
OTdlOTcyZTEzM2Q0NzRmN2IzY2I2NGEuLjM2OGFiN2VmYTBjMzZlNGU0ODM5OTQyNmQ2YTYyNmNl
NDc0NWMyNDUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9HZXRC
eUlkVmFyaWFudC5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0dldEJ5
SWRWYXJpYW50LmNwcApAQCAtMzUsMTIgKzM1LDE0IEBAIG5hbWVzcGFjZSBKU0MgewogR2V0QnlJ
ZFZhcmlhbnQ6OkdldEJ5SWRWYXJpYW50KAogICAgIGNvbnN0IFN0cnVjdHVyZVNldCYgc3RydWN0
dXJlU2V0LCBQcm9wZXJ0eU9mZnNldCBvZmZzZXQsCiAgICAgY29uc3QgT2JqZWN0UHJvcGVydHlD
b25kaXRpb25TZXQmIGNvbmRpdGlvblNldCwKKyAgICBXYXRjaHBvaW50U2V0KiBpbXB1cmVQcm9w
ZXJ0eVNldCwKICAgICBzdGQ6OnVuaXF1ZV9wdHI8Q2FsbExpbmtTdGF0dXM+IGNhbGxMaW5rU3Rh
dHVzLAogICAgIEpTRnVuY3Rpb24qIGludHJpbnNpY0Z1bmN0aW9uLAogICAgIERPTUpJVDo6R2V0
dGVyU2V0dGVyKiBkb21KSVQpCiAgICAgOiBtX3N0cnVjdHVyZVNldChzdHJ1Y3R1cmVTZXQpCiAg
ICAgLCBtX2NvbmRpdGlvblNldChjb25kaXRpb25TZXQpCiAgICAgLCBtX29mZnNldChvZmZzZXQp
CisgICAgLCBtX2ltcHVyZVByb3BlcnR5U2V0KGltcHVyZVByb3BlcnR5U2V0KQogICAgICwgbV9j
YWxsTGlua1N0YXR1cyhXVEZNb3ZlKGNhbGxMaW5rU3RhdHVzKSkKICAgICAsIG1faW50cmluc2lj
RnVuY3Rpb24oaW50cmluc2ljRnVuY3Rpb24pCiAgICAgLCBtX2RvbUpJVChkb21KSVQpCkBAIC02
Niw2ICs2OCw3IEBAIEdldEJ5SWRWYXJpYW50JiBHZXRCeUlkVmFyaWFudDo6b3BlcmF0b3I9KGNv
bnN0IEdldEJ5SWRWYXJpYW50JiBvdGhlcikKICAgICBtX3N0cnVjdHVyZVNldCA9IG90aGVyLm1f
c3RydWN0dXJlU2V0OwogICAgIG1fY29uZGl0aW9uU2V0ID0gb3RoZXIubV9jb25kaXRpb25TZXQ7
CiAgICAgbV9vZmZzZXQgPSBvdGhlci5tX29mZnNldDsKKyAgICBtX2ltcHVyZVByb3BlcnR5U2V0
ID0gb3RoZXIubV9pbXB1cmVQcm9wZXJ0eVNldDsKICAgICBtX2ludHJpbnNpY0Z1bmN0aW9uID0g
b3RoZXIubV9pbnRyaW5zaWNGdW5jdGlvbjsKICAgICBtX2RvbUpJVCA9IG90aGVyLm1fZG9tSklU
OwogICAgIGlmIChvdGhlci5tX2NhbGxMaW5rU3RhdHVzKQpAQCAtMTAzLDYgKzEwNiw5IEBAIGJv
b2wgR2V0QnlJZFZhcmlhbnQ6OmF0dGVtcHRUb01lcmdlKGNvbnN0IEdldEJ5SWRWYXJpYW50JiBv
dGhlcikKICAgICBpZiAobV9jYWxsTGlua1N0YXR1cyB8fCBvdGhlci5tX2NhbGxMaW5rU3RhdHVz
KQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKKyAgICBpZiAobV9pbXB1cmVQcm9wZXJ0eVNldCAh
PSBvdGhlci5tX2ltcHVyZVByb3BlcnR5U2V0KQorICAgICAgICByZXR1cm4gZmFsc2U7CisKICAg
ICBpZiAoIWNhbk1lcmdlSW50cmluc2ljU3RydWN0dXJlcyhvdGhlcikpCiAgICAgICAgIHJldHVy
biBmYWxzZTsKIApAQCAtMTQwLDYgKzE0Niw4IEBAIHZvaWQgR2V0QnlJZFZhcmlhbnQ6OmR1bXBJ
bkNvbnRleHQoUHJpbnRTdHJlYW0mIG91dCwgRHVtcENvbnRleHQqIGNvbnRleHQpIGNvbnN0CiAg
ICAgb3V0LnByaW50KAogICAgICAgICAiPCIsIGluQ29udGV4dChzdHJ1Y3R1cmVTZXQoKSwgY29u
dGV4dCksICIsICIsIGluQ29udGV4dChtX2NvbmRpdGlvblNldCwgY29udGV4dCkpOwogICAgIG91
dC5wcmludCgiLCBvZmZzZXQgPSAiLCBvZmZzZXQoKSk7CisgICAgaWYgKG1faW1wdXJlUHJvcGVy
dHlTZXQpCisgICAgICAgIG91dC5wcmludCgiLCBpbXB1cmVQcm9wZXJ0eVNldCA9ICIsIFJhd1Bv
aW50ZXIobV9pbXB1cmVQcm9wZXJ0eVNldC5nZXQoKSkpOwogICAgIGlmIChtX2NhbGxMaW5rU3Rh
dHVzKQogICAgICAgICBvdXQucHJpbnQoIiwgY2FsbCA9ICIsICptX2NhbGxMaW5rU3RhdHVzKTsK
ICAgICBpZiAobV9pbnRyaW5zaWNGdW5jdGlvbikKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ieXRlY29kZS9HZXRCeUlkVmFyaWFudC5oIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2J5dGVjb2RlL0dldEJ5SWRWYXJpYW50LmgKaW5kZXggOGRlZDI0ODY3NWY4NzFkNzkwOGYyMmE1
Njk0MzcyOTc4Yjg5NTNhNS4uNTU5YjY4Y2ZhNDI1N2IzMjQ2ODUwOWQwMGVmOWUwYjQ2ZjA3ZTky
MCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0dldEJ5SWRWYXJp
YW50LmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0dldEJ5SWRWYXJpYW50
LmgKQEAgLTQ1LDYgKzQ1LDcgQEAgY2xhc3MgR2V0QnlJZFZhcmlhbnQgewogICAgIEdldEJ5SWRW
YXJpYW50KAogICAgICAgICBjb25zdCBTdHJ1Y3R1cmVTZXQmIHN0cnVjdHVyZVNldCA9IFN0cnVj
dHVyZVNldCgpLCBQcm9wZXJ0eU9mZnNldCBvZmZzZXQgPSBpbnZhbGlkT2Zmc2V0LAogICAgICAg
ICBjb25zdCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldCYgPSBPYmplY3RQcm9wZXJ0eUNvbmRp
dGlvblNldCgpLAorICAgICAgICBXYXRjaHBvaW50U2V0KiBpbXB1cmVQcm9wZXJ0eVNldCA9IG51
bGxwdHIsCiAgICAgICAgIHN0ZDo6dW5pcXVlX3B0cjxDYWxsTGlua1N0YXR1cz4gPSBudWxscHRy
LAogICAgICAgICBKU0Z1bmN0aW9uKiA9IG51bGxwdHIsCiAgICAgICAgIERPTUpJVDo6R2V0dGVy
U2V0dGVyKiA9IG51bGxwdHIpOwpAQCAtNTgsNiArNTksNyBAQCBjbGFzcyBHZXRCeUlkVmFyaWFu
dCB7CiAgICAgYm9vbCBvcGVyYXRvciEoKSBjb25zdCB7IHJldHVybiAhaXNTZXQoKTsgfQogICAg
IGNvbnN0IFN0cnVjdHVyZVNldCYgc3RydWN0dXJlU2V0KCkgY29uc3QgeyByZXR1cm4gbV9zdHJ1
Y3R1cmVTZXQ7IH0KICAgICBTdHJ1Y3R1cmVTZXQmIHN0cnVjdHVyZVNldCgpIHsgcmV0dXJuIG1f
c3RydWN0dXJlU2V0OyB9CisgICAgV2F0Y2hwb2ludFNldCogaW1wdXJlUHJvcGVydHlTZXQoKSB7
IHJldHVybiBtX2ltcHVyZVByb3BlcnR5U2V0LmdldCgpOyB9CiAKICAgICAvLyBBIG5vbi1lbXB0
eSBjb25kaXRpb24gc2V0IG1lYW5zIHRoYXQgdGhpcyBpcyBhIHByb3RvdHlwZSBsb2FkLgogICAg
IGNvbnN0IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0JiBjb25kaXRpb25TZXQoKSBjb25zdCB7
IHJldHVybiBtX2NvbmRpdGlvblNldDsgfQpAQCAtODMsNiArODUsNyBAQCBjbGFzcyBHZXRCeUlk
VmFyaWFudCB7CiAgICAgU3RydWN0dXJlU2V0IG1fc3RydWN0dXJlU2V0OwogICAgIE9iamVjdFBy
b3BlcnR5Q29uZGl0aW9uU2V0IG1fY29uZGl0aW9uU2V0OwogICAgIFByb3BlcnR5T2Zmc2V0IG1f
b2Zmc2V0OworICAgIFJlZlB0cjxXYXRjaHBvaW50U2V0PiBtX2ltcHVyZVByb3BlcnR5U2V0Owog
ICAgIHN0ZDo6dW5pcXVlX3B0cjxDYWxsTGlua1N0YXR1cz4gbV9jYWxsTGlua1N0YXR1czsKICAg
ICBKU0Z1bmN0aW9uKiBtX2ludHJpbnNpY0Z1bmN0aW9uOwogICAgIERPTUpJVDo6R2V0dGVyU2V0
dGVyKiBtX2RvbUpJVDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29k
ZS9Qb2x5bW9ycGhpY0FjY2Vzcy5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUv
UG9seW1vcnBoaWNBY2Nlc3MuY3BwCmluZGV4IDg5YWQ5YzZmZjMzOWIxZjA4MDZiMjRhNGM3NjRh
OWQ0ZTNmYjkzYzAuLjdjNzVlZDA1NDRhMDc1ZTE4MWUzY2JlMWFlYTQ3YzU4NGNiZDUwYjIgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Qb2x5bW9ycGhpY0FjY2Vz
cy5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1BvbHltb3JwaGljQWNj
ZXNzLmNwcApAQCAtMjEwLDEyICsyMTAsMjEgQEAgdm9pZCBBY2Nlc3NHZW5lcmF0aW9uU3RhdGU6
OmVtaXRFeHBsaWNpdEV4Y2VwdGlvbkhhbmRsZXIoKQogICAgIH0KIH0KIAordm9pZCBBY2Nlc3ND
YXNlOjppbml0aWFsaXplSW1wdXJlUHJvcGVydHlTZXRJZk5lY2Vzc2FyeShWTSYgdm0sIGNvbnN0
IElkZW50aWZpZXImIGlkZW50KQoreworICAgIGlmICgoc3RydWN0dXJlKCkgJiYgc3RydWN0dXJl
KCktPm5lZWRJbXB1cmVQcm9wZXJ0eVdhdGNocG9pbnQoKSkgfHwgbV9jb25kaXRpb25TZXQubmVl
ZEltcHVyZVByb3BlcnR5V2F0Y2hwb2ludCgpKSB7CisgICAgICAgIGlmICghbV9yYXJlRGF0YSkK
KyAgICAgICAgICAgIG1fcmFyZURhdGEgPSBzdGQ6Om1ha2VfdW5pcXVlPFJhcmVEYXRhPigpOwor
ICAgICAgICBtX3JhcmVEYXRhLT5pbXB1cmVQcm9wZXJ0eVNldCA9IHZtLmVuc3VyZVdhdGNocG9p
bnRTZXRGb3JJbXB1cmVQcm9wZXJ0eShpZGVudCk7CisgICAgfQorfQorCiBBY2Nlc3NDYXNlOjpB
Y2Nlc3NDYXNlKCkKIHsKIH0KIAogc3RkOjp1bmlxdWVfcHRyPEFjY2Vzc0Nhc2U+IEFjY2Vzc0Nh
c2U6OnRyeUdldCgKLSAgICBWTSYgdm0sIEpTQ2VsbCogb3duZXIsIEFjY2Vzc1R5cGUgdHlwZSwg
UHJvcGVydHlPZmZzZXQgb2Zmc2V0LCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwKKyAgICBWTSYgdm0s
IEpTQ2VsbCogb3duZXIsIGNvbnN0IElkZW50aWZpZXImIGlkZW50LCBBY2Nlc3NUeXBlIHR5cGUs
IFByb3BlcnR5T2Zmc2V0IG9mZnNldCwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsCiAgICAgY29uc3Qg
T2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQmIGNvbmRpdGlvblNldCwgYm9vbCB2aWFQcm94eSwg
V2F0Y2hwb2ludFNldCogYWRkaXRpb25hbFNldCkKIHsKICAgICBzdGQ6OnVuaXF1ZV9wdHI8QWNj
ZXNzQ2FzZT4gcmVzdWx0KG5ldyBBY2Nlc3NDYXNlKCkpOwpAQCAtMjMxLDExICsyNDAsMTIgQEAg
c3RkOjp1bmlxdWVfcHRyPEFjY2Vzc0Nhc2U+IEFjY2Vzc0Nhc2U6OnRyeUdldCgKICAgICAgICAg
cmVzdWx0LT5tX3JhcmVEYXRhLT5hZGRpdGlvbmFsU2V0ID0gYWRkaXRpb25hbFNldDsKICAgICB9
CiAKKyAgICByZXN1bHQtPmluaXRpYWxpemVJbXB1cmVQcm9wZXJ0eVNldElmTmVjZXNzYXJ5KHZt
LCBpZGVudCk7CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAogc3RkOjp1bmlxdWVfcHRyPEFjY2Vz
c0Nhc2U+IEFjY2Vzc0Nhc2U6OmdldCgKLSAgICBWTSYgdm0sIEpTQ2VsbCogb3duZXIsIEFjY2Vz
c1R5cGUgdHlwZSwgUHJvcGVydHlPZmZzZXQgb2Zmc2V0LCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwK
KyAgICBWTSYgdm0sIEpTQ2VsbCogb3duZXIsIGNvbnN0IElkZW50aWZpZXImIGlkZW50LCBBY2Nl
c3NUeXBlIHR5cGUsIFByb3BlcnR5T2Zmc2V0IG9mZnNldCwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUs
CiAgICAgY29uc3QgT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQmIGNvbmRpdGlvblNldCwgYm9v
bCB2aWFQcm94eSwgV2F0Y2hwb2ludFNldCogYWRkaXRpb25hbFNldCwKICAgICBQcm9wZXJ0eVNs
b3Q6OkdldFZhbHVlRnVuYyBjdXN0b21HZXR0ZXIsIEpTT2JqZWN0KiBjdXN0b21TbG90QmFzZSwg
RE9NSklUOjpHZXR0ZXJTZXR0ZXIqIGRvbUpJVCkKIHsKQEAgLTI1NSwxMCArMjY1LDExIEBAIHN0
ZDo6dW5pcXVlX3B0cjxBY2Nlc3NDYXNlPiBBY2Nlc3NDYXNlOjpnZXQoCiAgICAgICAgIHJlc3Vs
dC0+bV9yYXJlRGF0YS0+ZG9tSklUID0gZG9tSklUOwogICAgIH0KIAorICAgIHJlc3VsdC0+aW5p
dGlhbGl6ZUltcHVyZVByb3BlcnR5U2V0SWZOZWNlc3Nhcnkodm0sIGlkZW50KTsKICAgICByZXR1
cm4gcmVzdWx0OwogfQogCi1zdGQ6OnVuaXF1ZV9wdHI8QWNjZXNzQ2FzZT4gQWNjZXNzQ2FzZTo6
bWVnYW1vcnBoaWNMb2FkKFZNJiB2bSwgSlNDZWxsKiBvd25lcikKK3N0ZDo6dW5pcXVlX3B0cjxB
Y2Nlc3NDYXNlPiBBY2Nlc3NDYXNlOjptZWdhbW9ycGhpY0xvYWQoVk0mIHZtLCBKU0NlbGwqIG93
bmVyLCBjb25zdCBJZGVudGlmaWVyJiBpZGVudCkKIHsKICAgICBVTlVTRURfUEFSQU0odm0pOwog
ICAgIFVOVVNFRF9QQVJBTShvd25lcik7CkBAIC0yNzAsMTEgKzI4MSwxMiBAQCBzdGQ6OnVuaXF1
ZV9wdHI8QWNjZXNzQ2FzZT4gQWNjZXNzQ2FzZTo6bWVnYW1vcnBoaWNMb2FkKFZNJiB2bSwgSlND
ZWxsKiBvd25lcikKICAgICAKICAgICByZXN1bHQtPm1fdHlwZSA9IE1lZ2Ftb3JwaGljTG9hZDsK
ICAgICAKKyAgICByZXN1bHQtPmluaXRpYWxpemVJbXB1cmVQcm9wZXJ0eVNldElmTmVjZXNzYXJ5
KHZtLCBpZGVudCk7CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAogc3RkOjp1bmlxdWVfcHRyPEFj
Y2Vzc0Nhc2U+IEFjY2Vzc0Nhc2U6OnJlcGxhY2UoCi0gICAgVk0mIHZtLCBKU0NlbGwqIG93bmVy
LCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgUHJvcGVydHlPZmZzZXQgb2Zmc2V0KQorICAgIFZNJiB2
bSwgSlNDZWxsKiBvd25lciwgY29uc3QgSWRlbnRpZmllciYgaWRlbnQsIFN0cnVjdHVyZSogc3Ry
dWN0dXJlLCBQcm9wZXJ0eU9mZnNldCBvZmZzZXQpCiB7CiAgICAgc3RkOjp1bmlxdWVfcHRyPEFj
Y2Vzc0Nhc2U+IHJlc3VsdChuZXcgQWNjZXNzQ2FzZSgpKTsKIApAQCAtMjgyLDExICsyOTQsMTIg
QEAgc3RkOjp1bmlxdWVfcHRyPEFjY2Vzc0Nhc2U+IEFjY2Vzc0Nhc2U6OnJlcGxhY2UoCiAgICAg
cmVzdWx0LT5tX29mZnNldCA9IG9mZnNldDsKICAgICByZXN1bHQtPm1fc3RydWN0dXJlLnNldCh2
bSwgb3duZXIsIHN0cnVjdHVyZSk7CiAKKyAgICByZXN1bHQtPmluaXRpYWxpemVJbXB1cmVQcm9w
ZXJ0eVNldElmTmVjZXNzYXJ5KHZtLCBpZGVudCk7CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAog
c3RkOjp1bmlxdWVfcHRyPEFjY2Vzc0Nhc2U+IEFjY2Vzc0Nhc2U6OnRyYW5zaXRpb24oCi0gICAg
Vk0mIHZtLCBKU0NlbGwqIG93bmVyLCBTdHJ1Y3R1cmUqIG9sZFN0cnVjdHVyZSwgU3RydWN0dXJl
KiBuZXdTdHJ1Y3R1cmUsIFByb3BlcnR5T2Zmc2V0IG9mZnNldCwKKyAgICBWTSYgdm0sIEpTQ2Vs
bCogb3duZXIsIGNvbnN0IElkZW50aWZpZXImIGlkZW50LCBTdHJ1Y3R1cmUqIG9sZFN0cnVjdHVy
ZSwgU3RydWN0dXJlKiBuZXdTdHJ1Y3R1cmUsIFByb3BlcnR5T2Zmc2V0IG9mZnNldCwKICAgICBj
b25zdCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldCYgY29uZGl0aW9uU2V0KQogewogICAgIFJF
TEVBU0VfQVNTRVJUKG9sZFN0cnVjdHVyZSA9PSBuZXdTdHJ1Y3R1cmUtPnByZXZpb3VzSUQoKSk7
CkBAIC0zMDYsMTEgKzMxOSwxMiBAQCBzdGQ6OnVuaXF1ZV9wdHI8QWNjZXNzQ2FzZT4gQWNjZXNz
Q2FzZTo6dHJhbnNpdGlvbigKICAgICByZXN1bHQtPm1fc3RydWN0dXJlLnNldCh2bSwgb3duZXIs
IG5ld1N0cnVjdHVyZSk7CiAgICAgcmVzdWx0LT5tX2NvbmRpdGlvblNldCA9IGNvbmRpdGlvblNl
dDsKIAorICAgIHJlc3VsdC0+aW5pdGlhbGl6ZUltcHVyZVByb3BlcnR5U2V0SWZOZWNlc3Nhcnko
dm0sIGlkZW50KTsKICAgICByZXR1cm4gcmVzdWx0OwogfQogCiBzdGQ6OnVuaXF1ZV9wdHI8QWNj
ZXNzQ2FzZT4gQWNjZXNzQ2FzZTo6c2V0dGVyKAotICAgIFZNJiB2bSwgSlNDZWxsKiBvd25lciwg
QWNjZXNzVHlwZSB0eXBlLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgUHJvcGVydHlPZmZzZXQgb2Zm
c2V0LAorICAgIFZNJiB2bSwgSlNDZWxsKiBvd25lciwgY29uc3QgSWRlbnRpZmllciYgaWRlbnQs
IEFjY2Vzc1R5cGUgdHlwZSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIFByb3BlcnR5T2Zmc2V0IG9m
ZnNldCwKICAgICBjb25zdCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldCYgY29uZGl0aW9uU2V0
LCBQdXRQcm9wZXJ0eVNsb3Q6OlB1dFZhbHVlRnVuYyBjdXN0b21TZXR0ZXIsCiAgICAgSlNPYmpl
Y3QqIGN1c3RvbVNsb3RCYXNlKQogewpAQCAtMzI0LDExICszMzgsMTIgQEAgc3RkOjp1bmlxdWVf
cHRyPEFjY2Vzc0Nhc2U+IEFjY2Vzc0Nhc2U6OnNldHRlcigKICAgICByZXN1bHQtPm1fcmFyZURh
dGEtPmN1c3RvbUFjY2Vzc29yLnNldHRlciA9IGN1c3RvbVNldHRlcjsKICAgICByZXN1bHQtPm1f
cmFyZURhdGEtPmN1c3RvbVNsb3RCYXNlLnNldE1heUJlTnVsbCh2bSwgb3duZXIsIGN1c3RvbVNs
b3RCYXNlKTsKIAorICAgIHJlc3VsdC0+aW5pdGlhbGl6ZUltcHVyZVByb3BlcnR5U2V0SWZOZWNl
c3Nhcnkodm0sIGlkZW50KTsKICAgICByZXR1cm4gcmVzdWx0OwogfQogCiBzdGQ6OnVuaXF1ZV9w
dHI8QWNjZXNzQ2FzZT4gQWNjZXNzQ2FzZTo6aW4oCi0gICAgVk0mIHZtLCBKU0NlbGwqIG93bmVy
LCBBY2Nlc3NUeXBlIHR5cGUsIFN0cnVjdHVyZSogc3RydWN0dXJlLAorICAgIFZNJiB2bSwgSlND
ZWxsKiBvd25lciwgY29uc3QgSWRlbnRpZmllciYgaWRlbnQsIEFjY2Vzc1R5cGUgdHlwZSwgU3Ry
dWN0dXJlKiBzdHJ1Y3R1cmUsCiAgICAgY29uc3QgT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQm
IGNvbmRpdGlvblNldCkKIHsKICAgICBzdGQ6OnVuaXF1ZV9wdHI8QWNjZXNzQ2FzZT4gcmVzdWx0
KG5ldyBBY2Nlc3NDYXNlKCkpOwpAQCAtMzM3LDIwICszNTIsMjIgQEAgc3RkOjp1bmlxdWVfcHRy
PEFjY2Vzc0Nhc2U+IEFjY2Vzc0Nhc2U6OmluKAogICAgIHJlc3VsdC0+bV9zdHJ1Y3R1cmUuc2V0
KHZtLCBvd25lciwgc3RydWN0dXJlKTsKICAgICByZXN1bHQtPm1fY29uZGl0aW9uU2V0ID0gY29u
ZGl0aW9uU2V0OwogCisgICAgcmVzdWx0LT5pbml0aWFsaXplSW1wdXJlUHJvcGVydHlTZXRJZk5l
Y2Vzc2FyeSh2bSwgaWRlbnQpOwogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKLXN0ZDo6dW5pcXVl
X3B0cjxBY2Nlc3NDYXNlPiBBY2Nlc3NDYXNlOjpnZXRMZW5ndGgoVk0mLCBKU0NlbGwqLCBBY2Nl
c3NUeXBlIHR5cGUpCitzdGQ6OnVuaXF1ZV9wdHI8QWNjZXNzQ2FzZT4gQWNjZXNzQ2FzZTo6Z2V0
TGVuZ3RoKFZNJiB2bSwgSlNDZWxsKiwgQWNjZXNzVHlwZSB0eXBlKQogewogICAgIHN0ZDo6dW5p
cXVlX3B0cjxBY2Nlc3NDYXNlPiByZXN1bHQobmV3IEFjY2Vzc0Nhc2UoKSk7CiAKICAgICByZXN1
bHQtPm1fdHlwZSA9IHR5cGU7CiAKKyAgICByZXN1bHQtPmluaXRpYWxpemVJbXB1cmVQcm9wZXJ0
eVNldElmTmVjZXNzYXJ5KHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT5sZW5ndGgpOwogICAgIHJldHVy
biByZXN1bHQ7CiB9CiAKIHN0ZDo6dW5pcXVlX3B0cjxBY2Nlc3NDYXNlPiBBY2Nlc3NDYXNlOjpn
ZXRJbnRyaW5zaWMoCi0gICAgVk0mIHZtLCBKU0NlbGwqIG93bmVyLCBKU0Z1bmN0aW9uKiBnZXR0
ZXIsIFByb3BlcnR5T2Zmc2V0IG9mZnNldCwKKyAgICBWTSYgdm0sIEpTQ2VsbCogb3duZXIsIGNv
bnN0IElkZW50aWZpZXImIGlkZW50LCBKU0Z1bmN0aW9uKiBnZXR0ZXIsIFByb3BlcnR5T2Zmc2V0
IG9mZnNldCwKICAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgY29uc3QgT2JqZWN0UHJvcGVydHlD
b25kaXRpb25TZXQmIGNvbmRpdGlvblNldCkKIHsKICAgICBzdGQ6OnVuaXF1ZV9wdHI8QWNjZXNz
Q2FzZT4gcmVzdWx0KG5ldyBBY2Nlc3NDYXNlKCkpOwpAQCAtMzYzLDYgKzM4MCw3IEBAIHN0ZDo6
dW5pcXVlX3B0cjxBY2Nlc3NDYXNlPiBBY2Nlc3NDYXNlOjpnZXRJbnRyaW5zaWMoCiAgICAgcmVz
dWx0LT5tX3JhcmVEYXRhID0gc3RkOjptYWtlX3VuaXF1ZTxSYXJlRGF0YT4oKTsKICAgICByZXN1
bHQtPm1fcmFyZURhdGEtPmludHJpbnNpY0Z1bmN0aW9uLnNldCh2bSwgb3duZXIsIGdldHRlcik7
CiAKKyAgICByZXN1bHQtPmluaXRpYWxpemVJbXB1cmVQcm9wZXJ0eVNldElmTmVjZXNzYXJ5KHZt
LCBpZGVudCk7CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIApAQCAtMzcxLDE3ICszODksMTcgQEAg
QWNjZXNzQ2FzZTo6fkFjY2Vzc0Nhc2UoKQogfQogCiBzdGQ6OnVuaXF1ZV9wdHI8QWNjZXNzQ2Fz
ZT4gQWNjZXNzQ2FzZTo6ZnJvbVN0cnVjdHVyZVN0dWJJbmZvKAotICAgIFZNJiB2bSwgSlNDZWxs
KiBvd25lciwgU3RydWN0dXJlU3R1YkluZm8mIHN0dWJJbmZvKQorICAgIFZNJiB2bSwgSlNDZWxs
KiBvd25lciwgY29uc3QgSWRlbnRpZmllciYgaWRlbnQsIFN0cnVjdHVyZVN0dWJJbmZvJiBzdHVi
SW5mbykKIHsKICAgICBzd2l0Y2ggKHN0dWJJbmZvLmNhY2hlVHlwZSkgewogICAgIGNhc2UgQ2Fj
aGVUeXBlOjpHZXRCeUlkU2VsZjoKICAgICAgICAgcmV0dXJuIGdldCgKLSAgICAgICAgICAgIHZt
LCBvd25lciwgTG9hZCwgc3R1YkluZm8udS5ieUlkU2VsZi5vZmZzZXQsCisgICAgICAgICAgICB2
bSwgb3duZXIsIGlkZW50LCBMb2FkLCBzdHViSW5mby51LmJ5SWRTZWxmLm9mZnNldCwKICAgICAg
ICAgICAgIHN0dWJJbmZvLnUuYnlJZFNlbGYuYmFzZU9iamVjdFN0cnVjdHVyZS5nZXQoKSk7CiAK
ICAgICBjYXNlIENhY2hlVHlwZTo6UHV0QnlJZFJlcGxhY2U6CiAgICAgICAgIHJldHVybiByZXBs
YWNlKAotICAgICAgICAgICAgdm0sIG93bmVyLCBzdHViSW5mby51LmJ5SWRTZWxmLmJhc2VPYmpl
Y3RTdHJ1Y3R1cmUuZ2V0KCksIHN0dWJJbmZvLnUuYnlJZFNlbGYub2Zmc2V0KTsKKyAgICAgICAg
ICAgIHZtLCBvd25lciwgaWRlbnQsIHN0dWJJbmZvLnUuYnlJZFNlbGYuYmFzZU9iamVjdFN0cnVj
dHVyZS5nZXQoKSwgc3R1YkluZm8udS5ieUlkU2VsZi5vZmZzZXQpOwogCiAgICAgZGVmYXVsdDoK
ICAgICAgICAgcmV0dXJuIG51bGxwdHI7CkBAIC0zOTksNiArNDE3LDcgQEAgc3RkOjp1bmlxdWVf
cHRyPEFjY2Vzc0Nhc2U+IEFjY2Vzc0Nhc2U6OmNsb25lKCkgY29uc3QKICAgICAgICAgcmVzdWx0
LT5tX3JhcmVEYXRhID0gc3RkOjptYWtlX3VuaXF1ZTxSYXJlRGF0YT4oKTsKICAgICAgICAgcmVz
dWx0LT5tX3JhcmVEYXRhLT52aWFQcm94eSA9IHJhcmVEYXRhLT52aWFQcm94eTsKICAgICAgICAg
cmVzdWx0LT5tX3JhcmVEYXRhLT5hZGRpdGlvbmFsU2V0ID0gcmFyZURhdGEtPmFkZGl0aW9uYWxT
ZXQ7CisgICAgICAgIHJlc3VsdC0+bV9yYXJlRGF0YS0+aW1wdXJlUHJvcGVydHlTZXQgPSByYXJl
RGF0YS0+aW1wdXJlUHJvcGVydHlTZXQ7CiAgICAgICAgIC8vIE5PVEU6IFdlIGRvbid0IGNvcHkg
dGhlIGNhbGxMaW5rSW5mbywgc2luY2UgdGhhdCdzIGNyZWF0ZWQgZHVyaW5nIGNvZGUgZ2VuZXJh
dGlvbi4KICAgICAgICAgcmVzdWx0LT5tX3JhcmVEYXRhLT5jdXN0b21BY2Nlc3Nvci5vcGFxdWUg
PSByYXJlRGF0YS0+Y3VzdG9tQWNjZXNzb3Iub3BhcXVlOwogICAgICAgICByZXN1bHQtPm1fcmFy
ZURhdGEtPmN1c3RvbVNsb3RCYXNlID0gcmFyZURhdGEtPmN1c3RvbVNsb3RCYXNlOwpAQCAtNDA4
LDcgKzQyNyw3IEBAIHN0ZDo6dW5pcXVlX3B0cjxBY2Nlc3NDYXNlPiBBY2Nlc3NDYXNlOjpjbG9u
ZSgpIGNvbnN0CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAotVmVjdG9yPFdhdGNocG9pbnRTZXQq
LCAyPiBBY2Nlc3NDYXNlOjpjb21taXQoVk0mIHZtLCBjb25zdCBJZGVudGlmaWVyJiBpZGVudCkK
K1ZlY3RvcjxXYXRjaHBvaW50U2V0KiwgMj4gQWNjZXNzQ2FzZTo6Y29tbWl0KFZNJiwgY29uc3Qg
SWRlbnRpZmllciYpCiB7CiAgICAgLy8gSXQncyBmaW5lIHRvIGNvbW1pdCBzb21ldGhpbmcgdGhh
dCBpcyBhbHJlYWR5IGNvbW1pdHRlZC4gVGhhdCBhcmlzZXMgd2hlbiB3ZSBzd2l0Y2ggdG8gdXNp
bmcKICAgICAvLyBuZXdseSBhbGxvY2F0ZWQgd2F0Y2hwb2ludHMuIFdoZW4gaXQgaGFwcGVucywg
aXQncyBub3QgZWZmaWNpZW50IC0gYnV0IHdlIHRoaW5rIHRoYXQncyBPSwpAQCAtNDE3LDkgKzQz
Niw4IEBAIFZlY3RvcjxXYXRjaHBvaW50U2V0KiwgMj4gQWNjZXNzQ2FzZTo6Y29tbWl0KFZNJiB2
bSwgY29uc3QgSWRlbnRpZmllciYgaWRlbnQpCiAgICAgCiAgICAgVmVjdG9yPFdhdGNocG9pbnRT
ZXQqLCAyPiByZXN1bHQ7CiAgICAgCi0gICAgaWYgKChzdHJ1Y3R1cmUoKSAmJiBzdHJ1Y3R1cmUo
KS0+bmVlZEltcHVyZVByb3BlcnR5V2F0Y2hwb2ludCgpKQotICAgICAgICB8fCBtX2NvbmRpdGlv
blNldC5uZWVkSW1wdXJlUHJvcGVydHlXYXRjaHBvaW50KCkpCi0gICAgICAgIHJlc3VsdC5hcHBl
bmQodm0uZW5zdXJlV2F0Y2hwb2ludFNldEZvckltcHVyZVByb3BlcnR5KGlkZW50KSk7CisgICAg
aWYgKGltcHVyZVByb3BlcnR5U2V0KCkpCisgICAgICAgIHJlc3VsdC5hcHBlbmQoaW1wdXJlUHJv
cGVydHlTZXQoKSk7CiAKICAgICBpZiAoYWRkaXRpb25hbFNldCgpKQogICAgICAgICByZXN1bHQu
YXBwZW5kKGFkZGl0aW9uYWxTZXQoKSk7CkBAIC00NzgsNyArNDk2LDEyIEBAIGJvb2wgQWNjZXNz
Q2FzZTo6ZG9lc0NhbGxzKFZlY3RvcjxKU0NlbGwqPiogY2VsbHNUb01hcmspIGNvbnN0CiAKIGJv
b2wgQWNjZXNzQ2FzZTo6Y291bGRTdGlsbFN1Y2NlZWQoKSBjb25zdAogewotICAgIHJldHVybiBt
X2NvbmRpdGlvblNldC5zdHJ1Y3R1cmVzRW5zdXJlVmFsaWRpdHlBc3N1bWluZ0ltcHVyZVByb3Bl
cnR5V2F0Y2hwb2ludCgpOworICAgIGlmICghbV9jb25kaXRpb25TZXQuc3RydWN0dXJlc0Vuc3Vy
ZVZhbGlkaXR5QXNzdW1pbmdJbXB1cmVQcm9wZXJ0eVdhdGNocG9pbnQoKSkKKyAgICAgICAgcmV0
dXJuIGZhbHNlOworICAgIGF1dG8qIGltcHVyZVByb3BlcnR5U2V0ID0gdGhpcy0+aW1wdXJlUHJv
cGVydHlTZXQoKTsKKyAgICBpZiAoaW1wdXJlUHJvcGVydHlTZXQgJiYgaW1wdXJlUHJvcGVydHlT
ZXQtPmhhc0JlZW5JbnZhbGlkYXRlZCgpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgcmV0
dXJuIHRydWU7CiB9CiAKIGJvb2wgQWNjZXNzQ2FzZTo6Y2FuQmVSZXBsYWNlZEJ5TWVnYW1vcnBo
aWNMb2FkKCkgY29uc3QKQEAgLTQ5MCw2ICs1MTMsNyBAQCBib29sIEFjY2Vzc0Nhc2U6OmNhbkJl
UmVwbGFjZWRCeU1lZ2Ftb3JwaGljTG9hZCgpIGNvbnN0CiAgICAgICAgICYmICF2aWFQcm94eSgp
CiAgICAgICAgICYmIGNvbmRpdGlvblNldCgpLmlzRW1wdHkoKQogICAgICAgICAmJiAhYWRkaXRp
b25hbFNldCgpCisgICAgICAgICYmICFpbXB1cmVQcm9wZXJ0eVNldCgpCiAgICAgICAgICYmICFj
dXN0b21TbG90QmFzZSgpOwogfQogCkBAIC0xNzQ5LDcgKzE3NzMsNyBAQCBBY2Nlc3NHZW5lcmF0
aW9uUmVzdWx0IFBvbHltb3JwaGljQWNjZXNzOjpyZWdlbmVyYXRlKAogICAgICAgICB9CiAgICAg
ICAgIAogICAgICAgICBpZiAobnVtU2VsZkxvYWRzID49IE9wdGlvbnM6Om1lZ2Ftb3JwaGljTG9h
ZENvc3QoKSkgewotICAgICAgICAgICAgaWYgKGF1dG8gbWVnYSA9IEFjY2Vzc0Nhc2U6Om1lZ2Ft
b3JwaGljTG9hZCh2bSwgY29kZUJsb2NrKSkgeworICAgICAgICAgICAgaWYgKGF1dG8gbWVnYSA9
IEFjY2Vzc0Nhc2U6Om1lZ2Ftb3JwaGljTG9hZCh2bSwgY29kZUJsb2NrLCBpZGVudCkpIHsKICAg
ICAgICAgICAgICAgICBjYXNlcy5yZW1vdmVBbGxNYXRjaGluZygKICAgICAgICAgICAgICAgICAg
ICAgWyZdIChzdGQ6OnVuaXF1ZV9wdHI8QWNjZXNzQ2FzZT4mIG5ld0Nhc2UpIC0+IGJvb2wgewog
ICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG5ld0Nhc2UtPmNhbkJlUmVwbGFjZWRCeU1l
Z2Ftb3JwaGljTG9hZCgpOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVj
b2RlL1BvbHltb3JwaGljQWNjZXNzLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUv
UG9seW1vcnBoaWNBY2Nlc3MuaAppbmRleCA2ZjcwMWM1ZmFmOWYxYzNjMDc2MGEwMzczZjMxZTY4
N2YzZWExMDZkLi5kMjdiMGM3OTY5NzcwYTFkNGIzZDMyNmM1MjllZTkxNDFlZmU4YTY2IDEwMDY0
NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUG9seW1vcnBoaWNBY2Nlc3Mu
aAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUG9seW1vcnBoaWNBY2Nlc3Mu
aApAQCAtMTIyLDEzICsxMjIsMTMgQEAgY2xhc3MgQWNjZXNzQ2FzZSB7CiAgICAgfTsKIAogICAg
IHN0YXRpYyBzdGQ6OnVuaXF1ZV9wdHI8QWNjZXNzQ2FzZT4gdHJ5R2V0KAotICAgICAgICBWTSYs
IEpTQ2VsbCogb3duZXIsIEFjY2Vzc1R5cGUsIFByb3BlcnR5T2Zmc2V0LCBTdHJ1Y3R1cmUqLAor
ICAgICAgICBWTSYsIEpTQ2VsbCogb3duZXIsIGNvbnN0IElkZW50aWZpZXImLCBBY2Nlc3NUeXBl
LCBQcm9wZXJ0eU9mZnNldCwgU3RydWN0dXJlKiwKICAgICAgICAgY29uc3QgT2JqZWN0UHJvcGVy
dHlDb25kaXRpb25TZXQmID0gT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQoKSwKICAgICAgICAg
Ym9vbCB2aWFQcm94eSA9IGZhbHNlLAogICAgICAgICBXYXRjaHBvaW50U2V0KiBhZGRpdGlvbmFs
U2V0ID0gbnVsbHB0cik7CiAKICAgICBzdGF0aWMgc3RkOjp1bmlxdWVfcHRyPEFjY2Vzc0Nhc2U+
IGdldCgKLSAgICAgICAgVk0mLCBKU0NlbGwqIG93bmVyLCBBY2Nlc3NUeXBlLCBQcm9wZXJ0eU9m
ZnNldCwgU3RydWN0dXJlKiwKKyAgICAgICAgVk0mLCBKU0NlbGwqIG93bmVyLCBjb25zdCBJZGVu
dGlmaWVyJiwgQWNjZXNzVHlwZSwgUHJvcGVydHlPZmZzZXQsIFN0cnVjdHVyZSosCiAgICAgICAg
IGNvbnN0IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0JiA9IE9iamVjdFByb3BlcnR5Q29uZGl0
aW9uU2V0KCksCiAgICAgICAgIGJvb2wgdmlhUHJveHkgPSBmYWxzZSwKICAgICAgICAgV2F0Y2hw
b2ludFNldCogYWRkaXRpb25hbFNldCA9IG51bGxwdHIsCkBAIC0xMzYsMjcgKzEzNiwyOCBAQCBj
bGFzcyBBY2Nlc3NDYXNlIHsKICAgICAgICAgSlNPYmplY3QqIGN1c3RvbVNsb3RCYXNlID0gbnVs
bHB0ciwKICAgICAgICAgRE9NSklUOjpHZXR0ZXJTZXR0ZXIqID0gbnVsbHB0cik7CiAgICAgCi0g
ICAgc3RhdGljIHN0ZDo6dW5pcXVlX3B0cjxBY2Nlc3NDYXNlPiBtZWdhbW9ycGhpY0xvYWQoVk0m
LCBKU0NlbGwqIG93bmVyKTsKKyAgICBzdGF0aWMgc3RkOjp1bmlxdWVfcHRyPEFjY2Vzc0Nhc2U+
IG1lZ2Ftb3JwaGljTG9hZChWTSYsIEpTQ2VsbCogb3duZXIsIGNvbnN0IElkZW50aWZpZXImKTsK
KworICAgIHN0YXRpYyBzdGQ6OnVuaXF1ZV9wdHI8QWNjZXNzQ2FzZT4gZ2V0TGVuZ3RoKFZNJiwg
SlNDZWxsKiBvd25lciwgQWNjZXNzVHlwZSk7CisKKyAgICBzdGF0aWMgc3RkOjp1bmlxdWVfcHRy
PEFjY2Vzc0Nhc2U+IGdldEludHJpbnNpYyhWTSYsIEpTQ2VsbCogb3duZXIsIGNvbnN0IElkZW50
aWZpZXImLCBKU0Z1bmN0aW9uKiBpbnRyaW5zaWMsIFByb3BlcnR5T2Zmc2V0LCBTdHJ1Y3R1cmUq
LCBjb25zdCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldCYpOwogICAgIAotICAgIHN0YXRpYyBz
dGQ6OnVuaXF1ZV9wdHI8QWNjZXNzQ2FzZT4gcmVwbGFjZShWTSYsIEpTQ2VsbCogb3duZXIsIFN0
cnVjdHVyZSosIFByb3BlcnR5T2Zmc2V0KTsKKyAgICBzdGF0aWMgc3RkOjp1bmlxdWVfcHRyPEFj
Y2Vzc0Nhc2U+IHJlcGxhY2UoVk0mLCBKU0NlbGwqIG93bmVyLCBjb25zdCBJZGVudGlmaWVyJiwg
U3RydWN0dXJlKiwgUHJvcGVydHlPZmZzZXQpOwogCiAgICAgc3RhdGljIHN0ZDo6dW5pcXVlX3B0
cjxBY2Nlc3NDYXNlPiB0cmFuc2l0aW9uKAotICAgICAgICBWTSYsIEpTQ2VsbCogb3duZXIsIFN0
cnVjdHVyZSogb2xkU3RydWN0dXJlLCBTdHJ1Y3R1cmUqIG5ld1N0cnVjdHVyZSwgUHJvcGVydHlP
ZmZzZXQsCisgICAgICAgIFZNJiwgSlNDZWxsKiBvd25lciwgY29uc3QgSWRlbnRpZmllciYsIFN0
cnVjdHVyZSogb2xkU3RydWN0dXJlLCBTdHJ1Y3R1cmUqIG5ld1N0cnVjdHVyZSwgUHJvcGVydHlP
ZmZzZXQsCiAgICAgICAgIGNvbnN0IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0JiA9IE9iamVj
dFByb3BlcnR5Q29uZGl0aW9uU2V0KCkpOwogCiAgICAgc3RhdGljIHN0ZDo6dW5pcXVlX3B0cjxB
Y2Nlc3NDYXNlPiBzZXR0ZXIoCi0gICAgICAgIFZNJiwgSlNDZWxsKiBvd25lciwgQWNjZXNzVHlw
ZSwgU3RydWN0dXJlKiwgUHJvcGVydHlPZmZzZXQsCisgICAgICAgIFZNJiwgSlNDZWxsKiBvd25l
ciwgY29uc3QgSWRlbnRpZmllciYsIEFjY2Vzc1R5cGUsIFN0cnVjdHVyZSosIFByb3BlcnR5T2Zm
c2V0LAogICAgICAgICBjb25zdCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldCYsIFB1dFByb3Bl
cnR5U2xvdDo6UHV0VmFsdWVGdW5jID0gbnVsbHB0ciwKICAgICAgICAgSlNPYmplY3QqIGN1c3Rv
bVNsb3RCYXNlID0gbnVsbHB0cik7CiAKICAgICBzdGF0aWMgc3RkOjp1bmlxdWVfcHRyPEFjY2Vz
c0Nhc2U+IGluKAotICAgICAgICBWTSYsIEpTQ2VsbCogb3duZXIsIEFjY2Vzc1R5cGUsIFN0cnVj
dHVyZSosCisgICAgICAgIFZNJiwgSlNDZWxsKiBvd25lciwgY29uc3QgSWRlbnRpZmllciYsIEFj
Y2Vzc1R5cGUsIFN0cnVjdHVyZSosCiAgICAgICAgIGNvbnN0IE9iamVjdFByb3BlcnR5Q29uZGl0
aW9uU2V0JiA9IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0KCkpOwogCi0gICAgc3RhdGljIHN0
ZDo6dW5pcXVlX3B0cjxBY2Nlc3NDYXNlPiBnZXRMZW5ndGgoVk0mLCBKU0NlbGwqIG93bmVyLCBB
Y2Nlc3NUeXBlKTsKLSAgICBzdGF0aWMgc3RkOjp1bmlxdWVfcHRyPEFjY2Vzc0Nhc2U+IGdldElu
dHJpbnNpYyhWTSYsIEpTQ2VsbCogb3duZXIsIEpTRnVuY3Rpb24qIGludHJpbnNpYywgUHJvcGVy
dHlPZmZzZXQsIFN0cnVjdHVyZSosIGNvbnN0IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0Jik7
Ci0gICAgCi0gICAgc3RhdGljIHN0ZDo6dW5pcXVlX3B0cjxBY2Nlc3NDYXNlPiBmcm9tU3RydWN0
dXJlU3R1YkluZm8oVk0mLCBKU0NlbGwqIG93bmVyLCBTdHJ1Y3R1cmVTdHViSW5mbyYpOworICAg
IHN0YXRpYyBzdGQ6OnVuaXF1ZV9wdHI8QWNjZXNzQ2FzZT4gZnJvbVN0cnVjdHVyZVN0dWJJbmZv
KFZNJiwgSlNDZWxsKiBvd25lciwgY29uc3QgSWRlbnRpZmllciYsIFN0cnVjdHVyZVN0dWJJbmZv
Jik7CiAKICAgICB+QWNjZXNzQ2FzZSgpOwogICAgIApAQCAtMjAxLDYgKzIwMiwxMSBAQCBjbGFz
cyBBY2Nlc3NDYXNlIHsKICAgICAgICAgcmV0dXJuIG1fcmFyZURhdGEgPyBtX3JhcmVEYXRhLT5h
ZGRpdGlvbmFsU2V0LmdldCgpIDogbnVsbHB0cjsKICAgICB9CiAKKyAgICBXYXRjaHBvaW50U2V0
KiBpbXB1cmVQcm9wZXJ0eVNldCgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gbV9yYXJl
RGF0YSA/IG1fcmFyZURhdGEtPmltcHVyZVByb3BlcnR5U2V0LmdldCgpIDogbnVsbHB0cjsKKyAg
ICB9CisKICAgICBKU09iamVjdCogY3VzdG9tU2xvdEJhc2UoKSBjb25zdAogICAgIHsKICAgICAg
ICAgcmV0dXJuIG1fcmFyZURhdGEgPyBtX3JhcmVEYXRhLT5jdXN0b21TbG90QmFzZS5nZXQoKSA6
IG51bGxwdHI7CkBAIC0yNzgsNiArMjg0LDggQEAgY2xhc3MgQWNjZXNzQ2FzZSB7CiAgICAgdm9p
ZCBnZW5lcmF0ZUltcGwoQWNjZXNzR2VuZXJhdGlvblN0YXRlJik7CiAgICAgdm9pZCBlbWl0SW50
cmluc2ljR2V0dGVyKEFjY2Vzc0dlbmVyYXRpb25TdGF0ZSYpOwogICAgIHZvaWQgZW1pdERPTUpJ
VEdldHRlcihBY2Nlc3NHZW5lcmF0aW9uU3RhdGUmLCBHUFJSZWcgYmFzZUZvckdldEdQUik7CisK
KyAgICB2b2lkIGluaXRpYWxpemVJbXB1cmVQcm9wZXJ0eVNldElmTmVjZXNzYXJ5KFZNJiwgY29u
c3QgSWRlbnRpZmllciYpOwogICAgIAogICAgIEFjY2Vzc1R5cGUgbV90eXBlIHsgTG9hZCB9Owog
ICAgIFN0YXRlIG1fc3RhdGUgeyBQcmltb3JkaWFsIH07CkBAIC0zMDIsNiArMzEwLDcgQEAgY2xh
c3MgQWNjZXNzQ2FzZSB7CiAgICAgICAgIAogICAgICAgICBib29sIHZpYVByb3h5OwogICAgICAg
ICBSZWZQdHI8V2F0Y2hwb2ludFNldD4gYWRkaXRpb25hbFNldDsKKyAgICAgICAgUmVmUHRyPFdh
dGNocG9pbnRTZXQ+IGltcHVyZVByb3BlcnR5U2V0OwogICAgICAgICAvLyBGSVhNRTogVGhpcyBz
aG91bGQgcHJvYmFibHkgbGl2ZSBpbiB0aGUgc3R1YiByb3V0aW5lIG9iamVjdC4KICAgICAgICAg
Ly8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE1NjQ1NgogICAgICAg
ICBzdGQ6OnVuaXF1ZV9wdHI8Q2FsbExpbmtJbmZvPiBjYWxsTGlua0luZm87CmRpZmYgLS1naXQg
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUHV0QnlJZFN0YXR1cy5jcHAgYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUHV0QnlJZFN0YXR1cy5jcHAKaW5kZXggNDNmZWVm
NWE1YjllNmYwZjFhNjkzZDExM2Q1MjQ5MmZkYWQ5NDQ3YS4uZmUzY2E4MWQyNjQzYzYxODE5N2Nh
ZmYxYzg1OWM4NjhlZDc2Y2Y4MyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5
dGVjb2RlL1B1dEJ5SWRTdGF0dXMuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRl
Y29kZS9QdXRCeUlkU3RhdHVzLmNwcApAQCAtMjE1LDcgKzIxNSw3IEBAIFB1dEJ5SWRTdGF0dXMg
UHV0QnlJZFN0YXR1czo6Y29tcHV0ZUZvclN0dWJJbmZvKAogICAgICAgICAgICAgICAgIFN0cnVj
dHVyZSogc3RydWN0dXJlID0gYWNjZXNzLnN0cnVjdHVyZSgpOwogICAgICAgICAgICAgICAgIAog
ICAgICAgICAgICAgICAgIENvbXBsZXhHZXRTdGF0dXMgY29tcGxleEdldFN0YXR1cyA9IENvbXBs
ZXhHZXRTdGF0dXM6OmNvbXB1dGVGb3IoCi0gICAgICAgICAgICAgICAgICAgIHN0cnVjdHVyZSwg
YWNjZXNzLmNvbmRpdGlvblNldCgpLCB1aWQpOworICAgICAgICAgICAgICAgICAgICBzdHJ1Y3R1
cmUsIGFjY2Vzcy5jb25kaXRpb25TZXQoKSwgbnVsbHB0ciwgdWlkKTsKICAgICAgICAgICAgICAg
ICAKICAgICAgICAgICAgICAgICBzd2l0Y2ggKGNvbXBsZXhHZXRTdGF0dXMua2luZCgpKSB7CiAg
ICAgICAgICAgICAgICAgY2FzZSBDb21wbGV4R2V0U3RhdHVzOjpTaG91bGRTa2lwOgpkaWZmIC0t
Z2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1N0cnVjdHVyZVN0dWJJbmZvLmNw
cCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9TdHJ1Y3R1cmVTdHViSW5mby5jcHAK
aW5kZXggMzhlNWNlZjkyMzdhMDg2YjZiNDYxZmZkZjM5ZjlhZDQ0Y2VlN2I2NS4uNzJiYzhhYzBk
ZjM0ZTMzZTU1YzQ3YTNlOTQxNWM2OGE3ZTlmOTAzZiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2J5dGVjb2RlL1N0cnVjdHVyZVN0dWJJbmZvLmNwcAorKysgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvYnl0ZWNvZGUvU3RydWN0dXJlU3R1YkluZm8uY3BwCkBAIC0xNDUsNyArMTQ1
LDcgQEAgQWNjZXNzR2VuZXJhdGlvblJlc3VsdCBTdHJ1Y3R1cmVTdHViSW5mbzo6YWRkQWNjZXNz
Q2FzZSgKICAgICAgICAgVmVjdG9yPHN0ZDo6dW5pcXVlX3B0cjxBY2Nlc3NDYXNlPiwgMj4gYWNj
ZXNzQ2FzZXM7CiAgICAgICAgIAogICAgICAgICBzdGQ6OnVuaXF1ZV9wdHI8QWNjZXNzQ2FzZT4g
cHJldmlvdXNDYXNlID0KLSAgICAgICAgICAgIEFjY2Vzc0Nhc2U6OmZyb21TdHJ1Y3R1cmVTdHVi
SW5mbyh2bSwgY29kZUJsb2NrLCAqdGhpcyk7CisgICAgICAgICAgICBBY2Nlc3NDYXNlOjpmcm9t
U3RydWN0dXJlU3R1YkluZm8odm0sIGNvZGVCbG9jaywgaWRlbnQsICp0aGlzKTsKICAgICAgICAg
aWYgKHByZXZpb3VzQ2FzZSkKICAgICAgICAgICAgIGFjY2Vzc0Nhc2VzLmFwcGVuZChXVEZNb3Zl
KHByZXZpb3VzQ2FzZSkpOwogICAgICAgICAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9qaXQvUmVwYXRjaC5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1JlcGF0Y2gu
Y3BwCmluZGV4IGJhYTViN2QyMjZhZDllZWJhMTQwOTNjNjQxZmE2YjNhMmE4YjBhZmIuLmQ5MzQw
ODIxNjEwYmY4OWRkMmYwZTY1ODRlNmM2Yzc5MWE2MGRjNjYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9qaXQvUmVwYXRjaC5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2ppdC9SZXBhdGNoLmNwcApAQCAtMjc4LDkgKzI3OCw5IEBAIHN0YXRpYyBJbmxpbmVDYWNoZUFj
dGlvbiB0cnlDYWNoZUdldEJ5SUQoRXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVlIGJhc2VWYWx1ZSwg
Y29uCiAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9U
X1JFQUNIRUQoKTsKIAotICAgICAgICAgICAgbmV3Q2FzZSA9IEFjY2Vzc0Nhc2U6OnRyeUdldCh2
bSwgY29kZUJsb2NrLCB0eXBlLCBvZmZzZXQsIHN0cnVjdHVyZSwgY29uZGl0aW9uU2V0LCBsb2Fk
VGFyZ2V0RnJvbVByb3h5LCBzbG90LndhdGNocG9pbnRTZXQoKSk7CisgICAgICAgICAgICBuZXdD
YXNlID0gQWNjZXNzQ2FzZTo6dHJ5R2V0KHZtLCBjb2RlQmxvY2ssIHByb3BlcnR5TmFtZSwgdHlw
ZSwgb2Zmc2V0LCBzdHJ1Y3R1cmUsIGNvbmRpdGlvblNldCwgbG9hZFRhcmdldEZyb21Qcm94eSwg
c2xvdC53YXRjaHBvaW50U2V0KCkpOwogICAgICAgICB9IGVsc2UgaWYgKCFsb2FkVGFyZ2V0RnJv
bVByb3h5ICYmIGdldHRlciAmJiBBY2Nlc3NDYXNlOjpjYW5FbWl0SW50cmluc2ljR2V0dGVyKGdl
dHRlciwgc3RydWN0dXJlKSkKLSAgICAgICAgICAgIG5ld0Nhc2UgPSBBY2Nlc3NDYXNlOjpnZXRJ
bnRyaW5zaWModm0sIGNvZGVCbG9jaywgZ2V0dGVyLCBzbG90LmNhY2hlZE9mZnNldCgpLCBzdHJ1
Y3R1cmUsIGNvbmRpdGlvblNldCk7CisgICAgICAgICAgICBuZXdDYXNlID0gQWNjZXNzQ2FzZTo6
Z2V0SW50cmluc2ljKHZtLCBjb2RlQmxvY2ssIHByb3BlcnR5TmFtZSwgZ2V0dGVyLCBzbG90LmNh
Y2hlZE9mZnNldCgpLCBzdHJ1Y3R1cmUsIGNvbmRpdGlvblNldCk7CiAgICAgICAgIGVsc2Ugewog
ICAgICAgICAgICAgQWNjZXNzQ2FzZTo6QWNjZXNzVHlwZSB0eXBlOwogICAgICAgICAgICAgaWYg
KHNsb3QuaXNDYWNoZWFibGVWYWx1ZSgpKQpAQCAtMjk1LDcgKzI5NSw3IEBAIHN0YXRpYyBJbmxp
bmVDYWNoZUFjdGlvbiB0cnlDYWNoZUdldEJ5SUQoRXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVlIGJh
c2VWYWx1ZSwgY29uCiAgICAgICAgICAgICAgICAgdHlwZSA9IEFjY2Vzc0Nhc2U6OkN1c3RvbVZh
bHVlR2V0dGVyOwogCiAgICAgICAgICAgICBuZXdDYXNlID0gQWNjZXNzQ2FzZTo6Z2V0KAotICAg
ICAgICAgICAgICAgIHZtLCBjb2RlQmxvY2ssIHR5cGUsIG9mZnNldCwgc3RydWN0dXJlLCBjb25k
aXRpb25TZXQsIGxvYWRUYXJnZXRGcm9tUHJveHksCisgICAgICAgICAgICAgICAgdm0sIGNvZGVC
bG9jaywgcHJvcGVydHlOYW1lLCB0eXBlLCBvZmZzZXQsIHN0cnVjdHVyZSwgY29uZGl0aW9uU2V0
LCBsb2FkVGFyZ2V0RnJvbVByb3h5LAogICAgICAgICAgICAgICAgIHNsb3Qud2F0Y2hwb2ludFNl
dCgpLCBzbG90LmlzQ2FjaGVhYmxlQ3VzdG9tKCkgPyBzbG90LmN1c3RvbUdldHRlcigpIDogbnVs
bHB0ciwKICAgICAgICAgICAgICAgICBzbG90LmlzQ2FjaGVhYmxlQ3VzdG9tKCkgPyBzbG90LnNs
b3RCYXNlKCkgOiBudWxscHRyLAogICAgICAgICAgICAgICAgIGRvbUpJVCk7CkBAIC0zODYsNyAr
Mzg2LDcgQEAgc3RhdGljIElubGluZUNhY2hlQWN0aW9uIHRyeUNhY2hlUHV0QnlJRChFeGVjU3Rh
dGUqIGV4ZWMsIEpTVmFsdWUgYmFzZVZhbHVlLCBTdHIKICAgICAgICAgICAgICAgICB9CiAgICAg
ICAgICAgICB9CiAKLSAgICAgICAgICAgIG5ld0Nhc2UgPSBBY2Nlc3NDYXNlOjpyZXBsYWNlKHZt
LCBjb2RlQmxvY2ssIHN0cnVjdHVyZSwgc2xvdC5jYWNoZWRPZmZzZXQoKSk7CisgICAgICAgICAg
ICBuZXdDYXNlID0gQWNjZXNzQ2FzZTo6cmVwbGFjZSh2bSwgY29kZUJsb2NrLCBpZGVudCwgc3Ry
dWN0dXJlLCBzbG90LmNhY2hlZE9mZnNldCgpKTsKICAgICAgICAgfSBlbHNlIHsKICAgICAgICAg
ICAgIEFTU0VSVChzbG90LnR5cGUoKSA9PSBQdXRQcm9wZXJ0eVNsb3Q6Ok5ld1Byb3BlcnR5KTsK
IApAQCAtNDE5LDcgKzQxOSw3IEBAIHN0YXRpYyBJbmxpbmVDYWNoZUFjdGlvbiB0cnlDYWNoZVB1
dEJ5SUQoRXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVlIGJhc2VWYWx1ZSwgU3RyCiAgICAgICAgICAg
ICAgICAgICAgIHJldHVybiBHaXZlVXBPbkNhY2hlOwogICAgICAgICAgICAgfQogCi0gICAgICAg
ICAgICBuZXdDYXNlID0gQWNjZXNzQ2FzZTo6dHJhbnNpdGlvbih2bSwgY29kZUJsb2NrLCBzdHJ1
Y3R1cmUsIG5ld1N0cnVjdHVyZSwgb2Zmc2V0LCBjb25kaXRpb25TZXQpOworICAgICAgICAgICAg
bmV3Q2FzZSA9IEFjY2Vzc0Nhc2U6OnRyYW5zaXRpb24odm0sIGNvZGVCbG9jaywgaWRlbnQsIHN0
cnVjdHVyZSwgbmV3U3RydWN0dXJlLCBvZmZzZXQsIGNvbmRpdGlvblNldCk7CiAgICAgICAgIH0K
ICAgICB9IGVsc2UgaWYgKHNsb3QuaXNDYWNoZWFibGVDdXN0b20oKSB8fCBzbG90LmlzQ2FjaGVh
YmxlU2V0dGVyKCkpIHsKICAgICAgICAgaWYgKHNsb3QuaXNDYWNoZWFibGVDdXN0b20oKSkgewpA
QCAtNDM0LDcgKzQzNCw3IEBAIHN0YXRpYyBJbmxpbmVDYWNoZUFjdGlvbiB0cnlDYWNoZVB1dEJ5
SUQoRXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVlIGJhc2VWYWx1ZSwgU3RyCiAgICAgICAgICAgICB9
CiAKICAgICAgICAgICAgIG5ld0Nhc2UgPSBBY2Nlc3NDYXNlOjpzZXR0ZXIoCi0gICAgICAgICAg
ICAgICAgdm0sIGNvZGVCbG9jaywgc2xvdC5pc0N1c3RvbUFjY2Vzc29yKCkgPyBBY2Nlc3NDYXNl
OjpDdXN0b21BY2Nlc3NvclNldHRlciA6IEFjY2Vzc0Nhc2U6OkN1c3RvbVZhbHVlU2V0dGVyLCBz
dHJ1Y3R1cmUsIGludmFsaWRPZmZzZXQsIGNvbmRpdGlvblNldCwKKyAgICAgICAgICAgICAgICB2
bSwgY29kZUJsb2NrLCBpZGVudCwgc2xvdC5pc0N1c3RvbUFjY2Vzc29yKCkgPyBBY2Nlc3NDYXNl
OjpDdXN0b21BY2Nlc3NvclNldHRlciA6IEFjY2Vzc0Nhc2U6OkN1c3RvbVZhbHVlU2V0dGVyLCBz
dHJ1Y3R1cmUsIGludmFsaWRPZmZzZXQsIGNvbmRpdGlvblNldCwKICAgICAgICAgICAgICAgICBz
bG90LmN1c3RvbVNldHRlcigpLCBzbG90LmJhc2UoKSk7CiAgICAgICAgIH0gZWxzZSB7CiAgICAg
ICAgICAgICBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldCBjb25kaXRpb25TZXQ7CkBAIC00NTEs
NyArNDUxLDcgQEAgc3RhdGljIElubGluZUNhY2hlQWN0aW9uIHRyeUNhY2hlUHV0QnlJRChFeGVj
U3RhdGUqIGV4ZWMsIEpTVmFsdWUgYmFzZVZhbHVlLCBTdHIKICAgICAgICAgICAgICAgICBvZmZz
ZXQgPSBzbG90LmNhY2hlZE9mZnNldCgpOwogCiAgICAgICAgICAgICBuZXdDYXNlID0gQWNjZXNz
Q2FzZTo6c2V0dGVyKAotICAgICAgICAgICAgICAgIHZtLCBjb2RlQmxvY2ssIEFjY2Vzc0Nhc2U6
OlNldHRlciwgc3RydWN0dXJlLCBvZmZzZXQsIGNvbmRpdGlvblNldCk7CisgICAgICAgICAgICAg
ICAgdm0sIGNvZGVCbG9jaywgaWRlbnQsIEFjY2Vzc0Nhc2U6OlNldHRlciwgc3RydWN0dXJlLCBv
ZmZzZXQsIGNvbmRpdGlvblNldCk7CiAgICAgICAgIH0KICAgICB9CiAKQEAgLTUxNCw3ICs1MTQs
NyBAQCBzdGF0aWMgSW5saW5lQ2FjaGVBY3Rpb24gdHJ5UmVwYXRjaEluKAogICAgIExPR19JQygo
SUNFdmVudDo6SW5BZGRBY2Nlc3NDYXNlLCBzdHJ1Y3R1cmUtPmNsYXNzSW5mbygpLCBpZGVudCkp
OwogCiAgICAgc3RkOjp1bmlxdWVfcHRyPEFjY2Vzc0Nhc2U+IG5ld0Nhc2UgPSBBY2Nlc3NDYXNl
OjppbigKLSAgICAgICAgdm0sIGNvZGVCbG9jaywgd2FzRm91bmQgPyBBY2Nlc3NDYXNlOjpJbkhp
dCA6IEFjY2Vzc0Nhc2U6OkluTWlzcywgc3RydWN0dXJlLCBjb25kaXRpb25TZXQpOworICAgICAg
ICB2bSwgY29kZUJsb2NrLCBpZGVudCwgd2FzRm91bmQgPyBBY2Nlc3NDYXNlOjpJbkhpdCA6IEFj
Y2Vzc0Nhc2U6OkluTWlzcywgc3RydWN0dXJlLCBjb25kaXRpb25TZXQpOwogCiAgICAgQWNjZXNz
R2VuZXJhdGlvblJlc3VsdCByZXN1bHQgPSBzdHViSW5mby5hZGRBY2Nlc3NDYXNlKGNvZGVCbG9j
aywgaWRlbnQsIFdURk1vdmUobmV3Q2FzZSkpOwogICAgIApkaWZmIC0tZ2l0IGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvVk0uY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvVk0uY3BwCmluZGV4IDdhMmYwZjI2OTRhYzAxNmJkOTNkMWM4NmE0YWY5OWVkMWU1ZWVlZjYu
LjEzMDVmNDIyMTJkZTI5YmY4Y2FkOWJkMThkNTA0YzBiYjk1YmY0ZTIgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9WTS5jcHAKQEAgLTc2MywxMSArNzYzLDYgQEAgV2F0Y2hwb2ludFNldCog
Vk06OmVuc3VyZVdhdGNocG9pbnRTZXRGb3JJbXB1cmVQcm9wZXJ0eShjb25zdCBJZGVudGlmaWVy
JiBwcm9wZXIKICAgICByZXR1cm4gcmVzdWx0Lml0ZXJhdG9yLT52YWx1ZS5nZXQoKTsKIH0KIAot
dm9pZCBWTTo6cmVnaXN0ZXJXYXRjaHBvaW50Rm9ySW1wdXJlUHJvcGVydHkoY29uc3QgSWRlbnRp
ZmllciYgcHJvcGVydHlOYW1lLCBXYXRjaHBvaW50KiB3YXRjaHBvaW50KQotewotICAgIGVuc3Vy
ZVdhdGNocG9pbnRTZXRGb3JJbXB1cmVQcm9wZXJ0eShwcm9wZXJ0eU5hbWUpLT5hZGQod2F0Y2hw
b2ludCk7Ci19Ci0KIHZvaWQgVk06OmFkZEltcHVyZVByb3BlcnR5KGNvbnN0IFN0cmluZyYgcHJv
cGVydHlOYW1lKQogewogICAgIGlmIChSZWZQdHI8V2F0Y2hwb2ludFNldD4gd2F0Y2hwb2ludFNl
dCA9IG1faW1wdXJlUHJvcGVydHlXYXRjaHBvaW50U2V0cy50YWtlKHByb3BlcnR5TmFtZSkpCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9WTS5oIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvVk0uaAppbmRleCBlMTRiODg1ZmQ0NDgzMGZlZmNmMDk3M2I0
MTk5MGZlNTg1MDU0MmQ0Li40ZjViNTQxMTk5ZjVhNTI0OWE2MWExMDMxNzNmZDY1MWNlYjUxNTRj
IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9WTS5oCisrKyBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNLmgKQEAgLTU5Nyw3ICs1OTcsNiBAQCBjbGFz
cyBWTSA6IHB1YmxpYyBUaHJlYWRTYWZlUmVmQ291bnRlZDxWTT4gewogICAgIEpTX0VYUE9SVF9Q
UklWQVRFIHZvaWQgZGVsZXRlQWxsTGlua2VkQ29kZSgpOwogCiAgICAgV2F0Y2hwb2ludFNldCog
ZW5zdXJlV2F0Y2hwb2ludFNldEZvckltcHVyZVByb3BlcnR5KGNvbnN0IElkZW50aWZpZXImKTsK
LSAgICB2b2lkIHJlZ2lzdGVyV2F0Y2hwb2ludEZvckltcHVyZVByb3BlcnR5KGNvbnN0IElkZW50
aWZpZXImLCBXYXRjaHBvaW50Kik7CiAgICAgCiAgICAgLy8gRklYTUU6IFVzZSBBdG9taWNTdHJp
bmcgb25jZSBpdCBnb3QgbWVyZ2VkIHdpdGggSWRlbnRpZmllci4KICAgICBKU19FWFBPUlRfUFJJ
VkFURSB2b2lkIGFkZEltcHVyZVByb3BlcnR5KGNvbnN0IFN0cmluZyYpOwo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>294924</attachid>
            <date>2016-11-15 21:47:22 -0800</date>
            <delta_ts>2016-11-15 21:47:22 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-164175-20161115214719.patch</filename>
            <type>text/plain</type>
            <size>37124</size>
            <attacher name="Yusuke Suzuki">ysuzuki</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjA4NzU2CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCBm
MWY3OWYxYjI1NzY0YTRiYWQ5OGMwYjVkZDIzN2E1ODlmMTFhYmZkLi5mZDg4MzdjNDEzY2Y3M2Qz
MzY5ZmFlNjEwMzgzYWRhZDdiOWQ0MDJjIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSw1OCBAQAorMjAxNi0xMS0xNSAgWXVzdWtlIFN1enVraSAgPHV0YXRhbmUudGVhQGdtYWls
LmNvbT4KKworICAgICAgICBbRE9NSklUXVtKU0NdIEFsbG93IERGRyBHZXRCeUlkIG9wdGltaXph
dGlvbiBmb3IgaW1wdXJlIG9iamVjdHMgd2l0aCBOZXdJbXB1cmVQcm9wZXJ0eUZpcmVzV2F0Y2hw
b2ludHMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE2
NDE3NQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICog
Ynl0ZWNvZGUvQ29tcGxleEdldFN0YXR1cy5jcHA6CisgICAgICAgIChKU0M6OkNvbXBsZXhHZXRT
dGF0dXM6OmNvbXB1dGVGb3IpOgorICAgICAgICAqIGJ5dGVjb2RlL0NvbXBsZXhHZXRTdGF0dXMu
aDoKKyAgICAgICAgKiBieXRlY29kZS9HZXRCeUlkU3RhdHVzLmNwcDoKKyAgICAgICAgKEpTQzo6
R2V0QnlJZFN0YXR1czo6Y29tcHV0ZUZyb21MTEludCk6CisgICAgICAgIChKU0M6OkdldEJ5SWRT
dGF0dXM6OmNvbXB1dGVGb3JTdHViSW5mb1dpdGhvdXRFeGl0U2l0ZUZlZWRiYWNrKToKKyAgICAg
ICAgKEpTQzo6R2V0QnlJZFN0YXR1czo6Y29tcHV0ZUZvcik6CisgICAgICAgICogYnl0ZWNvZGUv
R2V0QnlJZFZhcmlhbnQuY3BwOgorICAgICAgICAoSlNDOjpHZXRCeUlkVmFyaWFudDo6R2V0QnlJ
ZFZhcmlhbnQpOgorICAgICAgICAoSlNDOjpHZXRCeUlkVmFyaWFudDo6b3BlcmF0b3I9KToKKyAg
ICAgICAgKEpTQzo6R2V0QnlJZFZhcmlhbnQ6OmF0dGVtcHRUb01lcmdlKToKKyAgICAgICAgKEpT
Qzo6R2V0QnlJZFZhcmlhbnQ6OmR1bXBJbkNvbnRleHQpOgorICAgICAgICAqIGJ5dGVjb2RlL0dl
dEJ5SWRWYXJpYW50Lmg6CisgICAgICAgIChKU0M6OkdldEJ5SWRWYXJpYW50OjpleHRyYVdhdGNo
cG9pbnRzKToKKyAgICAgICAgKiBieXRlY29kZS9Qb2x5bW9ycGhpY0FjY2Vzcy5jcHA6CisgICAg
ICAgIChKU0M6OkFjY2Vzc0Nhc2U6OmluaXRpYWxpemVJbXB1cmVQcm9wZXJ0eVNldElmTmVjZXNz
YXJ5KToKKyAgICAgICAgKEpTQzo6QWNjZXNzQ2FzZTo6YWRkRXh0cmFXYXRjaHBvaW50U2V0KToK
KyAgICAgICAgKEpTQzo6QWNjZXNzQ2FzZTo6dHJ5R2V0KToKKyAgICAgICAgKEpTQzo6QWNjZXNz
Q2FzZTo6Z2V0KToKKyAgICAgICAgKEpTQzo6QWNjZXNzQ2FzZTo6bWVnYW1vcnBoaWNMb2FkKToK
KyAgICAgICAgKEpTQzo6QWNjZXNzQ2FzZTo6cmVwbGFjZSk6CisgICAgICAgIChKU0M6OkFjY2Vz
c0Nhc2U6OnRyYW5zaXRpb24pOgorICAgICAgICAoSlNDOjpBY2Nlc3NDYXNlOjpzZXR0ZXIpOgor
ICAgICAgICAoSlNDOjpBY2Nlc3NDYXNlOjppbik6CisgICAgICAgIChKU0M6OkFjY2Vzc0Nhc2U6
OmdldExlbmd0aCk6CisgICAgICAgIChKU0M6OkFjY2Vzc0Nhc2U6OmdldEludHJpbnNpYyk6Cisg
ICAgICAgIChKU0M6OkFjY2Vzc0Nhc2U6OmZyb21TdHJ1Y3R1cmVTdHViSW5mbyk6CisgICAgICAg
IChKU0M6OkFjY2Vzc0Nhc2U6OmNsb25lKToKKyAgICAgICAgKEpTQzo6QWNjZXNzQ2FzZTo6Y29t
bWl0KToKKyAgICAgICAgKEpTQzo6QWNjZXNzQ2FzZTo6Y291bGRTdGlsbFN1Y2NlZWQpOgorICAg
ICAgICAoSlNDOjpBY2Nlc3NDYXNlOjpjYW5CZVJlcGxhY2VkQnlNZWdhbW9ycGhpY0xvYWQpOgor
ICAgICAgICAoSlNDOjpBY2Nlc3NDYXNlOjpkdW1wKToKKyAgICAgICAgKEpTQzo6UG9seW1vcnBo
aWNBY2Nlc3M6OnJlZ2VuZXJhdGUpOgorICAgICAgICAqIGJ5dGVjb2RlL1BvbHltb3JwaGljQWNj
ZXNzLmg6CisgICAgICAgIChKU0M6OkFjY2Vzc0Nhc2U6OmV4dHJhV2F0Y2hwb2ludHMpOgorICAg
ICAgICAoSlNDOjpBY2Nlc3NDYXNlOjphZGRpdGlvbmFsU2V0KTogRGVsZXRlZC4KKyAgICAgICAg
KiBieXRlY29kZS9QdXRCeUlkU3RhdHVzLmNwcDoKKyAgICAgICAgKEpTQzo6UHV0QnlJZFN0YXR1
czo6Y29tcHV0ZUZvclN0dWJJbmZvKToKKyAgICAgICAgKiBieXRlY29kZS9TdHJ1Y3R1cmVTdHVi
SW5mby5jcHA6CisgICAgICAgIChKU0M6OlN0cnVjdHVyZVN0dWJJbmZvOjphZGRBY2Nlc3NDYXNl
KToKKyAgICAgICAgKiBqaXQvUmVwYXRjaC5jcHA6CisgICAgICAgIChKU0M6OnRyeUNhY2hlR2V0
QnlJRCk6CisgICAgICAgIChKU0M6OnRyeUNhY2hlUHV0QnlJRCk6CisgICAgICAgIChKU0M6OnRy
eVJlcGF0Y2hJbik6CisgICAgICAgICogcnVudGltZS9WTS5jcHA6CisgICAgICAgIChKU0M6OlZN
OjpyZWdpc3RlcldhdGNocG9pbnRGb3JJbXB1cmVQcm9wZXJ0eSk6IERlbGV0ZWQuCisgICAgICAg
ICogcnVudGltZS9WTS5oOgorCiAyMDE2LTExLTE1ICBKb3NlcGggUGVjb3Jhcm8gIDxwZWNvcmFy
b0BhcHBsZS5jb20+CiAKICAgICAgICAgV2ViIEluc3BlY3RvcjogaW5zcGVjdG9yL3dvcmtlci9k
ZWJ1Z2dlci1wYXVzZS5odG1sIGZhaWxzIG9uIFdlYktpdDEKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
VEYvQ2hhbmdlTG9nIGIvU291cmNlL1dURi9DaGFuZ2VMb2cKaW5kZXggMTFjYWE4MzExZmI2ZGFk
NmYxM2NhMzUzN2NjYTkxMWI2ODFiYzk4OS4uMzA3NTJiOTY5MzY5ZmVmYjFiM2U4NzRhM2M2MTRm
YzQzZWIwMDhiNiAxMDA2NDQKLS0tIGEvU291cmNlL1dURi9DaGFuZ2VMb2cKKysrIGIvU291cmNl
L1dURi9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxMyBAQAorMjAxNi0xMS0xNSAgWXVzdWtlIFN1enVr
aSAgPHV0YXRhbmUudGVhQGdtYWlsLmNvbT4KKworICAgICAgICBbRE9NSklUXVtKU0NdIEFsbG93
IERGRyBHZXRCeUlkIG9wdGltaXphdGlvbiBmb3IgaW1wdXJlIG9iamVjdHMgd2l0aCBOZXdJbXB1
cmVQcm9wZXJ0eUZpcmVzV2F0Y2hwb2ludHMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTE2NDE3NQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAo
T09QUyEpLgorCisgICAgICAgICogd3RmL0JveC5oOgorICAgICAgICAoV1RGOjpCb3g6Om9wZXJh
dG9yIGJvb2wpOgorCiAyMDE2LTExLTE1ICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+
CiAKICAgICAgICAgVGhlIGNvbmN1cnJlbnQgR0Mgc2hvdWxkIGhhdmUgYSB0aW1lc2xpY2luZyBj
b250cm9sbGVyCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29t
cGxleEdldFN0YXR1cy5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29tcGxl
eEdldFN0YXR1cy5jcHAKaW5kZXggMDYyMjU1M2MwMjRjOTEwYWNlMzYwZDBkM2U0MjMxMGYwOGVi
YjRiNC4uOWRiOTY4ODQ4ODQ0N2MyZjM5ZGM4NzgzNjc3ZmE4NDNiMjdiNmQ4ZSAxMDA2NDQKLS0t
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvbXBsZXhHZXRTdGF0dXMuY3BwCisr
KyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db21wbGV4R2V0U3RhdHVzLmNwcApA
QCAtMzEsNyArMzEsNyBAQAogbmFtZXNwYWNlIEpTQyB7CiAKIENvbXBsZXhHZXRTdGF0dXMgQ29t
cGxleEdldFN0YXR1czo6Y29tcHV0ZUZvcigKLSAgICBTdHJ1Y3R1cmUqIGhlYWRTdHJ1Y3R1cmUs
IGNvbnN0IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0JiBjb25kaXRpb25TZXQsIFVuaXF1ZWRT
dHJpbmdJbXBsKiB1aWQpCisgICAgU3RydWN0dXJlKiBoZWFkU3RydWN0dXJlLCBjb25zdCBPYmpl
Y3RQcm9wZXJ0eUNvbmRpdGlvblNldCYgY29uZGl0aW9uU2V0LCBCb3g8SGFzaFNldDxSZWY8V2F0
Y2hwb2ludFNldD4+PiBleHRyYVdhdGNocG9pbnRzLCBVbmlxdWVkU3RyaW5nSW1wbCogdWlkKQog
ewogICAgIC8vIEZJWE1FOiBXZSBzaG91bGQgYXNzZXJ0IHRoYXQgd2UgbmV2ZXIgc2VlIGEgc3Ry
dWN0dXJlIHRoYXQKICAgICAvLyBnZXRPd25Qcm9wZXJ0eVNsb3RJc0ltcHVyZSgpIGJ1dCBmb3Ig
d2hpY2ggd2UgZG9uJ3QKQEAgLTQxLDggKzQxLDE0IEBAIENvbXBsZXhHZXRTdGF0dXMgQ29tcGxl
eEdldFN0YXR1czo6Y29tcHV0ZUZvcigKICAgICAKICAgICBBU1NFUlQoY29uZGl0aW9uU2V0Lmlz
VmFsaWQoKSk7CiAgICAgCi0gICAgaWYgKGhlYWRTdHJ1Y3R1cmUtPnRha2VzU2xvd1BhdGhJbkRG
R0ZvckltcHVyZVByb3BlcnR5KCkpCi0gICAgICAgIHJldHVybiB0YWtlc1Nsb3dQYXRoKCk7Cisg
ICAgaWYgKGhlYWRTdHJ1Y3R1cmUtPnRha2VzU2xvd1BhdGhJbkRGR0ZvckltcHVyZVByb3BlcnR5
KCkpIHsKKyAgICAgICAgLy8gUHV0IG9wZXJhdGlvbiBpcyBub3Qgc3VwcG9ydGVkIHlldC4KKyAg
ICAgICAgaWYgKCFleHRyYVdhdGNocG9pbnRzKQorICAgICAgICAgICAgcmV0dXJuIHRha2VzU2xv
d1BhdGgoKTsKKyAgICAgICAgZm9yIChhdXRvJiB3YXRjaHBvaW50U2V0IDogKmV4dHJhV2F0Y2hw
b2ludHMpCisgICAgICAgICAgICBpZiAod2F0Y2hwb2ludFNldC0+aGFzQmVlbkludmFsaWRhdGVk
KCkpCisgICAgICAgICAgICAgICAgcmV0dXJuIHRha2VzU2xvd1BhdGgoKTsKKyAgICB9CiAgICAg
CiAgICAgQ29tcGxleEdldFN0YXR1cyByZXN1bHQ7CiAgICAgcmVzdWx0Lm1fa2luZCA9IElubGlu
ZWFibGU7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29tcGxl
eEdldFN0YXR1cy5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvbXBsZXhHZXRT
dGF0dXMuaAppbmRleCBkOTRiMzEyYWI5YjI3ZWJiZTE4NmIxMDM3YmM0MmNiODk2ZDAwZGJlLi45
ZDVjMmMxNzA0YTRjMDMyOTJmNWRkYWE1MTM3YjAxODRhOTgxYjg5IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29tcGxleEdldFN0YXR1cy5oCisrKyBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db21wbGV4R2V0U3RhdHVzLmgKQEAgLTk1LDcgKzk1
LDcgQEAgY2xhc3MgQ29tcGxleEdldFN0YXR1cyB7CiAgICAgfQogICAgIAogICAgIHN0YXRpYyBD
b21wbGV4R2V0U3RhdHVzIGNvbXB1dGVGb3IoCi0gICAgICAgIFN0cnVjdHVyZSogaGVhZFN0cnVj
dHVyZSwgY29uc3QgT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQmLCBVbmlxdWVkU3RyaW5nSW1w
bCogdWlkKTsKKyAgICAgICAgU3RydWN0dXJlKiBoZWFkU3RydWN0dXJlLCBjb25zdCBPYmplY3RQ
cm9wZXJ0eUNvbmRpdGlvblNldCYsIEJveDxIYXNoU2V0PFJlZjxXYXRjaHBvaW50U2V0Pj4+IGV4
dHJhV2F0Y2hwb2ludHMsIFVuaXF1ZWRTdHJpbmdJbXBsKiB1aWQpOwogICAgIAogICAgIEtpbmQg
a2luZCgpIGNvbnN0IHsgcmV0dXJuIG1fa2luZDsgfQogICAgIFByb3BlcnR5T2Zmc2V0IG9mZnNl
dCgpIGNvbnN0IHsgcmV0dXJuIG1fb2Zmc2V0OyB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvYnl0ZWNvZGUvR2V0QnlJZFN0YXR1cy5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvYnl0ZWNvZGUvR2V0QnlJZFN0YXR1cy5jcHAKaW5kZXggMThjMWM3ZWQyYzNhY2M0M2RiZWVi
MDBjZWExNmUzYzBmNTgwZjY3OC4uNjgzYTk0NWZjZTg5NWI0MzUyZTdkZDVhNTI0NmJkZDQyMzY1
Nzk5YSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0dldEJ5SWRT
dGF0dXMuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9HZXRCeUlkU3Rh
dHVzLmNwcApAQCAtOTQsNiArOTQsNyBAQCBHZXRCeUlkU3RhdHVzIEdldEJ5SWRTdGF0dXM6OmNv
bXB1dGVGcm9tTExJbnQoQ29kZUJsb2NrKiBwcm9maWxlZEJsb2NrLCB1bnNpZ25lZAogCiAgICAg
U3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSB2bS5oZWFwLnN0cnVjdHVyZUlEVGFibGUoKS5nZXQoc3Ry
dWN0dXJlSUQpOwogCisgICAgLy8gRklYTUU6IFdlIHNob3VsZCBoYXZlIGEgY2hhbmNlIHRvIG9w
dGltaXplIHRoaXMgZm9yIE5ld0ltcHVyZVByb3BlcnR5RmlyZXNXYXRjaHBvaW50cyBjYXNlLgog
ICAgIGlmIChzdHJ1Y3R1cmUtPnRha2VzU2xvd1BhdGhJbkRGR0ZvckltcHVyZVByb3BlcnR5KCkp
CiAgICAgICAgIHJldHVybiBHZXRCeUlkU3RhdHVzKE5vSW5mb3JtYXRpb24sIGZhbHNlKTsKIApA
QCAtMTc2LDYgKzE3Nyw3IEBAIEdldEJ5SWRTdGF0dXMgR2V0QnlJZFN0YXR1czo6Y29tcHV0ZUZv
clN0dWJJbmZvV2l0aG91dEV4aXRTaXRlRmVlZGJhY2soCiAgICAgICAgIAogICAgIGNhc2UgQ2Fj
aGVUeXBlOjpHZXRCeUlkU2VsZjogewogICAgICAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IHN0
dWJJbmZvLT51LmJ5SWRTZWxmLmJhc2VPYmplY3RTdHJ1Y3R1cmUuZ2V0KCk7CisgICAgICAgIC8v
IEZJWE1FOiBXZSBzaG91bGQgaGF2ZSBhIGNoYW5jZSB0byBvcHRpbWl6ZSB0aGlzIGZvciBOZXdJ
bXB1cmVQcm9wZXJ0eUZpcmVzV2F0Y2hwb2ludHMgY2FzZS4KICAgICAgICAgaWYgKHN0cnVjdHVy
ZS0+dGFrZXNTbG93UGF0aEluREZHRm9ySW1wdXJlUHJvcGVydHkoKSkKICAgICAgICAgICAgIHJl
dHVybiBHZXRCeUlkU3RhdHVzKHNsb3dQYXRoU3RhdGUsIHRydWUpOwogICAgICAgICB1bnNpZ25l
ZCBhdHRyaWJ1dGVzOwpAQCAtMjA5LDggKzIxMSw3IEBAIEdldEJ5SWRTdGF0dXMgR2V0QnlJZFN0
YXR1czo6Y29tcHV0ZUZvclN0dWJJbmZvV2l0aG91dEV4aXRTaXRlRmVlZGJhY2soCiAgICAgICAg
ICAgICAgICAgcmV0dXJuIEdldEJ5SWRTdGF0dXMoc2xvd1BhdGhTdGF0ZSwgdHJ1ZSk7CiAgICAg
ICAgICAgICB9CiAgICAgICAgICAgICAKLSAgICAgICAgICAgIENvbXBsZXhHZXRTdGF0dXMgY29t
cGxleEdldFN0YXR1cyA9IENvbXBsZXhHZXRTdGF0dXM6OmNvbXB1dGVGb3IoCi0gICAgICAgICAg
ICAgICAgc3RydWN0dXJlLCBhY2Nlc3MuY29uZGl0aW9uU2V0KCksIHVpZCk7CisgICAgICAgICAg
ICBDb21wbGV4R2V0U3RhdHVzIGNvbXBsZXhHZXRTdGF0dXMgPSBDb21wbGV4R2V0U3RhdHVzOjpj
b21wdXRlRm9yKHN0cnVjdHVyZSwgYWNjZXNzLmNvbmRpdGlvblNldCgpLCBhY2Nlc3MuZXh0cmFX
YXRjaHBvaW50cygpLCB1aWQpOwogICAgICAgICAgICAgIAogICAgICAgICAgICAgc3dpdGNoIChj
b21wbGV4R2V0U3RhdHVzLmtpbmQoKSkgewogICAgICAgICAgICAgY2FzZSBDb21wbGV4R2V0U3Rh
dHVzOjpTaG91bGRTa2lwOgpAQCAtMjU4LDcgKzI1OSw5IEBAIEdldEJ5SWRTdGF0dXMgR2V0QnlJ
ZFN0YXR1czo6Y29tcHV0ZUZvclN0dWJJbmZvV2l0aG91dEV4aXRTaXRlRmVlZGJhY2soCiAgICAg
ICAgICAgICAgICAgQVNTRVJUKChBY2Nlc3NDYXNlOjpNaXNzID09IGFjY2Vzcy50eXBlKCkpID09
IChhY2Nlc3Mub2Zmc2V0KCkgPT0gaW52YWxpZE9mZnNldCkpOwogICAgICAgICAgICAgICAgIEdl
dEJ5SWRWYXJpYW50IHZhcmlhbnQoCiAgICAgICAgICAgICAgICAgICAgIFN0cnVjdHVyZVNldChz
dHJ1Y3R1cmUpLCBjb21wbGV4R2V0U3RhdHVzLm9mZnNldCgpLAotICAgICAgICAgICAgICAgICAg
ICBjb21wbGV4R2V0U3RhdHVzLmNvbmRpdGlvblNldCgpLCBXVEZNb3ZlKGNhbGxMaW5rU3RhdHVz
KSwKKyAgICAgICAgICAgICAgICAgICAgY29tcGxleEdldFN0YXR1cy5jb25kaXRpb25TZXQoKSwK
KyAgICAgICAgICAgICAgICAgICAgYWNjZXNzLmV4dHJhV2F0Y2hwb2ludHMoKSwKKyAgICAgICAg
ICAgICAgICAgICAgV1RGTW92ZShjYWxsTGlua1N0YXR1cyksCiAgICAgICAgICAgICAgICAgICAg
IGludHJpbnNpY0Z1bmN0aW9uLAogICAgICAgICAgICAgICAgICAgICBkb21KSVQpOwogCkBAIC0z
NTEsNiArMzU0LDkgQEAgR2V0QnlJZFN0YXR1cyBHZXRCeUlkU3RhdHVzOjpjb21wdXRlRm9yKGNv
bnN0IFN0cnVjdHVyZVNldCYgc2V0LCBVbmlxdWVkU3RyaW5nSW0KICAgICAgICAgCiAgICAgICAg
IGlmICghc3RydWN0dXJlLT5wcm9wZXJ0eUFjY2Vzc2VzQXJlQ2FjaGVhYmxlKCkpCiAgICAgICAg
ICAgICByZXR1cm4gR2V0QnlJZFN0YXR1cyhUYWtlc1Nsb3dQYXRoKTsKKyAgICAgICAgLy8gRklY
TUU6IFdlIHNob3VsZCBoYXZlIGEgY2hhbmNlIHRvIG9wdGltaXplIHRoaXMgZm9yIE5ld0ltcHVy
ZVByb3BlcnR5RmlyZXNXYXRjaHBvaW50cyBjYXNlLgorICAgICAgICBpZiAoc3RydWN0dXJlLT50
YWtlc1Nsb3dQYXRoSW5ERkdGb3JJbXB1cmVQcm9wZXJ0eSgpKQorICAgICAgICAgICAgcmV0dXJu
IEdldEJ5SWRTdGF0dXMoVGFrZXNTbG93UGF0aCk7CiAgICAgICAgIAogICAgICAgICB1bnNpZ25l
ZCBhdHRyaWJ1dGVzOwogICAgICAgICBQcm9wZXJ0eU9mZnNldCBvZmZzZXQgPSBzdHJ1Y3R1cmUt
PmdldENvbmN1cnJlbnRseSh1aWQsIGF0dHJpYnV0ZXMpOwpkaWZmIC0tZ2l0IGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2J5dGVjb2RlL0dldEJ5SWRWYXJpYW50LmNwcCBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ieXRlY29kZS9HZXRCeUlkVmFyaWFudC5jcHAKaW5kZXggZDk0MGI2MmNhZThjMzY0
MzM5N2U5NzJlMTMzZDQ3NGY3YjNjYjY0YS4uZTlhNjVhYzhlOWJhMzhiNTM2MDQ1ZTMzMWZlMzAz
NTg2YjFlMjg2ZSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0dl
dEJ5SWRWYXJpYW50LmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvR2V0
QnlJZFZhcmlhbnQuY3BwCkBAIC0zNSwxMiArMzUsMTQgQEAgbmFtZXNwYWNlIEpTQyB7CiBHZXRC
eUlkVmFyaWFudDo6R2V0QnlJZFZhcmlhbnQoCiAgICAgY29uc3QgU3RydWN0dXJlU2V0JiBzdHJ1
Y3R1cmVTZXQsIFByb3BlcnR5T2Zmc2V0IG9mZnNldCwKICAgICBjb25zdCBPYmplY3RQcm9wZXJ0
eUNvbmRpdGlvblNldCYgY29uZGl0aW9uU2V0LAorICAgIEJveDxIYXNoU2V0PFJlZjxXYXRjaHBv
aW50U2V0Pj4+IGV4dHJhV2F0Y2hwb2ludHMsCiAgICAgc3RkOjp1bmlxdWVfcHRyPENhbGxMaW5r
U3RhdHVzPiBjYWxsTGlua1N0YXR1cywKICAgICBKU0Z1bmN0aW9uKiBpbnRyaW5zaWNGdW5jdGlv
biwKICAgICBET01KSVQ6OkdldHRlclNldHRlciogZG9tSklUKQogICAgIDogbV9zdHJ1Y3R1cmVT
ZXQoc3RydWN0dXJlU2V0KQogICAgICwgbV9jb25kaXRpb25TZXQoY29uZGl0aW9uU2V0KQogICAg
ICwgbV9vZmZzZXQob2Zmc2V0KQorICAgICwgbV9leHRyYVdhdGNocG9pbnRzKGV4dHJhV2F0Y2hw
b2ludHMpCiAgICAgLCBtX2NhbGxMaW5rU3RhdHVzKFdURk1vdmUoY2FsbExpbmtTdGF0dXMpKQog
ICAgICwgbV9pbnRyaW5zaWNGdW5jdGlvbihpbnRyaW5zaWNGdW5jdGlvbikKICAgICAsIG1fZG9t
SklUKGRvbUpJVCkKQEAgLTY2LDYgKzY4LDcgQEAgR2V0QnlJZFZhcmlhbnQmIEdldEJ5SWRWYXJp
YW50OjpvcGVyYXRvcj0oY29uc3QgR2V0QnlJZFZhcmlhbnQmIG90aGVyKQogICAgIG1fc3RydWN0
dXJlU2V0ID0gb3RoZXIubV9zdHJ1Y3R1cmVTZXQ7CiAgICAgbV9jb25kaXRpb25TZXQgPSBvdGhl
ci5tX2NvbmRpdGlvblNldDsKICAgICBtX29mZnNldCA9IG90aGVyLm1fb2Zmc2V0OworICAgIG1f
ZXh0cmFXYXRjaHBvaW50cyA9IG90aGVyLm1fZXh0cmFXYXRjaHBvaW50czsKICAgICBtX2ludHJp
bnNpY0Z1bmN0aW9uID0gb3RoZXIubV9pbnRyaW5zaWNGdW5jdGlvbjsKICAgICBtX2RvbUpJVCA9
IG90aGVyLm1fZG9tSklUOwogICAgIGlmIChvdGhlci5tX2NhbGxMaW5rU3RhdHVzKQpAQCAtMTAz
LDYgKzEwNiwxMyBAQCBib29sIEdldEJ5SWRWYXJpYW50OjphdHRlbXB0VG9NZXJnZShjb25zdCBH
ZXRCeUlkVmFyaWFudCYgb3RoZXIpCiAgICAgaWYgKG1fY2FsbExpbmtTdGF0dXMgfHwgb3RoZXIu
bV9jYWxsTGlua1N0YXR1cykKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCisgICAgaWYgKG1fZXh0
cmFXYXRjaHBvaW50cyB8fCBvdGhlci5tX2V4dHJhV2F0Y2hwb2ludHMpIHsKKyAgICAgICAgaWYg
KCFtX2V4dHJhV2F0Y2hwb2ludHMgfHwgIW90aGVyLm1fZXh0cmFXYXRjaHBvaW50cykKKyAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgaWYgKCEoKm1fZXh0cmFXYXRjaHBvaW50cyA9
PSAqb3RoZXIubV9leHRyYVdhdGNocG9pbnRzKSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsK
KyAgICB9CisKICAgICBpZiAoIWNhbk1lcmdlSW50cmluc2ljU3RydWN0dXJlcyhvdGhlcikpCiAg
ICAgICAgIHJldHVybiBmYWxzZTsKIApAQCAtMTQwLDYgKzE1MCwxMyBAQCB2b2lkIEdldEJ5SWRW
YXJpYW50OjpkdW1wSW5Db250ZXh0KFByaW50U3RyZWFtJiBvdXQsIER1bXBDb250ZXh0KiBjb250
ZXh0KSBjb25zdAogICAgIG91dC5wcmludCgKICAgICAgICAgIjwiLCBpbkNvbnRleHQoc3RydWN0
dXJlU2V0KCksIGNvbnRleHQpLCAiLCAiLCBpbkNvbnRleHQobV9jb25kaXRpb25TZXQsIGNvbnRl
eHQpKTsKICAgICBvdXQucHJpbnQoIiwgb2Zmc2V0ID0gIiwgb2Zmc2V0KCkpOworICAgIGlmICht
X2V4dHJhV2F0Y2hwb2ludHMpIHsKKyAgICAgICAgb3V0LnByaW50KCIsIGV4dHJhV2F0Y2hwb2lu
dHMgPSBbIik7CisgICAgICAgIENvbW1hUHJpbnRlciBleHRyYVdhdGNocG9pbnRzQ29tbWE7Cisg
ICAgICAgIGZvciAoYXV0byYgd2F0Y2hwb2ludFNldCA6ICptX2V4dHJhV2F0Y2hwb2ludHMpCisg
ICAgICAgICAgICBvdXQucHJpbnQoZXh0cmFXYXRjaHBvaW50c0NvbW1hLCBSYXdQb2ludGVyKHdh
dGNocG9pbnRTZXQucHRyKCkpKTsKKyAgICAgICAgb3V0LnByaW50KCJdIik7CisgICAgfQogICAg
IGlmIChtX2NhbGxMaW5rU3RhdHVzKQogICAgICAgICBvdXQucHJpbnQoIiwgY2FsbCA9ICIsICpt
X2NhbGxMaW5rU3RhdHVzKTsKICAgICBpZiAobV9pbnRyaW5zaWNGdW5jdGlvbikKZGlmZiAtLWdp
dCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9HZXRCeUlkVmFyaWFudC5oIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0dldEJ5SWRWYXJpYW50LmgKaW5kZXggOGRlZDI0
ODY3NWY4NzFkNzkwOGYyMmE1Njk0MzcyOTc4Yjg5NTNhNS4uODU0MTQ5MTA4MWM4MmYxNDMxNTlk
YzhmYTkwOWQyYmI3ZTc4ZjFhZiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5
dGVjb2RlL0dldEJ5SWRWYXJpYW50LmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVj
b2RlL0dldEJ5SWRWYXJpYW50LmgKQEAgLTMwLDYgKzMwLDcgQEAKICNpbmNsdWRlICJPYmplY3RQ
cm9wZXJ0eUNvbmRpdGlvblNldC5oIgogI2luY2x1ZGUgIlByb3BlcnR5T2Zmc2V0LmgiCiAjaW5j
bHVkZSAiU3RydWN0dXJlU2V0LmgiCisjaW5jbHVkZSA8d3RmL0JveC5oPgogCiBuYW1lc3BhY2Ug
SlNDIHsKIG5hbWVzcGFjZSBET01KSVQgewpAQCAtNDUsNiArNDYsNyBAQCBjbGFzcyBHZXRCeUlk
VmFyaWFudCB7CiAgICAgR2V0QnlJZFZhcmlhbnQoCiAgICAgICAgIGNvbnN0IFN0cnVjdHVyZVNl
dCYgc3RydWN0dXJlU2V0ID0gU3RydWN0dXJlU2V0KCksIFByb3BlcnR5T2Zmc2V0IG9mZnNldCA9
IGludmFsaWRPZmZzZXQsCiAgICAgICAgIGNvbnN0IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0
JiA9IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0KCksCisgICAgICAgIEJveDxIYXNoU2V0PFJl
ZjxXYXRjaHBvaW50U2V0Pj4+IGV4dHJhV2F0Y2hwb2ludHMgPSBudWxscHRyLAogICAgICAgICBz
dGQ6OnVuaXF1ZV9wdHI8Q2FsbExpbmtTdGF0dXM+ID0gbnVsbHB0ciwKICAgICAgICAgSlNGdW5j
dGlvbiogPSBudWxscHRyLAogICAgICAgICBET01KSVQ6OkdldHRlclNldHRlciogPSBudWxscHRy
KTsKQEAgLTU4LDYgKzYwLDcgQEAgY2xhc3MgR2V0QnlJZFZhcmlhbnQgewogICAgIGJvb2wgb3Bl
cmF0b3IhKCkgY29uc3QgeyByZXR1cm4gIWlzU2V0KCk7IH0KICAgICBjb25zdCBTdHJ1Y3R1cmVT
ZXQmIHN0cnVjdHVyZVNldCgpIGNvbnN0IHsgcmV0dXJuIG1fc3RydWN0dXJlU2V0OyB9CiAgICAg
U3RydWN0dXJlU2V0JiBzdHJ1Y3R1cmVTZXQoKSB7IHJldHVybiBtX3N0cnVjdHVyZVNldDsgfQor
ICAgIGNvbnN0IEJveDxIYXNoU2V0PFJlZjxXYXRjaHBvaW50U2V0Pj4+JiBleHRyYVdhdGNocG9p
bnRzKCkgeyByZXR1cm4gbV9leHRyYVdhdGNocG9pbnRzOyB9CiAKICAgICAvLyBBIG5vbi1lbXB0
eSBjb25kaXRpb24gc2V0IG1lYW5zIHRoYXQgdGhpcyBpcyBhIHByb3RvdHlwZSBsb2FkLgogICAg
IGNvbnN0IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0JiBjb25kaXRpb25TZXQoKSBjb25zdCB7
IHJldHVybiBtX2NvbmRpdGlvblNldDsgfQpAQCAtODMsNiArODYsNyBAQCBjbGFzcyBHZXRCeUlk
VmFyaWFudCB7CiAgICAgU3RydWN0dXJlU2V0IG1fc3RydWN0dXJlU2V0OwogICAgIE9iamVjdFBy
b3BlcnR5Q29uZGl0aW9uU2V0IG1fY29uZGl0aW9uU2V0OwogICAgIFByb3BlcnR5T2Zmc2V0IG1f
b2Zmc2V0OworICAgIEJveDxIYXNoU2V0PFJlZjxXYXRjaHBvaW50U2V0Pj4+IG1fZXh0cmFXYXRj
aHBvaW50czsKICAgICBzdGQ6OnVuaXF1ZV9wdHI8Q2FsbExpbmtTdGF0dXM+IG1fY2FsbExpbmtT
dGF0dXM7CiAgICAgSlNGdW5jdGlvbiogbV9pbnRyaW5zaWNGdW5jdGlvbjsKICAgICBET01KSVQ6
OkdldHRlclNldHRlciogbV9kb21KSVQ7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvYnl0ZWNvZGUvUG9seW1vcnBoaWNBY2Nlc3MuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2J5dGVjb2RlL1BvbHltb3JwaGljQWNjZXNzLmNwcAppbmRleCBlYmM1NTFhYTRlOWYzMWY0Y2Y2
OWY4ZmI2N2I4NmRjNjFiNDBmZDgwLi5kZTBkM2JjMWVjYjY2OGQwNzg1MjRlYTM1YTdmNWNjOTcw
ZTJjODI5IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUG9seW1v
cnBoaWNBY2Nlc3MuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Qb2x5
bW9ycGhpY0FjY2Vzcy5jcHAKQEAgLTIxMCwxMiArMjEwLDI3IEBAIHZvaWQgQWNjZXNzR2VuZXJh
dGlvblN0YXRlOjplbWl0RXhwbGljaXRFeGNlcHRpb25IYW5kbGVyKCkKICAgICB9CiB9CiAKK3Zv
aWQgQWNjZXNzQ2FzZTo6aW5pdGlhbGl6ZUltcHVyZVByb3BlcnR5U2V0SWZOZWNlc3NhcnkoVk0m
IHZtLCBjb25zdCBJZGVudGlmaWVyJiBpZGVudCkKK3sKKyAgICBpZiAoKHN0cnVjdHVyZSgpICYm
IHN0cnVjdHVyZSgpLT5uZWVkSW1wdXJlUHJvcGVydHlXYXRjaHBvaW50KCkpIHx8IG1fY29uZGl0
aW9uU2V0Lm5lZWRJbXB1cmVQcm9wZXJ0eVdhdGNocG9pbnQoKSkKKyAgICAgICAgYWRkRXh0cmFX
YXRjaHBvaW50U2V0KCp2bS5lbnN1cmVXYXRjaHBvaW50U2V0Rm9ySW1wdXJlUHJvcGVydHkoaWRl
bnQpKTsKK30KKwordm9pZCBBY2Nlc3NDYXNlOjphZGRFeHRyYVdhdGNocG9pbnRTZXQoV2F0Y2hw
b2ludFNldCYgd2F0Y2hwb2ludFNldCkKK3sKKyAgICBpZiAoIW1fcmFyZURhdGEpCisgICAgICAg
IG1fcmFyZURhdGEgPSBzdGQ6Om1ha2VfdW5pcXVlPFJhcmVEYXRhPigpOworICAgIGlmICghbV9y
YXJlRGF0YS0+ZXh0cmFXYXRjaHBvaW50cykKKyAgICAgICAgbV9yYXJlRGF0YS0+ZXh0cmFXYXRj
aHBvaW50cyA9IEJveDxIYXNoU2V0PFJlZjxXYXRjaHBvaW50U2V0Pj4+OjpjcmVhdGUoKTsKKyAg
ICBtX3JhcmVEYXRhLT5leHRyYVdhdGNocG9pbnRzLT5hZGQod2F0Y2hwb2ludFNldCk7Cit9CisK
IEFjY2Vzc0Nhc2U6OkFjY2Vzc0Nhc2UoKQogewogfQogCiBzdGQ6OnVuaXF1ZV9wdHI8QWNjZXNz
Q2FzZT4gQWNjZXNzQ2FzZTo6dHJ5R2V0KAotICAgIFZNJiB2bSwgSlNDZWxsKiBvd25lciwgQWNj
ZXNzVHlwZSB0eXBlLCBQcm9wZXJ0eU9mZnNldCBvZmZzZXQsIFN0cnVjdHVyZSogc3RydWN0dXJl
LAorICAgIFZNJiB2bSwgSlNDZWxsKiBvd25lciwgY29uc3QgSWRlbnRpZmllciYgaWRlbnQsIEFj
Y2Vzc1R5cGUgdHlwZSwgUHJvcGVydHlPZmZzZXQgb2Zmc2V0LCBTdHJ1Y3R1cmUqIHN0cnVjdHVy
ZSwKICAgICBjb25zdCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldCYgY29uZGl0aW9uU2V0LCBi
b29sIHZpYVByb3h5LCBXYXRjaHBvaW50U2V0KiBhZGRpdGlvbmFsU2V0KQogewogICAgIHN0ZDo6
dW5pcXVlX3B0cjxBY2Nlc3NDYXNlPiByZXN1bHQobmV3IEFjY2Vzc0Nhc2UoKSk7CkBAIC0yMjgs
MTQgKzI0MywxNiBAQCBzdGQ6OnVuaXF1ZV9wdHI8QWNjZXNzQ2FzZT4gQWNjZXNzQ2FzZTo6dHJ5
R2V0KAogICAgIGlmICh2aWFQcm94eSB8fCBhZGRpdGlvbmFsU2V0KSB7CiAgICAgICAgIHJlc3Vs
dC0+bV9yYXJlRGF0YSA9IHN0ZDo6bWFrZV91bmlxdWU8UmFyZURhdGE+KCk7CiAgICAgICAgIHJl
c3VsdC0+bV9yYXJlRGF0YS0+dmlhUHJveHkgPSB2aWFQcm94eTsKLSAgICAgICAgcmVzdWx0LT5t
X3JhcmVEYXRhLT5hZGRpdGlvbmFsU2V0ID0gYWRkaXRpb25hbFNldDsKKyAgICAgICAgaWYgKGFk
ZGl0aW9uYWxTZXQpCisgICAgICAgICAgICByZXN1bHQtPmFkZEV4dHJhV2F0Y2hwb2ludFNldCgq
YWRkaXRpb25hbFNldCk7CiAgICAgfQogCisgICAgcmVzdWx0LT5pbml0aWFsaXplSW1wdXJlUHJv
cGVydHlTZXRJZk5lY2Vzc2FyeSh2bSwgaWRlbnQpOwogICAgIHJldHVybiByZXN1bHQ7CiB9CiAK
IHN0ZDo6dW5pcXVlX3B0cjxBY2Nlc3NDYXNlPiBBY2Nlc3NDYXNlOjpnZXQoCi0gICAgVk0mIHZt
LCBKU0NlbGwqIG93bmVyLCBBY2Nlc3NUeXBlIHR5cGUsIFByb3BlcnR5T2Zmc2V0IG9mZnNldCwg
U3RydWN0dXJlKiBzdHJ1Y3R1cmUsCisgICAgVk0mIHZtLCBKU0NlbGwqIG93bmVyLCBjb25zdCBJ
ZGVudGlmaWVyJiBpZGVudCwgQWNjZXNzVHlwZSB0eXBlLCBQcm9wZXJ0eU9mZnNldCBvZmZzZXQs
IFN0cnVjdHVyZSogc3RydWN0dXJlLAogICAgIGNvbnN0IE9iamVjdFByb3BlcnR5Q29uZGl0aW9u
U2V0JiBjb25kaXRpb25TZXQsIGJvb2wgdmlhUHJveHksIFdhdGNocG9pbnRTZXQqIGFkZGl0aW9u
YWxTZXQsCiAgICAgUHJvcGVydHlTbG90OjpHZXRWYWx1ZUZ1bmMgY3VzdG9tR2V0dGVyLCBKU09i
amVjdCogY3VzdG9tU2xvdEJhc2UsIERPTUpJVDo6R2V0dGVyU2V0dGVyKiBkb21KSVQpCiB7CkBA
IC0yNDksMTYgKzI2NiwxOCBAQCBzdGQ6OnVuaXF1ZV9wdHI8QWNjZXNzQ2FzZT4gQWNjZXNzQ2Fz
ZTo6Z2V0KAogICAgIGlmICh2aWFQcm94eSB8fCBhZGRpdGlvbmFsU2V0IHx8IHJlc3VsdC0+ZG9l
c0NhbGxzKCkgfHwgY3VzdG9tR2V0dGVyIHx8IGN1c3RvbVNsb3RCYXNlIHx8IGRvbUpJVCkgewog
ICAgICAgICByZXN1bHQtPm1fcmFyZURhdGEgPSBzdGQ6Om1ha2VfdW5pcXVlPFJhcmVEYXRhPigp
OwogICAgICAgICByZXN1bHQtPm1fcmFyZURhdGEtPnZpYVByb3h5ID0gdmlhUHJveHk7Ci0gICAg
ICAgIHJlc3VsdC0+bV9yYXJlRGF0YS0+YWRkaXRpb25hbFNldCA9IGFkZGl0aW9uYWxTZXQ7Cisg
ICAgICAgIGlmIChhZGRpdGlvbmFsU2V0KQorICAgICAgICAgICAgcmVzdWx0LT5hZGRFeHRyYVdh
dGNocG9pbnRTZXQoKmFkZGl0aW9uYWxTZXQpOwogICAgICAgICByZXN1bHQtPm1fcmFyZURhdGEt
PmN1c3RvbUFjY2Vzc29yLmdldHRlciA9IGN1c3RvbUdldHRlcjsKICAgICAgICAgcmVzdWx0LT5t
X3JhcmVEYXRhLT5jdXN0b21TbG90QmFzZS5zZXRNYXlCZU51bGwodm0sIG93bmVyLCBjdXN0b21T
bG90QmFzZSk7CiAgICAgICAgIHJlc3VsdC0+bV9yYXJlRGF0YS0+ZG9tSklUID0gZG9tSklUOwog
ICAgIH0KIAorICAgIHJlc3VsdC0+aW5pdGlhbGl6ZUltcHVyZVByb3BlcnR5U2V0SWZOZWNlc3Nh
cnkodm0sIGlkZW50KTsKICAgICByZXR1cm4gcmVzdWx0OwogfQogCi1zdGQ6OnVuaXF1ZV9wdHI8
QWNjZXNzQ2FzZT4gQWNjZXNzQ2FzZTo6bWVnYW1vcnBoaWNMb2FkKFZNJiB2bSwgSlNDZWxsKiBv
d25lcikKK3N0ZDo6dW5pcXVlX3B0cjxBY2Nlc3NDYXNlPiBBY2Nlc3NDYXNlOjptZWdhbW9ycGhp
Y0xvYWQoVk0mIHZtLCBKU0NlbGwqIG93bmVyLCBjb25zdCBJZGVudGlmaWVyJiBpZGVudCkKIHsK
ICAgICBVTlVTRURfUEFSQU0odm0pOwogICAgIFVOVVNFRF9QQVJBTShvd25lcik7CkBAIC0yNzAs
MTEgKzI4OSwxMiBAQCBzdGQ6OnVuaXF1ZV9wdHI8QWNjZXNzQ2FzZT4gQWNjZXNzQ2FzZTo6bWVn
YW1vcnBoaWNMb2FkKFZNJiB2bSwgSlNDZWxsKiBvd25lcikKICAgICAKICAgICByZXN1bHQtPm1f
dHlwZSA9IE1lZ2Ftb3JwaGljTG9hZDsKICAgICAKKyAgICByZXN1bHQtPmluaXRpYWxpemVJbXB1
cmVQcm9wZXJ0eVNldElmTmVjZXNzYXJ5KHZtLCBpZGVudCk7CiAgICAgcmV0dXJuIHJlc3VsdDsK
IH0KIAogc3RkOjp1bmlxdWVfcHRyPEFjY2Vzc0Nhc2U+IEFjY2Vzc0Nhc2U6OnJlcGxhY2UoCi0g
ICAgVk0mIHZtLCBKU0NlbGwqIG93bmVyLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgUHJvcGVydHlP
ZmZzZXQgb2Zmc2V0KQorICAgIFZNJiB2bSwgSlNDZWxsKiBvd25lciwgY29uc3QgSWRlbnRpZmll
ciYgaWRlbnQsIFN0cnVjdHVyZSogc3RydWN0dXJlLCBQcm9wZXJ0eU9mZnNldCBvZmZzZXQpCiB7
CiAgICAgc3RkOjp1bmlxdWVfcHRyPEFjY2Vzc0Nhc2U+IHJlc3VsdChuZXcgQWNjZXNzQ2FzZSgp
KTsKIApAQCAtMjgyLDExICszMDIsMTIgQEAgc3RkOjp1bmlxdWVfcHRyPEFjY2Vzc0Nhc2U+IEFj
Y2Vzc0Nhc2U6OnJlcGxhY2UoCiAgICAgcmVzdWx0LT5tX29mZnNldCA9IG9mZnNldDsKICAgICBy
ZXN1bHQtPm1fc3RydWN0dXJlLnNldCh2bSwgb3duZXIsIHN0cnVjdHVyZSk7CiAKKyAgICByZXN1
bHQtPmluaXRpYWxpemVJbXB1cmVQcm9wZXJ0eVNldElmTmVjZXNzYXJ5KHZtLCBpZGVudCk7CiAg
ICAgcmV0dXJuIHJlc3VsdDsKIH0KIAogc3RkOjp1bmlxdWVfcHRyPEFjY2Vzc0Nhc2U+IEFjY2Vz
c0Nhc2U6OnRyYW5zaXRpb24oCi0gICAgVk0mIHZtLCBKU0NlbGwqIG93bmVyLCBTdHJ1Y3R1cmUq
IG9sZFN0cnVjdHVyZSwgU3RydWN0dXJlKiBuZXdTdHJ1Y3R1cmUsIFByb3BlcnR5T2Zmc2V0IG9m
ZnNldCwKKyAgICBWTSYgdm0sIEpTQ2VsbCogb3duZXIsIGNvbnN0IElkZW50aWZpZXImIGlkZW50
LCBTdHJ1Y3R1cmUqIG9sZFN0cnVjdHVyZSwgU3RydWN0dXJlKiBuZXdTdHJ1Y3R1cmUsIFByb3Bl
cnR5T2Zmc2V0IG9mZnNldCwKICAgICBjb25zdCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldCYg
Y29uZGl0aW9uU2V0KQogewogICAgIFJFTEVBU0VfQVNTRVJUKG9sZFN0cnVjdHVyZSA9PSBuZXdT
dHJ1Y3R1cmUtPnByZXZpb3VzSUQoKSk7CkBAIC0zMDYsMTEgKzMyNywxMiBAQCBzdGQ6OnVuaXF1
ZV9wdHI8QWNjZXNzQ2FzZT4gQWNjZXNzQ2FzZTo6dHJhbnNpdGlvbigKICAgICByZXN1bHQtPm1f
c3RydWN0dXJlLnNldCh2bSwgb3duZXIsIG5ld1N0cnVjdHVyZSk7CiAgICAgcmVzdWx0LT5tX2Nv
bmRpdGlvblNldCA9IGNvbmRpdGlvblNldDsKIAorICAgIHJlc3VsdC0+aW5pdGlhbGl6ZUltcHVy
ZVByb3BlcnR5U2V0SWZOZWNlc3Nhcnkodm0sIGlkZW50KTsKICAgICByZXR1cm4gcmVzdWx0Owog
fQogCiBzdGQ6OnVuaXF1ZV9wdHI8QWNjZXNzQ2FzZT4gQWNjZXNzQ2FzZTo6c2V0dGVyKAotICAg
IFZNJiB2bSwgSlNDZWxsKiBvd25lciwgQWNjZXNzVHlwZSB0eXBlLCBTdHJ1Y3R1cmUqIHN0cnVj
dHVyZSwgUHJvcGVydHlPZmZzZXQgb2Zmc2V0LAorICAgIFZNJiB2bSwgSlNDZWxsKiBvd25lciwg
Y29uc3QgSWRlbnRpZmllciYgaWRlbnQsIEFjY2Vzc1R5cGUgdHlwZSwgU3RydWN0dXJlKiBzdHJ1
Y3R1cmUsIFByb3BlcnR5T2Zmc2V0IG9mZnNldCwKICAgICBjb25zdCBPYmplY3RQcm9wZXJ0eUNv
bmRpdGlvblNldCYgY29uZGl0aW9uU2V0LCBQdXRQcm9wZXJ0eVNsb3Q6OlB1dFZhbHVlRnVuYyBj
dXN0b21TZXR0ZXIsCiAgICAgSlNPYmplY3QqIGN1c3RvbVNsb3RCYXNlKQogewpAQCAtMzI0LDEx
ICszNDYsMTIgQEAgc3RkOjp1bmlxdWVfcHRyPEFjY2Vzc0Nhc2U+IEFjY2Vzc0Nhc2U6OnNldHRl
cigKICAgICByZXN1bHQtPm1fcmFyZURhdGEtPmN1c3RvbUFjY2Vzc29yLnNldHRlciA9IGN1c3Rv
bVNldHRlcjsKICAgICByZXN1bHQtPm1fcmFyZURhdGEtPmN1c3RvbVNsb3RCYXNlLnNldE1heUJl
TnVsbCh2bSwgb3duZXIsIGN1c3RvbVNsb3RCYXNlKTsKIAorICAgIHJlc3VsdC0+aW5pdGlhbGl6
ZUltcHVyZVByb3BlcnR5U2V0SWZOZWNlc3Nhcnkodm0sIGlkZW50KTsKICAgICByZXR1cm4gcmVz
dWx0OwogfQogCiBzdGQ6OnVuaXF1ZV9wdHI8QWNjZXNzQ2FzZT4gQWNjZXNzQ2FzZTo6aW4oCi0g
ICAgVk0mIHZtLCBKU0NlbGwqIG93bmVyLCBBY2Nlc3NUeXBlIHR5cGUsIFN0cnVjdHVyZSogc3Ry
dWN0dXJlLAorICAgIFZNJiB2bSwgSlNDZWxsKiBvd25lciwgY29uc3QgSWRlbnRpZmllciYgaWRl
bnQsIEFjY2Vzc1R5cGUgdHlwZSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsCiAgICAgY29uc3QgT2Jq
ZWN0UHJvcGVydHlDb25kaXRpb25TZXQmIGNvbmRpdGlvblNldCkKIHsKICAgICBzdGQ6OnVuaXF1
ZV9wdHI8QWNjZXNzQ2FzZT4gcmVzdWx0KG5ldyBBY2Nlc3NDYXNlKCkpOwpAQCAtMzM3LDIwICsz
NjAsMjIgQEAgc3RkOjp1bmlxdWVfcHRyPEFjY2Vzc0Nhc2U+IEFjY2Vzc0Nhc2U6OmluKAogICAg
IHJlc3VsdC0+bV9zdHJ1Y3R1cmUuc2V0KHZtLCBvd25lciwgc3RydWN0dXJlKTsKICAgICByZXN1
bHQtPm1fY29uZGl0aW9uU2V0ID0gY29uZGl0aW9uU2V0OwogCisgICAgcmVzdWx0LT5pbml0aWFs
aXplSW1wdXJlUHJvcGVydHlTZXRJZk5lY2Vzc2FyeSh2bSwgaWRlbnQpOwogICAgIHJldHVybiBy
ZXN1bHQ7CiB9CiAKLXN0ZDo6dW5pcXVlX3B0cjxBY2Nlc3NDYXNlPiBBY2Nlc3NDYXNlOjpnZXRM
ZW5ndGgoVk0mLCBKU0NlbGwqLCBBY2Nlc3NUeXBlIHR5cGUpCitzdGQ6OnVuaXF1ZV9wdHI8QWNj
ZXNzQ2FzZT4gQWNjZXNzQ2FzZTo6Z2V0TGVuZ3RoKFZNJiB2bSwgSlNDZWxsKiwgQWNjZXNzVHlw
ZSB0eXBlKQogewogICAgIHN0ZDo6dW5pcXVlX3B0cjxBY2Nlc3NDYXNlPiByZXN1bHQobmV3IEFj
Y2Vzc0Nhc2UoKSk7CiAKICAgICByZXN1bHQtPm1fdHlwZSA9IHR5cGU7CiAKKyAgICByZXN1bHQt
PmluaXRpYWxpemVJbXB1cmVQcm9wZXJ0eVNldElmTmVjZXNzYXJ5KHZtLCB2bS5wcm9wZXJ0eU5h
bWVzLT5sZW5ndGgpOwogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKIHN0ZDo6dW5pcXVlX3B0cjxB
Y2Nlc3NDYXNlPiBBY2Nlc3NDYXNlOjpnZXRJbnRyaW5zaWMoCi0gICAgVk0mIHZtLCBKU0NlbGwq
IG93bmVyLCBKU0Z1bmN0aW9uKiBnZXR0ZXIsIFByb3BlcnR5T2Zmc2V0IG9mZnNldCwKKyAgICBW
TSYgdm0sIEpTQ2VsbCogb3duZXIsIGNvbnN0IElkZW50aWZpZXImIGlkZW50LCBKU0Z1bmN0aW9u
KiBnZXR0ZXIsIFByb3BlcnR5T2Zmc2V0IG9mZnNldCwKICAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVy
ZSwgY29uc3QgT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQmIGNvbmRpdGlvblNldCkKIHsKICAg
ICBzdGQ6OnVuaXF1ZV9wdHI8QWNjZXNzQ2FzZT4gcmVzdWx0KG5ldyBBY2Nlc3NDYXNlKCkpOwpA
QCAtMzYzLDYgKzM4OCw3IEBAIHN0ZDo6dW5pcXVlX3B0cjxBY2Nlc3NDYXNlPiBBY2Nlc3NDYXNl
OjpnZXRJbnRyaW5zaWMoCiAgICAgcmVzdWx0LT5tX3JhcmVEYXRhID0gc3RkOjptYWtlX3VuaXF1
ZTxSYXJlRGF0YT4oKTsKICAgICByZXN1bHQtPm1fcmFyZURhdGEtPmludHJpbnNpY0Z1bmN0aW9u
LnNldCh2bSwgb3duZXIsIGdldHRlcik7CiAKKyAgICByZXN1bHQtPmluaXRpYWxpemVJbXB1cmVQ
cm9wZXJ0eVNldElmTmVjZXNzYXJ5KHZtLCBpZGVudCk7CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0K
IApAQCAtMzcxLDE3ICszOTcsMTcgQEAgQWNjZXNzQ2FzZTo6fkFjY2Vzc0Nhc2UoKQogfQogCiBz
dGQ6OnVuaXF1ZV9wdHI8QWNjZXNzQ2FzZT4gQWNjZXNzQ2FzZTo6ZnJvbVN0cnVjdHVyZVN0dWJJ
bmZvKAotICAgIFZNJiB2bSwgSlNDZWxsKiBvd25lciwgU3RydWN0dXJlU3R1YkluZm8mIHN0dWJJ
bmZvKQorICAgIFZNJiB2bSwgSlNDZWxsKiBvd25lciwgY29uc3QgSWRlbnRpZmllciYgaWRlbnQs
IFN0cnVjdHVyZVN0dWJJbmZvJiBzdHViSW5mbykKIHsKICAgICBzd2l0Y2ggKHN0dWJJbmZvLmNh
Y2hlVHlwZSkgewogICAgIGNhc2UgQ2FjaGVUeXBlOjpHZXRCeUlkU2VsZjoKICAgICAgICAgcmV0
dXJuIGdldCgKLSAgICAgICAgICAgIHZtLCBvd25lciwgTG9hZCwgc3R1YkluZm8udS5ieUlkU2Vs
Zi5vZmZzZXQsCisgICAgICAgICAgICB2bSwgb3duZXIsIGlkZW50LCBMb2FkLCBzdHViSW5mby51
LmJ5SWRTZWxmLm9mZnNldCwKICAgICAgICAgICAgIHN0dWJJbmZvLnUuYnlJZFNlbGYuYmFzZU9i
amVjdFN0cnVjdHVyZS5nZXQoKSk7CiAKICAgICBjYXNlIENhY2hlVHlwZTo6UHV0QnlJZFJlcGxh
Y2U6CiAgICAgICAgIHJldHVybiByZXBsYWNlKAotICAgICAgICAgICAgdm0sIG93bmVyLCBzdHVi
SW5mby51LmJ5SWRTZWxmLmJhc2VPYmplY3RTdHJ1Y3R1cmUuZ2V0KCksIHN0dWJJbmZvLnUuYnlJ
ZFNlbGYub2Zmc2V0KTsKKyAgICAgICAgICAgIHZtLCBvd25lciwgaWRlbnQsIHN0dWJJbmZvLnUu
YnlJZFNlbGYuYmFzZU9iamVjdFN0cnVjdHVyZS5nZXQoKSwgc3R1YkluZm8udS5ieUlkU2VsZi5v
ZmZzZXQpOwogCiAgICAgZGVmYXVsdDoKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CkBAIC0zOTgs
NyArNDI0LDcgQEAgc3RkOjp1bmlxdWVfcHRyPEFjY2Vzc0Nhc2U+IEFjY2Vzc0Nhc2U6OmNsb25l
KCkgY29uc3QKICAgICBpZiAoUmFyZURhdGEqIHJhcmVEYXRhID0gbV9yYXJlRGF0YS5nZXQoKSkg
ewogICAgICAgICByZXN1bHQtPm1fcmFyZURhdGEgPSBzdGQ6Om1ha2VfdW5pcXVlPFJhcmVEYXRh
PigpOwogICAgICAgICByZXN1bHQtPm1fcmFyZURhdGEtPnZpYVByb3h5ID0gcmFyZURhdGEtPnZp
YVByb3h5OwotICAgICAgICByZXN1bHQtPm1fcmFyZURhdGEtPmFkZGl0aW9uYWxTZXQgPSByYXJl
RGF0YS0+YWRkaXRpb25hbFNldDsKKyAgICAgICAgcmVzdWx0LT5tX3JhcmVEYXRhLT5leHRyYVdh
dGNocG9pbnRzID0gcmFyZURhdGEtPmV4dHJhV2F0Y2hwb2ludHM7CiAgICAgICAgIC8vIE5PVEU6
IFdlIGRvbid0IGNvcHkgdGhlIGNhbGxMaW5rSW5mbywgc2luY2UgdGhhdCdzIGNyZWF0ZWQgZHVy
aW5nIGNvZGUgZ2VuZXJhdGlvbi4KICAgICAgICAgcmVzdWx0LT5tX3JhcmVEYXRhLT5jdXN0b21B
Y2Nlc3Nvci5vcGFxdWUgPSByYXJlRGF0YS0+Y3VzdG9tQWNjZXNzb3Iub3BhcXVlOwogICAgICAg
ICByZXN1bHQtPm1fcmFyZURhdGEtPmN1c3RvbVNsb3RCYXNlID0gcmFyZURhdGEtPmN1c3RvbVNs
b3RCYXNlOwpAQCAtNDA4LDcgKzQzNCw3IEBAIHN0ZDo6dW5pcXVlX3B0cjxBY2Nlc3NDYXNlPiBB
Y2Nlc3NDYXNlOjpjbG9uZSgpIGNvbnN0CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAotVmVjdG9y
PFdhdGNocG9pbnRTZXQqLCAyPiBBY2Nlc3NDYXNlOjpjb21taXQoVk0mIHZtLCBjb25zdCBJZGVu
dGlmaWVyJiBpZGVudCkKK1ZlY3RvcjxXYXRjaHBvaW50U2V0KiwgMj4gQWNjZXNzQ2FzZTo6Y29t
bWl0KFZNJiwgY29uc3QgSWRlbnRpZmllciYpCiB7CiAgICAgLy8gSXQncyBmaW5lIHRvIGNvbW1p
dCBzb21ldGhpbmcgdGhhdCBpcyBhbHJlYWR5IGNvbW1pdHRlZC4gVGhhdCBhcmlzZXMgd2hlbiB3
ZSBzd2l0Y2ggdG8gdXNpbmcKICAgICAvLyBuZXdseSBhbGxvY2F0ZWQgd2F0Y2hwb2ludHMuIFdo
ZW4gaXQgaGFwcGVucywgaXQncyBub3QgZWZmaWNpZW50IC0gYnV0IHdlIHRoaW5rIHRoYXQncyBP
SwpAQCAtNDE3LDEyICs0NDMsMTAgQEAgVmVjdG9yPFdhdGNocG9pbnRTZXQqLCAyPiBBY2Nlc3ND
YXNlOjpjb21taXQoVk0mIHZtLCBjb25zdCBJZGVudGlmaWVyJiBpZGVudCkKICAgICAKICAgICBW
ZWN0b3I8V2F0Y2hwb2ludFNldCosIDI+IHJlc3VsdDsKICAgICAKLSAgICBpZiAoKHN0cnVjdHVy
ZSgpICYmIHN0cnVjdHVyZSgpLT5uZWVkSW1wdXJlUHJvcGVydHlXYXRjaHBvaW50KCkpCi0gICAg
ICAgIHx8IG1fY29uZGl0aW9uU2V0Lm5lZWRJbXB1cmVQcm9wZXJ0eVdhdGNocG9pbnQoKSkKLSAg
ICAgICAgcmVzdWx0LmFwcGVuZCh2bS5lbnN1cmVXYXRjaHBvaW50U2V0Rm9ySW1wdXJlUHJvcGVy
dHkoaWRlbnQpKTsKLQotICAgIGlmIChhZGRpdGlvbmFsU2V0KCkpCi0gICAgICAgIHJlc3VsdC5h
cHBlbmQoYWRkaXRpb25hbFNldCgpKTsKKyAgICBpZiAoYXV0byBleHRyYVdhdGNocG9pbnRzID0g
dGhpcy0+ZXh0cmFXYXRjaHBvaW50cygpKSB7CisgICAgICAgIGZvciAoYXV0byYgd2F0Y2hwb2lu
dFNldCA6ICpleHRyYVdhdGNocG9pbnRzKQorICAgICAgICAgICAgcmVzdWx0LmFwcGVuZChjb25z
dF9jYXN0PFdhdGNocG9pbnRTZXQqPih3YXRjaHBvaW50U2V0LnB0cigpKSk7CisgICAgfQogICAg
IAogICAgIG1fc3RhdGUgPSBDb21taXR0ZWQ7CiAgICAgCkBAIC00NzgsNyArNTAyLDE1IEBAIGJv
b2wgQWNjZXNzQ2FzZTo6ZG9lc0NhbGxzKFZlY3RvcjxKU0NlbGwqPiogY2VsbHNUb01hcmspIGNv
bnN0CiAKIGJvb2wgQWNjZXNzQ2FzZTo6Y291bGRTdGlsbFN1Y2NlZWQoKSBjb25zdAogewotICAg
IHJldHVybiBtX2NvbmRpdGlvblNldC5zdHJ1Y3R1cmVzRW5zdXJlVmFsaWRpdHlBc3N1bWluZ0lt
cHVyZVByb3BlcnR5V2F0Y2hwb2ludCgpOworICAgIGlmICghbV9jb25kaXRpb25TZXQuc3RydWN0
dXJlc0Vuc3VyZVZhbGlkaXR5QXNzdW1pbmdJbXB1cmVQcm9wZXJ0eVdhdGNocG9pbnQoKSkKKyAg
ICAgICAgcmV0dXJuIGZhbHNlOworICAgIGlmIChhdXRvIGV4dHJhV2F0Y2hwb2ludHMgPSB0aGlz
LT5leHRyYVdhdGNocG9pbnRzKCkpIHsKKyAgICAgICAgZm9yIChhdXRvJiB3YXRjaHBvaW50U2V0
IDogKmV4dHJhV2F0Y2hwb2ludHMpIHsKKyAgICAgICAgICAgIGlmICh3YXRjaHBvaW50U2V0LT5o
YXNCZWVuSW52YWxpZGF0ZWQoKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAg
ICAgIH0KKyAgICB9CisgICAgcmV0dXJuIHRydWU7CiB9CiAKIGJvb2wgQWNjZXNzQ2FzZTo6Y2Fu
QmVSZXBsYWNlZEJ5TWVnYW1vcnBoaWNMb2FkKCkgY29uc3QKQEAgLTQ4OSw3ICs1MjEsNyBAQCBi
b29sIEFjY2Vzc0Nhc2U6OmNhbkJlUmVwbGFjZWRCeU1lZ2Ftb3JwaGljTG9hZCgpIGNvbnN0CiAg
ICAgcmV0dXJuIHR5cGUoKSA9PSBMb2FkCiAgICAgICAgICYmICF2aWFQcm94eSgpCiAgICAgICAg
ICYmIGNvbmRpdGlvblNldCgpLmlzRW1wdHkoKQotICAgICAgICAmJiAhYWRkaXRpb25hbFNldCgp
CisgICAgICAgICYmICFleHRyYVdhdGNocG9pbnRzKCkKICAgICAgICAgJiYgIWN1c3RvbVNsb3RC
YXNlKCk7CiB9CiAKQEAgLTUzNSw4ICs1NjcsMTMgQEAgdm9pZCBBY2Nlc3NDYXNlOjpkdW1wKFBy
aW50U3RyZWFtJiBvdXQpIGNvbnN0CiAgICAgaWYgKFJhcmVEYXRhKiByYXJlRGF0YSA9IG1fcmFy
ZURhdGEuZ2V0KCkpIHsKICAgICAgICAgaWYgKHJhcmVEYXRhLT52aWFQcm94eSkKICAgICAgICAg
ICAgIG91dC5wcmludChjb21tYSwgInZpYVByb3h5ID0gIiwgcmFyZURhdGEtPnZpYVByb3h5KTsK
LSAgICAgICAgaWYgKHJhcmVEYXRhLT5hZGRpdGlvbmFsU2V0KQotICAgICAgICAgICAgb3V0LnBy
aW50KGNvbW1hLCAiYWRkaXRpb25hbFNldCA9ICIsIFJhd1BvaW50ZXIocmFyZURhdGEtPmFkZGl0
aW9uYWxTZXQuZ2V0KCkpKTsKKyAgICAgICAgaWYgKGF1dG8gZXh0cmFXYXRjaHBvaW50cyA9IHRo
aXMtPmV4dHJhV2F0Y2hwb2ludHMoKSkgeworICAgICAgICAgICAgb3V0LnByaW50KGNvbW1hLCAi
ZXh0cmFXYXRjaHBvaW50cyA9IFsiKTsKKyAgICAgICAgICAgIENvbW1hUHJpbnRlciBleHRyYVdh
dGNocG9pbnRzQ29tbWE7CisgICAgICAgICAgICBmb3IgKGF1dG8mIHdhdGNocG9pbnRTZXQgOiAq
ZXh0cmFXYXRjaHBvaW50cykKKyAgICAgICAgICAgICAgICBvdXQucHJpbnQoZXh0cmFXYXRjaHBv
aW50c0NvbW1hLCBSYXdQb2ludGVyKHdhdGNocG9pbnRTZXQucHRyKCkpKTsKKyAgICAgICAgICAg
IG91dC5wcmludChjb21tYSwgIl0iKTsKKyAgICAgICAgfQogICAgICAgICBpZiAocmFyZURhdGEt
PmNhbGxMaW5rSW5mbykKICAgICAgICAgICAgIG91dC5wcmludChjb21tYSwgImNhbGxMaW5rSW5m
byA9ICIsIFJhd1BvaW50ZXIocmFyZURhdGEtPmNhbGxMaW5rSW5mby5nZXQoKSkpOwogICAgICAg
ICBpZiAocmFyZURhdGEtPmN1c3RvbUFjY2Vzc29yLm9wYXF1ZSkKQEAgLTE3NTIsNyArMTc4OSw3
IEBAIEFjY2Vzc0dlbmVyYXRpb25SZXN1bHQgUG9seW1vcnBoaWNBY2Nlc3M6OnJlZ2VuZXJhdGUo
CiAgICAgICAgIH0KICAgICAgICAgCiAgICAgICAgIGlmIChudW1TZWxmTG9hZHMgPj0gT3B0aW9u
czo6bWVnYW1vcnBoaWNMb2FkQ29zdCgpKSB7Ci0gICAgICAgICAgICBpZiAoYXV0byBtZWdhID0g
QWNjZXNzQ2FzZTo6bWVnYW1vcnBoaWNMb2FkKHZtLCBjb2RlQmxvY2spKSB7CisgICAgICAgICAg
ICBpZiAoYXV0byBtZWdhID0gQWNjZXNzQ2FzZTo6bWVnYW1vcnBoaWNMb2FkKHZtLCBjb2RlQmxv
Y2ssIGlkZW50KSkgewogICAgICAgICAgICAgICAgIGNhc2VzLnJlbW92ZUFsbE1hdGNoaW5nKAog
ICAgICAgICAgICAgICAgICAgICBbJl0gKHN0ZDo6dW5pcXVlX3B0cjxBY2Nlc3NDYXNlPiYgbmV3
Q2FzZSkgLT4gYm9vbCB7CiAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbmV3Q2FzZS0+
Y2FuQmVSZXBsYWNlZEJ5TWVnYW1vcnBoaWNMb2FkKCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvYnl0ZWNvZGUvUG9seW1vcnBoaWNBY2Nlc3MuaCBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ieXRlY29kZS9Qb2x5bW9ycGhpY0FjY2Vzcy5oCmluZGV4IDZmNzAxYzVmYWY5ZjFj
M2MwNzYwYTAzNzNmMzFlNjg3ZjNlYTEwNmQuLjRmYmQ0YWM3ZDY5Njc5ZGMzZWE3ZmM3MWYwZGM0
ZTFmZTQ3NjQ1NGIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Q
b2x5bW9ycGhpY0FjY2Vzcy5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Q
b2x5bW9ycGhpY0FjY2Vzcy5oCkBAIC0zNCw2ICszNCw3IEBACiAjaW5jbHVkZSAiT2JqZWN0UHJv
cGVydHlDb25kaXRpb25TZXQuaCIKICNpbmNsdWRlICJTY3JhdGNoUmVnaXN0ZXJBbGxvY2F0b3Iu
aCIKICNpbmNsdWRlICJTdHJ1Y3R1cmUuaCIKKyNpbmNsdWRlIDx3dGYvQm94Lmg+CiAjaW5jbHVk
ZSA8d3RmL1ZlY3Rvci5oPgogCiBuYW1lc3BhY2UgSlNDIHsKQEAgLTEyMiwxMyArMTIzLDEzIEBA
IGNsYXNzIEFjY2Vzc0Nhc2UgewogICAgIH07CiAKICAgICBzdGF0aWMgc3RkOjp1bmlxdWVfcHRy
PEFjY2Vzc0Nhc2U+IHRyeUdldCgKLSAgICAgICAgVk0mLCBKU0NlbGwqIG93bmVyLCBBY2Nlc3NU
eXBlLCBQcm9wZXJ0eU9mZnNldCwgU3RydWN0dXJlKiwKKyAgICAgICAgVk0mLCBKU0NlbGwqIG93
bmVyLCBjb25zdCBJZGVudGlmaWVyJiwgQWNjZXNzVHlwZSwgUHJvcGVydHlPZmZzZXQsIFN0cnVj
dHVyZSosCiAgICAgICAgIGNvbnN0IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0JiA9IE9iamVj
dFByb3BlcnR5Q29uZGl0aW9uU2V0KCksCiAgICAgICAgIGJvb2wgdmlhUHJveHkgPSBmYWxzZSwK
ICAgICAgICAgV2F0Y2hwb2ludFNldCogYWRkaXRpb25hbFNldCA9IG51bGxwdHIpOwogCiAgICAg
c3RhdGljIHN0ZDo6dW5pcXVlX3B0cjxBY2Nlc3NDYXNlPiBnZXQoCi0gICAgICAgIFZNJiwgSlND
ZWxsKiBvd25lciwgQWNjZXNzVHlwZSwgUHJvcGVydHlPZmZzZXQsIFN0cnVjdHVyZSosCisgICAg
ICAgIFZNJiwgSlNDZWxsKiBvd25lciwgY29uc3QgSWRlbnRpZmllciYsIEFjY2Vzc1R5cGUsIFBy
b3BlcnR5T2Zmc2V0LCBTdHJ1Y3R1cmUqLAogICAgICAgICBjb25zdCBPYmplY3RQcm9wZXJ0eUNv
bmRpdGlvblNldCYgPSBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldCgpLAogICAgICAgICBib29s
IHZpYVByb3h5ID0gZmFsc2UsCiAgICAgICAgIFdhdGNocG9pbnRTZXQqIGFkZGl0aW9uYWxTZXQg
PSBudWxscHRyLApAQCAtMTM2LDI3ICsxMzcsMjggQEAgY2xhc3MgQWNjZXNzQ2FzZSB7CiAgICAg
ICAgIEpTT2JqZWN0KiBjdXN0b21TbG90QmFzZSA9IG51bGxwdHIsCiAgICAgICAgIERPTUpJVDo6
R2V0dGVyU2V0dGVyKiA9IG51bGxwdHIpOwogICAgIAotICAgIHN0YXRpYyBzdGQ6OnVuaXF1ZV9w
dHI8QWNjZXNzQ2FzZT4gbWVnYW1vcnBoaWNMb2FkKFZNJiwgSlNDZWxsKiBvd25lcik7CisgICAg
c3RhdGljIHN0ZDo6dW5pcXVlX3B0cjxBY2Nlc3NDYXNlPiBtZWdhbW9ycGhpY0xvYWQoVk0mLCBK
U0NlbGwqIG93bmVyLCBjb25zdCBJZGVudGlmaWVyJik7CisKKyAgICBzdGF0aWMgc3RkOjp1bmlx
dWVfcHRyPEFjY2Vzc0Nhc2U+IGdldExlbmd0aChWTSYsIEpTQ2VsbCogb3duZXIsIEFjY2Vzc1R5
cGUpOworCisgICAgc3RhdGljIHN0ZDo6dW5pcXVlX3B0cjxBY2Nlc3NDYXNlPiBnZXRJbnRyaW5z
aWMoVk0mLCBKU0NlbGwqIG93bmVyLCBjb25zdCBJZGVudGlmaWVyJiwgSlNGdW5jdGlvbiogaW50
cmluc2ljLCBQcm9wZXJ0eU9mZnNldCwgU3RydWN0dXJlKiwgY29uc3QgT2JqZWN0UHJvcGVydHlD
b25kaXRpb25TZXQmKTsKICAgICAKLSAgICBzdGF0aWMgc3RkOjp1bmlxdWVfcHRyPEFjY2Vzc0Nh
c2U+IHJlcGxhY2UoVk0mLCBKU0NlbGwqIG93bmVyLCBTdHJ1Y3R1cmUqLCBQcm9wZXJ0eU9mZnNl
dCk7CisgICAgc3RhdGljIHN0ZDo6dW5pcXVlX3B0cjxBY2Nlc3NDYXNlPiByZXBsYWNlKFZNJiwg
SlNDZWxsKiBvd25lciwgY29uc3QgSWRlbnRpZmllciYsIFN0cnVjdHVyZSosIFByb3BlcnR5T2Zm
c2V0KTsKIAogICAgIHN0YXRpYyBzdGQ6OnVuaXF1ZV9wdHI8QWNjZXNzQ2FzZT4gdHJhbnNpdGlv
bigKLSAgICAgICAgVk0mLCBKU0NlbGwqIG93bmVyLCBTdHJ1Y3R1cmUqIG9sZFN0cnVjdHVyZSwg
U3RydWN0dXJlKiBuZXdTdHJ1Y3R1cmUsIFByb3BlcnR5T2Zmc2V0LAorICAgICAgICBWTSYsIEpT
Q2VsbCogb3duZXIsIGNvbnN0IElkZW50aWZpZXImLCBTdHJ1Y3R1cmUqIG9sZFN0cnVjdHVyZSwg
U3RydWN0dXJlKiBuZXdTdHJ1Y3R1cmUsIFByb3BlcnR5T2Zmc2V0LAogICAgICAgICBjb25zdCBP
YmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldCYgPSBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldCgp
KTsKIAogICAgIHN0YXRpYyBzdGQ6OnVuaXF1ZV9wdHI8QWNjZXNzQ2FzZT4gc2V0dGVyKAotICAg
ICAgICBWTSYsIEpTQ2VsbCogb3duZXIsIEFjY2Vzc1R5cGUsIFN0cnVjdHVyZSosIFByb3BlcnR5
T2Zmc2V0LAorICAgICAgICBWTSYsIEpTQ2VsbCogb3duZXIsIGNvbnN0IElkZW50aWZpZXImLCBB
Y2Nlc3NUeXBlLCBTdHJ1Y3R1cmUqLCBQcm9wZXJ0eU9mZnNldCwKICAgICAgICAgY29uc3QgT2Jq
ZWN0UHJvcGVydHlDb25kaXRpb25TZXQmLCBQdXRQcm9wZXJ0eVNsb3Q6OlB1dFZhbHVlRnVuYyA9
IG51bGxwdHIsCiAgICAgICAgIEpTT2JqZWN0KiBjdXN0b21TbG90QmFzZSA9IG51bGxwdHIpOwog
CiAgICAgc3RhdGljIHN0ZDo6dW5pcXVlX3B0cjxBY2Nlc3NDYXNlPiBpbigKLSAgICAgICAgVk0m
LCBKU0NlbGwqIG93bmVyLCBBY2Nlc3NUeXBlLCBTdHJ1Y3R1cmUqLAorICAgICAgICBWTSYsIEpT
Q2VsbCogb3duZXIsIGNvbnN0IElkZW50aWZpZXImLCBBY2Nlc3NUeXBlLCBTdHJ1Y3R1cmUqLAog
ICAgICAgICBjb25zdCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldCYgPSBPYmplY3RQcm9wZXJ0
eUNvbmRpdGlvblNldCgpKTsKIAotICAgIHN0YXRpYyBzdGQ6OnVuaXF1ZV9wdHI8QWNjZXNzQ2Fz
ZT4gZ2V0TGVuZ3RoKFZNJiwgSlNDZWxsKiBvd25lciwgQWNjZXNzVHlwZSk7Ci0gICAgc3RhdGlj
IHN0ZDo6dW5pcXVlX3B0cjxBY2Nlc3NDYXNlPiBnZXRJbnRyaW5zaWMoVk0mLCBKU0NlbGwqIG93
bmVyLCBKU0Z1bmN0aW9uKiBpbnRyaW5zaWMsIFByb3BlcnR5T2Zmc2V0LCBTdHJ1Y3R1cmUqLCBj
b25zdCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldCYpOwotICAgIAotICAgIHN0YXRpYyBzdGQ6
OnVuaXF1ZV9wdHI8QWNjZXNzQ2FzZT4gZnJvbVN0cnVjdHVyZVN0dWJJbmZvKFZNJiwgSlNDZWxs
KiBvd25lciwgU3RydWN0dXJlU3R1YkluZm8mKTsKKyAgICBzdGF0aWMgc3RkOjp1bmlxdWVfcHRy
PEFjY2Vzc0Nhc2U+IGZyb21TdHJ1Y3R1cmVTdHViSW5mbyhWTSYsIEpTQ2VsbCogb3duZXIsIGNv
bnN0IElkZW50aWZpZXImLCBTdHJ1Y3R1cmVTdHViSW5mbyYpOwogCiAgICAgfkFjY2Vzc0Nhc2Uo
KTsKICAgICAKQEAgLTE5Niw5ICsxOTgsMTEgQEAgY2xhc3MgQWNjZXNzQ2FzZSB7CiAgICAgICAg
IHJldHVybiBtX3JhcmVEYXRhLT5kb21KSVQ7CiAgICAgfQogCi0gICAgV2F0Y2hwb2ludFNldCog
YWRkaXRpb25hbFNldCgpIGNvbnN0CisgICAgQm94PEhhc2hTZXQ8UmVmPFdhdGNocG9pbnRTZXQ+
Pj4gZXh0cmFXYXRjaHBvaW50cygpIGNvbnN0CiAgICAgewotICAgICAgICByZXR1cm4gbV9yYXJl
RGF0YSA/IG1fcmFyZURhdGEtPmFkZGl0aW9uYWxTZXQuZ2V0KCkgOiBudWxscHRyOworICAgICAg
ICBpZiAoIW1fcmFyZURhdGEpCisgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICAgICAg
cmV0dXJuIG1fcmFyZURhdGEtPmV4dHJhV2F0Y2hwb2ludHM7CiAgICAgfQogCiAgICAgSlNPYmpl
Y3QqIGN1c3RvbVNsb3RCYXNlKCkgY29uc3QKQEAgLTI3OCw2ICsyODIsOSBAQCBjbGFzcyBBY2Nl
c3NDYXNlIHsKICAgICB2b2lkIGdlbmVyYXRlSW1wbChBY2Nlc3NHZW5lcmF0aW9uU3RhdGUmKTsK
ICAgICB2b2lkIGVtaXRJbnRyaW5zaWNHZXR0ZXIoQWNjZXNzR2VuZXJhdGlvblN0YXRlJik7CiAg
ICAgdm9pZCBlbWl0RE9NSklUR2V0dGVyKEFjY2Vzc0dlbmVyYXRpb25TdGF0ZSYsIEdQUlJlZyBi
YXNlRm9yR2V0R1BSKTsKKworICAgIHZvaWQgaW5pdGlhbGl6ZUltcHVyZVByb3BlcnR5U2V0SWZO
ZWNlc3NhcnkoVk0mLCBjb25zdCBJZGVudGlmaWVyJik7CisgICAgdm9pZCBhZGRFeHRyYVdhdGNo
cG9pbnRTZXQoV2F0Y2hwb2ludFNldCYpOwogICAgIAogICAgIEFjY2Vzc1R5cGUgbV90eXBlIHsg
TG9hZCB9OwogICAgIFN0YXRlIG1fc3RhdGUgeyBQcmltb3JkaWFsIH07CkBAIC0zMDEsNyArMzA4
LDcgQEAgY2xhc3MgQWNjZXNzQ2FzZSB7CiAgICAgICAgIH0KICAgICAgICAgCiAgICAgICAgIGJv
b2wgdmlhUHJveHk7Ci0gICAgICAgIFJlZlB0cjxXYXRjaHBvaW50U2V0PiBhZGRpdGlvbmFsU2V0
OworICAgICAgICBCb3g8SGFzaFNldDxSZWY8V2F0Y2hwb2ludFNldD4+PiBleHRyYVdhdGNocG9p
bnRzOwogICAgICAgICAvLyBGSVhNRTogVGhpcyBzaG91bGQgcHJvYmFibHkgbGl2ZSBpbiB0aGUg
c3R1YiByb3V0aW5lIG9iamVjdC4KICAgICAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTE1NjQ1NgogICAgICAgICBzdGQ6OnVuaXF1ZV9wdHI8Q2FsbExpbmtJ
bmZvPiBjYWxsTGlua0luZm87CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0
ZWNvZGUvUHV0QnlJZFN0YXR1cy5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUv
UHV0QnlJZFN0YXR1cy5jcHAKaW5kZXggNDNmZWVmNWE1YjllNmYwZjFhNjkzZDExM2Q1MjQ5MmZk
YWQ5NDQ3YS4uZmUzY2E4MWQyNjQzYzYxODE5N2NhZmYxYzg1OWM4NjhlZDc2Y2Y4MyAxMDA2NDQK
LS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1B1dEJ5SWRTdGF0dXMuY3BwCisr
KyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9QdXRCeUlkU3RhdHVzLmNwcApAQCAt
MjE1LDcgKzIxNSw3IEBAIFB1dEJ5SWRTdGF0dXMgUHV0QnlJZFN0YXR1czo6Y29tcHV0ZUZvclN0
dWJJbmZvKAogICAgICAgICAgICAgICAgIFN0cnVjdHVyZSogc3RydWN0dXJlID0gYWNjZXNzLnN0
cnVjdHVyZSgpOwogICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgIENvbXBsZXhHZXRT
dGF0dXMgY29tcGxleEdldFN0YXR1cyA9IENvbXBsZXhHZXRTdGF0dXM6OmNvbXB1dGVGb3IoCi0g
ICAgICAgICAgICAgICAgICAgIHN0cnVjdHVyZSwgYWNjZXNzLmNvbmRpdGlvblNldCgpLCB1aWQp
OworICAgICAgICAgICAgICAgICAgICBzdHJ1Y3R1cmUsIGFjY2Vzcy5jb25kaXRpb25TZXQoKSwg
bnVsbHB0ciwgdWlkKTsKICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICBzd2l0Y2gg
KGNvbXBsZXhHZXRTdGF0dXMua2luZCgpKSB7CiAgICAgICAgICAgICAgICAgY2FzZSBDb21wbGV4
R2V0U3RhdHVzOjpTaG91bGRTa2lwOgpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2J5dGVjb2RlL1N0cnVjdHVyZVN0dWJJbmZvLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
eXRlY29kZS9TdHJ1Y3R1cmVTdHViSW5mby5jcHAKaW5kZXggMzhlNWNlZjkyMzdhMDg2YjZiNDYx
ZmZkZjM5ZjlhZDQ0Y2VlN2I2NS4uNzJiYzhhYzBkZjM0ZTMzZTU1YzQ3YTNlOTQxNWM2OGE3ZTlm
OTAzZiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1N0cnVjdHVy
ZVN0dWJJbmZvLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvU3RydWN0
dXJlU3R1YkluZm8uY3BwCkBAIC0xNDUsNyArMTQ1LDcgQEAgQWNjZXNzR2VuZXJhdGlvblJlc3Vs
dCBTdHJ1Y3R1cmVTdHViSW5mbzo6YWRkQWNjZXNzQ2FzZSgKICAgICAgICAgVmVjdG9yPHN0ZDo6
dW5pcXVlX3B0cjxBY2Nlc3NDYXNlPiwgMj4gYWNjZXNzQ2FzZXM7CiAgICAgICAgIAogICAgICAg
ICBzdGQ6OnVuaXF1ZV9wdHI8QWNjZXNzQ2FzZT4gcHJldmlvdXNDYXNlID0KLSAgICAgICAgICAg
IEFjY2Vzc0Nhc2U6OmZyb21TdHJ1Y3R1cmVTdHViSW5mbyh2bSwgY29kZUJsb2NrLCAqdGhpcyk7
CisgICAgICAgICAgICBBY2Nlc3NDYXNlOjpmcm9tU3RydWN0dXJlU3R1YkluZm8odm0sIGNvZGVC
bG9jaywgaWRlbnQsICp0aGlzKTsKICAgICAgICAgaWYgKHByZXZpb3VzQ2FzZSkKICAgICAgICAg
ICAgIGFjY2Vzc0Nhc2VzLmFwcGVuZChXVEZNb3ZlKHByZXZpb3VzQ2FzZSkpOwogICAgICAgICAK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvUmVwYXRjaC5jcHAgYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaml0L1JlcGF0Y2guY3BwCmluZGV4IGJhYTViN2QyMjZhZDllZWJh
MTQwOTNjNjQxZmE2YjNhMmE4YjBhZmIuLmQ5MzQwODIxNjEwYmY4OWRkMmYwZTY1ODRlNmM2Yzc5
MWE2MGRjNjYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvUmVwYXRjaC5j
cHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9SZXBhdGNoLmNwcApAQCAtMjc4LDkg
KzI3OCw5IEBAIHN0YXRpYyBJbmxpbmVDYWNoZUFjdGlvbiB0cnlDYWNoZUdldEJ5SUQoRXhlY1N0
YXRlKiBleGVjLCBKU1ZhbHVlIGJhc2VWYWx1ZSwgY29uCiAgICAgICAgICAgICBlbHNlCiAgICAg
ICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKIAotICAgICAgICAgICAg
bmV3Q2FzZSA9IEFjY2Vzc0Nhc2U6OnRyeUdldCh2bSwgY29kZUJsb2NrLCB0eXBlLCBvZmZzZXQs
IHN0cnVjdHVyZSwgY29uZGl0aW9uU2V0LCBsb2FkVGFyZ2V0RnJvbVByb3h5LCBzbG90LndhdGNo
cG9pbnRTZXQoKSk7CisgICAgICAgICAgICBuZXdDYXNlID0gQWNjZXNzQ2FzZTo6dHJ5R2V0KHZt
LCBjb2RlQmxvY2ssIHByb3BlcnR5TmFtZSwgdHlwZSwgb2Zmc2V0LCBzdHJ1Y3R1cmUsIGNvbmRp
dGlvblNldCwgbG9hZFRhcmdldEZyb21Qcm94eSwgc2xvdC53YXRjaHBvaW50U2V0KCkpOwogICAg
ICAgICB9IGVsc2UgaWYgKCFsb2FkVGFyZ2V0RnJvbVByb3h5ICYmIGdldHRlciAmJiBBY2Nlc3ND
YXNlOjpjYW5FbWl0SW50cmluc2ljR2V0dGVyKGdldHRlciwgc3RydWN0dXJlKSkKLSAgICAgICAg
ICAgIG5ld0Nhc2UgPSBBY2Nlc3NDYXNlOjpnZXRJbnRyaW5zaWModm0sIGNvZGVCbG9jaywgZ2V0
dGVyLCBzbG90LmNhY2hlZE9mZnNldCgpLCBzdHJ1Y3R1cmUsIGNvbmRpdGlvblNldCk7CisgICAg
ICAgICAgICBuZXdDYXNlID0gQWNjZXNzQ2FzZTo6Z2V0SW50cmluc2ljKHZtLCBjb2RlQmxvY2ss
IHByb3BlcnR5TmFtZSwgZ2V0dGVyLCBzbG90LmNhY2hlZE9mZnNldCgpLCBzdHJ1Y3R1cmUsIGNv
bmRpdGlvblNldCk7CiAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgQWNjZXNzQ2FzZTo6QWNj
ZXNzVHlwZSB0eXBlOwogICAgICAgICAgICAgaWYgKHNsb3QuaXNDYWNoZWFibGVWYWx1ZSgpKQpA
QCAtMjk1LDcgKzI5NSw3IEBAIHN0YXRpYyBJbmxpbmVDYWNoZUFjdGlvbiB0cnlDYWNoZUdldEJ5
SUQoRXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVlIGJhc2VWYWx1ZSwgY29uCiAgICAgICAgICAgICAg
ICAgdHlwZSA9IEFjY2Vzc0Nhc2U6OkN1c3RvbVZhbHVlR2V0dGVyOwogCiAgICAgICAgICAgICBu
ZXdDYXNlID0gQWNjZXNzQ2FzZTo6Z2V0KAotICAgICAgICAgICAgICAgIHZtLCBjb2RlQmxvY2ss
IHR5cGUsIG9mZnNldCwgc3RydWN0dXJlLCBjb25kaXRpb25TZXQsIGxvYWRUYXJnZXRGcm9tUHJv
eHksCisgICAgICAgICAgICAgICAgdm0sIGNvZGVCbG9jaywgcHJvcGVydHlOYW1lLCB0eXBlLCBv
ZmZzZXQsIHN0cnVjdHVyZSwgY29uZGl0aW9uU2V0LCBsb2FkVGFyZ2V0RnJvbVByb3h5LAogICAg
ICAgICAgICAgICAgIHNsb3Qud2F0Y2hwb2ludFNldCgpLCBzbG90LmlzQ2FjaGVhYmxlQ3VzdG9t
KCkgPyBzbG90LmN1c3RvbUdldHRlcigpIDogbnVsbHB0ciwKICAgICAgICAgICAgICAgICBzbG90
LmlzQ2FjaGVhYmxlQ3VzdG9tKCkgPyBzbG90LnNsb3RCYXNlKCkgOiBudWxscHRyLAogICAgICAg
ICAgICAgICAgIGRvbUpJVCk7CkBAIC0zODYsNyArMzg2LDcgQEAgc3RhdGljIElubGluZUNhY2hl
QWN0aW9uIHRyeUNhY2hlUHV0QnlJRChFeGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWUgYmFzZVZhbHVl
LCBTdHIKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgIG5l
d0Nhc2UgPSBBY2Nlc3NDYXNlOjpyZXBsYWNlKHZtLCBjb2RlQmxvY2ssIHN0cnVjdHVyZSwgc2xv
dC5jYWNoZWRPZmZzZXQoKSk7CisgICAgICAgICAgICBuZXdDYXNlID0gQWNjZXNzQ2FzZTo6cmVw
bGFjZSh2bSwgY29kZUJsb2NrLCBpZGVudCwgc3RydWN0dXJlLCBzbG90LmNhY2hlZE9mZnNldCgp
KTsKICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgIEFTU0VSVChzbG90LnR5cGUoKSA9PSBQ
dXRQcm9wZXJ0eVNsb3Q6Ok5ld1Byb3BlcnR5KTsKIApAQCAtNDE5LDcgKzQxOSw3IEBAIHN0YXRp
YyBJbmxpbmVDYWNoZUFjdGlvbiB0cnlDYWNoZVB1dEJ5SUQoRXhlY1N0YXRlKiBleGVjLCBKU1Zh
bHVlIGJhc2VWYWx1ZSwgU3RyCiAgICAgICAgICAgICAgICAgICAgIHJldHVybiBHaXZlVXBPbkNh
Y2hlOwogICAgICAgICAgICAgfQogCi0gICAgICAgICAgICBuZXdDYXNlID0gQWNjZXNzQ2FzZTo6
dHJhbnNpdGlvbih2bSwgY29kZUJsb2NrLCBzdHJ1Y3R1cmUsIG5ld1N0cnVjdHVyZSwgb2Zmc2V0
LCBjb25kaXRpb25TZXQpOworICAgICAgICAgICAgbmV3Q2FzZSA9IEFjY2Vzc0Nhc2U6OnRyYW5z
aXRpb24odm0sIGNvZGVCbG9jaywgaWRlbnQsIHN0cnVjdHVyZSwgbmV3U3RydWN0dXJlLCBvZmZz
ZXQsIGNvbmRpdGlvblNldCk7CiAgICAgICAgIH0KICAgICB9IGVsc2UgaWYgKHNsb3QuaXNDYWNo
ZWFibGVDdXN0b20oKSB8fCBzbG90LmlzQ2FjaGVhYmxlU2V0dGVyKCkpIHsKICAgICAgICAgaWYg
KHNsb3QuaXNDYWNoZWFibGVDdXN0b20oKSkgewpAQCAtNDM0LDcgKzQzNCw3IEBAIHN0YXRpYyBJ
bmxpbmVDYWNoZUFjdGlvbiB0cnlDYWNoZVB1dEJ5SUQoRXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVl
IGJhc2VWYWx1ZSwgU3RyCiAgICAgICAgICAgICB9CiAKICAgICAgICAgICAgIG5ld0Nhc2UgPSBB
Y2Nlc3NDYXNlOjpzZXR0ZXIoCi0gICAgICAgICAgICAgICAgdm0sIGNvZGVCbG9jaywgc2xvdC5p
c0N1c3RvbUFjY2Vzc29yKCkgPyBBY2Nlc3NDYXNlOjpDdXN0b21BY2Nlc3NvclNldHRlciA6IEFj
Y2Vzc0Nhc2U6OkN1c3RvbVZhbHVlU2V0dGVyLCBzdHJ1Y3R1cmUsIGludmFsaWRPZmZzZXQsIGNv
bmRpdGlvblNldCwKKyAgICAgICAgICAgICAgICB2bSwgY29kZUJsb2NrLCBpZGVudCwgc2xvdC5p
c0N1c3RvbUFjY2Vzc29yKCkgPyBBY2Nlc3NDYXNlOjpDdXN0b21BY2Nlc3NvclNldHRlciA6IEFj
Y2Vzc0Nhc2U6OkN1c3RvbVZhbHVlU2V0dGVyLCBzdHJ1Y3R1cmUsIGludmFsaWRPZmZzZXQsIGNv
bmRpdGlvblNldCwKICAgICAgICAgICAgICAgICBzbG90LmN1c3RvbVNldHRlcigpLCBzbG90LmJh
c2UoKSk7CiAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICBPYmplY3RQcm9wZXJ0eUNvbmRp
dGlvblNldCBjb25kaXRpb25TZXQ7CkBAIC00NTEsNyArNDUxLDcgQEAgc3RhdGljIElubGluZUNh
Y2hlQWN0aW9uIHRyeUNhY2hlUHV0QnlJRChFeGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWUgYmFzZVZh
bHVlLCBTdHIKICAgICAgICAgICAgICAgICBvZmZzZXQgPSBzbG90LmNhY2hlZE9mZnNldCgpOwog
CiAgICAgICAgICAgICBuZXdDYXNlID0gQWNjZXNzQ2FzZTo6c2V0dGVyKAotICAgICAgICAgICAg
ICAgIHZtLCBjb2RlQmxvY2ssIEFjY2Vzc0Nhc2U6OlNldHRlciwgc3RydWN0dXJlLCBvZmZzZXQs
IGNvbmRpdGlvblNldCk7CisgICAgICAgICAgICAgICAgdm0sIGNvZGVCbG9jaywgaWRlbnQsIEFj
Y2Vzc0Nhc2U6OlNldHRlciwgc3RydWN0dXJlLCBvZmZzZXQsIGNvbmRpdGlvblNldCk7CiAgICAg
ICAgIH0KICAgICB9CiAKQEAgLTUxNCw3ICs1MTQsNyBAQCBzdGF0aWMgSW5saW5lQ2FjaGVBY3Rp
b24gdHJ5UmVwYXRjaEluKAogICAgIExPR19JQygoSUNFdmVudDo6SW5BZGRBY2Nlc3NDYXNlLCBz
dHJ1Y3R1cmUtPmNsYXNzSW5mbygpLCBpZGVudCkpOwogCiAgICAgc3RkOjp1bmlxdWVfcHRyPEFj
Y2Vzc0Nhc2U+IG5ld0Nhc2UgPSBBY2Nlc3NDYXNlOjppbigKLSAgICAgICAgdm0sIGNvZGVCbG9j
aywgd2FzRm91bmQgPyBBY2Nlc3NDYXNlOjpJbkhpdCA6IEFjY2Vzc0Nhc2U6OkluTWlzcywgc3Ry
dWN0dXJlLCBjb25kaXRpb25TZXQpOworICAgICAgICB2bSwgY29kZUJsb2NrLCBpZGVudCwgd2Fz
Rm91bmQgPyBBY2Nlc3NDYXNlOjpJbkhpdCA6IEFjY2Vzc0Nhc2U6OkluTWlzcywgc3RydWN0dXJl
LCBjb25kaXRpb25TZXQpOwogCiAgICAgQWNjZXNzR2VuZXJhdGlvblJlc3VsdCByZXN1bHQgPSBz
dHViSW5mby5hZGRBY2Nlc3NDYXNlKGNvZGVCbG9jaywgaWRlbnQsIFdURk1vdmUobmV3Q2FzZSkp
OwogICAgIApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVk0uY3Bw
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVk0uY3BwCmluZGV4IDM0ZThiOTVjMTgy
OGI3NWRjZDliODc3Yzg4YjI5ODA0ZTFmZTFjMzguLjIxZjFjYjEwZTBiOWZlZjA4NWI1NGNlOGNl
NzIwZjlkZDdlYmIyMTkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L1ZNLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9WTS5jcHAKQEAgLTc2
NSwxMSArNzY1LDYgQEAgV2F0Y2hwb2ludFNldCogVk06OmVuc3VyZVdhdGNocG9pbnRTZXRGb3JJ
bXB1cmVQcm9wZXJ0eShjb25zdCBJZGVudGlmaWVyJiBwcm9wZXIKICAgICByZXR1cm4gcmVzdWx0
Lml0ZXJhdG9yLT52YWx1ZS5nZXQoKTsKIH0KIAotdm9pZCBWTTo6cmVnaXN0ZXJXYXRjaHBvaW50
Rm9ySW1wdXJlUHJvcGVydHkoY29uc3QgSWRlbnRpZmllciYgcHJvcGVydHlOYW1lLCBXYXRjaHBv
aW50KiB3YXRjaHBvaW50KQotewotICAgIGVuc3VyZVdhdGNocG9pbnRTZXRGb3JJbXB1cmVQcm9w
ZXJ0eShwcm9wZXJ0eU5hbWUpLT5hZGQod2F0Y2hwb2ludCk7Ci19Ci0KIHZvaWQgVk06OmFkZElt
cHVyZVByb3BlcnR5KGNvbnN0IFN0cmluZyYgcHJvcGVydHlOYW1lKQogewogICAgIGlmIChSZWZQ
dHI8V2F0Y2hwb2ludFNldD4gd2F0Y2hwb2ludFNldCA9IG1faW1wdXJlUHJvcGVydHlXYXRjaHBv
aW50U2V0cy50YWtlKHByb3BlcnR5TmFtZSkpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9WTS5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVk0uaApp
bmRleCAyOGE5YjYzMzYxNzA4OGNkMzllZTdhZWUyNGYwZTkwMzI3OGEwNjRjLi5mNWM5Mzg0Mzdl
MGQyNzM5M2QzMjk2YmNmN2JlOTQ1ZjZmMGY1NTk1IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9WTS5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L1ZNLmgKQEAgLTU5OCw3ICs1OTgsNiBAQCBjbGFzcyBWTSA6IHB1YmxpYyBUaHJlYWRTYWZlUmVm
Q291bnRlZDxWTT4gewogICAgIEpTX0VYUE9SVF9QUklWQVRFIHZvaWQgZGVsZXRlQWxsTGlua2Vk
Q29kZSgpOwogCiAgICAgV2F0Y2hwb2ludFNldCogZW5zdXJlV2F0Y2hwb2ludFNldEZvckltcHVy
ZVByb3BlcnR5KGNvbnN0IElkZW50aWZpZXImKTsKLSAgICB2b2lkIHJlZ2lzdGVyV2F0Y2hwb2lu
dEZvckltcHVyZVByb3BlcnR5KGNvbnN0IElkZW50aWZpZXImLCBXYXRjaHBvaW50Kik7CiAgICAg
CiAgICAgLy8gRklYTUU6IFVzZSBBdG9taWNTdHJpbmcgb25jZSBpdCBnb3QgbWVyZ2VkIHdpdGgg
SWRlbnRpZmllci4KICAgICBKU19FWFBPUlRfUFJJVkFURSB2b2lkIGFkZEltcHVyZVByb3BlcnR5
KGNvbnN0IFN0cmluZyYpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dURi93dGYvQm94LmggYi9Tb3Vy
Y2UvV1RGL3d0Zi9Cb3guaAppbmRleCBiNjYxMzIxOTE5MTc1ODA2ODE0YjQ2YTFkMjBhMmQxN2Q5
OGFhNmNhLi45YjMyOWY1MDVkOTgzNzljOTNjZjEwZjY5MTY1ODBlZTgwYjNhMDA0IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV1RGL3d0Zi9Cb3guaAorKysgYi9Tb3VyY2UvV1RGL3d0Zi9Cb3guaApAQCAt
NTcsNyArNTcsNyBAQCBjbGFzcyBCb3ggewogICAgIFQmIG9wZXJhdG9yKigpIGNvbnN0IHsgcmV0
dXJuIG1fZGF0YS0+dmFsdWU7IH0KICAgICBUKiBvcGVyYXRvci0+KCkgY29uc3QgeyByZXR1cm4g
Jm1fZGF0YS0+dmFsdWU7IH0KIAotICAgIGV4cGxpY2l0IG9wZXJhdG9yIGJvb2woKSB7IHJldHVy
biBtX2RhdGE7IH0KKyAgICBleHBsaWNpdCBvcGVyYXRvciBib29sKCkgY29uc3QgeyByZXR1cm4g
bV9kYXRhOyB9CiAgICAgCiBwcml2YXRlOgogICAgIHN0cnVjdCBEYXRhIDogVGhyZWFkU2FmZVJl
ZkNvdW50ZWQ8RGF0YT4gewo=
</data>

          </attachment>
      

    </bug>

</bugzilla>