<?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>62760</bug_id>
          
          <creation_ts>2011-06-15 15:19:36 -0700</creation_ts>
          <short_desc>Move more argument coders to WebCoreArgumentCoders and clean up the animation coders</short_desc>
          <delta_ts>2011-06-16 10:02:03 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>New Bugs</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Anders Carlsson">andersca</reporter>
          <assigned_to name="Anders Carlsson">andersca</assigned_to>
          
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>421613</commentid>
    <comment_count>0</comment_count>
    <who name="Anders Carlsson">andersca</who>
    <bug_when>2011-06-15 15:19:36 -0700</bug_when>
    <thetext>Move more argument coders to WebCoreArgumentCoders and clean up the animation coders</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>421617</commentid>
    <comment_count>1</comment_count>
      <attachid>97370</attachid>
    <who name="Anders Carlsson">andersca</who>
    <bug_when>2011-06-15 15:23:27 -0700</bug_when>
    <thetext>Created attachment 97370
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>421651</commentid>
    <comment_count>2</comment_count>
      <attachid>97370</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-06-15 17:28:32 -0700</bug_when>
    <thetext>Comment on attachment 97370
Patch

Attachment 97370 did not pass mac-ews (mac):
Output: http://queues.webkit.org/results/8872010</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>421663</commentid>
    <comment_count>3</comment_count>
      <attachid>97370</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-06-15 17:44:33 -0700</bug_when>
    <thetext>Comment on attachment 97370
Patch

Attachment 97370 did not pass mac-ews (mac):
Output: http://queues.webkit.org/results/8872018</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>422014</commentid>
    <comment_count>4</comment_count>
    <who name="Anders Carlsson">andersca</who>
    <bug_when>2011-06-16 10:02:03 -0700</bug_when>
    <thetext>Committed r89038: &lt;http://trac.webkit.org/changeset/89038&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>97370</attachid>
            <date>2011-06-15 15:23:27 -0700</date>
            <delta_ts>2011-06-16 10:00:59 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-62760-20110615152326.patch</filename>
            <type>text/plain</type>
            <size>37354</size>
            <attacher name="Anders Carlsson">andersca</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
