<?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>27657</bug_id>
          
          <creation_ts>2009-07-24 08:59:41 -0700</creation_ts>
          <short_desc>Add more wince port files</short_desc>
          <delta_ts>2009-08-06 07:20:13 -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>Platform</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Other</rep_platform>
          <op_sys>Other</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>
          
          <blocked>23154</blocked>
          <everconfirmed>0</everconfirmed>
          <reporter name="Yong Li">yong.li.webkit</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>krit</cc>
    
    <cc>manyoso</cc>
    
    <cc>staikos</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>134575</commentid>
    <comment_count>0</comment_count>
    <who name="Yong Li">yong.li.webkit</who>
    <bug_when>2009-07-24 08:59:41 -0700</bug_when>
    <thetext>Add new files only</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>134578</commentid>
    <comment_count>1</comment_count>
      <attachid>33454</attachid>
    <who name="Yong Li">yong.li.webkit</who>
    <bug_when>2009-07-24 09:09:39 -0700</bug_when>
    <thetext>Created attachment 33454
the patch

        * loader/icon/wince/IconDatabaseWince.cpp: Added.
        * rendering/RenderThemeWince.cpp: Added.
        * rendering/RenderThemeWince.h: Added.
        * storage/wince/DatabaseThreadWince.cpp: Added.
        * storage/wince/DatabaseThreadWince.h: Added.
        * storage/wince/LocalStorageThreadWince.cpp: Added.
        * storage/wince/LocalStorageThreadWince.h: Added.
        * svg/graphics/wince/SVGResourceFilterWince.cpp: Added.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>134584</commentid>
    <comment_count>2</comment_count>
      <attachid>33454</attachid>
    <who name="George Staikos">staikos</who>
    <bug_when>2009-07-24 09:31:00 -0700</bug_when>
    <thetext>Comment on attachment 33454
the patch


Subject to the following minor corrections:

&gt; +++ b/WebCore/loader/icon/wince/IconDatabaseWince.cpp
&gt; @@ -0,0 +1,82 @@
&gt; +/*
&gt; + *  Copyright (C) 2007 Staikos Computing Services Inc.

  Copyright should be Torch Mobile Inc.  Is the year correct?

&gt; +#ifndef RenderThemeWincece_h
&gt; +#define RenderThemeWincece_h

  Might want to fix that

  
Rest looks okay to me.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>134659</commentid>
    <comment_count>3</comment_count>
    <who name="Adam Treat">manyoso</who>
    <bug_when>2009-07-24 14:13:38 -0700</bug_when>
    <thetext>Landed with r46374.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>137552</commentid>
    <comment_count>4</comment_count>
    <who name="Dirk Schulze">krit</who>
    <bug_when>2009-08-06 02:51:31 -0700</bug_when>
    <thetext>This patch crated the folder  svg/graphics/wince/ and the file   svg/graphics/wince/SVGResourceFilterWince.cpp.

All platform dependent code was deleted in svg some months ago. Can someone make a follow up and delete this code?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>137564</commentid>
    <comment_count>5</comment_count>
    <who name="George Staikos">staikos</who>
    <bug_when>2009-08-06 06:55:51 -0700</bug_when>
    <thetext>Yes we should do that.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>137565</commentid>
    <comment_count>6</comment_count>
      <attachid>34207</attachid>
    <who name="Yong Li">yong.li.webkit</who>
    <bug_when>2009-08-06 07:12:37 -0700</bug_when>
    <thetext>Created attachment 34207
remove svg/graphics/wince

the file is no longer necessary.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>137566</commentid>
    <comment_count>7</comment_count>
      <attachid>34208</attachid>
    <who name="Yong Li">yong.li.webkit</who>
    <bug_when>2009-08-06 07:16:45 -0700</bug_when>
    <thetext>Created attachment 34208
remove the unnecessary platform file in svg/graphics</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>137567</commentid>
    <comment_count>8</comment_count>
      <attachid>34208</attachid>
    <who name="George Staikos">staikos</who>
    <bug_when>2009-08-06 07:19:48 -0700</bug_when>
    <thetext>Comment on attachment 34208
remove the unnecessary platform file in svg/graphics

already landed</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>137568</commentid>
    <comment_count>9</comment_count>
    <who name="George Staikos">staikos</who>
    <bug_when>2009-08-06 07:20:13 -0700</bug_when>
    <thetext>r46842</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>33454</attachid>
            <date>2009-07-24 09:09:39 -0700</date>
            <delta_ts>2009-08-06 07:12:37 -0700</delta_ts>
            <desc>the patch</desc>
            <filename>27657.patch</filename>
            <type>text/plain</type>
            <size>48400</size>
            <attacher name="Yong Li">yong.li.webkit</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYkNvcmUvQ2hhbmdlTG9nIGIvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXgg
OWQ4ZTY3Zi4uMzhjNzIyYSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvV2Vi
Q29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwyMSBAQAorMjAwOS0wNy0yNCAgWW9uZyBMaSAgPHlv
bmcubGlAdG9yY2htb2JpbGUuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09Q
UyEpLgorCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0y
NzY1NworICAgICAgICBBZGQgbW9yZSB3aW5jZSBwb3J0IGZpbGVzIHRvIFdlYkNvcmUKKyAgICAg
ICAgCisgICAgICAgIFdyaXR0ZW4gYnkgWW9uZyBMaSAgPHlvbmcubGlAdG9yY2htb2JpbGUuY29t
PiBhbmQgTHlvbiBDaGVuIDxseW9uLmNoZW5AdG9yY2htb2JpbGUuY29tPgorCisgICAgICAgICog
bG9hZGVyL2ljb24vd2luY2UvSWNvbkRhdGFiYXNlV2luY2UuY3BwOiBBZGRlZC4KKyAgICAgICAg
KiByZW5kZXJpbmcvUmVuZGVyVGhlbWVXaW5jZS5jcHA6IEFkZGVkLgorICAgICAgICAqIHJlbmRl
cmluZy9SZW5kZXJUaGVtZVdpbmNlLmg6IEFkZGVkLgorICAgICAgICAqIHN0b3JhZ2Uvd2luY2Uv
RGF0YWJhc2VUaHJlYWRXaW5jZS5jcHA6IEFkZGVkLgorICAgICAgICAqIHN0b3JhZ2Uvd2luY2Uv
RGF0YWJhc2VUaHJlYWRXaW5jZS5oOiBBZGRlZC4KKyAgICAgICAgKiBzdG9yYWdlL3dpbmNlL0xv
Y2FsU3RvcmFnZVRocmVhZFdpbmNlLmNwcDogQWRkZWQuCisgICAgICAgICogc3RvcmFnZS93aW5j
ZS9Mb2NhbFN0b3JhZ2VUaHJlYWRXaW5jZS5oOiBBZGRlZC4KKyAgICAgICAgKiBzdmcvZ3JhcGhp
Y3Mvd2luY2UvU1ZHUmVzb3VyY2VGaWx0ZXJXaW5jZS5jcHA6IEFkZGVkLgorCiAyMDA5LTA3LTI0
ICBLZW5uZXRoIFJvaGRlIENocmlzdGlhbnNlbiAgPGtlbm5ldGhAd2Via2l0Lm9yZz4KIAogICAg
ICAgICBCdWlsZCBmaXggZm9yIDY0IGJpdCBMaW51eC4KZGlmZiAtLWdpdCBhL1dlYkNvcmUvbG9h
ZGVyL2ljb24vd2luY2UvSWNvbkRhdGFiYXNlV2luY2UuY3BwIGIvV2ViQ29yZS9sb2FkZXIvaWNv
bi93aW5jZS9JY29uRGF0YWJhc2VXaW5jZS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MDAwMDAwMC4uNzFjZGRhNQotLS0gL2Rldi9udWxsCisrKyBiL1dlYkNvcmUvbG9hZGVyL2ljb24v
d2luY2UvSWNvbkRhdGFiYXNlV2luY2UuY3BwCkBAIC0wLDAgKzEsODIgQEAKKy8qCisgKiAgQ29w
eXJpZ2h0IChDKSAyMDA3IFN0YWlrb3MgQ29tcHV0aW5nIFNlcnZpY2VzIEluYy4KKyAqCisgKiAg
VGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFu
ZC9vcgorICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdl
bmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdh
cmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAo
YXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICBUaGlzIGxpYnJhcnkg
aXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICBi
dXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50
eSBvZgorICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVS
UE9TRS4gIFNlZSB0aGUgR05VCisgKiAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZv
ciBtb3JlIGRldGFpbHMuCisgKgorICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkg
b2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqICBhbG9uZyB3aXRo
IHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0
bworICogIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0
cmVldCwgRmlmdGggRmxvb3IsCisgKiAgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKgor
ICovCisKKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkljb25EYXRhYmFzZS5oIgor
CisjaW5jbHVkZSAiQXV0b2RyYWluZWRQb29sLmgiCisjaW5jbHVkZSAiQ1N0cmluZy5oIgorI2lu
Y2x1ZGUgIkRvY3VtZW50TG9hZGVyLmgiCisjaW5jbHVkZSAiRmlsZVN5c3RlbS5oIgorI2luY2x1
ZGUgIkljb25EYXRhYmFzZUNsaWVudC5oIgorI2luY2x1ZGUgIkljb25SZWNvcmQuaCIKKyNpbmNs
dWRlICJJbWFnZS5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKKy8vIEZ1bmN0aW9uIHRvIG9i
dGFpbiB0aGUgZ2xvYmFsIGljb24gZGF0YWJhc2UuCitJY29uRGF0YWJhc2UqIGljb25EYXRhYmFz
ZSgpIHsgcmV0dXJuIDA7IH0KKworSWNvbkRhdGFiYXNlOjpJY29uRGF0YWJhc2UoKSB7fQorSWNv
bkRhdGFiYXNlOjp+SWNvbkRhdGFiYXNlKCkge30KKwordm9pZCBJY29uRGF0YWJhc2U6OnNldENs
aWVudChJY29uRGF0YWJhc2VDbGllbnQqKSB7fQorCitib29sIEljb25EYXRhYmFzZTo6b3Blbihj
b25zdCBTdHJpbmcmIHBhdGgpIHsgcmV0dXJuIGZhbHNlOyB9Cit2b2lkIEljb25EYXRhYmFzZTo6
Y2xvc2UoKSB7fQorCit2b2lkIEljb25EYXRhYmFzZTo6cmVtb3ZlQWxsSWNvbnMoKSB7fQorCitJ
bWFnZSogSWNvbkRhdGFiYXNlOjppY29uRm9yUGFnZVVSTChjb25zdCBTdHJpbmcmLCBjb25zdCBJ
bnRTaXplJikgeyByZXR1cm4gMDsgfQordm9pZCBJY29uRGF0YWJhc2U6OnJlYWRJY29uRm9yUGFn
ZVVSTEZyb21EaXNrKGNvbnN0IFN0cmluZyYpIHt9CitTdHJpbmcgSWNvbkRhdGFiYXNlOjppY29u
VVJMRm9yUGFnZVVSTChjb25zdCBTdHJpbmcmKSB7IHJldHVybiBTdHJpbmcoKTsgfQorSW1hZ2Uq
IEljb25EYXRhYmFzZTo6ZGVmYXVsdEljb24oY29uc3QgSW50U2l6ZSYpIHsgcmV0dXJuIDA7fQor
Cit2b2lkIEljb25EYXRhYmFzZTo6cmV0YWluSWNvbkZvclBhZ2VVUkwoY29uc3QgU3RyaW5nJikg
e30KK3ZvaWQgSWNvbkRhdGFiYXNlOjpyZWxlYXNlSWNvbkZvclBhZ2VVUkwoY29uc3QgU3RyaW5n
Jikge30KKwordm9pZCBJY29uRGF0YWJhc2U6OnNldEljb25EYXRhRm9ySWNvblVSTChQYXNzUmVm
UHRyPFNoYXJlZEJ1ZmZlcj4gZGF0YSwgY29uc3QgU3RyaW5nJikge30KK3ZvaWQgSWNvbkRhdGFi
YXNlOjpzZXRJY29uVVJMRm9yUGFnZVVSTChjb25zdCBTdHJpbmcmIGljb25VUkwsIGNvbnN0IFN0
cmluZyYgcGFnZVVSTCkge30KKworSWNvbkxvYWREZWNpc2lvbiBJY29uRGF0YWJhc2U6OmxvYWRE
ZWNpc2lvbkZvckljb25VUkwoY29uc3QgU3RyaW5nJiwgRG9jdW1lbnRMb2FkZXIqKSB7IHJldHVy
biBJY29uTG9hZE5vOyB9Citib29sIEljb25EYXRhYmFzZTo6aWNvbkRhdGFLbm93bkZvckljb25V
UkwoY29uc3QgU3RyaW5nJikgeyByZXR1cm4gZmFsc2U7IH0KKwordm9pZCBJY29uRGF0YWJhc2U6
OnNldEVuYWJsZWQoYm9vbCBlbmFibGVkKSB7fQorYm9vbCBJY29uRGF0YWJhc2U6OmlzRW5hYmxl
ZCgpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CisKK3ZvaWQgSWNvbkRhdGFiYXNlOjpzZXRQcml2
YXRlQnJvd3NpbmdFbmFibGVkKGJvb2wgZmxhZykge30KK2Jvb2wgSWNvbkRhdGFiYXNlOjppc1By
aXZhdGVCcm93c2luZ0VuYWJsZWQoKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQorCit2b2lkIElj
b25EYXRhYmFzZTo6ZGVsYXlEYXRhYmFzZUNsZWFudXAoKSB7fQordm9pZCBJY29uRGF0YWJhc2U6
OmFsbG93RGF0YWJhc2VDbGVhbnVwKCkge30KK3ZvaWQgSWNvbkRhdGFiYXNlOjpjaGVja0ludGVn
cml0eUJlZm9yZU9wZW5pbmcoKSB7fQorCisvLyBTdXBwb3J0IGZvciBXZWJDb3JlU3RhdGlzdGlj
cyBpbiBXZWJLaXQKK3NpemVfdCBJY29uRGF0YWJhc2U6OnBhZ2VVUkxNYXBwaW5nQ291bnQoKSB7
IHJldHVybiAwOyB9CitzaXplX3QgSWNvbkRhdGFiYXNlOjpyZXRhaW5lZFBhZ2VVUkxDb3VudCgp
IHtyZXR1cm4gMDsgfQorc2l6ZV90IEljb25EYXRhYmFzZTo6aWNvblJlY29yZENvdW50KCkgeyBy
ZXR1cm4gMDsgfQorc2l6ZV90IEljb25EYXRhYmFzZTo6aWNvblJlY29yZENvdW50V2l0aERhdGEo
KSB7IHJldHVybiAwOyB9CisKK2Jvb2wgSWNvbkRhdGFiYXNlOjppc09wZW4oKSBjb25zdCB7IHJl
dHVybiBmYWxzZTsgfQorU3RyaW5nIEljb25EYXRhYmFzZTo6ZGF0YWJhc2VQYXRoKCkgY29uc3Qg
eyByZXR1cm4gU3RyaW5nKCk7IH0KK1N0cmluZyBJY29uRGF0YWJhc2U6OmRlZmF1bHREYXRhYmFz
ZUZpbGVuYW1lKCkgeyByZXR1cm4gU3RyaW5nKCk7IH0KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29y
ZQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWVXaW5jZS5jcHAgYi9X
ZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUaGVtZVdpbmNlLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCAwMDAwMDAwLi5mYjg5Njc4Ci0tLSAvZGV2L251bGwKKysrIGIvV2ViQ29yZS9yZW5k
ZXJpbmcvUmVuZGVyVGhlbWVXaW5jZS5jcHAKQEAgLTAsMCArMSw2NjcgQEAKKy8qCisgKiBUaGlz
IGZpbGUgaXMgcGFydCBvZiB0aGUgV2ViS2l0IHByb2plY3QuCisgKgorICogQ29weXJpZ2h0IChD
KSAyMDA2LCAyMDA3IEFwcGxlIENvbXB1dGVyLCBJbmMuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDct
MjAwOSBUb3JjaCBNb2JpbGUsIEluYy4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0
d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIg
dGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBh
cyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2
ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZl
cnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRo
YXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhv
dXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkg
R2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91
bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGlj
IExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlO
Ry5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9u
LCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAw
MjExMC0xMzAxLCBVU0EuCisgKgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRl
ICJSZW5kZXJUaGVtZVdpbmNlLmgiCisKKyNpbmNsdWRlICJDU1NTdHlsZVNoZWV0LmgiCisjaW5j
bHVkZSAiQ1NTVmFsdWVLZXl3b3Jkcy5oIgorI2luY2x1ZGUgIkRvY3VtZW50LmgiCisjaW5jbHVk
ZSAiR3JhcGhpY3NDb250ZXh0LmgiCisjaWYgRU5BQkxFKFZJREVPKQorI2luY2x1ZGUgIkhUTUxN
ZWRpYUVsZW1lbnQuaCIKKyNlbmRpZgorCisjaW5jbHVkZSA8d2luZG93cy5oPgorCisvKiAKKyAq
IFRoZSBmb2xsb3dpbmcgY29uc3RhbnRzIGFyZSB1c2VkIHRvIGRldGVybWluZSBob3cgYSB3aWRn
ZXQgaXMgZHJhd24gdXNpbmcKKyAqIFdpbmRvd3MnIFRoZW1lIEFQSS4gRm9yIG1vcmUgaW5mb3Jt
YXRpb24gb24gdGhlbWUgcGFydHMgYW5kIHN0YXRlcyBzZWUKKyAqIGh0dHA6Ly9tc2RuLm1pY3Jv
c29mdC5jb20vbGlicmFyeS9kZWZhdWx0LmFzcD91cmw9L2xpYnJhcnkvZW4tdXMvc2hlbGxjYy9w
bGF0Zm9ybS9jb21tY3Rscy91c2VyZXgvdG9waWNzL3BhcnRzYW5kc3RhdGVzLmFzcAorICovCisj
ZGVmaW5lIFRIRU1FX0NPTE9SIDIwNAorI2RlZmluZSBUSEVNRV9GT05UICAyMTAKKworLy8gR2Vu
ZXJpYyBzdGF0ZSBjb25zdGFudHMKKyNkZWZpbmUgVFNfTk9STUFMICAgIDEKKyNkZWZpbmUgVFNf
SE9WRVIgICAgIDIKKyNkZWZpbmUgVFNfQUNUSVZFICAgIDMKKyNkZWZpbmUgVFNfRElTQUJMRUQg
IDQKKyNkZWZpbmUgVFNfRk9DVVNFRCAgIDUKKworLy8gQnV0dG9uIGNvbnN0YW50cworI2RlZmlu
ZSBCUF9CVVRUT04gICAgMQorI2RlZmluZSBCUF9SQURJTyAgICAgMgorI2RlZmluZSBCUF9DSEVD
S0JPWCAgMworCisvLyBUZXh0ZmllbGQgY29uc3RhbnRzCisjZGVmaW5lIFRGUF9URVhURklFTEQg
MQorI2RlZmluZSBURlNfUkVBRE9OTFkgIDYKKwordHlwZWRlZiBIQU5ETEUgKFdJTkFQSSpvcGVu
VGhlbWVEYXRhUHRyKShIV05EIGh3bmQsIExQQ1dTVFIgcHN6Q2xhc3NMaXN0KTsKK3R5cGVkZWYg
SFJFU1VMVCAoV0lOQVBJKmNsb3NlVGhlbWVEYXRhUHRyKShIQU5ETEUgaFRoZW1lKTsKK3R5cGVk
ZWYgSFJFU1VMVCAoV0lOQVBJKmRyYXdUaGVtZUJhY2tncm91bmRQdHIpKEhBTkRMRSBoVGhlbWUs
IEhEQyBoZGMsIGludCBpUGFydElkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgaW50IGlTdGF0ZUlkLCBjb25zdCBSRUNUICpwUmVjdCwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFJFQ1QqIHBDbGlwUmVjdCk7Cit0eXBl
ZGVmIEhSRVNVTFQgKFdJTkFQSSpkcmF3VGhlbWVFZGdlUHRyKShIQU5ETEUgaFRoZW1lLCBIREMg
aGRjLCBpbnQgaVBhcnRJZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGludCBpU3RhdGVJZCwgY29uc3QgUkVDVCAqcFJlY3QsCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCB1RWRnZSwgdW5zaWduZWQgdUZsYWdzLAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgUkVDVCogcENs
aXBSZWN0KTsKK3R5cGVkZWYgSFJFU1VMVCAoV0lOQVBJKmdldFRoZW1lQ29udGVudFJlY3RQdHIp
KEhBTkRMRSBoVGhlbWUsIEhEQyBoZGMsIGludCBpUGFydElkLAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgaW50IGlTdGF0ZUlkLCBjb25zdCBSRUNUKiBwUmVjdCwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJFQ1QqIHBDb250ZW50
UmVjdCk7Cit0eXBlZGVmIEhSRVNVTFQgKFdJTkFQSSpnZXRUaGVtZVBhcnRTaXplUHRyKShIQU5E
TEUgaFRoZW1lLCBIREMgaGRjLCBpbnQgaVBhcnRJZCwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGludCBpU3RhdGVJZCwgUkVDVCogcHJjLCBpbnQgdHMsCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTSVpFKiBwc3opOwordHlwZWRlZiBIUkVT
VUxUIChXSU5BUEkqZ2V0VGhlbWVTeXNGb250UHRyKShIQU5ETEUgaFRoZW1lLCBpbnQgaUZvbnRJ
ZCwgT1VUIExPR0ZPTlQqIHBGb250KTsKK3R5cGVkZWYgSFJFU1VMVCAoV0lOQVBJKmdldFRoZW1l
Q29sb3JQdHIpKEhBTkRMRSBoVGhlbWUsIEhEQyBoZGMsIGludCBpUGFydElkLAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgaVN0YXRlSWQsIGludCBpUHJvcElkLCBPVVQg
Q09MT1JSRUYqIHBGb250KTsKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitzdGF0aWMgY29uc3Qg
aW50IGRyb3BEb3duQnV0dG9uV2lkdGggPSAxNzsKK3N0YXRpYyBjb25zdCBpbnQgdHJhY2tXaWR0
aCA9IDQ7CisKK1Bhc3NSZWZQdHI8UmVuZGVyVGhlbWU+IFJlbmRlclRoZW1lV2luY2U6OmNyZWF0
ZSgpCit7CisgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBSZW5kZXJUaGVtZVdpbmNlKTsKK30KKwor
UGFzc1JlZlB0cjxSZW5kZXJUaGVtZT4gUmVuZGVyVGhlbWU6OnRoZW1lRm9yUGFnZShQYWdlKiBw
YWdlKQoreworICAgIHN0YXRpYyBSZW5kZXJUaGVtZSogd2luY2VUaGVtZSA9IFJlbmRlclRoZW1l
V2luY2U6OmNyZWF0ZSgpLnJlbGVhc2VSZWYoKTsKKyAgICByZXR1cm4gd2luY2VUaGVtZTsKK30K
KworUmVuZGVyVGhlbWVXaW5jZTo6UmVuZGVyVGhlbWVXaW5jZSgpCit7Cit9CisKK1JlbmRlclRo
ZW1lV2luY2U6On5SZW5kZXJUaGVtZVdpbmNlKCkKK3sKK30KKworQ29sb3IgUmVuZGVyVGhlbWVX
aW5jZTo6cGxhdGZvcm1BY3RpdmVTZWxlY3Rpb25CYWNrZ3JvdW5kQ29sb3IoKSBjb25zdAorewor
ICAgIENPTE9SUkVGIGNvbG9yID0gR2V0U3lzQ29sb3IoQ09MT1JfSElHSExJR0hUKTsKKyAgICBy
ZXR1cm4gQ29sb3IoR2V0UlZhbHVlKGNvbG9yKSwgR2V0R1ZhbHVlKGNvbG9yKSwgR2V0QlZhbHVl
KGNvbG9yKSwgMjU1KTsKK30KKworQ29sb3IgUmVuZGVyVGhlbWVXaW5jZTo6cGxhdGZvcm1JbmFj
dGl2ZVNlbGVjdGlvbkJhY2tncm91bmRDb2xvcigpIGNvbnN0Cit7CisgICAgQ09MT1JSRUYgY29s
b3IgPSBHZXRTeXNDb2xvcihDT0xPUl9HUkFZVEVYVCk7CisgICAgcmV0dXJuIENvbG9yKEdldFJW
YWx1ZShjb2xvciksIEdldEdWYWx1ZShjb2xvciksIEdldEJWYWx1ZShjb2xvciksIDI1NSk7Cit9
CisKK0NvbG9yIFJlbmRlclRoZW1lV2luY2U6OnBsYXRmb3JtQWN0aXZlU2VsZWN0aW9uRm9yZWdy
b3VuZENvbG9yKCkgY29uc3QKK3sKKyAgICBDT0xPUlJFRiBjb2xvciA9IEdldFN5c0NvbG9yKENP
TE9SX0hJR0hMSUdIVFRFWFQpOworICAgIHJldHVybiBDb2xvcihHZXRSVmFsdWUoY29sb3IpLCBH
ZXRHVmFsdWUoY29sb3IpLCBHZXRCVmFsdWUoY29sb3IpLCAyNTUpOworfQorCitDb2xvciBSZW5k
ZXJUaGVtZVdpbmNlOjpwbGF0Zm9ybUluYWN0aXZlU2VsZWN0aW9uRm9yZWdyb3VuZENvbG9yKCkg
Y29uc3QKK3sKKyAgICByZXR1cm4gQ29sb3I6OndoaXRlOworfQorCitib29sIFJlbmRlclRoZW1l
V2luY2U6OnN1cHBvcnRzRm9jdXMoQ29udHJvbFBhcnQgYXBwZWFyYW5jZSkgY29uc3QKK3sKKyAg
ICBzd2l0Y2ggKGFwcGVhcmFuY2UpIHsKKyAgICBjYXNlIFB1c2hCdXR0b25QYXJ0OgorICAgIGNh
c2UgQnV0dG9uUGFydDoKKyAgICBjYXNlIFRleHRGaWVsZFBhcnQ6CisgICAgY2FzZSBUZXh0QXJl
YVBhcnQ6CisgICAgICAgIHJldHVybiB0cnVlOworICAgIGRlZmF1bHQ6CisgICAgICAgIHJldHVy
biBmYWxzZTsKKyAgICB9CisKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK2Jvb2wgUmVuZGVyVGhl
bWVXaW5jZTo6c3VwcG9ydHNGb2N1c1JpbmcoY29uc3QgUmVuZGVyU3R5bGUgKnN0eWxlKSBjb25z
dAoreworICAgIHJldHVybiBzdXBwb3J0c0ZvY3VzKHN0eWxlLT5hcHBlYXJhbmNlKCkpOworfQor
Cit1bnNpZ25lZCBSZW5kZXJUaGVtZVdpbmNlOjpkZXRlcm1pbmVDbGFzc2ljU3RhdGUoUmVuZGVy
T2JqZWN0KiBvKQoreworICAgIHVuc2lnbmVkIHJlc3VsdCA9IDA7CisgICAgaWYgKCFpc0VuYWJs
ZWQobykgfHwgaXNSZWFkT25seUNvbnRyb2wobykpCisgICAgICAgIHJlc3VsdCA9IERGQ1NfSU5B
Q1RJVkU7CisgICAgZWxzZSBpZiAoaXNQcmVzc2VkKG8pKSAvLyBBY3RpdmUgc3VwZXJzZWRlcyBo
b3ZlcgorICAgICAgICByZXN1bHQgPSBERkNTX1BVU0hFRDsKKworICAgIGlmIChpc0NoZWNrZWQo
bykpCisgICAgICAgIHJlc3VsdCB8PSBERkNTX0NIRUNLRUQ7CisgICAgcmV0dXJuIHJlc3VsdDsK
K30KKworVGhlbWVEYXRhIFJlbmRlclRoZW1lV2luY2U6OmdldFRoZW1lRGF0YShSZW5kZXJPYmpl
Y3QqIG8pCit7CisgICAgVGhlbWVEYXRhIHJlc3VsdDsKKyAgICBzd2l0Y2ggKG8tPnN0eWxlKCkt
PmFwcGVhcmFuY2UoKSkgeworICAgIGNhc2UgUHVzaEJ1dHRvblBhcnQ6CisgICAgY2FzZSBCdXR0
b25QYXJ0OgorICAgICAgICByZXN1bHQubV9wYXJ0ID0gQlBfQlVUVE9OOworICAgICAgICByZXN1
bHQubV9jbGFzc2ljU3RhdGUgPSBERkNTX0JVVFRPTlBVU0g7CisgICAgICAgIGJyZWFrOworICAg
IGNhc2UgQ2hlY2tib3hQYXJ0OgorICAgICAgICByZXN1bHQubV9wYXJ0ID0gQlBfQ0hFQ0tCT1g7
CisgICAgICAgIHJlc3VsdC5tX2NsYXNzaWNTdGF0ZSA9IERGQ1NfQlVUVE9OQ0hFQ0s7CisgICAg
ICAgIGJyZWFrOworICAgIGNhc2UgUmFkaW9QYXJ0OgorICAgICAgICByZXN1bHQubV9wYXJ0ID0g
QlBfUkFESU87CisgICAgICAgIHJlc3VsdC5tX2NsYXNzaWNTdGF0ZSA9IERGQ1NfQlVUVE9OUkFE
SU87CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgTGlzdGJveFBhcnQ6CisgICAgY2FzZSBNZW51
bGlzdFBhcnQ6CisgICAgY2FzZSBUZXh0RmllbGRQYXJ0OgorICAgIGNhc2UgVGV4dEFyZWFQYXJ0
OgorICAgICAgICByZXN1bHQubV9wYXJ0ID0gVEZQX1RFWFRGSUVMRDsKKyAgICAgICAgYnJlYWs7
CisgICAgfQorCisgICAgcmVzdWx0Lm1fY2xhc3NpY1N0YXRlIHw9IGRldGVybWluZUNsYXNzaWNT
dGF0ZShvKTsKKworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK2Jvb2wgUmVuZGVyVGhlbWVXaW5j
ZTo6cGFpbnRCdXR0b24oUmVuZGVyT2JqZWN0KiBvLCBjb25zdCBSZW5kZXJPYmplY3Q6OlBhaW50
SW5mbyYgaSwgY29uc3QgSW50UmVjdCYgcikKK3sKKyAgICAvLyBHZXQgdGhlIGNvcnJlY3QgdGhl
bWUgZGF0YSBmb3IgYSBidXR0b24KKyAgICBUaGVtZURhdGEgdGhlbWVEYXRhID0gZ2V0VGhlbWVE
YXRhKG8pOworCisgICAgLy8gTm93IHBhaW50IHRoZSBidXR0b24uCisgICAgaS5jb250ZXh0LT5k
cmF3RnJhbWVDb250cm9sKHIsIERGQ19CVVRUT04sIHRoZW1lRGF0YS5tX2NsYXNzaWNTdGF0ZSk7
CisgICAgaWYgKGlzRm9jdXNlZChvKSkgeworICAgICAgICBpZiAodGhlbWVEYXRhLm1fcGFydCA9
PSBCUF9CVVRUT04pIHsKKyAgICAgICAgICAgIEludFJlY3QgZm9jdXNSZWN0KHIpOworICAgICAg
ICAgICAgZm9jdXNSZWN0LmluZmxhdGUoLTIpOworICAgICAgICAgICAgaS5jb250ZXh0LT5kcmF3
Rm9jdXNSZWN0KGZvY3VzUmVjdCk7CisgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgaS5jb250
ZXh0LT5kcmF3Rm9jdXNSZWN0KHIpOworICAgIH0KKworICAgIHJldHVybiBmYWxzZTsKK30KKwor
dm9pZCBSZW5kZXJUaGVtZVdpbmNlOjpzZXRDaGVja2JveFNpemUoUmVuZGVyU3R5bGUqIHN0eWxl
KSBjb25zdAoreworICAgIC8vIElmIHRoZSB3aWR0aCBhbmQgaGVpZ2h0IGFyZSBib3RoIHNwZWNp
ZmllZCwgdGhlbiB3ZSBoYXZlIG5vdGhpbmcgdG8gZG8uCisgICAgaWYgKCFzdHlsZS0+d2lkdGgo
KS5pc0ludHJpbnNpY09yQXV0bygpICYmICFzdHlsZS0+aGVpZ2h0KCkuaXNBdXRvKCkpCisgICAg
ICAgIHJldHVybjsKKworICAgIC8vIEZJWE1FOiAgQSBoYXJkLWNvZGVkIHNpemUgb2YgMTMgaXMg
dXNlZC4gIFRoaXMgaXMgd3JvbmcgYnV0IG5lY2Vzc2FyeSBmb3Igbm93LiAgSXQgbWF0Y2hlcyBG
aXJlZm94LgorICAgIC8vIEF0IGRpZmZlcmVudCBEUEkgc2V0dGluZ3Mgb24gV2luZG93cywgcXVl
cnlpbmcgdGhlIHRoZW1lIGdpdmVzIHlvdSBhIGxhcmdlciBzaXplIHRoYXQgYWNjb3VudHMgZm9y
CisgICAgLy8gdGhlIGhpZ2hlciBEUEkuICBVbnRpbCBvdXIgZW50aXJlIGVuZ2luZSBob25vcnMg
YSBEUEkgc2V0dGluZyBvdGhlciB0aGFuIDk2LCB3ZSBjYW4ndCByZWx5IG9uIHRoZSB0aGVtZSdz
CisgICAgLy8gbWV0cmljcy4KKyAgICBpZiAoc3R5bGUtPndpZHRoKCkuaXNJbnRyaW5zaWNPckF1
dG8oKSkKKyAgICAgICAgc3R5bGUtPnNldFdpZHRoKExlbmd0aCgxMywgRml4ZWQpKTsKKyAgICBp
ZiAoc3R5bGUtPmhlaWdodCgpLmlzQXV0bygpKQorICAgICAgICBzdHlsZS0+c2V0SGVpZ2h0KExl
bmd0aCgxMywgRml4ZWQpKTsKK30KKworYm9vbCBSZW5kZXJUaGVtZVdpbmNlOjpwYWludFRleHRG
aWVsZChSZW5kZXJPYmplY3QqIG8sIGNvbnN0IFJlbmRlck9iamVjdDo6UGFpbnRJbmZvJiBpLCBj
b25zdCBJbnRSZWN0JiByKQoreworICAgIC8vIEdldCB0aGUgY29ycmVjdCB0aGVtZSBkYXRhIGZv
ciBhIHRleHRmaWVsZAorICAgIFRoZW1lRGF0YSB0aGVtZURhdGEgPSBnZXRUaGVtZURhdGEobyk7
CisKKyAgICAvLyBOb3cgcGFpbnQgdGhlIHRleHQgZmllbGQuCisgICAgaS5jb250ZXh0LT5wYWlu
dFRleHRGaWVsZChyLCB0aGVtZURhdGEubV9jbGFzc2ljU3RhdGUpOworCisgICAgcmV0dXJuIGZh
bHNlOworfQorCit2b2lkIFJlbmRlclRoZW1lV2luY2U6OmFkanVzdE1lbnVMaXN0U3R5bGUoQ1NT
U3R5bGVTZWxlY3Rvciogc2VsZWN0b3IsIFJlbmRlclN0eWxlKiBzdHlsZSwgRWxlbWVudCogZSkg
Y29uc3QKK3sKKyAgICBzdHlsZS0+cmVzZXRCb3JkZXIoKTsKKyAgICBhZGp1c3RNZW51TGlzdEJ1
dHRvblN0eWxlKHNlbGVjdG9yLCBzdHlsZSwgZSk7Cit9CisKK2Jvb2wgUmVuZGVyVGhlbWVXaW5j
ZTo6cGFpbnRNZW51TGlzdChSZW5kZXJPYmplY3QqIG8sIGNvbnN0IFJlbmRlck9iamVjdDo6UGFp
bnRJbmZvJiBpLCBjb25zdCBJbnRSZWN0JiByKQoreworICAgIHBhaW50VGV4dEZpZWxkKG8sIGks
IHIpOworICAgIHBhaW50TWVudUxpc3RCdXR0b24obywgaSwgcik7CisgICAgcmV0dXJuIHRydWU7
Cit9CisKK2Jvb2wgUmVuZGVyVGhlbWVXaW5jZTo6cGFpbnRNZW51TGlzdEJ1dHRvbihSZW5kZXJP
YmplY3QqIG8sIGNvbnN0IFJlbmRlck9iamVjdDo6UGFpbnRJbmZvJiBpLCBjb25zdCBJbnRSZWN0
JiByKQoreworICAgIEludFJlY3QgYnV0dG9uUmVjdChyLnJpZ2h0KCkgLSBkcm9wRG93bkJ1dHRv
bldpZHRoIC0gMSwgci55KCksIGRyb3BEb3duQnV0dG9uV2lkdGgsIHIuaGVpZ2h0KCkpOworICAg
IGJ1dHRvblJlY3QuaW5mbGF0ZVkoLTEpOworICAgIGkuY29udGV4dC0+ZHJhd0ZyYW1lQ29udHJv
bChidXR0b25SZWN0LCBERkNfU0NST0xMLCBERkNTX1NDUk9MTENPTUJPQk9YIHwgZGV0ZXJtaW5l
Q2xhc3NpY1N0YXRlKG8pKTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKwordm9pZCBSZW5kZXJUaGVt
ZVdpbmNlOjpzeXN0ZW1Gb250KGludCBwcm9wSWQsIEZvbnREZXNjcmlwdGlvbiYgZm9udERlc2Ny
aXB0aW9uKSBjb25zdAoreworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisKK3ZvaWQgUmVuZGVy
VGhlbWVXaW5jZTo6dGhlbWVDaGFuZ2VkKCkKK3sKK30KKworU3RyaW5nIFJlbmRlclRoZW1lV2lu
Y2U6OmV4dHJhRGVmYXVsdFN0eWxlU2hlZXQoKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7Cisg
ICAgcmV0dXJuIFN0cmluZygpOworfQorCitTdHJpbmcgUmVuZGVyVGhlbWVXaW5jZTo6ZXh0cmFR
dWlya3NTdHlsZVNoZWV0KCkKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworICAgIHJldHVybiBT
dHJpbmcoKTsKK30KKworYm9vbCBSZW5kZXJUaGVtZVdpbmNlOjpzdXBwb3J0c0hvdmVyKGNvbnN0
IFJlbmRlclN0eWxlKikgY29uc3QKK3sKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKKy8vIE1hcCBh
IENTU1ZhbHVlKiBzeXN0ZW0gY29sb3IgdG8gYW4gaW5kZXggdW5kZXJzdG9vZCBieSBHZXRTeXND
b2xvcgorc3RhdGljIGludCBjc3NWYWx1ZUlkVG9TeXNDb2xvckluZGV4KGludCBjc3NWYWx1ZUlk
KQoreworICAgIHN3aXRjaCAoY3NzVmFsdWVJZCkgeworICAgIGNhc2UgQ1NTVmFsdWVBY3RpdmVi
b3JkZXI6IHJldHVybiBDT0xPUl9BQ1RJVkVCT1JERVI7CisgICAgY2FzZSBDU1NWYWx1ZUFjdGl2
ZWNhcHRpb246IHJldHVybiBDT0xPUl9BQ1RJVkVDQVBUSU9OOworICAgIGNhc2UgQ1NTVmFsdWVB
cHB3b3Jrc3BhY2U6IHJldHVybiBDT0xPUl9BUFBXT1JLU1BBQ0U7CisgICAgY2FzZSBDU1NWYWx1
ZUJhY2tncm91bmQ6IHJldHVybiBDT0xPUl9CQUNLR1JPVU5EOworICAgIGNhc2UgQ1NTVmFsdWVC
dXR0b25mYWNlOiByZXR1cm4gQ09MT1JfQlRORkFDRTsKKyAgICBjYXNlIENTU1ZhbHVlQnV0dG9u
aGlnaGxpZ2h0OiByZXR1cm4gQ09MT1JfQlROSElHSExJR0hUOworICAgIGNhc2UgQ1NTVmFsdWVC
dXR0b25zaGFkb3c6IHJldHVybiBDT0xPUl9CVE5TSEFET1c7CisgICAgY2FzZSBDU1NWYWx1ZUJ1
dHRvbnRleHQ6IHJldHVybiBDT0xPUl9CVE5URVhUOworICAgIGNhc2UgQ1NTVmFsdWVDYXB0aW9u
dGV4dDogcmV0dXJuIENPTE9SX0NBUFRJT05URVhUOworICAgIGNhc2UgQ1NTVmFsdWVHcmF5dGV4
dDogcmV0dXJuIENPTE9SX0dSQVlURVhUOworICAgIGNhc2UgQ1NTVmFsdWVIaWdobGlnaHQ6IHJl
dHVybiBDT0xPUl9ISUdITElHSFQ7CisgICAgY2FzZSBDU1NWYWx1ZUhpZ2hsaWdodHRleHQ6IHJl
dHVybiBDT0xPUl9ISUdITElHSFRURVhUOworICAgIGNhc2UgQ1NTVmFsdWVJbmFjdGl2ZWJvcmRl
cjogcmV0dXJuIENPTE9SX0lOQUNUSVZFQk9SREVSOworICAgIGNhc2UgQ1NTVmFsdWVJbmFjdGl2
ZWNhcHRpb246IHJldHVybiBDT0xPUl9JTkFDVElWRUNBUFRJT047CisgICAgY2FzZSBDU1NWYWx1
ZUluYWN0aXZlY2FwdGlvbnRleHQ6IHJldHVybiBDT0xPUl9JTkFDVElWRUNBUFRJT05URVhUOwor
ICAgIGNhc2UgQ1NTVmFsdWVJbmZvYmFja2dyb3VuZDogcmV0dXJuIENPTE9SX0lORk9CSzsKKyAg
ICBjYXNlIENTU1ZhbHVlSW5mb3RleHQ6IHJldHVybiBDT0xPUl9JTkZPVEVYVDsKKyAgICBjYXNl
IENTU1ZhbHVlTWVudTogcmV0dXJuIENPTE9SX01FTlU7CisgICAgY2FzZSBDU1NWYWx1ZU1lbnV0
ZXh0OiByZXR1cm4gQ09MT1JfTUVOVVRFWFQ7CisgICAgY2FzZSBDU1NWYWx1ZVNjcm9sbGJhcjog
cmV0dXJuIENPTE9SX1NDUk9MTEJBUjsKKyAgICBjYXNlIENTU1ZhbHVlVGhyZWVkZGFya3NoYWRv
dzogcmV0dXJuIENPTE9SXzNEREtTSEFET1c7CisgICAgY2FzZSBDU1NWYWx1ZVRocmVlZGZhY2U6
IHJldHVybiBDT0xPUl8zREZBQ0U7CisgICAgY2FzZSBDU1NWYWx1ZVRocmVlZGhpZ2hsaWdodDog
cmV0dXJuIENPTE9SXzNESElHSExJR0hUOworICAgIGNhc2UgQ1NTVmFsdWVUaHJlZWRsaWdodHNo
YWRvdzogcmV0dXJuIENPTE9SXzNETElHSFQ7CisgICAgY2FzZSBDU1NWYWx1ZVRocmVlZHNoYWRv
dzogcmV0dXJuIENPTE9SXzNEU0hBRE9XOworICAgIGNhc2UgQ1NTVmFsdWVXaW5kb3c6IHJldHVy
biBDT0xPUl9XSU5ET1c7CisgICAgY2FzZSBDU1NWYWx1ZVdpbmRvd2ZyYW1lOiByZXR1cm4gQ09M
T1JfV0lORE9XRlJBTUU7CisgICAgY2FzZSBDU1NWYWx1ZVdpbmRvd3RleHQ6IHJldHVybiBDT0xP
Ul9XSU5ET1dURVhUOworICAgIGRlZmF1bHQ6IHJldHVybiAtMTsgLy8gVW5zdXBwb3J0ZWQgQ1NT
VmFsdWUKKyAgICB9Cit9CisKK0NvbG9yIFJlbmRlclRoZW1lV2luY2U6OnN5c3RlbUNvbG9yKGlu
dCBjc3NWYWx1ZUlkKSBjb25zdAoreworICAgIGludCBzeXNDb2xvckluZGV4ID0gY3NzVmFsdWVJ
ZFRvU3lzQ29sb3JJbmRleChjc3NWYWx1ZUlkKTsKKyAgICBpZiAoc3lzQ29sb3JJbmRleCA9PSAt
MSkKKyAgICAgICAgcmV0dXJuIFJlbmRlclRoZW1lOjpzeXN0ZW1Db2xvcihjc3NWYWx1ZUlkKTsK
KworICAgIENPTE9SUkVGIGNvbG9yID0gR2V0U3lzQ29sb3Ioc3lzQ29sb3JJbmRleCk7CisgICAg
cmV0dXJuIENvbG9yKEdldFJWYWx1ZShjb2xvciksIEdldEdWYWx1ZShjb2xvciksIEdldEJWYWx1
ZShjb2xvcikpOworfQorCitjb25zdCBpbnQgc2xpZGVyVGh1bWJXaWR0aCA9IDc7Citjb25zdCBp
bnQgc2xpZGVyVGh1bWJIZWlnaHQgPSAxNTsKKwordm9pZCBSZW5kZXJUaGVtZVdpbmNlOjphZGp1
c3RTbGlkZXJUaHVtYlNpemUoUmVuZGVyT2JqZWN0KiBvKSBjb25zdAoreworICAgIGlmIChvLT5z
dHlsZSgpLT5hcHBlYXJhbmNlKCkgPT0gU2xpZGVyVGh1bWJWZXJ0aWNhbFBhcnQpIHsKKyAgICAg
ICAgby0+c3R5bGUoKS0+c2V0V2lkdGgoTGVuZ3RoKHNsaWRlclRodW1iSGVpZ2h0LCBGaXhlZCkp
OworICAgICAgICBvLT5zdHlsZSgpLT5zZXRIZWlnaHQoTGVuZ3RoKHNsaWRlclRodW1iV2lkdGgs
IEZpeGVkKSk7CisgICAgfSBlbHNlIGlmIChvLT5zdHlsZSgpLT5hcHBlYXJhbmNlKCkgPT0gU2xp
ZGVyVGh1bWJIb3Jpem9udGFsUGFydCkgeworICAgICAgICBvLT5zdHlsZSgpLT5zZXRXaWR0aChM
ZW5ndGgoc2xpZGVyVGh1bWJXaWR0aCwgRml4ZWQpKTsKKyAgICAgICAgby0+c3R5bGUoKS0+c2V0
SGVpZ2h0KExlbmd0aChzbGlkZXJUaHVtYkhlaWdodCwgRml4ZWQpKTsKKyAgICB9Cit9CisKKyNp
ZiAwCit2b2lkIFJlbmRlclRoZW1lV2luY2U6OmFkanVzdEJ1dHRvbklubmVyU3R5bGUoUmVuZGVy
U3R5bGUqIHN0eWxlKSBjb25zdAoreworICAgIC8vIFRoaXMgaW5uZXIgcGFkZGluZyBtYXRjaGVz
IEZpcmVmb3guCisgICAgc3R5bGUtPnNldFBhZGRpbmdUb3AoTGVuZ3RoKDEsIEZpeGVkKSk7Cisg
ICAgc3R5bGUtPnNldFBhZGRpbmdSaWdodChMZW5ndGgoMywgRml4ZWQpKTsKKyAgICBzdHlsZS0+
c2V0UGFkZGluZ0JvdHRvbShMZW5ndGgoMSwgRml4ZWQpKTsKKyAgICBzdHlsZS0+c2V0UGFkZGlu
Z0xlZnQoTGVuZ3RoKDMsIEZpeGVkKSk7Cit9CisKK3ZvaWQgUmVuZGVyVGhlbWVXaW5jZTo6YWRq
dXN0U2VhcmNoRmllbGRTdHlsZShDU1NTdHlsZVNlbGVjdG9yKiBzZWxlY3RvciwgUmVuZGVyU3R5
bGUqIHN0eWxlLCBFbGVtZW50KiBlKSBjb25zdAoreworICAgIC8vIE92ZXJyaWRlIHBhZGRpbmcg
c2l6ZSB0byBtYXRjaCBBcHBLaXQgdGV4dCBwb3NpdGlvbmluZy4KKyAgICBjb25zdCBpbnQgcGFk
ZGluZyA9IDE7CisgICAgc3R5bGUtPnNldFBhZGRpbmdMZWZ0KExlbmd0aChwYWRkaW5nLCBGaXhl
ZCkpOworICAgIHN0eWxlLT5zZXRQYWRkaW5nUmlnaHQoTGVuZ3RoKHBhZGRpbmcsIEZpeGVkKSk7
CisgICAgc3R5bGUtPnNldFBhZGRpbmdUb3AoTGVuZ3RoKHBhZGRpbmcsIEZpeGVkKSk7CisgICAg
c3R5bGUtPnNldFBhZGRpbmdCb3R0b20oTGVuZ3RoKHBhZGRpbmcsIEZpeGVkKSk7Cit9CisjZW5k
aWYKKworYm9vbCBSZW5kZXJUaGVtZVdpbmNlOjpwYWludFNlYXJjaEZpZWxkKFJlbmRlck9iamVj
dCogbywgY29uc3QgUmVuZGVyT2JqZWN0OjpQYWludEluZm8mIGksIGNvbnN0IEludFJlY3QmIHIp
Cit7CisgICAgcmV0dXJuIHBhaW50VGV4dEZpZWxkKG8sIGksIHIpOworfQorCitib29sIFJlbmRl
clRoZW1lV2luY2U6OnBhaW50U2VhcmNoRmllbGRDYW5jZWxCdXR0b24oUmVuZGVyT2JqZWN0KiBv
LCBjb25zdCBSZW5kZXJPYmplY3Q6OlBhaW50SW5mbyYgcGFpbnRJbmZvLCBjb25zdCBJbnRSZWN0
JiByKQoreworICAgIENvbG9yIGJ1dHRvbkNvbG9yID0gKG8tPm5vZGUoKSAmJiBvLT5ub2RlKCkt
PmFjdGl2ZSgpKSA/IENvbG9yKDEzOCwgMTM4LCAxMzgpIDogQ29sb3IoMTg2LCAxODYsIDE4Nik7
CisKKyAgICBJbnRTaXplIGNhbmNlbFNpemUoMTAsIDEwKTsKKyAgICBJbnRTaXplIGNhbmNlbFJh
ZGl1cyhjYW5jZWxTaXplLndpZHRoKCkgLyAyLCBjYW5jZWxTaXplLmhlaWdodCgpIC8gMik7Cisg
ICAgaW50IHggPSByLngoKSArIChyLndpZHRoKCkgLSBjYW5jZWxTaXplLndpZHRoKCkpIC8gMjsK
KyAgICBpbnQgeSA9IHIueSgpICsgKHIuaGVpZ2h0KCkgLSBjYW5jZWxTaXplLmhlaWdodCgpKSAv
IDIgKyAxOworICAgIEludFJlY3QgY2FuY2VsQm91bmRzKEludFBvaW50KHgsIHkpLCBjYW5jZWxT
aXplKTsKKyAgICBwYWludEluZm8uY29udGV4dC0+c2F2ZSgpOworICAgIHBhaW50SW5mby5jb250
ZXh0LT5hZGRSb3VuZGVkUmVjdENsaXAoY2FuY2VsQm91bmRzLCBjYW5jZWxSYWRpdXMsIGNhbmNl
bFJhZGl1cywgY2FuY2VsUmFkaXVzLCBjYW5jZWxSYWRpdXMpOworICAgIHBhaW50SW5mby5jb250
ZXh0LT5maWxsUmVjdChjYW5jZWxCb3VuZHMsIGJ1dHRvbkNvbG9yKTsKKworICAgIC8vIERyYXcg
dGhlICd4JworICAgIEludFNpemUgeFNpemUoMywgMyk7CisgICAgSW50UmVjdCB4Qm91bmRzKGNh
bmNlbEJvdW5kcy5sb2NhdGlvbigpICsgSW50U2l6ZSgzLCAzKSwgeFNpemUpOworICAgIHBhaW50
SW5mby5jb250ZXh0LT5zZXRTdHJva2VDb2xvcihDb2xvcjo6d2hpdGUpOworICAgIHBhaW50SW5m
by5jb250ZXh0LT5kcmF3TGluZSh4Qm91bmRzLmxvY2F0aW9uKCksICB4Qm91bmRzLmxvY2F0aW9u
KCkgKyB4Qm91bmRzLnNpemUoKSk7CisgICAgcGFpbnRJbmZvLmNvbnRleHQtPmRyYXdMaW5lKElu
dFBvaW50KHhCb3VuZHMucmlnaHQoKSwgeEJvdW5kcy55KCkpLCAgSW50UG9pbnQoeEJvdW5kcy54
KCksIHhCb3VuZHMuYm90dG9tKCkpKTsKKworICAgIHBhaW50SW5mby5jb250ZXh0LT5yZXN0b3Jl
KCk7CisgICAgcmV0dXJuIGZhbHNlOworfQorCit2b2lkIFJlbmRlclRoZW1lV2luY2U6OmFkanVz
dFNlYXJjaEZpZWxkQ2FuY2VsQnV0dG9uU3R5bGUoQ1NTU3R5bGVTZWxlY3Rvciogc2VsZWN0b3Is
IFJlbmRlclN0eWxlKiBzdHlsZSwgRWxlbWVudCogZSkgY29uc3QKK3sKKyAgICBJbnRTaXplIGNh
bmNlbFNpemUoMTMsIDExKTsKKyAgICBzdHlsZS0+c2V0V2lkdGgoTGVuZ3RoKGNhbmNlbFNpemUu
d2lkdGgoKSwgRml4ZWQpKTsKKyAgICBzdHlsZS0+c2V0SGVpZ2h0KExlbmd0aChjYW5jZWxTaXpl
LmhlaWdodCgpLCBGaXhlZCkpOworfQorCit2b2lkIFJlbmRlclRoZW1lV2luY2U6OmFkanVzdFNl
YXJjaEZpZWxkRGVjb3JhdGlvblN0eWxlKENTU1N0eWxlU2VsZWN0b3IqIHNlbGVjdG9yLCBSZW5k
ZXJTdHlsZSogc3R5bGUsIEVsZW1lbnQqIGUpIGNvbnN0Cit7CisgICAgSW50U2l6ZSBlbXB0eVNp
emUoMSwgMTEpOworICAgIHN0eWxlLT5zZXRXaWR0aChMZW5ndGgoZW1wdHlTaXplLndpZHRoKCks
IEZpeGVkKSk7CisgICAgc3R5bGUtPnNldEhlaWdodChMZW5ndGgoZW1wdHlTaXplLmhlaWdodCgp
LCBGaXhlZCkpOworfQorCit2b2lkIFJlbmRlclRoZW1lV2luY2U6OmFkanVzdFNlYXJjaEZpZWxk
UmVzdWx0c0RlY29yYXRpb25TdHlsZShDU1NTdHlsZVNlbGVjdG9yKiBzZWxlY3RvciwgUmVuZGVy
U3R5bGUqIHN0eWxlLCBFbGVtZW50KiBlKSBjb25zdAoreworICAgIEludFNpemUgbWFnbmlmaWVy
U2l6ZSgxNSwgMTEpOworICAgIHN0eWxlLT5zZXRXaWR0aChMZW5ndGgobWFnbmlmaWVyU2l6ZS53
aWR0aCgpLCBGaXhlZCkpOworICAgIHN0eWxlLT5zZXRIZWlnaHQoTGVuZ3RoKG1hZ25pZmllclNp
emUuaGVpZ2h0KCksIEZpeGVkKSk7Cit9CisKK2Jvb2wgUmVuZGVyVGhlbWVXaW5jZTo6cGFpbnRT
ZWFyY2hGaWVsZFJlc3VsdHNEZWNvcmF0aW9uKFJlbmRlck9iamVjdCogbywgY29uc3QgUmVuZGVy
T2JqZWN0OjpQYWludEluZm8mIHBhaW50SW5mbywgY29uc3QgSW50UmVjdCYgcikKK3sKKyAgICBu
b3RJbXBsZW1lbnRlZCgpOworICAgIHJldHVybiBmYWxzZTsKK30KKwordm9pZCBSZW5kZXJUaGVt
ZVdpbmNlOjphZGp1c3RTZWFyY2hGaWVsZFJlc3VsdHNCdXR0b25TdHlsZShDU1NTdHlsZVNlbGVj
dG9yKiBzZWxlY3RvciwgUmVuZGVyU3R5bGUqIHN0eWxlLCBFbGVtZW50KiBlKSBjb25zdAorewor
ICAgIEludFNpemUgbWFnbmlmaWVyU2l6ZSgxNSwgMTEpOworICAgIHN0eWxlLT5zZXRXaWR0aChM
ZW5ndGgobWFnbmlmaWVyU2l6ZS53aWR0aCgpLCBGaXhlZCkpOworICAgIHN0eWxlLT5zZXRIZWln
aHQoTGVuZ3RoKG1hZ25pZmllclNpemUuaGVpZ2h0KCksIEZpeGVkKSk7Cit9CisKK2Jvb2wgUmVu
ZGVyVGhlbWVXaW5jZTo6cGFpbnRTZWFyY2hGaWVsZFJlc3VsdHNCdXR0b24oUmVuZGVyT2JqZWN0
KiBvLCBjb25zdCBSZW5kZXJPYmplY3Q6OlBhaW50SW5mbyYgcGFpbnRJbmZvLCBjb25zdCBJbnRS
ZWN0JiByKQoreworICAgIHBhaW50U2VhcmNoRmllbGRSZXN1bHRzRGVjb3JhdGlvbihvLCBwYWlu
dEluZm8sIHIpOworICAgIHJldHVybiBmYWxzZTsKK30KKwordm9pZCBSZW5kZXJUaGVtZVdpbmNl
OjphZGp1c3RNZW51TGlzdEJ1dHRvblN0eWxlKENTU1N0eWxlU2VsZWN0b3IqIHNlbGVjdG9yLCBS
ZW5kZXJTdHlsZSogc3R5bGUsIEVsZW1lbnQqIGUpIGNvbnN0Cit7CisgICAgLy8gVGhlc2UgYXJl
IHRoZSBwYWRkaW5ncyBuZWVkZWQgdG8gcGxhY2UgdGhlIHRleHQgY29ycmVjdGx5IGluIHRoZSA8
c2VsZWN0PiBib3gKKyAgICBjb25zdCBpbnQgZHJvcERvd25Cb3hQYWRkaW5nVG9wICAgID0gMjsK
KyAgICBjb25zdCBpbnQgZHJvcERvd25Cb3hQYWRkaW5nUmlnaHQgID0gc3R5bGUtPmRpcmVjdGlv
bigpID09IExUUiA/IDQgKyBkcm9wRG93bkJ1dHRvbldpZHRoIDogNDsKKyAgICBjb25zdCBpbnQg
ZHJvcERvd25Cb3hQYWRkaW5nQm90dG9tID0gMjsKKyAgICBjb25zdCBpbnQgZHJvcERvd25Cb3hQ
YWRkaW5nTGVmdCAgID0gc3R5bGUtPmRpcmVjdGlvbigpID09IExUUiA/IDQgOiA0ICsgZHJvcERv
d25CdXR0b25XaWR0aDsKKyAgICAvLyBUaGUgPHNlbGVjdD4gYm94IG11c3QgYmUgYXQgbGVhc3Qg
MTJweCBoaWdoIGZvciB0aGUgYnV0dG9uIHRvIHJlbmRlciBuaWNlbHkgb24gV2luZG93cworICAg
IGNvbnN0IGludCBkcm9wRG93bkJveE1pbkhlaWdodCA9IDEyOworCisgICAgLy8gUG9zaXRpb24g
dGhlIHRleHQgY29ycmVjdGx5IHdpdGhpbiB0aGUgc2VsZWN0IGJveCBhbmQgbWFrZSB0aGUgYm94
IHdpZGUgZW5vdWdoIHRvIGZpdCB0aGUgZHJvcGRvd24gYnV0dG9uCisgICAgc3R5bGUtPnNldFBh
ZGRpbmdUb3AoTGVuZ3RoKGRyb3BEb3duQm94UGFkZGluZ1RvcCwgRml4ZWQpKTsKKyAgICBzdHls
ZS0+c2V0UGFkZGluZ1JpZ2h0KExlbmd0aChkcm9wRG93bkJveFBhZGRpbmdSaWdodCwgRml4ZWQp
KTsKKyAgICBzdHlsZS0+c2V0UGFkZGluZ0JvdHRvbShMZW5ndGgoZHJvcERvd25Cb3hQYWRkaW5n
Qm90dG9tLCBGaXhlZCkpOworICAgIHN0eWxlLT5zZXRQYWRkaW5nTGVmdChMZW5ndGgoZHJvcERv
d25Cb3hQYWRkaW5nTGVmdCwgRml4ZWQpKTsKKworICAgIC8vIEhlaWdodCBpcyBsb2NrZWQgdG8g
YXV0bworICAgIHN0eWxlLT5zZXRIZWlnaHQoTGVuZ3RoKEF1dG8pKTsKKworICAgIC8vIENhbGN1
bGF0ZSBvdXIgbWluLWhlaWdodAorICAgIGludCBtaW5IZWlnaHQgPSBzdHlsZS0+Zm9udCgpLmhl
aWdodCgpOworICAgIG1pbkhlaWdodCA9IG1heChtaW5IZWlnaHQsIGRyb3BEb3duQm94TWluSGVp
Z2h0KTsKKworICAgIHN0eWxlLT5zZXRNaW5IZWlnaHQoTGVuZ3RoKG1pbkhlaWdodCwgRml4ZWQp
KTsKKworICAgIC8vIFdoaXRlLXNwYWNlIGlzIGxvY2tlZCB0byBwcmUKKyAgICBzdHlsZS0+c2V0
V2hpdGVTcGFjZShQUkUpOworCisgICAgRFdPUkQgY29sb3JNZW51ID0gR2V0U3lzQ29sb3IoQ09M
T1JfTUVOVSk7CisgICAgRFdPUkQgY29sb3JNZW51VGV4dCA9IEdldFN5c0NvbG9yKENPTE9SX01F
TlVURVhUKTsKKyAgICBDb2xvciBiZ0NvbG9yKEdldFJWYWx1ZShjb2xvck1lbnUpLCBHZXRHVmFs
dWUoY29sb3JNZW51KSwgR2V0QlZhbHVlKGNvbG9yTWVudSksIDI1NSk7CisgICAgQ29sb3IgdGV4
dENvbG9yKEdldFJWYWx1ZShjb2xvck1lbnVUZXh0KSwgR2V0R1ZhbHVlKGNvbG9yTWVudVRleHQp
LCBHZXRCVmFsdWUoY29sb3JNZW51VGV4dCksIDI1NSk7CisgICAgaWYgKGJnQ29sb3IgPT0gdGV4
dENvbG9yKQorICAgICAgICB0ZXh0Q29sb3Iuc2V0UkdCKCh+YmdDb2xvci5yZ2IoKSkgfCAweEZG
MDAwMDAwKTsKKyAgICBzdHlsZS0+Y2xlYXJCYWNrZ3JvdW5kTGF5ZXJzKCk7CisgICAgc3R5bGUt
PmFjY2Vzc0JhY2tncm91bmRMYXllcnMoKS0+c2V0Q2xpcChDb250ZW50RmlsbEJveCk7CisgICAg
c3R5bGUtPnNldEJhY2tncm91bmRDb2xvcihiZ0NvbG9yKTsKKyAgICBzdHlsZS0+c2V0Q29sb3Io
dGV4dENvbG9yKTsKK30KKworI2lmIEVOQUJMRShWSURFTykKKy8vIEF0dGVtcHQgdG8gcmV0cmll
dmUgYSBIVE1MTWVkaWFFbGVtZW50IGZyb20gYSBOb2RlLiBSZXR1cm5zIDAgaWYgb25lIGNhbm5v
dCBiZSBmb3VuZC4KK3N0YXRpYyBIVE1MTWVkaWFFbGVtZW50KiBtZWRpYUVsZW1lbnRQYXJlbnQo
Tm9kZSogbm9kZSkKK3sKKyAgICBpZiAoIW5vZGUpCisgICAgICAgIHJldHVybiAwOworICAgIE5v
ZGUqIG1lZGlhTm9kZSA9IG5vZGUtPnNoYWRvd0FuY2VzdG9yTm9kZSgpOworICAgIGlmICghbWVk
aWFOb2RlIHx8ICghbWVkaWFOb2RlLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6dmlkZW9UYWcpICYm
ICFtZWRpYU5vZGUtPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjphdWRpb1RhZykpKQorICAgICAgICBy
ZXR1cm4gMDsKKworICAgIHJldHVybiBzdGF0aWNfY2FzdDxIVE1MTWVkaWFFbGVtZW50Kj4obWVk
aWFOb2RlKTsKK30KKyNlbmRpZgorCitib29sIFJlbmRlclRoZW1lV2luY2U6OnBhaW50U2xpZGVy
VHJhY2soUmVuZGVyT2JqZWN0KiBvLCBjb25zdCBSZW5kZXJPYmplY3Q6OlBhaW50SW5mbyYgaSwg
Y29uc3QgSW50UmVjdCYgcikKK3sKKyAgICBib29sIHJjID0gUmVuZGVyVGhlbWU6OnBhaW50U2xp
ZGVyVHJhY2sobywgaSwgcik7CisgICAgSW50UG9pbnQgbGVmdCA9IEludFBvaW50KHIueCgpICsg
MiwgKHIueSgpICsgci5ib3R0b20oKSkgLyAyKTsKKyAgICBpLmNvbnRleHQtPnNhdmUoKTsKKyAg
ICBpLmNvbnRleHQtPnNldFN0cm9rZUNvbG9yKENvbG9yOjpncmF5KTsKKyAgICBpLmNvbnRleHQt
PnNldEZpbGxDb2xvcihDb2xvcjo6Z3JheSk7CisgICAgaS5jb250ZXh0LT5maWxsUmVjdChyKTsK
KyNpZiBFTkFCTEUoVklERU8pCisgICAgSFRNTE1lZGlhRWxlbWVudCAqbWVkaWFFbGVtZW50ID0g
bWVkaWFFbGVtZW50UGFyZW50KG8tPm5vZGUoKSk7CisgICAgaWYgKG1lZGlhRWxlbWVudCkgewor
ICAgICAgICBpLmNvbnRleHQtPnNldFN0cm9rZUNvbG9yKENvbG9yKDAsIDB4ZmYsIDApKTsKKyAg
ICAgICAgSW50UG9pbnQgcmlnaHQgPSBJbnRQb2ludChsZWZ0LngoKSArIG1lZGlhRWxlbWVudC0+
cGVyY2VudExvYWRlZCgpICogKHIucmlnaHQoKSAtIHIueCgpIC0gNCksIChyLnkoKSArIHIuYm90
dG9tKCkpIC8gMik7CisgICAgICAgIGkuY29udGV4dC0+ZHJhd0xpbmUobGVmdCwgcmlnaHQpOwor
ICAgICAgICBsZWZ0ID0gcmlnaHQ7CisgICAgfQorI2VuZGlmCisgICAgaS5jb250ZXh0LT5zZXRT
dHJva2VDb2xvcihDb2xvcjo6YmxhY2spOworICAgIGkuY29udGV4dC0+ZHJhd0xpbmUobGVmdCwg
SW50UG9pbnQoci5yaWdodCgpIC0gMiwgbGVmdC55KCkpKTsKKyAgICBpLmNvbnRleHQtPnJlc3Rv
cmUoKTsKKyAgICByZXR1cm4gcmM7Cit9CisKK2Jvb2wgUmVuZGVyVGhlbWVXaW5jZTo6cGFpbnRT
bGlkZXJUaHVtYihSZW5kZXJPYmplY3QqIG8sIGNvbnN0IFJlbmRlck9iamVjdDo6UGFpbnRJbmZv
JiBpLCBjb25zdCBJbnRSZWN0JiByKQoreworICAgIGJvb2wgcmMgPSBSZW5kZXJUaGVtZTo6cGFp
bnRTbGlkZXJUaHVtYihvLCBpLCByKTsKKyAgICBpLmNvbnRleHQtPnNhdmUoKTsKKyAgICBpLmNv
bnRleHQtPnNldFN0cm9rZUNvbG9yKENvbG9yOjpibGFjayk7CisgICAgaS5jb250ZXh0LT5zZXRG
aWxsQ29sb3IoQ29sb3I6OmJsYWNrKTsKKyNpZiBFTkFCTEUoVklERU8pCisgICAgSFRNTE1lZGlh
RWxlbWVudCAqbWVkaWFFbGVtZW50ID0gbWVkaWFFbGVtZW50UGFyZW50KG8tPm5vZGUoKSk7Cisg
ICAgaWYgKG1lZGlhRWxlbWVudCkgeworICAgICAgICBmbG9hdCBwdCA9IChtZWRpYUVsZW1lbnQt
PmN1cnJlbnRUaW1lKCkgLSBtZWRpYUVsZW1lbnQtPnN0YXJ0VGltZSgpKSAvIG1lZGlhRWxlbWVu
dC0+ZHVyYXRpb24oKTsKKyAgICAgICAgRmxvYXRSZWN0IGludFJlY3QgPSByOworICAgICAgICBp
bnRSZWN0LnNldFgoaW50UmVjdC54KCkgKyBpbnRSZWN0LndpZHRoKCkgKiBwdCAtIDIpOworICAg
ICAgICBpbnRSZWN0LnNldFdpZHRoKDUpOworICAgICAgICBpLmNvbnRleHQtPmZpbGxSZWN0KGlu
dFJlY3QpOworICAgIH0KKyNlbmRpZgorICAgIGkuY29udGV4dC0+cmVzdG9yZSgpOworICAgIHJl
dHVybiByYzsKK30KKworaW50IFJlbmRlclRoZW1lV2luY2U6OmJ1dHRvbkludGVybmFsUGFkZGlu
Z0xlZnQoKSBjb25zdAoreworICAgIHJldHVybiAzOworfQorCitpbnQgUmVuZGVyVGhlbWVXaW5j
ZTo6YnV0dG9uSW50ZXJuYWxQYWRkaW5nUmlnaHQoKSBjb25zdAoreworICAgIHJldHVybiAzOwor
fQorCitpbnQgUmVuZGVyVGhlbWVXaW5jZTo6YnV0dG9uSW50ZXJuYWxQYWRkaW5nVG9wKCkgY29u
c3QKK3sKKyAgICByZXR1cm4gMTsKK30KKworaW50IFJlbmRlclRoZW1lV2luY2U6OmJ1dHRvbklu
dGVybmFsUGFkZGluZ0JvdHRvbSgpIGNvbnN0Cit7CisgICAgcmV0dXJuIDE7Cit9CisKK3ZvaWQg
UmVuZGVyVGhlbWVXaW5jZTo6YWRqdXN0U2VhcmNoRmllbGRTdHlsZShDU1NTdHlsZVNlbGVjdG9y
KiBzZWxlY3RvciwgUmVuZGVyU3R5bGUqIHN0eWxlLCBFbGVtZW50KiBlKSBjb25zdAoreworICAg
IGNvbnN0IGludCBwYWRkaW5nID0gMTsKKyAgICBzdHlsZS0+c2V0UGFkZGluZ0xlZnQoTGVuZ3Ro
KHBhZGRpbmcsIEZpeGVkKSk7CisgICAgc3R5bGUtPnNldFBhZGRpbmdSaWdodChMZW5ndGgocGFk
ZGluZywgRml4ZWQpKTsKKyAgICBzdHlsZS0+c2V0UGFkZGluZ1RvcChMZW5ndGgocGFkZGluZywg
Rml4ZWQpKTsKKyAgICBzdHlsZS0+c2V0UGFkZGluZ0JvdHRvbShMZW5ndGgocGFkZGluZywgRml4
ZWQpKTsKK30KKworI2lmIEVOQUJMRShWSURFTykKKworYm9vbCBSZW5kZXJUaGVtZVdpbmNlOjpw
YWludE1lZGlhRnVsbHNjcmVlbkJ1dHRvbihSZW5kZXJPYmplY3QqIG8sIGNvbnN0IFJlbmRlck9i
amVjdDo6UGFpbnRJbmZvJiBwYWludEluZm8sIGNvbnN0IEludFJlY3QmIHIpCit7CisgICAgYm9v
bCByYyA9IHBhaW50QnV0dG9uKG8sIHBhaW50SW5mbywgcik7CisgICAgRmxvYXRSZWN0IGltUmVj
dCA9IHI7CisgICAgaW1SZWN0LmluZmxhdGUoLTIpOworICAgIHBhaW50SW5mby5jb250ZXh0LT5z
YXZlKCk7CisgICAgcGFpbnRJbmZvLmNvbnRleHQtPnNldFN0cm9rZUNvbG9yKENvbG9yOjpibGFj
ayk7CisgICAgcGFpbnRJbmZvLmNvbnRleHQtPnNldEZpbGxDb2xvcihDb2xvcjo6Z3JheSk7Cisg
ICAgcGFpbnRJbmZvLmNvbnRleHQtPmZpbGxSZWN0KGltUmVjdCk7CisgICAgcGFpbnRJbmZvLmNv
bnRleHQtPnJlc3RvcmUoKTsKKyAgICByZXR1cm4gcmM7Cit9CisKK2Jvb2wgUmVuZGVyVGhlbWVX
aW5jZTo6cGFpbnRNZWRpYU11dGVCdXR0b24oUmVuZGVyT2JqZWN0KiBvLCBjb25zdCBSZW5kZXJP
YmplY3Q6OlBhaW50SW5mbyYgcGFpbnRJbmZvLCBjb25zdCBJbnRSZWN0JiByKQoreworICAgIGJv
b2wgcmMgPSBwYWludEJ1dHRvbihvLCBwYWludEluZm8sIHIpOworICAgIEhUTUxNZWRpYUVsZW1l
bnQgKm1lZGlhRWxlbWVudCA9IG1lZGlhRWxlbWVudFBhcmVudChvLT5ub2RlKCkpOworICAgIGJv
b2wgbXV0ZWQgPSAhbWVkaWFFbGVtZW50IHx8IG1lZGlhRWxlbWVudC0+bXV0ZWQoKTsKKyAgICBG
bG9hdFJlY3QgaW1SZWN0ID0gcjsKKyAgICBpbVJlY3QuaW5mbGF0ZSgtMik7CisgICAgcGFpbnRJ
bmZvLmNvbnRleHQtPnNhdmUoKTsKKyAgICBwYWludEluZm8uY29udGV4dC0+c2V0U3Ryb2tlQ29s
b3IoQ29sb3I6OmJsYWNrKTsKKyAgICBwYWludEluZm8uY29udGV4dC0+c2V0RmlsbENvbG9yKENv
bG9yOjpibGFjayk7CisgICAgRmxvYXRQb2ludCBwdHNbNl0gPSB7CisgICAgICAgIEZsb2F0UG9p
bnQoaW1SZWN0LngoKSArIDEsIGltUmVjdC55KCkgKyBpbVJlY3QuaGVpZ2h0KCkgLyAzLjApLAor
ICAgICAgICBGbG9hdFBvaW50KGltUmVjdC54KCkgKyAxICsgaW1SZWN0LndpZHRoKCkgLyAyLjAs
IGltUmVjdC55KCkgKyBpbVJlY3QuaGVpZ2h0KCkgLyAzLjApLAorICAgICAgICBGbG9hdFBvaW50
KGltUmVjdC5yaWdodCgpIC0gMSwgaW1SZWN0LnkoKSksCisgICAgICAgIEZsb2F0UG9pbnQoaW1S
ZWN0LnJpZ2h0KCkgLSAxLCBpbVJlY3QuYm90dG9tKCkpLAorICAgICAgICBGbG9hdFBvaW50KGlt
UmVjdC54KCkgKyAxICsgaW1SZWN0LndpZHRoKCkgLyAyLjAsIGltUmVjdC55KCkgKyAyLjAgKiBp
bVJlY3QuaGVpZ2h0KCkgLyAzLjApLAorICAgICAgICBGbG9hdFBvaW50KGltUmVjdC54KCkgKyAx
LCBpbVJlY3QueSgpICsgMi4wICogaW1SZWN0LmhlaWdodCgpIC8gMy4wKQorICAgIH07CisgICAg
cGFpbnRJbmZvLmNvbnRleHQtPmRyYXdDb252ZXhQb2x5Z29uKDYsIHB0cyk7CisgICAgaWYgKG11
dGVkKQorICAgICAgICBwYWludEluZm8uY29udGV4dC0+ZHJhd0xpbmUoSW50UG9pbnQoaW1SZWN0
LnJpZ2h0KCksIGltUmVjdC55KCkpLCBJbnRQb2ludChpbVJlY3QueCgpLCBpbVJlY3QuYm90dG9t
KCkpKTsKKyAgICBwYWludEluZm8uY29udGV4dC0+cmVzdG9yZSgpOworICAgIHJldHVybiByYzsK
K30KKworYm9vbCBSZW5kZXJUaGVtZVdpbmNlOjpwYWludE1lZGlhUGxheUJ1dHRvbihSZW5kZXJP
YmplY3QqIG8sIGNvbnN0IFJlbmRlck9iamVjdDo6UGFpbnRJbmZvJiBwYWludEluZm8sIGNvbnN0
IEludFJlY3QmIHIpCit7CisgICAgYm9vbCByYyA9IHBhaW50QnV0dG9uKG8sIHBhaW50SW5mbywg
cik7CisgICAgRmxvYXRSZWN0IGltUmVjdCA9IHI7CisgICAgaW1SZWN0LmluZmxhdGUoLTMpOwor
ICAgIHBhaW50SW5mby5jb250ZXh0LT5zYXZlKCk7CisgICAgcGFpbnRJbmZvLmNvbnRleHQtPnNl
dFN0cm9rZUNvbG9yKENvbG9yOjpibGFjayk7CisgICAgcGFpbnRJbmZvLmNvbnRleHQtPnNldEZp
bGxDb2xvcihDb2xvcjo6YmxhY2spOworICAgIEhUTUxNZWRpYUVsZW1lbnQgKm1lZGlhRWxlbWVu
dCA9IG1lZGlhRWxlbWVudFBhcmVudChvLT5ub2RlKCkpOworICAgIGJvb2wgcGF1c2VkID0gIW1l
ZGlhRWxlbWVudCB8fCBtZWRpYUVsZW1lbnQtPnBhdXNlZCgpOworICAgIGlmIChwYXVzZWQpIHsK
KyAgICAgICAgZmxvYXQgd2lkdGggPSBpbVJlY3Qud2lkdGgoKTsKKyAgICAgICAgaW1SZWN0LnNl
dFdpZHRoKHdpZHRoIC8gMy4wKTsKKyAgICAgICAgcGFpbnRJbmZvLmNvbnRleHQtPmZpbGxSZWN0
KGltUmVjdCk7CisgICAgICAgIGltUmVjdC5tb3ZlKDIuMCAqIHdpZHRoIC8gMy4wLCAwKTsKKyAg
ICAgICAgcGFpbnRJbmZvLmNvbnRleHQtPmZpbGxSZWN0KGltUmVjdCk7CisgICAgfSBlbHNlIHsK
KyAgICAgICAgRmxvYXRQb2ludCBwdHNbM10gPSB7IEZsb2F0UG9pbnQoaW1SZWN0LngoKSwgaW1S
ZWN0LnkoKSksIEZsb2F0UG9pbnQoaW1SZWN0LnJpZ2h0KCksIChpbVJlY3QueSgpICsgaW1SZWN0
LmJvdHRvbSgpKSAvIDIuMCksIEZsb2F0UG9pbnQoaW1SZWN0LngoKSwgaW1SZWN0LmJvdHRvbSgp
KSB9OworICAgICAgICBwYWludEluZm8uY29udGV4dC0+ZHJhd0NvbnZleFBvbHlnb24oMywgcHRz
KTsKKyAgICB9CisgICAgcGFpbnRJbmZvLmNvbnRleHQtPnJlc3RvcmUoKTsKKyAgICByZXR1cm4g
cmM7Cit9CisKK2Jvb2wgUmVuZGVyVGhlbWVXaW5jZTo6cGFpbnRNZWRpYVNlZWtCYWNrQnV0dG9u
KFJlbmRlck9iamVjdCogbywgY29uc3QgUmVuZGVyT2JqZWN0OjpQYWludEluZm8mIHBhaW50SW5m
bywgY29uc3QgSW50UmVjdCYgcikKK3sKKyAgICBib29sIHJjID0gcGFpbnRCdXR0b24obywgcGFp
bnRJbmZvLCByKTsKKyAgICBGbG9hdFJlY3QgaW1SZWN0ID0gcjsKKyAgICBpbVJlY3QuaW5mbGF0
ZSgtMyk7CisgICAgRmxvYXRQb2ludCBwdHNbM10gPSB7IEZsb2F0UG9pbnQoKGltUmVjdC54KCkg
KyBpbVJlY3QucmlnaHQoKSkgLyAyLjAsIGltUmVjdC55KCkpLCBGbG9hdFBvaW50KGltUmVjdC54
KCksIChpbVJlY3QueSgpICsgaW1SZWN0LmJvdHRvbSgpKSAvIDIuMCksIEZsb2F0UG9pbnQoKGlt
UmVjdC54KCkgKyBpbVJlY3QucmlnaHQoKSkgLyAyLjAsIGltUmVjdC5ib3R0b20oKSkgfTsKKyAg
ICBGbG9hdFBvaW50IHB0czJbM10gPSB7IEZsb2F0UG9pbnQoaW1SZWN0LnJpZ2h0KCksIGltUmVj
dC55KCkpLCBGbG9hdFBvaW50KChpbVJlY3QueCgpICsgaW1SZWN0LnJpZ2h0KCkpIC8gMi4wLCAo
aW1SZWN0LnkoKSArIGltUmVjdC5ib3R0b20oKSkgLyAyLjApLCBGbG9hdFBvaW50KGltUmVjdC5y
aWdodCgpLCBpbVJlY3QuYm90dG9tKCkpIH07CisgICAgcGFpbnRJbmZvLmNvbnRleHQtPnNhdmUo
KTsKKyAgICBwYWludEluZm8uY29udGV4dC0+c2V0U3Ryb2tlQ29sb3IoQ29sb3I6OmJsYWNrKTsK
KyAgICBwYWludEluZm8uY29udGV4dC0+c2V0RmlsbENvbG9yKENvbG9yOjpibGFjayk7CisgICAg
cGFpbnRJbmZvLmNvbnRleHQtPmRyYXdDb252ZXhQb2x5Z29uKDMsIHB0cyk7CisgICAgcGFpbnRJ
bmZvLmNvbnRleHQtPmRyYXdDb252ZXhQb2x5Z29uKDMsIHB0czIpOworICAgIHBhaW50SW5mby5j
b250ZXh0LT5yZXN0b3JlKCk7CisgICAgcmV0dXJuIHJjOworfQorCitib29sIFJlbmRlclRoZW1l
V2luY2U6OnBhaW50TWVkaWFTZWVrRm9yd2FyZEJ1dHRvbihSZW5kZXJPYmplY3QqIG8sIGNvbnN0
IFJlbmRlck9iamVjdDo6UGFpbnRJbmZvJiBwYWludEluZm8sIGNvbnN0IEludFJlY3QmIHIpCit7
CisgICAgYm9vbCByYyA9IHBhaW50QnV0dG9uKG8sIHBhaW50SW5mbywgcik7CisgICAgRmxvYXRS
ZWN0IGltUmVjdCA9IHI7CisgICAgaW1SZWN0LmluZmxhdGUoLTMpOworICAgIEZsb2F0UG9pbnQg
cHRzWzNdID0geyBGbG9hdFBvaW50KGltUmVjdC54KCksIGltUmVjdC55KCkpLCBGbG9hdFBvaW50
KChpbVJlY3QueCgpICsgaW1SZWN0LnJpZ2h0KCkpIC8gMi4wLCAoaW1SZWN0LnkoKSArIGltUmVj
dC5ib3R0b20oKSkgLyAyLjApLCBGbG9hdFBvaW50KGltUmVjdC54KCksIGltUmVjdC5ib3R0b20o
KSkgfTsKKyAgICBGbG9hdFBvaW50IHB0czJbM10gPSB7IEZsb2F0UG9pbnQoKGltUmVjdC54KCkg
KyBpbVJlY3QucmlnaHQoKSkgLyAyLjAsIGltUmVjdC55KCkpLCBGbG9hdFBvaW50KGltUmVjdC5y
aWdodCgpLCAoaW1SZWN0LnkoKSArIGltUmVjdC5ib3R0b20oKSkgLyAyLjApLCBGbG9hdFBvaW50
KChpbVJlY3QueCgpICsgaW1SZWN0LnJpZ2h0KCkpIC8gMi4wLCBpbVJlY3QuYm90dG9tKCkpIH07
CisgICAgcGFpbnRJbmZvLmNvbnRleHQtPnNhdmUoKTsKKyAgICBwYWludEluZm8uY29udGV4dC0+
c2V0U3Ryb2tlQ29sb3IoQ29sb3I6OmJsYWNrKTsKKyAgICBwYWludEluZm8uY29udGV4dC0+c2V0
RmlsbENvbG9yKENvbG9yOjpibGFjayk7CisgICAgcGFpbnRJbmZvLmNvbnRleHQtPmRyYXdDb252
ZXhQb2x5Z29uKDMsIHB0cyk7CisgICAgcGFpbnRJbmZvLmNvbnRleHQtPmRyYXdDb252ZXhQb2x5
Z29uKDMsIHB0czIpOworICAgIHBhaW50SW5mby5jb250ZXh0LT5yZXN0b3JlKCk7CisgICAgcmV0
dXJuIHJjOworfQorCitib29sIFJlbmRlclRoZW1lV2luY2U6OnBhaW50TWVkaWFTbGlkZXJUcmFj
ayhSZW5kZXJPYmplY3QqIG8sIGNvbnN0IFJlbmRlck9iamVjdDo6UGFpbnRJbmZvJiBwYWludElu
Zm8sIGNvbnN0IEludFJlY3QmIHIpCit7CisgICAgcmV0dXJuIHBhaW50U2xpZGVyVHJhY2sobywg
cGFpbnRJbmZvLCByKTsKK30KKworYm9vbCBSZW5kZXJUaGVtZVdpbmNlOjpwYWludE1lZGlhU2xp
ZGVyVGh1bWIoUmVuZGVyT2JqZWN0KiBvLCBjb25zdCBSZW5kZXJPYmplY3Q6OlBhaW50SW5mbyYg
cGFpbnRJbmZvLCBjb25zdCBJbnRSZWN0JiByKQoreworICAgIHJldHVybiBwYWludFNsaWRlclRo
dW1iKG8sIHBhaW50SW5mbywgcik7Cit9CisjZW5kaWYKKworfQorCmRpZmYgLS1naXQgYS9XZWJD
b3JlL3JlbmRlcmluZy9SZW5kZXJUaGVtZVdpbmNlLmggYi9XZWJDb3JlL3JlbmRlcmluZy9SZW5k
ZXJUaGVtZVdpbmNlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2M4MWI4
ZgotLS0gL2Rldi9udWxsCisrKyBiL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRoZW1lV2luY2Uu
aApAQCAtMCwwICsxLDE0NyBAQAorLyoKKyAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBXZWJL
aXQgcHJvamVjdC4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYsIDIwMDggQXBwbGUgQ29tcHV0
ZXIsIEluYy4KKyAqIENvcHlyaWdodCAoQykgMjAwOSBUb3JjaCBNb2JpbGUsIEluYy4KKyAqCisg
KiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQg
YW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBH
ZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdh
cmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChh
dCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlz
IGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQg
V0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBv
ZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NF
LiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9y
ZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhl
IEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBs
aWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0
aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZp
ZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKgorICovCisKKyNp
Zm5kZWYgUmVuZGVyVGhlbWVXaW5jZWNlX2gKKyNkZWZpbmUgUmVuZGVyVGhlbWVXaW5jZWNlX2gK
KworI2luY2x1ZGUgIlJlbmRlclRoZW1lLmgiCisKK3R5cGVkZWYgdm9pZCogSEFORExFOwordHlw
ZWRlZiBzdHJ1Y3QgSElOU1RBTkNFX18qIEhJTlNUQU5DRTsKK3R5cGVkZWYgSElOU1RBTkNFIEhN
T0RVTEU7CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworICAgIHN0cnVjdCBUaGVtZURhdGEgewor
ICAgICAgICBUaGVtZURhdGEoKSA6bV9wYXJ0KDApLCBtX3N0YXRlKDApLCBtX2NsYXNzaWNTdGF0
ZSgwKSB7fQorICAgICAgICBUaGVtZURhdGEoaW50IHBhcnQsIGludCBzdGF0ZSkKKyAgICAgICAg
ICAgIDogbV9wYXJ0KHBhcnQpCisgICAgICAgICAgICAsIG1fc3RhdGUoc3RhdGUpCisgICAgICAg
ICAgICAsIG1fY2xhc3NpY1N0YXRlKDApCisgICAgICAgIHsgfQorCisgICAgICAgIHVuc2lnbmVk
IG1fcGFydDsKKyAgICAgICAgdW5zaWduZWQgbV9zdGF0ZTsKKyAgICAgICAgdW5zaWduZWQgbV9j
bGFzc2ljU3RhdGU7CisgICAgfTsKKworICAgIGNsYXNzIFJlbmRlclRoZW1lV2luY2UgOiBwdWJs
aWMgUmVuZGVyVGhlbWUgeworICAgIHB1YmxpYzoKKyAgICAgICAgc3RhdGljIFBhc3NSZWZQdHI8
UmVuZGVyVGhlbWU+IGNyZWF0ZSgpOworICAgICAgICB+UmVuZGVyVGhlbWVXaW5jZSgpOworCisg
ICAgICAgIHZpcnR1YWwgU3RyaW5nIGV4dHJhRGVmYXVsdFN0eWxlU2hlZXQoKTsKKyAgICAgICAg
dmlydHVhbCBTdHJpbmcgZXh0cmFRdWlya3NTdHlsZVNoZWV0KCk7CisKKyAgICAgICAgLy8gQSBt
ZXRob2QgYXNraW5nIGlmIHRoZSB0aGVtZSdzIGNvbnRyb2xzIGFjdHVhbGx5IGNhcmUgYWJvdXQg
cmVkcmF3aW5nIHdoZW4gaG92ZXJlZC4KKyAgICAgICAgdmlydHVhbCBib29sIHN1cHBvcnRzSG92
ZXIoY29uc3QgUmVuZGVyU3R5bGUqKSBjb25zdDsKKworICAgICAgICB2aXJ0dWFsIENvbG9yIHBs
YXRmb3JtQWN0aXZlU2VsZWN0aW9uQmFja2dyb3VuZENvbG9yKCkgY29uc3Q7CisgICAgICAgIHZp
cnR1YWwgQ29sb3IgcGxhdGZvcm1JbmFjdGl2ZVNlbGVjdGlvbkJhY2tncm91bmRDb2xvcigpIGNv
bnN0OworICAgICAgICB2aXJ0dWFsIENvbG9yIHBsYXRmb3JtQWN0aXZlU2VsZWN0aW9uRm9yZWdy
b3VuZENvbG9yKCkgY29uc3Q7CisgICAgICAgIHZpcnR1YWwgQ29sb3IgcGxhdGZvcm1JbmFjdGl2
ZVNlbGVjdGlvbkZvcmVncm91bmRDb2xvcigpIGNvbnN0OworCisgICAgICAgIC8vIFN5c3RlbSBm
b250cy4KKyAgICAgICAgdmlydHVhbCB2b2lkIHN5c3RlbUZvbnQoaW50IHByb3BJZCwgRm9udERl
c2NyaXB0aW9uJikgY29uc3Q7CisgICAgICAgIHZpcnR1YWwgQ29sb3Igc3lzdGVtQ29sb3IoaW50
IGNzc1ZhbHVlSWQpIGNvbnN0OworCisgICAgICAgIHZpcnR1YWwgYm9vbCBwYWludENoZWNrYm94
KFJlbmRlck9iamVjdCogbywgY29uc3QgUmVuZGVyT2JqZWN0OjpQYWludEluZm8mIGksIGNvbnN0
IEludFJlY3QmIHIpCisgICAgICAgIHsgcmV0dXJuIHBhaW50QnV0dG9uKG8sIGksIHIpOyB9Cisg
ICAgICAgIHZpcnR1YWwgdm9pZCBzZXRDaGVja2JveFNpemUoUmVuZGVyU3R5bGUqKSBjb25zdDsK
KworICAgICAgICB2aXJ0dWFsIGJvb2wgcGFpbnRSYWRpbyhSZW5kZXJPYmplY3QqIG8sIGNvbnN0
IFJlbmRlck9iamVjdDo6UGFpbnRJbmZvJiBpLCBjb25zdCBJbnRSZWN0JiByKQorICAgICAgICB7
IHJldHVybiBwYWludEJ1dHRvbihvLCBpLCByKTsgfQorICAgICAgICB2aXJ0dWFsIHZvaWQgc2V0
UmFkaW9TaXplKFJlbmRlclN0eWxlKiBzdHlsZSkgY29uc3QKKyAgICAgICAgeyByZXR1cm4gc2V0
Q2hlY2tib3hTaXplKHN0eWxlKTsgfQorCisgICAgICAgIHZpcnR1YWwgYm9vbCBwYWludEJ1dHRv
bihSZW5kZXJPYmplY3QqLCBjb25zdCBSZW5kZXJPYmplY3Q6OlBhaW50SW5mbyYsIGNvbnN0IElu
dFJlY3QmKTsKKworICAgICAgICB2aXJ0dWFsIGJvb2wgcGFpbnRUZXh0RmllbGQoUmVuZGVyT2Jq
ZWN0KiwgY29uc3QgUmVuZGVyT2JqZWN0OjpQYWludEluZm8mLCBjb25zdCBJbnRSZWN0Jik7CisK
KyAgICAgICAgdmlydHVhbCBib29sIHBhaW50VGV4dEFyZWEoUmVuZGVyT2JqZWN0KiBvLCBjb25z
dCBSZW5kZXJPYmplY3Q6OlBhaW50SW5mbyYgaSwgY29uc3QgSW50UmVjdCYgcikKKyAgICAgICAg
eyByZXR1cm4gcGFpbnRUZXh0RmllbGQobywgaSwgcik7IH0KKworICAgICAgICB2aXJ0dWFsIHZv
aWQgYWRqdXN0TWVudUxpc3RTdHlsZShDU1NTdHlsZVNlbGVjdG9yKiBzZWxlY3RvciwgUmVuZGVy
U3R5bGUqIHN0eWxlLCBFbGVtZW50KiBlKSBjb25zdDsKKyAgICAgICAgdmlydHVhbCBib29sIHBh
aW50TWVudUxpc3QoUmVuZGVyT2JqZWN0KiwgY29uc3QgUmVuZGVyT2JqZWN0OjpQYWludEluZm8m
LCBjb25zdCBJbnRSZWN0Jik7CisgICAgICAgIHZpcnR1YWwgdm9pZCBhZGp1c3RNZW51TGlzdEJ1
dHRvblN0eWxlKENTU1N0eWxlU2VsZWN0b3IqIHNlbGVjdG9yLCBSZW5kZXJTdHlsZSogc3R5bGUs
IEVsZW1lbnQqIGUpIGNvbnN0OworCisgICAgICAgIHZpcnR1YWwgYm9vbCBwYWludE1lbnVMaXN0
QnV0dG9uKFJlbmRlck9iamVjdCosIGNvbnN0IFJlbmRlck9iamVjdDo6UGFpbnRJbmZvJiwgY29u
c3QgSW50UmVjdCYpOworCisgICAgICAgIHZpcnR1YWwgYm9vbCBwYWludFNsaWRlclRyYWNrKFJl
bmRlck9iamVjdCogbywgY29uc3QgUmVuZGVyT2JqZWN0OjpQYWludEluZm8mIGksIGNvbnN0IElu
dFJlY3QmIHIpOworICAgICAgICB2aXJ0dWFsIGJvb2wgcGFpbnRTbGlkZXJUaHVtYihSZW5kZXJP
YmplY3QqIG8sIGNvbnN0IFJlbmRlck9iamVjdDo6UGFpbnRJbmZvJiBpLCBjb25zdCBJbnRSZWN0
JiByKTsKKyAgICAgICAgdmlydHVhbCB2b2lkIGFkanVzdFNsaWRlclRodW1iU2l6ZShSZW5kZXJP
YmplY3QqKSBjb25zdDsKKworICAgICAgICB2aXJ0dWFsIGJvb2wgcG9wdXBPcHRpb25TdXBwb3J0
c1RleHRJbmRlbnQoKSBjb25zdCB7IHJldHVybiB0cnVlOyB9CisKKyAgICAgICAgdmlydHVhbCBp
bnQgYnV0dG9uSW50ZXJuYWxQYWRkaW5nTGVmdCgpIGNvbnN0OworICAgICAgICB2aXJ0dWFsIGlu
dCBidXR0b25JbnRlcm5hbFBhZGRpbmdSaWdodCgpIGNvbnN0OworICAgICAgICB2aXJ0dWFsIGlu
dCBidXR0b25JbnRlcm5hbFBhZGRpbmdUb3AoKSBjb25zdDsKKyAgICAgICAgdmlydHVhbCBpbnQg
YnV0dG9uSW50ZXJuYWxQYWRkaW5nQm90dG9tKCkgY29uc3Q7CisKKyAgICAgICAgdmlydHVhbCB2
b2lkIGFkanVzdFNlYXJjaEZpZWxkU3R5bGUoQ1NTU3R5bGVTZWxlY3RvciosIFJlbmRlclN0eWxl
KiwgRWxlbWVudCopIGNvbnN0OworICAgICAgICB2aXJ0dWFsIGJvb2wgcGFpbnRTZWFyY2hGaWVs
ZChSZW5kZXJPYmplY3QqLCBjb25zdCBSZW5kZXJPYmplY3Q6OlBhaW50SW5mbyYsIGNvbnN0IElu
dFJlY3QmKTsKKworICAgICAgICB2aXJ0dWFsIHZvaWQgYWRqdXN0U2VhcmNoRmllbGRDYW5jZWxC
dXR0b25TdHlsZShDU1NTdHlsZVNlbGVjdG9yKiwgUmVuZGVyU3R5bGUqLCBFbGVtZW50KikgY29u
c3Q7CisgICAgICAgIHZpcnR1YWwgYm9vbCBwYWludFNlYXJjaEZpZWxkQ2FuY2VsQnV0dG9uKFJl
bmRlck9iamVjdCosIGNvbnN0IFJlbmRlck9iamVjdDo6UGFpbnRJbmZvJiwgY29uc3QgSW50UmVj
dCYpOworCisgICAgICAgIHZpcnR1YWwgdm9pZCBhZGp1c3RTZWFyY2hGaWVsZERlY29yYXRpb25T
dHlsZShDU1NTdHlsZVNlbGVjdG9yKiwgUmVuZGVyU3R5bGUqLCBFbGVtZW50KikgY29uc3Q7Cisg
ICAgICAgIHZpcnR1YWwgYm9vbCBwYWludFNlYXJjaEZpZWxkRGVjb3JhdGlvbihSZW5kZXJPYmpl
Y3QqLCBjb25zdCBSZW5kZXJPYmplY3Q6OlBhaW50SW5mbyYsIGNvbnN0IEludFJlY3QmKSB7IHJl
dHVybiBmYWxzZTsgfQorCisgICAgICAgIHZpcnR1YWwgdm9pZCBhZGp1c3RTZWFyY2hGaWVsZFJl
c3VsdHNEZWNvcmF0aW9uU3R5bGUoQ1NTU3R5bGVTZWxlY3RvciosIFJlbmRlclN0eWxlKiwgRWxl
bWVudCopIGNvbnN0OworICAgICAgICB2aXJ0dWFsIGJvb2wgcGFpbnRTZWFyY2hGaWVsZFJlc3Vs
dHNEZWNvcmF0aW9uKFJlbmRlck9iamVjdCosIGNvbnN0IFJlbmRlck9iamVjdDo6UGFpbnRJbmZv
JiwgY29uc3QgSW50UmVjdCYpOworCisgICAgICAgIHZpcnR1YWwgdm9pZCBhZGp1c3RTZWFyY2hG
aWVsZFJlc3VsdHNCdXR0b25TdHlsZShDU1NTdHlsZVNlbGVjdG9yKiwgUmVuZGVyU3R5bGUqLCBF
bGVtZW50KikgY29uc3Q7CisgICAgICAgIHZpcnR1YWwgYm9vbCBwYWludFNlYXJjaEZpZWxkUmVz
dWx0c0J1dHRvbihSZW5kZXJPYmplY3QqLCBjb25zdCBSZW5kZXJPYmplY3Q6OlBhaW50SW5mbyYs
IGNvbnN0IEludFJlY3QmKTsKKworICAgICAgICB2aXJ0dWFsIHZvaWQgdGhlbWVDaGFuZ2VkKCk7
CisKKyAgICAgICAgdmlydHVhbCB2b2lkIGFkanVzdEJ1dHRvblN0eWxlKENTU1N0eWxlU2VsZWN0
b3IqLCBSZW5kZXJTdHlsZSogc3R5bGUsIEVsZW1lbnQqKSBjb25zdCB7fQorICAgICAgICB2aXJ0
dWFsIHZvaWQgYWRqdXN0VGV4dEZpZWxkU3R5bGUoQ1NTU3R5bGVTZWxlY3RvciosIFJlbmRlclN0
eWxlKiBzdHlsZSwgRWxlbWVudCopIGNvbnN0IHt9CisgICAgICAgIHZpcnR1YWwgdm9pZCBhZGp1
c3RUZXh0QXJlYVN0eWxlKENTU1N0eWxlU2VsZWN0b3IqLCBSZW5kZXJTdHlsZSogc3R5bGUsIEVs
ZW1lbnQqKSBjb25zdCB7fQorCisgICAgICAgIHN0YXRpYyB2b2lkIHNldFdlYktpdElzQmVpbmdV
bmxvYWRlZCgpOworCisgICAgICAgIHZpcnR1YWwgYm9vbCBzdXBwb3J0c0ZvY3VzUmluZyhjb25z
dCBSZW5kZXJTdHlsZSopIGNvbnN0OworCisgICAgI2lmIEVOQUJMRShWSURFTykKKyAgICAgICAg
dmlydHVhbCBib29sIHBhaW50TWVkaWFGdWxsc2NyZWVuQnV0dG9uKFJlbmRlck9iamVjdCosIGNv
bnN0IFJlbmRlck9iamVjdDo6UGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYpOworICAgICAgICB2
aXJ0dWFsIGJvb2wgcGFpbnRNZWRpYVBsYXlCdXR0b24oUmVuZGVyT2JqZWN0KiwgY29uc3QgUmVu
ZGVyT2JqZWN0OjpQYWludEluZm8mLCBjb25zdCBJbnRSZWN0Jik7CisgICAgICAgIHZpcnR1YWwg
Ym9vbCBwYWludE1lZGlhTXV0ZUJ1dHRvbihSZW5kZXJPYmplY3QqLCBjb25zdCBSZW5kZXJPYmpl
Y3Q6OlBhaW50SW5mbyYsIGNvbnN0IEludFJlY3QmKTsKKyAgICAgICAgdmlydHVhbCBib29sIHBh
aW50TWVkaWFTZWVrQmFja0J1dHRvbihSZW5kZXJPYmplY3QqLCBjb25zdCBSZW5kZXJPYmplY3Q6
OlBhaW50SW5mbyYsIGNvbnN0IEludFJlY3QmKTsKKyAgICAgICAgdmlydHVhbCBib29sIHBhaW50
TWVkaWFTZWVrRm9yd2FyZEJ1dHRvbihSZW5kZXJPYmplY3QqLCBjb25zdCBSZW5kZXJPYmplY3Q6
OlBhaW50SW5mbyYsIGNvbnN0IEludFJlY3QmKTsKKyAgICAgICAgdmlydHVhbCBib29sIHBhaW50
TWVkaWFTbGlkZXJUcmFjayhSZW5kZXJPYmplY3QqLCBjb25zdCBSZW5kZXJPYmplY3Q6OlBhaW50
SW5mbyYsIGNvbnN0IEludFJlY3QmKTsKKyAgICAgICAgdmlydHVhbCBib29sIHBhaW50TWVkaWFT
bGlkZXJUaHVtYihSZW5kZXJPYmplY3QqLCBjb25zdCBSZW5kZXJPYmplY3Q6OlBhaW50SW5mbyYs
IGNvbnN0IEludFJlY3QmKTsKKyAgICAjZW5kaWYKKworICAgIHByaXZhdGU6CisgICAgICAgIFJl
bmRlclRoZW1lV2luY2UoKTsKKworICAgICAgICB1bnNpZ25lZCBkZXRlcm1pbmVDbGFzc2ljU3Rh
dGUoUmVuZGVyT2JqZWN0Kik7CisgICAgICAgIGJvb2wgc3VwcG9ydHNGb2N1cyhDb250cm9sUGFy
dCkgY29uc3Q7CisKKyAgICAgICAgVGhlbWVEYXRhIGdldFRoZW1lRGF0YShSZW5kZXJPYmplY3Qq
KTsKKyAgICB9OworCit9OworCisjZW5kaWYKZGlmZiAtLWdpdCBhL1dlYkNvcmUvc3RvcmFnZS93
aW5jZS9EYXRhYmFzZVRocmVhZFdpbmNlLmNwcCBiL1dlYkNvcmUvc3RvcmFnZS93aW5jZS9EYXRh
YmFzZVRocmVhZFdpbmNlLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5k
ODExNDVkCi0tLSAvZGV2L251bGwKKysrIGIvV2ViQ29yZS9zdG9yYWdlL3dpbmNlL0RhdGFiYXNl
VGhyZWFkV2luY2UuY3BwCkBAIC0wLDAgKzEsOTUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MDkgVG9yY2ggTW9iaWxlLCBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgor
ICogIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGkgd2lsbCBi
ZSB1c2VmdWwsCisgKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhl
IGltcGxpZWQgd2FycmFudHkgb2YKKyAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogIExpYnJhcnkgR2VuZXJhbCBQ
dWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICBZb3Ugc2hvdWxkIGhhdmUg
cmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNl
CisgKiAgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4g
IElmIG5vdCwgd3JpdGUgdG8KKyAqICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMu
LCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogIEJvc3RvbiwgTUEgMDIxMTAt
MTMwMSwgVVNBLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJEYXRhYmFz
ZVRocmVhZC5oIgorCisjaW5jbHVkZSAiRGF0YWJhc2UuaCIKKyNpbmNsdWRlICJEYXRhYmFzZVRh
c2suaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitEYXRhYmFzZVRocmVhZDo6RGF0YWJhc2VU
aHJlYWQoKQorOiBtX3RpbWVyKHRoaXMsICZEYXRhYmFzZVRocmVhZDo6dGltZXJGaXJlZCkKK3sK
K30KKworRGF0YWJhc2VUaHJlYWQ6On5EYXRhYmFzZVRocmVhZCgpCit7Cit9CisKK3ZvaWQgRGF0
YWJhc2VUaHJlYWQ6OnJlcXVlc3RUZXJtaW5hdGlvbigpCit7CisgICAgbV9xdWV1ZS5jbGVhcigp
OworfQorCitib29sIERhdGFiYXNlVGhyZWFkOjp0ZXJtaW5hdGlvblJlcXVlc3RlZCgpIGNvbnN0
Cit7CisgICAgcmV0dXJuIG1fcXVldWUuaXNFbXB0eSgpOworfQorCit2b2lkIERhdGFiYXNlVGhy
ZWFkOjp0aW1lckZpcmVkKFRpbWVyPERhdGFiYXNlVGhyZWFkPiopCit7CisgICAgaWYgKCFtX3F1
ZXVlLmlzRW1wdHkoKSkgeworICAgICAgICBSZWZQdHI8RGF0YWJhc2VUYXNrPiB0YXNrID0gbV9x
dWV1ZS5maXJzdCgpOworICAgICAgICB0YXNrLT5wZXJmb3JtVGFzaygpOworICAgICAgICBtX3F1
ZXVlLnJlbW92ZUZpcnN0KCk7CisgICAgICAgIGlmICghbV9xdWV1ZS5pc0VtcHR5KCkpCisgICAg
ICAgICAgICBtX3RpbWVyLnN0YXJ0T25lU2hvdCgwKTsKKyAgICB9Cit9CisKK3ZvaWQgRGF0YWJh
c2VUaHJlYWQ6OnNjaGVkdWxlVGFzayhQYXNzUmVmUHRyPERhdGFiYXNlVGFzaz4gdGFzaykKK3sK
KyAgICBtX3F1ZXVlLmFwcGVuZCh0YXNrKTsKKyAgICBpZiAoIW1fdGltZXIuaXNBY3RpdmUoKSkK
KyAgICAgICAgbV90aW1lci5zdGFydE9uZVNob3QoMCk7Cit9CisKK3ZvaWQgRGF0YWJhc2VUaHJl
YWQ6OnNjaGVkdWxlSW1tZWRpYXRlVGFzayhQYXNzUmVmUHRyPERhdGFiYXNlVGFzaz4gdGFzaykK
K3sKKyAgICB0YXNrLT5wZXJmb3JtVGFzaygpOworfQorCit2b2lkIERhdGFiYXNlVGhyZWFkOjp1
bnNjaGVkdWxlRGF0YWJhc2VUYXNrcyhEYXRhYmFzZSogZGF0YWJhc2UpCit7CisgICAgRGVxdWU8
UmVmUHRyPERhdGFiYXNlVGFzaz4gPiByZXNlcnZlZFRhc2tzOworICAgIGZvciAoRGVxdWU8UmVm
UHRyPERhdGFiYXNlVGFzaz4gPjo6Y29uc3RfaXRlcmF0b3IgaSA9IG1fcXVldWUuYmVnaW4oKTsg
aSAhPSBtX3F1ZXVlLmVuZCgpOyArK2kpIHsKKyAgICAgICAgaWYgKCgqaSktPmRhdGFiYXNlKCkg
IT0gZGF0YWJhc2UpCisgICAgICAgICAgICByZXNlcnZlZFRhc2tzLmFwcGVuZCgqaSk7CisgICAg
fQorCisgICAgbV9xdWV1ZS5zd2FwKHJlc2VydmVkVGFza3MpOworfQorCit2b2lkIERhdGFiYXNl
VGhyZWFkOjpyZWNvcmREYXRhYmFzZU9wZW4oRGF0YWJhc2UqIGRhdGFiYXNlKQoreworICAgIG5v
dEltcGxlbWVudGVkKCk7Cit9CisKK3ZvaWQgRGF0YWJhc2VUaHJlYWQ6OnJlY29yZERhdGFiYXNl
Q2xvc2VkKERhdGFiYXNlKiBkYXRhYmFzZSkKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQor
Cit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9XZWJDb3JlL3N0b3JhZ2Uvd2lu
Y2UvRGF0YWJhc2VUaHJlYWRXaW5jZS5oIGIvV2ViQ29yZS9zdG9yYWdlL3dpbmNlL0RhdGFiYXNl
VGhyZWFkV2luY2UuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mYWZjNzkx
Ci0tLSAvZGV2L251bGwKKysrIGIvV2ViQ29yZS9zdG9yYWdlL3dpbmNlL0RhdGFiYXNlVGhyZWFk
V2luY2UuaApAQCAtMCwwICsxLDY1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA5IFRvcmNo
IE1vYmlsZSwgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqICBUaGlz
IGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpIHdpbGwgYmUgdXNlZnVs
LAorICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVk
IHdhcnJhbnR5IG9mCisgKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExp
Y2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVk
IGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogIGFs
b25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3Qs
IHdyaXRlIHRvCisgKiAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJh
bmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqICBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVT
QS4KKyAqLworCisjaWZuZGVmIERhdGFiYXNlVGhyZWFkV2luY2VfaAorI2RlZmluZSBEYXRhYmFz
ZVRocmVhZFdpbmNlX2gKKworI2luY2x1ZGUgPHd0Zi9EZXF1ZS5oPgorI2luY2x1ZGUgPHd0Zi9S
ZWZDb3VudGVkLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworICAgIGNsYXNzIERhdGFiYXNl
OworICAgIGNsYXNzIERhdGFiYXNlVGFzazsKKworICAgIGNsYXNzIERhdGFiYXNlVGhyZWFkOiBw
dWJsaWMgV1RGOjpSZWZDb3VudGVkPERhdGFiYXNlVGhyZWFkPiB7CisKKyAgICBwdWJsaWM6Cisg
ICAgICAgIHN0YXRpYyBQYXNzUmVmUHRyPERhdGFiYXNlVGhyZWFkPiBjcmVhdGUoKSB7IHJldHVy
biBhZG9wdFJlZihuZXcgRGF0YWJhc2VUaHJlYWQpOyB9CisgICAgICAgIH5EYXRhYmFzZVRocmVh
ZCgpOworCisgICAgICAgIGJvb2wgc3RhcnQoKSB7IHJldHVybiB0cnVlOyB9CisgICAgICAgIHZv
aWQgcmVxdWVzdFRlcm1pbmF0aW9uKCk7CisgICAgICAgIGJvb2wgdGVybWluYXRpb25SZXF1ZXN0
ZWQoKSBjb25zdDsKKworICAgICAgICB2b2lkIHNjaGVkdWxlVGFzayhQYXNzUmVmUHRyPERhdGFi
YXNlVGFzaz4pOworICAgICAgICB2b2lkIHNjaGVkdWxlSW1tZWRpYXRlVGFzayhQYXNzUmVmUHRy
PERhdGFiYXNlVGFzaz4pOworICAgICAgICB2b2lkIHVuc2NoZWR1bGVEYXRhYmFzZVRhc2tzKERh
dGFiYXNlKik7CisgICAgICAgIHZvaWQgcmVjb3JkRGF0YWJhc2VPcGVuKERhdGFiYXNlKik7Cisg
ICAgICAgIHZvaWQgcmVjb3JkRGF0YWJhc2VDbG9zZWQoRGF0YWJhc2UqKTsKKyNpZm5kZWYgTkRF
QlVHCisgICAgICAgIFRocmVhZElkZW50aWZpZXIgZ2V0VGhyZWFkSUQoKSBjb25zdCB7IHJldHVy
biBjdXJyZW50VGhyZWFkKCk7IH0KKyNlbmRpZgorCisgICAgcHJpdmF0ZToKKyAgICAgICAgRGF0
YWJhc2VUaHJlYWQoKTsKKworICAgICAgICB2b2lkIHRpbWVyRmlyZWQoVGltZXI8RGF0YWJhc2VU
aHJlYWQ+Kik7CisKKyAgICAgICAgRGVxdWU8UmVmUHRyPERhdGFiYXNlVGFzaz4gPiBtX3F1ZXVl
OworICAgICAgICBUaW1lcjxEYXRhYmFzZVRocmVhZD4gbV90aW1lcjsKKyAgICB9OworCit9IC8v
IG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBEYXRhYmFzZVRocmVhZFdpbmNlCmRpZmYg
LS1naXQgYS9XZWJDb3JlL3N0b3JhZ2Uvd2luY2UvTG9jYWxTdG9yYWdlVGhyZWFkV2luY2UuY3Bw
IGIvV2ViQ29yZS9zdG9yYWdlL3dpbmNlL0xvY2FsU3RvcmFnZVRocmVhZFdpbmNlLmNwcApuZXcg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44ZGNiOTAyCi0tLSAvZGV2L251bGwKKysr
IGIvV2ViQ29yZS9zdG9yYWdlL3dpbmNlL0xvY2FsU3RvcmFnZVRocmVhZFdpbmNlLmNwcApAQCAt
MCwwICsxLDgzIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA5IFRvcmNoIE1vYmlsZSwgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisg
KiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMg
ZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpIHdpbGwgYmUgdXNlZnVsLAorICogIGJ1dCBX
SVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9m
CisgKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NF
LiAgU2VlIHRoZSBHTlUKKyAqICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1v
cmUgZGV0YWlscy4KKyAqCisgKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0
aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogIGFsb25nIHdpdGggdGhp
cyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisg
KiAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0
LCBGaWZ0aCBGbG9vciwKKyAqICBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisj
aW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiTG9jYWxTdG9yYWdlVGhyZWFkLmgiCisKKyNp
bmNsdWRlICJMb2NhbFN0b3JhZ2VUYXNrLmgiCisjaW5jbHVkZSAiU3RvcmFnZUFyZWFTeW5jLmgi
CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworTG9jYWxTdG9yYWdlVGhyZWFkOjpMb2NhbFN0b3Jh
Z2VUaHJlYWQoKQorOiBtX3RpbWVyKHRoaXMsICZMb2NhbFN0b3JhZ2VUaHJlYWQ6OnRpbWVyRmly
ZWQpCit7Cit9CisKK0xvY2FsU3RvcmFnZVRocmVhZDo6fkxvY2FsU3RvcmFnZVRocmVhZCgpCit7
Cit9CisKK2Jvb2wgTG9jYWxTdG9yYWdlVGhyZWFkOjpzdGFydCgpCit7CisgICAgcmV0dXJuIHRy
dWU7Cit9CisKK3ZvaWQgTG9jYWxTdG9yYWdlVGhyZWFkOjp0aW1lckZpcmVkKFRpbWVyPExvY2Fs
U3RvcmFnZVRocmVhZD4qKQoreworICAgIGlmICghbV9xdWV1ZS5pc0VtcHR5KCkpIHsKKyAgICAg
ICAgUmVmUHRyPExvY2FsU3RvcmFnZVRhc2s+IHRhc2sgPSBtX3F1ZXVlLmZpcnN0KCk7CisgICAg
ICAgIHRhc2stPnBlcmZvcm1UYXNrKCk7CisgICAgICAgIG1fcXVldWUucmVtb3ZlRmlyc3QoKTsK
KyAgICAgICAgaWYgKCFtX3F1ZXVlLmlzRW1wdHkoKSkKKyAgICAgICAgICAgIG1fdGltZXIuc3Rh
cnRPbmVTaG90KDApOworICAgIH0KK30KKwordm9pZCBMb2NhbFN0b3JhZ2VUaHJlYWQ6OnNjaGVk
dWxlSW1wb3J0KFBhc3NSZWZQdHI8U3RvcmFnZUFyZWFTeW5jPiBhcmVhKQoreworICAgIG1fcXVl
dWUuYXBwZW5kKExvY2FsU3RvcmFnZVRhc2s6OmNyZWF0ZUltcG9ydChhcmVhKSk7CisgICAgaWYg
KCFtX3RpbWVyLmlzQWN0aXZlKCkpCisgICAgICAgIG1fdGltZXIuc3RhcnRPbmVTaG90KDApOwor
fQorCit2b2lkIExvY2FsU3RvcmFnZVRocmVhZDo6c2NoZWR1bGVTeW5jKFBhc3NSZWZQdHI8U3Rv
cmFnZUFyZWFTeW5jPiBhcmVhKQoreworICAgIG1fcXVldWUuYXBwZW5kKExvY2FsU3RvcmFnZVRh
c2s6OmNyZWF0ZVN5bmMoYXJlYSkpOworICAgIGlmICghbV90aW1lci5pc0FjdGl2ZSgpKQorICAg
ICAgICBtX3RpbWVyLnN0YXJ0T25lU2hvdCgwKTsKK30KKwordm9pZCBMb2NhbFN0b3JhZ2VUaHJl
YWQ6OnRlcm1pbmF0ZSgpCit7CisgICAgbV9xdWV1ZS5jbGVhcigpOworICAgIG1fdGltZXIuc3Rv
cCgpOworfQorCit2b2lkIExvY2FsU3RvcmFnZVRocmVhZDo6cGVyZm9ybVRlcm1pbmF0ZSgpCit7
CisgICAgbV9xdWV1ZS5jbGVhcigpOworICAgIG1fdGltZXIuc3RvcCgpOworfQorCit9CmRpZmYg
LS1naXQgYS9XZWJDb3JlL3N0b3JhZ2Uvd2luY2UvTG9jYWxTdG9yYWdlVGhyZWFkV2luY2UuaCBi
L1dlYkNvcmUvc3RvcmFnZS93aW5jZS9Mb2NhbFN0b3JhZ2VUaHJlYWRXaW5jZS5oCm5ldyBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMwMGFiYjUKLS0tIC9kZXYvbnVsbAorKysgYi9X
ZWJDb3JlL3N0b3JhZ2Uvd2luY2UvTG9jYWxTdG9yYWdlVGhyZWFkV2luY2UuaApAQCAtMCwwICsx
LDU4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA5IFRvcmNoIE1vYmlsZSwgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUg
bWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJp
YnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpIHdpbGwgYmUgdXNlZnVsLAorICogIGJ1dCBXSVRIT1VU
IEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAg
TUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2Vl
IHRoZSBHTlUKKyAqICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0
YWlscy4KKyAqCisgKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05V
IExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogIGFsb25nIHdpdGggdGhpcyBsaWJy
YXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiAgdGhl
IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0
aCBGbG9vciwKKyAqICBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisKKyNpZm5k
ZWYgTG9jYWxTdG9yYWdlVGhyZWFkV2luY2VfaAorI2RlZmluZSBMb2NhbFN0b3JhZ2VUaHJlYWRX
aW5jZV9oCisKKyNpbmNsdWRlIDx3dGYvRGVxdWUuaD4KKyNpbmNsdWRlIDx3dGYvUGFzc1JlZlB0
ci5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKKyAgICBjbGFzcyBTdG9yYWdlQXJlYVN5bmM7
CisgICAgY2xhc3MgTG9jYWxTdG9yYWdlVGFzazsKKworICAgIGNsYXNzIExvY2FsU3RvcmFnZVRo
cmVhZCA6IHB1YmxpYyBSZWZDb3VudGVkPExvY2FsU3RvcmFnZVRocmVhZD4geworICAgIHB1Ymxp
YzoKKyAgICAgICAgc3RhdGljIFBhc3NSZWZQdHI8TG9jYWxTdG9yYWdlVGhyZWFkPiBjcmVhdGUo
KSB7IHJldHVybiBhZG9wdFJlZihuZXcgTG9jYWxTdG9yYWdlVGhyZWFkKTsgfQorCisgICAgICAg
IH5Mb2NhbFN0b3JhZ2VUaHJlYWQoKTsKKyAgICAgICAgYm9vbCBzdGFydCgpOworICAgICAgICB2
b2lkIHNjaGVkdWxlSW1wb3J0KFBhc3NSZWZQdHI8U3RvcmFnZUFyZWFTeW5jPik7CisgICAgICAg
IHZvaWQgc2NoZWR1bGVTeW5jKFBhc3NSZWZQdHI8U3RvcmFnZUFyZWFTeW5jPik7CisgICAgICAg
IHZvaWQgdGVybWluYXRlKCk7CisgICAgICAgIHZvaWQgcGVyZm9ybVRlcm1pbmF0ZSgpOworCisg
ICAgcHJpdmF0ZToKKyAgICAgICAgTG9jYWxTdG9yYWdlVGhyZWFkKCk7CisKKyAgICAgICAgdm9p
ZCB0aW1lckZpcmVkKFRpbWVyPExvY2FsU3RvcmFnZVRocmVhZD4qKTsKKworICAgICAgICBEZXF1
ZTxSZWZQdHI8TG9jYWxTdG9yYWdlVGFzaz4gPiBtX3F1ZXVlOworICAgICAgICBUaW1lcjxMb2Nh
bFN0b3JhZ2VUaHJlYWQ+IG1fdGltZXI7CisgICAgfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29y
ZQorCisjZW5kaWYgLy8gTG9jYWxTdG9yYWdlVGhyZWFkV2luY2VfaApkaWZmIC0tZ2l0IGEvV2Vi
Q29yZS9zdmcvZ3JhcGhpY3Mvd2luY2UvU1ZHUmVzb3VyY2VGaWx0ZXJXaW5jZS5jcHAgYi9XZWJD
b3JlL3N2Zy9ncmFwaGljcy93aW5jZS9TVkdSZXNvdXJjZUZpbHRlcldpbmNlLmNwcApuZXcgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kNWE3ZGVjCi0tLSAvZGV2L251bGwKKysrIGIv
V2ViQ29yZS9zdmcvZ3JhcGhpY3Mvd2luY2UvU1ZHUmVzb3VyY2VGaWx0ZXJXaW5jZS5jcHAKQEAg
LTAsMCArMSw0NiBAQAorLyoKKyAgICBDb3B5cmlnaHQgKEMpIDIwMDkgVG9yY2ggTW9iaWxlLCBJ
bmMuCisKKyAgICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3Ry
aWJ1dGUgaXQgYW5kL29yCisgICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05V
IExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAgICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUg
RnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAgICB2ZXJzaW9uIDIgb2YgdGhlIExp
Y2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgICBUaGlz
IGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1
bCwKKyAgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGll
ZCB3YXJyYW50eSBvZgorICAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgICAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBM
aWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQg
YSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgICAgYWlu
dCB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3
cml0ZSB0bworICAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5r
bGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgICAgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0Eu
CisqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisKKyNpZiBFTkFCTEUoU1ZHKSAmJiBFTkFCTEUo
U1ZHX0ZJTFRFUlMpCisjaW5jbHVkZSAiU1ZHUmVzb3VyY2VGaWx0ZXIuaCIKKyNpbmNsdWRlICJO
b3RJbXBsZW1lbnRlZC5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK1NWR1Jlc291cmNlRmls
dGVyUGxhdGZvcm1EYXRhKiBTVkdSZXNvdXJjZUZpbHRlcjo6Y3JlYXRlUGxhdGZvcm1EYXRhKCkK
K3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworICAgIHJldHVybiAwOworfQorCit2b2lkIFNWR1Jl
c291cmNlRmlsdGVyOjpwcmVwYXJlRmlsdGVyKEdyYXBoaWNzQ29udGV4dComLCBjb25zdCBGbG9h
dFJlY3QmKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisKK3ZvaWQgU1ZHUmVzb3VyY2VG
aWx0ZXI6OmFwcGx5RmlsdGVyKEdyYXBoaWNzQ29udGV4dComLCBjb25zdCBGbG9hdFJlY3QmKQor
eworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKwor
I2VuZGlmCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>34207</attachid>
            <date>2009-08-06 07:12:37 -0700</date>
            <delta_ts>2009-08-06 07:16:45 -0700</delta_ts>
            <desc>remove svg/graphics/wince</desc>
            <filename>27657_fix.patch</filename>
            <type>text/plain</type>
            <size>1623</size>
            <attacher name="Yong Li">yong.li.webkit</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYkNvcmUvc3ZnL2dyYXBoaWNzL3dpbmNlL1NWR1Jlc291cmNlRmlsdGVy
V2luY2UuY3BwIGIvV2ViQ29yZS9zdmcvZ3JhcGhpY3Mvd2luY2UvU1ZHUmVzb3VyY2VGaWx0ZXJX
aW5jZS5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQ1YTdkZWMuLjAwMDAwMDAK
LS0tIGEvV2ViQ29yZS9zdmcvZ3JhcGhpY3Mvd2luY2UvU1ZHUmVzb3VyY2VGaWx0ZXJXaW5jZS5j
cHAKKysrIC9kZXYvbnVsbApAQCAtMSw0NiArMCwwIEBACi0vKgotICAgIENvcHlyaWdodCAoQykg
MjAwOSBUb3JjaCBNb2JpbGUsIEluYy4KLQotICAgIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3
YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAgICBtb2RpZnkgaXQgdW5kZXIg
dGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICAgIExpY2Vuc2Ug
YXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICAg
IHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIg
dmVyc2lvbi4KLQotICAgIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0
aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0
aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gICAgTUVSQ0hBTlRBQklMSVRZIG9y
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAgICBMaWJy
YXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLQotICAgIFlvdSBz
aG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVi
bGljIExpY2Vuc2UKLSAgICBhaW50IHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09Q
WUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCi0gICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRh
dGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKLSAgICBCb3N0b24s
IE1BIDAyMTEwLTEzMDEsIFVTQS4KLSovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLQotI2lmIEVO
QUJMRShTVkcpICYmIEVOQUJMRShTVkdfRklMVEVSUykKLSNpbmNsdWRlICJTVkdSZXNvdXJjZUZp
bHRlci5oIgotI2luY2x1ZGUgIk5vdEltcGxlbWVudGVkLmgiCi0KLW5hbWVzcGFjZSBXZWJDb3Jl
IHsKLQotU1ZHUmVzb3VyY2VGaWx0ZXJQbGF0Zm9ybURhdGEqIFNWR1Jlc291cmNlRmlsdGVyOjpj
cmVhdGVQbGF0Zm9ybURhdGEoKQotewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci0gICAgcmV0dXJu
IDA7Ci19Ci0KLXZvaWQgU1ZHUmVzb3VyY2VGaWx0ZXI6OnByZXBhcmVGaWx0ZXIoR3JhcGhpY3ND
b250ZXh0KiYsIGNvbnN0IEZsb2F0UmVjdCYpCi17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLX0K
LQotdm9pZCBTVkdSZXNvdXJjZUZpbHRlcjo6YXBwbHlGaWx0ZXIoR3JhcGhpY3NDb250ZXh0KiYs
IGNvbnN0IEZsb2F0UmVjdCYpCi17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLX0KLQotfSAvLyBu
YW1lc3BhY2UgV2ViQ29yZQotCi0jZW5kaWYK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>34208</attachid>
            <date>2009-08-06 07:16:45 -0700</date>
            <delta_ts>2009-08-06 07:19:47 -0700</delta_ts>
            <desc>remove the unnecessary platform file in svg/graphics</desc>
            <filename>27657_fix.patch</filename>
            <type>text/plain</type>
            <size>2151</size>
            <attacher name="Yong Li">yong.li.webkit</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYkNvcmUvQ2hhbmdlTG9nIGIvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXgg
Y2U2OWVjMC4uM2FmYzgyNSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvV2Vi
Q29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxMiBAQAorMjAwOS0wOC0wNiAgWW9uZyBMaSAgPHlv
bmcubGlAdG9yY2htb2JpbGUuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09Q
UyEpLgorCisgICAgICAgIFJlbW92ZSB1bm5lY2Vzc2FyeSBmb2xkZXI6IHN2bi9ncmFwaGljcy93
aW5jZS4gVGhpcyBpcyBhIHN1cHBsZW1lbnQKKyAgICAgICAgb2YgaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTI3NjU3CisKKyAgICAgICAgKiBzdmcvZ3JhcGhpY3Mvd2lu
Y2UvU1ZHUmVzb3VyY2VGaWx0ZXJXaW5jZS5jcHA6IFJlbW92ZWQuCisKIDIwMDktMDgtMDUgIFlv
bmcgTGkgIDx5b25nLmxpQHRvcmNobW9iaWxlLmNvbT4KIAogICAgICAgICBSZXZpZXdlZCBieSBO
T0JPRFkgKE9PUFMhKS4KZGlmZiAtLWdpdCBhL1dlYkNvcmUvc3ZnL2dyYXBoaWNzL3dpbmNlL1NW
R1Jlc291cmNlRmlsdGVyV2luY2UuY3BwIGIvV2ViQ29yZS9zdmcvZ3JhcGhpY3Mvd2luY2UvU1ZH
UmVzb3VyY2VGaWx0ZXJXaW5jZS5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQ1
YTdkZWMuLjAwMDAwMDAKLS0tIGEvV2ViQ29yZS9zdmcvZ3JhcGhpY3Mvd2luY2UvU1ZHUmVzb3Vy
Y2VGaWx0ZXJXaW5jZS5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSw0NiArMCwwIEBACi0vKgotICAg
IENvcHlyaWdodCAoQykgMjAwOSBUb3JjaCBNb2JpbGUsIEluYy4KLQotICAgIFRoaXMgbGlicmFy
eSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAgICBt
b2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1Ymxp
YwotICAgIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRp
b247IGVpdGhlcgotICAgIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0
aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLQotICAgIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRl
ZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICAgIGJ1dCBXSVRIT1VUIEFO
WSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gICAgTUVS
Q0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRo
ZSBHTlUKLSAgICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWls
cy4KLQotICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJy
YXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAgICBhaW50IHdpdGggdGhpcyBsaWJyYXJ5OyBz
ZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCi0gICAgdGhlIEZyZWUg
U29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9v
ciwKLSAgICBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSovCi0KLSNpbmNsdWRlICJjb25m
aWcuaCIKLQotI2lmIEVOQUJMRShTVkcpICYmIEVOQUJMRShTVkdfRklMVEVSUykKLSNpbmNsdWRl
ICJTVkdSZXNvdXJjZUZpbHRlci5oIgotI2luY2x1ZGUgIk5vdEltcGxlbWVudGVkLmgiCi0KLW5h
bWVzcGFjZSBXZWJDb3JlIHsKLQotU1ZHUmVzb3VyY2VGaWx0ZXJQbGF0Zm9ybURhdGEqIFNWR1Jl
c291cmNlRmlsdGVyOjpjcmVhdGVQbGF0Zm9ybURhdGEoKQotewotICAgIG5vdEltcGxlbWVudGVk
KCk7Ci0gICAgcmV0dXJuIDA7Ci19Ci0KLXZvaWQgU1ZHUmVzb3VyY2VGaWx0ZXI6OnByZXBhcmVG
aWx0ZXIoR3JhcGhpY3NDb250ZXh0KiYsIGNvbnN0IEZsb2F0UmVjdCYpCi17Ci0gICAgbm90SW1w
bGVtZW50ZWQoKTsKLX0KLQotdm9pZCBTVkdSZXNvdXJjZUZpbHRlcjo6YXBwbHlGaWx0ZXIoR3Jh
cGhpY3NDb250ZXh0KiYsIGNvbnN0IEZsb2F0UmVjdCYpCi17Ci0gICAgbm90SW1wbGVtZW50ZWQo
KTsKLX0KLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQotCi0jZW5kaWYK
</data>

          </attachment>
      

    </bug>

</bugzilla>