<?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>104433</bug_id>
          
          <creation_ts>2012-12-07 23:28:39 -0800</creation_ts>
          <short_desc>[QT][EFL][WK2] Move the GraphicsSurfaceGLX.cpp to common place</short_desc>
          <delta_ts>2012-12-11 01:30:12 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>Tools / Tests</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>104081</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Jinwoo Song">jinwoo7.song</reporter>
          <assigned_to name="Jinwoo Song">jinwoo7.song</assigned_to>
          <cc>gyuyoung.kim</cc>
    
    <cc>kenneth</cc>
    
    <cc>noam</cc>
    
    <cc>rakuco</cc>
    
    <cc>webkit.review.bot</cc>
    
    <cc>zeno</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>786442</commentid>
    <comment_count>0</comment_count>
    <who name="Jinwoo Song">jinwoo7.song</who>
    <bug_when>2012-12-07 23:28:39 -0800</bug_when>
    <thetext>QT and EFL are commonly using the GraphicsSurfaceGLX.cpp and it looks better to move this file to /glx directory.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>786455</commentid>
    <comment_count>1</comment_count>
      <attachid>178345</attachid>
    <who name="Jinwoo Song">jinwoo7.song</who>
    <bug_when>2012-12-08 00:47:24 -0800</bug_when>
    <thetext>Created attachment 178345
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>787876</commentid>
    <comment_count>2</comment_count>
    <who name="Gyuyoung Kim">gyuyoung.kim</who>
    <bug_when>2012-12-10 17:26:43 -0800</bug_when>
    <thetext>Looks good to me. I think QT reviewer should accept this patch. Noam ?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>788088</commentid>
    <comment_count>3</comment_count>
    <who name="Kenneth Rohde Christiansen">kenneth</who>
    <bug_when>2012-12-10 23:44:17 -0800</bug_when>
    <thetext>Zeno is the guy to ask :-)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>788132</commentid>
    <comment_count>4</comment_count>
    <who name="Zeno Albisser">zeno</who>
    <bug_when>2012-12-11 00:43:36 -0800</bug_when>
    <thetext>(In reply to comment #3)
&gt; Zeno is the guy to ask :-)
No objections from my side. - Thanks for the heads up!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>788170</commentid>
    <comment_count>5</comment_count>
      <attachid>178345</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-12-11 01:30:07 -0800</bug_when>
    <thetext>Comment on attachment 178345
Patch

Clearing flags on attachment: 178345

Committed r137268: &lt;http://trac.webkit.org/changeset/137268&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>788171</commentid>
    <comment_count>6</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-12-11 01:30:12 -0800</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>178345</attachid>
            <date>2012-12-08 00:47:24 -0800</date>
            <delta_ts>2012-12-11 01:30:07 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-104433-20121208174444.patch</filename>
            <type>text/plain</type>
            <size>42231</size>
            <attacher name="Jinwoo Song">jinwoo7.song</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTM3MDE2CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNTQ4NTZkMDI0YjkyMWMy
