<?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>71746</bug_id>
          
          <creation_ts>2011-11-07 16:25:04 -0800</creation_ts>
          <short_desc>DFG code base should allow for classes not related to DFG::JITCompiler to use DFG idioms</short_desc>
          <delta_ts>2011-11-07 23:05:07 -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>JavaScriptCore</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>71744</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Filip Pizlo">fpizlo</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>497576</commentid>
    <comment_count>0</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2011-11-07 16:25:04 -0800</bug_when>
    <thetext>patch forthcoming</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>497580</commentid>
    <comment_count>1</comment_count>
      <attachid>113951</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2011-11-07 16:28:06 -0800</bug_when>
    <thetext>Created attachment 113951
the patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>497582</commentid>
    <comment_count>2</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-11-07 16:30:20 -0800</bug_when>
    <thetext>Attachment 113951 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;Source/JavaScriptCore/ChangeLog&apos;, u&apos;Source...&quot; exit_code: 1

Source/JavaScriptCore/dfg/DFGAssemblyHelpers.h:35:  Alphabetical sorting problem.  [build/include_order] [4]
Source/JavaScriptCore/dfg/DFGAssemblyHelpers.h:171:  Missing space inside { }.  [whitespace/braces] [5]
Source/JavaScriptCore/dfg/DFGAssemblyHelpers.h:172:  Missing space inside { }.  [whitespace/braces] [5]
Source/JavaScriptCore/dfg/DFGAssemblyHelpers.h:173:  Missing space inside { }.  [whitespace/braces] [5]
Source/JavaScriptCore/dfg/DFGAssemblyHelpers.h:174:  Missing space inside { }.  [whitespace/braces] [5]
Source/JavaScriptCore/dfg/DFGAssemblyHelpers.h:175:  Missing space inside { }.  [whitespace/braces] [5]
Source/JavaScriptCore/dfg/DFGAssemblyHelpers.h:224:  The parameter name &quot;flag&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Total errors found: 7 in 7 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>497585</commentid>
    <comment_count>3</comment_count>
      <attachid>113952</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2011-11-07 16:32:52 -0800</bug_when>
    <thetext>Created attachment 113952
the patch

Fixed style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>497659</commentid>
    <comment_count>4</comment_count>
      <attachid>113952</attachid>
    <who name="Gavin Barraclough">barraclough</who>
    <bug_when>2011-11-07 18:27:16 -0800</bug_when>
    <thetext>Comment on attachment 113952
the patch

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

