<?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>186160</bug_id>
          
          <creation_ts>2018-05-31 13:46:31 -0700</creation_ts>
          <short_desc>Cache toString results for CoW arrays</short_desc>
          <delta_ts>2018-06-05 16:04:01 -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>Safari Technology Preview</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Saam Barati">saam</reporter>
          <assigned_to name="Saam Barati">saam</assigned_to>
          <cc>benjamin</cc>
    
    <cc>commit-queue</cc>
    
    <cc>darin</cc>
    
    <cc>fpizlo</cc>
    
    <cc>ggaren</cc>
    
    <cc>gskachkov</cc>
    
    <cc>jfbastien</cc>
    
    <cc>keith_miller</cc>
    
    <cc>mark.lam</cc>
    
    <cc>msaboff</cc>
    
    <cc>realdawei</cc>
    
    <cc>rmorisset</cc>
    
    <cc>ryanhaddad</cc>
    
    <cc>ticaiolima</cc>
    
    <cc>webkit-bug-importer</cc>
    
    <cc>wenson_hsieh</cc>
    
    <cc>ysuzuki</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1428989</commentid>
    <comment_count>0</comment_count>
    <who name="Saam Barati">saam</who>
    <bug_when>2018-05-31 13:46:31 -0700</bug_when>
    <thetext>...</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1429039</commentid>
    <comment_count>1</comment_count>
      <attachid>341701</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2018-05-31 16:33:03 -0700</bug_when>
    <thetext>Created attachment 341701
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1429050</commentid>
    <comment_count>2</comment_count>
      <attachid>341701</attachid>
    <who name="Keith Miller">keith_miller</who>
    <bug_when>2018-05-31 16:45:11 -0700</bug_when>
    <thetext>Comment on attachment 341701
patch

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

r=me with comments.

&gt; Source/JavaScriptCore/runtime/ArrayPrototype.cpp:388
&gt; +static inline bool canUseFastJoin(const JSObject* thisObject)

Why both static and inline? that&apos;s the same as just inline...

&gt; Source/JavaScriptCore/runtime/ArrayPrototype.cpp:416
&gt; +template&lt;typename T&gt; static inline bool containsHole(T* data, unsigned length)

Newline between the template and the rest of the declaration.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1429052</commentid>
    <comment_count>3</comment_count>
      <attachid>341701</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2018-05-31 16:47:22 -0700</bug_when>
    <thetext>Comment on attachment 341701
patch

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

&gt;&gt; Source/JavaScriptCore/runtime/ArrayPrototype.cpp:388
&gt;&gt; +static inline bool canUseFastJoin(const JSObject* thisObject)
&gt; 
&gt; Why both static and inline? that&apos;s the same as just inline...

because that&apos;s how this code was before. I&apos;ll move to just inline.

