<?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>145117</bug_id>
          
          <creation_ts>2015-05-18 00:28:37 -0700</creation_ts>
          <short_desc>[GTK] Move MainThreadGtk, RunLoopGtk, WorkQueueGtk under Source/WTF/wtf/glib/</short_desc>
          <delta_ts>2015-05-20 22:55:39 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>New Bugs</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Zan Dobersek">zan</reporter>
          <assigned_to name="Zan Dobersek">zan</assigned_to>
          <cc>cgarcia</cc>
    
    <cc>commit-queue</cc>
    
    <cc>mrobinson</cc>
    
    <cc>ossy</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1095561</commentid>
    <comment_count>0</comment_count>
    <who name="Zan Dobersek">zan</who>
    <bug_when>2015-05-18 00:28:37 -0700</bug_when>
    <thetext>[GTK] Move MainThreadGtk, RunLoopGtk, WorkQueueGtk under Source/WTF/wtf/glib/</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1095562</commentid>
    <comment_count>1</comment_count>
      <attachid>253306</attachid>
    <who name="Zan Dobersek">zan</who>
    <bug_when>2015-05-18 00:34:33 -0700</bug_when>
    <thetext>Created attachment 253306
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1095564</commentid>
    <comment_count>2</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2015-05-18 00:37:46 -0700</bug_when>
    <thetext>Attachment 253306 did not pass style-queue:


ERROR: Source/WTF/wtf/glib/RunLoopGLib.cpp:113:  More than one command on the same line  [whitespace/newline] [4]
ERROR: Source/WTF/wtf/glib/WorkQueueGLib.cpp:87:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WTF/wtf/glib/WorkQueueGLib.cpp:92:  When wrapping a line, only indent 4 spaces.  [whitespace/indent] [3]
ERROR: Source/WTF/wtf/glib/WorkQueueGLib.cpp:114:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WTF/wtf/glib/WorkQueueGLib.cpp:118:  More than one command on the same line  [whitespace/newline] [4]
ERROR: Source/WTF/wtf/glib/WorkQueueGLib.cpp:121:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WTF/wtf/glib/WorkQueueGLib.cpp:125:  More than one command on the same line  [whitespace/newline] [4]
Total errors found: 7 in 5 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1095565</commentid>
    <comment_count>3</comment_count>
      <attachid>253308</attachid>
    <who name="Zan Dobersek">zan</who>
    <bug_when>2015-05-18 00:45:44 -0700</bug_when>
    <thetext>Created attachment 253308
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1095566</commentid>
    <comment_count>4</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2015-05-18 00:48:54 -0700</bug_when>
    <thetext>Attachment 253308 did not pass style-queue:


ERROR: Tools/TestWebKitAPI/Tests/WTF/glib/WorkQueueGLib.cpp:58:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/WTF/wtf/glib/RunLoopGLib.cpp:113:  More than one command on the same line  [whitespace/newline] [4]
ERROR: Source/WTF/wtf/glib/WorkQueueGLib.cpp:87:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WTF/wtf/glib/WorkQueueGLib.cpp:92:  When wrapping a line, only indent 4 spaces.  [whitespace/indent] [3]
ERROR: Source/WTF/wtf/glib/WorkQueueGLib.cpp:114:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WTF/wtf/glib/WorkQueueGLib.cpp:118:  More than one command on the same line  [whitespace/newline] [4]
ERROR: Source/WTF/wtf/glib/WorkQueueGLib.cpp:121:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WTF/wtf/glib/WorkQueueGLib.cpp:125:  More than one command on the same line  [whitespace/newline] [4]
Total errors found: 8 in 8 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1095569</commentid>
    <comment_count>5</comment_count>
      <attachid>253308</attachid>
    <who name="Csaba Osztrogonác">ossy</who>
    <bug_when>2015-05-18 01:32:54 -0700</bug_when>
    <thetext>Comment on attachment 253308
Patch

LGTM, rs=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1095830</commentid>
    <comment_count>6</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2015-05-18 22:55:22 -0700</bug_when>
    <thetext>Cool, thanks!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1096496</commentid>
    <comment_count>7</comment_count>
      <attachid>253308</attachid>
    <who name="Zan Dobersek">zan</who>
    <bug_when>2015-05-20 22:55:29 -0700</bug_when>
    <thetext>Comment on attachment 253308
Patch

Clearing flags on attachment: 253308

Committed r184703: &lt;http://trac.webkit.org/changeset/184703&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1096497</commentid>
    <comment_count>8</comment_count>
    <who name="Zan Dobersek">zan</who>
    <bug_when>2015-05-20 22:55:39 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>253306</attachid>
            <date>2015-05-18 00:34:33 -0700</date>
            <delta_ts>2015-05-18 00:45:37 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-145117-20150518003835.patch</filename>
            <type>text/plain</type>
            <size>27790</size>
            <attacher name="Zan Dobersek">zan</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTg0NDQxCmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL0NoYW5n
