<?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>96214</bug_id>
          
          <creation_ts>2012-09-09 12:53:23 -0700</creation_ts>
          <short_desc>Added large allocation support to MarkedSpace</short_desc>
          <delta_ts>2012-09-10 20:02:46 -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>New Bugs</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="Geoffrey Garen">ggaren</reporter>
          <assigned_to name="Geoffrey Garen">ggaren</assigned_to>
          
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>715555</commentid>
    <comment_count>0</comment_count>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2012-09-09 12:53:23 -0700</bug_when>
    <thetext>Added large allocation support to MarkedSpace</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>715574</commentid>
    <comment_count>1</comment_count>
      <attachid>163010</attachid>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2012-09-09 13:39:03 -0700</bug_when>
    <thetext>Created attachment 163010
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>715575</commentid>
    <comment_count>2</comment_count>
      <attachid>163010</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2012-09-09 13:45:27 -0700</bug_when>
    <thetext>Comment on attachment 163010
Patch

I&apos;m not sure I buy the removal of imprecise size classes.  That seems like a pure regression.

Why aren&apos;t you just using the large allocation support for &gt;=64KB allocations?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>715579</commentid>
    <comment_count>3</comment_count>
      <attachid>163010</attachid>
    <who name="Build Bot">buildbot</who>
    <bug_when>2012-09-09 14:02:26 -0700</bug_when>
    <thetext>Comment on attachment 163010
Patch

Attachment 163010 did not pass win-ews (win):
Output: http://queues.webkit.org/results/13797564</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>715591</commentid>
    <comment_count>4</comment_count>
      <attachid>163011</attachid>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2012-09-09 14:09:47 -0700</bug_when>
    <thetext>Created attachment 163011
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>715598</commentid>
    <comment_count>5</comment_count>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2012-09-09 14:20:11 -0700</bug_when>
    <thetext>&gt; Why aren&apos;t you just using the large allocation support for &gt;=64KB allocations?

Currently, our fixed allocators only go up to 2KB. So, I had to choose:
- add 1024 &quot;imprecise&quot; allocators
- increase the &quot;imprecise&quot; allocator slop, and add &lt; 1024 &quot;imprecise&quot; allocators
- over-allocate large allocations by up to 62KB
- support &lt; 64KB with the large allocator

I slightly preferred supporting &lt; 64KB with the large allocator because:
- it makes a few large allocations actually happen in TOT, to give the code path some testing
- the other options optimize some things while pessimizing others, which feels like an odd thing to do since they literally never happen in TOT</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>715602</commentid>
    <comment_count>6</comment_count>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2012-09-09 14:21:16 -0700</bug_when>
    <thetext>&gt; I&apos;m not sure I buy the removal of imprecise size classes.  That seems like a pure regression.

Regression measured by what?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>715609</commentid>
    <comment_count>7</comment_count>
      <attachid>163011</attachid>
    <who name="Build Bot">buildbot</who>
    <bug_when>2012-09-09 14:42:01 -0700</bug_when>
    <thetext>Comment on attachment 163011
Patch

Attachment 163011 did not pass win-ews (win):
Output: http://queues.webkit.org/results/13798568</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>715615</commentid>
    <comment_count>8</comment_count>
      <attachid>163016</attachid>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2012-09-09 15:04:54 -0700</bug_when>
    <thetext>Created attachment 163016
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>716780</commentid>
    <comment_count>9</comment_count>
      <attachid>163266</attachid>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2012-09-10 19:21:14 -0700</bug_when>
    <thetext>Created attachment 163266
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>716781</commentid>
    <comment_count>10</comment_count>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2012-09-10 19:24:01 -0700</bug_when>
    <thetext>Large for &gt;= 64KB turned out to be a simpler implementation, so I&apos;ve restored the imprecise size classes.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>716787</commentid>
    <comment_count>11</comment_count>
      <attachid>163266</attachid>
    <who name="Build Bot">buildbot</who>
    <bug_when>2012-09-10 19:57:58 -0700</bug_when>
    <thetext>Comment on attachment 163266
Patch

Attachment 163266 did not pass win-ews (win):
Output: http://queues.webkit.org/results/13827026</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>716789</commentid>
    <comment_count>12</comment_count>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2012-09-10 20:02:13 -0700</bug_when>
    <thetext>Committed r128141: &lt;http://trac.webkit.org/changeset/128141&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>163010</attachid>
            <date>2012-09-09 13:39:03 -0700</date>
            <delta_ts>2012-09-09 14:09:46 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-96214-20120909133844.patch</filename>
            <type>text/plain</type>
            <size>24921</size>
            <attacher name="Geoffrey Garen">ggaren</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTI3OTkwKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDkzIEBA
CisyMDEyLTA5LTA5ICBHZW9mZnJleSBHYXJlbiAgPGdnYXJlbkBhcHBsZS5jb20+CisKKyAgICAg
ICAgQWRkZWQgbGFyZ2UgYWxsb2NhdGlvbiBzdXBwb3J0IHRvIE1hcmtlZFNwYWNlCisgICAgICAg
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD05NjIxNAorCisgICAgICAg
IFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIChDdXJyZW50bHksIHRoZSBv
bmx5IG9iamVjdCB0aGF0IHNlZW1zIHRvIHVzZSB0aGlzIGlzIEpTR2xvYmFsT2JqZWN0LikKKwor
ICAgICAgICAtIEEgTGFyZ2UgYWxsb2NhdGlvbiBjYW4gYmUgbGFyZ2VyIG9yIHNtYWxsZXIgdGhh
biBhIHNpbmdsZSBoZWFwIGJsb2NrLgorICAgICAgICBJZiBpdCdzIHNtYWxsZXIgKGFuZCBpdCBh
bHdheXMgaXMsIGN1cnJlbnRseSksIHRoZSBsYXJnZSBhbGxvY2F0b3Igd2lsbAorICAgICAgICBs
aW5rIHVwIGEgZnJlZSBsaXN0IGFzIHdlIGRvIGZvciBzbWFsbCBhbGxvY2F0aW9ucy4gVXNlIG9m
IHRoZSBsYXJnZSBmcmVlCisgICAgICAgIGxpc3QgcmVxdWlyZXMgYW4gZXh0cmEgdGVzdCB0byB2
ZXJpZnkgdGhhdCB0aGUgYWxsb2NhdGlvbiB3aWxsIGZpdCBpbnRvCisgICAgICAgIHRoZSBjZWxs
LgorCisgICAgICAgIFJhcGlkIGFsbG9jYXRpb24gb2Ygc2ltaWxhci1zaXplZCBvYmplY3RzIGlu
IGxhcmdlIHNwYWNlIGlzIGZhc3QgYW5kCisgICAgICAgIHJlYXNvbmFibHkgbWVtb3J5LWVmZmlj
aWVudC4gUmFwaWQgYWxsb2NhdGlvbiBvZiBvc2NpbGxhdGluZy1zaXplZAorICAgICAgICBvYmpl
Y3RzIGluIGxhcmdlIHNwYWNlIGNhbiBiZSBlaXRoZXIgbWVtb3J5LWluZWZmaWNpZW50LCBzbG93
LCBvciBib3RoLgorCisgICAgICAgIC0gUmVtb3ZlZCBpbXByZWNpc2UgYWxsb2NhdG9ycyBiZWNh
dXNlIHRoZWlyIGpvYiBpcyBiZXR0ZXIgZG9uZSBlaXRoZXIKKyAgICAgICAgYnkgcHJlY2lzZSBh
bGxvY2F0b3JzIG9yIGJ5IHRoZSBsYXJnZSBhbGxvY2F0b3IuIChQcmVjaXNlIHZzIGltcHJlY2lz
ZQorICAgICAgICBpc24ndCByZWFsbHkgbWVhbmluZ2Z1bCBub3cgdGhhdCB3ZSB1c2UgMzItYnl0
ZSBhdG9tcy4pCisKKyAgICAgICAgKiBoZWFwL01hcmtlZEFsbG9jYXRvci5jcHA6CisgICAgICAg
IChKU0M6Ok1hcmtlZEFsbG9jYXRvcjo6dHJ5QWxsb2NhdGVIZWxwZXIpOiBJZiB3ZSBjYW4ndCBm
aXQgYSBsYXJnZSBhbGxvY2F0aW9uLAorICAgICAgICB3ZSBuZWVkIHRvIHphcCB0aGUgZnJlZSBs
aXN0IGluc3RlYWQgb2YgcmVwb3J0aW5nIHRoYXQgd2UndmUgY29uc3VtZWQgaXQuCisgICAgICAg
IENvbnN1bWluZyBhIGZyZWUgbGlzdCBtYXJrcyBhbGwgb2YgaXRzIG9iamVjdHMgYXMgdmFsaWQg
YWxsb2NhdGlvbnMsCisgICAgICAgIHdoaWNoIGlzIG5vdCB0aGUgY2FzZSBpZiB3ZSdyZSB0aHJv
d2luZyBhd2F5IHRoZSBmcmVlIGxpc3QgZWFybHkuCisKKyAgICAgICAgKEpTQzo6TWFya2VkQWxs
b2NhdG9yOjp0cnlBbGxvY2F0ZSk6CisgICAgICAgIChKU0M6Ok1hcmtlZEFsbG9jYXRvcjo6YWxs
b2NhdGVTbG93Q2FzZSk6CisgICAgICAgIChKU0M6Ok1hcmtlZEFsbG9jYXRvcjo6YWxsb2NhdGVC
bG9jayk6CisgICAgICAgIChKU0M6Ok1hcmtlZEFsbG9jYXRvcjo6YWRkQmxvY2spOiBQYXNzIHRo
ZSBhbGxvY2F0aW9uIHNpemUgdGhyb3VnaCwgc2luY2UKKyAgICAgICAgbGFyZ2UgYWxsb2NhdGlv
bnMgY2FuJ3QgaW5mZXIgdGhlIHNpemUgZnJvbSBhIHNpemUgY2xhc3MuCisKKyAgICAgICAgKiBo
ZWFwL01hcmtlZEFsbG9jYXRvci5oOgorICAgICAgICAoSlNDOjpmaXQpOiBUaGVyZSdzIGEgdHJh
ZGUtb2ZmIGhlcmUuIEFsbG9jYXRpbmcgaW50byBhIGNlbGwgdGhhdCdzCisgICAgICAgIG11Y2gg
YmlnZ2VyIHRoYW4gdGhlIGFsbG9jYXRpb24gcmVxdWVzdCB3aWxsIGRlZmluaXRlbHkgd2FzdGUg
c3BhY2UuCisgICAgICAgIEFsbG9jYXRpbmcgYSB3aG9sZSBuZXcgYmxvY2sgd2l0aCBhIHNtYWxs
ZXIgY2VsbCBzaXplIG1heSB3YXN0ZSBzcGFjZSwKKyAgICAgICAgaWYgZnV0dXJlIGFsbG9jYXRp
b25zIGRlY2lkZSB0aGV5IGRvbid0IGZpdCBhbmQgdGhlIGFsbG9jYXRpb24gYmVjb21lcworICAg
ICAgICBhbiBvcnBoYW4uCisKKyAgICAgICAgVGhlIGxpa2VsaWhvb2Qgb2YgdGhlIGxhdHRlciBw
YXRob2xvZ3kgZGVwZW5kcyBvbiBob3cgcGlja3kgd2UgYXJlIGFib3V0CisgICAgICAgIGZpdHRp
bmcgc21hbGwgYWxsb2NhdGlvbnMgaW50byBsYXJnZSBjZWxscy4gSW4gdGhlIHdvcnN0IGNhc2Us
IGlmIHdlIGFyZQorICAgICAgICAxMDAlIHBpY2t5LCBhbnkgb3NjaWxsYXRpbmcgYWxsb2NhdGlv
biBzaXplIHBhdHRlcm4gd2lsbCBhbGxvY2F0ZSA2NEtCCisgICAgICAgIHBlciBhbGxvY2F0aW9u
LgorCisgICAgICAgIEkgaGF2ZSBndWVzc2VkIGF0IGluZmluaXR5IGFzIHRoZSByaWdodCB0cmFk
ZW9mZiBwb2ludCAtLSBpLmUuLCB3ZSBhbHdheXMKKyAgICAgICAgcHJlZmVyIHRvIHVzZSB0aGUg
ZnJlZSBsaXN0IGlmIHdlIGZpdC4gVGhpcyBndWFyYW50ZWVzIHRoYXQgYW55IHBhdHRlcm4KKyAg
ICAgICAgb2YgYWxsb2NhdGlvbiBzaXplcyA8IDY0S0Igd2lsbCBpbnN0YW50bHkgc3RhYmlsaXpl
IGF0IHNvbWUgbW9zdCBjb21tb24KKyAgICAgICAgZGVub21pbmF0b3IgY2VsbCBzaXplLCBhdm9p
ZGluZyB0aGUgd29yc3QgY2FzZSBwYXRob2xvZ3kuCisKKyAgICAgICAgKE1hcmtlZEFsbG9jYXRv
cik6CisgICAgICAgIChKU0M6Ok1hcmtlZEFsbG9jYXRvcjo6TWFya2VkQWxsb2NhdG9yKToKKyAg
ICAgICAgKEpTQzo6TWFya2VkQWxsb2NhdG9yOjppbml0KToKKyAgICAgICAgKEpTQzo6TWFya2Vk
QWxsb2NhdG9yOjphbGxvY2F0ZSk6CisgICAgICAgIChKU0M6Ok1hcmtlZEFsbG9jYXRvcjo6YWxs
b2NhdGVMYXJnZSk6IFBhc3MgdGhyb3VnaCBzaXplIGluZm9ybWF0aW9uLgorCisgICAgICAgIFNv
bWUgbGFyZ2UgYWxsb2NhdGlvbnMgKGN1cnJlbnRseSBhbGwpIHVzZSBibG9ja3Mgb2YgdGhlIHNo
YXJlZCBibG9jaworICAgICAgICBzaXplLiBXaGVuIHRoaXMgaGFwcGVucywgd2UgY2FuIG9wdGlt
aXplIGEgbGl0dGxlIGJpdCBhbmQgdXNlIHRoZQorICAgICAgICBzdGFuZGFyZCBibG9jayByZWN5
Y2xlci4KKworICAgICAgICAqIGhlYXAvTWFya2VkQmxvY2suY3BwOgorICAgICAgICAoSlNDOjpN
YXJrZWRCbG9jazo6Y3JlYXRlKToKKyAgICAgICAgKEpTQzo6TWFya2VkQmxvY2s6Ok1hcmtlZEJs
b2NrKTogTm90ZSB0aGF0IG92ZXJzaXplZCBibG9ja3MgY2FuJ3QgaG9sZAorICAgICAgICBhbiBv
dmVyc2l6ZWQgbnVtYmVyIG9mIG9iamVjdHM6IHdlIHN0aWxsIG9ubHkgaGF2ZSBlbm91Z2ggbWFy
ayBiaXRzCisgICAgICAgIHRvIG1hcmsgb2JqZWN0cyB0aGF0IHN0YXJ0IGluIHRoZSBmaXJzdCA2
NEtCIG9mIHRoZSBibG9jay4KKworICAgICAgICAqIGhlYXAvTWFya2VkQmxvY2suaDoKKyAgICAg
ICAgKEpTQzo6TWFya2VkQmxvY2s6OmlzTGFyZ2UpOgorICAgICAgICAqIGhlYXAvTWFya2VkU3Bh
Y2UuY3BwOgorICAgICAgICAoSlNDOjpNYXJrZWRTcGFjZTo6TWFya2VkU3BhY2UpOgorICAgICAg
ICAoSlNDOjpNYXJrZWRTcGFjZTo6cmVzZXRBbGxvY2F0b3JzKToKKyAgICAgICAgKEpTQzo6TWFy
a2VkU3BhY2U6OmNhbm9uaWNhbGl6ZUNlbGxMaXZlbmVzc0RhdGEpOgorICAgICAgICAoSlNDOjpN
YXJrZWRTcGFjZTo6aXNQYWdlZE91dCk6IFN1cHBvcnQgZm9yIGxhcmdlIHRoaW5naWVzLgorCisg
ICAgICAgIChKU0M6Ok1hcmtlZFNwYWNlOjpmcmVlQmxvY2spOiBVc2UgdGhlIHN0YW5kYXJkIHJl
Y3ljbGVyIGlmIHBvc3NpYmxlLgorCisgICAgICAgICogaGVhcC9NYXJrZWRTcGFjZS5oOgorICAg
ICAgICAoTWFya2VkU3BhY2UpOgorICAgICAgICAoSlNDOjpNYXJrZWRTcGFjZTo6Zmlyc3RBbGxv
Y2F0b3IpOgorICAgICAgICAoSlNDOjpNYXJrZWRTcGFjZTo6YWxsb2NhdG9yRm9yKToKKyAgICAg
ICAgKEpTQzo6TWFya2VkU3BhY2U6OmRlc3RydWN0b3JBbGxvY2F0b3JGb3IpOgorICAgICAgICAo
SlNDOjpNYXJrZWRTcGFjZTo6YWxsb2NhdGVXaXRob3V0RGVzdHJ1Y3Rvcik6CisgICAgICAgIChK
U0M6Ok1hcmtlZFNwYWNlOjphbGxvY2F0ZVdpdGhEZXN0cnVjdG9yKToKKyAgICAgICAgKEpTQzo6
TWFya2VkU3BhY2U6OmZvckVhY2hCbG9jayk6IFJlbW92ZWQgaW1wcmVjaXNlIHNpemUgY2xhc3Nl
cywgc2luY2UKKyAgICAgICAgdGhleSdyZSBub3QgdXNlZC4KKworICAgICAgICAqIGxsaW50L0xv
d0xldmVsSW50ZXJwcmV0ZXIuYXNtOiBVcGRhdGVkIGZvciBpbXByZWNpc2UgcmVtb3ZhbC4KKwog
MjAxMi0wOS0wOSAgR2VvZmZyZXkgR2FyZW4gIDxnZ2FyZW5AYXBwbGUuY29tPgogCiAgICAgICAg
IFJvbGxlZCBvdXQgPGh0dHA6Ly90cmFjLndlYmtpdC5vcmcvY2hhbmdlc2V0LzEyNzkzOT4gYmVj
YXVzZSBpdCBicm9rZQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya2VkQWxs
b2NhdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJr
ZWRBbGxvY2F0b3IuY3BwCShyZXZpc2lvbiAxMjc5OTApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaGVhcC9NYXJrZWRBbGxvY2F0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNyw5ICsyNyw5
IEBAIGJvb2wgTWFya2VkQWxsb2NhdG9yOjppc1BhZ2VkT3V0KGRvdWJsZSAKICAgICByZXR1cm4g
ZmFsc2U7CiB9CiAKLWlubGluZSB2b2lkKiBNYXJrZWRBbGxvY2F0b3I6OnRyeUFsbG9jYXRlSGVs
cGVyKCkKK2lubGluZSB2b2lkKiBNYXJrZWRBbGxvY2F0b3I6OnRyeUFsbG9jYXRlSGVscGVyKHNp
emVfdCBieXRlcykKIHsKLSAgICBpZiAoIW1fZnJlZUxpc3QuaGVhZCkgeworICAgIGlmICghbV9m
cmVlTGlzdC5oZWFkIHx8ICFmaXQobV9jdXJyZW50QmxvY2ssIGJ5dGVzKSkgewogICAgICAgICBp
ZiAobV9vbmx5Q29udGFpbnNTdHJ1Y3R1cmVzICYmICFtX2hlYXAtPmlzU2FmZVRvU3dlZXBTdHJ1
Y3R1cmVzKCkpIHsKICAgICAgICAgICAgIGlmIChtX2N1cnJlbnRCbG9jaykgewogICAgICAgICAg
ICAgICAgIG1fY3VycmVudEJsb2NrLT5kaWRDb25zdW1lRnJlZUxpc3QoKTsKQEAgLTQyLDEyICs0
MiwyMiBAQCBpbmxpbmUgdm9pZCogTWFya2VkQWxsb2NhdG9yOjp0cnlBbGxvY2F0CiAgICAgICAg
IH0KIAogICAgICAgICBmb3IgKE1hcmtlZEJsb2NrKiYgYmxvY2sgPSBtX2Jsb2Nrc1RvU3dlZXA7
IGJsb2NrOyBibG9jayA9IGJsb2NrLT5uZXh0KCkpIHsKLSAgICAgICAgICAgIG1fZnJlZUxpc3Qg
PSBibG9jay0+c3dlZXAoTWFya2VkQmxvY2s6OlN3ZWVwVG9GcmVlTGlzdCk7Ci0gICAgICAgICAg
ICBpZiAobV9mcmVlTGlzdC5oZWFkKSB7Ci0gICAgICAgICAgICAgICAgbV9jdXJyZW50QmxvY2sg
PSBibG9jazsKLSAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIEFTU0VSVCghbV9p
c0xhcmdlIHx8IGJsb2NrLT5pc0xhcmdlKCkpOworICAgICAgICAgICAgTWFya2VkQmxvY2s6OkZy
ZWVMaXN0IGZyZWVMaXN0ID0gYmxvY2stPnN3ZWVwKE1hcmtlZEJsb2NrOjpTd2VlcFRvRnJlZUxp
c3QpOworICAgICAgICAgICAgaWYgKCFmcmVlTGlzdC5oZWFkKSB7CisgICAgICAgICAgICAgICAg
YmxvY2stPmRpZENvbnN1bWVGcmVlTGlzdCgpOworICAgICAgICAgICAgICAgIGNvbnRpbnVlOwog
ICAgICAgICAgICAgfQotICAgICAgICAgICAgYmxvY2stPmRpZENvbnN1bWVGcmVlTGlzdCgpOwor
CisgICAgICAgICAgICBpZiAoIWZpdChibG9jaywgYnl0ZXMpKSB7CisgICAgICAgICAgICAgICAg
QVNTRVJUKGJsb2NrLT5pc0xhcmdlKCkpOworICAgICAgICAgICAgICAgIGJsb2NrLT56YXBGcmVl
TGlzdChmcmVlTGlzdCk7CisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICB9
CisKKyAgICAgICAgICAgIG1fZnJlZUxpc3QgPSBmcmVlTGlzdDsKKyAgICAgICAgICAgIG1fY3Vy
cmVudEJsb2NrID0gYmxvY2s7CisgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgICAg
ICAKICAgICAgICAgaWYgKCFtX2ZyZWVMaXN0LmhlYWQpIHsKQEAgLTU2LDcxICs2Niw4NSBAQCBp
bmxpbmUgdm9pZCogTWFya2VkQWxsb2NhdG9yOjp0cnlBbGxvY2F0CiAgICAgICAgIH0KICAgICB9
CiAgICAgCi0gICAgTWFya2VkQmxvY2s6OkZyZWVDZWxsKiBoZWFkID0gbV9mcmVlTGlzdC5oZWFk
OwotICAgIG1fZnJlZUxpc3QuaGVhZCA9IGhlYWQtPm5leHQ7Ci0gICAgQVNTRVJUKGhlYWQpOwot
ICAgIHJldHVybiBoZWFkOworICAgIE1hcmtlZEJsb2NrOjpGcmVlQ2VsbCogY2VsbCA9IG1fZnJl
ZUxpc3QuaGVhZDsKKyAgICBBU1NFUlQoY2VsbCk7CisgICAgbV9mcmVlTGlzdC5oZWFkID0gY2Vs
bC0+bmV4dDsKKyAgICByZXR1cm4gY2VsbDsKIH0KLSAgICAKLWlubGluZSB2b2lkKiBNYXJrZWRB
bGxvY2F0b3I6OnRyeUFsbG9jYXRlKCkKKworaW5saW5lIHZvaWQqIE1hcmtlZEFsbG9jYXRvcjo6
dHJ5QWxsb2NhdGUoc2l6ZV90IGJ5dGVzKQogewogICAgIEFTU0VSVCghbV9oZWFwLT5pc0J1c3ko
KSk7CiAgICAgbV9oZWFwLT5tX29wZXJhdGlvbkluUHJvZ3Jlc3MgPSBBbGxvY2F0aW9uOwotICAg
IHZvaWQqIHJlc3VsdCA9IHRyeUFsbG9jYXRlSGVscGVyKCk7CisgICAgdm9pZCogcmVzdWx0ID0g
dHJ5QWxsb2NhdGVIZWxwZXIoYnl0ZXMpOwogICAgIG1faGVhcC0+bV9vcGVyYXRpb25JblByb2dy
ZXNzID0gTm9PcGVyYXRpb247CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KLSAgICAKLXZvaWQqIE1h
cmtlZEFsbG9jYXRvcjo6YWxsb2NhdGVTbG93Q2FzZSgpCisKK3ZvaWQqIE1hcmtlZEFsbG9jYXRv
cjo6YWxsb2NhdGVTbG93Q2FzZShzaXplX3QgYnl0ZXMpCiB7CiAgICAgQVNTRVJUKG1faGVhcC0+
Z2xvYmFsRGF0YSgpLT5hcGlMb2NrKCkuY3VycmVudFRocmVhZElzSG9sZGluZ0xvY2soKSk7Cisg
ICAgQVNTRVJUKCFtX2ZyZWVMaXN0LmhlYWQgfHwgIWZpdChtX2N1cnJlbnRCbG9jaywgYnl0ZXMp
KTsKICNpZiBDT0xMRUNUX09OX0VWRVJZX0FMTE9DQVRJT04KICAgICBtX2hlYXAtPmNvbGxlY3RB
bGxHYXJiYWdlKCk7CiAgICAgQVNTRVJUKG1faGVhcC0+bV9vcGVyYXRpb25JblByb2dyZXNzID09
IE5vT3BlcmF0aW9uKTsKICNlbmRpZgotICAgIAotICAgIEFTU0VSVCghbV9mcmVlTGlzdC5oZWFk
KTsKKwogICAgIG1faGVhcC0+ZGlkQWxsb2NhdGUobV9mcmVlTGlzdC5ieXRlcyk7Ci0gICAgCi0g
ICAgdm9pZCogcmVzdWx0ID0gdHJ5QWxsb2NhdGUoKTsKLSAgICAKKworICAgIHZvaWQqIHJlc3Vs
dCA9IHRyeUFsbG9jYXRlKGJ5dGVzKTsKICAgICBpZiAoTElLRUxZKHJlc3VsdCAhPSAwKSkKICAg
ICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICAKICAgICBpZiAobV9oZWFwLT5zaG91bGRDb2xsZWN0
KCkpIHsKICAgICAgICAgbV9oZWFwLT5jb2xsZWN0KEhlYXA6OkRvTm90U3dlZXApOwogCi0gICAg
ICAgIHJlc3VsdCA9IHRyeUFsbG9jYXRlKCk7CisgICAgICAgIHJlc3VsdCA9IHRyeUFsbG9jYXRl
KGJ5dGVzKTsKICAgICAgICAgaWYgKHJlc3VsdCkKICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7
CiAgICAgfQogCiAgICAgQVNTRVJUKCFtX2hlYXAtPnNob3VsZENvbGxlY3QoKSk7Ci0gICAgCi0g
ICAgTWFya2VkQmxvY2sqIGJsb2NrID0gYWxsb2NhdGVCbG9jaygpOwotICAgIEFTU0VSVChibG9j
ayk7CisKKyAgICBNYXJrZWRCbG9jayogYmxvY2sgPSBhbGxvY2F0ZUJsb2NrKGJ5dGVzKTsKICAg
ICBhZGRCbG9jayhibG9jayk7Ci0gICAgICAgIAotICAgIHJlc3VsdCA9IHRyeUFsbG9jYXRlKCk7
CisgICAgbV9mcmVlTGlzdCA9IGJsb2NrLT5zd2VlcChNYXJrZWRCbG9jazo6U3dlZXBUb0ZyZWVM
aXN0KTsKKyAgICBtX2N1cnJlbnRCbG9jayA9IGJsb2NrOworCisgICAgcmVzdWx0ID0gdHJ5QWxs
b2NhdGUoYnl0ZXMpOwogICAgIEFTU0VSVChyZXN1bHQpOwogICAgIHJldHVybiByZXN1bHQ7CiB9
CiAKLU1hcmtlZEJsb2NrKiBNYXJrZWRBbGxvY2F0b3I6OmFsbG9jYXRlQmxvY2soKQorTWFya2Vk
QmxvY2sqIE1hcmtlZEFsbG9jYXRvcjo6YWxsb2NhdGVCbG9jayhzaXplX3QgYnl0ZXMpCiB7Ci0g
ICAgTWFya2VkQmxvY2sqIGJsb2NrID0gTWFya2VkQmxvY2s6OmNyZWF0ZShtX2hlYXAtPmJsb2Nr
QWxsb2NhdG9yKCkuYWxsb2NhdGUoKSwgbV9oZWFwLCBtX2NlbGxTaXplLCBtX2NlbGxzTmVlZERl
c3RydWN0aW9uLCBtX29ubHlDb250YWluc1N0cnVjdHVyZXMpOwotICAgIG1fbWFya2VkU3BhY2Ut
PmRpZEFkZEJsb2NrKGJsb2NrKTsKLSAgICByZXR1cm4gYmxvY2s7CisgICAgc2l6ZV90IGJsb2Nr
QWxpZ25tZW50ID0gTWFya2VkQmxvY2s6OmJsb2NrU2l6ZTsKKyAgICBzaXplX3QgbWluQmxvY2tT
aXplID0gV1RGOjpyb3VuZFVwVG9NdWx0aXBsZU9mKFdURjo6cGFnZVNpemUoKSwgc2l6ZW9mKE1h
cmtlZEJsb2NrKSArIGJ5dGVzKTsKKyAgICBzaXplX3QgYmxvY2tTaXplID0gc3RkOjptYXgobWlu
QmxvY2tTaXplLCBibG9ja0FsaWdubWVudCk7IC8vIFBhZ2VBbGxvY2F0aW9uQWxpZ25lZCByZXF1
aXJlcyBzaXplID49IGFsaWdubWVudC4KKworICAgIHNpemVfdCBjZWxsU2l6ZSA9IFdURjo6cm91
bmRVcFRvTXVsdGlwbGVPZjxNYXJrZWRCbG9jazo6YXRvbVNpemU+KGJ5dGVzKTsKKyAgICBBU1NF
UlQobV9pc0xhcmdlIHx8IGNlbGxTaXplID09IG1fY2VsbFNpemUpOworCisgICAgaWYgKGJsb2Nr
U2l6ZSA9PSBNYXJrZWRCbG9jazo6YmxvY2tTaXplKSB7CisgICAgICAgIFBhZ2VBbGxvY2F0aW9u
QWxpZ25lZCBhbGxvY2F0aW9uID0gbV9oZWFwLT5ibG9ja0FsbG9jYXRvcigpLmFsbG9jYXRlKCk7
CisgICAgICAgIHJldHVybiBNYXJrZWRCbG9jazo6Y3JlYXRlKGFsbG9jYXRpb24sIG1faGVhcCwg
Y2VsbFNpemUsIG1fY2VsbHNOZWVkRGVzdHJ1Y3Rpb24sIG1fb25seUNvbnRhaW5zU3RydWN0dXJl
cywgbV9pc0xhcmdlKTsKKyAgICB9CisKKyAgICBQYWdlQWxsb2NhdGlvbkFsaWduZWQgYWxsb2Nh
dGlvbiA9IFBhZ2VBbGxvY2F0aW9uQWxpZ25lZDo6YWxsb2NhdGUoYmxvY2tTaXplLCBibG9ja0Fs
aWdubWVudCwgT1NBbGxvY2F0b3I6OkpTR0NIZWFwUGFnZXMpOworICAgIGlmICghc3RhdGljX2Nh
c3Q8Ym9vbD4oYWxsb2NhdGlvbikpCisgICAgICAgIENSQVNIKCk7CisgICAgcmV0dXJuIE1hcmtl
ZEJsb2NrOjpjcmVhdGUoYWxsb2NhdGlvbiwgbV9oZWFwLCBjZWxsU2l6ZSwgbV9jZWxsc05lZWRE
ZXN0cnVjdGlvbiwgbV9vbmx5Q29udGFpbnNTdHJ1Y3R1cmVzLCBtX2lzTGFyZ2UpOwogfQogCiB2
b2lkIE1hcmtlZEFsbG9jYXRvcjo6YWRkQmxvY2soTWFya2VkQmxvY2sqIGJsb2NrKQogeworICAg
IEFTU0VSVChibG9jayk7CiAgICAgQVNTRVJUKCFtX2N1cnJlbnRCbG9jayk7CiAgICAgQVNTRVJU
KCFtX2ZyZWVMaXN0LmhlYWQpOwogICAgIAogICAgIG1fYmxvY2tMaXN0LmFwcGVuZChibG9jayk7
Ci0gICAgbV9ibG9ja3NUb1N3ZWVwID0gbV9jdXJyZW50QmxvY2sgPSBibG9jazsKLSAgICBtX2Zy
ZWVMaXN0ID0gYmxvY2stPnN3ZWVwKE1hcmtlZEJsb2NrOjpTd2VlcFRvRnJlZUxpc3QpOworICAg
IG1fYmxvY2tzVG9Td2VlcCA9IGJsb2NrOworICAgIG1fbWFya2VkU3BhY2UtPmRpZEFkZEJsb2Nr
KGJsb2NrKTsKIH0KIAogdm9pZCBNYXJrZWRBbGxvY2F0b3I6OnJlbW92ZUJsb2NrKE1hcmtlZEJs
b2NrKiBibG9jaykKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtlZEFsbG9j
YXRvci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtlZEFs
bG9jYXRvci5oCShyZXZpc2lvbiAxMjc5OTApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVh
cC9NYXJrZWRBbGxvY2F0b3IuaAkod29ya2luZyBjb3B5KQpAQCAtMTQsNiArMTQsMTMgQEAgbmFt
ZXNwYWNlIERGRyB7CiBjbGFzcyBTcGVjdWxhdGl2ZUpJVDsKIH0KIAorc3RhdGljIGlubGluZSBi
b29sIGZpdChNYXJrZWRCbG9jayogYmxvY2ssIHNpemVfdCBzaXplKQoreworICAgIGlmIChzaXpl
ID4gYmxvY2stPmNlbGxTaXplKCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICByZXR1cm4g
dHJ1ZTsKK30KKwogY2xhc3MgTWFya2VkQWxsb2NhdG9yIHsKICAgICBmcmllbmQgY2xhc3MgSklU
OwogICAgIGZyaWVuZCBjbGFzcyBERkc6OlNwZWN1bGF0aXZlSklUOwpAQCAtMjYsMjMgKzMzLDI0
IEBAIHB1YmxpYzoKICAgICBib29sIGNlbGxzTmVlZERlc3RydWN0aW9uKCkgeyByZXR1cm4gbV9j
ZWxsc05lZWREZXN0cnVjdGlvbjsgfQogICAgIGJvb2wgb25seUNvbnRhaW5zU3RydWN0dXJlcygp
IHsgcmV0dXJuIG1fb25seUNvbnRhaW5zU3RydWN0dXJlczsgfQogICAgIHZvaWQqIGFsbG9jYXRl
KCk7CisgICAgdm9pZCogYWxsb2NhdGVMYXJnZShzaXplX3QpOwogICAgIEhlYXAqIGhlYXAoKSB7
IHJldHVybiBtX2hlYXA7IH0KICAgICAKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jdG9yPiB2
b2lkIGZvckVhY2hCbG9jayhGdW5jdG9yJik7CiAgICAgCiAgICAgdm9pZCBhZGRCbG9jayhNYXJr
ZWRCbG9jayopOwogICAgIHZvaWQgcmVtb3ZlQmxvY2soTWFya2VkQmxvY2sqKTsKLSAgICB2b2lk
IGluaXQoSGVhcCosIE1hcmtlZFNwYWNlKiwgc2l6ZV90IGNlbGxTaXplLCBib29sIGNlbGxzTmVl
ZERlc3RydWN0aW9uLCBib29sIG9ubHlDb250YWluc1N0cnVjdHVyZXMpOworICAgIHZvaWQgaW5p
dChIZWFwKiwgTWFya2VkU3BhY2UqLCBzaXplX3QgY2VsbFNpemUsIGJvb2wgY2VsbHNOZWVkRGVz
dHJ1Y3Rpb24sIGJvb2wgb25seUNvbnRhaW5zU3RydWN0dXJlcywgYm9vbCBpc0xhcmdlKTsKIAog
ICAgIGJvb2wgaXNQYWdlZE91dChkb3VibGUgZGVhZGxpbmUpOwogICAgCiBwcml2YXRlOgogICAg
IGZyaWVuZCBjbGFzcyBMTEludE9mZnNldHNFeHRyYWN0b3I7CiAgICAgCi0gICAgSlNfRVhQT1JU
X1BSSVZBVEUgdm9pZCogYWxsb2NhdGVTbG93Q2FzZSgpOwotICAgIHZvaWQqIHRyeUFsbG9jYXRl
KCk7Ci0gICAgdm9pZCogdHJ5QWxsb2NhdGVIZWxwZXIoKTsKLSAgICBNYXJrZWRCbG9jayogYWxs
b2NhdGVCbG9jaygpOworICAgIEpTX0VYUE9SVF9QUklWQVRFIHZvaWQqIGFsbG9jYXRlU2xvd0Nh
c2Uoc2l6ZV90KTsKKyAgICB2b2lkKiB0cnlBbGxvY2F0ZShzaXplX3QpOworICAgIHZvaWQqIHRy
eUFsbG9jYXRlSGVscGVyKHNpemVfdCk7CisgICAgTWFya2VkQmxvY2sqIGFsbG9jYXRlQmxvY2so
c2l6ZV90KTsKICAgICAKICAgICBNYXJrZWRCbG9jazo6RnJlZUxpc3QgbV9mcmVlTGlzdDsKICAg
ICBNYXJrZWRCbG9jayogbV9jdXJyZW50QmxvY2s7CkBAIC01MSw2ICs1OSw3IEBAIHByaXZhdGU6
CiAgICAgc2l6ZV90IG1fY2VsbFNpemU7CiAgICAgYm9vbCBtX2NlbGxzTmVlZERlc3RydWN0aW9u
OwogICAgIGJvb2wgbV9vbmx5Q29udGFpbnNTdHJ1Y3R1cmVzOworICAgIGJvb2wgbV9pc0xhcmdl
OwogICAgIEhlYXAqIG1faGVhcDsKICAgICBNYXJrZWRTcGFjZSogbV9tYXJrZWRTcGFjZTsKIH07
CkBAIC02MSwyNyArNzAsNDEgQEAgaW5saW5lIE1hcmtlZEFsbG9jYXRvcjo6TWFya2VkQWxsb2Nh
dG9yKAogICAgICwgbV9jZWxsU2l6ZSgwKQogICAgICwgbV9jZWxsc05lZWREZXN0cnVjdGlvbih0
cnVlKQogICAgICwgbV9vbmx5Q29udGFpbnNTdHJ1Y3R1cmVzKGZhbHNlKQorICAgICwgbV9pc0xh
cmdlKGZhbHNlKQogICAgICwgbV9oZWFwKDApCiAgICAgLCBtX21hcmtlZFNwYWNlKDApCiB7CiB9
CiAKLWlubGluZSB2b2lkIE1hcmtlZEFsbG9jYXRvcjo6aW5pdChIZWFwKiBoZWFwLCBNYXJrZWRT
cGFjZSogbWFya2VkU3BhY2UsIHNpemVfdCBjZWxsU2l6ZSwgYm9vbCBjZWxsc05lZWREZXN0cnVj
dGlvbiwgYm9vbCBvbmx5Q29udGFpbnNTdHJ1Y3R1cmVzKQoraW5saW5lIHZvaWQgTWFya2VkQWxs
b2NhdG9yOjppbml0KEhlYXAqIGhlYXAsIE1hcmtlZFNwYWNlKiBtYXJrZWRTcGFjZSwgc2l6ZV90
IGNlbGxTaXplLCBib29sIGNlbGxzTmVlZERlc3RydWN0aW9uLCBib29sIG9ubHlDb250YWluc1N0
cnVjdHVyZXMsIGJvb2wgaXNMYXJnZSkKIHsKICAgICBtX2hlYXAgPSBoZWFwOwogICAgIG1fbWFy
a2VkU3BhY2UgPSBtYXJrZWRTcGFjZTsKICAgICBtX2NlbGxTaXplID0gY2VsbFNpemU7CiAgICAg
bV9jZWxsc05lZWREZXN0cnVjdGlvbiA9IGNlbGxzTmVlZERlc3RydWN0aW9uOwogICAgIG1fb25s
eUNvbnRhaW5zU3RydWN0dXJlcyA9IG9ubHlDb250YWluc1N0cnVjdHVyZXM7CisgICAgbV9pc0xh
cmdlID0gaXNMYXJnZTsKIH0KIAogaW5saW5lIHZvaWQqIE1hcmtlZEFsbG9jYXRvcjo6YWxsb2Nh
dGUoKQogeworICAgIEFTU0VSVCghbV9pc0xhcmdlKTsKKyAgICBBU1NFUlQoIW1fY3VycmVudEJs
b2NrIHx8ICFtX2N1cnJlbnRCbG9jay0+aXNMYXJnZSgpKTsKKwogICAgIE1hcmtlZEJsb2NrOjpG
cmVlQ2VsbCogaGVhZCA9IG1fZnJlZUxpc3QuaGVhZDsKLSAgICAvLyBUaGlzIGlzIGEgbGlnaHQt
d2VpZ2h0IGZhc3QgcGF0aCB0byBjb3ZlciB0aGUgbW9zdCBjb21tb24gY2FzZS4KICAgICBpZiAo
VU5MSUtFTFkoIWhlYWQpKQotICAgICAgICByZXR1cm4gYWxsb2NhdGVTbG93Q2FzZSgpOwotICAg
IAorICAgICAgICByZXR1cm4gYWxsb2NhdGVTbG93Q2FzZShtX2NlbGxTaXplKTsKKworICAgIG1f
ZnJlZUxpc3QuaGVhZCA9IGhlYWQtPm5leHQ7CisgICAgcmV0dXJuIGhlYWQ7Cit9CisKK2lubGlu
ZSB2b2lkKiBNYXJrZWRBbGxvY2F0b3I6OmFsbG9jYXRlTGFyZ2Uoc2l6ZV90IGJ5dGVzKQorewor
ICAgIE1hcmtlZEJsb2NrOjpGcmVlQ2VsbCogaGVhZCA9IG1fZnJlZUxpc3QuaGVhZDsKKyAgICBp
ZiAoIWhlYWQgfHwgIWZpdChtX2N1cnJlbnRCbG9jaywgYnl0ZXMpKQorICAgICAgICByZXR1cm4g
YWxsb2NhdGVTbG93Q2FzZShieXRlcyk7CisKICAgICBtX2ZyZWVMaXN0LmhlYWQgPSBoZWFkLT5u
ZXh0OwogICAgIHJldHVybiBoZWFkOwogfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hl
YXAvTWFya2VkQmxvY2suY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9o
ZWFwL01hcmtlZEJsb2NrLmNwcAkocmV2aXNpb24gMTI3OTkwKQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2hlYXAvTWFya2VkQmxvY2suY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMywxNyArMzMs
MTggQEAKIAogbmFtZXNwYWNlIEpTQyB7CiAKLU1hcmtlZEJsb2NrKiBNYXJrZWRCbG9jazo6Y3Jl
YXRlKGNvbnN0IFBhZ2VBbGxvY2F0aW9uQWxpZ25lZCYgYWxsb2NhdGlvbiwgSGVhcCogaGVhcCwg
c2l6ZV90IGNlbGxTaXplLCBib29sIGNlbGxzTmVlZERlc3RydWN0aW9uLCBib29sIG9ubHlDb250
YWluc1N0cnVjdHVyZXMpCitNYXJrZWRCbG9jayogTWFya2VkQmxvY2s6OmNyZWF0ZShjb25zdCBQ
YWdlQWxsb2NhdGlvbkFsaWduZWQmIGFsbG9jYXRpb24sIEhlYXAqIGhlYXAsIHNpemVfdCBjZWxs
U2l6ZSwgYm9vbCBjZWxsc05lZWREZXN0cnVjdGlvbiwgYm9vbCBvbmx5Q29udGFpbnNTdHJ1Y3R1
cmVzLCBib29sIGlzTGFyZ2UpCiB7Ci0gICAgcmV0dXJuIG5ldyAoTm90TnVsbCwgYWxsb2NhdGlv
bi5iYXNlKCkpIE1hcmtlZEJsb2NrKGFsbG9jYXRpb24sIGhlYXAsIGNlbGxTaXplLCBjZWxsc05l
ZWREZXN0cnVjdGlvbiwgb25seUNvbnRhaW5zU3RydWN0dXJlcyk7CisgICAgcmV0dXJuIG5ldyAo
Tm90TnVsbCwgYWxsb2NhdGlvbi5iYXNlKCkpIE1hcmtlZEJsb2NrKGFsbG9jYXRpb24sIGhlYXAs
IGNlbGxTaXplLCBjZWxsc05lZWREZXN0cnVjdGlvbiwgb25seUNvbnRhaW5zU3RydWN0dXJlcywg
aXNMYXJnZSk7CiB9CiAKLU1hcmtlZEJsb2NrOjpNYXJrZWRCbG9jayhjb25zdCBQYWdlQWxsb2Nh
dGlvbkFsaWduZWQmIGFsbG9jYXRpb24sIEhlYXAqIGhlYXAsIHNpemVfdCBjZWxsU2l6ZSwgYm9v
bCBjZWxsc05lZWREZXN0cnVjdGlvbiwgYm9vbCBvbmx5Q29udGFpbnNTdHJ1Y3R1cmVzKQorTWFy
a2VkQmxvY2s6Ok1hcmtlZEJsb2NrKGNvbnN0IFBhZ2VBbGxvY2F0aW9uQWxpZ25lZCYgYWxsb2Nh
dGlvbiwgSGVhcCogaGVhcCwgc2l6ZV90IGNlbGxTaXplLCBib29sIGNlbGxzTmVlZERlc3RydWN0
aW9uLCBib29sIG9ubHlDb250YWluc1N0cnVjdHVyZXMsIGJvb2wgaXNMYXJnZSkKICAgICA6IEhl
YXBCbG9jazxNYXJrZWRCbG9jaz4oYWxsb2NhdGlvbikKICAgICAsIG1fYXRvbXNQZXJDZWxsKChj
ZWxsU2l6ZSArIGF0b21TaXplIC0gMSkgLyBhdG9tU2l6ZSkKICAgICAsIG1fZW5kQXRvbShhdG9t
c1BlckJsb2NrIC0gbV9hdG9tc1BlckNlbGwgKyAxKQogICAgICwgbV9jZWxsc05lZWREZXN0cnVj
dGlvbihjZWxsc05lZWREZXN0cnVjdGlvbikKICAgICAsIG1fb25seUNvbnRhaW5zU3RydWN0dXJl
cyhvbmx5Q29udGFpbnNTdHJ1Y3R1cmVzKQorICAgICwgbV9pc0xhcmdlKGlzTGFyZ2UpCiAgICAg
LCBtX3N0YXRlKE5ldykgLy8gQWxsIGNlbGxzIHN0YXJ0IG91dCB1bm1hcmtlZC4KICAgICAsIG1f
d2Vha1NldChoZWFwLT5nbG9iYWxEYXRhKCkpCiB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaGVhcC9NYXJrZWRCbG9jay5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9oZWFwL01hcmtlZEJsb2NrLmgJKHJldmlzaW9uIDEyNzk5MCkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9oZWFwL01hcmtlZEJsb2NrLmgJKHdvcmtpbmcgY29weSkKQEAgLTExMiw3ICsxMTIs
NyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgICAgIFJldHVyblR5cGUgbV9jb3VudDsKICAg
ICAgICAgfTsKIAotICAgICAgICBzdGF0aWMgTWFya2VkQmxvY2sqIGNyZWF0ZShjb25zdCBQYWdl
QWxsb2NhdGlvbkFsaWduZWQmLCBIZWFwKiwgc2l6ZV90IGNlbGxTaXplLCBib29sIGNlbGxzTmVl
ZERlc3RydWN0aW9uLCBib29sIG9ubHlDb250YWluc1N0cnVjdHVyZXMpOworICAgICAgICBzdGF0
aWMgTWFya2VkQmxvY2sqIGNyZWF0ZShjb25zdCBQYWdlQWxsb2NhdGlvbkFsaWduZWQmLCBIZWFw
Kiwgc2l6ZV90IGNlbGxTaXplLCBib29sIGNlbGxzTmVlZERlc3RydWN0aW9uLCBib29sIG9ubHlD
b250YWluc1N0cnVjdHVyZXMsIGJvb2wgaXNMYXJnZSk7CiAKICAgICAgICAgc3RhdGljIGJvb2wg
aXNBdG9tQWxpZ25lZChjb25zdCB2b2lkKik7CiAgICAgICAgIHN0YXRpYyBNYXJrZWRCbG9jayog
YmxvY2tGb3IoY29uc3Qgdm9pZCopOwpAQCAtMTQ4LDYgKzE0OCw3IEBAIG5hbWVzcGFjZSBKU0Mg
ewogCiAgICAgICAgIHNpemVfdCBzaXplKCk7CiAgICAgICAgIHNpemVfdCBjYXBhY2l0eSgpOwor
ICAgICAgICBib29sIGlzTGFyZ2UoKTsKIAogICAgICAgICBib29sIGlzTWFya2VkKGNvbnN0IHZv
aWQqKTsKICAgICAgICAgYm9vbCB0ZXN0QW5kU2V0TWFya2VkKGNvbnN0IHZvaWQqKTsKQEAgLTE5
Niw3ICsxOTcsNyBAQCBuYW1lc3BhY2UgSlNDIHsKIAogICAgICAgICB0eXBlZGVmIGNoYXIgQXRv
bVthdG9tU2l6ZV07CiAKLSAgICAgICAgTWFya2VkQmxvY2soY29uc3QgUGFnZUFsbG9jYXRpb25B
bGlnbmVkJiwgSGVhcCosIHNpemVfdCBjZWxsU2l6ZSwgYm9vbCBjZWxsc05lZWREZXN0cnVjdGlv
biwgYm9vbCBvbmx5Q29udGFpbnNTdHJ1Y3R1cmVzKTsKKyAgICAgICAgTWFya2VkQmxvY2soY29u
c3QgUGFnZUFsbG9jYXRpb25BbGlnbmVkJiwgSGVhcCosIHNpemVfdCBjZWxsU2l6ZSwgYm9vbCBj
ZWxsc05lZWREZXN0cnVjdGlvbiwgYm9vbCBvbmx5Q29udGFpbnNTdHJ1Y3R1cmVzLCBib29sIGlz
TGFyZ2UpOwogICAgICAgICBBdG9tKiBhdG9tcygpOwogICAgICAgICBzaXplX3QgYXRvbU51bWJl
cihjb25zdCB2b2lkKik7CiAgICAgICAgIHZvaWQgY2FsbERlc3RydWN0b3IoSlNDZWxsKik7CkBA
IC0yMTUsNiArMjE2LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAjZW5kaWYKICAgICAgICAgYm9vbCBt
X2NlbGxzTmVlZERlc3RydWN0aW9uOwogICAgICAgICBib29sIG1fb25seUNvbnRhaW5zU3RydWN0
dXJlczsKKyAgICAgICAgYm9vbCBtX2lzTGFyZ2U7CiAgICAgICAgIEJsb2NrU3RhdGUgbV9zdGF0
ZTsKICAgICAgICAgV2Vha1NldCBtX3dlYWtTZXQ7CiAgICAgfTsKQEAgLTM0NCw2ICszNDYsMTEg
QEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHJldHVybiBhbGxvY2F0aW9uKCkuc2l6ZSgpOwog
ICAgIH0KIAorICAgIGlubGluZSBib29sIE1hcmtlZEJsb2NrOjppc0xhcmdlKCkKKyAgICB7Cisg
ICAgICAgIHJldHVybiBtX2lzTGFyZ2U7CisgICAgfQorCiAgICAgaW5saW5lIHNpemVfdCBNYXJr
ZWRCbG9jazo6YXRvbU51bWJlcihjb25zdCB2b2lkKiBwKQogICAgIHsKICAgICAgICAgcmV0dXJu
IChyZWludGVycHJldF9jYXN0PEJpdHM+KHApIC0gcmVpbnRlcnByZXRfY2FzdDxCaXRzPih0aGlz
KSkgLyBhdG9tU2l6ZTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtlZFNw
YWNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJrZWRT
cGFjZS5jcHAJKHJldmlzaW9uIDEyNzk5MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFw
L01hcmtlZFNwYWNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtODEsMTYgKzgxLDE1IEBAIE1hcmtl
ZFNwYWNlOjpNYXJrZWRTcGFjZShIZWFwKiBoZWFwKQogICAgIDogbV9oZWFwKGhlYXApCiB7CiAg
ICAgZm9yIChzaXplX3QgY2VsbFNpemUgPSBwcmVjaXNlU3RlcDsgY2VsbFNpemUgPD0gcHJlY2lz
ZUN1dG9mZjsgY2VsbFNpemUgKz0gcHJlY2lzZVN0ZXApIHsKLSAgICAgICAgYWxsb2NhdG9yRm9y
KGNlbGxTaXplKS5pbml0KGhlYXAsIHRoaXMsIGNlbGxTaXplLCBmYWxzZSwgZmFsc2UpOwotICAg
ICAgICBkZXN0cnVjdG9yQWxsb2NhdG9yRm9yKGNlbGxTaXplKS5pbml0KGhlYXAsIHRoaXMsIGNl
bGxTaXplLCB0cnVlLCBmYWxzZSk7CisgICAgICAgIGFsbG9jYXRvckZvcihjZWxsU2l6ZSkuaW5p
dChoZWFwLCB0aGlzLCBjZWxsU2l6ZSwgZmFsc2UsIGZhbHNlLCBmYWxzZSk7CisgICAgICAgIGRl
c3RydWN0b3JBbGxvY2F0b3JGb3IoY2VsbFNpemUpLmluaXQoaGVhcCwgdGhpcywgY2VsbFNpemUs
IHRydWUsIGZhbHNlLCBmYWxzZSk7CiAgICAgfQogCi0gICAgZm9yIChzaXplX3QgY2VsbFNpemUg
PSBpbXByZWNpc2VTdGVwOyBjZWxsU2l6ZSA8PSBpbXByZWNpc2VDdXRvZmY7IGNlbGxTaXplICs9
IGltcHJlY2lzZVN0ZXApIHsKLSAgICAgICAgYWxsb2NhdG9yRm9yKGNlbGxTaXplKS5pbml0KGhl
YXAsIHRoaXMsIGNlbGxTaXplLCBmYWxzZSwgZmFsc2UpOwotICAgICAgICBkZXN0cnVjdG9yQWxs
b2NhdG9yRm9yKGNlbGxTaXplKS5pbml0KGhlYXAsIHRoaXMsIGNlbGxTaXplLCB0cnVlLCBmYWxz
ZSk7Ci0gICAgfQorICAgIC8vIEFsbCBsYXJnZSBhbGxvY2F0aW9ucyBnZXQgZGVzdHJ1Y3RvcnMu
IFRoaXMgbWF4aW1pemVzIG91ciBjaGFuY2VzIG9mIFZNCisgICAgLy8gcmV1c2UgYW5kIHNpbXBs
aWZpZXMgYWxsb2NhdGlvbiBsb2dpYy4KKyAgICBtX2xhcmdlQWxsb2NhdG9yLmluaXQoaGVhcCwg
dGhpcywgMCwgdHJ1ZSwgZmFsc2UsIHRydWUpOwogCi0gICAgbV9zdHJ1Y3R1cmVBbGxvY2F0b3Iu
aW5pdChoZWFwLCB0aGlzLCBXVEY6OnJvdW5kVXBUb011bHRpcGxlT2YoMzIsIHNpemVvZihTdHJ1
Y3R1cmUpKSwgdHJ1ZSwgdHJ1ZSk7CisgICAgbV9zdHJ1Y3R1cmVBbGxvY2F0b3IuaW5pdChoZWFw
LCB0aGlzLCBXVEY6OnJvdW5kVXBUb011bHRpcGxlT2YoMzIsIHNpemVvZihTdHJ1Y3R1cmUpKSwg
dHJ1ZSwgdHJ1ZSwgZmFsc2UpOwogfQogCiBNYXJrZWRTcGFjZTo6fk1hcmtlZFNwYWNlKCkKQEAg
LTEyMiwxMSArMTIxLDcgQEAgdm9pZCBNYXJrZWRTcGFjZTo6cmVzZXRBbGxvY2F0b3JzKCkKICAg
ICAgICAgZGVzdHJ1Y3RvckFsbG9jYXRvckZvcihjZWxsU2l6ZSkucmVzZXQoKTsKICAgICB9CiAK
LSAgICBmb3IgKHNpemVfdCBjZWxsU2l6ZSA9IGltcHJlY2lzZVN0ZXA7IGNlbGxTaXplIDw9IGlt
cHJlY2lzZUN1dG9mZjsgY2VsbFNpemUgKz0gaW1wcmVjaXNlU3RlcCkgewotICAgICAgICBhbGxv
Y2F0b3JGb3IoY2VsbFNpemUpLnJlc2V0KCk7Ci0gICAgICAgIGRlc3RydWN0b3JBbGxvY2F0b3JG
b3IoY2VsbFNpemUpLnJlc2V0KCk7Ci0gICAgfQotCisgICAgbV9sYXJnZUFsbG9jYXRvci5yZXNl
dCgpOwogICAgIG1fc3RydWN0dXJlQWxsb2NhdG9yLnJlc2V0KCk7CiB9CiAKQEAgLTE0OCwxMSAr
MTQzLDcgQEAgdm9pZCBNYXJrZWRTcGFjZTo6Y2Fub25pY2FsaXplQ2VsbExpdmVuZQogICAgICAg
ICBkZXN0cnVjdG9yQWxsb2NhdG9yRm9yKGNlbGxTaXplKS56YXBGcmVlTGlzdCgpOwogICAgIH0K
IAotICAgIGZvciAoc2l6ZV90IGNlbGxTaXplID0gaW1wcmVjaXNlU3RlcDsgY2VsbFNpemUgPD0g
aW1wcmVjaXNlQ3V0b2ZmOyBjZWxsU2l6ZSArPSBpbXByZWNpc2VTdGVwKSB7Ci0gICAgICAgIGFs
bG9jYXRvckZvcihjZWxsU2l6ZSkuemFwRnJlZUxpc3QoKTsKLSAgICAgICAgZGVzdHJ1Y3RvckFs
bG9jYXRvckZvcihjZWxsU2l6ZSkuemFwRnJlZUxpc3QoKTsKLSAgICB9Ci0KKyAgICBtX2xhcmdl
QWxsb2NhdG9yLnphcEZyZWVMaXN0KCk7CiAgICAgbV9zdHJ1Y3R1cmVBbGxvY2F0b3IuemFwRnJl
ZUxpc3QoKTsKIH0KIApAQCAtMTYzLDEwICsxNTQsOCBAQCBib29sIE1hcmtlZFNwYWNlOjppc1Bh
Z2VkT3V0KGRvdWJsZSBkZWFkCiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAKLSAg
ICBmb3IgKHNpemVfdCBjZWxsU2l6ZSA9IGltcHJlY2lzZVN0ZXA7IGNlbGxTaXplIDw9IGltcHJl
Y2lzZUN1dG9mZjsgY2VsbFNpemUgKz0gaW1wcmVjaXNlU3RlcCkgewotICAgICAgICBpZiAoYWxs
b2NhdG9yRm9yKGNlbGxTaXplKS5pc1BhZ2VkT3V0KGRlYWRsaW5lKSB8fCBkZXN0cnVjdG9yQWxs
b2NhdG9yRm9yKGNlbGxTaXplKS5pc1BhZ2VkT3V0KGRlYWRsaW5lKSkKLSAgICAgICAgICAgIHJl
dHVybiB0cnVlOwotICAgIH0KKyAgICBpZiAobV9sYXJnZUFsbG9jYXRvci5pc1BhZ2VkT3V0KGRl
YWRsaW5lKSkKKyAgICAgICAgcmV0dXJuIHRydWU7CiAKICAgICBpZiAobV9zdHJ1Y3R1cmVBbGxv
Y2F0b3IuaXNQYWdlZE91dChkZWFkbGluZSkpCiAgICAgICAgIHJldHVybiB0cnVlOwpAQCAtMTc4
LDcgKzE2NywxMyBAQCB2b2lkIE1hcmtlZFNwYWNlOjpmcmVlQmxvY2soTWFya2VkQmxvY2sqCiB7
CiAgICAgYWxsb2NhdG9yRm9yKGJsb2NrKS5yZW1vdmVCbG9jayhibG9jayk7CiAgICAgbV9ibG9j
a3MucmVtb3ZlKGJsb2NrKTsKLSAgICBtX2hlYXAtPmJsb2NrQWxsb2NhdG9yKCkuZGVhbGxvY2F0
ZShNYXJrZWRCbG9jazo6ZGVzdHJveShibG9jaykpOworICAgIGlmIChibG9jay0+Y2FwYWNpdHko
KSA9PSBNYXJrZWRCbG9jazo6YmxvY2tTaXplKSB7CisgICAgICAgIG1faGVhcC0+YmxvY2tBbGxv
Y2F0b3IoKS5kZWFsbG9jYXRlKE1hcmtlZEJsb2NrOjpkZXN0cm95KGJsb2NrKSk7CisgICAgICAg
IHJldHVybjsKKyAgICB9CisKKyAgICBBU1NFUlQoYmxvY2stPmlzTGFyZ2UoKSk7CisgICAgTWFy
a2VkQmxvY2s6OmRlc3Ryb3koYmxvY2spLmRlYWxsb2NhdGUoKTsKIH0KIAogdm9pZCBNYXJrZWRT
cGFjZTo6ZnJlZU9yU2hyaW5rQmxvY2soTWFya2VkQmxvY2sqIGJsb2NrKQpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya2VkU3BhY2UuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaGVhcC9NYXJrZWRTcGFjZS5oCShyZXZpc2lvbiAxMjc5OTApCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJrZWRTcGFjZS5oCSh3b3JraW5nIGNvcHkpCkBA
IC0xMTUsMjUgKzExNSwxNiBAQCBwdWJsaWM6CiAKIHByaXZhdGU6CiAgICAgZnJpZW5kIGNsYXNz
IExMSW50T2Zmc2V0c0V4dHJhY3RvcjsKLSAgICAKKwogICAgIC8vIFsgMzIuLi4gMjU2IF0KICAg
ICBzdGF0aWMgY29uc3Qgc2l6ZV90IHByZWNpc2VTdGVwID0gTWFya2VkQmxvY2s6OmF0b21TaXpl
OwogICAgIHN0YXRpYyBjb25zdCBzaXplX3QgcHJlY2lzZUN1dG9mZiA9IDI1NjsKICAgICBzdGF0
aWMgY29uc3Qgc2l6ZV90IHByZWNpc2VDb3VudCA9IHByZWNpc2VDdXRvZmYgLyBwcmVjaXNlU3Rl
cDsKIAotICAgIC8vIFsgNTEyLi4uIDIwNDggXQotICAgIHN0YXRpYyBjb25zdCBzaXplX3QgaW1w
cmVjaXNlU3RlcCA9IHByZWNpc2VDdXRvZmY7Ci0gICAgc3RhdGljIGNvbnN0IHNpemVfdCBpbXBy
ZWNpc2VDdXRvZmYgPSBtYXhDZWxsU2l6ZTsKLSAgICBzdGF0aWMgY29uc3Qgc2l6ZV90IGltcHJl
Y2lzZUNvdW50ID0gaW1wcmVjaXNlQ3V0b2ZmIC8gaW1wcmVjaXNlU3RlcDsKLQotICAgIHN0cnVj
dCBTdWJzcGFjZSB7Ci0gICAgICAgIEZpeGVkQXJyYXk8TWFya2VkQWxsb2NhdG9yLCBwcmVjaXNl
Q291bnQ+IHByZWNpc2VBbGxvY2F0b3JzOwotICAgICAgICBGaXhlZEFycmF5PE1hcmtlZEFsbG9j
YXRvciwgaW1wcmVjaXNlQ291bnQ+IGltcHJlY2lzZUFsbG9jYXRvcnM7Ci0gICAgfTsKLQotICAg
IFN1YnNwYWNlIG1fZGVzdHJ1Y3RvclNwYWNlOwotICAgIFN1YnNwYWNlIG1fbm9ybWFsU3BhY2U7
CisgICAgRml4ZWRBcnJheTxNYXJrZWRBbGxvY2F0b3IsIHByZWNpc2VDb3VudD4gbV9kZXN0cnVj
dG9yQWxsb2NhdG9yczsKKyAgICBGaXhlZEFycmF5PE1hcmtlZEFsbG9jYXRvciwgcHJlY2lzZUNv
dW50PiBtX25vcm1hbEFsbG9jYXRvcnM7CiAgICAgTWFya2VkQWxsb2NhdG9yIG1fc3RydWN0dXJl
QWxsb2NhdG9yOworICAgIE1hcmtlZEFsbG9jYXRvciBtX2xhcmdlQWxsb2NhdG9yOwogCiAgICAg
SGVhcCogbV9oZWFwOwogICAgIE1hcmtlZEJsb2NrU2V0IG1fYmxvY2tzOwpAQCAtMTU3LDE1ICsx
NDgsMTMgQEAgdGVtcGxhdGU8dHlwZW5hbWUgRnVuY3Rvcj4gaW5saW5lIHR5cGVuYQogCiBpbmxp
bmUgTWFya2VkQWxsb2NhdG9yJiBNYXJrZWRTcGFjZTo6Zmlyc3RBbGxvY2F0b3IoKQogewotICAg
IHJldHVybiBtX25vcm1hbFNwYWNlLnByZWNpc2VBbGxvY2F0b3JzWzBdOworICAgIHJldHVybiBt
X25vcm1hbEFsbG9jYXRvcnNbMF07CiB9CiAKIGlubGluZSBNYXJrZWRBbGxvY2F0b3ImIE1hcmtl
ZFNwYWNlOjphbGxvY2F0b3JGb3Ioc2l6ZV90IGJ5dGVzKQogewotICAgIEFTU0VSVChieXRlcyAm
JiBieXRlcyA8PSBtYXhDZWxsU2l6ZSk7Ci0gICAgaWYgKGJ5dGVzIDw9IHByZWNpc2VDdXRvZmYp
Ci0gICAgICAgIHJldHVybiBtX25vcm1hbFNwYWNlLnByZWNpc2VBbGxvY2F0b3JzWyhieXRlcyAt
IDEpIC8gcHJlY2lzZVN0ZXBdOwotICAgIHJldHVybiBtX25vcm1hbFNwYWNlLmltcHJlY2lzZUFs
bG9jYXRvcnNbKGJ5dGVzIC0gMSkgLyBpbXByZWNpc2VTdGVwXTsKKyAgICBBU1NFUlQoYnl0ZXMg
JiYgYnl0ZXMgPD0gcHJlY2lzZUN1dG9mZik7CisgICAgcmV0dXJuIG1fbm9ybWFsQWxsb2NhdG9y
c1soYnl0ZXMgLSAxKSAvIHByZWNpc2VTdGVwXTsKIH0KIAogaW5saW5lIE1hcmtlZEFsbG9jYXRv
ciYgTWFya2VkU3BhY2U6OmFsbG9jYXRvckZvcihNYXJrZWRCbG9jayogYmxvY2spCkBAIC0xNzMs
NiArMTYyLDkgQEAgaW5saW5lIE1hcmtlZEFsbG9jYXRvciYgTWFya2VkU3BhY2U6OmFsbAogICAg
IGlmIChibG9jay0+b25seUNvbnRhaW5zU3RydWN0dXJlcygpKQogICAgICAgICByZXR1cm4gbV9z
dHJ1Y3R1cmVBbGxvY2F0b3I7CiAKKyAgICBpZiAoYmxvY2stPmlzTGFyZ2UoKSkKKyAgICAgICAg
cmV0dXJuIG1fbGFyZ2VBbGxvY2F0b3I7CisKICAgICBpZiAoYmxvY2stPmNlbGxzTmVlZERlc3Ry
dWN0aW9uKCkpCiAgICAgICAgIHJldHVybiBkZXN0cnVjdG9yQWxsb2NhdG9yRm9yKGJsb2NrLT5j
ZWxsU2l6ZSgpKTsKIApAQCAtMTgxLDIwICsxNzMsMjIgQEAgaW5saW5lIE1hcmtlZEFsbG9jYXRv
ciYgTWFya2VkU3BhY2U6OmFsbAogCiBpbmxpbmUgTWFya2VkQWxsb2NhdG9yJiBNYXJrZWRTcGFj
ZTo6ZGVzdHJ1Y3RvckFsbG9jYXRvckZvcihzaXplX3QgYnl0ZXMpCiB7Ci0gICAgQVNTRVJUKGJ5
dGVzICYmIGJ5dGVzIDw9IG1heENlbGxTaXplKTsKLSAgICBpZiAoYnl0ZXMgPD0gcHJlY2lzZUN1
dG9mZikKLSAgICAgICAgcmV0dXJuIG1fZGVzdHJ1Y3RvclNwYWNlLnByZWNpc2VBbGxvY2F0b3Jz
WyhieXRlcyAtIDEpIC8gcHJlY2lzZVN0ZXBdOwotICAgIHJldHVybiBtX2Rlc3RydWN0b3JTcGFj
ZS5pbXByZWNpc2VBbGxvY2F0b3JzWyhieXRlcyAtIDEpIC8gaW1wcmVjaXNlU3RlcF07CisgICAg
QVNTRVJUKGJ5dGVzICYmIGJ5dGVzIDw9IHByZWNpc2VDdXRvZmYpOworICAgIHJldHVybiBtX2Rl
c3RydWN0b3JBbGxvY2F0b3JzWyhieXRlcyAtIDEpIC8gcHJlY2lzZVN0ZXBdOwogfQogCiBpbmxp
bmUgdm9pZCogTWFya2VkU3BhY2U6OmFsbG9jYXRlV2l0aG91dERlc3RydWN0b3Ioc2l6ZV90IGJ5
dGVzKQogewotICAgIHJldHVybiBhbGxvY2F0b3JGb3IoYnl0ZXMpLmFsbG9jYXRlKCk7CisgICAg
aWYgKGJ5dGVzIDw9IHByZWNpc2VDdXRvZmYpCisgICAgICAgIHJldHVybiBhbGxvY2F0b3JGb3Io
Ynl0ZXMpLmFsbG9jYXRlKCk7CisgICAgcmV0dXJuIG1fbGFyZ2VBbGxvY2F0b3IuYWxsb2NhdGVM
YXJnZShieXRlcyk7CiB9CiAKIGlubGluZSB2b2lkKiBNYXJrZWRTcGFjZTo6YWxsb2NhdGVXaXRo
RGVzdHJ1Y3RvcihzaXplX3QgYnl0ZXMpCiB7Ci0gICAgcmV0dXJuIGRlc3RydWN0b3JBbGxvY2F0
b3JGb3IoYnl0ZXMpLmFsbG9jYXRlKCk7CisgICAgaWYgKGJ5dGVzIDw9IHByZWNpc2VDdXRvZmYp
CisgICAgICAgIHJldHVybiBkZXN0cnVjdG9yQWxsb2NhdG9yRm9yKGJ5dGVzKS5hbGxvY2F0ZSgp
OworICAgIHJldHVybiBtX2xhcmdlQWxsb2NhdG9yLmFsbG9jYXRlTGFyZ2UoYnl0ZXMpOwogfQog
CiBpbmxpbmUgdm9pZCogTWFya2VkU3BhY2U6OmFsbG9jYXRlU3RydWN0dXJlKCkKQEAgLTIwNSwx
NSArMTk5LDExIEBAIGlubGluZSB2b2lkKiBNYXJrZWRTcGFjZTo6YWxsb2NhdGVTdHJ1Y3QKIHRl
bXBsYXRlIDx0eXBlbmFtZSBGdW5jdG9yPiBpbmxpbmUgdHlwZW5hbWUgRnVuY3Rvcjo6UmV0dXJu
VHlwZSBNYXJrZWRTcGFjZTo6Zm9yRWFjaEJsb2NrKEZ1bmN0b3ImIGZ1bmN0b3IpCiB7CiAgICAg
Zm9yIChzaXplX3QgaSA9IDA7IGkgPCBwcmVjaXNlQ291bnQ7ICsraSkgewotICAgICAgICBtX25v
cm1hbFNwYWNlLnByZWNpc2VBbGxvY2F0b3JzW2ldLmZvckVhY2hCbG9jayhmdW5jdG9yKTsKLSAg
ICAgICAgbV9kZXN0cnVjdG9yU3BhY2UucHJlY2lzZUFsbG9jYXRvcnNbaV0uZm9yRWFjaEJsb2Nr
KGZ1bmN0b3IpOwotICAgIH0KLQotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgaW1wcmVjaXNl
Q291bnQ7ICsraSkgewotICAgICAgICBtX25vcm1hbFNwYWNlLmltcHJlY2lzZUFsbG9jYXRvcnNb
aV0uZm9yRWFjaEJsb2NrKGZ1bmN0b3IpOwotICAgICAgICBtX2Rlc3RydWN0b3JTcGFjZS5pbXBy
ZWNpc2VBbGxvY2F0b3JzW2ldLmZvckVhY2hCbG9jayhmdW5jdG9yKTsKKyAgICAgICAgbV9ub3Jt
YWxBbGxvY2F0b3JzW2ldLmZvckVhY2hCbG9jayhmdW5jdG9yKTsKKyAgICAgICAgbV9kZXN0cnVj
dG9yQWxsb2NhdG9yc1tpXS5mb3JFYWNoQmxvY2soZnVuY3Rvcik7CiAgICAgfQogCisgICAgbV9s
YXJnZUFsbG9jYXRvci5mb3JFYWNoQmxvY2soZnVuY3Rvcik7CiAgICAgbV9zdHJ1Y3R1cmVBbGxv
Y2F0b3IuZm9yRWFjaEJsb2NrKGZ1bmN0b3IpOwogCiAgICAgcmV0dXJuIGZ1bmN0b3IucmV0dXJu
VmFsdWUoKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9Mb3dMZXZlbEludGVy
cHJldGVyLmFzbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTG93
TGV2ZWxJbnRlcnByZXRlci5hc20JKHJldmlzaW9uIDEyNzk5MCkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9sbGludC9Mb3dMZXZlbEludGVycHJldGVyLmFzbQkod29ya2luZyBjb3B5KQpAQCAt
MzE3LDggKzMxNyw3IEBAIG1hY3JvIGFsbG9jYXRlQmFzaWNKU09iamVjdChzaXplQ2xhc3NJbmQK
ICAgICAgICAgY29uc3Qgb2Zmc2V0T2ZNeVNpemVDbGFzcyA9CiAgICAgICAgICAgICBKU0dsb2Jh
bERhdGE6OmhlYXAgKwogICAgICAgICAgICAgSGVhcDo6bV9vYmplY3RTcGFjZSArCi0gICAgICAg
ICAgICBNYXJrZWRTcGFjZTo6bV9ub3JtYWxTcGFjZSArCi0gICAgICAgICAgICBNYXJrZWRTcGFj
ZTo6U3Vic3BhY2U6OnByZWNpc2VBbGxvY2F0b3JzICsKKyAgICAgICAgICAgIE1hcmtlZFNwYWNl
OjptX25vcm1hbEFsbG9jYXRvcnMgKwogICAgICAgICAgICAgc2l6ZUNsYXNzSW5kZXggKiBzaXpl
b2YgTWFya2VkQWxsb2NhdG9yCiAgICAgICAgIAogICAgICAgICBjb25zdCBvZmZzZXRPZkZpcnN0
RnJlZUNlbGwgPSAK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>163011</attachid>
            <date>2012-09-09 14:09:47 -0700</date>
            <delta_ts>2012-09-09 15:04:52 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-96214-20120909140924.patch</filename>
            <type>text/plain</type>
            <size>25790</size>
            <attacher name="Geoffrey Garen">ggaren</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTI3OTkwKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDkzIEBA
CisyMDEyLTA5LTA5ICBHZW9mZnJleSBHYXJlbiAgPGdnYXJlbkBhcHBsZS5jb20+CisKKyAgICAg
ICAgQWRkZWQgbGFyZ2UgYWxsb2NhdGlvbiBzdXBwb3J0IHRvIE1hcmtlZFNwYWNlCisgICAgICAg
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD05NjIxNAorCisgICAgICAg
IFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIChDdXJyZW50bHksIHRoZSBv
bmx5IG9iamVjdCB0aGF0IHNlZW1zIHRvIHVzZSB0aGlzIGlzIEpTR2xvYmFsT2JqZWN0LikKKwor
ICAgICAgICAtIEEgTGFyZ2UgYWxsb2NhdGlvbiBjYW4gYmUgbGFyZ2VyIG9yIHNtYWxsZXIgdGhh
biBhIHNpbmdsZSBoZWFwIGJsb2NrLgorICAgICAgICBJZiBpdCdzIHNtYWxsZXIgKGFuZCBpdCBh
bHdheXMgaXMsIGN1cnJlbnRseSksIHRoZSBsYXJnZSBhbGxvY2F0b3Igd2lsbAorICAgICAgICBs
aW5rIHVwIGEgZnJlZSBsaXN0IGFzIHdlIGRvIGZvciBzbWFsbCBhbGxvY2F0aW9ucy4gVXNlIG9m
IHRoZSBsYXJnZSBmcmVlCisgICAgICAgIGxpc3QgcmVxdWlyZXMgYW4gZXh0cmEgdGVzdCB0byB2
ZXJpZnkgdGhhdCB0aGUgYWxsb2NhdGlvbiB3aWxsIGZpdCBpbnRvCisgICAgICAgIHRoZSBjZWxs
LgorCisgICAgICAgIFJhcGlkIGFsbG9jYXRpb24gb2Ygc2ltaWxhci1zaXplZCBvYmplY3RzIGlu
IGxhcmdlIHNwYWNlIGlzIGZhc3QgYW5kCisgICAgICAgIHJlYXNvbmFibHkgbWVtb3J5LWVmZmlj
aWVudC4gUmFwaWQgYWxsb2NhdGlvbiBvZiBvc2NpbGxhdGluZy1zaXplZAorICAgICAgICBvYmpl
Y3RzIGluIGxhcmdlIHNwYWNlIGNhbiBiZSBlaXRoZXIgbWVtb3J5LWluZWZmaWNpZW50LCBzbG93
LCBvciBib3RoLgorCisgICAgICAgIC0gUmVtb3ZlZCBpbXByZWNpc2UgYWxsb2NhdG9ycyBiZWNh
dXNlIHRoZWlyIGpvYiBpcyBiZXR0ZXIgZG9uZSBlaXRoZXIKKyAgICAgICAgYnkgcHJlY2lzZSBh
bGxvY2F0b3JzIG9yIGJ5IHRoZSBsYXJnZSBhbGxvY2F0b3IuIChQcmVjaXNlIHZzIGltcHJlY2lz
ZQorICAgICAgICBpc24ndCByZWFsbHkgbWVhbmluZ2Z1bCBub3cgdGhhdCB3ZSB1c2UgMzItYnl0
ZSBhdG9tcy4pCisKKyAgICAgICAgKiBoZWFwL01hcmtlZEFsbG9jYXRvci5jcHA6CisgICAgICAg
IChKU0M6Ok1hcmtlZEFsbG9jYXRvcjo6dHJ5QWxsb2NhdGVIZWxwZXIpOiBJZiB3ZSBjYW4ndCBm
aXQgYSBsYXJnZSBhbGxvY2F0aW9uLAorICAgICAgICB3ZSBuZWVkIHRvIHphcCB0aGUgZnJlZSBs
aXN0IGluc3RlYWQgb2YgcmVwb3J0aW5nIHRoYXQgd2UndmUgY29uc3VtZWQgaXQuCisgICAgICAg
IENvbnN1bWluZyBhIGZyZWUgbGlzdCBtYXJrcyBhbGwgb2YgaXRzIG9iamVjdHMgYXMgdmFsaWQg
YWxsb2NhdGlvbnMsCisgICAgICAgIHdoaWNoIGlzIG5vdCB0aGUgY2FzZSBpZiB3ZSdyZSB0aHJv
d2luZyBhd2F5IHRoZSBmcmVlIGxpc3QgZWFybHkuCisKKyAgICAgICAgKEpTQzo6TWFya2VkQWxs
b2NhdG9yOjp0cnlBbGxvY2F0ZSk6CisgICAgICAgIChKU0M6Ok1hcmtlZEFsbG9jYXRvcjo6YWxs
b2NhdGVTbG93Q2FzZSk6CisgICAgICAgIChKU0M6Ok1hcmtlZEFsbG9jYXRvcjo6YWxsb2NhdGVC
bG9jayk6CisgICAgICAgIChKU0M6Ok1hcmtlZEFsbG9jYXRvcjo6YWRkQmxvY2spOiBQYXNzIHRo
ZSBhbGxvY2F0aW9uIHNpemUgdGhyb3VnaCwgc2luY2UKKyAgICAgICAgbGFyZ2UgYWxsb2NhdGlv
bnMgY2FuJ3QgaW5mZXIgdGhlIHNpemUgZnJvbSBhIHNpemUgY2xhc3MuCisKKyAgICAgICAgKiBo
ZWFwL01hcmtlZEFsbG9jYXRvci5oOgorICAgICAgICAoSlNDOjpmaXQpOiBUaGVyZSdzIGEgdHJh
ZGUtb2ZmIGhlcmUuIEFsbG9jYXRpbmcgaW50byBhIGNlbGwgdGhhdCdzCisgICAgICAgIG11Y2gg
YmlnZ2VyIHRoYW4gdGhlIGFsbG9jYXRpb24gcmVxdWVzdCB3aWxsIGRlZmluaXRlbHkgd2FzdGUg
c3BhY2UuCisgICAgICAgIEFsbG9jYXRpbmcgYSB3aG9sZSBuZXcgYmxvY2sgd2l0aCBhIHNtYWxs
ZXIgY2VsbCBzaXplIG1heSB3YXN0ZSBzcGFjZSwKKyAgICAgICAgaWYgZnV0dXJlIGFsbG9jYXRp
b25zIGRlY2lkZSB0aGV5IGRvbid0IGZpdCBhbmQgdGhlIGFsbG9jYXRpb24gYmVjb21lcworICAg
ICAgICBhbiBvcnBoYW4uCisKKyAgICAgICAgVGhlIGxpa2VsaWhvb2Qgb2YgdGhlIGxhdHRlciBw
YXRob2xvZ3kgZGVwZW5kcyBvbiBob3cgcGlja3kgd2UgYXJlIGFib3V0CisgICAgICAgIGZpdHRp
bmcgc21hbGwgYWxsb2NhdGlvbnMgaW50byBsYXJnZSBjZWxscy4gSW4gdGhlIHdvcnN0IGNhc2Us
IGlmIHdlIGFyZQorICAgICAgICAxMDAlIHBpY2t5LCBhbnkgb3NjaWxsYXRpbmcgYWxsb2NhdGlv
biBzaXplIHBhdHRlcm4gd2lsbCBhbGxvY2F0ZSA2NEtCCisgICAgICAgIHBlciBhbGxvY2F0aW9u
LgorCisgICAgICAgIEkgaGF2ZSBndWVzc2VkIGF0IGluZmluaXR5IGFzIHRoZSByaWdodCB0cmFk
ZW9mZiBwb2ludCAtLSBpLmUuLCB3ZSBhbHdheXMKKyAgICAgICAgcHJlZmVyIHRvIHVzZSB0aGUg
ZnJlZSBsaXN0IGlmIHdlIGZpdC4gVGhpcyBndWFyYW50ZWVzIHRoYXQgYW55IHBhdHRlcm4KKyAg
ICAgICAgb2YgYWxsb2NhdGlvbiBzaXplcyA8IDY0S0Igd2lsbCBpbnN0YW50bHkgc3RhYmlsaXpl
IGF0IHNvbWUgbW9zdCBjb21tb24KKyAgICAgICAgZGVub21pbmF0b3IgY2VsbCBzaXplLCBhdm9p
ZGluZyB0aGUgd29yc3QgY2FzZSBwYXRob2xvZ3kuCisKKyAgICAgICAgKE1hcmtlZEFsbG9jYXRv
cik6CisgICAgICAgIChKU0M6Ok1hcmtlZEFsbG9jYXRvcjo6TWFya2VkQWxsb2NhdG9yKToKKyAg
ICAgICAgKEpTQzo6TWFya2VkQWxsb2NhdG9yOjppbml0KToKKyAgICAgICAgKEpTQzo6TWFya2Vk
QWxsb2NhdG9yOjphbGxvY2F0ZSk6CisgICAgICAgIChKU0M6Ok1hcmtlZEFsbG9jYXRvcjo6YWxs
b2NhdGVMYXJnZSk6IFBhc3MgdGhyb3VnaCBzaXplIGluZm9ybWF0aW9uLgorCisgICAgICAgIFNv
bWUgbGFyZ2UgYWxsb2NhdGlvbnMgKGN1cnJlbnRseSBhbGwpIHVzZSBibG9ja3Mgb2YgdGhlIHNo
YXJlZCBibG9jaworICAgICAgICBzaXplLiBXaGVuIHRoaXMgaGFwcGVucywgd2UgY2FuIG9wdGlt
aXplIGEgbGl0dGxlIGJpdCBhbmQgdXNlIHRoZQorICAgICAgICBzdGFuZGFyZCBibG9jayByZWN5
Y2xlci4KKworICAgICAgICAqIGhlYXAvTWFya2VkQmxvY2suY3BwOgorICAgICAgICAoSlNDOjpN
YXJrZWRCbG9jazo6Y3JlYXRlKToKKyAgICAgICAgKEpTQzo6TWFya2VkQmxvY2s6Ok1hcmtlZEJs
b2NrKTogTm90ZSB0aGF0IGFuIG92ZXJzaXplZCBibG9jayBjYW4ndCBob2xkCisgICAgICAgIGFu
IG92ZXJzaXplZCBudW1iZXIgb2Ygb2JqZWN0czogd2Ugc3RpbGwgb25seSBoYXZlIGVub3VnaCBt
YXJrIGJpdHMKKyAgICAgICAgdG8gbWFyayBvYmplY3RzIHRoYXQgc3RhcnQgaW4gdGhlIGZpcnN0
IDY0S0Igb2YgdGhlIGJsb2NrLgorCisgICAgICAgICogaGVhcC9NYXJrZWRCbG9jay5oOgorICAg
ICAgICAoSlNDOjpNYXJrZWRCbG9jazo6aXNMYXJnZSk6CisgICAgICAgICogaGVhcC9NYXJrZWRT
cGFjZS5jcHA6CisgICAgICAgIChKU0M6Ok1hcmtlZFNwYWNlOjpNYXJrZWRTcGFjZSk6CisgICAg
ICAgIChKU0M6Ok1hcmtlZFNwYWNlOjpyZXNldEFsbG9jYXRvcnMpOgorICAgICAgICAoSlNDOjpN
YXJrZWRTcGFjZTo6Y2Fub25pY2FsaXplQ2VsbExpdmVuZXNzRGF0YSk6CisgICAgICAgIChKU0M6
Ok1hcmtlZFNwYWNlOjppc1BhZ2VkT3V0KTogU3VwcG9ydCBmb3IgbGFyZ2UgdGhpbmdpZXMuCisK
KyAgICAgICAgKEpTQzo6TWFya2VkU3BhY2U6OmZyZWVCbG9jayk6IFVzZSB0aGUgc3RhbmRhcmQg
cmVjeWNsZXIgaWYgcG9zc2libGUuCisKKyAgICAgICAgKiBoZWFwL01hcmtlZFNwYWNlLmg6Cisg
ICAgICAgIChNYXJrZWRTcGFjZSk6CisgICAgICAgIChKU0M6Ok1hcmtlZFNwYWNlOjpmaXJzdEFs
bG9jYXRvcik6CisgICAgICAgIChKU0M6Ok1hcmtlZFNwYWNlOjphbGxvY2F0b3JGb3IpOgorICAg
ICAgICAoSlNDOjpNYXJrZWRTcGFjZTo6ZGVzdHJ1Y3RvckFsbG9jYXRvckZvcik6CisgICAgICAg
IChKU0M6Ok1hcmtlZFNwYWNlOjphbGxvY2F0ZVdpdGhvdXREZXN0cnVjdG9yKToKKyAgICAgICAg
KEpTQzo6TWFya2VkU3BhY2U6OmFsbG9jYXRlV2l0aERlc3RydWN0b3IpOgorICAgICAgICAoSlND
OjpNYXJrZWRTcGFjZTo6Zm9yRWFjaEJsb2NrKTogUmVtb3ZlZCBpbXByZWNpc2Ugc2l6ZSBjbGFz
c2VzLCBzaW5jZQorICAgICAgICB0aGV5J3JlIG5vdCB1c2VkLgorCisgICAgICAgICogbGxpbnQv
TG93TGV2ZWxJbnRlcnByZXRlci5hc206IFVwZGF0ZWQgZm9yIGltcHJlY2lzZSByZW1vdmFsLgor
CiAyMDEyLTA5LTA5ICBHZW9mZnJleSBHYXJlbiAgPGdnYXJlbkBhcHBsZS5jb20+CiAKICAgICAg
ICAgUm9sbGVkIG91dCA8aHR0cDovL3RyYWMud2Via2l0Lm9yZy9jaGFuZ2VzZXQvMTI3OTM5PiBi
ZWNhdXNlIGl0IGJyb2tlCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENv
cmUudmNwcm9qL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLmRlZgo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUudmNwcm9qL0phdmFTY3JpcHRD
b3JlL0phdmFTY3JpcHRDb3JlLmRlZgkocmV2aXNpb24gMTI3OTkwKQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnZjcHJvai9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0
Q29yZS5kZWYJKHdvcmtpbmcgY29weSkKQEAgLTYzLDcgKzYzLDYgQEAgRVhQT1JUUwogICAgID9h
ZGRTbG93Q2FzZUBJZGVudGlmaWVyQEpTQ0BAQ0E/QVY/JFBhc3NSZWZQdHJAVlN0cmluZ0ltcGxA
V1RGQEBAV1RGQEBQQVZFeGVjU3RhdGVAMkBQQVZTdHJpbmdJbXBsQDRAQFoKICAgICA/YWRkU2xv
d0Nhc2VASWRlbnRpZmllckBKU0NAQENBP0FWPyRQYXNzUmVmUHRyQFZTdHJpbmdJbXBsQFdURkBA
QFdURkBAUEFWSlNHbG9iYWxEYXRhQDJAUEFWU3RyaW5nSW1wbEA0QEBaCiAgICAgP2FkZFN0YXRp
Y0dsb2JhbHNASlNHbG9iYWxPYmplY3RASlNDQEBJQUVYUEFVR2xvYmFsUHJvcGVydHlJbmZvQDEy
QEhAWgotICAgID9hbGxvY2F0ZVNsb3dDYXNlQE1hcmtlZEFsbG9jYXRvckBKU0NAQEFBRVBBWFha
CiAgICAgP2FwcGVuZEBTdHJpbmdCdWlsZGVyQFdURkBAUUFFWFBCRUlAWgogICAgID9hcHBlbmRA
U3RyaW5nQnVpbGRlckBXVEZAQFFBRVhQQl9XSUBaCiAgICAgP2F0dGFjaEBEZWJ1Z2dlckBKU0NA
QFFBRVhQQVZKU0dsb2JhbE9iamVjdEAyQEBaCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aGVhcC9NYXJrZWRBbGxvY2F0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9oZWFwL01hcmtlZEFsbG9jYXRvci5jcHAJKHJldmlzaW9uIDEyNzk5MCkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtlZEFsbG9jYXRvci5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTI3LDkgKzI3LDkgQEAgYm9vbCBNYXJrZWRBbGxvY2F0b3I6OmlzUGFnZWRPdXQoZG91Ymxl
IAogICAgIHJldHVybiBmYWxzZTsKIH0KIAotaW5saW5lIHZvaWQqIE1hcmtlZEFsbG9jYXRvcjo6
dHJ5QWxsb2NhdGVIZWxwZXIoKQoraW5saW5lIHZvaWQqIE1hcmtlZEFsbG9jYXRvcjo6dHJ5QWxs
b2NhdGVIZWxwZXIoc2l6ZV90IGJ5dGVzKQogewotICAgIGlmICghbV9mcmVlTGlzdC5oZWFkKSB7
CisgICAgaWYgKCFtX2ZyZWVMaXN0LmhlYWQgfHwgIWZpdChtX2N1cnJlbnRCbG9jaywgYnl0ZXMp
KSB7CiAgICAgICAgIGlmIChtX29ubHlDb250YWluc1N0cnVjdHVyZXMgJiYgIW1faGVhcC0+aXNT
YWZlVG9Td2VlcFN0cnVjdHVyZXMoKSkgewogICAgICAgICAgICAgaWYgKG1fY3VycmVudEJsb2Nr
KSB7CiAgICAgICAgICAgICAgICAgbV9jdXJyZW50QmxvY2stPmRpZENvbnN1bWVGcmVlTGlzdCgp
OwpAQCAtNDIsMTIgKzQyLDIyIEBAIGlubGluZSB2b2lkKiBNYXJrZWRBbGxvY2F0b3I6OnRyeUFs
bG9jYXQKICAgICAgICAgfQogCiAgICAgICAgIGZvciAoTWFya2VkQmxvY2sqJiBibG9jayA9IG1f
YmxvY2tzVG9Td2VlcDsgYmxvY2s7IGJsb2NrID0gYmxvY2stPm5leHQoKSkgewotICAgICAgICAg
ICAgbV9mcmVlTGlzdCA9IGJsb2NrLT5zd2VlcChNYXJrZWRCbG9jazo6U3dlZXBUb0ZyZWVMaXN0
KTsKLSAgICAgICAgICAgIGlmIChtX2ZyZWVMaXN0LmhlYWQpIHsKLSAgICAgICAgICAgICAgICBt
X2N1cnJlbnRCbG9jayA9IGJsb2NrOwotICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAg
ICAgQVNTRVJUKCFtX2lzTGFyZ2UgfHwgYmxvY2stPmlzTGFyZ2UoKSk7CisgICAgICAgICAgICBN
YXJrZWRCbG9jazo6RnJlZUxpc3QgZnJlZUxpc3QgPSBibG9jay0+c3dlZXAoTWFya2VkQmxvY2s6
OlN3ZWVwVG9GcmVlTGlzdCk7CisgICAgICAgICAgICBpZiAoIWZyZWVMaXN0LmhlYWQpIHsKKyAg
ICAgICAgICAgICAgICBibG9jay0+ZGlkQ29uc3VtZUZyZWVMaXN0KCk7CisgICAgICAgICAgICAg
ICAgY29udGludWU7CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBibG9jay0+ZGlkQ29uc3Vt
ZUZyZWVMaXN0KCk7CisKKyAgICAgICAgICAgIGlmICghZml0KGJsb2NrLCBieXRlcykpIHsKKyAg
ICAgICAgICAgICAgICBBU1NFUlQoYmxvY2stPmlzTGFyZ2UoKSk7CisgICAgICAgICAgICAgICAg
YmxvY2stPnphcEZyZWVMaXN0KGZyZWVMaXN0KTsKKyAgICAgICAgICAgICAgICBjb250aW51ZTsK
KyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgbV9mcmVlTGlzdCA9IGZyZWVMaXN0OworICAg
ICAgICAgICAgbV9jdXJyZW50QmxvY2sgPSBibG9jazsKKyAgICAgICAgICAgIGJyZWFrOwogICAg
ICAgICB9CiAgICAgICAgIAogICAgICAgICBpZiAoIW1fZnJlZUxpc3QuaGVhZCkgewpAQCAtNTYs
NzEgKzY2LDg1IEBAIGlubGluZSB2b2lkKiBNYXJrZWRBbGxvY2F0b3I6OnRyeUFsbG9jYXQKICAg
ICAgICAgfQogICAgIH0KICAgICAKLSAgICBNYXJrZWRCbG9jazo6RnJlZUNlbGwqIGhlYWQgPSBt
X2ZyZWVMaXN0LmhlYWQ7Ci0gICAgbV9mcmVlTGlzdC5oZWFkID0gaGVhZC0+bmV4dDsKLSAgICBB
U1NFUlQoaGVhZCk7Ci0gICAgcmV0dXJuIGhlYWQ7CisgICAgTWFya2VkQmxvY2s6OkZyZWVDZWxs
KiBjZWxsID0gbV9mcmVlTGlzdC5oZWFkOworICAgIEFTU0VSVChjZWxsKTsKKyAgICBtX2ZyZWVM
aXN0LmhlYWQgPSBjZWxsLT5uZXh0OworICAgIHJldHVybiBjZWxsOwogfQotICAgIAotaW5saW5l
IHZvaWQqIE1hcmtlZEFsbG9jYXRvcjo6dHJ5QWxsb2NhdGUoKQorCitpbmxpbmUgdm9pZCogTWFy
a2VkQWxsb2NhdG9yOjp0cnlBbGxvY2F0ZShzaXplX3QgYnl0ZXMpCiB7CiAgICAgQVNTRVJUKCFt
X2hlYXAtPmlzQnVzeSgpKTsKICAgICBtX2hlYXAtPm1fb3BlcmF0aW9uSW5Qcm9ncmVzcyA9IEFs
bG9jYXRpb247Ci0gICAgdm9pZCogcmVzdWx0ID0gdHJ5QWxsb2NhdGVIZWxwZXIoKTsKKyAgICB2
b2lkKiByZXN1bHQgPSB0cnlBbGxvY2F0ZUhlbHBlcihieXRlcyk7CiAgICAgbV9oZWFwLT5tX29w
ZXJhdGlvbkluUHJvZ3Jlc3MgPSBOb09wZXJhdGlvbjsKICAgICByZXR1cm4gcmVzdWx0OwogfQot
ICAgIAotdm9pZCogTWFya2VkQWxsb2NhdG9yOjphbGxvY2F0ZVNsb3dDYXNlKCkKKwordm9pZCog
TWFya2VkQWxsb2NhdG9yOjphbGxvY2F0ZVNsb3dDYXNlKHNpemVfdCBieXRlcykKIHsKICAgICBB
U1NFUlQobV9oZWFwLT5nbG9iYWxEYXRhKCktPmFwaUxvY2soKS5jdXJyZW50VGhyZWFkSXNIb2xk
aW5nTG9jaygpKTsKKyAgICBBU1NFUlQoIW1fZnJlZUxpc3QuaGVhZCB8fCAhZml0KG1fY3VycmVu
dEJsb2NrLCBieXRlcykpOwogI2lmIENPTExFQ1RfT05fRVZFUllfQUxMT0NBVElPTgogICAgIG1f
aGVhcC0+Y29sbGVjdEFsbEdhcmJhZ2UoKTsKICAgICBBU1NFUlQobV9oZWFwLT5tX29wZXJhdGlv
bkluUHJvZ3Jlc3MgPT0gTm9PcGVyYXRpb24pOwogI2VuZGlmCi0gICAgCi0gICAgQVNTRVJUKCFt
X2ZyZWVMaXN0LmhlYWQpOworCiAgICAgbV9oZWFwLT5kaWRBbGxvY2F0ZShtX2ZyZWVMaXN0LmJ5
dGVzKTsKLSAgICAKLSAgICB2b2lkKiByZXN1bHQgPSB0cnlBbGxvY2F0ZSgpOwotICAgIAorCisg
ICAgdm9pZCogcmVzdWx0ID0gdHJ5QWxsb2NhdGUoYnl0ZXMpOwogICAgIGlmIChMSUtFTFkocmVz
dWx0ICE9IDApKQogICAgICAgICByZXR1cm4gcmVzdWx0OwogICAgIAogICAgIGlmIChtX2hlYXAt
PnNob3VsZENvbGxlY3QoKSkgewogICAgICAgICBtX2hlYXAtPmNvbGxlY3QoSGVhcDo6RG9Ob3RT
d2VlcCk7CiAKLSAgICAgICAgcmVzdWx0ID0gdHJ5QWxsb2NhdGUoKTsKKyAgICAgICAgcmVzdWx0
ID0gdHJ5QWxsb2NhdGUoYnl0ZXMpOwogICAgICAgICBpZiAocmVzdWx0KQogICAgICAgICAgICAg
cmV0dXJuIHJlc3VsdDsKICAgICB9CiAKICAgICBBU1NFUlQoIW1faGVhcC0+c2hvdWxkQ29sbGVj
dCgpKTsKLSAgICAKLSAgICBNYXJrZWRCbG9jayogYmxvY2sgPSBhbGxvY2F0ZUJsb2NrKCk7Ci0g
ICAgQVNTRVJUKGJsb2NrKTsKKworICAgIE1hcmtlZEJsb2NrKiBibG9jayA9IGFsbG9jYXRlQmxv
Y2soYnl0ZXMpOwogICAgIGFkZEJsb2NrKGJsb2NrKTsKLSAgICAgICAgCi0gICAgcmVzdWx0ID0g
dHJ5QWxsb2NhdGUoKTsKKyAgICBtX2ZyZWVMaXN0ID0gYmxvY2stPnN3ZWVwKE1hcmtlZEJsb2Nr
OjpTd2VlcFRvRnJlZUxpc3QpOworICAgIG1fY3VycmVudEJsb2NrID0gYmxvY2s7CisKKyAgICBy
ZXN1bHQgPSB0cnlBbGxvY2F0ZShieXRlcyk7CiAgICAgQVNTRVJUKHJlc3VsdCk7CiAgICAgcmV0
dXJuIHJlc3VsdDsKIH0KIAotTWFya2VkQmxvY2sqIE1hcmtlZEFsbG9jYXRvcjo6YWxsb2NhdGVC
bG9jaygpCitNYXJrZWRCbG9jayogTWFya2VkQWxsb2NhdG9yOjphbGxvY2F0ZUJsb2NrKHNpemVf
dCBieXRlcykKIHsKLSAgICBNYXJrZWRCbG9jayogYmxvY2sgPSBNYXJrZWRCbG9jazo6Y3JlYXRl
KG1faGVhcC0+YmxvY2tBbGxvY2F0b3IoKS5hbGxvY2F0ZSgpLCBtX2hlYXAsIG1fY2VsbFNpemUs
IG1fY2VsbHNOZWVkRGVzdHJ1Y3Rpb24sIG1fb25seUNvbnRhaW5zU3RydWN0dXJlcyk7Ci0gICAg
bV9tYXJrZWRTcGFjZS0+ZGlkQWRkQmxvY2soYmxvY2spOwotICAgIHJldHVybiBibG9jazsKKyAg
ICBzaXplX3QgYmxvY2tBbGlnbm1lbnQgPSBNYXJrZWRCbG9jazo6YmxvY2tTaXplOworICAgIHNp
emVfdCBtaW5CbG9ja1NpemUgPSBXVEY6OnJvdW5kVXBUb011bHRpcGxlT2YoV1RGOjpwYWdlU2l6
ZSgpLCBzaXplb2YoTWFya2VkQmxvY2spICsgYnl0ZXMpOworICAgIHNpemVfdCBibG9ja1NpemUg
PSBzdGQ6Om1heChtaW5CbG9ja1NpemUsIGJsb2NrQWxpZ25tZW50KTsgLy8gUGFnZUFsbG9jYXRp
b25BbGlnbmVkIHJlcXVpcmVzIHNpemUgPj0gYWxpZ25tZW50LgorCisgICAgc2l6ZV90IGNlbGxT
aXplID0gV1RGOjpyb3VuZFVwVG9NdWx0aXBsZU9mPE1hcmtlZEJsb2NrOjphdG9tU2l6ZT4oYnl0
ZXMpOworICAgIEFTU0VSVChtX2lzTGFyZ2UgfHwgY2VsbFNpemUgPT0gbV9jZWxsU2l6ZSk7CisK
KyAgICBpZiAoYmxvY2tTaXplID09IE1hcmtlZEJsb2NrOjpibG9ja1NpemUpIHsKKyAgICAgICAg
UGFnZUFsbG9jYXRpb25BbGlnbmVkIGFsbG9jYXRpb24gPSBtX2hlYXAtPmJsb2NrQWxsb2NhdG9y
KCkuYWxsb2NhdGUoKTsKKyAgICAgICAgcmV0dXJuIE1hcmtlZEJsb2NrOjpjcmVhdGUoYWxsb2Nh
dGlvbiwgbV9oZWFwLCBjZWxsU2l6ZSwgbV9jZWxsc05lZWREZXN0cnVjdGlvbiwgbV9vbmx5Q29u
dGFpbnNTdHJ1Y3R1cmVzLCBtX2lzTGFyZ2UpOworICAgIH0KKworICAgIFBhZ2VBbGxvY2F0aW9u
QWxpZ25lZCBhbGxvY2F0aW9uID0gUGFnZUFsbG9jYXRpb25BbGlnbmVkOjphbGxvY2F0ZShibG9j
a1NpemUsIGJsb2NrQWxpZ25tZW50LCBPU0FsbG9jYXRvcjo6SlNHQ0hlYXBQYWdlcyk7CisgICAg
aWYgKCFzdGF0aWNfY2FzdDxib29sPihhbGxvY2F0aW9uKSkKKyAgICAgICAgQ1JBU0goKTsKKyAg
ICByZXR1cm4gTWFya2VkQmxvY2s6OmNyZWF0ZShhbGxvY2F0aW9uLCBtX2hlYXAsIGNlbGxTaXpl
LCBtX2NlbGxzTmVlZERlc3RydWN0aW9uLCBtX29ubHlDb250YWluc1N0cnVjdHVyZXMsIG1faXNM
YXJnZSk7CiB9CiAKIHZvaWQgTWFya2VkQWxsb2NhdG9yOjphZGRCbG9jayhNYXJrZWRCbG9jayog
YmxvY2spCiB7CisgICAgQVNTRVJUKGJsb2NrKTsKICAgICBBU1NFUlQoIW1fY3VycmVudEJsb2Nr
KTsKICAgICBBU1NFUlQoIW1fZnJlZUxpc3QuaGVhZCk7CiAgICAgCiAgICAgbV9ibG9ja0xpc3Qu
YXBwZW5kKGJsb2NrKTsKLSAgICBtX2Jsb2Nrc1RvU3dlZXAgPSBtX2N1cnJlbnRCbG9jayA9IGJs
b2NrOwotICAgIG1fZnJlZUxpc3QgPSBibG9jay0+c3dlZXAoTWFya2VkQmxvY2s6OlN3ZWVwVG9G
cmVlTGlzdCk7CisgICAgbV9ibG9ja3NUb1N3ZWVwID0gYmxvY2s7CisgICAgbV9tYXJrZWRTcGFj
ZS0+ZGlkQWRkQmxvY2soYmxvY2spOwogfQogCiB2b2lkIE1hcmtlZEFsbG9jYXRvcjo6cmVtb3Zl
QmxvY2soTWFya2VkQmxvY2sqIGJsb2NrKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hl
YXAvTWFya2VkQWxsb2NhdG9yLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2hlYXAvTWFya2VkQWxsb2NhdG9yLmgJKHJldmlzaW9uIDEyNzk5MCkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9oZWFwL01hcmtlZEFsbG9jYXRvci5oCSh3b3JraW5nIGNvcHkpCkBAIC0xNCw2
ICsxNCwxMyBAQCBuYW1lc3BhY2UgREZHIHsKIGNsYXNzIFNwZWN1bGF0aXZlSklUOwogfQogCitz
dGF0aWMgaW5saW5lIGJvb2wgZml0KE1hcmtlZEJsb2NrKiBibG9jaywgc2l6ZV90IHNpemUpCit7
CisgICAgaWYgKHNpemUgPiBibG9jay0+Y2VsbFNpemUoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNl
OworICAgIHJldHVybiB0cnVlOworfQorCiBjbGFzcyBNYXJrZWRBbGxvY2F0b3IgewogICAgIGZy
aWVuZCBjbGFzcyBKSVQ7CiAgICAgZnJpZW5kIGNsYXNzIERGRzo6U3BlY3VsYXRpdmVKSVQ7CkBA
IC0yNiwyMyArMzMsMjQgQEAgcHVibGljOgogICAgIGJvb2wgY2VsbHNOZWVkRGVzdHJ1Y3Rpb24o
KSB7IHJldHVybiBtX2NlbGxzTmVlZERlc3RydWN0aW9uOyB9CiAgICAgYm9vbCBvbmx5Q29udGFp
bnNTdHJ1Y3R1cmVzKCkgeyByZXR1cm4gbV9vbmx5Q29udGFpbnNTdHJ1Y3R1cmVzOyB9CiAgICAg
dm9pZCogYWxsb2NhdGUoKTsKKyAgICB2b2lkKiBhbGxvY2F0ZUxhcmdlKHNpemVfdCk7CiAgICAg
SGVhcCogaGVhcCgpIHsgcmV0dXJuIG1faGVhcDsgfQogICAgIAogICAgIHRlbXBsYXRlPHR5cGVu
YW1lIEZ1bmN0b3I+IHZvaWQgZm9yRWFjaEJsb2NrKEZ1bmN0b3ImKTsKICAgICAKICAgICB2b2lk
IGFkZEJsb2NrKE1hcmtlZEJsb2NrKik7CiAgICAgdm9pZCByZW1vdmVCbG9jayhNYXJrZWRCbG9j
ayopOwotICAgIHZvaWQgaW5pdChIZWFwKiwgTWFya2VkU3BhY2UqLCBzaXplX3QgY2VsbFNpemUs
IGJvb2wgY2VsbHNOZWVkRGVzdHJ1Y3Rpb24sIGJvb2wgb25seUNvbnRhaW5zU3RydWN0dXJlcyk7
CisgICAgdm9pZCBpbml0KEhlYXAqLCBNYXJrZWRTcGFjZSosIHNpemVfdCBjZWxsU2l6ZSwgYm9v
bCBjZWxsc05lZWREZXN0cnVjdGlvbiwgYm9vbCBvbmx5Q29udGFpbnNTdHJ1Y3R1cmVzLCBib29s
IGlzTGFyZ2UpOwogCiAgICAgYm9vbCBpc1BhZ2VkT3V0KGRvdWJsZSBkZWFkbGluZSk7CiAgICAK
IHByaXZhdGU6CiAgICAgZnJpZW5kIGNsYXNzIExMSW50T2Zmc2V0c0V4dHJhY3RvcjsKICAgICAK
LSAgICBKU19FWFBPUlRfUFJJVkFURSB2b2lkKiBhbGxvY2F0ZVNsb3dDYXNlKCk7Ci0gICAgdm9p
ZCogdHJ5QWxsb2NhdGUoKTsKLSAgICB2b2lkKiB0cnlBbGxvY2F0ZUhlbHBlcigpOwotICAgIE1h
cmtlZEJsb2NrKiBhbGxvY2F0ZUJsb2NrKCk7CisgICAgSlNfRVhQT1JUX1BSSVZBVEUgdm9pZCog
YWxsb2NhdGVTbG93Q2FzZShzaXplX3QpOworICAgIHZvaWQqIHRyeUFsbG9jYXRlKHNpemVfdCk7
CisgICAgdm9pZCogdHJ5QWxsb2NhdGVIZWxwZXIoc2l6ZV90KTsKKyAgICBNYXJrZWRCbG9jayog
YWxsb2NhdGVCbG9jayhzaXplX3QpOwogICAgIAogICAgIE1hcmtlZEJsb2NrOjpGcmVlTGlzdCBt
X2ZyZWVMaXN0OwogICAgIE1hcmtlZEJsb2NrKiBtX2N1cnJlbnRCbG9jazsKQEAgLTUxLDYgKzU5
LDcgQEAgcHJpdmF0ZToKICAgICBzaXplX3QgbV9jZWxsU2l6ZTsKICAgICBib29sIG1fY2VsbHNO
ZWVkRGVzdHJ1Y3Rpb247CiAgICAgYm9vbCBtX29ubHlDb250YWluc1N0cnVjdHVyZXM7CisgICAg
Ym9vbCBtX2lzTGFyZ2U7CiAgICAgSGVhcCogbV9oZWFwOwogICAgIE1hcmtlZFNwYWNlKiBtX21h
cmtlZFNwYWNlOwogfTsKQEAgLTYxLDI3ICs3MCw0MSBAQCBpbmxpbmUgTWFya2VkQWxsb2NhdG9y
OjpNYXJrZWRBbGxvY2F0b3IoCiAgICAgLCBtX2NlbGxTaXplKDApCiAgICAgLCBtX2NlbGxzTmVl
ZERlc3RydWN0aW9uKHRydWUpCiAgICAgLCBtX29ubHlDb250YWluc1N0cnVjdHVyZXMoZmFsc2Up
CisgICAgLCBtX2lzTGFyZ2UoZmFsc2UpCiAgICAgLCBtX2hlYXAoMCkKICAgICAsIG1fbWFya2Vk
U3BhY2UoMCkKIHsKIH0KIAotaW5saW5lIHZvaWQgTWFya2VkQWxsb2NhdG9yOjppbml0KEhlYXAq
IGhlYXAsIE1hcmtlZFNwYWNlKiBtYXJrZWRTcGFjZSwgc2l6ZV90IGNlbGxTaXplLCBib29sIGNl
bGxzTmVlZERlc3RydWN0aW9uLCBib29sIG9ubHlDb250YWluc1N0cnVjdHVyZXMpCitpbmxpbmUg
dm9pZCBNYXJrZWRBbGxvY2F0b3I6OmluaXQoSGVhcCogaGVhcCwgTWFya2VkU3BhY2UqIG1hcmtl
ZFNwYWNlLCBzaXplX3QgY2VsbFNpemUsIGJvb2wgY2VsbHNOZWVkRGVzdHJ1Y3Rpb24sIGJvb2wg
b25seUNvbnRhaW5zU3RydWN0dXJlcywgYm9vbCBpc0xhcmdlKQogewogICAgIG1faGVhcCA9IGhl
YXA7CiAgICAgbV9tYXJrZWRTcGFjZSA9IG1hcmtlZFNwYWNlOwogICAgIG1fY2VsbFNpemUgPSBj
ZWxsU2l6ZTsKICAgICBtX2NlbGxzTmVlZERlc3RydWN0aW9uID0gY2VsbHNOZWVkRGVzdHJ1Y3Rp
b247CiAgICAgbV9vbmx5Q29udGFpbnNTdHJ1Y3R1cmVzID0gb25seUNvbnRhaW5zU3RydWN0dXJl
czsKKyAgICBtX2lzTGFyZ2UgPSBpc0xhcmdlOwogfQogCiBpbmxpbmUgdm9pZCogTWFya2VkQWxs
b2NhdG9yOjphbGxvY2F0ZSgpCiB7CisgICAgQVNTRVJUKCFtX2lzTGFyZ2UpOworICAgIEFTU0VS
VCghbV9jdXJyZW50QmxvY2sgfHwgIW1fY3VycmVudEJsb2NrLT5pc0xhcmdlKCkpOworCiAgICAg
TWFya2VkQmxvY2s6OkZyZWVDZWxsKiBoZWFkID0gbV9mcmVlTGlzdC5oZWFkOwotICAgIC8vIFRo
aXMgaXMgYSBsaWdodC13ZWlnaHQgZmFzdCBwYXRoIHRvIGNvdmVyIHRoZSBtb3N0IGNvbW1vbiBj
YXNlLgogICAgIGlmIChVTkxJS0VMWSghaGVhZCkpCi0gICAgICAgIHJldHVybiBhbGxvY2F0ZVNs
b3dDYXNlKCk7Ci0gICAgCisgICAgICAgIHJldHVybiBhbGxvY2F0ZVNsb3dDYXNlKG1fY2VsbFNp
emUpOworCisgICAgbV9mcmVlTGlzdC5oZWFkID0gaGVhZC0+bmV4dDsKKyAgICByZXR1cm4gaGVh
ZDsKK30KKworaW5saW5lIHZvaWQqIE1hcmtlZEFsbG9jYXRvcjo6YWxsb2NhdGVMYXJnZShzaXpl
X3QgYnl0ZXMpCit7CisgICAgTWFya2VkQmxvY2s6OkZyZWVDZWxsKiBoZWFkID0gbV9mcmVlTGlz
dC5oZWFkOworICAgIGlmICghaGVhZCB8fCAhZml0KG1fY3VycmVudEJsb2NrLCBieXRlcykpCisg
ICAgICAgIHJldHVybiBhbGxvY2F0ZVNsb3dDYXNlKGJ5dGVzKTsKKwogICAgIG1fZnJlZUxpc3Qu
aGVhZCA9IGhlYWQtPm5leHQ7CiAgICAgcmV0dXJuIGhlYWQ7CiB9CkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaGVhcC9NYXJrZWRCbG9jay5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2hlYXAvTWFya2VkQmxvY2suY3BwCShyZXZpc2lvbiAxMjc5OTApCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJrZWRCbG9jay5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTMzLDE3ICszMywxOCBAQAogCiBuYW1lc3BhY2UgSlNDIHsKIAotTWFya2VkQmxvY2sqIE1h
cmtlZEJsb2NrOjpjcmVhdGUoY29uc3QgUGFnZUFsbG9jYXRpb25BbGlnbmVkJiBhbGxvY2F0aW9u
LCBIZWFwKiBoZWFwLCBzaXplX3QgY2VsbFNpemUsIGJvb2wgY2VsbHNOZWVkRGVzdHJ1Y3Rpb24s
IGJvb2wgb25seUNvbnRhaW5zU3RydWN0dXJlcykKK01hcmtlZEJsb2NrKiBNYXJrZWRCbG9jazo6
Y3JlYXRlKGNvbnN0IFBhZ2VBbGxvY2F0aW9uQWxpZ25lZCYgYWxsb2NhdGlvbiwgSGVhcCogaGVh
cCwgc2l6ZV90IGNlbGxTaXplLCBib29sIGNlbGxzTmVlZERlc3RydWN0aW9uLCBib29sIG9ubHlD
b250YWluc1N0cnVjdHVyZXMsIGJvb2wgaXNMYXJnZSkKIHsKLSAgICByZXR1cm4gbmV3IChOb3RO
dWxsLCBhbGxvY2F0aW9uLmJhc2UoKSkgTWFya2VkQmxvY2soYWxsb2NhdGlvbiwgaGVhcCwgY2Vs
bFNpemUsIGNlbGxzTmVlZERlc3RydWN0aW9uLCBvbmx5Q29udGFpbnNTdHJ1Y3R1cmVzKTsKKyAg
ICByZXR1cm4gbmV3IChOb3ROdWxsLCBhbGxvY2F0aW9uLmJhc2UoKSkgTWFya2VkQmxvY2soYWxs
b2NhdGlvbiwgaGVhcCwgY2VsbFNpemUsIGNlbGxzTmVlZERlc3RydWN0aW9uLCBvbmx5Q29udGFp
bnNTdHJ1Y3R1cmVzLCBpc0xhcmdlKTsKIH0KIAotTWFya2VkQmxvY2s6Ok1hcmtlZEJsb2NrKGNv
bnN0IFBhZ2VBbGxvY2F0aW9uQWxpZ25lZCYgYWxsb2NhdGlvbiwgSGVhcCogaGVhcCwgc2l6ZV90
IGNlbGxTaXplLCBib29sIGNlbGxzTmVlZERlc3RydWN0aW9uLCBib29sIG9ubHlDb250YWluc1N0
cnVjdHVyZXMpCitNYXJrZWRCbG9jazo6TWFya2VkQmxvY2soY29uc3QgUGFnZUFsbG9jYXRpb25B
bGlnbmVkJiBhbGxvY2F0aW9uLCBIZWFwKiBoZWFwLCBzaXplX3QgY2VsbFNpemUsIGJvb2wgY2Vs
bHNOZWVkRGVzdHJ1Y3Rpb24sIGJvb2wgb25seUNvbnRhaW5zU3RydWN0dXJlcywgYm9vbCBpc0xh
cmdlKQogICAgIDogSGVhcEJsb2NrPE1hcmtlZEJsb2NrPihhbGxvY2F0aW9uKQogICAgICwgbV9h
dG9tc1BlckNlbGwoKGNlbGxTaXplICsgYXRvbVNpemUgLSAxKSAvIGF0b21TaXplKQogICAgICwg
bV9lbmRBdG9tKGF0b21zUGVyQmxvY2sgLSBtX2F0b21zUGVyQ2VsbCArIDEpCiAgICAgLCBtX2Nl
bGxzTmVlZERlc3RydWN0aW9uKGNlbGxzTmVlZERlc3RydWN0aW9uKQogICAgICwgbV9vbmx5Q29u
dGFpbnNTdHJ1Y3R1cmVzKG9ubHlDb250YWluc1N0cnVjdHVyZXMpCisgICAgLCBtX2lzTGFyZ2Uo
aXNMYXJnZSkKICAgICAsIG1fc3RhdGUoTmV3KSAvLyBBbGwgY2VsbHMgc3RhcnQgb3V0IHVubWFy
a2VkLgogICAgICwgbV93ZWFrU2V0KGhlYXAtPmdsb2JhbERhdGEoKSkKIHsKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtlZEJsb2NrLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya2VkQmxvY2suaAkocmV2aXNpb24gMTI3OTkwKQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya2VkQmxvY2suaAkod29ya2luZyBjb3B5KQpA
QCAtMTEyLDcgKzExMiw3IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICAgICAgUmV0dXJuVHlw
ZSBtX2NvdW50OwogICAgICAgICB9OwogCi0gICAgICAgIHN0YXRpYyBNYXJrZWRCbG9jayogY3Jl
YXRlKGNvbnN0IFBhZ2VBbGxvY2F0aW9uQWxpZ25lZCYsIEhlYXAqLCBzaXplX3QgY2VsbFNpemUs
IGJvb2wgY2VsbHNOZWVkRGVzdHJ1Y3Rpb24sIGJvb2wgb25seUNvbnRhaW5zU3RydWN0dXJlcyk7
CisgICAgICAgIHN0YXRpYyBNYXJrZWRCbG9jayogY3JlYXRlKGNvbnN0IFBhZ2VBbGxvY2F0aW9u
QWxpZ25lZCYsIEhlYXAqLCBzaXplX3QgY2VsbFNpemUsIGJvb2wgY2VsbHNOZWVkRGVzdHJ1Y3Rp
b24sIGJvb2wgb25seUNvbnRhaW5zU3RydWN0dXJlcywgYm9vbCBpc0xhcmdlKTsKIAogICAgICAg
ICBzdGF0aWMgYm9vbCBpc0F0b21BbGlnbmVkKGNvbnN0IHZvaWQqKTsKICAgICAgICAgc3RhdGlj
IE1hcmtlZEJsb2NrKiBibG9ja0Zvcihjb25zdCB2b2lkKik7CkBAIC0xNDgsNiArMTQ4LDcgQEAg
bmFtZXNwYWNlIEpTQyB7CiAKICAgICAgICAgc2l6ZV90IHNpemUoKTsKICAgICAgICAgc2l6ZV90
IGNhcGFjaXR5KCk7CisgICAgICAgIGJvb2wgaXNMYXJnZSgpOwogCiAgICAgICAgIGJvb2wgaXNN
YXJrZWQoY29uc3Qgdm9pZCopOwogICAgICAgICBib29sIHRlc3RBbmRTZXRNYXJrZWQoY29uc3Qg
dm9pZCopOwpAQCAtMTk2LDcgKzE5Nyw3IEBAIG5hbWVzcGFjZSBKU0MgewogCiAgICAgICAgIHR5
cGVkZWYgY2hhciBBdG9tW2F0b21TaXplXTsKIAotICAgICAgICBNYXJrZWRCbG9jayhjb25zdCBQ
YWdlQWxsb2NhdGlvbkFsaWduZWQmLCBIZWFwKiwgc2l6ZV90IGNlbGxTaXplLCBib29sIGNlbGxz
TmVlZERlc3RydWN0aW9uLCBib29sIG9ubHlDb250YWluc1N0cnVjdHVyZXMpOworICAgICAgICBN
YXJrZWRCbG9jayhjb25zdCBQYWdlQWxsb2NhdGlvbkFsaWduZWQmLCBIZWFwKiwgc2l6ZV90IGNl
bGxTaXplLCBib29sIGNlbGxzTmVlZERlc3RydWN0aW9uLCBib29sIG9ubHlDb250YWluc1N0cnVj
dHVyZXMsIGJvb2wgaXNMYXJnZSk7CiAgICAgICAgIEF0b20qIGF0b21zKCk7CiAgICAgICAgIHNp
emVfdCBhdG9tTnVtYmVyKGNvbnN0IHZvaWQqKTsKICAgICAgICAgdm9pZCBjYWxsRGVzdHJ1Y3Rv
cihKU0NlbGwqKTsKQEAgLTIxNSw2ICsyMTYsNyBAQCBuYW1lc3BhY2UgSlNDIHsKICNlbmRpZgog
ICAgICAgICBib29sIG1fY2VsbHNOZWVkRGVzdHJ1Y3Rpb247CiAgICAgICAgIGJvb2wgbV9vbmx5
Q29udGFpbnNTdHJ1Y3R1cmVzOworICAgICAgICBib29sIG1faXNMYXJnZTsKICAgICAgICAgQmxv
Y2tTdGF0ZSBtX3N0YXRlOwogICAgICAgICBXZWFrU2V0IG1fd2Vha1NldDsKICAgICB9OwpAQCAt
MzQ0LDYgKzM0NiwxMSBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgcmV0dXJuIGFsbG9jYXRp
b24oKS5zaXplKCk7CiAgICAgfQogCisgICAgaW5saW5lIGJvb2wgTWFya2VkQmxvY2s6OmlzTGFy
Z2UoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIG1faXNMYXJnZTsKKyAgICB9CisKICAgICBpbmxp
bmUgc2l6ZV90IE1hcmtlZEJsb2NrOjphdG9tTnVtYmVyKGNvbnN0IHZvaWQqIHApCiAgICAgewog
ICAgICAgICByZXR1cm4gKHJlaW50ZXJwcmV0X2Nhc3Q8Qml0cz4ocCkgLSByZWludGVycHJldF9j
YXN0PEJpdHM+KHRoaXMpKSAvIGF0b21TaXplOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2hlYXAvTWFya2VkU3BhY2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9oZWFwL01hcmtlZFNwYWNlLmNwcAkocmV2aXNpb24gMTI3OTkwKQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2hlYXAvTWFya2VkU3BhY2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04MSwxNiAr
ODEsMTUgQEAgTWFya2VkU3BhY2U6Ok1hcmtlZFNwYWNlKEhlYXAqIGhlYXApCiAgICAgOiBtX2hl
YXAoaGVhcCkKIHsKICAgICBmb3IgKHNpemVfdCBjZWxsU2l6ZSA9IHByZWNpc2VTdGVwOyBjZWxs
U2l6ZSA8PSBwcmVjaXNlQ3V0b2ZmOyBjZWxsU2l6ZSArPSBwcmVjaXNlU3RlcCkgewotICAgICAg
ICBhbGxvY2F0b3JGb3IoY2VsbFNpemUpLmluaXQoaGVhcCwgdGhpcywgY2VsbFNpemUsIGZhbHNl
LCBmYWxzZSk7Ci0gICAgICAgIGRlc3RydWN0b3JBbGxvY2F0b3JGb3IoY2VsbFNpemUpLmluaXQo
aGVhcCwgdGhpcywgY2VsbFNpemUsIHRydWUsIGZhbHNlKTsKKyAgICAgICAgYWxsb2NhdG9yRm9y
KGNlbGxTaXplKS5pbml0KGhlYXAsIHRoaXMsIGNlbGxTaXplLCBmYWxzZSwgZmFsc2UsIGZhbHNl
KTsKKyAgICAgICAgZGVzdHJ1Y3RvckFsbG9jYXRvckZvcihjZWxsU2l6ZSkuaW5pdChoZWFwLCB0
aGlzLCBjZWxsU2l6ZSwgdHJ1ZSwgZmFsc2UsIGZhbHNlKTsKICAgICB9CiAKLSAgICBmb3IgKHNp
emVfdCBjZWxsU2l6ZSA9IGltcHJlY2lzZVN0ZXA7IGNlbGxTaXplIDw9IGltcHJlY2lzZUN1dG9m
ZjsgY2VsbFNpemUgKz0gaW1wcmVjaXNlU3RlcCkgewotICAgICAgICBhbGxvY2F0b3JGb3IoY2Vs
bFNpemUpLmluaXQoaGVhcCwgdGhpcywgY2VsbFNpemUsIGZhbHNlLCBmYWxzZSk7Ci0gICAgICAg
IGRlc3RydWN0b3JBbGxvY2F0b3JGb3IoY2VsbFNpemUpLmluaXQoaGVhcCwgdGhpcywgY2VsbFNp
emUsIHRydWUsIGZhbHNlKTsKLSAgICB9CisgICAgLy8gQWxsIGxhcmdlIGFsbG9jYXRpb25zIGdl
dCBkZXN0cnVjdG9ycy4gVGhpcyBtYXhpbWl6ZXMgb3VyIGNoYW5jZXMgb2YgVk0KKyAgICAvLyBy
ZXVzZSBhbmQgc2ltcGxpZmllcyBhbGxvY2F0aW9uIGxvZ2ljLgorICAgIG1fbGFyZ2VBbGxvY2F0
b3IuaW5pdChoZWFwLCB0aGlzLCAwLCB0cnVlLCBmYWxzZSwgdHJ1ZSk7CiAKLSAgICBtX3N0cnVj
dHVyZUFsbG9jYXRvci5pbml0KGhlYXAsIHRoaXMsIFdURjo6cm91bmRVcFRvTXVsdGlwbGVPZigz
Miwgc2l6ZW9mKFN0cnVjdHVyZSkpLCB0cnVlLCB0cnVlKTsKKyAgICBtX3N0cnVjdHVyZUFsbG9j
YXRvci5pbml0KGhlYXAsIHRoaXMsIFdURjo6cm91bmRVcFRvTXVsdGlwbGVPZigzMiwgc2l6ZW9m
KFN0cnVjdHVyZSkpLCB0cnVlLCB0cnVlLCBmYWxzZSk7CiB9CiAKIE1hcmtlZFNwYWNlOjp+TWFy
a2VkU3BhY2UoKQpAQCAtMTIyLDExICsxMjEsNyBAQCB2b2lkIE1hcmtlZFNwYWNlOjpyZXNldEFs
bG9jYXRvcnMoKQogICAgICAgICBkZXN0cnVjdG9yQWxsb2NhdG9yRm9yKGNlbGxTaXplKS5yZXNl
dCgpOwogICAgIH0KIAotICAgIGZvciAoc2l6ZV90IGNlbGxTaXplID0gaW1wcmVjaXNlU3RlcDsg
Y2VsbFNpemUgPD0gaW1wcmVjaXNlQ3V0b2ZmOyBjZWxsU2l6ZSArPSBpbXByZWNpc2VTdGVwKSB7
Ci0gICAgICAgIGFsbG9jYXRvckZvcihjZWxsU2l6ZSkucmVzZXQoKTsKLSAgICAgICAgZGVzdHJ1
Y3RvckFsbG9jYXRvckZvcihjZWxsU2l6ZSkucmVzZXQoKTsKLSAgICB9Ci0KKyAgICBtX2xhcmdl
QWxsb2NhdG9yLnJlc2V0KCk7CiAgICAgbV9zdHJ1Y3R1cmVBbGxvY2F0b3IucmVzZXQoKTsKIH0K
IApAQCAtMTQ4LDExICsxNDMsNyBAQCB2b2lkIE1hcmtlZFNwYWNlOjpjYW5vbmljYWxpemVDZWxs
TGl2ZW5lCiAgICAgICAgIGRlc3RydWN0b3JBbGxvY2F0b3JGb3IoY2VsbFNpemUpLnphcEZyZWVM
aXN0KCk7CiAgICAgfQogCi0gICAgZm9yIChzaXplX3QgY2VsbFNpemUgPSBpbXByZWNpc2VTdGVw
OyBjZWxsU2l6ZSA8PSBpbXByZWNpc2VDdXRvZmY7IGNlbGxTaXplICs9IGltcHJlY2lzZVN0ZXAp
IHsKLSAgICAgICAgYWxsb2NhdG9yRm9yKGNlbGxTaXplKS56YXBGcmVlTGlzdCgpOwotICAgICAg
ICBkZXN0cnVjdG9yQWxsb2NhdG9yRm9yKGNlbGxTaXplKS56YXBGcmVlTGlzdCgpOwotICAgIH0K
LQorICAgIG1fbGFyZ2VBbGxvY2F0b3IuemFwRnJlZUxpc3QoKTsKICAgICBtX3N0cnVjdHVyZUFs
bG9jYXRvci56YXBGcmVlTGlzdCgpOwogfQogCkBAIC0xNjMsMTAgKzE1NCw4IEBAIGJvb2wgTWFy
a2VkU3BhY2U6OmlzUGFnZWRPdXQoZG91YmxlIGRlYWQKICAgICAgICAgICAgIHJldHVybiB0cnVl
OwogICAgIH0KIAotICAgIGZvciAoc2l6ZV90IGNlbGxTaXplID0gaW1wcmVjaXNlU3RlcDsgY2Vs
bFNpemUgPD0gaW1wcmVjaXNlQ3V0b2ZmOyBjZWxsU2l6ZSArPSBpbXByZWNpc2VTdGVwKSB7Ci0g
ICAgICAgIGlmIChhbGxvY2F0b3JGb3IoY2VsbFNpemUpLmlzUGFnZWRPdXQoZGVhZGxpbmUpIHx8
IGRlc3RydWN0b3JBbGxvY2F0b3JGb3IoY2VsbFNpemUpLmlzUGFnZWRPdXQoZGVhZGxpbmUpKQot
ICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQorICAgIGlmIChtX2xhcmdlQWxsb2NhdG9y
LmlzUGFnZWRPdXQoZGVhZGxpbmUpKQorICAgICAgICByZXR1cm4gdHJ1ZTsKIAogICAgIGlmICht
X3N0cnVjdHVyZUFsbG9jYXRvci5pc1BhZ2VkT3V0KGRlYWRsaW5lKSkKICAgICAgICAgcmV0dXJu
IHRydWU7CkBAIC0xNzgsNyArMTY3LDEzIEBAIHZvaWQgTWFya2VkU3BhY2U6OmZyZWVCbG9jayhN
YXJrZWRCbG9jayoKIHsKICAgICBhbGxvY2F0b3JGb3IoYmxvY2spLnJlbW92ZUJsb2NrKGJsb2Nr
KTsKICAgICBtX2Jsb2Nrcy5yZW1vdmUoYmxvY2spOwotICAgIG1faGVhcC0+YmxvY2tBbGxvY2F0
b3IoKS5kZWFsbG9jYXRlKE1hcmtlZEJsb2NrOjpkZXN0cm95KGJsb2NrKSk7CisgICAgaWYgKGJs
b2NrLT5jYXBhY2l0eSgpID09IE1hcmtlZEJsb2NrOjpibG9ja1NpemUpIHsKKyAgICAgICAgbV9o
ZWFwLT5ibG9ja0FsbG9jYXRvcigpLmRlYWxsb2NhdGUoTWFya2VkQmxvY2s6OmRlc3Ryb3koYmxv
Y2spKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIEFTU0VSVChibG9jay0+aXNMYXJn
ZSgpKTsKKyAgICBNYXJrZWRCbG9jazo6ZGVzdHJveShibG9jaykuZGVhbGxvY2F0ZSgpOwogfQog
CiB2b2lkIE1hcmtlZFNwYWNlOjpmcmVlT3JTaHJpbmtCbG9jayhNYXJrZWRCbG9jayogYmxvY2sp
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJrZWRTcGFjZS5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtlZFNwYWNlLmgJKHJldmlzaW9u
IDEyNzk5MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtlZFNwYWNlLmgJKHdv
cmtpbmcgY29weSkKQEAgLTExNSwyNSArMTE1LDE2IEBAIHB1YmxpYzoKIAogcHJpdmF0ZToKICAg
ICBmcmllbmQgY2xhc3MgTExJbnRPZmZzZXRzRXh0cmFjdG9yOwotICAgIAorCiAgICAgLy8gWyAz
Mi4uLiAyNTYgXQogICAgIHN0YXRpYyBjb25zdCBzaXplX3QgcHJlY2lzZVN0ZXAgPSBNYXJrZWRC
bG9jazo6YXRvbVNpemU7CiAgICAgc3RhdGljIGNvbnN0IHNpemVfdCBwcmVjaXNlQ3V0b2ZmID0g
MjU2OwogICAgIHN0YXRpYyBjb25zdCBzaXplX3QgcHJlY2lzZUNvdW50ID0gcHJlY2lzZUN1dG9m
ZiAvIHByZWNpc2VTdGVwOwogCi0gICAgLy8gWyA1MTIuLi4gMjA0OCBdCi0gICAgc3RhdGljIGNv
bnN0IHNpemVfdCBpbXByZWNpc2VTdGVwID0gcHJlY2lzZUN1dG9mZjsKLSAgICBzdGF0aWMgY29u
c3Qgc2l6ZV90IGltcHJlY2lzZUN1dG9mZiA9IG1heENlbGxTaXplOwotICAgIHN0YXRpYyBjb25z
dCBzaXplX3QgaW1wcmVjaXNlQ291bnQgPSBpbXByZWNpc2VDdXRvZmYgLyBpbXByZWNpc2VTdGVw
OwotCi0gICAgc3RydWN0IFN1YnNwYWNlIHsKLSAgICAgICAgRml4ZWRBcnJheTxNYXJrZWRBbGxv
Y2F0b3IsIHByZWNpc2VDb3VudD4gcHJlY2lzZUFsbG9jYXRvcnM7Ci0gICAgICAgIEZpeGVkQXJy
YXk8TWFya2VkQWxsb2NhdG9yLCBpbXByZWNpc2VDb3VudD4gaW1wcmVjaXNlQWxsb2NhdG9yczsK
LSAgICB9OwotCi0gICAgU3Vic3BhY2UgbV9kZXN0cnVjdG9yU3BhY2U7Ci0gICAgU3Vic3BhY2Ug
bV9ub3JtYWxTcGFjZTsKKyAgICBGaXhlZEFycmF5PE1hcmtlZEFsbG9jYXRvciwgcHJlY2lzZUNv
dW50PiBtX2Rlc3RydWN0b3JBbGxvY2F0b3JzOworICAgIEZpeGVkQXJyYXk8TWFya2VkQWxsb2Nh
dG9yLCBwcmVjaXNlQ291bnQ+IG1fbm9ybWFsQWxsb2NhdG9yczsKICAgICBNYXJrZWRBbGxvY2F0
b3IgbV9zdHJ1Y3R1cmVBbGxvY2F0b3I7CisgICAgTWFya2VkQWxsb2NhdG9yIG1fbGFyZ2VBbGxv
Y2F0b3I7CiAKICAgICBIZWFwKiBtX2hlYXA7CiAgICAgTWFya2VkQmxvY2tTZXQgbV9ibG9ja3M7
CkBAIC0xNTcsMTUgKzE0OCwxMyBAQCB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jdG9yPiBpbmxpbmUg
dHlwZW5hCiAKIGlubGluZSBNYXJrZWRBbGxvY2F0b3ImIE1hcmtlZFNwYWNlOjpmaXJzdEFsbG9j
YXRvcigpCiB7Ci0gICAgcmV0dXJuIG1fbm9ybWFsU3BhY2UucHJlY2lzZUFsbG9jYXRvcnNbMF07
CisgICAgcmV0dXJuIG1fbm9ybWFsQWxsb2NhdG9yc1swXTsKIH0KIAogaW5saW5lIE1hcmtlZEFs
bG9jYXRvciYgTWFya2VkU3BhY2U6OmFsbG9jYXRvckZvcihzaXplX3QgYnl0ZXMpCiB7Ci0gICAg
QVNTRVJUKGJ5dGVzICYmIGJ5dGVzIDw9IG1heENlbGxTaXplKTsKLSAgICBpZiAoYnl0ZXMgPD0g
cHJlY2lzZUN1dG9mZikKLSAgICAgICAgcmV0dXJuIG1fbm9ybWFsU3BhY2UucHJlY2lzZUFsbG9j
YXRvcnNbKGJ5dGVzIC0gMSkgLyBwcmVjaXNlU3RlcF07Ci0gICAgcmV0dXJuIG1fbm9ybWFsU3Bh
Y2UuaW1wcmVjaXNlQWxsb2NhdG9yc1soYnl0ZXMgLSAxKSAvIGltcHJlY2lzZVN0ZXBdOworICAg
IEFTU0VSVChieXRlcyAmJiBieXRlcyA8PSBwcmVjaXNlQ3V0b2ZmKTsKKyAgICByZXR1cm4gbV9u
b3JtYWxBbGxvY2F0b3JzWyhieXRlcyAtIDEpIC8gcHJlY2lzZVN0ZXBdOwogfQogCiBpbmxpbmUg
TWFya2VkQWxsb2NhdG9yJiBNYXJrZWRTcGFjZTo6YWxsb2NhdG9yRm9yKE1hcmtlZEJsb2NrKiBi
bG9jaykKQEAgLTE3Myw2ICsxNjIsOSBAQCBpbmxpbmUgTWFya2VkQWxsb2NhdG9yJiBNYXJrZWRT
cGFjZTo6YWxsCiAgICAgaWYgKGJsb2NrLT5vbmx5Q29udGFpbnNTdHJ1Y3R1cmVzKCkpCiAgICAg
ICAgIHJldHVybiBtX3N0cnVjdHVyZUFsbG9jYXRvcjsKIAorICAgIGlmIChibG9jay0+aXNMYXJn
ZSgpKQorICAgICAgICByZXR1cm4gbV9sYXJnZUFsbG9jYXRvcjsKKwogICAgIGlmIChibG9jay0+
Y2VsbHNOZWVkRGVzdHJ1Y3Rpb24oKSkKICAgICAgICAgcmV0dXJuIGRlc3RydWN0b3JBbGxvY2F0
b3JGb3IoYmxvY2stPmNlbGxTaXplKCkpOwogCkBAIC0xODEsMjAgKzE3MywyMiBAQCBpbmxpbmUg
TWFya2VkQWxsb2NhdG9yJiBNYXJrZWRTcGFjZTo6YWxsCiAKIGlubGluZSBNYXJrZWRBbGxvY2F0
b3ImIE1hcmtlZFNwYWNlOjpkZXN0cnVjdG9yQWxsb2NhdG9yRm9yKHNpemVfdCBieXRlcykKIHsK
LSAgICBBU1NFUlQoYnl0ZXMgJiYgYnl0ZXMgPD0gbWF4Q2VsbFNpemUpOwotICAgIGlmIChieXRl
cyA8PSBwcmVjaXNlQ3V0b2ZmKQotICAgICAgICByZXR1cm4gbV9kZXN0cnVjdG9yU3BhY2UucHJl
Y2lzZUFsbG9jYXRvcnNbKGJ5dGVzIC0gMSkgLyBwcmVjaXNlU3RlcF07Ci0gICAgcmV0dXJuIG1f
ZGVzdHJ1Y3RvclNwYWNlLmltcHJlY2lzZUFsbG9jYXRvcnNbKGJ5dGVzIC0gMSkgLyBpbXByZWNp
c2VTdGVwXTsKKyAgICBBU1NFUlQoYnl0ZXMgJiYgYnl0ZXMgPD0gcHJlY2lzZUN1dG9mZik7Cisg
ICAgcmV0dXJuIG1fZGVzdHJ1Y3RvckFsbG9jYXRvcnNbKGJ5dGVzIC0gMSkgLyBwcmVjaXNlU3Rl
cF07CiB9CiAKIGlubGluZSB2b2lkKiBNYXJrZWRTcGFjZTo6YWxsb2NhdGVXaXRob3V0RGVzdHJ1
Y3RvcihzaXplX3QgYnl0ZXMpCiB7Ci0gICAgcmV0dXJuIGFsbG9jYXRvckZvcihieXRlcykuYWxs
b2NhdGUoKTsKKyAgICBpZiAoYnl0ZXMgPD0gcHJlY2lzZUN1dG9mZikKKyAgICAgICAgcmV0dXJu
IGFsbG9jYXRvckZvcihieXRlcykuYWxsb2NhdGUoKTsKKyAgICByZXR1cm4gbV9sYXJnZUFsbG9j
YXRvci5hbGxvY2F0ZUxhcmdlKGJ5dGVzKTsKIH0KIAogaW5saW5lIHZvaWQqIE1hcmtlZFNwYWNl
OjphbGxvY2F0ZVdpdGhEZXN0cnVjdG9yKHNpemVfdCBieXRlcykKIHsKLSAgICByZXR1cm4gZGVz
dHJ1Y3RvckFsbG9jYXRvckZvcihieXRlcykuYWxsb2NhdGUoKTsKKyAgICBpZiAoYnl0ZXMgPD0g
cHJlY2lzZUN1dG9mZikKKyAgICAgICAgcmV0dXJuIGRlc3RydWN0b3JBbGxvY2F0b3JGb3IoYnl0
ZXMpLmFsbG9jYXRlKCk7CisgICAgcmV0dXJuIG1fbGFyZ2VBbGxvY2F0b3IuYWxsb2NhdGVMYXJn
ZShieXRlcyk7CiB9CiAKIGlubGluZSB2b2lkKiBNYXJrZWRTcGFjZTo6YWxsb2NhdGVTdHJ1Y3R1
cmUoKQpAQCAtMjA1LDE1ICsxOTksMTEgQEAgaW5saW5lIHZvaWQqIE1hcmtlZFNwYWNlOjphbGxv
Y2F0ZVN0cnVjdAogdGVtcGxhdGUgPHR5cGVuYW1lIEZ1bmN0b3I+IGlubGluZSB0eXBlbmFtZSBG
dW5jdG9yOjpSZXR1cm5UeXBlIE1hcmtlZFNwYWNlOjpmb3JFYWNoQmxvY2soRnVuY3RvciYgZnVu
Y3RvcikKIHsKICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHByZWNpc2VDb3VudDsgKytpKSB7
Ci0gICAgICAgIG1fbm9ybWFsU3BhY2UucHJlY2lzZUFsbG9jYXRvcnNbaV0uZm9yRWFjaEJsb2Nr
KGZ1bmN0b3IpOwotICAgICAgICBtX2Rlc3RydWN0b3JTcGFjZS5wcmVjaXNlQWxsb2NhdG9yc1tp
XS5mb3JFYWNoQmxvY2soZnVuY3Rvcik7Ci0gICAgfQotCi0gICAgZm9yIChzaXplX3QgaSA9IDA7
IGkgPCBpbXByZWNpc2VDb3VudDsgKytpKSB7Ci0gICAgICAgIG1fbm9ybWFsU3BhY2UuaW1wcmVj
aXNlQWxsb2NhdG9yc1tpXS5mb3JFYWNoQmxvY2soZnVuY3Rvcik7Ci0gICAgICAgIG1fZGVzdHJ1
Y3RvclNwYWNlLmltcHJlY2lzZUFsbG9jYXRvcnNbaV0uZm9yRWFjaEJsb2NrKGZ1bmN0b3IpOwor
ICAgICAgICBtX25vcm1hbEFsbG9jYXRvcnNbaV0uZm9yRWFjaEJsb2NrKGZ1bmN0b3IpOworICAg
ICAgICBtX2Rlc3RydWN0b3JBbGxvY2F0b3JzW2ldLmZvckVhY2hCbG9jayhmdW5jdG9yKTsKICAg
ICB9CiAKKyAgICBtX2xhcmdlQWxsb2NhdG9yLmZvckVhY2hCbG9jayhmdW5jdG9yKTsKICAgICBt
X3N0cnVjdHVyZUFsbG9jYXRvci5mb3JFYWNoQmxvY2soZnVuY3Rvcik7CiAKICAgICByZXR1cm4g
ZnVuY3Rvci5yZXR1cm5WYWx1ZSgpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50
L0xvd0xldmVsSW50ZXJwcmV0ZXIuYXNtCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9sbGludC9Mb3dMZXZlbEludGVycHJldGVyLmFzbQkocmV2aXNpb24gMTI3OTkwKQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXIuYXNtCSh3b3Jr
aW5nIGNvcHkpCkBAIC0zMTcsOCArMzE3LDcgQEAgbWFjcm8gYWxsb2NhdGVCYXNpY0pTT2JqZWN0
KHNpemVDbGFzc0luZAogICAgICAgICBjb25zdCBvZmZzZXRPZk15U2l6ZUNsYXNzID0KICAgICAg
ICAgICAgIEpTR2xvYmFsRGF0YTo6aGVhcCArCiAgICAgICAgICAgICBIZWFwOjptX29iamVjdFNw
YWNlICsKLSAgICAgICAgICAgIE1hcmtlZFNwYWNlOjptX25vcm1hbFNwYWNlICsKLSAgICAgICAg
ICAgIE1hcmtlZFNwYWNlOjpTdWJzcGFjZTo6cHJlY2lzZUFsbG9jYXRvcnMgKworICAgICAgICAg
ICAgTWFya2VkU3BhY2U6Om1fbm9ybWFsQWxsb2NhdG9ycyArCiAgICAgICAgICAgICBzaXplQ2xh
c3NJbmRleCAqIHNpemVvZiBNYXJrZWRBbGxvY2F0b3IKICAgICAgICAgCiAgICAgICAgIGNvbnN0
IG9mZnNldE9mRmlyc3RGcmVlQ2VsbCA9IAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>163016</attachid>
            <date>2012-09-09 15:04:54 -0700</date>
            <delta_ts>2012-09-10 19:21:12 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-96214-20120909150430.patch</filename>
            <type>text/plain</type>
            <size>25844</size>
            <attacher name="Geoffrey Garen">ggaren</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTI3OTkwKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDkzIEBA
CisyMDEyLTA5LTA5ICBHZW9mZnJleSBHYXJlbiAgPGdnYXJlbkBhcHBsZS5jb20+CisKKyAgICAg
ICAgQWRkZWQgbGFyZ2UgYWxsb2NhdGlvbiBzdXBwb3J0IHRvIE1hcmtlZFNwYWNlCisgICAgICAg
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD05NjIxNAorCisgICAgICAg
IFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIChDdXJyZW50bHksIHRoZSBv
bmx5IG9iamVjdCB0aGF0IHNlZW1zIHRvIHVzZSB0aGlzIGlzIEpTR2xvYmFsT2JqZWN0LikKKwor
ICAgICAgICAtIEEgTGFyZ2UgYWxsb2NhdGlvbiBjYW4gYmUgbGFyZ2VyIG9yIHNtYWxsZXIgdGhh
biBhIHNpbmdsZSBoZWFwIGJsb2NrLgorICAgICAgICBJZiBpdCdzIHNtYWxsZXIgKGFuZCBpdCBh
bHdheXMgaXMsIGN1cnJlbnRseSksIHRoZSBsYXJnZSBhbGxvY2F0b3Igd2lsbAorICAgICAgICBs
aW5rIHVwIGEgZnJlZSBsaXN0IGFzIHdlIGRvIGZvciBzbWFsbCBhbGxvY2F0aW9ucy4gVXNlIG9m
IHRoZSBsYXJnZSBmcmVlCisgICAgICAgIGxpc3QgcmVxdWlyZXMgYW4gZXh0cmEgdGVzdCB0byB2
ZXJpZnkgdGhhdCB0aGUgYWxsb2NhdGlvbiB3aWxsIGZpdCBpbnRvCisgICAgICAgIHRoZSBjZWxs
LgorCisgICAgICAgIFJhcGlkIGFsbG9jYXRpb24gb2Ygc2ltaWxhci1zaXplZCBvYmplY3RzIGlu
IGxhcmdlIHNwYWNlIGlzIGZhc3QgYW5kCisgICAgICAgIHJlYXNvbmFibHkgbWVtb3J5LWVmZmlj
aWVudC4gUmFwaWQgYWxsb2NhdGlvbiBvZiBvc2NpbGxhdGluZy1zaXplZAorICAgICAgICBvYmpl
Y3RzIGluIGxhcmdlIHNwYWNlIGNhbiBiZSBlaXRoZXIgbWVtb3J5LWluZWZmaWNpZW50LCBzbG93
LCBvciBib3RoLgorCisgICAgICAgIC0gUmVtb3ZlZCBpbXByZWNpc2UgYWxsb2NhdG9ycyBiZWNh
dXNlIHRoZWlyIGpvYiBpcyBiZXR0ZXIgZG9uZSBlaXRoZXIKKyAgICAgICAgYnkgcHJlY2lzZSBh
bGxvY2F0b3JzIG9yIGJ5IHRoZSBsYXJnZSBhbGxvY2F0b3IuIChQcmVjaXNlIHZzIGltcHJlY2lz
ZQorICAgICAgICBpc24ndCByZWFsbHkgbWVhbmluZ2Z1bCBub3cgdGhhdCB3ZSB1c2UgMzItYnl0
ZSBhdG9tcy4pCisKKyAgICAgICAgKiBoZWFwL01hcmtlZEFsbG9jYXRvci5jcHA6CisgICAgICAg
IChKU0M6Ok1hcmtlZEFsbG9jYXRvcjo6dHJ5QWxsb2NhdGVIZWxwZXIpOiBJZiB3ZSBjYW4ndCBm
aXQgYSBsYXJnZSBhbGxvY2F0aW9uLAorICAgICAgICB3ZSBuZWVkIHRvIHphcCB0aGUgZnJlZSBs
aXN0IGluc3RlYWQgb2YgcmVwb3J0aW5nIHRoYXQgd2UndmUgY29uc3VtZWQgaXQuCisgICAgICAg
IENvbnN1bWluZyBhIGZyZWUgbGlzdCBtYXJrcyBhbGwgb2YgaXRzIG9iamVjdHMgYXMgdmFsaWQg
YWxsb2NhdGlvbnMsCisgICAgICAgIHdoaWNoIGlzIG5vdCB0aGUgY2FzZSBpZiB3ZSdyZSB0aHJv
d2luZyBhd2F5IHRoZSBmcmVlIGxpc3QgZWFybHkuCisKKyAgICAgICAgKEpTQzo6TWFya2VkQWxs
b2NhdG9yOjp0cnlBbGxvY2F0ZSk6CisgICAgICAgIChKU0M6Ok1hcmtlZEFsbG9jYXRvcjo6YWxs
b2NhdGVTbG93Q2FzZSk6CisgICAgICAgIChKU0M6Ok1hcmtlZEFsbG9jYXRvcjo6YWxsb2NhdGVC
bG9jayk6CisgICAgICAgIChKU0M6Ok1hcmtlZEFsbG9jYXRvcjo6YWRkQmxvY2spOiBQYXNzIHRo
ZSBhbGxvY2F0aW9uIHNpemUgdGhyb3VnaCwgc2luY2UKKyAgICAgICAgbGFyZ2UgYWxsb2NhdGlv
bnMgY2FuJ3QgaW5mZXIgdGhlIHNpemUgZnJvbSBhIHNpemUgY2xhc3MuCisKKyAgICAgICAgKiBo
ZWFwL01hcmtlZEFsbG9jYXRvci5oOgorICAgICAgICAoSlNDOjpmaXQpOiBUaGVyZSdzIGEgdHJh
ZGUtb2ZmIGhlcmUuIEFsbG9jYXRpbmcgaW50byBhIGNlbGwgdGhhdCdzCisgICAgICAgIG11Y2gg
YmlnZ2VyIHRoYW4gdGhlIGFsbG9jYXRpb24gcmVxdWVzdCB3aWxsIGRlZmluaXRlbHkgd2FzdGUg
c3BhY2UuCisgICAgICAgIEFsbG9jYXRpbmcgYSB3aG9sZSBuZXcgYmxvY2sgd2l0aCBhIHNtYWxs
ZXIgY2VsbCBzaXplIG1heSB3YXN0ZSBzcGFjZSwKKyAgICAgICAgaWYgZnV0dXJlIGFsbG9jYXRp
b25zIGRlY2lkZSB0aGV5IGRvbid0IGZpdCBhbmQgdGhlIGFsbG9jYXRpb24gYmVjb21lcworICAg
ICAgICBhbiBvcnBoYW4uCisKKyAgICAgICAgVGhlIGxpa2VsaWhvb2Qgb2YgdGhlIGxhdHRlciBw
YXRob2xvZ3kgZGVwZW5kcyBvbiBob3cgcGlja3kgd2UgYXJlIGFib3V0CisgICAgICAgIGZpdHRp
bmcgc21hbGwgYWxsb2NhdGlvbnMgaW50byBsYXJnZSBjZWxscy4gSW4gdGhlIHdvcnN0IGNhc2Us
IGlmIHdlIGFyZQorICAgICAgICAxMDAlIHBpY2t5LCBhbnkgb3NjaWxsYXRpbmcgYWxsb2NhdGlv
biBzaXplIHBhdHRlcm4gd2lsbCBhbGxvY2F0ZSA2NEtCCisgICAgICAgIHBlciBhbGxvY2F0aW9u
LgorCisgICAgICAgIEkgaGF2ZSBndWVzc2VkIGF0IGluZmluaXR5IGFzIHRoZSByaWdodCB0cmFk
ZW9mZiBwb2ludCAtLSBpLmUuLCB3ZSBhbHdheXMKKyAgICAgICAgcHJlZmVyIHRvIHVzZSB0aGUg
ZnJlZSBsaXN0IGlmIHdlIGZpdC4gVGhpcyBndWFyYW50ZWVzIHRoYXQgYW55IHBhdHRlcm4KKyAg
ICAgICAgb2YgYWxsb2NhdGlvbiBzaXplcyA8IDY0S0Igd2lsbCBpbnN0YW50bHkgc3RhYmlsaXpl
IGF0IHNvbWUgbW9zdCBjb21tb24KKyAgICAgICAgZGVub21pbmF0b3IgY2VsbCBzaXplLCBhdm9p
ZGluZyB0aGUgd29yc3QgY2FzZSBwYXRob2xvZ3kuCisKKyAgICAgICAgKE1hcmtlZEFsbG9jYXRv
cik6CisgICAgICAgIChKU0M6Ok1hcmtlZEFsbG9jYXRvcjo6TWFya2VkQWxsb2NhdG9yKToKKyAg
ICAgICAgKEpTQzo6TWFya2VkQWxsb2NhdG9yOjppbml0KToKKyAgICAgICAgKEpTQzo6TWFya2Vk
QWxsb2NhdG9yOjphbGxvY2F0ZSk6CisgICAgICAgIChKU0M6Ok1hcmtlZEFsbG9jYXRvcjo6YWxs
b2NhdGVMYXJnZSk6IFBhc3MgdGhyb3VnaCBzaXplIGluZm9ybWF0aW9uLgorCisgICAgICAgIFNv
bWUgbGFyZ2UgYWxsb2NhdGlvbnMgKGN1cnJlbnRseSBhbGwpIHVzZSBibG9ja3Mgb2YgdGhlIHNo
YXJlZCBibG9jaworICAgICAgICBzaXplLiBXaGVuIHRoaXMgaGFwcGVucywgd2UgY2FuIG9wdGlt
aXplIGEgbGl0dGxlIGJpdCBhbmQgdXNlIHRoZQorICAgICAgICBzdGFuZGFyZCBibG9jayByZWN5
Y2xlci4KKworICAgICAgICAqIGhlYXAvTWFya2VkQmxvY2suY3BwOgorICAgICAgICAoSlNDOjpN
YXJrZWRCbG9jazo6Y3JlYXRlKToKKyAgICAgICAgKEpTQzo6TWFya2VkQmxvY2s6Ok1hcmtlZEJs
b2NrKTogTm90ZSB0aGF0IGFuIG92ZXJzaXplZCBibG9jayBjYW4ndCBob2xkCisgICAgICAgIGFu
IG92ZXJzaXplZCBudW1iZXIgb2Ygb2JqZWN0czogd2Ugc3RpbGwgb25seSBoYXZlIGVub3VnaCBt
YXJrIGJpdHMKKyAgICAgICAgdG8gbWFyayBvYmplY3RzIHRoYXQgc3RhcnQgaW4gdGhlIGZpcnN0
IDY0S0Igb2YgdGhlIGJsb2NrLgorCisgICAgICAgICogaGVhcC9NYXJrZWRCbG9jay5oOgorICAg
ICAgICAoSlNDOjpNYXJrZWRCbG9jazo6aXNMYXJnZSk6CisgICAgICAgICogaGVhcC9NYXJrZWRT
cGFjZS5jcHA6CisgICAgICAgIChKU0M6Ok1hcmtlZFNwYWNlOjpNYXJrZWRTcGFjZSk6CisgICAg
ICAgIChKU0M6Ok1hcmtlZFNwYWNlOjpyZXNldEFsbG9jYXRvcnMpOgorICAgICAgICAoSlNDOjpN
YXJrZWRTcGFjZTo6Y2Fub25pY2FsaXplQ2VsbExpdmVuZXNzRGF0YSk6CisgICAgICAgIChKU0M6
Ok1hcmtlZFNwYWNlOjppc1BhZ2VkT3V0KTogU3VwcG9ydCBmb3IgbGFyZ2UgdGhpbmdpZXMuCisK
KyAgICAgICAgKEpTQzo6TWFya2VkU3BhY2U6OmZyZWVCbG9jayk6IFVzZSB0aGUgc3RhbmRhcmQg
cmVjeWNsZXIgaWYgcG9zc2libGUuCisKKyAgICAgICAgKiBoZWFwL01hcmtlZFNwYWNlLmg6Cisg
ICAgICAgIChNYXJrZWRTcGFjZSk6CisgICAgICAgIChKU0M6Ok1hcmtlZFNwYWNlOjpmaXJzdEFs
bG9jYXRvcik6CisgICAgICAgIChKU0M6Ok1hcmtlZFNwYWNlOjphbGxvY2F0b3JGb3IpOgorICAg
ICAgICAoSlNDOjpNYXJrZWRTcGFjZTo6ZGVzdHJ1Y3RvckFsbG9jYXRvckZvcik6CisgICAgICAg
IChKU0M6Ok1hcmtlZFNwYWNlOjphbGxvY2F0ZVdpdGhvdXREZXN0cnVjdG9yKToKKyAgICAgICAg
KEpTQzo6TWFya2VkU3BhY2U6OmFsbG9jYXRlV2l0aERlc3RydWN0b3IpOgorICAgICAgICAoSlND
OjpNYXJrZWRTcGFjZTo6Zm9yRWFjaEJsb2NrKTogUmVtb3ZlZCBpbXByZWNpc2Ugc2l6ZSBjbGFz
c2VzLCBzaW5jZQorICAgICAgICB0aGV5J3JlIG5vdCB1c2VkLgorCisgICAgICAgICogbGxpbnQv
TG93TGV2ZWxJbnRlcnByZXRlci5hc206IFVwZGF0ZWQgZm9yIGltcHJlY2lzZSByZW1vdmFsLgor
CiAyMDEyLTA5LTA5ICBHZW9mZnJleSBHYXJlbiAgPGdnYXJlbkBhcHBsZS5jb20+CiAKICAgICAg
ICAgUm9sbGVkIG91dCA8aHR0cDovL3RyYWMud2Via2l0Lm9yZy9jaGFuZ2VzZXQvMTI3OTM5PiBi
ZWNhdXNlIGl0IGJyb2tlCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENv
cmUudmNwcm9qL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLmRlZgo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUudmNwcm9qL0phdmFTY3JpcHRD
b3JlL0phdmFTY3JpcHRDb3JlLmRlZgkocmV2aXNpb24gMTI3OTkwKQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnZjcHJvai9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0
Q29yZS5kZWYJKHdvcmtpbmcgY29weSkKQEAgLTYzLDcgKzYzLDcgQEAgRVhQT1JUUwogICAgID9h
ZGRTbG93Q2FzZUBJZGVudGlmaWVyQEpTQ0BAQ0E/QVY/JFBhc3NSZWZQdHJAVlN0cmluZ0ltcGxA
V1RGQEBAV1RGQEBQQVZFeGVjU3RhdGVAMkBQQVZTdHJpbmdJbXBsQDRAQFoKICAgICA/YWRkU2xv
d0Nhc2VASWRlbnRpZmllckBKU0NAQENBP0FWPyRQYXNzUmVmUHRyQFZTdHJpbmdJbXBsQFdURkBA
QFdURkBAUEFWSlNHbG9iYWxEYXRhQDJAUEFWU3RyaW5nSW1wbEA0QEBaCiAgICAgP2FkZFN0YXRp
Y0dsb2JhbHNASlNHbG9iYWxPYmplY3RASlNDQEBJQUVYUEFVR2xvYmFsUHJvcGVydHlJbmZvQDEy
QEhAWgotICAgID9hbGxvY2F0ZVNsb3dDYXNlQE1hcmtlZEFsbG9jYXRvckBKU0NAQEFBRVBBWFha
CisgICAgP2FsbG9jYXRlU2xvd0Nhc2VATWFya2VkQWxsb2NhdG9yQEpTQ0BAQUFFUEFYSUBaCiAg
ICAgP2FwcGVuZEBTdHJpbmdCdWlsZGVyQFdURkBAUUFFWFBCRUlAWgogICAgID9hcHBlbmRAU3Ry
aW5nQnVpbGRlckBXVEZAQFFBRVhQQl9XSUBaCiAgICAgP2F0dGFjaEBEZWJ1Z2dlckBKU0NAQFFB
RVhQQVZKU0dsb2JhbE9iamVjdEAyQEBaCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVh
cC9NYXJrZWRBbGxvY2F0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9oZWFwL01hcmtlZEFsbG9jYXRvci5jcHAJKHJldmlzaW9uIDEyNzk5MCkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9oZWFwL01hcmtlZEFsbG9jYXRvci5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTI3LDkgKzI3LDkgQEAgYm9vbCBNYXJrZWRBbGxvY2F0b3I6OmlzUGFnZWRPdXQoZG91YmxlIAog
ICAgIHJldHVybiBmYWxzZTsKIH0KIAotaW5saW5lIHZvaWQqIE1hcmtlZEFsbG9jYXRvcjo6dHJ5
QWxsb2NhdGVIZWxwZXIoKQoraW5saW5lIHZvaWQqIE1hcmtlZEFsbG9jYXRvcjo6dHJ5QWxsb2Nh
dGVIZWxwZXIoc2l6ZV90IGJ5dGVzKQogewotICAgIGlmICghbV9mcmVlTGlzdC5oZWFkKSB7Cisg
ICAgaWYgKCFtX2ZyZWVMaXN0LmhlYWQgfHwgIWZpdChtX2N1cnJlbnRCbG9jaywgYnl0ZXMpKSB7
CiAgICAgICAgIGlmIChtX29ubHlDb250YWluc1N0cnVjdHVyZXMgJiYgIW1faGVhcC0+aXNTYWZl
VG9Td2VlcFN0cnVjdHVyZXMoKSkgewogICAgICAgICAgICAgaWYgKG1fY3VycmVudEJsb2NrKSB7
CiAgICAgICAgICAgICAgICAgbV9jdXJyZW50QmxvY2stPmRpZENvbnN1bWVGcmVlTGlzdCgpOwpA
QCAtNDIsMTIgKzQyLDIyIEBAIGlubGluZSB2b2lkKiBNYXJrZWRBbGxvY2F0b3I6OnRyeUFsbG9j
YXQKICAgICAgICAgfQogCiAgICAgICAgIGZvciAoTWFya2VkQmxvY2sqJiBibG9jayA9IG1fYmxv
Y2tzVG9Td2VlcDsgYmxvY2s7IGJsb2NrID0gYmxvY2stPm5leHQoKSkgewotICAgICAgICAgICAg
bV9mcmVlTGlzdCA9IGJsb2NrLT5zd2VlcChNYXJrZWRCbG9jazo6U3dlZXBUb0ZyZWVMaXN0KTsK
LSAgICAgICAgICAgIGlmIChtX2ZyZWVMaXN0LmhlYWQpIHsKLSAgICAgICAgICAgICAgICBtX2N1
cnJlbnRCbG9jayA9IGJsb2NrOwotICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAg
QVNTRVJUKCFtX2lzTGFyZ2UgfHwgYmxvY2stPmlzTGFyZ2UoKSk7CisgICAgICAgICAgICBNYXJr
ZWRCbG9jazo6RnJlZUxpc3QgZnJlZUxpc3QgPSBibG9jay0+c3dlZXAoTWFya2VkQmxvY2s6OlN3
ZWVwVG9GcmVlTGlzdCk7CisgICAgICAgICAgICBpZiAoIWZyZWVMaXN0LmhlYWQpIHsKKyAgICAg
ICAgICAgICAgICBibG9jay0+ZGlkQ29uc3VtZUZyZWVMaXN0KCk7CisgICAgICAgICAgICAgICAg
Y29udGludWU7CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBibG9jay0+ZGlkQ29uc3VtZUZy
ZWVMaXN0KCk7CisKKyAgICAgICAgICAgIGlmICghZml0KGJsb2NrLCBieXRlcykpIHsKKyAgICAg
ICAgICAgICAgICBBU1NFUlQoYmxvY2stPmlzTGFyZ2UoKSk7CisgICAgICAgICAgICAgICAgYmxv
Y2stPnphcEZyZWVMaXN0KGZyZWVMaXN0KTsKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAg
ICAgICAgICAgIH0KKworICAgICAgICAgICAgbV9mcmVlTGlzdCA9IGZyZWVMaXN0OworICAgICAg
ICAgICAgbV9jdXJyZW50QmxvY2sgPSBibG9jazsKKyAgICAgICAgICAgIGJyZWFrOwogICAgICAg
ICB9CiAgICAgICAgIAogICAgICAgICBpZiAoIW1fZnJlZUxpc3QuaGVhZCkgewpAQCAtNTYsNzEg
KzY2LDg1IEBAIGlubGluZSB2b2lkKiBNYXJrZWRBbGxvY2F0b3I6OnRyeUFsbG9jYXQKICAgICAg
ICAgfQogICAgIH0KICAgICAKLSAgICBNYXJrZWRCbG9jazo6RnJlZUNlbGwqIGhlYWQgPSBtX2Zy
ZWVMaXN0LmhlYWQ7Ci0gICAgbV9mcmVlTGlzdC5oZWFkID0gaGVhZC0+bmV4dDsKLSAgICBBU1NF
UlQoaGVhZCk7Ci0gICAgcmV0dXJuIGhlYWQ7CisgICAgTWFya2VkQmxvY2s6OkZyZWVDZWxsKiBj
ZWxsID0gbV9mcmVlTGlzdC5oZWFkOworICAgIEFTU0VSVChjZWxsKTsKKyAgICBtX2ZyZWVMaXN0
LmhlYWQgPSBjZWxsLT5uZXh0OworICAgIHJldHVybiBjZWxsOwogfQotICAgIAotaW5saW5lIHZv
aWQqIE1hcmtlZEFsbG9jYXRvcjo6dHJ5QWxsb2NhdGUoKQorCitpbmxpbmUgdm9pZCogTWFya2Vk
QWxsb2NhdG9yOjp0cnlBbGxvY2F0ZShzaXplX3QgYnl0ZXMpCiB7CiAgICAgQVNTRVJUKCFtX2hl
YXAtPmlzQnVzeSgpKTsKICAgICBtX2hlYXAtPm1fb3BlcmF0aW9uSW5Qcm9ncmVzcyA9IEFsbG9j
YXRpb247Ci0gICAgdm9pZCogcmVzdWx0ID0gdHJ5QWxsb2NhdGVIZWxwZXIoKTsKKyAgICB2b2lk
KiByZXN1bHQgPSB0cnlBbGxvY2F0ZUhlbHBlcihieXRlcyk7CiAgICAgbV9oZWFwLT5tX29wZXJh
dGlvbkluUHJvZ3Jlc3MgPSBOb09wZXJhdGlvbjsKICAgICByZXR1cm4gcmVzdWx0OwogfQotICAg
IAotdm9pZCogTWFya2VkQWxsb2NhdG9yOjphbGxvY2F0ZVNsb3dDYXNlKCkKKwordm9pZCogTWFy
a2VkQWxsb2NhdG9yOjphbGxvY2F0ZVNsb3dDYXNlKHNpemVfdCBieXRlcykKIHsKICAgICBBU1NF
UlQobV9oZWFwLT5nbG9iYWxEYXRhKCktPmFwaUxvY2soKS5jdXJyZW50VGhyZWFkSXNIb2xkaW5n
TG9jaygpKTsKKyAgICBBU1NFUlQoIW1fZnJlZUxpc3QuaGVhZCB8fCAhZml0KG1fY3VycmVudEJs
b2NrLCBieXRlcykpOwogI2lmIENPTExFQ1RfT05fRVZFUllfQUxMT0NBVElPTgogICAgIG1faGVh
cC0+Y29sbGVjdEFsbEdhcmJhZ2UoKTsKICAgICBBU1NFUlQobV9oZWFwLT5tX29wZXJhdGlvbklu
UHJvZ3Jlc3MgPT0gTm9PcGVyYXRpb24pOwogI2VuZGlmCi0gICAgCi0gICAgQVNTRVJUKCFtX2Zy
ZWVMaXN0LmhlYWQpOworCiAgICAgbV9oZWFwLT5kaWRBbGxvY2F0ZShtX2ZyZWVMaXN0LmJ5dGVz
KTsKLSAgICAKLSAgICB2b2lkKiByZXN1bHQgPSB0cnlBbGxvY2F0ZSgpOwotICAgIAorCisgICAg
dm9pZCogcmVzdWx0ID0gdHJ5QWxsb2NhdGUoYnl0ZXMpOwogICAgIGlmIChMSUtFTFkocmVzdWx0
ICE9IDApKQogICAgICAgICByZXR1cm4gcmVzdWx0OwogICAgIAogICAgIGlmIChtX2hlYXAtPnNo
b3VsZENvbGxlY3QoKSkgewogICAgICAgICBtX2hlYXAtPmNvbGxlY3QoSGVhcDo6RG9Ob3RTd2Vl
cCk7CiAKLSAgICAgICAgcmVzdWx0ID0gdHJ5QWxsb2NhdGUoKTsKKyAgICAgICAgcmVzdWx0ID0g
dHJ5QWxsb2NhdGUoYnl0ZXMpOwogICAgICAgICBpZiAocmVzdWx0KQogICAgICAgICAgICAgcmV0
dXJuIHJlc3VsdDsKICAgICB9CiAKICAgICBBU1NFUlQoIW1faGVhcC0+c2hvdWxkQ29sbGVjdCgp
KTsKLSAgICAKLSAgICBNYXJrZWRCbG9jayogYmxvY2sgPSBhbGxvY2F0ZUJsb2NrKCk7Ci0gICAg
QVNTRVJUKGJsb2NrKTsKKworICAgIE1hcmtlZEJsb2NrKiBibG9jayA9IGFsbG9jYXRlQmxvY2so
Ynl0ZXMpOwogICAgIGFkZEJsb2NrKGJsb2NrKTsKLSAgICAgICAgCi0gICAgcmVzdWx0ID0gdHJ5
QWxsb2NhdGUoKTsKKyAgICBtX2ZyZWVMaXN0ID0gYmxvY2stPnN3ZWVwKE1hcmtlZEJsb2NrOjpT
d2VlcFRvRnJlZUxpc3QpOworICAgIG1fY3VycmVudEJsb2NrID0gYmxvY2s7CisKKyAgICByZXN1
bHQgPSB0cnlBbGxvY2F0ZShieXRlcyk7CiAgICAgQVNTRVJUKHJlc3VsdCk7CiAgICAgcmV0dXJu
IHJlc3VsdDsKIH0KIAotTWFya2VkQmxvY2sqIE1hcmtlZEFsbG9jYXRvcjo6YWxsb2NhdGVCbG9j
aygpCitNYXJrZWRCbG9jayogTWFya2VkQWxsb2NhdG9yOjphbGxvY2F0ZUJsb2NrKHNpemVfdCBi
eXRlcykKIHsKLSAgICBNYXJrZWRCbG9jayogYmxvY2sgPSBNYXJrZWRCbG9jazo6Y3JlYXRlKG1f
aGVhcC0+YmxvY2tBbGxvY2F0b3IoKS5hbGxvY2F0ZSgpLCBtX2hlYXAsIG1fY2VsbFNpemUsIG1f
Y2VsbHNOZWVkRGVzdHJ1Y3Rpb24sIG1fb25seUNvbnRhaW5zU3RydWN0dXJlcyk7Ci0gICAgbV9t
YXJrZWRTcGFjZS0+ZGlkQWRkQmxvY2soYmxvY2spOwotICAgIHJldHVybiBibG9jazsKKyAgICBz
aXplX3QgYmxvY2tBbGlnbm1lbnQgPSBNYXJrZWRCbG9jazo6YmxvY2tTaXplOworICAgIHNpemVf
dCBtaW5CbG9ja1NpemUgPSBXVEY6OnJvdW5kVXBUb011bHRpcGxlT2YoV1RGOjpwYWdlU2l6ZSgp
LCBzaXplb2YoTWFya2VkQmxvY2spICsgYnl0ZXMpOworICAgIHNpemVfdCBibG9ja1NpemUgPSBz
dGQ6Om1heChtaW5CbG9ja1NpemUsIGJsb2NrQWxpZ25tZW50KTsgLy8gUGFnZUFsbG9jYXRpb25B
bGlnbmVkIHJlcXVpcmVzIHNpemUgPj0gYWxpZ25tZW50LgorCisgICAgc2l6ZV90IGNlbGxTaXpl
ID0gV1RGOjpyb3VuZFVwVG9NdWx0aXBsZU9mPE1hcmtlZEJsb2NrOjphdG9tU2l6ZT4oYnl0ZXMp
OworICAgIEFTU0VSVChtX2lzTGFyZ2UgfHwgY2VsbFNpemUgPT0gbV9jZWxsU2l6ZSk7CisKKyAg
ICBpZiAoYmxvY2tTaXplID09IE1hcmtlZEJsb2NrOjpibG9ja1NpemUpIHsKKyAgICAgICAgUGFn
ZUFsbG9jYXRpb25BbGlnbmVkIGFsbG9jYXRpb24gPSBtX2hlYXAtPmJsb2NrQWxsb2NhdG9yKCku
YWxsb2NhdGUoKTsKKyAgICAgICAgcmV0dXJuIE1hcmtlZEJsb2NrOjpjcmVhdGUoYWxsb2NhdGlv
biwgbV9oZWFwLCBjZWxsU2l6ZSwgbV9jZWxsc05lZWREZXN0cnVjdGlvbiwgbV9vbmx5Q29udGFp
bnNTdHJ1Y3R1cmVzLCBtX2lzTGFyZ2UpOworICAgIH0KKworICAgIFBhZ2VBbGxvY2F0aW9uQWxp
Z25lZCBhbGxvY2F0aW9uID0gUGFnZUFsbG9jYXRpb25BbGlnbmVkOjphbGxvY2F0ZShibG9ja1Np
emUsIGJsb2NrQWxpZ25tZW50LCBPU0FsbG9jYXRvcjo6SlNHQ0hlYXBQYWdlcyk7CisgICAgaWYg
KCFzdGF0aWNfY2FzdDxib29sPihhbGxvY2F0aW9uKSkKKyAgICAgICAgQ1JBU0goKTsKKyAgICBy
ZXR1cm4gTWFya2VkQmxvY2s6OmNyZWF0ZShhbGxvY2F0aW9uLCBtX2hlYXAsIGNlbGxTaXplLCBt
X2NlbGxzTmVlZERlc3RydWN0aW9uLCBtX29ubHlDb250YWluc1N0cnVjdHVyZXMsIG1faXNMYXJn
ZSk7CiB9CiAKIHZvaWQgTWFya2VkQWxsb2NhdG9yOjphZGRCbG9jayhNYXJrZWRCbG9jayogYmxv
Y2spCiB7CisgICAgQVNTRVJUKGJsb2NrKTsKICAgICBBU1NFUlQoIW1fY3VycmVudEJsb2NrKTsK
ICAgICBBU1NFUlQoIW1fZnJlZUxpc3QuaGVhZCk7CiAgICAgCiAgICAgbV9ibG9ja0xpc3QuYXBw
ZW5kKGJsb2NrKTsKLSAgICBtX2Jsb2Nrc1RvU3dlZXAgPSBtX2N1cnJlbnRCbG9jayA9IGJsb2Nr
OwotICAgIG1fZnJlZUxpc3QgPSBibG9jay0+c3dlZXAoTWFya2VkQmxvY2s6OlN3ZWVwVG9GcmVl
TGlzdCk7CisgICAgbV9ibG9ja3NUb1N3ZWVwID0gYmxvY2s7CisgICAgbV9tYXJrZWRTcGFjZS0+
ZGlkQWRkQmxvY2soYmxvY2spOwogfQogCiB2b2lkIE1hcmtlZEFsbG9jYXRvcjo6cmVtb3ZlQmxv
Y2soTWFya2VkQmxvY2sqIGJsb2NrKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAv
TWFya2VkQWxsb2NhdG9yLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hl
YXAvTWFya2VkQWxsb2NhdG9yLmgJKHJldmlzaW9uIDEyNzk5MCkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9oZWFwL01hcmtlZEFsbG9jYXRvci5oCSh3b3JraW5nIGNvcHkpCkBAIC0xNCw2ICsx
NCwxMyBAQCBuYW1lc3BhY2UgREZHIHsKIGNsYXNzIFNwZWN1bGF0aXZlSklUOwogfQogCitzdGF0
aWMgaW5saW5lIGJvb2wgZml0KE1hcmtlZEJsb2NrKiBibG9jaywgc2l6ZV90IHNpemUpCit7Cisg
ICAgaWYgKHNpemUgPiBibG9jay0+Y2VsbFNpemUoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOwor
ICAgIHJldHVybiB0cnVlOworfQorCiBjbGFzcyBNYXJrZWRBbGxvY2F0b3IgewogICAgIGZyaWVu
ZCBjbGFzcyBKSVQ7CiAgICAgZnJpZW5kIGNsYXNzIERGRzo6U3BlY3VsYXRpdmVKSVQ7CkBAIC0y
NiwyMyArMzMsMjQgQEAgcHVibGljOgogICAgIGJvb2wgY2VsbHNOZWVkRGVzdHJ1Y3Rpb24oKSB7
IHJldHVybiBtX2NlbGxzTmVlZERlc3RydWN0aW9uOyB9CiAgICAgYm9vbCBvbmx5Q29udGFpbnNT
dHJ1Y3R1cmVzKCkgeyByZXR1cm4gbV9vbmx5Q29udGFpbnNTdHJ1Y3R1cmVzOyB9CiAgICAgdm9p
ZCogYWxsb2NhdGUoKTsKKyAgICB2b2lkKiBhbGxvY2F0ZUxhcmdlKHNpemVfdCk7CiAgICAgSGVh
cCogaGVhcCgpIHsgcmV0dXJuIG1faGVhcDsgfQogICAgIAogICAgIHRlbXBsYXRlPHR5cGVuYW1l
IEZ1bmN0b3I+IHZvaWQgZm9yRWFjaEJsb2NrKEZ1bmN0b3ImKTsKICAgICAKICAgICB2b2lkIGFk
ZEJsb2NrKE1hcmtlZEJsb2NrKik7CiAgICAgdm9pZCByZW1vdmVCbG9jayhNYXJrZWRCbG9jayop
OwotICAgIHZvaWQgaW5pdChIZWFwKiwgTWFya2VkU3BhY2UqLCBzaXplX3QgY2VsbFNpemUsIGJv
b2wgY2VsbHNOZWVkRGVzdHJ1Y3Rpb24sIGJvb2wgb25seUNvbnRhaW5zU3RydWN0dXJlcyk7Cisg
ICAgdm9pZCBpbml0KEhlYXAqLCBNYXJrZWRTcGFjZSosIHNpemVfdCBjZWxsU2l6ZSwgYm9vbCBj
ZWxsc05lZWREZXN0cnVjdGlvbiwgYm9vbCBvbmx5Q29udGFpbnNTdHJ1Y3R1cmVzLCBib29sIGlz
TGFyZ2UpOwogCiAgICAgYm9vbCBpc1BhZ2VkT3V0KGRvdWJsZSBkZWFkbGluZSk7CiAgICAKIHBy
aXZhdGU6CiAgICAgZnJpZW5kIGNsYXNzIExMSW50T2Zmc2V0c0V4dHJhY3RvcjsKICAgICAKLSAg
ICBKU19FWFBPUlRfUFJJVkFURSB2b2lkKiBhbGxvY2F0ZVNsb3dDYXNlKCk7Ci0gICAgdm9pZCog
dHJ5QWxsb2NhdGUoKTsKLSAgICB2b2lkKiB0cnlBbGxvY2F0ZUhlbHBlcigpOwotICAgIE1hcmtl
ZEJsb2NrKiBhbGxvY2F0ZUJsb2NrKCk7CisgICAgSlNfRVhQT1JUX1BSSVZBVEUgdm9pZCogYWxs
b2NhdGVTbG93Q2FzZShzaXplX3QpOworICAgIHZvaWQqIHRyeUFsbG9jYXRlKHNpemVfdCk7Cisg
ICAgdm9pZCogdHJ5QWxsb2NhdGVIZWxwZXIoc2l6ZV90KTsKKyAgICBNYXJrZWRCbG9jayogYWxs
b2NhdGVCbG9jayhzaXplX3QpOwogICAgIAogICAgIE1hcmtlZEJsb2NrOjpGcmVlTGlzdCBtX2Zy
ZWVMaXN0OwogICAgIE1hcmtlZEJsb2NrKiBtX2N1cnJlbnRCbG9jazsKQEAgLTUxLDYgKzU5LDcg
QEAgcHJpdmF0ZToKICAgICBzaXplX3QgbV9jZWxsU2l6ZTsKICAgICBib29sIG1fY2VsbHNOZWVk
RGVzdHJ1Y3Rpb247CiAgICAgYm9vbCBtX29ubHlDb250YWluc1N0cnVjdHVyZXM7CisgICAgYm9v
bCBtX2lzTGFyZ2U7CiAgICAgSGVhcCogbV9oZWFwOwogICAgIE1hcmtlZFNwYWNlKiBtX21hcmtl
ZFNwYWNlOwogfTsKQEAgLTYxLDI3ICs3MCw0MSBAQCBpbmxpbmUgTWFya2VkQWxsb2NhdG9yOjpN
YXJrZWRBbGxvY2F0b3IoCiAgICAgLCBtX2NlbGxTaXplKDApCiAgICAgLCBtX2NlbGxzTmVlZERl
c3RydWN0aW9uKHRydWUpCiAgICAgLCBtX29ubHlDb250YWluc1N0cnVjdHVyZXMoZmFsc2UpCisg
ICAgLCBtX2lzTGFyZ2UoZmFsc2UpCiAgICAgLCBtX2hlYXAoMCkKICAgICAsIG1fbWFya2VkU3Bh
Y2UoMCkKIHsKIH0KIAotaW5saW5lIHZvaWQgTWFya2VkQWxsb2NhdG9yOjppbml0KEhlYXAqIGhl
YXAsIE1hcmtlZFNwYWNlKiBtYXJrZWRTcGFjZSwgc2l6ZV90IGNlbGxTaXplLCBib29sIGNlbGxz
TmVlZERlc3RydWN0aW9uLCBib29sIG9ubHlDb250YWluc1N0cnVjdHVyZXMpCitpbmxpbmUgdm9p
ZCBNYXJrZWRBbGxvY2F0b3I6OmluaXQoSGVhcCogaGVhcCwgTWFya2VkU3BhY2UqIG1hcmtlZFNw
YWNlLCBzaXplX3QgY2VsbFNpemUsIGJvb2wgY2VsbHNOZWVkRGVzdHJ1Y3Rpb24sIGJvb2wgb25s
eUNvbnRhaW5zU3RydWN0dXJlcywgYm9vbCBpc0xhcmdlKQogewogICAgIG1faGVhcCA9IGhlYXA7
CiAgICAgbV9tYXJrZWRTcGFjZSA9IG1hcmtlZFNwYWNlOwogICAgIG1fY2VsbFNpemUgPSBjZWxs
U2l6ZTsKICAgICBtX2NlbGxzTmVlZERlc3RydWN0aW9uID0gY2VsbHNOZWVkRGVzdHJ1Y3Rpb247
CiAgICAgbV9vbmx5Q29udGFpbnNTdHJ1Y3R1cmVzID0gb25seUNvbnRhaW5zU3RydWN0dXJlczsK
KyAgICBtX2lzTGFyZ2UgPSBpc0xhcmdlOwogfQogCiBpbmxpbmUgdm9pZCogTWFya2VkQWxsb2Nh
dG9yOjphbGxvY2F0ZSgpCiB7CisgICAgQVNTRVJUKCFtX2lzTGFyZ2UpOworICAgIEFTU0VSVCgh
bV9jdXJyZW50QmxvY2sgfHwgIW1fY3VycmVudEJsb2NrLT5pc0xhcmdlKCkpOworCiAgICAgTWFy
a2VkQmxvY2s6OkZyZWVDZWxsKiBoZWFkID0gbV9mcmVlTGlzdC5oZWFkOwotICAgIC8vIFRoaXMg
aXMgYSBsaWdodC13ZWlnaHQgZmFzdCBwYXRoIHRvIGNvdmVyIHRoZSBtb3N0IGNvbW1vbiBjYXNl
LgogICAgIGlmIChVTkxJS0VMWSghaGVhZCkpCi0gICAgICAgIHJldHVybiBhbGxvY2F0ZVNsb3dD
YXNlKCk7Ci0gICAgCisgICAgICAgIHJldHVybiBhbGxvY2F0ZVNsb3dDYXNlKG1fY2VsbFNpemUp
OworCisgICAgbV9mcmVlTGlzdC5oZWFkID0gaGVhZC0+bmV4dDsKKyAgICByZXR1cm4gaGVhZDsK
K30KKworaW5saW5lIHZvaWQqIE1hcmtlZEFsbG9jYXRvcjo6YWxsb2NhdGVMYXJnZShzaXplX3Qg
Ynl0ZXMpCit7CisgICAgTWFya2VkQmxvY2s6OkZyZWVDZWxsKiBoZWFkID0gbV9mcmVlTGlzdC5o
ZWFkOworICAgIGlmICghaGVhZCB8fCAhZml0KG1fY3VycmVudEJsb2NrLCBieXRlcykpCisgICAg
ICAgIHJldHVybiBhbGxvY2F0ZVNsb3dDYXNlKGJ5dGVzKTsKKwogICAgIG1fZnJlZUxpc3QuaGVh
ZCA9IGhlYWQtPm5leHQ7CiAgICAgcmV0dXJuIGhlYWQ7CiB9CkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaGVhcC9NYXJrZWRCbG9jay5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2hlYXAvTWFya2VkQmxvY2suY3BwCShyZXZpc2lvbiAxMjc5OTApCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJrZWRCbG9jay5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTMzLDE3ICszMywxOCBAQAogCiBuYW1lc3BhY2UgSlNDIHsKIAotTWFya2VkQmxvY2sqIE1hcmtl
ZEJsb2NrOjpjcmVhdGUoY29uc3QgUGFnZUFsbG9jYXRpb25BbGlnbmVkJiBhbGxvY2F0aW9uLCBI
ZWFwKiBoZWFwLCBzaXplX3QgY2VsbFNpemUsIGJvb2wgY2VsbHNOZWVkRGVzdHJ1Y3Rpb24sIGJv
b2wgb25seUNvbnRhaW5zU3RydWN0dXJlcykKK01hcmtlZEJsb2NrKiBNYXJrZWRCbG9jazo6Y3Jl
YXRlKGNvbnN0IFBhZ2VBbGxvY2F0aW9uQWxpZ25lZCYgYWxsb2NhdGlvbiwgSGVhcCogaGVhcCwg
c2l6ZV90IGNlbGxTaXplLCBib29sIGNlbGxzTmVlZERlc3RydWN0aW9uLCBib29sIG9ubHlDb250
YWluc1N0cnVjdHVyZXMsIGJvb2wgaXNMYXJnZSkKIHsKLSAgICByZXR1cm4gbmV3IChOb3ROdWxs
LCBhbGxvY2F0aW9uLmJhc2UoKSkgTWFya2VkQmxvY2soYWxsb2NhdGlvbiwgaGVhcCwgY2VsbFNp
emUsIGNlbGxzTmVlZERlc3RydWN0aW9uLCBvbmx5Q29udGFpbnNTdHJ1Y3R1cmVzKTsKKyAgICBy
ZXR1cm4gbmV3IChOb3ROdWxsLCBhbGxvY2F0aW9uLmJhc2UoKSkgTWFya2VkQmxvY2soYWxsb2Nh
dGlvbiwgaGVhcCwgY2VsbFNpemUsIGNlbGxzTmVlZERlc3RydWN0aW9uLCBvbmx5Q29udGFpbnNT
dHJ1Y3R1cmVzLCBpc0xhcmdlKTsKIH0KIAotTWFya2VkQmxvY2s6Ok1hcmtlZEJsb2NrKGNvbnN0
IFBhZ2VBbGxvY2F0aW9uQWxpZ25lZCYgYWxsb2NhdGlvbiwgSGVhcCogaGVhcCwgc2l6ZV90IGNl
bGxTaXplLCBib29sIGNlbGxzTmVlZERlc3RydWN0aW9uLCBib29sIG9ubHlDb250YWluc1N0cnVj
dHVyZXMpCitNYXJrZWRCbG9jazo6TWFya2VkQmxvY2soY29uc3QgUGFnZUFsbG9jYXRpb25BbGln
bmVkJiBhbGxvY2F0aW9uLCBIZWFwKiBoZWFwLCBzaXplX3QgY2VsbFNpemUsIGJvb2wgY2VsbHNO
ZWVkRGVzdHJ1Y3Rpb24sIGJvb2wgb25seUNvbnRhaW5zU3RydWN0dXJlcywgYm9vbCBpc0xhcmdl
KQogICAgIDogSGVhcEJsb2NrPE1hcmtlZEJsb2NrPihhbGxvY2F0aW9uKQogICAgICwgbV9hdG9t
c1BlckNlbGwoKGNlbGxTaXplICsgYXRvbVNpemUgLSAxKSAvIGF0b21TaXplKQogICAgICwgbV9l
bmRBdG9tKGF0b21zUGVyQmxvY2sgLSBtX2F0b21zUGVyQ2VsbCArIDEpCiAgICAgLCBtX2NlbGxz
TmVlZERlc3RydWN0aW9uKGNlbGxzTmVlZERlc3RydWN0aW9uKQogICAgICwgbV9vbmx5Q29udGFp
bnNTdHJ1Y3R1cmVzKG9ubHlDb250YWluc1N0cnVjdHVyZXMpCisgICAgLCBtX2lzTGFyZ2UoaXNM
YXJnZSkKICAgICAsIG1fc3RhdGUoTmV3KSAvLyBBbGwgY2VsbHMgc3RhcnQgb3V0IHVubWFya2Vk
LgogICAgICwgbV93ZWFrU2V0KGhlYXAtPmdsb2JhbERhdGEoKSkKIHsKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9oZWFwL01hcmtlZEJsb2NrLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2hlYXAvTWFya2VkQmxvY2suaAkocmV2aXNpb24gMTI3OTkwKQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya2VkQmxvY2suaAkod29ya2luZyBjb3B5KQpAQCAt
MTEyLDcgKzExMiw3IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICAgICAgUmV0dXJuVHlwZSBt
X2NvdW50OwogICAgICAgICB9OwogCi0gICAgICAgIHN0YXRpYyBNYXJrZWRCbG9jayogY3JlYXRl
KGNvbnN0IFBhZ2VBbGxvY2F0aW9uQWxpZ25lZCYsIEhlYXAqLCBzaXplX3QgY2VsbFNpemUsIGJv
b2wgY2VsbHNOZWVkRGVzdHJ1Y3Rpb24sIGJvb2wgb25seUNvbnRhaW5zU3RydWN0dXJlcyk7Cisg
ICAgICAgIHN0YXRpYyBNYXJrZWRCbG9jayogY3JlYXRlKGNvbnN0IFBhZ2VBbGxvY2F0aW9uQWxp
Z25lZCYsIEhlYXAqLCBzaXplX3QgY2VsbFNpemUsIGJvb2wgY2VsbHNOZWVkRGVzdHJ1Y3Rpb24s
IGJvb2wgb25seUNvbnRhaW5zU3RydWN0dXJlcywgYm9vbCBpc0xhcmdlKTsKIAogICAgICAgICBz
dGF0aWMgYm9vbCBpc0F0b21BbGlnbmVkKGNvbnN0IHZvaWQqKTsKICAgICAgICAgc3RhdGljIE1h
cmtlZEJsb2NrKiBibG9ja0Zvcihjb25zdCB2b2lkKik7CkBAIC0xNDgsNiArMTQ4LDcgQEAgbmFt
ZXNwYWNlIEpTQyB7CiAKICAgICAgICAgc2l6ZV90IHNpemUoKTsKICAgICAgICAgc2l6ZV90IGNh
cGFjaXR5KCk7CisgICAgICAgIGJvb2wgaXNMYXJnZSgpOwogCiAgICAgICAgIGJvb2wgaXNNYXJr
ZWQoY29uc3Qgdm9pZCopOwogICAgICAgICBib29sIHRlc3RBbmRTZXRNYXJrZWQoY29uc3Qgdm9p
ZCopOwpAQCAtMTk2LDcgKzE5Nyw3IEBAIG5hbWVzcGFjZSBKU0MgewogCiAgICAgICAgIHR5cGVk
ZWYgY2hhciBBdG9tW2F0b21TaXplXTsKIAotICAgICAgICBNYXJrZWRCbG9jayhjb25zdCBQYWdl
QWxsb2NhdGlvbkFsaWduZWQmLCBIZWFwKiwgc2l6ZV90IGNlbGxTaXplLCBib29sIGNlbGxzTmVl
ZERlc3RydWN0aW9uLCBib29sIG9ubHlDb250YWluc1N0cnVjdHVyZXMpOworICAgICAgICBNYXJr
ZWRCbG9jayhjb25zdCBQYWdlQWxsb2NhdGlvbkFsaWduZWQmLCBIZWFwKiwgc2l6ZV90IGNlbGxT
aXplLCBib29sIGNlbGxzTmVlZERlc3RydWN0aW9uLCBib29sIG9ubHlDb250YWluc1N0cnVjdHVy
ZXMsIGJvb2wgaXNMYXJnZSk7CiAgICAgICAgIEF0b20qIGF0b21zKCk7CiAgICAgICAgIHNpemVf
dCBhdG9tTnVtYmVyKGNvbnN0IHZvaWQqKTsKICAgICAgICAgdm9pZCBjYWxsRGVzdHJ1Y3RvcihK
U0NlbGwqKTsKQEAgLTIxNSw2ICsyMTYsNyBAQCBuYW1lc3BhY2UgSlNDIHsKICNlbmRpZgogICAg
ICAgICBib29sIG1fY2VsbHNOZWVkRGVzdHJ1Y3Rpb247CiAgICAgICAgIGJvb2wgbV9vbmx5Q29u
dGFpbnNTdHJ1Y3R1cmVzOworICAgICAgICBib29sIG1faXNMYXJnZTsKICAgICAgICAgQmxvY2tT
dGF0ZSBtX3N0YXRlOwogICAgICAgICBXZWFrU2V0IG1fd2Vha1NldDsKICAgICB9OwpAQCAtMzQ0
LDYgKzM0NiwxMSBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgcmV0dXJuIGFsbG9jYXRpb24o
KS5zaXplKCk7CiAgICAgfQogCisgICAgaW5saW5lIGJvb2wgTWFya2VkQmxvY2s6OmlzTGFyZ2Uo
KQorICAgIHsKKyAgICAgICAgcmV0dXJuIG1faXNMYXJnZTsKKyAgICB9CisKICAgICBpbmxpbmUg
c2l6ZV90IE1hcmtlZEJsb2NrOjphdG9tTnVtYmVyKGNvbnN0IHZvaWQqIHApCiAgICAgewogICAg
ICAgICByZXR1cm4gKHJlaW50ZXJwcmV0X2Nhc3Q8Qml0cz4ocCkgLSByZWludGVycHJldF9jYXN0
PEJpdHM+KHRoaXMpKSAvIGF0b21TaXplOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hl
YXAvTWFya2VkU3BhY2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9o
ZWFwL01hcmtlZFNwYWNlLmNwcAkocmV2aXNpb24gMTI3OTkwKQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2hlYXAvTWFya2VkU3BhY2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04MSwxNiArODEs
MTUgQEAgTWFya2VkU3BhY2U6Ok1hcmtlZFNwYWNlKEhlYXAqIGhlYXApCiAgICAgOiBtX2hlYXAo
aGVhcCkKIHsKICAgICBmb3IgKHNpemVfdCBjZWxsU2l6ZSA9IHByZWNpc2VTdGVwOyBjZWxsU2l6
ZSA8PSBwcmVjaXNlQ3V0b2ZmOyBjZWxsU2l6ZSArPSBwcmVjaXNlU3RlcCkgewotICAgICAgICBh
bGxvY2F0b3JGb3IoY2VsbFNpemUpLmluaXQoaGVhcCwgdGhpcywgY2VsbFNpemUsIGZhbHNlLCBm
YWxzZSk7Ci0gICAgICAgIGRlc3RydWN0b3JBbGxvY2F0b3JGb3IoY2VsbFNpemUpLmluaXQoaGVh
cCwgdGhpcywgY2VsbFNpemUsIHRydWUsIGZhbHNlKTsKKyAgICAgICAgYWxsb2NhdG9yRm9yKGNl
bGxTaXplKS5pbml0KGhlYXAsIHRoaXMsIGNlbGxTaXplLCBmYWxzZSwgZmFsc2UsIGZhbHNlKTsK
KyAgICAgICAgZGVzdHJ1Y3RvckFsbG9jYXRvckZvcihjZWxsU2l6ZSkuaW5pdChoZWFwLCB0aGlz
LCBjZWxsU2l6ZSwgdHJ1ZSwgZmFsc2UsIGZhbHNlKTsKICAgICB9CiAKLSAgICBmb3IgKHNpemVf
dCBjZWxsU2l6ZSA9IGltcHJlY2lzZVN0ZXA7IGNlbGxTaXplIDw9IGltcHJlY2lzZUN1dG9mZjsg
Y2VsbFNpemUgKz0gaW1wcmVjaXNlU3RlcCkgewotICAgICAgICBhbGxvY2F0b3JGb3IoY2VsbFNp
emUpLmluaXQoaGVhcCwgdGhpcywgY2VsbFNpemUsIGZhbHNlLCBmYWxzZSk7Ci0gICAgICAgIGRl
c3RydWN0b3JBbGxvY2F0b3JGb3IoY2VsbFNpemUpLmluaXQoaGVhcCwgdGhpcywgY2VsbFNpemUs
IHRydWUsIGZhbHNlKTsKLSAgICB9CisgICAgLy8gQWxsIGxhcmdlIGFsbG9jYXRpb25zIGdldCBk
ZXN0cnVjdG9ycy4gVGhpcyBtYXhpbWl6ZXMgb3VyIGNoYW5jZXMgb2YgVk0KKyAgICAvLyByZXVz
ZSBhbmQgc2ltcGxpZmllcyBhbGxvY2F0aW9uIGxvZ2ljLgorICAgIG1fbGFyZ2VBbGxvY2F0b3Iu
aW5pdChoZWFwLCB0aGlzLCAwLCB0cnVlLCBmYWxzZSwgdHJ1ZSk7CiAKLSAgICBtX3N0cnVjdHVy
ZUFsbG9jYXRvci5pbml0KGhlYXAsIHRoaXMsIFdURjo6cm91bmRVcFRvTXVsdGlwbGVPZigzMiwg
c2l6ZW9mKFN0cnVjdHVyZSkpLCB0cnVlLCB0cnVlKTsKKyAgICBtX3N0cnVjdHVyZUFsbG9jYXRv
ci5pbml0KGhlYXAsIHRoaXMsIFdURjo6cm91bmRVcFRvTXVsdGlwbGVPZigzMiwgc2l6ZW9mKFN0
cnVjdHVyZSkpLCB0cnVlLCB0cnVlLCBmYWxzZSk7CiB9CiAKIE1hcmtlZFNwYWNlOjp+TWFya2Vk
U3BhY2UoKQpAQCAtMTIyLDExICsxMjEsNyBAQCB2b2lkIE1hcmtlZFNwYWNlOjpyZXNldEFsbG9j
YXRvcnMoKQogICAgICAgICBkZXN0cnVjdG9yQWxsb2NhdG9yRm9yKGNlbGxTaXplKS5yZXNldCgp
OwogICAgIH0KIAotICAgIGZvciAoc2l6ZV90IGNlbGxTaXplID0gaW1wcmVjaXNlU3RlcDsgY2Vs
bFNpemUgPD0gaW1wcmVjaXNlQ3V0b2ZmOyBjZWxsU2l6ZSArPSBpbXByZWNpc2VTdGVwKSB7Ci0g
ICAgICAgIGFsbG9jYXRvckZvcihjZWxsU2l6ZSkucmVzZXQoKTsKLSAgICAgICAgZGVzdHJ1Y3Rv
ckFsbG9jYXRvckZvcihjZWxsU2l6ZSkucmVzZXQoKTsKLSAgICB9Ci0KKyAgICBtX2xhcmdlQWxs
b2NhdG9yLnJlc2V0KCk7CiAgICAgbV9zdHJ1Y3R1cmVBbGxvY2F0b3IucmVzZXQoKTsKIH0KIApA
QCAtMTQ4LDExICsxNDMsNyBAQCB2b2lkIE1hcmtlZFNwYWNlOjpjYW5vbmljYWxpemVDZWxsTGl2
ZW5lCiAgICAgICAgIGRlc3RydWN0b3JBbGxvY2F0b3JGb3IoY2VsbFNpemUpLnphcEZyZWVMaXN0
KCk7CiAgICAgfQogCi0gICAgZm9yIChzaXplX3QgY2VsbFNpemUgPSBpbXByZWNpc2VTdGVwOyBj
ZWxsU2l6ZSA8PSBpbXByZWNpc2VDdXRvZmY7IGNlbGxTaXplICs9IGltcHJlY2lzZVN0ZXApIHsK
LSAgICAgICAgYWxsb2NhdG9yRm9yKGNlbGxTaXplKS56YXBGcmVlTGlzdCgpOwotICAgICAgICBk
ZXN0cnVjdG9yQWxsb2NhdG9yRm9yKGNlbGxTaXplKS56YXBGcmVlTGlzdCgpOwotICAgIH0KLQor
ICAgIG1fbGFyZ2VBbGxvY2F0b3IuemFwRnJlZUxpc3QoKTsKICAgICBtX3N0cnVjdHVyZUFsbG9j
YXRvci56YXBGcmVlTGlzdCgpOwogfQogCkBAIC0xNjMsMTAgKzE1NCw4IEBAIGJvb2wgTWFya2Vk
U3BhY2U6OmlzUGFnZWRPdXQoZG91YmxlIGRlYWQKICAgICAgICAgICAgIHJldHVybiB0cnVlOwog
ICAgIH0KIAotICAgIGZvciAoc2l6ZV90IGNlbGxTaXplID0gaW1wcmVjaXNlU3RlcDsgY2VsbFNp
emUgPD0gaW1wcmVjaXNlQ3V0b2ZmOyBjZWxsU2l6ZSArPSBpbXByZWNpc2VTdGVwKSB7Ci0gICAg
ICAgIGlmIChhbGxvY2F0b3JGb3IoY2VsbFNpemUpLmlzUGFnZWRPdXQoZGVhZGxpbmUpIHx8IGRl
c3RydWN0b3JBbGxvY2F0b3JGb3IoY2VsbFNpemUpLmlzUGFnZWRPdXQoZGVhZGxpbmUpKQotICAg
ICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQorICAgIGlmIChtX2xhcmdlQWxsb2NhdG9yLmlz
UGFnZWRPdXQoZGVhZGxpbmUpKQorICAgICAgICByZXR1cm4gdHJ1ZTsKIAogICAgIGlmIChtX3N0
cnVjdHVyZUFsbG9jYXRvci5pc1BhZ2VkT3V0KGRlYWRsaW5lKSkKICAgICAgICAgcmV0dXJuIHRy
dWU7CkBAIC0xNzgsNyArMTY3LDEzIEBAIHZvaWQgTWFya2VkU3BhY2U6OmZyZWVCbG9jayhNYXJr
ZWRCbG9jayoKIHsKICAgICBhbGxvY2F0b3JGb3IoYmxvY2spLnJlbW92ZUJsb2NrKGJsb2NrKTsK
ICAgICBtX2Jsb2Nrcy5yZW1vdmUoYmxvY2spOwotICAgIG1faGVhcC0+YmxvY2tBbGxvY2F0b3Io
KS5kZWFsbG9jYXRlKE1hcmtlZEJsb2NrOjpkZXN0cm95KGJsb2NrKSk7CisgICAgaWYgKGJsb2Nr
LT5jYXBhY2l0eSgpID09IE1hcmtlZEJsb2NrOjpibG9ja1NpemUpIHsKKyAgICAgICAgbV9oZWFw
LT5ibG9ja0FsbG9jYXRvcigpLmRlYWxsb2NhdGUoTWFya2VkQmxvY2s6OmRlc3Ryb3koYmxvY2sp
KTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIEFTU0VSVChibG9jay0+aXNMYXJnZSgp
KTsKKyAgICBNYXJrZWRCbG9jazo6ZGVzdHJveShibG9jaykuZGVhbGxvY2F0ZSgpOwogfQogCiB2
b2lkIE1hcmtlZFNwYWNlOjpmcmVlT3JTaHJpbmtCbG9jayhNYXJrZWRCbG9jayogYmxvY2spCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJrZWRTcGFjZS5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtlZFNwYWNlLmgJKHJldmlzaW9uIDEy
Nzk5MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtlZFNwYWNlLmgJKHdvcmtp
bmcgY29weSkKQEAgLTExNSwyNSArMTE1LDE2IEBAIHB1YmxpYzoKIAogcHJpdmF0ZToKICAgICBm
cmllbmQgY2xhc3MgTExJbnRPZmZzZXRzRXh0cmFjdG9yOwotICAgIAorCiAgICAgLy8gWyAzMi4u
LiAyNTYgXQogICAgIHN0YXRpYyBjb25zdCBzaXplX3QgcHJlY2lzZVN0ZXAgPSBNYXJrZWRCbG9j
azo6YXRvbVNpemU7CiAgICAgc3RhdGljIGNvbnN0IHNpemVfdCBwcmVjaXNlQ3V0b2ZmID0gMjU2
OwogICAgIHN0YXRpYyBjb25zdCBzaXplX3QgcHJlY2lzZUNvdW50ID0gcHJlY2lzZUN1dG9mZiAv
IHByZWNpc2VTdGVwOwogCi0gICAgLy8gWyA1MTIuLi4gMjA0OCBdCi0gICAgc3RhdGljIGNvbnN0
IHNpemVfdCBpbXByZWNpc2VTdGVwID0gcHJlY2lzZUN1dG9mZjsKLSAgICBzdGF0aWMgY29uc3Qg
c2l6ZV90IGltcHJlY2lzZUN1dG9mZiA9IG1heENlbGxTaXplOwotICAgIHN0YXRpYyBjb25zdCBz
aXplX3QgaW1wcmVjaXNlQ291bnQgPSBpbXByZWNpc2VDdXRvZmYgLyBpbXByZWNpc2VTdGVwOwot
Ci0gICAgc3RydWN0IFN1YnNwYWNlIHsKLSAgICAgICAgRml4ZWRBcnJheTxNYXJrZWRBbGxvY2F0
b3IsIHByZWNpc2VDb3VudD4gcHJlY2lzZUFsbG9jYXRvcnM7Ci0gICAgICAgIEZpeGVkQXJyYXk8
TWFya2VkQWxsb2NhdG9yLCBpbXByZWNpc2VDb3VudD4gaW1wcmVjaXNlQWxsb2NhdG9yczsKLSAg
ICB9OwotCi0gICAgU3Vic3BhY2UgbV9kZXN0cnVjdG9yU3BhY2U7Ci0gICAgU3Vic3BhY2UgbV9u
b3JtYWxTcGFjZTsKKyAgICBGaXhlZEFycmF5PE1hcmtlZEFsbG9jYXRvciwgcHJlY2lzZUNvdW50
PiBtX2Rlc3RydWN0b3JBbGxvY2F0b3JzOworICAgIEZpeGVkQXJyYXk8TWFya2VkQWxsb2NhdG9y
LCBwcmVjaXNlQ291bnQ+IG1fbm9ybWFsQWxsb2NhdG9yczsKICAgICBNYXJrZWRBbGxvY2F0b3Ig
bV9zdHJ1Y3R1cmVBbGxvY2F0b3I7CisgICAgTWFya2VkQWxsb2NhdG9yIG1fbGFyZ2VBbGxvY2F0
b3I7CiAKICAgICBIZWFwKiBtX2hlYXA7CiAgICAgTWFya2VkQmxvY2tTZXQgbV9ibG9ja3M7CkBA
IC0xNTcsMTUgKzE0OCwxMyBAQCB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jdG9yPiBpbmxpbmUgdHlw
ZW5hCiAKIGlubGluZSBNYXJrZWRBbGxvY2F0b3ImIE1hcmtlZFNwYWNlOjpmaXJzdEFsbG9jYXRv
cigpCiB7Ci0gICAgcmV0dXJuIG1fbm9ybWFsU3BhY2UucHJlY2lzZUFsbG9jYXRvcnNbMF07Cisg
ICAgcmV0dXJuIG1fbm9ybWFsQWxsb2NhdG9yc1swXTsKIH0KIAogaW5saW5lIE1hcmtlZEFsbG9j
YXRvciYgTWFya2VkU3BhY2U6OmFsbG9jYXRvckZvcihzaXplX3QgYnl0ZXMpCiB7Ci0gICAgQVNT
RVJUKGJ5dGVzICYmIGJ5dGVzIDw9IG1heENlbGxTaXplKTsKLSAgICBpZiAoYnl0ZXMgPD0gcHJl
Y2lzZUN1dG9mZikKLSAgICAgICAgcmV0dXJuIG1fbm9ybWFsU3BhY2UucHJlY2lzZUFsbG9jYXRv
cnNbKGJ5dGVzIC0gMSkgLyBwcmVjaXNlU3RlcF07Ci0gICAgcmV0dXJuIG1fbm9ybWFsU3BhY2Uu
aW1wcmVjaXNlQWxsb2NhdG9yc1soYnl0ZXMgLSAxKSAvIGltcHJlY2lzZVN0ZXBdOworICAgIEFT
U0VSVChieXRlcyAmJiBieXRlcyA8PSBwcmVjaXNlQ3V0b2ZmKTsKKyAgICByZXR1cm4gbV9ub3Jt
YWxBbGxvY2F0b3JzWyhieXRlcyAtIDEpIC8gcHJlY2lzZVN0ZXBdOwogfQogCiBpbmxpbmUgTWFy
a2VkQWxsb2NhdG9yJiBNYXJrZWRTcGFjZTo6YWxsb2NhdG9yRm9yKE1hcmtlZEJsb2NrKiBibG9j
aykKQEAgLTE3Myw2ICsxNjIsOSBAQCBpbmxpbmUgTWFya2VkQWxsb2NhdG9yJiBNYXJrZWRTcGFj
ZTo6YWxsCiAgICAgaWYgKGJsb2NrLT5vbmx5Q29udGFpbnNTdHJ1Y3R1cmVzKCkpCiAgICAgICAg
IHJldHVybiBtX3N0cnVjdHVyZUFsbG9jYXRvcjsKIAorICAgIGlmIChibG9jay0+aXNMYXJnZSgp
KQorICAgICAgICByZXR1cm4gbV9sYXJnZUFsbG9jYXRvcjsKKwogICAgIGlmIChibG9jay0+Y2Vs
bHNOZWVkRGVzdHJ1Y3Rpb24oKSkKICAgICAgICAgcmV0dXJuIGRlc3RydWN0b3JBbGxvY2F0b3JG
b3IoYmxvY2stPmNlbGxTaXplKCkpOwogCkBAIC0xODEsMjAgKzE3MywyMiBAQCBpbmxpbmUgTWFy
a2VkQWxsb2NhdG9yJiBNYXJrZWRTcGFjZTo6YWxsCiAKIGlubGluZSBNYXJrZWRBbGxvY2F0b3Im
IE1hcmtlZFNwYWNlOjpkZXN0cnVjdG9yQWxsb2NhdG9yRm9yKHNpemVfdCBieXRlcykKIHsKLSAg
ICBBU1NFUlQoYnl0ZXMgJiYgYnl0ZXMgPD0gbWF4Q2VsbFNpemUpOwotICAgIGlmIChieXRlcyA8
PSBwcmVjaXNlQ3V0b2ZmKQotICAgICAgICByZXR1cm4gbV9kZXN0cnVjdG9yU3BhY2UucHJlY2lz
ZUFsbG9jYXRvcnNbKGJ5dGVzIC0gMSkgLyBwcmVjaXNlU3RlcF07Ci0gICAgcmV0dXJuIG1fZGVz
dHJ1Y3RvclNwYWNlLmltcHJlY2lzZUFsbG9jYXRvcnNbKGJ5dGVzIC0gMSkgLyBpbXByZWNpc2VT
dGVwXTsKKyAgICBBU1NFUlQoYnl0ZXMgJiYgYnl0ZXMgPD0gcHJlY2lzZUN1dG9mZik7CisgICAg
cmV0dXJuIG1fZGVzdHJ1Y3RvckFsbG9jYXRvcnNbKGJ5dGVzIC0gMSkgLyBwcmVjaXNlU3RlcF07
CiB9CiAKIGlubGluZSB2b2lkKiBNYXJrZWRTcGFjZTo6YWxsb2NhdGVXaXRob3V0RGVzdHJ1Y3Rv
cihzaXplX3QgYnl0ZXMpCiB7Ci0gICAgcmV0dXJuIGFsbG9jYXRvckZvcihieXRlcykuYWxsb2Nh
dGUoKTsKKyAgICBpZiAoYnl0ZXMgPD0gcHJlY2lzZUN1dG9mZikKKyAgICAgICAgcmV0dXJuIGFs
bG9jYXRvckZvcihieXRlcykuYWxsb2NhdGUoKTsKKyAgICByZXR1cm4gbV9sYXJnZUFsbG9jYXRv
ci5hbGxvY2F0ZUxhcmdlKGJ5dGVzKTsKIH0KIAogaW5saW5lIHZvaWQqIE1hcmtlZFNwYWNlOjph
bGxvY2F0ZVdpdGhEZXN0cnVjdG9yKHNpemVfdCBieXRlcykKIHsKLSAgICByZXR1cm4gZGVzdHJ1
Y3RvckFsbG9jYXRvckZvcihieXRlcykuYWxsb2NhdGUoKTsKKyAgICBpZiAoYnl0ZXMgPD0gcHJl
Y2lzZUN1dG9mZikKKyAgICAgICAgcmV0dXJuIGRlc3RydWN0b3JBbGxvY2F0b3JGb3IoYnl0ZXMp
LmFsbG9jYXRlKCk7CisgICAgcmV0dXJuIG1fbGFyZ2VBbGxvY2F0b3IuYWxsb2NhdGVMYXJnZShi
eXRlcyk7CiB9CiAKIGlubGluZSB2b2lkKiBNYXJrZWRTcGFjZTo6YWxsb2NhdGVTdHJ1Y3R1cmUo
KQpAQCAtMjA1LDE1ICsxOTksMTEgQEAgaW5saW5lIHZvaWQqIE1hcmtlZFNwYWNlOjphbGxvY2F0
ZVN0cnVjdAogdGVtcGxhdGUgPHR5cGVuYW1lIEZ1bmN0b3I+IGlubGluZSB0eXBlbmFtZSBGdW5j
dG9yOjpSZXR1cm5UeXBlIE1hcmtlZFNwYWNlOjpmb3JFYWNoQmxvY2soRnVuY3RvciYgZnVuY3Rv
cikKIHsKICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHByZWNpc2VDb3VudDsgKytpKSB7Ci0g
ICAgICAgIG1fbm9ybWFsU3BhY2UucHJlY2lzZUFsbG9jYXRvcnNbaV0uZm9yRWFjaEJsb2NrKGZ1
bmN0b3IpOwotICAgICAgICBtX2Rlc3RydWN0b3JTcGFjZS5wcmVjaXNlQWxsb2NhdG9yc1tpXS5m
b3JFYWNoQmxvY2soZnVuY3Rvcik7Ci0gICAgfQotCi0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkg
PCBpbXByZWNpc2VDb3VudDsgKytpKSB7Ci0gICAgICAgIG1fbm9ybWFsU3BhY2UuaW1wcmVjaXNl
QWxsb2NhdG9yc1tpXS5mb3JFYWNoQmxvY2soZnVuY3Rvcik7Ci0gICAgICAgIG1fZGVzdHJ1Y3Rv
clNwYWNlLmltcHJlY2lzZUFsbG9jYXRvcnNbaV0uZm9yRWFjaEJsb2NrKGZ1bmN0b3IpOworICAg
ICAgICBtX25vcm1hbEFsbG9jYXRvcnNbaV0uZm9yRWFjaEJsb2NrKGZ1bmN0b3IpOworICAgICAg
ICBtX2Rlc3RydWN0b3JBbGxvY2F0b3JzW2ldLmZvckVhY2hCbG9jayhmdW5jdG9yKTsKICAgICB9
CiAKKyAgICBtX2xhcmdlQWxsb2NhdG9yLmZvckVhY2hCbG9jayhmdW5jdG9yKTsKICAgICBtX3N0
cnVjdHVyZUFsbG9jYXRvci5mb3JFYWNoQmxvY2soZnVuY3Rvcik7CiAKICAgICByZXR1cm4gZnVu
Y3Rvci5yZXR1cm5WYWx1ZSgpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xv
d0xldmVsSW50ZXJwcmV0ZXIuYXNtCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9sbGludC9Mb3dMZXZlbEludGVycHJldGVyLmFzbQkocmV2aXNpb24gMTI3OTkwKQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXIuYXNtCSh3b3JraW5n
IGNvcHkpCkBAIC0zMTcsOCArMzE3LDcgQEAgbWFjcm8gYWxsb2NhdGVCYXNpY0pTT2JqZWN0KHNp
emVDbGFzc0luZAogICAgICAgICBjb25zdCBvZmZzZXRPZk15U2l6ZUNsYXNzID0KICAgICAgICAg
ICAgIEpTR2xvYmFsRGF0YTo6aGVhcCArCiAgICAgICAgICAgICBIZWFwOjptX29iamVjdFNwYWNl
ICsKLSAgICAgICAgICAgIE1hcmtlZFNwYWNlOjptX25vcm1hbFNwYWNlICsKLSAgICAgICAgICAg
IE1hcmtlZFNwYWNlOjpTdWJzcGFjZTo6cHJlY2lzZUFsbG9jYXRvcnMgKworICAgICAgICAgICAg
TWFya2VkU3BhY2U6Om1fbm9ybWFsQWxsb2NhdG9ycyArCiAgICAgICAgICAgICBzaXplQ2xhc3NJ
bmRleCAqIHNpemVvZiBNYXJrZWRBbGxvY2F0b3IKICAgICAgICAgCiAgICAgICAgIGNvbnN0IG9m
ZnNldE9mRmlyc3RGcmVlQ2VsbCA9IAo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>163266</attachid>
            <date>2012-09-10 19:21:14 -0700</date>
            <delta_ts>2012-09-10 20:02:46 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-96214-20120910192048.patch</filename>
            <type>text/plain</type>
            <size>15371</size>
            <attacher name="Geoffrey Garen">ggaren</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTI4MTQwKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDU0IEBA