&gt; Source/JavaScriptCore/dfg/DFGAssemblyHelpers.h:46
&gt; +class AssemblyHelpers: public MacroAssembler {

I think you&apos;re missing a space here.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>497675</commentid>
    <comment_count>5</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2011-11-07 18:59:38 -0800</bug_when>
    <thetext>(In reply to comment #4)
&gt; (From update of attachment 113952 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=113952&amp;action=review
&gt; 
&gt; &gt; Source/JavaScriptCore/dfg/DFGAssemblyHelpers.h:46
&gt; &gt; +class AssemblyHelpers: public MacroAssembler {
&gt; 
&gt; I think you&apos;re missing a space here.

i.e. &quot;AssemblyHelpers : public&quot; instead of &quot;AssemblyHelpers: public&quot;?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>497731</commentid>
    <comment_count>6</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2011-11-07 21:51:57 -0800</bug_when>
    <thetext>Landed in http://trac.webkit.org/changeset/99519</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>497734</commentid>
    <comment_count>7</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2011-11-07 21:53:13 -0800</bug_when>
    <thetext>&lt;rdar://problem/10410939&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>113951</attachid>
            <date>2011-11-07 16:28:06 -0800</date>
            <delta_ts>2011-11-07 16:32:52 -0800</delta_ts>
            <desc>the patch</desc>
            <filename>dfgosrrefactor_patch_1.diff</filename>
            <type>text/plain</type>
            <size>46486</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gOTk0OTkpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsNDMgQEAK
KzIwMTEtMTEtMDcgIEZpbGlwIFBpemxvICA8ZnBpemxvQGFwcGxlLmNvbT4KKworICAgICAgICBE
RkcgY29kZSBiYXNlIHNob3VsZCBhbGxvdyBmb3IgY2xhc3NlcyBub3QgcmVsYXRlZCB0byBERkc6
OkpJVENvbXBpbGVyCisgICAgICAgIHRvIHVzZSBERkcgaWRpb21zCisgICAgICAgIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD03MTc0NgorCisgICAgICAgIFJldmlld2Vk
IGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogSmF2YVNjcmlwdENvcmUueGNvZGVwcm9q
L3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgKiBkZmcvREZHQXNzZW1ibHlIZWxwZXJzLmNwcDog
QWRkZWQuCisgICAgICAgIChKU0M6OkRGRzo6QXNzZW1ibHlIZWxwZXJzOjpkZWNvZGVkQ29kZU1h
cEZvcik6CisgICAgICAgIChKU0M6OkRGRzo6QXNzZW1ibHlIZWxwZXJzOjplbWl0Q291bnQpOgor
ICAgICAgICAoSlNDOjpERkc6OkFzc2VtYmx5SGVscGVyczo6c2V0U2FtcGxpbmdGbGFnKToKKyAg
ICAgICAgKEpTQzo6REZHOjpBc3NlbWJseUhlbHBlcnM6OmNsZWFyU2FtcGxpbmdGbGFnKToKKyAg
ICAgICAgKEpTQzo6REZHOjpBc3NlbWJseUhlbHBlcnM6OmppdEFzc2VydElzSW50MzIpOgorICAg
ICAgICAoSlNDOjpERkc6OkFzc2VtYmx5SGVscGVyczo6aml0QXNzZXJ0SXNKU0ludDMyKToKKyAg
ICAgICAgKEpTQzo6REZHOjpBc3NlbWJseUhlbHBlcnM6OmppdEFzc2VydElzSlNOdW1iZXIpOgor
ICAgICAgICAoSlNDOjpERkc6OkFzc2VtYmx5SGVscGVyczo6aml0QXNzZXJ0SXNKU0RvdWJsZSk6
CisgICAgICAgIChKU0M6OkRGRzo6QXNzZW1ibHlIZWxwZXJzOjpqaXRBc3NlcnRJc0NlbGwpOgor
ICAgICAgICAqIGRmZy9ERkdBc3NlbWJseUhlbHBlcnMuaDogQWRkZWQuCisgICAgICAgICogZGZn
L0RGR0pJVENvbXBpbGVyLmNwcDoKKyAgICAgICAgKiBkZmcvREZHSklUQ29tcGlsZXIuaDoKKyAg
ICAgICAgKEpTQzo6REZHOjpKSVRDb21waWxlcjo6SklUQ29tcGlsZXIpOgorICAgICAgICAoSlND
OjpERkc6OkpJVENvbXBpbGVyOjpncmFwaCk6CisgICAgICAgICogZGZnL0RGR0pJVENvbXBpbGVy
MzJfNjQuY3BwOgorICAgICAgICAqIGRmZy9ERkdPU1JFeGl0Lmg6IEFkZGVkLgorICAgICAgICAo
SlNDOjpERkc6OlNwZWN1bGF0aW9uUmVjb3Zlcnk6OlNwZWN1bGF0aW9uUmVjb3ZlcnkpOgorICAg
ICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aW9uUmVjb3Zlcnk6OnR5cGUpOgorICAgICAgICAoSlND
OjpERkc6OlNwZWN1bGF0aW9uUmVjb3Zlcnk6OmRlc3QpOgorICAgICAgICAoSlNDOjpERkc6OlNw
ZWN1bGF0aW9uUmVjb3Zlcnk6OnNyYyk6CisgICAgICAgIChKU0M6OkRGRzo6T1NSRXhpdDo6bnVt
YmVyT2ZSZWNvdmVyaWVzKToKKyAgICAgICAgKEpTQzo6REZHOjpPU1JFeGl0Ojp2YWx1ZVJlY292
ZXJ5KToKKyAgICAgICAgKEpTQzo6REZHOjpPU1JFeGl0Ojppc0FyZ3VtZW50KToKKyAgICAgICAg
KEpTQzo6REZHOjpPU1JFeGl0Ojppc1ZhcmlhYmxlKToKKyAgICAgICAgKEpTQzo6REZHOjpPU1JF
eGl0Ojphcmd1bWVudEZvckluZGV4KToKKyAgICAgICAgKEpTQzo6REZHOjpPU1JFeGl0Ojp2YXJp
YWJsZUZvckluZGV4KToKKyAgICAgICAgKEpTQzo6REZHOjpPU1JFeGl0OjpvcGVyYW5kRm9yQXJn
dW1lbnQpOgorICAgICAgICAoSlNDOjpERkc6Ok9TUkV4aXQ6Om9wZXJhbmRGb3JJbmRleCk6Cisg
ICAgICAgICogZGZnL0RGR1NwZWN1bGF0aXZlSklULmg6CisKIDIwMTEtMTEtMDcgIE1hcmsgSGFo
bmVuYmVyZyAgPG1oYWhuZW5iZXJnQGFwcGxlLmNvbT4KIAogICAgICAgICBEZS12aXJ0dWFsaXpl
IEpTT2JqZWN0OjpwdXRXaXRoQXR0cmlidXRlcwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBi
eHByb2oJKHJldmlzaW9uIDk5NDg2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3Jp
cHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHdvcmtpbmcgY29weSkKQEAgLTY4LDYg
KzY4LDkgQEAKIAkJMEY5NjNCMkYxM0ZDNjZCQjAwMDJEOUIyIC8qIE1ldGFBbGxvY2F0b3JIYW5k
bGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGOTYz
QjJFMTNGQzY2QUUwMDAyRDlCMiAvKiBNZXRhQWxsb2NhdG9ySGFuZGxlLmggKi87IHNldHRpbmdz
ID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEY5NjNCMzgxM0ZDNkZFOTAw
MDJEOUIyIC8qIFZhbHVlUHJvZmlsZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gMEY5NjNCMzYxM0ZDNkZERTAwMDJEOUIyIC8qIFZhbHVlUHJvZmlsZS5o
ICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBGQkQ3
RTY5MTQ0Nzk5OTYwMDQ4MTMxNSAvKiBDb2RlT3JpZ2luLmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkJEN0U2NzE0NDc5OThGMDA0ODEzMTUgLyogQ29k
ZU9yaWdpbi5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07
CisJCTBGQzA5NzZBMTQ2OEE2RjcwMENGMjQ0MiAvKiBERkdPU1JFeGl0LmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkMwOTc2ODE0NjhBNkVGMDBDRjI0
NDIgLyogREZHT1NSRXhpdC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUs
ICk7IH07IH07CisJCTBGQzA5NzZEMTQ2OEFCNEUwMENGMjQ0MiAvKiBERkdBc3NlbWJseUhlbHBl
cnMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGQzA5
NzZDMTQ2OEFCNEEwMENGMjQ0MiAvKiBERkdBc3NlbWJseUhlbHBlcnMuaCAqLzsgc2V0dGluZ3Mg
PSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQkwRkMwOTc2RTE0NjhBQjUxMDBD
RjI0NDIgLyogREZHQXNzZW1ibHlIZWxwZXJzLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGQzA5NzZCMTQ2OEFCNEEwMENGMjQ0MiAvKiBERkdBc3Nl
bWJseUhlbHBlcnMuY3BwICovOyB9OwogCQkwRkM4MTUwQTE0MDQzQkY1MDBDRkE2MDMgLyogV3Jp
dGVCYXJyaWVyU3VwcG9ydC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gMEZDODE1MDkxNDA0M0JEMjAwQ0ZBNjAzIC8qIFdyaXRlQmFycmllclN1cHBvcnQu
aCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkwRkM4
MTUwQjE0MDQzQzBFMDBDRkE2MDMgLyogV3JpdGVCYXJyaWVyU3VwcG9ydC5jcHAgaW4gU291cmNl
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkM4MTUwODE0MDQzQkNBMDBD
RkE2MDMgLyogV3JpdGVCYXJyaWVyU3VwcG9ydC5jcHAgKi87IH07CiAJCTBGQzgxNTE1MTQwNTEx
OUIwMENGQTYwMyAvKiBWVGFibGVTcGVjdHJ1bS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gMEZDODE1MTQxNDA1MTE4RDAwQ0ZBNjAzIC8qIFZUYWJsZVNw
ZWN0cnVtLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsK
QEAgLTgzMyw2ICs4MzYsOSBAQAogCQkwRjk2M0IyRTEzRkM2NkFFMDAwMkQ5QjIgLyogTWV0YUFs
bG9jYXRvckhhbmRsZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBNZXRhQWxs
b2NhdG9ySGFuZGxlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGOTYzQjM2MTNG
QzZGREUwMDAyRDlCMiAvKiBWYWx1ZVByb2ZpbGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gVmFsdWVQcm9maWxlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBG
QkQ3RTY3MTQ0Nzk5OEYwMDQ4MTMxNSAvKiBDb2RlT3JpZ2luLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgcGF0aCA9IENvZGVPcmlnaW4uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
KwkJMEZDMDk3NjgxNDY4QTZFRjAwQ0YyNDQyIC8qIERGR09TUkV4aXQuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBuYW1lID0gREZHT1NSRXhpdC5oOyBwYXRoID0gZGZnL0RGR09TUkV4aXQu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZDMDk3NkIxNDY4QUI0QTAwQ0YyNDQy
IC8qIERGR0Fzc2VtYmx5SGVscGVycy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7
IG5hbWUgPSBERkdBc3NlbWJseUhlbHBlcnMuY3BwOyBwYXRoID0gZGZnL0RGR0Fzc2VtYmx5SGVs
cGVycy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGQzA5NzZDMTQ2OEFCNEEw
MENGMjQ0MiAvKiBERkdBc3NlbWJseUhlbHBlcnMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBuYW1lID0gREZHQXNzZW1ibHlIZWxwZXJzLmg7IHBhdGggPSBkZmcvREZHQXNzZW1ibHlIZWxw
ZXJzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGQzgxNTA4MTQwNDNCQ0EwMENG
QTYwMyAvKiBXcml0ZUJhcnJpZXJTdXBwb3J0LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3Bw
LmNwcDsgcGF0aCA9IFdyaXRlQmFycmllclN1cHBvcnQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQkwRkM4MTUwOTE0MDQzQkQyMDBDRkE2MDMgLyogV3JpdGVCYXJyaWVyU3VwcG9y
dC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXcml0ZUJhcnJpZXJTdXBwb3J0
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGQzgxNTEyMTQwNTExODYwMENGQTYw
MyAvKiBWVGFibGVTcGVjdHJ1bS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBh
dGggPSBWVGFibGVTcGVjdHJ1bS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0y
MjkyLDYgKzIyOTgsOSBAQAogCQk4NkVDOURCMzEzMjhERjQ0MDAyQjJBRDcgLyogZGZnICovID0g
ewogCQkJaXNhID0gUEJYR3JvdXA7CiAJCQljaGlsZHJlbiA9ICgKKwkJCQkwRkMwOTc2QjE0NjhB
QjRBMDBDRjI0NDIgLyogREZHQXNzZW1ibHlIZWxwZXJzLmNwcCAqLywKKwkJCQkwRkMwOTc2QzE0
NjhBQjRBMDBDRjI0NDIgLyogREZHQXNzZW1ibHlIZWxwZXJzLmggKi8sCisJCQkJMEZDMDk3Njgx
NDY4QTZFRjAwQ0YyNDQyIC8qIERGR09TUkV4aXQuaCAqLywKIAkJCQkwRjYyMDE2RDE0M0ZDRDJG
MDA2OEI3N0MgLyogREZHQWJzdHJhY3RTdGF0ZS5jcHAgKi8sCiAJCQkJMEY2MjAxNkUxNDNGQ0Qy
RjAwNjhCNzdDIC8qIERGR0Fic3RyYWN0U3RhdGUuaCAqLywKIAkJCQkwRjYyMDE2RjE0M0ZDRDJG
MDA2OEI3N0MgLyogREZHQWJzdHJhY3RWYWx1ZS5oICovLApAQCAtMjkwMSw2ICsyOTEwLDggQEAK
IAkJCQkwRjQyNkE0OTE0NjBDQkI3MDAxMzFGOEYgLyogVmlydHVhbFJlZ2lzdGVyLmggaW4gSGVh
ZGVycyAqLywKIAkJCQkwRjQyNkE0QjE0NjBDRDZFMDAxMzFGOEYgLyogRGF0YUZvcm1hdC5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJMEYyRTVCRjcxNDYzNTdENTAwM0VCMkVCIC8qIFNwZWN0cnVtLmgg
aW4gSGVhZGVycyAqLywKKwkJCQkwRkMwOTc2QTE0NjhBNkY3MDBDRjI0NDIgLyogREZHT1NSRXhp
dC5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEZDMDk3NkQxNDY4QUI0RTAwQ0YyNDQyIC8qIERGR0Fz
c2VtYmx5SGVscGVycy5oIGluIEhlYWRlcnMgKi8sCiAJCQkpOwogCQkJcnVuT25seUZvckRlcGxv
eW1lbnRQb3N0cHJvY2Vzc2luZyA9IDA7CiAJCX07CkBAIC0zNDMyLDYgKzM0NDMsNyBAQAogCQkJ
CTBGRTIyOEVFMTQzNkFCMkMwMDE5NkM0OCAvKiBIZXVyaXN0aWNzLmNwcCBpbiBTb3VyY2VzICov
LAogCQkJCTBGNjIwMTc5MTQzRkNENDgwMDY4Qjc3QyAvKiBERkdBYnN0cmFjdFN0YXRlLmNwcCBp
biBTb3VyY2VzICovLAogCQkJCUJDM0M0Q0EwMTQ1OEY1NDUwMDI1RkI2MiAvKiBKU0dsb2JhbFRo
aXMuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJMEZDMDk3NkUxNDY4QUI1MTAwQ0YyNDQyIC8qIERG
R0Fzc2VtYmx5SGVscGVycy5jcHAgaW4gU291cmNlcyAqLywKIAkJCSk7CiAJCQlydW5Pbmx5Rm9y
RGVwbG95bWVudFBvc3Rwcm9jZXNzaW5nID0gMDsKIAkJfTsKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHQXNzZW1ibHlIZWxwZXJzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fzc2VtYmx5SGVscGVycy5jcHAJKHJldmlzaW9uIDApCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fzc2VtYmx5SGVscGVycy5jcHAJKHJldmlz
aW9uIDApCkBAIC0wLDAgKzEsMTYyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDExIEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhF
CisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBS
T0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJERkdBc3NlbWJs
eUhlbHBlcnMuaCIKKworI2lmIEVOQUJMRShERkdfSklUKQorCituYW1lc3BhY2UgSlNDIHsgbmFt
ZXNwYWNlIERGRyB7CisKK1ZlY3RvcjxCeXRlY29kZUFuZE1hY2hpbmVPZmZzZXQ+JiBBc3NlbWJs
eUhlbHBlcnM6OmRlY29kZWRDb2RlTWFwRm9yKENvZGVCbG9jayogY29kZUJsb2NrKQoreworICAg
IEFTU0VSVChjb2RlQmxvY2sgPT0gY29kZUJsb2NrLT5iYXNlbGluZVZlcnNpb24oKSk7CisgICAg
QVNTRVJUKGNvZGVCbG9jay0+Z2V0SklUVHlwZSgpID09IEpJVENvZGU6OkJhc2VsaW5lSklUKTsK
KyAgICBBU1NFUlQoY29kZUJsb2NrLT5qaXRDb2RlTWFwKCkpOworICAgIAorICAgIHN0ZDo6cGFp
cjxIYXNoTWFwPENvZGVCbG9jayosIFZlY3RvcjxCeXRlY29kZUFuZE1hY2hpbmVPZmZzZXQ+ID46
Oml0ZXJhdG9yLCBib29sPiByZXN1bHQgPSBtX2RlY29kZWRDb2RlTWFwcy5hZGQoY29kZUJsb2Nr
LCBWZWN0b3I8Qnl0ZWNvZGVBbmRNYWNoaW5lT2Zmc2V0PigpKTsKKyAgICAKKyAgICBpZiAocmVz
dWx0LnNlY29uZCkKKyAgICAgICAgY29kZUJsb2NrLT5qaXRDb2RlTWFwKCktPmRlY29kZShyZXN1
bHQuZmlyc3QtPnNlY29uZCk7CisgICAgCisgICAgcmV0dXJuIHJlc3VsdC5maXJzdC0+c2Vjb25k
OworfQorCisjaWYgRU5BQkxFKFNBTVBMSU5HX0NPVU5URVJTKSAmJiBDUFUoWDg2XzY0KSAvLyBP
ciBhbnkgb3RoZXIgNjQtYml0IHBsYXRmb3JtIQordm9pZCBBc3NlbWJseUhlbHBlcnM6OmVtaXRD
b3VudChNYWNyb0Fzc2VtYmxlciYgaml0LCBBYnN0cmFjdFNhbXBsaW5nQ291bnRlciYgY291bnRl
ciwgdWludDMyX3QgaW5jcmVtZW50KQoreworICAgIGppdC5hZGRQdHIoVHJ1c3RlZEltbTMyKGlu
Y3JlbWVudCksIEFic29sdXRlQWRkcmVzcyhjb3VudGVyLmFkZHJlc3NPZkNvdW50ZXIoKSkpOwor
fQorI2VuZGlmCisKKyNpZiBFTkFCTEUoU0FNUExJTkdfQ09VTlRFUlMpICYmIENQVShYODYpIC8v
IE9yIGFueSBvdGhlciBsaXR0bGUtZW5kaWFuIDMyLWJpdCBwbGF0Zm9ybSEKK3ZvaWQgQXNzZW1i
bHlIZWxwZXJzOjplbWl0Q291bnQoTWFjcm9Bc2VtYmxlciYgaml0LCBBYnN0cmFjdFNhbXBsaW5n
Q291bnRlciYgY291bnRlciwgdWludDMyX3QgaW5jcmVtZW50KQoreworICAgIGludHB0cl90IGhp
V29yZCA9IHJlaW50ZXJwcmV0X2Nhc3Q8aW50cHRyX3Q+KGNvdW50ZXIuYWRkcmVzc09mQ291bnRl
cigpKSArIHNpemVvZihpbnQzMl90KTsKKyAgICBqaXQuYWRkMzIoVHJ1c3RlZEltbTMyKGluY3Jl
bWVudCksIEFic29sdXRlQWRkcmVzcyhjb3VudGVyLmFkZHJlc3NPZkNvdW50ZXIoKSkpOworICAg
IGppdC5hZGRXaXRoQ2FycnkzMihUcnVzdGVkSW1tMzIoMCksIEFic29sdXRlQWRkcmVzcyhyZWlu
dGVycHJldF9jYXN0PHZvaWQqPihoaVdvcmQpKSk7Cit9CisjZW5kaWYKKworI2lmIEVOQUJMRShT
QU1QTElOR19GTEFHUykKK3ZvaWQgQXNzZW1ibHlIZWxwZXJzOjpzZXRTYW1wbGluZ0ZsYWcoaW50
MzJfdCBmbGFnKQoreworICAgIEFTU0VSVChmbGFnID49IDEpOworICAgIEFTU0VSVChmbGFnIDw9
IDMyKTsKKyAgICBvcjMyKFRydXN0ZWRJbW0zMigxdSA8PCAoZmxhZyAtIDEpKSwgQWJzb2x1dGVB
ZGRyZXNzKFNhbXBsaW5nRmxhZ3M6OmFkZHJlc3NPZkZsYWdzKCkpKTsKK30KKwordm9pZCBBc3Nl
bWJseUhlbHBlcnM6OmNsZWFyU2FtcGxpbmdGbGFnKGludDMyX3QgZmxhZykKK3sKKyAgICBBU1NF
UlQoZmxhZyA+PSAxKTsKKyAgICBBU1NFUlQoZmxhZyA8PSAzMik7CisgICAgYW5kMzIoVHJ1c3Rl
ZEltbTMyKH4oMXUgPDwgKGZsYWcgLSAxKSkpLCBBYnNvbHV0ZUFkZHJlc3MoU2FtcGxpbmdGbGFn
czo6YWRkcmVzc09mRmxhZ3MoKSkpOworfQorI2VuZGlmCisKKyNpZiBERkdfRU5BQkxFKEpJVF9B
U1NFUlQpCisjaWYgVVNFKEpTVkFMVUU2NCkKK3ZvaWQgQXNzZW1ibHlIZWxwZXJzOjpqaXRBc3Nl
cnRJc0ludDMyKEdQUlJlZyBncHIpCit7CisjaWYgQ1BVKFg4Nl82NCkKKyAgICBKdW1wIGNoZWNr
SW50MzIgPSBicmFuY2hQdHIoQmVsb3dPckVxdWFsLCBncHIsIFRydXN0ZWRJbW1QdHIocmVpbnRl
cnByZXRfY2FzdDx2b2lkKj4oc3RhdGljX2Nhc3Q8dWludHB0cl90PigweEZGRkZGRkZGdSkpKSk7
CisgICAgYnJlYWtwb2ludCgpOworICAgIGNoZWNrSW50MzIubGluayh0aGlzKTsKKyNlbHNlCisg
ICAgVU5VU0VEX1BBUkFNKGdwcik7CisjZW5kaWYKK30KKwordm9pZCBBc3NlbWJseUhlbHBlcnM6
OmppdEFzc2VydElzSlNJbnQzMihHUFJSZWcgZ3ByKQoreworICAgIEp1bXAgY2hlY2tKU0ludDMy
ID0gYnJhbmNoUHRyKEFib3ZlT3JFcXVhbCwgZ3ByLCBHUFJJbmZvOjp0YWdUeXBlTnVtYmVyUmVn
aXN0ZXIpOworICAgIGJyZWFrcG9pbnQoKTsKKyAgICBjaGVja0pTSW50MzIubGluayh0aGlzKTsK
K30KKwordm9pZCBBc3NlbWJseUhlbHBlcnM6OmppdEFzc2VydElzSlNOdW1iZXIoR1BSUmVnIGdw
cikKK3sKKyAgICBKdW1wIGNoZWNrSlNOdW1iZXIgPSBicmFuY2hUZXN0UHRyKE1hY3JvQXNzZW1i
bGVyOjpOb25aZXJvLCBncHIsIEdQUkluZm86OnRhZ1R5cGVOdW1iZXJSZWdpc3Rlcik7CisgICAg
YnJlYWtwb2ludCgpOworICAgIGNoZWNrSlNOdW1iZXIubGluayh0aGlzKTsKK30KKwordm9pZCBB
c3NlbWJseUhlbHBlcnM6OmppdEFzc2VydElzSlNEb3VibGUoR1BSUmVnIGdwcikKK3sKKyAgICBK
dW1wIGNoZWNrSlNJbnQzMiA9IGJyYW5jaFB0cihBYm92ZU9yRXF1YWwsIGdwciwgR1BSSW5mbzo6
dGFnVHlwZU51bWJlclJlZ2lzdGVyKTsKKyAgICBKdW1wIGNoZWNrSlNOdW1iZXIgPSBicmFuY2hU
ZXN0UHRyKE1hY3JvQXNzZW1ibGVyOjpOb25aZXJvLCBncHIsIEdQUkluZm86OnRhZ1R5cGVOdW1i
ZXJSZWdpc3Rlcik7CisgICAgY2hlY2tKU0ludDMyLmxpbmsodGhpcyk7CisgICAgYnJlYWtwb2lu
dCgpOworICAgIGNoZWNrSlNOdW1iZXIubGluayh0aGlzKTsKK30KKwordm9pZCBBc3NlbWJseUhl
bHBlcnM6OmppdEFzc2VydElzQ2VsbChHUFJSZWcgZ3ByKQoreworICAgIEp1bXAgY2hlY2tDZWxs
ID0gYnJhbmNoVGVzdFB0cihNYWNyb0Fzc2VtYmxlcjo6WmVybywgZ3ByLCBHUFJJbmZvOjp0YWdN
YXNrUmVnaXN0ZXIpOworICAgIGJyZWFrcG9pbnQoKTsKKyAgICBjaGVja0NlbGwubGluayh0aGlz
KTsKK30KKyNlbGlmIFVTRShKU1ZBTFVFMzJfNjQpCit2b2lkIEFzc2VtYmx5SGVscGVyczo6aml0
QXNzZXJ0SXNJbnQzMihHUFJSZWcgZ3ByKQoreworICAgIFVOVVNFRF9QQVJBTShncHIpOworfQor
Cit2b2lkIEFzc2VtYmx5SGVscGVyczo6aml0QXNzZXJ0SXNKU0ludDMyKEdQUlJlZyBncHIpCit7
CisgICAgSnVtcCBjaGVja0pTSW50MzIgPSBicmFuY2gzMihFcXVhbCwgZ3ByLCBUcnVzdGVkSW1t
MzIoSlNWYWx1ZTo6SW50MzJUYWcpKTsKKyAgICBicmVha3BvaW50KCk7CisgICAgY2hlY2tKU0lu
dDMyLmxpbmsodGhpcyk7Cit9CisKK3ZvaWQgQXNzZW1ibHlIZWxwZXJzOjpqaXRBc3NlcnRJc0pT
TnVtYmVyKEdQUlJlZyBncHIpCit7CisgICAgSnVtcCBjaGVja0pTSW50MzIgPSBicmFuY2gzMihF
cXVhbCwgZ3ByLCBUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6SW50MzJUYWcpKTsKKyAgICBKdW1wIGNo
ZWNrSlNEb3VibGUgPSBicmFuY2gzMihCZWxvdywgZ3ByLCBUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6
TG93ZXN0VGFnKSk7CisgICAgYnJlYWtwb2ludCgpOworICAgIGNoZWNrSlNJbnQzMi5saW5rKHRo
aXMpOworICAgIGNoZWNrSlNEb3VibGUubGluayh0aGlzKTsKK30KKwordm9pZCBBc3NlbWJseUhl
bHBlcnM6OmppdEFzc2VydElzSlNEb3VibGUoR1BSUmVnIGdwcikKK3sKKyAgICBKdW1wIGNoZWNr
SlNEb3VibGUgPSBicmFuY2gzMihCZWxvdywgZ3ByLCBUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6TG93
ZXN0VGFnKSk7CisgICAgYnJlYWtwb2ludCgpOworICAgIGNoZWNrSlNEb3VibGUubGluayh0aGlz
KTsKK30KKwordm9pZCBBc3NlbWJseUhlbHBlcnM6OmppdEFzc2VydElzQ2VsbChHUFJSZWcgZ3By
KQoreworICAgIEp1bXAgY2hlY2tDZWxsID0gYnJhbmNoMzIoRXF1YWwsIGdwciwgVHJ1c3RlZElt
bTMyKEpTVmFsdWU6OkNlbGxUYWcpKTsKKyAgICBicmVha3BvaW50KCk7CisgICAgY2hlY2tDZWxs
LmxpbmsodGhpcyk7Cit9CisjZW5kaWYgLy8gVVNFKEpTVkFMVUUzMl82NCkKKyNlbmRpZiAvLyBE
RkdfRU5BQkxFKEpJVF9BU1NFUlQpCisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpERkcKKworI2Vu
ZGlmIC8vIEVOQUJMRShERkdfSklUKQorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR0Fzc2VtYmx5SGVscGVycy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHQXNzZW1ibHlIZWxwZXJzLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR0Fzc2VtYmx5SGVscGVycy5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsx
LDI2MSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMSBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6Cisg
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
KyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisg
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisj
aWZuZGVmIERGR0Fzc2VtYmx5SGVscGVyc19oCisjZGVmaW5lIERGR0Fzc2VtYmx5SGVscGVyc19o
CisKKyNpbmNsdWRlIDx3dGYvUGxhdGZvcm0uaD4KKworI2lmIEVOQUJMRShERkdfSklUKQorCisj
aW5jbHVkZSAiQ29kZUJsb2NrLmgiCisjaW5jbHVkZSAiREZHR1BSSW5mby5oIgorI2luY2x1ZGUg
IkRGR0ZQUkluZm8uaCIKKyNpbmNsdWRlICJERkdOb2RlLmgiCisjaW5jbHVkZSAiSlNHbG9iYWxE
YXRhLmgiCisjaW5jbHVkZSAiTWFjcm9Bc3NlbWJsZXIuaCIKKworbmFtZXNwYWNlIEpTQyB7IG5h
bWVzcGFjZSBERkcgeworCisjaWZuZGVmIE5ERUJVRwordHlwZWRlZiB2b2lkICgqVl9ERkdEZWJ1
Z09wZXJhdGlvbl9FUCkoRXhlY1N0YXRlKiwgdm9pZCopOworI2VuZGlmCisKK2NsYXNzIEFzc2Vt
Ymx5SGVscGVyczogcHVibGljIE1hY3JvQXNzZW1ibGVyIHsKK3B1YmxpYzoKKyAgICBBc3NlbWJs
eUhlbHBlcnMoSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhLCBDb2RlQmxvY2sqIGNvZGVCbG9jaykK
KyAgICAgICAgOiBtX2dsb2JhbERhdGEoZ2xvYmFsRGF0YSkKKyAgICAgICAgLCBtX2NvZGVCbG9j
ayhjb2RlQmxvY2spCisgICAgeworICAgIH0KKyAgICAKKyAgICBDb2RlQmxvY2sqIGNvZGVCbG9j
aygpIHsgcmV0dXJuIG1fY29kZUJsb2NrOyB9CisgICAgSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRh
KCkgeyByZXR1cm4gbV9nbG9iYWxEYXRhOyB9CisgICAgQXNzZW1ibGVyVHlwZV9UJiBhc3NlbWJs
ZXIoKSB7IHJldHVybiBtX2Fzc2VtYmxlcjsgfQorICAgIAorI2lmIENQVShYODZfNjQpIHx8IENQ
VShYODYpCisgICAgdm9pZCBwcmVzZXJ2ZVJldHVybkFkZHJlc3NBZnRlckNhbGwoR1BSUmVnIHJl
ZykKKyAgICB7CisgICAgICAgIHBvcChyZWcpOworICAgIH0KKworICAgIHZvaWQgcmVzdG9yZVJl
dHVybkFkZHJlc3NCZWZvcmVSZXR1cm4oR1BSUmVnIHJlZykKKyAgICB7CisgICAgICAgIHB1c2go
cmVnKTsKKyAgICB9CisKKyAgICB2b2lkIHJlc3RvcmVSZXR1cm5BZGRyZXNzQmVmb3JlUmV0dXJu
KEFkZHJlc3MgYWRkcmVzcykKKyAgICB7CisgICAgICAgIHB1c2goYWRkcmVzcyk7CisgICAgfQor
CisgICAgdm9pZCBlbWl0R2V0RnJvbUNhbGxGcmFtZUhlYWRlclB0cihSZWdpc3RlckZpbGU6OkNh
bGxGcmFtZUhlYWRlckVudHJ5IGVudHJ5LCBHUFJSZWcgdG8pCisgICAgeworICAgICAgICBsb2Fk
UHRyKEFkZHJlc3MoR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIsIGVudHJ5ICogc2l6ZW9mKFJl
Z2lzdGVyKSksIHRvKTsKKyAgICB9CisgICAgdm9pZCBlbWl0UHV0VG9DYWxsRnJhbWVIZWFkZXIo
R1BSUmVnIGZyb20sIFJlZ2lzdGVyRmlsZTo6Q2FsbEZyYW1lSGVhZGVyRW50cnkgZW50cnkpCisg
ICAgeworICAgICAgICBzdG9yZVB0cihmcm9tLCBBZGRyZXNzKEdQUkluZm86OmNhbGxGcmFtZVJl
Z2lzdGVyLCBlbnRyeSAqIHNpemVvZihSZWdpc3RlcikpKTsKKyAgICB9CisKKyAgICB2b2lkIGVt
aXRQdXRJbW1lZGlhdGVUb0NhbGxGcmFtZUhlYWRlcih2b2lkKiB2YWx1ZSwgUmVnaXN0ZXJGaWxl
OjpDYWxsRnJhbWVIZWFkZXJFbnRyeSBlbnRyeSkKKyAgICB7CisgICAgICAgIHN0b3JlUHRyKFRy
dXN0ZWRJbW1QdHIodmFsdWUpLCBBZGRyZXNzKEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyLCBl
bnRyeSAqIHNpemVvZihSZWdpc3RlcikpKTsKKyAgICB9CisjZW5kaWYgLy8gQ1BVKFg4Nl82NCkg
fHwgQ1BVKFg4NikKKworICAgIEp1bXAgYnJhbmNoSWZOb3RDZWxsKEdQUlJlZyByZWcpCisgICAg
eworI2lmIFVTRShKU1ZBTFVFNjQpCisgICAgICAgIHJldHVybiBicmFuY2hUZXN0UHRyKE1hY3Jv
QXNzZW1ibGVyOjpOb25aZXJvLCByZWcsIEdQUkluZm86OnRhZ01hc2tSZWdpc3Rlcik7CisjZWxz
ZQorICAgICAgICByZXR1cm4gYnJhbmNoMzIoTWFjcm9Bc3NlbWJsZXI6Ok5vdEVxdWFsLCByZWcs
IFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpDZWxsVGFnKSk7CisjZW5kaWYKKyAgICB9CisgICAgCisg
ICAgc3RhdGljIEFkZHJlc3MgYWRkcmVzc0Zvckdsb2JhbFZhcihHUFJSZWcgZ2xvYmFsLCBpbnQz
Ml90IHZhck51bWJlcikKKyAgICB7CisgICAgICAgIHJldHVybiBBZGRyZXNzKGdsb2JhbCwgdmFy
TnVtYmVyICogc2l6ZW9mKFJlZ2lzdGVyKSk7CisgICAgfQorCisgICAgc3RhdGljIEFkZHJlc3Mg
dGFnRm9yR2xvYmFsVmFyKEdQUlJlZyBnbG9iYWwsIGludDMyX3QgdmFyTnVtYmVyKQorICAgIHsK
KyAgICAgICAgcmV0dXJuIEFkZHJlc3MoZ2xvYmFsLCB2YXJOdW1iZXIgKiBzaXplb2YoUmVnaXN0
ZXIpICsgT0JKRUNUX09GRlNFVE9GKEVuY29kZWRWYWx1ZURlc2NyaXB0b3IsIGFzQml0cy50YWcp
KTsKKyAgICB9CisKKyAgICBzdGF0aWMgQWRkcmVzcyBwYXlsb2FkRm9yR2xvYmFsVmFyKEdQUlJl
ZyBnbG9iYWwsIGludDMyX3QgdmFyTnVtYmVyKQorICAgIHsKKyAgICAgICAgcmV0dXJuIEFkZHJl
c3MoZ2xvYmFsLCB2YXJOdW1iZXIgKiBzaXplb2YoUmVnaXN0ZXIpICsgT0JKRUNUX09GRlNFVE9G
KEVuY29kZWRWYWx1ZURlc2NyaXB0b3IsIGFzQml0cy5wYXlsb2FkKSk7CisgICAgfQorCisgICAg
c3RhdGljIEFkZHJlc3MgYWRkcmVzc0ZvcihWaXJ0dWFsUmVnaXN0ZXIgdmlydHVhbFJlZ2lzdGVy
KQorICAgIHsKKyAgICAgICAgcmV0dXJuIEFkZHJlc3MoR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0
ZXIsIHZpcnR1YWxSZWdpc3RlciAqIHNpemVvZihSZWdpc3RlcikpOworICAgIH0KKworICAgIHN0
YXRpYyBBZGRyZXNzIHRhZ0ZvcihWaXJ0dWFsUmVnaXN0ZXIgdmlydHVhbFJlZ2lzdGVyKQorICAg
IHsKKyAgICAgICAgcmV0dXJuIEFkZHJlc3MoR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIsIHZp
cnR1YWxSZWdpc3RlciAqIHNpemVvZihSZWdpc3RlcikgKyBPQkpFQ1RfT0ZGU0VUT0YoRW5jb2Rl
ZFZhbHVlRGVzY3JpcHRvciwgYXNCaXRzLnRhZykpOworICAgIH0KKworICAgIHN0YXRpYyBBZGRy
ZXNzIHBheWxvYWRGb3IoVmlydHVhbFJlZ2lzdGVyIHZpcnR1YWxSZWdpc3RlcikKKyAgICB7Cisg
ICAgICAgIHJldHVybiBBZGRyZXNzKEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyLCB2aXJ0dWFs
UmVnaXN0ZXIgKiBzaXplb2YoUmVnaXN0ZXIpICsgT0JKRUNUX09GRlNFVE9GKEVuY29kZWRWYWx1
ZURlc2NyaXB0b3IsIGFzQml0cy5wYXlsb2FkKSk7CisgICAgfQorCisgICAgSnVtcCBicmFuY2hJ
Zk5vdE9iamVjdChHUFJSZWcgc3RydWN0dXJlUmVnKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGJy
YW5jaDgoQmVsb3csIEFkZHJlc3Moc3RydWN0dXJlUmVnLCBTdHJ1Y3R1cmU6OnR5cGVJbmZvVHlw
ZU9mZnNldCgpKSwgVHJ1c3RlZEltbTMyKE9iamVjdFR5cGUpKTsKKyAgICB9CisKKyNpZm5kZWYg
TkRFQlVHCisgICAgLy8gQWRkIGEgZGVidWcgY2FsbC4gVGhpcyBjYWxsIGhhcyBubyBlZmZlY3Qg
b24gSklUIGNvZGUgZXhlY3V0aW9uIHN0YXRlLgorICAgIHZvaWQgZGVidWdDYWxsKFZfREZHRGVi
dWdPcGVyYXRpb25fRVAgZnVuY3Rpb24sIHZvaWQqIGFyZ3VtZW50KQorICAgIHsKKyAgICAgICAg
Zm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IEdQUkluZm86Om51bWJlck9mUmVnaXN0ZXJzOyArK2kp
CisgICAgICAgICAgICBzdG9yZVB0cihHUFJJbmZvOjp0b1JlZ2lzdGVyKGkpLCBtX2dsb2JhbERh
dGEtPmRlYnVnRGF0YUJ1ZmZlciArIGkpOworICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBp
IDwgRlBSSW5mbzo6bnVtYmVyT2ZSZWdpc3RlcnM7ICsraSkgeworICAgICAgICAgICAgbW92ZShU
cnVzdGVkSW1tUHRyKG1fZ2xvYmFsRGF0YS0+ZGVidWdEYXRhQnVmZmVyICsgR1BSSW5mbzo6bnVt
YmVyT2ZSZWdpc3RlcnMgKyBpKSwgR1BSSW5mbzo6cmVnVDApOworICAgICAgICAgICAgc3RvcmVE
b3VibGUoRlBSSW5mbzo6dG9SZWdpc3RlcihpKSwgR1BSSW5mbzo6cmVnVDApOworICAgICAgICB9
CisjaWYgQ1BVKFg4Nl82NCkKKyAgICAgICAgbW92ZShUcnVzdGVkSW1tUHRyKGFyZ3VtZW50KSwg
R1BSSW5mbzo6YXJndW1lbnRHUFIxKTsKKyAgICAgICAgbW92ZShHUFJJbmZvOjpjYWxsRnJhbWVS
ZWdpc3RlciwgR1BSSW5mbzo6YXJndW1lbnRHUFIwKTsKKyNlbGlmIENQVShYODYpCisgICAgICAg
IHBva2UoR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIsIDApOworICAgICAgICBwb2tlKFRydXN0
ZWRJbW1QdHIoYXJndW1lbnQpLCAxKTsKKyNlbHNlCisjZXJyb3IgIkRGRyBKSVQgbm90IHN1cHBv
cnRlZCBvbiB0aGlzIHBsYXRmb3JtLiIKKyNlbmRpZgorICAgICAgICBtb3ZlKFRydXN0ZWRJbW1Q
dHIocmVpbnRlcnByZXRfY2FzdDx2b2lkKj4oZnVuY3Rpb24pKSwgR1BSSW5mbzo6cmVnVDApOwor
ICAgICAgICBjYWxsKEdQUkluZm86OnJlZ1QwKTsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0g
MDsgaSA8IEZQUkluZm86Om51bWJlck9mUmVnaXN0ZXJzOyArK2kpIHsKKyAgICAgICAgICAgIG1v
dmUoVHJ1c3RlZEltbVB0cihtX2dsb2JhbERhdGEtPmRlYnVnRGF0YUJ1ZmZlciArIEdQUkluZm86
Om51bWJlck9mUmVnaXN0ZXJzICsgaSksIEdQUkluZm86OnJlZ1QwKTsKKyAgICAgICAgICAgIGxv
YWREb3VibGUoR1BSSW5mbzo6cmVnVDAsIEZQUkluZm86OnRvUmVnaXN0ZXIoaSkpOworICAgICAg
ICB9CisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBHUFJJbmZvOjpudW1iZXJPZlJl
Z2lzdGVyczsgKytpKQorICAgICAgICAgICAgbG9hZFB0cihtX2dsb2JhbERhdGEtPmRlYnVnRGF0
YUJ1ZmZlciArIGksIEdQUkluZm86OnRvUmVnaXN0ZXIoaSkpOworICAgIH0KKyNlbmRpZgorCisg
ICAgLy8gVGhlc2UgbWV0aG9kcyBKSVQgZ2VuZXJhdGUgZHluYW1pYywgZGVidWctb25seSBjaGVj
a3MgLSBha2luIHRvIEFTU0VSVHMuCisjaWYgREZHX0VOQUJMRShKSVRfQVNTRVJUKQorICAgIHZv
aWQgaml0QXNzZXJ0SXNJbnQzMihHUFJSZWcpOworICAgIHZvaWQgaml0QXNzZXJ0SXNKU0ludDMy
KEdQUlJlZyk7CisgICAgdm9pZCBqaXRBc3NlcnRJc0pTTnVtYmVyKEdQUlJlZyk7CisgICAgdm9p
ZCBqaXRBc3NlcnRJc0pTRG91YmxlKEdQUlJlZyk7CisgICAgdm9pZCBqaXRBc3NlcnRJc0NlbGwo
R1BSUmVnKTsKKyNlbHNlCisgICAgdm9pZCBqaXRBc3NlcnRJc0ludDMyKEdQUlJlZykge30KKyAg
ICB2b2lkIGppdEFzc2VydElzSlNJbnQzMihHUFJSZWcpIHt9CisgICAgdm9pZCBqaXRBc3NlcnRJ
c0pTTnVtYmVyKEdQUlJlZykge30KKyAgICB2b2lkIGppdEFzc2VydElzSlNEb3VibGUoR1BSUmVn
KSB7fQorICAgIHZvaWQgaml0QXNzZXJ0SXNDZWxsKEdQUlJlZykge30KKyNlbmRpZgorCisgICAg
Ly8gVGhlc2UgbWV0aG9kcyBjb252ZXJ0IGJldHdlZW4gZG91YmxlcywgYW5kIGRvdWJsZXMgYm94
ZWQgYW5kIEpTVmFsdWVzLgorI2lmIFVTRShKU1ZBTFVFNjQpCisgICAgR1BSUmVnIGJveERvdWJs
ZShGUFJSZWcgZnByLCBHUFJSZWcgZ3ByKQorICAgIHsKKyAgICAgICAgbW92ZURvdWJsZVRvUHRy
KGZwciwgZ3ByKTsKKyAgICAgICAgc3ViUHRyKEdQUkluZm86OnRhZ1R5cGVOdW1iZXJSZWdpc3Rl
ciwgZ3ByKTsKKyAgICAgICAgcmV0dXJuIGdwcjsKKyAgICB9CisgICAgRlBSUmVnIHVuYm94RG91
YmxlKEdQUlJlZyBncHIsIEZQUlJlZyBmcHIpCisgICAgeworICAgICAgICBqaXRBc3NlcnRJc0pT
RG91YmxlKGdwcik7CisgICAgICAgIGFkZFB0cihHUFJJbmZvOjp0YWdUeXBlTnVtYmVyUmVnaXN0
ZXIsIGdwcik7CisgICAgICAgIG1vdmVQdHJUb0RvdWJsZShncHIsIGZwcik7CisgICAgICAgIHJl
dHVybiBmcHI7CisgICAgfQorI2VsaWYgVVNFKEpTVkFMVUUzMl82NCkKKyAgICB2b2lkIGJveERv
dWJsZShGUFJSZWcgZnByLCBHUFJSZWcgdGFnR1BSLCBHUFJSZWcgcGF5bG9hZEdQUikKKyAgICB7
CisjaWYgQ1BVKFg4NikKKyAgICAgICAgbW92ZVBhY2tlZFRvSW50MzIoZnByLCBwYXlsb2FkR1BS
KTsKKyAgICAgICAgcnNoaWZ0UGFja2VkKFRydXN0ZWRJbW0zMigzMiksIGZwcik7CisgICAgICAg
IG1vdmVQYWNrZWRUb0ludDMyKGZwciwgdGFnR1BSKTsKKyNlbmRpZgorICAgIH0KKyAgICB2b2lk
IHVuYm94RG91YmxlKEdQUlJlZyB0YWdHUFIsIEdQUlJlZyBwYXlsb2FkR1BSLCBGUFJSZWcgZnBy
LCBGUFJSZWcgc2NyYXRjaEZQUikKKyAgICB7CisgICAgICAgIGppdEFzc2VydElzSlNEb3VibGUo
dGFnR1BSKTsKKyNpZiBDUFUoWDg2KQorICAgICAgICBtb3ZlSW50MzJUb1BhY2tlZChwYXlsb2Fk
R1BSLCBmcHIpOworICAgICAgICBtb3ZlSW50MzJUb1BhY2tlZCh0YWdHUFIsIHNjcmF0Y2hGUFIp
OworICAgICAgICBsc2hpZnRQYWNrZWQoVHJ1c3RlZEltbTMyKDMyKSwgc2NyYXRjaEZQUik7Cisg
ICAgICAgIG9yUGFja2VkKHNjcmF0Y2hGUFIsIGZwcik7CisjZW5kaWYKKyAgICB9CisjZW5kaWYK
KworI2lmIEVOQUJMRShTQU1QTElOR19DT1VOVEVSUykKKyAgICAvLyBEZWJ1ZyBwcm9maWxpbmcg
dG9vbC4KKyAgICBzdGF0aWMgdm9pZCBlbWl0Q291bnQoTWFjcm9Bc3NlbWJsZXImLCBBYnN0cmFj
dFNhbXBsaW5nQ291bnRlciYsIHVpbnQzMl90IGluY3JlbWVudCA9IDEpOworICAgIHZvaWQgZW1p
dENvdW50KEFic3RyYWN0U2FtcGxpbmdDb3VudGVyJiBjb3VudGVyLCB1aW50MzJfdCBpbmNyZW1l
bnQgPSAxKQorICAgIHsKKyAgICAgICAgZW1pdENvdW50KCp0aGlzLCBjb3VudGVyLCBpbmNyZW1l
bnQpOworICAgIH0KKyNlbmRpZgorCisjaWYgRU5BQkxFKFNBTVBMSU5HX0ZMQUdTKQorICAgIHZv
aWQgc2V0U2FtcGxpbmdGbGFnKGludDMyX3QgZmxhZyk7CisgICAgdm9pZCBjbGVhclNhbXBsaW5n
RmxhZyhpbnQzMl90IGZsYWcpOworI2VuZGlmCisKKyAgICBKU0dsb2JhbE9iamVjdCogZ2xvYmFs
T2JqZWN0Rm9yKENvZGVPcmlnaW4gY29kZU9yaWdpbikKKyAgICB7CisgICAgICAgIGlmICghY29k
ZU9yaWdpbi5pbmxpbmVDYWxsRnJhbWUpCisgICAgICAgICAgICByZXR1cm4gY29kZUJsb2NrKCkt
Pmdsb2JhbE9iamVjdCgpOworICAgICAgICAvLyBGSVhNRTogaWYgd2UgZXZlciBpbmxpbmUgYmFz
ZWQgb24gZXhlY3V0YWJsZSBub3QgZnVuY3Rpb24sIHRoaXMgY29kZSB3aWxsIG5lZWQgdG8gY2hh
bmdlLgorICAgICAgICByZXR1cm4gY29kZU9yaWdpbi5pbmxpbmVDYWxsRnJhbWUtPmNhbGxlZS0+
c2NvcGUoKS0+Z2xvYmFsT2JqZWN0LmdldCgpOworICAgIH0KKyAgICAKKyAgICBDb2RlQmxvY2sq
IGJhc2VsaW5lQ29kZUJsb2NrRm9yKGNvbnN0IENvZGVPcmlnaW4mIGNvZGVPcmlnaW4pCisgICAg
eworICAgICAgICBpZiAoY29kZU9yaWdpbi5pbmxpbmVDYWxsRnJhbWUpIHsKKyAgICAgICAgICAg
IEV4ZWN1dGFibGVCYXNlKiBleGVjdXRhYmxlID0gY29kZU9yaWdpbi5pbmxpbmVDYWxsRnJhbWUt
PmV4ZWN1dGFibGUuZ2V0KCk7CisgICAgICAgICAgICBBU1NFUlQoZXhlY3V0YWJsZS0+c3RydWN0
dXJlKCktPmNsYXNzSW5mbygpID09ICZGdW5jdGlvbkV4ZWN1dGFibGU6OnNfaW5mbyk7CisgICAg
ICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8RnVuY3Rpb25FeGVjdXRhYmxlKj4oZXhlY3V0YWJs
ZSktPmJhc2VsaW5lQ29kZUJsb2NrRm9yKGNvZGVPcmlnaW4uaW5saW5lQ2FsbEZyYW1lLT5pc0Nh
bGwgPyBDb2RlRm9yQ2FsbCA6IENvZGVGb3JDb25zdHJ1Y3QpOworICAgICAgICB9CisgICAgICAg
IEFTU0VSVChjb2RlQmxvY2soKS0+YWx0ZXJuYXRpdmUoKSA9PSBjb2RlQmxvY2soKS0+YmFzZWxp
bmVWZXJzaW9uKCkpOworICAgICAgICByZXR1cm4gY29kZUJsb2NrKCktPmFsdGVybmF0aXZlKCk7
CisgICAgfQorICAgIAorICAgIFZlY3RvcjxCeXRlY29kZUFuZE1hY2hpbmVPZmZzZXQ+JiBkZWNv
ZGVkQ29kZU1hcEZvcihDb2RlQmxvY2sqKTsKKworcHJvdGVjdGVkOgorICAgIEpTR2xvYmFsRGF0
YSogbV9nbG9iYWxEYXRhOworICAgIENvZGVCbG9jayogbV9jb2RlQmxvY2s7CisKKyAgICBIYXNo
TWFwPENvZGVCbG9jayosIFZlY3RvcjxCeXRlY29kZUFuZE1hY2hpbmVPZmZzZXQ+ID4gbV9kZWNv
ZGVkQ29kZU1hcHM7Cit9OworCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZHCisKKyNlbmRpZiAv
LyBFTkFCTEUoREZHX0pJVCkKKworI2VuZGlmIC8vIERGR0Fzc2VtYmx5SGVscGVyc19oCisKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSklUQ29tcGlsZXIzMl82NC5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdKSVRDb21waWxlcjMyXzY0
LmNwcAkocmV2aXNpb24gOTk0ODYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0pJ
VENvbXBpbGVyMzJfNjQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01NTgsNDMgKzU1OCw2IEBAIHZv
aWQgSklUQ29tcGlsZXI6OmV4aXRTcGVjdWxhdGl2ZVdpdGhPU1IKICNlbmRpZgogfQogCi0jaWYg
REZHX0VOQUJMRShKSVRfQVNTRVJUKQotdm9pZCBKSVRDb21waWxlcjo6aml0QXNzZXJ0SXNJbnQz
MihHUFJSZWcgZ3ByKQotewotICAgIFVOVVNFRF9QQVJBTShncHIpOwotfQotCi12b2lkIEpJVENv
bXBpbGVyOjpqaXRBc3NlcnRJc0pTSW50MzIoR1BSUmVnIGdwcikKLXsKLSAgICBKdW1wIGNoZWNr
SlNJbnQzMiA9IGJyYW5jaDMyKEVxdWFsLCBncHIsIFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpJbnQz
MlRhZykpOwotICAgIGJyZWFrcG9pbnQoKTsKLSAgICBjaGVja0pTSW50MzIubGluayh0aGlzKTsK
LX0KLQotdm9pZCBKSVRDb21waWxlcjo6aml0QXNzZXJ0SXNKU051bWJlcihHUFJSZWcgZ3ByKQot
ewotICAgIEp1bXAgY2hlY2tKU0ludDMyID0gYnJhbmNoMzIoRXF1YWwsIGdwciwgVHJ1c3RlZElt
bTMyKEpTVmFsdWU6OkludDMyVGFnKSk7Ci0gICAgSnVtcCBjaGVja0pTRG91YmxlID0gYnJhbmNo
MzIoQmVsb3csIGdwciwgVHJ1c3RlZEltbTMyKEpTVmFsdWU6Okxvd2VzdFRhZykpOwotICAgIGJy
ZWFrcG9pbnQoKTsKLSAgICBjaGVja0pTSW50MzIubGluayh0aGlzKTsKLSAgICBjaGVja0pTRG91
YmxlLmxpbmsodGhpcyk7Ci19Ci0KLXZvaWQgSklUQ29tcGlsZXI6OmppdEFzc2VydElzSlNEb3Vi
bGUoR1BSUmVnIGdwcikKLXsKLSAgICBKdW1wIGNoZWNrSlNEb3VibGUgPSBicmFuY2gzMihCZWxv
dywgZ3ByLCBUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6TG93ZXN0VGFnKSk7Ci0gICAgYnJlYWtwb2lu
dCgpOwotICAgIGNoZWNrSlNEb3VibGUubGluayh0aGlzKTsKLX0KLQotdm9pZCBKSVRDb21waWxl
cjo6aml0QXNzZXJ0SXNDZWxsKEdQUlJlZyBncHIpCi17Ci0gICAgSnVtcCBjaGVja0NlbGwgPSBi
cmFuY2gzMihFcXVhbCwgZ3ByLCBUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6Q2VsbFRhZykpOwotICAg
IGJyZWFrcG9pbnQoKTsKLSAgICBjaGVja0NlbGwubGluayh0aGlzKTsKLX0KLSNlbmRpZgotCiB9
IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZHCiAKICNlbmRpZgpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdKSVRDb21waWxlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdKSVRDb21waWxlci5jcHAJKHJldmlzaW9uIDk5NDg2KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdKSVRDb21waWxlci5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTM4LDIwICszOCw2IEBACiAKIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKIAot
VmVjdG9yPEJ5dGVjb2RlQW5kTWFjaGluZU9mZnNldD4mIEpJVENvbXBpbGVyOjpkZWNvZGVkQ29k
ZU1hcEZvcihDb2RlQmxvY2sqIGNvZGVCbG9jaykKLXsKLSAgICBBU1NFUlQoY29kZUJsb2NrID09
IGNvZGVCbG9jay0+YmFzZWxpbmVWZXJzaW9uKCkpOwotICAgIEFTU0VSVChjb2RlQmxvY2stPmdl
dEpJVFR5cGUoKSA9PSBKSVRDb2RlOjpCYXNlbGluZUpJVCk7Ci0gICAgQVNTRVJUKGNvZGVCbG9j
ay0+aml0Q29kZU1hcCgpKTsKLSAgICAKLSAgICBzdGQ6OnBhaXI8SGFzaE1hcDxDb2RlQmxvY2sq
LCBWZWN0b3I8Qnl0ZWNvZGVBbmRNYWNoaW5lT2Zmc2V0PiA+OjppdGVyYXRvciwgYm9vbD4gcmVz
dWx0ID0gbV9kZWNvZGVkQ29kZU1hcHMuYWRkKGNvZGVCbG9jaywgVmVjdG9yPEJ5dGVjb2RlQW5k
TWFjaGluZU9mZnNldD4oKSk7Ci0gICAgCi0gICAgaWYgKHJlc3VsdC5zZWNvbmQpCi0gICAgICAg
IGNvZGVCbG9jay0+aml0Q29kZU1hcCgpLT5kZWNvZGUocmVzdWx0LmZpcnN0LT5zZWNvbmQpOwot
ICAgIAotICAgIHJldHVybiByZXN1bHQuZmlyc3QtPnNlY29uZDsKLX0KLQogdm9pZCBKSVRDb21w
aWxlcjo6bGlua09TUkV4aXRzKFNwZWN1bGF0aXZlSklUJiBzcGVjdWxhdGl2ZSkKIHsKICAgICBP
U1JFeGl0VmVjdG9yOjpJdGVyYXRvciBleGl0c0l0ZXIgPSBzcGVjdWxhdGl2ZS5vc3JFeGl0cygp
LmJlZ2luKCk7CkBAIC0yODksMzggKzI3NSw2IEBAIHZvaWQgSklUQ29tcGlsZXI6OmNvbXBpbGVG
dW5jdGlvbihKSVRDb2QKICAgICBlbnRyeSA9IEpJVENvZGUobGlua0J1ZmZlci5maW5hbGl6ZUNv
ZGUoKSwgSklUQ29kZTo6REZHSklUKTsKIH0KIAotI2lmIEVOQUJMRShTQU1QTElOR19DT1VOVEVS
UykgJiYgQ1BVKFg4Nl82NCkgLy8gT3IgYW55IG90aGVyIDY0LWJpdCBwbGF0Zm9ybSEKLXZvaWQg
SklUQ29tcGlsZXI6OmVtaXRDb3VudChNYWNyb0Fzc2VtYmxlciYgaml0LCBBYnN0cmFjdFNhbXBs
aW5nQ291bnRlciYgY291bnRlciwgdWludDMyX3QgaW5jcmVtZW50KQotewotICAgIGppdC5hZGRQ
dHIoVHJ1c3RlZEltbTMyKGluY3JlbWVudCksIEFic29sdXRlQWRkcmVzcyhjb3VudGVyLmFkZHJl
c3NPZkNvdW50ZXIoKSkpOwotfQotI2VuZGlmCi0KLSNpZiBFTkFCTEUoU0FNUExJTkdfQ09VTlRF
UlMpICYmIENQVShYODYpIC8vIE9yIGFueSBvdGhlciBsaXR0bGUtZW5kaWFuIDMyLWJpdCBwbGF0
Zm9ybSEKLXZvaWQgSklUQ29tcGlsZXI6OmVtaXRDb3VudChNYWNyb0FzZW1ibGVyJiBqaXQsIEFi
c3RyYWN0U2FtcGxpbmdDb3VudGVyJiBjb3VudGVyLCB1aW50MzJfdCBpbmNyZW1lbnQpCi17Ci0g
ICAgaW50cHRyX3QgaGlXb3JkID0gcmVpbnRlcnByZXRfY2FzdDxpbnRwdHJfdD4oY291bnRlci5h
ZGRyZXNzT2ZDb3VudGVyKCkpICsgc2l6ZW9mKGludDMyX3QpOwotICAgIGppdC5hZGQzMihUcnVz
dGVkSW1tMzIoaW5jcmVtZW50KSwgQWJzb2x1dGVBZGRyZXNzKGNvdW50ZXIuYWRkcmVzc09mQ291
bnRlcigpKSk7Ci0gICAgaml0LmFkZFdpdGhDYXJyeTMyKFRydXN0ZWRJbW0zMigwKSwgQWJzb2x1
dGVBZGRyZXNzKHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KGhpV29yZCkpKTsKLX0KLSNlbmRpZgot
Ci0jaWYgRU5BQkxFKFNBTVBMSU5HX0ZMQUdTKQotdm9pZCBKSVRDb21waWxlcjo6c2V0U2FtcGxp
bmdGbGFnKGludDMyX3QgZmxhZykKLXsKLSAgICBBU1NFUlQoZmxhZyA+PSAxKTsKLSAgICBBU1NF
UlQoZmxhZyA8PSAzMik7Ci0gICAgb3IzMihUcnVzdGVkSW1tMzIoMXUgPDwgKGZsYWcgLSAxKSks
IEFic29sdXRlQWRkcmVzcyhTYW1wbGluZ0ZsYWdzOjphZGRyZXNzT2ZGbGFncygpKSk7Ci19Ci0K
LXZvaWQgSklUQ29tcGlsZXI6OmNsZWFyU2FtcGxpbmdGbGFnKGludDMyX3QgZmxhZykKLXsKLSAg
ICBBU1NFUlQoZmxhZyA+PSAxKTsKLSAgICBBU1NFUlQoZmxhZyA8PSAzMik7Ci0gICAgYW5kMzIo
VHJ1c3RlZEltbTMyKH4oMXUgPDwgKGZsYWcgLSAxKSkpLCBBYnNvbHV0ZUFkZHJlc3MoU2FtcGxp
bmdGbGFnczo6YWRkcmVzc09mRmxhZ3MoKSkpOwotfQotI2VuZGlmCi0KICNpZiBVU0UoSlNWQUxV
RTY0KQogCiB2b2lkIEpJVENvbXBpbGVyOjpleGl0U3BlY3VsYXRpdmVXaXRoT1NSKGNvbnN0IE9T
UkV4aXQmIGV4aXQsIFNwZWN1bGF0aW9uUmVjb3ZlcnkqIHJlY292ZXJ5KQpAQCAtODQ0LDQ5ICs3
OTgsNiBAQCB2b2lkIEpJVENvbXBpbGVyOjpleGl0U3BlY3VsYXRpdmVXaXRoT1NSCiAjZW5kaWYK
IH0KIAotI2lmIERGR19FTkFCTEUoSklUX0FTU0VSVCkKLXZvaWQgSklUQ29tcGlsZXI6OmppdEFz
c2VydElzSW50MzIoR1BSUmVnIGdwcikKLXsKLSNpZiBDUFUoWDg2XzY0KQotICAgIEp1bXAgY2hl
Y2tJbnQzMiA9IGJyYW5jaFB0cihCZWxvd09yRXF1YWwsIGdwciwgVHJ1c3RlZEltbVB0cihyZWlu
dGVycHJldF9jYXN0PHZvaWQqPihzdGF0aWNfY2FzdDx1aW50cHRyX3Q+KDB4RkZGRkZGRkZ1KSkp
KTsKLSAgICBicmVha3BvaW50KCk7Ci0gICAgY2hlY2tJbnQzMi5saW5rKHRoaXMpOwotI2Vsc2UK
LSAgICBVTlVTRURfUEFSQU0oZ3ByKTsKLSNlbmRpZgotfQotCi12b2lkIEpJVENvbXBpbGVyOjpq
aXRBc3NlcnRJc0pTSW50MzIoR1BSUmVnIGdwcikKLXsKLSAgICBKdW1wIGNoZWNrSlNJbnQzMiA9
IGJyYW5jaFB0cihBYm92ZU9yRXF1YWwsIGdwciwgR1BSSW5mbzo6dGFnVHlwZU51bWJlclJlZ2lz
dGVyKTsKLSAgICBicmVha3BvaW50KCk7Ci0gICAgY2hlY2tKU0ludDMyLmxpbmsodGhpcyk7Ci19
Ci0KLXZvaWQgSklUQ29tcGlsZXI6OmppdEFzc2VydElzSlNOdW1iZXIoR1BSUmVnIGdwcikKLXsK
LSAgICBKdW1wIGNoZWNrSlNOdW1iZXIgPSBicmFuY2hUZXN0UHRyKE1hY3JvQXNzZW1ibGVyOjpO
b25aZXJvLCBncHIsIEdQUkluZm86OnRhZ1R5cGVOdW1iZXJSZWdpc3Rlcik7Ci0gICAgYnJlYWtw
b2ludCgpOwotICAgIGNoZWNrSlNOdW1iZXIubGluayh0aGlzKTsKLX0KLQotdm9pZCBKSVRDb21w
aWxlcjo6aml0QXNzZXJ0SXNKU0RvdWJsZShHUFJSZWcgZ3ByKQotewotICAgIEp1bXAgY2hlY2tK
U0ludDMyID0gYnJhbmNoUHRyKEFib3ZlT3JFcXVhbCwgZ3ByLCBHUFJJbmZvOjp0YWdUeXBlTnVt
YmVyUmVnaXN0ZXIpOwotICAgIEp1bXAgY2hlY2tKU051bWJlciA9IGJyYW5jaFRlc3RQdHIoTWFj
cm9Bc3NlbWJsZXI6Ok5vblplcm8sIGdwciwgR1BSSW5mbzo6dGFnVHlwZU51bWJlclJlZ2lzdGVy
KTsKLSAgICBjaGVja0pTSW50MzIubGluayh0aGlzKTsKLSAgICBicmVha3BvaW50KCk7Ci0gICAg
Y2hlY2tKU051bWJlci5saW5rKHRoaXMpOwotfQotCi12b2lkIEpJVENvbXBpbGVyOjpqaXRBc3Nl
cnRJc0NlbGwoR1BSUmVnIGdwcikKLXsKLSAgICBKdW1wIGNoZWNrQ2VsbCA9IGJyYW5jaFRlc3RQ
dHIoTWFjcm9Bc3NlbWJsZXI6Olplcm8sIGdwciwgR1BSSW5mbzo6dGFnTWFza1JlZ2lzdGVyKTsK
LSAgICBicmVha3BvaW50KCk7Ci0gICAgY2hlY2tDZWxsLmxpbmsodGhpcyk7Ci19Ci0jZW5kaWYK
LQogI2VuZGlmIC8vIFVTRShKU1ZBTFVFNjQpCiAKIH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpERkcK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSklUQ29tcGlsZXIuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0pJVENvbXBpbGVyLmgJKHJldmlz
aW9uIDk5NDg2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdKSVRDb21waWxlci5o
CSh3b3JraW5nIGNvcHkpCkBAIC0zMCw2ICszMCw3IEBACiAKICNpbmNsdWRlIDxhc3NlbWJsZXIv
TWFjcm9Bc3NlbWJsZXIuaD4KICNpbmNsdWRlIDxieXRlY29kZS9Db2RlQmxvY2suaD4KKyNpbmNs
dWRlIDxkZmcvREZHQXNzZW1ibHlIZWxwZXJzLmg+CiAjaW5jbHVkZSA8ZGZnL0RGR0ZQUkluZm8u
aD4KICNpbmNsdWRlIDxkZmcvREZHR1BSSW5mby5oPgogI2luY2x1ZGUgPGRmZy9ERkdHcmFwaC5o
PgpAQCAtNTIsMTAgKzUzLDYgQEAgY2xhc3MgU3BlY3VsYXRpb25SZWNvdmVyeTsKIHN0cnVjdCBF
bnRyeUxvY2F0aW9uOwogc3RydWN0IE9TUkV4aXQ7CiAKLSNpZm5kZWYgTkRFQlVHCi10eXBlZGVm
IHZvaWQgKCpWX0RGR0RlYnVnT3BlcmF0aW9uX0VQKShFeGVjU3RhdGUqLCB2b2lkKik7Ci0jZW5k
aWYKLQogI2lmIERGR19FTkFCTEUoVkVSQk9TRV9TUEVDVUxBVElPTl9GQUlMVVJFKQogc3RydWN0
IFNwZWN1bGF0aW9uRmFpbHVyZURlYnVnSW5mbyB7CiAgICAgQ29kZUJsb2NrKiBjb2RlQmxvY2s7
CkBAIC0xMTEsMTIgKzEwOCwxMSBAQCBzdHJ1Y3QgQ2FsbEV4Y2VwdGlvblJlY29yZCB7CiAvLyBy
ZWxhdGlvbnNoaXApLiBUaGUgSklUQ29tcGlsZXIgaG9sZHMgcmVmZXJlbmNlcyB0byBpbmZvcm1h
dGlvbiByZXF1aXJlZCBkdXJpbmcKIC8vIGNvbXBpbGF0aW9uLCBhbmQgYWxzbyByZWNvcmRzIGlu
Zm9ybWF0aW9uIHVzZWQgaW4gbGlua2luZyAoZS5nLiBhIGxpc3Qgb2YgYWxsCiAvLyBjYWxsIHRv
IGJlIGxpbmtlZCkuCi1jbGFzcyBKSVRDb21waWxlciA6IHB1YmxpYyBNYWNyb0Fzc2VtYmxlciB7
CitjbGFzcyBKSVRDb21waWxlciA6IHB1YmxpYyBBc3NlbWJseUhlbHBlcnMgewogcHVibGljOgog
ICAgIEpJVENvbXBpbGVyKEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YSwgR3JhcGgmIGRmZywgQ29k
ZUJsb2NrKiBjb2RlQmxvY2spCi0gICAgICAgIDogbV9nbG9iYWxEYXRhKGdsb2JhbERhdGEpCisg
ICAgICAgIDogQXNzZW1ibHlIZWxwZXJzKGdsb2JhbERhdGEsIGNvZGVCbG9jaykKICAgICAgICAg
LCBtX2dyYXBoKGRmZykKLSAgICAgICAgLCBtX2NvZGVCbG9jayhjb2RlQmxvY2spCiAgICAgewog
ICAgIH0KIApAQCAtMTI1LDg0ICsxMjEsNiBAQCBwdWJsaWM6CiAKICAgICAvLyBBY2Nlc3NvcnMg
Zm9yIHByb3BlcnRpZXMuCiAgICAgR3JhcGgmIGdyYXBoKCkgeyByZXR1cm4gbV9ncmFwaDsgfQot
ICAgIENvZGVCbG9jayogY29kZUJsb2NrKCkgeyByZXR1cm4gbV9jb2RlQmxvY2s7IH0KLSAgICBK
U0dsb2JhbERhdGEqIGdsb2JhbERhdGEoKSB7IHJldHVybiBtX2dsb2JhbERhdGE7IH0KLSAgICBB
c3NlbWJsZXJUeXBlX1QmIGFzc2VtYmxlcigpIHsgcmV0dXJuIG1fYXNzZW1ibGVyOyB9Ci0KLSNp
ZiBDUFUoWDg2XzY0KSB8fCBDUFUoWDg2KQotICAgIHZvaWQgcHJlc2VydmVSZXR1cm5BZGRyZXNz
QWZ0ZXJDYWxsKEdQUlJlZyByZWcpCi0gICAgewotICAgICAgICBwb3AocmVnKTsKLSAgICB9Ci0K
LSAgICB2b2lkIHJlc3RvcmVSZXR1cm5BZGRyZXNzQmVmb3JlUmV0dXJuKEdQUlJlZyByZWcpCi0g
ICAgewotICAgICAgICBwdXNoKHJlZyk7Ci0gICAgfQotCi0gICAgdm9pZCByZXN0b3JlUmV0dXJu
QWRkcmVzc0JlZm9yZVJldHVybihBZGRyZXNzIGFkZHJlc3MpCi0gICAgewotICAgICAgICBwdXNo
KGFkZHJlc3MpOwotICAgIH0KLQotICAgIHZvaWQgZW1pdEdldEZyb21DYWxsRnJhbWVIZWFkZXJQ
dHIoUmVnaXN0ZXJGaWxlOjpDYWxsRnJhbWVIZWFkZXJFbnRyeSBlbnRyeSwgR1BSUmVnIHRvKQot
ICAgIHsKLSAgICAgICAgbG9hZFB0cihBZGRyZXNzKEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVy
LCBlbnRyeSAqIHNpemVvZihSZWdpc3RlcikpLCB0byk7Ci0gICAgfQotICAgIHZvaWQgZW1pdFB1
dFRvQ2FsbEZyYW1lSGVhZGVyKEdQUlJlZyBmcm9tLCBSZWdpc3RlckZpbGU6OkNhbGxGcmFtZUhl
YWRlckVudHJ5IGVudHJ5KQotICAgIHsKLSAgICAgICAgc3RvcmVQdHIoZnJvbSwgQWRkcmVzcyhH
UFJJbmZvOjpjYWxsRnJhbWVSZWdpc3RlciwgZW50cnkgKiBzaXplb2YoUmVnaXN0ZXIpKSk7Ci0g
ICAgfQotCi0gICAgdm9pZCBlbWl0UHV0SW1tZWRpYXRlVG9DYWxsRnJhbWVIZWFkZXIodm9pZCog
dmFsdWUsIFJlZ2lzdGVyRmlsZTo6Q2FsbEZyYW1lSGVhZGVyRW50cnkgZW50cnkpCi0gICAgewot
ICAgICAgICBzdG9yZVB0cihUcnVzdGVkSW1tUHRyKHZhbHVlKSwgQWRkcmVzcyhHUFJJbmZvOjpj
YWxsRnJhbWVSZWdpc3RlciwgZW50cnkgKiBzaXplb2YoUmVnaXN0ZXIpKSk7Ci0gICAgfQotI2Vu
ZGlmCi0KLSAgICBKdW1wIGJyYW5jaElmTm90Q2VsbChHUFJSZWcgcmVnKQotICAgIHsKLSNpZiBV
U0UoSlNWQUxVRTY0KQotICAgICAgICByZXR1cm4gYnJhbmNoVGVzdFB0cihNYWNyb0Fzc2VtYmxl
cjo6Tm9uWmVybywgcmVnLCBHUFJJbmZvOjp0YWdNYXNrUmVnaXN0ZXIpOwotI2Vsc2UKLSAgICAg
ICAgcmV0dXJuIGJyYW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpOb3RFcXVhbCwgcmVnLCBUcnVzdGVk
SW1tMzIoSlNWYWx1ZTo6Q2VsbFRhZykpOwotI2VuZGlmCi0gICAgfQotICAgIAotICAgIHN0YXRp
YyBBZGRyZXNzIGFkZHJlc3NGb3JHbG9iYWxWYXIoR1BSUmVnIGdsb2JhbCwgaW50MzJfdCB2YXJO
dW1iZXIpCi0gICAgewotICAgICAgICByZXR1cm4gQWRkcmVzcyhnbG9iYWwsIHZhck51bWJlciAq
IHNpemVvZihSZWdpc3RlcikpOwotICAgIH0KLQotICAgIHN0YXRpYyBBZGRyZXNzIHRhZ0Zvckds
b2JhbFZhcihHUFJSZWcgZ2xvYmFsLCBpbnQzMl90IHZhck51bWJlcikKLSAgICB7Ci0gICAgICAg
IHJldHVybiBBZGRyZXNzKGdsb2JhbCwgdmFyTnVtYmVyICogc2l6ZW9mKFJlZ2lzdGVyKSArIE9C
SkVDVF9PRkZTRVRPRihFbmNvZGVkVmFsdWVEZXNjcmlwdG9yLCBhc0JpdHMudGFnKSk7Ci0gICAg
fQotCi0gICAgc3RhdGljIEFkZHJlc3MgcGF5bG9hZEZvckdsb2JhbFZhcihHUFJSZWcgZ2xvYmFs
LCBpbnQzMl90IHZhck51bWJlcikKLSAgICB7Ci0gICAgICAgIHJldHVybiBBZGRyZXNzKGdsb2Jh
bCwgdmFyTnVtYmVyICogc2l6ZW9mKFJlZ2lzdGVyKSArIE9CSkVDVF9PRkZTRVRPRihFbmNvZGVk
VmFsdWVEZXNjcmlwdG9yLCBhc0JpdHMucGF5bG9hZCkpOwotICAgIH0KLQotICAgIHN0YXRpYyBB
ZGRyZXNzIGFkZHJlc3NGb3IoVmlydHVhbFJlZ2lzdGVyIHZpcnR1YWxSZWdpc3RlcikKLSAgICB7
Ci0gICAgICAgIHJldHVybiBBZGRyZXNzKEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyLCB2aXJ0
dWFsUmVnaXN0ZXIgKiBzaXplb2YoUmVnaXN0ZXIpKTsKLSAgICB9Ci0KLSAgICBzdGF0aWMgQWRk
cmVzcyB0YWdGb3IoVmlydHVhbFJlZ2lzdGVyIHZpcnR1YWxSZWdpc3RlcikKLSAgICB7Ci0gICAg
ICAgIHJldHVybiBBZGRyZXNzKEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyLCB2aXJ0dWFsUmVn
aXN0ZXIgKiBzaXplb2YoUmVnaXN0ZXIpICsgT0JKRUNUX09GRlNFVE9GKEVuY29kZWRWYWx1ZURl
c2NyaXB0b3IsIGFzQml0cy50YWcpKTsKLSAgICB9Ci0KLSAgICBzdGF0aWMgQWRkcmVzcyBwYXls
b2FkRm9yKFZpcnR1YWxSZWdpc3RlciB2aXJ0dWFsUmVnaXN0ZXIpCi0gICAgewotICAgICAgICBy
ZXR1cm4gQWRkcmVzcyhHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3RlciwgdmlydHVhbFJlZ2lzdGVy
ICogc2l6ZW9mKFJlZ2lzdGVyKSArIE9CSkVDVF9PRkZTRVRPRihFbmNvZGVkVmFsdWVEZXNjcmlw
dG9yLCBhc0JpdHMucGF5bG9hZCkpOwotICAgIH0KLQotICAgIEp1bXAgYnJhbmNoSWZOb3RPYmpl
Y3QoR1BSUmVnIHN0cnVjdHVyZVJlZykKLSAgICB7Ci0gICAgICAgIHJldHVybiBicmFuY2g4KEJl
bG93LCBBZGRyZXNzKHN0cnVjdHVyZVJlZywgU3RydWN0dXJlOjp0eXBlSW5mb1R5cGVPZmZzZXQo
KSksIFRydXN0ZWRJbW0zMihPYmplY3RUeXBlKSk7Ci0gICAgfQogCiAgICAgLy8gTm90aWZ5IHRo
ZSBKSVQgb2YgYSBjYWxsIHRoYXQgZG9lcyBub3QgcmVxdWlyZSBsaW5raW5nLgogICAgIHZvaWQg
bm90aWZ5Q2FsbChDYWxsIGZ1bmN0aW9uQ2FsbCwgQ29kZU9yaWdpbiBjb2RlT3JpZ2luKQpAQCAt
MjM4LDM2ICsxNTYsNiBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBmdW5jdGlvbkNhbGw7CiAg
ICAgfQogICAgIAotI2lmbmRlZiBOREVCVUcKLSAgICAvLyBBZGQgYSBkZWJ1ZyBjYWxsLiBUaGlz
IGNhbGwgaGFzIG5vIGVmZmVjdCBvbiBKSVQgY29kZSBleGVjdXRpb24gc3RhdGUuCi0gICAgdm9p
ZCBkZWJ1Z0NhbGwoVl9ERkdEZWJ1Z09wZXJhdGlvbl9FUCBmdW5jdGlvbiwgdm9pZCogYXJndW1l
bnQpCi0gICAgewotICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgR1BSSW5mbzo6bnVt
YmVyT2ZSZWdpc3RlcnM7ICsraSkKLSAgICAgICAgICAgIHN0b3JlUHRyKEdQUkluZm86OnRvUmVn
aXN0ZXIoaSksIG1fZ2xvYmFsRGF0YS0+ZGVidWdEYXRhQnVmZmVyICsgaSk7Ci0gICAgICAgIGZv
ciAodW5zaWduZWQgaSA9IDA7IGkgPCBGUFJJbmZvOjpudW1iZXJPZlJlZ2lzdGVyczsgKytpKSB7
Ci0gICAgICAgICAgICBtb3ZlKFRydXN0ZWRJbW1QdHIobV9nbG9iYWxEYXRhLT5kZWJ1Z0RhdGFC
dWZmZXIgKyBHUFJJbmZvOjpudW1iZXJPZlJlZ2lzdGVycyArIGkpLCBHUFJJbmZvOjpyZWdUMCk7
Ci0gICAgICAgICAgICBzdG9yZURvdWJsZShGUFJJbmZvOjp0b1JlZ2lzdGVyKGkpLCBHUFJJbmZv
OjpyZWdUMCk7Ci0gICAgICAgIH0KLSNpZiBDUFUoWDg2XzY0KQotICAgICAgICBtb3ZlKFRydXN0
ZWRJbW1QdHIoYXJndW1lbnQpLCBHUFJJbmZvOjphcmd1bWVudEdQUjEpOwotICAgICAgICBtb3Zl
KEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyLCBHUFJJbmZvOjphcmd1bWVudEdQUjApOwotI2Vs
aWYgQ1BVKFg4NikKLSAgICAgICAgcG9rZShHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3RlciwgMCk7
Ci0gICAgICAgIHBva2UoVHJ1c3RlZEltbVB0cihhcmd1bWVudCksIDEpOwotI2Vsc2UKLSNlcnJv
ciAiREZHIEpJVCBub3Qgc3VwcG9ydGVkIG9uIHRoaXMgcGxhdGZvcm0uIgotI2VuZGlmCi0gICAg
ICAgIG1vdmUoVHJ1c3RlZEltbVB0cihyZWludGVycHJldF9jYXN0PHZvaWQqPihmdW5jdGlvbikp
LCBHUFJJbmZvOjpyZWdUMCk7Ci0gICAgICAgIGNhbGwoR1BSSW5mbzo6cmVnVDApOwotICAgICAg
ICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgRlBSSW5mbzo6bnVtYmVyT2ZSZWdpc3RlcnM7ICsr
aSkgewotICAgICAgICAgICAgbW92ZShUcnVzdGVkSW1tUHRyKG1fZ2xvYmFsRGF0YS0+ZGVidWdE
YXRhQnVmZmVyICsgR1BSSW5mbzo6bnVtYmVyT2ZSZWdpc3RlcnMgKyBpKSwgR1BSSW5mbzo6cmVn
VDApOwotICAgICAgICAgICAgbG9hZERvdWJsZShHUFJJbmZvOjpyZWdUMCwgRlBSSW5mbzo6dG9S
ZWdpc3RlcihpKSk7Ci0gICAgICAgIH0KLSAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8
IEdQUkluZm86Om51bWJlck9mUmVnaXN0ZXJzOyArK2kpCi0gICAgICAgICAgICBsb2FkUHRyKG1f
Z2xvYmFsRGF0YS0+ZGVidWdEYXRhQnVmZmVyICsgaSwgR1BSSW5mbzo6dG9SZWdpc3RlcihpKSk7
Ci0gICAgfQotI2VuZGlmCi0KICAgICAvLyBIZWxwZXIgbWV0aG9kcyB0byBjaGVjayBub2RlcyBm
b3IgY29uc3RhbnRzLgogICAgIGJvb2wgaXNDb25zdGFudChOb2RlSW5kZXggbm9kZUluZGV4KSB7
IHJldHVybiBncmFwaCgpLmlzQ29uc3RhbnQobm9kZUluZGV4KTsgfQogICAgIGJvb2wgaXNKU0Nv
bnN0YW50KE5vZGVJbmRleCBub2RlSW5kZXgpIHsgcmV0dXJuIGdyYXBoKCkuaXNKU0NvbnN0YW50
KG5vZGVJbmRleCk7IH0KQEAgLTMxNCw3MSArMjAyLDYgQEAgcHVibGljOgogICAgIHZvaWQgZW1p
dFN0b3JlRG91YmxlKE5vZGVJbmRleCwgRlBSUmVnIHZhbHVlKTsKICNlbmRpZgogCi0gICAgLy8g
VGhlc2UgbWV0aG9kcyBKSVQgZ2VuZXJhdGUgZHluYW1pYywgZGVidWctb25seSBjaGVja3MgLSBh
a2luIHRvIEFTU0VSVHMuCi0jaWYgREZHX0VOQUJMRShKSVRfQVNTRVJUKQotICAgIHZvaWQgaml0
QXNzZXJ0SXNJbnQzMihHUFJSZWcpOwotICAgIHZvaWQgaml0QXNzZXJ0SXNKU0ludDMyKEdQUlJl
Zyk7Ci0gICAgdm9pZCBqaXRBc3NlcnRJc0pTTnVtYmVyKEdQUlJlZyk7Ci0gICAgdm9pZCBqaXRB
c3NlcnRJc0pTRG91YmxlKEdQUlJlZyk7Ci0gICAgdm9pZCBqaXRBc3NlcnRJc0NlbGwoR1BSUmVn
KTsKLSNlbHNlCi0gICAgdm9pZCBqaXRBc3NlcnRJc0ludDMyKEdQUlJlZykge30KLSAgICB2b2lk
IGppdEFzc2VydElzSlNJbnQzMihHUFJSZWcpIHt9Ci0gICAgdm9pZCBqaXRBc3NlcnRJc0pTTnVt
YmVyKEdQUlJlZykge30KLSAgICB2b2lkIGppdEFzc2VydElzSlNEb3VibGUoR1BSUmVnKSB7fQot
ICAgIHZvaWQgaml0QXNzZXJ0SXNDZWxsKEdQUlJlZykge30KLSNlbmRpZgotCi0gICAgLy8gVGhl
c2UgbWV0aG9kcyBjb252ZXJ0IGJldHdlZW4gZG91YmxlcywgYW5kIGRvdWJsZXMgYm94ZWQgYW5k
IEpTVmFsdWVzLgotI2lmIFVTRShKU1ZBTFVFNjQpCi0gICAgR1BSUmVnIGJveERvdWJsZShGUFJS
ZWcgZnByLCBHUFJSZWcgZ3ByKQotICAgIHsKLSAgICAgICAgbW92ZURvdWJsZVRvUHRyKGZwciwg
Z3ByKTsKLSAgICAgICAgc3ViUHRyKEdQUkluZm86OnRhZ1R5cGVOdW1iZXJSZWdpc3RlciwgZ3By
KTsKLSAgICAgICAgcmV0dXJuIGdwcjsKLSAgICB9Ci0gICAgRlBSUmVnIHVuYm94RG91YmxlKEdQ
UlJlZyBncHIsIEZQUlJlZyBmcHIpCi0gICAgewotICAgICAgICBqaXRBc3NlcnRJc0pTRG91Ymxl
KGdwcik7Ci0gICAgICAgIGFkZFB0cihHUFJJbmZvOjp0YWdUeXBlTnVtYmVyUmVnaXN0ZXIsIGdw
cik7Ci0gICAgICAgIG1vdmVQdHJUb0RvdWJsZShncHIsIGZwcik7Ci0gICAgICAgIHJldHVybiBm
cHI7Ci0gICAgfQotI2VsaWYgVVNFKEpTVkFMVUUzMl82NCkKLSAgICB2b2lkIGJveERvdWJsZShG
UFJSZWcgZnByLCBHUFJSZWcgdGFnR1BSLCBHUFJSZWcgcGF5bG9hZEdQUikKLSAgICB7Ci0jaWYg
Q1BVKFg4NikKLSAgICAgICAgbW92ZVBhY2tlZFRvSW50MzIoZnByLCBwYXlsb2FkR1BSKTsKLSAg
ICAgICAgcnNoaWZ0UGFja2VkKFRydXN0ZWRJbW0zMigzMiksIGZwcik7Ci0gICAgICAgIG1vdmVQ
YWNrZWRUb0ludDMyKGZwciwgdGFnR1BSKTsKLSNlbmRpZgotICAgIH0KLSAgICB2b2lkIHVuYm94
RG91YmxlKEdQUlJlZyB0YWdHUFIsIEdQUlJlZyBwYXlsb2FkR1BSLCBGUFJSZWcgZnByLCBGUFJS
ZWcgc2NyYXRjaEZQUikKLSAgICB7Ci0gICAgICAgIGppdEFzc2VydElzSlNEb3VibGUodGFnR1BS
KTsKLSNpZiBDUFUoWDg2KQotICAgICAgICBtb3ZlSW50MzJUb1BhY2tlZChwYXlsb2FkR1BSLCBm
cHIpOwotICAgICAgICBtb3ZlSW50MzJUb1BhY2tlZCh0YWdHUFIsIHNjcmF0Y2hGUFIpOwotICAg
ICAgICBsc2hpZnRQYWNrZWQoVHJ1c3RlZEltbTMyKDMyKSwgc2NyYXRjaEZQUik7Ci0gICAgICAg
IG9yUGFja2VkKHNjcmF0Y2hGUFIsIGZwcik7Ci0jZW5kaWYKLSAgICB9Ci0jZW5kaWYKLQotI2lm
IEVOQUJMRShTQU1QTElOR19DT1VOVEVSUykKLSAgICAvLyBEZWJ1ZyBwcm9maWxpbmcgdG9vbC4K
LSAgICBzdGF0aWMgdm9pZCBlbWl0Q291bnQoTWFjcm9Bc3NlbWJsZXImLCBBYnN0cmFjdFNhbXBs
aW5nQ291bnRlciYsIHVpbnQzMl90IGluY3JlbWVudCA9IDEpOwotICAgIHZvaWQgZW1pdENvdW50
KEFic3RyYWN0U2FtcGxpbmdDb3VudGVyJiBjb3VudGVyLCB1aW50MzJfdCBpbmNyZW1lbnQgPSAx
KQotICAgIHsKLSAgICAgICAgZW1pdENvdW50KCp0aGlzLCBjb3VudGVyLCBpbmNyZW1lbnQpOwot
ICAgIH0KLSNlbmRpZgotCi0jaWYgRU5BQkxFKFNBTVBMSU5HX0ZMQUdTKQotICAgIHZvaWQgc2V0
U2FtcGxpbmdGbGFnKGludDMyX3QgZmxhZyk7Ci0gICAgdm9pZCBjbGVhclNhbXBsaW5nRmxhZyhp
bnQzMl90IGZsYWcpOwotI2VuZGlmCi0KICNpZiBVU0UoSlNWQUxVRTY0KQogICAgIHZvaWQgYWRk
UHJvcGVydHlBY2Nlc3MoSklUQ29tcGlsZXI6OkNhbGwgZnVuY3Rpb25DYWxsLCBpbnQxNl90IGRl
bHRhQ2hlY2tJbW1Ub0NhbGwsIGludDE2X3QgZGVsdGFDYWxsVG9TdHJ1Y3RDaGVjaywgaW50MTZf
dCBkZWx0YUNhbGxUb0xvYWRPclN0b3JlLCBpbnQxNl90IGRlbHRhQ2FsbFRvU2xvd0Nhc2UsIGlu
dDE2X3QgZGVsdGFDYWxsVG9Eb25lLCBpbnQ4X3QgYmFzZUdQUiwgaW50OF90IHZhbHVlR1BSLCBp
bnQ4X3Qgc2NyYXRjaEdQUikKICAgICB7CkBAIC00MzIsMTQgKzI1NSw2IEBAIHB1YmxpYzoKICAg
ICAgICAgcmV0dXJuIG1fZ3JhcGgudmFsdWVQcm9maWxlRm9yKG5vZGVJbmRleCwgYmFzZWxpbmVD
b2RlQmxvY2tGb3IobV9ncmFwaFtub2RlSW5kZXhdLmNvZGVPcmlnaW4pKTsKICAgICB9CiAgICAg
Ci0gICAgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdEZvcihDb2RlT3JpZ2luIGNvZGVPcmln
aW4pCi0gICAgewotICAgICAgICBpZiAoIWNvZGVPcmlnaW4uaW5saW5lQ2FsbEZyYW1lKQotICAg
ICAgICAgICAgcmV0dXJuIGNvZGVCbG9jaygpLT5nbG9iYWxPYmplY3QoKTsKLSAgICAgICAgLy8g
RklYTUU6IGlmIHdlIGV2ZXIgaW5saW5lIGJhc2VkIG9uIGV4ZWN1dGFibGUgbm90IGZ1bmN0aW9u
LCB0aGlzIGNvZGUgd2lsbCBuZWVkIHRvIGNoYW5nZS4KLSAgICAgICAgcmV0dXJuIGNvZGVPcmln
aW4uaW5saW5lQ2FsbEZyYW1lLT5jYWxsZWUtPnNjb3BlKCktPmdsb2JhbE9iamVjdC5nZXQoKTsK
LSAgICB9Ci0gICAgCiBwcml2YXRlOgogICAgIC8vIEludGVybmFsIGltcGxlbWVudGF0aW9uIHRv
IGNvbXBpbGUuCiAgICAgdm9pZCBjb21waWxlRW50cnkoKTsKQEAgLTQ0OSwzMCArMjY0LDkgQEAg
cHJpdmF0ZToKICAgICB2b2lkIGV4aXRTcGVjdWxhdGl2ZVdpdGhPU1IoY29uc3QgT1NSRXhpdCYs
IFNwZWN1bGF0aW9uUmVjb3ZlcnkqKTsKICAgICB2b2lkIGxpbmtPU1JFeGl0cyhTcGVjdWxhdGl2
ZUpJVCYpOwogICAgIAotICAgIENvZGVCbG9jayogYmFzZWxpbmVDb2RlQmxvY2tGb3IoY29uc3Qg
Q29kZU9yaWdpbiYgY29kZU9yaWdpbikKLSAgICB7Ci0gICAgICAgIGlmIChjb2RlT3JpZ2luLmlu
bGluZUNhbGxGcmFtZSkgewotICAgICAgICAgICAgRXhlY3V0YWJsZUJhc2UqIGV4ZWN1dGFibGUg
PSBjb2RlT3JpZ2luLmlubGluZUNhbGxGcmFtZS0+ZXhlY3V0YWJsZS5nZXQoKTsKLSAgICAgICAg
ICAgIEFTU0VSVChleGVjdXRhYmxlLT5zdHJ1Y3R1cmUoKS0+Y2xhc3NJbmZvKCkgPT0gJkZ1bmN0
aW9uRXhlY3V0YWJsZTo6c19pbmZvKTsKLSAgICAgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxG
dW5jdGlvbkV4ZWN1dGFibGUqPihleGVjdXRhYmxlKS0+YmFzZWxpbmVDb2RlQmxvY2tGb3IoY29k
ZU9yaWdpbi5pbmxpbmVDYWxsRnJhbWUtPmlzQ2FsbCA/IENvZGVGb3JDYWxsIDogQ29kZUZvckNv
bnN0cnVjdCk7Ci0gICAgICAgIH0KLSAgICAgICAgQVNTRVJUKGNvZGVCbG9jaygpLT5hbHRlcm5h
dGl2ZSgpID09IGNvZGVCbG9jaygpLT5iYXNlbGluZVZlcnNpb24oKSk7Ci0gICAgICAgIHJldHVy
biBjb2RlQmxvY2soKS0+YWx0ZXJuYXRpdmUoKTsKLSAgICB9Ci0gICAgCi0gICAgVmVjdG9yPEJ5
dGVjb2RlQW5kTWFjaGluZU9mZnNldD4mIGRlY29kZWRDb2RlTWFwRm9yKENvZGVCbG9jayopOwot
Ci0gICAgLy8gVGhlIGdsb2JhbERhdGEsIHVzZWQgdG8gYWNjZXNzIGNvbnN0YW50cyBzdWNoIGFz
IHRoZSB2UHRycy4KLSAgICBKU0dsb2JhbERhdGEqIG1fZ2xvYmFsRGF0YTsKLQogICAgIC8vIFRo
ZSBkYXRhZmxvdyBncmFwaCBjdXJyZW50bHkgYmVpbmcgZ2VuZXJhdGVkLgogICAgIEdyYXBoJiBt
X2dyYXBoOwogCi0gICAgLy8gVGhlIGNvZGVCbG9jayBjdXJyZW50bHkgYmVpbmcgZ2VuZXJhdGVk
LCB1c2VkIHRvIGFjY2VzcyBpbmZvcm1hdGlvbiBzdWNoIGFzIGNvbnN0YW50IHZhbHVlcywgaW1t
ZWRpYXRlcy4KLSAgICBDb2RlQmxvY2sqIG1fY29kZUJsb2NrOwotICAgIAotICAgIEhhc2hNYXA8
Q29kZUJsb2NrKiwgVmVjdG9yPEJ5dGVjb2RlQW5kTWFjaGluZU9mZnNldD4gPiBtX2RlY29kZWRD
b2RlTWFwczsKLSAgICAKICAgICAvLyBWZWN0b3Igb2YgY2FsbHMgb3V0IGZyb20gSklUIGNvZGUs
IGluY2x1ZGluZyBleGNlcHRpb24gaGFuZGxlciBpbmZvcm1hdGlvbi4KICAgICAvLyBDb3VudCBv
ZiB0aGUgbnVtYmVyIG9mIENhbGxSZWNvcmRzIHdpdGggZXhjZXB0aW9uIGhhbmRsZXJzLgogICAg
IFZlY3RvcjxDYWxsTGlua1JlY29yZD4gbV9jYWxsczsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHT1NSRXhpdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHT1NSRXhpdC5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdPU1JFeGl0LmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMTM1IEBACisvKgorICog
Q29weXJpZ2h0IChDKSAyMDExIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJ
UycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRP
UlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisg
KiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgREZHT1NSRXhp
dF9oCisjZGVmaW5lIERGR09TUkV4aXRfaAorCisjaW5jbHVkZSA8d3RmL1BsYXRmb3JtLmg+CisK
KyNpZiBFTkFCTEUoREZHX0pJVCkKKworI2luY2x1ZGUgIkRGR0dQUkluZm8uaCIKKyNpbmNsdWRl
ICJNYWNyb0Fzc2VtYmxlci5oIgorI2luY2x1ZGUgIlZhbHVlUHJvZmlsZS5oIgorI2luY2x1ZGUg
PHd0Zi9WZWN0b3IuaD4KKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgeworCitjbGFz
cyBTcGVjdWxhdGl2ZUpJVDsKKworLy8gVGhpcyBlbnVtIGRlc2NyaWJlcyB0aGUgdHlwZXMgb2Yg
YWRkaXRpb25hbCByZWNvdmVyeSB0aGF0CisvLyBtYXkgbmVlZCBiZSBwZXJmb3JtZWQgc2hvdWxk
IGEgc3BlY3VsYXRpb24gY2hlY2sgZmFpbC4KK2VudW0gU3BlY3VsYXRpb25SZWNvdmVyeVR5cGUg
eworICAgIFNwZWN1bGF0aXZlQWRkLAorICAgIEJvb2xlYW5TcGVjdWxhdGlvbkNoZWNrCit9Owor
CisvLyA9PT0gU3BlY3VsYXRpb25SZWNvdmVyeSA9PT0KKy8vCisvLyBUaGlzIGNsYXNzIHByb3Zp
ZGVzIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24gdGhhdCBtYXkgYmUgYXNzb2NpYXRlZCB3aXRoIGEK
Ky8vIHNwZWN1bGF0aW9uIGNoZWNrIC0gZm9yIGV4YW1wbGUgCitjbGFzcyBTcGVjdWxhdGlvblJl
Y292ZXJ5IHsKK3B1YmxpYzoKKyAgICBTcGVjdWxhdGlvblJlY292ZXJ5KFNwZWN1bGF0aW9uUmVj
b3ZlcnlUeXBlIHR5cGUsIEdQUlJlZyBkZXN0LCBHUFJSZWcgc3JjKQorICAgICAgICA6IG1fdHlw
ZSh0eXBlKQorICAgICAgICAsIG1fZGVzdChkZXN0KQorICAgICAgICAsIG1fc3JjKHNyYykKKyAg
ICB7CisgICAgfQorCisgICAgU3BlY3VsYXRpb25SZWNvdmVyeVR5cGUgdHlwZSgpIHsgcmV0dXJu
IG1fdHlwZTsgfQorICAgIEdQUlJlZyBkZXN0KCkgeyByZXR1cm4gbV9kZXN0OyB9CisgICAgR1BS
UmVnIHNyYygpIHsgcmV0dXJuIG1fc3JjOyB9CisKK3ByaXZhdGU6CisgICAgLy8gSW5kaWNhdGVz
IHRoZSB0eXBlIG9mIGFkZGl0aW9uYWwgcmVjb3ZlcnkgdG8gYmUgcGVyZm9ybWVkLgorICAgIFNw
ZWN1bGF0aW9uUmVjb3ZlcnlUeXBlIG1fdHlwZTsKKyAgICAvLyBkaWZmZXJlbnQgcmVjb3Zlcnkg
dHlwZXMgbWF5IHJlcXVpcmVkIGRpZmZlcmVudCBhZGRpdGlvbmFsIGluZm9ybWF0aW9uIGhlcmUu
CisgICAgR1BSUmVnIG1fZGVzdDsKKyAgICBHUFJSZWcgbV9zcmM7Cit9OworCisvLyA9PT0gT1NS
RXhpdCA9PT0KKy8vCisvLyBUaGlzIHN0cnVjdHVyZSBkZXNjcmliZXMgaG93IHRvIGV4aXQgdGhl
IHNwZWN1bGF0aXZlIHBhdGggYnkKKy8vIGdvaW5nIGludG8gYmFzZWxpbmUgY29kZS4KK3N0cnVj
dCBPU1JFeGl0IHsKKyAgICBPU1JFeGl0KEpTVmFsdWVTb3VyY2UsIFZhbHVlUHJvZmlsZSosIE1h
Y3JvQXNzZW1ibGVyOjpKdW1wLCBTcGVjdWxhdGl2ZUpJVCosIHVuc2lnbmVkIHJlY292ZXJ5SW5k
ZXggPSAwKTsKKyAgICAKKyAgICBKU1ZhbHVlU291cmNlIG1fanNWYWx1ZVNvdXJjZTsKKyAgICBW
YWx1ZVByb2ZpbGUqIG1fdmFsdWVQcm9maWxlOworICAgIAorICAgIE1hY3JvQXNzZW1ibGVyOjpK
dW1wIG1fY2hlY2s7CisgICAgTm9kZUluZGV4IG1fbm9kZUluZGV4OworICAgIENvZGVPcmlnaW4g
bV9jb2RlT3JpZ2luOworICAgIAorICAgIHVuc2lnbmVkIG1fcmVjb3ZlcnlJbmRleDsKKyAgICAK
KyAgICAvLyBDb252ZW5pZW50IHdheSBvZiBpdGVyYXRpbmcgb3ZlciBWYWx1ZVJlY292ZXJpZXMg
d2hpbGUgYmVpbmcKKyAgICAvLyBnZW5lcmljIG92ZXIgYXJndW1lbnQgdmVyc3VzIHZhcmlhYmxl
LgorICAgIGludCBudW1iZXJPZlJlY292ZXJpZXMoKSBjb25zdCB7IHJldHVybiBtX2FyZ3VtZW50
cy5zaXplKCkgKyBtX3ZhcmlhYmxlcy5zaXplKCk7IH0KKyAgICBjb25zdCBWYWx1ZVJlY292ZXJ5
JiB2YWx1ZVJlY292ZXJ5KGludCBpbmRleCkgY29uc3QKKyAgICB7CisgICAgICAgIGlmIChpbmRl
eCA8IChpbnQpbV9hcmd1bWVudHMuc2l6ZSgpKQorICAgICAgICAgICAgcmV0dXJuIG1fYXJndW1l
bnRzW2luZGV4XTsKKyAgICAgICAgcmV0dXJuIG1fdmFyaWFibGVzW2luZGV4IC0gbV9hcmd1bWVu
dHMuc2l6ZSgpXTsKKyAgICB9CisgICAgYm9vbCBpc0FyZ3VtZW50KGludCBpbmRleCkgY29uc3Qg
eyByZXR1cm4gaW5kZXggPCAoaW50KW1fYXJndW1lbnRzLnNpemUoKTsgfQorICAgIGJvb2wgaXNW
YXJpYWJsZShpbnQgaW5kZXgpIGNvbnN0IHsgcmV0dXJuICFpc0FyZ3VtZW50KGluZGV4KTsgfQor
ICAgIGludCBhcmd1bWVudEZvckluZGV4KGludCBpbmRleCkgY29uc3QKKyAgICB7CisgICAgICAg
IHJldHVybiBpbmRleDsKKyAgICB9CisgICAgaW50IHZhcmlhYmxlRm9ySW5kZXgoaW50IGluZGV4
KSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIGluZGV4IC0gbV9hcmd1bWVudHMuc2l6ZSgp
OworICAgIH0KKyAgICBpbnQgb3BlcmFuZEZvckFyZ3VtZW50KGludCBhcmd1bWVudCkgY29uc3QK
KyAgICB7CisgICAgICAgIHJldHVybiBhcmd1bWVudCAtIG1fYXJndW1lbnRzLnNpemUoKSAtIFJl
Z2lzdGVyRmlsZTo6Q2FsbEZyYW1lSGVhZGVyU2l6ZTsKKyAgICB9CisgICAgaW50IG9wZXJhbmRG
b3JJbmRleChpbnQgaW5kZXgpIGNvbnN0CisgICAgeworICAgICAgICBpZiAoaW5kZXggPCAoaW50
KW1fYXJndW1lbnRzLnNpemUoKSkKKyAgICAgICAgICAgIHJldHVybiBvcGVyYW5kRm9yQXJndW1l
bnQoaW5kZXgpOworICAgICAgICByZXR1cm4gaW5kZXggLSBtX2FyZ3VtZW50cy5zaXplKCk7Cisg
ICAgfQorICAgIAorI2lmbmRlZiBOREVCVUcKKyAgICB2b2lkIGR1bXAoRklMRSogb3V0KSBjb25z
dDsKKyNlbmRpZgorICAgIAorICAgIFZlY3RvcjxWYWx1ZVJlY292ZXJ5LCAwPiBtX2FyZ3VtZW50
czsKKyAgICBWZWN0b3I8VmFsdWVSZWNvdmVyeSwgMD4gbV92YXJpYWJsZXM7CisgICAgaW50IG1f
bGFzdFNldE9wZXJhbmQ7Cit9OwordHlwZWRlZiBTZWdtZW50ZWRWZWN0b3I8T1NSRXhpdCwgMTY+
IE9TUkV4aXRWZWN0b3I7CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpERkcKKworI2VuZGlmIC8v
IEVOQUJMRShERkdfSklUKQorCisjZW5kaWYgLy8gREZHT1NSRXhpdF9oCisKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmgJKHJldmlzaW9uIDk5
NDg2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5oCSh3
b3JraW5nIGNvcHkpCkBAIC0yOCw0NiArMjgsMTUgQEAKIAogI2lmIEVOQUJMRShERkdfSklUKQog
CisjaW5jbHVkZSAiREZHQWJzdHJhY3RTdGF0ZS5oIgorI2luY2x1ZGUgIkRGR0pJVENvZGVHZW5l
cmF0b3IuaCIKKyNpbmNsdWRlICJERkdPU1JFeGl0LmgiCiAjaW5jbHVkZSAiVmFsdWVSZWNvdmVy
eS5oIgotI2luY2x1ZGUgPGRmZy9ERkdBYnN0cmFjdFN0YXRlLmg+Ci0jaW5jbHVkZSA8ZGZnL0RG
R0pJVENvZGVHZW5lcmF0b3IuaD4KIAogbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgewog
CiBjbGFzcyBTcGVjdWxhdGl2ZUpJVDsKIAotLy8gVGhpcyBlbnVtIGRlc2NyaWJlcyB0aGUgdHlw
ZXMgb2YgYWRkaXRpb25hbCByZWNvdmVyeSB0aGF0Ci0vLyBtYXkgbmVlZCBiZSBwZXJmb3JtZWQg
c2hvdWxkIGEgc3BlY3VsYXRpb24gY2hlY2sgZmFpbC4KLWVudW0gU3BlY3VsYXRpb25SZWNvdmVy
eVR5cGUgewotICAgIFNwZWN1bGF0aXZlQWRkLAotICAgIEJvb2xlYW5TcGVjdWxhdGlvbkNoZWNr
Ci19OwotCi0vLyA9PT0gU3BlY3VsYXRpb25SZWNvdmVyeSA9PT0KLS8vCi0vLyBUaGlzIGNsYXNz
IHByb3ZpZGVzIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24gdGhhdCBtYXkgYmUgYXNzb2NpYXRlZCB3
aXRoIGEKLS8vIHNwZWN1bGF0aW9uIGNoZWNrIC0gZm9yIGV4YW1wbGUgCi1jbGFzcyBTcGVjdWxh
dGlvblJlY292ZXJ5IHsKLXB1YmxpYzoKLSAgICBTcGVjdWxhdGlvblJlY292ZXJ5KFNwZWN1bGF0
aW9uUmVjb3ZlcnlUeXBlIHR5cGUsIEdQUlJlZyBkZXN0LCBHUFJSZWcgc3JjKQotICAgICAgICA6
IG1fdHlwZSh0eXBlKQotICAgICAgICAsIG1fZGVzdChkZXN0KQotICAgICAgICAsIG1fc3JjKHNy
YykKLSAgICB7Ci0gICAgfQotCi0gICAgU3BlY3VsYXRpb25SZWNvdmVyeVR5cGUgdHlwZSgpIHsg
cmV0dXJuIG1fdHlwZTsgfQotICAgIEdQUlJlZyBkZXN0KCkgeyByZXR1cm4gbV9kZXN0OyB9Ci0g
ICAgR1BSUmVnIHNyYygpIHsgcmV0dXJuIG1fc3JjOyB9Ci0KLXByaXZhdGU6Ci0gICAgLy8gSW5k
aWNhdGVzIHRoZSB0eXBlIG9mIGFkZGl0aW9uYWwgcmVjb3ZlcnkgdG8gYmUgcGVyZm9ybWVkLgot
ICAgIFNwZWN1bGF0aW9uUmVjb3ZlcnlUeXBlIG1fdHlwZTsKLSAgICAvLyBkaWZmZXJlbnQgcmVj
b3ZlcnkgdHlwZXMgbWF5IHJlcXVpcmVkIGRpZmZlcmVudCBhZGRpdGlvbmFsIGluZm9ybWF0aW9u
IGhlcmUuCi0gICAgR1BSUmVnIG1fZGVzdDsKLSAgICBHUFJSZWcgbV9zcmM7Ci19OwotCiBlbnVt
IFZhbHVlU291cmNlS2luZCB7CiAgICAgU291cmNlTm90U2V0LAogICAgIFZhbHVlSW5SZWdpc3Rl
ckZpbGUsCkBAIC0xNDYsNjIgKzExNSw2IEBAIHByaXZhdGU6CiAgICAgTm9kZUluZGV4IG1fbm9k
ZUluZGV4OwogfTsKICAgICAKLS8vID09PSBPU1JFeGl0ID09PQotLy8KLS8vIFRoaXMgc3RydWN0
dXJlIGRlc2NyaWJlcyBob3cgdG8gZXhpdCB0aGUgc3BlY3VsYXRpdmUgcGF0aCBieQotLy8gZ29p
bmcgaW50byBiYXNlbGluZSBjb2RlLgotc3RydWN0IE9TUkV4aXQgewotICAgIE9TUkV4aXQoSlNW
YWx1ZVNvdXJjZSwgVmFsdWVQcm9maWxlKiwgTWFjcm9Bc3NlbWJsZXI6Okp1bXAsIFNwZWN1bGF0
aXZlSklUKiwgdW5zaWduZWQgcmVjb3ZlcnlJbmRleCA9IDApOwotICAgIAotICAgIEpTVmFsdWVT
b3VyY2UgbV9qc1ZhbHVlU291cmNlOwotICAgIFZhbHVlUHJvZmlsZSogbV92YWx1ZVByb2ZpbGU7
Ci0gICAgCi0gICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgbV9jaGVjazsKLSAgICBOb2RlSW5kZXgg
bV9ub2RlSW5kZXg7Ci0gICAgQ29kZU9yaWdpbiBtX2NvZGVPcmlnaW47Ci0gICAgCi0gICAgdW5z
aWduZWQgbV9yZWNvdmVyeUluZGV4OwotICAgIAotICAgIC8vIENvbnZlbmllbnQgd2F5IG9mIGl0
ZXJhdGluZyBvdmVyIFZhbHVlUmVjb3ZlcmllcyB3aGlsZSBiZWluZwotICAgIC8vIGdlbmVyaWMg
b3ZlciBhcmd1bWVudCB2ZXJzdXMgdmFyaWFibGUuCi0gICAgaW50IG51bWJlck9mUmVjb3Zlcmll
cygpIGNvbnN0IHsgcmV0dXJuIG1fYXJndW1lbnRzLnNpemUoKSArIG1fdmFyaWFibGVzLnNpemUo
KTsgfQotICAgIGNvbnN0IFZhbHVlUmVjb3ZlcnkmIHZhbHVlUmVjb3ZlcnkoaW50IGluZGV4KSBj
b25zdAotICAgIHsKLSAgICAgICAgaWYgKGluZGV4IDwgKGludCltX2FyZ3VtZW50cy5zaXplKCkp
Ci0gICAgICAgICAgICByZXR1cm4gbV9hcmd1bWVudHNbaW5kZXhdOwotICAgICAgICByZXR1cm4g
bV92YXJpYWJsZXNbaW5kZXggLSBtX2FyZ3VtZW50cy5zaXplKCldOwotICAgIH0KLSAgICBib29s
IGlzQXJndW1lbnQoaW50IGluZGV4KSBjb25zdCB7IHJldHVybiBpbmRleCA8IChpbnQpbV9hcmd1
bWVudHMuc2l6ZSgpOyB9Ci0gICAgYm9vbCBpc1ZhcmlhYmxlKGludCBpbmRleCkgY29uc3QgeyBy
ZXR1cm4gIWlzQXJndW1lbnQoaW5kZXgpOyB9Ci0gICAgaW50IGFyZ3VtZW50Rm9ySW5kZXgoaW50
IGluZGV4KSBjb25zdAotICAgIHsKLSAgICAgICAgcmV0dXJuIGluZGV4OwotICAgIH0KLSAgICBp
bnQgdmFyaWFibGVGb3JJbmRleChpbnQgaW5kZXgpIGNvbnN0Ci0gICAgewotICAgICAgICByZXR1
cm4gaW5kZXggLSBtX2FyZ3VtZW50cy5zaXplKCk7Ci0gICAgfQotICAgIGludCBvcGVyYW5kRm9y
QXJndW1lbnQoaW50IGFyZ3VtZW50KSBjb25zdAotICAgIHsKLSAgICAgICAgcmV0dXJuIGFyZ3Vt
ZW50IC0gbV9hcmd1bWVudHMuc2l6ZSgpIC0gUmVnaXN0ZXJGaWxlOjpDYWxsRnJhbWVIZWFkZXJT
aXplOwotICAgIH0KLSAgICBpbnQgb3BlcmFuZEZvckluZGV4KGludCBpbmRleCkgY29uc3QKLSAg
ICB7Ci0gICAgICAgIGlmIChpbmRleCA8IChpbnQpbV9hcmd1bWVudHMuc2l6ZSgpKQotICAgICAg
ICAgICAgcmV0dXJuIG9wZXJhbmRGb3JBcmd1bWVudChpbmRleCk7Ci0gICAgICAgIHJldHVybiBp
bmRleCAtIG1fYXJndW1lbnRzLnNpemUoKTsKLSAgICB9Ci0gICAgCi0jaWZuZGVmIE5ERUJVRwot
ICAgIHZvaWQgZHVtcChGSUxFKiBvdXQpIGNvbnN0OwotI2VuZGlmCi0gICAgCi0gICAgVmVjdG9y
PFZhbHVlUmVjb3ZlcnksIDA+IG1fYXJndW1lbnRzOwotICAgIFZlY3RvcjxWYWx1ZVJlY292ZXJ5
LCAwPiBtX3ZhcmlhYmxlczsKLSAgICBpbnQgbV9sYXN0U2V0T3BlcmFuZDsKLX07Ci10eXBlZGVm
IFNlZ21lbnRlZFZlY3RvcjxPU1JFeGl0LCAxNj4gT1NSRXhpdFZlY3RvcjsKLQogLy8gPT09IFNw
ZWN1bGF0aXZlSklUID09PQogLy8KIC8vIFRoZSBTcGVjdWxhdGl2ZUpJVCBpcyB1c2VkIHRvIGdl
bmVyYXRlIGEgZmFzdCwgYnV0IHBvdGVudGlhbGx5Cg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>113952</attachid>
            <date>2011-11-07 16:32:52 -0800</date>
            <delta_ts>2011-11-07 18:27:16 -0800</delta_ts>
            <desc>the patch</desc>
            <filename>dfgosrrefactor_patch_2.diff</filename>
            <type>text/plain</type>
            <size>46486</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gOTk0OTkpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsNDMgQEAK
KzIwMTEtMTEtMDcgIEZpbGlwIFBpemxvICA8ZnBpemxvQGFwcGxlLmNvbT4KKworICAgICAgICBE
RkcgY29kZSBiYXNlIHNob3VsZCBhbGxvdyBmb3IgY2xhc3NlcyBub3QgcmVsYXRlZCB0byBERkc6
OkpJVENvbXBpbGVyCisgICAgICAgIHRvIHVzZSBERkcgaWRpb21zCisgICAgICAgIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD03MTc0NgorCisgICAgICAgIFJldmlld2Vk
IGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogSmF2YVNjcmlwdENvcmUueGNvZGVwcm9q
L3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgKiBkZmcvREZHQXNzZW1ibHlIZWxwZXJzLmNwcDog
QWRkZWQuCisgICAgICAgIChKU0M6OkRGRzo6QXNzZW1ibHlIZWxwZXJzOjpkZWNvZGVkQ29kZU1h
cEZvcik6CisgICAgICAgIChKU0M6OkRGRzo6QXNzZW1ibHlIZWxwZXJzOjplbWl0Q291bnQpOgor
ICAgICAgICAoSlNDOjpERkc6OkFzc2VtYmx5SGVscGVyczo6c2V0U2FtcGxpbmdGbGFnKToKKyAg
ICAgICAgKEpTQzo6REZHOjpBc3NlbWJseUhlbHBlcnM6OmNsZWFyU2FtcGxpbmdGbGFnKToKKyAg
ICAgICAgKEpTQzo6REZHOjpBc3NlbWJseUhlbHBlcnM6OmppdEFzc2VydElzSW50MzIpOgorICAg
ICAgICAoSlNDOjpERkc6OkFzc2VtYmx5SGVscGVyczo6aml0QXNzZXJ0SXNKU0ludDMyKToKKyAg
ICAgICAgKEpTQzo6REZHOjpBc3NlbWJseUhlbHBlcnM6OmppdEFzc2VydElzSlNOdW1iZXIpOgor
ICAgICAgICAoSlNDOjpERkc6OkFzc2VtYmx5SGVscGVyczo6aml0QXNzZXJ0SXNKU0RvdWJsZSk6
CisgICAgICAgIChKU0M6OkRGRzo6QXNzZW1ibHlIZWxwZXJzOjpqaXRBc3NlcnRJc0NlbGwpOgor
ICAgICAgICAqIGRmZy9ERkdBc3NlbWJseUhlbHBlcnMuaDogQWRkZWQuCisgICAgICAgICogZGZn
L0RGR0pJVENvbXBpbGVyLmNwcDoKKyAgICAgICAgKiBkZmcvREZHSklUQ29tcGlsZXIuaDoKKyAg
ICAgICAgKEpTQzo6REZHOjpKSVRDb21waWxlcjo6SklUQ29tcGlsZXIpOgorICAgICAgICAoSlND
OjpERkc6OkpJVENvbXBpbGVyOjpncmFwaCk6CisgICAgICAgICogZGZnL0RGR0pJVENvbXBpbGVy
MzJfNjQuY3BwOgorICAgICAgICAqIGRmZy9ERkdPU1JFeGl0Lmg6IEFkZGVkLgorICAgICAgICAo
SlNDOjpERkc6OlNwZWN1bGF0aW9uUmVjb3Zlcnk6OlNwZWN1bGF0aW9uUmVjb3ZlcnkpOgorICAg
ICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aW9uUmVjb3Zlcnk6OnR5cGUpOgorICAgICAgICAoSlND
OjpERkc6OlNwZWN1bGF0aW9uUmVjb3Zlcnk6OmRlc3QpOgorICAgICAgICAoSlNDOjpERkc6OlNw
ZWN1bGF0aW9uUmVjb3Zlcnk6OnNyYyk6CisgICAgICAgIChKU0M6OkRGRzo6T1NSRXhpdDo6bnVt
YmVyT2ZSZWNvdmVyaWVzKToKKyAgICAgICAgKEpTQzo6REZHOjpPU1JFeGl0Ojp2YWx1ZVJlY292
ZXJ5KToKKyAgICAgICAgKEpTQzo6REZHOjpPU1JFeGl0Ojppc0FyZ3VtZW50KToKKyAgICAgICAg
KEpTQzo6REZHOjpPU1JFeGl0Ojppc1ZhcmlhYmxlKToKKyAgICAgICAgKEpTQzo6REZHOjpPU1JF
eGl0Ojphcmd1bWVudEZvckluZGV4KToKKyAgICAgICAgKEpTQzo6REZHOjpPU1JFeGl0Ojp2YXJp
YWJsZUZvckluZGV4KToKKyAgICAgICAgKEpTQzo6REZHOjpPU1JFeGl0OjpvcGVyYW5kRm9yQXJn
dW1lbnQpOgorICAgICAgICAoSlNDOjpERkc6Ok9TUkV4aXQ6Om9wZXJhbmRGb3JJbmRleCk6Cisg
ICAgICAgICogZGZnL0RGR1NwZWN1bGF0aXZlSklULmg6CisKIDIwMTEtMTEtMDcgIE1hcmsgSGFo
bmVuYmVyZyAgPG1oYWhuZW5iZXJnQGFwcGxlLmNvbT4KIAogICAgICAgICBEZS12aXJ0dWFsaXpl
IEpTT2JqZWN0OjpwdXRXaXRoQXR0cmlidXRlcwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBi
eHByb2oJKHJldmlzaW9uIDk5NDg2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3Jp
cHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHdvcmtpbmcgY29weSkKQEAgLTY4LDYg
KzY4LDkgQEAKIAkJMEY5NjNCMkYxM0ZDNjZCQjAwMDJEOUIyIC8qIE1ldGFBbGxvY2F0b3JIYW5k
bGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGOTYz
QjJFMTNGQzY2QUUwMDAyRDlCMiAvKiBNZXRhQWxsb2NhdG9ySGFuZGxlLmggKi87IHNldHRpbmdz
ID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEY5NjNCMzgxM0ZDNkZFOTAw
MDJEOUIyIC8qIFZhbHVlUHJvZmlsZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gMEY5NjNCMzYxM0ZDNkZERTAwMDJEOUIyIC8qIFZhbHVlUHJvZmlsZS5o
ICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBGQkQ3
RTY5MTQ0Nzk5OTYwMDQ4MTMxNSAvKiBDb2RlT3JpZ2luLmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkJEN0U2NzE0NDc5OThGMDA0ODEzMTUgLyogQ29k
ZU9yaWdpbi5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07
CisJCTBGQzA5NzZBMTQ2OEE2RjcwMENGMjQ0MiAvKiBERkdPU1JFeGl0LmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkMwOTc2ODE0NjhBNkVGMDBDRjI0
NDIgLyogREZHT1NSRXhpdC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUs
ICk7IH07IH07CisJCTBGQzA5NzZEMTQ2OEFCNEUwMENGMjQ0MiAvKiBERkdBc3NlbWJseUhlbHBl
cnMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGQzA5
NzZDMTQ2OEFCNEEwMENGMjQ0MiAvKiBERkdBc3NlbWJseUhlbHBlcnMuaCAqLzsgc2V0dGluZ3Mg
PSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQkwRkMwOTc2RTE0NjhBQjUxMDBD
RjI0NDIgLyogREZHQXNzZW1ibHlIZWxwZXJzLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGQzA5NzZCMTQ2OEFCNEEwMENGMjQ0MiAvKiBERkdBc3Nl
bWJseUhlbHBlcnMuY3BwICovOyB9OwogCQkwRkM4MTUwQTE0MDQzQkY1MDBDRkE2MDMgLyogV3Jp
dGVCYXJyaWVyU3VwcG9ydC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gMEZDODE1MDkxNDA0M0JEMjAwQ0ZBNjAzIC8qIFdyaXRlQmFycmllclN1cHBvcnQu
aCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkwRkM4
MTUwQjE0MDQzQzBFMDBDRkE2MDMgLyogV3JpdGVCYXJyaWVyU3VwcG9ydC5jcHAgaW4gU291cmNl
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkM4MTUwODE0MDQzQkNBMDBD
RkE2MDMgLyogV3JpdGVCYXJyaWVyU3VwcG9ydC5jcHAgKi87IH07CiAJCTBGQzgxNTE1MTQwNTEx
OUIwMENGQTYwMyAvKiBWVGFibGVTcGVjdHJ1bS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gMEZDODE1MTQxNDA1MTE4RDAwQ0ZBNjAzIC8qIFZUYWJsZVNw
ZWN0cnVtLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsK
QEAgLTgzMyw2ICs4MzYsOSBAQAogCQkwRjk2M0IyRTEzRkM2NkFFMDAwMkQ5QjIgLyogTWV0YUFs
bG9jYXRvckhhbmRsZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBNZXRhQWxs
b2NhdG9ySGFuZGxlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGOTYzQjM2MTNG
QzZGREUwMDAyRDlCMiAvKiBWYWx1ZVByb2ZpbGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gVmFsdWVQcm9maWxlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBG
QkQ3RTY3MTQ0Nzk5OEYwMDQ4MTMxNSAvKiBDb2RlT3JpZ2luLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgcGF0aCA9IENvZGVPcmlnaW4uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
KwkJMEZDMDk3NjgxNDY4QTZFRjAwQ0YyNDQyIC8qIERGR09TUkV4aXQuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBuYW1lID0gREZHT1NSRXhpdC5oOyBwYXRoID0gZGZnL0RGR09TUkV4aXQu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZDMDk3NkIxNDY4QUI0QTAwQ0YyNDQy
IC8qIERGR0Fzc2VtYmx5SGVscGVycy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7
IG5hbWUgPSBERkdBc3NlbWJseUhlbHBlcnMuY3BwOyBwYXRoID0gZGZnL0RGR0Fzc2VtYmx5SGVs
cGVycy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGQzA5NzZDMTQ2OEFCNEEw
MENGMjQ0MiAvKiBERkdBc3NlbWJseUhlbHBlcnMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBuYW1lID0gREZHQXNzZW1ibHlIZWxwZXJzLmg7IHBhdGggPSBkZmcvREZHQXNzZW1ibHlIZWxw
ZXJzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGQzgxNTA4MTQwNDNCQ0EwMENG
QTYwMyAvKiBXcml0ZUJhcnJpZXJTdXBwb3J0LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3Bw
LmNwcDsgcGF0aCA9IFdyaXRlQmFycmllclN1cHBvcnQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQkwRkM4MTUwOTE0MDQzQkQyMDBDRkE2MDMgLyogV3JpdGVCYXJyaWVyU3VwcG9y
dC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXcml0ZUJhcnJpZXJTdXBwb3J0
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGQzgxNTEyMTQwNTExODYwMENGQTYw
MyAvKiBWVGFibGVTcGVjdHJ1bS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBh
dGggPSBWVGFibGVTcGVjdHJ1bS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0y
MjkyLDYgKzIyOTgsOSBAQAogCQk4NkVDOURCMzEzMjhERjQ0MDAyQjJBRDcgLyogZGZnICovID0g
ewogCQkJaXNhID0gUEJYR3JvdXA7CiAJCQljaGlsZHJlbiA9ICgKKwkJCQkwRkMwOTc2QjE0NjhB
QjRBMDBDRjI0NDIgLyogREZHQXNzZW1ibHlIZWxwZXJzLmNwcCAqLywKKwkJCQkwRkMwOTc2QzE0
NjhBQjRBMDBDRjI0NDIgLyogREZHQXNzZW1ibHlIZWxwZXJzLmggKi8sCisJCQkJMEZDMDk3Njgx
NDY4QTZFRjAwQ0YyNDQyIC8qIERGR09TUkV4aXQuaCAqLywKIAkJCQkwRjYyMDE2RDE0M0ZDRDJG
MDA2OEI3N0MgLyogREZHQWJzdHJhY3RTdGF0ZS5jcHAgKi8sCiAJCQkJMEY2MjAxNkUxNDNGQ0Qy
RjAwNjhCNzdDIC8qIERGR0Fic3RyYWN0U3RhdGUuaCAqLywKIAkJCQkwRjYyMDE2RjE0M0ZDRDJG
MDA2OEI3N0MgLyogREZHQWJzdHJhY3RWYWx1ZS5oICovLApAQCAtMjkwMSw2ICsyOTEwLDggQEAK
IAkJCQkwRjQyNkE0OTE0NjBDQkI3MDAxMzFGOEYgLyogVmlydHVhbFJlZ2lzdGVyLmggaW4gSGVh
ZGVycyAqLywKIAkJCQkwRjQyNkE0QjE0NjBDRDZFMDAxMzFGOEYgLyogRGF0YUZvcm1hdC5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJMEYyRTVCRjcxNDYzNTdENTAwM0VCMkVCIC8qIFNwZWN0cnVtLmgg
aW4gSGVhZGVycyAqLywKKwkJCQkwRkMwOTc2QTE0NjhBNkY3MDBDRjI0NDIgLyogREZHT1NSRXhp
dC5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEZDMDk3NkQxNDY4QUI0RTAwQ0YyNDQyIC8qIERGR0Fz
c2VtYmx5SGVscGVycy5oIGluIEhlYWRlcnMgKi8sCiAJCQkpOwogCQkJcnVuT25seUZvckRlcGxv
eW1lbnRQb3N0cHJvY2Vzc2luZyA9IDA7CiAJCX07CkBAIC0zNDMyLDYgKzM0NDMsNyBAQAogCQkJ
CTBGRTIyOEVFMTQzNkFCMkMwMDE5NkM0OCAvKiBIZXVyaXN0aWNzLmNwcCBpbiBTb3VyY2VzICov
LAogCQkJCTBGNjIwMTc5MTQzRkNENDgwMDY4Qjc3QyAvKiBERkdBYnN0cmFjdFN0YXRlLmNwcCBp
biBTb3VyY2VzICovLAogCQkJCUJDM0M0Q0EwMTQ1OEY1NDUwMDI1RkI2MiAvKiBKU0dsb2JhbFRo
aXMuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJMEZDMDk3NkUxNDY4QUI1MTAwQ0YyNDQyIC8qIERG
R0Fzc2VtYmx5SGVscGVycy5jcHAgaW4gU291cmNlcyAqLywKIAkJCSk7CiAJCQlydW5Pbmx5Rm9y
RGVwbG95bWVudFBvc3Rwcm9jZXNzaW5nID0gMDsKIAkJfTsKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHQXNzZW1ibHlIZWxwZXJzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fzc2VtYmx5SGVscGVycy5jcHAJKHJldmlzaW9uIDApCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fzc2VtYmx5SGVscGVycy5jcHAJKHJldmlz
aW9uIDApCkBAIC0wLDAgKzEsMTYyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDExIEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhF
CisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBS
T0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJERkdBc3NlbWJs
eUhlbHBlcnMuaCIKKworI2lmIEVOQUJMRShERkdfSklUKQorCituYW1lc3BhY2UgSlNDIHsgbmFt
ZXNwYWNlIERGRyB7CisKK1ZlY3RvcjxCeXRlY29kZUFuZE1hY2hpbmVPZmZzZXQ+JiBBc3NlbWJs
eUhlbHBlcnM6OmRlY29kZWRDb2RlTWFwRm9yKENvZGVCbG9jayogY29kZUJsb2NrKQoreworICAg
IEFTU0VSVChjb2RlQmxvY2sgPT0gY29kZUJsb2NrLT5iYXNlbGluZVZlcnNpb24oKSk7CisgICAg
QVNTRVJUKGNvZGVCbG9jay0+Z2V0SklUVHlwZSgpID09IEpJVENvZGU6OkJhc2VsaW5lSklUKTsK
KyAgICBBU1NFUlQoY29kZUJsb2NrLT5qaXRDb2RlTWFwKCkpOworICAgIAorICAgIHN0ZDo6cGFp
cjxIYXNoTWFwPENvZGVCbG9jayosIFZlY3RvcjxCeXRlY29kZUFuZE1hY2hpbmVPZmZzZXQ+ID46
Oml0ZXJhdG9yLCBib29sPiByZXN1bHQgPSBtX2RlY29kZWRDb2RlTWFwcy5hZGQoY29kZUJsb2Nr
LCBWZWN0b3I8Qnl0ZWNvZGVBbmRNYWNoaW5lT2Zmc2V0PigpKTsKKyAgICAKKyAgICBpZiAocmVz
dWx0LnNlY29uZCkKKyAgICAgICAgY29kZUJsb2NrLT5qaXRDb2RlTWFwKCktPmRlY29kZShyZXN1
bHQuZmlyc3QtPnNlY29uZCk7CisgICAgCisgICAgcmV0dXJuIHJlc3VsdC5maXJzdC0+c2Vjb25k
OworfQorCisjaWYgRU5BQkxFKFNBTVBMSU5HX0NPVU5URVJTKSAmJiBDUFUoWDg2XzY0KSAvLyBP
ciBhbnkgb3RoZXIgNjQtYml0IHBsYXRmb3JtIQordm9pZCBBc3NlbWJseUhlbHBlcnM6OmVtaXRD
b3VudChNYWNyb0Fzc2VtYmxlciYgaml0LCBBYnN0cmFjdFNhbXBsaW5nQ291bnRlciYgY291bnRl
ciwgdWludDMyX3QgaW5jcmVtZW50KQoreworICAgIGppdC5hZGRQdHIoVHJ1c3RlZEltbTMyKGlu
Y3JlbWVudCksIEFic29sdXRlQWRkcmVzcyhjb3VudGVyLmFkZHJlc3NPZkNvdW50ZXIoKSkpOwor
fQorI2VuZGlmCisKKyNpZiBFTkFCTEUoU0FNUExJTkdfQ09VTlRFUlMpICYmIENQVShYODYpIC8v
IE9yIGFueSBvdGhlciBsaXR0bGUtZW5kaWFuIDMyLWJpdCBwbGF0Zm9ybSEKK3ZvaWQgQXNzZW1i
bHlIZWxwZXJzOjplbWl0Q291bnQoTWFjcm9Bc2VtYmxlciYgaml0LCBBYnN0cmFjdFNhbXBsaW5n
Q291bnRlciYgY291bnRlciwgdWludDMyX3QgaW5jcmVtZW50KQoreworICAgIGludHB0cl90IGhp
V29yZCA9IHJlaW50ZXJwcmV0X2Nhc3Q8aW50cHRyX3Q+KGNvdW50ZXIuYWRkcmVzc09mQ291bnRl
cigpKSArIHNpemVvZihpbnQzMl90KTsKKyAgICBqaXQuYWRkMzIoVHJ1c3RlZEltbTMyKGluY3Jl
bWVudCksIEFic29sdXRlQWRkcmVzcyhjb3VudGVyLmFkZHJlc3NPZkNvdW50ZXIoKSkpOworICAg
IGppdC5hZGRXaXRoQ2FycnkzMihUcnVzdGVkSW1tMzIoMCksIEFic29sdXRlQWRkcmVzcyhyZWlu
dGVycHJldF9jYXN0PHZvaWQqPihoaVdvcmQpKSk7Cit9CisjZW5kaWYKKworI2lmIEVOQUJMRShT
QU1QTElOR19GTEFHUykKK3ZvaWQgQXNzZW1ibHlIZWxwZXJzOjpzZXRTYW1wbGluZ0ZsYWcoaW50
MzJfdCBmbGFnKQoreworICAgIEFTU0VSVChmbGFnID49IDEpOworICAgIEFTU0VSVChmbGFnIDw9
IDMyKTsKKyAgICBvcjMyKFRydXN0ZWRJbW0zMigxdSA8PCAoZmxhZyAtIDEpKSwgQWJzb2x1dGVB
ZGRyZXNzKFNhbXBsaW5nRmxhZ3M6OmFkZHJlc3NPZkZsYWdzKCkpKTsKK30KKwordm9pZCBBc3Nl
bWJseUhlbHBlcnM6OmNsZWFyU2FtcGxpbmdGbGFnKGludDMyX3QgZmxhZykKK3sKKyAgICBBU1NF
UlQoZmxhZyA+PSAxKTsKKyAgICBBU1NFUlQoZmxhZyA8PSAzMik7CisgICAgYW5kMzIoVHJ1c3Rl
ZEltbTMyKH4oMXUgPDwgKGZsYWcgLSAxKSkpLCBBYnNvbHV0ZUFkZHJlc3MoU2FtcGxpbmdGbGFn
czo6YWRkcmVzc09mRmxhZ3MoKSkpOworfQorI2VuZGlmCisKKyNpZiBERkdfRU5BQkxFKEpJVF9B
U1NFUlQpCisjaWYgVVNFKEpTVkFMVUU2NCkKK3ZvaWQgQXNzZW1ibHlIZWxwZXJzOjpqaXRBc3Nl
cnRJc0ludDMyKEdQUlJlZyBncHIpCit7CisjaWYgQ1BVKFg4Nl82NCkKKyAgICBKdW1wIGNoZWNr
SW50MzIgPSBicmFuY2hQdHIoQmVsb3dPckVxdWFsLCBncHIsIFRydXN0ZWRJbW1QdHIocmVpbnRl
cnByZXRfY2FzdDx2b2lkKj4oc3RhdGljX2Nhc3Q8dWludHB0cl90PigweEZGRkZGRkZGdSkpKSk7
CisgICAgYnJlYWtwb2ludCgpOworICAgIGNoZWNrSW50MzIubGluayh0aGlzKTsKKyNlbHNlCisg
ICAgVU5VU0VEX1BBUkFNKGdwcik7CisjZW5kaWYKK30KKwordm9pZCBBc3NlbWJseUhlbHBlcnM6
OmppdEFzc2VydElzSlNJbnQzMihHUFJSZWcgZ3ByKQoreworICAgIEp1bXAgY2hlY2tKU0ludDMy
ID0gYnJhbmNoUHRyKEFib3ZlT3JFcXVhbCwgZ3ByLCBHUFJJbmZvOjp0YWdUeXBlTnVtYmVyUmVn
aXN0ZXIpOworICAgIGJyZWFrcG9pbnQoKTsKKyAgICBjaGVja0pTSW50MzIubGluayh0aGlzKTsK
K30KKwordm9pZCBBc3NlbWJseUhlbHBlcnM6OmppdEFzc2VydElzSlNOdW1iZXIoR1BSUmVnIGdw
cikKK3sKKyAgICBKdW1wIGNoZWNrSlNOdW1iZXIgPSBicmFuY2hUZXN0UHRyKE1hY3JvQXNzZW1i
bGVyOjpOb25aZXJvLCBncHIsIEdQUkluZm86OnRhZ1R5cGVOdW1iZXJSZWdpc3Rlcik7CisgICAg
YnJlYWtwb2ludCgpOworICAgIGNoZWNrSlNOdW1iZXIubGluayh0aGlzKTsKK30KKwordm9pZCBB
c3NlbWJseUhlbHBlcnM6OmppdEFzc2VydElzSlNEb3VibGUoR1BSUmVnIGdwcikKK3sKKyAgICBK
dW1wIGNoZWNrSlNJbnQzMiA9IGJyYW5jaFB0cihBYm92ZU9yRXF1YWwsIGdwciwgR1BSSW5mbzo6
dGFnVHlwZU51bWJlclJlZ2lzdGVyKTsKKyAgICBKdW1wIGNoZWNrSlNOdW1iZXIgPSBicmFuY2hU
ZXN0UHRyKE1hY3JvQXNzZW1ibGVyOjpOb25aZXJvLCBncHIsIEdQUkluZm86OnRhZ1R5cGVOdW1i
ZXJSZWdpc3Rlcik7CisgICAgY2hlY2tKU0ludDMyLmxpbmsodGhpcyk7CisgICAgYnJlYWtwb2lu
dCgpOworICAgIGNoZWNrSlNOdW1iZXIubGluayh0aGlzKTsKK30KKwordm9pZCBBc3NlbWJseUhl
bHBlcnM6OmppdEFzc2VydElzQ2VsbChHUFJSZWcgZ3ByKQoreworICAgIEp1bXAgY2hlY2tDZWxs
ID0gYnJhbmNoVGVzdFB0cihNYWNyb0Fzc2VtYmxlcjo6WmVybywgZ3ByLCBHUFJJbmZvOjp0YWdN
YXNrUmVnaXN0ZXIpOworICAgIGJyZWFrcG9pbnQoKTsKKyAgICBjaGVja0NlbGwubGluayh0aGlz
KTsKK30KKyNlbGlmIFVTRShKU1ZBTFVFMzJfNjQpCit2b2lkIEFzc2VtYmx5SGVscGVyczo6aml0
QXNzZXJ0SXNJbnQzMihHUFJSZWcgZ3ByKQoreworICAgIFVOVVNFRF9QQVJBTShncHIpOworfQor
Cit2b2lkIEFzc2VtYmx5SGVscGVyczo6aml0QXNzZXJ0SXNKU0ludDMyKEdQUlJlZyBncHIpCit7
CisgICAgSnVtcCBjaGVja0pTSW50MzIgPSBicmFuY2gzMihFcXVhbCwgZ3ByLCBUcnVzdGVkSW1t
MzIoSlNWYWx1ZTo6SW50MzJUYWcpKTsKKyAgICBicmVha3BvaW50KCk7CisgICAgY2hlY2tKU0lu
dDMyLmxpbmsodGhpcyk7Cit9CisKK3ZvaWQgQXNzZW1ibHlIZWxwZXJzOjpqaXRBc3NlcnRJc0pT
TnVtYmVyKEdQUlJlZyBncHIpCit7CisgICAgSnVtcCBjaGVja0pTSW50MzIgPSBicmFuY2gzMihF
cXVhbCwgZ3ByLCBUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6SW50MzJUYWcpKTsKKyAgICBKdW1wIGNo
ZWNrSlNEb3VibGUgPSBicmFuY2gzMihCZWxvdywgZ3ByLCBUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6
TG93ZXN0VGFnKSk7CisgICAgYnJlYWtwb2ludCgpOworICAgIGNoZWNrSlNJbnQzMi5saW5rKHRo
aXMpOworICAgIGNoZWNrSlNEb3VibGUubGluayh0aGlzKTsKK30KKwordm9pZCBBc3NlbWJseUhl
bHBlcnM6OmppdEFzc2VydElzSlNEb3VibGUoR1BSUmVnIGdwcikKK3sKKyAgICBKdW1wIGNoZWNr
SlNEb3VibGUgPSBicmFuY2gzMihCZWxvdywgZ3ByLCBUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6TG93
ZXN0VGFnKSk7CisgICAgYnJlYWtwb2ludCgpOworICAgIGNoZWNrSlNEb3VibGUubGluayh0aGlz
KTsKK30KKwordm9pZCBBc3NlbWJseUhlbHBlcnM6OmppdEFzc2VydElzQ2VsbChHUFJSZWcgZ3By
KQoreworICAgIEp1bXAgY2hlY2tDZWxsID0gYnJhbmNoMzIoRXF1YWwsIGdwciwgVHJ1c3RlZElt
bTMyKEpTVmFsdWU6OkNlbGxUYWcpKTsKKyAgICBicmVha3BvaW50KCk7CisgICAgY2hlY2tDZWxs
LmxpbmsodGhpcyk7Cit9CisjZW5kaWYgLy8gVVNFKEpTVkFMVUUzMl82NCkKKyNlbmRpZiAvLyBE
RkdfRU5BQkxFKEpJVF9BU1NFUlQpCisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpERkcKKworI2Vu
ZGlmIC8vIEVOQUJMRShERkdfSklUKQorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR0Fzc2VtYmx5SGVscGVycy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHQXNzZW1ibHlIZWxwZXJzLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR0Fzc2VtYmx5SGVscGVycy5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsx
LDI2MSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMSBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6Cisg
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
KyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisg
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisj
aWZuZGVmIERGR0Fzc2VtYmx5SGVscGVyc19oCisjZGVmaW5lIERGR0Fzc2VtYmx5SGVscGVyc19o
CisKKyNpbmNsdWRlIDx3dGYvUGxhdGZvcm0uaD4KKworI2lmIEVOQUJMRShERkdfSklUKQorCisj
aW5jbHVkZSAiQ29kZUJsb2NrLmgiCisjaW5jbHVkZSAiREZHRlBSSW5mby5oIgorI2luY2x1ZGUg
IkRGR0dQUkluZm8uaCIKKyNpbmNsdWRlICJERkdOb2RlLmgiCisjaW5jbHVkZSAiSlNHbG9iYWxE
YXRhLmgiCisjaW5jbHVkZSAiTWFjcm9Bc3NlbWJsZXIuaCIKKworbmFtZXNwYWNlIEpTQyB7IG5h
bWVzcGFjZSBERkcgeworCisjaWZuZGVmIE5ERUJVRwordHlwZWRlZiB2b2lkICgqVl9ERkdEZWJ1
Z09wZXJhdGlvbl9FUCkoRXhlY1N0YXRlKiwgdm9pZCopOworI2VuZGlmCisKK2NsYXNzIEFzc2Vt
Ymx5SGVscGVyczogcHVibGljIE1hY3JvQXNzZW1ibGVyIHsKK3B1YmxpYzoKKyAgICBBc3NlbWJs
eUhlbHBlcnMoSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhLCBDb2RlQmxvY2sqIGNvZGVCbG9jaykK
KyAgICAgICAgOiBtX2dsb2JhbERhdGEoZ2xvYmFsRGF0YSkKKyAgICAgICAgLCBtX2NvZGVCbG9j
ayhjb2RlQmxvY2spCisgICAgeworICAgIH0KKyAgICAKKyAgICBDb2RlQmxvY2sqIGNvZGVCbG9j
aygpIHsgcmV0dXJuIG1fY29kZUJsb2NrOyB9CisgICAgSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRh
KCkgeyByZXR1cm4gbV9nbG9iYWxEYXRhOyB9CisgICAgQXNzZW1ibGVyVHlwZV9UJiBhc3NlbWJs
ZXIoKSB7IHJldHVybiBtX2Fzc2VtYmxlcjsgfQorICAgIAorI2lmIENQVShYODZfNjQpIHx8IENQ
VShYODYpCisgICAgdm9pZCBwcmVzZXJ2ZVJldHVybkFkZHJlc3NBZnRlckNhbGwoR1BSUmVnIHJl
ZykKKyAgICB7CisgICAgICAgIHBvcChyZWcpOworICAgIH0KKworICAgIHZvaWQgcmVzdG9yZVJl
dHVybkFkZHJlc3NCZWZvcmVSZXR1cm4oR1BSUmVnIHJlZykKKyAgICB7CisgICAgICAgIHB1c2go
cmVnKTsKKyAgICB9CisKKyAgICB2b2lkIHJlc3RvcmVSZXR1cm5BZGRyZXNzQmVmb3JlUmV0dXJu
KEFkZHJlc3MgYWRkcmVzcykKKyAgICB7CisgICAgICAgIHB1c2goYWRkcmVzcyk7CisgICAgfQor
CisgICAgdm9pZCBlbWl0R2V0RnJvbUNhbGxGcmFtZUhlYWRlclB0cihSZWdpc3RlckZpbGU6OkNh
bGxGcmFtZUhlYWRlckVudHJ5IGVudHJ5LCBHUFJSZWcgdG8pCisgICAgeworICAgICAgICBsb2Fk
UHRyKEFkZHJlc3MoR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIsIGVudHJ5ICogc2l6ZW9mKFJl
Z2lzdGVyKSksIHRvKTsKKyAgICB9CisgICAgdm9pZCBlbWl0UHV0VG9DYWxsRnJhbWVIZWFkZXIo
R1BSUmVnIGZyb20sIFJlZ2lzdGVyRmlsZTo6Q2FsbEZyYW1lSGVhZGVyRW50cnkgZW50cnkpCisg
ICAgeworICAgICAgICBzdG9yZVB0cihmcm9tLCBBZGRyZXNzKEdQUkluZm86OmNhbGxGcmFtZVJl
Z2lzdGVyLCBlbnRyeSAqIHNpemVvZihSZWdpc3RlcikpKTsKKyAgICB9CisKKyAgICB2b2lkIGVt
aXRQdXRJbW1lZGlhdGVUb0NhbGxGcmFtZUhlYWRlcih2b2lkKiB2YWx1ZSwgUmVnaXN0ZXJGaWxl
OjpDYWxsRnJhbWVIZWFkZXJFbnRyeSBlbnRyeSkKKyAgICB7CisgICAgICAgIHN0b3JlUHRyKFRy
dXN0ZWRJbW1QdHIodmFsdWUpLCBBZGRyZXNzKEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyLCBl
bnRyeSAqIHNpemVvZihSZWdpc3RlcikpKTsKKyAgICB9CisjZW5kaWYgLy8gQ1BVKFg4Nl82NCkg
fHwgQ1BVKFg4NikKKworICAgIEp1bXAgYnJhbmNoSWZOb3RDZWxsKEdQUlJlZyByZWcpCisgICAg
eworI2lmIFVTRShKU1ZBTFVFNjQpCisgICAgICAgIHJldHVybiBicmFuY2hUZXN0UHRyKE1hY3Jv
QXNzZW1ibGVyOjpOb25aZXJvLCByZWcsIEdQUkluZm86OnRhZ01hc2tSZWdpc3Rlcik7CisjZWxz
ZQorICAgICAgICByZXR1cm4gYnJhbmNoMzIoTWFjcm9Bc3NlbWJsZXI6Ok5vdEVxdWFsLCByZWcs
IFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpDZWxsVGFnKSk7CisjZW5kaWYKKyAgICB9CisgICAgCisg
ICAgc3RhdGljIEFkZHJlc3MgYWRkcmVzc0Zvckdsb2JhbFZhcihHUFJSZWcgZ2xvYmFsLCBpbnQz
Ml90IHZhck51bWJlcikKKyAgICB7CisgICAgICAgIHJldHVybiBBZGRyZXNzKGdsb2JhbCwgdmFy
TnVtYmVyICogc2l6ZW9mKFJlZ2lzdGVyKSk7CisgICAgfQorCisgICAgc3RhdGljIEFkZHJlc3Mg
dGFnRm9yR2xvYmFsVmFyKEdQUlJlZyBnbG9iYWwsIGludDMyX3QgdmFyTnVtYmVyKQorICAgIHsK
KyAgICAgICAgcmV0dXJuIEFkZHJlc3MoZ2xvYmFsLCB2YXJOdW1iZXIgKiBzaXplb2YoUmVnaXN0
ZXIpICsgT0JKRUNUX09GRlNFVE9GKEVuY29kZWRWYWx1ZURlc2NyaXB0b3IsIGFzQml0cy50YWcp
KTsKKyAgICB9CisKKyAgICBzdGF0aWMgQWRkcmVzcyBwYXlsb2FkRm9yR2xvYmFsVmFyKEdQUlJl
ZyBnbG9iYWwsIGludDMyX3QgdmFyTnVtYmVyKQorICAgIHsKKyAgICAgICAgcmV0dXJuIEFkZHJl
c3MoZ2xvYmFsLCB2YXJOdW1iZXIgKiBzaXplb2YoUmVnaXN0ZXIpICsgT0JKRUNUX09GRlNFVE9G
KEVuY29kZWRWYWx1ZURlc2NyaXB0b3IsIGFzQml0cy5wYXlsb2FkKSk7CisgICAgfQorCisgICAg
c3RhdGljIEFkZHJlc3MgYWRkcmVzc0ZvcihWaXJ0dWFsUmVnaXN0ZXIgdmlydHVhbFJlZ2lzdGVy
KQorICAgIHsKKyAgICAgICAgcmV0dXJuIEFkZHJlc3MoR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0
ZXIsIHZpcnR1YWxSZWdpc3RlciAqIHNpemVvZihSZWdpc3RlcikpOworICAgIH0KKworICAgIHN0
YXRpYyBBZGRyZXNzIHRhZ0ZvcihWaXJ0dWFsUmVnaXN0ZXIgdmlydHVhbFJlZ2lzdGVyKQorICAg
IHsKKyAgICAgICAgcmV0dXJuIEFkZHJlc3MoR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIsIHZp
cnR1YWxSZWdpc3RlciAqIHNpemVvZihSZWdpc3RlcikgKyBPQkpFQ1RfT0ZGU0VUT0YoRW5jb2Rl
ZFZhbHVlRGVzY3JpcHRvciwgYXNCaXRzLnRhZykpOworICAgIH0KKworICAgIHN0YXRpYyBBZGRy
ZXNzIHBheWxvYWRGb3IoVmlydHVhbFJlZ2lzdGVyIHZpcnR1YWxSZWdpc3RlcikKKyAgICB7Cisg
ICAgICAgIHJldHVybiBBZGRyZXNzKEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyLCB2aXJ0dWFs
UmVnaXN0ZXIgKiBzaXplb2YoUmVnaXN0ZXIpICsgT0JKRUNUX09GRlNFVE9GKEVuY29kZWRWYWx1
ZURlc2NyaXB0b3IsIGFzQml0cy5wYXlsb2FkKSk7CisgICAgfQorCisgICAgSnVtcCBicmFuY2hJ
Zk5vdE9iamVjdChHUFJSZWcgc3RydWN0dXJlUmVnKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGJy
YW5jaDgoQmVsb3csIEFkZHJlc3Moc3RydWN0dXJlUmVnLCBTdHJ1Y3R1cmU6OnR5cGVJbmZvVHlw
ZU9mZnNldCgpKSwgVHJ1c3RlZEltbTMyKE9iamVjdFR5cGUpKTsKKyAgICB9CisKKyNpZm5kZWYg
TkRFQlVHCisgICAgLy8gQWRkIGEgZGVidWcgY2FsbC4gVGhpcyBjYWxsIGhhcyBubyBlZmZlY3Qg
b24gSklUIGNvZGUgZXhlY3V0aW9uIHN0YXRlLgorICAgIHZvaWQgZGVidWdDYWxsKFZfREZHRGVi
dWdPcGVyYXRpb25fRVAgZnVuY3Rpb24sIHZvaWQqIGFyZ3VtZW50KQorICAgIHsKKyAgICAgICAg
Zm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IEdQUkluZm86Om51bWJlck9mUmVnaXN0ZXJzOyArK2kp
CisgICAgICAgICAgICBzdG9yZVB0cihHUFJJbmZvOjp0b1JlZ2lzdGVyKGkpLCBtX2dsb2JhbERh
dGEtPmRlYnVnRGF0YUJ1ZmZlciArIGkpOworICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBp
IDwgRlBSSW5mbzo6bnVtYmVyT2ZSZWdpc3RlcnM7ICsraSkgeworICAgICAgICAgICAgbW92ZShU
cnVzdGVkSW1tUHRyKG1fZ2xvYmFsRGF0YS0+ZGVidWdEYXRhQnVmZmVyICsgR1BSSW5mbzo6bnVt
YmVyT2ZSZWdpc3RlcnMgKyBpKSwgR1BSSW5mbzo6cmVnVDApOworICAgICAgICAgICAgc3RvcmVE
b3VibGUoRlBSSW5mbzo6dG9SZWdpc3RlcihpKSwgR1BSSW5mbzo6cmVnVDApOworICAgICAgICB9
CisjaWYgQ1BVKFg4Nl82NCkKKyAgICAgICAgbW92ZShUcnVzdGVkSW1tUHRyKGFyZ3VtZW50KSwg
R1BSSW5mbzo6YXJndW1lbnRHUFIxKTsKKyAgICAgICAgbW92ZShHUFJJbmZvOjpjYWxsRnJhbWVS
ZWdpc3RlciwgR1BSSW5mbzo6YXJndW1lbnRHUFIwKTsKKyNlbGlmIENQVShYODYpCisgICAgICAg
IHBva2UoR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIsIDApOworICAgICAgICBwb2tlKFRydXN0
ZWRJbW1QdHIoYXJndW1lbnQpLCAxKTsKKyNlbHNlCisjZXJyb3IgIkRGRyBKSVQgbm90IHN1cHBv
cnRlZCBvbiB0aGlzIHBsYXRmb3JtLiIKKyNlbmRpZgorICAgICAgICBtb3ZlKFRydXN0ZWRJbW1Q
dHIocmVpbnRlcnByZXRfY2FzdDx2b2lkKj4oZnVuY3Rpb24pKSwgR1BSSW5mbzo6cmVnVDApOwor
ICAgICAgICBjYWxsKEdQUkluZm86OnJlZ1QwKTsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0g
MDsgaSA8IEZQUkluZm86Om51bWJlck9mUmVnaXN0ZXJzOyArK2kpIHsKKyAgICAgICAgICAgIG1v
dmUoVHJ1c3RlZEltbVB0cihtX2dsb2JhbERhdGEtPmRlYnVnRGF0YUJ1ZmZlciArIEdQUkluZm86
Om51bWJlck9mUmVnaXN0ZXJzICsgaSksIEdQUkluZm86OnJlZ1QwKTsKKyAgICAgICAgICAgIGxv
YWREb3VibGUoR1BSSW5mbzo6cmVnVDAsIEZQUkluZm86OnRvUmVnaXN0ZXIoaSkpOworICAgICAg
ICB9CisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBHUFJJbmZvOjpudW1iZXJPZlJl
Z2lzdGVyczsgKytpKQorICAgICAgICAgICAgbG9hZFB0cihtX2dsb2JhbERhdGEtPmRlYnVnRGF0
YUJ1ZmZlciArIGksIEdQUkluZm86OnRvUmVnaXN0ZXIoaSkpOworICAgIH0KKyNlbmRpZgorCisg
ICAgLy8gVGhlc2UgbWV0aG9kcyBKSVQgZ2VuZXJhdGUgZHluYW1pYywgZGVidWctb25seSBjaGVj
a3MgLSBha2luIHRvIEFTU0VSVHMuCisjaWYgREZHX0VOQUJMRShKSVRfQVNTRVJUKQorICAgIHZv
aWQgaml0QXNzZXJ0SXNJbnQzMihHUFJSZWcpOworICAgIHZvaWQgaml0QXNzZXJ0SXNKU0ludDMy
KEdQUlJlZyk7CisgICAgdm9pZCBqaXRBc3NlcnRJc0pTTnVtYmVyKEdQUlJlZyk7CisgICAgdm9p
ZCBqaXRBc3NlcnRJc0pTRG91YmxlKEdQUlJlZyk7CisgICAgdm9pZCBqaXRBc3NlcnRJc0NlbGwo
R1BSUmVnKTsKKyNlbHNlCisgICAgdm9pZCBqaXRBc3NlcnRJc0ludDMyKEdQUlJlZykgeyB9Cisg
ICAgdm9pZCBqaXRBc3NlcnRJc0pTSW50MzIoR1BSUmVnKSB7IH0KKyAgICB2b2lkIGppdEFzc2Vy
dElzSlNOdW1iZXIoR1BSUmVnKSB7IH0KKyAgICB2b2lkIGppdEFzc2VydElzSlNEb3VibGUoR1BS
UmVnKSB7IH0KKyAgICB2b2lkIGppdEFzc2VydElzQ2VsbChHUFJSZWcpIHsgfQorI2VuZGlmCisK
KyAgICAvLyBUaGVzZSBtZXRob2RzIGNvbnZlcnQgYmV0d2VlbiBkb3VibGVzLCBhbmQgZG91Ymxl
cyBib3hlZCBhbmQgSlNWYWx1ZXMuCisjaWYgVVNFKEpTVkFMVUU2NCkKKyAgICBHUFJSZWcgYm94
RG91YmxlKEZQUlJlZyBmcHIsIEdQUlJlZyBncHIpCisgICAgeworICAgICAgICBtb3ZlRG91Ymxl
VG9QdHIoZnByLCBncHIpOworICAgICAgICBzdWJQdHIoR1BSSW5mbzo6dGFnVHlwZU51bWJlclJl
Z2lzdGVyLCBncHIpOworICAgICAgICByZXR1cm4gZ3ByOworICAgIH0KKyAgICBGUFJSZWcgdW5i
b3hEb3VibGUoR1BSUmVnIGdwciwgRlBSUmVnIGZwcikKKyAgICB7CisgICAgICAgIGppdEFzc2Vy
dElzSlNEb3VibGUoZ3ByKTsKKyAgICAgICAgYWRkUHRyKEdQUkluZm86OnRhZ1R5cGVOdW1iZXJS
ZWdpc3RlciwgZ3ByKTsKKyAgICAgICAgbW92ZVB0clRvRG91YmxlKGdwciwgZnByKTsKKyAgICAg
ICAgcmV0dXJuIGZwcjsKKyAgICB9CisjZWxpZiBVU0UoSlNWQUxVRTMyXzY0KQorICAgIHZvaWQg
Ym94RG91YmxlKEZQUlJlZyBmcHIsIEdQUlJlZyB0YWdHUFIsIEdQUlJlZyBwYXlsb2FkR1BSKQor
ICAgIHsKKyNpZiBDUFUoWDg2KQorICAgICAgICBtb3ZlUGFja2VkVG9JbnQzMihmcHIsIHBheWxv
YWRHUFIpOworICAgICAgICByc2hpZnRQYWNrZWQoVHJ1c3RlZEltbTMyKDMyKSwgZnByKTsKKyAg
ICAgICAgbW92ZVBhY2tlZFRvSW50MzIoZnByLCB0YWdHUFIpOworI2VuZGlmCisgICAgfQorICAg
IHZvaWQgdW5ib3hEb3VibGUoR1BSUmVnIHRhZ0dQUiwgR1BSUmVnIHBheWxvYWRHUFIsIEZQUlJl
ZyBmcHIsIEZQUlJlZyBzY3JhdGNoRlBSKQorICAgIHsKKyAgICAgICAgaml0QXNzZXJ0SXNKU0Rv
dWJsZSh0YWdHUFIpOworI2lmIENQVShYODYpCisgICAgICAgIG1vdmVJbnQzMlRvUGFja2VkKHBh
eWxvYWRHUFIsIGZwcik7CisgICAgICAgIG1vdmVJbnQzMlRvUGFja2VkKHRhZ0dQUiwgc2NyYXRj
aEZQUik7CisgICAgICAgIGxzaGlmdFBhY2tlZChUcnVzdGVkSW1tMzIoMzIpLCBzY3JhdGNoRlBS
KTsKKyAgICAgICAgb3JQYWNrZWQoc2NyYXRjaEZQUiwgZnByKTsKKyNlbmRpZgorICAgIH0KKyNl
bmRpZgorCisjaWYgRU5BQkxFKFNBTVBMSU5HX0NPVU5URVJTKQorICAgIC8vIERlYnVnIHByb2Zp
bGluZyB0b29sLgorICAgIHN0YXRpYyB2b2lkIGVtaXRDb3VudChNYWNyb0Fzc2VtYmxlciYsIEFi
c3RyYWN0U2FtcGxpbmdDb3VudGVyJiwgdWludDMyX3QgaW5jcmVtZW50ID0gMSk7CisgICAgdm9p
ZCBlbWl0Q291bnQoQWJzdHJhY3RTYW1wbGluZ0NvdW50ZXImIGNvdW50ZXIsIHVpbnQzMl90IGlu
Y3JlbWVudCA9IDEpCisgICAgeworICAgICAgICBlbWl0Q291bnQoKnRoaXMsIGNvdW50ZXIsIGlu
Y3JlbWVudCk7CisgICAgfQorI2VuZGlmCisKKyNpZiBFTkFCTEUoU0FNUExJTkdfRkxBR1MpCisg
ICAgdm9pZCBzZXRTYW1wbGluZ0ZsYWcoaW50MzJfdCk7CisgICAgdm9pZCBjbGVhclNhbXBsaW5n
RmxhZyhpbnQzMl90IGZsYWcpOworI2VuZGlmCisKKyAgICBKU0dsb2JhbE9iamVjdCogZ2xvYmFs
T2JqZWN0Rm9yKENvZGVPcmlnaW4gY29kZU9yaWdpbikKKyAgICB7CisgICAgICAgIGlmICghY29k
ZU9yaWdpbi5pbmxpbmVDYWxsRnJhbWUpCisgICAgICAgICAgICByZXR1cm4gY29kZUJsb2NrKCkt
Pmdsb2JhbE9iamVjdCgpOworICAgICAgICAvLyBGSVhNRTogaWYgd2UgZXZlciBpbmxpbmUgYmFz
ZWQgb24gZXhlY3V0YWJsZSBub3QgZnVuY3Rpb24sIHRoaXMgY29kZSB3aWxsIG5lZWQgdG8gY2hh
bmdlLgorICAgICAgICByZXR1cm4gY29kZU9yaWdpbi5pbmxpbmVDYWxsRnJhbWUtPmNhbGxlZS0+
c2NvcGUoKS0+Z2xvYmFsT2JqZWN0LmdldCgpOworICAgIH0KKyAgICAKKyAgICBDb2RlQmxvY2sq
IGJhc2VsaW5lQ29kZUJsb2NrRm9yKGNvbnN0IENvZGVPcmlnaW4mIGNvZGVPcmlnaW4pCisgICAg
eworICAgICAgICBpZiAoY29kZU9yaWdpbi5pbmxpbmVDYWxsRnJhbWUpIHsKKyAgICAgICAgICAg
IEV4ZWN1dGFibGVCYXNlKiBleGVjdXRhYmxlID0gY29kZU9yaWdpbi5pbmxpbmVDYWxsRnJhbWUt
PmV4ZWN1dGFibGUuZ2V0KCk7CisgICAgICAgICAgICBBU1NFUlQoZXhlY3V0YWJsZS0+c3RydWN0
dXJlKCktPmNsYXNzSW5mbygpID09ICZGdW5jdGlvbkV4ZWN1dGFibGU6OnNfaW5mbyk7CisgICAg
ICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8RnVuY3Rpb25FeGVjdXRhYmxlKj4oZXhlY3V0YWJs
ZSktPmJhc2VsaW5lQ29kZUJsb2NrRm9yKGNvZGVPcmlnaW4uaW5saW5lQ2FsbEZyYW1lLT5pc0Nh
bGwgPyBDb2RlRm9yQ2FsbCA6IENvZGVGb3JDb25zdHJ1Y3QpOworICAgICAgICB9CisgICAgICAg
IEFTU0VSVChjb2RlQmxvY2soKS0+YWx0ZXJuYXRpdmUoKSA9PSBjb2RlQmxvY2soKS0+YmFzZWxp
bmVWZXJzaW9uKCkpOworICAgICAgICByZXR1cm4gY29kZUJsb2NrKCktPmFsdGVybmF0aXZlKCk7
CisgICAgfQorICAgIAorICAgIFZlY3RvcjxCeXRlY29kZUFuZE1hY2hpbmVPZmZzZXQ+JiBkZWNv
ZGVkQ29kZU1hcEZvcihDb2RlQmxvY2sqKTsKKworcHJvdGVjdGVkOgorICAgIEpTR2xvYmFsRGF0
YSogbV9nbG9iYWxEYXRhOworICAgIENvZGVCbG9jayogbV9jb2RlQmxvY2s7CisKKyAgICBIYXNo
TWFwPENvZGVCbG9jayosIFZlY3RvcjxCeXRlY29kZUFuZE1hY2hpbmVPZmZzZXQ+ID4gbV9kZWNv
ZGVkQ29kZU1hcHM7Cit9OworCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZHCisKKyNlbmRpZiAv
LyBFTkFCTEUoREZHX0pJVCkKKworI2VuZGlmIC8vIERGR0Fzc2VtYmx5SGVscGVyc19oCisKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSklUQ29tcGlsZXIzMl82NC5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdKSVRDb21waWxlcjMyXzY0
LmNwcAkocmV2aXNpb24gOTk0ODYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0pJ
VENvbXBpbGVyMzJfNjQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01NTgsNDMgKzU1OCw2IEBAIHZv
aWQgSklUQ29tcGlsZXI6OmV4aXRTcGVjdWxhdGl2ZVdpdGhPU1IKICNlbmRpZgogfQogCi0jaWYg
REZHX0VOQUJMRShKSVRfQVNTRVJUKQotdm9pZCBKSVRDb21waWxlcjo6aml0QXNzZXJ0SXNJbnQz
MihHUFJSZWcgZ3ByKQotewotICAgIFVOVVNFRF9QQVJBTShncHIpOwotfQotCi12b2lkIEpJVENv
bXBpbGVyOjpqaXRBc3NlcnRJc0pTSW50MzIoR1BSUmVnIGdwcikKLXsKLSAgICBKdW1wIGNoZWNr
SlNJbnQzMiA9IGJyYW5jaDMyKEVxdWFsLCBncHIsIFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpJbnQz
MlRhZykpOwotICAgIGJyZWFrcG9pbnQoKTsKLSAgICBjaGVja0pTSW50MzIubGluayh0aGlzKTsK
LX0KLQotdm9pZCBKSVRDb21waWxlcjo6aml0QXNzZXJ0SXNKU051bWJlcihHUFJSZWcgZ3ByKQot
ewotICAgIEp1bXAgY2hlY2tKU0ludDMyID0gYnJhbmNoMzIoRXF1YWwsIGdwciwgVHJ1c3RlZElt
bTMyKEpTVmFsdWU6OkludDMyVGFnKSk7Ci0gICAgSnVtcCBjaGVja0pTRG91YmxlID0gYnJhbmNo
MzIoQmVsb3csIGdwciwgVHJ1c3RlZEltbTMyKEpTVmFsdWU6Okxvd2VzdFRhZykpOwotICAgIGJy
ZWFrcG9pbnQoKTsKLSAgICBjaGVja0pTSW50MzIubGluayh0aGlzKTsKLSAgICBjaGVja0pTRG91
YmxlLmxpbmsodGhpcyk7Ci19Ci0KLXZvaWQgSklUQ29tcGlsZXI6OmppdEFzc2VydElzSlNEb3Vi
bGUoR1BSUmVnIGdwcikKLXsKLSAgICBKdW1wIGNoZWNrSlNEb3VibGUgPSBicmFuY2gzMihCZWxv
dywgZ3ByLCBUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6TG93ZXN0VGFnKSk7Ci0gICAgYnJlYWtwb2lu
dCgpOwotICAgIGNoZWNrSlNEb3VibGUubGluayh0aGlzKTsKLX0KLQotdm9pZCBKSVRDb21waWxl
cjo6aml0QXNzZXJ0SXNDZWxsKEdQUlJlZyBncHIpCi17Ci0gICAgSnVtcCBjaGVja0NlbGwgPSBi
cmFuY2gzMihFcXVhbCwgZ3ByLCBUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6Q2VsbFRhZykpOwotICAg
IGJyZWFrcG9pbnQoKTsKLSAgICBjaGVja0NlbGwubGluayh0aGlzKTsKLX0KLSNlbmRpZgotCiB9
IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZHCiAKICNlbmRpZgpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdKSVRDb21waWxlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdKSVRDb21waWxlci5jcHAJKHJldmlzaW9uIDk5NDg2KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdKSVRDb21waWxlci5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTM4LDIwICszOCw2IEBACiAKIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKIAot
VmVjdG9yPEJ5dGVjb2RlQW5kTWFjaGluZU9mZnNldD4mIEpJVENvbXBpbGVyOjpkZWNvZGVkQ29k
ZU1hcEZvcihDb2RlQmxvY2sqIGNvZGVCbG9jaykKLXsKLSAgICBBU1NFUlQoY29kZUJsb2NrID09
IGNvZGVCbG9jay0+YmFzZWxpbmVWZXJzaW9uKCkpOwotICAgIEFTU0VSVChjb2RlQmxvY2stPmdl
dEpJVFR5cGUoKSA9PSBKSVRDb2RlOjpCYXNlbGluZUpJVCk7Ci0gICAgQVNTRVJUKGNvZGVCbG9j
ay0+aml0Q29kZU1hcCgpKTsKLSAgICAKLSAgICBzdGQ6OnBhaXI8SGFzaE1hcDxDb2RlQmxvY2sq
LCBWZWN0b3I8Qnl0ZWNvZGVBbmRNYWNoaW5lT2Zmc2V0PiA+OjppdGVyYXRvciwgYm9vbD4gcmVz
dWx0ID0gbV9kZWNvZGVkQ29kZU1hcHMuYWRkKGNvZGVCbG9jaywgVmVjdG9yPEJ5dGVjb2RlQW5k
TWFjaGluZU9mZnNldD4oKSk7Ci0gICAgCi0gICAgaWYgKHJlc3VsdC5zZWNvbmQpCi0gICAgICAg
IGNvZGVCbG9jay0+aml0Q29kZU1hcCgpLT5kZWNvZGUocmVzdWx0LmZpcnN0LT5zZWNvbmQpOwot
ICAgIAotICAgIHJldHVybiByZXN1bHQuZmlyc3QtPnNlY29uZDsKLX0KLQogdm9pZCBKSVRDb21w
aWxlcjo6bGlua09TUkV4aXRzKFNwZWN1bGF0aXZlSklUJiBzcGVjdWxhdGl2ZSkKIHsKICAgICBP
U1JFeGl0VmVjdG9yOjpJdGVyYXRvciBleGl0c0l0ZXIgPSBzcGVjdWxhdGl2ZS5vc3JFeGl0cygp
LmJlZ2luKCk7CkBAIC0yODksMzggKzI3NSw2IEBAIHZvaWQgSklUQ29tcGlsZXI6OmNvbXBpbGVG
dW5jdGlvbihKSVRDb2QKICAgICBlbnRyeSA9IEpJVENvZGUobGlua0J1ZmZlci5maW5hbGl6ZUNv
ZGUoKSwgSklUQ29kZTo6REZHSklUKTsKIH0KIAotI2lmIEVOQUJMRShTQU1QTElOR19DT1VOVEVS
UykgJiYgQ1BVKFg4Nl82NCkgLy8gT3IgYW55IG90aGVyIDY0LWJpdCBwbGF0Zm9ybSEKLXZvaWQg
SklUQ29tcGlsZXI6OmVtaXRDb3VudChNYWNyb0Fzc2VtYmxlciYgaml0LCBBYnN0cmFjdFNhbXBs
aW5nQ291bnRlciYgY291bnRlciwgdWludDMyX3QgaW5jcmVtZW50KQotewotICAgIGppdC5hZGRQ
dHIoVHJ1c3RlZEltbTMyKGluY3JlbWVudCksIEFic29sdXRlQWRkcmVzcyhjb3VudGVyLmFkZHJl
c3NPZkNvdW50ZXIoKSkpOwotfQotI2VuZGlmCi0KLSNpZiBFTkFCTEUoU0FNUExJTkdfQ09VTlRF
UlMpICYmIENQVShYODYpIC8vIE9yIGFueSBvdGhlciBsaXR0bGUtZW5kaWFuIDMyLWJpdCBwbGF0
Zm9ybSEKLXZvaWQgSklUQ29tcGlsZXI6OmVtaXRDb3VudChNYWNyb0FzZW1ibGVyJiBqaXQsIEFi
c3RyYWN0U2FtcGxpbmdDb3VudGVyJiBjb3VudGVyLCB1aW50MzJfdCBpbmNyZW1lbnQpCi17Ci0g
ICAgaW50cHRyX3QgaGlXb3JkID0gcmVpbnRlcnByZXRfY2FzdDxpbnRwdHJfdD4oY291bnRlci5h
ZGRyZXNzT2ZDb3VudGVyKCkpICsgc2l6ZW9mKGludDMyX3QpOwotICAgIGppdC5hZGQzMihUcnVz
dGVkSW1tMzIoaW5jcmVtZW50KSwgQWJzb2x1dGVBZGRyZXNzKGNvdW50ZXIuYWRkcmVzc09mQ291
bnRlcigpKSk7Ci0gICAgaml0LmFkZFdpdGhDYXJyeTMyKFRydXN0ZWRJbW0zMigwKSwgQWJzb2x1
dGVBZGRyZXNzKHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KGhpV29yZCkpKTsKLX0KLSNlbmRpZgot
Ci0jaWYgRU5BQkxFKFNBTVBMSU5HX0ZMQUdTKQotdm9pZCBKSVRDb21waWxlcjo6c2V0U2FtcGxp
bmdGbGFnKGludDMyX3QgZmxhZykKLXsKLSAgICBBU1NFUlQoZmxhZyA+PSAxKTsKLSAgICBBU1NF
UlQoZmxhZyA8PSAzMik7Ci0gICAgb3IzMihUcnVzdGVkSW1tMzIoMXUgPDwgKGZsYWcgLSAxKSks
IEFic29sdXRlQWRkcmVzcyhTYW1wbGluZ0ZsYWdzOjphZGRyZXNzT2ZGbGFncygpKSk7Ci19Ci0K
LXZvaWQgSklUQ29tcGlsZXI6OmNsZWFyU2FtcGxpbmdGbGFnKGludDMyX3QgZmxhZykKLXsKLSAg
ICBBU1NFUlQoZmxhZyA+PSAxKTsKLSAgICBBU1NFUlQoZmxhZyA8PSAzMik7Ci0gICAgYW5kMzIo
VHJ1c3RlZEltbTMyKH4oMXUgPDwgKGZsYWcgLSAxKSkpLCBBYnNvbHV0ZUFkZHJlc3MoU2FtcGxp
bmdGbGFnczo6YWRkcmVzc09mRmxhZ3MoKSkpOwotfQotI2VuZGlmCi0KICNpZiBVU0UoSlNWQUxV
RTY0KQogCiB2b2lkIEpJVENvbXBpbGVyOjpleGl0U3BlY3VsYXRpdmVXaXRoT1NSKGNvbnN0IE9T
UkV4aXQmIGV4aXQsIFNwZWN1bGF0aW9uUmVjb3ZlcnkqIHJlY292ZXJ5KQpAQCAtODQ0LDQ5ICs3
OTgsNiBAQCB2b2lkIEpJVENvbXBpbGVyOjpleGl0U3BlY3VsYXRpdmVXaXRoT1NSCiAjZW5kaWYK
IH0KIAotI2lmIERGR19FTkFCTEUoSklUX0FTU0VSVCkKLXZvaWQgSklUQ29tcGlsZXI6OmppdEFz
c2VydElzSW50MzIoR1BSUmVnIGdwcikKLXsKLSNpZiBDUFUoWDg2XzY0KQotICAgIEp1bXAgY2hl
Y2tJbnQzMiA9IGJyYW5jaFB0cihCZWxvd09yRXF1YWwsIGdwciwgVHJ1c3RlZEltbVB0cihyZWlu
dGVycHJldF9jYXN0PHZvaWQqPihzdGF0aWNfY2FzdDx1aW50cHRyX3Q+KDB4RkZGRkZGRkZ1KSkp
KTsKLSAgICBicmVha3BvaW50KCk7Ci0gICAgY2hlY2tJbnQzMi5saW5rKHRoaXMpOwotI2Vsc2UK
LSAgICBVTlVTRURfUEFSQU0oZ3ByKTsKLSNlbmRpZgotfQotCi12b2lkIEpJVENvbXBpbGVyOjpq
aXRBc3NlcnRJc0pTSW50MzIoR1BSUmVnIGdwcikKLXsKLSAgICBKdW1wIGNoZWNrSlNJbnQzMiA9
IGJyYW5jaFB0cihBYm92ZU9yRXF1YWwsIGdwciwgR1BSSW5mbzo6dGFnVHlwZU51bWJlclJlZ2lz
dGVyKTsKLSAgICBicmVha3BvaW50KCk7Ci0gICAgY2hlY2tKU0ludDMyLmxpbmsodGhpcyk7Ci19
Ci0KLXZvaWQgSklUQ29tcGlsZXI6OmppdEFzc2VydElzSlNOdW1iZXIoR1BSUmVnIGdwcikKLXsK
LSAgICBKdW1wIGNoZWNrSlNOdW1iZXIgPSBicmFuY2hUZXN0UHRyKE1hY3JvQXNzZW1ibGVyOjpO
b25aZXJvLCBncHIsIEdQUkluZm86OnRhZ1R5cGVOdW1iZXJSZWdpc3Rlcik7Ci0gICAgYnJlYWtw
b2ludCgpOwotICAgIGNoZWNrSlNOdW1iZXIubGluayh0aGlzKTsKLX0KLQotdm9pZCBKSVRDb21w
aWxlcjo6aml0QXNzZXJ0SXNKU0RvdWJsZShHUFJSZWcgZ3ByKQotewotICAgIEp1bXAgY2hlY2tK
U0ludDMyID0gYnJhbmNoUHRyKEFib3ZlT3JFcXVhbCwgZ3ByLCBHUFJJbmZvOjp0YWdUeXBlTnVt
YmVyUmVnaXN0ZXIpOwotICAgIEp1bXAgY2hlY2tKU051bWJlciA9IGJyYW5jaFRlc3RQdHIoTWFj
cm9Bc3NlbWJsZXI6Ok5vblplcm8sIGdwciwgR1BSSW5mbzo6dGFnVHlwZU51bWJlclJlZ2lzdGVy
KTsKLSAgICBjaGVja0pTSW50MzIubGluayh0aGlzKTsKLSAgICBicmVha3BvaW50KCk7Ci0gICAg
Y2hlY2tKU051bWJlci5saW5rKHRoaXMpOwotfQotCi12b2lkIEpJVENvbXBpbGVyOjpqaXRBc3Nl
cnRJc0NlbGwoR1BSUmVnIGdwcikKLXsKLSAgICBKdW1wIGNoZWNrQ2VsbCA9IGJyYW5jaFRlc3RQ
dHIoTWFjcm9Bc3NlbWJsZXI6Olplcm8sIGdwciwgR1BSSW5mbzo6dGFnTWFza1JlZ2lzdGVyKTsK
LSAgICBicmVha3BvaW50KCk7Ci0gICAgY2hlY2tDZWxsLmxpbmsodGhpcyk7Ci19Ci0jZW5kaWYK
LQogI2VuZGlmIC8vIFVTRShKU1ZBTFVFNjQpCiAKIH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpERkcK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSklUQ29tcGlsZXIuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0pJVENvbXBpbGVyLmgJKHJldmlz
aW9uIDk5NDg2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdKSVRDb21waWxlci5o
CSh3b3JraW5nIGNvcHkpCkBAIC0zMCw2ICszMCw3IEBACiAKICNpbmNsdWRlIDxhc3NlbWJsZXIv
TWFjcm9Bc3NlbWJsZXIuaD4KICNpbmNsdWRlIDxieXRlY29kZS9Db2RlQmxvY2suaD4KKyNpbmNs
dWRlIDxkZmcvREZHQXNzZW1ibHlIZWxwZXJzLmg+CiAjaW5jbHVkZSA8ZGZnL0RGR0ZQUkluZm8u
aD4KICNpbmNsdWRlIDxkZmcvREZHR1BSSW5mby5oPgogI2luY2x1ZGUgPGRmZy9ERkdHcmFwaC5o
PgpAQCAtNTIsMTAgKzUzLDYgQEAgY2xhc3MgU3BlY3VsYXRpb25SZWNvdmVyeTsKIHN0cnVjdCBF
bnRyeUxvY2F0aW9uOwogc3RydWN0IE9TUkV4aXQ7CiAKLSNpZm5kZWYgTkRFQlVHCi10eXBlZGVm
IHZvaWQgKCpWX0RGR0RlYnVnT3BlcmF0aW9uX0VQKShFeGVjU3RhdGUqLCB2b2lkKik7Ci0jZW5k
aWYKLQogI2lmIERGR19FTkFCTEUoVkVSQk9TRV9TUEVDVUxBVElPTl9GQUlMVVJFKQogc3RydWN0
IFNwZWN1bGF0aW9uRmFpbHVyZURlYnVnSW5mbyB7CiAgICAgQ29kZUJsb2NrKiBjb2RlQmxvY2s7
CkBAIC0xMTEsMTIgKzEwOCwxMSBAQCBzdHJ1Y3QgQ2FsbEV4Y2VwdGlvblJlY29yZCB7CiAvLyBy
ZWxhdGlvbnNoaXApLiBUaGUgSklUQ29tcGlsZXIgaG9sZHMgcmVmZXJlbmNlcyB0byBpbmZvcm1h
dGlvbiByZXF1aXJlZCBkdXJpbmcKIC8vIGNvbXBpbGF0aW9uLCBhbmQgYWxzbyByZWNvcmRzIGlu
Zm9ybWF0aW9uIHVzZWQgaW4gbGlua2luZyAoZS5nLiBhIGxpc3Qgb2YgYWxsCiAvLyBjYWxsIHRv
IGJlIGxpbmtlZCkuCi1jbGFzcyBKSVRDb21waWxlciA6IHB1YmxpYyBNYWNyb0Fzc2VtYmxlciB7
CitjbGFzcyBKSVRDb21waWxlciA6IHB1YmxpYyBBc3NlbWJseUhlbHBlcnMgewogcHVibGljOgog
ICAgIEpJVENvbXBpbGVyKEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YSwgR3JhcGgmIGRmZywgQ29k
ZUJsb2NrKiBjb2RlQmxvY2spCi0gICAgICAgIDogbV9nbG9iYWxEYXRhKGdsb2JhbERhdGEpCisg
ICAgICAgIDogQXNzZW1ibHlIZWxwZXJzKGdsb2JhbERhdGEsIGNvZGVCbG9jaykKICAgICAgICAg
LCBtX2dyYXBoKGRmZykKLSAgICAgICAgLCBtX2NvZGVCbG9jayhjb2RlQmxvY2spCiAgICAgewog
ICAgIH0KIApAQCAtMTI1LDg0ICsxMjEsNiBAQCBwdWJsaWM6CiAKICAgICAvLyBBY2Nlc3NvcnMg
Zm9yIHByb3BlcnRpZXMuCiAgICAgR3JhcGgmIGdyYXBoKCkgeyByZXR1cm4gbV9ncmFwaDsgfQot
ICAgIENvZGVCbG9jayogY29kZUJsb2NrKCkgeyByZXR1cm4gbV9jb2RlQmxvY2s7IH0KLSAgICBK
U0dsb2JhbERhdGEqIGdsb2JhbERhdGEoKSB7IHJldHVybiBtX2dsb2JhbERhdGE7IH0KLSAgICBB
c3NlbWJsZXJUeXBlX1QmIGFzc2VtYmxlcigpIHsgcmV0dXJuIG1fYXNzZW1ibGVyOyB9Ci0KLSNp
ZiBDUFUoWDg2XzY0KSB8fCBDUFUoWDg2KQotICAgIHZvaWQgcHJlc2VydmVSZXR1cm5BZGRyZXNz
QWZ0ZXJDYWxsKEdQUlJlZyByZWcpCi0gICAgewotICAgICAgICBwb3AocmVnKTsKLSAgICB9Ci0K
LSAgICB2b2lkIHJlc3RvcmVSZXR1cm5BZGRyZXNzQmVmb3JlUmV0dXJuKEdQUlJlZyByZWcpCi0g
ICAgewotICAgICAgICBwdXNoKHJlZyk7Ci0gICAgfQotCi0gICAgdm9pZCByZXN0b3JlUmV0dXJu
QWRkcmVzc0JlZm9yZVJldHVybihBZGRyZXNzIGFkZHJlc3MpCi0gICAgewotICAgICAgICBwdXNo
KGFkZHJlc3MpOwotICAgIH0KLQotICAgIHZvaWQgZW1pdEdldEZyb21DYWxsRnJhbWVIZWFkZXJQ
dHIoUmVnaXN0ZXJGaWxlOjpDYWxsRnJhbWVIZWFkZXJFbnRyeSBlbnRyeSwgR1BSUmVnIHRvKQot
ICAgIHsKLSAgICAgICAgbG9hZFB0cihBZGRyZXNzKEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVy
LCBlbnRyeSAqIHNpemVvZihSZWdpc3RlcikpLCB0byk7Ci0gICAgfQotICAgIHZvaWQgZW1pdFB1
dFRvQ2FsbEZyYW1lSGVhZGVyKEdQUlJlZyBmcm9tLCBSZWdpc3RlckZpbGU6OkNhbGxGcmFtZUhl
YWRlckVudHJ5IGVudHJ5KQotICAgIHsKLSAgICAgICAgc3RvcmVQdHIoZnJvbSwgQWRkcmVzcyhH
UFJJbmZvOjpjYWxsRnJhbWVSZWdpc3RlciwgZW50cnkgKiBzaXplb2YoUmVnaXN0ZXIpKSk7Ci0g
ICAgfQotCi0gICAgdm9pZCBlbWl0UHV0SW1tZWRpYXRlVG9DYWxsRnJhbWVIZWFkZXIodm9pZCog
dmFsdWUsIFJlZ2lzdGVyRmlsZTo6Q2FsbEZyYW1lSGVhZGVyRW50cnkgZW50cnkpCi0gICAgewot
ICAgICAgICBzdG9yZVB0cihUcnVzdGVkSW1tUHRyKHZhbHVlKSwgQWRkcmVzcyhHUFJJbmZvOjpj
YWxsRnJhbWVSZWdpc3RlciwgZW50cnkgKiBzaXplb2YoUmVnaXN0ZXIpKSk7Ci0gICAgfQotI2Vu
ZGlmCi0KLSAgICBKdW1wIGJyYW5jaElmTm90Q2VsbChHUFJSZWcgcmVnKQotICAgIHsKLSNpZiBV
U0UoSlNWQUxVRTY0KQotICAgICAgICByZXR1cm4gYnJhbmNoVGVzdFB0cihNYWNyb0Fzc2VtYmxl
cjo6Tm9uWmVybywgcmVnLCBHUFJJbmZvOjp0YWdNYXNrUmVnaXN0ZXIpOwotI2Vsc2UKLSAgICAg
ICAgcmV0dXJuIGJyYW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpOb3RFcXVhbCwgcmVnLCBUcnVzdGVk
SW1tMzIoSlNWYWx1ZTo6Q2VsbFRhZykpOwotI2VuZGlmCi0gICAgfQotICAgIAotICAgIHN0YXRp
YyBBZGRyZXNzIGFkZHJlc3NGb3JHbG9iYWxWYXIoR1BSUmVnIGdsb2JhbCwgaW50MzJfdCB2YXJO
dW1iZXIpCi0gICAgewotICAgICAgICByZXR1cm4gQWRkcmVzcyhnbG9iYWwsIHZhck51bWJlciAq
IHNpemVvZihSZWdpc3RlcikpOwotICAgIH0KLQotICAgIHN0YXRpYyBBZGRyZXNzIHRhZ0Zvckds
b2JhbFZhcihHUFJSZWcgZ2xvYmFsLCBpbnQzMl90IHZhck51bWJlcikKLSAgICB7Ci0gICAgICAg
IHJldHVybiBBZGRyZXNzKGdsb2JhbCwgdmFyTnVtYmVyICogc2l6ZW9mKFJlZ2lzdGVyKSArIE9C
SkVDVF9PRkZTRVRPRihFbmNvZGVkVmFsdWVEZXNjcmlwdG9yLCBhc0JpdHMudGFnKSk7Ci0gICAg
fQotCi0gICAgc3RhdGljIEFkZHJlc3MgcGF5bG9hZEZvckdsb2JhbFZhcihHUFJSZWcgZ2xvYmFs
LCBpbnQzMl90IHZhck51bWJlcikKLSAgICB7Ci0gICAgICAgIHJldHVybiBBZGRyZXNzKGdsb2Jh
bCwgdmFyTnVtYmVyICogc2l6ZW9mKFJlZ2lzdGVyKSArIE9CSkVDVF9PRkZTRVRPRihFbmNvZGVk
VmFsdWVEZXNjcmlwdG9yLCBhc0JpdHMucGF5bG9hZCkpOwotICAgIH0KLQotICAgIHN0YXRpYyBB
ZGRyZXNzIGFkZHJlc3NGb3IoVmlydHVhbFJlZ2lzdGVyIHZpcnR1YWxSZWdpc3RlcikKLSAgICB7
Ci0gICAgICAgIHJldHVybiBBZGRyZXNzKEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyLCB2aXJ0
dWFsUmVnaXN0ZXIgKiBzaXplb2YoUmVnaXN0ZXIpKTsKLSAgICB9Ci0KLSAgICBzdGF0aWMgQWRk
cmVzcyB0YWdGb3IoVmlydHVhbFJlZ2lzdGVyIHZpcnR1YWxSZWdpc3RlcikKLSAgICB7Ci0gICAg
ICAgIHJldHVybiBBZGRyZXNzKEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyLCB2aXJ0dWFsUmVn
aXN0ZXIgKiBzaXplb2YoUmVnaXN0ZXIpICsgT0JKRUNUX09GRlNFVE9GKEVuY29kZWRWYWx1ZURl
c2NyaXB0b3IsIGFzQml0cy50YWcpKTsKLSAgICB9Ci0KLSAgICBzdGF0aWMgQWRkcmVzcyBwYXls
b2FkRm9yKFZpcnR1YWxSZWdpc3RlciB2aXJ0dWFsUmVnaXN0ZXIpCi0gICAgewotICAgICAgICBy
ZXR1cm4gQWRkcmVzcyhHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3RlciwgdmlydHVhbFJlZ2lzdGVy
ICogc2l6ZW9mKFJlZ2lzdGVyKSArIE9CSkVDVF9PRkZTRVRPRihFbmNvZGVkVmFsdWVEZXNjcmlw
dG9yLCBhc0JpdHMucGF5bG9hZCkpOwotICAgIH0KLQotICAgIEp1bXAgYnJhbmNoSWZOb3RPYmpl
Y3QoR1BSUmVnIHN0cnVjdHVyZVJlZykKLSAgICB7Ci0gICAgICAgIHJldHVybiBicmFuY2g4KEJl
bG93LCBBZGRyZXNzKHN0cnVjdHVyZVJlZywgU3RydWN0dXJlOjp0eXBlSW5mb1R5cGVPZmZzZXQo
KSksIFRydXN0ZWRJbW0zMihPYmplY3RUeXBlKSk7Ci0gICAgfQogCiAgICAgLy8gTm90aWZ5IHRo
ZSBKSVQgb2YgYSBjYWxsIHRoYXQgZG9lcyBub3QgcmVxdWlyZSBsaW5raW5nLgogICAgIHZvaWQg
bm90aWZ5Q2FsbChDYWxsIGZ1bmN0aW9uQ2FsbCwgQ29kZU9yaWdpbiBjb2RlT3JpZ2luKQpAQCAt
MjM4LDM2ICsxNTYsNiBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBmdW5jdGlvbkNhbGw7CiAg
ICAgfQogICAgIAotI2lmbmRlZiBOREVCVUcKLSAgICAvLyBBZGQgYSBkZWJ1ZyBjYWxsLiBUaGlz
IGNhbGwgaGFzIG5vIGVmZmVjdCBvbiBKSVQgY29kZSBleGVjdXRpb24gc3RhdGUuCi0gICAgdm9p
ZCBkZWJ1Z0NhbGwoVl9ERkdEZWJ1Z09wZXJhdGlvbl9FUCBmdW5jdGlvbiwgdm9pZCogYXJndW1l
bnQpCi0gICAgewotICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgR1BSSW5mbzo6bnVt
YmVyT2ZSZWdpc3RlcnM7ICsraSkKLSAgICAgICAgICAgIHN0b3JlUHRyKEdQUkluZm86OnRvUmVn
aXN0ZXIoaSksIG1fZ2xvYmFsRGF0YS0+ZGVidWdEYXRhQnVmZmVyICsgaSk7Ci0gICAgICAgIGZv
ciAodW5zaWduZWQgaSA9IDA7IGkgPCBGUFJJbmZvOjpudW1iZXJPZlJlZ2lzdGVyczsgKytpKSB7
Ci0gICAgICAgICAgICBtb3ZlKFRydXN0ZWRJbW1QdHIobV9nbG9iYWxEYXRhLT5kZWJ1Z0RhdGFC
dWZmZXIgKyBHUFJJbmZvOjpudW1iZXJPZlJlZ2lzdGVycyArIGkpLCBHUFJJbmZvOjpyZWdUMCk7
Ci0gICAgICAgICAgICBzdG9yZURvdWJsZShGUFJJbmZvOjp0b1JlZ2lzdGVyKGkpLCBHUFJJbmZv
OjpyZWdUMCk7Ci0gICAgICAgIH0KLSNpZiBDUFUoWDg2XzY0KQotICAgICAgICBtb3ZlKFRydXN0
ZWRJbW1QdHIoYXJndW1lbnQpLCBHUFJJbmZvOjphcmd1bWVudEdQUjEpOwotICAgICAgICBtb3Zl
KEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyLCBHUFJJbmZvOjphcmd1bWVudEdQUjApOwotI2Vs
aWYgQ1BVKFg4NikKLSAgICAgICAgcG9rZShHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3RlciwgMCk7
Ci0gICAgICAgIHBva2UoVHJ1c3RlZEltbVB0cihhcmd1bWVudCksIDEpOwotI2Vsc2UKLSNlcnJv
ciAiREZHIEpJVCBub3Qgc3VwcG9ydGVkIG9uIHRoaXMgcGxhdGZvcm0uIgotI2VuZGlmCi0gICAg
ICAgIG1vdmUoVHJ1c3RlZEltbVB0cihyZWludGVycHJldF9jYXN0PHZvaWQqPihmdW5jdGlvbikp
LCBHUFJJbmZvOjpyZWdUMCk7Ci0gICAgICAgIGNhbGwoR1BSSW5mbzo6cmVnVDApOwotICAgICAg
ICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgRlBSSW5mbzo6bnVtYmVyT2ZSZWdpc3RlcnM7ICsr
aSkgewotICAgICAgICAgICAgbW92ZShUcnVzdGVkSW1tUHRyKG1fZ2xvYmFsRGF0YS0+ZGVidWdE
YXRhQnVmZmVyICsgR1BSSW5mbzo6bnVtYmVyT2ZSZWdpc3RlcnMgKyBpKSwgR1BSSW5mbzo6cmVn
VDApOwotICAgICAgICAgICAgbG9hZERvdWJsZShHUFJJbmZvOjpyZWdUMCwgRlBSSW5mbzo6dG9S
ZWdpc3RlcihpKSk7Ci0gICAgICAgIH0KLSAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8
IEdQUkluZm86Om51bWJlck9mUmVnaXN0ZXJzOyArK2kpCi0gICAgICAgICAgICBsb2FkUHRyKG1f
Z2xvYmFsRGF0YS0+ZGVidWdEYXRhQnVmZmVyICsgaSwgR1BSSW5mbzo6dG9SZWdpc3RlcihpKSk7
Ci0gICAgfQotI2VuZGlmCi0KICAgICAvLyBIZWxwZXIgbWV0aG9kcyB0byBjaGVjayBub2RlcyBm
b3IgY29uc3RhbnRzLgogICAgIGJvb2wgaXNDb25zdGFudChOb2RlSW5kZXggbm9kZUluZGV4KSB7
IHJldHVybiBncmFwaCgpLmlzQ29uc3RhbnQobm9kZUluZGV4KTsgfQogICAgIGJvb2wgaXNKU0Nv
bnN0YW50KE5vZGVJbmRleCBub2RlSW5kZXgpIHsgcmV0dXJuIGdyYXBoKCkuaXNKU0NvbnN0YW50
KG5vZGVJbmRleCk7IH0KQEAgLTMxNCw3MSArMjAyLDYgQEAgcHVibGljOgogICAgIHZvaWQgZW1p
dFN0b3JlRG91YmxlKE5vZGVJbmRleCwgRlBSUmVnIHZhbHVlKTsKICNlbmRpZgogCi0gICAgLy8g
VGhlc2UgbWV0aG9kcyBKSVQgZ2VuZXJhdGUgZHluYW1pYywgZGVidWctb25seSBjaGVja3MgLSBh
a2luIHRvIEFTU0VSVHMuCi0jaWYgREZHX0VOQUJMRShKSVRfQVNTRVJUKQotICAgIHZvaWQgaml0
QXNzZXJ0SXNJbnQzMihHUFJSZWcpOwotICAgIHZvaWQgaml0QXNzZXJ0SXNKU0ludDMyKEdQUlJl
Zyk7Ci0gICAgdm9pZCBqaXRBc3NlcnRJc0pTTnVtYmVyKEdQUlJlZyk7Ci0gICAgdm9pZCBqaXRB
c3NlcnRJc0pTRG91YmxlKEdQUlJlZyk7Ci0gICAgdm9pZCBqaXRBc3NlcnRJc0NlbGwoR1BSUmVn
KTsKLSNlbHNlCi0gICAgdm9pZCBqaXRBc3NlcnRJc0ludDMyKEdQUlJlZykge30KLSAgICB2b2lk
IGppdEFzc2VydElzSlNJbnQzMihHUFJSZWcpIHt9Ci0gICAgdm9pZCBqaXRBc3NlcnRJc0pTTnVt
YmVyKEdQUlJlZykge30KLSAgICB2b2lkIGppdEFzc2VydElzSlNEb3VibGUoR1BSUmVnKSB7fQot
ICAgIHZvaWQgaml0QXNzZXJ0SXNDZWxsKEdQUlJlZykge30KLSNlbmRpZgotCi0gICAgLy8gVGhl
c2UgbWV0aG9kcyBjb252ZXJ0IGJldHdlZW4gZG91YmxlcywgYW5kIGRvdWJsZXMgYm94ZWQgYW5k
IEpTVmFsdWVzLgotI2lmIFVTRShKU1ZBTFVFNjQpCi0gICAgR1BSUmVnIGJveERvdWJsZShGUFJS
ZWcgZnByLCBHUFJSZWcgZ3ByKQotICAgIHsKLSAgICAgICAgbW92ZURvdWJsZVRvUHRyKGZwciwg
Z3ByKTsKLSAgICAgICAgc3ViUHRyKEdQUkluZm86OnRhZ1R5cGVOdW1iZXJSZWdpc3RlciwgZ3By
KTsKLSAgICAgICAgcmV0dXJuIGdwcjsKLSAgICB9Ci0gICAgRlBSUmVnIHVuYm94RG91YmxlKEdQ
UlJlZyBncHIsIEZQUlJlZyBmcHIpCi0gICAgewotICAgICAgICBqaXRBc3NlcnRJc0pTRG91Ymxl
KGdwcik7Ci0gICAgICAgIGFkZFB0cihHUFJJbmZvOjp0YWdUeXBlTnVtYmVyUmVnaXN0ZXIsIGdw
cik7Ci0gICAgICAgIG1vdmVQdHJUb0RvdWJsZShncHIsIGZwcik7Ci0gICAgICAgIHJldHVybiBm
cHI7Ci0gICAgfQotI2VsaWYgVVNFKEpTVkFMVUUzMl82NCkKLSAgICB2b2lkIGJveERvdWJsZShG
UFJSZWcgZnByLCBHUFJSZWcgdGFnR1BSLCBHUFJSZWcgcGF5bG9hZEdQUikKLSAgICB7Ci0jaWYg
Q1BVKFg4NikKLSAgICAgICAgbW92ZVBhY2tlZFRvSW50MzIoZnByLCBwYXlsb2FkR1BSKTsKLSAg
ICAgICAgcnNoaWZ0UGFja2VkKFRydXN0ZWRJbW0zMigzMiksIGZwcik7Ci0gICAgICAgIG1vdmVQ
YWNrZWRUb0ludDMyKGZwciwgdGFnR1BSKTsKLSNlbmRpZgotICAgIH0KLSAgICB2b2lkIHVuYm94
RG91YmxlKEdQUlJlZyB0YWdHUFIsIEdQUlJlZyBwYXlsb2FkR1BSLCBGUFJSZWcgZnByLCBGUFJS
ZWcgc2NyYXRjaEZQUikKLSAgICB7Ci0gICAgICAgIGppdEFzc2VydElzSlNEb3VibGUodGFnR1BS
KTsKLSNpZiBDUFUoWDg2KQotICAgICAgICBtb3ZlSW50MzJUb1BhY2tlZChwYXlsb2FkR1BSLCBm
cHIpOwotICAgICAgICBtb3ZlSW50MzJUb1BhY2tlZCh0YWdHUFIsIHNjcmF0Y2hGUFIpOwotICAg
ICAgICBsc2hpZnRQYWNrZWQoVHJ1c3RlZEltbTMyKDMyKSwgc2NyYXRjaEZQUik7Ci0gICAgICAg
IG9yUGFja2VkKHNjcmF0Y2hGUFIsIGZwcik7Ci0jZW5kaWYKLSAgICB9Ci0jZW5kaWYKLQotI2lm
IEVOQUJMRShTQU1QTElOR19DT1VOVEVSUykKLSAgICAvLyBEZWJ1ZyBwcm9maWxpbmcgdG9vbC4K
LSAgICBzdGF0aWMgdm9pZCBlbWl0Q291bnQoTWFjcm9Bc3NlbWJsZXImLCBBYnN0cmFjdFNhbXBs
aW5nQ291bnRlciYsIHVpbnQzMl90IGluY3JlbWVudCA9IDEpOwotICAgIHZvaWQgZW1pdENvdW50
KEFic3RyYWN0U2FtcGxpbmdDb3VudGVyJiBjb3VudGVyLCB1aW50MzJfdCBpbmNyZW1lbnQgPSAx
KQotICAgIHsKLSAgICAgICAgZW1pdENvdW50KCp0aGlzLCBjb3VudGVyLCBpbmNyZW1lbnQpOwot
ICAgIH0KLSNlbmRpZgotCi0jaWYgRU5BQkxFKFNBTVBMSU5HX0ZMQUdTKQotICAgIHZvaWQgc2V0
U2FtcGxpbmdGbGFnKGludDMyX3QgZmxhZyk7Ci0gICAgdm9pZCBjbGVhclNhbXBsaW5nRmxhZyhp
bnQzMl90IGZsYWcpOwotI2VuZGlmCi0KICNpZiBVU0UoSlNWQUxVRTY0KQogICAgIHZvaWQgYWRk
UHJvcGVydHlBY2Nlc3MoSklUQ29tcGlsZXI6OkNhbGwgZnVuY3Rpb25DYWxsLCBpbnQxNl90IGRl
bHRhQ2hlY2tJbW1Ub0NhbGwsIGludDE2X3QgZGVsdGFDYWxsVG9TdHJ1Y3RDaGVjaywgaW50MTZf
dCBkZWx0YUNhbGxUb0xvYWRPclN0b3JlLCBpbnQxNl90IGRlbHRhQ2FsbFRvU2xvd0Nhc2UsIGlu
dDE2X3QgZGVsdGFDYWxsVG9Eb25lLCBpbnQ4X3QgYmFzZUdQUiwgaW50OF90IHZhbHVlR1BSLCBp
bnQ4X3Qgc2NyYXRjaEdQUikKICAgICB7CkBAIC00MzIsMTQgKzI1NSw2IEBAIHB1YmxpYzoKICAg
ICAgICAgcmV0dXJuIG1fZ3JhcGgudmFsdWVQcm9maWxlRm9yKG5vZGVJbmRleCwgYmFzZWxpbmVD
b2RlQmxvY2tGb3IobV9ncmFwaFtub2RlSW5kZXhdLmNvZGVPcmlnaW4pKTsKICAgICB9CiAgICAg
Ci0gICAgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdEZvcihDb2RlT3JpZ2luIGNvZGVPcmln
aW4pCi0gICAgewotICAgICAgICBpZiAoIWNvZGVPcmlnaW4uaW5saW5lQ2FsbEZyYW1lKQotICAg
ICAgICAgICAgcmV0dXJuIGNvZGVCbG9jaygpLT5nbG9iYWxPYmplY3QoKTsKLSAgICAgICAgLy8g
RklYTUU6IGlmIHdlIGV2ZXIgaW5saW5lIGJhc2VkIG9uIGV4ZWN1dGFibGUgbm90IGZ1bmN0aW9u
LCB0aGlzIGNvZGUgd2lsbCBuZWVkIHRvIGNoYW5nZS4KLSAgICAgICAgcmV0dXJuIGNvZGVPcmln
aW4uaW5saW5lQ2FsbEZyYW1lLT5jYWxsZWUtPnNjb3BlKCktPmdsb2JhbE9iamVjdC5nZXQoKTsK
LSAgICB9Ci0gICAgCiBwcml2YXRlOgogICAgIC8vIEludGVybmFsIGltcGxlbWVudGF0aW9uIHRv
IGNvbXBpbGUuCiAgICAgdm9pZCBjb21waWxlRW50cnkoKTsKQEAgLTQ0OSwzMCArMjY0LDkgQEAg
cHJpdmF0ZToKICAgICB2b2lkIGV4aXRTcGVjdWxhdGl2ZVdpdGhPU1IoY29uc3QgT1NSRXhpdCYs
IFNwZWN1bGF0aW9uUmVjb3ZlcnkqKTsKICAgICB2b2lkIGxpbmtPU1JFeGl0cyhTcGVjdWxhdGl2
ZUpJVCYpOwogICAgIAotICAgIENvZGVCbG9jayogYmFzZWxpbmVDb2RlQmxvY2tGb3IoY29uc3Qg
Q29kZU9yaWdpbiYgY29kZU9yaWdpbikKLSAgICB7Ci0gICAgICAgIGlmIChjb2RlT3JpZ2luLmlu
bGluZUNhbGxGcmFtZSkgewotICAgICAgICAgICAgRXhlY3V0YWJsZUJhc2UqIGV4ZWN1dGFibGUg
PSBjb2RlT3JpZ2luLmlubGluZUNhbGxGcmFtZS0+ZXhlY3V0YWJsZS5nZXQoKTsKLSAgICAgICAg
ICAgIEFTU0VSVChleGVjdXRhYmxlLT5zdHJ1Y3R1cmUoKS0+Y2xhc3NJbmZvKCkgPT0gJkZ1bmN0
aW9uRXhlY3V0YWJsZTo6c19pbmZvKTsKLSAgICAgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxG
dW5jdGlvbkV4ZWN1dGFibGUqPihleGVjdXRhYmxlKS0+YmFzZWxpbmVDb2RlQmxvY2tGb3IoY29k
ZU9yaWdpbi5pbmxpbmVDYWxsRnJhbWUtPmlzQ2FsbCA/IENvZGVGb3JDYWxsIDogQ29kZUZvckNv
bnN0cnVjdCk7Ci0gICAgICAgIH0KLSAgICAgICAgQVNTRVJUKGNvZGVCbG9jaygpLT5hbHRlcm5h
dGl2ZSgpID09IGNvZGVCbG9jaygpLT5iYXNlbGluZVZlcnNpb24oKSk7Ci0gICAgICAgIHJldHVy
biBjb2RlQmxvY2soKS0+YWx0ZXJuYXRpdmUoKTsKLSAgICB9Ci0gICAgCi0gICAgVmVjdG9yPEJ5
dGVjb2RlQW5kTWFjaGluZU9mZnNldD4mIGRlY29kZWRDb2RlTWFwRm9yKENvZGVCbG9jayopOwot
Ci0gICAgLy8gVGhlIGdsb2JhbERhdGEsIHVzZWQgdG8gYWNjZXNzIGNvbnN0YW50cyBzdWNoIGFz
IHRoZSB2UHRycy4KLSAgICBKU0dsb2JhbERhdGEqIG1fZ2xvYmFsRGF0YTsKLQogICAgIC8vIFRo
ZSBkYXRhZmxvdyBncmFwaCBjdXJyZW50bHkgYmVpbmcgZ2VuZXJhdGVkLgogICAgIEdyYXBoJiBt
X2dyYXBoOwogCi0gICAgLy8gVGhlIGNvZGVCbG9jayBjdXJyZW50bHkgYmVpbmcgZ2VuZXJhdGVk
LCB1c2VkIHRvIGFjY2VzcyBpbmZvcm1hdGlvbiBzdWNoIGFzIGNvbnN0YW50IHZhbHVlcywgaW1t
ZWRpYXRlcy4KLSAgICBDb2RlQmxvY2sqIG1fY29kZUJsb2NrOwotICAgIAotICAgIEhhc2hNYXA8
Q29kZUJsb2NrKiwgVmVjdG9yPEJ5dGVjb2RlQW5kTWFjaGluZU9mZnNldD4gPiBtX2RlY29kZWRD
b2RlTWFwczsKLSAgICAKICAgICAvLyBWZWN0b3Igb2YgY2FsbHMgb3V0IGZyb20gSklUIGNvZGUs
IGluY2x1ZGluZyBleGNlcHRpb24gaGFuZGxlciBpbmZvcm1hdGlvbi4KICAgICAvLyBDb3VudCBv
ZiB0aGUgbnVtYmVyIG9mIENhbGxSZWNvcmRzIHdpdGggZXhjZXB0aW9uIGhhbmRsZXJzLgogICAg
IFZlY3RvcjxDYWxsTGlua1JlY29yZD4gbV9jYWxsczsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHT1NSRXhpdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHT1NSRXhpdC5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdPU1JFeGl0LmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMTM1IEBACisvKgorICog
Q29weXJpZ2h0IChDKSAyMDExIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJ
UycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRP
UlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisg
KiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgREZHT1NSRXhp
dF9oCisjZGVmaW5lIERGR09TUkV4aXRfaAorCisjaW5jbHVkZSA8d3RmL1BsYXRmb3JtLmg+CisK
KyNpZiBFTkFCTEUoREZHX0pJVCkKKworI2luY2x1ZGUgIkRGR0dQUkluZm8uaCIKKyNpbmNsdWRl
ICJNYWNyb0Fzc2VtYmxlci5oIgorI2luY2x1ZGUgIlZhbHVlUHJvZmlsZS5oIgorI2luY2x1ZGUg
PHd0Zi9WZWN0b3IuaD4KKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgeworCitjbGFz
cyBTcGVjdWxhdGl2ZUpJVDsKKworLy8gVGhpcyBlbnVtIGRlc2NyaWJlcyB0aGUgdHlwZXMgb2Yg
YWRkaXRpb25hbCByZWNvdmVyeSB0aGF0CisvLyBtYXkgbmVlZCBiZSBwZXJmb3JtZWQgc2hvdWxk
IGEgc3BlY3VsYXRpb24gY2hlY2sgZmFpbC4KK2VudW0gU3BlY3VsYXRpb25SZWNvdmVyeVR5cGUg
eworICAgIFNwZWN1bGF0aXZlQWRkLAorICAgIEJvb2xlYW5TcGVjdWxhdGlvbkNoZWNrCit9Owor
CisvLyA9PT0gU3BlY3VsYXRpb25SZWNvdmVyeSA9PT0KKy8vCisvLyBUaGlzIGNsYXNzIHByb3Zp
ZGVzIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24gdGhhdCBtYXkgYmUgYXNzb2NpYXRlZCB3aXRoIGEK
Ky8vIHNwZWN1bGF0aW9uIGNoZWNrIC0gZm9yIGV4YW1wbGUgCitjbGFzcyBTcGVjdWxhdGlvblJl
Y292ZXJ5IHsKK3B1YmxpYzoKKyAgICBTcGVjdWxhdGlvblJlY292ZXJ5KFNwZWN1bGF0aW9uUmVj
b3ZlcnlUeXBlIHR5cGUsIEdQUlJlZyBkZXN0LCBHUFJSZWcgc3JjKQorICAgICAgICA6IG1fdHlw
ZSh0eXBlKQorICAgICAgICAsIG1fZGVzdChkZXN0KQorICAgICAgICAsIG1fc3JjKHNyYykKKyAg
ICB7CisgICAgfQorCisgICAgU3BlY3VsYXRpb25SZWNvdmVyeVR5cGUgdHlwZSgpIHsgcmV0dXJu
IG1fdHlwZTsgfQorICAgIEdQUlJlZyBkZXN0KCkgeyByZXR1cm4gbV9kZXN0OyB9CisgICAgR1BS
UmVnIHNyYygpIHsgcmV0dXJuIG1fc3JjOyB9CisKK3ByaXZhdGU6CisgICAgLy8gSW5kaWNhdGVz
IHRoZSB0eXBlIG9mIGFkZGl0aW9uYWwgcmVjb3ZlcnkgdG8gYmUgcGVyZm9ybWVkLgorICAgIFNw
ZWN1bGF0aW9uUmVjb3ZlcnlUeXBlIG1fdHlwZTsKKyAgICAvLyBkaWZmZXJlbnQgcmVjb3Zlcnkg
dHlwZXMgbWF5IHJlcXVpcmVkIGRpZmZlcmVudCBhZGRpdGlvbmFsIGluZm9ybWF0aW9uIGhlcmUu
CisgICAgR1BSUmVnIG1fZGVzdDsKKyAgICBHUFJSZWcgbV9zcmM7Cit9OworCisvLyA9PT0gT1NS
RXhpdCA9PT0KKy8vCisvLyBUaGlzIHN0cnVjdHVyZSBkZXNjcmliZXMgaG93IHRvIGV4aXQgdGhl
IHNwZWN1bGF0aXZlIHBhdGggYnkKKy8vIGdvaW5nIGludG8gYmFzZWxpbmUgY29kZS4KK3N0cnVj
dCBPU1JFeGl0IHsKKyAgICBPU1JFeGl0KEpTVmFsdWVTb3VyY2UsIFZhbHVlUHJvZmlsZSosIE1h
Y3JvQXNzZW1ibGVyOjpKdW1wLCBTcGVjdWxhdGl2ZUpJVCosIHVuc2lnbmVkIHJlY292ZXJ5SW5k
ZXggPSAwKTsKKyAgICAKKyAgICBKU1ZhbHVlU291cmNlIG1fanNWYWx1ZVNvdXJjZTsKKyAgICBW
YWx1ZVByb2ZpbGUqIG1fdmFsdWVQcm9maWxlOworICAgIAorICAgIE1hY3JvQXNzZW1ibGVyOjpK
dW1wIG1fY2hlY2s7CisgICAgTm9kZUluZGV4IG1fbm9kZUluZGV4OworICAgIENvZGVPcmlnaW4g
bV9jb2RlT3JpZ2luOworICAgIAorICAgIHVuc2lnbmVkIG1fcmVjb3ZlcnlJbmRleDsKKyAgICAK
KyAgICAvLyBDb252ZW5pZW50IHdheSBvZiBpdGVyYXRpbmcgb3ZlciBWYWx1ZVJlY292ZXJpZXMg
d2hpbGUgYmVpbmcKKyAgICAvLyBnZW5lcmljIG92ZXIgYXJndW1lbnQgdmVyc3VzIHZhcmlhYmxl
LgorICAgIGludCBudW1iZXJPZlJlY292ZXJpZXMoKSBjb25zdCB7IHJldHVybiBtX2FyZ3VtZW50
cy5zaXplKCkgKyBtX3ZhcmlhYmxlcy5zaXplKCk7IH0KKyAgICBjb25zdCBWYWx1ZVJlY292ZXJ5
JiB2YWx1ZVJlY292ZXJ5KGludCBpbmRleCkgY29uc3QKKyAgICB7CisgICAgICAgIGlmIChpbmRl
eCA8IChpbnQpbV9hcmd1bWVudHMuc2l6ZSgpKQorICAgICAgICAgICAgcmV0dXJuIG1fYXJndW1l
bnRzW2luZGV4XTsKKyAgICAgICAgcmV0dXJuIG1fdmFyaWFibGVzW2luZGV4IC0gbV9hcmd1bWVu
dHMuc2l6ZSgpXTsKKyAgICB9CisgICAgYm9vbCBpc0FyZ3VtZW50KGludCBpbmRleCkgY29uc3Qg
eyByZXR1cm4gaW5kZXggPCAoaW50KW1fYXJndW1lbnRzLnNpemUoKTsgfQorICAgIGJvb2wgaXNW
YXJpYWJsZShpbnQgaW5kZXgpIGNvbnN0IHsgcmV0dXJuICFpc0FyZ3VtZW50KGluZGV4KTsgfQor
ICAgIGludCBhcmd1bWVudEZvckluZGV4KGludCBpbmRleCkgY29uc3QKKyAgICB7CisgICAgICAg
IHJldHVybiBpbmRleDsKKyAgICB9CisgICAgaW50IHZhcmlhYmxlRm9ySW5kZXgoaW50IGluZGV4
KSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIGluZGV4IC0gbV9hcmd1bWVudHMuc2l6ZSgp
OworICAgIH0KKyAgICBpbnQgb3BlcmFuZEZvckFyZ3VtZW50KGludCBhcmd1bWVudCkgY29uc3QK
KyAgICB7CisgICAgICAgIHJldHVybiBhcmd1bWVudCAtIG1fYXJndW1lbnRzLnNpemUoKSAtIFJl
Z2lzdGVyRmlsZTo6Q2FsbEZyYW1lSGVhZGVyU2l6ZTsKKyAgICB9CisgICAgaW50IG9wZXJhbmRG
b3JJbmRleChpbnQgaW5kZXgpIGNvbnN0CisgICAgeworICAgICAgICBpZiAoaW5kZXggPCAoaW50
KW1fYXJndW1lbnRzLnNpemUoKSkKKyAgICAgICAgICAgIHJldHVybiBvcGVyYW5kRm9yQXJndW1l
bnQoaW5kZXgpOworICAgICAgICByZXR1cm4gaW5kZXggLSBtX2FyZ3VtZW50cy5zaXplKCk7Cisg
ICAgfQorICAgIAorI2lmbmRlZiBOREVCVUcKKyAgICB2b2lkIGR1bXAoRklMRSogb3V0KSBjb25z
dDsKKyNlbmRpZgorICAgIAorICAgIFZlY3RvcjxWYWx1ZVJlY292ZXJ5LCAwPiBtX2FyZ3VtZW50
czsKKyAgICBWZWN0b3I8VmFsdWVSZWNvdmVyeSwgMD4gbV92YXJpYWJsZXM7CisgICAgaW50IG1f
bGFzdFNldE9wZXJhbmQ7Cit9OwordHlwZWRlZiBTZWdtZW50ZWRWZWN0b3I8T1NSRXhpdCwgMTY+
IE9TUkV4aXRWZWN0b3I7CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpERkcKKworI2VuZGlmIC8v
IEVOQUJMRShERkdfSklUKQorCisjZW5kaWYgLy8gREZHT1NSRXhpdF9oCisKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmgJKHJldmlzaW9uIDk5
NDg2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5oCSh3
b3JraW5nIGNvcHkpCkBAIC0yOCw0NiArMjgsMTUgQEAKIAogI2lmIEVOQUJMRShERkdfSklUKQog
CisjaW5jbHVkZSAiREZHQWJzdHJhY3RTdGF0ZS5oIgorI2luY2x1ZGUgIkRGR0pJVENvZGVHZW5l
cmF0b3IuaCIKKyNpbmNsdWRlICJERkdPU1JFeGl0LmgiCiAjaW5jbHVkZSAiVmFsdWVSZWNvdmVy
eS5oIgotI2luY2x1ZGUgPGRmZy9ERkdBYnN0cmFjdFN0YXRlLmg+Ci0jaW5jbHVkZSA8ZGZnL0RG
R0pJVENvZGVHZW5lcmF0b3IuaD4KIAogbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgewog
CiBjbGFzcyBTcGVjdWxhdGl2ZUpJVDsKIAotLy8gVGhpcyBlbnVtIGRlc2NyaWJlcyB0aGUgdHlw
ZXMgb2YgYWRkaXRpb25hbCByZWNvdmVyeSB0aGF0Ci0vLyBtYXkgbmVlZCBiZSBwZXJmb3JtZWQg
c2hvdWxkIGEgc3BlY3VsYXRpb24gY2hlY2sgZmFpbC4KLWVudW0gU3BlY3VsYXRpb25SZWNvdmVy
eVR5cGUgewotICAgIFNwZWN1bGF0aXZlQWRkLAotICAgIEJvb2xlYW5TcGVjdWxhdGlvbkNoZWNr
Ci19OwotCi0vLyA9PT0gU3BlY3VsYXRpb25SZWNvdmVyeSA9PT0KLS8vCi0vLyBUaGlzIGNsYXNz
IHByb3ZpZGVzIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24gdGhhdCBtYXkgYmUgYXNzb2NpYXRlZCB3
aXRoIGEKLS8vIHNwZWN1bGF0aW9uIGNoZWNrIC0gZm9yIGV4YW1wbGUgCi1jbGFzcyBTcGVjdWxh
dGlvblJlY292ZXJ5IHsKLXB1YmxpYzoKLSAgICBTcGVjdWxhdGlvblJlY292ZXJ5KFNwZWN1bGF0
aW9uUmVjb3ZlcnlUeXBlIHR5cGUsIEdQUlJlZyBkZXN0LCBHUFJSZWcgc3JjKQotICAgICAgICA6
IG1fdHlwZSh0eXBlKQotICAgICAgICAsIG1fZGVzdChkZXN0KQotICAgICAgICAsIG1fc3JjKHNy
YykKLSAgICB7Ci0gICAgfQotCi0gICAgU3BlY3VsYXRpb25SZWNvdmVyeVR5cGUgdHlwZSgpIHsg
cmV0dXJuIG1fdHlwZTsgfQotICAgIEdQUlJlZyBkZXN0KCkgeyByZXR1cm4gbV9kZXN0OyB9Ci0g
ICAgR1BSUmVnIHNyYygpIHsgcmV0dXJuIG1fc3JjOyB9Ci0KLXByaXZhdGU6Ci0gICAgLy8gSW5k
aWNhdGVzIHRoZSB0eXBlIG9mIGFkZGl0aW9uYWwgcmVjb3ZlcnkgdG8gYmUgcGVyZm9ybWVkLgot
ICAgIFNwZWN1bGF0aW9uUmVjb3ZlcnlUeXBlIG1fdHlwZTsKLSAgICAvLyBkaWZmZXJlbnQgcmVj
b3ZlcnkgdHlwZXMgbWF5IHJlcXVpcmVkIGRpZmZlcmVudCBhZGRpdGlvbmFsIGluZm9ybWF0aW9u
IGhlcmUuCi0gICAgR1BSUmVnIG1fZGVzdDsKLSAgICBHUFJSZWcgbV9zcmM7Ci19OwotCiBlbnVt
IFZhbHVlU291cmNlS2luZCB7CiAgICAgU291cmNlTm90U2V0LAogICAgIFZhbHVlSW5SZWdpc3Rl
ckZpbGUsCkBAIC0xNDYsNjIgKzExNSw2IEBAIHByaXZhdGU6CiAgICAgTm9kZUluZGV4IG1fbm9k
ZUluZGV4OwogfTsKICAgICAKLS8vID09PSBPU1JFeGl0ID09PQotLy8KLS8vIFRoaXMgc3RydWN0
dXJlIGRlc2NyaWJlcyBob3cgdG8gZXhpdCB0aGUgc3BlY3VsYXRpdmUgcGF0aCBieQotLy8gZ29p
bmcgaW50byBiYXNlbGluZSBjb2RlLgotc3RydWN0IE9TUkV4aXQgewotICAgIE9TUkV4aXQoSlNW
YWx1ZVNvdXJjZSwgVmFsdWVQcm9maWxlKiwgTWFjcm9Bc3NlbWJsZXI6Okp1bXAsIFNwZWN1bGF0
aXZlSklUKiwgdW5zaWduZWQgcmVjb3ZlcnlJbmRleCA9IDApOwotICAgIAotICAgIEpTVmFsdWVT
b3VyY2UgbV9qc1ZhbHVlU291cmNlOwotICAgIFZhbHVlUHJvZmlsZSogbV92YWx1ZVByb2ZpbGU7
Ci0gICAgCi0gICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgbV9jaGVjazsKLSAgICBOb2RlSW5kZXgg
bV9ub2RlSW5kZXg7Ci0gICAgQ29kZU9yaWdpbiBtX2NvZGVPcmlnaW47Ci0gICAgCi0gICAgdW5z
aWduZWQgbV9yZWNvdmVyeUluZGV4OwotICAgIAotICAgIC8vIENvbnZlbmllbnQgd2F5IG9mIGl0
ZXJhdGluZyBvdmVyIFZhbHVlUmVjb3ZlcmllcyB3aGlsZSBiZWluZwotICAgIC8vIGdlbmVyaWMg
b3ZlciBhcmd1bWVudCB2ZXJzdXMgdmFyaWFibGUuCi0gICAgaW50IG51bWJlck9mUmVjb3Zlcmll
cygpIGNvbnN0IHsgcmV0dXJuIG1fYXJndW1lbnRzLnNpemUoKSArIG1fdmFyaWFibGVzLnNpemUo
KTsgfQotICAgIGNvbnN0IFZhbHVlUmVjb3ZlcnkmIHZhbHVlUmVjb3ZlcnkoaW50IGluZGV4KSBj
b25zdAotICAgIHsKLSAgICAgICAgaWYgKGluZGV4IDwgKGludCltX2FyZ3VtZW50cy5zaXplKCkp
Ci0gICAgICAgICAgICByZXR1cm4gbV9hcmd1bWVudHNbaW5kZXhdOwotICAgICAgICByZXR1cm4g
bV92YXJpYWJsZXNbaW5kZXggLSBtX2FyZ3VtZW50cy5zaXplKCldOwotICAgIH0KLSAgICBib29s
IGlzQXJndW1lbnQoaW50IGluZGV4KSBjb25zdCB7IHJldHVybiBpbmRleCA8IChpbnQpbV9hcmd1
bWVudHMuc2l6ZSgpOyB9Ci0gICAgYm9vbCBpc1ZhcmlhYmxlKGludCBpbmRleCkgY29uc3QgeyBy
ZXR1cm4gIWlzQXJndW1lbnQoaW5kZXgpOyB9Ci0gICAgaW50IGFyZ3VtZW50Rm9ySW5kZXgoaW50
IGluZGV4KSBjb25zdAotICAgIHsKLSAgICAgICAgcmV0dXJuIGluZGV4OwotICAgIH0KLSAgICBp
bnQgdmFyaWFibGVGb3JJbmRleChpbnQgaW5kZXgpIGNvbnN0Ci0gICAgewotICAgICAgICByZXR1
cm4gaW5kZXggLSBtX2FyZ3VtZW50cy5zaXplKCk7Ci0gICAgfQotICAgIGludCBvcGVyYW5kRm9y
QXJndW1lbnQoaW50IGFyZ3VtZW50KSBjb25zdAotICAgIHsKLSAgICAgICAgcmV0dXJuIGFyZ3Vt
ZW50IC0gbV9hcmd1bWVudHMuc2l6ZSgpIC0gUmVnaXN0ZXJGaWxlOjpDYWxsRnJhbWVIZWFkZXJT
aXplOwotICAgIH0KLSAgICBpbnQgb3BlcmFuZEZvckluZGV4KGludCBpbmRleCkgY29uc3QKLSAg
ICB7Ci0gICAgICAgIGlmIChpbmRleCA8IChpbnQpbV9hcmd1bWVudHMuc2l6ZSgpKQotICAgICAg
ICAgICAgcmV0dXJuIG9wZXJhbmRGb3JBcmd1bWVudChpbmRleCk7Ci0gICAgICAgIHJldHVybiBp
bmRleCAtIG1fYXJndW1lbnRzLnNpemUoKTsKLSAgICB9Ci0gICAgCi0jaWZuZGVmIE5ERUJVRwot
ICAgIHZvaWQgZHVtcChGSUxFKiBvdXQpIGNvbnN0OwotI2VuZGlmCi0gICAgCi0gICAgVmVjdG9y
PFZhbHVlUmVjb3ZlcnksIDA+IG1fYXJndW1lbnRzOwotICAgIFZlY3RvcjxWYWx1ZVJlY292ZXJ5
LCAwPiBtX3ZhcmlhYmxlczsKLSAgICBpbnQgbV9sYXN0U2V0T3BlcmFuZDsKLX07Ci10eXBlZGVm
IFNlZ21lbnRlZFZlY3RvcjxPU1JFeGl0LCAxNj4gT1NSRXhpdFZlY3RvcjsKLQogLy8gPT09IFNw
ZWN1bGF0aXZlSklUID09PQogLy8KIC8vIFRoZSBTcGVjdWxhdGl2ZUpJVCBpcyB1c2VkIHRvIGdl
bmVyYXRlIGEgZmFzdCwgYnV0IHBvdGVudGlhbGx5Cg==
</data>
<flag name="review"
          id="112476"
          type_id="1"
          status="+"
          setter="barraclough"
    />
          </attachment>
      

    </bug>

</bugzilla>