<?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>151290</bug_id>
          
          <creation_ts>2015-11-13 19:57:38 -0800</creation_ts>
          <short_desc>[JSC] Speed up the coalescing-related operation of the iterated register allocator</short_desc>
          <delta_ts>2015-11-17 14:37:17 -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>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>
          <dependson>151330</dependson>
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Benjamin Poulain">benjamin</reporter>
          <assigned_to name="Benjamin Poulain">benjamin</assigned_to>
          <cc>commit-queue</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>1142019</commentid>
    <comment_count>0</comment_count>
    <who name="Benjamin Poulain">benjamin</who>
    <bug_when>2015-11-13 19:57:38 -0800</bug_when>
    <thetext>[JSC] Speed up the coalescing-related operation of the iterated register allocator</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1142025</commentid>
    <comment_count>1</comment_count>
      <attachid>265530</attachid>
    <who name="Benjamin Poulain">benjamin</who>
    <bug_when>2015-11-13 20:22:42 -0800</bug_when>
    <thetext>Created attachment 265530
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1142064</commentid>
    <comment_count>2</comment_count>
      <attachid>265530</attachid>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2015-11-14 12:25:41 -0800</bug_when>
    <thetext>Comment on attachment 265530
Patch

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

r=me

Is this a speedup?

&gt; Source/JavaScriptCore/b3/air/AirIteratedRegisterCoalescing.cpp:760
&gt; +    // in the vector has the &quot;identifier&quot; for the move.

as

