<?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>93943</bug_id>
          
          <creation_ts>2012-08-14 01:23:49 -0700</creation_ts>
          <short_desc>[Forms] Copy Source/WebCore/html/shadow/TextControlInnerElements.{cpp,h} to SpinButtonElement.{cpp,h}</short_desc>
          <delta_ts>2012-08-17 01:18:40 -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>Forms</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>
          
          <blocked>94289</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter>yosin</reporter>
          <assigned_to>yosin</assigned_to>
          <cc>tkent</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>694649</commentid>
    <comment_count>0</comment_count>
    <who name="">yosin</who>
    <bug_when>2012-08-14 01:23:49 -0700</bug_when>
    <thetext>This is part of setting SpinButtonElement free from HTMLInputElement.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>694714</commentid>
    <comment_count>1</comment_count>
      <attachid>158266</attachid>
    <who name="">yosin</who>
    <bug_when>2012-08-14 02:22:55 -0700</bug_when>
    <thetext>Created attachment 158266
Patch 1</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>694715</commentid>
    <comment_count>2</comment_count>
      <attachid>158266</attachid>
    <who name="">yosin</who>
    <bug_when>2012-08-14 02:23:51 -0700</bug_when>
    <thetext>Comment on attachment 158266
Patch 1

Could you review this patch?
Thanks in advance.

Note: The diff is result of &quot;svn copy&quot;.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>694717</commentid>
    <comment_count>3</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-08-14 02:26:54 -0700</bug_when>
    <thetext>Attachment 158266 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;Source/WebCore/ChangeLog&apos;, u&apos;Source/WebCor...&quot; exit_code: 1
Source/WebCore/html/shadow/SpinButtonElement.h:27:  #ifndef header guard has wrong style, please use: SpinButtonElement_h  [build/header_guard] [5]
Source/WebCore/html/shadow/SpinButtonElement.h:178:  The parameter name &quot;state&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Source/WebCore/html/shadow/SpinButtonElement.cpp:28:  Found other header before a header this file implements. Should be: config.h, primary header, blank line, and then alphabetically sorted.  [build/include_order] [4]
Source/WebCore/html/shadow/SpinButtonElement.cpp:29:  Alphabetical sorting problem.  [build/include_order] [4]
Total errors found: 4 in 3 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>694729</commentid>
    <comment_count>4</comment_count>
      <attachid>158266</attachid>
    <who name="Kent Tamura">tkent</who>
    <bug_when>2012-08-14 02:54:53 -0700</bug_when>
    <thetext>Comment on attachment 158266
Patch 1

ok</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>697938</commentid>
    <comment_count>5</comment_count>
    <who name="">yosin</who>
    <bug_when>2012-08-16 23:37:07 -0700</bug_when>
    <thetext>Landed: http://trac.webkit.org/changeset/125862</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>158266</attachid>
            <date>2012-08-14 02:22:55 -0700</date>
            <delta_ts>2012-08-14 02:54:52 -0700</delta_ts>
            <desc>Patch 1</desc>
            <filename>bug-93943-20120814182223.patch</filename>
            <type>text/plain</type>
            <size>31674</size>
            <attacher>yosin</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDEyNTUzMSkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE4IEBACisyMDEyLTA4LTE0ICBZb3NoaWZ1