CisyMDEyLTA5LTEwICBHZW9mZnJleSBHYXJlbiAgPGdnYXJlbkBhcHBsZS5jb20+CisKKyAgICAg
ICAgQWRkZWQgbGFyZ2UgYWxsb2NhdGlvbiBzdXBwb3J0IHRvIE1hcmtlZFNwYWNlCisgICAgICAg
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD05NjIxNAorCisgICAgICAg
IFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEkgZXhwYW5kZWQgdGhlIGlt
cHJlY2lzZSBzaXplIGNsYXNzZXMgdG8gY292ZXIgdXAgdG8gMzJLQiwgdGhlbiBhZGRlZAorICAg
ICAgICBhbiBtbWFwLWJhc2VkIGFsbG9jYXRvciBmb3IgZXZlcnl0aGluZyBiaWdnZXIuIFRoZXJl
J3MgYSBsb3Qgb2YgdHVuaW5nCisgICAgICAgIHdlIGNvdWxkIGRvIGluIHRoZXNlIHNpemUgY2xh
c3NlcywgYnV0IGN1cnJlbnRseSB0aGV5J3JlIGFsbW9zdAorICAgICAgICBjb21wbGV0ZWx5IHVu
dXNlZCwgc28gSSBoYXZlbid0IGRvbmUgYW55IHR1bmluZy4KKworICAgICAgICBTdWJ0bGUgcG9p
bnQ6IHRoZSBsYXJnZSBhbGxvY2F0b3IgaXMgYSBkZWdlbmVyYXRlIGNhc2Ugb2Ygb3VyIGZyZWUg
bGlzdAorICAgICAgICBsb2dpYy4gSXRzIGxpc3Qgb25seSBldmVyIGNvbnRhaW5zIHplcm8gb3Ig
b25lIGl0ZW1zLgorCisgICAgICAgICogaGVhcC9IZWFwLmg6CisgICAgICAgIChKU0M6OkhlYXA6
OmFsbG9jYXRlU3RydWN0dXJlKTogUGlwZSBpbiBzaXplIGluZm9ybWF0aW9uLgorCisgICAgICAg
ICogaGVhcC9NYXJrZWRBbGxvY2F0b3IuY3BwOgorICAgICAgICAoSlNDOjpNYXJrZWRBbGxvY2F0
b3I6OnRyeUFsbG9jYXRlSGVscGVyKTogSGFuZGxlIHRoZSBjYXNlIHdoZXJlIHdlCisgICAgICAg
IGZpbmQgYSBmcmVlIGl0ZW0gaW4gdGhlIHN3ZWVwIGxpc3QgYnV0IHRoZSBpdGVtIGlzbid0IGJp
ZyBlbm91Z2guIFRoaXMKKyAgICAgICAgY2FuIGhhcHBlbiBpbiB0aGUgbGFyZ2UgYWxsb2NhdG9y
IGJlY2F1c2UgaXQgbWl4ZXMgc2l6ZXMuCisKKyAgICAgICAgKEpTQzo6TWFya2VkQWxsb2NhdG9y
Ojp0cnlBbGxvY2F0ZSk6CisgICAgICAgIChKU0M6Ok1hcmtlZEFsbG9jYXRvcjo6YWxsb2NhdGVT
bG93Q2FzZSk6IE1vcmUgcGlwaW5nLgorCisgICAgICAgIChKU0M6Ok1hcmtlZEFsbG9jYXRvcjo6
YWxsb2NhdGVCbG9jayk6IEhhbmRsZSB0aGUgb3ZlcnNpemUgY2FzZS4KKworICAgICAgICAoSlND
OjpNYXJrZWRBbGxvY2F0b3I6OmFkZEJsb2NrKTogSSBtb3ZlZCB0aGUgY2FsbCB0byBkaWRBZGRC
bG9jayBoZXJlCisgICAgICAgIGJlY2F1c2UgaXQgbWFkZSBtb3JlIHNlbnNlLgorCisgICAgICAg
ICogaGVhcC9NYXJrZWRBbGxvY2F0b3IuaDoKKyAgICAgICAgKE1hcmtlZEFsbG9jYXRvcik6Cisg
ICAgICAgIChKU0M6Ok1hcmtlZEFsbG9jYXRvcjo6YWxsb2NhdGUpOgorICAgICAgICAqIGhlYXAv
TWFya2VkU3BhY2UuY3BwOgorICAgICAgICAoSlNDOjpNYXJrZWRTcGFjZTo6TWFya2VkU3BhY2Up
OgorICAgICAgICAoSlNDOjpNYXJrZWRTcGFjZTo6cmVzZXRBbGxvY2F0b3JzKToKKyAgICAgICAg
KEpTQzo6TWFya2VkU3BhY2U6OmNhbm9uaWNhbGl6ZUNlbGxMaXZlbmVzc0RhdGEpOgorICAgICAg
ICAoSlNDOjpNYXJrZWRTcGFjZTo6aXNQYWdlZE91dCk6CisgICAgICAgIChKU0M6Ok1hcmtlZFNw
YWNlOjpmcmVlQmxvY2spOgorICAgICAgICAqIGhlYXAvTWFya2VkU3BhY2UuaDoKKyAgICAgICAg
KE1hcmtlZFNwYWNlKToKKyAgICAgICAgKEpTQzo6TWFya2VkU3BhY2U6OmFsbG9jYXRvckZvcik6
CisgICAgICAgIChKU0M6Ok1hcmtlZFNwYWNlOjpkZXN0cnVjdG9yQWxsb2NhdG9yRm9yKToKKyAg
ICAgICAgKEpTQzo6TWFya2VkU3BhY2U6OmFsbG9jYXRlV2l0aG91dERlc3RydWN0b3IpOgorICAg
ICAgICAoSlNDOjpNYXJrZWRTcGFjZTo6YWxsb2NhdGVXaXRoRGVzdHJ1Y3Rvcik6CisgICAgICAg
IChKU0M6Ok1hcmtlZFNwYWNlOjphbGxvY2F0ZVN0cnVjdHVyZSk6CisgICAgICAgIChKU0M6Ok1h
cmtlZFNwYWNlOjpmb3JFYWNoQmxvY2spOgorICAgICAgICAqIHJ1bnRpbWUvU3RydWN0dXJlLmg6
CisgICAgICAgIChKU0M6OlN0cnVjdHVyZSk6IE1vcmUgcGlwaW5nLgorCiAyMDEyLTA5LTEwICBH
ZW9mZnJleSBHYXJlbiAgPGdnYXJlbkBhcHBsZS5jb20+CiAKICAgICAgICAgVHJ5IHRvIGZpeCB0
aGUgV2luZG93cyAoMzItYml0KSBidWlsZC4KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9o
ZWFwL0hlYXAuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFw
LmgJKHJldmlzaW9uIDEyODEzMikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXAu
aAkod29ya2luZyBjb3B5KQpAQCAtMTg1LDcgKzE4NSw3IEBAIG5hbWVzcGFjZSBKU0MgewogCiAg
ICAgICAgIHZvaWQqIGFsbG9jYXRlV2l0aERlc3RydWN0b3Ioc2l6ZV90KTsKICAgICAgICAgdm9p
ZCogYWxsb2NhdGVXaXRob3V0RGVzdHJ1Y3RvcihzaXplX3QpOwotICAgICAgICB2b2lkKiBhbGxv
Y2F0ZVN0cnVjdHVyZSgpOworICAgICAgICB2b2lkKiBhbGxvY2F0ZVN0cnVjdHVyZShzaXplX3Qp
OwogCiAgICAgICAgIHN0YXRpYyBjb25zdCBzaXplX3QgbWluRXh0cmFDb3N0ID0gMjU2OwogICAg
ICAgICBzdGF0aWMgY29uc3Qgc2l6ZV90IG1heEV4dHJhQ29zdCA9IDEwMjQgKiAxMDI0OwpAQCAt
MzcyLDkgKzM3Miw5IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICByZXR1cm4gbV9vYmplY3RT
cGFjZS5hbGxvY2F0ZVdpdGhvdXREZXN0cnVjdG9yKGJ5dGVzKTsKICAgICB9CiAgICAKLSAgICBp
bmxpbmUgdm9pZCogSGVhcDo6YWxsb2NhdGVTdHJ1Y3R1cmUoKQorICAgIGlubGluZSB2b2lkKiBI
ZWFwOjphbGxvY2F0ZVN0cnVjdHVyZShzaXplX3QgYnl0ZXMpCiAgICAgewotICAgICAgICByZXR1
cm4gbV9vYmplY3RTcGFjZS5hbGxvY2F0ZVN0cnVjdHVyZSgpOworICAgICAgICByZXR1cm4gbV9v
YmplY3RTcGFjZS5hbGxvY2F0ZVN0cnVjdHVyZShieXRlcyk7CiAgICAgfQogIAogICAgIGlubGlu
ZSBDaGVja2VkQm9vbGVhbiBIZWFwOjp0cnlBbGxvY2F0ZVN0b3JhZ2Uoc2l6ZV90IGJ5dGVzLCB2
b2lkKiogb3V0UHRyKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya2VkQWxs
b2NhdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJr
ZWRBbGxvY2F0b3IuY3BwCShyZXZpc2lvbiAxMjgxMzIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaGVhcC9NYXJrZWRBbGxvY2F0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNyw3ICsyNyw3
IEBAIGJvb2wgTWFya2VkQWxsb2NhdG9yOjppc1BhZ2VkT3V0KGRvdWJsZSAKICAgICByZXR1cm4g
ZmFsc2U7CiB9CiAKLWlubGluZSB2b2lkKiBNYXJrZWRBbGxvY2F0b3I6OnRyeUFsbG9jYXRlSGVs
cGVyKCkKK2lubGluZSB2b2lkKiBNYXJrZWRBbGxvY2F0b3I6OnRyeUFsbG9jYXRlSGVscGVyKHNp
emVfdCBieXRlcykKIHsKICAgICBpZiAoIW1fZnJlZUxpc3QuaGVhZCkgewogICAgICAgICBpZiAo
bV9vbmx5Q29udGFpbnNTdHJ1Y3R1cmVzICYmICFtX2hlYXAtPmlzU2FmZVRvU3dlZXBTdHJ1Y3R1
cmVzKCkpIHsKQEAgLTQyLDEyICs0MiwyMCBAQCBpbmxpbmUgdm9pZCogTWFya2VkQWxsb2NhdG9y
Ojp0cnlBbGxvY2F0CiAgICAgICAgIH0KIAogICAgICAgICBmb3IgKE1hcmtlZEJsb2NrKiYgYmxv
Y2sgPSBtX2Jsb2Nrc1RvU3dlZXA7IGJsb2NrOyBibG9jayA9IGJsb2NrLT5uZXh0KCkpIHsKLSAg
ICAgICAgICAgIG1fZnJlZUxpc3QgPSBibG9jay0+c3dlZXAoTWFya2VkQmxvY2s6OlN3ZWVwVG9G
cmVlTGlzdCk7Ci0gICAgICAgICAgICBpZiAobV9mcmVlTGlzdC5oZWFkKSB7Ci0gICAgICAgICAg
ICAgICAgbV9jdXJyZW50QmxvY2sgPSBibG9jazsKLSAgICAgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgICAgIE1hcmtlZEJsb2NrOjpGcmVlTGlzdCBmcmVlTGlzdCA9IGJsb2NrLT5zd2VlcChN
YXJrZWRCbG9jazo6U3dlZXBUb0ZyZWVMaXN0KTsKKyAgICAgICAgICAgIGlmICghZnJlZUxpc3Qu
aGVhZCkgeworICAgICAgICAgICAgICAgIGJsb2NrLT5kaWRDb25zdW1lRnJlZUxpc3QoKTsKKyAg
ICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGJsb2Nr
LT5kaWRDb25zdW1lRnJlZUxpc3QoKTsKKworICAgICAgICAgICAgaWYgKGJ5dGVzID4gYmxvY2st
PmNlbGxTaXplKCkpIHsKKyAgICAgICAgICAgICAgICBibG9jay0+emFwRnJlZUxpc3QoZnJlZUxp
c3QpOworICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgfQorCisgICAgICAg
ICAgICBtX2N1cnJlbnRCbG9jayA9IGJsb2NrOworICAgICAgICAgICAgbV9mcmVlTGlzdCA9IGZy
ZWVMaXN0OworICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgCiAgICAgICAg
IGlmICghbV9mcmVlTGlzdC5oZWFkKSB7CkBAIC02MiwxNiArNzAsMTYgQEAgaW5saW5lIHZvaWQq
IE1hcmtlZEFsbG9jYXRvcjo6dHJ5QWxsb2NhdAogICAgIHJldHVybiBoZWFkOwogfQogICAgIAot
aW5saW5lIHZvaWQqIE1hcmtlZEFsbG9jYXRvcjo6dHJ5QWxsb2NhdGUoKQoraW5saW5lIHZvaWQq
IE1hcmtlZEFsbG9jYXRvcjo6dHJ5QWxsb2NhdGUoc2l6ZV90IGJ5dGVzKQogewogICAgIEFTU0VS
VCghbV9oZWFwLT5pc0J1c3koKSk7CiAgICAgbV9oZWFwLT5tX29wZXJhdGlvbkluUHJvZ3Jlc3Mg
PSBBbGxvY2F0aW9uOwotICAgIHZvaWQqIHJlc3VsdCA9IHRyeUFsbG9jYXRlSGVscGVyKCk7Cisg
ICAgdm9pZCogcmVzdWx0ID0gdHJ5QWxsb2NhdGVIZWxwZXIoYnl0ZXMpOwogICAgIG1faGVhcC0+
bV9vcGVyYXRpb25JblByb2dyZXNzID0gTm9PcGVyYXRpb247CiAgICAgcmV0dXJuIHJlc3VsdDsK
IH0KICAgICAKLXZvaWQqIE1hcmtlZEFsbG9jYXRvcjo6YWxsb2NhdGVTbG93Q2FzZSgpCit2b2lk
KiBNYXJrZWRBbGxvY2F0b3I6OmFsbG9jYXRlU2xvd0Nhc2Uoc2l6ZV90IGJ5dGVzKQogewogICAg
IEFTU0VSVChtX2hlYXAtPmdsb2JhbERhdGEoKS0+YXBpTG9jaygpLmN1cnJlbnRUaHJlYWRJc0hv
bGRpbmdMb2NrKCkpOwogI2lmIENPTExFQ1RfT05fRVZFUllfQUxMT0NBVElPTgpAQCAtODIsNyAr
OTAsNyBAQCB2b2lkKiBNYXJrZWRBbGxvY2F0b3I6OmFsbG9jYXRlU2xvd0Nhc2UoCiAgICAgQVNT
RVJUKCFtX2ZyZWVMaXN0LmhlYWQpOwogICAgIG1faGVhcC0+ZGlkQWxsb2NhdGUobV9mcmVlTGlz
dC5ieXRlcyk7CiAgICAgCi0gICAgdm9pZCogcmVzdWx0ID0gdHJ5QWxsb2NhdGUoKTsKKyAgICB2
b2lkKiByZXN1bHQgPSB0cnlBbGxvY2F0ZShieXRlcyk7CiAgICAgCiAgICAgaWYgKExJS0VMWShy
ZXN1bHQgIT0gMCkpCiAgICAgICAgIHJldHVybiByZXN1bHQ7CkBAIC05MCwyNyArOTgsMzkgQEAg
dm9pZCogTWFya2VkQWxsb2NhdG9yOjphbGxvY2F0ZVNsb3dDYXNlKAogICAgIGlmIChtX2hlYXAt
PnNob3VsZENvbGxlY3QoKSkgewogICAgICAgICBtX2hlYXAtPmNvbGxlY3QoSGVhcDo6RG9Ob3RT
d2VlcCk7CiAKLSAgICAgICAgcmVzdWx0ID0gdHJ5QWxsb2NhdGUoKTsKKyAgICAgICAgcmVzdWx0
ID0gdHJ5QWxsb2NhdGUoYnl0ZXMpOwogICAgICAgICBpZiAocmVzdWx0KQogICAgICAgICAgICAg
cmV0dXJuIHJlc3VsdDsKICAgICB9CiAKICAgICBBU1NFUlQoIW1faGVhcC0+c2hvdWxkQ29sbGVj
dCgpKTsKICAgICAKLSAgICBNYXJrZWRCbG9jayogYmxvY2sgPSBhbGxvY2F0ZUJsb2NrKCk7Cisg
ICAgTWFya2VkQmxvY2sqIGJsb2NrID0gYWxsb2NhdGVCbG9jayhieXRlcyk7CiAgICAgQVNTRVJU
KGJsb2NrKTsKICAgICBhZGRCbG9jayhibG9jayk7CiAgICAgICAgIAotICAgIHJlc3VsdCA9IHRy
eUFsbG9jYXRlKCk7CisgICAgcmVzdWx0ID0gdHJ5QWxsb2NhdGUoYnl0ZXMpOwogICAgIEFTU0VS
VChyZXN1bHQpOwogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKLU1hcmtlZEJsb2NrKiBNYXJrZWRB
bGxvY2F0b3I6OmFsbG9jYXRlQmxvY2soKQorTWFya2VkQmxvY2sqIE1hcmtlZEFsbG9jYXRvcjo6
YWxsb2NhdGVCbG9jayhzaXplX3QgYnl0ZXMpCiB7Ci0gICAgTWFya2VkQmxvY2sqIGJsb2NrID0g
TWFya2VkQmxvY2s6OmNyZWF0ZShtX2hlYXAtPmJsb2NrQWxsb2NhdG9yKCkuYWxsb2NhdGUoKSwg
bV9oZWFwLCBtX2NlbGxTaXplLCBtX2NlbGxzTmVlZERlc3RydWN0aW9uLCBtX29ubHlDb250YWlu
c1N0cnVjdHVyZXMpOwotICAgIG1fbWFya2VkU3BhY2UtPmRpZEFkZEJsb2NrKGJsb2NrKTsKLSAg
ICByZXR1cm4gYmxvY2s7CisgICAgc2l6ZV90IG1pbkJsb2NrU2l6ZSA9IE1hcmtlZEJsb2NrOjpi
bG9ja1NpemU7CisgICAgc2l6ZV90IG1pbkFsbG9jYXRpb25TaXplID0gV1RGOjpyb3VuZFVwVG9N
dWx0aXBsZU9mKFdURjo6cGFnZVNpemUoKSwgc2l6ZW9mKE1hcmtlZEJsb2NrKSArIGJ5dGVzKTsK
KyAgICBzaXplX3QgYmxvY2tTaXplID0gc3RkOjptYXgobWluQmxvY2tTaXplLCBtaW5BbGxvY2F0
aW9uU2l6ZSk7CisKKyAgICBzaXplX3QgY2VsbFNpemUgPSBtX2NlbGxTaXplID8gbV9jZWxsU2l6
ZSA6IFdURjo6cm91bmRVcFRvTXVsdGlwbGVPZjxNYXJrZWRCbG9jazo6YXRvbVNpemU+KGJ5dGVz
KTsKKworICAgIGlmIChibG9ja1NpemUgPT0gTWFya2VkQmxvY2s6OmJsb2NrU2l6ZSkgeworICAg
ICAgICBQYWdlQWxsb2NhdGlvbkFsaWduZWQgYWxsb2NhdGlvbiA9IG1faGVhcC0+YmxvY2tBbGxv
Y2F0b3IoKS5hbGxvY2F0ZSgpOworICAgICAgICByZXR1cm4gTWFya2VkQmxvY2s6OmNyZWF0ZShh
bGxvY2F0aW9uLCBtX2hlYXAsIGNlbGxTaXplLCBtX2NlbGxzTmVlZERlc3RydWN0aW9uLCBtX29u
bHlDb250YWluc1N0cnVjdHVyZXMpOworICAgIH0KKworICAgIFBhZ2VBbGxvY2F0aW9uQWxpZ25l
ZCBhbGxvY2F0aW9uID0gUGFnZUFsbG9jYXRpb25BbGlnbmVkOjphbGxvY2F0ZShibG9ja1NpemUs
IE1hcmtlZEJsb2NrOjpibG9ja1NpemUsIE9TQWxsb2NhdG9yOjpKU0dDSGVhcFBhZ2VzKTsKKyAg
ICBpZiAoIXN0YXRpY19jYXN0PGJvb2w+KGFsbG9jYXRpb24pKQorICAgICAgICBDUkFTSCgpOwor
ICAgIHJldHVybiBNYXJrZWRCbG9jazo6Y3JlYXRlKGFsbG9jYXRpb24sIG1faGVhcCwgY2VsbFNp
emUsIG1fY2VsbHNOZWVkRGVzdHJ1Y3Rpb24sIG1fb25seUNvbnRhaW5zU3RydWN0dXJlcyk7CiB9
CiAKIHZvaWQgTWFya2VkQWxsb2NhdG9yOjphZGRCbG9jayhNYXJrZWRCbG9jayogYmxvY2spCkBA
IC0xMjEsNiArMTQxLDcgQEAgdm9pZCBNYXJrZWRBbGxvY2F0b3I6OmFkZEJsb2NrKE1hcmtlZEJs
bwogICAgIG1fYmxvY2tMaXN0LmFwcGVuZChibG9jayk7CiAgICAgbV9ibG9ja3NUb1N3ZWVwID0g
bV9jdXJyZW50QmxvY2sgPSBibG9jazsKICAgICBtX2ZyZWVMaXN0ID0gYmxvY2stPnN3ZWVwKE1h
cmtlZEJsb2NrOjpTd2VlcFRvRnJlZUxpc3QpOworICAgIG1fbWFya2VkU3BhY2UtPmRpZEFkZEJs
b2NrKGJsb2NrKTsKIH0KIAogdm9pZCBNYXJrZWRBbGxvY2F0b3I6OnJlbW92ZUJsb2NrKE1hcmtl
ZEJsb2NrKiBibG9jaykKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtlZEFs
bG9jYXRvci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtl
ZEFsbG9jYXRvci5oCShyZXZpc2lvbiAxMjgxMzIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aGVhcC9NYXJrZWRBbGxvY2F0b3IuaAkod29ya2luZyBjb3B5KQpAQCAtMjUsNyArMjUsNyBAQCBw
dWJsaWM6CiAgICAgc2l6ZV90IGNlbGxTaXplKCkgeyByZXR1cm4gbV9jZWxsU2l6ZTsgfQogICAg
IGJvb2wgY2VsbHNOZWVkRGVzdHJ1Y3Rpb24oKSB7IHJldHVybiBtX2NlbGxzTmVlZERlc3RydWN0
aW9uOyB9CiAgICAgYm9vbCBvbmx5Q29udGFpbnNTdHJ1Y3R1cmVzKCkgeyByZXR1cm4gbV9vbmx5
Q29udGFpbnNTdHJ1Y3R1cmVzOyB9Ci0gICAgdm9pZCogYWxsb2NhdGUoKTsKKyAgICB2b2lkKiBh
bGxvY2F0ZShzaXplX3QpOwogICAgIEhlYXAqIGhlYXAoKSB7IHJldHVybiBtX2hlYXA7IH0KICAg
ICAKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jdG9yPiB2b2lkIGZvckVhY2hCbG9jayhGdW5j
dG9yJik7CkBAIC0zOSwxMCArMzksMTAgQEAgcHVibGljOgogcHJpdmF0ZToKICAgICBmcmllbmQg
Y2xhc3MgTExJbnRPZmZzZXRzRXh0cmFjdG9yOwogICAgIAotICAgIEpTX0VYUE9SVF9QUklWQVRF
IHZvaWQqIGFsbG9jYXRlU2xvd0Nhc2UoKTsKLSAgICB2b2lkKiB0cnlBbGxvY2F0ZSgpOwotICAg
IHZvaWQqIHRyeUFsbG9jYXRlSGVscGVyKCk7Ci0gICAgTWFya2VkQmxvY2sqIGFsbG9jYXRlQmxv
Y2soKTsKKyAgICBKU19FWFBPUlRfUFJJVkFURSB2b2lkKiBhbGxvY2F0ZVNsb3dDYXNlKHNpemVf
dCk7CisgICAgdm9pZCogdHJ5QWxsb2NhdGUoc2l6ZV90KTsKKyAgICB2b2lkKiB0cnlBbGxvY2F0
ZUhlbHBlcihzaXplX3QpOworICAgIE1hcmtlZEJsb2NrKiBhbGxvY2F0ZUJsb2NrKHNpemVfdCk7
CiAgICAgCiAgICAgTWFya2VkQmxvY2s6OkZyZWVMaXN0IG1fZnJlZUxpc3Q7CiAgICAgTWFya2Vk
QmxvY2sqIG1fY3VycmVudEJsb2NrOwpAQCAtNzUsMTIgKzc1LDExIEBAIGlubGluZSB2b2lkIE1h
cmtlZEFsbG9jYXRvcjo6aW5pdChIZWFwKiAKICAgICBtX29ubHlDb250YWluc1N0cnVjdHVyZXMg
PSBvbmx5Q29udGFpbnNTdHJ1Y3R1cmVzOwogfQogCi1pbmxpbmUgdm9pZCogTWFya2VkQWxsb2Nh
dG9yOjphbGxvY2F0ZSgpCitpbmxpbmUgdm9pZCogTWFya2VkQWxsb2NhdG9yOjphbGxvY2F0ZShz
aXplX3QgYnl0ZXMpCiB7CiAgICAgTWFya2VkQmxvY2s6OkZyZWVDZWxsKiBoZWFkID0gbV9mcmVl
TGlzdC5oZWFkOwotICAgIC8vIFRoaXMgaXMgYSBsaWdodC13ZWlnaHQgZmFzdCBwYXRoIHRvIGNv
dmVyIHRoZSBtb3N0IGNvbW1vbiBjYXNlLgogICAgIGlmIChVTkxJS0VMWSghaGVhZCkpCi0gICAg
ICAgIHJldHVybiBhbGxvY2F0ZVNsb3dDYXNlKCk7CisgICAgICAgIHJldHVybiBhbGxvY2F0ZVNs
b3dDYXNlKGJ5dGVzKTsKICAgICAKICAgICBtX2ZyZWVMaXN0LmhlYWQgPSBoZWFkLT5uZXh0Owog
ICAgIHJldHVybiBoZWFkOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya2Vk
U3BhY2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtl
ZFNwYWNlLmNwcAkocmV2aXNpb24gMTI4MTMyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hl
YXAvTWFya2VkU3BhY2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC05MCw2ICs5MCw3IEBAIE1hcmtl
ZFNwYWNlOjpNYXJrZWRTcGFjZShIZWFwKiBoZWFwKQogICAgICAgICBkZXN0cnVjdG9yQWxsb2Nh
dG9yRm9yKGNlbGxTaXplKS5pbml0KGhlYXAsIHRoaXMsIGNlbGxTaXplLCB0cnVlLCBmYWxzZSk7
CiAgICAgfQogCisgICAgbV9sYXJnZUFsbG9jYXRvci5pbml0KGhlYXAsIHRoaXMsIDAsIHRydWUs
IGZhbHNlKTsKICAgICBtX3N0cnVjdHVyZUFsbG9jYXRvci5pbml0KGhlYXAsIHRoaXMsIFdURjo6
cm91bmRVcFRvTXVsdGlwbGVPZigzMiwgc2l6ZW9mKFN0cnVjdHVyZSkpLCB0cnVlLCB0cnVlKTsK
IH0KIApAQCAtMTI3LDYgKzEyOCw3IEBAIHZvaWQgTWFya2VkU3BhY2U6OnJlc2V0QWxsb2NhdG9y
cygpCiAgICAgICAgIGRlc3RydWN0b3JBbGxvY2F0b3JGb3IoY2VsbFNpemUpLnJlc2V0KCk7CiAg
ICAgfQogCisgICAgbV9sYXJnZUFsbG9jYXRvci5yZXNldCgpOwogICAgIG1fc3RydWN0dXJlQWxs
b2NhdG9yLnJlc2V0KCk7CiB9CiAKQEAgLTE1Myw2ICsxNTUsNyBAQCB2b2lkIE1hcmtlZFNwYWNl
OjpjYW5vbmljYWxpemVDZWxsTGl2ZW5lCiAgICAgICAgIGRlc3RydWN0b3JBbGxvY2F0b3JGb3Io
Y2VsbFNpemUpLnphcEZyZWVMaXN0KCk7CiAgICAgfQogCisgICAgbV9sYXJnZUFsbG9jYXRvci56
YXBGcmVlTGlzdCgpOwogICAgIG1fc3RydWN0dXJlQWxsb2NhdG9yLnphcEZyZWVMaXN0KCk7CiB9
CiAKQEAgLTE2OCw2ICsxNzEsOSBAQCBib29sIE1hcmtlZFNwYWNlOjppc1BhZ2VkT3V0KGRvdWJs
ZSBkZWFkCiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAKKyAgICBpZiAobV9sYXJn
ZUFsbG9jYXRvci5pc1BhZ2VkT3V0KGRlYWRsaW5lKSkKKyAgICAgICAgcmV0dXJuIHRydWU7CisK
ICAgICBpZiAobV9zdHJ1Y3R1cmVBbGxvY2F0b3IuaXNQYWdlZE91dChkZWFkbGluZSkpCiAgICAg
ICAgIHJldHVybiB0cnVlOwogCkBAIC0xNzgsNyArMTg0LDEyIEBAIHZvaWQgTWFya2VkU3BhY2U6
OmZyZWVCbG9jayhNYXJrZWRCbG9jayoKIHsKICAgICBhbGxvY2F0b3JGb3IoYmxvY2spLnJlbW92
ZUJsb2NrKGJsb2NrKTsKICAgICBtX2Jsb2Nrcy5yZW1vdmUoYmxvY2spOwotICAgIG1faGVhcC0+
YmxvY2tBbGxvY2F0b3IoKS5kZWFsbG9jYXRlKE1hcmtlZEJsb2NrOjpkZXN0cm95KGJsb2NrKSk7
CisgICAgaWYgKGJsb2NrLT5jYXBhY2l0eSgpID09IE1hcmtlZEJsb2NrOjpibG9ja1NpemUpIHsK
KyAgICAgICAgbV9oZWFwLT5ibG9ja0FsbG9jYXRvcigpLmRlYWxsb2NhdGUoTWFya2VkQmxvY2s6
OmRlc3Ryb3koYmxvY2spKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIE1hcmtlZEJs
b2NrOjpkZXN0cm95KGJsb2NrKS5kZWFsbG9jYXRlKCk7CiB9CiAKIHZvaWQgTWFya2VkU3BhY2U6
OmZyZWVPclNocmlua0Jsb2NrKE1hcmtlZEJsb2NrKiBibG9jaykKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9oZWFwL01hcmtlZFNwYWNlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2hlYXAvTWFya2VkU3BhY2UuaAkocmV2aXNpb24gMTI4MTMyKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya2VkU3BhY2UuaAkod29ya2luZyBjb3B5KQpAQCAtODAs
NyArODAsNyBAQCBwdWJsaWM6CiAgICAgTWFya2VkQWxsb2NhdG9yJiBkZXN0cnVjdG9yQWxsb2Nh
dG9yRm9yKHNpemVfdCk7CiAgICAgdm9pZCogYWxsb2NhdGVXaXRoRGVzdHJ1Y3RvcihzaXplX3Qp
OwogICAgIHZvaWQqIGFsbG9jYXRlV2l0aG91dERlc3RydWN0b3Ioc2l6ZV90KTsKLSAgICB2b2lk
KiBhbGxvY2F0ZVN0cnVjdHVyZSgpOworICAgIHZvaWQqIGFsbG9jYXRlU3RydWN0dXJlKHNpemVf
dCk7CiAgCiAgICAgdm9pZCByZXNldEFsbG9jYXRvcnMoKTsKIApAQCAtMTE1LDE1ICsxMTUsMTUg
QEAgcHVibGljOgogCiBwcml2YXRlOgogICAgIGZyaWVuZCBjbGFzcyBMTEludE9mZnNldHNFeHRy
YWN0b3I7Ci0gICAgCi0gICAgLy8gWyAzMi4uLiAyNTYgXQorCisgICAgLy8gWyAzMi4uLiA1MTIg
XQogICAgIHN0YXRpYyBjb25zdCBzaXplX3QgcHJlY2lzZVN0ZXAgPSBNYXJrZWRCbG9jazo6YXRv
bVNpemU7Ci0gICAgc3RhdGljIGNvbnN0IHNpemVfdCBwcmVjaXNlQ3V0b2ZmID0gMjU2OworICAg
IHN0YXRpYyBjb25zdCBzaXplX3QgcHJlY2lzZUN1dG9mZiA9IDUxMjsKICAgICBzdGF0aWMgY29u
c3Qgc2l6ZV90IHByZWNpc2VDb3VudCA9IHByZWNpc2VDdXRvZmYgLyBwcmVjaXNlU3RlcDsKIAot
ICAgIC8vIFsgNTEyLi4uIDIwNDggXQotICAgIHN0YXRpYyBjb25zdCBzaXplX3QgaW1wcmVjaXNl
U3RlcCA9IHByZWNpc2VDdXRvZmY7Ci0gICAgc3RhdGljIGNvbnN0IHNpemVfdCBpbXByZWNpc2VD
dXRvZmYgPSBtYXhDZWxsU2l6ZTsKKyAgICAvLyBbIDEwMjQuLi4gYmxvY2tTaXplIF0KKyAgICBz
dGF0aWMgY29uc3Qgc2l6ZV90IGltcHJlY2lzZVN0ZXAgPSAyICogcHJlY2lzZUN1dG9mZjsKKyAg
ICBzdGF0aWMgY29uc3Qgc2l6ZV90IGltcHJlY2lzZUN1dG9mZiA9IE1hcmtlZEJsb2NrOjpibG9j
a1NpemUgLyAyOwogICAgIHN0YXRpYyBjb25zdCBzaXplX3QgaW1wcmVjaXNlQ291bnQgPSBpbXBy
ZWNpc2VDdXRvZmYgLyBpbXByZWNpc2VTdGVwOwogCiAgICAgc3RydWN0IFN1YnNwYWNlIHsKQEAg
LTEzMyw2ICsxMzMsNyBAQCBwcml2YXRlOgogCiAgICAgU3Vic3BhY2UgbV9kZXN0cnVjdG9yU3Bh
Y2U7CiAgICAgU3Vic3BhY2UgbV9ub3JtYWxTcGFjZTsKKyAgICBNYXJrZWRBbGxvY2F0b3IgbV9s
YXJnZUFsbG9jYXRvcjsKICAgICBNYXJrZWRBbGxvY2F0b3IgbV9zdHJ1Y3R1cmVBbGxvY2F0b3I7
CiAKICAgICBIZWFwKiBtX2hlYXA7CkBAIC0xNjIsMTAgKzE2MywxMiBAQCBpbmxpbmUgTWFya2Vk
QWxsb2NhdG9yJiBNYXJrZWRTcGFjZTo6ZmlyCiAKIGlubGluZSBNYXJrZWRBbGxvY2F0b3ImIE1h
cmtlZFNwYWNlOjphbGxvY2F0b3JGb3Ioc2l6ZV90IGJ5dGVzKQogewotICAgIEFTU0VSVChieXRl
cyAmJiBieXRlcyA8PSBtYXhDZWxsU2l6ZSk7CisgICAgQVNTRVJUKGJ5dGVzKTsKICAgICBpZiAo
Ynl0ZXMgPD0gcHJlY2lzZUN1dG9mZikKICAgICAgICAgcmV0dXJuIG1fbm9ybWFsU3BhY2UucHJl
Y2lzZUFsbG9jYXRvcnNbKGJ5dGVzIC0gMSkgLyBwcmVjaXNlU3RlcF07Ci0gICAgcmV0dXJuIG1f
bm9ybWFsU3BhY2UuaW1wcmVjaXNlQWxsb2NhdG9yc1soYnl0ZXMgLSAxKSAvIGltcHJlY2lzZVN0
ZXBdOworICAgIGlmIChieXRlcyA8PSBpbXByZWNpc2VDdXRvZmYpCisgICAgICAgIHJldHVybiBt
X25vcm1hbFNwYWNlLmltcHJlY2lzZUFsbG9jYXRvcnNbKGJ5dGVzIC0gMSkgLyBpbXByZWNpc2VT
dGVwXTsKKyAgICByZXR1cm4gbV9sYXJnZUFsbG9jYXRvcjsKIH0KIAogaW5saW5lIE1hcmtlZEFs
bG9jYXRvciYgTWFya2VkU3BhY2U6OmFsbG9jYXRvckZvcihNYXJrZWRCbG9jayogYmxvY2spCkBA
IC0xODEsMjUgKzE4NCwyNyBAQCBpbmxpbmUgTWFya2VkQWxsb2NhdG9yJiBNYXJrZWRTcGFjZTo6
YWxsCiAKIGlubGluZSBNYXJrZWRBbGxvY2F0b3ImIE1hcmtlZFNwYWNlOjpkZXN0cnVjdG9yQWxs
b2NhdG9yRm9yKHNpemVfdCBieXRlcykKIHsKLSAgICBBU1NFUlQoYnl0ZXMgJiYgYnl0ZXMgPD0g
bWF4Q2VsbFNpemUpOworICAgIEFTU0VSVChieXRlcyk7CiAgICAgaWYgKGJ5dGVzIDw9IHByZWNp
c2VDdXRvZmYpCiAgICAgICAgIHJldHVybiBtX2Rlc3RydWN0b3JTcGFjZS5wcmVjaXNlQWxsb2Nh
dG9yc1soYnl0ZXMgLSAxKSAvIHByZWNpc2VTdGVwXTsKLSAgICByZXR1cm4gbV9kZXN0cnVjdG9y
U3BhY2UuaW1wcmVjaXNlQWxsb2NhdG9yc1soYnl0ZXMgLSAxKSAvIGltcHJlY2lzZVN0ZXBdOwor
ICAgIGlmIChieXRlcyA8PSBpbXByZWNpc2VDdXRvZmYpCisgICAgICAgIHJldHVybiBtX25vcm1h
bFNwYWNlLmltcHJlY2lzZUFsbG9jYXRvcnNbKGJ5dGVzIC0gMSkgLyBpbXByZWNpc2VTdGVwXTsK
KyAgICByZXR1cm4gbV9sYXJnZUFsbG9jYXRvcjsKIH0KIAogaW5saW5lIHZvaWQqIE1hcmtlZFNw
YWNlOjphbGxvY2F0ZVdpdGhvdXREZXN0cnVjdG9yKHNpemVfdCBieXRlcykKIHsKLSAgICByZXR1
cm4gYWxsb2NhdG9yRm9yKGJ5dGVzKS5hbGxvY2F0ZSgpOworICAgIHJldHVybiBhbGxvY2F0b3JG
b3IoYnl0ZXMpLmFsbG9jYXRlKGJ5dGVzKTsKIH0KIAogaW5saW5lIHZvaWQqIE1hcmtlZFNwYWNl
OjphbGxvY2F0ZVdpdGhEZXN0cnVjdG9yKHNpemVfdCBieXRlcykKIHsKLSAgICByZXR1cm4gZGVz
dHJ1Y3RvckFsbG9jYXRvckZvcihieXRlcykuYWxsb2NhdGUoKTsKKyAgICByZXR1cm4gZGVzdHJ1
Y3RvckFsbG9jYXRvckZvcihieXRlcykuYWxsb2NhdGUoYnl0ZXMpOwogfQogCi1pbmxpbmUgdm9p
ZCogTWFya2VkU3BhY2U6OmFsbG9jYXRlU3RydWN0dXJlKCkKK2lubGluZSB2b2lkKiBNYXJrZWRT
cGFjZTo6YWxsb2NhdGVTdHJ1Y3R1cmUoc2l6ZV90IGJ5dGVzKQogewotICAgIHJldHVybiBtX3N0
cnVjdHVyZUFsbG9jYXRvci5hbGxvY2F0ZSgpOworICAgIHJldHVybiBtX3N0cnVjdHVyZUFsbG9j
YXRvci5hbGxvY2F0ZShieXRlcyk7CiB9CiAKIHRlbXBsYXRlIDx0eXBlbmFtZSBGdW5jdG9yPiBp
bmxpbmUgdHlwZW5hbWUgRnVuY3Rvcjo6UmV0dXJuVHlwZSBNYXJrZWRTcGFjZTo6Zm9yRWFjaEJs
b2NrKEZ1bmN0b3ImIGZ1bmN0b3IpCkBAIC0yMTQsNiArMjE5LDcgQEAgdGVtcGxhdGUgPHR5cGVu
YW1lIEZ1bmN0b3I+IGlubGluZSB0eXBlbgogICAgICAgICBtX2Rlc3RydWN0b3JTcGFjZS5pbXBy
ZWNpc2VBbGxvY2F0b3JzW2ldLmZvckVhY2hCbG9jayhmdW5jdG9yKTsKICAgICB9CiAKKyAgICBt
X2xhcmdlQWxsb2NhdG9yLmZvckVhY2hCbG9jayhmdW5jdG9yKTsKICAgICBtX3N0cnVjdHVyZUFs
bG9jYXRvci5mb3JFYWNoQmxvY2soZnVuY3Rvcik7CiAKICAgICByZXR1cm4gZnVuY3Rvci5yZXR1
cm5WYWx1ZSgpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RydWN0dXJl
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RydWN0dXJl
LmgJKHJldmlzaW9uIDEyODEzMikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0
cnVjdHVyZS5oCSh3b3JraW5nIGNvcHkpCkBAIC00NjAsNyArNDYwLDcgQEAgbmFtZXNwYWNlIEpT
QyB7CiAgICAgICAgIEFTU0VSVCghaGVhcC5nbG9iYWxEYXRhKCktPmlzSW5pdGlhbGl6aW5nT2Jq
ZWN0KCkpOwogICAgICAgICBoZWFwLmdsb2JhbERhdGEoKS0+c2V0SW5pdGlhbGl6aW5nT2JqZWN0
Q2xhc3MoJlN0cnVjdHVyZTo6c19pbmZvKTsKICNlbmRpZgotICAgICAgICBKU0NlbGwqIHJlc3Vs
dCA9IHN0YXRpY19jYXN0PEpTQ2VsbCo+KGhlYXAuYWxsb2NhdGVTdHJ1Y3R1cmUoKSk7CisgICAg
ICAgIEpTQ2VsbCogcmVzdWx0ID0gc3RhdGljX2Nhc3Q8SlNDZWxsKj4oaGVhcC5hbGxvY2F0ZVN0
cnVjdHVyZShzaXplb2YoU3RydWN0dXJlKSkpOwogICAgICAgICByZXN1bHQtPmNsZWFyU3RydWN0
dXJlKCk7CiAgICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgfQo=
</data>
<flag name="commit-queue"
          id="174648"
          type_id="3"
          status="-"
          setter="buildbot"
    />
          </attachment>
      

    </bug>

</bugzilla>