<?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>195186</bug_id>
          
          <creation_ts>2019-02-28 14:39:43 -0800</creation_ts>
          <short_desc>JSScript should keep the cache file locked for the duration of its existence and should truncate the cache when it is out of date</short_desc>
          <delta_ts>2019-03-06 19:07:34 -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>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Saam Barati">saam</reporter>
          <assigned_to name="Saam Barati">saam</assigned_to>
          <cc>benjamin</cc>
    
    <cc>commit-queue</cc>
    
    <cc>fpizlo</cc>
    
    <cc>ggaren</cc>
    
    <cc>gskachkov</cc>
    
    <cc>guijemont</cc>
    
    <cc>keith_miller</cc>
    
    <cc>mark.lam</cc>
    
    <cc>msaboff</cc>
    
    <cc>rmorisset</cc>
    
    <cc>ticaiolima</cc>
    
    <cc>tzagallo</cc>
    
    <cc>webkit-bug-importer</cc>
    
    <cc>ysuzuki</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1511128</commentid>
    <comment_count>0</comment_count>
    <who name="Saam Barati">saam</who>
    <bug_when>2019-02-28 14:39:43 -0800</bug_when>
    <thetext>...</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1511329</commentid>
    <comment_count>1</comment_count>
    <who name="Tadeu Zagallo">tzagallo</who>
    <bug_when>2019-02-28 23:57:45 -0800</bug_when>
    <thetext>I don&apos;t think we need to keep the file locked after we mmap&apos;d it. Since we are using MAP_PRIVATE, we won&apos;t see the updates until the next time we mmap it.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1511336</commentid>
    <comment_count>2</comment_count>
    <who name="Saam Barati">saam</who>
    <bug_when>2019-03-01 00:39:50 -0800</bug_when>
    <thetext>I don’t think that’s how mmap works. I think it’s probably unspecified, but if I had to guess, if we mmap it in, then someone else changes content on disk, and then we page fault in that new content on a read, we’ll see the updated content.

But there’s a more interesting reason we want to keep it locked: we want to update the API to iteratively update the cache</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1511338</commentid>
    <comment_count>3</comment_count>
    <who name="Saam Barati">saam</who>
    <bug_when>2019-03-01 00:42:20 -0800</bug_when>
    <thetext>One man page agrees with me:

“MAP_SHARED and MAP_PRIVATE describe the disposition of write references to the memory object. If MAP_SHARED is specified, write references change the underlying object. If MAP_PRIVATE is specified, modifications to the mapped data by the calling process will be visible only to the calling process and will not change the underlying object. It is unspecified whether modifications to the underlying object done after the MAP_PRIVATE mapping is established are visible through the MAP_PRIVATE mapping. Either MAP_SHARED or MAP_PRIVATE can be specified, but not both. The mapping type is retained across fork().”

https://pubs.opengroup.org/onlinepubs/7908799/xsh/mmap.html</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1511340</commentid>
    <comment_count>4</comment_count>
    <who name="Tadeu Zagallo">tzagallo</who>
    <bug_when>2019-03-01 00:47:03 -0800</bug_when>
    <thetext>Yes, you&apos;re right, I came across the same thing and was about to comment too.

