<?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>126344</bug_id>
          
          <creation_ts>2013-12-31 09:18:42 -0800</creation_ts>
          <short_desc>[SOUP] Move WebKitSoupRequestInputStream to Share/Network/soup</short_desc>
          <delta_ts>2017-01-20 20:08:00 -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>WebKit2</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>Gtk, Soup</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Carlos Garcia Campos">cgarcia</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>bunhere</cc>
    
    <cc>cdumez</cc>
    
    <cc>dpino</cc>
    
    <cc>gyuyoung.kim</cc>
    
    <cc>mcatanzaro</cc>
    
    <cc>rakuco</cc>
    
    <cc>sergio</cc>
    
    <cc>webkit-ews</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>963531</commentid>
    <comment_count>0</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2013-12-31 09:18:42 -0800</bug_when>
    <thetext>These classes will be used by both web process and network process once bug #125583 is fixed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>990866</commentid>
    <comment_count>1</comment_count>
      <attachid>226821</attachid>
    <who name="Diego Pino">dpino</who>
    <bug_when>2014-03-15 09:00:47 -0700</bug_when>
    <thetext>Created attachment 226821
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>991194</commentid>
    <comment_count>2</comment_count>
      <attachid>226821</attachid>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2014-03-17 06:43:37 -0700</bug_when>
    <thetext>Comment on attachment 226821
Patch

You should also update the EFL cmake files. I was waiting for the EFL port to switch to custom protocols before doing this, but we can do it before in any case.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>991198</commentid>
    <comment_count>3</comment_count>
      <attachid>226909</attachid>
    <who name="Diego Pino">dpino</who>
    <bug_when>2014-03-17 07:02:55 -0700</bug_when>
    <thetext>Created attachment 226909
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1000196</commentid>
    <comment_count>4</comment_count>
      <attachid>229206</attachid>
    <who name="Diego Pino">dpino</who>
    <bug_when>2014-04-12 11:16:26 -0700</bug_when>
    <thetext>Created attachment 229206
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1151977</commentid>
    <comment_count>5</comment_count>
      <attachid>229206</attachid>
    <who name="Michael Catanzaro">mcatanzaro</who>
    <bug_when>2016-01-02 09:24:54 -0800</bug_when>
    <thetext>Comment on attachment 229206
Patch

OK to move WebKitSoupRequestInputStream. WebKitSoupRequestGeneric has since moved to WebCore, so this patch will need to be updated to not touch that.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1152266</commentid>
    <comment_count>6</comment_count>
    <who name="Diego Pino">dpino</who>
    <bug_when>2016-01-04 00:01:30 -0800</bug_when>
    <thetext>@Michael: I&apos;m out of touch with WebKit lately. Updating the patch would take me a considerable amount time :/ Would you like to take it over?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1152312</commentid>
    <comment_count>7</comment_count>
    <who name="Michael Catanzaro">mcatanzaro</who>
    <bug_when>2016-01-04 07:23:50 -0800</bug_when>
    <thetext>No problem!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1268707</commentid>
    <comment_count>8</comment_count>
    <who name="Michael Catanzaro">mcatanzaro</who>
    <bug_when>2017-01-20 20:08:00 -0800</bug_when>
    <thetext>These files don&apos;t seem to exist anymore, so I guess this is obsolete.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>226821</attachid>
            <date>2014-03-15 09:00:47 -0700</date>
            <delta_ts>2014-03-17 07:02:43 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-126344-20140315170021.patch</filename>
            <type>text/plain</type>
            <size>40713</size>
            <attacher name="Diego Pino">dpino</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTY1NjgwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cKaW5kZXggYTY4OTczNDM1ZTVhN2Uw
OTBlYzhkMzM5NDIyOTg1YzIxMzRmMTMyNS4uOWZhOWE2MWZhMzczYzhhY2FhOGI5MDg5ODg1NTZm
NzNhN2I4YzVjNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJLaXQyL0NoYW5nZUxvZwpAQCAtMSwzICsxLDM4IEBACisyMDE0LTAzLTE1ICBEaWVn
byBQaW5vIEdhcmNpYSAgPGRwaW5vQGlnYWxpYS5jb20+CisKKyAgICAgICAgW1NPVVBdIE1vdmUg
V2ViS2l0U291cFJlcXVlc3RHZW5lcmljIGFuZCBXZWJLaXRTb3VwUmVxdWVzdElucHV0U3RyZWFt
IHRvIFNoYXJlL05ldHdvcmsvc291cAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9MTI2MzQ0CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BT
ISkuCisKKyAgICAgICAgKiBQbGF0Zm9ybUdUSy5jbWFrZToKKyAgICAgICAgKiBTaGFyZWQvTmV0
d29yay9DdXN0b21Qcm90b2NvbHMvc291cC9XZWJLaXRTb3VwUmVxdWVzdEdlbmVyaWMuY3BwOiBS
ZW5hbWVkIGZyb20gU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9zb3VwL1dlYktpdFNvdXBSZXF1
ZXN0R2VuZXJpYy5jcHAuCisgICAgICAgICh3ZWJraXRTb3VwUmVxdWVzdEdlbmVyaWNGaW5hbGl6
ZSk6CisgICAgICAgICh3ZWJraXRfc291cF9yZXF1ZXN0X2dlbmVyaWNfaW5pdCk6CisgICAgICAg
ICh3ZWJraXRTb3VwUmVxdWVzdEdlbmVyaWNTZW5kQXN5bmMpOgorICAgICAgICAod2Via2l0U291
cFJlcXVlc3RHZW5lcmljU2VuZEZpbmlzaCk6CisgICAgICAgICh3ZWJraXRTb3VwUmVxdWVzdEdl
bmVyaWNHZXRDb250ZW50TGVuZ3RoKToKKyAgICAgICAgKHdlYmtpdFNvdXBSZXF1ZXN0R2VuZXJp
Y0dldENvbnRlbnRUeXBlKToKKyAgICAgICAgKHdlYmtpdF9zb3VwX3JlcXVlc3RfZ2VuZXJpY19j
bGFzc19pbml0KToKKyAgICAgICAgKHdlYmtpdFNvdXBSZXF1ZXN0R2VuZXJpY1NldENvbnRlbnRM
ZW5ndGgpOgorICAgICAgICAod2Via2l0U291cFJlcXVlc3RHZW5lcmljU2V0Q29udGVudFR5cGUp
OgorICAgICAgICAqIFNoYXJlZC9OZXR3b3JrL0N1c3RvbVByb3RvY29scy9zb3VwL1dlYktpdFNv
dXBSZXF1ZXN0R2VuZXJpYy5oOiBSZW5hbWVkIGZyb20gU291cmNlL1dlYktpdDIvV2ViUHJvY2Vz
cy9zb3VwL1dlYktpdFNvdXBSZXF1ZXN0R2VuZXJpYy5oLgorICAgICAgICAqIFNoYXJlZC9OZXR3
b3JrL0N1c3RvbVByb3RvY29scy9zb3VwL1dlYktpdFNvdXBSZXF1ZXN0SW5wdXRTdHJlYW0uY3Bw
OiBSZW5hbWVkIGZyb20gU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9zb3VwL1dlYktpdFNvdXBS
ZXF1ZXN0SW5wdXRTdHJlYW0uY3BwLgorICAgICAgICAoQXN5bmNSZWFkRGF0YTo6QXN5bmNSZWFk
RGF0YSk6CisgICAgICAgICh3ZWJraXRTb3VwUmVxdWVzdElucHV0U3RyZWFtUmVhZEFzeW5jUmVz
dWx0Q29tcGxldGUpOgorICAgICAgICAod2Via2l0U291cFJlcXVlc3RJbnB1dFN0cmVhbVBlbmRp
bmdSZWFkQXN5bmNDb21wbGV0ZSk6CisgICAgICAgICh3ZWJraXRTb3VwUmVxdWVzdElucHV0U3Ry
ZWFtSGFzRGF0YVRvUmVhZCk6CisgICAgICAgICh3ZWJraXRTb3VwUmVxdWVzdElucHV0U3RyZWFt
SXNXYWl0aW5nRm9yRGF0YSk6CisgICAgICAgICh3ZWJraXRTb3VwUmVxdWVzdElucHV0U3RyZWFt
UmVhZEFzeW5jKToKKyAgICAgICAgKHdlYmtpdFNvdXBSZXF1ZXN0SW5wdXRTdHJlYW1SZWFkRmlu
aXNoKToKKyAgICAgICAgKHdlYmtpdFNvdXBSZXF1ZXN0SW5wdXRTdHJlYW1GaW5hbGl6ZSk6Cisg
ICAgICAgICh3ZWJraXRfc291cF9yZXF1ZXN0X2lucHV0X3N0cmVhbV9pbml0KToKKyAgICAgICAg
KHdlYmtpdF9zb3VwX3JlcXVlc3RfaW5wdXRfc3RyZWFtX2NsYXNzX2luaXQpOgorICAgICAgICAo
d2Via2l0U291cFJlcXVlc3RJbnB1dFN0cmVhbU5ldyk6CisgICAgICAgICh3ZWJraXRTb3VwUmVx
dWVzdElucHV0U3RyZWFtQWRkRGF0YSk6CisgICAgICAgICh3ZWJraXRTb3VwUmVxdWVzdElucHV0
U3RyZWFtRmluaXNoZWQpOgorICAgICAgICAqIFNoYXJlZC9OZXR3b3JrL0N1c3RvbVByb3RvY29s
cy9zb3VwL1dlYktpdFNvdXBSZXF1ZXN0SW5wdXRTdHJlYW0uaDogUmVuYW1lZCBmcm9tIFNvdXJj
ZS9XZWJLaXQyL1dlYlByb2Nlc3Mvc291cC9XZWJLaXRTb3VwUmVxdWVzdElucHV0U3RyZWFtLmgu
CisKIDIwMTQtMDMtMTQgIEFsZXhleSBQcm9za3VyeWFrb3YgIDxhcEBhcHBsZS5jb20+CiAKICAg
ICAgICAgW01hY10gU3luYyBleHRlbmRlZCBhdHRyaWJ1dGUgcmVsYXRlZCBydWxlcyB3aXRoIEFw
cFNhbmRib3ggcHJvZmlsZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvUGxhdGZvcm1HVEsu
Y21ha2UgYi9Tb3VyY2UvV2ViS2l0Mi9QbGF0Zm9ybUdUSy5jbWFrZQppbmRleCAyNGRjYmE4OGY1
NDg0OTMwZjAyZGE3OTI0MjUxMjI1YWUwMzMxMzA0Li5jNzU0NGY0ODBhODA3NWI1NjQ3MTM2Yzky
NmMzY2IxMjIyM2ViYjE4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9QbGF0Zm9ybUdUSy5j
bWFrZQorKysgYi9Tb3VyY2UvV2ViS2l0Mi9QbGF0Zm9ybUdUSy5jbWFrZQpAQCAtNDgsNiArNDgs
OCBAQCBsaXN0KEFQUEVORCBXZWJLaXQyX1NPVVJDRVMKIAogICAgIFNoYXJlZC9OZXR3b3JrL0N1
c3RvbVByb3RvY29scy9zb3VwL0N1c3RvbVByb3RvY29sTWFuYWdlckltcGwuY3BwCiAgICAgU2hh
cmVkL05ldHdvcmsvQ3VzdG9tUHJvdG9jb2xzL3NvdXAvQ3VzdG9tUHJvdG9jb2xNYW5hZ2VyU291
cC5jcHAKKyAgICBTaGFyZWQvTmV0d29yay9DdXN0b21Qcm90b2NvbHMvc291cC9XZWJLaXRTb3Vw
UmVxdWVzdEdlbmVyaWMuY3BwCisgICAgU2hhcmVkL05ldHdvcmsvQ3VzdG9tUHJvdG9jb2xzL3Nv
dXAvV2ViS2l0U291cFJlcXVlc3RJbnB1dFN0cmVhbS5jcHAKIAogICAgIFNoYXJlZC9QbHVnaW5z
L05ldHNjYXBlL3gxMS9OZXRzY2FwZVBsdWdpbk1vZHVsZVgxMS5jcHAKIApAQCAtMzEwLDggKzMx
Miw2IEBAIGxpc3QoQVBQRU5EIFdlYktpdDJfU09VUkNFUwogICAgIFdlYlByb2Nlc3MvZ3RrL1dl
Ykd0a0luamVjdGVkQnVuZGxlTWFpbi5jcHAKICAgICBXZWJQcm9jZXNzL2d0ay9XZWJQcm9jZXNz
TWFpbkd0ay5jcHAKIAotICAgIFdlYlByb2Nlc3Mvc291cC9XZWJLaXRTb3VwUmVxdWVzdEdlbmVy
aWMuY3BwCi0gICAgV2ViUHJvY2Vzcy9zb3VwL1dlYktpdFNvdXBSZXF1ZXN0SW5wdXRTdHJlYW0u
Y3BwCiAgICAgV2ViUHJvY2Vzcy9zb3VwL1dlYlByb2Nlc3NTb3VwLmNwcAogKQogCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvTmV0d29yay9DdXN0b21Qcm90b2NvbHMvc291cC9X
ZWJLaXRTb3VwUmVxdWVzdEdlbmVyaWMuY3BwIGIvU291cmNlL1dlYktpdDIvU2hhcmVkL05ldHdv
cmsvQ3VzdG9tUHJvdG9jb2xzL3NvdXAvV2ViS2l0U291cFJlcXVlc3RHZW5lcmljLmNwcApuZXcg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwLi41NWM1MDM3NWEwYzNlM2JmMGNmOGE1NTIzY2UxNTZlNTg4NjQ0M2UzCi0tLSAvZGV2
L251bGwKKysrIGIvU291cmNlL1dlYktpdDIvU2hhcmVkL05ldHdvcmsvQ3VzdG9tUHJvdG9jb2xz
L3NvdXAvV2ViS2l0U291cFJlcXVlc3RHZW5lcmljLmNwcApAQCAtMCwwICsxLDEwNyBAQAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAxMiBJZ2FsaWEgUy5MLgorICoKKyAqIFRoaXMgbGlicmFyeSBp
cyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlm
eSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisg
KiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBl
aXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBh
bnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4g
dGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJS
QU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFC
SUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQor
ICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgor
ICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2Vu
ZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUg
ZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJl
IEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBC
b3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisj
aW5jbHVkZSAiV2ViS2l0U291cFJlcXVlc3RHZW5lcmljLmgiCisKKyNpbmNsdWRlIDx3dGYvdGV4
dC9DU3RyaW5nLmg+CisKKyNpZiAhRU5BQkxFKENVU1RPTV9QUk9UT0NPTFMpCisjaW5jbHVkZSAi
V2ViUHJvY2Vzcy5oIgorI2luY2x1ZGUgIldlYlNvdXBSZXF1ZXN0TWFuYWdlci5oIgorI2VuZGlm
CisKK3VzaW5nIG5hbWVzcGFjZSBXZWJLaXQ7CisKK0dfREVGSU5FX1RZUEUoV2ViS2l0U291cFJl
cXVlc3RHZW5lcmljLCB3ZWJraXRfc291cF9yZXF1ZXN0X2dlbmVyaWMsIFNPVVBfVFlQRV9SRVFV
RVNUKQorCitzdHJ1Y3QgX1dlYktpdFNvdXBSZXF1ZXN0R2VuZXJpY1ByaXZhdGUgeworICAgIENT
dHJpbmcgbWltZVR5cGU7CisgICAgZ29mZnNldCBjb250ZW50TGVuZ3RoOworfTsKKworc3RhdGlj
IHZvaWQgd2Via2l0U291cFJlcXVlc3RHZW5lcmljRmluYWxpemUoR09iamVjdCogb2JqZWN0KQor
eworICAgIFdFQktJVF9TT1VQX1JFUVVFU1RfR0VORVJJQyhvYmplY3QpLT5wcml2LT5+V2ViS2l0
U291cFJlcXVlc3RHZW5lcmljUHJpdmF0ZSgpOworICAgIEdfT0JKRUNUX0NMQVNTKHdlYmtpdF9z
b3VwX3JlcXVlc3RfZ2VuZXJpY19wYXJlbnRfY2xhc3MpLT5maW5hbGl6ZShvYmplY3QpOworfQor
CitzdGF0aWMgdm9pZCB3ZWJraXRfc291cF9yZXF1ZXN0X2dlbmVyaWNfaW5pdChXZWJLaXRTb3Vw
UmVxdWVzdEdlbmVyaWMqIHJlcXVlc3QpCit7CisgICAgV2ViS2l0U291cFJlcXVlc3RHZW5lcmlj
UHJpdmF0ZSogcHJpdiA9IEdfVFlQRV9JTlNUQU5DRV9HRVRfUFJJVkFURShyZXF1ZXN0LCBXRUJL
SVRfVFlQRV9TT1VQX1JFUVVFU1RfR0VORVJJQywgV2ViS2l0U291cFJlcXVlc3RHZW5lcmljUHJp
dmF0ZSk7CisgICAgcmVxdWVzdC0+cHJpdiA9IHByaXY7CisgICAgbmV3IChwcml2KSBXZWJLaXRT
b3VwUmVxdWVzdEdlbmVyaWNQcml2YXRlKCk7Cit9CisKK3N0YXRpYyB2b2lkIHdlYmtpdFNvdXBS
ZXF1ZXN0R2VuZXJpY1NlbmRBc3luYyhTb3VwUmVxdWVzdCogcmVxdWVzdCwgR0NhbmNlbGxhYmxl
KiBjYW5jZWxsYWJsZSwgR0FzeW5jUmVhZHlDYWxsYmFjayBjYWxsYmFjaywgZ3BvaW50ZXIgdXNl
ckRhdGEpCit7CisjaWYgRU5BQkxFKENVU1RPTV9QUk9UT0NPTFMpCisgICAgQ3VzdG9tUHJvdG9j
b2xNYW5hZ2VySW1wbCogY3VzdG9tUHJvdG9jb2xNYW5hZ2VyID0gV0VCS0lUX1NPVVBfUkVRVUVT
VF9HRU5FUklDX0dFVF9DTEFTUyhyZXF1ZXN0KS0+Y3VzdG9tUHJvdG9jb2xNYW5hZ2VyOworICAg
IEFTU0VSVChjdXN0b21Qcm90b2NvbE1hbmFnZXIpOworICAgIGN1c3RvbVByb3RvY29sTWFuYWdl
ci0+c2VuZChnX3Rhc2tfbmV3KHJlcXVlc3QsIGNhbmNlbGxhYmxlLCBjYWxsYmFjaywgdXNlckRh
dGEpKTsKKyNlbHNlCisgICAgV2ViUHJvY2Vzczo6c2hhcmVkKCkuc3VwcGxlbWVudDxXZWJTb3Vw
UmVxdWVzdE1hbmFnZXI+KCktPnNlbmQoZ190YXNrX25ldyhyZXF1ZXN0LCBjYW5jZWxsYWJsZSwg
Y2FsbGJhY2ssIHVzZXJEYXRhKSk7CisjZW5kaWYKK30KKworc3RhdGljIEdJbnB1dFN0cmVhbSog
d2Via2l0U291cFJlcXVlc3RHZW5lcmljU2VuZEZpbmlzaChTb3VwUmVxdWVzdCogcmVxdWVzdCwg
R0FzeW5jUmVzdWx0KiByZXN1bHQsIEdFcnJvcioqIGVycm9yKQoreworICAgIGdfcmV0dXJuX3Zh
bF9pZl9mYWlsKGdfdGFza19pc192YWxpZChyZXN1bHQsIHJlcXVlc3QpLCAwKTsKKyNpZiBFTkFC
TEUoQ1VTVE9NX1BST1RPQ09MUykKKyAgICBDdXN0b21Qcm90b2NvbE1hbmFnZXJJbXBsKiBjdXN0
b21Qcm90b2NvbE1hbmFnZXIgPSBXRUJLSVRfU09VUF9SRVFVRVNUX0dFTkVSSUNfR0VUX0NMQVNT
KHJlcXVlc3QpLT5jdXN0b21Qcm90b2NvbE1hbmFnZXI7CisgICAgQVNTRVJUKGN1c3RvbVByb3Rv
Y29sTWFuYWdlcik7CisgICAgcmV0dXJuIGN1c3RvbVByb3RvY29sTWFuYWdlci0+ZmluaXNoKEdf
VEFTSyhyZXN1bHQpLCBlcnJvcik7CisjZWxzZQorICAgIHJldHVybiBXZWJQcm9jZXNzOjpzaGFy
ZWQoKS5zdXBwbGVtZW50PFdlYlNvdXBSZXF1ZXN0TWFuYWdlcj4oKS0+ZmluaXNoKEdfVEFTSyhy
ZXN1bHQpLCBlcnJvcik7CisjZW5kaWYKK30KKworc3RhdGljIGdvZmZzZXQgd2Via2l0U291cFJl
cXVlc3RHZW5lcmljR2V0Q29udGVudExlbmd0aChTb3VwUmVxdWVzdCogcmVxdWVzdCkKK3sKKyAg
ICByZXR1cm4gV0VCS0lUX1NPVVBfUkVRVUVTVF9HRU5FUklDKHJlcXVlc3QpLT5wcml2LT5jb250
ZW50TGVuZ3RoOworfQorCitzdGF0aWMgY29uc3QgY2hhciogd2Via2l0U291cFJlcXVlc3RHZW5l
cmljR2V0Q29udGVudFR5cGUoU291cFJlcXVlc3QqIHJlcXVlc3QpCit7CisgICAgcmV0dXJuIFdF
QktJVF9TT1VQX1JFUVVFU1RfR0VORVJJQyhyZXF1ZXN0KS0+cHJpdi0+bWltZVR5cGUuZGF0YSgp
OworfQorCitzdGF0aWMgdm9pZCB3ZWJraXRfc291cF9yZXF1ZXN0X2dlbmVyaWNfY2xhc3NfaW5p
dChXZWJLaXRTb3VwUmVxdWVzdEdlbmVyaWNDbGFzcyogcmVxdWVzdEdlbmVyaWNDbGFzcykKK3sK
KyAgICBHT2JqZWN0Q2xhc3MqIGdPYmplY3RDbGFzcyA9IEdfT0JKRUNUX0NMQVNTKHJlcXVlc3RH
ZW5lcmljQ2xhc3MpOworICAgIGdPYmplY3RDbGFzcy0+ZmluYWxpemUgPSB3ZWJraXRTb3VwUmVx
dWVzdEdlbmVyaWNGaW5hbGl6ZTsKKworICAgIFNvdXBSZXF1ZXN0Q2xhc3MqIHJlcXVlc3RDbGFz
cyA9IFNPVVBfUkVRVUVTVF9DTEFTUyhyZXF1ZXN0R2VuZXJpY0NsYXNzKTsKKyAgICByZXF1ZXN0
Q2xhc3MtPnNlbmRfYXN5bmMgPSB3ZWJraXRTb3VwUmVxdWVzdEdlbmVyaWNTZW5kQXN5bmM7Cisg
ICAgcmVxdWVzdENsYXNzLT5zZW5kX2ZpbmlzaCA9IHdlYmtpdFNvdXBSZXF1ZXN0R2VuZXJpY1Nl
bmRGaW5pc2g7CisgICAgcmVxdWVzdENsYXNzLT5nZXRfY29udGVudF9sZW5ndGggPSB3ZWJraXRT
b3VwUmVxdWVzdEdlbmVyaWNHZXRDb250ZW50TGVuZ3RoOworICAgIHJlcXVlc3RDbGFzcy0+Z2V0
X2NvbnRlbnRfdHlwZSA9IHdlYmtpdFNvdXBSZXF1ZXN0R2VuZXJpY0dldENvbnRlbnRUeXBlOwor
CisgICAgZ190eXBlX2NsYXNzX2FkZF9wcml2YXRlKHJlcXVlc3RHZW5lcmljQ2xhc3MsIHNpemVv
ZihXZWJLaXRTb3VwUmVxdWVzdEdlbmVyaWNQcml2YXRlKSk7Cit9CisKK3ZvaWQgd2Via2l0U291
cFJlcXVlc3RHZW5lcmljU2V0Q29udGVudExlbmd0aChXZWJLaXRTb3VwUmVxdWVzdEdlbmVyaWMq
IHJlcXVlc3QsIGdvZmZzZXQgY29udGVudExlbmd0aCkKK3sKKyAgICByZXF1ZXN0LT5wcml2LT5j
b250ZW50TGVuZ3RoID0gY29udGVudExlbmd0aDsKK30KKwordm9pZCB3ZWJraXRTb3VwUmVxdWVz
dEdlbmVyaWNTZXRDb250ZW50VHlwZShXZWJLaXRTb3VwUmVxdWVzdEdlbmVyaWMqIHJlcXVlc3Qs
IGNvbnN0IGNoYXIqIG1pbWVUeXBlKQoreworICAgIHJlcXVlc3QtPnByaXYtPm1pbWVUeXBlID0g
bWltZVR5cGU7Cit9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvTmV0d29yay9D
dXN0b21Qcm90b2NvbHMvc291cC9XZWJLaXRTb3VwUmVxdWVzdEdlbmVyaWMuaCBiL1NvdXJjZS9X
ZWJLaXQyL1NoYXJlZC9OZXR3b3JrL0N1c3RvbVByb3RvY29scy9zb3VwL1dlYktpdFNvdXBSZXF1
ZXN0R2VuZXJpYy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjVjNWQzYWQyZDUxMTY4NDdjOTcxZDNkOTFjNmVjNWY3
N2E1NDRlYjQKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvTmV0d29y
ay9DdXN0b21Qcm90b2NvbHMvc291cC9XZWJLaXRTb3VwUmVxdWVzdEdlbmVyaWMuaApAQCAtMCww
ICsxLDY0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyIElnYWxpYSBTLkwuCisgKgorICog
VGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFu
ZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2Vu
ZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJl
IEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQg
eW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBk
aXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJ
VEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YK
KyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4g
IFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUg
ZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBH
TlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGli
cmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhl
IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0
aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpZm5kZWYg
V2ViS2l0U291cFJlcXVlc3RHZW5lcmljX2gKKyNkZWZpbmUgV2ViS2l0U291cFJlcXVlc3RHZW5l
cmljX2gKKworI2luY2x1ZGUgPGdsaWItb2JqZWN0Lmg+CisjaW5jbHVkZSA8bGlic291cC9zb3Vw
Lmg+CisKKyNpZiBFTkFCTEUoQ1VTVE9NX1BST1RPQ09MUykKKyNpbmNsdWRlICJDdXN0b21Qcm90
b2NvbE1hbmFnZXJJbXBsLmgiCisjZW5kaWYKKworR19CRUdJTl9ERUNMUworCisjZGVmaW5lIFdF
QktJVF9UWVBFX1NPVVBfUkVRVUVTVF9HRU5FUklDICAgICAgICAgICAgKHdlYmtpdF9zb3VwX3Jl
cXVlc3RfZ2VuZXJpY19nZXRfdHlwZSgpKQorI2RlZmluZSBXRUJLSVRfU09VUF9SRVFVRVNUX0dF
TkVSSUMob2JqZWN0KSAgICAgICAgIChHX1RZUEVfQ0hFQ0tfSU5TVEFOQ0VfQ0FTVCgob2JqZWN0
KSwgV0VCS0lUX1RZUEVfU09VUF9SRVFVRVNUX0dFTkVSSUMsIFdlYktpdFNvdXBSZXF1ZXN0R2Vu
ZXJpYykpCisjZGVmaW5lIFdFQktJVF9JU19TT1VQX1JFUVVFU1RfR0VORVJJQyhvYmplY3QpICAg
ICAgKEdfVFlQRV9DSEVDS19JTlNUQU5DRV9UWVBFKChvYmplY3QpLCBXRUJLSVRfVFlQRV9TT1VQ
X1JFUVVFU1RfR0VORVJJQykpCisjZGVmaW5lIFdFQktJVF9TT1VQX1JFUVVFU1RfR0VORVJJQ19D
TEFTUyhrbGFzcykgICAgKEdfVFlQRV9DSEVDS19DTEFTU19DQVNUKChrbGFzcyksIFdFQktJVF9U
WVBFX1NPVVBfUkVRVUVTVF9HRU5FUklDLCBXZWJLaXRTb3VwUmVxdWVzdEdlbmVyaWNDbGFzcykp
CisjZGVmaW5lIFdFQktJVF9JU19TT1VQX1JFUVVFU1RfR0VORVJJQ19DTEFTUyhrbGFzcykgKEdf
VFlQRV9DSEVDS19DTEFTU19UWVBFKChrbGFzcyksIFdFQktJVF9UWVBFX1NPVVBfUkVRVUVTVF9H
RU5FUklDKSkKKyNkZWZpbmUgV0VCS0lUX1NPVVBfUkVRVUVTVF9HRU5FUklDX0dFVF9DTEFTUyhv
YmopICAoR19UWVBFX0lOU1RBTkNFX0dFVF9DTEFTUygob2JqKSwgV0VCS0lUX1RZUEVfU09VUF9S
RVFVRVNUX0dFTkVSSUMsIFdlYktpdFNvdXBSZXF1ZXN0R2VuZXJpY0NsYXNzKSkKKwordHlwZWRl
ZiBzdHJ1Y3QgX1dlYktpdFNvdXBSZXF1ZXN0R2VuZXJpYyBXZWJLaXRTb3VwUmVxdWVzdEdlbmVy
aWM7Cit0eXBlZGVmIHN0cnVjdCBfV2ViS2l0U291cFJlcXVlc3RHZW5lcmljQ2xhc3MgV2ViS2l0
U291cFJlcXVlc3RHZW5lcmljQ2xhc3M7Cit0eXBlZGVmIHN0cnVjdCBfV2ViS2l0U291cFJlcXVl
c3RHZW5lcmljUHJpdmF0ZSBXZWJLaXRTb3VwUmVxdWVzdEdlbmVyaWNQcml2YXRlOworCitzdHJ1
Y3QgX1dlYktpdFNvdXBSZXF1ZXN0R2VuZXJpYyB7CisgICAgU291cFJlcXVlc3QgcGFyZW50Owor
CisgICAgV2ViS2l0U291cFJlcXVlc3RHZW5lcmljUHJpdmF0ZSAqcHJpdjsKK307CisKK3N0cnVj
dCBfV2ViS2l0U291cFJlcXVlc3RHZW5lcmljQ2xhc3MgeworICAgIFNvdXBSZXF1ZXN0Q2xhc3Mg
cGFyZW50OworCisjaWYgRU5BQkxFKENVU1RPTV9QUk9UT0NPTFMpCisgICAgV2ViS2l0OjpDdXN0
b21Qcm90b2NvbE1hbmFnZXJJbXBsKiBjdXN0b21Qcm90b2NvbE1hbmFnZXI7CisjZW5kaWYKK307
CisKK0dUeXBlIHdlYmtpdF9zb3VwX3JlcXVlc3RfZ2VuZXJpY19nZXRfdHlwZSgpOworCit2b2lk
IHdlYmtpdFNvdXBSZXF1ZXN0R2VuZXJpY1NldENvbnRlbnRMZW5ndGgoV2ViS2l0U291cFJlcXVl
c3RHZW5lcmljKiwgZ29mZnNldCBjb250ZW50TGVuZ3RoKTsKK3ZvaWQgd2Via2l0U291cFJlcXVl
c3RHZW5lcmljU2V0Q29udGVudFR5cGUoV2ViS2l0U291cFJlcXVlc3RHZW5lcmljKiwgY29uc3Qg
Y2hhciogbWltZVR5cGUpOworCitHX0VORF9ERUNMUworCisjZW5kaWYgLy8gV2ViS2l0U291cFJl
cXVlc3RHZW5lcmljX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9OZXR3b3Jr
L0N1c3RvbVByb3RvY29scy9zb3VwL1dlYktpdFNvdXBSZXF1ZXN0SW5wdXRTdHJlYW0uY3BwIGIv
U291cmNlL1dlYktpdDIvU2hhcmVkL05ldHdvcmsvQ3VzdG9tUHJvdG9jb2xzL3NvdXAvV2ViS2l0
U291cFJlcXVlc3RJbnB1dFN0cmVhbS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uODUyYTU4NWQ2ZDQyYWIxZmE2
ZTU5YjE5MTRiODdjMGUwMzA4OWFiOAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQy
L1NoYXJlZC9OZXR3b3JrL0N1c3RvbVByb3RvY29scy9zb3VwL1dlYktpdFNvdXBSZXF1ZXN0SW5w
dXRTdHJlYW0uY3BwCkBAIC0wLDAgKzEsMTc0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEy
IElnYWxpYSBTLkwuCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBj
YW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBv
ZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVk
IGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9m
IHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoK
KyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwg
YmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhl
IGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVi
bGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVj
ZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisg
KiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYg
bm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEg
RnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwg
VVNBLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJXZWJLaXRTb3VwUmVx
dWVzdElucHV0U3RyZWFtLmgiCisKKyNpbmNsdWRlIDx3dGYvT3duUHRyLmg+CisjaW5jbHVkZSA8
d3RmL1Bhc3NPd25QdHIuaD4KKyNpbmNsdWRlIDx3dGYvVGhyZWFkaW5nLmg+CisjaW5jbHVkZSA8
d3RmL2dvYmplY3QvR1JlZlB0ci5oPgorCitzdHJ1Y3QgQXN5bmNSZWFkRGF0YSB7CisgICAgQXN5
bmNSZWFkRGF0YShHU2ltcGxlQXN5bmNSZXN1bHQqIHJlc3VsdCwgdm9pZCogYnVmZmVyLCBnc2l6
ZSBjb3VudCwgR0NhbmNlbGxhYmxlKiBjYW5jZWxsYWJsZSkKKyAgICAgICAgOiByZXN1bHQocmVz
dWx0KQorICAgICAgICAsIGJ1ZmZlcihidWZmZXIpCisgICAgICAgICwgY291bnQoY291bnQpCisg
ICAgICAgICwgY2FuY2VsbGFibGUoY2FuY2VsbGFibGUpCisgICAgeworICAgIH0KKworICAgIEdS
ZWZQdHI8R1NpbXBsZUFzeW5jUmVzdWx0PiByZXN1bHQ7CisgICAgdm9pZCogYnVmZmVyOworICAg
IHNpemVfdCBjb3VudDsKKyAgICBHUmVmUHRyPEdDYW5jZWxsYWJsZT4gY2FuY2VsbGFibGU7Cit9
OworCitzdHJ1Y3QgX1dlYktpdFNvdXBSZXF1ZXN0SW5wdXRTdHJlYW1Qcml2YXRlIHsKKyAgICB1
aW50NjRfdCBjb250ZW50TGVuZ3RoOworICAgIHVpbnQ2NF90IGJ5dGVzUmVjZWl2ZWQ7CisgICAg
dWludDY0X3QgYnl0ZXNSZWFkOworCisgICAgTXV0ZXggcmVhZExvY2s7CisgICAgT3duUHRyPEFz
eW5jUmVhZERhdGE+IHBlbmRpbmdBc3luY1JlYWQ7Cit9OworCitHX0RFRklORV9UWVBFKFdlYktp
dFNvdXBSZXF1ZXN0SW5wdXRTdHJlYW0sIHdlYmtpdF9zb3VwX3JlcXVlc3RfaW5wdXRfc3RyZWFt
LCBHX1RZUEVfTUVNT1JZX0lOUFVUX1NUUkVBTSkKKworc3RhdGljIHZvaWQgd2Via2l0U291cFJl
cXVlc3RJbnB1dFN0cmVhbVJlYWRBc3luY1Jlc3VsdENvbXBsZXRlKFdlYktpdFNvdXBSZXF1ZXN0
SW5wdXRTdHJlYW0qIHN0cmVhbSwgR1NpbXBsZUFzeW5jUmVzdWx0KiByZXN1bHQsIHZvaWQqIGJ1
ZmZlciwgZ3NpemUgY291bnQsIEdDYW5jZWxsYWJsZSogY2FuY2VsbGFibGUpCit7CisgICAgR0Vy
cm9yKiBlcnJvciA9IDA7CisgICAgZ3NzaXplIGJ5dGVzUmVhZCA9IEdfSU5QVVRfU1RSRUFNX0dF
VF9DTEFTUyhzdHJlYW0pLT5yZWFkX2ZuKEdfSU5QVVRfU1RSRUFNKHN0cmVhbSksIGJ1ZmZlciwg
Y291bnQsIGNhbmNlbGxhYmxlLCAmZXJyb3IpOworICAgIGlmICghZXJyb3IpIHsKKyAgICAgICAg
Z19zaW1wbGVfYXN5bmNfcmVzdWx0X3NldF9vcF9yZXNfZ3NzaXplKHJlc3VsdCwgYnl0ZXNSZWFk
KTsKKyAgICAgICAgc3RyZWFtLT5wcml2LT5ieXRlc1JlYWQgKz0gYnl0ZXNSZWFkOworICAgIH0g
ZWxzZQorICAgICAgICBnX3NpbXBsZV9hc3luY19yZXN1bHRfdGFrZV9lcnJvcihyZXN1bHQsIGVy
cm9yKTsKKyAgICBnX3NpbXBsZV9hc3luY19yZXN1bHRfY29tcGxldGVfaW5faWRsZShyZXN1bHQp
OworfQorCitzdGF0aWMgdm9pZCB3ZWJraXRTb3VwUmVxdWVzdElucHV0U3RyZWFtUGVuZGluZ1Jl
YWRBc3luY0NvbXBsZXRlKFdlYktpdFNvdXBSZXF1ZXN0SW5wdXRTdHJlYW0qIHN0cmVhbSkKK3sK
KyAgICBpZiAoIXN0cmVhbS0+cHJpdi0+cGVuZGluZ0FzeW5jUmVhZCkKKyAgICAgICAgcmV0dXJu
OworCisgICAgQXN5bmNSZWFkRGF0YSogZGF0YSA9IHN0cmVhbS0+cHJpdi0+cGVuZGluZ0FzeW5j
UmVhZC5nZXQoKTsKKyAgICB3ZWJraXRTb3VwUmVxdWVzdElucHV0U3RyZWFtUmVhZEFzeW5jUmVz
dWx0Q29tcGxldGUoc3RyZWFtLCBkYXRhLT5yZXN1bHQuZ2V0KCksIGRhdGEtPmJ1ZmZlciwgZGF0
YS0+Y291bnQsIGRhdGEtPmNhbmNlbGxhYmxlLmdldCgpKTsKKyAgICBzdHJlYW0tPnByaXYtPnBl
bmRpbmdBc3luY1JlYWQuY2xlYXIoKTsKK30KKworc3RhdGljIGJvb2wgd2Via2l0U291cFJlcXVl
c3RJbnB1dFN0cmVhbUhhc0RhdGFUb1JlYWQoV2ViS2l0U291cFJlcXVlc3RJbnB1dFN0cmVhbSog
c3RyZWFtKQoreworICAgIHJldHVybiBzdHJlYW0tPnByaXYtPmJ5dGVzUmVhZCA8IHN0cmVhbS0+
cHJpdi0+Ynl0ZXNSZWNlaXZlZDsKK30KKworc3RhdGljIGJvb2wgd2Via2l0U291cFJlcXVlc3RJ
bnB1dFN0cmVhbUlzV2FpdGluZ0ZvckRhdGEoV2ViS2l0U291cFJlcXVlc3RJbnB1dFN0cmVhbSog
c3RyZWFtKQoreworICAgIHJldHVybiAhc3RyZWFtLT5wcml2LT5jb250ZW50TGVuZ3RoIHx8IHN0
cmVhbS0+cHJpdi0+Ynl0ZXNSZWNlaXZlZCA8IHN0cmVhbS0+cHJpdi0+Y29udGVudExlbmd0aDsK
K30KKworc3RhdGljIHZvaWQgd2Via2l0U291cFJlcXVlc3RJbnB1dFN0cmVhbVJlYWRBc3luYyhH
SW5wdXRTdHJlYW0qIGlucHV0U3RyZWFtLCB2b2lkKiBidWZmZXIsIGdzaXplIGNvdW50LCBpbnQg
Lypwcmlvcml0eSovLCBHQ2FuY2VsbGFibGUqIGNhbmNlbGxhYmxlLCBHQXN5bmNSZWFkeUNhbGxi
YWNrIGNhbGxiYWNrLCBncG9pbnRlciB1c2VyRGF0YSkKK3sKKyAgICBXZWJLaXRTb3VwUmVxdWVz
dElucHV0U3RyZWFtKiBzdHJlYW0gPSBXRUJLSVRfU09VUF9SRVFVRVNUX0lOUFVUX1NUUkVBTShp
bnB1dFN0cmVhbSk7CisgICAgR1JlZlB0cjxHU2ltcGxlQXN5bmNSZXN1bHQ+IHJlc3VsdCA9IGFk
b3B0R1JlZihnX3NpbXBsZV9hc3luY19yZXN1bHRfbmV3KEdfT0JKRUNUKHN0cmVhbSksIGNhbGxi
YWNrLCB1c2VyRGF0YSwgcmVpbnRlcnByZXRfY2FzdDx2b2lkKj4od2Via2l0U291cFJlcXVlc3RJ
bnB1dFN0cmVhbVJlYWRBc3luYykpKTsKKworICAgIE11dGV4TG9ja2VyIGxvY2tlcihzdHJlYW0t
PnByaXYtPnJlYWRMb2NrKTsKKworICAgIGlmICghd2Via2l0U291cFJlcXVlc3RJbnB1dFN0cmVh
bUhhc0RhdGFUb1JlYWQoc3RyZWFtKSAmJiAhd2Via2l0U291cFJlcXVlc3RJbnB1dFN0cmVhbUlz
V2FpdGluZ0ZvckRhdGEoc3RyZWFtKSkgeworICAgICAgICBnX3NpbXBsZV9hc3luY19yZXN1bHRf
c2V0X29wX3Jlc19nc3NpemUocmVzdWx0LmdldCgpLCAwKTsKKyAgICAgICAgZ19zaW1wbGVfYXN5
bmNfcmVzdWx0X2NvbXBsZXRlX2luX2lkbGUocmVzdWx0LmdldCgpKTsKKyAgICAgICAgcmV0dXJu
OworICAgIH0KKworICAgIGlmICh3ZWJraXRTb3VwUmVxdWVzdElucHV0U3RyZWFtSGFzRGF0YVRv
UmVhZChzdHJlYW0pKSB7CisgICAgICAgIHdlYmtpdFNvdXBSZXF1ZXN0SW5wdXRTdHJlYW1SZWFk
QXN5bmNSZXN1bHRDb21wbGV0ZShzdHJlYW0sIHJlc3VsdC5nZXQoKSwgYnVmZmVyLCBjb3VudCwg
Y2FuY2VsbGFibGUpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgc3RyZWFtLT5wcml2
LT5wZW5kaW5nQXN5bmNSZWFkID0gYWRvcHRQdHIobmV3IEFzeW5jUmVhZERhdGEocmVzdWx0Lmdl
dCgpLCBidWZmZXIsIGNvdW50LCBjYW5jZWxsYWJsZSkpOworfQorCitzdGF0aWMgZ3NzaXplIHdl
YmtpdFNvdXBSZXF1ZXN0SW5wdXRTdHJlYW1SZWFkRmluaXNoKEdJbnB1dFN0cmVhbSosIEdBc3lu
Y1Jlc3VsdCogcmVzdWx0LCBHRXJyb3IqKikKK3sKKyAgICBHU2ltcGxlQXN5bmNSZXN1bHQqIHNp
bXBsZVJlc3VsdCA9IEdfU0lNUExFX0FTWU5DX1JFU1VMVChyZXN1bHQpOworICAgIGdfd2Fybl9p
Zl9mYWlsKGdfc2ltcGxlX2FzeW5jX3Jlc3VsdF9nZXRfc291cmNlX3RhZyhzaW1wbGVSZXN1bHQp
ID09IHdlYmtpdFNvdXBSZXF1ZXN0SW5wdXRTdHJlYW1SZWFkQXN5bmMpOworCisgICAgcmV0dXJu
IGdfc2ltcGxlX2FzeW5jX3Jlc3VsdF9nZXRfb3BfcmVzX2dzc2l6ZShzaW1wbGVSZXN1bHQpOwor
fQorCitzdGF0aWMgdm9pZCB3ZWJraXRTb3VwUmVxdWVzdElucHV0U3RyZWFtRmluYWxpemUoR09i
amVjdCogb2JqZWN0KQoreworICAgIFdFQktJVF9TT1VQX1JFUVVFU1RfSU5QVVRfU1RSRUFNKG9i
amVjdCktPnByaXYtPn5XZWJLaXRTb3VwUmVxdWVzdElucHV0U3RyZWFtUHJpdmF0ZSgpOworICAg
IEdfT0JKRUNUX0NMQVNTKHdlYmtpdF9zb3VwX3JlcXVlc3RfaW5wdXRfc3RyZWFtX3BhcmVudF9j
bGFzcyktPmZpbmFsaXplKG9iamVjdCk7Cit9CisKK3N0YXRpYyB2b2lkIHdlYmtpdF9zb3VwX3Jl
cXVlc3RfaW5wdXRfc3RyZWFtX2luaXQoV2ViS2l0U291cFJlcXVlc3RJbnB1dFN0cmVhbSogc3Ry
ZWFtKQoreworICAgIFdlYktpdFNvdXBSZXF1ZXN0SW5wdXRTdHJlYW1Qcml2YXRlKiBwcml2ID0g
R19UWVBFX0lOU1RBTkNFX0dFVF9QUklWQVRFKHN0cmVhbSwgV0VCS0lUX1RZUEVfU09VUF9SRVFV
RVNUX0lOUFVUX1NUUkVBTSwgV2ViS2l0U291cFJlcXVlc3RJbnB1dFN0cmVhbVByaXZhdGUpOwor
ICAgIHN0cmVhbS0+cHJpdiA9IHByaXY7CisgICAgbmV3IChwcml2KSBXZWJLaXRTb3VwUmVxdWVz
dElucHV0U3RyZWFtUHJpdmF0ZSgpOworfQorCitzdGF0aWMgdm9pZCB3ZWJraXRfc291cF9yZXF1
ZXN0X2lucHV0X3N0cmVhbV9jbGFzc19pbml0KFdlYktpdFNvdXBSZXF1ZXN0SW5wdXRTdHJlYW1D
bGFzcyogcmVxdWVzdFN0cmVhbUNsYXNzKQoreworICAgIEdPYmplY3RDbGFzcyogZ09iamVjdENs
YXNzID0gR19PQkpFQ1RfQ0xBU1MocmVxdWVzdFN0cmVhbUNsYXNzKTsKKyAgICBnT2JqZWN0Q2xh
c3MtPmZpbmFsaXplID0gd2Via2l0U291cFJlcXVlc3RJbnB1dFN0cmVhbUZpbmFsaXplOworCisg
ICAgR0lucHV0U3RyZWFtQ2xhc3MqIGlucHV0U3RyZWFtQ2xhc3MgPSBHX0lOUFVUX1NUUkVBTV9D
TEFTUyhyZXF1ZXN0U3RyZWFtQ2xhc3MpOworICAgIGlucHV0U3RyZWFtQ2xhc3MtPnJlYWRfYXN5
bmMgPSB3ZWJraXRTb3VwUmVxdWVzdElucHV0U3RyZWFtUmVhZEFzeW5jOworICAgIGlucHV0U3Ry
ZWFtQ2xhc3MtPnJlYWRfZmluaXNoID0gd2Via2l0U291cFJlcXVlc3RJbnB1dFN0cmVhbVJlYWRG
aW5pc2g7CisKKyAgICBnX3R5cGVfY2xhc3NfYWRkX3ByaXZhdGUocmVxdWVzdFN0cmVhbUNsYXNz
LCBzaXplb2YoV2ViS2l0U291cFJlcXVlc3RJbnB1dFN0cmVhbVByaXZhdGUpKTsKK30KKworR0lu
cHV0U3RyZWFtKiB3ZWJraXRTb3VwUmVxdWVzdElucHV0U3RyZWFtTmV3KHVpbnQ2NF90IGNvbnRl
bnRMZW5ndGgpCit7CisgICAgV2ViS2l0U291cFJlcXVlc3RJbnB1dFN0cmVhbSogc3RyZWFtID0g
V0VCS0lUX1NPVVBfUkVRVUVTVF9JTlBVVF9TVFJFQU0oZ19vYmplY3RfbmV3KFdFQktJVF9UWVBF
X1NPVVBfUkVRVUVTVF9JTlBVVF9TVFJFQU0sIE5VTEwpKTsKKyAgICBzdHJlYW0tPnByaXYtPmNv
bnRlbnRMZW5ndGggPSBjb250ZW50TGVuZ3RoOworICAgIHJldHVybiBHX0lOUFVUX1NUUkVBTShz
dHJlYW0pOworfQorCit2b2lkIHdlYmtpdFNvdXBSZXF1ZXN0SW5wdXRTdHJlYW1BZGREYXRhKFdl
YktpdFNvdXBSZXF1ZXN0SW5wdXRTdHJlYW0qIHN0cmVhbSwgY29uc3Qgdm9pZCogZGF0YSwgc2l6
ZV90IGRhdGFMZW5ndGgpCit7CisgICAgaWYgKHdlYmtpdFNvdXBSZXF1ZXN0SW5wdXRTdHJlYW1G
aW5pc2hlZChzdHJlYW0pKQorICAgICAgICByZXR1cm47CisKKyAgICBNdXRleExvY2tlciBsb2Nr
ZXIoc3RyZWFtLT5wcml2LT5yZWFkTG9jayk7CisKKyAgICBpZiAoZGF0YUxlbmd0aCkgeworICAg
ICAgICAvLyBUcnVuY2F0ZSB0aGUgZGF0YUxlbmd0aCB0byB0aGUgY29udGVudExlbmd0aCBpZiBp
dCdzIGtub3duLgorICAgICAgICBpZiAoc3RyZWFtLT5wcml2LT5jb250ZW50TGVuZ3RoICYmIHN0
cmVhbS0+cHJpdi0+Ynl0ZXNSZWNlaXZlZCArIGRhdGFMZW5ndGggPiBzdHJlYW0tPnByaXYtPmNv
bnRlbnRMZW5ndGgpCisgICAgICAgICAgICBkYXRhTGVuZ3RoID0gc3RyZWFtLT5wcml2LT5jb250
ZW50TGVuZ3RoIC0gc3RyZWFtLT5wcml2LT5ieXRlc1JlY2VpdmVkOworICAgICAgICBzdHJlYW0t
PnByaXYtPmJ5dGVzUmVjZWl2ZWQgKz0gZGF0YUxlbmd0aDsKKyAgICAgICAgZ19tZW1vcnlfaW5w
dXRfc3RyZWFtX2FkZF9kYXRhKEdfTUVNT1JZX0lOUFVUX1NUUkVBTShzdHJlYW0pLCBnX21lbWR1
cChkYXRhLCBkYXRhTGVuZ3RoKSwgZGF0YUxlbmd0aCwgZ19mcmVlKTsKKyAgICB9IGVsc2Ugewor
ICAgICAgICAvLyBXZSBoYXZlIHJlY2VpdmVkIGFsbCB0aGUgZGF0YSwgc2V0IGNvbnRlbnRMZW5n
dGggdG8gYnl0ZXNSZWNlaXZlZCB0byBpbmRpY2F0ZSB3ZSBoYXZlIGZpbmlzaGVkLgorICAgICAg
ICBzdHJlYW0tPnByaXYtPmNvbnRlbnRMZW5ndGggPSBzdHJlYW0tPnByaXYtPmJ5dGVzUmVjZWl2
ZWQ7CisgICAgICAgIC8vIElmIHRoZXJlJ3MgYSBwZW5kaW5nIHJlYWQgdG8gY29tcGxldGUsIHJl
YWRfZm4gd2lsbCByZXR1cm4gMCBiZWNhdXNlIHdlIGhhdmVuJ3QgYWRkZWQgbW9yZSBkYXRhIHRv
IHRoZQorICAgICAgICAvLyBtZW1vcnkgaW5wdXQgc3RyZWFtLiBBbmQgaWYgdGhlcmUgaXNuJ3Qg
YSBwZW5kaW5nIHJlYWQsIHRoZSBuZXh0IGNhbGwgdG8gcmVhZF9hc3luYyB3aWxsIHJldHVybiAw
IHRvbywgYmVjYXVzZQorICAgICAgICAvLyB3ZWJraXRTb3VwUmVxdWVzdElucHV0U3RyZWFtRmlu
aXNoZWQoKSBpcyBub3cgVFJVRS4KKyAgICB9CisKKyAgICB3ZWJraXRTb3VwUmVxdWVzdElucHV0
U3RyZWFtUGVuZGluZ1JlYWRBc3luY0NvbXBsZXRlKHN0cmVhbSk7Cit9CisKK2Jvb2wgd2Via2l0
U291cFJlcXVlc3RJbnB1dFN0cmVhbUZpbmlzaGVkKFdlYktpdFNvdXBSZXF1ZXN0SW5wdXRTdHJl
YW0qIHN0cmVhbSkKK3sKKyAgICByZXR1cm4gIXdlYmtpdFNvdXBSZXF1ZXN0SW5wdXRTdHJlYW1J
c1dhaXRpbmdGb3JEYXRhKHN0cmVhbSk7Cit9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9T
aGFyZWQvTmV0d29yay9DdXN0b21Qcm90b2NvbHMvc291cC9XZWJLaXRTb3VwUmVxdWVzdElucHV0
U3RyZWFtLmggYi9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvTmV0d29yay9DdXN0b21Qcm90b2NvbHMv
c291cC9XZWJLaXRTb3VwUmVxdWVzdElucHV0U3RyZWFtLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYTNjNzAyMDhj
YzE0ZjRkY2RkYmNkOWM0YWM0YjVkOWY2Zjk0M2QzZAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJj
ZS9XZWJLaXQyL1NoYXJlZC9OZXR3b3JrL0N1c3RvbVByb3RvY29scy9zb3VwL1dlYktpdFNvdXBS
ZXF1ZXN0SW5wdXRTdHJlYW0uaApAQCAtMCwwICsxLDU1IEBACisvKgorICogQ29weXJpZ2h0IChD
KSAyMDEyIElnYWxpYSBTLkwuCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7
IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0
ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVi
bGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lv
biAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9u
LgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0
IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2
ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVy
YWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhh
dmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNl
bnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElC
LiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5j
LiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAt
MTMwMSwgVVNBLgorICovCisKKyNpZm5kZWYgV2ViS2l0U291cFJlcXVlc3RJbnB1dFN0cmVhbV9o
CisjZGVmaW5lIFdlYktpdFNvdXBSZXF1ZXN0SW5wdXRTdHJlYW1faAorCisjaW5jbHVkZSA8Z2lv
L2dpby5oPgorCitHX0JFR0lOX0RFQ0xTCisKKyNkZWZpbmUgV0VCS0lUX1RZUEVfU09VUF9SRVFV
RVNUX0lOUFVUX1NUUkVBTSAgICAgICAgICAgICh3ZWJraXRfc291cF9yZXF1ZXN0X2lucHV0X3N0
cmVhbV9nZXRfdHlwZSgpKQorI2RlZmluZSBXRUJLSVRfU09VUF9SRVFVRVNUX0lOUFVUX1NUUkVB
TShvYmplY3QpICAgICAgICAgKEdfVFlQRV9DSEVDS19JTlNUQU5DRV9DQVNUKChvYmplY3QpLCBX
RUJLSVRfVFlQRV9TT1VQX1JFUVVFU1RfSU5QVVRfU1RSRUFNLCBXZWJLaXRTb3VwUmVxdWVzdElu
cHV0U3RyZWFtKSkKKyNkZWZpbmUgV0VCS0lUX0lTX1NPVVBfUkVRVUVTVF9JTlBVVF9TVFJFQU0o
b2JqZWN0KSAgICAgIChHX1RZUEVfQ0hFQ0tfSU5TVEFOQ0VfVFlQRSgob2JqZWN0KSwgV0VCS0lU
X1RZUEVfU09VUF9SRVFVRVNUX0lOUFVUX1NUUkVBTSkpCisjZGVmaW5lIFdFQktJVF9TT1VQX1JF
UVVFU1RfSU5QVVRfU1RSRUFNX0NMQVNTKGtsYXNzKSAgICAoR19UWVBFX0NIRUNLX0NMQVNTX0NB
U1QoKGtsYXNzKSwgV0VCS0lUX1RZUEVfU09VUF9SRVFVRVNUX0lOUFVUX1NUUkVBTSwgV2ViS2l0
U291cFJlcXVlc3RJbnB1dFN0cmVhbUNsYXNzKSkKKyNkZWZpbmUgV0VCS0lUX0lTX1NPVVBfUkVR
VUVTVF9JTlBVVF9TVFJFQU1fQ0xBU1Moa2xhc3MpIChHX1RZUEVfQ0hFQ0tfQ0xBU1NfVFlQRSgo
a2xhc3MpLCBXRUJLSVRfVFlQRV9TT1VQX1JFUVVFU1RfSU5QVVRfU1RSRUFNKSkKKyNkZWZpbmUg
V0VCS0lUX1NPVVBfUkVRVUVTVF9JTlBVVF9TVFJFQU1fR0VUX0NMQVNTKG9iaikgIChHX1RZUEVf
SU5TVEFOQ0VfR0VUX0NMQVNTKChvYmopLCBXRUJLSVRfVFlQRV9TT1VQX1JFUVVFU1RfSU5QVVRf
U1RSRUFNLCBXZWJLaXRTb3VwUmVxdWVzdElucHV0U3RyZWFtQ2xhc3MpKQorCit0eXBlZGVmIHN0
cnVjdCBfV2ViS2l0U291cFJlcXVlc3RJbnB1dFN0cmVhbSBXZWJLaXRTb3VwUmVxdWVzdElucHV0
U3RyZWFtOwordHlwZWRlZiBzdHJ1Y3QgX1dlYktpdFNvdXBSZXF1ZXN0SW5wdXRTdHJlYW1DbGFz
cyBXZWJLaXRTb3VwUmVxdWVzdElucHV0U3RyZWFtQ2xhc3M7Cit0eXBlZGVmIHN0cnVjdCBfV2Vi
S2l0U291cFJlcXVlc3RJbnB1dFN0cmVhbVByaXZhdGUgV2ViS2l0U291cFJlcXVlc3RJbnB1dFN0
cmVhbVByaXZhdGU7CisKK3N0cnVjdCBfV2ViS2l0U291cFJlcXVlc3RJbnB1dFN0cmVhbSB7Cisg
ICAgR01lbW9yeUlucHV0U3RyZWFtIHBhcmVudDsKKworICAgIFdlYktpdFNvdXBSZXF1ZXN0SW5w
dXRTdHJlYW1Qcml2YXRlKiBwcml2OworfTsKKworc3RydWN0IF9XZWJLaXRTb3VwUmVxdWVzdElu
cHV0U3RyZWFtQ2xhc3MgeworICAgIEdNZW1vcnlJbnB1dFN0cmVhbUNsYXNzIHBhcmVudDsKK307
CisKK0dUeXBlIHdlYmtpdF9zb3VwX3JlcXVlc3RfaW5wdXRfc3RyZWFtX2dldF90eXBlKCk7CitH
SW5wdXRTdHJlYW0qIHdlYmtpdFNvdXBSZXF1ZXN0SW5wdXRTdHJlYW1OZXcodWludDY0X3QgY29u
dGVudExlbmd0aCk7Cit2b2lkIHdlYmtpdFNvdXBSZXF1ZXN0SW5wdXRTdHJlYW1BZGREYXRhKFdl
YktpdFNvdXBSZXF1ZXN0SW5wdXRTdHJlYW0qLCBjb25zdCB2b2lkKiBkYXRhLCBzaXplX3QgZGF0
YUxlbmd0aCk7Citib29sIHdlYmtpdFNvdXBSZXF1ZXN0SW5wdXRTdHJlYW1GaW5pc2hlZChXZWJL
aXRTb3VwUmVxdWVzdElucHV0U3RyZWFtKik7CisKK0dfRU5EX0RFQ0xTCisKKyNlbmRpZiAvLyBX
ZWJLaXRTb3VwUmVxdWVzdElucHV0U3RyZWFtX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQy
L1dlYlByb2Nlc3Mvc291cC9XZWJLaXRTb3VwUmVxdWVzdEdlbmVyaWMuY3BwIGIvU291cmNlL1dl
YktpdDIvV2ViUHJvY2Vzcy9zb3VwL1dlYktpdFNvdXBSZXF1ZXN0R2VuZXJpYy5jcHAKZGVsZXRl
ZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDU1YzUwMzc1YTBjM2UzYmYwY2Y4YTU1MjNjZTE1NmU1
ODg2NDQzZTMuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEv
U291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9zb3VwL1dlYktpdFNvdXBSZXF1ZXN0R2VuZXJpYy5j
cHAKKysrIC9kZXYvbnVsbApAQCAtMSwxMDcgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykg
MjAxMiBJZ2FsaWEgUy5MLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5
b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVy
bXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxp
c2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24g
MiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4K
LSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3
aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVu
IHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogTGlicmFyeSBHZW5lcmFs
IFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZl
IHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5z
ZQotICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4g
IElmIG5vdCwgd3JpdGUgdG8KLSAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4s
IDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCi0gKiBCb3N0b24sIE1BIDAyMTEwLTEz
MDEsIFVTQS4KLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiV2ViS2l0U291
cFJlcXVlc3RHZW5lcmljLmgiCi0KLSNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+Ci0KLSNp
ZiAhRU5BQkxFKENVU1RPTV9QUk9UT0NPTFMpCi0jaW5jbHVkZSAiV2ViUHJvY2Vzcy5oIgotI2lu
Y2x1ZGUgIldlYlNvdXBSZXF1ZXN0TWFuYWdlci5oIgotI2VuZGlmCi0KLXVzaW5nIG5hbWVzcGFj
ZSBXZWJLaXQ7Ci0KLUdfREVGSU5FX1RZUEUoV2ViS2l0U291cFJlcXVlc3RHZW5lcmljLCB3ZWJr
aXRfc291cF9yZXF1ZXN0X2dlbmVyaWMsIFNPVVBfVFlQRV9SRVFVRVNUKQotCi1zdHJ1Y3QgX1dl
YktpdFNvdXBSZXF1ZXN0R2VuZXJpY1ByaXZhdGUgewotICAgIENTdHJpbmcgbWltZVR5cGU7Ci0g
ICAgZ29mZnNldCBjb250ZW50TGVuZ3RoOwotfTsKLQotc3RhdGljIHZvaWQgd2Via2l0U291cFJl
cXVlc3RHZW5lcmljRmluYWxpemUoR09iamVjdCogb2JqZWN0KQotewotICAgIFdFQktJVF9TT1VQ
X1JFUVVFU1RfR0VORVJJQyhvYmplY3QpLT5wcml2LT5+V2ViS2l0U291cFJlcXVlc3RHZW5lcmlj
UHJpdmF0ZSgpOwotICAgIEdfT0JKRUNUX0NMQVNTKHdlYmtpdF9zb3VwX3JlcXVlc3RfZ2VuZXJp
Y19wYXJlbnRfY2xhc3MpLT5maW5hbGl6ZShvYmplY3QpOwotfQotCi1zdGF0aWMgdm9pZCB3ZWJr
aXRfc291cF9yZXF1ZXN0X2dlbmVyaWNfaW5pdChXZWJLaXRTb3VwUmVxdWVzdEdlbmVyaWMqIHJl
cXVlc3QpCi17Ci0gICAgV2ViS2l0U291cFJlcXVlc3RHZW5lcmljUHJpdmF0ZSogcHJpdiA9IEdf
VFlQRV9JTlNUQU5DRV9HRVRfUFJJVkFURShyZXF1ZXN0LCBXRUJLSVRfVFlQRV9TT1VQX1JFUVVF
U1RfR0VORVJJQywgV2ViS2l0U291cFJlcXVlc3RHZW5lcmljUHJpdmF0ZSk7Ci0gICAgcmVxdWVz
dC0+cHJpdiA9IHByaXY7Ci0gICAgbmV3IChwcml2KSBXZWJLaXRTb3VwUmVxdWVzdEdlbmVyaWNQ
cml2YXRlKCk7Ci19Ci0KLXN0YXRpYyB2b2lkIHdlYmtpdFNvdXBSZXF1ZXN0R2VuZXJpY1NlbmRB
c3luYyhTb3VwUmVxdWVzdCogcmVxdWVzdCwgR0NhbmNlbGxhYmxlKiBjYW5jZWxsYWJsZSwgR0Fz
eW5jUmVhZHlDYWxsYmFjayBjYWxsYmFjaywgZ3BvaW50ZXIgdXNlckRhdGEpCi17Ci0jaWYgRU5B
QkxFKENVU1RPTV9QUk9UT0NPTFMpCi0gICAgQ3VzdG9tUHJvdG9jb2xNYW5hZ2VySW1wbCogY3Vz
dG9tUHJvdG9jb2xNYW5hZ2VyID0gV0VCS0lUX1NPVVBfUkVRVUVTVF9HRU5FUklDX0dFVF9DTEFT
UyhyZXF1ZXN0KS0+Y3VzdG9tUHJvdG9jb2xNYW5hZ2VyOwotICAgIEFTU0VSVChjdXN0b21Qcm90
b2NvbE1hbmFnZXIpOwotICAgIGN1c3RvbVByb3RvY29sTWFuYWdlci0+c2VuZChnX3Rhc2tfbmV3
KHJlcXVlc3QsIGNhbmNlbGxhYmxlLCBjYWxsYmFjaywgdXNlckRhdGEpKTsKLSNlbHNlCi0gICAg
V2ViUHJvY2Vzczo6c2hhcmVkKCkuc3VwcGxlbWVudDxXZWJTb3VwUmVxdWVzdE1hbmFnZXI+KCkt
PnNlbmQoZ190YXNrX25ldyhyZXF1ZXN0LCBjYW5jZWxsYWJsZSwgY2FsbGJhY2ssIHVzZXJEYXRh
KSk7Ci0jZW5kaWYKLX0KLQotc3RhdGljIEdJbnB1dFN0cmVhbSogd2Via2l0U291cFJlcXVlc3RH
ZW5lcmljU2VuZEZpbmlzaChTb3VwUmVxdWVzdCogcmVxdWVzdCwgR0FzeW5jUmVzdWx0KiByZXN1
bHQsIEdFcnJvcioqIGVycm9yKQotewotICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKGdfdGFza19p
c192YWxpZChyZXN1bHQsIHJlcXVlc3QpLCAwKTsKLSNpZiBFTkFCTEUoQ1VTVE9NX1BST1RPQ09M
UykKLSAgICBDdXN0b21Qcm90b2NvbE1hbmFnZXJJbXBsKiBjdXN0b21Qcm90b2NvbE1hbmFnZXIg
PSBXRUJLSVRfU09VUF9SRVFVRVNUX0dFTkVSSUNfR0VUX0NMQVNTKHJlcXVlc3QpLT5jdXN0b21Q
cm90b2NvbE1hbmFnZXI7Ci0gICAgQVNTRVJUKGN1c3RvbVByb3RvY29sTWFuYWdlcik7Ci0gICAg
cmV0dXJuIGN1c3RvbVByb3RvY29sTWFuYWdlci0+ZmluaXNoKEdfVEFTSyhyZXN1bHQpLCBlcnJv
cik7Ci0jZWxzZQotICAgIHJldHVybiBXZWJQcm9jZXNzOjpzaGFyZWQoKS5zdXBwbGVtZW50PFdl
YlNvdXBSZXF1ZXN0TWFuYWdlcj4oKS0+ZmluaXNoKEdfVEFTSyhyZXN1bHQpLCBlcnJvcik7Ci0j
ZW5kaWYKLX0KLQotc3RhdGljIGdvZmZzZXQgd2Via2l0U291cFJlcXVlc3RHZW5lcmljR2V0Q29u
dGVudExlbmd0aChTb3VwUmVxdWVzdCogcmVxdWVzdCkKLXsKLSAgICByZXR1cm4gV0VCS0lUX1NP
VVBfUkVRVUVTVF9HRU5FUklDKHJlcXVlc3QpLT5wcml2LT5jb250ZW50TGVuZ3RoOwotfQotCi1z
dGF0aWMgY29uc3QgY2hhciogd2Via2l0U291cFJlcXVlc3RHZW5lcmljR2V0Q29udGVudFR5cGUo
U291cFJlcXVlc3QqIHJlcXVlc3QpCi17Ci0gICAgcmV0dXJuIFdFQktJVF9TT1VQX1JFUVVFU1Rf
R0VORVJJQyhyZXF1ZXN0KS0+cHJpdi0+bWltZVR5cGUuZGF0YSgpOwotfQotCi1zdGF0aWMgdm9p
ZCB3ZWJraXRfc291cF9yZXF1ZXN0X2dlbmVyaWNfY2xhc3NfaW5pdChXZWJLaXRTb3VwUmVxdWVz
dEdlbmVyaWNDbGFzcyogcmVxdWVzdEdlbmVyaWNDbGFzcykKLXsKLSAgICBHT2JqZWN0Q2xhc3Mq
IGdPYmplY3RDbGFzcyA9IEdfT0JKRUNUX0NMQVNTKHJlcXVlc3RHZW5lcmljQ2xhc3MpOwotICAg
IGdPYmplY3RDbGFzcy0+ZmluYWxpemUgPSB3ZWJraXRTb3VwUmVxdWVzdEdlbmVyaWNGaW5hbGl6
ZTsKLQotICAgIFNvdXBSZXF1ZXN0Q2xhc3MqIHJlcXVlc3RDbGFzcyA9IFNPVVBfUkVRVUVTVF9D
TEFTUyhyZXF1ZXN0R2VuZXJpY0NsYXNzKTsKLSAgICByZXF1ZXN0Q2xhc3MtPnNlbmRfYXN5bmMg
PSB3ZWJraXRTb3VwUmVxdWVzdEdlbmVyaWNTZW5kQXN5bmM7Ci0gICAgcmVxdWVzdENsYXNzLT5z
ZW5kX2ZpbmlzaCA9IHdlYmtpdFNvdXBSZXF1ZXN0R2VuZXJpY1NlbmRGaW5pc2g7Ci0gICAgcmVx
dWVzdENsYXNzLT5nZXRfY29udGVudF9sZW5ndGggPSB3ZWJraXRTb3VwUmVxdWVzdEdlbmVyaWNH
ZXRDb250ZW50TGVuZ3RoOwotICAgIHJlcXVlc3RDbGFzcy0+Z2V0X2NvbnRlbnRfdHlwZSA9IHdl
YmtpdFNvdXBSZXF1ZXN0R2VuZXJpY0dldENvbnRlbnRUeXBlOwotCi0gICAgZ190eXBlX2NsYXNz
X2FkZF9wcml2YXRlKHJlcXVlc3RHZW5lcmljQ2xhc3MsIHNpemVvZihXZWJLaXRTb3VwUmVxdWVz
dEdlbmVyaWNQcml2YXRlKSk7Ci19Ci0KLXZvaWQgd2Via2l0U291cFJlcXVlc3RHZW5lcmljU2V0
Q29udGVudExlbmd0aChXZWJLaXRTb3VwUmVxdWVzdEdlbmVyaWMqIHJlcXVlc3QsIGdvZmZzZXQg
Y29udGVudExlbmd0aCkKLXsKLSAgICByZXF1ZXN0LT5wcml2LT5jb250ZW50TGVuZ3RoID0gY29u
dGVudExlbmd0aDsKLX0KLQotdm9pZCB3ZWJraXRTb3VwUmVxdWVzdEdlbmVyaWNTZXRDb250ZW50
VHlwZShXZWJLaXRTb3VwUmVxdWVzdEdlbmVyaWMqIHJlcXVlc3QsIGNvbnN0IGNoYXIqIG1pbWVU
eXBlKQotewotICAgIHJlcXVlc3QtPnByaXYtPm1pbWVUeXBlID0gbWltZVR5cGU7Ci19CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL3NvdXAvV2ViS2l0U291cFJlcXVlc3RH
ZW5lcmljLmggYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL3NvdXAvV2ViS2l0U291cFJlcXVl
c3RHZW5lcmljLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDVjNWQzYWQyZDUxMTY4
NDdjOTcxZDNkOTFjNmVjNWY3N2E1NDRlYjQuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9zb3VwL1dlYktpdFNv
dXBSZXF1ZXN0R2VuZXJpYy5oCisrKyAvZGV2L251bGwKQEAgLTEsNjQgKzAsMCBAQAotLyoKLSAq
IENvcHlyaWdodCAoQykgMjAxMiBJZ2FsaWEgUy5MLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBm
cmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBp
dCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBM
aWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRo
ZXIKLSAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkg
bGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhl
IGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5U
WTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJ
VFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICog
TGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICog
WW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJh
bCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmls
ZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KLSAqIHRoZSBGcmVlIFNvZnR3YXJlIEZv
dW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCi0gKiBCb3N0
b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSAqLwotCi0jaWZuZGVmIFdlYktpdFNvdXBSZXF1ZXN0
R2VuZXJpY19oCi0jZGVmaW5lIFdlYktpdFNvdXBSZXF1ZXN0R2VuZXJpY19oCi0KLSNpbmNsdWRl
IDxnbGliLW9iamVjdC5oPgotI2luY2x1ZGUgPGxpYnNvdXAvc291cC5oPgotCi0jaWYgRU5BQkxF
KENVU1RPTV9QUk9UT0NPTFMpCi0jaW5jbHVkZSAiQ3VzdG9tUHJvdG9jb2xNYW5hZ2VySW1wbC5o
IgotI2VuZGlmCi0KLUdfQkVHSU5fREVDTFMKLQotI2RlZmluZSBXRUJLSVRfVFlQRV9TT1VQX1JF
UVVFU1RfR0VORVJJQyAgICAgICAgICAgICh3ZWJraXRfc291cF9yZXF1ZXN0X2dlbmVyaWNfZ2V0
X3R5cGUoKSkKLSNkZWZpbmUgV0VCS0lUX1NPVVBfUkVRVUVTVF9HRU5FUklDKG9iamVjdCkgICAg
ICAgICAoR19UWVBFX0NIRUNLX0lOU1RBTkNFX0NBU1QoKG9iamVjdCksIFdFQktJVF9UWVBFX1NP
VVBfUkVRVUVTVF9HRU5FUklDLCBXZWJLaXRTb3VwUmVxdWVzdEdlbmVyaWMpKQotI2RlZmluZSBX
RUJLSVRfSVNfU09VUF9SRVFVRVNUX0dFTkVSSUMob2JqZWN0KSAgICAgIChHX1RZUEVfQ0hFQ0tf
SU5TVEFOQ0VfVFlQRSgob2JqZWN0KSwgV0VCS0lUX1RZUEVfU09VUF9SRVFVRVNUX0dFTkVSSUMp
KQotI2RlZmluZSBXRUJLSVRfU09VUF9SRVFVRVNUX0dFTkVSSUNfQ0xBU1Moa2xhc3MpICAgIChH
X1RZUEVfQ0hFQ0tfQ0xBU1NfQ0FTVCgoa2xhc3MpLCBXRUJLSVRfVFlQRV9TT1VQX1JFUVVFU1Rf
R0VORVJJQywgV2ViS2l0U291cFJlcXVlc3RHZW5lcmljQ2xhc3MpKQotI2RlZmluZSBXRUJLSVRf
SVNfU09VUF9SRVFVRVNUX0dFTkVSSUNfQ0xBU1Moa2xhc3MpIChHX1RZUEVfQ0hFQ0tfQ0xBU1Nf
VFlQRSgoa2xhc3MpLCBXRUJLSVRfVFlQRV9TT1VQX1JFUVVFU1RfR0VORVJJQykpCi0jZGVmaW5l
IFdFQktJVF9TT1VQX1JFUVVFU1RfR0VORVJJQ19HRVRfQ0xBU1Mob2JqKSAgKEdfVFlQRV9JTlNU
QU5DRV9HRVRfQ0xBU1MoKG9iaiksIFdFQktJVF9UWVBFX1NPVVBfUkVRVUVTVF9HRU5FUklDLCBX
ZWJLaXRTb3VwUmVxdWVzdEdlbmVyaWNDbGFzcykpCi0KLXR5cGVkZWYgc3RydWN0IF9XZWJLaXRT
b3VwUmVxdWVzdEdlbmVyaWMgV2ViS2l0U291cFJlcXVlc3RHZW5lcmljOwotdHlwZWRlZiBzdHJ1
Y3QgX1dlYktpdFNvdXBSZXF1ZXN0R2VuZXJpY0NsYXNzIFdlYktpdFNvdXBSZXF1ZXN0R2VuZXJp
Y0NsYXNzOwotdHlwZWRlZiBzdHJ1Y3QgX1dlYktpdFNvdXBSZXF1ZXN0R2VuZXJpY1ByaXZhdGUg
V2ViS2l0U291cFJlcXVlc3RHZW5lcmljUHJpdmF0ZTsKLQotc3RydWN0IF9XZWJLaXRTb3VwUmVx
dWVzdEdlbmVyaWMgewotICAgIFNvdXBSZXF1ZXN0IHBhcmVudDsKLQotICAgIFdlYktpdFNvdXBS
ZXF1ZXN0R2VuZXJpY1ByaXZhdGUgKnByaXY7Ci19OwotCi1zdHJ1Y3QgX1dlYktpdFNvdXBSZXF1
ZXN0R2VuZXJpY0NsYXNzIHsKLSAgICBTb3VwUmVxdWVzdENsYXNzIHBhcmVudDsKLQotI2lmIEVO
QUJMRShDVVNUT01fUFJPVE9DT0xTKQotICAgIFdlYktpdDo6Q3VzdG9tUHJvdG9jb2xNYW5hZ2Vy
SW1wbCogY3VzdG9tUHJvdG9jb2xNYW5hZ2VyOwotI2VuZGlmCi19OwotCi1HVHlwZSB3ZWJraXRf
c291cF9yZXF1ZXN0X2dlbmVyaWNfZ2V0X3R5cGUoKTsKLQotdm9pZCB3ZWJraXRTb3VwUmVxdWVz
dEdlbmVyaWNTZXRDb250ZW50TGVuZ3RoKFdlYktpdFNvdXBSZXF1ZXN0R2VuZXJpYyosIGdvZmZz
ZXQgY29udGVudExlbmd0aCk7Ci12b2lkIHdlYmtpdFNvdXBSZXF1ZXN0R2VuZXJpY1NldENvbnRl
bnRUeXBlKFdlYktpdFNvdXBSZXF1ZXN0R2VuZXJpYyosIGNvbnN0IGNoYXIqIG1pbWVUeXBlKTsK
LQotR19FTkRfREVDTFMKLQotI2VuZGlmIC8vIFdlYktpdFNvdXBSZXF1ZXN0R2VuZXJpY19oCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL3NvdXAvV2ViS2l0U291cFJlcXVl
c3RJbnB1dFN0cmVhbS5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL3NvdXAvV2ViS2l0
U291cFJlcXVlc3RJbnB1dFN0cmVhbS5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDg1MmE1ODVkNmQ0MmFiMWZhNmU1OWIxOTE0Yjg3YzBlMDMwODlhYjguLjAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vz
cy9zb3VwL1dlYktpdFNvdXBSZXF1ZXN0SW5wdXRTdHJlYW0uY3BwCisrKyAvZGV2L251bGwKQEAg
LTEsMTc0ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTIgSWdhbGlhIFMuTC4KLSAq
Ci0gKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUg
aXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFy
eSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29m
dHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9y
IChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBsaWJyYXJ5
IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBi
dXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50
eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQ
T1NFLiAgU2VlIHRoZSBHTlUKLSAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3Ig
bW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2Yg
dGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhp
cyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCi0g
KiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQs
IEZpZnRoIEZsb29yLAotICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0gKi8KLQotI2lu
Y2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIldlYktpdFNvdXBSZXF1ZXN0SW5wdXRTdHJlYW0u
aCIKLQotI2luY2x1ZGUgPHd0Zi9Pd25QdHIuaD4KLSNpbmNsdWRlIDx3dGYvUGFzc093blB0ci5o
PgotI2luY2x1ZGUgPHd0Zi9UaHJlYWRpbmcuaD4KLSNpbmNsdWRlIDx3dGYvZ29iamVjdC9HUmVm
UHRyLmg+Ci0KLXN0cnVjdCBBc3luY1JlYWREYXRhIHsKLSAgICBBc3luY1JlYWREYXRhKEdTaW1w
bGVBc3luY1Jlc3VsdCogcmVzdWx0LCB2b2lkKiBidWZmZXIsIGdzaXplIGNvdW50LCBHQ2FuY2Vs
bGFibGUqIGNhbmNlbGxhYmxlKQotICAgICAgICA6IHJlc3VsdChyZXN1bHQpCi0gICAgICAgICwg
YnVmZmVyKGJ1ZmZlcikKLSAgICAgICAgLCBjb3VudChjb3VudCkKLSAgICAgICAgLCBjYW5jZWxs
YWJsZShjYW5jZWxsYWJsZSkKLSAgICB7Ci0gICAgfQotCi0gICAgR1JlZlB0cjxHU2ltcGxlQXN5
bmNSZXN1bHQ+IHJlc3VsdDsKLSAgICB2b2lkKiBidWZmZXI7Ci0gICAgc2l6ZV90IGNvdW50Owot
ICAgIEdSZWZQdHI8R0NhbmNlbGxhYmxlPiBjYW5jZWxsYWJsZTsKLX07Ci0KLXN0cnVjdCBfV2Vi
S2l0U291cFJlcXVlc3RJbnB1dFN0cmVhbVByaXZhdGUgewotICAgIHVpbnQ2NF90IGNvbnRlbnRM
ZW5ndGg7Ci0gICAgdWludDY0X3QgYnl0ZXNSZWNlaXZlZDsKLSAgICB1aW50NjRfdCBieXRlc1Jl
YWQ7Ci0KLSAgICBNdXRleCByZWFkTG9jazsKLSAgICBPd25QdHI8QXN5bmNSZWFkRGF0YT4gcGVu
ZGluZ0FzeW5jUmVhZDsKLX07Ci0KLUdfREVGSU5FX1RZUEUoV2ViS2l0U291cFJlcXVlc3RJbnB1
dFN0cmVhbSwgd2Via2l0X3NvdXBfcmVxdWVzdF9pbnB1dF9zdHJlYW0sIEdfVFlQRV9NRU1PUllf
SU5QVVRfU1RSRUFNKQotCi1zdGF0aWMgdm9pZCB3ZWJraXRTb3VwUmVxdWVzdElucHV0U3RyZWFt
UmVhZEFzeW5jUmVzdWx0Q29tcGxldGUoV2ViS2l0U291cFJlcXVlc3RJbnB1dFN0cmVhbSogc3Ry
ZWFtLCBHU2ltcGxlQXN5bmNSZXN1bHQqIHJlc3VsdCwgdm9pZCogYnVmZmVyLCBnc2l6ZSBjb3Vu
dCwgR0NhbmNlbGxhYmxlKiBjYW5jZWxsYWJsZSkKLXsKLSAgICBHRXJyb3IqIGVycm9yID0gMDsK
LSAgICBnc3NpemUgYnl0ZXNSZWFkID0gR19JTlBVVF9TVFJFQU1fR0VUX0NMQVNTKHN0cmVhbSkt
PnJlYWRfZm4oR19JTlBVVF9TVFJFQU0oc3RyZWFtKSwgYnVmZmVyLCBjb3VudCwgY2FuY2VsbGFi
bGUsICZlcnJvcik7Ci0gICAgaWYgKCFlcnJvcikgewotICAgICAgICBnX3NpbXBsZV9hc3luY19y
ZXN1bHRfc2V0X29wX3Jlc19nc3NpemUocmVzdWx0LCBieXRlc1JlYWQpOwotICAgICAgICBzdHJl
YW0tPnByaXYtPmJ5dGVzUmVhZCArPSBieXRlc1JlYWQ7Ci0gICAgfSBlbHNlCi0gICAgICAgIGdf
c2ltcGxlX2FzeW5jX3Jlc3VsdF90YWtlX2Vycm9yKHJlc3VsdCwgZXJyb3IpOwotICAgIGdfc2lt
cGxlX2FzeW5jX3Jlc3VsdF9jb21wbGV0ZV9pbl9pZGxlKHJlc3VsdCk7Ci19Ci0KLXN0YXRpYyB2
b2lkIHdlYmtpdFNvdXBSZXF1ZXN0SW5wdXRTdHJlYW1QZW5kaW5nUmVhZEFzeW5jQ29tcGxldGUo
V2ViS2l0U291cFJlcXVlc3RJbnB1dFN0cmVhbSogc3RyZWFtKQotewotICAgIGlmICghc3RyZWFt
LT5wcml2LT5wZW5kaW5nQXN5bmNSZWFkKQotICAgICAgICByZXR1cm47Ci0KLSAgICBBc3luY1Jl
YWREYXRhKiBkYXRhID0gc3RyZWFtLT5wcml2LT5wZW5kaW5nQXN5bmNSZWFkLmdldCgpOwotICAg
IHdlYmtpdFNvdXBSZXF1ZXN0SW5wdXRTdHJlYW1SZWFkQXN5bmNSZXN1bHRDb21wbGV0ZShzdHJl
YW0sIGRhdGEtPnJlc3VsdC5nZXQoKSwgZGF0YS0+YnVmZmVyLCBkYXRhLT5jb3VudCwgZGF0YS0+
Y2FuY2VsbGFibGUuZ2V0KCkpOwotICAgIHN0cmVhbS0+cHJpdi0+cGVuZGluZ0FzeW5jUmVhZC5j
bGVhcigpOwotfQotCi1zdGF0aWMgYm9vbCB3ZWJraXRTb3VwUmVxdWVzdElucHV0U3RyZWFtSGFz
RGF0YVRvUmVhZChXZWJLaXRTb3VwUmVxdWVzdElucHV0U3RyZWFtKiBzdHJlYW0pCi17Ci0gICAg
cmV0dXJuIHN0cmVhbS0+cHJpdi0+Ynl0ZXNSZWFkIDwgc3RyZWFtLT5wcml2LT5ieXRlc1JlY2Vp
dmVkOwotfQotCi1zdGF0aWMgYm9vbCB3ZWJraXRTb3VwUmVxdWVzdElucHV0U3RyZWFtSXNXYWl0
aW5nRm9yRGF0YShXZWJLaXRTb3VwUmVxdWVzdElucHV0U3RyZWFtKiBzdHJlYW0pCi17Ci0gICAg
cmV0dXJuICFzdHJlYW0tPnByaXYtPmNvbnRlbnRMZW5ndGggfHwgc3RyZWFtLT5wcml2LT5ieXRl
c1JlY2VpdmVkIDwgc3RyZWFtLT5wcml2LT5jb250ZW50TGVuZ3RoOwotfQotCi1zdGF0aWMgdm9p
ZCB3ZWJraXRTb3VwUmVxdWVzdElucHV0U3RyZWFtUmVhZEFzeW5jKEdJbnB1dFN0cmVhbSogaW5w
dXRTdHJlYW0sIHZvaWQqIGJ1ZmZlciwgZ3NpemUgY291bnQsIGludCAvKnByaW9yaXR5Ki8sIEdD
YW5jZWxsYWJsZSogY2FuY2VsbGFibGUsIEdBc3luY1JlYWR5Q2FsbGJhY2sgY2FsbGJhY2ssIGdw
b2ludGVyIHVzZXJEYXRhKQotewotICAgIFdlYktpdFNvdXBSZXF1ZXN0SW5wdXRTdHJlYW0qIHN0
cmVhbSA9IFdFQktJVF9TT1VQX1JFUVVFU1RfSU5QVVRfU1RSRUFNKGlucHV0U3RyZWFtKTsKLSAg
ICBHUmVmUHRyPEdTaW1wbGVBc3luY1Jlc3VsdD4gcmVzdWx0ID0gYWRvcHRHUmVmKGdfc2ltcGxl
X2FzeW5jX3Jlc3VsdF9uZXcoR19PQkpFQ1Qoc3RyZWFtKSwgY2FsbGJhY2ssIHVzZXJEYXRhLCBy
ZWludGVycHJldF9jYXN0PHZvaWQqPih3ZWJraXRTb3VwUmVxdWVzdElucHV0U3RyZWFtUmVhZEFz
eW5jKSkpOwotCi0gICAgTXV0ZXhMb2NrZXIgbG9ja2VyKHN0cmVhbS0+cHJpdi0+cmVhZExvY2sp
OwotCi0gICAgaWYgKCF3ZWJraXRTb3VwUmVxdWVzdElucHV0U3RyZWFtSGFzRGF0YVRvUmVhZChz
dHJlYW0pICYmICF3ZWJraXRTb3VwUmVxdWVzdElucHV0U3RyZWFtSXNXYWl0aW5nRm9yRGF0YShz
dHJlYW0pKSB7Ci0gICAgICAgIGdfc2ltcGxlX2FzeW5jX3Jlc3VsdF9zZXRfb3BfcmVzX2dzc2l6
ZShyZXN1bHQuZ2V0KCksIDApOwotICAgICAgICBnX3NpbXBsZV9hc3luY19yZXN1bHRfY29tcGxl
dGVfaW5faWRsZShyZXN1bHQuZ2V0KCkpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAg
aWYgKHdlYmtpdFNvdXBSZXF1ZXN0SW5wdXRTdHJlYW1IYXNEYXRhVG9SZWFkKHN0cmVhbSkpIHsK
LSAgICAgICAgd2Via2l0U291cFJlcXVlc3RJbnB1dFN0cmVhbVJlYWRBc3luY1Jlc3VsdENvbXBs
ZXRlKHN0cmVhbSwgcmVzdWx0LmdldCgpLCBidWZmZXIsIGNvdW50LCBjYW5jZWxsYWJsZSk7Ci0g
ICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBzdHJlYW0tPnByaXYtPnBlbmRpbmdBc3luY1Jl
YWQgPSBhZG9wdFB0cihuZXcgQXN5bmNSZWFkRGF0YShyZXN1bHQuZ2V0KCksIGJ1ZmZlciwgY291
bnQsIGNhbmNlbGxhYmxlKSk7Ci19Ci0KLXN0YXRpYyBnc3NpemUgd2Via2l0U291cFJlcXVlc3RJ
bnB1dFN0cmVhbVJlYWRGaW5pc2goR0lucHV0U3RyZWFtKiwgR0FzeW5jUmVzdWx0KiByZXN1bHQs
IEdFcnJvcioqKQotewotICAgIEdTaW1wbGVBc3luY1Jlc3VsdCogc2ltcGxlUmVzdWx0ID0gR19T
SU1QTEVfQVNZTkNfUkVTVUxUKHJlc3VsdCk7Ci0gICAgZ193YXJuX2lmX2ZhaWwoZ19zaW1wbGVf
YXN5bmNfcmVzdWx0X2dldF9zb3VyY2VfdGFnKHNpbXBsZVJlc3VsdCkgPT0gd2Via2l0U291cFJl
cXVlc3RJbnB1dFN0cmVhbVJlYWRBc3luYyk7Ci0KLSAgICByZXR1cm4gZ19zaW1wbGVfYXN5bmNf
cmVzdWx0X2dldF9vcF9yZXNfZ3NzaXplKHNpbXBsZVJlc3VsdCk7Ci19Ci0KLXN0YXRpYyB2b2lk
IHdlYmtpdFNvdXBSZXF1ZXN0SW5wdXRTdHJlYW1GaW5hbGl6ZShHT2JqZWN0KiBvYmplY3QpCi17
Ci0gICAgV0VCS0lUX1NPVVBfUkVRVUVTVF9JTlBVVF9TVFJFQU0ob2JqZWN0KS0+cHJpdi0+fldl
YktpdFNvdXBSZXF1ZXN0SW5wdXRTdHJlYW1Qcml2YXRlKCk7Ci0gICAgR19PQkpFQ1RfQ0xBU1Mo
d2Via2l0X3NvdXBfcmVxdWVzdF9pbnB1dF9zdHJlYW1fcGFyZW50X2NsYXNzKS0+ZmluYWxpemUo
b2JqZWN0KTsKLX0KLQotc3RhdGljIHZvaWQgd2Via2l0X3NvdXBfcmVxdWVzdF9pbnB1dF9zdHJl
YW1faW5pdChXZWJLaXRTb3VwUmVxdWVzdElucHV0U3RyZWFtKiBzdHJlYW0pCi17Ci0gICAgV2Vi
S2l0U291cFJlcXVlc3RJbnB1dFN0cmVhbVByaXZhdGUqIHByaXYgPSBHX1RZUEVfSU5TVEFOQ0Vf
R0VUX1BSSVZBVEUoc3RyZWFtLCBXRUJLSVRfVFlQRV9TT1VQX1JFUVVFU1RfSU5QVVRfU1RSRUFN
LCBXZWJLaXRTb3VwUmVxdWVzdElucHV0U3RyZWFtUHJpdmF0ZSk7Ci0gICAgc3RyZWFtLT5wcml2
ID0gcHJpdjsKLSAgICBuZXcgKHByaXYpIFdlYktpdFNvdXBSZXF1ZXN0SW5wdXRTdHJlYW1Qcml2
YXRlKCk7Ci19Ci0KLXN0YXRpYyB2b2lkIHdlYmtpdF9zb3VwX3JlcXVlc3RfaW5wdXRfc3RyZWFt
X2NsYXNzX2luaXQoV2ViS2l0U291cFJlcXVlc3RJbnB1dFN0cmVhbUNsYXNzKiByZXF1ZXN0U3Ry
ZWFtQ2xhc3MpCi17Ci0gICAgR09iamVjdENsYXNzKiBnT2JqZWN0Q2xhc3MgPSBHX09CSkVDVF9D
TEFTUyhyZXF1ZXN0U3RyZWFtQ2xhc3MpOwotICAgIGdPYmplY3RDbGFzcy0+ZmluYWxpemUgPSB3
ZWJraXRTb3VwUmVxdWVzdElucHV0U3RyZWFtRmluYWxpemU7Ci0KLSAgICBHSW5wdXRTdHJlYW1D
bGFzcyogaW5wdXRTdHJlYW1DbGFzcyA9IEdfSU5QVVRfU1RSRUFNX0NMQVNTKHJlcXVlc3RTdHJl
YW1DbGFzcyk7Ci0gICAgaW5wdXRTdHJlYW1DbGFzcy0+cmVhZF9hc3luYyA9IHdlYmtpdFNvdXBS
ZXF1ZXN0SW5wdXRTdHJlYW1SZWFkQXN5bmM7Ci0gICAgaW5wdXRTdHJlYW1DbGFzcy0+cmVhZF9m
aW5pc2ggPSB3ZWJraXRTb3VwUmVxdWVzdElucHV0U3RyZWFtUmVhZEZpbmlzaDsKLQotICAgIGdf
dHlwZV9jbGFzc19hZGRfcHJpdmF0ZShyZXF1ZXN0U3RyZWFtQ2xhc3MsIHNpemVvZihXZWJLaXRT
b3VwUmVxdWVzdElucHV0U3RyZWFtUHJpdmF0ZSkpOwotfQotCi1HSW5wdXRTdHJlYW0qIHdlYmtp
dFNvdXBSZXF1ZXN0SW5wdXRTdHJlYW1OZXcodWludDY0X3QgY29udGVudExlbmd0aCkKLXsKLSAg
ICBXZWJLaXRTb3VwUmVxdWVzdElucHV0U3RyZWFtKiBzdHJlYW0gPSBXRUJLSVRfU09VUF9SRVFV
RVNUX0lOUFVUX1NUUkVBTShnX29iamVjdF9uZXcoV0VCS0lUX1RZUEVfU09VUF9SRVFVRVNUX0lO
UFVUX1NUUkVBTSwgTlVMTCkpOwotICAgIHN0cmVhbS0+cHJpdi0+Y29udGVudExlbmd0aCA9IGNv
bnRlbnRMZW5ndGg7Ci0gICAgcmV0dXJuIEdfSU5QVVRfU1RSRUFNKHN0cmVhbSk7Ci19Ci0KLXZv
aWQgd2Via2l0U291cFJlcXVlc3RJbnB1dFN0cmVhbUFkZERhdGEoV2ViS2l0U291cFJlcXVlc3RJ
bnB1dFN0cmVhbSogc3RyZWFtLCBjb25zdCB2b2lkKiBkYXRhLCBzaXplX3QgZGF0YUxlbmd0aCkK
LXsKLSAgICBpZiAod2Via2l0U291cFJlcXVlc3RJbnB1dFN0cmVhbUZpbmlzaGVkKHN0cmVhbSkp
Ci0gICAgICAgIHJldHVybjsKLQotICAgIE11dGV4TG9ja2VyIGxvY2tlcihzdHJlYW0tPnByaXYt
PnJlYWRMb2NrKTsKLQotICAgIGlmIChkYXRhTGVuZ3RoKSB7Ci0gICAgICAgIC8vIFRydW5jYXRl
IHRoZSBkYXRhTGVuZ3RoIHRvIHRoZSBjb250ZW50TGVuZ3RoIGlmIGl0J3Mga25vd24uCi0gICAg
ICAgIGlmIChzdHJlYW0tPnByaXYtPmNvbnRlbnRMZW5ndGggJiYgc3RyZWFtLT5wcml2LT5ieXRl
c1JlY2VpdmVkICsgZGF0YUxlbmd0aCA+IHN0cmVhbS0+cHJpdi0+Y29udGVudExlbmd0aCkKLSAg
ICAgICAgICAgIGRhdGFMZW5ndGggPSBzdHJlYW0tPnByaXYtPmNvbnRlbnRMZW5ndGggLSBzdHJl
YW0tPnByaXYtPmJ5dGVzUmVjZWl2ZWQ7Ci0gICAgICAgIHN0cmVhbS0+cHJpdi0+Ynl0ZXNSZWNl
aXZlZCArPSBkYXRhTGVuZ3RoOwotICAgICAgICBnX21lbW9yeV9pbnB1dF9zdHJlYW1fYWRkX2Rh
dGEoR19NRU1PUllfSU5QVVRfU1RSRUFNKHN0cmVhbSksIGdfbWVtZHVwKGRhdGEsIGRhdGFMZW5n
dGgpLCBkYXRhTGVuZ3RoLCBnX2ZyZWUpOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIC8vIFdlIGhh
dmUgcmVjZWl2ZWQgYWxsIHRoZSBkYXRhLCBzZXQgY29udGVudExlbmd0aCB0byBieXRlc1JlY2Vp
dmVkIHRvIGluZGljYXRlIHdlIGhhdmUgZmluaXNoZWQuCi0gICAgICAgIHN0cmVhbS0+cHJpdi0+
Y29udGVudExlbmd0aCA9IHN0cmVhbS0+cHJpdi0+Ynl0ZXNSZWNlaXZlZDsKLSAgICAgICAgLy8g
SWYgdGhlcmUncyBhIHBlbmRpbmcgcmVhZCB0byBjb21wbGV0ZSwgcmVhZF9mbiB3aWxsIHJldHVy
biAwIGJlY2F1c2Ugd2UgaGF2ZW4ndCBhZGRlZCBtb3JlIGRhdGEgdG8gdGhlCi0gICAgICAgIC8v
IG1lbW9yeSBpbnB1dCBzdHJlYW0uIEFuZCBpZiB0aGVyZSBpc24ndCBhIHBlbmRpbmcgcmVhZCwg
dGhlIG5leHQgY2FsbCB0byByZWFkX2FzeW5jIHdpbGwgcmV0dXJuIDAgdG9vLCBiZWNhdXNlCi0g
ICAgICAgIC8vIHdlYmtpdFNvdXBSZXF1ZXN0SW5wdXRTdHJlYW1GaW5pc2hlZCgpIGlzIG5vdyBU
UlVFLgotICAgIH0KLQotICAgIHdlYmtpdFNvdXBSZXF1ZXN0SW5wdXRTdHJlYW1QZW5kaW5nUmVh
ZEFzeW5jQ29tcGxldGUoc3RyZWFtKTsKLX0KLQotYm9vbCB3ZWJraXRTb3VwUmVxdWVzdElucHV0
U3RyZWFtRmluaXNoZWQoV2ViS2l0U291cFJlcXVlc3RJbnB1dFN0cmVhbSogc3RyZWFtKQotewot
ICAgIHJldHVybiAhd2Via2l0U291cFJlcXVlc3RJbnB1dFN0cmVhbUlzV2FpdGluZ0ZvckRhdGEo
c3RyZWFtKTsKLX0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3Mvc291cC9X
ZWJLaXRTb3VwUmVxdWVzdElucHV0U3RyZWFtLmggYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNz
L3NvdXAvV2ViS2l0U291cFJlcXVlc3RJbnB1dFN0cmVhbS5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCBhM2M3MDIwOGNjMTRmNGRjZGRiY2Q5YzRhYzRiNWQ5ZjZmOTQzZDNkLi4wMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJLaXQy
L1dlYlByb2Nlc3Mvc291cC9XZWJLaXRTb3VwUmVxdWVzdElucHV0U3RyZWFtLmgKKysrIC9kZXYv
bnVsbApAQCAtMSw1NSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEyIElnYWxpYSBT
LkwuCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0
cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05V
IExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBG
cmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogdmVyc2lvbiAyIG9mIHRoZSBMaWNl
bnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMg
bGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVs
LAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQg
d2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vu
c2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBj
b3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3
aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0
ZSB0bwotICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4g
U3RyZWV0LCBGaWZ0aCBGbG9vciwKLSAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotICov
Ci0KLSNpZm5kZWYgV2ViS2l0U291cFJlcXVlc3RJbnB1dFN0cmVhbV9oCi0jZGVmaW5lIFdlYktp
dFNvdXBSZXF1ZXN0SW5wdXRTdHJlYW1faAotCi0jaW5jbHVkZSA8Z2lvL2dpby5oPgotCi1HX0JF
R0lOX0RFQ0xTCi0KLSNkZWZpbmUgV0VCS0lUX1RZUEVfU09VUF9SRVFVRVNUX0lOUFVUX1NUUkVB
TSAgICAgICAgICAgICh3ZWJraXRfc291cF9yZXF1ZXN0X2lucHV0X3N0cmVhbV9nZXRfdHlwZSgp
KQotI2RlZmluZSBXRUJLSVRfU09VUF9SRVFVRVNUX0lOUFVUX1NUUkVBTShvYmplY3QpICAgICAg
ICAgKEdfVFlQRV9DSEVDS19JTlNUQU5DRV9DQVNUKChvYmplY3QpLCBXRUJLSVRfVFlQRV9TT1VQ
X1JFUVVFU1RfSU5QVVRfU1RSRUFNLCBXZWJLaXRTb3VwUmVxdWVzdElucHV0U3RyZWFtKSkKLSNk
ZWZpbmUgV0VCS0lUX0lTX1NPVVBfUkVRVUVTVF9JTlBVVF9TVFJFQU0ob2JqZWN0KSAgICAgIChH
X1RZUEVfQ0hFQ0tfSU5TVEFOQ0VfVFlQRSgob2JqZWN0KSwgV0VCS0lUX1RZUEVfU09VUF9SRVFV
RVNUX0lOUFVUX1NUUkVBTSkpCi0jZGVmaW5lIFdFQktJVF9TT1VQX1JFUVVFU1RfSU5QVVRfU1RS
RUFNX0NMQVNTKGtsYXNzKSAgICAoR19UWVBFX0NIRUNLX0NMQVNTX0NBU1QoKGtsYXNzKSwgV0VC
S0lUX1RZUEVfU09VUF9SRVFVRVNUX0lOUFVUX1NUUkVBTSwgV2ViS2l0U291cFJlcXVlc3RJbnB1
dFN0cmVhbUNsYXNzKSkKLSNkZWZpbmUgV0VCS0lUX0lTX1NPVVBfUkVRVUVTVF9JTlBVVF9TVFJF
QU1fQ0xBU1Moa2xhc3MpIChHX1RZUEVfQ0hFQ0tfQ0xBU1NfVFlQRSgoa2xhc3MpLCBXRUJLSVRf
VFlQRV9TT1VQX1JFUVVFU1RfSU5QVVRfU1RSRUFNKSkKLSNkZWZpbmUgV0VCS0lUX1NPVVBfUkVR
VUVTVF9JTlBVVF9TVFJFQU1fR0VUX0NMQVNTKG9iaikgIChHX1RZUEVfSU5TVEFOQ0VfR0VUX0NM
QVNTKChvYmopLCBXRUJLSVRfVFlQRV9TT1VQX1JFUVVFU1RfSU5QVVRfU1RSRUFNLCBXZWJLaXRT
b3VwUmVxdWVzdElucHV0U3RyZWFtQ2xhc3MpKQotCi10eXBlZGVmIHN0cnVjdCBfV2ViS2l0U291
cFJlcXVlc3RJbnB1dFN0cmVhbSBXZWJLaXRTb3VwUmVxdWVzdElucHV0U3RyZWFtOwotdHlwZWRl
ZiBzdHJ1Y3QgX1dlYktpdFNvdXBSZXF1ZXN0SW5wdXRTdHJlYW1DbGFzcyBXZWJLaXRTb3VwUmVx
dWVzdElucHV0U3RyZWFtQ2xhc3M7Ci10eXBlZGVmIHN0cnVjdCBfV2ViS2l0U291cFJlcXVlc3RJ
bnB1dFN0cmVhbVByaXZhdGUgV2ViS2l0U291cFJlcXVlc3RJbnB1dFN0cmVhbVByaXZhdGU7Ci0K
LXN0cnVjdCBfV2ViS2l0U291cFJlcXVlc3RJbnB1dFN0cmVhbSB7Ci0gICAgR01lbW9yeUlucHV0
U3RyZWFtIHBhcmVudDsKLQotICAgIFdlYktpdFNvdXBSZXF1ZXN0SW5wdXRTdHJlYW1Qcml2YXRl
KiBwcml2OwotfTsKLQotc3RydWN0IF9XZWJLaXRTb3VwUmVxdWVzdElucHV0U3RyZWFtQ2xhc3Mg
ewotICAgIEdNZW1vcnlJbnB1dFN0cmVhbUNsYXNzIHBhcmVudDsKLX07Ci0KLUdUeXBlIHdlYmtp
dF9zb3VwX3JlcXVlc3RfaW5wdXRfc3RyZWFtX2dldF90eXBlKCk7Ci1HSW5wdXRTdHJlYW0qIHdl
YmtpdFNvdXBSZXF1ZXN0SW5wdXRTdHJlYW1OZXcodWludDY0X3QgY29udGVudExlbmd0aCk7Ci12
b2lkIHdlYmtpdFNvdXBSZXF1ZXN0SW5wdXRTdHJlYW1BZGREYXRhKFdlYktpdFNvdXBSZXF1ZXN0
SW5wdXRTdHJlYW0qLCBjb25zdCB2b2lkKiBkYXRhLCBzaXplX3QgZGF0YUxlbmd0aCk7Ci1ib29s
IHdlYmtpdFNvdXBSZXF1ZXN0SW5wdXRTdHJlYW1GaW5pc2hlZChXZWJLaXRTb3VwUmVxdWVzdElu
cHV0U3RyZWFtKik7Ci0KLUdfRU5EX0RFQ0xTCi0KLSNlbmRpZiAvLyBXZWJLaXRTb3VwUmVxdWVz
dElucHV0U3RyZWFtX2gK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>226909</attachid>
            <date>2014-03-17 07:02:55 -0700</date>
            <delta_ts>2014-04-12 11:16:15 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-126344-20140317150231.patch</filename>
            <type>text/plain</type>
            <size>41612</size>
            <attacher name="Diego Pino">dpino</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTY1NjgwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cKaW5kZXggYTY4OTczNDM1ZTVhN2Uw
OTBlYzhkMzM5NDIyOTg1YzIxMzRmMTMyNS4uOWZhOWE2MWZhMzczYzhhY2FhOGI5MDg5ODg1NTZm
NzNhN2I4YzVjNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJLaXQyL0NoYW5nZUxvZwpAQCAtMSwzICsxLDM4IEBACisyMDE0LTAzLTE1ICBEaWVn
byBQaW5vIEdhcmNpYSAgPGRwaW5vQGlnYWxpYS5jb20+CisKKyAgICAgICAgW1NPVVBdIE1vdmUg
V2ViS2l0U291cFJlcXVlc3RHZW5lcmljIGFuZCBXZWJLaXRTb3VwUmVxdWVzdElucHV0U3RyZWFt
IHRvIFNoYXJlL05ldHdvcmsvc291cAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9MTI2MzQ0CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BT
ISkuCisKKyAgICAgICAgKiBQbGF0Zm9ybUdUSy5jbWFrZToKKyAgICAgICAgKiBTaGFyZWQvTmV0
d29yay9DdXN0b21Qcm90b2NvbHMvc291cC9XZWJLaXRTb3VwUmVxdWVzdEdlbmVyaWMuY3BwOiBS
ZW5hbWVkIGZyb20gU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9zb3VwL1dlYktpdFNvdXBSZXF1
ZXN0R2VuZXJpYy5jcHAuCisgICAgICAgICh3ZWJraXRTb3VwUmVxdWVzdEdlbmVyaWNGaW5hbGl6
ZSk6CisgICAgICAgICh3ZWJraXRfc291cF9yZXF1ZXN0X2dlbmVyaWNfaW5pdCk6CisgICAgICAg
ICh3ZWJraXRTb3VwUmVxdWVzdEdlbmVyaWNTZW5kQXN5bmMpOgorICAgICAgICAod2Via2l0U291
cFJlcXVlc3RHZW5lcmljU2VuZEZpbmlzaCk6CisgICAgICAgICh3ZWJraXRTb3VwUmVxdWVzdEdl
bmVyaWNHZXRDb250ZW50TGVuZ3RoKToKKyAgICAgICAgKHdlYmtpdFNvdXBSZXF1ZXN0R2VuZXJp
Y0dldENvbnRlbnRUeXBlKToKKyAgICAgICAgKHdlYmtpdF9zb3VwX3JlcXVlc3RfZ2VuZXJpY19j
bGFzc19pbml0KToKKyAgICAgICAgKHdlYmtpdFNvdXBSZXF1ZXN0R2VuZXJpY1NldENvbnRlbnRM
ZW5ndGgpOgorICAgICAgICAod2Via2l0U291cFJlcXVlc3RHZW5lcmljU2V0Q29udGVudFR5cGUp
OgorICAgICAgICAqIFNoYXJlZC9OZXR3b3JrL0N1c3RvbVByb3RvY29scy9zb3VwL1dlYktpdFNv
dXBSZXF1ZXN0R2VuZXJpYy5oOiBSZW5hbWVkIGZyb20gU291cmNlL1dlYktpdDIvV2ViUHJvY2Vz
cy9zb3VwL1dlYktpdFNvdXBSZXF1ZXN0R2VuZXJpYy5oLgorICAgICAgICAqIFNoYXJlZC9OZXR3
b3JrL0N1c3RvbVByb3RvY29scy9zb3VwL1dlYktpdFNvdXBSZXF1ZXN0SW5wdXRTdHJlYW0uY3Bw
OiBSZW5hbWVkIGZyb20gU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9zb3VwL1dlYktpdFNvdXBS
ZXF1ZXN0SW5wdXRTdHJlYW0uY3BwLgorICAgICAgICAoQXN5bmNSZWFkRGF0YTo6QXN5bmNSZWFk
RGF0YSk6CisgICAgICAgICh3ZWJraXRTb3VwUmVxdWVzdElucHV0U3RyZWFtUmVhZEFzeW5jUmVz
dWx0Q29tcGxldGUpOgorICAgICAgICAod2Via2l0U291cFJlcXVlc3RJbnB1dFN0cmVhbVBlbmRp
bmdSZWFkQXN5bmNDb21wbGV0ZSk6CisgICAgICAgICh3ZWJraXRTb3VwUmVxdWVzdElucHV0U3Ry
ZWFtSGFzRGF0YVRvUmVhZCk6CisgICAgICAgICh3ZWJraXRTb3VwUmVxdWVzdElucHV0U3RyZWFt
SXNXYWl0aW5nRm9yRGF0YSk6CisgICAgICAgICh3ZWJraXRTb3VwUmVxdWVzdElucHV0U3RyZWFt
UmVhZEFzeW5jKToKKyAgICAgICAgKHdlYmtpdFNvdXBSZXF1ZXN0SW5wdXRTdHJlYW1SZWFkRmlu
aXNoKToKKyAgICAgICAgKHdlYmtpdFNvdXBSZXF1ZXN0SW5wdXRTdHJlYW1GaW5hbGl6ZSk6Cisg
ICAgICAgICh3ZWJraXRfc291cF9yZXF1ZXN0X2lucHV0X3N0cmVhbV9pbml0KToKKyAgICAgICAg
KHdlYmtpdF9zb3VwX3JlcXVlc3RfaW5wdXRfc3RyZWFtX2NsYXNzX2luaXQpOgorICAgICAgICAo
d2Via2l0U291cFJlcXVlc3RJbnB1dFN0cmVhbU5ldyk6CisgICAgICAgICh3ZWJraXRTb3VwUmVx
dWVzdElucHV0U3RyZWFtQWRkRGF0YSk6CisgICAgICAgICh3ZWJraXRTb3VwUmVxdWVzdElucHV0
U3RyZWFtRmluaXNoZWQpOgorICAgICAgICAqIFNoYXJlZC9OZXR3b3JrL0N1c3RvbVByb3RvY29s
cy9zb3VwL1dlYktpdFNvdXBSZXF1ZXN0SW5wdXRTdHJlYW0uaDogUmVuYW1lZCBmcm9tIFNvdXJj
ZS9XZWJLaXQyL1dlYlByb2Nlc3Mvc291cC9XZWJLaXRTb3VwUmVxdWVzdElucHV0U3RyZWFtLmgu
CisKIDIwMTQtMDMtMTQgIEFsZXhleSBQcm9za3VyeWFrb3YgIDxhcEBhcHBsZS5jb20+CiAKICAg
ICAgICAgW01hY10gU3luYyBleHRlbmRlZCBhdHRyaWJ1dGUgcmVsYXRlZCBydWxlcyB3aXRoIEFw
cFNhbmRib3ggcHJvZmlsZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvUGxhdGZvcm1FZmwu
Y21ha2UgYi9Tb3VyY2UvV2ViS2l0Mi9QbGF0Zm9ybUVmbC5jbWFrZQppbmRleCBmOTYyNWQ5ODVl
NGJiMmExMmZiZTg0MmQ5N2IxNTJkZWJkZTAyYmQyLi4zOGI3Zjg4NzM2MDljOGU3MDRkZGYwOWMx
MTQ4MWU0Y2RkOGNhMDYwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9QbGF0Zm9ybUVmbC5j
bWFrZQorKysgYi9Tb3VyY2UvV2ViS2l0Mi9QbGF0Zm9ybUVmbC5jbWFrZQpAQCAtMjcsNiArMjcs
OSBAQCBsaXN0KEFQUEVORCBXZWJLaXQyX1NPVVJDRVMKIAogICAgIFNoYXJlZC9Eb3dubG9hZHMv
c291cC9Eb3dubG9hZFNvdXAuY3BwCiAKKyAgICBXZWJQcm9jZXNzL3NvdXAvV2ViS2l0U291cFJl
cXVlc3RHZW5lcmljLmNwcAorICAgIFdlYlByb2Nlc3Mvc291cC9XZWJLaXRTb3VwUmVxdWVzdElu
cHV0U3RyZWFtLmNwcAorCiAgICAgU2hhcmVkL1BsdWdpbnMvTmV0c2NhcGUveDExL05ldHNjYXBl
UGx1Z2luTW9kdWxlWDExLmNwcAogCiAgICAgU2hhcmVkL2NhaXJvL1NoYXJlYWJsZUJpdG1hcENh
aXJvLmNwcApAQCAtMTg2LDggKzE4OSw2IEBAIGxpc3QoQVBQRU5EIFdlYktpdDJfU09VUkNFUwog
ICAgIFdlYlByb2Nlc3MvZWZsL1NlY2NvbXBGaWx0ZXJzV2ViUHJvY2Vzc0VmbC5jcHAKICAgICBX
ZWJQcm9jZXNzL2VmbC9XZWJQcm9jZXNzTWFpbkVmbC5jcHAKIAotICAgIFdlYlByb2Nlc3Mvc291
cC9XZWJLaXRTb3VwUmVxdWVzdEdlbmVyaWMuY3BwCi0gICAgV2ViUHJvY2Vzcy9zb3VwL1dlYktp
dFNvdXBSZXF1ZXN0SW5wdXRTdHJlYW0uY3BwCiAgICAgV2ViUHJvY2Vzcy9zb3VwL1dlYlByb2Nl
c3NTb3VwLmNwcAogICAgIFdlYlByb2Nlc3Mvc291cC9XZWJTb3VwUmVxdWVzdE1hbmFnZXIuY3Bw
CiApCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9QbGF0Zm9ybUdUSy5jbWFrZSBiL1NvdXJj
ZS9XZWJLaXQyL1BsYXRmb3JtR1RLLmNtYWtlCmluZGV4IDI0ZGNiYTg4ZjU0ODQ5MzBmMDJkYTc5
MjQyNTEyMjVhZTAzMzEzMDQuLmM3NTQ0ZjQ4MGE4MDc1YjU2NDcxMzZjOTI2YzNjYjEyMjIzZWJi
MTggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1BsYXRmb3JtR1RLLmNtYWtlCisrKyBiL1Nv
dXJjZS9XZWJLaXQyL1BsYXRmb3JtR1RLLmNtYWtlCkBAIC00OCw2ICs0OCw4IEBAIGxpc3QoQVBQ
RU5EIFdlYktpdDJfU09VUkNFUwogCiAgICAgU2hhcmVkL05ldHdvcmsvQ3VzdG9tUHJvdG9jb2xz
L3NvdXAvQ3VzdG9tUHJvdG9jb2xNYW5hZ2VySW1wbC5jcHAKICAgICBTaGFyZWQvTmV0d29yay9D
dXN0b21Qcm90b2NvbHMvc291cC9DdXN0b21Qcm90b2NvbE1hbmFnZXJTb3VwLmNwcAorICAgIFNo
YXJlZC9OZXR3b3JrL0N1c3RvbVByb3RvY29scy9zb3VwL1dlYktpdFNvdXBSZXF1ZXN0R2VuZXJp
Yy5jcHAKKyAgICBTaGFyZWQvTmV0d29yay9DdXN0b21Qcm90b2NvbHMvc291cC9XZWJLaXRTb3Vw
UmVxdWVzdElucHV0U3RyZWFtLmNwcAogCiAgICAgU2hhcmVkL1BsdWdpbnMvTmV0c2NhcGUveDEx
L05ldHNjYXBlUGx1Z2luTW9kdWxlWDExLmNwcAogCkBAIC0zMTAsOCArMzEyLDYgQEAgbGlzdChB
UFBFTkQgV2ViS2l0Ml9TT1VSQ0VTCiAgICAgV2ViUHJvY2Vzcy9ndGsvV2ViR3RrSW5qZWN0ZWRC
dW5kbGVNYWluLmNwcAogICAgIFdlYlByb2Nlc3MvZ3RrL1dlYlByb2Nlc3NNYWluR3RrLmNwcAog
Ci0gICAgV2ViUHJvY2Vzcy9zb3VwL1dlYktpdFNvdXBSZXF1ZXN0R2VuZXJpYy5jcHAKLSAgICBX
ZWJQcm9jZXNzL3NvdXAvV2ViS2l0U291cFJlcXVlc3RJbnB1dFN0cmVhbS5jcHAKICAgICBXZWJQ
cm9jZXNzL3NvdXAvV2ViUHJvY2Vzc1NvdXAuY3BwCiApCiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJLaXQyL1NoYXJlZC9OZXR3b3JrL0N1c3RvbVByb3RvY29scy9zb3VwL1dlYktpdFNvdXBSZXF1
ZXN0R2VuZXJpYy5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvTmV0d29yay9DdXN0b21Qcm90
b2NvbHMvc291cC9XZWJLaXRTb3VwUmVxdWVzdEdlbmVyaWMuY3BwCm5ldyBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjU1YzUw
Mzc1YTBjM2UzYmYwY2Y4YTU1MjNjZTE1NmU1ODg2NDQzZTMKLS0tIC9kZXYvbnVsbAorKysgYi9T
b3VyY2UvV2ViS2l0Mi9TaGFyZWQvTmV0d29yay9DdXN0b21Qcm90b2NvbHMvc291cC9XZWJLaXRT
b3VwUmVxdWVzdEdlbmVyaWMuY3BwCkBAIC0wLDAgKzEsMTA3IEBACisvKgorICogQ29weXJpZ2h0
IChDKSAyMDEyIElnYWxpYSBTLkwuCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdh
cmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRo
ZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMg
cHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVy
c2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJz
aW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0
IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0
IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdl
bmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxk
IGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBM
aWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcu
TElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwg
SW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIx
MTAtMTMwMSwgVVNBLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJXZWJL
aXRTb3VwUmVxdWVzdEdlbmVyaWMuaCIKKworI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4K
KworI2lmICFFTkFCTEUoQ1VTVE9NX1BST1RPQ09MUykKKyNpbmNsdWRlICJXZWJQcm9jZXNzLmgi
CisjaW5jbHVkZSAiV2ViU291cFJlcXVlc3RNYW5hZ2VyLmgiCisjZW5kaWYKKwordXNpbmcgbmFt
ZXNwYWNlIFdlYktpdDsKKworR19ERUZJTkVfVFlQRShXZWJLaXRTb3VwUmVxdWVzdEdlbmVyaWMs
IHdlYmtpdF9zb3VwX3JlcXVlc3RfZ2VuZXJpYywgU09VUF9UWVBFX1JFUVVFU1QpCisKK3N0cnVj
dCBfV2ViS2l0U291cFJlcXVlc3RHZW5lcmljUHJpdmF0ZSB7CisgICAgQ1N0cmluZyBtaW1lVHlw
ZTsKKyAgICBnb2Zmc2V0IGNvbnRlbnRMZW5ndGg7Cit9OworCitzdGF0aWMgdm9pZCB3ZWJraXRT
b3VwUmVxdWVzdEdlbmVyaWNGaW5hbGl6ZShHT2JqZWN0KiBvYmplY3QpCit7CisgICAgV0VCS0lU
X1NPVVBfUkVRVUVTVF9HRU5FUklDKG9iamVjdCktPnByaXYtPn5XZWJLaXRTb3VwUmVxdWVzdEdl
bmVyaWNQcml2YXRlKCk7CisgICAgR19PQkpFQ1RfQ0xBU1Mod2Via2l0X3NvdXBfcmVxdWVzdF9n
ZW5lcmljX3BhcmVudF9jbGFzcyktPmZpbmFsaXplKG9iamVjdCk7Cit9CisKK3N0YXRpYyB2b2lk
IHdlYmtpdF9zb3VwX3JlcXVlc3RfZ2VuZXJpY19pbml0KFdlYktpdFNvdXBSZXF1ZXN0R2VuZXJp
YyogcmVxdWVzdCkKK3sKKyAgICBXZWJLaXRTb3VwUmVxdWVzdEdlbmVyaWNQcml2YXRlKiBwcml2
ID0gR19UWVBFX0lOU1RBTkNFX0dFVF9QUklWQVRFKHJlcXVlc3QsIFdFQktJVF9UWVBFX1NPVVBf
UkVRVUVTVF9HRU5FUklDLCBXZWJLaXRTb3VwUmVxdWVzdEdlbmVyaWNQcml2YXRlKTsKKyAgICBy
ZXF1ZXN0LT5wcml2ID0gcHJpdjsKKyAgICBuZXcgKHByaXYpIFdlYktpdFNvdXBSZXF1ZXN0R2Vu
ZXJpY1ByaXZhdGUoKTsKK30KKworc3RhdGljIHZvaWQgd2Via2l0U291cFJlcXVlc3RHZW5lcmlj
U2VuZEFzeW5jKFNvdXBSZXF1ZXN0KiByZXF1ZXN0LCBHQ2FuY2VsbGFibGUqIGNhbmNlbGxhYmxl
LCBHQXN5bmNSZWFkeUNhbGxiYWNrIGNhbGxiYWNrLCBncG9pbnRlciB1c2VyRGF0YSkKK3sKKyNp
ZiBFTkFCTEUoQ1VTVE9NX1BST1RPQ09MUykKKyAgICBDdXN0b21Qcm90b2NvbE1hbmFnZXJJbXBs
KiBjdXN0b21Qcm90b2NvbE1hbmFnZXIgPSBXRUJLSVRfU09VUF9SRVFVRVNUX0dFTkVSSUNfR0VU
X0NMQVNTKHJlcXVlc3QpLT5jdXN0b21Qcm90b2NvbE1hbmFnZXI7CisgICAgQVNTRVJUKGN1c3Rv
bVByb3RvY29sTWFuYWdlcik7CisgICAgY3VzdG9tUHJvdG9jb2xNYW5hZ2VyLT5zZW5kKGdfdGFz
a19uZXcocmVxdWVzdCwgY2FuY2VsbGFibGUsIGNhbGxiYWNrLCB1c2VyRGF0YSkpOworI2Vsc2UK
KyAgICBXZWJQcm9jZXNzOjpzaGFyZWQoKS5zdXBwbGVtZW50PFdlYlNvdXBSZXF1ZXN0TWFuYWdl
cj4oKS0+c2VuZChnX3Rhc2tfbmV3KHJlcXVlc3QsIGNhbmNlbGxhYmxlLCBjYWxsYmFjaywgdXNl
ckRhdGEpKTsKKyNlbmRpZgorfQorCitzdGF0aWMgR0lucHV0U3RyZWFtKiB3ZWJraXRTb3VwUmVx
dWVzdEdlbmVyaWNTZW5kRmluaXNoKFNvdXBSZXF1ZXN0KiByZXF1ZXN0LCBHQXN5bmNSZXN1bHQq
IHJlc3VsdCwgR0Vycm9yKiogZXJyb3IpCit7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoZ190
YXNrX2lzX3ZhbGlkKHJlc3VsdCwgcmVxdWVzdCksIDApOworI2lmIEVOQUJMRShDVVNUT01fUFJP
VE9DT0xTKQorICAgIEN1c3RvbVByb3RvY29sTWFuYWdlckltcGwqIGN1c3RvbVByb3RvY29sTWFu
YWdlciA9IFdFQktJVF9TT1VQX1JFUVVFU1RfR0VORVJJQ19HRVRfQ0xBU1MocmVxdWVzdCktPmN1
c3RvbVByb3RvY29sTWFuYWdlcjsKKyAgICBBU1NFUlQoY3VzdG9tUHJvdG9jb2xNYW5hZ2VyKTsK
KyAgICByZXR1cm4gY3VzdG9tUHJvdG9jb2xNYW5hZ2VyLT5maW5pc2goR19UQVNLKHJlc3VsdCks
IGVycm9yKTsKKyNlbHNlCisgICAgcmV0dXJuIFdlYlByb2Nlc3M6OnNoYXJlZCgpLnN1cHBsZW1l
bnQ8V2ViU291cFJlcXVlc3RNYW5hZ2VyPigpLT5maW5pc2goR19UQVNLKHJlc3VsdCksIGVycm9y
KTsKKyNlbmRpZgorfQorCitzdGF0aWMgZ29mZnNldCB3ZWJraXRTb3VwUmVxdWVzdEdlbmVyaWNH
ZXRDb250ZW50TGVuZ3RoKFNvdXBSZXF1ZXN0KiByZXF1ZXN0KQoreworICAgIHJldHVybiBXRUJL
SVRfU09VUF9SRVFVRVNUX0dFTkVSSUMocmVxdWVzdCktPnByaXYtPmNvbnRlbnRMZW5ndGg7Cit9
CisKK3N0YXRpYyBjb25zdCBjaGFyKiB3ZWJraXRTb3VwUmVxdWVzdEdlbmVyaWNHZXRDb250ZW50
VHlwZShTb3VwUmVxdWVzdCogcmVxdWVzdCkKK3sKKyAgICByZXR1cm4gV0VCS0lUX1NPVVBfUkVR
VUVTVF9HRU5FUklDKHJlcXVlc3QpLT5wcml2LT5taW1lVHlwZS5kYXRhKCk7Cit9CisKK3N0YXRp
YyB2b2lkIHdlYmtpdF9zb3VwX3JlcXVlc3RfZ2VuZXJpY19jbGFzc19pbml0KFdlYktpdFNvdXBS
ZXF1ZXN0R2VuZXJpY0NsYXNzKiByZXF1ZXN0R2VuZXJpY0NsYXNzKQoreworICAgIEdPYmplY3RD
bGFzcyogZ09iamVjdENsYXNzID0gR19PQkpFQ1RfQ0xBU1MocmVxdWVzdEdlbmVyaWNDbGFzcyk7
CisgICAgZ09iamVjdENsYXNzLT5maW5hbGl6ZSA9IHdlYmtpdFNvdXBSZXF1ZXN0R2VuZXJpY0Zp
bmFsaXplOworCisgICAgU291cFJlcXVlc3RDbGFzcyogcmVxdWVzdENsYXNzID0gU09VUF9SRVFV
RVNUX0NMQVNTKHJlcXVlc3RHZW5lcmljQ2xhc3MpOworICAgIHJlcXVlc3RDbGFzcy0+c2VuZF9h
c3luYyA9IHdlYmtpdFNvdXBSZXF1ZXN0R2VuZXJpY1NlbmRBc3luYzsKKyAgICByZXF1ZXN0Q2xh
c3MtPnNlbmRfZmluaXNoID0gd2Via2l0U291cFJlcXVlc3RHZW5lcmljU2VuZEZpbmlzaDsKKyAg
ICByZXF1ZXN0Q2xhc3MtPmdldF9jb250ZW50X2xlbmd0aCA9IHdlYmtpdFNvdXBSZXF1ZXN0R2Vu
ZXJpY0dldENvbnRlbnRMZW5ndGg7CisgICAgcmVxdWVzdENsYXNzLT5nZXRfY29udGVudF90eXBl
ID0gd2Via2l0U291cFJlcXVlc3RHZW5lcmljR2V0Q29udGVudFR5cGU7CisKKyAgICBnX3R5cGVf
Y2xhc3NfYWRkX3ByaXZhdGUocmVxdWVzdEdlbmVyaWNDbGFzcywgc2l6ZW9mKFdlYktpdFNvdXBS
ZXF1ZXN0R2VuZXJpY1ByaXZhdGUpKTsKK30KKwordm9pZCB3ZWJraXRTb3VwUmVxdWVzdEdlbmVy
aWNTZXRDb250ZW50TGVuZ3RoKFdlYktpdFNvdXBSZXF1ZXN0R2VuZXJpYyogcmVxdWVzdCwgZ29m
ZnNldCBjb250ZW50TGVuZ3RoKQoreworICAgIHJlcXVlc3QtPnByaXYtPmNvbnRlbnRMZW5ndGgg
PSBjb250ZW50TGVuZ3RoOworfQorCit2b2lkIHdlYmtpdFNvdXBSZXF1ZXN0R2VuZXJpY1NldENv
bnRlbnRUeXBlKFdlYktpdFNvdXBSZXF1ZXN0R2VuZXJpYyogcmVxdWVzdCwgY29uc3QgY2hhciog
bWltZVR5cGUpCit7CisgICAgcmVxdWVzdC0+cHJpdi0+bWltZVR5cGUgPSBtaW1lVHlwZTsKK30K
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9OZXR3b3JrL0N1c3RvbVByb3RvY29s
cy9zb3VwL1dlYktpdFNvdXBSZXF1ZXN0R2VuZXJpYy5oIGIvU291cmNlL1dlYktpdDIvU2hhcmVk
L05ldHdvcmsvQ3VzdG9tUHJvdG9jb2xzL3NvdXAvV2ViS2l0U291cFJlcXVlc3RHZW5lcmljLmgK
bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMC4uNWM1ZDNhZDJkNTExNjg0N2M5NzFkM2Q5MWM2ZWM1Zjc3YTU0NGViNAotLS0g
L2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9OZXR3b3JrL0N1c3RvbVByb3Rv
Y29scy9zb3VwL1dlYktpdFNvdXBSZXF1ZXN0R2VuZXJpYy5oCkBAIC0wLDAgKzEsNjQgQEAKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgSWdhbGlhIFMuTC4KKyAqCisgKiBUaGlzIGxpYnJhcnkg
aXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2Rp
ZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwor
ICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsg
ZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikg
YW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGlu
IHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FS
UkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRB
QklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUK
KyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoK
KyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdl
bmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhl
IGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2Fy
ZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICog
Qm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2lmbmRlZiBXZWJLaXRTb3VwUmVx
dWVzdEdlbmVyaWNfaAorI2RlZmluZSBXZWJLaXRTb3VwUmVxdWVzdEdlbmVyaWNfaAorCisjaW5j
bHVkZSA8Z2xpYi1vYmplY3QuaD4KKyNpbmNsdWRlIDxsaWJzb3VwL3NvdXAuaD4KKworI2lmIEVO
QUJMRShDVVNUT01fUFJPVE9DT0xTKQorI2luY2x1ZGUgIkN1c3RvbVByb3RvY29sTWFuYWdlcklt
cGwuaCIKKyNlbmRpZgorCitHX0JFR0lOX0RFQ0xTCisKKyNkZWZpbmUgV0VCS0lUX1RZUEVfU09V
UF9SRVFVRVNUX0dFTkVSSUMgICAgICAgICAgICAod2Via2l0X3NvdXBfcmVxdWVzdF9nZW5lcmlj
X2dldF90eXBlKCkpCisjZGVmaW5lIFdFQktJVF9TT1VQX1JFUVVFU1RfR0VORVJJQyhvYmplY3Qp
ICAgICAgICAgKEdfVFlQRV9DSEVDS19JTlNUQU5DRV9DQVNUKChvYmplY3QpLCBXRUJLSVRfVFlQ
RV9TT1VQX1JFUVVFU1RfR0VORVJJQywgV2ViS2l0U291cFJlcXVlc3RHZW5lcmljKSkKKyNkZWZp
bmUgV0VCS0lUX0lTX1NPVVBfUkVRVUVTVF9HRU5FUklDKG9iamVjdCkgICAgICAoR19UWVBFX0NI
RUNLX0lOU1RBTkNFX1RZUEUoKG9iamVjdCksIFdFQktJVF9UWVBFX1NPVVBfUkVRVUVTVF9HRU5F
UklDKSkKKyNkZWZpbmUgV0VCS0lUX1NPVVBfUkVRVUVTVF9HRU5FUklDX0NMQVNTKGtsYXNzKSAg
ICAoR19UWVBFX0NIRUNLX0NMQVNTX0NBU1QoKGtsYXNzKSwgV0VCS0lUX1RZUEVfU09VUF9SRVFV
RVNUX0dFTkVSSUMsIFdlYktpdFNvdXBSZXF1ZXN0R2VuZXJpY0NsYXNzKSkKKyNkZWZpbmUgV0VC
S0lUX0lTX1NPVVBfUkVRVUVTVF9HRU5FUklDX0NMQVNTKGtsYXNzKSAoR19UWVBFX0NIRUNLX0NM
QVNTX1RZUEUoKGtsYXNzKSwgV0VCS0lUX1RZUEVfU09VUF9SRVFVRVNUX0dFTkVSSUMpKQorI2Rl
ZmluZSBXRUJLSVRfU09VUF9SRVFVRVNUX0dFTkVSSUNfR0VUX0NMQVNTKG9iaikgIChHX1RZUEVf
SU5TVEFOQ0VfR0VUX0NMQVNTKChvYmopLCBXRUJLSVRfVFlQRV9TT1VQX1JFUVVFU1RfR0VORVJJ
QywgV2ViS2l0U291cFJlcXVlc3RHZW5lcmljQ2xhc3MpKQorCit0eXBlZGVmIHN0cnVjdCBfV2Vi
S2l0U291cFJlcXVlc3RHZW5lcmljIFdlYktpdFNvdXBSZXF1ZXN0R2VuZXJpYzsKK3R5cGVkZWYg
c3RydWN0IF9XZWJLaXRTb3VwUmVxdWVzdEdlbmVyaWNDbGFzcyBXZWJLaXRTb3VwUmVxdWVzdEdl
bmVyaWNDbGFzczsKK3R5cGVkZWYgc3RydWN0IF9XZWJLaXRTb3VwUmVxdWVzdEdlbmVyaWNQcml2
YXRlIFdlYktpdFNvdXBSZXF1ZXN0R2VuZXJpY1ByaXZhdGU7CisKK3N0cnVjdCBfV2ViS2l0U291
cFJlcXVlc3RHZW5lcmljIHsKKyAgICBTb3VwUmVxdWVzdCBwYXJlbnQ7CisKKyAgICBXZWJLaXRT
b3VwUmVxdWVzdEdlbmVyaWNQcml2YXRlICpwcml2OworfTsKKworc3RydWN0IF9XZWJLaXRTb3Vw
UmVxdWVzdEdlbmVyaWNDbGFzcyB7CisgICAgU291cFJlcXVlc3RDbGFzcyBwYXJlbnQ7CisKKyNp
ZiBFTkFCTEUoQ1VTVE9NX1BST1RPQ09MUykKKyAgICBXZWJLaXQ6OkN1c3RvbVByb3RvY29sTWFu
YWdlckltcGwqIGN1c3RvbVByb3RvY29sTWFuYWdlcjsKKyNlbmRpZgorfTsKKworR1R5cGUgd2Vi
a2l0X3NvdXBfcmVxdWVzdF9nZW5lcmljX2dldF90eXBlKCk7CisKK3ZvaWQgd2Via2l0U291cFJl
cXVlc3RHZW5lcmljU2V0Q29udGVudExlbmd0aChXZWJLaXRTb3VwUmVxdWVzdEdlbmVyaWMqLCBn
b2Zmc2V0IGNvbnRlbnRMZW5ndGgpOwordm9pZCB3ZWJraXRTb3VwUmVxdWVzdEdlbmVyaWNTZXRD
b250ZW50VHlwZShXZWJLaXRTb3VwUmVxdWVzdEdlbmVyaWMqLCBjb25zdCBjaGFyKiBtaW1lVHlw
ZSk7CisKK0dfRU5EX0RFQ0xTCisKKyNlbmRpZiAvLyBXZWJLaXRTb3VwUmVxdWVzdEdlbmVyaWNf
aApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvU2hhcmVkL05ldHdvcmsvQ3VzdG9tUHJvdG9j
b2xzL3NvdXAvV2ViS2l0U291cFJlcXVlc3RJbnB1dFN0cmVhbS5jcHAgYi9Tb3VyY2UvV2ViS2l0
Mi9TaGFyZWQvTmV0d29yay9DdXN0b21Qcm90b2NvbHMvc291cC9XZWJLaXRTb3VwUmVxdWVzdElu
cHV0U3RyZWFtLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi44NTJhNTg1ZDZkNDJhYjFmYTZlNTliMTkxNGI4N2Mw
ZTAzMDg5YWI4Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdDIvU2hhcmVkL05ldHdv
cmsvQ3VzdG9tUHJvdG9jb2xzL3NvdXAvV2ViS2l0U291cFJlcXVlc3RJbnB1dFN0cmVhbS5jcHAK
QEAgLTAsMCArMSwxNzQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgSWdhbGlhIFMuTC4K
KyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1
dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGli
cmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUg
U29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2Us
IG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJy
YXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisg
KiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJy
YW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQ
VVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBm
b3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkg
b2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGgg
dGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRv
CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJl
ZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKwor
I2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIldlYktpdFNvdXBSZXF1ZXN0SW5wdXRTdHJl
YW0uaCIKKworI2luY2x1ZGUgPHd0Zi9Pd25QdHIuaD4KKyNpbmNsdWRlIDx3dGYvUGFzc093blB0
ci5oPgorI2luY2x1ZGUgPHd0Zi9UaHJlYWRpbmcuaD4KKyNpbmNsdWRlIDx3dGYvZ29iamVjdC9H
UmVmUHRyLmg+CisKK3N0cnVjdCBBc3luY1JlYWREYXRhIHsKKyAgICBBc3luY1JlYWREYXRhKEdT
aW1wbGVBc3luY1Jlc3VsdCogcmVzdWx0LCB2b2lkKiBidWZmZXIsIGdzaXplIGNvdW50LCBHQ2Fu
Y2VsbGFibGUqIGNhbmNlbGxhYmxlKQorICAgICAgICA6IHJlc3VsdChyZXN1bHQpCisgICAgICAg
ICwgYnVmZmVyKGJ1ZmZlcikKKyAgICAgICAgLCBjb3VudChjb3VudCkKKyAgICAgICAgLCBjYW5j
ZWxsYWJsZShjYW5jZWxsYWJsZSkKKyAgICB7CisgICAgfQorCisgICAgR1JlZlB0cjxHU2ltcGxl
QXN5bmNSZXN1bHQ+IHJlc3VsdDsKKyAgICB2b2lkKiBidWZmZXI7CisgICAgc2l6ZV90IGNvdW50
OworICAgIEdSZWZQdHI8R0NhbmNlbGxhYmxlPiBjYW5jZWxsYWJsZTsKK307CisKK3N0cnVjdCBf
V2ViS2l0U291cFJlcXVlc3RJbnB1dFN0cmVhbVByaXZhdGUgeworICAgIHVpbnQ2NF90IGNvbnRl
bnRMZW5ndGg7CisgICAgdWludDY0X3QgYnl0ZXNSZWNlaXZlZDsKKyAgICB1aW50NjRfdCBieXRl
c1JlYWQ7CisKKyAgICBNdXRleCByZWFkTG9jazsKKyAgICBPd25QdHI8QXN5bmNSZWFkRGF0YT4g
cGVuZGluZ0FzeW5jUmVhZDsKK307CisKK0dfREVGSU5FX1RZUEUoV2ViS2l0U291cFJlcXVlc3RJ
bnB1dFN0cmVhbSwgd2Via2l0X3NvdXBfcmVxdWVzdF9pbnB1dF9zdHJlYW0sIEdfVFlQRV9NRU1P
UllfSU5QVVRfU1RSRUFNKQorCitzdGF0aWMgdm9pZCB3ZWJraXRTb3VwUmVxdWVzdElucHV0U3Ry
ZWFtUmVhZEFzeW5jUmVzdWx0Q29tcGxldGUoV2ViS2l0U291cFJlcXVlc3RJbnB1dFN0cmVhbSog
c3RyZWFtLCBHU2ltcGxlQXN5bmNSZXN1bHQqIHJlc3VsdCwgdm9pZCogYnVmZmVyLCBnc2l6ZSBj
b3VudCwgR0NhbmNlbGxhYmxlKiBjYW5jZWxsYWJsZSkKK3sKKyAgICBHRXJyb3IqIGVycm9yID0g
MDsKKyAgICBnc3NpemUgYnl0ZXNSZWFkID0gR19JTlBVVF9TVFJFQU1fR0VUX0NMQVNTKHN0cmVh
bSktPnJlYWRfZm4oR19JTlBVVF9TVFJFQU0oc3RyZWFtKSwgYnVmZmVyLCBjb3VudCwgY2FuY2Vs
bGFibGUsICZlcnJvcik7CisgICAgaWYgKCFlcnJvcikgeworICAgICAgICBnX3NpbXBsZV9hc3lu
Y19yZXN1bHRfc2V0X29wX3Jlc19nc3NpemUocmVzdWx0LCBieXRlc1JlYWQpOworICAgICAgICBz
dHJlYW0tPnByaXYtPmJ5dGVzUmVhZCArPSBieXRlc1JlYWQ7CisgICAgfSBlbHNlCisgICAgICAg
IGdfc2ltcGxlX2FzeW5jX3Jlc3VsdF90YWtlX2Vycm9yKHJlc3VsdCwgZXJyb3IpOworICAgIGdf
c2ltcGxlX2FzeW5jX3Jlc3VsdF9jb21wbGV0ZV9pbl9pZGxlKHJlc3VsdCk7Cit9CisKK3N0YXRp
YyB2b2lkIHdlYmtpdFNvdXBSZXF1ZXN0SW5wdXRTdHJlYW1QZW5kaW5nUmVhZEFzeW5jQ29tcGxl
dGUoV2ViS2l0U291cFJlcXVlc3RJbnB1dFN0cmVhbSogc3RyZWFtKQoreworICAgIGlmICghc3Ry
ZWFtLT5wcml2LT5wZW5kaW5nQXN5bmNSZWFkKQorICAgICAgICByZXR1cm47CisKKyAgICBBc3lu
Y1JlYWREYXRhKiBkYXRhID0gc3RyZWFtLT5wcml2LT5wZW5kaW5nQXN5bmNSZWFkLmdldCgpOwor
ICAgIHdlYmtpdFNvdXBSZXF1ZXN0SW5wdXRTdHJlYW1SZWFkQXN5bmNSZXN1bHRDb21wbGV0ZShz
dHJlYW0sIGRhdGEtPnJlc3VsdC5nZXQoKSwgZGF0YS0+YnVmZmVyLCBkYXRhLT5jb3VudCwgZGF0
YS0+Y2FuY2VsbGFibGUuZ2V0KCkpOworICAgIHN0cmVhbS0+cHJpdi0+cGVuZGluZ0FzeW5jUmVh
ZC5jbGVhcigpOworfQorCitzdGF0aWMgYm9vbCB3ZWJraXRTb3VwUmVxdWVzdElucHV0U3RyZWFt
SGFzRGF0YVRvUmVhZChXZWJLaXRTb3VwUmVxdWVzdElucHV0U3RyZWFtKiBzdHJlYW0pCit7Cisg
ICAgcmV0dXJuIHN0cmVhbS0+cHJpdi0+Ynl0ZXNSZWFkIDwgc3RyZWFtLT5wcml2LT5ieXRlc1Jl
Y2VpdmVkOworfQorCitzdGF0aWMgYm9vbCB3ZWJraXRTb3VwUmVxdWVzdElucHV0U3RyZWFtSXNX
YWl0aW5nRm9yRGF0YShXZWJLaXRTb3VwUmVxdWVzdElucHV0U3RyZWFtKiBzdHJlYW0pCit7Cisg
ICAgcmV0dXJuICFzdHJlYW0tPnByaXYtPmNvbnRlbnRMZW5ndGggfHwgc3RyZWFtLT5wcml2LT5i
eXRlc1JlY2VpdmVkIDwgc3RyZWFtLT5wcml2LT5jb250ZW50TGVuZ3RoOworfQorCitzdGF0aWMg
dm9pZCB3ZWJraXRTb3VwUmVxdWVzdElucHV0U3RyZWFtUmVhZEFzeW5jKEdJbnB1dFN0cmVhbSog
aW5wdXRTdHJlYW0sIHZvaWQqIGJ1ZmZlciwgZ3NpemUgY291bnQsIGludCAvKnByaW9yaXR5Ki8s
IEdDYW5jZWxsYWJsZSogY2FuY2VsbGFibGUsIEdBc3luY1JlYWR5Q2FsbGJhY2sgY2FsbGJhY2ss
IGdwb2ludGVyIHVzZXJEYXRhKQoreworICAgIFdlYktpdFNvdXBSZXF1ZXN0SW5wdXRTdHJlYW0q
IHN0cmVhbSA9IFdFQktJVF9TT1VQX1JFUVVFU1RfSU5QVVRfU1RSRUFNKGlucHV0U3RyZWFtKTsK
KyAgICBHUmVmUHRyPEdTaW1wbGVBc3luY1Jlc3VsdD4gcmVzdWx0ID0gYWRvcHRHUmVmKGdfc2lt
cGxlX2FzeW5jX3Jlc3VsdF9uZXcoR19PQkpFQ1Qoc3RyZWFtKSwgY2FsbGJhY2ssIHVzZXJEYXRh
LCByZWludGVycHJldF9jYXN0PHZvaWQqPih3ZWJraXRTb3VwUmVxdWVzdElucHV0U3RyZWFtUmVh
ZEFzeW5jKSkpOworCisgICAgTXV0ZXhMb2NrZXIgbG9ja2VyKHN0cmVhbS0+cHJpdi0+cmVhZExv
Y2spOworCisgICAgaWYgKCF3ZWJraXRTb3VwUmVxdWVzdElucHV0U3RyZWFtSGFzRGF0YVRvUmVh
ZChzdHJlYW0pICYmICF3ZWJraXRTb3VwUmVxdWVzdElucHV0U3RyZWFtSXNXYWl0aW5nRm9yRGF0
YShzdHJlYW0pKSB7CisgICAgICAgIGdfc2ltcGxlX2FzeW5jX3Jlc3VsdF9zZXRfb3BfcmVzX2dz
c2l6ZShyZXN1bHQuZ2V0KCksIDApOworICAgICAgICBnX3NpbXBsZV9hc3luY19yZXN1bHRfY29t
cGxldGVfaW5faWRsZShyZXN1bHQuZ2V0KCkpOworICAgICAgICByZXR1cm47CisgICAgfQorCisg
ICAgaWYgKHdlYmtpdFNvdXBSZXF1ZXN0SW5wdXRTdHJlYW1IYXNEYXRhVG9SZWFkKHN0cmVhbSkp
IHsKKyAgICAgICAgd2Via2l0U291cFJlcXVlc3RJbnB1dFN0cmVhbVJlYWRBc3luY1Jlc3VsdENv
bXBsZXRlKHN0cmVhbSwgcmVzdWx0LmdldCgpLCBidWZmZXIsIGNvdW50LCBjYW5jZWxsYWJsZSk7
CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBzdHJlYW0tPnByaXYtPnBlbmRpbmdBc3lu
Y1JlYWQgPSBhZG9wdFB0cihuZXcgQXN5bmNSZWFkRGF0YShyZXN1bHQuZ2V0KCksIGJ1ZmZlciwg
Y291bnQsIGNhbmNlbGxhYmxlKSk7Cit9CisKK3N0YXRpYyBnc3NpemUgd2Via2l0U291cFJlcXVl
c3RJbnB1dFN0cmVhbVJlYWRGaW5pc2goR0lucHV0U3RyZWFtKiwgR0FzeW5jUmVzdWx0KiByZXN1
bHQsIEdFcnJvcioqKQoreworICAgIEdTaW1wbGVBc3luY1Jlc3VsdCogc2ltcGxlUmVzdWx0ID0g
R19TSU1QTEVfQVNZTkNfUkVTVUxUKHJlc3VsdCk7CisgICAgZ193YXJuX2lmX2ZhaWwoZ19zaW1w
bGVfYXN5bmNfcmVzdWx0X2dldF9zb3VyY2VfdGFnKHNpbXBsZVJlc3VsdCkgPT0gd2Via2l0U291
cFJlcXVlc3RJbnB1dFN0cmVhbVJlYWRBc3luYyk7CisKKyAgICByZXR1cm4gZ19zaW1wbGVfYXN5
bmNfcmVzdWx0X2dldF9vcF9yZXNfZ3NzaXplKHNpbXBsZVJlc3VsdCk7Cit9CisKK3N0YXRpYyB2
b2lkIHdlYmtpdFNvdXBSZXF1ZXN0SW5wdXRTdHJlYW1GaW5hbGl6ZShHT2JqZWN0KiBvYmplY3Qp
Cit7CisgICAgV0VCS0lUX1NPVVBfUkVRVUVTVF9JTlBVVF9TVFJFQU0ob2JqZWN0KS0+cHJpdi0+
fldlYktpdFNvdXBSZXF1ZXN0SW5wdXRTdHJlYW1Qcml2YXRlKCk7CisgICAgR19PQkpFQ1RfQ0xB
U1Mod2Via2l0X3NvdXBfcmVxdWVzdF9pbnB1dF9zdHJlYW1fcGFyZW50X2NsYXNzKS0+ZmluYWxp
emUob2JqZWN0KTsKK30KKworc3RhdGljIHZvaWQgd2Via2l0X3NvdXBfcmVxdWVzdF9pbnB1dF9z
dHJlYW1faW5pdChXZWJLaXRTb3VwUmVxdWVzdElucHV0U3RyZWFtKiBzdHJlYW0pCit7CisgICAg
V2ViS2l0U291cFJlcXVlc3RJbnB1dFN0cmVhbVByaXZhdGUqIHByaXYgPSBHX1RZUEVfSU5TVEFO
Q0VfR0VUX1BSSVZBVEUoc3RyZWFtLCBXRUJLSVRfVFlQRV9TT1VQX1JFUVVFU1RfSU5QVVRfU1RS
RUFNLCBXZWJLaXRTb3VwUmVxdWVzdElucHV0U3RyZWFtUHJpdmF0ZSk7CisgICAgc3RyZWFtLT5w
cml2ID0gcHJpdjsKKyAgICBuZXcgKHByaXYpIFdlYktpdFNvdXBSZXF1ZXN0SW5wdXRTdHJlYW1Q
cml2YXRlKCk7Cit9CisKK3N0YXRpYyB2b2lkIHdlYmtpdF9zb3VwX3JlcXVlc3RfaW5wdXRfc3Ry
ZWFtX2NsYXNzX2luaXQoV2ViS2l0U291cFJlcXVlc3RJbnB1dFN0cmVhbUNsYXNzKiByZXF1ZXN0
U3RyZWFtQ2xhc3MpCit7CisgICAgR09iamVjdENsYXNzKiBnT2JqZWN0Q2xhc3MgPSBHX09CSkVD
VF9DTEFTUyhyZXF1ZXN0U3RyZWFtQ2xhc3MpOworICAgIGdPYmplY3RDbGFzcy0+ZmluYWxpemUg
PSB3ZWJraXRTb3VwUmVxdWVzdElucHV0U3RyZWFtRmluYWxpemU7CisKKyAgICBHSW5wdXRTdHJl
YW1DbGFzcyogaW5wdXRTdHJlYW1DbGFzcyA9IEdfSU5QVVRfU1RSRUFNX0NMQVNTKHJlcXVlc3RT
dHJlYW1DbGFzcyk7CisgICAgaW5wdXRTdHJlYW1DbGFzcy0+cmVhZF9hc3luYyA9IHdlYmtpdFNv
dXBSZXF1ZXN0SW5wdXRTdHJlYW1SZWFkQXN5bmM7CisgICAgaW5wdXRTdHJlYW1DbGFzcy0+cmVh
ZF9maW5pc2ggPSB3ZWJraXRTb3VwUmVxdWVzdElucHV0U3RyZWFtUmVhZEZpbmlzaDsKKworICAg
IGdfdHlwZV9jbGFzc19hZGRfcHJpdmF0ZShyZXF1ZXN0U3RyZWFtQ2xhc3MsIHNpemVvZihXZWJL
aXRTb3VwUmVxdWVzdElucHV0U3RyZWFtUHJpdmF0ZSkpOworfQorCitHSW5wdXRTdHJlYW0qIHdl
YmtpdFNvdXBSZXF1ZXN0SW5wdXRTdHJlYW1OZXcodWludDY0X3QgY29udGVudExlbmd0aCkKK3sK
KyAgICBXZWJLaXRTb3VwUmVxdWVzdElucHV0U3RyZWFtKiBzdHJlYW0gPSBXRUJLSVRfU09VUF9S
RVFVRVNUX0lOUFVUX1NUUkVBTShnX29iamVjdF9uZXcoV0VCS0lUX1RZUEVfU09VUF9SRVFVRVNU
X0lOUFVUX1NUUkVBTSwgTlVMTCkpOworICAgIHN0cmVhbS0+cHJpdi0+Y29udGVudExlbmd0aCA9
IGNvbnRlbnRMZW5ndGg7CisgICAgcmV0dXJuIEdfSU5QVVRfU1RSRUFNKHN0cmVhbSk7Cit9CisK
K3ZvaWQgd2Via2l0U291cFJlcXVlc3RJbnB1dFN0cmVhbUFkZERhdGEoV2ViS2l0U291cFJlcXVl
c3RJbnB1dFN0cmVhbSogc3RyZWFtLCBjb25zdCB2b2lkKiBkYXRhLCBzaXplX3QgZGF0YUxlbmd0
aCkKK3sKKyAgICBpZiAod2Via2l0U291cFJlcXVlc3RJbnB1dFN0cmVhbUZpbmlzaGVkKHN0cmVh
bSkpCisgICAgICAgIHJldHVybjsKKworICAgIE11dGV4TG9ja2VyIGxvY2tlcihzdHJlYW0tPnBy
aXYtPnJlYWRMb2NrKTsKKworICAgIGlmIChkYXRhTGVuZ3RoKSB7CisgICAgICAgIC8vIFRydW5j
YXRlIHRoZSBkYXRhTGVuZ3RoIHRvIHRoZSBjb250ZW50TGVuZ3RoIGlmIGl0J3Mga25vd24uCisg
ICAgICAgIGlmIChzdHJlYW0tPnByaXYtPmNvbnRlbnRMZW5ndGggJiYgc3RyZWFtLT5wcml2LT5i
eXRlc1JlY2VpdmVkICsgZGF0YUxlbmd0aCA+IHN0cmVhbS0+cHJpdi0+Y29udGVudExlbmd0aCkK
KyAgICAgICAgICAgIGRhdGFMZW5ndGggPSBzdHJlYW0tPnByaXYtPmNvbnRlbnRMZW5ndGggLSBz
dHJlYW0tPnByaXYtPmJ5dGVzUmVjZWl2ZWQ7CisgICAgICAgIHN0cmVhbS0+cHJpdi0+Ynl0ZXNS
ZWNlaXZlZCArPSBkYXRhTGVuZ3RoOworICAgICAgICBnX21lbW9yeV9pbnB1dF9zdHJlYW1fYWRk
X2RhdGEoR19NRU1PUllfSU5QVVRfU1RSRUFNKHN0cmVhbSksIGdfbWVtZHVwKGRhdGEsIGRhdGFM
ZW5ndGgpLCBkYXRhTGVuZ3RoLCBnX2ZyZWUpOworICAgIH0gZWxzZSB7CisgICAgICAgIC8vIFdl
IGhhdmUgcmVjZWl2ZWQgYWxsIHRoZSBkYXRhLCBzZXQgY29udGVudExlbmd0aCB0byBieXRlc1Jl
Y2VpdmVkIHRvIGluZGljYXRlIHdlIGhhdmUgZmluaXNoZWQuCisgICAgICAgIHN0cmVhbS0+cHJp
di0+Y29udGVudExlbmd0aCA9IHN0cmVhbS0+cHJpdi0+Ynl0ZXNSZWNlaXZlZDsKKyAgICAgICAg
Ly8gSWYgdGhlcmUncyBhIHBlbmRpbmcgcmVhZCB0byBjb21wbGV0ZSwgcmVhZF9mbiB3aWxsIHJl
dHVybiAwIGJlY2F1c2Ugd2UgaGF2ZW4ndCBhZGRlZCBtb3JlIGRhdGEgdG8gdGhlCisgICAgICAg
IC8vIG1lbW9yeSBpbnB1dCBzdHJlYW0uIEFuZCBpZiB0aGVyZSBpc24ndCBhIHBlbmRpbmcgcmVh
ZCwgdGhlIG5leHQgY2FsbCB0byByZWFkX2FzeW5jIHdpbGwgcmV0dXJuIDAgdG9vLCBiZWNhdXNl
CisgICAgICAgIC8vIHdlYmtpdFNvdXBSZXF1ZXN0SW5wdXRTdHJlYW1GaW5pc2hlZCgpIGlzIG5v
dyBUUlVFLgorICAgIH0KKworICAgIHdlYmtpdFNvdXBSZXF1ZXN0SW5wdXRTdHJlYW1QZW5kaW5n
UmVhZEFzeW5jQ29tcGxldGUoc3RyZWFtKTsKK30KKworYm9vbCB3ZWJraXRTb3VwUmVxdWVzdElu
cHV0U3RyZWFtRmluaXNoZWQoV2ViS2l0U291cFJlcXVlc3RJbnB1dFN0cmVhbSogc3RyZWFtKQor
eworICAgIHJldHVybiAhd2Via2l0U291cFJlcXVlc3RJbnB1dFN0cmVhbUlzV2FpdGluZ0ZvckRh
dGEoc3RyZWFtKTsKK30KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9OZXR3b3Jr
L0N1c3RvbVByb3RvY29scy9zb3VwL1dlYktpdFNvdXBSZXF1ZXN0SW5wdXRTdHJlYW0uaCBiL1Nv
dXJjZS9XZWJLaXQyL1NoYXJlZC9OZXR3b3JrL0N1c3RvbVByb3RvY29scy9zb3VwL1dlYktpdFNv
dXBSZXF1ZXN0SW5wdXRTdHJlYW0uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5hM2M3MDIwOGNjMTRmNGRjZGRiY2Q5
YzRhYzRiNWQ5ZjZmOTQzZDNkCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdDIvU2hh
cmVkL05ldHdvcmsvQ3VzdG9tUHJvdG9jb2xzL3NvdXAvV2ViS2l0U291cFJlcXVlc3RJbnB1dFN0
cmVhbS5oCkBAIC0wLDAgKzEsNTUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgSWdhbGlh
IFMuTC4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRp
c3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBH
TlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhl
IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExp
Y2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhp
cyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2Vm
dWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGll
ZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGlj
ZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBh
IGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25n
IHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdy
aXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xp
biBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisg
Ki8KKworI2lmbmRlZiBXZWJLaXRTb3VwUmVxdWVzdElucHV0U3RyZWFtX2gKKyNkZWZpbmUgV2Vi
S2l0U291cFJlcXVlc3RJbnB1dFN0cmVhbV9oCisKKyNpbmNsdWRlIDxnaW8vZ2lvLmg+CisKK0df
QkVHSU5fREVDTFMKKworI2RlZmluZSBXRUJLSVRfVFlQRV9TT1VQX1JFUVVFU1RfSU5QVVRfU1RS
RUFNICAgICAgICAgICAgKHdlYmtpdF9zb3VwX3JlcXVlc3RfaW5wdXRfc3RyZWFtX2dldF90eXBl
KCkpCisjZGVmaW5lIFdFQktJVF9TT1VQX1JFUVVFU1RfSU5QVVRfU1RSRUFNKG9iamVjdCkgICAg
ICAgICAoR19UWVBFX0NIRUNLX0lOU1RBTkNFX0NBU1QoKG9iamVjdCksIFdFQktJVF9UWVBFX1NP
VVBfUkVRVUVTVF9JTlBVVF9TVFJFQU0sIFdlYktpdFNvdXBSZXF1ZXN0SW5wdXRTdHJlYW0pKQor
I2RlZmluZSBXRUJLSVRfSVNfU09VUF9SRVFVRVNUX0lOUFVUX1NUUkVBTShvYmplY3QpICAgICAg
KEdfVFlQRV9DSEVDS19JTlNUQU5DRV9UWVBFKChvYmplY3QpLCBXRUJLSVRfVFlQRV9TT1VQX1JF
UVVFU1RfSU5QVVRfU1RSRUFNKSkKKyNkZWZpbmUgV0VCS0lUX1NPVVBfUkVRVUVTVF9JTlBVVF9T
VFJFQU1fQ0xBU1Moa2xhc3MpICAgIChHX1RZUEVfQ0hFQ0tfQ0xBU1NfQ0FTVCgoa2xhc3MpLCBX
RUJLSVRfVFlQRV9TT1VQX1JFUVVFU1RfSU5QVVRfU1RSRUFNLCBXZWJLaXRTb3VwUmVxdWVzdElu
cHV0U3RyZWFtQ2xhc3MpKQorI2RlZmluZSBXRUJLSVRfSVNfU09VUF9SRVFVRVNUX0lOUFVUX1NU
UkVBTV9DTEFTUyhrbGFzcykgKEdfVFlQRV9DSEVDS19DTEFTU19UWVBFKChrbGFzcyksIFdFQktJ
VF9UWVBFX1NPVVBfUkVRVUVTVF9JTlBVVF9TVFJFQU0pKQorI2RlZmluZSBXRUJLSVRfU09VUF9S
RVFVRVNUX0lOUFVUX1NUUkVBTV9HRVRfQ0xBU1Mob2JqKSAgKEdfVFlQRV9JTlNUQU5DRV9HRVRf
Q0xBU1MoKG9iaiksIFdFQktJVF9UWVBFX1NPVVBfUkVRVUVTVF9JTlBVVF9TVFJFQU0sIFdlYktp
dFNvdXBSZXF1ZXN0SW5wdXRTdHJlYW1DbGFzcykpCisKK3R5cGVkZWYgc3RydWN0IF9XZWJLaXRT
b3VwUmVxdWVzdElucHV0U3RyZWFtIFdlYktpdFNvdXBSZXF1ZXN0SW5wdXRTdHJlYW07Cit0eXBl
ZGVmIHN0cnVjdCBfV2ViS2l0U291cFJlcXVlc3RJbnB1dFN0cmVhbUNsYXNzIFdlYktpdFNvdXBS
ZXF1ZXN0SW5wdXRTdHJlYW1DbGFzczsKK3R5cGVkZWYgc3RydWN0IF9XZWJLaXRTb3VwUmVxdWVz
dElucHV0U3RyZWFtUHJpdmF0ZSBXZWJLaXRTb3VwUmVxdWVzdElucHV0U3RyZWFtUHJpdmF0ZTsK
Kworc3RydWN0IF9XZWJLaXRTb3VwUmVxdWVzdElucHV0U3RyZWFtIHsKKyAgICBHTWVtb3J5SW5w
dXRTdHJlYW0gcGFyZW50OworCisgICAgV2ViS2l0U291cFJlcXVlc3RJbnB1dFN0cmVhbVByaXZh
dGUqIHByaXY7Cit9OworCitzdHJ1Y3QgX1dlYktpdFNvdXBSZXF1ZXN0SW5wdXRTdHJlYW1DbGFz
cyB7CisgICAgR01lbW9yeUlucHV0U3RyZWFtQ2xhc3MgcGFyZW50OworfTsKKworR1R5cGUgd2Vi
a2l0X3NvdXBfcmVxdWVzdF9pbnB1dF9zdHJlYW1fZ2V0X3R5cGUoKTsKK0dJbnB1dFN0cmVhbSog
d2Via2l0U291cFJlcXVlc3RJbnB1dFN0cmVhbU5ldyh1aW50NjRfdCBjb250ZW50TGVuZ3RoKTsK
K3ZvaWQgd2Via2l0U291cFJlcXVlc3RJbnB1dFN0cmVhbUFkZERhdGEoV2ViS2l0U291cFJlcXVl
c3RJbnB1dFN0cmVhbSosIGNvbnN0IHZvaWQqIGRhdGEsIHNpemVfdCBkYXRhTGVuZ3RoKTsKK2Jv
b2wgd2Via2l0U291cFJlcXVlc3RJbnB1dFN0cmVhbUZpbmlzaGVkKFdlYktpdFNvdXBSZXF1ZXN0
SW5wdXRTdHJlYW0qKTsKKworR19FTkRfREVDTFMKKworI2VuZGlmIC8vIFdlYktpdFNvdXBSZXF1
ZXN0SW5wdXRTdHJlYW1faApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9z
b3VwL1dlYktpdFNvdXBSZXF1ZXN0R2VuZXJpYy5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9j
ZXNzL3NvdXAvV2ViS2l0U291cFJlcXVlc3RHZW5lcmljLmNwcApkZWxldGVkIGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggNTVjNTAzNzVhMGMzZTNiZjBjZjhhNTUyM2NlMTU2ZTU4ODY0NDNlMy4uMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViS2l0
Mi9XZWJQcm9jZXNzL3NvdXAvV2ViS2l0U291cFJlcXVlc3RHZW5lcmljLmNwcAorKysgL2Rldi9u
dWxsCkBAIC0xLDEwNyArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEyIElnYWxpYSBT
LkwuCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0
cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05V
IExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBG
cmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogdmVyc2lvbiAyIG9mIHRoZSBMaWNl
bnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMg
bGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVs
LAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQg
d2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vu
c2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBj
b3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3
aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0
ZSB0bwotICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4g
U3RyZWV0LCBGaWZ0aCBGbG9vciwKLSAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotICov
Ci0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJXZWJLaXRTb3VwUmVxdWVzdEdlbmVy
aWMuaCIKLQotI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KLQotI2lmICFFTkFCTEUoQ1VT
VE9NX1BST1RPQ09MUykKLSNpbmNsdWRlICJXZWJQcm9jZXNzLmgiCi0jaW5jbHVkZSAiV2ViU291
cFJlcXVlc3RNYW5hZ2VyLmgiCi0jZW5kaWYKLQotdXNpbmcgbmFtZXNwYWNlIFdlYktpdDsKLQot
R19ERUZJTkVfVFlQRShXZWJLaXRTb3VwUmVxdWVzdEdlbmVyaWMsIHdlYmtpdF9zb3VwX3JlcXVl
c3RfZ2VuZXJpYywgU09VUF9UWVBFX1JFUVVFU1QpCi0KLXN0cnVjdCBfV2ViS2l0U291cFJlcXVl
c3RHZW5lcmljUHJpdmF0ZSB7Ci0gICAgQ1N0cmluZyBtaW1lVHlwZTsKLSAgICBnb2Zmc2V0IGNv
bnRlbnRMZW5ndGg7Ci19OwotCi1zdGF0aWMgdm9pZCB3ZWJraXRTb3VwUmVxdWVzdEdlbmVyaWNG
aW5hbGl6ZShHT2JqZWN0KiBvYmplY3QpCi17Ci0gICAgV0VCS0lUX1NPVVBfUkVRVUVTVF9HRU5F
UklDKG9iamVjdCktPnByaXYtPn5XZWJLaXRTb3VwUmVxdWVzdEdlbmVyaWNQcml2YXRlKCk7Ci0g
ICAgR19PQkpFQ1RfQ0xBU1Mod2Via2l0X3NvdXBfcmVxdWVzdF9nZW5lcmljX3BhcmVudF9jbGFz
cyktPmZpbmFsaXplKG9iamVjdCk7Ci19Ci0KLXN0YXRpYyB2b2lkIHdlYmtpdF9zb3VwX3JlcXVl
c3RfZ2VuZXJpY19pbml0KFdlYktpdFNvdXBSZXF1ZXN0R2VuZXJpYyogcmVxdWVzdCkKLXsKLSAg
ICBXZWJLaXRTb3VwUmVxdWVzdEdlbmVyaWNQcml2YXRlKiBwcml2ID0gR19UWVBFX0lOU1RBTkNF
X0dFVF9QUklWQVRFKHJlcXVlc3QsIFdFQktJVF9UWVBFX1NPVVBfUkVRVUVTVF9HRU5FUklDLCBX
ZWJLaXRTb3VwUmVxdWVzdEdlbmVyaWNQcml2YXRlKTsKLSAgICByZXF1ZXN0LT5wcml2ID0gcHJp
djsKLSAgICBuZXcgKHByaXYpIFdlYktpdFNvdXBSZXF1ZXN0R2VuZXJpY1ByaXZhdGUoKTsKLX0K
LQotc3RhdGljIHZvaWQgd2Via2l0U291cFJlcXVlc3RHZW5lcmljU2VuZEFzeW5jKFNvdXBSZXF1
ZXN0KiByZXF1ZXN0LCBHQ2FuY2VsbGFibGUqIGNhbmNlbGxhYmxlLCBHQXN5bmNSZWFkeUNhbGxi
YWNrIGNhbGxiYWNrLCBncG9pbnRlciB1c2VyRGF0YSkKLXsKLSNpZiBFTkFCTEUoQ1VTVE9NX1BS
T1RPQ09MUykKLSAgICBDdXN0b21Qcm90b2NvbE1hbmFnZXJJbXBsKiBjdXN0b21Qcm90b2NvbE1h
bmFnZXIgPSBXRUJLSVRfU09VUF9SRVFVRVNUX0dFTkVSSUNfR0VUX0NMQVNTKHJlcXVlc3QpLT5j
dXN0b21Qcm90b2NvbE1hbmFnZXI7Ci0gICAgQVNTRVJUKGN1c3RvbVByb3RvY29sTWFuYWdlcik7
Ci0gICAgY3VzdG9tUHJvdG9jb2xNYW5hZ2VyLT5zZW5kKGdfdGFza19uZXcocmVxdWVzdCwgY2Fu
Y2VsbGFibGUsIGNhbGxiYWNrLCB1c2VyRGF0YSkpOwotI2Vsc2UKLSAgICBXZWJQcm9jZXNzOjpz
aGFyZWQoKS5zdXBwbGVtZW50PFdlYlNvdXBSZXF1ZXN0TWFuYWdlcj4oKS0+c2VuZChnX3Rhc2tf
bmV3KHJlcXVlc3QsIGNhbmNlbGxhYmxlLCBjYWxsYmFjaywgdXNlckRhdGEpKTsKLSNlbmRpZgot
fQotCi1zdGF0aWMgR0lucHV0U3RyZWFtKiB3ZWJraXRTb3VwUmVxdWVzdEdlbmVyaWNTZW5kRmlu
aXNoKFNvdXBSZXF1ZXN0KiByZXF1ZXN0LCBHQXN5bmNSZXN1bHQqIHJlc3VsdCwgR0Vycm9yKiog
ZXJyb3IpCi17Ci0gICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoZ190YXNrX2lzX3ZhbGlkKHJlc3Vs
dCwgcmVxdWVzdCksIDApOwotI2lmIEVOQUJMRShDVVNUT01fUFJPVE9DT0xTKQotICAgIEN1c3Rv
bVByb3RvY29sTWFuYWdlckltcGwqIGN1c3RvbVByb3RvY29sTWFuYWdlciA9IFdFQktJVF9TT1VQ
X1JFUVVFU1RfR0VORVJJQ19HRVRfQ0xBU1MocmVxdWVzdCktPmN1c3RvbVByb3RvY29sTWFuYWdl
cjsKLSAgICBBU1NFUlQoY3VzdG9tUHJvdG9jb2xNYW5hZ2VyKTsKLSAgICByZXR1cm4gY3VzdG9t
UHJvdG9jb2xNYW5hZ2VyLT5maW5pc2goR19UQVNLKHJlc3VsdCksIGVycm9yKTsKLSNlbHNlCi0g
ICAgcmV0dXJuIFdlYlByb2Nlc3M6OnNoYXJlZCgpLnN1cHBsZW1lbnQ8V2ViU291cFJlcXVlc3RN
YW5hZ2VyPigpLT5maW5pc2goR19UQVNLKHJlc3VsdCksIGVycm9yKTsKLSNlbmRpZgotfQotCi1z
dGF0aWMgZ29mZnNldCB3ZWJraXRTb3VwUmVxdWVzdEdlbmVyaWNHZXRDb250ZW50TGVuZ3RoKFNv
dXBSZXF1ZXN0KiByZXF1ZXN0KQotewotICAgIHJldHVybiBXRUJLSVRfU09VUF9SRVFVRVNUX0dF
TkVSSUMocmVxdWVzdCktPnByaXYtPmNvbnRlbnRMZW5ndGg7Ci19Ci0KLXN0YXRpYyBjb25zdCBj
aGFyKiB3ZWJraXRTb3VwUmVxdWVzdEdlbmVyaWNHZXRDb250ZW50VHlwZShTb3VwUmVxdWVzdCog
cmVxdWVzdCkKLXsKLSAgICByZXR1cm4gV0VCS0lUX1NPVVBfUkVRVUVTVF9HRU5FUklDKHJlcXVl
c3QpLT5wcml2LT5taW1lVHlwZS5kYXRhKCk7Ci19Ci0KLXN0YXRpYyB2b2lkIHdlYmtpdF9zb3Vw
X3JlcXVlc3RfZ2VuZXJpY19jbGFzc19pbml0KFdlYktpdFNvdXBSZXF1ZXN0R2VuZXJpY0NsYXNz
KiByZXF1ZXN0R2VuZXJpY0NsYXNzKQotewotICAgIEdPYmplY3RDbGFzcyogZ09iamVjdENsYXNz
ID0gR19PQkpFQ1RfQ0xBU1MocmVxdWVzdEdlbmVyaWNDbGFzcyk7Ci0gICAgZ09iamVjdENsYXNz
LT5maW5hbGl6ZSA9IHdlYmtpdFNvdXBSZXF1ZXN0R2VuZXJpY0ZpbmFsaXplOwotCi0gICAgU291
cFJlcXVlc3RDbGFzcyogcmVxdWVzdENsYXNzID0gU09VUF9SRVFVRVNUX0NMQVNTKHJlcXVlc3RH
ZW5lcmljQ2xhc3MpOwotICAgIHJlcXVlc3RDbGFzcy0+c2VuZF9hc3luYyA9IHdlYmtpdFNvdXBS
ZXF1ZXN0R2VuZXJpY1NlbmRBc3luYzsKLSAgICByZXF1ZXN0Q2xhc3MtPnNlbmRfZmluaXNoID0g
d2Via2l0U291cFJlcXVlc3RHZW5lcmljU2VuZEZpbmlzaDsKLSAgICByZXF1ZXN0Q2xhc3MtPmdl
dF9jb250ZW50X2xlbmd0aCA9IHdlYmtpdFNvdXBSZXF1ZXN0R2VuZXJpY0dldENvbnRlbnRMZW5n
dGg7Ci0gICAgcmVxdWVzdENsYXNzLT5nZXRfY29udGVudF90eXBlID0gd2Via2l0U291cFJlcXVl
c3RHZW5lcmljR2V0Q29udGVudFR5cGU7Ci0KLSAgICBnX3R5cGVfY2xhc3NfYWRkX3ByaXZhdGUo
cmVxdWVzdEdlbmVyaWNDbGFzcywgc2l6ZW9mKFdlYktpdFNvdXBSZXF1ZXN0R2VuZXJpY1ByaXZh
dGUpKTsKLX0KLQotdm9pZCB3ZWJraXRTb3VwUmVxdWVzdEdlbmVyaWNTZXRDb250ZW50TGVuZ3Ro
KFdlYktpdFNvdXBSZXF1ZXN0R2VuZXJpYyogcmVxdWVzdCwgZ29mZnNldCBjb250ZW50TGVuZ3Ro
KQotewotICAgIHJlcXVlc3QtPnByaXYtPmNvbnRlbnRMZW5ndGggPSBjb250ZW50TGVuZ3RoOwot
fQotCi12b2lkIHdlYmtpdFNvdXBSZXF1ZXN0R2VuZXJpY1NldENvbnRlbnRUeXBlKFdlYktpdFNv
dXBSZXF1ZXN0R2VuZXJpYyogcmVxdWVzdCwgY29uc3QgY2hhciogbWltZVR5cGUpCi17Ci0gICAg
cmVxdWVzdC0+cHJpdi0+bWltZVR5cGUgPSBtaW1lVHlwZTsKLX0KZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJLaXQyL1dlYlByb2Nlc3Mvc291cC9XZWJLaXRTb3VwUmVxdWVzdEdlbmVyaWMuaCBiL1Nv
dXJjZS9XZWJLaXQyL1dlYlByb2Nlc3Mvc291cC9XZWJLaXRTb3VwUmVxdWVzdEdlbmVyaWMuaApk
ZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNWM1ZDNhZDJkNTExNjg0N2M5NzFkM2Q5MWM2
ZWM1Zjc3YTU0NGViNC4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAot
LS0gYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL3NvdXAvV2ViS2l0U291cFJlcXVlc3RHZW5l
cmljLmgKKysrIC9kZXYvbnVsbApAQCAtMSw2NCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChD
KSAyMDEyIElnYWxpYSBTLkwuCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7
IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0
ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVi
bGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogdmVyc2lv
biAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9u
LgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0
IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2
ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiBMaWJyYXJ5IEdlbmVy
YWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhh
dmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNl
bnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElC
LiAgSWYgbm90LCB3cml0ZSB0bwotICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5j
LiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKLSAqIEJvc3RvbiwgTUEgMDIxMTAt
MTMwMSwgVVNBLgotICovCi0KLSNpZm5kZWYgV2ViS2l0U291cFJlcXVlc3RHZW5lcmljX2gKLSNk
ZWZpbmUgV2ViS2l0U291cFJlcXVlc3RHZW5lcmljX2gKLQotI2luY2x1ZGUgPGdsaWItb2JqZWN0
Lmg+Ci0jaW5jbHVkZSA8bGlic291cC9zb3VwLmg+Ci0KLSNpZiBFTkFCTEUoQ1VTVE9NX1BST1RP
Q09MUykKLSNpbmNsdWRlICJDdXN0b21Qcm90b2NvbE1hbmFnZXJJbXBsLmgiCi0jZW5kaWYKLQot
R19CRUdJTl9ERUNMUwotCi0jZGVmaW5lIFdFQktJVF9UWVBFX1NPVVBfUkVRVUVTVF9HRU5FUklD
ICAgICAgICAgICAgKHdlYmtpdF9zb3VwX3JlcXVlc3RfZ2VuZXJpY19nZXRfdHlwZSgpKQotI2Rl
ZmluZSBXRUJLSVRfU09VUF9SRVFVRVNUX0dFTkVSSUMob2JqZWN0KSAgICAgICAgIChHX1RZUEVf
Q0hFQ0tfSU5TVEFOQ0VfQ0FTVCgob2JqZWN0KSwgV0VCS0lUX1RZUEVfU09VUF9SRVFVRVNUX0dF
TkVSSUMsIFdlYktpdFNvdXBSZXF1ZXN0R2VuZXJpYykpCi0jZGVmaW5lIFdFQktJVF9JU19TT1VQ
X1JFUVVFU1RfR0VORVJJQyhvYmplY3QpICAgICAgKEdfVFlQRV9DSEVDS19JTlNUQU5DRV9UWVBF
KChvYmplY3QpLCBXRUJLSVRfVFlQRV9TT1VQX1JFUVVFU1RfR0VORVJJQykpCi0jZGVmaW5lIFdF
QktJVF9TT1VQX1JFUVVFU1RfR0VORVJJQ19DTEFTUyhrbGFzcykgICAgKEdfVFlQRV9DSEVDS19D
TEFTU19DQVNUKChrbGFzcyksIFdFQktJVF9UWVBFX1NPVVBfUkVRVUVTVF9HRU5FUklDLCBXZWJL
aXRTb3VwUmVxdWVzdEdlbmVyaWNDbGFzcykpCi0jZGVmaW5lIFdFQktJVF9JU19TT1VQX1JFUVVF
U1RfR0VORVJJQ19DTEFTUyhrbGFzcykgKEdfVFlQRV9DSEVDS19DTEFTU19UWVBFKChrbGFzcyks
IFdFQktJVF9UWVBFX1NPVVBfUkVRVUVTVF9HRU5FUklDKSkKLSNkZWZpbmUgV0VCS0lUX1NPVVBf
UkVRVUVTVF9HRU5FUklDX0dFVF9DTEFTUyhvYmopICAoR19UWVBFX0lOU1RBTkNFX0dFVF9DTEFT
Uygob2JqKSwgV0VCS0lUX1RZUEVfU09VUF9SRVFVRVNUX0dFTkVSSUMsIFdlYktpdFNvdXBSZXF1
ZXN0R2VuZXJpY0NsYXNzKSkKLQotdHlwZWRlZiBzdHJ1Y3QgX1dlYktpdFNvdXBSZXF1ZXN0R2Vu
ZXJpYyBXZWJLaXRTb3VwUmVxdWVzdEdlbmVyaWM7Ci10eXBlZGVmIHN0cnVjdCBfV2ViS2l0U291
cFJlcXVlc3RHZW5lcmljQ2xhc3MgV2ViS2l0U291cFJlcXVlc3RHZW5lcmljQ2xhc3M7Ci10eXBl
ZGVmIHN0cnVjdCBfV2ViS2l0U291cFJlcXVlc3RHZW5lcmljUHJpdmF0ZSBXZWJLaXRTb3VwUmVx
dWVzdEdlbmVyaWNQcml2YXRlOwotCi1zdHJ1Y3QgX1dlYktpdFNvdXBSZXF1ZXN0R2VuZXJpYyB7
Ci0gICAgU291cFJlcXVlc3QgcGFyZW50OwotCi0gICAgV2ViS2l0U291cFJlcXVlc3RHZW5lcmlj
UHJpdmF0ZSAqcHJpdjsKLX07Ci0KLXN0cnVjdCBfV2ViS2l0U291cFJlcXVlc3RHZW5lcmljQ2xh
c3MgewotICAgIFNvdXBSZXF1ZXN0Q2xhc3MgcGFyZW50OwotCi0jaWYgRU5BQkxFKENVU1RPTV9Q
Uk9UT0NPTFMpCi0gICAgV2ViS2l0OjpDdXN0b21Qcm90b2NvbE1hbmFnZXJJbXBsKiBjdXN0b21Q
cm90b2NvbE1hbmFnZXI7Ci0jZW5kaWYKLX07Ci0KLUdUeXBlIHdlYmtpdF9zb3VwX3JlcXVlc3Rf
Z2VuZXJpY19nZXRfdHlwZSgpOwotCi12b2lkIHdlYmtpdFNvdXBSZXF1ZXN0R2VuZXJpY1NldENv
bnRlbnRMZW5ndGgoV2ViS2l0U291cFJlcXVlc3RHZW5lcmljKiwgZ29mZnNldCBjb250ZW50TGVu
Z3RoKTsKLXZvaWQgd2Via2l0U291cFJlcXVlc3RHZW5lcmljU2V0Q29udGVudFR5cGUoV2ViS2l0
U291cFJlcXVlc3RHZW5lcmljKiwgY29uc3QgY2hhciogbWltZVR5cGUpOwotCi1HX0VORF9ERUNM
UwotCi0jZW5kaWYgLy8gV2ViS2l0U291cFJlcXVlc3RHZW5lcmljX2gKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJLaXQyL1dlYlByb2Nlc3Mvc291cC9XZWJLaXRTb3VwUmVxdWVzdElucHV0U3RyZWFt
LmNwcCBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3Mvc291cC9XZWJLaXRTb3VwUmVxdWVzdElu
cHV0U3RyZWFtLmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODUyYTU4NWQ2ZDQy
YWIxZmE2ZTU5YjE5MTRiODdjMGUwMzA4OWFiOC4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL3NvdXAvV2ViS2l0
U291cFJlcXVlc3RJbnB1dFN0cmVhbS5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSwxNzQgKzAsMCBA
QAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMiBJZ2FsaWEgUy5MLgotICoKLSAqIFRoaXMgbGli
cmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAq
IG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVi
bGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0
aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0
aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0
ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFO
WSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJD
SEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhl
IEdOVQotICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMu
Ci0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJh
cnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNl
ZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KLSAqIHRoZSBGcmVlIFNv
ZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3Is
Ci0gKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSAqLwotCi0jaW5jbHVkZSAiY29uZmln
LmgiCi0jaW5jbHVkZSAiV2ViS2l0U291cFJlcXVlc3RJbnB1dFN0cmVhbS5oIgotCi0jaW5jbHVk
ZSA8d3RmL093blB0ci5oPgotI2luY2x1ZGUgPHd0Zi9QYXNzT3duUHRyLmg+Ci0jaW5jbHVkZSA8
d3RmL1RocmVhZGluZy5oPgotI2luY2x1ZGUgPHd0Zi9nb2JqZWN0L0dSZWZQdHIuaD4KLQotc3Ry
dWN0IEFzeW5jUmVhZERhdGEgewotICAgIEFzeW5jUmVhZERhdGEoR1NpbXBsZUFzeW5jUmVzdWx0
KiByZXN1bHQsIHZvaWQqIGJ1ZmZlciwgZ3NpemUgY291bnQsIEdDYW5jZWxsYWJsZSogY2FuY2Vs
bGFibGUpCi0gICAgICAgIDogcmVzdWx0KHJlc3VsdCkKLSAgICAgICAgLCBidWZmZXIoYnVmZmVy
KQotICAgICAgICAsIGNvdW50KGNvdW50KQotICAgICAgICAsIGNhbmNlbGxhYmxlKGNhbmNlbGxh
YmxlKQotICAgIHsKLSAgICB9Ci0KLSAgICBHUmVmUHRyPEdTaW1wbGVBc3luY1Jlc3VsdD4gcmVz
dWx0OwotICAgIHZvaWQqIGJ1ZmZlcjsKLSAgICBzaXplX3QgY291bnQ7Ci0gICAgR1JlZlB0cjxH
Q2FuY2VsbGFibGU+IGNhbmNlbGxhYmxlOwotfTsKLQotc3RydWN0IF9XZWJLaXRTb3VwUmVxdWVz
dElucHV0U3RyZWFtUHJpdmF0ZSB7Ci0gICAgdWludDY0X3QgY29udGVudExlbmd0aDsKLSAgICB1
aW50NjRfdCBieXRlc1JlY2VpdmVkOwotICAgIHVpbnQ2NF90IGJ5dGVzUmVhZDsKLQotICAgIE11
dGV4IHJlYWRMb2NrOwotICAgIE93blB0cjxBc3luY1JlYWREYXRhPiBwZW5kaW5nQXN5bmNSZWFk
OwotfTsKLQotR19ERUZJTkVfVFlQRShXZWJLaXRTb3VwUmVxdWVzdElucHV0U3RyZWFtLCB3ZWJr
aXRfc291cF9yZXF1ZXN0X2lucHV0X3N0cmVhbSwgR19UWVBFX01FTU9SWV9JTlBVVF9TVFJFQU0p
Ci0KLXN0YXRpYyB2b2lkIHdlYmtpdFNvdXBSZXF1ZXN0SW5wdXRTdHJlYW1SZWFkQXN5bmNSZXN1
bHRDb21wbGV0ZShXZWJLaXRTb3VwUmVxdWVzdElucHV0U3RyZWFtKiBzdHJlYW0sIEdTaW1wbGVB
c3luY1Jlc3VsdCogcmVzdWx0LCB2b2lkKiBidWZmZXIsIGdzaXplIGNvdW50LCBHQ2FuY2VsbGFi
bGUqIGNhbmNlbGxhYmxlKQotewotICAgIEdFcnJvciogZXJyb3IgPSAwOwotICAgIGdzc2l6ZSBi
eXRlc1JlYWQgPSBHX0lOUFVUX1NUUkVBTV9HRVRfQ0xBU1Moc3RyZWFtKS0+cmVhZF9mbihHX0lO
UFVUX1NUUkVBTShzdHJlYW0pLCBidWZmZXIsIGNvdW50LCBjYW5jZWxsYWJsZSwgJmVycm9yKTsK
LSAgICBpZiAoIWVycm9yKSB7Ci0gICAgICAgIGdfc2ltcGxlX2FzeW5jX3Jlc3VsdF9zZXRfb3Bf
cmVzX2dzc2l6ZShyZXN1bHQsIGJ5dGVzUmVhZCk7Ci0gICAgICAgIHN0cmVhbS0+cHJpdi0+Ynl0
ZXNSZWFkICs9IGJ5dGVzUmVhZDsKLSAgICB9IGVsc2UKLSAgICAgICAgZ19zaW1wbGVfYXN5bmNf
cmVzdWx0X3Rha2VfZXJyb3IocmVzdWx0LCBlcnJvcik7Ci0gICAgZ19zaW1wbGVfYXN5bmNfcmVz
dWx0X2NvbXBsZXRlX2luX2lkbGUocmVzdWx0KTsKLX0KLQotc3RhdGljIHZvaWQgd2Via2l0U291
cFJlcXVlc3RJbnB1dFN0cmVhbVBlbmRpbmdSZWFkQXN5bmNDb21wbGV0ZShXZWJLaXRTb3VwUmVx
dWVzdElucHV0U3RyZWFtKiBzdHJlYW0pCi17Ci0gICAgaWYgKCFzdHJlYW0tPnByaXYtPnBlbmRp
bmdBc3luY1JlYWQpCi0gICAgICAgIHJldHVybjsKLQotICAgIEFzeW5jUmVhZERhdGEqIGRhdGEg
PSBzdHJlYW0tPnByaXYtPnBlbmRpbmdBc3luY1JlYWQuZ2V0KCk7Ci0gICAgd2Via2l0U291cFJl
cXVlc3RJbnB1dFN0cmVhbVJlYWRBc3luY1Jlc3VsdENvbXBsZXRlKHN0cmVhbSwgZGF0YS0+cmVz
dWx0LmdldCgpLCBkYXRhLT5idWZmZXIsIGRhdGEtPmNvdW50LCBkYXRhLT5jYW5jZWxsYWJsZS5n
ZXQoKSk7Ci0gICAgc3RyZWFtLT5wcml2LT5wZW5kaW5nQXN5bmNSZWFkLmNsZWFyKCk7Ci19Ci0K
LXN0YXRpYyBib29sIHdlYmtpdFNvdXBSZXF1ZXN0SW5wdXRTdHJlYW1IYXNEYXRhVG9SZWFkKFdl
YktpdFNvdXBSZXF1ZXN0SW5wdXRTdHJlYW0qIHN0cmVhbSkKLXsKLSAgICByZXR1cm4gc3RyZWFt
LT5wcml2LT5ieXRlc1JlYWQgPCBzdHJlYW0tPnByaXYtPmJ5dGVzUmVjZWl2ZWQ7Ci19Ci0KLXN0
YXRpYyBib29sIHdlYmtpdFNvdXBSZXF1ZXN0SW5wdXRTdHJlYW1Jc1dhaXRpbmdGb3JEYXRhKFdl
YktpdFNvdXBSZXF1ZXN0SW5wdXRTdHJlYW0qIHN0cmVhbSkKLXsKLSAgICByZXR1cm4gIXN0cmVh
bS0+cHJpdi0+Y29udGVudExlbmd0aCB8fCBzdHJlYW0tPnByaXYtPmJ5dGVzUmVjZWl2ZWQgPCBz
dHJlYW0tPnByaXYtPmNvbnRlbnRMZW5ndGg7Ci19Ci0KLXN0YXRpYyB2b2lkIHdlYmtpdFNvdXBS
ZXF1ZXN0SW5wdXRTdHJlYW1SZWFkQXN5bmMoR0lucHV0U3RyZWFtKiBpbnB1dFN0cmVhbSwgdm9p
ZCogYnVmZmVyLCBnc2l6ZSBjb3VudCwgaW50IC8qcHJpb3JpdHkqLywgR0NhbmNlbGxhYmxlKiBj
YW5jZWxsYWJsZSwgR0FzeW5jUmVhZHlDYWxsYmFjayBjYWxsYmFjaywgZ3BvaW50ZXIgdXNlckRh
dGEpCi17Ci0gICAgV2ViS2l0U291cFJlcXVlc3RJbnB1dFN0cmVhbSogc3RyZWFtID0gV0VCS0lU
X1NPVVBfUkVRVUVTVF9JTlBVVF9TVFJFQU0oaW5wdXRTdHJlYW0pOwotICAgIEdSZWZQdHI8R1Np
bXBsZUFzeW5jUmVzdWx0PiByZXN1bHQgPSBhZG9wdEdSZWYoZ19zaW1wbGVfYXN5bmNfcmVzdWx0
X25ldyhHX09CSkVDVChzdHJlYW0pLCBjYWxsYmFjaywgdXNlckRhdGEsIHJlaW50ZXJwcmV0X2Nh
c3Q8dm9pZCo+KHdlYmtpdFNvdXBSZXF1ZXN0SW5wdXRTdHJlYW1SZWFkQXN5bmMpKSk7Ci0KLSAg
ICBNdXRleExvY2tlciBsb2NrZXIoc3RyZWFtLT5wcml2LT5yZWFkTG9jayk7Ci0KLSAgICBpZiAo
IXdlYmtpdFNvdXBSZXF1ZXN0SW5wdXRTdHJlYW1IYXNEYXRhVG9SZWFkKHN0cmVhbSkgJiYgIXdl
YmtpdFNvdXBSZXF1ZXN0SW5wdXRTdHJlYW1Jc1dhaXRpbmdGb3JEYXRhKHN0cmVhbSkpIHsKLSAg
ICAgICAgZ19zaW1wbGVfYXN5bmNfcmVzdWx0X3NldF9vcF9yZXNfZ3NzaXplKHJlc3VsdC5nZXQo
KSwgMCk7Ci0gICAgICAgIGdfc2ltcGxlX2FzeW5jX3Jlc3VsdF9jb21wbGV0ZV9pbl9pZGxlKHJl
c3VsdC5nZXQoKSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBpZiAod2Via2l0U291
cFJlcXVlc3RJbnB1dFN0cmVhbUhhc0RhdGFUb1JlYWQoc3RyZWFtKSkgewotICAgICAgICB3ZWJr
aXRTb3VwUmVxdWVzdElucHV0U3RyZWFtUmVhZEFzeW5jUmVzdWx0Q29tcGxldGUoc3RyZWFtLCBy
ZXN1bHQuZ2V0KCksIGJ1ZmZlciwgY291bnQsIGNhbmNlbGxhYmxlKTsKLSAgICAgICAgcmV0dXJu
OwotICAgIH0KLQotICAgIHN0cmVhbS0+cHJpdi0+cGVuZGluZ0FzeW5jUmVhZCA9IGFkb3B0UHRy
KG5ldyBBc3luY1JlYWREYXRhKHJlc3VsdC5nZXQoKSwgYnVmZmVyLCBjb3VudCwgY2FuY2VsbGFi
bGUpKTsKLX0KLQotc3RhdGljIGdzc2l6ZSB3ZWJraXRTb3VwUmVxdWVzdElucHV0U3RyZWFtUmVh
ZEZpbmlzaChHSW5wdXRTdHJlYW0qLCBHQXN5bmNSZXN1bHQqIHJlc3VsdCwgR0Vycm9yKiopCi17
Ci0gICAgR1NpbXBsZUFzeW5jUmVzdWx0KiBzaW1wbGVSZXN1bHQgPSBHX1NJTVBMRV9BU1lOQ19S
RVNVTFQocmVzdWx0KTsKLSAgICBnX3dhcm5faWZfZmFpbChnX3NpbXBsZV9hc3luY19yZXN1bHRf
Z2V0X3NvdXJjZV90YWcoc2ltcGxlUmVzdWx0KSA9PSB3ZWJraXRTb3VwUmVxdWVzdElucHV0U3Ry
ZWFtUmVhZEFzeW5jKTsKLQotICAgIHJldHVybiBnX3NpbXBsZV9hc3luY19yZXN1bHRfZ2V0X29w
X3Jlc19nc3NpemUoc2ltcGxlUmVzdWx0KTsKLX0KLQotc3RhdGljIHZvaWQgd2Via2l0U291cFJl
cXVlc3RJbnB1dFN0cmVhbUZpbmFsaXplKEdPYmplY3QqIG9iamVjdCkKLXsKLSAgICBXRUJLSVRf
U09VUF9SRVFVRVNUX0lOUFVUX1NUUkVBTShvYmplY3QpLT5wcml2LT5+V2ViS2l0U291cFJlcXVl
c3RJbnB1dFN0cmVhbVByaXZhdGUoKTsKLSAgICBHX09CSkVDVF9DTEFTUyh3ZWJraXRfc291cF9y
ZXF1ZXN0X2lucHV0X3N0cmVhbV9wYXJlbnRfY2xhc3MpLT5maW5hbGl6ZShvYmplY3QpOwotfQot
Ci1zdGF0aWMgdm9pZCB3ZWJraXRfc291cF9yZXF1ZXN0X2lucHV0X3N0cmVhbV9pbml0KFdlYktp
dFNvdXBSZXF1ZXN0SW5wdXRTdHJlYW0qIHN0cmVhbSkKLXsKLSAgICBXZWJLaXRTb3VwUmVxdWVz
dElucHV0U3RyZWFtUHJpdmF0ZSogcHJpdiA9IEdfVFlQRV9JTlNUQU5DRV9HRVRfUFJJVkFURShz
dHJlYW0sIFdFQktJVF9UWVBFX1NPVVBfUkVRVUVTVF9JTlBVVF9TVFJFQU0sIFdlYktpdFNvdXBS
ZXF1ZXN0SW5wdXRTdHJlYW1Qcml2YXRlKTsKLSAgICBzdHJlYW0tPnByaXYgPSBwcml2OwotICAg
IG5ldyAocHJpdikgV2ViS2l0U291cFJlcXVlc3RJbnB1dFN0cmVhbVByaXZhdGUoKTsKLX0KLQot
c3RhdGljIHZvaWQgd2Via2l0X3NvdXBfcmVxdWVzdF9pbnB1dF9zdHJlYW1fY2xhc3NfaW5pdChX
ZWJLaXRTb3VwUmVxdWVzdElucHV0U3RyZWFtQ2xhc3MqIHJlcXVlc3RTdHJlYW1DbGFzcykKLXsK
LSAgICBHT2JqZWN0Q2xhc3MqIGdPYmplY3RDbGFzcyA9IEdfT0JKRUNUX0NMQVNTKHJlcXVlc3RT
dHJlYW1DbGFzcyk7Ci0gICAgZ09iamVjdENsYXNzLT5maW5hbGl6ZSA9IHdlYmtpdFNvdXBSZXF1
ZXN0SW5wdXRTdHJlYW1GaW5hbGl6ZTsKLQotICAgIEdJbnB1dFN0cmVhbUNsYXNzKiBpbnB1dFN0
cmVhbUNsYXNzID0gR19JTlBVVF9TVFJFQU1fQ0xBU1MocmVxdWVzdFN0cmVhbUNsYXNzKTsKLSAg
ICBpbnB1dFN0cmVhbUNsYXNzLT5yZWFkX2FzeW5jID0gd2Via2l0U291cFJlcXVlc3RJbnB1dFN0
cmVhbVJlYWRBc3luYzsKLSAgICBpbnB1dFN0cmVhbUNsYXNzLT5yZWFkX2ZpbmlzaCA9IHdlYmtp
dFNvdXBSZXF1ZXN0SW5wdXRTdHJlYW1SZWFkRmluaXNoOwotCi0gICAgZ190eXBlX2NsYXNzX2Fk
ZF9wcml2YXRlKHJlcXVlc3RTdHJlYW1DbGFzcywgc2l6ZW9mKFdlYktpdFNvdXBSZXF1ZXN0SW5w
dXRTdHJlYW1Qcml2YXRlKSk7Ci19Ci0KLUdJbnB1dFN0cmVhbSogd2Via2l0U291cFJlcXVlc3RJ
bnB1dFN0cmVhbU5ldyh1aW50NjRfdCBjb250ZW50TGVuZ3RoKQotewotICAgIFdlYktpdFNvdXBS
ZXF1ZXN0SW5wdXRTdHJlYW0qIHN0cmVhbSA9IFdFQktJVF9TT1VQX1JFUVVFU1RfSU5QVVRfU1RS
RUFNKGdfb2JqZWN0X25ldyhXRUJLSVRfVFlQRV9TT1VQX1JFUVVFU1RfSU5QVVRfU1RSRUFNLCBO
VUxMKSk7Ci0gICAgc3RyZWFtLT5wcml2LT5jb250ZW50TGVuZ3RoID0gY29udGVudExlbmd0aDsK
LSAgICByZXR1cm4gR19JTlBVVF9TVFJFQU0oc3RyZWFtKTsKLX0KLQotdm9pZCB3ZWJraXRTb3Vw
UmVxdWVzdElucHV0U3RyZWFtQWRkRGF0YShXZWJLaXRTb3VwUmVxdWVzdElucHV0U3RyZWFtKiBz
dHJlYW0sIGNvbnN0IHZvaWQqIGRhdGEsIHNpemVfdCBkYXRhTGVuZ3RoKQotewotICAgIGlmICh3
ZWJraXRTb3VwUmVxdWVzdElucHV0U3RyZWFtRmluaXNoZWQoc3RyZWFtKSkKLSAgICAgICAgcmV0
dXJuOwotCi0gICAgTXV0ZXhMb2NrZXIgbG9ja2VyKHN0cmVhbS0+cHJpdi0+cmVhZExvY2spOwot
Ci0gICAgaWYgKGRhdGFMZW5ndGgpIHsKLSAgICAgICAgLy8gVHJ1bmNhdGUgdGhlIGRhdGFMZW5n
dGggdG8gdGhlIGNvbnRlbnRMZW5ndGggaWYgaXQncyBrbm93bi4KLSAgICAgICAgaWYgKHN0cmVh
bS0+cHJpdi0+Y29udGVudExlbmd0aCAmJiBzdHJlYW0tPnByaXYtPmJ5dGVzUmVjZWl2ZWQgKyBk
YXRhTGVuZ3RoID4gc3RyZWFtLT5wcml2LT5jb250ZW50TGVuZ3RoKQotICAgICAgICAgICAgZGF0
YUxlbmd0aCA9IHN0cmVhbS0+cHJpdi0+Y29udGVudExlbmd0aCAtIHN0cmVhbS0+cHJpdi0+Ynl0
ZXNSZWNlaXZlZDsKLSAgICAgICAgc3RyZWFtLT5wcml2LT5ieXRlc1JlY2VpdmVkICs9IGRhdGFM
ZW5ndGg7Ci0gICAgICAgIGdfbWVtb3J5X2lucHV0X3N0cmVhbV9hZGRfZGF0YShHX01FTU9SWV9J
TlBVVF9TVFJFQU0oc3RyZWFtKSwgZ19tZW1kdXAoZGF0YSwgZGF0YUxlbmd0aCksIGRhdGFMZW5n
dGgsIGdfZnJlZSk7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgLy8gV2UgaGF2ZSByZWNlaXZlZCBh
bGwgdGhlIGRhdGEsIHNldCBjb250ZW50TGVuZ3RoIHRvIGJ5dGVzUmVjZWl2ZWQgdG8gaW5kaWNh
dGUgd2UgaGF2ZSBmaW5pc2hlZC4KLSAgICAgICAgc3RyZWFtLT5wcml2LT5jb250ZW50TGVuZ3Ro
ID0gc3RyZWFtLT5wcml2LT5ieXRlc1JlY2VpdmVkOwotICAgICAgICAvLyBJZiB0aGVyZSdzIGEg
cGVuZGluZyByZWFkIHRvIGNvbXBsZXRlLCByZWFkX2ZuIHdpbGwgcmV0dXJuIDAgYmVjYXVzZSB3
ZSBoYXZlbid0IGFkZGVkIG1vcmUgZGF0YSB0byB0aGUKLSAgICAgICAgLy8gbWVtb3J5IGlucHV0
IHN0cmVhbS4gQW5kIGlmIHRoZXJlIGlzbid0IGEgcGVuZGluZyByZWFkLCB0aGUgbmV4dCBjYWxs
IHRvIHJlYWRfYXN5bmMgd2lsbCByZXR1cm4gMCB0b28sIGJlY2F1c2UKLSAgICAgICAgLy8gd2Vi
a2l0U291cFJlcXVlc3RJbnB1dFN0cmVhbUZpbmlzaGVkKCkgaXMgbm93IFRSVUUuCi0gICAgfQot
Ci0gICAgd2Via2l0U291cFJlcXVlc3RJbnB1dFN0cmVhbVBlbmRpbmdSZWFkQXN5bmNDb21wbGV0
ZShzdHJlYW0pOwotfQotCi1ib29sIHdlYmtpdFNvdXBSZXF1ZXN0SW5wdXRTdHJlYW1GaW5pc2hl
ZChXZWJLaXRTb3VwUmVxdWVzdElucHV0U3RyZWFtKiBzdHJlYW0pCi17Ci0gICAgcmV0dXJuICF3
ZWJraXRTb3VwUmVxdWVzdElucHV0U3RyZWFtSXNXYWl0aW5nRm9yRGF0YShzdHJlYW0pOwotfQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9zb3VwL1dlYktpdFNvdXBSZXF1
ZXN0SW5wdXRTdHJlYW0uaCBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3Mvc291cC9XZWJLaXRT
b3VwUmVxdWVzdElucHV0U3RyZWFtLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGEz
YzcwMjA4Y2MxNGY0ZGNkZGJjZDljNGFjNGI1ZDlmNmY5NDNkM2QuLjAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9z
b3VwL1dlYktpdFNvdXBSZXF1ZXN0SW5wdXRTdHJlYW0uaAorKysgL2Rldi9udWxsCkBAIC0xLDU1
ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTIgSWdhbGlhIFMuTC4KLSAqCi0gKiBU
aGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5k
L29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5l
cmFsIFB1YmxpYwotICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUg
Rm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5
b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGRp
c3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lU
SE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgot
ICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAg
U2VlIHRoZSBHTlUKLSAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBk
ZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdO
VSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBsaWJy
YXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCi0gKiB0aGUg
RnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRo
IEZsb29yLAotICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0gKi8KLQotI2lmbmRlZiBX
ZWJLaXRTb3VwUmVxdWVzdElucHV0U3RyZWFtX2gKLSNkZWZpbmUgV2ViS2l0U291cFJlcXVlc3RJ
bnB1dFN0cmVhbV9oCi0KLSNpbmNsdWRlIDxnaW8vZ2lvLmg+Ci0KLUdfQkVHSU5fREVDTFMKLQot
I2RlZmluZSBXRUJLSVRfVFlQRV9TT1VQX1JFUVVFU1RfSU5QVVRfU1RSRUFNICAgICAgICAgICAg
KHdlYmtpdF9zb3VwX3JlcXVlc3RfaW5wdXRfc3RyZWFtX2dldF90eXBlKCkpCi0jZGVmaW5lIFdF
QktJVF9TT1VQX1JFUVVFU1RfSU5QVVRfU1RSRUFNKG9iamVjdCkgICAgICAgICAoR19UWVBFX0NI
RUNLX0lOU1RBTkNFX0NBU1QoKG9iamVjdCksIFdFQktJVF9UWVBFX1NPVVBfUkVRVUVTVF9JTlBV
VF9TVFJFQU0sIFdlYktpdFNvdXBSZXF1ZXN0SW5wdXRTdHJlYW0pKQotI2RlZmluZSBXRUJLSVRf
SVNfU09VUF9SRVFVRVNUX0lOUFVUX1NUUkVBTShvYmplY3QpICAgICAgKEdfVFlQRV9DSEVDS19J
TlNUQU5DRV9UWVBFKChvYmplY3QpLCBXRUJLSVRfVFlQRV9TT1VQX1JFUVVFU1RfSU5QVVRfU1RS
RUFNKSkKLSNkZWZpbmUgV0VCS0lUX1NPVVBfUkVRVUVTVF9JTlBVVF9TVFJFQU1fQ0xBU1Moa2xh
c3MpICAgIChHX1RZUEVfQ0hFQ0tfQ0xBU1NfQ0FTVCgoa2xhc3MpLCBXRUJLSVRfVFlQRV9TT1VQ
X1JFUVVFU1RfSU5QVVRfU1RSRUFNLCBXZWJLaXRTb3VwUmVxdWVzdElucHV0U3RyZWFtQ2xhc3Mp
KQotI2RlZmluZSBXRUJLSVRfSVNfU09VUF9SRVFVRVNUX0lOUFVUX1NUUkVBTV9DTEFTUyhrbGFz
cykgKEdfVFlQRV9DSEVDS19DTEFTU19UWVBFKChrbGFzcyksIFdFQktJVF9UWVBFX1NPVVBfUkVR
VUVTVF9JTlBVVF9TVFJFQU0pKQotI2RlZmluZSBXRUJLSVRfU09VUF9SRVFVRVNUX0lOUFVUX1NU
UkVBTV9HRVRfQ0xBU1Mob2JqKSAgKEdfVFlQRV9JTlNUQU5DRV9HRVRfQ0xBU1MoKG9iaiksIFdF
QktJVF9UWVBFX1NPVVBfUkVRVUVTVF9JTlBVVF9TVFJFQU0sIFdlYktpdFNvdXBSZXF1ZXN0SW5w
dXRTdHJlYW1DbGFzcykpCi0KLXR5cGVkZWYgc3RydWN0IF9XZWJLaXRTb3VwUmVxdWVzdElucHV0
U3RyZWFtIFdlYktpdFNvdXBSZXF1ZXN0SW5wdXRTdHJlYW07Ci10eXBlZGVmIHN0cnVjdCBfV2Vi
S2l0U291cFJlcXVlc3RJbnB1dFN0cmVhbUNsYXNzIFdlYktpdFNvdXBSZXF1ZXN0SW5wdXRTdHJl
YW1DbGFzczsKLXR5cGVkZWYgc3RydWN0IF9XZWJLaXRTb3VwUmVxdWVzdElucHV0U3RyZWFtUHJp
dmF0ZSBXZWJLaXRTb3VwUmVxdWVzdElucHV0U3RyZWFtUHJpdmF0ZTsKLQotc3RydWN0IF9XZWJL
aXRTb3VwUmVxdWVzdElucHV0U3RyZWFtIHsKLSAgICBHTWVtb3J5SW5wdXRTdHJlYW0gcGFyZW50
OwotCi0gICAgV2ViS2l0U291cFJlcXVlc3RJbnB1dFN0cmVhbVByaXZhdGUqIHByaXY7Ci19Owot
Ci1zdHJ1Y3QgX1dlYktpdFNvdXBSZXF1ZXN0SW5wdXRTdHJlYW1DbGFzcyB7Ci0gICAgR01lbW9y
eUlucHV0U3RyZWFtQ2xhc3MgcGFyZW50OwotfTsKLQotR1R5cGUgd2Via2l0X3NvdXBfcmVxdWVz
dF9pbnB1dF9zdHJlYW1fZ2V0X3R5cGUoKTsKLUdJbnB1dFN0cmVhbSogd2Via2l0U291cFJlcXVl
c3RJbnB1dFN0cmVhbU5ldyh1aW50NjRfdCBjb250ZW50TGVuZ3RoKTsKLXZvaWQgd2Via2l0U291
cFJlcXVlc3RJbnB1dFN0cmVhbUFkZERhdGEoV2ViS2l0U291cFJlcXVlc3RJbnB1dFN0cmVhbSos
IGNvbnN0IHZvaWQqIGRhdGEsIHNpemVfdCBkYXRhTGVuZ3RoKTsKLWJvb2wgd2Via2l0U291cFJl
cXVlc3RJbnB1dFN0cmVhbUZpbmlzaGVkKFdlYktpdFNvdXBSZXF1ZXN0SW5wdXRTdHJlYW0qKTsK
LQotR19FTkRfREVDTFMKLQotI2VuZGlmIC8vIFdlYktpdFNvdXBSZXF1ZXN0SW5wdXRTdHJlYW1f
aAo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>229206</attachid>
            <date>2014-04-12 11:16:26 -0700</date>
            <delta_ts>2016-01-02 09:24:54 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-126344-20140412201603.patch</filename>
            <type>text/plain</type>
            <size>41589</size>
            <attacher name="Diego Pino">dpino</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTY3MDcwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cKaW5kZXggYTA1NjUxYWQzMmVjZjAx
MjhlNjQ4MjkyZWQ2NjQ2YWU2Mzc4MDJlZC4uZGM5NDBjOGQ4ZDY5ZDVhODkwMjA0NTJlOGI5NDQ3
NjNhYjZlODhiOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJLaXQyL0NoYW5nZUxvZwpAQCAtMSwzICsxLDM5IEBACisyMDE0LTA0LTEyICBEaWVn
byBQaW5vIEdhcmNpYSAgPGRwaW5vQGlnYWxpYS5jb20+CisKKyAgICAgICAgW1NPVVBdIE1vdmUg
V2ViS2l0U291cFJlcXVlc3RHZW5lcmljIGFuZCBXZWJLaXRTb3VwUmVxdWVzdElucHV0U3RyZWFt
IHRvIFNoYXJlL05ldHdvcmsvc291cAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9MTI2MzQ0CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BT
ISkuCisKKyAgICAgICAgKiBQbGF0Zm9ybUVmbC5jbWFrZToKKyAgICAgICAgKiBQbGF0Zm9ybUdU
Sy5jbWFrZToKKyAgICAgICAgKiBTaGFyZWQvTmV0d29yay9DdXN0b21Qcm90b2NvbHMvc291cC9X
ZWJLaXRTb3VwUmVxdWVzdEdlbmVyaWMuY3BwOiBSZW5hbWVkIGZyb20gU291cmNlL1dlYktpdDIv
V2ViUHJvY2Vzcy9zb3VwL1dlYktpdFNvdXBSZXF1ZXN0R2VuZXJpYy5jcHAuCisgICAgICAgICh3
ZWJraXRTb3VwUmVxdWVzdEdlbmVyaWNGaW5hbGl6ZSk6CisgICAgICAgICh3ZWJraXRfc291cF9y
ZXF1ZXN0X2dlbmVyaWNfaW5pdCk6CisgICAgICAgICh3ZWJraXRTb3VwUmVxdWVzdEdlbmVyaWNT
ZW5kQXN5bmMpOgorICAgICAgICAod2Via2l0U291cFJlcXVlc3RHZW5lcmljU2VuZEZpbmlzaCk6
CisgICAgICAgICh3ZWJraXRTb3VwUmVxdWVzdEdlbmVyaWNHZXRDb250ZW50TGVuZ3RoKToKKyAg
ICAgICAgKHdlYmtpdFNvdXBSZXF1ZXN0R2VuZXJpY0dldENvbnRlbnRUeXBlKToKKyAgICAgICAg
KHdlYmtpdF9zb3VwX3JlcXVlc3RfZ2VuZXJpY19jbGFzc19pbml0KToKKyAgICAgICAgKHdlYmtp
dFNvdXBSZXF1ZXN0R2VuZXJpY1NldENvbnRlbnRMZW5ndGgpOgorICAgICAgICAod2Via2l0U291
cFJlcXVlc3RHZW5lcmljU2V0Q29udGVudFR5cGUpOgorICAgICAgICAqIFNoYXJlZC9OZXR3b3Jr
L0N1c3RvbVByb3RvY29scy9zb3VwL1dlYktpdFNvdXBSZXF1ZXN0R2VuZXJpYy5oOiBSZW5hbWVk
IGZyb20gU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9zb3VwL1dlYktpdFNvdXBSZXF1ZXN0R2Vu
ZXJpYy5oLgorICAgICAgICAqIFNoYXJlZC9OZXR3b3JrL0N1c3RvbVByb3RvY29scy9zb3VwL1dl
YktpdFNvdXBSZXF1ZXN0SW5wdXRTdHJlYW0uY3BwOiBSZW5hbWVkIGZyb20gU291cmNlL1dlYktp
dDIvV2ViUHJvY2Vzcy9zb3VwL1dlYktpdFNvdXBSZXF1ZXN0SW5wdXRTdHJlYW0uY3BwLgorICAg
ICAgICAoQXN5bmNSZWFkRGF0YTo6QXN5bmNSZWFkRGF0YSk6CisgICAgICAgICh3ZWJraXRTb3Vw
UmVxdWVzdElucHV0U3RyZWFtUmVhZEFzeW5jUmVzdWx0Q29tcGxldGUpOgorICAgICAgICAod2Vi
a2l0U291cFJlcXVlc3RJbnB1dFN0cmVhbVBlbmRpbmdSZWFkQXN5bmNDb21wbGV0ZSk6CisgICAg
ICAgICh3ZWJraXRTb3VwUmVxdWVzdElucHV0U3RyZWFtSGFzRGF0YVRvUmVhZCk6CisgICAgICAg
ICh3ZWJraXRTb3VwUmVxdWVzdElucHV0U3RyZWFtSXNXYWl0aW5nRm9yRGF0YSk6CisgICAgICAg
ICh3ZWJraXRTb3VwUmVxdWVzdElucHV0U3RyZWFtUmVhZEFzeW5jKToKKyAgICAgICAgKHdlYmtp
dFNvdXBSZXF1ZXN0SW5wdXRTdHJlYW1SZWFkRmluaXNoKToKKyAgICAgICAgKHdlYmtpdFNvdXBS
ZXF1ZXN0SW5wdXRTdHJlYW1GaW5hbGl6ZSk6CisgICAgICAgICh3ZWJraXRfc291cF9yZXF1ZXN0
X2lucHV0X3N0cmVhbV9pbml0KToKKyAgICAgICAgKHdlYmtpdF9zb3VwX3JlcXVlc3RfaW5wdXRf
c3RyZWFtX2NsYXNzX2luaXQpOgorICAgICAgICAod2Via2l0U291cFJlcXVlc3RJbnB1dFN0cmVh
bU5ldyk6CisgICAgICAgICh3ZWJraXRTb3VwUmVxdWVzdElucHV0U3RyZWFtQWRkRGF0YSk6Cisg
ICAgICAgICh3ZWJraXRTb3VwUmVxdWVzdElucHV0U3RyZWFtRmluaXNoZWQpOgorICAgICAgICAq
IFNoYXJlZC9OZXR3b3JrL0N1c3RvbVByb3RvY29scy9zb3VwL1dlYktpdFNvdXBSZXF1ZXN0SW5w
dXRTdHJlYW0uaDogUmVuYW1lZCBmcm9tIFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3Mvc291cC9X
ZWJLaXRTb3VwUmVxdWVzdElucHV0U3RyZWFtLmguCisKIDIwMTQtMDQtMDkgIEplcmVteSBKb25l
cyAgPGplcmVteWpAYXBwbGUuY29tPgogCiAgICAgICAgIEZpeCBidWlsZCBmYWlsdXJlIHdoZW4g
I2lmIFVTRShYUENfU0VSVklDRVMpIGlzIGZhbHNlLgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktp
dDIvUGxhdGZvcm1FZmwuY21ha2UgYi9Tb3VyY2UvV2ViS2l0Mi9QbGF0Zm9ybUVmbC5jbWFrZQpp
bmRleCBmMGRlOWJiYTVkNjI4OTIzZDFjNjY2MDQyYzcyYjNkYWE2ODFhYTZlLi4yMTk5OTA0YTgy
ZjQwMmE4YmMzYjQzZGYzNjYyMTU2NjFjNTZiNTljIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
Mi9QbGF0Zm9ybUVmbC5jbWFrZQorKysgYi9Tb3VyY2UvV2ViS2l0Mi9QbGF0Zm9ybUVmbC5jbWFr
ZQpAQCAtMzAsNiArMzAsOSBAQCBsaXN0KEFQUEVORCBXZWJLaXQyX1NPVVJDRVMKIAogICAgIFNo
YXJlZC9Eb3dubG9hZHMvc291cC9Eb3dubG9hZFNvdXAuY3BwCiAKKyAgICBTaGFyZWQvTmV0d29y
ay9DdXN0b21Qcm90b2NvbHMvc291cC9XZWJLaXRTb3VwUmVxdWVzdEdlbmVyaWMuY3BwCisgICAg
U2hhcmVkL05ldHdvcmsvQ3VzdG9tUHJvdG9jb2xzL3NvdXAvV2ViS2l0U291cFJlcXVlc3RJbnB1
dFN0cmVhbS5jcHAKKwogICAgIFNoYXJlZC9QbHVnaW5zL05ldHNjYXBlL3gxMS9OZXRzY2FwZVBs
dWdpbk1vZHVsZVgxMS5jcHAKIAogICAgIFNoYXJlZC9jYWlyby9TaGFyZWFibGVCaXRtYXBDYWly
by5jcHAKQEAgLTE5OCw4ICsyMDEsNiBAQCBsaXN0KEFQUEVORCBXZWJLaXQyX1NPVVJDRVMKICAg
ICBXZWJQcm9jZXNzL2VmbC9TZWNjb21wRmlsdGVyc1dlYlByb2Nlc3NFZmwuY3BwCiAgICAgV2Vi
UHJvY2Vzcy9lZmwvV2ViUHJvY2Vzc01haW5FZmwuY3BwCiAKLSAgICBXZWJQcm9jZXNzL3NvdXAv
V2ViS2l0U291cFJlcXVlc3RHZW5lcmljLmNwcAotICAgIFdlYlByb2Nlc3Mvc291cC9XZWJLaXRT
b3VwUmVxdWVzdElucHV0U3RyZWFtLmNwcAogICAgIFdlYlByb2Nlc3Mvc291cC9XZWJQcm9jZXNz
U291cC5jcHAKICAgICBXZWJQcm9jZXNzL3NvdXAvV2ViU291cFJlcXVlc3RNYW5hZ2VyLmNwcAog
KQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvUGxhdGZvcm1HVEsuY21ha2UgYi9Tb3VyY2Uv
V2ViS2l0Mi9QbGF0Zm9ybUdUSy5jbWFrZQppbmRleCA4OGJlODk5NDg0Zjk1Mzg0ZDhlZjZiYTFi
NmI4NjAzOTk5NmI3N2U2Li43NjIxZWQzNDQ3ZDJlNjRhZjVjYzViNmMxZTdjMmJmMmJmMzZlMzJk
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9QbGF0Zm9ybUdUSy5jbWFrZQorKysgYi9Tb3Vy
Y2UvV2ViS2l0Mi9QbGF0Zm9ybUdUSy5jbWFrZQpAQCAtNDgsNiArNDgsOCBAQCBsaXN0KEFQUEVO
RCBXZWJLaXQyX1NPVVJDRVMKIAogICAgIFNoYXJlZC9OZXR3b3JrL0N1c3RvbVByb3RvY29scy9z
b3VwL0N1c3RvbVByb3RvY29sTWFuYWdlckltcGwuY3BwCiAgICAgU2hhcmVkL05ldHdvcmsvQ3Vz
dG9tUHJvdG9jb2xzL3NvdXAvQ3VzdG9tUHJvdG9jb2xNYW5hZ2VyU291cC5jcHAKKyAgICBTaGFy
ZWQvTmV0d29yay9DdXN0b21Qcm90b2NvbHMvc291cC9XZWJLaXRTb3VwUmVxdWVzdEdlbmVyaWMu
Y3BwCisgICAgU2hhcmVkL05ldHdvcmsvQ3VzdG9tUHJvdG9jb2xzL3NvdXAvV2ViS2l0U291cFJl
cXVlc3RJbnB1dFN0cmVhbS5jcHAKIAogICAgIFNoYXJlZC9QbHVnaW5zL05ldHNjYXBlL3gxMS9O
ZXRzY2FwZVBsdWdpbk1vZHVsZVgxMS5jcHAKIApAQCAtMzA1LDggKzMwNyw2IEBAIGxpc3QoQVBQ
RU5EIFdlYktpdDJfU09VUkNFUwogICAgIFdlYlByb2Nlc3MvZ3RrL1dlYkd0a0luamVjdGVkQnVu
ZGxlTWFpbi5jcHAKICAgICBXZWJQcm9jZXNzL2d0ay9XZWJQcm9jZXNzTWFpbkd0ay5jcHAKIAot
ICAgIFdlYlByb2Nlc3Mvc291cC9XZWJLaXRTb3VwUmVxdWVzdEdlbmVyaWMuY3BwCi0gICAgV2Vi
UHJvY2Vzcy9zb3VwL1dlYktpdFNvdXBSZXF1ZXN0SW5wdXRTdHJlYW0uY3BwCiAgICAgV2ViUHJv
Y2Vzcy9zb3VwL1dlYlByb2Nlc3NTb3VwLmNwcAogKQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0Mi9TaGFyZWQvTmV0d29yay9DdXN0b21Qcm90b2NvbHMvc291cC9XZWJLaXRTb3VwUmVxdWVz
dEdlbmVyaWMuY3BwIGIvU291cmNlL1dlYktpdDIvU2hhcmVkL05ldHdvcmsvQ3VzdG9tUHJvdG9j
b2xzL3NvdXAvV2ViS2l0U291cFJlcXVlc3RHZW5lcmljLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi41NWM1MDM3
NWEwYzNlM2JmMGNmOGE1NTIzY2UxNTZlNTg4NjQ0M2UzCi0tLSAvZGV2L251bGwKKysrIGIvU291
cmNlL1dlYktpdDIvU2hhcmVkL05ldHdvcmsvQ3VzdG9tUHJvdG9jb2xzL3NvdXAvV2ViS2l0U291
cFJlcXVlc3RHZW5lcmljLmNwcApAQCAtMCwwICsxLDEwNyBAQAorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAxMiBJZ2FsaWEgUy5MLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJl
OyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUg
dGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1
Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNp
b24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lv
bi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBp
dCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBl
dmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5l
cmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBo
YXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGlj
ZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJ
Qi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIElu
Yy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEw
LTEzMDEsIFVTQS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiV2ViS2l0
U291cFJlcXVlc3RHZW5lcmljLmgiCisKKyNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+CisK
KyNpZiAhRU5BQkxFKENVU1RPTV9QUk9UT0NPTFMpCisjaW5jbHVkZSAiV2ViUHJvY2Vzcy5oIgor
I2luY2x1ZGUgIldlYlNvdXBSZXF1ZXN0TWFuYWdlci5oIgorI2VuZGlmCisKK3VzaW5nIG5hbWVz
cGFjZSBXZWJLaXQ7CisKK0dfREVGSU5FX1RZUEUoV2ViS2l0U291cFJlcXVlc3RHZW5lcmljLCB3
ZWJraXRfc291cF9yZXF1ZXN0X2dlbmVyaWMsIFNPVVBfVFlQRV9SRVFVRVNUKQorCitzdHJ1Y3Qg
X1dlYktpdFNvdXBSZXF1ZXN0R2VuZXJpY1ByaXZhdGUgeworICAgIENTdHJpbmcgbWltZVR5cGU7
CisgICAgZ29mZnNldCBjb250ZW50TGVuZ3RoOworfTsKKworc3RhdGljIHZvaWQgd2Via2l0U291
cFJlcXVlc3RHZW5lcmljRmluYWxpemUoR09iamVjdCogb2JqZWN0KQoreworICAgIFdFQktJVF9T
T1VQX1JFUVVFU1RfR0VORVJJQyhvYmplY3QpLT5wcml2LT5+V2ViS2l0U291cFJlcXVlc3RHZW5l
cmljUHJpdmF0ZSgpOworICAgIEdfT0JKRUNUX0NMQVNTKHdlYmtpdF9zb3VwX3JlcXVlc3RfZ2Vu
ZXJpY19wYXJlbnRfY2xhc3MpLT5maW5hbGl6ZShvYmplY3QpOworfQorCitzdGF0aWMgdm9pZCB3
ZWJraXRfc291cF9yZXF1ZXN0X2dlbmVyaWNfaW5pdChXZWJLaXRTb3VwUmVxdWVzdEdlbmVyaWMq
IHJlcXVlc3QpCit7CisgICAgV2ViS2l0U291cFJlcXVlc3RHZW5lcmljUHJpdmF0ZSogcHJpdiA9
IEdfVFlQRV9JTlNUQU5DRV9HRVRfUFJJVkFURShyZXF1ZXN0LCBXRUJLSVRfVFlQRV9TT1VQX1JF
UVVFU1RfR0VORVJJQywgV2ViS2l0U291cFJlcXVlc3RHZW5lcmljUHJpdmF0ZSk7CisgICAgcmVx
dWVzdC0+cHJpdiA9IHByaXY7CisgICAgbmV3IChwcml2KSBXZWJLaXRTb3VwUmVxdWVzdEdlbmVy
aWNQcml2YXRlKCk7Cit9CisKK3N0YXRpYyB2b2lkIHdlYmtpdFNvdXBSZXF1ZXN0R2VuZXJpY1Nl
bmRBc3luYyhTb3VwUmVxdWVzdCogcmVxdWVzdCwgR0NhbmNlbGxhYmxlKiBjYW5jZWxsYWJsZSwg
R0FzeW5jUmVhZHlDYWxsYmFjayBjYWxsYmFjaywgZ3BvaW50ZXIgdXNlckRhdGEpCit7CisjaWYg
RU5BQkxFKENVU1RPTV9QUk9UT0NPTFMpCisgICAgQ3VzdG9tUHJvdG9jb2xNYW5hZ2VySW1wbCog
Y3VzdG9tUHJvdG9jb2xNYW5hZ2VyID0gV0VCS0lUX1NPVVBfUkVRVUVTVF9HRU5FUklDX0dFVF9D
TEFTUyhyZXF1ZXN0KS0+Y3VzdG9tUHJvdG9jb2xNYW5hZ2VyOworICAgIEFTU0VSVChjdXN0b21Q
cm90b2NvbE1hbmFnZXIpOworICAgIGN1c3RvbVByb3RvY29sTWFuYWdlci0+c2VuZChnX3Rhc2tf
bmV3KHJlcXVlc3QsIGNhbmNlbGxhYmxlLCBjYWxsYmFjaywgdXNlckRhdGEpKTsKKyNlbHNlCisg
ICAgV2ViUHJvY2Vzczo6c2hhcmVkKCkuc3VwcGxlbWVudDxXZWJTb3VwUmVxdWVzdE1hbmFnZXI+
KCktPnNlbmQoZ190YXNrX25ldyhyZXF1ZXN0LCBjYW5jZWxsYWJsZSwgY2FsbGJhY2ssIHVzZXJE
YXRhKSk7CisjZW5kaWYKK30KKworc3RhdGljIEdJbnB1dFN0cmVhbSogd2Via2l0U291cFJlcXVl
c3RHZW5lcmljU2VuZEZpbmlzaChTb3VwUmVxdWVzdCogcmVxdWVzdCwgR0FzeW5jUmVzdWx0KiBy
ZXN1bHQsIEdFcnJvcioqIGVycm9yKQoreworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKGdfdGFz
a19pc192YWxpZChyZXN1bHQsIHJlcXVlc3QpLCAwKTsKKyNpZiBFTkFCTEUoQ1VTVE9NX1BST1RP
Q09MUykKKyAgICBDdXN0b21Qcm90b2NvbE1hbmFnZXJJbXBsKiBjdXN0b21Qcm90b2NvbE1hbmFn
ZXIgPSBXRUJLSVRfU09VUF9SRVFVRVNUX0dFTkVSSUNfR0VUX0NMQVNTKHJlcXVlc3QpLT5jdXN0
b21Qcm90b2NvbE1hbmFnZXI7CisgICAgQVNTRVJUKGN1c3RvbVByb3RvY29sTWFuYWdlcik7Cisg
ICAgcmV0dXJuIGN1c3RvbVByb3RvY29sTWFuYWdlci0+ZmluaXNoKEdfVEFTSyhyZXN1bHQpLCBl
cnJvcik7CisjZWxzZQorICAgIHJldHVybiBXZWJQcm9jZXNzOjpzaGFyZWQoKS5zdXBwbGVtZW50
PFdlYlNvdXBSZXF1ZXN0TWFuYWdlcj4oKS0+ZmluaXNoKEdfVEFTSyhyZXN1bHQpLCBlcnJvcik7
CisjZW5kaWYKK30KKworc3RhdGljIGdvZmZzZXQgd2Via2l0U291cFJlcXVlc3RHZW5lcmljR2V0
Q29udGVudExlbmd0aChTb3VwUmVxdWVzdCogcmVxdWVzdCkKK3sKKyAgICByZXR1cm4gV0VCS0lU
X1NPVVBfUkVRVUVTVF9HRU5FUklDKHJlcXVlc3QpLT5wcml2LT5jb250ZW50TGVuZ3RoOworfQor
CitzdGF0aWMgY29uc3QgY2hhciogd2Via2l0U291cFJlcXVlc3RHZW5lcmljR2V0Q29udGVudFR5
cGUoU291cFJlcXVlc3QqIHJlcXVlc3QpCit7CisgICAgcmV0dXJuIFdFQktJVF9TT1VQX1JFUVVF
U1RfR0VORVJJQyhyZXF1ZXN0KS0+cHJpdi0+bWltZVR5cGUuZGF0YSgpOworfQorCitzdGF0aWMg
dm9pZCB3ZWJraXRfc291cF9yZXF1ZXN0X2dlbmVyaWNfY2xhc3NfaW5pdChXZWJLaXRTb3VwUmVx
dWVzdEdlbmVyaWNDbGFzcyogcmVxdWVzdEdlbmVyaWNDbGFzcykKK3sKKyAgICBHT2JqZWN0Q2xh
c3MqIGdPYmplY3RDbGFzcyA9IEdfT0JKRUNUX0NMQVNTKHJlcXVlc3RHZW5lcmljQ2xhc3MpOwor
ICAgIGdPYmplY3RDbGFzcy0+ZmluYWxpemUgPSB3ZWJraXRTb3VwUmVxdWVzdEdlbmVyaWNGaW5h
bGl6ZTsKKworICAgIFNvdXBSZXF1ZXN0Q2xhc3MqIHJlcXVlc3RDbGFzcyA9IFNPVVBfUkVRVUVT
VF9DTEFTUyhyZXF1ZXN0R2VuZXJpY0NsYXNzKTsKKyAgICByZXF1ZXN0Q2xhc3MtPnNlbmRfYXN5
bmMgPSB3ZWJraXRTb3VwUmVxdWVzdEdlbmVyaWNTZW5kQXN5bmM7CisgICAgcmVxdWVzdENsYXNz
LT5zZW5kX2ZpbmlzaCA9IHdlYmtpdFNvdXBSZXF1ZXN0R2VuZXJpY1NlbmRGaW5pc2g7CisgICAg
cmVxdWVzdENsYXNzLT5nZXRfY29udGVudF9sZW5ndGggPSB3ZWJraXRTb3VwUmVxdWVzdEdlbmVy
aWNHZXRDb250ZW50TGVuZ3RoOworICAgIHJlcXVlc3RDbGFzcy0+Z2V0X2NvbnRlbnRfdHlwZSA9
IHdlYmtpdFNvdXBSZXF1ZXN0R2VuZXJpY0dldENvbnRlbnRUeXBlOworCisgICAgZ190eXBlX2Ns
YXNzX2FkZF9wcml2YXRlKHJlcXVlc3RHZW5lcmljQ2xhc3MsIHNpemVvZihXZWJLaXRTb3VwUmVx
dWVzdEdlbmVyaWNQcml2YXRlKSk7Cit9CisKK3ZvaWQgd2Via2l0U291cFJlcXVlc3RHZW5lcmlj
U2V0Q29udGVudExlbmd0aChXZWJLaXRTb3VwUmVxdWVzdEdlbmVyaWMqIHJlcXVlc3QsIGdvZmZz
ZXQgY29udGVudExlbmd0aCkKK3sKKyAgICByZXF1ZXN0LT5wcml2LT5jb250ZW50TGVuZ3RoID0g
Y29udGVudExlbmd0aDsKK30KKwordm9pZCB3ZWJraXRTb3VwUmVxdWVzdEdlbmVyaWNTZXRDb250
ZW50VHlwZShXZWJLaXRTb3VwUmVxdWVzdEdlbmVyaWMqIHJlcXVlc3QsIGNvbnN0IGNoYXIqIG1p
bWVUeXBlKQoreworICAgIHJlcXVlc3QtPnByaXYtPm1pbWVUeXBlID0gbWltZVR5cGU7Cit9CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvTmV0d29yay9DdXN0b21Qcm90b2NvbHMv
c291cC9XZWJLaXRTb3VwUmVxdWVzdEdlbmVyaWMuaCBiL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9O
ZXR3b3JrL0N1c3RvbVByb3RvY29scy9zb3VwL1dlYktpdFNvdXBSZXF1ZXN0R2VuZXJpYy5oCm5l
dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAuLjVjNWQzYWQyZDUxMTY4NDdjOTcxZDNkOTFjNmVjNWY3N2E1NDRlYjQKLS0tIC9k
ZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvTmV0d29yay9DdXN0b21Qcm90b2Nv
bHMvc291cC9XZWJLaXRTb3VwUmVxdWVzdEdlbmVyaWMuaApAQCAtMCwwICsxLDY0IEBACisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDEyIElnYWxpYSBTLkwuCisgKgorICogVGhpcyBsaWJyYXJ5IGlz
IGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5
IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAq
IExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVp
dGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFu
eSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0
aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJB
TlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJ
TElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisg
KiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisg
KiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5l
cmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBm
aWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUg
Rm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJv
c3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpZm5kZWYgV2ViS2l0U291cFJlcXVl
c3RHZW5lcmljX2gKKyNkZWZpbmUgV2ViS2l0U291cFJlcXVlc3RHZW5lcmljX2gKKworI2luY2x1
ZGUgPGdsaWItb2JqZWN0Lmg+CisjaW5jbHVkZSA8bGlic291cC9zb3VwLmg+CisKKyNpZiBFTkFC
TEUoQ1VTVE9NX1BST1RPQ09MUykKKyNpbmNsdWRlICJDdXN0b21Qcm90b2NvbE1hbmFnZXJJbXBs
LmgiCisjZW5kaWYKKworR19CRUdJTl9ERUNMUworCisjZGVmaW5lIFdFQktJVF9UWVBFX1NPVVBf
UkVRVUVTVF9HRU5FUklDICAgICAgICAgICAgKHdlYmtpdF9zb3VwX3JlcXVlc3RfZ2VuZXJpY19n
ZXRfdHlwZSgpKQorI2RlZmluZSBXRUJLSVRfU09VUF9SRVFVRVNUX0dFTkVSSUMob2JqZWN0KSAg
ICAgICAgIChHX1RZUEVfQ0hFQ0tfSU5TVEFOQ0VfQ0FTVCgob2JqZWN0KSwgV0VCS0lUX1RZUEVf
U09VUF9SRVFVRVNUX0dFTkVSSUMsIFdlYktpdFNvdXBSZXF1ZXN0R2VuZXJpYykpCisjZGVmaW5l
IFdFQktJVF9JU19TT1VQX1JFUVVFU1RfR0VORVJJQyhvYmplY3QpICAgICAgKEdfVFlQRV9DSEVD
S19JTlNUQU5DRV9UWVBFKChvYmplY3QpLCBXRUJLSVRfVFlQRV9TT1VQX1JFUVVFU1RfR0VORVJJ
QykpCisjZGVmaW5lIFdFQktJVF9TT1VQX1JFUVVFU1RfR0VORVJJQ19DTEFTUyhrbGFzcykgICAg
KEdfVFlQRV9DSEVDS19DTEFTU19DQVNUKChrbGFzcyksIFdFQktJVF9UWVBFX1NPVVBfUkVRVUVT
VF9HRU5FUklDLCBXZWJLaXRTb3VwUmVxdWVzdEdlbmVyaWNDbGFzcykpCisjZGVmaW5lIFdFQktJ
VF9JU19TT1VQX1JFUVVFU1RfR0VORVJJQ19DTEFTUyhrbGFzcykgKEdfVFlQRV9DSEVDS19DTEFT
U19UWVBFKChrbGFzcyksIFdFQktJVF9UWVBFX1NPVVBfUkVRVUVTVF9HRU5FUklDKSkKKyNkZWZp
bmUgV0VCS0lUX1NPVVBfUkVRVUVTVF9HRU5FUklDX0dFVF9DTEFTUyhvYmopICAoR19UWVBFX0lO
U1RBTkNFX0dFVF9DTEFTUygob2JqKSwgV0VCS0lUX1RZUEVfU09VUF9SRVFVRVNUX0dFTkVSSUMs
IFdlYktpdFNvdXBSZXF1ZXN0R2VuZXJpY0NsYXNzKSkKKwordHlwZWRlZiBzdHJ1Y3QgX1dlYktp
dFNvdXBSZXF1ZXN0R2VuZXJpYyBXZWJLaXRTb3VwUmVxdWVzdEdlbmVyaWM7Cit0eXBlZGVmIHN0
cnVjdCBfV2ViS2l0U291cFJlcXVlc3RHZW5lcmljQ2xhc3MgV2ViS2l0U291cFJlcXVlc3RHZW5l
cmljQ2xhc3M7Cit0eXBlZGVmIHN0cnVjdCBfV2ViS2l0U291cFJlcXVlc3RHZW5lcmljUHJpdmF0
ZSBXZWJLaXRTb3VwUmVxdWVzdEdlbmVyaWNQcml2YXRlOworCitzdHJ1Y3QgX1dlYktpdFNvdXBS
ZXF1ZXN0R2VuZXJpYyB7CisgICAgU291cFJlcXVlc3QgcGFyZW50OworCisgICAgV2ViS2l0U291
cFJlcXVlc3RHZW5lcmljUHJpdmF0ZSAqcHJpdjsKK307CisKK3N0cnVjdCBfV2ViS2l0U291cFJl
cXVlc3RHZW5lcmljQ2xhc3MgeworICAgIFNvdXBSZXF1ZXN0Q2xhc3MgcGFyZW50OworCisjaWYg
RU5BQkxFKENVU1RPTV9QUk9UT0NPTFMpCisgICAgV2ViS2l0OjpDdXN0b21Qcm90b2NvbE1hbmFn
ZXJJbXBsKiBjdXN0b21Qcm90b2NvbE1hbmFnZXI7CisjZW5kaWYKK307CisKK0dUeXBlIHdlYmtp
dF9zb3VwX3JlcXVlc3RfZ2VuZXJpY19nZXRfdHlwZSgpOworCit2b2lkIHdlYmtpdFNvdXBSZXF1
ZXN0R2VuZXJpY1NldENvbnRlbnRMZW5ndGgoV2ViS2l0U291cFJlcXVlc3RHZW5lcmljKiwgZ29m
ZnNldCBjb250ZW50TGVuZ3RoKTsKK3ZvaWQgd2Via2l0U291cFJlcXVlc3RHZW5lcmljU2V0Q29u
dGVudFR5cGUoV2ViS2l0U291cFJlcXVlc3RHZW5lcmljKiwgY29uc3QgY2hhciogbWltZVR5cGUp
OworCitHX0VORF9ERUNMUworCisjZW5kaWYgLy8gV2ViS2l0U291cFJlcXVlc3RHZW5lcmljX2gK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9OZXR3b3JrL0N1c3RvbVByb3RvY29s
cy9zb3VwL1dlYktpdFNvdXBSZXF1ZXN0SW5wdXRTdHJlYW0uY3BwIGIvU291cmNlL1dlYktpdDIv
U2hhcmVkL05ldHdvcmsvQ3VzdG9tUHJvdG9jb2xzL3NvdXAvV2ViS2l0U291cFJlcXVlc3RJbnB1
dFN0cmVhbS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZGQ1ZDU4YWQ1Yzg3OWE1ODgzOGEzZmRkYTI1MzVjNjVk
MjM5ODQzYQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9OZXR3b3Jr
L0N1c3RvbVByb3RvY29scy9zb3VwL1dlYktpdFNvdXBSZXF1ZXN0SW5wdXRTdHJlYW0uY3BwCkBA
IC0wLDAgKzEsMTcyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyIElnYWxpYSBTLkwuCisg
KgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRl
IGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJh
cnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNv
ZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBv
ciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFy
eSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICog
YnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFu
dHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVS
UE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9y
IG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9m
IHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRo
aXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bwor
ICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0
LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNp
bmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJXZWJLaXRTb3VwUmVxdWVzdElucHV0U3RyZWFt
LmgiCisKKyNpbmNsdWRlIDx3dGYvVGhyZWFkaW5nLmg+CisjaW5jbHVkZSA8d3RmL2dvYmplY3Qv
R1JlZlB0ci5oPgorCitzdHJ1Y3QgQXN5bmNSZWFkRGF0YSB7CisgICAgQXN5bmNSZWFkRGF0YShH
U2ltcGxlQXN5bmNSZXN1bHQqIHJlc3VsdCwgdm9pZCogYnVmZmVyLCBnc2l6ZSBjb3VudCwgR0Nh
bmNlbGxhYmxlKiBjYW5jZWxsYWJsZSkKKyAgICAgICAgOiByZXN1bHQocmVzdWx0KQorICAgICAg
ICAsIGJ1ZmZlcihidWZmZXIpCisgICAgICAgICwgY291bnQoY291bnQpCisgICAgICAgICwgY2Fu
Y2VsbGFibGUoY2FuY2VsbGFibGUpCisgICAgeworICAgIH0KKworICAgIEdSZWZQdHI8R1NpbXBs
ZUFzeW5jUmVzdWx0PiByZXN1bHQ7CisgICAgdm9pZCogYnVmZmVyOworICAgIHNpemVfdCBjb3Vu
dDsKKyAgICBHUmVmUHRyPEdDYW5jZWxsYWJsZT4gY2FuY2VsbGFibGU7Cit9OworCitzdHJ1Y3Qg
X1dlYktpdFNvdXBSZXF1ZXN0SW5wdXRTdHJlYW1Qcml2YXRlIHsKKyAgICB1aW50NjRfdCBjb250
ZW50TGVuZ3RoOworICAgIHVpbnQ2NF90IGJ5dGVzUmVjZWl2ZWQ7CisgICAgdWludDY0X3QgYnl0
ZXNSZWFkOworCisgICAgTXV0ZXggcmVhZExvY2s7CisgICAgc3RkOjp1bmlxdWVfcHRyPEFzeW5j
UmVhZERhdGE+IHBlbmRpbmdBc3luY1JlYWQ7Cit9OworCitHX0RFRklORV9UWVBFKFdlYktpdFNv
dXBSZXF1ZXN0SW5wdXRTdHJlYW0sIHdlYmtpdF9zb3VwX3JlcXVlc3RfaW5wdXRfc3RyZWFtLCBH
X1RZUEVfTUVNT1JZX0lOUFVUX1NUUkVBTSkKKworc3RhdGljIHZvaWQgd2Via2l0U291cFJlcXVl
c3RJbnB1dFN0cmVhbVJlYWRBc3luY1Jlc3VsdENvbXBsZXRlKFdlYktpdFNvdXBSZXF1ZXN0SW5w
dXRTdHJlYW0qIHN0cmVhbSwgR1NpbXBsZUFzeW5jUmVzdWx0KiByZXN1bHQsIHZvaWQqIGJ1ZmZl
ciwgZ3NpemUgY291bnQsIEdDYW5jZWxsYWJsZSogY2FuY2VsbGFibGUpCit7CisgICAgR0Vycm9y
KiBlcnJvciA9IDA7CisgICAgZ3NzaXplIGJ5dGVzUmVhZCA9IEdfSU5QVVRfU1RSRUFNX0dFVF9D
TEFTUyhzdHJlYW0pLT5yZWFkX2ZuKEdfSU5QVVRfU1RSRUFNKHN0cmVhbSksIGJ1ZmZlciwgY291
bnQsIGNhbmNlbGxhYmxlLCAmZXJyb3IpOworICAgIGlmICghZXJyb3IpIHsKKyAgICAgICAgZ19z
aW1wbGVfYXN5bmNfcmVzdWx0X3NldF9vcF9yZXNfZ3NzaXplKHJlc3VsdCwgYnl0ZXNSZWFkKTsK
KyAgICAgICAgc3RyZWFtLT5wcml2LT5ieXRlc1JlYWQgKz0gYnl0ZXNSZWFkOworICAgIH0gZWxz
ZQorICAgICAgICBnX3NpbXBsZV9hc3luY19yZXN1bHRfdGFrZV9lcnJvcihyZXN1bHQsIGVycm9y
KTsKKyAgICBnX3NpbXBsZV9hc3luY19yZXN1bHRfY29tcGxldGVfaW5faWRsZShyZXN1bHQpOwor
fQorCitzdGF0aWMgdm9pZCB3ZWJraXRTb3VwUmVxdWVzdElucHV0U3RyZWFtUGVuZGluZ1JlYWRB
c3luY0NvbXBsZXRlKFdlYktpdFNvdXBSZXF1ZXN0SW5wdXRTdHJlYW0qIHN0cmVhbSkKK3sKKyAg
ICBpZiAoIXN0cmVhbS0+cHJpdi0+cGVuZGluZ0FzeW5jUmVhZCkKKyAgICAgICAgcmV0dXJuOwor
CisgICAgQXN5bmNSZWFkRGF0YSogZGF0YSA9IHN0cmVhbS0+cHJpdi0+cGVuZGluZ0FzeW5jUmVh
ZC5nZXQoKTsKKyAgICB3ZWJraXRTb3VwUmVxdWVzdElucHV0U3RyZWFtUmVhZEFzeW5jUmVzdWx0
Q29tcGxldGUoc3RyZWFtLCBkYXRhLT5yZXN1bHQuZ2V0KCksIGRhdGEtPmJ1ZmZlciwgZGF0YS0+
Y291bnQsIGRhdGEtPmNhbmNlbGxhYmxlLmdldCgpKTsKKyAgICBzdHJlYW0tPnByaXYtPnBlbmRp
bmdBc3luY1JlYWQgPSBudWxscHRyOworfQorCitzdGF0aWMgYm9vbCB3ZWJraXRTb3VwUmVxdWVz
dElucHV0U3RyZWFtSGFzRGF0YVRvUmVhZChXZWJLaXRTb3VwUmVxdWVzdElucHV0U3RyZWFtKiBz
dHJlYW0pCit7CisgICAgcmV0dXJuIHN0cmVhbS0+cHJpdi0+Ynl0ZXNSZWFkIDwgc3RyZWFtLT5w
cml2LT5ieXRlc1JlY2VpdmVkOworfQorCitzdGF0aWMgYm9vbCB3ZWJraXRTb3VwUmVxdWVzdElu
cHV0U3RyZWFtSXNXYWl0aW5nRm9yRGF0YShXZWJLaXRTb3VwUmVxdWVzdElucHV0U3RyZWFtKiBz
dHJlYW0pCit7CisgICAgcmV0dXJuICFzdHJlYW0tPnByaXYtPmNvbnRlbnRMZW5ndGggfHwgc3Ry
ZWFtLT5wcml2LT5ieXRlc1JlY2VpdmVkIDwgc3RyZWFtLT5wcml2LT5jb250ZW50TGVuZ3RoOwor
fQorCitzdGF0aWMgdm9pZCB3ZWJraXRTb3VwUmVxdWVzdElucHV0U3RyZWFtUmVhZEFzeW5jKEdJ
bnB1dFN0cmVhbSogaW5wdXRTdHJlYW0sIHZvaWQqIGJ1ZmZlciwgZ3NpemUgY291bnQsIGludCAv
KnByaW9yaXR5Ki8sIEdDYW5jZWxsYWJsZSogY2FuY2VsbGFibGUsIEdBc3luY1JlYWR5Q2FsbGJh
Y2sgY2FsbGJhY2ssIGdwb2ludGVyIHVzZXJEYXRhKQoreworICAgIFdlYktpdFNvdXBSZXF1ZXN0
SW5wdXRTdHJlYW0qIHN0cmVhbSA9IFdFQktJVF9TT1VQX1JFUVVFU1RfSU5QVVRfU1RSRUFNKGlu
cHV0U3RyZWFtKTsKKyAgICBHUmVmUHRyPEdTaW1wbGVBc3luY1Jlc3VsdD4gcmVzdWx0ID0gYWRv
cHRHUmVmKGdfc2ltcGxlX2FzeW5jX3Jlc3VsdF9uZXcoR19PQkpFQ1Qoc3RyZWFtKSwgY2FsbGJh
Y2ssIHVzZXJEYXRhLCByZWludGVycHJldF9jYXN0PHZvaWQqPih3ZWJraXRTb3VwUmVxdWVzdElu
cHV0U3RyZWFtUmVhZEFzeW5jKSkpOworCisgICAgTXV0ZXhMb2NrZXIgbG9ja2VyKHN0cmVhbS0+
cHJpdi0+cmVhZExvY2spOworCisgICAgaWYgKCF3ZWJraXRTb3VwUmVxdWVzdElucHV0U3RyZWFt
SGFzRGF0YVRvUmVhZChzdHJlYW0pICYmICF3ZWJraXRTb3VwUmVxdWVzdElucHV0U3RyZWFtSXNX
YWl0aW5nRm9yRGF0YShzdHJlYW0pKSB7CisgICAgICAgIGdfc2ltcGxlX2FzeW5jX3Jlc3VsdF9z
ZXRfb3BfcmVzX2dzc2l6ZShyZXN1bHQuZ2V0KCksIDApOworICAgICAgICBnX3NpbXBsZV9hc3lu
Y19yZXN1bHRfY29tcGxldGVfaW5faWRsZShyZXN1bHQuZ2V0KCkpOworICAgICAgICByZXR1cm47
CisgICAgfQorCisgICAgaWYgKHdlYmtpdFNvdXBSZXF1ZXN0SW5wdXRTdHJlYW1IYXNEYXRhVG9S
ZWFkKHN0cmVhbSkpIHsKKyAgICAgICAgd2Via2l0U291cFJlcXVlc3RJbnB1dFN0cmVhbVJlYWRB
c3luY1Jlc3VsdENvbXBsZXRlKHN0cmVhbSwgcmVzdWx0LmdldCgpLCBidWZmZXIsIGNvdW50LCBj
YW5jZWxsYWJsZSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBzdHJlYW0tPnByaXYt
PnBlbmRpbmdBc3luY1JlYWQgPSBzdGQ6Om1ha2VfdW5pcXVlPEFzeW5jUmVhZERhdGE+KHJlc3Vs
dC5nZXQoKSwgYnVmZmVyLCBjb3VudCwgY2FuY2VsbGFibGUpOworfQorCitzdGF0aWMgZ3NzaXpl
IHdlYmtpdFNvdXBSZXF1ZXN0SW5wdXRTdHJlYW1SZWFkRmluaXNoKEdJbnB1dFN0cmVhbSosIEdB
c3luY1Jlc3VsdCogcmVzdWx0LCBHRXJyb3IqKikKK3sKKyAgICBHU2ltcGxlQXN5bmNSZXN1bHQq
IHNpbXBsZVJlc3VsdCA9IEdfU0lNUExFX0FTWU5DX1JFU1VMVChyZXN1bHQpOworICAgIGdfd2Fy
bl9pZl9mYWlsKGdfc2ltcGxlX2FzeW5jX3Jlc3VsdF9nZXRfc291cmNlX3RhZyhzaW1wbGVSZXN1
bHQpID09IHdlYmtpdFNvdXBSZXF1ZXN0SW5wdXRTdHJlYW1SZWFkQXN5bmMpOworCisgICAgcmV0
dXJuIGdfc2ltcGxlX2FzeW5jX3Jlc3VsdF9nZXRfb3BfcmVzX2dzc2l6ZShzaW1wbGVSZXN1bHQp
OworfQorCitzdGF0aWMgdm9pZCB3ZWJraXRTb3VwUmVxdWVzdElucHV0U3RyZWFtRmluYWxpemUo
R09iamVjdCogb2JqZWN0KQoreworICAgIFdFQktJVF9TT1VQX1JFUVVFU1RfSU5QVVRfU1RSRUFN
KG9iamVjdCktPnByaXYtPn5XZWJLaXRTb3VwUmVxdWVzdElucHV0U3RyZWFtUHJpdmF0ZSgpOwor
ICAgIEdfT0JKRUNUX0NMQVNTKHdlYmtpdF9zb3VwX3JlcXVlc3RfaW5wdXRfc3RyZWFtX3BhcmVu
dF9jbGFzcyktPmZpbmFsaXplKG9iamVjdCk7Cit9CisKK3N0YXRpYyB2b2lkIHdlYmtpdF9zb3Vw
X3JlcXVlc3RfaW5wdXRfc3RyZWFtX2luaXQoV2ViS2l0U291cFJlcXVlc3RJbnB1dFN0cmVhbSog
c3RyZWFtKQoreworICAgIFdlYktpdFNvdXBSZXF1ZXN0SW5wdXRTdHJlYW1Qcml2YXRlKiBwcml2
ID0gR19UWVBFX0lOU1RBTkNFX0dFVF9QUklWQVRFKHN0cmVhbSwgV0VCS0lUX1RZUEVfU09VUF9S
RVFVRVNUX0lOUFVUX1NUUkVBTSwgV2ViS2l0U291cFJlcXVlc3RJbnB1dFN0cmVhbVByaXZhdGUp
OworICAgIHN0cmVhbS0+cHJpdiA9IHByaXY7CisgICAgbmV3IChwcml2KSBXZWJLaXRTb3VwUmVx
dWVzdElucHV0U3RyZWFtUHJpdmF0ZSgpOworfQorCitzdGF0aWMgdm9pZCB3ZWJraXRfc291cF9y
ZXF1ZXN0X2lucHV0X3N0cmVhbV9jbGFzc19pbml0KFdlYktpdFNvdXBSZXF1ZXN0SW5wdXRTdHJl
YW1DbGFzcyogcmVxdWVzdFN0cmVhbUNsYXNzKQoreworICAgIEdPYmplY3RDbGFzcyogZ09iamVj
dENsYXNzID0gR19PQkpFQ1RfQ0xBU1MocmVxdWVzdFN0cmVhbUNsYXNzKTsKKyAgICBnT2JqZWN0
Q2xhc3MtPmZpbmFsaXplID0gd2Via2l0U291cFJlcXVlc3RJbnB1dFN0cmVhbUZpbmFsaXplOwor
CisgICAgR0lucHV0U3RyZWFtQ2xhc3MqIGlucHV0U3RyZWFtQ2xhc3MgPSBHX0lOUFVUX1NUUkVB
TV9DTEFTUyhyZXF1ZXN0U3RyZWFtQ2xhc3MpOworICAgIGlucHV0U3RyZWFtQ2xhc3MtPnJlYWRf
YXN5bmMgPSB3ZWJraXRTb3VwUmVxdWVzdElucHV0U3RyZWFtUmVhZEFzeW5jOworICAgIGlucHV0
U3RyZWFtQ2xhc3MtPnJlYWRfZmluaXNoID0gd2Via2l0U291cFJlcXVlc3RJbnB1dFN0cmVhbVJl
YWRGaW5pc2g7CisKKyAgICBnX3R5cGVfY2xhc3NfYWRkX3ByaXZhdGUocmVxdWVzdFN0cmVhbUNs
YXNzLCBzaXplb2YoV2ViS2l0U291cFJlcXVlc3RJbnB1dFN0cmVhbVByaXZhdGUpKTsKK30KKwor
R0lucHV0U3RyZWFtKiB3ZWJraXRTb3VwUmVxdWVzdElucHV0U3RyZWFtTmV3KHVpbnQ2NF90IGNv
bnRlbnRMZW5ndGgpCit7CisgICAgV2ViS2l0U291cFJlcXVlc3RJbnB1dFN0cmVhbSogc3RyZWFt
ID0gV0VCS0lUX1NPVVBfUkVRVUVTVF9JTlBVVF9TVFJFQU0oZ19vYmplY3RfbmV3KFdFQktJVF9U
WVBFX1NPVVBfUkVRVUVTVF9JTlBVVF9TVFJFQU0sIE5VTEwpKTsKKyAgICBzdHJlYW0tPnByaXYt
PmNvbnRlbnRMZW5ndGggPSBjb250ZW50TGVuZ3RoOworICAgIHJldHVybiBHX0lOUFVUX1NUUkVB
TShzdHJlYW0pOworfQorCit2b2lkIHdlYmtpdFNvdXBSZXF1ZXN0SW5wdXRTdHJlYW1BZGREYXRh
KFdlYktpdFNvdXBSZXF1ZXN0SW5wdXRTdHJlYW0qIHN0cmVhbSwgY29uc3Qgdm9pZCogZGF0YSwg
c2l6ZV90IGRhdGFMZW5ndGgpCit7CisgICAgaWYgKHdlYmtpdFNvdXBSZXF1ZXN0SW5wdXRTdHJl
YW1GaW5pc2hlZChzdHJlYW0pKQorICAgICAgICByZXR1cm47CisKKyAgICBNdXRleExvY2tlciBs
b2NrZXIoc3RyZWFtLT5wcml2LT5yZWFkTG9jayk7CisKKyAgICBpZiAoZGF0YUxlbmd0aCkgewor
ICAgICAgICAvLyBUcnVuY2F0ZSB0aGUgZGF0YUxlbmd0aCB0byB0aGUgY29udGVudExlbmd0aCBp
ZiBpdCdzIGtub3duLgorICAgICAgICBpZiAoc3RyZWFtLT5wcml2LT5jb250ZW50TGVuZ3RoICYm
IHN0cmVhbS0+cHJpdi0+Ynl0ZXNSZWNlaXZlZCArIGRhdGFMZW5ndGggPiBzdHJlYW0tPnByaXYt
PmNvbnRlbnRMZW5ndGgpCisgICAgICAgICAgICBkYXRhTGVuZ3RoID0gc3RyZWFtLT5wcml2LT5j
b250ZW50TGVuZ3RoIC0gc3RyZWFtLT5wcml2LT5ieXRlc1JlY2VpdmVkOworICAgICAgICBzdHJl
YW0tPnByaXYtPmJ5dGVzUmVjZWl2ZWQgKz0gZGF0YUxlbmd0aDsKKyAgICAgICAgZ19tZW1vcnlf
aW5wdXRfc3RyZWFtX2FkZF9kYXRhKEdfTUVNT1JZX0lOUFVUX1NUUkVBTShzdHJlYW0pLCBnX21l
bWR1cChkYXRhLCBkYXRhTGVuZ3RoKSwgZGF0YUxlbmd0aCwgZ19mcmVlKTsKKyAgICB9IGVsc2Ug
eworICAgICAgICAvLyBXZSBoYXZlIHJlY2VpdmVkIGFsbCB0aGUgZGF0YSwgc2V0IGNvbnRlbnRM
ZW5ndGggdG8gYnl0ZXNSZWNlaXZlZCB0byBpbmRpY2F0ZSB3ZSBoYXZlIGZpbmlzaGVkLgorICAg
ICAgICBzdHJlYW0tPnByaXYtPmNvbnRlbnRMZW5ndGggPSBzdHJlYW0tPnByaXYtPmJ5dGVzUmVj
ZWl2ZWQ7CisgICAgICAgIC8vIElmIHRoZXJlJ3MgYSBwZW5kaW5nIHJlYWQgdG8gY29tcGxldGUs
IHJlYWRfZm4gd2lsbCByZXR1cm4gMCBiZWNhdXNlIHdlIGhhdmVuJ3QgYWRkZWQgbW9yZSBkYXRh
IHRvIHRoZQorICAgICAgICAvLyBtZW1vcnkgaW5wdXQgc3RyZWFtLiBBbmQgaWYgdGhlcmUgaXNu
J3QgYSBwZW5kaW5nIHJlYWQsIHRoZSBuZXh0IGNhbGwgdG8gcmVhZF9hc3luYyB3aWxsIHJldHVy
biAwIHRvbywgYmVjYXVzZQorICAgICAgICAvLyB3ZWJraXRTb3VwUmVxdWVzdElucHV0U3RyZWFt
RmluaXNoZWQoKSBpcyBub3cgVFJVRS4KKyAgICB9CisKKyAgICB3ZWJraXRTb3VwUmVxdWVzdElu
cHV0U3RyZWFtUGVuZGluZ1JlYWRBc3luY0NvbXBsZXRlKHN0cmVhbSk7Cit9CisKK2Jvb2wgd2Vi
a2l0U291cFJlcXVlc3RJbnB1dFN0cmVhbUZpbmlzaGVkKFdlYktpdFNvdXBSZXF1ZXN0SW5wdXRT
dHJlYW0qIHN0cmVhbSkKK3sKKyAgICByZXR1cm4gIXdlYmtpdFNvdXBSZXF1ZXN0SW5wdXRTdHJl
YW1Jc1dhaXRpbmdGb3JEYXRhKHN0cmVhbSk7Cit9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0
Mi9TaGFyZWQvTmV0d29yay9DdXN0b21Qcm90b2NvbHMvc291cC9XZWJLaXRTb3VwUmVxdWVzdElu
cHV0U3RyZWFtLmggYi9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvTmV0d29yay9DdXN0b21Qcm90b2Nv
bHMvc291cC9XZWJLaXRTb3VwUmVxdWVzdElucHV0U3RyZWFtLmgKbmV3IGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYTNjNzAy
MDhjYzE0ZjRkY2RkYmNkOWM0YWM0YjVkOWY2Zjk0M2QzZAotLS0gL2Rldi9udWxsCisrKyBiL1Nv
dXJjZS9XZWJLaXQyL1NoYXJlZC9OZXR3b3JrL0N1c3RvbVByb3RvY29scy9zb3VwL1dlYktpdFNv
dXBSZXF1ZXN0SW5wdXRTdHJlYW0uaApAQCAtMCwwICsxLDU1IEBACisvKgorICogQ29weXJpZ2h0
IChDKSAyMDEyIElnYWxpYSBTLkwuCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdh
cmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRo
ZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMg
cHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVy
c2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJz
aW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0
IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0
IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdl
bmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxk
IGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBM
aWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcu
TElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwg
SW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIx
MTAtMTMwMSwgVVNBLgorICovCisKKyNpZm5kZWYgV2ViS2l0U291cFJlcXVlc3RJbnB1dFN0cmVh
bV9oCisjZGVmaW5lIFdlYktpdFNvdXBSZXF1ZXN0SW5wdXRTdHJlYW1faAorCisjaW5jbHVkZSA8
Z2lvL2dpby5oPgorCitHX0JFR0lOX0RFQ0xTCisKKyNkZWZpbmUgV0VCS0lUX1RZUEVfU09VUF9S
RVFVRVNUX0lOUFVUX1NUUkVBTSAgICAgICAgICAgICh3ZWJraXRfc291cF9yZXF1ZXN0X2lucHV0
X3N0cmVhbV9nZXRfdHlwZSgpKQorI2RlZmluZSBXRUJLSVRfU09VUF9SRVFVRVNUX0lOUFVUX1NU
UkVBTShvYmplY3QpICAgICAgICAgKEdfVFlQRV9DSEVDS19JTlNUQU5DRV9DQVNUKChvYmplY3Qp
LCBXRUJLSVRfVFlQRV9TT1VQX1JFUVVFU1RfSU5QVVRfU1RSRUFNLCBXZWJLaXRTb3VwUmVxdWVz
dElucHV0U3RyZWFtKSkKKyNkZWZpbmUgV0VCS0lUX0lTX1NPVVBfUkVRVUVTVF9JTlBVVF9TVFJF
QU0ob2JqZWN0KSAgICAgIChHX1RZUEVfQ0hFQ0tfSU5TVEFOQ0VfVFlQRSgob2JqZWN0KSwgV0VC
S0lUX1RZUEVfU09VUF9SRVFVRVNUX0lOUFVUX1NUUkVBTSkpCisjZGVmaW5lIFdFQktJVF9TT1VQ
X1JFUVVFU1RfSU5QVVRfU1RSRUFNX0NMQVNTKGtsYXNzKSAgICAoR19UWVBFX0NIRUNLX0NMQVNT
X0NBU1QoKGtsYXNzKSwgV0VCS0lUX1RZUEVfU09VUF9SRVFVRVNUX0lOUFVUX1NUUkVBTSwgV2Vi
S2l0U291cFJlcXVlc3RJbnB1dFN0cmVhbUNsYXNzKSkKKyNkZWZpbmUgV0VCS0lUX0lTX1NPVVBf
UkVRVUVTVF9JTlBVVF9TVFJFQU1fQ0xBU1Moa2xhc3MpIChHX1RZUEVfQ0hFQ0tfQ0xBU1NfVFlQ
RSgoa2xhc3MpLCBXRUJLSVRfVFlQRV9TT1VQX1JFUVVFU1RfSU5QVVRfU1RSRUFNKSkKKyNkZWZp
bmUgV0VCS0lUX1NPVVBfUkVRVUVTVF9JTlBVVF9TVFJFQU1fR0VUX0NMQVNTKG9iaikgIChHX1RZ
UEVfSU5TVEFOQ0VfR0VUX0NMQVNTKChvYmopLCBXRUJLSVRfVFlQRV9TT1VQX1JFUVVFU1RfSU5Q
VVRfU1RSRUFNLCBXZWJLaXRTb3VwUmVxdWVzdElucHV0U3RyZWFtQ2xhc3MpKQorCit0eXBlZGVm
IHN0cnVjdCBfV2ViS2l0U291cFJlcXVlc3RJbnB1dFN0cmVhbSBXZWJLaXRTb3VwUmVxdWVzdElu
cHV0U3RyZWFtOwordHlwZWRlZiBzdHJ1Y3QgX1dlYktpdFNvdXBSZXF1ZXN0SW5wdXRTdHJlYW1D
bGFzcyBXZWJLaXRTb3VwUmVxdWVzdElucHV0U3RyZWFtQ2xhc3M7Cit0eXBlZGVmIHN0cnVjdCBf
V2ViS2l0U291cFJlcXVlc3RJbnB1dFN0cmVhbVByaXZhdGUgV2ViS2l0U291cFJlcXVlc3RJbnB1
dFN0cmVhbVByaXZhdGU7CisKK3N0cnVjdCBfV2ViS2l0U291cFJlcXVlc3RJbnB1dFN0cmVhbSB7
CisgICAgR01lbW9yeUlucHV0U3RyZWFtIHBhcmVudDsKKworICAgIFdlYktpdFNvdXBSZXF1ZXN0
SW5wdXRTdHJlYW1Qcml2YXRlKiBwcml2OworfTsKKworc3RydWN0IF9XZWJLaXRTb3VwUmVxdWVz
dElucHV0U3RyZWFtQ2xhc3MgeworICAgIEdNZW1vcnlJbnB1dFN0cmVhbUNsYXNzIHBhcmVudDsK
K307CisKK0dUeXBlIHdlYmtpdF9zb3VwX3JlcXVlc3RfaW5wdXRfc3RyZWFtX2dldF90eXBlKCk7
CitHSW5wdXRTdHJlYW0qIHdlYmtpdFNvdXBSZXF1ZXN0SW5wdXRTdHJlYW1OZXcodWludDY0X3Qg
Y29udGVudExlbmd0aCk7Cit2b2lkIHdlYmtpdFNvdXBSZXF1ZXN0SW5wdXRTdHJlYW1BZGREYXRh
KFdlYktpdFNvdXBSZXF1ZXN0SW5wdXRTdHJlYW0qLCBjb25zdCB2b2lkKiBkYXRhLCBzaXplX3Qg
ZGF0YUxlbmd0aCk7Citib29sIHdlYmtpdFNvdXBSZXF1ZXN0SW5wdXRTdHJlYW1GaW5pc2hlZChX
ZWJLaXRTb3VwUmVxdWVzdElucHV0U3RyZWFtKik7CisKK0dfRU5EX0RFQ0xTCisKKyNlbmRpZiAv
LyBXZWJLaXRTb3VwUmVxdWVzdElucHV0U3RyZWFtX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJL
aXQyL1dlYlByb2Nlc3Mvc291cC9XZWJLaXRTb3VwUmVxdWVzdEdlbmVyaWMuY3BwIGIvU291cmNl
L1dlYktpdDIvV2ViUHJvY2Vzcy9zb3VwL1dlYktpdFNvdXBSZXF1ZXN0R2VuZXJpYy5jcHAKZGVs
ZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDU1YzUwMzc1YTBjM2UzYmYwY2Y4YTU1MjNjZTE1
NmU1ODg2NDQzZTMuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0t
IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9zb3VwL1dlYktpdFNvdXBSZXF1ZXN0R2VuZXJp
Yy5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSwxMDcgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAo
QykgMjAxMiBJZ2FsaWEgUy5MLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJl
OyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUg
dGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFzIHB1
Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNp
b24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lv
bi4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBp
dCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBl
dmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogTGlicmFyeSBHZW5l
cmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBo
YXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGlj
ZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJ
Qi4gIElmIG5vdCwgd3JpdGUgdG8KLSAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIElu
Yy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCi0gKiBCb3N0b24sIE1BIDAyMTEw
LTEzMDEsIFVTQS4KLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiV2ViS2l0
U291cFJlcXVlc3RHZW5lcmljLmgiCi0KLSNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+Ci0K
LSNpZiAhRU5BQkxFKENVU1RPTV9QUk9UT0NPTFMpCi0jaW5jbHVkZSAiV2ViUHJvY2Vzcy5oIgot
I2luY2x1ZGUgIldlYlNvdXBSZXF1ZXN0TWFuYWdlci5oIgotI2VuZGlmCi0KLXVzaW5nIG5hbWVz
cGFjZSBXZWJLaXQ7Ci0KLUdfREVGSU5FX1RZUEUoV2ViS2l0U291cFJlcXVlc3RHZW5lcmljLCB3
ZWJraXRfc291cF9yZXF1ZXN0X2dlbmVyaWMsIFNPVVBfVFlQRV9SRVFVRVNUKQotCi1zdHJ1Y3Qg
X1dlYktpdFNvdXBSZXF1ZXN0R2VuZXJpY1ByaXZhdGUgewotICAgIENTdHJpbmcgbWltZVR5cGU7
Ci0gICAgZ29mZnNldCBjb250ZW50TGVuZ3RoOwotfTsKLQotc3RhdGljIHZvaWQgd2Via2l0U291
cFJlcXVlc3RHZW5lcmljRmluYWxpemUoR09iamVjdCogb2JqZWN0KQotewotICAgIFdFQktJVF9T
T1VQX1JFUVVFU1RfR0VORVJJQyhvYmplY3QpLT5wcml2LT5+V2ViS2l0U291cFJlcXVlc3RHZW5l
cmljUHJpdmF0ZSgpOwotICAgIEdfT0JKRUNUX0NMQVNTKHdlYmtpdF9zb3VwX3JlcXVlc3RfZ2Vu
ZXJpY19wYXJlbnRfY2xhc3MpLT5maW5hbGl6ZShvYmplY3QpOwotfQotCi1zdGF0aWMgdm9pZCB3
ZWJraXRfc291cF9yZXF1ZXN0X2dlbmVyaWNfaW5pdChXZWJLaXRTb3VwUmVxdWVzdEdlbmVyaWMq
IHJlcXVlc3QpCi17Ci0gICAgV2ViS2l0U291cFJlcXVlc3RHZW5lcmljUHJpdmF0ZSogcHJpdiA9
IEdfVFlQRV9JTlNUQU5DRV9HRVRfUFJJVkFURShyZXF1ZXN0LCBXRUJLSVRfVFlQRV9TT1VQX1JF
UVVFU1RfR0VORVJJQywgV2ViS2l0U291cFJlcXVlc3RHZW5lcmljUHJpdmF0ZSk7Ci0gICAgcmVx
dWVzdC0+cHJpdiA9IHByaXY7Ci0gICAgbmV3IChwcml2KSBXZWJLaXRTb3VwUmVxdWVzdEdlbmVy
aWNQcml2YXRlKCk7Ci19Ci0KLXN0YXRpYyB2b2lkIHdlYmtpdFNvdXBSZXF1ZXN0R2VuZXJpY1Nl
bmRBc3luYyhTb3VwUmVxdWVzdCogcmVxdWVzdCwgR0NhbmNlbGxhYmxlKiBjYW5jZWxsYWJsZSwg
R0FzeW5jUmVhZHlDYWxsYmFjayBjYWxsYmFjaywgZ3BvaW50ZXIgdXNlckRhdGEpCi17Ci0jaWYg
RU5BQkxFKENVU1RPTV9QUk9UT0NPTFMpCi0gICAgQ3VzdG9tUHJvdG9jb2xNYW5hZ2VySW1wbCog
Y3VzdG9tUHJvdG9jb2xNYW5hZ2VyID0gV0VCS0lUX1NPVVBfUkVRVUVTVF9HRU5FUklDX0dFVF9D
TEFTUyhyZXF1ZXN0KS0+Y3VzdG9tUHJvdG9jb2xNYW5hZ2VyOwotICAgIEFTU0VSVChjdXN0b21Q
cm90b2NvbE1hbmFnZXIpOwotICAgIGN1c3RvbVByb3RvY29sTWFuYWdlci0+c2VuZChnX3Rhc2tf
bmV3KHJlcXVlc3QsIGNhbmNlbGxhYmxlLCBjYWxsYmFjaywgdXNlckRhdGEpKTsKLSNlbHNlCi0g
ICAgV2ViUHJvY2Vzczo6c2hhcmVkKCkuc3VwcGxlbWVudDxXZWJTb3VwUmVxdWVzdE1hbmFnZXI+
KCktPnNlbmQoZ190YXNrX25ldyhyZXF1ZXN0LCBjYW5jZWxsYWJsZSwgY2FsbGJhY2ssIHVzZXJE
YXRhKSk7Ci0jZW5kaWYKLX0KLQotc3RhdGljIEdJbnB1dFN0cmVhbSogd2Via2l0U291cFJlcXVl
c3RHZW5lcmljU2VuZEZpbmlzaChTb3VwUmVxdWVzdCogcmVxdWVzdCwgR0FzeW5jUmVzdWx0KiBy
ZXN1bHQsIEdFcnJvcioqIGVycm9yKQotewotICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKGdfdGFz
a19pc192YWxpZChyZXN1bHQsIHJlcXVlc3QpLCAwKTsKLSNpZiBFTkFCTEUoQ1VTVE9NX1BST1RP
Q09MUykKLSAgICBDdXN0b21Qcm90b2NvbE1hbmFnZXJJbXBsKiBjdXN0b21Qcm90b2NvbE1hbmFn
ZXIgPSBXRUJLSVRfU09VUF9SRVFVRVNUX0dFTkVSSUNfR0VUX0NMQVNTKHJlcXVlc3QpLT5jdXN0
b21Qcm90b2NvbE1hbmFnZXI7Ci0gICAgQVNTRVJUKGN1c3RvbVByb3RvY29sTWFuYWdlcik7Ci0g
ICAgcmV0dXJuIGN1c3RvbVByb3RvY29sTWFuYWdlci0+ZmluaXNoKEdfVEFTSyhyZXN1bHQpLCBl
cnJvcik7Ci0jZWxzZQotICAgIHJldHVybiBXZWJQcm9jZXNzOjpzaGFyZWQoKS5zdXBwbGVtZW50
PFdlYlNvdXBSZXF1ZXN0TWFuYWdlcj4oKS0+ZmluaXNoKEdfVEFTSyhyZXN1bHQpLCBlcnJvcik7
Ci0jZW5kaWYKLX0KLQotc3RhdGljIGdvZmZzZXQgd2Via2l0U291cFJlcXVlc3RHZW5lcmljR2V0
Q29udGVudExlbmd0aChTb3VwUmVxdWVzdCogcmVxdWVzdCkKLXsKLSAgICByZXR1cm4gV0VCS0lU
X1NPVVBfUkVRVUVTVF9HRU5FUklDKHJlcXVlc3QpLT5wcml2LT5jb250ZW50TGVuZ3RoOwotfQot
Ci1zdGF0aWMgY29uc3QgY2hhciogd2Via2l0U291cFJlcXVlc3RHZW5lcmljR2V0Q29udGVudFR5
cGUoU291cFJlcXVlc3QqIHJlcXVlc3QpCi17Ci0gICAgcmV0dXJuIFdFQktJVF9TT1VQX1JFUVVF
U1RfR0VORVJJQyhyZXF1ZXN0KS0+cHJpdi0+bWltZVR5cGUuZGF0YSgpOwotfQotCi1zdGF0aWMg
dm9pZCB3ZWJraXRfc291cF9yZXF1ZXN0X2dlbmVyaWNfY2xhc3NfaW5pdChXZWJLaXRTb3VwUmVx
dWVzdEdlbmVyaWNDbGFzcyogcmVxdWVzdEdlbmVyaWNDbGFzcykKLXsKLSAgICBHT2JqZWN0Q2xh
c3MqIGdPYmplY3RDbGFzcyA9IEdfT0JKRUNUX0NMQVNTKHJlcXVlc3RHZW5lcmljQ2xhc3MpOwot
ICAgIGdPYmplY3RDbGFzcy0+ZmluYWxpemUgPSB3ZWJraXRTb3VwUmVxdWVzdEdlbmVyaWNGaW5h
bGl6ZTsKLQotICAgIFNvdXBSZXF1ZXN0Q2xhc3MqIHJlcXVlc3RDbGFzcyA9IFNPVVBfUkVRVUVT
VF9DTEFTUyhyZXF1ZXN0R2VuZXJpY0NsYXNzKTsKLSAgICByZXF1ZXN0Q2xhc3MtPnNlbmRfYXN5
bmMgPSB3ZWJraXRTb3VwUmVxdWVzdEdlbmVyaWNTZW5kQXN5bmM7Ci0gICAgcmVxdWVzdENsYXNz
LT5zZW5kX2ZpbmlzaCA9IHdlYmtpdFNvdXBSZXF1ZXN0R2VuZXJpY1NlbmRGaW5pc2g7Ci0gICAg
cmVxdWVzdENsYXNzLT5nZXRfY29udGVudF9sZW5ndGggPSB3ZWJraXRTb3VwUmVxdWVzdEdlbmVy
aWNHZXRDb250ZW50TGVuZ3RoOwotICAgIHJlcXVlc3RDbGFzcy0+Z2V0X2NvbnRlbnRfdHlwZSA9
IHdlYmtpdFNvdXBSZXF1ZXN0R2VuZXJpY0dldENvbnRlbnRUeXBlOwotCi0gICAgZ190eXBlX2Ns
YXNzX2FkZF9wcml2YXRlKHJlcXVlc3RHZW5lcmljQ2xhc3MsIHNpemVvZihXZWJLaXRTb3VwUmVx
dWVzdEdlbmVyaWNQcml2YXRlKSk7Ci19Ci0KLXZvaWQgd2Via2l0U291cFJlcXVlc3RHZW5lcmlj
U2V0Q29udGVudExlbmd0aChXZWJLaXRTb3VwUmVxdWVzdEdlbmVyaWMqIHJlcXVlc3QsIGdvZmZz
ZXQgY29udGVudExlbmd0aCkKLXsKLSAgICByZXF1ZXN0LT5wcml2LT5jb250ZW50TGVuZ3RoID0g
Y29udGVudExlbmd0aDsKLX0KLQotdm9pZCB3ZWJraXRTb3VwUmVxdWVzdEdlbmVyaWNTZXRDb250
ZW50VHlwZShXZWJLaXRTb3VwUmVxdWVzdEdlbmVyaWMqIHJlcXVlc3QsIGNvbnN0IGNoYXIqIG1p
bWVUeXBlKQotewotICAgIHJlcXVlc3QtPnByaXYtPm1pbWVUeXBlID0gbWltZVR5cGU7Ci19CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL3NvdXAvV2ViS2l0U291cFJlcXVl
c3RHZW5lcmljLmggYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL3NvdXAvV2ViS2l0U291cFJl
cXVlc3RHZW5lcmljLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDVjNWQzYWQyZDUx
MTY4NDdjOTcxZDNkOTFjNmVjNWY3N2E1NDRlYjQuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9zb3VwL1dlYktp
dFNvdXBSZXF1ZXN0R2VuZXJpYy5oCisrKyAvZGV2L251bGwKQEAgLTEsNjQgKzAsMCBAQAotLyoK
LSAqIENvcHlyaWdodCAoQykgMjAxMiBJZ2FsaWEgUy5MLgotICoKLSAqIFRoaXMgbGlicmFyeSBp
cyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlm
eSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0g
KiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBl
aXRoZXIKLSAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBh
bnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4g
dGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJS
QU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFC
SUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQot
ICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgot
ICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2Vu
ZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUg
ZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KLSAqIHRoZSBGcmVlIFNvZnR3YXJl
IEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCi0gKiBC
b3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSAqLwotCi0jaWZuZGVmIFdlYktpdFNvdXBSZXF1
ZXN0R2VuZXJpY19oCi0jZGVmaW5lIFdlYktpdFNvdXBSZXF1ZXN0R2VuZXJpY19oCi0KLSNpbmNs
dWRlIDxnbGliLW9iamVjdC5oPgotI2luY2x1ZGUgPGxpYnNvdXAvc291cC5oPgotCi0jaWYgRU5B
QkxFKENVU1RPTV9QUk9UT0NPTFMpCi0jaW5jbHVkZSAiQ3VzdG9tUHJvdG9jb2xNYW5hZ2VySW1w
bC5oIgotI2VuZGlmCi0KLUdfQkVHSU5fREVDTFMKLQotI2RlZmluZSBXRUJLSVRfVFlQRV9TT1VQ
X1JFUVVFU1RfR0VORVJJQyAgICAgICAgICAgICh3ZWJraXRfc291cF9yZXF1ZXN0X2dlbmVyaWNf
Z2V0X3R5cGUoKSkKLSNkZWZpbmUgV0VCS0lUX1NPVVBfUkVRVUVTVF9HRU5FUklDKG9iamVjdCkg
ICAgICAgICAoR19UWVBFX0NIRUNLX0lOU1RBTkNFX0NBU1QoKG9iamVjdCksIFdFQktJVF9UWVBF
X1NPVVBfUkVRVUVTVF9HRU5FUklDLCBXZWJLaXRTb3VwUmVxdWVzdEdlbmVyaWMpKQotI2RlZmlu
ZSBXRUJLSVRfSVNfU09VUF9SRVFVRVNUX0dFTkVSSUMob2JqZWN0KSAgICAgIChHX1RZUEVfQ0hF
Q0tfSU5TVEFOQ0VfVFlQRSgob2JqZWN0KSwgV0VCS0lUX1RZUEVfU09VUF9SRVFVRVNUX0dFTkVS
SUMpKQotI2RlZmluZSBXRUJLSVRfU09VUF9SRVFVRVNUX0dFTkVSSUNfQ0xBU1Moa2xhc3MpICAg
IChHX1RZUEVfQ0hFQ0tfQ0xBU1NfQ0FTVCgoa2xhc3MpLCBXRUJLSVRfVFlQRV9TT1VQX1JFUVVF
U1RfR0VORVJJQywgV2ViS2l0U291cFJlcXVlc3RHZW5lcmljQ2xhc3MpKQotI2RlZmluZSBXRUJL
SVRfSVNfU09VUF9SRVFVRVNUX0dFTkVSSUNfQ0xBU1Moa2xhc3MpIChHX1RZUEVfQ0hFQ0tfQ0xB
U1NfVFlQRSgoa2xhc3MpLCBXRUJLSVRfVFlQRV9TT1VQX1JFUVVFU1RfR0VORVJJQykpCi0jZGVm
aW5lIFdFQktJVF9TT1VQX1JFUVVFU1RfR0VORVJJQ19HRVRfQ0xBU1Mob2JqKSAgKEdfVFlQRV9J
TlNUQU5DRV9HRVRfQ0xBU1MoKG9iaiksIFdFQktJVF9UWVBFX1NPVVBfUkVRVUVTVF9HRU5FUklD
LCBXZWJLaXRTb3VwUmVxdWVzdEdlbmVyaWNDbGFzcykpCi0KLXR5cGVkZWYgc3RydWN0IF9XZWJL
aXRTb3VwUmVxdWVzdEdlbmVyaWMgV2ViS2l0U291cFJlcXVlc3RHZW5lcmljOwotdHlwZWRlZiBz
dHJ1Y3QgX1dlYktpdFNvdXBSZXF1ZXN0R2VuZXJpY0NsYXNzIFdlYktpdFNvdXBSZXF1ZXN0R2Vu
ZXJpY0NsYXNzOwotdHlwZWRlZiBzdHJ1Y3QgX1dlYktpdFNvdXBSZXF1ZXN0R2VuZXJpY1ByaXZh
dGUgV2ViS2l0U291cFJlcXVlc3RHZW5lcmljUHJpdmF0ZTsKLQotc3RydWN0IF9XZWJLaXRTb3Vw
UmVxdWVzdEdlbmVyaWMgewotICAgIFNvdXBSZXF1ZXN0IHBhcmVudDsKLQotICAgIFdlYktpdFNv
dXBSZXF1ZXN0R2VuZXJpY1ByaXZhdGUgKnByaXY7Ci19OwotCi1zdHJ1Y3QgX1dlYktpdFNvdXBS
ZXF1ZXN0R2VuZXJpY0NsYXNzIHsKLSAgICBTb3VwUmVxdWVzdENsYXNzIHBhcmVudDsKLQotI2lm
IEVOQUJMRShDVVNUT01fUFJPVE9DT0xTKQotICAgIFdlYktpdDo6Q3VzdG9tUHJvdG9jb2xNYW5h
Z2VySW1wbCogY3VzdG9tUHJvdG9jb2xNYW5hZ2VyOwotI2VuZGlmCi19OwotCi1HVHlwZSB3ZWJr
aXRfc291cF9yZXF1ZXN0X2dlbmVyaWNfZ2V0X3R5cGUoKTsKLQotdm9pZCB3ZWJraXRTb3VwUmVx
dWVzdEdlbmVyaWNTZXRDb250ZW50TGVuZ3RoKFdlYktpdFNvdXBSZXF1ZXN0R2VuZXJpYyosIGdv
ZmZzZXQgY29udGVudExlbmd0aCk7Ci12b2lkIHdlYmtpdFNvdXBSZXF1ZXN0R2VuZXJpY1NldENv
bnRlbnRUeXBlKFdlYktpdFNvdXBSZXF1ZXN0R2VuZXJpYyosIGNvbnN0IGNoYXIqIG1pbWVUeXBl
KTsKLQotR19FTkRfREVDTFMKLQotI2VuZGlmIC8vIFdlYktpdFNvdXBSZXF1ZXN0R2VuZXJpY19o
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL3NvdXAvV2ViS2l0U291cFJl
cXVlc3RJbnB1dFN0cmVhbS5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL3NvdXAvV2Vi
S2l0U291cFJlcXVlc3RJbnB1dFN0cmVhbS5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IGRkNWQ1OGFkNWM4NzlhNTg4MzhhM2ZkZGEyNTM1YzY1ZDIzOTg0M2EuLjAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYktpdDIvV2ViUHJv
Y2Vzcy9zb3VwL1dlYktpdFNvdXBSZXF1ZXN0SW5wdXRTdHJlYW0uY3BwCisrKyAvZGV2L251bGwK
QEAgLTEsMTcyICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTIgSWdhbGlhIFMuTC4K
LSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1
dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGli
cmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUg
U29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2Us
IG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBsaWJy
YXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0g
KiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJy
YW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQ
VVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBm
b3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkg
b2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGgg
dGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRv
Ci0gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJl
ZXQsIEZpZnRoIEZsb29yLAotICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0gKi8KLQot
I2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIldlYktpdFNvdXBSZXF1ZXN0SW5wdXRTdHJl
YW0uaCIKLQotI2luY2x1ZGUgPHd0Zi9UaHJlYWRpbmcuaD4KLSNpbmNsdWRlIDx3dGYvZ29iamVj
dC9HUmVmUHRyLmg+Ci0KLXN0cnVjdCBBc3luY1JlYWREYXRhIHsKLSAgICBBc3luY1JlYWREYXRh
KEdTaW1wbGVBc3luY1Jlc3VsdCogcmVzdWx0LCB2b2lkKiBidWZmZXIsIGdzaXplIGNvdW50LCBH
Q2FuY2VsbGFibGUqIGNhbmNlbGxhYmxlKQotICAgICAgICA6IHJlc3VsdChyZXN1bHQpCi0gICAg
ICAgICwgYnVmZmVyKGJ1ZmZlcikKLSAgICAgICAgLCBjb3VudChjb3VudCkKLSAgICAgICAgLCBj
YW5jZWxsYWJsZShjYW5jZWxsYWJsZSkKLSAgICB7Ci0gICAgfQotCi0gICAgR1JlZlB0cjxHU2lt
cGxlQXN5bmNSZXN1bHQ+IHJlc3VsdDsKLSAgICB2b2lkKiBidWZmZXI7Ci0gICAgc2l6ZV90IGNv
dW50OwotICAgIEdSZWZQdHI8R0NhbmNlbGxhYmxlPiBjYW5jZWxsYWJsZTsKLX07Ci0KLXN0cnVj
dCBfV2ViS2l0U291cFJlcXVlc3RJbnB1dFN0cmVhbVByaXZhdGUgewotICAgIHVpbnQ2NF90IGNv
bnRlbnRMZW5ndGg7Ci0gICAgdWludDY0X3QgYnl0ZXNSZWNlaXZlZDsKLSAgICB1aW50NjRfdCBi
eXRlc1JlYWQ7Ci0KLSAgICBNdXRleCByZWFkTG9jazsKLSAgICBzdGQ6OnVuaXF1ZV9wdHI8QXN5
bmNSZWFkRGF0YT4gcGVuZGluZ0FzeW5jUmVhZDsKLX07Ci0KLUdfREVGSU5FX1RZUEUoV2ViS2l0
U291cFJlcXVlc3RJbnB1dFN0cmVhbSwgd2Via2l0X3NvdXBfcmVxdWVzdF9pbnB1dF9zdHJlYW0s
IEdfVFlQRV9NRU1PUllfSU5QVVRfU1RSRUFNKQotCi1zdGF0aWMgdm9pZCB3ZWJraXRTb3VwUmVx
dWVzdElucHV0U3RyZWFtUmVhZEFzeW5jUmVzdWx0Q29tcGxldGUoV2ViS2l0U291cFJlcXVlc3RJ
bnB1dFN0cmVhbSogc3RyZWFtLCBHU2ltcGxlQXN5bmNSZXN1bHQqIHJlc3VsdCwgdm9pZCogYnVm
ZmVyLCBnc2l6ZSBjb3VudCwgR0NhbmNlbGxhYmxlKiBjYW5jZWxsYWJsZSkKLXsKLSAgICBHRXJy
b3IqIGVycm9yID0gMDsKLSAgICBnc3NpemUgYnl0ZXNSZWFkID0gR19JTlBVVF9TVFJFQU1fR0VU
X0NMQVNTKHN0cmVhbSktPnJlYWRfZm4oR19JTlBVVF9TVFJFQU0oc3RyZWFtKSwgYnVmZmVyLCBj
b3VudCwgY2FuY2VsbGFibGUsICZlcnJvcik7Ci0gICAgaWYgKCFlcnJvcikgewotICAgICAgICBn
X3NpbXBsZV9hc3luY19yZXN1bHRfc2V0X29wX3Jlc19nc3NpemUocmVzdWx0LCBieXRlc1JlYWQp
OwotICAgICAgICBzdHJlYW0tPnByaXYtPmJ5dGVzUmVhZCArPSBieXRlc1JlYWQ7Ci0gICAgfSBl
bHNlCi0gICAgICAgIGdfc2ltcGxlX2FzeW5jX3Jlc3VsdF90YWtlX2Vycm9yKHJlc3VsdCwgZXJy
b3IpOwotICAgIGdfc2ltcGxlX2FzeW5jX3Jlc3VsdF9jb21wbGV0ZV9pbl9pZGxlKHJlc3VsdCk7
Ci19Ci0KLXN0YXRpYyB2b2lkIHdlYmtpdFNvdXBSZXF1ZXN0SW5wdXRTdHJlYW1QZW5kaW5nUmVh
ZEFzeW5jQ29tcGxldGUoV2ViS2l0U291cFJlcXVlc3RJbnB1dFN0cmVhbSogc3RyZWFtKQotewot
ICAgIGlmICghc3RyZWFtLT5wcml2LT5wZW5kaW5nQXN5bmNSZWFkKQotICAgICAgICByZXR1cm47
Ci0KLSAgICBBc3luY1JlYWREYXRhKiBkYXRhID0gc3RyZWFtLT5wcml2LT5wZW5kaW5nQXN5bmNS
ZWFkLmdldCgpOwotICAgIHdlYmtpdFNvdXBSZXF1ZXN0SW5wdXRTdHJlYW1SZWFkQXN5bmNSZXN1
bHRDb21wbGV0ZShzdHJlYW0sIGRhdGEtPnJlc3VsdC5nZXQoKSwgZGF0YS0+YnVmZmVyLCBkYXRh
LT5jb3VudCwgZGF0YS0+Y2FuY2VsbGFibGUuZ2V0KCkpOwotICAgIHN0cmVhbS0+cHJpdi0+cGVu
ZGluZ0FzeW5jUmVhZCA9IG51bGxwdHI7Ci19Ci0KLXN0YXRpYyBib29sIHdlYmtpdFNvdXBSZXF1
ZXN0SW5wdXRTdHJlYW1IYXNEYXRhVG9SZWFkKFdlYktpdFNvdXBSZXF1ZXN0SW5wdXRTdHJlYW0q
IHN0cmVhbSkKLXsKLSAgICByZXR1cm4gc3RyZWFtLT5wcml2LT5ieXRlc1JlYWQgPCBzdHJlYW0t
PnByaXYtPmJ5dGVzUmVjZWl2ZWQ7Ci19Ci0KLXN0YXRpYyBib29sIHdlYmtpdFNvdXBSZXF1ZXN0
SW5wdXRTdHJlYW1Jc1dhaXRpbmdGb3JEYXRhKFdlYktpdFNvdXBSZXF1ZXN0SW5wdXRTdHJlYW0q
IHN0cmVhbSkKLXsKLSAgICByZXR1cm4gIXN0cmVhbS0+cHJpdi0+Y29udGVudExlbmd0aCB8fCBz
dHJlYW0tPnByaXYtPmJ5dGVzUmVjZWl2ZWQgPCBzdHJlYW0tPnByaXYtPmNvbnRlbnRMZW5ndGg7
Ci19Ci0KLXN0YXRpYyB2b2lkIHdlYmtpdFNvdXBSZXF1ZXN0SW5wdXRTdHJlYW1SZWFkQXN5bmMo
R0lucHV0U3RyZWFtKiBpbnB1dFN0cmVhbSwgdm9pZCogYnVmZmVyLCBnc2l6ZSBjb3VudCwgaW50
IC8qcHJpb3JpdHkqLywgR0NhbmNlbGxhYmxlKiBjYW5jZWxsYWJsZSwgR0FzeW5jUmVhZHlDYWxs
YmFjayBjYWxsYmFjaywgZ3BvaW50ZXIgdXNlckRhdGEpCi17Ci0gICAgV2ViS2l0U291cFJlcXVl
c3RJbnB1dFN0cmVhbSogc3RyZWFtID0gV0VCS0lUX1NPVVBfUkVRVUVTVF9JTlBVVF9TVFJFQU0o
aW5wdXRTdHJlYW0pOwotICAgIEdSZWZQdHI8R1NpbXBsZUFzeW5jUmVzdWx0PiByZXN1bHQgPSBh
ZG9wdEdSZWYoZ19zaW1wbGVfYXN5bmNfcmVzdWx0X25ldyhHX09CSkVDVChzdHJlYW0pLCBjYWxs
YmFjaywgdXNlckRhdGEsIHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KHdlYmtpdFNvdXBSZXF1ZXN0
SW5wdXRTdHJlYW1SZWFkQXN5bmMpKSk7Ci0KLSAgICBNdXRleExvY2tlciBsb2NrZXIoc3RyZWFt
LT5wcml2LT5yZWFkTG9jayk7Ci0KLSAgICBpZiAoIXdlYmtpdFNvdXBSZXF1ZXN0SW5wdXRTdHJl
YW1IYXNEYXRhVG9SZWFkKHN0cmVhbSkgJiYgIXdlYmtpdFNvdXBSZXF1ZXN0SW5wdXRTdHJlYW1J
c1dhaXRpbmdGb3JEYXRhKHN0cmVhbSkpIHsKLSAgICAgICAgZ19zaW1wbGVfYXN5bmNfcmVzdWx0
X3NldF9vcF9yZXNfZ3NzaXplKHJlc3VsdC5nZXQoKSwgMCk7Ci0gICAgICAgIGdfc2ltcGxlX2Fz
eW5jX3Jlc3VsdF9jb21wbGV0ZV9pbl9pZGxlKHJlc3VsdC5nZXQoKSk7Ci0gICAgICAgIHJldHVy
bjsKLSAgICB9Ci0KLSAgICBpZiAod2Via2l0U291cFJlcXVlc3RJbnB1dFN0cmVhbUhhc0RhdGFU
b1JlYWQoc3RyZWFtKSkgewotICAgICAgICB3ZWJraXRTb3VwUmVxdWVzdElucHV0U3RyZWFtUmVh
ZEFzeW5jUmVzdWx0Q29tcGxldGUoc3RyZWFtLCByZXN1bHQuZ2V0KCksIGJ1ZmZlciwgY291bnQs
IGNhbmNlbGxhYmxlKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIHN0cmVhbS0+cHJp
di0+cGVuZGluZ0FzeW5jUmVhZCA9IHN0ZDo6bWFrZV91bmlxdWU8QXN5bmNSZWFkRGF0YT4ocmVz
dWx0LmdldCgpLCBidWZmZXIsIGNvdW50LCBjYW5jZWxsYWJsZSk7Ci19Ci0KLXN0YXRpYyBnc3Np
emUgd2Via2l0U291cFJlcXVlc3RJbnB1dFN0cmVhbVJlYWRGaW5pc2goR0lucHV0U3RyZWFtKiwg
R0FzeW5jUmVzdWx0KiByZXN1bHQsIEdFcnJvcioqKQotewotICAgIEdTaW1wbGVBc3luY1Jlc3Vs
dCogc2ltcGxlUmVzdWx0ID0gR19TSU1QTEVfQVNZTkNfUkVTVUxUKHJlc3VsdCk7Ci0gICAgZ193
YXJuX2lmX2ZhaWwoZ19zaW1wbGVfYXN5bmNfcmVzdWx0X2dldF9zb3VyY2VfdGFnKHNpbXBsZVJl
c3VsdCkgPT0gd2Via2l0U291cFJlcXVlc3RJbnB1dFN0cmVhbVJlYWRBc3luYyk7Ci0KLSAgICBy
ZXR1cm4gZ19zaW1wbGVfYXN5bmNfcmVzdWx0X2dldF9vcF9yZXNfZ3NzaXplKHNpbXBsZVJlc3Vs
dCk7Ci19Ci0KLXN0YXRpYyB2b2lkIHdlYmtpdFNvdXBSZXF1ZXN0SW5wdXRTdHJlYW1GaW5hbGl6
ZShHT2JqZWN0KiBvYmplY3QpCi17Ci0gICAgV0VCS0lUX1NPVVBfUkVRVUVTVF9JTlBVVF9TVFJF
QU0ob2JqZWN0KS0+cHJpdi0+fldlYktpdFNvdXBSZXF1ZXN0SW5wdXRTdHJlYW1Qcml2YXRlKCk7
Ci0gICAgR19PQkpFQ1RfQ0xBU1Mod2Via2l0X3NvdXBfcmVxdWVzdF9pbnB1dF9zdHJlYW1fcGFy
ZW50X2NsYXNzKS0+ZmluYWxpemUob2JqZWN0KTsKLX0KLQotc3RhdGljIHZvaWQgd2Via2l0X3Nv
dXBfcmVxdWVzdF9pbnB1dF9zdHJlYW1faW5pdChXZWJLaXRTb3VwUmVxdWVzdElucHV0U3RyZWFt
KiBzdHJlYW0pCi17Ci0gICAgV2ViS2l0U291cFJlcXVlc3RJbnB1dFN0cmVhbVByaXZhdGUqIHBy
aXYgPSBHX1RZUEVfSU5TVEFOQ0VfR0VUX1BSSVZBVEUoc3RyZWFtLCBXRUJLSVRfVFlQRV9TT1VQ
X1JFUVVFU1RfSU5QVVRfU1RSRUFNLCBXZWJLaXRTb3VwUmVxdWVzdElucHV0U3RyZWFtUHJpdmF0
ZSk7Ci0gICAgc3RyZWFtLT5wcml2ID0gcHJpdjsKLSAgICBuZXcgKHByaXYpIFdlYktpdFNvdXBS
ZXF1ZXN0SW5wdXRTdHJlYW1Qcml2YXRlKCk7Ci19Ci0KLXN0YXRpYyB2b2lkIHdlYmtpdF9zb3Vw
X3JlcXVlc3RfaW5wdXRfc3RyZWFtX2NsYXNzX2luaXQoV2ViS2l0U291cFJlcXVlc3RJbnB1dFN0
cmVhbUNsYXNzKiByZXF1ZXN0U3RyZWFtQ2xhc3MpCi17Ci0gICAgR09iamVjdENsYXNzKiBnT2Jq
ZWN0Q2xhc3MgPSBHX09CSkVDVF9DTEFTUyhyZXF1ZXN0U3RyZWFtQ2xhc3MpOwotICAgIGdPYmpl
Y3RDbGFzcy0+ZmluYWxpemUgPSB3ZWJraXRTb3VwUmVxdWVzdElucHV0U3RyZWFtRmluYWxpemU7
Ci0KLSAgICBHSW5wdXRTdHJlYW1DbGFzcyogaW5wdXRTdHJlYW1DbGFzcyA9IEdfSU5QVVRfU1RS
RUFNX0NMQVNTKHJlcXVlc3RTdHJlYW1DbGFzcyk7Ci0gICAgaW5wdXRTdHJlYW1DbGFzcy0+cmVh
ZF9hc3luYyA9IHdlYmtpdFNvdXBSZXF1ZXN0SW5wdXRTdHJlYW1SZWFkQXN5bmM7Ci0gICAgaW5w
dXRTdHJlYW1DbGFzcy0+cmVhZF9maW5pc2ggPSB3ZWJraXRTb3VwUmVxdWVzdElucHV0U3RyZWFt
UmVhZEZpbmlzaDsKLQotICAgIGdfdHlwZV9jbGFzc19hZGRfcHJpdmF0ZShyZXF1ZXN0U3RyZWFt
Q2xhc3MsIHNpemVvZihXZWJLaXRTb3VwUmVxdWVzdElucHV0U3RyZWFtUHJpdmF0ZSkpOwotfQot
Ci1HSW5wdXRTdHJlYW0qIHdlYmtpdFNvdXBSZXF1ZXN0SW5wdXRTdHJlYW1OZXcodWludDY0X3Qg
Y29udGVudExlbmd0aCkKLXsKLSAgICBXZWJLaXRTb3VwUmVxdWVzdElucHV0U3RyZWFtKiBzdHJl
YW0gPSBXRUJLSVRfU09VUF9SRVFVRVNUX0lOUFVUX1NUUkVBTShnX29iamVjdF9uZXcoV0VCS0lU
X1RZUEVfU09VUF9SRVFVRVNUX0lOUFVUX1NUUkVBTSwgTlVMTCkpOwotICAgIHN0cmVhbS0+cHJp
di0+Y29udGVudExlbmd0aCA9IGNvbnRlbnRMZW5ndGg7Ci0gICAgcmV0dXJuIEdfSU5QVVRfU1RS
RUFNKHN0cmVhbSk7Ci19Ci0KLXZvaWQgd2Via2l0U291cFJlcXVlc3RJbnB1dFN0cmVhbUFkZERh
dGEoV2ViS2l0U291cFJlcXVlc3RJbnB1dFN0cmVhbSogc3RyZWFtLCBjb25zdCB2b2lkKiBkYXRh
LCBzaXplX3QgZGF0YUxlbmd0aCkKLXsKLSAgICBpZiAod2Via2l0U291cFJlcXVlc3RJbnB1dFN0
cmVhbUZpbmlzaGVkKHN0cmVhbSkpCi0gICAgICAgIHJldHVybjsKLQotICAgIE11dGV4TG9ja2Vy
IGxvY2tlcihzdHJlYW0tPnByaXYtPnJlYWRMb2NrKTsKLQotICAgIGlmIChkYXRhTGVuZ3RoKSB7
Ci0gICAgICAgIC8vIFRydW5jYXRlIHRoZSBkYXRhTGVuZ3RoIHRvIHRoZSBjb250ZW50TGVuZ3Ro
IGlmIGl0J3Mga25vd24uCi0gICAgICAgIGlmIChzdHJlYW0tPnByaXYtPmNvbnRlbnRMZW5ndGgg
JiYgc3RyZWFtLT5wcml2LT5ieXRlc1JlY2VpdmVkICsgZGF0YUxlbmd0aCA+IHN0cmVhbS0+cHJp
di0+Y29udGVudExlbmd0aCkKLSAgICAgICAgICAgIGRhdGFMZW5ndGggPSBzdHJlYW0tPnByaXYt
PmNvbnRlbnRMZW5ndGggLSBzdHJlYW0tPnByaXYtPmJ5dGVzUmVjZWl2ZWQ7Ci0gICAgICAgIHN0
cmVhbS0+cHJpdi0+Ynl0ZXNSZWNlaXZlZCArPSBkYXRhTGVuZ3RoOwotICAgICAgICBnX21lbW9y
eV9pbnB1dF9zdHJlYW1fYWRkX2RhdGEoR19NRU1PUllfSU5QVVRfU1RSRUFNKHN0cmVhbSksIGdf
bWVtZHVwKGRhdGEsIGRhdGFMZW5ndGgpLCBkYXRhTGVuZ3RoLCBnX2ZyZWUpOwotICAgIH0gZWxz
ZSB7Ci0gICAgICAgIC8vIFdlIGhhdmUgcmVjZWl2ZWQgYWxsIHRoZSBkYXRhLCBzZXQgY29udGVu
dExlbmd0aCB0byBieXRlc1JlY2VpdmVkIHRvIGluZGljYXRlIHdlIGhhdmUgZmluaXNoZWQuCi0g
ICAgICAgIHN0cmVhbS0+cHJpdi0+Y29udGVudExlbmd0aCA9IHN0cmVhbS0+cHJpdi0+Ynl0ZXNS
ZWNlaXZlZDsKLSAgICAgICAgLy8gSWYgdGhlcmUncyBhIHBlbmRpbmcgcmVhZCB0byBjb21wbGV0
ZSwgcmVhZF9mbiB3aWxsIHJldHVybiAwIGJlY2F1c2Ugd2UgaGF2ZW4ndCBhZGRlZCBtb3JlIGRh
dGEgdG8gdGhlCi0gICAgICAgIC8vIG1lbW9yeSBpbnB1dCBzdHJlYW0uIEFuZCBpZiB0aGVyZSBp
c24ndCBhIHBlbmRpbmcgcmVhZCwgdGhlIG5leHQgY2FsbCB0byByZWFkX2FzeW5jIHdpbGwgcmV0
dXJuIDAgdG9vLCBiZWNhdXNlCi0gICAgICAgIC8vIHdlYmtpdFNvdXBSZXF1ZXN0SW5wdXRTdHJl
YW1GaW5pc2hlZCgpIGlzIG5vdyBUUlVFLgotICAgIH0KLQotICAgIHdlYmtpdFNvdXBSZXF1ZXN0
SW5wdXRTdHJlYW1QZW5kaW5nUmVhZEFzeW5jQ29tcGxldGUoc3RyZWFtKTsKLX0KLQotYm9vbCB3
ZWJraXRTb3VwUmVxdWVzdElucHV0U3RyZWFtRmluaXNoZWQoV2ViS2l0U291cFJlcXVlc3RJbnB1
dFN0cmVhbSogc3RyZWFtKQotewotICAgIHJldHVybiAhd2Via2l0U291cFJlcXVlc3RJbnB1dFN0
cmVhbUlzV2FpdGluZ0ZvckRhdGEoc3RyZWFtKTsKLX0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJL
aXQyL1dlYlByb2Nlc3Mvc291cC9XZWJLaXRTb3VwUmVxdWVzdElucHV0U3RyZWFtLmggYi9Tb3Vy
Y2UvV2ViS2l0Mi9XZWJQcm9jZXNzL3NvdXAvV2ViS2l0U291cFJlcXVlc3RJbnB1dFN0cmVhbS5o
CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhM2M3MDIwOGNjMTRmNGRjZGRiY2Q5YzRh
YzRiNWQ5ZjZmOTQzZDNkLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3Mvc291cC9XZWJLaXRTb3VwUmVxdWVzdElu
cHV0U3RyZWFtLmgKKysrIC9kZXYvbnVsbApAQCAtMSw1NSArMCwwIEBACi0vKgotICogQ29weXJp
Z2h0IChDKSAyMDEyIElnYWxpYSBTLkwuCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29m
dHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVy
IHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2Ug
YXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICog
dmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2
ZXJzaW9uLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0
aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRo
b3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiBMaWJyYXJ5
IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hv
dWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1Ymxp
YyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJ
TkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bwotICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlv
biwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKLSAqIEJvc3RvbiwgTUEg
MDIxMTAtMTMwMSwgVVNBLgotICovCi0KLSNpZm5kZWYgV2ViS2l0U291cFJlcXVlc3RJbnB1dFN0
cmVhbV9oCi0jZGVmaW5lIFdlYktpdFNvdXBSZXF1ZXN0SW5wdXRTdHJlYW1faAotCi0jaW5jbHVk
ZSA8Z2lvL2dpby5oPgotCi1HX0JFR0lOX0RFQ0xTCi0KLSNkZWZpbmUgV0VCS0lUX1RZUEVfU09V
UF9SRVFVRVNUX0lOUFVUX1NUUkVBTSAgICAgICAgICAgICh3ZWJraXRfc291cF9yZXF1ZXN0X2lu
cHV0X3N0cmVhbV9nZXRfdHlwZSgpKQotI2RlZmluZSBXRUJLSVRfU09VUF9SRVFVRVNUX0lOUFVU
X1NUUkVBTShvYmplY3QpICAgICAgICAgKEdfVFlQRV9DSEVDS19JTlNUQU5DRV9DQVNUKChvYmpl
Y3QpLCBXRUJLSVRfVFlQRV9TT1VQX1JFUVVFU1RfSU5QVVRfU1RSRUFNLCBXZWJLaXRTb3VwUmVx
dWVzdElucHV0U3RyZWFtKSkKLSNkZWZpbmUgV0VCS0lUX0lTX1NPVVBfUkVRVUVTVF9JTlBVVF9T
VFJFQU0ob2JqZWN0KSAgICAgIChHX1RZUEVfQ0hFQ0tfSU5TVEFOQ0VfVFlQRSgob2JqZWN0KSwg
V0VCS0lUX1RZUEVfU09VUF9SRVFVRVNUX0lOUFVUX1NUUkVBTSkpCi0jZGVmaW5lIFdFQktJVF9T
T1VQX1JFUVVFU1RfSU5QVVRfU1RSRUFNX0NMQVNTKGtsYXNzKSAgICAoR19UWVBFX0NIRUNLX0NM
QVNTX0NBU1QoKGtsYXNzKSwgV0VCS0lUX1RZUEVfU09VUF9SRVFVRVNUX0lOUFVUX1NUUkVBTSwg
V2ViS2l0U291cFJlcXVlc3RJbnB1dFN0cmVhbUNsYXNzKSkKLSNkZWZpbmUgV0VCS0lUX0lTX1NP
VVBfUkVRVUVTVF9JTlBVVF9TVFJFQU1fQ0xBU1Moa2xhc3MpIChHX1RZUEVfQ0hFQ0tfQ0xBU1Nf
VFlQRSgoa2xhc3MpLCBXRUJLSVRfVFlQRV9TT1VQX1JFUVVFU1RfSU5QVVRfU1RSRUFNKSkKLSNk
ZWZpbmUgV0VCS0lUX1NPVVBfUkVRVUVTVF9JTlBVVF9TVFJFQU1fR0VUX0NMQVNTKG9iaikgIChH
X1RZUEVfSU5TVEFOQ0VfR0VUX0NMQVNTKChvYmopLCBXRUJLSVRfVFlQRV9TT1VQX1JFUVVFU1Rf
SU5QVVRfU1RSRUFNLCBXZWJLaXRTb3VwUmVxdWVzdElucHV0U3RyZWFtQ2xhc3MpKQotCi10eXBl
ZGVmIHN0cnVjdCBfV2ViS2l0U291cFJlcXVlc3RJbnB1dFN0cmVhbSBXZWJLaXRTb3VwUmVxdWVz
dElucHV0U3RyZWFtOwotdHlwZWRlZiBzdHJ1Y3QgX1dlYktpdFNvdXBSZXF1ZXN0SW5wdXRTdHJl
YW1DbGFzcyBXZWJLaXRTb3VwUmVxdWVzdElucHV0U3RyZWFtQ2xhc3M7Ci10eXBlZGVmIHN0cnVj
dCBfV2ViS2l0U291cFJlcXVlc3RJbnB1dFN0cmVhbVByaXZhdGUgV2ViS2l0U291cFJlcXVlc3RJ
bnB1dFN0cmVhbVByaXZhdGU7Ci0KLXN0cnVjdCBfV2ViS2l0U291cFJlcXVlc3RJbnB1dFN0cmVh
bSB7Ci0gICAgR01lbW9yeUlucHV0U3RyZWFtIHBhcmVudDsKLQotICAgIFdlYktpdFNvdXBSZXF1
ZXN0SW5wdXRTdHJlYW1Qcml2YXRlKiBwcml2OwotfTsKLQotc3RydWN0IF9XZWJLaXRTb3VwUmVx
dWVzdElucHV0U3RyZWFtQ2xhc3MgewotICAgIEdNZW1vcnlJbnB1dFN0cmVhbUNsYXNzIHBhcmVu
dDsKLX07Ci0KLUdUeXBlIHdlYmtpdF9zb3VwX3JlcXVlc3RfaW5wdXRfc3RyZWFtX2dldF90eXBl
KCk7Ci1HSW5wdXRTdHJlYW0qIHdlYmtpdFNvdXBSZXF1ZXN0SW5wdXRTdHJlYW1OZXcodWludDY0
X3QgY29udGVudExlbmd0aCk7Ci12b2lkIHdlYmtpdFNvdXBSZXF1ZXN0SW5wdXRTdHJlYW1BZGRE
YXRhKFdlYktpdFNvdXBSZXF1ZXN0SW5wdXRTdHJlYW0qLCBjb25zdCB2b2lkKiBkYXRhLCBzaXpl
X3QgZGF0YUxlbmd0aCk7Ci1ib29sIHdlYmtpdFNvdXBSZXF1ZXN0SW5wdXRTdHJlYW1GaW5pc2hl
ZChXZWJLaXRTb3VwUmVxdWVzdElucHV0U3RyZWFtKik7Ci0KLUdfRU5EX0RFQ0xTCi0KLSNlbmRp
ZiAvLyBXZWJLaXRTb3VwUmVxdWVzdElucHV0U3RyZWFtX2gK
</data>
<flag name="review"
          id="253574"
          type_id="1"
          status="+"
          setter="mcatanzaro"
    />
    <flag name="commit-queue"
          id="253575"
          type_id="3"
          status="-"
          setter="mcatanzaro"
    />
          </attachment>
      

    </bug>

</bugzilla>