<?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>138942</bug_id>
          
          <creation_ts>2014-11-20 16:29:57 -0800</creation_ts>
          <short_desc>Removed the custom allocator for PODRedBlackTree</short_desc>
          <delta_ts>2014-11-20 18:27:07 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>New Bugs</component>
          <version>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>
          <cc>benjamin</cc>
    
    <cc>commit-queue</cc>
    
    <cc>esprehn+autocc</cc>
    
    <cc>glenn</cc>
    
    <cc>kling</cc>
    
    <cc>kondapallykalyan</cc>
    
    <cc>sam</cc>
    
    <cc>WebkitBugTracker</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1050306</commentid>
    <comment_count>0</comment_count>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2014-11-20 16:29:57 -0800</bug_when>
    <thetext>Removed the custom allocator for PODRedBlackTree</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1050309</commentid>
    <comment_count>1</comment_count>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2014-11-20 16:37:57 -0800</bug_when>
    <thetext>Benchmark results (using PerformanceTests/Layout/float*):

Baseline:
floats_100_100.html: mean: 91.1718554492836 ms; stdev: 1.3918589890850632 ms
floats_100_100_nested.html: mean: 100.49385774946131 ms; median: 100.05755349629908 ms
floats_20_100.html: mean: 277.7535506003914 ms; median: 277.76054949936224 ms
floats_20_100_nested.html: mean: 494.03283490028116 ms; stdev: 3.6272360800676324 ms
floats_2_100.html: mean: 196.86348635004833 ms; stdev: 4.035362228138497 ms
floats_2_100_nested.html: mean: 573.9511935502378 ms; stdev: 2.9780811856821683 ms
floats_50_100.html: mean: 182.97691660009147 ms; stdev: 2.5367743906601987 ms
floats_50_100_nested.html: mean: 229.38113970049017 ms; stdev: 2.325508081507197 ms

Patch:
~/OpenSource/PerformanceTests/Layout&gt; cat results-patch.txt 
floats_100_100.html: mean: 88.71689805018835 ms; stdev: 1.363018374233766 ms
floats_100_100_nested.html: mean: 98.24441215023398 ms; stdev: 2.7629447157770586 ms
floats_20_100.html: mean: 279.18915980080783 ms; stdev: 5.142024415145014 ms
floats_20_100_nested.html: mean: 495.1849814511661 ms; stdev: 4.086517310884674 ms
floats_2_100.html: mean: 199.62681959987094 ms; stdev: 3.2710243141682187 ms
floats_2_100_nested.html: mean: 578.9757075501255 ms; stdev: 3.644157356812131 ms
floats_50_100.html: mean: 176.08423344972834 ms; stdev: 2.033621745702075 ms
floats_50_100_nested.html: mean: 226.00061699959042 ms; stdev: 2.011903990152965 ms

Summary:
floats_100_100.html:		2.8% faster
floats_100_100_nested.html:	2.3% faster
floats_20_100.html:		0.5% slower
floats_20_100_nested.html:	0.2% slower
floats_2_100.html:		1.4% slower
floats_2_100_nested.html:	0.9% slower
floats_50_100.html:		3.9% faster
floats_50_100_nested.html:	1.5% faster
***geometric mean***:		0.9% faster

The goal here is just to eliminate unnecessary complexity without regression. A small speedup is a nice bonus.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1050313</commentid>
    <comment_count>2</comment_count>
      <attachid>242003</attachid>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2014-11-20 16:49:44 -0800</bug_when>
    <thetext>Created attachment 242003
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1050340</commentid>
    <comment_count>3</comment_count>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2014-11-20 18:27:07 -0800</bug_when>
    <thetext>Committed r176431: &lt;http://trac.webkit.org/changeset/176431&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>242003</attachid>
            <date>2014-11-20 16:49:44 -0800</date>
            <delta_ts>2014-11-20 17:36:35 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-138942-20141120165000.patch</filename>
            <type>text/plain</type>
            <size>35477</size>
            <attacher name="Geoffrey Garen">ggaren</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDE3NjQyNikKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDczIEBACisyMDE0LTExLTIwICBHZW9mZnJl