Either way, I don&apos;t think we should keep the file locked for updates, since that would require an exclusive lock on the file, so only one process would be able to use the cache at a time. I think we should keep the shared lock during the script execution and only acquire the exclusive lock when we want to write to the cache.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1512356</commentid>
    <comment_count>5</comment_count>
    <who name="Saam Barati">saam</who>
    <bug_when>2019-03-04 14:02:40 -0800</bug_when>
    <thetext>(In reply to Tadeu Zagallo from comment #4)
&gt; Yes, you&apos;re right, I came across the same thing and was about to comment too.
&gt; 
&gt; Either way, I don&apos;t think we should keep the file locked for updates, since
&gt; that would require an exclusive lock on the file, so only one process would
&gt; be able to use the cache at a time. I think we should keep the shared lock
&gt; during the script execution and only acquire the exclusive lock when we want
&gt; to write to the cache.

I think it makes more sense to make the cache file locked to a single VM at a time. It just simplifies thinking about two VMs concurrently iteratively updating it. That use will not be something we need to support. We could relax this in the future, but I think we should start with the more constrained semantics and only open it up once we&apos;re sure we can support such use cases.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1512401</commentid>
    <comment_count>6</comment_count>
      <attachid>363564</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2019-03-04 16:09:39 -0800</bug_when>
    <thetext>Created attachment 363564
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1512669</commentid>
    <comment_count>7</comment_count>
      <attachid>363564</attachid>
    <who name="Tadeu Zagallo">tzagallo</who>
    <bug_when>2019-03-05 09:39:02 -0800</bug_when>
    <thetext>Comment on attachment 363564
patch

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

Nice, I agree this makes sense for now.

&gt; Source/JavaScriptCore/API/JSScript.mm:190
&gt; +        int fd = open([m_cachePath path].UTF8String, O_CREAT | O_RDWR, 0666);

Not this diff, but you can combine the locking with open by doing 

    open([m_cachePath path].UTF8String, O_CREAT | O_RDWR | O_EXLOCK | O_NONBLOCK, 0666)

I did it somewhere else, but forgot it here.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1512719</commentid>
    <comment_count>8</comment_count>
      <attachid>363564</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2019-03-05 11:22:10 -0800</bug_when>
    <thetext>Comment on attachment 363564
patch

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

&gt;&gt; Source/JavaScriptCore/API/JSScript.mm:190
&gt;&gt; +        int fd = open([m_cachePath path].UTF8String, O_CREAT | O_RDWR, 0666);
&gt; 
&gt; Not this diff, but you can combine the locking with open by doing 
&gt; 
&gt;     open([m_cachePath path].UTF8String, O_CREAT | O_RDWR | O_EXLOCK | O_NONBLOCK, 0666)
&gt; 
&gt; I did it somewhere else, but forgot it here.

Nice. I&apos;ll fix.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1513226</commentid>
    <comment_count>9</comment_count>
      <attachid>363564</attachid>
    <who name="Keith Miller">keith_miller</who>
    <bug_when>2019-03-06 15:15:48 -0800</bug_when>
    <thetext>Comment on attachment 363564
patch

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

r=me.

&gt; Source/JavaScriptCore/API/JSScript.mm:54
&gt; -    UniquedStringImpl* m_moduleKey;
&gt; +    int m_cacheFileDescriptor;

Can you use C++ initializers here? e.g. { -1 }</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1513299</commentid>
    <comment_count>10</comment_count>
      <attachid>363564</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2019-03-06 16:59:20 -0800</bug_when>
    <thetext>Comment on attachment 363564
patch

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

&gt;&gt; Source/JavaScriptCore/API/JSScript.mm:54
&gt;&gt; +    int m_cacheFileDescriptor;
&gt; 
&gt; Can you use C++ initializers here? e.g. { -1 }

Doesn&apos;t seem like we can. This is a compile error.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1513307</commentid>
    <comment_count>11</comment_count>
      <attachid>363821</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2019-03-06 17:04:29 -0800</bug_when>
    <thetext>Created attachment 363821
patch for landing</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1513330</commentid>
    <comment_count>12</comment_count>
      <attachid>363821</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2019-03-06 18:03:45 -0800</bug_when>
    <thetext>Comment on attachment 363821
patch for landing

Clearing flags on attachment: 363821

Committed r242585: &lt;https://trac.webkit.org/changeset/242585&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1513331</commentid>
    <comment_count>13</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2019-03-06 18:03:47 -0800</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1513345</commentid>
    <comment_count>14</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2019-03-06 19:07:34 -0800</bug_when>
    <thetext>&lt;rdar://problem/48662679&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>363564</attachid>
            <date>2019-03-04 16:09:39 -0800</date>
            <delta_ts>2019-03-06 17:04:29 -0800</delta_ts>
            <desc>patch</desc>
            <filename>a-backup.diff</filename>
            <type>text/plain</type>
            <size>11417</size>
            <attacher name="Saam Barati">saam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMjQyMzk5KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDM5IEBA
CisyMDE5LTAzLTA0ICBTYWFtIEJhcmF0aSAgPHNiYXJhdGlAYXBwbGUuY29tPgorCisgICAgICAg
IEpTU2NyaXB0IHNob3VsZCBrZWVwIHRoZSBjYWNoZSBmaWxlIGxvY2tlZCBmb3IgdGhlIGR1cmF0
aW9uIG9mIGl0cyBleGlzdGVuY2UgYW5kIHNob3VsZCB0cnVuY2F0ZSB0aGUgY2FjaGUgd2hlbiBp
dCBpcyBvdXQgb2YgZGF0ZQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9MTk1MTg2CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisK
KyAgICAgICAgVGhpcyBwYXRjaCBtYWtlcyBpdCBzbyB0aGF0IEpTU2NyaXB0IHdpbGwga2VlcCBp
dHMgYnl0ZWNvZGUgY2FjaGUgZmlsZQorICAgICAgICBsb2NrZWQgYXMgbG9uZyBhcyB0aGUgSlNT
Y3JpcHQgaXMgYWxpdmUuIFRoaXMgbWFrZXMgaXQgb2J2aW91cyB0aGF0IGl0J3MKKyAgICAgICAg
c2FmZSB0byB1cGRhdGUgdGhhdCBmaWxlLCBhcyBpdCB3aWxsIG9ubHkgYmUgdXNlZCBpbiBhIHNp
bmdsZSBWTSwgYWNyb3NzCisgICAgICAgIGFsbCBwcm9jZXNzZXMsIGF0IGEgc2luZ2xlIHRpbWUu
IFdlIG1heSBiZSBhYmxlIHRvIGV4dGVuZCB0aGlzIGluIHRoZSBmdXR1cmUKKyAgICAgICAgaWYg
d2UgY2FuIGF0b21pY2FsbHkgdXBkYXRlIGl0IGFjcm9zcyBWTXMvcHJvY2Vzc2VzLiBIb3dldmVy
LCB3ZSdyZSBjaG9vc2luZworICAgICAgICBtb3JlIHJlc3RyaWN0ZWQgc2VtYW50aWNzIG5vdyBh
cyBpdCdzIGFsd2F5cyBlYXNpZXIgdG8gZXh0ZW5kIHRoZXNlIHNlbWFudGljcworICAgICAgICBp
biB0aGUgZnV0dXJlIG9wcG9zZWQgdG8gaGF2aW5nIHRvIHN1cHBvcnQgdGhlIG1vcmUgZmxleGli
bGUgYmVoYXZpb3IKKyAgICAgICAgdXAgZnJvbnQuCisgICAgICAgIAorICAgICAgICBUaGlzIHBh
dGNoIGFsc286CisgICAgICAgIC0gQWRkcyBlcnJvciBtZXNzYWdlcyBpZiB3cml0aW5nIHRoZSBj
YWNoZSBmYWlscy4gV2UgZG9uJ3QgZXhwZWN0IHRoaXMgdG8KKyAgICAgICAgICBmYWlsLCBidXQg
cHJldmlvdXNseSB3ZSB3b3VsZCBzYXkgd2UgY2FjaGVkIGl0IGV2ZW4gaWYgd3JpdGUoKSBmYWls
cy4KKyAgICAgICAgLSBSZW1vdmVzIHRoZSB1bnVzZWQgbV9tb2R1bGVLZXkgZmllbGQuCisgICAg
ICAgIC0gTWFrZXMgY2FsbGluZyBjYWNoZUJ5dGVjb2RlV2l0aEVycm9yIHdpdGggYW4gYWxyZWFk
eSBub24tZW1wdHkgY2FjaGUgZmlsZSBmYWlsLgorICAgICAgICAgIEluIHRoZSBmdXR1cmUsIHdl
IHNob3VsZCBleHRlbmQgdGhpcyB0byBqdXN0IGZpbGwgaW4gdGhlIHBhcnRzIG9mIHRoZSBjYWNo
ZQorICAgICAgICAgIHRoYXQgYXJlIG5vdCBwcmVzZW50LiBCdXQgd2UgZG9uJ3QgaGF2ZSB0aGUg
YWJpbGl0eSB0byBkbyB0aGF0IHlldCwgc28gd2UKKyAgICAgICAgICBqdXN0IHJlc3VsdCBpbiBh
biBlcnJvciBmb3Igbm93LgorCisgICAgICAgICogQVBJL0pTU2NyaXB0Lm1tOgorICAgICAgICAo
LVtKU1NjcmlwdCBkZWFsbG9jXSk6CisgICAgICAgICgtW0pTU2NyaXB0IHJlYWRDYWNoZV0pOgor
ICAgICAgICAoLVtKU1NjcmlwdCBpbml0XSk6CisgICAgICAgICgtW0pTU2NyaXB0IHdyaXRlQ2Fj
aGU6XSk6CisgICAgICAgICogQVBJL0pTU2NyaXB0SW50ZXJuYWwuaDoKKyAgICAgICAgKiBBUEkv
dGVzdHMvdGVzdGFwaS5tbToKKyAgICAgICAgKHRlc3RDYWNoZUZpbGVJc0V4Y2x1c2l2ZSk6Cisg
ICAgICAgICh0ZXN0Q2FjaGVGaWxlRmFpbHNXaGVuSXRzQWxyZWFkeUNhY2hlZCk6CisgICAgICAg
ICh0ZXN0T2JqZWN0aXZlQ0FQSSk6CisKIDIwMTktMDMtMDQgIFl1c3VrZSBTdXp1a2kgIDx5c3V6
dWtpQGFwcGxlLmNvbT4KIAogICAgICAgICBVbnJldmlld2VkLCBidWlsZCBmaXggZm9yIGRlYnVn
IGJ1aWxkcyBhZnRlciByMjQyMzk3CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pT
U2NyaXB0Lm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNTY3Jp
cHQubW0JKHJldmlzaW9uIDI0MjM4NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNT
Y3JpcHQubW0JKHdvcmtpbmcgY29weSkKQEAgLTUxLDcgKzUxLDcgQEAKICAgICBSZXRhaW5QdHI8
TlNVUkw+IG1fY2FjaGVQYXRoOwogICAgIEpTQzo6Q2FjaGVkQnl0ZWNvZGUgbV9jYWNoZWRCeXRl
Y29kZTsKICAgICBKU0M6OlN0cm9uZzxKU0M6OkpTU291cmNlQ29kZT4gbV9qc1NvdXJjZUNvZGU7
Ci0gICAgVW5pcXVlZFN0cmluZ0ltcGwqIG1fbW9kdWxlS2V5OworICAgIGludCBtX2NhY2hlRmls
ZURlc2NyaXB0b3I7CiB9CiAKICsgKGluc3RhbmNldHlwZSlzY3JpcHRXaXRoU291cmNlOihOU1N0
cmluZyAqKXNvdXJjZSBpblZpcnR1YWxNYWNoaW5lOihKU1ZpcnR1YWxNYWNoaW5lICopdm0KQEAg
LTE3NCw2ICsxNzQsMTAgQEAgLSAodm9pZClkZWFsbG9jCiB7CiAgICAgaWYgKG1fY2FjaGVkQnl0
ZWNvZGUuc2l6ZSgpICYmICFtX2NhY2hlZEJ5dGVjb2RlLm93bmVkKCkpCiAgICAgICAgIG11bm1h
cChjb25zdF9jYXN0PHZvaWQqPihtX2NhY2hlZEJ5dGVjb2RlLmRhdGEoKSksIG1fY2FjaGVkQnl0
ZWNvZGUuc2l6ZSgpKTsKKworICAgIGlmIChtX2NhY2hlRmlsZURlc2NyaXB0b3IgIT0gLTEpCisg
ICAgICAgIGNsb3NlKG1fY2FjaGVGaWxlRGVzY3JpcHRvcik7CisKICAgICBbc3VwZXIgZGVhbGxv
Y107CiB9CiAKQEAgLTE4MiwyNiArMTg2LDI3IEBAIC0gKHZvaWQpcmVhZENhY2hlCiAgICAgaWYg
KCFtX2NhY2hlUGF0aCkKICAgICAgICAgcmV0dXJuOwogCi0gICAgaW50IGZkID0gb3BlbihbbV9j
YWNoZVBhdGggcGF0aF0uVVRGOFN0cmluZywgT19SRE9OTFkpOwotICAgIGlmIChmZCA9PSAtMSkK
LSAgICAgICAgcmV0dXJuOworICAgIHsKKyAgICAgICAgaW50IGZkID0gb3BlbihbbV9jYWNoZVBh
dGggcGF0aF0uVVRGOFN0cmluZywgT19DUkVBVCB8IE9fUkRXUiwgMDY2Nik7CisgICAgICAgIGlm
IChmZCA9PSAtMSkKKyAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICBpbnQgcmMgPSBmbG9j
ayhmZCwgTE9DS19FWCB8IExPQ0tfTkIpOworICAgICAgICBpZiAocmMpIHsKKyAgICAgICAgICAg
IGNsb3NlKGZkKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQogCi0gICAgaW50IHJj
ID0gZmxvY2soZmQsIExPQ0tfU0ggfCBMT0NLX05CKTsKLSAgICBpZiAocmMpIHsKLSAgICAgICAg
Y2xvc2UoZmQpOwotICAgICAgICByZXR1cm47CisgICAgICAgIG1fY2FjaGVGaWxlRGVzY3JpcHRv
ciA9IGZkOwogICAgIH0KIAogICAgIHN0cnVjdCBzdGF0IHNiOwotICAgIGludCByZXMgPSBmc3Rh
dChmZCwgJnNiKTsKKyAgICBpbnQgcmVzID0gZnN0YXQobV9jYWNoZUZpbGVEZXNjcmlwdG9yLCAm
c2IpOwogICAgIHNpemVfdCBzaXplID0gc3RhdGljX2Nhc3Q8c2l6ZV90PihzYi5zdF9zaXplKTsK
LSAgICBpZiAocmVzIHx8ICFzaXplKSB7Ci0gICAgICAgIGNsb3NlKGZkKTsKKyAgICBpZiAocmVz
IHx8ICFzaXplKQogICAgICAgICByZXR1cm47Ci0gICAgfQogCi0gICAgdm9pZCogYnVmZmVyID0g
bW1hcChudWxscHRyLCBzaXplLCBQUk9UX1JFQUQsIE1BUF9QUklWQVRFLCBmZCwgMCk7Ci0gICAg
Y2xvc2UoZmQpOworICAgIHZvaWQqIGJ1ZmZlciA9IG1tYXAobnVsbHB0ciwgc2l6ZSwgUFJPVF9S
RUFELCBNQVBfUFJJVkFURSwgbV9jYWNoZUZpbGVEZXNjcmlwdG9yLCAwKTsKIAogICAgIEpTQzo6
Q2FjaGVkQnl0ZWNvZGUgY2FjaGVkQnl0ZWNvZGUgeyBidWZmZXIsIHNpemUgfTsKIApAQCAtMjEw
LDYgKzIxNSw4IEBAIC0gKHZvaWQpcmVhZENhY2hlCiAgICAgSlNDOjpTb3VyY2VDb2RlS2V5IGtl
eSA9IG1fdHlwZSA9PSBrSlNTY3JpcHRUeXBlUHJvZ3JhbSA/IHNvdXJjZUNvZGVLZXlGb3JTZXJp
YWxpemVkUHJvZ3JhbSh2bSwgc291cmNlQ29kZSkgOiBzb3VyY2VDb2RlS2V5Rm9yU2VyaWFsaXpl
ZE1vZHVsZSh2bSwgc291cmNlQ29kZSk7CiAgICAgaWYgKGlzQ2FjaGVkQnl0ZWNvZGVTdGlsbFZh
bGlkKHZtLCBjYWNoZWRCeXRlY29kZSwga2V5LCBtX3R5cGUgPT0ga0pTU2NyaXB0VHlwZVByb2dy
YW0gPyBKU0M6OlNvdXJjZUNvZGVUeXBlOjpQcm9ncmFtVHlwZSA6IEpTQzo6U291cmNlQ29kZVR5
cGU6Ok1vZHVsZVR5cGUpKQogICAgICAgICBtX2NhY2hlZEJ5dGVjb2RlID0gV1RGTW92ZShjYWNo
ZWRCeXRlY29kZSk7CisgICAgZWxzZQorICAgICAgICBmdHJ1bmNhdGUobV9jYWNoZUZpbGVEZXNj
cmlwdG9yLCAwKTsKIH0KIAogLSAoQk9PTCljYWNoZUJ5dGVjb2RlV2l0aEVycm9yOihOU0Vycm9y
ICoqKWVycm9yCkBAIC0yMzgsNiArMjQ1LDE2IEBAIC0gKEpTU2NyaXB0VHlwZSl0eXBlCiAKIEBp
bXBsZW1lbnRhdGlvbiBKU1NjcmlwdChJbnRlcm5hbCkKIAorLSAoaW5zdGFuY2V0eXBlKWluaXQK
K3sKKyAgICBzZWxmID0gW3N1cGVyIGluaXRdOworICAgIGlmICghc2VsZikKKyAgICAgICAgcmV0
dXJuIG5pbDsKKworICAgIG1fY2FjaGVGaWxlRGVzY3JpcHRvciA9IC0xOworICAgIHJldHVybiBz
ZWxmOworfQorCiAtICh1bnNpZ25lZCloYXNoCiB7CiAgICAgcmV0dXJuIG1fc291cmNlLmhhc2go
KTsKQEAgLTI2MywxMSArMjgwLDE2IEBAIC0gKEpTQzo6SlNTb3VyY2VDb2RlKilqc1NvdXJjZUNv
ZGUKIAogLSAoQk9PTCl3cml0ZUNhY2hlOihTdHJpbmcmKWVycm9yCiB7Ci0gICAgaWYgKG1fY2Fj
aGVkQnl0ZWNvZGUuc2l6ZSgpKQotICAgICAgICByZXR1cm4gWUVTOworICAgIGlmIChtX2NhY2hl
ZEJ5dGVjb2RlLnNpemUoKSkgeworICAgICAgICBlcnJvciA9ICJDYWNoZSBmb3IgSlNTY3JpcHQg
aXMgYWxyZWFkeSBub24tZW1wdHkuIENhbiBub3Qgb3ZlcnJpZGUgaXQuIl9zOworICAgICAgICBy
ZXR1cm4gTk87CisgICAgfQogCi0gICAgaWYgKCFtX2NhY2hlUGF0aCkgewotICAgICAgICBlcnJv
ciA9ICJObyBjYWNoZSB3YXMgcGF0aCBwcm92aWRlZCBkdXJpbmcgY29uc3RydWN0aW9uIG9mIHRo
aXMgSlNTY3JpcHQuIl9zOworICAgIGlmIChtX2NhY2hlRmlsZURlc2NyaXB0b3IgPT0gLTEpIHsK
KyAgICAgICAgaWYgKCFtX2NhY2hlUGF0aCkKKyAgICAgICAgICAgIGVycm9yID0gIk5vIGNhY2hl
IHdhcyBwYXRoIHByb3ZpZGVkIGR1cmluZyBjb25zdHJ1Y3Rpb24gb2YgdGhpcyBKU1NjcmlwdC4i
X3M7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIGVycm9yID0gIkNvdWxkIG5vdCBsb2NrIHRo
ZSBieXRlY29kZSBjYWNoZSBmaWxlLiBJdCdzIGxpa2VseSBhbm90aGVyIFZNIG9yIHByb2Nlc3Mg
aXMgYWxyZWFkeSB1c2luZyBpdC4iX3M7CiAgICAgICAgIHJldHVybiBOTzsKICAgICB9CiAKQEAg
LTI4NywxOCArMzA5LDE5IEBAIC0gKEJPT0wpd3JpdGVDYWNoZTooU3RyaW5nJillcnJvcgogICAg
ICAgICByZXR1cm4gTk87CiAgICAgfQogCi0gICAgaW50IGZkID0gb3BlbihbbV9jYWNoZVBhdGgg
cGF0aF0uVVRGOFN0cmluZywgT19DUkVBVCB8IE9fV1JPTkxZLCAwNjY2KTsKLSAgICBpZiAoZmQg
PT0gLTEpIHsKLSAgICAgICAgZXJyb3IgPSBtYWtlU3RyaW5nKCJVbmFibGUgdG8gb3BlbiBmaWxl
OiAiLCBbbV9jYWNoZVBhdGggcGF0aF0uVVRGOFN0cmluZywgIiBkdWUgdG8gZXJyb3I6ICIsIHN0
cmVycm9yKGVycm5vKSk7CisgICAgc3NpemVfdCBieXRlc1dyaXR0ZW4gPSB3cml0ZShtX2NhY2hl
RmlsZURlc2NyaXB0b3IsIG1fY2FjaGVkQnl0ZWNvZGUuZGF0YSgpLCBtX2NhY2hlZEJ5dGVjb2Rl
LnNpemUoKSk7CisgICAgaWYgKGJ5dGVzV3JpdHRlbiA9PSAtMSkgeworICAgICAgICBlcnJvciA9
IG1ha2VTdHJpbmcoIkNvdWxkIG5vdCB3cml0ZSBjYWNoZSBmaWxlIHRvIGRpc2s6ICIsIHN0cmVy
cm9yKGVycm5vKSk7CiAgICAgICAgIHJldHVybiBOTzsKICAgICB9Ci0gICAgaW50IHJldHVybkNv
ZGUgPSBmbG9jayhmZCwgTE9DS19FWCB8IExPQ0tfTkIpOwotICAgIGlmIChyZXR1cm5Db2RlKQot
ICAgICAgICBlcnJvciA9ICJVbmFibGUgdG8gbG9jayB0aGUgY2FjaGUgZmlsZTsgaXQgbWF5IGFs
cmVhZHkgYmUgaW4gdXNlLiJfczsKLSAgICBlbHNlCi0gICAgICAgIHdyaXRlKGZkLCBtX2NhY2hl
ZEJ5dGVjb2RlLmRhdGEoKSwgbV9jYWNoZWRCeXRlY29kZS5zaXplKCkpOwotICAgIGNsb3NlKGZk
KTsKLSAgICByZXR1cm4gIXJldHVybkNvZGU7CisKKyAgICBpZiAoc3RhdGljX2Nhc3Q8c2l6ZV90
PihieXRlc1dyaXR0ZW4pICE9IG1fY2FjaGVkQnl0ZWNvZGUuc2l6ZSgpKSB7CisgICAgICAgIGZ0
cnVuY2F0ZShtX2NhY2hlRmlsZURlc2NyaXB0b3IsIDApOworICAgICAgICBlcnJvciA9IG1ha2VT
dHJpbmcoIkNvdWxkIG5vdCB3cml0ZSB0aGUgZnVsbCBjYWNoZSBmaWxlIHRvIGRpc2suIE9ubHkg
d3JvdGUgIiwgU3RyaW5nOjpudW1iZXIoYnl0ZXNXcml0dGVuKSwgIiBvZiB0aGUgZXhwZWN0ZWQg
IiwgU3RyaW5nOjpudW1iZXIobV9jYWNoZWRCeXRlY29kZS5zaXplKCkpLCAiIGJ5dGVzLiIpOwor
ICAgICAgICByZXR1cm4gTk87CisgICAgfQorCisgICAgcmV0dXJuIFlFUzsKIH0KIAogLSAodm9p
ZClzZXRTb3VyY2VVUkw6KE5TVVJMICopdXJsCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
QVBJL0pTU2NyaXB0SW50ZXJuYWwuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvQVBJL0pTU2NyaXB0SW50ZXJuYWwuaAkocmV2aXNpb24gMjQyMzg2KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL0FQSS9KU1NjcmlwdEludGVybmFsLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ0
LDYgKzQ0LDcgQEAgY2xhc3MgU3RyaW5nOwogCiBAaW50ZXJmYWNlIEpTU2NyaXB0KEludGVybmFs
KQogCistIChpbnN0YW5jZXR5cGUpaW5pdDsKIC0gKHVuc2lnbmVkKWhhc2g7CiAtIChjb25zdCBX
VEY6OlN0cmluZyYpc291cmNlOwogLSAobnVsbGFibGUgY29uc3QgSlNDOjpDYWNoZWRCeXRlY29k
ZSopY2FjaGVkQnl0ZWNvZGU7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL3Rlc3Rz
L3Rlc3RhcGkubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS90ZXN0
cy90ZXN0YXBpLm1tCShyZXZpc2lvbiAyNDIzODYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
QVBJL3Rlc3RzL3Rlc3RhcGkubW0JKHdvcmtpbmcgY29weSkKQEAgLTIxNTksNiArMjE1OSw2NyBA
QCBzdGF0aWMgdm9pZCB0ZXN0UHJvZ3JhbUpTU2NyaXB0RXhjZXB0aW9uCiAgICAgfQogfQogCitz
dGF0aWMgdm9pZCB0ZXN0Q2FjaGVGaWxlSXNFeGNsdXNpdmUoKQoreworICAgIE5TVVJMKiBjYWNo
ZVBhdGggPSB0ZW1wRmlsZShAImZvby5wcm9ncmFtLmNhY2hlIik7CisKKyAgICBAYXV0b3JlbGVh
c2Vwb29sIHsKKyAgICAgICAgTlNTdHJpbmcgKnNvdXJjZSA9IEAiZnVuY3Rpb24gZm9vKCkgeyBy
ZXR1cm4gNDI7IH0gZm9vKCk7IjsKKyAgICAgICAgTlNVUkwqIHNvdXJjZVVSTCA9IFtOU1VSTCBV
UkxXaXRoU3RyaW5nOkAibXktcGF0aCJdOworICAgICAgICBKU1ZpcnR1YWxNYWNoaW5lICp2bSA9
IFtbSlNWaXJ0dWFsTWFjaGluZSBhbGxvY10gaW5pdF07CisKKyAgICAgICAgSlNTY3JpcHQgKnNj
cmlwdDEgPSBbSlNTY3JpcHQgc2NyaXB0T2ZUeXBlOmtKU1NjcmlwdFR5cGVQcm9ncmFtIHdpdGhT
b3VyY2U6c291cmNlIGFuZFNvdXJjZVVSTDpzb3VyY2VVUkwgYW5kQnl0ZWNvZGVDYWNoZTpjYWNo
ZVBhdGggaW5WaXJ0dWFsTWFjaGluZTp2bSBlcnJvcjpuaWxdOworICAgICAgICBSRUxFQVNFX0FT
U0VSVChzY3JpcHQxKTsKKyAgICAgICAgY2hlY2tSZXN1bHQoQCJTaG91bGQgYmUgYWJsZSB0byBj
YWNoZSB0aGUgZmlyc3QgZmlsZSIsIFtzY3JpcHQxIGNhY2hlQnl0ZWNvZGVXaXRoRXJyb3I6bmls
XSk7CisKKyAgICAgICAgSlNTY3JpcHQgKnNjcmlwdDIgPSBbSlNTY3JpcHQgc2NyaXB0T2ZUeXBl
OmtKU1NjcmlwdFR5cGVQcm9ncmFtIHdpdGhTb3VyY2U6c291cmNlIGFuZFNvdXJjZVVSTDpzb3Vy
Y2VVUkwgYW5kQnl0ZWNvZGVDYWNoZTpjYWNoZVBhdGggaW5WaXJ0dWFsTWFjaGluZTp2bSBlcnJv
cjpuaWxdOworICAgICAgICBSRUxFQVNFX0FTU0VSVChzY3JpcHQyKTsKKyAgICAgICAgTlNFcnJv
ciogZXJyb3IgPSBuaWw7CisgICAgICAgIGNoZWNrUmVzdWx0KEAiU2hvdWxkIE5PVCBiZSBhYmxl
IHRvIGNhY2hlIHRoZSBzZWNvbmQgZmlsZSIsICFbc2NyaXB0MiBjYWNoZUJ5dGVjb2RlV2l0aEVy
cm9yOiZlcnJvcl0pOworICAgICAgICBjaGVja1Jlc3VsdChAIlNob3VsZCBOT1QgYmUgYWJsZSB0
byBjYWNoZSB0aGUgc2Vjb25kIGZpbGUgaGFzIHRoZSBjb3JyZWN0IGVycm9yIG1lc3NhZ2UiLCBb
W2Vycm9yIGRlc2NyaXB0aW9uXSBjb250YWluc1N0cmluZzpAIkNvdWxkIG5vdCBsb2NrIHRoZSBi
eXRlY29kZSBjYWNoZSBmaWxlLiBJdCdzIGxpa2VseSBhbm90aGVyIFZNIG9yIHByb2Nlc3MgaXMg
YWxyZWFkeSB1c2luZyBpdCJdKTsKKyAgICB9CisKKyAgICBOU0ZpbGVNYW5hZ2VyKiBmaWxlTWFu
YWdlciA9IFtOU0ZpbGVNYW5hZ2VyIGRlZmF1bHRNYW5hZ2VyXTsKKyAgICBCT09MIHJlbW92ZWRB
bGwgPSBbZmlsZU1hbmFnZXIgcmVtb3ZlSXRlbUF0VVJMOmNhY2hlUGF0aCBlcnJvcjpuaWxdOwor
ICAgIGNoZWNrUmVzdWx0KEAiU3VjY2Vzc2Z1bGx5IHJlbW92ZWQgY2FjaGUgZmlsZSIsIHJlbW92
ZWRBbGwpOworfQorCitzdGF0aWMgdm9pZCB0ZXN0Q2FjaGVGaWxlRmFpbHNXaGVuSXRzQWxyZWFk
eUNhY2hlZCgpCit7CisgICAgTlNVUkwqIGNhY2hlUGF0aCA9IHRlbXBGaWxlKEAiZm9vLnByb2dy
YW0uY2FjaGUiKTsKKyAgICBOU1VSTCogc291cmNlVVJMID0gW05TVVJMIFVSTFdpdGhTdHJpbmc6
QCJteS1wYXRoIl07CisgICAgTlNTdHJpbmcgKnNvdXJjZSA9IEAiZnVuY3Rpb24gZm9vKCkgeyBy
ZXR1cm4gNDI7IH0gZm9vKCk7IjsKKworICAgIEBhdXRvcmVsZWFzZXBvb2wgeworICAgICAgICBK
U1ZpcnR1YWxNYWNoaW5lICp2bSA9IFtbSlNWaXJ0dWFsTWFjaGluZSBhbGxvY10gaW5pdF07CisK
KyAgICAgICAgSlNTY3JpcHQgKnNjcmlwdCA9IFtKU1NjcmlwdCBzY3JpcHRPZlR5cGU6a0pTU2Ny
aXB0VHlwZVByb2dyYW0gd2l0aFNvdXJjZTpzb3VyY2UgYW5kU291cmNlVVJMOnNvdXJjZVVSTCBh
bmRCeXRlY29kZUNhY2hlOmNhY2hlUGF0aCBpblZpcnR1YWxNYWNoaW5lOnZtIGVycm9yOm5pbF07
CisgICAgICAgIFJFTEVBU0VfQVNTRVJUKHNjcmlwdCk7CisgICAgICAgIGNoZWNrUmVzdWx0KEAi
U2hvdWxkIGJlIGFibGUgdG8gY2FjaGUgdGhlIGZpcnN0IGZpbGUiLCBbc2NyaXB0IGNhY2hlQnl0
ZWNvZGVXaXRoRXJyb3I6bmlsXSk7CisgICAgfQorCisgICAgQGF1dG9yZWxlYXNlcG9vbCB7Cisg
ICAgICAgIEpTVmlydHVhbE1hY2hpbmUgKnZtID0gW1tKU1ZpcnR1YWxNYWNoaW5lIGFsbG9jXSBp
bml0XTsKKworICAgICAgICBKU1NjcmlwdCAqc2NyaXB0ID0gW0pTU2NyaXB0IHNjcmlwdE9mVHlw
ZTprSlNTY3JpcHRUeXBlUHJvZ3JhbSB3aXRoU291cmNlOnNvdXJjZSBhbmRTb3VyY2VVUkw6c291
cmNlVVJMIGFuZEJ5dGVjb2RlQ2FjaGU6Y2FjaGVQYXRoIGluVmlydHVhbE1hY2hpbmU6dm0gZXJy
b3I6bmlsXTsKKyAgICAgICAgUkVMRUFTRV9BU1NFUlQoc2NyaXB0KTsKKyAgICAgICAgTlNFcnJv
ciogZXJyb3IgPSBuaWw7CisgICAgICAgIGNoZWNrUmVzdWx0KEAiU2hvdWxkIG5vdCBiZSBhYmxl
IHRvIGNhY2hlIHRoZSBzZWNvbmQgdGltZSBiZWNhdXNlIHRoZSBjYWNoZSBpcyBhbHJlYWR5IHBy
ZXNlbnQiLCAhW3NjcmlwdCBjYWNoZUJ5dGVjb2RlV2l0aEVycm9yOiZlcnJvcl0pOworICAgICAg
ICBjaGVja1Jlc3VsdChAIkNvcnJlY3QgZXJyb3IgbWVzc2FnZSBzaG91bGQgYmUgc2V0IiwgW1tl
cnJvciBkZXNjcmlwdGlvbl0gY29udGFpbnNTdHJpbmc6QCJDYWNoZSBmb3IgSlNTY3JpcHQgaXMg
YWxyZWFkeSBub24tZW1wdHkuIENhbiBub3Qgb3ZlcnJpZGUgaXQuIl0pOworCisgICAgICAgIEpT
Q29udGV4dCogY29udGV4dCA9IFtbSlNDb250ZXh0IGFsbG9jXSBpbml0V2l0aFZpcnR1YWxNYWNo
aW5lOnZtXTsKKyAgICAgICAgSlNDOjpPcHRpb25zOjpmb3JjZURpc2tDYWNoZSgpID0gdHJ1ZTsK
KyAgICAgICAgSlNWYWx1ZSAqcmVzdWx0ID0gW2NvbnRleHQgZXZhbHVhdGVKU1NjcmlwdDpzY3Jp
cHRdOworICAgICAgICBSRUxFQVNFX0FTU0VSVChyZXN1bHQpOworICAgICAgICBjaGVja1Jlc3Vs
dChAIlJlc3VsdCBzaG91bGQgYmUgNDIiLCBbcmVzdWx0IGlzTnVtYmVyXSAmJiBbcmVzdWx0IHRv
SW50MzJdID09IDQyKTsKKyAgICAgICAgSlNDOjpPcHRpb25zOjpmb3JjZURpc2tDYWNoZSgpID0g
ZmFsc2U7CisgICAgfQorCisgICAgTlNGaWxlTWFuYWdlciogZmlsZU1hbmFnZXIgPSBbTlNGaWxl
TWFuYWdlciBkZWZhdWx0TWFuYWdlcl07CisgICAgQk9PTCByZW1vdmVkQWxsID0gW2ZpbGVNYW5h
Z2VyIHJlbW92ZUl0ZW1BdFVSTDpjYWNoZVBhdGggZXJyb3I6bmlsXTsKKyAgICBjaGVja1Jlc3Vs
dChAIlN1Y2Nlc3NmdWxseSByZW1vdmVkIGNhY2hlIGZpbGUiLCByZW1vdmVkQWxsKTsKK30KKwog
QGludGVyZmFjZSBKU0NvbnRleHRGaWxlTG9hZGVyRGVsZWdhdGUgOiBKU0NvbnRleHQgPEpTTW9k
dWxlTG9hZGVyRGVsZWdhdGU+CiAKICsgKGluc3RhbmNldHlwZSluZXdDb250ZXh0OwpAQCAtMjM2
Niw2ICsyNDI3LDggQEAgdm9pZCB0ZXN0T2JqZWN0aXZlQ0FQSShjb25zdCBjaGFyKiBmaWx0ZQog
ICAgIFJVTih0ZXN0Qnl0ZWNvZGVDYWNoZVdpdGhTYW1lQ2FjaGVGaWxlQW5kRGlmZmVyZW50U2Ny
aXB0KGZhbHNlKSk7CiAgICAgUlVOKHRlc3RCeXRlY29kZUNhY2hlV2l0aFNhbWVDYWNoZUZpbGVB
bmREaWZmZXJlbnRTY3JpcHQodHJ1ZSkpOwogICAgIFJVTih0ZXN0UHJvZ3JhbUpTU2NyaXB0RXhj
ZXB0aW9uKCkpOworICAgIFJVTih0ZXN0Q2FjaGVGaWxlSXNFeGNsdXNpdmUoKSk7CisgICAgUlVO
KHRlc3RDYWNoZUZpbGVGYWlsc1doZW5JdHNBbHJlYWR5Q2FjaGVkKCkpOwogCiAgICAgUlVOKHRl
c3RMb2FkZXJSZWplY3RzTmlsU2NyaXB0VVJMKCkpOwogICAgIFJVTih0ZXN0TG9hZGVyUmVqZWN0
c0ZhaWxlZEZldGNoKCkpOwo=
</data>
<flag name="review"
          id="380163"
          type_id="1"
          status="+"
          setter="keith_miller"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>363821</attachid>
            <date>2019-03-06 17:04:29 -0800</date>
            <delta_ts>2019-03-06 18:03:45 -0800</delta_ts>
            <desc>patch for landing</desc>
            <filename>a-backup.diff</filename>
            <type>text/plain</type>
            <size>11319</size>
            <attacher name="Saam Barati">saam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMjQyNTgwKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDM5IEBA
CisyMDE5LTAzLTA2ICBTYWFtIEJhcmF0aSAgPHNiYXJhdGlAYXBwbGUuY29tPgorCisgICAgICAg
IEpTU2NyaXB0IHNob3VsZCBrZWVwIHRoZSBjYWNoZSBmaWxlIGxvY2tlZCBmb3IgdGhlIGR1cmF0
aW9uIG9mIGl0cyBleGlzdGVuY2UgYW5kIHNob3VsZCB0cnVuY2F0ZSB0aGUgY2FjaGUgd2hlbiBp
dCBpcyBvdXQgb2YgZGF0ZQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9MTk1MTg2CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgS2VpdGggTWlsbGVyLgorCisg
ICAgICAgIFRoaXMgcGF0Y2ggbWFrZXMgaXQgc28gdGhhdCBKU1NjcmlwdCB3aWxsIGtlZXAgaXRz
IGJ5dGVjb2RlIGNhY2hlIGZpbGUKKyAgICAgICAgbG9ja2VkIGFzIGxvbmcgYXMgdGhlIEpTU2Ny
aXB0IGlzIGFsaXZlLiBUaGlzIG1ha2VzIGl0IG9idmlvdXMgdGhhdCBpdCdzCisgICAgICAgIHNh
ZmUgdG8gdXBkYXRlIHRoYXQgZmlsZSwgYXMgaXQgd2lsbCBvbmx5IGJlIHVzZWQgaW4gYSBzaW5n
bGUgVk0sIGFjcm9zcworICAgICAgICBhbGwgcHJvY2Vzc2VzLCBhdCBhIHNpbmdsZSB0aW1lLiBX
ZSBtYXkgYmUgYWJsZSB0byBleHRlbmQgdGhpcyBpbiB0aGUgZnV0dXJlCisgICAgICAgIGlmIHdl
IGNhbiBhdG9taWNhbGx5IHVwZGF0ZSBpdCBhY3Jvc3MgVk1zL3Byb2Nlc3Nlcy4gSG93ZXZlciwg
d2UncmUgY2hvb3NpbmcKKyAgICAgICAgbW9yZSByZXN0cmljdGVkIHNlbWFudGljcyBub3cgYXMg
aXQncyBhbHdheXMgZWFzaWVyIHRvIGV4dGVuZCB0aGVzZSBzZW1hbnRpY3MKKyAgICAgICAgaW4g
dGhlIGZ1dHVyZSBvcHBvc2VkIHRvIGhhdmluZyB0byBzdXBwb3J0IHRoZSBtb3JlIGZsZXhpYmxl
IGJlaGF2aW9yCisgICAgICAgIHVwIGZyb250LgorICAgICAgICAKKyAgICAgICAgVGhpcyBwYXRj
aCBhbHNvOgorICAgICAgICAtIEFkZHMgZXJyb3IgbWVzc2FnZXMgaWYgd3JpdGluZyB0aGUgY2Fj
aGUgZmFpbHMuIFdlIGRvbid0IGV4cGVjdCB0aGlzIHRvCisgICAgICAgICAgZmFpbCwgYnV0IHBy
ZXZpb3VzbHkgd2Ugd291bGQgc2F5IHdlIGNhY2hlZCBpdCBldmVuIGlmIHdyaXRlKCkgZmFpbHMu
CisgICAgICAgIC0gUmVtb3ZlcyB0aGUgdW51c2VkIG1fbW9kdWxlS2V5IGZpZWxkLgorICAgICAg
ICAtIE1ha2VzIGNhbGxpbmcgY2FjaGVCeXRlY29kZVdpdGhFcnJvciB3aXRoIGFuIGFscmVhZHkg
bm9uLWVtcHR5IGNhY2hlIGZpbGUgZmFpbC4KKyAgICAgICAgICBJbiB0aGUgZnV0dXJlLCB3ZSBz
aG91bGQgZXh0ZW5kIHRoaXMgdG8ganVzdCBmaWxsIGluIHRoZSBwYXJ0cyBvZiB0aGUgY2FjaGUK
KyAgICAgICAgICB0aGF0IGFyZSBub3QgcHJlc2VudC4gQnV0IHdlIGRvbid0IGhhdmUgdGhlIGFi
aWxpdHkgdG8gZG8gdGhhdCB5ZXQsIHNvIHdlCisgICAgICAgICAganVzdCByZXN1bHQgaW4gYW4g
ZXJyb3IgZm9yIG5vdy4KKworICAgICAgICAqIEFQSS9KU1NjcmlwdC5tbToKKyAgICAgICAgKC1b
SlNTY3JpcHQgZGVhbGxvY10pOgorICAgICAgICAoLVtKU1NjcmlwdCByZWFkQ2FjaGVdKToKKyAg
ICAgICAgKC1bSlNTY3JpcHQgaW5pdF0pOgorICAgICAgICAoLVtKU1NjcmlwdCB3cml0ZUNhY2hl
Ol0pOgorICAgICAgICAqIEFQSS9KU1NjcmlwdEludGVybmFsLmg6CisgICAgICAgICogQVBJL3Rl
c3RzL3Rlc3RhcGkubW06CisgICAgICAgICh0ZXN0Q2FjaGVGaWxlSXNFeGNsdXNpdmUpOgorICAg
ICAgICAodGVzdENhY2hlRmlsZUZhaWxzV2hlbkl0c0FscmVhZHlDYWNoZWQpOgorICAgICAgICAo
dGVzdE9iamVjdGl2ZUNBUEkpOgorCiAyMDE5LTAzLTA2ICBDaHJpc3RvcGhlciBSZWlkICA8Y2hy
aXMucmVpZEBzb255LmNvbT4KIAogICAgICAgICBGb2xsb3d1cHMgdG8gKHIyNDIzMDYpOiBVc2Ug
TG9ja0hvbGRlciBpbnN0ZWFkIG9mIHN0ZDo6bG9ja19ndWFyZCBvbiBSZW1vdGUgSW5zcGVjdG9y
IExvY2tzCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTU2NyaXB0Lm1tCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNTY3JpcHQubW0JKHJldmlzaW9u
IDI0MjU4MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNTY3JpcHQubW0JKHdvcmtp
bmcgY29weSkKQEAgLTUxLDcgKzUxLDcgQEAKICAgICBSZXRhaW5QdHI8TlNVUkw+IG1fY2FjaGVQ
YXRoOwogICAgIEpTQzo6Q2FjaGVkQnl0ZWNvZGUgbV9jYWNoZWRCeXRlY29kZTsKICAgICBKU0M6
OlN0cm9uZzxKU0M6OkpTU291cmNlQ29kZT4gbV9qc1NvdXJjZUNvZGU7Ci0gICAgVW5pcXVlZFN0
cmluZ0ltcGwqIG1fbW9kdWxlS2V5OworICAgIGludCBtX2NhY2hlRmlsZURlc2NyaXB0b3I7CiB9
CiAKICsgKGluc3RhbmNldHlwZSlzY3JpcHRXaXRoU291cmNlOihOU1N0cmluZyAqKXNvdXJjZSBp
blZpcnR1YWxNYWNoaW5lOihKU1ZpcnR1YWxNYWNoaW5lICopdm0KQEAgLTE3NCw2ICsxNzQsMTAg
QEAgLSAodm9pZClkZWFsbG9jCiB7CiAgICAgaWYgKG1fY2FjaGVkQnl0ZWNvZGUuc2l6ZSgpICYm
ICFtX2NhY2hlZEJ5dGVjb2RlLm93bmVkKCkpCiAgICAgICAgIG11bm1hcChjb25zdF9jYXN0PHZv
aWQqPihtX2NhY2hlZEJ5dGVjb2RlLmRhdGEoKSksIG1fY2FjaGVkQnl0ZWNvZGUuc2l6ZSgpKTsK
KworICAgIGlmIChtX2NhY2hlRmlsZURlc2NyaXB0b3IgIT0gLTEpCisgICAgICAgIGNsb3NlKG1f
Y2FjaGVGaWxlRGVzY3JpcHRvcik7CisKICAgICBbc3VwZXIgZGVhbGxvY107CiB9CiAKQEAgLTE4
MiwyNiArMTg2LDE3IEBAIC0gKHZvaWQpcmVhZENhY2hlCiAgICAgaWYgKCFtX2NhY2hlUGF0aCkK
ICAgICAgICAgcmV0dXJuOwogCi0gICAgaW50IGZkID0gb3BlbihbbV9jYWNoZVBhdGggcGF0aF0u
VVRGOFN0cmluZywgT19SRE9OTFkpOwotICAgIGlmIChmZCA9PSAtMSkKKyAgICBtX2NhY2hlRmls
ZURlc2NyaXB0b3IgPSBvcGVuKFttX2NhY2hlUGF0aCBwYXRoXS5VVEY4U3RyaW5nLCBPX0NSRUFU
IHwgT19SRFdSIHwgT19FWExPQ0sgfCBPX05PTkJMT0NLLCAwNjY2KTsKKyAgICBpZiAobV9jYWNo
ZUZpbGVEZXNjcmlwdG9yID09IC0xKQogICAgICAgICByZXR1cm47CiAKLSAgICBpbnQgcmMgPSBm
bG9jayhmZCwgTE9DS19TSCB8IExPQ0tfTkIpOwotICAgIGlmIChyYykgewotICAgICAgICBjbG9z
ZShmZCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KICAgICBzdHJ1Y3Qgc3RhdCBzYjsKLSAg
ICBpbnQgcmVzID0gZnN0YXQoZmQsICZzYik7CisgICAgaW50IHJlcyA9IGZzdGF0KG1fY2FjaGVG
aWxlRGVzY3JpcHRvciwgJnNiKTsKICAgICBzaXplX3Qgc2l6ZSA9IHN0YXRpY19jYXN0PHNpemVf
dD4oc2Iuc3Rfc2l6ZSk7Ci0gICAgaWYgKHJlcyB8fCAhc2l6ZSkgewotICAgICAgICBjbG9zZShm
ZCk7CisgICAgaWYgKHJlcyB8fCAhc2l6ZSkKICAgICAgICAgcmV0dXJuOwotICAgIH0KIAotICAg
IHZvaWQqIGJ1ZmZlciA9IG1tYXAobnVsbHB0ciwgc2l6ZSwgUFJPVF9SRUFELCBNQVBfUFJJVkFU
RSwgZmQsIDApOwotICAgIGNsb3NlKGZkKTsKKyAgICB2b2lkKiBidWZmZXIgPSBtbWFwKG51bGxw
dHIsIHNpemUsIFBST1RfUkVBRCwgTUFQX1BSSVZBVEUsIG1fY2FjaGVGaWxlRGVzY3JpcHRvciwg
MCk7CiAKICAgICBKU0M6OkNhY2hlZEJ5dGVjb2RlIGNhY2hlZEJ5dGVjb2RlIHsgYnVmZmVyLCBz
aXplIH07CiAKQEAgLTIxMCw2ICsyMDUsOCBAQCAtICh2b2lkKXJlYWRDYWNoZQogICAgIEpTQzo6
U291cmNlQ29kZUtleSBrZXkgPSBtX3R5cGUgPT0ga0pTU2NyaXB0VHlwZVByb2dyYW0gPyBzb3Vy
Y2VDb2RlS2V5Rm9yU2VyaWFsaXplZFByb2dyYW0odm0sIHNvdXJjZUNvZGUpIDogc291cmNlQ29k
ZUtleUZvclNlcmlhbGl6ZWRNb2R1bGUodm0sIHNvdXJjZUNvZGUpOwogICAgIGlmIChpc0NhY2hl
ZEJ5dGVjb2RlU3RpbGxWYWxpZCh2bSwgY2FjaGVkQnl0ZWNvZGUsIGtleSwgbV90eXBlID09IGtK
U1NjcmlwdFR5cGVQcm9ncmFtID8gSlNDOjpTb3VyY2VDb2RlVHlwZTo6UHJvZ3JhbVR5cGUgOiBK
U0M6OlNvdXJjZUNvZGVUeXBlOjpNb2R1bGVUeXBlKSkKICAgICAgICAgbV9jYWNoZWRCeXRlY29k
ZSA9IFdURk1vdmUoY2FjaGVkQnl0ZWNvZGUpOworICAgIGVsc2UKKyAgICAgICAgZnRydW5jYXRl
KG1fY2FjaGVGaWxlRGVzY3JpcHRvciwgMCk7CiB9CiAKIC0gKEJPT0wpY2FjaGVCeXRlY29kZVdp
dGhFcnJvcjooTlNFcnJvciAqKillcnJvcgpAQCAtMjM4LDYgKzIzNSwxNiBAQCAtIChKU1Njcmlw
dFR5cGUpdHlwZQogCiBAaW1wbGVtZW50YXRpb24gSlNTY3JpcHQoSW50ZXJuYWwpCiAKKy0gKGlu
c3RhbmNldHlwZSlpbml0Cit7CisgICAgc2VsZiA9IFtzdXBlciBpbml0XTsKKyAgICBpZiAoIXNl
bGYpCisgICAgICAgIHJldHVybiBuaWw7CisKKyAgICBtX2NhY2hlRmlsZURlc2NyaXB0b3IgPSAt
MTsKKyAgICByZXR1cm4gc2VsZjsKK30KKwogLSAodW5zaWduZWQpaGFzaAogewogICAgIHJldHVy
biBtX3NvdXJjZS5oYXNoKCk7CkBAIC0yNjMsMTEgKzI3MCwxNiBAQCAtIChKU0M6OkpTU291cmNl
Q29kZSopanNTb3VyY2VDb2RlCiAKIC0gKEJPT0wpd3JpdGVDYWNoZTooU3RyaW5nJillcnJvcgog
ewotICAgIGlmIChtX2NhY2hlZEJ5dGVjb2RlLnNpemUoKSkKLSAgICAgICAgcmV0dXJuIFlFUzsK
KyAgICBpZiAobV9jYWNoZWRCeXRlY29kZS5zaXplKCkpIHsKKyAgICAgICAgZXJyb3IgPSAiQ2Fj
aGUgZm9yIEpTU2NyaXB0IGlzIGFscmVhZHkgbm9uLWVtcHR5LiBDYW4gbm90IG92ZXJyaWRlIGl0
LiJfczsKKyAgICAgICAgcmV0dXJuIE5POworICAgIH0KIAotICAgIGlmICghbV9jYWNoZVBhdGgp
IHsKLSAgICAgICAgZXJyb3IgPSAiTm8gY2FjaGUgd2FzIHBhdGggcHJvdmlkZWQgZHVyaW5nIGNv
bnN0cnVjdGlvbiBvZiB0aGlzIEpTU2NyaXB0LiJfczsKKyAgICBpZiAobV9jYWNoZUZpbGVEZXNj
cmlwdG9yID09IC0xKSB7CisgICAgICAgIGlmICghbV9jYWNoZVBhdGgpCisgICAgICAgICAgICBl
cnJvciA9ICJObyBjYWNoZSB3YXMgcGF0aCBwcm92aWRlZCBkdXJpbmcgY29uc3RydWN0aW9uIG9m
IHRoaXMgSlNTY3JpcHQuIl9zOworICAgICAgICBlbHNlCisgICAgICAgICAgICBlcnJvciA9ICJD
b3VsZCBub3QgbG9jayB0aGUgYnl0ZWNvZGUgY2FjaGUgZmlsZS4gSXQncyBsaWtlbHkgYW5vdGhl
ciBWTSBvciBwcm9jZXNzIGlzIGFscmVhZHkgdXNpbmcgaXQuIl9zOwogICAgICAgICByZXR1cm4g
Tk87CiAgICAgfQogCkBAIC0yODcsMTggKzI5OSwxOSBAQCAtIChCT09MKXdyaXRlQ2FjaGU6KFN0
cmluZyYpZXJyb3IKICAgICAgICAgcmV0dXJuIE5POwogICAgIH0KIAotICAgIGludCBmZCA9IG9w
ZW4oW21fY2FjaGVQYXRoIHBhdGhdLlVURjhTdHJpbmcsIE9fQ1JFQVQgfCBPX1dST05MWSwgMDY2
Nik7Ci0gICAgaWYgKGZkID09IC0xKSB7Ci0gICAgICAgIGVycm9yID0gbWFrZVN0cmluZygiVW5h
YmxlIHRvIG9wZW4gZmlsZTogIiwgW21fY2FjaGVQYXRoIHBhdGhdLlVURjhTdHJpbmcsICIgZHVl
IHRvIGVycm9yOiAiLCBzdHJlcnJvcihlcnJubykpOworICAgIHNzaXplX3QgYnl0ZXNXcml0dGVu
ID0gd3JpdGUobV9jYWNoZUZpbGVEZXNjcmlwdG9yLCBtX2NhY2hlZEJ5dGVjb2RlLmRhdGEoKSwg
bV9jYWNoZWRCeXRlY29kZS5zaXplKCkpOworICAgIGlmIChieXRlc1dyaXR0ZW4gPT0gLTEpIHsK
KyAgICAgICAgZXJyb3IgPSBtYWtlU3RyaW5nKCJDb3VsZCBub3Qgd3JpdGUgY2FjaGUgZmlsZSB0
byBkaXNrOiAiLCBzdHJlcnJvcihlcnJubykpOwogICAgICAgICByZXR1cm4gTk87CiAgICAgfQot
ICAgIGludCByZXR1cm5Db2RlID0gZmxvY2soZmQsIExPQ0tfRVggfCBMT0NLX05CKTsKLSAgICBp
ZiAocmV0dXJuQ29kZSkKLSAgICAgICAgZXJyb3IgPSAiVW5hYmxlIHRvIGxvY2sgdGhlIGNhY2hl
IGZpbGU7IGl0IG1heSBhbHJlYWR5IGJlIGluIHVzZS4iX3M7Ci0gICAgZWxzZQotICAgICAgICB3
cml0ZShmZCwgbV9jYWNoZWRCeXRlY29kZS5kYXRhKCksIG1fY2FjaGVkQnl0ZWNvZGUuc2l6ZSgp
KTsKLSAgICBjbG9zZShmZCk7Ci0gICAgcmV0dXJuICFyZXR1cm5Db2RlOworCisgICAgaWYgKHN0
YXRpY19jYXN0PHNpemVfdD4oYnl0ZXNXcml0dGVuKSAhPSBtX2NhY2hlZEJ5dGVjb2RlLnNpemUo
KSkgeworICAgICAgICBmdHJ1bmNhdGUobV9jYWNoZUZpbGVEZXNjcmlwdG9yLCAwKTsKKyAgICAg
ICAgZXJyb3IgPSBtYWtlU3RyaW5nKCJDb3VsZCBub3Qgd3JpdGUgdGhlIGZ1bGwgY2FjaGUgZmls
ZSB0byBkaXNrLiBPbmx5IHdyb3RlICIsIFN0cmluZzo6bnVtYmVyKGJ5dGVzV3JpdHRlbiksICIg
b2YgdGhlIGV4cGVjdGVkICIsIFN0cmluZzo6bnVtYmVyKG1fY2FjaGVkQnl0ZWNvZGUuc2l6ZSgp
KSwgIiBieXRlcy4iKTsKKyAgICAgICAgcmV0dXJuIE5POworICAgIH0KKworICAgIHJldHVybiBZ
RVM7CiB9CiAKIC0gKHZvaWQpc2V0U291cmNlVVJMOihOU1VSTCAqKXVybApJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL0FQSS9KU1NjcmlwdEludGVybmFsLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU1NjcmlwdEludGVybmFsLmgJKHJldmlzaW9uIDI0MjU4
MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNTY3JpcHRJbnRlcm5hbC5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC00NCw2ICs0NCw3IEBAIGNsYXNzIFN0cmluZzsKIAogQGludGVyZmFjZSBK
U1NjcmlwdChJbnRlcm5hbCkKIAorLSAoaW5zdGFuY2V0eXBlKWluaXQ7CiAtICh1bnNpZ25lZClo
YXNoOwogLSAoY29uc3QgV1RGOjpTdHJpbmcmKXNvdXJjZTsKIC0gKG51bGxhYmxlIGNvbnN0IEpT
Qzo6Q2FjaGVkQnl0ZWNvZGUqKWNhY2hlZEJ5dGVjb2RlOwpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL0FQSS90ZXN0cy90ZXN0YXBpLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9BUEkvdGVzdHMvdGVzdGFwaS5tbQkocmV2aXNpb24gMjQyNTgwKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0FQSS90ZXN0cy90ZXN0YXBpLm1tCSh3b3JraW5nIGNvcHkpCkBAIC0y
MTU5LDYgKzIxNTksNjcgQEAgc3RhdGljIHZvaWQgdGVzdFByb2dyYW1KU1NjcmlwdEV4Y2VwdGlv
bgogICAgIH0KIH0KIAorc3RhdGljIHZvaWQgdGVzdENhY2hlRmlsZUlzRXhjbHVzaXZlKCkKK3sK
KyAgICBOU1VSTCogY2FjaGVQYXRoID0gdGVtcEZpbGUoQCJmb28ucHJvZ3JhbS5jYWNoZSIpOwor
CisgICAgQGF1dG9yZWxlYXNlcG9vbCB7CisgICAgICAgIE5TU3RyaW5nICpzb3VyY2UgPSBAImZ1
bmN0aW9uIGZvbygpIHsgcmV0dXJuIDQyOyB9IGZvbygpOyI7CisgICAgICAgIE5TVVJMKiBzb3Vy
Y2VVUkwgPSBbTlNVUkwgVVJMV2l0aFN0cmluZzpAIm15LXBhdGgiXTsKKyAgICAgICAgSlNWaXJ0
dWFsTWFjaGluZSAqdm0gPSBbW0pTVmlydHVhbE1hY2hpbmUgYWxsb2NdIGluaXRdOworCisgICAg
ICAgIEpTU2NyaXB0ICpzY3JpcHQxID0gW0pTU2NyaXB0IHNjcmlwdE9mVHlwZTprSlNTY3JpcHRU
eXBlUHJvZ3JhbSB3aXRoU291cmNlOnNvdXJjZSBhbmRTb3VyY2VVUkw6c291cmNlVVJMIGFuZEJ5
dGVjb2RlQ2FjaGU6Y2FjaGVQYXRoIGluVmlydHVhbE1hY2hpbmU6dm0gZXJyb3I6bmlsXTsKKyAg
ICAgICAgUkVMRUFTRV9BU1NFUlQoc2NyaXB0MSk7CisgICAgICAgIGNoZWNrUmVzdWx0KEAiU2hv
dWxkIGJlIGFibGUgdG8gY2FjaGUgdGhlIGZpcnN0IGZpbGUiLCBbc2NyaXB0MSBjYWNoZUJ5dGVj
b2RlV2l0aEVycm9yOm5pbF0pOworCisgICAgICAgIEpTU2NyaXB0ICpzY3JpcHQyID0gW0pTU2Ny
aXB0IHNjcmlwdE9mVHlwZTprSlNTY3JpcHRUeXBlUHJvZ3JhbSB3aXRoU291cmNlOnNvdXJjZSBh
bmRTb3VyY2VVUkw6c291cmNlVVJMIGFuZEJ5dGVjb2RlQ2FjaGU6Y2FjaGVQYXRoIGluVmlydHVh
bE1hY2hpbmU6dm0gZXJyb3I6bmlsXTsKKyAgICAgICAgUkVMRUFTRV9BU1NFUlQoc2NyaXB0Mik7
CisgICAgICAgIE5TRXJyb3IqIGVycm9yID0gbmlsOworICAgICAgICBjaGVja1Jlc3VsdChAIlNo
b3VsZCBOT1QgYmUgYWJsZSB0byBjYWNoZSB0aGUgc2Vjb25kIGZpbGUiLCAhW3NjcmlwdDIgY2Fj
aGVCeXRlY29kZVdpdGhFcnJvcjomZXJyb3JdKTsKKyAgICAgICAgY2hlY2tSZXN1bHQoQCJTaG91
bGQgTk9UIGJlIGFibGUgdG8gY2FjaGUgdGhlIHNlY29uZCBmaWxlIGhhcyB0aGUgY29ycmVjdCBl
cnJvciBtZXNzYWdlIiwgW1tlcnJvciBkZXNjcmlwdGlvbl0gY29udGFpbnNTdHJpbmc6QCJDb3Vs
ZCBub3QgbG9jayB0aGUgYnl0ZWNvZGUgY2FjaGUgZmlsZS4gSXQncyBsaWtlbHkgYW5vdGhlciBW
TSBvciBwcm9jZXNzIGlzIGFscmVhZHkgdXNpbmcgaXQiXSk7CisgICAgfQorCisgICAgTlNGaWxl
TWFuYWdlciogZmlsZU1hbmFnZXIgPSBbTlNGaWxlTWFuYWdlciBkZWZhdWx0TWFuYWdlcl07Cisg
ICAgQk9PTCByZW1vdmVkQWxsID0gW2ZpbGVNYW5hZ2VyIHJlbW92ZUl0ZW1BdFVSTDpjYWNoZVBh
dGggZXJyb3I6bmlsXTsKKyAgICBjaGVja1Jlc3VsdChAIlN1Y2Nlc3NmdWxseSByZW1vdmVkIGNh
Y2hlIGZpbGUiLCByZW1vdmVkQWxsKTsKK30KKworc3RhdGljIHZvaWQgdGVzdENhY2hlRmlsZUZh
aWxzV2hlbkl0c0FscmVhZHlDYWNoZWQoKQoreworICAgIE5TVVJMKiBjYWNoZVBhdGggPSB0ZW1w
RmlsZShAImZvby5wcm9ncmFtLmNhY2hlIik7CisgICAgTlNVUkwqIHNvdXJjZVVSTCA9IFtOU1VS
TCBVUkxXaXRoU3RyaW5nOkAibXktcGF0aCJdOworICAgIE5TU3RyaW5nICpzb3VyY2UgPSBAImZ1
bmN0aW9uIGZvbygpIHsgcmV0dXJuIDQyOyB9IGZvbygpOyI7CisKKyAgICBAYXV0b3JlbGVhc2Vw
b29sIHsKKyAgICAgICAgSlNWaXJ0dWFsTWFjaGluZSAqdm0gPSBbW0pTVmlydHVhbE1hY2hpbmUg
YWxsb2NdIGluaXRdOworCisgICAgICAgIEpTU2NyaXB0ICpzY3JpcHQgPSBbSlNTY3JpcHQgc2Ny
aXB0T2ZUeXBlOmtKU1NjcmlwdFR5cGVQcm9ncmFtIHdpdGhTb3VyY2U6c291cmNlIGFuZFNvdXJj
ZVVSTDpzb3VyY2VVUkwgYW5kQnl0ZWNvZGVDYWNoZTpjYWNoZVBhdGggaW5WaXJ0dWFsTWFjaGlu
ZTp2bSBlcnJvcjpuaWxdOworICAgICAgICBSRUxFQVNFX0FTU0VSVChzY3JpcHQpOworICAgICAg
ICBjaGVja1Jlc3VsdChAIlNob3VsZCBiZSBhYmxlIHRvIGNhY2hlIHRoZSBmaXJzdCBmaWxlIiwg
W3NjcmlwdCBjYWNoZUJ5dGVjb2RlV2l0aEVycm9yOm5pbF0pOworICAgIH0KKworICAgIEBhdXRv
cmVsZWFzZXBvb2wgeworICAgICAgICBKU1ZpcnR1YWxNYWNoaW5lICp2bSA9IFtbSlNWaXJ0dWFs
TWFjaGluZSBhbGxvY10gaW5pdF07CisKKyAgICAgICAgSlNTY3JpcHQgKnNjcmlwdCA9IFtKU1Nj
cmlwdCBzY3JpcHRPZlR5cGU6a0pTU2NyaXB0VHlwZVByb2dyYW0gd2l0aFNvdXJjZTpzb3VyY2Ug
YW5kU291cmNlVVJMOnNvdXJjZVVSTCBhbmRCeXRlY29kZUNhY2hlOmNhY2hlUGF0aCBpblZpcnR1
YWxNYWNoaW5lOnZtIGVycm9yOm5pbF07CisgICAgICAgIFJFTEVBU0VfQVNTRVJUKHNjcmlwdCk7
CisgICAgICAgIE5TRXJyb3IqIGVycm9yID0gbmlsOworICAgICAgICBjaGVja1Jlc3VsdChAIlNo
b3VsZCBub3QgYmUgYWJsZSB0byBjYWNoZSB0aGUgc2Vjb25kIHRpbWUgYmVjYXVzZSB0aGUgY2Fj
aGUgaXMgYWxyZWFkeSBwcmVzZW50IiwgIVtzY3JpcHQgY2FjaGVCeXRlY29kZVdpdGhFcnJvcjom
ZXJyb3JdKTsKKyAgICAgICAgY2hlY2tSZXN1bHQoQCJDb3JyZWN0IGVycm9yIG1lc3NhZ2Ugc2hv
dWxkIGJlIHNldCIsIFtbZXJyb3IgZGVzY3JpcHRpb25dIGNvbnRhaW5zU3RyaW5nOkAiQ2FjaGUg
Zm9yIEpTU2NyaXB0IGlzIGFscmVhZHkgbm9uLWVtcHR5LiBDYW4gbm90IG92ZXJyaWRlIGl0LiJd
KTsKKworICAgICAgICBKU0NvbnRleHQqIGNvbnRleHQgPSBbW0pTQ29udGV4dCBhbGxvY10gaW5p
dFdpdGhWaXJ0dWFsTWFjaGluZTp2bV07CisgICAgICAgIEpTQzo6T3B0aW9uczo6Zm9yY2VEaXNr
Q2FjaGUoKSA9IHRydWU7CisgICAgICAgIEpTVmFsdWUgKnJlc3VsdCA9IFtjb250ZXh0IGV2YWx1
YXRlSlNTY3JpcHQ6c2NyaXB0XTsKKyAgICAgICAgUkVMRUFTRV9BU1NFUlQocmVzdWx0KTsKKyAg
ICAgICAgY2hlY2tSZXN1bHQoQCJSZXN1bHQgc2hvdWxkIGJlIDQyIiwgW3Jlc3VsdCBpc051bWJl
cl0gJiYgW3Jlc3VsdCB0b0ludDMyXSA9PSA0Mik7CisgICAgICAgIEpTQzo6T3B0aW9uczo6Zm9y
Y2VEaXNrQ2FjaGUoKSA9IGZhbHNlOworICAgIH0KKworICAgIE5TRmlsZU1hbmFnZXIqIGZpbGVN
YW5hZ2VyID0gW05TRmlsZU1hbmFnZXIgZGVmYXVsdE1hbmFnZXJdOworICAgIEJPT0wgcmVtb3Zl
ZEFsbCA9IFtmaWxlTWFuYWdlciByZW1vdmVJdGVtQXRVUkw6Y2FjaGVQYXRoIGVycm9yOm5pbF07
CisgICAgY2hlY2tSZXN1bHQoQCJTdWNjZXNzZnVsbHkgcmVtb3ZlZCBjYWNoZSBmaWxlIiwgcmVt
b3ZlZEFsbCk7Cit9CisKIEBpbnRlcmZhY2UgSlNDb250ZXh0RmlsZUxvYWRlckRlbGVnYXRlIDog
SlNDb250ZXh0IDxKU01vZHVsZUxvYWRlckRlbGVnYXRlPgogCiArIChpbnN0YW5jZXR5cGUpbmV3
Q29udGV4dDsKQEAgLTIzNjYsNiArMjQyNyw4IEBAIHZvaWQgdGVzdE9iamVjdGl2ZUNBUEkoY29u
c3QgY2hhciogZmlsdGUKICAgICBSVU4odGVzdEJ5dGVjb2RlQ2FjaGVXaXRoU2FtZUNhY2hlRmls
ZUFuZERpZmZlcmVudFNjcmlwdChmYWxzZSkpOwogICAgIFJVTih0ZXN0Qnl0ZWNvZGVDYWNoZVdp
dGhTYW1lQ2FjaGVGaWxlQW5kRGlmZmVyZW50U2NyaXB0KHRydWUpKTsKICAgICBSVU4odGVzdFBy
b2dyYW1KU1NjcmlwdEV4Y2VwdGlvbigpKTsKKyAgICBSVU4odGVzdENhY2hlRmlsZUlzRXhjbHVz
aXZlKCkpOworICAgIFJVTih0ZXN0Q2FjaGVGaWxlRmFpbHNXaGVuSXRzQWxyZWFkeUNhY2hlZCgp
KTsKIAogICAgIFJVTih0ZXN0TG9hZGVyUmVqZWN0c05pbFNjcmlwdFVSTCgpKTsKICAgICBSVU4o
dGVzdExvYWRlclJlamVjdHNGYWlsZWRGZXRjaCgpKTsK
</data>

          </attachment>
      

    </bug>

</bugzilla>