<?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>144290</bug_id>
          
          <creation_ts>2015-04-27 16:06:04 -0700</creation_ts>
          <short_desc>[Content Extensions] Use less memory for CombinedURLFilters</short_desc>
          <delta_ts>2015-04-28 12:41:36 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>WebCore Misc.</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Alex Christensen">achristensen</reporter>
          <assigned_to name="Alex Christensen">achristensen</assigned_to>
          <cc>benjamin</cc>
    
    <cc>cmarcelo</cc>
    
    <cc>commit-queue</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1089246</commentid>
    <comment_count>0</comment_count>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2015-04-27 16:06:04 -0700</bug_when>
    <thetext>The prefix tree uses too much memory.  Let&apos;s make it use less memory by using Vectors instead of HashTables, assuming the Vectors stay small because we still need to search through them.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1089249</commentid>
    <comment_count>1</comment_count>
      <attachid>251783</attachid>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2015-04-27 16:07:05 -0700</bug_when>
    <thetext>Created attachment 251783
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1089256</commentid>
    <comment_count>2</comment_count>
      <attachid>251784</attachid>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2015-04-27 16:25:08 -0700</bug_when>
    <thetext>Created attachment 251784
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1089266</commentid>
    <comment_count>3</comment_count>
      <attachid>251785</attachid>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2015-04-27 16:41:51 -0700</bug_when>
    <thetext>Created attachment 251785
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1089271</commentid>
    <comment_count>4</comment_count>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2015-04-27 16:46:44 -0700</bug_when>
    <thetext>This actually increases the memory usage.  Strange...</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1089650</commentid>
    <comment_count>5</comment_count>
      <attachid>251871</attachid>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2015-04-28 11:40:34 -0700</bug_when>
    <thetext>Created attachment 251871
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1089654</commentid>
    <comment_count>6</comment_count>
      <attachid>251871</attachid>
    <who name="Andreas Kling">kling</who>
    <bug_when>2015-04-28 11:49:53 -0700</bug_when>
    <thetext>Comment on attachment 251871
Patch

This seems pretty sensible. r=me

I&apos;m pretty sure we could drop the default 16 down to 8 or 4 too, but that would require a bit of testing.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1089669</commentid>
    <comment_count>7</comment_count>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2015-04-28 12:22:16 -0700</bug_when>
    <thetext>By the way, this reduces the memory usage of combinedURLFilters in ContentExtensionCompiler.cpp by a factor of 3.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1089687</commentid>
    <comment_count>8</comment_count>
      <attachid>251871</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2015-04-28 12:41:33 -0700</bug_when>
    <thetext>Comment on attachment 251871
Patch

Clearing flags on attachment: 251871

Committed r183499: &lt;http://trac.webkit.org/changeset/183499&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1089688</commentid>
    <comment_count>9</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2015-04-28 12:41:36 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>251783</attachid>
            <date>2015-04-27 16:07:05 -0700</date>
            <delta_ts>2015-04-27 16:25:06 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-144290-20150427160556.patch</filename>
            <type>text/plain</type>
            <size>7116</size>
            <attacher name="Alex Christensen">achristensen</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDE4MzQzMykKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE2IEBACisyMDE1LTA0LTI3ICBBbGV4IENo
cmlzdGVuc2VuICA8YWNocmlzdGVuc2VuQHdlYmtpdC5vcmc+CisKKyAgICAgICAgW0NvbnRlbnQg
RXh0ZW5zaW9uc10gVXNlIGxlc3MgbWVtb3J5IGZvciBDb21iaW5lZFVSTEZpbHRlcnMuCisgICAg
ICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNDQyOTAKKworICAg
ICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIGNvbnRlbnRleHRl
bnNpb25zL0NvbWJpbmVkVVJMRmlsdGVycy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDb250ZW50
RXh0ZW5zaW9uczo6cmVjdXJzaXZlTWVtb3J5VXNlZCk6CisgICAgICAgIChXZWJDb3JlOjpDb250
ZW50RXh0ZW5zaW9uczo6Q29tYmluZWRVUkxGaWx0ZXJzOjphZGRQYXR0ZXJuKToKKyAgICAgICAg
KFdlYkNvcmU6OkNvbnRlbnRFeHRlbnNpb25zOjpnZW5lcmF0ZU5GQUZvclN1YnRyZWUpOgorICAg
ICAgICAoV2ViQ29yZTo6Q29udGVudEV4dGVuc2lvbnM6OkNvbWJpbmVkVVJMRmlsdGVyczo6Y3Jl
YXRlTkZBcyk6CisKIDIwMTUtMDQtMjcgIEFsZXggQ2hyaXN0ZW5zZW4gIDxhY2hyaXN0ZW5zZW5A
d2Via2l0Lm9yZz4KIAogICAgICAgICBSZWR1Y2UgYWxsb2NhdGlvbnMgYW5kIG1lbW9yeSB1c2Fn
ZSB3aGVuIGNvbXBpbGluZyBjb250ZW50IGV4dGVuc2lvbnMuCkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9jb250ZW50ZXh0ZW5zaW9ucy9Db21iaW5lZFVSTEZpbHRlcnMuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL2NvbnRlbnRleHRlbnNpb25zL0NvbWJpbmVkVVJMRmlsdGVycy5jcHAJ
KHJldmlzaW9uIDE4MzM5NykKKysrIFNvdXJjZS9XZWJDb3JlL2NvbnRlbnRleHRlbnNpb25zL0Nv
bWJpbmVkVVJMRmlsdGVycy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI5LDEzICsyOSwxMyBAQAog
I2lmIEVOQUJMRShDT05URU5UX0VYVEVOU0lPTlMpCiAKICNpbmNsdWRlICJUZXJtLmgiCi0jaW5j
bHVkZSA8d3RmL0hhc2hNYXAuaD4KKyNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CiAKIG5hbWVzcGFj
ZSBXZWJDb3JlIHsKIAogbmFtZXNwYWNlIENvbnRlbnRFeHRlbnNpb25zIHsKIAotdHlwZWRlZiBI
YXNoTWFwPFRlcm0sIHN0ZDo6dW5pcXVlX3B0cjxQcmVmaXhUcmVlVmVydGV4PiwgVGVybUhhc2gs
IFRlcm1IYXNoVHJhaXRzPiBQcmVmaXhUcmVlRWRnZXM7Cit0eXBlZGVmIFZlY3RvcjxzdGQ6OnBh
aXI8VGVybSwgc3RkOjp1bmlxdWVfcHRyPFByZWZpeFRyZWVWZXJ0ZXg+Pj4gUHJlZml4VHJlZUVk
Z2VzOwogCiBzdHJ1Y3QgUHJlZml4VHJlZVZlcnRleCB7CiAgICAgUHJlZml4VHJlZUVkZ2VzIGVk
Z2VzOwpAQCAtNDgsOCArNDgsOCBAQCBzdGF0aWMgc2l6ZV90IHJlY3Vyc2l2ZU1lbW9yeVVzZWQo
Y29uc3QgCiAgICAgc2l6ZV90IHNpemUgPSBzaXplb2YoUHJlZml4VHJlZVZlcnRleCkKICAgICAg
ICAgKyBub2RlLT5lZGdlcy5jYXBhY2l0eSgpICogc2l6ZW9mKHN0ZDo6cGFpcjxUZXJtLCBzdGQ6
OnVuaXF1ZV9wdHI8UHJlZml4VHJlZVZlcnRleD4+KQogICAgICAgICArIG5vZGUtPmZpbmFsQWN0
aW9ucy5jYXBhY2l0eSgpICogc2l6ZW9mKHVpbnQ2NF90KTsKLSAgICBmb3IgKGNvbnN0IGF1dG8m
IGNoaWxkIDogbm9kZS0+ZWRnZXMudmFsdWVzKCkpCi0gICAgICAgIHNpemUgKz0gcmVjdXJzaXZl
TWVtb3J5VXNlZChjaGlsZCk7CisgICAgZm9yIChjb25zdCBhdXRvJiBjaGlsZCA6IG5vZGUtPmVk
Z2VzKQorICAgICAgICBzaXplICs9IHJlY3Vyc2l2ZU1lbW9yeVVzZWQoY2hpbGQuc2Vjb25kKTsK
ICAgICByZXR1cm4gc2l6ZTsKIH0KIApAQCAtODgsMTggKzg4LDIyIEBAIHZvaWQgQ29tYmluZWRV
UkxGaWx0ZXJzOjphZGRQYXR0ZXJuKHVpbnQKICAgICBwcmVmaXhUcmVlVmVydGljZXNGb3JQYXR0
ZXJuLmFwcGVuZChsYXN0UHJlZml4VHJlZSk7CiAKICAgICBmb3IgKGNvbnN0IFRlcm0mIHRlcm0g
OiBwYXR0ZXJuKSB7Ci0gICAgICAgIGF1dG8gbmV4dEVudHJ5ID0gbGFzdFByZWZpeFRyZWUtPmVk
Z2VzLmZpbmQodGVybSk7Ci0gICAgICAgIGlmIChuZXh0RW50cnkgIT0gbGFzdFByZWZpeFRyZWUt
PmVkZ2VzLmVuZCgpKQotICAgICAgICAgICAgbGFzdFByZWZpeFRyZWUgPSBuZXh0RW50cnktPnZh
bHVlLmdldCgpOworICAgICAgICBzaXplX3QgbmV4dEVudHJ5SW5kZXggPSBXVEY6Om5vdEZvdW5k
OworICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGxhc3RQcmVmaXhUcmVlLT5lZGdlcy5z
aXplKCk7ICsraSkgeworICAgICAgICAgICAgaWYgKGxhc3RQcmVmaXhUcmVlLT5lZGdlc1tpXS5m
aXJzdCA9PSB0ZXJtKSB7CisgICAgICAgICAgICAgICAgbmV4dEVudHJ5SW5kZXggPSBpOworICAg
ICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGlm
IChuZXh0RW50cnlJbmRleCAhPSBXVEY6Om5vdEZvdW5kKQorICAgICAgICAgICAgbGFzdFByZWZp
eFRyZWUgPSBsYXN0UHJlZml4VHJlZS0+ZWRnZXNbbmV4dEVudHJ5SW5kZXhdLnNlY29uZC5nZXQo
KTsKICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICBoYXNOZXdUZXJtID0gdHJ1ZTsKIAogICAg
ICAgICAgICAgc3RkOjp1bmlxdWVfcHRyPFByZWZpeFRyZWVWZXJ0ZXg+IG5leHRQcmVmaXhUcmVl
VmVydGV4ID0gc3RkOjptYWtlX3VuaXF1ZTxQcmVmaXhUcmVlVmVydGV4PigpOwogCi0gICAgICAg
ICAgICBhdXRvIGFkZFJlc3VsdCA9IGxhc3RQcmVmaXhUcmVlLT5lZGdlcy5zZXQodGVybSwgV1RG
Ojptb3ZlKG5leHRQcmVmaXhUcmVlVmVydGV4KSk7Ci0gICAgICAgICAgICBBU1NFUlQoYWRkUmVz
dWx0LmlzTmV3RW50cnkpOwotCi0gICAgICAgICAgICBsYXN0UHJlZml4VHJlZSA9IGFkZFJlc3Vs
dC5pdGVyYXRvci0+dmFsdWUuZ2V0KCk7CisgICAgICAgICAgICBsYXN0UHJlZml4VHJlZS0+ZWRn
ZXMuYXBwZW5kKHN0ZDo6bWFrZV9wYWlyKHRlcm0sIFdURjo6bW92ZShuZXh0UHJlZml4VHJlZVZl
cnRleCkpKTsKKyAgICAgICAgICAgIGxhc3RQcmVmaXhUcmVlID0gbGFzdFByZWZpeFRyZWUtPmVk
Z2VzLmxhc3QoKS5zZWNvbmQuZ2V0KCk7CiAgICAgICAgIH0KICAgICAgICAgcHJlZml4VHJlZVZl
cnRpY2VzRm9yUGF0dGVybi5hcHBlbmQobGFzdFByZWZpeFRyZWUpOwogICAgIH0KQEAgLTE0Miwx
MyArMTQ2LDEzIEBAIHN0YXRpYyB2b2lkIGdlbmVyYXRlTkZBRm9yU3VidHJlZShORkEmIG4KICAg
ICB3aGlsZSAodHJ1ZSkgewogICAgIFByb2Nlc3NTdWJ0cmVlOgogICAgICAgICBmb3IgKEFjdGl2
ZU5GQVN1YnRyZWUmIGFjdGl2ZVN1YnRyZWUgPSBhY3RpdmVTdGFjay5sYXN0KCk7IGFjdGl2ZVN1
YnRyZWUuaXRlcmF0b3IgIT0gYWN0aXZlU3VidHJlZS52ZXJ0ZXgtPmVkZ2VzLmVuZCgpOyArK2Fj
dGl2ZVN1YnRyZWUuaXRlcmF0b3IpIHsKLSAgICAgICAgICAgIGlmIChhY3RpdmVTdWJ0cmVlLml0
ZXJhdG9yLT52YWx1ZS0+aW5WYXJpYWJsZUxlbmd0aFByZWZpeCkKKyAgICAgICAgICAgIGlmIChh
Y3RpdmVTdWJ0cmVlLml0ZXJhdG9yLT5zZWNvbmQtPmluVmFyaWFibGVMZW5ndGhQcmVmaXgpCiAg
ICAgICAgICAgICAgICAgY29udGludWU7CiAKLSAgICAgICAgICAgIGNvbnN0IFRlcm0mIHRlcm0g
PSBhY3RpdmVTdWJ0cmVlLml0ZXJhdG9yLT5rZXk7Ci0gICAgICAgICAgICB1bnNpZ25lZCBuZXdF
bmROb2RlSW5kZXggPSB0ZXJtLmdlbmVyYXRlR3JhcGgobmZhLCBhY3RpdmVTdWJ0cmVlLmxhc3RO
b2RlSW5kZXgsIGFjdGl2ZVN1YnRyZWUuaXRlcmF0b3ItPnZhbHVlLT5maW5hbEFjdGlvbnMpOwor
ICAgICAgICAgICAgY29uc3QgVGVybSYgdGVybSA9IGFjdGl2ZVN1YnRyZWUuaXRlcmF0b3ItPmZp
cnN0OworICAgICAgICAgICAgdW5zaWduZWQgbmV3RW5kTm9kZUluZGV4ID0gdGVybS5nZW5lcmF0
ZUdyYXBoKG5mYSwgYWN0aXZlU3VidHJlZS5sYXN0Tm9kZUluZGV4LCBhY3RpdmVTdWJ0cmVlLml0
ZXJhdG9yLT5zZWNvbmQtPmZpbmFsQWN0aW9ucyk7CiAKLSAgICAgICAgICAgIFByZWZpeFRyZWVW
ZXJ0ZXgqIHByZWZpeFRyZWVWZXJ0ZXggPSBhY3RpdmVTdWJ0cmVlLml0ZXJhdG9yLT52YWx1ZS5n
ZXQoKTsKKyAgICAgICAgICAgIFByZWZpeFRyZWVWZXJ0ZXgqIHByZWZpeFRyZWVWZXJ0ZXggPSBh
Y3RpdmVTdWJ0cmVlLml0ZXJhdG9yLT5zZWNvbmQuZ2V0KCk7CiAgICAgICAgICAgICBpZiAoIXBy
ZWZpeFRyZWVWZXJ0ZXgtPmVkZ2VzLmlzRW1wdHkoKSkgewogICAgICAgICAgICAgICAgIGFjdGl2
ZVN0YWNrLmFwcGVuZChBY3RpdmVORkFTdWJ0cmVlKHByZWZpeFRyZWVWZXJ0ZXgsIHByZWZpeFRy
ZWVWZXJ0ZXgtPmVkZ2VzLmJlZ2luKCksIG5ld0VuZE5vZGVJbmRleCkpOwogICAgICAgICAgICAg
ICAgIGdvdG8gUHJvY2Vzc1N1YnRyZWU7CkBAIC0xNzUsNyArMTc5LDcgQEAgVmVjdG9yPE5GQT4g
Q29tYmluZWRVUkxGaWx0ZXJzOjpjcmVhdGVORgogCiAgICAgICAgIC8vIFdlIGdvIGRlcHRoIGZp
cnN0IGludG8gdGhlIHN1YnRyZWVzIHdpdGggdmFyaWFibGUgcHJlZml4LiBGaW5kIHRoZSBuZXh0
IHN1YnRyZWUuCiAgICAgICAgIGZvciAoOyBhY3RpdmVTdWJ0cmVlLml0ZXJhdG9yICE9IGFjdGl2
ZVN1YnRyZWUudmVydGV4LT5lZGdlcy5lbmQoKTsgKythY3RpdmVTdWJ0cmVlLml0ZXJhdG9yKSB7
Ci0gICAgICAgICAgICBQcmVmaXhUcmVlVmVydGV4KiBwcmVmaXhUcmVlVmVydGV4ID0gYWN0aXZl
U3VidHJlZS5pdGVyYXRvci0+dmFsdWUuZ2V0KCk7CisgICAgICAgICAgICBQcmVmaXhUcmVlVmVy
dGV4KiBwcmVmaXhUcmVlVmVydGV4ID0gYWN0aXZlU3VidHJlZS5pdGVyYXRvci0+c2Vjb25kLmdl
dCgpOwogICAgICAgICAgICAgaWYgKHByZWZpeFRyZWVWZXJ0ZXgtPmluVmFyaWFibGVMZW5ndGhQ
cmVmaXgpIHsKICAgICAgICAgICAgICAgICBhY3RpdmVTdGFjay5hcHBlbmQoQWN0aXZlU3VidHJl
ZSh7IHByZWZpeFRyZWVWZXJ0ZXgsIHByZWZpeFRyZWVWZXJ0ZXgtPmVkZ2VzLmJlZ2luKCkgfSkp
OwogICAgICAgICAgICAgICAgIGdvdG8gUHJvY2Vzc1N1YnRyZWU7CkBAIC0xODcsNyArMTkxLDcg
QEAgVmVjdG9yPE5GQT4gQ29tYmluZWRVUkxGaWx0ZXJzOjpjcmVhdGVORgogICAgICAgICBib29s
IG5lZWRUb0dlbmVyYXRlID0gYWN0aXZlU3VidHJlZS52ZXJ0ZXgtPmVkZ2VzLmlzRW1wdHkoKSAm
JiAhYWN0aXZlU3VidHJlZS52ZXJ0ZXgtPmZpbmFsQWN0aW9ucy5pc0VtcHR5KCk7CiAgICAgICAg
IGlmICghbmVlZFRvR2VuZXJhdGUpIHsKICAgICAgICAgICAgIGZvciAoY29uc3QgYXV0byYgZWRn
ZSA6IGFjdGl2ZVN1YnRyZWUudmVydGV4LT5lZGdlcykgewotICAgICAgICAgICAgICAgIGlmICgh
ZWRnZS52YWx1ZS0+aW5WYXJpYWJsZUxlbmd0aFByZWZpeCkgeworICAgICAgICAgICAgICAgIGlm
ICghZWRnZS5zZWNvbmQtPmluVmFyaWFibGVMZW5ndGhQcmVmaXgpIHsKICAgICAgICAgICAgICAg
ICAgICAgbmVlZFRvR2VuZXJhdGUgPSB0cnVlOwogICAgICAgICAgICAgICAgICAgICBicmVhazsK
ICAgICAgICAgICAgICAgICB9CkBAIC0yMDEsMTUgKzIwNSwxNSBAQCBWZWN0b3I8TkZBPiBDb21i
aW5lZFVSTEZpbHRlcnM6OmNyZWF0ZU5GCiAgICAgICAgICAgICB1bnNpZ25lZCBwcmVmaXhFbmQg
PSBnZW5lcmF0aW5nTkZBLnJvb3QoKTsKIAogICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0g
MDsgaSA8IGFjdGl2ZVN0YWNrLnNpemUoKSAtIDE7ICsraSkgewotICAgICAgICAgICAgICAgIGNv
bnN0IFRlcm0mIHRlcm0gPSBhY3RpdmVTdGFja1tpXS5pdGVyYXRvci0+a2V5OwotICAgICAgICAg
ICAgICAgIHByZWZpeEVuZCA9IHRlcm0uZ2VuZXJhdGVHcmFwaChnZW5lcmF0aW5nTkZBLCBwcmVm
aXhFbmQsIGFjdGl2ZVN0YWNrW2ldLml0ZXJhdG9yLT52YWx1ZS0+ZmluYWxBY3Rpb25zKTsKKyAg
ICAgICAgICAgICAgICBjb25zdCBUZXJtJiB0ZXJtID0gYWN0aXZlU3RhY2tbaV0uaXRlcmF0b3It
PmZpcnN0OworICAgICAgICAgICAgICAgIHByZWZpeEVuZCA9IHRlcm0uZ2VuZXJhdGVHcmFwaChn
ZW5lcmF0aW5nTkZBLCBwcmVmaXhFbmQsIGFjdGl2ZVN0YWNrW2ldLml0ZXJhdG9yLT5zZWNvbmQt
PmZpbmFsQWN0aW9ucyk7CiAgICAgICAgICAgICB9CiAKICAgICAgICAgICAgIGZvciAoY29uc3Qg
YXV0byYgZWRnZSA6IGFjdGl2ZVN1YnRyZWUudmVydGV4LT5lZGdlcykgewotICAgICAgICAgICAg
ICAgIGlmICghZWRnZS52YWx1ZS0+aW5WYXJpYWJsZUxlbmd0aFByZWZpeCkgewotICAgICAgICAg
ICAgICAgICAgICBjb25zdCBUZXJtJiB0ZXJtID0gZWRnZS5rZXk7Ci0gICAgICAgICAgICAgICAg
ICAgIHVuc2lnbmVkIG5ld1N1YnRyZWVTdGFydCA9IHRlcm0uZ2VuZXJhdGVHcmFwaChnZW5lcmF0
aW5nTkZBLCBwcmVmaXhFbmQsIGVkZ2UudmFsdWUtPmZpbmFsQWN0aW9ucyk7Ci0gICAgICAgICAg
ICAgICAgICAgIGdlbmVyYXRlTkZBRm9yU3VidHJlZShnZW5lcmF0aW5nTkZBLCBuZXdTdWJ0cmVl
U3RhcnQsICplZGdlLnZhbHVlKTsKKyAgICAgICAgICAgICAgICBpZiAoIWVkZ2Uuc2Vjb25kLT5p
blZhcmlhYmxlTGVuZ3RoUHJlZml4KSB7CisgICAgICAgICAgICAgICAgICAgIGNvbnN0IFRlcm0m
IHRlcm0gPSBlZGdlLmZpcnN0OworICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBuZXdTdWJ0
cmVlU3RhcnQgPSB0ZXJtLmdlbmVyYXRlR3JhcGgoZ2VuZXJhdGluZ05GQSwgcHJlZml4RW5kLCBl
ZGdlLnNlY29uZC0+ZmluYWxBY3Rpb25zKTsKKyAgICAgICAgICAgICAgICAgICAgZ2VuZXJhdGVO
RkFGb3JTdWJ0cmVlKGdlbmVyYXRpbmdORkEsIG5ld1N1YnRyZWVTdGFydCwgKmVkZ2Uuc2Vjb25k
KTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9CiAgICAgICAgIH0K
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>251784</attachid>
            <date>2015-04-27 16:25:08 -0700</date>
            <delta_ts>2015-04-27 16:41:49 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-144290-20150427162400.patch</filename>
            <type>text/plain</type>
            <size>10483</size>
            <attacher name="Alex Christensen">achristensen</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDE4MzQzNCkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDIzIEBACisyMDE1LTA0LTI3ICBBbGV4IENo