ZUxvZyBiL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCmluZGV4IDM1NTI2MjcyNjUzNzk4NGRhM2JmMWM5
NTY4YjM2ZDZmZWNlMzYwMmQuLmQ2Yjc1MmM0ZjA4NDgxZWExMzBkOTUwYWVmNzIxNWE2MzQ4YmM5
ODkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XVEYvQ2hh
bmdlTG9nCkBAIC0xLDMgKzEsNDEgQEAKKzIwMTUtMDUtMTggIFphbiBEb2JlcnNlayAgPHpkb2Jl
cnNla0BpZ2FsaWEuY29tPgorCisgICAgICAgIFtHVEtdIE1vdmUgTWFpblRocmVhZEd0aywgUnVu
TG9vcEd0aywgV29ya1F1ZXVlR3RrIHVuZGVyIFNvdXJjZS9XVEYvd3RmL2dsaWIvCisgICAgICAg
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNDUxMTcKKworICAgICAg
ICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBNb3ZlIHRoZSBNYWluVGhy
ZWFkR3RrLCBSdW5Mb29wR3RrIGFuZCBXb3JrUXVldWVHdGsgaW1wbGVtZW50YXRpb24gZmlsZXMg
ZnJvbQorICAgICAgICBTb3VyY2UvV1RGL3d0Zi9ndGsvIHRvIFNvdXJjZS9XVEYvd3RmL2dsaWIv
LiBUaGVzZSBpbXBsZW1lbnRhdGlvbnMgYXJlIG5vdAorICAgICAgICBHVEstc3BlY2lmaWMgYW5k
IG9ubHkgZGVwZW5kIG9uIEdMaWIsIHNvIHRoZXkgYXJlIHJlbmFtZWQgYXMgd2VsbC4KKworICAg
ICAgICBUaGVyZSBhcmUgb3RoZXIgc3VjaCBpbXBsZW1lbnRhdGlvbnMgdW5kZXIgU291cmNlL1dU
Ri93dGYvZ29iamVjdC8gKEdPYmplY3QKKyAgICAgICAgaXMganVzdCBhIHN1YnNldCBvZiBHTGli
KSB0aGF0IHdpbGwgYmUgbW92ZWQgdW5kZXIgdGhlIG5ldyBkaXJlY3RvcnkgaW4KKyAgICAgICAg
ZnV0dXJlIHBhdGNoZXMuCisKKyAgICAgICAgKiB3dGYvUGxhdGZvcm1HVEsuY21ha2U6CisgICAg
ICAgICogd3RmL2dsaWIvTWFpblRocmVhZEdMaWIuY3BwOiBSZW5hbWVkIGZyb20gU291cmNlL1dU
Ri93dGYvZ3RrL01haW5UaHJlYWRHdGsuY3BwLgorICAgICAgICAoV1RGOjppbml0aWFsaXplTWFp
blRocmVhZFBsYXRmb3JtKToKKyAgICAgICAgKFdURjo6c2NoZWR1bGVEaXNwYXRjaEZ1bmN0aW9u
c09uTWFpblRocmVhZCk6CisgICAgICAgICogd3RmL2dsaWIvUnVuTG9vcEdMaWIuY3BwOiBSZW5h
bWVkIGZyb20gU291cmNlL1dURi93dGYvZ3RrL1J1bkxvb3BHdGsuY3BwLgorICAgICAgICAoV1RG
OjpSdW5Mb29wOjpSdW5Mb29wKToKKyAgICAgICAgKFdURjo6UnVuTG9vcDo6flJ1bkxvb3ApOgor
ICAgICAgICAoV1RGOjpSdW5Mb29wOjpydW4pOgorICAgICAgICAoV1RGOjpSdW5Mb29wOjpzdG9w
KToKKyAgICAgICAgKFdURjo6UnVuTG9vcDo6d2FrZVVwKToKKyAgICAgICAgKFdURjo6UnVuTG9v
cDo6VGltZXJCYXNlOjpUaW1lckJhc2UpOgorICAgICAgICAoV1RGOjpSdW5Mb29wOjpUaW1lckJh
c2U6On5UaW1lckJhc2UpOgorICAgICAgICAoV1RGOjpSdW5Mb29wOjpUaW1lckJhc2U6OnN0YXJ0
KToKKyAgICAgICAgKFdURjo6UnVuTG9vcDo6VGltZXJCYXNlOjpzdG9wKToKKyAgICAgICAgKFdU
Rjo6UnVuTG9vcDo6VGltZXJCYXNlOjppc0FjdGl2ZSk6CisgICAgICAgICogd3RmL2dsaWIvV29y
a1F1ZXVlR0xpYi5jcHA6IFJlbmFtZWQgZnJvbSBTb3VyY2UvV1RGL3d0Zi9ndGsvV29ya1F1ZXVl
R3RrLmNwcC4KKyAgICAgICAgKFdURjo6V29ya1F1ZXVlOjpwbGF0Zm9ybUluaXRpYWxpemUpOgor
ICAgICAgICAoV1RGOjpXb3JrUXVldWU6OnBsYXRmb3JtSW52YWxpZGF0ZSk6CisgICAgICAgIChX
VEY6OldvcmtRdWV1ZTo6cmVnaXN0ZXJTb2NrZXRFdmVudEhhbmRsZXIpOgorICAgICAgICAoV1RG
OjpXb3JrUXVldWU6OnVucmVnaXN0ZXJTb2NrZXRFdmVudEhhbmRsZXIpOgorICAgICAgICAoV1RG
OjpXb3JrUXVldWU6OmRpc3BhdGNoKToKKyAgICAgICAgKFdURjo6V29ya1F1ZXVlOjpkaXNwYXRj
aEFmdGVyKToKKwogMjAxNS0wNS0xNSAgRGFuIEJlcm5zdGVpbiAgPG1pdHpAYXBwbGUuY29tPgog
CiAgICAgICAgIEJ1aWxkIGZpeCBmb3Igc29tZSB2ZXJzaW9ucyBvZiBjbGFuZy4KZGlmZiAtLWdp
dCBhL1NvdXJjZS9XVEYvd3RmL1BsYXRmb3JtR1RLLmNtYWtlIGIvU291cmNlL1dURi93dGYvUGxh
dGZvcm1HVEsuY21ha2UKaW5kZXggZWJhZmVmNTg2YTNlNmExNWY0ZmZhOGM3NzVlMDQ2MzRhZWQx
MDIxMC4uZTNlZGEwZjUwYzE3MTgyNzk2M2I5OTQxMzYyZjk3OTMxNDNhYjc0NCAxMDA2NDQKLS0t
IGEvU291cmNlL1dURi93dGYvUGxhdGZvcm1HVEsuY21ha2UKKysrIGIvU291cmNlL1dURi93dGYv
UGxhdGZvcm1HVEsuY21ha2UKQEAgLTIsMTQgKzIsMTQgQEAgc2V0KFdURl9MSUJSQVJZX1RZUEUg
U1RBVElDKQogc2V0KFdURl9PVVRQVVRfTkFNRSBXVEZHVEspCiAKIGxpc3QoQVBQRU5EIFdURl9T
T1VSQ0VTCisgICAgZ2xpYi9NYWluVGhyZWFkR0xpYi5jcHAKKyAgICBnbGliL1J1bkxvb3BHTGli
LmNwcAorICAgIGdsaWIvV29ya1F1ZXVlR0xpYi5jcHAKKwogICAgIGdvYmplY3QvR01haW5Mb29w
U291cmNlLmNwcAogICAgIGdvYmplY3QvR1JlZlB0ci5jcHAKICAgICBnb2JqZWN0L0dUaHJlYWRT
YWZlTWFpbkxvb3BTb3VyY2UuY3BwCiAgICAgZ29iamVjdC9HbGliVXRpbGl0aWVzLmNwcAotCi0g
ICAgZ3RrL01haW5UaHJlYWRHdGsuY3BwCi0gICAgZ3RrL1J1bkxvb3BHdGsuY3BwCi0gICAgZ3Rr
L1dvcmtRdWV1ZUd0ay5jcHAKICkKIAogbGlzdChBUFBFTkQgV1RGX0xJQlJBUklFUwpkaWZmIC0t
Z2l0IGEvU291cmNlL1dURi93dGYvZ2xpYi9NYWluVGhyZWFkR0xpYi5jcHAgYi9Tb3VyY2UvV1RG
L3d0Zi9nbGliL01haW5UaHJlYWRHTGliLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi41OTgxMjlhZjhkYzIyNDdk
ZTYyYjIyNDU2M2EwMmQ1MjgyMzM1ZTc5Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dURi93
dGYvZ2xpYi9NYWluVGhyZWFkR0xpYi5jcHAKQEAgLTAsMCArMSw0NiBAQAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAwNywgMjAwOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBD
b3B5cmlnaHQgKEMpIDIwMDcgSnVzdGluIEhheWdvb2QgKGpoYXlnb29kQHJlYWt0aXguY29tKQor
ICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICoKKyAqIDEuICBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAq
ICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgorICogMy4gIE5laXRoZXIgdGhlIG5hbWUgb2YgQXBwbGUgSW5jLiAo
IkFwcGxlIikgbm9yIHRoZSBuYW1lcyBvZgorICogICAgIGl0cyBjb250cmlidXRvcnMgbWF5IGJl
IHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQKKyAqICAgICBmcm9t
IHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24u
CisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRS
SUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9T
RSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05U
UklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVT
SU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKKyAqIE9OIEFOWSBUSEVPUlkg
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKKyAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNv
bmZpZy5oIgorI2luY2x1ZGUgIk1haW5UaHJlYWQuaCIKKworI2luY2x1ZGUgPHd0Zi9nb2JqZWN0
L0dNYWluTG9vcFNvdXJjZS5oPgorCituYW1lc3BhY2UgV1RGIHsKKwordm9pZCBpbml0aWFsaXpl
TWFpblRocmVhZFBsYXRmb3JtKCkKK3sKK30KKwordm9pZCBzY2hlZHVsZURpc3BhdGNoRnVuY3Rp
b25zT25NYWluVGhyZWFkKCkKK3sKKyAgICBHTWFpbkxvb3BTb3VyY2U6OnNjaGVkdWxlQW5kRGVs
ZXRlT25EZXN0cm95KCJbV2ViS2l0XSBkaXNwYXRjaEZ1bmN0aW9uc0Zyb21NYWluVGhyZWFkIiwg
c3RkOjpmdW5jdGlvbjx2b2lkKCk+KGRpc3BhdGNoRnVuY3Rpb25zRnJvbU1haW5UaHJlYWQpKTsK
K30KKworfSAvLyBuYW1lc3BhY2UgV1RGCmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi9nbGli
L1J1bkxvb3BHTGliLmNwcCBiL1NvdXJjZS9XVEYvd3RmL2dsaWIvUnVuTG9vcEdMaWIuY3BwCm5l
dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAuLjdkYzQwNzU2NjA4MmEyMzhiYWY5NjEwODc2MmVlYzI0MmY2ZWI5OGIKLS0tIC9k
ZXYvbnVsbAorKysgYi9Tb3VyY2UvV1RGL3d0Zi9nbGliL1J1bkxvb3BHTGliLmNwcApAQCAtMCww
ICsxLDEyNyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMCBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKiBQb3J0aW9ucyBDb3B5cmlnaHQgKGMpIDIwMTAgTW90b3JvbGEgTW9i
aWxpdHksIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBg
QVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklC
VVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5F
U1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJj
b25maWcuaCIKKyNpbmNsdWRlICJSdW5Mb29wLmgiCisKKyNpbmNsdWRlIDxnbGliLmg+CisjaW5j
bHVkZSA8d3RmL01haW5UaHJlYWQuaD4KKworbmFtZXNwYWNlIFdURiB7CisKK1J1bkxvb3A6OlJ1
bkxvb3AoKQoreworICAgIG1fbWFpbkNvbnRleHQgPSBnX21haW5fY29udGV4dF9nZXRfdGhyZWFk
X2RlZmF1bHQoKTsKKyAgICBpZiAoIW1fbWFpbkNvbnRleHQpCisgICAgICAgIG1fbWFpbkNvbnRl
eHQgPSBpc01haW5UaHJlYWQoKSA/IGdfbWFpbl9jb250ZXh0X2RlZmF1bHQoKSA6IGFkb3B0R1Jl
ZihnX21haW5fY29udGV4dF9uZXcoKSk7CisgICAgQVNTRVJUKG1fbWFpbkNvbnRleHQpOworCisg
ICAgR1JlZlB0cjxHTWFpbkxvb3A+IGlubmVybW9zdExvb3AgPSBhZG9wdEdSZWYoZ19tYWluX2xv
b3BfbmV3KG1fbWFpbkNvbnRleHQuZ2V0KCksIEZBTFNFKSk7CisgICAgQVNTRVJUKGlubmVybW9z
dExvb3ApOworICAgIG1fbWFpbkxvb3BzLmFwcGVuZChpbm5lcm1vc3RMb29wKTsKK30KKworUnVu
TG9vcDo6flJ1bkxvb3AoKQoreworICAgIGZvciAoaW50IGkgPSBtX21haW5Mb29wcy5zaXplKCkg
LSAxOyBpID49IDA7IC0taSkgeworICAgICAgICBpZiAoIWdfbWFpbl9sb29wX2lzX3J1bm5pbmco
bV9tYWluTG9vcHNbaV0uZ2V0KCkpKQorICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIGdf
bWFpbl9sb29wX3F1aXQobV9tYWluTG9vcHNbaV0uZ2V0KCkpOworICAgIH0KK30KKwordm9pZCBS
dW5Mb29wOjpydW4oKQoreworICAgIFJ1bkxvb3AmIHJ1bkxvb3AgPSBSdW5Mb29wOjpjdXJyZW50
KCk7CisgICAgR01haW5Db250ZXh0KiBtYWluQ29udGV4dCA9IHJ1bkxvb3AubV9tYWluQ29udGV4
dC5nZXQoKTsKKworICAgIC8vIFRoZSBpbm5lcm1vc3QgbWFpbiBsb29wIHNob3VsZCBhbHdheXMg
YmUgdGhlcmUuCisgICAgQVNTRVJUKCFydW5Mb29wLm1fbWFpbkxvb3BzLmlzRW1wdHkoKSk7CisK
KyAgICBHTWFpbkxvb3AqIGlubmVybW9zdExvb3AgPSBydW5Mb29wLm1fbWFpbkxvb3BzWzBdLmdl
dCgpOworICAgIGlmICghZ19tYWluX2xvb3BfaXNfcnVubmluZyhpbm5lcm1vc3RMb29wKSkgewor
ICAgICAgICBnX21haW5fY29udGV4dF9wdXNoX3RocmVhZF9kZWZhdWx0KG1haW5Db250ZXh0KTsK
KyAgICAgICAgZ19tYWluX2xvb3BfcnVuKGlubmVybW9zdExvb3ApOworICAgICAgICBnX21haW5f
Y29udGV4dF9wb3BfdGhyZWFkX2RlZmF1bHQobWFpbkNvbnRleHQpOworICAgICAgICByZXR1cm47
CisgICAgfQorCisgICAgLy8gQ3JlYXRlIGFuZCBydW4gYSBuZXN0ZWQgbG9vcCBpZiB0aGUgaW5u
ZXJtb3N0IG9uZSB3YXMgYWxyZWFkeSBydW5uaW5nLgorICAgIEdNYWluTG9vcCogbmVzdGVkTWFp
bkxvb3AgPSBnX21haW5fbG9vcF9uZXcobWFpbkNvbnRleHQsIEZBTFNFKTsKKyAgICBydW5Mb29w
Lm1fbWFpbkxvb3BzLmFwcGVuZChhZG9wdEdSZWYobmVzdGVkTWFpbkxvb3ApKTsKKworICAgIGdf
bWFpbl9jb250ZXh0X3B1c2hfdGhyZWFkX2RlZmF1bHQobWFpbkNvbnRleHQpOworICAgIGdfbWFp
bl9sb29wX3J1bihuZXN0ZWRNYWluTG9vcCk7CisgICAgZ19tYWluX2NvbnRleHRfcG9wX3RocmVh
ZF9kZWZhdWx0KG1haW5Db250ZXh0KTsKKworICAgIHJ1bkxvb3AubV9tYWluTG9vcHMucmVtb3Zl
TGFzdCgpOworfQorCit2b2lkIFJ1bkxvb3A6OnN0b3AoKQoreworICAgIC8vIFRoZSBpbm5lcm1v
c3QgbWFpbiBsb29wIHNob3VsZCBhbHdheXMgYmUgdGhlcmUuCisgICAgQVNTRVJUKCFtX21haW5M
b29wcy5pc0VtcHR5KCkpOworICAgIEdSZWZQdHI8R01haW5Mb29wPiBsYXN0TWFpbkxvb3AgPSBt
X21haW5Mb29wcy5sYXN0KCk7CisgICAgaWYgKGdfbWFpbl9sb29wX2lzX3J1bm5pbmcobGFzdE1h
aW5Mb29wLmdldCgpKSkKKyAgICAgICAgZ19tYWluX2xvb3BfcXVpdChsYXN0TWFpbkxvb3AuZ2V0
KCkpOworfQorCit2b2lkIFJ1bkxvb3A6Ondha2VVcCgpCit7CisgICAgUmVmUHRyPFJ1bkxvb3A+
IHJ1bkxvb3AodGhpcyk7CisgICAgR01haW5Mb29wU291cmNlOjpzY2hlZHVsZUFuZERlbGV0ZU9u
RGVzdHJveSgiW1dlYktpdF0gUnVuTG9vcCB3b3JrIiwgc3RkOjpmdW5jdGlvbjx2b2lkKCk+KFty
dW5Mb29wXSB7CisgICAgICAgIHJ1bkxvb3AtPnBlcmZvcm1Xb3JrKCk7CisgICAgfSksIEdfUFJJ
T1JJVFlfREVGQVVMVCwgbnVsbHB0ciwgbV9tYWluQ29udGV4dC5nZXQoKSk7CisgICAgZ19tYWlu
X2NvbnRleHRfd2FrZXVwKG1fbWFpbkNvbnRleHQuZ2V0KCkpOworfQorCitSdW5Mb29wOjpUaW1l
ckJhc2U6OlRpbWVyQmFzZShSdW5Mb29wJiBydW5Mb29wKQorICAgIDogbV9ydW5Mb29wKHJ1bkxv
b3ApCit7Cit9CisKK1J1bkxvb3A6OlRpbWVyQmFzZTo6flRpbWVyQmFzZSgpCit7CisgICAgc3Rv
cCgpOworfQorCit2b2lkIFJ1bkxvb3A6OlRpbWVyQmFzZTo6c3RhcnQoZG91YmxlIGZpcmVJbnRl
cnZhbCwgYm9vbCByZXBlYXQpCit7CisgICAgbV90aW1lclNvdXJjZS5zY2hlZHVsZUFmdGVyRGVs
YXkoIltXZWJLaXRdIFJ1bkxvb3A6OlRpbWVyIiwgc3RkOjpmdW5jdGlvbjxib29sICgpPihbdGhp
cywgcmVwZWF0XSB7IGZpcmVkKCk7IHJldHVybiByZXBlYXQ7IH0pLAorICAgICAgICBzdGQ6OmNo
cm9ubzo6ZHVyYXRpb25fY2FzdDxzdGQ6OmNocm9ubzo6bWlsbGlzZWNvbmRzPihzdGQ6OmNocm9u
bzo6ZHVyYXRpb248ZG91YmxlPihmaXJlSW50ZXJ2YWwpKSwgR19QUklPUklUWV9ERUZBVUxULCBu
dWxscHRyLCBtX3J1bkxvb3AubV9tYWluQ29udGV4dC5nZXQoKSk7Cit9CisKK3ZvaWQgUnVuTG9v
cDo6VGltZXJCYXNlOjpzdG9wKCkKK3sKKyAgICBtX3RpbWVyU291cmNlLmNhbmNlbCgpOworfQor
Citib29sIFJ1bkxvb3A6OlRpbWVyQmFzZTo6aXNBY3RpdmUoKSBjb25zdAoreworICAgIHJldHVy
biBtX3RpbWVyU291cmNlLmlzU2NoZWR1bGVkKCk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdURgpk
aWZmIC0tZ2l0IGEvU291cmNlL1dURi93dGYvZ2xpYi9Xb3JrUXVldWVHTGliLmNwcCBiL1NvdXJj
ZS9XVEYvd3RmL2dsaWIvV29ya1F1ZXVlR0xpYi5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZWUxYjYwYmFmNWQw
NjhiYTJjZWFkM2Q4MTE0OGZiNGEyYzdjNDFiMgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9X
VEYvd3RmL2dsaWIvV29ya1F1ZXVlR0xpYi5jcHAKQEAgLTAsMCArMSwxMjggQEAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTEgSWdhbGlhIFMuTC4KKyAqIENvcHlyaWdodCAoQykgMjAxMCBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBQb3J0aW9ucyBDb3B5cmlnaHQgKGMpIDIw
MTAgTW90b3JvbGEgTW9iaWxpdHksIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
CisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMg
Q09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
CisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisg
KiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJP
RklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQor
ICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICov
CisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJXb3JrUXVldWUuaCIKKworI2luY2x1
ZGUgPGdpby9naW8uaD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKworbmFtZXNwYWNlIFdURiB7CisK
K3N0YXRpYyBjb25zdCBzaXplX3Qga1Zpc3VhbFN0dWRpb1RocmVhZE5hbWVMaW1pdCA9IDMxOwor
Cit2b2lkIFdvcmtRdWV1ZTo6cGxhdGZvcm1Jbml0aWFsaXplKGNvbnN0IGNoYXIqIG5hbWUsIFR5
cGUsIFFPUykKK3sKKyAgICBtX2V2ZW50Q29udGV4dCA9IGFkb3B0R1JlZihnX21haW5fY29udGV4
dF9uZXcoKSk7CisgICAgQVNTRVJUKG1fZXZlbnRDb250ZXh0KTsKKyAgICBtX2V2ZW50TG9vcCA9
IGFkb3B0R1JlZihnX21haW5fbG9vcF9uZXcobV9ldmVudENvbnRleHQuZ2V0KCksIEZBTFNFKSk7
CisgICAgQVNTRVJUKG1fZXZlbnRMb29wKTsKKworICAgIC8vIFRoaXMgbmFtZSBjYW4gYmUgY29t
LmFwcGxlLldlYktpdC5Qcm9jZXNzTGF1bmNoZXIgb3IgY29tLmFwcGxlLkNvcmVJUEMuUmVjZWl2
ZVF1ZXVlLgorICAgIC8vIFdlIGFyZSB1c2luZyB0aG9zZSBuYW1lcyBmb3IgdGhlIHRocmVhZCBu
YW1lLCBidXQgYm90aCBhcmUgbG9uZ2VyIHRoYW4gMzEgY2hhcmFjdGVycywKKyAgICAvLyB3aGlj
aCBpcyB0aGUgbGltaXQgb2YgVmlzdWFsIFN0dWRpbyBmb3IgdGhyZWFkIG5hbWVzLgorICAgIC8v
IFdoZW4gbG9nIGlzIGVuYWJsZWQgY3JlYXRlVGhyZWFkKCkgd2lsbCBhc3NlcnQgaW5zdGVhZCBv
ZiB0cnVuY2F0ZSB0aGUgbmFtZSwgc28gd2UgbmVlZAorICAgIC8vIHRvIG1ha2Ugc3VyZSB3ZSBk
b24ndCB1c2UgYSBuYW1lIGxvbmdlciB0aGFuIDMxIGNoYXJhY3RlcnMuCisgICAgY29uc3QgY2hh
ciogdGhyZWFkTmFtZSA9IGdfc3RycnN0cihuYW1lLCAiLiIpOworICAgIGlmICh0aHJlYWROYW1l
KQorICAgICAgICB0aHJlYWROYW1lKys7CisgICAgZWxzZQorICAgICAgICB0aHJlYWROYW1lID0g
bmFtZTsKKyAgICBpZiAoc3RybGVuKHRocmVhZE5hbWUpID4ga1Zpc3VhbFN0dWRpb1RocmVhZE5h
bWVMaW1pdCkKKyAgICAgICAgdGhyZWFkTmFtZSArPSBzdHJsZW4odGhyZWFkTmFtZSkgLSBrVmlz
dWFsU3R1ZGlvVGhyZWFkTmFtZUxpbWl0OworCisgICAgR1JlZlB0cjxHTWFpbkxvb3A+IGV2ZW50
TG9vcChtX2V2ZW50TG9vcC5nZXQoKSk7CisgICAgbV93b3JrUXVldWVUaHJlYWQgPSBjcmVhdGVU
aHJlYWQodGhyZWFkTmFtZSwgW2V2ZW50TG9vcF0geworICAgICAgICBnX21haW5fY29udGV4dF9w
dXNoX3RocmVhZF9kZWZhdWx0KGdfbWFpbl9sb29wX2dldF9jb250ZXh0KGV2ZW50TG9vcC5nZXQo
KSkpOworICAgICAgICBnX21haW5fbG9vcF9ydW4oZXZlbnRMb29wLmdldCgpKTsKKyAgICB9KTsK
K30KKwordm9pZCBXb3JrUXVldWU6OnBsYXRmb3JtSW52YWxpZGF0ZSgpCit7CisgICAgaWYgKG1f
d29ya1F1ZXVlVGhyZWFkKSB7CisgICAgICAgIGRldGFjaFRocmVhZChtX3dvcmtRdWV1ZVRocmVh
ZCk7CisgICAgICAgIG1fd29ya1F1ZXVlVGhyZWFkID0gMDsKKyAgICB9CisKKyAgICBpZiAobV9l
dmVudExvb3ApIHsKKyAgICAgICAgaWYgKGdfbWFpbl9sb29wX2lzX3J1bm5pbmcobV9ldmVudExv
b3AuZ2V0KCkpKQorICAgICAgICAgICAgZ19tYWluX2xvb3BfcXVpdChtX2V2ZW50TG9vcC5nZXQo
KSk7CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgLy8gVGhlIHRocmVhZCBoYXNuJ3Qgc3Rh
cnRlZCB5ZXQsIHNvIHNjaGVkdWxlIGEgbWFpbiBsb29wIHF1aXQgdG8gZW5zdXJlIHRoZSB0aHJl
YWQgZmluaXNoZXMuCisgICAgICAgICAgICBHTWFpbkxvb3AqIGV2ZW50TG9vcCA9IG1fZXZlbnRM
b29wLmdldCgpOworICAgICAgICAgICAgR01haW5Mb29wU291cmNlOjpzY2hlZHVsZUFuZERlbGV0
ZU9uRGVzdHJveSgiW1dlYktpdF0gV29ya1F1ZXVlIHF1aXQgbWFpbiBsb29wIiwgW2V2ZW50TG9v
cF0geyBnX21haW5fbG9vcF9xdWl0KGV2ZW50TG9vcCk7IH0sCisgICAgICAgICAgICAgICAgR19Q
UklPUklUWV9ISUdILCBudWxscHRyLCBtX2V2ZW50Q29udGV4dC5nZXQoKSk7CisgICAgICAgIH0K
KyAgICAgICAgbV9ldmVudExvb3AgPSBudWxscHRyOworICAgIH0KKworICAgIG1fZXZlbnRDb250
ZXh0ID0gbnVsbHB0cjsKK30KKwordm9pZCBXb3JrUXVldWU6OnJlZ2lzdGVyU29ja2V0RXZlbnRI
YW5kbGVyKGludCBmaWxlRGVzY3JpcHRvciwgc3RkOjpmdW5jdGlvbjx2b2lkICgpPiBmdW5jdGlv
biwgc3RkOjpmdW5jdGlvbjx2b2lkICgpPiBjbG9zZUZ1bmN0aW9uKQoreworICAgIEdSZWZQdHI8
R1NvY2tldD4gc29ja2V0ID0gYWRvcHRHUmVmKGdfc29ja2V0X25ld19mcm9tX2ZkKGZpbGVEZXNj
cmlwdG9yLCAwKSk7CisgICAgcmVmKCk7CisgICAgbV9zb2NrZXRFdmVudFNvdXJjZS5zY2hlZHVs
ZSgiW1dlYktpdF0gV29ya1F1ZXVlOjpTb2NrZXRFdmVudEhhbmRsZXIiLCBbZnVuY3Rpb24sIGNs
b3NlRnVuY3Rpb25dKEdJT0NvbmRpdGlvbiBjb25kaXRpb24pIHsKKyAgICAgICAgICAgIGlmIChj
b25kaXRpb24gJiBHX0lPX0hVUCB8fCBjb25kaXRpb24gJiBHX0lPX0VSUiB8fCBjb25kaXRpb24g
JiBHX0lPX05WQUwpIHsKKyAgICAgICAgICAgICAgICBjbG9zZUZ1bmN0aW9uKCk7CisgICAgICAg
ICAgICAgICAgcmV0dXJuIEdNYWluTG9vcFNvdXJjZTo6U3RvcDsKKyAgICAgICAgICAgIH0KKwor
ICAgICAgICAgICAgaWYgKGNvbmRpdGlvbiAmIEdfSU9fSU4pIHsKKyAgICAgICAgICAgICAgICBm
dW5jdGlvbigpOworICAgICAgICAgICAgICAgIHJldHVybiBHTWFpbkxvb3BTb3VyY2U6OkNvbnRp
bnVlOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsK
KyAgICAgICAgICAgIHJldHVybiBHTWFpbkxvb3BTb3VyY2U6OlN0b3A7CisgICAgICAgIH0sIHNv
Y2tldC5nZXQoKSwgR19JT19JTiwKKyAgICAgICAgW3RoaXNdIHsgZGVyZWYoKTsgfSwKKyAgICAg
ICAgbV9ldmVudENvbnRleHQuZ2V0KCkpOworfQorCit2b2lkIFdvcmtRdWV1ZTo6dW5yZWdpc3Rl
clNvY2tldEV2ZW50SGFuZGxlcihpbnQpCit7CisgICAgbV9zb2NrZXRFdmVudFNvdXJjZS5jYW5j
ZWwoKTsKK30KKwordm9pZCBXb3JrUXVldWU6OmRpc3BhdGNoKHN0ZDo6ZnVuY3Rpb248dm9pZCAo
KT4gZnVuY3Rpb24pCit7CisgICAgcmVmKCk7CisgICAgR01haW5Mb29wU291cmNlOjpzY2hlZHVs
ZUFuZERlbGV0ZU9uRGVzdHJveSgiW1dlYktpdF0gV29ya1F1ZXVlOjpkaXNwYXRjaCIsIFdURjo6
bW92ZShmdW5jdGlvbiksIEdfUFJJT1JJVFlfREVGQVVMVCwKKyAgICAgICAgW3RoaXNdIHsgZGVy
ZWYoKTsgfSwgbV9ldmVudENvbnRleHQuZ2V0KCkpOworfQorCit2b2lkIFdvcmtRdWV1ZTo6ZGlz
cGF0Y2hBZnRlcihzdGQ6OmNocm9ubzo6bmFub3NlY29uZHMgZHVyYXRpb24sIHN0ZDo6ZnVuY3Rp
b248dm9pZCAoKT4gZnVuY3Rpb24pCit7CisgICAgcmVmKCk7CisgICAgR01haW5Mb29wU291cmNl
OjpzY2hlZHVsZUFmdGVyRGVsYXlBbmREZWxldGVPbkRlc3Ryb3koIltXZWJLaXRdIFdvcmtRdWV1
ZTo6ZGlzcGF0Y2hBZnRlciIsIFdURjo6bW92ZShmdW5jdGlvbiksCisgICAgICAgIHN0ZDo6Y2hy
b25vOjpkdXJhdGlvbl9jYXN0PHN0ZDo6Y2hyb25vOjptaWxsaXNlY29uZHM+KGR1cmF0aW9uKSwg
R19QUklPUklUWV9ERUZBVUxULCBbdGhpc10geyBkZXJlZigpOyB9LCBtX2V2ZW50Q29udGV4dC5n
ZXQoKSk7Cit9CisKK30KZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvd3RmL2d0ay9NYWluVGhyZWFk
R3RrLmNwcCBiL1NvdXJjZS9XVEYvd3RmL2d0ay9NYWluVGhyZWFkR3RrLmNwcApkZWxldGVkIGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggNTk4MTI5YWY4ZGMyMjQ3ZGU2MmIyMjQ1NjNhMDJkNTI4MjMz
NWU3OS4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3Vy
Y2UvV1RGL3d0Zi9ndGsvTWFpblRocmVhZEd0ay5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSw0NiAr
MCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDA3LCAyMDA4IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAwNyBKdXN0aW4gSGF5Z29vZCAoamhh
eWdvb2RAcmVha3RpeC5jb20pCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFy
ZSBtZXQ6Ci0gKgotICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0g
KiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQotICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKiAzLiAgTmVpdGhlciB0aGUg
bmFtZSBvZiBBcHBsZSBJbmMuICgiQXBwbGUiKSBub3IgdGhlIG5hbWVzIG9mCi0gKiAgICAgaXRz
IGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMg
ZGVyaXZlZAotICogICAgIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9y
IHdyaXR0ZW4gcGVybWlzc2lvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQotICogRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUg
SU1QTElFRAotICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQotICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQotICogRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5U
SUFMIERBTUFHRVMKLSAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1F
TlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKLSAqIExPU1MgT0YgVVNFLCBEQVRB
LCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RAotICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgotICogVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
LSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiTWFpblRocmVhZC5oIgotCi0j
aW5jbHVkZSA8d3RmL2dvYmplY3QvR01haW5Mb29wU291cmNlLmg+Ci0KLW5hbWVzcGFjZSBXVEYg
ewotCi12b2lkIGluaXRpYWxpemVNYWluVGhyZWFkUGxhdGZvcm0oKQotewotfQotCi12b2lkIHNj
aGVkdWxlRGlzcGF0Y2hGdW5jdGlvbnNPbk1haW5UaHJlYWQoKQotewotICAgIEdNYWluTG9vcFNv
dXJjZTo6c2NoZWR1bGVBbmREZWxldGVPbkRlc3Ryb3koIltXZWJLaXRdIGRpc3BhdGNoRnVuY3Rp
b25zRnJvbU1haW5UaHJlYWQiLCBzdGQ6OmZ1bmN0aW9uPHZvaWQoKT4oZGlzcGF0Y2hGdW5jdGlv
bnNGcm9tTWFpblRocmVhZCkpOwotfQotCi19IC8vIG5hbWVzcGFjZSBXVEYKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XVEYvd3RmL2d0ay9SdW5Mb29wR3RrLmNwcCBiL1NvdXJjZS9XVEYvd3RmL2d0ay9S
dW5Mb29wR3RrLmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggN2RjNDA3NTY2MDgy
YTIzOGJhZjk2MTA4NzYyZWVjMjQyZjZlYjk4Yi4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV1RGL3d0Zi9ndGsvUnVuTG9vcEd0ay5jcHAKKysr
IC9kZXYvbnVsbApAQCAtMSwxMjcgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMCBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBQb3J0aW9ucyBDb3B5cmlnaHQgKGMp
IDIwMTAgTW90b3JvbGEgTW9iaWxpdHksIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgot
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJ
VFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJ
TkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9G
Ci0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1Ig
UFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgot
ICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJSdW5Mb29wLmgiCi0KLSNpbmNs
dWRlIDxnbGliLmg+Ci0jaW5jbHVkZSA8d3RmL01haW5UaHJlYWQuaD4KLQotbmFtZXNwYWNlIFdU
RiB7Ci0KLVJ1bkxvb3A6OlJ1bkxvb3AoKQotewotICAgIG1fbWFpbkNvbnRleHQgPSBnX21haW5f
Y29udGV4dF9nZXRfdGhyZWFkX2RlZmF1bHQoKTsKLSAgICBpZiAoIW1fbWFpbkNvbnRleHQpCi0g
ICAgICAgIG1fbWFpbkNvbnRleHQgPSBpc01haW5UaHJlYWQoKSA/IGdfbWFpbl9jb250ZXh0X2Rl
ZmF1bHQoKSA6IGFkb3B0R1JlZihnX21haW5fY29udGV4dF9uZXcoKSk7Ci0gICAgQVNTRVJUKG1f
bWFpbkNvbnRleHQpOwotCi0gICAgR1JlZlB0cjxHTWFpbkxvb3A+IGlubmVybW9zdExvb3AgPSBh
ZG9wdEdSZWYoZ19tYWluX2xvb3BfbmV3KG1fbWFpbkNvbnRleHQuZ2V0KCksIEZBTFNFKSk7Ci0g
ICAgQVNTRVJUKGlubmVybW9zdExvb3ApOwotICAgIG1fbWFpbkxvb3BzLmFwcGVuZChpbm5lcm1v
c3RMb29wKTsKLX0KLQotUnVuTG9vcDo6flJ1bkxvb3AoKQotewotICAgIGZvciAoaW50IGkgPSBt
X21haW5Mb29wcy5zaXplKCkgLSAxOyBpID49IDA7IC0taSkgewotICAgICAgICBpZiAoIWdfbWFp
bl9sb29wX2lzX3J1bm5pbmcobV9tYWluTG9vcHNbaV0uZ2V0KCkpKQotICAgICAgICAgICAgY29u
dGludWU7Ci0gICAgICAgIGdfbWFpbl9sb29wX3F1aXQobV9tYWluTG9vcHNbaV0uZ2V0KCkpOwot
ICAgIH0KLX0KLQotdm9pZCBSdW5Mb29wOjpydW4oKQotewotICAgIFJ1bkxvb3AmIHJ1bkxvb3Ag
PSBSdW5Mb29wOjpjdXJyZW50KCk7Ci0gICAgR01haW5Db250ZXh0KiBtYWluQ29udGV4dCA9IHJ1
bkxvb3AubV9tYWluQ29udGV4dC5nZXQoKTsKLQotICAgIC8vIFRoZSBpbm5lcm1vc3QgbWFpbiBs
b29wIHNob3VsZCBhbHdheXMgYmUgdGhlcmUuCi0gICAgQVNTRVJUKCFydW5Mb29wLm1fbWFpbkxv
b3BzLmlzRW1wdHkoKSk7Ci0KLSAgICBHTWFpbkxvb3AqIGlubmVybW9zdExvb3AgPSBydW5Mb29w
Lm1fbWFpbkxvb3BzWzBdLmdldCgpOwotICAgIGlmICghZ19tYWluX2xvb3BfaXNfcnVubmluZyhp
bm5lcm1vc3RMb29wKSkgewotICAgICAgICBnX21haW5fY29udGV4dF9wdXNoX3RocmVhZF9kZWZh
dWx0KG1haW5Db250ZXh0KTsKLSAgICAgICAgZ19tYWluX2xvb3BfcnVuKGlubmVybW9zdExvb3Ap
OwotICAgICAgICBnX21haW5fY29udGV4dF9wb3BfdGhyZWFkX2RlZmF1bHQobWFpbkNvbnRleHQp
OwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgLy8gQ3JlYXRlIGFuZCBydW4gYSBuZXN0
ZWQgbG9vcCBpZiB0aGUgaW5uZXJtb3N0IG9uZSB3YXMgYWxyZWFkeSBydW5uaW5nLgotICAgIEdN
YWluTG9vcCogbmVzdGVkTWFpbkxvb3AgPSBnX21haW5fbG9vcF9uZXcobWFpbkNvbnRleHQsIEZB
TFNFKTsKLSAgICBydW5Mb29wLm1fbWFpbkxvb3BzLmFwcGVuZChhZG9wdEdSZWYobmVzdGVkTWFp
bkxvb3ApKTsKLQotICAgIGdfbWFpbl9jb250ZXh0X3B1c2hfdGhyZWFkX2RlZmF1bHQobWFpbkNv
bnRleHQpOwotICAgIGdfbWFpbl9sb29wX3J1bihuZXN0ZWRNYWluTG9vcCk7Ci0gICAgZ19tYWlu
X2NvbnRleHRfcG9wX3RocmVhZF9kZWZhdWx0KG1haW5Db250ZXh0KTsKLQotICAgIHJ1bkxvb3Au
bV9tYWluTG9vcHMucmVtb3ZlTGFzdCgpOwotfQotCi12b2lkIFJ1bkxvb3A6OnN0b3AoKQotewot
ICAgIC8vIFRoZSBpbm5lcm1vc3QgbWFpbiBsb29wIHNob3VsZCBhbHdheXMgYmUgdGhlcmUuCi0g
ICAgQVNTRVJUKCFtX21haW5Mb29wcy5pc0VtcHR5KCkpOwotICAgIEdSZWZQdHI8R01haW5Mb29w
PiBsYXN0TWFpbkxvb3AgPSBtX21haW5Mb29wcy5sYXN0KCk7Ci0gICAgaWYgKGdfbWFpbl9sb29w
X2lzX3J1bm5pbmcobGFzdE1haW5Mb29wLmdldCgpKSkKLSAgICAgICAgZ19tYWluX2xvb3BfcXVp
dChsYXN0TWFpbkxvb3AuZ2V0KCkpOwotfQotCi12b2lkIFJ1bkxvb3A6Ondha2VVcCgpCi17Ci0g
ICAgUmVmUHRyPFJ1bkxvb3A+IHJ1bkxvb3AodGhpcyk7Ci0gICAgR01haW5Mb29wU291cmNlOjpz
Y2hlZHVsZUFuZERlbGV0ZU9uRGVzdHJveSgiW1dlYktpdF0gUnVuTG9vcCB3b3JrIiwgc3RkOjpm
dW5jdGlvbjx2b2lkKCk+KFtydW5Mb29wXSB7Ci0gICAgICAgIHJ1bkxvb3AtPnBlcmZvcm1Xb3Jr
KCk7Ci0gICAgfSksIEdfUFJJT1JJVFlfREVGQVVMVCwgbnVsbHB0ciwgbV9tYWluQ29udGV4dC5n
ZXQoKSk7Ci0gICAgZ19tYWluX2NvbnRleHRfd2FrZXVwKG1fbWFpbkNvbnRleHQuZ2V0KCkpOwot
fQotCi1SdW5Mb29wOjpUaW1lckJhc2U6OlRpbWVyQmFzZShSdW5Mb29wJiBydW5Mb29wKQotICAg
IDogbV9ydW5Mb29wKHJ1bkxvb3ApCi17Ci19Ci0KLVJ1bkxvb3A6OlRpbWVyQmFzZTo6flRpbWVy
QmFzZSgpCi17Ci0gICAgc3RvcCgpOwotfQotCi12b2lkIFJ1bkxvb3A6OlRpbWVyQmFzZTo6c3Rh
cnQoZG91YmxlIGZpcmVJbnRlcnZhbCwgYm9vbCByZXBlYXQpCi17Ci0gICAgbV90aW1lclNvdXJj
ZS5zY2hlZHVsZUFmdGVyRGVsYXkoIltXZWJLaXRdIFJ1bkxvb3A6OlRpbWVyIiwgc3RkOjpmdW5j
dGlvbjxib29sICgpPihbdGhpcywgcmVwZWF0XSB7IGZpcmVkKCk7IHJldHVybiByZXBlYXQ7IH0p
LAotICAgICAgICBzdGQ6OmNocm9ubzo6ZHVyYXRpb25fY2FzdDxzdGQ6OmNocm9ubzo6bWlsbGlz
ZWNvbmRzPihzdGQ6OmNocm9ubzo6ZHVyYXRpb248ZG91YmxlPihmaXJlSW50ZXJ2YWwpKSwgR19Q
UklPUklUWV9ERUZBVUxULCBudWxscHRyLCBtX3J1bkxvb3AubV9tYWluQ29udGV4dC5nZXQoKSk7
Ci19Ci0KLXZvaWQgUnVuTG9vcDo6VGltZXJCYXNlOjpzdG9wKCkKLXsKLSAgICBtX3RpbWVyU291
cmNlLmNhbmNlbCgpOwotfQotCi1ib29sIFJ1bkxvb3A6OlRpbWVyQmFzZTo6aXNBY3RpdmUoKSBj
b25zdAotewotICAgIHJldHVybiBtX3RpbWVyU291cmNlLmlzU2NoZWR1bGVkKCk7Ci19Ci0KLX0g
Ly8gbmFtZXNwYWNlIFdURgpkaWZmIC0tZ2l0IGEvU291cmNlL1dURi93dGYvZ3RrL1dvcmtRdWV1
ZUd0ay5jcHAgYi9Tb3VyY2UvV1RGL3d0Zi9ndGsvV29ya1F1ZXVlR3RrLmNwcApkZWxldGVkIGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggZWUxYjYwYmFmNWQwNjhiYTJjZWFkM2Q4MTE0OGZiNGEyYzdj
NDFiMi4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3Vy
Y2UvV1RGL3d0Zi9ndGsvV29ya1F1ZXVlR3RrLmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDEyOCAr
MCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDExIElnYWxpYSBTLkwuCi0gKiBDb3B5cmln
aHQgKEMpIDIwMTAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogUG9ydGlvbnMg
Q29weXJpZ2h0IChjKSAyMDEwIE1vdG9yb2xhIE1vYmlsaXR5LCBJbmMuICBBbGwgcmlnaHRzIHJl
c2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0g
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAot
ICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0g
KiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQ
Uk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICog
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiV29ya1F1
ZXVlLmgiCi0KLSNpbmNsdWRlIDxnaW8vZ2lvLmg+Ci0jaW5jbHVkZSA8c3RyaW5nLmg+Ci0KLW5h
bWVzcGFjZSBXVEYgewotCi1zdGF0aWMgY29uc3Qgc2l6ZV90IGtWaXN1YWxTdHVkaW9UaHJlYWRO
YW1lTGltaXQgPSAzMTsKLQotdm9pZCBXb3JrUXVldWU6OnBsYXRmb3JtSW5pdGlhbGl6ZShjb25z
dCBjaGFyKiBuYW1lLCBUeXBlLCBRT1MpCi17Ci0gICAgbV9ldmVudENvbnRleHQgPSBhZG9wdEdS
ZWYoZ19tYWluX2NvbnRleHRfbmV3KCkpOwotICAgIEFTU0VSVChtX2V2ZW50Q29udGV4dCk7Ci0g
ICAgbV9ldmVudExvb3AgPSBhZG9wdEdSZWYoZ19tYWluX2xvb3BfbmV3KG1fZXZlbnRDb250ZXh0
LmdldCgpLCBGQUxTRSkpOwotICAgIEFTU0VSVChtX2V2ZW50TG9vcCk7Ci0KLSAgICAvLyBUaGlz
IG5hbWUgY2FuIGJlIGNvbS5hcHBsZS5XZWJLaXQuUHJvY2Vzc0xhdW5jaGVyIG9yIGNvbS5hcHBs
ZS5Db3JlSVBDLlJlY2VpdmVRdWV1ZS4KLSAgICAvLyBXZSBhcmUgdXNpbmcgdGhvc2UgbmFtZXMg
Zm9yIHRoZSB0aHJlYWQgbmFtZSwgYnV0IGJvdGggYXJlIGxvbmdlciB0aGFuIDMxIGNoYXJhY3Rl
cnMsCi0gICAgLy8gd2hpY2ggaXMgdGhlIGxpbWl0IG9mIFZpc3VhbCBTdHVkaW8gZm9yIHRocmVh
ZCBuYW1lcy4KLSAgICAvLyBXaGVuIGxvZyBpcyBlbmFibGVkIGNyZWF0ZVRocmVhZCgpIHdpbGwg
YXNzZXJ0IGluc3RlYWQgb2YgdHJ1bmNhdGUgdGhlIG5hbWUsIHNvIHdlIG5lZWQKLSAgICAvLyB0
byBtYWtlIHN1cmUgd2UgZG9uJ3QgdXNlIGEgbmFtZSBsb25nZXIgdGhhbiAzMSBjaGFyYWN0ZXJz
LgotICAgIGNvbnN0IGNoYXIqIHRocmVhZE5hbWUgPSBnX3N0cnJzdHIobmFtZSwgIi4iKTsKLSAg
ICBpZiAodGhyZWFkTmFtZSkKLSAgICAgICAgdGhyZWFkTmFtZSsrOwotICAgIGVsc2UKLSAgICAg
ICAgdGhyZWFkTmFtZSA9IG5hbWU7Ci0gICAgaWYgKHN0cmxlbih0aHJlYWROYW1lKSA+IGtWaXN1
YWxTdHVkaW9UaHJlYWROYW1lTGltaXQpCi0gICAgICAgIHRocmVhZE5hbWUgKz0gc3RybGVuKHRo
cmVhZE5hbWUpIC0ga1Zpc3VhbFN0dWRpb1RocmVhZE5hbWVMaW1pdDsKLQotICAgIEdSZWZQdHI8
R01haW5Mb29wPiBldmVudExvb3AobV9ldmVudExvb3AuZ2V0KCkpOwotICAgIG1fd29ya1F1ZXVl
VGhyZWFkID0gY3JlYXRlVGhyZWFkKHRocmVhZE5hbWUsIFtldmVudExvb3BdIHsKLSAgICAgICAg
Z19tYWluX2NvbnRleHRfcHVzaF90aHJlYWRfZGVmYXVsdChnX21haW5fbG9vcF9nZXRfY29udGV4
dChldmVudExvb3AuZ2V0KCkpKTsKLSAgICAgICAgZ19tYWluX2xvb3BfcnVuKGV2ZW50TG9vcC5n
ZXQoKSk7Ci0gICAgfSk7Ci19Ci0KLXZvaWQgV29ya1F1ZXVlOjpwbGF0Zm9ybUludmFsaWRhdGUo
KQotewotICAgIGlmIChtX3dvcmtRdWV1ZVRocmVhZCkgewotICAgICAgICBkZXRhY2hUaHJlYWQo
bV93b3JrUXVldWVUaHJlYWQpOwotICAgICAgICBtX3dvcmtRdWV1ZVRocmVhZCA9IDA7Ci0gICAg
fQotCi0gICAgaWYgKG1fZXZlbnRMb29wKSB7Ci0gICAgICAgIGlmIChnX21haW5fbG9vcF9pc19y
dW5uaW5nKG1fZXZlbnRMb29wLmdldCgpKSkKLSAgICAgICAgICAgIGdfbWFpbl9sb29wX3F1aXQo
bV9ldmVudExvb3AuZ2V0KCkpOwotICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgIC8vIFRoZSB0
aHJlYWQgaGFzbid0IHN0YXJ0ZWQgeWV0LCBzbyBzY2hlZHVsZSBhIG1haW4gbG9vcCBxdWl0IHRv
IGVuc3VyZSB0aGUgdGhyZWFkIGZpbmlzaGVzLgotICAgICAgICAgICAgR01haW5Mb29wKiBldmVu
dExvb3AgPSBtX2V2ZW50TG9vcC5nZXQoKTsKLSAgICAgICAgICAgIEdNYWluTG9vcFNvdXJjZTo6
c2NoZWR1bGVBbmREZWxldGVPbkRlc3Ryb3koIltXZWJLaXRdIFdvcmtRdWV1ZSBxdWl0IG1haW4g
bG9vcCIsIFtldmVudExvb3BdIHsgZ19tYWluX2xvb3BfcXVpdChldmVudExvb3ApOyB9LAotICAg
ICAgICAgICAgICAgIEdfUFJJT1JJVFlfSElHSCwgbnVsbHB0ciwgbV9ldmVudENvbnRleHQuZ2V0
KCkpOwotICAgICAgICB9Ci0gICAgICAgIG1fZXZlbnRMb29wID0gbnVsbHB0cjsKLSAgICB9Ci0K
LSAgICBtX2V2ZW50Q29udGV4dCA9IG51bGxwdHI7Ci19Ci0KLXZvaWQgV29ya1F1ZXVlOjpyZWdp
c3RlclNvY2tldEV2ZW50SGFuZGxlcihpbnQgZmlsZURlc2NyaXB0b3IsIHN0ZDo6ZnVuY3Rpb248
dm9pZCAoKT4gZnVuY3Rpb24sIHN0ZDo6ZnVuY3Rpb248dm9pZCAoKT4gY2xvc2VGdW5jdGlvbikK
LXsKLSAgICBHUmVmUHRyPEdTb2NrZXQ+IHNvY2tldCA9IGFkb3B0R1JlZihnX3NvY2tldF9uZXdf
ZnJvbV9mZChmaWxlRGVzY3JpcHRvciwgMCkpOwotICAgIHJlZigpOwotICAgIG1fc29ja2V0RXZl
bnRTb3VyY2Uuc2NoZWR1bGUoIltXZWJLaXRdIFdvcmtRdWV1ZTo6U29ja2V0RXZlbnRIYW5kbGVy
IiwgW2Z1bmN0aW9uLCBjbG9zZUZ1bmN0aW9uXShHSU9Db25kaXRpb24gY29uZGl0aW9uKSB7Ci0g
ICAgICAgICAgICBpZiAoY29uZGl0aW9uICYgR19JT19IVVAgfHwgY29uZGl0aW9uICYgR19JT19F
UlIgfHwgY29uZGl0aW9uICYgR19JT19OVkFMKSB7Ci0gICAgICAgICAgICAgICAgY2xvc2VGdW5j
dGlvbigpOwotICAgICAgICAgICAgICAgIHJldHVybiBHTWFpbkxvb3BTb3VyY2U6OlN0b3A7Ci0g
ICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGlmIChjb25kaXRpb24gJiBHX0lPX0lOKSB7Ci0g
ICAgICAgICAgICAgICAgZnVuY3Rpb24oKTsKLSAgICAgICAgICAgICAgICByZXR1cm4gR01haW5M
b29wU291cmNlOjpDb250aW51ZTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgQVNTRVJU
X05PVF9SRUFDSEVEKCk7Ci0gICAgICAgICAgICByZXR1cm4gR01haW5Mb29wU291cmNlOjpTdG9w
OwotICAgICAgICB9LCBzb2NrZXQuZ2V0KCksIEdfSU9fSU4sCi0gICAgICAgIFt0aGlzXSB7IGRl
cmVmKCk7IH0sCi0gICAgICAgIG1fZXZlbnRDb250ZXh0LmdldCgpKTsKLX0KLQotdm9pZCBXb3Jr
UXVldWU6OnVucmVnaXN0ZXJTb2NrZXRFdmVudEhhbmRsZXIoaW50KQotewotICAgIG1fc29ja2V0
RXZlbnRTb3VyY2UuY2FuY2VsKCk7Ci19Ci0KLXZvaWQgV29ya1F1ZXVlOjpkaXNwYXRjaChzdGQ6
OmZ1bmN0aW9uPHZvaWQgKCk+IGZ1bmN0aW9uKQotewotICAgIHJlZigpOwotICAgIEdNYWluTG9v
cFNvdXJjZTo6c2NoZWR1bGVBbmREZWxldGVPbkRlc3Ryb3koIltXZWJLaXRdIFdvcmtRdWV1ZTo6
ZGlzcGF0Y2giLCBXVEY6Om1vdmUoZnVuY3Rpb24pLCBHX1BSSU9SSVRZX0RFRkFVTFQsCi0gICAg
ICAgIFt0aGlzXSB7IGRlcmVmKCk7IH0sIG1fZXZlbnRDb250ZXh0LmdldCgpKTsKLX0KLQotdm9p
ZCBXb3JrUXVldWU6OmRpc3BhdGNoQWZ0ZXIoc3RkOjpjaHJvbm86Om5hbm9zZWNvbmRzIGR1cmF0
aW9uLCBzdGQ6OmZ1bmN0aW9uPHZvaWQgKCk+IGZ1bmN0aW9uKQotewotICAgIHJlZigpOwotICAg
IEdNYWluTG9vcFNvdXJjZTo6c2NoZWR1bGVBZnRlckRlbGF5QW5kRGVsZXRlT25EZXN0cm95KCJb
V2ViS2l0XSBXb3JrUXVldWU6OmRpc3BhdGNoQWZ0ZXIiLCBXVEY6Om1vdmUoZnVuY3Rpb24pLAot
ICAgICAgICBzdGQ6OmNocm9ubzo6ZHVyYXRpb25fY2FzdDxzdGQ6OmNocm9ubzo6bWlsbGlzZWNv
bmRzPihkdXJhdGlvbiksIEdfUFJJT1JJVFlfREVGQVVMVCwgW3RoaXNdIHsgZGVyZWYoKTsgfSwg
bV9ldmVudENvbnRleHQuZ2V0KCkpOwotfQotCi19Cg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>253308</attachid>
            <date>2015-05-18 00:45:44 -0700</date>
            <delta_ts>2015-05-20 22:55:29 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-145117-20150518004947.patch</filename>
            <type>text/plain</type>
            <size>35992</size>
            <attacher name="Zan Dobersek">zan</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTg0NDQxCmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL0NoYW5n
