<?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>168140</bug_id>
          
          <creation_ts>2017-02-10 11:58:38 -0800</creation_ts>
          <short_desc>Object allocation sinking phase doesn&apos;t properly handle control flow when emitting a PutHint of a materialized object into a PromotedHeapLocation of a still sunken object</short_desc>
          <delta_ts>2017-02-10 20:06:46 -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>jfbastien</cc>
    
    <cc>keith_miller</cc>
    
    <cc>mark.lam</cc>
    
    <cc>msaboff</cc>
    
    <cc>oliver</cc>
    
    <cc>ticaiolima</cc>
    
    <cc>webkit-bug-importer</cc>
    
    <cc>ysuzuki</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1275458</commentid>
    <comment_count>0</comment_count>
    <who name="Saam Barati">saam</who>
    <bug_when>2017-02-10 11:58:38 -0800</bug_when>
    <thetext>For example, if you have a control flow diamond, where we materialize along both sides of the diamond, we will emit PutHints along both sides. But we won&apos;t emit a PutHint if the Phi of the two materializations at the join point.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1275574</commentid>
    <comment_count>1</comment_count>
    <who name="Saam Barati">saam</who>
    <bug_when>2017-02-10 15:33:38 -0800</bug_when>
    <thetext>An example program:

What ToT produces
```
bb#0:
b: PhantomActivation()
a: PhantomNewFunction()
c: PutHint(@a, @b, ActivationLoc)
Branch(#1, #2)

bb#1:
d: MaterializeActivation()
e: PutHint(@a, @d, ActivationLoc)
f: Upsilon(@d, ^p)
Jump(#3)

bb#2:
g: MaterializeActivation()
h: PutHint(@a, @g, ActivationLoc)
i: Upsilon(@d, ^p)
Jump(#3)

bb#3:
p: Phi()
// What is PromotedHeapLocation(@a, ActivationLoc) here?
// What would we do if we exited?
// We need to do is PutHint the Phi.
```

What we should produce as IR is:

```
bb#0:
b: PhantomActivation()
a: PhantomNewFunction()
c: PutHint(@a, @b, ActivationLoc)
Branch(#1, #2)

bb#1:
d: MaterializeActivation()
e: PutHint(@a, @d, ActivationLoc)
f: Upsilon(@d, ^p)
Jump(#3)

bb#2:
g: MaterializeActivation()
h: PutHint(@a, @g, ActivationLoc)
i: Upsilon(@d, ^p)
Jump(#3)

bb#3:
p: Phi()
j: PutHint(@a, @p, ActivationLoc)
```</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1275679</commentid>
    <comment_count>2</comment_count>
    <who name="Saam Barati">saam</who>
    <bug_when>2017-02-10 17:46:08 -0800</bug_when>
    <thetext>&lt;rdar://problem/30205880&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1275697</commentid>
    <comment_count>3</comment_count>
      <attachid>301233</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2017-02-10 18:44:36 -0800</bug_when>
    <thetext>Created attachment 301233
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1275705</commentid>
    <comment_count>4</comment_count>
      <attachid>301235</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2017-02-10 18:55:10 -0800</bug_when>
    <thetext>Created attachment 301235
patch for landing</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1275727</commentid>
    <comment_count>5</comment_count>
      <attachid>301235</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2017-02-10 20:06:41 -0800</bug_when>
    <thetext>Comment on attachment 301235
patch for landing

Clearing flags on attachment: 301235

Committed r212177: &lt;http://trac.webkit.org/changeset/212177&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1275728</commentid>
    <comment_count>6</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2017-02-10 20:06:46 -0800</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>301233</attachid>
            <date>2017-02-10 18:44:36 -0800</date>
            <delta_ts>2017-02-10 18:55:10 -0800</delta_ts>
            <desc>patch</desc>
            <filename>b-backup.diff</filename>
            <type>text/plain</type>
            <size>17536</size>
            <attacher name="Saam Barati">saam</attacher>
            
              <data encoding="base64">SW5kZXg6IEpTVGVzdHMvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEpTVGVzdHMvQ2hhbmdlTG9n