cmlzdGVuc2VuICA8YWNocmlzdGVuc2VuQHdlYmtpdC5vcmc+CisKKyAgICAgICAgW0NvbnRlbnQg
RXh0ZW5zaW9uc10gVXNlIGxlc3MgbWVtb3J5IGZvciBDb21iaW5lZFVSTEZpbHRlcnMuCisgICAg
ICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNDQyOTAKKworICAg
ICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIGNvbnRlbnRleHRl
bnNpb25zL0NvbWJpbmVkVVJMRmlsdGVycy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDb250ZW50
RXh0ZW5zaW9uczo6cmVjdXJzaXZlTWVtb3J5VXNlZCk6CisgICAgICAgIChXZWJDb3JlOjpDb250
ZW50RXh0ZW5zaW9uczo6Q29tYmluZWRVUkxGaWx0ZXJzOjphZGRQYXR0ZXJuKToKKyAgICAgICAg
KFdlYkNvcmU6OkNvbnRlbnRFeHRlbnNpb25zOjpnZW5lcmF0ZU5GQUZvclN1YnRyZWUpOgorICAg
ICAgICAoV2ViQ29yZTo6Q29udGVudEV4dGVuc2lvbnM6OkNvbWJpbmVkVVJMRmlsdGVyczo6Y3Jl
YXRlTkZBcyk6CisgICAgICAgICogY29udGVudGV4dGVuc2lvbnMvTkZBLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OkNvbnRlbnRFeHRlbnNpb25zOjpORkE6OnNldEFjdGlvbnMpOgorICAgICAgICAq
IGNvbnRlbnRleHRlbnNpb25zL05GQS5oOgorICAgICAgICAqIGNvbnRlbnRleHRlbnNpb25zL1Rl
cm0uaDoKKyAgICAgICAgKFdlYkNvcmU6OkNvbnRlbnRFeHRlbnNpb25zOjpUZXJtOjpUZXJtOjpn
ZW5lcmF0ZUdyYXBoKToKKyAgICAgICAgKFdlYkNvcmU6OkNvbnRlbnRFeHRlbnNpb25zOjpUZXJt
OjpnZW5lcmF0ZVN1YmdyYXBoRm9yQXRvbSk6CisgICAgICAgIFVzZSBWZWN0b3JzIGluc3RlYWQg
b2YgSGFzaE1hcHMgYW5kIEhhc2hTZXRzIGluIFByZWZpeFRyZWVWZXJ0ZXguCisKIDIwMTUtMDQt
MjcgIEFsZXggQ2hyaXN0ZW5zZW4gIDxhY2hyaXN0ZW5zZW5Ad2Via2l0Lm9yZz4KIAogICAgICAg
ICBSZWR1Y2UgYWxsb2NhdGlvbnMgYW5kIG1lbW9yeSB1c2FnZSB3aGVuIGNvbXBpbGluZyBjb250
ZW50IGV4dGVuc2lvbnMuCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9jb250ZW50ZXh0ZW5zaW9ucy9D
b21iaW5lZFVSTEZpbHRlcnMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2NvbnRl
bnRleHRlbnNpb25zL0NvbWJpbmVkVVJMRmlsdGVycy5jcHAJKHJldmlzaW9uIDE4MzM5NykKKysr
IFNvdXJjZS9XZWJDb3JlL2NvbnRlbnRleHRlbnNpb25zL0NvbWJpbmVkVVJMRmlsdGVycy5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTI5LDE3ICsyOSwxNyBAQAogI2lmIEVOQUJMRShDT05URU5UX0VY
VEVOU0lPTlMpCiAKICNpbmNsdWRlICJUZXJtLmgiCi0jaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4K
KyNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogbmFtZXNw
YWNlIENvbnRlbnRFeHRlbnNpb25zIHsKIAotdHlwZWRlZiBIYXNoTWFwPFRlcm0sIHN0ZDo6dW5p
cXVlX3B0cjxQcmVmaXhUcmVlVmVydGV4PiwgVGVybUhhc2gsIFRlcm1IYXNoVHJhaXRzPiBQcmVm
aXhUcmVlRWRnZXM7Cit0eXBlZGVmIFZlY3RvcjxzdGQ6OnBhaXI8VGVybSwgc3RkOjp1bmlxdWVf
cHRyPFByZWZpeFRyZWVWZXJ0ZXg+Pj4gUHJlZml4VHJlZUVkZ2VzOwogCiBzdHJ1Y3QgUHJlZml4
VHJlZVZlcnRleCB7CiAgICAgUHJlZml4VHJlZUVkZ2VzIGVkZ2VzOwotICAgIEFjdGlvblNldCBm
aW5hbEFjdGlvbnM7CisgICAgVmVjdG9yPHVpbnQ2NF90PiBmaW5hbEFjdGlvbnM7CiAgICAgYm9v
bCBpblZhcmlhYmxlTGVuZ3RoUHJlZml4IHsgZmFsc2UgfTsKIH07CiAKQEAgLTQ4LDggKzQ4LDgg
QEAgc3RhdGljIHNpemVfdCByZWN1cnNpdmVNZW1vcnlVc2VkKGNvbnN0IAogICAgIHNpemVfdCBz
aXplID0gc2l6ZW9mKFByZWZpeFRyZWVWZXJ0ZXgpCiAgICAgICAgICsgbm9kZS0+ZWRnZXMuY2Fw
YWNpdHkoKSAqIHNpemVvZihzdGQ6OnBhaXI8VGVybSwgc3RkOjp1bmlxdWVfcHRyPFByZWZpeFRy
ZWVWZXJ0ZXg+PikKICAgICAgICAgKyBub2RlLT5maW5hbEFjdGlvbnMuY2FwYWNpdHkoKSAqIHNp
emVvZih1aW50NjRfdCk7Ci0gICAgZm9yIChjb25zdCBhdXRvJiBjaGlsZCA6IG5vZGUtPmVkZ2Vz
LnZhbHVlcygpKQotICAgICAgICBzaXplICs9IHJlY3Vyc2l2ZU1lbW9yeVVzZWQoY2hpbGQpOwor
ICAgIGZvciAoY29uc3QgYXV0byYgY2hpbGQgOiBub2RlLT5lZGdlcykKKyAgICAgICAgc2l6ZSAr
PSByZWN1cnNpdmVNZW1vcnlVc2VkKGNoaWxkLnNlY29uZCk7CiAgICAgcmV0dXJuIHNpemU7CiB9
CiAKQEAgLTg4LDIzICs4OCwyOSBAQCB2b2lkIENvbWJpbmVkVVJMRmlsdGVyczo6YWRkUGF0dGVy
bih1aW50CiAgICAgcHJlZml4VHJlZVZlcnRpY2VzRm9yUGF0dGVybi5hcHBlbmQobGFzdFByZWZp
eFRyZWUpOwogCiAgICAgZm9yIChjb25zdCBUZXJtJiB0ZXJtIDogcGF0dGVybikgewotICAgICAg
ICBhdXRvIG5leHRFbnRyeSA9IGxhc3RQcmVmaXhUcmVlLT5lZGdlcy5maW5kKHRlcm0pOwotICAg
ICAgICBpZiAobmV4dEVudHJ5ICE9IGxhc3RQcmVmaXhUcmVlLT5lZGdlcy5lbmQoKSkKLSAgICAg
ICAgICAgIGxhc3RQcmVmaXhUcmVlID0gbmV4dEVudHJ5LT52YWx1ZS5nZXQoKTsKKyAgICAgICAg
c2l6ZV90IG5leHRFbnRyeUluZGV4ID0gV1RGOjpub3RGb3VuZDsKKyAgICAgICAgZm9yIChzaXpl
X3QgaSA9IDA7IGkgPCBsYXN0UHJlZml4VHJlZS0+ZWRnZXMuc2l6ZSgpOyArK2kpIHsKKyAgICAg
ICAgICAgIGlmIChsYXN0UHJlZml4VHJlZS0+ZWRnZXNbaV0uZmlyc3QgPT0gdGVybSkgeworICAg
ICAgICAgICAgICAgIG5leHRFbnRyeUluZGV4ID0gaTsKKyAgICAgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBpZiAobmV4dEVudHJ5SW5kZXggIT0g
V1RGOjpub3RGb3VuZCkKKyAgICAgICAgICAgIGxhc3RQcmVmaXhUcmVlID0gbGFzdFByZWZpeFRy
ZWUtPmVkZ2VzW25leHRFbnRyeUluZGV4XS5zZWNvbmQuZ2V0KCk7CiAgICAgICAgIGVsc2Ugewog
ICAgICAgICAgICAgaGFzTmV3VGVybSA9IHRydWU7CiAKICAgICAgICAgICAgIHN0ZDo6dW5pcXVl
X3B0cjxQcmVmaXhUcmVlVmVydGV4PiBuZXh0UHJlZml4VHJlZVZlcnRleCA9IHN0ZDo6bWFrZV91
bmlxdWU8UHJlZml4VHJlZVZlcnRleD4oKTsKIAotICAgICAgICAgICAgYXV0byBhZGRSZXN1bHQg
PSBsYXN0UHJlZml4VHJlZS0+ZWRnZXMuc2V0KHRlcm0sIFdURjo6bW92ZShuZXh0UHJlZml4VHJl
ZVZlcnRleCkpOwotICAgICAgICAgICAgQVNTRVJUKGFkZFJlc3VsdC5pc05ld0VudHJ5KTsKLQot
ICAgICAgICAgICAgbGFzdFByZWZpeFRyZWUgPSBhZGRSZXN1bHQuaXRlcmF0b3ItPnZhbHVlLmdl
dCgpOworICAgICAgICAgICAgbGFzdFByZWZpeFRyZWUtPmVkZ2VzLmFwcGVuZChzdGQ6Om1ha2Vf
cGFpcih0ZXJtLCBXVEY6Om1vdmUobmV4dFByZWZpeFRyZWVWZXJ0ZXgpKSk7CisgICAgICAgICAg
ICBsYXN0UHJlZml4VHJlZSA9IGxhc3RQcmVmaXhUcmVlLT5lZGdlcy5sYXN0KCkuc2Vjb25kLmdl
dCgpOwogICAgICAgICB9CiAgICAgICAgIHByZWZpeFRyZWVWZXJ0aWNlc0ZvclBhdHRlcm4uYXBw
ZW5kKGxhc3RQcmVmaXhUcmVlKTsKICAgICB9CiAKLSAgICBwcmVmaXhUcmVlVmVydGljZXNGb3JQ
YXR0ZXJuLmxhc3QoKS0+ZmluYWxBY3Rpb25zLmFkZChhY3Rpb25JZCk7CisgICAgVmVjdG9yPHVp
bnQ2NF90PiYgYWN0aW9ucyA9IHByZWZpeFRyZWVWZXJ0aWNlc0ZvclBhdHRlcm4ubGFzdCgpLT5m
aW5hbEFjdGlvbnM7CisgICAgaWYgKGFjdGlvbnMuZmluZChhY3Rpb25JZCkgPT0gV1RGOjpub3RG
b3VuZCkKKyAgICAgICAgYWN0aW9ucy5hcHBlbmQoYWN0aW9uSWQpOwogCiAgICAgaWYgKCFoYXNO
ZXdUZXJtKQogICAgICAgICByZXR1cm47CkBAIC0xNDIsMTMgKzE0OCwxMyBAQCBzdGF0aWMgdm9p
ZCBnZW5lcmF0ZU5GQUZvclN1YnRyZWUoTkZBJiBuCiAgICAgd2hpbGUgKHRydWUpIHsKICAgICBQ
cm9jZXNzU3VidHJlZToKICAgICAgICAgZm9yIChBY3RpdmVORkFTdWJ0cmVlJiBhY3RpdmVTdWJ0
cmVlID0gYWN0aXZlU3RhY2subGFzdCgpOyBhY3RpdmVTdWJ0cmVlLml0ZXJhdG9yICE9IGFjdGl2
ZVN1YnRyZWUudmVydGV4LT5lZGdlcy5lbmQoKTsgKythY3RpdmVTdWJ0cmVlLml0ZXJhdG9yKSB7
Ci0gICAgICAgICAgICBpZiAoYWN0aXZlU3VidHJlZS5pdGVyYXRvci0+dmFsdWUtPmluVmFyaWFi
bGVMZW5ndGhQcmVmaXgpCisgICAgICAgICAgICBpZiAoYWN0aXZlU3VidHJlZS5pdGVyYXRvci0+
c2Vjb25kLT5pblZhcmlhYmxlTGVuZ3RoUHJlZml4KQogICAgICAgICAgICAgICAgIGNvbnRpbnVl
OwogCi0gICAgICAgICAgICBjb25zdCBUZXJtJiB0ZXJtID0gYWN0aXZlU3VidHJlZS5pdGVyYXRv
ci0+a2V5OwotICAgICAgICAgICAgdW5zaWduZWQgbmV3RW5kTm9kZUluZGV4ID0gdGVybS5nZW5l
cmF0ZUdyYXBoKG5mYSwgYWN0aXZlU3VidHJlZS5sYXN0Tm9kZUluZGV4LCBhY3RpdmVTdWJ0cmVl
Lml0ZXJhdG9yLT52YWx1ZS0+ZmluYWxBY3Rpb25zKTsKKyAgICAgICAgICAgIGNvbnN0IFRlcm0m
IHRlcm0gPSBhY3RpdmVTdWJ0cmVlLml0ZXJhdG9yLT5maXJzdDsKKyAgICAgICAgICAgIHVuc2ln
bmVkIG5ld0VuZE5vZGVJbmRleCA9IHRlcm0uZ2VuZXJhdGVHcmFwaChuZmEsIGFjdGl2ZVN1YnRy
ZWUubGFzdE5vZGVJbmRleCwgYWN0aXZlU3VidHJlZS5pdGVyYXRvci0+c2Vjb25kLT5maW5hbEFj
dGlvbnMpOwogCi0gICAgICAgICAgICBQcmVmaXhUcmVlVmVydGV4KiBwcmVmaXhUcmVlVmVydGV4
ID0gYWN0aXZlU3VidHJlZS5pdGVyYXRvci0+dmFsdWUuZ2V0KCk7CisgICAgICAgICAgICBQcmVm
aXhUcmVlVmVydGV4KiBwcmVmaXhUcmVlVmVydGV4ID0gYWN0aXZlU3VidHJlZS5pdGVyYXRvci0+
c2Vjb25kLmdldCgpOwogICAgICAgICAgICAgaWYgKCFwcmVmaXhUcmVlVmVydGV4LT5lZGdlcy5p
c0VtcHR5KCkpIHsKICAgICAgICAgICAgICAgICBhY3RpdmVTdGFjay5hcHBlbmQoQWN0aXZlTkZB
U3VidHJlZShwcmVmaXhUcmVlVmVydGV4LCBwcmVmaXhUcmVlVmVydGV4LT5lZGdlcy5iZWdpbigp
LCBuZXdFbmROb2RlSW5kZXgpKTsKICAgICAgICAgICAgICAgICBnb3RvIFByb2Nlc3NTdWJ0cmVl
OwpAQCAtMTc1LDcgKzE4MSw3IEBAIFZlY3RvcjxORkE+IENvbWJpbmVkVVJMRmlsdGVyczo6Y3Jl
YXRlTkYKIAogICAgICAgICAvLyBXZSBnbyBkZXB0aCBmaXJzdCBpbnRvIHRoZSBzdWJ0cmVlcyB3
aXRoIHZhcmlhYmxlIHByZWZpeC4gRmluZCB0aGUgbmV4dCBzdWJ0cmVlLgogICAgICAgICBmb3Ig
KDsgYWN0aXZlU3VidHJlZS5pdGVyYXRvciAhPSBhY3RpdmVTdWJ0cmVlLnZlcnRleC0+ZWRnZXMu
ZW5kKCk7ICsrYWN0aXZlU3VidHJlZS5pdGVyYXRvcikgewotICAgICAgICAgICAgUHJlZml4VHJl
ZVZlcnRleCogcHJlZml4VHJlZVZlcnRleCA9IGFjdGl2ZVN1YnRyZWUuaXRlcmF0b3ItPnZhbHVl
LmdldCgpOworICAgICAgICAgICAgUHJlZml4VHJlZVZlcnRleCogcHJlZml4VHJlZVZlcnRleCA9
IGFjdGl2ZVN1YnRyZWUuaXRlcmF0b3ItPnNlY29uZC5nZXQoKTsKICAgICAgICAgICAgIGlmIChw
cmVmaXhUcmVlVmVydGV4LT5pblZhcmlhYmxlTGVuZ3RoUHJlZml4KSB7CiAgICAgICAgICAgICAg
ICAgYWN0aXZlU3RhY2suYXBwZW5kKEFjdGl2ZVN1YnRyZWUoeyBwcmVmaXhUcmVlVmVydGV4LCBw
cmVmaXhUcmVlVmVydGV4LT5lZGdlcy5iZWdpbigpIH0pKTsKICAgICAgICAgICAgICAgICBnb3Rv
IFByb2Nlc3NTdWJ0cmVlOwpAQCAtMTg3LDcgKzE5Myw3IEBAIFZlY3RvcjxORkE+IENvbWJpbmVk
VVJMRmlsdGVyczo6Y3JlYXRlTkYKICAgICAgICAgYm9vbCBuZWVkVG9HZW5lcmF0ZSA9IGFjdGl2
ZVN1YnRyZWUudmVydGV4LT5lZGdlcy5pc0VtcHR5KCkgJiYgIWFjdGl2ZVN1YnRyZWUudmVydGV4
LT5maW5hbEFjdGlvbnMuaXNFbXB0eSgpOwogICAgICAgICBpZiAoIW5lZWRUb0dlbmVyYXRlKSB7
CiAgICAgICAgICAgICBmb3IgKGNvbnN0IGF1dG8mIGVkZ2UgOiBhY3RpdmVTdWJ0cmVlLnZlcnRl
eC0+ZWRnZXMpIHsKLSAgICAgICAgICAgICAgICBpZiAoIWVkZ2UudmFsdWUtPmluVmFyaWFibGVM
ZW5ndGhQcmVmaXgpIHsKKyAgICAgICAgICAgICAgICBpZiAoIWVkZ2Uuc2Vjb25kLT5pblZhcmlh
YmxlTGVuZ3RoUHJlZml4KSB7CiAgICAgICAgICAgICAgICAgICAgIG5lZWRUb0dlbmVyYXRlID0g
dHJ1ZTsKICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgfQpAQCAt
MjAxLDE1ICsyMDcsMTUgQEAgVmVjdG9yPE5GQT4gQ29tYmluZWRVUkxGaWx0ZXJzOjpjcmVhdGVO
RgogICAgICAgICAgICAgdW5zaWduZWQgcHJlZml4RW5kID0gZ2VuZXJhdGluZ05GQS5yb290KCk7
CiAKICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBhY3RpdmVTdGFjay5zaXpl
KCkgLSAxOyArK2kpIHsKLSAgICAgICAgICAgICAgICBjb25zdCBUZXJtJiB0ZXJtID0gYWN0aXZl
U3RhY2tbaV0uaXRlcmF0b3ItPmtleTsKLSAgICAgICAgICAgICAgICBwcmVmaXhFbmQgPSB0ZXJt
LmdlbmVyYXRlR3JhcGgoZ2VuZXJhdGluZ05GQSwgcHJlZml4RW5kLCBhY3RpdmVTdGFja1tpXS5p
dGVyYXRvci0+dmFsdWUtPmZpbmFsQWN0aW9ucyk7CisgICAgICAgICAgICAgICAgY29uc3QgVGVy
bSYgdGVybSA9IGFjdGl2ZVN0YWNrW2ldLml0ZXJhdG9yLT5maXJzdDsKKyAgICAgICAgICAgICAg
ICBwcmVmaXhFbmQgPSB0ZXJtLmdlbmVyYXRlR3JhcGgoZ2VuZXJhdGluZ05GQSwgcHJlZml4RW5k
LCBhY3RpdmVTdGFja1tpXS5pdGVyYXRvci0+c2Vjb25kLT5maW5hbEFjdGlvbnMpOwogICAgICAg
ICAgICAgfQogCiAgICAgICAgICAgICBmb3IgKGNvbnN0IGF1dG8mIGVkZ2UgOiBhY3RpdmVTdWJ0
cmVlLnZlcnRleC0+ZWRnZXMpIHsKLSAgICAgICAgICAgICAgICBpZiAoIWVkZ2UudmFsdWUtPmlu
VmFyaWFibGVMZW5ndGhQcmVmaXgpIHsKLSAgICAgICAgICAgICAgICAgICAgY29uc3QgVGVybSYg
dGVybSA9IGVkZ2Uua2V5OwotICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBuZXdTdWJ0cmVl
U3RhcnQgPSB0ZXJtLmdlbmVyYXRlR3JhcGgoZ2VuZXJhdGluZ05GQSwgcHJlZml4RW5kLCBlZGdl
LnZhbHVlLT5maW5hbEFjdGlvbnMpOwotICAgICAgICAgICAgICAgICAgICBnZW5lcmF0ZU5GQUZv
clN1YnRyZWUoZ2VuZXJhdGluZ05GQSwgbmV3U3VidHJlZVN0YXJ0LCAqZWRnZS52YWx1ZSk7Cisg
ICAgICAgICAgICAgICAgaWYgKCFlZGdlLnNlY29uZC0+aW5WYXJpYWJsZUxlbmd0aFByZWZpeCkg
eworICAgICAgICAgICAgICAgICAgICBjb25zdCBUZXJtJiB0ZXJtID0gZWRnZS5maXJzdDsKKyAg
ICAgICAgICAgICAgICAgICAgdW5zaWduZWQgbmV3U3VidHJlZVN0YXJ0ID0gdGVybS5nZW5lcmF0
ZUdyYXBoKGdlbmVyYXRpbmdORkEsIHByZWZpeEVuZCwgZWRnZS5zZWNvbmQtPmZpbmFsQWN0aW9u
cyk7CisgICAgICAgICAgICAgICAgICAgIGdlbmVyYXRlTkZBRm9yU3VidHJlZShnZW5lcmF0aW5n
TkZBLCBuZXdTdWJ0cmVlU3RhcnQsICplZGdlLnNlY29uZCk7CiAgICAgICAgICAgICAgICAgfQog
ICAgICAgICAgICAgfQogICAgICAgICB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9jb250ZW50ZXh0
ZW5zaW9ucy9ORkEuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2NvbnRlbnRleHRl
bnNpb25zL05GQS5jcHAJKHJldmlzaW9uIDE4MzM5NykKKysrIFNvdXJjZS9XZWJDb3JlL2NvbnRl
bnRleHRlbnNpb25zL05GQS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTkzLDcgKzkzLDcgQEAgdm9p
ZCBORkE6OmFkZFRyYW5zaXRpb25zT25BbnlDaGFyYWN0ZXIodQogICAgICAgICB0cmFuc2l0aW9u
U2xvdC52YWx1ZS5yZW1vdmUodG8pOwogfQogCi12b2lkIE5GQTo6c2V0QWN0aW9ucyh1bnNpZ25l
ZCBub2RlLCBjb25zdCBBY3Rpb25TZXQmIGFjdGlvbnMpCit2b2lkIE5GQTo6c2V0QWN0aW9ucyh1
bnNpZ25lZCBub2RlLCBjb25zdCBWZWN0b3I8dWludDY0X3Q+JiBhY3Rpb25zKQogewogICAgIEFT
U0VSVF9XSVRIX01FU1NBR0UobV9ub2Rlc1tub2RlXS5maW5hbFJ1bGVJZHMuaXNFbXB0eSgpLCAi
VGhlIGZpbmFsIHN0YXRlIHNob3VsZCBvbmx5IGJlIGRlZmluZWQgb25jZS4iKTsKICAgICBjb3B5
VG9WZWN0b3IoYWN0aW9ucywgbV9ub2Rlc1tub2RlXS5maW5hbFJ1bGVJZHMpOwpJbmRleDogU291
cmNlL1dlYkNvcmUvY29udGVudGV4dGVuc2lvbnMvTkZBLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvY29udGVudGV4dGVuc2lvbnMvTkZBLmgJKHJldmlzaW9uIDE4MzM5NykKKysrIFNv
dXJjZS9XZWJDb3JlL2NvbnRlbnRleHRlbnNpb25zL05GQS5oCSh3b3JraW5nIGNvcHkpCkBAIC01
MSw3ICs1MSw3IEBAIHB1YmxpYzoKICAgICB2b2lkIGFkZFRyYW5zaXRpb24odW5zaWduZWQgZnJv
bSwgdW5zaWduZWQgdG8sIGNoYXIgY2hhcmFjdGVyKTsKICAgICB2b2lkIGFkZEVwc2lsb25UcmFu
c2l0aW9uKHVuc2lnbmVkIGZyb20sIHVuc2lnbmVkIHRvKTsKICAgICB2b2lkIGFkZFRyYW5zaXRp
b25zT25BbnlDaGFyYWN0ZXIodW5zaWduZWQgZnJvbSwgdW5zaWduZWQgdG8pOwotICAgIHZvaWQg
c2V0QWN0aW9ucyh1bnNpZ25lZCBub2RlLCBjb25zdCBBY3Rpb25TZXQmIGZpbmFsQWN0aW9ucyk7
CisgICAgdm9pZCBzZXRBY3Rpb25zKHVuc2lnbmVkIG5vZGUsIGNvbnN0IFZlY3Rvcjx1aW50NjRf
dD4mIGZpbmFsQWN0aW9ucyk7CiAKICAgICB1bnNpZ25lZCBncmFwaFNpemUoKSBjb25zdDsKICAg
ICB2b2lkIHJlc3RvcmVUb0dyYXBoU2l6ZSh1bnNpZ25lZCk7CkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9jb250ZW50ZXh0ZW5zaW9ucy9UZXJtLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
Y29udGVudGV4dGVuc2lvbnMvVGVybS5oCShyZXZpc2lvbiAxODM0MzMpCisrKyBTb3VyY2UvV2Vi
Q29yZS9jb250ZW50ZXh0ZW5zaW9ucy9UZXJtLmgJKHdvcmtpbmcgY29weSkKQEAgLTgzLDcgKzgz
LDcgQEAgcHVibGljOgogCiAgICAgdm9pZCBxdWFudGlmeShjb25zdCBBdG9tUXVhbnRpZmllciYp
OwogCi0gICAgdW5zaWduZWQgZ2VuZXJhdGVHcmFwaChORkEmLCB1bnNpZ25lZCBzdGFydCwgY29u
c3QgQWN0aW9uU2V0JiBmaW5hbEFjdGlvbnMpIGNvbnN0OworICAgIHVuc2lnbmVkIGdlbmVyYXRl
R3JhcGgoTkZBJiwgdW5zaWduZWQgc3RhcnQsIGNvbnN0IFZlY3Rvcjx1aW50NjRfdD4mIGZpbmFs
QWN0aW9ucykgY29uc3Q7CiAKICAgICBib29sIGlzRW5kT2ZMaW5lQXNzZXJ0aW9uKCkgY29uc3Q7
CiAKQEAgLTMzNSw3ICszMzUsNyBAQCBpbmxpbmUgdm9pZCBUZXJtOjpxdWFudGlmeShjb25zdCBB
dG9tUXVhCiAgICAgbV9xdWFudGlmaWVyID0gcXVhbnRpZmllcjsKIH0KIAotaW5saW5lIHVuc2ln
bmVkIFRlcm06OlRlcm06OmdlbmVyYXRlR3JhcGgoTkZBJiBuZmEsIHVuc2lnbmVkIHN0YXJ0LCBj
b25zdCBBY3Rpb25TZXQmIGZpbmFsQWN0aW9ucykgY29uc3QKK2lubGluZSB1bnNpZ25lZCBUZXJt
OjpUZXJtOjpnZW5lcmF0ZUdyYXBoKE5GQSYgbmZhLCB1bnNpZ25lZCBzdGFydCwgY29uc3QgVmVj
dG9yPHVpbnQ2NF90PiYgZmluYWxBY3Rpb25zKSBjb25zdAogewogICAgIEFTU0VSVChpc1ZhbGlk
KCkpOwogCkBAIC01ODEsNyArNTgxLDcgQEAgaW5saW5lIHVuc2lnbmVkIFRlcm06OmdlbmVyYXRl
U3ViZ3JhcGhGbwogICAgIGNhc2UgVGVybVR5cGU6Okdyb3VwOiB7CiAgICAgICAgIHVuc2lnbmVk
IGxhc3RUYXJnZXQgPSBzb3VyY2U7CiAgICAgICAgIGZvciAoY29uc3QgVGVybSYgdGVybSA6IG1f
YXRvbURhdGEuZ3JvdXAudGVybXMpCi0gICAgICAgICAgICBsYXN0VGFyZ2V0ID0gdGVybS5nZW5l
cmF0ZUdyYXBoKG5mYSwgbGFzdFRhcmdldCwgQWN0aW9uU2V0KCkpOworICAgICAgICAgICAgbGFz
dFRhcmdldCA9IHRlcm0uZ2VuZXJhdGVHcmFwaChuZmEsIGxhc3RUYXJnZXQsIFZlY3Rvcjx1aW50
NjRfdD4oKSk7CiAgICAgICAgIHJldHVybiBsYXN0VGFyZ2V0OwogICAgIH0KICAgICB9Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>251785</attachid>
            <date>2015-04-27 16:41:51 -0700</date>
            <delta_ts>2015-04-28 11:40:31 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-144290-20150427164043.patch</filename>
            <type>text/plain</type>
            <size>10613</size>
            <attacher name="Alex Christensen">achristensen</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDE4MzQxOSkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDIzIEBACisyMDE1LTA0LTI3ICBBbGV4IENo
