<?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>197265</bug_id>
          
          <creation_ts>2019-04-24 17:36:43 -0700</creation_ts>
          <short_desc>[B3] Constants should be hoisted to the root block until moveConstants</short_desc>
          <delta_ts>2019-05-10 13:01:30 -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>
          
          
          <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>
          
          <blocked>197756</blocked>
    
    <blocked>197792</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Robin Morisset">rmorisset</reporter>
          <assigned_to name="Robin Morisset">rmorisset</assigned_to>
          <cc>commit-queue</cc>
    
    <cc>ews-watchlist</cc>
    
    <cc>keith_miller</cc>
    
    <cc>mark.lam</cc>
    
    <cc>msaboff</cc>
    
    <cc>saam</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1530265</commentid>
    <comment_count>0</comment_count>
    <who name="Robin Morisset">rmorisset</who>
    <bug_when>2019-04-24 17:36:43 -0700</bug_when>
    <thetext>The moveConstants phase gathers and moves all constants based purely on their uses. So where they are located before that point is not relevant to anything.
Keeping them orphaned (in other words not in a basic block) until then would have many benefits:
- Makes all other B3 phases a bit faster, since they won&apos;t have to iterate over them. This might be significant as for example on JetStream2 27% of all B3Values at the beginning of B3 are constants (and up to 50% for some JS functions that reach FTL !)
- MoveConstants won&apos;t have to replace the constants by Nops that stay allocated throughout Air (since there is no elimination of dead code after moveConstants). As 11% of all B3Values that reach Air are Nops (and as far as I can tell they all come from moveConstants), this might offer a small but not useless memory saving
- By making basic blocks smaller this should enable tailDuplication and jump threading to trigger more often (since they are respectively limited to blocks of size &lt;= 3 or blocks with nothing but a jump)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1531353</commentid>
    <comment_count>1</comment_count>
    <who name="Robin Morisset">rmorisset</who>
    <bug_when>2019-04-29 16:05:20 -0700</bug_when>
    <thetext>After discussing this with Phil, he convinced me that the assumption that no value is orphaned is too strongly embedded throughout B3 to easily change. Instead we can simply hoist all constants to the root block in ReduceStrength, deduplicating them along the way.
This won&apos;t provide the speed benefit from not iterating over them, but should provide both a small memory saving, and enable a bit more tail duplication.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1531389</commentid>
    <comment_count>2</comment_count>
      <attachid>368522</attachid>
    <who name="Robin Morisset">rmorisset</who>
    <bug_when>2019-04-29 17:42:50 -0700</bug_when>
    <thetext>Created attachment 368522
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1531390</commentid>
    <comment_count>3</comment_count>
    <who name="EWS Watchlist">ews-watchlist</who>
    <bug_when>2019-04-29 17:45:43 -0700</bug_when>
    <thetext>Attachment 368522 did not pass style-queue:


ERROR: Source/JavaScriptCore/b3/B3ReduceStrength.cpp:2163:  One line control clauses should not use braces.  [whitespace/braces] [4]
Total errors found: 1 in 10 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1534043</commentid>
    <comment_count>4</comment_count>
      <attachid>369315</attachid>
    <who name="Robin Morisset">rmorisset</who>
    <bug_when>2019-05-07 12:38:47 -0700</bug_when>
    <thetext>Created attachment 369315
Patch

Just rebased on ToT and fixed style nit.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1534045</commentid>
    <comment_count>5</comment_count>
      <attachid>369315</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2019-05-07 12:50:19 -0700</bug_when>
    <thetext>Comment on attachment 369315
Patch

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

r=me

&gt; Source/JavaScriptCore/ChangeLog:3
&gt; +        [B3] Constants should be hoisted to the root block

doesn&apos;t moveConstants undo this? (I&apos;m not saying if that&apos;s good or bad, but this title makes it seem like this wouldn&apos;t happen)

&gt; Source/JavaScriptCore/ChangeLog:19
&gt; +        When I tried measuring the total effect on JetStream2 I got a tiny and almost certainly non-significant progression.

Did you measure compile time effect?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1534047</commentid>
    <comment_count>6</comment_count>
      <attachid>369315</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2019-05-07 12:51:46 -0700</bug_when>
    <thetext>Comment on attachment 369315
Patch

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

&gt; Source/JavaScriptCore/ChangeLog:11
&gt; +        - We now run eliminateDeadCode just after moveConstants, so that the Nops that moveConstants generates are freed instead of staying live throughout Air compilation.