&gt; Source/JavaScriptCore/b3/air/AirIteratedRegisterCoalescing.cpp:781
&gt; +    struct OrderedMoveSet {

Can this go in its own file?

&gt; Source/JavaScriptCore/b3/air/AirIteratedRegisterCoalescing.cpp:797
&gt; +            return m_positionInMoveList[index] != std::numeric_limits&lt;unsigned&gt;::max();

Let&apos;s use wtf::notFound.

&gt; Source/JavaScriptCore/b3/air/AirIteratedRegisterCoalescing.cpp:831
&gt; +            // This assertion is a bit strict but that how the move list should be used. The only kind of moves that can

that is

&gt; Source/JavaScriptCore/b3/air/AirIteratedRegisterCoalescing.cpp:832
&gt; +            // return to the list are the one that we previous failed to coalesced with the conservative heuristics.

the ones
previously
to coalesce</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1142319</commentid>
    <comment_count>3</comment_count>
      <attachid>265611</attachid>
    <who name="Benjamin Poulain">benjamin</who>
    <bug_when>2015-11-16 13:53:16 -0800</bug_when>
    <thetext>Created attachment 265611
Patch for landing</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1142320</commentid>
    <comment_count>4</comment_count>
    <who name="Benjamin Poulain">benjamin</who>
    <bug_when>2015-11-16 13:54:43 -0800</bug_when>
    <thetext>(In reply to comment #2)
&gt; r=me
&gt; 
&gt; Is this a speedup?

Quite a bit, yep. Globally, it is 2%.

&gt; &gt; Source/JavaScriptCore/b3/air/AirIteratedRegisterCoalescing.cpp:781
&gt; &gt; +    struct OrderedMoveSet {
&gt; 
&gt; Can this go in its own file?

If I need a generic version, I&apos;ll make a new file.

Here, OrderedMoveSet knows exactly how it is supposed to be used. IMHO, it is better to keep the code close.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1142367</commentid>
    <comment_count>5</comment_count>
      <attachid>265611</attachid>
    <who name="Benjamin Poulain">benjamin</who>
    <bug_when>2015-11-16 15:47:09 -0800</bug_when>
    <thetext>Comment on attachment 265611
Patch for landing

Clearing flags on attachment: 265611

Committed r192492: &lt;http://trac.webkit.org/changeset/192492&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1142368</commentid>
    <comment_count>6</comment_count>
    <who name="Benjamin Poulain">benjamin</who>
    <bug_when>2015-11-16 15:47:13 -0800</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1142381</commentid>
    <comment_count>7</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2015-11-16 16:10:10 -0800</bug_when>
    <thetext>Re-opened since this is blocked by bug 151330</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>265530</attachid>
            <date>2015-11-13 20:22:42 -0800</date>
            <delta_ts>2015-11-16 13:53:14 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-151290-20151113202235.patch</filename>
            <type>text/plain</type>
            <size>14645</size>
            <attacher name="Benjamin Poulain">benjamin</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTkyNDQxCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCAz
ZGEyMzMxYWM5MzNjYjQwMDc2ZmRhMDRhNzAxODQwNThjYWY3NGMzLi43NGZhOTdkZWI0ZDNmMzcx
YjY4OTJlZjlhMGQwZjg3MWMzMzdkMGViIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSw1NyBAQAorMjAxNS0xMS0xMyAgQmVuamFtaW4gUG91bGFpbiAgPGJwb3VsYWluQGFwcGxl
LmNvbT4KKworICAgICAgICBbSlNDXSBTcGVlZCB1cCB0aGUgY29hbGVzY2luZy1yZWxhdGVkIG9w
ZXJhdGlvbiBvZiB0aGUgaXRlcmF0ZWQgcmVnaXN0ZXIgYWxsb2NhdG9yCisgICAgICAgIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNTEyOTAKKworICAgICAgICBSZXZp
ZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBPbmUgc3RlcCBjbG9zZXIgdG8gcmVt
b3ZpbmcgdGhlIEhhc2ggc3RydWN0dXJlczoKKworICAgICAgICBGb3IgdGhlIGNvYWxlc2Npbmcg
b3BlcmF0aW9uLCB3ZSBuZWVkIHRvIGtlZXAgdHJhY2sgb2YgTW92ZSBpbnN0cnVjdGlvbnMuIFdl
IGRvIG5vdCBzdHJpY3RseQorICAgICAgICBuZWVkIHRob3NlIHRvIGJlIHRoZSBBaXIgTW92ZSwg
anVzdCBhbnkgYWJzdHJhY3Qgb3BlcmF0aW9uIHRoYXQgY29weSBhIFRtcCBpbnRvIGFub3RoZXIg
VG1wLgorCisgICAgICAgIEluIHRoaXMgcGF0Y2gsIEkgZXhwbG9pdCB0aGF0IHRvIHJlbW92ZSB0
aGUgSGFzaCBzdHJ1Y3R1cmUgcmVsYXRlZCB0byB0aGUgSW5zdC4gSW5zdGVhZCBvZgorICAgICAg
ICB1c2luZyB0aGUgTW92ZSBJbnN0LCB3ZSBqdXN0IGtlZXAgdHJhY2sgb2YgdGhlIFVzZSgpIGFu
ZCBEZWYoKSBvZiB0aGUgaW5zdHJ1Y3Rpb25zLgorICAgICAgICBUaG9zZSBhcmUgYWRkZWQgaW4g
dGhlIGdsb2JhbCBsaXN0IG1fY29hbGVzY2luZ0NhbmRpZGF0ZXMgYW5kIHRoZSBpbmRleCBpbiB0
aGF0IGxpc3QgcmVwcmVzZW50CisgICAgICAgIHRoZSBtb3ZlIGZvciB0aGUgcmVtYWluaW5nIG9m
IHRoZSBhbGdvcml0aG0uCisKKyAgICAgICAgV2l0aCBNb3ZlcyB0cmFuc2Zvcm1lZCBpbnRvIGRl
bnNlIGluZGljZXMsIHdlIGNhbiBzdGFydCB1c2luZyBhcnJheXMgdG8gbWFrZSBmYXN0IHNldHMu
CisKKyAgICAgICAgVGhlIG1fYWN0aXZlTW92ZXMgU2V0IGlzIGVhc3kgc2luY2Ugd2Ugb25seSBu
ZWVkIHNpbXBsZSBhZGQvcmVtb3ZlL2NvbnRhaW5zLiBJdCBpcyB0cmFuc2Zvcm1lZAorICAgICAg
ICBpbnRvIGEgQml0VmVjdG9yLgorICAgICAgICBUaGUgYml0IHZlY3RvciBpcyBhbHdheXMgZnVs
bHkgYWxsb2NhdGVkIHRvIGFsbG93IGZvciBxdWljayB1bmlmb3JtIGFjY2Vzcy4gVGhlIGFzc3Vt
dGlvbiBpcyB0aGF0CisgICAgICAgIGFjdGl2ZU1vdmVzIHdpbGwgY29udGFpbnMgYSBmZXcgdmFs
dWVzIGZvciBub24gdHJpdmlhbCBjYXNlcy4KKworICAgICAgICBUaGUgd29ya2xpc3QgbV93b3Jr
bGlzdE1vdmVzIGlzIG1vcmUgY29tcGxpY2F0ZWQuIEkgd2FudCBpdCB0byBiZSBvcmRlcmVkIHRv
IGNvYWxlc2NlIG1vdmVzIHN0YXJ0aW5nCisgICAgICAgIGF0IHRoZSB0b3Agb2YgYmxvY2tzLiBI
YXZpbmcgYSBmYXN0IHJlbW92ZSgpIG9wZXJhdGlvbiBpcyBhbHNvIHVzZWZ1bCBmb3IgbWFzcyBj
b2FsZXNjaW5nLgorICAgICAgICBJdCBhbHNvIG5lZWRzIFNldCBvcGVyYXRpb25zLCBlc3BlY2lh
bGx5IGEgZmFzdCBjb250YWlucygpLgorCisgICAgICAgIEZvciBtX3dvcmtsaXN0TW92ZXMsIEkg
Y3JlYXRlZCBhIG5ldyBzdHJ1Y3R1cmU6IE9yZGVyZWRNb3ZlU2V0LgorICAgICAgICBJdCBjb250
YWlucyBhIGxpc3Qgb2Ygb3JkZXJlZCB2YWx1ZXMsIGFuZCBhIG1hcCBvZiBlYWNoIHZhbHVlIHRv
IGl0cyBwb3NpdGlvbiBpbiB0aGUgbGlzdC4KKworICAgICAgICBUaGlzIHJlc2VtYmxlcyBCcmln
Z3MnIFNwYXJzZSBTZXQgYnV0IGl0IGlzIG5vdCBleGFjdGx5IHRoZSBzYW1lLiBXaGVuIHJlbW92
aW5nIGEgdmFsdWUsCisgICAgICAgIEkgc2V0IGEgc3BlY2lhbCBtYXJrZXIgaW4gdGhlIG1hcCAo
VUlOVF9NQVgpLiBUaGUgcmVhc29uIGlzIHRoYXQgSSB3YW50IGNvbnRhaW5zKCkgdG8gYmUgZmFz
dAorICAgICAgICBpbnN0ZWFkIG9mIHJlbW92ZSgpLiBUaGUgbWFya2VyIGluIHRoZSBtYXAgYWxs
b3dzIGNvbnRhaW5zKCkgd2l0aCBhIHNpbmdsZSBtZW1vcnkgb3BlcmF0aW9uIGluc3RlYWQgb2Yg
dHdvLgorCisgICAgICAgICogYjMvYWlyL0Fpckl0ZXJhdGVkUmVnaXN0ZXJDb2FsZXNjaW5nLmNw
cDoKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6SXRlcmF0ZWRSZWdpc3RlckNvYWxlc2NpbmdBbGxv
Y2F0b3I6OmJ1aWxkKToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6SXRlcmF0ZWRSZWdpc3RlckNv
YWxlc2NpbmdBbGxvY2F0b3I6OmFsbG9jYXRlKToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6SXRl
cmF0ZWRSZWdpc3RlckNvYWxlc2NpbmdBbGxvY2F0b3I6OmZvckVhY2hOb2RlTW92ZXMpOgorICAg
ICAgICAoSlNDOjpCMzo6QWlyOjpJdGVyYXRlZFJlZ2lzdGVyQ29hbGVzY2luZ0FsbG9jYXRvcjo6
aXNNb3ZlUmVsYXRlZCk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6Okl0ZXJhdGVkUmVnaXN0ZXJD
b2FsZXNjaW5nQWxsb2NhdG9yOjplbmFibGVNb3Zlc09uVmFsdWUpOgorICAgICAgICAoSlNDOjpC
Mzo6QWlyOjpJdGVyYXRlZFJlZ2lzdGVyQ29hbGVzY2luZ0FsbG9jYXRvcjo6Y29hbGVzY2UpOgor
ICAgICAgICAoSlNDOjpCMzo6QWlyOjpJdGVyYXRlZFJlZ2lzdGVyQ29hbGVzY2luZ0FsbG9jYXRv
cjo6Y29tYmluZSk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6Okl0ZXJhdGVkUmVnaXN0ZXJDb2Fs
ZXNjaW5nQWxsb2NhdG9yOjpmcmVlemVNb3Zlcyk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6Okl0
ZXJhdGVkUmVnaXN0ZXJDb2FsZXNjaW5nQWxsb2NhdG9yOjpkdW1wV29ya0xpc3RzKToKKyAgICAg
ICAgKEpTQzo6QjM6OkFpcjo6SXRlcmF0ZWRSZWdpc3RlckNvYWxlc2NpbmdBbGxvY2F0b3I6Ok9y
ZGVyZWRNb3ZlU2V0OjphZGRNb3ZlKToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6SXRlcmF0ZWRS
ZWdpc3RlckNvYWxlc2NpbmdBbGxvY2F0b3I6Ok9yZGVyZWRNb3ZlU2V0Ojppc0VtcHR5KToKKyAg
ICAgICAgKEpTQzo6QjM6OkFpcjo6SXRlcmF0ZWRSZWdpc3RlckNvYWxlc2NpbmdBbGxvY2F0b3I6
Ok9yZGVyZWRNb3ZlU2V0Ojpjb250YWlucyk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6Okl0ZXJh
dGVkUmVnaXN0ZXJDb2FsZXNjaW5nQWxsb2NhdG9yOjpPcmRlcmVkTW92ZVNldDo6dGFrZU1vdmUp
OgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpJdGVyYXRlZFJlZ2lzdGVyQ29hbGVzY2luZ0FsbG9j
YXRvcjo6T3JkZXJlZE1vdmVTZXQ6OnRha2VMYXN0TW92ZSk6CisgICAgICAgIChKU0M6OkIzOjpB
aXI6Okl0ZXJhdGVkUmVnaXN0ZXJDb2FsZXNjaW5nQWxsb2NhdG9yOjpPcmRlcmVkTW92ZVNldDo6
cmV0dXJuTW92ZSk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6Okl0ZXJhdGVkUmVnaXN0ZXJDb2Fs
ZXNjaW5nQWxsb2NhdG9yOjpPcmRlcmVkTW92ZVNldDo6Y2xlYXIpOgorICAgICAgICAoSlNDOjpC
Mzo6QWlyOjpJdGVyYXRlZFJlZ2lzdGVyQ29hbGVzY2luZ0FsbG9jYXRvcjo6YXNzaWduQ29sb3Jz
KTogRGVsZXRlZC4KKwogMjAxNS0xMS0xMyAgU2FhbSBiYXJhdGkgIDxzYmFyYXRpQGFwcGxlLmNv
bT4KIAogICAgICAgICBzdWIgSUMgZG9lcyBub3QgcHJvcGVybHkgaGFuZGxlIGV4Y2VwdGlvbiBo
YW5kbGluZyBub3cgdGhhdCB0cnkvY2F0Y2ggaXMgY29tcGlsZWQgaW4gdGhlIEZUTApkaWZmIC0t
Z2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJJdGVyYXRlZFJlZ2lzdGVyQ29h
bGVzY2luZy5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0Fpckl0ZXJhdGVkUmVn
aXN0ZXJDb2FsZXNjaW5nLmNwcAppbmRleCAwYjIwNzY3ZjZiZGE2MzViNGM4MDQwNmJiMDMwYmEz
MDBhYzNhODE0Li45N2M4MGUxNGFkZmMwZDNkYzg5YzI2NzZjMDYyYjg0MTY5NmIwZTY0IDEwMDY0
NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0Fpckl0ZXJhdGVkUmVnaXN0ZXJD
b2FsZXNjaW5nLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0Fpckl0ZXJh
dGVkUmVnaXN0ZXJDb2FsZXNjaW5nLmNwcApAQCAtMTYxLDEyICsxNjEsNiBAQCBwdWJsaWM6CiAg
ICAgICAgIH0pOwogCiAgICAgICAgIGlmIChNb3ZlSW5zdEhlbHBlcjx0eXBlPjo6bWF5QmVDb2Fs
ZXNjYWJsZShpbnN0KSkgewotICAgICAgICAgICAgZm9yIChjb25zdCBBcmcmIGFyZyA6IGluc3Qu
YXJncykgewotICAgICAgICAgICAgICAgIEhhc2hTZXQ8SW5zdCo+JiBsaXN0ID0gbV9tb3ZlTGlz
dFtBYnNvbHV0ZVRtcEhlbHBlcjx0eXBlPjo6YWJzb2x1dGVJbmRleChhcmcudG1wKCkpXTsKLSAg
ICAgICAgICAgICAgICBsaXN0LmFkZCgmaW5zdCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAg
ICBtX3dvcmtsaXN0TW92ZXMuYWRkKCZpbnN0KTsKLQogICAgICAgICAgICAgLy8gV2UgZG8gbm90
IHdhbnQgdGhlIFVzZSgpIG9mIHRoaXMgbW92ZSB0byBpbnRlcmZlcmUgd2l0aCB0aGUgRGVmKCks
IGV2ZW4gaWYgaXQgaXMgbGl2ZQogICAgICAgICAgICAgLy8gYWZ0ZXIgdGhlIE1vdmUuIElmIHdl
IHdlcmUgdG8gYWRkIHRoZSBpbnRlcmZlcmVuY2UgZWRnZSwgaXQgd291bGQgYmUgaW1wb3NzaWJs
ZSB0bwogICAgICAgICAgICAgLy8gY29hbGVzY2UgdGhlIE1vdmUgZXZlbiBpZiB0aGUgdHdvIFRt
cCBuZXZlciBpbnRlcmZlcmUgYW55d2hlcmUuCkBAIC0xODMsNiArMTc3LDIwIEBAIHB1YmxpYzoK
ICAgICAgICAgICAgIEFTU0VSVChkZWZUbXApOwogICAgICAgICAgICAgQVNTRVJUKHVzZVRtcCk7
CiAKKyAgICAgICAgICAgIHVuc2lnbmVkIG5leHRNb3ZlSW5kZXggPSBtX2NvYWxlc2NpbmdDYW5k
aWRhdGVzLnNpemUoKTsKKyAgICAgICAgICAgIG1fY29hbGVzY2luZ0NhbmRpZGF0ZXMuYXBwZW5k
KHsgdXNlVG1wLCBkZWZUbXAgfSk7CisKKyAgICAgICAgICAgIHVuc2lnbmVkIG5ld0luZGV4SW5X
b3JrbGlzdCA9IG1fd29ya2xpc3RNb3Zlcy5hZGRNb3ZlKCk7CisgICAgICAgICAgICBBU1NFUlRf
VU5VU0VEKG5ld0luZGV4SW5Xb3JrbGlzdCwgbmV3SW5kZXhJbldvcmtsaXN0ID09IG5leHRNb3Zl
SW5kZXgpOworCisgICAgICAgICAgICBBU1NFUlQobmV4dE1vdmVJbmRleCA8PSBtX2FjdGl2ZU1v
dmVzLnNpemUoKSk7CisgICAgICAgICAgICBtX2FjdGl2ZU1vdmVzLmVuc3VyZVNpemUobmV4dE1v
dmVJbmRleCArIDEpOworCisgICAgICAgICAgICBmb3IgKGNvbnN0IEFyZyYgYXJnIDogaW5zdC5h
cmdzKSB7CisgICAgICAgICAgICAgICAgYXV0byYgbGlzdCA9IG1fbW92ZUxpc3RbQWJzb2x1dGVU
bXBIZWxwZXI8dHlwZT46OmFic29sdXRlSW5kZXgoYXJnLnRtcCgpKV07CisgICAgICAgICAgICAg
ICAgbGlzdC5hZGQobmV4dE1vdmVJbmRleCk7CisgICAgICAgICAgICB9CisKICAgICAgICAgICAg
IGZvciAoY29uc3QgVG1wJiBsaXZlVG1wIDogbG9jYWxDYWxjLmxpdmUoKSkgewogICAgICAgICAg
ICAgICAgIGlmIChsaXZlVG1wICE9IHVzZVRtcCAmJiBsaXZlVG1wLmlzR1AoKSA9PSAodHlwZSA9
PSBBcmc6OkdQKSkKICAgICAgICAgICAgICAgICAgICAgYWRkRWRnZShkZWZUbXAsIGxpdmVUbXAp
OwpAQCAtMTkzLDYgKzIwMSw4IEBAIHB1YmxpYzoKIAogICAgIHZvaWQgYWxsb2NhdGUoKQogICAg
IHsKKyAgICAgICAgQVNTRVJUX1dJVEhfTUVTU0FHRShtX2FjdGl2ZU1vdmVzLnNpemUoKSA+PSBt
X2NvYWxlc2NpbmdDYW5kaWRhdGVzLnNpemUoKSwgIlRoZSBhY3RpdmVNb3ZlIHNldCBzaG91bGQg
YmUgYmlnIGVub3VnaCBmb3IgdGhlIHF1aWNrIG9wZXJhdGlvbnMgb2YgQml0VmVjdG9yLiIpOwor
CiAgICAgICAgIG1ha2VXb3JrTGlzdCgpOwogCiAgICAgICAgIGlmIChkZWJ1ZykgewpAQCAtMzY3
LDE2ICszNzcsMTYgQEAgcHJpdmF0ZToKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jdGlvbj4K
ICAgICB2b2lkIGZvckVhY2hOb2RlTW92ZXMoVG1wIHRtcCwgRnVuY3Rpb24gZnVuY3Rpb24pCiAg
ICAgewotICAgICAgICBmb3IgKEluc3QqIGluc3QgOiBtX21vdmVMaXN0W0Fic29sdXRlVG1wSGVs
cGVyPHR5cGU+OjphYnNvbHV0ZUluZGV4KHRtcCldKSB7Ci0gICAgICAgICAgICBpZiAobV9hY3Rp
dmVNb3Zlcy5jb250YWlucyhpbnN0KSB8fCBtX3dvcmtsaXN0TW92ZXMuY29udGFpbnMoaW5zdCkp
Ci0gICAgICAgICAgICAgICAgZnVuY3Rpb24oKmluc3QpOworICAgICAgICBmb3IgKHVuc2lnbmVk
IG1vdmVJbmRleCA6IG1fbW92ZUxpc3RbQWJzb2x1dGVUbXBIZWxwZXI8dHlwZT46OmFic29sdXRl
SW5kZXgodG1wKV0pIHsKKyAgICAgICAgICAgIGlmIChtX2FjdGl2ZU1vdmVzLnF1aWNrR2V0KG1v
dmVJbmRleCkgfHwgbV93b3JrbGlzdE1vdmVzLmNvbnRhaW5zKG1vdmVJbmRleCkpCisgICAgICAg
ICAgICAgICAgZnVuY3Rpb24obW92ZUluZGV4KTsKICAgICAgICAgfQogICAgIH0KIAogICAgIGJv
b2wgaXNNb3ZlUmVsYXRlZChUbXAgdG1wKQogICAgIHsKLSAgICAgICAgZm9yIChJbnN0KiBpbnN0
IDogbV9tb3ZlTGlzdFtBYnNvbHV0ZVRtcEhlbHBlcjx0eXBlPjo6YWJzb2x1dGVJbmRleCh0bXAp
XSkgewotICAgICAgICAgICAgaWYgKG1fYWN0aXZlTW92ZXMuY29udGFpbnMoaW5zdCkgfHwgbV93
b3JrbGlzdE1vdmVzLmNvbnRhaW5zKGluc3QpKQorICAgICAgICBmb3IgKHVuc2lnbmVkIG1vdmVJ
bmRleCA6IG1fbW92ZUxpc3RbQWJzb2x1dGVUbXBIZWxwZXI8dHlwZT46OmFic29sdXRlSW5kZXgo
dG1wKV0pIHsKKyAgICAgICAgICAgIGlmIChtX2FjdGl2ZU1vdmVzLnF1aWNrR2V0KG1vdmVJbmRl
eCkgfHwgbV93b3JrbGlzdE1vdmVzLmNvbnRhaW5zKG1vdmVJbmRleCkpCiAgICAgICAgICAgICAg
ICAgcmV0dXJuIHRydWU7CiAgICAgICAgIH0KICAgICAgICAgcmV0dXJuIGZhbHNlOwpAQCAtMzg0
LDkgKzM5NCw5IEBAIHByaXZhdGU6CiAKICAgICB2b2lkIGVuYWJsZU1vdmVzT25WYWx1ZShUbXAg
dG1wKQogICAgIHsKLSAgICAgICAgZm9yIChJbnN0KiBpbnN0IDogbV9tb3ZlTGlzdFtBYnNvbHV0
ZVRtcEhlbHBlcjx0eXBlPjo6YWJzb2x1dGVJbmRleCh0bXApXSkgewotICAgICAgICAgICAgaWYg
KG1fYWN0aXZlTW92ZXMucmVtb3ZlKGluc3QpKQotICAgICAgICAgICAgICAgIG1fd29ya2xpc3RN
b3Zlcy5hZGQoaW5zdCk7CisgICAgICAgIGZvciAodW5zaWduZWQgbW92ZUluZGV4IDogbV9tb3Zl
TGlzdFtBYnNvbHV0ZVRtcEhlbHBlcjx0eXBlPjo6YWJzb2x1dGVJbmRleCh0bXApXSkgeworICAg
ICAgICAgICAgaWYgKG1fYWN0aXZlTW92ZXMucXVpY2tDbGVhcihtb3ZlSW5kZXgpKQorICAgICAg
ICAgICAgICAgIG1fd29ya2xpc3RNb3Zlcy5yZXR1cm5Nb3ZlKG1vdmVJbmRleCk7CiAgICAgICAg
IH0KICAgICB9CiAKQEAgLTQwMSwxOSArNDExLDE4IEBAIHByaXZhdGU6CiAKICAgICB2b2lkIGNv
YWxlc2NlKCkKICAgICB7Ci0gICAgICAgIEluc3QqIG1vdmVJbnN0ID0gbV93b3JrbGlzdE1vdmVz
LnRha2VMYXN0KCk7Ci0gICAgICAgIEFTU0VSVChtb3ZlSW5zdC0+YXJncy5zaXplKCkgPT0gMik7
Ci0KLSAgICAgICAgVG1wIHUgPSBtb3ZlSW5zdC0+YXJnc1swXS50bXAoKTsKKyAgICAgICAgdW5z
aWduZWQgbW92ZUluZGV4ID0gbV93b3JrbGlzdE1vdmVzLnRha2VMYXN0TW92ZSgpOworICAgICAg
ICBjb25zdCBNb3ZlT3BlcmFuZHMmIG1vdmVPcGVyYW5kcyA9IG1fY29hbGVzY2luZ0NhbmRpZGF0
ZXNbbW92ZUluZGV4XTsKKyAgICAgICAgVG1wIHUgPSBtb3ZlT3BlcmFuZHMuc3JjOwogICAgICAg
ICB1ID0gZ2V0QWxpYXModSk7Ci0gICAgICAgIFRtcCB2ID0gbW92ZUluc3QtPmFyZ3NbMV0udG1w
KCk7CisgICAgICAgIFRtcCB2ID0gbW92ZU9wZXJhbmRzLmRzdDsKICAgICAgICAgdiA9IGdldEFs
aWFzKHYpOwogCiAgICAgICAgIGlmICh2LmlzUmVnKCkpCiAgICAgICAgICAgICBzdGQ6OnN3YXAo
dSwgdik7CiAKICAgICAgICAgaWYgKHRyYWNlRGVidWcpCi0gICAgICAgICAgICBkYXRhTG9nKCJD
b2FsZXNjaW5nICIsICptb3ZlSW5zdCwgIiB1ID0gIiwgdSwgIiB2ID0gIiwgdiwgIlxuIik7Cisg
ICAgICAgICAgICBkYXRhTG9nKCJDb2FsZXNjaW5nIG1vdmUgYXQgaW5kZXgiLCBtb3ZlSW5kZXgs
ICIgdSA9ICIsIHUsICIgdiA9ICIsIHYsICJcbiIpOwogCiAgICAgICAgIGlmICh1ID09IHYpIHsK
ICAgICAgICAgICAgIGFkZFdvcmtMaXN0KHUpOwpAQCAtNDMzLDcgKzQ0Miw3IEBAIHByaXZhdGU6
CiAgICAgICAgICAgICBpZiAodHJhY2VEZWJ1ZykKICAgICAgICAgICAgICAgICBkYXRhTG9nKCIg
ICAgU2FmZSBDb2FsZXNjaW5nXG4iKTsKICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIG1f
YWN0aXZlTW92ZXMuYWRkKG1vdmVJbnN0KTsKKyAgICAgICAgICAgIG1fYWN0aXZlTW92ZXMucXVp
Y2tTZXQobW92ZUluZGV4KTsKIAogICAgICAgICAgICAgaWYgKHRyYWNlRGVidWcpCiAgICAgICAg
ICAgICAgICAgZGF0YUxvZygiICAgIEZhaWxlZCBjb2FsZXNjaW5nLCBhZGRlZCB0byBhY3RpdmUg
bW92ZXMuXG4iKTsKQEAgLTUyNyw3ICs1MzYsNyBAQCBwcml2YXRlOgogICAgICAgICBBU1NFUlQo
IW1fY29hbGVzY2VkVG1wc1tBYnNvbHV0ZVRtcEhlbHBlcjx0eXBlPjo6YWJzb2x1dGVJbmRleCh2
KV0pOwogICAgICAgICBtX2NvYWxlc2NlZFRtcHNbQWJzb2x1dGVUbXBIZWxwZXI8dHlwZT46OmFi
c29sdXRlSW5kZXgodildID0gdTsKIAotICAgICAgICBIYXNoU2V0PEluc3QqPiYgdk1vdmVzID0g
bV9tb3ZlTGlzdFtBYnNvbHV0ZVRtcEhlbHBlcjx0eXBlPjo6YWJzb2x1dGVJbmRleCh2KV07Cisg
ICAgICAgIGF1dG8mIHZNb3ZlcyA9IG1fbW92ZUxpc3RbQWJzb2x1dGVUbXBIZWxwZXI8dHlwZT46
OmFic29sdXRlSW5kZXgodildOwogICAgICAgICBtX21vdmVMaXN0W0Fic29sdXRlVG1wSGVscGVy
PHR5cGU+OjphYnNvbHV0ZUluZGV4KHUpXS5hZGQodk1vdmVzLmJlZ2luKCksIHZNb3Zlcy5lbmQo
KSk7CiAKICAgICAgICAgZm9yRWFjaEFkamFjZW50KHYsIFt0aGlzLCB1XSAoVG1wIGFkamFjZW50
VG1wKSB7CkBAIC01NDgsMTEgKzU1NywxMiBAQCBwcml2YXRlOgogCiAgICAgdm9pZCBmcmVlemVN
b3ZlcyhUbXAgdG1wKQogICAgIHsKLSAgICAgICAgZm9yRWFjaE5vZGVNb3Zlcyh0bXAsIFt0aGlz
LCB0bXBdIChJbnN0JiBpbnN0KSB7Ci0gICAgICAgICAgICBpZiAoIW1fYWN0aXZlTW92ZXMucmVt
b3ZlKCZpbnN0KSkKLSAgICAgICAgICAgICAgICBtX3dvcmtsaXN0TW92ZXMucmVtb3ZlKCZpbnN0
KTsKKyAgICAgICAgZm9yRWFjaE5vZGVNb3Zlcyh0bXAsIFt0aGlzLCB0bXBdICh1bnNpZ25lZCBt
b3ZlSW5kZXgpIHsKKyAgICAgICAgICAgIGlmICghbV9hY3RpdmVNb3Zlcy5xdWlja0NsZWFyKG1v
dmVJbmRleCkpCisgICAgICAgICAgICAgICAgbV93b3JrbGlzdE1vdmVzLnRha2VNb3ZlKG1vdmVJ
bmRleCk7CiAKLSAgICAgICAgICAgIFRtcCBvdGhlclRtcCA9IGluc3QuYXJnc1swXS50bXAoKSAh
PSB0bXAgPyBpbnN0LmFyZ3NbMF0udG1wKCkgOiBpbnN0LmFyZ3NbMV0udG1wKCk7CisgICAgICAg
ICAgICBjb25zdCBNb3ZlT3BlcmFuZHMmIG1vdmVPcGVyYW5kcyA9IG1fY29hbGVzY2luZ0NhbmRp
ZGF0ZXNbbW92ZUluZGV4XTsKKyAgICAgICAgICAgIFRtcCBvdGhlclRtcCA9IG1vdmVPcGVyYW5k
cy5zcmMgIT0gdG1wID8gbW92ZU9wZXJhbmRzLnNyYyA6IG1vdmVPcGVyYW5kcy5kc3Q7CiAgICAg
ICAgICAgICBpZiAobV9kZWdyZWVzW0Fic29sdXRlVG1wSGVscGVyPHR5cGU+OjphYnNvbHV0ZUlu
ZGV4KG90aGVyVG1wKV0gPCBtX251bWJlck9mUmVnaXN0ZXJzICYmICFpc01vdmVSZWxhdGVkKG90
aGVyVG1wKSkgewogICAgICAgICAgICAgICAgIG1fZnJlZXplV29ya2xpc3QucmVtb3ZlKG90aGVy
VG1wKTsKICAgICAgICAgICAgICAgICBtX3NpbXBsaWZ5V29ya2xpc3QuYXBwZW5kKG90aGVyVG1w
KTsKQEAgLTU5Nyw3ICs2MDcsNiBAQCBwcml2YXRlOgogICAgICAgICBtX2RlZ3JlZXMuY2xlYXIo
KTsKICAgICAgICAgbV9tb3ZlTGlzdC5jbGVhcigpOwogICAgICAgICBtX3dvcmtsaXN0TW92ZXMu
Y2xlYXIoKTsKLSAgICAgICAgbV9hY3RpdmVNb3Zlcy5jbGVhcigpOwogICAgICAgICBtX3NpbXBs
aWZ5V29ya2xpc3QuY2xlYXIoKTsKICAgICAgICAgbV9zcGlsbFdvcmtsaXN0LmNsZWFyKCk7CiAg
ICAgICAgIG1fZnJlZXplV29ya2xpc3QuY2xlYXIoKTsKQEAgLTY2Nyw5ICs2NzYsNyBAQCBwcml2
YXRlOgogICAgICAgICBvdXQucHJpbnQoIlNpbXBsaWZ5IHdvcmsgbGlzdDpcbiIpOwogICAgICAg
ICBmb3IgKFRtcCB0bXAgOiBtX3NpbXBsaWZ5V29ya2xpc3QpCiAgICAgICAgICAgICBvdXQucHJp
bnQoIiAgICAiLCB0bXAsICJcbiIpOwotICAgICAgICBvdXQucHJpbnQoIk1vdmVzIHdvcmsgbGlz
dDpcbiIpOwotICAgICAgICBmb3IgKEluc3QqIGluc3QgOiBtX3dvcmtsaXN0TW92ZXMpCi0gICAg
ICAgICAgICBvdXQucHJpbnQoIiAgICAiLCAqaW5zdCwgIlxuIik7CisgICAgICAgIG91dC5wcmlu
dGYoIk1vdmVzIHdvcmsgbGlzdCBpcyBlbXB0eT8gJWRcbiIsIG1fd29ya2xpc3RNb3Zlcy5pc0Vt
cHR5KCkpOwogICAgICAgICBvdXQucHJpbnQoIkZyZWV6ZSB3b3JrIGxpc3Q6XG4iKTsKICAgICAg
ICAgZm9yIChUbXAgdG1wIDogbV9mcmVlemVXb3JrbGlzdCkKICAgICAgICAgICAgIG91dC5wcmlu
dCgiICAgICIsIHRtcCwgIlxuIik7CkBAIC03NDksOCArNzU2LDE2IEBAIHByaXZhdGU6CiAgICAg
VmVjdG9yPFZlY3RvcjxUbXAsIDAsIFVuc2FmZVZlY3Rvck92ZXJmbG93LCA0PiwgMCwgVW5zYWZl
VmVjdG9yT3ZlcmZsb3c+IG1fYWRqYWNlbmN5TGlzdDsKICAgICBWZWN0b3I8dW5zaWduZWQsIDAs
IFVuc2FmZVZlY3Rvck92ZXJmbG93PiBtX2RlZ3JlZXM7CiAKKyAgICAvLyBJbnN0ZWFkIG9mIGtl
ZXBpbmcgdHJhY2sgb2YgdGhlIG1vdmUgaW5zdHJ1Y3Rpb25zLCB3ZSBqdXN0IGtlZXAgdGhlaXIg
b3BlcmFuZHMgYXJvdW5kIGFuZCB1c2UgdGhlIGluZGV4CisgICAgLy8gaW4gdGhlIHZlY3RvciBo
YXMgdGhlICJpZGVudGlmaWVyIiBmb3IgdGhlIG1vdmUuCisgICAgc3RydWN0IE1vdmVPcGVyYW5k
cyB7CisgICAgICAgIFRtcCBzcmM7CisgICAgICAgIFRtcCBkc3Q7CisgICAgfTsKKyAgICBWZWN0
b3I8TW92ZU9wZXJhbmRzLCAwLCBVbnNhZmVWZWN0b3JPdmVyZmxvdz4gbV9jb2FsZXNjaW5nQ2Fu
ZGlkYXRlczsKKwogICAgIC8vIExpc3Qgb2YgZXZlcnkgbW92ZSBpbnN0cnVjdGlvbiBhc3NvY2lh
dGVkIHdpdGggYSBUbXAuCi0gICAgVmVjdG9yPEhhc2hTZXQ8SW5zdCo+PiBtX21vdmVMaXN0Owor
ICAgIFZlY3RvcjxIYXNoU2V0PHVuc2lnbmVkLCBEZWZhdWx0SGFzaDx1bnNpZ25lZD46Okhhc2gs
IFdURjo6VW5zaWduZWRXaXRoWmVyb0tleUhhc2hUcmFpdHM8dW5zaWduZWQ+Pj4gbV9tb3ZlTGlz
dDsKIAogICAgIC8vIENvbG9ycy4KICAgICBWZWN0b3I8UmVnLCAwLCBVbnNhZmVWZWN0b3JPdmVy
Zmxvdz4gbV9jb2xvcmVkVG1wOwpAQCAtNzYzLDExICs3NzgsODQgQEAgcHJpdmF0ZToKICAgICBC
aXRWZWN0b3IgbV9pc09uU2VsZWN0U3RhY2s7CiAgICAgVmVjdG9yPFRtcD4gbV9zZWxlY3RTdGFj
azsKIAorICAgIHN0cnVjdCBPcmRlcmVkTW92ZVNldCB7CisgICAgICAgIHVuc2lnbmVkIGFkZE1v
dmUoKQorICAgICAgICB7CisgICAgICAgICAgICB1bnNpZ25lZCBuZXh0SW5kZXggPSBtX21vdmVM
aXN0LnNpemUoKTsKKyAgICAgICAgICAgIG1fbW92ZUxpc3QuYXBwZW5kKG5leHRJbmRleCk7Cisg
ICAgICAgICAgICBtX3Bvc2l0aW9uSW5Nb3ZlTGlzdC5hcHBlbmQobmV4dEluZGV4KTsKKyAgICAg
ICAgICAgIHJldHVybiBuZXh0SW5kZXg7CisgICAgICAgIH0KKworICAgICAgICBib29sIGlzRW1w
dHkoKSBjb25zdAorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gbV9tb3ZlTGlzdC5pc0Vt
cHR5KCk7CisgICAgICAgIH0KKworICAgICAgICBib29sIGNvbnRhaW5zKHVuc2lnbmVkIGluZGV4
KQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gbV9wb3NpdGlvbkluTW92ZUxpc3RbaW5k
ZXhdICE9IHN0ZDo6bnVtZXJpY19saW1pdHM8dW5zaWduZWQ+OjptYXgoKTsKKyAgICAgICAgfQor
CisgICAgICAgIHZvaWQgdGFrZU1vdmUodW5zaWduZWQgbW92ZUluZGV4KQorICAgICAgICB7Cisg
ICAgICAgICAgICB1bnNpZ25lZCBwb3NpdGlvbkluTW92ZUxpc3QgPSBtX3Bvc2l0aW9uSW5Nb3Zl
TGlzdFttb3ZlSW5kZXhdOworICAgICAgICAgICAgaWYgKHBvc2l0aW9uSW5Nb3ZlTGlzdCA9PSBz
dGQ6Om51bWVyaWNfbGltaXRzPHVuc2lnbmVkPjo6bWF4KCkpCisgICAgICAgICAgICAgICAgcmV0
dXJuOworCisgICAgICAgICAgICBBU1NFUlQobV9tb3ZlTGlzdFtwb3NpdGlvbkluTW92ZUxpc3Rd
ID09IG1vdmVJbmRleCk7CisgICAgICAgICAgICB1bnNpZ25lZCBsYXN0SW5kZXggPSBtX21vdmVM
aXN0Lmxhc3QoKTsKKyAgICAgICAgICAgIG1fcG9zaXRpb25Jbk1vdmVMaXN0W2xhc3RJbmRleF0g
PSBwb3NpdGlvbkluTW92ZUxpc3Q7CisgICAgICAgICAgICBtX21vdmVMaXN0W3Bvc2l0aW9uSW5N
b3ZlTGlzdF0gPSBsYXN0SW5kZXg7CisgICAgICAgICAgICBtX21vdmVMaXN0LnJlbW92ZUxhc3Qo
KTsKKworICAgICAgICAgICAgbV9wb3NpdGlvbkluTW92ZUxpc3RbbW92ZUluZGV4XSA9IHN0ZDo6
bnVtZXJpY19saW1pdHM8dW5zaWduZWQ+OjptYXgoKTsKKworICAgICAgICAgICAgQVNTRVJUKCFj
b250YWlucyhtb3ZlSW5kZXgpKTsKKyAgICAgICAgfQorCisgICAgICAgIHVuc2lnbmVkIHRha2VM
YXN0TW92ZSgpCisgICAgICAgIHsKKyAgICAgICAgICAgIEFTU0VSVCghaXNFbXB0eSgpKTsKKwor
ICAgICAgICAgICAgdW5zaWduZWQgbGFzdEluZGV4ID0gbV9tb3ZlTGlzdC50YWtlTGFzdCgpOwor
ICAgICAgICAgICAgQVNTRVJUKG1fcG9zaXRpb25Jbk1vdmVMaXN0W2xhc3RJbmRleF0gPT0gbV9t
b3ZlTGlzdC5zaXplKCkpOworICAgICAgICAgICAgbV9wb3NpdGlvbkluTW92ZUxpc3RbbGFzdElu
ZGV4XSA9IHN0ZDo6bnVtZXJpY19saW1pdHM8dW5zaWduZWQ+OjptYXgoKTsKKworICAgICAgICAg
ICAgQVNTRVJUKCFjb250YWlucyhsYXN0SW5kZXgpKTsKKyAgICAgICAgICAgIHJldHVybiBsYXN0
SW5kZXg7CisgICAgICAgIH0KKworICAgICAgICB2b2lkIHJldHVybk1vdmUodW5zaWduZWQgaW5k
ZXgpCisgICAgICAgIHsKKyAgICAgICAgICAgIC8vIFRoaXMgYXNzZXJ0aW9uIGlzIGEgYml0IHN0
cmljdCBidXQgdGhhdCBob3cgdGhlIG1vdmUgbGlzdCBzaG91bGQgYmUgdXNlZC4gVGhlIG9ubHkg
a2luZCBvZiBtb3ZlcyB0aGF0IGNhbgorICAgICAgICAgICAgLy8gcmV0dXJuIHRvIHRoZSBsaXN0
IGFyZSB0aGUgb25lIHRoYXQgd2UgcHJldmlvdXMgZmFpbGVkIHRvIGNvYWxlc2NlZCB3aXRoIHRo
ZSBjb25zZXJ2YXRpdmUgaGV1cmlzdGljcy4KKyAgICAgICAgICAgIC8vIFZhbHVlcyBzaG91bGQg
bm90IGJlIGFkZGVkIGJhY2sgaWYgdGhleSB3ZXJlIG5ldmVyIHRha2VuIG91dCB3aGVuIGF0dGVt
cHRpbmcgY29hbGVzY2luZy4KKyAgICAgICAgICAgIEFTU0VSVCghY29udGFpbnMoaW5kZXgpKTsK
KworICAgICAgICAgICAgdW5zaWduZWQgcG9zaXRpb24gPSBtX21vdmVMaXN0LnNpemUoKTsKKyAg
ICAgICAgICAgIG1fbW92ZUxpc3QuYXBwZW5kKGluZGV4KTsKKyAgICAgICAgICAgIG1fcG9zaXRp
b25Jbk1vdmVMaXN0W2luZGV4XSA9IHBvc2l0aW9uOworCisgICAgICAgICAgICBBU1NFUlQoY29u
dGFpbnMoaW5kZXgpKTsKKyAgICAgICAgfQorCisgICAgICAgIHZvaWQgY2xlYXIoKQorICAgICAg
ICB7CisgICAgICAgICAgICBtX3Bvc2l0aW9uSW5Nb3ZlTGlzdC5jbGVhcigpOworICAgICAgICAg
ICAgbV9tb3ZlTGlzdC5jbGVhcigpOworICAgICAgICB9CisKKyAgICBwcml2YXRlOgorICAgICAg
ICBWZWN0b3I8dW5zaWduZWQsIDAsIFVuc2FmZVZlY3Rvck92ZXJmbG93PiBtX3Bvc2l0aW9uSW5N
b3ZlTGlzdDsKKyAgICAgICAgVmVjdG9yPHVuc2lnbmVkLCAwLCBVbnNhZmVWZWN0b3JPdmVyZmxv
dz4gbV9tb3ZlTGlzdDsKKyAgICB9OworCiAgICAgLy8gV29yayBsaXN0cy4KICAgICAvLyBTZXQg
b2YgIm1vdmUiIGVuYWJsZWQgZm9yIHBvc3NpYmxlIGNvYWxlc2NpbmcuCi0gICAgTGlzdEhhc2hT
ZXQ8SW5zdCo+IG1fd29ya2xpc3RNb3ZlczsKKyAgICBPcmRlcmVkTW92ZVNldCBtX3dvcmtsaXN0
TW92ZXM7CiAgICAgLy8gU2V0IG9mICJtb3ZlIiBub3QgeWV0IHJlYWR5IGZvciBjb2FsZXNjaW5n
LgotICAgIEhhc2hTZXQ8SW5zdCo+IG1fYWN0aXZlTW92ZXM7CisgICAgQml0VmVjdG9yIG1fYWN0
aXZlTW92ZXM7CiAgICAgLy8gTG93LWRlZ3JlZSwgbm9uLU1vdmUgcmVsYXRlZC4KICAgICBWZWN0
b3I8VG1wPiBtX3NpbXBsaWZ5V29ya2xpc3Q7CiAgICAgLy8gSGlnaC1kZWdyZWUgVG1wLgo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>265611</attachid>
            <date>2015-11-16 13:53:16 -0800</date>
            <delta_ts>2015-11-16 15:47:09 -0800</delta_ts>
            <desc>Patch for landing</desc>
            <filename>bug-151290-20151116135307.patch</filename>
            <type>text/plain</type>
            <size>14526</size>
            <attacher name="Benjamin Poulain">benjamin</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTkyNDgxCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCBm
OWJhNDlhZmM3ZGU5MTI4ZTg1OTA4YjM4YmIwZjdlYmY1YzJiY2IyLi5kMmU0NTVkZTgwMzQ5NzVl
YTJiM2JlMGM4MmY0YTNjYWMyYWU3ZWE4IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSw1NyBAQAorMjAxNS0xMS0xNiAgQmVuamFtaW4gUG91bGFpbiAgPGJwb3VsYWluQGFwcGxl
LmNvbT4KKworICAgICAgICBbSlNDXSBTcGVlZCB1cCB0aGUgY29hbGVzY2luZy1yZWxhdGVkIG9w
ZXJhdGlvbiBvZiB0aGUgaXRlcmF0ZWQgcmVnaXN0ZXIgYWxsb2NhdG9yCisgICAgICAgIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNTEyOTAKKworICAgICAgICBSZXZp
ZXdlZCBieSBHZW9mZnJleSBHYXJlbi4KKworICAgICAgICBPbmUgc3RlcCBjbG9zZXIgdG8gcmVt
b3ZpbmcgdGhlIEhhc2ggc3RydWN0dXJlczoKKworICAgICAgICBGb3IgdGhlIGNvYWxlc2Npbmcg
b3BlcmF0aW9uLCB3ZSBuZWVkIHRvIGtlZXAgdHJhY2sgb2YgTW92ZSBpbnN0cnVjdGlvbnMuIFdl
IGRvIG5vdCBzdHJpY3RseQorICAgICAgICBuZWVkIHRob3NlIHRvIGJlIHRoZSBBaXIgTW92ZSwg
anVzdCBhbnkgYWJzdHJhY3Qgb3BlcmF0aW9uIHRoYXQgY29weSBhIFRtcCBpbnRvIGFub3RoZXIg
VG1wLgorCisgICAgICAgIEluIHRoaXMgcGF0Y2gsIEkgZXhwbG9pdCB0aGF0IHRvIHJlbW92ZSB0
aGUgSGFzaCBzdHJ1Y3R1cmUgcmVsYXRlZCB0byB0aGUgSW5zdC4gSW5zdGVhZCBvZgorICAgICAg
ICB1c2luZyB0aGUgTW92ZSBJbnN0LCB3ZSBqdXN0IGtlZXAgdHJhY2sgb2YgdGhlIFVzZSgpIGFu
ZCBEZWYoKSBvZiB0aGUgaW5zdHJ1Y3Rpb25zLgorICAgICAgICBUaG9zZSBhcmUgYWRkZWQgaW4g
dGhlIGdsb2JhbCBsaXN0IG1fY29hbGVzY2luZ0NhbmRpZGF0ZXMgYW5kIHRoZSBpbmRleCBpbiB0
aGF0IGxpc3QgcmVwcmVzZW50CisgICAgICAgIHRoZSBtb3ZlIGZvciB0aGUgcmVtYWluaW5nIG9m
IHRoZSBhbGdvcml0aG0uCisKKyAgICAgICAgV2l0aCBNb3ZlcyB0cmFuc2Zvcm1lZCBpbnRvIGRl
bnNlIGluZGljZXMsIHdlIGNhbiBzdGFydCB1c2luZyBhcnJheXMgdG8gbWFrZSBmYXN0IHNldHMu
CisKKyAgICAgICAgVGhlIG1fYWN0aXZlTW92ZXMgU2V0IGlzIGVhc3kgc2luY2Ugd2Ugb25seSBu
ZWVkIHNpbXBsZSBhZGQvcmVtb3ZlL2NvbnRhaW5zLiBJdCBpcyB0cmFuc2Zvcm1lZAorICAgICAg
ICBpbnRvIGEgQml0VmVjdG9yLgorICAgICAgICBUaGUgYml0IHZlY3RvciBpcyBhbHdheXMgZnVs
bHkgYWxsb2NhdGVkIHRvIGFsbG93IGZvciBxdWljayB1bmlmb3JtIGFjY2Vzcy4gVGhlIGFzc3Vt
dGlvbiBpcyB0aGF0CisgICAgICAgIGFjdGl2ZU1vdmVzIHdpbGwgY29udGFpbnMgYSBmZXcgdmFs
dWVzIGZvciBub24gdHJpdmlhbCBjYXNlcy4KKworICAgICAgICBUaGUgd29ya2xpc3QgbV93b3Jr
bGlzdE1vdmVzIGlzIG1vcmUgY29tcGxpY2F0ZWQuIEkgd2FudCBpdCB0byBiZSBvcmRlcmVkIHRv
IGNvYWxlc2NlIG1vdmVzIHN0YXJ0aW5nCisgICAgICAgIGF0IHRoZSB0b3Agb2YgYmxvY2tzLiBI
YXZpbmcgYSBmYXN0IHJlbW92ZSgpIG9wZXJhdGlvbiBpcyBhbHNvIHVzZWZ1bCBmb3IgbWFzcyBj
b2FsZXNjaW5nLgorICAgICAgICBJdCBhbHNvIG5lZWRzIFNldCBvcGVyYXRpb25zLCBlc3BlY2lh
bGx5IGEgZmFzdCBjb250YWlucygpLgorCisgICAgICAgIEZvciBtX3dvcmtsaXN0TW92ZXMsIEkg
Y3JlYXRlZCBhIG5ldyBzdHJ1Y3R1cmU6IE9yZGVyZWRNb3ZlU2V0LgorICAgICAgICBJdCBjb250
YWlucyBhIGxpc3Qgb2Ygb3JkZXJlZCB2YWx1ZXMsIGFuZCBhIG1hcCBvZiBlYWNoIHZhbHVlIHRv
IGl0cyBwb3NpdGlvbiBpbiB0aGUgbGlzdC4KKworICAgICAgICBUaGlzIHJlc2VtYmxlcyBCcmln
Z3MnIFNwYXJzZSBTZXQgYnV0IGl0IGlzIG5vdCBleGFjdGx5IHRoZSBzYW1lLiBXaGVuIHJlbW92
aW5nIGEgdmFsdWUsCisgICAgICAgIEkgc2V0IGEgc3BlY2lhbCBtYXJrZXIgaW4gdGhlIG1hcCAo
VUlOVF9NQVgpLiBUaGUgcmVhc29uIGlzIHRoYXQgSSB3YW50IGNvbnRhaW5zKCkgdG8gYmUgZmFz
dAorICAgICAgICBpbnN0ZWFkIG9mIHJlbW92ZSgpLiBUaGUgbWFya2VyIGluIHRoZSBtYXAgYWxs
b3dzIGNvbnRhaW5zKCkgd2l0aCBhIHNpbmdsZSBtZW1vcnkgb3BlcmF0aW9uIGluc3RlYWQgb2Yg
dHdvLgorCisgICAgICAgICogYjMvYWlyL0Fpckl0ZXJhdGVkUmVnaXN0ZXJDb2FsZXNjaW5nLmNw
cDoKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6SXRlcmF0ZWRSZWdpc3RlckNvYWxlc2NpbmdBbGxv
Y2F0b3I6OmJ1aWxkKToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6SXRlcmF0ZWRSZWdpc3RlckNv
YWxlc2NpbmdBbGxvY2F0b3I6OmFsbG9jYXRlKToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6SXRl
cmF0ZWRSZWdpc3RlckNvYWxlc2NpbmdBbGxvY2F0b3I6OmZvckVhY2hOb2RlTW92ZXMpOgorICAg
ICAgICAoSlNDOjpCMzo6QWlyOjpJdGVyYXRlZFJlZ2lzdGVyQ29hbGVzY2luZ0FsbG9jYXRvcjo6
aXNNb3ZlUmVsYXRlZCk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6Okl0ZXJhdGVkUmVnaXN0ZXJD
b2FsZXNjaW5nQWxsb2NhdG9yOjplbmFibGVNb3Zlc09uVmFsdWUpOgorICAgICAgICAoSlNDOjpC
Mzo6QWlyOjpJdGVyYXRlZFJlZ2lzdGVyQ29hbGVzY2luZ0FsbG9jYXRvcjo6Y29hbGVzY2UpOgor
ICAgICAgICAoSlNDOjpCMzo6QWlyOjpJdGVyYXRlZFJlZ2lzdGVyQ29hbGVzY2luZ0FsbG9jYXRv
cjo6Y29tYmluZSk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6Okl0ZXJhdGVkUmVnaXN0ZXJDb2Fs
ZXNjaW5nQWxsb2NhdG9yOjpmcmVlemVNb3Zlcyk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6Okl0
ZXJhdGVkUmVnaXN0ZXJDb2FsZXNjaW5nQWxsb2NhdG9yOjpkdW1wV29ya0xpc3RzKToKKyAgICAg
ICAgKEpTQzo6QjM6OkFpcjo6SXRlcmF0ZWRSZWdpc3RlckNvYWxlc2NpbmdBbGxvY2F0b3I6Ok9y
ZGVyZWRNb3ZlU2V0OjphZGRNb3ZlKToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6SXRlcmF0ZWRS
ZWdpc3RlckNvYWxlc2NpbmdBbGxvY2F0b3I6Ok9yZGVyZWRNb3ZlU2V0Ojppc0VtcHR5KToKKyAg
ICAgICAgKEpTQzo6QjM6OkFpcjo6SXRlcmF0ZWRSZWdpc3RlckNvYWxlc2NpbmdBbGxvY2F0b3I6
Ok9yZGVyZWRNb3ZlU2V0Ojpjb250YWlucyk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6Okl0ZXJh
dGVkUmVnaXN0ZXJDb2FsZXNjaW5nQWxsb2NhdG9yOjpPcmRlcmVkTW92ZVNldDo6dGFrZU1vdmUp
OgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpJdGVyYXRlZFJlZ2lzdGVyQ29hbGVzY2luZ0FsbG9j
YXRvcjo6T3JkZXJlZE1vdmVTZXQ6OnRha2VMYXN0TW92ZSk6CisgICAgICAgIChKU0M6OkIzOjpB
aXI6Okl0ZXJhdGVkUmVnaXN0ZXJDb2FsZXNjaW5nQWxsb2NhdG9yOjpPcmRlcmVkTW92ZVNldDo6
cmV0dXJuTW92ZSk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6Okl0ZXJhdGVkUmVnaXN0ZXJDb2Fs
ZXNjaW5nQWxsb2NhdG9yOjpPcmRlcmVkTW92ZVNldDo6Y2xlYXIpOgorICAgICAgICAoSlNDOjpC
Mzo6QWlyOjpJdGVyYXRlZFJlZ2lzdGVyQ29hbGVzY2luZ0FsbG9jYXRvcjo6YXNzaWduQ29sb3Jz
KTogRGVsZXRlZC4KKwogMjAxNS0xMS0xNiAgRmlsaXAgUGl6bG8gIDxmcGl6bG9AYXBwbGUuY29t
PgogCiAgICAgICAgIE1ha2Ugc3VyZSB0aGF0IHRoZSBhZGRyZXNzIG1hdGNoZXIgY29ycmVjdGx5
IGhhbmRsZXMgU2hsKHgsIDEpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMv
YWlyL0Fpckl0ZXJhdGVkUmVnaXN0ZXJDb2FsZXNjaW5nLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9iMy9haXIvQWlySXRlcmF0ZWRSZWdpc3RlckNvYWxlc2NpbmcuY3BwCmluZGV4IDBiMjA3
NjdmNmJkYTYzNWI0YzgwNDA2YmIwMzBiYTMwMGFjM2E4MTQuLjU1YWEwM2ZjMjVkMDhjMGNkYWJj
YmY5YTNmMjlmZWM1NzU5YjQwYjAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
My9haXIvQWlySXRlcmF0ZWRSZWdpc3RlckNvYWxlc2NpbmcuY3BwCisrKyBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9iMy9haXIvQWlySXRlcmF0ZWRSZWdpc3RlckNvYWxlc2NpbmcuY3BwCkBAIC0x
NjEsMTIgKzE2MSw2IEBAIHB1YmxpYzoKICAgICAgICAgfSk7CiAKICAgICAgICAgaWYgKE1vdmVJ
bnN0SGVscGVyPHR5cGU+OjptYXlCZUNvYWxlc2NhYmxlKGluc3QpKSB7Ci0gICAgICAgICAgICBm
b3IgKGNvbnN0IEFyZyYgYXJnIDogaW5zdC5hcmdzKSB7Ci0gICAgICAgICAgICAgICAgSGFzaFNl
dDxJbnN0Kj4mIGxpc3QgPSBtX21vdmVMaXN0W0Fic29sdXRlVG1wSGVscGVyPHR5cGU+OjphYnNv
bHV0ZUluZGV4KGFyZy50bXAoKSldOwotICAgICAgICAgICAgICAgIGxpc3QuYWRkKCZpbnN0KTsK
LSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIG1fd29ya2xpc3RNb3Zlcy5hZGQoJmluc3QpOwot
CiAgICAgICAgICAgICAvLyBXZSBkbyBub3Qgd2FudCB0aGUgVXNlKCkgb2YgdGhpcyBtb3ZlIHRv
IGludGVyZmVyZSB3aXRoIHRoZSBEZWYoKSwgZXZlbiBpZiBpdCBpcyBsaXZlCiAgICAgICAgICAg
ICAvLyBhZnRlciB0aGUgTW92ZS4gSWYgd2Ugd2VyZSB0byBhZGQgdGhlIGludGVyZmVyZW5jZSBl
ZGdlLCBpdCB3b3VsZCBiZSBpbXBvc3NpYmxlIHRvCiAgICAgICAgICAgICAvLyBjb2FsZXNjZSB0
aGUgTW92ZSBldmVuIGlmIHRoZSB0d28gVG1wIG5ldmVyIGludGVyZmVyZSBhbnl3aGVyZS4KQEAg
LTE4Myw2ICsxNzcsMjAgQEAgcHVibGljOgogICAgICAgICAgICAgQVNTRVJUKGRlZlRtcCk7CiAg
ICAgICAgICAgICBBU1NFUlQodXNlVG1wKTsKIAorICAgICAgICAgICAgdW5zaWduZWQgbmV4dE1v
dmVJbmRleCA9IG1fY29hbGVzY2luZ0NhbmRpZGF0ZXMuc2l6ZSgpOworICAgICAgICAgICAgbV9j
b2FsZXNjaW5nQ2FuZGlkYXRlcy5hcHBlbmQoeyB1c2VUbXAsIGRlZlRtcCB9KTsKKworICAgICAg
ICAgICAgdW5zaWduZWQgbmV3SW5kZXhJbldvcmtsaXN0ID0gbV93b3JrbGlzdE1vdmVzLmFkZE1v
dmUoKTsKKyAgICAgICAgICAgIEFTU0VSVF9VTlVTRUQobmV3SW5kZXhJbldvcmtsaXN0LCBuZXdJ
bmRleEluV29ya2xpc3QgPT0gbmV4dE1vdmVJbmRleCk7CisKKyAgICAgICAgICAgIEFTU0VSVChu
ZXh0TW92ZUluZGV4IDw9IG1fYWN0aXZlTW92ZXMuc2l6ZSgpKTsKKyAgICAgICAgICAgIG1fYWN0
aXZlTW92ZXMuZW5zdXJlU2l6ZShuZXh0TW92ZUluZGV4ICsgMSk7CisKKyAgICAgICAgICAgIGZv
ciAoY29uc3QgQXJnJiBhcmcgOiBpbnN0LmFyZ3MpIHsKKyAgICAgICAgICAgICAgICBhdXRvJiBs
aXN0ID0gbV9tb3ZlTGlzdFtBYnNvbHV0ZVRtcEhlbHBlcjx0eXBlPjo6YWJzb2x1dGVJbmRleChh
cmcudG1wKCkpXTsKKyAgICAgICAgICAgICAgICBsaXN0LmFkZChuZXh0TW92ZUluZGV4KTsKKyAg
ICAgICAgICAgIH0KKwogICAgICAgICAgICAgZm9yIChjb25zdCBUbXAmIGxpdmVUbXAgOiBsb2Nh
bENhbGMubGl2ZSgpKSB7CiAgICAgICAgICAgICAgICAgaWYgKGxpdmVUbXAgIT0gdXNlVG1wICYm
IGxpdmVUbXAuaXNHUCgpID09ICh0eXBlID09IEFyZzo6R1ApKQogICAgICAgICAgICAgICAgICAg
ICBhZGRFZGdlKGRlZlRtcCwgbGl2ZVRtcCk7CkBAIC0xOTMsNiArMjAxLDggQEAgcHVibGljOgog
CiAgICAgdm9pZCBhbGxvY2F0ZSgpCiAgICAgeworICAgICAgICBBU1NFUlRfV0lUSF9NRVNTQUdF
KG1fYWN0aXZlTW92ZXMuc2l6ZSgpID49IG1fY29hbGVzY2luZ0NhbmRpZGF0ZXMuc2l6ZSgpLCAi
VGhlIGFjdGl2ZU1vdmUgc2V0IHNob3VsZCBiZSBiaWcgZW5vdWdoIGZvciB0aGUgcXVpY2sgb3Bl
cmF0aW9ucyBvZiBCaXRWZWN0b3IuIik7CisKICAgICAgICAgbWFrZVdvcmtMaXN0KCk7CiAKICAg
ICAgICAgaWYgKGRlYnVnKSB7CkBAIC0zNjcsMTYgKzM3NywxNiBAQCBwcml2YXRlOgogICAgIHRl
bXBsYXRlPHR5cGVuYW1lIEZ1bmN0aW9uPgogICAgIHZvaWQgZm9yRWFjaE5vZGVNb3ZlcyhUbXAg
dG1wLCBGdW5jdGlvbiBmdW5jdGlvbikKICAgICB7Ci0gICAgICAgIGZvciAoSW5zdCogaW5zdCA6
IG1fbW92ZUxpc3RbQWJzb2x1dGVUbXBIZWxwZXI8dHlwZT46OmFic29sdXRlSW5kZXgodG1wKV0p
IHsKLSAgICAgICAgICAgIGlmIChtX2FjdGl2ZU1vdmVzLmNvbnRhaW5zKGluc3QpIHx8IG1fd29y
a2xpc3RNb3Zlcy5jb250YWlucyhpbnN0KSkKLSAgICAgICAgICAgICAgICBmdW5jdGlvbigqaW5z
dCk7CisgICAgICAgIGZvciAodW5zaWduZWQgbW92ZUluZGV4IDogbV9tb3ZlTGlzdFtBYnNvbHV0
ZVRtcEhlbHBlcjx0eXBlPjo6YWJzb2x1dGVJbmRleCh0bXApXSkgeworICAgICAgICAgICAgaWYg
KG1fYWN0aXZlTW92ZXMucXVpY2tHZXQobW92ZUluZGV4KSB8fCBtX3dvcmtsaXN0TW92ZXMuY29u
dGFpbnMobW92ZUluZGV4KSkKKyAgICAgICAgICAgICAgICBmdW5jdGlvbihtb3ZlSW5kZXgpOwog
ICAgICAgICB9CiAgICAgfQogCiAgICAgYm9vbCBpc01vdmVSZWxhdGVkKFRtcCB0bXApCiAgICAg
ewotICAgICAgICBmb3IgKEluc3QqIGluc3QgOiBtX21vdmVMaXN0W0Fic29sdXRlVG1wSGVscGVy
PHR5cGU+OjphYnNvbHV0ZUluZGV4KHRtcCldKSB7Ci0gICAgICAgICAgICBpZiAobV9hY3RpdmVN
b3Zlcy5jb250YWlucyhpbnN0KSB8fCBtX3dvcmtsaXN0TW92ZXMuY29udGFpbnMoaW5zdCkpCisg
ICAgICAgIGZvciAodW5zaWduZWQgbW92ZUluZGV4IDogbV9tb3ZlTGlzdFtBYnNvbHV0ZVRtcEhl
bHBlcjx0eXBlPjo6YWJzb2x1dGVJbmRleCh0bXApXSkgeworICAgICAgICAgICAgaWYgKG1fYWN0
aXZlTW92ZXMucXVpY2tHZXQobW92ZUluZGV4KSB8fCBtX3dvcmtsaXN0TW92ZXMuY29udGFpbnMo
bW92ZUluZGV4KSkKICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgfQogICAg
ICAgICByZXR1cm4gZmFsc2U7CkBAIC0zODQsOSArMzk0LDkgQEAgcHJpdmF0ZToKIAogICAgIHZv
aWQgZW5hYmxlTW92ZXNPblZhbHVlKFRtcCB0bXApCiAgICAgewotICAgICAgICBmb3IgKEluc3Qq
IGluc3QgOiBtX21vdmVMaXN0W0Fic29sdXRlVG1wSGVscGVyPHR5cGU+OjphYnNvbHV0ZUluZGV4
KHRtcCldKSB7Ci0gICAgICAgICAgICBpZiAobV9hY3RpdmVNb3Zlcy5yZW1vdmUoaW5zdCkpCi0g
ICAgICAgICAgICAgICAgbV93b3JrbGlzdE1vdmVzLmFkZChpbnN0KTsKKyAgICAgICAgZm9yICh1
bnNpZ25lZCBtb3ZlSW5kZXggOiBtX21vdmVMaXN0W0Fic29sdXRlVG1wSGVscGVyPHR5cGU+Ojph
YnNvbHV0ZUluZGV4KHRtcCldKSB7CisgICAgICAgICAgICBpZiAobV9hY3RpdmVNb3Zlcy5xdWlj
a0NsZWFyKG1vdmVJbmRleCkpCisgICAgICAgICAgICAgICAgbV93b3JrbGlzdE1vdmVzLnJldHVy
bk1vdmUobW92ZUluZGV4KTsKICAgICAgICAgfQogICAgIH0KIApAQCAtNDAxLDE5ICs0MTEsMTgg
QEAgcHJpdmF0ZToKIAogICAgIHZvaWQgY29hbGVzY2UoKQogICAgIHsKLSAgICAgICAgSW5zdCog
bW92ZUluc3QgPSBtX3dvcmtsaXN0TW92ZXMudGFrZUxhc3QoKTsKLSAgICAgICAgQVNTRVJUKG1v
dmVJbnN0LT5hcmdzLnNpemUoKSA9PSAyKTsKLQotICAgICAgICBUbXAgdSA9IG1vdmVJbnN0LT5h
cmdzWzBdLnRtcCgpOworICAgICAgICB1bnNpZ25lZCBtb3ZlSW5kZXggPSBtX3dvcmtsaXN0TW92
ZXMudGFrZUxhc3RNb3ZlKCk7CisgICAgICAgIGNvbnN0IE1vdmVPcGVyYW5kcyYgbW92ZU9wZXJh
bmRzID0gbV9jb2FsZXNjaW5nQ2FuZGlkYXRlc1ttb3ZlSW5kZXhdOworICAgICAgICBUbXAgdSA9
IG1vdmVPcGVyYW5kcy5zcmM7CiAgICAgICAgIHUgPSBnZXRBbGlhcyh1KTsKLSAgICAgICAgVG1w
IHYgPSBtb3ZlSW5zdC0+YXJnc1sxXS50bXAoKTsKKyAgICAgICAgVG1wIHYgPSBtb3ZlT3BlcmFu
ZHMuZHN0OwogICAgICAgICB2ID0gZ2V0QWxpYXModik7CiAKICAgICAgICAgaWYgKHYuaXNSZWco
KSkKICAgICAgICAgICAgIHN0ZDo6c3dhcCh1LCB2KTsKIAogICAgICAgICBpZiAodHJhY2VEZWJ1
ZykKLSAgICAgICAgICAgIGRhdGFMb2coIkNvYWxlc2NpbmcgIiwgKm1vdmVJbnN0LCAiIHUgPSAi
LCB1LCAiIHYgPSAiLCB2LCAiXG4iKTsKKyAgICAgICAgICAgIGRhdGFMb2coIkNvYWxlc2Npbmcg
bW92ZSBhdCBpbmRleCIsIG1vdmVJbmRleCwgIiB1ID0gIiwgdSwgIiB2ID0gIiwgdiwgIlxuIik7
CiAKICAgICAgICAgaWYgKHUgPT0gdikgewogICAgICAgICAgICAgYWRkV29ya0xpc3QodSk7CkBA
IC00MzMsNyArNDQyLDcgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIGlmICh0cmFjZURlYnVnKQog
ICAgICAgICAgICAgICAgIGRhdGFMb2coIiAgICBTYWZlIENvYWxlc2NpbmdcbiIpOwogICAgICAg
ICB9IGVsc2UgewotICAgICAgICAgICAgbV9hY3RpdmVNb3Zlcy5hZGQobW92ZUluc3QpOworICAg
ICAgICAgICAgbV9hY3RpdmVNb3Zlcy5xdWlja1NldChtb3ZlSW5kZXgpOwogCiAgICAgICAgICAg
ICBpZiAodHJhY2VEZWJ1ZykKICAgICAgICAgICAgICAgICBkYXRhTG9nKCIgICAgRmFpbGVkIGNv
YWxlc2NpbmcsIGFkZGVkIHRvIGFjdGl2ZSBtb3Zlcy5cbiIpOwpAQCAtNTI3LDcgKzUzNiw3IEBA
IHByaXZhdGU6CiAgICAgICAgIEFTU0VSVCghbV9jb2FsZXNjZWRUbXBzW0Fic29sdXRlVG1wSGVs
cGVyPHR5cGU+OjphYnNvbHV0ZUluZGV4KHYpXSk7CiAgICAgICAgIG1fY29hbGVzY2VkVG1wc1tB
YnNvbHV0ZVRtcEhlbHBlcjx0eXBlPjo6YWJzb2x1dGVJbmRleCh2KV0gPSB1OwogCi0gICAgICAg
IEhhc2hTZXQ8SW5zdCo+JiB2TW92ZXMgPSBtX21vdmVMaXN0W0Fic29sdXRlVG1wSGVscGVyPHR5
cGU+OjphYnNvbHV0ZUluZGV4KHYpXTsKKyAgICAgICAgYXV0byYgdk1vdmVzID0gbV9tb3ZlTGlz
dFtBYnNvbHV0ZVRtcEhlbHBlcjx0eXBlPjo6YWJzb2x1dGVJbmRleCh2KV07CiAgICAgICAgIG1f
bW92ZUxpc3RbQWJzb2x1dGVUbXBIZWxwZXI8dHlwZT46OmFic29sdXRlSW5kZXgodSldLmFkZCh2
TW92ZXMuYmVnaW4oKSwgdk1vdmVzLmVuZCgpKTsKIAogICAgICAgICBmb3JFYWNoQWRqYWNlbnQo
diwgW3RoaXMsIHVdIChUbXAgYWRqYWNlbnRUbXApIHsKQEAgLTU0OCwxMSArNTU3LDEyIEBAIHBy
aXZhdGU6CiAKICAgICB2b2lkIGZyZWV6ZU1vdmVzKFRtcCB0bXApCiAgICAgewotICAgICAgICBm
b3JFYWNoTm9kZU1vdmVzKHRtcCwgW3RoaXMsIHRtcF0gKEluc3QmIGluc3QpIHsKLSAgICAgICAg
ICAgIGlmICghbV9hY3RpdmVNb3Zlcy5yZW1vdmUoJmluc3QpKQotICAgICAgICAgICAgICAgIG1f
d29ya2xpc3RNb3Zlcy5yZW1vdmUoJmluc3QpOworICAgICAgICBmb3JFYWNoTm9kZU1vdmVzKHRt
cCwgW3RoaXMsIHRtcF0gKHVuc2lnbmVkIG1vdmVJbmRleCkgeworICAgICAgICAgICAgaWYgKCFt
X2FjdGl2ZU1vdmVzLnF1aWNrQ2xlYXIobW92ZUluZGV4KSkKKyAgICAgICAgICAgICAgICBtX3dv
cmtsaXN0TW92ZXMudGFrZU1vdmUobW92ZUluZGV4KTsKIAotICAgICAgICAgICAgVG1wIG90aGVy
VG1wID0gaW5zdC5hcmdzWzBdLnRtcCgpICE9IHRtcCA/IGluc3QuYXJnc1swXS50bXAoKSA6IGlu
c3QuYXJnc1sxXS50bXAoKTsKKyAgICAgICAgICAgIGNvbnN0IE1vdmVPcGVyYW5kcyYgbW92ZU9w
ZXJhbmRzID0gbV9jb2FsZXNjaW5nQ2FuZGlkYXRlc1ttb3ZlSW5kZXhdOworICAgICAgICAgICAg
VG1wIG90aGVyVG1wID0gbW92ZU9wZXJhbmRzLnNyYyAhPSB0bXAgPyBtb3ZlT3BlcmFuZHMuc3Jj
IDogbW92ZU9wZXJhbmRzLmRzdDsKICAgICAgICAgICAgIGlmIChtX2RlZ3JlZXNbQWJzb2x1dGVU
bXBIZWxwZXI8dHlwZT46OmFic29sdXRlSW5kZXgob3RoZXJUbXApXSA8IG1fbnVtYmVyT2ZSZWdp
c3RlcnMgJiYgIWlzTW92ZVJlbGF0ZWQob3RoZXJUbXApKSB7CiAgICAgICAgICAgICAgICAgbV9m
cmVlemVXb3JrbGlzdC5yZW1vdmUob3RoZXJUbXApOwogICAgICAgICAgICAgICAgIG1fc2ltcGxp
ZnlXb3JrbGlzdC5hcHBlbmQob3RoZXJUbXApOwpAQCAtNTk3LDcgKzYwNyw2IEBAIHByaXZhdGU6
CiAgICAgICAgIG1fZGVncmVlcy5jbGVhcigpOwogICAgICAgICBtX21vdmVMaXN0LmNsZWFyKCk7
CiAgICAgICAgIG1fd29ya2xpc3RNb3Zlcy5jbGVhcigpOwotICAgICAgICBtX2FjdGl2ZU1vdmVz
LmNsZWFyKCk7CiAgICAgICAgIG1fc2ltcGxpZnlXb3JrbGlzdC5jbGVhcigpOwogICAgICAgICBt
X3NwaWxsV29ya2xpc3QuY2xlYXIoKTsKICAgICAgICAgbV9mcmVlemVXb3JrbGlzdC5jbGVhcigp
OwpAQCAtNjY3LDkgKzY3Niw3IEBAIHByaXZhdGU6CiAgICAgICAgIG91dC5wcmludCgiU2ltcGxp
Znkgd29yayBsaXN0OlxuIik7CiAgICAgICAgIGZvciAoVG1wIHRtcCA6IG1fc2ltcGxpZnlXb3Jr
bGlzdCkKICAgICAgICAgICAgIG91dC5wcmludCgiICAgICIsIHRtcCwgIlxuIik7Ci0gICAgICAg
IG91dC5wcmludCgiTW92ZXMgd29yayBsaXN0OlxuIik7Ci0gICAgICAgIGZvciAoSW5zdCogaW5z
dCA6IG1fd29ya2xpc3RNb3ZlcykKLSAgICAgICAgICAgIG91dC5wcmludCgiICAgICIsICppbnN0
LCAiXG4iKTsKKyAgICAgICAgb3V0LnByaW50ZigiTW92ZXMgd29yayBsaXN0IGlzIGVtcHR5PyAl
ZFxuIiwgbV93b3JrbGlzdE1vdmVzLmlzRW1wdHkoKSk7CiAgICAgICAgIG91dC5wcmludCgiRnJl
ZXplIHdvcmsgbGlzdDpcbiIpOwogICAgICAgICBmb3IgKFRtcCB0bXAgOiBtX2ZyZWV6ZVdvcmts
aXN0KQogICAgICAgICAgICAgb3V0LnByaW50KCIgICAgIiwgdG1wLCAiXG4iKTsKQEAgLTc0OSw4
ICs3NTYsMTYgQEAgcHJpdmF0ZToKICAgICBWZWN0b3I8VmVjdG9yPFRtcCwgMCwgVW5zYWZlVmVj
dG9yT3ZlcmZsb3csIDQ+LCAwLCBVbnNhZmVWZWN0b3JPdmVyZmxvdz4gbV9hZGphY2VuY3lMaXN0
OwogICAgIFZlY3Rvcjx1bnNpZ25lZCwgMCwgVW5zYWZlVmVjdG9yT3ZlcmZsb3c+IG1fZGVncmVl
czsKIAorICAgIC8vIEluc3RlYWQgb2Yga2VlcGluZyB0cmFjayBvZiB0aGUgbW92ZSBpbnN0cnVj
dGlvbnMsIHdlIGp1c3Qga2VlcCB0aGVpciBvcGVyYW5kcyBhcm91bmQgYW5kIHVzZSB0aGUgaW5k
ZXgKKyAgICAvLyBpbiB0aGUgdmVjdG9yIGFzIHRoZSAiaWRlbnRpZmllciIgZm9yIHRoZSBtb3Zl
LgorICAgIHN0cnVjdCBNb3ZlT3BlcmFuZHMgeworICAgICAgICBUbXAgc3JjOworICAgICAgICBU
bXAgZHN0OworICAgIH07CisgICAgVmVjdG9yPE1vdmVPcGVyYW5kcywgMCwgVW5zYWZlVmVjdG9y
T3ZlcmZsb3c+IG1fY29hbGVzY2luZ0NhbmRpZGF0ZXM7CisKICAgICAvLyBMaXN0IG9mIGV2ZXJ5
IG1vdmUgaW5zdHJ1Y3Rpb24gYXNzb2NpYXRlZCB3aXRoIGEgVG1wLgotICAgIFZlY3RvcjxIYXNo
U2V0PEluc3QqPj4gbV9tb3ZlTGlzdDsKKyAgICBWZWN0b3I8SGFzaFNldDx1bnNpZ25lZCwgRGVm
YXVsdEhhc2g8dW5zaWduZWQ+OjpIYXNoLCBXVEY6OlVuc2lnbmVkV2l0aFplcm9LZXlIYXNoVHJh
aXRzPHVuc2lnbmVkPj4+IG1fbW92ZUxpc3Q7CiAKICAgICAvLyBDb2xvcnMuCiAgICAgVmVjdG9y
PFJlZywgMCwgVW5zYWZlVmVjdG9yT3ZlcmZsb3c+IG1fY29sb3JlZFRtcDsKQEAgLTc2MywxMSAr
Nzc4LDg0IEBAIHByaXZhdGU6CiAgICAgQml0VmVjdG9yIG1faXNPblNlbGVjdFN0YWNrOwogICAg
IFZlY3RvcjxUbXA+IG1fc2VsZWN0U3RhY2s7CiAKKyAgICBzdHJ1Y3QgT3JkZXJlZE1vdmVTZXQg
eworICAgICAgICB1bnNpZ25lZCBhZGRNb3ZlKCkKKyAgICAgICAgeworICAgICAgICAgICAgdW5z
aWduZWQgbmV4dEluZGV4ID0gbV9tb3ZlTGlzdC5zaXplKCk7CisgICAgICAgICAgICBtX21vdmVM
aXN0LmFwcGVuZChuZXh0SW5kZXgpOworICAgICAgICAgICAgbV9wb3NpdGlvbkluTW92ZUxpc3Qu
YXBwZW5kKG5leHRJbmRleCk7CisgICAgICAgICAgICByZXR1cm4gbmV4dEluZGV4OworICAgICAg
ICB9CisKKyAgICAgICAgYm9vbCBpc0VtcHR5KCkgY29uc3QKKyAgICAgICAgeworICAgICAgICAg
ICAgcmV0dXJuIG1fbW92ZUxpc3QuaXNFbXB0eSgpOworICAgICAgICB9CisKKyAgICAgICAgYm9v
bCBjb250YWlucyh1bnNpZ25lZCBpbmRleCkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJu
IG1fcG9zaXRpb25Jbk1vdmVMaXN0W2luZGV4XSAhPSBXVEY6Om5vdEZvdW5kOworICAgICAgICB9
CisKKyAgICAgICAgdm9pZCB0YWtlTW92ZSh1bnNpZ25lZCBtb3ZlSW5kZXgpCisgICAgICAgIHsK
KyAgICAgICAgICAgIHVuc2lnbmVkIHBvc2l0aW9uSW5Nb3ZlTGlzdCA9IG1fcG9zaXRpb25Jbk1v
dmVMaXN0W21vdmVJbmRleF07CisgICAgICAgICAgICBpZiAocG9zaXRpb25Jbk1vdmVMaXN0ID09
IFdURjo6bm90Rm91bmQpCisgICAgICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgICAgICBB
U1NFUlQobV9tb3ZlTGlzdFtwb3NpdGlvbkluTW92ZUxpc3RdID09IG1vdmVJbmRleCk7CisgICAg
ICAgICAgICB1bnNpZ25lZCBsYXN0SW5kZXggPSBtX21vdmVMaXN0Lmxhc3QoKTsKKyAgICAgICAg
ICAgIG1fcG9zaXRpb25Jbk1vdmVMaXN0W2xhc3RJbmRleF0gPSBwb3NpdGlvbkluTW92ZUxpc3Q7
CisgICAgICAgICAgICBtX21vdmVMaXN0W3Bvc2l0aW9uSW5Nb3ZlTGlzdF0gPSBsYXN0SW5kZXg7
CisgICAgICAgICAgICBtX21vdmVMaXN0LnJlbW92ZUxhc3QoKTsKKworICAgICAgICAgICAgbV9w
b3NpdGlvbkluTW92ZUxpc3RbbW92ZUluZGV4XSA9IFdURjo6bm90Rm91bmQ7CisKKyAgICAgICAg
ICAgIEFTU0VSVCghY29udGFpbnMobW92ZUluZGV4KSk7CisgICAgICAgIH0KKworICAgICAgICB1
bnNpZ25lZCB0YWtlTGFzdE1vdmUoKQorICAgICAgICB7CisgICAgICAgICAgICBBU1NFUlQoIWlz
RW1wdHkoKSk7CisKKyAgICAgICAgICAgIHVuc2lnbmVkIGxhc3RJbmRleCA9IG1fbW92ZUxpc3Qu
dGFrZUxhc3QoKTsKKyAgICAgICAgICAgIEFTU0VSVChtX3Bvc2l0aW9uSW5Nb3ZlTGlzdFtsYXN0
SW5kZXhdID09IG1fbW92ZUxpc3Quc2l6ZSgpKTsKKyAgICAgICAgICAgIG1fcG9zaXRpb25Jbk1v
dmVMaXN0W2xhc3RJbmRleF0gPSBXVEY6Om5vdEZvdW5kOworCisgICAgICAgICAgICBBU1NFUlQo
IWNvbnRhaW5zKGxhc3RJbmRleCkpOworICAgICAgICAgICAgcmV0dXJuIGxhc3RJbmRleDsKKyAg
ICAgICAgfQorCisgICAgICAgIHZvaWQgcmV0dXJuTW92ZSh1bnNpZ25lZCBpbmRleCkKKyAgICAg
ICAgeworICAgICAgICAgICAgLy8gVGhpcyBhc3NlcnRpb24gaXMgYSBiaXQgc3RyaWN0IGJ1dCB0
aGF0IGlzIGhvdyB0aGUgbW92ZSBsaXN0IHNob3VsZCBiZSB1c2VkLiBUaGUgb25seSBraW5kIG9m
IG1vdmVzIHRoYXQgY2FuCisgICAgICAgICAgICAvLyByZXR1cm4gdG8gdGhlIGxpc3QgYXJlIHRo
ZSBvbmVzIHRoYXQgd2UgcHJldmlvdXNseSBmYWlsZWQgdG8gY29hbGVzY2Ugd2l0aCB0aGUgY29u
c2VydmF0aXZlIGhldXJpc3RpY3MuCisgICAgICAgICAgICAvLyBWYWx1ZXMgc2hvdWxkIG5vdCBi
ZSBhZGRlZCBiYWNrIGlmIHRoZXkgd2VyZSBuZXZlciB0YWtlbiBvdXQgd2hlbiBhdHRlbXB0aW5n
IGNvYWxlc2NpbmcuCisgICAgICAgICAgICBBU1NFUlQoIWNvbnRhaW5zKGluZGV4KSk7CisKKyAg
ICAgICAgICAgIHVuc2lnbmVkIHBvc2l0aW9uID0gbV9tb3ZlTGlzdC5zaXplKCk7CisgICAgICAg
ICAgICBtX21vdmVMaXN0LmFwcGVuZChpbmRleCk7CisgICAgICAgICAgICBtX3Bvc2l0aW9uSW5N
b3ZlTGlzdFtpbmRleF0gPSBwb3NpdGlvbjsKKworICAgICAgICAgICAgQVNTRVJUKGNvbnRhaW5z
KGluZGV4KSk7CisgICAgICAgIH0KKworICAgICAgICB2b2lkIGNsZWFyKCkKKyAgICAgICAgewor
ICAgICAgICAgICAgbV9wb3NpdGlvbkluTW92ZUxpc3QuY2xlYXIoKTsKKyAgICAgICAgICAgIG1f
bW92ZUxpc3QuY2xlYXIoKTsKKyAgICAgICAgfQorCisgICAgcHJpdmF0ZToKKyAgICAgICAgVmVj
dG9yPHVuc2lnbmVkLCAwLCBVbnNhZmVWZWN0b3JPdmVyZmxvdz4gbV9wb3NpdGlvbkluTW92ZUxp
c3Q7CisgICAgICAgIFZlY3Rvcjx1bnNpZ25lZCwgMCwgVW5zYWZlVmVjdG9yT3ZlcmZsb3c+IG1f
bW92ZUxpc3Q7CisgICAgfTsKKwogICAgIC8vIFdvcmsgbGlzdHMuCiAgICAgLy8gU2V0IG9mICJt
b3ZlIiBlbmFibGVkIGZvciBwb3NzaWJsZSBjb2FsZXNjaW5nLgotICAgIExpc3RIYXNoU2V0PElu
c3QqPiBtX3dvcmtsaXN0TW92ZXM7CisgICAgT3JkZXJlZE1vdmVTZXQgbV93b3JrbGlzdE1vdmVz
OwogICAgIC8vIFNldCBvZiAibW92ZSIgbm90IHlldCByZWFkeSBmb3IgY29hbGVzY2luZy4KLSAg
ICBIYXNoU2V0PEluc3QqPiBtX2FjdGl2ZU1vdmVzOworICAgIEJpdFZlY3RvciBtX2FjdGl2ZU1v
dmVzOwogICAgIC8vIExvdy1kZWdyZWUsIG5vbi1Nb3ZlIHJlbGF0ZWQuCiAgICAgVmVjdG9yPFRt
cD4gbV9zaW1wbGlmeVdvcmtsaXN0OwogICAgIC8vIEhpZ2gtZGVncmVlIFRtcC4K
</data>

          </attachment>
      

    </bug>

</bugzilla>