cmlzdGVuc2VuICA8YWNocmlzdGVuc2VuQHdlYmtpdC5vcmc+CisKKyAgICAgICAgW0NvbnRlbnQg
RXh0ZW5zaW9uc10gVXNlIGxlc3MgbWVtb3J5IGZvciBDb21iaW5lZFVSTEZpbHRlcnMuCisgICAg
ICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNDQyOTAKKworICAg
ICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIGNvbnRlbnRleHRl
bnNpb25zL0NvbWJpbmVkVVJMRmlsdGVycy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDb250ZW50
RXh0ZW5zaW9uczo6cmVjdXJzaXZlTWVtb3J5VXNlZCk6CisgICAgICAgIChXZWJDb3JlOjpDb250
ZW50RXh0ZW5zaW9uczo6Q29tYmluZWRVUkxGaWx0ZXJzOjphZGRQYXR0ZXJuKToKKyAgICAgICAg
KFdlYkNvcmU6OkNvbnRlbnRFeHRlbnNpb25zOjpnZW5lcmF0ZU5GQUZvclN1YnRyZWUpOgorICAg
ICAgICAoV2ViQ29yZTo6Q29udGVudEV4dGVuc2lvbnM6OkNvbWJpbmVkVVJMRmlsdGVyczo6Y3Jl
YXRlTkZBcyk6CisgICAgICAgICogY29udGVudGV4dGVuc2lvbnMvTkZBLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OkNvbnRlbnRFeHRlbnNpb25zOjpORkE6OnNldEFjdGlvbnMpOgorICAgICAgICAq
IGNvbnRlbnRleHRlbnNpb25zL05GQS5oOgorICAgICAgICAqIGNvbnRlbnRleHRlbnNpb25zL1Rl
cm0uaDoKKyAgICAgICAgKFdlYkNvcmU6OkNvbnRlbnRFeHRlbnNpb25zOjpUZXJtOjpUZXJtOjpn
ZW5lcmF0ZUdyYXBoKToKKyAgICAgICAgKFdlYkNvcmU6OkNvbnRlbnRFeHRlbnNpb25zOjpUZXJt
OjpnZW5lcmF0ZVN1YmdyYXBoRm9yQXRvbSk6CisgICAgICAgIFVzZSBWZWN0b3JzIGluc3RlYWQg
b2YgSGFzaE1hcHMgYW5kIEhhc2hTZXRzIGluIFByZWZpeFRyZWVWZXJ0ZXguCisKIDIwMTUtMDQt
MjcgIEVyaWMgQ2FybHNvbiAgPGVyaWMuY2FybHNvbkBhcHBsZS5jb20+CiAKICAgICAgICAgV2ly
ZWxlc3NUYXJnZXRQaWNrZXIgc2hvdWxkIG5vdCBiZSB2aXNpYmxlIHVubGVzcyBhIGZpbGUgaXMg
cGxheWFibGUKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2NvbnRlbnRleHRlbnNpb25zL0NvbWJpbmVk
VVJMRmlsdGVycy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvY29udGVudGV4dGVu
c2lvbnMvQ29tYmluZWRVUkxGaWx0ZXJzLmNwcAkocmV2aXNpb24gMTgzNDE5KQorKysgU291cmNl
L1dlYkNvcmUvY29udGVudGV4dGVuc2lvbnMvQ29tYmluZWRVUkxGaWx0ZXJzLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMjksMTcgKzI5LDE3IEBACiAjaWYgRU5BQkxFKENPTlRFTlRfRVhURU5TSU9O
UykKIAogI2luY2x1ZGUgIlRlcm0uaCIKLSNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgorI2luY2x1
ZGUgPHd0Zi9WZWN0b3IuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCiBuYW1lc3BhY2UgQ29u
dGVudEV4dGVuc2lvbnMgewogCi10eXBlZGVmIEhhc2hNYXA8VGVybSwgc3RkOjp1bmlxdWVfcHRy
PFByZWZpeFRyZWVWZXJ0ZXg+LCBUZXJtSGFzaCwgVGVybUhhc2hUcmFpdHM+IFByZWZpeFRyZWVF
ZGdlczsKK3R5cGVkZWYgVmVjdG9yPHN0ZDo6cGFpcjxUZXJtLCBzdGQ6OnVuaXF1ZV9wdHI8UHJl
Zml4VHJlZVZlcnRleD4+PiBQcmVmaXhUcmVlRWRnZXM7CiAKIHN0cnVjdCBQcmVmaXhUcmVlVmVy
dGV4IHsKICAgICBQcmVmaXhUcmVlRWRnZXMgZWRnZXM7Ci0gICAgQWN0aW9uU2V0IGZpbmFsQWN0
aW9uczsKKyAgICBWZWN0b3I8dWludDY0X3Q+IGZpbmFsQWN0aW9uczsKICAgICBib29sIGluVmFy
aWFibGVMZW5ndGhQcmVmaXggeyBmYWxzZSB9OwogfTsKIApAQCAtNDgsOCArNDgsOCBAQCBzdGF0
aWMgc2l6ZV90IHJlY3Vyc2l2ZU1lbW9yeVVzZWQoY29uc3QgCiAgICAgc2l6ZV90IHNpemUgPSBz
aXplb2YoUHJlZml4VHJlZVZlcnRleCkKICAgICAgICAgKyBub2RlLT5lZGdlcy5jYXBhY2l0eSgp
ICogc2l6ZW9mKHN0ZDo6cGFpcjxUZXJtLCBzdGQ6OnVuaXF1ZV9wdHI8UHJlZml4VHJlZVZlcnRl
eD4+KQogICAgICAgICArIG5vZGUtPmZpbmFsQWN0aW9ucy5jYXBhY2l0eSgpICogc2l6ZW9mKHVp
bnQ2NF90KTsKLSAgICBmb3IgKGNvbnN0IGF1dG8mIGNoaWxkIDogbm9kZS0+ZWRnZXMudmFsdWVz
KCkpCi0gICAgICAgIHNpemUgKz0gcmVjdXJzaXZlTWVtb3J5VXNlZChjaGlsZCk7CisgICAgZm9y
IChjb25zdCBhdXRvJiBjaGlsZCA6IG5vZGUtPmVkZ2VzKQorICAgICAgICBzaXplICs9IHJlY3Vy
c2l2ZU1lbW9yeVVzZWQoY2hpbGQuc2Vjb25kKTsKICAgICByZXR1cm4gc2l6ZTsKIH0KIApAQCAt
ODgsMjMgKzg4LDMwIEBAIHZvaWQgQ29tYmluZWRVUkxGaWx0ZXJzOjphZGRQYXR0ZXJuKHVpbnQK
ICAgICBwcmVmaXhUcmVlVmVydGljZXNGb3JQYXR0ZXJuLmFwcGVuZChsYXN0UHJlZml4VHJlZSk7
CiAKICAgICBmb3IgKGNvbnN0IFRlcm0mIHRlcm0gOiBwYXR0ZXJuKSB7Ci0gICAgICAgIGF1dG8g
bmV4dEVudHJ5ID0gbGFzdFByZWZpeFRyZWUtPmVkZ2VzLmZpbmQodGVybSk7Ci0gICAgICAgIGlm
IChuZXh0RW50cnkgIT0gbGFzdFByZWZpeFRyZWUtPmVkZ2VzLmVuZCgpKQotICAgICAgICAgICAg
bGFzdFByZWZpeFRyZWUgPSBuZXh0RW50cnktPnZhbHVlLmdldCgpOworICAgICAgICBzaXplX3Qg
bmV4dEVudHJ5SW5kZXggPSBXVEY6Om5vdEZvdW5kOworICAgICAgICBmb3IgKHNpemVfdCBpID0g
MDsgaSA8IGxhc3RQcmVmaXhUcmVlLT5lZGdlcy5zaXplKCk7ICsraSkgeworICAgICAgICAgICAg
aWYgKGxhc3RQcmVmaXhUcmVlLT5lZGdlc1tpXS5maXJzdCA9PSB0ZXJtKSB7CisgICAgICAgICAg
ICAgICAgbmV4dEVudHJ5SW5kZXggPSBpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICAgICAgfQorICAgICAgICB9CisgICAgICAgIGlmIChuZXh0RW50cnlJbmRleCAhPSBXVEY6Om5v
dEZvdW5kKQorICAgICAgICAgICAgbGFzdFByZWZpeFRyZWUgPSBsYXN0UHJlZml4VHJlZS0+ZWRn
ZXNbbmV4dEVudHJ5SW5kZXhdLnNlY29uZC5nZXQoKTsKICAgICAgICAgZWxzZSB7CiAgICAgICAg
ICAgICBoYXNOZXdUZXJtID0gdHJ1ZTsKIAogICAgICAgICAgICAgc3RkOjp1bmlxdWVfcHRyPFBy
ZWZpeFRyZWVWZXJ0ZXg+IG5leHRQcmVmaXhUcmVlVmVydGV4ID0gc3RkOjptYWtlX3VuaXF1ZTxQ
cmVmaXhUcmVlVmVydGV4PigpOwogCi0gICAgICAgICAgICBhdXRvIGFkZFJlc3VsdCA9IGxhc3RQ
cmVmaXhUcmVlLT5lZGdlcy5zZXQodGVybSwgV1RGOjptb3ZlKG5leHRQcmVmaXhUcmVlVmVydGV4
KSk7Ci0gICAgICAgICAgICBBU1NFUlQoYWRkUmVzdWx0LmlzTmV3RW50cnkpOwotCi0gICAgICAg
ICAgICBsYXN0UHJlZml4VHJlZSA9IGFkZFJlc3VsdC5pdGVyYXRvci0+dmFsdWUuZ2V0KCk7Cisg
ICAgICAgICAgICBBU1NFUlQobGFzdFByZWZpeFRyZWUtPmVkZ2VzLmZpbmQoc3RkOjptYWtlX3Bh
aXIodGVybSwgV1RGOjptb3ZlKHN0ZDo6bWFrZV91bmlxdWU8UHJlZml4VHJlZVZlcnRleD4oKSkp
KSA9PSBXVEY6Om5vdEZvdW5kKTsKKyAgICAgICAgICAgIGxhc3RQcmVmaXhUcmVlLT5lZGdlcy5h
cHBlbmQoc3RkOjptYWtlX3BhaXIodGVybSwgV1RGOjptb3ZlKG5leHRQcmVmaXhUcmVlVmVydGV4
KSkpOworICAgICAgICAgICAgbGFzdFByZWZpeFRyZWUgPSBsYXN0UHJlZml4VHJlZS0+ZWRnZXMu
bGFzdCgpLnNlY29uZC5nZXQoKTsKICAgICAgICAgfQogICAgICAgICBwcmVmaXhUcmVlVmVydGlj
ZXNGb3JQYXR0ZXJuLmFwcGVuZChsYXN0UHJlZml4VHJlZSk7CiAgICAgfQogCi0gICAgcHJlZml4
VHJlZVZlcnRpY2VzRm9yUGF0dGVybi5sYXN0KCktPmZpbmFsQWN0aW9ucy5hZGQoYWN0aW9uSWQp
OworICAgIFZlY3Rvcjx1aW50NjRfdD4mIGFjdGlvbnMgPSBwcmVmaXhUcmVlVmVydGljZXNGb3JQ
YXR0ZXJuLmxhc3QoKS0+ZmluYWxBY3Rpb25zOworICAgIGlmIChhY3Rpb25zLmZpbmQoYWN0aW9u
SWQpID09IFdURjo6bm90Rm91bmQpCisgICAgICAgIGFjdGlvbnMuYXBwZW5kKGFjdGlvbklkKTsK
IAogICAgIGlmICghaGFzTmV3VGVybSkKICAgICAgICAgcmV0dXJuOwpAQCAtMTQyLDEzICsxNDks
MTMgQEAgc3RhdGljIHZvaWQgZ2VuZXJhdGVORkFGb3JTdWJ0cmVlKE5GQSYgbgogICAgIHdoaWxl
ICh0cnVlKSB7CiAgICAgUHJvY2Vzc1N1YnRyZWU6CiAgICAgICAgIGZvciAoQWN0aXZlTkZBU3Vi
dHJlZSYgYWN0aXZlU3VidHJlZSA9IGFjdGl2ZVN0YWNrLmxhc3QoKTsgYWN0aXZlU3VidHJlZS5p
dGVyYXRvciAhPSBhY3RpdmVTdWJ0cmVlLnZlcnRleC0+ZWRnZXMuZW5kKCk7ICsrYWN0aXZlU3Vi
dHJlZS5pdGVyYXRvcikgewotICAgICAgICAgICAgaWYgKGFjdGl2ZVN1YnRyZWUuaXRlcmF0b3It
PnZhbHVlLT5pblZhcmlhYmxlTGVuZ3RoUHJlZml4KQorICAgICAgICAgICAgaWYgKGFjdGl2ZVN1
YnRyZWUuaXRlcmF0b3ItPnNlY29uZC0+aW5WYXJpYWJsZUxlbmd0aFByZWZpeCkKICAgICAgICAg
ICAgICAgICBjb250aW51ZTsKIAotICAgICAgICAgICAgY29uc3QgVGVybSYgdGVybSA9IGFjdGl2
ZVN1YnRyZWUuaXRlcmF0b3ItPmtleTsKLSAgICAgICAgICAgIHVuc2lnbmVkIG5ld0VuZE5vZGVJ
bmRleCA9IHRlcm0uZ2VuZXJhdGVHcmFwaChuZmEsIGFjdGl2ZVN1YnRyZWUubGFzdE5vZGVJbmRl
eCwgYWN0aXZlU3VidHJlZS5pdGVyYXRvci0+dmFsdWUtPmZpbmFsQWN0aW9ucyk7CisgICAgICAg
ICAgICBjb25zdCBUZXJtJiB0ZXJtID0gYWN0aXZlU3VidHJlZS5pdGVyYXRvci0+Zmlyc3Q7Cisg
ICAgICAgICAgICB1bnNpZ25lZCBuZXdFbmROb2RlSW5kZXggPSB0ZXJtLmdlbmVyYXRlR3JhcGgo
bmZhLCBhY3RpdmVTdWJ0cmVlLmxhc3ROb2RlSW5kZXgsIGFjdGl2ZVN1YnRyZWUuaXRlcmF0b3It
PnNlY29uZC0+ZmluYWxBY3Rpb25zKTsKIAotICAgICAgICAgICAgUHJlZml4VHJlZVZlcnRleCog
cHJlZml4VHJlZVZlcnRleCA9IGFjdGl2ZVN1YnRyZWUuaXRlcmF0b3ItPnZhbHVlLmdldCgpOwor
ICAgICAgICAgICAgUHJlZml4VHJlZVZlcnRleCogcHJlZml4VHJlZVZlcnRleCA9IGFjdGl2ZVN1
YnRyZWUuaXRlcmF0b3ItPnNlY29uZC5nZXQoKTsKICAgICAgICAgICAgIGlmICghcHJlZml4VHJl
ZVZlcnRleC0+ZWRnZXMuaXNFbXB0eSgpKSB7CiAgICAgICAgICAgICAgICAgYWN0aXZlU3RhY2su
YXBwZW5kKEFjdGl2ZU5GQVN1YnRyZWUocHJlZml4VHJlZVZlcnRleCwgcHJlZml4VHJlZVZlcnRl
eC0+ZWRnZXMuYmVnaW4oKSwgbmV3RW5kTm9kZUluZGV4KSk7CiAgICAgICAgICAgICAgICAgZ290
byBQcm9jZXNzU3VidHJlZTsKQEAgLTE3NSw3ICsxODIsNyBAQCBWZWN0b3I8TkZBPiBDb21iaW5l
ZFVSTEZpbHRlcnM6OmNyZWF0ZU5GCiAKICAgICAgICAgLy8gV2UgZ28gZGVwdGggZmlyc3QgaW50
byB0aGUgc3VidHJlZXMgd2l0aCB2YXJpYWJsZSBwcmVmaXguIEZpbmQgdGhlIG5leHQgc3VidHJl
ZS4KICAgICAgICAgZm9yICg7IGFjdGl2ZVN1YnRyZWUuaXRlcmF0b3IgIT0gYWN0aXZlU3VidHJl
ZS52ZXJ0ZXgtPmVkZ2VzLmVuZCgpOyArK2FjdGl2ZVN1YnRyZWUuaXRlcmF0b3IpIHsKLSAgICAg
ICAgICAgIFByZWZpeFRyZWVWZXJ0ZXgqIHByZWZpeFRyZWVWZXJ0ZXggPSBhY3RpdmVTdWJ0cmVl
Lml0ZXJhdG9yLT52YWx1ZS5nZXQoKTsKKyAgICAgICAgICAgIFByZWZpeFRyZWVWZXJ0ZXgqIHBy
ZWZpeFRyZWVWZXJ0ZXggPSBhY3RpdmVTdWJ0cmVlLml0ZXJhdG9yLT5zZWNvbmQuZ2V0KCk7CiAg
ICAgICAgICAgICBpZiAocHJlZml4VHJlZVZlcnRleC0+aW5WYXJpYWJsZUxlbmd0aFByZWZpeCkg
ewogICAgICAgICAgICAgICAgIGFjdGl2ZVN0YWNrLmFwcGVuZChBY3RpdmVTdWJ0cmVlKHsgcHJl
Zml4VHJlZVZlcnRleCwgcHJlZml4VHJlZVZlcnRleC0+ZWRnZXMuYmVnaW4oKSB9KSk7CiAgICAg
ICAgICAgICAgICAgZ290byBQcm9jZXNzU3VidHJlZTsKQEAgLTE4Nyw3ICsxOTQsNyBAQCBWZWN0
b3I8TkZBPiBDb21iaW5lZFVSTEZpbHRlcnM6OmNyZWF0ZU5GCiAgICAgICAgIGJvb2wgbmVlZFRv
R2VuZXJhdGUgPSBhY3RpdmVTdWJ0cmVlLnZlcnRleC0+ZWRnZXMuaXNFbXB0eSgpICYmICFhY3Rp
dmVTdWJ0cmVlLnZlcnRleC0+ZmluYWxBY3Rpb25zLmlzRW1wdHkoKTsKICAgICAgICAgaWYgKCFu
ZWVkVG9HZW5lcmF0ZSkgewogICAgICAgICAgICAgZm9yIChjb25zdCBhdXRvJiBlZGdlIDogYWN0
aXZlU3VidHJlZS52ZXJ0ZXgtPmVkZ2VzKSB7Ci0gICAgICAgICAgICAgICAgaWYgKCFlZGdlLnZh
bHVlLT5pblZhcmlhYmxlTGVuZ3RoUHJlZml4KSB7CisgICAgICAgICAgICAgICAgaWYgKCFlZGdl
LnNlY29uZC0+aW5WYXJpYWJsZUxlbmd0aFByZWZpeCkgewogICAgICAgICAgICAgICAgICAgICBu
ZWVkVG9HZW5lcmF0ZSA9IHRydWU7CiAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAg
ICAgICAgICAgIH0KQEAgLTIwMSwxNSArMjA4LDE1IEBAIFZlY3RvcjxORkE+IENvbWJpbmVkVVJM
RmlsdGVyczo6Y3JlYXRlTkYKICAgICAgICAgICAgIHVuc2lnbmVkIHByZWZpeEVuZCA9IGdlbmVy
YXRpbmdORkEucm9vdCgpOwogCiAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwg
YWN0aXZlU3RhY2suc2l6ZSgpIC0gMTsgKytpKSB7Ci0gICAgICAgICAgICAgICAgY29uc3QgVGVy
bSYgdGVybSA9IGFjdGl2ZVN0YWNrW2ldLml0ZXJhdG9yLT5rZXk7Ci0gICAgICAgICAgICAgICAg
cHJlZml4RW5kID0gdGVybS5nZW5lcmF0ZUdyYXBoKGdlbmVyYXRpbmdORkEsIHByZWZpeEVuZCwg
YWN0aXZlU3RhY2tbaV0uaXRlcmF0b3ItPnZhbHVlLT5maW5hbEFjdGlvbnMpOworICAgICAgICAg
ICAgICAgIGNvbnN0IFRlcm0mIHRlcm0gPSBhY3RpdmVTdGFja1tpXS5pdGVyYXRvci0+Zmlyc3Q7
CisgICAgICAgICAgICAgICAgcHJlZml4RW5kID0gdGVybS5nZW5lcmF0ZUdyYXBoKGdlbmVyYXRp
bmdORkEsIHByZWZpeEVuZCwgYWN0aXZlU3RhY2tbaV0uaXRlcmF0b3ItPnNlY29uZC0+ZmluYWxB
Y3Rpb25zKTsKICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgZm9yIChjb25zdCBhdXRvJiBl
ZGdlIDogYWN0aXZlU3VidHJlZS52ZXJ0ZXgtPmVkZ2VzKSB7Ci0gICAgICAgICAgICAgICAgaWYg
KCFlZGdlLnZhbHVlLT5pblZhcmlhYmxlTGVuZ3RoUHJlZml4KSB7Ci0gICAgICAgICAgICAgICAg
ICAgIGNvbnN0IFRlcm0mIHRlcm0gPSBlZGdlLmtleTsKLSAgICAgICAgICAgICAgICAgICAgdW5z
aWduZWQgbmV3U3VidHJlZVN0YXJ0ID0gdGVybS5nZW5lcmF0ZUdyYXBoKGdlbmVyYXRpbmdORkEs
IHByZWZpeEVuZCwgZWRnZS52YWx1ZS0+ZmluYWxBY3Rpb25zKTsKLSAgICAgICAgICAgICAgICAg
ICAgZ2VuZXJhdGVORkFGb3JTdWJ0cmVlKGdlbmVyYXRpbmdORkEsIG5ld1N1YnRyZWVTdGFydCwg
KmVkZ2UudmFsdWUpOworICAgICAgICAgICAgICAgIGlmICghZWRnZS5zZWNvbmQtPmluVmFyaWFi
bGVMZW5ndGhQcmVmaXgpIHsKKyAgICAgICAgICAgICAgICAgICAgY29uc3QgVGVybSYgdGVybSA9
IGVkZ2UuZmlyc3Q7CisgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIG5ld1N1YnRyZWVTdGFy
dCA9IHRlcm0uZ2VuZXJhdGVHcmFwaChnZW5lcmF0aW5nTkZBLCBwcmVmaXhFbmQsIGVkZ2Uuc2Vj
b25kLT5maW5hbEFjdGlvbnMpOworICAgICAgICAgICAgICAgICAgICBnZW5lcmF0ZU5GQUZvclN1
YnRyZWUoZ2VuZXJhdGluZ05GQSwgbmV3U3VidHJlZVN0YXJ0LCAqZWRnZS5zZWNvbmQpOwogICAg
ICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KICAgICAgICAgfQpJbmRleDogU291cmNlL1dl
YkNvcmUvY29udGVudGV4dGVuc2lvbnMvTkZBLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9jb250ZW50ZXh0ZW5zaW9ucy9ORkEuY3BwCShyZXZpc2lvbiAxODM0MTkpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9jb250ZW50ZXh0ZW5zaW9ucy9ORkEuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC05
Myw3ICs5Myw3IEBAIHZvaWQgTkZBOjphZGRUcmFuc2l0aW9uc09uQW55Q2hhcmFjdGVyKHUKICAg
ICAgICAgdHJhbnNpdGlvblNsb3QudmFsdWUucmVtb3ZlKHRvKTsKIH0KIAotdm9pZCBORkE6OnNl
dEFjdGlvbnModW5zaWduZWQgbm9kZSwgY29uc3QgQWN0aW9uU2V0JiBhY3Rpb25zKQordm9pZCBO
RkE6OnNldEFjdGlvbnModW5zaWduZWQgbm9kZSwgY29uc3QgVmVjdG9yPHVpbnQ2NF90PiYgYWN0
aW9ucykKIHsKICAgICBBU1NFUlRfV0lUSF9NRVNTQUdFKG1fbm9kZXNbbm9kZV0uZmluYWxSdWxl
SWRzLmlzRW1wdHkoKSwgIlRoZSBmaW5hbCBzdGF0ZSBzaG91bGQgb25seSBiZSBkZWZpbmVkIG9u
Y2UuIik7CiAgICAgY29weVRvVmVjdG9yKGFjdGlvbnMsIG1fbm9kZXNbbm9kZV0uZmluYWxSdWxl
SWRzKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2NvbnRlbnRleHRlbnNpb25zL05GQS5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2NvbnRlbnRleHRlbnNpb25zL05GQS5oCShyZXZpc2lv
biAxODM0MTkpCisrKyBTb3VyY2UvV2ViQ29yZS9jb250ZW50ZXh0ZW5zaW9ucy9ORkEuaAkod29y
a2luZyBjb3B5KQpAQCAtNTEsNyArNTEsNyBAQCBwdWJsaWM6CiAgICAgdm9pZCBhZGRUcmFuc2l0
aW9uKHVuc2lnbmVkIGZyb20sIHVuc2lnbmVkIHRvLCBjaGFyIGNoYXJhY3Rlcik7CiAgICAgdm9p
ZCBhZGRFcHNpbG9uVHJhbnNpdGlvbih1bnNpZ25lZCBmcm9tLCB1bnNpZ25lZCB0byk7CiAgICAg
dm9pZCBhZGRUcmFuc2l0aW9uc09uQW55Q2hhcmFjdGVyKHVuc2lnbmVkIGZyb20sIHVuc2lnbmVk
IHRvKTsKLSAgICB2b2lkIHNldEFjdGlvbnModW5zaWduZWQgbm9kZSwgY29uc3QgQWN0aW9uU2V0
JiBmaW5hbEFjdGlvbnMpOworICAgIHZvaWQgc2V0QWN0aW9ucyh1bnNpZ25lZCBub2RlLCBjb25z
dCBWZWN0b3I8dWludDY0X3Q+JiBmaW5hbEFjdGlvbnMpOwogCiAgICAgdW5zaWduZWQgZ3JhcGhT
aXplKCkgY29uc3Q7CiAgICAgdm9pZCByZXN0b3JlVG9HcmFwaFNpemUodW5zaWduZWQpOwpJbmRl
eDogU291cmNlL1dlYkNvcmUvY29udGVudGV4dGVuc2lvbnMvVGVybS5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL2NvbnRlbnRleHRlbnNpb25zL1Rlcm0uaAkocmV2aXNpb24gMTgzNDE5
KQorKysgU291cmNlL1dlYkNvcmUvY29udGVudGV4dGVuc2lvbnMvVGVybS5oCSh3b3JraW5nIGNv
cHkpCkBAIC04NCw3ICs4NCw3IEBAIHB1YmxpYzoKIAogICAgIHZvaWQgcXVhbnRpZnkoY29uc3Qg
QXRvbVF1YW50aWZpZXImKTsKIAotICAgIHVuc2lnbmVkIGdlbmVyYXRlR3JhcGgoTkZBJiwgdW5z
aWduZWQgc3RhcnQsIGNvbnN0IEFjdGlvblNldCYgZmluYWxBY3Rpb25zKSBjb25zdDsKKyAgICB1
bnNpZ25lZCBnZW5lcmF0ZUdyYXBoKE5GQSYsIHVuc2lnbmVkIHN0YXJ0LCBjb25zdCBWZWN0b3I8
dWludDY0X3Q+JiBmaW5hbEFjdGlvbnMpIGNvbnN0OwogCiAgICAgYm9vbCBpc0VuZE9mTGluZUFz
c2VydGlvbigpIGNvbnN0OwogCkBAIC0zMDgsNyArMzA4LDcgQEAgaW5saW5lIHZvaWQgVGVybTo6
cXVhbnRpZnkoY29uc3QgQXRvbVF1YQogICAgIG1fcXVhbnRpZmllciA9IHF1YW50aWZpZXI7CiB9
CiAKLWlubGluZSB1bnNpZ25lZCBUZXJtOjpUZXJtOjpnZW5lcmF0ZUdyYXBoKE5GQSYgbmZhLCB1
bnNpZ25lZCBzdGFydCwgY29uc3QgQWN0aW9uU2V0JiBmaW5hbEFjdGlvbnMpIGNvbnN0Citpbmxp
bmUgdW5zaWduZWQgVGVybTo6VGVybTo6Z2VuZXJhdGVHcmFwaChORkEmIG5mYSwgdW5zaWduZWQg
c3RhcnQsIGNvbnN0IFZlY3Rvcjx1aW50NjRfdD4mIGZpbmFsQWN0aW9ucykgY29uc3QKIHsKICAg
ICBBU1NFUlQoaXNWYWxpZCgpKTsKIApAQCAtNTUzLDcgKzU1Myw3IEBAIGlubGluZSB1bnNpZ25l
ZCBUZXJtOjpnZW5lcmF0ZVN1YmdyYXBoRm8KICAgICBjYXNlIFRlcm1UeXBlOjpHcm91cDogewog
ICAgICAgICB1bnNpZ25lZCBsYXN0VGFyZ2V0ID0gc291cmNlOwogICAgICAgICBmb3IgKGNvbnN0
IFRlcm0mIHRlcm0gOiBtX2F0b21EYXRhLmdyb3VwLnRlcm1zKQotICAgICAgICAgICAgbGFzdFRh
cmdldCA9IHRlcm0uZ2VuZXJhdGVHcmFwaChuZmEsIGxhc3RUYXJnZXQsIEFjdGlvblNldCgpKTsK
KyAgICAgICAgICAgIGxhc3RUYXJnZXQgPSB0ZXJtLmdlbmVyYXRlR3JhcGgobmZhLCBsYXN0VGFy
Z2V0LCBWZWN0b3I8dWludDY0X3Q+KCkpOwogICAgICAgICByZXR1cm4gbGFzdFRhcmdldDsKICAg
ICB9CiAgICAgfQo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>251871</attachid>
            <date>2015-04-28 11:40:34 -0700</date>
            <delta_ts>2015-04-28 12:41:33 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-144290-20150428113925.patch</filename>
            <type>text/plain</type>
            <size>41127</size>
            <attacher name="Alex Christensen">achristensen</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XVEYvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvQ2hh