&gt; Source/JavaScriptCore/runtime/ArrayPrototype.cpp:417
&gt; +{

ditto and ditto</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1429053</commentid>
    <comment_count>4</comment_count>
      <attachid>341701</attachid>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2018-05-31 16:47:35 -0700</bug_when>
    <thetext>Comment on attachment 341701
patch

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

&gt;&gt; Source/JavaScriptCore/runtime/ArrayPrototype.cpp:388
&gt;&gt; +static inline bool canUseFastJoin(const JSObject* thisObject)
&gt; 
&gt; Why both static and inline? that&apos;s the same as just inline...

&quot;static&quot; does not require a prototype.  Just &quot;inline&quot; does.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1429058</commentid>
    <comment_count>5</comment_count>
      <attachid>341706</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2018-05-31 16:51:22 -0700</bug_when>
    <thetext>Created attachment 341706
patch for landing</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1429060</commentid>
    <comment_count>6</comment_count>
      <attachid>341707</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2018-05-31 16:52:48 -0700</bug_when>
    <thetext>Created attachment 341707
patch for landing</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1429063</commentid>
    <comment_count>7</comment_count>
      <attachid>341701</attachid>
    <who name="Keith Miller">keith_miller</who>
    <bug_when>2018-05-31 16:55:20 -0700</bug_when>
    <thetext>Comment on attachment 341701
patch

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

&gt;&gt;&gt;&gt; Source/JavaScriptCore/runtime/ArrayPrototype.cpp:388
&gt;&gt;&gt;&gt; +static inline bool canUseFastJoin(const JSObject* thisObject)
&gt;&gt;&gt; 
&gt;&gt;&gt; Why both static and inline? that&apos;s the same as just inline...
&gt;&gt; 
&gt;&gt; because that&apos;s how this code was before. I&apos;ll move to just inline.
&gt; 
&gt; &quot;static&quot; does not require a prototype.  Just &quot;inline&quot; does.

It totes doesn&apos;t need a prototype with just &quot;inline&quot;. Look at hasIndexedProperties in IndexingType.h</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1429064</commentid>
    <comment_count>8</comment_count>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2018-05-31 16:56:13 -0700</bug_when>
    <thetext>(In reply to Keith Miller from comment #7)
&gt; Comment on attachment 341701 [details]
&gt; patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=341701&amp;action=review
&gt; 
&gt; &gt;&gt;&gt;&gt; Source/JavaScriptCore/runtime/ArrayPrototype.cpp:388
&gt; &gt;&gt;&gt;&gt; +static inline bool canUseFastJoin(const JSObject* thisObject)
&gt; &gt;&gt;&gt; 
&gt; &gt;&gt;&gt; Why both static and inline? that&apos;s the same as just inline...
&gt; &gt;&gt; 
&gt; &gt;&gt; because that&apos;s how this code was before. I&apos;ll move to just inline.
&gt; &gt; 
&gt; &gt; &quot;static&quot; does not require a prototype.  Just &quot;inline&quot; does.
&gt; 
&gt; It totes doesn&apos;t need a prototype with just &quot;inline&quot;. Look at
&gt; hasIndexedProperties in IndexingType.h

I stand corrected.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1429120</commentid>
    <comment_count>9</comment_count>
      <attachid>341707</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2018-05-31 20:07:34 -0700</bug_when>
    <thetext>Comment on attachment 341707
patch for landing

Clearing flags on attachment: 341707

Committed r232385: &lt;https://trac.webkit.org/changeset/232385&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1429121</commentid>
    <comment_count>10</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2018-05-31 20:07:36 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1429123</commentid>
    <comment_count>11</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2018-05-31 20:09:05 -0700</bug_when>
    <thetext>&lt;rdar://problem/40709425&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1429237</commentid>
    <comment_count>12</comment_count>
    <who name="Dawei Fenton (:realdawei)">realdawei</who>
    <bug_when>2018-06-01 09:08:13 -0700</bug_when>
    <thetext>Looks like we have some LLINT CLoop build issues after this latest patch

https://build.webkit.org/builders/Apple%20High%20Sierra%20LLINT%20CLoop%20%28BuildAndTest%29/builds/6306/steps/compile-webkit/logs/stdio

./runtime/ArrayPrototype.cpp:576:34: error: incomplete type &apos;JSC::JSImmutableButterfly&apos; named in nested name specifier
./runtime/ArrayPrototype.cpp:586:20: error: incomplete type &apos;JSC::JSImmutableButterfly&apos; named in nested name specifier</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1429319</commentid>
    <comment_count>13</comment_count>
    <who name="Wenson Hsieh">wenson_hsieh</who>
    <bug_when>2018-06-01 12:32:17 -0700</bug_when>
    <thetext>(In reply to David Fenton from comment #12)
&gt; Looks like we have some LLINT CLoop build issues after this latest patch
&gt; 
&gt; https://build.webkit.org/builders/
&gt; Apple%20High%20Sierra%20LLINT%20CLoop%20%28BuildAndTest%29/builds/6306/steps/
&gt; compile-webkit/logs/stdio
&gt; 
&gt; ./runtime/ArrayPrototype.cpp:576:34: error: incomplete type
&gt; &apos;JSC::JSImmutableButterfly&apos; named in nested name specifier
&gt; ./runtime/ArrayPrototype.cpp:586:20: error: incomplete type
&gt; &apos;JSC::JSImmutableButterfly&apos; named in nested name specifier

I just ran into this and filed https://bugs.webkit.org/show_bug.cgi?id=186203.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1429380</commentid>
    <comment_count>14</comment_count>
    <who name="Saam Barati">saam</who>
    <bug_when>2018-06-01 15:17:54 -0700</bug_when>
    <thetext>(In reply to Wenson Hsieh from comment #13)
&gt; (In reply to David Fenton from comment #12)
&gt; &gt; Looks like we have some LLINT CLoop build issues after this latest patch
&gt; &gt; 
&gt; &gt; https://build.webkit.org/builders/
&gt; &gt; Apple%20High%20Sierra%20LLINT%20CLoop%20%28BuildAndTest%29/builds/6306/steps/
&gt; &gt; compile-webkit/logs/stdio
&gt; &gt; 
&gt; &gt; ./runtime/ArrayPrototype.cpp:576:34: error: incomplete type
&gt; &gt; &apos;JSC::JSImmutableButterfly&apos; named in nested name specifier
&gt; &gt; ./runtime/ArrayPrototype.cpp:586:20: error: incomplete type
&gt; &gt; &apos;JSC::JSImmutableButterfly&apos; named in nested name specifier
&gt; 
&gt; I just ran into this and filed
&gt; https://bugs.webkit.org/show_bug.cgi?id=186203.

Thanks for fixing this</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1430245</commentid>
    <comment_count>15</comment_count>
      <attachid>341701</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2018-06-05 15:18:27 -0700</bug_when>
    <thetext>Comment on attachment 341701
patch

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

&gt;&gt;&gt;&gt;&gt;&gt; Source/JavaScriptCore/runtime/ArrayPrototype.cpp:388
&gt;&gt;&gt;&gt;&gt;&gt; +static inline bool canUseFastJoin(const JSObject* thisObject)
&gt;&gt;&gt;&gt;&gt; 
&gt;&gt;&gt;&gt;&gt; Why both static and inline? that&apos;s the same as just inline...
&gt;&gt;&gt;&gt; 
&gt;&gt;&gt;&gt; because that&apos;s how this code was before. I&apos;ll move to just inline.
&gt;&gt;&gt; 
&gt;&gt;&gt; &quot;static&quot; does not require a prototype.  Just &quot;inline&quot; does.
&gt;&gt; 
&gt;&gt; It totes doesn&apos;t need a prototype with just &quot;inline&quot;. Look at hasIndexedProperties in IndexingType.h
&gt; 
&gt; I stand corrected.

It’s true that static and inline is similar to just inline, but it’s not *quite* the same. Maybe no differences that we care about here, but there is at least one difference that I know of:

If there is a global variable inside the function (confusingly, you do that with the same keyword, static) and the function is marked static, then each copy of the function in each translation unit has its own distinct global variable with a separate value. If the function is not marked static and is marked only inline, then all copies of the function in all translation units will share a single global variable with a single value.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1430246</commentid>
    <comment_count>16</comment_count>
      <attachid>341701</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2018-06-05 15:20:18 -0700</bug_when>
    <thetext>Comment on attachment 341701
patch

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

&gt;&gt;&gt;&gt;&gt;&gt;&gt; Source/JavaScriptCore/runtime/ArrayPrototype.cpp:388
&gt;&gt;&gt;&gt;&gt;&gt;&gt; +static inline bool canUseFastJoin(const JSObject* thisObject)
&gt;&gt;&gt;&gt;&gt;&gt; 
&gt;&gt;&gt;&gt;&gt;&gt; Why both static and inline? that&apos;s the same as just inline...
&gt;&gt;&gt;&gt;&gt; 
&gt;&gt;&gt;&gt;&gt; because that&apos;s how this code was before. I&apos;ll move to just inline.
&gt;&gt;&gt;&gt; 
&gt;&gt;&gt;&gt; &quot;static&quot; does not require a prototype.  Just &quot;inline&quot; does.
&gt;&gt;&gt; 
&gt;&gt;&gt; It totes doesn&apos;t need a prototype with just &quot;inline&quot;. Look at hasIndexedProperties in IndexingType.h
&gt;&gt; 
&gt;&gt; I stand corrected.
&gt; 
&gt; It’s true that static and inline is similar to just inline, but it’s not *quite* the same. Maybe no differences that we care about here, but there is at least one difference that I know of:
&gt; 
&gt; If there is a global variable inside the function (confusingly, you do that with the same keyword, static) and the function is marked static, then each copy of the function in each translation unit has its own distinct global variable with a separate value. If the function is not marked static and is marked only inline, then all copies of the function in all translation units will share a single global variable with a single value.

I thought of a second difference:

If we mark a function static, and then don’t use it, we will get an unused function warning. If we don’t mark it static, then we don’t get the warning. That seems like a good reason to mark functions in .cpp files static: We get the compiler’s help in noticing dead code.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1430247</commentid>
    <comment_count>17</comment_count>
      <attachid>341701</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2018-06-05 15:24:01 -0700</bug_when>
    <thetext>Comment on attachment 341701
patch

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

&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt; Source/JavaScriptCore/runtime/ArrayPrototype.cpp:388
&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt; +static inline bool canUseFastJoin(const JSObject* thisObject)
&gt;&gt;&gt;&gt;&gt;&gt;&gt; 
&gt;&gt;&gt;&gt;&gt;&gt;&gt; Why both static and inline? that&apos;s the same as just inline...
&gt;&gt;&gt;&gt;&gt;&gt; 
&gt;&gt;&gt;&gt;&gt;&gt; because that&apos;s how this code was before. I&apos;ll move to just inline.
&gt;&gt;&gt;&gt;&gt; 
&gt;&gt;&gt;&gt;&gt; &quot;static&quot; does not require a prototype.  Just &quot;inline&quot; does.
&gt;&gt;&gt;&gt; 
&gt;&gt;&gt;&gt; It totes doesn&apos;t need a prototype with just &quot;inline&quot;. Look at hasIndexedProperties in IndexingType.h
&gt;&gt;&gt; 
&gt;&gt;&gt; I stand corrected.
&gt;&gt; 
&gt;&gt; It’s true that static and inline is similar to just inline, but it’s not *quite* the same. Maybe no differences that we care about here, but there is at least one difference that I know of:
&gt;&gt; 
&gt;&gt; If there is a global variable inside the function (confusingly, you do that with the same keyword, static) and the function is marked static, then each copy of the function in each translation unit has its own distinct global variable with a separate value. If the function is not marked static and is marked only inline, then all copies of the function in all translation units will share a single global variable with a single value.
&gt; 
&gt; I thought of a second difference:
&gt; 
&gt; If we mark a function static, and then don’t use it, we will get an unused function warning. If we don’t mark it static, then we don’t get the warning. That seems like a good reason to mark functions in .cpp files static: We get the compiler’s help in noticing dead code.

Third difference, one that we must not take advantage of because of our &quot;compiling more than one file at a time&quot; optimization, but it is a difference:

Functions marked static have what’s called &quot;internal linkage&quot;. This means that two functions with the same signature don’t conflict with each other. While this can be confusing, two identically named functions, it might also be valuable to know there won’t be a conflict. Functions that are not marked static, even ones marked inline, have &quot;external linkage&quot;. That means that two functions with the same signature may conflict. Even a function marked &quot;inline&quot; might get a non-inlined copy that can conflict. Using static guarantees there is no error due to the conflict at link time.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1430264</commentid>
    <comment_count>18</comment_count>
    <who name="Keith Miller">keith_miller</who>
    <bug_when>2018-06-05 16:04:01 -0700</bug_when>
    <thetext>(In reply to Darin Adler from comment #15)
&gt; Comment on attachment 341701 [details]
&gt; patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=341701&amp;action=review
&gt; 
&gt; &gt;&gt;&gt;&gt;&gt;&gt; Source/JavaScriptCore/runtime/ArrayPrototype.cpp:388
&gt; &gt;&gt;&gt;&gt;&gt;&gt; +static inline bool canUseFastJoin(const JSObject* thisObject)
&gt; &gt;&gt;&gt;&gt;&gt; 
&gt; &gt;&gt;&gt;&gt;&gt; Why both static and inline? that&apos;s the same as just inline...
&gt; &gt;&gt;&gt;&gt; 
&gt; &gt;&gt;&gt;&gt; because that&apos;s how this code was before. I&apos;ll move to just inline.
&gt; &gt;&gt;&gt; 
&gt; &gt;&gt;&gt; &quot;static&quot; does not require a prototype.  Just &quot;inline&quot; does.
&gt; &gt;&gt; 
&gt; &gt;&gt; It totes doesn&apos;t need a prototype with just &quot;inline&quot;. Look at hasIndexedProperties in IndexingType.h
&gt; &gt; 
&gt; &gt; I stand corrected.
&gt; 
&gt; It’s true that static and inline is similar to just inline, but it’s not
&gt; *quite* the same. Maybe no differences that we care about here, but there is
&gt; at least one difference that I know of:
&gt; 
&gt; If there is a global variable inside the function (confusingly, you do that
&gt; with the same keyword, static) and the function is marked static, then each
&gt; copy of the function in each translation unit has its own distinct global
&gt; variable with a separate value. If the function is not marked static and is
&gt; marked only inline, then all copies of the function in all translation units
&gt; will share a single global variable with a single value.

What?!? I did not know this... That kinda makes sense but is also pretty insane...</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>341701</attachid>
            <date>2018-05-31 16:33:03 -0700</date>
            <delta_ts>2018-05-31 16:51:22 -0700</delta_ts>
            <desc>patch</desc>
            <filename>b-backup.diff</filename>
            <type>text/plain</type>
            <size>15299</size>
            <attacher name="Saam Barati">saam</attacher>
            
              <data encoding="base64">SW5kZXg6IEpTVGVzdHMvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEpTVGVzdHMvQ2hhbmdlTG9n
CShyZXZpc2lvbiAyMzIzNzQpCisrKyBKU1Rlc3RzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpA
QCAtMSwzICsxLDEzIEBACisyMDE4LTA1LTMxICBTYWFtIEJhcmF0aSAgPHNiYXJhdGlAYXBwbGUu
Y29tPgorCisgICAgICAgIENhY2hlIHRvU3RyaW5nIHJlc3VsdHMgZm9yIENvVyBhcnJheXMKKyAg
ICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE4NjE2MAorCisg
ICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogbWljcm9iZW5j
aG1hcmtzL3RvLXN0cmluZy1vbi1jb3ctYXJyYXkuanM6IEFkZGVkLgorICAgICAgICAoZm9vKToK
KwogMjAxOC0wNS0zMSAgS2VpdGggTWlsbGVyICA8a2VpdGhfbWlsbGVyQGFwcGxlLmNvbT4KIAog
ICAgICAgICBSZWJhc2VsaW5lIHRlc3QgZm9yIGNoYW5nZSBpbiBFcnJvci5zdGFjayBiZWhhdmlv
ci4KSW5kZXg6IEpTVGVzdHMvbWljcm9iZW5jaG1hcmtzL3RvLXN0cmluZy1vbi1jb3ctYXJyYXku
anMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gSlNUZXN0cy9taWNyb2JlbmNobWFya3MvdG8tc3RyaW5nLW9uLWNv
dy1hcnJheS5qcwkobm9uZXhpc3RlbnQpCisrKyBKU1Rlc3RzL21pY3JvYmVuY2htYXJrcy90by1z
dHJpbmctb24tY293LWFycmF5LmpzCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTYgQEAKK2xl
dCBhcnJheXMgPSBbCisgICAgWzAsMF0sCisgICAgWzAsMV0sCisgICAgWzEsMF0sCisgICAgWzEs
MV0sCitdOworCitmdW5jdGlvbiBmb28oYXJyKSB7CisgICAgcmV0dXJuIGFyci50b1N0cmluZygp
OworfQorbm9JbmxpbmUoZm9vKTsKKworZm9yIChsZXQgaSA9IDA7IGkgPCAzMDAwMDsgKytpKSB7
CisgICAgZm9yIChsZXQgYXJyIG9mIGFycmF5cykKKyAgICAgICAgZm9vKGFycik7Cit9CkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDIzMjM2NSkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwzMyBAQAorMjAx
OC0wNS0zMSAgU2FhbSBCYXJhdGkgIDxzYmFyYXRpQGFwcGxlLmNvbT4KKworICAgICAgICBDYWNo
ZSB0b1N0cmluZyByZXN1bHRzIGZvciBDb1cgYXJyYXlzCisgICAgICAgIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xODYxNjAKKworICAgICAgICBSZXZpZXdlZCBieSBO
T0JPRFkgKE9PUFMhKS4KKworICAgICAgICBUaGlzIHBhdGNoIG1ha2VzIGl0IHNvIHRoYXQgd2Ug
Y2FjaGUgdGhlIHJlc3VsdCBvZiB0b1N0cmluZyBvbgorICAgICAgICBhcnJheXMgd2l0aCBhIENv
VyBidXR0ZXJmbHkuIFRoaXMgY2FjaGUgbGl2ZXMgb24gSGVhcCBhbmQgaXMKKyAgICAgICAgY2xl
YXJlZCBhZnRlciBldmVyeSBHQy4gV2Ugb25seSBjYWNoZSB0aGUgdG9TdHJpbmcgcmVzdWx0IHdo
ZW4KKyAgICAgICAgdGhlIENvVyBidXR0ZXJmbHkgZG9lc24ndCBoYXZlIGEgaG9sZSAoY3VycmVu
dGx5LCBhbGwgQ29XIGFycmF5cworICAgICAgICBoYXZlIGEgaG9sZSwgYnV0IHRoaXMgaXNuJ3Qg
YW4gaW52YXJpYW50IHdlIHdhbnQgdG8gcmVseSBvbikuIFRoZQorICAgICAgICByZWFzb24gZm9y
IHRoaXMgaXMgdGhhdCBpZiB0aGVyZSBpcyBhIGhvbGUsIHRoZSB2YWx1ZSBtYXkgYmUgbG9hZGVk
CisgICAgICAgIGZyb20gdGhlIHByb3RvdHlwZSwgYW5kIHRoZSBjYWNoZSBtYXkgcHJvZHVjZSBh
IHN0YWxlIHJlc3VsdC4KKyAgICAgICAgCisgICAgICAgIFRoaXMgaXMgYSB+NCUgc3BlZWR1cCBv
biB0aGUgTUwgc3VidGVzdCBpbiBBUkVTLiBBbmQgaXMgYSB+MSUgb3ZlcmFsbAorICAgICAgICBw
cm9ncmVzc2lvbiBvbiBBUkVTLgorCisgICAgICAgICogaGVhcC9IZWFwLmNwcDoKKyAgICAgICAg
KEpTQzo6SGVhcDo6ZmluYWxpemUpOgorICAgICAgICAoSlNDOjpIZWFwOjphZGRDb3JlQ29uc3Ry
YWludHMpOgorICAgICAgICAqIGhlYXAvSGVhcC5oOgorICAgICAgICAqIHJ1bnRpbWUvQXJyYXlQ
cm90b3R5cGUuY3BwOgorICAgICAgICAoSlNDOjpjYW5Vc2VGYXN0Sm9pbik6CisgICAgICAgIChK
U0M6OmhvbGVzTXVzdEZvcndhcmRUb1Byb3RvdHlwZSk6CisgICAgICAgIChKU0M6OmlzSG9sZSk6
CisgICAgICAgIChKU0M6OmNvbnRhaW5zSG9sZSk6CisgICAgICAgIChKU0M6OmZhc3RKb2luKToK
KyAgICAgICAgKEpTQzo6YXJyYXlQcm90b0Z1bmNUb1N0cmluZyk6CisKIDIwMTgtMDUtMzAgIFl1
c3VrZSBTdXp1a2kgIDx1dGF0YW5lLnRlYUBnbWFpbC5jb20+CiAKICAgICAgICAgW0pTQ10gUGFz
cyBWTSYgcGFyYW1ldGVyIGFzIG11Y2ggYXMgcG9zc2libGUKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9oZWFwL0hlYXAuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9oZWFwL0hlYXAuY3BwCShyZXZpc2lvbiAyMzIzNjUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaGVhcC9IZWFwLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjA0Myw2ICsyMDQzLDggQEAgdm9p
ZCBIZWFwOjpmaW5hbGl6ZSgpCiAgICAgCiAgICAgaWYgKEhhc093blByb3BlcnR5Q2FjaGUqIGNh
Y2hlID0gdm0oKS0+aGFzT3duUHJvcGVydHlDYWNoZSgpKQogICAgICAgICBjYWNoZS0+Y2xlYXIo
KTsKKworICAgIGltbXV0YWJsZUJ1dHRlcmZseVRvU3RyaW5nQ2FjaGUuY2xlYXIoKTsKICAgICAK
ICAgICBmb3IgKGNvbnN0IEhlYXBGaW5hbGl6ZXJDYWxsYmFjayYgY2FsbGJhY2sgOiBtX2hlYXBG
aW5hbGl6ZXJDYWxsYmFja3MpCiAgICAgICAgIGNhbGxiYWNrLnJ1bigqdm0oKSk7CkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2hlYXAvSGVhcC5oCShyZXZpc2lvbiAyMzIzNjUpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaGVhcC9IZWFwLmgJKHdvcmtpbmcgY29weSkKQEAgLTY4LDYgKzY4LDcgQEAg
Y2xhc3MgSW5jcmVtZW50YWxTd2VlcGVyOwogY2xhc3MgSklUU3R1YlJvdXRpbmU7CiBjbGFzcyBK
SVRTdHViUm91dGluZVNldDsKIGNsYXNzIEpTQ2VsbDsKK2NsYXNzIEpTSW1tdXRhYmxlQnV0dGVy
Zmx5OwogY2xhc3MgSlNWYWx1ZTsKIGNsYXNzIExMSW50T2Zmc2V0c0V4dHJhY3RvcjsKIGNsYXNz
IE1hY2hpbmVUaHJlYWRzOwpAQCAtMzgxLDYgKzM4Miw4IEBAIHB1YmxpYzoKICAgICAKICAgICBT
ZWNvbmRzIHRvdGFsR0NUaW1lKCkgY29uc3QgeyByZXR1cm4gbV90b3RhbEdDVGltZTsgfQogCisg
ICAgSGFzaE1hcDxKU0ltbXV0YWJsZUJ1dHRlcmZseSosIEpTU3RyaW5nKj4gaW1tdXRhYmxlQnV0
dGVyZmx5VG9TdHJpbmdDYWNoZTsKKwogcHJpdmF0ZToKICAgICBmcmllbmQgY2xhc3MgQWxsb2Nh
dGluZ1Njb3BlOwogICAgIGZyaWVuZCBjbGFzcyBDb2RlQmxvY2s7CkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9BcnJheVByb3RvdHlwZS5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQXJyYXlQcm90b3R5cGUuY3BwCShyZXZpc2lvbiAy
MzIzNjUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9BcnJheVByb3RvdHlwZS5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTM4NSw4ICszODUsMTQyIEBAIHZvaWQgdW5zaGlmdChFeGVj
U3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiAKICAgICB9CiB9CiAKLXN0YXRpYyBib29sIGNhblVzZUZh
c3RKb2luKGNvbnN0IEpTT2JqZWN0Kik7Ci1zdGF0aWMgSlNWYWx1ZSBmYXN0Sm9pbihFeGVjU3Rh
dGUmLCBKU09iamVjdCosIFN0cmluZ1ZpZXcsIHVuc2lnbmVkKTsKK3N0YXRpYyBpbmxpbmUgYm9v
bCBjYW5Vc2VGYXN0Sm9pbihjb25zdCBKU09iamVjdCogdGhpc09iamVjdCkKK3sKKyAgICBzd2l0
Y2ggKHRoaXNPYmplY3QtPmluZGV4aW5nVHlwZSgpKSB7CisgICAgY2FzZSBBTExfQ09OVElHVU9V
U19JTkRFWElOR19UWVBFUzoKKyAgICBjYXNlIEFMTF9JTlQzMl9JTkRFWElOR19UWVBFUzoKKyAg
ICBjYXNlIEFMTF9ET1VCTEVfSU5ERVhJTkdfVFlQRVM6CisgICAgICAgIHJldHVybiB0cnVlOwor
ICAgIGRlZmF1bHQ6CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICByZXR1cm4gZmFsc2U7Cit9
CisKK3N0YXRpYyBpbmxpbmUgYm9vbCBob2xlc011c3RGb3J3YXJkVG9Qcm90b3R5cGUoVk0mIHZt
LCBKU09iamVjdCogb2JqZWN0KQoreworICAgIHJldHVybiBvYmplY3QtPnN0cnVjdHVyZSh2bSkt
PmhvbGVzTXVzdEZvcndhcmRUb1Byb3RvdHlwZSh2bSwgb2JqZWN0KTsKK30KKworc3RhdGljIGlu
bGluZSBib29sIGlzSG9sZShkb3VibGUgdmFsdWUpCit7CisgICAgcmV0dXJuIHN0ZDo6aXNuYW4o
dmFsdWUpOworfQorCitzdGF0aWMgaW5saW5lIGJvb2wgaXNIb2xlKGNvbnN0IFdyaXRlQmFycmll
cjxVbmtub3duPiYgdmFsdWUpCit7CisgICAgcmV0dXJuICF2YWx1ZTsKK30KKwordGVtcGxhdGU8
dHlwZW5hbWUgVD4gc3RhdGljIGlubGluZSBib29sIGNvbnRhaW5zSG9sZShUKiBkYXRhLCB1bnNp
Z25lZCBsZW5ndGgpCit7CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGxlbmd0aDsgKytp
KSB7CisgICAgICAgIGlmIChpc0hvbGUoZGF0YVtpXSkpCisgICAgICAgICAgICByZXR1cm4gdHJ1
ZTsKKyAgICB9CisgICAgcmV0dXJuIGZhbHNlOworfQorCitzdGF0aWMgaW5saW5lIEpTVmFsdWUg
ZmFzdEpvaW4oRXhlY1N0YXRlJiBzdGF0ZSwgSlNPYmplY3QqIHRoaXNPYmplY3QsIFN0cmluZ1Zp
ZXcgc2VwYXJhdG9yLCB1bnNpZ25lZCBsZW5ndGgsIGJvb2wqIHNhd0hvbGVzID0gbnVsbHB0cikK
K3sKKyAgICBWTSYgdm0gPSBzdGF0ZS52bSgpOworICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RI
Uk9XX1NDT1BFKHZtKTsKKworICAgIHN3aXRjaCAodGhpc09iamVjdC0+aW5kZXhpbmdUeXBlKCkp
IHsKKyAgICBjYXNlIEFMTF9JTlQzMl9JTkRFWElOR19UWVBFUzogeworICAgICAgICBhdXRvJiBi
dXR0ZXJmbHkgPSAqdGhpc09iamVjdC0+YnV0dGVyZmx5KCk7CisgICAgICAgIGlmIChVTkxJS0VM
WShsZW5ndGggPiBidXR0ZXJmbHkucHVibGljTGVuZ3RoKCkpKQorICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgIEpTU3RyaW5nSm9pbmVyIGpvaW5lcihzdGF0ZSwgc2VwYXJhdG9yLCBsZW5ndGgp
OworICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB7IH0pOworICAgICAgICBhdXRv
IGRhdGEgPSBidXR0ZXJmbHkuY29udGlndW91cygpLmRhdGEoKTsKKyAgICAgICAgYm9vbCBob2xl
c0tub3duVG9CZU9LID0gZmFsc2U7CisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBs
ZW5ndGg7ICsraSkgeworICAgICAgICAgICAgSlNWYWx1ZSB2YWx1ZSA9IGRhdGFbaV0uZ2V0KCk7
CisgICAgICAgICAgICBpZiAoTElLRUxZKHZhbHVlKSkKKyAgICAgICAgICAgICAgICBqb2luZXIu
YXBwZW5kTnVtYmVyKHZtLCB2YWx1ZS5hc0ludDMyKCkpOworICAgICAgICAgICAgZWxzZSB7Cisg
ICAgICAgICAgICAgICAgaWYgKHNhd0hvbGVzKQorICAgICAgICAgICAgICAgICAgICAqc2F3SG9s
ZXMgPSB0cnVlOworICAgICAgICAgICAgICAgIGlmICghaG9sZXNLbm93blRvQmVPSykgeworICAg
ICAgICAgICAgICAgICAgICBpZiAoaG9sZXNNdXN0Rm9yd2FyZFRvUHJvdG90eXBlKHZtLCB0aGlz
T2JqZWN0KSkKKyAgICAgICAgICAgICAgICAgICAgICAgIGdvdG8gZ2VuZXJhbENhc2U7CisgICAg
ICAgICAgICAgICAgICAgIGhvbGVzS25vd25Ub0JlT0sgPSB0cnVlOworICAgICAgICAgICAgICAg
IH0KKyAgICAgICAgICAgICAgICBqb2luZXIuYXBwZW5kRW1wdHlTdHJpbmcoKTsKKyAgICAgICAg
ICAgIH0KKyAgICAgICAgfQorICAgICAgICBzY29wZS5yZWxlYXNlKCk7CisgICAgICAgIHJldHVy
biBqb2luZXIuam9pbihzdGF0ZSk7CisgICAgfQorICAgIGNhc2UgQUxMX0NPTlRJR1VPVVNfSU5E
RVhJTkdfVFlQRVM6IHsKKyAgICAgICAgYXV0byYgYnV0dGVyZmx5ID0gKnRoaXNPYmplY3QtPmJ1
dHRlcmZseSgpOworICAgICAgICBpZiAoVU5MSUtFTFkobGVuZ3RoID4gYnV0dGVyZmx5LnB1Ymxp
Y0xlbmd0aCgpKSkKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBKU1N0cmluZ0pvaW5lciBq
b2luZXIoc3RhdGUsIHNlcGFyYXRvciwgbGVuZ3RoKTsKKyAgICAgICAgUkVUVVJOX0lGX0VYQ0VQ
VElPTihzY29wZSwgeyB9KTsKKyAgICAgICAgYXV0byBkYXRhID0gYnV0dGVyZmx5LmNvbnRpZ3Vv
dXMoKS5kYXRhKCk7CisgICAgICAgIGJvb2wgaG9sZXNLbm93blRvQmVPSyA9IGZhbHNlOworICAg
ICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbGVuZ3RoOyArK2kpIHsKKyAgICAgICAgICAg
IGlmIChKU1ZhbHVlIHZhbHVlID0gZGF0YVtpXS5nZXQoKSkgeworICAgICAgICAgICAgICAgIGlm
ICgham9pbmVyLmFwcGVuZFdpdGhvdXRTaWRlRWZmZWN0cyhzdGF0ZSwgdmFsdWUpKQorICAgICAg
ICAgICAgICAgICAgICBnb3RvIGdlbmVyYWxDYXNlOworICAgICAgICAgICAgfSBlbHNlIHsKKyAg
ICAgICAgICAgICAgICBpZiAoc2F3SG9sZXMpCisgICAgICAgICAgICAgICAgICAgICpzYXdIb2xl
cyA9IHRydWU7CisgICAgICAgICAgICAgICAgaWYgKCFob2xlc0tub3duVG9CZU9LKSB7CisgICAg
ICAgICAgICAgICAgICAgIGlmIChob2xlc011c3RGb3J3YXJkVG9Qcm90b3R5cGUodm0sIHRoaXNP
YmplY3QpKQorICAgICAgICAgICAgICAgICAgICAgICAgZ290byBnZW5lcmFsQ2FzZTsKKyAgICAg
ICAgICAgICAgICAgICAgaG9sZXNLbm93blRvQmVPSyA9IHRydWU7CisgICAgICAgICAgICAgICAg
fQorICAgICAgICAgICAgICAgIGpvaW5lci5hcHBlbmRFbXB0eVN0cmluZygpOworICAgICAgICAg
ICAgfQorICAgICAgICB9CisgICAgICAgIHNjb3BlLnJlbGVhc2UoKTsKKyAgICAgICAgcmV0dXJu
IGpvaW5lci5qb2luKHN0YXRlKTsKKyAgICB9CisgICAgY2FzZSBBTExfRE9VQkxFX0lOREVYSU5H
X1RZUEVTOiB7CisgICAgICAgIGF1dG8mIGJ1dHRlcmZseSA9ICp0aGlzT2JqZWN0LT5idXR0ZXJm
bHkoKTsKKyAgICAgICAgaWYgKFVOTElLRUxZKGxlbmd0aCA+IGJ1dHRlcmZseS5wdWJsaWNMZW5n
dGgoKSkpCisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgSlNTdHJpbmdKb2luZXIgam9pbmVy
KHN0YXRlLCBzZXBhcmF0b3IsIGxlbmd0aCk7CisgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04o
c2NvcGUsIHsgfSk7CisgICAgICAgIGF1dG8gZGF0YSA9IGJ1dHRlcmZseS5jb250aWd1b3VzRG91
YmxlKCkuZGF0YSgpOworICAgICAgICBib29sIGhvbGVzS25vd25Ub0JlT0sgPSBmYWxzZTsKKyAg
ICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGxlbmd0aDsgKytpKSB7CisgICAgICAgICAg
ICBkb3VibGUgdmFsdWUgPSBkYXRhW2ldOworICAgICAgICAgICAgaWYgKExJS0VMWSghaXNIb2xl
KHZhbHVlKSkpCisgICAgICAgICAgICAgICAgam9pbmVyLmFwcGVuZE51bWJlcih2bSwgdmFsdWUp
OworICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgaWYgKHNhd0hvbGVzKQorICAg
ICAgICAgICAgICAgICAgICAqc2F3SG9sZXMgPSB0cnVlOworICAgICAgICAgICAgICAgIGlmICgh
aG9sZXNLbm93blRvQmVPSykgeworICAgICAgICAgICAgICAgICAgICBpZiAoaG9sZXNNdXN0Rm9y
d2FyZFRvUHJvdG90eXBlKHZtLCB0aGlzT2JqZWN0KSkKKyAgICAgICAgICAgICAgICAgICAgICAg
IGdvdG8gZ2VuZXJhbENhc2U7CisgICAgICAgICAgICAgICAgICAgIGhvbGVzS25vd25Ub0JlT0sg
PSB0cnVlOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBqb2luZXIuYXBwZW5k
RW1wdHlTdHJpbmcoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBzY29wZS5y
ZWxlYXNlKCk7CisgICAgICAgIHJldHVybiBqb2luZXIuam9pbihzdGF0ZSk7CisgICAgfQorICAg
IH0KKworZ2VuZXJhbENhc2U6CisgICAgSlNTdHJpbmdKb2luZXIgam9pbmVyKHN0YXRlLCBzZXBh
cmF0b3IsIGxlbmd0aCk7CisgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgeyB9KTsKKyAg
ICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbGVuZ3RoOyArK2kpIHsKKyAgICAgICAgSlNWYWx1
ZSBlbGVtZW50ID0gdGhpc09iamVjdC0+Z2V0SW5kZXgoJnN0YXRlLCBpKTsKKyAgICAgICAgUkVU
VVJOX0lGX0VYQ0VQVElPTihzY29wZSwgeyB9KTsKKyAgICAgICAgam9pbmVyLmFwcGVuZChzdGF0
ZSwgZWxlbWVudCk7CisgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHsgfSk7Cisg
ICAgfQorICAgIHNjb3BlLnJlbGVhc2UoKTsKKyAgICByZXR1cm4gam9pbmVyLmpvaW4oc3RhdGUp
OworfQorCiAKIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgYXJyYXlQcm90b0Z1bmNUb1N0
cmluZyhFeGVjU3RhdGUqIGV4ZWMpCiB7CkBAIC0zOTcsNyArNTMxLDcgQEAgRW5jb2RlZEpTVmFs
dWUgSlNDX0hPU1RfQ0FMTCBhcnJheVByb3RvRgogICAgIC8vIDEuIExldCBhcnJheSBiZSB0aGUg
cmVzdWx0IG9mIGNhbGxpbmcgVG9PYmplY3Qgb24gdGhlIHRoaXMgdmFsdWUuCiAgICAgSlNPYmpl
Y3QqIHRoaXNPYmplY3QgPSB0aGlzVmFsdWUudG9PYmplY3QoZXhlYyk7CiAgICAgUkVUVVJOX0lG
X0VYQ0VQVElPTihzY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7Ci0gICAgCisKICAgICAvLyAyLiBM
ZXQgZnVuYyBiZSB0aGUgcmVzdWx0IG9mIGNhbGxpbmcgdGhlIFtbR2V0XV0gaW50ZXJuYWwgbWV0
aG9kIG9mIGFycmF5IHdpdGggYXJndW1lbnQgImpvaW4iLgogICAgIEpTVmFsdWUgZnVuY3Rpb24g
PSBKU1ZhbHVlKHRoaXNPYmplY3QpLmdldChleGVjLCB2bS5wcm9wZXJ0eU5hbWVzLT5qb2luKTsK
ICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBlbmNvZGVkSlNWYWx1ZSgpKTsKQEAgLTQz
NSw3ICs1NjksMjUgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBhcnJheVByb3RvRgog
ICAgIGlmIChMSUtFTFkoY2FuVXNlRmFzdEpvaW4odGhpc0FycmF5KSkpIHsKICAgICAgICAgY29u
c3QgTENoYXIgY29tbWEgPSAnLCc7CiAgICAgICAgIHNjb3BlLnJlbGVhc2UoKTsKLSAgICAgICAg
cmV0dXJuIEpTVmFsdWU6OmVuY29kZShmYXN0Sm9pbigqZXhlYywgdGhpc0FycmF5LCB7ICZjb21t
YSwgMSB9LCBsZW5ndGgpKTsKKworICAgICAgICBib29sIGlzQ29XID0gaXNDb3B5T25Xcml0ZSh0
aGlzQXJyYXktPmluZGV4aW5nTW9kZSgpKTsKKyAgICAgICAgSlNJbW11dGFibGVCdXR0ZXJmbHkq
IGltbXV0YWJsZUJ1dHRlcmZseSA9IG51bGxwdHI7CisgICAgICAgIGlmIChpc0NvVykgeworICAg
ICAgICAgICAgaW1tdXRhYmxlQnV0dGVyZmx5ID0gSlNJbW11dGFibGVCdXR0ZXJmbHk6OmZyb21C
dXR0ZXJmbHkodGhpc0FycmF5LT5idXR0ZXJmbHkoKSk7CisgICAgICAgICAgICBhdXRvIGl0ZXIg
PSB2bS5oZWFwLmltbXV0YWJsZUJ1dHRlcmZseVRvU3RyaW5nQ2FjaGUuZmluZChpbW11dGFibGVC
dXR0ZXJmbHkpOworICAgICAgICAgICAgaWYgKGl0ZXIgIT0gdm0uaGVhcC5pbW11dGFibGVCdXR0
ZXJmbHlUb1N0cmluZ0NhY2hlLmVuZCgpKQorICAgICAgICAgICAgICAgIHJldHVybiBKU1ZhbHVl
OjplbmNvZGUoaXRlci0+dmFsdWUpOworICAgICAgICB9CisKKyAgICAgICAgYm9vbCBzYXdIb2xl
cyA9IGZhbHNlOworICAgICAgICBKU1ZhbHVlIHJlc3VsdCA9IGZhc3RKb2luKCpleGVjLCB0aGlz
QXJyYXksIHsgJmNvbW1hLCAxIH0sIGxlbmd0aCwgJnNhd0hvbGVzKTsKKworICAgICAgICBpZiAo
IXNhd0hvbGVzICYmIHJlc3VsdCAmJiBpc0pTU3RyaW5nKHJlc3VsdCkgJiYgaXNDb1cpIHsKKyAg
ICAgICAgICAgIEFTU0VSVChKU0ltbXV0YWJsZUJ1dHRlcmZseTo6ZnJvbUJ1dHRlcmZseSh0aGlz
QXJyYXktPmJ1dHRlcmZseSgpKSA9PSBpbW11dGFibGVCdXR0ZXJmbHkpOworICAgICAgICAgICAg
dm0uaGVhcC5pbW11dGFibGVCdXR0ZXJmbHlUb1N0cmluZ0NhY2hlLmFkZChpbW11dGFibGVCdXR0
ZXJmbHksIGpzQ2FzdDxKU1N0cmluZyo+KHJlc3VsdCkpOworICAgICAgICB9CisKKyAgICAgICAg
cmV0dXJuIEpTVmFsdWU6OmVuY29kZShyZXN1bHQpOwogICAgIH0KIAogICAgIEpTU3RyaW5nSm9p
bmVyIGpvaW5lcigqZXhlYywgJywnLCBsZW5ndGgpOwpAQCAtNTA0LDMwICs2NTYsNiBAQCBFbmNv
ZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGFycmF5UHJvdG9GCiAgICAgcmV0dXJuIEpTVmFsdWU6
OmVuY29kZShzdHJpbmdKb2luZXIuam9pbigqZXhlYykpOwogfQogCi1zdGF0aWMgaW5saW5lIGJv
b2wgaXNIb2xlKGRvdWJsZSB2YWx1ZSkKLXsKLSAgICByZXR1cm4gc3RkOjppc25hbih2YWx1ZSk7
Ci19Ci0KLXN0YXRpYyBpbmxpbmUgYm9vbCBpc0hvbGUoY29uc3QgV3JpdGVCYXJyaWVyPFVua25v
d24+JiB2YWx1ZSkKLXsKLSAgICByZXR1cm4gIXZhbHVlOwotfQotCi10ZW1wbGF0ZTx0eXBlbmFt
ZSBUPiBzdGF0aWMgaW5saW5lIGJvb2wgY29udGFpbnNIb2xlKFQqIGRhdGEsIHVuc2lnbmVkIGxl
bmd0aCkKLXsKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbGVuZ3RoOyArK2kpIHsKLSAg
ICAgICAgaWYgKGlzSG9sZShkYXRhW2ldKSkKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAg
IH0KLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgYm9vbCBob2xlc011c3RG
b3J3YXJkVG9Qcm90b3R5cGUoVk0mIHZtLCBKU09iamVjdCogb2JqZWN0KQotewotICAgIHJldHVy
biBvYmplY3QtPnN0cnVjdHVyZSh2bSktPmhvbGVzTXVzdEZvcndhcmRUb1Byb3RvdHlwZSh2bSwg
b2JqZWN0KTsKLX0KLQogc3RhdGljIEpTVmFsdWUgc2xvd0pvaW4oRXhlY1N0YXRlJiBleGVjLCBK
U09iamVjdCogdGhpc09iamVjdCwgSlNTdHJpbmcqIHNlcGFyYXRvciwgdWludDY0X3QgbGVuZ3Ro
KQogewogICAgIFZNJiB2bSA9IGV4ZWMudm0oKTsKQEAgLTU3NiwxMTIgKzcwNCw2IEBAIHN0YXRp
YyBKU1ZhbHVlIHNsb3dKb2luKEV4ZWNTdGF0ZSYgZXhlYywKICAgICByZXR1cm4gcjsKIH0KIAot
c3RhdGljIGlubGluZSBib29sIGNhblVzZUZhc3RKb2luKGNvbnN0IEpTT2JqZWN0KiB0aGlzT2Jq
ZWN0KQotewotICAgIHN3aXRjaCAodGhpc09iamVjdC0+aW5kZXhpbmdUeXBlKCkpIHsKLSAgICBj
YXNlIEFMTF9DT05USUdVT1VTX0lOREVYSU5HX1RZUEVTOgotICAgIGNhc2UgQUxMX0lOVDMyX0lO
REVYSU5HX1RZUEVTOgotICAgIGNhc2UgQUxMX0RPVUJMRV9JTkRFWElOR19UWVBFUzoKLSAgICAg
ICAgcmV0dXJuIHRydWU7Ci0gICAgZGVmYXVsdDoKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotICAg
IHJldHVybiBmYWxzZTsKLX0KLQotc3RhdGljIGlubGluZSBKU1ZhbHVlIGZhc3RKb2luKEV4ZWNT
dGF0ZSYgc3RhdGUsIEpTT2JqZWN0KiB0aGlzT2JqZWN0LCBTdHJpbmdWaWV3IHNlcGFyYXRvciwg
dW5zaWduZWQgbGVuZ3RoKQotewotICAgIFZNJiB2bSA9IHN0YXRlLnZtKCk7Ci0gICAgYXV0byBz
Y29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwotCi0gICAgc3dpdGNoICh0aGlzT2JqZWN0
LT5pbmRleGluZ1R5cGUoKSkgewotICAgIGNhc2UgQUxMX0lOVDMyX0lOREVYSU5HX1RZUEVTOiB7
Ci0gICAgICAgIGF1dG8mIGJ1dHRlcmZseSA9ICp0aGlzT2JqZWN0LT5idXR0ZXJmbHkoKTsKLSAg
ICAgICAgaWYgKFVOTElLRUxZKGxlbmd0aCA+IGJ1dHRlcmZseS5wdWJsaWNMZW5ndGgoKSkpCi0g
ICAgICAgICAgICBicmVhazsKLSAgICAgICAgSlNTdHJpbmdKb2luZXIgam9pbmVyKHN0YXRlLCBz
ZXBhcmF0b3IsIGxlbmd0aCk7Ci0gICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHsg
fSk7Ci0gICAgICAgIGF1dG8gZGF0YSA9IGJ1dHRlcmZseS5jb250aWd1b3VzKCkuZGF0YSgpOwot
ICAgICAgICBib29sIGhvbGVzS25vd25Ub0JlT0sgPSBmYWxzZTsKLSAgICAgICAgZm9yICh1bnNp
Z25lZCBpID0gMDsgaSA8IGxlbmd0aDsgKytpKSB7Ci0gICAgICAgICAgICBKU1ZhbHVlIHZhbHVl
ID0gZGF0YVtpXS5nZXQoKTsKLSAgICAgICAgICAgIGlmIChMSUtFTFkodmFsdWUpKQotICAgICAg
ICAgICAgICAgIGpvaW5lci5hcHBlbmROdW1iZXIodm0sIHZhbHVlLmFzSW50MzIoKSk7Ci0gICAg
ICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgICAgICBpZiAoIWhvbGVzS25vd25Ub0JlT0spIHsK
LSAgICAgICAgICAgICAgICAgICAgaWYgKGhvbGVzTXVzdEZvcndhcmRUb1Byb3RvdHlwZSh2bSwg
dGhpc09iamVjdCkpCi0gICAgICAgICAgICAgICAgICAgICAgICBnb3RvIGdlbmVyYWxDYXNlOwot
ICAgICAgICAgICAgICAgICAgICBob2xlc0tub3duVG9CZU9LID0gdHJ1ZTsKLSAgICAgICAgICAg
ICAgICB9Ci0gICAgICAgICAgICAgICAgam9pbmVyLmFwcGVuZEVtcHR5U3RyaW5nKCk7Ci0gICAg
ICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgc2NvcGUucmVsZWFzZSgpOwotICAgICAgICBy
ZXR1cm4gam9pbmVyLmpvaW4oc3RhdGUpOwotICAgIH0KLSAgICBjYXNlIEFMTF9DT05USUdVT1VT
X0lOREVYSU5HX1RZUEVTOiB7Ci0gICAgICAgIGF1dG8mIGJ1dHRlcmZseSA9ICp0aGlzT2JqZWN0
LT5idXR0ZXJmbHkoKTsKLSAgICAgICAgaWYgKFVOTElLRUxZKGxlbmd0aCA+IGJ1dHRlcmZseS5w
dWJsaWNMZW5ndGgoKSkpCi0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgSlNTdHJpbmdKb2lu
ZXIgam9pbmVyKHN0YXRlLCBzZXBhcmF0b3IsIGxlbmd0aCk7Ci0gICAgICAgIFJFVFVSTl9JRl9F
WENFUFRJT04oc2NvcGUsIHsgfSk7Ci0gICAgICAgIGF1dG8gZGF0YSA9IGJ1dHRlcmZseS5jb250
aWd1b3VzKCkuZGF0YSgpOwotICAgICAgICBib29sIGhvbGVzS25vd25Ub0JlT0sgPSBmYWxzZTsK
LSAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGxlbmd0aDsgKytpKSB7Ci0gICAgICAg
ICAgICBpZiAoSlNWYWx1ZSB2YWx1ZSA9IGRhdGFbaV0uZ2V0KCkpIHsKLSAgICAgICAgICAgICAg
ICBpZiAoIWpvaW5lci5hcHBlbmRXaXRob3V0U2lkZUVmZmVjdHMoc3RhdGUsIHZhbHVlKSkKLSAg
ICAgICAgICAgICAgICAgICAgZ290byBnZW5lcmFsQ2FzZTsKLSAgICAgICAgICAgIH0gZWxzZSB7
Ci0gICAgICAgICAgICAgICAgaWYgKCFob2xlc0tub3duVG9CZU9LKSB7Ci0gICAgICAgICAgICAg
ICAgICAgIGlmIChob2xlc011c3RGb3J3YXJkVG9Qcm90b3R5cGUodm0sIHRoaXNPYmplY3QpKQot
ICAgICAgICAgICAgICAgICAgICAgICAgZ290byBnZW5lcmFsQ2FzZTsKLSAgICAgICAgICAgICAg
ICAgICAgaG9sZXNLbm93blRvQmVPSyA9IHRydWU7Ci0gICAgICAgICAgICAgICAgfQotICAgICAg
ICAgICAgICAgIGpvaW5lci5hcHBlbmRFbXB0eVN0cmluZygpOwotICAgICAgICAgICAgfQotICAg
ICAgICB9Ci0gICAgICAgIHNjb3BlLnJlbGVhc2UoKTsKLSAgICAgICAgcmV0dXJuIGpvaW5lci5q
b2luKHN0YXRlKTsKLSAgICB9Ci0gICAgY2FzZSBBTExfRE9VQkxFX0lOREVYSU5HX1RZUEVTOiB7
Ci0gICAgICAgIGF1dG8mIGJ1dHRlcmZseSA9ICp0aGlzT2JqZWN0LT5idXR0ZXJmbHkoKTsKLSAg
ICAgICAgaWYgKFVOTElLRUxZKGxlbmd0aCA+IGJ1dHRlcmZseS5wdWJsaWNMZW5ndGgoKSkpCi0g
ICAgICAgICAgICBicmVhazsKLSAgICAgICAgSlNTdHJpbmdKb2luZXIgam9pbmVyKHN0YXRlLCBz
ZXBhcmF0b3IsIGxlbmd0aCk7Ci0gICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHsg
fSk7Ci0gICAgICAgIGF1dG8gZGF0YSA9IGJ1dHRlcmZseS5jb250aWd1b3VzRG91YmxlKCkuZGF0
YSgpOwotICAgICAgICBib29sIGhvbGVzS25vd25Ub0JlT0sgPSBmYWxzZTsKLSAgICAgICAgZm9y
ICh1bnNpZ25lZCBpID0gMDsgaSA8IGxlbmd0aDsgKytpKSB7Ci0gICAgICAgICAgICBkb3VibGUg
dmFsdWUgPSBkYXRhW2ldOwotICAgICAgICAgICAgaWYgKExJS0VMWSghaXNIb2xlKHZhbHVlKSkp
Ci0gICAgICAgICAgICAgICAgam9pbmVyLmFwcGVuZE51bWJlcih2bSwgdmFsdWUpOwotICAgICAg
ICAgICAgZWxzZSB7Ci0gICAgICAgICAgICAgICAgaWYgKCFob2xlc0tub3duVG9CZU9LKSB7Ci0g
ICAgICAgICAgICAgICAgICAgIGlmIChob2xlc011c3RGb3J3YXJkVG9Qcm90b3R5cGUodm0sIHRo
aXNPYmplY3QpKQotICAgICAgICAgICAgICAgICAgICAgICAgZ290byBnZW5lcmFsQ2FzZTsKLSAg
ICAgICAgICAgICAgICAgICAgaG9sZXNLbm93blRvQmVPSyA9IHRydWU7Ci0gICAgICAgICAgICAg
ICAgfQotICAgICAgICAgICAgICAgIGpvaW5lci5hcHBlbmRFbXB0eVN0cmluZygpOwotICAgICAg
ICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIHNjb3BlLnJlbGVhc2UoKTsKLSAgICAgICAgcmV0
dXJuIGpvaW5lci5qb2luKHN0YXRlKTsKLSAgICB9Ci0gICAgfQotCi1nZW5lcmFsQ2FzZToKLSAg
ICBKU1N0cmluZ0pvaW5lciBqb2luZXIoc3RhdGUsIHNlcGFyYXRvciwgbGVuZ3RoKTsKLSAgICBS
RVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB7IH0pOwotICAgIGZvciAodW5zaWduZWQgaSA9IDA7
IGkgPCBsZW5ndGg7ICsraSkgewotICAgICAgICBKU1ZhbHVlIGVsZW1lbnQgPSB0aGlzT2JqZWN0
LT5nZXRJbmRleCgmc3RhdGUsIGkpOwotICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3Bl
LCB7IH0pOwotICAgICAgICBqb2luZXIuYXBwZW5kKHN0YXRlLCBlbGVtZW50KTsKLSAgICAgICAg
UkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgeyB9KTsKLSAgICB9Ci0gICAgc2NvcGUucmVsZWFz
ZSgpOwotICAgIHJldHVybiBqb2luZXIuam9pbihzdGF0ZSk7Ci19Ci0KIEVuY29kZWRKU1ZhbHVl
IEpTQ19IT1NUX0NBTEwgYXJyYXlQcm90b0Z1bmNKb2luKEV4ZWNTdGF0ZSogZXhlYykKIHsKICAg
ICBWTSYgdm0gPSBleGVjLT52bSgpOwo=
</data>
<flag name="review"
          id="359878"
          type_id="1"
          status="+"
          setter="keith_miller"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>341706</attachid>
            <date>2018-05-31 16:51:22 -0700</date>
            <delta_ts>2018-05-31 16:52:48 -0700</delta_ts>
            <desc>patch for landing</desc>
            <filename>b-backup.diff</filename>
            <type>text/plain</type>
            <size>14772</size>
            <attacher name="Saam Barati">saam</attacher>
            
              <data encoding="base64">SW5kZXg6IEpTVGVzdHMvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEpTVGVzdHMvQ2hhbmdlTG9n
CShyZXZpc2lvbiAyMzIzNzQpCisrKyBKU1Rlc3RzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpA
QCAtMSwzICsxLDEzIEBACisyMDE4LTA1LTMxICBTYWFtIEJhcmF0aSAgPHNiYXJhdGlAYXBwbGUu
Y29tPgorCisgICAgICAgIENhY2hlIHRvU3RyaW5nIHJlc3VsdHMgZm9yIENvVyBhcnJheXMKKyAg
ICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE4NjE2MAorCisg
ICAgICAgIFJldmlld2VkIGJ5IEtlaXRoIE1pbGxlci4KKworICAgICAgICAqIG1pY3JvYmVuY2ht
YXJrcy90by1zdHJpbmctb24tY293LWFycmF5LmpzOiBBZGRlZC4KKyAgICAgICAgKGZvbyk6CisK
IDIwMTgtMDUtMzEgIEtlaXRoIE1pbGxlciAgPGtlaXRoX21pbGxlckBhcHBsZS5jb20+CiAKICAg
ICAgICAgUmViYXNlbGluZSB0ZXN0IGZvciBjaGFuZ2UgaW4gRXJyb3Iuc3RhY2sgYmVoYXZpb3Iu
CkluZGV4OiBKU1Rlc3RzL21pY3JvYmVuY2htYXJrcy90by1zdHJpbmctb24tY293LWFycmF5Lmpz
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIEpTVGVzdHMvbWljcm9iZW5jaG1hcmtzL3RvLXN0cmluZy1vbi1jb3ct
YXJyYXkuanMJKG5vbmV4aXN0ZW50KQorKysgSlNUZXN0cy9taWNyb2JlbmNobWFya3MvdG8tc3Ry
aW5nLW9uLWNvdy1hcnJheS5qcwkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDE2IEBACitsZXQg
YXJyYXlzID0gWworICAgIFswLDBdLAorICAgIFswLDFdLAorICAgIFsxLDBdLAorICAgIFsxLDFd
LAorXTsKKworZnVuY3Rpb24gZm9vKGFycikgeworICAgIHJldHVybiBhcnIudG9TdHJpbmcoKTsK
K30KK25vSW5saW5lKGZvbyk7CisKK2ZvciAobGV0IGkgPSAwOyBpIDwgMzAwMDA7ICsraSkgewor
ICAgIGZvciAobGV0IGFyciBvZiBhcnJheXMpCisgICAgICAgIGZvbyhhcnIpOworfQpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvQ2hhbmdlTG9nCShyZXZpc2lvbiAyMzIzNjUpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMzMgQEAKKzIwMTgt
MDUtMzEgIFNhYW0gQmFyYXRpICA8c2JhcmF0aUBhcHBsZS5jb20+CisKKyAgICAgICAgQ2FjaGUg
dG9TdHJpbmcgcmVzdWx0cyBmb3IgQ29XIGFycmF5cworICAgICAgICBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTg2MTYwCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgS2Vp
dGggTWlsbGVyLgorCisgICAgICAgIFRoaXMgcGF0Y2ggbWFrZXMgaXQgc28gdGhhdCB3ZSBjYWNo
ZSB0aGUgcmVzdWx0IG9mIHRvU3RyaW5nIG9uCisgICAgICAgIGFycmF5cyB3aXRoIGEgQ29XIGJ1
dHRlcmZseS4gVGhpcyBjYWNoZSBsaXZlcyBvbiBIZWFwIGFuZCBpcworICAgICAgICBjbGVhcmVk
IGFmdGVyIGV2ZXJ5IEdDLiBXZSBvbmx5IGNhY2hlIHRoZSB0b1N0cmluZyByZXN1bHQgd2hlbgor
ICAgICAgICB0aGUgQ29XIGJ1dHRlcmZseSBkb2Vzbid0IGhhdmUgYSBob2xlIChjdXJyZW50bHks
IGFsbCBDb1cgYXJyYXlzCisgICAgICAgIGhhdmUgYSBob2xlLCBidXQgdGhpcyBpc24ndCBhbiBp
bnZhcmlhbnQgd2Ugd2FudCB0byByZWx5IG9uKS4gVGhlCisgICAgICAgIHJlYXNvbiBmb3IgdGhp
cyBpcyB0aGF0IGlmIHRoZXJlIGlzIGEgaG9sZSwgdGhlIHZhbHVlIG1heSBiZSBsb2FkZWQKKyAg
ICAgICAgZnJvbSB0aGUgcHJvdG90eXBlLCBhbmQgdGhlIGNhY2hlIG1heSBwcm9kdWNlIGEgc3Rh
bGUgcmVzdWx0LgorICAgICAgICAKKyAgICAgICAgVGhpcyBpcyBhIH40JSBzcGVlZHVwIG9uIHRo
ZSBNTCBzdWJ0ZXN0IGluIEFSRVMuIEFuZCBpcyBhIH4xJSBvdmVyYWxsCisgICAgICAgIHByb2dy
ZXNzaW9uIG9uIEFSRVMuCisKKyAgICAgICAgKiBoZWFwL0hlYXAuY3BwOgorICAgICAgICAoSlND
OjpIZWFwOjpmaW5hbGl6ZSk6CisgICAgICAgIChKU0M6OkhlYXA6OmFkZENvcmVDb25zdHJhaW50
cyk6CisgICAgICAgICogaGVhcC9IZWFwLmg6CisgICAgICAgICogcnVudGltZS9BcnJheVByb3Rv
dHlwZS5jcHA6CisgICAgICAgIChKU0M6OmNhblVzZUZhc3RKb2luKToKKyAgICAgICAgKEpTQzo6
aG9sZXNNdXN0Rm9yd2FyZFRvUHJvdG90eXBlKToKKyAgICAgICAgKEpTQzo6aXNIb2xlKToKKyAg
ICAgICAgKEpTQzo6Y29udGFpbnNIb2xlKToKKyAgICAgICAgKEpTQzo6ZmFzdEpvaW4pOgorICAg
ICAgICAoSlNDOjphcnJheVByb3RvRnVuY1RvU3RyaW5nKToKKwogMjAxOC0wNS0zMCAgWXVzdWtl
IFN1enVraSAgPHV0YXRhbmUudGVhQGdtYWlsLmNvbT4KIAogICAgICAgICBbSlNDXSBQYXNzIFZN
JiBwYXJhbWV0ZXIgYXMgbXVjaCBhcyBwb3NzaWJsZQpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2hlYXAvSGVhcC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hl
YXAvSGVhcC5jcHAJKHJldmlzaW9uIDIzMjM2NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9o
ZWFwL0hlYXAuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMDQzLDYgKzIwNDMsOCBAQCB2b2lkIEhl
YXA6OmZpbmFsaXplKCkKICAgICAKICAgICBpZiAoSGFzT3duUHJvcGVydHlDYWNoZSogY2FjaGUg
PSB2bSgpLT5oYXNPd25Qcm9wZXJ0eUNhY2hlKCkpCiAgICAgICAgIGNhY2hlLT5jbGVhcigpOwor
CisgICAgaW1tdXRhYmxlQnV0dGVyZmx5VG9TdHJpbmdDYWNoZS5jbGVhcigpOwogICAgIAogICAg
IGZvciAoY29uc3QgSGVhcEZpbmFsaXplckNhbGxiYWNrJiBjYWxsYmFjayA6IG1faGVhcEZpbmFs
aXplckNhbGxiYWNrcykKICAgICAgICAgY2FsbGJhY2sucnVuKCp2bSgpKTsKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXAuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaGVhcC9IZWFwLmgJKHJldmlzaW9uIDIzMjM2NSkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9oZWFwL0hlYXAuaAkod29ya2luZyBjb3B5KQpAQCAtNjgsNiArNjgsNyBAQCBjbGFz
cyBJbmNyZW1lbnRhbFN3ZWVwZXI7CiBjbGFzcyBKSVRTdHViUm91dGluZTsKIGNsYXNzIEpJVFN0
dWJSb3V0aW5lU2V0OwogY2xhc3MgSlNDZWxsOworY2xhc3MgSlNJbW11dGFibGVCdXR0ZXJmbHk7
CiBjbGFzcyBKU1ZhbHVlOwogY2xhc3MgTExJbnRPZmZzZXRzRXh0cmFjdG9yOwogY2xhc3MgTWFj
aGluZVRocmVhZHM7CkBAIC0zODEsNiArMzgyLDggQEAgcHVibGljOgogICAgIAogICAgIFNlY29u
ZHMgdG90YWxHQ1RpbWUoKSBjb25zdCB7IHJldHVybiBtX3RvdGFsR0NUaW1lOyB9CiAKKyAgICBI
YXNoTWFwPEpTSW1tdXRhYmxlQnV0dGVyZmx5KiwgSlNTdHJpbmcqPiBpbW11dGFibGVCdXR0ZXJm
bHlUb1N0cmluZ0NhY2hlOworCiBwcml2YXRlOgogICAgIGZyaWVuZCBjbGFzcyBBbGxvY2F0aW5n
U2NvcGU7CiAgICAgZnJpZW5kIGNsYXNzIENvZGVCbG9jazsKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0FycmF5UHJvdG90eXBlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9BcnJheVByb3RvdHlwZS5jcHAJKHJldmlzaW9uIDIzMjM2
NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0FycmF5UHJvdG90eXBlLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMzg1LDggKzM4NSwxNDMgQEAgdm9pZCB1bnNoaWZ0KEV4ZWNTdGF0
ZSogZXhlYywgSlNPYmplY3QqIAogICAgIH0KIH0KIAotc3RhdGljIGJvb2wgY2FuVXNlRmFzdEpv
aW4oY29uc3QgSlNPYmplY3QqKTsKLXN0YXRpYyBKU1ZhbHVlIGZhc3RKb2luKEV4ZWNTdGF0ZSYs
IEpTT2JqZWN0KiwgU3RyaW5nVmlldywgdW5zaWduZWQpOworaW5saW5lIGJvb2wgY2FuVXNlRmFz
dEpvaW4oY29uc3QgSlNPYmplY3QqIHRoaXNPYmplY3QpCit7CisgICAgc3dpdGNoICh0aGlzT2Jq
ZWN0LT5pbmRleGluZ1R5cGUoKSkgeworICAgIGNhc2UgQUxMX0NPTlRJR1VPVVNfSU5ERVhJTkdf
VFlQRVM6CisgICAgY2FzZSBBTExfSU5UMzJfSU5ERVhJTkdfVFlQRVM6CisgICAgY2FzZSBBTExf
RE9VQkxFX0lOREVYSU5HX1RZUEVTOgorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICBkZWZhdWx0
OgorICAgICAgICBicmVhazsKKyAgICB9CisgICAgcmV0dXJuIGZhbHNlOworfQorCitpbmxpbmUg
Ym9vbCBob2xlc011c3RGb3J3YXJkVG9Qcm90b3R5cGUoVk0mIHZtLCBKU09iamVjdCogb2JqZWN0
KQoreworICAgIHJldHVybiBvYmplY3QtPnN0cnVjdHVyZSh2bSktPmhvbGVzTXVzdEZvcndhcmRU
b1Byb3RvdHlwZSh2bSwgb2JqZWN0KTsKK30KKworaW5saW5lIGJvb2wgaXNIb2xlKGRvdWJsZSB2
YWx1ZSkKK3sKKyAgICByZXR1cm4gc3RkOjppc25hbih2YWx1ZSk7Cit9CisKK2lubGluZSBib29s
IGlzSG9sZShjb25zdCBXcml0ZUJhcnJpZXI8VW5rbm93bj4mIHZhbHVlKQoreworICAgIHJldHVy
biAhdmFsdWU7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+CitpbmxpbmUgYm9vbCBjb250YWlu
c0hvbGUoVCogZGF0YSwgdW5zaWduZWQgbGVuZ3RoKQoreworICAgIGZvciAodW5zaWduZWQgaSA9
IDA7IGkgPCBsZW5ndGg7ICsraSkgeworICAgICAgICBpZiAoaXNIb2xlKGRhdGFbaV0pKQorICAg
ICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorICAgIHJldHVybiBmYWxzZTsKK30KKworaW5s
aW5lIEpTVmFsdWUgZmFzdEpvaW4oRXhlY1N0YXRlJiBzdGF0ZSwgSlNPYmplY3QqIHRoaXNPYmpl
Y3QsIFN0cmluZ1ZpZXcgc2VwYXJhdG9yLCB1bnNpZ25lZCBsZW5ndGgsIGJvb2wqIHNhd0hvbGVz
ID0gbnVsbHB0cikKK3sKKyAgICBWTSYgdm0gPSBzdGF0ZS52bSgpOworICAgIGF1dG8gc2NvcGUg
PSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKworICAgIHN3aXRjaCAodGhpc09iamVjdC0+aW5k
ZXhpbmdUeXBlKCkpIHsKKyAgICBjYXNlIEFMTF9JTlQzMl9JTkRFWElOR19UWVBFUzogeworICAg
ICAgICBhdXRvJiBidXR0ZXJmbHkgPSAqdGhpc09iamVjdC0+YnV0dGVyZmx5KCk7CisgICAgICAg
IGlmIChVTkxJS0VMWShsZW5ndGggPiBidXR0ZXJmbHkucHVibGljTGVuZ3RoKCkpKQorICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgIEpTU3RyaW5nSm9pbmVyIGpvaW5lcihzdGF0ZSwgc2VwYXJh
dG9yLCBsZW5ndGgpOworICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB7IH0pOwor
ICAgICAgICBhdXRvIGRhdGEgPSBidXR0ZXJmbHkuY29udGlndW91cygpLmRhdGEoKTsKKyAgICAg
ICAgYm9vbCBob2xlc0tub3duVG9CZU9LID0gZmFsc2U7CisgICAgICAgIGZvciAodW5zaWduZWQg
aSA9IDA7IGkgPCBsZW5ndGg7ICsraSkgeworICAgICAgICAgICAgSlNWYWx1ZSB2YWx1ZSA9IGRh
dGFbaV0uZ2V0KCk7CisgICAgICAgICAgICBpZiAoTElLRUxZKHZhbHVlKSkKKyAgICAgICAgICAg
ICAgICBqb2luZXIuYXBwZW5kTnVtYmVyKHZtLCB2YWx1ZS5hc0ludDMyKCkpOworICAgICAgICAg
ICAgZWxzZSB7CisgICAgICAgICAgICAgICAgaWYgKHNhd0hvbGVzKQorICAgICAgICAgICAgICAg
ICAgICAqc2F3SG9sZXMgPSB0cnVlOworICAgICAgICAgICAgICAgIGlmICghaG9sZXNLbm93blRv
QmVPSykgeworICAgICAgICAgICAgICAgICAgICBpZiAoaG9sZXNNdXN0Rm9yd2FyZFRvUHJvdG90
eXBlKHZtLCB0aGlzT2JqZWN0KSkKKyAgICAgICAgICAgICAgICAgICAgICAgIGdvdG8gZ2VuZXJh
bENhc2U7CisgICAgICAgICAgICAgICAgICAgIGhvbGVzS25vd25Ub0JlT0sgPSB0cnVlOworICAg
ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBqb2luZXIuYXBwZW5kRW1wdHlTdHJpbmco
KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBzY29wZS5yZWxlYXNlKCk7Cisg
ICAgICAgIHJldHVybiBqb2luZXIuam9pbihzdGF0ZSk7CisgICAgfQorICAgIGNhc2UgQUxMX0NP
TlRJR1VPVVNfSU5ERVhJTkdfVFlQRVM6IHsKKyAgICAgICAgYXV0byYgYnV0dGVyZmx5ID0gKnRo
aXNPYmplY3QtPmJ1dHRlcmZseSgpOworICAgICAgICBpZiAoVU5MSUtFTFkobGVuZ3RoID4gYnV0
dGVyZmx5LnB1YmxpY0xlbmd0aCgpKSkKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBKU1N0
cmluZ0pvaW5lciBqb2luZXIoc3RhdGUsIHNlcGFyYXRvciwgbGVuZ3RoKTsKKyAgICAgICAgUkVU
VVJOX0lGX0VYQ0VQVElPTihzY29wZSwgeyB9KTsKKyAgICAgICAgYXV0byBkYXRhID0gYnV0dGVy
Zmx5LmNvbnRpZ3VvdXMoKS5kYXRhKCk7CisgICAgICAgIGJvb2wgaG9sZXNLbm93blRvQmVPSyA9
IGZhbHNlOworICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbGVuZ3RoOyArK2kpIHsK
KyAgICAgICAgICAgIGlmIChKU1ZhbHVlIHZhbHVlID0gZGF0YVtpXS5nZXQoKSkgeworICAgICAg
ICAgICAgICAgIGlmICgham9pbmVyLmFwcGVuZFdpdGhvdXRTaWRlRWZmZWN0cyhzdGF0ZSwgdmFs
dWUpKQorICAgICAgICAgICAgICAgICAgICBnb3RvIGdlbmVyYWxDYXNlOworICAgICAgICAgICAg
fSBlbHNlIHsKKyAgICAgICAgICAgICAgICBpZiAoc2F3SG9sZXMpCisgICAgICAgICAgICAgICAg
ICAgICpzYXdIb2xlcyA9IHRydWU7CisgICAgICAgICAgICAgICAgaWYgKCFob2xlc0tub3duVG9C
ZU9LKSB7CisgICAgICAgICAgICAgICAgICAgIGlmIChob2xlc011c3RGb3J3YXJkVG9Qcm90b3R5
cGUodm0sIHRoaXNPYmplY3QpKQorICAgICAgICAgICAgICAgICAgICAgICAgZ290byBnZW5lcmFs
Q2FzZTsKKyAgICAgICAgICAgICAgICAgICAgaG9sZXNLbm93blRvQmVPSyA9IHRydWU7CisgICAg
ICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGpvaW5lci5hcHBlbmRFbXB0eVN0cmluZygp
OworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIHNjb3BlLnJlbGVhc2UoKTsKKyAg
ICAgICAgcmV0dXJuIGpvaW5lci5qb2luKHN0YXRlKTsKKyAgICB9CisgICAgY2FzZSBBTExfRE9V
QkxFX0lOREVYSU5HX1RZUEVTOiB7CisgICAgICAgIGF1dG8mIGJ1dHRlcmZseSA9ICp0aGlzT2Jq
ZWN0LT5idXR0ZXJmbHkoKTsKKyAgICAgICAgaWYgKFVOTElLRUxZKGxlbmd0aCA+IGJ1dHRlcmZs
eS5wdWJsaWNMZW5ndGgoKSkpCisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgSlNTdHJpbmdK
b2luZXIgam9pbmVyKHN0YXRlLCBzZXBhcmF0b3IsIGxlbmd0aCk7CisgICAgICAgIFJFVFVSTl9J
Rl9FWENFUFRJT04oc2NvcGUsIHsgfSk7CisgICAgICAgIGF1dG8gZGF0YSA9IGJ1dHRlcmZseS5j
b250aWd1b3VzRG91YmxlKCkuZGF0YSgpOworICAgICAgICBib29sIGhvbGVzS25vd25Ub0JlT0sg
PSBmYWxzZTsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGxlbmd0aDsgKytpKSB7
CisgICAgICAgICAgICBkb3VibGUgdmFsdWUgPSBkYXRhW2ldOworICAgICAgICAgICAgaWYgKExJ
S0VMWSghaXNIb2xlKHZhbHVlKSkpCisgICAgICAgICAgICAgICAgam9pbmVyLmFwcGVuZE51bWJl
cih2bSwgdmFsdWUpOworICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgaWYgKHNh
d0hvbGVzKQorICAgICAgICAgICAgICAgICAgICAqc2F3SG9sZXMgPSB0cnVlOworICAgICAgICAg
ICAgICAgIGlmICghaG9sZXNLbm93blRvQmVPSykgeworICAgICAgICAgICAgICAgICAgICBpZiAo
aG9sZXNNdXN0Rm9yd2FyZFRvUHJvdG90eXBlKHZtLCB0aGlzT2JqZWN0KSkKKyAgICAgICAgICAg
ICAgICAgICAgICAgIGdvdG8gZ2VuZXJhbENhc2U7CisgICAgICAgICAgICAgICAgICAgIGhvbGVz
S25vd25Ub0JlT0sgPSB0cnVlOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBq
b2luZXIuYXBwZW5kRW1wdHlTdHJpbmcoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAg
ICAgICBzY29wZS5yZWxlYXNlKCk7CisgICAgICAgIHJldHVybiBqb2luZXIuam9pbihzdGF0ZSk7
CisgICAgfQorICAgIH0KKworZ2VuZXJhbENhc2U6CisgICAgSlNTdHJpbmdKb2luZXIgam9pbmVy
KHN0YXRlLCBzZXBhcmF0b3IsIGxlbmd0aCk7CisgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29w
ZSwgeyB9KTsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbGVuZ3RoOyArK2kpIHsKKyAg
ICAgICAgSlNWYWx1ZSBlbGVtZW50ID0gdGhpc09iamVjdC0+Z2V0SW5kZXgoJnN0YXRlLCBpKTsK
KyAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgeyB9KTsKKyAgICAgICAgam9pbmVy
LmFwcGVuZChzdGF0ZSwgZWxlbWVudCk7CisgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2Nv
cGUsIHsgfSk7CisgICAgfQorICAgIHNjb3BlLnJlbGVhc2UoKTsKKyAgICByZXR1cm4gam9pbmVy
LmpvaW4oc3RhdGUpOworfQorCiAKIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgYXJyYXlQ
cm90b0Z1bmNUb1N0cmluZyhFeGVjU3RhdGUqIGV4ZWMpCiB7CkBAIC00MzUsNyArNTcwLDI1IEBA
IEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgYXJyYXlQcm90b0YKICAgICBpZiAoTElLRUxZ
KGNhblVzZUZhc3RKb2luKHRoaXNBcnJheSkpKSB7CiAgICAgICAgIGNvbnN0IExDaGFyIGNvbW1h
ID0gJywnOwogICAgICAgICBzY29wZS5yZWxlYXNlKCk7Ci0gICAgICAgIHJldHVybiBKU1ZhbHVl
OjplbmNvZGUoZmFzdEpvaW4oKmV4ZWMsIHRoaXNBcnJheSwgeyAmY29tbWEsIDEgfSwgbGVuZ3Ro
KSk7CisKKyAgICAgICAgYm9vbCBpc0NvVyA9IGlzQ29weU9uV3JpdGUodGhpc0FycmF5LT5pbmRl
eGluZ01vZGUoKSk7CisgICAgICAgIEpTSW1tdXRhYmxlQnV0dGVyZmx5KiBpbW11dGFibGVCdXR0
ZXJmbHkgPSBudWxscHRyOworICAgICAgICBpZiAoaXNDb1cpIHsKKyAgICAgICAgICAgIGltbXV0
YWJsZUJ1dHRlcmZseSA9IEpTSW1tdXRhYmxlQnV0dGVyZmx5Ojpmcm9tQnV0dGVyZmx5KHRoaXNB
cnJheS0+YnV0dGVyZmx5KCkpOworICAgICAgICAgICAgYXV0byBpdGVyID0gdm0uaGVhcC5pbW11
dGFibGVCdXR0ZXJmbHlUb1N0cmluZ0NhY2hlLmZpbmQoaW1tdXRhYmxlQnV0dGVyZmx5KTsKKyAg
ICAgICAgICAgIGlmIChpdGVyICE9IHZtLmhlYXAuaW1tdXRhYmxlQnV0dGVyZmx5VG9TdHJpbmdD
YWNoZS5lbmQoKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGl0ZXIt
PnZhbHVlKTsKKyAgICAgICAgfQorCisgICAgICAgIGJvb2wgc2F3SG9sZXMgPSBmYWxzZTsKKyAg
ICAgICAgSlNWYWx1ZSByZXN1bHQgPSBmYXN0Sm9pbigqZXhlYywgdGhpc0FycmF5LCB7ICZjb21t
YSwgMSB9LCBsZW5ndGgsICZzYXdIb2xlcyk7CisKKyAgICAgICAgaWYgKCFzYXdIb2xlcyAmJiBy
ZXN1bHQgJiYgaXNKU1N0cmluZyhyZXN1bHQpICYmIGlzQ29XKSB7CisgICAgICAgICAgICBBU1NF
UlQoSlNJbW11dGFibGVCdXR0ZXJmbHk6OmZyb21CdXR0ZXJmbHkodGhpc0FycmF5LT5idXR0ZXJm
bHkoKSkgPT0gaW1tdXRhYmxlQnV0dGVyZmx5KTsKKyAgICAgICAgICAgIHZtLmhlYXAuaW1tdXRh
YmxlQnV0dGVyZmx5VG9TdHJpbmdDYWNoZS5hZGQoaW1tdXRhYmxlQnV0dGVyZmx5LCBqc0Nhc3Q8
SlNTdHJpbmcqPihyZXN1bHQpKTsKKyAgICAgICAgfQorCisgICAgICAgIHJldHVybiBKU1ZhbHVl
OjplbmNvZGUocmVzdWx0KTsKICAgICB9CiAKICAgICBKU1N0cmluZ0pvaW5lciBqb2luZXIoKmV4
ZWMsICcsJywgbGVuZ3RoKTsKQEAgLTUwNCwzMCArNjU3LDYgQEAgRW5jb2RlZEpTVmFsdWUgSlND
X0hPU1RfQ0FMTCBhcnJheVByb3RvRgogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoc3RyaW5n
Sm9pbmVyLmpvaW4oKmV4ZWMpKTsKIH0KIAotc3RhdGljIGlubGluZSBib29sIGlzSG9sZShkb3Vi
bGUgdmFsdWUpCi17Ci0gICAgcmV0dXJuIHN0ZDo6aXNuYW4odmFsdWUpOwotfQotCi1zdGF0aWMg
aW5saW5lIGJvb2wgaXNIb2xlKGNvbnN0IFdyaXRlQmFycmllcjxVbmtub3duPiYgdmFsdWUpCi17
Ci0gICAgcmV0dXJuICF2YWx1ZTsKLX0KLQotdGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RhdGljIGlu
bGluZSBib29sIGNvbnRhaW5zSG9sZShUKiBkYXRhLCB1bnNpZ25lZCBsZW5ndGgpCi17Ci0gICAg
Zm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGxlbmd0aDsgKytpKSB7Ci0gICAgICAgIGlmIChpc0hv
bGUoZGF0YVtpXSkpCi0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0gICAgcmV0dXJu
IGZhbHNlOwotfQotCi1zdGF0aWMgaW5saW5lIGJvb2wgaG9sZXNNdXN0Rm9yd2FyZFRvUHJvdG90
eXBlKFZNJiB2bSwgSlNPYmplY3QqIG9iamVjdCkKLXsKLSAgICByZXR1cm4gb2JqZWN0LT5zdHJ1
Y3R1cmUodm0pLT5ob2xlc011c3RGb3J3YXJkVG9Qcm90b3R5cGUodm0sIG9iamVjdCk7Ci19Ci0K
IHN0YXRpYyBKU1ZhbHVlIHNsb3dKb2luKEV4ZWNTdGF0ZSYgZXhlYywgSlNPYmplY3QqIHRoaXNP
YmplY3QsIEpTU3RyaW5nKiBzZXBhcmF0b3IsIHVpbnQ2NF90IGxlbmd0aCkKIHsKICAgICBWTSYg
dm0gPSBleGVjLnZtKCk7CkBAIC01NzYsMTEyICs3MDUsNiBAQCBzdGF0aWMgSlNWYWx1ZSBzbG93
Sm9pbihFeGVjU3RhdGUmIGV4ZWMsCiAgICAgcmV0dXJuIHI7CiB9CiAKLXN0YXRpYyBpbmxpbmUg
Ym9vbCBjYW5Vc2VGYXN0Sm9pbihjb25zdCBKU09iamVjdCogdGhpc09iamVjdCkKLXsKLSAgICBz
d2l0Y2ggKHRoaXNPYmplY3QtPmluZGV4aW5nVHlwZSgpKSB7Ci0gICAgY2FzZSBBTExfQ09OVElH
VU9VU19JTkRFWElOR19UWVBFUzoKLSAgICBjYXNlIEFMTF9JTlQzMl9JTkRFWElOR19UWVBFUzoK
LSAgICBjYXNlIEFMTF9ET1VCTEVfSU5ERVhJTkdfVFlQRVM6Ci0gICAgICAgIHJldHVybiB0cnVl
OwotICAgIGRlZmF1bHQ6Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLSAgICByZXR1cm4gZmFsc2U7
Ci19Ci0KLXN0YXRpYyBpbmxpbmUgSlNWYWx1ZSBmYXN0Sm9pbihFeGVjU3RhdGUmIHN0YXRlLCBK
U09iamVjdCogdGhpc09iamVjdCwgU3RyaW5nVmlldyBzZXBhcmF0b3IsIHVuc2lnbmVkIGxlbmd0
aCkKLXsKLSAgICBWTSYgdm0gPSBzdGF0ZS52bSgpOwotICAgIGF1dG8gc2NvcGUgPSBERUNMQVJF
X1RIUk9XX1NDT1BFKHZtKTsKLQotICAgIHN3aXRjaCAodGhpc09iamVjdC0+aW5kZXhpbmdUeXBl
KCkpIHsKLSAgICBjYXNlIEFMTF9JTlQzMl9JTkRFWElOR19UWVBFUzogewotICAgICAgICBhdXRv
JiBidXR0ZXJmbHkgPSAqdGhpc09iamVjdC0+YnV0dGVyZmx5KCk7Ci0gICAgICAgIGlmIChVTkxJ
S0VMWShsZW5ndGggPiBidXR0ZXJmbHkucHVibGljTGVuZ3RoKCkpKQotICAgICAgICAgICAgYnJl
YWs7Ci0gICAgICAgIEpTU3RyaW5nSm9pbmVyIGpvaW5lcihzdGF0ZSwgc2VwYXJhdG9yLCBsZW5n
dGgpOwotICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB7IH0pOwotICAgICAgICBh
dXRvIGRhdGEgPSBidXR0ZXJmbHkuY29udGlndW91cygpLmRhdGEoKTsKLSAgICAgICAgYm9vbCBo
b2xlc0tub3duVG9CZU9LID0gZmFsc2U7Ci0gICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkg
PCBsZW5ndGg7ICsraSkgewotICAgICAgICAgICAgSlNWYWx1ZSB2YWx1ZSA9IGRhdGFbaV0uZ2V0
KCk7Ci0gICAgICAgICAgICBpZiAoTElLRUxZKHZhbHVlKSkKLSAgICAgICAgICAgICAgICBqb2lu
ZXIuYXBwZW5kTnVtYmVyKHZtLCB2YWx1ZS5hc0ludDMyKCkpOwotICAgICAgICAgICAgZWxzZSB7
Ci0gICAgICAgICAgICAgICAgaWYgKCFob2xlc0tub3duVG9CZU9LKSB7Ci0gICAgICAgICAgICAg
ICAgICAgIGlmIChob2xlc011c3RGb3J3YXJkVG9Qcm90b3R5cGUodm0sIHRoaXNPYmplY3QpKQot
ICAgICAgICAgICAgICAgICAgICAgICAgZ290byBnZW5lcmFsQ2FzZTsKLSAgICAgICAgICAgICAg
ICAgICAgaG9sZXNLbm93blRvQmVPSyA9IHRydWU7Ci0gICAgICAgICAgICAgICAgfQotICAgICAg
ICAgICAgICAgIGpvaW5lci5hcHBlbmRFbXB0eVN0cmluZygpOwotICAgICAgICAgICAgfQotICAg
ICAgICB9Ci0gICAgICAgIHNjb3BlLnJlbGVhc2UoKTsKLSAgICAgICAgcmV0dXJuIGpvaW5lci5q
b2luKHN0YXRlKTsKLSAgICB9Ci0gICAgY2FzZSBBTExfQ09OVElHVU9VU19JTkRFWElOR19UWVBF
UzogewotICAgICAgICBhdXRvJiBidXR0ZXJmbHkgPSAqdGhpc09iamVjdC0+YnV0dGVyZmx5KCk7
Ci0gICAgICAgIGlmIChVTkxJS0VMWShsZW5ndGggPiBidXR0ZXJmbHkucHVibGljTGVuZ3RoKCkp
KQotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIEpTU3RyaW5nSm9pbmVyIGpvaW5lcihzdGF0
ZSwgc2VwYXJhdG9yLCBsZW5ndGgpOwotICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3Bl
LCB7IH0pOwotICAgICAgICBhdXRvIGRhdGEgPSBidXR0ZXJmbHkuY29udGlndW91cygpLmRhdGEo
KTsKLSAgICAgICAgYm9vbCBob2xlc0tub3duVG9CZU9LID0gZmFsc2U7Ci0gICAgICAgIGZvciAo
dW5zaWduZWQgaSA9IDA7IGkgPCBsZW5ndGg7ICsraSkgewotICAgICAgICAgICAgaWYgKEpTVmFs
dWUgdmFsdWUgPSBkYXRhW2ldLmdldCgpKSB7Ci0gICAgICAgICAgICAgICAgaWYgKCFqb2luZXIu
YXBwZW5kV2l0aG91dFNpZGVFZmZlY3RzKHN0YXRlLCB2YWx1ZSkpCi0gICAgICAgICAgICAgICAg
ICAgIGdvdG8gZ2VuZXJhbENhc2U7Ci0gICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAg
ICAgIGlmICghaG9sZXNLbm93blRvQmVPSykgewotICAgICAgICAgICAgICAgICAgICBpZiAoaG9s
ZXNNdXN0Rm9yd2FyZFRvUHJvdG90eXBlKHZtLCB0aGlzT2JqZWN0KSkKLSAgICAgICAgICAgICAg
ICAgICAgICAgIGdvdG8gZ2VuZXJhbENhc2U7Ci0gICAgICAgICAgICAgICAgICAgIGhvbGVzS25v
d25Ub0JlT0sgPSB0cnVlOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBqb2lu
ZXIuYXBwZW5kRW1wdHlTdHJpbmcoKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAg
ICBzY29wZS5yZWxlYXNlKCk7Ci0gICAgICAgIHJldHVybiBqb2luZXIuam9pbihzdGF0ZSk7Ci0g
ICAgfQotICAgIGNhc2UgQUxMX0RPVUJMRV9JTkRFWElOR19UWVBFUzogewotICAgICAgICBhdXRv
JiBidXR0ZXJmbHkgPSAqdGhpc09iamVjdC0+YnV0dGVyZmx5KCk7Ci0gICAgICAgIGlmIChVTkxJ
S0VMWShsZW5ndGggPiBidXR0ZXJmbHkucHVibGljTGVuZ3RoKCkpKQotICAgICAgICAgICAgYnJl
YWs7Ci0gICAgICAgIEpTU3RyaW5nSm9pbmVyIGpvaW5lcihzdGF0ZSwgc2VwYXJhdG9yLCBsZW5n
dGgpOwotICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB7IH0pOwotICAgICAgICBh
dXRvIGRhdGEgPSBidXR0ZXJmbHkuY29udGlndW91c0RvdWJsZSgpLmRhdGEoKTsKLSAgICAgICAg
Ym9vbCBob2xlc0tub3duVG9CZU9LID0gZmFsc2U7Ci0gICAgICAgIGZvciAodW5zaWduZWQgaSA9
IDA7IGkgPCBsZW5ndGg7ICsraSkgewotICAgICAgICAgICAgZG91YmxlIHZhbHVlID0gZGF0YVtp
XTsKLSAgICAgICAgICAgIGlmIChMSUtFTFkoIWlzSG9sZSh2YWx1ZSkpKQotICAgICAgICAgICAg
ICAgIGpvaW5lci5hcHBlbmROdW1iZXIodm0sIHZhbHVlKTsKLSAgICAgICAgICAgIGVsc2Ugewot
ICAgICAgICAgICAgICAgIGlmICghaG9sZXNLbm93blRvQmVPSykgewotICAgICAgICAgICAgICAg
ICAgICBpZiAoaG9sZXNNdXN0Rm9yd2FyZFRvUHJvdG90eXBlKHZtLCB0aGlzT2JqZWN0KSkKLSAg
ICAgICAgICAgICAgICAgICAgICAgIGdvdG8gZ2VuZXJhbENhc2U7Ci0gICAgICAgICAgICAgICAg
ICAgIGhvbGVzS25vd25Ub0JlT0sgPSB0cnVlOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAg
ICAgICAgICBqb2luZXIuYXBwZW5kRW1wdHlTdHJpbmcoKTsKLSAgICAgICAgICAgIH0KLSAgICAg
ICAgfQotICAgICAgICBzY29wZS5yZWxlYXNlKCk7Ci0gICAgICAgIHJldHVybiBqb2luZXIuam9p
bihzdGF0ZSk7Ci0gICAgfQotICAgIH0KLQotZ2VuZXJhbENhc2U6Ci0gICAgSlNTdHJpbmdKb2lu
ZXIgam9pbmVyKHN0YXRlLCBzZXBhcmF0b3IsIGxlbmd0aCk7Ci0gICAgUkVUVVJOX0lGX0VYQ0VQ
VElPTihzY29wZSwgeyB9KTsKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbGVuZ3RoOyAr
K2kpIHsKLSAgICAgICAgSlNWYWx1ZSBlbGVtZW50ID0gdGhpc09iamVjdC0+Z2V0SW5kZXgoJnN0
YXRlLCBpKTsKLSAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgeyB9KTsKLSAgICAg
ICAgam9pbmVyLmFwcGVuZChzdGF0ZSwgZWxlbWVudCk7Ci0gICAgICAgIFJFVFVSTl9JRl9FWENF
UFRJT04oc2NvcGUsIHsgfSk7Ci0gICAgfQotICAgIHNjb3BlLnJlbGVhc2UoKTsKLSAgICByZXR1
cm4gam9pbmVyLmpvaW4oc3RhdGUpOwotfQotCiBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxM
IGFycmF5UHJvdG9GdW5jSm9pbihFeGVjU3RhdGUqIGV4ZWMpCiB7CiAgICAgVk0mIHZtID0gZXhl
Yy0+dm0oKTsK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>341707</attachid>
            <date>2018-05-31 16:52:48 -0700</date>
            <delta_ts>2018-05-31 20:07:34 -0700</delta_ts>
            <desc>patch for landing</desc>
            <filename>b-backup.diff</filename>
            <type>text/plain</type>
            <size>14770</size>
            <attacher name="Saam Barati">saam</attacher>
            
              <data encoding="base64">SW5kZXg6IEpTVGVzdHMvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEpTVGVzdHMvQ2hhbmdlTG9n
CShyZXZpc2lvbiAyMzIzNzQpCisrKyBKU1Rlc3RzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpA
QCAtMSwzICsxLDEzIEBACisyMDE4LTA1LTMxICBTYWFtIEJhcmF0aSAgPHNiYXJhdGlAYXBwbGUu
Y29tPgorCisgICAgICAgIENhY2hlIHRvU3RyaW5nIHJlc3VsdHMgZm9yIENvVyBhcnJheXMKKyAg
ICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE4NjE2MAorCisg
ICAgICAgIFJldmlld2VkIGJ5IEtlaXRoIE1pbGxlci4KKworICAgICAgICAqIG1pY3JvYmVuY2ht
YXJrcy90by1zdHJpbmctb24tY293LWFycmF5LmpzOiBBZGRlZC4KKyAgICAgICAgKGZvbyk6CisK
IDIwMTgtMDUtMzEgIEtlaXRoIE1pbGxlciAgPGtlaXRoX21pbGxlckBhcHBsZS5jb20+CiAKICAg
ICAgICAgUmViYXNlbGluZSB0ZXN0IGZvciBjaGFuZ2UgaW4gRXJyb3Iuc3RhY2sgYmVoYXZpb3Iu
CkluZGV4OiBKU1Rlc3RzL21pY3JvYmVuY2htYXJrcy90by1zdHJpbmctb24tY293LWFycmF5Lmpz
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIEpTVGVzdHMvbWljcm9iZW5jaG1hcmtzL3RvLXN0cmluZy1vbi1jb3ct
YXJyYXkuanMJKG5vbmV4aXN0ZW50KQorKysgSlNUZXN0cy9taWNyb2JlbmNobWFya3MvdG8tc3Ry
aW5nLW9uLWNvdy1hcnJheS5qcwkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDE2IEBACitsZXQg
YXJyYXlzID0gWworICAgIFswLDBdLAorICAgIFswLDFdLAorICAgIFsxLDBdLAorICAgIFsxLDFd
LAorXTsKKworZnVuY3Rpb24gZm9vKGFycikgeworICAgIHJldHVybiBhcnIudG9TdHJpbmcoKTsK
K30KK25vSW5saW5lKGZvbyk7CisKK2ZvciAobGV0IGkgPSAwOyBpIDwgMzAwMDA7ICsraSkgewor
ICAgIGZvciAobGV0IGFyciBvZiBhcnJheXMpCisgICAgICAgIGZvbyhhcnIpOworfQpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvQ2hhbmdlTG9nCShyZXZpc2lvbiAyMzIzNjUpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMzMgQEAKKzIwMTgt
MDUtMzEgIFNhYW0gQmFyYXRpICA8c2JhcmF0aUBhcHBsZS5jb20+CisKKyAgICAgICAgQ2FjaGUg
dG9TdHJpbmcgcmVzdWx0cyBmb3IgQ29XIGFycmF5cworICAgICAgICBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTg2MTYwCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgS2Vp
dGggTWlsbGVyLgorCisgICAgICAgIFRoaXMgcGF0Y2ggbWFrZXMgaXQgc28gdGhhdCB3ZSBjYWNo
ZSB0aGUgcmVzdWx0IG9mIHRvU3RyaW5nIG9uCisgICAgICAgIGFycmF5cyB3aXRoIGEgQ29XIGJ1
dHRlcmZseS4gVGhpcyBjYWNoZSBsaXZlcyBvbiBIZWFwIGFuZCBpcworICAgICAgICBjbGVhcmVk
IGFmdGVyIGV2ZXJ5IEdDLiBXZSBvbmx5IGNhY2hlIHRoZSB0b1N0cmluZyByZXN1bHQgd2hlbgor
ICAgICAgICB0aGUgQ29XIGJ1dHRlcmZseSBkb2Vzbid0IGhhdmUgYSBob2xlIChjdXJyZW50bHks
IGFsbCBDb1cgYXJyYXlzCisgICAgICAgIGhhdmUgYSBob2xlLCBidXQgdGhpcyBpc24ndCBhbiBp
bnZhcmlhbnQgd2Ugd2FudCB0byByZWx5IG9uKS4gVGhlCisgICAgICAgIHJlYXNvbiBmb3IgdGhp
cyBpcyB0aGF0IGlmIHRoZXJlIGlzIGEgaG9sZSwgdGhlIHZhbHVlIG1heSBiZSBsb2FkZWQKKyAg
ICAgICAgZnJvbSB0aGUgcHJvdG90eXBlLCBhbmQgdGhlIGNhY2hlIG1heSBwcm9kdWNlIGEgc3Rh
bGUgcmVzdWx0LgorICAgICAgICAKKyAgICAgICAgVGhpcyBpcyBhIH40JSBzcGVlZHVwIG9uIHRo
ZSBNTCBzdWJ0ZXN0IGluIEFSRVMuIEFuZCBpcyBhIH4xJSBvdmVyYWxsCisgICAgICAgIHByb2dy
ZXNzaW9uIG9uIEFSRVMuCisKKyAgICAgICAgKiBoZWFwL0hlYXAuY3BwOgorICAgICAgICAoSlND
OjpIZWFwOjpmaW5hbGl6ZSk6CisgICAgICAgIChKU0M6OkhlYXA6OmFkZENvcmVDb25zdHJhaW50
cyk6CisgICAgICAgICogaGVhcC9IZWFwLmg6CisgICAgICAgICogcnVudGltZS9BcnJheVByb3Rv
dHlwZS5jcHA6CisgICAgICAgIChKU0M6OmNhblVzZUZhc3RKb2luKToKKyAgICAgICAgKEpTQzo6
aG9sZXNNdXN0Rm9yd2FyZFRvUHJvdG90eXBlKToKKyAgICAgICAgKEpTQzo6aXNIb2xlKToKKyAg
ICAgICAgKEpTQzo6Y29udGFpbnNIb2xlKToKKyAgICAgICAgKEpTQzo6ZmFzdEpvaW4pOgorICAg
ICAgICAoSlNDOjphcnJheVByb3RvRnVuY1RvU3RyaW5nKToKKwogMjAxOC0wNS0zMCAgWXVzdWtl
IFN1enVraSAgPHV0YXRhbmUudGVhQGdtYWlsLmNvbT4KIAogICAgICAgICBbSlNDXSBQYXNzIFZN
JiBwYXJhbWV0ZXIgYXMgbXVjaCBhcyBwb3NzaWJsZQpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2hlYXAvSGVhcC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hl
YXAvSGVhcC5jcHAJKHJldmlzaW9uIDIzMjM2NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9o
ZWFwL0hlYXAuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMDQzLDYgKzIwNDMsOCBAQCB2b2lkIEhl
YXA6OmZpbmFsaXplKCkKICAgICAKICAgICBpZiAoSGFzT3duUHJvcGVydHlDYWNoZSogY2FjaGUg
PSB2bSgpLT5oYXNPd25Qcm9wZXJ0eUNhY2hlKCkpCiAgICAgICAgIGNhY2hlLT5jbGVhcigpOwor
CisgICAgaW1tdXRhYmxlQnV0dGVyZmx5VG9TdHJpbmdDYWNoZS5jbGVhcigpOwogICAgIAogICAg
IGZvciAoY29uc3QgSGVhcEZpbmFsaXplckNhbGxiYWNrJiBjYWxsYmFjayA6IG1faGVhcEZpbmFs
aXplckNhbGxiYWNrcykKICAgICAgICAgY2FsbGJhY2sucnVuKCp2bSgpKTsKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXAuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaGVhcC9IZWFwLmgJKHJldmlzaW9uIDIzMjM2NSkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9oZWFwL0hlYXAuaAkod29ya2luZyBjb3B5KQpAQCAtNjgsNiArNjgsNyBAQCBjbGFz
cyBJbmNyZW1lbnRhbFN3ZWVwZXI7CiBjbGFzcyBKSVRTdHViUm91dGluZTsKIGNsYXNzIEpJVFN0
dWJSb3V0aW5lU2V0OwogY2xhc3MgSlNDZWxsOworY2xhc3MgSlNJbW11dGFibGVCdXR0ZXJmbHk7
CiBjbGFzcyBKU1ZhbHVlOwogY2xhc3MgTExJbnRPZmZzZXRzRXh0cmFjdG9yOwogY2xhc3MgTWFj
aGluZVRocmVhZHM7CkBAIC0zODEsNiArMzgyLDggQEAgcHVibGljOgogICAgIAogICAgIFNlY29u
ZHMgdG90YWxHQ1RpbWUoKSBjb25zdCB7IHJldHVybiBtX3RvdGFsR0NUaW1lOyB9CiAKKyAgICBI
YXNoTWFwPEpTSW1tdXRhYmxlQnV0dGVyZmx5KiwgSlNTdHJpbmcqPiBpbW11dGFibGVCdXR0ZXJm
bHlUb1N0cmluZ0NhY2hlOworCiBwcml2YXRlOgogICAgIGZyaWVuZCBjbGFzcyBBbGxvY2F0aW5n
U2NvcGU7CiAgICAgZnJpZW5kIGNsYXNzIENvZGVCbG9jazsKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0FycmF5UHJvdG90eXBlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9BcnJheVByb3RvdHlwZS5jcHAJKHJldmlzaW9uIDIzMjM2
NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0FycmF5UHJvdG90eXBlLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMzg1LDggKzM4NSwxNDIgQEAgdm9pZCB1bnNoaWZ0KEV4ZWNTdGF0
ZSogZXhlYywgSlNPYmplY3QqIAogICAgIH0KIH0KIAotc3RhdGljIGJvb2wgY2FuVXNlRmFzdEpv
aW4oY29uc3QgSlNPYmplY3QqKTsKLXN0YXRpYyBKU1ZhbHVlIGZhc3RKb2luKEV4ZWNTdGF0ZSYs
IEpTT2JqZWN0KiwgU3RyaW5nVmlldywgdW5zaWduZWQpOworaW5saW5lIGJvb2wgY2FuVXNlRmFz
dEpvaW4oY29uc3QgSlNPYmplY3QqIHRoaXNPYmplY3QpCit7CisgICAgc3dpdGNoICh0aGlzT2Jq
ZWN0LT5pbmRleGluZ1R5cGUoKSkgeworICAgIGNhc2UgQUxMX0NPTlRJR1VPVVNfSU5ERVhJTkdf
VFlQRVM6CisgICAgY2FzZSBBTExfSU5UMzJfSU5ERVhJTkdfVFlQRVM6CisgICAgY2FzZSBBTExf
RE9VQkxFX0lOREVYSU5HX1RZUEVTOgorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICBkZWZhdWx0
OgorICAgICAgICBicmVhazsKKyAgICB9CisgICAgcmV0dXJuIGZhbHNlOworfQorCitpbmxpbmUg
Ym9vbCBob2xlc011c3RGb3J3YXJkVG9Qcm90b3R5cGUoVk0mIHZtLCBKU09iamVjdCogb2JqZWN0
KQoreworICAgIHJldHVybiBvYmplY3QtPnN0cnVjdHVyZSh2bSktPmhvbGVzTXVzdEZvcndhcmRU
b1Byb3RvdHlwZSh2bSwgb2JqZWN0KTsKK30KKworaW5saW5lIGJvb2wgaXNIb2xlKGRvdWJsZSB2
YWx1ZSkKK3sKKyAgICByZXR1cm4gc3RkOjppc25hbih2YWx1ZSk7Cit9CisKK2lubGluZSBib29s
IGlzSG9sZShjb25zdCBXcml0ZUJhcnJpZXI8VW5rbm93bj4mIHZhbHVlKQoreworICAgIHJldHVy
biAhdmFsdWU7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+CitpbmxpbmUgYm9vbCBjb250YWlu
c0hvbGUoVCogZGF0YSwgdW5zaWduZWQgbGVuZ3RoKQoreworICAgIGZvciAodW5zaWduZWQgaSA9
IDA7IGkgPCBsZW5ndGg7ICsraSkgeworICAgICAgICBpZiAoaXNIb2xlKGRhdGFbaV0pKQorICAg
ICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorICAgIHJldHVybiBmYWxzZTsKK30KKworaW5s
aW5lIEpTVmFsdWUgZmFzdEpvaW4oRXhlY1N0YXRlJiBzdGF0ZSwgSlNPYmplY3QqIHRoaXNPYmpl
Y3QsIFN0cmluZ1ZpZXcgc2VwYXJhdG9yLCB1bnNpZ25lZCBsZW5ndGgsIGJvb2wqIHNhd0hvbGVz
ID0gbnVsbHB0cikKK3sKKyAgICBWTSYgdm0gPSBzdGF0ZS52bSgpOworICAgIGF1dG8gc2NvcGUg
PSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKworICAgIHN3aXRjaCAodGhpc09iamVjdC0+aW5k
ZXhpbmdUeXBlKCkpIHsKKyAgICBjYXNlIEFMTF9JTlQzMl9JTkRFWElOR19UWVBFUzogeworICAg
ICAgICBhdXRvJiBidXR0ZXJmbHkgPSAqdGhpc09iamVjdC0+YnV0dGVyZmx5KCk7CisgICAgICAg
IGlmIChVTkxJS0VMWShsZW5ndGggPiBidXR0ZXJmbHkucHVibGljTGVuZ3RoKCkpKQorICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgIEpTU3RyaW5nSm9pbmVyIGpvaW5lcihzdGF0ZSwgc2VwYXJh
dG9yLCBsZW5ndGgpOworICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB7IH0pOwor
ICAgICAgICBhdXRvIGRhdGEgPSBidXR0ZXJmbHkuY29udGlndW91cygpLmRhdGEoKTsKKyAgICAg
ICAgYm9vbCBob2xlc0tub3duVG9CZU9LID0gZmFsc2U7CisgICAgICAgIGZvciAodW5zaWduZWQg
aSA9IDA7IGkgPCBsZW5ndGg7ICsraSkgeworICAgICAgICAgICAgSlNWYWx1ZSB2YWx1ZSA9IGRh
dGFbaV0uZ2V0KCk7CisgICAgICAgICAgICBpZiAoTElLRUxZKHZhbHVlKSkKKyAgICAgICAgICAg
ICAgICBqb2luZXIuYXBwZW5kTnVtYmVyKHZtLCB2YWx1ZS5hc0ludDMyKCkpOworICAgICAgICAg
ICAgZWxzZSB7CisgICAgICAgICAgICAgICAgaWYgKHNhd0hvbGVzKQorICAgICAgICAgICAgICAg
ICAgICAqc2F3SG9sZXMgPSB0cnVlOworICAgICAgICAgICAgICAgIGlmICghaG9sZXNLbm93blRv
QmVPSykgeworICAgICAgICAgICAgICAgICAgICBpZiAoaG9sZXNNdXN0Rm9yd2FyZFRvUHJvdG90
eXBlKHZtLCB0aGlzT2JqZWN0KSkKKyAgICAgICAgICAgICAgICAgICAgICAgIGdvdG8gZ2VuZXJh
bENhc2U7CisgICAgICAgICAgICAgICAgICAgIGhvbGVzS25vd25Ub0JlT0sgPSB0cnVlOworICAg
ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBqb2luZXIuYXBwZW5kRW1wdHlTdHJpbmco
KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBzY29wZS5yZWxlYXNlKCk7Cisg
ICAgICAgIHJldHVybiBqb2luZXIuam9pbihzdGF0ZSk7CisgICAgfQorICAgIGNhc2UgQUxMX0NP
TlRJR1VPVVNfSU5ERVhJTkdfVFlQRVM6IHsKKyAgICAgICAgYXV0byYgYnV0dGVyZmx5ID0gKnRo
aXNPYmplY3QtPmJ1dHRlcmZseSgpOworICAgICAgICBpZiAoVU5MSUtFTFkobGVuZ3RoID4gYnV0
dGVyZmx5LnB1YmxpY0xlbmd0aCgpKSkKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBKU1N0
cmluZ0pvaW5lciBqb2luZXIoc3RhdGUsIHNlcGFyYXRvciwgbGVuZ3RoKTsKKyAgICAgICAgUkVU
VVJOX0lGX0VYQ0VQVElPTihzY29wZSwgeyB9KTsKKyAgICAgICAgYXV0byBkYXRhID0gYnV0dGVy
Zmx5LmNvbnRpZ3VvdXMoKS5kYXRhKCk7CisgICAgICAgIGJvb2wgaG9sZXNLbm93blRvQmVPSyA9
IGZhbHNlOworICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbGVuZ3RoOyArK2kpIHsK
KyAgICAgICAgICAgIGlmIChKU1ZhbHVlIHZhbHVlID0gZGF0YVtpXS5nZXQoKSkgeworICAgICAg
ICAgICAgICAgIGlmICgham9pbmVyLmFwcGVuZFdpdGhvdXRTaWRlRWZmZWN0cyhzdGF0ZSwgdmFs
dWUpKQorICAgICAgICAgICAgICAgICAgICBnb3RvIGdlbmVyYWxDYXNlOworICAgICAgICAgICAg
fSBlbHNlIHsKKyAgICAgICAgICAgICAgICBpZiAoc2F3SG9sZXMpCisgICAgICAgICAgICAgICAg
ICAgICpzYXdIb2xlcyA9IHRydWU7CisgICAgICAgICAgICAgICAgaWYgKCFob2xlc0tub3duVG9C
ZU9LKSB7CisgICAgICAgICAgICAgICAgICAgIGlmIChob2xlc011c3RGb3J3YXJkVG9Qcm90b3R5
cGUodm0sIHRoaXNPYmplY3QpKQorICAgICAgICAgICAgICAgICAgICAgICAgZ290byBnZW5lcmFs
Q2FzZTsKKyAgICAgICAgICAgICAgICAgICAgaG9sZXNLbm93blRvQmVPSyA9IHRydWU7CisgICAg
ICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGpvaW5lci5hcHBlbmRFbXB0eVN0cmluZygp
OworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIHNjb3BlLnJlbGVhc2UoKTsKKyAg
ICAgICAgcmV0dXJuIGpvaW5lci5qb2luKHN0YXRlKTsKKyAgICB9CisgICAgY2FzZSBBTExfRE9V
QkxFX0lOREVYSU5HX1RZUEVTOiB7CisgICAgICAgIGF1dG8mIGJ1dHRlcmZseSA9ICp0aGlzT2Jq
ZWN0LT5idXR0ZXJmbHkoKTsKKyAgICAgICAgaWYgKFVOTElLRUxZKGxlbmd0aCA+IGJ1dHRlcmZs
eS5wdWJsaWNMZW5ndGgoKSkpCisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgSlNTdHJpbmdK
b2luZXIgam9pbmVyKHN0YXRlLCBzZXBhcmF0b3IsIGxlbmd0aCk7CisgICAgICAgIFJFVFVSTl9J
Rl9FWENFUFRJT04oc2NvcGUsIHsgfSk7CisgICAgICAgIGF1dG8gZGF0YSA9IGJ1dHRlcmZseS5j
b250aWd1b3VzRG91YmxlKCkuZGF0YSgpOworICAgICAgICBib29sIGhvbGVzS25vd25Ub0JlT0sg
PSBmYWxzZTsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGxlbmd0aDsgKytpKSB7
CisgICAgICAgICAgICBkb3VibGUgdmFsdWUgPSBkYXRhW2ldOworICAgICAgICAgICAgaWYgKExJ
S0VMWSghaXNIb2xlKHZhbHVlKSkpCisgICAgICAgICAgICAgICAgam9pbmVyLmFwcGVuZE51bWJl
cih2bSwgdmFsdWUpOworICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgaWYgKHNh
d0hvbGVzKQorICAgICAgICAgICAgICAgICAgICAqc2F3SG9sZXMgPSB0cnVlOworICAgICAgICAg
ICAgICAgIGlmICghaG9sZXNLbm93blRvQmVPSykgeworICAgICAgICAgICAgICAgICAgICBpZiAo
aG9sZXNNdXN0Rm9yd2FyZFRvUHJvdG90eXBlKHZtLCB0aGlzT2JqZWN0KSkKKyAgICAgICAgICAg
ICAgICAgICAgICAgIGdvdG8gZ2VuZXJhbENhc2U7CisgICAgICAgICAgICAgICAgICAgIGhvbGVz
S25vd25Ub0JlT0sgPSB0cnVlOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBq
b2luZXIuYXBwZW5kRW1wdHlTdHJpbmcoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAg
ICAgICBzY29wZS5yZWxlYXNlKCk7CisgICAgICAgIHJldHVybiBqb2luZXIuam9pbihzdGF0ZSk7
CisgICAgfQorICAgIH0KKworZ2VuZXJhbENhc2U6CisgICAgSlNTdHJpbmdKb2luZXIgam9pbmVy
KHN0YXRlLCBzZXBhcmF0b3IsIGxlbmd0aCk7CisgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29w
ZSwgeyB9KTsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbGVuZ3RoOyArK2kpIHsKKyAg
ICAgICAgSlNWYWx1ZSBlbGVtZW50ID0gdGhpc09iamVjdC0+Z2V0SW5kZXgoJnN0YXRlLCBpKTsK
KyAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgeyB9KTsKKyAgICAgICAgam9pbmVy
LmFwcGVuZChzdGF0ZSwgZWxlbWVudCk7CisgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2Nv
cGUsIHsgfSk7CisgICAgfQorICAgIHNjb3BlLnJlbGVhc2UoKTsKKyAgICByZXR1cm4gam9pbmVy
LmpvaW4oc3RhdGUpOworfQogCiBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGFycmF5UHJv
dG9GdW5jVG9TdHJpbmcoRXhlY1N0YXRlKiBleGVjKQogewpAQCAtNDM1LDcgKzU2OSwyNSBAQCBF
bmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGFycmF5UHJvdG9GCiAgICAgaWYgKExJS0VMWShj
YW5Vc2VGYXN0Sm9pbih0aGlzQXJyYXkpKSkgewogICAgICAgICBjb25zdCBMQ2hhciBjb21tYSA9
ICcsJzsKICAgICAgICAgc2NvcGUucmVsZWFzZSgpOwotICAgICAgICByZXR1cm4gSlNWYWx1ZTo6
ZW5jb2RlKGZhc3RKb2luKCpleGVjLCB0aGlzQXJyYXksIHsgJmNvbW1hLCAxIH0sIGxlbmd0aCkp
OworCisgICAgICAgIGJvb2wgaXNDb1cgPSBpc0NvcHlPbldyaXRlKHRoaXNBcnJheS0+aW5kZXhp
bmdNb2RlKCkpOworICAgICAgICBKU0ltbXV0YWJsZUJ1dHRlcmZseSogaW1tdXRhYmxlQnV0dGVy
Zmx5ID0gbnVsbHB0cjsKKyAgICAgICAgaWYgKGlzQ29XKSB7CisgICAgICAgICAgICBpbW11dGFi
bGVCdXR0ZXJmbHkgPSBKU0ltbXV0YWJsZUJ1dHRlcmZseTo6ZnJvbUJ1dHRlcmZseSh0aGlzQXJy
YXktPmJ1dHRlcmZseSgpKTsKKyAgICAgICAgICAgIGF1dG8gaXRlciA9IHZtLmhlYXAuaW1tdXRh
YmxlQnV0dGVyZmx5VG9TdHJpbmdDYWNoZS5maW5kKGltbXV0YWJsZUJ1dHRlcmZseSk7CisgICAg
ICAgICAgICBpZiAoaXRlciAhPSB2bS5oZWFwLmltbXV0YWJsZUJ1dHRlcmZseVRvU3RyaW5nQ2Fj
aGUuZW5kKCkpCisgICAgICAgICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShpdGVyLT52
YWx1ZSk7CisgICAgICAgIH0KKworICAgICAgICBib29sIHNhd0hvbGVzID0gZmFsc2U7CisgICAg
ICAgIEpTVmFsdWUgcmVzdWx0ID0gZmFzdEpvaW4oKmV4ZWMsIHRoaXNBcnJheSwgeyAmY29tbWEs
IDEgfSwgbGVuZ3RoLCAmc2F3SG9sZXMpOworCisgICAgICAgIGlmICghc2F3SG9sZXMgJiYgcmVz
dWx0ICYmIGlzSlNTdHJpbmcocmVzdWx0KSAmJiBpc0NvVykgeworICAgICAgICAgICAgQVNTRVJU
KEpTSW1tdXRhYmxlQnV0dGVyZmx5Ojpmcm9tQnV0dGVyZmx5KHRoaXNBcnJheS0+YnV0dGVyZmx5
KCkpID09IGltbXV0YWJsZUJ1dHRlcmZseSk7CisgICAgICAgICAgICB2bS5oZWFwLmltbXV0YWJs
ZUJ1dHRlcmZseVRvU3RyaW5nQ2FjaGUuYWRkKGltbXV0YWJsZUJ1dHRlcmZseSwganNDYXN0PEpT
U3RyaW5nKj4ocmVzdWx0KSk7CisgICAgICAgIH0KKworICAgICAgICByZXR1cm4gSlNWYWx1ZTo6
ZW5jb2RlKHJlc3VsdCk7CiAgICAgfQogCiAgICAgSlNTdHJpbmdKb2luZXIgam9pbmVyKCpleGVj
LCAnLCcsIGxlbmd0aCk7CkBAIC01MDQsMzAgKzY1Niw2IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19I
T1NUX0NBTEwgYXJyYXlQcm90b0YKICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHN0cmluZ0pv
aW5lci5qb2luKCpleGVjKSk7CiB9CiAKLXN0YXRpYyBpbmxpbmUgYm9vbCBpc0hvbGUoZG91Ymxl
IHZhbHVlKQotewotICAgIHJldHVybiBzdGQ6OmlzbmFuKHZhbHVlKTsKLX0KLQotc3RhdGljIGlu
bGluZSBib29sIGlzSG9sZShjb25zdCBXcml0ZUJhcnJpZXI8VW5rbm93bj4mIHZhbHVlKQotewot
ICAgIHJldHVybiAhdmFsdWU7Ci19Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0YXRpYyBpbmxp
bmUgYm9vbCBjb250YWluc0hvbGUoVCogZGF0YSwgdW5zaWduZWQgbGVuZ3RoKQotewotICAgIGZv
ciAodW5zaWduZWQgaSA9IDA7IGkgPCBsZW5ndGg7ICsraSkgewotICAgICAgICBpZiAoaXNIb2xl
KGRhdGFbaV0pKQotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotICAgIHJldHVybiBm
YWxzZTsKLX0KLQotc3RhdGljIGlubGluZSBib29sIGhvbGVzTXVzdEZvcndhcmRUb1Byb3RvdHlw
ZShWTSYgdm0sIEpTT2JqZWN0KiBvYmplY3QpCi17Ci0gICAgcmV0dXJuIG9iamVjdC0+c3RydWN0
dXJlKHZtKS0+aG9sZXNNdXN0Rm9yd2FyZFRvUHJvdG90eXBlKHZtLCBvYmplY3QpOwotfQotCiBz
dGF0aWMgSlNWYWx1ZSBzbG93Sm9pbihFeGVjU3RhdGUmIGV4ZWMsIEpTT2JqZWN0KiB0aGlzT2Jq
ZWN0LCBKU1N0cmluZyogc2VwYXJhdG9yLCB1aW50NjRfdCBsZW5ndGgpCiB7CiAgICAgVk0mIHZt
ID0gZXhlYy52bSgpOwpAQCAtNTc2LDExMiArNzA0LDYgQEAgc3RhdGljIEpTVmFsdWUgc2xvd0pv
aW4oRXhlY1N0YXRlJiBleGVjLAogICAgIHJldHVybiByOwogfQogCi1zdGF0aWMgaW5saW5lIGJv
b2wgY2FuVXNlRmFzdEpvaW4oY29uc3QgSlNPYmplY3QqIHRoaXNPYmplY3QpCi17Ci0gICAgc3dp
dGNoICh0aGlzT2JqZWN0LT5pbmRleGluZ1R5cGUoKSkgewotICAgIGNhc2UgQUxMX0NPTlRJR1VP
VVNfSU5ERVhJTkdfVFlQRVM6Ci0gICAgY2FzZSBBTExfSU5UMzJfSU5ERVhJTkdfVFlQRVM6Ci0g
ICAgY2FzZSBBTExfRE9VQkxFX0lOREVYSU5HX1RZUEVTOgotICAgICAgICByZXR1cm4gdHJ1ZTsK
LSAgICBkZWZhdWx0OgotICAgICAgICBicmVhazsKLSAgICB9Ci0gICAgcmV0dXJuIGZhbHNlOwot
fQotCi1zdGF0aWMgaW5saW5lIEpTVmFsdWUgZmFzdEpvaW4oRXhlY1N0YXRlJiBzdGF0ZSwgSlNP
YmplY3QqIHRoaXNPYmplY3QsIFN0cmluZ1ZpZXcgc2VwYXJhdG9yLCB1bnNpZ25lZCBsZW5ndGgp
Ci17Ci0gICAgVk0mIHZtID0gc3RhdGUudm0oKTsKLSAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9U
SFJPV19TQ09QRSh2bSk7Ci0KLSAgICBzd2l0Y2ggKHRoaXNPYmplY3QtPmluZGV4aW5nVHlwZSgp
KSB7Ci0gICAgY2FzZSBBTExfSU5UMzJfSU5ERVhJTkdfVFlQRVM6IHsKLSAgICAgICAgYXV0byYg
YnV0dGVyZmx5ID0gKnRoaXNPYmplY3QtPmJ1dHRlcmZseSgpOwotICAgICAgICBpZiAoVU5MSUtF
TFkobGVuZ3RoID4gYnV0dGVyZmx5LnB1YmxpY0xlbmd0aCgpKSkKLSAgICAgICAgICAgIGJyZWFr
OwotICAgICAgICBKU1N0cmluZ0pvaW5lciBqb2luZXIoc3RhdGUsIHNlcGFyYXRvciwgbGVuZ3Ro
KTsKLSAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgeyB9KTsKLSAgICAgICAgYXV0
byBkYXRhID0gYnV0dGVyZmx5LmNvbnRpZ3VvdXMoKS5kYXRhKCk7Ci0gICAgICAgIGJvb2wgaG9s
ZXNLbm93blRvQmVPSyA9IGZhbHNlOwotICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwg
bGVuZ3RoOyArK2kpIHsKLSAgICAgICAgICAgIEpTVmFsdWUgdmFsdWUgPSBkYXRhW2ldLmdldCgp
OwotICAgICAgICAgICAgaWYgKExJS0VMWSh2YWx1ZSkpCi0gICAgICAgICAgICAgICAgam9pbmVy
LmFwcGVuZE51bWJlcih2bSwgdmFsdWUuYXNJbnQzMigpKTsKLSAgICAgICAgICAgIGVsc2Ugewot
ICAgICAgICAgICAgICAgIGlmICghaG9sZXNLbm93blRvQmVPSykgewotICAgICAgICAgICAgICAg
ICAgICBpZiAoaG9sZXNNdXN0Rm9yd2FyZFRvUHJvdG90eXBlKHZtLCB0aGlzT2JqZWN0KSkKLSAg
ICAgICAgICAgICAgICAgICAgICAgIGdvdG8gZ2VuZXJhbENhc2U7Ci0gICAgICAgICAgICAgICAg
ICAgIGhvbGVzS25vd25Ub0JlT0sgPSB0cnVlOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAg
ICAgICAgICBqb2luZXIuYXBwZW5kRW1wdHlTdHJpbmcoKTsKLSAgICAgICAgICAgIH0KLSAgICAg
ICAgfQotICAgICAgICBzY29wZS5yZWxlYXNlKCk7Ci0gICAgICAgIHJldHVybiBqb2luZXIuam9p
bihzdGF0ZSk7Ci0gICAgfQotICAgIGNhc2UgQUxMX0NPTlRJR1VPVVNfSU5ERVhJTkdfVFlQRVM6
IHsKLSAgICAgICAgYXV0byYgYnV0dGVyZmx5ID0gKnRoaXNPYmplY3QtPmJ1dHRlcmZseSgpOwot
ICAgICAgICBpZiAoVU5MSUtFTFkobGVuZ3RoID4gYnV0dGVyZmx5LnB1YmxpY0xlbmd0aCgpKSkK
LSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBKU1N0cmluZ0pvaW5lciBqb2luZXIoc3RhdGUs
IHNlcGFyYXRvciwgbGVuZ3RoKTsKLSAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwg
eyB9KTsKLSAgICAgICAgYXV0byBkYXRhID0gYnV0dGVyZmx5LmNvbnRpZ3VvdXMoKS5kYXRhKCk7
Ci0gICAgICAgIGJvb2wgaG9sZXNLbm93blRvQmVPSyA9IGZhbHNlOwotICAgICAgICBmb3IgKHVu
c2lnbmVkIGkgPSAwOyBpIDwgbGVuZ3RoOyArK2kpIHsKLSAgICAgICAgICAgIGlmIChKU1ZhbHVl
IHZhbHVlID0gZGF0YVtpXS5nZXQoKSkgewotICAgICAgICAgICAgICAgIGlmICgham9pbmVyLmFw
cGVuZFdpdGhvdXRTaWRlRWZmZWN0cyhzdGF0ZSwgdmFsdWUpKQotICAgICAgICAgICAgICAgICAg
ICBnb3RvIGdlbmVyYWxDYXNlOwotICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAg
ICBpZiAoIWhvbGVzS25vd25Ub0JlT0spIHsKLSAgICAgICAgICAgICAgICAgICAgaWYgKGhvbGVz
TXVzdEZvcndhcmRUb1Byb3RvdHlwZSh2bSwgdGhpc09iamVjdCkpCi0gICAgICAgICAgICAgICAg
ICAgICAgICBnb3RvIGdlbmVyYWxDYXNlOwotICAgICAgICAgICAgICAgICAgICBob2xlc0tub3du
VG9CZU9LID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgam9pbmVy
LmFwcGVuZEVtcHR5U3RyaW5nKCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAg
c2NvcGUucmVsZWFzZSgpOwotICAgICAgICByZXR1cm4gam9pbmVyLmpvaW4oc3RhdGUpOwotICAg
IH0KLSAgICBjYXNlIEFMTF9ET1VCTEVfSU5ERVhJTkdfVFlQRVM6IHsKLSAgICAgICAgYXV0byYg
YnV0dGVyZmx5ID0gKnRoaXNPYmplY3QtPmJ1dHRlcmZseSgpOwotICAgICAgICBpZiAoVU5MSUtF
TFkobGVuZ3RoID4gYnV0dGVyZmx5LnB1YmxpY0xlbmd0aCgpKSkKLSAgICAgICAgICAgIGJyZWFr
OwotICAgICAgICBKU1N0cmluZ0pvaW5lciBqb2luZXIoc3RhdGUsIHNlcGFyYXRvciwgbGVuZ3Ro
KTsKLSAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgeyB9KTsKLSAgICAgICAgYXV0
byBkYXRhID0gYnV0dGVyZmx5LmNvbnRpZ3VvdXNEb3VibGUoKS5kYXRhKCk7Ci0gICAgICAgIGJv
b2wgaG9sZXNLbm93blRvQmVPSyA9IGZhbHNlOwotICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAw
OyBpIDwgbGVuZ3RoOyArK2kpIHsKLSAgICAgICAgICAgIGRvdWJsZSB2YWx1ZSA9IGRhdGFbaV07
Ci0gICAgICAgICAgICBpZiAoTElLRUxZKCFpc0hvbGUodmFsdWUpKSkKLSAgICAgICAgICAgICAg
ICBqb2luZXIuYXBwZW5kTnVtYmVyKHZtLCB2YWx1ZSk7Ci0gICAgICAgICAgICBlbHNlIHsKLSAg
ICAgICAgICAgICAgICBpZiAoIWhvbGVzS25vd25Ub0JlT0spIHsKLSAgICAgICAgICAgICAgICAg
ICAgaWYgKGhvbGVzTXVzdEZvcndhcmRUb1Byb3RvdHlwZSh2bSwgdGhpc09iamVjdCkpCi0gICAg
ICAgICAgICAgICAgICAgICAgICBnb3RvIGdlbmVyYWxDYXNlOwotICAgICAgICAgICAgICAgICAg
ICBob2xlc0tub3duVG9CZU9LID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAg
ICAgICAgam9pbmVyLmFwcGVuZEVtcHR5U3RyaW5nKCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAg
IH0KLSAgICAgICAgc2NvcGUucmVsZWFzZSgpOwotICAgICAgICByZXR1cm4gam9pbmVyLmpvaW4o
c3RhdGUpOwotICAgIH0KLSAgICB9Ci0KLWdlbmVyYWxDYXNlOgotICAgIEpTU3RyaW5nSm9pbmVy
IGpvaW5lcihzdGF0ZSwgc2VwYXJhdG9yLCBsZW5ndGgpOwotICAgIFJFVFVSTl9JRl9FWENFUFRJ
T04oc2NvcGUsIHsgfSk7Ci0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGxlbmd0aDsgKytp
KSB7Ci0gICAgICAgIEpTVmFsdWUgZWxlbWVudCA9IHRoaXNPYmplY3QtPmdldEluZGV4KCZzdGF0
ZSwgaSk7Ci0gICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHsgfSk7Ci0gICAgICAg
IGpvaW5lci5hcHBlbmQoc3RhdGUsIGVsZW1lbnQpOwotICAgICAgICBSRVRVUk5fSUZfRVhDRVBU
SU9OKHNjb3BlLCB7IH0pOwotICAgIH0KLSAgICBzY29wZS5yZWxlYXNlKCk7Ci0gICAgcmV0dXJu
IGpvaW5lci5qb2luKHN0YXRlKTsKLX0KLQogRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBh
cnJheVByb3RvRnVuY0pvaW4oRXhlY1N0YXRlKiBleGVjKQogewogICAgIFZNJiB2bSA9IGV4ZWMt
PnZtKCk7Cg==
</data>

          </attachment>
      

    </bug>

</bugzilla>