<?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>156891</bug_id>
          
          <creation_ts>2016-04-21 22:09:56 -0700</creation_ts>
          <short_desc>[JSC] PredictionPropagation should not be in the top 5 heaviest phases</short_desc>
          <delta_ts>2016-04-22 16:14:08 -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>New Bugs</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></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Benjamin Poulain">benjamin</reporter>
          <assigned_to name="Benjamin Poulain">benjamin</assigned_to>
          <cc>commit-queue</cc>
    
    <cc>fpizlo</cc>
    
    <cc>keith_miller</cc>
    
    <cc>mark.lam</cc>
    
    <cc>msaboff</cc>
    
    <cc>saam</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1186119</commentid>
    <comment_count>0</comment_count>
    <who name="Benjamin Poulain">benjamin</who>
    <bug_when>2016-04-21 22:09:56 -0700</bug_when>
    <thetext>[JSC] PredictionPropagation should not be in the top 5 heaviest phases</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1186120</commentid>
    <comment_count>1</comment_count>
      <attachid>277009</attachid>
    <who name="Benjamin Poulain">benjamin</who>
    <bug_when>2016-04-21 22:25:06 -0700</bug_when>
    <thetext>Created attachment 277009
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1186132</commentid>
    <comment_count>2</comment_count>
    <who name="Benjamin Poulain">benjamin</who>
    <bug_when>2016-04-21 23:15:02 -0700</bug_when>
    <thetext>From run to run, it is between 0.2 and 0.8% faster. Here is a good run:

                                    Conf#1                    Conf#2                                      

3d-cube                         4.9343+-0.0898     ?      4.9911+-0.1312        ? might be 1.0115x slower
3d-morph                        5.0066+-0.0786     ?      5.1369+-0.2216        ? might be 1.0260x slower
3d-raytrace                     5.2229+-0.0652            5.2187+-0.0457        
access-binary-trees             2.1478+-0.0362            2.1227+-0.0393          might be 1.0118x faster
access-fannkuch                 6.1786+-0.2340            5.9789+-0.1307          might be 1.0334x faster
access-nbody                    2.6457+-0.1253            2.5420+-0.0463          might be 1.0408x faster
access-nsieve                   3.0282+-0.0550            3.0154+-0.0763        
bitops-3bit-bits-in-byte        1.1365+-0.0187     ?      1.1588+-0.0366        ? might be 1.0196x slower
bitops-bits-in-byte             2.8563+-0.0470            2.8536+-0.1076        
bitops-bitwise-and              2.0675+-0.0569     ?      2.0695+-0.0485        ?
bitops-nsieve-bits              3.1162+-0.0383     ?      3.1651+-0.0915        ? might be 1.0157x slower
controlflow-recursive           2.3721+-0.0394            2.3328+-0.0417          might be 1.0168x faster
crypto-aes                      4.2856+-0.1929            4.1238+-0.0575          might be 1.0393x faster
crypto-md5                      2.4638+-0.0602     ?      2.4813+-0.0456        ?
crypto-sha1                     2.3946+-0.0979            2.3788+-0.0678        
date-format-tofte               6.8225+-0.1669            6.7144+-0.1163          might be 1.0161x faster
date-format-xparb               4.6748+-0.1307     ?      4.7250+-0.1635        ? might be 1.0108x slower
math-cordic                     2.9013+-0.0712            2.9000+-0.1035        
math-partial-sums               4.7603+-0.0547     ?      4.7903+-0.0770        ?
math-spectral-norm              2.0250+-0.0351     ?      2.0333+-0.0394        ?
regexp-dna                      6.5777+-0.2425     ?      6.6352+-0.2959        ?
string-base64                   4.7766+-0.1619            4.6521+-0.1108          might be 1.0268x faster
string-fasta                    5.7766+-0.0823     ?      5.8047+-0.1863        ?
string-tagcloud                 8.1666+-0.2112            8.1428+-0.1602        
string-unpack-code             18.9451+-0.5965           18.4644+-0.2174          might be 1.0260x faster
string-validate-input           4.4505+-0.1446            4.3418+-0.0949          might be 1.0250x faster