bmdlTG9nCShyZXZpc2lvbiAxODM0OTMpCisrKyBTb3VyY2UvV1RGL0NoYW5nZUxvZwkod29ya2lu
ZyBjb3B5KQpAQCAtMSwzICsxLDE4IEBACisyMDE1LTA0LTI4ICBBbGV4IENocmlzdGVuc2VuICA8
YWNocmlzdGVuc2VuQHdlYmtpdC5vcmc+CisKKyAgICAgICAgW0NvbnRlbnQgRXh0ZW5zaW9uc10g
VXNlIGxlc3MgbWVtb3J5IGZvciBDb21iaW5lZFVSTEZpbHRlcnMuCisgICAgICAgIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNDQyOTAKKworICAgICAgICBSZXZpZXdl
ZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIHd0Zi9Gb3J3YXJkLmg6CisgICAgICAg
ICogd3RmL1ZlY3Rvci5oOgorICAgICAgICBBZGRlZCBhIG1pbkNhcGFjaXR5IHRlbXBsYXRlIHBh
cmFtZXRlciB0byBhbGxvdyBjaGFuZ2luZyB0aGUgbWluaW11bSBzaXplIG9mIGFuIAorICAgICAg
ICBhbGxvY2F0ZWQgYnVmZmVyLiBUaGUgZGVmYXVsdCBtaW5DYXBhY2l0eSBpcyBrZXB0IGF0IDE2
IHVubGVzcyBvdGhlcndpc2Ugc3BlY2lmaWVkIAorICAgICAgICB0byBoYXZlIG5vIGNoYW5nZSBv
biBleGlzdGluZyBjb2RlLCBidXQgdGhpcyBjb3VsZCBiZSBjaGFuZ2VkIGxhdGVyLiBBIHNtYWxs
ZXIgCisgICAgICAgIGRlZmF1bHQgbWluQ2FwYWNpdHkgd291bGQgdXNlIGxlc3MgbWVtb3J5IHdp
dGggc21hbGwgVmVjdG9ycyBidXQgc3BlbmQgbW9yZSB0aW1lIAorICAgICAgICBjb3B5aW5nIHdo
ZW4gZXhwYW5kaW5nIHRvIGxhcmdlIFZlY3RvcnMuCisKIDIwMTUtMDQtMjcgIEJyZW50IEZ1bGdo
YW0gIDxiZnVsZ2hhbUBhcHBsZS5jb20+CiAKICAgICAgICAgW1dpbl0gRGVhY3RpdmF0ZSBXZWJH
TCB1bnRpbCBXaW5kb3dzIHRlc3RzIHdvcmsgcHJvcGVybHkKSW5kZXg6IFNvdXJjZS9XVEYvd3Rm
L0ZvcndhcmQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL3d0Zi9Gb3J3YXJkLmgJKHJldmlz
aW9uIDE4MzM5NykKKysrIFNvdXJjZS9XVEYvd3RmL0ZvcndhcmQuaAkod29ya2luZyBjb3B5KQpA
QCAtMzMsNyArMzMsNyBAQCB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBjbGFzcyBSZWZQdHI7CiB0ZW1w
bGF0ZTx0eXBlbmFtZSBUPiBjbGFzcyBSZWY7CiB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBjbGFzcyBT
dHJpbmdCdWZmZXI7CiAKLXRlbXBsYXRlPHR5cGVuYW1lIFQsIHNpemVfdCBpbmxpbmVDYXBhY2l0
eSwgdHlwZW5hbWUgT3ZlcmZsb3dIYW5kbGVyPiBjbGFzcyBWZWN0b3I7Cit0ZW1wbGF0ZTx0eXBl
bmFtZSBULCBzaXplX3QgaW5saW5lQ2FwYWNpdHksIHR5cGVuYW1lIE92ZXJmbG93SGFuZGxlciwg
c2l6ZV90IG1pbkNhcGFjaXR5PiBjbGFzcyBWZWN0b3I7CiAKIGNsYXNzIEF0b21pY1N0cmluZzsK
IGNsYXNzIEF0b21pY1N0cmluZ0ltcGw7CkluZGV4OiBTb3VyY2UvV1RGL3d0Zi9WZWN0b3IuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL3d0Zi9WZWN0b3IuaAkocmV2aXNpb24gMTgzMzk3KQor
KysgU291cmNlL1dURi93dGYvVmVjdG9yLmgJKHdvcmtpbmcgY29weSkKQEAgLTU4MSw3ICs1ODEs
NyBAQCBzdHJ1Y3QgVW5zYWZlVmVjdG9yT3ZlcmZsb3cgewogICAgIH0KIH07CiAKLXRlbXBsYXRl
PHR5cGVuYW1lIFQsIHNpemVfdCBpbmxpbmVDYXBhY2l0eSA9IDAsIHR5cGVuYW1lIE92ZXJmbG93
SGFuZGxlciA9IENyYXNoT25PdmVyZmxvdz4KK3RlbXBsYXRlPHR5cGVuYW1lIFQsIHNpemVfdCBp
bmxpbmVDYXBhY2l0eSA9IDAsIHR5cGVuYW1lIE92ZXJmbG93SGFuZGxlciA9IENyYXNoT25PdmVy
Zmxvdywgc2l6ZV90IG1pbkNhcGFjaXR5ID0gMTY+CiBjbGFzcyBWZWN0b3IgOiBwcml2YXRlIFZl
Y3RvckJ1ZmZlcjxULCBpbmxpbmVDYXBhY2l0eT4gewogICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NB
VEVEOwogcHJpdmF0ZToKQEAgLTc1NCw3ICs3NTQsNyBAQCBwdWJsaWM6CiAKICAgICBNYWxsb2NQ
dHI8VD4gcmVsZWFzZUJ1ZmZlcigpOwogCi0gICAgdm9pZCBzd2FwKFZlY3RvcjxULCBpbmxpbmVD
YXBhY2l0eSwgT3ZlcmZsb3dIYW5kbGVyPiYgb3RoZXIpCisgICAgdm9pZCBzd2FwKFZlY3RvcjxU
LCBpbmxpbmVDYXBhY2l0eSwgT3ZlcmZsb3dIYW5kbGVyLCBtaW5DYXBhY2l0eT4mIG90aGVyKQog
ICAgIHsKICNpZiBBU0FOX0VOQUJMRUQKICAgICAgICAgaWYgKHRoaXMgPT0gc3RkOjphZGRyZXNz
b2Yob3RoZXIpKSAvLyBBU2FuIHdpbGwgY3Jhc2ggaWYgd2UgdHJ5IHRvIHJlc3RyaWN0IGFjY2Vz
cyB0byB0aGUgc2FtZSBidWZmZXIgdHdpY2UuCkBAIC04MDQsOCArODA0LDggQEAgcHJpdmF0ZToK
ICNlbmRpZgogfTsKIAotdGVtcGxhdGU8dHlwZW5hbWUgVCwgc2l6ZV90IGlubGluZUNhcGFjaXR5
LCB0eXBlbmFtZSBPdmVyZmxvd0hhbmRsZXI+Ci1WZWN0b3I8VCwgaW5saW5lQ2FwYWNpdHksIE92
ZXJmbG93SGFuZGxlcj46OlZlY3Rvcihjb25zdCBWZWN0b3ImIG90aGVyKQordGVtcGxhdGU8dHlw
ZW5hbWUgVCwgc2l6ZV90IGlubGluZUNhcGFjaXR5LCB0eXBlbmFtZSBPdmVyZmxvd0hhbmRsZXIs
IHNpemVfdCBtaW5DYXBhY2l0eT4KK1ZlY3RvcjxULCBpbmxpbmVDYXBhY2l0eSwgT3ZlcmZsb3dI
YW5kbGVyLCBtaW5DYXBhY2l0eT46OlZlY3Rvcihjb25zdCBWZWN0b3ImIG90aGVyKQogICAgIDog
QmFzZShvdGhlci5jYXBhY2l0eSgpLCBvdGhlci5zaXplKCkpCiB7CiAgICAgYXNhblNldEluaXRp
YWxCdWZmZXJTaXplVG8ob3RoZXIuc2l6ZSgpKTsKQEAgLTgxNCw5ICs4MTQsOSBAQCBWZWN0b3I8
VCwgaW5saW5lQ2FwYWNpdHksIE92ZXJmbG93SGFuZGxlCiAgICAgICAgIFR5cGVPcGVyYXRpb25z
Ojp1bmluaXRpYWxpemVkQ29weShvdGhlci5iZWdpbigpLCBvdGhlci5lbmQoKSwgYmVnaW4oKSk7
CiB9CiAKLXRlbXBsYXRlPHR5cGVuYW1lIFQsIHNpemVfdCBpbmxpbmVDYXBhY2l0eSwgdHlwZW5h
bWUgT3ZlcmZsb3dIYW5kbGVyPgordGVtcGxhdGU8dHlwZW5hbWUgVCwgc2l6ZV90IGlubGluZUNh
cGFjaXR5LCB0eXBlbmFtZSBPdmVyZmxvd0hhbmRsZXIsIHNpemVfdCBtaW5DYXBhY2l0eT4KIHRl
bXBsYXRlPHNpemVfdCBvdGhlckNhcGFjaXR5LCB0eXBlbmFtZSBvdGhlck92ZXJmbG93QmVoYXZp
b3VyPgotVmVjdG9yPFQsIGlubGluZUNhcGFjaXR5LCBPdmVyZmxvd0hhbmRsZXI+OjpWZWN0b3Io
Y29uc3QgVmVjdG9yPFQsIG90aGVyQ2FwYWNpdHksIG90aGVyT3ZlcmZsb3dCZWhhdmlvdXI+JiBv
dGhlcikKK1ZlY3RvcjxULCBpbmxpbmVDYXBhY2l0eSwgT3ZlcmZsb3dIYW5kbGVyLCBtaW5DYXBh
Y2l0eT46OlZlY3Rvcihjb25zdCBWZWN0b3I8VCwgb3RoZXJDYXBhY2l0eSwgb3RoZXJPdmVyZmxv
d0JlaGF2aW91cj4mIG90aGVyKQogICAgIDogQmFzZShvdGhlci5jYXBhY2l0eSgpLCBvdGhlci5z
aXplKCkpCiB7CiAgICAgYXNhblNldEluaXRpYWxCdWZmZXJTaXplVG8ob3RoZXIuc2l6ZSgpKTsK
QEAgLTgyNSw4ICs4MjUsOCBAQCBWZWN0b3I8VCwgaW5saW5lQ2FwYWNpdHksIE92ZXJmbG93SGFu
ZGxlCiAgICAgICAgIFR5cGVPcGVyYXRpb25zOjp1bmluaXRpYWxpemVkQ29weShvdGhlci5iZWdp
bigpLCBvdGhlci5lbmQoKSwgYmVnaW4oKSk7CiB9CiAKLXRlbXBsYXRlPHR5cGVuYW1lIFQsIHNp
emVfdCBpbmxpbmVDYXBhY2l0eSwgdHlwZW5hbWUgT3ZlcmZsb3dIYW5kbGVyPgotVmVjdG9yPFQs
IGlubGluZUNhcGFjaXR5LCBPdmVyZmxvd0hhbmRsZXI+JiBWZWN0b3I8VCwgaW5saW5lQ2FwYWNp
dHksIE92ZXJmbG93SGFuZGxlcj46Om9wZXJhdG9yPShjb25zdCBWZWN0b3I8VCwgaW5saW5lQ2Fw
YWNpdHksIE92ZXJmbG93SGFuZGxlcj4mIG90aGVyKQordGVtcGxhdGU8dHlwZW5hbWUgVCwgc2l6
ZV90IGlubGluZUNhcGFjaXR5LCB0eXBlbmFtZSBPdmVyZmxvd0hhbmRsZXIsIHNpemVfdCBtaW5D
YXBhY2l0eT4KK1ZlY3RvcjxULCBpbmxpbmVDYXBhY2l0eSwgT3ZlcmZsb3dIYW5kbGVyLCBtaW5D
YXBhY2l0eT4mIFZlY3RvcjxULCBpbmxpbmVDYXBhY2l0eSwgT3ZlcmZsb3dIYW5kbGVyLCBtaW5D
YXBhY2l0eT46Om9wZXJhdG9yPShjb25zdCBWZWN0b3I8VCwgaW5saW5lQ2FwYWNpdHksIE92ZXJm
bG93SGFuZGxlciwgbWluQ2FwYWNpdHk+JiBvdGhlcikKIHsKICAgICBpZiAoJm90aGVyID09IHRo
aXMpCiAgICAgICAgIHJldHVybiAqdGhpczsKQEAgLTg1MCw5ICs4NTAsOSBAQCBWZWN0b3I8VCwg
aW5saW5lQ2FwYWNpdHksIE92ZXJmbG93SGFuZGxlCiAKIGlubGluZSBib29sIHR5cGVsZXNzUG9p
bnRlcnNBcmVFcXVhbChjb25zdCB2b2lkKiBhLCBjb25zdCB2b2lkKiBiKSB7IHJldHVybiBhID09
IGI7IH0KIAotdGVtcGxhdGU8dHlwZW5hbWUgVCwgc2l6ZV90IGlubGluZUNhcGFjaXR5LCB0eXBl
bmFtZSBPdmVyZmxvd0hhbmRsZXI+Cit0ZW1wbGF0ZTx0eXBlbmFtZSBULCBzaXplX3QgaW5saW5l
Q2FwYWNpdHksIHR5cGVuYW1lIE92ZXJmbG93SGFuZGxlciwgc2l6ZV90IG1pbkNhcGFjaXR5Pgog
dGVtcGxhdGU8c2l6ZV90IG90aGVyQ2FwYWNpdHksIHR5cGVuYW1lIG90aGVyT3ZlcmZsb3dCZWhh
dmlvdXI+Ci1WZWN0b3I8VCwgaW5saW5lQ2FwYWNpdHksIE92ZXJmbG93SGFuZGxlcj4mIFZlY3Rv
cjxULCBpbmxpbmVDYXBhY2l0eSwgT3ZlcmZsb3dIYW5kbGVyPjo6b3BlcmF0b3I9KGNvbnN0IFZl
Y3RvcjxULCBvdGhlckNhcGFjaXR5LCBvdGhlck92ZXJmbG93QmVoYXZpb3VyPiYgb3RoZXIpCitW
ZWN0b3I8VCwgaW5saW5lQ2FwYWNpdHksIE92ZXJmbG93SGFuZGxlciwgbWluQ2FwYWNpdHk+JiBW
ZWN0b3I8VCwgaW5saW5lQ2FwYWNpdHksIE92ZXJmbG93SGFuZGxlciwgbWluQ2FwYWNpdHk+Ojpv
cGVyYXRvcj0oY29uc3QgVmVjdG9yPFQsIG90aGVyQ2FwYWNpdHksIG90aGVyT3ZlcmZsb3dCZWhh
dmlvdXI+JiBvdGhlcikKIHsKICAgICAvLyBJZiB0aGUgaW5saW5lIGNhcGFjaXRpZXMgbWF0Y2gs
IHdlIHNob3VsZCBjYWxsIHRoZSBtb3JlIHNwZWNpZmljCiAgICAgLy8gdGVtcGxhdGUuICBJZiB0
aGUgaW5saW5lIGNhcGFjaXRpZXMgZG9uJ3QgbWF0Y2gsIHRoZSB0d28gb2JqZWN0cwpAQCAtODc2
LDI5ICs4NzYsMjkgQEAgVmVjdG9yPFQsIGlubGluZUNhcGFjaXR5LCBPdmVyZmxvd0hhbmRsZQog
ICAgIHJldHVybiAqdGhpczsKIH0KIAotdGVtcGxhdGU8dHlwZW5hbWUgVCwgc2l6ZV90IGlubGlu
ZUNhcGFjaXR5LCB0eXBlbmFtZSBPdmVyZmxvd0hhbmRsZXI+Ci1pbmxpbmUgVmVjdG9yPFQsIGlu
bGluZUNhcGFjaXR5LCBPdmVyZmxvd0hhbmRsZXI+OjpWZWN0b3IoVmVjdG9yPFQsIGlubGluZUNh
cGFjaXR5LCBPdmVyZmxvd0hhbmRsZXI+JiYgb3RoZXIpCit0ZW1wbGF0ZTx0eXBlbmFtZSBULCBz
aXplX3QgaW5saW5lQ2FwYWNpdHksIHR5cGVuYW1lIE92ZXJmbG93SGFuZGxlciwgc2l6ZV90IG1p
bkNhcGFjaXR5PgoraW5saW5lIFZlY3RvcjxULCBpbmxpbmVDYXBhY2l0eSwgT3ZlcmZsb3dIYW5k
bGVyLCBtaW5DYXBhY2l0eT46OlZlY3RvcihWZWN0b3I8VCwgaW5saW5lQ2FwYWNpdHksIE92ZXJm
bG93SGFuZGxlciwgbWluQ2FwYWNpdHk+JiYgb3RoZXIpCiB7CiAgICAgc3dhcChvdGhlcik7CiB9
CiAKLXRlbXBsYXRlPHR5cGVuYW1lIFQsIHNpemVfdCBpbmxpbmVDYXBhY2l0eSwgdHlwZW5hbWUg
T3ZlcmZsb3dIYW5kbGVyPgotaW5saW5lIFZlY3RvcjxULCBpbmxpbmVDYXBhY2l0eSwgT3ZlcmZs
b3dIYW5kbGVyPiYgVmVjdG9yPFQsIGlubGluZUNhcGFjaXR5LCBPdmVyZmxvd0hhbmRsZXI+Ojpv
cGVyYXRvcj0oVmVjdG9yPFQsIGlubGluZUNhcGFjaXR5LCBPdmVyZmxvd0hhbmRsZXI+JiYgb3Ro
ZXIpCit0ZW1wbGF0ZTx0eXBlbmFtZSBULCBzaXplX3QgaW5saW5lQ2FwYWNpdHksIHR5cGVuYW1l
IE92ZXJmbG93SGFuZGxlciwgc2l6ZV90IG1pbkNhcGFjaXR5PgoraW5saW5lIFZlY3RvcjxULCBp
bmxpbmVDYXBhY2l0eSwgT3ZlcmZsb3dIYW5kbGVyLCBtaW5DYXBhY2l0eT4mIFZlY3RvcjxULCBp
bmxpbmVDYXBhY2l0eSwgT3ZlcmZsb3dIYW5kbGVyLCBtaW5DYXBhY2l0eT46Om9wZXJhdG9yPShW
ZWN0b3I8VCwgaW5saW5lQ2FwYWNpdHksIE92ZXJmbG93SGFuZGxlciwgbWluQ2FwYWNpdHk+JiYg
b3RoZXIpCiB7CiAgICAgc3dhcChvdGhlcik7CiAgICAgcmV0dXJuICp0aGlzOwogfQogCi10ZW1w
bGF0ZTx0eXBlbmFtZSBULCBzaXplX3QgaW5saW5lQ2FwYWNpdHksIHR5cGVuYW1lIE92ZXJmbG93
SGFuZGxlcj4KK3RlbXBsYXRlPHR5cGVuYW1lIFQsIHNpemVfdCBpbmxpbmVDYXBhY2l0eSwgdHlw
ZW5hbWUgT3ZlcmZsb3dIYW5kbGVyLCBzaXplX3QgbWluQ2FwYWNpdHk+CiB0ZW1wbGF0ZTx0eXBl
bmFtZSBVPgotYm9vbCBWZWN0b3I8VCwgaW5saW5lQ2FwYWNpdHksIE92ZXJmbG93SGFuZGxlcj46
OmNvbnRhaW5zKGNvbnN0IFUmIHZhbHVlKSBjb25zdAorYm9vbCBWZWN0b3I8VCwgaW5saW5lQ2Fw
YWNpdHksIE92ZXJmbG93SGFuZGxlciwgbWluQ2FwYWNpdHk+Ojpjb250YWlucyhjb25zdCBVJiB2
YWx1ZSkgY29uc3QKIHsKICAgICByZXR1cm4gZmluZCh2YWx1ZSkgIT0gbm90Rm91bmQ7CiB9CiAK
LXRlbXBsYXRlPHR5cGVuYW1lIFQsIHNpemVfdCBpbmxpbmVDYXBhY2l0eSwgdHlwZW5hbWUgT3Zl
cmZsb3dIYW5kbGVyPgordGVtcGxhdGU8dHlwZW5hbWUgVCwgc2l6ZV90IGlubGluZUNhcGFjaXR5
LCB0eXBlbmFtZSBPdmVyZmxvd0hhbmRsZXIsIHNpemVfdCBtaW5DYXBhY2l0eT4KIHRlbXBsYXRl
PHR5cGVuYW1lIFU+Ci1zaXplX3QgVmVjdG9yPFQsIGlubGluZUNhcGFjaXR5LCBPdmVyZmxvd0hh
bmRsZXI+OjpmaW5kKGNvbnN0IFUmIHZhbHVlKSBjb25zdAorc2l6ZV90IFZlY3RvcjxULCBpbmxp
bmVDYXBhY2l0eSwgT3ZlcmZsb3dIYW5kbGVyLCBtaW5DYXBhY2l0eT46OmZpbmQoY29uc3QgVSYg
dmFsdWUpIGNvbnN0CiB7CiAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBzaXplKCk7ICsraSkg
ewogICAgICAgICBpZiAoYXQoaSkgPT0gdmFsdWUpCkBAIC05MDcsOSArOTA3LDkgQEAgc2l6ZV90
IFZlY3RvcjxULCBpbmxpbmVDYXBhY2l0eSwgT3ZlcmZsbwogICAgIHJldHVybiBub3RGb3VuZDsK
IH0KIAotdGVtcGxhdGU8dHlwZW5hbWUgVCwgc2l6ZV90IGlubGluZUNhcGFjaXR5LCB0eXBlbmFt
ZSBPdmVyZmxvd0hhbmRsZXI+Cit0ZW1wbGF0ZTx0eXBlbmFtZSBULCBzaXplX3QgaW5saW5lQ2Fw
YWNpdHksIHR5cGVuYW1lIE92ZXJmbG93SGFuZGxlciwgc2l6ZV90IG1pbkNhcGFjaXR5PgogdGVt
cGxhdGU8dHlwZW5hbWUgVT4KLXNpemVfdCBWZWN0b3I8VCwgaW5saW5lQ2FwYWNpdHksIE92ZXJm
bG93SGFuZGxlcj46OnJldmVyc2VGaW5kKGNvbnN0IFUmIHZhbHVlKSBjb25zdAorc2l6ZV90IFZl
Y3RvcjxULCBpbmxpbmVDYXBhY2l0eSwgT3ZlcmZsb3dIYW5kbGVyLCBtaW5DYXBhY2l0eT46OnJl
dmVyc2VGaW5kKGNvbnN0IFUmIHZhbHVlKSBjb25zdAogewogICAgIGZvciAoc2l6ZV90IGkgPSAx
OyBpIDw9IHNpemUoKTsgKytpKSB7CiAgICAgICAgIGNvbnN0IHNpemVfdCBpbmRleCA9IHNpemUo
KSAtIGk7CkBAIC05MTksOCArOTE5LDggQEAgc2l6ZV90IFZlY3RvcjxULCBpbmxpbmVDYXBhY2l0
eSwgT3ZlcmZsbwogICAgIHJldHVybiBub3RGb3VuZDsKIH0KIAotdGVtcGxhdGU8dHlwZW5hbWUg
VCwgc2l6ZV90IGlubGluZUNhcGFjaXR5LCB0eXBlbmFtZSBPdmVyZmxvd0hhbmRsZXI+Ci12b2lk
IFZlY3RvcjxULCBpbmxpbmVDYXBhY2l0eSwgT3ZlcmZsb3dIYW5kbGVyPjo6ZmlsbChjb25zdCBU
JiB2YWwsIHNpemVfdCBuZXdTaXplKQordGVtcGxhdGU8dHlwZW5hbWUgVCwgc2l6ZV90IGlubGlu
ZUNhcGFjaXR5LCB0eXBlbmFtZSBPdmVyZmxvd0hhbmRsZXIsIHNpemVfdCBtaW5DYXBhY2l0eT4K
K3ZvaWQgVmVjdG9yPFQsIGlubGluZUNhcGFjaXR5LCBPdmVyZmxvd0hhbmRsZXIsIG1pbkNhcGFj
aXR5Pjo6ZmlsbChjb25zdCBUJiB2YWwsIHNpemVfdCBuZXdTaXplKQogewogICAgIGlmIChzaXpl
KCkgPiBuZXdTaXplKQogICAgICAgICBzaHJpbmsobmV3U2l6ZSk7CkBAIC05MzcsMjIgKzkzNywy
MiBAQCB2b2lkIFZlY3RvcjxULCBpbmxpbmVDYXBhY2l0eSwgT3ZlcmZsb3dICiAgICAgbV9zaXpl
ID0gbmV3U2l6ZTsKIH0KIAotdGVtcGxhdGU8dHlwZW5hbWUgVCwgc2l6ZV90IGlubGluZUNhcGFj
aXR5LCB0eXBlbmFtZSBPdmVyZmxvd0hhbmRsZXI+Cit0ZW1wbGF0ZTx0eXBlbmFtZSBULCBzaXpl
X3QgaW5saW5lQ2FwYWNpdHksIHR5cGVuYW1lIE92ZXJmbG93SGFuZGxlciwgc2l6ZV90IG1pbkNh
cGFjaXR5PgogdGVtcGxhdGU8dHlwZW5hbWUgSXRlcmF0b3I+Ci12b2lkIFZlY3RvcjxULCBpbmxp
bmVDYXBhY2l0eSwgT3ZlcmZsb3dIYW5kbGVyPjo6YXBwZW5kUmFuZ2UoSXRlcmF0b3Igc3RhcnQs
IEl0ZXJhdG9yIGVuZCkKK3ZvaWQgVmVjdG9yPFQsIGlubGluZUNhcGFjaXR5LCBPdmVyZmxvd0hh
bmRsZXIsIG1pbkNhcGFjaXR5Pjo6YXBwZW5kUmFuZ2UoSXRlcmF0b3Igc3RhcnQsIEl0ZXJhdG9y
IGVuZCkKIHsKICAgICBmb3IgKEl0ZXJhdG9yIGl0ID0gc3RhcnQ7IGl0ICE9IGVuZDsgKytpdCkK
ICAgICAgICAgYXBwZW5kKCppdCk7CiB9CiAKLXRlbXBsYXRlPHR5cGVuYW1lIFQsIHNpemVfdCBp
bmxpbmVDYXBhY2l0eSwgdHlwZW5hbWUgT3ZlcmZsb3dIYW5kbGVyPgotdm9pZCBWZWN0b3I8VCwg
aW5saW5lQ2FwYWNpdHksIE92ZXJmbG93SGFuZGxlcj46OmV4cGFuZENhcGFjaXR5KHNpemVfdCBu
ZXdNaW5DYXBhY2l0eSkKK3RlbXBsYXRlPHR5cGVuYW1lIFQsIHNpemVfdCBpbmxpbmVDYXBhY2l0
eSwgdHlwZW5hbWUgT3ZlcmZsb3dIYW5kbGVyLCBzaXplX3QgbWluQ2FwYWNpdHk+Cit2b2lkIFZl
Y3RvcjxULCBpbmxpbmVDYXBhY2l0eSwgT3ZlcmZsb3dIYW5kbGVyLCBtaW5DYXBhY2l0eT46OmV4
cGFuZENhcGFjaXR5KHNpemVfdCBuZXdNaW5DYXBhY2l0eSkKIHsKLSAgICByZXNlcnZlQ2FwYWNp
dHkoc3RkOjptYXgobmV3TWluQ2FwYWNpdHksIHN0ZDo6bWF4KHN0YXRpY19jYXN0PHNpemVfdD4o
MTYpLCBjYXBhY2l0eSgpICsgY2FwYWNpdHkoKSAvIDQgKyAxKSkpOworICAgIHJlc2VydmVDYXBh
Y2l0eShzdGQ6Om1heChuZXdNaW5DYXBhY2l0eSwgc3RkOjptYXgoc3RhdGljX2Nhc3Q8c2l6ZV90
PihtaW5DYXBhY2l0eSksIGNhcGFjaXR5KCkgKyBjYXBhY2l0eSgpIC8gNCArIDEpKSk7CiB9CiAK
LXRlbXBsYXRlPHR5cGVuYW1lIFQsIHNpemVfdCBpbmxpbmVDYXBhY2l0eSwgdHlwZW5hbWUgT3Zl
cmZsb3dIYW5kbGVyPgotVCogVmVjdG9yPFQsIGlubGluZUNhcGFjaXR5LCBPdmVyZmxvd0hhbmRs
ZXI+OjpleHBhbmRDYXBhY2l0eShzaXplX3QgbmV3TWluQ2FwYWNpdHksIFQqIHB0cikKK3RlbXBs
YXRlPHR5cGVuYW1lIFQsIHNpemVfdCBpbmxpbmVDYXBhY2l0eSwgdHlwZW5hbWUgT3ZlcmZsb3dI
YW5kbGVyLCBzaXplX3QgbWluQ2FwYWNpdHk+CitUKiBWZWN0b3I8VCwgaW5saW5lQ2FwYWNpdHks
IE92ZXJmbG93SGFuZGxlciwgbWluQ2FwYWNpdHk+OjpleHBhbmRDYXBhY2l0eShzaXplX3QgbmV3
TWluQ2FwYWNpdHksIFQqIHB0cikKIHsKICAgICBpZiAocHRyIDwgYmVnaW4oKSB8fCBwdHIgPj0g
ZW5kKCkpIHsKICAgICAgICAgZXhwYW5kQ2FwYWNpdHkobmV3TWluQ2FwYWNpdHkpOwpAQCAtOTYz
LDE0ICs5NjMsMTQgQEAgVCogVmVjdG9yPFQsIGlubGluZUNhcGFjaXR5LCBPdmVyZmxvd0hhbgog
ICAgIHJldHVybiBiZWdpbigpICsgaW5kZXg7CiB9CiAKLXRlbXBsYXRlPHR5cGVuYW1lIFQsIHNp
emVfdCBpbmxpbmVDYXBhY2l0eSwgdHlwZW5hbWUgT3ZlcmZsb3dIYW5kbGVyPgotYm9vbCBWZWN0
b3I8VCwgaW5saW5lQ2FwYWNpdHksIE92ZXJmbG93SGFuZGxlcj46OnRyeUV4cGFuZENhcGFjaXR5
KHNpemVfdCBuZXdNaW5DYXBhY2l0eSkKK3RlbXBsYXRlPHR5cGVuYW1lIFQsIHNpemVfdCBpbmxp
bmVDYXBhY2l0eSwgdHlwZW5hbWUgT3ZlcmZsb3dIYW5kbGVyLCBzaXplX3QgbWluQ2FwYWNpdHk+
Citib29sIFZlY3RvcjxULCBpbmxpbmVDYXBhY2l0eSwgT3ZlcmZsb3dIYW5kbGVyLCBtaW5DYXBh
Y2l0eT46OnRyeUV4cGFuZENhcGFjaXR5KHNpemVfdCBuZXdNaW5DYXBhY2l0eSkKIHsKLSAgICBy
ZXR1cm4gdHJ5UmVzZXJ2ZUNhcGFjaXR5KHN0ZDo6bWF4KG5ld01pbkNhcGFjaXR5LCBzdGQ6Om1h
eChzdGF0aWNfY2FzdDxzaXplX3Q+KDE2KSwgY2FwYWNpdHkoKSArIGNhcGFjaXR5KCkgLyA0ICsg
MSkpKTsKKyAgICByZXR1cm4gdHJ5UmVzZXJ2ZUNhcGFjaXR5KHN0ZDo6bWF4KG5ld01pbkNhcGFj
aXR5LCBzdGQ6Om1heChzdGF0aWNfY2FzdDxzaXplX3Q+KG1pbkNhcGFjaXR5KSwgY2FwYWNpdHko
KSArIGNhcGFjaXR5KCkgLyA0ICsgMSkpKTsKIH0KIAotdGVtcGxhdGU8dHlwZW5hbWUgVCwgc2l6
ZV90IGlubGluZUNhcGFjaXR5LCB0eXBlbmFtZSBPdmVyZmxvd0hhbmRsZXI+Ci1jb25zdCBUKiBW
ZWN0b3I8VCwgaW5saW5lQ2FwYWNpdHksIE92ZXJmbG93SGFuZGxlcj46OnRyeUV4cGFuZENhcGFj
aXR5KHNpemVfdCBuZXdNaW5DYXBhY2l0eSwgY29uc3QgVCogcHRyKQordGVtcGxhdGU8dHlwZW5h
bWUgVCwgc2l6ZV90IGlubGluZUNhcGFjaXR5LCB0eXBlbmFtZSBPdmVyZmxvd0hhbmRsZXIsIHNp
emVfdCBtaW5DYXBhY2l0eT4KK2NvbnN0IFQqIFZlY3RvcjxULCBpbmxpbmVDYXBhY2l0eSwgT3Zl
cmZsb3dIYW5kbGVyLCBtaW5DYXBhY2l0eT46OnRyeUV4cGFuZENhcGFjaXR5KHNpemVfdCBuZXdN
aW5DYXBhY2l0eSwgY29uc3QgVCogcHRyKQogewogICAgIGlmIChwdHIgPCBiZWdpbigpIHx8IHB0
ciA+PSBlbmQoKSkgewogICAgICAgICBpZiAoIXRyeUV4cGFuZENhcGFjaXR5KG5ld01pbkNhcGFj
aXR5KSkKQEAgLTk4MywxNSArOTgzLDE1IEBAIGNvbnN0IFQqIFZlY3RvcjxULCBpbmxpbmVDYXBh
Y2l0eSwgT3ZlcmYKICAgICByZXR1cm4gYmVnaW4oKSArIGluZGV4OwogfQogCi10ZW1wbGF0ZTx0
eXBlbmFtZSBULCBzaXplX3QgaW5saW5lQ2FwYWNpdHksIHR5cGVuYW1lIE92ZXJmbG93SGFuZGxl
cj4gdGVtcGxhdGU8dHlwZW5hbWUgVT4KLWlubGluZSBVKiBWZWN0b3I8VCwgaW5saW5lQ2FwYWNp
dHksIE92ZXJmbG93SGFuZGxlcj46OmV4cGFuZENhcGFjaXR5KHNpemVfdCBuZXdNaW5DYXBhY2l0
eSwgVSogcHRyKQordGVtcGxhdGU8dHlwZW5hbWUgVCwgc2l6ZV90IGlubGluZUNhcGFjaXR5LCB0
eXBlbmFtZSBPdmVyZmxvd0hhbmRsZXIsIHNpemVfdCBtaW5DYXBhY2l0eT4gdGVtcGxhdGU8dHlw
ZW5hbWUgVT4KK2lubGluZSBVKiBWZWN0b3I8VCwgaW5saW5lQ2FwYWNpdHksIE92ZXJmbG93SGFu
ZGxlciwgbWluQ2FwYWNpdHk+OjpleHBhbmRDYXBhY2l0eShzaXplX3QgbmV3TWluQ2FwYWNpdHks
IFUqIHB0cikKIHsKICAgICBleHBhbmRDYXBhY2l0eShuZXdNaW5DYXBhY2l0eSk7CiAgICAgcmV0
dXJuIHB0cjsKIH0KIAotdGVtcGxhdGU8dHlwZW5hbWUgVCwgc2l6ZV90IGlubGluZUNhcGFjaXR5
LCB0eXBlbmFtZSBPdmVyZmxvd0hhbmRsZXI+Ci1pbmxpbmUgdm9pZCBWZWN0b3I8VCwgaW5saW5l
Q2FwYWNpdHksIE92ZXJmbG93SGFuZGxlcj46OnJlc2l6ZShzaXplX3Qgc2l6ZSkKK3RlbXBsYXRl
PHR5cGVuYW1lIFQsIHNpemVfdCBpbmxpbmVDYXBhY2l0eSwgdHlwZW5hbWUgT3ZlcmZsb3dIYW5k
bGVyLCBzaXplX3QgbWluQ2FwYWNpdHk+CitpbmxpbmUgdm9pZCBWZWN0b3I8VCwgaW5saW5lQ2Fw
YWNpdHksIE92ZXJmbG93SGFuZGxlciwgbWluQ2FwYWNpdHk+OjpyZXNpemUoc2l6ZV90IHNpemUp
CiB7CiAgICAgaWYgKHNpemUgPD0gbV9zaXplKSB7CiAgICAgICAgIFR5cGVPcGVyYXRpb25zOjpk
ZXN0cnVjdChiZWdpbigpICsgc2l6ZSwgZW5kKCkpOwpAQCAtMTAwNywxNSArMTAwNywxNSBAQCBp
bmxpbmUgdm9pZCBWZWN0b3I8VCwgaW5saW5lQ2FwYWNpdHksIE92CiAgICAgbV9zaXplID0gc2l6
ZTsKIH0KIAotdGVtcGxhdGU8dHlwZW5hbWUgVCwgc2l6ZV90IGlubGluZUNhcGFjaXR5LCB0eXBl
bmFtZSBPdmVyZmxvd0hhbmRsZXI+Ci12b2lkIFZlY3RvcjxULCBpbmxpbmVDYXBhY2l0eSwgT3Zl
cmZsb3dIYW5kbGVyPjo6cmVzaXplVG9GaXQoc2l6ZV90IHNpemUpCit0ZW1wbGF0ZTx0eXBlbmFt
ZSBULCBzaXplX3QgaW5saW5lQ2FwYWNpdHksIHR5cGVuYW1lIE92ZXJmbG93SGFuZGxlciwgc2l6
ZV90IG1pbkNhcGFjaXR5Pgordm9pZCBWZWN0b3I8VCwgaW5saW5lQ2FwYWNpdHksIE92ZXJmbG93
SGFuZGxlciwgbWluQ2FwYWNpdHk+OjpyZXNpemVUb0ZpdChzaXplX3Qgc2l6ZSkKIHsKICAgICBy
ZXNlcnZlQ2FwYWNpdHkoc2l6ZSk7CiAgICAgcmVzaXplKHNpemUpOwogfQogCi10ZW1wbGF0ZTx0
eXBlbmFtZSBULCBzaXplX3QgaW5saW5lQ2FwYWNpdHksIHR5cGVuYW1lIE92ZXJmbG93SGFuZGxl
cj4KLXZvaWQgVmVjdG9yPFQsIGlubGluZUNhcGFjaXR5LCBPdmVyZmxvd0hhbmRsZXI+OjpzaHJp
bmsoc2l6ZV90IHNpemUpCit0ZW1wbGF0ZTx0eXBlbmFtZSBULCBzaXplX3QgaW5saW5lQ2FwYWNp
dHksIHR5cGVuYW1lIE92ZXJmbG93SGFuZGxlciwgc2l6ZV90IG1pbkNhcGFjaXR5Pgordm9pZCBW
ZWN0b3I8VCwgaW5saW5lQ2FwYWNpdHksIE92ZXJmbG93SGFuZGxlciwgbWluQ2FwYWNpdHk+Ojpz
aHJpbmsoc2l6ZV90IHNpemUpCiB7CiAgICAgQVNTRVJUKHNpemUgPD0gbV9zaXplKTsKICAgICBU
eXBlT3BlcmF0aW9uczo6ZGVzdHJ1Y3QoYmVnaW4oKSArIHNpemUsIGVuZCgpKTsKQEAgLTEwMjMs
OCArMTAyMyw4IEBAIHZvaWQgVmVjdG9yPFQsIGlubGluZUNhcGFjaXR5LCBPdmVyZmxvd0gKICAg
ICBtX3NpemUgPSBzaXplOwogfQogCi10ZW1wbGF0ZTx0eXBlbmFtZSBULCBzaXplX3QgaW5saW5l
Q2FwYWNpdHksIHR5cGVuYW1lIE92ZXJmbG93SGFuZGxlcj4KLXZvaWQgVmVjdG9yPFQsIGlubGlu
ZUNhcGFjaXR5LCBPdmVyZmxvd0hhbmRsZXI+Ojpncm93KHNpemVfdCBzaXplKQordGVtcGxhdGU8
dHlwZW5hbWUgVCwgc2l6ZV90IGlubGluZUNhcGFjaXR5LCB0eXBlbmFtZSBPdmVyZmxvd0hhbmRs
ZXIsIHNpemVfdCBtaW5DYXBhY2l0eT4KK3ZvaWQgVmVjdG9yPFQsIGlubGluZUNhcGFjaXR5LCBP
dmVyZmxvd0hhbmRsZXIsIG1pbkNhcGFjaXR5Pjo6Z3JvdyhzaXplX3Qgc2l6ZSkKIHsKICAgICBB
U1NFUlQoc2l6ZSA+PSBtX3NpemUpOwogICAgIGlmIChzaXplID4gY2FwYWNpdHkoKSkKQEAgLTEw
MzUsOCArMTAzNSw4IEBAIHZvaWQgVmVjdG9yPFQsIGlubGluZUNhcGFjaXR5LCBPdmVyZmxvd0gK
ICAgICBtX3NpemUgPSBzaXplOwogfQogCi10ZW1wbGF0ZTx0eXBlbmFtZSBULCBzaXplX3QgaW5s
aW5lQ2FwYWNpdHksIHR5cGVuYW1lIE92ZXJmbG93SGFuZGxlcj4KLWlubGluZSB2b2lkIFZlY3Rv
cjxULCBpbmxpbmVDYXBhY2l0eSwgT3ZlcmZsb3dIYW5kbGVyPjo6YXNhblNldEluaXRpYWxCdWZm
ZXJTaXplVG8oc2l6ZV90IHNpemUpCit0ZW1wbGF0ZTx0eXBlbmFtZSBULCBzaXplX3QgaW5saW5l
Q2FwYWNpdHksIHR5cGVuYW1lIE92ZXJmbG93SGFuZGxlciwgc2l6ZV90IG1pbkNhcGFjaXR5Pgor
aW5saW5lIHZvaWQgVmVjdG9yPFQsIGlubGluZUNhcGFjaXR5LCBPdmVyZmxvd0hhbmRsZXIsIG1p
bkNhcGFjaXR5Pjo6YXNhblNldEluaXRpYWxCdWZmZXJTaXplVG8oc2l6ZV90IHNpemUpCiB7CiAj
aWYgQVNBTl9FTkFCTEVECiAgICAgaWYgKCFidWZmZXIoKSkKQEAgLTEwNTEsOCArMTA1MSw4IEBA
IGlubGluZSB2b2lkIFZlY3RvcjxULCBpbmxpbmVDYXBhY2l0eSwgT3YKICNlbmRpZgogfQogCi10
ZW1wbGF0ZTx0eXBlbmFtZSBULCBzaXplX3QgaW5saW5lQ2FwYWNpdHksIHR5cGVuYW1lIE92ZXJm
bG93SGFuZGxlcj4KLWlubGluZSB2b2lkIFZlY3RvcjxULCBpbmxpbmVDYXBhY2l0eSwgT3ZlcmZs
b3dIYW5kbGVyPjo6YXNhblNldEJ1ZmZlclNpemVUb0Z1bGxDYXBhY2l0eSgpCit0ZW1wbGF0ZTx0
eXBlbmFtZSBULCBzaXplX3QgaW5saW5lQ2FwYWNpdHksIHR5cGVuYW1lIE92ZXJmbG93SGFuZGxl
ciwgc2l6ZV90IG1pbkNhcGFjaXR5PgoraW5saW5lIHZvaWQgVmVjdG9yPFQsIGlubGluZUNhcGFj
aXR5LCBPdmVyZmxvd0hhbmRsZXIsIG1pbkNhcGFjaXR5Pjo6YXNhblNldEJ1ZmZlclNpemVUb0Z1
bGxDYXBhY2l0eSgpCiB7CiAjaWYgQVNBTl9FTkFCTEVECiAgICAgaWYgKCFidWZmZXIoKSkKQEAg
LTEwNjMsOCArMTA2Myw4IEBAIGlubGluZSB2b2lkIFZlY3RvcjxULCBpbmxpbmVDYXBhY2l0eSwg
T3YKICNlbmRpZgogfQogCi10ZW1wbGF0ZTx0eXBlbmFtZSBULCBzaXplX3QgaW5saW5lQ2FwYWNp
dHksIHR5cGVuYW1lIE92ZXJmbG93SGFuZGxlcj4KLWlubGluZSB2b2lkIFZlY3RvcjxULCBpbmxp
bmVDYXBhY2l0eSwgT3ZlcmZsb3dIYW5kbGVyPjo6YXNhbkJ1ZmZlclNpemVXaWxsQ2hhbmdlVG8o
c2l6ZV90IG5ld1NpemUpCit0ZW1wbGF0ZTx0eXBlbmFtZSBULCBzaXplX3QgaW5saW5lQ2FwYWNp
dHksIHR5cGVuYW1lIE92ZXJmbG93SGFuZGxlciwgc2l6ZV90IG1pbkNhcGFjaXR5PgoraW5saW5l
IHZvaWQgVmVjdG9yPFQsIGlubGluZUNhcGFjaXR5LCBPdmVyZmxvd0hhbmRsZXIsIG1pbkNhcGFj
aXR5Pjo6YXNhbkJ1ZmZlclNpemVXaWxsQ2hhbmdlVG8oc2l6ZV90IG5ld1NpemUpCiB7CiAjaWYg
QVNBTl9FTkFCTEVECiAgICAgaWYgKCFidWZmZXIoKSkKQEAgLTEwNzcsOCArMTA3Nyw4IEBAIGlu
bGluZSB2b2lkIFZlY3RvcjxULCBpbmxpbmVDYXBhY2l0eSwgT3YKICNlbmRpZgogfQogCi10ZW1w
bGF0ZTx0eXBlbmFtZSBULCBzaXplX3QgaW5saW5lQ2FwYWNpdHksIHR5cGVuYW1lIE92ZXJmbG93
SGFuZGxlcj4KLXZvaWQgVmVjdG9yPFQsIGlubGluZUNhcGFjaXR5LCBPdmVyZmxvd0hhbmRsZXI+
OjpyZXNlcnZlQ2FwYWNpdHkoc2l6ZV90IG5ld0NhcGFjaXR5KQordGVtcGxhdGU8dHlwZW5hbWUg
VCwgc2l6ZV90IGlubGluZUNhcGFjaXR5LCB0eXBlbmFtZSBPdmVyZmxvd0hhbmRsZXIsIHNpemVf
dCBtaW5DYXBhY2l0eT4KK3ZvaWQgVmVjdG9yPFQsIGlubGluZUNhcGFjaXR5LCBPdmVyZmxvd0hh
bmRsZXIsIG1pbkNhcGFjaXR5Pjo6cmVzZXJ2ZUNhcGFjaXR5KHNpemVfdCBuZXdDYXBhY2l0eSkK
IHsKICAgICBpZiAobmV3Q2FwYWNpdHkgPD0gY2FwYWNpdHkoKSkKICAgICAgICAgcmV0dXJuOwpA
QCAtMTA5Niw4ICsxMDk2LDggQEAgdm9pZCBWZWN0b3I8VCwgaW5saW5lQ2FwYWNpdHksIE92ZXJm
bG93SAogICAgIEJhc2U6OmRlYWxsb2NhdGVCdWZmZXIob2xkQnVmZmVyKTsKIH0KIAotdGVtcGxh
dGU8dHlwZW5hbWUgVCwgc2l6ZV90IGlubGluZUNhcGFjaXR5LCB0eXBlbmFtZSBPdmVyZmxvd0hh
bmRsZXI+Ci1ib29sIFZlY3RvcjxULCBpbmxpbmVDYXBhY2l0eSwgT3ZlcmZsb3dIYW5kbGVyPjo6
dHJ5UmVzZXJ2ZUNhcGFjaXR5KHNpemVfdCBuZXdDYXBhY2l0eSkKK3RlbXBsYXRlPHR5cGVuYW1l
IFQsIHNpemVfdCBpbmxpbmVDYXBhY2l0eSwgdHlwZW5hbWUgT3ZlcmZsb3dIYW5kbGVyLCBzaXpl
X3QgbWluQ2FwYWNpdHk+Citib29sIFZlY3RvcjxULCBpbmxpbmVDYXBhY2l0eSwgT3ZlcmZsb3dI
YW5kbGVyLCBtaW5DYXBhY2l0eT46OnRyeVJlc2VydmVDYXBhY2l0eShzaXplX3QgbmV3Q2FwYWNp
dHkpCiB7CiAgICAgaWYgKG5ld0NhcGFjaXR5IDw9IGNhcGFjaXR5KCkpCiAgICAgICAgIHJldHVy
biB0cnVlOwpAQCAtMTExOSw4ICsxMTE5LDggQEAgYm9vbCBWZWN0b3I8VCwgaW5saW5lQ2FwYWNp
dHksIE92ZXJmbG93SAogICAgIHJldHVybiB0cnVlOwogfQogCi10ZW1wbGF0ZTx0eXBlbmFtZSBU
LCBzaXplX3QgaW5saW5lQ2FwYWNpdHksIHR5cGVuYW1lIE92ZXJmbG93SGFuZGxlcj4KLWlubGlu
ZSB2b2lkIFZlY3RvcjxULCBpbmxpbmVDYXBhY2l0eSwgT3ZlcmZsb3dIYW5kbGVyPjo6cmVzZXJ2
ZUluaXRpYWxDYXBhY2l0eShzaXplX3QgaW5pdGlhbENhcGFjaXR5KQordGVtcGxhdGU8dHlwZW5h
bWUgVCwgc2l6ZV90IGlubGluZUNhcGFjaXR5LCB0eXBlbmFtZSBPdmVyZmxvd0hhbmRsZXIsIHNp
emVfdCBtaW5DYXBhY2l0eT4KK2lubGluZSB2b2lkIFZlY3RvcjxULCBpbmxpbmVDYXBhY2l0eSwg
T3ZlcmZsb3dIYW5kbGVyLCBtaW5DYXBhY2l0eT46OnJlc2VydmVJbml0aWFsQ2FwYWNpdHkoc2l6
ZV90IGluaXRpYWxDYXBhY2l0eSkKIHsKICAgICBBU1NFUlQoIW1fc2l6ZSk7CiAgICAgQVNTRVJU
KGNhcGFjaXR5KCkgPT0gaW5saW5lQ2FwYWNpdHkpOwpAQCAtMTEyOCw4ICsxMTI4LDggQEAgaW5s
aW5lIHZvaWQgVmVjdG9yPFQsIGlubGluZUNhcGFjaXR5LCBPdgogICAgICAgICBCYXNlOjphbGxv
Y2F0ZUJ1ZmZlcihpbml0aWFsQ2FwYWNpdHkpOwogfQogCi10ZW1wbGF0ZTx0eXBlbmFtZSBULCBz
aXplX3QgaW5saW5lQ2FwYWNpdHksIHR5cGVuYW1lIE92ZXJmbG93SGFuZGxlcj4KLXZvaWQgVmVj
dG9yPFQsIGlubGluZUNhcGFjaXR5LCBPdmVyZmxvd0hhbmRsZXI+OjpzaHJpbmtDYXBhY2l0eShz
aXplX3QgbmV3Q2FwYWNpdHkpCit0ZW1wbGF0ZTx0eXBlbmFtZSBULCBzaXplX3QgaW5saW5lQ2Fw
YWNpdHksIHR5cGVuYW1lIE92ZXJmbG93SGFuZGxlciwgc2l6ZV90IG1pbkNhcGFjaXR5Pgordm9p
ZCBWZWN0b3I8VCwgaW5saW5lQ2FwYWNpdHksIE92ZXJmbG93SGFuZGxlciwgbWluQ2FwYWNpdHk+
OjpzaHJpbmtDYXBhY2l0eShzaXplX3QgbmV3Q2FwYWNpdHkpCiB7CiAgICAgaWYgKG5ld0NhcGFj
aXR5ID49IGNhcGFjaXR5KCkpCiAgICAgICAgIHJldHVybjsKQEAgLTExNjIsOCArMTE2Miw4IEBA
IHZvaWQgVmVjdG9yPFQsIGlubGluZUNhcGFjaXR5LCBPdmVyZmxvd0gKIC8vIFRlbXBsYXRpemlu
ZyB0aGVzZSBpcyBiZXR0ZXIgdGhhbiBqdXN0IGxldHRpbmcgdGhlIGNvbnZlcnNpb24gaGFwcGVu
IGltcGxpY2l0bHksCiAvLyBiZWNhdXNlIGZvciBpbnN0YW5jZSBpdCBhbGxvd3MgYSBQYXNzUmVm
UHRyIHRvIGJlIGFwcGVuZGVkIHRvIGEgUmVmUHRyIHZlY3RvcgogLy8gd2l0aG91dCByZWZjb3Vu
dCB0aHJhc2guCi10ZW1wbGF0ZTx0eXBlbmFtZSBULCBzaXplX3QgaW5saW5lQ2FwYWNpdHksIHR5
cGVuYW1lIE92ZXJmbG93SGFuZGxlcj4gdGVtcGxhdGU8dHlwZW5hbWUgVT4KLXZvaWQgVmVjdG9y
PFQsIGlubGluZUNhcGFjaXR5LCBPdmVyZmxvd0hhbmRsZXI+OjphcHBlbmQoY29uc3QgVSogZGF0
YSwgc2l6ZV90IGRhdGFTaXplKQordGVtcGxhdGU8dHlwZW5hbWUgVCwgc2l6ZV90IGlubGluZUNh
cGFjaXR5LCB0eXBlbmFtZSBPdmVyZmxvd0hhbmRsZXIsIHNpemVfdCBtaW5DYXBhY2l0eT4gdGVt
cGxhdGU8dHlwZW5hbWUgVT4KK3ZvaWQgVmVjdG9yPFQsIGlubGluZUNhcGFjaXR5LCBPdmVyZmxv
d0hhbmRsZXIsIG1pbkNhcGFjaXR5Pjo6YXBwZW5kKGNvbnN0IFUqIGRhdGEsIHNpemVfdCBkYXRh
U2l6ZSkKIHsKICAgICBzaXplX3QgbmV3U2l6ZSA9IG1fc2l6ZSArIGRhdGFTaXplOwogICAgIGlm
IChuZXdTaXplID4gY2FwYWNpdHkoKSkgewpAQCAtMTE3OCw4ICsxMTc4LDggQEAgdm9pZCBWZWN0
b3I8VCwgaW5saW5lQ2FwYWNpdHksIE92ZXJmbG93SAogICAgIG1fc2l6ZSA9IG5ld1NpemU7CiB9
CiAKLXRlbXBsYXRlPHR5cGVuYW1lIFQsIHNpemVfdCBpbmxpbmVDYXBhY2l0eSwgdHlwZW5hbWUg
T3ZlcmZsb3dIYW5kbGVyPiB0ZW1wbGF0ZTx0eXBlbmFtZSBVPgotYm9vbCBWZWN0b3I8VCwgaW5s
aW5lQ2FwYWNpdHksIE92ZXJmbG93SGFuZGxlcj46OnRyeUFwcGVuZChjb25zdCBVKiBkYXRhLCBz
aXplX3QgZGF0YVNpemUpCit0ZW1wbGF0ZTx0eXBlbmFtZSBULCBzaXplX3QgaW5saW5lQ2FwYWNp
dHksIHR5cGVuYW1lIE92ZXJmbG93SGFuZGxlciwgc2l6ZV90IG1pbkNhcGFjaXR5PiB0ZW1wbGF0
ZTx0eXBlbmFtZSBVPgorYm9vbCBWZWN0b3I8VCwgaW5saW5lQ2FwYWNpdHksIE92ZXJmbG93SGFu
ZGxlciwgbWluQ2FwYWNpdHk+Ojp0cnlBcHBlbmQoY29uc3QgVSogZGF0YSwgc2l6ZV90IGRhdGFT
aXplKQogewogICAgIHNpemVfdCBuZXdTaXplID0gbV9zaXplICsgZGF0YVNpemU7CiAgICAgaWYg
KG5ld1NpemUgPiBjYXBhY2l0eSgpKSB7CkBAIC0xMTk3LDggKzExOTcsOCBAQCBib29sIFZlY3Rv
cjxULCBpbmxpbmVDYXBhY2l0eSwgT3ZlcmZsb3dICiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLXRl
bXBsYXRlPHR5cGVuYW1lIFQsIHNpemVfdCBpbmxpbmVDYXBhY2l0eSwgdHlwZW5hbWUgT3ZlcmZs
b3dIYW5kbGVyPiB0ZW1wbGF0ZTx0eXBlbmFtZSBVPgotQUxXQVlTX0lOTElORSB2b2lkIFZlY3Rv
cjxULCBpbmxpbmVDYXBhY2l0eSwgT3ZlcmZsb3dIYW5kbGVyPjo6YXBwZW5kKFUmJiB2YWx1ZSkK
K3RlbXBsYXRlPHR5cGVuYW1lIFQsIHNpemVfdCBpbmxpbmVDYXBhY2l0eSwgdHlwZW5hbWUgT3Zl
cmZsb3dIYW5kbGVyLCBzaXplX3QgbWluQ2FwYWNpdHk+IHRlbXBsYXRlPHR5cGVuYW1lIFU+CitB
TFdBWVNfSU5MSU5FIHZvaWQgVmVjdG9yPFQsIGlubGluZUNhcGFjaXR5LCBPdmVyZmxvd0hhbmRs
ZXIsIG1pbkNhcGFjaXR5Pjo6YXBwZW5kKFUmJiB2YWx1ZSkKIHsKICAgICBpZiAoc2l6ZSgpICE9
IGNhcGFjaXR5KCkpIHsKICAgICAgICAgYXNhbkJ1ZmZlclNpemVXaWxsQ2hhbmdlVG8obV9zaXpl
ICsgMSk7CkBAIC0xMjEwLDggKzEyMTAsOCBAQCBBTFdBWVNfSU5MSU5FIHZvaWQgVmVjdG9yPFQs
IGlubGluZUNhcGFjCiAgICAgYXBwZW5kU2xvd0Nhc2Uoc3RkOjpmb3J3YXJkPFU+KHZhbHVlKSk7
CiB9CiAKLXRlbXBsYXRlPHR5cGVuYW1lIFQsIHNpemVfdCBpbmxpbmVDYXBhY2l0eSwgdHlwZW5h
bWUgT3ZlcmZsb3dIYW5kbGVyPiB0ZW1wbGF0ZTx0eXBlbmFtZSBVPgotdm9pZCBWZWN0b3I8VCwg
aW5saW5lQ2FwYWNpdHksIE92ZXJmbG93SGFuZGxlcj46OmFwcGVuZFNsb3dDYXNlKFUmJiB2YWx1
ZSkKK3RlbXBsYXRlPHR5cGVuYW1lIFQsIHNpemVfdCBpbmxpbmVDYXBhY2l0eSwgdHlwZW5hbWUg
T3ZlcmZsb3dIYW5kbGVyLCBzaXplX3QgbWluQ2FwYWNpdHk+IHRlbXBsYXRlPHR5cGVuYW1lIFU+
Cit2b2lkIFZlY3RvcjxULCBpbmxpbmVDYXBhY2l0eSwgT3ZlcmZsb3dIYW5kbGVyLCBtaW5DYXBh
Y2l0eT46OmFwcGVuZFNsb3dDYXNlKFUmJiB2YWx1ZSkKIHsKICAgICBBU1NFUlQoc2l6ZSgpID09
IGNhcGFjaXR5KCkpOwogCkBAIC0xMjI3LDggKzEyMjcsOCBAQCB2b2lkIFZlY3RvcjxULCBpbmxp
bmVDYXBhY2l0eSwgT3ZlcmZsb3dICiAvLyBUaGlzIHZlcnNpb24gb2YgYXBwZW5kIHNhdmVzIGEg
YnJhbmNoIGluIHRoZSBjYXNlIHdoZXJlIHlvdSBrbm93IHRoYXQgdGhlCiAvLyB2ZWN0b3IncyBj
YXBhY2l0eSBpcyBsYXJnZSBlbm91Z2ggZm9yIHRoZSBhcHBlbmQgdG8gc3VjY2VlZC4KIAotdGVt
cGxhdGU8dHlwZW5hbWUgVCwgc2l6ZV90IGlubGluZUNhcGFjaXR5LCB0eXBlbmFtZSBPdmVyZmxv
d0hhbmRsZXI+IHRlbXBsYXRlPHR5cGVuYW1lIFU+Ci1pbmxpbmUgdm9pZCBWZWN0b3I8VCwgaW5s
aW5lQ2FwYWNpdHksIE92ZXJmbG93SGFuZGxlcj46OnVuY2hlY2tlZEFwcGVuZChVJiYgdmFsdWUp
Cit0ZW1wbGF0ZTx0eXBlbmFtZSBULCBzaXplX3QgaW5saW5lQ2FwYWNpdHksIHR5cGVuYW1lIE92
ZXJmbG93SGFuZGxlciwgc2l6ZV90IG1pbkNhcGFjaXR5PiB0ZW1wbGF0ZTx0eXBlbmFtZSBVPgor
aW5saW5lIHZvaWQgVmVjdG9yPFQsIGlubGluZUNhcGFjaXR5LCBPdmVyZmxvd0hhbmRsZXIsIG1p
bkNhcGFjaXR5Pjo6dW5jaGVja2VkQXBwZW5kKFUmJiB2YWx1ZSkKIHsKICAgICBBU1NFUlQoc2l6
ZSgpIDwgY2FwYWNpdHkoKSk7CiAKQEAgLTEyMzksMTQgKzEyMzksMTQgQEAgaW5saW5lIHZvaWQg
VmVjdG9yPFQsIGlubGluZUNhcGFjaXR5LCBPdgogICAgICsrbV9zaXplOwogfQogCi10ZW1wbGF0
ZTx0eXBlbmFtZSBULCBzaXplX3QgaW5saW5lQ2FwYWNpdHksIHR5cGVuYW1lIE92ZXJmbG93SGFu
ZGxlcj4gdGVtcGxhdGU8dHlwZW5hbWUgVSwgc2l6ZV90IG90aGVyQ2FwYWNpdHk+Ci1pbmxpbmUg
dm9pZCBWZWN0b3I8VCwgaW5saW5lQ2FwYWNpdHksIE92ZXJmbG93SGFuZGxlcj46OmFwcGVuZFZl
Y3Rvcihjb25zdCBWZWN0b3I8VSwgb3RoZXJDYXBhY2l0eT4mIHZhbCkKK3RlbXBsYXRlPHR5cGVu
YW1lIFQsIHNpemVfdCBpbmxpbmVDYXBhY2l0eSwgdHlwZW5hbWUgT3ZlcmZsb3dIYW5kbGVyLCBz
aXplX3QgbWluQ2FwYWNpdHk+IHRlbXBsYXRlPHR5cGVuYW1lIFUsIHNpemVfdCBvdGhlckNhcGFj
aXR5PgoraW5saW5lIHZvaWQgVmVjdG9yPFQsIGlubGluZUNhcGFjaXR5LCBPdmVyZmxvd0hhbmRs
ZXIsIG1pbkNhcGFjaXR5Pjo6YXBwZW5kVmVjdG9yKGNvbnN0IFZlY3RvcjxVLCBvdGhlckNhcGFj
aXR5PiYgdmFsKQogewogICAgIGFwcGVuZCh2YWwuYmVnaW4oKSwgdmFsLnNpemUoKSk7CiB9CiAK
LXRlbXBsYXRlPHR5cGVuYW1lIFQsIHNpemVfdCBpbmxpbmVDYXBhY2l0eSwgdHlwZW5hbWUgT3Zl
cmZsb3dIYW5kbGVyPiB0ZW1wbGF0ZTx0eXBlbmFtZSBVPgotdm9pZCBWZWN0b3I8VCwgaW5saW5l
Q2FwYWNpdHksIE92ZXJmbG93SGFuZGxlcj46Omluc2VydChzaXplX3QgcG9zaXRpb24sIGNvbnN0
IFUqIGRhdGEsIHNpemVfdCBkYXRhU2l6ZSkKK3RlbXBsYXRlPHR5cGVuYW1lIFQsIHNpemVfdCBp
bmxpbmVDYXBhY2l0eSwgdHlwZW5hbWUgT3ZlcmZsb3dIYW5kbGVyLCBzaXplX3QgbWluQ2FwYWNp
dHk+IHRlbXBsYXRlPHR5cGVuYW1lIFU+Cit2b2lkIFZlY3RvcjxULCBpbmxpbmVDYXBhY2l0eSwg
T3ZlcmZsb3dIYW5kbGVyLCBtaW5DYXBhY2l0eT46Omluc2VydChzaXplX3QgcG9zaXRpb24sIGNv
bnN0IFUqIGRhdGEsIHNpemVfdCBkYXRhU2l6ZSkKIHsKICAgICBBU1NFUlRfV0lUSF9TRUNVUklU
WV9JTVBMSUNBVElPTihwb3NpdGlvbiA8PSBzaXplKCkpOwogICAgIHNpemVfdCBuZXdTaXplID0g
bV9zaXplICsgZGF0YVNpemU7CkBAIC0xMjYzLDggKzEyNjMsOCBAQCB2b2lkIFZlY3RvcjxULCBp
bmxpbmVDYXBhY2l0eSwgT3ZlcmZsb3dICiAgICAgbV9zaXplID0gbmV3U2l6ZTsKIH0KICAKLXRl
bXBsYXRlPHR5cGVuYW1lIFQsIHNpemVfdCBpbmxpbmVDYXBhY2l0eSwgdHlwZW5hbWUgT3ZlcmZs
b3dIYW5kbGVyPiB0ZW1wbGF0ZTx0eXBlbmFtZSBVPgotaW5saW5lIHZvaWQgVmVjdG9yPFQsIGlu
bGluZUNhcGFjaXR5LCBPdmVyZmxvd0hhbmRsZXI+OjppbnNlcnQoc2l6ZV90IHBvc2l0aW9uLCBV
JiYgdmFsdWUpCit0ZW1wbGF0ZTx0eXBlbmFtZSBULCBzaXplX3QgaW5saW5lQ2FwYWNpdHksIHR5
cGVuYW1lIE92ZXJmbG93SGFuZGxlciwgc2l6ZV90IG1pbkNhcGFjaXR5PiB0ZW1wbGF0ZTx0eXBl
bmFtZSBVPgoraW5saW5lIHZvaWQgVmVjdG9yPFQsIGlubGluZUNhcGFjaXR5LCBPdmVyZmxvd0hh
bmRsZXIsIG1pbkNhcGFjaXR5Pjo6aW5zZXJ0KHNpemVfdCBwb3NpdGlvbiwgVSYmIHZhbHVlKQog
ewogICAgIEFTU0VSVF9XSVRIX1NFQ1VSSVRZX0lNUExJQ0FUSU9OKHBvc2l0aW9uIDw9IHNpemUo
KSk7CiAKQEAgLTEyODIsMTQgKzEyODIsMTQgQEAgaW5saW5lIHZvaWQgVmVjdG9yPFQsIGlubGlu
ZUNhcGFjaXR5LCBPdgogICAgICsrbV9zaXplOwogfQogCi10ZW1wbGF0ZTx0eXBlbmFtZSBULCBz
aXplX3QgaW5saW5lQ2FwYWNpdHksIHR5cGVuYW1lIE92ZXJmbG93SGFuZGxlcj4gdGVtcGxhdGU8
dHlwZW5hbWUgVSwgc2l6ZV90IGM+Ci1pbmxpbmUgdm9pZCBWZWN0b3I8VCwgaW5saW5lQ2FwYWNp
dHksIE92ZXJmbG93SGFuZGxlcj46Omluc2VydFZlY3RvcihzaXplX3QgcG9zaXRpb24sIGNvbnN0
IFZlY3RvcjxVLCBjPiYgdmFsKQordGVtcGxhdGU8dHlwZW5hbWUgVCwgc2l6ZV90IGlubGluZUNh
cGFjaXR5LCB0eXBlbmFtZSBPdmVyZmxvd0hhbmRsZXIsIHNpemVfdCBtaW5DYXBhY2l0eT4gdGVt
cGxhdGU8dHlwZW5hbWUgVSwgc2l6ZV90IGM+CitpbmxpbmUgdm9pZCBWZWN0b3I8VCwgaW5saW5l
Q2FwYWNpdHksIE92ZXJmbG93SGFuZGxlciwgbWluQ2FwYWNpdHk+OjppbnNlcnRWZWN0b3Ioc2l6
ZV90IHBvc2l0aW9uLCBjb25zdCBWZWN0b3I8VSwgYz4mIHZhbCkKIHsKICAgICBpbnNlcnQocG9z
aXRpb24sIHZhbC5iZWdpbigpLCB2YWwuc2l6ZSgpKTsKIH0KIAotdGVtcGxhdGU8dHlwZW5hbWUg
VCwgc2l6ZV90IGlubGluZUNhcGFjaXR5LCB0eXBlbmFtZSBPdmVyZmxvd0hhbmRsZXI+Ci1pbmxp
bmUgdm9pZCBWZWN0b3I8VCwgaW5saW5lQ2FwYWNpdHksIE92ZXJmbG93SGFuZGxlcj46OnJlbW92
ZShzaXplX3QgcG9zaXRpb24pCit0ZW1wbGF0ZTx0eXBlbmFtZSBULCBzaXplX3QgaW5saW5lQ2Fw
YWNpdHksIHR5cGVuYW1lIE92ZXJmbG93SGFuZGxlciwgc2l6ZV90IG1pbkNhcGFjaXR5PgoraW5s
aW5lIHZvaWQgVmVjdG9yPFQsIGlubGluZUNhcGFjaXR5LCBPdmVyZmxvd0hhbmRsZXIsIG1pbkNh
cGFjaXR5Pjo6cmVtb3ZlKHNpemVfdCBwb3NpdGlvbikKIHsKICAgICBBU1NFUlRfV0lUSF9TRUNV
UklUWV9JTVBMSUNBVElPTihwb3NpdGlvbiA8IHNpemUoKSk7CiAgICAgVCogc3BvdCA9IGJlZ2lu
KCkgKyBwb3NpdGlvbjsKQEAgLTEyOTksOCArMTI5OSw4IEBAIGlubGluZSB2b2lkIFZlY3RvcjxU
LCBpbmxpbmVDYXBhY2l0eSwgT3YKICAgICAtLW1fc2l6ZTsKIH0KIAotdGVtcGxhdGU8dHlwZW5h
bWUgVCwgc2l6ZV90IGlubGluZUNhcGFjaXR5LCB0eXBlbmFtZSBPdmVyZmxvd0hhbmRsZXI+Ci1p
bmxpbmUgdm9pZCBWZWN0b3I8VCwgaW5saW5lQ2FwYWNpdHksIE92ZXJmbG93SGFuZGxlcj46OnJl
bW92ZShzaXplX3QgcG9zaXRpb24sIHNpemVfdCBsZW5ndGgpCit0ZW1wbGF0ZTx0eXBlbmFtZSBU
LCBzaXplX3QgaW5saW5lQ2FwYWNpdHksIHR5cGVuYW1lIE92ZXJmbG93SGFuZGxlciwgc2l6ZV90
IG1pbkNhcGFjaXR5PgoraW5saW5lIHZvaWQgVmVjdG9yPFQsIGlubGluZUNhcGFjaXR5LCBPdmVy
Zmxvd0hhbmRsZXIsIG1pbkNhcGFjaXR5Pjo6cmVtb3ZlKHNpemVfdCBwb3NpdGlvbiwgc2l6ZV90
IGxlbmd0aCkKIHsKICAgICBBU1NFUlRfV0lUSF9TRUNVUklUWV9JTVBMSUNBVElPTihwb3NpdGlv
biA8PSBzaXplKCkpOwogICAgIEFTU0VSVF9XSVRIX1NFQ1VSSVRZX0lNUExJQ0FUSU9OKHBvc2l0
aW9uICsgbGVuZ3RoIDw9IHNpemUoKSk7CkBAIC0xMzEyLDE4ICsxMzEyLDE4IEBAIGlubGluZSB2
b2lkIFZlY3RvcjxULCBpbmxpbmVDYXBhY2l0eSwgT3YKICAgICBtX3NpemUgLT0gbGVuZ3RoOwog
fQogCi10ZW1wbGF0ZTx0eXBlbmFtZSBULCBzaXplX3QgaW5saW5lQ2FwYWNpdHksIHR5cGVuYW1l
IE92ZXJmbG93SGFuZGxlcj4KK3RlbXBsYXRlPHR5cGVuYW1lIFQsIHNpemVfdCBpbmxpbmVDYXBh
Y2l0eSwgdHlwZW5hbWUgT3ZlcmZsb3dIYW5kbGVyLCBzaXplX3QgbWluQ2FwYWNpdHk+CiB0ZW1w
bGF0ZTx0eXBlbmFtZSBVPgotaW5saW5lIGJvb2wgVmVjdG9yPFQsIGlubGluZUNhcGFjaXR5LCBP
dmVyZmxvd0hhbmRsZXI+OjpyZW1vdmVGaXJzdChjb25zdCBVJiB2YWx1ZSkKK2lubGluZSBib29s
IFZlY3RvcjxULCBpbmxpbmVDYXBhY2l0eSwgT3ZlcmZsb3dIYW5kbGVyLCBtaW5DYXBhY2l0eT46
OnJlbW92ZUZpcnN0KGNvbnN0IFUmIHZhbHVlKQogewogICAgIHJldHVybiByZW1vdmVGaXJzdE1h
dGNoaW5nKFsmdmFsdWVdIChjb25zdCBUJiBjdXJyZW50KSB7CiAgICAgICAgIHJldHVybiBjdXJy
ZW50ID09IHZhbHVlOwogICAgIH0pOwogfQogCi10ZW1wbGF0ZTx0eXBlbmFtZSBULCBzaXplX3Qg
aW5saW5lQ2FwYWNpdHksIHR5cGVuYW1lIE92ZXJmbG93SGFuZGxlcj4KK3RlbXBsYXRlPHR5cGVu
YW1lIFQsIHNpemVfdCBpbmxpbmVDYXBhY2l0eSwgdHlwZW5hbWUgT3ZlcmZsb3dIYW5kbGVyLCBz
aXplX3QgbWluQ2FwYWNpdHk+CiB0ZW1wbGF0ZTx0eXBlbmFtZSBNYXRjaEZ1bmN0aW9uPgotaW5s
aW5lIGJvb2wgVmVjdG9yPFQsIGlubGluZUNhcGFjaXR5LCBPdmVyZmxvd0hhbmRsZXI+OjpyZW1v
dmVGaXJzdE1hdGNoaW5nKGNvbnN0IE1hdGNoRnVuY3Rpb24mIG1hdGNoZXMpCitpbmxpbmUgYm9v
bCBWZWN0b3I8VCwgaW5saW5lQ2FwYWNpdHksIE92ZXJmbG93SGFuZGxlciwgbWluQ2FwYWNpdHk+
OjpyZW1vdmVGaXJzdE1hdGNoaW5nKGNvbnN0IE1hdGNoRnVuY3Rpb24mIG1hdGNoZXMpCiB7CiAg
ICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBzaXplKCk7ICsraSkgewogICAgICAgICBpZiAobWF0
Y2hlcyhhdChpKSkpIHsKQEAgLTEzMzQsMTggKzEzMzQsMTggQEAgaW5saW5lIGJvb2wgVmVjdG9y
PFQsIGlubGluZUNhcGFjaXR5LCBPdgogICAgIHJldHVybiBmYWxzZTsKIH0KIAotdGVtcGxhdGU8
dHlwZW5hbWUgVCwgc2l6ZV90IGlubGluZUNhcGFjaXR5LCB0eXBlbmFtZSBPdmVyZmxvd0hhbmRs
ZXI+Cit0ZW1wbGF0ZTx0eXBlbmFtZSBULCBzaXplX3QgaW5saW5lQ2FwYWNpdHksIHR5cGVuYW1l
IE92ZXJmbG93SGFuZGxlciwgc2l6ZV90IG1pbkNhcGFjaXR5PgogdGVtcGxhdGU8dHlwZW5hbWUg
VT4KLWlubGluZSB1bnNpZ25lZCBWZWN0b3I8VCwgaW5saW5lQ2FwYWNpdHksIE92ZXJmbG93SGFu
ZGxlcj46OnJlbW92ZUFsbChjb25zdCBVJiB2YWx1ZSkKK2lubGluZSB1bnNpZ25lZCBWZWN0b3I8
VCwgaW5saW5lQ2FwYWNpdHksIE92ZXJmbG93SGFuZGxlciwgbWluQ2FwYWNpdHk+OjpyZW1vdmVB
bGwoY29uc3QgVSYgdmFsdWUpCiB7CiAgICAgcmV0dXJuIHJlbW92ZUFsbE1hdGNoaW5nKFsmdmFs
dWVdIChjb25zdCBUJiBjdXJyZW50KSB7CiAgICAgICAgIHJldHVybiBjdXJyZW50ID09IHZhbHVl
OwogICAgIH0pOwogfQogCi10ZW1wbGF0ZTx0eXBlbmFtZSBULCBzaXplX3QgaW5saW5lQ2FwYWNp
dHksIHR5cGVuYW1lIE92ZXJmbG93SGFuZGxlcj4KK3RlbXBsYXRlPHR5cGVuYW1lIFQsIHNpemVf
dCBpbmxpbmVDYXBhY2l0eSwgdHlwZW5hbWUgT3ZlcmZsb3dIYW5kbGVyLCBzaXplX3QgbWluQ2Fw
YWNpdHk+CiB0ZW1wbGF0ZTx0eXBlbmFtZSBNYXRjaEZ1bmN0aW9uPgotaW5saW5lIHVuc2lnbmVk
IFZlY3RvcjxULCBpbmxpbmVDYXBhY2l0eSwgT3ZlcmZsb3dIYW5kbGVyPjo6cmVtb3ZlQWxsTWF0
Y2hpbmcoY29uc3QgTWF0Y2hGdW5jdGlvbiYgbWF0Y2hlcykKK2lubGluZSB1bnNpZ25lZCBWZWN0
b3I8VCwgaW5saW5lQ2FwYWNpdHksIE92ZXJmbG93SGFuZGxlciwgbWluQ2FwYWNpdHk+OjpyZW1v
dmVBbGxNYXRjaGluZyhjb25zdCBNYXRjaEZ1bmN0aW9uJiBtYXRjaGVzKQogewogICAgIGl0ZXJh
dG9yIGhvbGVCZWdpbiA9IGVuZCgpOwogICAgIGl0ZXJhdG9yIGhvbGVFbmQgPSBlbmQoKTsKQEAg
LTEzNzAsMTUgKzEzNzAsMTUgQEAgaW5saW5lIHVuc2lnbmVkIFZlY3RvcjxULCBpbmxpbmVDYXBh
Y2l0eQogICAgIHJldHVybiBtYXRjaENvdW50OwogfQogCi10ZW1wbGF0ZTx0eXBlbmFtZSBULCBz
aXplX3QgaW5saW5lQ2FwYWNpdHksIHR5cGVuYW1lIE92ZXJmbG93SGFuZGxlcj4KLWlubGluZSB2
b2lkIFZlY3RvcjxULCBpbmxpbmVDYXBhY2l0eSwgT3ZlcmZsb3dIYW5kbGVyPjo6cmV2ZXJzZSgp
Cit0ZW1wbGF0ZTx0eXBlbmFtZSBULCBzaXplX3QgaW5saW5lQ2FwYWNpdHksIHR5cGVuYW1lIE92
ZXJmbG93SGFuZGxlciwgc2l6ZV90IG1pbkNhcGFjaXR5PgoraW5saW5lIHZvaWQgVmVjdG9yPFQs
IGlubGluZUNhcGFjaXR5LCBPdmVyZmxvd0hhbmRsZXIsIG1pbkNhcGFjaXR5Pjo6cmV2ZXJzZSgp
CiB7CiAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtX3NpemUgLyAyOyArK2kpCiAgICAgICAg
IHN0ZDo6c3dhcChhdChpKSwgYXQobV9zaXplIC0gMSAtIGkpKTsKIH0KIAotdGVtcGxhdGU8dHlw
ZW5hbWUgVCwgc2l6ZV90IGlubGluZUNhcGFjaXR5LCB0eXBlbmFtZSBPdmVyZmxvd0hhbmRsZXI+
Ci1pbmxpbmUgTWFsbG9jUHRyPFQ+IFZlY3RvcjxULCBpbmxpbmVDYXBhY2l0eSwgT3ZlcmZsb3dI
YW5kbGVyPjo6cmVsZWFzZUJ1ZmZlcigpCit0ZW1wbGF0ZTx0eXBlbmFtZSBULCBzaXplX3QgaW5s
aW5lQ2FwYWNpdHksIHR5cGVuYW1lIE92ZXJmbG93SGFuZGxlciwgc2l6ZV90IG1pbkNhcGFjaXR5
PgoraW5saW5lIE1hbGxvY1B0cjxUPiBWZWN0b3I8VCwgaW5saW5lQ2FwYWNpdHksIE92ZXJmbG93
SGFuZGxlciwgbWluQ2FwYWNpdHk+OjpyZWxlYXNlQnVmZmVyKCkKIHsKICAgICAvLyBGSVhNRTog
RmluZCBhIHdheSB0byBwcmVzZXJ2ZSBhbm5vdGF0aW9ucyBvbiB0aGUgcmV0dXJuZWQgYnVmZmVy
LgogICAgIC8vIEFTYW4gcmVxdWlyZXMgdGhhdCBhbGwgYW5ub3RhdGlvbnMgYXJlIHJlbW92ZWQg
YmVmb3JlIGRlYWxsb2NhdGlvbiwKQEAgLTEzOTksOCArMTM5OSw4IEBAIGlubGluZSBNYWxsb2NQ
dHI8VD4gVmVjdG9yPFQsIGlubGluZUNhcGEKICAgICByZXR1cm4gYnVmZmVyOwogfQogCi10ZW1w
bGF0ZTx0eXBlbmFtZSBULCBzaXplX3QgaW5saW5lQ2FwYWNpdHksIHR5cGVuYW1lIE92ZXJmbG93
SGFuZGxlcj4KLWlubGluZSB2b2lkIFZlY3RvcjxULCBpbmxpbmVDYXBhY2l0eSwgT3ZlcmZsb3dI
YW5kbGVyPjo6Y2hlY2tDb25zaXN0ZW5jeSgpCit0ZW1wbGF0ZTx0eXBlbmFtZSBULCBzaXplX3Qg
aW5saW5lQ2FwYWNpdHksIHR5cGVuYW1lIE92ZXJmbG93SGFuZGxlciwgc2l6ZV90IG1pbkNhcGFj
aXR5PgoraW5saW5lIHZvaWQgVmVjdG9yPFQsIGlubGluZUNhcGFjaXR5LCBPdmVyZmxvd0hhbmRs
ZXIsIG1pbkNhcGFjaXR5Pjo6Y2hlY2tDb25zaXN0ZW5jeSgpCiB7CiAjaWYgIUFTU0VSVF9ESVNB
QkxFRAogICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgc2l6ZSgpOyArK2kpCkBAIC0xNDA4LDE0
ICsxNDA4LDE0IEBAIGlubGluZSB2b2lkIFZlY3RvcjxULCBpbmxpbmVDYXBhY2l0eSwgT3YKICNl
bmRpZgogfQogCi10ZW1wbGF0ZTx0eXBlbmFtZSBULCBzaXplX3QgaW5saW5lQ2FwYWNpdHksIHR5
cGVuYW1lIE92ZXJmbG93SGFuZGxlcj4KLWlubGluZSB2b2lkIHN3YXAoVmVjdG9yPFQsIGlubGlu
ZUNhcGFjaXR5LCBPdmVyZmxvd0hhbmRsZXI+JiBhLCBWZWN0b3I8VCwgaW5saW5lQ2FwYWNpdHks
IE92ZXJmbG93SGFuZGxlcj4mIGIpCit0ZW1wbGF0ZTx0eXBlbmFtZSBULCBzaXplX3QgaW5saW5l
Q2FwYWNpdHksIHR5cGVuYW1lIE92ZXJmbG93SGFuZGxlciwgc2l6ZV90IG1pbkNhcGFjaXR5Pgor
aW5saW5lIHZvaWQgc3dhcChWZWN0b3I8VCwgaW5saW5lQ2FwYWNpdHksIE92ZXJmbG93SGFuZGxl
ciwgbWluQ2FwYWNpdHk+JiBhLCBWZWN0b3I8VCwgaW5saW5lQ2FwYWNpdHksIE92ZXJmbG93SGFu
ZGxlciwgbWluQ2FwYWNpdHk+JiBiKQogewogICAgIGEuc3dhcChiKTsKIH0KIAotdGVtcGxhdGU8
dHlwZW5hbWUgVCwgc2l6ZV90IGlubGluZUNhcGFjaXR5LCB0eXBlbmFtZSBPdmVyZmxvd0hhbmRs
ZXI+Ci1ib29sIG9wZXJhdG9yPT0oY29uc3QgVmVjdG9yPFQsIGlubGluZUNhcGFjaXR5LCBPdmVy
Zmxvd0hhbmRsZXI+JiBhLCBjb25zdCBWZWN0b3I8VCwgaW5saW5lQ2FwYWNpdHksIE92ZXJmbG93
SGFuZGxlcj4mIGIpCit0ZW1wbGF0ZTx0eXBlbmFtZSBULCBzaXplX3QgaW5saW5lQ2FwYWNpdHks
IHR5cGVuYW1lIE92ZXJmbG93SGFuZGxlciwgc2l6ZV90IG1pbkNhcGFjaXR5PgorYm9vbCBvcGVy
YXRvcj09KGNvbnN0IFZlY3RvcjxULCBpbmxpbmVDYXBhY2l0eSwgT3ZlcmZsb3dIYW5kbGVyLCBt
aW5DYXBhY2l0eT4mIGEsIGNvbnN0IFZlY3RvcjxULCBpbmxpbmVDYXBhY2l0eSwgT3ZlcmZsb3dI
YW5kbGVyLCBtaW5DYXBhY2l0eT4mIGIpCiB7CiAgICAgaWYgKGEuc2l6ZSgpICE9IGIuc2l6ZSgp
KQogICAgICAgICByZXR1cm4gZmFsc2U7CkBAIC0xNDIzLDggKzE0MjMsOCBAQCBib29sIG9wZXJh
dG9yPT0oY29uc3QgVmVjdG9yPFQsIGlubGluZUNhCiAgICAgcmV0dXJuIFZlY3RvclR5cGVPcGVy
YXRpb25zPFQ+Ojpjb21wYXJlKGEuZGF0YSgpLCBiLmRhdGEoKSwgYS5zaXplKCkpOwogfQogCi10
ZW1wbGF0ZTx0eXBlbmFtZSBULCBzaXplX3QgaW5saW5lQ2FwYWNpdHksIHR5cGVuYW1lIE92ZXJm
bG93SGFuZGxlcj4KLWlubGluZSBib29sIG9wZXJhdG9yIT0oY29uc3QgVmVjdG9yPFQsIGlubGlu
ZUNhcGFjaXR5LCBPdmVyZmxvd0hhbmRsZXI+JiBhLCBjb25zdCBWZWN0b3I8VCwgaW5saW5lQ2Fw
YWNpdHksIE92ZXJmbG93SGFuZGxlcj4mIGIpCit0ZW1wbGF0ZTx0eXBlbmFtZSBULCBzaXplX3Qg
aW5saW5lQ2FwYWNpdHksIHR5cGVuYW1lIE92ZXJmbG93SGFuZGxlciwgc2l6ZV90IG1pbkNhcGFj
aXR5PgoraW5saW5lIGJvb2wgb3BlcmF0b3IhPShjb25zdCBWZWN0b3I8VCwgaW5saW5lQ2FwYWNp
dHksIE92ZXJmbG93SGFuZGxlciwgbWluQ2FwYWNpdHk+JiBhLCBjb25zdCBWZWN0b3I8VCwgaW5s
aW5lQ2FwYWNpdHksIE92ZXJmbG93SGFuZGxlciwgbWluQ2FwYWNpdHk+JiBiKQogewogICAgIHJl
dHVybiAhKGEgPT0gYik7CiB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCShyZXZpc2lvbiAxODM0OTMpCisrKyBT
b3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwyNSBAQAor
MjAxNS0wNC0yOCAgQWxleCBDaHJpc3RlbnNlbiAgPGFjaHJpc3RlbnNlbkB3ZWJraXQub3JnPgor
CisgICAgICAgIFtDb250ZW50IEV4dGVuc2lvbnNdIFVzZSBsZXNzIG1lbW9yeSBmb3IgQ29tYmlu
ZWRVUkxGaWx0ZXJzLgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9MTQ0MjkwCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAg
ICAgICAgKiBjb250ZW50ZXh0ZW5zaW9ucy9Db21iaW5lZFVSTEZpbHRlcnMuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6Q29udGVudEV4dGVuc2lvbnM6OnJlY3Vyc2l2ZU1lbW9yeVVzZWQpOgorICAg
ICAgICAoV2ViQ29yZTo6Q29udGVudEV4dGVuc2lvbnM6OkNvbWJpbmVkVVJMRmlsdGVyczo6YWRk
UGF0dGVybik6CisgICAgICAgIChXZWJDb3JlOjpDb250ZW50RXh0ZW5zaW9uczo6Z2VuZXJhdGVO
RkFGb3JTdWJ0cmVlKToKKyAgICAgICAgKFdlYkNvcmU6OkNvbnRlbnRFeHRlbnNpb25zOjpDb21i
aW5lZFVSTEZpbHRlcnM6OmNyZWF0ZU5GQXMpOgorICAgICAgICAqIGNvbnRlbnRleHRlbnNpb25z
L05GQS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDb250ZW50RXh0ZW5zaW9uczo6TkZBOjptZW1v
cnlVc2VkKToKKyAgICAgICAgKFdlYkNvcmU6OkNvbnRlbnRFeHRlbnNpb25zOjpORkE6OnNldEFj
dGlvbnMpOgorICAgICAgICAqIGNvbnRlbnRleHRlbnNpb25zL05GQS5oOgorICAgICAgICAqIGNv
bnRlbnRleHRlbnNpb25zL05GQU5vZGUuaDoKKyAgICAgICAgKiBjb250ZW50ZXh0ZW5zaW9ucy9U
ZXJtLmg6CisgICAgICAgIChXZWJDb3JlOjpDb250ZW50RXh0ZW5zaW9uczo6VGVybTo6VGVybTo6
Z2VuZXJhdGVHcmFwaCk6CisgICAgICAgIChXZWJDb3JlOjpDb250ZW50RXh0ZW5zaW9uczo6VGVy
bTo6Z2VuZXJhdGVTdWJncmFwaEZvckF0b20pOgorICAgICAgICBVc2UgVmVjdG9ycyBpbnN0ZWFk
IG9mIEhhc2hUYWJsZXMgaW4gUHJlZml4VHJlZVZlcnRleCBiZWNhdXNlIHRoZSBzZXRzIHN0YXkg
c21hbGwgYW5kIG5lZWQgdG8gYmUgbW9yZSBtZW1vcnkgZWZmaWNpZW50LgorCiAyMDE1LTA0LTI4
ICBZb3Vlbm4gRmFibGV0ICA8eW91ZW5uLmZhYmxldEBjcmYuY2Fub24uZnI+CiAKICAgICAgICAg
U2hhcmVkQnVmZmVyOjpjb3B5IGlzIG5vdCBjb21wdXRpbmcgdGhlIGJ1ZmZlciBzaXplIGNvcnJl
Y3RseSB3aGVuIGhhdmluZyBtX2RhdGFBcnJheQpJbmRleDogU291cmNlL1dlYkNvcmUvY29udGVu
dGV4dGVuc2lvbnMvQ29tYmluZWRVUkxGaWx0ZXJzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9jb250ZW50ZXh0ZW5zaW9ucy9Db21iaW5lZFVSTEZpbHRlcnMuY3BwCShyZXZpc2lv
biAxODMzOTcpCisrKyBTb3VyY2UvV2ViQ29yZS9jb250ZW50ZXh0ZW5zaW9ucy9Db21iaW5lZFVS
TEZpbHRlcnMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yOSwxNyArMjksMTcgQEAKICNpZiBFTkFC
TEUoQ09OVEVOVF9FWFRFTlNJT05TKQogCiAjaW5jbHVkZSAiVGVybS5oIgotI2luY2x1ZGUgPHd0
Zi9IYXNoTWFwLmg+CisjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgogCiBuYW1lc3BhY2UgV2ViQ29y
ZSB7CiAKIG5hbWVzcGFjZSBDb250ZW50RXh0ZW5zaW9ucyB7CiAKLXR5cGVkZWYgSGFzaE1hcDxU
ZXJtLCBzdGQ6OnVuaXF1ZV9wdHI8UHJlZml4VHJlZVZlcnRleD4sIFRlcm1IYXNoLCBUZXJtSGFz
aFRyYWl0cz4gUHJlZml4VHJlZUVkZ2VzOwordHlwZWRlZiBWZWN0b3I8c3RkOjpwYWlyPFRlcm0s
IHN0ZDo6dW5pcXVlX3B0cjxQcmVmaXhUcmVlVmVydGV4Pj4sIDAsIFdURjo6Q3Jhc2hPbk92ZXJm
bG93LCAxPiBQcmVmaXhUcmVlRWRnZXM7CiAKIHN0cnVjdCBQcmVmaXhUcmVlVmVydGV4IHsKICAg
ICBQcmVmaXhUcmVlRWRnZXMgZWRnZXM7Ci0gICAgQWN0aW9uU2V0IGZpbmFsQWN0aW9uczsKKyAg
ICBBY3Rpb25MaXN0IGZpbmFsQWN0aW9uczsKICAgICBib29sIGluVmFyaWFibGVMZW5ndGhQcmVm
aXggeyBmYWxzZSB9OwogfTsKIApAQCAtNDgsOCArNDgsOCBAQCBzdGF0aWMgc2l6ZV90IHJlY3Vy
c2l2ZU1lbW9yeVVzZWQoY29uc3QgCiAgICAgc2l6ZV90IHNpemUgPSBzaXplb2YoUHJlZml4VHJl
ZVZlcnRleCkKICAgICAgICAgKyBub2RlLT5lZGdlcy5jYXBhY2l0eSgpICogc2l6ZW9mKHN0ZDo6
cGFpcjxUZXJtLCBzdGQ6OnVuaXF1ZV9wdHI8UHJlZml4VHJlZVZlcnRleD4+KQogICAgICAgICAr
IG5vZGUtPmZpbmFsQWN0aW9ucy5jYXBhY2l0eSgpICogc2l6ZW9mKHVpbnQ2NF90KTsKLSAgICBm
b3IgKGNvbnN0IGF1dG8mIGNoaWxkIDogbm9kZS0+ZWRnZXMudmFsdWVzKCkpCi0gICAgICAgIHNp
emUgKz0gcmVjdXJzaXZlTWVtb3J5VXNlZChjaGlsZCk7CisgICAgZm9yIChjb25zdCBhdXRvJiBj
aGlsZCA6IG5vZGUtPmVkZ2VzKQorICAgICAgICBzaXplICs9IHJlY3Vyc2l2ZU1lbW9yeVVzZWQo
Y2hpbGQuc2Vjb25kKTsKICAgICByZXR1cm4gc2l6ZTsKIH0KIApAQCAtODgsMjMgKzg4LDMwIEBA
IHZvaWQgQ29tYmluZWRVUkxGaWx0ZXJzOjphZGRQYXR0ZXJuKHVpbnQKICAgICBwcmVmaXhUcmVl
VmVydGljZXNGb3JQYXR0ZXJuLmFwcGVuZChsYXN0UHJlZml4VHJlZSk7CiAKICAgICBmb3IgKGNv
bnN0IFRlcm0mIHRlcm0gOiBwYXR0ZXJuKSB7Ci0gICAgICAgIGF1dG8gbmV4dEVudHJ5ID0gbGFz
dFByZWZpeFRyZWUtPmVkZ2VzLmZpbmQodGVybSk7Ci0gICAgICAgIGlmIChuZXh0RW50cnkgIT0g
bGFzdFByZWZpeFRyZWUtPmVkZ2VzLmVuZCgpKQotICAgICAgICAgICAgbGFzdFByZWZpeFRyZWUg
PSBuZXh0RW50cnktPnZhbHVlLmdldCgpOworICAgICAgICBzaXplX3QgbmV4dEVudHJ5SW5kZXgg
PSBXVEY6Om5vdEZvdW5kOworICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGxhc3RQcmVm
aXhUcmVlLT5lZGdlcy5zaXplKCk7ICsraSkgeworICAgICAgICAgICAgaWYgKGxhc3RQcmVmaXhU
cmVlLT5lZGdlc1tpXS5maXJzdCA9PSB0ZXJtKSB7CisgICAgICAgICAgICAgICAgbmV4dEVudHJ5
SW5kZXggPSBpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAg
ICB9CisgICAgICAgIGlmIChuZXh0RW50cnlJbmRleCAhPSBXVEY6Om5vdEZvdW5kKQorICAgICAg
ICAgICAgbGFzdFByZWZpeFRyZWUgPSBsYXN0UHJlZml4VHJlZS0+ZWRnZXNbbmV4dEVudHJ5SW5k
ZXhdLnNlY29uZC5nZXQoKTsKICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICBoYXNOZXdUZXJt
ID0gdHJ1ZTsKIAogICAgICAgICAgICAgc3RkOjp1bmlxdWVfcHRyPFByZWZpeFRyZWVWZXJ0ZXg+
IG5leHRQcmVmaXhUcmVlVmVydGV4ID0gc3RkOjptYWtlX3VuaXF1ZTxQcmVmaXhUcmVlVmVydGV4
PigpOwogCi0gICAgICAgICAgICBhdXRvIGFkZFJlc3VsdCA9IGxhc3RQcmVmaXhUcmVlLT5lZGdl
cy5zZXQodGVybSwgV1RGOjptb3ZlKG5leHRQcmVmaXhUcmVlVmVydGV4KSk7Ci0gICAgICAgICAg
ICBBU1NFUlQoYWRkUmVzdWx0LmlzTmV3RW50cnkpOwotCi0gICAgICAgICAgICBsYXN0UHJlZml4
VHJlZSA9IGFkZFJlc3VsdC5pdGVyYXRvci0+dmFsdWUuZ2V0KCk7CisgICAgICAgICAgICBBU1NF
UlQobGFzdFByZWZpeFRyZWUtPmVkZ2VzLmZpbmQoc3RkOjptYWtlX3BhaXIodGVybSwgc3RkOjpt
YWtlX3VuaXF1ZTxQcmVmaXhUcmVlVmVydGV4PigpKSkgPT0gV1RGOjpub3RGb3VuZCk7CisgICAg
ICAgICAgICBsYXN0UHJlZml4VHJlZS0+ZWRnZXMuYXBwZW5kKHN0ZDo6bWFrZV9wYWlyKHRlcm0s
IFdURjo6bW92ZShuZXh0UHJlZml4VHJlZVZlcnRleCkpKTsKKyAgICAgICAgICAgIGxhc3RQcmVm
aXhUcmVlID0gbGFzdFByZWZpeFRyZWUtPmVkZ2VzLmxhc3QoKS5zZWNvbmQuZ2V0KCk7CiAgICAg
ICAgIH0KICAgICAgICAgcHJlZml4VHJlZVZlcnRpY2VzRm9yUGF0dGVybi5hcHBlbmQobGFzdFBy
ZWZpeFRyZWUpOwogICAgIH0KIAotICAgIHByZWZpeFRyZWVWZXJ0aWNlc0ZvclBhdHRlcm4ubGFz
dCgpLT5maW5hbEFjdGlvbnMuYWRkKGFjdGlvbklkKTsKKyAgICBBY3Rpb25MaXN0JiBhY3Rpb25z
ID0gcHJlZml4VHJlZVZlcnRpY2VzRm9yUGF0dGVybi5sYXN0KCktPmZpbmFsQWN0aW9uczsKKyAg
ICBpZiAoYWN0aW9ucy5maW5kKGFjdGlvbklkKSA9PSBXVEY6Om5vdEZvdW5kKQorICAgICAgICBh
Y3Rpb25zLmFwcGVuZChhY3Rpb25JZCk7CiAKICAgICBpZiAoIWhhc05ld1Rlcm0pCiAgICAgICAg
IHJldHVybjsKQEAgLTE0MiwxMyArMTQ5LDEzIEBAIHN0YXRpYyB2b2lkIGdlbmVyYXRlTkZBRm9y
U3VidHJlZShORkEmIG4KICAgICB3aGlsZSAodHJ1ZSkgewogICAgIFByb2Nlc3NTdWJ0cmVlOgog
ICAgICAgICBmb3IgKEFjdGl2ZU5GQVN1YnRyZWUmIGFjdGl2ZVN1YnRyZWUgPSBhY3RpdmVTdGFj
ay5sYXN0KCk7IGFjdGl2ZVN1YnRyZWUuaXRlcmF0b3IgIT0gYWN0aXZlU3VidHJlZS52ZXJ0ZXgt
PmVkZ2VzLmVuZCgpOyArK2FjdGl2ZVN1YnRyZWUuaXRlcmF0b3IpIHsKLSAgICAgICAgICAgIGlm
IChhY3RpdmVTdWJ0cmVlLml0ZXJhdG9yLT52YWx1ZS0+aW5WYXJpYWJsZUxlbmd0aFByZWZpeCkK
KyAgICAgICAgICAgIGlmIChhY3RpdmVTdWJ0cmVlLml0ZXJhdG9yLT5zZWNvbmQtPmluVmFyaWFi
bGVMZW5ndGhQcmVmaXgpCiAgICAgICAgICAgICAgICAgY29udGludWU7CiAKLSAgICAgICAgICAg
IGNvbnN0IFRlcm0mIHRlcm0gPSBhY3RpdmVTdWJ0cmVlLml0ZXJhdG9yLT5rZXk7Ci0gICAgICAg
ICAgICB1bnNpZ25lZCBuZXdFbmROb2RlSW5kZXggPSB0ZXJtLmdlbmVyYXRlR3JhcGgobmZhLCBh
Y3RpdmVTdWJ0cmVlLmxhc3ROb2RlSW5kZXgsIGFjdGl2ZVN1YnRyZWUuaXRlcmF0b3ItPnZhbHVl
LT5maW5hbEFjdGlvbnMpOworICAgICAgICAgICAgY29uc3QgVGVybSYgdGVybSA9IGFjdGl2ZVN1
YnRyZWUuaXRlcmF0b3ItPmZpcnN0OworICAgICAgICAgICAgdW5zaWduZWQgbmV3RW5kTm9kZUlu
ZGV4ID0gdGVybS5nZW5lcmF0ZUdyYXBoKG5mYSwgYWN0aXZlU3VidHJlZS5sYXN0Tm9kZUluZGV4
LCBhY3RpdmVTdWJ0cmVlLml0ZXJhdG9yLT5zZWNvbmQtPmZpbmFsQWN0aW9ucyk7CiAKLSAgICAg
ICAgICAgIFByZWZpeFRyZWVWZXJ0ZXgqIHByZWZpeFRyZWVWZXJ0ZXggPSBhY3RpdmVTdWJ0cmVl
Lml0ZXJhdG9yLT52YWx1ZS5nZXQoKTsKKyAgICAgICAgICAgIFByZWZpeFRyZWVWZXJ0ZXgqIHBy
ZWZpeFRyZWVWZXJ0ZXggPSBhY3RpdmVTdWJ0cmVlLml0ZXJhdG9yLT5zZWNvbmQuZ2V0KCk7CiAg
ICAgICAgICAgICBpZiAoIXByZWZpeFRyZWVWZXJ0ZXgtPmVkZ2VzLmlzRW1wdHkoKSkgewogICAg
ICAgICAgICAgICAgIGFjdGl2ZVN0YWNrLmFwcGVuZChBY3RpdmVORkFTdWJ0cmVlKHByZWZpeFRy
ZWVWZXJ0ZXgsIHByZWZpeFRyZWVWZXJ0ZXgtPmVkZ2VzLmJlZ2luKCksIG5ld0VuZE5vZGVJbmRl
eCkpOwogICAgICAgICAgICAgICAgIGdvdG8gUHJvY2Vzc1N1YnRyZWU7CkBAIC0xNzUsNyArMTgy
LDcgQEAgVmVjdG9yPE5GQT4gQ29tYmluZWRVUkxGaWx0ZXJzOjpjcmVhdGVORgogCiAgICAgICAg
IC8vIFdlIGdvIGRlcHRoIGZpcnN0IGludG8gdGhlIHN1YnRyZWVzIHdpdGggdmFyaWFibGUgcHJl
Zml4LiBGaW5kIHRoZSBuZXh0IHN1YnRyZWUuCiAgICAgICAgIGZvciAoOyBhY3RpdmVTdWJ0cmVl
Lml0ZXJhdG9yICE9IGFjdGl2ZVN1YnRyZWUudmVydGV4LT5lZGdlcy5lbmQoKTsgKythY3RpdmVT
dWJ0cmVlLml0ZXJhdG9yKSB7Ci0gICAgICAgICAgICBQcmVmaXhUcmVlVmVydGV4KiBwcmVmaXhU
cmVlVmVydGV4ID0gYWN0aXZlU3VidHJlZS5pdGVyYXRvci0+dmFsdWUuZ2V0KCk7CisgICAgICAg
ICAgICBQcmVmaXhUcmVlVmVydGV4KiBwcmVmaXhUcmVlVmVydGV4ID0gYWN0aXZlU3VidHJlZS5p
dGVyYXRvci0+c2Vjb25kLmdldCgpOwogICAgICAgICAgICAgaWYgKHByZWZpeFRyZWVWZXJ0ZXgt
PmluVmFyaWFibGVMZW5ndGhQcmVmaXgpIHsKICAgICAgICAgICAgICAgICBhY3RpdmVTdGFjay5h
cHBlbmQoQWN0aXZlU3VidHJlZSh7IHByZWZpeFRyZWVWZXJ0ZXgsIHByZWZpeFRyZWVWZXJ0ZXgt
PmVkZ2VzLmJlZ2luKCkgfSkpOwogICAgICAgICAgICAgICAgIGdvdG8gUHJvY2Vzc1N1YnRyZWU7
CkBAIC0xODcsNyArMTk0LDcgQEAgVmVjdG9yPE5GQT4gQ29tYmluZWRVUkxGaWx0ZXJzOjpjcmVh
dGVORgogICAgICAgICBib29sIG5lZWRUb0dlbmVyYXRlID0gYWN0aXZlU3VidHJlZS52ZXJ0ZXgt
PmVkZ2VzLmlzRW1wdHkoKSAmJiAhYWN0aXZlU3VidHJlZS52ZXJ0ZXgtPmZpbmFsQWN0aW9ucy5p
c0VtcHR5KCk7CiAgICAgICAgIGlmICghbmVlZFRvR2VuZXJhdGUpIHsKICAgICAgICAgICAgIGZv
ciAoY29uc3QgYXV0byYgZWRnZSA6IGFjdGl2ZVN1YnRyZWUudmVydGV4LT5lZGdlcykgewotICAg
ICAgICAgICAgICAgIGlmICghZWRnZS52YWx1ZS0+aW5WYXJpYWJsZUxlbmd0aFByZWZpeCkgewor
ICAgICAgICAgICAgICAgIGlmICghZWRnZS5zZWNvbmQtPmluVmFyaWFibGVMZW5ndGhQcmVmaXgp
IHsKICAgICAgICAgICAgICAgICAgICAgbmVlZFRvR2VuZXJhdGUgPSB0cnVlOwogICAgICAgICAg
ICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICB9CkBAIC0yMDEsMTUgKzIwOCwxNSBA
QCBWZWN0b3I8TkZBPiBDb21iaW5lZFVSTEZpbHRlcnM6OmNyZWF0ZU5GCiAgICAgICAgICAgICB1
bnNpZ25lZCBwcmVmaXhFbmQgPSBnZW5lcmF0aW5nTkZBLnJvb3QoKTsKIAogICAgICAgICAgICAg
Zm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGFjdGl2ZVN0YWNrLnNpemUoKSAtIDE7ICsraSkgewot
ICAgICAgICAgICAgICAgIGNvbnN0IFRlcm0mIHRlcm0gPSBhY3RpdmVTdGFja1tpXS5pdGVyYXRv
ci0+a2V5OwotICAgICAgICAgICAgICAgIHByZWZpeEVuZCA9IHRlcm0uZ2VuZXJhdGVHcmFwaChn
ZW5lcmF0aW5nTkZBLCBwcmVmaXhFbmQsIGFjdGl2ZVN0YWNrW2ldLml0ZXJhdG9yLT52YWx1ZS0+
ZmluYWxBY3Rpb25zKTsKKyAgICAgICAgICAgICAgICBjb25zdCBUZXJtJiB0ZXJtID0gYWN0aXZl
U3RhY2tbaV0uaXRlcmF0b3ItPmZpcnN0OworICAgICAgICAgICAgICAgIHByZWZpeEVuZCA9IHRl
cm0uZ2VuZXJhdGVHcmFwaChnZW5lcmF0aW5nTkZBLCBwcmVmaXhFbmQsIGFjdGl2ZVN0YWNrW2ld
Lml0ZXJhdG9yLT5zZWNvbmQtPmZpbmFsQWN0aW9ucyk7CiAgICAgICAgICAgICB9CiAKICAgICAg
ICAgICAgIGZvciAoY29uc3QgYXV0byYgZWRnZSA6IGFjdGl2ZVN1YnRyZWUudmVydGV4LT5lZGdl
cykgewotICAgICAgICAgICAgICAgIGlmICghZWRnZS52YWx1ZS0+aW5WYXJpYWJsZUxlbmd0aFBy
ZWZpeCkgewotICAgICAgICAgICAgICAgICAgICBjb25zdCBUZXJtJiB0ZXJtID0gZWRnZS5rZXk7
Ci0gICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIG5ld1N1YnRyZWVTdGFydCA9IHRlcm0uZ2Vu
ZXJhdGVHcmFwaChnZW5lcmF0aW5nTkZBLCBwcmVmaXhFbmQsIGVkZ2UudmFsdWUtPmZpbmFsQWN0
aW9ucyk7Ci0gICAgICAgICAgICAgICAgICAgIGdlbmVyYXRlTkZBRm9yU3VidHJlZShnZW5lcmF0
aW5nTkZBLCBuZXdTdWJ0cmVlU3RhcnQsICplZGdlLnZhbHVlKTsKKyAgICAgICAgICAgICAgICBp
ZiAoIWVkZ2Uuc2Vjb25kLT5pblZhcmlhYmxlTGVuZ3RoUHJlZml4KSB7CisgICAgICAgICAgICAg
ICAgICAgIGNvbnN0IFRlcm0mIHRlcm0gPSBlZGdlLmZpcnN0OworICAgICAgICAgICAgICAgICAg
ICB1bnNpZ25lZCBuZXdTdWJ0cmVlU3RhcnQgPSB0ZXJtLmdlbmVyYXRlR3JhcGgoZ2VuZXJhdGlu
Z05GQSwgcHJlZml4RW5kLCBlZGdlLnNlY29uZC0+ZmluYWxBY3Rpb25zKTsKKyAgICAgICAgICAg
ICAgICAgICAgZ2VuZXJhdGVORkFGb3JTdWJ0cmVlKGdlbmVyYXRpbmdORkEsIG5ld1N1YnRyZWVT
dGFydCwgKmVkZ2Uuc2Vjb25kKTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9CiAg
ICAgICAgIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2NvbnRlbnRleHRlbnNpb25zL05GQS5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvY29udGVudGV4dGVuc2lvbnMvTkZBLmNwcAko
cmV2aXNpb24gMTgzMzk3KQorKysgU291cmNlL1dlYkNvcmUvY29udGVudGV4dGVuc2lvbnMvTkZB
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTEsNiArNTEsOCBAQCBzaXplX3QgTkZBOjptZW1vcnlV
c2VkKCkgY29uc3QKIHsKICAgICBzaXplX3Qgc2l6ZSA9IDA7CiAgICAgZm9yIChjb25zdCBORkFO
b2RlJiBub2RlIDogbV9ub2RlcykgeworICAgICAgICBmb3IgKGNvbnN0IGF1dG8mIHRyYW5zaXRp
b24gOiBub2RlLnRyYW5zaXRpb25zKQorICAgICAgICAgICAgc2l6ZSArPSB0cmFuc2l0aW9uLnZh
bHVlLmNhcGFjaXR5KCkgKiBzaXplb2YodW5zaWduZWQpOwogICAgICAgICBzaXplICs9IHNpemVv
Zihub2RlKQogICAgICAgICAgICAgKyBub2RlLnRyYW5zaXRpb25zLmNhcGFjaXR5KCkgKiBzaXpl
b2Yoc3RkOjpwYWlyPHVpbnQxNl90LCBORkFOb2RlSW5kZXhTZXQ+KQogICAgICAgICAgICAgKyBu
b2RlLnRyYW5zaXRpb25zT25BbnlDaGFyYWN0ZXIuY2FwYWNpdHkoKSAqIHNpemVvZih1bnNpZ25l
ZCkKQEAgLTkzLDcgKzk1LDcgQEAgdm9pZCBORkE6OmFkZFRyYW5zaXRpb25zT25BbnlDaGFyYWN0
ZXIodQogICAgICAgICB0cmFuc2l0aW9uU2xvdC52YWx1ZS5yZW1vdmUodG8pOwogfQogCi12b2lk
IE5GQTo6c2V0QWN0aW9ucyh1bnNpZ25lZCBub2RlLCBjb25zdCBBY3Rpb25TZXQmIGFjdGlvbnMp
Cit2b2lkIE5GQTo6c2V0QWN0aW9ucyh1bnNpZ25lZCBub2RlLCBjb25zdCBBY3Rpb25MaXN0JiBh
Y3Rpb25zKQogewogICAgIEFTU0VSVF9XSVRIX01FU1NBR0UobV9ub2Rlc1tub2RlXS5maW5hbFJ1
bGVJZHMuaXNFbXB0eSgpLCAiVGhlIGZpbmFsIHN0YXRlIHNob3VsZCBvbmx5IGJlIGRlZmluZWQg
b25jZS4iKTsKICAgICBjb3B5VG9WZWN0b3IoYWN0aW9ucywgbV9ub2Rlc1tub2RlXS5maW5hbFJ1
bGVJZHMpOwpJbmRleDogU291cmNlL1dlYkNvcmUvY29udGVudGV4dGVuc2lvbnMvTkZBLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvY29udGVudGV4dGVuc2lvbnMvTkZBLmgJKHJldmlz
aW9uIDE4MzM5NykKKysrIFNvdXJjZS9XZWJDb3JlL2NvbnRlbnRleHRlbnNpb25zL05GQS5oCSh3
b3JraW5nIGNvcHkpCkBAIC0zOCw4ICszOCw2IEBAIG5hbWVzcGFjZSBDb250ZW50RXh0ZW5zaW9u
cyB7CiAKIGNsYXNzIE5GQVRvREZBOwogCi10eXBlZGVmIEhhc2hTZXQ8dWludDY0X3QsIERlZmF1
bHRIYXNoPHVpbnQ2NF90Pjo6SGFzaCwgV1RGOjpVbnNpZ25lZFdpdGhaZXJvS2V5SGFzaFRyYWl0
czx1aW50NjRfdD4+IEFjdGlvblNldDsKLQogLy8gVGhlIE5GQSBwcm92aWRlcyBhIHdheSB0byBi
dWlsZCBhIE5GQSBncmFwaCB3aXRoIGNoYXJhY3RlcnMgb3IgZXBzaWxvbiBhcyB0cmFuc2l0aW9u
cy4KIC8vIFRoZSBub2RlcyBhcmUgYWNjZXNzZWQgdGhyb3VnaCBhbiBpZGVudGlmaWVyLgogY2xh
c3MgTkZBIHsKQEAgLTUxLDEzICs0OSwxMyBAQCBwdWJsaWM6CiAgICAgdm9pZCBhZGRUcmFuc2l0
aW9uKHVuc2lnbmVkIGZyb20sIHVuc2lnbmVkIHRvLCBjaGFyIGNoYXJhY3Rlcik7CiAgICAgdm9p
ZCBhZGRFcHNpbG9uVHJhbnNpdGlvbih1bnNpZ25lZCBmcm9tLCB1bnNpZ25lZCB0byk7CiAgICAg
dm9pZCBhZGRUcmFuc2l0aW9uc09uQW55Q2hhcmFjdGVyKHVuc2lnbmVkIGZyb20sIHVuc2lnbmVk
IHRvKTsKLSAgICB2b2lkIHNldEFjdGlvbnModW5zaWduZWQgbm9kZSwgY29uc3QgQWN0aW9uU2V0
JiBmaW5hbEFjdGlvbnMpOworICAgIHZvaWQgc2V0QWN0aW9ucyh1bnNpZ25lZCBub2RlLCBjb25z
dCBBY3Rpb25MaXN0JiBmaW5hbEFjdGlvbnMpOwogCiAgICAgdW5zaWduZWQgZ3JhcGhTaXplKCkg
Y29uc3Q7CiAgICAgdm9pZCByZXN0b3JlVG9HcmFwaFNpemUodW5zaWduZWQpOwogCiAjaWYgQ09O
VEVOVF9FWFRFTlNJT05TX1NUQVRFX01BQ0hJTkVfREVCVUdHSU5HCi0gICAgdm9pZCBhZGRSdWxl
SWQodW5zaWduZWQgbm9kZSwgY29uc3QgQWN0aW9uU2V0JiBydWxlSWRzKTsKKyAgICB2b2lkIGFk
ZFJ1bGVJZCh1bnNpZ25lZCBub2RlLCBjb25zdCBBY3Rpb25MaXN0JiBydWxlSWRzKTsKIAogICAg
IHZvaWQgZGVidWdQcmludERvdCgpIGNvbnN0OwogI2Vsc2UKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L2NvbnRlbnRleHRlbnNpb25zL05GQU5vZGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9jb250ZW50ZXh0ZW5zaW9ucy9ORkFOb2RlLmgJKHJldmlzaW9uIDE4MzM5NykKKysrIFNvdXJj
ZS9XZWJDb3JlL2NvbnRlbnRleHRlbnNpb25zL05GQU5vZGUuaAkod29ya2luZyBjb3B5KQpAQCAt
MzksNiArMzksNyBAQCBuYW1lc3BhY2UgQ29udGVudEV4dGVuc2lvbnMgewogCiAvLyBBIE5GQU5v
ZGUgYWJzdHJhY3QgdGhlIHRyYW5zaXRpb24gdGFibGUgb3V0IG9mIGEgTkZBIHN0YXRlLgogCit0
eXBlZGVmIFZlY3Rvcjx1aW50NjRfdCwgMCwgV1RGOjpDcmFzaE9uT3ZlcmZsb3csIDE+IEFjdGlv
bkxpc3Q7CiB0eXBlZGVmIEhhc2hTZXQ8dW5zaWduZWQsIERlZmF1bHRIYXNoPHVuc2lnbmVkPjo6
SGFzaCwgV1RGOjpVbnNpZ25lZFdpdGhaZXJvS2V5SGFzaFRyYWl0czx1bnNpZ25lZD4+IE5GQU5v
ZGVJbmRleFNldDsKIHR5cGVkZWYgSGFzaE1hcDx1aW50MTZfdCwgTkZBTm9kZUluZGV4U2V0LCBE
ZWZhdWx0SGFzaDx1aW50MTZfdD46Okhhc2gsIFdURjo6VW5zaWduZWRXaXRoWmVyb0tleUhhc2hU
cmFpdHM8dWludDE2X3Q+PiBORkFOb2RlVHJhbnNpdGlvbnM7CiAKQEAgLTQ3LDcgKzQ4LDcgQEAg
cHVibGljOgogICAgIEhhc2hNYXA8dWludDE2X3QsIE5GQU5vZGVJbmRleFNldCwgRGVmYXVsdEhh
c2g8dWludDE2X3Q+OjpIYXNoLCBXVEY6OlVuc2lnbmVkV2l0aFplcm9LZXlIYXNoVHJhaXRzPHVp
bnQxNl90Pj4gdHJhbnNpdGlvbnM7CiAgICAgTkZBTm9kZUluZGV4U2V0IHRyYW5zaXRpb25zT25B
bnlDaGFyYWN0ZXI7CiAKLSAgICBWZWN0b3I8dWludDY0X3Q+IGZpbmFsUnVsZUlkczsKKyAgICBB
Y3Rpb25MaXN0IGZpbmFsUnVsZUlkczsKIH07CiAKIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2Nv
bnRlbnRleHRlbnNpb25zL1Rlcm0uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9jb250
ZW50ZXh0ZW5zaW9ucy9UZXJtLmgJKHJldmlzaW9uIDE4MzQzMykKKysrIFNvdXJjZS9XZWJDb3Jl
L2NvbnRlbnRleHRlbnNpb25zL1Rlcm0uaAkod29ya2luZyBjb3B5KQpAQCAtODMsNyArODMsNyBA
QCBwdWJsaWM6CiAKICAgICB2b2lkIHF1YW50aWZ5KGNvbnN0IEF0b21RdWFudGlmaWVyJik7CiAK
LSAgICB1bnNpZ25lZCBnZW5lcmF0ZUdyYXBoKE5GQSYsIHVuc2lnbmVkIHN0YXJ0LCBjb25zdCBB
Y3Rpb25TZXQmIGZpbmFsQWN0aW9ucykgY29uc3Q7CisgICAgdW5zaWduZWQgZ2VuZXJhdGVHcmFw
aChORkEmLCB1bnNpZ25lZCBzdGFydCwgY29uc3QgQWN0aW9uTGlzdCYgZmluYWxBY3Rpb25zKSBj
b25zdDsKIAogICAgIGJvb2wgaXNFbmRPZkxpbmVBc3NlcnRpb24oKSBjb25zdDsKIApAQCAtMzM1
LDcgKzMzNSw3IEBAIGlubGluZSB2b2lkIFRlcm06OnF1YW50aWZ5KGNvbnN0IEF0b21RdWEKICAg
ICBtX3F1YW50aWZpZXIgPSBxdWFudGlmaWVyOwogfQogCi1pbmxpbmUgdW5zaWduZWQgVGVybTo6
VGVybTo6Z2VuZXJhdGVHcmFwaChORkEmIG5mYSwgdW5zaWduZWQgc3RhcnQsIGNvbnN0IEFjdGlv
blNldCYgZmluYWxBY3Rpb25zKSBjb25zdAoraW5saW5lIHVuc2lnbmVkIFRlcm06OlRlcm06Omdl
bmVyYXRlR3JhcGgoTkZBJiBuZmEsIHVuc2lnbmVkIHN0YXJ0LCBjb25zdCBBY3Rpb25MaXN0JiBm
aW5hbEFjdGlvbnMpIGNvbnN0CiB7CiAgICAgQVNTRVJUKGlzVmFsaWQoKSk7CiAKQEAgLTU4MSw3
ICs1ODEsNyBAQCBpbmxpbmUgdW5zaWduZWQgVGVybTo6Z2VuZXJhdGVTdWJncmFwaEZvCiAgICAg
Y2FzZSBUZXJtVHlwZTo6R3JvdXA6IHsKICAgICAgICAgdW5zaWduZWQgbGFzdFRhcmdldCA9IHNv
dXJjZTsKICAgICAgICAgZm9yIChjb25zdCBUZXJtJiB0ZXJtIDogbV9hdG9tRGF0YS5ncm91cC50
ZXJtcykKLSAgICAgICAgICAgIGxhc3RUYXJnZXQgPSB0ZXJtLmdlbmVyYXRlR3JhcGgobmZhLCBs
YXN0VGFyZ2V0LCBBY3Rpb25TZXQoKSk7CisgICAgICAgICAgICBsYXN0VGFyZ2V0ID0gdGVybS5n
ZW5lcmF0ZUdyYXBoKG5mYSwgbGFzdFRhcmdldCwgQWN0aW9uTGlzdCgpKTsKICAgICAgICAgcmV0
dXJuIGxhc3RUYXJnZXQ7CiAgICAgfQogICAgIH0K
</data>

          </attachment>
      

    </bug>

</bugzilla>