bWkgSW5vdWUgIDx5b3NpbkBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgW0Zvcm1zXSBDb3B5IFNv
dXJjZS9XZWJDb3JlL2h0bWwvc2hhZG93L1RleHRDb250cm9sSW5uZXJFbGVtZW50cy57Y3BwLGh9
IHRvIFNwaW5CdXR0b25FbGVtZW50LntjcHAsaH0KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTkzOTQzCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZ
IChPT1BTISkuCisKKyAgICAgICAgVGhpcyBwYXRjaCBjb3B5cyBodG1sL3NoYWRvdy9UZXh0Q29u
dHJvbElubmVyRWxlbWVudC57Y3BwLGh9IHRvIFNwaW5CdXR0b25FbGVtZW50LntjcHAsaH0gZm9y
CisgICAgICAgIHByZXBhcmF0aW9uIG9mIGJ1ZyA5Mzk0MSwgU2V0IFNwaW5CdXR0b25FbGVtZW50
IGZyZWUgZnJvbSBIVE1MSW5wdXRFbGVtZW50LgorCisgICAgICAgIE5vIG5ldyB0ZXN0cy4gVGhp
cyBwYXRjaCBkb2Vzbid0IGNoYW5nZSBiZWhhdmlvci4KKworICAgICAgICAqIGh0bWwvc2hhZG93
L1NwaW5CdXR0b25FbGVtZW50LmNwcDogQ29waWVkIGZyb20gU291cmNlL1dlYkNvcmUvaHRtbC9z
aGFkb3cvVGV4dENvbnRyb2xJbm5lckVsZW1lbnRzLmNwcC4KKyAgICAgICAgKiBodG1sL3NoYWRv
dy9TcGluQnV0dG9uRWxlbWVudC5oOiBDb3BpZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9odG1sL3No
YWRvdy9UZXh0Q29udHJvbElubmVyRWxlbWVudHMuaC4KKwogMjAxMi0wOC0xNCAgTWlrZSBXZXN0
ICA8bWt3c3RAY2hyb21pdW0ub3JnPgogCiAgICAgICAgIEltcGxlbWVudCB0aGUgcGx1Z2luLXR5
cGVzIENvbnRlbnQgU2VjdXJpdHkgUG9saWN5IGRpcmVjdGl2ZS4KSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL2h0bWwvc2hhZG93L1NwaW5CdXR0b25FbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9odG1sL3NoYWRvdy9TcGluQnV0dG9uRWxlbWVudC5jcHAJKHJldmlzaW9uIDEy
NTUzMCkJKGZyb20gU291cmNlL1dlYkNvcmUvaHRtbC9zaGFkb3cvVGV4dENvbnRyb2xJbm5lckVs
ZW1lbnRzLmNwcDoxMjU1MzApCisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL3NoYWRvdy9TcGluQnV0
dG9uRWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw2NTUgQEAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMDYsIDIwMDgsIDIwMTAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEwIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBD
T01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENP
TVBVVEVSLCBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NV
UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlRleHRDb250cm9sSW5u
ZXJFbGVtZW50cy5oIgorCisjaW5jbHVkZSAiQmVmb3JlVGV4dEluc2VydGVkRXZlbnQuaCIKKyNp
bmNsdWRlICJEb2N1bWVudC5oIgorI2luY2x1ZGUgIkV2ZW50SGFuZGxlci5oIgorI2luY2x1ZGUg
IkV2ZW50TmFtZXMuaCIKKyNpbmNsdWRlICJGcmFtZS5oIgorI2luY2x1ZGUgIkhUTUxJbnB1dEVs
ZW1lbnQuaCIKKyNpbmNsdWRlICJIVE1MTmFtZXMuaCIKKyNpbmNsdWRlICJIVE1MVGV4dEFyZWFF
bGVtZW50LmgiCisjaW5jbHVkZSAiTW91c2VFdmVudC5oIgorI2luY2x1ZGUgIlBhZ2UuaCIKKyNp
bmNsdWRlICJSZW5kZXJTZWFyY2hGaWVsZC5oIgorI2luY2x1ZGUgIlJlbmRlclZpZXcuaCIKKyNp
bmNsdWRlICJTY3JpcHRDb250cm9sbGVyLmgiCisjaW5jbHVkZSAiU2Nyb2xsYmFyVGhlbWUuaCIK
KyNpbmNsdWRlICJTcGVlY2hJbnB1dC5oIgorI2luY2x1ZGUgIlNwZWVjaElucHV0RXZlbnQuaCIK
KyNpbmNsdWRlICJUZXh0RXZlbnQuaCIKKyNpbmNsdWRlICJUZXh0RXZlbnRJbnB1dFR5cGUuaCIK
KyNpbmNsdWRlICJXaGVlbEV2ZW50LmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKwordXNpbmcg
bmFtZXNwYWNlIEhUTUxOYW1lczsKKworVGV4dENvbnRyb2xJbm5lckVsZW1lbnQ6OlRleHRDb250
cm9sSW5uZXJFbGVtZW50KERvY3VtZW50KiBkb2N1bWVudCkKKyAgICA6IEhUTUxEaXZFbGVtZW50
KGRpdlRhZywgZG9jdW1lbnQpCit7CisgICAgc2V0SGFzQ3VzdG9tQ2FsbGJhY2tzKCk7Cit9CisK
K1Bhc3NSZWZQdHI8VGV4dENvbnRyb2xJbm5lckVsZW1lbnQ+IFRleHRDb250cm9sSW5uZXJFbGVt
ZW50OjpjcmVhdGUoRG9jdW1lbnQqIGRvY3VtZW50KQoreworICAgIHJldHVybiBhZG9wdFJlZihu
ZXcgVGV4dENvbnRyb2xJbm5lckVsZW1lbnQoZG9jdW1lbnQpKTsKK30KKworUGFzc1JlZlB0cjxS
ZW5kZXJTdHlsZT4gVGV4dENvbnRyb2xJbm5lckVsZW1lbnQ6OmN1c3RvbVN0eWxlRm9yUmVuZGVy
ZXIoKQoreworICAgIFJlbmRlclRleHRDb250cm9sU2luZ2xlTGluZSogcGFyZW50UmVuZGVyZXIg
PSB0b1JlbmRlclRleHRDb250cm9sU2luZ2xlTGluZShzaGFkb3dIb3N0KCktPnJlbmRlcmVyKCkp
OworICAgIHJldHVybiBwYXJlbnRSZW5kZXJlci0+Y3JlYXRlSW5uZXJCbG9ja1N0eWxlKHBhcmVu
dFJlbmRlcmVyLT5zdHlsZSgpKTsKK30KKworLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LQorCitpbmxpbmUgVGV4dENvbnRyb2xJbm5lclRleHRFbGVtZW50OjpUZXh0Q29udHJvbElubmVy
VGV4dEVsZW1lbnQoRG9jdW1lbnQqIGRvY3VtZW50KQorICAgIDogSFRNTERpdkVsZW1lbnQoZGl2
VGFnLCBkb2N1bWVudCkKK3sKKyAgICBzZXRIYXNDdXN0b21DYWxsYmFja3MoKTsKK30KKworUGFz
c1JlZlB0cjxUZXh0Q29udHJvbElubmVyVGV4dEVsZW1lbnQ+IFRleHRDb250cm9sSW5uZXJUZXh0
RWxlbWVudDo6Y3JlYXRlKERvY3VtZW50KiBkb2N1bWVudCkKK3sKKyAgICByZXR1cm4gYWRvcHRS
ZWYobmV3IFRleHRDb250cm9sSW5uZXJUZXh0RWxlbWVudChkb2N1bWVudCkpOworfQorCit2b2lk
IFRleHRDb250cm9sSW5uZXJUZXh0RWxlbWVudDo6ZGVmYXVsdEV2ZW50SGFuZGxlcihFdmVudCog
ZXZlbnQpCit7CisgICAgLy8gRklYTUU6IEluIHRoZSBmdXR1cmUsIHdlIHNob3VsZCBhZGQgYSB3
YXkgdG8gaGF2ZSBkZWZhdWx0IGV2ZW50IGxpc3RlbmVycy4KKyAgICAvLyBUaGVuIHdlIHdvdWxk
IGFkZCBvbmUgdG8gdGhlIHRleHQgZmllbGQncyBpbm5lciBkaXYsIGFuZCB3ZSB3b3VsZG4ndCBu
ZWVkIHRoaXMgc3ViY2xhc3MuCisgICAgLy8gT3IgcG9zc2libHkgd2UgY291bGQganVzdCB1c2Ug
YSBub3JtYWwgZXZlbnQgbGlzdGVuZXIuCisgICAgaWYgKGV2ZW50LT5pc0JlZm9yZVRleHRJbnNl
cnRlZEV2ZW50KCkgfHwgZXZlbnQtPnR5cGUoKSA9PSBldmVudE5hbWVzKCkud2Via2l0RWRpdGFi
bGVDb250ZW50Q2hhbmdlZEV2ZW50KSB7CisgICAgICAgIEVsZW1lbnQqIHNoYWRvd0FuY2VzdG9y
ID0gc2hhZG93SG9zdCgpOworICAgICAgICAvLyBBIFRleHRDb250cm9sSW5uZXJUZXh0RWxlbWVu
dCBjYW4gaGF2ZSBubyBob3N0IGlmIGl0cyBiZWVuIGRldGFjaGVkLAorICAgICAgICAvLyBidXQg
a2VwdCBhbGl2ZSBieSBhbiBFZGl0Q29tbWFuZC4gSW4gdGhpcyBjYXNlLCBhbiB1bmRvL3JlZG8g
Y2FuCisgICAgICAgIC8vIGNhdXNlIGV2ZW50cyB0byBiZSBzZW50IHRvIHRoZSBUZXh0Q29udHJv
bElubmVyVGV4dEVsZW1lbnQuIFRvCisgICAgICAgIC8vIHByZXZlbnQgYW4gaW5maW5pdGUgbG9v
cCwgd2UgbXVzdCBjaGVjayBmb3IgdGhpcyBjYXNlIGJlZm9yZSBzZW5kaW5nCisgICAgICAgIC8v
IHRoZSBldmVudCB1cCB0aGUgY2hhaW4uCisgICAgICAgIGlmIChzaGFkb3dBbmNlc3RvcikKKyAg
ICAgICAgICAgIHNoYWRvd0FuY2VzdG9yLT5kZWZhdWx0RXZlbnRIYW5kbGVyKGV2ZW50KTsKKyAg
ICB9CisgICAgaWYgKCFldmVudC0+ZGVmYXVsdEhhbmRsZWQoKSkKKyAgICAgICAgSFRNTERpdkVs
ZW1lbnQ6OmRlZmF1bHRFdmVudEhhbmRsZXIoZXZlbnQpOworfQorCitSZW5kZXJPYmplY3QqIFRl
eHRDb250cm9sSW5uZXJUZXh0RWxlbWVudDo6Y3JlYXRlUmVuZGVyZXIoUmVuZGVyQXJlbmEqIGFy
ZW5hLCBSZW5kZXJTdHlsZSopCit7CisgICAgYm9vbCBtdWx0aUxpbmUgPSBmYWxzZTsKKyAgICBF
bGVtZW50KiBzaGFkb3dBbmNlc3RvciA9IHNoYWRvd0hvc3QoKTsKKyAgICBpZiAoc2hhZG93QW5j
ZXN0b3IgJiYgc2hhZG93QW5jZXN0b3ItPnJlbmRlcmVyKCkpIHsKKyAgICAgICAgQVNTRVJUKHNo
YWRvd0FuY2VzdG9yLT5yZW5kZXJlcigpLT5pc1RleHRGaWVsZCgpIHx8IHNoYWRvd0FuY2VzdG9y
LT5yZW5kZXJlcigpLT5pc1RleHRBcmVhKCkpOworICAgICAgICBtdWx0aUxpbmUgPSBzaGFkb3dB
bmNlc3Rvci0+cmVuZGVyZXIoKS0+aXNUZXh0QXJlYSgpOworICAgIH0KKyAgICByZXR1cm4gbmV3
IChhcmVuYSkgUmVuZGVyVGV4dENvbnRyb2xJbm5lckJsb2NrKHRoaXMsIG11bHRpTGluZSk7Cit9
CisKK1Bhc3NSZWZQdHI8UmVuZGVyU3R5bGU+IFRleHRDb250cm9sSW5uZXJUZXh0RWxlbWVudDo6
Y3VzdG9tU3R5bGVGb3JSZW5kZXJlcigpCit7CisgICAgUmVuZGVyVGV4dENvbnRyb2wqIHBhcmVu
dFJlbmRlcmVyID0gdG9SZW5kZXJUZXh0Q29udHJvbChzaGFkb3dIb3N0KCktPnJlbmRlcmVyKCkp
OworICAgIHJldHVybiBwYXJlbnRSZW5kZXJlci0+Y3JlYXRlSW5uZXJUZXh0U3R5bGUocGFyZW50
UmVuZGVyZXItPnN0eWxlKCkpOworfQorCisvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
CisKK2lubGluZSBTZWFyY2hGaWVsZFJlc3VsdHNCdXR0b25FbGVtZW50OjpTZWFyY2hGaWVsZFJl
c3VsdHNCdXR0b25FbGVtZW50KERvY3VtZW50KiBkb2N1bWVudCkKKyAgICA6IEhUTUxEaXZFbGVt
ZW50KGRpdlRhZywgZG9jdW1lbnQpCit7Cit9CisKK1Bhc3NSZWZQdHI8U2VhcmNoRmllbGRSZXN1
bHRzQnV0dG9uRWxlbWVudD4gU2VhcmNoRmllbGRSZXN1bHRzQnV0dG9uRWxlbWVudDo6Y3JlYXRl
KERvY3VtZW50KiBkb2N1bWVudCkKK3sKKyAgICByZXR1cm4gYWRvcHRSZWYobmV3IFNlYXJjaEZp
ZWxkUmVzdWx0c0J1dHRvbkVsZW1lbnQoZG9jdW1lbnQpKTsKK30KKworY29uc3QgQXRvbWljU3Ry
aW5nJiBTZWFyY2hGaWVsZFJlc3VsdHNCdXR0b25FbGVtZW50OjpzaGFkb3dQc2V1ZG9JZCgpIGNv
bnN0Cit7CisgICAgREVGSU5FX1NUQVRJQ19MT0NBTChBdG9taWNTdHJpbmcsIHJlc3VsdHNJZCwg
KCItd2Via2l0LXNlYXJjaC1yZXN1bHRzLWJ1dHRvbiIpKTsKKyAgICBERUZJTkVfU1RBVElDX0xP
Q0FMKEF0b21pY1N0cmluZywgcmVzdWx0c0RlY29yYXRpb25JZCwgKCItd2Via2l0LXNlYXJjaC1y
ZXN1bHRzLWRlY29yYXRpb24iKSk7CisgICAgREVGSU5FX1NUQVRJQ19MT0NBTChBdG9taWNTdHJp
bmcsIGRlY29yYXRpb25JZCwgKCItd2Via2l0LXNlYXJjaC1kZWNvcmF0aW9uIikpOworICAgIEVs
ZW1lbnQqIGhvc3QgPSBzaGFkb3dIb3N0KCk7CisgICAgaWYgKCFob3N0KQorICAgICAgICByZXR1
cm4gcmVzdWx0c0lkOworICAgIGlmIChIVE1MSW5wdXRFbGVtZW50KiBpbnB1dCA9IGhvc3QtPnRv
SW5wdXRFbGVtZW50KCkpIHsKKyAgICAgICAgaWYgKGlucHV0LT5tYXhSZXN1bHRzKCkgPCAwKQor
ICAgICAgICAgICAgcmV0dXJuIGRlY29yYXRpb25JZDsKKyAgICAgICAgaWYgKGlucHV0LT5tYXhS
ZXN1bHRzKCkgPiAwKQorICAgICAgICAgICAgcmV0dXJuIHJlc3VsdHNJZDsKKyAgICAgICAgcmV0
dXJuIHJlc3VsdHNEZWNvcmF0aW9uSWQ7CisgICAgfQorICAgIHJldHVybiByZXN1bHRzSWQ7Cit9
CisKK3ZvaWQgU2VhcmNoRmllbGRSZXN1bHRzQnV0dG9uRWxlbWVudDo6ZGVmYXVsdEV2ZW50SGFu
ZGxlcihFdmVudCogZXZlbnQpCit7CisgICAgLy8gT24gbW91c2Vkb3duLCBicmluZyB1cCBhIG1l
bnUsIGlmIG5lZWRlZAorICAgIEhUTUxJbnB1dEVsZW1lbnQqIGlucHV0ID0gc3RhdGljX2Nhc3Q8
SFRNTElucHV0RWxlbWVudCo+KHNoYWRvd0hvc3QoKSk7CisgICAgaWYgKGV2ZW50LT50eXBlKCkg
PT0gZXZlbnROYW1lcygpLm1vdXNlZG93bkV2ZW50ICYmIGV2ZW50LT5pc01vdXNlRXZlbnQoKSAm
JiBzdGF0aWNfY2FzdDxNb3VzZUV2ZW50Kj4oZXZlbnQpLT5idXR0b24oKSA9PSBMZWZ0QnV0dG9u
KSB7CisgICAgICAgIGlucHV0LT5mb2N1cygpOworICAgICAgICBpbnB1dC0+c2VsZWN0KCk7Cisg
ICAgICAgIFJlbmRlclNlYXJjaEZpZWxkKiByZW5kZXJlciA9IHRvUmVuZGVyU2VhcmNoRmllbGQo
aW5wdXQtPnJlbmRlcmVyKCkpOworICAgICAgICBpZiAocmVuZGVyZXItPnBvcHVwSXNWaXNpYmxl
KCkpCisgICAgICAgICAgICByZW5kZXJlci0+aGlkZVBvcHVwKCk7CisgICAgICAgIGVsc2UgaWYg
KGlucHV0LT5tYXhSZXN1bHRzKCkgPiAwKQorICAgICAgICAgICAgcmVuZGVyZXItPnNob3dQb3B1
cCgpOworICAgICAgICBldmVudC0+c2V0RGVmYXVsdEhhbmRsZWQoKTsKKyAgICB9CisKKyAgICBp
ZiAoIWV2ZW50LT5kZWZhdWx0SGFuZGxlZCgpKQorICAgICAgICBIVE1MRGl2RWxlbWVudDo6ZGVm
YXVsdEV2ZW50SGFuZGxlcihldmVudCk7Cit9CisKK2Jvb2wgU2VhcmNoRmllbGRSZXN1bHRzQnV0
dG9uRWxlbWVudDo6d2lsbFJlc3BvbmRUb01vdXNlQ2xpY2tFdmVudHMoKQoreworICAgIHJldHVy
biB0cnVlOworfQorCisvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK2lubGluZSBT
ZWFyY2hGaWVsZENhbmNlbEJ1dHRvbkVsZW1lbnQ6OlNlYXJjaEZpZWxkQ2FuY2VsQnV0dG9uRWxl
bWVudChEb2N1bWVudCogZG9jdW1lbnQpCisgICAgOiBIVE1MRGl2RWxlbWVudChkaXZUYWcsIGRv
Y3VtZW50KQorICAgICwgbV9jYXB0dXJpbmcoZmFsc2UpCit7Cit9CisKK1Bhc3NSZWZQdHI8U2Vh
cmNoRmllbGRDYW5jZWxCdXR0b25FbGVtZW50PiBTZWFyY2hGaWVsZENhbmNlbEJ1dHRvbkVsZW1l
bnQ6OmNyZWF0ZShEb2N1bWVudCogZG9jdW1lbnQpCit7CisgICAgcmV0dXJuIGFkb3B0UmVmKG5l
dyBTZWFyY2hGaWVsZENhbmNlbEJ1dHRvbkVsZW1lbnQoZG9jdW1lbnQpKTsKK30KKworY29uc3Qg
QXRvbWljU3RyaW5nJiBTZWFyY2hGaWVsZENhbmNlbEJ1dHRvbkVsZW1lbnQ6OnNoYWRvd1BzZXVk
b0lkKCkgY29uc3QKK3sKKyAgICBERUZJTkVfU1RBVElDX0xPQ0FMKEF0b21pY1N0cmluZywgcHNl
dWRvSWQsICgiLXdlYmtpdC1zZWFyY2gtY2FuY2VsLWJ1dHRvbiIpKTsKKyAgICByZXR1cm4gcHNl
dWRvSWQ7Cit9CisKK3ZvaWQgU2VhcmNoRmllbGRDYW5jZWxCdXR0b25FbGVtZW50OjpkZXRhY2go
KQoreworICAgIGlmIChtX2NhcHR1cmluZykgeworICAgICAgICBpZiAoRnJhbWUqIGZyYW1lID0g
ZG9jdW1lbnQoKS0+ZnJhbWUoKSkKKyAgICAgICAgICAgIGZyYW1lLT5ldmVudEhhbmRsZXIoKS0+
c2V0Q2FwdHVyaW5nTW91c2VFdmVudHNOb2RlKDApOworICAgIH0KKyAgICBIVE1MRGl2RWxlbWVu
dDo6ZGV0YWNoKCk7Cit9CisKKwordm9pZCBTZWFyY2hGaWVsZENhbmNlbEJ1dHRvbkVsZW1lbnQ6
OmRlZmF1bHRFdmVudEhhbmRsZXIoRXZlbnQqIGV2ZW50KQoreworICAgIC8vIElmIHRoZSBlbGVt
ZW50IGlzIHZpc2libGUsIG9uIG1vdXNldXAsIGNsZWFyIHRoZSB2YWx1ZSwgYW5kIHNldCBzZWxl
Y3Rpb24KKyAgICBSZWZQdHI8SFRNTElucHV0RWxlbWVudD4gaW5wdXQoc3RhdGljX2Nhc3Q8SFRN
TElucHV0RWxlbWVudCo+KHNoYWRvd0hvc3QoKSkpOworICAgIGlmIChpbnB1dC0+ZGlzYWJsZWQo
KSB8fCBpbnB1dC0+cmVhZE9ubHkoKSkgeworICAgICAgICBpZiAoIWV2ZW50LT5kZWZhdWx0SGFu
ZGxlZCgpKQorICAgICAgICAgICAgSFRNTERpdkVsZW1lbnQ6OmRlZmF1bHRFdmVudEhhbmRsZXIo
ZXZlbnQpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgaWYgKGV2ZW50LT50eXBlKCkg
PT0gZXZlbnROYW1lcygpLm1vdXNlZG93bkV2ZW50ICYmIGV2ZW50LT5pc01vdXNlRXZlbnQoKSAm
JiBzdGF0aWNfY2FzdDxNb3VzZUV2ZW50Kj4oZXZlbnQpLT5idXR0b24oKSA9PSBMZWZ0QnV0dG9u
KSB7CisgICAgICAgIGlmIChyZW5kZXJlcigpICYmIHJlbmRlcmVyKCktPnZpc2libGVUb0hpdFRl
c3RpbmcoKSkgeworICAgICAgICAgICAgaWYgKEZyYW1lKiBmcmFtZSA9IGRvY3VtZW50KCktPmZy
YW1lKCkpIHsKKyAgICAgICAgICAgICAgICBmcmFtZS0+ZXZlbnRIYW5kbGVyKCktPnNldENhcHR1
cmluZ01vdXNlRXZlbnRzTm9kZSh0aGlzKTsKKyAgICAgICAgICAgICAgICBtX2NhcHR1cmluZyA9
IHRydWU7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgaW5wdXQtPmZvY3VzKCk7
CisgICAgICAgIGlucHV0LT5zZWxlY3QoKTsKKyAgICAgICAgZXZlbnQtPnNldERlZmF1bHRIYW5k
bGVkKCk7CisgICAgfQorICAgIGlmIChldmVudC0+dHlwZSgpID09IGV2ZW50TmFtZXMoKS5tb3Vz
ZXVwRXZlbnQgJiYgZXZlbnQtPmlzTW91c2VFdmVudCgpICYmIHN0YXRpY19jYXN0PE1vdXNlRXZl
bnQqPihldmVudCktPmJ1dHRvbigpID09IExlZnRCdXR0b24pIHsKKyAgICAgICAgaWYgKG1fY2Fw
dHVyaW5nKSB7CisgICAgICAgICAgICBpZiAoRnJhbWUqIGZyYW1lID0gZG9jdW1lbnQoKS0+ZnJh
bWUoKSkgeworICAgICAgICAgICAgICAgIGZyYW1lLT5ldmVudEhhbmRsZXIoKS0+c2V0Q2FwdHVy
aW5nTW91c2VFdmVudHNOb2RlKDApOworICAgICAgICAgICAgICAgIG1fY2FwdHVyaW5nID0gZmFs
c2U7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAoaG92ZXJlZCgpKSB7CisgICAgICAg
ICAgICAgICAgU3RyaW5nIG9sZFZhbHVlID0gaW5wdXQtPnZhbHVlKCk7CisgICAgICAgICAgICAg
ICAgaW5wdXQtPnNldFZhbHVlRm9yVXNlcigiIik7CisgICAgICAgICAgICAgICAgaW5wdXQtPm9u
U2VhcmNoKCk7CisgICAgICAgICAgICAgICAgZXZlbnQtPnNldERlZmF1bHRIYW5kbGVkKCk7Cisg
ICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisKKyAgICBpZiAoIWV2ZW50LT5kZWZhdWx0
SGFuZGxlZCgpKQorICAgICAgICBIVE1MRGl2RWxlbWVudDo6ZGVmYXVsdEV2ZW50SGFuZGxlcihl
dmVudCk7Cit9CisKK2Jvb2wgU2VhcmNoRmllbGRDYW5jZWxCdXR0b25FbGVtZW50Ojp3aWxsUmVz
cG9uZFRvTW91c2VDbGlja0V2ZW50cygpCit7CisgICAgY29uc3QgSFRNTElucHV0RWxlbWVudCog
aW5wdXQgPSBzdGF0aWNfY2FzdDxIVE1MSW5wdXRFbGVtZW50Kj4oc2hhZG93SG9zdCgpKTsKKyAg
ICBpZiAoIWlucHV0LT5kaXNhYmxlZCgpICYmICFpbnB1dC0+cmVhZE9ubHkoKSkKKyAgICAgICAg
cmV0dXJuIHRydWU7CisKKyAgICByZXR1cm4gSFRNTERpdkVsZW1lbnQ6OndpbGxSZXNwb25kVG9N
b3VzZUNsaWNrRXZlbnRzKCk7Cit9CisKKy8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0K
KworaW5saW5lIFNwaW5CdXR0b25FbGVtZW50OjpTcGluQnV0dG9uRWxlbWVudChEb2N1bWVudCog
ZG9jdW1lbnQsIFN0ZXBBY3Rpb25IYW5kbGVyJiBzdGVwQWN0aW9uSGFuZGxlcikKKyAgICA6IEhU
TUxEaXZFbGVtZW50KGRpdlRhZywgZG9jdW1lbnQpCisgICAgLCBtX3N0ZXBBY3Rpb25IYW5kbGVy
KCZzdGVwQWN0aW9uSGFuZGxlcikKKyAgICAsIG1fY2FwdHVyaW5nKGZhbHNlKQorICAgICwgbV91
cERvd25TdGF0ZShJbmRldGVybWluYXRlKQorICAgICwgbV9wcmVzc1N0YXJ0aW5nU3RhdGUoSW5k
ZXRlcm1pbmF0ZSkKKyAgICAsIG1fcmVwZWF0aW5nVGltZXIodGhpcywgJlNwaW5CdXR0b25FbGVt
ZW50OjpyZXBlYXRpbmdUaW1lckZpcmVkKQoreworfQorCitQYXNzUmVmUHRyPFNwaW5CdXR0b25F
bGVtZW50PiBTcGluQnV0dG9uRWxlbWVudDo6Y3JlYXRlKERvY3VtZW50KiBkb2N1bWVudCwgU3Rl
cEFjdGlvbkhhbmRsZXImIHN0ZXBBY3Rpb25IYW5kbGVyKQoreworICAgIHJldHVybiBhZG9wdFJl
ZihuZXcgU3BpbkJ1dHRvbkVsZW1lbnQoZG9jdW1lbnQsIHN0ZXBBY3Rpb25IYW5kbGVyKSk7Cit9
CisKK2NvbnN0IEF0b21pY1N0cmluZyYgU3BpbkJ1dHRvbkVsZW1lbnQ6OnNoYWRvd1BzZXVkb0lk
KCkgY29uc3QKK3sKKyAgICBERUZJTkVfU1RBVElDX0xPQ0FMKEF0b21pY1N0cmluZywgaW5uZXJQ
c2V1ZG9JZCwgKCItd2Via2l0LWlubmVyLXNwaW4tYnV0dG9uIikpOworICAgIHJldHVybiBpbm5l
clBzZXVkb0lkOworfQorCit2b2lkIFNwaW5CdXR0b25FbGVtZW50OjpkZXRhY2goKQoreworICAg
IHJlbGVhc2VDYXB0dXJlKCk7CisgICAgSFRNTERpdkVsZW1lbnQ6OmRldGFjaCgpOworfQorCit2
b2lkIFNwaW5CdXR0b25FbGVtZW50OjpkZWZhdWx0RXZlbnRIYW5kbGVyKEV2ZW50KiBldmVudCkK
K3sKKyAgICBpZiAoIWV2ZW50LT5pc01vdXNlRXZlbnQoKSkgeworICAgICAgICBpZiAoIWV2ZW50
LT5kZWZhdWx0SGFuZGxlZCgpKQorICAgICAgICAgICAgSFRNTERpdkVsZW1lbnQ6OmRlZmF1bHRF
dmVudEhhbmRsZXIoZXZlbnQpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgUmVuZGVy
Qm94KiBib3ggPSByZW5kZXJCb3goKTsKKyAgICBpZiAoIWJveCkgeworICAgICAgICBpZiAoIWV2
ZW50LT5kZWZhdWx0SGFuZGxlZCgpKQorICAgICAgICAgICAgSFRNTERpdkVsZW1lbnQ6OmRlZmF1
bHRFdmVudEhhbmRsZXIoZXZlbnQpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgUmVm
UHRyPEhUTUxJbnB1dEVsZW1lbnQ+IGlucHV0KHN0YXRpY19jYXN0PEhUTUxJbnB1dEVsZW1lbnQq
PihzaGFkb3dIb3N0KCkpKTsKKyAgICBpZiAoaW5wdXQtPmRpc2FibGVkKCkgfHwgaW5wdXQtPnJl
YWRPbmx5KCkpIHsKKyAgICAgICAgaWYgKCFldmVudC0+ZGVmYXVsdEhhbmRsZWQoKSkKKyAgICAg
ICAgICAgIEhUTUxEaXZFbGVtZW50OjpkZWZhdWx0RXZlbnRIYW5kbGVyKGV2ZW50KTsKKyAgICAg
ICAgcmV0dXJuOworICAgIH0KKworICAgIE1vdXNlRXZlbnQqIG1vdXNlRXZlbnQgPSBzdGF0aWNf
Y2FzdDxNb3VzZUV2ZW50Kj4oZXZlbnQpOworICAgIEludFBvaW50IGxvY2FsID0gcm91bmRlZElu
dFBvaW50KGJveC0+YWJzb2x1dGVUb0xvY2FsKG1vdXNlRXZlbnQtPmFic29sdXRlTG9jYXRpb24o
KSwgZmFsc2UsIHRydWUpKTsKKyAgICBpZiAobW91c2VFdmVudC0+dHlwZSgpID09IGV2ZW50TmFt
ZXMoKS5tb3VzZWRvd25FdmVudCAmJiBtb3VzZUV2ZW50LT5idXR0b24oKSA9PSBMZWZ0QnV0dG9u
KSB7CisgICAgICAgIGlmIChib3gtPnBpeGVsU25hcHBlZEJvcmRlckJveFJlY3QoKS5jb250YWlu
cyhsb2NhbCkpIHsKKyAgICAgICAgICAgIC8vIFRoZSBmb2xsb3dpbmcgZnVuY3Rpb25zIG9mIEhU
TUxJbnB1dEVsZW1lbnQgbWF5IHJ1biBKYXZhU2NyaXB0CisgICAgICAgICAgICAvLyBjb2RlIHdo
aWNoIGRldGFjaGVzIHRoaXMgc2hhZG93IG5vZGUuIFdlIG5lZWQgdG8gdGFrZSBhIHJlZmVyZW5j
ZQorICAgICAgICAgICAgLy8gYW5kIGNoZWNrIHJlbmRlcmVyKCkgYWZ0ZXIgc3VjaCBmdW5jdGlv
biBjYWxscy4KKyAgICAgICAgICAgIFJlZlB0cjxOb2RlPiBwcm90ZWN0b3IodGhpcyk7CisgICAg
ICAgICAgICBpbnB1dC0+Zm9jdXMoKTsKKyAgICAgICAgICAgIGlucHV0LT5zZWxlY3QoKTsKKyAg
ICAgICAgICAgIGlmIChyZW5kZXJlcigpKSB7CisgICAgICAgICAgICAgICAgaWYgKG1fdXBEb3du
U3RhdGUgIT0gSW5kZXRlcm1pbmF0ZSkgeworICAgICAgICAgICAgICAgICAgICBkb1N0ZXBBY3Rp
b24obV91cERvd25TdGF0ZSA9PSBVcCA/IDEgOiAtMSk7CisgICAgICAgICAgICAgICAgICAgIGlm
IChyZW5kZXJlcigpKQorICAgICAgICAgICAgICAgICAgICAgICAgc3RhcnRSZXBlYXRpbmdUaW1l
cigpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGV2ZW50
LT5zZXREZWZhdWx0SGFuZGxlZCgpOworICAgICAgICB9CisgICAgfSBlbHNlIGlmIChtb3VzZUV2
ZW50LT50eXBlKCkgPT0gZXZlbnROYW1lcygpLm1vdXNldXBFdmVudCAmJiBtb3VzZUV2ZW50LT5i
dXR0b24oKSA9PSBMZWZ0QnV0dG9uKQorICAgICAgICBzdG9wUmVwZWF0aW5nVGltZXIoKTsKKyAg
ICBlbHNlIGlmIChldmVudC0+dHlwZSgpID09IGV2ZW50TmFtZXMoKS5tb3VzZW1vdmVFdmVudCkg
eworICAgICAgICBpZiAoYm94LT5waXhlbFNuYXBwZWRCb3JkZXJCb3hSZWN0KCkuY29udGFpbnMo
bG9jYWwpKSB7CisgICAgICAgICAgICBpZiAoIW1fY2FwdHVyaW5nKSB7CisgICAgICAgICAgICAg
ICAgaWYgKEZyYW1lKiBmcmFtZSA9IGRvY3VtZW50KCktPmZyYW1lKCkpIHsKKyAgICAgICAgICAg
ICAgICAgICAgZnJhbWUtPmV2ZW50SGFuZGxlcigpLT5zZXRDYXB0dXJpbmdNb3VzZUV2ZW50c05v
ZGUodGhpcyk7CisgICAgICAgICAgICAgICAgICAgIG1fY2FwdHVyaW5nID0gdHJ1ZTsKKyAgICAg
ICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgICBVcERvd25TdGF0ZSBvbGRV
cERvd25TdGF0ZSA9IG1fdXBEb3duU3RhdGU7CisgICAgICAgICAgICBtX3VwRG93blN0YXRlID0g
bG9jYWwueSgpIDwgYm94LT5oZWlnaHQoKSAvIDIgPyBVcCA6IERvd247CisgICAgICAgICAgICBp
ZiAobV91cERvd25TdGF0ZSAhPSBvbGRVcERvd25TdGF0ZSkKKyAgICAgICAgICAgICAgICByZW5k
ZXJlcigpLT5yZXBhaW50KCk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICByZWxlYXNl
Q2FwdHVyZSgpOworICAgICAgICAgICAgbV91cERvd25TdGF0ZSA9IEluZGV0ZXJtaW5hdGU7Cisg
ICAgICAgIH0KKyAgICB9CisKKyAgICBpZiAoIWV2ZW50LT5kZWZhdWx0SGFuZGxlZCgpKQorICAg
ICAgICBIVE1MRGl2RWxlbWVudDo6ZGVmYXVsdEV2ZW50SGFuZGxlcihldmVudCk7Cit9CisKK3Zv
aWQgU3BpbkJ1dHRvbkVsZW1lbnQ6OmZvcndhcmRFdmVudChFdmVudCogZXZlbnQpCit7CisgICAg
aWYgKCFyZW5kZXJCb3goKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgaWYgKCFldmVudC0+aGFz
SW50ZXJmYWNlKGV2ZW50TmFtZXMoKS5pbnRlcmZhY2VGb3JXaGVlbEV2ZW50KSkKKyAgICAgICAg
cmV0dXJuOworCisgICAgSFRNTElucHV0RWxlbWVudCogaW5wdXQgPSBzdGF0aWNfY2FzdDxIVE1M
SW5wdXRFbGVtZW50Kj4oc2hhZG93SG9zdCgpKTsKKyAgICBpZiAoaW5wdXQtPmRpc2FibGVkKCkg
fHwgaW5wdXQtPnJlYWRPbmx5KCkgfHwgIWlucHV0LT5mb2N1c2VkKCkpCisgICAgICAgIHJldHVy
bjsKKworICAgIGRvU3RlcEFjdGlvbihzdGF0aWNfY2FzdDxXaGVlbEV2ZW50Kj4oZXZlbnQpLT53
aGVlbERlbHRhWSgpKTsKKyAgICBldmVudC0+c2V0RGVmYXVsdEhhbmRsZWQoKTsKK30KKworYm9v
bCBTcGluQnV0dG9uRWxlbWVudDo6d2lsbFJlc3BvbmRUb01vdXNlTW92ZUV2ZW50cygpCit7Cisg
ICAgY29uc3QgSFRNTElucHV0RWxlbWVudCogaW5wdXQgPSBzdGF0aWNfY2FzdDxIVE1MSW5wdXRF
bGVtZW50Kj4oc2hhZG93SG9zdCgpKTsKKyAgICBpZiAocmVuZGVyQm94KCkgJiYgIWlucHV0LT5k
aXNhYmxlZCgpICYmICFpbnB1dC0+cmVhZE9ubHkoKSkKKyAgICAgICAgcmV0dXJuIHRydWU7CisK
KyAgICByZXR1cm4gSFRNTERpdkVsZW1lbnQ6OndpbGxSZXNwb25kVG9Nb3VzZU1vdmVFdmVudHMo
KTsKK30KKworYm9vbCBTcGluQnV0dG9uRWxlbWVudDo6d2lsbFJlc3BvbmRUb01vdXNlQ2xpY2tF
dmVudHMoKQoreworICAgIGNvbnN0IEhUTUxJbnB1dEVsZW1lbnQqIGlucHV0ID0gc3RhdGljX2Nh
c3Q8SFRNTElucHV0RWxlbWVudCo+KHNoYWRvd0hvc3QoKSk7CisgICAgaWYgKHJlbmRlckJveCgp
ICYmICFpbnB1dC0+ZGlzYWJsZWQoKSAmJiAhaW5wdXQtPnJlYWRPbmx5KCkpCisgICAgICAgIHJl
dHVybiB0cnVlOworCisgICAgcmV0dXJuIEhUTUxEaXZFbGVtZW50Ojp3aWxsUmVzcG9uZFRvTW91
c2VDbGlja0V2ZW50cygpOworfQorCit2b2lkIFNwaW5CdXR0b25FbGVtZW50Ojpkb1N0ZXBBY3Rp
b24oaW50IGFtb3VudCkKK3sKKyAgICBpZiAoIW1fc3RlcEFjdGlvbkhhbmRsZXIpCisgICAgICAg
IHJldHVybjsKKworICAgIGlmIChhbW91bnQgPiAwKQorICAgICAgICBtX3N0ZXBBY3Rpb25IYW5k
bGVyLT5zcGluQnV0dG9uU3RlcFVwKCk7CisgICAgZWxzZSBpZiAoYW1vdW50IDwgMCkKKyAgICAg
ICAgbV9zdGVwQWN0aW9uSGFuZGxlci0+c3BpbkJ1dHRvblN0ZXBEb3duKCk7Cit9CisKK3ZvaWQg
U3BpbkJ1dHRvbkVsZW1lbnQ6OnJlbGVhc2VDYXB0dXJlKCkKK3sKKyAgICBzdG9wUmVwZWF0aW5n
VGltZXIoKTsKKyAgICBpZiAobV9jYXB0dXJpbmcpIHsKKyAgICAgICAgaWYgKEZyYW1lKiBmcmFt
ZSA9IGRvY3VtZW50KCktPmZyYW1lKCkpIHsKKyAgICAgICAgICAgIGZyYW1lLT5ldmVudEhhbmRs
ZXIoKS0+c2V0Q2FwdHVyaW5nTW91c2VFdmVudHNOb2RlKDApOworICAgICAgICAgICAgbV9jYXB0
dXJpbmcgPSBmYWxzZTsKKyAgICAgICAgfQorICAgIH0KK30KKworYm9vbCBTcGluQnV0dG9uRWxl
bWVudDo6c2hvdWxkTWF0Y2hSZWFkT25seVNlbGVjdG9yKCkgY29uc3QKK3sKKyAgICByZXR1cm4g
c2hhZG93SG9zdCgpLT5zaG91bGRNYXRjaFJlYWRPbmx5U2VsZWN0b3IoKTsKK30KKworYm9vbCBT
cGluQnV0dG9uRWxlbWVudDo6c2hvdWxkTWF0Y2hSZWFkV3JpdGVTZWxlY3RvcigpIGNvbnN0Cit7
CisgICAgcmV0dXJuIHNoYWRvd0hvc3QoKS0+c2hvdWxkTWF0Y2hSZWFkV3JpdGVTZWxlY3Rvcigp
OworfQorCit2b2lkIFNwaW5CdXR0b25FbGVtZW50OjpzdGFydFJlcGVhdGluZ1RpbWVyKCkKK3sK
KyAgICBtX3ByZXNzU3RhcnRpbmdTdGF0ZSA9IG1fdXBEb3duU3RhdGU7CisgICAgU2Nyb2xsYmFy
VGhlbWUqIHRoZW1lID0gU2Nyb2xsYmFyVGhlbWU6OnRoZW1lKCk7CisgICAgbV9yZXBlYXRpbmdU
aW1lci5zdGFydCh0aGVtZS0+aW5pdGlhbEF1dG9zY3JvbGxUaW1lckRlbGF5KCksIHRoZW1lLT5h
dXRvc2Nyb2xsVGltZXJEZWxheSgpKTsKK30KKwordm9pZCBTcGluQnV0dG9uRWxlbWVudDo6c3Rv
cFJlcGVhdGluZ1RpbWVyKCkKK3sKKyAgICBtX3JlcGVhdGluZ1RpbWVyLnN0b3AoKTsKK30KKwor
dm9pZCBTcGluQnV0dG9uRWxlbWVudDo6c3RlcChpbnQgYW1vdW50KQoreworICAgIEhUTUxJbnB1
dEVsZW1lbnQqIGlucHV0ID0gc3RhdGljX2Nhc3Q8SFRNTElucHV0RWxlbWVudCo+KHNoYWRvd0hv
c3QoKSk7CisgICAgaWYgKGlucHV0LT5kaXNhYmxlZCgpIHx8IGlucHV0LT5yZWFkT25seSgpKQor
ICAgICAgICByZXR1cm47CisgICAgLy8gT24gTWFjIE9TLCBOU1N0ZXBwZXIgdXBkYXRlcyB0aGUg
dmFsdWUgZm9yIHRoZSBidXR0b24gdW5kZXIgdGhlIG1vdXNlCisgICAgLy8gY3Vyc29yIHJlZ2Fy
ZGxlc3Mgb2YgdGhlIGJ1dHRvbiBwcmVzc2VkIGF0IHRoZSBiZWdpbm5pbmcuIFNvIHRoZQorICAg
IC8vIGZvbGxvd2luZyBjaGVjayBpcyBub3QgbmVlZGVkIGZvciBNYWMgT1MuCisjaWYgIU9TKE1B
Q19PU19YKQorICAgIGlmIChtX3VwRG93blN0YXRlICE9IG1fcHJlc3NTdGFydGluZ1N0YXRlKQor
ICAgICAgICByZXR1cm47CisjZW5kaWYKKyAgICBkb1N0ZXBBY3Rpb24oYW1vdW50KTsKK30KKyAg
ICAKK3ZvaWQgU3BpbkJ1dHRvbkVsZW1lbnQ6OnJlcGVhdGluZ1RpbWVyRmlyZWQoVGltZXI8U3Bp
bkJ1dHRvbkVsZW1lbnQ+KikKK3sKKyAgICBpZiAobV91cERvd25TdGF0ZSAhPSBJbmRldGVybWlu
YXRlKQorICAgICAgICBzdGVwKG1fdXBEb3duU3RhdGUgPT0gVXAgPyAxIDogLTEpOworfQorCit2
b2lkIFNwaW5CdXR0b25FbGVtZW50OjpzZXRIb3ZlcmVkKGJvb2wgZmxhZykKK3sKKyAgICBpZiAo
IWZsYWcpCisgICAgICAgIG1fdXBEb3duU3RhdGUgPSBJbmRldGVybWluYXRlOworICAgIEhUTUxE
aXZFbGVtZW50OjpzZXRIb3ZlcmVkKGZsYWcpOworfQorCisKKy8vIC0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0KKworI2lmIEVOQUJMRShJTlBVVF9TUEVFQ0gpCisKK2lubGluZSBJbnB1dEZp
ZWxkU3BlZWNoQnV0dG9uRWxlbWVudDo6SW5wdXRGaWVsZFNwZWVjaEJ1dHRvbkVsZW1lbnQoRG9j
dW1lbnQqIGRvY3VtZW50KQorICAgIDogSFRNTERpdkVsZW1lbnQoZGl2VGFnLCBkb2N1bWVudCkK
KyAgICAsIG1fY2FwdHVyaW5nKGZhbHNlKQorICAgICwgbV9zdGF0ZShJZGxlKQorICAgICwgbV9s
aXN0ZW5lcklkKDApCit7Cit9CisKK0lucHV0RmllbGRTcGVlY2hCdXR0b25FbGVtZW50Ojp+SW5w
dXRGaWVsZFNwZWVjaEJ1dHRvbkVsZW1lbnQoKQoreworICAgIFNwZWVjaElucHV0KiBzcGVlY2gg
PSBzcGVlY2hJbnB1dCgpOworICAgIGlmIChzcGVlY2ggJiYgbV9saXN0ZW5lcklkKSAgeyAvLyBD
b3VsZCBiZSBudWxsIHdoZW4gcGFnZSBpcyB1bmxvYWRpbmcuCisgICAgICAgIGlmIChtX3N0YXRl
ICE9IElkbGUpCisgICAgICAgICAgICBzcGVlY2gtPmNhbmNlbFJlY29nbml0aW9uKG1fbGlzdGVu
ZXJJZCk7CisgICAgICAgIHNwZWVjaC0+dW5yZWdpc3Rlckxpc3RlbmVyKG1fbGlzdGVuZXJJZCk7
CisgICAgfQorfQorCitQYXNzUmVmUHRyPElucHV0RmllbGRTcGVlY2hCdXR0b25FbGVtZW50PiBJ
bnB1dEZpZWxkU3BlZWNoQnV0dG9uRWxlbWVudDo6Y3JlYXRlKERvY3VtZW50KiBkb2N1bWVudCkK
K3sKKyAgICByZXR1cm4gYWRvcHRSZWYobmV3IElucHV0RmllbGRTcGVlY2hCdXR0b25FbGVtZW50
KGRvY3VtZW50KSk7Cit9CisKK3ZvaWQgSW5wdXRGaWVsZFNwZWVjaEJ1dHRvbkVsZW1lbnQ6OmRl
ZmF1bHRFdmVudEhhbmRsZXIoRXZlbnQqIGV2ZW50KQoreworICAgIC8vIEZvciBwcml2YWN5IHJl
YXNvbnMsIG9ubHkgYWxsb3cgY2xpY2tzIGRpcmVjdGx5IGNvbWluZyBmcm9tIHRoZSB1c2VyLgor
ICAgIGlmICghU2NyaXB0Q29udHJvbGxlcjo6cHJvY2Vzc2luZ1VzZXJHZXN0dXJlKCkpIHsKKyAg
ICAgICAgSFRNTERpdkVsZW1lbnQ6OmRlZmF1bHRFdmVudEhhbmRsZXIoZXZlbnQpOworICAgICAg
ICByZXR1cm47CisgICAgfQorCisgICAgLy8gVGhlIGNhbGwgdG8gZm9jdXMoKSBiZWxvdyBkaXNw
YXRjaGVzIGEgZm9jdXMgZXZlbnQsIGFuZCBhbiBldmVudCBoYW5kbGVyIGluIHRoZSBwYWdlIG1p
Z2h0CisgICAgLy8gcmVtb3ZlIHRoZSBpbnB1dCBlbGVtZW50IGZyb20gRE9NLiBUbyBtYWtlIHN1
cmUgaXQgcmVtYWlucyB2YWxpZCB1bnRpbCB3ZSBmaW5pc2ggb3VyIHdvcmsKKyAgICAvLyBoZXJl
LCB3ZSB0YWtlIGEgdGVtcG9yYXJ5IHJlZmVyZW5jZS4KKyAgICBSZWZQdHI8SFRNTElucHV0RWxl
bWVudD4gaW5wdXQoc3RhdGljX2Nhc3Q8SFRNTElucHV0RWxlbWVudCo+KHNoYWRvd0hvc3QoKSkp
OworCisgICAgaWYgKGlucHV0LT5kaXNhYmxlZCgpIHx8IGlucHV0LT5yZWFkT25seSgpKSB7Cisg
ICAgICAgIGlmICghZXZlbnQtPmRlZmF1bHRIYW5kbGVkKCkpCisgICAgICAgICAgICBIVE1MRGl2
RWxlbWVudDo6ZGVmYXVsdEV2ZW50SGFuZGxlcihldmVudCk7CisgICAgICAgIHJldHVybjsKKyAg
ICB9CisKKyAgICAvLyBPbiBtb3VzZSBkb3duLCBzZWxlY3QgdGhlIHRleHQgYW5kIHNldCBmb2N1
cy4KKyAgICBpZiAoZXZlbnQtPnR5cGUoKSA9PSBldmVudE5hbWVzKCkubW91c2Vkb3duRXZlbnQg
JiYgZXZlbnQtPmlzTW91c2VFdmVudCgpICYmIHN0YXRpY19jYXN0PE1vdXNlRXZlbnQqPihldmVu
dCktPmJ1dHRvbigpID09IExlZnRCdXR0b24pIHsKKyAgICAgICAgaWYgKHJlbmRlcmVyKCkgJiYg
cmVuZGVyZXIoKS0+dmlzaWJsZVRvSGl0VGVzdGluZygpKSB7CisgICAgICAgICAgICBpZiAoRnJh
bWUqIGZyYW1lID0gZG9jdW1lbnQoKS0+ZnJhbWUoKSkgeworICAgICAgICAgICAgICAgIGZyYW1l
LT5ldmVudEhhbmRsZXIoKS0+c2V0Q2FwdHVyaW5nTW91c2VFdmVudHNOb2RlKHRoaXMpOworICAg
ICAgICAgICAgICAgIG1fY2FwdHVyaW5nID0gdHJ1ZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAg
fQorICAgICAgICBSZWZQdHI8SW5wdXRGaWVsZFNwZWVjaEJ1dHRvbkVsZW1lbnQ+IGhvbGRSZWZC
dXR0b24odGhpcyk7CisgICAgICAgIGlucHV0LT5mb2N1cygpOworICAgICAgICBpbnB1dC0+c2Vs
ZWN0KCk7CisgICAgICAgIGV2ZW50LT5zZXREZWZhdWx0SGFuZGxlZCgpOworICAgIH0KKyAgICAv
LyBPbiBtb3VzZSB1cCwgcmVsZWFzZSBjYXB0dXJlIGNsZWFubHkuCisgICAgaWYgKGV2ZW50LT50
eXBlKCkgPT0gZXZlbnROYW1lcygpLm1vdXNldXBFdmVudCAmJiBldmVudC0+aXNNb3VzZUV2ZW50
KCkgJiYgc3RhdGljX2Nhc3Q8TW91c2VFdmVudCo+KGV2ZW50KS0+YnV0dG9uKCkgPT0gTGVmdEJ1
dHRvbikgeworICAgICAgICBpZiAobV9jYXB0dXJpbmcgJiYgcmVuZGVyZXIoKSAmJiByZW5kZXJl
cigpLT52aXNpYmxlVG9IaXRUZXN0aW5nKCkpIHsKKyAgICAgICAgICAgIGlmIChGcmFtZSogZnJh
bWUgPSBkb2N1bWVudCgpLT5mcmFtZSgpKSB7CisgICAgICAgICAgICAgICAgZnJhbWUtPmV2ZW50
SGFuZGxlcigpLT5zZXRDYXB0dXJpbmdNb3VzZUV2ZW50c05vZGUoMCk7CisgICAgICAgICAgICAg
ICAgbV9jYXB0dXJpbmcgPSBmYWxzZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0K
KworICAgIGlmIChldmVudC0+dHlwZSgpID09IGV2ZW50TmFtZXMoKS5jbGlja0V2ZW50ICYmIG1f
bGlzdGVuZXJJZCkgeworICAgICAgICBzd2l0Y2ggKG1fc3RhdGUpIHsKKyAgICAgICAgY2FzZSBJ
ZGxlOgorICAgICAgICAgICAgc3RhcnRTcGVlY2hJbnB1dCgpOworICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgIGNhc2UgUmVjb3JkaW5nOgorICAgICAgICAgICAgc3RvcFNwZWVjaElucHV0KCk7
CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBSZWNvZ25pemluZzoKKyAgICAgICAg
ICAgIC8vIE5vdGhpbmcgdG8gZG8gaGVyZSwgd2Ugd2lsbCBjb250aW51ZSB0byB3YWl0IGZvciBy
ZXN1bHRzLgorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgZXZlbnQtPnNl
dERlZmF1bHRIYW5kbGVkKCk7CisgICAgfQorCisgICAgaWYgKCFldmVudC0+ZGVmYXVsdEhhbmRs
ZWQoKSkKKyAgICAgICAgSFRNTERpdkVsZW1lbnQ6OmRlZmF1bHRFdmVudEhhbmRsZXIoZXZlbnQp
OworfQorCitib29sIElucHV0RmllbGRTcGVlY2hCdXR0b25FbGVtZW50Ojp3aWxsUmVzcG9uZFRv
TW91c2VDbGlja0V2ZW50cygpCit7CisgICAgY29uc3QgSFRNTElucHV0RWxlbWVudCogaW5wdXQg
PSBzdGF0aWNfY2FzdDxIVE1MSW5wdXRFbGVtZW50Kj4oc2hhZG93SG9zdCgpKTsKKyAgICBpZiAo
IWlucHV0LT5kaXNhYmxlZCgpICYmICFpbnB1dC0+cmVhZE9ubHkoKSkKKyAgICAgICAgcmV0dXJu
IHRydWU7CisKKyAgICByZXR1cm4gSFRNTERpdkVsZW1lbnQ6OndpbGxSZXNwb25kVG9Nb3VzZUNs
aWNrRXZlbnRzKCk7Cit9CisKK3ZvaWQgSW5wdXRGaWVsZFNwZWVjaEJ1dHRvbkVsZW1lbnQ6OnNl
dFN0YXRlKFNwZWVjaElucHV0U3RhdGUgc3RhdGUpCit7CisgICAgaWYgKG1fc3RhdGUgIT0gc3Rh
dGUpIHsKKyAgICAgICAgbV9zdGF0ZSA9IHN0YXRlOworICAgICAgICBzaGFkb3dIb3N0KCktPnJl
bmRlcmVyKCktPnJlcGFpbnQoKTsKKyAgICB9Cit9CisKK1NwZWVjaElucHV0KiBJbnB1dEZpZWxk
U3BlZWNoQnV0dG9uRWxlbWVudDo6c3BlZWNoSW5wdXQoKQoreworICAgIHJldHVybiBTcGVlY2hJ
bnB1dDo6ZnJvbShkb2N1bWVudCgpLT5wYWdlKCkpOworfQorCit2b2lkIElucHV0RmllbGRTcGVl
Y2hCdXR0b25FbGVtZW50OjpkaWRDb21wbGV0ZVJlY29yZGluZyhpbnQpCit7CisgICAgc2V0U3Rh
dGUoUmVjb2duaXppbmcpOworfQorCit2b2lkIElucHV0RmllbGRTcGVlY2hCdXR0b25FbGVtZW50
OjpkaWRDb21wbGV0ZVJlY29nbml0aW9uKGludCkKK3sKKyAgICBzZXRTdGF0ZShJZGxlKTsKK30K
Kwordm9pZCBJbnB1dEZpZWxkU3BlZWNoQnV0dG9uRWxlbWVudDo6c2V0UmVjb2duaXRpb25SZXN1
bHQoaW50LCBjb25zdCBTcGVlY2hJbnB1dFJlc3VsdEFycmF5JiByZXN1bHRzKQoreworICAgIG1f
cmVzdWx0cyA9IHJlc3VsdHM7CisKKyAgICAvLyBUaGUgY2FsbCB0byBzZXRWYWx1ZSgpIGJlbG93
IGRpc3BhdGNoZXMgYW4gZXZlbnQsIGFuZCBhbiBldmVudCBoYW5kbGVyIGluIHRoZSBwYWdlIG1p
Z2h0CisgICAgLy8gcmVtb3ZlIHRoZSBpbnB1dCBlbGVtZW50IGZyb20gRE9NLiBUbyBtYWtlIHN1
cmUgaXQgcmVtYWlucyB2YWxpZCB1bnRpbCB3ZSBmaW5pc2ggb3VyIHdvcmsKKyAgICAvLyBoZXJl
LCB3ZSB0YWtlIGEgdGVtcG9yYXJ5IHJlZmVyZW5jZS4KKyAgICBSZWZQdHI8SFRNTElucHV0RWxl
bWVudD4gaW5wdXQoc3RhdGljX2Nhc3Q8SFRNTElucHV0RWxlbWVudCo+KHNoYWRvd0hvc3QoKSkp
OworICAgIGlmIChpbnB1dC0+ZGlzYWJsZWQoKSB8fCBpbnB1dC0+cmVhZE9ubHkoKSkKKyAgICAg
ICAgcmV0dXJuOworCisgICAgUmVmUHRyPElucHV0RmllbGRTcGVlY2hCdXR0b25FbGVtZW50PiBo
b2xkUmVmQnV0dG9uKHRoaXMpOworICAgIGlmIChkb2N1bWVudCgpICYmIGRvY3VtZW50KCktPmRv
bVdpbmRvdygpKSB7CisgICAgICAgIC8vIENhbGwgc2VsZWN0aW9uQ2hhbmdlZCwgY2F1c2luZyB0
aGUgZWxlbWVudCB0byBjYWNoZSB0aGUgc2VsZWN0aW9uLAorICAgICAgICAvLyBzbyB0aGF0IHRo
ZSB0ZXh0IGV2ZW50IGluc2VydHMgdGhlIHRleHQgaW4gdGhpcyBlbGVtZW50IGV2ZW4gaWYKKyAg
ICAgICAgLy8gZm9jdXMgaGFzIG1vdmVkIGF3YXkgZnJvbSBpdC4KKyAgICAgICAgaW5wdXQtPnNl
bGVjdGlvbkNoYW5nZWQoZmFsc2UpOworICAgICAgICBpbnB1dC0+ZGlzcGF0Y2hFdmVudChUZXh0
RXZlbnQ6OmNyZWF0ZShkb2N1bWVudCgpLT5kb21XaW5kb3coKSwgcmVzdWx0cy5pc0VtcHR5KCkg
PyAiIiA6IHJlc3VsdHNbMF0tPnV0dGVyYW5jZSgpLCBUZXh0RXZlbnRJbnB1dE90aGVyKSk7Cisg
ICAgfQorCisgICAgLy8gVGhpcyBldmVudCBpcyBzZW50IGFmdGVyIHRoZSB0ZXh0IGV2ZW50IHNv
IHRoZSB3ZWJzaXRlIGNhbiBwZXJmb3JtIGFjdGlvbnMgdXNpbmcgdGhlIGlucHV0IGZpZWxkIGNv
bnRlbnQgaW1tZWRpYXRlbHkuCisgICAgLy8gSXQgcHJvdmlkZXMgYWx0ZXJuYXRpdmUgcmVjb2du
aXRpb24gaHlwb3RoZXNlcyBhbmQgbm90aWZpZXMgdGhhdCB0aGUgcmVzdWx0cyBjb21lIGZyb20g
c3BlZWNoIGlucHV0LgorICAgIGlucHV0LT5kaXNwYXRjaEV2ZW50KFNwZWVjaElucHV0RXZlbnQ6
OmNyZWF0ZShldmVudE5hbWVzKCkud2Via2l0c3BlZWNoY2hhbmdlRXZlbnQsIHJlc3VsdHMpKTsK
KworICAgIC8vIENoZWNrIGJlZm9yZSBhY2Nlc3NpbmcgdGhlIHJlbmRlcmVyIGFzIHRoZSBhYm92
ZSBldmVudCBjb3VsZCBoYXZlIHBvdGVudGlhbGx5IHR1cm5lZCBvZmYKKyAgICAvLyBzcGVlY2gg
aW4gdGhlIGlucHV0IGVsZW1lbnQsIGhlbmNlIHJlbW92aW5nIHRoaXMgYnV0dG9uIGFuZCByZW5k
ZXJlciBmcm9tIHRoZSBoaWVyYXJjaHkuCisgICAgaWYgKHJlbmRlcmVyKCkpCisgICAgICAgIHJl
bmRlcmVyKCktPnJlcGFpbnQoKTsKK30KKwordm9pZCBJbnB1dEZpZWxkU3BlZWNoQnV0dG9uRWxl
bWVudDo6YXR0YWNoKCkKK3sKKyAgICBBU1NFUlQoIW1fbGlzdGVuZXJJZCk7CisgICAgaWYgKFNw
ZWVjaElucHV0KiBpbnB1dCA9IFNwZWVjaElucHV0Ojpmcm9tKGRvY3VtZW50KCktPnBhZ2UoKSkp
CisgICAgICAgIG1fbGlzdGVuZXJJZCA9IGlucHV0LT5yZWdpc3Rlckxpc3RlbmVyKHRoaXMpOwor
ICAgIEhUTUxEaXZFbGVtZW50OjphdHRhY2goKTsKK30KKwordm9pZCBJbnB1dEZpZWxkU3BlZWNo
QnV0dG9uRWxlbWVudDo6ZGV0YWNoKCkKK3sKKyAgICBpZiAobV9jYXB0dXJpbmcpIHsKKyAgICAg
ICAgaWYgKEZyYW1lKiBmcmFtZSA9IGRvY3VtZW50KCktPmZyYW1lKCkpCisgICAgICAgICAgICBm
cmFtZS0+ZXZlbnRIYW5kbGVyKCktPnNldENhcHR1cmluZ01vdXNlRXZlbnRzTm9kZSgwKTsKKyAg
ICB9CisKKyAgICBpZiAobV9saXN0ZW5lcklkKSB7CisgICAgICAgIGlmIChtX3N0YXRlICE9IElk
bGUpCisgICAgICAgICAgICBzcGVlY2hJbnB1dCgpLT5jYW5jZWxSZWNvZ25pdGlvbihtX2xpc3Rl
bmVySWQpOworICAgICAgICBzcGVlY2hJbnB1dCgpLT51bnJlZ2lzdGVyTGlzdGVuZXIobV9saXN0
ZW5lcklkKTsKKyAgICAgICAgbV9saXN0ZW5lcklkID0gMDsKKyAgICB9CisKKyAgICBIVE1MRGl2
RWxlbWVudDo6ZGV0YWNoKCk7Cit9CisKK3ZvaWQgSW5wdXRGaWVsZFNwZWVjaEJ1dHRvbkVsZW1l
bnQ6OnN0YXJ0U3BlZWNoSW5wdXQoKQoreworICAgIGlmIChtX3N0YXRlICE9IElkbGUpCisgICAg
ICAgIHJldHVybjsKKworICAgIFJlZlB0cjxIVE1MSW5wdXRFbGVtZW50PiBpbnB1dCA9IHN0YXRp
Y19jYXN0PEhUTUxJbnB1dEVsZW1lbnQqPihzaGFkb3dIb3N0KCkpOworICAgIEF0b21pY1N0cmlu
ZyBsYW5ndWFnZSA9IGlucHV0LT5jb21wdXRlSW5oZXJpdGVkTGFuZ3VhZ2UoKTsKKyAgICBTdHJp
bmcgZ3JhbW1hciA9IGlucHV0LT5nZXRBdHRyaWJ1dGUod2Via2l0Z3JhbW1hckF0dHIpOworICAg
IEludFJlY3QgcmVjdCA9IGRvY3VtZW50KCktPnZpZXcoKS0+Y29udGVudHNUb1Jvb3RWaWV3KGdl
dFBpeGVsU25hcHBlZFJlY3QoKSk7CisgICAgaWYgKHNwZWVjaElucHV0KCktPnN0YXJ0UmVjb2du
aXRpb24obV9saXN0ZW5lcklkLCByZWN0LCBsYW5ndWFnZSwgZ3JhbW1hciwgZG9jdW1lbnQoKS0+
c2VjdXJpdHlPcmlnaW4oKSkpCisgICAgICAgIHNldFN0YXRlKFJlY29yZGluZyk7Cit9CisKK3Zv
aWQgSW5wdXRGaWVsZFNwZWVjaEJ1dHRvbkVsZW1lbnQ6OnN0b3BTcGVlY2hJbnB1dCgpCit7Cisg
ICAgaWYgKG1fc3RhdGUgPT0gUmVjb3JkaW5nKQorICAgICAgICBzcGVlY2hJbnB1dCgpLT5zdG9w
UmVjb3JkaW5nKG1fbGlzdGVuZXJJZCk7Cit9CisKK2NvbnN0IEF0b21pY1N0cmluZyYgSW5wdXRG
aWVsZFNwZWVjaEJ1dHRvbkVsZW1lbnQ6OnNoYWRvd1BzZXVkb0lkKCkgY29uc3QKK3sKKyAgICBE
RUZJTkVfU1RBVElDX0xPQ0FMKEF0b21pY1N0cmluZywgcHNldWRvSWQsICgiLXdlYmtpdC1pbnB1
dC1zcGVlY2gtYnV0dG9uIikpOworICAgIHJldHVybiBwc2V1ZG9JZDsKK30KKworI2VuZGlmIC8v
IEVOQUJMRShJTlBVVF9TUEVFQ0gpCisKK30KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvc2hh
ZG93L1NwaW5CdXR0b25FbGVtZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRt
bC9zaGFkb3cvU3BpbkJ1dHRvbkVsZW1lbnQuaAkocmV2aXNpb24gMTI1NTMwKQkoZnJvbSBTb3Vy
Y2UvV2ViQ29yZS9odG1sL3NoYWRvdy9UZXh0Q29udHJvbElubmVyRWxlbWVudHMuaDoxMjU1MzAp
CisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL3NoYWRvdy9TcGluQnV0dG9uRWxlbWVudC5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0wLDAgKzEsMTk5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA2LCAy
MDA4LCAyMDEwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAo
QykgMjAxMCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJ
UycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgorICog
Q09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9S
IEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkK
KyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworIAorI2lmbmRl
ZiBUZXh0Q29udHJvbElubmVyRWxlbWVudHNfaAorI2RlZmluZSBUZXh0Q29udHJvbElubmVyRWxl
bWVudHNfaAorCisjaW5jbHVkZSAiSFRNTERpdkVsZW1lbnQuaCIKKyNpbmNsdWRlICJTcGVlY2hJ
bnB1dExpc3RlbmVyLmgiCisjaW5jbHVkZSAiVGltZXIuaCIKKyNpbmNsdWRlIDx3dGYvRm9yd2Fy
ZC5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIFNwZWVjaElucHV0OworCitjbGFz
cyBUZXh0Q29udHJvbElubmVyRWxlbWVudCA6IHB1YmxpYyBIVE1MRGl2RWxlbWVudCB7CitwdWJs
aWM6CisgICAgc3RhdGljIFBhc3NSZWZQdHI8VGV4dENvbnRyb2xJbm5lckVsZW1lbnQ+IGNyZWF0
ZShEb2N1bWVudCopOworCitwcm90ZWN0ZWQ6CisgICAgVGV4dENvbnRyb2xJbm5lckVsZW1lbnQo
RG9jdW1lbnQqKTsKKyAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8UmVuZGVyU3R5bGU+IGN1c3RvbVN0
eWxlRm9yUmVuZGVyZXIoKSBPVkVSUklERTsKKworcHJpdmF0ZToKKyAgICB2aXJ0dWFsIGJvb2wg
aXNNb3VzZUZvY3VzYWJsZSgpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9Cit9OworCitjbGFzcyBU
ZXh0Q29udHJvbElubmVyVGV4dEVsZW1lbnQgOiBwdWJsaWMgSFRNTERpdkVsZW1lbnQgeworcHVi
bGljOgorICAgIHN0YXRpYyBQYXNzUmVmUHRyPFRleHRDb250cm9sSW5uZXJUZXh0RWxlbWVudD4g
Y3JlYXRlKERvY3VtZW50Kik7CisKKyAgICB2aXJ0dWFsIHZvaWQgZGVmYXVsdEV2ZW50SGFuZGxl
cihFdmVudCopOworCitwcml2YXRlOgorICAgIFRleHRDb250cm9sSW5uZXJUZXh0RWxlbWVudChE
b2N1bWVudCopOworICAgIHZpcnR1YWwgUmVuZGVyT2JqZWN0KiBjcmVhdGVSZW5kZXJlcihSZW5k
ZXJBcmVuYSosIFJlbmRlclN0eWxlKik7CisgICAgdmlydHVhbCBQYXNzUmVmUHRyPFJlbmRlclN0
eWxlPiBjdXN0b21TdHlsZUZvclJlbmRlcmVyKCkgT1ZFUlJJREU7CisgICAgdmlydHVhbCBib29s
IGlzTW91c2VGb2N1c2FibGUoKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQorfTsKKworY2xhc3Mg
U2VhcmNoRmllbGRSZXN1bHRzQnV0dG9uRWxlbWVudCA6IHB1YmxpYyBIVE1MRGl2RWxlbWVudCB7
CitwdWJsaWM6CisgICAgc3RhdGljIFBhc3NSZWZQdHI8U2VhcmNoRmllbGRSZXN1bHRzQnV0dG9u
RWxlbWVudD4gY3JlYXRlKERvY3VtZW50Kik7CisKKyAgICB2aXJ0dWFsIHZvaWQgZGVmYXVsdEV2
ZW50SGFuZGxlcihFdmVudCopOworICAgIHZpcnR1YWwgYm9vbCB3aWxsUmVzcG9uZFRvTW91c2VD
bGlja0V2ZW50cygpIE9WRVJSSURFOworCitwcml2YXRlOgorICAgIFNlYXJjaEZpZWxkUmVzdWx0
c0J1dHRvbkVsZW1lbnQoRG9jdW1lbnQqKTsKKyAgICB2aXJ0dWFsIGNvbnN0IEF0b21pY1N0cmlu
ZyYgc2hhZG93UHNldWRvSWQoKSBjb25zdDsKKyAgICB2aXJ0dWFsIGJvb2wgaXNNb3VzZUZvY3Vz
YWJsZSgpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9Cit9OworCitjbGFzcyBTZWFyY2hGaWVsZENh
bmNlbEJ1dHRvbkVsZW1lbnQgOiBwdWJsaWMgSFRNTERpdkVsZW1lbnQgeworcHVibGljOgorICAg
IHN0YXRpYyBQYXNzUmVmUHRyPFNlYXJjaEZpZWxkQ2FuY2VsQnV0dG9uRWxlbWVudD4gY3JlYXRl
KERvY3VtZW50Kik7CisKKyAgICB2aXJ0dWFsIHZvaWQgZGVmYXVsdEV2ZW50SGFuZGxlcihFdmVu
dCopOworICAgIHZpcnR1YWwgYm9vbCB3aWxsUmVzcG9uZFRvTW91c2VDbGlja0V2ZW50cygpIE9W
RVJSSURFOworCitwcml2YXRlOgorICAgIFNlYXJjaEZpZWxkQ2FuY2VsQnV0dG9uRWxlbWVudChE
b2N1bWVudCopOworICAgIHZpcnR1YWwgY29uc3QgQXRvbWljU3RyaW5nJiBzaGFkb3dQc2V1ZG9J
ZCgpIGNvbnN0OworICAgIHZpcnR1YWwgdm9pZCBkZXRhY2goKTsKKyAgICB2aXJ0dWFsIGJvb2wg
aXNNb3VzZUZvY3VzYWJsZSgpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CisKKyAgICBib29sIG1f
Y2FwdHVyaW5nOworfTsKKworY2xhc3MgU3BpbkJ1dHRvbkVsZW1lbnQgOiBwdWJsaWMgSFRNTERp
dkVsZW1lbnQgeworcHVibGljOgorICAgIGVudW0gVXBEb3duU3RhdGUgeworICAgICAgICBJbmRl
dGVybWluYXRlLCAvLyBIb3ZlcmVkLCBidXQgdGhlIGV2ZW50IGlzIG5vdCBoYW5kbGVkLgorICAg
ICAgICBEb3duLAorICAgICAgICBVcCwKKyAgICB9OworCisgICAgY2xhc3MgU3RlcEFjdGlvbkhh
bmRsZXIgeworICAgIHB1YmxpYzoKKyAgICAgICAgdmlydHVhbCB+U3RlcEFjdGlvbkhhbmRsZXIo
KSB7IH0KKyAgICAgICAgdmlydHVhbCB2b2lkIHNwaW5CdXR0b25TdGVwRG93bigpID0gMDsKKyAg
ICAgICAgdmlydHVhbCB2b2lkIHNwaW5CdXR0b25TdGVwVXAoKSA9IDA7CisgICAgfTsKKworICAg
IC8vIFRoZSBvd25lciBvZiBTcGluQnV0dG9uRWxlbWVudCBtdXN0IGNhbGwgcmVtb3ZlU3RlcEFj
dGlvbkhhbmRsZXIKKyAgICAvLyBiZWNhdXNlIFNwaW5CdXR0b25FbGVtZW50IGNhbiBiZSBvdXRs
aXZlIFN0ZXBBY3Rpb25IYW5kbGVyCisgICAgLy8gaW1wbGVtZW50YXRpb24sIGUuZy4gZHVyaW5n
IGV2ZW50IGhhbmRsaW5nLgorICAgIHN0YXRpYyBQYXNzUmVmUHRyPFNwaW5CdXR0b25FbGVtZW50
PiBjcmVhdGUoRG9jdW1lbnQqLCBTdGVwQWN0aW9uSGFuZGxlciYpOworICAgIFVwRG93blN0YXRl
IHVwRG93blN0YXRlKCkgY29uc3QgeyByZXR1cm4gbV91cERvd25TdGF0ZTsgfQorICAgIHZpcnR1
YWwgdm9pZCByZWxlYXNlQ2FwdHVyZSgpOworICAgIHZvaWQgcmVtb3ZlU3RlcEFjdGlvbkhhbmRs
ZXIoKSB7IG1fc3RlcEFjdGlvbkhhbmRsZXIgPSAwOyB9CisKKyAgICB2b2lkIHN0ZXAoaW50IGFt
b3VudCk7CisgICAgCisgICAgdmlydHVhbCBib29sIHdpbGxSZXNwb25kVG9Nb3VzZU1vdmVFdmVu
dHMoKSBPVkVSUklERTsKKyAgICB2aXJ0dWFsIGJvb2wgd2lsbFJlc3BvbmRUb01vdXNlQ2xpY2tF
dmVudHMoKSBPVkVSUklERTsKKworICAgIHZvaWQgZm9yd2FyZEV2ZW50KEV2ZW50Kik7CisKK3By
aXZhdGU6CisgICAgU3BpbkJ1dHRvbkVsZW1lbnQoRG9jdW1lbnQqLCBTdGVwQWN0aW9uSGFuZGxl
ciYpOworCisgICAgdmlydHVhbCBjb25zdCBBdG9taWNTdHJpbmcmIHNoYWRvd1BzZXVkb0lkKCkg
Y29uc3Q7CisgICAgdmlydHVhbCB2b2lkIGRldGFjaCgpOworICAgIHZpcnR1YWwgYm9vbCBpc1Nw
aW5CdXR0b25FbGVtZW50KCkgY29uc3QgeyByZXR1cm4gdHJ1ZTsgfQorICAgIHZpcnR1YWwgYm9v
bCBpc0VuYWJsZWRGb3JtQ29udHJvbCgpIGNvbnN0IHsgcmV0dXJuIHNoYWRvd0hvc3QoKS0+aXNF
bmFibGVkRm9ybUNvbnRyb2woKTsgfQorICAgIHZpcnR1YWwgYm9vbCBzaG91bGRNYXRjaFJlYWRP
bmx5U2VsZWN0b3IoKSBjb25zdCBPVkVSUklERTsKKyAgICB2aXJ0dWFsIGJvb2wgc2hvdWxkTWF0
Y2hSZWFkV3JpdGVTZWxlY3RvcigpIGNvbnN0IE9WRVJSSURFOworICAgIHZpcnR1YWwgdm9pZCBk
ZWZhdWx0RXZlbnRIYW5kbGVyKEV2ZW50Kik7CisgICAgdm9pZCBkb1N0ZXBBY3Rpb24oaW50KTsK
KyAgICB2b2lkIHN0YXJ0UmVwZWF0aW5nVGltZXIoKTsKKyAgICB2b2lkIHN0b3BSZXBlYXRpbmdU
aW1lcigpOworICAgIHZvaWQgcmVwZWF0aW5nVGltZXJGaXJlZChUaW1lcjxTcGluQnV0dG9uRWxl
bWVudD4qKTsKKyAgICB2aXJ0dWFsIHZvaWQgc2V0SG92ZXJlZChib29sID0gdHJ1ZSk7CisgICAg
dmlydHVhbCBib29sIGlzTW91c2VGb2N1c2FibGUoKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQor
CisgICAgU3RlcEFjdGlvbkhhbmRsZXIqIG1fc3RlcEFjdGlvbkhhbmRsZXI7CisgICAgYm9vbCBt
X2NhcHR1cmluZzsKKyAgICBVcERvd25TdGF0ZSBtX3VwRG93blN0YXRlOworICAgIFVwRG93blN0
YXRlIG1fcHJlc3NTdGFydGluZ1N0YXRlOworICAgIFRpbWVyPFNwaW5CdXR0b25FbGVtZW50PiBt
X3JlcGVhdGluZ1RpbWVyOworfTsKKworI2lmIEVOQUJMRShJTlBVVF9TUEVFQ0gpCisKK2NsYXNz
IElucHV0RmllbGRTcGVlY2hCdXR0b25FbGVtZW50CisgICAgOiBwdWJsaWMgSFRNTERpdkVsZW1l
bnQsCisgICAgICBwdWJsaWMgU3BlZWNoSW5wdXRMaXN0ZW5lciB7CitwdWJsaWM6CisgICAgZW51
bSBTcGVlY2hJbnB1dFN0YXRlIHsKKyAgICAgICAgSWRsZSwKKyAgICAgICAgUmVjb3JkaW5nLAor
ICAgICAgICBSZWNvZ25pemluZywKKyAgICB9OworCisgICAgc3RhdGljIFBhc3NSZWZQdHI8SW5w
dXRGaWVsZFNwZWVjaEJ1dHRvbkVsZW1lbnQ+IGNyZWF0ZShEb2N1bWVudCopOworICAgIHZpcnR1
YWwgfklucHV0RmllbGRTcGVlY2hCdXR0b25FbGVtZW50KCk7CisKKyAgICB2aXJ0dWFsIHZvaWQg
ZGV0YWNoKCk7CisgICAgdmlydHVhbCB2b2lkIGRlZmF1bHRFdmVudEhhbmRsZXIoRXZlbnQqKTsK
KyAgICB2aXJ0dWFsIGJvb2wgd2lsbFJlc3BvbmRUb01vdXNlQ2xpY2tFdmVudHMoKTsKKyAgICB2
aXJ0dWFsIGJvb2wgaXNJbnB1dEZpZWxkU3BlZWNoQnV0dG9uRWxlbWVudCgpIGNvbnN0IHsgcmV0
dXJuIHRydWU7IH0KKyAgICBTcGVlY2hJbnB1dFN0YXRlIHN0YXRlKCkgY29uc3QgeyByZXR1cm4g
bV9zdGF0ZTsgfQorICAgIHZvaWQgc3RhcnRTcGVlY2hJbnB1dCgpOworICAgIHZvaWQgc3RvcFNw
ZWVjaElucHV0KCk7CisKKyAgICAvLyBTcGVlY2hJbnB1dExpc3RlbmVyIG1ldGhvZHMuCisgICAg
dm9pZCBkaWRDb21wbGV0ZVJlY29yZGluZyhpbnQpOworICAgIHZvaWQgZGlkQ29tcGxldGVSZWNv
Z25pdGlvbihpbnQpOworICAgIHZvaWQgc2V0UmVjb2duaXRpb25SZXN1bHQoaW50LCBjb25zdCBT
cGVlY2hJbnB1dFJlc3VsdEFycmF5Jik7CisKK3ByaXZhdGU6CisgICAgSW5wdXRGaWVsZFNwZWVj
aEJ1dHRvbkVsZW1lbnQoRG9jdW1lbnQqKTsKKyAgICBTcGVlY2hJbnB1dCogc3BlZWNoSW5wdXQo
KTsKKyAgICB2b2lkIHNldFN0YXRlKFNwZWVjaElucHV0U3RhdGUgc3RhdGUpOworICAgIHZpcnR1
YWwgY29uc3QgQXRvbWljU3RyaW5nJiBzaGFkb3dQc2V1ZG9JZCgpIGNvbnN0OworICAgIHZpcnR1
YWwgYm9vbCBpc01vdXNlRm9jdXNhYmxlKCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KKyAgICB2
aXJ0dWFsIHZvaWQgYXR0YWNoKCk7CisKKyAgICBib29sIG1fY2FwdHVyaW5nOworICAgIFNwZWVj
aElucHV0U3RhdGUgbV9zdGF0ZTsKKyAgICBpbnQgbV9saXN0ZW5lcklkOworICAgIFNwZWVjaElu
cHV0UmVzdWx0QXJyYXkgbV9yZXN1bHRzOworfTsKKworaW5saW5lIElucHV0RmllbGRTcGVlY2hC
dXR0b25FbGVtZW50KiB0b0lucHV0RmllbGRTcGVlY2hCdXR0b25FbGVtZW50KEVsZW1lbnQqIGVs
ZW1lbnQpCit7CisgICAgQVNTRVJUKCFlbGVtZW50IHx8IGVsZW1lbnQtPmlzSW5wdXRGaWVsZFNw
ZWVjaEJ1dHRvbkVsZW1lbnQoKSk7CisgICAgcmV0dXJuIHN0YXRpY19jYXN0PElucHV0RmllbGRT
cGVlY2hCdXR0b25FbGVtZW50Kj4oZWxlbWVudCk7Cit9CisKKyNlbmRpZiAvLyBFTkFCTEUoSU5Q
VVRfU1BFRUNIKQorCit9IC8vIG5hbWVzcGFjZQorCisjZW5kaWYK
</data>
<flag name="review"
          id="168325"
          type_id="1"
          status="+"
          setter="tkent"
    />
          </attachment>
      

    </bug>

</bugzilla>