S2l0Mi9DaGFuZ2VMb2cJKHJldmlzaW9uIDg4OTc4KQorKysgU291cmNlL1dlYktpdDIvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMjYgQEAKKzIwMTEtMDYtMTUgIEFuZGVycyBD
YXJsc3NvbiAgPGFuZGVyc2NhQGFwcGxlLmNvbT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JP
RFkgKE9PUFMhKS4KKworICAgICAgICBNb3ZlIG1vcmUgYXJndW1lbnQgY29kZXJzIHRvIFdlYkNv
cmVBcmd1bWVudENvZGVycyBhbmQgY2xlYW4gdXAgdGhlIGFuaW1hdGlvbiBjb2RlcnMKKyAgICAg
ICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTYyNzYwCisKKyAgICAg
ICAgKiBTaGFyZWQvV2ViQ29yZUFyZ3VtZW50Q29kZXJzLmNwcDoKKyAgICAgICAgKENvcmVJUEM6
Ojo6ZW5jb2RlKToKKyAgICAgICAgKENvcmVJUEM6Ojo6ZGVjb2RlKToKKyAgICAgICAgKENvcmVJ
UEM6OmVuY29kZU9wZXJhdGlvbik6CisgICAgICAgIChDb3JlSVBDOjpkZWNvZGVPcGVyYXRpb24p
OgorICAgICAgICAoQ29yZUlQQzo6ZW5jb2RlQm9vbEFuZFZhbHVlKToKKyAgICAgICAgKENvcmVJ
UEM6OmVuY29kZUJvb2xBbmRFbnVtVmFsdWUpOgorICAgICAgICAoQ29yZUlQQzo6ZGVjb2RlQm9v
bEFuZFZhbHVlKToKKyAgICAgICAgKENvcmVJUEM6OmRlY29kZUJvb2xBbmRFbnVtVmFsdWUpOgor
ICAgICAgICAqIFNoYXJlZC9XZWJDb3JlQXJndW1lbnRDb2RlcnMuaDoKKyAgICAgICAgKiBTaGFy
ZWQvbWFjL0FyZ3VtZW50Q29kZXJzTWFjLmg6CisgICAgICAgICogU2hhcmVkL21hYy9Bcmd1bWVu
dENvZGVyc01hYy5tbToKKyAgICAgICAgKiBTaGFyZWQvbWFjL1dlYkNvcmVBcmd1bWVudENvZGVy
c01hYy5tbToKKyAgICAgICAgKENvcmVJUEM6Ojo6ZW5jb2RlKToKKyAgICAgICAgKENvcmVJUEM6
Ojo6ZGVjb2RlKToKKwogMjAxMS0wNi0xNCAgSm9uIEhvbmV5Y3V0dCAgPGpob25leWN1dHRAYXBw
bGUuY29tPgogCiAgICAgICAgIFJFR1JFU1NJT04oNzgyMDEpOiBXaW5kb3dsZXNzIEZsYXNoIHBs
dWctaW5zIGFyZSB0cmFuc3BhcmVudCBvbiBzb21lIHNpdGVzCkluZGV4OiBTb3VyY2UvV2ViS2l0
Mi9TaGFyZWQvV2ViQ29yZUFyZ3VtZW50Q29kZXJzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViS2l0Mi9TaGFyZWQvV2ViQ29yZUFyZ3VtZW50Q29kZXJzLmNwcAkocmV2aXNpb24gODg5NzMp
CisrKyBTb3VyY2UvV2ViS2l0Mi9TaGFyZWQvV2ViQ29yZUFyZ3VtZW50Q29kZXJzLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMzQwLDQgKzM0MCw0MzMgQEAgYm9vbCBBcmd1bWVudENvZGVyPENvbG9y
Pjo6ZGVjb2RlKEFyZ3VtZQogICAgIHJldHVybiB0cnVlOwogfQogCisKK3ZvaWQgQXJndW1lbnRD
b2RlcjxDb21wb3NpdGlvblVuZGVybGluZT46OmVuY29kZShBcmd1bWVudEVuY29kZXIqIGVuY29k
ZXIsIGNvbnN0IENvbXBvc2l0aW9uVW5kZXJsaW5lJiB1bmRlcmxpbmUpCit7CisgICAgZW5jb2Rl
ci0+ZW5jb2RlKHVuZGVybGluZS5zdGFydE9mZnNldCk7CisgICAgZW5jb2Rlci0+ZW5jb2RlKHVu
ZGVybGluZS5lbmRPZmZzZXQpOworICAgIGVuY29kZXItPmVuY29kZSh1bmRlcmxpbmUudGhpY2sp
OworICAgIGVuY29kZXItPmVuY29kZSh1bmRlcmxpbmUuY29sb3IpOworfQorCitib29sIEFyZ3Vt
ZW50Q29kZXI8Q29tcG9zaXRpb25VbmRlcmxpbmU+OjpkZWNvZGUoQXJndW1lbnREZWNvZGVyKiBk
ZWNvZGVyLCBDb21wb3NpdGlvblVuZGVybGluZSYgdW5kZXJsaW5lKQoreworICAgIGlmICghZGVj
b2Rlci0+ZGVjb2RlKHVuZGVybGluZS5zdGFydE9mZnNldCkpCisgICAgICAgIHJldHVybiBmYWxz
ZTsKKyAgICBpZiAoIWRlY29kZXItPmRlY29kZSh1bmRlcmxpbmUuZW5kT2Zmc2V0KSkKKyAgICAg
ICAgcmV0dXJuIGZhbHNlOworICAgIGlmICghZGVjb2Rlci0+ZGVjb2RlKHVuZGVybGluZS50aGlj
aykpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBpZiAoIWRlY29kZXItPmRlY29kZSh1bmRl
cmxpbmUuY29sb3IpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICByZXR1cm4gdHJ1ZTsK
K30KKworCit2b2lkIEFyZ3VtZW50Q29kZXI8RGF0YWJhc2VEZXRhaWxzPjo6ZW5jb2RlKEFyZ3Vt
ZW50RW5jb2RlciogZW5jb2RlciwgY29uc3QgRGF0YWJhc2VEZXRhaWxzJiBkZXRhaWxzKQorewor
ICAgIGVuY29kZXItPmVuY29kZShkZXRhaWxzLm5hbWUoKSk7CisgICAgZW5jb2Rlci0+ZW5jb2Rl
KGRldGFpbHMuZGlzcGxheU5hbWUoKSk7CisgICAgZW5jb2Rlci0+ZW5jb2RlKGRldGFpbHMuZXhw
ZWN0ZWRVc2FnZSgpKTsKKyAgICBlbmNvZGVyLT5lbmNvZGUoZGV0YWlscy5jdXJyZW50VXNhZ2Uo
KSk7Cit9CisgICAgCitib29sIEFyZ3VtZW50Q29kZXI8RGF0YWJhc2VEZXRhaWxzPjo6ZGVjb2Rl
KEFyZ3VtZW50RGVjb2RlciogZGVjb2RlciwgRGF0YWJhc2VEZXRhaWxzJiBkZXRhaWxzKQorewor
ICAgIFN0cmluZyBuYW1lOworICAgIGlmICghZGVjb2Rlci0+ZGVjb2RlKG5hbWUpKQorICAgICAg
ICByZXR1cm4gZmFsc2U7CisKKyAgICBTdHJpbmcgZGlzcGxheU5hbWU7CisgICAgaWYgKCFkZWNv
ZGVyLT5kZWNvZGUoZGlzcGxheU5hbWUpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICB1
aW50NjRfdCBleHBlY3RlZFVzYWdlOworICAgIGlmICghZGVjb2Rlci0+ZGVjb2RlKGV4cGVjdGVk
VXNhZ2UpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICB1aW50NjRfdCBjdXJyZW50VXNh
Z2U7CisgICAgaWYgKCFkZWNvZGVyLT5kZWNvZGUoY3VycmVudFVzYWdlKSkKKyAgICAgICAgcmV0
dXJuIGZhbHNlOworICAgIAorICAgIGRldGFpbHMgPSBEYXRhYmFzZURldGFpbHMobmFtZSwgZGlz
cGxheU5hbWUsIGV4cGVjdGVkVXNhZ2UsIGN1cnJlbnRVc2FnZSk7CisgICAgcmV0dXJuIHRydWU7
Cit9CisKKwordm9pZCBBcmd1bWVudENvZGVyPEdyYW1tYXJEZXRhaWw+OjplbmNvZGUoQXJndW1l
bnRFbmNvZGVyKiBlbmNvZGVyLCBjb25zdCBHcmFtbWFyRGV0YWlsJiBkZXRhaWwpCit7CisgICAg
ZW5jb2Rlci0+ZW5jb2RlKGRldGFpbC5sb2NhdGlvbik7CisgICAgZW5jb2Rlci0+ZW5jb2RlKGRl
dGFpbC5sZW5ndGgpOworICAgIGVuY29kZXItPmVuY29kZShkZXRhaWwuZ3Vlc3Nlcyk7CisgICAg
ZW5jb2Rlci0+ZW5jb2RlKGRldGFpbC51c2VyRGVzY3JpcHRpb24pOworfQorCitib29sIEFyZ3Vt
ZW50Q29kZXI8R3JhbW1hckRldGFpbD46OmRlY29kZShBcmd1bWVudERlY29kZXIqIGRlY29kZXIs
IEdyYW1tYXJEZXRhaWwmIGRldGFpbCkKK3sKKyAgICBpZiAoIWRlY29kZXItPmRlY29kZShkZXRh
aWwubG9jYXRpb24pKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgaWYgKCFkZWNvZGVyLT5k
ZWNvZGUoZGV0YWlsLmxlbmd0aCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBpZiAoIWRl
Y29kZXItPmRlY29kZShkZXRhaWwuZ3Vlc3NlcykpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAg
ICBpZiAoIWRlY29kZXItPmRlY29kZShkZXRhaWwudXNlckRlc2NyaXB0aW9uKSkKKyAgICAgICAg
cmV0dXJuIGZhbHNlOworCisgICAgcmV0dXJuIHRydWU7Cit9CisKKwordm9pZCBBcmd1bWVudENv
ZGVyPFRleHRDaGVja2luZ1Jlc3VsdD46OmVuY29kZShBcmd1bWVudEVuY29kZXIqIGVuY29kZXIs
IGNvbnN0IFRleHRDaGVja2luZ1Jlc3VsdCYgcmVzdWx0KQoreworICAgIGVuY29kZXItPmVuY29k
ZUVudW0ocmVzdWx0LnR5cGUpOworICAgIGVuY29kZXItPmVuY29kZShyZXN1bHQubG9jYXRpb24p
OworICAgIGVuY29kZXItPmVuY29kZShyZXN1bHQubGVuZ3RoKTsKKyAgICBlbmNvZGVyLT5lbmNv
ZGUocmVzdWx0LmRldGFpbHMpOworICAgIGVuY29kZXItPmVuY29kZShyZXN1bHQucmVwbGFjZW1l
bnQpOworfQorCitib29sIEFyZ3VtZW50Q29kZXI8VGV4dENoZWNraW5nUmVzdWx0Pjo6ZGVjb2Rl
KEFyZ3VtZW50RGVjb2RlciogZGVjb2RlciwgVGV4dENoZWNraW5nUmVzdWx0JiByZXN1bHQpCit7
CisgICAgaWYgKCFkZWNvZGVyLT5kZWNvZGVFbnVtKHJlc3VsdC50eXBlKSkKKyAgICAgICAgcmV0
dXJuIGZhbHNlOworICAgIGlmICghZGVjb2Rlci0+ZGVjb2RlKHJlc3VsdC5sb2NhdGlvbikpCisg
ICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBpZiAoIWRlY29kZXItPmRlY29kZShyZXN1bHQubGVu
Z3RoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGlmICghZGVjb2Rlci0+ZGVjb2RlKHJl
c3VsdC5kZXRhaWxzKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGlmICghZGVjb2Rlci0+
ZGVjb2RlKHJlc3VsdC5yZXBsYWNlbWVudCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBy
ZXR1cm4gdHJ1ZTsKK30KKworCit2b2lkIEFyZ3VtZW50Q29kZXI8UmVmUHRyPFRpbWluZ0Z1bmN0
aW9uPiA+OjplbmNvZGUoQXJndW1lbnRFbmNvZGVyKiBlbmNvZGVyLCBjb25zdCBSZWZQdHI8VGlt
aW5nRnVuY3Rpb24+JiBmdW5jdGlvbikKK3sKKyAgICAvLyBXZSBkb24ndCB3YW50IHRvIGVuY29k
ZSBudWxsLXJlZmVyZW5jZXMuCisgICAgQVNTRVJUKGZ1bmN0aW9uKTsKKworICAgIGVuY29kZXIt
PmVuY29kZUVudW0oZnVuY3Rpb24tPnR5cGUoKSk7CisgICAgc3dpdGNoIChmdW5jdGlvbi0+dHlw
ZSgpKSB7CisgICAgY2FzZSBUaW1pbmdGdW5jdGlvbjo6TGluZWFyRnVuY3Rpb246CisgICAgICAg
IGJyZWFrOworICAgIGNhc2UgVGltaW5nRnVuY3Rpb246OkN1YmljQmV6aWVyRnVuY3Rpb246IHsK
KyAgICAgICAgQ3ViaWNCZXppZXJUaW1pbmdGdW5jdGlvbiogY3ViaWNGdW5jdGlvbiA9IHN0YXRp
Y19jYXN0PEN1YmljQmV6aWVyVGltaW5nRnVuY3Rpb24qPihmdW5jdGlvbi5nZXQoKSk7CisgICAg
ICAgIGVuY29kZXItPmVuY29kZURvdWJsZShjdWJpY0Z1bmN0aW9uLT54MSgpKTsKKyAgICAgICAg
ZW5jb2Rlci0+ZW5jb2RlRG91YmxlKGN1YmljRnVuY3Rpb24tPnkxKCkpOworICAgICAgICBlbmNv
ZGVyLT5lbmNvZGVEb3VibGUoY3ViaWNGdW5jdGlvbi0+eDIoKSk7CisgICAgICAgIGVuY29kZXIt
PmVuY29kZURvdWJsZShjdWJpY0Z1bmN0aW9uLT55MigpKTsKKyAgICAgICAgYnJlYWs7CisgICAg
fQorICAgIGNhc2UgVGltaW5nRnVuY3Rpb246OlN0ZXBzRnVuY3Rpb246IHsKKyAgICAgICAgU3Rl
cHNUaW1pbmdGdW5jdGlvbiogc3RlcHNGdW5jdGlvbiA9IHN0YXRpY19jYXN0PFN0ZXBzVGltaW5n
RnVuY3Rpb24qPihmdW5jdGlvbi5nZXQoKSk7CisgICAgICAgIGVuY29kZXItPmVuY29kZUludDMy
KHN0ZXBzRnVuY3Rpb24tPm51bWJlck9mU3RlcHMoKSk7CisgICAgICAgIGVuY29kZXItPmVuY29k
ZUJvb2woc3RlcHNGdW5jdGlvbi0+c3RlcEF0U3RhcnQoKSk7CisgICAgICAgIGJyZWFrOworICAg
IH0KKyAgICB9Cit9CisKK2Jvb2wgQXJndW1lbnRDb2RlcjxSZWZQdHI8VGltaW5nRnVuY3Rpb24+
ID46OmRlY29kZShBcmd1bWVudERlY29kZXIqIGRlY29kZXIsIFJlZlB0cjxUaW1pbmdGdW5jdGlv
bj4mIGZ1bmN0aW9uKQoreworICAgIFRpbWluZ0Z1bmN0aW9uOjpUaW1pbmdGdW5jdGlvblR5cGUg
dHlwZTsKKyAgICBpZiAoIWRlY29kZXItPmRlY29kZUVudW0odHlwZSkpCisgICAgICAgIHJldHVy
biBmYWxzZTsKKworICAgIHN3aXRjaCAodHlwZSkgeworICAgIGNhc2UgVGltaW5nRnVuY3Rpb246
OkxpbmVhckZ1bmN0aW9uOgorICAgICAgICBmdW5jdGlvbiA9IExpbmVhclRpbWluZ0Z1bmN0aW9u
OjpjcmVhdGUoKTsKKyAgICAgICAgcmV0dXJuIHRydWU7CisKKyAgICBjYXNlIFRpbWluZ0Z1bmN0
aW9uOjpDdWJpY0JlemllckZ1bmN0aW9uOiB7CisgICAgICAgIGRvdWJsZSB4MSwgeTEsIHgyLCB5
MjsKKyAgICAgICAgaWYgKCFkZWNvZGVyLT5kZWNvZGVEb3VibGUoeDEpKQorICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOworICAgICAgICBpZiAoIWRlY29kZXItPmRlY29kZURvdWJsZSh5MSkpCisg
ICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIGlmICghZGVjb2Rlci0+ZGVjb2RlRG91
YmxlKHgyKSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgaWYgKCFkZWNvZGVy
LT5kZWNvZGVEb3VibGUoeTIpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICBm
dW5jdGlvbiA9IEN1YmljQmV6aWVyVGltaW5nRnVuY3Rpb246OmNyZWF0ZSh4MSwgeTEsIHgyLCB5
Mik7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKworICAgIGNhc2UgVGltaW5nRnVuY3Rp
b246OlN0ZXBzRnVuY3Rpb246IHsKKyAgICAgICAgaW50IG51bVN0ZXBzOworICAgICAgICBib29s
IHN0ZXBBdFN0YXJ0OworICAgICAgICBpZiAoIWRlY29kZXItPmRlY29kZUludDMyKG51bVN0ZXBz
KSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgaWYgKCFkZWNvZGVyLT5kZWNv
ZGVCb29sKHN0ZXBBdFN0YXJ0KSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgICAg
ICBmdW5jdGlvbiA9IFN0ZXBzVGltaW5nRnVuY3Rpb246OmNyZWF0ZShudW1TdGVwcywgc3RlcEF0
U3RhcnQpOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisKKyAgICB9CisKKyAgICByZXR1
cm4gZmFsc2U7Cit9CisKKwordGVtcGxhdGU8dHlwZW5hbWUgVD4KK3ZvaWQgZW5jb2RlT3BlcmF0
aW9uKEFyZ3VtZW50RW5jb2RlciogZW5jb2RlciwgY29uc3QgUmVmUHRyPFRyYW5zZm9ybU9wZXJh
dGlvbj4mIG9wZXJhdGlvbikKK3sKKyAgICBlbmNvZGVyLT5lbmNvZGUoKnN0YXRpY19jYXN0PGNv
bnN0IFQqPihvcGVyYXRpb24uZ2V0KCkpKTsKK30KKwordm9pZCBBcmd1bWVudENvZGVyPFJlZlB0
cjxUcmFuc2Zvcm1PcGVyYXRpb24+ID46OmVuY29kZShBcmd1bWVudEVuY29kZXIqIGVuY29kZXIs
IGNvbnN0IFJlZlB0cjxUcmFuc2Zvcm1PcGVyYXRpb24+JiBvcGVyYXRpb24pCit7CisgICAgLy8g
V2UgZG9uJ3Qgd2FudCB0byBlbmNvZGUgbnVsbC1yZWZlcmVuY2VzLgorICAgIEFTU0VSVChvcGVy
YXRpb24pOworCisgICAgZW5jb2Rlci0+ZW5jb2RlRW51bShvcGVyYXRpb24tPmdldE9wZXJhdGlv
blR5cGUoKSk7CisgICAgc3dpdGNoIChvcGVyYXRpb24tPmdldE9wZXJhdGlvblR5cGUoKSkgewor
ICAgIGNhc2UgVHJhbnNmb3JtT3BlcmF0aW9uOjpTQ0FMRToKKyAgICBjYXNlIFRyYW5zZm9ybU9w
ZXJhdGlvbjo6U0NBTEVfWDoKKyAgICBjYXNlIFRyYW5zZm9ybU9wZXJhdGlvbjo6U0NBTEVfWToK
KyAgICBjYXNlIFRyYW5zZm9ybU9wZXJhdGlvbjo6U0NBTEVfWjoKKyAgICBjYXNlIFRyYW5zZm9y
bU9wZXJhdGlvbjo6U0NBTEVfM0Q6CisgICAgICAgIGVuY29kZU9wZXJhdGlvbjxTY2FsZVRyYW5z
Zm9ybU9wZXJhdGlvbj4oZW5jb2Rlciwgb3BlcmF0aW9uKTsKKyAgICAgICAgcmV0dXJuOworCisg
ICAgY2FzZSBUcmFuc2Zvcm1PcGVyYXRpb246OlRSQU5TTEFURToKKyAgICBjYXNlIFRyYW5zZm9y
bU9wZXJhdGlvbjo6VFJBTlNMQVRFX1g6CisgICAgY2FzZSBUcmFuc2Zvcm1PcGVyYXRpb246OlRS
QU5TTEFURV9ZOgorICAgIGNhc2UgVHJhbnNmb3JtT3BlcmF0aW9uOjpUUkFOU0xBVEVfWjoKKyAg
ICBjYXNlIFRyYW5zZm9ybU9wZXJhdGlvbjo6VFJBTlNMQVRFXzNEOgorICAgICAgICBlbmNvZGVP
cGVyYXRpb248VHJhbnNsYXRlVHJhbnNmb3JtT3BlcmF0aW9uPihlbmNvZGVyLCBvcGVyYXRpb24p
OworICAgICAgICByZXR1cm47CisKKyAgICBjYXNlIFRyYW5zZm9ybU9wZXJhdGlvbjo6Uk9UQVRF
OgorICAgIGNhc2UgVHJhbnNmb3JtT3BlcmF0aW9uOjpST1RBVEVfWDoKKyAgICBjYXNlIFRyYW5z
Zm9ybU9wZXJhdGlvbjo6Uk9UQVRFX1k6CisgICAgY2FzZSBUcmFuc2Zvcm1PcGVyYXRpb246OlJP
VEFURV8zRDoKKyAgICAgICAgZW5jb2RlT3BlcmF0aW9uPFJvdGF0ZVRyYW5zZm9ybU9wZXJhdGlv
bj4oZW5jb2Rlciwgb3BlcmF0aW9uKTsKKyAgICAgICAgcmV0dXJuOworCisgICAgY2FzZSBUcmFu
c2Zvcm1PcGVyYXRpb246OlNLRVc6CisgICAgY2FzZSBUcmFuc2Zvcm1PcGVyYXRpb246OlNLRVdf
WDoKKyAgICBjYXNlIFRyYW5zZm9ybU9wZXJhdGlvbjo6U0tFV19ZOgorICAgICAgICBlbmNvZGVP
cGVyYXRpb248U2tld1RyYW5zZm9ybU9wZXJhdGlvbj4oZW5jb2Rlciwgb3BlcmF0aW9uKTsKKyAg
ICAgICAgcmV0dXJuOworCisgICAgY2FzZSBUcmFuc2Zvcm1PcGVyYXRpb246Ok1BVFJJWDoKKyAg
ICAgICAgZW5jb2RlT3BlcmF0aW9uPE1hdHJpeFRyYW5zZm9ybU9wZXJhdGlvbj4oZW5jb2Rlciwg
b3BlcmF0aW9uKTsKKyAgICAgICAgcmV0dXJuOworCisgICAgY2FzZSBUcmFuc2Zvcm1PcGVyYXRp
b246Ok1BVFJJWF8zRDoKKyAgICAgICAgZW5jb2RlT3BlcmF0aW9uPE1hdHJpeDNEVHJhbnNmb3Jt
T3BlcmF0aW9uPihlbmNvZGVyLCBvcGVyYXRpb24pOworICAgICAgICByZXR1cm47CisKKyAgICBj
YXNlIFRyYW5zZm9ybU9wZXJhdGlvbjo6UEVSU1BFQ1RJVkU6CisgICAgICAgIGVuY29kZU9wZXJh
dGlvbjxQZXJzcGVjdGl2ZVRyYW5zZm9ybU9wZXJhdGlvbj4oZW5jb2Rlciwgb3BlcmF0aW9uKTsK
KyAgICAgICAgcmV0dXJuOworCisgICAgY2FzZSBUcmFuc2Zvcm1PcGVyYXRpb246OklERU5USVRZ
OgorICAgIGNhc2UgVHJhbnNmb3JtT3BlcmF0aW9uOjpOT05FOgorICAgICAgICByZXR1cm47Cisg
ICAgfQorfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPgorYm9vbCBkZWNvZGVPcGVyYXRpb24oQXJn
dW1lbnREZWNvZGVyKiBkZWNvZGVyLCBSZWZQdHI8VHJhbnNmb3JtT3BlcmF0aW9uPiYgb3BlcmF0
aW9uLCBQYXNzUmVmUHRyPFQ+IG5ld09wZXJhdGlvbikKK3sKKyAgICBpZiAoIWRlY29kZXItPmRl
Y29kZSgqbmV3T3BlcmF0aW9uLmdldCgpKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAg
b3BlcmF0aW9uID0gbmV3T3BlcmF0aW9uLmdldCgpOworICAgIHJldHVybiB0cnVlOworfQorCiti
b29sIEFyZ3VtZW50Q29kZXI8UmVmUHRyPFRyYW5zZm9ybU9wZXJhdGlvbj4gPjo6ZGVjb2RlKEFy
Z3VtZW50RGVjb2RlciogZGVjb2RlciwgUmVmUHRyPFRyYW5zZm9ybU9wZXJhdGlvbj4mIG9wZXJh
dGlvbikKK3sKKyAgICBUcmFuc2Zvcm1PcGVyYXRpb246Ok9wZXJhdGlvblR5cGUgdHlwZTsKKyAg
ICBpZiAoIWRlY29kZXItPmRlY29kZUVudW0odHlwZSkpCisgICAgICAgIHJldHVybiBmYWxzZTsK
KworICAgIHN3aXRjaCAodHlwZSkgeworICAgIGNhc2UgVHJhbnNmb3JtT3BlcmF0aW9uOjpTQ0FM
RToKKyAgICBjYXNlIFRyYW5zZm9ybU9wZXJhdGlvbjo6U0NBTEVfWDoKKyAgICBjYXNlIFRyYW5z
Zm9ybU9wZXJhdGlvbjo6U0NBTEVfWToKKyAgICBjYXNlIFRyYW5zZm9ybU9wZXJhdGlvbjo6U0NB
TEVfWjoKKyAgICBjYXNlIFRyYW5zZm9ybU9wZXJhdGlvbjo6U0NBTEVfM0Q6CisgICAgICAgIHJl
dHVybiBkZWNvZGVPcGVyYXRpb24oZGVjb2Rlciwgb3BlcmF0aW9uLCBTY2FsZVRyYW5zZm9ybU9w
ZXJhdGlvbjo6Y3JlYXRlKDEuMCwgMS4wLCB0eXBlKSk7CisKKyAgICBjYXNlIFRyYW5zZm9ybU9w
ZXJhdGlvbjo6VFJBTlNMQVRFOgorICAgIGNhc2UgVHJhbnNmb3JtT3BlcmF0aW9uOjpUUkFOU0xB
VEVfWDoKKyAgICBjYXNlIFRyYW5zZm9ybU9wZXJhdGlvbjo6VFJBTlNMQVRFX1k6CisgICAgY2Fz
ZSBUcmFuc2Zvcm1PcGVyYXRpb246OlRSQU5TTEFURV9aOgorICAgIGNhc2UgVHJhbnNmb3JtT3Bl
cmF0aW9uOjpUUkFOU0xBVEVfM0Q6CisgICAgICAgIHJldHVybiBkZWNvZGVPcGVyYXRpb24oZGVj
b2Rlciwgb3BlcmF0aW9uLCBUcmFuc2xhdGVUcmFuc2Zvcm1PcGVyYXRpb246OmNyZWF0ZShMZW5n
dGgoMCwgV2ViQ29yZTo6Rml4ZWQpLCBMZW5ndGgoMCwgV2ViQ29yZTo6Rml4ZWQpLCB0eXBlKSk7
CisKKyAgICBjYXNlIFRyYW5zZm9ybU9wZXJhdGlvbjo6Uk9UQVRFOgorICAgIGNhc2UgVHJhbnNm
b3JtT3BlcmF0aW9uOjpST1RBVEVfWDoKKyAgICBjYXNlIFRyYW5zZm9ybU9wZXJhdGlvbjo6Uk9U
QVRFX1k6CisgICAgY2FzZSBUcmFuc2Zvcm1PcGVyYXRpb246OlJPVEFURV8zRDoKKyAgICAgICAg
cmV0dXJuIGRlY29kZU9wZXJhdGlvbihkZWNvZGVyLCBvcGVyYXRpb24sIFJvdGF0ZVRyYW5zZm9y
bU9wZXJhdGlvbjo6Y3JlYXRlKDAuMCwgdHlwZSkpOworCisgICAgY2FzZSBUcmFuc2Zvcm1PcGVy
YXRpb246OlNLRVc6CisgICAgY2FzZSBUcmFuc2Zvcm1PcGVyYXRpb246OlNLRVdfWDoKKyAgICBj
YXNlIFRyYW5zZm9ybU9wZXJhdGlvbjo6U0tFV19ZOgorICAgICAgICByZXR1cm4gZGVjb2RlT3Bl
cmF0aW9uKGRlY29kZXIsIG9wZXJhdGlvbiwgU2tld1RyYW5zZm9ybU9wZXJhdGlvbjo6Y3JlYXRl
KDAuMCwgMC4wLCB0eXBlKSk7CisKKyAgICBjYXNlIFRyYW5zZm9ybU9wZXJhdGlvbjo6TUFUUklY
OgorICAgICAgICByZXR1cm4gZGVjb2RlT3BlcmF0aW9uKGRlY29kZXIsIG9wZXJhdGlvbiwgTWF0
cml4VHJhbnNmb3JtT3BlcmF0aW9uOjpjcmVhdGUoVHJhbnNmb3JtYXRpb25NYXRyaXgoKSkpOwor
CisgICAgY2FzZSBUcmFuc2Zvcm1PcGVyYXRpb246Ok1BVFJJWF8zRDoKKyAgICAgICAgcmV0dXJu
IGRlY29kZU9wZXJhdGlvbihkZWNvZGVyLCBvcGVyYXRpb24sIE1hdHJpeDNEVHJhbnNmb3JtT3Bl
cmF0aW9uOjpjcmVhdGUoVHJhbnNmb3JtYXRpb25NYXRyaXgoKSkpOworCisgICAgY2FzZSBUcmFu
c2Zvcm1PcGVyYXRpb246OlBFUlNQRUNUSVZFOgorICAgICAgICByZXR1cm4gZGVjb2RlT3BlcmF0
aW9uKGRlY29kZXIsIG9wZXJhdGlvbiwgUGVyc3BlY3RpdmVUcmFuc2Zvcm1PcGVyYXRpb246OmNy
ZWF0ZShMZW5ndGgoMCwgV2ViQ29yZTo6Rml4ZWQpKSk7CisKKyAgICBjYXNlIFRyYW5zZm9ybU9w
ZXJhdGlvbjo6SURFTlRJVFk6CisgICAgY2FzZSBUcmFuc2Zvcm1PcGVyYXRpb246Ok5PTkU6Cisg
ICAgICAgIG9wZXJhdGlvbiA9IElkZW50aXR5VHJhbnNmb3JtT3BlcmF0aW9uOjpjcmVhdGUoKTsK
KyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorCisgICAgcmV0dXJuIGZhbHNlOworfQorCit2
b2lkIEFyZ3VtZW50Q29kZXI8VHJhbnNmb3JtT3BlcmF0aW9ucz46OmVuY29kZShBcmd1bWVudEVu
Y29kZXIqIGVuY29kZXIsIGNvbnN0IFRyYW5zZm9ybU9wZXJhdGlvbnMmIG9wZXJhdGlvbnMpCit7
CisgICAgV1RGOjpWZWN0b3I8UmVmUHRyPFRyYW5zZm9ybU9wZXJhdGlvbj4gPiBvcGVyYXRpb25z
VmVjdG9yID0gb3BlcmF0aW9ucy5vcGVyYXRpb25zKCk7CisgICAgaW50IHNpemUgPSBvcGVyYXRp
b25zVmVjdG9yLnNpemUoKTsKKyAgICBlbmNvZGVyLT5lbmNvZGVJbnQzMihzaXplKTsKKyAgICBm
b3IgKGludCBpID0gMDsgaSA8IHNpemU7ICsraSkKKyAgICAgICAgQXJndW1lbnRDb2RlcjxSZWZQ
dHI8VHJhbnNmb3JtT3BlcmF0aW9uPiA+OjplbmNvZGUoZW5jb2Rlciwgb3BlcmF0aW9uc1ZlY3Rv
cltpXSk7Cit9CisKK2Jvb2wgQXJndW1lbnRDb2RlcjxUcmFuc2Zvcm1PcGVyYXRpb25zPjo6ZGVj
b2RlKEFyZ3VtZW50RGVjb2RlciogZGVjb2RlciwgVHJhbnNmb3JtT3BlcmF0aW9ucyYgb3BlcmF0
aW9ucykKK3sKKyAgICBpbnQgc2l6ZTsKKyAgICBpZiAoIWRlY29kZXItPmRlY29kZUludDMyKHNp
emUpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBXVEY6OlZlY3RvcjxSZWZQdHI8VHJh
bnNmb3JtT3BlcmF0aW9uPiA+JiBvcGVyYXRpb25WZWN0b3IgPSBvcGVyYXRpb25zLm9wZXJhdGlv
bnMoKTsKKyAgICBvcGVyYXRpb25WZWN0b3IuY2xlYXIoKTsKKyAgICBvcGVyYXRpb25WZWN0b3Iu
cmVzaXplKHNpemUpOworICAgIGZvciAoaW50IGkgPSAwOyBpIDwgc2l6ZTsgKytpKSB7CisgICAg
ICAgIFJlZlB0cjxUcmFuc2Zvcm1PcGVyYXRpb24+IG9wZXJhdGlvbjsKKyAgICAgICAgaWYgKCFB
cmd1bWVudENvZGVyPFJlZlB0cjxUcmFuc2Zvcm1PcGVyYXRpb24+ID46OmRlY29kZShkZWNvZGVy
LCBvcGVyYXRpb24pKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICBvcGVyYXRp
b25WZWN0b3JbaV0gPSBvcGVyYXRpb247CisgICAgfQorCisgICAgcmV0dXJuIHRydWU7Cit9CisK
K3RlbXBsYXRlPHR5cGVuYW1lIFQ+CitzdGF0aWMgdm9pZCBlbmNvZGVCb29sQW5kVmFsdWUoQXJn
dW1lbnRFbmNvZGVyKiBlbmNvZGVyLCBib29sIGlzU2V0LCBjb25zdCBUJiB2YWx1ZSkKK3sKKyAg
ICBlbmNvZGVyLT5lbmNvZGVCb29sKGlzU2V0KTsKKyAgICBpZiAoaXNTZXQpCisgICAgICAgIGVu
Y29kZXItPmVuY29kZSh2YWx1ZSk7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+CitzdGF0aWMg
dm9pZCBlbmNvZGVCb29sQW5kRW51bVZhbHVlKEFyZ3VtZW50RW5jb2RlciogZW5jb2RlciwgYm9v
bCBpc1NldCwgVCB2YWx1ZSkKK3sKKyAgICBlbmNvZGVyLT5lbmNvZGVCb29sKGlzU2V0KTsKKyAg
ICBpZiAoaXNTZXQpCisgICAgICAgIGVuY29kZXItPmVuY29kZUVudW0odmFsdWUpOworfQorCit2
b2lkIEFyZ3VtZW50Q29kZXI8QW5pbWF0aW9uPjo6ZW5jb2RlKEFyZ3VtZW50RW5jb2RlciogZW5j
b2RlciwgY29uc3QgQW5pbWF0aW9uJiBhbmltYXRpb24pCit7CisgICAgZW5jb2RlQm9vbEFuZFZh
bHVlKGVuY29kZXIsIGFuaW1hdGlvbi5pc0RlbGF5U2V0KCksIGFuaW1hdGlvbi5kZWxheSgpKTsK
KyAgICBlbmNvZGVCb29sQW5kRW51bVZhbHVlKGVuY29kZXIsIGFuaW1hdGlvbi5pc0RpcmVjdGlv
blNldCgpLCBhbmltYXRpb24uZGlyZWN0aW9uKCkpOworICAgIGVuY29kZUJvb2xBbmRWYWx1ZShl
bmNvZGVyLCBhbmltYXRpb24uaXNEdXJhdGlvblNldCgpLCBhbmltYXRpb24uZHVyYXRpb24oKSk7
CisgICAgZW5jb2RlQm9vbEFuZFZhbHVlKGVuY29kZXIsIGFuaW1hdGlvbi5pc0ZpbGxNb2RlU2V0
KCksIGFuaW1hdGlvbi5maWxsTW9kZSgpKTsKKyAgICBlbmNvZGVCb29sQW5kVmFsdWUoZW5jb2Rl
ciwgYW5pbWF0aW9uLmlzSXRlcmF0aW9uQ291bnRTZXQoKSwgYW5pbWF0aW9uLml0ZXJhdGlvbkNv
dW50KCkpOworICAgIGVuY29kZUJvb2xBbmRWYWx1ZShlbmNvZGVyLCBhbmltYXRpb24uaXNOYW1l
U2V0KCksIGFuaW1hdGlvbi5uYW1lKCkpOworICAgIGVuY29kZUJvb2xBbmRFbnVtVmFsdWUoZW5j
b2RlciwgYW5pbWF0aW9uLmlzUGxheVN0YXRlU2V0KCksIGFuaW1hdGlvbi5wbGF5U3RhdGUoKSk7
CisgICAgZW5jb2RlQm9vbEFuZFZhbHVlKGVuY29kZXIsIGFuaW1hdGlvbi5pc1Byb3BlcnR5U2V0
KCksIGFuaW1hdGlvbi5wcm9wZXJ0eSgpKTsKKyAgICBlbmNvZGVCb29sQW5kVmFsdWU8UmVmUHRy
PFRpbWluZ0Z1bmN0aW9uPiA+KGVuY29kZXIsIGFuaW1hdGlvbi5pc1RpbWluZ0Z1bmN0aW9uU2V0
KCksIGFuaW1hdGlvbi50aW1pbmdGdW5jdGlvbigpKTsKKyAgICBlbmNvZGVyLT5lbmNvZGVCb29s
KGFuaW1hdGlvbi5pc05vbmVBbmltYXRpb24oKSk7Cit9CisKKwordGVtcGxhdGU8dHlwZW5hbWUg
VD4KK3N0YXRpYyBib29sIGRlY29kZUJvb2xBbmRWYWx1ZShBcmd1bWVudERlY29kZXIqIGRlY29k
ZXIsIGJvb2wmIGlzU2V0LCBUJiB2YWx1ZSkKK3sKKyAgICBpZiAoIWRlY29kZXItPmRlY29kZUJv
b2woaXNTZXQpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgaWYgKCFpc1NldCkKKyAgICAg
ICAgcmV0dXJuIHRydWU7CisKKyAgICByZXR1cm4gZGVjb2Rlci0+ZGVjb2RlKHZhbHVlKTsKK30K
KwordGVtcGxhdGU8dHlwZW5hbWUgVD4KK3N0YXRpYyBib29sIGRlY29kZUJvb2xBbmRFbnVtVmFs
dWUoQXJndW1lbnREZWNvZGVyKiBkZWNvZGVyLCBib29sJiBpc1NldCwgVCYgdmFsdWUpCit7Cisg
ICAgaWYgKCFkZWNvZGVyLT5kZWNvZGVCb29sKGlzU2V0KSkKKyAgICAgICAgcmV0dXJuIGZhbHNl
OworICAgIGlmICghaXNTZXQpCisgICAgICAgIHJldHVybiB0cnVlOworCisgICAgcmV0dXJuIGRl
Y29kZXItPmRlY29kZUVudW0odmFsdWUpOworfQorCitib29sIEFyZ3VtZW50Q29kZXI8QW5pbWF0
aW9uPjo6ZGVjb2RlKEFyZ3VtZW50RGVjb2RlciogZGVjb2RlciwgQW5pbWF0aW9uJiBhbmltYXRp
b24pCit7CisgICAgYm9vbCBpc0RlbGF5U2V0LCBpc0RpcmVjdGlvblNldCwgaXNEdXJhdGlvblNl
dCwgaXNGaWxsTW9kZVNldCwgaXNJdGVyYXRpb25Db3VudFNldCwgaXNOYW1lU2V0LCBpc1BsYXlT
dGF0ZVNldCwgaXNQcm9wZXJ0eVNldCwgaXNUaW1pbmdGdW5jdGlvblNldDsKKyAgICBpbnQgcHJv
cGVydHksIGl0ZXJhdGlvbkNvdW50LCBmaWxsTW9kZTsKKyAgICBkb3VibGUgZHVyYXRpb247Cisg
ICAgUmVmUHRyPFRpbWluZ0Z1bmN0aW9uPiB0aW1pbmdGdW5jdGlvbjsKKyAgICBTdHJpbmcgbmFt
ZTsKKworICAgIGFuaW1hdGlvbi5jbGVhckFsbCgpOworCisgICAgZG91YmxlIGRlbGF5OworICAg
IGlmICghZGVjb2RlQm9vbEFuZFZhbHVlKGRlY29kZXIsIGlzRGVsYXlTZXQsIGRlbGF5KSkKKyAg
ICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgQW5pbWF0aW9uOjpBbmltYXRpb25EaXJlY3Rpb24g
ZGlyZWN0aW9uOworICAgIGlmICghZGVjb2RlQm9vbEFuZEVudW1WYWx1ZShkZWNvZGVyLCBpc0Rp
cmVjdGlvblNldCwgZGlyZWN0aW9uKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGlmICgh
ZGVjb2RlQm9vbEFuZFZhbHVlKGRlY29kZXIsIGlzRHVyYXRpb25TZXQsIGR1cmF0aW9uKSkKKyAg
ICAgICAgcmV0dXJuIGZhbHNlOworICAgIGlmICghZGVjb2RlQm9vbEFuZFZhbHVlKGRlY29kZXIs
IGlzRmlsbE1vZGVTZXQsIGZpbGxNb2RlKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGlm
ICghZGVjb2RlQm9vbEFuZFZhbHVlKGRlY29kZXIsIGlzSXRlcmF0aW9uQ291bnRTZXQsIGl0ZXJh
dGlvbkNvdW50KSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGlmICghZGVjb2RlQm9vbEFu
ZFZhbHVlKGRlY29kZXIsIGlzTmFtZVNldCwgbmFtZSkpCisgICAgICAgIHJldHVybiBmYWxzZTsK
KworICAgIEVBbmltUGxheVN0YXRlIHBsYXlTdGF0ZTsKKyAgICBpZiAoIWRlY29kZUJvb2xBbmRF
bnVtVmFsdWUoZGVjb2RlciwgaXNQbGF5U3RhdGVTZXQsIHBsYXlTdGF0ZSkpCisgICAgICAgIHJl
dHVybiBmYWxzZTsKKyAgICBpZiAoIWRlY29kZUJvb2xBbmRWYWx1ZShkZWNvZGVyLCBpc1Byb3Bl
cnR5U2V0LCBwcm9wZXJ0eSkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBpZiAoIWRlY29k
ZUJvb2xBbmRWYWx1ZTxSZWZQdHI8VGltaW5nRnVuY3Rpb24+ID4oZGVjb2RlciwgaXNUaW1pbmdG
dW5jdGlvblNldCwgdGltaW5nRnVuY3Rpb24pKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAg
ICBpZiAoaXNEZWxheVNldCkKKyAgICAgICAgYW5pbWF0aW9uLnNldERlbGF5KGRlbGF5KTsKKyAg
ICBpZiAoaXNEaXJlY3Rpb25TZXQpCisgICAgICAgIGFuaW1hdGlvbi5zZXREaXJlY3Rpb24oZGly
ZWN0aW9uKTsKKyAgICBpZiAoaXNEdXJhdGlvblNldCkKKyAgICAgICAgYW5pbWF0aW9uLnNldER1
cmF0aW9uKGR1cmF0aW9uKTsKKyAgICBpZiAoaXNGaWxsTW9kZVNldCkKKyAgICAgICAgYW5pbWF0
aW9uLnNldEZpbGxNb2RlKGZpbGxNb2RlKTsKKyAgICBpZiAoaXNJdGVyYXRpb25Db3VudFNldCkK
KyAgICAgICAgYW5pbWF0aW9uLnNldEl0ZXJhdGlvbkNvdW50KGl0ZXJhdGlvbkNvdW50KTsKKyAg
ICBpZiAoaXNOYW1lU2V0KQorICAgICAgICBhbmltYXRpb24uc2V0TmFtZShuYW1lKTsKKyAgICBp
ZiAoaXNQbGF5U3RhdGVTZXQpCisgICAgICAgIGFuaW1hdGlvbi5zZXRQbGF5U3RhdGUocGxheVN0
YXRlKTsKKyAgICBpZiAoaXNQcm9wZXJ0eVNldCkKKyAgICAgICAgYW5pbWF0aW9uLnNldFByb3Bl
cnR5KHByb3BlcnR5KTsKKyAgICBpZiAoaXNUaW1pbmdGdW5jdGlvblNldCkKKyAgICAgICAgYW5p
bWF0aW9uLnNldFRpbWluZ0Z1bmN0aW9uKHRpbWluZ0Z1bmN0aW9uKTsKKworICAgIHJldHVybiB0
cnVlOworfQorCiB9IC8vIG5hbWVzcGFjZSBDb3JlSVBDCkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9T
aGFyZWQvV2ViQ29yZUFyZ3VtZW50Q29kZXJzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktp
dDIvU2hhcmVkL1dlYkNvcmVBcmd1bWVudENvZGVycy5oCShyZXZpc2lvbiA4ODk3MykKKysrIFNv
dXJjZS9XZWJLaXQyL1NoYXJlZC9XZWJDb3JlQXJndW1lbnRDb2RlcnMuaAkod29ya2luZyBjb3B5
KQpAQCAtMTkwLDQ0MSArMTkwLDQ5IEBAIHRlbXBsYXRlPD4gc3RydWN0IEFyZ3VtZW50Q29kZXI8
V2ViQ29yZToKIAogI2lmIFBMQVRGT1JNKE1BQykKIHRlbXBsYXRlPD4gc3RydWN0IEFyZ3VtZW50
Q29kZXI8V2ViQ29yZTo6S2V5cHJlc3NDb21tYW5kPiB7Ci0gICAgc3RhdGljIHZvaWQgZW5jb2Rl
KEFyZ3VtZW50RW5jb2RlciogZW5jb2RlciwgY29uc3QgV2ViQ29yZTo6S2V5cHJlc3NDb21tYW5k
JiBrZXlwcmVzc0NvbW1hbmQpCi0gICAgewotICAgICAgICBlbmNvZGVyLT5lbmNvZGUoQ29yZUlQ
Qzo6SW4oa2V5cHJlc3NDb21tYW5kLmNvbW1hbmROYW1lLCBrZXlwcmVzc0NvbW1hbmQudGV4dCkp
OwotICAgIH0KLSAgICAKLSAgICBzdGF0aWMgYm9vbCBkZWNvZGUoQXJndW1lbnREZWNvZGVyKiBk
ZWNvZGVyLCBXZWJDb3JlOjpLZXlwcmVzc0NvbW1hbmQmIGtleXByZXNzQ29tbWFuZCkKLSAgICB7
Ci0gICAgICAgIHJldHVybiBkZWNvZGVyLT5kZWNvZGUoQ29yZUlQQzo6T3V0KGtleXByZXNzQ29t
bWFuZC5jb21tYW5kTmFtZSwga2V5cHJlc3NDb21tYW5kLnRleHQpKTsKLSAgICB9CisgICAgc3Rh
dGljIHZvaWQgZW5jb2RlKEFyZ3VtZW50RW5jb2RlciosIGNvbnN0IFdlYkNvcmU6OktleXByZXNz
Q29tbWFuZCYpOworICAgIHN0YXRpYyBib29sIGRlY29kZShBcmd1bWVudERlY29kZXIqLCBXZWJD
b3JlOjpLZXlwcmVzc0NvbW1hbmQmKTsKIH07CiAjZW5kaWYKIAogdGVtcGxhdGU8PiBzdHJ1Y3Qg
QXJndW1lbnRDb2RlcjxXZWJDb3JlOjpDb21wb3NpdGlvblVuZGVybGluZT4gewotICAgIHN0YXRp
YyB2b2lkIGVuY29kZShBcmd1bWVudEVuY29kZXIqIGVuY29kZXIsIGNvbnN0IFdlYkNvcmU6OkNv
bXBvc2l0aW9uVW5kZXJsaW5lJiB1bmRlcmxpbmUpCi0gICAgewotICAgICAgICBlbmNvZGVyLT5l
bmNvZGUoQ29yZUlQQzo6SW4odW5kZXJsaW5lLnN0YXJ0T2Zmc2V0LCB1bmRlcmxpbmUuZW5kT2Zm
c2V0LCB1bmRlcmxpbmUudGhpY2ssIHVuZGVybGluZS5jb2xvcikpOwotICAgIH0KLSAgICAKLSAg
ICBzdGF0aWMgYm9vbCBkZWNvZGUoQXJndW1lbnREZWNvZGVyKiBkZWNvZGVyLCBXZWJDb3JlOjpD
b21wb3NpdGlvblVuZGVybGluZSYgdW5kZXJsaW5lKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGRl
Y29kZXItPmRlY29kZShDb3JlSVBDOjpPdXQodW5kZXJsaW5lLnN0YXJ0T2Zmc2V0LCB1bmRlcmxp
bmUuZW5kT2Zmc2V0LCB1bmRlcmxpbmUudGhpY2ssIHVuZGVybGluZS5jb2xvcikpOwotICAgIH0K
KyAgICBzdGF0aWMgdm9pZCBlbmNvZGUoQXJndW1lbnRFbmNvZGVyKiwgY29uc3QgV2ViQ29yZTo6
Q29tcG9zaXRpb25VbmRlcmxpbmUmKTsKKyAgICBzdGF0aWMgYm9vbCBkZWNvZGUoQXJndW1lbnRE
ZWNvZGVyKiwgV2ViQ29yZTo6Q29tcG9zaXRpb25VbmRlcmxpbmUmKTsKIH07CiAKIHRlbXBsYXRl
PD4gc3RydWN0IEFyZ3VtZW50Q29kZXI8V2ViQ29yZTo6RGF0YWJhc2VEZXRhaWxzPiB7Ci0gICAg
c3RhdGljIHZvaWQgZW5jb2RlKEFyZ3VtZW50RW5jb2RlciogZW5jb2RlciwgY29uc3QgV2ViQ29y
ZTo6RGF0YWJhc2VEZXRhaWxzJiBkZXRhaWxzKQotICAgIHsKLSAgICAgICAgZW5jb2Rlci0+ZW5j
b2RlKENvcmVJUEM6OkluKGRldGFpbHMubmFtZSgpLCBkZXRhaWxzLmRpc3BsYXlOYW1lKCksIGRl
dGFpbHMuZXhwZWN0ZWRVc2FnZSgpLCBkZXRhaWxzLmN1cnJlbnRVc2FnZSgpKSk7Ci0gICAgfQot
ICAgIAotICAgIHN0YXRpYyBib29sIGRlY29kZShBcmd1bWVudERlY29kZXIqIGRlY29kZXIsIFdl
YkNvcmU6OkRhdGFiYXNlRGV0YWlscyYgZGV0YWlscykKLSAgICB7Ci0gICAgICAgIFN0cmluZyBu
YW1lOwotICAgICAgICBTdHJpbmcgZGlzcGxheU5hbWU7Ci0gICAgICAgIHVpbnQ2NF90IGV4cGVj
dGVkVXNhZ2U7Ci0gICAgICAgIHVpbnQ2NF90IGN1cnJlbnRVc2FnZTsKLSAgICAgICAgaWYgKCFk
ZWNvZGVyLT5kZWNvZGUoQ29yZUlQQzo6T3V0KG5hbWUsIGRpc3BsYXlOYW1lLCBleHBlY3RlZFVz
YWdlLCBjdXJyZW50VXNhZ2UpKSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAg
Ci0gICAgICAgIGRldGFpbHMgPSBXZWJDb3JlOjpEYXRhYmFzZURldGFpbHMobmFtZSwgZGlzcGxh
eU5hbWUsIGV4cGVjdGVkVXNhZ2UsIGN1cnJlbnRVc2FnZSk7Ci0gICAgICAgIHJldHVybiB0cnVl
OwotICAgIH0KKyAgICBzdGF0aWMgdm9pZCBlbmNvZGUoQXJndW1lbnRFbmNvZGVyKiwgY29uc3Qg
V2ViQ29yZTo6RGF0YWJhc2VEZXRhaWxzJik7CisgICAgc3RhdGljIGJvb2wgZGVjb2RlKEFyZ3Vt
ZW50RGVjb2RlciosIFdlYkNvcmU6OkRhdGFiYXNlRGV0YWlscyYpOwogfTsKIAogdGVtcGxhdGU8
PiBzdHJ1Y3QgQXJndW1lbnRDb2RlcjxXZWJDb3JlOjpHcmFtbWFyRGV0YWlsPiB7Ci0gICAgc3Rh
dGljIHZvaWQgZW5jb2RlKEFyZ3VtZW50RW5jb2RlciogZW5jb2RlciwgY29uc3QgV2ViQ29yZTo6
R3JhbW1hckRldGFpbCYgZGV0YWlsKQotICAgIHsKLSAgICAgICAgZW5jb2Rlci0+ZW5jb2RlSW50
MzIoZGV0YWlsLmxvY2F0aW9uKTsKLSAgICAgICAgZW5jb2Rlci0+ZW5jb2RlSW50MzIoZGV0YWls
Lmxlbmd0aCk7Ci0gICAgICAgIGVuY29kZXItPmVuY29kZShkZXRhaWwuZ3Vlc3Nlcyk7Ci0gICAg
ICAgIGVuY29kZXItPmVuY29kZShkZXRhaWwudXNlckRlc2NyaXB0aW9uKTsKLSAgICB9Ci0KLSAg
ICBzdGF0aWMgYm9vbCBkZWNvZGUoQXJndW1lbnREZWNvZGVyKiBkZWNvZGVyLCBXZWJDb3JlOjpH
cmFtbWFyRGV0YWlsJiBkZXRhaWwpCi0gICAgewotICAgICAgICBpZiAoIWRlY29kZXItPmRlY29k
ZUludDMyKGRldGFpbC5sb2NhdGlvbikpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAg
ICAgIGlmICghZGVjb2Rlci0+ZGVjb2RlSW50MzIoZGV0YWlsLmxlbmd0aCkpCi0gICAgICAgICAg
ICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIGlmICghZGVjb2Rlci0+ZGVjb2RlKGRldGFpbC5ndWVz
c2VzKSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgaWYgKCFkZWNvZGVyLT5k
ZWNvZGUoZGV0YWlsLnVzZXJEZXNjcmlwdGlvbikpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7
Ci0KLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQorICAgIHN0YXRpYyB2b2lkIGVuY29kZShB
cmd1bWVudEVuY29kZXIqLCBjb25zdCBXZWJDb3JlOjpHcmFtbWFyRGV0YWlsJik7CisgICAgc3Rh
dGljIGJvb2wgZGVjb2RlKEFyZ3VtZW50RGVjb2RlciosIFdlYkNvcmU6OkdyYW1tYXJEZXRhaWwm
KTsKIH07CiAKIHRlbXBsYXRlPD4gc3RydWN0IEFyZ3VtZW50Q29kZXI8V2ViQ29yZTo6VGV4dENo
ZWNraW5nUmVzdWx0PiB7Ci0gICAgc3RhdGljIHZvaWQgZW5jb2RlKEFyZ3VtZW50RW5jb2Rlciog
ZW5jb2RlciwgY29uc3QgV2ViQ29yZTo6VGV4dENoZWNraW5nUmVzdWx0JiByZXN1bHQpCi0gICAg
ewotICAgICAgICBlbmNvZGVyLT5lbmNvZGVFbnVtKHJlc3VsdC50eXBlKTsKLSAgICAgICAgZW5j
b2Rlci0+ZW5jb2RlSW50MzIocmVzdWx0LmxvY2F0aW9uKTsKLSAgICAgICAgZW5jb2Rlci0+ZW5j
b2RlSW50MzIocmVzdWx0Lmxlbmd0aCk7Ci0gICAgICAgIGVuY29kZXItPmVuY29kZShyZXN1bHQu
ZGV0YWlscyk7Ci0gICAgICAgIGVuY29kZXItPmVuY29kZShyZXN1bHQucmVwbGFjZW1lbnQpOwot
ICAgIH0KLQotICAgIHN0YXRpYyBib29sIGRlY29kZShBcmd1bWVudERlY29kZXIqIGRlY29kZXIs
IFdlYkNvcmU6OlRleHRDaGVja2luZ1Jlc3VsdCYgcmVzdWx0KQotICAgIHsKLSAgICAgICAgaWYg
KCFkZWNvZGVyLT5kZWNvZGVFbnVtKHJlc3VsdC50eXBlKSkKLSAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKLSAgICAgICAgaWYgKCFkZWNvZGVyLT5kZWNvZGVJbnQzMihyZXN1bHQubG9jYXRpb24p
KQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICBpZiAoIWRlY29kZXItPmRlY29k
ZUludDMyKHJlc3VsdC5sZW5ndGgpKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAg
ICBpZiAoIWRlY29kZXItPmRlY29kZShyZXN1bHQuZGV0YWlscykpCi0gICAgICAgICAgICByZXR1
cm4gZmFsc2U7Ci0gICAgICAgIGlmICghZGVjb2Rlci0+ZGVjb2RlKHJlc3VsdC5yZXBsYWNlbWVu
dCkpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAg
IH0KKyAgICBzdGF0aWMgdm9pZCBlbmNvZGUoQXJndW1lbnRFbmNvZGVyKiwgY29uc3QgV2ViQ29y
ZTo6VGV4dENoZWNraW5nUmVzdWx0Jik7CisgICAgc3RhdGljIGJvb2wgZGVjb2RlKEFyZ3VtZW50
RGVjb2RlciosIFdlYkNvcmU6OlRleHRDaGVja2luZ1Jlc3VsdCYpOwogfTsKIAogdGVtcGxhdGU8
PiBzdHJ1Y3QgQXJndW1lbnRDb2RlcjxSZWZQdHI8V2ViQ29yZTo6VGltaW5nRnVuY3Rpb24+ID4g
ewotICAgIHN0YXRpYyB2b2lkIGVuY29kZShBcmd1bWVudEVuY29kZXIqIGVuY29kZXIsIGNvbnN0
IFJlZlB0cjxXZWJDb3JlOjpUaW1pbmdGdW5jdGlvbj4mIGZ1bmN0aW9uKQotICAgIHsKLSAgICAg
ICAgLy8gV2UgZG9uJ3Qgd2FudCB0byBlbmNvZGUgbnVsbC1yZWZlcmVuY2VzLgotICAgICAgICBB
U1NFUlQoZnVuY3Rpb24pOwotCi0gICAgICAgIFdlYkNvcmU6OlRpbWluZ0Z1bmN0aW9uOjpUaW1p
bmdGdW5jdGlvblR5cGUgdHlwZSA9IGZ1bmN0aW9uLT50eXBlKCk7Ci0gICAgICAgIGVuY29kZXIt
PmVuY29kZUludDMyKHR5cGUpOwotICAgICAgICBzd2l0Y2ggKHR5cGUpIHsKLSAgICAgICAgY2Fz
ZSBXZWJDb3JlOjpUaW1pbmdGdW5jdGlvbjo6TGluZWFyRnVuY3Rpb246Ci0gICAgICAgICAgICBi
cmVhazsKLSAgICAgICAgY2FzZSBXZWJDb3JlOjpUaW1pbmdGdW5jdGlvbjo6Q3ViaWNCZXppZXJG
dW5jdGlvbjogewotICAgICAgICAgICAgV2ViQ29yZTo6Q3ViaWNCZXppZXJUaW1pbmdGdW5jdGlv
biogY3ViaWNGdW5jdGlvbiA9IHN0YXRpY19jYXN0PFdlYkNvcmU6OkN1YmljQmV6aWVyVGltaW5n
RnVuY3Rpb24qPihmdW5jdGlvbi5nZXQoKSk7Ci0gICAgICAgICAgICBlbmNvZGVyLT5lbmNvZGVE
b3VibGUoY3ViaWNGdW5jdGlvbi0+eDEoKSk7Ci0gICAgICAgICAgICBlbmNvZGVyLT5lbmNvZGVE
b3VibGUoY3ViaWNGdW5jdGlvbi0+eTEoKSk7Ci0gICAgICAgICAgICBlbmNvZGVyLT5lbmNvZGVE
b3VibGUoY3ViaWNGdW5jdGlvbi0+eDIoKSk7Ci0gICAgICAgICAgICBlbmNvZGVyLT5lbmNvZGVE
b3VibGUoY3ViaWNGdW5jdGlvbi0+eTIoKSk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAg
fQotICAgICAgICBjYXNlIFdlYkNvcmU6OlRpbWluZ0Z1bmN0aW9uOjpTdGVwc0Z1bmN0aW9uOiB7
Ci0gICAgICAgICAgICBXZWJDb3JlOjpTdGVwc1RpbWluZ0Z1bmN0aW9uKiBzdGVwc0Z1bmN0aW9u
ID0gc3RhdGljX2Nhc3Q8V2ViQ29yZTo6U3RlcHNUaW1pbmdGdW5jdGlvbio+KGZ1bmN0aW9uLmdl
dCgpKTsKLSAgICAgICAgICAgIGVuY29kZXItPmVuY29kZUludDMyKHN0ZXBzRnVuY3Rpb24tPm51
bWJlck9mU3RlcHMoKSk7Ci0gICAgICAgICAgICBlbmNvZGVyLT5lbmNvZGVCb29sKHN0ZXBzRnVu
Y3Rpb24tPnN0ZXBBdFN0YXJ0KCkpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAg
ICAgICAgfQotICAgIH0KLQotICAgIHN0YXRpYyBib29sIGRlY29kZShBcmd1bWVudERlY29kZXIq
IGRlY29kZXIsIFJlZlB0cjxXZWJDb3JlOjpUaW1pbmdGdW5jdGlvbj4mIGZ1bmN0aW9uKQotICAg
IHsKLSAgICAgICAgV2ViQ29yZTo6VGltaW5nRnVuY3Rpb246OlRpbWluZ0Z1bmN0aW9uVHlwZSB0
eXBlOwotICAgICAgICBpbnQgdHlwZUludDsKLSAgICAgICAgaWYgKCFkZWNvZGVyLT5kZWNvZGVJ
bnQzMih0eXBlSW50KSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgICAgICB0eXBl
ID0gc3RhdGljX2Nhc3Q8V2ViQ29yZTo6VGltaW5nRnVuY3Rpb246OlRpbWluZ0Z1bmN0aW9uVHlw
ZT4odHlwZUludCk7Ci0gICAgICAgIHN3aXRjaCAodHlwZSkgewotICAgICAgICBjYXNlIFdlYkNv
cmU6OlRpbWluZ0Z1bmN0aW9uOjpMaW5lYXJGdW5jdGlvbjoKLSAgICAgICAgICAgIGZ1bmN0aW9u
ID0gV2ViQ29yZTo6TGluZWFyVGltaW5nRnVuY3Rpb246OmNyZWF0ZSgpOwotICAgICAgICAgICAg
cmV0dXJuIHRydWU7Ci0KLSAgICAgICAgY2FzZSBXZWJDb3JlOjpUaW1pbmdGdW5jdGlvbjo6Q3Vi
aWNCZXppZXJGdW5jdGlvbjogewotICAgICAgICAgICAgZG91YmxlIHgxLCB5MSwgeDIsIHkyOwot
ICAgICAgICAgICAgaWYgKCFkZWNvZGVyLT5kZWNvZGVEb3VibGUoeDEpKQotICAgICAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgICAgIGlmICghZGVjb2Rlci0+ZGVjb2RlRG91Ymxl
KHkxKSkKLSAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgICBpZiAoIWRl
Y29kZXItPmRlY29kZURvdWJsZSh4MikpCi0gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwot
ICAgICAgICAgICAgaWYgKCFkZWNvZGVyLT5kZWNvZGVEb3VibGUoeTIpKQotICAgICAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgICAgIGZ1bmN0aW9uID0gV2ViQ29yZTo6Q3ViaWNC
ZXppZXJUaW1pbmdGdW5jdGlvbjo6Y3JlYXRlKHgxLCB5MSwgeDIsIHkyKTsKLSAgICAgICAgICAg
IHJldHVybiB0cnVlOwotICAgICAgICB9Ci0KLSAgICAgICAgY2FzZSBXZWJDb3JlOjpUaW1pbmdG
dW5jdGlvbjo6U3RlcHNGdW5jdGlvbjogewotICAgICAgICAgICAgaW50IG51bVN0ZXBzOwotICAg
ICAgICAgICAgYm9vbCBzdGVwQXRTdGFydDsKLSAgICAgICAgICAgIGlmICghZGVjb2Rlci0+ZGVj
b2RlSW50MzIobnVtU3RlcHMpKQotICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAg
ICAgICAgIGlmICghZGVjb2Rlci0+ZGVjb2RlQm9vbChzdGVwQXRTdGFydCkpCi0gICAgICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgICAgICAgICBmdW5jdGlvbiA9IFdlYkNvcmU6OlN0
ZXBzVGltaW5nRnVuY3Rpb246OmNyZWF0ZShudW1TdGVwcywgc3RlcEF0U3RhcnQpOwotICAgICAg
ICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIH0KLQotICAgICAgICB9Ci0KLSAgICAgICAgcmV0
dXJuIGZhbHNlOwotICAgIH0KKyAgICBzdGF0aWMgdm9pZCBlbmNvZGUoQXJndW1lbnRFbmNvZGVy
KiwgY29uc3QgUmVmUHRyPFdlYkNvcmU6OlRpbWluZ0Z1bmN0aW9uPiYpOworICAgIHN0YXRpYyBi
b29sIGRlY29kZShBcmd1bWVudERlY29kZXIqLCBSZWZQdHI8V2ViQ29yZTo6VGltaW5nRnVuY3Rp
b24+Jik7CiB9OwogCiB0ZW1wbGF0ZTw+IHN0cnVjdCBBcmd1bWVudENvZGVyPFJlZlB0cjxXZWJD
b3JlOjpUcmFuc2Zvcm1PcGVyYXRpb24+ID4gewotICAgIHRlbXBsYXRlPGNsYXNzIFQ+Ci0gICAg
c3RhdGljIGJvb2wgZGVjb2RlT3BlcmF0aW9uKEFyZ3VtZW50RGVjb2RlciogZGVjb2RlciwgUmVm
UHRyPFdlYkNvcmU6OlRyYW5zZm9ybU9wZXJhdGlvbj4mIG9wZXJhdGlvbiwgUGFzc1JlZlB0cjxU
PiBuZXdPcGVyYXRpb24pCi0gICAgewotICAgICAgICBpZiAoIUFyZ3VtZW50Q29kZXI8VD46OmRl
Y29kZShkZWNvZGVyLCAqbmV3T3BlcmF0aW9uLmdldCgpKSkKLSAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKLSAgICAgICAgb3BlcmF0aW9uID0gbmV3T3BlcmF0aW9uLmdldCgpOwotICAgICAgICBy
ZXR1cm4gdHJ1ZTsKLSAgICB9Ci0KLSAgICB0ZW1wbGF0ZTxjbGFzcyBUPgotICAgIHN0YXRpYyB2
b2lkIGVuY29kZU9wZXJhdGlvbihBcmd1bWVudEVuY29kZXIqIGVuY29kZXIsIGNvbnN0IFdlYkNv
cmU6OlRyYW5zZm9ybU9wZXJhdGlvbiogb3BlcmF0aW9uKQotICAgIHsKLSAgICAgICAgQXJndW1l
bnRDb2RlcjxUPjo6ZW5jb2RlKGVuY29kZXIsICpzdGF0aWNfY2FzdDxjb25zdCBUKj4ob3BlcmF0
aW9uKSk7Ci0gICAgfQotCi0gICAgc3RhdGljIHZvaWQgZW5jb2RlKEFyZ3VtZW50RW5jb2Rlciog
ZW5jb2RlciwgY29uc3QgUmVmUHRyPFdlYkNvcmU6OlRyYW5zZm9ybU9wZXJhdGlvbj4mIG9wZXJh
dGlvbikKLSAgICB7Ci0gICAgICAgIC8vIFdlIGRvbid0IHdhbnQgdG8gZW5jb2RlIG51bGwtcmVm
ZXJlbmNlcy4KLSAgICAgICAgQVNTRVJUKG9wZXJhdGlvbik7Ci0KLSAgICAgICAgV2ViQ29yZTo6
VHJhbnNmb3JtT3BlcmF0aW9uOjpPcGVyYXRpb25UeXBlIHR5cGUgPSBvcGVyYXRpb24tPmdldE9w
ZXJhdGlvblR5cGUoKTsKLSAgICAgICAgZW5jb2Rlci0+ZW5jb2RlSW50MzIodHlwZSk7Ci0gICAg
ICAgIHN3aXRjaCAodHlwZSkgewotICAgICAgICBjYXNlIFdlYkNvcmU6OlRyYW5zZm9ybU9wZXJh
dGlvbjo6U0NBTEU6Ci0gICAgICAgIGNhc2UgV2ViQ29yZTo6VHJhbnNmb3JtT3BlcmF0aW9uOjpT
Q0FMRV9YOgotICAgICAgICBjYXNlIFdlYkNvcmU6OlRyYW5zZm9ybU9wZXJhdGlvbjo6U0NBTEVf
WToKLSAgICAgICAgY2FzZSBXZWJDb3JlOjpUcmFuc2Zvcm1PcGVyYXRpb246OlNDQUxFX1o6Ci0g
ICAgICAgIGNhc2UgV2ViQ29yZTo6VHJhbnNmb3JtT3BlcmF0aW9uOjpTQ0FMRV8zRDoKLSAgICAg
ICAgICAgIGVuY29kZU9wZXJhdGlvbjxXZWJDb3JlOjpTY2FsZVRyYW5zZm9ybU9wZXJhdGlvbj4o
ZW5jb2Rlciwgb3BlcmF0aW9uLmdldCgpKTsKLSAgICAgICAgICAgIHJldHVybjsKLQotICAgICAg
ICBjYXNlIFdlYkNvcmU6OlRyYW5zZm9ybU9wZXJhdGlvbjo6VFJBTlNMQVRFOgotICAgICAgICBj
YXNlIFdlYkNvcmU6OlRyYW5zZm9ybU9wZXJhdGlvbjo6VFJBTlNMQVRFX1g6Ci0gICAgICAgIGNh
c2UgV2ViQ29yZTo6VHJhbnNmb3JtT3BlcmF0aW9uOjpUUkFOU0xBVEVfWToKLSAgICAgICAgY2Fz
ZSBXZWJDb3JlOjpUcmFuc2Zvcm1PcGVyYXRpb246OlRSQU5TTEFURV9aOgotICAgICAgICBjYXNl
IFdlYkNvcmU6OlRyYW5zZm9ybU9wZXJhdGlvbjo6VFJBTlNMQVRFXzNEOgotICAgICAgICAgICAg
ZW5jb2RlT3BlcmF0aW9uPFdlYkNvcmU6OlRyYW5zbGF0ZVRyYW5zZm9ybU9wZXJhdGlvbj4oZW5j
b2Rlciwgb3BlcmF0aW9uLmdldCgpKTsKLSAgICAgICAgICAgIHJldHVybjsKLQotICAgICAgICBj
YXNlIFdlYkNvcmU6OlRyYW5zZm9ybU9wZXJhdGlvbjo6Uk9UQVRFOgotICAgICAgICBjYXNlIFdl
YkNvcmU6OlRyYW5zZm9ybU9wZXJhdGlvbjo6Uk9UQVRFX1g6Ci0gICAgICAgIGNhc2UgV2ViQ29y
ZTo6VHJhbnNmb3JtT3BlcmF0aW9uOjpST1RBVEVfWToKLSAgICAgICAgY2FzZSBXZWJDb3JlOjpU
cmFuc2Zvcm1PcGVyYXRpb246OlJPVEFURV8zRDoKLSAgICAgICAgICAgIGVuY29kZU9wZXJhdGlv
bjxXZWJDb3JlOjpSb3RhdGVUcmFuc2Zvcm1PcGVyYXRpb24+KGVuY29kZXIsIG9wZXJhdGlvbi5n
ZXQoKSk7Ci0gICAgICAgICAgICByZXR1cm47Ci0KLSAgICAgICAgY2FzZSBXZWJDb3JlOjpUcmFu
c2Zvcm1PcGVyYXRpb246OlNLRVc6Ci0gICAgICAgIGNhc2UgV2ViQ29yZTo6VHJhbnNmb3JtT3Bl
cmF0aW9uOjpTS0VXX1g6Ci0gICAgICAgIGNhc2UgV2ViQ29yZTo6VHJhbnNmb3JtT3BlcmF0aW9u
OjpTS0VXX1k6Ci0gICAgICAgICAgICBlbmNvZGVPcGVyYXRpb248V2ViQ29yZTo6U2tld1RyYW5z
Zm9ybU9wZXJhdGlvbj4oZW5jb2Rlciwgb3BlcmF0aW9uLmdldCgpKTsKLSAgICAgICAgICAgIHJl
dHVybjsKLQotICAgICAgICBjYXNlIFdlYkNvcmU6OlRyYW5zZm9ybU9wZXJhdGlvbjo6TUFUUklY
OgotICAgICAgICAgICAgZW5jb2RlT3BlcmF0aW9uPFdlYkNvcmU6Ok1hdHJpeFRyYW5zZm9ybU9w
ZXJhdGlvbj4oZW5jb2Rlciwgb3BlcmF0aW9uLmdldCgpKTsKLSAgICAgICAgICAgIHJldHVybjsK
LQotICAgICAgICBjYXNlIFdlYkNvcmU6OlRyYW5zZm9ybU9wZXJhdGlvbjo6TUFUUklYXzNEOgot
ICAgICAgICAgICAgZW5jb2RlT3BlcmF0aW9uPFdlYkNvcmU6Ok1hdHJpeDNEVHJhbnNmb3JtT3Bl
cmF0aW9uPihlbmNvZGVyLCBvcGVyYXRpb24uZ2V0KCkpOwotICAgICAgICAgICAgcmV0dXJuOwot
Ci0gICAgICAgIGNhc2UgV2ViQ29yZTo6VHJhbnNmb3JtT3BlcmF0aW9uOjpQRVJTUEVDVElWRToK
LSAgICAgICAgICAgIGVuY29kZU9wZXJhdGlvbjxXZWJDb3JlOjpQZXJzcGVjdGl2ZVRyYW5zZm9y
bU9wZXJhdGlvbj4oZW5jb2Rlciwgb3BlcmF0aW9uLmdldCgpKTsKLSAgICAgICAgICAgIHJldHVy
bjsKLQotICAgICAgICBjYXNlIFdlYkNvcmU6OlRyYW5zZm9ybU9wZXJhdGlvbjo6SURFTlRJVFk6
Ci0gICAgICAgIGNhc2UgV2ViQ29yZTo6VHJhbnNmb3JtT3BlcmF0aW9uOjpOT05FOgotICAgICAg
ICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgc3RhdGljIGJvb2wgZGVjb2Rl
KEFyZ3VtZW50RGVjb2RlciogZGVjb2RlciwgUmVmUHRyPFdlYkNvcmU6OlRyYW5zZm9ybU9wZXJh
dGlvbj4mIG9wZXJhdGlvbikKLSAgICB7Ci0gICAgICAgIFdlYkNvcmU6OlRyYW5zZm9ybU9wZXJh
dGlvbjo6T3BlcmF0aW9uVHlwZSB0eXBlOwotICAgICAgICBpbnQgdHlwZUludDsKLSAgICAgICAg
aWYgKCFkZWNvZGVyLT5kZWNvZGVJbnQzMih0eXBlSW50KSkKLSAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKLSAgICAgICAgdHlwZSA9IHN0YXRpY19jYXN0PFdlYkNvcmU6OlRyYW5zZm9ybU9wZXJh
dGlvbjo6T3BlcmF0aW9uVHlwZT4odHlwZUludCk7Ci0gICAgICAgIHN3aXRjaCAodHlwZSkgewot
ICAgICAgICBjYXNlIFdlYkNvcmU6OlRyYW5zZm9ybU9wZXJhdGlvbjo6U0NBTEU6Ci0gICAgICAg
IGNhc2UgV2ViQ29yZTo6VHJhbnNmb3JtT3BlcmF0aW9uOjpTQ0FMRV9YOgotICAgICAgICBjYXNl
IFdlYkNvcmU6OlRyYW5zZm9ybU9wZXJhdGlvbjo6U0NBTEVfWToKLSAgICAgICAgY2FzZSBXZWJD
b3JlOjpUcmFuc2Zvcm1PcGVyYXRpb246OlNDQUxFX1o6Ci0gICAgICAgIGNhc2UgV2ViQ29yZTo6
VHJhbnNmb3JtT3BlcmF0aW9uOjpTQ0FMRV8zRDoKLSAgICAgICAgICAgIHJldHVybiBkZWNvZGVP
cGVyYXRpb248V2ViQ29yZTo6U2NhbGVUcmFuc2Zvcm1PcGVyYXRpb24+KGRlY29kZXIsIG9wZXJh
dGlvbiwgV2ViQ29yZTo6U2NhbGVUcmFuc2Zvcm1PcGVyYXRpb246OmNyZWF0ZSgxLjAsIDEuMCwg
dHlwZSkpOwotCi0gICAgICAgIGNhc2UgV2ViQ29yZTo6VHJhbnNmb3JtT3BlcmF0aW9uOjpUUkFO
U0xBVEU6Ci0gICAgICAgIGNhc2UgV2ViQ29yZTo6VHJhbnNmb3JtT3BlcmF0aW9uOjpUUkFOU0xB
VEVfWDoKLSAgICAgICAgY2FzZSBXZWJDb3JlOjpUcmFuc2Zvcm1PcGVyYXRpb246OlRSQU5TTEFU
RV9ZOgotICAgICAgICBjYXNlIFdlYkNvcmU6OlRyYW5zZm9ybU9wZXJhdGlvbjo6VFJBTlNMQVRF
X1o6Ci0gICAgICAgIGNhc2UgV2ViQ29yZTo6VHJhbnNmb3JtT3BlcmF0aW9uOjpUUkFOU0xBVEVf
M0Q6Ci0gICAgICAgICAgICByZXR1cm4gZGVjb2RlT3BlcmF0aW9uPFdlYkNvcmU6OlRyYW5zbGF0
ZVRyYW5zZm9ybU9wZXJhdGlvbj4oZGVjb2Rlciwgb3BlcmF0aW9uLCBXZWJDb3JlOjpUcmFuc2xh
dGVUcmFuc2Zvcm1PcGVyYXRpb246OmNyZWF0ZShXZWJDb3JlOjpMZW5ndGgoMCwgV2ViQ29yZTo6
Rml4ZWQpLCBXZWJDb3JlOjpMZW5ndGgoMCwgV2ViQ29yZTo6Rml4ZWQpLCB0eXBlKSk7Ci0KLSAg
ICAgICAgY2FzZSBXZWJDb3JlOjpUcmFuc2Zvcm1PcGVyYXRpb246OlJPVEFURToKLSAgICAgICAg
Y2FzZSBXZWJDb3JlOjpUcmFuc2Zvcm1PcGVyYXRpb246OlJPVEFURV9YOgotICAgICAgICBjYXNl
IFdlYkNvcmU6OlRyYW5zZm9ybU9wZXJhdGlvbjo6Uk9UQVRFX1k6Ci0gICAgICAgIGNhc2UgV2Vi
Q29yZTo6VHJhbnNmb3JtT3BlcmF0aW9uOjpST1RBVEVfM0Q6Ci0gICAgICAgICAgICByZXR1cm4g
ZGVjb2RlT3BlcmF0aW9uPFdlYkNvcmU6OlJvdGF0ZVRyYW5zZm9ybU9wZXJhdGlvbj4oZGVjb2Rl
ciwgb3BlcmF0aW9uLCBXZWJDb3JlOjpSb3RhdGVUcmFuc2Zvcm1PcGVyYXRpb246OmNyZWF0ZSgw
LjAsIHR5cGUpKTsKLQotICAgICAgICBjYXNlIFdlYkNvcmU6OlRyYW5zZm9ybU9wZXJhdGlvbjo6
U0tFVzoKLSAgICAgICAgY2FzZSBXZWJDb3JlOjpUcmFuc2Zvcm1PcGVyYXRpb246OlNLRVdfWDoK
LSAgICAgICAgY2FzZSBXZWJDb3JlOjpUcmFuc2Zvcm1PcGVyYXRpb246OlNLRVdfWToKLSAgICAg
ICAgICAgIHJldHVybiBkZWNvZGVPcGVyYXRpb248V2ViQ29yZTo6U2tld1RyYW5zZm9ybU9wZXJh
dGlvbj4oZGVjb2Rlciwgb3BlcmF0aW9uLCBXZWJDb3JlOjpTa2V3VHJhbnNmb3JtT3BlcmF0aW9u
OjpjcmVhdGUoMC4wLCAwLjAsIHR5cGUpKTsKLQotICAgICAgICBjYXNlIFdlYkNvcmU6OlRyYW5z
Zm9ybU9wZXJhdGlvbjo6TUFUUklYOgotICAgICAgICAgICAgcmV0dXJuIGRlY29kZU9wZXJhdGlv
bjxXZWJDb3JlOjpNYXRyaXhUcmFuc2Zvcm1PcGVyYXRpb24+KGRlY29kZXIsIG9wZXJhdGlvbiwg
V2ViQ29yZTo6TWF0cml4VHJhbnNmb3JtT3BlcmF0aW9uOjpjcmVhdGUoV2ViQ29yZTo6VHJhbnNm
b3JtYXRpb25NYXRyaXgoKSkpOwotCi0gICAgICAgIGNhc2UgV2ViQ29yZTo6VHJhbnNmb3JtT3Bl
cmF0aW9uOjpNQVRSSVhfM0Q6Ci0gICAgICAgICAgICByZXR1cm4gZGVjb2RlT3BlcmF0aW9uPFdl
YkNvcmU6Ok1hdHJpeDNEVHJhbnNmb3JtT3BlcmF0aW9uPihkZWNvZGVyLCBvcGVyYXRpb24sIFdl
YkNvcmU6Ok1hdHJpeDNEVHJhbnNmb3JtT3BlcmF0aW9uOjpjcmVhdGUoV2ViQ29yZTo6VHJhbnNm
b3JtYXRpb25NYXRyaXgoKSkpOwotCi0gICAgICAgIGNhc2UgV2ViQ29yZTo6VHJhbnNmb3JtT3Bl
cmF0aW9uOjpQRVJTUEVDVElWRToKLSAgICAgICAgICAgIHJldHVybiBkZWNvZGVPcGVyYXRpb248
V2ViQ29yZTo6UGVyc3BlY3RpdmVUcmFuc2Zvcm1PcGVyYXRpb24+KGRlY29kZXIsIG9wZXJhdGlv
biwgV2ViQ29yZTo6UGVyc3BlY3RpdmVUcmFuc2Zvcm1PcGVyYXRpb246OmNyZWF0ZShXZWJDb3Jl
OjpMZW5ndGgoMCwgV2ViQ29yZTo6Rml4ZWQpKSk7Ci0KLSAgICAgICAgY2FzZSBXZWJDb3JlOjpU
cmFuc2Zvcm1PcGVyYXRpb246OklERU5USVRZOgotICAgICAgICBjYXNlIFdlYkNvcmU6OlRyYW5z
Zm9ybU9wZXJhdGlvbjo6Tk9ORToKLSAgICAgICAgICAgIG9wZXJhdGlvbiA9IFdlYkNvcmU6Oklk
ZW50aXR5VHJhbnNmb3JtT3BlcmF0aW9uOjpjcmVhdGUoKTsKLSAgICAgICAgICAgIHJldHVybiB0
cnVlOwotICAgICAgICB9Ci0KLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KKyAgICBzdGF0
aWMgdm9pZCBlbmNvZGUoQXJndW1lbnRFbmNvZGVyKiwgY29uc3QgUmVmUHRyPFdlYkNvcmU6OlRy
YW5zZm9ybU9wZXJhdGlvbj4mKTsKKyAgICBzdGF0aWMgYm9vbCBkZWNvZGUoQXJndW1lbnREZWNv
ZGVyKiwgUmVmUHRyPFdlYkNvcmU6OlRyYW5zZm9ybU9wZXJhdGlvbj4mKTsKIH07CiAKIHRlbXBs
YXRlPD4gc3RydWN0IEFyZ3VtZW50Q29kZXI8V2ViQ29yZTo6VHJhbnNmb3JtT3BlcmF0aW9ucz4g
ewotICAgIHN0YXRpYyB2b2lkIGVuY29kZShBcmd1bWVudEVuY29kZXIqIGVuY29kZXIsIGNvbnN0
IFdlYkNvcmU6OlRyYW5zZm9ybU9wZXJhdGlvbnMmIG9wZXJhdGlvbnMpCi0gICAgewotICAgICAg
ICBXVEY6OlZlY3RvcjxSZWZQdHI8V2ViQ29yZTo6VHJhbnNmb3JtT3BlcmF0aW9uPiA+IG9wZXJh
dGlvbnNWZWN0b3IgPSBvcGVyYXRpb25zLm9wZXJhdGlvbnMoKTsKLSAgICAgICAgaW50IHNpemUg
PSBvcGVyYXRpb25zVmVjdG9yLnNpemUoKTsKLSAgICAgICAgZW5jb2Rlci0+ZW5jb2RlSW50MzIo
c2l6ZSk7Ci0gICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgc2l6ZTsgKytpKQotICAgICAgICAg
ICAgQXJndW1lbnRDb2RlcjxSZWZQdHI8V2ViQ29yZTo6VHJhbnNmb3JtT3BlcmF0aW9uPiA+Ojpl
bmNvZGUoZW5jb2Rlciwgb3BlcmF0aW9uc1ZlY3RvcltpXSk7Ci0gICAgfQotCi0gICAgc3RhdGlj
IGJvb2wgZGVjb2RlKEFyZ3VtZW50RGVjb2RlciogZGVjb2RlciwgV2ViQ29yZTo6VHJhbnNmb3Jt
T3BlcmF0aW9ucyYgb3BlcmF0aW9ucykKLSAgICB7Ci0gICAgICAgIGludCBzaXplOwotICAgICAg
ICBpZiAoIWRlY29kZXItPmRlY29kZUludDMyKHNpemUpKQotICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOwotCi0gICAgICAgIFdURjo6VmVjdG9yPFJlZlB0cjxXZWJDb3JlOjpUcmFuc2Zvcm1PcGVy
YXRpb24+ID4mIG9wZXJhdGlvblZlY3RvciA9IG9wZXJhdGlvbnMub3BlcmF0aW9ucygpOwotICAg
ICAgICBvcGVyYXRpb25WZWN0b3IuY2xlYXIoKTsKLSAgICAgICAgb3BlcmF0aW9uVmVjdG9yLnJl
c2l6ZShzaXplKTsKLSAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBzaXplOyArK2kpIHsKLSAg
ICAgICAgICAgIFJlZlB0cjxXZWJDb3JlOjpUcmFuc2Zvcm1PcGVyYXRpb24+IG9wZXJhdGlvbjsK
LSAgICAgICAgICAgIGlmICghQXJndW1lbnRDb2RlcjxSZWZQdHI8V2ViQ29yZTo6VHJhbnNmb3Jt
T3BlcmF0aW9uPiA+OjpkZWNvZGUoZGVjb2Rlciwgb3BlcmF0aW9uKSkKLSAgICAgICAgICAgICAg
ICByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgICBvcGVyYXRpb25WZWN0b3JbaV0gPSBvcGVyYXRp
b247Ci0gICAgICAgIH0KLQotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9CisgICAgc3RhdGlj
IHZvaWQgZW5jb2RlKEFyZ3VtZW50RW5jb2RlciosIGNvbnN0IFdlYkNvcmU6OlRyYW5zZm9ybU9w
ZXJhdGlvbnMmKTsKKyAgICBzdGF0aWMgYm9vbCBkZWNvZGUoQXJndW1lbnREZWNvZGVyKiwgV2Vi
Q29yZTo6VHJhbnNmb3JtT3BlcmF0aW9ucyYpOwogfTsKIAotCiB0ZW1wbGF0ZTw+IHN0cnVjdCBB
cmd1bWVudENvZGVyPFdlYkNvcmU6OkFuaW1hdGlvbj4gewotICAgIHN0YXRpYyBib29sIGVuY29k
ZUJvb2xBbmRSZXR1cm5WYWx1ZShBcmd1bWVudEVuY29kZXIqIGVuY29kZXIsIGJvb2wgdmFsdWUp
Ci0gICAgewotICAgICAgICBlbmNvZGVyLT5lbmNvZGVCb29sKHZhbHVlKTsKLSAgICAgICAgcmV0
dXJuIHZhbHVlOwotICAgIH0KLQotICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+Ci0gICAgc3RhdGlj
IHZvaWQgZW5jb2RlQm9vbEFuZFZhbHVlKEFyZ3VtZW50RW5jb2RlciogZW5jb2RlciwgYm9vbCBp
c1NldCwgY29uc3QgVCYgdmFsdWUpCi0gICAgewotICAgICAgICBpZiAoZW5jb2RlQm9vbEFuZFJl
dHVyblZhbHVlKGVuY29kZXIsIGlzU2V0KSkKLSAgICAgICAgICAgIGVuY29kZXItPmVuY29kZTxU
Pih2YWx1ZSk7Ci0gICAgfQotCi0gICAgc3RhdGljIGJvb2wgZGVjb2RlQm9vbEFuZFZhbHVlKEFy
Z3VtZW50RGVjb2RlciogZGVjb2RlciwgYm9vbCYgaXNTZXQsIGRvdWJsZSYgdmFsdWUpCi0gICAg
ewotICAgICAgICBpZiAoIWRlY29kZXItPmRlY29kZUJvb2woaXNTZXQpKQotICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOwotICAgICAgICBpZiAoIWlzU2V0KQotICAgICAgICAgICAgcmV0dXJuIHRy
dWU7Ci0KLSAgICAgICAgcmV0dXJuIGRlY29kZXItPmRlY29kZURvdWJsZSh2YWx1ZSk7Ci0gICAg
fQotCi0gICAgdGVtcGxhdGU8Y2xhc3MgVD4KLSAgICBzdGF0aWMgYm9vbCBkZWNvZGVCb29sQW5k
VmFsdWUoQXJndW1lbnREZWNvZGVyKiBkZWNvZGVyLCBib29sJiBpc1NldCwgVCYgdmFsdWUpCi0g
ICAgewotICAgICAgICBpZiAoIWRlY29kZXItPmRlY29kZUJvb2woaXNTZXQpKQotICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOwotICAgICAgICBpZiAoIWlzU2V0KQotICAgICAgICAgICAgcmV0dXJu
IHRydWU7Ci0KLSAgICAgICAgcmV0dXJuIEFyZ3VtZW50Q29kZXI8VD46OmRlY29kZShkZWNvZGVy
LCB2YWx1ZSk7Ci0gICAgfQotCi0gICAgc3RhdGljIGJvb2wgZGVjb2RlQm9vbEFuZFZhbHVlKEFy
Z3VtZW50RGVjb2RlciogZGVjb2RlciwgYm9vbCYgaXNTZXQsIGludCYgdmFsdWUpCi0gICAgewot
ICAgICAgICBpZiAoIWRlY29kZXItPmRlY29kZUJvb2woaXNTZXQpKQotICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOwotICAgICAgICBpZiAoIWlzU2V0KQotICAgICAgICAgICAgcmV0dXJuIHRydWU7
Ci0KLSAgICAgICAgcmV0dXJuIGRlY29kZXItPmRlY29kZUludDMyKHZhbHVlKTsKLSAgICB9Ci0K
LSAgICBzdGF0aWMgdm9pZCBlbmNvZGUoQXJndW1lbnRFbmNvZGVyKiBlbmNvZGVyLCBjb25zdCBX
ZWJDb3JlOjpBbmltYXRpb24mIGFuaW1hdGlvbikKLSAgICB7Ci0gICAgICAgIGVuY29kZUJvb2xB
bmRWYWx1ZShlbmNvZGVyLCBhbmltYXRpb24uaXNEZWxheVNldCgpLCBhbmltYXRpb24uZGVsYXko
KSk7Ci0gICAgICAgIGVuY29kZUJvb2xBbmRWYWx1ZTxpbnQ+KGVuY29kZXIsIGFuaW1hdGlvbi5p
c0RpcmVjdGlvblNldCgpLCBhbmltYXRpb24uZGlyZWN0aW9uKCkpOwotICAgICAgICBlbmNvZGVC
b29sQW5kVmFsdWUoZW5jb2RlciwgYW5pbWF0aW9uLmlzRHVyYXRpb25TZXQoKSwgYW5pbWF0aW9u
LmR1cmF0aW9uKCkpOwotICAgICAgICBlbmNvZGVCb29sQW5kVmFsdWUoZW5jb2RlciwgYW5pbWF0
aW9uLmlzRmlsbE1vZGVTZXQoKSwgYW5pbWF0aW9uLmZpbGxNb2RlKCkpOwotICAgICAgICBlbmNv
ZGVCb29sQW5kVmFsdWUoZW5jb2RlciwgYW5pbWF0aW9uLmlzSXRlcmF0aW9uQ291bnRTZXQoKSwg
YW5pbWF0aW9uLml0ZXJhdGlvbkNvdW50KCkpOwotCi0gICAgICAgIGlmIChlbmNvZGVCb29sQW5k
UmV0dXJuVmFsdWUoZW5jb2RlciwgYW5pbWF0aW9uLmlzTmFtZVNldCgpKSkKLSAgICAgICAgICAg
IEFyZ3VtZW50Q29kZXI8U3RyaW5nPjo6ZW5jb2RlKGVuY29kZXIsIGFuaW1hdGlvbi5uYW1lKCkp
OwotCi0gICAgICAgIGVuY29kZUJvb2xBbmRWYWx1ZTxpbnQ+KGVuY29kZXIsIGFuaW1hdGlvbi5p
c1BsYXlTdGF0ZVNldCgpLCBhbmltYXRpb24ucGxheVN0YXRlKCkpOwotICAgICAgICBlbmNvZGVC
b29sQW5kVmFsdWUoZW5jb2RlciwgYW5pbWF0aW9uLmlzUHJvcGVydHlTZXQoKSwgYW5pbWF0aW9u
LnByb3BlcnR5KCkpOwotCi0gICAgICAgIGlmIChlbmNvZGVCb29sQW5kUmV0dXJuVmFsdWUoZW5j
b2RlciwgYW5pbWF0aW9uLmlzVGltaW5nRnVuY3Rpb25TZXQoKSkpCi0gICAgICAgICAgICBBcmd1
bWVudENvZGVyPFJlZlB0cjxXZWJDb3JlOjpUaW1pbmdGdW5jdGlvbj4gPjo6ZW5jb2RlKGVuY29k
ZXIsIGFuaW1hdGlvbi50aW1pbmdGdW5jdGlvbigpKTsKLSAgICAgICAgZW5jb2Rlci0+ZW5jb2Rl
Qm9vbChhbmltYXRpb24uaXNOb25lQW5pbWF0aW9uKCkpOwotICAgIH0KLQotICAgIHN0YXRpYyBi
b29sIGRlY29kZShBcmd1bWVudERlY29kZXIqIGRlY29kZXIsIFdlYkNvcmU6OkFuaW1hdGlvbiYg
YW5pbWF0aW9uKQotICAgIHsKLSAgICAgICAgYm9vbCBpc0RlbGF5U2V0LCBpc0RpcmVjdGlvblNl
dCwgaXNEdXJhdGlvblNldCwgaXNGaWxsTW9kZVNldCwgaXNJdGVyYXRpb25Db3VudFNldCwgaXNO
YW1lU2V0LCBpc1BsYXlTdGF0ZVNldCwgaXNQcm9wZXJ0eVNldCwgaXNUaW1pbmdGdW5jdGlvblNl
dDsKLSAgICAgICAgaW50IHByb3BlcnR5LCBpdGVyYXRpb25Db3VudCwgZGlyZWN0aW9uLCBmaWxs
TW9kZSwgcGxheVN0YXRlOwotICAgICAgICBkb3VibGUgZGVsYXksIGR1cmF0aW9uOwotICAgICAg
ICBSZWZQdHI8V2ViQ29yZTo6VGltaW5nRnVuY3Rpb24+IHRpbWluZ0Z1bmN0aW9uOwotICAgICAg
ICBTdHJpbmcgbmFtZTsKLQotICAgICAgICBhbmltYXRpb24uY2xlYXJBbGwoKTsKLQotICAgICAg
ICBpZiAoIWRlY29kZUJvb2xBbmRWYWx1ZShkZWNvZGVyLCBpc0RlbGF5U2V0LCBkZWxheSkpCi0g
ICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIGlmICghZGVjb2RlQm9vbEFuZFZhbHVl
KGRlY29kZXIsIGlzRGlyZWN0aW9uU2V0LCBkaXJlY3Rpb24pKQotICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOwotICAgICAgICBpZiAoIWRlY29kZUJvb2xBbmRWYWx1ZShkZWNvZGVyLCBpc0R1cmF0
aW9uU2V0LCBkdXJhdGlvbikpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIGlm
ICghZGVjb2RlQm9vbEFuZFZhbHVlKGRlY29kZXIsIGlzRmlsbE1vZGVTZXQsIGZpbGxNb2RlKSkK
LSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgaWYgKCFkZWNvZGVCb29sQW5kVmFs
dWUoZGVjb2RlciwgaXNJdGVyYXRpb25Db3VudFNldCwgaXRlcmF0aW9uQ291bnQpKQotICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICBpZiAoIWRlY29kZUJvb2xBbmRWYWx1ZTxTdHJp
bmc+KGRlY29kZXIsIGlzTmFtZVNldCwgbmFtZSkpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7
Ci0gICAgICAgIGlmICghZGVjb2RlQm9vbEFuZFZhbHVlKGRlY29kZXIsIGlzUGxheVN0YXRlU2V0
LCBwbGF5U3RhdGUpKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICBpZiAoIWRl
Y29kZUJvb2xBbmRWYWx1ZShkZWNvZGVyLCBpc1Byb3BlcnR5U2V0LCBwcm9wZXJ0eSkpCi0gICAg
ICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIGlmICghZGVjb2RlQm9vbEFuZFZhbHVlPFJl
ZlB0cjxXZWJDb3JlOjpUaW1pbmdGdW5jdGlvbj4gPihkZWNvZGVyLCBpc1RpbWluZ0Z1bmN0aW9u
U2V0LCB0aW1pbmdGdW5jdGlvbikpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICAg
ICAgaWYgKGlzRGVsYXlTZXQpCi0gICAgICAgICAgICBhbmltYXRpb24uc2V0RGVsYXkoZGVsYXkp
OwotICAgICAgICBpZiAoaXNEaXJlY3Rpb25TZXQpCi0gICAgICAgICAgICBhbmltYXRpb24uc2V0
RGlyZWN0aW9uKHN0YXRpY19jYXN0PFdlYkNvcmU6OkFuaW1hdGlvbjo6QW5pbWF0aW9uRGlyZWN0
aW9uPihkaXJlY3Rpb24pKTsKLSAgICAgICAgaWYgKGlzRHVyYXRpb25TZXQpCi0gICAgICAgICAg
ICBhbmltYXRpb24uc2V0RHVyYXRpb24oZHVyYXRpb24pOwotICAgICAgICBpZiAoaXNGaWxsTW9k
ZVNldCkKLSAgICAgICAgICAgIGFuaW1hdGlvbi5zZXRGaWxsTW9kZShmaWxsTW9kZSk7Ci0gICAg
ICAgIGlmIChpc0l0ZXJhdGlvbkNvdW50U2V0KQotICAgICAgICAgICAgYW5pbWF0aW9uLnNldEl0
ZXJhdGlvbkNvdW50KGl0ZXJhdGlvbkNvdW50KTsKLSAgICAgICAgaWYgKGlzTmFtZVNldCkKLSAg
ICAgICAgICAgIGFuaW1hdGlvbi5zZXROYW1lKG5hbWUpOwotICAgICAgICBpZiAoaXNQbGF5U3Rh
dGVTZXQpCi0gICAgICAgICAgICBhbmltYXRpb24uc2V0UGxheVN0YXRlKHN0YXRpY19jYXN0PFdl
YkNvcmU6OkVBbmltUGxheVN0YXRlPihwbGF5U3RhdGUpKTsKLSAgICAgICAgaWYgKGlzUHJvcGVy
dHlTZXQpCi0gICAgICAgICAgICBhbmltYXRpb24uc2V0UHJvcGVydHkocHJvcGVydHkpOwotICAg
ICAgICBpZiAoaXNUaW1pbmdGdW5jdGlvblNldCkKLSAgICAgICAgICAgIGFuaW1hdGlvbi5zZXRU
aW1pbmdGdW5jdGlvbih0aW1pbmdGdW5jdGlvbik7Ci0KLSAgICAgICAgcmV0dXJuIHRydWU7Ci0g
ICAgfQorICAgIHN0YXRpYyB2b2lkIGVuY29kZShBcmd1bWVudEVuY29kZXIqLCBjb25zdCBXZWJD
b3JlOjpBbmltYXRpb24mKTsKKyAgICBzdGF0aWMgYm9vbCBkZWNvZGUoQXJndW1lbnREZWNvZGVy
KiwgV2ViQ29yZTo6QW5pbWF0aW9uJik7CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBDb3JlSVBDCklu
ZGV4OiBTb3VyY2UvV2ViS2l0Mi9TaGFyZWQvbWFjL0FyZ3VtZW50Q29kZXJzTWFjLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYktpdDIvU2hhcmVkL21hYy9Bcmd1bWVudENvZGVyc01hYy5oCShy
ZXZpc2lvbiA4ODk0MykKKysrIFNvdXJjZS9XZWJLaXQyL1NoYXJlZC9tYWMvQXJndW1lbnRDb2Rl
cnNNYWMuaAkod29ya2luZyBjb3B5KQpAQCAtNTcsNiArNTcsNiBAQCBib29sIGRlY29kZShBcmd1
bWVudERlY29kZXIqLCBSZXRhaW5QdHI8CiB2b2lkIGVuY29kZShBcmd1bWVudEVuY29kZXIqLCBO
U1N0cmluZyAqKTsKIGJvb2wgZGVjb2RlKEFyZ3VtZW50RGVjb2RlciosIFJldGFpblB0cjxOU1N0
cmluZz4mKTsKIAotfQorfSAvLyBuYW1lc3BhY2UgQ29yZUlQQwogCiAjZW5kaWYgLy8gQXJndW1l
bnRDb2RlcnNNYWNfaApJbmRleDogU291cmNlL1dlYktpdDIvU2hhcmVkL21hYy9Bcmd1bWVudENv
ZGVyc01hYy5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9TaGFyZWQvbWFjL0FyZ3Vt
ZW50Q29kZXJzTWFjLm1tCShyZXZpc2lvbiA4ODk0MykKKysrIFNvdXJjZS9XZWJLaXQyL1NoYXJl
ZC9tYWMvQXJndW1lbnRDb2RlcnNNYWMubW0JKHdvcmtpbmcgY29weSkKQEAgLTM0MCw0ICszNDAs
NCBAQCBib29sIGRlY29kZShBcmd1bWVudERlY29kZXIqIGRlY29kZXIsIFJlCiAgICAgcmV0dXJu
IHRydWU7CiB9CiAKLX0KK30gLy8gbmFtZXNwYWNlIENvcmVJUEMKSW5kZXg6IFNvdXJjZS9XZWJL
aXQyL1NoYXJlZC9tYWMvV2ViQ29yZUFyZ3VtZW50Q29kZXJzTWFjLm1tCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJLaXQyL1NoYXJlZC9tYWMvV2ViQ29yZUFyZ3VtZW50Q29kZXJzTWFjLm1tCShy
ZXZpc2lvbiA4ODk0MykKKysrIFNvdXJjZS9XZWJLaXQyL1NoYXJlZC9tYWMvV2ViQ29yZUFyZ3Vt
ZW50Q29kZXJzTWFjLm1tCSh3b3JraW5nIGNvcHkpCkBAIC0xOTIsNCArMTkyLDIyIEBAIGJvb2wg
ZGVjb2RlUmVzb3VyY2VFcnJvcihBcmd1bWVudERlY29kZXIKICAgICByZXR1cm4gdHJ1ZTsKIH0K
IAorCit2b2lkIEFyZ3VtZW50Q29kZXI8S2V5cHJlc3NDb21tYW5kPjo6ZW5jb2RlKEFyZ3VtZW50
RW5jb2RlciogZW5jb2RlciwgY29uc3QgS2V5cHJlc3NDb21tYW5kJiBrZXlwcmVzc0NvbW1hbmQp
Cit7CisgICAgZW5jb2Rlci0+ZW5jb2RlKGtleXByZXNzQ29tbWFuZC5jb21tYW5kTmFtZSk7Cisg
ICAgZW5jb2Rlci0+ZW5jb2RlKGtleXByZXNzQ29tbWFuZC50ZXh0KTsKK30KKyAgICAKK2Jvb2wg
QXJndW1lbnRDb2RlcjxLZXlwcmVzc0NvbW1hbmQ+OjpkZWNvZGUoQXJndW1lbnREZWNvZGVyKiBk
ZWNvZGVyLCBLZXlwcmVzc0NvbW1hbmQmIGtleXByZXNzQ29tbWFuZCkKK3sKKyAgICBpZiAoIWRl
Y29kZXItPmRlY29kZShrZXlwcmVzc0NvbW1hbmQuY29tbWFuZE5hbWUpKQorICAgICAgICByZXR1
cm4gZmFsc2U7CisKKyAgICBpZiAoIWRlY29kZXItPmRlY29kZShrZXlwcmVzc0NvbW1hbmQudGV4
dCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIHJldHVybiB0cnVlOworfQorCiB9IC8v
IG5hbWVzcGFjZSBDb3JlSVBDCg==
</data>
<flag name="review"
          id="91298"
          type_id="1"
          status="+"
          setter="sam"
    />
    <flag name="commit-queue"
          id="91304"
          type_id="3"
          status="-"
          setter="webkit.review.bot"
    />
          </attachment>
      

    </bug>

</bugzilla>