what&apos;s the goal here? Lowering memory (I&apos;m assuming yes)? It&apos;s worth stating the goal.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1534049</commentid>
    <comment_count>7</comment_count>
    <who name="Robin Morisset">rmorisset</who>
    <bug_when>2019-05-07 12:53:51 -0700</bug_when>
    <thetext>(In reply to Saam Barati from comment #5)
&gt; Comment on attachment 369315 [details]
&gt; Patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=369315&amp;action=review
&gt; 
&gt; r=me

Thanks!

&gt; 
&gt; &gt; Source/JavaScriptCore/ChangeLog:3
&gt; &gt; +        [B3] Constants should be hoisted to the root block
&gt; 
&gt; doesn&apos;t moveConstants undo this? (I&apos;m not saying if that&apos;s good or bad, but
&gt; this title makes it seem like this wouldn&apos;t happen)

Yes, the entire reason we can put everything in the root block without thinking is that moveConstants will move them to the optimal place at the end of B3. I will fix the bug title.

&gt; 
&gt; &gt; Source/JavaScriptCore/ChangeLog:19
&gt; &gt; +        When I tried measuring the total effect on JetStream2 I got a tiny and almost certainly non-significant progression.
&gt; 
&gt; Did you measure compile time effect?

I did, and it is also a non-significant progression. I expect it may become significant when combined with https://bugs.webkit.org/show_bug.cgi?id=196578, but I have not yet measured that combination.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1534051</commentid>
    <comment_count>8</comment_count>
    <who name="Robin Morisset">rmorisset</who>
    <bug_when>2019-05-07 12:54:17 -0700</bug_when>
    <thetext>(In reply to Saam Barati from comment #6)
&gt; Comment on attachment 369315 [details]
&gt; Patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=369315&amp;action=review
&gt; 
&gt; &gt; Source/JavaScriptCore/ChangeLog:11
&gt; &gt; +        - We now run eliminateDeadCode just after moveConstants, so that the Nops that moveConstants generates are freed instead of staying live throughout Air compilation.
&gt; 
&gt; what&apos;s the goal here? Lowering memory (I&apos;m assuming yes)? It&apos;s worth stating
&gt; the goal.

Yes, it is to reduce memory pressure. I will clarify it in the Changelog.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1534055</commentid>
    <comment_count>9</comment_count>
      <attachid>369315</attachid>
    <who name="Robin Morisset">rmorisset</who>
    <bug_when>2019-05-07 12:55:48 -0700</bug_when>
    <thetext>Comment on attachment 369315
Patch

&gt;diff --git a/Source/JavaScriptCore/ChangeLog b/Source/JavaScriptCore/ChangeLog
&gt;index da788495030..5eb2f8abe3d 100644
&gt;--- a/Source/JavaScriptCore/ChangeLog
&gt;+++ b/Source/JavaScriptCore/ChangeLog
&gt;@@ -1,3 +1,37 @@
&gt;+2019-05-07  Robin Morisset  &lt;rmorisset@apple.com&gt;
&gt;+
&gt;+        [B3] Constants should be hoisted to the root block until moveConstants
&gt;+        https://bugs.webkit.org/show_bug.cgi?id=197265
&gt;+
&gt;+        Reviewed by NOBODY (OOPS!).
&gt;+
&gt;+        This patch does the following:
&gt;+        - B3ReduceStrength now hoists all constants to the root BB, and de-duplicates them along the way
&gt;+        - B3PureCSE no longer bothers with constants, since they are already de-duplicated by the time it gets to see them
&gt;+        - We now run eliminateDeadCode just after moveConstants, so that the Nops that moveConstants generates are freed instead of staying live throughout Air compilation. This should help memory pressure during Air compilation.
&gt;+        - I also took the opportunity to fix typos in comments in various parts of the code base.
&gt;+
&gt;+        Here are a few numbers to justify this patch:
&gt;+        - In JetStream2, about 27% of values at the beginning of B3 are constants
&gt;+        - In JetStream2, about 11% of values at the end of B3 are Nops
&gt;+        - In JetStream2, this patch increases the number of times that tail duplication happens from a bit less than 24k to a bit more than 25k (hoisting constants makes blocks smaller).
&gt;+
&gt;+        When I tried measuring the total effect on JetStream2 I got a tiny and almost certainly non-significant progression.
&gt;+
&gt;+        * b3/B3Generate.cpp:
&gt;+        (JSC::B3::generateToAir):
&gt;+        * b3/B3MoveConstants.cpp:
&gt;+        * b3/B3PureCSE.cpp:
&gt;+        (JSC::B3::PureCSE::process):
&gt;+        * b3/B3PureCSE.h:
&gt;+        * b3/B3ReduceStrength.cpp:
&gt;+        * bytecode/GetByIdStatus.cpp:
&gt;+        (JSC::GetByIdStatus::computeForStubInfoWithoutExitSiteFeedback):
&gt;+        * dfg/DFGCSEPhase.cpp:
&gt;+        * dfg/DFGOSRAvailabilityAnalysisPhase.h:
&gt;+        * dfg/DFGOSRExit.cpp:
&gt;+        (JSC::DFG::OSRExit::executeOSRExit):
&gt;+
&gt; 2019-05-07  Tadeu Zagallo  &lt;tzagallo@apple.com&gt;
&gt; 
&gt;         tryCachePutByID should not crash if target offset changes
&gt;diff --git a/Source/JavaScriptCore/b3/B3Generate.cpp b/Source/JavaScriptCore/b3/B3Generate.cpp
&gt;index e370e215894..ba2fa08482e 100644
&gt;--- a/Source/JavaScriptCore/b3/B3Generate.cpp
&gt;+++ b/Source/JavaScriptCore/b3/B3Generate.cpp
&gt;@@ -116,6 +116,7 @@ void generateToAir(Procedure&amp; procedure)
&gt;     lowerMacrosAfterOptimizations(procedure);
&gt;     legalizeMemoryOffsets(procedure);
&gt;     moveConstants(procedure);
&gt;+    eliminateDeadCode(procedure);
&gt; 
&gt;     // FIXME: We should run pureCSE here to clean up some platform specific changes from the previous phases.
&gt;     // https://bugs.webkit.org/show_bug.cgi?id=164873
&gt;diff --git a/Source/JavaScriptCore/b3/B3MoveConstants.cpp b/Source/JavaScriptCore/b3/B3MoveConstants.cpp
&gt;index 7acba1e525d..bbd781df40d 100644
&gt;--- a/Source/JavaScriptCore/b3/B3MoveConstants.cpp
&gt;+++ b/Source/JavaScriptCore/b3/B3MoveConstants.cpp
&gt;@@ -154,7 +154,7 @@ private:
&gt;                 };
&gt;                 
&gt;                 // We call this when we have found a constant that we&apos;d like to use. It&apos;s possible that
&gt;-                // we have computed that the constant should be meterialized in this block, but we
&gt;+                // we have computed that the constant should be materialized in this block, but we
&gt;                 // haven&apos;t inserted it yet. This inserts the constant if necessary.
&gt;                 auto materialize = [&amp;] (Value* child) {
&gt;                     ValueKey key = child-&gt;key();
&gt;diff --git a/Source/JavaScriptCore/b3/B3PureCSE.cpp b/Source/JavaScriptCore/b3/B3PureCSE.cpp
&gt;index eb9c46b1740..e4e9ccd3efa 100644
&gt;--- a/Source/JavaScriptCore/b3/B3PureCSE.cpp
&gt;+++ b/Source/JavaScriptCore/b3/B3PureCSE.cpp
&gt;@@ -68,7 +68,7 @@ Value* PureCSE::findMatch(const ValueKey&amp; key, BasicBlock* block, Dominators&amp; do
&gt; 
&gt; bool PureCSE::process(Value* value, Dominators&amp; dominators)
&gt; {
&gt;-    if (value-&gt;opcode() == Identity)
&gt;+    if (value-&gt;opcode() == Identity || value-&gt;isConstant())
&gt;         return false;
&gt; 
&gt;     ValueKey key = value-&gt;key();
&gt;diff --git a/Source/JavaScriptCore/b3/B3PureCSE.h b/Source/JavaScriptCore/b3/B3PureCSE.h
&gt;index d26e4117f15..66857be1617 100644
&gt;--- a/Source/JavaScriptCore/b3/B3PureCSE.h
&gt;+++ b/Source/JavaScriptCore/b3/B3PureCSE.h
&gt;@@ -40,7 +40,7 @@ class Value;
&gt; typedef Vector&lt;Value*, 1&gt; Matches;
&gt; 
&gt; // This is a reusable utility for doing pure CSE. You can use it to do pure CSE on a program by just
&gt;-// proceeding in order an calling process().
&gt;+// proceeding in order and calling process().
&gt; class PureCSE {
&gt; public:
&gt;     PureCSE();
&gt;diff --git a/Source/JavaScriptCore/b3/B3ReduceStrength.cpp b/Source/JavaScriptCore/b3/B3ReduceStrength.cpp
&gt;index 7e22c29d6d4..2f34efdc820 100644
&gt;--- a/Source/JavaScriptCore/b3/B3ReduceStrength.cpp
&gt;+++ b/Source/JavaScriptCore/b3/B3ReduceStrength.cpp
&gt;@@ -402,6 +402,7 @@ public:
&gt;         : m_proc(proc)
&gt;         , m_insertionSet(proc)
&gt;         , m_blockInsertionSet(proc)
&gt;+        , m_root(proc.at(0))
&gt;     {
&gt;     }
&gt; 
&gt;@@ -442,6 +443,7 @@ public:
&gt;             // keep @thing. That&apos;s better, since we usually want things to stay wherever the client
&gt;             // put them. We&apos;re not actually smart enough to move things around at random.
&gt;             m_changed |= eliminateDeadCodeImpl(m_proc);
&gt;+            m_valueForConstant.clear();
&gt;             
&gt;             simplifySSA();
&gt;             
&gt;@@ -2145,7 +2147,29 @@ private:
&gt;             }
&gt;             break;
&gt;         }
&gt;-            
&gt;+
&gt;+        case Const32:
&gt;+        case Const64:
&gt;+        case ConstFloat:
&gt;+        case ConstDouble: {
&gt;+            ValueKey key = m_value-&gt;key();
&gt;+            if (Value* constInRoot = m_valueForConstant.get(key)) {
&gt;+                if (constInRoot != m_value) {
&gt;+                    m_value-&gt;replaceWithIdentity(constInRoot);
&gt;+                    m_changed = true;
&gt;+                }
&gt;+            } else if (m_block == m_root)
&gt;+                m_valueForConstant.add(key, m_value);
&gt;+            else {
&gt;+                Value* constInRoot = m_proc.clone(m_value);
&gt;+                m_root-&gt;appendNonTerminal(constInRoot);
&gt;+                m_valueForConstant.add(key, constInRoot);
&gt;+                m_value-&gt;replaceWithIdentity(constInRoot);
&gt;+                m_changed = true;
&gt;+            }
&gt;+            break;
&gt;+        }
&gt;+
&gt;         default:
&gt;             break;
&gt;         }
&gt;@@ -2794,6 +2818,8 @@ private:
&gt;     Procedure&amp; m_proc;
&gt;     InsertionSet m_insertionSet;
&gt;     BlockInsertionSet m_blockInsertionSet;
&gt;+    HashMap&lt;ValueKey, Value*&gt; m_valueForConstant;
&gt;+    BasicBlock* m_root { nullptr };
&gt;     BasicBlock* m_block { nullptr };
&gt;     unsigned m_index { 0 };
&gt;     Value* m_value { nullptr };
&gt;diff --git a/Source/JavaScriptCore/bytecode/GetByIdStatus.cpp b/Source/JavaScriptCore/bytecode/GetByIdStatus.cpp
&gt;index 26bcd5ff763..6e4e8bfdbe1 100644
&gt;--- a/Source/JavaScriptCore/bytecode/GetByIdStatus.cpp
&gt;+++ b/Source/JavaScriptCore/bytecode/GetByIdStatus.cpp
&gt;@@ -276,7 +276,7 @@ GetByIdStatus GetByIdStatus::computeForStubInfoWithoutExitSiteFeedback(
&gt;                     return GetByIdStatus(JSC::slowVersion(summary));
&gt; 
&gt;                 if (domAttribute) {
&gt;-                    // Give up when cutom accesses are not merged into one.
&gt;+                    // Give up when custom accesses are not merged into one.
&gt;                     if (result.numVariants() != 1)
&gt;                         return GetByIdStatus(JSC::slowVersion(summary));
&gt;                 } else {
&gt;diff --git a/Source/JavaScriptCore/dfg/DFGCSEPhase.cpp b/Source/JavaScriptCore/dfg/DFGCSEPhase.cpp
&gt;index 2ba59463fb1..e89daae4957 100644
&gt;--- a/Source/JavaScriptCore/dfg/DFGCSEPhase.cpp
&gt;+++ b/Source/JavaScriptCore/dfg/DFGCSEPhase.cpp
&gt;@@ -257,7 +257,7 @@ private:
&gt;         });
&gt;     }
&gt; 
&gt;-    // The majority of Impure Stack Slotsare unique per value.
&gt;+    // The majority of Impure Stack Slots are unique per value.
&gt;     // This is very useful for fast clobber(), we can just remove the slot addressed by AbstractHeap
&gt;     // in O(1).
&gt;     //
&gt;diff --git a/Source/JavaScriptCore/dfg/DFGOSRAvailabilityAnalysisPhase.h b/Source/JavaScriptCore/dfg/DFGOSRAvailabilityAnalysisPhase.h
&gt;index 14de94da1d8..69e8b7550c8 100644
&gt;--- a/Source/JavaScriptCore/dfg/DFGOSRAvailabilityAnalysisPhase.h
&gt;+++ b/Source/JavaScriptCore/dfg/DFGOSRAvailabilityAnalysisPhase.h
&gt;@@ -33,7 +33,7 @@ namespace JSC { namespace DFG {
&gt; 
&gt; class Graph;
&gt; 
&gt;-// Computes BasicBlock::ssa-&gt;availabiltiyAtHead/Tail. This is a forward flow type inference
&gt;+// Computes BasicBlock::ssa-&gt;availabilityAtHead/Tail. This is a forward flow type inference
&gt; // over MovHints and SetLocals. This analysis is run directly by the Plan for preparing for
&gt; // lowering to B3 IR, but it can also be used as a utility. Note that if you run it before
&gt; // stack layout, all of the flush availability will omit the virtual register - but it will
&gt;diff --git a/Source/JavaScriptCore/dfg/DFGOSRExit.cpp b/Source/JavaScriptCore/dfg/DFGOSRExit.cpp
&gt;index e185a100f20..09b30ba3cfc 100644
&gt;--- a/Source/JavaScriptCore/dfg/DFGOSRExit.cpp
&gt;+++ b/Source/JavaScriptCore/dfg/DFGOSRExit.cpp
&gt;@@ -452,7 +452,7 @@ void OSRExit::executeOSRExit(Context&amp; context)
&gt; 
&gt;     context.sp() = context.fp&lt;uint8_t*&gt;() + exitState.stackPointerOffset;
&gt; 
&gt;-    // The only reason for using this do while look is so we can break out midway when appropriate.
&gt;+    // The only reason for using this do while loop is so we can break out midway when appropriate.
&gt;     do {
&gt;         auto extraInitializationLevel = static_cast&lt;ExtraInitializationLevel&gt;(exitState.extraInitializationLevel);
&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1534056</commentid>
    <comment_count>10</comment_count>
    <who name="Robin Morisset">rmorisset</who>
    <bug_when>2019-05-07 12:56:51 -0700</bug_when>
    <thetext>(In reply to Robin Morisset from comment #9)
Oops, I thought that option let me modify the patch in the browser, instead it dumped it as a comment. Sorry for the spam.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1534069</commentid>
    <comment_count>11</comment_count>
      <attachid>369319</attachid>
    <who name="Robin Morisset">rmorisset</who>
    <bug_when>2019-05-07 13:02:36 -0700</bug_when>
    <thetext>Created attachment 369319
Patch for landing

Just tweaked the Changelog.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1534120</commentid>
    <comment_count>12</comment_count>
      <attachid>369319</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2019-05-07 14:28:45 -0700</bug_when>
    <thetext>Comment on attachment 369319
Patch for landing

Clearing flags on attachment: 369319

Committed r245035: &lt;https://trac.webkit.org/changeset/245035&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1534121</commentid>
    <comment_count>13</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2019-05-07 14:28:46 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1534122</commentid>
    <comment_count>14</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2019-05-07 14:29:29 -0700</bug_when>
    <thetext>&lt;rdar://problem/50555637&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>368522</attachid>
            <date>2019-04-29 17:42:50 -0700</date>
            <delta_ts>2019-05-07 12:38:47 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>patch197265</filename>
            <type>text/plain</type>
            <size>9531</size>
            <attacher name="Robin Morisset">rmorisset</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvQ2hhbmdlTG9nCmluZGV4IDI4YWVjYTQ2MGNhLi43NjQ2OTViNzVlZiAxMDA2
NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMzcgQEAKKzIwMTktMDQtMjkgIFJvYmlu
IE1vcmlzc2V0ICA8cm1vcmlzc2V0QGFwcGxlLmNvbT4KKworICAgICAgICBbQjNdIENvbnN0YW50
cyBzaG91bGQgYmUgaG9pc3RlZCB0byB0aGUgcm9vdCBibG9jaworICAgICAgICBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTk3MjY1CisKKyAgICAgICAgUmV2aWV3ZWQg
YnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVGhpcyBwYXRjaCBkb2VzIHRoZSBmb2xsb3dp
bmc6CisgICAgICAgIC0gQjNSZWR1Y2VTdHJlbmd0aCBub3cgaG9pc3RzIGFsbCBjb25zdGFudHMg
dG8gdGhlIHJvb3QgQkIsIGFuZCBkZS1kdXBsaWNhdGVzIHRoZW0gYWxvbmcgdGhlIHdheQorICAg
ICAgICAtIEIzUHVyZUNTRSBubyBsb25nZXIgYm90aGVycyB3aXRoIGNvbnN0YW50cywgc2luY2Ug
dGhleSBhcmUgYWxyZWFkeSBkZS1kdXBsaWNhdGVkIGJ5IHRoZSB0aW1lIGl0IGdldHMgdG8gc2Vl
IHRoZW0KKyAgICAgICAgLSBXZSBub3cgcnVuIGVsaW1pbmF0ZURlYWRDb2RlIGp1c3QgYWZ0ZXIg
bW92ZUNvbnN0YW50cywgc28gdGhhdCB0aGUgTm9wcyB0aGF0IG1vdmVDb25zdGFudHMgZ2VuZXJh
dGVzIGFyZSBmcmVlZCBpbnN0ZWFkIG9mIHN0YXlpbmcgbGl2ZSB0aHJvdWdob3V0IEFpciBjb21w
aWxhdGlvbi4KKyAgICAgICAgLSBJIGFsc28gdG9vayB0aGUgb3Bwb3J0dW5pdHkgdG8gZml4IHR5
cG9zIGluIGNvbW1lbnRzIGluIHZhcmlvdXMgcGFydHMgb2YgdGhlIGNvZGUgYmFzZS4KKworICAg
ICAgICBIZXJlIGFyZSBhIGZldyBudW1iZXJzIHRvIGp1c3RpZnkgdGhpcyBwYXRjaDoKKyAgICAg
ICAgLSBJbiBKZXRTdHJlYW0yLCBhYm91dCAyNyUgb2YgdmFsdWVzIGF0IHRoZSBiZWdpbm5pbmcg
b2YgQjMgYXJlIGNvbnN0YW50cworICAgICAgICAtIEluIEpldFN0cmVhbTIsIGFib3V0IDExJSBv
ZiB2YWx1ZXMgYXQgdGhlIGVuZCBvZiBCMyBhcmUgTm9wcworICAgICAgICAtIEluIEpldFN0cmVh
bTIsIHRoaXMgcGF0Y2ggaW5jcmVhc2VzIHRoZSBudW1iZXIgb2YgdGltZXMgdGhhdCB0YWlsIGR1
cGxpY2F0aW9uIGhhcHBlbnMgZnJvbSBhIGJpdCBsZXNzIHRoYW4gMjRrIHRvIGEgYml0IG1vcmUg
dGhhbiAyNWsgKGhvaXN0aW5nIGNvbnN0YW50cyBtYWtlIGJsb2NrcyBzbWFsbGVyKS4KKworICAg
ICAgICBXaGVuIEkgdHJpZWQgbWVhc3VyaW5nIHRoZSB0b3RhbCBlZmZlY3Qgb24gSmV0U3RyZWFt
MiBJIGdvdCBhIHRpbnkgYW5kIGFsbW9zdCBjZXJ0YWlubHkgbm9uLXNpZ25pZmljYW50IHByb2dy
ZXNzaW9uLgorCisgICAgICAgICogYjMvQjNHZW5lcmF0ZS5jcHA6CisgICAgICAgIChKU0M6OkIz
OjpnZW5lcmF0ZVRvQWlyKToKKyAgICAgICAgKiBiMy9CM01vdmVDb25zdGFudHMuY3BwOgorICAg
ICAgICAqIGIzL0IzUHVyZUNTRS5jcHA6CisgICAgICAgIChKU0M6OkIzOjpQdXJlQ1NFOjpwcm9j
ZXNzKToKKyAgICAgICAgKiBiMy9CM1B1cmVDU0UuaDoKKyAgICAgICAgKiBiMy9CM1JlZHVjZVN0
cmVuZ3RoLmNwcDoKKyAgICAgICAgKiBieXRlY29kZS9HZXRCeUlkU3RhdHVzLmNwcDoKKyAgICAg
ICAgKEpTQzo6R2V0QnlJZFN0YXR1czo6Y29tcHV0ZUZvclN0dWJJbmZvV2l0aG91dEV4aXRTaXRl
RmVlZGJhY2spOgorICAgICAgICAqIGRmZy9ERkdDU0VQaGFzZS5jcHA6CisgICAgICAgICogZGZn
L0RGR09TUkF2YWlsYWJpbGl0eUFuYWx5c2lzUGhhc2UuaDoKKyAgICAgICAgKiBkZmcvREZHT1NS
RXhpdC5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6T1NSRXhpdDo6ZXhlY3V0ZU9TUkV4aXQpOgor
CiAyMDE5LTA0LTI2ICBLZWl0aCBSb2xsaW4gIDxrcm9sbGluQGFwcGxlLmNvbT4KIAogICAgICAg
ICBFbmFibGUgbmV3IGJ1aWxkIHJ1bGUgZm9yIHBvc3QtcHJvY2Vzc2luZyBoZWFkZXJzIHdoZW4g
dXNpbmcgWENCdWlsZApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzR2Vu
ZXJhdGUuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzR2VuZXJhdGUuY3BwCmluZGV4
IGUzNzBlMjE1ODk0Li5iYTJmYTA4NDgyZSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL2IzL0IzR2VuZXJhdGUuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0dl
bmVyYXRlLmNwcApAQCAtMTE2LDYgKzExNiw3IEBAIHZvaWQgZ2VuZXJhdGVUb0FpcihQcm9jZWR1
cmUmIHByb2NlZHVyZSkKICAgICBsb3dlck1hY3Jvc0FmdGVyT3B0aW1pemF0aW9ucyhwcm9jZWR1
cmUpOwogICAgIGxlZ2FsaXplTWVtb3J5T2Zmc2V0cyhwcm9jZWR1cmUpOwogICAgIG1vdmVDb25z
dGFudHMocHJvY2VkdXJlKTsKKyAgICBlbGltaW5hdGVEZWFkQ29kZShwcm9jZWR1cmUpOwogCiAg
ICAgLy8gRklYTUU6IFdlIHNob3VsZCBydW4gcHVyZUNTRSBoZXJlIHRvIGNsZWFuIHVwIHNvbWUg
cGxhdGZvcm0gc3BlY2lmaWMgY2hhbmdlcyBmcm9tIHRoZSBwcmV2aW91cyBwaGFzZXMuCiAgICAg
Ly8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE2NDg3MwpkaWZmIC0t
Z2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzTW92ZUNvbnN0YW50cy5jcHAgYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYjMvQjNNb3ZlQ29uc3RhbnRzLmNwcAppbmRleCA3YWNiYTFlNTI1
ZC4uYmJkNzgxZGY0MGQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM01v
dmVDb25zdGFudHMuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM01vdmVDb25z
dGFudHMuY3BwCkBAIC0xNTQsNyArMTU0LDcgQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICB9
OwogICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgIC8vIFdlIGNhbGwgdGhpcyB3aGVu
IHdlIGhhdmUgZm91bmQgYSBjb25zdGFudCB0aGF0IHdlJ2QgbGlrZSB0byB1c2UuIEl0J3MgcG9z
c2libGUgdGhhdAotICAgICAgICAgICAgICAgIC8vIHdlIGhhdmUgY29tcHV0ZWQgdGhhdCB0aGUg
Y29uc3RhbnQgc2hvdWxkIGJlIG1ldGVyaWFsaXplZCBpbiB0aGlzIGJsb2NrLCBidXQgd2UKKyAg
ICAgICAgICAgICAgICAvLyB3ZSBoYXZlIGNvbXB1dGVkIHRoYXQgdGhlIGNvbnN0YW50IHNob3Vs
ZCBiZSBtYXRlcmlhbGl6ZWQgaW4gdGhpcyBibG9jaywgYnV0IHdlCiAgICAgICAgICAgICAgICAg
Ly8gaGF2ZW4ndCBpbnNlcnRlZCBpdCB5ZXQuIFRoaXMgaW5zZXJ0cyB0aGUgY29uc3RhbnQgaWYg
bmVjZXNzYXJ5LgogICAgICAgICAgICAgICAgIGF1dG8gbWF0ZXJpYWxpemUgPSBbJl0gKFZhbHVl
KiBjaGlsZCkgewogICAgICAgICAgICAgICAgICAgICBWYWx1ZUtleSBrZXkgPSBjaGlsZC0+a2V5
KCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNQdXJlQ1NFLmNwcCBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1B1cmVDU0UuY3BwCmluZGV4IGViOWM0NmIxNzQw
Li5lNGU5Y2NkM2VmYSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzUHVy
ZUNTRS5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzUHVyZUNTRS5jcHAKQEAg
LTY4LDcgKzY4LDcgQEAgVmFsdWUqIFB1cmVDU0U6OmZpbmRNYXRjaChjb25zdCBWYWx1ZUtleSYg
a2V5LCBCYXNpY0Jsb2NrKiBibG9jaywgRG9taW5hdG9ycyYgZG8KIAogYm9vbCBQdXJlQ1NFOjpw
cm9jZXNzKFZhbHVlKiB2YWx1ZSwgRG9taW5hdG9ycyYgZG9taW5hdG9ycykKIHsKLSAgICBpZiAo
dmFsdWUtPm9wY29kZSgpID09IElkZW50aXR5KQorICAgIGlmICh2YWx1ZS0+b3Bjb2RlKCkgPT0g
SWRlbnRpdHkgfHwgdmFsdWUtPmlzQ29uc3RhbnQoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwog
CiAgICAgVmFsdWVLZXkga2V5ID0gdmFsdWUtPmtleSgpOwpkaWZmIC0tZ2l0IGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2IzL0IzUHVyZUNTRS5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0Iz
UHVyZUNTRS5oCmluZGV4IGQyNmU0MTE3ZjE1Li42Njg1N2JlMTYxNyAxMDA2NDQKLS0tIGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzUHVyZUNTRS5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9iMy9CM1B1cmVDU0UuaApAQCAtNDAsNyArNDAsNyBAQCBjbGFzcyBWYWx1ZTsKIHR5cGVk
ZWYgVmVjdG9yPFZhbHVlKiwgMT4gTWF0Y2hlczsKIAogLy8gVGhpcyBpcyBhIHJldXNhYmxlIHV0
aWxpdHkgZm9yIGRvaW5nIHB1cmUgQ1NFLiBZb3UgY2FuIHVzZSBpdCB0byBkbyBwdXJlIENTRSBv
biBhIHByb2dyYW0gYnkganVzdAotLy8gcHJvY2VlZGluZyBpbiBvcmRlciBhbiBjYWxsaW5nIHBy
b2Nlc3MoKS4KKy8vIHByb2NlZWRpbmcgaW4gb3JkZXIgYW5kIGNhbGxpbmcgcHJvY2VzcygpLgog
Y2xhc3MgUHVyZUNTRSB7CiBwdWJsaWM6CiAgICAgUHVyZUNTRSgpOwpkaWZmIC0tZ2l0IGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzUmVkdWNlU3RyZW5ndGguY3BwIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2IzL0IzUmVkdWNlU3RyZW5ndGguY3BwCmluZGV4IDdlMjJjMjlkNmQ0Li4yYjc5
NDBkYTIwYyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzUmVkdWNlU3Ry
ZW5ndGguY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1JlZHVjZVN0cmVuZ3Ro
LmNwcApAQCAtNDAyLDYgKzQwMiw3IEBAIHB1YmxpYzoKICAgICAgICAgOiBtX3Byb2MocHJvYykK
ICAgICAgICAgLCBtX2luc2VydGlvblNldChwcm9jKQogICAgICAgICAsIG1fYmxvY2tJbnNlcnRp
b25TZXQocHJvYykKKyAgICAgICAgLCBtX3Jvb3QocHJvYy5hdCgwKSkKICAgICB7CiAgICAgfQog
CkBAIC00NDIsNiArNDQzLDcgQEAgcHVibGljOgogICAgICAgICAgICAgLy8ga2VlcCBAdGhpbmcu
IFRoYXQncyBiZXR0ZXIsIHNpbmNlIHdlIHVzdWFsbHkgd2FudCB0aGluZ3MgdG8gc3RheSB3aGVy
ZXZlciB0aGUgY2xpZW50CiAgICAgICAgICAgICAvLyBwdXQgdGhlbS4gV2UncmUgbm90IGFjdHVh
bGx5IHNtYXJ0IGVub3VnaCB0byBtb3ZlIHRoaW5ncyBhcm91bmQgYXQgcmFuZG9tLgogICAgICAg
ICAgICAgbV9jaGFuZ2VkIHw9IGVsaW1pbmF0ZURlYWRDb2RlSW1wbChtX3Byb2MpOworICAgICAg
ICAgICAgbV92YWx1ZUZvckNvbnN0YW50LmNsZWFyKCk7CiAgICAgICAgICAgICAKICAgICAgICAg
ICAgIHNpbXBsaWZ5U1NBKCk7CiAgICAgICAgICAgICAKQEAgLTIxNDUsNyArMjE0NywyOSBAQCBw
cml2YXRlOgogICAgICAgICAgICAgfQogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KLSAg
ICAgICAgICAgIAorCisgICAgICAgIGNhc2UgQ29uc3QzMjoKKyAgICAgICAgY2FzZSBDb25zdDY0
OgorICAgICAgICBjYXNlIENvbnN0RmxvYXQ6CisgICAgICAgIGNhc2UgQ29uc3REb3VibGU6IHsK
KyAgICAgICAgICAgIFZhbHVlS2V5IGtleSA9IG1fdmFsdWUtPmtleSgpOworICAgICAgICAgICAg
aWYgKFZhbHVlKiBjb25zdEluUm9vdCA9IG1fdmFsdWVGb3JDb25zdGFudC5nZXQoa2V5KSkgewor
ICAgICAgICAgICAgICAgIGlmIChjb25zdEluUm9vdCAhPSBtX3ZhbHVlKSB7CisgICAgICAgICAg
ICAgICAgICAgIG1fdmFsdWUtPnJlcGxhY2VXaXRoSWRlbnRpdHkoY29uc3RJblJvb3QpOworICAg
ICAgICAgICAgICAgICAgICBtX2NoYW5nZWQgPSB0cnVlOworICAgICAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgIH0gZWxzZSBpZiAobV9ibG9jayA9PSBtX3Jvb3QpIHsKKyAgICAgICAgICAgICAg
ICBtX3ZhbHVlRm9yQ29uc3RhbnQuYWRkKGtleSwgbV92YWx1ZSk7CisgICAgICAgICAgICB9IGVs
c2UgeworICAgICAgICAgICAgICAgIFZhbHVlKiBjb25zdEluUm9vdCA9IG1fcHJvYy5jbG9uZSht
X3ZhbHVlKTsKKyAgICAgICAgICAgICAgICBtX3Jvb3QtPmFwcGVuZE5vblRlcm1pbmFsKGNvbnN0
SW5Sb290KTsKKyAgICAgICAgICAgICAgICBtX3ZhbHVlRm9yQ29uc3RhbnQuYWRkKGtleSwgY29u
c3RJblJvb3QpOworICAgICAgICAgICAgICAgIG1fdmFsdWUtPnJlcGxhY2VXaXRoSWRlbnRpdHko
Y29uc3RJblJvb3QpOworICAgICAgICAgICAgICAgIG1fY2hhbmdlZCA9IHRydWU7CisgICAgICAg
ICAgICB9CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorCiAgICAgICAgIGRlZmF1bHQ6
CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQpAQCAtMjc5NCw2ICsyODE4LDggQEAgcHJp
dmF0ZToKICAgICBQcm9jZWR1cmUmIG1fcHJvYzsKICAgICBJbnNlcnRpb25TZXQgbV9pbnNlcnRp
b25TZXQ7CiAgICAgQmxvY2tJbnNlcnRpb25TZXQgbV9ibG9ja0luc2VydGlvblNldDsKKyAgICBI
YXNoTWFwPFZhbHVlS2V5LCBWYWx1ZSo+IG1fdmFsdWVGb3JDb25zdGFudDsKKyAgICBCYXNpY0Js
b2NrKiBtX3Jvb3QgeyBudWxscHRyIH07CiAgICAgQmFzaWNCbG9jayogbV9ibG9jayB7IG51bGxw
dHIgfTsKICAgICB1bnNpZ25lZCBtX2luZGV4IHsgMCB9OwogICAgIFZhbHVlKiBtX3ZhbHVlIHsg
bnVsbHB0ciB9OwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0dl
dEJ5SWRTdGF0dXMuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0dldEJ5SWRT
dGF0dXMuY3BwCmluZGV4IDI2YmNkNWZmNzYzLi42ZTRlOGJmZGJlMSAxMDA2NDQKLS0tIGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0dldEJ5SWRTdGF0dXMuY3BwCisrKyBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9HZXRCeUlkU3RhdHVzLmNwcApAQCAtMjc2LDcgKzI3
Niw3IEBAIEdldEJ5SWRTdGF0dXMgR2V0QnlJZFN0YXR1czo6Y29tcHV0ZUZvclN0dWJJbmZvV2l0
aG91dEV4aXRTaXRlRmVlZGJhY2soCiAgICAgICAgICAgICAgICAgICAgIHJldHVybiBHZXRCeUlk
U3RhdHVzKEpTQzo6c2xvd1ZlcnNpb24oc3VtbWFyeSkpOwogCiAgICAgICAgICAgICAgICAgaWYg
KGRvbUF0dHJpYnV0ZSkgewotICAgICAgICAgICAgICAgICAgICAvLyBHaXZlIHVwIHdoZW4gY3V0
b20gYWNjZXNzZXMgYXJlIG5vdCBtZXJnZWQgaW50byBvbmUuCisgICAgICAgICAgICAgICAgICAg
IC8vIEdpdmUgdXAgd2hlbiBjdXN0b20gYWNjZXNzZXMgYXJlIG5vdCBtZXJnZWQgaW50byBvbmUu
CiAgICAgICAgICAgICAgICAgICAgIGlmIChyZXN1bHQubnVtVmFyaWFudHMoKSAhPSAxKQogICAg
ICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEdldEJ5SWRTdGF0dXMoSlNDOjpzbG93VmVyc2lv
bihzdW1tYXJ5KSk7CiAgICAgICAgICAgICAgICAgfSBlbHNlIHsKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ1NFUGhhc2UuY3BwIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdDU0VQaGFzZS5jcHAKaW5kZXggMmJhNTk0NjNmYjEuLmU4OWRhYWU0OTU3IDEw
MDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NTRVBoYXNlLmNwcAorKysg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NTRVBoYXNlLmNwcApAQCAtMjU3LDcgKzI1
Nyw3IEBAIHByaXZhdGU6CiAgICAgICAgIH0pOwogICAgIH0KIAotICAgIC8vIFRoZSBtYWpvcml0
eSBvZiBJbXB1cmUgU3RhY2sgU2xvdHNhcmUgdW5pcXVlIHBlciB2YWx1ZS4KKyAgICAvLyBUaGUg
bWFqb3JpdHkgb2YgSW1wdXJlIFN0YWNrIFNsb3RzIGFyZSB1bmlxdWUgcGVyIHZhbHVlLgogICAg
IC8vIFRoaXMgaXMgdmVyeSB1c2VmdWwgZm9yIGZhc3QgY2xvYmJlcigpLCB3ZSBjYW4ganVzdCBy
ZW1vdmUgdGhlIHNsb3QgYWRkcmVzc2VkIGJ5IEFic3RyYWN0SGVhcAogICAgIC8vIGluIE8oMSku
CiAgICAgLy8KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSQXZh
aWxhYmlsaXR5QW5hbHlzaXNQaGFzZS5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdP
U1JBdmFpbGFiaWxpdHlBbmFseXNpc1BoYXNlLmgKaW5kZXggMTRkZTk0ZGExZDguLjY5ZThiNzU1
MGM4IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkF2YWlsYWJp
bGl0eUFuYWx5c2lzUGhhc2UuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09T
UkF2YWlsYWJpbGl0eUFuYWx5c2lzUGhhc2UuaApAQCAtMzMsNyArMzMsNyBAQCBuYW1lc3BhY2Ug
SlNDIHsgbmFtZXNwYWNlIERGRyB7CiAKIGNsYXNzIEdyYXBoOwogCi0vLyBDb21wdXRlcyBCYXNp
Y0Jsb2NrOjpzc2EtPmF2YWlsYWJpbHRpeUF0SGVhZC9UYWlsLiBUaGlzIGlzIGEgZm9yd2FyZCBm
bG93IHR5cGUgaW5mZXJlbmNlCisvLyBDb21wdXRlcyBCYXNpY0Jsb2NrOjpzc2EtPmF2YWlsYWJp
bGl0eUF0SGVhZC9UYWlsLiBUaGlzIGlzIGEgZm9yd2FyZCBmbG93IHR5cGUgaW5mZXJlbmNlCiAv
LyBvdmVyIE1vdkhpbnRzIGFuZCBTZXRMb2NhbHMuIFRoaXMgYW5hbHlzaXMgaXMgcnVuIGRpcmVj
dGx5IGJ5IHRoZSBQbGFuIGZvciBwcmVwYXJpbmcgZm9yCiAvLyBsb3dlcmluZyB0byBCMyBJUiwg
YnV0IGl0IGNhbiBhbHNvIGJlIHVzZWQgYXMgYSB1dGlsaXR5LiBOb3RlIHRoYXQgaWYgeW91IHJ1
biBpdCBiZWZvcmUKIC8vIHN0YWNrIGxheW91dCwgYWxsIG9mIHRoZSBmbHVzaCBhdmFpbGFiaWxp
dHkgd2lsbCBvbWl0IHRoZSB2aXJ0dWFsIHJlZ2lzdGVyIC0gYnV0IGl0IHdpbGwKZGlmZiAtLWdp
dCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSRXhpdC5jcHAgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR09TUkV4aXQuY3BwCmluZGV4IGYxZGI1ZGNlOTkwLi45ODgwNjU4
ZGRjNSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JFeGl0LmNw
cAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkV4aXQuY3BwCkBAIC00NTIs
NyArNDUyLDcgQEAgdm9pZCBPU1JFeGl0OjpleGVjdXRlT1NSRXhpdChDb250ZXh0JiBjb250ZXh0
KQogCiAgICAgY29udGV4dC5zcCgpID0gY29udGV4dC5mcDx1aW50OF90Kj4oKSArIGV4aXRTdGF0
ZS5zdGFja1BvaW50ZXJPZmZzZXQ7CiAKLSAgICAvLyBUaGUgb25seSByZWFzb24gZm9yIHVzaW5n
IHRoaXMgZG8gd2hpbGUgbG9vayBpcyBzbyB3ZSBjYW4gYnJlYWsgb3V0IG1pZHdheSB3aGVuIGFw
cHJvcHJpYXRlLgorICAgIC8vIFRoZSBvbmx5IHJlYXNvbiBmb3IgdXNpbmcgdGhpcyBkbyB3aGls
ZSBsb29wIGlzIHNvIHdlIGNhbiBicmVhayBvdXQgbWlkd2F5IHdoZW4gYXBwcm9wcmlhdGUuCiAg
ICAgZG8gewogICAgICAgICBhdXRvIGV4dHJhSW5pdGlhbGl6YXRpb25MZXZlbCA9IHN0YXRpY19j
YXN0PEV4dHJhSW5pdGlhbGl6YXRpb25MZXZlbD4oZXhpdFN0YXRlLmV4dHJhSW5pdGlhbGl6YXRp
b25MZXZlbCk7CiAK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>369315</attachid>
            <date>2019-05-07 12:38:47 -0700</date>
            <delta_ts>2019-05-07 13:02:36 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>patch197265</filename>
            <type>text/plain</type>
            <size>9519</size>
            <attacher name="Robin Morisset">rmorisset</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvQ2hhbmdlTG9nCmluZGV4IGRhNzg4NDk1MDMwLi41ZWIyZjhhYmUzZCAxMDA2
NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMzcgQEAKKzIwMTktMDUtMDcgIFJvYmlu
IE1vcmlzc2V0ICA8cm1vcmlzc2V0QGFwcGxlLmNvbT4KKworICAgICAgICBbQjNdIENvbnN0YW50
cyBzaG91bGQgYmUgaG9pc3RlZCB0byB0aGUgcm9vdCBibG9jaworICAgICAgICBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTk3MjY1CisKKyAgICAgICAgUmV2aWV3ZWQg
YnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVGhpcyBwYXRjaCBkb2VzIHRoZSBmb2xsb3dp
bmc6CisgICAgICAgIC0gQjNSZWR1Y2VTdHJlbmd0aCBub3cgaG9pc3RzIGFsbCBjb25zdGFudHMg
dG8gdGhlIHJvb3QgQkIsIGFuZCBkZS1kdXBsaWNhdGVzIHRoZW0gYWxvbmcgdGhlIHdheQorICAg
ICAgICAtIEIzUHVyZUNTRSBubyBsb25nZXIgYm90aGVycyB3aXRoIGNvbnN0YW50cywgc2luY2Ug
dGhleSBhcmUgYWxyZWFkeSBkZS1kdXBsaWNhdGVkIGJ5IHRoZSB0aW1lIGl0IGdldHMgdG8gc2Vl
IHRoZW0KKyAgICAgICAgLSBXZSBub3cgcnVuIGVsaW1pbmF0ZURlYWRDb2RlIGp1c3QgYWZ0ZXIg
bW92ZUNvbnN0YW50cywgc28gdGhhdCB0aGUgTm9wcyB0aGF0IG1vdmVDb25zdGFudHMgZ2VuZXJh
dGVzIGFyZSBmcmVlZCBpbnN0ZWFkIG9mIHN0YXlpbmcgbGl2ZSB0aHJvdWdob3V0IEFpciBjb21w
aWxhdGlvbi4KKyAgICAgICAgLSBJIGFsc28gdG9vayB0aGUgb3Bwb3J0dW5pdHkgdG8gZml4IHR5
cG9zIGluIGNvbW1lbnRzIGluIHZhcmlvdXMgcGFydHMgb2YgdGhlIGNvZGUgYmFzZS4KKworICAg
ICAgICBIZXJlIGFyZSBhIGZldyBudW1iZXJzIHRvIGp1c3RpZnkgdGhpcyBwYXRjaDoKKyAgICAg
ICAgLSBJbiBKZXRTdHJlYW0yLCBhYm91dCAyNyUgb2YgdmFsdWVzIGF0IHRoZSBiZWdpbm5pbmcg
b2YgQjMgYXJlIGNvbnN0YW50cworICAgICAgICAtIEluIEpldFN0cmVhbTIsIGFib3V0IDExJSBv
ZiB2YWx1ZXMgYXQgdGhlIGVuZCBvZiBCMyBhcmUgTm9wcworICAgICAgICAtIEluIEpldFN0cmVh
bTIsIHRoaXMgcGF0Y2ggaW5jcmVhc2VzIHRoZSBudW1iZXIgb2YgdGltZXMgdGhhdCB0YWlsIGR1
cGxpY2F0aW9uIGhhcHBlbnMgZnJvbSBhIGJpdCBsZXNzIHRoYW4gMjRrIHRvIGEgYml0IG1vcmUg
dGhhbiAyNWsgKGhvaXN0aW5nIGNvbnN0YW50cyBtYWtlcyBibG9ja3Mgc21hbGxlcikuCisKKyAg
ICAgICAgV2hlbiBJIHRyaWVkIG1lYXN1cmluZyB0aGUgdG90YWwgZWZmZWN0IG9uIEpldFN0cmVh
bTIgSSBnb3QgYSB0aW55IGFuZCBhbG1vc3QgY2VydGFpbmx5IG5vbi1zaWduaWZpY2FudCBwcm9n
cmVzc2lvbi4KKworICAgICAgICAqIGIzL0IzR2VuZXJhdGUuY3BwOgorICAgICAgICAoSlNDOjpC
Mzo6Z2VuZXJhdGVUb0Fpcik6CisgICAgICAgICogYjMvQjNNb3ZlQ29uc3RhbnRzLmNwcDoKKyAg
ICAgICAgKiBiMy9CM1B1cmVDU0UuY3BwOgorICAgICAgICAoSlNDOjpCMzo6UHVyZUNTRTo6cHJv
Y2Vzcyk6CisgICAgICAgICogYjMvQjNQdXJlQ1NFLmg6CisgICAgICAgICogYjMvQjNSZWR1Y2VT
dHJlbmd0aC5jcHA6CisgICAgICAgICogYnl0ZWNvZGUvR2V0QnlJZFN0YXR1cy5jcHA6CisgICAg
ICAgIChKU0M6OkdldEJ5SWRTdGF0dXM6OmNvbXB1dGVGb3JTdHViSW5mb1dpdGhvdXRFeGl0U2l0
ZUZlZWRiYWNrKToKKyAgICAgICAgKiBkZmcvREZHQ1NFUGhhc2UuY3BwOgorICAgICAgICAqIGRm
Zy9ERkdPU1JBdmFpbGFiaWxpdHlBbmFseXNpc1BoYXNlLmg6CisgICAgICAgICogZGZnL0RGR09T
UkV4aXQuY3BwOgorICAgICAgICAoSlNDOjpERkc6Ok9TUkV4aXQ6OmV4ZWN1dGVPU1JFeGl0KToK
KwogMjAxOS0wNS0wNyAgVGFkZXUgWmFnYWxsbyAgPHR6YWdhbGxvQGFwcGxlLmNvbT4KIAogICAg
ICAgICB0cnlDYWNoZVB1dEJ5SUQgc2hvdWxkIG5vdCBjcmFzaCBpZiB0YXJnZXQgb2Zmc2V0IGNo
YW5nZXMKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0dlbmVyYXRlLmNw
cCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0dlbmVyYXRlLmNwcAppbmRleCBlMzcwZTIx
NTg5NC4uYmEyZmEwODQ4MmUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9C
M0dlbmVyYXRlLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNHZW5lcmF0ZS5j
cHAKQEAgLTExNiw2ICsxMTYsNyBAQCB2b2lkIGdlbmVyYXRlVG9BaXIoUHJvY2VkdXJlJiBwcm9j
ZWR1cmUpCiAgICAgbG93ZXJNYWNyb3NBZnRlck9wdGltaXphdGlvbnMocHJvY2VkdXJlKTsKICAg
ICBsZWdhbGl6ZU1lbW9yeU9mZnNldHMocHJvY2VkdXJlKTsKICAgICBtb3ZlQ29uc3RhbnRzKHBy
b2NlZHVyZSk7CisgICAgZWxpbWluYXRlRGVhZENvZGUocHJvY2VkdXJlKTsKIAogICAgIC8vIEZJ
WE1FOiBXZSBzaG91bGQgcnVuIHB1cmVDU0UgaGVyZSB0byBjbGVhbiB1cCBzb21lIHBsYXRmb3Jt
IHNwZWNpZmljIGNoYW5nZXMgZnJvbSB0aGUgcHJldmlvdXMgcGhhc2VzLgogICAgIC8vIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNjQ4NzMKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM01vdmVDb25zdGFudHMuY3BwIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2IzL0IzTW92ZUNvbnN0YW50cy5jcHAKaW5kZXggN2FjYmExZTUyNWQuLmJiZDc4
MWRmNDBkIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNNb3ZlQ29uc3Rh
bnRzLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNNb3ZlQ29uc3RhbnRzLmNw
cApAQCAtMTU0LDcgKzE1NCw3IEBAIHByaXZhdGU6CiAgICAgICAgICAgICAgICAgfTsKICAgICAg
ICAgICAgICAgICAKICAgICAgICAgICAgICAgICAvLyBXZSBjYWxsIHRoaXMgd2hlbiB3ZSBoYXZl
IGZvdW5kIGEgY29uc3RhbnQgdGhhdCB3ZSdkIGxpa2UgdG8gdXNlLiBJdCdzIHBvc3NpYmxlIHRo
YXQKLSAgICAgICAgICAgICAgICAvLyB3ZSBoYXZlIGNvbXB1dGVkIHRoYXQgdGhlIGNvbnN0YW50
IHNob3VsZCBiZSBtZXRlcmlhbGl6ZWQgaW4gdGhpcyBibG9jaywgYnV0IHdlCisgICAgICAgICAg
ICAgICAgLy8gd2UgaGF2ZSBjb21wdXRlZCB0aGF0IHRoZSBjb25zdGFudCBzaG91bGQgYmUgbWF0
ZXJpYWxpemVkIGluIHRoaXMgYmxvY2ssIGJ1dCB3ZQogICAgICAgICAgICAgICAgIC8vIGhhdmVu
J3QgaW5zZXJ0ZWQgaXQgeWV0LiBUaGlzIGluc2VydHMgdGhlIGNvbnN0YW50IGlmIG5lY2Vzc2Fy
eS4KICAgICAgICAgICAgICAgICBhdXRvIG1hdGVyaWFsaXplID0gWyZdIChWYWx1ZSogY2hpbGQp
IHsKICAgICAgICAgICAgICAgICAgICAgVmFsdWVLZXkga2V5ID0gY2hpbGQtPmtleSgpOwpkaWZm
IC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzUHVyZUNTRS5jcHAgYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYjMvQjNQdXJlQ1NFLmNwcAppbmRleCBlYjljNDZiMTc0MC4uZTRlOWNj
ZDNlZmEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1B1cmVDU0UuY3Bw
CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1B1cmVDU0UuY3BwCkBAIC02OCw3ICs2
OCw3IEBAIFZhbHVlKiBQdXJlQ1NFOjpmaW5kTWF0Y2goY29uc3QgVmFsdWVLZXkmIGtleSwgQmFz
aWNCbG9jayogYmxvY2ssIERvbWluYXRvcnMmIGRvCiAKIGJvb2wgUHVyZUNTRTo6cHJvY2VzcyhW
YWx1ZSogdmFsdWUsIERvbWluYXRvcnMmIGRvbWluYXRvcnMpCiB7Ci0gICAgaWYgKHZhbHVlLT5v
cGNvZGUoKSA9PSBJZGVudGl0eSkKKyAgICBpZiAodmFsdWUtPm9wY29kZSgpID09IElkZW50aXR5
IHx8IHZhbHVlLT5pc0NvbnN0YW50KCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgIFZh
bHVlS2V5IGtleSA9IHZhbHVlLT5rZXkoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9iMy9CM1B1cmVDU0UuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1B1cmVDU0Uu
aAppbmRleCBkMjZlNDExN2YxNS4uNjY4NTdiZTE2MTcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9iMy9CM1B1cmVDU0UuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMv
QjNQdXJlQ1NFLmgKQEAgLTQwLDcgKzQwLDcgQEAgY2xhc3MgVmFsdWU7CiB0eXBlZGVmIFZlY3Rv
cjxWYWx1ZSosIDE+IE1hdGNoZXM7CiAKIC8vIFRoaXMgaXMgYSByZXVzYWJsZSB1dGlsaXR5IGZv
ciBkb2luZyBwdXJlIENTRS4gWW91IGNhbiB1c2UgaXQgdG8gZG8gcHVyZSBDU0Ugb24gYSBwcm9n
cmFtIGJ5IGp1c3QKLS8vIHByb2NlZWRpbmcgaW4gb3JkZXIgYW4gY2FsbGluZyBwcm9jZXNzKCku
CisvLyBwcm9jZWVkaW5nIGluIG9yZGVyIGFuZCBjYWxsaW5nIHByb2Nlc3MoKS4KIGNsYXNzIFB1
cmVDU0UgewogcHVibGljOgogICAgIFB1cmVDU0UoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9iMy9CM1JlZHVjZVN0cmVuZ3RoLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9iMy9CM1JlZHVjZVN0cmVuZ3RoLmNwcAppbmRleCA3ZTIyYzI5ZDZkNC4uMmYzNGVmZGM4MjAg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1JlZHVjZVN0cmVuZ3RoLmNw
cAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNSZWR1Y2VTdHJlbmd0aC5jcHAKQEAg
LTQwMiw2ICs0MDIsNyBAQCBwdWJsaWM6CiAgICAgICAgIDogbV9wcm9jKHByb2MpCiAgICAgICAg
ICwgbV9pbnNlcnRpb25TZXQocHJvYykKICAgICAgICAgLCBtX2Jsb2NrSW5zZXJ0aW9uU2V0KHBy
b2MpCisgICAgICAgICwgbV9yb290KHByb2MuYXQoMCkpCiAgICAgewogICAgIH0KIApAQCAtNDQy
LDYgKzQ0Myw3IEBAIHB1YmxpYzoKICAgICAgICAgICAgIC8vIGtlZXAgQHRoaW5nLiBUaGF0J3Mg
YmV0dGVyLCBzaW5jZSB3ZSB1c3VhbGx5IHdhbnQgdGhpbmdzIHRvIHN0YXkgd2hlcmV2ZXIgdGhl
IGNsaWVudAogICAgICAgICAgICAgLy8gcHV0IHRoZW0uIFdlJ3JlIG5vdCBhY3R1YWxseSBzbWFy
dCBlbm91Z2ggdG8gbW92ZSB0aGluZ3MgYXJvdW5kIGF0IHJhbmRvbS4KICAgICAgICAgICAgIG1f
Y2hhbmdlZCB8PSBlbGltaW5hdGVEZWFkQ29kZUltcGwobV9wcm9jKTsKKyAgICAgICAgICAgIG1f
dmFsdWVGb3JDb25zdGFudC5jbGVhcigpOwogICAgICAgICAgICAgCiAgICAgICAgICAgICBzaW1w
bGlmeVNTQSgpOwogICAgICAgICAgICAgCkBAIC0yMTQ1LDcgKzIxNDcsMjkgQEAgcHJpdmF0ZToK
ICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9Ci0gICAgICAgICAg
ICAKKworICAgICAgICBjYXNlIENvbnN0MzI6CisgICAgICAgIGNhc2UgQ29uc3Q2NDoKKyAgICAg
ICAgY2FzZSBDb25zdEZsb2F0OgorICAgICAgICBjYXNlIENvbnN0RG91YmxlOiB7CisgICAgICAg
ICAgICBWYWx1ZUtleSBrZXkgPSBtX3ZhbHVlLT5rZXkoKTsKKyAgICAgICAgICAgIGlmIChWYWx1
ZSogY29uc3RJblJvb3QgPSBtX3ZhbHVlRm9yQ29uc3RhbnQuZ2V0KGtleSkpIHsKKyAgICAgICAg
ICAgICAgICBpZiAoY29uc3RJblJvb3QgIT0gbV92YWx1ZSkgeworICAgICAgICAgICAgICAgICAg
ICBtX3ZhbHVlLT5yZXBsYWNlV2l0aElkZW50aXR5KGNvbnN0SW5Sb290KTsKKyAgICAgICAgICAg
ICAgICAgICAgbV9jaGFuZ2VkID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAg
ICB9IGVsc2UgaWYgKG1fYmxvY2sgPT0gbV9yb290KQorICAgICAgICAgICAgICAgIG1fdmFsdWVG
b3JDb25zdGFudC5hZGQoa2V5LCBtX3ZhbHVlKTsKKyAgICAgICAgICAgIGVsc2UgeworICAgICAg
ICAgICAgICAgIFZhbHVlKiBjb25zdEluUm9vdCA9IG1fcHJvYy5jbG9uZShtX3ZhbHVlKTsKKyAg
ICAgICAgICAgICAgICBtX3Jvb3QtPmFwcGVuZE5vblRlcm1pbmFsKGNvbnN0SW5Sb290KTsKKyAg
ICAgICAgICAgICAgICBtX3ZhbHVlRm9yQ29uc3RhbnQuYWRkKGtleSwgY29uc3RJblJvb3QpOwor
ICAgICAgICAgICAgICAgIG1fdmFsdWUtPnJlcGxhY2VXaXRoSWRlbnRpdHkoY29uc3RJblJvb3Qp
OworICAgICAgICAgICAgICAgIG1fY2hhbmdlZCA9IHRydWU7CisgICAgICAgICAgICB9CisgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgfQorCiAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAg
ICBicmVhazsKICAgICAgICAgfQpAQCAtMjc5NCw2ICsyODE4LDggQEAgcHJpdmF0ZToKICAgICBQ
cm9jZWR1cmUmIG1fcHJvYzsKICAgICBJbnNlcnRpb25TZXQgbV9pbnNlcnRpb25TZXQ7CiAgICAg
QmxvY2tJbnNlcnRpb25TZXQgbV9ibG9ja0luc2VydGlvblNldDsKKyAgICBIYXNoTWFwPFZhbHVl
S2V5LCBWYWx1ZSo+IG1fdmFsdWVGb3JDb25zdGFudDsKKyAgICBCYXNpY0Jsb2NrKiBtX3Jvb3Qg
eyBudWxscHRyIH07CiAgICAgQmFzaWNCbG9jayogbV9ibG9jayB7IG51bGxwdHIgfTsKICAgICB1
bnNpZ25lZCBtX2luZGV4IHsgMCB9OwogICAgIFZhbHVlKiBtX3ZhbHVlIHsgbnVsbHB0ciB9Owpk
aWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0dldEJ5SWRTdGF0dXMu
Y3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0dldEJ5SWRTdGF0dXMuY3BwCmlu
ZGV4IDI2YmNkNWZmNzYzLi42ZTRlOGJmZGJlMSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2J5dGVjb2RlL0dldEJ5SWRTdGF0dXMuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ieXRlY29kZS9HZXRCeUlkU3RhdHVzLmNwcApAQCAtMjc2LDcgKzI3Niw3IEBAIEdldEJ5
SWRTdGF0dXMgR2V0QnlJZFN0YXR1czo6Y29tcHV0ZUZvclN0dWJJbmZvV2l0aG91dEV4aXRTaXRl
RmVlZGJhY2soCiAgICAgICAgICAgICAgICAgICAgIHJldHVybiBHZXRCeUlkU3RhdHVzKEpTQzo6
c2xvd1ZlcnNpb24oc3VtbWFyeSkpOwogCiAgICAgICAgICAgICAgICAgaWYgKGRvbUF0dHJpYnV0
ZSkgewotICAgICAgICAgICAgICAgICAgICAvLyBHaXZlIHVwIHdoZW4gY3V0b20gYWNjZXNzZXMg
YXJlIG5vdCBtZXJnZWQgaW50byBvbmUuCisgICAgICAgICAgICAgICAgICAgIC8vIEdpdmUgdXAg
d2hlbiBjdXN0b20gYWNjZXNzZXMgYXJlIG5vdCBtZXJnZWQgaW50byBvbmUuCiAgICAgICAgICAg
ICAgICAgICAgIGlmIChyZXN1bHQubnVtVmFyaWFudHMoKSAhPSAxKQogICAgICAgICAgICAgICAg
ICAgICAgICAgcmV0dXJuIEdldEJ5SWRTdGF0dXMoSlNDOjpzbG93VmVyc2lvbihzdW1tYXJ5KSk7
CiAgICAgICAgICAgICAgICAgfSBlbHNlIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHQ1NFUGhhc2UuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdD
U0VQaGFzZS5jcHAKaW5kZXggMmJhNTk0NjNmYjEuLmU4OWRhYWU0OTU3IDEwMDY0NAotLS0gYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NTRVBoYXNlLmNwcAorKysgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR0NTRVBoYXNlLmNwcApAQCAtMjU3LDcgKzI1Nyw3IEBAIHByaXZh
dGU6CiAgICAgICAgIH0pOwogICAgIH0KIAotICAgIC8vIFRoZSBtYWpvcml0eSBvZiBJbXB1cmUg
U3RhY2sgU2xvdHNhcmUgdW5pcXVlIHBlciB2YWx1ZS4KKyAgICAvLyBUaGUgbWFqb3JpdHkgb2Yg
SW1wdXJlIFN0YWNrIFNsb3RzIGFyZSB1bmlxdWUgcGVyIHZhbHVlLgogICAgIC8vIFRoaXMgaXMg
dmVyeSB1c2VmdWwgZm9yIGZhc3QgY2xvYmJlcigpLCB3ZSBjYW4ganVzdCByZW1vdmUgdGhlIHNs
b3QgYWRkcmVzc2VkIGJ5IEFic3RyYWN0SGVhcAogICAgIC8vIGluIE8oMSkuCiAgICAgLy8KZGlm
ZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSQXZhaWxhYmlsaXR5QW5h
bHlzaXNQaGFzZS5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JBdmFpbGFiaWxp
dHlBbmFseXNpc1BoYXNlLmgKaW5kZXggMTRkZTk0ZGExZDguLjY5ZThiNzU1MGM4IDEwMDY0NAot
LS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkF2YWlsYWJpbGl0eUFuYWx5c2lz
UGhhc2UuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkF2YWlsYWJpbGl0
eUFuYWx5c2lzUGhhc2UuaApAQCAtMzMsNyArMzMsNyBAQCBuYW1lc3BhY2UgSlNDIHsgbmFtZXNw
YWNlIERGRyB7CiAKIGNsYXNzIEdyYXBoOwogCi0vLyBDb21wdXRlcyBCYXNpY0Jsb2NrOjpzc2Et
PmF2YWlsYWJpbHRpeUF0SGVhZC9UYWlsLiBUaGlzIGlzIGEgZm9yd2FyZCBmbG93IHR5cGUgaW5m
ZXJlbmNlCisvLyBDb21wdXRlcyBCYXNpY0Jsb2NrOjpzc2EtPmF2YWlsYWJpbGl0eUF0SGVhZC9U
YWlsLiBUaGlzIGlzIGEgZm9yd2FyZCBmbG93IHR5cGUgaW5mZXJlbmNlCiAvLyBvdmVyIE1vdkhp
bnRzIGFuZCBTZXRMb2NhbHMuIFRoaXMgYW5hbHlzaXMgaXMgcnVuIGRpcmVjdGx5IGJ5IHRoZSBQ
bGFuIGZvciBwcmVwYXJpbmcgZm9yCiAvLyBsb3dlcmluZyB0byBCMyBJUiwgYnV0IGl0IGNhbiBh
bHNvIGJlIHVzZWQgYXMgYSB1dGlsaXR5LiBOb3RlIHRoYXQgaWYgeW91IHJ1biBpdCBiZWZvcmUK
IC8vIHN0YWNrIGxheW91dCwgYWxsIG9mIHRoZSBmbHVzaCBhdmFpbGFiaWxpdHkgd2lsbCBvbWl0
IHRoZSB2aXJ0dWFsIHJlZ2lzdGVyIC0gYnV0IGl0IHdpbGwKZGlmZiAtLWdpdCBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSRXhpdC5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR09TUkV4aXQuY3BwCmluZGV4IGUxODVhMTAwZjIwLi4wOWIzMGJhM2NmYyAxMDA2NDQK
LS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JFeGl0LmNwcAorKysgYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkV4aXQuY3BwCkBAIC00NTIsNyArNDUyLDcgQEAg
dm9pZCBPU1JFeGl0OjpleGVjdXRlT1NSRXhpdChDb250ZXh0JiBjb250ZXh0KQogCiAgICAgY29u
dGV4dC5zcCgpID0gY29udGV4dC5mcDx1aW50OF90Kj4oKSArIGV4aXRTdGF0ZS5zdGFja1BvaW50
ZXJPZmZzZXQ7CiAKLSAgICAvLyBUaGUgb25seSByZWFzb24gZm9yIHVzaW5nIHRoaXMgZG8gd2hp
bGUgbG9vayBpcyBzbyB3ZSBjYW4gYnJlYWsgb3V0IG1pZHdheSB3aGVuIGFwcHJvcHJpYXRlLgor
ICAgIC8vIFRoZSBvbmx5IHJlYXNvbiBmb3IgdXNpbmcgdGhpcyBkbyB3aGlsZSBsb29wIGlzIHNv
IHdlIGNhbiBicmVhayBvdXQgbWlkd2F5IHdoZW4gYXBwcm9wcmlhdGUuCiAgICAgZG8gewogICAg
ICAgICBhdXRvIGV4dHJhSW5pdGlhbGl6YXRpb25MZXZlbCA9IHN0YXRpY19jYXN0PEV4dHJhSW5p
dGlhbGl6YXRpb25MZXZlbD4oZXhpdFN0YXRlLmV4dHJhSW5pdGlhbGl6YXRpb25MZXZlbCk7CiAK
</data>
<flag name="review"
          id="385426"
          type_id="1"
          status="+"
          setter="saam"
    />
    <flag name="commit-queue"
          id="385427"
          type_id="3"
          status="-"
          setter="rmorisset"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>369319</attachid>
            <date>2019-05-07 13:02:36 -0700</date>
            <delta_ts>2019-05-07 14:28:45 -0700</delta_ts>
            <desc>Patch for landing</desc>
            <filename>patch197265</filename>
            <type>text/plain</type>
            <size>9562</size>
            <attacher name="Robin Morisset">rmorisset</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvQ2hhbmdlTG9nCmluZGV4IGRhNzg4NDk1MDMwLi41ZWIyZjhhYmUzZCAxMDA2
NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMzcgQEAKKzIwMTktMDUtMDcgIFJvYmlu
IE1vcmlzc2V0ICA8cm1vcmlzc2V0QGFwcGxlLmNvbT4KKworICAgICAgICBbQjNdIENvbnN0YW50
cyBzaG91bGQgYmUgaG9pc3RlZCB0byB0aGUgcm9vdCBibG9jayB1bnRpbCBtb3ZlQ29uc3RhbnRz
CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xOTcyNjUK
KworICAgICAgICBSZXZpZXdlZCBieSBTYWFtIEJhcmF0aS4KKworICAgICAgICBUaGlzIHBhdGNo
IGRvZXMgdGhlIGZvbGxvd2luZzoKKyAgICAgICAgLSBCM1JlZHVjZVN0cmVuZ3RoIG5vdyBob2lz
dHMgYWxsIGNvbnN0YW50cyB0byB0aGUgcm9vdCBCQiwgYW5kIGRlLWR1cGxpY2F0ZXMgdGhlbSBh
bG9uZyB0aGUgd2F5CisgICAgICAgIC0gQjNQdXJlQ1NFIG5vIGxvbmdlciBib3RoZXJzIHdpdGgg
Y29uc3RhbnRzLCBzaW5jZSB0aGV5IGFyZSBhbHJlYWR5IGRlLWR1cGxpY2F0ZWQgYnkgdGhlIHRp
bWUgaXQgZ2V0cyB0byBzZWUgdGhlbQorICAgICAgICAtIFdlIG5vdyBydW4gZWxpbWluYXRlRGVh
ZENvZGUganVzdCBhZnRlciBtb3ZlQ29uc3RhbnRzLCBzbyB0aGF0IHRoZSBOb3BzIHRoYXQgbW92
ZUNvbnN0YW50cyBnZW5lcmF0ZXMgYXJlIGZyZWVkIGluc3RlYWQgb2Ygc3RheWluZyBsaXZlIHRo
cm91Z2hvdXQgQWlyIGNvbXBpbGF0aW9uLCByZWR1Y2luZyBtZW1vcnkgcHJlc3N1cmUuCisgICAg
ICAgIC0gSSBhbHNvIHRvb2sgdGhlIG9wcG9ydHVuaXR5IHRvIGZpeCB0eXBvcyBpbiBjb21tZW50
cyBpbiB2YXJpb3VzIHBhcnRzIG9mIHRoZSBjb2RlIGJhc2UuCisKKyAgICAgICAgSGVyZSBhcmUg
YSBmZXcgbnVtYmVycyB0byBqdXN0aWZ5IHRoaXMgcGF0Y2g6CisgICAgICAgIC0gSW4gSmV0U3Ry
ZWFtMiwgYWJvdXQgMjclIG9mIHZhbHVlcyBhdCB0aGUgYmVnaW5uaW5nIG9mIEIzIGFyZSBjb25z
dGFudHMKKyAgICAgICAgLSBJbiBKZXRTdHJlYW0yLCBhYm91dCAxMSUgb2YgdmFsdWVzIGF0IHRo
ZSBlbmQgb2YgQjMgYXJlIE5vcHMKKyAgICAgICAgLSBJbiBKZXRTdHJlYW0yLCB0aGlzIHBhdGNo
IGluY3JlYXNlcyB0aGUgbnVtYmVyIG9mIHRpbWVzIHRoYXQgdGFpbCBkdXBsaWNhdGlvbiBoYXBw
ZW5zIGZyb20gYSBiaXQgbGVzcyB0aGFuIDI0ayB0byBhIGJpdCBtb3JlIHRoYW4gMjVrIChob2lz
dGluZyBjb25zdGFudHMgbWFrZXMgYmxvY2tzIHNtYWxsZXIpLgorCisgICAgICAgIFdoZW4gSSB0
cmllZCBtZWFzdXJpbmcgdGhlIHRvdGFsIGVmZmVjdCBvbiBKZXRTdHJlYW0yIEkgZ290IGEgdGlu
eSBhbmQgYWxtb3N0IGNlcnRhaW5seSBub24tc2lnbmlmaWNhbnQgcHJvZ3Jlc3Npb24uCisKKyAg
ICAgICAgKiBiMy9CM0dlbmVyYXRlLmNwcDoKKyAgICAgICAgKEpTQzo6QjM6OmdlbmVyYXRlVG9B
aXIpOgorICAgICAgICAqIGIzL0IzTW92ZUNvbnN0YW50cy5jcHA6CisgICAgICAgICogYjMvQjNQ
dXJlQ1NFLmNwcDoKKyAgICAgICAgKEpTQzo6QjM6OlB1cmVDU0U6OnByb2Nlc3MpOgorICAgICAg
ICAqIGIzL0IzUHVyZUNTRS5oOgorICAgICAgICAqIGIzL0IzUmVkdWNlU3RyZW5ndGguY3BwOgor
ICAgICAgICAqIGJ5dGVjb2RlL0dldEJ5SWRTdGF0dXMuY3BwOgorICAgICAgICAoSlNDOjpHZXRC
eUlkU3RhdHVzOjpjb21wdXRlRm9yU3R1YkluZm9XaXRob3V0RXhpdFNpdGVGZWVkYmFjayk6Cisg
ICAgICAgICogZGZnL0RGR0NTRVBoYXNlLmNwcDoKKyAgICAgICAgKiBkZmcvREZHT1NSQXZhaWxh
YmlsaXR5QW5hbHlzaXNQaGFzZS5oOgorICAgICAgICAqIGRmZy9ERkdPU1JFeGl0LmNwcDoKKyAg
ICAgICAgKEpTQzo6REZHOjpPU1JFeGl0OjpleGVjdXRlT1NSRXhpdCk6CisKIDIwMTktMDUtMDcg
IFRhZGV1IFphZ2FsbG8gIDx0emFnYWxsb0BhcHBsZS5jb20+CiAKICAgICAgICAgdHJ5Q2FjaGVQ
dXRCeUlEIHNob3VsZCBub3QgY3Jhc2ggaWYgdGFyZ2V0IG9mZnNldCBjaGFuZ2VzCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNHZW5lcmF0ZS5jcHAgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvYjMvQjNHZW5lcmF0ZS5jcHAKaW5kZXggZTM3MGUyMTU4OTQuLmJhMmZhMDg0
ODJlIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNHZW5lcmF0ZS5jcHAK
KysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzR2VuZXJhdGUuY3BwCkBAIC0xMTYsNiAr
MTE2LDcgQEAgdm9pZCBnZW5lcmF0ZVRvQWlyKFByb2NlZHVyZSYgcHJvY2VkdXJlKQogICAgIGxv
d2VyTWFjcm9zQWZ0ZXJPcHRpbWl6YXRpb25zKHByb2NlZHVyZSk7CiAgICAgbGVnYWxpemVNZW1v
cnlPZmZzZXRzKHByb2NlZHVyZSk7CiAgICAgbW92ZUNvbnN0YW50cyhwcm9jZWR1cmUpOworICAg
IGVsaW1pbmF0ZURlYWRDb2RlKHByb2NlZHVyZSk7CiAKICAgICAvLyBGSVhNRTogV2Ugc2hvdWxk
IHJ1biBwdXJlQ1NFIGhlcmUgdG8gY2xlYW4gdXAgc29tZSBwbGF0Zm9ybSBzcGVjaWZpYyBjaGFu
Z2VzIGZyb20gdGhlIHByZXZpb3VzIHBoYXNlcy4KICAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTY0ODczCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvYjMvQjNNb3ZlQ29uc3RhbnRzLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9C
M01vdmVDb25zdGFudHMuY3BwCmluZGV4IDdhY2JhMWU1MjVkLi5iYmQ3ODFkZjQwZCAxMDA2NDQK
LS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzTW92ZUNvbnN0YW50cy5jcHAKKysrIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzTW92ZUNvbnN0YW50cy5jcHAKQEAgLTE1NCw3ICsx
NTQsNyBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAgIH07CiAgICAgICAgICAgICAgICAgCiAg
ICAgICAgICAgICAgICAgLy8gV2UgY2FsbCB0aGlzIHdoZW4gd2UgaGF2ZSBmb3VuZCBhIGNvbnN0
YW50IHRoYXQgd2UnZCBsaWtlIHRvIHVzZS4gSXQncyBwb3NzaWJsZSB0aGF0Ci0gICAgICAgICAg
ICAgICAgLy8gd2UgaGF2ZSBjb21wdXRlZCB0aGF0IHRoZSBjb25zdGFudCBzaG91bGQgYmUgbWV0
ZXJpYWxpemVkIGluIHRoaXMgYmxvY2ssIGJ1dCB3ZQorICAgICAgICAgICAgICAgIC8vIHdlIGhh
dmUgY29tcHV0ZWQgdGhhdCB0aGUgY29uc3RhbnQgc2hvdWxkIGJlIG1hdGVyaWFsaXplZCBpbiB0
aGlzIGJsb2NrLCBidXQgd2UKICAgICAgICAgICAgICAgICAvLyBoYXZlbid0IGluc2VydGVkIGl0
IHlldC4gVGhpcyBpbnNlcnRzIHRoZSBjb25zdGFudCBpZiBuZWNlc3NhcnkuCiAgICAgICAgICAg
ICAgICAgYXV0byBtYXRlcmlhbGl6ZSA9IFsmXSAoVmFsdWUqIGNoaWxkKSB7CiAgICAgICAgICAg
ICAgICAgICAgIFZhbHVlS2V5IGtleSA9IGNoaWxkLT5rZXkoKTsKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1B1cmVDU0UuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2IzL0IzUHVyZUNTRS5jcHAKaW5kZXggZWI5YzQ2YjE3NDAuLmU0ZTljY2QzZWZhIDEwMDY0NAot
LS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNQdXJlQ1NFLmNwcAorKysgYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYjMvQjNQdXJlQ1NFLmNwcApAQCAtNjgsNyArNjgsNyBAQCBWYWx1ZSog
UHVyZUNTRTo6ZmluZE1hdGNoKGNvbnN0IFZhbHVlS2V5JiBrZXksIEJhc2ljQmxvY2sqIGJsb2Nr
LCBEb21pbmF0b3JzJiBkbwogCiBib29sIFB1cmVDU0U6OnByb2Nlc3MoVmFsdWUqIHZhbHVlLCBE
b21pbmF0b3JzJiBkb21pbmF0b3JzKQogewotICAgIGlmICh2YWx1ZS0+b3Bjb2RlKCkgPT0gSWRl
bnRpdHkpCisgICAgaWYgKHZhbHVlLT5vcGNvZGUoKSA9PSBJZGVudGl0eSB8fCB2YWx1ZS0+aXND
b25zdGFudCgpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICBWYWx1ZUtleSBrZXkgPSB2
YWx1ZS0+a2V5KCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNQdXJl
Q1NFLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNQdXJlQ1NFLmgKaW5kZXggZDI2ZTQx
MTdmMTUuLjY2ODU3YmUxNjE3IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMv
QjNQdXJlQ1NFLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzUHVyZUNTRS5oCkBA
IC00MCw3ICs0MCw3IEBAIGNsYXNzIFZhbHVlOwogdHlwZWRlZiBWZWN0b3I8VmFsdWUqLCAxPiBN
YXRjaGVzOwogCiAvLyBUaGlzIGlzIGEgcmV1c2FibGUgdXRpbGl0eSBmb3IgZG9pbmcgcHVyZSBD
U0UuIFlvdSBjYW4gdXNlIGl0IHRvIGRvIHB1cmUgQ1NFIG9uIGEgcHJvZ3JhbSBieSBqdXN0Ci0v
LyBwcm9jZWVkaW5nIGluIG9yZGVyIGFuIGNhbGxpbmcgcHJvY2VzcygpLgorLy8gcHJvY2VlZGlu
ZyBpbiBvcmRlciBhbmQgY2FsbGluZyBwcm9jZXNzKCkuCiBjbGFzcyBQdXJlQ1NFIHsKIHB1Ymxp
YzoKICAgICBQdXJlQ1NFKCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMv
QjNSZWR1Y2VTdHJlbmd0aC5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNSZWR1Y2VT
dHJlbmd0aC5jcHAKaW5kZXggN2UyMmMyOWQ2ZDQuLjJmMzRlZmRjODIwIDEwMDY0NAotLS0gYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNSZWR1Y2VTdHJlbmd0aC5jcHAKKysrIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL2IzL0IzUmVkdWNlU3RyZW5ndGguY3BwCkBAIC00MDIsNiArNDAyLDcg
QEAgcHVibGljOgogICAgICAgICA6IG1fcHJvYyhwcm9jKQogICAgICAgICAsIG1faW5zZXJ0aW9u
U2V0KHByb2MpCiAgICAgICAgICwgbV9ibG9ja0luc2VydGlvblNldChwcm9jKQorICAgICAgICAs
IG1fcm9vdChwcm9jLmF0KDApKQogICAgIHsKICAgICB9CiAKQEAgLTQ0Miw2ICs0NDMsNyBAQCBw
dWJsaWM6CiAgICAgICAgICAgICAvLyBrZWVwIEB0aGluZy4gVGhhdCdzIGJldHRlciwgc2luY2Ug
d2UgdXN1YWxseSB3YW50IHRoaW5ncyB0byBzdGF5IHdoZXJldmVyIHRoZSBjbGllbnQKICAgICAg
ICAgICAgIC8vIHB1dCB0aGVtLiBXZSdyZSBub3QgYWN0dWFsbHkgc21hcnQgZW5vdWdoIHRvIG1v
dmUgdGhpbmdzIGFyb3VuZCBhdCByYW5kb20uCiAgICAgICAgICAgICBtX2NoYW5nZWQgfD0gZWxp
bWluYXRlRGVhZENvZGVJbXBsKG1fcHJvYyk7CisgICAgICAgICAgICBtX3ZhbHVlRm9yQ29uc3Rh
bnQuY2xlYXIoKTsKICAgICAgICAgICAgIAogICAgICAgICAgICAgc2ltcGxpZnlTU0EoKTsKICAg
ICAgICAgICAgIApAQCAtMjE0NSw3ICsyMTQ3LDI5IEBAIHByaXZhdGU6CiAgICAgICAgICAgICB9
CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQotICAgICAgICAgICAgCisKKyAgICAgICAg
Y2FzZSBDb25zdDMyOgorICAgICAgICBjYXNlIENvbnN0NjQ6CisgICAgICAgIGNhc2UgQ29uc3RG
bG9hdDoKKyAgICAgICAgY2FzZSBDb25zdERvdWJsZTogeworICAgICAgICAgICAgVmFsdWVLZXkg
a2V5ID0gbV92YWx1ZS0+a2V5KCk7CisgICAgICAgICAgICBpZiAoVmFsdWUqIGNvbnN0SW5Sb290
ID0gbV92YWx1ZUZvckNvbnN0YW50LmdldChrZXkpKSB7CisgICAgICAgICAgICAgICAgaWYgKGNv
bnN0SW5Sb290ICE9IG1fdmFsdWUpIHsKKyAgICAgICAgICAgICAgICAgICAgbV92YWx1ZS0+cmVw
bGFjZVdpdGhJZGVudGl0eShjb25zdEluUm9vdCk7CisgICAgICAgICAgICAgICAgICAgIG1fY2hh
bmdlZCA9IHRydWU7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfSBlbHNlIGlmICht
X2Jsb2NrID09IG1fcm9vdCkKKyAgICAgICAgICAgICAgICBtX3ZhbHVlRm9yQ29uc3RhbnQuYWRk
KGtleSwgbV92YWx1ZSk7CisgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICBWYWx1
ZSogY29uc3RJblJvb3QgPSBtX3Byb2MuY2xvbmUobV92YWx1ZSk7CisgICAgICAgICAgICAgICAg
bV9yb290LT5hcHBlbmROb25UZXJtaW5hbChjb25zdEluUm9vdCk7CisgICAgICAgICAgICAgICAg
bV92YWx1ZUZvckNvbnN0YW50LmFkZChrZXksIGNvbnN0SW5Sb290KTsKKyAgICAgICAgICAgICAg
ICBtX3ZhbHVlLT5yZXBsYWNlV2l0aElkZW50aXR5KGNvbnN0SW5Sb290KTsKKyAgICAgICAgICAg
ICAgICBtX2NoYW5nZWQgPSB0cnVlOworICAgICAgICAgICAgfQorICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgIH0KKwogICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICAgYnJlYWs7CiAgICAg
ICAgIH0KQEAgLTI3OTQsNiArMjgxOCw4IEBAIHByaXZhdGU6CiAgICAgUHJvY2VkdXJlJiBtX3By
b2M7CiAgICAgSW5zZXJ0aW9uU2V0IG1faW5zZXJ0aW9uU2V0OwogICAgIEJsb2NrSW5zZXJ0aW9u
U2V0IG1fYmxvY2tJbnNlcnRpb25TZXQ7CisgICAgSGFzaE1hcDxWYWx1ZUtleSwgVmFsdWUqPiBt
X3ZhbHVlRm9yQ29uc3RhbnQ7CisgICAgQmFzaWNCbG9jayogbV9yb290IHsgbnVsbHB0ciB9Owog
ICAgIEJhc2ljQmxvY2sqIG1fYmxvY2sgeyBudWxscHRyIH07CiAgICAgdW5zaWduZWQgbV9pbmRl
eCB7IDAgfTsKICAgICBWYWx1ZSogbV92YWx1ZSB7IG51bGxwdHIgfTsKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9HZXRCeUlkU3RhdHVzLmNwcCBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ieXRlY29kZS9HZXRCeUlkU3RhdHVzLmNwcAppbmRleCAyNmJjZDVmZjc2
My4uNmU0ZThiZmRiZTEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29k
ZS9HZXRCeUlkU3RhdHVzLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUv
R2V0QnlJZFN0YXR1cy5jcHAKQEAgLTI3Niw3ICsyNzYsNyBAQCBHZXRCeUlkU3RhdHVzIEdldEJ5
SWRTdGF0dXM6OmNvbXB1dGVGb3JTdHViSW5mb1dpdGhvdXRFeGl0U2l0ZUZlZWRiYWNrKAogICAg
ICAgICAgICAgICAgICAgICByZXR1cm4gR2V0QnlJZFN0YXR1cyhKU0M6OnNsb3dWZXJzaW9uKHN1
bW1hcnkpKTsKIAogICAgICAgICAgICAgICAgIGlmIChkb21BdHRyaWJ1dGUpIHsKLSAgICAgICAg
ICAgICAgICAgICAgLy8gR2l2ZSB1cCB3aGVuIGN1dG9tIGFjY2Vzc2VzIGFyZSBub3QgbWVyZ2Vk
IGludG8gb25lLgorICAgICAgICAgICAgICAgICAgICAvLyBHaXZlIHVwIHdoZW4gY3VzdG9tIGFj
Y2Vzc2VzIGFyZSBub3QgbWVyZ2VkIGludG8gb25lLgogICAgICAgICAgICAgICAgICAgICBpZiAo
cmVzdWx0Lm51bVZhcmlhbnRzKCkgIT0gMSkKICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVy
biBHZXRCeUlkU3RhdHVzKEpTQzo6c2xvd1ZlcnNpb24oc3VtbWFyeSkpOwogICAgICAgICAgICAg
ICAgIH0gZWxzZSB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NT
RVBoYXNlLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ1NFUGhhc2UuY3BwCmlu
ZGV4IDJiYTU5NDYzZmIxLi5lODlkYWFlNDk1NyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdDU0VQaGFzZS5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdDU0VQaGFzZS5jcHAKQEAgLTI1Nyw3ICsyNTcsNyBAQCBwcml2YXRlOgogICAgICAgICB9
KTsKICAgICB9CiAKLSAgICAvLyBUaGUgbWFqb3JpdHkgb2YgSW1wdXJlIFN0YWNrIFNsb3RzYXJl
IHVuaXF1ZSBwZXIgdmFsdWUuCisgICAgLy8gVGhlIG1ham9yaXR5IG9mIEltcHVyZSBTdGFjayBT
bG90cyBhcmUgdW5pcXVlIHBlciB2YWx1ZS4KICAgICAvLyBUaGlzIGlzIHZlcnkgdXNlZnVsIGZv
ciBmYXN0IGNsb2JiZXIoKSwgd2UgY2FuIGp1c3QgcmVtb3ZlIHRoZSBzbG90IGFkZHJlc3NlZCBi
eSBBYnN0cmFjdEhlYXAKICAgICAvLyBpbiBPKDEpLgogICAgIC8vCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkF2YWlsYWJpbGl0eUFuYWx5c2lzUGhhc2UuaCBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSQXZhaWxhYmlsaXR5QW5hbHlzaXNQaGFz
ZS5oCmluZGV4IDE0ZGU5NGRhMWQ4Li42OWU4Yjc1NTBjOCAxMDA2NDQKLS0tIGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JBdmFpbGFiaWxpdHlBbmFseXNpc1BoYXNlLmgKKysrIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JBdmFpbGFiaWxpdHlBbmFseXNpc1BoYXNl
LmgKQEAgLTMzLDcgKzMzLDcgQEAgbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgewogCiBj
bGFzcyBHcmFwaDsKIAotLy8gQ29tcHV0ZXMgQmFzaWNCbG9jazo6c3NhLT5hdmFpbGFiaWx0aXlB
dEhlYWQvVGFpbC4gVGhpcyBpcyBhIGZvcndhcmQgZmxvdyB0eXBlIGluZmVyZW5jZQorLy8gQ29t
cHV0ZXMgQmFzaWNCbG9jazo6c3NhLT5hdmFpbGFiaWxpdHlBdEhlYWQvVGFpbC4gVGhpcyBpcyBh
IGZvcndhcmQgZmxvdyB0eXBlIGluZmVyZW5jZQogLy8gb3ZlciBNb3ZIaW50cyBhbmQgU2V0TG9j
YWxzLiBUaGlzIGFuYWx5c2lzIGlzIHJ1biBkaXJlY3RseSBieSB0aGUgUGxhbiBmb3IgcHJlcGFy
aW5nIGZvcgogLy8gbG93ZXJpbmcgdG8gQjMgSVIsIGJ1dCBpdCBjYW4gYWxzbyBiZSB1c2VkIGFz
IGEgdXRpbGl0eS4gTm90ZSB0aGF0IGlmIHlvdSBydW4gaXQgYmVmb3JlCiAvLyBzdGFjayBsYXlv
dXQsIGFsbCBvZiB0aGUgZmx1c2ggYXZhaWxhYmlsaXR5IHdpbGwgb21pdCB0aGUgdmlydHVhbCBy
ZWdpc3RlciAtIGJ1dCBpdCB3aWxsCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR09TUkV4aXQuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JFeGl0
LmNwcAppbmRleCBlMTg1YTEwMGYyMC4uMDliMzBiYTNjZmMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSRXhpdC5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdPU1JFeGl0LmNwcApAQCAtNDUyLDcgKzQ1Miw3IEBAIHZvaWQgT1NSRXhpdDo6
ZXhlY3V0ZU9TUkV4aXQoQ29udGV4dCYgY29udGV4dCkKIAogICAgIGNvbnRleHQuc3AoKSA9IGNv
bnRleHQuZnA8dWludDhfdCo+KCkgKyBleGl0U3RhdGUuc3RhY2tQb2ludGVyT2Zmc2V0OwogCi0g
ICAgLy8gVGhlIG9ubHkgcmVhc29uIGZvciB1c2luZyB0aGlzIGRvIHdoaWxlIGxvb2sgaXMgc28g
d2UgY2FuIGJyZWFrIG91dCBtaWR3YXkgd2hlbiBhcHByb3ByaWF0ZS4KKyAgICAvLyBUaGUgb25s
eSByZWFzb24gZm9yIHVzaW5nIHRoaXMgZG8gd2hpbGUgbG9vcCBpcyBzbyB3ZSBjYW4gYnJlYWsg
b3V0IG1pZHdheSB3aGVuIGFwcHJvcHJpYXRlLgogICAgIGRvIHsKICAgICAgICAgYXV0byBleHRy
YUluaXRpYWxpemF0aW9uTGV2ZWwgPSBzdGF0aWNfY2FzdDxFeHRyYUluaXRpYWxpemF0aW9uTGV2
ZWw+KGV4aXRTdGF0ZS5leHRyYUluaXRpYWxpemF0aW9uTGV2ZWwpOwogCg==
</data>

          </attachment>
      

    </bug>

</bugzilla>