CShyZXZpc2lvbiAyMTIxNzIpCisrKyBKU1Rlc3RzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpA
QCAtMSwzICsxLDIwIEBACisyMDE3LTAyLTEwICBTYWFtIEJhcmF0aSAgPHNiYXJhdGlAYXBwbGUu
Y29tPgorCisgICAgICAgIE9iamVjdCBhbGxvY2F0aW9uIHNpbmtpbmcgcGhhc2UgZG9lc24ndCBw
cm9wZXJseSBoYW5kbGUgY29udHJvbCBmbG93IHdoZW4gZW1pdHRpbmcgYSBQdXRIaW50IG9mIGEg
bWF0ZXJpYWxpemVkIG9iamVjdCBpbnRvIGEgUHJvbW90ZWRIZWFwTG9jYXRpb24gb2YgYSBzdGls
bCBzdW5rZW4gb2JqZWN0CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD0xNjgxNDAKKyAgICAgICAgPHJkYXI6Ly9wcm9ibGVtLzMwMjA1ODgwPgorCisgICAg
ICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogc3RyZXNzL2FsbG9j
YXRpb24tc2lua2luZy1wdXRoaW50LWNvbnRyb2wtZmxvdy5qczogQWRkZWQuCisgICAgICAgIChl
KToKKyAgICAgICAgKGJhcik6CisgICAgICAgIChsZXQueSk6CisgICAgICAgIChlbHNlLmxldC55
KToKKyAgICAgICAgKGJheik6CisgICAgICAgIChmb28pOgorICAgICAgICAoY2F0Y2gpOgorCiAy
MDE3LTAyLTA5ICBNYXJrIExhbSAgPG1hcmsubGFtQGFwcGxlLmNvbT4KIAogICAgICAgICBCMzo6
UHJvY2VkdXJlOjpkZWxldGVPcnBoYW5zKCkgc2hvdWxkIG5ldXRyYWxpemUgdXBzaWxvbnMgd2l0
aCBkZWFkIHBoaXMuCkluZGV4OiBKU1Rlc3RzL3N0cmVzcy9hbGxvY2F0aW9uLXNpbmtpbmctcHV0
aGludC1jb250cm9sLWZsb3cuanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gSlNUZXN0cy9zdHJlc3MvYWxsb2Nh
dGlvbi1zaW5raW5nLXB1dGhpbnQtY29udHJvbC1mbG93LmpzCShub25leGlzdGVudCkKKysrIEpT
VGVzdHMvc3RyZXNzL2FsbG9jYXRpb24tc2lua2luZy1wdXRoaW50LWNvbnRyb2wtZmxvdy5qcwko
d29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDQxIEBACitmdW5jdGlvbiBlKCkgeyB9Citub0lubGlu
ZShlKTsKKworZnVuY3Rpb24gZm9vKGIsIGMsIGQpIHsKKyAgICBsZXQgeDsKKyAgICBmdW5jdGlv
biBiYXIoKSB7IHJldHVybiB4OyB9CisgICAgaWYgKGIpIHsKKyAgICAgICAgbGV0IHkgPSBmdW5j
dGlvbigpIHsgcmV0dXJuIHg7IH0KKyAgICB9IGVsc2UgeworICAgICAgICBsZXQgeSA9IGZ1bmN0
aW9uKCkgeyByZXR1cm4geDsgfQorICAgIH0KKworICAgIGlmIChjKSB7CisgICAgICAgIGZ1bmN0
aW9uIGJheigpIHsgfQorICAgICAgICBpZiAoYikgeworICAgICAgICAgICAgbGV0IHkgPSBmdW5j
dGlvbigpIHsgcmV0dXJuIHg7IH0KKyAgICAgICAgICAgIGUoeSk7CisgICAgICAgIH0gZWxzZSB7
CisgICAgICAgICAgICBsZXQgeSA9IGZ1bmN0aW9uKCkgeyByZXR1cm4geDsgfQorICAgICAgICAg
ICAgZSh5KTsKKyAgICAgICAgfQorICAgICAgICBpZiAoZCkKKyAgICAgICAgICAgIGQoKTsKKyAg
ICAgICAgZShiYXopOworICAgIH0KKworfQorbm9JbmxpbmUoZm9vKTsKKworZm9yIChsZXQgaSA9
IDA7IGkgPCAxMDAwMDA7IGkrKykgeworICAgIGZvbyghIShpICUgMiksIHRydWUsIGZhbHNlKTsK
K30KKworbGV0IHRocmV3ID0gZmFsc2U7Cit0cnkgeworICAgIGZvbyh0cnVlLCB0cnVlLCB0cnVl
KTsKK30gY2F0Y2goZSkgeworICAgIHRocmV3ID0gdHJ1ZTsKK30KK2lmICghdGhyZXcpCisgICAg
dGhyb3cgbmV3IEVycm9yKCJCYWQgdGVzdCIpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
Q2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cJ
KHJldmlzaW9uIDIxMjEyNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cJKHdv
cmtpbmcgY29weSkKQEAgLTEsMyArMSw4MyBAQAorMjAxNy0wMi0xMCAgU2FhbSBCYXJhdGkgIDxz
YmFyYXRpQGFwcGxlLmNvbT4KKworICAgICAgICBPYmplY3QgYWxsb2NhdGlvbiBzaW5raW5nIHBo
YXNlIGRvZXNuJ3QgcHJvcGVybHkgaGFuZGxlIGNvbnRyb2wgZmxvdyB3aGVuIGVtaXR0aW5nIGEg
UHV0SGludCBvZiBhIG1hdGVyaWFsaXplZCBvYmplY3QgaW50byBhIFByb21vdGVkSGVhcExvY2F0
aW9uIG9mIGEgc3RpbGwgc3Vua2VuIG9iamVjdAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTY4MTQwCisgICAgICAgIDxyZGFyOi8vcHJvYmxlbS8zMDIw
NTg4MD4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBU
aGlzIHBhdGNoIGZpeGVzIGEgYnVnIGluIGFsbG9jYXRpb24gc2lua2luZyBwaGFzZSB3aGVyZQor
ICAgICAgICB3ZSBkb24ndCBwcm9wZXJseSBoYW5kbGUgY29udHJvbCBmbG93IHdoZW4gbWF0ZXJp
YWxpemluZworICAgICAgICBhbiBvYmplY3QgYW5kIGFsc28gUHV0SGludGluZyB0aGF0IG1hdGVy
aWFsaXphdGlvbiBpbnRvCisgICAgICAgIGEgc3RpbGwgc3Vua2VuIG9iamVjdC4gV2Ugd2VyZSBw
ZXJmb3JtaW5nIHRoZSBQdXRIaW50CisgICAgICAgIGZvciB0aGUgbWF0ZXJpYWxpemF0aW9uIGF0
IHRoZSBwb2ludCBvZiBtYXRlcmlhbGl6YXRpb24sCisgICAgICAgIGhvd2V2ZXIsIHdlIG1heSBo
YXZlIG1hdGVyaWFsaXplZCBhbG9uZyBib3RoIGVkZ2VzCisgICAgICAgIG9mIGEgY29udHJvbCBm
bG93IGRpYW1vbmQsIGluIHdoaWNoIGNhc2UsIHdlIG5lZWQgdG8KKyAgICAgICAgYWxzbyBQdXRI
aW50IGF0IHRoZSBqb2luIHBvaW50LiBDb25zaWRlciB0aGlzIHByb2dyYW06CisgICAgICAgIAor
ICAgICAgICBgYGAKKyAgICAgICAgYmIjMDoKKyAgICAgICAgYjogUGhhbnRvbUFjdGl2YXRpb24o
KQorICAgICAgICBhOiBQaGFudG9tTmV3RnVuY3Rpb24oKQorICAgICAgICBjOiBQdXRIaW50KEBh
LCBAYiwgQWN0aXZhdGlvbkxvYykKKyAgICAgICAgQnJhbmNoKCMxLCAjMikKKyAgICAgICAgCisg
ICAgICAgIGJiIzE6CisgICAgICAgIGQ6IE1hdGVyaWFsaXplQWN0aXZhdGlvbigpCisgICAgICAg
IGU6IFB1dEhpbnQoQGEsIEBkLCBBY3RpdmF0aW9uTG9jKQorICAgICAgICBmOiBVcHNpbG9uKEBk
LCBecCkKKyAgICAgICAgSnVtcCgjMykKKyAgICAgICAgCisgICAgICAgIGJiIzI6CisgICAgICAg
IGc6IE1hdGVyaWFsaXplQWN0aXZhdGlvbigpCisgICAgICAgIGg6IFB1dEhpbnQoQGEsIEBnLCBB
Y3RpdmF0aW9uTG9jKQorICAgICAgICBpOiBVcHNpbG9uKEBkLCBecCkKKyAgICAgICAgSnVtcCgj
MykKKyAgICAgICAgCisgICAgICAgIGJiIzM6CisgICAgICAgIHA6IFBoaSgpCisgICAgICAgIC8v
IFdoYXQgaXMgUHJvbW90ZWRIZWFwTG9jYXRpb24oQGEsIEFjdGl2YXRpb25Mb2MpIGhlcmU/Cisg
ICAgICAgIC8vIFdoYXQgd291bGQgd2UgZG8gaWYgd2UgZXhpdGVkPworICAgICAgICBgYGAKKyAg
ICAgICAgQmVmb3JlIHRoaXMgcGF0Y2gsIHdlIGRpZG4ndCBwZXJmb3JtIGEgUHV0SGludCBvZiB0
aGUgUGhpLgorICAgICAgICBIb3dldmVyLCB3ZSBuZWVkIHRvLCBvdGhlcndpc2Ugd2hlbiBleGl0
LCB3ZSB3b24ndCBrbm93CisgICAgICAgIHRoZSB2YWx1ZSBvZiBQcm9tb3RlZEhlYXBMb2NhdGlv
bihAYSwgQWN0aXZhdGlvbkxvYykKKyAgICAgICAgCisgICAgICAgIFRoZSBwcm9ncmFtIHdlIG5l
ZWQgdGhlbiwgZm9yIGNvcnJlY3RuZXNzLCBpcyB0aGlzOgorICAgICAgICBgYGAKKyAgICAgICAg
YmIjMDoKKyAgICAgICAgYjogUGhhbnRvbUFjdGl2YXRpb24oKQorICAgICAgICBhOiBQaGFudG9t
TmV3RnVuY3Rpb24oKQorICAgICAgICBjOiBQdXRIaW50KEBhLCBAYiwgQWN0aXZhdGlvbkxvYykK
KyAgICAgICAgQnJhbmNoKCMxLCAjMikKKyAgICAgICAgCisgICAgICAgIGJiIzE6CisgICAgICAg
IGQ6IE1hdGVyaWFsaXplQWN0aXZhdGlvbigpCisgICAgICAgIGU6IFB1dEhpbnQoQGEsIEBkLCBB
Y3RpdmF0aW9uTG9jKQorICAgICAgICBmOiBVcHNpbG9uKEBkLCBecCkKKyAgICAgICAgSnVtcCgj
MykKKyAgICAgICAgCisgICAgICAgIGJiIzI6CisgICAgICAgIGc6IE1hdGVyaWFsaXplQWN0aXZh
dGlvbigpCisgICAgICAgIGg6IFB1dEhpbnQoQGEsIEBnLCBBY3RpdmF0aW9uTG9jKQorICAgICAg
ICBpOiBVcHNpbG9uKEBkLCBecCkKKyAgICAgICAgSnVtcCgjMykKKyAgICAgICAgCisgICAgICAg
IGJiIzM6CisgICAgICAgIHA6IFBoaSgpCisgICAgICAgIGo6IFB1dEhpbnQoQGEsIEBwLCBBY3Rp
dmF0aW9uTG9jKQorICAgICAgICBgYGAKKyAgICAgICAgCisgICAgICAgIFRoaXMgcGF0Y2ggbWFr
ZXMgaXQgc28gdGhhdCB3ZSBlbWl0IHRoZSBuZWNlc3NhcnkgUHV0SGludCBhdCBub2RlIGBqYC4K
KyAgICAgICAgSSd2ZSBhbHNvIGFkZGVkIG1vcmUgdmFsaWRhdGlvbiB0byB0aGUgT1NSQXZhaWxh
YmlsaXR5QW5hbHlzaXNQaGFzZQorICAgICAgICB0byBjYXRjaCB0aGlzIHByb2JsZW0gZHVyaW5n
IHZhbGlkYXRpb24uCisKKyAgICAgICAgKiBkZmcvREZHT1NSQXZhaWxhYmlsaXR5QW5hbHlzaXNQ
aGFzZS5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6T1NSQXZhaWxhYmlsaXR5QW5hbHlzaXNQaGFz
ZTo6cnVuKToKKyAgICAgICAgKiBkZmcvREZHT2JqZWN0QWxsb2NhdGlvblNpbmtpbmdQaGFzZS5j
cHA6CisgICAgICAgICogZnRsL0ZUTE9wZXJhdGlvbnMuY3BwOgorICAgICAgICAoSlNDOjpGVEw6
Om9wZXJhdGlvbk1hdGVyaWFsaXplT2JqZWN0SW5PU1IpOgorCiAyMDE3LTAyLTEwICBCcmlhbiBC
dXJnICA8YmJ1cmdAYXBwbGUuY29tPgogCiAgICAgICAgIFtDb2NvYV0gV2ViIEluc3BlY3Rvcjog
Z2VuZXJhdGUgYW4gTlNfRU5VTSBjb250YWluaW5nIHBsYXRmb3JtcyBzdXBwb3J0ZWQgYnkgdGhl
IHByb3RvY29sIGNvZGUgZ2VuZXJhdG9yCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR09TUkF2YWlsYWJpbGl0eUFuYWx5c2lzUGhhc2UuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSQXZhaWxhYmlsaXR5QW5hbHlzaXNQaGFzZS5jcHAJ
KHJldmlzaW9uIDIxMjEyNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSQXZh
aWxhYmlsaXR5QW5hbHlzaXNQaGFzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTk1LDkgKzk1LDUy
IEBAIHB1YmxpYzoKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9CiAgICAgICAgIH0g
d2hpbGUgKGNoYW5nZWQpOworCisgICAgICAgIGlmICh2YWxpZGF0aW9uRW5hYmxlZCgpKSB7CisK
KyAgICAgICAgICAgIGZvciAoQmxvY2tJbmRleCBibG9ja0luZGV4ID0gMDsgYmxvY2tJbmRleCA8
IG1fZ3JhcGgubnVtQmxvY2tzKCk7ICsrYmxvY2tJbmRleCkgeworICAgICAgICAgICAgICAgIEJh
c2ljQmxvY2sqIGJsb2NrID0gbV9ncmFwaC5ibG9jayhibG9ja0luZGV4KTsKKyAgICAgICAgICAg
ICAgICBpZiAoIWJsb2NrKQorICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAg
ICAgICAgICAKKyAgICAgICAgICAgICAgICBjYWxjdWxhdG9yLmJlZ2luQmxvY2soYmxvY2spOwor
ICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIGZvciAodW5zaWduZWQgbm9kZUluZGV4
ID0gMDsgbm9kZUluZGV4IDwgYmxvY2stPnNpemUoKTsgKytub2RlSW5kZXgpIHsKKyAgICAgICAg
ICAgICAgICAgICAgaWYgKGJsb2NrLT5hdChub2RlSW5kZXgpLT5vcmlnaW4uZXhpdE9LKSB7Cisg
ICAgICAgICAgICAgICAgICAgICAgICAvLyBJZiB3ZSdyZSBhbGxvd2VkIHRvIGV4aXQgaGVyZSwg
dGhlIGhlYXAgbXVzdCBiZSBpbiBhIHN0YXRlCisgICAgICAgICAgICAgICAgICAgICAgICAvLyB3
aGVyZSBleGl0aW5nIHdvdWxkbid0IGNyYXNoLiBUaGVzZSBwYXJ0aWN1bGFyIGZpZWxkcyBhcmUK
KyAgICAgICAgICAgICAgICAgICAgICAgIC8vIHJlcXVpcmVkIGZvciBjb3JyZWN0bmVzcyBiZWNh
dXNlIHdlIHVzZSB0aGVtIGR1cmluZyBPU1IgZXhpdAorICAgICAgICAgICAgICAgICAgICAgICAg
Ly8gdG8gZG8gbWVhbmluZ2Z1bCB0aGluZ3MuIEl0IHdvdWxkIGJlIHdyb25nIGZvciBhbnkgb2Yg
dGhlbQorICAgICAgICAgICAgICAgICAgICAgICAgLy8gdG8gYmUgZGVhZC4KKworICAgICAgICAg
ICAgICAgICAgICAgICAgZm9yIChhdXRvIGhlYXBQYWlyIDogY2FsY3VsYXRvci5tX2F2YWlsYWJp
bGl0eS5tX2hlYXApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzd2l0Y2ggKGhlYXBQ
YWlyLmtleS5raW5kKCkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIEFjdGl2
YXRpb25TY29wZVBMb2M6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBBY3RpdmF0
aW9uU3ltYm9sVGFibGVQTG9jOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgRnVu
Y3Rpb25BY3RpdmF0aW9uUExvYzoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIEZ1
bmN0aW9uRXhlY3V0YWJsZVBMb2M6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBT
dHJ1Y3R1cmVQTG9jOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoaGVhcFBh
aXIudmFsdWUuaXNEZWFkKCkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGRhdGFMb2dMbigiUHJvbW90ZWRIZWFwTG9jYXRpb24gaXMgZGVhZCwgYnV0IHNob3VsZCBub3Qg
YmU6ICIsIGhlYXBQYWlyLmtleSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBjYWxjdWxhdG9yLm1fYXZhaWxhYmlsaXR5LmR1bXAoV1RGOjpkYXRhRmlsZSgpKTsKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENSQVNIKCk7CisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7
CisKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB9Cisg
ICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIH0KKworICAgICAg
ICAgICAgICAgICAgICBjYWxjdWxhdG9yLmV4ZWN1dGVOb2RlKGJsb2NrLT5hdChub2RlSW5kZXgp
KTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KICAgICAgICAg
CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KKwogfTsKIAogYm9vbCBwZXJmb3JtT1NSQXZh
aWxhYmlsaXR5QW5hbHlzaXMoR3JhcGgmIGdyYXBoKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdPYmplY3RBbGxvY2F0aW9uU2lua2luZ1BoYXNlLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09iamVjdEFsbG9jYXRpb25TaW5raW5nUGhh
c2UuY3BwCShyZXZpc2lvbiAyMTIxMjUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R09iamVjdEFsbG9jYXRpb25TaW5raW5nUGhhc2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMDg3
LDYgKzEwODcsNyBAQCBwcml2YXRlOgogICAgICAgICBtX21hdGVyaWFsaXphdGlvblRvRXNjYXBl
ZS5jbGVhcigpOwogICAgICAgICBtX21hdGVyaWFsaXphdGlvblNpdGVUb01hdGVyaWFsaXphdGlv
bnMuY2xlYXIoKTsKICAgICAgICAgbV9tYXRlcmlhbGl6YXRpb25TaXRlVG9SZWNvdmVyaWVzLmNs
ZWFyKCk7CisgICAgICAgIG1fbWF0ZXJpYWxpemF0aW9uU2l0ZVRvSGludHMuY2xlYXIoKTsKIAog
ICAgICAgICAvLyBMb2dpY2FsbHkgd2Ugd2lzaCB0byBjb25zaWRlciBldmVyeSBhbGxvY2F0aW9u
IGFuZCBzaW5rCiAgICAgICAgIC8vIGl0LiBIb3dldmVyLCBpdCBpcyBwcm9iYWJseSBub3QgcHJv
Zml0YWJsZSB0byBzaW5rIGFuCkBAIC0xMjQyLDE2ICsxMjQzLDM1IEBAIHByaXZhdGU6CiAgICAg
ICAgICAgICByZXR1cm47CiAKICAgICAgICAgLy8gRmlyc3QgY29sbGVjdCB0aGUgaGludHMgdGhh
dCB3aWxsIGJlIG5lZWRlZCB3aGVuIHRoZSBub2RlCi0gICAgICAgIC8vIHdlIG1hdGVyaWFsaXpl
IGlzIHN0aWxsIHN0b3JlZCBpbnRvIG90aGVyIHVuZXNjYXBlZCBzaW5rIGNhbmRpZGF0ZXMKLSAg
ICAgICAgVmVjdG9yPFByb21vdGVkSGVhcExvY2F0aW9uPiBoaW50czsKKyAgICAgICAgLy8gd2Ug
bWF0ZXJpYWxpemUgaXMgc3RpbGwgc3RvcmVkIGludG8gb3RoZXIgdW5lc2NhcGVkIHNpbmsgY2Fu
ZGlkYXRlcy4KKyAgICAgICAgLy8gVGhlIHdheSB0byBpbnRlcnByZXQgdGhpcyB2ZWN0b3IgaXM6
CisgICAgICAgIC8vCisgICAgICAgIC8vIFByb21vdGVkSGVhcExvY2F0aW9uKE5vdEVzY2FwZWRB
bGxvY2F0aW9uLCBmaWVsZCkgPSBpZGVudGlmaWVyQWxsb2NhdGlvbgorICAgICAgICAvLworICAg
ICAgICAvLyBlLmc6CisgICAgICAgIC8vIFByb21vdGVkSGVhcExvY2F0aW9uKEBQaGFudG9tTmV3
RnVuY3Rpb24sIEZ1bmN0aW9uQWN0aXZhdGlvblBMb2MpID0gSWRlbnRpZmllck9mKEBNYXRlcmlh
bGl6ZUNyZWF0ZUFjdGl2YXRpb24pCisgICAgICAgIC8vIG9yOgorICAgICAgICAvLyBQcm9tb3Rl
ZEhlYXBMb2NhdGlvbihAUGhhbnRvbUNyZWF0ZUFjdGl2YXRpb24sIENsb3N1cmVWYXJQTG9jKHgp
KSA9IElkZW50aWZpZXJPZihATmV3RnVuY3Rpb24pCisgICAgICAgIC8vCisgICAgICAgIC8vIFdo
ZW4gdGhlIHJocyBvZiB0aGUgYD1gIGlzIHRvIGJlIG1hdGVyaWFsaXplZCBhdCB0aGlzIGB3aGVy
ZWAgcG9pbnQgaW4gdGhlIHByb2dyYW0KKyAgICAgICAgLy8gYW5kIElkZW50aWZpZXJPZihNYXRl
cmlhbGl6YXRpb24pIGlzIHRoZSBvcmlnaW5hbCBzdW5rZW4gYWxsb2NhdGlvbiBvZiB0aGUgbWF0
ZXJpYWxpemF0aW9uLgorICAgICAgICAvLworICAgICAgICAvLyBUaGUgcmVhc29uIHdlIG5lZWQg
dG8gY29sbGVjdCBhbGwgdGhlIGBpZGVudGlmaWVyc2AgaGVyZSBpcyB0aGF0CisgICAgICAgIC8v
IHdlIG1heSBtYXRlcmlhbGl6ZSBtdWx0aXBsZSB2ZXJzaW9ucyBvZiB0aGUgYWxsb2NhdGlvbiBh
bG9uZyBjb250cm9sCisgICAgICAgIC8vIGZsb3cgZWRnZXMuIFdlIHdpbGwgUHV0SGludCB0aGVz
ZSB2YWx1ZXMgYWxvbmcgdGhvc2UgZWRnZXMuIEhvd2V2ZXIsCisgICAgICAgIC8vIHdlIGFsc28g
bmVlZCB0byBQdXRIaW50IHRoZW0gd2hlbiB3ZSBqb2luIGFuZCBoYXZlIGEgUGhpIG9mIHRoZSBh
bGxvY2F0aW9ucy4KKyAgICAgICAgVmVjdG9yPHN0ZDo6cGFpcjxQcm9tb3RlZEhlYXBMb2NhdGlv
biwgTm9kZSo+PiBoaW50czsKICAgICAgICAgZm9yIChjb25zdCBhdXRvJiBlbnRyeSA6IG1faGVh
cC5hbGxvY2F0aW9ucygpKSB7CiAgICAgICAgICAgICBpZiAoZXNjYXBlZXMuY29udGFpbnMoZW50
cnkua2V5KSkKICAgICAgICAgICAgICAgICBjb250aW51ZTsKIAogICAgICAgICAgICAgZm9yIChj
b25zdCBhdXRvJiBmaWVsZCA6IGVudHJ5LnZhbHVlLmZpZWxkcygpKSB7CiAgICAgICAgICAgICAg
ICAgQVNTRVJUKG1fc2lua0NhbmRpZGF0ZXMuY29udGFpbnMoZW50cnkua2V5KSB8fCAhZXNjYXBl
ZXMuY29udGFpbnMoZmllbGQudmFsdWUpKTsKLSAgICAgICAgICAgICAgICBpZiAoZXNjYXBlZXMu
Y29udGFpbnMoZmllbGQudmFsdWUpKQotICAgICAgICAgICAgICAgICAgICBoaW50cy5hcHBlbmQo
UHJvbW90ZWRIZWFwTG9jYXRpb24oZW50cnkua2V5LCBmaWVsZC5rZXkpKTsKKyAgICAgICAgICAg
ICAgICBhdXRvIGl0ZXIgPSBlc2NhcGVlcy5maW5kKGZpZWxkLnZhbHVlKTsKKyAgICAgICAgICAg
ICAgICBpZiAoaXRlciAhPSBlc2NhcGVlcy5lbmQoKSkgeworICAgICAgICAgICAgICAgICAgICBB
U1NFUlQobV9zaW5rQ2FuZGlkYXRlcy5jb250YWlucyhmaWVsZC52YWx1ZSkpOworICAgICAgICAg
ICAgICAgICAgICBoaW50cy5hcHBlbmQoc3RkOjptYWtlX3BhaXIoUHJvbW90ZWRIZWFwTG9jYXRp
b24oZW50cnkua2V5LCBmaWVsZC5rZXkpLCBmaWVsZC52YWx1ZSkpOworICAgICAgICAgICAgICAg
IH0KICAgICAgICAgICAgIH0KICAgICAgICAgfQogCkBAIC0xNDMwLDEwICsxNDUwLDggQEAgcHJp
dmF0ZToKIAogICAgICAgICAvLyBUaGUgaGludHMgbmVlZCB0byBiZSBhZnRlciB0aGUgInJlYWwi
IHJlY292ZXJpZXMgc28gdGhhdCB3ZQogICAgICAgICAvLyBkb24ndCBoaW50IG5vdC15ZXQtY29t
cGxldGUgb2JqZWN0cwotICAgICAgICBpZiAoIWhpbnRzLmlzRW1wdHkoKSkgewotICAgICAgICAg
ICAgbV9tYXRlcmlhbGl6YXRpb25TaXRlVG9SZWNvdmVyaWVzLmFkZCgKLSAgICAgICAgICAgICAg
ICB3aGVyZSwgVmVjdG9yPFByb21vdGVkSGVhcExvY2F0aW9uPigpKS5pdGVyYXRvci0+dmFsdWUu
YXBwZW5kVmVjdG9yKGhpbnRzKTsKLSAgICAgICAgfQorICAgICAgICBtX21hdGVyaWFsaXphdGlv
blNpdGVUb0hpbnRzLmFkZCgKKyAgICAgICAgICAgIHdoZXJlLCBWZWN0b3I8c3RkOjpwYWlyPFBy
b21vdGVkSGVhcExvY2F0aW9uLCBOb2RlKj4+KCkpLml0ZXJhdG9yLT52YWx1ZS5hcHBlbmRWZWN0
b3IoaGludHMpOwogICAgIH0KIAogICAgIE5vZGUqIGNyZWF0ZU1hdGVyaWFsaXphdGlvbihjb25z
dCBBbGxvY2F0aW9uJiBhbGxvY2F0aW9uLCBOb2RlKiB3aGVyZSkKQEAgLTE1NDcsNiArMTU2NSw5
IEBAIHByaXZhdGU6CiAgICAgICAgIEhhc2hNYXA8RnJvemVuVmFsdWUqLCBOb2RlKj4gbGF6eU1h
cHBpbmc7CiAgICAgICAgIGlmICghbV9ib3R0b20pCiAgICAgICAgICAgICBtX2JvdHRvbSA9IG1f
aW5zZXJ0aW9uU2V0Lmluc2VydENvbnN0YW50KDAsIG1fZ3JhcGguYmxvY2soMCktPmF0KDApLT5v
cmlnaW4sIGpzTnVtYmVyKDE5MjcpKTsKKworICAgICAgICBWZWN0b3I8SGFzaFNldDxQcm9tb3Rl
ZEhlYXBMb2NhdGlvbj4+IGhpbnRzRm9yUGhpKG1fc2lua0NhbmRpZGF0ZXMuc2l6ZSgpKTsKKwog
ICAgICAgICBmb3IgKEJhc2ljQmxvY2sqIGJsb2NrIDogbV9ncmFwaC5ibG9ja3NJbk5hdHVyYWxP
cmRlcigpKSB7CiAgICAgICAgICAgICBtX2hlYXAgPSBtX2hlYXBBdEhlYWRbYmxvY2tdOwogCkBA
IC0xNTY4LDYgKzE1ODksMzEgQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICAgICAgbV9hbGxv
Y2F0aW9uU1NBLm5ld0RlZihtX25vZGVUb1ZhcmlhYmxlLmdldChlc2NhcGVlKSwgYmxvY2ssIG1h
dGVyaWFsaXphdGlvbik7CiAgICAgICAgICAgICAgICAgfQogCisgICAgICAgICAgICAgICAgZm9y
IChzdGQ6OnBhaXI8UHJvbW90ZWRIZWFwTG9jYXRpb24sIE5vZGUqPiBwYWlyIDogbV9tYXRlcmlh
bGl6YXRpb25TaXRlVG9IaW50cy5nZXQobm9kZSkpIHsKKyAgICAgICAgICAgICAgICAgICAgUHJv
bW90ZWRIZWFwTG9jYXRpb24gbG9jYXRpb24gPSBwYWlyLmZpcnN0OworICAgICAgICAgICAgICAg
ICAgICBOb2RlKiBpZGVudGlmaWVyID0gcGFpci5zZWNvbmQ7CisgICAgICAgICAgICAgICAgICAg
IC8vIFdlJ3JlIG1hdGVyaWFsaXppbmcgYGlkZW50aWZpZXJgIGF0IHRoaXMgcG9pbnQsIGFuZCB0
aGUgdW5tYXRlcmlhbGl6ZWQKKyAgICAgICAgICAgICAgICAgICAgLy8gdmVyc2lvbiBpcyBpbnNp
ZGUgYGxvY2F0aW9uYC4gV2UgdHJhY2sgd2hpY2ggU1NBIHZhcmlhYmxlIHRoaXMgYmVsb25ncwor
ICAgICAgICAgICAgICAgICAgICAvLyB0byBpbiBjYXNlIHdlIGFsc28gbmVlZCBhIFB1dEhpbnQg
Zm9yIHRoZSBQaGkuCisgICAgICAgICAgICAgICAgICAgIGlmIChVTkxJS0VMWSh2YWxpZGF0aW9u
RW5hYmxlZCgpKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQobV9z
aW5rQ2FuZGlkYXRlcy5jb250YWlucyhsb2NhdGlvbi5iYXNlKCkpKTsKKyAgICAgICAgICAgICAg
ICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKG1fc2lua0NhbmRpZGF0ZXMuY29udGFpbnMoaWRlbnRp
ZmllcikpOworCisgICAgICAgICAgICAgICAgICAgICAgICBib29sIGZvdW5kID0gZmFsc2U7Cisg
ICAgICAgICAgICAgICAgICAgICAgICBmb3IgKE5vZGUqIG1hdGVyaWFsaXphdGlvbiA6IG1fbWF0
ZXJpYWxpemF0aW9uU2l0ZVRvTWF0ZXJpYWxpemF0aW9ucy5nZXQobm9kZSkpIHsKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAvLyBXZSdyZSBtYXRlcmlhbGl6aW5nIGBpZGVudGlmaWVyYCBo
ZXJlLiBUaGlzIGFzc2VydHMgdGhhdCB0aGlzIGlzIGluZGVlZCB0aGUgY2FzZS4KKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBpZiAobV9tYXRlcmlhbGl6YXRpb25Ub0VzY2FwZWUuZ2V0KG1h
dGVyaWFsaXphdGlvbikgPT0gaWRlbnRpZmllcikgeworICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBmb3VuZCA9IHRydWU7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKGZvdW5kKTsKKyAg
ICAgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgICAgIFNTQUNhbGN1bGF0b3I6
OlZhcmlhYmxlKiB2YXJpYWJsZSA9IG1fbm9kZVRvVmFyaWFibGUuZ2V0KGlkZW50aWZpZXIpOwor
ICAgICAgICAgICAgICAgICAgICBoaW50c0ZvclBoaVt2YXJpYWJsZS0+aW5kZXgoKV0uYWRkKGxv
Y2F0aW9uKTsKKyAgICAgICAgICAgICAgICB9CisKICAgICAgICAgICAgICAgICBpZiAobV9zaW5r
Q2FuZGlkYXRlcy5jb250YWlucyhub2RlKSkKICAgICAgICAgICAgICAgICAgICAgbV9hbGxvY2F0
aW9uU1NBLm5ld0RlZihtX25vZGVUb1ZhcmlhYmxlLmdldChub2RlKSwgYmxvY2ssIG5vZGUpOwog
CkBAIC0xNjgzLDYgKzE3MjksMTIgQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICBpbnNlcnRP
U1JIaW50c0ZvclVwZGF0ZSgKICAgICAgICAgICAgICAgICAgICAgMCwgYmxvY2stPmF0KDApLT5v
cmlnaW4sIGNhbkV4aXQsCiAgICAgICAgICAgICAgICAgICAgIGF2YWlsYWJpbGl0eUNhbGN1bGF0
b3IubV9hdmFpbGFiaWxpdHksIGlkZW50aWZpZXIsIHBoaURlZi0+dmFsdWUoKSk7CisKKyAgICAg
ICAgICAgICAgICBmb3IgKFByb21vdGVkSGVhcExvY2F0aW9uIGxvY2F0aW9uIDogaGludHNGb3JQ
aGlbdmFyaWFibGUtPmluZGV4KCldKSB7CisgICAgICAgICAgICAgICAgICAgIG1faW5zZXJ0aW9u
U2V0Lmluc2VydCgwLAorICAgICAgICAgICAgICAgICAgICAgICAgbG9jYXRpb24uY3JlYXRlSGlu
dChtX2dyYXBoLCBibG9jay0+YXQoMCktPm9yaWdpbi53aXRoSW52YWxpZEV4aXQoKSwgcGhpRGVm
LT52YWx1ZSgpKSk7CisgICAgICAgICAgICAgICAgICAgIG1fbG9jYWxNYXBwaW5nLnNldChsb2Nh
dGlvbiwgcGhpRGVmLT52YWx1ZSgpKTsKKyAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9
CiAKICAgICAgICAgICAgIGlmICh2ZXJib3NlKSB7CkBAIC0xNzIyLDYgKzE3NzQsOCBAQCBwcml2
YXRlOgogCiAgICAgICAgICAgICAgICAgZm9yIChQcm9tb3RlZEhlYXBMb2NhdGlvbiBsb2NhdGlv
biA6IG1fbWF0ZXJpYWxpemF0aW9uU2l0ZVRvUmVjb3Zlcmllcy5nZXQobm9kZSkpCiAgICAgICAg
ICAgICAgICAgICAgIG1faW5zZXJ0aW9uU2V0Lmluc2VydChub2RlSW5kZXgsIGNyZWF0ZVJlY292
ZXJ5KGJsb2NrLCBsb2NhdGlvbiwgbm9kZSwgY2FuRXhpdCkpOworICAgICAgICAgICAgICAgIGZv
ciAoc3RkOjpwYWlyPFByb21vdGVkSGVhcExvY2F0aW9uLCBOb2RlKj4gcGFpciA6IG1fbWF0ZXJp
YWxpemF0aW9uU2l0ZVRvSGludHMuZ2V0KG5vZGUpKQorICAgICAgICAgICAgICAgICAgICBtX2lu
c2VydGlvblNldC5pbnNlcnQobm9kZUluZGV4LCBjcmVhdGVSZWNvdmVyeShibG9jaywgcGFpci5m
aXJzdCwgbm9kZSwgY2FuRXhpdCkpOwogCiAgICAgICAgICAgICAgICAgLy8gV2UgbmVlZCB0byBw
dXQgdGhlIE9TUiBoaW50cyBhZnRlciB0aGUgcmVjb3ZlcmllcywKICAgICAgICAgICAgICAgICAv
LyBiZWNhdXNlIHdlIG9ubHkgd2FudCB0aGUgaGludHMgb25jZSB0aGUgb2JqZWN0IGlzCkBAIC0y
MjA5LDYgKzIyNjMsNyBAQCBwcml2YXRlOgogICAgIEhhc2hNYXA8Tm9kZSosIE5vZGUqPiBtX21h
dGVyaWFsaXphdGlvblRvRXNjYXBlZTsKICAgICBIYXNoTWFwPE5vZGUqLCBWZWN0b3I8Tm9kZSo+
PiBtX21hdGVyaWFsaXphdGlvblNpdGVUb01hdGVyaWFsaXphdGlvbnM7CiAgICAgSGFzaE1hcDxO
b2RlKiwgVmVjdG9yPFByb21vdGVkSGVhcExvY2F0aW9uPj4gbV9tYXRlcmlhbGl6YXRpb25TaXRl
VG9SZWNvdmVyaWVzOworICAgIEhhc2hNYXA8Tm9kZSosIFZlY3RvcjxzdGQ6OnBhaXI8UHJvbW90
ZWRIZWFwTG9jYXRpb24sIE5vZGUqPj4+IG1fbWF0ZXJpYWxpemF0aW9uU2l0ZVRvSGludHM7CiAK
ICAgICBIYXNoTWFwPE5vZGUqLCBWZWN0b3I8UHJvbW90ZWRIZWFwTG9jYXRpb24+PiBtX2xvY2F0
aW9uc0ZvckFsbG9jYXRpb247CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRM
T3BlcmF0aW9ucy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9G
VExPcGVyYXRpb25zLmNwcAkocmV2aXNpb24gMjEyMTI1KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2Z0bC9GVExPcGVyYXRpb25zLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTMyLDYgKzEzMiw3
IEBAIGV4dGVybiAiQyIgSlNDZWxsKiBKSVRfT1BFUkFUSU9OIG9wZXJhdGkKICAgICAgICAgICAg
IGlmIChwcm9wZXJ0eS5sb2NhdGlvbigpICE9IFByb21vdGVkTG9jYXRpb25EZXNjcmlwdG9yKFN0
cnVjdHVyZVBMb2MpKQogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogCisgICAgICAgICAgICBS
RUxFQVNFX0FTU0VSVChKU1ZhbHVlOjpkZWNvZGUodmFsdWVzW2ldKS5hc0NlbGwoKS0+aW5oZXJp
dHModm0sIFN0cnVjdHVyZTo6aW5mbygpKSk7CiAgICAgICAgICAgICBzdHJ1Y3R1cmUgPSBqc0Nh
c3Q8U3RydWN0dXJlKj4oSlNWYWx1ZTo6ZGVjb2RlKHZhbHVlc1tpXSkpOwogICAgICAgICAgICAg
YnJlYWs7CiAgICAgICAgIH0KQEAgLTE2MywxMCArMTY0LDE0IEBAIGV4dGVybiAiQyIgSlNDZWxs
KiBKSVRfT1BFUkFUSU9OIG9wZXJhdGkKICAgICAgICAgSlNTY29wZSogYWN0aXZhdGlvbiA9IG51
bGxwdHI7CiAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IG1hdGVyaWFsaXphdGlvbi0+cHJvcGVy
dGllcygpLnNpemUoKTsgaS0tOykgewogICAgICAgICAgICAgY29uc3QgRXhpdFByb3BlcnR5VmFs
dWUmIHByb3BlcnR5ID0gbWF0ZXJpYWxpemF0aW9uLT5wcm9wZXJ0aWVzKClbaV07Ci0gICAgICAg
ICAgICBpZiAocHJvcGVydHkubG9jYXRpb24oKSA9PSBQcm9tb3RlZExvY2F0aW9uRGVzY3JpcHRv
cihGdW5jdGlvbkV4ZWN1dGFibGVQTG9jKSkKKyAgICAgICAgICAgIGlmIChwcm9wZXJ0eS5sb2Nh
dGlvbigpID09IFByb21vdGVkTG9jYXRpb25EZXNjcmlwdG9yKEZ1bmN0aW9uRXhlY3V0YWJsZVBM
b2MpKSB7CisgICAgICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQoSlNWYWx1ZTo6ZGVjb2RlKHZh
bHVlc1tpXSkuYXNDZWxsKCktPmluaGVyaXRzKHZtLCBGdW5jdGlvbkV4ZWN1dGFibGU6OmluZm8o
KSkpOwogICAgICAgICAgICAgICAgIGV4ZWN1dGFibGUgPSBqc0Nhc3Q8RnVuY3Rpb25FeGVjdXRh
YmxlKj4oSlNWYWx1ZTo6ZGVjb2RlKHZhbHVlc1tpXSkpOwotICAgICAgICAgICAgaWYgKHByb3Bl
cnR5LmxvY2F0aW9uKCkgPT0gUHJvbW90ZWRMb2NhdGlvbkRlc2NyaXB0b3IoRnVuY3Rpb25BY3Rp
dmF0aW9uUExvYykpCisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAocHJvcGVydHkubG9j
YXRpb24oKSA9PSBQcm9tb3RlZExvY2F0aW9uRGVzY3JpcHRvcihGdW5jdGlvbkFjdGl2YXRpb25Q
TG9jKSkgeworICAgICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKEpTVmFsdWU6OmRlY29kZSh2
YWx1ZXNbaV0pLmFzQ2VsbCgpLT5pbmhlcml0cyh2bSwgSlNTY29wZTo6aW5mbygpKSk7CiAgICAg
ICAgICAgICAgICAgYWN0aXZhdGlvbiA9IGpzQ2FzdDxKU1Njb3BlKj4oSlNWYWx1ZTo6ZGVjb2Rl
KHZhbHVlc1tpXSkpOworICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgICAgIFJFTEVBU0Vf
QVNTRVJUKGV4ZWN1dGFibGUgJiYgYWN0aXZhdGlvbik7CiAKQEAgLTE4NCwxMCArMTg5LDEzIEBA
IGV4dGVybiAiQyIgSlNDZWxsKiBKSVRfT1BFUkFUSU9OIG9wZXJhdGkKICAgICAgICAgU3ltYm9s
VGFibGUqIHRhYmxlID0gbnVsbHB0cjsKICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gbWF0ZXJp
YWxpemF0aW9uLT5wcm9wZXJ0aWVzKCkuc2l6ZSgpOyBpLS07KSB7CiAgICAgICAgICAgICBjb25z
dCBFeGl0UHJvcGVydHlWYWx1ZSYgcHJvcGVydHkgPSBtYXRlcmlhbGl6YXRpb24tPnByb3BlcnRp
ZXMoKVtpXTsKLSAgICAgICAgICAgIGlmIChwcm9wZXJ0eS5sb2NhdGlvbigpID09IFByb21vdGVk
TG9jYXRpb25EZXNjcmlwdG9yKEFjdGl2YXRpb25TY29wZVBMb2MpKQorICAgICAgICAgICAgaWYg
KHByb3BlcnR5LmxvY2F0aW9uKCkgPT0gUHJvbW90ZWRMb2NhdGlvbkRlc2NyaXB0b3IoQWN0aXZh
dGlvblNjb3BlUExvYykpIHsKKyAgICAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChKU1ZhbHVl
OjpkZWNvZGUodmFsdWVzW2ldKS5hc0NlbGwoKS0+aW5oZXJpdHModm0sIEpTU2NvcGU6OmluZm8o
KSkpOwogICAgICAgICAgICAgICAgIHNjb3BlID0ganNDYXN0PEpTU2NvcGUqPihKU1ZhbHVlOjpk
ZWNvZGUodmFsdWVzW2ldKSk7Ci0gICAgICAgICAgICBlbHNlIGlmIChwcm9wZXJ0eS5sb2NhdGlv
bigpID09IFByb21vdGVkTG9jYXRpb25EZXNjcmlwdG9yKEFjdGl2YXRpb25TeW1ib2xUYWJsZVBM
b2MpKQorICAgICAgICAgICAgfSBlbHNlIGlmIChwcm9wZXJ0eS5sb2NhdGlvbigpID09IFByb21v
dGVkTG9jYXRpb25EZXNjcmlwdG9yKEFjdGl2YXRpb25TeW1ib2xUYWJsZVBMb2MpKSB7CisgICAg
ICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQoSlNWYWx1ZTo6ZGVjb2RlKHZhbHVlc1tpXSkuYXND
ZWxsKCktPmluaGVyaXRzKHZtLCBTeW1ib2xUYWJsZTo6aW5mbygpKSk7CiAgICAgICAgICAgICAg
ICAgdGFibGUgPSBqc0Nhc3Q8U3ltYm9sVGFibGUqPihKU1ZhbHVlOjpkZWNvZGUodmFsdWVzW2ld
KSk7CisgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICAgICAgUkVMRUFTRV9BU1NFUlQoc2Nv
cGUpOwogICAgICAgICBSRUxFQVNFX0FTU0VSVCh0YWJsZSk7Cg==
</data>
<flag name="review"
          id="323074"
          type_id="1"
          status="+"
          setter="fpizlo"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>301235</attachid>
            <date>2017-02-10 18:55:10 -0800</date>
            <delta_ts>2017-02-10 20:06:41 -0800</delta_ts>
            <desc>patch for landing</desc>
            <filename>b-backup.diff</filename>
            <type>text/plain</type>
            <size>17703</size>
            <attacher name="Saam Barati">saam</attacher>
            
              <data encoding="base64">SW5kZXg6IEpTVGVzdHMvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEpTVGVzdHMvQ2hhbmdlTG9n