ZUxvZyBiL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCmluZGV4IDM1NTI2MjcyNjUzNzk4NGRhM2JmMWM5
NTY4YjM2ZDZmZWNlMzYwMmQuLmQ2Yjc1MmM0ZjA4NDgxZWExMzBkOTUwYWVmNzIxNWE2MzQ4YmM5
ODkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XVEYvQ2hh
bmdlTG9nCkBAIC0xLDMgKzEsNDEgQEAKKzIwMTUtMDUtMTggIFphbiBEb2JlcnNlayAgPHpkb2Jl
cnNla0BpZ2FsaWEuY29tPgorCisgICAgICAgIFtHVEtdIE1vdmUgTWFpblRocmVhZEd0aywgUnVu
TG9vcEd0aywgV29ya1F1ZXVlR3RrIHVuZGVyIFNvdXJjZS9XVEYvd3RmL2dsaWIvCisgICAgICAg
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNDUxMTcKKworICAgICAg
ICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBNb3ZlIHRoZSBNYWluVGhy
ZWFkR3RrLCBSdW5Mb29wR3RrIGFuZCBXb3JrUXVldWVHdGsgaW1wbGVtZW50YXRpb24gZmlsZXMg
ZnJvbQorICAgICAgICBTb3VyY2UvV1RGL3d0Zi9ndGsvIHRvIFNvdXJjZS9XVEYvd3RmL2dsaWIv
LiBUaGVzZSBpbXBsZW1lbnRhdGlvbnMgYXJlIG5vdAorICAgICAgICBHVEstc3BlY2lmaWMgYW5k
IG9ubHkgZGVwZW5kIG9uIEdMaWIsIHNvIHRoZXkgYXJlIHJlbmFtZWQgYXMgd2VsbC4KKworICAg
ICAgICBUaGVyZSBhcmUgb3RoZXIgc3VjaCBpbXBsZW1lbnRhdGlvbnMgdW5kZXIgU291cmNlL1dU
Ri93dGYvZ29iamVjdC8gKEdPYmplY3QKKyAgICAgICAgaXMganVzdCBhIHN1YnNldCBvZiBHTGli
KSB0aGF0IHdpbGwgYmUgbW92ZWQgdW5kZXIgdGhlIG5ldyBkaXJlY3RvcnkgaW4KKyAgICAgICAg
ZnV0dXJlIHBhdGNoZXMuCisKKyAgICAgICAgKiB3dGYvUGxhdGZvcm1HVEsuY21ha2U6CisgICAg
ICAgICogd3RmL2dsaWIvTWFpblRocmVhZEdMaWIuY3BwOiBSZW5hbWVkIGZyb20gU291cmNlL1dU
Ri93dGYvZ3RrL01haW5UaHJlYWRHdGsuY3BwLgorICAgICAgICAoV1RGOjppbml0aWFsaXplTWFp
blRocmVhZFBsYXRmb3JtKToKKyAgICAgICAgKFdURjo6c2NoZWR1bGVEaXNwYXRjaEZ1bmN0aW9u
c09uTWFpblRocmVhZCk6CisgICAgICAgICogd3RmL2dsaWIvUnVuTG9vcEdMaWIuY3BwOiBSZW5h
bWVkIGZyb20gU291cmNlL1dURi93dGYvZ3RrL1J1bkxvb3BHdGsuY3BwLgorICAgICAgICAoV1RG
OjpSdW5Mb29wOjpSdW5Mb29wKToKKyAgICAgICAgKFdURjo6UnVuTG9vcDo6flJ1bkxvb3ApOgor
ICAgICAgICAoV1RGOjpSdW5Mb29wOjpydW4pOgorICAgICAgICAoV1RGOjpSdW5Mb29wOjpzdG9w
KToKKyAgICAgICAgKFdURjo6UnVuTG9vcDo6d2FrZVVwKToKKyAgICAgICAgKFdURjo6UnVuTG9v
cDo6VGltZXJCYXNlOjpUaW1lckJhc2UpOgorICAgICAgICAoV1RGOjpSdW5Mb29wOjpUaW1lckJh
c2U6On5UaW1lckJhc2UpOgorICAgICAgICAoV1RGOjpSdW5Mb29wOjpUaW1lckJhc2U6OnN0YXJ0
KToKKyAgICAgICAgKFdURjo6UnVuTG9vcDo6VGltZXJCYXNlOjpzdG9wKToKKyAgICAgICAgKFdU
Rjo6UnVuTG9vcDo6VGltZXJCYXNlOjppc0FjdGl2ZSk6CisgICAgICAgICogd3RmL2dsaWIvV29y
a1F1ZXVlR0xpYi5jcHA6IFJlbmFtZWQgZnJvbSBTb3VyY2UvV1RGL3d0Zi9ndGsvV29ya1F1ZXVl
R3RrLmNwcC4KKyAgICAgICAgKFdURjo6V29ya1F1ZXVlOjpwbGF0Zm9ybUluaXRpYWxpemUpOgor
ICAgICAgICAoV1RGOjpXb3JrUXVldWU6OnBsYXRmb3JtSW52YWxpZGF0ZSk6CisgICAgICAgIChX
VEY6OldvcmtRdWV1ZTo6cmVnaXN0ZXJTb2NrZXRFdmVudEhhbmRsZXIpOgorICAgICAgICAoV1RG
OjpXb3JrUXVldWU6OnVucmVnaXN0ZXJTb2NrZXRFdmVudEhhbmRsZXIpOgorICAgICAgICAoV1RG
OjpXb3JrUXVldWU6OmRpc3BhdGNoKToKKyAgICAgICAgKFdURjo6V29ya1F1ZXVlOjpkaXNwYXRj
aEFmdGVyKToKKwogMjAxNS0wNS0xNSAgRGFuIEJlcm5zdGVpbiAgPG1pdHpAYXBwbGUuY29tPgog
CiAgICAgICAgIEJ1aWxkIGZpeCBmb3Igc29tZSB2ZXJzaW9ucyBvZiBjbGFuZy4KZGlmZiAtLWdp
dCBhL1NvdXJjZS9XVEYvd3RmL1BsYXRmb3JtR1RLLmNtYWtlIGIvU291cmNlL1dURi93dGYvUGxh
dGZvcm1HVEsuY21ha2UKaW5kZXggZWJhZmVmNTg2YTNlNmExNWY0ZmZhOGM3NzVlMDQ2MzRhZWQx
MDIxMC4uZTNlZGEwZjUwYzE3MTgyNzk2M2I5OTQxMzYyZjk3OTMxNDNhYjc0NCAxMDA2NDQKLS0t
IGEvU291cmNlL1dURi93dGYvUGxhdGZvcm1HVEsuY21ha2UKKysrIGIvU291cmNlL1dURi93dGYv
UGxhdGZvcm1HVEsuY21ha2UKQEAgLTIsMTQgKzIsMTQgQEAgc2V0KFdURl9MSUJSQVJZX1RZUEUg
U1RBVElDKQogc2V0KFdURl9PVVRQVVRfTkFNRSBXVEZHVEspCiAKIGxpc3QoQVBQRU5EIFdURl9T
T1VSQ0VTCisgICAgZ2xpYi9NYWluVGhyZWFkR0xpYi5jcHAKKyAgICBnbGliL1J1bkxvb3BHTGli
LmNwcAorICAgIGdsaWIvV29ya1F1ZXVlR0xpYi5jcHAKKwogICAgIGdvYmplY3QvR01haW5Mb29w
U291cmNlLmNwcAogICAgIGdvYmplY3QvR1JlZlB0ci5jcHAKICAgICBnb2JqZWN0L0dUaHJlYWRT
YWZlTWFpbkxvb3BTb3VyY2UuY3BwCiAgICAgZ29iamVjdC9HbGliVXRpbGl0aWVzLmNwcAotCi0g
ICAgZ3RrL01haW5UaHJlYWRHdGsuY3BwCi0gICAgZ3RrL1J1bkxvb3BHdGsuY3BwCi0gICAgZ3Rr
L1dvcmtRdWV1ZUd0ay5jcHAKICkKIAogbGlzdChBUFBFTkQgV1RGX0xJQlJBUklFUwpkaWZmIC0t
Z2l0IGEvU291cmNlL1dURi93dGYvZ2xpYi9NYWluVGhyZWFkR0xpYi5jcHAgYi9Tb3VyY2UvV1RG
L3d0Zi9nbGliL01haW5UaHJlYWRHTGliLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi41OTgxMjlhZjhkYzIyNDdk
ZTYyYjIyNDU2M2EwMmQ1MjgyMzM1ZTc5Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dURi93
dGYvZ2xpYi9NYWluVGhyZWFkR0xpYi5jcHAKQEAgLTAsMCArMSw0NiBAQAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAwNywgMjAwOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBD
b3B5cmlnaHQgKEMpIDIwMDcgSnVzdGluIEhheWdvb2QgKGpoYXlnb29kQHJlYWt0aXguY29tKQor
ICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICoKKyAqIDEuICBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAq
ICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgorICogMy4gIE5laXRoZXIgdGhlIG5hbWUgb2YgQXBwbGUgSW5jLiAo
IkFwcGxlIikgbm9yIHRoZSBuYW1lcyBvZgorICogICAgIGl0cyBjb250cmlidXRvcnMgbWF5IGJl
IHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQKKyAqICAgICBmcm9t
IHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24u
CisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRS
SUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9T
RSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05U
UklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVT
SU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKKyAqIE9OIEFOWSBUSEVPUlkg
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKKyAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNv
bmZpZy5oIgorI2luY2x1ZGUgIk1haW5UaHJlYWQuaCIKKworI2luY2x1ZGUgPHd0Zi9nb2JqZWN0
L0dNYWluTG9vcFNvdXJjZS5oPgorCituYW1lc3BhY2UgV1RGIHsKKwordm9pZCBpbml0aWFsaXpl
TWFpblRocmVhZFBsYXRmb3JtKCkKK3sKK30KKwordm9pZCBzY2hlZHVsZURpc3BhdGNoRnVuY3Rp
b25zT25NYWluVGhyZWFkKCkKK3sKKyAgICBHTWFpbkxvb3BTb3VyY2U6OnNjaGVkdWxlQW5kRGVs
ZXRlT25EZXN0cm95KCJbV2ViS2l0XSBkaXNwYXRjaEZ1bmN0aW9uc0Zyb21NYWluVGhyZWFkIiwg
c3RkOjpmdW5jdGlvbjx2b2lkKCk+KGRpc3BhdGNoRnVuY3Rpb25zRnJvbU1haW5UaHJlYWQpKTsK
K30KKworfSAvLyBuYW1lc3BhY2UgV1RGCmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi9nbGli
L1J1bkxvb3BHTGliLmNwcCBiL1NvdXJjZS9XVEYvd3RmL2dsaWIvUnVuTG9vcEdMaWIuY3BwCm5l
dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAuLjdkYzQwNzU2NjA4MmEyMzhiYWY5NjEwODc2MmVlYzI0MmY2ZWI5OGIKLS0tIC9k
ZXYvbnVsbAorKysgYi9Tb3VyY2UvV1RGL3d0Zi9nbGliL1J1bkxvb3BHTGliLmNwcApAQCAtMCww
ICsxLDEyNyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMCBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKiBQb3J0aW9ucyBDb3B5cmlnaHQgKGMpIDIwMTAgTW90b3JvbGEgTW9i
aWxpdHksIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBg
QVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklC
VVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5F
U1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJj
b25maWcuaCIKKyNpbmNsdWRlICJSdW5Mb29wLmgiCisKKyNpbmNsdWRlIDxnbGliLmg+CisjaW5j
bHVkZSA8d3RmL01haW5UaHJlYWQuaD4KKworbmFtZXNwYWNlIFdURiB7CisKK1J1bkxvb3A6OlJ1
bkxvb3AoKQoreworICAgIG1fbWFpbkNvbnRleHQgPSBnX21haW5fY29udGV4dF9nZXRfdGhyZWFk
X2RlZmF1bHQoKTsKKyAgICBpZiAoIW1fbWFpbkNvbnRleHQpCisgICAgICAgIG1fbWFpbkNvbnRl
eHQgPSBpc01haW5UaHJlYWQoKSA/IGdfbWFpbl9jb250ZXh0X2RlZmF1bHQoKSA6IGFkb3B0R1Jl
ZihnX21haW5fY29udGV4dF9uZXcoKSk7CisgICAgQVNTRVJUKG1fbWFpbkNvbnRleHQpOworCisg
ICAgR1JlZlB0cjxHTWFpbkxvb3A+IGlubmVybW9zdExvb3AgPSBhZG9wdEdSZWYoZ19tYWluX2xv
b3BfbmV3KG1fbWFpbkNvbnRleHQuZ2V0KCksIEZBTFNFKSk7CisgICAgQVNTRVJUKGlubmVybW9z
dExvb3ApOworICAgIG1fbWFpbkxvb3BzLmFwcGVuZChpbm5lcm1vc3RMb29wKTsKK30KKworUnVu
TG9vcDo6flJ1bkxvb3AoKQoreworICAgIGZvciAoaW50IGkgPSBtX21haW5Mb29wcy5zaXplKCkg
LSAxOyBpID49IDA7IC0taSkgeworICAgICAgICBpZiAoIWdfbWFpbl9sb29wX2lzX3J1bm5pbmco
bV9tYWluTG9vcHNbaV0uZ2V0KCkpKQorICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIGdf
bWFpbl9sb29wX3F1aXQobV9tYWluTG9vcHNbaV0uZ2V0KCkpOworICAgIH0KK30KKwordm9pZCBS
dW5Mb29wOjpydW4oKQoreworICAgIFJ1bkxvb3AmIHJ1bkxvb3AgPSBSdW5Mb29wOjpjdXJyZW50
KCk7CisgICAgR01haW5Db250ZXh0KiBtYWluQ29udGV4dCA9IHJ1bkxvb3AubV9tYWluQ29udGV4
dC5nZXQoKTsKKworICAgIC8vIFRoZSBpbm5lcm1vc3QgbWFpbiBsb29wIHNob3VsZCBhbHdheXMg
YmUgdGhlcmUuCisgICAgQVNTRVJUKCFydW5Mb29wLm1fbWFpbkxvb3BzLmlzRW1wdHkoKSk7CisK
KyAgICBHTWFpbkxvb3AqIGlubmVybW9zdExvb3AgPSBydW5Mb29wLm1fbWFpbkxvb3BzWzBdLmdl
dCgpOworICAgIGlmICghZ19tYWluX2xvb3BfaXNfcnVubmluZyhpbm5lcm1vc3RMb29wKSkgewor
ICAgICAgICBnX21haW5fY29udGV4dF9wdXNoX3RocmVhZF9kZWZhdWx0KG1haW5Db250ZXh0KTsK
KyAgICAgICAgZ19tYWluX2xvb3BfcnVuKGlubmVybW9zdExvb3ApOworICAgICAgICBnX21haW5f
Y29udGV4dF9wb3BfdGhyZWFkX2RlZmF1bHQobWFpbkNvbnRleHQpOworICAgICAgICByZXR1cm47
CisgICAgfQorCisgICAgLy8gQ3JlYXRlIGFuZCBydW4gYSBuZXN0ZWQgbG9vcCBpZiB0aGUgaW5u
ZXJtb3N0IG9uZSB3YXMgYWxyZWFkeSBydW5uaW5nLgorICAgIEdNYWluTG9vcCogbmVzdGVkTWFp
bkxvb3AgPSBnX21haW5fbG9vcF9uZXcobWFpbkNvbnRleHQsIEZBTFNFKTsKKyAgICBydW5Mb29w
Lm1fbWFpbkxvb3BzLmFwcGVuZChhZG9wdEdSZWYobmVzdGVkTWFpbkxvb3ApKTsKKworICAgIGdf
bWFpbl9jb250ZXh0X3B1c2hfdGhyZWFkX2RlZmF1bHQobWFpbkNvbnRleHQpOworICAgIGdfbWFp
bl9sb29wX3J1bihuZXN0ZWRNYWluTG9vcCk7CisgICAgZ19tYWluX2NvbnRleHRfcG9wX3RocmVh
ZF9kZWZhdWx0KG1haW5Db250ZXh0KTsKKworICAgIHJ1bkxvb3AubV9tYWluTG9vcHMucmVtb3Zl
TGFzdCgpOworfQorCit2b2lkIFJ1bkxvb3A6OnN0b3AoKQoreworICAgIC8vIFRoZSBpbm5lcm1v
c3QgbWFpbiBsb29wIHNob3VsZCBhbHdheXMgYmUgdGhlcmUuCisgICAgQVNTRVJUKCFtX21haW5M
b29wcy5pc0VtcHR5KCkpOworICAgIEdSZWZQdHI8R01haW5Mb29wPiBsYXN0TWFpbkxvb3AgPSBt
X21haW5Mb29wcy5sYXN0KCk7CisgICAgaWYgKGdfbWFpbl9sb29wX2lzX3J1bm5pbmcobGFzdE1h
aW5Mb29wLmdldCgpKSkKKyAgICAgICAgZ19tYWluX2xvb3BfcXVpdChsYXN0TWFpbkxvb3AuZ2V0
KCkpOworfQorCit2b2lkIFJ1bkxvb3A6Ondha2VVcCgpCit7CisgICAgUmVmUHRyPFJ1bkxvb3A+
IHJ1bkxvb3AodGhpcyk7CisgICAgR01haW5Mb29wU291cmNlOjpzY2hlZHVsZUFuZERlbGV0ZU9u
RGVzdHJveSgiW1dlYktpdF0gUnVuTG9vcCB3b3JrIiwgc3RkOjpmdW5jdGlvbjx2b2lkKCk+KFty
dW5Mb29wXSB7CisgICAgICAgIHJ1bkxvb3AtPnBlcmZvcm1Xb3JrKCk7CisgICAgfSksIEdfUFJJ
T1JJVFlfREVGQVVMVCwgbnVsbHB0ciwgbV9tYWluQ29udGV4dC5nZXQoKSk7CisgICAgZ19tYWlu
X2NvbnRleHRfd2FrZXVwKG1fbWFpbkNvbnRleHQuZ2V0KCkpOworfQorCitSdW5Mb29wOjpUaW1l
ckJhc2U6OlRpbWVyQmFzZShSdW5Mb29wJiBydW5Mb29wKQorICAgIDogbV9ydW5Mb29wKHJ1bkxv
b3ApCit7Cit9CisKK1J1bkxvb3A6OlRpbWVyQmFzZTo6flRpbWVyQmFzZSgpCit7CisgICAgc3Rv
cCgpOworfQorCit2b2lkIFJ1bkxvb3A6OlRpbWVyQmFzZTo6c3RhcnQoZG91YmxlIGZpcmVJbnRl
cnZhbCwgYm9vbCByZXBlYXQpCit7CisgICAgbV90aW1lclNvdXJjZS5zY2hlZHVsZUFmdGVyRGVs
YXkoIltXZWJLaXRdIFJ1bkxvb3A6OlRpbWVyIiwgc3RkOjpmdW5jdGlvbjxib29sICgpPihbdGhp
cywgcmVwZWF0XSB7IGZpcmVkKCk7IHJldHVybiByZXBlYXQ7IH0pLAorICAgICAgICBzdGQ6OmNo
cm9ubzo6ZHVyYXRpb25fY2FzdDxzdGQ6OmNocm9ubzo6bWlsbGlzZWNvbmRzPihzdGQ6OmNocm9u
bzo6ZHVyYXRpb248ZG91YmxlPihmaXJlSW50ZXJ2YWwpKSwgR19QUklPUklUWV9ERUZBVUxULCBu
dWxscHRyLCBtX3J1bkxvb3AubV9tYWluQ29udGV4dC5nZXQoKSk7Cit9CisKK3ZvaWQgUnVuTG9v
cDo6VGltZXJCYXNlOjpzdG9wKCkKK3sKKyAgICBtX3RpbWVyU291cmNlLmNhbmNlbCgpOworfQor
Citib29sIFJ1bkxvb3A6OlRpbWVyQmFzZTo6aXNBY3RpdmUoKSBjb25zdAoreworICAgIHJldHVy
biBtX3RpbWVyU291cmNlLmlzU2NoZWR1bGVkKCk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdURgpk
aWZmIC0tZ2l0IGEvU291cmNlL1dURi93dGYvZ2xpYi9Xb3JrUXVldWVHTGliLmNwcCBiL1NvdXJj
ZS9XVEYvd3RmL2dsaWIvV29ya1F1ZXVlR0xpYi5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZWUxYjYwYmFmNWQw
NjhiYTJjZWFkM2Q4MTE0OGZiNGEyYzdjNDFiMgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9X
VEYvd3RmL2dsaWIvV29ya1F1ZXVlR0xpYi5jcHAKQEAgLTAsMCArMSwxMjggQEAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTEgSWdhbGlhIFMuTC4KKyAqIENvcHlyaWdodCAoQykgMjAxMCBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBQb3J0aW9ucyBDb3B5cmlnaHQgKGMpIDIw
MTAgTW90b3JvbGEgTW9iaWxpdHksIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
CisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMg
Q09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
CisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisg
KiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJP
RklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQor
ICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICov
CisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJXb3JrUXVldWUuaCIKKworI2luY2x1
ZGUgPGdpby9naW8uaD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKworbmFtZXNwYWNlIFdURiB7CisK
K3N0YXRpYyBjb25zdCBzaXplX3Qga1Zpc3VhbFN0dWRpb1RocmVhZE5hbWVMaW1pdCA9IDMxOwor
Cit2b2lkIFdvcmtRdWV1ZTo6cGxhdGZvcm1Jbml0aWFsaXplKGNvbnN0IGNoYXIqIG5hbWUsIFR5
cGUsIFFPUykKK3sKKyAgICBtX2V2ZW50Q29udGV4dCA9IGFkb3B0R1JlZihnX21haW5fY29udGV4
dF9uZXcoKSk7CisgICAgQVNTRVJUKG1fZXZlbnRDb250ZXh0KTsKKyAgICBtX2V2ZW50TG9vcCA9
IGFkb3B0R1JlZihnX21haW5fbG9vcF9uZXcobV9ldmVudENvbnRleHQuZ2V0KCksIEZBTFNFKSk7
CisgICAgQVNTRVJUKG1fZXZlbnRMb29wKTsKKworICAgIC8vIFRoaXMgbmFtZSBjYW4gYmUgY29t
LmFwcGxlLldlYktpdC5Qcm9jZXNzTGF1bmNoZXIgb3IgY29tLmFwcGxlLkNvcmVJUEMuUmVjZWl2
ZVF1ZXVlLgorICAgIC8vIFdlIGFyZSB1c2luZyB0aG9zZSBuYW1lcyBmb3IgdGhlIHRocmVhZCBu
YW1lLCBidXQgYm90aCBhcmUgbG9uZ2VyIHRoYW4gMzEgY2hhcmFjdGVycywKKyAgICAvLyB3aGlj
aCBpcyB0aGUgbGltaXQgb2YgVmlzdWFsIFN0dWRpbyBmb3IgdGhyZWFkIG5hbWVzLgorICAgIC8v
IFdoZW4gbG9nIGlzIGVuYWJsZWQgY3JlYXRlVGhyZWFkKCkgd2lsbCBhc3NlcnQgaW5zdGVhZCBv
ZiB0cnVuY2F0ZSB0aGUgbmFtZSwgc28gd2UgbmVlZAorICAgIC8vIHRvIG1ha2Ugc3VyZSB3ZSBk
b24ndCB1c2UgYSBuYW1lIGxvbmdlciB0aGFuIDMxIGNoYXJhY3RlcnMuCisgICAgY29uc3QgY2hh
ciogdGhyZWFkTmFtZSA9IGdfc3RycnN0cihuYW1lLCAiLiIpOworICAgIGlmICh0aHJlYWROYW1l
KQorICAgICAgICB0aHJlYWROYW1lKys7CisgICAgZWxzZQorICAgICAgICB0aHJlYWROYW1lID0g
bmFtZTsKKyAgICBpZiAoc3RybGVuKHRocmVhZE5hbWUpID4ga1Zpc3VhbFN0dWRpb1RocmVhZE5h
bWVMaW1pdCkKKyAgICAgICAgdGhyZWFkTmFtZSArPSBzdHJsZW4odGhyZWFkTmFtZSkgLSBrVmlz
dWFsU3R1ZGlvVGhyZWFkTmFtZUxpbWl0OworCisgICAgR1JlZlB0cjxHTWFpbkxvb3A+IGV2ZW50
TG9vcChtX2V2ZW50TG9vcC5nZXQoKSk7CisgICAgbV93b3JrUXVldWVUaHJlYWQgPSBjcmVhdGVU
aHJlYWQodGhyZWFkTmFtZSwgW2V2ZW50TG9vcF0geworICAgICAgICBnX21haW5fY29udGV4dF9w
dXNoX3RocmVhZF9kZWZhdWx0KGdfbWFpbl9sb29wX2dldF9jb250ZXh0KGV2ZW50TG9vcC5nZXQo
KSkpOworICAgICAgICBnX21haW5fbG9vcF9ydW4oZXZlbnRMb29wLmdldCgpKTsKKyAgICB9KTsK
K30KKwordm9pZCBXb3JrUXVldWU6OnBsYXRmb3JtSW52YWxpZGF0ZSgpCit7CisgICAgaWYgKG1f
d29ya1F1ZXVlVGhyZWFkKSB7CisgICAgICAgIGRldGFjaFRocmVhZChtX3dvcmtRdWV1ZVRocmVh
ZCk7CisgICAgICAgIG1fd29ya1F1ZXVlVGhyZWFkID0gMDsKKyAgICB9CisKKyAgICBpZiAobV9l
dmVudExvb3ApIHsKKyAgICAgICAgaWYgKGdfbWFpbl9sb29wX2lzX3J1bm5pbmcobV9ldmVudExv
b3AuZ2V0KCkpKQorICAgICAgICAgICAgZ19tYWluX2xvb3BfcXVpdChtX2V2ZW50TG9vcC5nZXQo
KSk7CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgLy8gVGhlIHRocmVhZCBoYXNuJ3Qgc3Rh
cnRlZCB5ZXQsIHNvIHNjaGVkdWxlIGEgbWFpbiBsb29wIHF1aXQgdG8gZW5zdXJlIHRoZSB0aHJl
YWQgZmluaXNoZXMuCisgICAgICAgICAgICBHTWFpbkxvb3AqIGV2ZW50TG9vcCA9IG1fZXZlbnRM
b29wLmdldCgpOworICAgICAgICAgICAgR01haW5Mb29wU291cmNlOjpzY2hlZHVsZUFuZERlbGV0
ZU9uRGVzdHJveSgiW1dlYktpdF0gV29ya1F1ZXVlIHF1aXQgbWFpbiBsb29wIiwgW2V2ZW50TG9v
cF0geyBnX21haW5fbG9vcF9xdWl0KGV2ZW50TG9vcCk7IH0sCisgICAgICAgICAgICAgICAgR19Q
UklPUklUWV9ISUdILCBudWxscHRyLCBtX2V2ZW50Q29udGV4dC5nZXQoKSk7CisgICAgICAgIH0K
KyAgICAgICAgbV9ldmVudExvb3AgPSBudWxscHRyOworICAgIH0KKworICAgIG1fZXZlbnRDb250
ZXh0ID0gbnVsbHB0cjsKK30KKwordm9pZCBXb3JrUXVldWU6OnJlZ2lzdGVyU29ja2V0RXZlbnRI
YW5kbGVyKGludCBmaWxlRGVzY3JpcHRvciwgc3RkOjpmdW5jdGlvbjx2b2lkICgpPiBmdW5jdGlv
biwgc3RkOjpmdW5jdGlvbjx2b2lkICgpPiBjbG9zZUZ1bmN0aW9uKQoreworICAgIEdSZWZQdHI8
R1NvY2tldD4gc29ja2V0ID0gYWRvcHRHUmVmKGdfc29ja2V0X25ld19mcm9tX2ZkKGZpbGVEZXNj
cmlwdG9yLCAwKSk7CisgICAgcmVmKCk7CisgICAgbV9zb2NrZXRFdmVudFNvdXJjZS5zY2hlZHVs
ZSgiW1dlYktpdF0gV29ya1F1ZXVlOjpTb2NrZXRFdmVudEhhbmRsZXIiLCBbZnVuY3Rpb24sIGNs
b3NlRnVuY3Rpb25dKEdJT0NvbmRpdGlvbiBjb25kaXRpb24pIHsKKyAgICAgICAgICAgIGlmIChj
b25kaXRpb24gJiBHX0lPX0hVUCB8fCBjb25kaXRpb24gJiBHX0lPX0VSUiB8fCBjb25kaXRpb24g
JiBHX0lPX05WQUwpIHsKKyAgICAgICAgICAgICAgICBjbG9zZUZ1bmN0aW9uKCk7CisgICAgICAg
ICAgICAgICAgcmV0dXJuIEdNYWluTG9vcFNvdXJjZTo6U3RvcDsKKyAgICAgICAgICAgIH0KKwor
ICAgICAgICAgICAgaWYgKGNvbmRpdGlvbiAmIEdfSU9fSU4pIHsKKyAgICAgICAgICAgICAgICBm
dW5jdGlvbigpOworICAgICAgICAgICAgICAgIHJldHVybiBHTWFpbkxvb3BTb3VyY2U6OkNvbnRp
bnVlOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsK
KyAgICAgICAgICAgIHJldHVybiBHTWFpbkxvb3BTb3VyY2U6OlN0b3A7CisgICAgICAgIH0sIHNv
Y2tldC5nZXQoKSwgR19JT19JTiwKKyAgICAgICAgW3RoaXNdIHsgZGVyZWYoKTsgfSwKKyAgICAg
ICAgbV9ldmVudENvbnRleHQuZ2V0KCkpOworfQorCit2b2lkIFdvcmtRdWV1ZTo6dW5yZWdpc3Rl
clNvY2tldEV2ZW50SGFuZGxlcihpbnQpCit7CisgICAgbV9zb2NrZXRFdmVudFNvdXJjZS5jYW5j
ZWwoKTsKK30KKwordm9pZCBXb3JrUXVldWU6OmRpc3BhdGNoKHN0ZDo6ZnVuY3Rpb248dm9pZCAo
KT4gZnVuY3Rpb24pCit7CisgICAgcmVmKCk7CisgICAgR01haW5Mb29wU291cmNlOjpzY2hlZHVs
ZUFuZERlbGV0ZU9uRGVzdHJveSgiW1dlYktpdF0gV29ya1F1ZXVlOjpkaXNwYXRjaCIsIFdURjo6
bW92ZShmdW5jdGlvbiksIEdfUFJJT1JJVFlfREVGQVVMVCwKKyAgICAgICAgW3RoaXNdIHsgZGVy
ZWYoKTsgfSwgbV9ldmVudENvbnRleHQuZ2V0KCkpOworfQorCit2b2lkIFdvcmtRdWV1ZTo6ZGlz
cGF0Y2hBZnRlcihzdGQ6OmNocm9ubzo6bmFub3NlY29uZHMgZHVyYXRpb24sIHN0ZDo6ZnVuY3Rp
b248dm9pZCAoKT4gZnVuY3Rpb24pCit7CisgICAgcmVmKCk7CisgICAgR01haW5Mb29wU291cmNl
OjpzY2hlZHVsZUFmdGVyRGVsYXlBbmREZWxldGVPbkRlc3Ryb3koIltXZWJLaXRdIFdvcmtRdWV1
ZTo6ZGlzcGF0Y2hBZnRlciIsIFdURjo6bW92ZShmdW5jdGlvbiksCisgICAgICAgIHN0ZDo6Y2hy
b25vOjpkdXJhdGlvbl9jYXN0PHN0ZDo6Y2hyb25vOjptaWxsaXNlY29uZHM+KGR1cmF0aW9uKSwg
R19QUklPUklUWV9ERUZBVUxULCBbdGhpc10geyBkZXJlZigpOyB9LCBtX2V2ZW50Q29udGV4dC5n
ZXQoKSk7Cit9CisKK30KZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvd3RmL2d0ay9NYWluVGhyZWFk
R3RrLmNwcCBiL1NvdXJjZS9XVEYvd3RmL2d0ay9NYWluVGhyZWFkR3RrLmNwcApkZWxldGVkIGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggNTk4MTI5YWY4ZGMyMjQ3ZGU2MmIyMjQ1NjNhMDJkNTI4MjMz
NWU3OS4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3Vy
Y2UvV1RGL3d0Zi9ndGsvTWFpblRocmVhZEd0ay5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSw0NiAr
MCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDA3LCAyMDA4IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAwNyBKdXN0aW4gSGF5Z29vZCAoamhh
eWdvb2RAcmVha3RpeC5jb20pCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFy
ZSBtZXQ6Ci0gKgotICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0g
KiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQotICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKiAzLiAgTmVpdGhlciB0aGUg
bmFtZSBvZiBBcHBsZSBJbmMuICgiQXBwbGUiKSBub3IgdGhlIG5hbWVzIG9mCi0gKiAgICAgaXRz
IGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMg
ZGVyaXZlZAotICogICAgIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9y
IHdyaXR0ZW4gcGVybWlzc2lvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQotICogRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUg
SU1QTElFRAotICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQotICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQotICogRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5U
SUFMIERBTUFHRVMKLSAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1F
TlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKLSAqIExPU1MgT0YgVVNFLCBEQVRB
LCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RAotICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgotICogVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
LSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiTWFpblRocmVhZC5oIgotCi0j
aW5jbHVkZSA8d3RmL2dvYmplY3QvR01haW5Mb29wU291cmNlLmg+Ci0KLW5hbWVzcGFjZSBXVEYg
ewotCi12b2lkIGluaXRpYWxpemVNYWluVGhyZWFkUGxhdGZvcm0oKQotewotfQotCi12b2lkIHNj
aGVkdWxlRGlzcGF0Y2hGdW5jdGlvbnNPbk1haW5UaHJlYWQoKQotewotICAgIEdNYWluTG9vcFNv
dXJjZTo6c2NoZWR1bGVBbmREZWxldGVPbkRlc3Ryb3koIltXZWJLaXRdIGRpc3BhdGNoRnVuY3Rp
b25zRnJvbU1haW5UaHJlYWQiLCBzdGQ6OmZ1bmN0aW9uPHZvaWQoKT4oZGlzcGF0Y2hGdW5jdGlv
bnNGcm9tTWFpblRocmVhZCkpOwotfQotCi19IC8vIG5hbWVzcGFjZSBXVEYKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XVEYvd3RmL2d0ay9SdW5Mb29wR3RrLmNwcCBiL1NvdXJjZS9XVEYvd3RmL2d0ay9S
dW5Mb29wR3RrLmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggN2RjNDA3NTY2MDgy
YTIzOGJhZjk2MTA4NzYyZWVjMjQyZjZlYjk4Yi4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV1RGL3d0Zi9ndGsvUnVuTG9vcEd0ay5jcHAKKysr
IC9kZXYvbnVsbApAQCAtMSwxMjcgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMCBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBQb3J0aW9ucyBDb3B5cmlnaHQgKGMp
IDIwMTAgTW90b3JvbGEgTW9iaWxpdHksIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgot
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJ
VFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJ
TkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9G
Ci0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1Ig
UFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgot
ICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJSdW5Mb29wLmgiCi0KLSNpbmNs
dWRlIDxnbGliLmg+Ci0jaW5jbHVkZSA8d3RmL01haW5UaHJlYWQuaD4KLQotbmFtZXNwYWNlIFdU
RiB7Ci0KLVJ1bkxvb3A6OlJ1bkxvb3AoKQotewotICAgIG1fbWFpbkNvbnRleHQgPSBnX21haW5f
Y29udGV4dF9nZXRfdGhyZWFkX2RlZmF1bHQoKTsKLSAgICBpZiAoIW1fbWFpbkNvbnRleHQpCi0g
ICAgICAgIG1fbWFpbkNvbnRleHQgPSBpc01haW5UaHJlYWQoKSA/IGdfbWFpbl9jb250ZXh0X2Rl
ZmF1bHQoKSA6IGFkb3B0R1JlZihnX21haW5fY29udGV4dF9uZXcoKSk7Ci0gICAgQVNTRVJUKG1f
bWFpbkNvbnRleHQpOwotCi0gICAgR1JlZlB0cjxHTWFpbkxvb3A+IGlubmVybW9zdExvb3AgPSBh
ZG9wdEdSZWYoZ19tYWluX2xvb3BfbmV3KG1fbWFpbkNvbnRleHQuZ2V0KCksIEZBTFNFKSk7Ci0g
ICAgQVNTRVJUKGlubmVybW9zdExvb3ApOwotICAgIG1fbWFpbkxvb3BzLmFwcGVuZChpbm5lcm1v
c3RMb29wKTsKLX0KLQotUnVuTG9vcDo6flJ1bkxvb3AoKQotewotICAgIGZvciAoaW50IGkgPSBt
X21haW5Mb29wcy5zaXplKCkgLSAxOyBpID49IDA7IC0taSkgewotICAgICAgICBpZiAoIWdfbWFp
bl9sb29wX2lzX3J1bm5pbmcobV9tYWluTG9vcHNbaV0uZ2V0KCkpKQotICAgICAgICAgICAgY29u
dGludWU7Ci0gICAgICAgIGdfbWFpbl9sb29wX3F1aXQobV9tYWluTG9vcHNbaV0uZ2V0KCkpOwot
ICAgIH0KLX0KLQotdm9pZCBSdW5Mb29wOjpydW4oKQotewotICAgIFJ1bkxvb3AmIHJ1bkxvb3Ag
PSBSdW5Mb29wOjpjdXJyZW50KCk7Ci0gICAgR01haW5Db250ZXh0KiBtYWluQ29udGV4dCA9IHJ1
bkxvb3AubV9tYWluQ29udGV4dC5nZXQoKTsKLQotICAgIC8vIFRoZSBpbm5lcm1vc3QgbWFpbiBs
b29wIHNob3VsZCBhbHdheXMgYmUgdGhlcmUuCi0gICAgQVNTRVJUKCFydW5Mb29wLm1fbWFpbkxv
b3BzLmlzRW1wdHkoKSk7Ci0KLSAgICBHTWFpbkxvb3AqIGlubmVybW9zdExvb3AgPSBydW5Mb29w
Lm1fbWFpbkxvb3BzWzBdLmdldCgpOwotICAgIGlmICghZ19tYWluX2xvb3BfaXNfcnVubmluZyhp
bm5lcm1vc3RMb29wKSkgewotICAgICAgICBnX21haW5fY29udGV4dF9wdXNoX3RocmVhZF9kZWZh
dWx0KG1haW5Db250ZXh0KTsKLSAgICAgICAgZ19tYWluX2xvb3BfcnVuKGlubmVybW9zdExvb3Ap
OwotICAgICAgICBnX21haW5fY29udGV4dF9wb3BfdGhyZWFkX2RlZmF1bHQobWFpbkNvbnRleHQp
OwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgLy8gQ3JlYXRlIGFuZCBydW4gYSBuZXN0
ZWQgbG9vcCBpZiB0aGUgaW5uZXJtb3N0IG9uZSB3YXMgYWxyZWFkeSBydW5uaW5nLgotICAgIEdN
YWluTG9vcCogbmVzdGVkTWFpbkxvb3AgPSBnX21haW5fbG9vcF9uZXcobWFpbkNvbnRleHQsIEZB
TFNFKTsKLSAgICBydW5Mb29wLm1fbWFpbkxvb3BzLmFwcGVuZChhZG9wdEdSZWYobmVzdGVkTWFp
bkxvb3ApKTsKLQotICAgIGdfbWFpbl9jb250ZXh0X3B1c2hfdGhyZWFkX2RlZmF1bHQobWFpbkNv
bnRleHQpOwotICAgIGdfbWFpbl9sb29wX3J1bihuZXN0ZWRNYWluTG9vcCk7Ci0gICAgZ19tYWlu
X2NvbnRleHRfcG9wX3RocmVhZF9kZWZhdWx0KG1haW5Db250ZXh0KTsKLQotICAgIHJ1bkxvb3Au
bV9tYWluTG9vcHMucmVtb3ZlTGFzdCgpOwotfQotCi12b2lkIFJ1bkxvb3A6OnN0b3AoKQotewot
ICAgIC8vIFRoZSBpbm5lcm1vc3QgbWFpbiBsb29wIHNob3VsZCBhbHdheXMgYmUgdGhlcmUuCi0g
ICAgQVNTRVJUKCFtX21haW5Mb29wcy5pc0VtcHR5KCkpOwotICAgIEdSZWZQdHI8R01haW5Mb29w
PiBsYXN0TWFpbkxvb3AgPSBtX21haW5Mb29wcy5sYXN0KCk7Ci0gICAgaWYgKGdfbWFpbl9sb29w
X2lzX3J1bm5pbmcobGFzdE1haW5Mb29wLmdldCgpKSkKLSAgICAgICAgZ19tYWluX2xvb3BfcXVp
dChsYXN0TWFpbkxvb3AuZ2V0KCkpOwotfQotCi12b2lkIFJ1bkxvb3A6Ondha2VVcCgpCi17Ci0g
ICAgUmVmUHRyPFJ1bkxvb3A+IHJ1bkxvb3AodGhpcyk7Ci0gICAgR01haW5Mb29wU291cmNlOjpz
Y2hlZHVsZUFuZERlbGV0ZU9uRGVzdHJveSgiW1dlYktpdF0gUnVuTG9vcCB3b3JrIiwgc3RkOjpm
dW5jdGlvbjx2b2lkKCk+KFtydW5Mb29wXSB7Ci0gICAgICAgIHJ1bkxvb3AtPnBlcmZvcm1Xb3Jr
KCk7Ci0gICAgfSksIEdfUFJJT1JJVFlfREVGQVVMVCwgbnVsbHB0ciwgbV9tYWluQ29udGV4dC5n
ZXQoKSk7Ci0gICAgZ19tYWluX2NvbnRleHRfd2FrZXVwKG1fbWFpbkNvbnRleHQuZ2V0KCkpOwot
fQotCi1SdW5Mb29wOjpUaW1lckJhc2U6OlRpbWVyQmFzZShSdW5Mb29wJiBydW5Mb29wKQotICAg
IDogbV9ydW5Mb29wKHJ1bkxvb3ApCi17Ci19Ci0KLVJ1bkxvb3A6OlRpbWVyQmFzZTo6flRpbWVy
QmFzZSgpCi17Ci0gICAgc3RvcCgpOwotfQotCi12b2lkIFJ1bkxvb3A6OlRpbWVyQmFzZTo6c3Rh
cnQoZG91YmxlIGZpcmVJbnRlcnZhbCwgYm9vbCByZXBlYXQpCi17Ci0gICAgbV90aW1lclNvdXJj
ZS5zY2hlZHVsZUFmdGVyRGVsYXkoIltXZWJLaXRdIFJ1bkxvb3A6OlRpbWVyIiwgc3RkOjpmdW5j
dGlvbjxib29sICgpPihbdGhpcywgcmVwZWF0XSB7IGZpcmVkKCk7IHJldHVybiByZXBlYXQ7IH0p
LAotICAgICAgICBzdGQ6OmNocm9ubzo6ZHVyYXRpb25fY2FzdDxzdGQ6OmNocm9ubzo6bWlsbGlz
ZWNvbmRzPihzdGQ6OmNocm9ubzo6ZHVyYXRpb248ZG91YmxlPihmaXJlSW50ZXJ2YWwpKSwgR19Q
UklPUklUWV9ERUZBVUxULCBudWxscHRyLCBtX3J1bkxvb3AubV9tYWluQ29udGV4dC5nZXQoKSk7
Ci19Ci0KLXZvaWQgUnVuTG9vcDo6VGltZXJCYXNlOjpzdG9wKCkKLXsKLSAgICBtX3RpbWVyU291
cmNlLmNhbmNlbCgpOwotfQotCi1ib29sIFJ1bkxvb3A6OlRpbWVyQmFzZTo6aXNBY3RpdmUoKSBj
b25zdAotewotICAgIHJldHVybiBtX3RpbWVyU291cmNlLmlzU2NoZWR1bGVkKCk7Ci19Ci0KLX0g
Ly8gbmFtZXNwYWNlIFdURgpkaWZmIC0tZ2l0IGEvU291cmNlL1dURi93dGYvZ3RrL1dvcmtRdWV1
ZUd0ay5jcHAgYi9Tb3VyY2UvV1RGL3d0Zi9ndGsvV29ya1F1ZXVlR3RrLmNwcApkZWxldGVkIGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggZWUxYjYwYmFmNWQwNjhiYTJjZWFkM2Q4MTE0OGZiNGEyYzdj
NDFiMi4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3Vy
Y2UvV1RGL3d0Zi9ndGsvV29ya1F1ZXVlR3RrLmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDEyOCAr
MCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDExIElnYWxpYSBTLkwuCi0gKiBDb3B5cmln
aHQgKEMpIDIwMTAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogUG9ydGlvbnMg
Q29weXJpZ2h0IChjKSAyMDEwIE1vdG9yb2xhIE1vYmlsaXR5LCBJbmMuICBBbGwgcmlnaHRzIHJl
c2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0g
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAot
ICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0g
KiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQ
Uk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICog
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiV29ya1F1
ZXVlLmgiCi0KLSNpbmNsdWRlIDxnaW8vZ2lvLmg+Ci0jaW5jbHVkZSA8c3RyaW5nLmg+Ci0KLW5h
bWVzcGFjZSBXVEYgewotCi1zdGF0aWMgY29uc3Qgc2l6ZV90IGtWaXN1YWxTdHVkaW9UaHJlYWRO
YW1lTGltaXQgPSAzMTsKLQotdm9pZCBXb3JrUXVldWU6OnBsYXRmb3JtSW5pdGlhbGl6ZShjb25z
dCBjaGFyKiBuYW1lLCBUeXBlLCBRT1MpCi17Ci0gICAgbV9ldmVudENvbnRleHQgPSBhZG9wdEdS
ZWYoZ19tYWluX2NvbnRleHRfbmV3KCkpOwotICAgIEFTU0VSVChtX2V2ZW50Q29udGV4dCk7Ci0g
ICAgbV9ldmVudExvb3AgPSBhZG9wdEdSZWYoZ19tYWluX2xvb3BfbmV3KG1fZXZlbnRDb250ZXh0
LmdldCgpLCBGQUxTRSkpOwotICAgIEFTU0VSVChtX2V2ZW50TG9vcCk7Ci0KLSAgICAvLyBUaGlz
IG5hbWUgY2FuIGJlIGNvbS5hcHBsZS5XZWJLaXQuUHJvY2Vzc0xhdW5jaGVyIG9yIGNvbS5hcHBs
ZS5Db3JlSVBDLlJlY2VpdmVRdWV1ZS4KLSAgICAvLyBXZSBhcmUgdXNpbmcgdGhvc2UgbmFtZXMg
Zm9yIHRoZSB0aHJlYWQgbmFtZSwgYnV0IGJvdGggYXJlIGxvbmdlciB0aGFuIDMxIGNoYXJhY3Rl
cnMsCi0gICAgLy8gd2hpY2ggaXMgdGhlIGxpbWl0IG9mIFZpc3VhbCBTdHVkaW8gZm9yIHRocmVh
ZCBuYW1lcy4KLSAgICAvLyBXaGVuIGxvZyBpcyBlbmFibGVkIGNyZWF0ZVRocmVhZCgpIHdpbGwg
YXNzZXJ0IGluc3RlYWQgb2YgdHJ1bmNhdGUgdGhlIG5hbWUsIHNvIHdlIG5lZWQKLSAgICAvLyB0
byBtYWtlIHN1cmUgd2UgZG9uJ3QgdXNlIGEgbmFtZSBsb25nZXIgdGhhbiAzMSBjaGFyYWN0ZXJz
LgotICAgIGNvbnN0IGNoYXIqIHRocmVhZE5hbWUgPSBnX3N0cnJzdHIobmFtZSwgIi4iKTsKLSAg
ICBpZiAodGhyZWFkTmFtZSkKLSAgICAgICAgdGhyZWFkTmFtZSsrOwotICAgIGVsc2UKLSAgICAg
ICAgdGhyZWFkTmFtZSA9IG5hbWU7Ci0gICAgaWYgKHN0cmxlbih0aHJlYWROYW1lKSA+IGtWaXN1
YWxTdHVkaW9UaHJlYWROYW1lTGltaXQpCi0gICAgICAgIHRocmVhZE5hbWUgKz0gc3RybGVuKHRo
cmVhZE5hbWUpIC0ga1Zpc3VhbFN0dWRpb1RocmVhZE5hbWVMaW1pdDsKLQotICAgIEdSZWZQdHI8
R01haW5Mb29wPiBldmVudExvb3AobV9ldmVudExvb3AuZ2V0KCkpOwotICAgIG1fd29ya1F1ZXVl
VGhyZWFkID0gY3JlYXRlVGhyZWFkKHRocmVhZE5hbWUsIFtldmVudExvb3BdIHsKLSAgICAgICAg
Z19tYWluX2NvbnRleHRfcHVzaF90aHJlYWRfZGVmYXVsdChnX21haW5fbG9vcF9nZXRfY29udGV4
dChldmVudExvb3AuZ2V0KCkpKTsKLSAgICAgICAgZ19tYWluX2xvb3BfcnVuKGV2ZW50TG9vcC5n
ZXQoKSk7Ci0gICAgfSk7Ci19Ci0KLXZvaWQgV29ya1F1ZXVlOjpwbGF0Zm9ybUludmFsaWRhdGUo
KQotewotICAgIGlmIChtX3dvcmtRdWV1ZVRocmVhZCkgewotICAgICAgICBkZXRhY2hUaHJlYWQo
bV93b3JrUXVldWVUaHJlYWQpOwotICAgICAgICBtX3dvcmtRdWV1ZVRocmVhZCA9IDA7Ci0gICAg
fQotCi0gICAgaWYgKG1fZXZlbnRMb29wKSB7Ci0gICAgICAgIGlmIChnX21haW5fbG9vcF9pc19y
dW5uaW5nKG1fZXZlbnRMb29wLmdldCgpKSkKLSAgICAgICAgICAgIGdfbWFpbl9sb29wX3F1aXQo
bV9ldmVudExvb3AuZ2V0KCkpOwotICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgIC8vIFRoZSB0
aHJlYWQgaGFzbid0IHN0YXJ0ZWQgeWV0LCBzbyBzY2hlZHVsZSBhIG1haW4gbG9vcCBxdWl0IHRv
IGVuc3VyZSB0aGUgdGhyZWFkIGZpbmlzaGVzLgotICAgICAgICAgICAgR01haW5Mb29wKiBldmVu
dExvb3AgPSBtX2V2ZW50TG9vcC5nZXQoKTsKLSAgICAgICAgICAgIEdNYWluTG9vcFNvdXJjZTo6
c2NoZWR1bGVBbmREZWxldGVPbkRlc3Ryb3koIltXZWJLaXRdIFdvcmtRdWV1ZSBxdWl0IG1haW4g
bG9vcCIsIFtldmVudExvb3BdIHsgZ19tYWluX2xvb3BfcXVpdChldmVudExvb3ApOyB9LAotICAg
ICAgICAgICAgICAgIEdfUFJJT1JJVFlfSElHSCwgbnVsbHB0ciwgbV9ldmVudENvbnRleHQuZ2V0
KCkpOwotICAgICAgICB9Ci0gICAgICAgIG1fZXZlbnRMb29wID0gbnVsbHB0cjsKLSAgICB9Ci0K
LSAgICBtX2V2ZW50Q29udGV4dCA9IG51bGxwdHI7Ci19Ci0KLXZvaWQgV29ya1F1ZXVlOjpyZWdp
c3RlclNvY2tldEV2ZW50SGFuZGxlcihpbnQgZmlsZURlc2NyaXB0b3IsIHN0ZDo6ZnVuY3Rpb248
dm9pZCAoKT4gZnVuY3Rpb24sIHN0ZDo6ZnVuY3Rpb248dm9pZCAoKT4gY2xvc2VGdW5jdGlvbikK
LXsKLSAgICBHUmVmUHRyPEdTb2NrZXQ+IHNvY2tldCA9IGFkb3B0R1JlZihnX3NvY2tldF9uZXdf
ZnJvbV9mZChmaWxlRGVzY3JpcHRvciwgMCkpOwotICAgIHJlZigpOwotICAgIG1fc29ja2V0RXZl
bnRTb3VyY2Uuc2NoZWR1bGUoIltXZWJLaXRdIFdvcmtRdWV1ZTo6U29ja2V0RXZlbnRIYW5kbGVy
IiwgW2Z1bmN0aW9uLCBjbG9zZUZ1bmN0aW9uXShHSU9Db25kaXRpb24gY29uZGl0aW9uKSB7Ci0g
ICAgICAgICAgICBpZiAoY29uZGl0aW9uICYgR19JT19IVVAgfHwgY29uZGl0aW9uICYgR19JT19F
UlIgfHwgY29uZGl0aW9uICYgR19JT19OVkFMKSB7Ci0gICAgICAgICAgICAgICAgY2xvc2VGdW5j
dGlvbigpOwotICAgICAgICAgICAgICAgIHJldHVybiBHTWFpbkxvb3BTb3VyY2U6OlN0b3A7Ci0g
ICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGlmIChjb25kaXRpb24gJiBHX0lPX0lOKSB7Ci0g
ICAgICAgICAgICAgICAgZnVuY3Rpb24oKTsKLSAgICAgICAgICAgICAgICByZXR1cm4gR01haW5M
b29wU291cmNlOjpDb250aW51ZTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgQVNTRVJU
X05PVF9SRUFDSEVEKCk7Ci0gICAgICAgICAgICByZXR1cm4gR01haW5Mb29wU291cmNlOjpTdG9w
OwotICAgICAgICB9LCBzb2NrZXQuZ2V0KCksIEdfSU9fSU4sCi0gICAgICAgIFt0aGlzXSB7IGRl
cmVmKCk7IH0sCi0gICAgICAgIG1fZXZlbnRDb250ZXh0LmdldCgpKTsKLX0KLQotdm9pZCBXb3Jr
UXVldWU6OnVucmVnaXN0ZXJTb2NrZXRFdmVudEhhbmRsZXIoaW50KQotewotICAgIG1fc29ja2V0
RXZlbnRTb3VyY2UuY2FuY2VsKCk7Ci19Ci0KLXZvaWQgV29ya1F1ZXVlOjpkaXNwYXRjaChzdGQ6
OmZ1bmN0aW9uPHZvaWQgKCk+IGZ1bmN0aW9uKQotewotICAgIHJlZigpOwotICAgIEdNYWluTG9v
cFNvdXJjZTo6c2NoZWR1bGVBbmREZWxldGVPbkRlc3Ryb3koIltXZWJLaXRdIFdvcmtRdWV1ZTo6
ZGlzcGF0Y2giLCBXVEY6Om1vdmUoZnVuY3Rpb24pLCBHX1BSSU9SSVRZX0RFRkFVTFQsCi0gICAg
ICAgIFt0aGlzXSB7IGRlcmVmKCk7IH0sIG1fZXZlbnRDb250ZXh0LmdldCgpKTsKLX0KLQotdm9p
ZCBXb3JrUXVldWU6OmRpc3BhdGNoQWZ0ZXIoc3RkOjpjaHJvbm86Om5hbm9zZWNvbmRzIGR1cmF0
aW9uLCBzdGQ6OmZ1bmN0aW9uPHZvaWQgKCk+IGZ1bmN0aW9uKQotewotICAgIHJlZigpOwotICAg
IEdNYWluTG9vcFNvdXJjZTo6c2NoZWR1bGVBZnRlckRlbGF5QW5kRGVsZXRlT25EZXN0cm95KCJb
V2ViS2l0XSBXb3JrUXVldWU6OmRpc3BhdGNoQWZ0ZXIiLCBXVEY6Om1vdmUoZnVuY3Rpb24pLAot
ICAgICAgICBzdGQ6OmNocm9ubzo6ZHVyYXRpb25fY2FzdDxzdGQ6OmNocm9ubzo6bWlsbGlzZWNv
bmRzPihkdXJhdGlvbiksIEdfUFJJT1JJVFlfREVGQVVMVCwgW3RoaXNdIHsgZGVyZWYoKTsgfSwg
bV9ldmVudENvbnRleHQuZ2V0KCkpOwotfQotCi19CmRpZmYgLS1naXQgYS9Ub29scy9DaGFuZ2VM
b2cgYi9Ub29scy9DaGFuZ2VMb2cKaW5kZXggYzdkODMwYTk1NDYyNDYzZWQ1YmI0MjQwYjgzOGMx
NTEyNWNlOWQ4MS4uNGZiOTcyYmRkYjIxZGRhMDk3YTgxZmQ5MmM1ZTc5NWY1MGUxOGI3MiAxMDA2
NDQKLS0tIGEvVG9vbHMvQ2hhbmdlTG9nCisrKyBiL1Rvb2xzL0NoYW5nZUxvZwpAQCAtMSwzICsx
LDE3IEBACisyMDE1LTA1LTE4ICBaYW4gRG9iZXJzZWsgIDx6ZG9iZXJzZWtAaWdhbGlhLmNvbT4K
KworICAgICAgICBbR1RLXSBNb3ZlIE1haW5UaHJlYWRHdGssIFJ1bkxvb3BHdGssIFdvcmtRdWV1
ZUd0ayB1bmRlciBTb3VyY2UvV1RGL3d0Zi9nbGliLworICAgICAgICBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTQ1MTE3CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9C
T0RZIChPT1BTISkuCisKKyAgICAgICAgUmVuYW1lIHRoZSBXb3JrUXVldWVHdGsuY3BwIGZpbGUg
dG8gV29ya1F1ZXVlR0xpYi5jcHAsIGFuZCBtb3ZlIGl0IHVuZGVyCisgICAgICAgIFRvb2xzL1Rl
c3RXZWJLaXRBUEkvVGVzdHMvV1RGL2dsaWIvLgorCisgICAgICAgICogVGVzdFdlYktpdEFQSS9Q
bGF0Zm9ybUdUSy5jbWFrZToKKyAgICAgICAgKiBUZXN0V2ViS2l0QVBJL1Rlc3RzL1dURi9nbGli
L1dvcmtRdWV1ZUdMaWIuY3BwOiBSZW5hbWVkIGZyb20gVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0
cy9XVEYvZ3RrL1dvcmtRdWV1ZUd0ay5jcHAuCisgICAgICAgIChUZXN0V2ViS2l0QVBJOjpURVNU
KToKKwogMjAxNS0wNS0xNiAgVGFuYXkgQyAgPHRhbmF5LmNAc2Ftc3VuZy5jb20+CiAKICAgICAg
ICAgW0VGTF1bV0syXSBNaW5pYnJvd3NlciA6IEFkZCBzZWFyY2ggaWNvbiB0byBzZWFyY2ggYmFy
CmRpZmYgLS1naXQgYS9Ub29scy9UZXN0V2ViS2l0QVBJL1BsYXRmb3JtR1RLLmNtYWtlIGIvVG9v
bHMvVGVzdFdlYktpdEFQSS9QbGF0Zm9ybUdUSy5jbWFrZQppbmRleCBjYzQ3ZTA4MzkzNjUwZDQ4
MmMwN2Y1MTgxYTg2MDBiYjhmMGIyNjUwLi4yODRkYjUwZjAzNjZlMjNlNGJmM2I0YTZiY2VlZDkz
ZDczMzFlYWIxIDEwMDY0NAotLS0gYS9Ub29scy9UZXN0V2ViS2l0QVBJL1BsYXRmb3JtR1RLLmNt
YWtlCisrKyBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvUGxhdGZvcm1HVEsuY21ha2UKQEAgLTEzNSw3
ICsxMzUsNyBAQCBzZXRfdGVzdHNfcHJvcGVydGllcyhUZXN0V2ViQ29yZSBQUk9QRVJUSUVTIFRJ
TUVPVVQgNjApCiBzZXRfdGFyZ2V0X3Byb3BlcnRpZXMoVGVzdFdlYkNvcmUgUFJPUEVSVElFUyBS
VU5USU1FX09VVFBVVF9ESVJFQ1RPUlkgJHtURVNUV0VCS0lUQVBJX1JVTlRJTUVfT1VUUFVUX0RJ
UkVDVE9SWX0vV2ViQ29yZSkKIAogbGlzdChBUFBFTkQgVGVzdFdURl9TT1VSQ0VTCisgICAgJHtU
RVNUV0VCS0lUQVBJX0RJUn0vVGVzdHMvV1RGL2dsaWIvV29ya1F1ZXVlR0xpYi5jcHAKICAgICAk
e1RFU1RXRUJLSVRBUElfRElSfS9UZXN0cy9XVEYvZ29iamVjdC9HTWFpbkxvb3BTb3VyY2UuY3Bw
CiAgICAgJHtURVNUV0VCS0lUQVBJX0RJUn0vVGVzdHMvV1RGL2dvYmplY3QvR1VuaXF1ZVB0ci5j
cHAKLSAgICAke1RFU1RXRUJLSVRBUElfRElSfS9UZXN0cy9XVEYvZ3RrL1dvcmtRdWV1ZUd0ay5j
cHAKICkKZGlmZiAtLWdpdCBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV1RGL2dsaWIvV29y
a1F1ZXVlR0xpYi5jcHAgYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dURi9nbGliL1dvcmtR
dWV1ZUdMaWIuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjk5MzJiNDdiYjg0OTc0M2Y4MjljMWYxZjBiODI1ODRk
OTc0NjE2M2EKLS0tIC9kZXYvbnVsbAorKysgYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dU
Ri9nbGliL1dvcmtRdWV1ZUdMaWIuY3BwCkBAIC0wLDAgKzEsNjkgQEAKKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMTUgSWdhbGlhIFMuTC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwor
ICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisg
KiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICog
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwg
RVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgor
CisjaW5jbHVkZSAiVGVzdC5oIgorI2luY2x1ZGUgPGdpby9naW8uaD4KKyNpbmNsdWRlIDx0aHJl
YWQ+CisjaW5jbHVkZSA8d3RmL1dvcmtRdWV1ZS5oPgorI2luY2x1ZGUgPHd0Zi9nb2JqZWN0L0dS
ZWZQdHIuaD4KKyNpbmNsdWRlIDx3dGYvZ29iamVjdC9HVW5pcXVlUHRyLmg+CisKK25hbWVzcGFj
ZSBUZXN0V2ViS2l0QVBJIHsKKworVEVTVChXVEZfV29ya1F1ZXVlLCBBc3luY0lPKQoreworICAg
IHN0cnVjdCBUZXN0aW5nQ29udGV4dCB7CisgICAgICAgIE11dGV4IG1fbG9jazsKKyAgICAgICAg
VGhyZWFkQ29uZGl0aW9uIG1fdGVzdENvbXBsZXRlZDsKKyAgICAgICAgR01haW5Db250ZXh0KiBt
X21haW5Db250ZXh0OworICAgIH0gY29udGV4dDsKKworICAgIGF1dG8gcXVldWUgPSBXb3JrUXVl
dWU6OmNyZWF0ZSgiY29tLmFwcGxlLldlYktpdC5UZXN0LkFzeW5jSU8iKTsKKyAgICBjb250ZXh0
Lm1fbWFpbkNvbnRleHQgPSBnX21haW5fY29udGV4dF9kZWZhdWx0KCk7CisgICAgRVhQRUNUX0ZB
TFNFKGdfbWFpbl9jb250ZXh0X2dldF90aHJlYWRfZGVmYXVsdCgpKTsKKworICAgIEdVbmlxdWVQ
dHI8Y2hhcj4gY3VycmVudERpcmVjdG9yeShnX2dldF9jdXJyZW50X2RpcigpKTsKKyAgICBHUmVm
UHRyPEdGaWxlPiBmaWxlID0gYWRvcHRHUmVmKGdfZmlsZV9uZXdfZm9yX3BhdGgoY3VycmVudERp
cmVjdG9yeS5nZXQoKSkpOworCisgICAgTXV0ZXhMb2NrZXIgbG9ja2VyKGNvbnRleHQubV9sb2Nr
KTsKKyAgICBxdWV1ZS0+ZGlzcGF0Y2goWyZdKHZvaWQpIHsKKyAgICAgICAgRVhQRUNUX1RSVUUo
Z19tYWluX2NvbnRleHRfZ2V0X3RocmVhZF9kZWZhdWx0KCkpOworICAgICAgICBFWFBFQ1RfVFJV
RShnX21haW5fY29udGV4dF9nZXRfdGhyZWFkX2RlZmF1bHQoKSAhPSBjb250ZXh0Lm1fbWFpbkNv
bnRleHQpOworICAgICAgICBjb250ZXh0Lm1fbWFpbkNvbnRleHQgPSBnX21haW5fY29udGV4dF9n
ZXRfdGhyZWFkX2RlZmF1bHQoKTsKKyAgICAgICAgZ19maWxlX3F1ZXJ5X2luZm9fYXN5bmMoZmls
ZS5nZXQoKSwgR19GSUxFX0FUVFJJQlVURV9TVEFOREFSRF9TSVpFLCBHX0ZJTEVfUVVFUllfSU5G
T19OT05FLCBHX1BSSU9SSVRZX0RFRkFVTFQsIG51bGxwdHIsCisgICAgICAgICAgICBbXShHT2Jq
ZWN0KiwgR0FzeW5jUmVzdWx0KiwgZ3BvaW50ZXIgdXNlckRhdGEpIHsKKyAgICAgICAgICAgICAg
ICBUZXN0aW5nQ29udGV4dCogY29udGV4dCA9IHN0YXRpY19jYXN0PFRlc3RpbmdDb250ZXh0Kj4o
dXNlckRhdGEpOworICAgICAgICAgICAgICAgIE11dGV4TG9ja2VyIGxvY2tlcihjb250ZXh0LT5t
X2xvY2spOworICAgICAgICAgICAgICAgIEVYUEVDVF9FUShnX21haW5fY29udGV4dF9nZXRfdGhy
ZWFkX2RlZmF1bHQoKSwgY29udGV4dC0+bV9tYWluQ29udGV4dCk7CisgICAgICAgICAgICAgICAg
Y29udGV4dC0+bV90ZXN0Q29tcGxldGVkLnNpZ25hbCgpOworICAgICAgICAgICAgfSwgJmNvbnRl
eHQpOworICAgIH0pOworCisgICAgY29udGV4dC5tX3Rlc3RDb21wbGV0ZWQud2FpdChjb250ZXh0
Lm1fbG9jayk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFRlc3RXZWJLaXRBUEkKZGlmZiAtLWdpdCBh
L1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV1RGL2d0ay9Xb3JrUXVldWVHdGsuY3BwIGIvVG9v
bHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XVEYvZ3RrL1dvcmtRdWV1ZUd0ay5jcHAKZGVsZXRlZCBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDk5MzJiNDdiYjg0OTc0M2Y4MjljMWYxZjBiODI1ODRkOTc0
NjE2M2EuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvVG9v
bHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XVEYvZ3RrL1dvcmtRdWV1ZUd0ay5jcHAKKysrIC9kZXYv
bnVsbApAQCAtMSw2OSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDE1IElnYWxpYSBT
LkwuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBU
SEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NV
UkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLQotI2luY2x1ZGUgIlRlc3QuaCIK
LSNpbmNsdWRlIDxnaW8vZ2lvLmg+Ci0jaW5jbHVkZSA8dGhyZWFkPgotI2luY2x1ZGUgPHd0Zi9X
b3JrUXVldWUuaD4KLSNpbmNsdWRlIDx3dGYvZ29iamVjdC9HUmVmUHRyLmg+Ci0jaW5jbHVkZSA8
d3RmL2dvYmplY3QvR1VuaXF1ZVB0ci5oPgotCi1uYW1lc3BhY2UgVGVzdFdlYktpdEFQSSB7Ci0K
LVRFU1QoV1RGX1dvcmtRdWV1ZSwgQXN5bmNJTykKLXsKLSAgICBzdHJ1Y3QgVGVzdGluZ0NvbnRl
eHQgewotICAgICAgICBNdXRleCBtX2xvY2s7Ci0gICAgICAgIFRocmVhZENvbmRpdGlvbiBtX3Rl
c3RDb21wbGV0ZWQ7Ci0gICAgICAgIEdNYWluQ29udGV4dCogbV9tYWluQ29udGV4dDsKLSAgICB9
IGNvbnRleHQ7Ci0KLSAgICBhdXRvIHF1ZXVlID0gV29ya1F1ZXVlOjpjcmVhdGUoImNvbS5hcHBs
ZS5XZWJLaXQuVGVzdC5Bc3luY0lPIik7Ci0gICAgY29udGV4dC5tX21haW5Db250ZXh0ID0gZ19t
YWluX2NvbnRleHRfZGVmYXVsdCgpOwotICAgIEVYUEVDVF9GQUxTRShnX21haW5fY29udGV4dF9n
ZXRfdGhyZWFkX2RlZmF1bHQoKSk7Ci0KLSAgICBHVW5pcXVlUHRyPGNoYXI+IGN1cnJlbnREaXJl
Y3RvcnkoZ19nZXRfY3VycmVudF9kaXIoKSk7Ci0gICAgR1JlZlB0cjxHRmlsZT4gZmlsZSA9IGFk
b3B0R1JlZihnX2ZpbGVfbmV3X2Zvcl9wYXRoKGN1cnJlbnREaXJlY3RvcnkuZ2V0KCkpKTsKLQot
ICAgIE11dGV4TG9ja2VyIGxvY2tlcihjb250ZXh0Lm1fbG9jayk7Ci0gICAgcXVldWUtPmRpc3Bh
dGNoKFsmXSh2b2lkKSB7Ci0gICAgICAgIEVYUEVDVF9UUlVFKGdfbWFpbl9jb250ZXh0X2dldF90
aHJlYWRfZGVmYXVsdCgpKTsKLSAgICAgICAgRVhQRUNUX1RSVUUoZ19tYWluX2NvbnRleHRfZ2V0
X3RocmVhZF9kZWZhdWx0KCkgIT0gY29udGV4dC5tX21haW5Db250ZXh0KTsKLSAgICAgICAgY29u
dGV4dC5tX21haW5Db250ZXh0ID0gZ19tYWluX2NvbnRleHRfZ2V0X3RocmVhZF9kZWZhdWx0KCk7
Ci0gICAgICAgIGdfZmlsZV9xdWVyeV9pbmZvX2FzeW5jKGZpbGUuZ2V0KCksIEdfRklMRV9BVFRS
SUJVVEVfU1RBTkRBUkRfU0laRSwgR19GSUxFX1FVRVJZX0lORk9fTk9ORSwgR19QUklPUklUWV9E
RUZBVUxULCBudWxscHRyLAotICAgICAgICAgICAgW10oR09iamVjdCosIEdBc3luY1Jlc3VsdCos
IGdwb2ludGVyIHVzZXJEYXRhKSB7Ci0gICAgICAgICAgICAgICAgVGVzdGluZ0NvbnRleHQqIGNv
bnRleHQgPSBzdGF0aWNfY2FzdDxUZXN0aW5nQ29udGV4dCo+KHVzZXJEYXRhKTsKLSAgICAgICAg
ICAgICAgICBNdXRleExvY2tlciBsb2NrZXIoY29udGV4dC0+bV9sb2NrKTsKLSAgICAgICAgICAg
ICAgICBFWFBFQ1RfRVEoZ19tYWluX2NvbnRleHRfZ2V0X3RocmVhZF9kZWZhdWx0KCksIGNvbnRl
eHQtPm1fbWFpbkNvbnRleHQpOwotICAgICAgICAgICAgICAgIGNvbnRleHQtPm1fdGVzdENvbXBs
ZXRlZC5zaWduYWwoKTsKLSAgICAgICAgICAgIH0sICZjb250ZXh0KTsKLSAgICB9KTsKLQotICAg
IGNvbnRleHQubV90ZXN0Q29tcGxldGVkLndhaXQoY29udGV4dC5tX2xvY2spOwotfQotCi19IC8v
IG5hbWVzcGFjZSBUZXN0V2ViS2l0QVBJCg==
</data>

          </attachment>
      

    </bug>

</bugzilla>