eSBHYXJlbiAgPGdnYXJlbkBhcHBsZS5jb20+CisKKyAgICAgICAgUmVtb3ZlZCB0aGUgY3VzdG9t
IGFsbG9jYXRvciBmb3IgUE9EUmVkQmxhY2tUcmVlCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMzg5NDIKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JP
RFkgKE9PUFMhKS4KKworICAgICAgICBibWFsbG9jIGlzIGZhc3QgZW5vdWdoLgorCisgICAgICAg
ICogV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAgICAqIHBsYXRmb3Jt
L1BPREFyZW5hLmg6IFJlbW92ZWQuCisgICAgICAgICogcGxhdGZvcm0vUE9ERnJlZUxpc3RBcmVu
YS5oOiBSZW1vdmVkLiBUaGlzIGlzIHRoZSBwb2ludCBvZiB0aGUgcGF0Y2guCisKKyAgICAgICAg
KiBwbGF0Zm9ybS9QT0RJbnRlcnZhbFRyZWUuaDoKKyAgICAgICAgKFdlYkNvcmU6OlBPREludGVy
dmFsVHJlZTo6UE9ESW50ZXJ2YWxUcmVlKTogRGVsZXRlZC4gQXMgYSBzaWRlIGVmZmVjdAorICAg
ICAgICBvZiByZW1vdmluZyBvdXIgY3VzdG9tIGFsbG9jYXRvciwgd2UgY2FuIG5vIGxvbmdlciBo
YXZlIGEgc3BlY2lhbAorICAgICAgICAiSSdtIG5vdCBpbml0aWFsaXplZCB5ZXQiIHN0YXRlLiBJ
bnN0ZWFkLCB0aGUgdHJlZSBlaXRoZXIgZXhpc3RzIG9yIG5vdCwKKyAgICAgICAgbGlrZSBhbiBp
ZGlvbWF0aWMgQysrIG9iamVjdC4KKworICAgICAgICAqIHBsYXRmb3JtL1BPRFJlZEJsYWNrVHJl
ZS5oOgorICAgICAgICAoV2ViQ29yZTo6UE9EUmVkQmxhY2tUcmVlOjpQT0RSZWRCbGFja1RyZWUp
OiBEaXR0by4KKworICAgICAgICAoV2ViQ29yZTo6UE9EUmVkQmxhY2tUcmVlOjp+UE9EUmVkQmxh
Y2tUcmVlKTogV2UgbmVlZCB0byBjbGVhciBpbiBvdXIKKyAgICAgICAgZGVzdHJ1Y3RvciBiZWNh
dXNlIHdlIGNhbiBubyBsb25nZXIgcmVseSBvbiB0aGUgYXJlbmEgZGVzdHJ1Y3RvcgorICAgICAg
ICBpbXBsaWNpdGx5IGZyZWVpbmcgb3VyIHRyZWUgbm9kZXMuCisKKyAgICAgICAgU2lkZSBub3Rl
OiBUaGlzIGNoYW5nZSBiYXNpY2FsbHkgcmVtb3ZlcyB0aGUgd2hvbGUgcmVhc29uIGZvciBoYXZp
bmcKKyAgICAgICAgYSBwdXJwb3NlLWJ1aWx0IHRyZWUgZm9yIFBPRCBkYXRhLiBXZSBzaG91bGQg
cHJvYmFibHkgcmVtb3ZlIHRoaXMgd2hvbGUKKyAgICAgICAgZGF0YSBzdHJ1Y3R1cmUgaW4gYSBm
b2xsb3ctdXAgcGF0Y2gsIGFuZCBqdXN0IHVzZSBhIHN0YW5kYXJkIHRyZWUuCisKKyAgICAgICAg
KFdlYkNvcmU6OlBPRFJlZEJsYWNrVHJlZTo6Y2xlYXIpOgorICAgICAgICAoV2ViQ29yZTo6UE9E
UmVkQmxhY2tUcmVlOjphZGQpOgorICAgICAgICAoV2ViQ29yZTo6UE9EUmVkQmxhY2tUcmVlOjpy
ZW1vdmUpOgorICAgICAgICAoV2ViQ29yZTo6UE9EUmVkQmxhY2tUcmVlOjpjb250YWlucyk6Cisg
ICAgICAgIChXZWJDb3JlOjpQT0RSZWRCbGFja1RyZWU6OnZpc2l0SW5vcmRlcik6CisgICAgICAg
IChXZWJDb3JlOjpQT0RSZWRCbGFja1RyZWU6OnNpemUpOgorICAgICAgICAoV2ViQ29yZTo6UE9E
UmVkQmxhY2tUcmVlOjpjaGVja0ludmFyaWFudHMpOgorICAgICAgICAoV2ViQ29yZTo6UE9EUmVk
QmxhY2tUcmVlOjpkdW1wKToKKyAgICAgICAgKFdlYkNvcmU6OlBPRFJlZEJsYWNrVHJlZTo6ZGVs
ZXRlTm9kZSk6CisgICAgICAgIChXZWJDb3JlOjpQT0RSZWRCbGFja1RyZWU6Om1hcmtGcmVlKTog
VXNlIG5vcm1hbCBuZXcvZGVsZXRlLCBhbmQgbWFyaworICAgICAgICBvdXJzZWx2ZXMgYXMgZmFz
dCBhbGxvY2F0ZWQgc28gd2UgZ2V0IHRoZSBibWFsbG9jIGdvb2RuZXNzLgorCisgICAgICAgIChX
ZWJDb3JlOjpQT0RSZWRCbGFja1RyZWU6OmlzSW5pdGlhbGl6ZWQpOiBEZWxldGVkLgorICAgICAg
ICAoV2ViQ29yZTo6UE9EUmVkQmxhY2tUcmVlOjppbml0SWZOZWVkZWQpOiBEZWxldGVkLgorCisg
ICAgICAgICogcmVuZGVyaW5nL0Zsb2F0aW5nT2JqZWN0cy5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpGbG9hdGluZ09iamVjdHM6OmZpbmROZXh0RmxvYXRMb2dpY2FsQm90dG9tQmVsb3cpOgorICAg
ICAgICAoV2ViQ29yZTo6RmxvYXRpbmdPYmplY3RzOjpmaW5kTmV4dEZsb2F0TG9naWNhbEJvdHRv
bUJlbG93Rm9yQmxvY2spOgorICAgICAgICAoV2ViQ29yZTo6RmxvYXRpbmdPYmplY3RzOjpGbG9h
dGluZ09iamVjdHMpOgorICAgICAgICAoV2ViQ29yZTo6RmxvYXRpbmdPYmplY3RzOjpjbGVhcik6
CisgICAgICAgIChXZWJDb3JlOjpGbG9hdGluZ09iamVjdHM6OmFkZFBsYWNlZE9iamVjdCk6Cisg
ICAgICAgIChXZWJDb3JlOjpGbG9hdGluZ09iamVjdHM6OnJlbW92ZVBsYWNlZE9iamVjdCk6Cisg
ICAgICAgIChXZWJDb3JlOjpGbG9hdGluZ09iamVjdHM6OmNvbXB1dGVQbGFjZWRGbG9hdHNUcmVl
KToKKyAgICAgICAgKFdlYkNvcmU6OkZsb2F0aW5nT2JqZWN0czo6cGxhY2VkRmxvYXRzVHJlZSk6
CisgICAgICAgIChXZWJDb3JlOjpGbG9hdGluZ09iamVjdHM6OmxvZ2ljYWxMZWZ0T2Zmc2V0Rm9y
UG9zaXRpb25pbmdGbG9hdCk6CisgICAgICAgIChXZWJDb3JlOjpGbG9hdGluZ09iamVjdHM6Omxv
Z2ljYWxSaWdodE9mZnNldEZvclBvc2l0aW9uaW5nRmxvYXQpOgorICAgICAgICAoV2ViQ29yZTo6
RmxvYXRpbmdPYmplY3RzOjpsb2dpY2FsTGVmdE9mZnNldCk6CisgICAgICAgIChXZWJDb3JlOjpG
bG9hdGluZ09iamVjdHM6OmxvZ2ljYWxSaWdodE9mZnNldCk6IFBPRCB0cmVlIGhhZCBhIHNsaWdo
dGx5CisgICAgICAgIHdlaXJkIGJlaGF2aW9yIGluIHdoaWNoIGl0IHdhcyB2YWxpZCB0byB1c2Ug
c29tZSBvZiBpdHMgQVBJcyB3aXRob3V0CisgICAgICAgIGZpcnN0IGluaXRpYWxpemluZyBpdCwg
YnV0IG5vdCBvdGhlcnMuIEl0J3Mgbm90IHJlYWxseSBwb3NzaWJsZSB0byBtb2RlbAorICAgICAg
ICB0aGF0IGJlaGF2aW9yIHdpdGggbm9ybWFsIEMrKyBvYmplY3RzIHRoYXQgdXNlIG5ldy9kZWxl
dGUsIHNvIGluc3RlYWQKKyAgICAgICAgSSBhZGRlZCBzb21lIGV4cGxpY2l0IE5VTEwgY2hlY2tz
LgorCisgICAgICAgICogcmVuZGVyaW5nL0Zsb2F0aW5nT2JqZWN0cy5oOgorICAgICAgICAqIHJl
bmRlcmluZy9SZW5kZXJGbG93VGhyZWFkLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckZs
b3dUaHJlYWQ6OnVwZGF0ZVJlZ2lvbnNGbG93VGhyZWFkUG9ydGlvblJlY3QpOgorICAgICAgICAq
IHJlbmRlcmluZy9SZW5kZXJWaWV3LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclZpZXc6
OmludGVydmFsQXJlbmEpOiBEZWxldGVkLgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJWaWV3
Lmg6IFJlbW92ZWQgY3VzdG9tLWFsbG9jYXRvci1yZWxhdGVkIGNydWZ0LgorCiAyMDE0LTExLTIw
ICBEZWFuIEphY2tzb24gIDxkaW5vQGFwcGxlLmNvbT4KIAogICAgICAgICBTdXBwb3J0IHVucHJl
Zml4ZWQgYW5pbWF0aW9uIGV2ZW50IHR5cGVzCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9XZWJDb3Jl
Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
V2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiAxNzYyODkpCisrKyBT
b3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHdvcmtpbmcg
Y29weSkKQEAgLTk4MCw3ICs5ODAsNiBAQAogCQkxQ0ZBRTMyMzBBNkQ2QTNGMDAzMjU5M0QgLyog
bGlib2JqYy5keWxpYiBpbiBGcmFtZXdvcmtzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDFDRkFFMzIyMEE2RDZBM0YwMDMyNTkzRCAvKiBsaWJvYmpjLmR5bGliICovOyB9Owog
CQkxRjNDM0JFQTEzNUNBRjNDMDBCOEMxQUMgLyogTWVkaWFDb250cm9scy5jcHAgaW4gU291cmNl
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxRjNDM0JFODEzNUNBRjNDMDBC
OEMxQUMgLyogTWVkaWFDb250cm9scy5jcHAgKi87IH07CiAJCTFGM0MzQkVCMTM1Q0FGM0MwMEI4
QzFBQyAvKiBNZWRpYUNvbnRyb2xzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSAxRjNDM0JFOTEzNUNBRjNDMDBCOEMxQUMgLyogTWVkaWFDb250cm9scy5o
ICovOyB9OwotCQkxRjNGMTk1MzE0OTlDQTc2MDBBNUFFQTcgLyogUE9ERnJlZUxpc3RBcmVuYS5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMUYzRjE5NTIx
NDk5Q0E3NjAwQTVBRUE3IC8qIFBPREZyZWVMaXN0QXJlbmEuaCAqLzsgc2V0dGluZ3MgPSB7QVRU
UklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkxRjcyQkYwQTE4N0ZENDQ5MDAwOUJDQjMg
LyogVGlsZUNvbnRyb2xsZXJNZW1vcnlIYW5kbGVySU9TLmNwcCBpbiBTb3VyY2VzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDFGNzJCRjA4MTg3RkQ0MjcwMDA5QkNCMyAvKiBU
aWxlQ29udHJvbGxlck1lbW9yeUhhbmRsZXJJT1MuY3BwICovOyB9OwogCQkxRjcyQkYwQjE4N0ZE
NDVDMDAwOUJDQjMgLyogVGlsZUNvbnRyb2xsZXJNZW1vcnlIYW5kbGVySU9TLmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxRjcyQkYwOTE4N0ZENDI3MDAw
OUJDQjMgLyogVGlsZUNvbnRyb2xsZXJNZW1vcnlIYW5kbGVySU9TLmggKi87IHNldHRpbmdzID0g
e0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMUZBRkJGMTgxNUE1RkE2RTAwMDgz
QTIwIC8qIFVUSVV0aWxpdGllcy5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDFGQUZCRjE3MTVBNUZBNTIwMDA4M0EyMCAvKiBVVElVdGlsaXRpZXMubW0g
Ki87IH07CkBAIC01MzEwLDcgKzUzMDksNiBAQAogCQlCQ0I3NzM2MjBDMTc4NTNEMDAxMzJCQTQg
LyogSlNOb2RlRmlsdGVyQ29uZGl0aW9uLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSBCQ0I3NzM1RjBDMTc4NTNEMDAxMzJCQTQgLyogSlNOb2RlRmlsdGVy
Q29uZGl0aW9uLmggKi87IH07CiAJCUJDQjc3MzYzMEMxNzg1M0QwMDEzMkJBNCAvKiBKU05vZGVG
aWx0ZXJDdXN0b20uY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gQkNCNzczNjAwQzE3ODUzRDAwMTMyQkE0IC8qIEpTTm9kZUZpbHRlckN1c3RvbS5jcHAg
Ki87IH07CiAJCUJDQjkyRDRGMTI5MzU1MEIwMEM4Mzg3RiAvKiBGb250QmFzZWxpbmUuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEJDQjkyRDRFMTI5MzU1
MEIwMEM4Mzg3RiAvKiBGb250QmFzZWxpbmUuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9
IChQcml2YXRlLCApOyB9OyB9OwotCQlCQ0JCOEFCODEzRjFBRkIwMDA3MzRERjAgLyogUE9EQXJl
bmEuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEJDQkI4
QUI0MTNGMUFGQjAwMDczNERGMCAvKiBQT0RBcmVuYS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJV
VEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCUJDQkI4QUI5MTNGMUFGQjAwMDczNERGMCAvKiBQ
T0RJbnRlcnZhbC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gQkNCQjhBQjUxM0YxQUZCMDAwNzM0REYwIC8qIFBPREludGVydmFsLmggKi87IHNldHRpbmdz
ID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJQkNCQjhBQkExM0YxQUZCMDAw
NzM0REYwIC8qIFBPREludGVydmFsVHJlZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gQkNCQjhBQjYxM0YxQUZCMDAwNzM0REYwIC8qIFBPREludGVydmFs
VHJlZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJ
CUJDQkI4QUJCMTNGMUFGQjAwMDczNERGMCAvKiBQT0RSZWRCbGFja1RyZWUuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEJDQkI4QUI3MTNGMUFGQjAwMDcz
NERGMCAvKiBQT0RSZWRCbGFja1RyZWUuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQ
cml2YXRlLCApOyB9OyB9OwpAQCAtNzk2OCw3ICs3OTY2LDYgQEAKIAkJMUNGQUUzMjIwQTZENkEz
RjAwMzI1OTNEIC8qIGxpYm9iamMuZHlsaWIgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
bGFzdEtub3duRmlsZVR5cGUgPSAiY29tcGlsZWQubWFjaC1vLmR5bGliIjsgbmFtZSA9IGxpYm9i
amMuZHlsaWI7IHBhdGggPSAvdXNyL2xpYi9saWJvYmpjLmR5bGliOyBzb3VyY2VUcmVlID0gIjxh
YnNvbHV0ZT4iOyB9OwogCQkxRjNDM0JFODEzNUNBRjNDMDBCOEMxQUMgLyogTWVkaWFDb250cm9s
cy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBNZWRpYUNvbnRyb2xz
LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMUYzQzNCRTkxMzVDQUYzQzAwQjhD
MUFDIC8qIE1lZGlhQ29udHJvbHMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0g
TWVkaWFDb250cm9scy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQkxRjNGMTk1MjE0
OTlDQTc2MDBBNUFFQTcgLyogUE9ERnJlZUxpc3RBcmVuYS5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IHBhdGggPSBQT0RGcmVlTGlzdEFyZW5hLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCTFGNzJCRjA4MTg3RkQ0MjcwMDA5QkNCMyAvKiBUaWxlQ29udHJvbGxlck1lbW9yeUhh
bmRsZXJJT1MuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gVGlsZUNv
bnRyb2xsZXJNZW1vcnlIYW5kbGVySU9TLmNwcDsgcGF0aCA9IGlvcy9UaWxlQ29udHJvbGxlck1l
bW9yeUhhbmRsZXJJT1MuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkxRjcyQkYw
OTE4N0ZENDI3MDAwOUJDQjMgLyogVGlsZUNvbnRyb2xsZXJNZW1vcnlIYW5kbGVySU9TLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IFRpbGVDb250cm9sbGVyTWVtb3J5SGFuZGxl
cklPUy5oOyBwYXRoID0gaW9zL1RpbGVDb250cm9sbGVyTWVtb3J5SGFuZGxlcklPUy5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkxRkFGQkYxNjE1QTVGQTUyMDAwODNBMjAgLyogVVRJ
VXRpbGl0aWVzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFVUSVV0aWxpdGll
cy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMTI3MzAsNyArMTI3MjcsNiBAQAog
CQlCQ0I3NzM1RjBDMTc4NTNEMDAxMzJCQTQgLyogSlNOb2RlRmlsdGVyQ29uZGl0aW9uLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBKU05vZGVGaWx0ZXJDb25kaXRpb24uaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQkNCNzczNjAwQzE3ODUzRDAwMTMyQkE0IC8q
IEpTTm9kZUZpbHRlckN1c3RvbS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBw
YXRoID0gSlNOb2RlRmlsdGVyQ3VzdG9tLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJQkNCOTJENEUxMjkzNTUwQjAwQzgzODdGIC8qIEZvbnRCYXNlbGluZS5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBGb250QmFzZWxpbmUuaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKLQkJQkNCQjhBQjQxM0YxQUZCMDAwNzM0REYwIC8qIFBPREFyZW5hLmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFBPREFyZW5hLmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCUJDQkI4QUI1MTNGMUFGQjAwMDczNERGMCAvKiBQT0RJbnRlcnZhbC5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBQT0RJbnRlcnZhbC5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQlCQ0JCOEFCNjEzRjFBRkIwMDA3MzRERjAgLyogUE9ESW50ZXJ2
YWxUcmVlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFBPREludGVydmFsVHJl
ZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlCQ0JCOEFCNzEzRjFBRkIwMDA3MzRE
RjAgLyogUE9EUmVkQmxhY2tUcmVlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9
IFBPRFJlZEJsYWNrVHJlZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMjE0NDks
OCArMjE0NDUsNiBAQAogCQkJCTFBRDhGODFBMTFDQUI5RTkwMEU5M0U1NCAvKiBQbGF0Zm9ybVN0
cmF0ZWdpZXMuY3BwICovLAogCQkJCTFBRDhGODE5MTFDQUI5RTkwMEU5M0U1NCAvKiBQbGF0Zm9y
bVN0cmF0ZWdpZXMuaCAqLywKIAkJCQk5MzVDNDc2QTA5QUM0RDRGMDBBNkFBQjQgLyogUGxhdGZv
cm1XaGVlbEV2ZW50LmggKi8sCi0JCQkJQkNCQjhBQjQxM0YxQUZCMDAwNzM0REYwIC8qIFBPREFy
ZW5hLmggKi8sCi0JCQkJMUYzRjE5NTIxNDk5Q0E3NjAwQTVBRUE3IC8qIFBPREZyZWVMaXN0QXJl
bmEuaCAqLywKIAkJCQlCQ0JCOEFCNTEzRjFBRkIwMDA3MzRERjAgLyogUE9ESW50ZXJ2YWwuaCAq
LywKIAkJCQlCQ0JCOEFCNjEzRjFBRkIwMDA3MzRERjAgLyogUE9ESW50ZXJ2YWxUcmVlLmggKi8s
CiAJCQkJQkNCQjhBQjcxM0YxQUZCMDAwNzM0REYwIC8qIFBPRFJlZEJsYWNrVHJlZS5oICovLApA
QCAtMjU2MjksOCArMjU2MjMsNiBAQAogCQkJCTcxRTIxODNBMTczNTlGQjgwMDZFNkU0RCAvKiBQ
bHVnSW5zUmVzb3VyY2VzLmggaW4gSGVhZGVycyAqLywKIAkJCQkxQUE4Nzk5MDExQ0JFODQ2MDAz
QzY2NEYgLyogUGx1Z2luU3RyYXRlZ3kuaCBpbiBIZWFkZXJzICovLAogCQkJCTBBRkRBQzNEMTBG
NTQ0OEMwMEUxRjNEMiAvKiBQbHVnaW5WaWV3QmFzZS5oIGluIEhlYWRlcnMgKi8sCi0JCQkJQkNC
QjhBQjgxM0YxQUZCMDAwNzM0REYwIC8qIFBPREFyZW5hLmggaW4gSGVhZGVycyAqLywKLQkJCQkx
RjNGMTk1MzE0OTlDQTc2MDBBNUFFQTcgLyogUE9ERnJlZUxpc3RBcmVuYS5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJQkNCQjhBQjkxM0YxQUZCMDAwNzM0REYwIC8qIFBPREludGVydmFsLmggaW4gSGVh
ZGVycyAqLywKIAkJCQlCQ0JCOEFCQTEzRjFBRkIwMDA3MzRERjAgLyogUE9ESW50ZXJ2YWxUcmVl
LmggaW4gSGVhZGVycyAqLywKIAkJCQlCQ0JCOEFCQjEzRjFBRkIwMDA3MzRERjAgLyogUE9EUmVk
QmxhY2tUcmVlLmggaW4gSGVhZGVycyAqLywKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L1BPREFyZW5hLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vUE9EQXJl
bmEuaAkocmV2aXNpb24gMTc2Mjg5KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vUE9EQXJl
bmEuaAkod29ya2luZyBjb3B5KQpAQCAtMSw2NyArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChD
KSAyMDEwIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKgotICogMS4gIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgotICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
Ci0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRS
SUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKLSAqIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9T
RSBBUkUKLSAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05U
UklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKLSAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCi0gKiAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7Ci0gKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVT
SU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKLSAqIE9OIEFOWSBUSEVPUlkg
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKLSAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2lmbmRlZiBQT0RB
cmVuYV9oCi0jZGVmaW5lIFBPREFyZW5hX2gKLQotI2luY2x1ZGUgPHN0ZGludC5oPgotI2luY2x1
ZGUgPHd0Zi9Bc3NlcnRpb25zLmg+Ci0jaW5jbHVkZSA8d3RmL0Zhc3RNYWxsb2MuaD4KLSNpbmNs
dWRlIDx3dGYvTm9uY29weWFibGUuaD4KLSNpbmNsdWRlIDx3dGYvT3duUHRyLmg+Ci0jaW5jbHVk
ZSA8d3RmL1Bhc3NPd25QdHIuaD4KLSNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgotI2luY2x1
ZGUgPHd0Zi9WZWN0b3IuaD4KLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi0vLyBBbiBhcmVuYSB3
aGljaCBhbGxvY2F0ZXMgb25seSBQbGFpbiBPbGQgRGF0YSAoUE9EKSwgb3IgY2xhc3NlcyBhbmQK
LS8vIHN0cnVjdHMgYm90dG9taW5nIG91dCBpbiBQbGFpbiBPbGQgRGF0YS4gTk9URTogdGhlIGNv
bnN0cnVjdG9ycyBvZgotLy8gdGhlIG9iamVjdHMgYWxsb2NhdGVkIGluIHRoaXMgYXJlbmEgYXJl
IGNhbGxlZCwgYnV0IF9ub3RfIHRoZWlyCi0vLyBkZXN0cnVjdG9ycy4KLQotY2xhc3MgUE9EQXJl
bmEgOiBwdWJsaWMgUmVmQ291bnRlZDxQT0RBcmVuYT4gewotcHJvdGVjdGVkOgotICAgIHZpcnR1
YWwgflBPREFyZW5hKCkgeyB9Ci0gICAgZnJpZW5kIGNsYXNzIFdURjo6UmVmQ291bnRlZDxQT0RB
cmVuYT47Ci0KLSAgICAvLyBSZXR1cm5zIHRoZSBhbGlnbm1lbnQgcmVxdWlyZW1lbnQgZm9yIGNs
YXNzZXMgYW5kIHN0cnVjdHMgb24gdGhlCi0gICAgLy8gY3VycmVudCBwbGF0Zm9ybS4KLSAgICB0
ZW1wbGF0ZSA8Y2xhc3MgVD4gc3RhdGljIHNpemVfdCBtaW5BbGlnbm1lbnQoKQotICAgIHsKLSAg
ICAgICAgcmV0dXJuIHN0ZDo6YWxpZ25tZW50X29mPFQ+Ojp2YWx1ZTsKLSAgICB9Ci0KLSAgICAv
LyBSb3VuZHMgdXAgdGhlIGdpdmVuIGFsbG9jYXRpb24gc2l6ZSB0byB0aGUgc3BlY2lmaWVkIGFs
aWdubWVudC4KLSAgICBzaXplX3Qgcm91bmRVcChzaXplX3Qgc2l6ZSwgc2l6ZV90IGFsaWdubWVu
dCkKLSAgICB7Ci0gICAgICAgIEFTU0VSVCghKGFsaWdubWVudCAlIDIpKTsKLSAgICAgICAgcmV0
dXJuIChzaXplICsgYWxpZ25tZW50IC0gMSkgJiB+KGFsaWdubWVudCAtIDEpOwotICAgIH0KLX07
Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKLQotI2VuZGlmIC8vIFBPREFyZW5hX2gKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1BPREZyZWVMaXN0QXJlbmEuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9QT0RGcmVlTGlzdEFyZW5hLmgJKHJldmlzaW9uIDE3
NjI4OSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1BPREZyZWVMaXN0QXJlbmEuaAkod29y
a2luZyBjb3B5KQpAQCAtMSwxOTIgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMSBB
cHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBP
UiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAot
ICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICog
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4gCi0gKi8KLQotI2lmbmRlZiBQT0RGcmVlTGlzdEFyZW5hX2gKLSNkZWZpbmUg
UE9ERnJlZUxpc3RBcmVuYV9oCi0KLSNpbmNsdWRlICJQT0RBcmVuYS5oIgotCi1uYW1lc3BhY2Ug
V2ViQ29yZSB7Ci0KLXRlbXBsYXRlIDxjbGFzcyBUPgotY2xhc3MgUE9ERnJlZUxpc3RBcmVuYSA6
IHB1YmxpYyBQT0RBcmVuYSB7Ci1wdWJsaWM6Ci0gICAgc3RhdGljIFBhc3NSZWZQdHI8UE9ERnJl
ZUxpc3RBcmVuYT4gY3JlYXRlKCkKLSAgICB7Ci0gICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcg
UE9ERnJlZUxpc3RBcmVuYSk7Ci0gICAgfQotCi0gICAgdGVtcGxhdGU8Y2xhc3MgQXJndW1lbnQx
VHlwZT4gVCogYWxsb2NhdGVPYmplY3QoY29uc3QgQXJndW1lbnQxVHlwZSYgYXJndW1lbnQxKQot
ICAgIHsKLSNpZiBkZWZpbmVkKEFERFJFU1NfU0FOSVRJWkVSKQotICAgICAgICByZXR1cm4gbmV3
IFQoYXJndW1lbnQxKTsKLSNlbHNlCi0gICAgICAgIHNpemVfdCByb3VuZGVkU2l6ZSA9IHJvdW5k
VXAoc2l6ZW9mKFQpLCBtaW5BbGlnbm1lbnQ8VD4oKSk7Ci0gICAgICAgIHZvaWQqIHB0ciA9IGFs
bG9jYXRlKHJvdW5kZWRTaXplKTsKLSAgICAgICAgaWYgKHB0cikgewotICAgICAgICAgICAgLy8g
VXNlIHBsYWNlbWVudCBvcGVyYXRvciBuZXcgdG8gYWxsb2NhdGUgYSBUIGF0IHRoaXMgbG9jYXRp
b24uCi0gICAgICAgICAgICBuZXcocHRyKSBUKGFyZ3VtZW50MSk7Ci0gICAgICAgIH0KLSAgICAg
ICAgcmV0dXJuIHN0YXRpY19jYXN0PFQqPihwdHIpOwotI2VuZGlmCi0gICAgfQotCi0gICAgdm9p
ZCBmcmVlT2JqZWN0KFQqIHB0cikKLSAgICB7Ci0jaWYgZGVmaW5lZChBRERSRVNTX1NBTklUSVpF
UikKLSAgICAgICAgZGVsZXRlIHB0cjsKLSNlbHNlCi0gICAgICAgIGZvciAodHlwZW5hbWUgVmVj
dG9yPE93blB0cjxGcmVlTGlzdENodW5rPj46OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbV9jaHVua3Mu
YmVnaW4oKSwgZW5kID0gbV9jaHVua3MuZW5kKCk7IGl0ICE9IGVuZDsgKytpdCkgewotICAgICAg
ICAgICAgRnJlZUxpc3RDaHVuayogY2h1bmsgPSBzdGF0aWNfY2FzdDxGcmVlTGlzdENodW5rKj4o
aXQtPmdldCgpKTsKLSAgICAgICAgICAgIGlmIChjaHVuay0+Y29udGFpbnMocHRyKSkKLSAgICAg
ICAgICAgICAgICBjaHVuay0+ZnJlZShwdHIpOwotICAgICAgICB9Ci0jZW5kaWYKLSAgICB9Ci0K
LXByaXZhdGU6Ci0gICAgLy8gVGhlIGluaXRpYWwgc2l6ZSBvZiBhbGxvY2F0ZWQgY2h1bmtzOyBp
bmNyZWFzZXMgYXMgbmVjZXNzYXJ5IHRvCi0gICAgLy8gc2F0aXNmeSBsYXJnZSBhbGxvY2F0aW9u
cy4gTWFpbmx5IHB1YmxpYyBmb3IgdW5pdCB0ZXN0cy4KLSAgICBlbnVtIHsKLSAgICAgICAgRGVm
YXVsdENodW5rU2l6ZSA9IDE2Mzg0Ci0gICAgfTsKLQotICAgIFBPREZyZWVMaXN0QXJlbmEoKQot
ICAgICAgICA6IG1fY3VycmVudCgwKQotICAgICAgICAsIG1fY3VycmVudENodW5rU2l6ZShEZWZh
dWx0Q2h1bmtTaXplKQotICAgIHsKLSAgICB9Ci0KLSAgICB2b2lkKiBhbGxvY2F0ZShzaXplX3Qg
c2l6ZSkKLSAgICB7Ci0gICAgICAgIHZvaWQqIHB0ciA9IDA7Ci0gICAgICAgIGlmIChtX2N1cnJl
bnQpIHsKLSAgICAgICAgICAgIC8vIEZpcnN0IGFsbG9jYXRlIGZyb20gdGhlIGN1cnJlbnQgY2h1
bmsuCi0gICAgICAgICAgICBwdHIgPSBtX2N1cnJlbnQtPmFsbG9jYXRlKHNpemUpOwotICAgICAg
ICAgICAgaWYgKCFwdHIpIHsKLSAgICAgICAgICAgICAgICAvLyBDaGVjayBpZiB3ZSBjYW4gYWxs
b2NhdGUgZnJvbSBvdGhlciBjaHVua3MnIGZyZWUgbGlzdC4KLSAgICAgICAgICAgICAgICBmb3Ig
KHR5cGVuYW1lIFZlY3RvcjxPd25QdHI8RnJlZUxpc3RDaHVuaz4+Ojpjb25zdF9pdGVyYXRvciBp
dCA9IG1fY2h1bmtzLmJlZ2luKCksIGVuZCA9IG1fY2h1bmtzLmVuZCgpOyBpdCAhPSBlbmQ7ICsr
aXQpIHsKLSAgICAgICAgICAgICAgICAgICAgRnJlZUxpc3RDaHVuayogY2h1bmsgPSBzdGF0aWNf
Y2FzdDxGcmVlTGlzdENodW5rKj4oaXQtPmdldCgpKTsKLSAgICAgICAgICAgICAgICAgICAgaWYg
KGNodW5rLT5oYXNGcmVlTGlzdCgpKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBwdHIgPSBj
aHVuay0+YWxsb2NhdGUoc2l6ZSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAocHRyKQot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgICB9
Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAg
aWYgKCFwdHIpIHsKLSAgICAgICAgICAgIGlmIChzaXplID4gbV9jdXJyZW50Q2h1bmtTaXplKQot
ICAgICAgICAgICAgICAgIG1fY3VycmVudENodW5rU2l6ZSA9IHNpemU7Ci0gICAgICAgICAgICBt
X2NodW5rcy5hcHBlbmQoYWRvcHRQdHIobmV3IEZyZWVMaXN0Q2h1bmsobV9jdXJyZW50Q2h1bmtT
aXplKSkpOwotICAgICAgICAgICAgbV9jdXJyZW50ID0gbV9jaHVua3MubGFzdCgpLmdldCgpOwot
ICAgICAgICAgICAgcHRyID0gbV9jdXJyZW50LT5hbGxvY2F0ZShzaXplKTsKLSAgICAgICAgfQot
ICAgICAgICByZXR1cm4gcHRyOwotICAgIH0KLQotICAgIC8vIE1hbmFnZXMgYSBjaHVuayBvZiBt
ZW1vcnkgYW5kIGluZGl2aWR1YWwgYWxsb2NhdGlvbnMgb3V0IG9mIGl0LgotICAgIGNsYXNzIEZy
ZWVMaXN0Q2h1bmsgewotICAgICAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShGcmVlTGlzdENodW5r
KTsKLQotICAgICAgICBzdHJ1Y3QgRnJlZUNlbGwgewotICAgICAgICAgICAgRnJlZUNlbGwgKm1f
bmV4dDsKLSAgICAgICAgfTsKLSAgICBwdWJsaWM6Ci0gICAgICAgIGV4cGxpY2l0IEZyZWVMaXN0
Q2h1bmsoc2l6ZV90IHNpemUpCi0gICAgICAgICAgICA6IG1fc2l6ZShzaXplKQotICAgICAgICAg
ICAgLCBtX2N1cnJlbnRPZmZzZXQoMCkKLSAgICAgICAgICAgICwgbV9mcmVlTGlzdCgwKQotICAg
ICAgICB7Ci0gICAgICAgICAgICBtX2Jhc2UgPSBzdGF0aWNfY2FzdDx1aW50OF90Kj4oZmFzdE1h
bGxvYyhzaXplKSk7Ci0gICAgICAgIH0KLQotICAgICAgICAvLyBGcmVlcyB0aGUgbWVtb3J5IGFs
bG9jYXRlZCBmcm9tIHRoZSBBbGxvY2F0b3IgaW4gdGhlCi0gICAgICAgIC8vIGNvbnN0cnVjdG9y
LgotICAgICAgICB+RnJlZUxpc3RDaHVuaygpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGZhc3RG
cmVlKG1fYmFzZSk7Ci0gICAgICAgIH0KLQotICAgICAgICAvLyBSZXR1cm5zIGEgcG9pbnRlciB0
byAic2l6ZSIgYnl0ZXMgb2Ygc3RvcmFnZSwgb3IgMCBpZiB0aGlzCi0gICAgICAgIC8vIENodW5r
IGNvdWxkIG5vdCBzYXRpc2Z5IHRoZSBhbGxvY2F0aW9uLgotICAgICAgICB2b2lkKiBhbGxvY2F0
ZShzaXplX3Qgc2l6ZSkKLSAgICAgICAgewotICAgICAgICAgICAgaWYgKG1fZnJlZUxpc3QpIHsK
LSAgICAgICAgICAgICAgICAvLyBSZXVzZSBhIGNlbGwgZnJvbSB0aGUgZnJlZSBsaXN0LgotICAg
ICAgICAgICAgICAgIHZvaWQgKmNlbGwgPSBtX2ZyZWVMaXN0OwotICAgICAgICAgICAgICAgIG1f
ZnJlZUxpc3QgPSBtX2ZyZWVMaXN0LT5tX25leHQ7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGNl
bGw7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIC8vIENoZWNrIGZvciBvdmVyZmxvdwot
ICAgICAgICAgICAgaWYgKG1fY3VycmVudE9mZnNldCArIHNpemUgPCBtX2N1cnJlbnRPZmZzZXQp
Ci0gICAgICAgICAgICAgICAgcmV0dXJuIDA7Ci0KLSAgICAgICAgICAgIGlmIChtX2N1cnJlbnRP
ZmZzZXQgKyBzaXplID4gbV9zaXplKQotICAgICAgICAgICAgICAgIHJldHVybiAwOwotCi0gICAg
ICAgICAgICB2b2lkKiByZXN1bHQgPSBtX2Jhc2UgKyBtX2N1cnJlbnRPZmZzZXQ7Ci0gICAgICAg
ICAgICBtX2N1cnJlbnRPZmZzZXQgKz0gc2l6ZTsKLSAgICAgICAgICAgIHJldHVybiByZXN1bHQ7
Ci0gICAgICAgIH0KLQotICAgICAgICB2b2lkIGZyZWUodm9pZCogcHRyKQotICAgICAgICB7Ci0g
ICAgICAgICAgICAvLyBBZGQgdGhlIHBvaW50ZXIgdG8gZnJlZSBsaXN0LgotICAgICAgICAgICAg
QVNTRVJUKGNvbnRhaW5zKHB0cikpOwotCi0gICAgICAgICAgICBGcmVlQ2VsbCogY2VsbCA9IHJl
aW50ZXJwcmV0X2Nhc3Q8RnJlZUNlbGwqPihwdHIpOwotICAgICAgICAgICAgY2VsbC0+bV9uZXh0
ID0gbV9mcmVlTGlzdDsKLSAgICAgICAgICAgIG1fZnJlZUxpc3QgPSBjZWxsOwotICAgICAgICB9
Ci0KLSAgICAgICAgYm9vbCBjb250YWlucyh2b2lkKiBwdHIpIGNvbnN0Ci0gICAgICAgIHsKLSAg
ICAgICAgICAgIHJldHVybiBwdHIgPj0gbV9iYXNlICYmIHB0ciA8IG1fYmFzZSArIG1fc2l6ZTsK
LSAgICAgICAgfQotCi0gICAgICAgIGJvb2wgaGFzRnJlZUxpc3QoKSBjb25zdAotICAgICAgICB7
Ci0gICAgICAgICAgICByZXR1cm4gbV9mcmVlTGlzdDsKLSAgICAgICAgfQotCi0gICAgcHJpdmF0
ZToKLSAgICAgICAgdWludDhfdCogbV9iYXNlOwotICAgICAgICBzaXplX3QgbV9zaXplOwotICAg
ICAgICBzaXplX3QgbV9jdXJyZW50T2Zmc2V0OwotCi0gICAgICAgIEZyZWVDZWxsICptX2ZyZWVM
aXN0OwotICAgIH07Ci0KLSAgICBGcmVlTGlzdENodW5rKiBtX2N1cnJlbnQ7Ci0gICAgc2l6ZV90
IG1fY3VycmVudENodW5rU2l6ZTsKLSAgICBWZWN0b3I8T3duUHRyPEZyZWVMaXN0Q2h1bms+PiBt
X2NodW5rczsKLX07Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKLQotI2VuZGlmCkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9QT0RJbnRlcnZhbFRyZWUuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9QT0RJbnRlcnZhbFRyZWUuaAkocmV2aXNpb24gMTc2Mjg5
KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vUE9ESW50ZXJ2YWxUcmVlLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTI2LDcgKzI2LDYgQEAKICNpZm5kZWYgUE9ESW50ZXJ2YWxUcmVlX2gKICNkZWZp
bmUgUE9ESW50ZXJ2YWxUcmVlX2gKIAotI2luY2x1ZGUgIlBPREFyZW5hLmgiCiAjaW5jbHVkZSAi
UE9ESW50ZXJ2YWwuaCIKICNpbmNsdWRlICJQT0RSZWRCbGFja1RyZWUuaCIKICNpbmNsdWRlICJW
YWx1ZVRvU3RyaW5nLmgiCkBAIC02Nyw2ICs2Niw3IEBAIHByaXZhdGU6CiAvLyBpbnRlcnZhbHMg
aW4gdGhlIHRyZWUuCiB0ZW1wbGF0ZTxjbGFzcyBULCBjbGFzcyBVc2VyRGF0YSA9IHZvaWQqPgog
Y2xhc3MgUE9ESW50ZXJ2YWxUcmVlIDogcHVibGljIFBPRFJlZEJsYWNrVHJlZTxQT0RJbnRlcnZh
bDxULCBVc2VyRGF0YT4+IHsKKyAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKICAgICBXVEZf
TUFLRV9OT05DT1BZQUJMRShQT0RJbnRlcnZhbFRyZWUpOwogcHVibGljOgogICAgIC8vIFR5cGVk
ZWYgdG8gcmVkdWNlIHR5cGluZyB3aGVuIGRlY2xhcmluZyBpbnRlcnZhbHMgdG8gYmUgc3RvcmVk
IGluCkBAIC03NCwyNCArNzQsMTIgQEAgcHVibGljOgogICAgIHR5cGVkZWYgUE9ESW50ZXJ2YWw8
VCwgVXNlckRhdGE+IEludGVydmFsVHlwZTsKICAgICB0eXBlZGVmIFBPREludGVydmFsU2VhcmNo
QWRhcHRlcjxULCBVc2VyRGF0YT4gSW50ZXJ2YWxTZWFyY2hBZGFwdGVyVHlwZTsKIAotICAgIFBP
REludGVydmFsVHJlZShVbmluaXRpYWxpemVkVHJlZUVudW0gdW5pdGlhbGl6ZWRUcmVlKQotICAg
ICAgICA6IFBPRFJlZEJsYWNrVHJlZTxJbnRlcnZhbFR5cGU+KHVuaXRpYWxpemVkVHJlZSkKLSAg
ICB7Ci0gICAgICAgIGluaXQoKTsKLSAgICB9Ci0gICAgCiAgICAgUE9ESW50ZXJ2YWxUcmVlKCkK
ICAgICAgICAgOiBQT0RSZWRCbGFja1RyZWU8SW50ZXJ2YWxUeXBlPigpCiAgICAgewogICAgICAg
ICBpbml0KCk7CiAgICAgfQogCi0gICAgZXhwbGljaXQgUE9ESW50ZXJ2YWxUcmVlKFBhc3NSZWZQ
dHI8UE9EQXJlbmE+IGFyZW5hKQotICAgICAgICA6IFBPRFJlZEJsYWNrVHJlZTxJbnRlcnZhbFR5
cGU+KGFyZW5hKQotICAgIHsKLSAgICAgICAgaW5pdCgpOwotICAgIH0KLQogICAgIC8vIFJldHVy
bnMgYWxsIGludGVydmFscyBpbiB0aGUgdHJlZSB3aGljaCBvdmVybGFwIHRoZSBnaXZlbiBxdWVy
eQogICAgIC8vIGludGVydmFsLiBUaGUgcmV0dXJuZWQgaW50ZXJ2YWxzIGFyZSBzb3J0ZWQgYnkg
aW5jcmVhc2luZyBsb3cKICAgICAvLyBlbmRwb2ludC4KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL1BPRFJlZEJsYWNrVHJlZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL1BPRFJlZEJsYWNrVHJlZS5oCShyZXZpc2lvbiAxNzYyODkpCisrKyBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9QT0RSZWRCbGFja1RyZWUuaAkod29ya2luZyBjb3B5KQpAQCAtNzIsNyAr
NzIsNiBAQAogI2lmbmRlZiBQT0RSZWRCbGFja1RyZWVfaAogI2RlZmluZSBQT0RSZWRCbGFja1Ry
ZWVfaAogCi0jaW5jbHVkZSAiUE9ERnJlZUxpc3RBcmVuYS5oIgogI2luY2x1ZGUgIlZhbHVlVG9T
dHJpbmcuaCIKICNpbmNsdWRlIDx3dGYvQXNzZXJ0aW9ucy5oPgogI2luY2x1ZGUgPHd0Zi9Ob25j
b3B5YWJsZS5oPgpAQCAtODUsMTIgKzg0LDkgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1l
bnVtIFVuaW5pdGlhbGl6ZWRUcmVlRW51bSB7Ci0gICAgVW5pbml0aWFsaXplZFRyZWUKLX07Ci0K
IHRlbXBsYXRlPGNsYXNzIFQ+CiBjbGFzcyBQT0RSZWRCbGFja1RyZWUgeworICAgIFdURl9NQUtF
X0ZBU1RfQUxMT0NBVEVEOwogcHVibGljOgogICAgIGNsYXNzIE5vZGU7CiAKQEAgLTEwMiwxMSAr
OTgsNyBAQCBwdWJsaWM6CiAgICAgICAgIHZpcnR1YWwgflZpc2l0b3IoKSB7IH0KICAgICB9Owog
Ci0gICAgLy8gQ29uc3RydWN0cyBhIG5ldyByZWQtYmxhY2sgdHJlZSB3aXRob3V0IGFsbG9jYXRp
bmcgYW4gYXJlbmEuCi0gICAgLy8gaXNJbml0aWFsaXplZCB3aWxsIHJldHVybiBmYWxzZSBpbiB0
aGlzIGNhc2UuIGluaXRJZk5lZWRlZCBjYW4gYmUgdXNlZAotICAgIC8vIHRvIGluaXQgdGhlIHN0
cnVjdHVyZS4gVGhpcyBjb25zdHJ1Y3RvciBpcyB1c2VmdWxsIGZvciBjcmVhdGluZwotICAgIC8v
IGxhenkgaW5pdGlhbGl6ZWQgdHJlZS4KLSAgICBleHBsaWNpdCBQT0RSZWRCbGFja1RyZWUoVW5p
bml0aWFsaXplZFRyZWVFbnVtKQorICAgIFBPRFJlZEJsYWNrVHJlZSgpCiAgICAgICAgIDogbV9y
b290KDApCiAgICAgICAgICwgbV9uZWVkc0Z1bGxPcmRlcmluZ0NvbXBhcmlzb25zKGZhbHNlKQog
I2lmbmRlZiBOREVCVUcKQEAgLTExNSw2OSArMTA3LDI4IEBAIHB1YmxpYzoKICAgICB7CiAgICAg
fQogCi0gICAgLy8gQ29uc3RydWN0cyBhIG5ldyByZWQtYmxhY2sgdHJlZSwgYWxsb2NhdGluZyB0
ZW1wb3Jhcnkgb2JqZWN0cwotICAgIC8vIGZyb20gYSBuZXdseSBjb25zdHJ1Y3RlZCBQT0RGcmVl
TGlzdEFyZW5hLgotICAgIFBPRFJlZEJsYWNrVHJlZSgpCi0gICAgICAgIDogbV9hcmVuYShQT0RG
cmVlTGlzdEFyZW5hPE5vZGU+OjpjcmVhdGUoKSkKLSAgICAgICAgLCBtX3Jvb3QoMCkKLSAgICAg
ICAgLCBtX25lZWRzRnVsbE9yZGVyaW5nQ29tcGFyaXNvbnMoZmFsc2UpCi0jaWZuZGVmIE5ERUJV
RwotICAgICAgICAsIG1fdmVyYm9zZURlYnVnZ2luZyhmYWxzZSkKLSNlbmRpZgorICAgIHZpcnR1
YWwgflBPRFJlZEJsYWNrVHJlZSgpCiAgICAgeworICAgICAgICBjbGVhcigpOwogICAgIH0KIAot
ICAgIC8vIENvbnN0cnVjdHMgYSBuZXcgcmVkLWJsYWNrIHRyZWUsIGFsbG9jYXRpbmcgdGVtcG9y
YXJ5IG9iamVjdHMKLSAgICAvLyBmcm9tIHRoZSBnaXZlbiBQT0RBcmVuYS4KLSAgICBleHBsaWNp
dCBQT0RSZWRCbGFja1RyZWUoUGFzc1JlZlB0cjxQT0RGcmVlTGlzdEFyZW5hPE5vZGU+PiBhcmVu
YSkKLSAgICAgICAgOiBtX2FyZW5hKGFyZW5hKQotICAgICAgICAsIG1fcm9vdCgwKQotICAgICAg
ICAsIG1fbmVlZHNGdWxsT3JkZXJpbmdDb21wYXJpc29ucyhmYWxzZSkKLSNpZm5kZWYgTkRFQlVH
Ci0gICAgICAgICwgbV92ZXJib3NlRGVidWdnaW5nKGZhbHNlKQotI2VuZGlmCi0gICAgewotICAg
IH0KLQotICAgIHZpcnR1YWwgflBPRFJlZEJsYWNrVHJlZSgpIHsgfQotCiAgICAgLy8gQ2xlYXJp
bmcgd2lsbCBkZWxldGUgdGhlIGNvbnRlbnRzIG9mIHRoZSB0cmVlLiBBZnRlciB0aGlzIGNhbGwK
ICAgICAvLyBpc0luaXRpYWxpemVkIHdpbGwgcmV0dXJuIGZhbHNlLgogICAgIHZvaWQgY2xlYXIo
KQogICAgIHsKICAgICAgICAgbWFya0ZyZWUobV9yb290KTsKLSAgICAgICAgbV9hcmVuYSA9IDA7
CiAgICAgICAgIG1fcm9vdCA9IDA7CiAgICAgfQogICAgIAotICAgIGJvb2wgaXNJbml0aWFsaXpl
ZCgpIGNvbnN0Ci0gICAgewotICAgICAgICByZXR1cm4gbV9hcmVuYTsKLSAgICB9Ci0gICAgCi0g
ICAgdm9pZCBpbml0SWZOZWVkZWQoKQotICAgIHsKLSAgICAgICAgaWYgKCFtX2FyZW5hKQotICAg
ICAgICAgICAgbV9hcmVuYSA9IFBPREZyZWVMaXN0QXJlbmE8Tm9kZT46OmNyZWF0ZSgpOwotICAg
IH0KLQotICAgIHZvaWQgaW5pdElmTmVlZGVkKFBPREZyZWVMaXN0QXJlbmE8Tm9kZT4qIGFyZW5h
KQotICAgIHsKLSAgICAgICAgaWYgKCFtX2FyZW5hKQotICAgICAgICAgICAgbV9hcmVuYSA9IGFy
ZW5hOwotICAgIH0KLQogICAgIHZvaWQgYWRkKGNvbnN0IFQmIGRhdGEpCiAgICAgewotICAgICAg
ICBBU1NFUlQoaXNJbml0aWFsaXplZCgpKTsKLSAgICAgICAgTm9kZSogbm9kZSA9IG1fYXJlbmEt
PnRlbXBsYXRlIGFsbG9jYXRlT2JqZWN0PFQ+KGRhdGEpOworICAgICAgICBOb2RlKiBub2RlID0g
bmV3IE5vZGUoZGF0YSk7CiAgICAgICAgIGluc2VydE5vZGUobm9kZSk7CiAgICAgfQogCiAgICAg
Ly8gUmV0dXJucyB0cnVlIGlmIHRoZSBkYXR1bSB3YXMgZm91bmQgaW4gdGhlIHRyZWUuCiAgICAg
Ym9vbCByZW1vdmUoY29uc3QgVCYgZGF0YSkKICAgICB7Ci0gICAgICAgIEFTU0VSVChpc0luaXRp
YWxpemVkKCkpOwogICAgICAgICBOb2RlKiBub2RlID0gdHJlZVNlYXJjaChkYXRhKTsKICAgICAg
ICAgaWYgKG5vZGUpIHsKICAgICAgICAgICAgIGRlbGV0ZU5vZGUobm9kZSk7CkBAIC0xODgsMTMg
KzEzOSwxMSBAQCBwdWJsaWM6CiAKICAgICBib29sIGNvbnRhaW5zKGNvbnN0IFQmIGRhdGEpIGNv
bnN0CiAgICAgewotICAgICAgICBBU1NFUlQoaXNJbml0aWFsaXplZCgpKTsKICAgICAgICAgcmV0
dXJuIHRyZWVTZWFyY2goZGF0YSk7CiAgICAgfQogCiAgICAgdm9pZCB2aXNpdElub3JkZXIoVmlz
aXRvciogdmlzaXRvcikgY29uc3QKICAgICB7Ci0gICAgICAgIEFTU0VSVChpc0luaXRpYWxpemVk
KCkpOwogICAgICAgICBpZiAoIW1fcm9vdCkKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAg
dmlzaXRJbm9yZGVySW1wbChtX3Jvb3QsIHZpc2l0b3IpOwpAQCAtMjAyLDcgKzE1MSw2IEBAIHB1
YmxpYzoKIAogICAgIGludCBzaXplKCkgY29uc3QKICAgICB7Ci0gICAgICAgIEFTU0VSVChpc0lu
aXRpYWxpemVkKCkpOwogICAgICAgICBDb3VudGVyIGNvdW50ZXI7CiAgICAgICAgIHZpc2l0SW5v
cmRlcigmY291bnRlcik7CiAgICAgICAgIHJldHVybiBjb3VudGVyLmNvdW50KCk7CkBAIC0yMTYs
NyArMTY0LDYgQEAgcHVibGljOgogCiAgICAgdmlydHVhbCBib29sIGNoZWNrSW52YXJpYW50cygp
IGNvbnN0CiAgICAgewotICAgICAgICBBU1NFUlQoaXNJbml0aWFsaXplZCgpKTsKICAgICAgICAg
aW50IGJsYWNrQ291bnQ7CiAgICAgICAgIHJldHVybiBjaGVja0ludmFyaWFudHNGcm9tTm9kZSht
X3Jvb3QsICZibGFja0NvdW50KTsKICAgICB9CkBAIC0yMjYsOCArMTczLDcgQEAgcHVibGljOgog
ICAgIC8vIGRlYnVnZ2luZyBwdXJwb3Nlcy4KICAgICB2b2lkIGR1bXAoKSBjb25zdAogICAgIHsK
LSAgICAgICAgaWYgKG1fYXJlbmEpCi0gICAgICAgICAgICBkdW1wRnJvbU5vZGUobV9yb290LCAw
KTsKKyAgICAgICAgZHVtcEZyb21Ob2RlKG1fcm9vdCwgMCk7CiAgICAgfQogCiAgICAgLy8gVHVy
bnMgb24gb3Igb2ZmIHZlcmJvc2UgZGVidWdnaW5nIG9mIHRoZSB0cmVlLCBjYXVzaW5nIG1hbnkK
QEAgLTI0OCw2ICsxOTQsNyBAQCBwdWJsaWM6CiAgICAgLy8gYW4gaW50ZXJuYWwgY29uY2VwdDsg
dXNlcnMgb2YgdGhlIHRyZWUgZGVhbCBvbmx5IHdpdGggdGhlIGRhdGEKICAgICAvLyB0aGV5IHN0
b3JlIGluIGl0LgogICAgIGNsYXNzIE5vZGUgeworICAgICAgICBXVEZfTUFLRV9GQVNUX0FMTE9D
QVRFRDsKICAgICAgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoTm9kZSk7CiAgICAgcHVibGljOgog
ICAgICAgICAvLyBDb25zdHJ1Y3Rvci4gTmV3bHktY3JlYXRlZCBub2RlcyBhcmUgY29sb3JlZCBy
ZWQuCkBAIC02OTUsNyArNjQyLDcgQEAgcHJpdmF0ZToKICAgICAgICAgaWYgKHktPmNvbG9yKCkg
PT0gQmxhY2spCiAgICAgICAgICAgICBkZWxldGVGaXh1cCh4LCB4UGFyZW50KTsKIAotICAgICAg
ICBtX2FyZW5hLT5mcmVlT2JqZWN0KHkpOworICAgICAgICBkZWxldGUgeTsKICAgICB9CiAKICAg
ICAvLyBWaXNpdHMgdGhlIHN1YnRyZWUgcm9vdGVkIGF0IHRoZSBnaXZlbiBub2RlIGluIG9yZGVy
LgpAQCAtNzE3LDcgKzY2NCw3IEBAIHByaXZhdGU6CiAgICAgICAgICAgICBtYXJrRnJlZShub2Rl
LT5sZWZ0KCkpOwogICAgICAgICBpZiAobm9kZS0+cmlnaHQoKSkKICAgICAgICAgICAgIG1hcmtG
cmVlKG5vZGUtPnJpZ2h0KCkpOwotICAgICAgICBtX2FyZW5hLT5mcmVlT2JqZWN0KG5vZGUpOwor
ICAgICAgICBkZWxldGUgbm9kZTsKICAgICB9CiAKICAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KQEAgLTgx
MCw3ICs3NTcsNiBAQCBwcml2YXRlOgogICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICAgIC8vIERhdGEg
bWVtYmVycwogCi0gICAgUmVmUHRyPFBPREZyZWVMaXN0QXJlbmE8Tm9kZT4+IG1fYXJlbmE7CiAg
ICAgTm9kZSogbV9yb290OwogICAgIGJvb2wgbV9uZWVkc0Z1bGxPcmRlcmluZ0NvbXBhcmlzb25z
OwogI2lmbmRlZiBOREVCVUcKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9GbG9hdGlu
Z09iamVjdHMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9GbG9h
dGluZ09iamVjdHMuY3BwCShyZXZpc2lvbiAxNzYyODkpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvRmxvYXRpbmdPYmplY3RzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjM2LDcgKzIzNiw4
IEBAIGlubGluZSB2b2lkIEZpbmROZXh0RmxvYXRMb2dpY2FsQm90dG9tQWQKIExheW91dFVuaXQg
RmxvYXRpbmdPYmplY3RzOjpmaW5kTmV4dEZsb2F0TG9naWNhbEJvdHRvbUJlbG93KExheW91dFVu
aXQgbG9naWNhbEhlaWdodCkKIHsKICAgICBGaW5kTmV4dEZsb2F0TG9naWNhbEJvdHRvbUFkYXB0
ZXIgYWRhcHRlcihtX3JlbmRlcmVyLCBsb2dpY2FsSGVpZ2h0KTsKLSAgICBwbGFjZWRGbG9hdHNU
cmVlKCkuYWxsT3ZlcmxhcHNXaXRoQWRhcHRlcihhZGFwdGVyKTsKKyAgICBpZiAoY29uc3QgRmxv
YXRpbmdPYmplY3RUcmVlKiBwbGFjZWRGbG9hdHNUcmVlID0gdGhpcy0+cGxhY2VkRmxvYXRzVHJl
ZSgpKQorICAgICAgICBwbGFjZWRGbG9hdHNUcmVlLT5hbGxPdmVybGFwc1dpdGhBZGFwdGVyKGFk
YXB0ZXIpOwogCiAgICAgcmV0dXJuIGFkYXB0ZXIubmV4dFNoYXBlTG9naWNhbEJvdHRvbSgpOwog
fQpAQCAtMjQ0LDE0ICsyNDUsMTQgQEAgTGF5b3V0VW5pdCBGbG9hdGluZ09iamVjdHM6OmZpbmRO
ZXh0RmxvYQogTGF5b3V0VW5pdCBGbG9hdGluZ09iamVjdHM6OmZpbmROZXh0RmxvYXRMb2dpY2Fs
Qm90dG9tQmVsb3dGb3JCbG9jayhMYXlvdXRVbml0IGxvZ2ljYWxIZWlnaHQpCiB7CiAgICAgRmlu
ZE5leHRGbG9hdExvZ2ljYWxCb3R0b21BZGFwdGVyIGFkYXB0ZXIobV9yZW5kZXJlciwgbG9naWNh
bEhlaWdodCk7Ci0gICAgcGxhY2VkRmxvYXRzVHJlZSgpLmFsbE92ZXJsYXBzV2l0aEFkYXB0ZXIo
YWRhcHRlcik7CisgICAgaWYgKGNvbnN0IEZsb2F0aW5nT2JqZWN0VHJlZSogcGxhY2VkRmxvYXRz
VHJlZSA9IHRoaXMtPnBsYWNlZEZsb2F0c1RyZWUoKSkKKyAgICAgICAgcGxhY2VkRmxvYXRzVHJl
ZS0+YWxsT3ZlcmxhcHNXaXRoQWRhcHRlcihhZGFwdGVyKTsKIAogICAgIHJldHVybiBhZGFwdGVy
Lm5leHRMb2dpY2FsQm90dG9tKCk7CiB9CiAKIEZsb2F0aW5nT2JqZWN0czo6RmxvYXRpbmdPYmpl
Y3RzKGNvbnN0IFJlbmRlckJsb2NrRmxvdyYgcmVuZGVyZXIpCi0gICAgOiBtX3BsYWNlZEZsb2F0
c1RyZWUoVW5pbml0aWFsaXplZFRyZWUpCi0gICAgLCBtX2xlZnRPYmplY3RzQ291bnQoMCkKKyAg
ICA6IG1fbGVmdE9iamVjdHNDb3VudCgwKQogICAgICwgbV9yaWdodE9iamVjdHNDb3VudCgwKQog
ICAgICwgbV9ob3Jpem9udGFsV3JpdGluZ01vZGUocmVuZGVyZXIuaXNIb3Jpem9udGFsV3JpdGlu
Z01vZGUoKSkKICAgICAsIG1fcmVuZGVyZXIocmVuZGVyZXIpCkBAIC0yNzQsNyArMjc1LDcgQEAg
dm9pZCBGbG9hdGluZ09iamVjdHM6OmNsZWFyTGluZUJveFRyZWVQbwogdm9pZCBGbG9hdGluZ09i
amVjdHM6OmNsZWFyKCkKIHsKICAgICBtX3NldC5jbGVhcigpOwotICAgIG1fcGxhY2VkRmxvYXRz
VHJlZS5jbGVhcigpOworICAgIG1fcGxhY2VkRmxvYXRzVHJlZSA9IG51bGxwdHI7CiAgICAgbV9s
ZWZ0T2JqZWN0c0NvdW50ID0gMDsKICAgICBtX3JpZ2h0T2JqZWN0c0NvdW50ID0gMDsKIH0KQEAg
LTMyMSw4ICszMjIsOCBAQCB2b2lkIEZsb2F0aW5nT2JqZWN0czo6YWRkUGxhY2VkT2JqZWN0KEZs
CiAgICAgQVNTRVJUKCFmbG9hdGluZ09iamVjdC0+aXNJblBsYWNlZFRyZWUoKSk7CiAKICAgICBm
bG9hdGluZ09iamVjdC0+c2V0SXNQbGFjZWQodHJ1ZSk7Ci0gICAgaWYgKG1fcGxhY2VkRmxvYXRz
VHJlZS5pc0luaXRpYWxpemVkKCkpCi0gICAgICAgIG1fcGxhY2VkRmxvYXRzVHJlZS5hZGQoaW50
ZXJ2YWxGb3JGbG9hdGluZ09iamVjdChmbG9hdGluZ09iamVjdCkpOworICAgIGlmIChtX3BsYWNl
ZEZsb2F0c1RyZWUpCisgICAgICAgIG1fcGxhY2VkRmxvYXRzVHJlZS0+YWRkKGludGVydmFsRm9y
RmxvYXRpbmdPYmplY3QoZmxvYXRpbmdPYmplY3QpKTsKIAogI2lmbmRlZiBOREVCVUcKICAgICBm
bG9hdGluZ09iamVjdC0+c2V0SXNJblBsYWNlZFRyZWUodHJ1ZSk7CkBAIC0zMzMsOCArMzM0LDgg
QEAgdm9pZCBGbG9hdGluZ09iamVjdHM6OnJlbW92ZVBsYWNlZE9iamVjdAogewogICAgIEFTU0VS
VChmbG9hdGluZ09iamVjdC0+aXNQbGFjZWQoKSAmJiBmbG9hdGluZ09iamVjdC0+aXNJblBsYWNl
ZFRyZWUoKSk7CiAKLSAgICBpZiAobV9wbGFjZWRGbG9hdHNUcmVlLmlzSW5pdGlhbGl6ZWQoKSkg
ewotICAgICAgICBib29sIHJlbW92ZWQgPSBtX3BsYWNlZEZsb2F0c1RyZWUucmVtb3ZlKGludGVy
dmFsRm9yRmxvYXRpbmdPYmplY3QoZmxvYXRpbmdPYmplY3QpKTsKKyAgICBpZiAobV9wbGFjZWRG
bG9hdHNUcmVlKSB7CisgICAgICAgIGJvb2wgcmVtb3ZlZCA9IG1fcGxhY2VkRmxvYXRzVHJlZS0+
cmVtb3ZlKGludGVydmFsRm9yRmxvYXRpbmdPYmplY3QoZmxvYXRpbmdPYmplY3QpKTsKICAgICAg
ICAgQVNTRVJUX1VOVVNFRChyZW1vdmVkLCByZW1vdmVkKTsKICAgICB9CiAKQEAgLTM2OCwyOCAr
MzY5LDMwIEBAIHZvaWQgRmxvYXRpbmdPYmplY3RzOjpyZW1vdmUoRmxvYXRpbmdPYmoKIAogdm9p
ZCBGbG9hdGluZ09iamVjdHM6OmNvbXB1dGVQbGFjZWRGbG9hdHNUcmVlKCkKIHsKLSAgICBBU1NF
UlQoIW1fcGxhY2VkRmxvYXRzVHJlZS5pc0luaXRpYWxpemVkKCkpOworICAgIEFTU0VSVCghbV9w
bGFjZWRGbG9hdHNUcmVlKTsKICAgICBpZiAobV9zZXQuaXNFbXB0eSgpKQogICAgICAgICByZXR1
cm47Ci0gICAgbV9wbGFjZWRGbG9hdHNUcmVlLmluaXRJZk5lZWRlZChtX3JlbmRlcmVyLnZpZXco
KS5pbnRlcnZhbEFyZW5hKCkpOworCisgICAgbV9wbGFjZWRGbG9hdHNUcmVlID0gc3RkOjptYWtl
X3VuaXF1ZTxGbG9hdGluZ09iamVjdFRyZWU+KCk7CiAgICAgZm9yIChhdXRvIGl0ID0gbV9zZXQu
YmVnaW4oKSwgZW5kID0gbV9zZXQuZW5kKCk7IGl0ICE9IGVuZDsgKytpdCkgewogICAgICAgICBG
bG9hdGluZ09iamVjdCogZmxvYXRpbmdPYmplY3QgPSBpdC0+Z2V0KCk7CiAgICAgICAgIGlmIChm
bG9hdGluZ09iamVjdC0+aXNQbGFjZWQoKSkKLSAgICAgICAgICAgIG1fcGxhY2VkRmxvYXRzVHJl
ZS5hZGQoaW50ZXJ2YWxGb3JGbG9hdGluZ09iamVjdChmbG9hdGluZ09iamVjdCkpOworICAgICAg
ICAgICAgbV9wbGFjZWRGbG9hdHNUcmVlLT5hZGQoaW50ZXJ2YWxGb3JGbG9hdGluZ09iamVjdChm
bG9hdGluZ09iamVjdCkpOwogICAgIH0KIH0KIAotaW5saW5lIGNvbnN0IEZsb2F0aW5nT2JqZWN0
VHJlZSYgRmxvYXRpbmdPYmplY3RzOjpwbGFjZWRGbG9hdHNUcmVlKCkKK2lubGluZSBjb25zdCBG
bG9hdGluZ09iamVjdFRyZWUqIEZsb2F0aW5nT2JqZWN0czo6cGxhY2VkRmxvYXRzVHJlZSgpCiB7
Ci0gICAgaWYgKCFtX3BsYWNlZEZsb2F0c1RyZWUuaXNJbml0aWFsaXplZCgpKQorICAgIGlmICgh
bV9wbGFjZWRGbG9hdHNUcmVlKQogICAgICAgICBjb21wdXRlUGxhY2VkRmxvYXRzVHJlZSgpOwot
ICAgIHJldHVybiBtX3BsYWNlZEZsb2F0c1RyZWU7CisgICAgcmV0dXJuIG1fcGxhY2VkRmxvYXRz
VHJlZS5nZXQoKTsKIH0KIAogTGF5b3V0VW5pdCBGbG9hdGluZ09iamVjdHM6OmxvZ2ljYWxMZWZ0
T2Zmc2V0Rm9yUG9zaXRpb25pbmdGbG9hdChMYXlvdXRVbml0IGZpeGVkT2Zmc2V0LCBMYXlvdXRV
bml0IGxvZ2ljYWxUb3AsIExheW91dFVuaXQgKmhlaWdodFJlbWFpbmluZykKIHsKICAgICBDb21w
dXRlRmxvYXRPZmZzZXRGb3JGbG9hdExheW91dEFkYXB0ZXI8RmxvYXRpbmdPYmplY3Q6OkZsb2F0
TGVmdD4gYWRhcHRlcihtX3JlbmRlcmVyLCBsb2dpY2FsVG9wLCBsb2dpY2FsVG9wLCBmaXhlZE9m
ZnNldCk7Ci0gICAgcGxhY2VkRmxvYXRzVHJlZSgpLmFsbE92ZXJsYXBzV2l0aEFkYXB0ZXIoYWRh
cHRlcik7CisgICAgaWYgKGNvbnN0IEZsb2F0aW5nT2JqZWN0VHJlZSogcGxhY2VkRmxvYXRzVHJl
ZSA9IHRoaXMtPnBsYWNlZEZsb2F0c1RyZWUoKSkKKyAgICAgICAgcGxhY2VkRmxvYXRzVHJlZS0+
YWxsT3ZlcmxhcHNXaXRoQWRhcHRlcihhZGFwdGVyKTsKIAogICAgIGlmIChoZWlnaHRSZW1haW5p
bmcpCiAgICAgICAgICpoZWlnaHRSZW1haW5pbmcgPSBhZGFwdGVyLmhlaWdodFJlbWFpbmluZygp
OwpAQCAtNDAwLDcgKzQwMyw4IEBAIExheW91dFVuaXQgRmxvYXRpbmdPYmplY3RzOjpsb2dpY2Fs
TGVmdE8KIExheW91dFVuaXQgRmxvYXRpbmdPYmplY3RzOjpsb2dpY2FsUmlnaHRPZmZzZXRGb3JQ
b3NpdGlvbmluZ0Zsb2F0KExheW91dFVuaXQgZml4ZWRPZmZzZXQsIExheW91dFVuaXQgbG9naWNh
bFRvcCwgTGF5b3V0VW5pdCAqaGVpZ2h0UmVtYWluaW5nKQogewogICAgIENvbXB1dGVGbG9hdE9m
ZnNldEZvckZsb2F0TGF5b3V0QWRhcHRlcjxGbG9hdGluZ09iamVjdDo6RmxvYXRSaWdodD4gYWRh
cHRlcihtX3JlbmRlcmVyLCBsb2dpY2FsVG9wLCBsb2dpY2FsVG9wLCBmaXhlZE9mZnNldCk7Ci0g
ICAgcGxhY2VkRmxvYXRzVHJlZSgpLmFsbE92ZXJsYXBzV2l0aEFkYXB0ZXIoYWRhcHRlcik7Cisg
ICAgaWYgKGNvbnN0IEZsb2F0aW5nT2JqZWN0VHJlZSogcGxhY2VkRmxvYXRzVHJlZSA9IHRoaXMt
PnBsYWNlZEZsb2F0c1RyZWUoKSkKKyAgICAgICAgcGxhY2VkRmxvYXRzVHJlZS0+YWxsT3Zlcmxh
cHNXaXRoQWRhcHRlcihhZGFwdGVyKTsKIAogICAgIGlmIChoZWlnaHRSZW1haW5pbmcpCiAgICAg
ICAgICpoZWlnaHRSZW1haW5pbmcgPSBhZGFwdGVyLmhlaWdodFJlbWFpbmluZygpOwpAQCAtNDEx
LDcgKzQxNSw4IEBAIExheW91dFVuaXQgRmxvYXRpbmdPYmplY3RzOjpsb2dpY2FsUmlnaHQKIExh
eW91dFVuaXQgRmxvYXRpbmdPYmplY3RzOjpsb2dpY2FsTGVmdE9mZnNldChMYXlvdXRVbml0IGZp
eGVkT2Zmc2V0LCBMYXlvdXRVbml0IGxvZ2ljYWxUb3AsIExheW91dFVuaXQgbG9naWNhbEhlaWdo
dCkKIHsKICAgICBDb21wdXRlRmxvYXRPZmZzZXRGb3JMaW5lTGF5b3V0QWRhcHRlcjxGbG9hdGlu
Z09iamVjdDo6RmxvYXRMZWZ0PiBhZGFwdGVyKG1fcmVuZGVyZXIsIGxvZ2ljYWxUb3AsIGxvZ2lj
YWxUb3AgKyBsb2dpY2FsSGVpZ2h0LCBmaXhlZE9mZnNldCk7Ci0gICAgcGxhY2VkRmxvYXRzVHJl
ZSgpLmFsbE92ZXJsYXBzV2l0aEFkYXB0ZXIoYWRhcHRlcik7CisgICAgaWYgKGNvbnN0IEZsb2F0
aW5nT2JqZWN0VHJlZSogcGxhY2VkRmxvYXRzVHJlZSA9IHRoaXMtPnBsYWNlZEZsb2F0c1RyZWUo
KSkKKyAgICAgICAgcGxhY2VkRmxvYXRzVHJlZS0+YWxsT3ZlcmxhcHNXaXRoQWRhcHRlcihhZGFw
dGVyKTsKIAogICAgIHJldHVybiBhZGFwdGVyLm9mZnNldCgpOwogfQpAQCAtNDE5LDcgKzQyNCw4
IEBAIExheW91dFVuaXQgRmxvYXRpbmdPYmplY3RzOjpsb2dpY2FsTGVmdE8KIExheW91dFVuaXQg
RmxvYXRpbmdPYmplY3RzOjpsb2dpY2FsUmlnaHRPZmZzZXQoTGF5b3V0VW5pdCBmaXhlZE9mZnNl
dCwgTGF5b3V0VW5pdCBsb2dpY2FsVG9wLCBMYXlvdXRVbml0IGxvZ2ljYWxIZWlnaHQpCiB7CiAg
ICAgQ29tcHV0ZUZsb2F0T2Zmc2V0Rm9yTGluZUxheW91dEFkYXB0ZXI8RmxvYXRpbmdPYmplY3Q6
OkZsb2F0UmlnaHQ+IGFkYXB0ZXIobV9yZW5kZXJlciwgbG9naWNhbFRvcCwgbG9naWNhbFRvcCAr
IGxvZ2ljYWxIZWlnaHQsIGZpeGVkT2Zmc2V0KTsKLSAgICBwbGFjZWRGbG9hdHNUcmVlKCkuYWxs
T3ZlcmxhcHNXaXRoQWRhcHRlcihhZGFwdGVyKTsKKyAgICBpZiAoY29uc3QgRmxvYXRpbmdPYmpl
Y3RUcmVlKiBwbGFjZWRGbG9hdHNUcmVlID0gdGhpcy0+cGxhY2VkRmxvYXRzVHJlZSgpKQorICAg
ICAgICBwbGFjZWRGbG9hdHNUcmVlLT5hbGxPdmVybGFwc1dpdGhBZGFwdGVyKGFkYXB0ZXIpOwog
CiAgICAgcmV0dXJuIHN0ZDo6bWluKGZpeGVkT2Zmc2V0LCBhZGFwdGVyLm9mZnNldCgpKTsKIH0K
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9GbG9hdGluZ09iamVjdHMuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvRmxvYXRpbmdPYmplY3RzLmgJKHJldmlz
aW9uIDE3NjI5MCkKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9GbG9hdGluZ09iamVjdHMu
aAkod29ya2luZyBjb3B5KQpAQCAtMTE1LDcgKzExNSw2IEBAIHR5cGVkZWYgTGlzdEhhc2hTZXQ8
c3RkOjp1bmlxdWVfcHRyPEZsb2EKIAogdHlwZWRlZiBQT0RJbnRlcnZhbDxMYXlvdXRVbml0LCBG
bG9hdGluZ09iamVjdCo+IEZsb2F0aW5nT2JqZWN0SW50ZXJ2YWw7CiB0eXBlZGVmIFBPREludGVy
dmFsVHJlZTxMYXlvdXRVbml0LCBGbG9hdGluZ09iamVjdCo+IEZsb2F0aW5nT2JqZWN0VHJlZTsK
LXR5cGVkZWYgUE9ERnJlZUxpc3RBcmVuYTxQT0RSZWRCbGFja1RyZWU8RmxvYXRpbmdPYmplY3RJ
bnRlcnZhbD46Ok5vZGU+IEludGVydmFsQXJlbmE7CiAKIC8vIEZJWE1FOiBUaGlzIGlzIHJlYWxs
eSB0aGUgc2FtZSB0aGluZyBhcyBGbG9hdGluZ09iamVjdFNldC4KIC8vIENoYW5nZSBjbGllbnRz
IHRvIHVzZSB0aGF0IHNldCBkaXJlY3RseSwgYW5kIHJlcGxhY2UgdGhlIG1vdmVBbGxUb0Zsb2F0
SW5mb01hcCBmdW5jdGlvbiB3aXRoIGEgdGFrZVNldCBmdW5jdGlvbi4KQEAgLTE1MSwxMyArMTUw
LDEzIEBAIHB1YmxpYzoKIAogcHJpdmF0ZToKICAgICB2b2lkIGNvbXB1dGVQbGFjZWRGbG9hdHNU
cmVlKCk7Ci0gICAgY29uc3QgRmxvYXRpbmdPYmplY3RUcmVlJiBwbGFjZWRGbG9hdHNUcmVlKCk7
CisgICAgY29uc3QgRmxvYXRpbmdPYmplY3RUcmVlKiBwbGFjZWRGbG9hdHNUcmVlKCk7CiAgICAg
dm9pZCBpbmNyZWFzZU9iamVjdHNDb3VudChGbG9hdGluZ09iamVjdDo6VHlwZSk7CiAgICAgdm9p
ZCBkZWNyZWFzZU9iamVjdHNDb3VudChGbG9hdGluZ09iamVjdDo6VHlwZSk7CiAgICAgRmxvYXRp
bmdPYmplY3RJbnRlcnZhbCBpbnRlcnZhbEZvckZsb2F0aW5nT2JqZWN0KEZsb2F0aW5nT2JqZWN0
Kik7CiAKICAgICBGbG9hdGluZ09iamVjdFNldCBtX3NldDsKLSAgICBGbG9hdGluZ09iamVjdFRy
ZWUgbV9wbGFjZWRGbG9hdHNUcmVlOworICAgIHN0ZDo6dW5pcXVlX3B0cjxGbG9hdGluZ09iamVj
dFRyZWU+IG1fcGxhY2VkRmxvYXRzVHJlZTsKICAgICB1bnNpZ25lZCBtX2xlZnRPYmplY3RzQ291
bnQ7CiAgICAgdW5zaWduZWQgbV9yaWdodE9iamVjdHNDb3VudDsKICAgICBib29sIG1faG9yaXpv
bnRhbFdyaXRpbmdNb2RlOwpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckZs
b3dUaHJlYWQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5k
ZXJGbG93VGhyZWFkLmNwcAkocmV2aXNpb24gMTc2Mjg5KQorKysgU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL1JlbmRlckZsb3dUaHJlYWQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMDE3LDcgKzEw
MTcsNiBAQCB2b2lkIFJlbmRlckZsb3dUaHJlYWQ6OnVwZGF0ZVJlZ2lvbnNGbG93CiAgICAgYm9v
bCBlbXB0eVJlZ2lvbnNTZWdtZW50ID0gZmFsc2U7CiAgICAgLy8gRklYTUU6IE9wdGltaXplIG5v
dCB0byBjbGVhciB0aGUgaW50ZXJ2YWwgYWxsIHRoZSB0aW1lLiBUaGlzIGltcGxpZXMgbWFudWFs
bHkgbWFuYWdpbmcgdGhlIHRyZWUgbm9kZXMgbGlmZWN5Y2xlLgogICAgIG1fcmVnaW9uSW50ZXJ2
YWxUcmVlLmNsZWFyKCk7Ci0gICAgbV9yZWdpb25JbnRlcnZhbFRyZWUuaW5pdElmTmVlZGVkKCk7
CiAgICAgZm9yIChhdXRvJiByZWdpb24gOiBtX3JlZ2lvbkxpc3QpIHsKICAgICAgICAgLy8gSWYg
d2UgZmluZCBhbiBlbXB0eSBhdXRvLWhlaWdodCByZWdpb24sIGNsZWFyIHRoZSBjb21wdXRlZEF1
dG9IZWlnaHQgdmFsdWUuCiAgICAgICAgIGlmIChlbXB0eVJlZ2lvbnNTZWdtZW50ICYmIHJlZ2lv
bi0+aGFzQXV0b0xvZ2ljYWxIZWlnaHQoKSkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9SZW5kZXJWaWV3LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVyVmlldy5jcHAJKHJldmlzaW9uIDE3NjI4OSkKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9SZW5kZXJWaWV3LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTMyNywxMyArMTMyNyw2IEBA
IHZvaWQgUmVuZGVyVmlldzo6cG9wTGF5b3V0U3RhdGVGb3JDdXJyZW4KICAgICBjdXJyZW50Rmxv
d1RocmVhZC0+cG9wRmxvd1RocmVhZExheW91dFN0YXRlKCk7CiB9CiAKLUludGVydmFsQXJlbmEq
IFJlbmRlclZpZXc6OmludGVydmFsQXJlbmEoKQotewotICAgIGlmICghbV9pbnRlcnZhbEFyZW5h
KQotICAgICAgICBtX2ludGVydmFsQXJlbmEgPSBJbnRlcnZhbEFyZW5hOjpjcmVhdGUoKTsKLSAg
ICByZXR1cm4gbV9pbnRlcnZhbEFyZW5hLmdldCgpOwotfQotCiBJbWFnZVF1YWxpdHlDb250cm9s
bGVyJiBSZW5kZXJWaWV3OjppbWFnZVF1YWxpdHlDb250cm9sbGVyKCkKIHsKICAgICBpZiAoIW1f
aW1hZ2VRdWFsaXR5Q29udHJvbGxlcikKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9S
ZW5kZXJWaWV3LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
clZpZXcuaAkocmV2aXNpb24gMTc2Mjg5KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1Jl
bmRlclZpZXcuaAkod29ya2luZyBjb3B5KQpAQCAtMjQsNyArMjQsNiBAQAogCiAjaW5jbHVkZSAi
RnJhbWVWaWV3LmgiCiAjaW5jbHVkZSAiTGF5b3V0U3RhdGUuaCIKLSNpbmNsdWRlICJQT0RGcmVl
TGlzdEFyZW5hLmgiCiAjaW5jbHVkZSAiUmVnaW9uLmgiCiAjaW5jbHVkZSAiUmVuZGVyQmxvY2tG
bG93LmgiCiAjaW5jbHVkZSAiU2VsZWN0aW9uU3VidHJlZVJvb3QuaCIKQEAgLTIwMyw4ICsyMDIs
NiBAQCBwdWJsaWM6CiAKICAgICB2aXJ0dWFsIHZvaWQgc3R5bGVEaWRDaGFuZ2UoU3R5bGVEaWZm
ZXJlbmNlLCBjb25zdCBSZW5kZXJTdHlsZSogb2xkU3R5bGUpIG92ZXJyaWRlOwogCi0gICAgSW50
ZXJ2YWxBcmVuYSogaW50ZXJ2YWxBcmVuYSgpOwotCiAgICAgSW50U2l6ZSB2aWV3cG9ydFNpemVG
b3JDU1NWaWV3cG9ydFVuaXRzKCkgY29uc3Q7CiAKICAgICB2b2lkIHNldFJlbmRlclF1b3RlSGVh
ZChSZW5kZXJRdW90ZSogaGVhZCkgeyBtX3JlbmRlclF1b3RlSGVhZCA9IGhlYWQ7IH0KQEAgLTM1
NCw3ICszNTEsNiBAQCBwcml2YXRlOgogICAgIHVuc2lnbmVkIG1fbGF5b3V0U3RhdGVEaXNhYmxl
Q291bnQ7CiAgICAgc3RkOjp1bmlxdWVfcHRyPFJlbmRlckxheWVyQ29tcG9zaXRvcj4gbV9jb21w
b3NpdG9yOwogICAgIHN0ZDo6dW5pcXVlX3B0cjxGbG93VGhyZWFkQ29udHJvbGxlcj4gbV9mbG93
VGhyZWFkQ29udHJvbGxlcjsKLSAgICBSZWZQdHI8SW50ZXJ2YWxBcmVuYT4gbV9pbnRlcnZhbEFy
ZW5hOwogCiAgICAgUmVuZGVyUXVvdGUqIG1fcmVuZGVyUXVvdGVIZWFkOwogICAgIHVuc2lnbmVk
IG1fcmVuZGVyQ291bnRlckNvdW50Owo=
</data>
<flag name="review"
          id="266887"
          type_id="1"
          status="+"
          setter="sam"
    />
          </attachment>
      

    </bug>

</bugzilla>