&lt;arithmetic&gt;                    4.6051+-0.0399            4.5682+-0.0340          might be 1.0081x faster</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1186287</commentid>
    <comment_count>3</comment_count>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2016-04-22 09:53:00 -0700</bug_when>
    <thetext>(In reply to comment #2)
&gt; From run to run, it is between 0.2 and 0.8% faster. Here is a good run:
&gt; 
&gt; &lt;arithmetic&gt;                    4.6051+-0.0399            4.5682+-0.0340    
&gt; might be 1.0081x faster

Just curious: do we accept &quot;might be&quot; numbers as a believable indicator now?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1186293</commentid>
    <comment_count>4</comment_count>
    <who name="Benjamin Poulain">benjamin</who>
    <bug_when>2016-04-22 10:17:27 -0700</bug_when>
    <thetext>(In reply to comment #3)
&gt; (In reply to comment #2)
&gt; &gt; From run to run, it is between 0.2 and 0.8% faster. Here is a good run:
&gt; &gt; 
&gt; &gt; &lt;arithmetic&gt;                    4.6051+-0.0399            4.5682+-0.0340    
&gt; &gt; might be 1.0081x faster
&gt; 
&gt; Just curious: do we accept &quot;might be&quot; numbers as a believable indicator now?

This is Sunspider!
Any gain/regression less than a millisecond is well within the noise of a modern CPU.

What I do is run it multiple times, typically 3-5 times with outer=20. If all runs are in the same direction, it is likely the right thing.

Most regressions can&apos;t be tracked on the bots for the same reason: the average is going up/down, but every change is within the noise.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1186313</commentid>
    <comment_count>5</comment_count>
      <attachid>277009</attachid>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2016-04-22 10:50:58 -0700</bug_when>
    <thetext>Comment on attachment 277009
Patch

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

nice work.  r=me.

&gt; Source/JavaScriptCore/ChangeLog:21
&gt; +

Please remove this extra empty line.

&gt; Source/JavaScriptCore/ChangeLog:30
&gt; +

Please remove this extra empty line.

&gt; Source/JavaScriptCore/dfg/DFGPredictionPropagationPhase.cpp:39
&gt; +bool verboseFixPointLoops = false;

If you make this const static, then the compiler can elide the &quot;verbose&quot; code.  As is, it still needs to emit code for them and branch around them.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1186348</commentid>
    <comment_count>6</comment_count>
      <attachid>277009</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2016-04-22 11:45:53 -0700</bug_when>
    <thetext>Comment on attachment 277009
Patch

Super cool!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1186349</commentid>
    <comment_count>7</comment_count>
    <who name="Benjamin Poulain">benjamin</who>
    <bug_when>2016-04-22 11:46:58 -0700</bug_when>
    <thetext>&gt; &gt; Source/JavaScriptCore/dfg/DFGPredictionPropagationPhase.cpp:39
&gt; &gt; +bool verboseFixPointLoops = false;
&gt; 
&gt; If you make this const static, then the compiler can elide the &quot;verbose&quot;
&gt; code.  As is, it still needs to emit code for them and branch around them.

Why would constant propagation fail here?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1186372</commentid>
    <comment_count>8</comment_count>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2016-04-22 12:46:48 -0700</bug_when>
    <thetext>(In reply to comment #7)
&gt; &gt; &gt; Source/JavaScriptCore/dfg/DFGPredictionPropagationPhase.cpp:39
&gt; &gt; &gt; +bool verboseFixPointLoops = false;
&gt; &gt; 
&gt; &gt; If you make this const static, then the compiler can elide the &quot;verbose&quot;
&gt; &gt; code.  As is, it still needs to emit code for them and branch around them.
&gt; 
&gt; Why would constant propagation fail here?

Because it is not const.  How would the compiler know that another file won&apos;t do this:

    extern bool verboseFixPointLoops;
    ...
    verboseFixPointLoops = true;

... that is unless there&apos;s link time optimizations involved.  Is link time optimization capable of eliding code like this?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1186377</commentid>
    <comment_count>9</comment_count>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2016-04-22 12:53:33 -0700</bug_when>
    <thetext>(In reply to comment #8)
&gt; (In reply to comment #7)
&gt; &gt; &gt; &gt; Source/JavaScriptCore/dfg/DFGPredictionPropagationPhase.cpp:39
&gt; &gt; &gt; &gt; +bool verboseFixPointLoops = false;
&gt; &gt; &gt; 
&gt; &gt; &gt; If you make this const static, then the compiler can elide the &quot;verbose&quot;
&gt; &gt; &gt; code.  As is, it still needs to emit code for them and branch around them.
&gt; &gt; 
&gt; &gt; Why would constant propagation fail here?
&gt; 
&gt; Because it is not const.  How would the compiler know that another file
&gt; won&apos;t do this:
&gt; 
&gt;     extern bool verboseFixPointLoops;
&gt;     ...
&gt;     verboseFixPointLoops = true;
&gt; 
&gt; ... that is unless there&apos;s link time optimizations involved.  Is link time
&gt; optimization capable of eliding code like this?

Another reason to put a &quot;static const&quot; attribute on it is to document that this flag is only used in this file and is not meant to be mutable at runtime.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1186461</commentid>
    <comment_count>10</comment_count>
      <attachid>277104</attachid>
    <who name="Benjamin Poulain">benjamin</who>
    <bug_when>2016-04-22 15:11:06 -0700</bug_when>
    <thetext>Created attachment 277104
Patch for landing</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1186486</commentid>
    <comment_count>11</comment_count>
      <attachid>277104</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2016-04-22 16:10:07 -0700</bug_when>
    <thetext>Comment on attachment 277104
Patch for landing

Clearing flags on attachment: 277104

Committed r199933: &lt;http://trac.webkit.org/changeset/199933&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1186487</commentid>
    <comment_count>12</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2016-04-22 16:10:12 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1186489</commentid>
    <comment_count>13</comment_count>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2016-04-22 16:14:08 -0700</bug_when>
    <thetext>(In reply to comment #9)
&gt; (In reply to comment #8)
&gt; &gt; (In reply to comment #7)
&gt; &gt; &gt; &gt; &gt; Source/JavaScriptCore/dfg/DFGPredictionPropagationPhase.cpp:39
&gt; &gt; &gt; &gt; &gt; +bool verboseFixPointLoops = false;
&gt; &gt; &gt; &gt; 
&gt; &gt; &gt; &gt; If you make this const static, then the compiler can elide the &quot;verbose&quot;
&gt; &gt; &gt; &gt; code.  As is, it still needs to emit code for them and branch around them.
&gt; &gt; &gt; 
&gt; &gt; &gt; Why would constant propagation fail here?
&gt; &gt; 

To follow up for those reading along: Ben pointed out that verboseFixPointLoops is in an anonymous namespace, which makes it effectively static to this compilation unit.  Hence, no need for the static const attributes.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>277009</attachid>
            <date>2016-04-21 22:25:06 -0700</date>
            <delta_ts>2016-04-22 15:11:01 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-156891-20160421222529.patch</filename>
            <type>text/plain</type>
            <size>36657</size>
            <attacher name="Benjamin Poulain">benjamin</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTk5ODM5CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCA2
Y2Y2ZWYyYzZiNzI2NzZlODBiOGE4MDhjYjlmZGU5MWUxZWY2Y2E4Li5mNDE1ZTk2ZTVmNjJlZWRk
NGVkODIzYzQ0ZWIyOGFkNTE2NWQ1ZDcyIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSw0NiBAQAorMjAxNi0wNC0yMSAgQmVuamFtaW4gUG91bGFpbiAgPGJwb3VsYWluQGFwcGxl
LmNvbT4KKworICAgICAgICBbSlNDXSBQcmVkaWN0aW9uUHJvcGFnYXRpb24gc2hvdWxkIG5vdCBi
ZSBpbiB0aGUgdG9wIDUgaGVhdmllc3QgcGhhc2VzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNTY4OTEKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JP
RFkgKE9PUFMhKS4KKworICAgICAgICBJbiBERkcsIFByZWRpY3Rpb25Qcm9wYWdhdGlvbiBpcyBv
ZnRlbiB3YXkgdG9vIGhpZ2ggaW4gcHJvZmlsZXMuCisgICAgICAgIEl0IGlzIGEgc2ltcGxlIHBo
YXNlLCBpdCBzaG91bGQgbm90IGJlIHRoYXQgaG90LgorCisgICAgICAgIE1vc3Qgb2YgdGhlIHRp
bWUgaXMgc3BlbnQgYWNjZXNzaW5nIG1lbW9yeS4gVGhpcyBwYXRjaCBhdHRlbXB0cworICAgICAg
ICB0byByZWR1Y2UgdGhhdC4KKworICAgICAgICBGaXJzdCwgcHJvcGFnYXRlKCkgaXMgc3BsaXQg
aW4gcHJvY2Vzc0ludmFyaWFudHMoKSBhbmQgcHJvcGFnYXRlcygpLgorICAgICAgICBUaGUgc3Rl
cCBwcm9jZXNzSW52YXJpYW50cygpIHNldHMgYWxsIHRoZSB0eXBlcyBmb3Igbm9kZXMgZm9yIHdo
aWNoCisgICAgICAgIHRoZSB0eXBlIGRvZXMgbm90IGRlcGVuZHMgb24gb3RoZXIgbm9kZXMuCisK
KyAgICAgICAgQWRkaW5nIHByb2Nlc3NJbnZhcmlhbnRzKCkgbG93ZXJzIHR3byBob3RzcG90IGlu
c2lkZSBQcmVkaWN0aW9uUHJvcGFnYXRpb246CisgICAgICAgIHNwZWN1bGF0aW9uRnJvbVZhbHVl
KCkgYW5kIHNldFByZWRpY3Rpb24oKS4KKworCisgICAgICAgIE5leHQsIHRvIGF2b2lkIHRvdWNo
aW5nIGFsbCB0aGUgbm9kZXMgYXQgZXZlcnkgb3BlcmF0aW9uLCB3ZSBrZWVwCisgICAgICAgIHRy
YWNrIG9mIHRoZSBub2RlcyB0aGF0IGFjdHVhbGx5IG5lZWQgcHJvcGFnYXRlKCkuCisgICAgICAg
IFRoZSB2ZWN0b3IgbV9kZXBlbmRlbnROb2RlcyBrZWVwcyB0aGUgbGlzdCBvZiB0aG9zZSBub2Rl
cyBhbmQgcHJvcGFnYXRlKCkKKyAgICAgICAgb25seSBuZWVkIHRvIHByb2Nlc3MgdGhlbSBhdCBl
YWNoIHBoYXNlLgorCisgICAgICAgIFRoaXMgaXMgYSBzbWFsbGVyIGdhaW4gYmVjYXVzZSBncm93
aW5nIG1fZGVwZW5kZW50Tm9kZXMgbmVnYXRlcworICAgICAgICBzb21lIG9mIHRoZSBnYWlucy4K
KworCisgICAgICAgIE9uIDNkLWN1YmUsIHRoaXMgbW92ZXMgUHJlZGljdGlvblByb3BhZ2F0aW9u
IGZyb20gZmlmdGggcG9zaXRpb24KKyAgICAgICAgdG8gbmludGguIEEgbG90IG9mIHRoZSByZW1h
aW5pbmcgb3ZlcmhlYWQgaXMgY2F1c2VkIGJ5IGRvdWJsZS12b3RpbmcKKyAgICAgICAgYW5kIGNh
bm5vdCBiZSBmaXhlZCBieSBtb3Zpbmcgc3R1ZmYgYXJvdW5kLgorCisgICAgICAgICogZGZnL0RG
R1ByZWRpY3Rpb25Qcm9wYWdhdGlvblBoYXNlLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpQcmVk
aWN0aW9uUHJvcGFnYXRpb25QaGFzZTo6cHJvcGFnYXRlVG9GaXhwb2ludCk6IERlbGV0ZWQuCisg
ICAgICAgIChKU0M6OkRGRzo6UHJlZGljdGlvblByb3BhZ2F0aW9uUGhhc2U6OnByb3BhZ2F0ZSk6
IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkRGRzo6UHJlZGljdGlvblByb3BhZ2F0aW9uUGhhc2U6
OnByb3BhZ2F0ZUZvcndhcmQpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpERkc6OlByZWRpY3Rp
b25Qcm9wYWdhdGlvblBoYXNlOjpwcm9wYWdhdGVCYWNrd2FyZCk6IERlbGV0ZWQuCisgICAgICAg
IChKU0M6OkRGRzo6UHJlZGljdGlvblByb3BhZ2F0aW9uUGhhc2U6OmRvRG91YmxlVm90aW5nKTog
RGVsZXRlZC4KKyAgICAgICAgKEpTQzo6REZHOjpQcmVkaWN0aW9uUHJvcGFnYXRpb25QaGFzZTo6
ZG9Sb3VuZE9mRG91YmxlVm90aW5nKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6REZHOjpQcmVk
aWN0aW9uUHJvcGFnYXRpb25QaGFzZTo6cHJvcGFnYXRlVGhyb3VnaEFyZ3VtZW50UG9zaXRpb25z
KTogRGVsZXRlZC4KKwogMjAxNi0wNC0yMSAgRmlsaXAgUGl6bG8gIDxmcGl6bG9AYXBwbGUuY29t
PgogCiAgICAgICAgIFBvbHltb3JwaGljQWNjZXNzIGFkZHMgc2l6ZW9mKENhbGxlckZyYW1lQW5k
UEMpIHJhdGhlciB0aGFuIHN1YnRyYWN0aW5nIGl0IHdoZW4gY2FsY3VsYXRpbmcgc3RhY2sgaGVp
Z2h0CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1ByZWRpY3Rpb25Q
cm9wYWdhdGlvblBoYXNlLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUHJlZGlj
dGlvblByb3BhZ2F0aW9uUGhhc2UuY3BwCmluZGV4IDFlMTc1ZDJiZmVlNDU4YjAxOTE3NTMwZDE0
MGJmMWY4YTJlMTcxZWEuLjc2Y2NjMGVmMDcwZmEzYzBhMmRjMTNlZDFiZjk2YTFiODViYTUxMWQg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUHJlZGljdGlvblByb3Bh
Z2F0aW9uUGhhc2UuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUHJlZGlj
dGlvblByb3BhZ2F0aW9uUGhhc2UuY3BwCkBAIC0zNCw2ICszNCwxMCBAQAogCiBuYW1lc3BhY2Ug
SlNDIHsgbmFtZXNwYWNlIERGRyB7CiAKK25hbWVzcGFjZSB7CisKK2Jvb2wgdmVyYm9zZUZpeFBv
aW50TG9vcHMgPSBmYWxzZTsKKwogY2xhc3MgUHJlZGljdGlvblByb3BhZ2F0aW9uUGhhc2UgOiBw
dWJsaWMgUGhhc2UgewogcHVibGljOgogICAgIFByZWRpY3Rpb25Qcm9wYWdhdGlvblBoYXNlKEdy
YXBoJiBncmFwaCkKQEAgLTQ4LDYgKzUyLDggQEAgcHVibGljOgogCiAgICAgICAgIHByb3BhZ2F0
ZVRocm91Z2hBcmd1bWVudFBvc2l0aW9ucygpOwogCisgICAgICAgIHByb2Nlc3NJbnZhcmlhbnRz
KCk7CisKICAgICAgICAgbV9wYXNzID0gUHJpbWFyeVBhc3M7CiAgICAgICAgIHByb3BhZ2F0ZVRv
Rml4cG9pbnQoKTsKICAgICAgICAgCkBAIC01NSw3ICs2MSwxMSBAQCBwdWJsaWM6CiAgICAgICAg
IHByb3BhZ2F0ZVRvRml4cG9pbnQoKTsKICAgICAgICAgCiAgICAgICAgIG1fcGFzcyA9IERvdWJs
ZVZvdGluZ1Bhc3M7CisgICAgICAgIHVuc2lnbmVkIGNvdW50ZXIgPSAwOwogICAgICAgICBkbyB7
CisgICAgICAgICAgICBpZiAodmVyYm9zZUZpeFBvaW50TG9vcHMpCisgICAgICAgICAgICAgICAg
Kytjb3VudGVyOworCiAgICAgICAgICAgICBtX2NoYW5nZWQgPSBmYWxzZTsKICAgICAgICAgICAg
IGRvUm91bmRPZkRvdWJsZVZvdGluZygpOwogICAgICAgICAgICAgaWYgKCFtX2NoYW5nZWQpCkBA
IC02Myw2ICs3Myw5IEBAIHB1YmxpYzoKICAgICAgICAgICAgIG1fY2hhbmdlZCA9IGZhbHNlOwog
ICAgICAgICAgICAgcHJvcGFnYXRlRm9yd2FyZCgpOwogICAgICAgICB9IHdoaWxlIChtX2NoYW5n
ZWQpOworCisgICAgICAgIGlmICh2ZXJib3NlRml4UG9pbnRMb29wcykKKyAgICAgICAgICAgIGRh
dGFMb2coIkl0ZXJhdGVkICIsIGNvdW50ZXIsICIgdGltZXMgaW4gZG91YmxlIHZvdGluZyBmaXhw
b2ludC5cbiIpOwogICAgICAgICAKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQpAQCAtNzAs
OSArODMsMTMgQEAgcHVibGljOgogcHJpdmF0ZToKICAgICB2b2lkIHByb3BhZ2F0ZVRvRml4cG9p
bnQoKQogICAgIHsKKyAgICAgICAgdW5zaWduZWQgY291bnRlciA9IDA7CiAgICAgICAgIGRvIHsK
KyAgICAgICAgICAgIGlmICh2ZXJib3NlRml4UG9pbnRMb29wcykKKyAgICAgICAgICAgICAgICAr
K2NvdW50ZXI7CisKICAgICAgICAgICAgIG1fY2hhbmdlZCA9IGZhbHNlOwotICAgICAgICAgICAg
CisKICAgICAgICAgICAgIC8vIEZvcndhcmQgcHJvcGFnYXRpb24gaXMgbmVhci1vcHRpbWFsIGZv
ciBib3RoIHRvcG9sb2dpY2FsbHktc29ydGVkIGFuZAogICAgICAgICAgICAgLy8gREZTLXNvcnRl
ZCBjb2RlLgogICAgICAgICAgICAgcHJvcGFnYXRlRm9yd2FyZCgpOwpAQCAtODYsNiArMTAzLDkg
QEAgcHJpdmF0ZToKICAgICAgICAgICAgIG1fY2hhbmdlZCA9IGZhbHNlOwogICAgICAgICAgICAg
cHJvcGFnYXRlQmFja3dhcmQoKTsKICAgICAgICAgfSB3aGlsZSAobV9jaGFuZ2VkKTsKKworICAg
ICAgICBpZiAodmVyYm9zZUZpeFBvaW50TG9vcHMpCisgICAgICAgICAgICBkYXRhTG9nKCJJdGVy
YXRlZCAiLCBjb3VudGVyLCAiIHRpbWVzIGluIHByb3BhZ2F0ZVRvRml4cG9pbnQuXG4iKTsKICAg
ICB9CiAgICAgCiAgICAgYm9vbCBzZXRQcmVkaWN0aW9uKFNwZWN1bGF0ZWRUeXBlIHByZWRpY3Rp
b24pCkBAIC0xMzIsMTkgKzE1Miw2IEBAIHByaXZhdGU6CiAgICAgICAgIGJvb2wgY2hhbmdlZCA9
IGZhbHNlOwogICAgICAgICAKICAgICAgICAgc3dpdGNoIChvcCkgewotICAgICAgICBjYXNlIEpT
Q29uc3RhbnQ6IHsKLSAgICAgICAgICAgIFNwZWN1bGF0ZWRUeXBlIHR5cGUgPSBzcGVjdWxhdGlv
bkZyb21WYWx1ZShub2RlLT5hc0pTVmFsdWUoKSk7Ci0gICAgICAgICAgICBpZiAodHlwZSA9PSBT
cGVjSW50NTJBc0RvdWJsZSAmJiBlbmFibGVJbnQ1MigpKQotICAgICAgICAgICAgICAgIHR5cGUg
PSBTcGVjSW50NTI7Ci0gICAgICAgICAgICBjaGFuZ2VkIHw9IHNldFByZWRpY3Rpb24odHlwZSk7
Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBjYXNlIERvdWJsZUNvbnN0
YW50OiB7Ci0gICAgICAgICAgICBTcGVjdWxhdGVkVHlwZSB0eXBlID0gc3BlY3VsYXRpb25Gcm9t
VmFsdWUobm9kZS0+YXNKU1ZhbHVlKCkpOwotICAgICAgICAgICAgY2hhbmdlZCB8PSBzZXRQcmVk
aWN0aW9uKHR5cGUpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgICAg
IAogICAgICAgICBjYXNlIEdldExvY2FsOiB7CiAgICAgICAgICAgICBWYXJpYWJsZUFjY2Vzc0Rh
dGEqIHZhcmlhYmxlID0gbm9kZS0+dmFyaWFibGVBY2Nlc3NEYXRhKCk7CiAgICAgICAgICAgICBT
cGVjdWxhdGVkVHlwZSBwcmVkaWN0aW9uID0gdmFyaWFibGUtPnByZWRpY3Rpb24oKTsKQEAgLTE2
MCw5MSArMTY3LDYgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIGNoYW5nZWQgfD0gdmFyaWFibGVB
Y2Nlc3NEYXRhLT5wcmVkaWN0KG5vZGUtPmNoaWxkMSgpLT5wcmVkaWN0aW9uKCkpOwogICAgICAg
ICAgICAgYnJlYWs7CiAgICAgICAgIH0KLSAgICAgICAgICAgIAotICAgICAgICBjYXNlIEJpdEFu
ZDoKLSAgICAgICAgY2FzZSBCaXRPcjoKLSAgICAgICAgY2FzZSBCaXRYb3I6Ci0gICAgICAgIGNh
c2UgQml0UlNoaWZ0OgotICAgICAgICBjYXNlIEJpdExTaGlmdDoKLSAgICAgICAgY2FzZSBCaXRV
UlNoaWZ0OgotICAgICAgICBjYXNlIEFyaXRoSU11bDoKLSAgICAgICAgY2FzZSBBcml0aENsejMy
OiB7Ci0gICAgICAgICAgICBjaGFuZ2VkIHw9IHNldFByZWRpY3Rpb24oU3BlY0ludDMyKTsKLSAg
ICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0KLSAgICAgICAgY2FzZSBUcnlHZXRCeUlkOiB7
Ci0gICAgICAgICAgICBjaGFuZ2VkIHw9IHNldFByZWRpY3Rpb24oU3BlY0J5dGVjb2RlVG9wKTsK
LSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0KLSAgICAgICAgY2FzZSBBcnJheVBvcDoK
LSAgICAgICAgY2FzZSBBcnJheVB1c2g6Ci0gICAgICAgIGNhc2UgUmVnRXhwRXhlYzoKLSAgICAg
ICAgY2FzZSBSZWdFeHBUZXN0OgotICAgICAgICBjYXNlIFN0cmluZ1JlcGxhY2U6Ci0gICAgICAg
IGNhc2UgR2V0QnlJZDoKLSAgICAgICAgY2FzZSBHZXRCeUlkRmx1c2g6Ci0gICAgICAgIGNhc2Ug
R2V0QnlPZmZzZXQ6Ci0gICAgICAgIGNhc2UgTXVsdGlHZXRCeU9mZnNldDoKLSAgICAgICAgY2Fz
ZSBHZXREaXJlY3RQbmFtZToKLSAgICAgICAgY2FzZSBDYWxsOgotICAgICAgICBjYXNlIFRhaWxD
YWxsSW5saW5lZENhbGxlcjoKLSAgICAgICAgY2FzZSBDb25zdHJ1Y3Q6Ci0gICAgICAgIGNhc2Ug
Q2FsbFZhcmFyZ3M6Ci0gICAgICAgIGNhc2UgVGFpbENhbGxWYXJhcmdzSW5saW5lZENhbGxlcjoK
LSAgICAgICAgY2FzZSBDb25zdHJ1Y3RWYXJhcmdzOgotICAgICAgICBjYXNlIENhbGxGb3J3YXJk
VmFyYXJnczoKLSAgICAgICAgY2FzZSBDb25zdHJ1Y3RGb3J3YXJkVmFyYXJnczoKLSAgICAgICAg
Y2FzZSBUYWlsQ2FsbEZvcndhcmRWYXJhcmdzSW5saW5lZENhbGxlcjoKLSAgICAgICAgY2FzZSBH
ZXRHbG9iYWxWYXI6Ci0gICAgICAgIGNhc2UgR2V0R2xvYmFsTGV4aWNhbFZhcmlhYmxlOgotICAg
ICAgICBjYXNlIEdldENsb3N1cmVWYXI6Ci0gICAgICAgIGNhc2UgR2V0RnJvbUFyZ3VtZW50czog
ewotICAgICAgICAgICAgY2hhbmdlZCB8PSBzZXRQcmVkaWN0aW9uKG5vZGUtPmdldEhlYXBQcmVk
aWN0aW9uKCkpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLQotICAgICAgICBjYXNl
IEdldER5bmFtaWNWYXI6IHsKLSAgICAgICAgICAgIGNoYW5nZWQgfD0gc2V0UHJlZGljdGlvbihT
cGVjQnl0ZWNvZGVUb3ApOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAg
ICAgIAotICAgICAgICBjYXNlIEdldEdldHRlclNldHRlckJ5T2Zmc2V0OgotICAgICAgICBjYXNl
IEdldEV4ZWN1dGFibGU6IHsKLSAgICAgICAgICAgIGNoYW5nZWQgfD0gc2V0UHJlZGljdGlvbihT
cGVjQ2VsbE90aGVyKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0KLSAgICAgICAg
Y2FzZSBHZXRHZXR0ZXI6Ci0gICAgICAgIGNhc2UgR2V0U2V0dGVyOgotICAgICAgICBjYXNlIEdl
dENhbGxlZToKLSAgICAgICAgY2FzZSBOZXdGdW5jdGlvbjoKLSAgICAgICAgY2FzZSBOZXdHZW5l
cmF0b3JGdW5jdGlvbjogewotICAgICAgICAgICAgY2hhbmdlZCB8PSBzZXRQcmVkaWN0aW9uKFNw
ZWNGdW5jdGlvbik7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICAgICAg
Ci0gICAgICAgIGNhc2UgR2V0QXJndW1lbnRDb3VudDogewotICAgICAgICAgICAgY2hhbmdlZCB8
PSBzZXRQcmVkaWN0aW9uKFNwZWNJbnQzMik7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAg
fQotCi0gICAgICAgIGNhc2UgR2V0UmVzdExlbmd0aDogewotICAgICAgICAgICAgY2hhbmdlZCB8
PSBzZXRQcmVkaWN0aW9uKFNwZWNJbnQzMik7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAg
fQotCi0gICAgICAgIGNhc2UgR2V0VHlwZWRBcnJheUJ5dGVPZmZzZXQ6Ci0gICAgICAgIGNhc2Ug
R2V0QXJyYXlMZW5ndGg6IHsKLSAgICAgICAgICAgIGNoYW5nZWQgfD0gc2V0UHJlZGljdGlvbihT
cGVjSW50MzIpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLQotICAgICAgICBjYXNl
IFN0cmluZ0NoYXJDb2RlQXQ6IHsKLSAgICAgICAgICAgIGNoYW5nZWQgfD0gc2V0UHJlZGljdGlv
bihTcGVjSW50MzIpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KIAogICAgICAgICBj
YXNlIFVJbnQzMlRvTnVtYmVyOiB7CiAgICAgICAgICAgICBpZiAobm9kZS0+Y2FuU3BlY3VsYXRl
SW50MzIobV9wYXNzKSkKQEAgLTM4MSwyMSArMzAzLDYgQEAgcHJpdmF0ZToKICAgICAgICAgICAg
IGJyZWFrOwogICAgICAgICB9CiAKLSAgICAgICAgY2FzZSBBcml0aFBvdzoKLSAgICAgICAgY2Fz
ZSBBcml0aFNxcnQ6Ci0gICAgICAgIGNhc2UgQXJpdGhGUm91bmQ6Ci0gICAgICAgIGNhc2UgQXJp
dGhTaW46Ci0gICAgICAgIGNhc2UgQXJpdGhDb3M6Ci0gICAgICAgIGNhc2UgQXJpdGhMb2c6IHsK
LSAgICAgICAgICAgIGNoYW5nZWQgfD0gc2V0UHJlZGljdGlvbihTcGVjQnl0ZWNvZGVEb3VibGUp
OwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLQotICAgICAgICBjYXNlIEFyaXRoUmFu
ZG9tOiB7Ci0gICAgICAgICAgICBjaGFuZ2VkIHw9IHNldFByZWRpY3Rpb24oU3BlY0RvdWJsZVJl
YWwpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLQogICAgICAgICBjYXNlIEFyaXRo
Um91bmQ6CiAgICAgICAgIGNhc2UgQXJpdGhGbG9vcjoKICAgICAgICAgY2FzZSBBcml0aENlaWw6
CkBAIC00MTcsMzcgKzMyNCw2IEBAIHByaXZhdGU6CiAgICAgICAgICAgICBicmVhazsKICAgICAg
ICAgfQogCi0gICAgICAgIGNhc2UgRGVsZXRlQnlJZDoKLSAgICAgICAgY2FzZSBMb2dpY2FsTm90
OgotICAgICAgICBjYXNlIENvbXBhcmVMZXNzOgotICAgICAgICBjYXNlIENvbXBhcmVMZXNzRXE6
Ci0gICAgICAgIGNhc2UgQ29tcGFyZUdyZWF0ZXI6Ci0gICAgICAgIGNhc2UgQ29tcGFyZUdyZWF0
ZXJFcToKLSAgICAgICAgY2FzZSBDb21wYXJlRXE6Ci0gICAgICAgIGNhc2UgQ29tcGFyZVN0cmlj
dEVxOgotICAgICAgICBjYXNlIE92ZXJyaWRlc0hhc0luc3RhbmNlOgotICAgICAgICBjYXNlIElu
c3RhbmNlT2Y6Ci0gICAgICAgIGNhc2UgSW5zdGFuY2VPZkN1c3RvbToKLSAgICAgICAgY2FzZSBJ
c0FycmF5T2JqZWN0OgotICAgICAgICBjYXNlIElzSlNBcnJheToKLSAgICAgICAgY2FzZSBJc0Fy
cmF5Q29uc3RydWN0b3I6Ci0gICAgICAgIGNhc2UgSXNVbmRlZmluZWQ6Ci0gICAgICAgIGNhc2Ug
SXNCb29sZWFuOgotICAgICAgICBjYXNlIElzTnVtYmVyOgotICAgICAgICBjYXNlIElzU3RyaW5n
OgotICAgICAgICBjYXNlIElzT2JqZWN0OgotICAgICAgICBjYXNlIElzT2JqZWN0T3JOdWxsOgot
ICAgICAgICBjYXNlIElzRnVuY3Rpb246Ci0gICAgICAgIGNhc2UgSXNSZWdFeHBPYmplY3Q6IHsK
LSAgICAgICAgICAgIGNoYW5nZWQgfD0gc2V0UHJlZGljdGlvbihTcGVjQm9vbGVhbik7Ci0gICAg
ICAgICAgICBicmVhazsKLSAgICAgICAgfQotCi0gICAgICAgIGNhc2UgVHlwZU9mOiB7Ci0gICAg
ICAgICAgICBjaGFuZ2VkIHw9IHNldFByZWRpY3Rpb24oU3BlY1N0cmluZ0lkZW50KTsKLSAgICAg
ICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0KICAgICAgICAgY2FzZSBHZXRCeVZhbDogewogICAg
ICAgICAgICAgaWYgKCFub2RlLT5jaGlsZDEoKS0+cHJlZGljdGlvbigpKQogICAgICAgICAgICAg
ICAgIGJyZWFrOwpAQCAtNDk2LDE5ICszNzIsNiBAQCBwcml2YXRlOgogICAgICAgICAgICAgfQog
ICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KLSAgICAgICAgICAgIAotICAgICAgICBjYXNl
IEdldEJ1dHRlcmZseToKLSAgICAgICAgY2FzZSBHZXRJbmRleGVkUHJvcGVydHlTdG9yYWdlOgot
ICAgICAgICBjYXNlIEFsbG9jYXRlUHJvcGVydHlTdG9yYWdlOgotICAgICAgICBjYXNlIFJlYWxs
b2NhdGVQcm9wZXJ0eVN0b3JhZ2U6IHsKLSAgICAgICAgICAgIGNoYW5nZWQgfD0gc2V0UHJlZGlj
dGlvbihTcGVjT3RoZXIpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLQotICAgICAg
ICBjYXNlIENhbGxPYmplY3RDb25zdHJ1Y3RvcjogewotICAgICAgICAgICAgY2hhbmdlZCB8PSBz
ZXRQcmVkaWN0aW9uKFNwZWNPYmplY3QpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0K
IAogICAgICAgICBjYXNlIFRvVGhpczogewogICAgICAgICAgICAgLy8gVG9UaGlzIGluIG1ldGhv
ZHMgZm9yIHByaW1pdGl2ZSB0eXBlcyBzaG91bGQgc3BlY3VsYXRlIHByaW1pdGl2ZSB0eXBlcyBp
biBzdHJpY3QgbW9kZS4KQEAgLTU2OSw0OCArNDMyLDQwOCBAQCBwcml2YXRlOgogICAgICAgICAg
ICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgICAgIAotICAgICAgICBjYXNlIFNraXBTY29w
ZToKLSAgICAgICAgY2FzZSBHZXRHbG9iYWxPYmplY3Q6IHsKLSAgICAgICAgICAgIGNoYW5nZWQg
fD0gc2V0UHJlZGljdGlvbihTcGVjT2JqZWN0T3RoZXIpOworICAgICAgICBjYXNlIFRvUHJpbWl0
aXZlOiB7CisgICAgICAgICAgICBTcGVjdWxhdGVkVHlwZSBjaGlsZCA9IG5vZGUtPmNoaWxkMSgp
LT5wcmVkaWN0aW9uKCk7CisgICAgICAgICAgICBpZiAoY2hpbGQpCisgICAgICAgICAgICAgICAg
Y2hhbmdlZCB8PSBtZXJnZVByZWRpY3Rpb24ocmVzdWx0T2ZUb1ByaW1pdGl2ZShjaGlsZCkpOwog
ICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KIAotICAgICAgICBjYXNlIFJlc29sdmVTY29w
ZTogewotICAgICAgICAgICAgY2hhbmdlZCB8PSBzZXRQcmVkaWN0aW9uKFNwZWNPYmplY3RPdGhl
cik7CisgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQotICAg
ICAgICAgICAgCi0gICAgICAgIGNhc2UgQ3JlYXRlVGhpczoKLSAgICAgICAgY2FzZSBOZXdPYmpl
Y3Q6IHsKLSAgICAgICAgICAgIGNoYW5nZWQgfD0gc2V0UHJlZGljdGlvbihTcGVjRmluYWxPYmpl
Y3QpOwotICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgbV9jaGFuZ2VkIHw9IGNoYW5nZWQ7
CisgICAgfQorICAgICAgICAKKyAgICB2b2lkIHByb3BhZ2F0ZUZvcndhcmQoKQorICAgIHsKKyAg
ICAgICAgZm9yIChOb2RlKiBub2RlIDogbV9kZXBlbmRlbnROb2RlcykgeworICAgICAgICAgICAg
bV9jdXJyZW50Tm9kZSA9IG5vZGU7CisgICAgICAgICAgICBwcm9wYWdhdGUobV9jdXJyZW50Tm9k
ZSk7CiAgICAgICAgIH0KLSAgICAgICAgICAgIAotICAgICAgICBjYXNlIE5ld0FycmF5OgotICAg
ICAgICBjYXNlIE5ld0FycmF5V2l0aFNpemU6Ci0gICAgICAgIGNhc2UgTmV3QXJyYXlCdWZmZXI6
IHsKLSAgICAgICAgICAgIGNoYW5nZWQgfD0gc2V0UHJlZGljdGlvbihTcGVjQXJyYXkpOwotICAg
ICAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAgdm9pZCBwcm9wYWdhdGVCYWNrd2FyZCgpCisg
ICAgeworICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBtX2RlcGVuZGVudE5vZGVzLnNpemUoKTsg
aS0tOykgeworICAgICAgICAgICAgbV9jdXJyZW50Tm9kZSA9IG1fZGVwZW5kZW50Tm9kZXNbaV07
CisgICAgICAgICAgICBwcm9wYWdhdGUobV9jdXJyZW50Tm9kZSk7CiAgICAgICAgIH0KLSAgICAg
ICAgICAgIAotICAgICAgICBjYXNlIE5ld1R5cGVkQXJyYXk6IHsKLSAgICAgICAgICAgIGNoYW5n
ZWQgfD0gc2V0UHJlZGljdGlvbihzcGVjdWxhdGlvbkZyb21UeXBlZEFycmF5VHlwZShub2RlLT50
eXBlZEFycmF5VHlwZSgpKSk7CisgICAgfQorICAgIAorICAgIHZvaWQgZG9Eb3VibGVWb3Rpbmco
Tm9kZSogbm9kZSwgZmxvYXQgd2VpZ2h0KQorICAgIHsKKyAgICAgICAgLy8gTG9vcCBwcmUtaGVh
ZGVycyBjcmVhdGVkIGJ5IE9TUiBlbnRyeXBvaW50IGNyZWF0aW9uIG1heSBoYXZlIE5hTiB3ZWln
aHQgdG8gaW5kaWNhdGUKKyAgICAgICAgLy8gdGhhdCB3ZSBhY3R1YWxseSBkb24ndCBrbm93IHRo
ZXkgd2VpZ2h0LiBBc3N1bWUgdGhhdCB0aGV5IGV4ZWN1dGUgb25jZS4gVGhpcyB0dXJucworICAg
ICAgICAvLyBvdXQgdG8gYmUgYW4gT0sgYXNzdW1wdGlvbiBzaW5jZSB0aGUgcHJlLWhlYWRlciBk
b2Vzbid0IGhhdmUgYW55IG1lYW5pbmdmdWwgY29kZS4KKyAgICAgICAgaWYgKHdlaWdodCAhPSB3
ZWlnaHQpCisgICAgICAgICAgICB3ZWlnaHQgPSAxOworICAgICAgICAKKyAgICAgICAgc3dpdGNo
IChub2RlLT5vcCgpKSB7CisgICAgICAgIGNhc2UgVmFsdWVBZGQ6CisgICAgICAgIGNhc2UgQXJp
dGhBZGQ6CisgICAgICAgIGNhc2UgQXJpdGhTdWI6IHsKKyAgICAgICAgICAgIFNwZWN1bGF0ZWRU
eXBlIGxlZnQgPSBub2RlLT5jaGlsZDEoKS0+cHJlZGljdGlvbigpOworICAgICAgICAgICAgU3Bl
Y3VsYXRlZFR5cGUgcmlnaHQgPSBub2RlLT5jaGlsZDIoKS0+cHJlZGljdGlvbigpOworICAgICAg
ICAgICAgICAgIAorICAgICAgICAgICAgRG91YmxlQmFsbG90IGJhbGxvdDsKKyAgICAgICAgICAg
ICAgICAKKyAgICAgICAgICAgIGlmIChpc0Z1bGxOdW1iZXJTcGVjdWxhdGlvbihsZWZ0KQorICAg
ICAgICAgICAgICAgICYmIGlzRnVsbE51bWJlclNwZWN1bGF0aW9uKHJpZ2h0KQorICAgICAgICAg
ICAgICAgICYmICFtX2dyYXBoLmFkZFNob3VsZFNwZWN1bGF0ZUludDMyKG5vZGUsIG1fcGFzcykK
KyAgICAgICAgICAgICAgICAmJiAhbV9ncmFwaC5hZGRTaG91bGRTcGVjdWxhdGVNYWNoaW5lSW50
KG5vZGUpKQorICAgICAgICAgICAgICAgIGJhbGxvdCA9IFZvdGVEb3VibGU7CisgICAgICAgICAg
ICBlbHNlCisgICAgICAgICAgICAgICAgYmFsbG90ID0gVm90ZVZhbHVlOworICAgICAgICAgICAg
ICAgIAorICAgICAgICAgICAgbV9ncmFwaC52b3RlTm9kZShub2RlLT5jaGlsZDEoKSwgYmFsbG90
LCB3ZWlnaHQpOworICAgICAgICAgICAgbV9ncmFwaC52b3RlTm9kZShub2RlLT5jaGlsZDIoKSwg
YmFsbG90LCB3ZWlnaHQpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KLSAgICAgICAg
ICAgIAotICAgICAgICBjYXNlIE5ld1JlZ2V4cDogewotICAgICAgICAgICAgY2hhbmdlZCB8PSBz
ZXRQcmVkaWN0aW9uKFNwZWNSZWdFeHBPYmplY3QpOworCisgICAgICAgIGNhc2UgQXJpdGhNdWw6
IHsKKyAgICAgICAgICAgIFNwZWN1bGF0ZWRUeXBlIGxlZnQgPSBub2RlLT5jaGlsZDEoKS0+cHJl
ZGljdGlvbigpOworICAgICAgICAgICAgU3BlY3VsYXRlZFR5cGUgcmlnaHQgPSBub2RlLT5jaGls
ZDIoKS0+cHJlZGljdGlvbigpOworICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgRG91Ymxl
QmFsbG90IGJhbGxvdDsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgIGlmIChpc0Z1bGxO
dW1iZXJTcGVjdWxhdGlvbihsZWZ0KQorICAgICAgICAgICAgICAgICYmIGlzRnVsbE51bWJlclNw
ZWN1bGF0aW9uKHJpZ2h0KQorICAgICAgICAgICAgICAgICYmICFtX2dyYXBoLmJpbmFyeUFyaXRo
U2hvdWxkU3BlY3VsYXRlSW50MzIobm9kZSwgbV9wYXNzKQorICAgICAgICAgICAgICAgICYmICFt
X2dyYXBoLmJpbmFyeUFyaXRoU2hvdWxkU3BlY3VsYXRlTWFjaGluZUludChub2RlLCBtX3Bhc3Mp
KQorICAgICAgICAgICAgICAgIGJhbGxvdCA9IFZvdGVEb3VibGU7CisgICAgICAgICAgICBlbHNl
CisgICAgICAgICAgICAgICAgYmFsbG90ID0gVm90ZVZhbHVlOworICAgICAgICAgICAgICAgIAor
ICAgICAgICAgICAgbV9ncmFwaC52b3RlTm9kZShub2RlLT5jaGlsZDEoKSwgYmFsbG90LCB3ZWln
aHQpOworICAgICAgICAgICAgbV9ncmFwaC52b3RlTm9kZShub2RlLT5jaGlsZDIoKSwgYmFsbG90
LCB3ZWlnaHQpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KLSAgICAgICAgICAgIAot
ICAgICAgICBjYXNlIENyZWF0ZUFjdGl2YXRpb246IHsKLSAgICAgICAgICAgIGNoYW5nZWQgfD0g
c2V0UHJlZGljdGlvbihTcGVjT2JqZWN0T3RoZXIpOworCisgICAgICAgIGNhc2UgQXJpdGhNaW46
CisgICAgICAgIGNhc2UgQXJpdGhNYXg6CisgICAgICAgIGNhc2UgQXJpdGhNb2Q6CisgICAgICAg
IGNhc2UgQXJpdGhEaXY6IHsKKyAgICAgICAgICAgIFNwZWN1bGF0ZWRUeXBlIGxlZnQgPSBub2Rl
LT5jaGlsZDEoKS0+cHJlZGljdGlvbigpOworICAgICAgICAgICAgU3BlY3VsYXRlZFR5cGUgcmln
aHQgPSBub2RlLT5jaGlsZDIoKS0+cHJlZGljdGlvbigpOworICAgICAgICAgICAgICAgIAorICAg
ICAgICAgICAgRG91YmxlQmFsbG90IGJhbGxvdDsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAg
ICAgIGlmIChpc0Z1bGxOdW1iZXJTcGVjdWxhdGlvbihsZWZ0KQorICAgICAgICAgICAgICAgICYm
IGlzRnVsbE51bWJlclNwZWN1bGF0aW9uKHJpZ2h0KQorICAgICAgICAgICAgICAgICYmICFtX2dy
YXBoLmJpbmFyeUFyaXRoU2hvdWxkU3BlY3VsYXRlSW50MzIobm9kZSwgbV9wYXNzKSkKKyAgICAg
ICAgICAgICAgICBiYWxsb3QgPSBWb3RlRG91YmxlOworICAgICAgICAgICAgZWxzZQorICAgICAg
ICAgICAgICAgIGJhbGxvdCA9IFZvdGVWYWx1ZTsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAg
ICAgIG1fZ3JhcGgudm90ZU5vZGUobm9kZS0+Y2hpbGQxKCksIGJhbGxvdCwgd2VpZ2h0KTsKKyAg
ICAgICAgICAgIG1fZ3JhcGgudm90ZU5vZGUobm9kZS0+Y2hpbGQyKCksIGJhbGxvdCwgd2VpZ2h0
KTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICBjYXNl
IFN0cmluZ0Zyb21DaGFyQ29kZTogewotICAgICAgICAgICAgY2hhbmdlZCB8PSBzZXRQcmVkaWN0
aW9uKFNwZWNTdHJpbmcpOwotICAgICAgICAgICAgY2hhbmdlZCB8PSBub2RlLT5jaGlsZDEoKS0+
bWVyZ2VGbGFncyhOb2RlQnl0ZWNvZGVVc2VzQXNOdW1iZXIgfCBOb2RlQnl0ZWNvZGVVc2VzQXNJ
bnQpOyAgICAgICAgICAgIAorCisgICAgICAgIGNhc2UgQXJpdGhBYnM6CisgICAgICAgICAgICBE
b3VibGVCYWxsb3QgYmFsbG90OworICAgICAgICAgICAgaWYgKG5vZGUtPmNoaWxkMSgpLT5zaG91
bGRTcGVjdWxhdGVOdW1iZXIoKQorICAgICAgICAgICAgICAgICYmICFtX2dyYXBoLnVuYXJ5QXJp
dGhTaG91bGRTcGVjdWxhdGVJbnQzMihub2RlLCBtX3Bhc3MpKQorICAgICAgICAgICAgICAgIGJh
bGxvdCA9IFZvdGVEb3VibGU7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgYmFs
bG90ID0gVm90ZVZhbHVlOworICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgbV9ncmFwaC52
b3RlTm9kZShub2RlLT5jaGlsZDEoKSwgYmFsbG90LCB3ZWlnaHQpOworICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgICAgICAgICAgCisgICAgICAgIGNhc2UgQXJpdGhTcXJ0OgorICAgICAgICBj
YXNlIEFyaXRoQ29zOgorICAgICAgICBjYXNlIEFyaXRoU2luOgorICAgICAgICBjYXNlIEFyaXRo
TG9nOgorICAgICAgICAgICAgaWYgKG5vZGUtPmNoaWxkMSgpLT5zaG91bGRTcGVjdWxhdGVOdW1i
ZXIoKSkKKyAgICAgICAgICAgICAgICBtX2dyYXBoLnZvdGVOb2RlKG5vZGUtPmNoaWxkMSgpLCBW
b3RlRG91YmxlLCB3ZWlnaHQpOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIG1f
Z3JhcGgudm90ZU5vZGUobm9kZS0+Y2hpbGQxKCksIFZvdGVWYWx1ZSwgd2VpZ2h0KTsKKyAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIAorICAgICAgICBjYXNlIFNldExvY2FsOiB7
CisgICAgICAgICAgICBTcGVjdWxhdGVkVHlwZSBwcmVkaWN0aW9uID0gbm9kZS0+Y2hpbGQxKCkt
PnByZWRpY3Rpb24oKTsKKyAgICAgICAgICAgIGlmIChpc0RvdWJsZVNwZWN1bGF0aW9uKHByZWRp
Y3Rpb24pKQorICAgICAgICAgICAgICAgIG5vZGUtPnZhcmlhYmxlQWNjZXNzRGF0YSgpLT52b3Rl
KFZvdGVEb3VibGUsIHdlaWdodCk7CisgICAgICAgICAgICBlbHNlIGlmICghaXNGdWxsTnVtYmVy
U3BlY3VsYXRpb24ocHJlZGljdGlvbikKKyAgICAgICAgICAgICAgICB8fCBpc0ludDMyU3BlY3Vs
YXRpb24ocHJlZGljdGlvbikgfHwgaXNNYWNoaW5lSW50U3BlY3VsYXRpb24ocHJlZGljdGlvbikp
CisgICAgICAgICAgICAgICAgbm9kZS0+dmFyaWFibGVBY2Nlc3NEYXRhKCktPnZvdGUoVm90ZVZh
bHVlLCB3ZWlnaHQpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKworICAgICAgICBj
YXNlIFB1dEJ5VmFsRGlyZWN0OgorICAgICAgICBjYXNlIFB1dEJ5VmFsOgorICAgICAgICBjYXNl
IFB1dEJ5VmFsQWxpYXM6IHsKKyAgICAgICAgICAgIEVkZ2UgY2hpbGQxID0gbV9ncmFwaC52YXJB
cmdDaGlsZChub2RlLCAwKTsKKyAgICAgICAgICAgIEVkZ2UgY2hpbGQyID0gbV9ncmFwaC52YXJB
cmdDaGlsZChub2RlLCAxKTsKKyAgICAgICAgICAgIEVkZ2UgY2hpbGQzID0gbV9ncmFwaC52YXJB
cmdDaGlsZChub2RlLCAyKTsKKyAgICAgICAgICAgIG1fZ3JhcGgudm90ZU5vZGUoY2hpbGQxLCBW
b3RlVmFsdWUsIHdlaWdodCk7CisgICAgICAgICAgICBtX2dyYXBoLnZvdGVOb2RlKGNoaWxkMiwg
Vm90ZVZhbHVlLCB3ZWlnaHQpOworICAgICAgICAgICAgc3dpdGNoIChub2RlLT5hcnJheU1vZGUo
KS50eXBlKCkpIHsKKyAgICAgICAgICAgIGNhc2UgQXJyYXk6OkRvdWJsZToKKyAgICAgICAgICAg
ICAgICBtX2dyYXBoLnZvdGVOb2RlKGNoaWxkMywgVm90ZURvdWJsZSwgd2VpZ2h0KTsKKyAgICAg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAg
bV9ncmFwaC52b3RlTm9kZShjaGlsZDMsIFZvdGVWYWx1ZSwgd2VpZ2h0KTsKKyAgICAgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9
CisgICAgICAgICAgICAKKyAgICAgICAgY2FzZSBNb3ZIaW50OgorICAgICAgICAgICAgLy8gSWdu
b3JlIHRoZXNlIHNpbmNlIHRoZXkgaGF2ZSBubyBlZmZlY3Qgb24gaW4tREZHIGV4ZWN1dGlvbi4K
KyAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgCisgICAgICAgIGRlZmF1bHQ6CisgICAg
ICAgICAgICBtX2dyYXBoLnZvdGVDaGlsZHJlbihub2RlLCBWb3RlVmFsdWUsIHdlaWdodCk7Cisg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgIH0KKyAgICAKKyAgICB2b2lkIGRvUm91
bmRPZkRvdWJsZVZvdGluZygpCisgICAgeworICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBp
IDwgbV9ncmFwaC5tX3ZhcmlhYmxlQWNjZXNzRGF0YS5zaXplKCk7ICsraSkKKyAgICAgICAgICAg
IG1fZ3JhcGgubV92YXJpYWJsZUFjY2Vzc0RhdGFbaV0uZmluZCgpLT5jbGVhclZvdGVzKCk7Cisg
ICAgICAgIGZvciAoQmxvY2tJbmRleCBibG9ja0luZGV4ID0gMDsgYmxvY2tJbmRleCA8IG1fZ3Jh
cGgubnVtQmxvY2tzKCk7ICsrYmxvY2tJbmRleCkgeworICAgICAgICAgICAgQmFzaWNCbG9jayog
YmxvY2sgPSBtX2dyYXBoLmJsb2NrKGJsb2NrSW5kZXgpOworICAgICAgICAgICAgaWYgKCFibG9j
aykKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIEFTU0VSVChibG9jay0+
aXNSZWFjaGFibGUpOworICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGJsb2Nr
LT5zaXplKCk7ICsraSkgeworICAgICAgICAgICAgICAgIG1fY3VycmVudE5vZGUgPSBibG9jay0+
YXQoaSk7CisgICAgICAgICAgICAgICAgZG9Eb3VibGVWb3RpbmcobV9jdXJyZW50Tm9kZSwgYmxv
Y2stPmV4ZWN1dGlvbkNvdW50KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBm
b3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbV9ncmFwaC5tX3ZhcmlhYmxlQWNjZXNzRGF0YS5zaXpl
KCk7ICsraSkgeworICAgICAgICAgICAgVmFyaWFibGVBY2Nlc3NEYXRhKiB2YXJpYWJsZUFjY2Vz
c0RhdGEgPSAmbV9ncmFwaC5tX3ZhcmlhYmxlQWNjZXNzRGF0YVtpXTsKKyAgICAgICAgICAgIGlm
ICghdmFyaWFibGVBY2Nlc3NEYXRhLT5pc1Jvb3QoKSkKKyAgICAgICAgICAgICAgICBjb250aW51
ZTsKKyAgICAgICAgICAgIG1fY2hhbmdlZCB8PSB2YXJpYWJsZUFjY2Vzc0RhdGEtPnRhbGx5Vm90
ZXNGb3JTaG91bGRVc2VEb3VibGVGb3JtYXQoKTsKKyAgICAgICAgfQorICAgICAgICBwcm9wYWdh
dGVUaHJvdWdoQXJndW1lbnRQb3NpdGlvbnMoKTsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0g
MDsgaSA8IG1fZ3JhcGgubV92YXJpYWJsZUFjY2Vzc0RhdGEuc2l6ZSgpOyArK2kpIHsKKyAgICAg
ICAgICAgIFZhcmlhYmxlQWNjZXNzRGF0YSogdmFyaWFibGVBY2Nlc3NEYXRhID0gJm1fZ3JhcGgu
bV92YXJpYWJsZUFjY2Vzc0RhdGFbaV07CisgICAgICAgICAgICBpZiAoIXZhcmlhYmxlQWNjZXNz
RGF0YS0+aXNSb290KCkpCisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICBt
X2NoYW5nZWQgfD0gdmFyaWFibGVBY2Nlc3NEYXRhLT5tYWtlUHJlZGljdGlvbkZvckRvdWJsZUZv
cm1hdCgpOworICAgICAgICB9CisgICAgfQorICAgIAorICAgIHZvaWQgcHJvcGFnYXRlVGhyb3Vn
aEFyZ3VtZW50UG9zaXRpb25zKCkKKyAgICB7CisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7
IGkgPCBtX2dyYXBoLm1fYXJndW1lbnRQb3NpdGlvbnMuc2l6ZSgpOyArK2kpCisgICAgICAgICAg
ICBtX2NoYW5nZWQgfD0gbV9ncmFwaC5tX2FyZ3VtZW50UG9zaXRpb25zW2ldLm1lcmdlQXJndW1l
bnRQcmVkaWN0aW9uQXdhcmVuZXNzKCk7CisgICAgfQorCisgICAgLy8gU2V0cyBhbnkgcHJlZGlj
dGlvbnMgdGhhdCBkbyBub3QgZGVwZW5kcyBvbiBvdGhlciBub2Rlcy4KKyAgICB2b2lkIHByb2Nl
c3NJbnZhcmlhbnRzKCkKKyAgICB7CisgICAgICAgIGZvciAoQmFzaWNCbG9jayogYmxvY2sgOiBt
X2dyYXBoLmJsb2Nrc0luTmF0dXJhbE9yZGVyKCkpIHsKKyAgICAgICAgICAgIGZvciAoTm9kZSog
bm9kZSA6ICpibG9jaykgeworICAgICAgICAgICAgICAgIG1fY3VycmVudE5vZGUgPSBub2RlOwor
ICAgICAgICAgICAgICAgIHByb2Nlc3NJbnZhcmlhbnRzRm9yTm9kZSgpOworICAgICAgICAgICAg
fQorICAgICAgICB9CisgICAgfQorCisgICAgdm9pZCBwcm9jZXNzSW52YXJpYW50c0Zvck5vZGUo
KQorICAgIHsKKyAgICAgICAgc3dpdGNoIChtX2N1cnJlbnROb2RlLT5vcCgpKSB7CisgICAgICAg
IGNhc2UgSlNDb25zdGFudDogeworICAgICAgICAgICAgU3BlY3VsYXRlZFR5cGUgdHlwZSA9IHNw
ZWN1bGF0aW9uRnJvbVZhbHVlKG1fY3VycmVudE5vZGUtPmFzSlNWYWx1ZSgpKTsKKyAgICAgICAg
ICAgIGlmICh0eXBlID09IFNwZWNJbnQ1MkFzRG91YmxlICYmIGVuYWJsZUludDUyKCkpCisgICAg
ICAgICAgICAgICAgdHlwZSA9IFNwZWNJbnQ1MjsKKyAgICAgICAgICAgIHNldFByZWRpY3Rpb24o
dHlwZSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBjYXNlIERvdWJs
ZUNvbnN0YW50OiB7CisgICAgICAgICAgICBTcGVjdWxhdGVkVHlwZSB0eXBlID0gc3BlY3VsYXRp
b25Gcm9tVmFsdWUobV9jdXJyZW50Tm9kZS0+YXNKU1ZhbHVlKCkpOworICAgICAgICAgICAgc2V0
UHJlZGljdGlvbih0eXBlKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAg
IGNhc2UgQml0QW5kOgorICAgICAgICBjYXNlIEJpdE9yOgorICAgICAgICBjYXNlIEJpdFhvcjoK
KyAgICAgICAgY2FzZSBCaXRSU2hpZnQ6CisgICAgICAgIGNhc2UgQml0TFNoaWZ0OgorICAgICAg
ICBjYXNlIEJpdFVSU2hpZnQ6CisgICAgICAgIGNhc2UgQXJpdGhJTXVsOgorICAgICAgICBjYXNl
IEFyaXRoQ2x6MzI6IHsKKyAgICAgICAgICAgIHNldFByZWRpY3Rpb24oU3BlY0ludDMyKTsKKyAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisKKyAgICAgICAgY2FzZSBUcnlHZXRCeUlkOiB7
CisgICAgICAgICAgICBzZXRQcmVkaWN0aW9uKFNwZWNCeXRlY29kZVRvcCk7CisgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBjYXNlIEFycmF5UG9wOgorICAgICAgICBjYXNl
IEFycmF5UHVzaDoKKyAgICAgICAgY2FzZSBSZWdFeHBFeGVjOgorICAgICAgICBjYXNlIFJlZ0V4
cFRlc3Q6CisgICAgICAgIGNhc2UgU3RyaW5nUmVwbGFjZToKKyAgICAgICAgY2FzZSBHZXRCeUlk
OgorICAgICAgICBjYXNlIEdldEJ5SWRGbHVzaDoKKyAgICAgICAgY2FzZSBHZXRCeU9mZnNldDoK
KyAgICAgICAgY2FzZSBNdWx0aUdldEJ5T2Zmc2V0OgorICAgICAgICBjYXNlIEdldERpcmVjdFBu
YW1lOgorICAgICAgICBjYXNlIENhbGw6CisgICAgICAgIGNhc2UgVGFpbENhbGxJbmxpbmVkQ2Fs
bGVyOgorICAgICAgICBjYXNlIENvbnN0cnVjdDoKKyAgICAgICAgY2FzZSBDYWxsVmFyYXJnczoK
KyAgICAgICAgY2FzZSBUYWlsQ2FsbFZhcmFyZ3NJbmxpbmVkQ2FsbGVyOgorICAgICAgICBjYXNl
IENvbnN0cnVjdFZhcmFyZ3M6CisgICAgICAgIGNhc2UgQ2FsbEZvcndhcmRWYXJhcmdzOgorICAg
ICAgICBjYXNlIENvbnN0cnVjdEZvcndhcmRWYXJhcmdzOgorICAgICAgICBjYXNlIFRhaWxDYWxs
Rm9yd2FyZFZhcmFyZ3NJbmxpbmVkQ2FsbGVyOgorICAgICAgICBjYXNlIEdldEdsb2JhbFZhcjoK
KyAgICAgICAgY2FzZSBHZXRHbG9iYWxMZXhpY2FsVmFyaWFibGU6CisgICAgICAgIGNhc2UgR2V0
Q2xvc3VyZVZhcjoKKyAgICAgICAgY2FzZSBHZXRGcm9tQXJndW1lbnRzOiB7CisgICAgICAgICAg
ICBzZXRQcmVkaWN0aW9uKG1fY3VycmVudE5vZGUtPmdldEhlYXBQcmVkaWN0aW9uKCkpOworICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKworICAgICAgICBjYXNlIEdldER5bmFtaWNWYXI6
IHsKKyAgICAgICAgICAgIHNldFByZWRpY3Rpb24oU3BlY0J5dGVjb2RlVG9wKTsKKyAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgICAgICAKKyAgICAgICAgY2FzZSBHZXRHZXR0
ZXJTZXR0ZXJCeU9mZnNldDoKKyAgICAgICAgY2FzZSBHZXRFeGVjdXRhYmxlOiB7CisgICAgICAg
ICAgICBzZXRQcmVkaWN0aW9uKFNwZWNDZWxsT3RoZXIpOworICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgIH0KKworICAgICAgICBjYXNlIEdldEdldHRlcjoKKyAgICAgICAgY2FzZSBHZXRTZXR0
ZXI6CisgICAgICAgIGNhc2UgR2V0Q2FsbGVlOgorICAgICAgICBjYXNlIE5ld0Z1bmN0aW9uOgor
ICAgICAgICBjYXNlIE5ld0dlbmVyYXRvckZ1bmN0aW9uOiB7CisgICAgICAgICAgICBzZXRQcmVk
aWN0aW9uKFNwZWNGdW5jdGlvbik7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAg
ICAgICAgICAgCisgICAgICAgIGNhc2UgR2V0QXJndW1lbnRDb3VudDogeworICAgICAgICAgICAg
c2V0UHJlZGljdGlvbihTcGVjSW50MzIpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0K
KworICAgICAgICBjYXNlIEdldFJlc3RMZW5ndGg6IHsKKyAgICAgICAgICAgIHNldFByZWRpY3Rp
b24oU3BlY0ludDMyKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisKKyAgICAgICAg
Y2FzZSBHZXRUeXBlZEFycmF5Qnl0ZU9mZnNldDoKKyAgICAgICAgY2FzZSBHZXRBcnJheUxlbmd0
aDogeworICAgICAgICAgICAgc2V0UHJlZGljdGlvbihTcGVjSW50MzIpOworICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgIH0KKworICAgICAgICBjYXNlIFN0cmluZ0NoYXJDb2RlQXQ6IHsKKyAg
ICAgICAgICAgIHNldFByZWRpY3Rpb24oU3BlY0ludDMyKTsKKyAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICB9CisgICAgICAgIGNhc2UgQXJpdGhQb3c6CisgICAgICAgIGNhc2UgQXJpdGhTcXJ0
OgorICAgICAgICBjYXNlIEFyaXRoRlJvdW5kOgorICAgICAgICBjYXNlIEFyaXRoU2luOgorICAg
ICAgICBjYXNlIEFyaXRoQ29zOgorICAgICAgICBjYXNlIEFyaXRoTG9nOiB7CisgICAgICAgICAg
ICBzZXRQcmVkaWN0aW9uKFNwZWNCeXRlY29kZURvdWJsZSk7CisgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgfQorCisgICAgICAgIGNhc2UgQXJpdGhSYW5kb206IHsKKyAgICAgICAgICAgIHNl
dFByZWRpY3Rpb24oU3BlY0RvdWJsZVJlYWwpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
IH0KKyAgICAgICAgY2FzZSBEZWxldGVCeUlkOgorICAgICAgICBjYXNlIExvZ2ljYWxOb3Q6Cisg
ICAgICAgIGNhc2UgQ29tcGFyZUxlc3M6CisgICAgICAgIGNhc2UgQ29tcGFyZUxlc3NFcToKKyAg
ICAgICAgY2FzZSBDb21wYXJlR3JlYXRlcjoKKyAgICAgICAgY2FzZSBDb21wYXJlR3JlYXRlckVx
OgorICAgICAgICBjYXNlIENvbXBhcmVFcToKKyAgICAgICAgY2FzZSBDb21wYXJlU3RyaWN0RXE6
CisgICAgICAgIGNhc2UgT3ZlcnJpZGVzSGFzSW5zdGFuY2U6CisgICAgICAgIGNhc2UgSW5zdGFu
Y2VPZjoKKyAgICAgICAgY2FzZSBJbnN0YW5jZU9mQ3VzdG9tOgorICAgICAgICBjYXNlIElzQXJy
YXlPYmplY3Q6CisgICAgICAgIGNhc2UgSXNKU0FycmF5OgorICAgICAgICBjYXNlIElzQXJyYXlD
b25zdHJ1Y3RvcjoKKyAgICAgICAgY2FzZSBJc1VuZGVmaW5lZDoKKyAgICAgICAgY2FzZSBJc0Jv
b2xlYW46CisgICAgICAgIGNhc2UgSXNOdW1iZXI6CisgICAgICAgIGNhc2UgSXNTdHJpbmc6Cisg
ICAgICAgIGNhc2UgSXNPYmplY3Q6CisgICAgICAgIGNhc2UgSXNPYmplY3RPck51bGw6CisgICAg
ICAgIGNhc2UgSXNGdW5jdGlvbjoKKyAgICAgICAgY2FzZSBJc1JlZ0V4cE9iamVjdDogeworICAg
ICAgICAgICAgc2V0UHJlZGljdGlvbihTcGVjQm9vbGVhbik7CisgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgfQorCisgICAgICAgIGNhc2UgVHlwZU9mOiB7CisgICAgICAgICAgICBzZXRQcmVk
aWN0aW9uKFNwZWNTdHJpbmdJZGVudCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQor
ICAgICAgICBjYXNlIEdldEJ1dHRlcmZseToKKyAgICAgICAgY2FzZSBHZXRJbmRleGVkUHJvcGVy
dHlTdG9yYWdlOgorICAgICAgICBjYXNlIEFsbG9jYXRlUHJvcGVydHlTdG9yYWdlOgorICAgICAg
ICBjYXNlIFJlYWxsb2NhdGVQcm9wZXJ0eVN0b3JhZ2U6IHsKKyAgICAgICAgICAgIHNldFByZWRp
Y3Rpb24oU3BlY090aGVyKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisKKyAgICAg
ICAgY2FzZSBDYWxsT2JqZWN0Q29uc3RydWN0b3I6IHsKKyAgICAgICAgICAgIHNldFByZWRpY3Rp
b24oU3BlY09iamVjdCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBj
YXNlIFNraXBTY29wZToKKyAgICAgICAgY2FzZSBHZXRHbG9iYWxPYmplY3Q6IHsKKyAgICAgICAg
ICAgIHNldFByZWRpY3Rpb24oU3BlY09iamVjdE90aGVyKTsKKyAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICB9CisKKyAgICAgICAgY2FzZSBSZXNvbHZlU2NvcGU6IHsKKyAgICAgICAgICAgIHNl
dFByZWRpY3Rpb24oU3BlY09iamVjdE90aGVyKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICB9CisgICAgICAgICAgICAKKyAgICAgICAgY2FzZSBDcmVhdGVUaGlzOgorICAgICAgICBjYXNl
IE5ld09iamVjdDogeworICAgICAgICAgICAgc2V0UHJlZGljdGlvbihTcGVjRmluYWxPYmplY3Qp
OworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICBj
YXNlIE5ld0FycmF5OgorICAgICAgICBjYXNlIE5ld0FycmF5V2l0aFNpemU6CisgICAgICAgIGNh
c2UgTmV3QXJyYXlCdWZmZXI6IHsKKyAgICAgICAgICAgIHNldFByZWRpY3Rpb24oU3BlY0FycmF5
KTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgICAgICAKKyAgICAgICAg
Y2FzZSBOZXdUeXBlZEFycmF5OiB7CisgICAgICAgICAgICBzZXRQcmVkaWN0aW9uKHNwZWN1bGF0
aW9uRnJvbVR5cGVkQXJyYXlUeXBlKG1fY3VycmVudE5vZGUtPnR5cGVkQXJyYXlUeXBlKCkpKTsK
KyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgICAgICAKKyAgICAgICAgY2Fz
ZSBOZXdSZWdleHA6IHsKKyAgICAgICAgICAgIHNldFByZWRpY3Rpb24oU3BlY1JlZ0V4cE9iamVj
dCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICAgICAgCisgICAgICAg
IGNhc2UgQ3JlYXRlQWN0aXZhdGlvbjogeworICAgICAgICAgICAgc2V0UHJlZGljdGlvbihTcGVj
T2JqZWN0T3RoZXIpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgCisg
ICAgICAgIGNhc2UgU3RyaW5nRnJvbUNoYXJDb2RlOiB7CisgICAgICAgICAgICBzZXRQcmVkaWN0
aW9uKFNwZWNTdHJpbmcpOworICAgICAgICAgICAgbV9jdXJyZW50Tm9kZS0+Y2hpbGQxKCktPm1l
cmdlRmxhZ3MoTm9kZUJ5dGVjb2RlVXNlc0FzTnVtYmVyIHwgTm9kZUJ5dGVjb2RlVXNlc0FzSW50
KTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAgIGNhc2UgU3RyaW5nQ2hh
ckF0OgpAQCAtNjE4LDQwICs4NDEsOTEgQEAgcHJpdmF0ZToKICAgICAgICAgY2FzZSBUb1N0cmlu
ZzoKICAgICAgICAgY2FzZSBNYWtlUm9wZToKICAgICAgICAgY2FzZSBTdHJDYXQ6IHsKLSAgICAg
ICAgICAgIGNoYW5nZWQgfD0gc2V0UHJlZGljdGlvbihTcGVjU3RyaW5nKTsKKyAgICAgICAgICAg
IHNldFByZWRpY3Rpb24oU3BlY1N0cmluZyk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
fQorICAgICAgICBjYXNlIE5ld1N0cmluZ09iamVjdDogeworICAgICAgICAgICAgc2V0UHJlZGlj
dGlvbihTcGVjU3RyaW5nT2JqZWN0KTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9Cisg
ICAgICAgICAgICAKKyAgICAgICAgY2FzZSBDcmVhdGVEaXJlY3RBcmd1bWVudHM6IHsKKyAgICAg
ICAgICAgIHNldFByZWRpY3Rpb24oU3BlY0RpcmVjdEFyZ3VtZW50cyk7CisgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgfQorICAgICAgICAgICAgCisgICAgICAgIGNhc2UgQ3JlYXRlU2NvcGVk
QXJndW1lbnRzOiB7CisgICAgICAgICAgICBzZXRQcmVkaWN0aW9uKFNwZWNTY29wZWRBcmd1bWVu
dHMpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAg
ICBjYXNlIENyZWF0ZUNsb25lZEFyZ3VtZW50czogeworICAgICAgICAgICAgc2V0UHJlZGljdGlv
bihTcGVjT2JqZWN0T3RoZXIpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAg
ICAgICAgIAorICAgICAgICBjYXNlIEZpYXRJbnQ1MjogeworICAgICAgICAgICAgUkVMRUFTRV9B
U1NFUlQoZW5hYmxlSW50NTIoKSk7CisgICAgICAgICAgICBzZXRQcmVkaWN0aW9uKFNwZWNNYWNo
aW5lSW50KTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisKKyAgICAgICAgY2FzZSBH
ZXRTY29wZToKKyAgICAgICAgICAgIHNldFByZWRpY3Rpb24oU3BlY09iamVjdE90aGVyKTsKKyAg
ICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGNhc2UgSW46CisgICAgICAgICAgICBzZXRQcmVk
aWN0aW9uKFNwZWNCb29sZWFuKTsKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGNhc2Ug
R2V0RW51bWVyYWJsZUxlbmd0aDogeworICAgICAgICAgICAgc2V0UHJlZGljdGlvbihTcGVjSW50
MzIpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KLSAgICAgICAgICAgIAotICAgICAg
ICBjYXNlIFRvUHJpbWl0aXZlOiB7Ci0gICAgICAgICAgICBTcGVjdWxhdGVkVHlwZSBjaGlsZCA9
IG5vZGUtPmNoaWxkMSgpLT5wcmVkaWN0aW9uKCk7Ci0gICAgICAgICAgICBpZiAoY2hpbGQpCi0g
ICAgICAgICAgICAgICAgY2hhbmdlZCB8PSBtZXJnZVByZWRpY3Rpb24ocmVzdWx0T2ZUb1ByaW1p
dGl2ZShjaGlsZCkpOworICAgICAgICBjYXNlIEhhc0dlbmVyaWNQcm9wZXJ0eToKKyAgICAgICAg
Y2FzZSBIYXNTdHJ1Y3R1cmVQcm9wZXJ0eToKKyAgICAgICAgY2FzZSBIYXNJbmRleGVkUHJvcGVy
dHk6IHsKKyAgICAgICAgICAgIHNldFByZWRpY3Rpb24oU3BlY0Jvb2xlYW4pOwogICAgICAgICAg
ICAgYnJlYWs7CiAgICAgICAgIH0KLSAgICAgICAgICAgIAotICAgICAgICBjYXNlIE5ld1N0cmlu
Z09iamVjdDogewotICAgICAgICAgICAgY2hhbmdlZCB8PSBzZXRQcmVkaWN0aW9uKFNwZWNTdHJp
bmdPYmplY3QpOworICAgICAgICBjYXNlIEdldFByb3BlcnR5RW51bWVyYXRvcjogeworICAgICAg
ICAgICAgc2V0UHJlZGljdGlvbihTcGVjQ2VsbCk7CiAgICAgICAgICAgICBicmVhazsKICAgICAg
ICAgfQotICAgICAgICAgICAgCi0gICAgICAgIGNhc2UgQ3JlYXRlRGlyZWN0QXJndW1lbnRzOiB7
Ci0gICAgICAgICAgICBjaGFuZ2VkIHw9IHNldFByZWRpY3Rpb24oU3BlY0RpcmVjdEFyZ3VtZW50
cyk7CisgICAgICAgIGNhc2UgR2V0RW51bWVyYXRvclN0cnVjdHVyZVBuYW1lOiB7CisgICAgICAg
ICAgICBzZXRQcmVkaWN0aW9uKFNwZWNDZWxsIHwgU3BlY090aGVyKTsKICAgICAgICAgICAgIGJy
ZWFrOwogICAgICAgICB9Ci0gICAgICAgICAgICAKLSAgICAgICAgY2FzZSBDcmVhdGVTY29wZWRB
cmd1bWVudHM6IHsKLSAgICAgICAgICAgIGNoYW5nZWQgfD0gc2V0UHJlZGljdGlvbihTcGVjU2Nv
cGVkQXJndW1lbnRzKTsKKyAgICAgICAgY2FzZSBHZXRFbnVtZXJhdG9yR2VuZXJpY1BuYW1lOiB7
CisgICAgICAgICAgICBzZXRQcmVkaWN0aW9uKFNwZWNDZWxsIHwgU3BlY090aGVyKTsKICAgICAg
ICAgICAgIGJyZWFrOwogICAgICAgICB9Ci0gICAgICAgICAgICAKLSAgICAgICAgY2FzZSBDcmVh
dGVDbG9uZWRBcmd1bWVudHM6IHsKLSAgICAgICAgICAgIGNoYW5nZWQgfD0gc2V0UHJlZGljdGlv
bihTcGVjT2JqZWN0T3RoZXIpOworICAgICAgICBjYXNlIFRvSW5kZXhTdHJpbmc6IHsKKyAgICAg
ICAgICAgIHNldFByZWRpY3Rpb24oU3BlY1N0cmluZyk7CiAgICAgICAgICAgICBicmVhazsKICAg
ICAgICAgfQotICAgICAgICAgICAgCi0gICAgICAgIGNhc2UgRmlhdEludDUyOiB7Ci0gICAgICAg
ICAgICBSRUxFQVNFX0FTU0VSVChlbmFibGVJbnQ1MigpKTsKLSAgICAgICAgICAgIGNoYW5nZWQg
fD0gc2V0UHJlZGljdGlvbihTcGVjTWFjaGluZUludCk7CisKKyAgICAgICAgY2FzZSBHZXRMb2Nh
bDoKKyAgICAgICAgY2FzZSBTZXRMb2NhbDoKKyAgICAgICAgY2FzZSBVSW50MzJUb051bWJlcjoK
KyAgICAgICAgY2FzZSBWYWx1ZUFkZDoKKyAgICAgICAgY2FzZSBBcml0aEFkZDoKKyAgICAgICAg
Y2FzZSBBcml0aFN1YjoKKyAgICAgICAgY2FzZSBBcml0aE5lZ2F0ZToKKyAgICAgICAgY2FzZSBB
cml0aE1pbjoKKyAgICAgICAgY2FzZSBBcml0aE1heDoKKyAgICAgICAgY2FzZSBBcml0aE11bDoK
KyAgICAgICAgY2FzZSBBcml0aERpdjoKKyAgICAgICAgY2FzZSBBcml0aE1vZDoKKyAgICAgICAg
Y2FzZSBBcml0aFJvdW5kOgorICAgICAgICBjYXNlIEFyaXRoRmxvb3I6CisgICAgICAgIGNhc2Ug
QXJpdGhDZWlsOgorICAgICAgICBjYXNlIEFyaXRoVHJ1bmM6CisgICAgICAgIGNhc2UgQXJpdGhB
YnM6CisgICAgICAgIGNhc2UgR2V0QnlWYWw6CisgICAgICAgIGNhc2UgVG9UaGlzOgorICAgICAg
ICBjYXNlIFRvUHJpbWl0aXZlOiB7CisgICAgICAgICAgICBtX2RlcGVuZGVudE5vZGVzLmFwcGVu
ZChtX2N1cnJlbnROb2RlKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAKQEAgLTY5
Niw3ICs5NzAsNyBAQCBwcml2YXRlOgogICAgICAgICBjYXNlIExhenlKU0NvbnN0YW50OiB7CiAg
ICAgICAgICAgICAvLyBUaGlzIG5vZGUgc2hvdWxkIG5ldmVyIGJlIHZpc2libGUgYXQgdGhpcyBz
dGFnZSBvZiBjb21waWxhdGlvbi4gSXQgaXMKICAgICAgICAgICAgIC8vIGluc2VydGVkIGJ5IGZp
eHVwKCksIHdoaWNoIGZvbGxvd3MgdGhpcyBwaGFzZS4KLSAgICAgICAgICAgIERGR19DUkFTSCht
X2dyYXBoLCBub2RlLCAiVW5leHBlY3RlZCBub2RlIGR1cmluZyBwcmVkaWN0aW9uIHByb3BhZ2F0
aW9uIik7CisgICAgICAgICAgICBERkdfQ1JBU0gobV9ncmFwaCwgbV9jdXJyZW50Tm9kZSwgIlVu
ZXhwZWN0ZWQgbm9kZSBkdXJpbmcgcHJlZGljdGlvbiBwcm9wYWdhdGlvbiIpOwogICAgICAgICAg
ICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgCkBAIC03MTAsNDEgKzk4NCw2IEBAIHByaXZh
dGU6CiAgICAgICAgICAgICAvLyBUaGVzZSBkb24ndCBnZXQgaW5zZXJ0ZWQgdW50aWwgd2UgZ28g
aW50byBTU0EuCiAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAg
ICAgICAgICAgYnJlYWs7Ci0gICAgCi0gICAgICAgIGNhc2UgR2V0U2NvcGU6Ci0gICAgICAgICAg
ICBjaGFuZ2VkIHw9IHNldFByZWRpY3Rpb24oU3BlY09iamVjdE90aGVyKTsKLSAgICAgICAgICAg
IGJyZWFrOwotCi0gICAgICAgIGNhc2UgSW46Ci0gICAgICAgICAgICBjaGFuZ2VkIHw9IHNldFBy
ZWRpY3Rpb24oU3BlY0Jvb2xlYW4pOwotICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgY2Fz
ZSBHZXRFbnVtZXJhYmxlTGVuZ3RoOiB7Ci0gICAgICAgICAgICBjaGFuZ2VkIHw9IHNldFByZWRp
Y3Rpb24oU3BlY0ludDMyKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAg
IGNhc2UgSGFzR2VuZXJpY1Byb3BlcnR5OgotICAgICAgICBjYXNlIEhhc1N0cnVjdHVyZVByb3Bl
cnR5OgotICAgICAgICBjYXNlIEhhc0luZGV4ZWRQcm9wZXJ0eTogewotICAgICAgICAgICAgY2hh
bmdlZCB8PSBzZXRQcmVkaWN0aW9uKFNwZWNCb29sZWFuKTsKLSAgICAgICAgICAgIGJyZWFrOwot
ICAgICAgICB9Ci0gICAgICAgIGNhc2UgR2V0UHJvcGVydHlFbnVtZXJhdG9yOiB7Ci0gICAgICAg
ICAgICBjaGFuZ2VkIHw9IHNldFByZWRpY3Rpb24oU3BlY0NlbGwpOwotICAgICAgICAgICAgYnJl
YWs7Ci0gICAgICAgIH0KLSAgICAgICAgY2FzZSBHZXRFbnVtZXJhdG9yU3RydWN0dXJlUG5hbWU6
IHsKLSAgICAgICAgICAgIGNoYW5nZWQgfD0gc2V0UHJlZGljdGlvbihTcGVjQ2VsbCB8IFNwZWNP
dGhlcik7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBjYXNlIEdldEVu
dW1lcmF0b3JHZW5lcmljUG5hbWU6IHsKLSAgICAgICAgICAgIGNoYW5nZWQgfD0gc2V0UHJlZGlj
dGlvbihTcGVjQ2VsbCB8IFNwZWNPdGhlcik7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAg
fQotICAgICAgICBjYXNlIFRvSW5kZXhTdHJpbmc6IHsKLSAgICAgICAgICAgIGNoYW5nZWQgfD0g
c2V0UHJlZGljdGlvbihTcGVjU3RyaW5nKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9
CiAKICNpZm5kZWYgTkRFQlVHCiAgICAgICAgIC8vIFRoZXNlIGdldCBpZ25vcmVkIGJlY2F1c2Ug
dGhleSBkb24ndCByZXR1cm4gYW55dGhpbmcuCkBAIC04MjUsMjAyICsxMDY0LDYgQEAgcHJpdmF0
ZToKICAgICAgICAgICAgIGJyZWFrOwogI2VuZGlmCiAgICAgICAgIH0KLQotICAgICAgICBtX2No
YW5nZWQgfD0gY2hhbmdlZDsKLSAgICB9Ci0gICAgICAgIAotICAgIHZvaWQgcHJvcGFnYXRlRm9y
d2FyZCgpCi0gICAgewotICAgICAgICBmb3IgKEJsb2NrSW5kZXggYmxvY2tJbmRleCA9IDA7IGJs
b2NrSW5kZXggPCBtX2dyYXBoLm51bUJsb2NrcygpOyArK2Jsb2NrSW5kZXgpIHsKLSAgICAgICAg
ICAgIEJhc2ljQmxvY2sqIGJsb2NrID0gbV9ncmFwaC5ibG9jayhibG9ja0luZGV4KTsKLSAgICAg
ICAgICAgIGlmICghYmxvY2spCi0gICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAg
ICBBU1NFUlQoYmxvY2stPmlzUmVhY2hhYmxlKTsKLSAgICAgICAgICAgIGZvciAodW5zaWduZWQg
aSA9IDA7IGkgPCBibG9jay0+c2l6ZSgpOyArK2kpIHsKLSAgICAgICAgICAgICAgICBtX2N1cnJl
bnROb2RlID0gYmxvY2stPmF0KGkpOwotICAgICAgICAgICAgICAgIHByb3BhZ2F0ZShtX2N1cnJl
bnROb2RlKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0KLSAgICAKLSAgICB2b2lk
IHByb3BhZ2F0ZUJhY2t3YXJkKCkKLSAgICB7Ci0gICAgICAgIGZvciAoQmxvY2tJbmRleCBibG9j
a0luZGV4ID0gbV9ncmFwaC5udW1CbG9ja3MoKTsgYmxvY2tJbmRleC0tOykgewotICAgICAgICAg
ICAgQmFzaWNCbG9jayogYmxvY2sgPSBtX2dyYXBoLmJsb2NrKGJsb2NrSW5kZXgpOwotICAgICAg
ICAgICAgaWYgKCFibG9jaykKLSAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAg
IEFTU0VSVChibG9jay0+aXNSZWFjaGFibGUpOwotICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBp
ID0gYmxvY2stPnNpemUoKTsgaS0tOykgewotICAgICAgICAgICAgICAgIG1fY3VycmVudE5vZGUg
PSBibG9jay0+YXQoaSk7Ci0gICAgICAgICAgICAgICAgcHJvcGFnYXRlKG1fY3VycmVudE5vZGUp
OwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQotICAgIAotICAgIHZvaWQgZG9Eb3Vi
bGVWb3RpbmcoTm9kZSogbm9kZSwgZmxvYXQgd2VpZ2h0KQotICAgIHsKLSAgICAgICAgLy8gTG9v
cCBwcmUtaGVhZGVycyBjcmVhdGVkIGJ5IE9TUiBlbnRyeXBvaW50IGNyZWF0aW9uIG1heSBoYXZl
IE5hTiB3ZWlnaHQgdG8gaW5kaWNhdGUKLSAgICAgICAgLy8gdGhhdCB3ZSBhY3R1YWxseSBkb24n
dCBrbm93IHRoZXkgd2VpZ2h0LiBBc3N1bWUgdGhhdCB0aGV5IGV4ZWN1dGUgb25jZS4gVGhpcyB0
dXJucwotICAgICAgICAvLyBvdXQgdG8gYmUgYW4gT0sgYXNzdW1wdGlvbiBzaW5jZSB0aGUgcHJl
LWhlYWRlciBkb2Vzbid0IGhhdmUgYW55IG1lYW5pbmdmdWwgY29kZS4KLSAgICAgICAgaWYgKHdl
aWdodCAhPSB3ZWlnaHQpCi0gICAgICAgICAgICB3ZWlnaHQgPSAxOwotICAgICAgICAKLSAgICAg
ICAgc3dpdGNoIChub2RlLT5vcCgpKSB7Ci0gICAgICAgIGNhc2UgVmFsdWVBZGQ6Ci0gICAgICAg
IGNhc2UgQXJpdGhBZGQ6Ci0gICAgICAgIGNhc2UgQXJpdGhTdWI6IHsKLSAgICAgICAgICAgIFNw
ZWN1bGF0ZWRUeXBlIGxlZnQgPSBub2RlLT5jaGlsZDEoKS0+cHJlZGljdGlvbigpOwotICAgICAg
ICAgICAgU3BlY3VsYXRlZFR5cGUgcmlnaHQgPSBub2RlLT5jaGlsZDIoKS0+cHJlZGljdGlvbigp
OwotICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgRG91YmxlQmFsbG90IGJhbGxvdDsKLSAg
ICAgICAgICAgICAgICAKLSAgICAgICAgICAgIGlmIChpc0Z1bGxOdW1iZXJTcGVjdWxhdGlvbihs
ZWZ0KQotICAgICAgICAgICAgICAgICYmIGlzRnVsbE51bWJlclNwZWN1bGF0aW9uKHJpZ2h0KQot
ICAgICAgICAgICAgICAgICYmICFtX2dyYXBoLmFkZFNob3VsZFNwZWN1bGF0ZUludDMyKG5vZGUs
IG1fcGFzcykKLSAgICAgICAgICAgICAgICAmJiAhbV9ncmFwaC5hZGRTaG91bGRTcGVjdWxhdGVN
YWNoaW5lSW50KG5vZGUpKQotICAgICAgICAgICAgICAgIGJhbGxvdCA9IFZvdGVEb3VibGU7Ci0g
ICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgYmFsbG90ID0gVm90ZVZhbHVlOwotICAg
ICAgICAgICAgICAgIAotICAgICAgICAgICAgbV9ncmFwaC52b3RlTm9kZShub2RlLT5jaGlsZDEo
KSwgYmFsbG90LCB3ZWlnaHQpOwotICAgICAgICAgICAgbV9ncmFwaC52b3RlTm9kZShub2RlLT5j
aGlsZDIoKSwgYmFsbG90LCB3ZWlnaHQpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0K
LSAgICAgICAgICAgICAgICAKLSAgICAgICAgY2FzZSBBcml0aE11bDogewotICAgICAgICAgICAg
U3BlY3VsYXRlZFR5cGUgbGVmdCA9IG5vZGUtPmNoaWxkMSgpLT5wcmVkaWN0aW9uKCk7Ci0gICAg
ICAgICAgICBTcGVjdWxhdGVkVHlwZSByaWdodCA9IG5vZGUtPmNoaWxkMigpLT5wcmVkaWN0aW9u
KCk7Ci0gICAgICAgICAgICAgICAgCi0gICAgICAgICAgICBEb3VibGVCYWxsb3QgYmFsbG90Owot
ICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgaWYgKGlzRnVsbE51bWJlclNwZWN1bGF0aW9u
KGxlZnQpCi0gICAgICAgICAgICAgICAgJiYgaXNGdWxsTnVtYmVyU3BlY3VsYXRpb24ocmlnaHQp
Ci0gICAgICAgICAgICAgICAgJiYgIW1fZ3JhcGguYmluYXJ5QXJpdGhTaG91bGRTcGVjdWxhdGVJ
bnQzMihub2RlLCBtX3Bhc3MpCi0gICAgICAgICAgICAgICAgJiYgIW1fZ3JhcGguYmluYXJ5QXJp
dGhTaG91bGRTcGVjdWxhdGVNYWNoaW5lSW50KG5vZGUsIG1fcGFzcykpCi0gICAgICAgICAgICAg
ICAgYmFsbG90ID0gVm90ZURvdWJsZTsKLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAg
ICBiYWxsb3QgPSBWb3RlVmFsdWU7Ci0gICAgICAgICAgICAgICAgCi0gICAgICAgICAgICBtX2dy
YXBoLnZvdGVOb2RlKG5vZGUtPmNoaWxkMSgpLCBiYWxsb3QsIHdlaWdodCk7Ci0gICAgICAgICAg
ICBtX2dyYXBoLnZvdGVOb2RlKG5vZGUtPmNoaWxkMigpLCBiYWxsb3QsIHdlaWdodCk7Ci0gICAg
ICAgICAgICBicmVhazsKLSAgICAgICAgfQotCi0gICAgICAgIGNhc2UgQXJpdGhNaW46Ci0gICAg
ICAgIGNhc2UgQXJpdGhNYXg6Ci0gICAgICAgIGNhc2UgQXJpdGhNb2Q6Ci0gICAgICAgIGNhc2Ug
QXJpdGhEaXY6IHsKLSAgICAgICAgICAgIFNwZWN1bGF0ZWRUeXBlIGxlZnQgPSBub2RlLT5jaGls
ZDEoKS0+cHJlZGljdGlvbigpOwotICAgICAgICAgICAgU3BlY3VsYXRlZFR5cGUgcmlnaHQgPSBu
b2RlLT5jaGlsZDIoKS0+cHJlZGljdGlvbigpOwotICAgICAgICAgICAgICAgIAotICAgICAgICAg
ICAgRG91YmxlQmFsbG90IGJhbGxvdDsKLSAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgIGlm
IChpc0Z1bGxOdW1iZXJTcGVjdWxhdGlvbihsZWZ0KQotICAgICAgICAgICAgICAgICYmIGlzRnVs
bE51bWJlclNwZWN1bGF0aW9uKHJpZ2h0KQotICAgICAgICAgICAgICAgICYmICFtX2dyYXBoLmJp
bmFyeUFyaXRoU2hvdWxkU3BlY3VsYXRlSW50MzIobm9kZSwgbV9wYXNzKSkKLSAgICAgICAgICAg
ICAgICBiYWxsb3QgPSBWb3RlRG91YmxlOwotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAg
ICAgIGJhbGxvdCA9IFZvdGVWYWx1ZTsKLSAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgIG1f
Z3JhcGgudm90ZU5vZGUobm9kZS0+Y2hpbGQxKCksIGJhbGxvdCwgd2VpZ2h0KTsKLSAgICAgICAg
ICAgIG1fZ3JhcGgudm90ZU5vZGUobm9kZS0+Y2hpbGQyKCksIGJhbGxvdCwgd2VpZ2h0KTsKLSAg
ICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgICAgICAgICAgCi0gICAgICAgIGNh
c2UgQXJpdGhBYnM6Ci0gICAgICAgICAgICBEb3VibGVCYWxsb3QgYmFsbG90OwotICAgICAgICAg
ICAgaWYgKG5vZGUtPmNoaWxkMSgpLT5zaG91bGRTcGVjdWxhdGVOdW1iZXIoKQotICAgICAgICAg
ICAgICAgICYmICFtX2dyYXBoLnVuYXJ5QXJpdGhTaG91bGRTcGVjdWxhdGVJbnQzMihub2RlLCBt
X3Bhc3MpKQotICAgICAgICAgICAgICAgIGJhbGxvdCA9IFZvdGVEb3VibGU7Ci0gICAgICAgICAg
ICBlbHNlCi0gICAgICAgICAgICAgICAgYmFsbG90ID0gVm90ZVZhbHVlOwotICAgICAgICAgICAg
ICAgIAotICAgICAgICAgICAgbV9ncmFwaC52b3RlTm9kZShub2RlLT5jaGlsZDEoKSwgYmFsbG90
LCB3ZWlnaHQpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgCi0gICAgICAg
IGNhc2UgQXJpdGhTcXJ0OgotICAgICAgICBjYXNlIEFyaXRoQ29zOgotICAgICAgICBjYXNlIEFy
aXRoU2luOgotICAgICAgICBjYXNlIEFyaXRoTG9nOgotICAgICAgICAgICAgaWYgKG5vZGUtPmNo
aWxkMSgpLT5zaG91bGRTcGVjdWxhdGVOdW1iZXIoKSkKLSAgICAgICAgICAgICAgICBtX2dyYXBo
LnZvdGVOb2RlKG5vZGUtPmNoaWxkMSgpLCBWb3RlRG91YmxlLCB3ZWlnaHQpOwotICAgICAgICAg
ICAgZWxzZQotICAgICAgICAgICAgICAgIG1fZ3JhcGgudm90ZU5vZGUobm9kZS0+Y2hpbGQxKCks
IFZvdGVWYWx1ZSwgd2VpZ2h0KTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAg
IAotICAgICAgICBjYXNlIFNldExvY2FsOiB7Ci0gICAgICAgICAgICBTcGVjdWxhdGVkVHlwZSBw
cmVkaWN0aW9uID0gbm9kZS0+Y2hpbGQxKCktPnByZWRpY3Rpb24oKTsKLSAgICAgICAgICAgIGlm
IChpc0RvdWJsZVNwZWN1bGF0aW9uKHByZWRpY3Rpb24pKQotICAgICAgICAgICAgICAgIG5vZGUt
PnZhcmlhYmxlQWNjZXNzRGF0YSgpLT52b3RlKFZvdGVEb3VibGUsIHdlaWdodCk7Ci0gICAgICAg
ICAgICBlbHNlIGlmICgKLSAgICAgICAgICAgICAgICAhaXNGdWxsTnVtYmVyU3BlY3VsYXRpb24o
cHJlZGljdGlvbikKLSAgICAgICAgICAgICAgICB8fCBpc0ludDMyU3BlY3VsYXRpb24ocHJlZGlj
dGlvbikgfHwgaXNNYWNoaW5lSW50U3BlY3VsYXRpb24ocHJlZGljdGlvbikpCi0gICAgICAgICAg
ICAgICAgbm9kZS0+dmFyaWFibGVBY2Nlc3NEYXRhKCktPnZvdGUoVm90ZVZhbHVlLCB3ZWlnaHQp
OwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLQotICAgICAgICBjYXNlIFB1dEJ5VmFs
RGlyZWN0OgotICAgICAgICBjYXNlIFB1dEJ5VmFsOgotICAgICAgICBjYXNlIFB1dEJ5VmFsQWxp
YXM6IHsKLSAgICAgICAgICAgIEVkZ2UgY2hpbGQxID0gbV9ncmFwaC52YXJBcmdDaGlsZChub2Rl
LCAwKTsKLSAgICAgICAgICAgIEVkZ2UgY2hpbGQyID0gbV9ncmFwaC52YXJBcmdDaGlsZChub2Rl
LCAxKTsKLSAgICAgICAgICAgIEVkZ2UgY2hpbGQzID0gbV9ncmFwaC52YXJBcmdDaGlsZChub2Rl
LCAyKTsKLSAgICAgICAgICAgIG1fZ3JhcGgudm90ZU5vZGUoY2hpbGQxLCBWb3RlVmFsdWUsIHdl
aWdodCk7Ci0gICAgICAgICAgICBtX2dyYXBoLnZvdGVOb2RlKGNoaWxkMiwgVm90ZVZhbHVlLCB3
ZWlnaHQpOwotICAgICAgICAgICAgc3dpdGNoIChub2RlLT5hcnJheU1vZGUoKS50eXBlKCkpIHsK
LSAgICAgICAgICAgIGNhc2UgQXJyYXk6OkRvdWJsZToKLSAgICAgICAgICAgICAgICBtX2dyYXBo
LnZvdGVOb2RlKGNoaWxkMywgVm90ZURvdWJsZSwgd2VpZ2h0KTsKLSAgICAgICAgICAgICAgICBi
cmVhazsKLSAgICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICAgICAgbV9ncmFwaC52b3Rl
Tm9kZShjaGlsZDMsIFZvdGVWYWx1ZSwgd2VpZ2h0KTsKLSAgICAgICAgICAgICAgICBicmVhazsK
LSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgICAg
ICAKLSAgICAgICAgY2FzZSBNb3ZIaW50OgotICAgICAgICAgICAgLy8gSWdub3JlIHRoZXNlIHNp
bmNlIHRoZXkgaGF2ZSBubyBlZmZlY3Qgb24gaW4tREZHIGV4ZWN1dGlvbi4KLSAgICAgICAgICAg
IGJyZWFrOwotICAgICAgICAgICAgCi0gICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICBtX2dy
YXBoLnZvdGVDaGlsZHJlbihub2RlLCBWb3RlVmFsdWUsIHdlaWdodCk7Ci0gICAgICAgICAgICBi
cmVhazsKLSAgICAgICAgfQotICAgIH0KLSAgICAKLSAgICB2b2lkIGRvUm91bmRPZkRvdWJsZVZv
dGluZygpCi0gICAgewotICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbV9ncmFwaC5t
X3ZhcmlhYmxlQWNjZXNzRGF0YS5zaXplKCk7ICsraSkKLSAgICAgICAgICAgIG1fZ3JhcGgubV92
YXJpYWJsZUFjY2Vzc0RhdGFbaV0uZmluZCgpLT5jbGVhclZvdGVzKCk7Ci0gICAgICAgIGZvciAo
QmxvY2tJbmRleCBibG9ja0luZGV4ID0gMDsgYmxvY2tJbmRleCA8IG1fZ3JhcGgubnVtQmxvY2tz
KCk7ICsrYmxvY2tJbmRleCkgewotICAgICAgICAgICAgQmFzaWNCbG9jayogYmxvY2sgPSBtX2dy
YXBoLmJsb2NrKGJsb2NrSW5kZXgpOwotICAgICAgICAgICAgaWYgKCFibG9jaykKLSAgICAgICAg
ICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgIEFTU0VSVChibG9jay0+aXNSZWFjaGFibGUp
OwotICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGJsb2NrLT5zaXplKCk7ICsr
aSkgewotICAgICAgICAgICAgICAgIG1fY3VycmVudE5vZGUgPSBibG9jay0+YXQoaSk7Ci0gICAg
ICAgICAgICAgICAgZG9Eb3VibGVWb3RpbmcobV9jdXJyZW50Tm9kZSwgYmxvY2stPmV4ZWN1dGlv
bkNvdW50KTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICBmb3IgKHVuc2lnbmVk
IGkgPSAwOyBpIDwgbV9ncmFwaC5tX3ZhcmlhYmxlQWNjZXNzRGF0YS5zaXplKCk7ICsraSkgewot
ICAgICAgICAgICAgVmFyaWFibGVBY2Nlc3NEYXRhKiB2YXJpYWJsZUFjY2Vzc0RhdGEgPSAmbV9n
cmFwaC5tX3ZhcmlhYmxlQWNjZXNzRGF0YVtpXTsKLSAgICAgICAgICAgIGlmICghdmFyaWFibGVB
Y2Nlc3NEYXRhLT5pc1Jvb3QoKSkKLSAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAg
ICAgIG1fY2hhbmdlZCB8PSB2YXJpYWJsZUFjY2Vzc0RhdGEtPnRhbGx5Vm90ZXNGb3JTaG91bGRV
c2VEb3VibGVGb3JtYXQoKTsKLSAgICAgICAgfQotICAgICAgICBwcm9wYWdhdGVUaHJvdWdoQXJn
dW1lbnRQb3NpdGlvbnMoKTsKLSAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG1fZ3Jh
cGgubV92YXJpYWJsZUFjY2Vzc0RhdGEuc2l6ZSgpOyArK2kpIHsKLSAgICAgICAgICAgIFZhcmlh
YmxlQWNjZXNzRGF0YSogdmFyaWFibGVBY2Nlc3NEYXRhID0gJm1fZ3JhcGgubV92YXJpYWJsZUFj
Y2Vzc0RhdGFbaV07Ci0gICAgICAgICAgICBpZiAoIXZhcmlhYmxlQWNjZXNzRGF0YS0+aXNSb290
KCkpCi0gICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICBtX2NoYW5nZWQgfD0g
dmFyaWFibGVBY2Nlc3NEYXRhLT5tYWtlUHJlZGljdGlvbkZvckRvdWJsZUZvcm1hdCgpOwotICAg
ICAgICB9Ci0gICAgfQotICAgIAotICAgIHZvaWQgcHJvcGFnYXRlVGhyb3VnaEFyZ3VtZW50UG9z
aXRpb25zKCkKLSAgICB7Ci0gICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBtX2dyYXBo
Lm1fYXJndW1lbnRQb3NpdGlvbnMuc2l6ZSgpOyArK2kpCi0gICAgICAgICAgICBtX2NoYW5nZWQg
fD0gbV9ncmFwaC5tX2FyZ3VtZW50UG9zaXRpb25zW2ldLm1lcmdlQXJndW1lbnRQcmVkaWN0aW9u
QXdhcmVuZXNzKCk7CiAgICAgfQogCiAgICAgU3BlY3VsYXRlZFR5cGUgcmVzdWx0T2ZUb1ByaW1p
dGl2ZShTcGVjdWxhdGVkVHlwZSB0eXBlKQpAQCAtMTAzNiwxMSArMTA3OSwxNCBAQCBwcml2YXRl
OgogCiAgICAgICAgIHJldHVybiB0eXBlOwogICAgIH0KLSAgICAKKworICAgIFZlY3RvcjxOb2Rl
Kj4gbV9kZXBlbmRlbnROb2RlczsKICAgICBOb2RlKiBtX2N1cnJlbnROb2RlOwogICAgIGJvb2wg
bV9jaGFuZ2VkOwogICAgIFByZWRpY3Rpb25QYXNzIG1fcGFzczsgLy8gV2UgdXNlIGRpZmZlcmVu
dCBsb2dpYyBmb3IgY29uc2lkZXJpbmcgcHJlZGljdGlvbnMgZGVwZW5kaW5nIG9uIGhvdyBmYXIg
YWxvbmcgd2UgYXJlIGluIHByb3BhZ2F0aW9uLgogfTsKKworfSAvLyBBbm9ueW1vdXMgbmFtZXNw
YWNlLgogICAgIAogYm9vbCBwZXJmb3JtUHJlZGljdGlvblByb3BhZ2F0aW9uKEdyYXBoJiBncmFw
aCkKIHsK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>277104</attachid>
            <date>2016-04-22 15:11:06 -0700</date>
            <delta_ts>2016-04-22 16:10:07 -0700</delta_ts>
            <desc>Patch for landing</desc>
            <filename>bug-156891-20160422151129.patch</filename>
            <type>text/plain</type>
            <size>36589</size>
            <attacher name="Benjamin Poulain">benjamin</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTk5OTEzCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCBh
Y2FiMjUyZDg4M2Y1ZjIwMWU5ZWZlMzdkZmMxZjMyNDYzYTQ0OWM4Li44ZGQxNmU5MjUzMDUxZGZm
ZGZmMmZkMzJmZDExNmRmZjdmZWNhMDlkIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSw0NCBAQAorMjAxNi0wNC0yMiAgQmVuamFtaW4gUG91bGFpbiAgPGJwb3VsYWluQGFwcGxl
LmNvbT4KKworICAgICAgICBbSlNDXSBQcmVkaWN0aW9uUHJvcGFnYXRpb24gc2hvdWxkIG5vdCBi
ZSBpbiB0aGUgdG9wIDUgaGVhdmllc3QgcGhhc2VzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNTY4OTEKKworICAgICAgICBSZXZpZXdlZCBieSBNYXJr
IExhbS4KKworICAgICAgICBJbiBERkcsIFByZWRpY3Rpb25Qcm9wYWdhdGlvbiBpcyBvZnRlbiB3
YXkgdG9vIGhpZ2ggaW4gcHJvZmlsZXMuCisgICAgICAgIEl0IGlzIGEgc2ltcGxlIHBoYXNlLCBp
dCBzaG91bGQgbm90IGJlIHRoYXQgaG90LgorCisgICAgICAgIE1vc3Qgb2YgdGhlIHRpbWUgaXMg
c3BlbnQgYWNjZXNzaW5nIG1lbW9yeS4gVGhpcyBwYXRjaCBhdHRlbXB0cworICAgICAgICB0byBy
ZWR1Y2UgdGhhdC4KKworICAgICAgICBGaXJzdCwgcHJvcGFnYXRlKCkgaXMgc3BsaXQgaW4gcHJv
Y2Vzc0ludmFyaWFudHMoKSBhbmQgcHJvcGFnYXRlcygpLgorICAgICAgICBUaGUgc3RlcCBwcm9j
ZXNzSW52YXJpYW50cygpIHNldHMgYWxsIHRoZSB0eXBlcyBmb3Igbm9kZXMgZm9yIHdoaWNoCisg
ICAgICAgIHRoZSB0eXBlIGRvZXMgbm90IGRlcGVuZHMgb24gb3RoZXIgbm9kZXMuCisKKyAgICAg
ICAgQWRkaW5nIHByb2Nlc3NJbnZhcmlhbnRzKCkgbG93ZXJzIHR3byBob3RzcG90IGluc2lkZSBQ
cmVkaWN0aW9uUHJvcGFnYXRpb246CisgICAgICAgIHNwZWN1bGF0aW9uRnJvbVZhbHVlKCkgYW5k
IHNldFByZWRpY3Rpb24oKS4KKworICAgICAgICBOZXh0LCB0byBhdm9pZCB0b3VjaGluZyBhbGwg
dGhlIG5vZGVzIGF0IGV2ZXJ5IG9wZXJhdGlvbiwgd2Uga2VlcAorICAgICAgICB0cmFjayBvZiB0
aGUgbm9kZXMgdGhhdCBhY3R1YWxseSBuZWVkIHByb3BhZ2F0ZSgpLgorICAgICAgICBUaGUgdmVj
dG9yIG1fZGVwZW5kZW50Tm9kZXMga2VlcHMgdGhlIGxpc3Qgb2YgdGhvc2Ugbm9kZXMgYW5kIHBy
b3BhZ2F0ZSgpCisgICAgICAgIG9ubHkgbmVlZCB0byBwcm9jZXNzIHRoZW0gYXQgZWFjaCBwaGFz
ZS4KKworICAgICAgICBUaGlzIGlzIGEgc21hbGxlciBnYWluIGJlY2F1c2UgZ3Jvd2luZyBtX2Rl
cGVuZGVudE5vZGVzIG5lZ2F0ZXMKKyAgICAgICAgc29tZSBvZiB0aGUgZ2FpbnMuCisKKyAgICAg
ICAgT24gM2QtY3ViZSwgdGhpcyBtb3ZlcyBQcmVkaWN0aW9uUHJvcGFnYXRpb24gZnJvbSBmaWZ0
aCBwb3NpdGlvbgorICAgICAgICB0byBuaW50aC4gQSBsb3Qgb2YgdGhlIHJlbWFpbmluZyBvdmVy
aGVhZCBpcyBjYXVzZWQgYnkgZG91YmxlLXZvdGluZworICAgICAgICBhbmQgY2Fubm90IGJlIGZp
eGVkIGJ5IG1vdmluZyBzdHVmZiBhcm91bmQuCisKKyAgICAgICAgKiBkZmcvREZHUHJlZGljdGlv
blByb3BhZ2F0aW9uUGhhc2UuY3BwOgorICAgICAgICAoSlNDOjpERkc6OlByZWRpY3Rpb25Qcm9w
YWdhdGlvblBoYXNlOjpwcm9wYWdhdGVUb0ZpeHBvaW50KTogRGVsZXRlZC4KKyAgICAgICAgKEpT
Qzo6REZHOjpQcmVkaWN0aW9uUHJvcGFnYXRpb25QaGFzZTo6cHJvcGFnYXRlKTogRGVsZXRlZC4K
KyAgICAgICAgKEpTQzo6REZHOjpQcmVkaWN0aW9uUHJvcGFnYXRpb25QaGFzZTo6cHJvcGFnYXRl
Rm9yd2FyZCk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkRGRzo6UHJlZGljdGlvblByb3BhZ2F0
aW9uUGhhc2U6OnByb3BhZ2F0ZUJhY2t3YXJkKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6REZH
OjpQcmVkaWN0aW9uUHJvcGFnYXRpb25QaGFzZTo6ZG9Eb3VibGVWb3RpbmcpOiBEZWxldGVkLgor
ICAgICAgICAoSlNDOjpERkc6OlByZWRpY3Rpb25Qcm9wYWdhdGlvblBoYXNlOjpkb1JvdW5kT2ZE
b3VibGVWb3RpbmcpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpERkc6OlByZWRpY3Rpb25Qcm9w
YWdhdGlvblBoYXNlOjpwcm9wYWdhdGVUaHJvdWdoQXJndW1lbnRQb3NpdGlvbnMpOiBEZWxldGVk
LgorCiAyMDE2LTA0LTIyICBCZW5qYW1pbiBQb3VsYWluICA8YmVuamFtaW5Ad2Via2l0Lm9yZz4K
IAogICAgICAgICBBdHRlbXB0IHRvIGZpeCB0aGUgQ0xvb3AgYWZ0ZXIgcjE5OTg2NgpkaWZmIC0t
Z2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQcmVkaWN0aW9uUHJvcGFnYXRpb25Q
aGFzZS5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1ByZWRpY3Rpb25Qcm9wYWdh
dGlvblBoYXNlLmNwcAppbmRleCAxZTE3NWQyYmZlZTQ1OGIwMTkxNzUzMGQxNDBiZjFmOGEyZTE3
MWVhLi43NmNjYzBlZjA3MGZhM2MwYTJkYzEzZWQxYmY5NmExYjg1YmE1MTFkIDEwMDY0NAotLS0g
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1ByZWRpY3Rpb25Qcm9wYWdhdGlvblBoYXNl
LmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1ByZWRpY3Rpb25Qcm9wYWdh
dGlvblBoYXNlLmNwcApAQCAtMzQsNiArMzQsMTAgQEAKIAogbmFtZXNwYWNlIEpTQyB7IG5hbWVz
cGFjZSBERkcgewogCituYW1lc3BhY2UgeworCitib29sIHZlcmJvc2VGaXhQb2ludExvb3BzID0g
ZmFsc2U7CisKIGNsYXNzIFByZWRpY3Rpb25Qcm9wYWdhdGlvblBoYXNlIDogcHVibGljIFBoYXNl
IHsKIHB1YmxpYzoKICAgICBQcmVkaWN0aW9uUHJvcGFnYXRpb25QaGFzZShHcmFwaCYgZ3JhcGgp
CkBAIC00OCw2ICs1Miw4IEBAIHB1YmxpYzoKIAogICAgICAgICBwcm9wYWdhdGVUaHJvdWdoQXJn
dW1lbnRQb3NpdGlvbnMoKTsKIAorICAgICAgICBwcm9jZXNzSW52YXJpYW50cygpOworCiAgICAg
ICAgIG1fcGFzcyA9IFByaW1hcnlQYXNzOwogICAgICAgICBwcm9wYWdhdGVUb0ZpeHBvaW50KCk7
CiAgICAgICAgIApAQCAtNTUsNyArNjEsMTEgQEAgcHVibGljOgogICAgICAgICBwcm9wYWdhdGVU
b0ZpeHBvaW50KCk7CiAgICAgICAgIAogICAgICAgICBtX3Bhc3MgPSBEb3VibGVWb3RpbmdQYXNz
OworICAgICAgICB1bnNpZ25lZCBjb3VudGVyID0gMDsKICAgICAgICAgZG8geworICAgICAgICAg
ICAgaWYgKHZlcmJvc2VGaXhQb2ludExvb3BzKQorICAgICAgICAgICAgICAgICsrY291bnRlcjsK
KwogICAgICAgICAgICAgbV9jaGFuZ2VkID0gZmFsc2U7CiAgICAgICAgICAgICBkb1JvdW5kT2ZE
b3VibGVWb3RpbmcoKTsKICAgICAgICAgICAgIGlmICghbV9jaGFuZ2VkKQpAQCAtNjMsNiArNzMs
OSBAQCBwdWJsaWM6CiAgICAgICAgICAgICBtX2NoYW5nZWQgPSBmYWxzZTsKICAgICAgICAgICAg
IHByb3BhZ2F0ZUZvcndhcmQoKTsKICAgICAgICAgfSB3aGlsZSAobV9jaGFuZ2VkKTsKKworICAg
ICAgICBpZiAodmVyYm9zZUZpeFBvaW50TG9vcHMpCisgICAgICAgICAgICBkYXRhTG9nKCJJdGVy
YXRlZCAiLCBjb3VudGVyLCAiIHRpbWVzIGluIGRvdWJsZSB2b3RpbmcgZml4cG9pbnQuXG4iKTsK
ICAgICAgICAgCiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KQEAgLTcwLDkgKzgzLDEzIEBA
IHB1YmxpYzoKIHByaXZhdGU6CiAgICAgdm9pZCBwcm9wYWdhdGVUb0ZpeHBvaW50KCkKICAgICB7
CisgICAgICAgIHVuc2lnbmVkIGNvdW50ZXIgPSAwOwogICAgICAgICBkbyB7CisgICAgICAgICAg
ICBpZiAodmVyYm9zZUZpeFBvaW50TG9vcHMpCisgICAgICAgICAgICAgICAgKytjb3VudGVyOwor
CiAgICAgICAgICAgICBtX2NoYW5nZWQgPSBmYWxzZTsKLSAgICAgICAgICAgIAorCiAgICAgICAg
ICAgICAvLyBGb3J3YXJkIHByb3BhZ2F0aW9uIGlzIG5lYXItb3B0aW1hbCBmb3IgYm90aCB0b3Bv
bG9naWNhbGx5LXNvcnRlZCBhbmQKICAgICAgICAgICAgIC8vIERGUy1zb3J0ZWQgY29kZS4KICAg
ICAgICAgICAgIHByb3BhZ2F0ZUZvcndhcmQoKTsKQEAgLTg2LDYgKzEwMyw5IEBAIHByaXZhdGU6
CiAgICAgICAgICAgICBtX2NoYW5nZWQgPSBmYWxzZTsKICAgICAgICAgICAgIHByb3BhZ2F0ZUJh
Y2t3YXJkKCk7CiAgICAgICAgIH0gd2hpbGUgKG1fY2hhbmdlZCk7CisKKyAgICAgICAgaWYgKHZl
cmJvc2VGaXhQb2ludExvb3BzKQorICAgICAgICAgICAgZGF0YUxvZygiSXRlcmF0ZWQgIiwgY291
bnRlciwgIiB0aW1lcyBpbiBwcm9wYWdhdGVUb0ZpeHBvaW50LlxuIik7CiAgICAgfQogICAgIAog
ICAgIGJvb2wgc2V0UHJlZGljdGlvbihTcGVjdWxhdGVkVHlwZSBwcmVkaWN0aW9uKQpAQCAtMTMy
LDE5ICsxNTIsNiBAQCBwcml2YXRlOgogICAgICAgICBib29sIGNoYW5nZWQgPSBmYWxzZTsKICAg
ICAgICAgCiAgICAgICAgIHN3aXRjaCAob3ApIHsKLSAgICAgICAgY2FzZSBKU0NvbnN0YW50OiB7
Ci0gICAgICAgICAgICBTcGVjdWxhdGVkVHlwZSB0eXBlID0gc3BlY3VsYXRpb25Gcm9tVmFsdWUo
bm9kZS0+YXNKU1ZhbHVlKCkpOwotICAgICAgICAgICAgaWYgKHR5cGUgPT0gU3BlY0ludDUyQXNE
b3VibGUgJiYgZW5hYmxlSW50NTIoKSkKLSAgICAgICAgICAgICAgICB0eXBlID0gU3BlY0ludDUy
OwotICAgICAgICAgICAgY2hhbmdlZCB8PSBzZXRQcmVkaWN0aW9uKHR5cGUpOwotICAgICAgICAg
ICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgY2FzZSBEb3VibGVDb25zdGFudDogewotICAg
ICAgICAgICAgU3BlY3VsYXRlZFR5cGUgdHlwZSA9IHNwZWN1bGF0aW9uRnJvbVZhbHVlKG5vZGUt
PmFzSlNWYWx1ZSgpKTsKLSAgICAgICAgICAgIGNoYW5nZWQgfD0gc2V0UHJlZGljdGlvbih0eXBl
KTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgICAgICAKICAgICAgICAg
Y2FzZSBHZXRMb2NhbDogewogICAgICAgICAgICAgVmFyaWFibGVBY2Nlc3NEYXRhKiB2YXJpYWJs
ZSA9IG5vZGUtPnZhcmlhYmxlQWNjZXNzRGF0YSgpOwogICAgICAgICAgICAgU3BlY3VsYXRlZFR5
cGUgcHJlZGljdGlvbiA9IHZhcmlhYmxlLT5wcmVkaWN0aW9uKCk7CkBAIC0xNjAsOTEgKzE2Nyw2
IEBAIHByaXZhdGU6CiAgICAgICAgICAgICBjaGFuZ2VkIHw9IHZhcmlhYmxlQWNjZXNzRGF0YS0+
cHJlZGljdChub2RlLT5jaGlsZDEoKS0+cHJlZGljdGlvbigpKTsKICAgICAgICAgICAgIGJyZWFr
OwogICAgICAgICB9Ci0gICAgICAgICAgICAKLSAgICAgICAgY2FzZSBCaXRBbmQ6Ci0gICAgICAg
IGNhc2UgQml0T3I6Ci0gICAgICAgIGNhc2UgQml0WG9yOgotICAgICAgICBjYXNlIEJpdFJTaGlm
dDoKLSAgICAgICAgY2FzZSBCaXRMU2hpZnQ6Ci0gICAgICAgIGNhc2UgQml0VVJTaGlmdDoKLSAg
ICAgICAgY2FzZSBBcml0aElNdWw6Ci0gICAgICAgIGNhc2UgQXJpdGhDbHozMjogewotICAgICAg
ICAgICAgY2hhbmdlZCB8PSBzZXRQcmVkaWN0aW9uKFNwZWNJbnQzMik7Ci0gICAgICAgICAgICBi
cmVhazsKLSAgICAgICAgfQotCi0gICAgICAgIGNhc2UgVHJ5R2V0QnlJZDogewotICAgICAgICAg
ICAgY2hhbmdlZCB8PSBzZXRQcmVkaWN0aW9uKFNwZWNCeXRlY29kZVRvcCk7Ci0gICAgICAgICAg
ICBicmVhazsKLSAgICAgICAgfQotCi0gICAgICAgIGNhc2UgQXJyYXlQb3A6Ci0gICAgICAgIGNh
c2UgQXJyYXlQdXNoOgotICAgICAgICBjYXNlIFJlZ0V4cEV4ZWM6Ci0gICAgICAgIGNhc2UgUmVn
RXhwVGVzdDoKLSAgICAgICAgY2FzZSBTdHJpbmdSZXBsYWNlOgotICAgICAgICBjYXNlIEdldEJ5
SWQ6Ci0gICAgICAgIGNhc2UgR2V0QnlJZEZsdXNoOgotICAgICAgICBjYXNlIEdldEJ5T2Zmc2V0
OgotICAgICAgICBjYXNlIE11bHRpR2V0QnlPZmZzZXQ6Ci0gICAgICAgIGNhc2UgR2V0RGlyZWN0
UG5hbWU6Ci0gICAgICAgIGNhc2UgQ2FsbDoKLSAgICAgICAgY2FzZSBUYWlsQ2FsbElubGluZWRD
YWxsZXI6Ci0gICAgICAgIGNhc2UgQ29uc3RydWN0OgotICAgICAgICBjYXNlIENhbGxWYXJhcmdz
OgotICAgICAgICBjYXNlIFRhaWxDYWxsVmFyYXJnc0lubGluZWRDYWxsZXI6Ci0gICAgICAgIGNh
c2UgQ29uc3RydWN0VmFyYXJnczoKLSAgICAgICAgY2FzZSBDYWxsRm9yd2FyZFZhcmFyZ3M6Ci0g
ICAgICAgIGNhc2UgQ29uc3RydWN0Rm9yd2FyZFZhcmFyZ3M6Ci0gICAgICAgIGNhc2UgVGFpbENh
bGxGb3J3YXJkVmFyYXJnc0lubGluZWRDYWxsZXI6Ci0gICAgICAgIGNhc2UgR2V0R2xvYmFsVmFy
OgotICAgICAgICBjYXNlIEdldEdsb2JhbExleGljYWxWYXJpYWJsZToKLSAgICAgICAgY2FzZSBH
ZXRDbG9zdXJlVmFyOgotICAgICAgICBjYXNlIEdldEZyb21Bcmd1bWVudHM6IHsKLSAgICAgICAg
ICAgIGNoYW5nZWQgfD0gc2V0UHJlZGljdGlvbihub2RlLT5nZXRIZWFwUHJlZGljdGlvbigpKTsK
LSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0KLSAgICAgICAgY2FzZSBHZXREeW5hbWlj
VmFyOiB7Ci0gICAgICAgICAgICBjaGFuZ2VkIHw9IHNldFByZWRpY3Rpb24oU3BlY0J5dGVjb2Rl
VG9wKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgICAgICAKLSAgICAg
ICAgY2FzZSBHZXRHZXR0ZXJTZXR0ZXJCeU9mZnNldDoKLSAgICAgICAgY2FzZSBHZXRFeGVjdXRh
YmxlOiB7Ci0gICAgICAgICAgICBjaGFuZ2VkIHw9IHNldFByZWRpY3Rpb24oU3BlY0NlbGxPdGhl
cik7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotCi0gICAgICAgIGNhc2UgR2V0R2V0
dGVyOgotICAgICAgICBjYXNlIEdldFNldHRlcjoKLSAgICAgICAgY2FzZSBHZXRDYWxsZWU6Ci0g
ICAgICAgIGNhc2UgTmV3RnVuY3Rpb246Ci0gICAgICAgIGNhc2UgTmV3R2VuZXJhdG9yRnVuY3Rp
b246IHsKLSAgICAgICAgICAgIGNoYW5nZWQgfD0gc2V0UHJlZGljdGlvbihTcGVjRnVuY3Rpb24p
OwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgICAgIAotICAgICAgICBj
YXNlIEdldEFyZ3VtZW50Q291bnQ6IHsKLSAgICAgICAgICAgIGNoYW5nZWQgfD0gc2V0UHJlZGlj
dGlvbihTcGVjSW50MzIpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLQotICAgICAg
ICBjYXNlIEdldFJlc3RMZW5ndGg6IHsKLSAgICAgICAgICAgIGNoYW5nZWQgfD0gc2V0UHJlZGlj
dGlvbihTcGVjSW50MzIpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLQotICAgICAg
ICBjYXNlIEdldFR5cGVkQXJyYXlCeXRlT2Zmc2V0OgotICAgICAgICBjYXNlIEdldEFycmF5TGVu
Z3RoOiB7Ci0gICAgICAgICAgICBjaGFuZ2VkIHw9IHNldFByZWRpY3Rpb24oU3BlY0ludDMyKTsK
LSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0KLSAgICAgICAgY2FzZSBTdHJpbmdDaGFy
Q29kZUF0OiB7Ci0gICAgICAgICAgICBjaGFuZ2VkIHw9IHNldFByZWRpY3Rpb24oU3BlY0ludDMy
KTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9CiAKICAgICAgICAgY2FzZSBVSW50MzJU
b051bWJlcjogewogICAgICAgICAgICAgaWYgKG5vZGUtPmNhblNwZWN1bGF0ZUludDMyKG1fcGFz
cykpCkBAIC0zODEsMjEgKzMwMyw2IEBAIHByaXZhdGU6CiAgICAgICAgICAgICBicmVhazsKICAg
ICAgICAgfQogCi0gICAgICAgIGNhc2UgQXJpdGhQb3c6Ci0gICAgICAgIGNhc2UgQXJpdGhTcXJ0
OgotICAgICAgICBjYXNlIEFyaXRoRlJvdW5kOgotICAgICAgICBjYXNlIEFyaXRoU2luOgotICAg
ICAgICBjYXNlIEFyaXRoQ29zOgotICAgICAgICBjYXNlIEFyaXRoTG9nOiB7Ci0gICAgICAgICAg
ICBjaGFuZ2VkIHw9IHNldFByZWRpY3Rpb24oU3BlY0J5dGVjb2RlRG91YmxlKTsKLSAgICAgICAg
ICAgIGJyZWFrOwotICAgICAgICB9Ci0KLSAgICAgICAgY2FzZSBBcml0aFJhbmRvbTogewotICAg
ICAgICAgICAgY2hhbmdlZCB8PSBzZXRQcmVkaWN0aW9uKFNwZWNEb3VibGVSZWFsKTsKLSAgICAg
ICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0KICAgICAgICAgY2FzZSBBcml0aFJvdW5kOgogICAg
ICAgICBjYXNlIEFyaXRoRmxvb3I6CiAgICAgICAgIGNhc2UgQXJpdGhDZWlsOgpAQCAtNDE3LDM3
ICszMjQsNiBAQCBwcml2YXRlOgogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KIAotICAg
ICAgICBjYXNlIERlbGV0ZUJ5SWQ6Ci0gICAgICAgIGNhc2UgTG9naWNhbE5vdDoKLSAgICAgICAg
Y2FzZSBDb21wYXJlTGVzczoKLSAgICAgICAgY2FzZSBDb21wYXJlTGVzc0VxOgotICAgICAgICBj
YXNlIENvbXBhcmVHcmVhdGVyOgotICAgICAgICBjYXNlIENvbXBhcmVHcmVhdGVyRXE6Ci0gICAg
ICAgIGNhc2UgQ29tcGFyZUVxOgotICAgICAgICBjYXNlIENvbXBhcmVTdHJpY3RFcToKLSAgICAg
ICAgY2FzZSBPdmVycmlkZXNIYXNJbnN0YW5jZToKLSAgICAgICAgY2FzZSBJbnN0YW5jZU9mOgot
ICAgICAgICBjYXNlIEluc3RhbmNlT2ZDdXN0b206Ci0gICAgICAgIGNhc2UgSXNBcnJheU9iamVj
dDoKLSAgICAgICAgY2FzZSBJc0pTQXJyYXk6Ci0gICAgICAgIGNhc2UgSXNBcnJheUNvbnN0cnVj
dG9yOgotICAgICAgICBjYXNlIElzVW5kZWZpbmVkOgotICAgICAgICBjYXNlIElzQm9vbGVhbjoK
LSAgICAgICAgY2FzZSBJc051bWJlcjoKLSAgICAgICAgY2FzZSBJc1N0cmluZzoKLSAgICAgICAg
Y2FzZSBJc09iamVjdDoKLSAgICAgICAgY2FzZSBJc09iamVjdE9yTnVsbDoKLSAgICAgICAgY2Fz
ZSBJc0Z1bmN0aW9uOgotICAgICAgICBjYXNlIElzUmVnRXhwT2JqZWN0OiB7Ci0gICAgICAgICAg
ICBjaGFuZ2VkIHw9IHNldFByZWRpY3Rpb24oU3BlY0Jvb2xlYW4pOwotICAgICAgICAgICAgYnJl
YWs7Ci0gICAgICAgIH0KLQotICAgICAgICBjYXNlIFR5cGVPZjogewotICAgICAgICAgICAgY2hh
bmdlZCB8PSBzZXRQcmVkaWN0aW9uKFNwZWNTdHJpbmdJZGVudCk7Ci0gICAgICAgICAgICBicmVh
azsKLSAgICAgICAgfQotCiAgICAgICAgIGNhc2UgR2V0QnlWYWw6IHsKICAgICAgICAgICAgIGlm
ICghbm9kZS0+Y2hpbGQxKCktPnByZWRpY3Rpb24oKSkKICAgICAgICAgICAgICAgICBicmVhazsK
QEAgLTQ5NiwxOSArMzcyLDYgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIH0KICAgICAgICAgICAg
IGJyZWFrOwogICAgICAgICB9Ci0gICAgICAgICAgICAKLSAgICAgICAgY2FzZSBHZXRCdXR0ZXJm
bHk6Ci0gICAgICAgIGNhc2UgR2V0SW5kZXhlZFByb3BlcnR5U3RvcmFnZToKLSAgICAgICAgY2Fz
ZSBBbGxvY2F0ZVByb3BlcnR5U3RvcmFnZToKLSAgICAgICAgY2FzZSBSZWFsbG9jYXRlUHJvcGVy
dHlTdG9yYWdlOiB7Ci0gICAgICAgICAgICBjaGFuZ2VkIHw9IHNldFByZWRpY3Rpb24oU3BlY090
aGVyKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0KLSAgICAgICAgY2FzZSBDYWxs
T2JqZWN0Q29uc3RydWN0b3I6IHsKLSAgICAgICAgICAgIGNoYW5nZWQgfD0gc2V0UHJlZGljdGlv
bihTcGVjT2JqZWN0KTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9CiAKICAgICAgICAg
Y2FzZSBUb1RoaXM6IHsKICAgICAgICAgICAgIC8vIFRvVGhpcyBpbiBtZXRob2RzIGZvciBwcmlt
aXRpdmUgdHlwZXMgc2hvdWxkIHNwZWN1bGF0ZSBwcmltaXRpdmUgdHlwZXMgaW4gc3RyaWN0IG1v
ZGUuCkBAIC01NjksNDggKzQzMiw0MDggQEAgcHJpdmF0ZToKICAgICAgICAgICAgIGJyZWFrOwog
ICAgICAgICB9CiAgICAgICAgICAgICAKLSAgICAgICAgY2FzZSBTa2lwU2NvcGU6Ci0gICAgICAg
IGNhc2UgR2V0R2xvYmFsT2JqZWN0OiB7Ci0gICAgICAgICAgICBjaGFuZ2VkIHw9IHNldFByZWRp
Y3Rpb24oU3BlY09iamVjdE90aGVyKTsKKyAgICAgICAgY2FzZSBUb1ByaW1pdGl2ZTogeworICAg
ICAgICAgICAgU3BlY3VsYXRlZFR5cGUgY2hpbGQgPSBub2RlLT5jaGlsZDEoKS0+cHJlZGljdGlv
bigpOworICAgICAgICAgICAgaWYgKGNoaWxkKQorICAgICAgICAgICAgICAgIGNoYW5nZWQgfD0g
bWVyZ2VQcmVkaWN0aW9uKHJlc3VsdE9mVG9QcmltaXRpdmUoY2hpbGQpKTsKICAgICAgICAgICAg
IGJyZWFrOwogICAgICAgICB9CiAKLSAgICAgICAgY2FzZSBSZXNvbHZlU2NvcGU6IHsKLSAgICAg
ICAgICAgIGNoYW5nZWQgfD0gc2V0UHJlZGljdGlvbihTcGVjT2JqZWN0T3RoZXIpOworICAgICAg
ICBkZWZhdWx0OgogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KLSAgICAgICAgICAgIAot
ICAgICAgICBjYXNlIENyZWF0ZVRoaXM6Ci0gICAgICAgIGNhc2UgTmV3T2JqZWN0OiB7Ci0gICAg
ICAgICAgICBjaGFuZ2VkIHw9IHNldFByZWRpY3Rpb24oU3BlY0ZpbmFsT2JqZWN0KTsKLSAgICAg
ICAgICAgIGJyZWFrOworCisgICAgICAgIG1fY2hhbmdlZCB8PSBjaGFuZ2VkOworICAgIH0KKyAg
ICAgICAgCisgICAgdm9pZCBwcm9wYWdhdGVGb3J3YXJkKCkKKyAgICB7CisgICAgICAgIGZvciAo
Tm9kZSogbm9kZSA6IG1fZGVwZW5kZW50Tm9kZXMpIHsKKyAgICAgICAgICAgIG1fY3VycmVudE5v
ZGUgPSBub2RlOworICAgICAgICAgICAgcHJvcGFnYXRlKG1fY3VycmVudE5vZGUpOwogICAgICAg
ICB9Ci0gICAgICAgICAgICAKLSAgICAgICAgY2FzZSBOZXdBcnJheToKLSAgICAgICAgY2FzZSBO
ZXdBcnJheVdpdGhTaXplOgotICAgICAgICBjYXNlIE5ld0FycmF5QnVmZmVyOiB7Ci0gICAgICAg
ICAgICBjaGFuZ2VkIHw9IHNldFByZWRpY3Rpb24oU3BlY0FycmF5KTsKLSAgICAgICAgICAgIGJy
ZWFrOworICAgIH0KKworICAgIHZvaWQgcHJvcGFnYXRlQmFja3dhcmQoKQorICAgIHsKKyAgICAg
ICAgZm9yICh1bnNpZ25lZCBpID0gbV9kZXBlbmRlbnROb2Rlcy5zaXplKCk7IGktLTspIHsKKyAg
ICAgICAgICAgIG1fY3VycmVudE5vZGUgPSBtX2RlcGVuZGVudE5vZGVzW2ldOworICAgICAgICAg
ICAgcHJvcGFnYXRlKG1fY3VycmVudE5vZGUpOwogICAgICAgICB9Ci0gICAgICAgICAgICAKLSAg
ICAgICAgY2FzZSBOZXdUeXBlZEFycmF5OiB7Ci0gICAgICAgICAgICBjaGFuZ2VkIHw9IHNldFBy
ZWRpY3Rpb24oc3BlY3VsYXRpb25Gcm9tVHlwZWRBcnJheVR5cGUobm9kZS0+dHlwZWRBcnJheVR5
cGUoKSkpOworICAgIH0KKyAgICAKKyAgICB2b2lkIGRvRG91YmxlVm90aW5nKE5vZGUqIG5vZGUs
IGZsb2F0IHdlaWdodCkKKyAgICB7CisgICAgICAgIC8vIExvb3AgcHJlLWhlYWRlcnMgY3JlYXRl
ZCBieSBPU1IgZW50cnlwb2ludCBjcmVhdGlvbiBtYXkgaGF2ZSBOYU4gd2VpZ2h0IHRvIGluZGlj
YXRlCisgICAgICAgIC8vIHRoYXQgd2UgYWN0dWFsbHkgZG9uJ3Qga25vdyB0aGV5IHdlaWdodC4g
QXNzdW1lIHRoYXQgdGhleSBleGVjdXRlIG9uY2UuIFRoaXMgdHVybnMKKyAgICAgICAgLy8gb3V0
IHRvIGJlIGFuIE9LIGFzc3VtcHRpb24gc2luY2UgdGhlIHByZS1oZWFkZXIgZG9lc24ndCBoYXZl
IGFueSBtZWFuaW5nZnVsIGNvZGUuCisgICAgICAgIGlmICh3ZWlnaHQgIT0gd2VpZ2h0KQorICAg
ICAgICAgICAgd2VpZ2h0ID0gMTsKKyAgICAgICAgCisgICAgICAgIHN3aXRjaCAobm9kZS0+b3Ao
KSkgeworICAgICAgICBjYXNlIFZhbHVlQWRkOgorICAgICAgICBjYXNlIEFyaXRoQWRkOgorICAg
ICAgICBjYXNlIEFyaXRoU3ViOiB7CisgICAgICAgICAgICBTcGVjdWxhdGVkVHlwZSBsZWZ0ID0g
bm9kZS0+Y2hpbGQxKCktPnByZWRpY3Rpb24oKTsKKyAgICAgICAgICAgIFNwZWN1bGF0ZWRUeXBl
IHJpZ2h0ID0gbm9kZS0+Y2hpbGQyKCktPnByZWRpY3Rpb24oKTsKKyAgICAgICAgICAgICAgICAK
KyAgICAgICAgICAgIERvdWJsZUJhbGxvdCBiYWxsb3Q7CisgICAgICAgICAgICAgICAgCisgICAg
ICAgICAgICBpZiAoaXNGdWxsTnVtYmVyU3BlY3VsYXRpb24obGVmdCkKKyAgICAgICAgICAgICAg
ICAmJiBpc0Z1bGxOdW1iZXJTcGVjdWxhdGlvbihyaWdodCkKKyAgICAgICAgICAgICAgICAmJiAh
bV9ncmFwaC5hZGRTaG91bGRTcGVjdWxhdGVJbnQzMihub2RlLCBtX3Bhc3MpCisgICAgICAgICAg
ICAgICAgJiYgIW1fZ3JhcGguYWRkU2hvdWxkU3BlY3VsYXRlTWFjaGluZUludChub2RlKSkKKyAg
ICAgICAgICAgICAgICBiYWxsb3QgPSBWb3RlRG91YmxlOworICAgICAgICAgICAgZWxzZQorICAg
ICAgICAgICAgICAgIGJhbGxvdCA9IFZvdGVWYWx1ZTsKKyAgICAgICAgICAgICAgICAKKyAgICAg
ICAgICAgIG1fZ3JhcGgudm90ZU5vZGUobm9kZS0+Y2hpbGQxKCksIGJhbGxvdCwgd2VpZ2h0KTsK
KyAgICAgICAgICAgIG1fZ3JhcGgudm90ZU5vZGUobm9kZS0+Y2hpbGQyKCksIGJhbGxvdCwgd2Vp
Z2h0KTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9Ci0gICAgICAgICAgICAKLSAgICAg
ICAgY2FzZSBOZXdSZWdleHA6IHsKLSAgICAgICAgICAgIGNoYW5nZWQgfD0gc2V0UHJlZGljdGlv
bihTcGVjUmVnRXhwT2JqZWN0KTsKKworICAgICAgICBjYXNlIEFyaXRoTXVsOiB7CisgICAgICAg
ICAgICBTcGVjdWxhdGVkVHlwZSBsZWZ0ID0gbm9kZS0+Y2hpbGQxKCktPnByZWRpY3Rpb24oKTsK
KyAgICAgICAgICAgIFNwZWN1bGF0ZWRUeXBlIHJpZ2h0ID0gbm9kZS0+Y2hpbGQyKCktPnByZWRp
Y3Rpb24oKTsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgIERvdWJsZUJhbGxvdCBiYWxs
b3Q7CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICBpZiAoaXNGdWxsTnVtYmVyU3BlY3Vs
YXRpb24obGVmdCkKKyAgICAgICAgICAgICAgICAmJiBpc0Z1bGxOdW1iZXJTcGVjdWxhdGlvbihy
aWdodCkKKyAgICAgICAgICAgICAgICAmJiAhbV9ncmFwaC5iaW5hcnlBcml0aFNob3VsZFNwZWN1
bGF0ZUludDMyKG5vZGUsIG1fcGFzcykKKyAgICAgICAgICAgICAgICAmJiAhbV9ncmFwaC5iaW5h
cnlBcml0aFNob3VsZFNwZWN1bGF0ZU1hY2hpbmVJbnQobm9kZSwgbV9wYXNzKSkKKyAgICAgICAg
ICAgICAgICBiYWxsb3QgPSBWb3RlRG91YmxlOworICAgICAgICAgICAgZWxzZQorICAgICAgICAg
ICAgICAgIGJhbGxvdCA9IFZvdGVWYWx1ZTsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAg
IG1fZ3JhcGgudm90ZU5vZGUobm9kZS0+Y2hpbGQxKCksIGJhbGxvdCwgd2VpZ2h0KTsKKyAgICAg
ICAgICAgIG1fZ3JhcGgudm90ZU5vZGUobm9kZS0+Y2hpbGQyKCksIGJhbGxvdCwgd2VpZ2h0KTsK
ICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9Ci0gICAgICAgICAgICAKLSAgICAgICAgY2Fz
ZSBDcmVhdGVBY3RpdmF0aW9uOiB7Ci0gICAgICAgICAgICBjaGFuZ2VkIHw9IHNldFByZWRpY3Rp
b24oU3BlY09iamVjdE90aGVyKTsKKworICAgICAgICBjYXNlIEFyaXRoTWluOgorICAgICAgICBj
YXNlIEFyaXRoTWF4OgorICAgICAgICBjYXNlIEFyaXRoTW9kOgorICAgICAgICBjYXNlIEFyaXRo
RGl2OiB7CisgICAgICAgICAgICBTcGVjdWxhdGVkVHlwZSBsZWZ0ID0gbm9kZS0+Y2hpbGQxKCkt
PnByZWRpY3Rpb24oKTsKKyAgICAgICAgICAgIFNwZWN1bGF0ZWRUeXBlIHJpZ2h0ID0gbm9kZS0+
Y2hpbGQyKCktPnByZWRpY3Rpb24oKTsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgIERv
dWJsZUJhbGxvdCBiYWxsb3Q7CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICBpZiAoaXNG
dWxsTnVtYmVyU3BlY3VsYXRpb24obGVmdCkKKyAgICAgICAgICAgICAgICAmJiBpc0Z1bGxOdW1i
ZXJTcGVjdWxhdGlvbihyaWdodCkKKyAgICAgICAgICAgICAgICAmJiAhbV9ncmFwaC5iaW5hcnlB
cml0aFNob3VsZFNwZWN1bGF0ZUludDMyKG5vZGUsIG1fcGFzcykpCisgICAgICAgICAgICAgICAg
YmFsbG90ID0gVm90ZURvdWJsZTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBi
YWxsb3QgPSBWb3RlVmFsdWU7CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICBtX2dyYXBo
LnZvdGVOb2RlKG5vZGUtPmNoaWxkMSgpLCBiYWxsb3QsIHdlaWdodCk7CisgICAgICAgICAgICBt
X2dyYXBoLnZvdGVOb2RlKG5vZGUtPmNoaWxkMigpLCBiYWxsb3QsIHdlaWdodCk7CiAgICAgICAg
ICAgICBicmVhazsKICAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgY2FzZSBTdHJpbmdGcm9t
Q2hhckNvZGU6IHsKLSAgICAgICAgICAgIGNoYW5nZWQgfD0gc2V0UHJlZGljdGlvbihTcGVjU3Ry
aW5nKTsKLSAgICAgICAgICAgIGNoYW5nZWQgfD0gbm9kZS0+Y2hpbGQxKCktPm1lcmdlRmxhZ3Mo
Tm9kZUJ5dGVjb2RlVXNlc0FzTnVtYmVyIHwgTm9kZUJ5dGVjb2RlVXNlc0FzSW50KTsgICAgICAg
ICAgICAKKworICAgICAgICBjYXNlIEFyaXRoQWJzOgorICAgICAgICAgICAgRG91YmxlQmFsbG90
IGJhbGxvdDsKKyAgICAgICAgICAgIGlmIChub2RlLT5jaGlsZDEoKS0+c2hvdWxkU3BlY3VsYXRl
TnVtYmVyKCkKKyAgICAgICAgICAgICAgICAmJiAhbV9ncmFwaC51bmFyeUFyaXRoU2hvdWxkU3Bl
Y3VsYXRlSW50MzIobm9kZSwgbV9wYXNzKSkKKyAgICAgICAgICAgICAgICBiYWxsb3QgPSBWb3Rl
RG91YmxlOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIGJhbGxvdCA9IFZvdGVW
YWx1ZTsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgIG1fZ3JhcGgudm90ZU5vZGUobm9k
ZS0+Y2hpbGQxKCksIGJhbGxvdCwgd2VpZ2h0KTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICAgICAgICAgIAorICAgICAgICBjYXNlIEFyaXRoU3FydDoKKyAgICAgICAgY2FzZSBBcml0aENv
czoKKyAgICAgICAgY2FzZSBBcml0aFNpbjoKKyAgICAgICAgY2FzZSBBcml0aExvZzoKKyAgICAg
ICAgICAgIGlmIChub2RlLT5jaGlsZDEoKS0+c2hvdWxkU3BlY3VsYXRlTnVtYmVyKCkpCisgICAg
ICAgICAgICAgICAgbV9ncmFwaC52b3RlTm9kZShub2RlLT5jaGlsZDEoKSwgVm90ZURvdWJsZSwg
d2VpZ2h0KTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBtX2dyYXBoLnZvdGVO
b2RlKG5vZGUtPmNoaWxkMSgpLCBWb3RlVmFsdWUsIHdlaWdodCk7CisgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgY2FzZSBTZXRMb2NhbDogeworICAgICAgICAg
ICAgU3BlY3VsYXRlZFR5cGUgcHJlZGljdGlvbiA9IG5vZGUtPmNoaWxkMSgpLT5wcmVkaWN0aW9u
KCk7CisgICAgICAgICAgICBpZiAoaXNEb3VibGVTcGVjdWxhdGlvbihwcmVkaWN0aW9uKSkKKyAg
ICAgICAgICAgICAgICBub2RlLT52YXJpYWJsZUFjY2Vzc0RhdGEoKS0+dm90ZShWb3RlRG91Ymxl
LCB3ZWlnaHQpOworICAgICAgICAgICAgZWxzZSBpZiAoIWlzRnVsbE51bWJlclNwZWN1bGF0aW9u
KHByZWRpY3Rpb24pCisgICAgICAgICAgICAgICAgfHwgaXNJbnQzMlNwZWN1bGF0aW9uKHByZWRp
Y3Rpb24pIHx8IGlzTWFjaGluZUludFNwZWN1bGF0aW9uKHByZWRpY3Rpb24pKQorICAgICAgICAg
ICAgICAgIG5vZGUtPnZhcmlhYmxlQWNjZXNzRGF0YSgpLT52b3RlKFZvdGVWYWx1ZSwgd2VpZ2h0
KTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisKKyAgICAgICAgY2FzZSBQdXRCeVZh
bERpcmVjdDoKKyAgICAgICAgY2FzZSBQdXRCeVZhbDoKKyAgICAgICAgY2FzZSBQdXRCeVZhbEFs
aWFzOiB7CisgICAgICAgICAgICBFZGdlIGNoaWxkMSA9IG1fZ3JhcGgudmFyQXJnQ2hpbGQobm9k
ZSwgMCk7CisgICAgICAgICAgICBFZGdlIGNoaWxkMiA9IG1fZ3JhcGgudmFyQXJnQ2hpbGQobm9k
ZSwgMSk7CisgICAgICAgICAgICBFZGdlIGNoaWxkMyA9IG1fZ3JhcGgudmFyQXJnQ2hpbGQobm9k
ZSwgMik7CisgICAgICAgICAgICBtX2dyYXBoLnZvdGVOb2RlKGNoaWxkMSwgVm90ZVZhbHVlLCB3
ZWlnaHQpOworICAgICAgICAgICAgbV9ncmFwaC52b3RlTm9kZShjaGlsZDIsIFZvdGVWYWx1ZSwg
d2VpZ2h0KTsKKyAgICAgICAgICAgIHN3aXRjaCAobm9kZS0+YXJyYXlNb2RlKCkudHlwZSgpKSB7
CisgICAgICAgICAgICBjYXNlIEFycmF5OjpEb3VibGU6CisgICAgICAgICAgICAgICAgbV9ncmFw
aC52b3RlTm9kZShjaGlsZDMsIFZvdGVEb3VibGUsIHdlaWdodCk7CisgICAgICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgIG1fZ3JhcGgudm90
ZU5vZGUoY2hpbGQzLCBWb3RlVmFsdWUsIHdlaWdodCk7CisgICAgICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgICAgICB9CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICAg
ICAgCisgICAgICAgIGNhc2UgTW92SGludDoKKyAgICAgICAgICAgIC8vIElnbm9yZSB0aGVzZSBz
aW5jZSB0aGV5IGhhdmUgbm8gZWZmZWN0IG9uIGluLURGRyBleGVjdXRpb24uCisgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgICAgIAorICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgbV9n
cmFwaC52b3RlQ2hpbGRyZW4obm9kZSwgVm90ZVZhbHVlLCB3ZWlnaHQpOworICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgIH0KKyAgICB9CisgICAgCisgICAgdm9pZCBkb1JvdW5kT2ZEb3VibGVW
b3RpbmcoKQorICAgIHsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG1fZ3JhcGgu
bV92YXJpYWJsZUFjY2Vzc0RhdGEuc2l6ZSgpOyArK2kpCisgICAgICAgICAgICBtX2dyYXBoLm1f
dmFyaWFibGVBY2Nlc3NEYXRhW2ldLmZpbmQoKS0+Y2xlYXJWb3RlcygpOworICAgICAgICBmb3Ig
KEJsb2NrSW5kZXggYmxvY2tJbmRleCA9IDA7IGJsb2NrSW5kZXggPCBtX2dyYXBoLm51bUJsb2Nr
cygpOyArK2Jsb2NrSW5kZXgpIHsKKyAgICAgICAgICAgIEJhc2ljQmxvY2sqIGJsb2NrID0gbV9n
cmFwaC5ibG9jayhibG9ja0luZGV4KTsKKyAgICAgICAgICAgIGlmICghYmxvY2spCisgICAgICAg
ICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICBBU1NFUlQoYmxvY2stPmlzUmVhY2hhYmxl
KTsKKyAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBibG9jay0+c2l6ZSgpOyAr
K2kpIHsKKyAgICAgICAgICAgICAgICBtX2N1cnJlbnROb2RlID0gYmxvY2stPmF0KGkpOworICAg
ICAgICAgICAgICAgIGRvRG91YmxlVm90aW5nKG1fY3VycmVudE5vZGUsIGJsb2NrLT5leGVjdXRp
b25Db3VudCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgZm9yICh1bnNpZ25l
ZCBpID0gMDsgaSA8IG1fZ3JhcGgubV92YXJpYWJsZUFjY2Vzc0RhdGEuc2l6ZSgpOyArK2kpIHsK
KyAgICAgICAgICAgIFZhcmlhYmxlQWNjZXNzRGF0YSogdmFyaWFibGVBY2Nlc3NEYXRhID0gJm1f
Z3JhcGgubV92YXJpYWJsZUFjY2Vzc0RhdGFbaV07CisgICAgICAgICAgICBpZiAoIXZhcmlhYmxl
QWNjZXNzRGF0YS0+aXNSb290KCkpCisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAg
ICAgICBtX2NoYW5nZWQgfD0gdmFyaWFibGVBY2Nlc3NEYXRhLT50YWxseVZvdGVzRm9yU2hvdWxk
VXNlRG91YmxlRm9ybWF0KCk7CisgICAgICAgIH0KKyAgICAgICAgcHJvcGFnYXRlVGhyb3VnaEFy
Z3VtZW50UG9zaXRpb25zKCk7CisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBtX2dy
YXBoLm1fdmFyaWFibGVBY2Nlc3NEYXRhLnNpemUoKTsgKytpKSB7CisgICAgICAgICAgICBWYXJp
YWJsZUFjY2Vzc0RhdGEqIHZhcmlhYmxlQWNjZXNzRGF0YSA9ICZtX2dyYXBoLm1fdmFyaWFibGVB
Y2Nlc3NEYXRhW2ldOworICAgICAgICAgICAgaWYgKCF2YXJpYWJsZUFjY2Vzc0RhdGEtPmlzUm9v
dCgpKQorICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgbV9jaGFuZ2VkIHw9
IHZhcmlhYmxlQWNjZXNzRGF0YS0+bWFrZVByZWRpY3Rpb25Gb3JEb3VibGVGb3JtYXQoKTsKKyAg
ICAgICAgfQorICAgIH0KKyAgICAKKyAgICB2b2lkIHByb3BhZ2F0ZVRocm91Z2hBcmd1bWVudFBv
c2l0aW9ucygpCisgICAgeworICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbV9ncmFw
aC5tX2FyZ3VtZW50UG9zaXRpb25zLnNpemUoKTsgKytpKQorICAgICAgICAgICAgbV9jaGFuZ2Vk
IHw9IG1fZ3JhcGgubV9hcmd1bWVudFBvc2l0aW9uc1tpXS5tZXJnZUFyZ3VtZW50UHJlZGljdGlv
bkF3YXJlbmVzcygpOworICAgIH0KKworICAgIC8vIFNldHMgYW55IHByZWRpY3Rpb25zIHRoYXQg
ZG8gbm90IGRlcGVuZHMgb24gb3RoZXIgbm9kZXMuCisgICAgdm9pZCBwcm9jZXNzSW52YXJpYW50
cygpCisgICAgeworICAgICAgICBmb3IgKEJhc2ljQmxvY2sqIGJsb2NrIDogbV9ncmFwaC5ibG9j
a3NJbk5hdHVyYWxPcmRlcigpKSB7CisgICAgICAgICAgICBmb3IgKE5vZGUqIG5vZGUgOiAqYmxv
Y2spIHsKKyAgICAgICAgICAgICAgICBtX2N1cnJlbnROb2RlID0gbm9kZTsKKyAgICAgICAgICAg
ICAgICBwcm9jZXNzSW52YXJpYW50c0Zvck5vZGUoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAg
fQorICAgIH0KKworICAgIHZvaWQgcHJvY2Vzc0ludmFyaWFudHNGb3JOb2RlKCkKKyAgICB7Cisg
ICAgICAgIHN3aXRjaCAobV9jdXJyZW50Tm9kZS0+b3AoKSkgeworICAgICAgICBjYXNlIEpTQ29u
c3RhbnQ6IHsKKyAgICAgICAgICAgIFNwZWN1bGF0ZWRUeXBlIHR5cGUgPSBzcGVjdWxhdGlvbkZy
b21WYWx1ZShtX2N1cnJlbnROb2RlLT5hc0pTVmFsdWUoKSk7CisgICAgICAgICAgICBpZiAodHlw
ZSA9PSBTcGVjSW50NTJBc0RvdWJsZSAmJiBlbmFibGVJbnQ1MigpKQorICAgICAgICAgICAgICAg
IHR5cGUgPSBTcGVjSW50NTI7CisgICAgICAgICAgICBzZXRQcmVkaWN0aW9uKHR5cGUpOworICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgY2FzZSBEb3VibGVDb25zdGFudDog
eworICAgICAgICAgICAgU3BlY3VsYXRlZFR5cGUgdHlwZSA9IHNwZWN1bGF0aW9uRnJvbVZhbHVl
KG1fY3VycmVudE5vZGUtPmFzSlNWYWx1ZSgpKTsKKyAgICAgICAgICAgIHNldFByZWRpY3Rpb24o
dHlwZSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBjYXNlIEJpdEFu
ZDoKKyAgICAgICAgY2FzZSBCaXRPcjoKKyAgICAgICAgY2FzZSBCaXRYb3I6CisgICAgICAgIGNh
c2UgQml0UlNoaWZ0OgorICAgICAgICBjYXNlIEJpdExTaGlmdDoKKyAgICAgICAgY2FzZSBCaXRV
UlNoaWZ0OgorICAgICAgICBjYXNlIEFyaXRoSU11bDoKKyAgICAgICAgY2FzZSBBcml0aENsejMy
OiB7CisgICAgICAgICAgICBzZXRQcmVkaWN0aW9uKFNwZWNJbnQzMik7CisgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgfQorCisgICAgICAgIGNhc2UgVHJ5R2V0QnlJZDogeworICAgICAgICAg
ICAgc2V0UHJlZGljdGlvbihTcGVjQnl0ZWNvZGVUb3ApOworICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgIH0KKyAgICAgICAgY2FzZSBBcnJheVBvcDoKKyAgICAgICAgY2FzZSBBcnJheVB1c2g6
CisgICAgICAgIGNhc2UgUmVnRXhwRXhlYzoKKyAgICAgICAgY2FzZSBSZWdFeHBUZXN0OgorICAg
ICAgICBjYXNlIFN0cmluZ1JlcGxhY2U6CisgICAgICAgIGNhc2UgR2V0QnlJZDoKKyAgICAgICAg
Y2FzZSBHZXRCeUlkRmx1c2g6CisgICAgICAgIGNhc2UgR2V0QnlPZmZzZXQ6CisgICAgICAgIGNh
c2UgTXVsdGlHZXRCeU9mZnNldDoKKyAgICAgICAgY2FzZSBHZXREaXJlY3RQbmFtZToKKyAgICAg
ICAgY2FzZSBDYWxsOgorICAgICAgICBjYXNlIFRhaWxDYWxsSW5saW5lZENhbGxlcjoKKyAgICAg
ICAgY2FzZSBDb25zdHJ1Y3Q6CisgICAgICAgIGNhc2UgQ2FsbFZhcmFyZ3M6CisgICAgICAgIGNh
c2UgVGFpbENhbGxWYXJhcmdzSW5saW5lZENhbGxlcjoKKyAgICAgICAgY2FzZSBDb25zdHJ1Y3RW
YXJhcmdzOgorICAgICAgICBjYXNlIENhbGxGb3J3YXJkVmFyYXJnczoKKyAgICAgICAgY2FzZSBD
b25zdHJ1Y3RGb3J3YXJkVmFyYXJnczoKKyAgICAgICAgY2FzZSBUYWlsQ2FsbEZvcndhcmRWYXJh
cmdzSW5saW5lZENhbGxlcjoKKyAgICAgICAgY2FzZSBHZXRHbG9iYWxWYXI6CisgICAgICAgIGNh
c2UgR2V0R2xvYmFsTGV4aWNhbFZhcmlhYmxlOgorICAgICAgICBjYXNlIEdldENsb3N1cmVWYXI6
CisgICAgICAgIGNhc2UgR2V0RnJvbUFyZ3VtZW50czogeworICAgICAgICAgICAgc2V0UHJlZGlj
dGlvbihtX2N1cnJlbnROb2RlLT5nZXRIZWFwUHJlZGljdGlvbigpKTsKKyAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICB9CisKKyAgICAgICAgY2FzZSBHZXREeW5hbWljVmFyOiB7CisgICAgICAg
ICAgICBzZXRQcmVkaWN0aW9uKFNwZWNCeXRlY29kZVRvcCk7CisgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgfQorICAgICAgICAgICAgCisgICAgICAgIGNhc2UgR2V0R2V0dGVyU2V0dGVyQnlP
ZmZzZXQ6CisgICAgICAgIGNhc2UgR2V0RXhlY3V0YWJsZTogeworICAgICAgICAgICAgc2V0UHJl
ZGljdGlvbihTcGVjQ2VsbE90aGVyKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisK
KyAgICAgICAgY2FzZSBHZXRHZXR0ZXI6CisgICAgICAgIGNhc2UgR2V0U2V0dGVyOgorICAgICAg
ICBjYXNlIEdldENhbGxlZToKKyAgICAgICAgY2FzZSBOZXdGdW5jdGlvbjoKKyAgICAgICAgY2Fz
ZSBOZXdHZW5lcmF0b3JGdW5jdGlvbjogeworICAgICAgICAgICAgc2V0UHJlZGljdGlvbihTcGVj
RnVuY3Rpb24pOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgICAgIAor
ICAgICAgICBjYXNlIEdldEFyZ3VtZW50Q291bnQ6IHsKKyAgICAgICAgICAgIHNldFByZWRpY3Rp
b24oU3BlY0ludDMyKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisKKyAgICAgICAg
Y2FzZSBHZXRSZXN0TGVuZ3RoOiB7CisgICAgICAgICAgICBzZXRQcmVkaWN0aW9uKFNwZWNJbnQz
Mik7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorCisgICAgICAgIGNhc2UgR2V0VHlw
ZWRBcnJheUJ5dGVPZmZzZXQ6CisgICAgICAgIGNhc2UgR2V0QXJyYXlMZW5ndGg6IHsKKyAgICAg
ICAgICAgIHNldFByZWRpY3Rpb24oU3BlY0ludDMyKTsKKyAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICB9CisKKyAgICAgICAgY2FzZSBTdHJpbmdDaGFyQ29kZUF0OiB7CisgICAgICAgICAgICBz
ZXRQcmVkaWN0aW9uKFNwZWNJbnQzMik7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQor
ICAgICAgICBjYXNlIEFyaXRoUG93OgorICAgICAgICBjYXNlIEFyaXRoU3FydDoKKyAgICAgICAg
Y2FzZSBBcml0aEZSb3VuZDoKKyAgICAgICAgY2FzZSBBcml0aFNpbjoKKyAgICAgICAgY2FzZSBB
cml0aENvczoKKyAgICAgICAgY2FzZSBBcml0aExvZzogeworICAgICAgICAgICAgc2V0UHJlZGlj
dGlvbihTcGVjQnl0ZWNvZGVEb3VibGUpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0K
KworICAgICAgICBjYXNlIEFyaXRoUmFuZG9tOiB7CisgICAgICAgICAgICBzZXRQcmVkaWN0aW9u
KFNwZWNEb3VibGVSZWFsKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAg
IGNhc2UgRGVsZXRlQnlJZDoKKyAgICAgICAgY2FzZSBMb2dpY2FsTm90OgorICAgICAgICBjYXNl
IENvbXBhcmVMZXNzOgorICAgICAgICBjYXNlIENvbXBhcmVMZXNzRXE6CisgICAgICAgIGNhc2Ug
Q29tcGFyZUdyZWF0ZXI6CisgICAgICAgIGNhc2UgQ29tcGFyZUdyZWF0ZXJFcToKKyAgICAgICAg
Y2FzZSBDb21wYXJlRXE6CisgICAgICAgIGNhc2UgQ29tcGFyZVN0cmljdEVxOgorICAgICAgICBj
YXNlIE92ZXJyaWRlc0hhc0luc3RhbmNlOgorICAgICAgICBjYXNlIEluc3RhbmNlT2Y6CisgICAg
ICAgIGNhc2UgSW5zdGFuY2VPZkN1c3RvbToKKyAgICAgICAgY2FzZSBJc0FycmF5T2JqZWN0Ogor
ICAgICAgICBjYXNlIElzSlNBcnJheToKKyAgICAgICAgY2FzZSBJc0FycmF5Q29uc3RydWN0b3I6
CisgICAgICAgIGNhc2UgSXNVbmRlZmluZWQ6CisgICAgICAgIGNhc2UgSXNCb29sZWFuOgorICAg
ICAgICBjYXNlIElzTnVtYmVyOgorICAgICAgICBjYXNlIElzU3RyaW5nOgorICAgICAgICBjYXNl
IElzT2JqZWN0OgorICAgICAgICBjYXNlIElzT2JqZWN0T3JOdWxsOgorICAgICAgICBjYXNlIElz
RnVuY3Rpb246CisgICAgICAgIGNhc2UgSXNSZWdFeHBPYmplY3Q6IHsKKyAgICAgICAgICAgIHNl
dFByZWRpY3Rpb24oU3BlY0Jvb2xlYW4pOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0K
KworICAgICAgICBjYXNlIFR5cGVPZjogeworICAgICAgICAgICAgc2V0UHJlZGljdGlvbihTcGVj
U3RyaW5nSWRlbnQpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgY2Fz
ZSBHZXRCdXR0ZXJmbHk6CisgICAgICAgIGNhc2UgR2V0SW5kZXhlZFByb3BlcnR5U3RvcmFnZToK
KyAgICAgICAgY2FzZSBBbGxvY2F0ZVByb3BlcnR5U3RvcmFnZToKKyAgICAgICAgY2FzZSBSZWFs
bG9jYXRlUHJvcGVydHlTdG9yYWdlOiB7CisgICAgICAgICAgICBzZXRQcmVkaWN0aW9uKFNwZWNP
dGhlcik7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorCisgICAgICAgIGNhc2UgQ2Fs
bE9iamVjdENvbnN0cnVjdG9yOiB7CisgICAgICAgICAgICBzZXRQcmVkaWN0aW9uKFNwZWNPYmpl
Y3QpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgY2FzZSBTa2lwU2Nv
cGU6CisgICAgICAgIGNhc2UgR2V0R2xvYmFsT2JqZWN0OiB7CisgICAgICAgICAgICBzZXRQcmVk
aWN0aW9uKFNwZWNPYmplY3RPdGhlcik7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQor
CisgICAgICAgIGNhc2UgUmVzb2x2ZVNjb3BlOiB7CisgICAgICAgICAgICBzZXRQcmVkaWN0aW9u
KFNwZWNPYmplY3RPdGhlcik7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAg
ICAgICAgCisgICAgICAgIGNhc2UgQ3JlYXRlVGhpczoKKyAgICAgICAgY2FzZSBOZXdPYmplY3Q6
IHsKKyAgICAgICAgICAgIHNldFByZWRpY3Rpb24oU3BlY0ZpbmFsT2JqZWN0KTsKKyAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgICAgICAKKyAgICAgICAgY2FzZSBOZXdBcnJh
eToKKyAgICAgICAgY2FzZSBOZXdBcnJheVdpdGhTaXplOgorICAgICAgICBjYXNlIE5ld0FycmF5
QnVmZmVyOiB7CisgICAgICAgICAgICBzZXRQcmVkaWN0aW9uKFNwZWNBcnJheSk7CisgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICAgICAgCisgICAgICAgIGNhc2UgTmV3VHlw
ZWRBcnJheTogeworICAgICAgICAgICAgc2V0UHJlZGljdGlvbihzcGVjdWxhdGlvbkZyb21UeXBl
ZEFycmF5VHlwZShtX2N1cnJlbnROb2RlLT50eXBlZEFycmF5VHlwZSgpKSk7CisgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgfQorICAgICAgICAgICAgCisgICAgICAgIGNhc2UgTmV3UmVnZXhw
OiB7CisgICAgICAgICAgICBzZXRQcmVkaWN0aW9uKFNwZWNSZWdFeHBPYmplY3QpOworICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICBjYXNlIENyZWF0
ZUFjdGl2YXRpb246IHsKKyAgICAgICAgICAgIHNldFByZWRpY3Rpb24oU3BlY09iamVjdE90aGVy
KTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBjYXNl
IFN0cmluZ0Zyb21DaGFyQ29kZTogeworICAgICAgICAgICAgc2V0UHJlZGljdGlvbihTcGVjU3Ry
aW5nKTsKKyAgICAgICAgICAgIG1fY3VycmVudE5vZGUtPmNoaWxkMSgpLT5tZXJnZUZsYWdzKE5v
ZGVCeXRlY29kZVVzZXNBc051bWJlciB8IE5vZGVCeXRlY29kZVVzZXNBc0ludCk7CiAgICAgICAg
ICAgICBicmVhazsKICAgICAgICAgfQogICAgICAgICBjYXNlIFN0cmluZ0NoYXJBdDoKQEAgLTYx
OCw0MCArODQxLDkxIEBAIHByaXZhdGU6CiAgICAgICAgIGNhc2UgVG9TdHJpbmc6CiAgICAgICAg
IGNhc2UgTWFrZVJvcGU6CiAgICAgICAgIGNhc2UgU3RyQ2F0OiB7Ci0gICAgICAgICAgICBjaGFu
Z2VkIHw9IHNldFByZWRpY3Rpb24oU3BlY1N0cmluZyk7CisgICAgICAgICAgICBzZXRQcmVkaWN0
aW9uKFNwZWNTdHJpbmcpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAg
Y2FzZSBOZXdTdHJpbmdPYmplY3Q6IHsKKyAgICAgICAgICAgIHNldFByZWRpY3Rpb24oU3BlY1N0
cmluZ09iamVjdCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICAgICAg
CisgICAgICAgIGNhc2UgQ3JlYXRlRGlyZWN0QXJndW1lbnRzOiB7CisgICAgICAgICAgICBzZXRQ
cmVkaWN0aW9uKFNwZWNEaXJlY3RBcmd1bWVudHMpOworICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICBjYXNlIENyZWF0ZVNjb3BlZEFyZ3VtZW50czog
eworICAgICAgICAgICAgc2V0UHJlZGljdGlvbihTcGVjU2NvcGVkQXJndW1lbnRzKTsKKyAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgICAgICAKKyAgICAgICAgY2FzZSBDcmVh
dGVDbG9uZWRBcmd1bWVudHM6IHsKKyAgICAgICAgICAgIHNldFByZWRpY3Rpb24oU3BlY09iamVj
dE90aGVyKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgICAgICAKKyAg
ICAgICAgY2FzZSBGaWF0SW50NTI6IHsKKyAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKGVuYWJs
ZUludDUyKCkpOworICAgICAgICAgICAgc2V0UHJlZGljdGlvbihTcGVjTWFjaGluZUludCk7Cisg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorCisgICAgICAgIGNhc2UgR2V0U2NvcGU6Cisg
ICAgICAgICAgICBzZXRQcmVkaWN0aW9uKFNwZWNPYmplY3RPdGhlcik7CisgICAgICAgICAgICBi
cmVhazsKKworICAgICAgICBjYXNlIEluOgorICAgICAgICAgICAgc2V0UHJlZGljdGlvbihTcGVj
Qm9vbGVhbik7CisgICAgICAgICAgICBicmVhazsKKworICAgICAgICBjYXNlIEdldEVudW1lcmFi
bGVMZW5ndGg6IHsKKyAgICAgICAgICAgIHNldFByZWRpY3Rpb24oU3BlY0ludDMyKTsKICAgICAg
ICAgICAgIGJyZWFrOwogICAgICAgICB9Ci0gICAgICAgICAgICAKLSAgICAgICAgY2FzZSBUb1By
aW1pdGl2ZTogewotICAgICAgICAgICAgU3BlY3VsYXRlZFR5cGUgY2hpbGQgPSBub2RlLT5jaGls
ZDEoKS0+cHJlZGljdGlvbigpOwotICAgICAgICAgICAgaWYgKGNoaWxkKQotICAgICAgICAgICAg
ICAgIGNoYW5nZWQgfD0gbWVyZ2VQcmVkaWN0aW9uKHJlc3VsdE9mVG9QcmltaXRpdmUoY2hpbGQp
KTsKKyAgICAgICAgY2FzZSBIYXNHZW5lcmljUHJvcGVydHk6CisgICAgICAgIGNhc2UgSGFzU3Ry
dWN0dXJlUHJvcGVydHk6CisgICAgICAgIGNhc2UgSGFzSW5kZXhlZFByb3BlcnR5OiB7CisgICAg
ICAgICAgICBzZXRQcmVkaWN0aW9uKFNwZWNCb29sZWFuKTsKICAgICAgICAgICAgIGJyZWFrOwog
ICAgICAgICB9Ci0gICAgICAgICAgICAKLSAgICAgICAgY2FzZSBOZXdTdHJpbmdPYmplY3Q6IHsK
LSAgICAgICAgICAgIGNoYW5nZWQgfD0gc2V0UHJlZGljdGlvbihTcGVjU3RyaW5nT2JqZWN0KTsK
KyAgICAgICAgY2FzZSBHZXRQcm9wZXJ0eUVudW1lcmF0b3I6IHsKKyAgICAgICAgICAgIHNldFBy
ZWRpY3Rpb24oU3BlY0NlbGwpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KLSAgICAg
ICAgICAgIAotICAgICAgICBjYXNlIENyZWF0ZURpcmVjdEFyZ3VtZW50czogewotICAgICAgICAg
ICAgY2hhbmdlZCB8PSBzZXRQcmVkaWN0aW9uKFNwZWNEaXJlY3RBcmd1bWVudHMpOworICAgICAg
ICBjYXNlIEdldEVudW1lcmF0b3JTdHJ1Y3R1cmVQbmFtZTogeworICAgICAgICAgICAgc2V0UHJl
ZGljdGlvbihTcGVjQ2VsbCB8IFNwZWNPdGhlcik7CiAgICAgICAgICAgICBicmVhazsKICAgICAg
ICAgfQotICAgICAgICAgICAgCi0gICAgICAgIGNhc2UgQ3JlYXRlU2NvcGVkQXJndW1lbnRzOiB7
Ci0gICAgICAgICAgICBjaGFuZ2VkIHw9IHNldFByZWRpY3Rpb24oU3BlY1Njb3BlZEFyZ3VtZW50
cyk7CisgICAgICAgIGNhc2UgR2V0RW51bWVyYXRvckdlbmVyaWNQbmFtZTogeworICAgICAgICAg
ICAgc2V0UHJlZGljdGlvbihTcGVjQ2VsbCB8IFNwZWNPdGhlcik7CiAgICAgICAgICAgICBicmVh
azsKICAgICAgICAgfQotICAgICAgICAgICAgCi0gICAgICAgIGNhc2UgQ3JlYXRlQ2xvbmVkQXJn
dW1lbnRzOiB7Ci0gICAgICAgICAgICBjaGFuZ2VkIHw9IHNldFByZWRpY3Rpb24oU3BlY09iamVj
dE90aGVyKTsKKyAgICAgICAgY2FzZSBUb0luZGV4U3RyaW5nOiB7CisgICAgICAgICAgICBzZXRQ
cmVkaWN0aW9uKFNwZWNTdHJpbmcpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KLSAg
ICAgICAgICAgIAotICAgICAgICBjYXNlIEZpYXRJbnQ1MjogewotICAgICAgICAgICAgUkVMRUFT
RV9BU1NFUlQoZW5hYmxlSW50NTIoKSk7Ci0gICAgICAgICAgICBjaGFuZ2VkIHw9IHNldFByZWRp
Y3Rpb24oU3BlY01hY2hpbmVJbnQpOworCisgICAgICAgIGNhc2UgR2V0TG9jYWw6CisgICAgICAg
IGNhc2UgU2V0TG9jYWw6CisgICAgICAgIGNhc2UgVUludDMyVG9OdW1iZXI6CisgICAgICAgIGNh
c2UgVmFsdWVBZGQ6CisgICAgICAgIGNhc2UgQXJpdGhBZGQ6CisgICAgICAgIGNhc2UgQXJpdGhT
dWI6CisgICAgICAgIGNhc2UgQXJpdGhOZWdhdGU6CisgICAgICAgIGNhc2UgQXJpdGhNaW46Cisg
ICAgICAgIGNhc2UgQXJpdGhNYXg6CisgICAgICAgIGNhc2UgQXJpdGhNdWw6CisgICAgICAgIGNh
c2UgQXJpdGhEaXY6CisgICAgICAgIGNhc2UgQXJpdGhNb2Q6CisgICAgICAgIGNhc2UgQXJpdGhS
b3VuZDoKKyAgICAgICAgY2FzZSBBcml0aEZsb29yOgorICAgICAgICBjYXNlIEFyaXRoQ2VpbDoK
KyAgICAgICAgY2FzZSBBcml0aFRydW5jOgorICAgICAgICBjYXNlIEFyaXRoQWJzOgorICAgICAg
ICBjYXNlIEdldEJ5VmFsOgorICAgICAgICBjYXNlIFRvVGhpczoKKyAgICAgICAgY2FzZSBUb1By
aW1pdGl2ZTogeworICAgICAgICAgICAgbV9kZXBlbmRlbnROb2Rlcy5hcHBlbmQobV9jdXJyZW50
Tm9kZSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogCkBAIC02OTYsNyArOTcwLDcg
QEAgcHJpdmF0ZToKICAgICAgICAgY2FzZSBMYXp5SlNDb25zdGFudDogewogICAgICAgICAgICAg
Ly8gVGhpcyBub2RlIHNob3VsZCBuZXZlciBiZSB2aXNpYmxlIGF0IHRoaXMgc3RhZ2Ugb2YgY29t
cGlsYXRpb24uIEl0IGlzCiAgICAgICAgICAgICAvLyBpbnNlcnRlZCBieSBmaXh1cCgpLCB3aGlj
aCBmb2xsb3dzIHRoaXMgcGhhc2UuCi0gICAgICAgICAgICBERkdfQ1JBU0gobV9ncmFwaCwgbm9k
ZSwgIlVuZXhwZWN0ZWQgbm9kZSBkdXJpbmcgcHJlZGljdGlvbiBwcm9wYWdhdGlvbiIpOworICAg
ICAgICAgICAgREZHX0NSQVNIKG1fZ3JhcGgsIG1fY3VycmVudE5vZGUsICJVbmV4cGVjdGVkIG5v
ZGUgZHVyaW5nIHByZWRpY3Rpb24gcHJvcGFnYXRpb24iKTsKICAgICAgICAgICAgIGJyZWFrOwog
ICAgICAgICB9CiAgICAgICAgIApAQCAtNzEwLDQxICs5ODQsNiBAQCBwcml2YXRlOgogICAgICAg
ICAgICAgLy8gVGhlc2UgZG9uJ3QgZ2V0IGluc2VydGVkIHVudGlsIHdlIGdvIGludG8gU1NBLgog
ICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICAgICAgICAgIGJy
ZWFrOwotICAgIAotICAgICAgICBjYXNlIEdldFNjb3BlOgotICAgICAgICAgICAgY2hhbmdlZCB8
PSBzZXRQcmVkaWN0aW9uKFNwZWNPYmplY3RPdGhlcik7Ci0gICAgICAgICAgICBicmVhazsKLQot
ICAgICAgICBjYXNlIEluOgotICAgICAgICAgICAgY2hhbmdlZCB8PSBzZXRQcmVkaWN0aW9uKFNw
ZWNCb29sZWFuKTsKLSAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgIGNhc2UgR2V0RW51bWVy
YWJsZUxlbmd0aDogewotICAgICAgICAgICAgY2hhbmdlZCB8PSBzZXRQcmVkaWN0aW9uKFNwZWNJ
bnQzMik7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBjYXNlIEhhc0dl
bmVyaWNQcm9wZXJ0eToKLSAgICAgICAgY2FzZSBIYXNTdHJ1Y3R1cmVQcm9wZXJ0eToKLSAgICAg
ICAgY2FzZSBIYXNJbmRleGVkUHJvcGVydHk6IHsKLSAgICAgICAgICAgIGNoYW5nZWQgfD0gc2V0
UHJlZGljdGlvbihTcGVjQm9vbGVhbik7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQot
ICAgICAgICBjYXNlIEdldFByb3BlcnR5RW51bWVyYXRvcjogewotICAgICAgICAgICAgY2hhbmdl
ZCB8PSBzZXRQcmVkaWN0aW9uKFNwZWNDZWxsKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAg
ICB9Ci0gICAgICAgIGNhc2UgR2V0RW51bWVyYXRvclN0cnVjdHVyZVBuYW1lOiB7Ci0gICAgICAg
ICAgICBjaGFuZ2VkIHw9IHNldFByZWRpY3Rpb24oU3BlY0NlbGwgfCBTcGVjT3RoZXIpOwotICAg
ICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgY2FzZSBHZXRFbnVtZXJhdG9yR2Vu
ZXJpY1BuYW1lOiB7Ci0gICAgICAgICAgICBjaGFuZ2VkIHw9IHNldFByZWRpY3Rpb24oU3BlY0Nl
bGwgfCBTcGVjT3RoZXIpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAg
Y2FzZSBUb0luZGV4U3RyaW5nOiB7Ci0gICAgICAgICAgICBjaGFuZ2VkIHw9IHNldFByZWRpY3Rp
b24oU3BlY1N0cmluZyk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQogCiAjaWZuZGVm
IE5ERUJVRwogICAgICAgICAvLyBUaGVzZSBnZXQgaWdub3JlZCBiZWNhdXNlIHRoZXkgZG9uJ3Qg
cmV0dXJuIGFueXRoaW5nLgpAQCAtODI1LDIwMiArMTA2NCw2IEBAIHByaXZhdGU6CiAgICAgICAg
ICAgICBicmVhazsKICNlbmRpZgogICAgICAgICB9Ci0KLSAgICAgICAgbV9jaGFuZ2VkIHw9IGNo
YW5nZWQ7Ci0gICAgfQotICAgICAgICAKLSAgICB2b2lkIHByb3BhZ2F0ZUZvcndhcmQoKQotICAg
IHsKLSAgICAgICAgZm9yIChCbG9ja0luZGV4IGJsb2NrSW5kZXggPSAwOyBibG9ja0luZGV4IDwg
bV9ncmFwaC5udW1CbG9ja3MoKTsgKytibG9ja0luZGV4KSB7Ci0gICAgICAgICAgICBCYXNpY0Js
b2NrKiBibG9jayA9IG1fZ3JhcGguYmxvY2soYmxvY2tJbmRleCk7Ci0gICAgICAgICAgICBpZiAo
IWJsb2NrKQotICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgQVNTRVJUKGJs
b2NrLT5pc1JlYWNoYWJsZSk7Ci0gICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwg
YmxvY2stPnNpemUoKTsgKytpKSB7Ci0gICAgICAgICAgICAgICAgbV9jdXJyZW50Tm9kZSA9IGJs
b2NrLT5hdChpKTsKLSAgICAgICAgICAgICAgICBwcm9wYWdhdGUobV9jdXJyZW50Tm9kZSk7Ci0g
ICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgCi0gICAgdm9pZCBwcm9wYWdhdGVC
YWNrd2FyZCgpCi0gICAgewotICAgICAgICBmb3IgKEJsb2NrSW5kZXggYmxvY2tJbmRleCA9IG1f
Z3JhcGgubnVtQmxvY2tzKCk7IGJsb2NrSW5kZXgtLTspIHsKLSAgICAgICAgICAgIEJhc2ljQmxv
Y2sqIGJsb2NrID0gbV9ncmFwaC5ibG9jayhibG9ja0luZGV4KTsKLSAgICAgICAgICAgIGlmICgh
YmxvY2spCi0gICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICBBU1NFUlQoYmxv
Y2stPmlzUmVhY2hhYmxlKTsKLSAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IGJsb2NrLT5z
aXplKCk7IGktLTspIHsKLSAgICAgICAgICAgICAgICBtX2N1cnJlbnROb2RlID0gYmxvY2stPmF0
KGkpOwotICAgICAgICAgICAgICAgIHByb3BhZ2F0ZShtX2N1cnJlbnROb2RlKTsKLSAgICAgICAg
ICAgIH0KLSAgICAgICAgfQotICAgIH0KLSAgICAKLSAgICB2b2lkIGRvRG91YmxlVm90aW5nKE5v
ZGUqIG5vZGUsIGZsb2F0IHdlaWdodCkKLSAgICB7Ci0gICAgICAgIC8vIExvb3AgcHJlLWhlYWRl
cnMgY3JlYXRlZCBieSBPU1IgZW50cnlwb2ludCBjcmVhdGlvbiBtYXkgaGF2ZSBOYU4gd2VpZ2h0
IHRvIGluZGljYXRlCi0gICAgICAgIC8vIHRoYXQgd2UgYWN0dWFsbHkgZG9uJ3Qga25vdyB0aGV5
IHdlaWdodC4gQXNzdW1lIHRoYXQgdGhleSBleGVjdXRlIG9uY2UuIFRoaXMgdHVybnMKLSAgICAg
ICAgLy8gb3V0IHRvIGJlIGFuIE9LIGFzc3VtcHRpb24gc2luY2UgdGhlIHByZS1oZWFkZXIgZG9l
c24ndCBoYXZlIGFueSBtZWFuaW5nZnVsIGNvZGUuCi0gICAgICAgIGlmICh3ZWlnaHQgIT0gd2Vp
Z2h0KQotICAgICAgICAgICAgd2VpZ2h0ID0gMTsKLSAgICAgICAgCi0gICAgICAgIHN3aXRjaCAo
bm9kZS0+b3AoKSkgewotICAgICAgICBjYXNlIFZhbHVlQWRkOgotICAgICAgICBjYXNlIEFyaXRo
QWRkOgotICAgICAgICBjYXNlIEFyaXRoU3ViOiB7Ci0gICAgICAgICAgICBTcGVjdWxhdGVkVHlw
ZSBsZWZ0ID0gbm9kZS0+Y2hpbGQxKCktPnByZWRpY3Rpb24oKTsKLSAgICAgICAgICAgIFNwZWN1
bGF0ZWRUeXBlIHJpZ2h0ID0gbm9kZS0+Y2hpbGQyKCktPnByZWRpY3Rpb24oKTsKLSAgICAgICAg
ICAgICAgICAKLSAgICAgICAgICAgIERvdWJsZUJhbGxvdCBiYWxsb3Q7Ci0gICAgICAgICAgICAg
ICAgCi0gICAgICAgICAgICBpZiAoaXNGdWxsTnVtYmVyU3BlY3VsYXRpb24obGVmdCkKLSAgICAg
ICAgICAgICAgICAmJiBpc0Z1bGxOdW1iZXJTcGVjdWxhdGlvbihyaWdodCkKLSAgICAgICAgICAg
ICAgICAmJiAhbV9ncmFwaC5hZGRTaG91bGRTcGVjdWxhdGVJbnQzMihub2RlLCBtX3Bhc3MpCi0g
ICAgICAgICAgICAgICAgJiYgIW1fZ3JhcGguYWRkU2hvdWxkU3BlY3VsYXRlTWFjaGluZUludChu
b2RlKSkKLSAgICAgICAgICAgICAgICBiYWxsb3QgPSBWb3RlRG91YmxlOwotICAgICAgICAgICAg
ZWxzZQotICAgICAgICAgICAgICAgIGJhbGxvdCA9IFZvdGVWYWx1ZTsKLSAgICAgICAgICAgICAg
ICAKLSAgICAgICAgICAgIG1fZ3JhcGgudm90ZU5vZGUobm9kZS0+Y2hpbGQxKCksIGJhbGxvdCwg
d2VpZ2h0KTsKLSAgICAgICAgICAgIG1fZ3JhcGgudm90ZU5vZGUobm9kZS0+Y2hpbGQyKCksIGJh
bGxvdCwgd2VpZ2h0KTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgICAg
ICAgICAgCi0gICAgICAgIGNhc2UgQXJpdGhNdWw6IHsKLSAgICAgICAgICAgIFNwZWN1bGF0ZWRU
eXBlIGxlZnQgPSBub2RlLT5jaGlsZDEoKS0+cHJlZGljdGlvbigpOwotICAgICAgICAgICAgU3Bl
Y3VsYXRlZFR5cGUgcmlnaHQgPSBub2RlLT5jaGlsZDIoKS0+cHJlZGljdGlvbigpOwotICAgICAg
ICAgICAgICAgIAotICAgICAgICAgICAgRG91YmxlQmFsbG90IGJhbGxvdDsKLSAgICAgICAgICAg
ICAgICAKLSAgICAgICAgICAgIGlmIChpc0Z1bGxOdW1iZXJTcGVjdWxhdGlvbihsZWZ0KQotICAg
ICAgICAgICAgICAgICYmIGlzRnVsbE51bWJlclNwZWN1bGF0aW9uKHJpZ2h0KQotICAgICAgICAg
ICAgICAgICYmICFtX2dyYXBoLmJpbmFyeUFyaXRoU2hvdWxkU3BlY3VsYXRlSW50MzIobm9kZSwg
bV9wYXNzKQotICAgICAgICAgICAgICAgICYmICFtX2dyYXBoLmJpbmFyeUFyaXRoU2hvdWxkU3Bl
Y3VsYXRlTWFjaGluZUludChub2RlLCBtX3Bhc3MpKQotICAgICAgICAgICAgICAgIGJhbGxvdCA9
IFZvdGVEb3VibGU7Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgYmFsbG90ID0g
Vm90ZVZhbHVlOwotICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgbV9ncmFwaC52b3RlTm9k
ZShub2RlLT5jaGlsZDEoKSwgYmFsbG90LCB3ZWlnaHQpOwotICAgICAgICAgICAgbV9ncmFwaC52
b3RlTm9kZShub2RlLT5jaGlsZDIoKSwgYmFsbG90LCB3ZWlnaHQpOwotICAgICAgICAgICAgYnJl
YWs7Ci0gICAgICAgIH0KLQotICAgICAgICBjYXNlIEFyaXRoTWluOgotICAgICAgICBjYXNlIEFy
aXRoTWF4OgotICAgICAgICBjYXNlIEFyaXRoTW9kOgotICAgICAgICBjYXNlIEFyaXRoRGl2OiB7
Ci0gICAgICAgICAgICBTcGVjdWxhdGVkVHlwZSBsZWZ0ID0gbm9kZS0+Y2hpbGQxKCktPnByZWRp
Y3Rpb24oKTsKLSAgICAgICAgICAgIFNwZWN1bGF0ZWRUeXBlIHJpZ2h0ID0gbm9kZS0+Y2hpbGQy
KCktPnByZWRpY3Rpb24oKTsKLSAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgIERvdWJsZUJh
bGxvdCBiYWxsb3Q7Ci0gICAgICAgICAgICAgICAgCi0gICAgICAgICAgICBpZiAoaXNGdWxsTnVt
YmVyU3BlY3VsYXRpb24obGVmdCkKLSAgICAgICAgICAgICAgICAmJiBpc0Z1bGxOdW1iZXJTcGVj
dWxhdGlvbihyaWdodCkKLSAgICAgICAgICAgICAgICAmJiAhbV9ncmFwaC5iaW5hcnlBcml0aFNo
b3VsZFNwZWN1bGF0ZUludDMyKG5vZGUsIG1fcGFzcykpCi0gICAgICAgICAgICAgICAgYmFsbG90
ID0gVm90ZURvdWJsZTsKLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICBiYWxsb3Qg
PSBWb3RlVmFsdWU7Ci0gICAgICAgICAgICAgICAgCi0gICAgICAgICAgICBtX2dyYXBoLnZvdGVO
b2RlKG5vZGUtPmNoaWxkMSgpLCBiYWxsb3QsIHdlaWdodCk7Ci0gICAgICAgICAgICBtX2dyYXBo
LnZvdGVOb2RlKG5vZGUtPmNoaWxkMigpLCBiYWxsb3QsIHdlaWdodCk7Ci0gICAgICAgICAgICBi
cmVhazsKLSAgICAgICAgfQotICAgICAgICAgICAgICAgIAotICAgICAgICBjYXNlIEFyaXRoQWJz
OgotICAgICAgICAgICAgRG91YmxlQmFsbG90IGJhbGxvdDsKLSAgICAgICAgICAgIGlmIChub2Rl
LT5jaGlsZDEoKS0+c2hvdWxkU3BlY3VsYXRlTnVtYmVyKCkKLSAgICAgICAgICAgICAgICAmJiAh
bV9ncmFwaC51bmFyeUFyaXRoU2hvdWxkU3BlY3VsYXRlSW50MzIobm9kZSwgbV9wYXNzKSkKLSAg
ICAgICAgICAgICAgICBiYWxsb3QgPSBWb3RlRG91YmxlOwotICAgICAgICAgICAgZWxzZQotICAg
ICAgICAgICAgICAgIGJhbGxvdCA9IFZvdGVWYWx1ZTsKLSAgICAgICAgICAgICAgICAKLSAgICAg
ICAgICAgIG1fZ3JhcGgudm90ZU5vZGUobm9kZS0+Y2hpbGQxKCksIGJhbGxvdCwgd2VpZ2h0KTsK
LSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIAotICAgICAgICBjYXNlIEFyaXRo
U3FydDoKLSAgICAgICAgY2FzZSBBcml0aENvczoKLSAgICAgICAgY2FzZSBBcml0aFNpbjoKLSAg
ICAgICAgY2FzZSBBcml0aExvZzoKLSAgICAgICAgICAgIGlmIChub2RlLT5jaGlsZDEoKS0+c2hv
dWxkU3BlY3VsYXRlTnVtYmVyKCkpCi0gICAgICAgICAgICAgICAgbV9ncmFwaC52b3RlTm9kZShu
b2RlLT5jaGlsZDEoKSwgVm90ZURvdWJsZSwgd2VpZ2h0KTsKLSAgICAgICAgICAgIGVsc2UKLSAg
ICAgICAgICAgICAgICBtX2dyYXBoLnZvdGVOb2RlKG5vZGUtPmNoaWxkMSgpLCBWb3RlVmFsdWUs
IHdlaWdodCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAKLSAgICAgICAg
Y2FzZSBTZXRMb2NhbDogewotICAgICAgICAgICAgU3BlY3VsYXRlZFR5cGUgcHJlZGljdGlvbiA9
IG5vZGUtPmNoaWxkMSgpLT5wcmVkaWN0aW9uKCk7Ci0gICAgICAgICAgICBpZiAoaXNEb3VibGVT
cGVjdWxhdGlvbihwcmVkaWN0aW9uKSkKLSAgICAgICAgICAgICAgICBub2RlLT52YXJpYWJsZUFj
Y2Vzc0RhdGEoKS0+dm90ZShWb3RlRG91YmxlLCB3ZWlnaHQpOwotICAgICAgICAgICAgZWxzZSBp
ZiAoCi0gICAgICAgICAgICAgICAgIWlzRnVsbE51bWJlclNwZWN1bGF0aW9uKHByZWRpY3Rpb24p
Ci0gICAgICAgICAgICAgICAgfHwgaXNJbnQzMlNwZWN1bGF0aW9uKHByZWRpY3Rpb24pIHx8IGlz
TWFjaGluZUludFNwZWN1bGF0aW9uKHByZWRpY3Rpb24pKQotICAgICAgICAgICAgICAgIG5vZGUt
PnZhcmlhYmxlQWNjZXNzRGF0YSgpLT52b3RlKFZvdGVWYWx1ZSwgd2VpZ2h0KTsKLSAgICAgICAg
ICAgIGJyZWFrOwotICAgICAgICB9Ci0KLSAgICAgICAgY2FzZSBQdXRCeVZhbERpcmVjdDoKLSAg
ICAgICAgY2FzZSBQdXRCeVZhbDoKLSAgICAgICAgY2FzZSBQdXRCeVZhbEFsaWFzOiB7Ci0gICAg
ICAgICAgICBFZGdlIGNoaWxkMSA9IG1fZ3JhcGgudmFyQXJnQ2hpbGQobm9kZSwgMCk7Ci0gICAg
ICAgICAgICBFZGdlIGNoaWxkMiA9IG1fZ3JhcGgudmFyQXJnQ2hpbGQobm9kZSwgMSk7Ci0gICAg
ICAgICAgICBFZGdlIGNoaWxkMyA9IG1fZ3JhcGgudmFyQXJnQ2hpbGQobm9kZSwgMik7Ci0gICAg
ICAgICAgICBtX2dyYXBoLnZvdGVOb2RlKGNoaWxkMSwgVm90ZVZhbHVlLCB3ZWlnaHQpOwotICAg
ICAgICAgICAgbV9ncmFwaC52b3RlTm9kZShjaGlsZDIsIFZvdGVWYWx1ZSwgd2VpZ2h0KTsKLSAg
ICAgICAgICAgIHN3aXRjaCAobm9kZS0+YXJyYXlNb2RlKCkudHlwZSgpKSB7Ci0gICAgICAgICAg
ICBjYXNlIEFycmF5OjpEb3VibGU6Ci0gICAgICAgICAgICAgICAgbV9ncmFwaC52b3RlTm9kZShj
aGlsZDMsIFZvdGVEb3VibGUsIHdlaWdodCk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAg
ICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgICAgIG1fZ3JhcGgudm90ZU5vZGUoY2hpbGQz
LCBWb3RlVmFsdWUsIHdlaWdodCk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAg
ICB9Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICAgICAgCi0gICAgICAg
IGNhc2UgTW92SGludDoKLSAgICAgICAgICAgIC8vIElnbm9yZSB0aGVzZSBzaW5jZSB0aGV5IGhh
dmUgbm8gZWZmZWN0IG9uIGluLURGRyBleGVjdXRpb24uCi0gICAgICAgICAgICBicmVhazsKLSAg
ICAgICAgICAgIAotICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgbV9ncmFwaC52b3RlQ2hp
bGRyZW4obm9kZSwgVm90ZVZhbHVlLCB3ZWlnaHQpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAg
ICAgIH0KLSAgICB9Ci0gICAgCi0gICAgdm9pZCBkb1JvdW5kT2ZEb3VibGVWb3RpbmcoKQotICAg
IHsKLSAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG1fZ3JhcGgubV92YXJpYWJsZUFj
Y2Vzc0RhdGEuc2l6ZSgpOyArK2kpCi0gICAgICAgICAgICBtX2dyYXBoLm1fdmFyaWFibGVBY2Nl
c3NEYXRhW2ldLmZpbmQoKS0+Y2xlYXJWb3RlcygpOwotICAgICAgICBmb3IgKEJsb2NrSW5kZXgg
YmxvY2tJbmRleCA9IDA7IGJsb2NrSW5kZXggPCBtX2dyYXBoLm51bUJsb2NrcygpOyArK2Jsb2Nr
SW5kZXgpIHsKLSAgICAgICAgICAgIEJhc2ljQmxvY2sqIGJsb2NrID0gbV9ncmFwaC5ibG9jayhi
bG9ja0luZGV4KTsKLSAgICAgICAgICAgIGlmICghYmxvY2spCi0gICAgICAgICAgICAgICAgY29u
dGludWU7Ci0gICAgICAgICAgICBBU1NFUlQoYmxvY2stPmlzUmVhY2hhYmxlKTsKLSAgICAgICAg
ICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBibG9jay0+c2l6ZSgpOyArK2kpIHsKLSAgICAg
ICAgICAgICAgICBtX2N1cnJlbnROb2RlID0gYmxvY2stPmF0KGkpOwotICAgICAgICAgICAgICAg
IGRvRG91YmxlVm90aW5nKG1fY3VycmVudE5vZGUsIGJsb2NrLT5leGVjdXRpb25Db3VudCk7Ci0g
ICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8
IG1fZ3JhcGgubV92YXJpYWJsZUFjY2Vzc0RhdGEuc2l6ZSgpOyArK2kpIHsKLSAgICAgICAgICAg
IFZhcmlhYmxlQWNjZXNzRGF0YSogdmFyaWFibGVBY2Nlc3NEYXRhID0gJm1fZ3JhcGgubV92YXJp
YWJsZUFjY2Vzc0RhdGFbaV07Ci0gICAgICAgICAgICBpZiAoIXZhcmlhYmxlQWNjZXNzRGF0YS0+
aXNSb290KCkpCi0gICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICBtX2NoYW5n
ZWQgfD0gdmFyaWFibGVBY2Nlc3NEYXRhLT50YWxseVZvdGVzRm9yU2hvdWxkVXNlRG91YmxlRm9y
bWF0KCk7Ci0gICAgICAgIH0KLSAgICAgICAgcHJvcGFnYXRlVGhyb3VnaEFyZ3VtZW50UG9zaXRp
b25zKCk7Ci0gICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBtX2dyYXBoLm1fdmFyaWFi
bGVBY2Nlc3NEYXRhLnNpemUoKTsgKytpKSB7Ci0gICAgICAgICAgICBWYXJpYWJsZUFjY2Vzc0Rh
dGEqIHZhcmlhYmxlQWNjZXNzRGF0YSA9ICZtX2dyYXBoLm1fdmFyaWFibGVBY2Nlc3NEYXRhW2ld
OwotICAgICAgICAgICAgaWYgKCF2YXJpYWJsZUFjY2Vzc0RhdGEtPmlzUm9vdCgpKQotICAgICAg
ICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgbV9jaGFuZ2VkIHw9IHZhcmlhYmxlQWNj
ZXNzRGF0YS0+bWFrZVByZWRpY3Rpb25Gb3JEb3VibGVGb3JtYXQoKTsKLSAgICAgICAgfQotICAg
IH0KLSAgICAKLSAgICB2b2lkIHByb3BhZ2F0ZVRocm91Z2hBcmd1bWVudFBvc2l0aW9ucygpCi0g
ICAgewotICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbV9ncmFwaC5tX2FyZ3VtZW50
UG9zaXRpb25zLnNpemUoKTsgKytpKQotICAgICAgICAgICAgbV9jaGFuZ2VkIHw9IG1fZ3JhcGgu
bV9hcmd1bWVudFBvc2l0aW9uc1tpXS5tZXJnZUFyZ3VtZW50UHJlZGljdGlvbkF3YXJlbmVzcygp
OwogICAgIH0KIAogICAgIFNwZWN1bGF0ZWRUeXBlIHJlc3VsdE9mVG9QcmltaXRpdmUoU3BlY3Vs
YXRlZFR5cGUgdHlwZSkKQEAgLTEwMzYsMTEgKzEwNzksMTQgQEAgcHJpdmF0ZToKIAogICAgICAg
ICByZXR1cm4gdHlwZTsKICAgICB9Ci0gICAgCisKKyAgICBWZWN0b3I8Tm9kZSo+IG1fZGVwZW5k
ZW50Tm9kZXM7CiAgICAgTm9kZSogbV9jdXJyZW50Tm9kZTsKICAgICBib29sIG1fY2hhbmdlZDsK
ICAgICBQcmVkaWN0aW9uUGFzcyBtX3Bhc3M7IC8vIFdlIHVzZSBkaWZmZXJlbnQgbG9naWMgZm9y
IGNvbnNpZGVyaW5nIHByZWRpY3Rpb25zIGRlcGVuZGluZyBvbiBob3cgZmFyIGFsb25nIHdlIGFy
ZSBpbiBwcm9wYWdhdGlvbi4KIH07CisKK30gLy8gQW5vbnltb3VzIG5hbWVzcGFjZS4KICAgICAK
IGJvb2wgcGVyZm9ybVByZWRpY3Rpb25Qcm9wYWdhdGlvbihHcmFwaCYgZ3JhcGgpCiB7Cg==
</data>

          </attachment>
      

    </bug>

</bugzilla>