<?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>165883</bug_id>
          
          <creation_ts>2016-12-14 17:18:03 -0800</creation_ts>
          <short_desc>WebAssembly: Add various low hanging fruit that will allow us to run the LLVM torture tests in Wasm</short_desc>
          <delta_ts>2016-12-14 19:33:35 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>JavaScriptCore</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>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="Saam Barati">saam</reporter>
          <assigned_to name="Saam Barati">saam</assigned_to>
          <cc>benjamin</cc>
    
    <cc>commit-queue</cc>
    
    <cc>fpizlo</cc>
    
    <cc>ggaren</cc>
    
    <cc>gskachkov</cc>
    
    <cc>jfbastien</cc>
    
    <cc>keith_miller</cc>
    
    <cc>mark.lam</cc>
    
    <cc>msaboff</cc>
    
    <cc>oliver</cc>
    
    <cc>ticaiolima</cc>
    
    <cc>ysuzuki</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1259977</commentid>
    <comment_count>0</comment_count>
    <who name="Saam Barati">saam</who>
    <bug_when>2016-12-14 17:18:03 -0800</bug_when>
    <thetext>...</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1259989</commentid>
    <comment_count>1</comment_count>
      <attachid>297152</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2016-12-14 17:56:36 -0800</bug_when>
    <thetext>Created attachment 297152
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1259990</commentid>
    <comment_count>2</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2016-12-14 17:59:15 -0800</bug_when>
    <thetext>Attachment 297152 did not pass style-queue:


ERROR: Source/JavaScriptCore/wasm/WasmB3IRGenerator.cpp:455:  When wrapping a line, only indent 4 spaces.  [whitespace/indent] [3]
ERROR: Source/JavaScriptCore/wasm/WasmB3IRGenerator.cpp:461:  When wrapping a line, only indent 4 spaces.  [whitespace/indent] [3]
ERROR: Source/JavaScriptCore/wasm/WasmModuleParser.cpp:516:  Tests for true/false, null/non-null, and zero/non-zero should all be done without equality comparisons.  [readability/comparison_to_zero] [5]
ERROR: Source/JavaScriptCore/wasm/WasmModuleParser.cpp:523:  Tests for true/false, null/non-null, and zero/non-zero should all be done without equality comparisons.  [readability/comparison_to_zero] [5]
ERROR: Source/JavaScriptCore/wasm/js/WebAssemblyModuleRecord.cpp:132:  Tests for true/false, null/non-null, and zero/non-zero should all be done without equality comparisons.  [readability/comparison_to_zero] [5]
ERROR: Source/JavaScriptCore/wasm/js/WebAssemblyModuleRecord.cpp:140:  Tests for true/false, null/non-null, and zero/non-zero should all be done without equality comparisons.  [readability/comparison_to_zero] [5]
Total errors found: 6 in 12 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1259992</commentid>
    <comment_count>3</comment_count>
      <attachid>297152</attachid>
    <who name="JF Bastien">jfbastien</who>
    <bug_when>2016-12-14 18:00:38 -0800</bug_when>
    <thetext>Comment on attachment 297152
patch

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

Looks good otherwise.

&gt; JSTests/wasm/Builder.js:196
&gt; +        assert.isNumber(index, `Memory exports only support number indices right now`);

FIXME + bug?

&gt; JSTests/wasm/js-api/table.js:93
&gt; +    assertBadBinary(builder, badExportString);

I&apos;d really rather use assert.throws, I have to update the other tests to it right now.

&gt; JSTests/wasm/js-api/test_memory.js:156
&gt; +    return;

?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1260012</commentid>
    <comment_count>4</comment_count>
      <attachid>297152</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2016-12-14 19:10:25 -0800</bug_when>
    <thetext>Comment on attachment 297152
patch

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

&gt;&gt; JSTests/wasm/js-api/test_memory.js:156
&gt;&gt; +    return;
&gt; 
&gt; ?

This should be removed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1260013</commentid>
    <comment_count>5</comment_count>
      <attachid>297152</attachid>
    <who name="Keith Miller">keith_miller</who>
    <bug_when>2016-12-14 19:14:54 -0800</bug_when>
    <thetext>Comment on attachment 297152
patch

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

r=me.

&gt; JSTests/wasm/js-api/table.js:279
&gt; +    assert.truthy(table === instance.exports.table);
&gt; +    assert.truthy(table === instance.exports.table2);

can&apos;t you do assert.eq?

&gt;&gt; JSTests/wasm/js-api/test_memory.js:156
&gt;&gt; +    return;
&gt; 
&gt; ?

Test passes!

&gt; Source/JavaScriptCore/wasm/WasmB3IRGenerator.cpp:462
&gt; +        Value* partialResult = m_currentBlock-&gt;appendNew&lt;Value&gt;(m_proc, BitAnd, Origin(), 
&gt; +                value,
&gt; +                m_currentBlock-&gt;appendNew&lt;Const32Value&gt;(m_proc, Origin(), 0x0000ffff));

Nit, I would do this as:

Value* partialResult = m_currentBlock-&gt;appendNew&lt;Value&gt;(m_proc, BitAnd, Origin(), value,
    m_currentBlock-&gt;appendNew&lt;Const32Value&gt;(m_proc, Origin(), 0x0000ffff));</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1260017</commentid>
    <comment_count>6</comment_count>
    <who name="Saam Barati">saam</who>
    <bug_when>2016-12-14 19:31:42 -0800</bug_when>
    <thetext>landed in:
https://trac.webkit.org/changeset/209850</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1260019</commentid>
    <comment_count>7</comment_count>
    <who name="Saam Barati">saam</who>
    <bug_when>2016-12-14 19:33:01 -0800</bug_when>
    <thetext>*** Bug 165684 has been marked as a duplicate of this bug. ***</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1260021</commentid>
    <comment_count>8</comment_count>
    <who name="Saam Barati">saam</who>
    <bug_when>2016-12-14 19:33:15 -0800</bug_when>
    <thetext>*** Bug 165671 has been marked as a duplicate of this bug. ***</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1260023</commentid>
    <comment_count>9</comment_count>
    <who name="Saam Barati">saam</who>
    <bug_when>2016-12-14 19:33:35 -0800</bug_when>
    <thetext>*** Bug 165782 has been marked as a duplicate of this bug. ***</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>297152</attachid>
            <date>2016-12-14 17:56:36 -0800</date>
            <delta_ts>2016-12-14 19:14:54 -0800</delta_ts>
            <desc>patch</desc>
            <filename>b-backup.diff</filename>
            <type>text/plain</type>
            <size>19728</size>
            <attacher name="Saam Barati">saam</attacher>
            
              <data encoding="base64">SW5kZXg6IEpTVGVzdHMvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEpTVGVzdHMvQ2hhbmdlTG9n