MGJhMzc3YzY3MWM1ZGRlMDE5YTllYTUyNy4uZjk0OWU2MTQyYTAyMjFjNTYxMDFlMTAxMzljN2E4
YzZlM2EzZWI4NiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDUyIEBACisyMDEyLTEyLTA3ICBKaW53
b28gU29uZyAgPGppbndvbzcuc29uZ0BzYW1zdW5nLmNvbT4KKworICAgICAgICBbUVRdW0VGTF1b
V0syXSBNb3ZlIHRoZSBHcmFwaGljc1N1cmZhY2VHTFguY3BwIHRvIGNvbW1vbiBwbGFjZQorICAg
ICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTA0NDMzCisKKyAg
ICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgUVQgYW5kIEVGTCBh
cmUgY29tbW9ubHkgdXNpbmcgdGhlIEdyYXBoaWNzU3VyZmFjZUdMWC5jcHAgYW5kCisgICAgICAg
IGl0IGxvb2tzIGJldHRlciB0byBtb3ZlIHRoaXMgZmlsZSB0byAvZ2x4IGRpcmVjdG9yeS4KKwor
ICAgICAgICAqIFBsYXRmb3JtRWZsLmNtYWtlOgorICAgICAgICAqIFRhcmdldC5wcmk6CisgICAg
ICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvc3VyZmFjZXMvZ2x4L0dyYXBoaWNzU3VyZmFjZUdMWC5j
cHA6IFJlbmFtZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9zdXJmYWNl
cy9xdC9HcmFwaGljc1N1cmZhY2VHTFguY3BwLgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAg
IChPZmZTY3JlZW5Sb290V2luZG93KToKKyAgICAgICAgKFdlYkNvcmU6Ok9mZlNjcmVlblJvb3RX
aW5kb3c6Ok9mZlNjcmVlblJvb3RXaW5kb3cpOgorICAgICAgICAoV2ViQ29yZTo6T2ZmU2NyZWVu
Um9vdFdpbmRvdzo6Z2V0WFdpbmRvdyk6CisgICAgICAgIChXZWJDb3JlOjpPZmZTY3JlZW5Sb290
V2luZG93OjpkaXNwbGF5KToKKyAgICAgICAgKFdlYkNvcmU6Ok9mZlNjcmVlblJvb3RXaW5kb3c6
On5PZmZTY3JlZW5Sb290V2luZG93KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzU3VyZmFj
ZVByaXZhdGU6OkdyYXBoaWNzU3VyZmFjZVByaXZhdGUpOgorICAgICAgICAoR3JhcGhpY3NTdXJm
YWNlUHJpdmF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc1N1cmZhY2VQcml2YXRlOjp+
R3JhcGhpY3NTdXJmYWNlUHJpdmF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc1N1cmZh
Y2VQcml2YXRlOjpjcmVhdGVTdXJmYWNlKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzU3Vy
ZmFjZVByaXZhdGU6OmNyZWF0ZVBpeG1hcCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc1N1
cmZhY2VQcml2YXRlOjp0ZXh0dXJlSXNZSW52ZXJ0ZWQpOgorICAgICAgICAoV2ViQ29yZTo6R3Jh
cGhpY3NTdXJmYWNlUHJpdmF0ZTo6bWFrZUN1cnJlbnQpOgorICAgICAgICAoV2ViQ29yZTo6R3Jh
cGhpY3NTdXJmYWNlUHJpdmF0ZTo6ZG9uZUN1cnJlbnQpOgorICAgICAgICAoV2ViQ29yZTo6R3Jh
cGhpY3NTdXJmYWNlUHJpdmF0ZTo6c3dhcEJ1ZmZlcnMpOgorICAgICAgICAoV2ViQ29yZTo6R3Jh
cGhpY3NTdXJmYWNlUHJpdmF0ZTo6Y29weUZyb21UZXh0dXJlKToKKyAgICAgICAgKFdlYkNvcmU6
OkdyYXBoaWNzU3VyZmFjZVByaXZhdGU6OmRpc3BsYXkpOgorICAgICAgICAoV2ViQ29yZTo6R3Jh
cGhpY3NTdXJmYWNlUHJpdmF0ZTo6Z2x4UGl4bWFwKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBo
aWNzU3VyZmFjZVByaXZhdGU6OnNpemUpOgorICAgICAgICAoV2ViQ29yZTo6cmVzb2x2ZUdMTWV0
aG9kcyk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc1N1cmZhY2U6OnBsYXRmb3JtRXhwb3J0
KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzU3VyZmFjZTo6cGxhdGZvcm1HZXRUZXh0dXJl
SUQpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NTdXJmYWNlOjpwbGF0Zm9ybUNvcHlUb0dM
VGV4dHVyZSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc1N1cmZhY2U6OnBsYXRmb3JtQ29w
eUZyb21UZXh0dXJlKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzU3VyZmFjZTo6cGxhdGZv
cm1QYWludFRvVGV4dHVyZU1hcHBlcik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc1N1cmZh
Y2U6OnBsYXRmb3JtRnJvbnRCdWZmZXIpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NTdXJm
YWNlOjpwbGF0Zm9ybVN3YXBCdWZmZXJzKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzU3Vy
ZmFjZTo6cGxhdGZvcm1TaXplKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzU3VyZmFjZTo6
cGxhdGZvcm1DcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NTdXJmYWNlOjpwbGF0
Zm9ybUltcG9ydCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc1N1cmZhY2U6OnBsYXRmb3Jt
TG9jayk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc1N1cmZhY2U6OnBsYXRmb3JtVW5sb2Nr
KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzU3VyZmFjZTo6cGxhdGZvcm1EZXN0cm95KToK
KyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzU3VyZmFjZTo6cGxhdGZvcm1CZWdpblBhaW50KToK
KyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzU3VyZmFjZTo6Y3JlYXRlUmVhZE9ubHlJbWFnZSk6
CisKIDIwMTItMTItMDcgIFJpayBDYWJhbmllciAgPGNhYmFuaWVyQGFkb2JlLmNvbT4KIAogICAg
ICAgICBFeHRlbmQgcGxhdGZvcm0gbGF5ZXIgc28gaXQgY2FuIHBhc3MgYmxlbmQgbW9kZXMgdG8g
dGhlIGNvbXBvc2l0aW5nIGNhbGxzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9QbGF0Zm9y
bUVmbC5jbWFrZSBiL1NvdXJjZS9XZWJDb3JlL1BsYXRmb3JtRWZsLmNtYWtlCmluZGV4IDc5MjRk
NTc4ZTNkN2E3ZDNiNmE4MTcyNzg3ODZiOWQ1MTc0YjVhMjQuLjAyYTYwZmI1NzliNGFkMDZlN2Ix
N2NhMWM0YTEyMmMyMmQ2NDhlNTIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1BsYXRmb3Jt
RWZsLmNtYWtlCisrKyBiL1NvdXJjZS9XZWJDb3JlL1BsYXRmb3JtRWZsLmNtYWtlCkBAIC0yOTMs
NyArMjkzLDcgQEAgaWYgKFdURl9VU0VfM0RfR1JBUEhJQ1MpCiAgICAgICAgIHBsYXRmb3JtL2dy
YXBoaWNzL3N1cmZhY2VzL0dyYXBoaWNzU3VyZmFjZS5jcHAKICAgICAgICAgcGxhdGZvcm0vZ3Jh
cGhpY3Mvc3VyZmFjZXMvZ2x4L0dMWFN1cmZhY2UuY3BwCiAgICAgICAgIHBsYXRmb3JtL2dyYXBo
aWNzL3N1cmZhY2VzL2dseC9HTFhDb250ZXh0LmNwcAotICAgICAgICBwbGF0Zm9ybS9ncmFwaGlj
cy9zdXJmYWNlcy9xdC9HcmFwaGljc1N1cmZhY2VHTFguY3BwCisgICAgICAgIHBsYXRmb3JtL2dy
YXBoaWNzL3N1cmZhY2VzL2dseC9HcmFwaGljc1N1cmZhY2VHTFguY3BwCiAgICAgICAgIHBsYXRm
b3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyR0wuY3BwCiAgICAgICAgIHBsYXRmb3Jt
L2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyU2hhZGVyTWFuYWdlci5jcHAKICAgICApCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9UYXJnZXQucHJpIGIvU291cmNlL1dlYkNvcmUvVGFy
Z2V0LnByaQppbmRleCBlMGE0OGQ1MWExNWMwZDFlNzUxZjc1YjNhNmFjMDc4MGIxMjRkMjM1Li41
ZGFlYmExYTUwZTJmYmRjMTM2ZjMzNzI0NDEzMGJiMTBhNDQzMDIwIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9UYXJnZXQucHJpCisrKyBiL1NvdXJjZS9XZWJDb3JlL1RhcmdldC5wcmkKQEAg
LTQxMjQsNyArNDEyNCw3IEBAIHVzZT8oR1JBUEhJQ1NfU1VSRkFDRSkgewogICAgICAgICBTT1VS
Q0VTICs9IHBsYXRmb3JtL2dyYXBoaWNzL3N1cmZhY2VzL3dpbi9HcmFwaGljc1N1cmZhY2VXaW4u
Y3BwCiAgICAgfQogICAgIGhhdmU/KFhDT01QT1NJVEUpIHsKLSAgICAgICAgU09VUkNFUyArPSBw
bGF0Zm9ybS9ncmFwaGljcy9zdXJmYWNlcy9xdC9HcmFwaGljc1N1cmZhY2VHTFguY3BwCisgICAg
ICAgIFNPVVJDRVMgKz0gcGxhdGZvcm0vZ3JhcGhpY3Mvc3VyZmFjZXMvZ2x4L0dyYXBoaWNzU3Vy
ZmFjZUdMWC5jcHAKICAgICB9CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL3N1cmZhY2VzL2dseC9HcmFwaGljc1N1cmZhY2VHTFguY3BwIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc3VyZmFjZXMvZ2x4L0dyYXBoaWNzU3VyZmFjZUdM
WC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMC4uYThhNDMwYWE3YWM0NWJkMjY5ZGQxZjkwNTk0YWNmOGY1NmY3NzNi
NQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3N1
cmZhY2VzL2dseC9HcmFwaGljc1N1cmZhY2VHTFguY3BwCkBAIC0wLDAgKzEsNTM1IEBACisvKgor
IENvcHlyaWdodCAoQykgMjAxMiBOb2tpYSBDb3Jwb3JhdGlvbiBhbmQvb3IgaXRzIHN1YnNpZGlh
cnkoLWllcykKKworIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlz
dHJpYnV0ZSBpdCBhbmQvb3IKKyBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUg
TGlicmFyeSBHZW5lcmFsIFB1YmxpYworIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVl
IFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwg
b3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworIFRoaXMgbGlicmFyeSBp
cyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorIGJ1dCBX
SVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9m
CisgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAg
U2VlIHRoZSBHTlUKKyBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0
YWlscy4KKworIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJy
YXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2Vl
IHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworIHRoZSBGcmVlIFNvZnR3
YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisg
Qm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgor
I2luY2x1ZGUgIkdyYXBoaWNzU3VyZmFjZS5oIgorCisjaWYgVVNFKEdSQVBISUNTX1NVUkZBQ0Up
CisKKyNpbmNsdWRlICJOb3RJbXBsZW1lbnRlZC5oIgorI2luY2x1ZGUgIlRleHR1cmVNYXBwZXJH
TC5oIgorCisjaWYgUExBVEZPUk0oUVQpCisvLyBRdCBoZWFkZXJzIG11c3QgYmUgaW5jbHVkZWQg
YmVmb3JlIGdseCBoZWFkZXJzLgorI2luY2x1ZGUgPFFHdWlBcHBsaWNhdGlvbj4KKyNpbmNsdWRl
IDxRT3BlbkdMQ29udGV4dD4KKyNpbmNsdWRlIDxxcGEvcXBsYXRmb3JtbmF0aXZlaW50ZXJmYWNl
Lmg+CisjZWxpZiBQTEFURk9STShFRkwpCisjaW5jbHVkZSA8R0wvZ2wuaD4KKyNlbmRpZgorCisj
aW5jbHVkZSA8R0wvZ2xleHQuaD4KKyNpbmNsdWRlIDxHTC9nbHguaD4KKyNpbmNsdWRlIDxYMTEv
ZXh0ZW5zaW9ucy9YY29tcG9zaXRlLmg+CisjaW5jbHVkZSA8WDExL2V4dGVuc2lvbnMvWHJlbmRl
ci5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK3N0YXRpYyBsb25nIFgxMU92ZXJyaWRlUmVk
aXJlY3QgPSAxTCA8PCA5OworCitzdGF0aWMgUEZOR0xYQklORFRFWElNQUdFRVhUUFJPQyBwR2xY
QmluZFRleEltYWdlRVhUID0gMDsKK3N0YXRpYyBQRk5HTFhSRUxFQVNFVEVYSU1BR0VFWFRQUk9D
IHBHbFhSZWxlYXNlVGV4SW1hZ2VFWFQgPSAwOworc3RhdGljIFBGTkdMQklOREZSQU1FQlVGRkVS
UFJPQyBwR2xCaW5kRnJhbWVidWZmZXIgPSAwOworc3RhdGljIFBGTkdMQkxJVEZSQU1FQlVGRkVS
UFJPQyBwR2xCbGl0RnJhbWVidWZmZXIgPSAwOworc3RhdGljIFBGTkdMR0VORlJBTUVCVUZGRVJT
UFJPQyBwR2xHZW5GcmFtZWJ1ZmZlcnMgPSAwOworc3RhdGljIFBGTkdMREVMRVRFRlJBTUVCVUZG
RVJTUFJPQyBwR2xEZWxldGVGcmFtZWJ1ZmZlcnMgPSAwOworc3RhdGljIFBGTkdMRlJBTUVCVUZG
RVJURVhUVVJFMkRQUk9DIHBHbEZyYW1lYnVmZmVyVGV4dHVyZTJEID0gMDsKKworc3RhdGljIGlu
dCBhdHRyaWJ1dGVzW10gPSB7CisgICAgR0xYX0xFVkVMLCAwLAorICAgIEdMWF9EUkFXQUJMRV9U
WVBFLCBHTFhfV0lORE9XX0JJVCwKKyAgICBHTFhfUkVOREVSX1RZUEUsICAgR0xYX1JHQkFfQklU
LAorICAgIEdMWF9SRURfU0laRSwgICAgICAxLAorICAgIEdMWF9HUkVFTl9TSVpFLCAgICAxLAor
ICAgIEdMWF9CTFVFX1NJWkUsICAgICAxLAorICAgIEdMWF9BTFBIQV9TSVpFLCAgICAxLAorICAg
IEdMWF9ERVBUSF9TSVpFLCAgICAxLAorICAgIEdMWF9YX1ZJU1VBTF9UWVBFLCBHTFhfVFJVRV9D
T0xPUiwKKyAgICBHTFhfRE9VQkxFQlVGRkVSLCAgVHJ1ZSwKKyAgICBOb25lCit9OworCitjbGFz
cyBPZmZTY3JlZW5Sb290V2luZG93IHsKK3B1YmxpYzoKKyAgICBPZmZTY3JlZW5Sb290V2luZG93
KCkKKyAgICB7CisgICAgICAgICsrbV9yZWZDb3VudDsKKyAgICB9CisKKyAgICBXaW5kb3cgZ2V0
WFdpbmRvdygpCisgICAgeworICAgICAgICBpZiAoIW1fd2luZG93KSB7CisgICAgICAgICAgICBE
aXNwbGF5KiBkcHkgPSBkaXNwbGF5KCk7CisgICAgICAgICAgICBtX3dpbmRvdyA9IFhDcmVhdGVT
aW1wbGVXaW5kb3coZHB5LCBYRGVmYXVsdFJvb3RXaW5kb3coZHB5KSwgLTEsIC0xLCAxLCAxLCAw
LCBCbGFja1BpeGVsKGRweSwgMCksIFdoaXRlUGl4ZWwoZHB5LCAwKSk7CisgICAgICAgICAgICBY
U2V0V2luZG93QXR0cmlidXRlcyBhdHRyaWJ1dGVzOworICAgICAgICAgICAgYXR0cmlidXRlcy5v
dmVycmlkZV9yZWRpcmVjdCA9IHRydWU7CisgICAgICAgICAgICBYQ2hhbmdlV2luZG93QXR0cmli
dXRlcyhkcHksIG1fd2luZG93LCBYMTFPdmVycmlkZVJlZGlyZWN0LCAmYXR0cmlidXRlcyk7Cisg
ICAgICAgICAgICAvLyBNYXAgd2luZG93IHRvIHRoZSBzY3JlZW4KKyAgICAgICAgICAgIFhNYXBX
aW5kb3coZHB5LCBtX3dpbmRvdyk7CisgICAgICAgIH0KKworICAgICAgICByZXR1cm4gbV93aW5k
b3c7CisgICAgfQorCisgICAgRGlzcGxheSogZGlzcGxheSgpCisgICAgeworICAgICAgICBpZiAo
IW1fZGlzcGxheSkKKyAgICAgICAgICAgIG1fZGlzcGxheSA9IFhPcGVuRGlzcGxheSgwKTsKKyAg
ICAgICAgcmV0dXJuIG1fZGlzcGxheTsKKyAgICB9CisKKyAgICB+T2ZmU2NyZWVuUm9vdFdpbmRv
dygpCisgICAgeworICAgICAgICBpZiAoLS1tX3JlZkNvdW50IHx8ICFtX2Rpc3BsYXkpCisgICAg
ICAgICAgICByZXR1cm47CisKKyAgICAgICAgaWYgKG1fd2luZG93KSB7CisgICAgICAgICAgICBY
VW5tYXBXaW5kb3cobV9kaXNwbGF5LCBtX3dpbmRvdyk7CisgICAgICAgICAgICBYRGVzdHJveVdp
bmRvdyhtX2Rpc3BsYXksIG1fd2luZG93KTsKKyAgICAgICAgICAgIG1fd2luZG93ID0gMDsKKyAg
ICAgICAgfQorCisgICAgICAgIFhDbG9zZURpc3BsYXkobV9kaXNwbGF5KTsKKyAgICAgICAgbV9k
aXNwbGF5ID0gMDsKKyAgICB9CisKK3ByaXZhdGU6CisgICAgc3RhdGljIGludCBtX3JlZkNvdW50
OworICAgIHN0YXRpYyBXaW5kb3cgbV93aW5kb3c7CisgICAgc3RhdGljIERpc3BsYXkqIG1fZGlz
cGxheTsKK307CisKK2ludCBPZmZTY3JlZW5Sb290V2luZG93OjptX3JlZkNvdW50ID0gMDsKK1dp
bmRvdyBPZmZTY3JlZW5Sb290V2luZG93OjptX3dpbmRvdyA9IDA7CitEaXNwbGF5KiBPZmZTY3Jl
ZW5Sb290V2luZG93OjptX2Rpc3BsYXkgPSAwOworCitzdGF0aWMgY29uc3QgaW50IGdseFNwZWNb
XSA9IHsKKyAgICAvLyBUaGUgc3BlY2lmaWNhdGlvbiBpcyBhIHNldCBrZXkgdmFsdWUgcGFpcnMg
c3RvcmVkIGluIGEgc2ltcGxlIGFycmF5LgorICAgIEdMWF9MRVZFTCwgICAgICAgICAgICAgICAg
ICAgICAgICAgIDAsCisgICAgR0xYX0RSQVdBQkxFX1RZUEUsICAgICAgICAgICAgICAgICAgR0xY
X1BJWE1BUF9CSVQgfCBHTFhfV0lORE9XX0JJVCwKKyAgICBHTFhfQklORF9UT19URVhUVVJFX1RB
UkdFVFNfRVhULCAgICBHTFhfVEVYVFVSRV8yRF9CSVRfRVhULAorICAgIEdMWF9CSU5EX1RPX1RF
WFRVUkVfUkdCQV9FWFQsICAgICAgIFRSVUUsCisgICAgMAorfTsKKworc3RhdGljIGNvbnN0IGlu
dCBnbHhBdHRyaWJ1dGVzW10gPSB7CisgICAgR0xYX1RFWFRVUkVfRk9STUFUX0VYVCwKKyAgICBH
TFhfVEVYVFVSRV9GT1JNQVRfUkdCQV9FWFQsCisgICAgR0xYX1RFWFRVUkVfVEFSR0VUX0VYVCwK
KyAgICBHTFhfVEVYVFVSRV8yRF9FWFQsCisgICAgMAorfTsKKworc3RydWN0IEdyYXBoaWNzU3Vy
ZmFjZVByaXZhdGUgeworICAgIEdyYXBoaWNzU3VyZmFjZVByaXZhdGUoY29uc3QgUGxhdGZvcm1H
cmFwaGljc0NvbnRleHQzRCBzaGFyZUNvbnRleHQgPSAwKQorICAgICAgICA6IG1fZGlzcGxheSht
X29mZlNjcmVlbldpbmRvdy5kaXNwbGF5KCkpCisgICAgICAgICwgbV94UGl4bWFwKDApCisgICAg
ICAgICwgbV9nbHhQaXhtYXAoMCkKKyAgICAgICAgLCBtX3N1cmZhY2UoMCkKKyAgICAgICAgLCBt
X2dseFN1cmZhY2UoMCkKKyAgICAgICAgLCBtX2dsQ29udGV4dCgwKQorICAgICAgICAsIG1fZGV0
YWNoZWRDb250ZXh0KDApCisgICAgICAgICwgbV9kZXRhY2hlZFN1cmZhY2UoMCkKKyAgICAgICAg
LCBtX2ZiQ29uZmlnKDApCisgICAgICAgICwgbV90ZXh0dXJlSXNZSW52ZXJ0ZWQoZmFsc2UpCisg
ICAgICAgICwgbV9oYXNBbHBoYShmYWxzZSkKKyAgICAgICAgLCBtX2lzUmVjZWl2ZXIoZmFsc2Up
CisgICAgeworICAgICAgICBHTFhDb250ZXh0IHNoYXJlQ29udGV4dE9iamVjdCA9IDA7CisKKyNp
ZiBQTEFURk9STShRVCkKKyAgICAgICAgaWYgKHNoYXJlQ29udGV4dCkgeworI2lmIDAKKyAgICAg
ICAgICAgIC8vIFRoaXMgY29kZSBwYXRoIHJlcXVpcmVzIFFYY2JOYXRpdmVJbnRlcmZhY2U6Om5h
dGl2ZVJlc291cmNlRm9yQ29udGV4dCgpIHdoaWNoIGlzIG5vdCBhdmFpbGJsZSBpbiBRdDUgb24g
dGhlIGJ1aWxkIGJvdHMgeWV0LgorICAgICAgICAgICAgUVBsYXRmb3JtTmF0aXZlSW50ZXJmYWNl
KiBuYXRpdmVJbnRlcmZhY2UgPSBRR3VpQXBwbGljYXRpb246OnBsYXRmb3JtTmF0aXZlSW50ZXJm
YWNlKCk7CisgICAgICAgICAgICBzaGFyZUNvbnRleHRPYmplY3QgPSBzdGF0aWNfY2FzdDxHTFhD
b250ZXh0PihuYXRpdmVJbnRlcmZhY2UtPm5hdGl2ZVJlc291cmNlRm9yQ29udGV4dChRQnl0ZUFy
cmF5TGl0ZXJhbCgiZ2x4Y29udGV4dCIpLCBzaGFyZUNvbnRleHQpKTsKKyAgICAgICAgICAgIGlm
ICghc2hhcmVDb250ZXh0T2JqZWN0KQorICAgICAgICAgICAgICAgIHJldHVybjsKKyNlbHNlCisg
ICAgICAgICAgICAvLyBUaGlzIGNvZGUgcGF0aCBzaG91bGQgYmUgcmVtb3ZlZCBhcyBzb29uIGFz
IFFYY2JOYXRpdmVJbnRlcmZhY2U6Om5hdGl2ZVJlc291cmNlRm9yQ29udGV4dCgpIGNhbiBwcm92
aWRlIHRoZSBHTFhDb250ZXh0LgorICAgICAgICAgICAgUU9wZW5HTENvbnRleHQqIHByZXZpb3Vz
Q29udGV4dCA9IFFPcGVuR0xDb250ZXh0OjpjdXJyZW50Q29udGV4dCgpOworICAgICAgICAgICAg
UVN1cmZhY2UqIHByZXZpb3VzU3VyZmFjZSA9IHByZXZpb3VzQ29udGV4dC0+c3VyZmFjZSgpOwor
ICAgICAgICAgICAgUVN1cmZhY2UqIGN1cnJlbnRTdXJmYWNlID0gc2hhcmVDb250ZXh0LT5zdXJm
YWNlKCk7CisgICAgICAgICAgICBzaGFyZUNvbnRleHQtPm1ha2VDdXJyZW50KGN1cnJlbnRTdXJm
YWNlKTsKKworICAgICAgICAgICAgc2hhcmVDb250ZXh0T2JqZWN0ID0gZ2xYR2V0Q3VycmVudENv
bnRleHQoKTsKKworICAgICAgICAgICAgcHJldmlvdXNDb250ZXh0LT5tYWtlQ3VycmVudChwcmV2
aW91c1N1cmZhY2UpOworI2VuZGlmCisgICAgICAgIH0KKyNlbHNlCisgICAgICAgIFVOVVNFRF9Q
QVJBTShzaGFyZUNvbnRleHQpOworI2VuZGlmCisKKyAgICAgICAgaW50IG51bVJldHVybmVkOwor
ICAgICAgICBHTFhGQkNvbmZpZyogZmJDb25maWdzID0gZ2xYQ2hvb3NlRkJDb25maWcobV9kaXNw
bGF5LCBEZWZhdWx0U2NyZWVuKG1fZGlzcGxheSksIGF0dHJpYnV0ZXMsICZudW1SZXR1cm5lZCk7
CisKKyAgICAgICAgLy8gTWFrZSBzdXJlIHRoYXQgd2UgY2hvb3NlIGEgY29uZmlndXJhdGlvbiB0
aGF0IHN1cHBvcnRzIGFuIGFscGhhIG1hc2suCisgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwg
bnVtUmV0dXJuZWQ7ICsraSkgeworICAgICAgICAgICAgWFZpc3VhbEluZm8qIHZpc3VhbEluZm8g
PSBnbFhHZXRWaXN1YWxGcm9tRkJDb25maWcobV9kaXNwbGF5LCBmYkNvbmZpZ3NbaV0pOworICAg
ICAgICAgICAgaWYgKCF2aXN1YWxJbmZvKQorICAgICAgICAgICAgICAgIGNvbnRpbnVlOworCisg
ICAgICAgICAgICBYUmVuZGVyUGljdEZvcm1hdCogZm9ybWF0ID0gWFJlbmRlckZpbmRWaXN1YWxG
b3JtYXQobV9kaXNwbGF5LCB2aXN1YWxJbmZvLT52aXN1YWwpOworICAgICAgICAgICAgaWYgKGZv
cm1hdCAmJiBmb3JtYXQtPmRpcmVjdC5hbHBoYU1hc2sgPiAwKSB7CisgICAgICAgICAgICAgICAg
bV9mYkNvbmZpZyA9IGZiQ29uZmlnc1tpXTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIFhGcmVlKGZiQ29uZmlncyk7CisKKyAgICAg
ICAgLy8gQ3JlYXRlIGEgR0xYIGNvbnRleHQgZm9yIE9wZW5HTCByZW5kZXJpbmcKKyAgICAgICAg
bV9nbENvbnRleHQgPSBnbFhDcmVhdGVOZXdDb250ZXh0KG1fZGlzcGxheSwgbV9mYkNvbmZpZywg
R0xYX1JHQkFfVFlQRSwgc2hhcmVDb250ZXh0T2JqZWN0LCB0cnVlKTsKKyAgICB9CisKKyAgICBH
cmFwaGljc1N1cmZhY2VQcml2YXRlKHVpbnQzMl90IHdpbklkKQorICAgICAgICA6IG1fZGlzcGxh
eShtX29mZlNjcmVlbldpbmRvdy5kaXNwbGF5KCkpCisgICAgICAgICwgbV94UGl4bWFwKDApCisg
ICAgICAgICwgbV9nbHhQaXhtYXAoMCkKKyAgICAgICAgLCBtX3N1cmZhY2Uod2luSWQpCisgICAg
ICAgICwgbV9nbHhTdXJmYWNlKDApCisgICAgICAgICwgbV9nbENvbnRleHQoMCkKKyAgICAgICAg
LCBtX2RldGFjaGVkQ29udGV4dCgwKQorICAgICAgICAsIG1fZGV0YWNoZWRTdXJmYWNlKDApCisg
ICAgICAgICwgbV9mYkNvbmZpZygwKQorICAgICAgICAsIG1fdGV4dHVyZUlzWUludmVydGVkKGZh
bHNlKQorICAgICAgICAsIG1faGFzQWxwaGEoZmFsc2UpCisgICAgICAgICwgbV9pc1JlY2VpdmVy
KHRydWUpCisgICAgeyB9CisKKyAgICB+R3JhcGhpY3NTdXJmYWNlUHJpdmF0ZSgpCisgICAgewor
ICAgICAgICBpZiAobV9nbHhQaXhtYXApCisgICAgICAgICAgICBnbFhEZXN0cm95UGl4bWFwKG1f
ZGlzcGxheSwgbV9nbHhQaXhtYXApOworICAgICAgICBtX2dseFBpeG1hcCA9IDA7CisKKyAgICAg
ICAgaWYgKG1feFBpeG1hcCkKKyAgICAgICAgICAgIFhGcmVlUGl4bWFwKG1fZGlzcGxheSwgbV94
UGl4bWFwKTsKKyAgICAgICAgbV94UGl4bWFwID0gMDsKKworICAgICAgICBpZiAobV9nbENvbnRl
eHQpCisgICAgICAgICAgICBnbFhEZXN0cm95Q29udGV4dChtX2Rpc3BsYXksIG1fZ2xDb250ZXh0
KTsKKyAgICB9CisKKyAgICB1aW50MzJfdCBjcmVhdGVTdXJmYWNlKGNvbnN0IEludFNpemUmIHNp
emUpCisgICAgeworICAgICAgICBYVmlzdWFsSW5mbyogdmlzdWFsSW5mbyA9IGdsWEdldFZpc3Vh
bEZyb21GQkNvbmZpZyhtX2Rpc3BsYXksIG1fZmJDb25maWcpOworICAgICAgICBpZiAoIXZpc3Vh
bEluZm8pCisgICAgICAgICAgICByZXR1cm4gMDsKKworICAgICAgICBDb2xvcm1hcCBjbWFwID0g
WENyZWF0ZUNvbG9ybWFwKG1fZGlzcGxheSwgbV9vZmZTY3JlZW5XaW5kb3cuZ2V0WFdpbmRvdygp
LCB2aXN1YWxJbmZvLT52aXN1YWwsIEFsbG9jTm9uZSk7CisKKyAgICAgICAgWFNldFdpbmRvd0F0
dHJpYnV0ZXMgYTsKKyAgICAgICAgYS5iYWNrZ3JvdW5kX3BpeGVsID0gV2hpdGVQaXhlbChtX2Rp
c3BsYXksIDApOworICAgICAgICBhLmJvcmRlcl9waXhlbCA9IEJsYWNrUGl4ZWwobV9kaXNwbGF5
LCAwKTsKKyAgICAgICAgYS5jb2xvcm1hcCA9IGNtYXA7CisgICAgICAgIG1fc3VyZmFjZSA9IFhD
cmVhdGVXaW5kb3cobV9kaXNwbGF5LCBtX29mZlNjcmVlbldpbmRvdy5nZXRYV2luZG93KCksIDAs
IDAsIHNpemUud2lkdGgoKSwgc2l6ZS5oZWlnaHQoKSwKKyAgICAgICAgICAgIDAsIHZpc3VhbElu
Zm8tPmRlcHRoLCBJbnB1dE91dHB1dCwgdmlzdWFsSW5mby0+dmlzdWFsLAorICAgICAgICAgICAg
Q1dCYWNrUGl4ZWwgfCBDV0JvcmRlclBpeGVsIHwgQ1dDb2xvcm1hcCwgJmEpOworICAgICAgICBY
U2V0V2luZG93QmFja2dyb3VuZFBpeG1hcChtX2Rpc3BsYXksIG1fc3VyZmFjZSwgMCk7CisgICAg
ICAgIFhDb21wb3NpdGVSZWRpcmVjdFdpbmRvdyhtX2Rpc3BsYXksIG1fc3VyZmFjZSwgQ29tcG9z
aXRlUmVkaXJlY3RNYW51YWwpOworICAgICAgICBtX2dseFN1cmZhY2UgPSBnbFhDcmVhdGVXaW5k
b3cobV9kaXNwbGF5LCBtX2ZiQ29uZmlnLCBtX3N1cmZhY2UsIDApOworICAgICAgICBYRnJlZSh2
aXN1YWxJbmZvKTsKKworICAgICAgICAvLyBNYWtlIHN1cmUgdGhlIFhSZW5kZXIgRXh0ZW5zaW9u
IGlzIGF2YWlsYWJsZS4KKyAgICAgICAgaW50IGV2ZW50QmFzZXAsIGVycm9yQmFzZXA7CisgICAg
ICAgIGlmICghWFJlbmRlclF1ZXJ5RXh0ZW5zaW9uKG1fZGlzcGxheSwgJmV2ZW50QmFzZXAsICZl
cnJvckJhc2VwKSkKKyAgICAgICAgICAgIHJldHVybiAwOworCisgICAgICAgIFhNYXBXaW5kb3co
bV9kaXNwbGF5LCBtX3N1cmZhY2UpOworICAgICAgICByZXR1cm4gbV9zdXJmYWNlOworICAgIH0K
KworICAgIHZvaWQgY3JlYXRlUGl4bWFwKHVpbnQzMl90IHdpbklkKQorICAgIHsKKyAgICAgICAg
WFdpbmRvd0F0dHJpYnV0ZXMgYXR0cjsKKyAgICAgICAgWEdldFdpbmRvd0F0dHJpYnV0ZXMobV9k
aXNwbGF5LCB3aW5JZCwgJmF0dHIpOworCisgICAgICAgIFhSZW5kZXJQaWN0Rm9ybWF0KiBmb3Jt
YXQgPSBYUmVuZGVyRmluZFZpc3VhbEZvcm1hdChtX2Rpc3BsYXksIGF0dHIudmlzdWFsKTsKKyAg
ICAgICAgbV9oYXNBbHBoYSA9IChmb3JtYXQtPnR5cGUgPT0gUGljdFR5cGVEaXJlY3QgJiYgZm9y
bWF0LT5kaXJlY3QuYWxwaGFNYXNrKTsKKworICAgICAgICBpbnQgbnVtYmVyT2ZDb25maWdzOwor
ICAgICAgICBHTFhGQkNvbmZpZyogY29uZmlncyA9IGdsWENob29zZUZCQ29uZmlnKG1fZGlzcGxh
eSwgWERlZmF1bHRTY3JlZW4obV9kaXNwbGF5KSwgZ2x4U3BlYywgJm51bWJlck9mQ29uZmlncyk7
CisKKyAgICAgICAgbV94UGl4bWFwID0gWENvbXBvc2l0ZU5hbWVXaW5kb3dQaXhtYXAobV9kaXNw
bGF5LCB3aW5JZCk7CisgICAgICAgIG1fZ2x4UGl4bWFwID0gZ2xYQ3JlYXRlUGl4bWFwKG1fZGlz
cGxheSwgKmNvbmZpZ3MsIG1feFBpeG1hcCwgZ2x4QXR0cmlidXRlcyk7CisKKyAgICAgICAgdWlu
dCBpbnZlcnRlZCA9IDA7CisgICAgICAgIGdsWFF1ZXJ5RHJhd2FibGUobV9kaXNwbGF5LCBtX2ds
eFBpeG1hcCwgR0xYX1lfSU5WRVJURURfRVhULCAmaW52ZXJ0ZWQpOworICAgICAgICBtX3RleHR1
cmVJc1lJbnZlcnRlZCA9ICEhaW52ZXJ0ZWQ7CisKKyAgICAgICAgWEZyZWUoY29uZmlncyk7Cisg
ICAgfQorCisgICAgYm9vbCB0ZXh0dXJlSXNZSW52ZXJ0ZWQoKQorICAgIHsKKyAgICAgICAgcmV0
dXJuIG1fdGV4dHVyZUlzWUludmVydGVkOworICAgIH0KKworICAgIHZvaWQgbWFrZUN1cnJlbnQo
KQorICAgIHsKKyAgICAgICAgbV9kZXRhY2hlZENvbnRleHQgPSBnbFhHZXRDdXJyZW50Q29udGV4
dCgpOworICAgICAgICBtX2RldGFjaGVkU3VyZmFjZSA9IGdsWEdldEN1cnJlbnREcmF3YWJsZSgp
OworICAgICAgICBpZiAobV9zdXJmYWNlICYmIG1fZ2xDb250ZXh0KQorICAgICAgICAgICAgZ2xY
TWFrZUN1cnJlbnQobV9kaXNwbGF5LCBtX3N1cmZhY2UsIG1fZ2xDb250ZXh0KTsKKyAgICB9CisK
KyAgICB2b2lkIGRvbmVDdXJyZW50KCkKKyAgICB7CisgICAgICAgIGlmIChtX2RldGFjaGVkQ29u
dGV4dCkKKyAgICAgICAgICAgIGdsWE1ha2VDdXJyZW50KG1fZGlzcGxheSwgbV9kZXRhY2hlZFN1
cmZhY2UsIG1fZGV0YWNoZWRDb250ZXh0KTsKKyAgICAgICAgbV9kZXRhY2hlZENvbnRleHQgPSAw
OworICAgIH0KKworICAgIHZvaWQgc3dhcEJ1ZmZlcnMoKQorICAgIHsKKyAgICAgICAgLy8gVGhl
IGJ1ZmZlcnMgYXJlIGJlaW5nIHN3aXRjaGVkIG9uIHRoZSB3cml0aW5nIHNpZGUsIHRoZSByZWFk
aW5nIHNpZGUganVzdCByZWFkcworICAgICAgICAvLyB3aGF0ZXZlciB0ZXh0dXJlIHRoZSBYV2lu
ZG93IGNvbnRhaW5zLgorICAgICAgICBpZiAobV9pc1JlY2VpdmVyKQorICAgICAgICAgICAgcmV0
dXJuOworCisgICAgICAgIEdMWENvbnRleHQgZ2xDb250ZXh0ID0gZ2xYR2V0Q3VycmVudENvbnRl
eHQoKTsKKworICAgICAgICBpZiAobV9zdXJmYWNlICYmIGdsQ29udGV4dCkgeworICAgICAgICAg
ICAgR0xpbnQgb2xkRkJPOworICAgICAgICAgICAgZ2xHZXRJbnRlZ2VydihHTF9GUkFNRUJVRkZF
Ul9CSU5ESU5HLCAmb2xkRkJPKTsKKyAgICAgICAgICAgIHBHbEJpbmRGcmFtZWJ1ZmZlcihHTF9G
UkFNRUJVRkZFUiwgMCk7CisgICAgICAgICAgICBnbFhTd2FwQnVmZmVycyhtX2Rpc3BsYXksIG1f
c3VyZmFjZSk7CisgICAgICAgICAgICBwR2xCaW5kRnJhbWVidWZmZXIoR0xfRlJBTUVCVUZGRVIs
IG9sZEZCTyk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICB2b2lkIGNvcHlGcm9tVGV4dHVyZSh1
aW50MzJfdCB0ZXh0dXJlLCBjb25zdCBJbnRSZWN0JiBzb3VyY2VSZWN0KQorICAgIHsKKyAgICAg
ICAgbWFrZUN1cnJlbnQoKTsKKyAgICAgICAgaW50IHggPSBzb3VyY2VSZWN0LngoKTsKKyAgICAg
ICAgaW50IHkgPSBzb3VyY2VSZWN0LnkoKTsKKyAgICAgICAgaW50IHdpZHRoID0gc291cmNlUmVj
dC53aWR0aCgpOworICAgICAgICBpbnQgaGVpZ2h0ID0gc291cmNlUmVjdC5oZWlnaHQoKTsKKwor
ICAgICAgICBnbFB1c2hBdHRyaWIoR0xfQUxMX0FUVFJJQl9CSVRTKTsKKyAgICAgICAgR0xpbnQg
cHJldmlvdXNGQk87CisgICAgICAgIGdsR2V0SW50ZWdlcnYoR0xfRlJBTUVCVUZGRVJfQklORElO
RywgJnByZXZpb3VzRkJPKTsKKworICAgICAgICBHTHVpbnQgb3JpZ2luRkJPOworICAgICAgICBw
R2xHZW5GcmFtZWJ1ZmZlcnMoMSwgJm9yaWdpbkZCTyk7CisgICAgICAgIHBHbEJpbmRGcmFtZWJ1
ZmZlcihHTF9SRUFEX0ZSQU1FQlVGRkVSLCBvcmlnaW5GQk8pOworICAgICAgICBnbEJpbmRUZXh0
dXJlKEdMX1RFWFRVUkVfMkQsIHRleHR1cmUpOworICAgICAgICBwR2xGcmFtZWJ1ZmZlclRleHR1
cmUyRChHTF9SRUFEX0ZSQU1FQlVGRkVSLCBHTF9DT0xPUl9BVFRBQ0hNRU5UMCwgR0xfVEVYVFVS
RV8yRCwgdGV4dHVyZSwgMCk7CisKKyAgICAgICAgcEdsQmluZEZyYW1lYnVmZmVyKEdMX0RSQVdf
RlJBTUVCVUZGRVIsIDApOworICAgICAgICBwR2xCbGl0RnJhbWVidWZmZXIoeCwgeSwgd2lkdGgs
IGhlaWdodCwgeCwgeSwgd2lkdGgsIGhlaWdodCwgR0xfQ09MT1JfQlVGRkVSX0JJVCwgR0xfTElO
RUFSKTsKKworICAgICAgICBwR2xGcmFtZWJ1ZmZlclRleHR1cmUyRChHTF9SRUFEX0ZSQU1FQlVG
RkVSLCBHTF9DT0xPUl9BVFRBQ0hNRU5UMCwgR0xfVEVYVFVSRV8yRCwgMCwgMCk7CisgICAgICAg
IGdsQmluZFRleHR1cmUoR0xfVEVYVFVSRV8yRCwgMCk7CisgICAgICAgIHBHbEJpbmRGcmFtZWJ1
ZmZlcihHTF9GUkFNRUJVRkZFUiwgcHJldmlvdXNGQk8pOworICAgICAgICBwR2xEZWxldGVGcmFt
ZWJ1ZmZlcnMoMSwgJm9yaWdpbkZCTyk7CisKKyAgICAgICAgZ2xQb3BBdHRyaWIoKTsKKworICAg
ICAgICBzd2FwQnVmZmVycygpOworICAgICAgICBkb25lQ3VycmVudCgpOworICAgIH0KKworICAg
IERpc3BsYXkqIGRpc3BsYXkoKSBjb25zdCB7IHJldHVybiBtX2Rpc3BsYXk7IH0KKworICAgIEdM
WFBpeG1hcCBnbHhQaXhtYXAoKSBjb25zdAorICAgIHsKKyAgICAgICAgaWYgKCFtX2dseFBpeG1h
cCAmJiBtX3N1cmZhY2UpCisgICAgICAgICAgICBjb25zdF9jYXN0PEdyYXBoaWNzU3VyZmFjZVBy
aXZhdGUqPih0aGlzKS0+Y3JlYXRlUGl4bWFwKG1fc3VyZmFjZSk7CisgICAgICAgIHJldHVybiBt
X2dseFBpeG1hcDsKKyAgICB9CisKKyAgICBJbnRTaXplIHNpemUoKSBjb25zdAorICAgIHsKKyAg
ICAgICAgaWYgKG1fc2l6ZS5pc0VtcHR5KCkpIHsKKyAgICAgICAgICAgIFhXaW5kb3dBdHRyaWJ1
dGVzIGF0dHI7CisgICAgICAgICAgICBYR2V0V2luZG93QXR0cmlidXRlcyhtX2Rpc3BsYXksIG1f
c3VyZmFjZSwgJmF0dHIpOworICAgICAgICAgICAgY29uc3RfY2FzdDxHcmFwaGljc1N1cmZhY2VQ
cml2YXRlKj4odGhpcyktPm1fc2l6ZSA9IEludFNpemUoYXR0ci53aWR0aCwgYXR0ci5oZWlnaHQp
OworICAgICAgICB9CisgICAgICAgIHJldHVybiBtX3NpemU7CisgICAgfQorCitwcml2YXRlOgor
ICAgIE9mZlNjcmVlblJvb3RXaW5kb3cgbV9vZmZTY3JlZW5XaW5kb3c7CisgICAgSW50U2l6ZSBt
X3NpemU7CisgICAgRGlzcGxheSogbV9kaXNwbGF5OworICAgIFBpeG1hcCBtX3hQaXhtYXA7Cisg
ICAgR0xYUGl4bWFwIG1fZ2x4UGl4bWFwOworICAgIFdpbmRvdyBtX3N1cmZhY2U7CisgICAgV2lu
ZG93IG1fZ2x4U3VyZmFjZTsKKyAgICBHTFhDb250ZXh0IG1fZ2xDb250ZXh0OworICAgIEdMWENv
bnRleHQgbV9kZXRhY2hlZENvbnRleHQ7CisgICAgR0xYRHJhd2FibGUgbV9kZXRhY2hlZFN1cmZh
Y2U7CisgICAgR0xYRkJDb25maWcgbV9mYkNvbmZpZzsKKyAgICBib29sIG1fdGV4dHVyZUlzWUlu
dmVydGVkOworICAgIGJvb2wgbV9oYXNBbHBoYTsKKyAgICBib29sIG1faXNSZWNlaXZlcjsKK307
CisKK3N0YXRpYyBib29sIHJlc29sdmVHTE1ldGhvZHMoKQoreworICAgIHN0YXRpYyBib29sIHJl
c29sdmVkID0gZmFsc2U7CisgICAgaWYgKHJlc29sdmVkKQorICAgICAgICByZXR1cm4gdHJ1ZTsK
KyAgICBwR2xYQmluZFRleEltYWdlRVhUID0gcmVpbnRlcnByZXRfY2FzdDxQRk5HTFhCSU5EVEVY
SU1BR0VFWFRQUk9DPihnbFhHZXRQcm9jQWRkcmVzcyhyZWludGVycHJldF9jYXN0PGNvbnN0IEdM
dWJ5dGUqPigiZ2xYQmluZFRleEltYWdlRVhUIikpKTsKKyAgICBwR2xYUmVsZWFzZVRleEltYWdl
RVhUID0gcmVpbnRlcnByZXRfY2FzdDxQRk5HTFhSRUxFQVNFVEVYSU1BR0VFWFRQUk9DPihnbFhH
ZXRQcm9jQWRkcmVzcyhyZWludGVycHJldF9jYXN0PGNvbnN0IEdMdWJ5dGUqPigiZ2xYUmVsZWFz
ZVRleEltYWdlRVhUIikpKTsKKyAgICBwR2xCaW5kRnJhbWVidWZmZXIgPSByZWludGVycHJldF9j
YXN0PFBGTkdMQklOREZSQU1FQlVGRkVSUFJPQz4oZ2xYR2V0UHJvY0FkZHJlc3MocmVpbnRlcnBy
ZXRfY2FzdDxjb25zdCBHTHVieXRlKj4oImdsQmluZEZyYW1lYnVmZmVyIikpKTsKKyAgICBwR2xC
bGl0RnJhbWVidWZmZXIgPSByZWludGVycHJldF9jYXN0PFBGTkdMQkxJVEZSQU1FQlVGRkVSUFJP
Qz4oZ2xYR2V0UHJvY0FkZHJlc3MocmVpbnRlcnByZXRfY2FzdDxjb25zdCBHTHVieXRlKj4oImds
QmxpdEZyYW1lYnVmZmVyIikpKTsKKworICAgIHBHbEdlbkZyYW1lYnVmZmVycyA9IHJlaW50ZXJw
cmV0X2Nhc3Q8UEZOR0xHRU5GUkFNRUJVRkZFUlNQUk9DPihnbFhHZXRQcm9jQWRkcmVzcyhyZWlu
dGVycHJldF9jYXN0PGNvbnN0IEdMdWJ5dGUqPigiZ2xHZW5GcmFtZWJ1ZmZlcnMiKSkpOworICAg
IHBHbERlbGV0ZUZyYW1lYnVmZmVycyA9IHJlaW50ZXJwcmV0X2Nhc3Q8UEZOR0xERUxFVEVGUkFN
RUJVRkZFUlNQUk9DPihnbFhHZXRQcm9jQWRkcmVzcyhyZWludGVycHJldF9jYXN0PGNvbnN0IEdM
dWJ5dGUqPigiZ2xEZWxldGVGcmFtZWJ1ZmZlcnMiKSkpOworICAgIHBHbEZyYW1lYnVmZmVyVGV4
dHVyZTJEID0gcmVpbnRlcnByZXRfY2FzdDxQRk5HTEZSQU1FQlVGRkVSVEVYVFVSRTJEUFJPQz4o
Z2xYR2V0UHJvY0FkZHJlc3MocmVpbnRlcnByZXRfY2FzdDxjb25zdCBHTHVieXRlKj4oImdsRnJh
bWVidWZmZXJUZXh0dXJlMkQiKSkpOworICAgIHJlc29sdmVkID0gcEdsQmxpdEZyYW1lYnVmZmVy
ICYmIHBHbEJpbmRGcmFtZWJ1ZmZlciAmJiBwR2xYQmluZFRleEltYWdlRVhUICYmIHBHbFhSZWxl
YXNlVGV4SW1hZ2VFWFQ7CisKKyAgICByZXR1cm4gcmVzb2x2ZWQ7Cit9CisKK0dyYXBoaWNzU3Vy
ZmFjZVRva2VuIEdyYXBoaWNzU3VyZmFjZTo6cGxhdGZvcm1FeHBvcnQoKQoreworICAgIHJldHVy
biBHcmFwaGljc1N1cmZhY2VUb2tlbihtX3BsYXRmb3JtU3VyZmFjZSk7Cit9CisKK3VpbnQzMl90
IEdyYXBoaWNzU3VyZmFjZTo6cGxhdGZvcm1HZXRUZXh0dXJlSUQoKQoreworICAgIGlmICghbV90
ZXh0dXJlKSB7CisgICAgICAgIGdsR2VuVGV4dHVyZXMoMSwgJm1fdGV4dHVyZSk7CisgICAgICAg
IGdsQmluZFRleHR1cmUoR0xfVEVYVFVSRV8yRCwgbV90ZXh0dXJlKTsKKyAgICAgICAgZ2xUZXhQ
YXJhbWV0ZXJmKEdMX1RFWFRVUkVfMkQsIEdMX1RFWFRVUkVfTUlOX0ZJTFRFUiwgR0xfTElORUFS
KTsKKyAgICAgICAgZ2xUZXhQYXJhbWV0ZXJmKEdMX1RFWFRVUkVfMkQsIEdMX1RFWFRVUkVfTUFH
X0ZJTFRFUiwgR0xfTElORUFSKTsKKyAgICAgICAgZ2xUZXhQYXJhbWV0ZXJpKEdMX1RFWFRVUkVf
MkQsIEdMX1RFWFRVUkVfV1JBUF9TLCBHTF9DTEFNUF9UT19FREdFKTsKKyAgICAgICAgZ2xUZXhQ
YXJhbWV0ZXJpKEdMX1RFWFRVUkVfMkQsIEdMX1RFWFRVUkVfV1JBUF9ULCBHTF9DTEFNUF9UT19F
REdFKTsKKyAgICAgICAgcEdsWEJpbmRUZXhJbWFnZUVYVChtX3ByaXZhdGUtPmRpc3BsYXkoKSwg
bV9wcml2YXRlLT5nbHhQaXhtYXAoKSwgR0xYX0ZST05UX0VYVCwgMCk7CisgICAgfQorCisgICAg
cmV0dXJuIG1fdGV4dHVyZTsKK30KKwordm9pZCBHcmFwaGljc1N1cmZhY2U6OnBsYXRmb3JtQ29w
eVRvR0xUZXh0dXJlKHVpbnQzMl90IC8qdGFyZ2V0Ki8sIHVpbnQzMl90IC8qaWQqLywgY29uc3Qg
SW50UmVjdCYgLyp0YXJnZXRSZWN0Ki8sIGNvbnN0IEludFBvaW50JiAvKm9mZnNldCovKQorewor
ICAgIC8vIFRoaXMgaXMgbm90IHN1cHBvcnRlZCBieSBHTFgvWGNvbXBvc2l0ZS4KK30KKwordm9p
ZCBHcmFwaGljc1N1cmZhY2U6OnBsYXRmb3JtQ29weUZyb21UZXh0dXJlKHVpbnQzMl90IHRleHR1
cmUsIGNvbnN0IEludFJlY3QmIHNvdXJjZVJlY3QpCit7CisgICAgbV9wcml2YXRlLT5jb3B5RnJv
bVRleHR1cmUodGV4dHVyZSwgc291cmNlUmVjdCk7Cit9CisKKwordm9pZCBHcmFwaGljc1N1cmZh
Y2U6OnBsYXRmb3JtUGFpbnRUb1RleHR1cmVNYXBwZXIoVGV4dHVyZU1hcHBlciogdGV4dHVyZU1h
cHBlciwgY29uc3QgRmxvYXRSZWN0JiB0YXJnZXRSZWN0LCBjb25zdCBUcmFuc2Zvcm1hdGlvbk1h
dHJpeCYgdHJhbnNmb3JtLCBmbG9hdCBvcGFjaXR5LCBCaXRtYXBUZXh0dXJlKiBtYXNrKQorewor
ICAgIFRleHR1cmVNYXBwZXJHTCogdGV4TWFwR0wgPSBzdGF0aWNfY2FzdDxUZXh0dXJlTWFwcGVy
R0wqPih0ZXh0dXJlTWFwcGVyKTsKKyAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCBhZGp1c3RlZFRy
YW5zZm9ybSA9IHRyYW5zZm9ybTsKKyAgICBhZGp1c3RlZFRyYW5zZm9ybS5tdWx0aXBseShUcmFu
c2Zvcm1hdGlvbk1hdHJpeDo6cmVjdFRvUmVjdChGbG9hdFJlY3QoRmxvYXRQb2ludDo6emVybygp
LCBtX3ByaXZhdGUtPnNpemUoKSksIHRhcmdldFJlY3QpKTsKKyAgICBUZXh0dXJlTWFwcGVyR0w6
OkZsYWdzIGZsYWdzID0gbV9wcml2YXRlLT50ZXh0dXJlSXNZSW52ZXJ0ZWQoKSA/IFRleHR1cmVN
YXBwZXJHTDo6U2hvdWxkRmxpcFRleHR1cmUgOiAwOworICAgIGZsYWdzIHw9IFRleHR1cmVNYXBw
ZXJHTDo6U3VwcG9ydHNCbGVuZGluZzsKKyAgICB0ZXhNYXBHTC0+ZHJhd1RleHR1cmUocGxhdGZv
cm1HZXRUZXh0dXJlSUQoKSwgZmxhZ3MsIG1fcHJpdmF0ZS0+c2l6ZSgpLCB0YXJnZXRSZWN0LCBh
ZGp1c3RlZFRyYW5zZm9ybSwgb3BhY2l0eSwgbWFzayk7Cit9CisKK3VpbnQzMl90IEdyYXBoaWNz
U3VyZmFjZTo6cGxhdGZvcm1Gcm9udEJ1ZmZlcigpIGNvbnN0Cit7CisgICAgcmV0dXJuIDA7Cit9
CisKK3VpbnQzMl90IEdyYXBoaWNzU3VyZmFjZTo6cGxhdGZvcm1Td2FwQnVmZmVycygpCit7Cisg
ICAgbV9wcml2YXRlLT5zd2FwQnVmZmVycygpOworICAgIHJldHVybiAwOworfQorCitJbnRTaXpl
IEdyYXBoaWNzU3VyZmFjZTo6cGxhdGZvcm1TaXplKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9w
cml2YXRlLT5zaXplKCk7Cit9CisKK1Bhc3NSZWZQdHI8R3JhcGhpY3NTdXJmYWNlPiBHcmFwaGlj
c1N1cmZhY2U6OnBsYXRmb3JtQ3JlYXRlKGNvbnN0IEludFNpemUmIHNpemUsIEZsYWdzIGZsYWdz
LCBjb25zdCBQbGF0Zm9ybUdyYXBoaWNzQ29udGV4dDNEIHNoYXJlQ29udGV4dCkKK3sKKyAgICAv
LyBYMTEgZG9lcyBub3Qgc3VwcG9ydCBDb3B5VG9UZXh0dXJlLCBzbyB3ZSBkbyBub3QgY3JlYXRl
IGEgR3JhcGhpY3NTdXJmYWNlIGlmIHRoaXMgaXMgcmVxdWVzdGVkLgorICAgIC8vIEdyYXBoaWNz
U3VyZmFjZUdMWCB1c2VzIGFuIFhXaW5kb3cgYXMgbmF0aXZlIHN1cmZhY2UuIFRoaXMgb25lIGFs
d2F5cyBoYXMgYSBmcm9udCBhbmQgYSBiYWNrIGJ1ZmZlci4KKyAgICAvLyBUaGVyZWZvcmUgc2lu
Z2xlIGJ1ZmZlcmVkIEdyYXBoaWNzU3VyZmFjZXMgYXJlIG5vdCBzdXBwb3J0ZWQuCisgICAgaWYg
KGZsYWdzICYgU3VwcG9ydHNDb3B5VG9UZXh0dXJlIHx8IGZsYWdzICYgU3VwcG9ydHNTaW5nbGVC
dWZmZXJlZCkKKyAgICAgICAgcmV0dXJuIFBhc3NSZWZQdHI8R3JhcGhpY3NTdXJmYWNlPigpOwor
CisgICAgUmVmUHRyPEdyYXBoaWNzU3VyZmFjZT4gc3VyZmFjZSA9IGFkb3B0UmVmKG5ldyBHcmFw
aGljc1N1cmZhY2Uoc2l6ZSwgZmxhZ3MpKTsKKworICAgIHN1cmZhY2UtPm1fcHJpdmF0ZSA9IG5l
dyBHcmFwaGljc1N1cmZhY2VQcml2YXRlKHNoYXJlQ29udGV4dCk7CisgICAgaWYgKCFyZXNvbHZl
R0xNZXRob2RzKCkpCisgICAgICAgIHJldHVybiBQYXNzUmVmUHRyPEdyYXBoaWNzU3VyZmFjZT4o
KTsKKworICAgIHN1cmZhY2UtPm1fcGxhdGZvcm1TdXJmYWNlID0gc3VyZmFjZS0+bV9wcml2YXRl
LT5jcmVhdGVTdXJmYWNlKHNpemUpOworCisgICAgcmV0dXJuIHN1cmZhY2U7Cit9CisKK1Bhc3NS
ZWZQdHI8R3JhcGhpY3NTdXJmYWNlPiBHcmFwaGljc1N1cmZhY2U6OnBsYXRmb3JtSW1wb3J0KGNv
bnN0IEludFNpemUmIHNpemUsIEZsYWdzIGZsYWdzLCBjb25zdCBHcmFwaGljc1N1cmZhY2VUb2tl
biYgdG9rZW4pCit7CisgICAgLy8gWDExIGRvZXMgbm90IHN1cHBvcnQgQ29weVRvVGV4dHVyZSwg
c28gd2UgZG8gbm90IGNyZWF0ZSBhIEdyYXBoaWNzU3VyZmFjZSBpZiB0aGlzIGlzIHJlcXVlc3Rl
ZC4KKyAgICAvLyBHcmFwaGljc1N1cmZhY2VHTFggdXNlcyBhbiBYV2luZG93IGFzIG5hdGl2ZSBz
dXJmYWNlLiBUaGlzIG9uZSBhbHdheXMgaGFzIGEgZnJvbnQgYW5kIGEgYmFjayBidWZmZXIuCisg
ICAgLy8gVGhlcmVmb3JlIHNpbmdsZSBidWZmZXJlZCBHcmFwaGljc1N1cmZhY2VzIGFyZSBub3Qg
c3VwcG9ydGVkLgorICAgIGlmIChmbGFncyAmIFN1cHBvcnRzQ29weVRvVGV4dHVyZSB8fCBmbGFn
cyAmIFN1cHBvcnRzU2luZ2xlQnVmZmVyZWQpCisgICAgICAgIHJldHVybiBQYXNzUmVmUHRyPEdy
YXBoaWNzU3VyZmFjZT4oKTsKKworICAgIFJlZlB0cjxHcmFwaGljc1N1cmZhY2U+IHN1cmZhY2Ug
PSBhZG9wdFJlZihuZXcgR3JhcGhpY3NTdXJmYWNlKHNpemUsIGZsYWdzKSk7CisgICAgc3VyZmFj
ZS0+bV9wbGF0Zm9ybVN1cmZhY2UgPSB0b2tlbi5mcm9udEJ1ZmZlckhhbmRsZTsKKworICAgIHN1
cmZhY2UtPm1fcHJpdmF0ZSA9IG5ldyBHcmFwaGljc1N1cmZhY2VQcml2YXRlKHN1cmZhY2UtPm1f
cGxhdGZvcm1TdXJmYWNlKTsKKyAgICBpZiAoIXJlc29sdmVHTE1ldGhvZHMoKSkKKyAgICAgICAg
cmV0dXJuIFBhc3NSZWZQdHI8R3JhcGhpY3NTdXJmYWNlPigpOworCisgICAgcmV0dXJuIHN1cmZh
Y2U7Cit9CisKK2NoYXIqIEdyYXBoaWNzU3VyZmFjZTo6cGxhdGZvcm1Mb2NrKGNvbnN0IEludFJl
Y3QmLCBpbnQqIC8qb3V0cHV0U3RyaWRlKi8sIExvY2tPcHRpb25zKQoreworICAgIC8vIEdyYXBo
aWNzU3VyZmFjZSBpcyBjdXJyZW50bHkgb25seSBiZWluZyB1c2VkIGZvciBXZWJHTCwgd2hpY2gg
ZG9lcyBub3QgcmVxdWlyZSB0aGlzIGxvY2tpbmcgbWVjaGFuaXNtLgorICAgIHJldHVybiAwOwor
fQorCit2b2lkIEdyYXBoaWNzU3VyZmFjZTo6cGxhdGZvcm1VbmxvY2soKQoreworICAgIC8vIEdy
YXBoaWNzU3VyZmFjZSBpcyBjdXJyZW50bHkgb25seSBiZWluZyB1c2VkIGZvciBXZWJHTCwgd2hp
Y2ggZG9lcyBub3QgcmVxdWlyZSB0aGlzIGxvY2tpbmcgbWVjaGFuaXNtLgorfQorCit2b2lkIEdy
YXBoaWNzU3VyZmFjZTo6cGxhdGZvcm1EZXN0cm95KCkKK3sKKyAgICBpZiAobV90ZXh0dXJlKSB7
CisgICAgICAgIHBHbFhSZWxlYXNlVGV4SW1hZ2VFWFQobV9wcml2YXRlLT5kaXNwbGF5KCksIG1f
cHJpdmF0ZS0+Z2x4UGl4bWFwKCksIEdMWF9GUk9OVF9FWFQpOworICAgICAgICBnbERlbGV0ZVRl
eHR1cmVzKDEsICZtX3RleHR1cmUpOworICAgIH0KKworICAgIGRlbGV0ZSBtX3ByaXZhdGU7Cisg
ICAgbV9wcml2YXRlID0gMDsKK30KKworI2lmICFQTEFURk9STShRVCkKK1Bhc3NPd25QdHI8R3Jh
cGhpY3NDb250ZXh0PiBHcmFwaGljc1N1cmZhY2U6OnBsYXRmb3JtQmVnaW5QYWludChjb25zdCBJ
bnRTaXplJiwgY2hhciosIGludCkKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworICAgIHJldHVy
biBudWxscHRyOworfQorCitQYXNzUmVmUHRyPEltYWdlPiBHcmFwaGljc1N1cmZhY2U6OmNyZWF0
ZVJlYWRPbmx5SW1hZ2UoY29uc3QgSW50UmVjdCYpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsK
KyAgICByZXR1cm4gMDsKK30KKyNlbmRpZgorfQorI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9zdXJmYWNlcy9xdC9HcmFwaGljc1N1cmZhY2VHTFgu
Y3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc3VyZmFjZXMvcXQvR3JhcGhp
Y3NTdXJmYWNlR0xYLmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYThhNDMwYWE3
YWM0NWJkMjY5ZGQxZjkwNTk0YWNmOGY1NmY3NzNiNS4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9z
dXJmYWNlcy9xdC9HcmFwaGljc1N1cmZhY2VHTFguY3BwCisrKyAvZGV2L251bGwKQEAgLTEsNTM1
ICswLDAgQEAKLS8qCi0gQ29weXJpZ2h0IChDKSAyMDEyIE5va2lhIENvcnBvcmF0aW9uIGFuZC9v
ciBpdHMgc3Vic2lkaWFyeSgtaWVzKQotCi0gVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7
IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVy
bXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gTGljZW5zZSBhcyBwdWJsaXNo
ZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gdmVyc2lvbiAyIG9m
IHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotCi0g
VGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1
c2VmdWwsCi0gYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxp
ZWQgd2FycmFudHkgb2YKLSBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5z
ZSBmb3IgbW9yZSBkZXRhaWxzLgotCi0gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBv
ZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotIGFsb25nIHdpdGggdGhp
cyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCi0g
dGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBG
aWZ0aCBGbG9vciwKLSBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSAqLwotCi0jaW5jbHVk
ZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiR3JhcGhpY3NTdXJmYWNlLmgiCi0KLSNpZiBVU0UoR1JB
UEhJQ1NfU1VSRkFDRSkKLQotI2luY2x1ZGUgIk5vdEltcGxlbWVudGVkLmgiCi0jaW5jbHVkZSAi
VGV4dHVyZU1hcHBlckdMLmgiCi0KLSNpZiBQTEFURk9STShRVCkKLS8vIFF0IGhlYWRlcnMgbXVz
dCBiZSBpbmNsdWRlZCBiZWZvcmUgZ2x4IGhlYWRlcnMuCi0jaW5jbHVkZSA8UUd1aUFwcGxpY2F0
aW9uPgotI2luY2x1ZGUgPFFPcGVuR0xDb250ZXh0PgotI2luY2x1ZGUgPHFwYS9xcGxhdGZvcm1u
YXRpdmVpbnRlcmZhY2UuaD4KLSNlbGlmIFBMQVRGT1JNKEVGTCkKLSNpbmNsdWRlIDxHTC9nbC5o
PgotI2VuZGlmCi0KLSNpbmNsdWRlIDxHTC9nbGV4dC5oPgotI2luY2x1ZGUgPEdML2dseC5oPgot
I2luY2x1ZGUgPFgxMS9leHRlbnNpb25zL1hjb21wb3NpdGUuaD4KLSNpbmNsdWRlIDxYMTEvZXh0
ZW5zaW9ucy9YcmVuZGVyLmg+Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotc3RhdGljIGxvbmcg
WDExT3ZlcnJpZGVSZWRpcmVjdCA9IDFMIDw8IDk7Ci0KLXN0YXRpYyBQRk5HTFhCSU5EVEVYSU1B
R0VFWFRQUk9DIHBHbFhCaW5kVGV4SW1hZ2VFWFQgPSAwOwotc3RhdGljIFBGTkdMWFJFTEVBU0VU
RVhJTUFHRUVYVFBST0MgcEdsWFJlbGVhc2VUZXhJbWFnZUVYVCA9IDA7Ci1zdGF0aWMgUEZOR0xC
SU5ERlJBTUVCVUZGRVJQUk9DIHBHbEJpbmRGcmFtZWJ1ZmZlciA9IDA7Ci1zdGF0aWMgUEZOR0xC
TElURlJBTUVCVUZGRVJQUk9DIHBHbEJsaXRGcmFtZWJ1ZmZlciA9IDA7Ci1zdGF0aWMgUEZOR0xH
RU5GUkFNRUJVRkZFUlNQUk9DIHBHbEdlbkZyYW1lYnVmZmVycyA9IDA7Ci1zdGF0aWMgUEZOR0xE
RUxFVEVGUkFNRUJVRkZFUlNQUk9DIHBHbERlbGV0ZUZyYW1lYnVmZmVycyA9IDA7Ci1zdGF0aWMg
UEZOR0xGUkFNRUJVRkZFUlRFWFRVUkUyRFBST0MgcEdsRnJhbWVidWZmZXJUZXh0dXJlMkQgPSAw
OwotCi1zdGF0aWMgaW50IGF0dHJpYnV0ZXNbXSA9IHsKLSAgICBHTFhfTEVWRUwsIDAsCi0gICAg
R0xYX0RSQVdBQkxFX1RZUEUsIEdMWF9XSU5ET1dfQklULAotICAgIEdMWF9SRU5ERVJfVFlQRSwg
ICBHTFhfUkdCQV9CSVQsCi0gICAgR0xYX1JFRF9TSVpFLCAgICAgIDEsCi0gICAgR0xYX0dSRUVO
X1NJWkUsICAgIDEsCi0gICAgR0xYX0JMVUVfU0laRSwgICAgIDEsCi0gICAgR0xYX0FMUEhBX1NJ
WkUsICAgIDEsCi0gICAgR0xYX0RFUFRIX1NJWkUsICAgIDEsCi0gICAgR0xYX1hfVklTVUFMX1RZ
UEUsIEdMWF9UUlVFX0NPTE9SLAotICAgIEdMWF9ET1VCTEVCVUZGRVIsICBUcnVlLAotICAgIE5v
bmUKLX07Ci0KLWNsYXNzIE9mZlNjcmVlblJvb3RXaW5kb3cgewotcHVibGljOgotICAgIE9mZlNj
cmVlblJvb3RXaW5kb3coKQotICAgIHsKLSAgICAgICAgKyttX3JlZkNvdW50OwotICAgIH0KLQot
ICAgIFdpbmRvdyBnZXRYV2luZG93KCkKLSAgICB7Ci0gICAgICAgIGlmICghbV93aW5kb3cpIHsK
LSAgICAgICAgICAgIERpc3BsYXkqIGRweSA9IGRpc3BsYXkoKTsKLSAgICAgICAgICAgIG1fd2lu
ZG93ID0gWENyZWF0ZVNpbXBsZVdpbmRvdyhkcHksIFhEZWZhdWx0Um9vdFdpbmRvdyhkcHkpLCAt
MSwgLTEsIDEsIDEsIDAsIEJsYWNrUGl4ZWwoZHB5LCAwKSwgV2hpdGVQaXhlbChkcHksIDApKTsK
LSAgICAgICAgICAgIFhTZXRXaW5kb3dBdHRyaWJ1dGVzIGF0dHJpYnV0ZXM7Ci0gICAgICAgICAg
ICBhdHRyaWJ1dGVzLm92ZXJyaWRlX3JlZGlyZWN0ID0gdHJ1ZTsKLSAgICAgICAgICAgIFhDaGFu
Z2VXaW5kb3dBdHRyaWJ1dGVzKGRweSwgbV93aW5kb3csIFgxMU92ZXJyaWRlUmVkaXJlY3QsICZh
dHRyaWJ1dGVzKTsKLSAgICAgICAgICAgIC8vIE1hcCB3aW5kb3cgdG8gdGhlIHNjcmVlbgotICAg
ICAgICAgICAgWE1hcFdpbmRvdyhkcHksIG1fd2luZG93KTsKLSAgICAgICAgfQotCi0gICAgICAg
IHJldHVybiBtX3dpbmRvdzsKLSAgICB9Ci0KLSAgICBEaXNwbGF5KiBkaXNwbGF5KCkKLSAgICB7
Ci0gICAgICAgIGlmICghbV9kaXNwbGF5KQotICAgICAgICAgICAgbV9kaXNwbGF5ID0gWE9wZW5E
aXNwbGF5KDApOwotICAgICAgICByZXR1cm4gbV9kaXNwbGF5OwotICAgIH0KLQotICAgIH5PZmZT
Y3JlZW5Sb290V2luZG93KCkKLSAgICB7Ci0gICAgICAgIGlmICgtLW1fcmVmQ291bnQgfHwgIW1f
ZGlzcGxheSkKLSAgICAgICAgICAgIHJldHVybjsKLQotICAgICAgICBpZiAobV93aW5kb3cpIHsK
LSAgICAgICAgICAgIFhVbm1hcFdpbmRvdyhtX2Rpc3BsYXksIG1fd2luZG93KTsKLSAgICAgICAg
ICAgIFhEZXN0cm95V2luZG93KG1fZGlzcGxheSwgbV93aW5kb3cpOwotICAgICAgICAgICAgbV93
aW5kb3cgPSAwOwotICAgICAgICB9Ci0KLSAgICAgICAgWENsb3NlRGlzcGxheShtX2Rpc3BsYXkp
OwotICAgICAgICBtX2Rpc3BsYXkgPSAwOwotICAgIH0KLQotcHJpdmF0ZToKLSAgICBzdGF0aWMg
aW50IG1fcmVmQ291bnQ7Ci0gICAgc3RhdGljIFdpbmRvdyBtX3dpbmRvdzsKLSAgICBzdGF0aWMg
RGlzcGxheSogbV9kaXNwbGF5OwotfTsKLQotaW50IE9mZlNjcmVlblJvb3RXaW5kb3c6Om1fcmVm
Q291bnQgPSAwOwotV2luZG93IE9mZlNjcmVlblJvb3RXaW5kb3c6Om1fd2luZG93ID0gMDsKLURp
c3BsYXkqIE9mZlNjcmVlblJvb3RXaW5kb3c6Om1fZGlzcGxheSA9IDA7Ci0KLXN0YXRpYyBjb25z
dCBpbnQgZ2x4U3BlY1tdID0gewotICAgIC8vIFRoZSBzcGVjaWZpY2F0aW9uIGlzIGEgc2V0IGtl
eSB2YWx1ZSBwYWlycyBzdG9yZWQgaW4gYSBzaW1wbGUgYXJyYXkuCi0gICAgR0xYX0xFVkVMLCAg
ICAgICAgICAgICAgICAgICAgICAgICAgMCwKLSAgICBHTFhfRFJBV0FCTEVfVFlQRSwgICAgICAg
ICAgICAgICAgICBHTFhfUElYTUFQX0JJVCB8IEdMWF9XSU5ET1dfQklULAotICAgIEdMWF9CSU5E
X1RPX1RFWFRVUkVfVEFSR0VUU19FWFQsICAgIEdMWF9URVhUVVJFXzJEX0JJVF9FWFQsCi0gICAg
R0xYX0JJTkRfVE9fVEVYVFVSRV9SR0JBX0VYVCwgICAgICAgVFJVRSwKLSAgICAwCi19OwotCi1z
dGF0aWMgY29uc3QgaW50IGdseEF0dHJpYnV0ZXNbXSA9IHsKLSAgICBHTFhfVEVYVFVSRV9GT1JN
QVRfRVhULAotICAgIEdMWF9URVhUVVJFX0ZPUk1BVF9SR0JBX0VYVCwKLSAgICBHTFhfVEVYVFVS
RV9UQVJHRVRfRVhULAotICAgIEdMWF9URVhUVVJFXzJEX0VYVCwKLSAgICAwCi19OwotCi1zdHJ1
Y3QgR3JhcGhpY3NTdXJmYWNlUHJpdmF0ZSB7Ci0gICAgR3JhcGhpY3NTdXJmYWNlUHJpdmF0ZShj
b25zdCBQbGF0Zm9ybUdyYXBoaWNzQ29udGV4dDNEIHNoYXJlQ29udGV4dCA9IDApCi0gICAgICAg
IDogbV9kaXNwbGF5KG1fb2ZmU2NyZWVuV2luZG93LmRpc3BsYXkoKSkKLSAgICAgICAgLCBtX3hQ
aXhtYXAoMCkKLSAgICAgICAgLCBtX2dseFBpeG1hcCgwKQotICAgICAgICAsIG1fc3VyZmFjZSgw
KQotICAgICAgICAsIG1fZ2x4U3VyZmFjZSgwKQotICAgICAgICAsIG1fZ2xDb250ZXh0KDApCi0g
ICAgICAgICwgbV9kZXRhY2hlZENvbnRleHQoMCkKLSAgICAgICAgLCBtX2RldGFjaGVkU3VyZmFj
ZSgwKQotICAgICAgICAsIG1fZmJDb25maWcoMCkKLSAgICAgICAgLCBtX3RleHR1cmVJc1lJbnZl
cnRlZChmYWxzZSkKLSAgICAgICAgLCBtX2hhc0FscGhhKGZhbHNlKQotICAgICAgICAsIG1faXNS
ZWNlaXZlcihmYWxzZSkKLSAgICB7Ci0gICAgICAgIEdMWENvbnRleHQgc2hhcmVDb250ZXh0T2Jq
ZWN0ID0gMDsKLQotI2lmIFBMQVRGT1JNKFFUKQotICAgICAgICBpZiAoc2hhcmVDb250ZXh0KSB7
Ci0jaWYgMAotICAgICAgICAgICAgLy8gVGhpcyBjb2RlIHBhdGggcmVxdWlyZXMgUVhjYk5hdGl2
ZUludGVyZmFjZTo6bmF0aXZlUmVzb3VyY2VGb3JDb250ZXh0KCkgd2hpY2ggaXMgbm90IGF2YWls
YmxlIGluIFF0NSBvbiB0aGUgYnVpbGQgYm90cyB5ZXQuCi0gICAgICAgICAgICBRUGxhdGZvcm1O
YXRpdmVJbnRlcmZhY2UqIG5hdGl2ZUludGVyZmFjZSA9IFFHdWlBcHBsaWNhdGlvbjo6cGxhdGZv
cm1OYXRpdmVJbnRlcmZhY2UoKTsKLSAgICAgICAgICAgIHNoYXJlQ29udGV4dE9iamVjdCA9IHN0
YXRpY19jYXN0PEdMWENvbnRleHQ+KG5hdGl2ZUludGVyZmFjZS0+bmF0aXZlUmVzb3VyY2VGb3JD
b250ZXh0KFFCeXRlQXJyYXlMaXRlcmFsKCJnbHhjb250ZXh0IiksIHNoYXJlQ29udGV4dCkpOwot
ICAgICAgICAgICAgaWYgKCFzaGFyZUNvbnRleHRPYmplY3QpCi0gICAgICAgICAgICAgICAgcmV0
dXJuOwotI2Vsc2UKLSAgICAgICAgICAgIC8vIFRoaXMgY29kZSBwYXRoIHNob3VsZCBiZSByZW1v
dmVkIGFzIHNvb24gYXMgUVhjYk5hdGl2ZUludGVyZmFjZTo6bmF0aXZlUmVzb3VyY2VGb3JDb250
ZXh0KCkgY2FuIHByb3ZpZGUgdGhlIEdMWENvbnRleHQuCi0gICAgICAgICAgICBRT3BlbkdMQ29u
dGV4dCogcHJldmlvdXNDb250ZXh0ID0gUU9wZW5HTENvbnRleHQ6OmN1cnJlbnRDb250ZXh0KCk7
Ci0gICAgICAgICAgICBRU3VyZmFjZSogcHJldmlvdXNTdXJmYWNlID0gcHJldmlvdXNDb250ZXh0
LT5zdXJmYWNlKCk7Ci0gICAgICAgICAgICBRU3VyZmFjZSogY3VycmVudFN1cmZhY2UgPSBzaGFy
ZUNvbnRleHQtPnN1cmZhY2UoKTsKLSAgICAgICAgICAgIHNoYXJlQ29udGV4dC0+bWFrZUN1cnJl
bnQoY3VycmVudFN1cmZhY2UpOwotCi0gICAgICAgICAgICBzaGFyZUNvbnRleHRPYmplY3QgPSBn
bFhHZXRDdXJyZW50Q29udGV4dCgpOwotCi0gICAgICAgICAgICBwcmV2aW91c0NvbnRleHQtPm1h
a2VDdXJyZW50KHByZXZpb3VzU3VyZmFjZSk7Ci0jZW5kaWYKLSAgICAgICAgfQotI2Vsc2UKLSAg
ICAgICAgVU5VU0VEX1BBUkFNKHNoYXJlQ29udGV4dCk7Ci0jZW5kaWYKLQotICAgICAgICBpbnQg
bnVtUmV0dXJuZWQ7Ci0gICAgICAgIEdMWEZCQ29uZmlnKiBmYkNvbmZpZ3MgPSBnbFhDaG9vc2VG
QkNvbmZpZyhtX2Rpc3BsYXksIERlZmF1bHRTY3JlZW4obV9kaXNwbGF5KSwgYXR0cmlidXRlcywg
Jm51bVJldHVybmVkKTsKLQotICAgICAgICAvLyBNYWtlIHN1cmUgdGhhdCB3ZSBjaG9vc2UgYSBj
b25maWd1cmF0aW9uIHRoYXQgc3VwcG9ydHMgYW4gYWxwaGEgbWFzay4KLSAgICAgICAgZm9yIChp
bnQgaSA9IDA7IGkgPCBudW1SZXR1cm5lZDsgKytpKSB7Ci0gICAgICAgICAgICBYVmlzdWFsSW5m
byogdmlzdWFsSW5mbyA9IGdsWEdldFZpc3VhbEZyb21GQkNvbmZpZyhtX2Rpc3BsYXksIGZiQ29u
Zmlnc1tpXSk7Ci0gICAgICAgICAgICBpZiAoIXZpc3VhbEluZm8pCi0gICAgICAgICAgICAgICAg
Y29udGludWU7Ci0KLSAgICAgICAgICAgIFhSZW5kZXJQaWN0Rm9ybWF0KiBmb3JtYXQgPSBYUmVu
ZGVyRmluZFZpc3VhbEZvcm1hdChtX2Rpc3BsYXksIHZpc3VhbEluZm8tPnZpc3VhbCk7Ci0gICAg
ICAgICAgICBpZiAoZm9ybWF0ICYmIGZvcm1hdC0+ZGlyZWN0LmFscGhhTWFzayA+IDApIHsKLSAg
ICAgICAgICAgICAgICBtX2ZiQ29uZmlnID0gZmJDb25maWdzW2ldOwotICAgICAgICAgICAgICAg
IGJyZWFrOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgWEZyZWUoZmJDb25m
aWdzKTsKLQotICAgICAgICAvLyBDcmVhdGUgYSBHTFggY29udGV4dCBmb3IgT3BlbkdMIHJlbmRl
cmluZwotICAgICAgICBtX2dsQ29udGV4dCA9IGdsWENyZWF0ZU5ld0NvbnRleHQobV9kaXNwbGF5
LCBtX2ZiQ29uZmlnLCBHTFhfUkdCQV9UWVBFLCBzaGFyZUNvbnRleHRPYmplY3QsIHRydWUpOwot
ICAgIH0KLQotICAgIEdyYXBoaWNzU3VyZmFjZVByaXZhdGUodWludDMyX3Qgd2luSWQpCi0gICAg
ICAgIDogbV9kaXNwbGF5KG1fb2ZmU2NyZWVuV2luZG93LmRpc3BsYXkoKSkKLSAgICAgICAgLCBt
X3hQaXhtYXAoMCkKLSAgICAgICAgLCBtX2dseFBpeG1hcCgwKQotICAgICAgICAsIG1fc3VyZmFj
ZSh3aW5JZCkKLSAgICAgICAgLCBtX2dseFN1cmZhY2UoMCkKLSAgICAgICAgLCBtX2dsQ29udGV4
dCgwKQotICAgICAgICAsIG1fZGV0YWNoZWRDb250ZXh0KDApCi0gICAgICAgICwgbV9kZXRhY2hl
ZFN1cmZhY2UoMCkKLSAgICAgICAgLCBtX2ZiQ29uZmlnKDApCi0gICAgICAgICwgbV90ZXh0dXJl
SXNZSW52ZXJ0ZWQoZmFsc2UpCi0gICAgICAgICwgbV9oYXNBbHBoYShmYWxzZSkKLSAgICAgICAg
LCBtX2lzUmVjZWl2ZXIodHJ1ZSkKLSAgICB7IH0KLQotICAgIH5HcmFwaGljc1N1cmZhY2VQcml2
YXRlKCkKLSAgICB7Ci0gICAgICAgIGlmIChtX2dseFBpeG1hcCkKLSAgICAgICAgICAgIGdsWERl
c3Ryb3lQaXhtYXAobV9kaXNwbGF5LCBtX2dseFBpeG1hcCk7Ci0gICAgICAgIG1fZ2x4UGl4bWFw
ID0gMDsKLQotICAgICAgICBpZiAobV94UGl4bWFwKQotICAgICAgICAgICAgWEZyZWVQaXhtYXAo
bV9kaXNwbGF5LCBtX3hQaXhtYXApOwotICAgICAgICBtX3hQaXhtYXAgPSAwOwotCi0gICAgICAg
IGlmIChtX2dsQ29udGV4dCkKLSAgICAgICAgICAgIGdsWERlc3Ryb3lDb250ZXh0KG1fZGlzcGxh
eSwgbV9nbENvbnRleHQpOwotICAgIH0KLQotICAgIHVpbnQzMl90IGNyZWF0ZVN1cmZhY2UoY29u
c3QgSW50U2l6ZSYgc2l6ZSkKLSAgICB7Ci0gICAgICAgIFhWaXN1YWxJbmZvKiB2aXN1YWxJbmZv
ID0gZ2xYR2V0VmlzdWFsRnJvbUZCQ29uZmlnKG1fZGlzcGxheSwgbV9mYkNvbmZpZyk7Ci0gICAg
ICAgIGlmICghdmlzdWFsSW5mbykKLSAgICAgICAgICAgIHJldHVybiAwOwotCi0gICAgICAgIENv
bG9ybWFwIGNtYXAgPSBYQ3JlYXRlQ29sb3JtYXAobV9kaXNwbGF5LCBtX29mZlNjcmVlbldpbmRv
dy5nZXRYV2luZG93KCksIHZpc3VhbEluZm8tPnZpc3VhbCwgQWxsb2NOb25lKTsKLQotICAgICAg
ICBYU2V0V2luZG93QXR0cmlidXRlcyBhOwotICAgICAgICBhLmJhY2tncm91bmRfcGl4ZWwgPSBX
aGl0ZVBpeGVsKG1fZGlzcGxheSwgMCk7Ci0gICAgICAgIGEuYm9yZGVyX3BpeGVsID0gQmxhY2tQ
aXhlbChtX2Rpc3BsYXksIDApOwotICAgICAgICBhLmNvbG9ybWFwID0gY21hcDsKLSAgICAgICAg
bV9zdXJmYWNlID0gWENyZWF0ZVdpbmRvdyhtX2Rpc3BsYXksIG1fb2ZmU2NyZWVuV2luZG93Lmdl
dFhXaW5kb3coKSwgMCwgMCwgc2l6ZS53aWR0aCgpLCBzaXplLmhlaWdodCgpLAotICAgICAgICAg
ICAgMCwgdmlzdWFsSW5mby0+ZGVwdGgsIElucHV0T3V0cHV0LCB2aXN1YWxJbmZvLT52aXN1YWws
Ci0gICAgICAgICAgICBDV0JhY2tQaXhlbCB8IENXQm9yZGVyUGl4ZWwgfCBDV0NvbG9ybWFwLCAm
YSk7Ci0gICAgICAgIFhTZXRXaW5kb3dCYWNrZ3JvdW5kUGl4bWFwKG1fZGlzcGxheSwgbV9zdXJm
YWNlLCAwKTsKLSAgICAgICAgWENvbXBvc2l0ZVJlZGlyZWN0V2luZG93KG1fZGlzcGxheSwgbV9z
dXJmYWNlLCBDb21wb3NpdGVSZWRpcmVjdE1hbnVhbCk7Ci0gICAgICAgIG1fZ2x4U3VyZmFjZSA9
IGdsWENyZWF0ZVdpbmRvdyhtX2Rpc3BsYXksIG1fZmJDb25maWcsIG1fc3VyZmFjZSwgMCk7Ci0g
ICAgICAgIFhGcmVlKHZpc3VhbEluZm8pOwotCi0gICAgICAgIC8vIE1ha2Ugc3VyZSB0aGUgWFJl
bmRlciBFeHRlbnNpb24gaXMgYXZhaWxhYmxlLgotICAgICAgICBpbnQgZXZlbnRCYXNlcCwgZXJy
b3JCYXNlcDsKLSAgICAgICAgaWYgKCFYUmVuZGVyUXVlcnlFeHRlbnNpb24obV9kaXNwbGF5LCAm
ZXZlbnRCYXNlcCwgJmVycm9yQmFzZXApKQotICAgICAgICAgICAgcmV0dXJuIDA7Ci0KLSAgICAg
ICAgWE1hcFdpbmRvdyhtX2Rpc3BsYXksIG1fc3VyZmFjZSk7Ci0gICAgICAgIHJldHVybiBtX3N1
cmZhY2U7Ci0gICAgfQotCi0gICAgdm9pZCBjcmVhdGVQaXhtYXAodWludDMyX3Qgd2luSWQpCi0g
ICAgewotICAgICAgICBYV2luZG93QXR0cmlidXRlcyBhdHRyOwotICAgICAgICBYR2V0V2luZG93
QXR0cmlidXRlcyhtX2Rpc3BsYXksIHdpbklkLCAmYXR0cik7Ci0KLSAgICAgICAgWFJlbmRlclBp
Y3RGb3JtYXQqIGZvcm1hdCA9IFhSZW5kZXJGaW5kVmlzdWFsRm9ybWF0KG1fZGlzcGxheSwgYXR0
ci52aXN1YWwpOwotICAgICAgICBtX2hhc0FscGhhID0gKGZvcm1hdC0+dHlwZSA9PSBQaWN0VHlw
ZURpcmVjdCAmJiBmb3JtYXQtPmRpcmVjdC5hbHBoYU1hc2spOwotCi0gICAgICAgIGludCBudW1i
ZXJPZkNvbmZpZ3M7Ci0gICAgICAgIEdMWEZCQ29uZmlnKiBjb25maWdzID0gZ2xYQ2hvb3NlRkJD
b25maWcobV9kaXNwbGF5LCBYRGVmYXVsdFNjcmVlbihtX2Rpc3BsYXkpLCBnbHhTcGVjLCAmbnVt
YmVyT2ZDb25maWdzKTsKLQotICAgICAgICBtX3hQaXhtYXAgPSBYQ29tcG9zaXRlTmFtZVdpbmRv
d1BpeG1hcChtX2Rpc3BsYXksIHdpbklkKTsKLSAgICAgICAgbV9nbHhQaXhtYXAgPSBnbFhDcmVh
dGVQaXhtYXAobV9kaXNwbGF5LCAqY29uZmlncywgbV94UGl4bWFwLCBnbHhBdHRyaWJ1dGVzKTsK
LQotICAgICAgICB1aW50IGludmVydGVkID0gMDsKLSAgICAgICAgZ2xYUXVlcnlEcmF3YWJsZSht
X2Rpc3BsYXksIG1fZ2x4UGl4bWFwLCBHTFhfWV9JTlZFUlRFRF9FWFQsICZpbnZlcnRlZCk7Ci0g
ICAgICAgIG1fdGV4dHVyZUlzWUludmVydGVkID0gISFpbnZlcnRlZDsKLQotICAgICAgICBYRnJl
ZShjb25maWdzKTsKLSAgICB9Ci0KLSAgICBib29sIHRleHR1cmVJc1lJbnZlcnRlZCgpCi0gICAg
ewotICAgICAgICByZXR1cm4gbV90ZXh0dXJlSXNZSW52ZXJ0ZWQ7Ci0gICAgfQotCi0gICAgdm9p
ZCBtYWtlQ3VycmVudCgpCi0gICAgewotICAgICAgICBtX2RldGFjaGVkQ29udGV4dCA9IGdsWEdl
dEN1cnJlbnRDb250ZXh0KCk7Ci0gICAgICAgIG1fZGV0YWNoZWRTdXJmYWNlID0gZ2xYR2V0Q3Vy
cmVudERyYXdhYmxlKCk7Ci0gICAgICAgIGlmIChtX3N1cmZhY2UgJiYgbV9nbENvbnRleHQpCi0g
ICAgICAgICAgICBnbFhNYWtlQ3VycmVudChtX2Rpc3BsYXksIG1fc3VyZmFjZSwgbV9nbENvbnRl
eHQpOwotICAgIH0KLQotICAgIHZvaWQgZG9uZUN1cnJlbnQoKQotICAgIHsKLSAgICAgICAgaWYg
KG1fZGV0YWNoZWRDb250ZXh0KQotICAgICAgICAgICAgZ2xYTWFrZUN1cnJlbnQobV9kaXNwbGF5
LCBtX2RldGFjaGVkU3VyZmFjZSwgbV9kZXRhY2hlZENvbnRleHQpOwotICAgICAgICBtX2RldGFj
aGVkQ29udGV4dCA9IDA7Ci0gICAgfQotCi0gICAgdm9pZCBzd2FwQnVmZmVycygpCi0gICAgewot
ICAgICAgICAvLyBUaGUgYnVmZmVycyBhcmUgYmVpbmcgc3dpdGNoZWQgb24gdGhlIHdyaXRpbmcg
c2lkZSwgdGhlIHJlYWRpbmcgc2lkZSBqdXN0IHJlYWRzCi0gICAgICAgIC8vIHdoYXRldmVyIHRl
eHR1cmUgdGhlIFhXaW5kb3cgY29udGFpbnMuCi0gICAgICAgIGlmIChtX2lzUmVjZWl2ZXIpCi0g
ICAgICAgICAgICByZXR1cm47Ci0KLSAgICAgICAgR0xYQ29udGV4dCBnbENvbnRleHQgPSBnbFhH
ZXRDdXJyZW50Q29udGV4dCgpOwotCi0gICAgICAgIGlmIChtX3N1cmZhY2UgJiYgZ2xDb250ZXh0
KSB7Ci0gICAgICAgICAgICBHTGludCBvbGRGQk87Ci0gICAgICAgICAgICBnbEdldEludGVnZXJ2
KEdMX0ZSQU1FQlVGRkVSX0JJTkRJTkcsICZvbGRGQk8pOwotICAgICAgICAgICAgcEdsQmluZEZy
YW1lYnVmZmVyKEdMX0ZSQU1FQlVGRkVSLCAwKTsKLSAgICAgICAgICAgIGdsWFN3YXBCdWZmZXJz
KG1fZGlzcGxheSwgbV9zdXJmYWNlKTsKLSAgICAgICAgICAgIHBHbEJpbmRGcmFtZWJ1ZmZlcihH
TF9GUkFNRUJVRkZFUiwgb2xkRkJPKTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIHZvaWQgY29w
eUZyb21UZXh0dXJlKHVpbnQzMl90IHRleHR1cmUsIGNvbnN0IEludFJlY3QmIHNvdXJjZVJlY3Qp
Ci0gICAgewotICAgICAgICBtYWtlQ3VycmVudCgpOwotICAgICAgICBpbnQgeCA9IHNvdXJjZVJl
Y3QueCgpOwotICAgICAgICBpbnQgeSA9IHNvdXJjZVJlY3QueSgpOwotICAgICAgICBpbnQgd2lk
dGggPSBzb3VyY2VSZWN0LndpZHRoKCk7Ci0gICAgICAgIGludCBoZWlnaHQgPSBzb3VyY2VSZWN0
LmhlaWdodCgpOwotCi0gICAgICAgIGdsUHVzaEF0dHJpYihHTF9BTExfQVRUUklCX0JJVFMpOwot
ICAgICAgICBHTGludCBwcmV2aW91c0ZCTzsKLSAgICAgICAgZ2xHZXRJbnRlZ2VydihHTF9GUkFN
RUJVRkZFUl9CSU5ESU5HLCAmcHJldmlvdXNGQk8pOwotCi0gICAgICAgIEdMdWludCBvcmlnaW5G
Qk87Ci0gICAgICAgIHBHbEdlbkZyYW1lYnVmZmVycygxLCAmb3JpZ2luRkJPKTsKLSAgICAgICAg
cEdsQmluZEZyYW1lYnVmZmVyKEdMX1JFQURfRlJBTUVCVUZGRVIsIG9yaWdpbkZCTyk7Ci0gICAg
ICAgIGdsQmluZFRleHR1cmUoR0xfVEVYVFVSRV8yRCwgdGV4dHVyZSk7Ci0gICAgICAgIHBHbEZy
YW1lYnVmZmVyVGV4dHVyZTJEKEdMX1JFQURfRlJBTUVCVUZGRVIsIEdMX0NPTE9SX0FUVEFDSE1F
TlQwLCBHTF9URVhUVVJFXzJELCB0ZXh0dXJlLCAwKTsKLQotICAgICAgICBwR2xCaW5kRnJhbWVi
dWZmZXIoR0xfRFJBV19GUkFNRUJVRkZFUiwgMCk7Ci0gICAgICAgIHBHbEJsaXRGcmFtZWJ1ZmZl
cih4LCB5LCB3aWR0aCwgaGVpZ2h0LCB4LCB5LCB3aWR0aCwgaGVpZ2h0LCBHTF9DT0xPUl9CVUZG
RVJfQklULCBHTF9MSU5FQVIpOwotCi0gICAgICAgIHBHbEZyYW1lYnVmZmVyVGV4dHVyZTJEKEdM
X1JFQURfRlJBTUVCVUZGRVIsIEdMX0NPTE9SX0FUVEFDSE1FTlQwLCBHTF9URVhUVVJFXzJELCAw
LCAwKTsKLSAgICAgICAgZ2xCaW5kVGV4dHVyZShHTF9URVhUVVJFXzJELCAwKTsKLSAgICAgICAg
cEdsQmluZEZyYW1lYnVmZmVyKEdMX0ZSQU1FQlVGRkVSLCBwcmV2aW91c0ZCTyk7Ci0gICAgICAg
IHBHbERlbGV0ZUZyYW1lYnVmZmVycygxLCAmb3JpZ2luRkJPKTsKLQotICAgICAgICBnbFBvcEF0
dHJpYigpOwotCi0gICAgICAgIHN3YXBCdWZmZXJzKCk7Ci0gICAgICAgIGRvbmVDdXJyZW50KCk7
Ci0gICAgfQotCi0gICAgRGlzcGxheSogZGlzcGxheSgpIGNvbnN0IHsgcmV0dXJuIG1fZGlzcGxh
eTsgfQotCi0gICAgR0xYUGl4bWFwIGdseFBpeG1hcCgpIGNvbnN0Ci0gICAgewotICAgICAgICBp
ZiAoIW1fZ2x4UGl4bWFwICYmIG1fc3VyZmFjZSkKLSAgICAgICAgICAgIGNvbnN0X2Nhc3Q8R3Jh
cGhpY3NTdXJmYWNlUHJpdmF0ZSo+KHRoaXMpLT5jcmVhdGVQaXhtYXAobV9zdXJmYWNlKTsKLSAg
ICAgICAgcmV0dXJuIG1fZ2x4UGl4bWFwOwotICAgIH0KLQotICAgIEludFNpemUgc2l6ZSgpIGNv
bnN0Ci0gICAgewotICAgICAgICBpZiAobV9zaXplLmlzRW1wdHkoKSkgewotICAgICAgICAgICAg
WFdpbmRvd0F0dHJpYnV0ZXMgYXR0cjsKLSAgICAgICAgICAgIFhHZXRXaW5kb3dBdHRyaWJ1dGVz
KG1fZGlzcGxheSwgbV9zdXJmYWNlLCAmYXR0cik7Ci0gICAgICAgICAgICBjb25zdF9jYXN0PEdy
YXBoaWNzU3VyZmFjZVByaXZhdGUqPih0aGlzKS0+bV9zaXplID0gSW50U2l6ZShhdHRyLndpZHRo
LCBhdHRyLmhlaWdodCk7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIG1fc2l6ZTsKLSAgICB9
Ci0KLXByaXZhdGU6Ci0gICAgT2ZmU2NyZWVuUm9vdFdpbmRvdyBtX29mZlNjcmVlbldpbmRvdzsK
LSAgICBJbnRTaXplIG1fc2l6ZTsKLSAgICBEaXNwbGF5KiBtX2Rpc3BsYXk7Ci0gICAgUGl4bWFw
IG1feFBpeG1hcDsKLSAgICBHTFhQaXhtYXAgbV9nbHhQaXhtYXA7Ci0gICAgV2luZG93IG1fc3Vy
ZmFjZTsKLSAgICBXaW5kb3cgbV9nbHhTdXJmYWNlOwotICAgIEdMWENvbnRleHQgbV9nbENvbnRl
eHQ7Ci0gICAgR0xYQ29udGV4dCBtX2RldGFjaGVkQ29udGV4dDsKLSAgICBHTFhEcmF3YWJsZSBt
X2RldGFjaGVkU3VyZmFjZTsKLSAgICBHTFhGQkNvbmZpZyBtX2ZiQ29uZmlnOwotICAgIGJvb2wg
bV90ZXh0dXJlSXNZSW52ZXJ0ZWQ7Ci0gICAgYm9vbCBtX2hhc0FscGhhOwotICAgIGJvb2wgbV9p
c1JlY2VpdmVyOwotfTsKLQotc3RhdGljIGJvb2wgcmVzb2x2ZUdMTWV0aG9kcygpCi17Ci0gICAg
c3RhdGljIGJvb2wgcmVzb2x2ZWQgPSBmYWxzZTsKLSAgICBpZiAocmVzb2x2ZWQpCi0gICAgICAg
IHJldHVybiB0cnVlOwotICAgIHBHbFhCaW5kVGV4SW1hZ2VFWFQgPSByZWludGVycHJldF9jYXN0
PFBGTkdMWEJJTkRURVhJTUFHRUVYVFBST0M+KGdsWEdldFByb2NBZGRyZXNzKHJlaW50ZXJwcmV0
X2Nhc3Q8Y29uc3QgR0x1Ynl0ZSo+KCJnbFhCaW5kVGV4SW1hZ2VFWFQiKSkpOwotICAgIHBHbFhS
ZWxlYXNlVGV4SW1hZ2VFWFQgPSByZWludGVycHJldF9jYXN0PFBGTkdMWFJFTEVBU0VURVhJTUFH
RUVYVFBST0M+KGdsWEdldFByb2NBZGRyZXNzKHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgR0x1Ynl0
ZSo+KCJnbFhSZWxlYXNlVGV4SW1hZ2VFWFQiKSkpOwotICAgIHBHbEJpbmRGcmFtZWJ1ZmZlciA9
IHJlaW50ZXJwcmV0X2Nhc3Q8UEZOR0xCSU5ERlJBTUVCVUZGRVJQUk9DPihnbFhHZXRQcm9jQWRk
cmVzcyhyZWludGVycHJldF9jYXN0PGNvbnN0IEdMdWJ5dGUqPigiZ2xCaW5kRnJhbWVidWZmZXIi
KSkpOwotICAgIHBHbEJsaXRGcmFtZWJ1ZmZlciA9IHJlaW50ZXJwcmV0X2Nhc3Q8UEZOR0xCTElU
RlJBTUVCVUZGRVJQUk9DPihnbFhHZXRQcm9jQWRkcmVzcyhyZWludGVycHJldF9jYXN0PGNvbnN0
IEdMdWJ5dGUqPigiZ2xCbGl0RnJhbWVidWZmZXIiKSkpOwotCi0gICAgcEdsR2VuRnJhbWVidWZm
ZXJzID0gcmVpbnRlcnByZXRfY2FzdDxQRk5HTEdFTkZSQU1FQlVGRkVSU1BST0M+KGdsWEdldFBy
b2NBZGRyZXNzKHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgR0x1Ynl0ZSo+KCJnbEdlbkZyYW1lYnVm
ZmVycyIpKSk7Ci0gICAgcEdsRGVsZXRlRnJhbWVidWZmZXJzID0gcmVpbnRlcnByZXRfY2FzdDxQ
Rk5HTERFTEVURUZSQU1FQlVGRkVSU1BST0M+KGdsWEdldFByb2NBZGRyZXNzKHJlaW50ZXJwcmV0
X2Nhc3Q8Y29uc3QgR0x1Ynl0ZSo+KCJnbERlbGV0ZUZyYW1lYnVmZmVycyIpKSk7Ci0gICAgcEds
RnJhbWVidWZmZXJUZXh0dXJlMkQgPSByZWludGVycHJldF9jYXN0PFBGTkdMRlJBTUVCVUZGRVJU
RVhUVVJFMkRQUk9DPihnbFhHZXRQcm9jQWRkcmVzcyhyZWludGVycHJldF9jYXN0PGNvbnN0IEdM
dWJ5dGUqPigiZ2xGcmFtZWJ1ZmZlclRleHR1cmUyRCIpKSk7Ci0gICAgcmVzb2x2ZWQgPSBwR2xC
bGl0RnJhbWVidWZmZXIgJiYgcEdsQmluZEZyYW1lYnVmZmVyICYmIHBHbFhCaW5kVGV4SW1hZ2VF
WFQgJiYgcEdsWFJlbGVhc2VUZXhJbWFnZUVYVDsKLQotICAgIHJldHVybiByZXNvbHZlZDsKLX0K
LQotR3JhcGhpY3NTdXJmYWNlVG9rZW4gR3JhcGhpY3NTdXJmYWNlOjpwbGF0Zm9ybUV4cG9ydCgp
Ci17Ci0gICAgcmV0dXJuIEdyYXBoaWNzU3VyZmFjZVRva2VuKG1fcGxhdGZvcm1TdXJmYWNlKTsK
LX0KLQotdWludDMyX3QgR3JhcGhpY3NTdXJmYWNlOjpwbGF0Zm9ybUdldFRleHR1cmVJRCgpCi17
Ci0gICAgaWYgKCFtX3RleHR1cmUpIHsKLSAgICAgICAgZ2xHZW5UZXh0dXJlcygxLCAmbV90ZXh0
dXJlKTsKLSAgICAgICAgZ2xCaW5kVGV4dHVyZShHTF9URVhUVVJFXzJELCBtX3RleHR1cmUpOwot
ICAgICAgICBnbFRleFBhcmFtZXRlcmYoR0xfVEVYVFVSRV8yRCwgR0xfVEVYVFVSRV9NSU5fRklM
VEVSLCBHTF9MSU5FQVIpOwotICAgICAgICBnbFRleFBhcmFtZXRlcmYoR0xfVEVYVFVSRV8yRCwg
R0xfVEVYVFVSRV9NQUdfRklMVEVSLCBHTF9MSU5FQVIpOwotICAgICAgICBnbFRleFBhcmFtZXRl
cmkoR0xfVEVYVFVSRV8yRCwgR0xfVEVYVFVSRV9XUkFQX1MsIEdMX0NMQU1QX1RPX0VER0UpOwot
ICAgICAgICBnbFRleFBhcmFtZXRlcmkoR0xfVEVYVFVSRV8yRCwgR0xfVEVYVFVSRV9XUkFQX1Qs
IEdMX0NMQU1QX1RPX0VER0UpOwotICAgICAgICBwR2xYQmluZFRleEltYWdlRVhUKG1fcHJpdmF0
ZS0+ZGlzcGxheSgpLCBtX3ByaXZhdGUtPmdseFBpeG1hcCgpLCBHTFhfRlJPTlRfRVhULCAwKTsK
LSAgICB9Ci0KLSAgICByZXR1cm4gbV90ZXh0dXJlOwotfQotCi12b2lkIEdyYXBoaWNzU3VyZmFj
ZTo6cGxhdGZvcm1Db3B5VG9HTFRleHR1cmUodWludDMyX3QgLyp0YXJnZXQqLywgdWludDMyX3Qg
LyppZCovLCBjb25zdCBJbnRSZWN0JiAvKnRhcmdldFJlY3QqLywgY29uc3QgSW50UG9pbnQmIC8q
b2Zmc2V0Ki8pCi17Ci0gICAgLy8gVGhpcyBpcyBub3Qgc3VwcG9ydGVkIGJ5IEdMWC9YY29tcG9z
aXRlLgotfQotCi12b2lkIEdyYXBoaWNzU3VyZmFjZTo6cGxhdGZvcm1Db3B5RnJvbVRleHR1cmUo
dWludDMyX3QgdGV4dHVyZSwgY29uc3QgSW50UmVjdCYgc291cmNlUmVjdCkKLXsKLSAgICBtX3By
aXZhdGUtPmNvcHlGcm9tVGV4dHVyZSh0ZXh0dXJlLCBzb3VyY2VSZWN0KTsKLX0KLQotCi12b2lk
IEdyYXBoaWNzU3VyZmFjZTo6cGxhdGZvcm1QYWludFRvVGV4dHVyZU1hcHBlcihUZXh0dXJlTWFw
cGVyKiB0ZXh0dXJlTWFwcGVyLCBjb25zdCBGbG9hdFJlY3QmIHRhcmdldFJlY3QsIGNvbnN0IFRy
YW5zZm9ybWF0aW9uTWF0cml4JiB0cmFuc2Zvcm0sIGZsb2F0IG9wYWNpdHksIEJpdG1hcFRleHR1
cmUqIG1hc2spCi17Ci0gICAgVGV4dHVyZU1hcHBlckdMKiB0ZXhNYXBHTCA9IHN0YXRpY19jYXN0
PFRleHR1cmVNYXBwZXJHTCo+KHRleHR1cmVNYXBwZXIpOwotICAgIFRyYW5zZm9ybWF0aW9uTWF0
cml4IGFkanVzdGVkVHJhbnNmb3JtID0gdHJhbnNmb3JtOwotICAgIGFkanVzdGVkVHJhbnNmb3Jt
Lm11bHRpcGx5KFRyYW5zZm9ybWF0aW9uTWF0cml4OjpyZWN0VG9SZWN0KEZsb2F0UmVjdChGbG9h
dFBvaW50Ojp6ZXJvKCksIG1fcHJpdmF0ZS0+c2l6ZSgpKSwgdGFyZ2V0UmVjdCkpOwotICAgIFRl
eHR1cmVNYXBwZXJHTDo6RmxhZ3MgZmxhZ3MgPSBtX3ByaXZhdGUtPnRleHR1cmVJc1lJbnZlcnRl
ZCgpID8gVGV4dHVyZU1hcHBlckdMOjpTaG91bGRGbGlwVGV4dHVyZSA6IDA7Ci0gICAgZmxhZ3Mg
fD0gVGV4dHVyZU1hcHBlckdMOjpTdXBwb3J0c0JsZW5kaW5nOwotICAgIHRleE1hcEdMLT5kcmF3
VGV4dHVyZShwbGF0Zm9ybUdldFRleHR1cmVJRCgpLCBmbGFncywgbV9wcml2YXRlLT5zaXplKCks
IHRhcmdldFJlY3QsIGFkanVzdGVkVHJhbnNmb3JtLCBvcGFjaXR5LCBtYXNrKTsKLX0KLQotdWlu
dDMyX3QgR3JhcGhpY3NTdXJmYWNlOjpwbGF0Zm9ybUZyb250QnVmZmVyKCkgY29uc3QKLXsKLSAg
ICByZXR1cm4gMDsKLX0KLQotdWludDMyX3QgR3JhcGhpY3NTdXJmYWNlOjpwbGF0Zm9ybVN3YXBC
dWZmZXJzKCkKLXsKLSAgICBtX3ByaXZhdGUtPnN3YXBCdWZmZXJzKCk7Ci0gICAgcmV0dXJuIDA7
Ci19Ci0KLUludFNpemUgR3JhcGhpY3NTdXJmYWNlOjpwbGF0Zm9ybVNpemUoKSBjb25zdAotewot
ICAgIHJldHVybiBtX3ByaXZhdGUtPnNpemUoKTsKLX0KLQotUGFzc1JlZlB0cjxHcmFwaGljc1N1
cmZhY2U+IEdyYXBoaWNzU3VyZmFjZTo6cGxhdGZvcm1DcmVhdGUoY29uc3QgSW50U2l6ZSYgc2l6
ZSwgRmxhZ3MgZmxhZ3MsIGNvbnN0IFBsYXRmb3JtR3JhcGhpY3NDb250ZXh0M0Qgc2hhcmVDb250
ZXh0KQotewotICAgIC8vIFgxMSBkb2VzIG5vdCBzdXBwb3J0IENvcHlUb1RleHR1cmUsIHNvIHdl
IGRvIG5vdCBjcmVhdGUgYSBHcmFwaGljc1N1cmZhY2UgaWYgdGhpcyBpcyByZXF1ZXN0ZWQuCi0g
ICAgLy8gR3JhcGhpY3NTdXJmYWNlR0xYIHVzZXMgYW4gWFdpbmRvdyBhcyBuYXRpdmUgc3VyZmFj
ZS4gVGhpcyBvbmUgYWx3YXlzIGhhcyBhIGZyb250IGFuZCBhIGJhY2sgYnVmZmVyLgotICAgIC8v
IFRoZXJlZm9yZSBzaW5nbGUgYnVmZmVyZWQgR3JhcGhpY3NTdXJmYWNlcyBhcmUgbm90IHN1cHBv
cnRlZC4KLSAgICBpZiAoZmxhZ3MgJiBTdXBwb3J0c0NvcHlUb1RleHR1cmUgfHwgZmxhZ3MgJiBT
dXBwb3J0c1NpbmdsZUJ1ZmZlcmVkKQotICAgICAgICByZXR1cm4gUGFzc1JlZlB0cjxHcmFwaGlj
c1N1cmZhY2U+KCk7Ci0KLSAgICBSZWZQdHI8R3JhcGhpY3NTdXJmYWNlPiBzdXJmYWNlID0gYWRv
cHRSZWYobmV3IEdyYXBoaWNzU3VyZmFjZShzaXplLCBmbGFncykpOwotCi0gICAgc3VyZmFjZS0+
bV9wcml2YXRlID0gbmV3IEdyYXBoaWNzU3VyZmFjZVByaXZhdGUoc2hhcmVDb250ZXh0KTsKLSAg
ICBpZiAoIXJlc29sdmVHTE1ldGhvZHMoKSkKLSAgICAgICAgcmV0dXJuIFBhc3NSZWZQdHI8R3Jh
cGhpY3NTdXJmYWNlPigpOwotCi0gICAgc3VyZmFjZS0+bV9wbGF0Zm9ybVN1cmZhY2UgPSBzdXJm
YWNlLT5tX3ByaXZhdGUtPmNyZWF0ZVN1cmZhY2Uoc2l6ZSk7Ci0KLSAgICByZXR1cm4gc3VyZmFj
ZTsKLX0KLQotUGFzc1JlZlB0cjxHcmFwaGljc1N1cmZhY2U+IEdyYXBoaWNzU3VyZmFjZTo6cGxh
dGZvcm1JbXBvcnQoY29uc3QgSW50U2l6ZSYgc2l6ZSwgRmxhZ3MgZmxhZ3MsIGNvbnN0IEdyYXBo
aWNzU3VyZmFjZVRva2VuJiB0b2tlbikKLXsKLSAgICAvLyBYMTEgZG9lcyBub3Qgc3VwcG9ydCBD
b3B5VG9UZXh0dXJlLCBzbyB3ZSBkbyBub3QgY3JlYXRlIGEgR3JhcGhpY3NTdXJmYWNlIGlmIHRo
aXMgaXMgcmVxdWVzdGVkLgotICAgIC8vIEdyYXBoaWNzU3VyZmFjZUdMWCB1c2VzIGFuIFhXaW5k
b3cgYXMgbmF0aXZlIHN1cmZhY2UuIFRoaXMgb25lIGFsd2F5cyBoYXMgYSBmcm9udCBhbmQgYSBi
YWNrIGJ1ZmZlci4KLSAgICAvLyBUaGVyZWZvcmUgc2luZ2xlIGJ1ZmZlcmVkIEdyYXBoaWNzU3Vy
ZmFjZXMgYXJlIG5vdCBzdXBwb3J0ZWQuCi0gICAgaWYgKGZsYWdzICYgU3VwcG9ydHNDb3B5VG9U
ZXh0dXJlIHx8IGZsYWdzICYgU3VwcG9ydHNTaW5nbGVCdWZmZXJlZCkKLSAgICAgICAgcmV0dXJu
IFBhc3NSZWZQdHI8R3JhcGhpY3NTdXJmYWNlPigpOwotCi0gICAgUmVmUHRyPEdyYXBoaWNzU3Vy
ZmFjZT4gc3VyZmFjZSA9IGFkb3B0UmVmKG5ldyBHcmFwaGljc1N1cmZhY2Uoc2l6ZSwgZmxhZ3Mp
KTsKLSAgICBzdXJmYWNlLT5tX3BsYXRmb3JtU3VyZmFjZSA9IHRva2VuLmZyb250QnVmZmVySGFu
ZGxlOwotCi0gICAgc3VyZmFjZS0+bV9wcml2YXRlID0gbmV3IEdyYXBoaWNzU3VyZmFjZVByaXZh
dGUoc3VyZmFjZS0+bV9wbGF0Zm9ybVN1cmZhY2UpOwotICAgIGlmICghcmVzb2x2ZUdMTWV0aG9k
cygpKQotICAgICAgICByZXR1cm4gUGFzc1JlZlB0cjxHcmFwaGljc1N1cmZhY2U+KCk7Ci0KLSAg
ICByZXR1cm4gc3VyZmFjZTsKLX0KLQotY2hhciogR3JhcGhpY3NTdXJmYWNlOjpwbGF0Zm9ybUxv
Y2soY29uc3QgSW50UmVjdCYsIGludCogLypvdXRwdXRTdHJpZGUqLywgTG9ja09wdGlvbnMpCi17
Ci0gICAgLy8gR3JhcGhpY3NTdXJmYWNlIGlzIGN1cnJlbnRseSBvbmx5IGJlaW5nIHVzZWQgZm9y
IFdlYkdMLCB3aGljaCBkb2VzIG5vdCByZXF1aXJlIHRoaXMgbG9ja2luZyBtZWNoYW5pc20uCi0g
ICAgcmV0dXJuIDA7Ci19Ci0KLXZvaWQgR3JhcGhpY3NTdXJmYWNlOjpwbGF0Zm9ybVVubG9jaygp
Ci17Ci0gICAgLy8gR3JhcGhpY3NTdXJmYWNlIGlzIGN1cnJlbnRseSBvbmx5IGJlaW5nIHVzZWQg
Zm9yIFdlYkdMLCB3aGljaCBkb2VzIG5vdCByZXF1aXJlIHRoaXMgbG9ja2luZyBtZWNoYW5pc20u
Ci19Ci0KLXZvaWQgR3JhcGhpY3NTdXJmYWNlOjpwbGF0Zm9ybURlc3Ryb3koKQotewotICAgIGlm
IChtX3RleHR1cmUpIHsKLSAgICAgICAgcEdsWFJlbGVhc2VUZXhJbWFnZUVYVChtX3ByaXZhdGUt
PmRpc3BsYXkoKSwgbV9wcml2YXRlLT5nbHhQaXhtYXAoKSwgR0xYX0ZST05UX0VYVCk7Ci0gICAg
ICAgIGdsRGVsZXRlVGV4dHVyZXMoMSwgJm1fdGV4dHVyZSk7Ci0gICAgfQotCi0gICAgZGVsZXRl
IG1fcHJpdmF0ZTsKLSAgICBtX3ByaXZhdGUgPSAwOwotfQotCi0jaWYgIVBMQVRGT1JNKFFUKQot
UGFzc093blB0cjxHcmFwaGljc0NvbnRleHQ+IEdyYXBoaWNzU3VyZmFjZTo6cGxhdGZvcm1CZWdp
blBhaW50KGNvbnN0IEludFNpemUmLCBjaGFyKiwgaW50KQotewotICAgIG5vdEltcGxlbWVudGVk
KCk7Ci0gICAgcmV0dXJuIG51bGxwdHI7Ci19Ci0KLVBhc3NSZWZQdHI8SW1hZ2U+IEdyYXBoaWNz
U3VyZmFjZTo6Y3JlYXRlUmVhZE9ubHlJbWFnZShjb25zdCBJbnRSZWN0JikKLXsKLSAgICBub3RJ
bXBsZW1lbnRlZCgpOwotICAgIHJldHVybiAwOwotfQotI2VuZGlmCi19Ci0jZW5kaWYK
</data>

          </attachment>
      

    </bug>

</bugzilla>