<?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>138413</bug_id>
          
          <creation_ts>2014-11-05 02:48:02 -0800</creation_ts>
          <short_desc>Add cache coders</short_desc>
          <delta_ts>2014-11-07 05:08:17 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>Page Loading</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>30322</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Antti Koivisto">koivisto</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>andersca</cc>
    
    <cc>cgarcia</cc>
    
    <cc>commit-queue</cc>
    
    <cc>sam</cc>
    
    <cc>syoichi</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1046427</commentid>
    <comment_count>0</comment_count>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2014-11-05 02:48:02 -0800</bug_when>
    <thetext>Based on the IPC coders</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1046429</commentid>
    <comment_count>1</comment_count>
      <attachid>241016</attachid>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2014-11-05 03:01:15 -0800</bug_when>
    <thetext>Created attachment 241016
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1046430</commentid>
    <comment_count>2</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2014-11-05 03:03:32 -0800</bug_when>
    <thetext>Attachment 241016 did not pass style-queue:


ERROR: Source/WebKit2/NetworkProcess/cache/NetworkCacheEncoder.h:95:  More than one command on the same line  [whitespace/newline] [4]
ERROR: Source/WebKit2/NetworkProcess/cache/NetworkCacheEncoder.h:96:  More than one command on the same line  [whitespace/newline] [4]
ERROR: Source/WebKit2/NetworkProcess/cache/NetworkCacheEncoder.h:97:  More than one command on the same line  [whitespace/newline] [4]
ERROR: Source/WebKit2/NetworkProcess/cache/NetworkCacheEncoder.h:98:  More than one command on the same line  [whitespace/newline] [4]
ERROR: Source/WebKit2/NetworkProcess/cache/NetworkCacheEncoder.h:99:  More than one command on the same line  [whitespace/newline] [4]
ERROR: Source/WebKit2/NetworkProcess/cache/NetworkCacheEncoder.h:100:  More than one command on the same line  [whitespace/newline] [4]
ERROR: Source/WebKit2/NetworkProcess/cache/NetworkCacheEncoder.h:101:  More than one command on the same line  [whitespace/newline] [4]
ERROR: Source/WebKit2/NetworkProcess/cache/NetworkCacheEncoder.h:102:  More than one command on the same line  [whitespace/newline] [4]
ERROR: Source/WebKit2/NetworkProcess/cache/NetworkCacheEncoder.h:103:  More than one command on the same line  [whitespace/newline] [4]
ERROR: Source/WebKit2/NetworkProcess/cache/NetworkCacheEncoder.h:104:  More than one command on the same line  [whitespace/newline] [4]
Total errors found: 10 in 9 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>1046435</commentid>
    <comment_count>3</comment_count>
      <attachid>241016</attachid>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2014-11-05 03:21:21 -0800</bug_when>
    <thetext>Comment on attachment 241016
patch

View in context: https://bugs.webkit.org/attachment.cgi?id=241016&amp;action=review

&gt; Source/WebKit2/NetworkProcess/cache/NetworkCacheCoders.cpp:163
&gt; +    long long certificateSize;
&gt; +    if (!decoder.decode(certificateSize))

This is long long, but there isn&apos;t a NetworkCacheDecoder::decode(long long&amp;);</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1046895</commentid>
    <comment_count>4</comment_count>
      <attachid>241016</attachid>
    <who name="Anders Carlsson">andersca</who>
    <bug_when>2014-11-06 13:44:13 -0800</bug_when>
    <thetext>Comment on attachment 241016
patch

View in context: https://bugs.webkit.org/attachment.cgi?id=241016&amp;action=review

&gt; Source/WebKit2/NetworkProcess/cache/NetworkCacheCoders.cpp:162
&gt; +    long long certificateSize;

This should probably be int64_t.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1047030</commentid>
    <comment_count>5</comment_count>
      <attachid>241016</attachid>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2014-11-06 22:42:09 -0800</bug_when>
    <thetext>Comment on attachment 241016
patch

View in context: https://bugs.webkit.org/attachment.cgi?id=241016&amp;action=review

&gt; Source/WebKit2/NetworkProcess/cache/NetworkCacheCoders.cpp:156
&gt; +    encoder &lt;&lt; static_cast&lt;long long&gt;(argumentEncoder.bufferSize());

And here too.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1047059</commentid>
    <comment_count>6</comment_count>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2014-11-07 05:08:17 -0800</bug_when>
    <thetext>https://trac.webkit.org/r175748</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>241016</attachid>
            <date>2014-11-05 03:01:15 -0800</date>
            <delta_ts>2014-11-06 13:44:13 -0800</delta_ts>
            <desc>patch</desc>
            <filename>network-cache-encoder.patch</filename>
            <type>text/plain</type>
            <size>46780</size>
            <attacher name="Antti Koivisto">koivisto</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
