<?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>25859</bug_id>
          
          <creation_ts>2009-05-18 16:25:43 -0700</creation_ts>
          <short_desc>Need to upstream ScriptController.* for v8.</short_desc>
          <delta_ts>2009-05-19 12:09:29 -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>All</rep_platform>
          <op_sys>All</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="David Levin">levin</reporter>
          <assigned_to name="David Levin">levin</assigned_to>
          <cc>dglazkov</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>121833</commentid>
    <comment_count>0</comment_count>
    <who name="David Levin">levin</who>
    <bug_when>2009-05-18 16:25:43 -0700</bug_when>
    <thetext>see summary.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>121834</commentid>
    <comment_count>1</comment_count>
      <attachid>30453</attachid>
    <who name="David Levin">levin</who>
    <bug_when>2009-05-18 16:29:57 -0700</bug_when>
    <thetext>Created attachment 30453
Proposed fix.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>121841</commentid>
    <comment_count>2</comment_count>
    <who name="David Levin">levin</who>
    <bug_when>2009-05-18 17:42:49 -0700</bug_when>
    <thetext>http://trac.webkit.org/changeset/43847

</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>121946</commentid>
    <comment_count>3</comment_count>
      <attachid>30481</attachid>
    <who name="David Levin">levin</who>
    <bug_when>2009-05-19 12:02:53 -0700</bug_when>
    <thetext>Created attachment 30481
Proposed fix.

Fix the header file to really be the header file.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>121947</commentid>
    <comment_count>4</comment_count>
    <who name="David Levin">levin</who>
    <bug_when>2009-05-19 12:03:13 -0700</bug_when>
    <thetext>Reopen to fix the header file.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>121948</commentid>
    <comment_count>5</comment_count>
      <attachid>30481</attachid>
    <who name="Dimitri Glazkov (Google)">dglazkov</who>
    <bug_when>2009-05-19 12:05:08 -0700</bug_when>
    <thetext>Comment on attachment 30481
Proposed fix.

Whoopsie :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>121949</commentid>
    <comment_count>6</comment_count>
    <who name="David Levin">levin</who>
    <bug_when>2009-05-19 12:09:29 -0700</bug_when>
    <thetext>http://trac.webkit.org/changeset/43868</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>30453</attachid>
            <date>2009-05-18 16:29:57 -0700</date>
            <delta_ts>2009-05-19 12:04:06 -0700</delta_ts>
            <desc>Proposed fix.</desc>
            <filename>bug25859.txt</filename>
            <type>text/plain</type>
            <size>27037</size>
            <attacher name="David Levin">levin</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYkNvcmUvQ2hhbmdlTG9nIGIvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXgg
NmFiY2Y0MS4uN2Q3YWVlZSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvV2Vi
Q29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxMyBAQAorMjAwOS0wNS0xOCAgRGF2aWQgTGV2aW4g
IDxsZXZpbkBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BT
ISkuCisKKyAgICAgICAgQnVnIDI1ODU5OiBOZWVkIHRvIHVwc3RyZWFtIFNjcmlwdENvbnRyb2xs
ZXIuKiBmb3IgdjguCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD0yNTg1OQorCisgICAgICAgICogYmluZGluZ3MvdjgvU2NyaXB0Q29udHJvbGxlci5jcHA6
IEFkZGVkLgorICAgICAgICAqIGJpbmRpbmdzL3Y4L1NjcmlwdENvbnRyb2xsZXIuaDogQWRkZWQu
CisKIDIwMDktMDUtMTggIE1hcmsgUm93ZSAgPG1yb3dlQGFwcGxlLmNvbT4KIAogICAgICAgICBG
aXggdGhlIGJ1aWxkLgpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9iaW5kaW5ncy92OC9TY3JpcHRDb250
cm9sbGVyLmNwcCBiL1dlYkNvcmUvYmluZGluZ3MvdjgvU2NyaXB0Q29udHJvbGxlci5jcHAKbmV3
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzcxOWNjMQotLS0gL2Rldi9udWxsCisr
KyBiL1dlYkNvcmUvYmluZGluZ3MvdjgvU2NyaXB0Q29udHJvbGxlci5jcHAKQEAgLTAsMCArMSwz
ODggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDgsIDIwMDkgR29vZ2xlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKyAqIG1l
dDoKKyAqCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICAgICogUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogY29weXJpZ2h0IG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
cgorICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZQorICogZGlzdHJpYnV0aW9uLgorICogICAgICogTmVpdGhlciB0aGUgbmFtZSBv
ZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworICogY29udHJpYnV0b3JzIG1heSBi
ZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyAqIHRo
aXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisg
KgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMg
QU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorICogQSBQQVJU
SUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZ
UklHSFQKKyAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgUFJPQ1VS
RU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBE
QVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiU2NyaXB0Q29udHJvbGxl
ci5oIgorCisjaW5jbHVkZSAiQ2hyb21pdW1CcmlkZ2UuaCIKKyNpbmNsdWRlICJDU3RyaW5nLmgi
CisjaW5jbHVkZSAiRG9jdW1lbnQuaCIKKyNpbmNsdWRlICJET01XaW5kb3cuaCIKKyNpbmNsdWRl
ICJFdmVudC5oIgorI2luY2x1ZGUgIkV2ZW50TGlzdGVuZXIuaCIKKyNpbmNsdWRlICJFdmVudE5h
bWVzLmgiCisjaW5jbHVkZSAiRnJhbWUuaCIKKyNpbmNsdWRlICJOb2RlLmgiCisjaW5jbHVkZSAi
Tm90SW1wbGVtZW50ZWQuaCIKKyNpbmNsdWRlICJucHJ1bnRpbWVfcHJpdi5oIgorI2luY2x1ZGUg
Ik5QVjhPYmplY3QuaCIKKyNpbmNsdWRlICJTY3JpcHRTb3VyY2VDb2RlLmgiCisjaW5jbHVkZSAi
U2NyaXB0U3RhdGUuaCIKKyNpbmNsdWRlICJXaWRnZXQuaCIKKworI2luY2x1ZGUgIlY4QmluZGlu
Zy5oIgorI2luY2x1ZGUgIlY4TlBPYmplY3QuaCIKKyNpbmNsdWRlICJWOFByb3h5LmgiCisKK25h
bWVzcGFjZSBXZWJDb3JlIHsKKwordm9pZCBTY3JpcHRDb250cm9sbGVyOjpzZXRGbGFncyhjb25z
dCBjaGFyKiBzdHJpbmcsIGludCBsZW5ndGgpCit7CisgICAgdjg6OlY4OjpTZXRGbGFnc0Zyb21T
dHJpbmcoc3RyaW5nLCBsZW5ndGgpOworfQorCitGcmFtZSogU2NyaXB0Q29udHJvbGxlcjo6cmV0
cmlldmVGcmFtZUZvckVudGVyZWRDb250ZXh0KCkKK3sKKyAgICByZXR1cm4gVjhQcm94eTo6cmV0
cmlldmVGcmFtZUZvckVudGVyZWRDb250ZXh0KCk7Cit9CisKK0ZyYW1lKiBTY3JpcHRDb250cm9s
bGVyOjpyZXRyaWV2ZUZyYW1lRm9yQ3VycmVudENvbnRleHQoKQoreworICAgIHJldHVybiBWOFBy
b3h5OjpyZXRyaWV2ZUZyYW1lRm9yQ3VycmVudENvbnRleHQoKTsKK30KKworYm9vbCBTY3JpcHRD
b250cm9sbGVyOjppc1NhZmVTY3JpcHQoRnJhbWUqIHRhcmdldCkKK3sKKyAgICByZXR1cm4gVjhQ
cm94eTo6Q2FuQWNjZXNzRnJhbWUodGFyZ2V0LCB0cnVlKTsKK30KKwordm9pZCBTY3JpcHRDb250
cm9sbGVyOjpnY1Byb3RlY3RKU1dyYXBwZXIodm9pZCogZG9tT2JqZWN0KQoreworICAgIFY4UHJv
eHk6OkdDUHJvdGVjdChkb21PYmplY3QpOworfQorCit2b2lkIFNjcmlwdENvbnRyb2xsZXI6Omdj
VW5wcm90ZWN0SlNXcmFwcGVyKHZvaWQqIGRvbU9iamVjdCkKK3sKKyAgICBWOFByb3h5OjpHQ1Vu
cHJvdGVjdChkb21PYmplY3QpOworfQorCitTY3JpcHRDb250cm9sbGVyOjpTY3JpcHRDb250cm9s
bGVyKEZyYW1lKiBmcmFtZSkKKyAgICA6IG1fZnJhbWUoZnJhbWUpCisgICAgLCBtX3NvdXJjZVVS
TCgwKQorICAgICwgbV9wcm9jZXNzaW5nVGltZXJDYWxsYmFjayhmYWxzZSkKKyAgICAsIG1fcGF1
c2VkKGZhbHNlKQorICAgICwgbV9zY3JpcHRTdGF0ZShuZXcgU2NyaXB0U3RhdGUoZnJhbWUpKQor
ICAgICwgbV9wcm94eShuZXcgVjhQcm94eShmcmFtZSkpCisjaWYgRU5BQkxFKE5FVFNDQVBFX1BM
VUdJTl9BUEkpCisgICAgLCBtX3dpbmRvd1NjcmlwdE5QT2JqZWN0KDApCisjZW5kaWYKK3sKK30K
KworU2NyaXB0Q29udHJvbGxlcjo6flNjcmlwdENvbnRyb2xsZXIoKQoreworfQorCit2b2lkIFNj
cmlwdENvbnRyb2xsZXI6OmNsZWFyU2NyaXB0T2JqZWN0cygpCit7CisgICAgUGx1Z2luT2JqZWN0
TWFwOjppdGVyYXRvciBpdCA9IG1fcGx1Z2luT2JqZWN0cy5iZWdpbigpOworICAgIGZvciAoOyBp
dCAhPSBtX3BsdWdpbk9iamVjdHMuZW5kKCk7ICsraXQpIHsKKyAgICAgICAgX05QTl9VbnJlZ2lz
dGVyT2JqZWN0KGl0LT5zZWNvbmQpOworICAgICAgICBOUE5fUmVsZWFzZU9iamVjdChpdC0+c2Vj
b25kKTsKKyAgICB9CisgICAgbV9wbHVnaW5PYmplY3RzLmNsZWFyKCk7CisKKyNpZiBFTkFCTEUo
TkVUU0NBUEVfUExVR0lOX0FQSSkKKyAgICBpZiAobV93aW5kb3dTY3JpcHROUE9iamVjdCkgewor
ICAgICAgICAvLyBDYWxsIF9OUE5fRGVhbGxvY2F0ZU9iamVjdCgpIGluc3RlYWQgb2YgX05QTl9S
ZWxlYXNlT2JqZWN0KCkgc28gdGhhdCB3ZSBkb24ndCBsZWFrIGlmIGEgcGx1Z2luIGZhaWxzIHRv
IHJlbGVhc2UgdGhlIHdpbmRvdworICAgICAgICAvLyBzY3JpcHQgb2JqZWN0IHByb3Blcmx5Lgor
ICAgICAgICAvLyBUaGlzIHNob3VsZG4ndCBjYXVzZSBhbnkgcHJvYmxlbXMgZm9yIHBsdWdpbnMg
c2luY2UgdGhleSBzaG91bGQgaGF2ZSBhbHJlYWR5IGJlZW4gc3RvcHBlZCBhbmQgZGVzdHJveWVk
IGF0IHRoaXMgcG9pbnQuCisgICAgICAgIF9OUE5fRGVhbGxvY2F0ZU9iamVjdChtX3dpbmRvd1Nj
cmlwdE5QT2JqZWN0KTsKKyAgICAgICAgbV93aW5kb3dTY3JpcHROUE9iamVjdCA9IDA7CisgICAg
fQorI2VuZGlmCit9CisKK3ZvaWQgU2NyaXB0Q29udHJvbGxlcjo6dXBkYXRlU2VjdXJpdHlPcmln
aW4oKQoreworICAgIG1fcHJveHktPnVwZGF0ZVNlY3VyaXR5T3JpZ2luKCk7Cit9CisKK3ZvaWQg
U2NyaXB0Q29udHJvbGxlcjo6dXBkYXRlUGxhdGZvcm1TY3JpcHRPYmplY3RzKCkKK3sKKyAgICBu
b3RJbXBsZW1lbnRlZCgpOworfQorCisvLyBEaXNjb25uZWN0IHRoZSBwcm94eSBmcm9tIGl0cyBv
d25lciBmcmFtZS4KK3ZvaWQgU2NyaXB0Q29udHJvbGxlcjo6ZGlzY29ubmVjdEZyYW1lKCkKK3sK
KyAgICBtX3Byb3h5LT5kaXNjb25uZWN0RnJhbWUoKTsKK30KKworYm9vbCBTY3JpcHRDb250cm9s
bGVyOjpwcm9jZXNzaW5nVXNlckdlc3R1cmUoKSBjb25zdAoreworICAgIEZyYW1lKiBhY3RpdmVG
cmFtZSA9IFY4UHJveHk6OnJldHJpZXZlRnJhbWVGb3JFbnRlcmVkQ29udGV4dCgpOworICAgIC8v
IE5vIHNjcmlwdCBpcyBydW5uaW5nLCBzbyBpdCBtdXN0IGJlIHJ1biBieSB1c2Vycy4KKyAgICBp
ZiAoIWFjdGl2ZUZyYW1lKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKworICAgIFY4UHJveHkqIGFj
dGl2ZVByb3h5ID0gYWN0aXZlRnJhbWUtPnNjcmlwdCgpLT5wcm94eSgpOworCisgICAgdjg6Okhh
bmRsZVNjb3BlIGhhbmRsZVNjb3BlOworICAgIHY4OjpIYW5kbGU8djg6OkNvbnRleHQ+IGNvbnRl
eHQgPSBWOFByb3h5OjpHZXRDb250ZXh0KGFjdGl2ZUZyYW1lKTsKKyAgICAvLyBGSVhNRTogZmlu
ZCBhbGwgY2FzZXMgY29udGV4dCBjYW4gYmUgZW1wdHk6CisgICAgLy8gIDEpIEpTIGlzIGRpc2Fi
bGVkOworICAgIC8vICAyKSBwYWdlIGlzIE5VTEw7CisgICAgaWYgKGNvbnRleHQuSXNFbXB0eSgp
KQorICAgICAgICByZXR1cm4gdHJ1ZTsKKworICAgIHY4OjpDb250ZXh0OjpTY29wZSBzY29wZShj
b250ZXh0KTsKKworICAgIHY4OjpIYW5kbGU8djg6Ok9iamVjdD4gZ2xvYmFsID0gY29udGV4dC0+
R2xvYmFsKCk7CisgICAgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IGpzRXZlbnQgPSBnbG9iYWwtPkdl
dCh2ODo6U3RyaW5nOjpOZXdTeW1ib2woImV2ZW50IikpOworICAgIEV2ZW50KiBldmVudCA9IFY4
UHJveHk6OlRvTmF0aXZlRXZlbnQoanNFdmVudCk7CisKKyAgICAvLyBCYXNlZCBvbiBjb2RlIGZy
b20ga2pzX2JpbmRpbmdzLmNwcC4KKyAgICAvLyBOb3RlOiBUaGlzIGlzIG1vcmUgbGliZXJhbCB0
aGFuIEZpcmVmb3gncyBpbXBsZW1lbnRhdGlvbi4KKyAgICBpZiAoZXZlbnQpIHsKKyAgICAgICAg
Y29uc3QgQXRvbWljU3RyaW5nJiB0eXBlID0gZXZlbnQtPnR5cGUoKTsKKyAgICAgICAgYm9vbCBl
dmVudE9rID0KKyAgICAgICAgICAgIC8vIG1vdXNlIGV2ZW50cworICAgICAgICAgICAgdHlwZSA9
PSBldmVudE5hbWVzKCkuY2xpY2tFdmVudCB8fCB0eXBlID09IGV2ZW50TmFtZXMoKS5tb3VzZWRv
d25FdmVudCB8fCB0eXBlID09IGV2ZW50TmFtZXMoKS5tb3VzZXVwRXZlbnQgfHwgdHlwZSA9PSBl
dmVudE5hbWVzKCkuZGJsY2xpY2tFdmVudAorICAgICAgICAgICAgLy8ga2V5Ym9hcmQgZXZlbnRz
CisgICAgICAgICAgICB8fCB0eXBlID09IGV2ZW50TmFtZXMoKS5rZXlkb3duRXZlbnQgfHwgdHlw
ZSA9PSBldmVudE5hbWVzKCkua2V5cHJlc3NFdmVudCB8fCB0eXBlID09IGV2ZW50TmFtZXMoKS5r
ZXl1cEV2ZW50CisgICAgICAgICAgICAvLyBvdGhlciBhY2NlcHRlZCBldmVudHMKKyAgICAgICAg
ICAgIHx8IHR5cGUgPT0gZXZlbnROYW1lcygpLnNlbGVjdEV2ZW50IHx8IHR5cGUgPT0gZXZlbnRO
YW1lcygpLmNoYW5nZUV2ZW50IHx8IHR5cGUgPT0gZXZlbnROYW1lcygpLmZvY3VzRXZlbnQgfHwg
dHlwZSA9PSBldmVudE5hbWVzKCkuYmx1ckV2ZW50IHx8IHR5cGUgPT0gZXZlbnROYW1lcygpLnN1
Ym1pdEV2ZW50OworCisgICAgICAgIGlmIChldmVudE9rKQorICAgICAgICAgICAgcmV0dXJuIHRy
dWU7CisgICAgfSBlbHNlIGlmIChhY3RpdmVQcm94eS0+aW5saW5lQ29kZSgpICYmICFhY3RpdmVQ
cm94eS0+dGltZXJDYWxsYmFjaygpKSB7CisgICAgICAgIC8vIFRoaXMgaXMgdGhlIDxhIGhyZWY9
ImphdmFzY3JpcHQ6d2luZG93Lm9wZW4oJy4uLicpPiBjYXNlIC0+IHdlIGxldCBpdCB0aHJvdWdo
LgorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisKKyAgICAvLyBUaGlzIGlzIHRoZSA8c2Ny
aXB0PndpbmRvdy5vcGVuKC4uLik8L3NjcmlwdD4gY2FzZSBvciBhIHRpbWVyIGNhbGxiYWNrIC0+
IGJsb2NrIGl0LgorICAgIHJldHVybiBmYWxzZTsKK30KKwordm9pZCBTY3JpcHRDb250cm9sbGVy
OjpldmFsdWF0ZUluTmV3Q29udGV4dChjb25zdCBWZWN0b3I8U2NyaXB0U291cmNlQ29kZT4mIHNv
dXJjZXMpCit7CisgICAgbV9wcm94eS0+ZXZhbHVhdGVJbk5ld0NvbnRleHQoc291cmNlcyk7Cit9
CisKKy8vIEV2YWx1YXRlIGEgc2NyaXB0IGZpbGUgaW4gdGhlIGVudmlyb25tZW50IG9mIHRoaXMg
cHJveHkuCitTY3JpcHRWYWx1ZSBTY3JpcHRDb250cm9sbGVyOjpldmFsdWF0ZShjb25zdCBTY3Jp
cHRTb3VyY2VDb2RlJiBzb3VyY2VDb2RlKQoreworICAgIHY4OjpIYW5kbGVTY29wZSBoYW5kbGVT
Y29wZTsKKyAgICB2ODo6SGFuZGxlPHY4OjpDb250ZXh0PiBjb250ZXh0ID0gVjhQcm94eTo6R2V0
Q29udGV4dChtX3Byb3h5LT5mcmFtZSgpKTsKKyAgICBpZiAoY29udGV4dC5Jc0VtcHR5KCkpCisg
ICAgICAgIHJldHVybiBTY3JpcHRWYWx1ZSgpOworCisgICAgdjg6OkNvbnRleHQ6OlNjb3BlIHNj
b3BlKGNvbnRleHQpOworICAgIHY4OjpMb2NhbDx2ODo6VmFsdWU+IG9iamVjdCA9IG1fcHJveHkt
PmV2YWx1YXRlKHNvdXJjZUNvZGUsIDApOworCisgICAgaWYgKG9iamVjdC5Jc0VtcHR5KCkgfHwg
b2JqZWN0LT5Jc1VuZGVmaW5lZCgpKQorICAgICAgICByZXR1cm4gU2NyaXB0VmFsdWUoKTsKKwor
ICAgIHJldHVybiBTY3JpcHRWYWx1ZShvYmplY3QpOworfQorCit2b2lkIFNjcmlwdENvbnRyb2xs
ZXI6OnNldEV2ZW50SGFuZGxlckxpbmVOdW1iZXIoaW50IGxpbmVOdW1iZXIpCit7CisgICAgbV9w
cm94eS0+c2V0RXZlbnRIYW5kbGVyTGluZW5vKGxpbmVOdW1iZXIpOworfQorCit2b2lkIFNjcmlw
dENvbnRyb2xsZXI6OmZpbmlzaGVkV2l0aEV2ZW50KEV2ZW50KiBldmVudCkKK3sKKyAgICBtX3By
b3h5LT5maW5pc2hlZFdpdGhFdmVudChldmVudCk7Cit9CisKKy8vIENyZWF0ZSBhIFY4IG9iamVj
dCB3aXRoIGFuIGludGVyY2VwdG9yIG9mIE5QT2JqZWN0UHJvcGVydHlHZXR0ZXIuCit2b2lkIFNj
cmlwdENvbnRyb2xsZXI6OmJpbmRUb1dpbmRvd09iamVjdChGcmFtZSogZnJhbWUsIGNvbnN0IFN0
cmluZyYga2V5LCBOUE9iamVjdCogb2JqZWN0KQoreworICAgIHY4OjpIYW5kbGVTY29wZSBoYW5k
bGVTY29wZTsKKworICAgIHY4OjpIYW5kbGU8djg6OkNvbnRleHQ+IGNvbnRleHQgPSBWOFByb3h5
OjpHZXRDb250ZXh0KGZyYW1lKTsKKyAgICBpZiAoY29udGV4dC5Jc0VtcHR5KCkpCisgICAgICAg
IHJldHVybjsKKworICAgIHY4OjpDb250ZXh0OjpTY29wZSBzY29wZShjb250ZXh0KTsKKworICAg
IHY4OjpIYW5kbGU8djg6Ok9iamVjdD4gdmFsdWUgPSBDcmVhdGVWOE9iamVjdEZvck5QT2JqZWN0
KG9iamVjdCwgMCk7CisKKyAgICAvLyBBdHRhY2ggdG8gdGhlIGdsb2JhbCBvYmplY3QuCisgICAg
djg6OkhhbmRsZTx2ODo6T2JqZWN0PiBnbG9iYWwgPSBjb250ZXh0LT5HbG9iYWwoKTsKKyAgICBn
bG9iYWwtPlNldCh2OFN0cmluZyhrZXkpLCB2YWx1ZSk7Cit9CisKK3ZvaWQgU2NyaXB0Q29udHJv
bGxlcjo6Y29sbGVjdEdhcmJhZ2UoKQoreworICAgIHY4OjpIYW5kbGVTY29wZSBoYW5kbGVTY29w
ZTsKKyAgICB2ODo6SGFuZGxlPHY4OjpDb250ZXh0PiBjb250ZXh0ID0gVjhQcm94eTo6R2V0Q29u
dGV4dChtX3Byb3h5LT5mcmFtZSgpKTsKKyAgICBpZiAoY29udGV4dC5Jc0VtcHR5KCkpCisgICAg
ICAgIHJldHVybjsKKworICAgIHY4OjpDb250ZXh0OjpTY29wZSBzY29wZShjb250ZXh0KTsKKwor
ICAgIG1fcHJveHktPmV2YWx1YXRlKFNjcmlwdFNvdXJjZUNvZGUoImlmICh3aW5kb3cuZ2MpIHZv
aWQoZ2MoKSk7IiksIDApOworfQorCitib29sIFNjcmlwdENvbnRyb2xsZXI6OmhhdmVJbnRlcnBy
ZXRlcigpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fcHJveHktPkNvbnRleHRJbml0aWFsaXplZCgp
OworfQorCitib29sIFNjcmlwdENvbnRyb2xsZXI6OmlzRW5hYmxlZCgpIGNvbnN0Cit7CisgICAg
cmV0dXJuIG1fcHJveHktPmlzRW5hYmxlZCgpOworfQorCitQYXNzU2NyaXB0SW5zdGFuY2UgU2Ny
aXB0Q29udHJvbGxlcjo6Y3JlYXRlU2NyaXB0SW5zdGFuY2VGb3JXaWRnZXQoV2lkZ2V0KiB3aWRn
ZXQpCit7CisgICAgQVNTRVJUKHdpZGdldCk7CisKKyAgICBpZiAod2lkZ2V0LT5pc0ZyYW1lVmll
dygpKQorICAgICAgICByZXR1cm4gMDsKKworICAgIE5QT2JqZWN0KiBucE9iamVjdCA9IENocm9t
aXVtQnJpZGdlOjpwbHVnaW5TY3JpcHRhYmxlT2JqZWN0KHdpZGdldCk7CisgICAgaWYgKCFucE9i
amVjdCkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICAvLyBGcmFtZSBNZW1vcnkgTWFuYWdlbWVu
dCBmb3IgTlBPYmplY3RzCisgICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLQorICAgIC8vIE5QT2JqZWN0cyBhcmUgdHJlYXRlZCBkaWZmZXJlbnRseSB0aGFuIG90aGVy
IG9iamVjdHMgd3JhcHBlZCBieSBKUy4KKyAgICAvLyBOUE9iamVjdHMgY2FuIGJlIGNyZWF0ZWQg
ZWl0aGVyIGJ5IHRoZSBicm93c2VyIChlLmcuIHRoZSBtYWluCisgICAgLy8gd2luZG93IG9iamVj
dCkgb3IgYnkgdGhlIHBsdWdpbiAodGhlIG1haW4gcGx1Z2luIG9iamVjdAorICAgIC8vIGZvciBh
IEhUTUxFbWJlZEVsZW1lbnQpLiBGdXJ0aGVyLCB1bmxpa2UgbW9zdCBET00gT2JqZWN0cywgdGhl
IGZyYW1lCisgICAgLy8gaXMgZXNwZWNpYWxseSBjYXJlZnVsIHRvIGVuc3VyZSBOUE9iamVjdHMg
dGVybWluYXRlIGF0IGZyYW1lIHRlYXJkb3duIGJlY2F1c2UKKyAgICAvLyBpZiBhIHBsdWdpbiBs
ZWFrcyBhIHJlZmVyZW5jZSwgaXQgY291bGQgbGVhayBpdHMgb2JqZWN0cyAob3IgdGhlIGJyb3dz
ZXIncyBvYmplY3RzKS4KKyAgICAvLworICAgIC8vIFRoZSBGcmFtZSBtYWludGFpbnMgYSBsaXN0
IG9mIHBsdWdpbiBvYmplY3RzIChtX3BsdWdpbk9iamVjdHMpCisgICAgLy8gd2hpY2ggaXQgY2Fu
IHVzZSB0byBxdWlja2x5IGZpbmQgdGhlIHdyYXBwZWQgZW1iZWQgb2JqZWN0LgorICAgIC8vCisg
ICAgLy8gSW5zaWRlIHRoZSBOUFJ1bnRpbWUsIHdlJ3ZlIGFkZGVkIGEgZmV3IG1ldGhvZHMgZm9y
IHJlZ2lzdGVyaW5nCisgICAgLy8gd3JhcHBlZCBOUE9iamVjdHMuIFRoZSBwdXJwb3NlIG9mIHRo
ZSByZWdpc3RyYXRpb24gaXMgYmVjYXVzZQorICAgIC8vIGphdmFzY3JpcHQgZ2FyYmFnZSBjb2xs
ZWN0aW9uIGlzIG5vbi1kZXRlcm1pbmlzdGljLCB5ZXQgd2UgbmVlZCB0bworICAgIC8vIGJlIGFi
bGUgdG8gdGVhciBkb3duIHRoZSBwbHVnaW4gb2JqZWN0cyBpbW1lZGlhdGVseS4gV2hlbiBhbiBv
YmplY3QKKyAgICAvLyBpcyByZWdpc3RlcmVkLCBqYXZhc2NyaXB0IGNhbiB1c2UgaXQuIFdoZW4g
dGhlIG9iamVjdCBpcyBkZXN0cm95ZWQsCisgICAgLy8gb3Igd2hlbiB0aGUgb2JqZWN0J3MgIm93
bmluZyIgb2JqZWN0IGlzIGRlc3Ryb3llZCwgdGhlIG9iamVjdCB3aWxsCisgICAgLy8gYmUgdW4t
cmVnaXN0ZXJlZCwgYW5kIHRoZSBqYXZhc2NyaXB0IGVuZ2luZSBtdXN0IG5vdCB1c2UgaXQuCisg
ICAgLy8KKyAgICAvLyBJbnNpZGUgdGhlIGphdmFzY3JpcHQgZW5naW5lLCB0aGUgZW5naW5lIGNh
biBrZWVwIGEgcmVmZXJlbmNlIHRvIHRoZQorICAgIC8vIE5QT2JqZWN0IGFzIHBhcnQgb2YgaXRz
IHdyYXBwZXIuIEhvd2V2ZXIsIGJlZm9yZSBhY2Nlc3NpbmcgdGhlIG9iamVjdAorICAgIC8vIGl0
IG11c3QgY29uc3VsdCB0aGUgTlBOX1JlZ2lzdHJ5LgorCisgICAgdjg6OkxvY2FsPHY4OjpPYmpl
Y3Q+IHdyYXBwZXIgPSBDcmVhdGVWOE9iamVjdEZvck5QT2JqZWN0KG5wT2JqZWN0LCAwKTsKKwor
ICAgIC8vIFRyYWNrIHRoZSBwbHVnaW4gb2JqZWN0LiBXZSd2ZSBiZWVuIGdpdmVuIGEgcmVmZXJl
bmNlIHRvIHRoZSBvYmplY3QuCisgICAgbV9wbHVnaW5PYmplY3RzLnNldCh3aWRnZXQsIG5wT2Jq
ZWN0KTsKKworICAgIHJldHVybiBWOFNjcmlwdEluc3RhbmNlOjpjcmVhdGUod3JhcHBlcik7Cit9
CisKK3ZvaWQgU2NyaXB0Q29udHJvbGxlcjo6Y2xlYW51cFNjcmlwdE9iamVjdHNGb3JQbHVnaW4o
dm9pZCogbmF0aXZlSGFuZGxlKQoreworICAgIFBsdWdpbk9iamVjdE1hcDo6aXRlcmF0b3IgaXQg
PSBtX3BsdWdpbk9iamVjdHMuZmluZChuYXRpdmVIYW5kbGUpOworICAgIGlmIChpdCA9PSBtX3Bs
dWdpbk9iamVjdHMuZW5kKCkpCisgICAgICAgIHJldHVybjsKKyAgICBfTlBOX1VucmVnaXN0ZXJP
YmplY3QoaXQtPnNlY29uZCk7CisgICAgTlBOX1JlbGVhc2VPYmplY3QoaXQtPnNlY29uZCk7Cisg
ICAgbV9wbHVnaW5PYmplY3RzLnJlbW92ZShpdCk7Cit9CisKK3N0YXRpYyBOUE9iamVjdCogY3Jl
YXRlTm9TY3JpcHRPYmplY3QoKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAgcmV0dXJu
IDA7Cit9CisKK3N0YXRpYyBOUE9iamVjdCogY3JlYXRlU2NyaXB0T2JqZWN0KEZyYW1lKiBmcmFt
ZSkKK3sKKyAgICB2ODo6SGFuZGxlU2NvcGUgaGFuZGxlU2NvcGU7CisgICAgdjg6OkhhbmRsZTx2
ODo6Q29udGV4dD4gY29udGV4dCA9IFY4UHJveHk6OkdldENvbnRleHQoZnJhbWUpOworICAgIGlm
IChjb250ZXh0LklzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJuIGNyZWF0ZU5vU2NyaXB0T2JqZWN0
KCk7CisKKyAgICB2ODo6Q29udGV4dDo6U2NvcGUgc2NvcGUoY29udGV4dCk7CisgICAgRE9NV2lu
ZG93KiB3aW5kb3cgPSBmcmFtZS0+ZG9tV2luZG93KCk7CisgICAgdjg6OkhhbmRsZTx2ODo6VmFs
dWU+IGdsb2JhbCA9IFY4UHJveHk6OlRvVjhPYmplY3QoVjhDbGFzc0luZGV4OjpET01XSU5ET1cs
IHdpbmRvdyk7CisgICAgQVNTRVJUKGdsb2JhbC0+SXNPYmplY3QoKSk7CisgICAgcmV0dXJuIG5w
Q3JlYXRlVjhTY3JpcHRPYmplY3QoMCwgdjg6OkhhbmRsZTx2ODo6T2JqZWN0Pjo6Q2FzdChnbG9i
YWwpLCB3aW5kb3cpOworfQorCitOUE9iamVjdCogU2NyaXB0Q29udHJvbGxlcjo6d2luZG93U2Ny
aXB0TlBPYmplY3QoKQoreworICAgIGlmIChtX3dpbmRvd1NjcmlwdE5QT2JqZWN0KQorICAgICAg
ICByZXR1cm4gbV93aW5kb3dTY3JpcHROUE9iamVjdDsKKworICAgIGlmIChpc0VuYWJsZWQoKSkg
eworICAgICAgICAvLyBKYXZhU2NyaXB0IGlzIGVuYWJsZWQsIHNvIHRoZXJlIGlzIGEgSmF2YVNj
cmlwdCB3aW5kb3cgb2JqZWN0LgorICAgICAgICAvLyBSZXR1cm4gYW4gTlBPYmplY3QgYm91bmQg
dG8gdGhlIHdpbmRvdyBvYmplY3QuCisgICAgICAgIG1fd2luZG93U2NyaXB0TlBPYmplY3QgPSBj
cmVhdGVTY3JpcHRPYmplY3QobV9mcmFtZSk7CisgICAgICAgIF9OUE5fUmVnaXN0ZXJPYmplY3Qo
bV93aW5kb3dTY3JpcHROUE9iamVjdCwgMCk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgLy8gSmF2
YVNjcmlwdCBpcyBub3QgZW5hYmxlZCwgc28gd2UgY2Fubm90IGJpbmQgdGhlIE5QT2JqZWN0IHRv
IHRoZQorICAgICAgICAvLyBKYXZhU2NyaXB0IHdpbmRvdyBvYmplY3QuIEluc3RlYWQsIHdlIGNy
ZWF0ZSBhbiBOUE9iamVjdCBvZiBhCisgICAgICAgIC8vIGRpZmZlcmVudCBjbGFzcywgb25lIHdo
aWNoIGlzIG5vdCBib3VuZCB0byBhIEphdmFTY3JpcHQgb2JqZWN0LgorICAgICAgICBtX3dpbmRv
d1NjcmlwdE5QT2JqZWN0ID0gY3JlYXRlTm9TY3JpcHRPYmplY3QoKTsKKyAgICB9CisgICAgcmV0
dXJuIG1fd2luZG93U2NyaXB0TlBPYmplY3Q7Cit9CisKK05QT2JqZWN0KiBTY3JpcHRDb250cm9s
bGVyOjpjcmVhdGVTY3JpcHRPYmplY3RGb3JQbHVnaW5FbGVtZW50KEhUTUxQbHVnSW5FbGVtZW50
KiBwbHVnaW4pCit7CisgICAgLy8gQ2FuJ3QgY3JlYXRlIE5QT2JqZWN0cyB3aGVuIEphdmFTY3Jp
cHQgaXMgZGlzYWJsZWQuCisgICAgaWYgKCFpc0VuYWJsZWQoKSkKKyAgICAgICAgcmV0dXJuIGNy
ZWF0ZU5vU2NyaXB0T2JqZWN0KCk7CisKKyAgICB2ODo6SGFuZGxlU2NvcGUgaGFuZGxlU2NvcGU7
CisgICAgdjg6OkhhbmRsZTx2ODo6Q29udGV4dD4gY29udGV4dCA9IFY4UHJveHk6OkdldENvbnRl
eHQobV9mcmFtZSk7CisgICAgaWYgKGNvbnRleHQuSXNFbXB0eSgpKQorICAgICAgICByZXR1cm4g
Y3JlYXRlTm9TY3JpcHRPYmplY3QoKTsKKyAgICB2ODo6Q29udGV4dDo6U2NvcGUgc2NvcGUoY29u
dGV4dCk7CisKKyAgICBET01XaW5kb3cqIHdpbmRvdyA9IG1fZnJhbWUtPmRvbVdpbmRvdygpOwor
ICAgIHY4OjpIYW5kbGU8djg6OlZhbHVlPiB2OHBsdWdpbiA9IFY4UHJveHk6OlRvVjhPYmplY3Qo
VjhDbGFzc0luZGV4OjpIVE1MRU1CRURFTEVNRU5ULCBwbHVnaW4pOworICAgIGlmICghdjhwbHVn
aW4tPklzT2JqZWN0KCkpCisgICAgICAgIHJldHVybiBjcmVhdGVOb1NjcmlwdE9iamVjdCgpOwor
CisgICAgcmV0dXJuIG5wQ3JlYXRlVjhTY3JpcHRPYmplY3QoMCwgdjg6OkhhbmRsZTx2ODo6T2Jq
ZWN0Pjo6Q2FzdCh2OHBsdWdpbiksIHdpbmRvdyk7Cit9CisKKwordm9pZCBTY3JpcHRDb250cm9s
bGVyOjpjbGVhcldpbmRvd1NoZWxsKCkKK3sKKyAgICAvLyBWOCBiaW5kaW5nIGV4cGVjdHMgU2Ny
aXB0Q29udHJvbGxlcjo6Y2xlYXJXaW5kb3dTaGVsbCBvbmx5IGJlIGNhbGxlZAorICAgIC8vIHdo
ZW4gYSBmcmFtZSBpcyBsb2FkaW5nIGEgbmV3IHBhZ2UuIFY4UHJveHk6OmNsZWFyRm9yTmF2aWdh
dGlvbgorICAgIC8vIGNyZWF0ZXMgYSBuZXcgY29udGV4dCBmb3IgdGhlIG5ldyBwYWdlLgorICAg
IG1fcHJveHktPmNsZWFyRm9yTmF2aWdhdGlvbigpOworfQorCit2b2lkIFNjcmlwdENvbnRyb2xs
ZXI6OmF0dGFjaERlYnVnZ2VyKHZvaWQqKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisK
K3ZvaWQgU2NyaXB0Q29udHJvbGxlcjo6dXBkYXRlRG9jdW1lbnQoKQoreworICAgIG1fcHJveHkt
PnVwZGF0ZURvY3VtZW50KCk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdp
dCBhL1dlYkNvcmUvYmluZGluZ3MvdjgvU2NyaXB0Q29udHJvbGxlci5oIGIvV2ViQ29yZS9iaW5k
aW5ncy92OC9TY3JpcHRDb250cm9sbGVyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw
MDAwMC4uYzcxOWNjMQotLS0gL2Rldi9udWxsCisrKyBiL1dlYkNvcmUvYmluZGluZ3MvdjgvU2Ny
aXB0Q29udHJvbGxlci5oCkBAIC0wLDAgKzEsMzg4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAy
MDA4LCAyMDA5IEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMgYXJlCisgKiBtZXQ6CisgKgorICogICAgICogUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqIGRpc3RyaWJ1dGlvbi4K
KyAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBv
ZiBpdHMKKyAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUg
cHJvZHVjdHMgZGVyaXZlZCBmcm9tCisgKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMg
cHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIg
QU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
CisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisgKiBPV05FUiBPUiBDT05UUklCVVRP
UlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQ
RUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QKKyAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisg
KiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5o
IgorI2luY2x1ZGUgIlNjcmlwdENvbnRyb2xsZXIuaCIKKworI2luY2x1ZGUgIkNocm9taXVtQnJp
ZGdlLmgiCisjaW5jbHVkZSAiQ1N0cmluZy5oIgorI2luY2x1ZGUgIkRvY3VtZW50LmgiCisjaW5j
bHVkZSAiRE9NV2luZG93LmgiCisjaW5jbHVkZSAiRXZlbnQuaCIKKyNpbmNsdWRlICJFdmVudExp
c3RlbmVyLmgiCisjaW5jbHVkZSAiRXZlbnROYW1lcy5oIgorI2luY2x1ZGUgIkZyYW1lLmgiCisj
aW5jbHVkZSAiTm9kZS5oIgorI2luY2x1ZGUgIk5vdEltcGxlbWVudGVkLmgiCisjaW5jbHVkZSAi
bnBydW50aW1lX3ByaXYuaCIKKyNpbmNsdWRlICJOUFY4T2JqZWN0LmgiCisjaW5jbHVkZSAiU2Ny
aXB0U291cmNlQ29kZS5oIgorI2luY2x1ZGUgIlNjcmlwdFN0YXRlLmgiCisjaW5jbHVkZSAiV2lk
Z2V0LmgiCisKKyNpbmNsdWRlICJWOEJpbmRpbmcuaCIKKyNpbmNsdWRlICJWOE5QT2JqZWN0Lmgi
CisjaW5jbHVkZSAiVjhQcm94eS5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK3ZvaWQgU2Ny
aXB0Q29udHJvbGxlcjo6c2V0RmxhZ3MoY29uc3QgY2hhciogc3RyaW5nLCBpbnQgbGVuZ3RoKQor
eworICAgIHY4OjpWODo6U2V0RmxhZ3NGcm9tU3RyaW5nKHN0cmluZywgbGVuZ3RoKTsKK30KKwor
RnJhbWUqIFNjcmlwdENvbnRyb2xsZXI6OnJldHJpZXZlRnJhbWVGb3JFbnRlcmVkQ29udGV4dCgp
Cit7CisgICAgcmV0dXJuIFY4UHJveHk6OnJldHJpZXZlRnJhbWVGb3JFbnRlcmVkQ29udGV4dCgp
OworfQorCitGcmFtZSogU2NyaXB0Q29udHJvbGxlcjo6cmV0cmlldmVGcmFtZUZvckN1cnJlbnRD
b250ZXh0KCkKK3sKKyAgICByZXR1cm4gVjhQcm94eTo6cmV0cmlldmVGcmFtZUZvckN1cnJlbnRD
b250ZXh0KCk7Cit9CisKK2Jvb2wgU2NyaXB0Q29udHJvbGxlcjo6aXNTYWZlU2NyaXB0KEZyYW1l
KiB0YXJnZXQpCit7CisgICAgcmV0dXJuIFY4UHJveHk6OkNhbkFjY2Vzc0ZyYW1lKHRhcmdldCwg
dHJ1ZSk7Cit9CisKK3ZvaWQgU2NyaXB0Q29udHJvbGxlcjo6Z2NQcm90ZWN0SlNXcmFwcGVyKHZv
aWQqIGRvbU9iamVjdCkKK3sKKyAgICBWOFByb3h5OjpHQ1Byb3RlY3QoZG9tT2JqZWN0KTsKK30K
Kwordm9pZCBTY3JpcHRDb250cm9sbGVyOjpnY1VucHJvdGVjdEpTV3JhcHBlcih2b2lkKiBkb21P
YmplY3QpCit7CisgICAgVjhQcm94eTo6R0NVbnByb3RlY3QoZG9tT2JqZWN0KTsKK30KKworU2Ny
aXB0Q29udHJvbGxlcjo6U2NyaXB0Q29udHJvbGxlcihGcmFtZSogZnJhbWUpCisgICAgOiBtX2Zy
YW1lKGZyYW1lKQorICAgICwgbV9zb3VyY2VVUkwoMCkKKyAgICAsIG1fcHJvY2Vzc2luZ1RpbWVy
Q2FsbGJhY2soZmFsc2UpCisgICAgLCBtX3BhdXNlZChmYWxzZSkKKyAgICAsIG1fc2NyaXB0U3Rh
dGUobmV3IFNjcmlwdFN0YXRlKGZyYW1lKSkKKyAgICAsIG1fcHJveHkobmV3IFY4UHJveHkoZnJh
bWUpKQorI2lmIEVOQUJMRShORVRTQ0FQRV9QTFVHSU5fQVBJKQorICAgICwgbV93aW5kb3dTY3Jp
cHROUE9iamVjdCgwKQorI2VuZGlmCit7Cit9CisKK1NjcmlwdENvbnRyb2xsZXI6On5TY3JpcHRD
b250cm9sbGVyKCkKK3sKK30KKwordm9pZCBTY3JpcHRDb250cm9sbGVyOjpjbGVhclNjcmlwdE9i
amVjdHMoKQoreworICAgIFBsdWdpbk9iamVjdE1hcDo6aXRlcmF0b3IgaXQgPSBtX3BsdWdpbk9i
amVjdHMuYmVnaW4oKTsKKyAgICBmb3IgKDsgaXQgIT0gbV9wbHVnaW5PYmplY3RzLmVuZCgpOyAr
K2l0KSB7CisgICAgICAgIF9OUE5fVW5yZWdpc3Rlck9iamVjdChpdC0+c2Vjb25kKTsKKyAgICAg
ICAgTlBOX1JlbGVhc2VPYmplY3QoaXQtPnNlY29uZCk7CisgICAgfQorICAgIG1fcGx1Z2luT2Jq
ZWN0cy5jbGVhcigpOworCisjaWYgRU5BQkxFKE5FVFNDQVBFX1BMVUdJTl9BUEkpCisgICAgaWYg
KG1fd2luZG93U2NyaXB0TlBPYmplY3QpIHsKKyAgICAgICAgLy8gQ2FsbCBfTlBOX0RlYWxsb2Nh
dGVPYmplY3QoKSBpbnN0ZWFkIG9mIF9OUE5fUmVsZWFzZU9iamVjdCgpIHNvIHRoYXQgd2UgZG9u
J3QgbGVhayBpZiBhIHBsdWdpbiBmYWlscyB0byByZWxlYXNlIHRoZSB3aW5kb3cKKyAgICAgICAg
Ly8gc2NyaXB0IG9iamVjdCBwcm9wZXJseS4KKyAgICAgICAgLy8gVGhpcyBzaG91bGRuJ3QgY2F1
c2UgYW55IHByb2JsZW1zIGZvciBwbHVnaW5zIHNpbmNlIHRoZXkgc2hvdWxkIGhhdmUgYWxyZWFk
eSBiZWVuIHN0b3BwZWQgYW5kIGRlc3Ryb3llZCBhdCB0aGlzIHBvaW50LgorICAgICAgICBfTlBO
X0RlYWxsb2NhdGVPYmplY3QobV93aW5kb3dTY3JpcHROUE9iamVjdCk7CisgICAgICAgIG1fd2lu
ZG93U2NyaXB0TlBPYmplY3QgPSAwOworICAgIH0KKyNlbmRpZgorfQorCit2b2lkIFNjcmlwdENv
bnRyb2xsZXI6OnVwZGF0ZVNlY3VyaXR5T3JpZ2luKCkKK3sKKyAgICBtX3Byb3h5LT51cGRhdGVT
ZWN1cml0eU9yaWdpbigpOworfQorCit2b2lkIFNjcmlwdENvbnRyb2xsZXI6OnVwZGF0ZVBsYXRm
b3JtU2NyaXB0T2JqZWN0cygpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKworLy8gRGlz
Y29ubmVjdCB0aGUgcHJveHkgZnJvbSBpdHMgb3duZXIgZnJhbWUuCit2b2lkIFNjcmlwdENvbnRy
b2xsZXI6OmRpc2Nvbm5lY3RGcmFtZSgpCit7CisgICAgbV9wcm94eS0+ZGlzY29ubmVjdEZyYW1l
KCk7Cit9CisKK2Jvb2wgU2NyaXB0Q29udHJvbGxlcjo6cHJvY2Vzc2luZ1VzZXJHZXN0dXJlKCkg
Y29uc3QKK3sKKyAgICBGcmFtZSogYWN0aXZlRnJhbWUgPSBWOFByb3h5OjpyZXRyaWV2ZUZyYW1l
Rm9yRW50ZXJlZENvbnRleHQoKTsKKyAgICAvLyBObyBzY3JpcHQgaXMgcnVubmluZywgc28gaXQg
bXVzdCBiZSBydW4gYnkgdXNlcnMuCisgICAgaWYgKCFhY3RpdmVGcmFtZSkKKyAgICAgICAgcmV0
dXJuIHRydWU7CisKKyAgICBWOFByb3h5KiBhY3RpdmVQcm94eSA9IGFjdGl2ZUZyYW1lLT5zY3Jp
cHQoKS0+cHJveHkoKTsKKworICAgIHY4OjpIYW5kbGVTY29wZSBoYW5kbGVTY29wZTsKKyAgICB2
ODo6SGFuZGxlPHY4OjpDb250ZXh0PiBjb250ZXh0ID0gVjhQcm94eTo6R2V0Q29udGV4dChhY3Rp
dmVGcmFtZSk7CisgICAgLy8gRklYTUU6IGZpbmQgYWxsIGNhc2VzIGNvbnRleHQgY2FuIGJlIGVt
cHR5OgorICAgIC8vICAxKSBKUyBpcyBkaXNhYmxlZDsKKyAgICAvLyAgMikgcGFnZSBpcyBOVUxM
OworICAgIGlmIChjb250ZXh0LklzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJuIHRydWU7CisKKyAg
ICB2ODo6Q29udGV4dDo6U2NvcGUgc2NvcGUoY29udGV4dCk7CisKKyAgICB2ODo6SGFuZGxlPHY4
OjpPYmplY3Q+IGdsb2JhbCA9IGNvbnRleHQtPkdsb2JhbCgpOworICAgIHY4OjpIYW5kbGU8djg6
OlZhbHVlPiBqc0V2ZW50ID0gZ2xvYmFsLT5HZXQodjg6OlN0cmluZzo6TmV3U3ltYm9sKCJldmVu
dCIpKTsKKyAgICBFdmVudCogZXZlbnQgPSBWOFByb3h5OjpUb05hdGl2ZUV2ZW50KGpzRXZlbnQp
OworCisgICAgLy8gQmFzZWQgb24gY29kZSBmcm9tIGtqc19iaW5kaW5ncy5jcHAuCisgICAgLy8g
Tm90ZTogVGhpcyBpcyBtb3JlIGxpYmVyYWwgdGhhbiBGaXJlZm94J3MgaW1wbGVtZW50YXRpb24u
CisgICAgaWYgKGV2ZW50KSB7CisgICAgICAgIGNvbnN0IEF0b21pY1N0cmluZyYgdHlwZSA9IGV2
ZW50LT50eXBlKCk7CisgICAgICAgIGJvb2wgZXZlbnRPayA9CisgICAgICAgICAgICAvLyBtb3Vz
ZSBldmVudHMKKyAgICAgICAgICAgIHR5cGUgPT0gZXZlbnROYW1lcygpLmNsaWNrRXZlbnQgfHwg
dHlwZSA9PSBldmVudE5hbWVzKCkubW91c2Vkb3duRXZlbnQgfHwgdHlwZSA9PSBldmVudE5hbWVz
KCkubW91c2V1cEV2ZW50IHx8IHR5cGUgPT0gZXZlbnROYW1lcygpLmRibGNsaWNrRXZlbnQKKyAg
ICAgICAgICAgIC8vIGtleWJvYXJkIGV2ZW50cworICAgICAgICAgICAgfHwgdHlwZSA9PSBldmVu
dE5hbWVzKCkua2V5ZG93bkV2ZW50IHx8IHR5cGUgPT0gZXZlbnROYW1lcygpLmtleXByZXNzRXZl
bnQgfHwgdHlwZSA9PSBldmVudE5hbWVzKCkua2V5dXBFdmVudAorICAgICAgICAgICAgLy8gb3Ro
ZXIgYWNjZXB0ZWQgZXZlbnRzCisgICAgICAgICAgICB8fCB0eXBlID09IGV2ZW50TmFtZXMoKS5z
ZWxlY3RFdmVudCB8fCB0eXBlID09IGV2ZW50TmFtZXMoKS5jaGFuZ2VFdmVudCB8fCB0eXBlID09
IGV2ZW50TmFtZXMoKS5mb2N1c0V2ZW50IHx8IHR5cGUgPT0gZXZlbnROYW1lcygpLmJsdXJFdmVu
dCB8fCB0eXBlID09IGV2ZW50TmFtZXMoKS5zdWJtaXRFdmVudDsKKworICAgICAgICBpZiAoZXZl
bnRPaykKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgIH0gZWxzZSBpZiAoYWN0aXZlUHJv
eHktPmlubGluZUNvZGUoKSAmJiAhYWN0aXZlUHJveHktPnRpbWVyQ2FsbGJhY2soKSkgeworICAg
ICAgICAvLyBUaGlzIGlzIHRoZSA8YSBocmVmPSJqYXZhc2NyaXB0OndpbmRvdy5vcGVuKCcuLi4n
KT4gY2FzZSAtPiB3ZSBsZXQgaXQgdGhyb3VnaC4KKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAg
fQorCisgICAgLy8gVGhpcyBpcyB0aGUgPHNjcmlwdD53aW5kb3cub3BlbiguLi4pPC9zY3JpcHQ+
IGNhc2Ugb3IgYSB0aW1lciBjYWxsYmFjayAtPiBibG9jayBpdC4KKyAgICByZXR1cm4gZmFsc2U7
Cit9CisKK3ZvaWQgU2NyaXB0Q29udHJvbGxlcjo6ZXZhbHVhdGVJbk5ld0NvbnRleHQoY29uc3Qg
VmVjdG9yPFNjcmlwdFNvdXJjZUNvZGU+JiBzb3VyY2VzKQoreworICAgIG1fcHJveHktPmV2YWx1
YXRlSW5OZXdDb250ZXh0KHNvdXJjZXMpOworfQorCisvLyBFdmFsdWF0ZSBhIHNjcmlwdCBmaWxl
IGluIHRoZSBlbnZpcm9ubWVudCBvZiB0aGlzIHByb3h5LgorU2NyaXB0VmFsdWUgU2NyaXB0Q29u
dHJvbGxlcjo6ZXZhbHVhdGUoY29uc3QgU2NyaXB0U291cmNlQ29kZSYgc291cmNlQ29kZSkKK3sK
KyAgICB2ODo6SGFuZGxlU2NvcGUgaGFuZGxlU2NvcGU7CisgICAgdjg6OkhhbmRsZTx2ODo6Q29u
dGV4dD4gY29udGV4dCA9IFY4UHJveHk6OkdldENvbnRleHQobV9wcm94eS0+ZnJhbWUoKSk7Cisg
ICAgaWYgKGNvbnRleHQuSXNFbXB0eSgpKQorICAgICAgICByZXR1cm4gU2NyaXB0VmFsdWUoKTsK
KworICAgIHY4OjpDb250ZXh0OjpTY29wZSBzY29wZShjb250ZXh0KTsKKyAgICB2ODo6TG9jYWw8
djg6OlZhbHVlPiBvYmplY3QgPSBtX3Byb3h5LT5ldmFsdWF0ZShzb3VyY2VDb2RlLCAwKTsKKwor
ICAgIGlmIChvYmplY3QuSXNFbXB0eSgpIHx8IG9iamVjdC0+SXNVbmRlZmluZWQoKSkKKyAgICAg
ICAgcmV0dXJuIFNjcmlwdFZhbHVlKCk7CisKKyAgICByZXR1cm4gU2NyaXB0VmFsdWUob2JqZWN0
KTsKK30KKwordm9pZCBTY3JpcHRDb250cm9sbGVyOjpzZXRFdmVudEhhbmRsZXJMaW5lTnVtYmVy
KGludCBsaW5lTnVtYmVyKQoreworICAgIG1fcHJveHktPnNldEV2ZW50SGFuZGxlckxpbmVubyhs
aW5lTnVtYmVyKTsKK30KKwordm9pZCBTY3JpcHRDb250cm9sbGVyOjpmaW5pc2hlZFdpdGhFdmVu
dChFdmVudCogZXZlbnQpCit7CisgICAgbV9wcm94eS0+ZmluaXNoZWRXaXRoRXZlbnQoZXZlbnQp
OworfQorCisvLyBDcmVhdGUgYSBWOCBvYmplY3Qgd2l0aCBhbiBpbnRlcmNlcHRvciBvZiBOUE9i
amVjdFByb3BlcnR5R2V0dGVyLgordm9pZCBTY3JpcHRDb250cm9sbGVyOjpiaW5kVG9XaW5kb3dP
YmplY3QoRnJhbWUqIGZyYW1lLCBjb25zdCBTdHJpbmcmIGtleSwgTlBPYmplY3QqIG9iamVjdCkK
K3sKKyAgICB2ODo6SGFuZGxlU2NvcGUgaGFuZGxlU2NvcGU7CisKKyAgICB2ODo6SGFuZGxlPHY4
OjpDb250ZXh0PiBjb250ZXh0ID0gVjhQcm94eTo6R2V0Q29udGV4dChmcmFtZSk7CisgICAgaWYg
KGNvbnRleHQuSXNFbXB0eSgpKQorICAgICAgICByZXR1cm47CisKKyAgICB2ODo6Q29udGV4dDo6
U2NvcGUgc2NvcGUoY29udGV4dCk7CisKKyAgICB2ODo6SGFuZGxlPHY4OjpPYmplY3Q+IHZhbHVl
ID0gQ3JlYXRlVjhPYmplY3RGb3JOUE9iamVjdChvYmplY3QsIDApOworCisgICAgLy8gQXR0YWNo
IHRvIHRoZSBnbG9iYWwgb2JqZWN0LgorICAgIHY4OjpIYW5kbGU8djg6Ok9iamVjdD4gZ2xvYmFs
ID0gY29udGV4dC0+R2xvYmFsKCk7CisgICAgZ2xvYmFsLT5TZXQodjhTdHJpbmcoa2V5KSwgdmFs
dWUpOworfQorCit2b2lkIFNjcmlwdENvbnRyb2xsZXI6OmNvbGxlY3RHYXJiYWdlKCkKK3sKKyAg
ICB2ODo6SGFuZGxlU2NvcGUgaGFuZGxlU2NvcGU7CisgICAgdjg6OkhhbmRsZTx2ODo6Q29udGV4
dD4gY29udGV4dCA9IFY4UHJveHk6OkdldENvbnRleHQobV9wcm94eS0+ZnJhbWUoKSk7CisgICAg
aWYgKGNvbnRleHQuSXNFbXB0eSgpKQorICAgICAgICByZXR1cm47CisKKyAgICB2ODo6Q29udGV4
dDo6U2NvcGUgc2NvcGUoY29udGV4dCk7CisKKyAgICBtX3Byb3h5LT5ldmFsdWF0ZShTY3JpcHRT
b3VyY2VDb2RlKCJpZiAod2luZG93LmdjKSB2b2lkKGdjKCkpOyIpLCAwKTsKK30KKworYm9vbCBT
Y3JpcHRDb250cm9sbGVyOjpoYXZlSW50ZXJwcmV0ZXIoKSBjb25zdAoreworICAgIHJldHVybiBt
X3Byb3h5LT5Db250ZXh0SW5pdGlhbGl6ZWQoKTsKK30KKworYm9vbCBTY3JpcHRDb250cm9sbGVy
Ojppc0VuYWJsZWQoKSBjb25zdAoreworICAgIHJldHVybiBtX3Byb3h5LT5pc0VuYWJsZWQoKTsK
K30KKworUGFzc1NjcmlwdEluc3RhbmNlIFNjcmlwdENvbnRyb2xsZXI6OmNyZWF0ZVNjcmlwdElu
c3RhbmNlRm9yV2lkZ2V0KFdpZGdldCogd2lkZ2V0KQoreworICAgIEFTU0VSVCh3aWRnZXQpOwor
CisgICAgaWYgKHdpZGdldC0+aXNGcmFtZVZpZXcoKSkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAg
ICBOUE9iamVjdCogbnBPYmplY3QgPSBDaHJvbWl1bUJyaWRnZTo6cGx1Z2luU2NyaXB0YWJsZU9i
amVjdCh3aWRnZXQpOworICAgIGlmICghbnBPYmplY3QpCisgICAgICAgIHJldHVybiAwOworCisg
ICAgLy8gRnJhbWUgTWVtb3J5IE1hbmFnZW1lbnQgZm9yIE5QT2JqZWN0cworICAgIC8vIC0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAvLyBOUE9iamVjdHMgYXJlIHRy
ZWF0ZWQgZGlmZmVyZW50bHkgdGhhbiBvdGhlciBvYmplY3RzIHdyYXBwZWQgYnkgSlMuCisgICAg
Ly8gTlBPYmplY3RzIGNhbiBiZSBjcmVhdGVkIGVpdGhlciBieSB0aGUgYnJvd3NlciAoZS5nLiB0
aGUgbWFpbgorICAgIC8vIHdpbmRvdyBvYmplY3QpIG9yIGJ5IHRoZSBwbHVnaW4gKHRoZSBtYWlu
IHBsdWdpbiBvYmplY3QKKyAgICAvLyBmb3IgYSBIVE1MRW1iZWRFbGVtZW50KS4gRnVydGhlciwg
dW5saWtlIG1vc3QgRE9NIE9iamVjdHMsIHRoZSBmcmFtZQorICAgIC8vIGlzIGVzcGVjaWFsbHkg
Y2FyZWZ1bCB0byBlbnN1cmUgTlBPYmplY3RzIHRlcm1pbmF0ZSBhdCBmcmFtZSB0ZWFyZG93biBi
ZWNhdXNlCisgICAgLy8gaWYgYSBwbHVnaW4gbGVha3MgYSByZWZlcmVuY2UsIGl0IGNvdWxkIGxl
YWsgaXRzIG9iamVjdHMgKG9yIHRoZSBicm93c2VyJ3Mgb2JqZWN0cykuCisgICAgLy8KKyAgICAv
LyBUaGUgRnJhbWUgbWFpbnRhaW5zIGEgbGlzdCBvZiBwbHVnaW4gb2JqZWN0cyAobV9wbHVnaW5P
YmplY3RzKQorICAgIC8vIHdoaWNoIGl0IGNhbiB1c2UgdG8gcXVpY2tseSBmaW5kIHRoZSB3cmFw
cGVkIGVtYmVkIG9iamVjdC4KKyAgICAvLworICAgIC8vIEluc2lkZSB0aGUgTlBSdW50aW1lLCB3
ZSd2ZSBhZGRlZCBhIGZldyBtZXRob2RzIGZvciByZWdpc3RlcmluZworICAgIC8vIHdyYXBwZWQg
TlBPYmplY3RzLiBUaGUgcHVycG9zZSBvZiB0aGUgcmVnaXN0cmF0aW9uIGlzIGJlY2F1c2UKKyAg
ICAvLyBqYXZhc2NyaXB0IGdhcmJhZ2UgY29sbGVjdGlvbiBpcyBub24tZGV0ZXJtaW5pc3RpYywg
eWV0IHdlIG5lZWQgdG8KKyAgICAvLyBiZSBhYmxlIHRvIHRlYXIgZG93biB0aGUgcGx1Z2luIG9i
amVjdHMgaW1tZWRpYXRlbHkuIFdoZW4gYW4gb2JqZWN0CisgICAgLy8gaXMgcmVnaXN0ZXJlZCwg
amF2YXNjcmlwdCBjYW4gdXNlIGl0LiBXaGVuIHRoZSBvYmplY3QgaXMgZGVzdHJveWVkLAorICAg
IC8vIG9yIHdoZW4gdGhlIG9iamVjdCdzICJvd25pbmciIG9iamVjdCBpcyBkZXN0cm95ZWQsIHRo
ZSBvYmplY3Qgd2lsbAorICAgIC8vIGJlIHVuLXJlZ2lzdGVyZWQsIGFuZCB0aGUgamF2YXNjcmlw
dCBlbmdpbmUgbXVzdCBub3QgdXNlIGl0LgorICAgIC8vCisgICAgLy8gSW5zaWRlIHRoZSBqYXZh
c2NyaXB0IGVuZ2luZSwgdGhlIGVuZ2luZSBjYW4ga2VlcCBhIHJlZmVyZW5jZSB0byB0aGUKKyAg
ICAvLyBOUE9iamVjdCBhcyBwYXJ0IG9mIGl0cyB3cmFwcGVyLiBIb3dldmVyLCBiZWZvcmUgYWNj
ZXNzaW5nIHRoZSBvYmplY3QKKyAgICAvLyBpdCBtdXN0IGNvbnN1bHQgdGhlIE5QTl9SZWdpc3Ry
eS4KKworICAgIHY4OjpMb2NhbDx2ODo6T2JqZWN0PiB3cmFwcGVyID0gQ3JlYXRlVjhPYmplY3RG
b3JOUE9iamVjdChucE9iamVjdCwgMCk7CisKKyAgICAvLyBUcmFjayB0aGUgcGx1Z2luIG9iamVj
dC4gV2UndmUgYmVlbiBnaXZlbiBhIHJlZmVyZW5jZSB0byB0aGUgb2JqZWN0LgorICAgIG1fcGx1
Z2luT2JqZWN0cy5zZXQod2lkZ2V0LCBucE9iamVjdCk7CisKKyAgICByZXR1cm4gVjhTY3JpcHRJ
bnN0YW5jZTo6Y3JlYXRlKHdyYXBwZXIpOworfQorCit2b2lkIFNjcmlwdENvbnRyb2xsZXI6OmNs
ZWFudXBTY3JpcHRPYmplY3RzRm9yUGx1Z2luKHZvaWQqIG5hdGl2ZUhhbmRsZSkKK3sKKyAgICBQ
bHVnaW5PYmplY3RNYXA6Oml0ZXJhdG9yIGl0ID0gbV9wbHVnaW5PYmplY3RzLmZpbmQobmF0aXZl
SGFuZGxlKTsKKyAgICBpZiAoaXQgPT0gbV9wbHVnaW5PYmplY3RzLmVuZCgpKQorICAgICAgICBy
ZXR1cm47CisgICAgX05QTl9VbnJlZ2lzdGVyT2JqZWN0KGl0LT5zZWNvbmQpOworICAgIE5QTl9S
ZWxlYXNlT2JqZWN0KGl0LT5zZWNvbmQpOworICAgIG1fcGx1Z2luT2JqZWN0cy5yZW1vdmUoaXQp
OworfQorCitzdGF0aWMgTlBPYmplY3QqIGNyZWF0ZU5vU2NyaXB0T2JqZWN0KCkKK3sKKyAgICBu
b3RJbXBsZW1lbnRlZCgpOworICAgIHJldHVybiAwOworfQorCitzdGF0aWMgTlBPYmplY3QqIGNy
ZWF0ZVNjcmlwdE9iamVjdChGcmFtZSogZnJhbWUpCit7CisgICAgdjg6OkhhbmRsZVNjb3BlIGhh
bmRsZVNjb3BlOworICAgIHY4OjpIYW5kbGU8djg6OkNvbnRleHQ+IGNvbnRleHQgPSBWOFByb3h5
OjpHZXRDb250ZXh0KGZyYW1lKTsKKyAgICBpZiAoY29udGV4dC5Jc0VtcHR5KCkpCisgICAgICAg
IHJldHVybiBjcmVhdGVOb1NjcmlwdE9iamVjdCgpOworCisgICAgdjg6OkNvbnRleHQ6OlNjb3Bl
IHNjb3BlKGNvbnRleHQpOworICAgIERPTVdpbmRvdyogd2luZG93ID0gZnJhbWUtPmRvbVdpbmRv
dygpOworICAgIHY4OjpIYW5kbGU8djg6OlZhbHVlPiBnbG9iYWwgPSBWOFByb3h5OjpUb1Y4T2Jq
ZWN0KFY4Q2xhc3NJbmRleDo6RE9NV0lORE9XLCB3aW5kb3cpOworICAgIEFTU0VSVChnbG9iYWwt
PklzT2JqZWN0KCkpOworICAgIHJldHVybiBucENyZWF0ZVY4U2NyaXB0T2JqZWN0KDAsIHY4OjpI
YW5kbGU8djg6Ok9iamVjdD46OkNhc3QoZ2xvYmFsKSwgd2luZG93KTsKK30KKworTlBPYmplY3Qq
IFNjcmlwdENvbnRyb2xsZXI6OndpbmRvd1NjcmlwdE5QT2JqZWN0KCkKK3sKKyAgICBpZiAobV93
aW5kb3dTY3JpcHROUE9iamVjdCkKKyAgICAgICAgcmV0dXJuIG1fd2luZG93U2NyaXB0TlBPYmpl
Y3Q7CisKKyAgICBpZiAoaXNFbmFibGVkKCkpIHsKKyAgICAgICAgLy8gSmF2YVNjcmlwdCBpcyBl
bmFibGVkLCBzbyB0aGVyZSBpcyBhIEphdmFTY3JpcHQgd2luZG93IG9iamVjdC4KKyAgICAgICAg
Ly8gUmV0dXJuIGFuIE5QT2JqZWN0IGJvdW5kIHRvIHRoZSB3aW5kb3cgb2JqZWN0LgorICAgICAg
ICBtX3dpbmRvd1NjcmlwdE5QT2JqZWN0ID0gY3JlYXRlU2NyaXB0T2JqZWN0KG1fZnJhbWUpOwor
ICAgICAgICBfTlBOX1JlZ2lzdGVyT2JqZWN0KG1fd2luZG93U2NyaXB0TlBPYmplY3QsIDApOwor
ICAgIH0gZWxzZSB7CisgICAgICAgIC8vIEphdmFTY3JpcHQgaXMgbm90IGVuYWJsZWQsIHNvIHdl
IGNhbm5vdCBiaW5kIHRoZSBOUE9iamVjdCB0byB0aGUKKyAgICAgICAgLy8gSmF2YVNjcmlwdCB3
aW5kb3cgb2JqZWN0LiBJbnN0ZWFkLCB3ZSBjcmVhdGUgYW4gTlBPYmplY3Qgb2YgYQorICAgICAg
ICAvLyBkaWZmZXJlbnQgY2xhc3MsIG9uZSB3aGljaCBpcyBub3QgYm91bmQgdG8gYSBKYXZhU2Ny
aXB0IG9iamVjdC4KKyAgICAgICAgbV93aW5kb3dTY3JpcHROUE9iamVjdCA9IGNyZWF0ZU5vU2Ny
aXB0T2JqZWN0KCk7CisgICAgfQorICAgIHJldHVybiBtX3dpbmRvd1NjcmlwdE5QT2JqZWN0Owor
fQorCitOUE9iamVjdCogU2NyaXB0Q29udHJvbGxlcjo6Y3JlYXRlU2NyaXB0T2JqZWN0Rm9yUGx1
Z2luRWxlbWVudChIVE1MUGx1Z0luRWxlbWVudCogcGx1Z2luKQoreworICAgIC8vIENhbid0IGNy
ZWF0ZSBOUE9iamVjdHMgd2hlbiBKYXZhU2NyaXB0IGlzIGRpc2FibGVkLgorICAgIGlmICghaXNF
bmFibGVkKCkpCisgICAgICAgIHJldHVybiBjcmVhdGVOb1NjcmlwdE9iamVjdCgpOworCisgICAg
djg6OkhhbmRsZVNjb3BlIGhhbmRsZVNjb3BlOworICAgIHY4OjpIYW5kbGU8djg6OkNvbnRleHQ+
IGNvbnRleHQgPSBWOFByb3h5OjpHZXRDb250ZXh0KG1fZnJhbWUpOworICAgIGlmIChjb250ZXh0
LklzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJuIGNyZWF0ZU5vU2NyaXB0T2JqZWN0KCk7CisgICAg
djg6OkNvbnRleHQ6OlNjb3BlIHNjb3BlKGNvbnRleHQpOworCisgICAgRE9NV2luZG93KiB3aW5k
b3cgPSBtX2ZyYW1lLT5kb21XaW5kb3coKTsKKyAgICB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gdjhw
bHVnaW4gPSBWOFByb3h5OjpUb1Y4T2JqZWN0KFY4Q2xhc3NJbmRleDo6SFRNTEVNQkVERUxFTUVO
VCwgcGx1Z2luKTsKKyAgICBpZiAoIXY4cGx1Z2luLT5Jc09iamVjdCgpKQorICAgICAgICByZXR1
cm4gY3JlYXRlTm9TY3JpcHRPYmplY3QoKTsKKworICAgIHJldHVybiBucENyZWF0ZVY4U2NyaXB0
T2JqZWN0KDAsIHY4OjpIYW5kbGU8djg6Ok9iamVjdD46OkNhc3QodjhwbHVnaW4pLCB3aW5kb3cp
OworfQorCisKK3ZvaWQgU2NyaXB0Q29udHJvbGxlcjo6Y2xlYXJXaW5kb3dTaGVsbCgpCit7Cisg
ICAgLy8gVjggYmluZGluZyBleHBlY3RzIFNjcmlwdENvbnRyb2xsZXI6OmNsZWFyV2luZG93U2hl
bGwgb25seSBiZSBjYWxsZWQKKyAgICAvLyB3aGVuIGEgZnJhbWUgaXMgbG9hZGluZyBhIG5ldyBw
YWdlLiBWOFByb3h5OjpjbGVhckZvck5hdmlnYXRpb24KKyAgICAvLyBjcmVhdGVzIGEgbmV3IGNv
bnRleHQgZm9yIHRoZSBuZXcgcGFnZS4KKyAgICBtX3Byb3h5LT5jbGVhckZvck5hdmlnYXRpb24o
KTsKK30KKwordm9pZCBTY3JpcHRDb250cm9sbGVyOjphdHRhY2hEZWJ1Z2dlcih2b2lkKikKK3sK
KyAgICBub3RJbXBsZW1lbnRlZCgpOworfQorCit2b2lkIFNjcmlwdENvbnRyb2xsZXI6OnVwZGF0
ZURvY3VtZW50KCkKK3sKKyAgICBtX3Byb3h5LT51cGRhdGVEb2N1bWVudCgpOworfQorCit9IC8v
IG5hbWVzcGFjZSBXZWJDb3JlCg==
</data>
<flag name="review"
          id="15364"
          type_id="1"
          status="+"
          setter="fishd"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>30481</attachid>
            <date>2009-05-19 12:02:53 -0700</date>
            <delta_ts>2009-05-19 12:05:08 -0700</delta_ts>
            <desc>Proposed fix.</desc>
            <filename>bug25859.txt</filename>
            <type>text/plain</type>
            <size>17090</size>
            <attacher name="David Levin">levin</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYkNvcmUvQ2hhbmdlTG9nIGIvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXgg
MmNkYTljYy4uODVkZTJiYSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvV2Vi
Q29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxNCBAQAorMjAwOS0wNS0xOSAgRGF2aWQgTGV2aW4g
IDxsZXZpbkBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BT
ISkuCisKKyAgICAgICAgQnVnIDI1ODU5OiBOZWVkIHRvIHVwc3RyZWFtIFNjcmlwdENvbnRyb2xs
ZXIuKiBmb3IgdjguCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD0yNTg1OQorCisgICAgICAgIEZpeGluZyB0aGUgaGVhZGVyIGZpbGUgKHdoaWNoIEkgYWNj
aWRlbnRhbGx5IG1hZGUgaWRlbnRpY2FsIHRvIHRoZSBjcHAgZmlsZSkuCisKKyAgICAgICAgKiBi
aW5kaW5ncy92OC9TY3JpcHRDb250cm9sbGVyLmg6CisKIDIwMDktMDUtMTkgIEFsZXhleSBQcm9z
a3VyeWFrb3YgIDxhcEB3ZWJraXQub3JnPgogCiAgICAgICAgIFJldmlld2VkIGJ5IERhcmluIEFk
bGVyIGFuZCBCcmFkeSBFaWRzb24uCmRpZmYgLS1naXQgYS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1Nj
cmlwdENvbnRyb2xsZXIuaCBiL1dlYkNvcmUvYmluZGluZ3MvdjgvU2NyaXB0Q29udHJvbGxlci5o
CmluZGV4IGM3MTljYzEuLmU4NDczMWQgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvYmluZGluZ3Mvdjgv
U2NyaXB0Q29udHJvbGxlci5oCisrKyBiL1dlYkNvcmUvYmluZGluZ3MvdjgvU2NyaXB0Q29udHJv
bGxlci5oCkBAIC0yOCwzNjEgKzI4LDE0MiBAQAogICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KICAqLwogCi0jaW5j
bHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiU2NyaXB0Q29udHJvbGxlci5oIgotCi0jaW5jbHVk
ZSAiQ2hyb21pdW1CcmlkZ2UuaCIKLSNpbmNsdWRlICJDU3RyaW5nLmgiCi0jaW5jbHVkZSAiRG9j
dW1lbnQuaCIKLSNpbmNsdWRlICJET01XaW5kb3cuaCIKLSNpbmNsdWRlICJFdmVudC5oIgotI2lu
Y2x1ZGUgIkV2ZW50TGlzdGVuZXIuaCIKLSNpbmNsdWRlICJFdmVudE5hbWVzLmgiCi0jaW5jbHVk
ZSAiRnJhbWUuaCIKLSNpbmNsdWRlICJOb2RlLmgiCi0jaW5jbHVkZSAiTm90SW1wbGVtZW50ZWQu
aCIKLSNpbmNsdWRlICJucHJ1bnRpbWVfcHJpdi5oIgotI2luY2x1ZGUgIk5QVjhPYmplY3QuaCIK
LSNpbmNsdWRlICJTY3JpcHRTb3VyY2VDb2RlLmgiCi0jaW5jbHVkZSAiU2NyaXB0U3RhdGUuaCIK
LSNpbmNsdWRlICJXaWRnZXQuaCIKLQotI2luY2x1ZGUgIlY4QmluZGluZy5oIgotI2luY2x1ZGUg
IlY4TlBPYmplY3QuaCIKKyNpZm5kZWYgU2NyaXB0Q29udHJvbGxlcl9oCisjZGVmaW5lIFNjcmlw
dENvbnRyb2xsZXJfaAorCisjaW5jbHVkZSAiU2NyaXB0SW5zdGFuY2UuaCIKKyNpbmNsdWRlICJT
Y3JpcHRWYWx1ZS5oIgorCiAjaW5jbHVkZSAiVjhQcm94eS5oIgogCisjaW5jbHVkZSA8djguaD4K
KworI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+CisjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgorCiBu
YW1lc3BhY2UgV2ViQ29yZSB7CisgICAgY2xhc3MgRXZlbnQ7CisgICAgY2xhc3MgRnJhbWU7Cisg
ICAgY2xhc3MgSFRNTFBsdWdJbkVsZW1lbnQ7CisgICAgY2xhc3MgU2NyaXB0U291cmNlQ29kZTsK
KyAgICBjbGFzcyBTY3JpcHRTdGF0ZTsKKyAgICBjbGFzcyBTdHJpbmc7CisgICAgY2xhc3MgV2lk
Z2V0OworCisgICAgY2xhc3MgU2NyaXB0Q29udHJvbGxlciB7CisgICAgcHVibGljOgorICAgICAg
ICBTY3JpcHRDb250cm9sbGVyKEZyYW1lKik7CisgICAgICAgIH5TY3JpcHRDb250cm9sbGVyKCk7
CisKKyAgICAgICAgLy8gRklYTUU6IFY4UHJveHkgc2hvdWxkIGVpdGhlciBiZSBmb2xkZWQgaW50
byBTY3JpcHRDb250cm9sbGVyCisgICAgICAgIC8vIG9yIHRoaXMgYWNjZXNzb3Igc2hvdWxkIGJl
IG1hZGUgSlNQcm94eSoKKyAgICAgICAgVjhQcm94eSogcHJveHkoKSB7IHJldHVybiBtX3Byb3h5
LmdldCgpOyB9CisKKyAgICAgICAgLy8gRXZhbHVhdGUgYSBzY3JpcHQgZmlsZSBpbiB0aGUgZW52
aXJvbm1lbnQgb2YgdGhpcyBwcm94eS4KKyAgICAgICAgLy8gSWYgc3VjY2VlZGVkLCAnc3VjYycg
aXMgc2V0IHRvIHRydWUgYW5kIHJlc3VsdCBpcyByZXR1cm5lZAorICAgICAgICAvLyBhcyBhIHN0
cmluZy4KKyAgICAgICAgU2NyaXB0VmFsdWUgZXZhbHVhdGUoY29uc3QgU2NyaXB0U291cmNlQ29k
ZSYpOworCisgICAgICAgIC8vIEV4ZWN1dGVzIEphdmFTY3JpcHQgaW4gYSBuZXcgY29udGV4dCBh
c3NvY2lhdGVkIHdpdGggdGhlIHdlYiBmcmFtZS4gVGhlCisgICAgICAgIC8vIHNjcmlwdCBnZXRz
IGl0cyBvd24gZ2xvYmFsIHNjb3BlIGFuZCBpdHMgb3duIHByb3RvdHlwZXMgZm9yIGludHJpbnNp
YworICAgICAgICAvLyBKYXZhU2NyaXB0IG9iamVjdHMgKFN0cmluZywgQXJyYXksIGFuZCBzby1v
bikuIEl0IHNoYXJlcyB0aGUgd3JhcHBlcnMgZm9yCisgICAgICAgIC8vIGFsbCBET00gbm9kZXMg
YW5kIERPTSBjb25zdHJ1Y3RvcnMuCisgICAgICAgIHZvaWQgZXZhbHVhdGVJbk5ld0NvbnRleHQo
Y29uc3QgVmVjdG9yPFNjcmlwdFNvdXJjZUNvZGU+Jik7CisKKyAgICAgICAgLy8gSlNDIGhhcyBh
IFdpbmRvd1NoZWxsIG9iamVjdCwgYnV0IGZvciBWOCwgdGhlIFNjcmlwdENvbnRyb2xsZXIKKyAg
ICAgICAgLy8gaXMgdGhlIFdpbmRvd1NoZWxsLgorICAgICAgICBib29sIGhhdmVXaW5kb3dTaGVs
bCgpIGNvbnN0IHsgcmV0dXJuIHRydWU7IH0KKworICAgICAgICAvLyBNYXNxdWVyYWRlICd0aGlz
JyBhcyB0aGUgd2luZG93U2hlbGwuCisgICAgICAgIC8vIFRoaXMgaXMgYSBiaXQgb2YgYSBoYWNr
LCBidXQgcHJvdmlkZXMgcmVhc29uYWJsZSBjb21wYXRpYmlsaXR5CisgICAgICAgIC8vIHdpdGgg
d2hhdCBKU0MgZG9lcyBhcyB3ZWxsLgorICAgICAgICBTY3JpcHRDb250cm9sbGVyKiB3aW5kb3dT
aGVsbCgpIHsgcmV0dXJuIHRoaXM7IH0KKworICAgICAgICBTY3JpcHRTdGF0ZSogc3RhdGUoKSBj
b25zdCB7IHJldHVybiBtX3NjcmlwdFN0YXRlLmdldCgpOyB9CisKKyAgICAgICAgdm9pZCBjb2xs
ZWN0R2FyYmFnZSgpOworCisgICAgICAgIC8vIENyZWF0ZXMgYSBwcm9wZXJ0eSBvZiB0aGUgZ2xv
YmFsIG9iamVjdCBvZiBhIGZyYW1lLgorICAgICAgICB2b2lkIGJpbmRUb1dpbmRvd09iamVjdChG
cmFtZSosIGNvbnN0IFN0cmluZyYga2V5LCBOUE9iamVjdCopOworCisgICAgICAgIFBhc3NTY3Jp
cHRJbnN0YW5jZSBjcmVhdGVTY3JpcHRJbnN0YW5jZUZvcldpZGdldChXaWRnZXQqKTsKKworICAg
ICAgICB2b2lkIGRpc2Nvbm5lY3RGcmFtZSgpOworCisgICAgICAgIC8vIENoZWNrIGlmIHRoZSBq
YXZhc2NyaXB0IGVuZ2luZSBoYXMgYmVlbiBpbml0aWFsaXplZC4KKyAgICAgICAgYm9vbCBoYXZl
SW50ZXJwcmV0ZXIoKSBjb25zdDsKKworICAgICAgICBib29sIGlzRW5hYmxlZCgpIGNvbnN0Owor
CisgICAgICAgIC8vIEZJWE1FOiB2b2lkKiBpcyBhIGNvbXBpbGUgaGFjay4KKyAgICAgICAgdm9p
ZCBhdHRhY2hEZWJ1Z2dlcih2b2lkKik7CisKKyAgICAgICAgLy8gLS0tIFN0YXRpYyBtZXRob2Rz
IGFzc3VtZSB3ZSBhcmUgcnVubmluZyBWTSBpbiBzaW5nbGUgdGhyZWFkLCAtLS0KKyAgICAgICAg
Ly8gLS0tIGFuZCB0aGVyZSBpcyBvbmx5IG9uZSBWTSBpbnN0YW5jZS4gICAgICAgICAgICAgICAg
ICAgICAgICAtLS0KKworICAgICAgICAvLyBSZXR1cm5zIHRoZSBmcmFtZSBmb3IgdGhlIGVudGVy
ZWQgY29udGV4dC4gU2VlIGNvbW1lbnRzIGluCisgICAgICAgIC8vIFY4UHJveHk6OnJldHJpZXZl
RnJhbWVGb3JFbnRlcmVkQ29udGV4dCgpIGZvciBtb3JlIGluZm9ybWF0aW9uLgorICAgICAgICBz
dGF0aWMgRnJhbWUqIHJldHJpZXZlRnJhbWVGb3JFbnRlcmVkQ29udGV4dCgpOworCisgICAgICAg
IC8vIFJldHVybnMgdGhlIGZyYW1lIGZvciB0aGUgY3VycmVudCBjb250ZXh0LiBTZWUgY29tbWVu
dHMgaW4KKyAgICAgICAgLy8gVjhQcm94eTo6cmV0cmlldmVGcmFtZUZvckVudGVyZWRDb250ZXh0
KCkgZm9yIG1vcmUgaW5mb3JtYXRpb24uCisgICAgICAgIHN0YXRpYyBGcmFtZSogcmV0cmlldmVG
cmFtZUZvckN1cnJlbnRDb250ZXh0KCk7CisKKyAgICAgICAgLy8gQ2hlY2sgd2hldGhlciBpdCBp
cyBzYWZlIHRvIGFjY2VzcyBhIGZyYW1lIGluIGFub3RoZXIgZG9tYWluLgorICAgICAgICBzdGF0
aWMgYm9vbCBpc1NhZmVTY3JpcHQoRnJhbWUqKTsKKworICAgICAgICAvLyBQYXNzIGNvbW1hbmQt
bGluZSBmbGFncyB0byB0aGUgSlMgZW5naW5lLgorICAgICAgICBzdGF0aWMgdm9pZCBzZXRGbGFn
cyhjb25zdCBjaGFyKiBzdHJpbmcsIGludCBsZW5ndGgpOworCisgICAgICAgIC8vIFByb3RlY3Qg
YW5kIHVucHJvdGVjdCB0aGUgSlMgd3JhcHBlciBmcm9tIGdhcmJhZ2UgY29sbGVjdGVkLgorICAg
ICAgICBzdGF0aWMgdm9pZCBnY1Byb3RlY3RKU1dyYXBwZXIodm9pZCopOworICAgICAgICBzdGF0
aWMgdm9pZCBnY1VucHJvdGVjdEpTV3JhcHBlcih2b2lkKik7CisKKyAgICAgICAgdm9pZCBmaW5p
c2hlZFdpdGhFdmVudChFdmVudCopOworICAgICAgICB2b2lkIHNldEV2ZW50SGFuZGxlckxpbmVO
dW1iZXIoaW50IGxpbmVOdW1iZXIpOworCisgICAgICAgIHZvaWQgc2V0UHJvY2Vzc2luZ1RpbWVy
Q2FsbGJhY2soYm9vbCBwcm9jZXNzaW5nVGltZXJDYWxsYmFjaykgeyBtX3Byb2Nlc3NpbmdUaW1l
ckNhbGxiYWNrID0gcHJvY2Vzc2luZ1RpbWVyQ2FsbGJhY2s7IH0KKyAgICAgICAgYm9vbCBwcm9j
ZXNzaW5nVXNlckdlc3R1cmUoKSBjb25zdDsKKworICAgICAgICB2b2lkIHNldFBhdXNlZChib29s
IHBhdXNlZCkgeyBtX3BhdXNlZCA9IHBhdXNlZDsgfQorICAgICAgICBib29sIGlzUGF1c2VkKCkg
Y29uc3QgeyByZXR1cm4gbV9wYXVzZWQ7IH0KKworICAgICAgICBjb25zdCBTdHJpbmcqIHNvdXJj
ZVVSTCgpIGNvbnN0IHsgcmV0dXJuIG1fc291cmNlVVJMOyB9IC8vIDAgaWYgd2UgYXJlIG5vdCBl
dmFsdWF0aW5nIGFueSBzY3JpcHQuCisKKyAgICAgICAgdm9pZCBjbGVhcldpbmRvd1NoZWxsKCk7
CisgICAgICAgIHZvaWQgdXBkYXRlRG9jdW1lbnQoKTsKKworICAgICAgICB2b2lkIHVwZGF0ZVNl
Y3VyaXR5T3JpZ2luKCk7CisgICAgICAgIHZvaWQgY2xlYXJTY3JpcHRPYmplY3RzKCk7CisgICAg
ICAgIHZvaWQgdXBkYXRlUGxhdGZvcm1TY3JpcHRPYmplY3RzKCk7CisgICAgICAgIHZvaWQgY2xl
YW51cFNjcmlwdE9iamVjdHNGb3JQbHVnaW4odm9pZCopOwogCi12b2lkIFNjcmlwdENvbnRyb2xs
ZXI6OnNldEZsYWdzKGNvbnN0IGNoYXIqIHN0cmluZywgaW50IGxlbmd0aCkKLXsKLSAgICB2ODo6
Vjg6OlNldEZsYWdzRnJvbVN0cmluZyhzdHJpbmcsIGxlbmd0aCk7Ci19Ci0KLUZyYW1lKiBTY3Jp
cHRDb250cm9sbGVyOjpyZXRyaWV2ZUZyYW1lRm9yRW50ZXJlZENvbnRleHQoKQotewotICAgIHJl
dHVybiBWOFByb3h5OjpyZXRyaWV2ZUZyYW1lRm9yRW50ZXJlZENvbnRleHQoKTsKLX0KLQotRnJh
bWUqIFNjcmlwdENvbnRyb2xsZXI6OnJldHJpZXZlRnJhbWVGb3JDdXJyZW50Q29udGV4dCgpCi17
Ci0gICAgcmV0dXJuIFY4UHJveHk6OnJldHJpZXZlRnJhbWVGb3JDdXJyZW50Q29udGV4dCgpOwot
fQotCi1ib29sIFNjcmlwdENvbnRyb2xsZXI6OmlzU2FmZVNjcmlwdChGcmFtZSogdGFyZ2V0KQot
ewotICAgIHJldHVybiBWOFByb3h5OjpDYW5BY2Nlc3NGcmFtZSh0YXJnZXQsIHRydWUpOwotfQot
Ci12b2lkIFNjcmlwdENvbnRyb2xsZXI6OmdjUHJvdGVjdEpTV3JhcHBlcih2b2lkKiBkb21PYmpl
Y3QpCi17Ci0gICAgVjhQcm94eTo6R0NQcm90ZWN0KGRvbU9iamVjdCk7Ci19Ci0KLXZvaWQgU2Ny
aXB0Q29udHJvbGxlcjo6Z2NVbnByb3RlY3RKU1dyYXBwZXIodm9pZCogZG9tT2JqZWN0KQotewot
ICAgIFY4UHJveHk6OkdDVW5wcm90ZWN0KGRvbU9iamVjdCk7Ci19Ci0KLVNjcmlwdENvbnRyb2xs
ZXI6OlNjcmlwdENvbnRyb2xsZXIoRnJhbWUqIGZyYW1lKQotICAgIDogbV9mcmFtZShmcmFtZSkK
LSAgICAsIG1fc291cmNlVVJMKDApCi0gICAgLCBtX3Byb2Nlc3NpbmdUaW1lckNhbGxiYWNrKGZh
bHNlKQotICAgICwgbV9wYXVzZWQoZmFsc2UpCi0gICAgLCBtX3NjcmlwdFN0YXRlKG5ldyBTY3Jp
cHRTdGF0ZShmcmFtZSkpCi0gICAgLCBtX3Byb3h5KG5ldyBWOFByb3h5KGZyYW1lKSkKICNpZiBF
TkFCTEUoTkVUU0NBUEVfUExVR0lOX0FQSSkKLSAgICAsIG1fd2luZG93U2NyaXB0TlBPYmplY3Qo
MCkKKyAgICAgICAgTlBPYmplY3QqIGNyZWF0ZVNjcmlwdE9iamVjdEZvclBsdWdpbkVsZW1lbnQo
SFRNTFBsdWdJbkVsZW1lbnQqKTsKKyAgICAgICAgTlBPYmplY3QqIHdpbmRvd1NjcmlwdE5QT2Jq
ZWN0KCk7CiAjZW5kaWYKLXsKLX0KLQotU2NyaXB0Q29udHJvbGxlcjo6flNjcmlwdENvbnRyb2xs
ZXIoKQotewotfQotCi12b2lkIFNjcmlwdENvbnRyb2xsZXI6OmNsZWFyU2NyaXB0T2JqZWN0cygp
Ci17Ci0gICAgUGx1Z2luT2JqZWN0TWFwOjppdGVyYXRvciBpdCA9IG1fcGx1Z2luT2JqZWN0cy5i
ZWdpbigpOwotICAgIGZvciAoOyBpdCAhPSBtX3BsdWdpbk9iamVjdHMuZW5kKCk7ICsraXQpIHsK
LSAgICAgICAgX05QTl9VbnJlZ2lzdGVyT2JqZWN0KGl0LT5zZWNvbmQpOwotICAgICAgICBOUE5f
UmVsZWFzZU9iamVjdChpdC0+c2Vjb25kKTsKLSAgICB9Ci0gICAgbV9wbHVnaW5PYmplY3RzLmNs
ZWFyKCk7CiAKKyAgICBwcml2YXRlOgorICAgICAgICBGcmFtZSogbV9mcmFtZTsKKyAgICAgICAg
Y29uc3QgU3RyaW5nKiBtX3NvdXJjZVVSTDsKKworICAgICAgICBib29sIG1fcHJvY2Vzc2luZ1Rp
bWVyQ2FsbGJhY2s7CisgICAgICAgIGJvb2wgbV9wYXVzZWQ7CisKKyAgICAgICAgT3duUHRyPFNj
cmlwdFN0YXRlPiBtX3NjcmlwdFN0YXRlOworICAgICAgICBPd25QdHI8VjhQcm94eT4gbV9wcm94
eTsKKyAgICAgICAgdHlwZWRlZiBIYXNoTWFwPHZvaWQqLCBOUE9iamVjdCo+IFBsdWdpbk9iamVj
dE1hcDsKKworICAgICAgICAvLyBBIG1hcHBpbmcgYmV0d2VlbiBXaWRnZXRzIGFuZCB0aGVpciBj
b3JyZXNwb25kaW5nIHNjcmlwdCBvYmplY3QuCisgICAgICAgIC8vIFRoaXMgbGlzdCBpcyB1c2Vk
IHNvIHRoYXQgd2hlbiB0aGUgcGx1Z2luIGRpZXMsIHdlIGNhbiBpbW1lZGlhdGVseQorICAgICAg
ICAvLyBpbnZhbGlkYXRlIGFsbCBzdWItb2JqZWN0cyB3aGljaCBhcmUgYXNzb2NpYXRlZCB3aXRo
IHRoYXQgcGx1Z2luLgorICAgICAgICAvLyBUaGUgZnJhbWUga2VlcHMgYSBOUE9iamVjdCByZWZl
cmVuY2UgZm9yIGVhY2ggaXRlbSBvbiB0aGUgbGlzdC4KKyAgICAgICAgUGx1Z2luT2JqZWN0TWFw
IG1fcGx1Z2luT2JqZWN0czsKICNpZiBFTkFCTEUoTkVUU0NBUEVfUExVR0lOX0FQSSkKLSAgICBp
ZiAobV93aW5kb3dTY3JpcHROUE9iamVjdCkgewotICAgICAgICAvLyBDYWxsIF9OUE5fRGVhbGxv
Y2F0ZU9iamVjdCgpIGluc3RlYWQgb2YgX05QTl9SZWxlYXNlT2JqZWN0KCkgc28gdGhhdCB3ZSBk
b24ndCBsZWFrIGlmIGEgcGx1Z2luIGZhaWxzIHRvIHJlbGVhc2UgdGhlIHdpbmRvdwotICAgICAg
ICAvLyBzY3JpcHQgb2JqZWN0IHByb3Blcmx5LgotICAgICAgICAvLyBUaGlzIHNob3VsZG4ndCBj
YXVzZSBhbnkgcHJvYmxlbXMgZm9yIHBsdWdpbnMgc2luY2UgdGhleSBzaG91bGQgaGF2ZSBhbHJl
YWR5IGJlZW4gc3RvcHBlZCBhbmQgZGVzdHJveWVkIGF0IHRoaXMgcG9pbnQuCi0gICAgICAgIF9O
UE5fRGVhbGxvY2F0ZU9iamVjdChtX3dpbmRvd1NjcmlwdE5QT2JqZWN0KTsKLSAgICAgICAgbV93
aW5kb3dTY3JpcHROUE9iamVjdCA9IDA7Ci0gICAgfQorICAgICAgICBOUE9iamVjdCogbV93aW5k
b3dTY3JpcHROUE9iamVjdDsKICNlbmRpZgotfQotCi12b2lkIFNjcmlwdENvbnRyb2xsZXI6OnVw
ZGF0ZVNlY3VyaXR5T3JpZ2luKCkKLXsKLSAgICBtX3Byb3h5LT51cGRhdGVTZWN1cml0eU9yaWdp
bigpOwotfQotCi12b2lkIFNjcmlwdENvbnRyb2xsZXI6OnVwZGF0ZVBsYXRmb3JtU2NyaXB0T2Jq
ZWN0cygpCi17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLX0KLQotLy8gRGlzY29ubmVjdCB0aGUg
cHJveHkgZnJvbSBpdHMgb3duZXIgZnJhbWUuCi12b2lkIFNjcmlwdENvbnRyb2xsZXI6OmRpc2Nv
bm5lY3RGcmFtZSgpCi17Ci0gICAgbV9wcm94eS0+ZGlzY29ubmVjdEZyYW1lKCk7Ci19Ci0KLWJv
b2wgU2NyaXB0Q29udHJvbGxlcjo6cHJvY2Vzc2luZ1VzZXJHZXN0dXJlKCkgY29uc3QKLXsKLSAg
ICBGcmFtZSogYWN0aXZlRnJhbWUgPSBWOFByb3h5OjpyZXRyaWV2ZUZyYW1lRm9yRW50ZXJlZENv
bnRleHQoKTsKLSAgICAvLyBObyBzY3JpcHQgaXMgcnVubmluZywgc28gaXQgbXVzdCBiZSBydW4g
YnkgdXNlcnMuCi0gICAgaWYgKCFhY3RpdmVGcmFtZSkKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0K
LSAgICBWOFByb3h5KiBhY3RpdmVQcm94eSA9IGFjdGl2ZUZyYW1lLT5zY3JpcHQoKS0+cHJveHko
KTsKLQotICAgIHY4OjpIYW5kbGVTY29wZSBoYW5kbGVTY29wZTsKLSAgICB2ODo6SGFuZGxlPHY4
OjpDb250ZXh0PiBjb250ZXh0ID0gVjhQcm94eTo6R2V0Q29udGV4dChhY3RpdmVGcmFtZSk7Ci0g
ICAgLy8gRklYTUU6IGZpbmQgYWxsIGNhc2VzIGNvbnRleHQgY2FuIGJlIGVtcHR5OgotICAgIC8v
ICAxKSBKUyBpcyBkaXNhYmxlZDsKLSAgICAvLyAgMikgcGFnZSBpcyBOVUxMOwotICAgIGlmIChj
b250ZXh0LklzRW1wdHkoKSkKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0KLSAgICB2ODo6Q29udGV4
dDo6U2NvcGUgc2NvcGUoY29udGV4dCk7Ci0KLSAgICB2ODo6SGFuZGxlPHY4OjpPYmplY3Q+IGds
b2JhbCA9IGNvbnRleHQtPkdsb2JhbCgpOwotICAgIHY4OjpIYW5kbGU8djg6OlZhbHVlPiBqc0V2
ZW50ID0gZ2xvYmFsLT5HZXQodjg6OlN0cmluZzo6TmV3U3ltYm9sKCJldmVudCIpKTsKLSAgICBF
dmVudCogZXZlbnQgPSBWOFByb3h5OjpUb05hdGl2ZUV2ZW50KGpzRXZlbnQpOwotCi0gICAgLy8g
QmFzZWQgb24gY29kZSBmcm9tIGtqc19iaW5kaW5ncy5jcHAuCi0gICAgLy8gTm90ZTogVGhpcyBp
cyBtb3JlIGxpYmVyYWwgdGhhbiBGaXJlZm94J3MgaW1wbGVtZW50YXRpb24uCi0gICAgaWYgKGV2
ZW50KSB7Ci0gICAgICAgIGNvbnN0IEF0b21pY1N0cmluZyYgdHlwZSA9IGV2ZW50LT50eXBlKCk7
Ci0gICAgICAgIGJvb2wgZXZlbnRPayA9Ci0gICAgICAgICAgICAvLyBtb3VzZSBldmVudHMKLSAg
ICAgICAgICAgIHR5cGUgPT0gZXZlbnROYW1lcygpLmNsaWNrRXZlbnQgfHwgdHlwZSA9PSBldmVu
dE5hbWVzKCkubW91c2Vkb3duRXZlbnQgfHwgdHlwZSA9PSBldmVudE5hbWVzKCkubW91c2V1cEV2
ZW50IHx8IHR5cGUgPT0gZXZlbnROYW1lcygpLmRibGNsaWNrRXZlbnQKLSAgICAgICAgICAgIC8v
IGtleWJvYXJkIGV2ZW50cwotICAgICAgICAgICAgfHwgdHlwZSA9PSBldmVudE5hbWVzKCkua2V5
ZG93bkV2ZW50IHx8IHR5cGUgPT0gZXZlbnROYW1lcygpLmtleXByZXNzRXZlbnQgfHwgdHlwZSA9
PSBldmVudE5hbWVzKCkua2V5dXBFdmVudAotICAgICAgICAgICAgLy8gb3RoZXIgYWNjZXB0ZWQg
ZXZlbnRzCi0gICAgICAgICAgICB8fCB0eXBlID09IGV2ZW50TmFtZXMoKS5zZWxlY3RFdmVudCB8
fCB0eXBlID09IGV2ZW50TmFtZXMoKS5jaGFuZ2VFdmVudCB8fCB0eXBlID09IGV2ZW50TmFtZXMo
KS5mb2N1c0V2ZW50IHx8IHR5cGUgPT0gZXZlbnROYW1lcygpLmJsdXJFdmVudCB8fCB0eXBlID09
IGV2ZW50TmFtZXMoKS5zdWJtaXRFdmVudDsKLQotICAgICAgICBpZiAoZXZlbnRPaykKLSAgICAg
ICAgICAgIHJldHVybiB0cnVlOwotICAgIH0gZWxzZSBpZiAoYWN0aXZlUHJveHktPmlubGluZUNv
ZGUoKSAmJiAhYWN0aXZlUHJveHktPnRpbWVyQ2FsbGJhY2soKSkgewotICAgICAgICAvLyBUaGlz
IGlzIHRoZSA8YSBocmVmPSJqYXZhc2NyaXB0OndpbmRvdy5vcGVuKCcuLi4nKT4gY2FzZSAtPiB3
ZSBsZXQgaXQgdGhyb3VnaC4KLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotCi0gICAgLy8g
VGhpcyBpcyB0aGUgPHNjcmlwdD53aW5kb3cub3BlbiguLi4pPC9zY3JpcHQ+IGNhc2Ugb3IgYSB0
aW1lciBjYWxsYmFjayAtPiBibG9jayBpdC4KLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLXZvaWQg
U2NyaXB0Q29udHJvbGxlcjo6ZXZhbHVhdGVJbk5ld0NvbnRleHQoY29uc3QgVmVjdG9yPFNjcmlw
dFNvdXJjZUNvZGU+JiBzb3VyY2VzKQotewotICAgIG1fcHJveHktPmV2YWx1YXRlSW5OZXdDb250
ZXh0KHNvdXJjZXMpOwotfQotCi0vLyBFdmFsdWF0ZSBhIHNjcmlwdCBmaWxlIGluIHRoZSBlbnZp
cm9ubWVudCBvZiB0aGlzIHByb3h5LgotU2NyaXB0VmFsdWUgU2NyaXB0Q29udHJvbGxlcjo6ZXZh
bHVhdGUoY29uc3QgU2NyaXB0U291cmNlQ29kZSYgc291cmNlQ29kZSkKLXsKLSAgICB2ODo6SGFu
ZGxlU2NvcGUgaGFuZGxlU2NvcGU7Ci0gICAgdjg6OkhhbmRsZTx2ODo6Q29udGV4dD4gY29udGV4
dCA9IFY4UHJveHk6OkdldENvbnRleHQobV9wcm94eS0+ZnJhbWUoKSk7Ci0gICAgaWYgKGNvbnRl
eHQuSXNFbXB0eSgpKQotICAgICAgICByZXR1cm4gU2NyaXB0VmFsdWUoKTsKLQotICAgIHY4OjpD
b250ZXh0OjpTY29wZSBzY29wZShjb250ZXh0KTsKLSAgICB2ODo6TG9jYWw8djg6OlZhbHVlPiBv
YmplY3QgPSBtX3Byb3h5LT5ldmFsdWF0ZShzb3VyY2VDb2RlLCAwKTsKLQotICAgIGlmIChvYmpl
Y3QuSXNFbXB0eSgpIHx8IG9iamVjdC0+SXNVbmRlZmluZWQoKSkKLSAgICAgICAgcmV0dXJuIFNj
cmlwdFZhbHVlKCk7Ci0KLSAgICByZXR1cm4gU2NyaXB0VmFsdWUob2JqZWN0KTsKLX0KLQotdm9p
ZCBTY3JpcHRDb250cm9sbGVyOjpzZXRFdmVudEhhbmRsZXJMaW5lTnVtYmVyKGludCBsaW5lTnVt
YmVyKQotewotICAgIG1fcHJveHktPnNldEV2ZW50SGFuZGxlckxpbmVubyhsaW5lTnVtYmVyKTsK
LX0KLQotdm9pZCBTY3JpcHRDb250cm9sbGVyOjpmaW5pc2hlZFdpdGhFdmVudChFdmVudCogZXZl
bnQpCi17Ci0gICAgbV9wcm94eS0+ZmluaXNoZWRXaXRoRXZlbnQoZXZlbnQpOwotfQotCi0vLyBD
cmVhdGUgYSBWOCBvYmplY3Qgd2l0aCBhbiBpbnRlcmNlcHRvciBvZiBOUE9iamVjdFByb3BlcnR5
R2V0dGVyLgotdm9pZCBTY3JpcHRDb250cm9sbGVyOjpiaW5kVG9XaW5kb3dPYmplY3QoRnJhbWUq
IGZyYW1lLCBjb25zdCBTdHJpbmcmIGtleSwgTlBPYmplY3QqIG9iamVjdCkKLXsKLSAgICB2ODo6
SGFuZGxlU2NvcGUgaGFuZGxlU2NvcGU7Ci0KLSAgICB2ODo6SGFuZGxlPHY4OjpDb250ZXh0PiBj
b250ZXh0ID0gVjhQcm94eTo6R2V0Q29udGV4dChmcmFtZSk7Ci0gICAgaWYgKGNvbnRleHQuSXNF
bXB0eSgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICB2ODo6Q29udGV4dDo6U2NvcGUgc2NvcGUo
Y29udGV4dCk7Ci0KLSAgICB2ODo6SGFuZGxlPHY4OjpPYmplY3Q+IHZhbHVlID0gQ3JlYXRlVjhP
YmplY3RGb3JOUE9iamVjdChvYmplY3QsIDApOwotCi0gICAgLy8gQXR0YWNoIHRvIHRoZSBnbG9i
YWwgb2JqZWN0LgotICAgIHY4OjpIYW5kbGU8djg6Ok9iamVjdD4gZ2xvYmFsID0gY29udGV4dC0+
R2xvYmFsKCk7Ci0gICAgZ2xvYmFsLT5TZXQodjhTdHJpbmcoa2V5KSwgdmFsdWUpOwotfQotCi12
b2lkIFNjcmlwdENvbnRyb2xsZXI6OmNvbGxlY3RHYXJiYWdlKCkKLXsKLSAgICB2ODo6SGFuZGxl
U2NvcGUgaGFuZGxlU2NvcGU7Ci0gICAgdjg6OkhhbmRsZTx2ODo6Q29udGV4dD4gY29udGV4dCA9
IFY4UHJveHk6OkdldENvbnRleHQobV9wcm94eS0+ZnJhbWUoKSk7Ci0gICAgaWYgKGNvbnRleHQu
SXNFbXB0eSgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICB2ODo6Q29udGV4dDo6U2NvcGUgc2Nv
cGUoY29udGV4dCk7Ci0KLSAgICBtX3Byb3h5LT5ldmFsdWF0ZShTY3JpcHRTb3VyY2VDb2RlKCJp
ZiAod2luZG93LmdjKSB2b2lkKGdjKCkpOyIpLCAwKTsKLX0KLQotYm9vbCBTY3JpcHRDb250cm9s
bGVyOjpoYXZlSW50ZXJwcmV0ZXIoKSBjb25zdAotewotICAgIHJldHVybiBtX3Byb3h5LT5Db250
ZXh0SW5pdGlhbGl6ZWQoKTsKLX0KLQotYm9vbCBTY3JpcHRDb250cm9sbGVyOjppc0VuYWJsZWQo
KSBjb25zdAotewotICAgIHJldHVybiBtX3Byb3h5LT5pc0VuYWJsZWQoKTsKLX0KLQotUGFzc1Nj
cmlwdEluc3RhbmNlIFNjcmlwdENvbnRyb2xsZXI6OmNyZWF0ZVNjcmlwdEluc3RhbmNlRm9yV2lk
Z2V0KFdpZGdldCogd2lkZ2V0KQotewotICAgIEFTU0VSVCh3aWRnZXQpOwotCi0gICAgaWYgKHdp
ZGdldC0+aXNGcmFtZVZpZXcoKSkKLSAgICAgICAgcmV0dXJuIDA7Ci0KLSAgICBOUE9iamVjdCog
bnBPYmplY3QgPSBDaHJvbWl1bUJyaWRnZTo6cGx1Z2luU2NyaXB0YWJsZU9iamVjdCh3aWRnZXQp
OwotICAgIGlmICghbnBPYmplY3QpCi0gICAgICAgIHJldHVybiAwOwotCi0gICAgLy8gRnJhbWUg
TWVtb3J5IE1hbmFnZW1lbnQgZm9yIE5QT2JqZWN0cwotICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAgICAvLyBOUE9iamVjdHMgYXJlIHRyZWF0ZWQgZGlmZmVy
ZW50bHkgdGhhbiBvdGhlciBvYmplY3RzIHdyYXBwZWQgYnkgSlMuCi0gICAgLy8gTlBPYmplY3Rz
IGNhbiBiZSBjcmVhdGVkIGVpdGhlciBieSB0aGUgYnJvd3NlciAoZS5nLiB0aGUgbWFpbgotICAg
IC8vIHdpbmRvdyBvYmplY3QpIG9yIGJ5IHRoZSBwbHVnaW4gKHRoZSBtYWluIHBsdWdpbiBvYmpl
Y3QKLSAgICAvLyBmb3IgYSBIVE1MRW1iZWRFbGVtZW50KS4gRnVydGhlciwgdW5saWtlIG1vc3Qg
RE9NIE9iamVjdHMsIHRoZSBmcmFtZQotICAgIC8vIGlzIGVzcGVjaWFsbHkgY2FyZWZ1bCB0byBl
bnN1cmUgTlBPYmplY3RzIHRlcm1pbmF0ZSBhdCBmcmFtZSB0ZWFyZG93biBiZWNhdXNlCi0gICAg
Ly8gaWYgYSBwbHVnaW4gbGVha3MgYSByZWZlcmVuY2UsIGl0IGNvdWxkIGxlYWsgaXRzIG9iamVj
dHMgKG9yIHRoZSBicm93c2VyJ3Mgb2JqZWN0cykuCi0gICAgLy8KLSAgICAvLyBUaGUgRnJhbWUg
bWFpbnRhaW5zIGEgbGlzdCBvZiBwbHVnaW4gb2JqZWN0cyAobV9wbHVnaW5PYmplY3RzKQotICAg
IC8vIHdoaWNoIGl0IGNhbiB1c2UgdG8gcXVpY2tseSBmaW5kIHRoZSB3cmFwcGVkIGVtYmVkIG9i
amVjdC4KLSAgICAvLwotICAgIC8vIEluc2lkZSB0aGUgTlBSdW50aW1lLCB3ZSd2ZSBhZGRlZCBh
IGZldyBtZXRob2RzIGZvciByZWdpc3RlcmluZwotICAgIC8vIHdyYXBwZWQgTlBPYmplY3RzLiBU
aGUgcHVycG9zZSBvZiB0aGUgcmVnaXN0cmF0aW9uIGlzIGJlY2F1c2UKLSAgICAvLyBqYXZhc2Ny
aXB0IGdhcmJhZ2UgY29sbGVjdGlvbiBpcyBub24tZGV0ZXJtaW5pc3RpYywgeWV0IHdlIG5lZWQg
dG8KLSAgICAvLyBiZSBhYmxlIHRvIHRlYXIgZG93biB0aGUgcGx1Z2luIG9iamVjdHMgaW1tZWRp
YXRlbHkuIFdoZW4gYW4gb2JqZWN0Ci0gICAgLy8gaXMgcmVnaXN0ZXJlZCwgamF2YXNjcmlwdCBj
YW4gdXNlIGl0LiBXaGVuIHRoZSBvYmplY3QgaXMgZGVzdHJveWVkLAotICAgIC8vIG9yIHdoZW4g
dGhlIG9iamVjdCdzICJvd25pbmciIG9iamVjdCBpcyBkZXN0cm95ZWQsIHRoZSBvYmplY3Qgd2ls
bAotICAgIC8vIGJlIHVuLXJlZ2lzdGVyZWQsIGFuZCB0aGUgamF2YXNjcmlwdCBlbmdpbmUgbXVz
dCBub3QgdXNlIGl0LgotICAgIC8vCi0gICAgLy8gSW5zaWRlIHRoZSBqYXZhc2NyaXB0IGVuZ2lu
ZSwgdGhlIGVuZ2luZSBjYW4ga2VlcCBhIHJlZmVyZW5jZSB0byB0aGUKLSAgICAvLyBOUE9iamVj
dCBhcyBwYXJ0IG9mIGl0cyB3cmFwcGVyLiBIb3dldmVyLCBiZWZvcmUgYWNjZXNzaW5nIHRoZSBv
YmplY3QKLSAgICAvLyBpdCBtdXN0IGNvbnN1bHQgdGhlIE5QTl9SZWdpc3RyeS4KLQotICAgIHY4
OjpMb2NhbDx2ODo6T2JqZWN0PiB3cmFwcGVyID0gQ3JlYXRlVjhPYmplY3RGb3JOUE9iamVjdChu
cE9iamVjdCwgMCk7Ci0KLSAgICAvLyBUcmFjayB0aGUgcGx1Z2luIG9iamVjdC4gV2UndmUgYmVl
biBnaXZlbiBhIHJlZmVyZW5jZSB0byB0aGUgb2JqZWN0LgotICAgIG1fcGx1Z2luT2JqZWN0cy5z
ZXQod2lkZ2V0LCBucE9iamVjdCk7Ci0KLSAgICByZXR1cm4gVjhTY3JpcHRJbnN0YW5jZTo6Y3Jl
YXRlKHdyYXBwZXIpOwotfQotCi12b2lkIFNjcmlwdENvbnRyb2xsZXI6OmNsZWFudXBTY3JpcHRP
YmplY3RzRm9yUGx1Z2luKHZvaWQqIG5hdGl2ZUhhbmRsZSkKLXsKLSAgICBQbHVnaW5PYmplY3RN
YXA6Oml0ZXJhdG9yIGl0ID0gbV9wbHVnaW5PYmplY3RzLmZpbmQobmF0aXZlSGFuZGxlKTsKLSAg
ICBpZiAoaXQgPT0gbV9wbHVnaW5PYmplY3RzLmVuZCgpKQotICAgICAgICByZXR1cm47Ci0gICAg
X05QTl9VbnJlZ2lzdGVyT2JqZWN0KGl0LT5zZWNvbmQpOwotICAgIE5QTl9SZWxlYXNlT2JqZWN0
KGl0LT5zZWNvbmQpOwotICAgIG1fcGx1Z2luT2JqZWN0cy5yZW1vdmUoaXQpOwotfQotCi1zdGF0
aWMgTlBPYmplY3QqIGNyZWF0ZU5vU2NyaXB0T2JqZWN0KCkKLXsKLSAgICBub3RJbXBsZW1lbnRl
ZCgpOwotICAgIHJldHVybiAwOwotfQotCi1zdGF0aWMgTlBPYmplY3QqIGNyZWF0ZVNjcmlwdE9i
amVjdChGcmFtZSogZnJhbWUpCi17Ci0gICAgdjg6OkhhbmRsZVNjb3BlIGhhbmRsZVNjb3BlOwot
ICAgIHY4OjpIYW5kbGU8djg6OkNvbnRleHQ+IGNvbnRleHQgPSBWOFByb3h5OjpHZXRDb250ZXh0
KGZyYW1lKTsKLSAgICBpZiAoY29udGV4dC5Jc0VtcHR5KCkpCi0gICAgICAgIHJldHVybiBjcmVh
dGVOb1NjcmlwdE9iamVjdCgpOwotCi0gICAgdjg6OkNvbnRleHQ6OlNjb3BlIHNjb3BlKGNvbnRl
eHQpOwotICAgIERPTVdpbmRvdyogd2luZG93ID0gZnJhbWUtPmRvbVdpbmRvdygpOwotICAgIHY4
OjpIYW5kbGU8djg6OlZhbHVlPiBnbG9iYWwgPSBWOFByb3h5OjpUb1Y4T2JqZWN0KFY4Q2xhc3NJ
bmRleDo6RE9NV0lORE9XLCB3aW5kb3cpOwotICAgIEFTU0VSVChnbG9iYWwtPklzT2JqZWN0KCkp
OwotICAgIHJldHVybiBucENyZWF0ZVY4U2NyaXB0T2JqZWN0KDAsIHY4OjpIYW5kbGU8djg6Ok9i
amVjdD46OkNhc3QoZ2xvYmFsKSwgd2luZG93KTsKLX0KLQotTlBPYmplY3QqIFNjcmlwdENvbnRy
b2xsZXI6OndpbmRvd1NjcmlwdE5QT2JqZWN0KCkKLXsKLSAgICBpZiAobV93aW5kb3dTY3JpcHRO
UE9iamVjdCkKLSAgICAgICAgcmV0dXJuIG1fd2luZG93U2NyaXB0TlBPYmplY3Q7Ci0KLSAgICBp
ZiAoaXNFbmFibGVkKCkpIHsKLSAgICAgICAgLy8gSmF2YVNjcmlwdCBpcyBlbmFibGVkLCBzbyB0
aGVyZSBpcyBhIEphdmFTY3JpcHQgd2luZG93IG9iamVjdC4KLSAgICAgICAgLy8gUmV0dXJuIGFu
IE5QT2JqZWN0IGJvdW5kIHRvIHRoZSB3aW5kb3cgb2JqZWN0LgotICAgICAgICBtX3dpbmRvd1Nj
cmlwdE5QT2JqZWN0ID0gY3JlYXRlU2NyaXB0T2JqZWN0KG1fZnJhbWUpOwotICAgICAgICBfTlBO
X1JlZ2lzdGVyT2JqZWN0KG1fd2luZG93U2NyaXB0TlBPYmplY3QsIDApOwotICAgIH0gZWxzZSB7
Ci0gICAgICAgIC8vIEphdmFTY3JpcHQgaXMgbm90IGVuYWJsZWQsIHNvIHdlIGNhbm5vdCBiaW5k
IHRoZSBOUE9iamVjdCB0byB0aGUKLSAgICAgICAgLy8gSmF2YVNjcmlwdCB3aW5kb3cgb2JqZWN0
LiBJbnN0ZWFkLCB3ZSBjcmVhdGUgYW4gTlBPYmplY3Qgb2YgYQotICAgICAgICAvLyBkaWZmZXJl
bnQgY2xhc3MsIG9uZSB3aGljaCBpcyBub3QgYm91bmQgdG8gYSBKYXZhU2NyaXB0IG9iamVjdC4K
LSAgICAgICAgbV93aW5kb3dTY3JpcHROUE9iamVjdCA9IGNyZWF0ZU5vU2NyaXB0T2JqZWN0KCk7
Ci0gICAgfQotICAgIHJldHVybiBtX3dpbmRvd1NjcmlwdE5QT2JqZWN0OwotfQotCi1OUE9iamVj
dCogU2NyaXB0Q29udHJvbGxlcjo6Y3JlYXRlU2NyaXB0T2JqZWN0Rm9yUGx1Z2luRWxlbWVudChI
VE1MUGx1Z0luRWxlbWVudCogcGx1Z2luKQotewotICAgIC8vIENhbid0IGNyZWF0ZSBOUE9iamVj
dHMgd2hlbiBKYXZhU2NyaXB0IGlzIGRpc2FibGVkLgotICAgIGlmICghaXNFbmFibGVkKCkpCi0g
ICAgICAgIHJldHVybiBjcmVhdGVOb1NjcmlwdE9iamVjdCgpOwotCi0gICAgdjg6OkhhbmRsZVNj
b3BlIGhhbmRsZVNjb3BlOwotICAgIHY4OjpIYW5kbGU8djg6OkNvbnRleHQ+IGNvbnRleHQgPSBW
OFByb3h5OjpHZXRDb250ZXh0KG1fZnJhbWUpOwotICAgIGlmIChjb250ZXh0LklzRW1wdHkoKSkK
LSAgICAgICAgcmV0dXJuIGNyZWF0ZU5vU2NyaXB0T2JqZWN0KCk7Ci0gICAgdjg6OkNvbnRleHQ6
OlNjb3BlIHNjb3BlKGNvbnRleHQpOwotCi0gICAgRE9NV2luZG93KiB3aW5kb3cgPSBtX2ZyYW1l
LT5kb21XaW5kb3coKTsKLSAgICB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gdjhwbHVnaW4gPSBWOFBy
b3h5OjpUb1Y4T2JqZWN0KFY4Q2xhc3NJbmRleDo6SFRNTEVNQkVERUxFTUVOVCwgcGx1Z2luKTsK
LSAgICBpZiAoIXY4cGx1Z2luLT5Jc09iamVjdCgpKQotICAgICAgICByZXR1cm4gY3JlYXRlTm9T
Y3JpcHRPYmplY3QoKTsKLQotICAgIHJldHVybiBucENyZWF0ZVY4U2NyaXB0T2JqZWN0KDAsIHY4
OjpIYW5kbGU8djg6Ok9iamVjdD46OkNhc3QodjhwbHVnaW4pLCB3aW5kb3cpOwotfQotCi0KLXZv
aWQgU2NyaXB0Q29udHJvbGxlcjo6Y2xlYXJXaW5kb3dTaGVsbCgpCi17Ci0gICAgLy8gVjggYmlu
ZGluZyBleHBlY3RzIFNjcmlwdENvbnRyb2xsZXI6OmNsZWFyV2luZG93U2hlbGwgb25seSBiZSBj
YWxsZWQKLSAgICAvLyB3aGVuIGEgZnJhbWUgaXMgbG9hZGluZyBhIG5ldyBwYWdlLiBWOFByb3h5
OjpjbGVhckZvck5hdmlnYXRpb24KLSAgICAvLyBjcmVhdGVzIGEgbmV3IGNvbnRleHQgZm9yIHRo
ZSBuZXcgcGFnZS4KLSAgICBtX3Byb3h5LT5jbGVhckZvck5hdmlnYXRpb24oKTsKLX0KLQotdm9p
ZCBTY3JpcHRDb250cm9sbGVyOjphdHRhY2hEZWJ1Z2dlcih2b2lkKikKLXsKLSAgICBub3RJbXBs
ZW1lbnRlZCgpOwotfQotCi12b2lkIFNjcmlwdENvbnRyb2xsZXI6OnVwZGF0ZURvY3VtZW50KCkK
LXsKLSAgICBtX3Byb3h5LT51cGRhdGVEb2N1bWVudCgpOwotfQorICAgIH07CiAKIH0gLy8gbmFt
ZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIFNjcmlwdENvbnRyb2xsZXJfaAo=
</data>
<flag name="review"
          id="15386"
          type_id="1"
          status="+"
          setter="dglazkov"
    />
          </attachment>
      

    </bug>

</bugzilla>