<?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>200875</bug_id>
          
          <creation_ts>2019-08-18 20:57:29 -0700</creation_ts>
          <short_desc>[JSC] Ensure x?.y ?? z is fast</short_desc>
          <delta_ts>2019-08-26 14:11:05 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>JavaScriptCore</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          <see_also>https://bugs.webkit.org/show_bug.cgi?id=200072</see_also>
    
    <see_also>https://bugs.webkit.org/show_bug.cgi?id=200199</see_also>
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Ross Kirsling">ross.kirsling</reporter>
          <assigned_to name="Ross Kirsling">ross.kirsling</assigned_to>
          <cc>commit-queue</cc>
    
    <cc>ews-watchlist</cc>
    
    <cc>fpizlo</cc>
    
    <cc>keith_miller</cc>
    
    <cc>mark.lam</cc>
    
    <cc>msaboff</cc>
    
    <cc>saam</cc>
    
    <cc>tzagallo</cc>
    
    <cc>webkit-bug-importer</cc>
    
    <cc>ysuzuki</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1562644</commentid>
    <comment_count>0</comment_count>
    <who name="Ross Kirsling">ross.kirsling</who>
    <bug_when>2019-08-18 20:57:29 -0700</bug_when>
    <thetext>It is anticipated that `x?.y ?? z` will quickly become a common idiom in JS (as it is in C#, Swift, etc.).

Indeed, such an example is given as motivation for the proposal:
(https://github.com/tc39/proposal-optional-chaining/#overview-and-motivation)
&gt; const animationDuration = response.settings?.animationDuration ?? 300;

As such, it seems unfortunate that we currently generate the following: 

        (get x)
  ----- jundefined_or_null
  |     (get y)
  | --- jmp
  &gt; |   (load undefined)
    &gt; - jnundefined_or_null
      | (get z)
      &gt; end

When it clearly could be reduced to:

        (get x)
    --- jundefined_or_null
    |   (get y)
    | - jnundefined_or_null
    &gt; | (get z)
      &gt; end

What I&apos;m not sure about:
 - Is this appropriate to handle at initial bytecode generation? (If so, we could do so with a combined chain-and-coalesce node.)
 - Is this the sort of thing we expect to leave for DFG or FTL to handle? (Looking at the dumped graph, this does not seem to come for free.)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1562820</commentid>
    <comment_count>1</comment_count>
      <attachid>376713</attachid>
    <who name="Ross Kirsling">ross.kirsling</who>
    <bug_when>2019-08-19 15:31:52 -0700</bug_when>
    <thetext>Created attachment 376713
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1562821</commentid>
    <comment_count>2</comment_count>
      <attachid>376713</attachid>
    <who name="Ross Kirsling">ross.kirsling</who>
    <bug_when>2019-08-19 15:44:05 -0700</bug_when>
    <thetext>Comment on attachment 376713
Patch

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

Guess this is really easy after all -- we don&apos;t even need a new node, just a new field.

A couple of notes:

&gt; Source/JavaScriptCore/parser/ASTBuilder.h:1370
&gt; +        if (!optionalChain-&gt;isDelete()) {

We absolutely could reduce `delete x?.y ?? z` too, but it&apos;d just equate to dropping `?? z`, which seems extreme and only really affects bytecode size, since branch prediction would take care of the rest.

&gt; Source/JavaScriptCore/parser/ASTBuilder.h:1372
&gt; +            return new (m_parserArena) CoalesceNode(location, optionalChain-&gt;expr(), expr2, hasAbsorbedOptionalChain);

Why throw away the OptionalChainNode here? Because to preserve it, we&apos;d have to not only clear isOutermost on it here and then *check* whether it was cleared over in NodesCodegen. It&apos;s simpler just to say that we &quot;absorbed&quot; the thing.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1562824</commentid>
    <comment_count>3</comment_count>
    <who name="Ross Kirsling">ross.kirsling</who>
    <bug_when>2019-08-19 15:46:19 -0700</bug_when>
    <thetext>(In reply to Ross Kirsling from comment #2)
&gt; Why throw away the OptionalChainNode here? Because to preserve it, we&apos;d have
&gt; to not only clear isOutermost on it here and then *check* whether it was
&gt; cleared over in NodesCodegen. It&apos;s simpler just to say that we &quot;absorbed&quot;
&gt; the thing.

s/and then/but also/, grrr.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1563219</commentid>
    <comment_count>4</comment_count>
      <attachid>376798</attachid>
    <who name="Ross Kirsling">ross.kirsling</who>
    <bug_when>2019-08-20 13:47:33 -0700</bug_when>
    <thetext>Created attachment 376798
Alternate patch (prunes delete x?.y ?? z)

Just for consideration, here is what the patch would look like if we were turn `delete x?.y ?? z` into `delete x?.y` instead.

We don&apos;t need to do this, since it should be handled by DFG instead, but it&apos;s still interesting because the patch isn&apos;t really any more complex than the other way...</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1563657</commentid>
    <comment_count>5</comment_count>
      <attachid>376713</attachid>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2019-08-21 13:27:38 -0700</bug_when>
    <thetext>Comment on attachment 376713
Patch

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

&gt; Source/JavaScriptCore/ChangeLog:9
&gt; +        We anticipate `x?.y ?? z` to quickly become a common idiom in JS. With a little bytecode rearrangement,
&gt; +        we can avoid the &quot;load undefined and check it&quot; dance in the middle and just turn this into two jumps.

Can you describe the previous bytecode and optimized bytecode in ChangeLog to make the change clear?

&gt; Source/JavaScriptCore/parser/ASTBuilder.h:1371
&gt; +            static constexpr bool hasAbsorbedOptionalChain = true;

`static` is not necessary.

&gt; Source/JavaScriptCore/parser/ASTBuilder.h:1375
&gt; +    return new (m_parserArena) CoalesceNode(location, expr1, expr2);

Let&apos;s define `constexpr bool hasAbsorbedOptionalChain = false;` and pass it explicitly.

&gt; Source/JavaScriptCore/parser/Nodes.h:1315
&gt; +        CoalesceNode(const JSTokenLocation&amp;, ExpressionNode* expr1, ExpressionNode* expr2, bool = false);

Only one place is using this default bool parameter. So I think not making it default parameter is better. Pass `false` explicitly.

&gt; Source/JavaScriptCore/parser/Nodes.h:1333
&gt;          void setIsDelete() { m_isDelete = true; }
&gt; +        bool isDelete() const { return m_isDelete; }

Can we change the name of this functions to like, `isHoldingDelete` or something like this? This function name looks like this `OptionalChainNode` itself looks DeleteNode.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1563696</commentid>
    <comment_count>6</comment_count>
    <who name="Ross Kirsling">ross.kirsling</who>
    <bug_when>2019-08-21 14:44:09 -0700</bug_when>
    <thetext>(In reply to Yusuke Suzuki from comment #5)
&gt; &gt; Source/JavaScriptCore/parser/Nodes.h:1333
&gt; &gt;          void setIsDelete() { m_isDelete = true; }
&gt; &gt; +        bool isDelete() const { return m_isDelete; }
&gt; 
&gt; Can we change the name of this functions to like, `isHoldingDelete` or
&gt; something like this? This function name looks like this `OptionalChainNode`
&gt; itself looks DeleteNode.

Actually, now that you mention it... since this really means `childIsDelete`, I should probably just add `isDeleteNode` to ExpressionNode instead.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1563713</commentid>
    <comment_count>7</comment_count>
      <attachid>376926</attachid>
    <who name="Ross Kirsling">ross.kirsling</who>
    <bug_when>2019-08-21 15:09:19 -0700</bug_when>
    <thetext>Created attachment 376926
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1563715</commentid>
    <comment_count>8</comment_count>
      <attachid>376926</attachid>
    <who name="Ross Kirsling">ross.kirsling</who>
    <bug_when>2019-08-21 15:09:48 -0700</bug_when>
    <thetext>Comment on attachment 376926
Patch

Addressed feedback.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1564519</commentid>
    <comment_count>9</comment_count>
    <who name="Ross Kirsling">ross.kirsling</who>
    <bug_when>2019-08-23 11:22:10 -0700</bug_when>
    <thetext>Ping?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1565061</commentid>
    <comment_count>10</comment_count>
      <attachid>376926</attachid>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2019-08-26 13:24:54 -0700</bug_when>
    <thetext>Comment on attachment 376926
Patch

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

r=me

&gt; Source/JavaScriptCore/parser/ASTBuilder.h:-1162
&gt; -            optionalChain-&gt;setIsDelete();

Nice.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1565085</commentid>
    <comment_count>11</comment_count>
      <attachid>376926</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2019-08-26 14:09:42 -0700</bug_when>
    <thetext>Comment on attachment 376926
Patch

Clearing flags on attachment: 376926

Committed r249117: &lt;https://trac.webkit.org/changeset/249117&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1565086</commentid>
    <comment_count>12</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2019-08-26 14:09:44 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1565087</commentid>
    <comment_count>13</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2019-08-26 14:11:05 -0700</bug_when>
    <thetext>&lt;rdar://problem/54721317&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>376713</attachid>
            <date>2019-08-19 15:31:52 -0700</date>
            <delta_ts>2019-08-21 15:09:16 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-200875-20190819153152.patch</filename>
            <type>text/plain</type>
            <size>10921</size>
            <attacher name="Ross Kirsling">ross.kirsling</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjQ4ODYwCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCAw
N2ZiOTFkOGZiYmVmMmYwYjA4NjBlYWYwNTRlNzQzNjc2OTNhNWFlLi44MGFjMmIwOTAzYzVkZGFi
OGNiMThjNDI5M2ZmZWMwNGI5ZTM0ODg1IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSwyNSBAQAorMjAxOS0wOC0xOSAgUm9zcyBLaXJzbGluZyAgPHJvc3Mua2lyc2xpbmdAc29u
eS5jb20+CisKKyAgICAgICAgW0pTQ10gRW5zdXJlIHg/LnkgPz8geiBpcyBmYXN0CisgICAgICAg
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMDA4NzUKKworICAgICAg
ICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBXZSBhbnRpY2lwYXRlIGB4
Py55ID8/IHpgIHRvIHF1aWNrbHkgYmVjb21lIGEgY29tbW9uIGlkaW9tIGluIEpTLiBXaXRoIGEg
bGl0dGxlIGJ5dGVjb2RlIHJlYXJyYW5nZW1lbnQsCisgICAgICAgIHdlIGNhbiBhdm9pZCB0aGUg
ImxvYWQgdW5kZWZpbmVkIGFuZCBjaGVjayBpdCIgZGFuY2UgaW4gdGhlIG1pZGRsZSBhbmQganVz
dCB0dXJuIHRoaXMgaW50byB0d28ganVtcHMuCisKKyAgICAgICAgKiBieXRlY29tcGlsZXIvQnl0
ZWNvZGVHZW5lcmF0b3IuY3BwOgorICAgICAgICAoSlNDOjpCeXRlY29kZUdlbmVyYXRvcjo6cG9w
T3B0aW9uYWxDaGFpblRhcmdldCk6IEFkZGVkIHNwZWNpYWxpemF0aW9uLgorICAgICAgICAqIGJ5
dGVjb21waWxlci9CeXRlY29kZUdlbmVyYXRvci5oOgorICAgICAgICAqIGJ5dGVjb21waWxlci9O
b2Rlc0NvZGVnZW4uY3BwOgorICAgICAgICAoSlNDOjpDb2FsZXNjZU5vZGU6OmVtaXRCeXRlY29k
ZSk6CisgICAgICAgICogcGFyc2VyL0FTVEJ1aWxkZXIuaDoKKyAgICAgICAgKEpTQzo6QVNUQnVp
bGRlcjo6bWFrZUNvYWxlc2NlTm9kZSk6IEFkZGVkLgorICAgICAgICAoSlNDOjpBU1RCdWlsZGVy
OjptYWtlQmluYXJ5Tm9kZSk6CisgICAgICAgICogcGFyc2VyL05vZGVDb25zdHJ1Y3RvcnMuaDoK
KyAgICAgICAgKEpTQzo6Q29hbGVzY2VOb2RlOjpDb2FsZXNjZU5vZGUpOgorICAgICAgICAqIHBh
cnNlci9Ob2Rlcy5oOgorCiAyMDE5LTA4LTE5ICBNaWNoYWVsIFNhYm9mZiAgPG1zYWJvZmZAYXBw
bGUuY29tPgogCiAgICAgICAgIFdlYmtpdCBqc2MgQ3Jhc2ggaW4gUmVnRXhwOjptYXRjaElubGlu
ZSAodGhpcz08b3B0aW1pemVkIG91dD4KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ieXRlY29tcGlsZXIvQnl0ZWNvZGVHZW5lcmF0b3IuY3BwIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL2J5dGVjb21waWxlci9CeXRlY29kZUdlbmVyYXRvci5jcHAKaW5kZXggOTUwYWFhMjAzZDM4
ZWY4OGUzMWI3YjlhODc5OTM1NDBiNjkwNzhjOC4uMWEzZTc0MjY3OTI0YTAxYTRmOWZkZDIxZDBm
ZTBkNGYxYmZiY2NkNSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb21w
aWxlci9CeXRlY29kZUdlbmVyYXRvci5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5
dGVjb21waWxlci9CeXRlY29kZUdlbmVyYXRvci5jcHAKQEAgLTQ5NjksMTQgKzQ5NjksMTggQEAg
dm9pZCBCeXRlY29kZUdlbmVyYXRvcjo6cHVzaE9wdGlvbmFsQ2hhaW5UYXJnZXQoKQogICAgIG1f
b3B0aW9uYWxDaGFpblRhcmdldFN0YWNrLmFwcGVuZChuZXdMYWJlbCgpKTsKIH0KIAotdm9pZCBC
eXRlY29kZUdlbmVyYXRvcjo6cG9wT3B0aW9uYWxDaGFpblRhcmdldChSZWdpc3RlcklEKiBkc3Qs
IGJvb2wgaXNEZWxldGUpCit2b2lkIEJ5dGVjb2RlR2VuZXJhdG9yOjpwb3BPcHRpb25hbENoYWlu
VGFyZ2V0KCkKIHsKICAgICBBU1NFUlQobV9vcHRpb25hbENoYWluVGFyZ2V0U3RhY2suc2l6ZSgp
KTsKKyAgICBlbWl0TGFiZWwobV9vcHRpb25hbENoYWluVGFyZ2V0U3RhY2sudGFrZUxhc3QoKS5n
ZXQoKSk7Cit9CiAKK3ZvaWQgQnl0ZWNvZGVHZW5lcmF0b3I6OnBvcE9wdGlvbmFsQ2hhaW5UYXJn
ZXQoUmVnaXN0ZXJJRCogZHN0LCBib29sIGlzRGVsZXRlKQorewogICAgIFJlZjxMYWJlbD4gZW5k
TGFiZWwgPSBuZXdMYWJlbCgpOwogICAgIGVtaXRKdW1wKGVuZExhYmVsLmdldCgpKTsKIAotICAg
IGVtaXRMYWJlbChtX29wdGlvbmFsQ2hhaW5UYXJnZXRTdGFjay50YWtlTGFzdCgpLmdldCgpKTsK
KyAgICBwb3BPcHRpb25hbENoYWluVGFyZ2V0KCk7CiAgICAgZW1pdExvYWQoZHN0LCBpc0RlbGV0
ZSA/IGpzQm9vbGVhbih0cnVlKSA6IGpzVW5kZWZpbmVkKCkpOwogCiAgICAgZW1pdExhYmVsKGVu
ZExhYmVsLmdldCgpKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29t
cGlsZXIvQnl0ZWNvZGVHZW5lcmF0b3IuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29t
cGlsZXIvQnl0ZWNvZGVHZW5lcmF0b3IuaAppbmRleCAzNmE2Njk0N2RjMTkwYmRmYzhhYmRiMzk2
YzUwMGU1OGI3YTdlZDA2Li4zYjFlODVkMzgyZDA0MDgyNjM2NmVkNjA3NWM2NzIwNmVhN2VjZThj
IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVyL0J5dGVjb2Rl
R2VuZXJhdG9yLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb21waWxlci9CeXRl
Y29kZUdlbmVyYXRvci5oCkBAIC05NjAsNyArOTYwLDggQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAg
ICAgIHZvaWQgcG9wRmluYWxseUNvbnRyb2xGbG93U2NvcGUoKTsKIAogICAgICAgICB2b2lkIHB1
c2hPcHRpb25hbENoYWluVGFyZ2V0KCk7Ci0gICAgICAgIHZvaWQgcG9wT3B0aW9uYWxDaGFpblRh
cmdldChSZWdpc3RlcklEKiBkc3QsIGJvb2wgaXNEZWxldGUgPSBmYWxzZSk7CisgICAgICAgIHZv
aWQgcG9wT3B0aW9uYWxDaGFpblRhcmdldCgpOworICAgICAgICB2b2lkIHBvcE9wdGlvbmFsQ2hh
aW5UYXJnZXQoUmVnaXN0ZXJJRCogZHN0LCBib29sIGlzRGVsZXRlKTsKICAgICAgICAgdm9pZCBl
bWl0T3B0aW9uYWxDaGVjayhSZWdpc3RlcklEKiBzcmMpOwogCiAgICAgICAgIHZvaWQgcHVzaElu
ZGV4ZWRGb3JJblNjb3BlKFJlZ2lzdGVySUQqIGxvY2FsLCBSZWdpc3RlcklEKiBpbmRleCk7CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVyL05vZGVzQ29kZWdl
bi5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVyL05vZGVzQ29kZWdlbi5j
cHAKaW5kZXggODYyZjBlNWYyYTg0ZDQ0MzE2MzM5YTllMjgxOTg4ZTkxOTM3OTI0NS4uY2U2YWUz
NjJjNzk5YmE5NmM4YmI4M2ZjODYyYmY2M2U5NDIxYWJlYSAxMDA2NDQKLS0tIGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2J5dGVjb21waWxlci9Ob2Rlc0NvZGVnZW4uY3BwCisrKyBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIvTm9kZXNDb2RlZ2VuLmNwcApAQCAtMjQwOCwxMyAr
MjQwOCwxOCBAQCB2b2lkIExvZ2ljYWxPcE5vZGU6OmVtaXRCeXRlY29kZUluQ29uZGl0aW9uQ29u
dGV4dChCeXRlY29kZUdlbmVyYXRvciYgZ2VuZXJhdG9yLAogUmVnaXN0ZXJJRCogQ29hbGVzY2VO
b2RlOjplbWl0Qnl0ZWNvZGUoQnl0ZWNvZGVHZW5lcmF0b3ImIGdlbmVyYXRvciwgUmVnaXN0ZXJJ
RCogZHN0KQogewogICAgIFJlZlB0cjxSZWdpc3RlcklEPiB0ZW1wID0gZ2VuZXJhdG9yLnRlbXBE
ZXN0aW5hdGlvbihkc3QpOwotICAgIFJlZjxMYWJlbD4gdGFyZ2V0ID0gZ2VuZXJhdG9yLm5ld0xh
YmVsKCk7Ci0KKyAgICBSZWY8TGFiZWw+IGVuZExhYmVsID0gZ2VuZXJhdG9yLm5ld0xhYmVsKCk7
CisgICAgCisgICAgaWYgKG1faGFzQWJzb3JiZWRPcHRpb25hbENoYWluKQorICAgICAgICBnZW5l
cmF0b3IucHVzaE9wdGlvbmFsQ2hhaW5UYXJnZXQoKTsKICAgICBnZW5lcmF0b3IuZW1pdE5vZGUo
dGVtcC5nZXQoKSwgbV9leHByMSk7Ci0gICAgZ2VuZXJhdG9yLmVtaXRKdW1wSWZGYWxzZShnZW5l
cmF0b3IuZW1pdElzVW5kZWZpbmVkT3JOdWxsKGdlbmVyYXRvci5uZXdUZW1wb3JhcnkoKSwgdGVt
cC5nZXQoKSksIHRhcmdldC5nZXQoKSk7CisgICAgZ2VuZXJhdG9yLmVtaXRKdW1wSWZGYWxzZShn
ZW5lcmF0b3IuZW1pdElzVW5kZWZpbmVkT3JOdWxsKGdlbmVyYXRvci5uZXdUZW1wb3JhcnkoKSwg
dGVtcC5nZXQoKSksIGVuZExhYmVsLmdldCgpKTsKKworICAgIGlmIChtX2hhc0Fic29yYmVkT3B0
aW9uYWxDaGFpbikKKyAgICAgICAgZ2VuZXJhdG9yLnBvcE9wdGlvbmFsQ2hhaW5UYXJnZXQoKTsK
ICAgICBnZW5lcmF0b3IuZW1pdE5vZGVJblRhaWxQb3NpdGlvbih0ZW1wLmdldCgpLCBtX2V4cHIy
KTsKLSAgICBnZW5lcmF0b3IuZW1pdExhYmVsKHRhcmdldC5nZXQoKSk7CiAKKyAgICBnZW5lcmF0
b3IuZW1pdExhYmVsKGVuZExhYmVsLmdldCgpKTsKICAgICByZXR1cm4gZ2VuZXJhdG9yLm1vdmUo
ZHN0LCB0ZW1wLmdldCgpKTsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L3BhcnNlci9BU1RCdWlsZGVyLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcGFyc2VyL0FTVEJ1
aWxkZXIuaAppbmRleCAzYjc1MWVkM2UwOGUwMzczOTRmNzQyNzVmYzkzNWNlMDg2YmQ2NGI4Li45
ZGVjYzZkN2U4NzA4OWZiZDM0MjJkZjU3MWQ0ZGQ2OWJiOThjZTgwIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcGFyc2VyL0FTVEJ1aWxkZXIuaAorKysgYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvcGFyc2VyL0FTVEJ1aWxkZXIuaApAQCAtMTUyLDYgKzE1Miw3IEBAIHB1YmxpYzoK
ICAgICBFeHByZXNzaW9uTm9kZSogbWFrZUJpdFhPck5vZGUoY29uc3QgSlNUb2tlbkxvY2F0aW9u
JiwgRXhwcmVzc2lvbk5vZGUqIGxlZnQsIEV4cHJlc3Npb25Ob2RlKiByaWdodCwgYm9vbCByaWdo
dEhhc0Fzc2lnbm1lbnRzKTsKICAgICBFeHByZXNzaW9uTm9kZSogbWFrZUJpdEFuZE5vZGUoY29u
c3QgSlNUb2tlbkxvY2F0aW9uJiwgRXhwcmVzc2lvbk5vZGUqIGxlZnQsIEV4cHJlc3Npb25Ob2Rl
KiByaWdodCwgYm9vbCByaWdodEhhc0Fzc2lnbm1lbnRzKTsKICAgICBFeHByZXNzaW9uTm9kZSog
bWFrZUJpdE9yTm9kZShjb25zdCBKU1Rva2VuTG9jYXRpb24mLCBFeHByZXNzaW9uTm9kZSogbGVm
dCwgRXhwcmVzc2lvbk5vZGUqIHJpZ2h0LCBib29sIHJpZ2h0SGFzQXNzaWdubWVudHMpOworICAg
IEV4cHJlc3Npb25Ob2RlKiBtYWtlQ29hbGVzY2VOb2RlKGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYs
IEV4cHJlc3Npb25Ob2RlKiBsZWZ0LCBFeHByZXNzaW9uTm9kZSogcmlnaHQpOwogICAgIEV4cHJl
c3Npb25Ob2RlKiBtYWtlTGVmdFNoaWZ0Tm9kZShjb25zdCBKU1Rva2VuTG9jYXRpb24mLCBFeHBy
ZXNzaW9uTm9kZSogbGVmdCwgRXhwcmVzc2lvbk5vZGUqIHJpZ2h0LCBib29sIHJpZ2h0SGFzQXNz
aWdubWVudHMpOwogICAgIEV4cHJlc3Npb25Ob2RlKiBtYWtlUmlnaHRTaGlmdE5vZGUoY29uc3Qg
SlNUb2tlbkxvY2F0aW9uJiwgRXhwcmVzc2lvbk5vZGUqIGxlZnQsIEV4cHJlc3Npb25Ob2RlKiBy
aWdodCwgYm9vbCByaWdodEhhc0Fzc2lnbm1lbnRzKTsKICAgICBFeHByZXNzaW9uTm9kZSogbWFr
ZVVSaWdodFNoaWZ0Tm9kZShjb25zdCBKU1Rva2VuTG9jYXRpb24mLCBFeHByZXNzaW9uTm9kZSog
bGVmdCwgRXhwcmVzc2lvbk5vZGUqIHJpZ2h0LCBib29sIHJpZ2h0SGFzQXNzaWdubWVudHMpOwpA
QCAtMTM2MSw2ICsxMzYyLDE5IEBAIEV4cHJlc3Npb25Ob2RlKiBBU1RCdWlsZGVyOjptYWtlQml0
WE9yTm9kZShjb25zdCBKU1Rva2VuTG9jYXRpb24mIGxvY2F0aW9uLCBFeHByCiAgICAgcmV0dXJu
IG5ldyAobV9wYXJzZXJBcmVuYSkgQml0WE9yTm9kZShsb2NhdGlvbiwgZXhwcjEsIGV4cHIyLCBy
aWdodEhhc0Fzc2lnbm1lbnRzKTsKIH0KIAorRXhwcmVzc2lvbk5vZGUqIEFTVEJ1aWxkZXI6Om1h
a2VDb2FsZXNjZU5vZGUoY29uc3QgSlNUb2tlbkxvY2F0aW9uJiBsb2NhdGlvbiwgRXhwcmVzc2lv
bk5vZGUqIGV4cHIxLCBFeHByZXNzaW9uTm9kZSogZXhwcjIpCit7CisgICAgLy8gT3B0aW1pemF0
aW9uIGZvciBgeD8ueSA/PyB6YC4KKyAgICBpZiAoZXhwcjEtPmlzT3B0aW9uYWxDaGFpbigpKSB7
CisgICAgICAgIE9wdGlvbmFsQ2hhaW5Ob2RlKiBvcHRpb25hbENoYWluID0gc3RhdGljX2Nhc3Q8
T3B0aW9uYWxDaGFpbk5vZGUqPihleHByMSk7CisgICAgICAgIGlmICghb3B0aW9uYWxDaGFpbi0+
aXNEZWxldGUoKSkgeworICAgICAgICAgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIGhhc0Fic29y
YmVkT3B0aW9uYWxDaGFpbiA9IHRydWU7CisgICAgICAgICAgICByZXR1cm4gbmV3IChtX3BhcnNl
ckFyZW5hKSBDb2FsZXNjZU5vZGUobG9jYXRpb24sIG9wdGlvbmFsQ2hhaW4tPmV4cHIoKSwgZXhw
cjIsIGhhc0Fic29yYmVkT3B0aW9uYWxDaGFpbik7CisgICAgICAgIH0KKyAgICB9CisgICAgcmV0
dXJuIG5ldyAobV9wYXJzZXJBcmVuYSkgQ29hbGVzY2VOb2RlKGxvY2F0aW9uLCBleHByMSwgZXhw
cjIpOworfQorCiBFeHByZXNzaW9uTm9kZSogQVNUQnVpbGRlcjo6bWFrZUZ1bmN0aW9uQ2FsbE5v
ZGUoY29uc3QgSlNUb2tlbkxvY2F0aW9uJiBsb2NhdGlvbiwgRXhwcmVzc2lvbk5vZGUqIGZ1bmMs
IGJvb2wgcHJldmlvdXNCYXNlV2FzU3VwZXIsIEFyZ3VtZW50c05vZGUqIGFyZ3MsIGNvbnN0IEpT
VGV4dFBvc2l0aW9uJiBkaXZvdFN0YXJ0LCBjb25zdCBKU1RleHRQb3NpdGlvbiYgZGl2b3QsIGNv
bnN0IEpTVGV4dFBvc2l0aW9uJiBkaXZvdEVuZCwgc2l6ZV90IGNhbGxPckFwcGx5Q2hpbGREZXB0
aCwgYm9vbCBpc09wdGlvbmFsQ2FsbCkKIHsKICAgICBBU1NFUlQoZGl2b3Qub2Zmc2V0ID49IGRp
dm90LmxpbmVTdGFydE9mZnNldCk7CkBAIC0xNDI0LDcgKzE0MzgsNyBAQCBFeHByZXNzaW9uTm9k
ZSogQVNUQnVpbGRlcjo6bWFrZUJpbmFyeU5vZGUoY29uc3QgSlNUb2tlbkxvY2F0aW9uJiBsb2Nh
dGlvbiwgaW50CiB7CiAgICAgc3dpdGNoICh0b2tlbikgewogICAgIGNhc2UgQ09BTEVTQ0U6Ci0g
ICAgICAgIHJldHVybiBuZXcgKG1fcGFyc2VyQXJlbmEpIENvYWxlc2NlTm9kZShsb2NhdGlvbiwg
bGhzLmZpcnN0LCByaHMuZmlyc3QpOworICAgICAgICByZXR1cm4gbWFrZUNvYWxlc2NlTm9kZShs
b2NhdGlvbiwgbGhzLmZpcnN0LCByaHMuZmlyc3QpOwogCiAgICAgY2FzZSBPUjoKICAgICAgICAg
cmV0dXJuIG5ldyAobV9wYXJzZXJBcmVuYSkgTG9naWNhbE9wTm9kZShsb2NhdGlvbiwgbGhzLmZp
cnN0LCByaHMuZmlyc3QsIE9wTG9naWNhbE9yKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9wYXJzZXIvTm9kZUNvbnN0cnVjdG9ycy5oIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L3BhcnNlci9Ob2RlQ29uc3RydWN0b3JzLmgKaW5kZXggZDY1YjA4Yjc5ODgzMGJiMWY1OWY3YmJh
NjFiYWJjODNmMmEwNmIxOS4uNzU4OWQ3YzkxZTg5NWViMmQ5OTYzM2RiZjViNGFhNWQyNmFlYjg0
ZSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNlci9Ob2RlQ29uc3RydWN0
b3JzLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNlci9Ob2RlQ29uc3RydWN0b3Jz
LmgKQEAgLTY2OSwxMCArNjY5LDExIEBAIG5hbWVzcGFjZSBKU0MgewogICAgIHsKICAgICB9CiAK
LSAgICBpbmxpbmUgQ29hbGVzY2VOb2RlOjpDb2FsZXNjZU5vZGUoY29uc3QgSlNUb2tlbkxvY2F0
aW9uJiBsb2NhdGlvbiwgRXhwcmVzc2lvbk5vZGUqIGV4cHIxLCBFeHByZXNzaW9uTm9kZSogZXhw
cjIpCisgICAgaW5saW5lIENvYWxlc2NlTm9kZTo6Q29hbGVzY2VOb2RlKGNvbnN0IEpTVG9rZW5M
b2NhdGlvbiYgbG9jYXRpb24sIEV4cHJlc3Npb25Ob2RlKiBleHByMSwgRXhwcmVzc2lvbk5vZGUq
IGV4cHIyLCBib29sIGhhc0Fic29yYmVkT3B0aW9uYWxDaGFpbikKICAgICAgICAgOiBFeHByZXNz
aW9uTm9kZShsb2NhdGlvbiwgUmVzdWx0VHlwZTo6Zm9yQ29hbGVzY2UoZXhwcjEtPnJlc3VsdERl
c2NyaXB0b3IoKSwgZXhwcjItPnJlc3VsdERlc2NyaXB0b3IoKSkpCiAgICAgICAgICwgbV9leHBy
MShleHByMSkKICAgICAgICAgLCBtX2V4cHIyKGV4cHIyKQorICAgICAgICAsIG1faGFzQWJzb3Ji
ZWRPcHRpb25hbENoYWluKGhhc0Fic29yYmVkT3B0aW9uYWxDaGFpbikKICAgICB7CiAgICAgfQog
CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcGFyc2VyL05vZGVzLmggYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcGFyc2VyL05vZGVzLmgKaW5kZXggZmE3MGFjYjZiYTljODM0YmJj
YjEyZGY5Yjk0ZWVhMzFmMmRhYTNiZS4uMzAwMWRhYWExMDkxOTRjOTBmNjFjMTdmMzEzZDRkNzlj
ODZiY2E3YSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNlci9Ob2Rlcy5o
CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIvTm9kZXMuaApAQCAtMTMxMiwxMyAr
MTMxMiwxNCBAQCBuYW1lc3BhY2UgSlNDIHsKIAogICAgIGNsYXNzIENvYWxlc2NlTm9kZSBmaW5h
bCA6IHB1YmxpYyBFeHByZXNzaW9uTm9kZSB7CiAgICAgcHVibGljOgotICAgICAgICBDb2FsZXNj
ZU5vZGUoY29uc3QgSlNUb2tlbkxvY2F0aW9uJiwgRXhwcmVzc2lvbk5vZGUqIGV4cHIxLCBFeHBy
ZXNzaW9uTm9kZSogZXhwcjIpOworICAgICAgICBDb2FsZXNjZU5vZGUoY29uc3QgSlNUb2tlbkxv
Y2F0aW9uJiwgRXhwcmVzc2lvbk5vZGUqIGV4cHIxLCBFeHByZXNzaW9uTm9kZSogZXhwcjIsIGJv
b2wgPSBmYWxzZSk7CiAKICAgICBwcml2YXRlOgogICAgICAgICBSZWdpc3RlcklEKiBlbWl0Qnl0
ZWNvZGUoQnl0ZWNvZGVHZW5lcmF0b3ImLCBSZWdpc3RlcklEKiA9IG51bGxwdHIpIGZpbmFsOwog
CiAgICAgICAgIEV4cHJlc3Npb25Ob2RlKiBtX2V4cHIxOwogICAgICAgICBFeHByZXNzaW9uTm9k
ZSogbV9leHByMjsKKyAgICAgICAgYm9vbCBtX2hhc0Fic29yYmVkT3B0aW9uYWxDaGFpbjsKICAg
ICB9OwogCiAgICAgY2xhc3MgT3B0aW9uYWxDaGFpbk5vZGUgZmluYWwgOiBwdWJsaWMgRXhwcmVz
c2lvbk5vZGUgewpAQCAtMTMyOSw2ICsxMzMwLDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAg
IEV4cHJlc3Npb25Ob2RlKiBleHByKCkgY29uc3QgeyByZXR1cm4gbV9leHByOyB9CiAKICAgICAg
ICAgdm9pZCBzZXRJc0RlbGV0ZSgpIHsgbV9pc0RlbGV0ZSA9IHRydWU7IH0KKyAgICAgICAgYm9v
bCBpc0RlbGV0ZSgpIGNvbnN0IHsgcmV0dXJuIG1faXNEZWxldGU7IH0KIAogICAgIHByaXZhdGU6
CiAgICAgICAgIFJlZ2lzdGVySUQqIGVtaXRCeXRlY29kZShCeXRlY29kZUdlbmVyYXRvciYsIFJl
Z2lzdGVySUQqID0gbnVsbHB0cikgZmluYWw7CmRpZmYgLS1naXQgYS9KU1Rlc3RzL0NoYW5nZUxv
ZyBiL0pTVGVzdHMvQ2hhbmdlTG9nCmluZGV4IDE4ZGE5NTFiNWQ1MTM4MTNkOGMzNmQzMWYzNTk5
YjIzYzYyZjY3MDIuLjYxZTc3NTEwMWQ2NGYyNjA2NWNmZWUxNmMyMjgwM2ZlODQzYWM2YjcgMTAw
NjQ0Ci0tLSBhL0pTVGVzdHMvQ2hhbmdlTG9nCisrKyBiL0pTVGVzdHMvQ2hhbmdlTG9nCkBAIC0x
LDMgKzEsMTIgQEAKKzIwMTktMDgtMTkgIFJvc3MgS2lyc2xpbmcgIDxyb3NzLmtpcnNsaW5nQHNv
bnkuY29tPgorCisgICAgICAgIFtKU0NdIEVuc3VyZSB4Py55ID8/IHogaXMgZmFzdAorICAgICAg
ICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjAwODc1CisKKyAgICAg
ICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBzdHJlc3MvbnVsbGlz
aC1jb2FsZXNjaW5nLmpzOgorCiAyMDE5LTA4LTE5ICBNaWNoYWVsIFNhYm9mZiAgPG1zYWJvZmZA
YXBwbGUuY29tPgogCiAgICAgICAgIFdlYmtpdCBqc2MgQ3Jhc2ggaW4gUmVnRXhwOjptYXRjaElu
bGluZSAodGhpcz08b3B0aW1pemVkIG91dD4KZGlmZiAtLWdpdCBhL0pTVGVzdHMvc3RyZXNzL251
bGxpc2gtY29hbGVzY2luZy5qcyBiL0pTVGVzdHMvc3RyZXNzL251bGxpc2gtY29hbGVzY2luZy5q
cwppbmRleCA4Y2JhZDQ0NDM1ZjJmY2QwNTI4NjQxMzhlZTBiN2M1YzNmOGIwMjgxLi5lYjM4ZTU5
ZjIwMjhjZTViYWRiZjFhZmU4MmI4NzEyZWViMzVjZDgzIDEwMDY0NAotLS0gYS9KU1Rlc3RzL3N0
cmVzcy9udWxsaXNoLWNvYWxlc2NpbmcuanMKKysrIGIvSlNUZXN0cy9zdHJlc3MvbnVsbGlzaC1j
b2FsZXNjaW5nLmpzCkBAIC04OSwzICs4OSwxMSBAQCBzaG91bGROb3RUaHJvdygnMCA/PyAoMSAm
JiAyKScpOwogc2hvdWxkTm90VGhyb3coJzAgfHwgMSAmJiAyIHwgMyBeIDQgJiA1ID09IDYgIT0g
NyA9PT0gOCAhPT0gOSA8IDAgPiAxIDw9IDIgPj0gMyA8PCA0ID4+IDUgPj4+IDYgKyA3IC0gOCAq
IDkgLyAwICUgMSAqKiAyJyk7CiBzaG91bGRUaHJvd1N5bnRheEVycm9yKCcwIHx8IDEgJiYgMiB8
IDMgXiA0ICYgNSA9PSA2ICE9IDcgPT09IDggIT09IDkgPCAwID4gMSA8PSAyID49IDMgPDwgNCA+
PiA1ID4+PiA2ICsgNyAtIDggKiA5IC8gMCAlIDEgKiogMiA/PyAzJyk7CiBzaG91bGRUaHJvd1N5
bnRheEVycm9yKCczID8/IDIgKiogMSAlIDAgLyA5ICogOCAtIDcgKyA2ID4+PiA1ID4+IDQgPDwg
MyA+PSAyIDw9IDEgPiAwIDwgOSAhPT0gOCA9PT0gNyAhPSA2ID09IDUgJiA0IF4gMyB8IDIgJiYg
MSB8fCAwJyk7CisKK3Nob3VsZEJlKG51bGw/LnggPz8gMywgMyk7CitzaG91bGRCZSgoe30pPy54
ID8/IDMsIDMpOworc2hvdWxkQmUoKHsgeDogMCB9KT8ueCA/PyAzLCAwKTsKK3Nob3VsZEJlKG51
bGw/LigpID8/IDMsIDMpOworc2hvdWxkQmUoKCgpID0+IDApPy4oKSA/PyAzLCAwKTsKK3Nob3Vs
ZEJlKCh7IHg6IDAgfSk/LltudWxsPy5hID8/ICd4J10gPz8gMywgMCk7CitzaG91bGRCZSgoKCkg
PT4gMCk/LihudWxsPy5hID8/ICd4JykgPz8gMywgMCk7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>376798</attachid>
            <date>2019-08-20 13:47:33 -0700</date>
            <delta_ts>2019-08-21 15:09:17 -0700</delta_ts>
            <desc>Alternate patch (prunes delete x?.y ?? z)</desc>
            <filename>alternate.diff</filename>
            <type>text/plain</type>
            <size>6278</size>
            <attacher name="Ross Kirsling">ross.kirsling</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIvQnl0ZWNvZGVH
ZW5lcmF0b3IuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb21waWxlci9CeXRlY29k
ZUdlbmVyYXRvci5jcHAKaW5kZXggOTUwYWFhMjAzZDMuLjFhM2U3NDI2NzkyIDEwMDY0NAotLS0g
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVyL0J5dGVjb2RlR2VuZXJhdG9yLmNw
cAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVyL0J5dGVjb2RlR2VuZXJh
dG9yLmNwcApAQCAtNDk2OSwxNCArNDk2OSwxOCBAQCB2b2lkIEJ5dGVjb2RlR2VuZXJhdG9yOjpw
dXNoT3B0aW9uYWxDaGFpblRhcmdldCgpCiAgICAgbV9vcHRpb25hbENoYWluVGFyZ2V0U3RhY2su
YXBwZW5kKG5ld0xhYmVsKCkpOwogfQogCi12b2lkIEJ5dGVjb2RlR2VuZXJhdG9yOjpwb3BPcHRp
b25hbENoYWluVGFyZ2V0KFJlZ2lzdGVySUQqIGRzdCwgYm9vbCBpc0RlbGV0ZSkKK3ZvaWQgQnl0
ZWNvZGVHZW5lcmF0b3I6OnBvcE9wdGlvbmFsQ2hhaW5UYXJnZXQoKQogewogICAgIEFTU0VSVCht
X29wdGlvbmFsQ2hhaW5UYXJnZXRTdGFjay5zaXplKCkpOworICAgIGVtaXRMYWJlbChtX29wdGlv
bmFsQ2hhaW5UYXJnZXRTdGFjay50YWtlTGFzdCgpLmdldCgpKTsKK30KIAordm9pZCBCeXRlY29k
ZUdlbmVyYXRvcjo6cG9wT3B0aW9uYWxDaGFpblRhcmdldChSZWdpc3RlcklEKiBkc3QsIGJvb2wg
aXNEZWxldGUpCit7CiAgICAgUmVmPExhYmVsPiBlbmRMYWJlbCA9IG5ld0xhYmVsKCk7CiAgICAg
ZW1pdEp1bXAoZW5kTGFiZWwuZ2V0KCkpOwogCi0gICAgZW1pdExhYmVsKG1fb3B0aW9uYWxDaGFp
blRhcmdldFN0YWNrLnRha2VMYXN0KCkuZ2V0KCkpOworICAgIHBvcE9wdGlvbmFsQ2hhaW5UYXJn
ZXQoKTsKICAgICBlbWl0TG9hZChkc3QsIGlzRGVsZXRlID8ganNCb29sZWFuKHRydWUpIDoganNV
bmRlZmluZWQoKSk7CiAKICAgICBlbWl0TGFiZWwoZW5kTGFiZWwuZ2V0KCkpOwpkaWZmIC0tZ2l0
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb21waWxlci9CeXRlY29kZUdlbmVyYXRvci5o
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb21waWxlci9CeXRlY29kZUdlbmVyYXRvci5o
CmluZGV4IDM2YTY2OTQ3ZGMxLi4zYjFlODVkMzgyZCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2J5dGVjb21waWxlci9CeXRlY29kZUdlbmVyYXRvci5oCisrKyBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIvQnl0ZWNvZGVHZW5lcmF0b3IuaApAQCAtOTYwLDcg
Kzk2MCw4IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICB2b2lkIHBvcEZpbmFsbHlDb250cm9s
Rmxvd1Njb3BlKCk7CiAKICAgICAgICAgdm9pZCBwdXNoT3B0aW9uYWxDaGFpblRhcmdldCgpOwot
ICAgICAgICB2b2lkIHBvcE9wdGlvbmFsQ2hhaW5UYXJnZXQoUmVnaXN0ZXJJRCogZHN0LCBib29s
IGlzRGVsZXRlID0gZmFsc2UpOworICAgICAgICB2b2lkIHBvcE9wdGlvbmFsQ2hhaW5UYXJnZXQo
KTsKKyAgICAgICAgdm9pZCBwb3BPcHRpb25hbENoYWluVGFyZ2V0KFJlZ2lzdGVySUQqIGRzdCwg
Ym9vbCBpc0RlbGV0ZSk7CiAgICAgICAgIHZvaWQgZW1pdE9wdGlvbmFsQ2hlY2soUmVnaXN0ZXJJ
RCogc3JjKTsKIAogICAgICAgICB2b2lkIHB1c2hJbmRleGVkRm9ySW5TY29wZShSZWdpc3RlcklE
KiBsb2NhbCwgUmVnaXN0ZXJJRCogaW5kZXgpOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2J5dGVjb21waWxlci9Ob2Rlc0NvZGVnZW4uY3BwIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL2J5dGVjb21waWxlci9Ob2Rlc0NvZGVnZW4uY3BwCmluZGV4IDg2MmYwZTVmMmE4Li4yYzYy
OTE2NmRiYSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb21waWxlci9O
b2Rlc0NvZGVnZW4uY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIv
Tm9kZXNDb2RlZ2VuLmNwcApAQCAtMjQwOCwxMyArMjQwOCwxOCBAQCB2b2lkIExvZ2ljYWxPcE5v
ZGU6OmVtaXRCeXRlY29kZUluQ29uZGl0aW9uQ29udGV4dChCeXRlY29kZUdlbmVyYXRvciYgZ2Vu
ZXJhdG9yLAogUmVnaXN0ZXJJRCogQ29hbGVzY2VOb2RlOjplbWl0Qnl0ZWNvZGUoQnl0ZWNvZGVH
ZW5lcmF0b3ImIGdlbmVyYXRvciwgUmVnaXN0ZXJJRCogZHN0KQogewogICAgIFJlZlB0cjxSZWdp
c3RlcklEPiB0ZW1wID0gZ2VuZXJhdG9yLnRlbXBEZXN0aW5hdGlvbihkc3QpOwotICAgIFJlZjxM
YWJlbD4gdGFyZ2V0ID0gZ2VuZXJhdG9yLm5ld0xhYmVsKCk7CisgICAgUmVmPExhYmVsPiBlbmRM
YWJlbCA9IGdlbmVyYXRvci5uZXdMYWJlbCgpOwogCisgICAgaWYgKG1fZXhwcjEtPmlzT3B0aW9u
YWxDaGFpbigpKQorICAgICAgICBnZW5lcmF0b3IucHVzaE9wdGlvbmFsQ2hhaW5UYXJnZXQoKTsK
ICAgICBnZW5lcmF0b3IuZW1pdE5vZGUodGVtcC5nZXQoKSwgbV9leHByMSk7Ci0gICAgZ2VuZXJh
dG9yLmVtaXRKdW1wSWZGYWxzZShnZW5lcmF0b3IuZW1pdElzVW5kZWZpbmVkT3JOdWxsKGdlbmVy
YXRvci5uZXdUZW1wb3JhcnkoKSwgdGVtcC5nZXQoKSksIHRhcmdldC5nZXQoKSk7CisgICAgZ2Vu
ZXJhdG9yLmVtaXRKdW1wSWZGYWxzZShnZW5lcmF0b3IuZW1pdElzVW5kZWZpbmVkT3JOdWxsKGdl
bmVyYXRvci5uZXdUZW1wb3JhcnkoKSwgdGVtcC5nZXQoKSksIGVuZExhYmVsLmdldCgpKTsKKwor
ICAgIGlmIChtX2V4cHIxLT5pc09wdGlvbmFsQ2hhaW4oKSkKKyAgICAgICAgZ2VuZXJhdG9yLnBv
cE9wdGlvbmFsQ2hhaW5UYXJnZXQoKTsKICAgICBnZW5lcmF0b3IuZW1pdE5vZGVJblRhaWxQb3Np
dGlvbih0ZW1wLmdldCgpLCBtX2V4cHIyKTsKLSAgICBnZW5lcmF0b3IuZW1pdExhYmVsKHRhcmdl
dC5nZXQoKSk7CiAKKyAgICBnZW5lcmF0b3IuZW1pdExhYmVsKGVuZExhYmVsLmdldCgpKTsKICAg
ICByZXR1cm4gZ2VuZXJhdG9yLm1vdmUoZHN0LCB0ZW1wLmdldCgpKTsKIH0KIApkaWZmIC0tZ2l0
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNlci9BU1RCdWlsZGVyLmggYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvcGFyc2VyL0FTVEJ1aWxkZXIuaAppbmRleCAzYjc1MWVkM2UwOC4uMTUxMjg0
OTM3ODAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIvQVNUQnVpbGRl
ci5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIvQVNUQnVpbGRlci5oCkBAIC0x
NTIsNiArMTUyLDcgQEAgcHVibGljOgogICAgIEV4cHJlc3Npb25Ob2RlKiBtYWtlQml0WE9yTm9k
ZShjb25zdCBKU1Rva2VuTG9jYXRpb24mLCBFeHByZXNzaW9uTm9kZSogbGVmdCwgRXhwcmVzc2lv
bk5vZGUqIHJpZ2h0LCBib29sIHJpZ2h0SGFzQXNzaWdubWVudHMpOwogICAgIEV4cHJlc3Npb25O
b2RlKiBtYWtlQml0QW5kTm9kZShjb25zdCBKU1Rva2VuTG9jYXRpb24mLCBFeHByZXNzaW9uTm9k
ZSogbGVmdCwgRXhwcmVzc2lvbk5vZGUqIHJpZ2h0LCBib29sIHJpZ2h0SGFzQXNzaWdubWVudHMp
OwogICAgIEV4cHJlc3Npb25Ob2RlKiBtYWtlQml0T3JOb2RlKGNvbnN0IEpTVG9rZW5Mb2NhdGlv
biYsIEV4cHJlc3Npb25Ob2RlKiBsZWZ0LCBFeHByZXNzaW9uTm9kZSogcmlnaHQsIGJvb2wgcmln
aHRIYXNBc3NpZ25tZW50cyk7CisgICAgRXhwcmVzc2lvbk5vZGUqIG1ha2VDb2FsZXNjZU5vZGUo
Y29uc3QgSlNUb2tlbkxvY2F0aW9uJiwgRXhwcmVzc2lvbk5vZGUqIGxlZnQsIEV4cHJlc3Npb25O
b2RlKiByaWdodCk7CiAgICAgRXhwcmVzc2lvbk5vZGUqIG1ha2VMZWZ0U2hpZnROb2RlKGNvbnN0
IEpTVG9rZW5Mb2NhdGlvbiYsIEV4cHJlc3Npb25Ob2RlKiBsZWZ0LCBFeHByZXNzaW9uTm9kZSog
cmlnaHQsIGJvb2wgcmlnaHRIYXNBc3NpZ25tZW50cyk7CiAgICAgRXhwcmVzc2lvbk5vZGUqIG1h
a2VSaWdodFNoaWZ0Tm9kZShjb25zdCBKU1Rva2VuTG9jYXRpb24mLCBFeHByZXNzaW9uTm9kZSog
bGVmdCwgRXhwcmVzc2lvbk5vZGUqIHJpZ2h0LCBib29sIHJpZ2h0SGFzQXNzaWdubWVudHMpOwog
ICAgIEV4cHJlc3Npb25Ob2RlKiBtYWtlVVJpZ2h0U2hpZnROb2RlKGNvbnN0IEpTVG9rZW5Mb2Nh
dGlvbiYsIEV4cHJlc3Npb25Ob2RlKiBsZWZ0LCBFeHByZXNzaW9uTm9kZSogcmlnaHQsIGJvb2wg
cmlnaHRIYXNBc3NpZ25tZW50cyk7CkBAIC0xMzYxLDYgKzEzNjIsMTkgQEAgRXhwcmVzc2lvbk5v
ZGUqIEFTVEJ1aWxkZXI6Om1ha2VCaXRYT3JOb2RlKGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYgbG9j
YXRpb24sIEV4cHIKICAgICByZXR1cm4gbmV3IChtX3BhcnNlckFyZW5hKSBCaXRYT3JOb2RlKGxv
Y2F0aW9uLCBleHByMSwgZXhwcjIsIHJpZ2h0SGFzQXNzaWdubWVudHMpOwogfQogCitFeHByZXNz
aW9uTm9kZSogQVNUQnVpbGRlcjo6bWFrZUNvYWxlc2NlTm9kZShjb25zdCBKU1Rva2VuTG9jYXRp
b24mIGxvY2F0aW9uLCBFeHByZXNzaW9uTm9kZSogZXhwcjEsIEV4cHJlc3Npb25Ob2RlKiBleHBy
MikKK3sKKyAgICAvLyBPcHRpbWl6YXRpb24gZm9yIGB4Py55ID8/IHpgLCBldGMuCisgICAgaWYg
KGV4cHIxLT5pc09wdGlvbmFsQ2hhaW4oKSkgeworICAgICAgICBPcHRpb25hbENoYWluTm9kZSog
b3B0aW9uYWxDaGFpbiA9IHN0YXRpY19jYXN0PE9wdGlvbmFsQ2hhaW5Ob2RlKj4oZXhwcjEpOwor
ICAgICAgICBpZiAob3B0aW9uYWxDaGFpbi0+aXNEZWxldGUoKSkKKyAgICAgICAgICAgIHJldHVy
biBvcHRpb25hbENoYWluOworCisgICAgICAgIG9wdGlvbmFsQ2hhaW4tPmNsZWFySXNPdXRlcm1v
c3QoKTsKKyAgICB9CisgICAgcmV0dXJuIG5ldyAobV9wYXJzZXJBcmVuYSkgQ29hbGVzY2VOb2Rl
KGxvY2F0aW9uLCBleHByMSwgZXhwcjIpOworfQorCiBFeHByZXNzaW9uTm9kZSogQVNUQnVpbGRl
cjo6bWFrZUZ1bmN0aW9uQ2FsbE5vZGUoY29uc3QgSlNUb2tlbkxvY2F0aW9uJiBsb2NhdGlvbiwg
RXhwcmVzc2lvbk5vZGUqIGZ1bmMsIGJvb2wgcHJldmlvdXNCYXNlV2FzU3VwZXIsIEFyZ3VtZW50
c05vZGUqIGFyZ3MsIGNvbnN0IEpTVGV4dFBvc2l0aW9uJiBkaXZvdFN0YXJ0LCBjb25zdCBKU1Rl
eHRQb3NpdGlvbiYgZGl2b3QsIGNvbnN0IEpTVGV4dFBvc2l0aW9uJiBkaXZvdEVuZCwgc2l6ZV90
IGNhbGxPckFwcGx5Q2hpbGREZXB0aCwgYm9vbCBpc09wdGlvbmFsQ2FsbCkKIHsKICAgICBBU1NF
UlQoZGl2b3Qub2Zmc2V0ID49IGRpdm90LmxpbmVTdGFydE9mZnNldCk7CkBAIC0xNDI0LDcgKzE0
MzgsNyBAQCBFeHByZXNzaW9uTm9kZSogQVNUQnVpbGRlcjo6bWFrZUJpbmFyeU5vZGUoY29uc3Qg
SlNUb2tlbkxvY2F0aW9uJiBsb2NhdGlvbiwgaW50CiB7CiAgICAgc3dpdGNoICh0b2tlbikgewog
ICAgIGNhc2UgQ09BTEVTQ0U6Ci0gICAgICAgIHJldHVybiBuZXcgKG1fcGFyc2VyQXJlbmEpIENv
YWxlc2NlTm9kZShsb2NhdGlvbiwgbGhzLmZpcnN0LCByaHMuZmlyc3QpOworICAgICAgICByZXR1
cm4gbWFrZUNvYWxlc2NlTm9kZShsb2NhdGlvbiwgbGhzLmZpcnN0LCByaHMuZmlyc3QpOwogCiAg
ICAgY2FzZSBPUjoKICAgICAgICAgcmV0dXJuIG5ldyAobV9wYXJzZXJBcmVuYSkgTG9naWNhbE9w
Tm9kZShsb2NhdGlvbiwgbGhzLmZpcnN0LCByaHMuZmlyc3QsIE9wTG9naWNhbE9yKTsKZGlmZiAt
LWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIvTm9kZXMuaCBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9wYXJzZXIvTm9kZXMuaAppbmRleCBmYTcwYWNiNmJhOS4uYTU3NzQ2MzIxNjIg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIvTm9kZXMuaAorKysgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvcGFyc2VyL05vZGVzLmgKQEAgLTEzMjgsNyArMTMyOCwxMCBA
QCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgdm9pZCBzZXRFeHByKEV4cHJlc3Npb25Ob2RlKiBl
eHByKSB7IG1fZXhwciA9IGV4cHI7IH0KICAgICAgICAgRXhwcmVzc2lvbk5vZGUqIGV4cHIoKSBj
b25zdCB7IHJldHVybiBtX2V4cHI7IH0KIAorICAgICAgICB2b2lkIGNsZWFySXNPdXRlcm1vc3Qo
KSB7IG1faXNPdXRlcm1vc3QgPSBmYWxzZTsgfQorCiAgICAgICAgIHZvaWQgc2V0SXNEZWxldGUo
KSB7IG1faXNEZWxldGUgPSB0cnVlOyB9CisgICAgICAgIGJvb2wgaXNEZWxldGUoKSBjb25zdCB7
IHJldHVybiBtX2lzRGVsZXRlOyB9CiAKICAgICBwcml2YXRlOgogICAgICAgICBSZWdpc3RlcklE
KiBlbWl0Qnl0ZWNvZGUoQnl0ZWNvZGVHZW5lcmF0b3ImLCBSZWdpc3RlcklEKiA9IG51bGxwdHIp
IGZpbmFsOwo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>376926</attachid>
            <date>2019-08-21 15:09:19 -0700</date>
            <delta_ts>2019-08-26 14:09:42 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-200875-20190821150918.patch</filename>
            <type>text/plain</type>
            <size>14175</size>
            <attacher name="Ross Kirsling">ross.kirsling</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjQ4OTU2CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCA5
N2QyNjZhNDFkOTg0NDcyNTBhYWVjMTEwZjZiM2I4YzYxN2U2Yzg3Li45OWEwNmU1MTVjMGU5ZWEy
NGUyYTZkNDRlNDBjODNmYmFmZmFkNTFlIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSw0NiBAQAorMjAxOS0wOC0yMSAgUm9zcyBLaXJzbGluZyAgPHJvc3Mua2lyc2xpbmdAc29u
eS5jb20+CisKKyAgICAgICAgW0pTQ10gRW5zdXJlIHg/LnkgPz8geiBpcyBmYXN0CisgICAgICAg
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMDA4NzUKKworICAgICAg
ICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBXZSBhbnRpY2lwYXRlIGB4
Py55ID8/IHpgIHRvIHF1aWNrbHkgYmVjb21lIGEgY29tbW9uIGlkaW9tIGluIEpTLiBXaXRoIGEg
bGl0dGxlIGJ5dGVjb2RlIHJlYXJyYW5nZW1lbnQsCisgICAgICAgIHdlIGNhbiBhdm9pZCB0aGUg
ImxvYWQgdW5kZWZpbmVkIGFuZCBjaGVjayBpdCIgZGFuY2UgaW4gdGhlIG1pZGRsZSBhbmQganVz
dCB0dXJuIHRoaXMgaW50byB0d28ganVtcHMuCisKKyAgICAgICAgQmVmb3JlOgorICAgICAgICAg
ICAgICAgIChnZXQgeCkKKyAgICAgICAgICAtLS0tLSBqdW5kZWZpbmVkX29yX251bGwKKyAgICAg
ICAgICB8ICAgICAoZ2V0IHkpCisgICAgICAgICAgfCAtLS0gam1wCisgICAgICAgICAgPiB8ICAg
KGxvYWQgdW5kZWZpbmVkKQorICAgICAgICAgICAgPiAtIGpudW5kZWZpbmVkX29yX251bGwKKyAg
ICAgICAgICAgICAgfCAoZ2V0IHopCisgICAgICAgICAgICAgID4gZW5kCisKKyAgICAgICAgQWZ0
ZXI6CisgICAgICAgICAgICAgICAgKGdldCB4KQorICAgICAgICAgICAgLS0tIGp1bmRlZmluZWRf
b3JfbnVsbAorICAgICAgICAgICAgfCAgIChnZXQgeSkKKyAgICAgICAgICAgIHwgLSBqbnVuZGVm
aW5lZF9vcl9udWxsCisgICAgICAgICAgICA+IHwgKGdldCB6KQorICAgICAgICAgICAgICA+IGVu
ZAorCisgICAgICAgICogYnl0ZWNvbXBpbGVyL0J5dGVjb2RlR2VuZXJhdG9yLmNwcDoKKyAgICAg
ICAgKEpTQzo6Qnl0ZWNvZGVHZW5lcmF0b3I6OnBvcE9wdGlvbmFsQ2hhaW5UYXJnZXQpOiBBZGRl
ZCBzcGVjaWFsaXphdGlvbi4KKyAgICAgICAgKiBieXRlY29tcGlsZXIvQnl0ZWNvZGVHZW5lcmF0
b3IuaDoKKyAgICAgICAgKiBieXRlY29tcGlsZXIvTm9kZXNDb2RlZ2VuLmNwcDoKKyAgICAgICAg
KEpTQzo6Q29hbGVzY2VOb2RlOjplbWl0Qnl0ZWNvZGUpOgorICAgICAgICAoSlNDOjpPcHRpb25h
bENoYWluTm9kZTo6ZW1pdEJ5dGVjb2RlKToKKyAgICAgICAgKiBwYXJzZXIvQVNUQnVpbGRlci5o
OgorICAgICAgICAoSlNDOjpBU1RCdWlsZGVyOjptYWtlRGVsZXRlTm9kZSk6CisgICAgICAgIChK
U0M6OkFTVEJ1aWxkZXI6Om1ha2VDb2FsZXNjZU5vZGUpOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6
QVNUQnVpbGRlcjo6bWFrZUJpbmFyeU5vZGUpOgorICAgICAgICAqIHBhcnNlci9Ob2RlQ29uc3Ry
dWN0b3JzLmg6CisgICAgICAgIChKU0M6OkNvYWxlc2NlTm9kZTo6Q29hbGVzY2VOb2RlKToKKyAg
ICAgICAgKiBwYXJzZXIvTm9kZXMuaDoKKyAgICAgICAgKEpTQzo6RXhwcmVzc2lvbk5vZGU6Omlz
RGVsZXRlTm9kZSBjb25zdCk6IEFkZGVkLiAoUmVwbGFjZXMgT3B0aW9uYWxDaGFpbk5vZGU6Om1f
aXNEZWxldGUuKQorCiAyMDE5LTA4LTIxICBNaWNoYWVsIFNhYm9mZiAgPG1zYWJvZmZAYXBwbGUu
Y29tPgogCiAgICAgICAgIFtKU0NdIGluY29ycmVudCBKSVQgbGVhZCB0byBTdGFja092ZXJmbG93
CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVyL0J5dGVjb2Rl
R2VuZXJhdG9yLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIvQnl0ZWNv
ZGVHZW5lcmF0b3IuY3BwCmluZGV4IDk1MGFhYTIwM2QzOGVmODhlMzFiN2I5YTg3OTkzNTQwYjY5
MDc4YzguLjFhM2U3NDI2NzkyNGEwMWE0ZjlmZGQyMWQwZmUwZDRmMWJmYmNjZDUgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIvQnl0ZWNvZGVHZW5lcmF0b3Iu
Y3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIvQnl0ZWNvZGVHZW5l
cmF0b3IuY3BwCkBAIC00OTY5LDE0ICs0OTY5LDE4IEBAIHZvaWQgQnl0ZWNvZGVHZW5lcmF0b3I6
OnB1c2hPcHRpb25hbENoYWluVGFyZ2V0KCkKICAgICBtX29wdGlvbmFsQ2hhaW5UYXJnZXRTdGFj
ay5hcHBlbmQobmV3TGFiZWwoKSk7CiB9CiAKLXZvaWQgQnl0ZWNvZGVHZW5lcmF0b3I6OnBvcE9w
dGlvbmFsQ2hhaW5UYXJnZXQoUmVnaXN0ZXJJRCogZHN0LCBib29sIGlzRGVsZXRlKQordm9pZCBC
eXRlY29kZUdlbmVyYXRvcjo6cG9wT3B0aW9uYWxDaGFpblRhcmdldCgpCiB7CiAgICAgQVNTRVJU
KG1fb3B0aW9uYWxDaGFpblRhcmdldFN0YWNrLnNpemUoKSk7CisgICAgZW1pdExhYmVsKG1fb3B0
aW9uYWxDaGFpblRhcmdldFN0YWNrLnRha2VMYXN0KCkuZ2V0KCkpOworfQogCit2b2lkIEJ5dGVj
b2RlR2VuZXJhdG9yOjpwb3BPcHRpb25hbENoYWluVGFyZ2V0KFJlZ2lzdGVySUQqIGRzdCwgYm9v
bCBpc0RlbGV0ZSkKK3sKICAgICBSZWY8TGFiZWw+IGVuZExhYmVsID0gbmV3TGFiZWwoKTsKICAg
ICBlbWl0SnVtcChlbmRMYWJlbC5nZXQoKSk7CiAKLSAgICBlbWl0TGFiZWwobV9vcHRpb25hbENo
YWluVGFyZ2V0U3RhY2sudGFrZUxhc3QoKS5nZXQoKSk7CisgICAgcG9wT3B0aW9uYWxDaGFpblRh
cmdldCgpOwogICAgIGVtaXRMb2FkKGRzdCwgaXNEZWxldGUgPyBqc0Jvb2xlYW4odHJ1ZSkgOiBq
c1VuZGVmaW5lZCgpKTsKIAogICAgIGVtaXRMYWJlbChlbmRMYWJlbC5nZXQoKSk7CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVyL0J5dGVjb2RlR2VuZXJhdG9y
LmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVyL0J5dGVjb2RlR2VuZXJhdG9y
LmgKaW5kZXggMzZhNjY5NDdkYzE5MGJkZmM4YWJkYjM5NmM1MDBlNThiN2E3ZWQwNi4uM2IxZTg1
ZDM4MmQwNDA4MjYzNjZlZDYwNzVjNjcyMDZlYTdlY2U4YyAxMDA2NDQKLS0tIGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2J5dGVjb21waWxlci9CeXRlY29kZUdlbmVyYXRvci5oCisrKyBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIvQnl0ZWNvZGVHZW5lcmF0b3IuaApAQCAtOTYw
LDcgKzk2MCw4IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICB2b2lkIHBvcEZpbmFsbHlDb250
cm9sRmxvd1Njb3BlKCk7CiAKICAgICAgICAgdm9pZCBwdXNoT3B0aW9uYWxDaGFpblRhcmdldCgp
OwotICAgICAgICB2b2lkIHBvcE9wdGlvbmFsQ2hhaW5UYXJnZXQoUmVnaXN0ZXJJRCogZHN0LCBi
b29sIGlzRGVsZXRlID0gZmFsc2UpOworICAgICAgICB2b2lkIHBvcE9wdGlvbmFsQ2hhaW5UYXJn
ZXQoKTsKKyAgICAgICAgdm9pZCBwb3BPcHRpb25hbENoYWluVGFyZ2V0KFJlZ2lzdGVySUQqIGRz
dCwgYm9vbCBpc0RlbGV0ZSk7CiAgICAgICAgIHZvaWQgZW1pdE9wdGlvbmFsQ2hlY2soUmVnaXN0
ZXJJRCogc3JjKTsKIAogICAgICAgICB2b2lkIHB1c2hJbmRleGVkRm9ySW5TY29wZShSZWdpc3Rl
cklEKiBsb2NhbCwgUmVnaXN0ZXJJRCogaW5kZXgpOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2J5dGVjb21waWxlci9Ob2Rlc0NvZGVnZW4uY3BwIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2J5dGVjb21waWxlci9Ob2Rlc0NvZGVnZW4uY3BwCmluZGV4IDg2MmYwZTVmMmE4NGQ0
NDMxNjMzOWE5ZTI4MTk4OGU5MTkzNzkyNDUuLmI2NmM4MmIxODExZTJkMmI1YjAzODNlZGFhM2Zi
OWY5MzcyNzYyYTAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29tcGls
ZXIvTm9kZXNDb2RlZ2VuLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBp
bGVyL05vZGVzQ29kZWdlbi5jcHAKQEAgLTI0MDgsMTMgKzI0MDgsMTggQEAgdm9pZCBMb2dpY2Fs
T3BOb2RlOjplbWl0Qnl0ZWNvZGVJbkNvbmRpdGlvbkNvbnRleHQoQnl0ZWNvZGVHZW5lcmF0b3Im
IGdlbmVyYXRvciwKIFJlZ2lzdGVySUQqIENvYWxlc2NlTm9kZTo6ZW1pdEJ5dGVjb2RlKEJ5dGVj
b2RlR2VuZXJhdG9yJiBnZW5lcmF0b3IsIFJlZ2lzdGVySUQqIGRzdCkKIHsKICAgICBSZWZQdHI8
UmVnaXN0ZXJJRD4gdGVtcCA9IGdlbmVyYXRvci50ZW1wRGVzdGluYXRpb24oZHN0KTsKLSAgICBS
ZWY8TGFiZWw+IHRhcmdldCA9IGdlbmVyYXRvci5uZXdMYWJlbCgpOworICAgIFJlZjxMYWJlbD4g
ZW5kTGFiZWwgPSBnZW5lcmF0b3IubmV3TGFiZWwoKTsKIAorICAgIGlmIChtX2hhc0Fic29yYmVk
T3B0aW9uYWxDaGFpbikKKyAgICAgICAgZ2VuZXJhdG9yLnB1c2hPcHRpb25hbENoYWluVGFyZ2V0
KCk7CiAgICAgZ2VuZXJhdG9yLmVtaXROb2RlKHRlbXAuZ2V0KCksIG1fZXhwcjEpOwotICAgIGdl
bmVyYXRvci5lbWl0SnVtcElmRmFsc2UoZ2VuZXJhdG9yLmVtaXRJc1VuZGVmaW5lZE9yTnVsbChn
ZW5lcmF0b3IubmV3VGVtcG9yYXJ5KCksIHRlbXAuZ2V0KCkpLCB0YXJnZXQuZ2V0KCkpOworICAg
IGdlbmVyYXRvci5lbWl0SnVtcElmRmFsc2UoZ2VuZXJhdG9yLmVtaXRJc1VuZGVmaW5lZE9yTnVs
bChnZW5lcmF0b3IubmV3VGVtcG9yYXJ5KCksIHRlbXAuZ2V0KCkpLCBlbmRMYWJlbC5nZXQoKSk7
CisKKyAgICBpZiAobV9oYXNBYnNvcmJlZE9wdGlvbmFsQ2hhaW4pCisgICAgICAgIGdlbmVyYXRv
ci5wb3BPcHRpb25hbENoYWluVGFyZ2V0KCk7CiAgICAgZ2VuZXJhdG9yLmVtaXROb2RlSW5UYWls
UG9zaXRpb24odGVtcC5nZXQoKSwgbV9leHByMik7Ci0gICAgZ2VuZXJhdG9yLmVtaXRMYWJlbCh0
YXJnZXQuZ2V0KCkpOwogCisgICAgZ2VuZXJhdG9yLmVtaXRMYWJlbChlbmRMYWJlbC5nZXQoKSk7
CiAgICAgcmV0dXJuIGdlbmVyYXRvci5tb3ZlKGRzdCwgdGVtcC5nZXQoKSk7CiB9CiAKQEAgLTI0
MjgsNyArMjQzMyw3IEBAIFJlZ2lzdGVySUQqIE9wdGlvbmFsQ2hhaW5Ob2RlOjplbWl0Qnl0ZWNv
ZGUoQnl0ZWNvZGVHZW5lcmF0b3ImIGdlbmVyYXRvciwgUmVnaXN0CiAgICAgICAgIGdlbmVyYXRv
ci5wdXNoT3B0aW9uYWxDaGFpblRhcmdldCgpOwogICAgIGdlbmVyYXRvci5lbWl0Tm9kZUluVGFp
bFBvc2l0aW9uKGZpbmFsRGVzdC5nZXQoKSwgbV9leHByKTsKICAgICBpZiAobV9pc091dGVybW9z
dCkKLSAgICAgICAgZ2VuZXJhdG9yLnBvcE9wdGlvbmFsQ2hhaW5UYXJnZXQoZmluYWxEZXN0Lmdl
dCgpLCBtX2lzRGVsZXRlKTsKKyAgICAgICAgZ2VuZXJhdG9yLnBvcE9wdGlvbmFsQ2hhaW5UYXJn
ZXQoZmluYWxEZXN0LmdldCgpLCBtX2V4cHItPmlzRGVsZXRlTm9kZSgpKTsKIAogICAgIHJldHVy
biBmaW5hbERlc3QuZ2V0KCk7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
cGFyc2VyL0FTVEJ1aWxkZXIuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIvQVNUQnVp
bGRlci5oCmluZGV4IDNiNzUxZWQzZTA4ZTAzNzM5NGY3NDI3NWZjOTM1Y2UwODZiZDY0YjguLmY3
MGNmZWJlZTQ5NTA2NWE1Y2RkNGM3ZmEzZDRhYmU1ZWJkZmIyN2MgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIvQVNUQnVpbGRlci5oCisrKyBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9wYXJzZXIvQVNUQnVpbGRlci5oCkBAIC0xNTIsNiArMTUyLDcgQEAgcHVibGljOgog
ICAgIEV4cHJlc3Npb25Ob2RlKiBtYWtlQml0WE9yTm9kZShjb25zdCBKU1Rva2VuTG9jYXRpb24m
LCBFeHByZXNzaW9uTm9kZSogbGVmdCwgRXhwcmVzc2lvbk5vZGUqIHJpZ2h0LCBib29sIHJpZ2h0
SGFzQXNzaWdubWVudHMpOwogICAgIEV4cHJlc3Npb25Ob2RlKiBtYWtlQml0QW5kTm9kZShjb25z
dCBKU1Rva2VuTG9jYXRpb24mLCBFeHByZXNzaW9uTm9kZSogbGVmdCwgRXhwcmVzc2lvbk5vZGUq
IHJpZ2h0LCBib29sIHJpZ2h0SGFzQXNzaWdubWVudHMpOwogICAgIEV4cHJlc3Npb25Ob2RlKiBt
YWtlQml0T3JOb2RlKGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYsIEV4cHJlc3Npb25Ob2RlKiBsZWZ0
LCBFeHByZXNzaW9uTm9kZSogcmlnaHQsIGJvb2wgcmlnaHRIYXNBc3NpZ25tZW50cyk7CisgICAg
RXhwcmVzc2lvbk5vZGUqIG1ha2VDb2FsZXNjZU5vZGUoY29uc3QgSlNUb2tlbkxvY2F0aW9uJiwg
RXhwcmVzc2lvbk5vZGUqIGxlZnQsIEV4cHJlc3Npb25Ob2RlKiByaWdodCk7CiAgICAgRXhwcmVz
c2lvbk5vZGUqIG1ha2VMZWZ0U2hpZnROb2RlKGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYsIEV4cHJl
c3Npb25Ob2RlKiBsZWZ0LCBFeHByZXNzaW9uTm9kZSogcmlnaHQsIGJvb2wgcmlnaHRIYXNBc3Np
Z25tZW50cyk7CiAgICAgRXhwcmVzc2lvbk5vZGUqIG1ha2VSaWdodFNoaWZ0Tm9kZShjb25zdCBK
U1Rva2VuTG9jYXRpb24mLCBFeHByZXNzaW9uTm9kZSogbGVmdCwgRXhwcmVzc2lvbk5vZGUqIHJp
Z2h0LCBib29sIHJpZ2h0SGFzQXNzaWdubWVudHMpOwogICAgIEV4cHJlc3Npb25Ob2RlKiBtYWtl
VVJpZ2h0U2hpZnROb2RlKGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYsIEV4cHJlc3Npb25Ob2RlKiBs
ZWZ0LCBFeHByZXNzaW9uTm9kZSogcmlnaHQsIGJvb2wgcmlnaHRIYXNBc3NpZ25tZW50cyk7CkBA
IC0xMTU5LDcgKzExNjAsNiBAQCBFeHByZXNzaW9uTm9kZSogQVNUQnVpbGRlcjo6bWFrZURlbGV0
ZU5vZGUoY29uc3QgSlNUb2tlbkxvY2F0aW9uJiBsb2NhdGlvbiwgRXhwcgogICAgICAgICBpZiAo
b3B0aW9uYWxDaGFpbi0+ZXhwcigpLT5pc0xvY2F0aW9uKCkpIHsKICAgICAgICAgICAgIEFTU0VS
VCghb3B0aW9uYWxDaGFpbi0+ZXhwcigpLT5pc1Jlc29sdmVOb2RlKCkpOwogICAgICAgICAgICAg
b3B0aW9uYWxDaGFpbi0+c2V0RXhwcihtYWtlRGVsZXRlTm9kZShsb2NhdGlvbiwgb3B0aW9uYWxD
aGFpbi0+ZXhwcigpLCBzdGFydCwgZGl2b3QsIGVuZCkpOwotICAgICAgICAgICAgb3B0aW9uYWxD
aGFpbi0+c2V0SXNEZWxldGUoKTsKICAgICAgICAgICAgIHJldHVybiBvcHRpb25hbENoYWluOwog
ICAgICAgICB9CiAgICAgfQpAQCAtMTM2MSw2ICsxMzYxLDIwIEBAIEV4cHJlc3Npb25Ob2RlKiBB
U1RCdWlsZGVyOjptYWtlQml0WE9yTm9kZShjb25zdCBKU1Rva2VuTG9jYXRpb24mIGxvY2F0aW9u
LCBFeHByCiAgICAgcmV0dXJuIG5ldyAobV9wYXJzZXJBcmVuYSkgQml0WE9yTm9kZShsb2NhdGlv
biwgZXhwcjEsIGV4cHIyLCByaWdodEhhc0Fzc2lnbm1lbnRzKTsKIH0KIAorRXhwcmVzc2lvbk5v
ZGUqIEFTVEJ1aWxkZXI6Om1ha2VDb2FsZXNjZU5vZGUoY29uc3QgSlNUb2tlbkxvY2F0aW9uJiBs
b2NhdGlvbiwgRXhwcmVzc2lvbk5vZGUqIGV4cHIxLCBFeHByZXNzaW9uTm9kZSogZXhwcjIpCit7
CisgICAgLy8gT3B0aW1pemF0aW9uIGZvciBgeD8ueSA/PyB6YC4KKyAgICBpZiAoZXhwcjEtPmlz
T3B0aW9uYWxDaGFpbigpKSB7CisgICAgICAgIE9wdGlvbmFsQ2hhaW5Ob2RlKiBvcHRpb25hbENo
YWluID0gc3RhdGljX2Nhc3Q8T3B0aW9uYWxDaGFpbk5vZGUqPihleHByMSk7CisgICAgICAgIGlm
ICghb3B0aW9uYWxDaGFpbi0+ZXhwcigpLT5pc0RlbGV0ZU5vZGUoKSkgeworICAgICAgICAgICAg
Y29uc3RleHByIGJvb2wgaGFzQWJzb3JiZWRPcHRpb25hbENoYWluID0gdHJ1ZTsKKyAgICAgICAg
ICAgIHJldHVybiBuZXcgKG1fcGFyc2VyQXJlbmEpIENvYWxlc2NlTm9kZShsb2NhdGlvbiwgb3B0
aW9uYWxDaGFpbi0+ZXhwcigpLCBleHByMiwgaGFzQWJzb3JiZWRPcHRpb25hbENoYWluKTsKKyAg
ICAgICAgfQorICAgIH0KKyAgICBjb25zdGV4cHIgYm9vbCBoYXNBYnNvcmJlZE9wdGlvbmFsQ2hh
aW4gPSBmYWxzZTsKKyAgICByZXR1cm4gbmV3IChtX3BhcnNlckFyZW5hKSBDb2FsZXNjZU5vZGUo
bG9jYXRpb24sIGV4cHIxLCBleHByMiwgaGFzQWJzb3JiZWRPcHRpb25hbENoYWluKTsKK30KKwog
RXhwcmVzc2lvbk5vZGUqIEFTVEJ1aWxkZXI6Om1ha2VGdW5jdGlvbkNhbGxOb2RlKGNvbnN0IEpT
VG9rZW5Mb2NhdGlvbiYgbG9jYXRpb24sIEV4cHJlc3Npb25Ob2RlKiBmdW5jLCBib29sIHByZXZp
b3VzQmFzZVdhc1N1cGVyLCBBcmd1bWVudHNOb2RlKiBhcmdzLCBjb25zdCBKU1RleHRQb3NpdGlv
biYgZGl2b3RTdGFydCwgY29uc3QgSlNUZXh0UG9zaXRpb24mIGRpdm90LCBjb25zdCBKU1RleHRQ
b3NpdGlvbiYgZGl2b3RFbmQsIHNpemVfdCBjYWxsT3JBcHBseUNoaWxkRGVwdGgsIGJvb2wgaXNP
cHRpb25hbENhbGwpCiB7CiAgICAgQVNTRVJUKGRpdm90Lm9mZnNldCA+PSBkaXZvdC5saW5lU3Rh
cnRPZmZzZXQpOwpAQCAtMTQyNCw3ICsxNDM4LDcgQEAgRXhwcmVzc2lvbk5vZGUqIEFTVEJ1aWxk
ZXI6Om1ha2VCaW5hcnlOb2RlKGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYgbG9jYXRpb24sIGludAog
ewogICAgIHN3aXRjaCAodG9rZW4pIHsKICAgICBjYXNlIENPQUxFU0NFOgotICAgICAgICByZXR1
cm4gbmV3IChtX3BhcnNlckFyZW5hKSBDb2FsZXNjZU5vZGUobG9jYXRpb24sIGxocy5maXJzdCwg
cmhzLmZpcnN0KTsKKyAgICAgICAgcmV0dXJuIG1ha2VDb2FsZXNjZU5vZGUobG9jYXRpb24sIGxo
cy5maXJzdCwgcmhzLmZpcnN0KTsKIAogICAgIGNhc2UgT1I6CiAgICAgICAgIHJldHVybiBuZXcg
KG1fcGFyc2VyQXJlbmEpIExvZ2ljYWxPcE5vZGUobG9jYXRpb24sIGxocy5maXJzdCwgcmhzLmZp
cnN0LCBPcExvZ2ljYWxPcik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcGFy
c2VyL05vZGVDb25zdHJ1Y3RvcnMuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIvTm9k
ZUNvbnN0cnVjdG9ycy5oCmluZGV4IGQ2NWIwOGI3OTg4MzBiYjFmNTlmN2JiYTYxYmFiYzgzZjJh
MDZiMTkuLjc1ODlkN2M5MWU4OTVlYjJkOTk2MzNkYmY1YjRhYTVkMjZhZWI4NGUgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIvTm9kZUNvbnN0cnVjdG9ycy5oCisrKyBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIvTm9kZUNvbnN0cnVjdG9ycy5oCkBAIC02Njks
MTAgKzY2OSwxMSBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICB7CiAgICAgfQogCi0gICAgaW5saW5l
IENvYWxlc2NlTm9kZTo6Q29hbGVzY2VOb2RlKGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYgbG9jYXRp
b24sIEV4cHJlc3Npb25Ob2RlKiBleHByMSwgRXhwcmVzc2lvbk5vZGUqIGV4cHIyKQorICAgIGlu
bGluZSBDb2FsZXNjZU5vZGU6OkNvYWxlc2NlTm9kZShjb25zdCBKU1Rva2VuTG9jYXRpb24mIGxv
Y2F0aW9uLCBFeHByZXNzaW9uTm9kZSogZXhwcjEsIEV4cHJlc3Npb25Ob2RlKiBleHByMiwgYm9v
bCBoYXNBYnNvcmJlZE9wdGlvbmFsQ2hhaW4pCiAgICAgICAgIDogRXhwcmVzc2lvbk5vZGUobG9j
YXRpb24sIFJlc3VsdFR5cGU6OmZvckNvYWxlc2NlKGV4cHIxLT5yZXN1bHREZXNjcmlwdG9yKCks
IGV4cHIyLT5yZXN1bHREZXNjcmlwdG9yKCkpKQogICAgICAgICAsIG1fZXhwcjEoZXhwcjEpCiAg
ICAgICAgICwgbV9leHByMihleHByMikKKyAgICAgICAgLCBtX2hhc0Fic29yYmVkT3B0aW9uYWxD
aGFpbihoYXNBYnNvcmJlZE9wdGlvbmFsQ2hhaW4pCiAgICAgewogICAgIH0KIApkaWZmIC0tZ2l0
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNlci9Ob2Rlcy5oIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL3BhcnNlci9Ob2Rlcy5oCmluZGV4IGZhNzBhY2I2YmE5YzgzNGJiY2IxMmRmOWI5NGVl
YTMxZjJkYWEzYmUuLjBlNzdlNjJmZGQ1NTc1MzBhZDg4ZGQzMmU1MDIwYjVmNTljOWY1ZjUgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIvTm9kZXMuaAorKysgYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcGFyc2VyL05vZGVzLmgKQEAgLTIwNSw2ICsyMDUsNyBAQCBuYW1l
c3BhY2UgSlNDIHsKICAgICAgICAgdmlydHVhbCBib29sIGlzQnl0ZWNvZGVJbnRyaW5zaWNOb2Rl
KCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KICAgICAgICAgdmlydHVhbCBib29sIGlzQmluYXJ5
T3BOb2RlKCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KICAgICAgICAgdmlydHVhbCBib29sIGlz
RnVuY3Rpb25DYWxsKCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KKyAgICAgICAgdmlydHVhbCBi
b29sIGlzRGVsZXRlTm9kZSgpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CiAgICAgICAgIHZpcnR1
YWwgYm9vbCBpc09wdGlvbmFsQ2hhaW4oKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQogCiAgICAg
ICAgIHZpcnR1YWwgdm9pZCBlbWl0Qnl0ZWNvZGVJbkNvbmRpdGlvbkNvbnRleHQoQnl0ZWNvZGVH
ZW5lcmF0b3ImLCBMYWJlbCYsIExhYmVsJiwgRmFsbFRocm91Z2hNb2RlKTsKQEAgLTk5NCw2ICs5
OTUsOCBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICBwcml2YXRlOgogICAgICAgICBSZWdpc3RlcklE
KiBlbWl0Qnl0ZWNvZGUoQnl0ZWNvZGVHZW5lcmF0b3ImLCBSZWdpc3RlcklEKiA9IDApIG92ZXJy
aWRlOwogCisgICAgICAgIGJvb2wgaXNEZWxldGVOb2RlKCkgY29uc3QgZmluYWwgeyByZXR1cm4g
dHJ1ZTsgfQorCiAgICAgICAgIGNvbnN0IElkZW50aWZpZXImIG1faWRlbnQ7CiAgICAgfTsKIApA
QCAtMTAwNCw2ICsxMDA3LDggQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgcHJpdmF0ZToKICAgICAg
ICAgUmVnaXN0ZXJJRCogZW1pdEJ5dGVjb2RlKEJ5dGVjb2RlR2VuZXJhdG9yJiwgUmVnaXN0ZXJJ
RCogPSAwKSBvdmVycmlkZTsKIAorICAgICAgICBib29sIGlzRGVsZXRlTm9kZSgpIGNvbnN0IGZp
bmFsIHsgcmV0dXJuIHRydWU7IH0KKwogICAgICAgICBFeHByZXNzaW9uTm9kZSogbV9iYXNlOwog
ICAgICAgICBFeHByZXNzaW9uTm9kZSogbV9zdWJzY3JpcHQ7CiAgICAgfTsKQEAgLTEwMTUsNiAr
MTAyMCw4IEBAIG5hbWVzcGFjZSBKU0MgewogICAgIHByaXZhdGU6CiAgICAgICAgIFJlZ2lzdGVy
SUQqIGVtaXRCeXRlY29kZShCeXRlY29kZUdlbmVyYXRvciYsIFJlZ2lzdGVySUQqID0gMCkgb3Zl
cnJpZGU7CiAKKyAgICAgICAgYm9vbCBpc0RlbGV0ZU5vZGUoKSBjb25zdCBmaW5hbCB7IHJldHVy
biB0cnVlOyB9CisKICAgICAgICAgRXhwcmVzc2lvbk5vZGUqIG1fYmFzZTsKICAgICAgICAgY29u
c3QgSWRlbnRpZmllciYgbV9pZGVudDsKICAgICB9OwpAQCAtMTAyNiw2ICsxMDMzLDggQEAgbmFt
ZXNwYWNlIEpTQyB7CiAgICAgcHJpdmF0ZToKICAgICAgICAgUmVnaXN0ZXJJRCogZW1pdEJ5dGVj
b2RlKEJ5dGVjb2RlR2VuZXJhdG9yJiwgUmVnaXN0ZXJJRCogPSAwKSBvdmVycmlkZTsKIAorICAg
ICAgICBib29sIGlzRGVsZXRlTm9kZSgpIGNvbnN0IGZpbmFsIHsgcmV0dXJuIHRydWU7IH0KKwog
ICAgICAgICBFeHByZXNzaW9uTm9kZSogbV9leHByOwogICAgIH07CiAKQEAgLTEzMTIsMTMgKzEz
MjEsMTQgQEAgbmFtZXNwYWNlIEpTQyB7CiAKICAgICBjbGFzcyBDb2FsZXNjZU5vZGUgZmluYWwg
OiBwdWJsaWMgRXhwcmVzc2lvbk5vZGUgewogICAgIHB1YmxpYzoKLSAgICAgICAgQ29hbGVzY2VO
b2RlKGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYsIEV4cHJlc3Npb25Ob2RlKiBleHByMSwgRXhwcmVz
c2lvbk5vZGUqIGV4cHIyKTsKKyAgICAgICAgQ29hbGVzY2VOb2RlKGNvbnN0IEpTVG9rZW5Mb2Nh
dGlvbiYsIEV4cHJlc3Npb25Ob2RlKiBleHByMSwgRXhwcmVzc2lvbk5vZGUqIGV4cHIyLCBib29s
KTsKIAogICAgIHByaXZhdGU6CiAgICAgICAgIFJlZ2lzdGVySUQqIGVtaXRCeXRlY29kZShCeXRl
Y29kZUdlbmVyYXRvciYsIFJlZ2lzdGVySUQqID0gbnVsbHB0cikgZmluYWw7CiAKICAgICAgICAg
RXhwcmVzc2lvbk5vZGUqIG1fZXhwcjE7CiAgICAgICAgIEV4cHJlc3Npb25Ob2RlKiBtX2V4cHIy
OworICAgICAgICBib29sIG1faGFzQWJzb3JiZWRPcHRpb25hbENoYWluOwogICAgIH07CiAKICAg
ICBjbGFzcyBPcHRpb25hbENoYWluTm9kZSBmaW5hbCA6IHB1YmxpYyBFeHByZXNzaW9uTm9kZSB7
CkBAIC0xMzI4LDggKzEzMzgsNiBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgdm9pZCBzZXRF
eHByKEV4cHJlc3Npb25Ob2RlKiBleHByKSB7IG1fZXhwciA9IGV4cHI7IH0KICAgICAgICAgRXhw
cmVzc2lvbk5vZGUqIGV4cHIoKSBjb25zdCB7IHJldHVybiBtX2V4cHI7IH0KIAotICAgICAgICB2
b2lkIHNldElzRGVsZXRlKCkgeyBtX2lzRGVsZXRlID0gdHJ1ZTsgfQotCiAgICAgcHJpdmF0ZToK
ICAgICAgICAgUmVnaXN0ZXJJRCogZW1pdEJ5dGVjb2RlKEJ5dGVjb2RlR2VuZXJhdG9yJiwgUmVn
aXN0ZXJJRCogPSBudWxscHRyKSBmaW5hbDsKIApAQCAtMTMzNyw3ICsxMzQ1LDYgQEAgbmFtZXNw
YWNlIEpTQyB7CiAKICAgICAgICAgRXhwcmVzc2lvbk5vZGUqIG1fZXhwcjsKICAgICAgICAgYm9v
bCBtX2lzT3V0ZXJtb3N0OwotICAgICAgICBib29sIG1faXNEZWxldGUgeyBmYWxzZSB9OwogICAg
IH07CiAKICAgICAvLyBUaGUgdGVybmFyeSBvcGVyYXRvciwgIm1fbG9naWNhbCA/IG1fZXhwcjEg
OiBtX2V4cHIyIgpkaWZmIC0tZ2l0IGEvSlNUZXN0cy9DaGFuZ2VMb2cgYi9KU1Rlc3RzL0NoYW5n
ZUxvZwppbmRleCAxYTdkOTViYTE5N2EyMzc3NGY3M2NlY2RkMDY2YTMxZTU2MGJmNTllLi44ODY5
MmExMzg4OWVkNzFhNDA5ZDhmYjYxYWRiMGJlZDAzYmE3NjZhIDEwMDY0NAotLS0gYS9KU1Rlc3Rz
L0NoYW5nZUxvZworKysgYi9KU1Rlc3RzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDEyIEBACisyMDE5
LTA4LTIxICBSb3NzIEtpcnNsaW5nICA8cm9zcy5raXJzbGluZ0Bzb255LmNvbT4KKworICAgICAg
ICBbSlNDXSBFbnN1cmUgeD8ueSA/PyB6IGlzIGZhc3QKKyAgICAgICAgaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIwMDg3NQorCisgICAgICAgIFJldmlld2VkIGJ5IE5P
Qk9EWSAoT09QUyEpLgorCisgICAgICAgICogc3RyZXNzL251bGxpc2gtY29hbGVzY2luZy5qczoK
KwogMjAxOS0wOC0yMSAgUm9zcyBLaXJzbGluZyAgPHJvc3Mua2lyc2xpbmdAc29ueS5jb20+CiAK
ICAgICAgICAgSlNUZXN0cy9zdHJlc3Mvb3B0aW9uYWwtY2hhaW5pbmcgc2hvdWxkIG5vdCBjYWxs
IHNob3VsZFRocm93VHlwZUVycm9yIGluIGEgbG9vcApkaWZmIC0tZ2l0IGEvSlNUZXN0cy9zdHJl
c3MvbnVsbGlzaC1jb2FsZXNjaW5nLmpzIGIvSlNUZXN0cy9zdHJlc3MvbnVsbGlzaC1jb2FsZXNj
aW5nLmpzCmluZGV4IDhjYmFkNDQ0MzVmMmZjZDA1Mjg2NDEzOGVlMGI3YzVjM2Y4YjAyODEuLmVi
MzhlNTlmMjAyOGNlNWJhZGJmMWFmZTgyYjg3MTJlZWIzNWNkODMgMTAwNjQ0Ci0tLSBhL0pTVGVz
dHMvc3RyZXNzL251bGxpc2gtY29hbGVzY2luZy5qcworKysgYi9KU1Rlc3RzL3N0cmVzcy9udWxs
aXNoLWNvYWxlc2NpbmcuanMKQEAgLTg5LDMgKzg5LDExIEBAIHNob3VsZE5vdFRocm93KCcwID8/
ICgxICYmIDIpJyk7CiBzaG91bGROb3RUaHJvdygnMCB8fCAxICYmIDIgfCAzIF4gNCAmIDUgPT0g
NiAhPSA3ID09PSA4ICE9PSA5IDwgMCA+IDEgPD0gMiA+PSAzIDw8IDQgPj4gNSA+Pj4gNiArIDcg
LSA4ICogOSAvIDAgJSAxICoqIDInKTsKIHNob3VsZFRocm93U3ludGF4RXJyb3IoJzAgfHwgMSAm
JiAyIHwgMyBeIDQgJiA1ID09IDYgIT0gNyA9PT0gOCAhPT0gOSA8IDAgPiAxIDw9IDIgPj0gMyA8
PCA0ID4+IDUgPj4+IDYgKyA3IC0gOCAqIDkgLyAwICUgMSAqKiAyID8/IDMnKTsKIHNob3VsZFRo
cm93U3ludGF4RXJyb3IoJzMgPz8gMiAqKiAxICUgMCAvIDkgKiA4IC0gNyArIDYgPj4+IDUgPj4g
NCA8PCAzID49IDIgPD0gMSA+IDAgPCA5ICE9PSA4ID09PSA3ICE9IDYgPT0gNSAmIDQgXiAzIHwg
MiAmJiAxIHx8IDAnKTsKKworc2hvdWxkQmUobnVsbD8ueCA/PyAzLCAzKTsKK3Nob3VsZEJlKCh7
fSk/LnggPz8gMywgMyk7CitzaG91bGRCZSgoeyB4OiAwIH0pPy54ID8/IDMsIDApOworc2hvdWxk
QmUobnVsbD8uKCkgPz8gMywgMyk7CitzaG91bGRCZSgoKCkgPT4gMCk/LigpID8/IDMsIDApOwor
c2hvdWxkQmUoKHsgeDogMCB9KT8uW251bGw/LmEgPz8gJ3gnXSA/PyAzLCAwKTsKK3Nob3VsZEJl
KCgoKSA9PiAwKT8uKG51bGw/LmEgPz8gJ3gnKSA/PyAzLCAwKTsK
</data>

          </attachment>
      

    </bug>

</bugzilla>