S2l0Mi9DaGFuZ2VMb2cJKHJldmlzaW9uIDE3NTYxNykKKysrIFNvdXJjZS9XZWJLaXQyL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDI2IEBACisyMDE0LTExLTA1ICBBbnR0aSBL
b2l2aXN0byAgPGFudHRpQGFwcGxlLmNvbT4KKworICAgICAgICBBZGQgY2FjaGUgY29kZXJzCisg
ICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMzg0MTMKKwor
ICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBBZGQgZW5jb2Rp
bmcgYW5kIGRlY29kaW5nIHN1cHBvcnQgZm9yIGNhY2hlIHR5cGVzLgorCisgICAgICAgIFRoaXMg
aXMgbGFyZ2VseSBhIGNvcHkgb2YgdGhlIElQQyBjb2RlciBjbGFzc2VzIHdpdGggc29tZSB1bm5l
Y2Vzc2FyeSBmZWF0dXJlcyByZW1vdmVkLgorICAgICAgICBUaGUgY29kZXJzIGNvbXB1dGUgYSB0
eXBlLXNlbnNpdGl2ZSBjaGVja3N1bSB0aGF0IGNhbiBiZSB1c2VkIHRvIHZlcmlmeSB0aGUgZGF0
YSBpbnRlZ3JpdHkuCisKKyAgICAgICAgVGhlIGNvZGUgaXMgYmVoaW5kIEVOQUJMRShORVRXT1JL
X0NBQ0hFKSBhbmQgaXMgbm90IHlldCB1c2VkLgorCisgICAgICAgICogTmV0d29ya1Byb2Nlc3Mv
Y2FjaGU6IEFkZGVkLgorICAgICAgICAqIE5ldHdvcmtQcm9jZXNzL2NhY2hlL05ldHdvcmtDYWNo
ZUNvZGVyLmg6IEFkZGVkLgorICAgICAgICAqIE5ldHdvcmtQcm9jZXNzL2NhY2hlL05ldHdvcmtD
YWNoZUNvZGVycy5jcHA6IEFkZGVkLgorICAgICAgICAqIE5ldHdvcmtQcm9jZXNzL2NhY2hlL05l
dHdvcmtDYWNoZURlY29kZXIuY3BwOiBBZGRlZC4KKyAgICAgICAgKiBOZXR3b3JrUHJvY2Vzcy9j
YWNoZS9OZXR3b3JrQ2FjaGVEZWNvZGVyLmg6IEFkZGVkLgorICAgICAgICAqIE5ldHdvcmtQcm9j
ZXNzL2NhY2hlL05ldHdvcmtDYWNoZUVuY29kZXIuY3BwOiBBZGRlZC4KKyAgICAgICAgKiBOZXR3
b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGVFbmNvZGVyLmg6IEFkZGVkLgorICAgICAgICAq
IFdlYktpdDIueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKwogMjAxNC0xMS0wNSAgU2hpdmFr
dW1hciBKTSAgPHNoaXZhLmptQHNhbXN1bmcuY29tPgogCiAgICAgICAgIEZpeCBidWlsZCB3YXJu
aW5nIGluIFdlYktpdDIvV2ViUHJvY2VzcyBtb2R1bGUuCkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9O
ZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGVDb2Rlci5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL2NhY2hlL05ldHdvcmtDYWNoZUNvZGVyLmgJKHJl
dmlzaW9uIDApCisrKyBTb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3Jr
Q2FjaGVDb2Rlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNTEgQEAKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTAsIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoK
KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQg
SVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBP
RgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
IFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
KyAqLworCisjaWZuZGVmIE5ldHdvcmtDYWNoZUNvZGVyX2gKKyNkZWZpbmUgTmV0d29ya0NhY2hl
Q29kZXJfaAorCisjaWYgRU5BQkxFKE5FVFdPUktfQ0FDSEUpCisKK25hbWVzcGFjZSBXZWJLaXQg
eworCitjbGFzcyBOZXR3b3JrQ2FjaGVEZWNvZGVyOworY2xhc3MgTmV0d29ya0NhY2hlRW5jb2Rl
cjsKKyAgICAKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBOZXR3b3JrQ2FjaGVDb2RlciB7
CisgICAgc3RhdGljIHZvaWQgZW5jb2RlKE5ldHdvcmtDYWNoZUVuY29kZXImIGVuY29kZXIsIGNv
bnN0IFQmIHQpCisgICAgeworICAgICAgICB0LmVuY29kZShlbmNvZGVyKTsKKyAgICB9CisKKyAg
ICBzdGF0aWMgYm9vbCBkZWNvZGUoTmV0d29ya0NhY2hlRGVjb2RlciYgZGVjb2RlciwgVCYgdCkK
KyAgICB7CisgICAgICAgIHJldHVybiBUOjpkZWNvZGUoZGVjb2RlciwgdCk7CisgICAgfQorfTsK
KworfQorCisjZW5kaWYKKyNlbmRpZgpJbmRleDogU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nl
c3MvY2FjaGUvTmV0d29ya0NhY2hlQ29kZXJzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
S2l0Mi9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGVDb2RlcnMuY3BwCShyZXZpc2lv
biAwKQorKysgU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvY2FjaGUvTmV0d29ya0NhY2hl
Q29kZXJzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDE3OCBAQAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAxMSwgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgor
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJ
VFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJ
TkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9G
CisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1Ig
UFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgor
ICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJOZXR3b3JrQ2FjaGVDb2RlcnMu
aCIKKworI2lmIEVOQUJMRShORVRXT1JLX0NBQ0hFKQorCisjaW5jbHVkZSAiV2ViQ29yZUFyZ3Vt
ZW50Q29kZXJzLmgiCisjaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgorI2luY2x1ZGUgPHd0
Zi90ZXh0L1dURlN0cmluZy5oPgorCituYW1lc3BhY2UgV2ViS2l0IHsKKwordm9pZCBOZXR3b3Jr
Q2FjaGVDb2RlcjxBdG9taWNTdHJpbmc+OjplbmNvZGUoTmV0d29ya0NhY2hlRW5jb2RlciYgZW5j
b2RlciwgY29uc3QgQXRvbWljU3RyaW5nJiBhdG9taWNTdHJpbmcpCit7CisgICAgZW5jb2RlciA8
PCBhdG9taWNTdHJpbmcuc3RyaW5nKCk7Cit9CisKK2Jvb2wgTmV0d29ya0NhY2hlQ29kZXI8QXRv
bWljU3RyaW5nPjo6ZGVjb2RlKE5ldHdvcmtDYWNoZURlY29kZXImIGRlY29kZXIsIEF0b21pY1N0
cmluZyYgYXRvbWljU3RyaW5nKQoreworICAgIFN0cmluZyBzdHJpbmc7CisgICAgaWYgKCFkZWNv
ZGVyLmRlY29kZShzdHJpbmcpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBhdG9taWNT
dHJpbmcgPSBzdHJpbmc7CisgICAgcmV0dXJuIHRydWU7Cit9CisKK3ZvaWQgTmV0d29ya0NhY2hl
Q29kZXI8Q1N0cmluZz46OmVuY29kZShOZXR3b3JrQ2FjaGVFbmNvZGVyJiBlbmNvZGVyLCBjb25z
dCBDU3RyaW5nJiBzdHJpbmcpCit7CisgICAgLy8gU3BlY2lhbCBjYXNlIHRoZSBudWxsIHN0cmlu
Zy4KKyAgICBpZiAoc3RyaW5nLmlzTnVsbCgpKSB7CisgICAgICAgIGVuY29kZXIgPDwgc3RkOjpu
dW1lcmljX2xpbWl0czx1aW50MzJfdD46Om1heCgpOworICAgICAgICByZXR1cm47CisgICAgfQor
CisgICAgdWludDMyX3QgbGVuZ3RoID0gc3RyaW5nLmxlbmd0aCgpOworICAgIGVuY29kZXIgPDwg
bGVuZ3RoOworICAgIGVuY29kZXIuZW5jb2RlRml4ZWRMZW5ndGhEYXRhKHJlaW50ZXJwcmV0X2Nh
c3Q8Y29uc3QgdWludDhfdCo+KHN0cmluZy5kYXRhKCkpLCBsZW5ndGgsIDEpOworfQorCitib29s
IE5ldHdvcmtDYWNoZUNvZGVyPENTdHJpbmc+OjpkZWNvZGUoTmV0d29ya0NhY2hlRGVjb2RlciYg
ZGVjb2RlciwgQ1N0cmluZyYgcmVzdWx0KQoreworICAgIHVpbnQzMl90IGxlbmd0aDsKKyAgICBp
ZiAoIWRlY29kZXIuZGVjb2RlKGxlbmd0aCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAg
IGlmIChsZW5ndGggPT0gc3RkOjpudW1lcmljX2xpbWl0czx1aW50MzJfdD46Om1heCgpKSB7Cisg
ICAgICAgIC8vIFRoaXMgaXMgdGhlIG51bGwgc3RyaW5nLgorICAgICAgICByZXN1bHQgPSBDU3Ry
aW5nKCk7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKworICAgIC8vIEJlZm9yZSBhbGxv
Y2F0aW5nIHRoZSBzdHJpbmcsIG1ha2Ugc3VyZSB0aGF0IHRoZSBkZWNvZGVyIGJ1ZmZlciBpcyBi
aWcgZW5vdWdoLgorICAgIGlmICghZGVjb2Rlci5idWZmZXJJc0xhcmdlRW5vdWdoVG9Db250YWlu
PGNoYXI+KGxlbmd0aCkpIHsKKyAgICAgICAgZGVjb2Rlci5tYXJrSW52YWxpZCgpOworICAgICAg
ICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgY2hhciogYnVmZmVyOworICAgIENTdHJpbmcg
c3RyaW5nID0gQ1N0cmluZzo6bmV3VW5pbml0aWFsaXplZChsZW5ndGgsIGJ1ZmZlcik7CisgICAg
aWYgKCFkZWNvZGVyLmRlY29kZUZpeGVkTGVuZ3RoRGF0YShyZWludGVycHJldF9jYXN0PHVpbnQ4
X3QqPihidWZmZXIpLCBsZW5ndGgsIDEpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBy
ZXN1bHQgPSBzdHJpbmc7CisgICAgcmV0dXJuIHRydWU7Cit9CisKKwordm9pZCBOZXR3b3JrQ2Fj
aGVDb2RlcjxTdHJpbmc+OjplbmNvZGUoTmV0d29ya0NhY2hlRW5jb2RlciYgZW5jb2RlciwgY29u
c3QgU3RyaW5nJiBzdHJpbmcpCit7CisgICAgLy8gU3BlY2lhbCBjYXNlIHRoZSBudWxsIHN0cmlu
Zy4KKyAgICBpZiAoc3RyaW5nLmlzTnVsbCgpKSB7CisgICAgICAgIGVuY29kZXIgPDwgc3RkOjpu
dW1lcmljX2xpbWl0czx1aW50MzJfdD46Om1heCgpOworICAgICAgICByZXR1cm47CisgICAgfQor
CisgICAgdWludDMyX3QgbGVuZ3RoID0gc3RyaW5nLmxlbmd0aCgpOworICAgIGJvb2wgaXM4Qml0
ID0gc3RyaW5nLmlzOEJpdCgpOworCisgICAgZW5jb2RlciA8PCBsZW5ndGggPDwgaXM4Qml0Owor
CisgICAgaWYgKGlzOEJpdCkKKyAgICAgICAgZW5jb2Rlci5lbmNvZGVGaXhlZExlbmd0aERhdGEo
cmVpbnRlcnByZXRfY2FzdDxjb25zdCB1aW50OF90Kj4oc3RyaW5nLmNoYXJhY3RlcnM4KCkpLCBs
ZW5ndGggKiBzaXplb2YoTENoYXIpLCBhbGlnbm9mKExDaGFyKSk7CisgICAgZWxzZQorICAgICAg
ICBlbmNvZGVyLmVuY29kZUZpeGVkTGVuZ3RoRGF0YShyZWludGVycHJldF9jYXN0PGNvbnN0IHVp
bnQ4X3QqPihzdHJpbmcuY2hhcmFjdGVyczE2KCkpLCBsZW5ndGggKiBzaXplb2YoVUNoYXIpLCBh
bGlnbm9mKFVDaGFyKSk7Cit9CisKK3RlbXBsYXRlIDx0eXBlbmFtZSBDaGFyYWN0ZXJUeXBlPgor
c3RhdGljIGlubGluZSBib29sIGRlY29kZVN0cmluZ1RleHQoTmV0d29ya0NhY2hlRGVjb2RlciYg
ZGVjb2RlciwgdWludDMyX3QgbGVuZ3RoLCBTdHJpbmcmIHJlc3VsdCkKK3sKKyAgICAvLyBCZWZv
cmUgYWxsb2NhdGluZyB0aGUgc3RyaW5nLCBtYWtlIHN1cmUgdGhhdCB0aGUgZGVjb2RlciBidWZm
ZXIgaXMgYmlnIGVub3VnaC4KKyAgICBpZiAoIWRlY29kZXIuYnVmZmVySXNMYXJnZUVub3VnaFRv
Q29udGFpbjxDaGFyYWN0ZXJUeXBlPihsZW5ndGgpKSB7CisgICAgICAgIGRlY29kZXIubWFya0lu
dmFsaWQoKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKyAgICAKKyAgICBDaGFyYWN0
ZXJUeXBlKiBidWZmZXI7CisgICAgU3RyaW5nIHN0cmluZyA9IFN0cmluZzo6Y3JlYXRlVW5pbml0
aWFsaXplZChsZW5ndGgsIGJ1ZmZlcik7CisgICAgaWYgKCFkZWNvZGVyLmRlY29kZUZpeGVkTGVu
Z3RoRGF0YShyZWludGVycHJldF9jYXN0PHVpbnQ4X3QqPihidWZmZXIpLCBsZW5ndGggKiBzaXpl
b2YoQ2hhcmFjdGVyVHlwZSksIGFsaWdub2YoQ2hhcmFjdGVyVHlwZSkpKQorICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgCisgICAgcmVzdWx0ID0gc3RyaW5nOworICAgIHJldHVybiB0cnVlOyAg
ICAKK30KKworYm9vbCBOZXR3b3JrQ2FjaGVDb2RlcjxTdHJpbmc+OjpkZWNvZGUoTmV0d29ya0Nh
Y2hlRGVjb2RlciYgZGVjb2RlciwgU3RyaW5nJiByZXN1bHQpCit7CisgICAgdWludDMyX3QgbGVu
Z3RoOworICAgIGlmICghZGVjb2Rlci5kZWNvZGUobGVuZ3RoKSkKKyAgICAgICAgcmV0dXJuIGZh
bHNlOworCisgICAgaWYgKGxlbmd0aCA9PSBzdGQ6Om51bWVyaWNfbGltaXRzPHVpbnQzMl90Pjo6
bWF4KCkpIHsKKyAgICAgICAgLy8gVGhpcyBpcyB0aGUgbnVsbCBzdHJpbmcuCisgICAgICAgIHJl
c3VsdCA9IFN0cmluZygpOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisKKyAgICBib29s
IGlzOEJpdDsKKyAgICBpZiAoIWRlY29kZXIuZGVjb2RlKGlzOEJpdCkpCisgICAgICAgIHJldHVy
biBmYWxzZTsKKworICAgIGlmIChpczhCaXQpCisgICAgICAgIHJldHVybiBkZWNvZGVTdHJpbmdU
ZXh0PExDaGFyPihkZWNvZGVyLCBsZW5ndGgsIHJlc3VsdCk7CisgICAgcmV0dXJuIGRlY29kZVN0
cmluZ1RleHQ8VUNoYXI+KGRlY29kZXIsIGxlbmd0aCwgcmVzdWx0KTsKK30KKwordm9pZCBOZXR3
b3JrQ2FjaGVDb2RlcjxXZWJDb3JlOjpDZXJ0aWZpY2F0ZUluZm8+OjplbmNvZGUoTmV0d29ya0Nh
Y2hlRW5jb2RlciYgZW5jb2RlciwgY29uc3QgV2ViQ29yZTo6Q2VydGlmaWNhdGVJbmZvJiBjZXJ0
aWZpY2F0ZUluZm8pCit7CisgICAgLy8gRklYTUU6IENvY29hIENlcnRpZmljYXRlSW5mbyBpcyBh
IENGIG9iamVjdCB0cmVlLiBHZW5lcmFsaXplIENGIHR5cGUgY29kaW5nIHNvIHdlIGRvbid0IG5l
ZWQgdG8gdXNlIEFyZ3VtZW50Q29kZXIgaGVyZS4KKyAgICBJUEM6OkFyZ3VtZW50RW5jb2RlciBh
cmd1bWVudEVuY29kZXI7CisgICAgYXJndW1lbnRFbmNvZGVyIDw8IGNlcnRpZmljYXRlSW5mbzsK
KyAgICBlbmNvZGVyIDw8IHN0YXRpY19jYXN0PGxvbmcgbG9uZz4oYXJndW1lbnRFbmNvZGVyLmJ1
ZmZlclNpemUoKSk7CisgICAgZW5jb2Rlci5lbmNvZGVGaXhlZExlbmd0aERhdGEoYXJndW1lbnRF
bmNvZGVyLmJ1ZmZlcigpLCBhcmd1bWVudEVuY29kZXIuYnVmZmVyU2l6ZSgpLCAxKTsKK30KKwor
Ym9vbCBOZXR3b3JrQ2FjaGVDb2RlcjxXZWJDb3JlOjpDZXJ0aWZpY2F0ZUluZm8+OjpkZWNvZGUo
TmV0d29ya0NhY2hlRGVjb2RlciYgZGVjb2RlciwgV2ViQ29yZTo6Q2VydGlmaWNhdGVJbmZvJiBj
ZXJ0aWZpY2F0ZUluZm8pCit7CisgICAgbG9uZyBsb25nIGNlcnRpZmljYXRlU2l6ZTsKKyAgICBp
ZiAoIWRlY29kZXIuZGVjb2RlKGNlcnRpZmljYXRlU2l6ZSkpCisgICAgICAgIHJldHVybiBmYWxz
ZTsKKyAgICBWZWN0b3I8dWludDhfdD4gZGF0YShjZXJ0aWZpY2F0ZVNpemUpOworICAgIGlmICgh
ZGVjb2Rlci5kZWNvZGVGaXhlZExlbmd0aERhdGEoZGF0YS5kYXRhKCksIGRhdGEuc2l6ZSgpLCAx
KSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIElQQzo6QXJndW1lbnREZWNvZGVyIGFyZ3Vt
ZW50RGVjb2RlcihkYXRhLmRhdGEoKSwgZGF0YS5zaXplKCkpOworICAgIGlmICghYXJndW1lbnRE
ZWNvZGVyLmRlY29kZShjZXJ0aWZpY2F0ZUluZm8pKSB7CisgICAgICAgIGRlY29kZXIubWFya0lu
dmFsaWQoKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKyAgICByZXR1cm4gdHJ1ZTsK
K30KKworfQorCisjZW5kaWYKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL2Nh
Y2hlL05ldHdvcmtDYWNoZUNvZGVycy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL05l
dHdvcmtQcm9jZXNzL2NhY2hlL05ldHdvcmtDYWNoZUNvZGVycy5oCShyZXZpc2lvbiAwKQorKysg
U291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvY2FjaGUvTmV0d29ya0NhY2hlQ29kZXJzLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwyNjEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTAsIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJV
VE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMg
Q09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9S
IEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZu
ZGVmIE5ldHdvcmtDYWNoZUNvZGVyc19oCisjZGVmaW5lIE5ldHdvcmtDYWNoZUNvZGVyc19oCisK
KyNpZiBFTkFCTEUoTkVUV09SS19DQUNIRSkKKworI2luY2x1ZGUgIk5ldHdvcmtDYWNoZURlY29k
ZXIuaCIKKyNpbmNsdWRlICJOZXR3b3JrQ2FjaGVFbmNvZGVyLmgiCisjaW5jbHVkZSA8V2ViQ29y
ZS9DZXJ0aWZpY2F0ZUluZm8uaD4KKyNpbmNsdWRlIDx1dGlsaXR5PgorI2luY2x1ZGUgPHd0Zi9G
b3J3YXJkLmg+CisjaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KKyNpbmNsdWRlIDx3dGYvSGFzaFNl
dC5oPgorI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KKworbmFtZXNwYWNlIFdlYktpdCB7CisKK3Rl
bXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFU+IHN0cnVjdCBOZXR3b3JrQ2FjaGVDb2Rlcjxz
dGQ6OnBhaXI8VCwgVT4+IHsKKyAgICBzdGF0aWMgdm9pZCBlbmNvZGUoTmV0d29ya0NhY2hlRW5j
b2RlciYgZW5jb2RlciwgY29uc3Qgc3RkOjpwYWlyPFQsIFU+JiBwYWlyKQorICAgIHsKKyAgICAg
ICAgZW5jb2RlciA8PCBwYWlyLmZpcnN0IDw8IHBhaXIuc2Vjb25kOworICAgIH0KKworICAgIHN0
YXRpYyBib29sIGRlY29kZShOZXR3b3JrQ2FjaGVEZWNvZGVyJiBkZWNvZGVyLCBzdGQ6OnBhaXI8
VCwgVT4mIHBhaXIpCisgICAgeworICAgICAgICBUIGZpcnN0OworICAgICAgICBpZiAoIWRlY29k
ZXIuZGVjb2RlKGZpcnN0KSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgICAgICBV
IHNlY29uZDsKKyAgICAgICAgaWYgKCFkZWNvZGVyLmRlY29kZShzZWNvbmQpKQorICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOworCisgICAgICAgIHBhaXIuZmlyc3QgPSBmaXJzdDsKKyAgICAgICAg
cGFpci5zZWNvbmQgPSBzZWNvbmQ7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KK307CisK
K3RlbXBsYXRlPHR5cGVuYW1lIFJlcCwgdHlwZW5hbWUgUGVyaW9kPiBzdHJ1Y3QgTmV0d29ya0Nh
Y2hlQ29kZXI8c3RkOjpjaHJvbm86OmR1cmF0aW9uPFJlcCwgUGVyaW9kPj4geworICAgIHN0YXRp
YyB2b2lkIGVuY29kZShOZXR3b3JrQ2FjaGVFbmNvZGVyJiBlbmNvZGVyLCBjb25zdCBzdGQ6OmNo
cm9ubzo6ZHVyYXRpb248UmVwLCBQZXJpb2Q+JiBkdXJhdGlvbikKKyAgICB7CisgICAgICAgIHN0
YXRpY19hc3NlcnQoc3RkOjppc19pbnRlZ3JhbDxSZXA+Ojp2YWx1ZSAmJiBzdGQ6OmlzX3NpZ25l
ZDxSZXA+Ojp2YWx1ZSAmJiBzaXplb2YoUmVwKSA8PSBzaXplb2YoaW50NjRfdCksICJTZXJpYWxp
emF0aW9uIG9mIHRoaXMgUmVwIHR5cGUgaXMgbm90IHN1cHBvcnRlZCB5ZXQuIE9ubHkgc2lnbmVk
IGludGVnZXIgdHlwZSB3aGljaCBjYW4gYmUgZml0IGluIGFuIGludDY0X3QgaXMgY3VycmVudGx5
IHN1cHBvcnRlZC4iKTsKKyAgICAgICAgZW5jb2RlciA8PCBzdGF0aWNfY2FzdDxpbnQ2NF90Pihk
dXJhdGlvbi5jb3VudCgpKTsKKyAgICB9CisKKyAgICBzdGF0aWMgYm9vbCBkZWNvZGUoTmV0d29y
a0NhY2hlRGVjb2RlciYgZGVjb2Rlciwgc3RkOjpjaHJvbm86OmR1cmF0aW9uPFJlcCwgUGVyaW9k
PiYgcmVzdWx0KQorICAgIHsKKyAgICAgICAgaW50NjRfdCBjb3VudDsKKyAgICAgICAgaWYgKCFk
ZWNvZGVyLmRlY29kZShjb3VudCkpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAg
IHJlc3VsdCA9IHN0ZDo6Y2hyb25vOjpkdXJhdGlvbjxSZXAsIFBlcmlvZD4oc3RhdGljX2Nhc3Q8
UmVwPihjb3VudCkpOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9Cit9OworCit0ZW1wbGF0
ZTx0eXBlbmFtZSBLZXlUeXBlLCB0eXBlbmFtZSBWYWx1ZVR5cGU+IHN0cnVjdCBOZXR3b3JrQ2Fj
aGVDb2RlcjxXVEY6OktleVZhbHVlUGFpcjxLZXlUeXBlLCBWYWx1ZVR5cGU+PiB7CisgICAgc3Rh
dGljIHZvaWQgZW5jb2RlKE5ldHdvcmtDYWNoZUVuY29kZXImIGVuY29kZXIsIGNvbnN0IFdURjo6
S2V5VmFsdWVQYWlyPEtleVR5cGUsIFZhbHVlVHlwZT4mIHBhaXIpCisgICAgeworICAgICAgICBl
bmNvZGVyIDw8IHBhaXIua2V5IDw8IHBhaXIudmFsdWU7CisgICAgfQorCisgICAgc3RhdGljIGJv
b2wgZGVjb2RlKE5ldHdvcmtDYWNoZURlY29kZXImIGRlY29kZXIsIFdURjo6S2V5VmFsdWVQYWly
PEtleVR5cGUsIFZhbHVlVHlwZT4mIHBhaXIpCisgICAgeworICAgICAgICBLZXlUeXBlIGtleTsK
KyAgICAgICAgaWYgKCFkZWNvZGVyLmRlY29kZShrZXkpKQorICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOworCisgICAgICAgIFZhbHVlVHlwZSB2YWx1ZTsKKyAgICAgICAgaWYgKCFkZWNvZGVyLmRl
Y29kZSh2YWx1ZSkpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAgICAgcGFpci5r
ZXkgPSBrZXk7CisgICAgICAgIHBhaXIudmFsdWUgPSB2YWx1ZTsKKyAgICAgICAgcmV0dXJuIHRy
dWU7CisgICAgfQorfTsKKwordGVtcGxhdGU8Ym9vbCBmaXhlZFNpemVFbGVtZW50cywgdHlwZW5h
bWUgVCwgc2l6ZV90IGlubGluZUNhcGFjaXR5PiBzdHJ1Y3QgVmVjdG9yTmV0d29ya0NhY2hlQ29k
ZXI7CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQsIHNpemVfdCBpbmxpbmVDYXBhY2l0eT4gc3RydWN0
IFZlY3Rvck5ldHdvcmtDYWNoZUNvZGVyPGZhbHNlLCBULCBpbmxpbmVDYXBhY2l0eT4geworICAg
IHN0YXRpYyB2b2lkIGVuY29kZShOZXR3b3JrQ2FjaGVFbmNvZGVyJiBlbmNvZGVyLCBjb25zdCBW
ZWN0b3I8VCwgaW5saW5lQ2FwYWNpdHk+JiB2ZWN0b3IpCisgICAgeworICAgICAgICBlbmNvZGVy
IDw8IHN0YXRpY19jYXN0PHVpbnQ2NF90Pih2ZWN0b3Iuc2l6ZSgpKTsKKyAgICAgICAgZm9yIChz
aXplX3QgaSA9IDA7IGkgPCB2ZWN0b3Iuc2l6ZSgpOyArK2kpCisgICAgICAgICAgICBlbmNvZGVy
IDw8IHZlY3RvcltpXTsKKyAgICB9CisKKyAgICBzdGF0aWMgYm9vbCBkZWNvZGUoTmV0d29ya0Nh
Y2hlRGVjb2RlciYgZGVjb2RlciwgVmVjdG9yPFQsIGlubGluZUNhcGFjaXR5PiYgdmVjdG9yKQor
ICAgIHsKKyAgICAgICAgdWludDY0X3Qgc2l6ZTsKKyAgICAgICAgaWYgKCFkZWNvZGVyLmRlY29k
ZShzaXplKSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgICAgICBWZWN0b3I8VCwg
aW5saW5lQ2FwYWNpdHk+IHRtcDsKKyAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBzaXpl
OyArK2kpIHsKKyAgICAgICAgICAgIFQgZWxlbWVudDsKKyAgICAgICAgICAgIGlmICghZGVjb2Rl
ci5kZWNvZGUoZWxlbWVudCkpCisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAg
ICAgICAgCisgICAgICAgICAgICB0bXAuYXBwZW5kKFdURjo6bW92ZShlbGVtZW50KSk7CisgICAg
ICAgIH0KKworICAgICAgICB0bXAuc2hyaW5rVG9GaXQoKTsKKyAgICAgICAgdmVjdG9yLnN3YXAo
dG1wKTsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorfTsKKwordGVtcGxhdGU8dHlwZW5h
bWUgVCwgc2l6ZV90IGlubGluZUNhcGFjaXR5PiBzdHJ1Y3QgVmVjdG9yTmV0d29ya0NhY2hlQ29k
ZXI8dHJ1ZSwgVCwgaW5saW5lQ2FwYWNpdHk+IHsKKyAgICBzdGF0aWMgdm9pZCBlbmNvZGUoTmV0
d29ya0NhY2hlRW5jb2RlciYgZW5jb2RlciwgY29uc3QgVmVjdG9yPFQsIGlubGluZUNhcGFjaXR5
PiYgdmVjdG9yKQorICAgIHsKKyAgICAgICAgZW5jb2RlciA8PCBzdGF0aWNfY2FzdDx1aW50NjRf
dD4odmVjdG9yLnNpemUoKSk7CisgICAgICAgIGVuY29kZXIuZW5jb2RlRml4ZWRMZW5ndGhEYXRh
KHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgdWludDhfdCo+KHZlY3Rvci5kYXRhKCkpLCB2ZWN0b3Iu
c2l6ZSgpICogc2l6ZW9mKFQpLCBhbGlnbm9mKFQpKTsKKyAgICB9CisgICAgCisgICAgc3RhdGlj
IGJvb2wgZGVjb2RlKE5ldHdvcmtDYWNoZURlY29kZXImIGRlY29kZXIsIFZlY3RvcjxULCBpbmxp
bmVDYXBhY2l0eT4mIHZlY3RvcikKKyAgICB7CisgICAgICAgIHVpbnQ2NF90IHNpemU7CisgICAg
ICAgIGlmICghZGVjb2Rlci5kZWNvZGUoc2l6ZSkpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7
CisKKyAgICAgICAgLy8gU2luY2Ugd2Uga25vdyB0aGUgdG90YWwgc2l6ZSBvZiB0aGUgZWxlbWVu
dHMsIHdlIGNhbiBhbGxvY2F0ZSB0aGUgdmVjdG9yIGluCisgICAgICAgIC8vIG9uZSBmZWxsIHN3
b29wLiBCZWZvcmUgYWxsb2NhdGluZyB3ZSBtdXN0IGhvd2V2ZXIgbWFrZSBzdXJlIHRoYXQgdGhl
IGRlY29kZXIgYnVmZmVyCisgICAgICAgIC8vIGlzIGJpZyBlbm91Z2guCisgICAgICAgIGlmICgh
ZGVjb2Rlci5idWZmZXJJc0xhcmdlRW5vdWdoVG9Db250YWluPFQ+KHNpemUpKSB7CisgICAgICAg
ICAgICBkZWNvZGVyLm1hcmtJbnZhbGlkKCk7CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7Cisg
ICAgICAgIH0KKworICAgICAgICBWZWN0b3I8VCwgaW5saW5lQ2FwYWNpdHk+IHRlbXA7CisgICAg
ICAgIHRlbXAucmVzaXplKHNpemUpOworCisgICAgICAgIGRlY29kZXIuZGVjb2RlRml4ZWRMZW5n
dGhEYXRhKHJlaW50ZXJwcmV0X2Nhc3Q8dWludDhfdCo+KHRlbXAuZGF0YSgpKSwgc2l6ZSAqIHNp
emVvZihUKSwgYWxpZ25vZihUKSk7CisKKyAgICAgICAgdmVjdG9yLnN3YXAodGVtcCk7CisgICAg
ICAgIHJldHVybiB0cnVlOworICAgIH0KK307CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQsIHNpemVf
dCBpbmxpbmVDYXBhY2l0eT4gc3RydWN0IE5ldHdvcmtDYWNoZUNvZGVyPFZlY3RvcjxULCBpbmxp
bmVDYXBhY2l0eT4+IDogVmVjdG9yTmV0d29ya0NhY2hlQ29kZXI8c3RkOjppc19hcml0aG1ldGlj
PFQ+Ojp2YWx1ZSwgVCwgaW5saW5lQ2FwYWNpdHk+IHsgfTsKKwordGVtcGxhdGU8dHlwZW5hbWUg
S2V5QXJnLCB0eXBlbmFtZSBNYXBwZWRBcmcsIHR5cGVuYW1lIEhhc2hBcmcsIHR5cGVuYW1lIEtl
eVRyYWl0c0FyZywgdHlwZW5hbWUgTWFwcGVkVHJhaXRzQXJnPiBzdHJ1Y3QgTmV0d29ya0NhY2hl
Q29kZXI8SGFzaE1hcDxLZXlBcmcsIE1hcHBlZEFyZywgSGFzaEFyZywgS2V5VHJhaXRzQXJnLCBN
YXBwZWRUcmFpdHNBcmc+PiB7CisgICAgdHlwZWRlZiBIYXNoTWFwPEtleUFyZywgTWFwcGVkQXJn
LCBIYXNoQXJnLCBLZXlUcmFpdHNBcmcsIE1hcHBlZFRyYWl0c0FyZz4gSGFzaE1hcFR5cGU7CisK
KyAgICBzdGF0aWMgdm9pZCBlbmNvZGUoTmV0d29ya0NhY2hlRW5jb2RlciYgZW5jb2RlciwgY29u
c3QgSGFzaE1hcFR5cGUmIGhhc2hNYXApCisgICAgeworICAgICAgICBlbmNvZGVyIDw8IHN0YXRp
Y19jYXN0PHVpbnQ2NF90PihoYXNoTWFwLnNpemUoKSk7CisgICAgICAgIGZvciAodHlwZW5hbWUg
SGFzaE1hcFR5cGU6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gaGFzaE1hcC5iZWdpbigpLCBlbmQgPSBo
YXNoTWFwLmVuZCgpOyBpdCAhPSBlbmQ7ICsraXQpCisgICAgICAgICAgICBlbmNvZGVyIDw8ICpp
dDsKKyAgICB9CisKKyAgICBzdGF0aWMgYm9vbCBkZWNvZGUoTmV0d29ya0NhY2hlRGVjb2RlciYg
ZGVjb2RlciwgSGFzaE1hcFR5cGUmIGhhc2hNYXApCisgICAgeworICAgICAgICB1aW50NjRfdCBo
YXNoTWFwU2l6ZTsKKyAgICAgICAgaWYgKCFkZWNvZGVyLmRlY29kZShoYXNoTWFwU2l6ZSkpCisg
ICAgICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAgICAgSGFzaE1hcFR5cGUgdGVtcEhhc2hN
YXA7CisgICAgICAgIGZvciAodWludDY0X3QgaSA9IDA7IGkgPCBoYXNoTWFwU2l6ZTsgKytpKSB7
CisgICAgICAgICAgICBLZXlBcmcga2V5OworICAgICAgICAgICAgTWFwcGVkQXJnIHZhbHVlOwor
ICAgICAgICAgICAgaWYgKCFkZWNvZGVyLmRlY29kZShrZXkpKQorICAgICAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsKKyAgICAgICAgICAgIGlmICghZGVjb2Rlci5kZWNvZGUodmFsdWUpKQorICAg
ICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgICAgICAgICAgaWYgKCF0ZW1wSGFzaE1h
cC5hZGQoa2V5LCB2YWx1ZSkuaXNOZXdFbnRyeSkgeworICAgICAgICAgICAgICAgIC8vIFRoZSBo
YXNoIG1hcCBhbHJlYWR5IGhhcyB0aGUgc3BlY2lmaWVkIGtleSwgYmFpbC4KKyAgICAgICAgICAg
ICAgICBkZWNvZGVyLm1hcmtJbnZhbGlkKCk7CisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgaGFzaE1hcC5zd2FwKHRlbXBI
YXNoTWFwKTsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorfTsKKwordGVtcGxhdGU8dHlw
ZW5hbWUgS2V5QXJnLCB0eXBlbmFtZSBIYXNoQXJnLCB0eXBlbmFtZSBLZXlUcmFpdHNBcmc+IHN0
cnVjdCBOZXR3b3JrQ2FjaGVDb2RlcjxIYXNoU2V0PEtleUFyZywgSGFzaEFyZywgS2V5VHJhaXRz
QXJnPj4geworICAgIHR5cGVkZWYgSGFzaFNldDxLZXlBcmcsIEhhc2hBcmcsIEtleVRyYWl0c0Fy
Zz4gSGFzaFNldFR5cGU7CisKKyAgICBzdGF0aWMgdm9pZCBlbmNvZGUoTmV0d29ya0NhY2hlRW5j
b2RlciYgZW5jb2RlciwgY29uc3QgSGFzaFNldFR5cGUmIGhhc2hTZXQpCisgICAgeworICAgICAg
ICBlbmNvZGVyIDw8IHN0YXRpY19jYXN0PHVpbnQ2NF90PihoYXNoU2V0LnNpemUoKSk7CisgICAg
ICAgIGZvciAodHlwZW5hbWUgSGFzaFNldFR5cGU6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gaGFzaFNl
dC5iZWdpbigpLCBlbmQgPSBoYXNoU2V0LmVuZCgpOyBpdCAhPSBlbmQ7ICsraXQpCisgICAgICAg
ICAgICBlbmNvZGVyIDw8ICppdDsKKyAgICB9CisKKyAgICBzdGF0aWMgYm9vbCBkZWNvZGUoTmV0
d29ya0NhY2hlRGVjb2RlciYgZGVjb2RlciwgSGFzaFNldFR5cGUmIGhhc2hTZXQpCisgICAgewor
ICAgICAgICB1aW50NjRfdCBoYXNoU2V0U2l6ZTsKKyAgICAgICAgaWYgKCFkZWNvZGVyLmRlY29k
ZShoYXNoU2V0U2l6ZSkpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAgICAgSGFz
aFNldFR5cGUgdGVtcEhhc2hTZXQ7CisgICAgICAgIGZvciAodWludDY0X3QgaSA9IDA7IGkgPCBo
YXNoU2V0U2l6ZTsgKytpKSB7CisgICAgICAgICAgICBLZXlBcmcga2V5OworICAgICAgICAgICAg
aWYgKCFkZWNvZGVyLmRlY29kZShrZXkpKQorICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsK
KworICAgICAgICAgICAgaWYgKCF0ZW1wSGFzaFNldC5hZGQoa2V5KS5pc05ld0VudHJ5KSB7Cisg
ICAgICAgICAgICAgICAgLy8gVGhlIGhhc2ggbWFwIGFscmVhZHkgaGFzIHRoZSBzcGVjaWZpZWQg
a2V5LCBiYWlsLgorICAgICAgICAgICAgICAgIGRlY29kZXIubWFya0ludmFsaWQoKTsKKyAgICAg
ICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAg
ICAgICBoYXNoU2V0LnN3YXAodGVtcEhhc2hTZXQpOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAg
ICB9Cit9OworCit0ZW1wbGF0ZTw+IHN0cnVjdCBOZXR3b3JrQ2FjaGVDb2RlcjxBdG9taWNTdHJp
bmc+IHsKKyAgICBzdGF0aWMgdm9pZCBlbmNvZGUoTmV0d29ya0NhY2hlRW5jb2RlciYsIGNvbnN0
IEF0b21pY1N0cmluZyYpOworICAgIHN0YXRpYyBib29sIGRlY29kZShOZXR3b3JrQ2FjaGVEZWNv
ZGVyJiwgQXRvbWljU3RyaW5nJik7Cit9OworCit0ZW1wbGF0ZTw+IHN0cnVjdCBOZXR3b3JrQ2Fj
aGVDb2RlcjxDU3RyaW5nPiB7CisgICAgc3RhdGljIHZvaWQgZW5jb2RlKE5ldHdvcmtDYWNoZUVu
Y29kZXImLCBjb25zdCBDU3RyaW5nJik7CisgICAgc3RhdGljIGJvb2wgZGVjb2RlKE5ldHdvcmtD
YWNoZURlY29kZXImLCBDU3RyaW5nJik7Cit9OworCit0ZW1wbGF0ZTw+IHN0cnVjdCBOZXR3b3Jr
Q2FjaGVDb2RlcjxTdHJpbmc+IHsKKyAgICBzdGF0aWMgdm9pZCBlbmNvZGUoTmV0d29ya0NhY2hl
RW5jb2RlciYsIGNvbnN0IFN0cmluZyYpOworICAgIHN0YXRpYyBib29sIGRlY29kZShOZXR3b3Jr
Q2FjaGVEZWNvZGVyJiwgU3RyaW5nJik7Cit9OworCit0ZW1wbGF0ZTw+IHN0cnVjdCBOZXR3b3Jr
Q2FjaGVDb2RlcjxXZWJDb3JlOjpDZXJ0aWZpY2F0ZUluZm8+IHsKKyAgICBzdGF0aWMgdm9pZCBl
bmNvZGUoTmV0d29ya0NhY2hlRW5jb2RlciYsIGNvbnN0IFdlYkNvcmU6OkNlcnRpZmljYXRlSW5m
byYpOworICAgIHN0YXRpYyBib29sIGRlY29kZShOZXR3b3JrQ2FjaGVEZWNvZGVyJiwgV2ViQ29y
ZTo6Q2VydGlmaWNhdGVJbmZvJik7Cit9OworCit9CisKKyNlbmRpZgorI2VuZGlmCkluZGV4OiBT
b3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGVEZWNvZGVyLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3
b3JrQ2FjaGVEZWNvZGVyLmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9XZWJLaXQyL05ldHdv
cmtQcm9jZXNzL2NhY2hlL05ldHdvcmtDYWNoZURlY29kZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0wLDAgKzEsMTYwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEwLCAyMDExLCAyMDE0IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJ
UycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9S
UworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwor
ICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisg
KiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZp
Zy5oIgorI2luY2x1ZGUgIk5ldHdvcmtDYWNoZURlY29kZXIuaCIKKworI2lmIEVOQUJMRShORVRX
T1JLX0NBQ0hFKQorCisjaW5jbHVkZSAiTmV0d29ya0NhY2hlRW5jb2Rlci5oIgorCituYW1lc3Bh
Y2UgV2ViS2l0IHsKKworTmV0d29ya0NhY2hlRGVjb2Rlcjo6TmV0d29ya0NhY2hlRGVjb2Rlcihj
b25zdCB1aW50OF90KiBidWZmZXIsIHNpemVfdCBidWZmZXJTaXplKQorICAgIDogbV9idWZmZXIo
YnVmZmVyKQorICAgICwgbV9idWZmZXJQb3MoYnVmZmVyKQorICAgICwgbV9idWZmZXJFbmQoYnVm
ZmVyICsgYnVmZmVyU2l6ZSkKKyAgICAsIG1fY2hlY2tzdW0oMCkKK3sKK30KKworTmV0d29ya0Nh
Y2hlRGVjb2Rlcjo6fk5ldHdvcmtDYWNoZURlY29kZXIoKQoreworfQorCitzdGF0aWMgaW5saW5l
IHVpbnQ4X3QqIHJvdW5kVXBUb0FsaWdubWVudChjb25zdCB1aW50OF90KiBwdHIsIHVuc2lnbmVk
IGFsaWdubWVudCkKK3sKKyAgICAvLyBBc3NlcnQgdGhhdCB0aGUgYWxpZ25tZW50IGlzIGEgcG93
ZXIgb2YgMi4KKyAgICBBU1NFUlQoYWxpZ25tZW50ICYmICEoYWxpZ25tZW50ICYgKGFsaWdubWVu
dCAtIDEpKSk7CisKKyAgICB1aW50cHRyX3QgYWxpZ25tZW50TWFzayA9IGFsaWdubWVudCAtIDE7
CisgICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8dWludDhfdCo+KChyZWludGVycHJldF9jYXN0
PHVpbnRwdHJfdD4ocHRyKSArIGFsaWdubWVudE1hc2spICYgfmFsaWdubWVudE1hc2spOworfQor
CitzdGF0aWMgaW5saW5lIGJvb2wgYWxpZ25lZEJ1ZmZlcklzTGFyZ2VFbm91Z2hUb0NvbnRhaW4o
Y29uc3QgdWludDhfdCogYWxpZ25lZFBvc2l0aW9uLCBjb25zdCB1aW50OF90KiBidWZmZXJFbmQs
IHNpemVfdCBzaXplKQoreworICAgIHJldHVybiBidWZmZXJFbmQgPj0gYWxpZ25lZFBvc2l0aW9u
ICYmIHN0YXRpY19jYXN0PHNpemVfdD4oYnVmZmVyRW5kIC0gYWxpZ25lZFBvc2l0aW9uKSA+PSBz
aXplOworfQorCitib29sIE5ldHdvcmtDYWNoZURlY29kZXI6OmFsaWduQnVmZmVyUG9zaXRpb24o
dW5zaWduZWQgYWxpZ25tZW50LCBzaXplX3Qgc2l6ZSkKK3sKKyAgICB1aW50OF90KiBhbGlnbmVk
UG9zaXRpb24gPSByb3VuZFVwVG9BbGlnbm1lbnQobV9idWZmZXJQb3MsIGFsaWdubWVudCk7Cisg
ICAgaWYgKCFhbGlnbmVkQnVmZmVySXNMYXJnZUVub3VnaFRvQ29udGFpbihhbGlnbmVkUG9zaXRp
b24sIG1fYnVmZmVyRW5kLCBzaXplKSkgeworICAgICAgICAvLyBXZSd2ZSB3YWxrZWQgb2ZmIHRo
ZSBlbmQgb2YgdGhpcyBidWZmZXIuCisgICAgICAgIG1hcmtJbnZhbGlkKCk7CisgICAgICAgIHJl
dHVybiBmYWxzZTsKKyAgICB9CisgICAgCisgICAgbV9idWZmZXJQb3MgPSBhbGlnbmVkUG9zaXRp
b247CisgICAgcmV0dXJuIHRydWU7Cit9CisKK2Jvb2wgTmV0d29ya0NhY2hlRGVjb2Rlcjo6YnVm
ZmVySXNMYXJnZUVub3VnaFRvQ29udGFpbih1bnNpZ25lZCBhbGlnbm1lbnQsIHNpemVfdCBzaXpl
KSBjb25zdAoreworICAgIHJldHVybiBhbGlnbmVkQnVmZmVySXNMYXJnZUVub3VnaFRvQ29udGFp
bihyb3VuZFVwVG9BbGlnbm1lbnQobV9idWZmZXJQb3MsIGFsaWdubWVudCksIG1fYnVmZmVyRW5k
LCBzaXplKTsKK30KKworYm9vbCBOZXR3b3JrQ2FjaGVEZWNvZGVyOjpkZWNvZGVGaXhlZExlbmd0
aERhdGEodWludDhfdCogZGF0YSwgc2l6ZV90IHNpemUsIHVuc2lnbmVkIGFsaWdubWVudCkKK3sK
KyAgICBpZiAoIWFsaWduQnVmZmVyUG9zaXRpb24oYWxpZ25tZW50LCBzaXplKSkKKyAgICAgICAg
cmV0dXJuIGZhbHNlOworCisgICAgbWVtY3B5KGRhdGEsIG1fYnVmZmVyUG9zLCBzaXplKTsKKyAg
ICBtX2J1ZmZlclBvcyArPSBzaXplOworCisgICAgTmV0d29ya0NhY2hlRW5jb2Rlcjo6dXBkYXRl
Q2hlY2tzdW1Gb3JEYXRhKG1fY2hlY2tzdW0sIGRhdGEsIHNpemUpOworICAgIHJldHVybiB0cnVl
OworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBUeXBlPgorYm9vbCBOZXR3b3JrQ2FjaGVEZWNvZGVy
OjpkZWNvZGVOdW1iZXIoVHlwZSYgdmFsdWUpCit7CisgICAgaWYgKCFhbGlnbkJ1ZmZlclBvc2l0
aW9uKHNpemVvZih2YWx1ZSksIHNpemVvZih2YWx1ZSkpKQorICAgICAgICByZXR1cm4gZmFsc2U7
CisKKyAgICBtZW1jcHkoJnZhbHVlLCBtX2J1ZmZlclBvcywgc2l6ZW9mKHZhbHVlKSk7CisgICAg
bV9idWZmZXJQb3MgKz0gc2l6ZW9mKFR5cGUpOworCisgICAgTmV0d29ya0NhY2hlRW5jb2Rlcjo6
dXBkYXRlQ2hlY2tzdW1Gb3JOdW1iZXIobV9jaGVja3N1bSwgdmFsdWUpOworICAgIHJldHVybiB0
cnVlOworfQorCitib29sIE5ldHdvcmtDYWNoZURlY29kZXI6OmRlY29kZShib29sJiByZXN1bHQp
Cit7CisgICAgcmV0dXJuIGRlY29kZU51bWJlcihyZXN1bHQpOworfQorCitib29sIE5ldHdvcmtD
YWNoZURlY29kZXI6OmRlY29kZSh1aW50OF90JiByZXN1bHQpCit7CisgICAgcmV0dXJuIGRlY29k
ZU51bWJlcihyZXN1bHQpOworfQorCitib29sIE5ldHdvcmtDYWNoZURlY29kZXI6OmRlY29kZSh1
aW50MTZfdCYgcmVzdWx0KQoreworICAgIHJldHVybiBkZWNvZGVOdW1iZXIocmVzdWx0KTsKK30K
KworYm9vbCBOZXR3b3JrQ2FjaGVEZWNvZGVyOjpkZWNvZGUodWludDMyX3QmIHJlc3VsdCkKK3sK
KyAgICByZXR1cm4gZGVjb2RlTnVtYmVyKHJlc3VsdCk7Cit9CisKK2Jvb2wgTmV0d29ya0NhY2hl
RGVjb2Rlcjo6ZGVjb2RlKHVpbnQ2NF90JiByZXN1bHQpCit7CisgICAgcmV0dXJuIGRlY29kZU51
bWJlcihyZXN1bHQpOworfQorCitib29sIE5ldHdvcmtDYWNoZURlY29kZXI6OmRlY29kZShpbnQz
Ml90JiByZXN1bHQpCit7CisgICAgcmV0dXJuIGRlY29kZU51bWJlcihyZXN1bHQpOworfQorCiti
b29sIE5ldHdvcmtDYWNoZURlY29kZXI6OmRlY29kZShpbnQ2NF90JiByZXN1bHQpCit7CisgICAg
cmV0dXJuIGRlY29kZU51bWJlcihyZXN1bHQpOworfQorCitib29sIE5ldHdvcmtDYWNoZURlY29k
ZXI6OmRlY29kZShmbG9hdCYgcmVzdWx0KQoreworICAgIHJldHVybiBkZWNvZGVOdW1iZXIocmVz
dWx0KTsKK30KKworYm9vbCBOZXR3b3JrQ2FjaGVEZWNvZGVyOjpkZWNvZGUoZG91YmxlJiByZXN1
bHQpCit7CisgICAgcmV0dXJuIGRlY29kZU51bWJlcihyZXN1bHQpOworfQorCitib29sIE5ldHdv
cmtDYWNoZURlY29kZXI6OnZlcmlmeUNoZWNrc3VtKCkKK3sKKyAgICB1bnNpZ25lZCBjb21wdXRl
ZENoZWNrc3VtID0gbV9jaGVja3N1bTsKKyAgICB1bnNpZ25lZCBkZWNvZGVkQ2hlY2tzdW07Cisg
ICAgaWYgKCFkZWNvZGVOdW1iZXIoZGVjb2RlZENoZWNrc3VtKSkKKyAgICAgICAgcmV0dXJuIGZh
bHNlOworICAgIHJldHVybiBjb21wdXRlZENoZWNrc3VtID09IGRlY29kZWRDaGVja3N1bTsKK30K
KworfQorCisjZW5kaWYKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL2NhY2hl
L05ldHdvcmtDYWNoZURlY29kZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9OZXR3
b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGVEZWNvZGVyLmgJKHJldmlzaW9uIDApCisrKyBT
b3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGVEZWNvZGVyLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxMDQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBg
YEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJ
QlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lO
RVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIE5l
dHdvcmtDYWNoZURlY29kZXJfaAorI2RlZmluZSBOZXR3b3JrQ2FjaGVEZWNvZGVyX2gKKworI2lm
IEVOQUJMRShORVRXT1JLX0NBQ0hFKQorCisjaW5jbHVkZSAiTmV0d29ya0NhY2hlQ29kZXIuaCIK
KworbmFtZXNwYWNlIFdlYktpdCB7CisKK2NsYXNzIE5ldHdvcmtDYWNoZURlY29kZXIgeworICAg
IFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOworcHVibGljOgorICAgIE5ldHdvcmtDYWNoZURlY29k
ZXIoY29uc3QgdWludDhfdCogYnVmZmVyLCBzaXplX3QgYnVmZmVyU2l6ZSk7CisgICAgdmlydHVh
bCB+TmV0d29ya0NhY2hlRGVjb2RlcigpOworCisgICAgc2l6ZV90IGxlbmd0aCgpIGNvbnN0IHsg
cmV0dXJuIG1fYnVmZmVyRW5kIC0gbV9idWZmZXI7IH0KKyAgICBzaXplX3QgY3VycmVudE9mZnNl
dCgpIGNvbnN0IHsgcmV0dXJuIG1fYnVmZmVyUG9zIC0gbV9idWZmZXI7IH0KKworICAgIGJvb2wg
aXNJbnZhbGlkKCkgY29uc3QgeyByZXR1cm4gbV9idWZmZXJQb3MgPiBtX2J1ZmZlckVuZDsgfQor
ICAgIHZvaWQgbWFya0ludmFsaWQoKSB7IG1fYnVmZmVyUG9zID0gbV9idWZmZXJFbmQgKyAxOyB9
CisKKyAgICBib29sIHZlcmlmeUNoZWNrc3VtKCk7CisKKyAgICBib29sIGRlY29kZUZpeGVkTGVu
Z3RoRGF0YSh1aW50OF90Kiwgc2l6ZV90LCB1bnNpZ25lZCBhbGlnbm1lbnQpOworCisgICAgYm9v
bCBkZWNvZGUoYm9vbCYpOworICAgIGJvb2wgZGVjb2RlKHVpbnQ4X3QmKTsKKyAgICBib29sIGRl
Y29kZSh1aW50MTZfdCYpOworICAgIGJvb2wgZGVjb2RlKHVpbnQzMl90Jik7CisgICAgYm9vbCBk
ZWNvZGUodWludDY0X3QmKTsKKyAgICBib29sIGRlY29kZShpbnQzMl90Jik7CisgICAgYm9vbCBk
ZWNvZGUoaW50NjRfdCYpOworICAgIGJvb2wgZGVjb2RlKGZsb2F0Jik7CisgICAgYm9vbCBkZWNv
ZGUoZG91YmxlJik7CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBib29sIGRlY29kZUVudW0o
VCYgcmVzdWx0KQorICAgIHsKKyAgICAgICAgc3RhdGljX2Fzc2VydChzaXplb2YoVCkgPD0gOCwg
IkVudW0gdHlwZSBUIG11c3Qgbm90IGJlIGxhcmdlciB0aGFuIDY0IGJpdHMhIik7CisKKyAgICAg
ICAgdWludDY0X3QgdmFsdWU7CisgICAgICAgIGlmICghZGVjb2RlKHZhbHVlKSkKKyAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgCisgICAgICAgIHJlc3VsdCA9IHN0YXRpY19jYXN0
PFQ+KHZhbHVlKTsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorCisgICAgdGVtcGxhdGU8
dHlwZW5hbWUgVD4gYm9vbCBkZWNvZGUoVCYgdCkKKyAgICB7CisgICAgICAgIHJldHVybiBOZXR3
b3JrQ2FjaGVDb2RlcjxUPjo6ZGVjb2RlKCp0aGlzLCB0KTsKKyAgICB9CisKKyAgICB0ZW1wbGF0
ZTx0eXBlbmFtZSBUPgorICAgIGJvb2wgYnVmZmVySXNMYXJnZUVub3VnaFRvQ29udGFpbihzaXpl
X3QgbnVtRWxlbWVudHMpIGNvbnN0CisgICAgeworICAgICAgICBzdGF0aWNfYXNzZXJ0KHN0ZDo6
aXNfYXJpdGhtZXRpYzxUPjo6dmFsdWUsICJUeXBlIFQgbXVzdCBoYXZlIGEgZml4ZWQsIGtub3du
IGVuY29kZWQgc2l6ZSEiKTsKKworICAgICAgICBpZiAobnVtRWxlbWVudHMgPiBzdGQ6Om51bWVy
aWNfbGltaXRzPHNpemVfdD46Om1heCgpIC8gc2l6ZW9mKFQpKQorICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOworCisgICAgICAgIHJldHVybiBidWZmZXJJc0xhcmdlRW5vdWdoVG9Db250YWluKGFs
aWdub2YoVCksIG51bUVsZW1lbnRzICogc2l6ZW9mKFQpKTsKKyAgICB9CisKK3ByaXZhdGU6Cisg
ICAgYm9vbCBhbGlnbkJ1ZmZlclBvc2l0aW9uKHVuc2lnbmVkIGFsaWdubWVudCwgc2l6ZV90KTsK
KyAgICBib29sIGJ1ZmZlcklzTGFyZ2VFbm91Z2hUb0NvbnRhaW4odW5zaWduZWQgYWxpZ25tZW50
LCBzaXplX3QpIGNvbnN0OworICAgIHRlbXBsYXRlPHR5cGVuYW1lIFR5cGU+IGJvb2wgZGVjb2Rl
TnVtYmVyKFR5cGUmKTsKKworICAgIGNvbnN0IHVpbnQ4X3QqIG1fYnVmZmVyOworICAgIGNvbnN0
IHVpbnQ4X3QqIG1fYnVmZmVyUG9zOworICAgIGNvbnN0IHVpbnQ4X3QqIG1fYnVmZmVyRW5kOwor
CisgICAgdW5zaWduZWQgbV9jaGVja3N1bTsKK307CisKK30gCisKKyNlbmRpZgorI2VuZGlmCklu
ZGV4OiBTb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGVFbmNv
ZGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9jYWNo
ZS9OZXR3b3JrQ2FjaGVFbmNvZGVyLmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9XZWJLaXQy
L05ldHdvcmtQcm9jZXNzL2NhY2hlL05ldHdvcmtDYWNoZUVuY29kZXIuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0wLDAgKzEsMTM2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEwLCAyMDE0IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJ
UycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9S
UworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwor
ICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisg
KiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZp
Zy5oIgorI2luY2x1ZGUgIk5ldHdvcmtDYWNoZUVuY29kZXIuaCIKKworI2lmIEVOQUJMRShORVRX
T1JLX0NBQ0hFKQorCituYW1lc3BhY2UgV2ViS2l0IHsKKworTmV0d29ya0NhY2hlRW5jb2Rlcjo6
TmV0d29ya0NhY2hlRW5jb2RlcigpCisgICAgOiBtX2NoZWNrc3VtKDApCit7Cit9CisKK05ldHdv
cmtDYWNoZUVuY29kZXI6On5OZXR3b3JrQ2FjaGVFbmNvZGVyKCkKK3sKK30KKworc3RhdGljIGlu
bGluZSBzaXplX3Qgcm91bmRVcFRvQWxpZ25tZW50KHNpemVfdCB2YWx1ZSwgdW5zaWduZWQgYWxp
Z25tZW50KQoreworICAgIHJldHVybiAoKHZhbHVlICsgYWxpZ25tZW50IC0gMSkgLyBhbGlnbm1l
bnQpICogYWxpZ25tZW50OworfQorCit1aW50OF90KiBOZXR3b3JrQ2FjaGVFbmNvZGVyOjpncm93
KHVuc2lnbmVkIGFsaWdubWVudCwgc2l6ZV90IHNpemUpCit7CisgICAgc2l6ZV90IGFsaWduZWRT
aXplID0gcm91bmRVcFRvQWxpZ25tZW50KG1fYnVmZmVyLnNpemUoKSwgYWxpZ25tZW50KTsKKwor
ICAgIG1fYnVmZmVyLmdyb3coYWxpZ25lZFNpemUgKyBzaXplKTsKKyAgICAKKyAgICByZXR1cm4g
bV9idWZmZXIuZGF0YSgpICsgYWxpZ25lZFNpemU7Cit9CisKK3ZvaWQgTmV0d29ya0NhY2hlRW5j
b2Rlcjo6dXBkYXRlQ2hlY2tzdW1Gb3JEYXRhKHVuc2lnbmVkJiBjaGVja3N1bSwgY29uc3QgdWlu
dDhfdCogZGF0YSwgc2l6ZV90IHNpemUpCit7CisgICAgLy8gRklYTUU6IGhhc2hNZW1vcnkgc2hv
dWxkIG5vdCByZXF1aXJlIGFsaWdubWVudC4KKyAgICBzaXplX3QgaGFzaFNpemUgPSBzaXplIC0g
c2l6ZSAlIDI7CisgICAgdW5zaWduZWQgaGFzaCA9IFN0cmluZ0hhc2hlcjo6aGFzaE1lbW9yeShk
YXRhLCBoYXNoU2l6ZSkgXiBOZXR3b3JrQ2FjaGVFbmNvZGVyOjpTYWx0PHVpbnQ4X3QqPjo6dmFs
dWU7CisgICAgY2hlY2tzdW0gPSBXVEY6OnBhaXJJbnRIYXNoKGNoZWNrc3VtLCBoYXNoKTsKK30K
Kwordm9pZCBOZXR3b3JrQ2FjaGVFbmNvZGVyOjplbmNvZGVGaXhlZExlbmd0aERhdGEoY29uc3Qg
dWludDhfdCogZGF0YSwgc2l6ZV90IHNpemUsIHVuc2lnbmVkIGFsaWdubWVudCkKK3sKKyAgICBB
U1NFUlQoIShyZWludGVycHJldF9jYXN0PHVpbnRwdHJfdD4oZGF0YSkgJSBhbGlnbm1lbnQpKTsK
KworICAgIHVwZGF0ZUNoZWNrc3VtRm9yRGF0YShtX2NoZWNrc3VtLCBkYXRhLCBzaXplKTsKKwor
ICAgIHVpbnQ4X3QqIGJ1ZmZlciA9IGdyb3coYWxpZ25tZW50LCBzaXplKTsKKyAgICBtZW1jcHko
YnVmZmVyLCBkYXRhLCBzaXplKTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgVHlwZT4KK3ZvaWQg
TmV0d29ya0NhY2hlRW5jb2Rlcjo6ZW5jb2RlTnVtYmVyKFR5cGUgdmFsdWUpCit7CisgICAgdWlu
dDhfdCogYnVmZmVyID0gZ3JvdyhzaXplb2YoVHlwZSksIHNpemVvZihUeXBlKSk7CisKKyAgICBO
ZXR3b3JrQ2FjaGVFbmNvZGVyOjp1cGRhdGVDaGVja3N1bUZvck51bWJlcihtX2NoZWNrc3VtLCB2
YWx1ZSk7CisKKyAgICBtZW1jcHkoYnVmZmVyLCAmdmFsdWUsIHNpemVvZihUeXBlKSk7Cit9CisK
K3ZvaWQgTmV0d29ya0NhY2hlRW5jb2Rlcjo6ZW5jb2RlKGJvb2wgdmFsdWUpCit7CisgICAgZW5j
b2RlTnVtYmVyKHZhbHVlKTsKK30KKwordm9pZCBOZXR3b3JrQ2FjaGVFbmNvZGVyOjplbmNvZGUo
dWludDhfdCB2YWx1ZSkKK3sKKyAgICBlbmNvZGVOdW1iZXIodmFsdWUpOworfQorCit2b2lkIE5l
dHdvcmtDYWNoZUVuY29kZXI6OmVuY29kZSh1aW50MTZfdCB2YWx1ZSkKK3sKKyAgICBlbmNvZGVO
dW1iZXIodmFsdWUpOworfQorCit2b2lkIE5ldHdvcmtDYWNoZUVuY29kZXI6OmVuY29kZSh1aW50
MzJfdCB2YWx1ZSkKK3sKKyAgICBlbmNvZGVOdW1iZXIodmFsdWUpOworfQorCit2b2lkIE5ldHdv
cmtDYWNoZUVuY29kZXI6OmVuY29kZSh1aW50NjRfdCB2YWx1ZSkKK3sKKyAgICBlbmNvZGVOdW1i
ZXIodmFsdWUpOworfQorCit2b2lkIE5ldHdvcmtDYWNoZUVuY29kZXI6OmVuY29kZShpbnQzMl90
IHZhbHVlKQoreworICAgIGVuY29kZU51bWJlcih2YWx1ZSk7Cit9CisKK3ZvaWQgTmV0d29ya0Nh
Y2hlRW5jb2Rlcjo6ZW5jb2RlKGludDY0X3QgdmFsdWUpCit7CisgICAgZW5jb2RlTnVtYmVyKHZh
bHVlKTsKK30KKwordm9pZCBOZXR3b3JrQ2FjaGVFbmNvZGVyOjplbmNvZGUoZmxvYXQgdmFsdWUp
Cit7CisgICAgZW5jb2RlTnVtYmVyKHZhbHVlKTsKK30KKwordm9pZCBOZXR3b3JrQ2FjaGVFbmNv
ZGVyOjplbmNvZGUoZG91YmxlIHZhbHVlKQoreworICAgIGVuY29kZU51bWJlcih2YWx1ZSk7Cit9
CisKK3ZvaWQgTmV0d29ya0NhY2hlRW5jb2Rlcjo6ZW5jb2RlQ2hlY2tzdW0oKQoreworICAgIGVu
Y29kZU51bWJlcihtX2NoZWNrc3VtKTsKK30KKworfQorCisjZW5kaWYKSW5kZXg6IFNvdXJjZS9X
ZWJLaXQyL05ldHdvcmtQcm9jZXNzL2NhY2hlL05ldHdvcmtDYWNoZUVuY29kZXIuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGVF
bmNvZGVyLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9j
YWNoZS9OZXR3b3JrQ2FjaGVFbmNvZGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxMTYg
QEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICog
VEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9D
VVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KKyAqLworCisjaWZuZGVmIE5ldHdvcmtDYWNoZUVuY29kZXJfaAorI2RlZmluZSBO
ZXR3b3JrQ2FjaGVFbmNvZGVyX2gKKworI2lmIEVOQUJMRShORVRXT1JLX0NBQ0hFKQorCisjaW5j
bHVkZSAiTmV0d29ya0NhY2hlQ29kZXIuaCIKKworI2luY2x1ZGUgPHd0Zi9TdHJpbmdIYXNoZXIu
aD4KKyNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CisKK25hbWVzcGFjZSBXZWJLaXQgeworCitjbGFz
cyBOZXR3b3JrQ2FjaGVFbmNvZGVyOworY2xhc3MgRGF0YVJlZmVyZW5jZTsKKworY2xhc3MgTmV0
d29ya0NhY2hlRW5jb2RlciB7CisgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CitwdWJsaWM6
CisgICAgTmV0d29ya0NhY2hlRW5jb2RlcigpOworICAgIHZpcnR1YWwgfk5ldHdvcmtDYWNoZUVu
Y29kZXIoKTsKKworICAgIHZvaWQgZW5jb2RlQ2hlY2tzdW0oKTsKKyAgICB2b2lkIGVuY29kZUZp
eGVkTGVuZ3RoRGF0YShjb25zdCB1aW50OF90Kiwgc2l6ZV90LCB1bnNpZ25lZCBhbGlnbm1lbnQp
OworCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4gdm9pZCBlbmNvZGVFbnVtKFQgdCkKKyAgICB7
CisgICAgICAgIENPTVBJTEVfQVNTRVJUKHNpemVvZihUKSA8PSBzaXplb2YodWludDY0X3QpLCBl
bnVtX3R5cGVfbXVzdF9ub3RfYmVfbGFyZ2VyX3RoYW5fNjRfYml0cyk7CisKKyAgICAgICAgZW5j
b2RlKHN0YXRpY19jYXN0PHVpbnQ2NF90Pih0KSk7CisgICAgfQorCisgICAgdGVtcGxhdGU8dHlw
ZW5hbWUgVD4gdm9pZCBlbmNvZGUoY29uc3QgVCYgdCkKKyAgICB7CisgICAgICAgIE5ldHdvcmtD
YWNoZUNvZGVyPFQ+OjplbmNvZGUoKnRoaXMsIHQpOworICAgIH0KKworICAgIHRlbXBsYXRlPHR5
cGVuYW1lIFQ+IE5ldHdvcmtDYWNoZUVuY29kZXImIG9wZXJhdG9yPDwoY29uc3QgVCYgdCkKKyAg
ICB7CisgICAgICAgIGVuY29kZSh0KTsKKyAgICAgICAgcmV0dXJuICp0aGlzOworICAgIH0KKwor
ICAgIGNvbnN0IHVpbnQ4X3QqIGJ1ZmZlcigpIGNvbnN0IHsgcmV0dXJuIG1fYnVmZmVyLmRhdGEo
KTsgfQorICAgIHNpemVfdCBidWZmZXJTaXplKCkgY29uc3QgeyByZXR1cm4gbV9idWZmZXIuc2l6
ZSgpOyB9CisKKyAgICBzdGF0aWMgdm9pZCB1cGRhdGVDaGVja3N1bUZvckRhdGEodW5zaWduZWQm
IGNoZWNrc3VtLCBjb25zdCB1aW50OF90Kiwgc2l6ZV90KTsKKyAgICB0ZW1wbGF0ZSA8dHlwZW5h
bWUgVHlwZT4gc3RhdGljIHZvaWQgdXBkYXRlQ2hlY2tzdW1Gb3JOdW1iZXIodW5zaWduZWQmIGNo
ZWNrc3VtLCBUeXBlKTsKKworcHJpdmF0ZToKKyAgICB2b2lkIGVuY29kZShib29sKTsKKyAgICB2
b2lkIGVuY29kZSh1aW50OF90KTsKKyAgICB2b2lkIGVuY29kZSh1aW50MTZfdCk7CisgICAgdm9p
ZCBlbmNvZGUodWludDMyX3QpOworICAgIHZvaWQgZW5jb2RlKHVpbnQ2NF90KTsKKyAgICB2b2lk
IGVuY29kZShpbnQzMl90KTsKKyAgICB2b2lkIGVuY29kZShpbnQ2NF90KTsKKyAgICB2b2lkIGVu
Y29kZShmbG9hdCk7CisgICAgdm9pZCBlbmNvZGUoZG91YmxlKTsKKworICAgIHRlbXBsYXRlPHR5
cGVuYW1lIFR5cGU+IHZvaWQgZW5jb2RlTnVtYmVyKFR5cGUpOworCisgICAgdWludDhfdCogZ3Jv
dyh1bnNpZ25lZCBhbGlnbm1lbnQsIHNpemVfdCk7CisKKyAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUg
VHlwZT4gc3RydWN0IFNhbHQ7CisKKyAgICBWZWN0b3I8dWludDhfdCwgNDA5Nj4gbV9idWZmZXI7
CisgICAgdW5zaWduZWQgbV9jaGVja3N1bTsKK307CisKK3RlbXBsYXRlIDw+IHN0cnVjdCBOZXR3
b3JrQ2FjaGVFbmNvZGVyOjpTYWx0PGJvb2w+IHsgc3RhdGljIGNvbnN0IHVuc2lnbmVkIHZhbHVl
ID0gMzsgfTsKK3RlbXBsYXRlIDw+IHN0cnVjdCBOZXR3b3JrQ2FjaGVFbmNvZGVyOjpTYWx0PHVp
bnQ4X3Q+IHsgc3RhdGljIGNvbnN0ICB1bnNpZ25lZCB2YWx1ZSA9IDU7IH07Cit0ZW1wbGF0ZSA8
PiBzdHJ1Y3QgTmV0d29ya0NhY2hlRW5jb2Rlcjo6U2FsdDx1aW50MTZfdD4geyBzdGF0aWMgY29u
c3QgdW5zaWduZWQgdmFsdWUgPSA3OyB9OwordGVtcGxhdGUgPD4gc3RydWN0IE5ldHdvcmtDYWNo
ZUVuY29kZXI6OlNhbHQ8dWludDMyX3Q+IHsgc3RhdGljIGNvbnN0IHVuc2lnbmVkIHZhbHVlID0g
MTE7IH07Cit0ZW1wbGF0ZSA8PiBzdHJ1Y3QgTmV0d29ya0NhY2hlRW5jb2Rlcjo6U2FsdDx1aW50
NjRfdD4geyBzdGF0aWMgY29uc3QgdW5zaWduZWQgdmFsdWUgPSAxMzsgfTsKK3RlbXBsYXRlIDw+
IHN0cnVjdCBOZXR3b3JrQ2FjaGVFbmNvZGVyOjpTYWx0PGludDMyX3Q+IHsgc3RhdGljIGNvbnN0
IHVuc2lnbmVkIHZhbHVlID0gMTc7IH07Cit0ZW1wbGF0ZSA8PiBzdHJ1Y3QgTmV0d29ya0NhY2hl
RW5jb2Rlcjo6U2FsdDxpbnQ2NF90PiB7IHN0YXRpYyBjb25zdCB1bnNpZ25lZCB2YWx1ZSA9IDE5
OyB9OwordGVtcGxhdGUgPD4gc3RydWN0IE5ldHdvcmtDYWNoZUVuY29kZXI6OlNhbHQ8ZmxvYXQ+
IHsgc3RhdGljIGNvbnN0IHVuc2lnbmVkIHZhbHVlID0gMjM7IH07Cit0ZW1wbGF0ZSA8PiBzdHJ1
Y3QgTmV0d29ya0NhY2hlRW5jb2Rlcjo6U2FsdDxkb3VibGU+IHsgc3RhdGljIGNvbnN0IHVuc2ln
bmVkIHZhbHVlID0gMjk7IH07Cit0ZW1wbGF0ZSA8PiBzdHJ1Y3QgTmV0d29ya0NhY2hlRW5jb2Rl
cjo6U2FsdDx1aW50OF90Kj4geyBzdGF0aWMgY29uc3QgdW5zaWduZWQgdmFsdWUgPSAxMDE7IH07
CisKK3RlbXBsYXRlIDx0eXBlbmFtZSBUeXBlPgordm9pZCBOZXR3b3JrQ2FjaGVFbmNvZGVyOjp1
cGRhdGVDaGVja3N1bUZvck51bWJlcih1bnNpZ25lZCYgY2hlY2tzdW0sIFR5cGUgdmFsdWUpCit7
CisgICAgdW5zaWduZWQgaGFzaCA9IFdURjo6aW50SGFzaChzdGF0aWNfY2FzdDx1aW50NjRfdD4o
dmFsdWUpKSBeIE5ldHdvcmtDYWNoZUVuY29kZXI6OlNhbHQ8VHlwZT46OnZhbHVlOworICAgIGNo
ZWNrc3VtID0gV1RGOjpwYWlySW50SGFzaChjaGVja3N1bSwgaGFzaCk7Cit9CisKK30KKworI2Vu
ZGlmCisjZW5kaWYKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1dlYktpdDIueGNvZGVwcm9qL3Byb2pl
Y3QucGJ4cHJvago9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9XZWJLaXQyLnhjb2RlcHJv
ai9wcm9qZWN0LnBieHByb2oJKHJldmlzaW9uIDE3NTQyMikKKysrIFNvdXJjZS9XZWJLaXQyL1dl
YktpdDIueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkod29ya2luZyBjb3B5KQpAQCAtMTY1NSw2
ICsxNjU1LDEzIEBACiAJCUUxRTU1MkM1MTZBRTA2NUYwMDRFRDY1MyAvKiBTYW5kYm94SW5pdGlh
bGl6YXRpb25QYXJhbWV0ZXJzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSBFMUU1NTJDMzE2QUUwNjVFMDA0RUQ2NTMgLyogU2FuZGJveEluaXRpYWxpemF0
aW9uUGFyYW1ldGVycy5oICovOyB9OwogCQlFMUVFNTNFMzExRjhDRkMwMDBDQ0JFRTQgLyogSW5q
ZWN0ZWRCdW5kbGVQYWdlRWRpdG9yQ2xpZW50LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSBFMUVFNTNEQzExRjhDRjlGMDBDQ0JFRTQgLyogSW5qZWN0ZWRC
dW5kbGVQYWdlRWRpdG9yQ2xpZW50LmggKi87IH07CiAJCUUxRUU1M0U3MTFGOENGRkIwMENDQkVF
NCAvKiBJbmplY3RlZEJ1bmRsZVBhZ2VFZGl0b3JDbGllbnQuY3BwIGluIFNvdXJjZXMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRTFFRTUzRTYxMUY4Q0ZGQjAwQ0NCRUU0IC8q
IEluamVjdGVkQnVuZGxlUGFnZUVkaXRvckNsaWVudC5jcHAgKi87IH07CisJCUU0ODlEMjhBMUEw
QTJEQjgwMDc4QzA2QSAvKiBOZXR3b3JrQ2FjaGVDb2Rlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRTQ4OUQyODMxQTBBMkRCODAwNzhDMDZBIC8qIE5l
dHdvcmtDYWNoZUNvZGVyLmggKi87IH07CisJCUU0ODlEMjhCMUEwQTJEQjgwMDc4QzA2QSAvKiBO
ZXR3b3JrQ2FjaGVDb2RlcnMuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gRTQ4OUQyODQxQTBBMkRCODAwNzhDMDZBIC8qIE5ldHdvcmtDYWNoZUNvZGVy
cy5jcHAgKi87IH07CisJCUU0ODlEMjhDMUEwQTJEQjgwMDc4QzA2QSAvKiBOZXR3b3JrQ2FjaGVD
b2RlcnMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEU0
ODlEMjg1MUEwQTJEQjgwMDc4QzA2QSAvKiBOZXR3b3JrQ2FjaGVDb2RlcnMuaCAqLzsgfTsKKwkJ
RTQ4OUQyOEQxQTBBMkRCODAwNzhDMDZBIC8qIE5ldHdvcmtDYWNoZURlY29kZXIuY3BwIGluIFNv
dXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRTQ4OUQyODYxQTBBMkRC
ODAwNzhDMDZBIC8qIE5ldHdvcmtDYWNoZURlY29kZXIuY3BwICovOyB9OworCQlFNDg5RDI4RTFB
MEEyREI4MDA3OEMwNkEgLyogTmV0d29ya0NhY2hlRGVjb2Rlci5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRTQ4OUQyODcxQTBBMkRCODAwNzhDMDZBIC8q
IE5ldHdvcmtDYWNoZURlY29kZXIuaCAqLzsgfTsKKwkJRTQ4OUQyOEYxQTBBMkRCODAwNzhDMDZB
IC8qIE5ldHdvcmtDYWNoZUVuY29kZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gRTQ4OUQyODgxQTBBMkRCODAwNzhDMDZBIC8qIE5ldHdvcmtDYWNo
ZUVuY29kZXIuY3BwICovOyB9OworCQlFNDg5RDI5MDFBMEEyREI4MDA3OEMwNkEgLyogTmV0d29y
a0NhY2hlRW5jb2Rlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gRTQ4OUQyODkxQTBBMkRCODAwNzhDMDZBIC8qIE5ldHdvcmtDYWNoZUVuY29kZXIuaCAq
LzsgfTsKIAkJRUQ4MkE3RjIxMjhDNkZBRjAwNDQ3N0IzIC8qIFdLQnVuZGxlUGFnZU92ZXJsYXku
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDFBMjJGMEZG
MTI4OUZDRDkwMDg1RTc0RiAvKiBXS0J1bmRsZVBhZ2VPdmVybGF5LmggKi87IHNldHRpbmdzID0g
e0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJRURDQTcxQjcxMjhEREE4QzAwMjAx
QjI2IC8qIFdLQnVuZGxlUGFnZU92ZXJsYXkuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gMUEyMkYxMDAxMjg5RkNEOTAwODVFNzRGIC8qIFdLQnVuZGxl
UGFnZU92ZXJsYXkuY3BwICovOyB9OwogCQlGMDM2OTc4ODE1RjRCRjA1MDBDM0E4MEUgLyogV2Vi
Q29sb3JQaWNrZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gRjAzNjk3ODcxNUY0QkYwNTAwQzNBODBFIC8qIFdlYkNvbG9yUGlja2VyLmNwcCAqLzsg
fTsKQEAgLTM3NTgsNiArMzc2NSwxMyBAQAogCQlFMUVFNTNFNjExRjhDRkZCMDBDQ0JFRTQgLyog
SW5qZWN0ZWRCdW5kbGVQYWdlRWRpdG9yQ2xpZW50LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Y3BwLmNwcDsgcGF0aCA9IEluamVjdGVkQnVuZGxlUGFnZUVkaXRvckNsaWVudC5jcHA7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUUxRkVGMzlBMTkwRjc2RjMwMDczMTY1OCAvKiBjb20u
YXBwbGUuV2ViS2l0LkRhdGFiYXNlcy5zYi5pbiAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQ7IHBhdGggPSBjb20uYXBwbGUuV2ViS2l0LkRhdGFi
YXNlcy5zYi5pbjsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRTFGRUYzOUMxOTBGNzkx
QzAwNzMxNjU4IC8qIERhdGFiYXNlUHJvY2Vzc0lPUy5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Y3BwLm9iamNwcDsgcGF0aCA9IERhdGFiYXNlUHJvY2Vzc0lPUy5tbTsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKKwkJRTQ4OUQyODMxQTBBMkRCODAwNzhDMDZBIC8qIE5ldHdvcmtDYWNoZUNv
ZGVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IE5ldHdvcmtDYWNoZUNvZGVy
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUU0ODlEMjg0MUEwQTJEQjgwMDc4QzA2
QSAvKiBOZXR3b3JrQ2FjaGVDb2RlcnMuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3Bw
OyBwYXRoID0gTmV0d29ya0NhY2hlQ29kZXJzLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKKwkJRTQ4OUQyODUxQTBBMkRCODAwNzhDMDZBIC8qIE5ldHdvcmtDYWNoZUNvZGVycy5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBOZXR3b3JrQ2FjaGVDb2RlcnMuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJRTQ4OUQyODYxQTBBMkRCODAwNzhDMDZBIC8qIE5l
dHdvcmtDYWNoZURlY29kZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRo
ID0gTmV0d29ya0NhY2hlRGVjb2Rlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJ
CUU0ODlEMjg3MUEwQTJEQjgwMDc4QzA2QSAvKiBOZXR3b3JrQ2FjaGVEZWNvZGVyLmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IE5ldHdvcmtDYWNoZURlY29kZXIuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJRTQ4OUQyODgxQTBBMkRCODAwNzhDMDZBIC8qIE5ldHdv
cmtDYWNoZUVuY29kZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0g
TmV0d29ya0NhY2hlRW5jb2Rlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUU0
ODlEMjg5MUEwQTJEQjgwMDc4QzA2QSAvKiBOZXR3b3JrQ2FjaGVFbmNvZGVyLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IE5ldHdvcmtDYWNoZUVuY29kZXIuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRjAzNjk3ODcxNUY0QkYwNTAwQzNBODBFIC8qIFdlYkNvbG9y
UGlja2VyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFdlYkNvbG9y
UGlja2VyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRjYxMTNFMjQxMjZDRTE4
MjAwNTdEMEE3IC8qIFdlYlVzZXJDb250ZW50VVJMUGF0dGVybi5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBXZWJVc2VyQ29udGVudFVSTFBhdHRlcm4uaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJRjYxMTNFMjYxMjZDRTE5QjAwNTdEMEE3IC8qIFdLVXNlckNvbnRl
bnRVUkxQYXR0ZXJuLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFdL
VXNlckNvbnRlbnRVUkxQYXR0ZXJuLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAg
LTUxOTAsNiArNTIwNCw3IEBACiAJCTUxMENDN0RBMTYxMzhFMDEwMEQwM0VEMyAvKiBOZXR3b3Jr
UHJvY2VzcyAqLyA9IHsKIAkJCWlzYSA9IFBCWEdyb3VwOwogCQkJY2hpbGRyZW4gPSAoCisJCQkJ
RTQ4OUQyODIxQTBBMkJFODAwNzhDMDZBIC8qIGNhY2hlICovLAogCQkJCTdFQzRGMEY4MThFNEE5
MjIwMDgwNTZBRiAvKiBjb2NvYSAqLywKIAkJCQkyREE5NDRCQjE4ODUxMUREMDBFRDg2REIgLyog
aW9zICovLAogCQkJCUJDODI4MzdDMTZCNDVEQTUwMEEyNzhGRSAvKiBFbnRyeVBvaW50ICovLApA
QCAtNzAxMyw2ICs3MDI4LDIxIEBACiAJCQlwYXRoID0gaW9zOwogCQkJc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsKIAkJfTsKKwkJRTQ4OUQyODIxQTBBMkJFODAwNzhDMDZBIC8qIGNhY2hlICovID0g
eworCQkJaXNhID0gUEJYR3JvdXA7CisJCQljaGlsZHJlbiA9ICgKKwkJCQlFNDg5RDI4MzFBMEEy
REI4MDA3OEMwNkEgLyogTmV0d29ya0NhY2hlQ29kZXIuaCAqLywKKwkJCQlFNDg5RDI4NDFBMEEy
REI4MDA3OEMwNkEgLyogTmV0d29ya0NhY2hlQ29kZXJzLmNwcCAqLywKKwkJCQlFNDg5RDI4NTFB
MEEyREI4MDA3OEMwNkEgLyogTmV0d29ya0NhY2hlQ29kZXJzLmggKi8sCisJCQkJRTQ4OUQyODYx
QTBBMkRCODAwNzhDMDZBIC8qIE5ldHdvcmtDYWNoZURlY29kZXIuY3BwICovLAorCQkJCUU0ODlE
Mjg3MUEwQTJEQjgwMDc4QzA2QSAvKiBOZXR3b3JrQ2FjaGVEZWNvZGVyLmggKi8sCisJCQkJRTQ4
OUQyODgxQTBBMkRCODAwNzhDMDZBIC8qIE5ldHdvcmtDYWNoZUVuY29kZXIuY3BwICovLAorCQkJ
CUU0ODlEMjg5MUEwQTJEQjgwMDc4QzA2QSAvKiBOZXR3b3JrQ2FjaGVFbmNvZGVyLmggKi8sCisJ
CQkpOworCQkJbmFtZSA9IGNhY2hlOworCQkJcGF0aCA9IE5ldHdvcmtQcm9jZXNzL2NhY2hlOwor
CQkJc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsKKwkJfTsKIAkJRjYzODk1NUExMzNCRjU3RDAwODk0
MUQ1IC8qIG1hYyAqLyA9IHsKIAkJCWlzYSA9IFBCWEdyb3VwOwogCQkJY2hpbGRyZW4gPSAoCkBA
IC03MTE4LDYgKzcxNDgsNyBAQAogCQkJCTI5M0VCRUFCMTYyN0Q5QzkwMDVGODlGMSAvKiBXS0RP
TVRleHQuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDMDE3RDIxMTYyNjMzMDgwMDcwNTRGNSAvKiBX
S0RPTVRleHRJdGVyYXRvci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMzdERkE3MDAxODEwQkI5MjAw
MUY0QTlGIC8qIFdLRm91bmRhdGlvbi5oIGluIEhlYWRlcnMgKi8sCisJCQkJRTQ4OUQyOEUxQTBB
MkRCODAwNzhDMDZBIC8qIE5ldHdvcmtDYWNoZURlY29kZXIuaCBpbiBIZWFkZXJzICovLAogCQkJ
CTFBQkMzREYxMTg5OUM2QjYwMDRGMDYyNiAvKiBXS05hdmlnYXRpb25JbnRlcm5hbC5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJMEYwQzM2NUExOEMwNTU1ODAwRjYwN0Q3IC8qIExheWVyUmVwcmVzZW50
YXRpb24uaCBpbiBIZWFkZXJzICovLAogCQkJCTFGNjA0QkE4MTg4OUZBNzQwMEVFMDM5NSAvKiBX
S1JlbmRlcmluZ1Byb2dyZXNzRXZlbnRzLmggaW4gSGVhZGVycyAqLywKQEAgLTcyNTIsNiArNzI4
Myw3IEBACiAJCQkJQkNCMEFFRTkxMjJGNTNFMzAwQjEzNDFFIC8qIE11dGFibGVEaWN0aW9uYXJ5
LmggaW4gSGVhZGVycyAqLywKIAkJCQkxQTZGQkEyQTExRTY4NjI3MDBEQjEzNzEgLyogTmV0c2Nh
cGVCcm93c2VyRnVuY3MuaCBpbiBIZWFkZXJzICovLAogCQkJCTFBNkZCRDI4MTFFNjlCQzIwMERC
MTM3MSAvKiBOZXRzY2FwZVBsdWdpbi5oIGluIEhlYWRlcnMgKi8sCisJCQkJRTQ4OUQyOEMxQTBB
MkRCODAwNzhDMDZBIC8qIE5ldHdvcmtDYWNoZUNvZGVycy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
QTFDNTEyQzkxOTA2NTZFNTAwNDQ4OTE0IC8qIFdlYlF1aWNrTG9va0hhbmRsZUNsaWVudC5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJMUE0QTlDNTYxMkI4MTZDRjAwOEZFOTg0IC8qIE5ldHNjYXBlUGx1
Z2luTW9kdWxlLmggaW4gSGVhZGVycyAqLywKIAkJCQkxQUE1ODg5MjExRUU3MDQwMDA2MUI4ODIg
LyogTmV0c2NhcGVQbHVnaW5TdHJlYW0uaCBpbiBIZWFkZXJzICovLApAQCAtNzQ1MCw2ICs3NDgy
LDcgQEAKIAkJCQlCQ0RFMDU5QjExQ0RBOEFFMDBFNDFBRjEgLyogV2ViQ29udGV4dEluamVjdGVk
QnVuZGxlQ2xpZW50LmggaW4gSGVhZGVycyAqLywKIAkJCQkxQTY1MDlDRTE4QjQxNDYyMDA2MTQz
MzIgLyogV0tQcm9jZXNzUG9vbFByaXZhdGUuaCBpbiBIZWFkZXJzICovLAogCQkJCTUxODcxQjVD
MTI3Q0I4OUQwMEY3NjIzMiAvKiBXZWJDb250ZXh0TWVudS5oIGluIEhlYWRlcnMgKi8sCisJCQkJ
RTQ4OUQyOTAxQTBBMkRCODAwNzhDMDZBIC8qIE5ldHdvcmtDYWNoZUVuY29kZXIuaCBpbiBIZWFk
ZXJzICovLAogCQkJCUJDMDMyRDc3MTBGNDM3OEQwMDU4QzE1QSAvKiBXZWJDb250ZXh0TWVudUNs
aWVudC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNzVFNzQ5RUMxODBEQkI5ODAwMDg4QkE2IC8qIFdl
Yk9yaWdpbkRhdGFNYW5hZ2VyUHJveHlNZXNzYWdlcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNTEy
OTM1RDgxMjg4RDE5NDAwQTRCNjk1IC8qIFdlYkNvbnRleHRNZW51SXRlbS5oIGluIEhlYWRlcnMg
Ki8sCkBAIC03NDU5LDYgKzc0OTIsNyBAQAogCQkJCTUxQUNCQjgyMTI3QThCQUQwMEQyMDNCOSAv
KiBXZWJDb250ZXh0TWVudVByb3h5LmggaW4gSGVhZGVycyAqLywKIAkJCQkxQUI4QTFGNDE4NDAw
QjhGMDBFOUFFNjkgLyogV0tQYWdlRmluZENsaWVudC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNzVF
NzQ5RUExODBEQkI5ODAwMDg4QkE2IC8qIFdlYk9yaWdpbkRhdGFNYW5hZ2VyTWVzc2FnZXMuaCBp
biBIZWFkZXJzICovLAorCQkJCUU0ODlEMjhBMUEwQTJEQjgwMDc4QzA2QSAvKiBOZXR3b3JrQ2Fj
aGVDb2Rlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMzdBNjRFNTUxOEYzOEUzQzAwRUIzMEYxIC8q
IF9XS0Zvcm1EZWxlZ2F0ZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNTFBQ0JCQTAxMjdBOEYyQzAw
RDIwM0I5IC8qIFdlYkNvbnRleHRNZW51UHJveHlNYWMuaCBpbiBIZWFkZXJzICovLAogCQkJCUJD
Q0I3NUM2MTIwM0ExQ0UwMDIyMkQxQiAvKiBXZWJDb250ZXh0TWVzc2FnZUtpbmRzLmggaW4gSGVh
ZGVycyAqLywKQEAgLTg4NjQsNiArODg5OCw3IEBACiAJCQkJMjY4NDA1NEMxOEI4NkMzNTAwMjJD
MzhCIC8qIFZpc2libGVDb250ZW50UmVjdFVwZGF0ZUluZm8uY3BwIGluIFNvdXJjZXMgKi8sCiAJ
CQkJQkM0QkVFQUMxMjBBMEE1RjAwRkJBMEM3IC8qIEluamVjdGVkQnVuZGxlTm9kZUhhbmRsZS5j
cHAgaW4gU291cmNlcyAqLywKIAkJCQk1MTI5MzVFMzEyODhEOTc4MDBBNEI2OTUgLyogSW5qZWN0
ZWRCdW5kbGVQYWdlQ29udGV4dE1lbnVDbGllbnQuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJRTQ4
OUQyOEIxQTBBMkRCODAwNzhDMDZBIC8qIE5ldHdvcmtDYWNoZUNvZGVycy5jcHAgaW4gU291cmNl
cyAqLywKIAkJCQlDRDY3RDMwRTE1QzA4RjlBMDA4NDNBREYgLyogSW5qZWN0ZWRCdW5kbGVQYWdl
RGlhZ25vc3RpY0xvZ2dpbmdDbGllbnQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJRTFFRTUzRTcx
MUY4Q0ZGQjAwQ0NCRUU0IC8qIEluamVjdGVkQnVuZGxlUGFnZUVkaXRvckNsaWVudC5jcHAgaW4g
U291cmNlcyAqLywKIAkJCQlCQzE0RTEwOTEyMEI5MDVFMDA4MjZDMEMgLyogSW5qZWN0ZWRCdW5k
bGVQYWdlRm9ybUNsaWVudC5jcHAgaW4gU291cmNlcyAqLywKQEAgLTg5NzcsNyArOTAxMiw5IEBA
CiAJCQkJMUE2RkI3RDIxMUU2NTFFMjAwREIxMzcxIC8qIFBsdWdpbi5jcHAgaW4gU291cmNlcyAq
LywKIAkJCQkzMUE2N0UwQzE2NUIyQTk5MDA2Q0JBNjYgLyogUGx1Z0luQXV0b1N0YXJ0UHJvdmlk
ZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMUE4RUY0Q0MxMjUyNDAzNzAwRjcwNjdGIC8qIFBs
dWdpbkNvbnRyb2xsZXJQcm94eS5jcHAgaW4gU291cmNlcyAqLywKKwkJCQlFNDg5RDI4RDFBMEEy
REI4MDA3OEMwNkEgLyogTmV0d29ya0NhY2hlRGVjb2Rlci5jcHAgaW4gU291cmNlcyAqLywKIAkJ
CQkxQTJEOTFBNjEyODFENzM5MDAxRUI5NjIgLyogUGx1Z2luQ29udHJvbGxlclByb3h5TWFjLm1t
IGluIFNvdXJjZXMgKi8sCisJCQkJRTQ4OUQyOEYxQTBBMkRCODAwNzhDMDZBIC8qIE5ldHdvcmtD
YWNoZUVuY29kZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMUE4RUY5NkUxMjUyQUY2QjAwRjcw
NjdGIC8qIFBsdWdpbkNvbnRyb2xsZXJQcm94eU1lc3NhZ2VSZWNlaXZlci5jcHAgaW4gU291cmNl
cyAqLywKIAkJCQkxQTE3OTc3RjEzN0VFODJDMDBGOTdENDUgLyogUGx1Z2luQ3JlYXRpb25QYXJh
bWV0ZXJzLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUM1NUNCNUI3MThDMjY5Q0YwMENBODFFMSAv
KiBXS0Zvcm1TZWxlY3RQb3BvdmVyLm1tIGluIFNvdXJjZXMgKi8sCg==
</data>
<flag name="review"
          id="265816"
          type_id="1"
          status="+"
          setter="andersca"
    />
          </attachment>
      

    </bug>

</bugzilla>