CShyZXZpc2lvbiAyMTIxNzIpCisrKyBKU1Rlc3RzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpA
QCAtMSwzICsxLDIwIEBACisyMDE3LTAyLTEwICBTYWFtIEJhcmF0aSAgPHNiYXJhdGlAYXBwbGUu
Y29tPgorCisgICAgICAgIE9iamVjdCBhbGxvY2F0aW9uIHNpbmtpbmcgcGhhc2UgZG9lc24ndCBw
cm9wZXJseSBoYW5kbGUgY29udHJvbCBmbG93IHdoZW4gZW1pdHRpbmcgYSBQdXRIaW50IG9mIGEg
bWF0ZXJpYWxpemVkIG9iamVjdCBpbnRvIGEgUHJvbW90ZWRIZWFwTG9jYXRpb24gb2YgYSBzdGls
bCBzdW5rZW4gb2JqZWN0CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD0xNjgxNDAKKyAgICAgICAgPHJkYXI6Ly9wcm9ibGVtLzMwMjA1ODgwPgorCisgICAg
ICAgIFJldmlld2VkIGJ5IEZpbGlwIFBpemxvLgorCisgICAgICAgICogc3RyZXNzL2FsbG9jYXRp
b24tc2lua2luZy1wdXRoaW50LWNvbnRyb2wtZmxvdy5qczogQWRkZWQuCisgICAgICAgIChlKToK
KyAgICAgICAgKGJhcik6CisgICAgICAgIChsZXQueSk6CisgICAgICAgIChlbHNlLmxldC55KToK
KyAgICAgICAgKGJheik6CisgICAgICAgIChmb28pOgorICAgICAgICAoY2F0Y2gpOgorCiAyMDE3
LTAyLTA5ICBNYXJrIExhbSAgPG1hcmsubGFtQGFwcGxlLmNvbT4KIAogICAgICAgICBCMzo6UHJv
Y2VkdXJlOjpkZWxldGVPcnBoYW5zKCkgc2hvdWxkIG5ldXRyYWxpemUgdXBzaWxvbnMgd2l0aCBk
ZWFkIHBoaXMuCkluZGV4OiBKU1Rlc3RzL3N0cmVzcy9hbGxvY2F0aW9uLXNpbmtpbmctcHV0aGlu
dC1jb250cm9sLWZsb3cuanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gSlNUZXN0cy9zdHJlc3MvYWxsb2NhdGlv
bi1zaW5raW5nLXB1dGhpbnQtY29udHJvbC1mbG93LmpzCShub25leGlzdGVudCkKKysrIEpTVGVz
dHMvc3RyZXNzL2FsbG9jYXRpb24tc2lua2luZy1wdXRoaW50LWNvbnRyb2wtZmxvdy5qcwkod29y
a2luZyBjb3B5KQpAQCAtMCwwICsxLDQxIEBACitmdW5jdGlvbiBlKCkgeyB9Citub0lubGluZShl
KTsKKworZnVuY3Rpb24gZm9vKGIsIGMsIGQpIHsKKyAgICBsZXQgeDsKKyAgICBmdW5jdGlvbiBi
YXIoKSB7IHJldHVybiB4OyB9CisgICAgaWYgKGIpIHsKKyAgICAgICAgbGV0IHkgPSBmdW5jdGlv
bigpIHsgcmV0dXJuIHg7IH0KKyAgICB9IGVsc2UgeworICAgICAgICBsZXQgeSA9IGZ1bmN0aW9u
KCkgeyByZXR1cm4geDsgfQorICAgIH0KKworICAgIGlmIChjKSB7CisgICAgICAgIGZ1bmN0aW9u
IGJheigpIHsgfQorICAgICAgICBpZiAoYikgeworICAgICAgICAgICAgbGV0IHkgPSBmdW5jdGlv
bigpIHsgcmV0dXJuIHg7IH0KKyAgICAgICAgICAgIGUoeSk7CisgICAgICAgIH0gZWxzZSB7Cisg
ICAgICAgICAgICBsZXQgeSA9IGZ1bmN0aW9uKCkgeyByZXR1cm4geDsgfQorICAgICAgICAgICAg
ZSh5KTsKKyAgICAgICAgfQorICAgICAgICBpZiAoZCkKKyAgICAgICAgICAgIGQoKTsKKyAgICAg
ICAgZShiYXopOworICAgIH0KKworfQorbm9JbmxpbmUoZm9vKTsKKworZm9yIChsZXQgaSA9IDA7
IGkgPCAxMDAwMDA7IGkrKykgeworICAgIGZvbyghIShpICUgMiksIHRydWUsIGZhbHNlKTsKK30K
KworbGV0IHRocmV3ID0gZmFsc2U7Cit0cnkgeworICAgIGZvbyh0cnVlLCB0cnVlLCB0cnVlKTsK
K30gY2F0Y2goZSkgeworICAgIHRocmV3ID0gdHJ1ZTsKK30KK2lmICghdGhyZXcpCisgICAgdGhy
b3cgbmV3IEVycm9yKCJCYWQgdGVzdCIpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQ2hh
bmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cJKHJl
dmlzaW9uIDIxMjEyNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cJKHdvcmtp
bmcgY29weSkKQEAgLTEsMyArMSw4MyBAQAorMjAxNy0wMi0xMCAgU2FhbSBCYXJhdGkgIDxzYmFy
YXRpQGFwcGxlLmNvbT4KKworICAgICAgICBPYmplY3QgYWxsb2NhdGlvbiBzaW5raW5nIHBoYXNl
IGRvZXNuJ3QgcHJvcGVybHkgaGFuZGxlIGNvbnRyb2wgZmxvdyB3aGVuIGVtaXR0aW5nIGEgUHV0
SGludCBvZiBhIG1hdGVyaWFsaXplZCBvYmplY3QgaW50byBhIFByb21vdGVkSGVhcExvY2F0aW9u
IG9mIGEgc3RpbGwgc3Vua2VuIG9iamVjdAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9MTY4MTQwCisgICAgICAgIDxyZGFyOi8vcHJvYmxlbS8zMDIwNTg4
MD4KKworICAgICAgICBSZXZpZXdlZCBieSBGaWxpcCBQaXpsby4KKworICAgICAgICBUaGlzIHBh
dGNoIGZpeGVzIGEgYnVnIGluIGFsbG9jYXRpb24gc2lua2luZyBwaGFzZSB3aGVyZQorICAgICAg
ICB3ZSBkb24ndCBwcm9wZXJseSBoYW5kbGUgY29udHJvbCBmbG93IHdoZW4gbWF0ZXJpYWxpemlu
ZworICAgICAgICBhbiBvYmplY3QgYW5kIGFsc28gUHV0SGludGluZyB0aGF0IG1hdGVyaWFsaXph
dGlvbiBpbnRvCisgICAgICAgIGEgc3RpbGwgc3Vua2VuIG9iamVjdC4gV2Ugd2VyZSBwZXJmb3Jt
aW5nIHRoZSBQdXRIaW50CisgICAgICAgIGZvciB0aGUgbWF0ZXJpYWxpemF0aW9uIGF0IHRoZSBw
b2ludCBvZiBtYXRlcmlhbGl6YXRpb24sCisgICAgICAgIGhvd2V2ZXIsIHdlIG1heSBoYXZlIG1h
dGVyaWFsaXplZCBhbG9uZyBib3RoIGVkZ2VzCisgICAgICAgIG9mIGEgY29udHJvbCBmbG93IGRp
YW1vbmQsIGluIHdoaWNoIGNhc2UsIHdlIG5lZWQgdG8KKyAgICAgICAgYWxzbyBQdXRIaW50IGF0
IHRoZSBqb2luIHBvaW50LiBDb25zaWRlciB0aGlzIHByb2dyYW06CisgICAgICAgIAorICAgICAg
ICBgYGAKKyAgICAgICAgYmIjMDoKKyAgICAgICAgYjogUGhhbnRvbUFjdGl2YXRpb24oKQorICAg
ICAgICBhOiBQaGFudG9tTmV3RnVuY3Rpb24oKQorICAgICAgICBjOiBQdXRIaW50KEBhLCBAYiwg
QWN0aXZhdGlvbkxvYykKKyAgICAgICAgQnJhbmNoKCMxLCAjMikKKyAgICAgICAgCisgICAgICAg
IGJiIzE6CisgICAgICAgIGQ6IE1hdGVyaWFsaXplQWN0aXZhdGlvbigpCisgICAgICAgIGU6IFB1
dEhpbnQoQGEsIEBkLCBBY3RpdmF0aW9uTG9jKQorICAgICAgICBmOiBVcHNpbG9uKEBkLCBecCkK
KyAgICAgICAgSnVtcCgjMykKKyAgICAgICAgCisgICAgICAgIGJiIzI6CisgICAgICAgIGc6IE1h
dGVyaWFsaXplQWN0aXZhdGlvbigpCisgICAgICAgIGg6IFB1dEhpbnQoQGEsIEBnLCBBY3RpdmF0
aW9uTG9jKQorICAgICAgICBpOiBVcHNpbG9uKEBkLCBecCkKKyAgICAgICAgSnVtcCgjMykKKyAg
ICAgICAgCisgICAgICAgIGJiIzM6CisgICAgICAgIHA6IFBoaSgpCisgICAgICAgIC8vIFdoYXQg
aXMgUHJvbW90ZWRIZWFwTG9jYXRpb24oQGEsIEFjdGl2YXRpb25Mb2MpIGhlcmU/CisgICAgICAg
IC8vIFdoYXQgd291bGQgd2UgZG8gaWYgd2UgZXhpdGVkPworICAgICAgICBgYGAKKyAgICAgICAg
QmVmb3JlIHRoaXMgcGF0Y2gsIHdlIGRpZG4ndCBwZXJmb3JtIGEgUHV0SGludCBvZiB0aGUgUGhp
LgorICAgICAgICBIb3dldmVyLCB3ZSBuZWVkIHRvLCBvdGhlcndpc2Ugd2hlbiBleGl0LCB3ZSB3
b24ndCBrbm93CisgICAgICAgIHRoZSB2YWx1ZSBvZiBQcm9tb3RlZEhlYXBMb2NhdGlvbihAYSwg
QWN0aXZhdGlvbkxvYykKKyAgICAgICAgCisgICAgICAgIFRoZSBwcm9ncmFtIHdlIG5lZWQgdGhl
biwgZm9yIGNvcnJlY3RuZXNzLCBpcyB0aGlzOgorICAgICAgICBgYGAKKyAgICAgICAgYmIjMDoK
KyAgICAgICAgYjogUGhhbnRvbUFjdGl2YXRpb24oKQorICAgICAgICBhOiBQaGFudG9tTmV3RnVu
Y3Rpb24oKQorICAgICAgICBjOiBQdXRIaW50KEBhLCBAYiwgQWN0aXZhdGlvbkxvYykKKyAgICAg
ICAgQnJhbmNoKCMxLCAjMikKKyAgICAgICAgCisgICAgICAgIGJiIzE6CisgICAgICAgIGQ6IE1h
dGVyaWFsaXplQWN0aXZhdGlvbigpCisgICAgICAgIGU6IFB1dEhpbnQoQGEsIEBkLCBBY3RpdmF0
aW9uTG9jKQorICAgICAgICBmOiBVcHNpbG9uKEBkLCBecCkKKyAgICAgICAgSnVtcCgjMykKKyAg
ICAgICAgCisgICAgICAgIGJiIzI6CisgICAgICAgIGc6IE1hdGVyaWFsaXplQWN0aXZhdGlvbigp
CisgICAgICAgIGg6IFB1dEhpbnQoQGEsIEBnLCBBY3RpdmF0aW9uTG9jKQorICAgICAgICBpOiBV
cHNpbG9uKEBkLCBecCkKKyAgICAgICAgSnVtcCgjMykKKyAgICAgICAgCisgICAgICAgIGJiIzM6
CisgICAgICAgIHA6IFBoaSgpCisgICAgICAgIGo6IFB1dEhpbnQoQGEsIEBwLCBBY3RpdmF0aW9u
TG9jKQorICAgICAgICBgYGAKKyAgICAgICAgCisgICAgICAgIFRoaXMgcGF0Y2ggbWFrZXMgaXQg
c28gdGhhdCB3ZSBlbWl0IHRoZSBuZWNlc3NhcnkgUHV0SGludCBhdCBub2RlIGBqYC4KKyAgICAg
ICAgSSd2ZSBhbHNvIGFkZGVkIG1vcmUgdmFsaWRhdGlvbiB0byB0aGUgT1NSQXZhaWxhYmlsaXR5
QW5hbHlzaXNQaGFzZQorICAgICAgICB0byBjYXRjaCB0aGlzIHByb2JsZW0gZHVyaW5nIHZhbGlk
YXRpb24uCisKKyAgICAgICAgKiBkZmcvREZHT1NSQXZhaWxhYmlsaXR5QW5hbHlzaXNQaGFzZS5j
cHA6CisgICAgICAgIChKU0M6OkRGRzo6T1NSQXZhaWxhYmlsaXR5QW5hbHlzaXNQaGFzZTo6cnVu
KToKKyAgICAgICAgKiBkZmcvREZHT2JqZWN0QWxsb2NhdGlvblNpbmtpbmdQaGFzZS5jcHA6Cisg
ICAgICAgICogZnRsL0ZUTE9wZXJhdGlvbnMuY3BwOgorICAgICAgICAoSlNDOjpGVEw6Om9wZXJh
dGlvbk1hdGVyaWFsaXplT2JqZWN0SW5PU1IpOgorCiAyMDE3LTAyLTEwICBCcmlhbiBCdXJnICA8
YmJ1cmdAYXBwbGUuY29tPgogCiAgICAgICAgIFtDb2NvYV0gV2ViIEluc3BlY3RvcjogZ2VuZXJh
dGUgYW4gTlNfRU5VTSBjb250YWluaW5nIHBsYXRmb3JtcyBzdXBwb3J0ZWQgYnkgdGhlIHByb3Rv
Y29sIGNvZGUgZ2VuZXJhdG9yCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09T
UkF2YWlsYWJpbGl0eUFuYWx5c2lzUGhhc2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHT1NSQXZhaWxhYmlsaXR5QW5hbHlzaXNQaGFzZS5jcHAJKHJldmlz
aW9uIDIxMjEyNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSQXZhaWxhYmls
aXR5QW5hbHlzaXNQaGFzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTk1LDkgKzk1LDU1IEBAIHB1
YmxpYzoKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9CiAgICAgICAgIH0gd2hpbGUg
KGNoYW5nZWQpOworCisgICAgICAgIGlmICh2YWxpZGF0aW9uRW5hYmxlZCgpKSB7CisKKyAgICAg
ICAgICAgIGZvciAoQmxvY2tJbmRleCBibG9ja0luZGV4ID0gMDsgYmxvY2tJbmRleCA8IG1fZ3Jh
cGgubnVtQmxvY2tzKCk7ICsrYmxvY2tJbmRleCkgeworICAgICAgICAgICAgICAgIEJhc2ljQmxv
Y2sqIGJsb2NrID0gbV9ncmFwaC5ibG9jayhibG9ja0luZGV4KTsKKyAgICAgICAgICAgICAgICBp
ZiAoIWJsb2NrKQorICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgICAg
ICAKKyAgICAgICAgICAgICAgICBjYWxjdWxhdG9yLmJlZ2luQmxvY2soYmxvY2spOworICAgICAg
ICAgICAgICAgIAorICAgICAgICAgICAgICAgIGZvciAodW5zaWduZWQgbm9kZUluZGV4ID0gMDsg
bm9kZUluZGV4IDwgYmxvY2stPnNpemUoKTsgKytub2RlSW5kZXgpIHsKKyAgICAgICAgICAgICAg
ICAgICAgaWYgKGJsb2NrLT5hdChub2RlSW5kZXgpLT5vcmlnaW4uZXhpdE9LKSB7CisgICAgICAg
ICAgICAgICAgICAgICAgICAvLyBJZiB3ZSdyZSBhbGxvd2VkIHRvIGV4aXQgaGVyZSwgdGhlIGhl
YXAgbXVzdCBiZSBpbiBhIHN0YXRlCisgICAgICAgICAgICAgICAgICAgICAgICAvLyB3aGVyZSBl
eGl0aW5nIHdvdWxkbid0IGNyYXNoLiBUaGVzZSBwYXJ0aWN1bGFyIGZpZWxkcyBhcmUKKyAgICAg
ICAgICAgICAgICAgICAgICAgIC8vIHJlcXVpcmVkIGZvciBjb3JyZWN0bmVzcyBiZWNhdXNlIHdl
IHVzZSB0aGVtIGR1cmluZyBPU1IgZXhpdAorICAgICAgICAgICAgICAgICAgICAgICAgLy8gdG8g
ZG8gbWVhbmluZ2Z1bCB0aGluZ3MuIEl0IHdvdWxkIGJlIHdyb25nIGZvciBhbnkgb2YgdGhlbQor
ICAgICAgICAgICAgICAgICAgICAgICAgLy8gdG8gYmUgZGVhZC4KKworICAgICAgICAgICAgICAg
ICAgICAgICAgQXZhaWxhYmlsaXR5TWFwIGF2YWlsYWJpbGl0eU1hcCA9IGNhbGN1bGF0b3IubV9h
dmFpbGFiaWxpdHk7CisgICAgICAgICAgICAgICAgICAgICAgICBhdmFpbGFiaWxpdHlNYXAucHJ1
bmVCeUxpdmVuZXNzKG1fZ3JhcGgsIGJsb2NrLT5hdChub2RlSW5kZXgpLT5vcmlnaW4uZm9yRXhp
dCk7CisKKyAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoYXV0byBoZWFwUGFpciA6IGF2YWls
YWJpbGl0eU1hcC5tX2hlYXApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzd2l0Y2gg
KGhlYXBQYWlyLmtleS5raW5kKCkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNl
IEFjdGl2YXRpb25TY29wZVBMb2M6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBB
Y3RpdmF0aW9uU3ltYm9sVGFibGVQTG9jOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNh
c2UgRnVuY3Rpb25BY3RpdmF0aW9uUExvYzoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBj
YXNlIEZ1bmN0aW9uRXhlY3V0YWJsZVBMb2M6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Y2FzZSBTdHJ1Y3R1cmVQTG9jOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAo
aGVhcFBhaXIudmFsdWUuaXNEZWFkKCkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGRhdGFMb2dMbigiUHJvbW90ZWRIZWFwTG9jYXRpb24gaXMgZGVhZCwgYnV0IHNob3Vs
ZCBub3QgYmU6ICIsIGhlYXBQYWlyLmtleSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBhdmFpbGFiaWxpdHlNYXAuZHVtcChXVEY6OmRhdGFGaWxlKCkpOworICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgQ1JBU0goKTsKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKwor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAg
ICAgICAgICAgIGNhbGN1bGF0b3IuZXhlY3V0ZU5vZGUoYmxvY2stPmF0KG5vZGVJbmRleCkpOwor
ICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQogICAgICAgICAKICAg
ICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQorCiB9OwogCiBib29sIHBlcmZvcm1PU1JBdmFpbGFi
aWxpdHlBbmFseXNpcyhHcmFwaCYgZ3JhcGgpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR09iamVjdEFsbG9jYXRpb25TaW5raW5nUGhhc2UuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT2JqZWN0QWxsb2NhdGlvblNpbmtpbmdQaGFzZS5j
cHAJKHJldmlzaW9uIDIxMjEyNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT2Jq
ZWN0QWxsb2NhdGlvblNpbmtpbmdQaGFzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEwODcsNiAr
MTA4Nyw3IEBAIHByaXZhdGU6CiAgICAgICAgIG1fbWF0ZXJpYWxpemF0aW9uVG9Fc2NhcGVlLmNs
ZWFyKCk7CiAgICAgICAgIG1fbWF0ZXJpYWxpemF0aW9uU2l0ZVRvTWF0ZXJpYWxpemF0aW9ucy5j
bGVhcigpOwogICAgICAgICBtX21hdGVyaWFsaXphdGlvblNpdGVUb1JlY292ZXJpZXMuY2xlYXIo
KTsKKyAgICAgICAgbV9tYXRlcmlhbGl6YXRpb25TaXRlVG9IaW50cy5jbGVhcigpOwogCiAgICAg
ICAgIC8vIExvZ2ljYWxseSB3ZSB3aXNoIHRvIGNvbnNpZGVyIGV2ZXJ5IGFsbG9jYXRpb24gYW5k
IHNpbmsKICAgICAgICAgLy8gaXQuIEhvd2V2ZXIsIGl0IGlzIHByb2JhYmx5IG5vdCBwcm9maXRh
YmxlIHRvIHNpbmsgYW4KQEAgLTEyNDIsMTYgKzEyNDMsMzUgQEAgcHJpdmF0ZToKICAgICAgICAg
ICAgIHJldHVybjsKIAogICAgICAgICAvLyBGaXJzdCBjb2xsZWN0IHRoZSBoaW50cyB0aGF0IHdp
bGwgYmUgbmVlZGVkIHdoZW4gdGhlIG5vZGUKLSAgICAgICAgLy8gd2UgbWF0ZXJpYWxpemUgaXMg
c3RpbGwgc3RvcmVkIGludG8gb3RoZXIgdW5lc2NhcGVkIHNpbmsgY2FuZGlkYXRlcwotICAgICAg
ICBWZWN0b3I8UHJvbW90ZWRIZWFwTG9jYXRpb24+IGhpbnRzOworICAgICAgICAvLyB3ZSBtYXRl
cmlhbGl6ZSBpcyBzdGlsbCBzdG9yZWQgaW50byBvdGhlciB1bmVzY2FwZWQgc2luayBjYW5kaWRh
dGVzLgorICAgICAgICAvLyBUaGUgd2F5IHRvIGludGVycHJldCB0aGlzIHZlY3RvciBpczoKKyAg
ICAgICAgLy8KKyAgICAgICAgLy8gUHJvbW90ZWRIZWFwTG9jYXRpb24oTm90RXNjYXBlZEFsbG9j
YXRpb24sIGZpZWxkKSA9IGlkZW50aWZpZXJBbGxvY2F0aW9uCisgICAgICAgIC8vCisgICAgICAg
IC8vIGUuZzoKKyAgICAgICAgLy8gUHJvbW90ZWRIZWFwTG9jYXRpb24oQFBoYW50b21OZXdGdW5j
dGlvbiwgRnVuY3Rpb25BY3RpdmF0aW9uUExvYykgPSBJZGVudGlmaWVyT2YoQE1hdGVyaWFsaXpl
Q3JlYXRlQWN0aXZhdGlvbikKKyAgICAgICAgLy8gb3I6CisgICAgICAgIC8vIFByb21vdGVkSGVh
cExvY2F0aW9uKEBQaGFudG9tQ3JlYXRlQWN0aXZhdGlvbiwgQ2xvc3VyZVZhclBMb2MoeCkpID0g
SWRlbnRpZmllck9mKEBOZXdGdW5jdGlvbikKKyAgICAgICAgLy8KKyAgICAgICAgLy8gV2hlbiB0
aGUgcmhzIG9mIHRoZSBgPWAgaXMgdG8gYmUgbWF0ZXJpYWxpemVkIGF0IHRoaXMgYHdoZXJlYCBw
b2ludCBpbiB0aGUgcHJvZ3JhbQorICAgICAgICAvLyBhbmQgSWRlbnRpZmllck9mKE1hdGVyaWFs
aXphdGlvbikgaXMgdGhlIG9yaWdpbmFsIHN1bmtlbiBhbGxvY2F0aW9uIG9mIHRoZSBtYXRlcmlh
bGl6YXRpb24uCisgICAgICAgIC8vCisgICAgICAgIC8vIFRoZSByZWFzb24gd2UgbmVlZCB0byBj
b2xsZWN0IGFsbCB0aGUgYGlkZW50aWZpZXJzYCBoZXJlIGlzIHRoYXQKKyAgICAgICAgLy8gd2Ug
bWF5IG1hdGVyaWFsaXplIG11bHRpcGxlIHZlcnNpb25zIG9mIHRoZSBhbGxvY2F0aW9uIGFsb25n
IGNvbnRyb2wKKyAgICAgICAgLy8gZmxvdyBlZGdlcy4gV2Ugd2lsbCBQdXRIaW50IHRoZXNlIHZh
bHVlcyBhbG9uZyB0aG9zZSBlZGdlcy4gSG93ZXZlciwKKyAgICAgICAgLy8gd2UgYWxzbyBuZWVk
IHRvIFB1dEhpbnQgdGhlbSB3aGVuIHdlIGpvaW4gYW5kIGhhdmUgYSBQaGkgb2YgdGhlIGFsbG9j
YXRpb25zLgorICAgICAgICBWZWN0b3I8c3RkOjpwYWlyPFByb21vdGVkSGVhcExvY2F0aW9uLCBO
b2RlKj4+IGhpbnRzOwogICAgICAgICBmb3IgKGNvbnN0IGF1dG8mIGVudHJ5IDogbV9oZWFwLmFs
bG9jYXRpb25zKCkpIHsKICAgICAgICAgICAgIGlmIChlc2NhcGVlcy5jb250YWlucyhlbnRyeS5r
ZXkpKQogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogCiAgICAgICAgICAgICBmb3IgKGNvbnN0
IGF1dG8mIGZpZWxkIDogZW50cnkudmFsdWUuZmllbGRzKCkpIHsKICAgICAgICAgICAgICAgICBB
U1NFUlQobV9zaW5rQ2FuZGlkYXRlcy5jb250YWlucyhlbnRyeS5rZXkpIHx8ICFlc2NhcGVlcy5j
b250YWlucyhmaWVsZC52YWx1ZSkpOwotICAgICAgICAgICAgICAgIGlmIChlc2NhcGVlcy5jb250
YWlucyhmaWVsZC52YWx1ZSkpCi0gICAgICAgICAgICAgICAgICAgIGhpbnRzLmFwcGVuZChQcm9t
b3RlZEhlYXBMb2NhdGlvbihlbnRyeS5rZXksIGZpZWxkLmtleSkpOworICAgICAgICAgICAgICAg
IGF1dG8gaXRlciA9IGVzY2FwZWVzLmZpbmQoZmllbGQudmFsdWUpOworICAgICAgICAgICAgICAg
IGlmIChpdGVyICE9IGVzY2FwZWVzLmVuZCgpKSB7CisgICAgICAgICAgICAgICAgICAgIEFTU0VS
VChtX3NpbmtDYW5kaWRhdGVzLmNvbnRhaW5zKGZpZWxkLnZhbHVlKSk7CisgICAgICAgICAgICAg
ICAgICAgIGhpbnRzLmFwcGVuZChzdGQ6Om1ha2VfcGFpcihQcm9tb3RlZEhlYXBMb2NhdGlvbihl
bnRyeS5rZXksIGZpZWxkLmtleSksIGZpZWxkLnZhbHVlKSk7CisgICAgICAgICAgICAgICAgfQog
ICAgICAgICAgICAgfQogICAgICAgICB9CiAKQEAgLTE0MzAsMTAgKzE0NTAsOCBAQCBwcml2YXRl
OgogCiAgICAgICAgIC8vIFRoZSBoaW50cyBuZWVkIHRvIGJlIGFmdGVyIHRoZSAicmVhbCIgcmVj
b3ZlcmllcyBzbyB0aGF0IHdlCiAgICAgICAgIC8vIGRvbid0IGhpbnQgbm90LXlldC1jb21wbGV0
ZSBvYmplY3RzCi0gICAgICAgIGlmICghaGludHMuaXNFbXB0eSgpKSB7Ci0gICAgICAgICAgICBt
X21hdGVyaWFsaXphdGlvblNpdGVUb1JlY292ZXJpZXMuYWRkKAotICAgICAgICAgICAgICAgIHdo
ZXJlLCBWZWN0b3I8UHJvbW90ZWRIZWFwTG9jYXRpb24+KCkpLml0ZXJhdG9yLT52YWx1ZS5hcHBl
bmRWZWN0b3IoaGludHMpOwotICAgICAgICB9CisgICAgICAgIG1fbWF0ZXJpYWxpemF0aW9uU2l0
ZVRvSGludHMuYWRkKAorICAgICAgICAgICAgd2hlcmUsIFZlY3RvcjxzdGQ6OnBhaXI8UHJvbW90
ZWRIZWFwTG9jYXRpb24sIE5vZGUqPj4oKSkuaXRlcmF0b3ItPnZhbHVlLmFwcGVuZFZlY3Rvciho
aW50cyk7CiAgICAgfQogCiAgICAgTm9kZSogY3JlYXRlTWF0ZXJpYWxpemF0aW9uKGNvbnN0IEFs
bG9jYXRpb24mIGFsbG9jYXRpb24sIE5vZGUqIHdoZXJlKQpAQCAtMTU0Nyw2ICsxNTY1LDkgQEAg
cHJpdmF0ZToKICAgICAgICAgSGFzaE1hcDxGcm96ZW5WYWx1ZSosIE5vZGUqPiBsYXp5TWFwcGlu
ZzsKICAgICAgICAgaWYgKCFtX2JvdHRvbSkKICAgICAgICAgICAgIG1fYm90dG9tID0gbV9pbnNl
cnRpb25TZXQuaW5zZXJ0Q29uc3RhbnQoMCwgbV9ncmFwaC5ibG9jaygwKS0+YXQoMCktPm9yaWdp
biwganNOdW1iZXIoMTkyNykpOworCisgICAgICAgIFZlY3RvcjxIYXNoU2V0PFByb21vdGVkSGVh
cExvY2F0aW9uPj4gaGludHNGb3JQaGkobV9zaW5rQ2FuZGlkYXRlcy5zaXplKCkpOworCiAgICAg
ICAgIGZvciAoQmFzaWNCbG9jayogYmxvY2sgOiBtX2dyYXBoLmJsb2Nrc0luTmF0dXJhbE9yZGVy
KCkpIHsKICAgICAgICAgICAgIG1faGVhcCA9IG1faGVhcEF0SGVhZFtibG9ja107CiAKQEAgLTE1
NjgsNiArMTU4OSwzMSBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAgICAgICBtX2FsbG9jYXRp
b25TU0EubmV3RGVmKG1fbm9kZVRvVmFyaWFibGUuZ2V0KGVzY2FwZWUpLCBibG9jaywgbWF0ZXJp
YWxpemF0aW9uKTsKICAgICAgICAgICAgICAgICB9CiAKKyAgICAgICAgICAgICAgICBmb3IgKHN0
ZDo6cGFpcjxQcm9tb3RlZEhlYXBMb2NhdGlvbiwgTm9kZSo+IHBhaXIgOiBtX21hdGVyaWFsaXph
dGlvblNpdGVUb0hpbnRzLmdldChub2RlKSkgeworICAgICAgICAgICAgICAgICAgICBQcm9tb3Rl
ZEhlYXBMb2NhdGlvbiBsb2NhdGlvbiA9IHBhaXIuZmlyc3Q7CisgICAgICAgICAgICAgICAgICAg
IE5vZGUqIGlkZW50aWZpZXIgPSBwYWlyLnNlY29uZDsKKyAgICAgICAgICAgICAgICAgICAgLy8g
V2UncmUgbWF0ZXJpYWxpemluZyBgaWRlbnRpZmllcmAgYXQgdGhpcyBwb2ludCwgYW5kIHRoZSB1
bm1hdGVyaWFsaXplZAorICAgICAgICAgICAgICAgICAgICAvLyB2ZXJzaW9uIGlzIGluc2lkZSBg
bG9jYXRpb25gLiBXZSB0cmFjayB3aGljaCBTU0EgdmFyaWFibGUgdGhpcyBiZWxvbmdzCisgICAg
ICAgICAgICAgICAgICAgIC8vIHRvIGluIGNhc2Ugd2UgYWxzbyBuZWVkIGEgUHV0SGludCBmb3Ig
dGhlIFBoaS4KKyAgICAgICAgICAgICAgICAgICAgaWYgKFVOTElLRUxZKHZhbGlkYXRpb25FbmFi
bGVkKCkpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChtX3NpbmtD
YW5kaWRhdGVzLmNvbnRhaW5zKGxvY2F0aW9uLmJhc2UoKSkpOworICAgICAgICAgICAgICAgICAg
ICAgICAgUkVMRUFTRV9BU1NFUlQobV9zaW5rQ2FuZGlkYXRlcy5jb250YWlucyhpZGVudGlmaWVy
KSk7CisKKyAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgZm91bmQgPSBmYWxzZTsKKyAgICAg
ICAgICAgICAgICAgICAgICAgIGZvciAoTm9kZSogbWF0ZXJpYWxpemF0aW9uIDogbV9tYXRlcmlh
bGl6YXRpb25TaXRlVG9NYXRlcmlhbGl6YXRpb25zLmdldChub2RlKSkgeworICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIC8vIFdlJ3JlIG1hdGVyaWFsaXppbmcgYGlkZW50aWZpZXJgIGhlcmUu
IFRoaXMgYXNzZXJ0cyB0aGF0IHRoaXMgaXMgaW5kZWVkIHRoZSBjYXNlLgorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGlmIChtX21hdGVyaWFsaXphdGlvblRvRXNjYXBlZS5nZXQobWF0ZXJp
YWxpemF0aW9uKSA9PSBpZGVudGlmaWVyKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGZvdW5kID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAg
fQorICAgICAgICAgICAgICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQoZm91bmQpOworICAgICAg
ICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAgICAgU1NBQ2FsY3VsYXRvcjo6VmFy
aWFibGUqIHZhcmlhYmxlID0gbV9ub2RlVG9WYXJpYWJsZS5nZXQoaWRlbnRpZmllcik7CisgICAg
ICAgICAgICAgICAgICAgIGhpbnRzRm9yUGhpW3ZhcmlhYmxlLT5pbmRleCgpXS5hZGQobG9jYXRp
b24pOworICAgICAgICAgICAgICAgIH0KKwogICAgICAgICAgICAgICAgIGlmIChtX3NpbmtDYW5k
aWRhdGVzLmNvbnRhaW5zKG5vZGUpKQogICAgICAgICAgICAgICAgICAgICBtX2FsbG9jYXRpb25T
U0EubmV3RGVmKG1fbm9kZVRvVmFyaWFibGUuZ2V0KG5vZGUpLCBibG9jaywgbm9kZSk7CiAKQEAg
LTE2ODMsNiArMTcyOSwxMiBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAgIGluc2VydE9TUkhp
bnRzRm9yVXBkYXRlKAogICAgICAgICAgICAgICAgICAgICAwLCBibG9jay0+YXQoMCktPm9yaWdp
biwgY2FuRXhpdCwKICAgICAgICAgICAgICAgICAgICAgYXZhaWxhYmlsaXR5Q2FsY3VsYXRvci5t
X2F2YWlsYWJpbGl0eSwgaWRlbnRpZmllciwgcGhpRGVmLT52YWx1ZSgpKTsKKworICAgICAgICAg
ICAgICAgIGZvciAoUHJvbW90ZWRIZWFwTG9jYXRpb24gbG9jYXRpb24gOiBoaW50c0ZvclBoaVt2
YXJpYWJsZS0+aW5kZXgoKV0pIHsKKyAgICAgICAgICAgICAgICAgICAgbV9pbnNlcnRpb25TZXQu
aW5zZXJ0KDAsCisgICAgICAgICAgICAgICAgICAgICAgICBsb2NhdGlvbi5jcmVhdGVIaW50KG1f
Z3JhcGgsIGJsb2NrLT5hdCgwKS0+b3JpZ2luLndpdGhJbnZhbGlkRXhpdCgpLCBwaGlEZWYtPnZh
bHVlKCkpKTsKKyAgICAgICAgICAgICAgICAgICAgbV9sb2NhbE1hcHBpbmcuc2V0KGxvY2F0aW9u
LCBwaGlEZWYtPnZhbHVlKCkpOworICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KIAog
ICAgICAgICAgICAgaWYgKHZlcmJvc2UpIHsKQEAgLTE3MjIsNiArMTc3NCw4IEBAIHByaXZhdGU6
CiAKICAgICAgICAgICAgICAgICBmb3IgKFByb21vdGVkSGVhcExvY2F0aW9uIGxvY2F0aW9uIDog
bV9tYXRlcmlhbGl6YXRpb25TaXRlVG9SZWNvdmVyaWVzLmdldChub2RlKSkKICAgICAgICAgICAg
ICAgICAgICAgbV9pbnNlcnRpb25TZXQuaW5zZXJ0KG5vZGVJbmRleCwgY3JlYXRlUmVjb3Zlcnko
YmxvY2ssIGxvY2F0aW9uLCBub2RlLCBjYW5FeGl0KSk7CisgICAgICAgICAgICAgICAgZm9yIChz
dGQ6OnBhaXI8UHJvbW90ZWRIZWFwTG9jYXRpb24sIE5vZGUqPiBwYWlyIDogbV9tYXRlcmlhbGl6
YXRpb25TaXRlVG9IaW50cy5nZXQobm9kZSkpCisgICAgICAgICAgICAgICAgICAgIG1faW5zZXJ0
aW9uU2V0Lmluc2VydChub2RlSW5kZXgsIGNyZWF0ZVJlY292ZXJ5KGJsb2NrLCBwYWlyLmZpcnN0
LCBub2RlLCBjYW5FeGl0KSk7CiAKICAgICAgICAgICAgICAgICAvLyBXZSBuZWVkIHRvIHB1dCB0
aGUgT1NSIGhpbnRzIGFmdGVyIHRoZSByZWNvdmVyaWVzLAogICAgICAgICAgICAgICAgIC8vIGJl
Y2F1c2Ugd2Ugb25seSB3YW50IHRoZSBoaW50cyBvbmNlIHRoZSBvYmplY3QgaXMKQEAgLTIyMDks
NiArMjI2Myw3IEBAIHByaXZhdGU6CiAgICAgSGFzaE1hcDxOb2RlKiwgTm9kZSo+IG1fbWF0ZXJp
YWxpemF0aW9uVG9Fc2NhcGVlOwogICAgIEhhc2hNYXA8Tm9kZSosIFZlY3RvcjxOb2RlKj4+IG1f
bWF0ZXJpYWxpemF0aW9uU2l0ZVRvTWF0ZXJpYWxpemF0aW9uczsKICAgICBIYXNoTWFwPE5vZGUq
LCBWZWN0b3I8UHJvbW90ZWRIZWFwTG9jYXRpb24+PiBtX21hdGVyaWFsaXphdGlvblNpdGVUb1Jl
Y292ZXJpZXM7CisgICAgSGFzaE1hcDxOb2RlKiwgVmVjdG9yPHN0ZDo6cGFpcjxQcm9tb3RlZEhl
YXBMb2NhdGlvbiwgTm9kZSo+Pj4gbV9tYXRlcmlhbGl6YXRpb25TaXRlVG9IaW50czsKIAogICAg
IEhhc2hNYXA8Tm9kZSosIFZlY3RvcjxQcm9tb3RlZEhlYXBMb2NhdGlvbj4+IG1fbG9jYXRpb25z
Rm9yQWxsb2NhdGlvbjsKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExPcGVy
YXRpb25zLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTE9w
ZXJhdGlvbnMuY3BwCShyZXZpc2lvbiAyMTIxMjUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZnRsL0ZUTE9wZXJhdGlvbnMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMzIsNiArMTMyLDcgQEAg
ZXh0ZXJuICJDIiBKU0NlbGwqIEpJVF9PUEVSQVRJT04gb3BlcmF0aQogICAgICAgICAgICAgaWYg
KHByb3BlcnR5LmxvY2F0aW9uKCkgIT0gUHJvbW90ZWRMb2NhdGlvbkRlc2NyaXB0b3IoU3RydWN0
dXJlUExvYykpCiAgICAgICAgICAgICAgICAgY29udGludWU7CiAKKyAgICAgICAgICAgIFJFTEVB
U0VfQVNTRVJUKEpTVmFsdWU6OmRlY29kZSh2YWx1ZXNbaV0pLmFzQ2VsbCgpLT5pbmhlcml0cyh2
bSwgU3RydWN0dXJlOjppbmZvKCkpKTsKICAgICAgICAgICAgIHN0cnVjdHVyZSA9IGpzQ2FzdDxT
dHJ1Y3R1cmUqPihKU1ZhbHVlOjpkZWNvZGUodmFsdWVzW2ldKSk7CiAgICAgICAgICAgICBicmVh
azsKICAgICAgICAgfQpAQCAtMTYzLDEwICsxNjQsMTQgQEAgZXh0ZXJuICJDIiBKU0NlbGwqIEpJ
VF9PUEVSQVRJT04gb3BlcmF0aQogICAgICAgICBKU1Njb3BlKiBhY3RpdmF0aW9uID0gbnVsbHB0
cjsKICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gbWF0ZXJpYWxpemF0aW9uLT5wcm9wZXJ0aWVz
KCkuc2l6ZSgpOyBpLS07KSB7CiAgICAgICAgICAgICBjb25zdCBFeGl0UHJvcGVydHlWYWx1ZSYg
cHJvcGVydHkgPSBtYXRlcmlhbGl6YXRpb24tPnByb3BlcnRpZXMoKVtpXTsKLSAgICAgICAgICAg
IGlmIChwcm9wZXJ0eS5sb2NhdGlvbigpID09IFByb21vdGVkTG9jYXRpb25EZXNjcmlwdG9yKEZ1
bmN0aW9uRXhlY3V0YWJsZVBMb2MpKQorICAgICAgICAgICAgaWYgKHByb3BlcnR5LmxvY2F0aW9u
KCkgPT0gUHJvbW90ZWRMb2NhdGlvbkRlc2NyaXB0b3IoRnVuY3Rpb25FeGVjdXRhYmxlUExvYykp
IHsKKyAgICAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChKU1ZhbHVlOjpkZWNvZGUodmFsdWVz
W2ldKS5hc0NlbGwoKS0+aW5oZXJpdHModm0sIEZ1bmN0aW9uRXhlY3V0YWJsZTo6aW5mbygpKSk7
CiAgICAgICAgICAgICAgICAgZXhlY3V0YWJsZSA9IGpzQ2FzdDxGdW5jdGlvbkV4ZWN1dGFibGUq
PihKU1ZhbHVlOjpkZWNvZGUodmFsdWVzW2ldKSk7Ci0gICAgICAgICAgICBpZiAocHJvcGVydHku
bG9jYXRpb24oKSA9PSBQcm9tb3RlZExvY2F0aW9uRGVzY3JpcHRvcihGdW5jdGlvbkFjdGl2YXRp
b25QTG9jKSkKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIChwcm9wZXJ0eS5sb2NhdGlv
bigpID09IFByb21vdGVkTG9jYXRpb25EZXNjcmlwdG9yKEZ1bmN0aW9uQWN0aXZhdGlvblBMb2Mp
KSB7CisgICAgICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQoSlNWYWx1ZTo6ZGVjb2RlKHZhbHVl
c1tpXSkuYXNDZWxsKCktPmluaGVyaXRzKHZtLCBKU1Njb3BlOjppbmZvKCkpKTsKICAgICAgICAg
ICAgICAgICBhY3RpdmF0aW9uID0ganNDYXN0PEpTU2NvcGUqPihKU1ZhbHVlOjpkZWNvZGUodmFs
dWVzW2ldKSk7CisgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICAgICAgUkVMRUFTRV9BU1NF
UlQoZXhlY3V0YWJsZSAmJiBhY3RpdmF0aW9uKTsKIApAQCAtMTg0LDEwICsxODksMTMgQEAgZXh0
ZXJuICJDIiBKU0NlbGwqIEpJVF9PUEVSQVRJT04gb3BlcmF0aQogICAgICAgICBTeW1ib2xUYWJs
ZSogdGFibGUgPSBudWxscHRyOwogICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBtYXRlcmlhbGl6
YXRpb24tPnByb3BlcnRpZXMoKS5zaXplKCk7IGktLTspIHsKICAgICAgICAgICAgIGNvbnN0IEV4
aXRQcm9wZXJ0eVZhbHVlJiBwcm9wZXJ0eSA9IG1hdGVyaWFsaXphdGlvbi0+cHJvcGVydGllcygp
W2ldOwotICAgICAgICAgICAgaWYgKHByb3BlcnR5LmxvY2F0aW9uKCkgPT0gUHJvbW90ZWRMb2Nh
dGlvbkRlc2NyaXB0b3IoQWN0aXZhdGlvblNjb3BlUExvYykpCisgICAgICAgICAgICBpZiAocHJv
cGVydHkubG9jYXRpb24oKSA9PSBQcm9tb3RlZExvY2F0aW9uRGVzY3JpcHRvcihBY3RpdmF0aW9u
U2NvcGVQTG9jKSkgeworICAgICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKEpTVmFsdWU6OmRl
Y29kZSh2YWx1ZXNbaV0pLmFzQ2VsbCgpLT5pbmhlcml0cyh2bSwgSlNTY29wZTo6aW5mbygpKSk7
CiAgICAgICAgICAgICAgICAgc2NvcGUgPSBqc0Nhc3Q8SlNTY29wZSo+KEpTVmFsdWU6OmRlY29k
ZSh2YWx1ZXNbaV0pKTsKLSAgICAgICAgICAgIGVsc2UgaWYgKHByb3BlcnR5LmxvY2F0aW9uKCkg
PT0gUHJvbW90ZWRMb2NhdGlvbkRlc2NyaXB0b3IoQWN0aXZhdGlvblN5bWJvbFRhYmxlUExvYykp
CisgICAgICAgICAgICB9IGVsc2UgaWYgKHByb3BlcnR5LmxvY2F0aW9uKCkgPT0gUHJvbW90ZWRM
b2NhdGlvbkRlc2NyaXB0b3IoQWN0aXZhdGlvblN5bWJvbFRhYmxlUExvYykpIHsKKyAgICAgICAg
ICAgICAgICBSRUxFQVNFX0FTU0VSVChKU1ZhbHVlOjpkZWNvZGUodmFsdWVzW2ldKS5hc0NlbGwo
KS0+aW5oZXJpdHModm0sIFN5bWJvbFRhYmxlOjppbmZvKCkpKTsKICAgICAgICAgICAgICAgICB0
YWJsZSA9IGpzQ2FzdDxTeW1ib2xUYWJsZSo+KEpTVmFsdWU6OmRlY29kZSh2YWx1ZXNbaV0pKTsK
KyAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgICAgICBSRUxFQVNFX0FTU0VSVChzY29wZSk7
CiAgICAgICAgIFJFTEVBU0VfQVNTRVJUKHRhYmxlKTsK
</data>

          </attachment>
      

    </bug>

</bugzilla>