CShyZXZpc2lvbiAyMDk4NDcpCisrKyBKU1Rlc3RzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpA
QCAtMSwzICsxLDIzIEBACisyMDE2LTEyLTE0ICBTYWFtIEJhcmF0aSAgPHNiYXJhdGlAYXBwbGUu
Y29tPgorCisgICAgICAgIFdlYkFzc2VtYmx5OiBBZGQgdmFyaW91cyBsb3cgaGFuZ2luZyBmcnVp
dCB0aGF0IHdpbGwgYWxsb3cgdXMgdG8gcnVuIHRoZSBMTFZNIHRvcnR1cmUgdGVzdHMgaW4gV2Fz
bQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTY1ODgz
CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiB3YXNt
L0J1aWxkZXIuanM6CisgICAgICAgIChleHBvcnQuZGVmYXVsdC5CdWlsZGVyLnByb3RvdHlwZS5f
cmVnaXN0ZXJTZWN0aW9uQnVpbGRlcnMuc3dpdGNoLmNhc2Uuc3RyaW5nX2FwcGVhcmVkX2hlcmUu
dGhpcy5zZWN0aW9uKToKKyAgICAgICAgKiB3YXNtL0J1aWxkZXJfV2ViQXNzZW1ibHlCaW5hcnku
anM6CisgICAgICAgIChjb25zdC5lbWl0dGVycy5FeHBvcnQpOgorICAgICAgICAqIHdhc20vanMt
YXBpL3RhYmxlLmpzOgorICAgICAgICAoYXNzZXJ0QmFkQmluYXJ5KToKKyAgICAgICAgKGFzc2Vy
dEJhZFRhYmxlKToKKyAgICAgICAgKGFzc2VydC50cnV0aHkpOgorICAgICAgICAqIHdhc20vanMt
YXBpL3Rlc3RfbWVtb3J5LmpzOgorICAgICAgICAoYmluYXJ5U2hvdWxkTm90UGFyc2UpOgorICAg
ICAgICAodGVzdCk6CisgICAgICAgIChhc3NlcnQpOgorCiAyMDE2LTEyLTE0ICBGaWxpcCBQaXps
byAgPGZwaXpsb0BhcHBsZS5jb20+CiAKICAgICAgICAgRGlyZWN0VGFpbENhbGwgaW1wbGVtZW50
YXRpb24gbmVlZHMgdG8gdGVsbCB0aGUgc2h1ZmZsZXIgd2hhdCB0byBwdXQgaW50byB0aGUgQXJn
dW1lbnRDb3VudCBleHBsaWNpdGx5CkluZGV4OiBKU1Rlc3RzL3dhc20vQnVpbGRlci5qcwo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBKU1Rlc3RzL3dhc20vQnVpbGRlci5qcwkocmV2aXNpb24gMjA5ODMwKQorKysg
SlNUZXN0cy93YXNtL0J1aWxkZXIuanMJKHdvcmtpbmcgY29weSkKQEAgLTE5MSw2ICsxOTEsMjIg
QEAgY29uc3QgX2V4cG9ydEdsb2JhbENvbnRpbnVhdGlvbiA9IChidWlsZAogICAgIH0KIH07CiAK
K2NvbnN0IF9leHBvcnRNZW1vcnlDb250aW51YXRpb24gPSAoYnVpbGRlciwgc2VjdGlvbiwgbmV4
dEJ1aWxkZXIpID0+IHsKKyAgICByZXR1cm4gKGZpZWxkLCBpbmRleCkgPT4geworICAgICAgICBh
c3NlcnQuaXNOdW1iZXIoaW5kZXgsIGBNZW1vcnkgZXhwb3J0cyBvbmx5IHN1cHBvcnQgbnVtYmVy
IGluZGljZXMgcmlnaHQgbm93YCk7CisgICAgICAgIHNlY3Rpb24uZGF0YS5wdXNoKHtmaWVsZCwg
a2luZDogIk1lbW9yeSIsIGluZGV4fSk7CisgICAgICAgIHJldHVybiBuZXh0QnVpbGRlcjsKKyAg
ICB9Cit9OworCitjb25zdCBfZXhwb3J0VGFibGVDb250aW51YXRpb24gPSAoYnVpbGRlciwgc2Vj
dGlvbiwgbmV4dEJ1aWxkZXIpID0+IHsKKyAgICByZXR1cm4gKGZpZWxkLCBpbmRleCkgPT4gewor
ICAgICAgICBhc3NlcnQuaXNOdW1iZXIoaW5kZXgsIGBUYWJsZSBleHBvcnRzIG9ubHkgc3VwcG9y
dCBudW1iZXIgaW5kaWNlcyByaWdodCBub3dgKTsKKyAgICAgICAgc2VjdGlvbi5kYXRhLnB1c2go
e2ZpZWxkLCBraW5kOiAiVGFibGUiLCBpbmRleH0pOworICAgICAgICByZXR1cm4gbmV4dEJ1aWxk
ZXI7CisgICAgfQorfTsKKwogY29uc3QgX2ltcG9ydEdsb2JhbENvbnRpbnVhdGlvbiA9IChidWls
ZGVyLCBzZWN0aW9uLCBuZXh0QnVpbGRlcikgPT4gewogICAgIHJldHVybiAoKSA9PiB7CiAgICAg
ICAgIGNvbnN0IGdsb2JhbEJ1aWxkZXIgPSB7CkBAIC01MTYsMTEgKzUzMiwxMSBAQCBleHBvcnQg
ZGVmYXVsdCBjbGFzcyBCdWlsZGVyIHsKICAgICAgICAgICAgICAgICAgICAgY29uc3QgcyA9IHRo
aXMuX2FkZFNlY3Rpb24oc2VjdGlvbik7CiAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGV4cG9y
dEJ1aWxkZXIgPSB7CiAgICAgICAgICAgICAgICAgICAgICAgICBFbmQ6ICgpID0+IHRoaXMsCi0g
ICAgICAgICAgICAgICAgICAgICAgICBUYWJsZTogKCkgPT4geyB0aHJvdyBuZXcgRXJyb3IoYFVu
aW1wbGVtZW50ZWQ6IGV4cG9ydCB0YWJsZWApOyB9LAotICAgICAgICAgICAgICAgICAgICAgICAg
TWVtb3J5OiAoKSA9PiB7IHRocm93IG5ldyBFcnJvcihgVW5pbXBsZW1lbnRlZDogZXhwb3J0IG1l
bW9yeWApOyB9LAogICAgICAgICAgICAgICAgICAgICB9OwogICAgICAgICAgICAgICAgICAgICBl
eHBvcnRCdWlsZGVyLkdsb2JhbCA9IF9leHBvcnRHbG9iYWxDb250aW51YXRpb24odGhpcywgcywg
ZXhwb3J0QnVpbGRlcik7CiAgICAgICAgICAgICAgICAgICAgIGV4cG9ydEJ1aWxkZXIuRnVuY3Rp
b24gPSBfZXhwb3J0RnVuY3Rpb25Db250aW51YXRpb24odGhpcywgcywgZXhwb3J0QnVpbGRlcik7
CisgICAgICAgICAgICAgICAgICAgIGV4cG9ydEJ1aWxkZXIuTWVtb3J5ID0gX2V4cG9ydE1lbW9y
eUNvbnRpbnVhdGlvbih0aGlzLCBzLCBleHBvcnRCdWlsZGVyKTsKKyAgICAgICAgICAgICAgICAg
ICAgZXhwb3J0QnVpbGRlci5UYWJsZSA9IF9leHBvcnRUYWJsZUNvbnRpbnVhdGlvbih0aGlzLCBz
LCBleHBvcnRCdWlsZGVyKTsKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGV4cG9ydEJ1aWxk
ZXI7CiAgICAgICAgICAgICAgICAgfTsKICAgICAgICAgICAgICAgICBicmVhazsKSW5kZXg6IEpT
VGVzdHMvd2FzbS9CdWlsZGVyX1dlYkFzc2VtYmx5QmluYXJ5LmpzCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEpT
VGVzdHMvd2FzbS9CdWlsZGVyX1dlYkFzc2VtYmx5QmluYXJ5LmpzCShyZXZpc2lvbiAyMDk4MzAp
CisrKyBKU1Rlc3RzL3dhc20vQnVpbGRlcl9XZWJBc3NlbWJseUJpbmFyeS5qcwkod29ya2luZyBj
b3B5KQpAQCAtMTY3LDE0ICsxNjcsMTMgQEAgY29uc3QgZW1pdHRlcnMgPSB7CiAgICAgICAgICAg
ICBwdXQoYmluLCAic3RyaW5nIiwgZW50cnkuZmllbGQpOwogICAgICAgICAgICAgcHV0KGJpbiwg
InVpbnQ4IiwgV0FTTS5leHRlcm5hbEtpbmRWYWx1ZVtlbnRyeS5raW5kXSk7CiAgICAgICAgICAg
ICBzd2l0Y2ggKGVudHJ5LmtpbmQpIHsKLSAgICAgICAgICAgIGRlZmF1bHQ6IHRocm93IG5ldyBF
cnJvcihgSW1wbGVtZW50YXRpb24gcHJvYmxlbTogdW5leHBlY3RlZCBraW5kICR7ZW50cnkua2lu
ZH1gKTsKICAgICAgICAgICAgIGNhc2UgIkdsb2JhbCI6CiAgICAgICAgICAgICBjYXNlICJGdW5j
dGlvbiI6CisgICAgICAgICAgICBjYXNlICJNZW1vcnkiOgorICAgICAgICAgICAgY2FzZSAiVGFi
bGUiOgogICAgICAgICAgICAgICAgIHB1dChiaW4sICJ2YXJ1aW50MzIiLCBlbnRyeS5pbmRleCk7
CiAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBjYXNlICJUYWJsZSI6IHRocm93
IG5ldyBFcnJvcihgTm90IHlldCBpbXBsZW1lbnRlZGApOwotICAgICAgICAgICAgY2FzZSAiTWVt
b3J5IjogdGhyb3cgbmV3IEVycm9yKGBOb3QgeWV0IGltcGxlbWVudGVkYCk7Ci0KKyAgICAgICAg
ICAgIGRlZmF1bHQ6IHRocm93IG5ldyBFcnJvcihgSW1wbGVtZW50YXRpb24gcHJvYmxlbTogdW5l
eHBlY3RlZCBraW5kICR7ZW50cnkua2luZH1gKTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQog
ICAgIH0sCkluZGV4OiBKU1Rlc3RzL3dhc20vanMtYXBpL3RhYmxlLmpzCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IEpTVGVzdHMvd2FzbS9qcy1hcGkvdGFibGUuanMJKHJldmlzaW9uIDIwOTgzMCkKKysrIEpTVGVz
dHMvd2FzbS9qcy1hcGkvdGFibGUuanMJKHdvcmtpbmcgY29weSkKQEAgLTMsNiArMyw3IEBAIGlt
cG9ydCAqIGFzIGFzc2VydCBmcm9tICcuLi9hc3NlcnQuanMnOwogCiBjb25zdCBiYWRUYWJsZVN0
cmluZyA9ICJjb3VsZG4ndCBwYXJzZSBzZWN0aW9uIFRhYmxlIjsKIGNvbnN0IGJhZEltcG9ydFN0
cmluZyA9ICJjb3VsZG4ndCBwYXJzZSBzZWN0aW9uIEltcG9ydCI7Citjb25zdCBiYWRFeHBvcnRT
dHJpbmcgPSAiY291bGRuJ3QgcGFyc2Ugc2VjdGlvbiBFeHBvcnQiOwogZnVuY3Rpb24gYXNzZXJ0
QmFkQmluYXJ5KGJ1aWxkZXIsIHN0cikgewogICAgIGNvbnN0IGJpbiA9IGJ1aWxkZXIuV2ViQXNz
ZW1ibHkoKS5nZXQoKTsKICAgICBsZXQgdGhyZXcgPSBmYWxzZTsKQEAgLTc5LDYgKzgwLDM1IEBA
IGZ1bmN0aW9uIGFzc2VydEJhZEJpbmFyeShidWlsZGVyLCBzdHIpIHsKICAgICBhc3NlcnRCYWRC
aW5hcnkoYnVpbGRlciwgImNhbGxfaW5kaXJlY3QgJ3Jlc2VydmVkJyB2YXJ1aW50MSBtdXN0IGJl
IDB4MCIpOwogfQogCit7CisgICAgLy8gQ2FuJ3QgZXhwb3J0IGFuIHVuZGVmaW5lZCB0YWJsZQor
ICAgIGNvbnN0IGJ1aWxkZXIgPSBuZXcgQnVpbGRlcigpCisgICAgICAgIC5UeXBlKCkuRW5kKCkK
KyAgICAgICAgLkZ1bmN0aW9uKCkuRW5kKCkKKyAgICAgICAgLkV4cG9ydCgpCisgICAgICAgICAg
ICAuVGFibGUoImZvbyIsIDApCisgICAgICAgIC5FbmQoKQorICAgICAgICAuQ29kZSgpCisgICAg
ICAgIC5FbmQoKTsKKyAgICBhc3NlcnRCYWRCaW5hcnkoYnVpbGRlciwgYmFkRXhwb3J0U3RyaW5n
KTsKK30KKworeworICAgIC8vIENhbid0IGV4cG9ydCBhIHRhYmxlIGF0IGluZGV4IDEuCisgICAg
Y29uc3QgYnVpbGRlciA9IG5ldyBCdWlsZGVyKCkKKyAgICAgICAgLlR5cGUoKS5FbmQoKQorICAg
ICAgICAuRnVuY3Rpb24oKS5FbmQoKQorICAgICAgICAuVGFibGUoKQorICAgICAgICAgICAgLlRh
YmxlKHtpbml0aWFsOiAyMCwgbWF4aW11bTogMzAsIGVsZW1lbnQ6ICJhbnlmdW5jIn0pCisgICAg
ICAgIC5FbmQoKQorICAgICAgICAuRXhwb3J0KCkKKyAgICAgICAgICAgIC5UYWJsZSgiZm9vIiwg
MSkKKyAgICAgICAgLkVuZCgpCisgICAgICAgIC5Db2RlKCkKKyAgICAgICAgLkVuZCgpOworICAg
IGFzc2VydEJhZEJpbmFyeShidWlsZGVyLCBiYWRFeHBvcnRTdHJpbmcpOworfQorCiBmdW5jdGlv
biBhc3NlcnRCYWRUYWJsZSh0YWJsZURlc2NyaXB0aW9uKSB7CiAgICAgY29uc3QgYnVpbGRlciA9
IG5ldyBCdWlsZGVyKCkKICAgICAgICAgLlR5cGUoKS5FbmQoKQpAQCAtMjI4LDMgKzI1OCw0MyBA
QCBmdW5jdGlvbiBhc3NlcnRCYWRUYWJsZUltcG9ydCh0YWJsZURlc2NyCiAgICAgYXNzZXJ0QmFk
VGFibGUoW10pOwogICAgIGFzc2VydEJhZFRhYmxlKG5ldyBXZWJBc3NlbWJseS5NZW1vcnkoe2lu
aXRpYWw6MX0pKTsKIH0KKworeworICAgIGNvbnN0IGJ1aWxkZXIgPSBuZXcgQnVpbGRlcigpCisg
ICAgICAgIC5UeXBlKCkuRW5kKCkKKyAgICAgICAgLkltcG9ydCgpCisgICAgICAgICAgICAuVGFi
bGUoImltcCIsICJ0YWJsZSIsIHtpbml0aWFsOiAyNSwgZWxlbWVudDogImFueWZ1bmMifSkKKyAg
ICAgICAgLkVuZCgpCisgICAgICAgIC5GdW5jdGlvbigpLkVuZCgpCisgICAgICAgIC5FeHBvcnQo
KQorICAgICAgICAgICAgLlRhYmxlKCJ0YWJsZSIsIDApCisgICAgICAgICAgICAuVGFibGUoInRh
YmxlMiIsIDApCisgICAgICAgIC5FbmQoKQorICAgICAgICAuQ29kZSgpLkVuZCgpOworCisgICAg
Y29uc3QgbW9kdWxlID0gbmV3IFdlYkFzc2VtYmx5Lk1vZHVsZShidWlsZGVyLldlYkFzc2VtYmx5
KCkuZ2V0KCkpOworICAgIGNvbnN0IHRhYmxlID0gbmV3IFdlYkFzc2VtYmx5LlRhYmxlKHtlbGVt
ZW50OiAiYW55ZnVuYyIsIGluaXRpYWw6IDI1fSk7CisgICAgY29uc3QgaW5zdGFuY2UgPSBuZXcg
V2ViQXNzZW1ibHkuSW5zdGFuY2UobW9kdWxlLCB7aW1wOiB7dGFibGV9fSk7CisgICAgYXNzZXJ0
LnRydXRoeSh0YWJsZSA9PT0gaW5zdGFuY2UuZXhwb3J0cy50YWJsZSk7CisgICAgYXNzZXJ0LnRy
dXRoeSh0YWJsZSA9PT0gaW5zdGFuY2UuZXhwb3J0cy50YWJsZTIpOworfQorCit7CisgICAgY29u
c3QgYnVpbGRlciA9IG5ldyBCdWlsZGVyKCkKKyAgICAgICAgLlR5cGUoKS5FbmQoKQorICAgICAg
ICAuRnVuY3Rpb24oKS5FbmQoKQorICAgICAgICAuVGFibGUoKQorICAgICAgICAgICAgLlRhYmxl
KHtpbml0aWFsOiAyMCwgbWF4aW11bTogMzAsIGVsZW1lbnQ6ICJhbnlmdW5jIn0pCisgICAgICAg
IC5FbmQoKQorICAgICAgICAuRXhwb3J0KCkKKyAgICAgICAgICAgIC5UYWJsZSgidGFibGUiLCAw
KQorICAgICAgICAgICAgLlRhYmxlKCJ0YWJsZTIiLCAwKQorICAgICAgICAuRW5kKCkKKyAgICAg
ICAgLkNvZGUoKS5FbmQoKTsKKworICAgIGNvbnN0IG1vZHVsZSA9IG5ldyBXZWJBc3NlbWJseS5N
b2R1bGUoYnVpbGRlci5XZWJBc3NlbWJseSgpLmdldCgpKTsKKyAgICBjb25zdCBpbnN0YW5jZSA9
IG5ldyBXZWJBc3NlbWJseS5JbnN0YW5jZShtb2R1bGUpOworICAgIGFzc2VydC50cnV0aHkoaW5z
dGFuY2UuZXhwb3J0cy50YWJsZSA9PT0gaW5zdGFuY2UuZXhwb3J0cy50YWJsZTIpOworICAgIGFz
c2VydC50cnV0aHkoaW5zdGFuY2UuZXhwb3J0cy50YWJsZSBpbnN0YW5jZW9mIFdlYkFzc2VtYmx5
LlRhYmxlKTsKKyAgICBhc3NlcnQudHJ1dGh5KGluc3RhbmNlLmV4cG9ydHMudGFibGUubGVuZ3Ro
ID09PSAyMCk7Cit9CkluZGV4OiBKU1Rlc3RzL3dhc20vanMtYXBpL3Rlc3RfbWVtb3J5LmpzCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIEpTVGVzdHMvd2FzbS9qcy1hcGkvdGVzdF9tZW1vcnkuanMJKHJldmlzaW9u
IDIwOTgzMCkKKysrIEpTVGVzdHMvd2FzbS9qcy1hcGkvdGVzdF9tZW1vcnkuanMJKHdvcmtpbmcg
Y29weSkKQEAgLTEwMiw2ICsxMDIsMzMgQEAgZnVuY3Rpb24gYmluYXJ5U2hvdWxkTm90UGFyc2Uo
YnVpbGRlcikgewogfQogCiB7CisgICAgLy8gQ2FuJ3QgZXhwb3J0IGFuIHVuZGVmaW5lZCBtZW1v
cnkuCisgICAgY29uc3QgYnVpbGRlciA9IChuZXcgQnVpbGRlcigpKQorICAgICAgICAuVHlwZSgp
LkVuZCgpCisgICAgICAgIC5GdW5jdGlvbigpLkVuZCgpCisgICAgICAgIC5FeHBvcnQoKQorICAg
ICAgICAgICAgLk1lbW9yeSgibWVtb3J5IiwgMCkKKyAgICAgICAgLkVuZCgpCisgICAgICAgIC5D
b2RlKCkKKyAgICAgICAgLkVuZCgpOworICAgIGJpbmFyeVNob3VsZE5vdFBhcnNlKGJ1aWxkZXIp
OworfQorCit7CisgICAgLy8gQ2FuJ3QgZXhwb3J0IGEgbm9uLXplcm8gbWVtb3J5IGluZGV4Lgor
ICAgIGNvbnN0IGJ1aWxkZXIgPSAobmV3IEJ1aWxkZXIoKSkKKyAgICAgICAgLlR5cGUoKS5FbmQo
KQorICAgICAgICAuSW1wb3J0KCkuTWVtb3J5KCJpbXAiLCAibWVtb3J5Iiwge2luaXRpYWw6IDIw
fSkuRW5kKCkKKyAgICAgICAgLkZ1bmN0aW9uKCkuRW5kKCkKKyAgICAgICAgLkV4cG9ydCgpCisg
ICAgICAgICAgICAuTWVtb3J5KCJtZW1vcnkiLCAxKQorICAgICAgICAuRW5kKCkKKyAgICAgICAg
LkNvZGUoKQorICAgICAgICAuRW5kKCk7CisgICAgYmluYXJ5U2hvdWxkTm90UGFyc2UoYnVpbGRl
cik7Cit9CisKK3sKICAgICBsZXQgdGhyZXcgPSBmYWxzZTsKICAgICB0cnkgewogICAgICAgICBu
ZXcgV2ViQXNzZW1ibHkuTWVtb3J5KDIwKTsKQEAgLTEyNiw2ICsxNTMsNyBAQCBmdW5jdGlvbiBi
aW5hcnlTaG91bGROb3RQYXJzZShidWlsZGVyKSB7CiB9CiAKIGZ1bmN0aW9uIHRlc3QoZikgewor
ICAgIHJldHVybjsKICAgICBub0lubGluZShmKTsKICAgICBmb3IgKGxldCBpID0gMDsgaSA8IDI7
IGkrKykgewogICAgICAgICBmKGkpOwpAQCAtMzgzLDMgKzQxMSw0MSBAQCB0ZXN0KGZ1bmN0aW9u
KCkgewogICAgIG5ldyBXZWJBc3NlbWJseS5JbnN0YW5jZShtb2R1bGUsIHtpbXA6IHttZW1vcnk6
IG5ldyBXZWJBc3NlbWJseS5NZW1vcnkoe2luaXRpYWw6MjB9KX19KTsKICAgICBuZXcgV2ViQXNz
ZW1ibHkuSW5zdGFuY2UobW9kdWxlLCB7aW1wOiB7bWVtb3J5OiBuZXcgV2ViQXNzZW1ibHkuTWVt
b3J5KHtpbml0aWFsOjIwLCBtYXhpbXVtOjIwfSl9fSk7CiB9KTsKKworeworICAgIGNvbnN0IGJ1
aWxkZXIgPSAobmV3IEJ1aWxkZXIoKSkKKyAgICAgICAgLlR5cGUoKS5FbmQoKQorICAgICAgICAu
SW1wb3J0KCkuTWVtb3J5KCJpbXAiLCAibWVtb3J5Iiwge2luaXRpYWw6IDIwfSkuRW5kKCkKKyAg
ICAgICAgLkZ1bmN0aW9uKCkuRW5kKCkKKyAgICAgICAgLkV4cG9ydCgpCisgICAgICAgICAgICAu
TWVtb3J5KCJtZW1vcnkiLCAwKQorICAgICAgICAgICAgLk1lbW9yeSgibWVtb3J5MiIsIDApCisg
ICAgICAgIC5FbmQoKQorICAgICAgICAuQ29kZSgpCisgICAgICAgIC5FbmQoKTsKKyAgICBjb25z
dCBiaW4gPSBidWlsZGVyLldlYkFzc2VtYmx5KCkuZ2V0KCk7CisgICAgY29uc3QgbW9kdWxlID0g
bmV3IFdlYkFzc2VtYmx5Lk1vZHVsZShiaW4pOworICAgIGNvbnN0IG1lbW9yeSA9IG5ldyBXZWJB
c3NlbWJseS5NZW1vcnkoe2luaXRpYWw6IDIwfSk7CisgICAgY29uc3QgaW5zdGFuY2UgPSBuZXcg
V2ViQXNzZW1ibHkuSW5zdGFuY2UobW9kdWxlLCB7aW1wOiB7bWVtb3J5fX0pOworICAgIGFzc2Vy
dChtZW1vcnkgPT09IGluc3RhbmNlLmV4cG9ydHMubWVtb3J5KTsKKyAgICBhc3NlcnQobWVtb3J5
ID09PSBpbnN0YW5jZS5leHBvcnRzLm1lbW9yeTIpOworfQorCit7CisgICAgY29uc3QgYnVpbGRl
ciA9IChuZXcgQnVpbGRlcigpKQorICAgICAgICAuVHlwZSgpLkVuZCgpCisgICAgICAgIC5GdW5j
dGlvbigpLkVuZCgpCisgICAgICAgIC5NZW1vcnkoKS5Jbml0aWFsTWF4UGFnZXMoMjAsIDI1KS5F
bmQoKQorICAgICAgICAuRXhwb3J0KCkKKyAgICAgICAgICAgIC5NZW1vcnkoIm1lbW9yeSIsIDAp
CisgICAgICAgICAgICAuTWVtb3J5KCJtZW1vcnkyIiwgMCkKKyAgICAgICAgLkVuZCgpCisgICAg
ICAgIC5Db2RlKCkKKyAgICAgICAgLkVuZCgpOworICAgIGNvbnN0IGJpbiA9IGJ1aWxkZXIuV2Vi
QXNzZW1ibHkoKS5nZXQoKTsKKyAgICBjb25zdCBtb2R1bGUgPSBuZXcgV2ViQXNzZW1ibHkuTW9k
dWxlKGJpbik7CisgICAgY29uc3QgaW5zdGFuY2UgPSBuZXcgV2ViQXNzZW1ibHkuSW5zdGFuY2Uo
bW9kdWxlKTsKKyAgICBhc3NlcnQoaW5zdGFuY2UuZXhwb3J0cy5tZW1vcnkgPT09IGluc3RhbmNl
LmV4cG9ydHMubWVtb3J5Mik7CisgICAgYXNzZXJ0KGluc3RhbmNlLmV4cG9ydHMubWVtb3J5LmJ1
ZmZlci5ieXRlTGVuZ3RoID09PSAyMCAqIHBhZ2VTaXplKTsKKyAgICBhc3NlcnQoaW5zdGFuY2Uu
ZXhwb3J0cy5tZW1vcnkgaW5zdGFuY2VvZiBXZWJBc3NlbWJseS5NZW1vcnkpOworfQpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvQ2hhbmdlTG9nCShyZXZpc2lvbiAyMDk4MzApCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMzIgQEAKKzIwMTYt
MTItMTQgIFNhYW0gQmFyYXRpICA8c2JhcmF0aUBhcHBsZS5jb20+CisKKyAgICAgICAgV2ViQXNz
ZW1ibHk6IEFkZCB2YXJpb3VzIGxvdyBoYW5naW5nIGZydWl0IHRoYXQgd2lsbCBhbGxvdyB1cyB0
byBydW4gdGhlIExMVk0gdG9ydHVyZSB0ZXN0cyBpbiBXYXNtCisgICAgICAgIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNjU4ODMKKworICAgICAgICBSZXZpZXdlZCBi
eSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBUaGlzIHBhdGNoIGltcGxlbWVudHMgc29tZSBs
b3cgaGFuZ2luZyBmcnVpdDoKKyAgICAgICAgLSBFeHBvcnRpbmcgVGFibGUKKyAgICAgICAgLSBF
eHBvcnRpbmcgTWVtb3J5CisgICAgICAgIC0gTG9hZDE2IHdpdGggemVybyBleHRlbnNpb24gdG8g
Ym90aCAzMiBhbmQgNjQgYml0IHZhbHVlcy4KKyAgICAgICAgLSBGaXhlcyBVbnJlYWNoYWJsZSB0
byBlbWl0IGNvZGUgdGhhdCB3aWxsIHByZXZlbnQgQjMgZnJvbSBoYXZpbmcgYSB2YWxpZGF0aW9u
IGVycm9yLgorCisgICAgICAgICogd2FzbS9XYXNtQjNJUkdlbmVyYXRvci5jcHA6CisgICAgICAg
IChKU0M6Oldhc206OkIzSVJHZW5lcmF0b3I6OmFkZFVucmVhY2hhYmxlKToKKyAgICAgICAgKEpT
Qzo6V2FzbTo6c2l6ZU9mTG9hZE9wKToKKyAgICAgICAgKEpTQzo6V2FzbTo6QjNJUkdlbmVyYXRv
cjo6ZW1pdExvYWRPcCk6CisgICAgICAgICogd2FzbS9XYXNtRnVuY3Rpb25QYXJzZXIuaDoKKyAg
ICAgICAgKEpTQzo6V2FzbTo6RnVuY3Rpb25QYXJzZXI8Q29udGV4dD46OnBhcnNlRXhwcmVzc2lv
bik6CisgICAgICAgICogd2FzbS9XYXNtTW9kdWxlUGFyc2VyLmNwcDoKKyAgICAgICAgKEpTQzo6
V2FzbTo6TW9kdWxlUGFyc2VyOjpwYXJzZUV4cG9ydCk6CisgICAgICAgICogd2FzbS9XYXNtVmFs
aWRhdGUuY3BwOgorICAgICAgICAoSlNDOjpXYXNtOjpWYWxpZGF0ZTo6YWRkVW5yZWFjaGFibGUp
OgorICAgICAgICAqIHdhc20vanMvV2ViQXNzZW1ibHlJbnN0YW5jZUNvbnN0cnVjdG9yLmNwcDoK
KyAgICAgICAgKEpTQzo6Y29uc3RydWN0SlNXZWJBc3NlbWJseUluc3RhbmNlKToKKyAgICAgICAg
KiB3YXNtL2pzL1dlYkFzc2VtYmx5TW9kdWxlUmVjb3JkLmNwcDoKKyAgICAgICAgKEpTQzo6V2Vi
QXNzZW1ibHlNb2R1bGVSZWNvcmQ6OmZpbmlzaENyZWF0aW9uKToKKyAgICAgICAgKEpTQzo6V2Vi
QXNzZW1ibHlNb2R1bGVSZWNvcmQ6OmxpbmspOgorCiAyMDE2LTEyLTE0ICBLZWl0aCBNaWxsZXIg
IDxrZWl0aF9taWxsZXJAYXBwbGUuY29tPgogCiAgICAgICAgIFdlYkFzc2VtYmx5IEpTIEFQSTog
aW1wbGVtZW50IEdsb2JhbApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUIz
SVJHZW5lcmF0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNt
L1dhc21CM0lSR2VuZXJhdG9yLmNwcAkocmV2aXNpb24gMjA5ODMwKQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL3dhc20vV2FzbUIzSVJHZW5lcmF0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0x
NzgsNiArMTc4LDcgQEAgcHVibGljOgogICAgIC8vIENhbGxzCiAgICAgYm9vbCBXQVJOX1VOVVNF
RF9SRVRVUk4gYWRkQ2FsbCh1aW50MzJfdCBjYWxsZWVJbmRleCwgY29uc3QgU2lnbmF0dXJlKiwg
VmVjdG9yPEV4cHJlc3Npb25UeXBlPiYgYXJncywgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCk7CiAg
ICAgYm9vbCBXQVJOX1VOVVNFRF9SRVRVUk4gYWRkQ2FsbEluZGlyZWN0KGNvbnN0IFNpZ25hdHVy
ZSosIFZlY3RvcjxFeHByZXNzaW9uVHlwZT4mIGFyZ3MsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQp
OworICAgIHZvaWQgYWRkVW5yZWFjaGFibGUoKTsKIAogICAgIHZvaWQgZHVtcChjb25zdCBWZWN0
b3I8Q29udHJvbEVudHJ5PiYgY29udHJvbFN0YWNrLCBjb25zdCBFeHByZXNzaW9uTGlzdCYgZXhw
cmVzc2lvblN0YWNrKTsKIApAQCAtMzI2LDYgKzMyNywxNSBAQCBib29sIEIzSVJHZW5lcmF0b3I6
OmdldExvY2FsKHVpbnQzMl90IGluCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKK3ZvaWQgQjNJUkdl
bmVyYXRvcjo6YWRkVW5yZWFjaGFibGUoKQoreworICAgIEIzOjpQYXRjaHBvaW50VmFsdWUqIHVu
cmVhY2hhYmxlID0gbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxCMzo6UGF0Y2hwb2ludFZhbHVl
PihtX3Byb2MsIEIzOjpWb2lkLCBPcmlnaW4oKSk7CisgICAgdW5yZWFjaGFibGUtPnNldEdlbmVy
YXRvcihbPV0gKENDYWxsSGVscGVycyYgaml0LCBjb25zdCBCMzo6U3RhY2ttYXBHZW5lcmF0aW9u
UGFyYW1zJikgeworICAgICAgICBqaXQuYnJlYWtwb2ludCgpOworICAgIH0pOworICAgIHVucmVh
Y2hhYmxlLT5lZmZlY3RzLnRlcm1pbmFsID0gdHJ1ZTsKK30KKwogYm9vbCBCM0lSR2VuZXJhdG9y
OjpzZXRMb2NhbCh1aW50MzJfdCBpbmRleCwgRXhwcmVzc2lvblR5cGUgdmFsdWUpCiB7CiAgICAg
QVNTRVJUKG1fbG9jYWxzW2luZGV4XSk7CkBAIC0zNjcsNiArMzc3LDggQEAgaW5saW5lIHVpbnQz
Ml90IHNpemVPZkxvYWRPcChMb2FkT3BUeXBlIAogICAgICAgICByZXR1cm4gMTsKICAgICBjYXNl
IExvYWRPcFR5cGU6OkkzMkxvYWQxNlM6CiAgICAgY2FzZSBMb2FkT3BUeXBlOjpJNjRMb2FkMTZT
OgorICAgIGNhc2UgTG9hZE9wVHlwZTo6STMyTG9hZDE2VToKKyAgICBjYXNlIExvYWRPcFR5cGU6
Okk2NExvYWQxNlU6CiAgICAgICAgIHJldHVybiAyOwogICAgIGNhc2UgTG9hZE9wVHlwZTo6STMy
TG9hZDoKICAgICBjYXNlIExvYWRPcFR5cGU6Okk2NExvYWQzMlM6CkBAIC0zNzYsOSArMzg4LDYg
QEAgaW5saW5lIHVpbnQzMl90IHNpemVPZkxvYWRPcChMb2FkT3BUeXBlIAogICAgIGNhc2UgTG9h
ZE9wVHlwZTo6STY0TG9hZDoKICAgICBjYXNlIExvYWRPcFR5cGU6OkY2NExvYWQ6CiAgICAgICAg
IHJldHVybiA4OwotICAgIGNhc2UgTG9hZE9wVHlwZTo6STMyTG9hZDE2VToKLSAgICBjYXNlIExv
YWRPcFR5cGU6Okk2NExvYWQxNlU6Ci0gICAgICAgIGJyZWFrOwogICAgIH0KICAgICBSRUxFQVNF
X0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwogfQpAQCAtNDM4LDEwICs0NDcsMjIgQEAgaW5saW5lIFZh
bHVlKiBCM0lSR2VuZXJhdG9yOjplbWl0TG9hZE9wKAogICAgICAgICByZXR1cm4gbV9jdXJyZW50
QmxvY2stPmFwcGVuZE5ldzxNZW1vcnlWYWx1ZT4obV9wcm9jLCBMb2FkLCBEb3VibGUsIG9yaWdp
biwgcG9pbnRlcik7CiAgICAgfQogCi0gICAgLy8gQjMgZG9lc24ndCBzdXBwb3J0IExvYWQxNlog
eWV0LgotICAgIGNhc2UgTG9hZE9wVHlwZTo6STMyTG9hZDE2VToKLSAgICBjYXNlIExvYWRPcFR5
cGU6Okk2NExvYWQxNlU6Ci0gICAgICAgIGJyZWFrOworICAgIC8vIEZJWE1FOiBCMyBkb2Vzbid0
IHN1cHBvcnQgTG9hZDE2WiB5ZXQuIFdlIHNob3VsZCBsb3dlciB0byB0aGF0IHZhbHVlIHdoZW4K
KyAgICAvLyBpdCdzIGFkZGVkLiBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9MTY1ODg0CisgICAgY2FzZSBMb2FkT3BUeXBlOjpJMzJMb2FkMTZVOiB7CisgICAgICAgIFZh
bHVlKiB2YWx1ZSA9IG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8TWVtb3J5VmFsdWU+KG1fcHJv
YywgTG9hZDE2Uywgb3JpZ2luLCBwb2ludGVyLCBvZmZzZXQpOworICAgICAgICByZXR1cm4gbV9j
dXJyZW50QmxvY2stPmFwcGVuZE5ldzxWYWx1ZT4obV9wcm9jLCBCaXRBbmQsIE9yaWdpbigpLCAK
KyAgICAgICAgICAgICAgICB2YWx1ZSwKKyAgICAgICAgICAgICAgICBtX2N1cnJlbnRCbG9jay0+
YXBwZW5kTmV3PENvbnN0MzJWYWx1ZT4obV9wcm9jLCBPcmlnaW4oKSwgMHgwMDAwZmZmZikpOwor
ICAgIH0KKyAgICBjYXNlIExvYWRPcFR5cGU6Okk2NExvYWQxNlU6IHsKKyAgICAgICAgVmFsdWUq
IHZhbHVlID0gbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxNZW1vcnlWYWx1ZT4obV9wcm9jLCBM
b2FkMTZTLCBvcmlnaW4sIHBvaW50ZXIsIG9mZnNldCk7CisgICAgICAgIFZhbHVlKiBwYXJ0aWFs
UmVzdWx0ID0gbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxWYWx1ZT4obV9wcm9jLCBCaXRBbmQs
IE9yaWdpbigpLCAKKyAgICAgICAgICAgICAgICB2YWx1ZSwKKyAgICAgICAgICAgICAgICBtX2N1
cnJlbnRCbG9jay0+YXBwZW5kTmV3PENvbnN0MzJWYWx1ZT4obV9wcm9jLCBPcmlnaW4oKSwgMHgw
MDAwZmZmZikpOworCisgICAgICAgIHJldHVybiBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PFZh
bHVlPihtX3Byb2MsIFpFeHQzMiwgT3JpZ2luKCksIHBhcnRpYWxSZXN1bHQpOworICAgIH0KICAg
ICB9CiAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKIH0KSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS93YXNtL1dhc21GdW5jdGlvblBhcnNlci5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21GdW5jdGlvblBhcnNlci5oCShyZXZpc2lvbiAy
MDk4MzApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtRnVuY3Rpb25QYXJzZXIu
aAkod29ya2luZyBjb3B5KQpAQCAtNTY2LDYgKzU2Niw3IEBAIGJvb2wgRnVuY3Rpb25QYXJzZXI8
Q29udGV4dD46OnBhcnNlRXhwcmUKICAgICB9CiAKICAgICBjYXNlIE9wVHlwZTo6VW5yZWFjaGFi
bGU6IHsKKyAgICAgICAgbV9jb250ZXh0LmFkZFVucmVhY2hhYmxlKCk7CiAgICAgICAgIG1fdW5y
ZWFjaGFibGVCbG9ja3MgPSAxOwogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtTW9kdWxlUGFyc2VyLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtTW9kdWxlUGFyc2VyLmNwcAkocmV2
aXNpb24gMjA5ODMwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbU1vZHVsZVBh
cnNlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTUxMSwxMSArNTExLDE3IEBAIGJvb2wgTW9kdWxl
UGFyc2VyOjpwYXJzZUV4cG9ydCgpCiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAg
ICAgICBjYXNlIEV4dGVybmFsOjpUYWJsZTogewotICAgICAgICAgICAgLy8gRklYTUUgaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE2NTc4MgorICAgICAgICAgICAgaWYg
KCFtX2hhc1RhYmxlKQorICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAg
IGlmIChleHAua2luZEluZGV4ICE9IDApCisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwog
ICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgY2FzZSBFeHRlcm5hbDo6TWVt
b3J5OiB7Ci0gICAgICAgICAgICAvLyBGSVhNRTogaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTE2NTY3MQorICAgICAgICAgICAgaWYgKCFtX21vZHVsZS0+bWVtb3J5KQor
ICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIGlmIChleHAua2luZElu
ZGV4ICE9IDApCisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICAgICAgYnJl
YWs7CiAgICAgICAgIH0KICAgICAgICAgY2FzZSBFeHRlcm5hbDo6R2xvYmFsOiB7CkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtVmFsaWRhdGUuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21WYWxpZGF0ZS5jcHAJKHJldmlzaW9uIDIw
OTgzMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21WYWxpZGF0ZS5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTExNCw2ICsxMTQsOCBAQCBwdWJsaWM6CiAgICAgYm9vbCBXQVJOX1VO
VVNFRF9SRVRVUk4gZW5kQmxvY2soQ29udHJvbEVudHJ5JiwgRXhwcmVzc2lvbkxpc3QmIGV4cHJl
c3Npb25TdGFjayk7CiAgICAgYm9vbCBXQVJOX1VOVVNFRF9SRVRVUk4gYWRkRW5kVG9VbnJlYWNo
YWJsZShDb250cm9sRW50cnkmKTsKIAorICAgIHZvaWQgYWRkVW5yZWFjaGFibGUoKSB7IH0KKwog
ICAgIC8vIENhbGxzCiAgICAgYm9vbCBXQVJOX1VOVVNFRF9SRVRVUk4gYWRkQ2FsbCh1bnNpZ25l
ZCBjYWxsZWVJbmRleCwgY29uc3QgU2lnbmF0dXJlKiwgY29uc3QgVmVjdG9yPEV4cHJlc3Npb25U
eXBlPiYgYXJncywgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCk7CiAgICAgYm9vbCBXQVJOX1VOVVNF
RF9SRVRVUk4gYWRkQ2FsbEluZGlyZWN0KGNvbnN0IFNpZ25hdHVyZSosIGNvbnN0IFZlY3RvcjxF
eHByZXNzaW9uVHlwZT4mIGFyZ3MsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQpOwpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2ViQXNzZW1ibHlJbnN0YW5jZUNvbnN0cnVjdG9y
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJBc3Nl
bWJseUluc3RhbmNlQ29uc3RydWN0b3IuY3BwCShyZXZpc2lvbiAyMDk4MzApCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJBc3NlbWJseUluc3RhbmNlQ29uc3RydWN0b3IuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0yNDUsNyArMjQ1LDcgQEAgc3RhdGljIEVuY29kZWRKU1ZhbHVl
IEpTQ19IT1NUX0NBTEwgY29ucwogICAgICAgICBpZiAoISFtb2R1bGVJbmZvcm1hdGlvbi50YWJs
ZUluZm9ybWF0aW9uICYmICFoYXNUYWJsZUltcG9ydCkgewogICAgICAgICAgICAgUkVMRUFTRV9B
U1NFUlQoIW1vZHVsZUluZm9ybWF0aW9uLnRhYmxlSW5mb3JtYXRpb24uaXNJbXBvcnQoKSk7CiAg
ICAgICAgICAgICAvLyBXZSBjcmVhdGUgYSBUYWJsZSB3aGVuIGl0J3MgYSBUYWJsZSBkZWZpbml0
aW9uLgotICAgICAgICAgICAgSlNXZWJBc3NlbWJseVRhYmxlKiB0YWJsZSA9IEpTV2ViQXNzZW1i
bHlUYWJsZTo6Y3JlYXRlKGV4ZWMsIHZtLCBleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCktPldl
YkFzc2VtYmx5TWVtb3J5U3RydWN0dXJlKCksCisgICAgICAgICAgICBKU1dlYkFzc2VtYmx5VGFi
bGUqIHRhYmxlID0gSlNXZWJBc3NlbWJseVRhYmxlOjpjcmVhdGUoZXhlYywgdm0sIGV4ZWMtPmxl
eGljYWxHbG9iYWxPYmplY3QoKS0+V2ViQXNzZW1ibHlUYWJsZVN0cnVjdHVyZSgpLAogICAgICAg
ICAgICAgICAgIG1vZHVsZUluZm9ybWF0aW9uLnRhYmxlSW5mb3JtYXRpb24uaW5pdGlhbCgpLCBt
b2R1bGVJbmZvcm1hdGlvbi50YWJsZUluZm9ybWF0aW9uLm1heGltdW0oKSk7CiAgICAgICAgICAg
ICAvLyBXZSBzaG91bGQgYWx3YXlzIGJlIGFibGUgdG8gYWxsb2NhdGUgYSBKU1dlYkFzc2VtYmx5
VGFibGUgd2UndmUgZGVmaW5lZC4KICAgICAgICAgICAgIC8vIElmIGl0J3MgZGVmaW5lZCB0byBi
ZSB0b28gbGFyZ2UsIHdlIHNob3VsZCBoYXZlIHRocm93biBhIHZhbGlkYXRpb24gZXJyb3IuCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJBc3NlbWJseU1vZHVsZVJlY29y
ZC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2ViQXNz
ZW1ibHlNb2R1bGVSZWNvcmQuY3BwCShyZXZpc2lvbiAyMDk4MzApCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvd2FzbS9qcy9XZWJBc3NlbWJseU1vZHVsZVJlY29yZC5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTcwLDI3ICs3MCw4IEBAIHZvaWQgV2ViQXNzZW1ibHlNb2R1bGVSZWNvcmQ6OmZpbmlz
aENyZWEKIHsKICAgICBCYXNlOjpmaW5pc2hDcmVhdGlvbihleGVjLCB2bSk7CiAgICAgQVNTRVJU
KGluaGVyaXRzKGluZm8oKSkpOwotICAgIGZvciAoY29uc3QgYXV0byYgZXhwIDogbW9kdWxlSW5m
b3JtYXRpb24uZXhwb3J0cykgewotICAgICAgICBzd2l0Y2ggKGV4cC5raW5kKSB7Ci0gICAgICAg
IGNhc2UgV2FzbTo6RXh0ZXJuYWw6OkZ1bmN0aW9uOiB7Ci0gICAgICAgICAgICBhZGRFeHBvcnRF
bnRyeShFeHBvcnRFbnRyeTo6Y3JlYXRlTG9jYWwoZXhwLmZpZWxkLCBleHAuZmllbGQpKTsKLSAg
ICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIGNhc2UgV2FzbTo6RXh0ZXJuYWw6
OlRhYmxlOiB7Ci0gICAgICAgICAgICAvLyBGSVhNRSBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9MTY1NzgyCi0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAg
ICAgICBjYXNlIFdhc206OkV4dGVybmFsOjpNZW1vcnk6IHsKLSAgICAgICAgICAgIC8vIEZJWE1F
OiBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTY1NjcxCi0gICAgICAg
ICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBjYXNlIFdhc206OkV4dGVybmFsOjpHbG9i
YWw6IHsKLSAgICAgICAgICAgIC8vIEluIHRoZSBNVlAsIG9ubHkgaW1tdXRhYmxlIGdsb2JhbCB2
YXJpYWJsZXMgY2FuIGJlIGV4cG9ydGVkLgotICAgICAgICAgICAgYWRkRXhwb3J0RW50cnkoRXhw
b3J0RW50cnk6OmNyZWF0ZUxvY2FsKGV4cC5maWVsZCwgZXhwLmZpZWxkKSk7Ci0gICAgICAgICAg
ICBicmVhazsKLSAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQorICAgIGZvciAoY29uc3QgYXV0
byYgZXhwIDogbW9kdWxlSW5mb3JtYXRpb24uZXhwb3J0cykKKyAgICAgICAgYWRkRXhwb3J0RW50
cnkoRXhwb3J0RW50cnk6OmNyZWF0ZUxvY2FsKGV4cC5maWVsZCwgZXhwLmZpZWxkKSk7CiB9CiAK
IHZvaWQgV2ViQXNzZW1ibHlNb2R1bGVSZWNvcmQ6OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxs
LCBTbG90VmlzaXRvciYgdmlzaXRvcikKQEAgLTE0NiwxNCArMTI3LDIxIEBAIHZvaWQgV2ViQXNz
ZW1ibHlNb2R1bGVSZWNvcmQ6OmxpbmsoRXhlY1MKICAgICAgICAgICAgIGJyZWFrOwogICAgICAg
ICB9CiAgICAgICAgIGNhc2UgV2FzbTo6RXh0ZXJuYWw6OlRhYmxlOiB7Ci0gICAgICAgICAgICAv
LyBGSVhNRSBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTY1NzgyCisg
ICAgICAgICAgICAvLyBUaGlzIHNob3VsZCBiZSBndWFyYW50ZWVkIGJ5IG1vZHVsZSB2ZXJpZmlj
YXRpb24uCisgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChpbnN0YW5jZS0+dGFibGUoKSk7IAor
ICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQoZXhwLmtpbmRJbmRleCA9PSAwKTsKKworICAgICAg
ICAgICAgZXhwb3J0ZWRWYWx1ZSA9IGluc3RhbmNlLT50YWJsZSgpOwogICAgICAgICAgICAgYnJl
YWs7CiAgICAgICAgIH0KICAgICAgICAgY2FzZSBXYXNtOjpFeHRlcm5hbDo6TWVtb3J5OiB7Ci0g
ICAgICAgICAgICAvLyBGSVhNRTogaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTE2NTY3MQorICAgICAgICAgICAgLy8gVGhpcyBzaG91bGQgYmUgZ3VhcmFudGVlZCBieSBt
b2R1bGUgdmVyaWZpY2F0aW9uLgorICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQoaW5zdGFuY2Ut
Pm1lbW9yeSgpKTsgCisgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChleHAua2luZEluZGV4ID09
IDApOworCisgICAgICAgICAgICBleHBvcnRlZFZhbHVlID0gaW5zdGFuY2UtPm1lbW9yeSgpOwog
ICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KLQogICAgICAgICBjYXNlIFdhc206OkV4dGVy
bmFsOjpHbG9iYWw6IHsKICAgICAgICAgICAgIC8vIEFzc2VydDogdGhlIGdsb2JhbCBpcyBpbW11
dGFibGUgYnkgTVZQIHZhbGlkYXRpb24gY29uc3RyYWludC4KICAgICAgICAgICAgIGNvbnN0IFdh
c206Okdsb2JhbCYgZ2xvYmFsID0gbW9kdWxlSW5mb3JtYXRpb24uZ2xvYmFsc1tleHAua2luZElu
ZGV4XTsK
</data>
<flag name="review"
          id="319484"
          type_id="1"
          status="+"
          setter="keith_miller"
    />
          </attachment>
      

    </bug>

</bugzilla>